[Swfdec] 70 commits - configure.ac libswfdec-gtk/Makefile.am libswfdec-gtk/swfdec-gtk.h libswfdec-gtk/swfdec_gtk_loader.c libswfdec-gtk/swfdec_gtk_player.c libswfdec-gtk/swfdec_gtk_socket.c libswfdec-gtk/swfdec_gtk_socket.h libswfdec-gtk/swfdec_playback_alsa.c libswfdec-gtk/swfdec_playback_oss.c libswfdec-gtk/swfdec_playback_pa.c libswfdec/Makefile.am libswfdec/swfdec_amf.c libswfdec/swfdec_as_context.c libswfdec/swfdec_as_context.h libswfdec/swfdec_as_frame.c libswfdec/swfdec_as_frame_internal.h libswfdec/swfdec_as_function.c libswfdec/swfdec_as_function.h libswfdec/swfdec_as_internal.h libswfdec/swfdec_as_interpret.c libswfdec/swfdec_as_object.c libswfdec/swfdec_as_strings.c libswfdec/swfdec_event.c libswfdec/swfdec_event.h libswfdec/swfdec_file_loader.c libswfdec/swfdec_flash_security.c libswfdec/swfdec_flash_security.h libswfdec/swfdec_function_list.c libswfdec/swfdec_function_list.h libswfdec/swfdec.h libswfdec/swfdec_initialize.as libswfdec/swfdec_initialize.h libswfdec/swfdec_internal.h libswfdec/swfdec_interval.c libswfdec/swfdec_interval.h libswfdec/swfdec_loader.c libswfdec/swfdec_loader.h libswfdec/swfdec_loader_internal.h libswfdec/swfdec_loadertarget.c libswfdec/swfdec_loadertarget.h libswfdec/swfdec_load_object_as.c libswfdec/swfdec_load_object.c libswfdec/swfdec_load_object.h libswfdec/swfdec_movie.c libswfdec/swfdec_movie_clip_loader.c libswfdec/swfdec_movie.h libswfdec/swfdec_net_stream_as.c libswfdec/swfdec_net_stream.c libswfdec/swfdec_net_stream.h libswfdec/swfdec_player_as.c libswfdec/swfdec_player.c libswfdec/swfdec_player_internal.h libswfdec/swfdec_policy_file.c libswfdec/swfdec_policy_file.h libswfdec/swfdec_policy_loader.c libswfdec/swfdec_policy_loader.h libswfdec/swfdec_resource.c libswfdec/swfdec_resource.h libswfdec/swfdec_resource_request.c libswfdec/swfdec_resource_request.h libswfdec/swfdec_ringbuffer.c libswfdec/swfdec_ringbuffer.h libswfdec/swfdec_sandbox.c libswfdec/swfdec_sandbox.h libswfdec/swfdec_security_allow.c libswfdec/swfdec_security_allow.h libswfdec/swfdec_security.c libswfdec/swfdec_security.h libswfdec/swfdec_socket.c libswfdec/swfdec_socket.h libswfdec/swfdec_sprite_movie_as.c libswfdec/swfdec_sprite_movie.c libswfdec/swfdec_stream.c libswfdec/swfdec_stream.h libswfdec/swfdec_stream_target.c libswfdec/swfdec_stream_target.h libswfdec/swfdec_system_security.c libswfdec/swfdec_text_field_movie.c libswfdec/swfdec_url.c libswfdec/swfdec_url.h libswfdec/swfdec_video_movie_as.c libswfdec/swfdec_video_movie.c libswfdec/swfdec_xml_socket.c libswfdec/swfdec_xml_socket.h player/Makefile.am player/swfdec_slow_loader.c player/swfdec_slow_loader.h player/swfplay.c test/custom test/rtmp test/sound test/swfdec_test.c test/trace tools/crashfinder.c tools/dump.c vivified/core
Benjamin Otte
company at kemper.freedesktop.org
Mon Jan 21 14:14:09 PST 2008
configure.ac | 29
dev/null |binary
libswfdec-gtk/Makefile.am | 6
libswfdec-gtk/swfdec-gtk.h | 1
libswfdec-gtk/swfdec_gtk_loader.c | 45
libswfdec-gtk/swfdec_gtk_player.c | 5
libswfdec-gtk/swfdec_gtk_socket.c | 220 ++
libswfdec-gtk/swfdec_gtk_socket.h | 42
libswfdec-gtk/swfdec_playback_alsa.c | 28
libswfdec-gtk/swfdec_playback_oss.c | 12
libswfdec-gtk/swfdec_playback_pa.c | 16
libswfdec/Makefile.am | 31
libswfdec/swfdec.h | 2
libswfdec/swfdec_amf.c | 2
libswfdec/swfdec_as_context.c | 47
libswfdec/swfdec_as_context.h | 6
libswfdec/swfdec_as_frame.c | 29
libswfdec/swfdec_as_frame_internal.h | 4
libswfdec/swfdec_as_function.c | 28
libswfdec/swfdec_as_function.h | 2
libswfdec/swfdec_as_internal.h | 20
libswfdec/swfdec_as_interpret.c | 35
libswfdec/swfdec_as_object.c | 100 -
libswfdec/swfdec_as_strings.c | 2
libswfdec/swfdec_event.c | 5
libswfdec/swfdec_event.h | 2
libswfdec/swfdec_file_loader.c | 29
libswfdec/swfdec_flash_security.c | 313 ---
libswfdec/swfdec_flash_security.h | 74
libswfdec/swfdec_function_list.c | 132 +
libswfdec/swfdec_function_list.h | 50
libswfdec/swfdec_initialize.as | 5
libswfdec/swfdec_initialize.h | 3266 ++++++++++++++++-----------------
libswfdec/swfdec_internal.h | 12
libswfdec/swfdec_interval.c | 11
libswfdec/swfdec_interval.h | 2
libswfdec/swfdec_load_object.c | 224 +-
libswfdec/swfdec_load_object.h | 24
libswfdec/swfdec_load_object_as.c | 53
libswfdec/swfdec_loader.c | 322 ---
libswfdec/swfdec_loader.h | 24
libswfdec/swfdec_loader_internal.h | 30
libswfdec/swfdec_loadertarget.c | 137 -
libswfdec/swfdec_loadertarget.h | 66
libswfdec/swfdec_movie.c | 65
libswfdec/swfdec_movie.h | 4
libswfdec/swfdec_movie_clip_loader.c | 7
libswfdec/swfdec_net_stream.c | 160 +
libswfdec/swfdec_net_stream.h | 3
libswfdec/swfdec_net_stream_as.c | 4
libswfdec/swfdec_player.c | 159 -
libswfdec/swfdec_player_as.c | 2
libswfdec/swfdec_player_internal.h | 42
libswfdec/swfdec_policy_file.c | 350 +++
libswfdec/swfdec_policy_file.h | 65
libswfdec/swfdec_policy_loader.c | 255 --
libswfdec/swfdec_policy_loader.h | 63
libswfdec/swfdec_resource.c | 355 ++-
libswfdec/swfdec_resource.h | 12
libswfdec/swfdec_resource_request.c | 311 ---
libswfdec/swfdec_resource_request.h | 96
libswfdec/swfdec_ringbuffer.c | 18
libswfdec/swfdec_ringbuffer.h | 18
libswfdec/swfdec_sandbox.c | 303 +++
libswfdec/swfdec_sandbox.h | 83
libswfdec/swfdec_security.c | 86
libswfdec/swfdec_security.h | 68
libswfdec/swfdec_security_allow.c | 80
libswfdec/swfdec_security_allow.h | 53
libswfdec/swfdec_socket.c | 99 +
libswfdec/swfdec_socket.h | 58
libswfdec/swfdec_sprite_movie.c | 15
libswfdec/swfdec_sprite_movie_as.c | 15
libswfdec/swfdec_stream.c | 399 ++++
libswfdec/swfdec_stream.h | 68
libswfdec/swfdec_stream_target.c | 136 +
libswfdec/swfdec_stream_target.h | 67
libswfdec/swfdec_system_security.c | 3
libswfdec/swfdec_text_field_movie.c | 19
libswfdec/swfdec_url.c | 236 ++
libswfdec/swfdec_url.h | 13
libswfdec/swfdec_video_movie.c | 5
libswfdec/swfdec_video_movie_as.c | 13
libswfdec/swfdec_xml_socket.c | 198 +-
libswfdec/swfdec_xml_socket.h | 56
player/Makefile.am | 4
player/swfdec_slow_loader.c | 153 -
player/swfdec_slow_loader.h | 60
player/swfplay.c | 13
test/custom/Makefile.am | 2
test/custom/button-hittest-5.swf |binary
test/custom/button-hittest-5.swf.trace | 9
test/custom/button-hittest-6.swf |binary
test/custom/button-hittest-6.swf.trace | 9
test/custom/button-hittest-7.swf |binary
test/custom/button-hittest-7.swf.trace | 9
test/custom/button-hittest-8.swf |binary
test/custom/button-hittest-8.swf.trace | 9
test/custom/button-hittest.c | 85
test/custom/button-hittest.stas | 64
test/custom/button-hittest.sts |binary
test/rtmp/.gitignore | 10
test/rtmp/Makefile.am | 8
test/rtmp/rtmp_server.c | 98
test/sound/sound.c | 6
test/swfdec_test.c | 4
test/trace/Makefile.am | 13
test/trace/button-hittest-5.swf.act | 17
test/trace/button-hittest-5.swf.trace | 9
test/trace/button-hittest-6.swf.act | 17
test/trace/button-hittest-6.swf.trace | 9
test/trace/button-hittest-7.swf.act | 17
test/trace/button-hittest-7.swf.trace | 9
test/trace/button-hittest-8.swf.act | 17
test/trace/button-hittest-8.swf.trace | 9
test/trace/button-hittest.c | 85
tools/crashfinder.c | 7
tools/dump.c | 5
vivified/core/vivi_application.c | 2
119 files changed, 5509 insertions(+), 4805 deletions(-)
New commits:
commit ea80c5463857eb5d4d7d4a201131637da833fecf
Author: Benjamin Otte <otte at gnome.org>
Date: Mon Jan 21 23:13:16 2008 +0100
move last mouse test into the custom dir
(why wasn't it there before?)
diff --git a/test/custom/Makefile.am b/test/custom/Makefile.am
index 0e937d8..f596de7 100644
--- a/test/custom/Makefile.am
+++ b/test/custom/Makefile.am
@@ -32,6 +32,8 @@ EXTRA_DIST = \
button-hittest-8.swf \
button-hittest-8.swf.trace \
button-hittest.c \
+ button-hittest.stas \
+ button-hittest.sts \
definebutton-5.swf \
definebutton-5.swf.trace \
definebutton-6.swf \
diff --git a/test/custom/button-hittest-5.swf b/test/custom/button-hittest-5.swf
new file mode 100644
index 0000000..18ace29
Binary files /dev/null and b/test/custom/button-hittest-5.swf differ
diff --git a/test/custom/button-hittest-5.swf.trace b/test/custom/button-hittest-5.swf.trace
new file mode 100644
index 0000000..c91a351
--- /dev/null
+++ b/test/custom/button-hittest-5.swf.trace
@@ -0,0 +1,9 @@
+button Idle => OverUp: _level0
+button OverUp => OverDown: _level0
+button OverDown => OutDown: _level0
+button OutDown => OverDown: _level0
+button OverDown => OverUp: _level0
+button OverUp => OverDown: _level0
+button OverDown => OutDown: _level0
+button OutDown => Idle: _level0
+button Idle => OverUp: _level0
diff --git a/test/custom/button-hittest-6.swf b/test/custom/button-hittest-6.swf
new file mode 100644
index 0000000..b2bf0ec
Binary files /dev/null and b/test/custom/button-hittest-6.swf differ
diff --git a/test/custom/button-hittest-6.swf.trace b/test/custom/button-hittest-6.swf.trace
new file mode 100644
index 0000000..ed871dc
--- /dev/null
+++ b/test/custom/button-hittest-6.swf.trace
@@ -0,0 +1,9 @@
+button Idle => OverUp: _level0.instance1
+button OverUp => OverDown: _level0.instance1
+button OverDown => OutDown: _level0.instance1
+button OutDown => OverDown: _level0.instance1
+button OverDown => OverUp: _level0.instance1
+button OverUp => OverDown: _level0.instance1
+button OverDown => OutDown: _level0.instance1
+button OutDown => Idle: _level0.instance1
+button Idle => OverUp: _level0
diff --git a/test/custom/button-hittest-7.swf b/test/custom/button-hittest-7.swf
new file mode 100644
index 0000000..9646812
Binary files /dev/null and b/test/custom/button-hittest-7.swf differ
diff --git a/test/custom/button-hittest-7.swf.trace b/test/custom/button-hittest-7.swf.trace
new file mode 100644
index 0000000..ed871dc
--- /dev/null
+++ b/test/custom/button-hittest-7.swf.trace
@@ -0,0 +1,9 @@
+button Idle => OverUp: _level0.instance1
+button OverUp => OverDown: _level0.instance1
+button OverDown => OutDown: _level0.instance1
+button OutDown => OverDown: _level0.instance1
+button OverDown => OverUp: _level0.instance1
+button OverUp => OverDown: _level0.instance1
+button OverDown => OutDown: _level0.instance1
+button OutDown => Idle: _level0.instance1
+button Idle => OverUp: _level0
diff --git a/test/custom/button-hittest-8.swf b/test/custom/button-hittest-8.swf
new file mode 100644
index 0000000..af501e5
Binary files /dev/null and b/test/custom/button-hittest-8.swf differ
diff --git a/test/custom/button-hittest-8.swf.trace b/test/custom/button-hittest-8.swf.trace
new file mode 100644
index 0000000..ed871dc
--- /dev/null
+++ b/test/custom/button-hittest-8.swf.trace
@@ -0,0 +1,9 @@
+button Idle => OverUp: _level0.instance1
+button OverUp => OverDown: _level0.instance1
+button OverDown => OutDown: _level0.instance1
+button OutDown => OverDown: _level0.instance1
+button OverDown => OverUp: _level0.instance1
+button OverUp => OverDown: _level0.instance1
+button OverDown => OutDown: _level0.instance1
+button OutDown => Idle: _level0.instance1
+button Idle => OverUp: _level0
diff --git a/test/custom/button-hittest.c b/test/custom/button-hittest.c
new file mode 100644
index 0000000..9cb574e
--- /dev/null
+++ b/test/custom/button-hittest.c
@@ -0,0 +1,85 @@
+/* gcc `pkg-config --libs --cflags libming` button-hittest.c -o button-hittest && ./button-hittest
+ */
+
+#include <ming.h>
+
+static const char *button_events[] = { "Idle => OverUp", "OverUp => Idle", "OverUp => OverDown", "OverDown => OverUp", "OverDown => OutDown", "OutDown => OverDown", "OutDown => Idle", "Idle => OutDown", "OverDown => Idle" };
+
+static void
+add_button_events (SWFButton button)
+{
+ char script[100];
+ unsigned int i;
+
+ for (i = 0; i < sizeof (button_events) / sizeof (button_events[0]); i++) {
+ sprintf (script, "trace (\"button %s: \" + this);", button_events[i]);
+ SWFButton_addAction (button, newSWFAction (script), (1 << i));
+ }
+}
+
+static SWFCharacter
+get_rectangle (int r, int g, int b)
+{
+ SWFShape shape;
+ SWFFillStyle fill;
+
+ shape = newSWFShape ();
+ fill = SWFShape_addSolidFillStyle (shape, r, g, b, 255);
+ SWFShape_setRightFillStyle (shape, fill);
+ SWFShape_drawLineTo (shape, 100, 0);
+ SWFShape_drawLineTo (shape, 100, 100);
+ SWFShape_drawLineTo (shape, 0, 100);
+ SWFShape_drawLineTo (shape, 0, 0);
+
+ return (SWFCharacter) shape;
+}
+
+static void
+do_movie (int version)
+{
+ char name[100];
+ SWFMovie movie;
+ SWFDisplayItem item;
+ SWFButton button, button2;
+ SWFButtonRecord rec;
+
+ movie = newSWFMovieWithVersion (version);
+ SWFMovie_setRate (movie, 10);
+ SWFMovie_setDimension (movie, 200, 150);
+
+ button = newSWFButton ();
+ add_button_events (button);
+ rec = SWFButton_addCharacter (button, get_rectangle (255, 0, 0), SWFBUTTON_HIT);
+ SWFButtonRecord_setDepth (rec, 42);
+ SWFButtonRecord_moveTo (rec, 40, 40);
+ SWFButtonRecord_scaleTo (rec, 0.5, 0.5);
+
+ button2 = newSWFButton ();
+ SWFButton_setMenu (button2, 1);
+ add_button_events (button2);
+ rec = SWFButton_addCharacter (button2, get_rectangle (0, 255, 0), SWFBUTTON_HIT);
+ SWFButtonRecord_scaleTo (rec, 2, 1.5);
+ rec = SWFButton_addCharacter (button2, (SWFCharacter) button, SWFBUTTON_UP | SWFBUTTON_OVER | SWFBUTTON_DOWN);
+
+ item = SWFMovie_add (movie, button2);
+
+ SWFMovie_nextFrame (movie);
+
+ sprintf (name, "button-hittest-%d.swf", version);
+ SWFMovie_save (movie, name);
+}
+
+int
+main (int argc, char **argv)
+{
+ int i;
+
+ if (Ming_init ())
+ return 1;
+
+ for (i = 8; i >= 5; i--) {
+ do_movie (i);
+ }
+
+ return 0;
+}
diff --git a/test/custom/button-hittest.stas b/test/custom/button-hittest.stas
new file mode 100644
index 0000000..865329d
--- /dev/null
+++ b/test/custom/button-hittest.stas
@@ -0,0 +1,64 @@
+/* Swfdec
+ * Copyright (C) 2008 Benjamin Otte <otte at gnome.org>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301 USA
+ */
+
+run_test = function (t, file) {
+ var e;
+ print ("Testing " + file);
+ try {
+ t.reset (file);
+ t.trace (file + ".trace");
+ t.advance (1000);
+ t.mouse_move (50, 50);
+ t.advance (1000);
+ t.mouse_press (50, 50);
+ t.advance (1000);
+ t.mouse_move (140, 140);
+ t.advance (1000);
+ t.mouse_move (50, 50);
+ t.advance (1000);
+ t.mouse_release (50, 50);
+ t.advance (1000);
+ t.mouse_press (50, 50);
+ t.advance (1000);
+ t.mouse_move (140, 140);
+ t.advance (1000);
+ t.mouse_release (140, 140);
+ t.advance (1000);
+ t.trace ();
+ } catch (e) {
+ if (e) {
+ error (e);
+ return false;
+ }
+ };
+ Native.print (" OK\n");
+ return true;
+};
+
+filenames.sort ();
+t = new Test ();
+fail = [];
+for (var i = 0; i < filenames.length; i++) {
+ if (!run_test (t, filenames[i]))
+ fail.push (filenames[i]);
+};
+if (fail.length > 0) {
+ error (fail.join ("\n "));
+ throw (fail.length + " failures");
+}
diff --git a/test/custom/button-hittest.sts b/test/custom/button-hittest.sts
new file mode 100644
index 0000000..378773f
Binary files /dev/null and b/test/custom/button-hittest.sts differ
diff --git a/test/trace/Makefile.am b/test/trace/Makefile.am
index 84a7c48..a706bd0 100644
--- a/test/trace/Makefile.am
+++ b/test/trace/Makefile.am
@@ -315,19 +315,6 @@ EXTRA_DIST = \
boolean-properties-7.swf.trace \
boolean-properties-8.swf \
boolean-properties-8.swf.trace \
- button-hittest-5.swf \
- button-hittest-5.swf.act \
- button-hittest-5.swf.trace \
- button-hittest-6.swf \
- button-hittest-6.swf.act \
- button-hittest-6.swf.trace \
- button-hittest-7.swf \
- button-hittest-7.swf.act \
- button-hittest-7.swf.trace \
- button-hittest-8.swf \
- button-hittest-8.swf.act \
- button-hittest-8.swf.trace \
- button-hittest.c \
button-properties.as \
button-properties-5.swf \
button-properties-5.swf.trace \
diff --git a/test/trace/button-hittest-5.swf b/test/trace/button-hittest-5.swf
deleted file mode 100644
index 18ace29..0000000
Binary files a/test/trace/button-hittest-5.swf and /dev/null differ
diff --git a/test/trace/button-hittest-5.swf.act b/test/trace/button-hittest-5.swf.act
deleted file mode 100644
index 352902b..0000000
--- a/test/trace/button-hittest-5.swf.act
+++ /dev/null
@@ -1,17 +0,0 @@
-wait 1000
-move 50, 50
-wait 1000
-down
-wait 1000
-move 140, 140
-wait 1000
-move 50, 50
-wait 1000
-up
-wait 1000
-down
-wait 1000
-move 140, 140
-wait 1000
-up
-wait 1000
diff --git a/test/trace/button-hittest-5.swf.trace b/test/trace/button-hittest-5.swf.trace
deleted file mode 100644
index c91a351..0000000
--- a/test/trace/button-hittest-5.swf.trace
+++ /dev/null
@@ -1,9 +0,0 @@
-button Idle => OverUp: _level0
-button OverUp => OverDown: _level0
-button OverDown => OutDown: _level0
-button OutDown => OverDown: _level0
-button OverDown => OverUp: _level0
-button OverUp => OverDown: _level0
-button OverDown => OutDown: _level0
-button OutDown => Idle: _level0
-button Idle => OverUp: _level0
diff --git a/test/trace/button-hittest-6.swf b/test/trace/button-hittest-6.swf
deleted file mode 100644
index b2bf0ec..0000000
Binary files a/test/trace/button-hittest-6.swf and /dev/null differ
diff --git a/test/trace/button-hittest-6.swf.act b/test/trace/button-hittest-6.swf.act
deleted file mode 100644
index 352902b..0000000
--- a/test/trace/button-hittest-6.swf.act
+++ /dev/null
@@ -1,17 +0,0 @@
-wait 1000
-move 50, 50
-wait 1000
-down
-wait 1000
-move 140, 140
-wait 1000
-move 50, 50
-wait 1000
-up
-wait 1000
-down
-wait 1000
-move 140, 140
-wait 1000
-up
-wait 1000
diff --git a/test/trace/button-hittest-6.swf.trace b/test/trace/button-hittest-6.swf.trace
deleted file mode 100644
index ed871dc..0000000
--- a/test/trace/button-hittest-6.swf.trace
+++ /dev/null
@@ -1,9 +0,0 @@
-button Idle => OverUp: _level0.instance1
-button OverUp => OverDown: _level0.instance1
-button OverDown => OutDown: _level0.instance1
-button OutDown => OverDown: _level0.instance1
-button OverDown => OverUp: _level0.instance1
-button OverUp => OverDown: _level0.instance1
-button OverDown => OutDown: _level0.instance1
-button OutDown => Idle: _level0.instance1
-button Idle => OverUp: _level0
diff --git a/test/trace/button-hittest-7.swf b/test/trace/button-hittest-7.swf
deleted file mode 100644
index 9646812..0000000
Binary files a/test/trace/button-hittest-7.swf and /dev/null differ
diff --git a/test/trace/button-hittest-7.swf.act b/test/trace/button-hittest-7.swf.act
deleted file mode 100644
index 352902b..0000000
--- a/test/trace/button-hittest-7.swf.act
+++ /dev/null
@@ -1,17 +0,0 @@
-wait 1000
-move 50, 50
-wait 1000
-down
-wait 1000
-move 140, 140
-wait 1000
-move 50, 50
-wait 1000
-up
-wait 1000
-down
-wait 1000
-move 140, 140
-wait 1000
-up
-wait 1000
diff --git a/test/trace/button-hittest-7.swf.trace b/test/trace/button-hittest-7.swf.trace
deleted file mode 100644
index ed871dc..0000000
--- a/test/trace/button-hittest-7.swf.trace
+++ /dev/null
@@ -1,9 +0,0 @@
-button Idle => OverUp: _level0.instance1
-button OverUp => OverDown: _level0.instance1
-button OverDown => OutDown: _level0.instance1
-button OutDown => OverDown: _level0.instance1
-button OverDown => OverUp: _level0.instance1
-button OverUp => OverDown: _level0.instance1
-button OverDown => OutDown: _level0.instance1
-button OutDown => Idle: _level0.instance1
-button Idle => OverUp: _level0
diff --git a/test/trace/button-hittest-8.swf b/test/trace/button-hittest-8.swf
deleted file mode 100644
index af501e5..0000000
Binary files a/test/trace/button-hittest-8.swf and /dev/null differ
diff --git a/test/trace/button-hittest-8.swf.act b/test/trace/button-hittest-8.swf.act
deleted file mode 100644
index 352902b..0000000
--- a/test/trace/button-hittest-8.swf.act
+++ /dev/null
@@ -1,17 +0,0 @@
-wait 1000
-move 50, 50
-wait 1000
-down
-wait 1000
-move 140, 140
-wait 1000
-move 50, 50
-wait 1000
-up
-wait 1000
-down
-wait 1000
-move 140, 140
-wait 1000
-up
-wait 1000
diff --git a/test/trace/button-hittest-8.swf.trace b/test/trace/button-hittest-8.swf.trace
deleted file mode 100644
index ed871dc..0000000
--- a/test/trace/button-hittest-8.swf.trace
+++ /dev/null
@@ -1,9 +0,0 @@
-button Idle => OverUp: _level0.instance1
-button OverUp => OverDown: _level0.instance1
-button OverDown => OutDown: _level0.instance1
-button OutDown => OverDown: _level0.instance1
-button OverDown => OverUp: _level0.instance1
-button OverUp => OverDown: _level0.instance1
-button OverDown => OutDown: _level0.instance1
-button OutDown => Idle: _level0.instance1
-button Idle => OverUp: _level0
diff --git a/test/trace/button-hittest.c b/test/trace/button-hittest.c
deleted file mode 100644
index 9cb574e..0000000
--- a/test/trace/button-hittest.c
+++ /dev/null
@@ -1,85 +0,0 @@
-/* gcc `pkg-config --libs --cflags libming` button-hittest.c -o button-hittest && ./button-hittest
- */
-
-#include <ming.h>
-
-static const char *button_events[] = { "Idle => OverUp", "OverUp => Idle", "OverUp => OverDown", "OverDown => OverUp", "OverDown => OutDown", "OutDown => OverDown", "OutDown => Idle", "Idle => OutDown", "OverDown => Idle" };
-
-static void
-add_button_events (SWFButton button)
-{
- char script[100];
- unsigned int i;
-
- for (i = 0; i < sizeof (button_events) / sizeof (button_events[0]); i++) {
- sprintf (script, "trace (\"button %s: \" + this);", button_events[i]);
- SWFButton_addAction (button, newSWFAction (script), (1 << i));
- }
-}
-
-static SWFCharacter
-get_rectangle (int r, int g, int b)
-{
- SWFShape shape;
- SWFFillStyle fill;
-
- shape = newSWFShape ();
- fill = SWFShape_addSolidFillStyle (shape, r, g, b, 255);
- SWFShape_setRightFillStyle (shape, fill);
- SWFShape_drawLineTo (shape, 100, 0);
- SWFShape_drawLineTo (shape, 100, 100);
- SWFShape_drawLineTo (shape, 0, 100);
- SWFShape_drawLineTo (shape, 0, 0);
-
- return (SWFCharacter) shape;
-}
-
-static void
-do_movie (int version)
-{
- char name[100];
- SWFMovie movie;
- SWFDisplayItem item;
- SWFButton button, button2;
- SWFButtonRecord rec;
-
- movie = newSWFMovieWithVersion (version);
- SWFMovie_setRate (movie, 10);
- SWFMovie_setDimension (movie, 200, 150);
-
- button = newSWFButton ();
- add_button_events (button);
- rec = SWFButton_addCharacter (button, get_rectangle (255, 0, 0), SWFBUTTON_HIT);
- SWFButtonRecord_setDepth (rec, 42);
- SWFButtonRecord_moveTo (rec, 40, 40);
- SWFButtonRecord_scaleTo (rec, 0.5, 0.5);
-
- button2 = newSWFButton ();
- SWFButton_setMenu (button2, 1);
- add_button_events (button2);
- rec = SWFButton_addCharacter (button2, get_rectangle (0, 255, 0), SWFBUTTON_HIT);
- SWFButtonRecord_scaleTo (rec, 2, 1.5);
- rec = SWFButton_addCharacter (button2, (SWFCharacter) button, SWFBUTTON_UP | SWFBUTTON_OVER | SWFBUTTON_DOWN);
-
- item = SWFMovie_add (movie, button2);
-
- SWFMovie_nextFrame (movie);
-
- sprintf (name, "button-hittest-%d.swf", version);
- SWFMovie_save (movie, name);
-}
-
-int
-main (int argc, char **argv)
-{
- int i;
-
- if (Ming_init ())
- return 1;
-
- for (i = 8; i >= 5; i--) {
- do_movie (i);
- }
-
- return 0;
-}
commit 18dc0b56ffe036cc334ceeadbc124b9260b8751d
Merge: 2da50c6... 235dfab...
Author: Benjamin Otte <otte at gnome.org>
Date: Mon Jan 21 22:51:32 2008 +0100
Merge branch 'master' into rtmp
Conflicts:
libswfdec/swfdec_as_interpret.c
libswfdec/swfdec_flash_security.c
libswfdec/swfdec_flash_security.h
libswfdec/swfdec_load_object.c
libswfdec/swfdec_player.c
libswfdec/swfdec_player_internal.h
libswfdec/swfdec_policy_file.c
libswfdec/swfdec_policy_file.h
libswfdec/swfdec_resource.c
libswfdec/swfdec_resource_request.c
libswfdec/swfdec_security.c
libswfdec/swfdec_security.h
libswfdec/swfdec_security_allow.c
commit 235dfab205081dce3fb63f46f85d5479ef84f622
Author: Benjamin Otte <otte at gnome.org>
Date: Wed Jan 16 16:34:23 2008 +0100
add public API functions
diff --git a/libswfdec/swfdec_player.c b/libswfdec/swfdec_player.c
index 86be3a5..008924a 100644
--- a/libswfdec/swfdec_player.c
+++ b/libswfdec/swfdec_player.c
@@ -870,6 +870,9 @@ swfdec_player_dispose (GObject *object)
g_hash_table_destroy (priv->registered_classes);
g_hash_table_destroy (priv->scripting_callbacks);
+ g_list_foreach (priv->loading_policy_files, (GFunc) g_object_unref, NULL);
+ g_list_free (priv->loading_policy_files);
+ priv->loading_policy_files = NULL;
g_slist_foreach (priv->policy_files, (GFunc) g_object_unref, NULL);
g_slist_free (priv->policy_files);
priv->policy_files = NULL;
diff --git a/libswfdec/swfdec_player_internal.h b/libswfdec/swfdec_player_internal.h
index 72833e2..a574a9f 100644
--- a/libswfdec/swfdec_player_internal.h
+++ b/libswfdec/swfdec_player_internal.h
@@ -41,6 +41,7 @@ typedef enum {
typedef void (* SwfdecActionFunc) (gpointer object, gpointer data);
typedef gboolean (* SwfdecAudioRemoveFunc) (SwfdecAudio *audio, gpointer data);
+typedef void (* SwfdecPolicyFunc) (SwfdecPlayer *player, gboolean allow, gpointer data);
typedef struct _SwfdecTimeout SwfdecTimeout;
struct _SwfdecTimeout {
@@ -133,7 +134,8 @@ struct _SwfdecPlayerPrivate
SwfdecRingBuffer * actions[SWFDEC_PLAYER_N_ACTION_QUEUES]; /* all actions we've queued up so far */
/* security */
- GSList * policy_files; /* list of SwfdecPolicyLoader objects, most recent first */
+ GList * loading_policy_files; /* list of loading SwfdecPlayerLoader - newest first */
+ GSList * policy_files; /* list of SwfdecPolicyLoader that finished loading */
};
void swfdec_player_initialize (SwfdecPlayer * player,
@@ -221,6 +223,15 @@ void swfdec_player_global_to_stage (SwfdecPlayer * player,
double * x,
double * y);
void swfdec_player_update_scale (SwfdecPlayer * player);
+
+/* in swfdec_policy_file.c */
+gboolean swfdec_player_allow_now (SwfdecPlayer * player,
+ const SwfdecURL * url);
+void swfdec_player_allow_or_load (SwfdecPlayer * player,
+ const SwfdecURL * url,
+ const SwfdecURL * load_url,
+ SwfdecPolicyFunc func,
+ gpointer data);
/* in swfdec_as_interpret.c */
SwfdecMovie * swfdec_player_get_movie_from_value
(SwfdecPlayer * player,
diff --git a/libswfdec/swfdec_policy_file.c b/libswfdec/swfdec_policy_file.c
index d0f3e90..e275119 100644
--- a/libswfdec/swfdec_policy_file.c
+++ b/libswfdec/swfdec_policy_file.c
@@ -34,6 +34,20 @@
#include "swfdec_xml.h"
#include "swfdec_xml_node.h"
+typedef struct _SwfdecPolicyFileRequest SwfdecPolicyFileRequest;
+struct _SwfdecPolicyFileRequest {
+ SwfdecURL * url; /* URL we are supposed to check */
+ SwfdecPolicyFunc func; /* function to call when we know if access is (not) allowed */
+ gpointer data; /* data to pass to func */
+};
+
+static void
+swfdec_policy_file_request_free (SwfdecPolicyFileRequest *request)
+{
+ swfdec_url_free (request->url);
+ g_slice_free (SwfdecPolicyFileRequest, request);
+}
+
/*** PARSING THE FILE ***/
static void
@@ -108,13 +122,46 @@ swfdec_policy_file_target_get_player (SwfdecLoaderTarget *target)
}
static void
+swfdec_policy_file_finished_loading (SwfdecPolicyFile *file, const char *text)
+{
+ SwfdecPlayerPrivate *priv;
+ SwfdecPolicyFile *next;
+ GList *link;
+
+ swfdec_loader_set_target (file->stream, NULL);
+ file->stream = NULL;
+
+ if (text)
+ swfdec_policy_file_parse (file, text);
+
+ priv = file->player->priv;
+ link = g_list_find (priv->loading_policy_files, file);
+ next = link->next ? link->next->data : NULL;
+ priv->loading_policy_files = g_list_delete_link (priv->loading_policy_files, link);
+ priv->policy_files = g_slist_prepend (priv->policy_files, file);
+ if (next) {
+ next->requests = g_slist_concat (next->requests, file->requests);
+ } else {
+ GSList *walk;
+
+ for (walk = file->requests; walk; walk = walk->next) {
+ SwfdecPolicyFileRequest *request = walk->data;
+ gboolean allow = swfdec_player_allow_now (file->player, request->url);
+ request->func (file->player, allow, request->data);
+ swfdec_policy_file_request_free (request);
+ }
+ g_slist_free (file->requests);
+ }
+ file->requests = NULL;
+}
+
+static void
swfdec_policy_file_target_error (SwfdecLoaderTarget *target,
SwfdecLoader *loader)
{
SwfdecPolicyFile *file = SWFDEC_POLICY_FILE (target);
- swfdec_loader_set_target (loader, NULL);
- file->stream = NULL;
+ swfdec_policy_file_finished_loading (file, NULL);
}
static void
@@ -131,10 +178,8 @@ swfdec_policy_file_target_eof (SwfdecLoaderTarget *target,
if (text == NULL) {
SWFDEC_ERROR ("couldn't get text from crossdomain policy file %s",
swfdec_url_get_url (file->load_url));
- return;
}
-
- swfdec_policy_file_parse (file, text);
+ swfdec_policy_file_finished_loading (file, text);
g_free (text);
}
@@ -160,6 +205,11 @@ swfdec_policy_file_dispose (GObject *object)
swfdec_loader_set_target (file->stream, NULL);
g_object_unref (file->stream);
file->stream = NULL;
+ g_slist_foreach (file->requests, (GFunc) swfdec_policy_file_request_free, NULL);
+ g_slist_free (file->requests);
+ file->requests = NULL;
+ } else {
+ g_assert (file->requests == NULL);
}
swfdec_url_free (file->load_url);
swfdec_url_free (file->url);
@@ -199,7 +249,8 @@ swfdec_policy_file_new (SwfdecPlayer *player, const SwfdecURL *url)
SWFDEC_LOADER_REQUEST_DEFAULT, NULL, 0);
swfdec_loader_set_target (file->stream, SWFDEC_LOADER_TARGET (file));
}
- player->priv->policy_files = g_slist_prepend (player->priv->policy_files, file);
+ player->priv->loading_policy_files =
+ g_list_prepend (player->priv->loading_policy_files, file);
return file;
}
@@ -243,15 +294,53 @@ swfdec_policy_file_allow (SwfdecPolicyFile *file, const SwfdecURL *url)
return FALSE;
}
-void
-swfdec_player_load_policy_file (SwfdecPlayer *player, const SwfdecURL *url)
+/*** PLAYER API ***/
+
+gboolean
+swfdec_player_allow_now (SwfdecPlayer *player, const SwfdecURL *url)
{
- SWFDEC_FIXME ("implement");
+ GSList *walk;
+
+ g_return_val_if_fail (SWFDEC_IS_PLAYER (player), FALSE);
+ g_return_val_if_fail (url != NULL, FALSE);
+
+ for (walk = player->priv->policy_files; walk; walk = walk->next) {
+ if (swfdec_policy_file_allow (walk->data, url))
+ return TRUE;
+ }
+ return FALSE;
}
void
-swfdec_player_check_policy_files (SwfdecPlayer *player,
- SwfdecPolicyFileFunc func, gpointer data)
+swfdec_player_allow_or_load (SwfdecPlayer *player, const SwfdecURL *url,
+ const SwfdecURL *load_url, SwfdecPolicyFunc func, gpointer data)
{
- SWFDEC_FIXME ("implement");
+ SwfdecPlayerPrivate *priv;
+ SwfdecPolicyFileRequest *request;
+ SwfdecPolicyFile *file;
+
+ g_return_if_fail (SWFDEC_IS_PLAYER (player));
+ g_return_if_fail (url != NULL);
+ g_return_if_fail (func);
+
+ if (swfdec_player_allow_now (player, url)) {
+ func (player, TRUE, data);
+ return;
+ }
+ if (load_url)
+ swfdec_policy_file_new (player, load_url);
+
+ priv = player->priv;
+ if (priv->loading_policy_files == NULL) {
+ func (player, FALSE, data);
+ return;
+ }
+ request = g_slice_new (SwfdecPolicyFileRequest);
+ request->url = swfdec_url_copy (url);
+ request->func = func;
+ request->data = data;
+
+ file = priv->loading_policy_files->data;
+ file->requests = g_slist_append (file->requests, request);
}
+
diff --git a/libswfdec/swfdec_policy_file.h b/libswfdec/swfdec_policy_file.h
index 5342983..9a89f81 100644
--- a/libswfdec/swfdec_policy_file.h
+++ b/libswfdec/swfdec_policy_file.h
@@ -28,7 +28,6 @@ G_BEGIN_DECLS
typedef struct _SwfdecPolicyFile SwfdecPolicyFile;
typedef struct _SwfdecPolicyFileClass SwfdecPolicyFileClass;
-typedef void (* SwfdecPolicyFileFunc) (SwfdecPlayer *player, gboolean allow, gpointer data);
#define SWFDEC_TYPE_POLICY_FILE (swfdec_policy_file_get_type())
#define SWFDEC_IS_POLICY_FILE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), SWFDEC_TYPE_POLICY_FILE))
@@ -45,6 +44,8 @@ struct _SwfdecPolicyFile {
SwfdecURL * url; /* parent url we check with */
SwfdecLoader * stream; /* stream we are loading or NULL if done loading */
GSList * allowed_hosts; /* list of GPatternSpec of the allowed hosts */
+
+ GSList * requests; /* requests waiting for this file to finish loading */
};
struct _SwfdecPolicyFileClass {
@@ -59,12 +60,6 @@ gboolean swfdec_policy_file_is_loading (SwfdecPolicyFile * file);
gboolean swfdec_policy_file_allow (SwfdecPolicyFile * file,
const SwfdecURL * url);
-void swfdec_player_load_policy_file (SwfdecPlayer * player,
- const SwfdecURL * url);
-void swfdec_player_check_policy_files(SwfdecPlayer * player,
- SwfdecPolicyFileFunc func,
- gpointer data);
-
G_END_DECLS
#endif
commit d4877028c3d5b810309fc751328bfbc33eac16af
Author: Benjamin Otte <otte at gnome.org>
Date: Wed Jan 16 11:10:53 2008 +0100
add initial (compiling) bunch of code that changes policy files handling
Everythng compiles, nothing works
diff --git a/libswfdec/Makefile.am b/libswfdec/Makefile.am
index 9320e97..985eb28 100644
--- a/libswfdec/Makefile.am
+++ b/libswfdec/Makefile.am
@@ -113,7 +113,7 @@ libswfdec_source_files = \
swfdec_player_as.c \
swfdec_player_scripting.c \
swfdec_print_job.c \
- swfdec_policy_loader.c \
+ swfdec_policy_file.c \
swfdec_rect.c \
swfdec_rectangle.c \
swfdec_resource.c \
@@ -261,7 +261,7 @@ noinst_HEADERS = \
swfdec_path.h \
swfdec_pattern.h \
swfdec_player_internal.h \
- swfdec_policy_loader.h \
+ swfdec_policy_file.h \
swfdec_rect.h \
swfdec_resource.h \
swfdec_resource_request.h \
diff --git a/libswfdec/swfdec_flash_security.c b/libswfdec/swfdec_flash_security.c
index 21fe688..ae7fce0 100644
--- a/libswfdec/swfdec_flash_security.c
+++ b/libswfdec/swfdec_flash_security.c
@@ -23,7 +23,6 @@
#include <string.h>
#include "swfdec_flash_security.h"
-#include "swfdec_policy_loader.h"
#include "swfdec_debug.h"
#include "swfdec_security_allow.h"
@@ -47,227 +46,10 @@ swfdec_flash_security_allow (SwfdecSecurity *guard, SwfdecSecurity *key)
}
}
-static gboolean
-swfdec_flash_security_match_domain (const SwfdecURL *guard, const SwfdecURL *key)
-{
- return g_ascii_strcasecmp (swfdec_url_get_host (guard), swfdec_url_get_host (key)) == 0;
-}
-
-typedef struct {
- SwfdecURL * url;
- SwfdecURLAllowFunc callback;
- gpointer user_data;
-} SwfdecAllowURLPending;
-
-static void
-swfdec_flash_security_call_pending (SwfdecFlashSecurity *sec, const char *host,
- gboolean allow)
-{
- GSList *iter, *prev, *next;
- SwfdecAllowURLPending *pending;
-
- g_return_if_fail (SWFDEC_IS_FLASH_SECURITY (sec));
- g_return_if_fail (host != NULL);
-
- prev = NULL;
- for (iter = sec->allow_url_pending; iter != NULL; iter = next) {
- next = iter->next;
- pending = iter->data;
-
- if (!g_ascii_strcasecmp (swfdec_url_get_host (pending->url), host)) {
- pending->callback (pending->url, allow, pending->user_data);
- swfdec_url_free (pending->url);
- g_free (pending);
- g_slist_free_1 (iter);
-
- if (prev != NULL) {
- prev->next = iter->next;
- iter = prev;
- iter->next = next;
- } else {
- iter = NULL;
- sec->allow_url_pending = next;
- }
- }
-
- prev = iter;
- }
-}
-
-static void
-swfdec_flash_security_policy_loader_done (SwfdecPolicyLoader *policy_loader,
- gboolean allow)
-{
- SwfdecFlashSecurity *sec = policy_loader->sec;
- char *host = g_strdup (policy_loader->host);
-
- if (allow) {
- sec->crossdomain_allowed = g_slist_prepend (sec->crossdomain_allowed, host);
- } else {
- sec->crossdomain_denied = g_slist_prepend (sec->crossdomain_denied, host);
- }
-
- sec->policy_loaders = g_slist_remove (sec->policy_loaders, policy_loader);
-
- swfdec_flash_security_call_pending (sec, host, allow);
-
- swfdec_policy_loader_free (policy_loader);
-}
-
-static void
-swfdec_flash_security_get_cross_domain_policy (SwfdecFlashSecurity *sec,
- const char *host)
-{
- GSList *iter;
- SwfdecPolicyLoader *policy_loader;
-
- g_return_if_fail (SWFDEC_IS_FLASH_SECURITY (sec));
- g_return_if_fail (host != NULL);
-
- for (iter = sec->policy_loaders; iter != NULL; iter = iter->next) {
- policy_loader = iter->data;
-
- if (!g_ascii_strcasecmp (policy_loader->host, host))
- return;
- }
-
- policy_loader = swfdec_policy_loader_new (sec, host,
- swfdec_flash_security_policy_loader_done);
- if (policy_loader == NULL) {
- sec->crossdomain_denied = g_slist_prepend (sec->crossdomain_denied,
- g_strdup (host));
- swfdec_flash_security_call_pending (sec, host, FALSE);
- return;
- }
-
- sec->policy_loaders = g_slist_prepend (sec->policy_loaders, policy_loader);
-}
-
-static void
-swfdec_flash_security_allow_cross_domain (SwfdecFlashSecurity *sec,
- const SwfdecURL *url, SwfdecURLAllowFunc callback, gpointer user_data)
-{
- SwfdecAllowURLPending *pending;
- const char *host;
-
- g_assert (SWFDEC_IS_FLASH_SECURITY (sec));
- g_assert (url != NULL);
- g_assert (callback != NULL);
-
- host = swfdec_url_get_host (url);
-
- if (g_slist_find_custom (sec->crossdomain_allowed, host,
- (GCompareFunc)g_ascii_strcasecmp)) {
- callback (url, 1, user_data);
- return;
- }
-
- if (g_slist_find_custom (sec->crossdomain_denied, host,
- (GCompareFunc)g_ascii_strcasecmp)) {
- callback (url, 0, user_data);
- return;
- }
-
- pending = g_new (SwfdecAllowURLPending, 1);
- pending->url = swfdec_url_copy (url);
- pending->callback = callback;
- pending->user_data = user_data;
-
- sec->allow_url_pending = g_slist_prepend (sec->allow_url_pending, pending);
-
- swfdec_flash_security_get_cross_domain_policy (sec, host);
-}
-
-static void
-swfdec_flash_security_allow_url (SwfdecSecurity *guard, const SwfdecURL *url,
- SwfdecURLAllowFunc callback, gpointer user_data)
-{
- SwfdecFlashSecurity *sec = SWFDEC_FLASH_SECURITY (guard);
- int status;
-
- switch (sec->sandbox) {
- case SWFDEC_SANDBOX_NONE:
- status = 0;
- break;
- case SWFDEC_SANDBOX_REMOTE:
- if (swfdec_url_is_local (url)) {
- status = 0;
- } else if (swfdec_flash_security_match_domain (sec->url, url)) {
- status = 1;
- } else {
- swfdec_flash_security_allow_cross_domain (sec, url, callback,
- user_data);
- return;
- }
- break;
- case SWFDEC_SANDBOX_LOCAL_FILE:
- if (swfdec_url_is_local (url)) {
- status = 1;
- } else {
- status = 0;
- }
- break;
- case SWFDEC_SANDBOX_LOCAL_NETWORK:
- if (swfdec_url_is_local (url)) {
- status = 0;
- } else {
- swfdec_flash_security_allow_cross_domain (sec, url, callback,
- user_data);
- return;
- }
- break;
- case SWFDEC_SANDBOX_LOCAL_TRUSTED:
- status = 1;
- break;
- default:
- g_assert_not_reached ();
- status = 0;
- break;
- }
-
- callback (url, status, user_data);
-}
-
-void
-swfdec_flash_security_free_pending (SwfdecFlashSecurity *sec)
-{
- GSList *iter;
-
- for (iter = sec->allow_url_pending; iter != NULL; iter = iter->next) {
- SwfdecAllowURLPending *pending = iter->data;
- pending->callback (pending->url, -1, pending->user_data);
- swfdec_url_free (pending->url);
- g_free (pending);
- }
- g_slist_free (sec->allow_url_pending);
- sec->allow_url_pending = NULL;
-}
-
static void
swfdec_flash_security_dispose (GObject *object)
{
SwfdecFlashSecurity *sec = SWFDEC_FLASH_SECURITY (object);
- GSList *iter;
-
- g_assert (sec->allow_url_pending == NULL);
-
- for (iter = sec->policy_loaders; iter != NULL; iter = iter->next) {
- swfdec_policy_loader_free (iter->data);
- }
- g_slist_free (sec->policy_loaders);
- sec->policy_loaders = NULL;
-
- for (iter = sec->crossdomain_allowed; iter != NULL; iter = iter->next) {
- g_free (iter->data);
- }
- g_slist_free (sec->crossdomain_allowed);
- sec->crossdomain_allowed = NULL;
-
- for (iter = sec->crossdomain_denied; iter != NULL; iter = iter->next) {
- g_free (iter->data);
- }
- g_slist_free (sec->crossdomain_denied);
- sec->crossdomain_denied = NULL;
if (sec->url) {
swfdec_url_free (sec->url);
@@ -287,7 +69,6 @@ swfdec_flash_security_class_init (SwfdecFlashSecurityClass *klass)
object_class->dispose = swfdec_flash_security_dispose;
security_class->allow = swfdec_flash_security_allow;
- security_class->allow_url = swfdec_flash_security_allow_url;
}
static void
diff --git a/libswfdec/swfdec_flash_security.h b/libswfdec/swfdec_flash_security.h
index fcb2aaf..8ee888d 100644
--- a/libswfdec/swfdec_flash_security.h
+++ b/libswfdec/swfdec_flash_security.h
@@ -50,12 +50,6 @@ struct _SwfdecFlashSecurity
SwfdecPlayer *player;
SwfdecSandboxType sandbox; /* sandbox we are operating in */
SwfdecURL * url; /* url this security was loaded from */
-
- GSList * policy_loaders;
- GSList * crossdomain_allowed;
- GSList * crossdomain_denied;
-
- GSList * allow_url_pending;
};
struct _SwfdecFlashSecurityClass
diff --git a/libswfdec/swfdec_player.c b/libswfdec/swfdec_player.c
index 847a6fb..86be3a5 100644
--- a/libswfdec/swfdec_player.c
+++ b/libswfdec/swfdec_player.c
@@ -870,6 +870,10 @@ swfdec_player_dispose (GObject *object)
g_hash_table_destroy (priv->registered_classes);
g_hash_table_destroy (priv->scripting_callbacks);
+ g_slist_foreach (priv->policy_files, (GFunc) g_object_unref, NULL);
+ g_slist_free (priv->policy_files);
+ priv->policy_files = NULL;
+
while (priv->roots)
swfdec_movie_destroy (priv->roots->data);
if (priv->resource) {
diff --git a/libswfdec/swfdec_player_internal.h b/libswfdec/swfdec_player_internal.h
index 06d8eea..72833e2 100644
--- a/libswfdec/swfdec_player_internal.h
+++ b/libswfdec/swfdec_player_internal.h
@@ -131,6 +131,9 @@ struct _SwfdecPlayerPrivate
/* iterating */
GList * movies; /* list of all movies that want to be iterated */
SwfdecRingBuffer * actions[SWFDEC_PLAYER_N_ACTION_QUEUES]; /* all actions we've queued up so far */
+
+ /* security */
+ GSList * policy_files; /* list of SwfdecPolicyLoader objects, most recent first */
};
void swfdec_player_initialize (SwfdecPlayer * player,
diff --git a/libswfdec/swfdec_policy_file.c b/libswfdec/swfdec_policy_file.c
new file mode 100644
index 0000000..d0f3e90
--- /dev/null
+++ b/libswfdec/swfdec_policy_file.c
@@ -0,0 +1,257 @@
+/* Swfdec
+ * Copyright (C) 2007 Benjamin Otte <otte at gnome.org>
+ * 2007 Pekka Lampila <pekka.lampila at iki.fi>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301 USA
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include <string.h>
+
+#include "swfdec_policy_file.h"
+#include "swfdec_flash_security.h"
+#include "swfdec_resource.h"
+#include "swfdec_as_strings.h"
+#include "swfdec_debug.h"
+#include "swfdec_loader_internal.h"
+#include "swfdec_player_internal.h"
+#include "swfdec_xml.h"
+#include "swfdec_xml_node.h"
+
+/*** PARSING THE FILE ***/
+
+static void
+swfdec_policy_file_parse (SwfdecPolicyFile *file, const char *text)
+{
+ SwfdecXml *xml;
+ gint32 i, j;
+
+ g_return_if_fail (SWFDEC_IS_POLICY_FILE (file));
+ g_return_if_fail (text != NULL);
+
+ xml = swfdec_xml_new_no_properties (SWFDEC_AS_CONTEXT (file->player), text, TRUE);
+
+ if (xml == NULL) {
+ SWFDEC_ERROR ("failed to create an XML object for crossdomain policy");
+ return;
+ }
+
+ if (SWFDEC_XML_NODE (xml)->type != SWFDEC_XML_NODE_ELEMENT) {
+ SWFDEC_LOG ("empty crossdomain policy file");
+ return;
+ }
+
+ for (i = 0; i < swfdec_xml_node_num_children (SWFDEC_XML_NODE (xml)); i++) {
+ SwfdecXmlNode *node_cdp =
+ swfdec_xml_node_get_child (SWFDEC_XML_NODE (xml), i);
+
+ if (node_cdp->type != SWFDEC_XML_NODE_ELEMENT)
+ continue;
+
+ if (g_ascii_strcasecmp (node_cdp->name, "cross-domain-policy") != 0)
+ continue;
+
+ for (j = 0; j < swfdec_xml_node_num_children (node_cdp); j++) {
+ SwfdecXmlNode *node_aaf = swfdec_xml_node_get_child (node_cdp, j);
+ const char *value;
+ GPatternSpec *pattern;
+ char *value_lower;
+
+ if (node_aaf->type != SWFDEC_XML_NODE_ELEMENT)
+ continue;
+
+ if (g_ascii_strcasecmp (node_aaf->name, "allow-access-from") != 0)
+ continue;
+
+ // FIXME: secure attribute?
+
+ value = swfdec_xml_node_get_attribute (node_aaf, SWFDEC_AS_STR_domain);
+ if (value == NULL)
+ continue;
+
+ if (strchr (value, '?') != NULL) {
+ SWFDEC_WARNING ("'?' in allowed domain attribute for %s", value);
+ continue;
+ }
+
+ value_lower = g_ascii_strdown (value, -1);
+ pattern = g_pattern_spec_new (value_lower);
+ g_free (value_lower);
+
+ file->allowed_hosts = g_slist_prepend (file->allowed_hosts, pattern);
+ }
+ }
+}
+
+/*** SWFDEC_LOADER_TARGET ***/
+
+static SwfdecPlayer *
+swfdec_policy_file_target_get_player (SwfdecLoaderTarget *target)
+{
+ return SWFDEC_POLICY_FILE (target)->player;
+}
+
+static void
+swfdec_policy_file_target_error (SwfdecLoaderTarget *target,
+ SwfdecLoader *loader)
+{
+ SwfdecPolicyFile *file = SWFDEC_POLICY_FILE (target);
+
+ swfdec_loader_set_target (loader, NULL);
+ file->stream = NULL;
+}
+
+static void
+swfdec_policy_file_target_eof (SwfdecLoaderTarget *target,
+ SwfdecLoader *loader)
+{
+ SwfdecPolicyFile *file = SWFDEC_POLICY_FILE (target);
+ char *text;
+
+ swfdec_loader_set_target (loader, NULL);
+ file->stream = NULL;
+ text = swfdec_loader_get_text (loader, 8);
+
+ if (text == NULL) {
+ SWFDEC_ERROR ("couldn't get text from crossdomain policy file %s",
+ swfdec_url_get_url (file->load_url));
+ return;
+ }
+
+ swfdec_policy_file_parse (file, text);
+ g_free (text);
+}
+
+static void
+swfdec_policy_file_loader_target_init (SwfdecLoaderTargetInterface *iface)
+{
+ iface->get_player = swfdec_policy_file_target_get_player;
+ iface->eof = swfdec_policy_file_target_eof;
+ iface->error = swfdec_policy_file_target_error;
+}
+
+/*** SWFDEC_POLICY_FILE ***/
+
+G_DEFINE_TYPE_WITH_CODE (SwfdecPolicyFile, swfdec_policy_file, G_TYPE_OBJECT,
+ G_IMPLEMENT_INTERFACE (SWFDEC_TYPE_LOADER_TARGET, swfdec_policy_file_loader_target_init))
+
+static void
+swfdec_policy_file_dispose (GObject *object)
+{
+ SwfdecPolicyFile *file = SWFDEC_POLICY_FILE (object);
+
+ if (file->stream) {
+ swfdec_loader_set_target (file->stream, NULL);
+ g_object_unref (file->stream);
+ file->stream = NULL;
+ }
+ swfdec_url_free (file->load_url);
+ swfdec_url_free (file->url);
+
+ G_OBJECT_CLASS (swfdec_policy_file_parent_class)->dispose (object);
+}
+
+static void
+swfdec_policy_file_class_init (SwfdecPolicyFileClass *klass)
+{
+ GObjectClass *object_class = G_OBJECT_CLASS (klass);
+
+ object_class->dispose = swfdec_policy_file_dispose;
+}
+
+static void
+swfdec_policy_file_init (SwfdecPolicyFile *policy_file)
+{
+}
+
+SwfdecPolicyFile *
+swfdec_policy_file_new (SwfdecPlayer *player, const SwfdecURL *url)
+{
+ SwfdecPolicyFile *file;
+
+ g_return_val_if_fail (SWFDEC_IS_PLAYER (player), NULL);
+ g_return_val_if_fail (url != NULL, NULL);
+
+ file = g_object_new (SWFDEC_TYPE_POLICY_FILE, NULL);
+ file->player = player;
+ file->load_url = swfdec_url_copy (url);
+ file->url = swfdec_url_new_parent (url);
+ if (swfdec_url_has_protocol (url, "xmlsocket")) {
+ SWFDEC_FIXME ("implement xmlsocket: protocol");
+ } else {
+ file->stream = swfdec_loader_load (player->priv->resource->loader, url,
+ SWFDEC_LOADER_REQUEST_DEFAULT, NULL, 0);
+ swfdec_loader_set_target (file->stream, SWFDEC_LOADER_TARGET (file));
+ }
+ player->priv->policy_files = g_slist_prepend (player->priv->policy_files, file);
+
+ return file;
+}
+
+gboolean
+swfdec_policy_file_is_loading (SwfdecPolicyFile *file)
+{
+ g_return_val_if_fail (SWFDEC_IS_POLICY_FILE (file), FALSE);
+
+ return file->stream != NULL;
+}
+
+gboolean
+swfdec_policy_file_allow (SwfdecPolicyFile *file, const SwfdecURL *url)
+{
+ GSList *walk;
+ gsize len;
+ char *emantsoh;
+ const char *hostname;
+
+ g_return_val_if_fail (SWFDEC_IS_POLICY_FILE (file), FALSE);
+ g_return_val_if_fail (url != NULL, FALSE);
+
+ hostname = swfdec_url_get_host (url);
+ /* This is a hack that simplifies the following code. As the pattern can not
+ * contain any ?, the only pattern that matches the string "?" is the pattern
+ * "*"
+ */
+ if (hostname == NULL)
+ hostname = "?";
+ len = strlen (hostname);
+ emantsoh = g_utf8_strreverse (emantsoh, len);
+ for (walk = file->allowed_hosts; walk; walk = walk->next) {
+ GPatternSpec *pattern = walk->data;
+ if (g_pattern_match (pattern, len, hostname, emantsoh)) {
+ g_free (emantsoh);
+ return TRUE;
+ }
+ }
+ g_free (emantsoh);
+ return FALSE;
+}
+
+void
+swfdec_player_load_policy_file (SwfdecPlayer *player, const SwfdecURL *url)
+{
+ SWFDEC_FIXME ("implement");
+}
+
+void
+swfdec_player_check_policy_files (SwfdecPlayer *player,
+ SwfdecPolicyFileFunc func, gpointer data)
+{
+ SWFDEC_FIXME ("implement");
+}
diff --git a/libswfdec/swfdec_policy_file.h b/libswfdec/swfdec_policy_file.h
new file mode 100644
index 0000000..5342983
--- /dev/null
+++ b/libswfdec/swfdec_policy_file.h
@@ -0,0 +1,70 @@
+/* Swfdec
+ * Copyright (C) 2007 Benjamin Otte <otte at gnome.org>
+ * 2007 Pekka Lampila <pekka.lampila at iki.fi>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301 USA
+ */
+
+#ifndef _SWFDEC_FLASH_SECURITY_POLICY_H_
+#define _SWFDEC_FLASH_SECURITY_POLICY_H_
+
+#include <libswfdec/swfdec.h>
+#include <libswfdec/swfdec_player.h>
+
+G_BEGIN_DECLS
+
+typedef struct _SwfdecPolicyFile SwfdecPolicyFile;
+typedef struct _SwfdecPolicyFileClass SwfdecPolicyFileClass;
+typedef void (* SwfdecPolicyFileFunc) (SwfdecPlayer *player, gboolean allow, gpointer data);
+
+#define SWFDEC_TYPE_POLICY_FILE (swfdec_policy_file_get_type())
+#define SWFDEC_IS_POLICY_FILE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), SWFDEC_TYPE_POLICY_FILE))
+#define SWFDEC_IS_POLICY_FILE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), SWFDEC_TYPE_POLICY_FILE))
+#define SWFDEC_POLICY_FILE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), SWFDEC_TYPE_POLICY_FILE, SwfdecPolicyFile))
+#define SWFDEC_POLICY_FILE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), SWFDEC_TYPE_POLICY_FILE, SwfdecPolicyFileClass))
+#define SWFDEC_POLICY_FILE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), SWFDEC_TYPE_POLICY_FILE, SwfdecPolicyFileClass))
+
+struct _SwfdecPolicyFile {
+ GObject object;
+
+ SwfdecPlayer * player; /* player we're loaded from */
+ SwfdecURL * load_url; /* url we're loaded from */
+ SwfdecURL * url; /* parent url we check with */
+ SwfdecLoader * stream; /* stream we are loading or NULL if done loading */
+ GSList * allowed_hosts; /* list of GPatternSpec of the allowed hosts */
+};
+
+struct _SwfdecPolicyFileClass {
+ GObjectClass object_class;
+};
+
+GType swfdec_policy_file_get_type (void);
+
+SwfdecPolicyFile *swfdec_policy_file_new (SwfdecPlayer * player,
+ const SwfdecURL * url);
+gboolean swfdec_policy_file_is_loading (SwfdecPolicyFile * file);
+gboolean swfdec_policy_file_allow (SwfdecPolicyFile * file,
+ const SwfdecURL * url);
+
+void swfdec_player_load_policy_file (SwfdecPlayer * player,
+ const SwfdecURL * url);
+void swfdec_player_check_policy_files(SwfdecPlayer * player,
+ SwfdecPolicyFileFunc func,
+ gpointer data);
+
+
+G_END_DECLS
+#endif
diff --git a/libswfdec/swfdec_policy_loader.c b/libswfdec/swfdec_policy_loader.c
deleted file mode 100644
index 6d04c75..0000000
--- a/libswfdec/swfdec_policy_loader.c
+++ /dev/null
@@ -1,255 +0,0 @@
-/* Swfdec
- * Copyright (C) 2007 Benjamin Otte <otte at gnome.org>
- * 2007 Pekka Lampila <pekka.lampila at iki.fi>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor,
- * Boston, MA 02110-1301 USA
- */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include <string.h>
-
-#include "swfdec_policy_loader.h"
-#include "swfdec_flash_security.h"
-#include "swfdec_resource.h"
-#include "swfdec_as_strings.h"
-#include "swfdec_debug.h"
-#include "swfdec_loader_internal.h"
-#include "swfdec_player_internal.h"
-#include "swfdec_xml.h"
-#include "swfdec_xml_node.h"
-
-/*** SWFDEC_LOADER_TARGET ***/
-
-static SwfdecPlayer *
-swfdec_policy_loader_target_get_player (SwfdecLoaderTarget *target)
-{
- return SWFDEC_POLICY_LOADER (target)->sec->player;
-}
-
-static void
-swfdec_policy_loader_target_error (SwfdecLoaderTarget *target,
- SwfdecLoader *loader)
-{
- SwfdecPolicyLoader *policy_loader = SWFDEC_POLICY_LOADER (target);
-
- policy_loader->func (policy_loader, FALSE);
-}
-
-static gboolean
-swfdec_policy_loader_check (SwfdecAsContext *context, const char *text,
- const char *host)
-{
- SwfdecXml *xml;
- gint32 i, j;
- char *host_lower;
-
- g_return_val_if_fail (SWFDEC_IS_AS_CONTEXT (context), FALSE);
- g_return_val_if_fail (text != NULL, FALSE);
-
- xml = swfdec_xml_new_no_properties (context, text, TRUE);
-
- if (xml == NULL) {
- SWFDEC_ERROR ("failed to create an XML object for crossdomain policy");
- return FALSE;
- }
-
- if (SWFDEC_XML_NODE (xml)->type != SWFDEC_XML_NODE_ELEMENT) {
- SWFDEC_LOG ("empty crossdomain policy file");
- return FALSE;
- }
-
- if (host != NULL) {
- host_lower = g_ascii_strdown (host, -1);
- } else {
- host_lower = NULL;
- }
-
- for (i = 0; i < swfdec_xml_node_num_children (SWFDEC_XML_NODE (xml)); i++) {
- SwfdecXmlNode *node_cdp =
- swfdec_xml_node_get_child (SWFDEC_XML_NODE (xml), i);
-
- if (node_cdp->type != SWFDEC_XML_NODE_ELEMENT)
- continue;
-
- if (g_ascii_strcasecmp (node_cdp->name, "cross-domain-policy") != 0)
- continue;
-
- for (j = 0; j < swfdec_xml_node_num_children (node_cdp); j++) {
- SwfdecXmlNode *node_aaf = swfdec_xml_node_get_child (node_cdp, j);
- const char *value;
- GPatternSpec *pattern;
- char *value_lower;
-
- if (node_aaf->type != SWFDEC_XML_NODE_ELEMENT)
- continue;
-
- if (g_ascii_strcasecmp (node_aaf->name, "allow-access-from") != 0)
- continue;
-
- // FIXME: secure attribute?
-
- value = swfdec_xml_node_get_attribute (node_aaf, SWFDEC_AS_STR_domain);
- if (value == NULL)
- continue;
-
- if (host != NULL) {
- // GPatternSpec uses ? as a wildcard character, but we won't
- // And there can't be a host that has ? character
- if (strchr (value, '?') != NULL)
- continue;
-
- value_lower = g_ascii_strdown (value, -1);
- pattern = g_pattern_spec_new (value_lower);
- g_free (value_lower);
-
- if (g_pattern_match_string (pattern, host_lower)) {
- g_free (host_lower);
- g_pattern_spec_free (pattern);
- return TRUE;
- }
-
- g_pattern_spec_free (pattern);
- } else {
- // in case we don't have a host name, only match asterisks
- if (value[strspn (value, "*")] == '\0')
- return TRUE;
- }
- }
- }
-
- g_free (host_lower);
-
- return FALSE;
-}
-
-static void
-swfdec_policy_loader_target_eof (SwfdecLoaderTarget *target,
- SwfdecLoader *loader)
-{
- SwfdecPolicyLoader *policy_loader = SWFDEC_POLICY_LOADER (target);
- gboolean allow;
- char *text;
-
- text = swfdec_loader_get_text (policy_loader->loader, 8);
-
- if (text == NULL) {
- SWFDEC_ERROR ("couldn't get text from crossdomain policy");
- allow = FALSE;
- } else {
- allow = swfdec_policy_loader_check (
- SWFDEC_AS_CONTEXT (policy_loader->sec->player), text,
- swfdec_url_get_host (policy_loader->sec->url));
- }
-
- g_free (text);
-
- SWFDEC_LOG ("crossdomain policy %s access from %s to %s",
- (allow ? "allows" : "doesn't allow"),
- swfdec_url_get_host (policy_loader->sec->url), policy_loader->host);
-
- policy_loader->func (policy_loader, allow);
-}
-
-static void
-swfdec_policy_loader_loader_target_init (SwfdecLoaderTargetInterface *iface)
-{
- iface->get_player = swfdec_policy_loader_target_get_player;
- iface->eof = swfdec_policy_loader_target_eof;
- iface->error = swfdec_policy_loader_target_error;
-}
-
-/*** SWFDEC_POLICY_LOADER ***/
-
-G_DEFINE_TYPE_WITH_CODE (SwfdecPolicyLoader, swfdec_policy_loader, G_TYPE_OBJECT,
- G_IMPLEMENT_INTERFACE (SWFDEC_TYPE_LOADER_TARGET, swfdec_policy_loader_loader_target_init))
-
-static void
-swfdec_policy_loader_dispose (GObject *object)
-{
- SwfdecPolicyLoader *policy_loader = SWFDEC_POLICY_LOADER (object);
-
- g_assert (policy_loader->loader);
- swfdec_loader_set_target (policy_loader->loader, NULL);
- g_object_unref (policy_loader->loader);
- policy_loader->loader = NULL;
-
- g_assert (policy_loader->host);
- g_free (policy_loader->host);
-
- G_OBJECT_CLASS (swfdec_policy_loader_parent_class)->dispose (object);
-}
-
-static void
-swfdec_policy_loader_class_init (SwfdecPolicyLoaderClass *klass)
-{
- GObjectClass *object_class = G_OBJECT_CLASS (klass);
-
- object_class->dispose = swfdec_policy_loader_dispose;
-}
-
-static void
-swfdec_policy_loader_init (SwfdecPolicyLoader *policy_loader)
-{
-}
-
-SwfdecPolicyLoader *
-swfdec_policy_loader_new (SwfdecFlashSecurity *sec, const char *host,
- SwfdecPolicyLoaderFunc func)
-{
- SwfdecPolicyLoader *policy_loader;
- SwfdecURL *url;
- char *url_str;
-
- g_return_val_if_fail (SWFDEC_IS_FLASH_SECURITY (sec), NULL);
- g_return_val_if_fail (host != NULL, NULL);
- g_return_val_if_fail (func != NULL, NULL);
-
- policy_loader = SWFDEC_POLICY_LOADER (g_object_new (
- SWFDEC_TYPE_POLICY_LOADER, NULL));
-
- url_str = g_strdup_printf ("http://%s/crossdomain.xml", host);
- url = swfdec_url_new (url_str);
- g_free (url_str);
- policy_loader->loader = swfdec_loader_load (sec->player->priv->resource->loader,
- url, SWFDEC_LOADER_REQUEST_DEFAULT, NULL, 0);
- swfdec_url_free (url);
-
- if (!policy_loader->loader) {
- g_free (policy_loader);
- return NULL;
- }
-
- policy_loader->sec = sec;
- policy_loader->host = g_strdup (host);
- policy_loader->func = func;
-
- swfdec_loader_set_target (policy_loader->loader,
- SWFDEC_LOADER_TARGET (policy_loader));
- swfdec_loader_set_data_type (policy_loader->loader, SWFDEC_LOADER_DATA_TEXT);
-
- return policy_loader;
-}
-
-void
-swfdec_policy_loader_free (SwfdecPolicyLoader *policy_loader)
-{
- g_return_if_fail (SWFDEC_IS_POLICY_LOADER (policy_loader));
-
- g_object_unref (policy_loader);
-}
diff --git a/libswfdec/swfdec_policy_loader.h b/libswfdec/swfdec_policy_loader.h
deleted file mode 100644
index 525f48e..0000000
--- a/libswfdec/swfdec_policy_loader.h
+++ /dev/null
@@ -1,63 +0,0 @@
-/* Swfdec
- * Copyright (C) 2007 Benjamin Otte <otte at gnome.org>
- * 2007 Pekka Lampila <pekka.lampila at iki.fi>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor,
- * Boston, MA 02110-1301 USA
- */
-
-#ifndef _SWFDEC_FLASH_SECURITY_POLICY_H_
-#define _SWFDEC_FLASH_SECURITY_POLICY_H_
-
-#include <libswfdec/swfdec.h>
-#include <libswfdec/swfdec_as_object.h>
-#include <libswfdec/swfdec_flash_security.h>
-
-G_BEGIN_DECLS
-
-typedef struct _SwfdecPolicyLoader SwfdecPolicyLoader;
-typedef struct _SwfdecPolicyLoaderClass SwfdecPolicyLoaderClass;
-typedef void (* SwfdecPolicyLoaderFunc) (SwfdecPolicyLoader *policy_loader, gboolean allow);
-
-#define SWFDEC_TYPE_POLICY_LOADER (swfdec_policy_loader_get_type())
-#define SWFDEC_IS_POLICY_LOADER(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), SWFDEC_TYPE_POLICY_LOADER))
-#define SWFDEC_IS_POLICY_LOADER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), SWFDEC_TYPE_POLICY_LOADER))
-#define SWFDEC_POLICY_LOADER(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), SWFDEC_TYPE_POLICY_LOADER, SwfdecPolicyLoader))
-#define SWFDEC_POLICY_LOADER_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), SWFDEC_TYPE_POLICY_LOADER, SwfdecPolicyLoaderClass))
-#define SWFDEC_POLICY_LOADER_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), SWFDEC_TYPE_POLICY_LOADER, SwfdecPolicyLoaderClass))
-
-struct _SwfdecPolicyLoader {
- GObject object;
-
- SwfdecLoader * loader;
-
- SwfdecFlashSecurity * sec;
- char * host;
- SwfdecPolicyLoaderFunc func;
-};
-
-struct _SwfdecPolicyLoaderClass {
- GObjectClass object_class;
-};
-
-GType swfdec_policy_loader_get_type (void);
-
-SwfdecPolicyLoader *swfdec_policy_loader_new (SwfdecFlashSecurity * sec,
- const char * host,
- SwfdecPolicyLoaderFunc func);
-void swfdec_policy_loader_free (SwfdecPolicyLoader * policy_loader);
-
-G_END_DECLS
-#endif
diff --git a/libswfdec/swfdec_resource_request.c b/libswfdec/swfdec_resource_request.c
index 8c3ddbf..e367993 100644
--- a/libswfdec/swfdec_resource_request.c
+++ b/libswfdec/swfdec_resource_request.c
@@ -114,8 +114,7 @@ swfdec_player_request_resource_now (SwfdecPlayer *player,
/* create absolute url first */
absolute = swfdec_url_new_relative (swfdec_loader_get_url (player->priv->resource->loader), url);
- swfdec_security_allow_url (security, absolute,
- swfdec_player_request_resource_allow_callback, data);
+ swfdec_player_request_resource_allow_callback (absolute, TRUE, data);
swfdec_url_free (absolute);
}
diff --git a/libswfdec/swfdec_security.c b/libswfdec/swfdec_security.c
index a41f510..ae431a0 100644
--- a/libswfdec/swfdec_security.c
+++ b/libswfdec/swfdec_security.c
@@ -61,26 +61,3 @@ swfdec_security_allow (SwfdecSecurity *guard, SwfdecSecurity *key)
return klass->allow (guard, key);
}
-/**
- * swfdec_security_allow_url:
- * @guard: security that is in effect
- * @url: URL that should be accessed
- *
- * Asks @guard to check if the given @url may be accessed.
- *
- * Returns: %TRUE if @url may be accessed.
- **/
-void
-swfdec_security_allow_url (SwfdecSecurity *guard, const SwfdecURL *url,
- SwfdecURLAllowFunc callback, gpointer user_data)
-{
- SwfdecSecurityClass *klass;
-
- g_assert (SWFDEC_IS_SECURITY (guard));
- g_assert (url != NULL);
-
- klass = SWFDEC_SECURITY_GET_CLASS (guard);
- g_assert (klass->allow_url);
- klass->allow_url (guard, url, callback, user_data);
-}
-
diff --git a/libswfdec/swfdec_security.h b/libswfdec/swfdec_security.h
index 2933b44..cdc0717 100644
--- a/libswfdec/swfdec_security.h
+++ b/libswfdec/swfdec_security.h
@@ -47,21 +47,13 @@ struct _SwfdecSecurityClass
GObjectClass object_class;
gboolean (* allow) (SwfdecSecurity * guard,
- SwfdecSecurity * from);
- void (* allow_url) (SwfdecSecurity * guard,
- const SwfdecURL * url,
- SwfdecURLAllowFunc callback,
- gpointer user_data);
+ SwfdecSecurity * key);
};
GType swfdec_security_get_type (void);
gboolean swfdec_security_allow (SwfdecSecurity * guard,
SwfdecSecurity * key);
-void swfdec_security_allow_url (SwfdecSecurity * guard,
- const SwfdecURL * url,
- SwfdecURLAllowFunc callback,
- gpointer user_data);
G_END_DECLS
diff --git a/libswfdec/swfdec_security_allow.c b/libswfdec/swfdec_security_allow.c
index e60a949..fb678b4 100644
--- a/libswfdec/swfdec_security_allow.c
+++ b/libswfdec/swfdec_security_allow.c
@@ -35,19 +35,11 @@ swfdec_security_allow_allow (SwfdecSecurity *guard, SwfdecSecurity *key)
}
static void
-swfdec_security_allow_allow_url (SwfdecSecurity *guard, const SwfdecURL *url,
- SwfdecURLAllowFunc callback, gpointer user_data)
-{
- callback (url, TRUE, user_data);
-}
-
-static void
swfdec_security_allow_class_init (SwfdecSecurityAllowClass *klass)
{
SwfdecSecurityClass *security_class = SWFDEC_SECURITY_CLASS (klass);
security_class->allow = swfdec_security_allow_allow;
- security_class->allow_url = swfdec_security_allow_allow_url;
}
static void
commit 3970e970c31adc781eb40cd5499b5b592dd1e390
Author: Benjamin Otte <otte at gnome.org>
Date: Tue Jan 15 10:52:03 2008 +0100
add more functions to SwfdecURL (untested)
These functions are needed by policy file handling
diff --git a/libswfdec/swfdec_url.c b/libswfdec/swfdec_url.c
index 3d57c54..6cdb54f 100644
--- a/libswfdec/swfdec_url.c
+++ b/libswfdec/swfdec_url.c
@@ -50,9 +50,9 @@
struct _SwfdecURL {
char * url; /* the complete url */
- char * protocol; /* http, file, rtmp, ... */
- char * host; /* can be NULL for files */
- guint port; /* can be NULL */
+ char * protocol; /* lowercase, http, file, rtmp, ... */
+ char * host; /* lowercase, can be NULL for files */
+ guint port; /* can be 0 */
char * path; /* can be NULL for root path */
char * query; /* can be NULL */
};
@@ -111,16 +111,16 @@ swfdec_url_new (const char *string)
string = s + 3;
s = strchr (string, '/');
if (s == NULL) {
- url->host = g_strdup (string);
+ url->host = g_ascii_strdown (string, -1);
return url;
}
if (s != string) {
char *colon = swfdec_memrchr (string, ':', s - string);
if (colon) {
url->port = strtoul (colon + 1, &colon, 10);
- url->host = g_strndup (string, colon - string);
+ url->host = g_ascii_strdown (string, colon - string);
} else {
- url->host = g_strndup (string, s - string);
+ url->host = g_ascii_strdown (string, s - string);
}
}
string = s + 1;
@@ -137,6 +137,63 @@ swfdec_url_new (const char *string)
}
/**
+ * swfdec_url_new_components:
+ * @protocol: protocol to use
+ * @hostname: hostname or IP address or %NULL
+ * @port: port number or 0. Must be 0 if no hostname is given
+ * @path: a path or %NULL
+ * @query: the query string or %NULL
+ *
+ * Creates a new URL from the given components.
+ *
+ * Returns: a new url pointing to the url from the given components
+ **/
+SwfdecURL *
+swfdec_url_new_components (const char *protocol, const char *hostname,
+ guint port, const char *path, const char *query)
+{
+ GString *url;
+ SwfdecURL *result;
+
+ g_return_val_if_fail (protocol != NULL, NULL);
+ g_return_val_if_fail (hostname != NULL || port == 0, NULL);
+ g_return_val_if_fail (port < 65536, NULL);
+
+ url = g_string_new (protocol);
+ g_string_append (url, "://");
+ if (hostname) {
+ g_string_append (url, hostname);
+ if (port) {
+ g_string_append_printf (url, ":%u", port);
+ }
+ }
+ g_string_append (url, "/");
+ if (path)
+ g_string_append (url, path);
+ if (query) {
+ g_string_append (url, "?");
+ g_string_append (url, query);
+ }
+ result = swfdec_url_new (url->str);
+ g_string_free (url, TRUE);
+ return result;
+}
+
+/**
+ * swfdec_url_new_parent:
+ * @url: a #SwfdecURL
+ *
+ * Creates a new url that is the parent of @url.
+ *
+ * Returns: a new url pointing to the parent of @url.
+ **/
+SwfdecURL *
+swfdec_url_new_parent (const SwfdecURL *url)
+{
+ return swfdec_url_new_relative (url, "");
+}
+
+/**
* swfdec_url_new_relative:
* @url: a #SwfdecURL
* @string: a relative or absolute URL path
@@ -206,6 +263,7 @@ swfdec_url_copy (const SwfdecURL *url)
copy->url = g_strdup (url->url);
copy->protocol = g_strdup (url->protocol);
copy->host = g_strdup (url->host);
+ copy->port = url->port;
copy->path = g_strdup (url->path);
copy->query = g_strdup (url->query);
@@ -288,7 +346,7 @@ swfdec_url_has_protocol (const SwfdecURL *url, const char *protocol)
* swfdec_url_get_host:
* @url: a #SwfdecURL
*
- * Gets the host for @url.
+ * Gets the host for @url as a lower case string.
*
* Returns: the host or %NULL if none (typically for file URLs).
**/
@@ -354,6 +412,47 @@ swfdec_url_get_query (const SwfdecURL *url)
}
/**
+ * swfdec_url_is_parent:
+ * @parent: the supposed parent url
+ * @child: the supposed child url
+ *
+ * Checks if the given @parent url is a parent url of the given @child url. The
+ * algorithm used is the same as checking policy files if hey apply. If @parent
+ * equals @child, %TRUE is returned. This function does not compare query
+ * strings.
+ *
+ * Returns: %TRUE if @parent is a parent of @child, %FALSE otherwise.
+ **/
+gboolean
+swfdec_url_is_parent (const SwfdecURL *parent, const SwfdecURL *child)
+{
+ gsize len;
+
+ g_return_val_if_fail (parent != NULL, FALSE);
+ g_return_val_if_fail (child != NULL, FALSE);
+
+ if (!g_str_equal (parent->protocol, child->protocol))
+ return FALSE;
+ if (parent->host == NULL) {
+ if (child->host != NULL)
+ return FALSE;
+ } else {
+ if (child->host == NULL || !g_str_equal (parent->host, child->host))
+ return FALSE;
+ }
+ if (parent->port != child->port)
+ return FALSE;
+ if (parent->path == NULL)
+ return TRUE;
+ if (child->path == NULL)
+ return TRUE;
+ len = strlen (parent->path);
+ if (strncmp (parent->path, child->path, len) != 0)
+ return FALSE;
+ return child->path[len] == '\0' || child->path[len] == '/';
+}
+
+/**
* swfdec_url_is_local:
* @url: the url to check
*
diff --git a/libswfdec/swfdec_url.h b/libswfdec/swfdec_url.h
index 3ac0b88..5eaa306 100644
--- a/libswfdec/swfdec_url.h
+++ b/libswfdec/swfdec_url.h
@@ -30,6 +30,12 @@ typedef struct _SwfdecURL SwfdecURL;
GType swfdec_url_get_type (void) G_GNUC_CONST;
SwfdecURL * swfdec_url_new (const char * string);
+SwfdecURL * swfdec_url_new_components (const char * protocol,
+ const char * hostname,
+ guint port,
+ const char * path,
+ const char * query);
+SwfdecURL * swfdec_url_new_parent (const SwfdecURL * url);
SwfdecURL * swfdec_url_new_relative (const SwfdecURL * url,
const char * string);
SwfdecURL * swfdec_url_copy (const SwfdecURL * url);
@@ -45,6 +51,8 @@ const char * swfdec_url_get_query (const SwfdecURL * url);
gboolean swfdec_url_has_protocol (const SwfdecURL * url,
const char * protocol);
+gboolean swfdec_url_is_parent (const SwfdecURL * parent,
+ const SwfdecURL * child);
gboolean swfdec_url_is_local (const SwfdecURL * url);
commit f27d3aa9ac4b7ed3c9803cb71e98fe41cc56526b
Author: Benjamin Otte <otte at gnome.org>
Date: Tue Jan 15 10:51:40 2008 +0100
g_object_notify next-event after a call to advance()
diff --git a/libswfdec/swfdec_player.c b/libswfdec/swfdec_player.c
index f60b7e8..847a6fb 100644
--- a/libswfdec/swfdec_player.c
+++ b/libswfdec/swfdec_player.c
@@ -1392,6 +1392,7 @@ swfdec_player_do_advance (SwfdecPlayer *player, gulong msecs, guint audio_sample
}
g_assert (audio_samples == 0);
+ g_object_notify (G_OBJECT (player), "next-event");
swfdec_player_unlock (player);
}
@@ -1571,7 +1572,7 @@ swfdec_player_class_init (SwfdecPlayerClass *klass)
g_param_spec_enum ("mouse-cursor", "mouse cursor", "how the mouse pointer should be presented",
SWFDEC_TYPE_MOUSE_CURSOR, SWFDEC_MOUSE_CURSOR_NONE, G_PARAM_READABLE));
g_object_class_install_property (object_class, PROP_NEXT_EVENT,
- g_param_spec_long ("next-event", "next event", "how many milliseconds until the next event or 0 when no event pending",
+ g_param_spec_long ("next-event", "next event", "how many milliseconds until the next event or -1 when no event pending",
-1, G_MAXLONG, -1, G_PARAM_READABLE));
g_object_class_install_property (object_class, PROP_CACHE_SIZE,
g_param_spec_uint ("cache-size", "cache size", "maximum cache size in bytes",
commit 1438104e4de0a19f29eed726da5aceea172abfba
Author: Benjamin Otte <otte at gnome.org>
Date: Sat Jan 12 00:23:51 2008 +0100
parse ports seperately
diff --git a/libswfdec/swfdec_url.c b/libswfdec/swfdec_url.c
index fe9ca0a..3d57c54 100644
--- a/libswfdec/swfdec_url.c
+++ b/libswfdec/swfdec_url.c
@@ -20,7 +20,10 @@
#ifdef HAVE_CONFIG_H
#include "config.h"
#endif
+
+#include <stdlib.h>
#include <string.h>
+
#include "swfdec_url.h"
#include "swfdec_debug.h"
@@ -49,6 +52,7 @@ struct _SwfdecURL {
char * url; /* the complete url */
char * protocol; /* http, file, rtmp, ... */
char * host; /* can be NULL for files */
+ guint port; /* can be NULL */
char * path; /* can be NULL for root path */
char * query; /* can be NULL */
};
@@ -65,6 +69,19 @@ swfdec_url_get_type (void)
return type;
}
+static void *
+swfdec_memrchr (const void *s, int c, size_t n)
+{
+ void *cur, *next;
+
+ cur = memchr (s, c, n);
+ if (cur == NULL)
+ return NULL;
+ while ((next = memchr (cur, c, n)))
+ cur = next;
+ return cur;
+}
+
/**
* swfdec_url_new:
* @string: a full-qualified URL encoded in UTF-8
@@ -81,6 +98,7 @@ swfdec_url_new (const char *string)
g_return_val_if_fail (string != NULL, NULL);
+ /* FIXME: error checking? */
SWFDEC_DEBUG ("new url: %s", string);
url = g_slice_new0 (SwfdecURL);
url->url = g_strdup (string);
@@ -96,8 +114,15 @@ swfdec_url_new (const char *string)
url->host = g_strdup (string);
return url;
}
- if (s != string)
- url->host = g_strndup (string, s - string);
+ if (s != string) {
+ char *colon = swfdec_memrchr (string, ':', s - string);
+ if (colon) {
+ url->port = strtoul (colon + 1, &colon, 10);
+ url->host = g_strndup (string, colon - string);
+ } else {
+ url->host = g_strndup (string, s - string);
+ }
+ }
string = s + 1;
s = strchr (string, '?');
if (s == NULL) {
@@ -263,8 +288,7 @@ swfdec_url_has_protocol (const SwfdecURL *url, const char *protocol)
* swfdec_url_get_host:
* @url: a #SwfdecURL
*
- * Gets the host for @url. If the host includes a portnumber, it will be present
- * in the returned string.
+ * Gets the host for @url.
*
* Returns: the host or %NULL if none (typically for file URLs).
**/
@@ -277,6 +301,23 @@ swfdec_url_get_host (const SwfdecURL *url)
}
/**
+ * swfdec_url_get_port:
+ * @url: a #SwfdecURL
+ *
+ * Gets the port number specified by the given @url. If the @url does not
+ * specify a port number, 0 will be returned.
+ *
+ * Returns: the specified port or 0 if none was given.
+ **/
+guint
+swfdec_url_get_port (const SwfdecURL *url)
+{
+ g_return_val_if_fail (url != NULL, 0);
+
+ return url->port;
+}
+
+/**
* swfdec_url_get_path:
* @url: a #SwfdecURL
*
diff --git a/libswfdec/swfdec_url.h b/libswfdec/swfdec_url.h
index 7a94039..3ac0b88 100644
--- a/libswfdec/swfdec_url.h
+++ b/libswfdec/swfdec_url.h
@@ -38,6 +38,7 @@ void swfdec_url_free (SwfdecURL * url);
const char * swfdec_url_get_url (const SwfdecURL * url);
const char * swfdec_url_get_protocol (const SwfdecURL * url);
const char * swfdec_url_get_host (const SwfdecURL * url);
+guint swfdec_url_get_port (const SwfdecURL * url);
const char * swfdec_url_get_path (const SwfdecURL * url);
const char * swfdec_url_get_query (const SwfdecURL * url);
commit b94436fdcfb7954e66a90593e8d631a5e4cb3c73
Author: Benjamin Otte <otte at gnome.org>
Date: Fri Jan 11 13:56:38 2008 +0100
get rid of swfdec_movie_load_variables() API and call it directly
diff --git a/libswfdec/swfdec_as_interpret.c b/libswfdec/swfdec_as_interpret.c
index 24ed902..24a822c 100644
--- a/libswfdec/swfdec_as_interpret.c
+++ b/libswfdec/swfdec_as_interpret.c
@@ -39,6 +39,7 @@
#include <math.h>
#include <string.h>
#include "swfdec_decoder.h"
+#include "swfdec_load_object.h"
#include "swfdec_movie.h"
#include "swfdec_player_internal.h"
#include "swfdec_sprite.h"
@@ -1161,6 +1162,18 @@ swfdec_action_get_url (SwfdecAsContext *cx, guint action, const guint8 *data, gu
}
static void
+swfdec_as_interpret_load_variables_on_finish (SwfdecAsObject *target,
+ const char *text)
+{
+ if (text != NULL)
+ swfdec_as_object_decode (target, text);
+
+ // only call onData for sprite movies
+ // FIXME: is it called even when loading fails?
+ swfdec_movie_queue_script (SWFDEC_MOVIE (target), SWFDEC_EVENT_DATA);
+}
+
+static void
swfdec_action_get_url2 (SwfdecAsContext *cx, guint action, const guint8 *data, guint len)
{
const char *target, *url;
@@ -1193,8 +1206,10 @@ swfdec_action_get_url2 (SwfdecAsContext *cx, guint action, const guint8 *data, g
SwfdecMovie *movie;
movie = swfdec_player_get_movie_from_string (SWFDEC_PLAYER (cx), target);
- if (movie != NULL)
- swfdec_movie_load_variables (movie, url, method, NULL);
+ if (movie != NULL) {
+ swfdec_load_object_new (SWFDEC_AS_OBJECT (movie), url, method, NULL, NULL,
+ swfdec_as_interpret_load_variables_on_finish);
+ }
} else if (internal) {
swfdec_resource_load (SWFDEC_PLAYER (cx), target, url, method, NULL, NULL);
} else {
diff --git a/libswfdec/swfdec_movie.c b/libswfdec/swfdec_movie.c
index 547155b..90147a3 100644
--- a/libswfdec/swfdec_movie.c
+++ b/libswfdec/swfdec_movie.c
@@ -1724,35 +1724,6 @@ swfdec_movie_duplicate (SwfdecMovie *movie, const char *name, int depth)
return copy;
}
-static void
-swfdec_movie_load_variables_on_finish (SwfdecAsObject *target,
- const char *text)
-{
- if (text != NULL)
- swfdec_as_object_decode (target, text);
-
- // only call onData for sprite movies
- // FIXME: is it called even when loading fails?
- if (target->context->version >= 6 && SWFDEC_IS_SPRITE_MOVIE (target))
- swfdec_as_object_call (target, SWFDEC_AS_STR_onData, 0, NULL, NULL);
-}
-
-void
-swfdec_movie_load_variables (SwfdecMovie *movie, const char *url,
- SwfdecLoaderRequest request, SwfdecBuffer *data)
-{
- g_return_if_fail (SWFDEC_IS_MOVIE (movie));
- g_return_if_fail (url != NULL);
-
- if (request != SWFDEC_LOADER_REQUEST_DEFAULT) {
- SWFDEC_FIXME ("loadVariables: Different request-modes not supported");
- return;
- }
-
- swfdec_load_object_new (SWFDEC_AS_OBJECT (movie), url, request, data, NULL,
- swfdec_movie_load_variables_on_finish);
-}
-
char *
swfdec_movie_get_path (SwfdecMovie *movie, gboolean dot)
{
diff --git a/libswfdec/swfdec_movie.h b/libswfdec/swfdec_movie.h
index 6b5b001..623707f 100644
--- a/libswfdec/swfdec_movie.h
+++ b/libswfdec/swfdec_movie.h
@@ -278,10 +278,6 @@ void swfdec_movie_execute (SwfdecMovie * movie,
SwfdecEventType condition);
void swfdec_movie_queue_script (SwfdecMovie * movie,
SwfdecEventType condition);
-void swfdec_movie_load_variables (SwfdecMovie * movie,
- const char * url,
- SwfdecLoaderRequest request,
- SwfdecBuffer * data);
int swfdec_movie_compare_depths (gconstpointer a,
gconstpointer b);
commit 5accd77d61fd2147c49b5563414876248dc89a1c
Author: Benjamin Otte <otte at gnome.org>
Date: Thu Jan 10 19:51:13 2008 +0100
use a function list for the player's rooted objects
diff --git a/libswfdec/swfdec_load_object.c b/libswfdec/swfdec_load_object.c
index 5b659f2..eb72a56 100644
--- a/libswfdec/swfdec_load_object.c
+++ b/libswfdec/swfdec_load_object.c
@@ -67,8 +67,8 @@ swfdec_load_object_loader_target_error (SwfdecLoaderTarget *target,
load_object->finish (load_object->target, NULL);
/* unroot */
- swfdec_player_unroot_object (SWFDEC_PLAYER (
- SWFDEC_AS_OBJECT (load_object)->context), G_OBJECT (load_object));
+ swfdec_player_unroot (SWFDEC_PLAYER (
+ SWFDEC_AS_OBJECT (load_object)->context), load_object);
}
static void
@@ -96,8 +96,8 @@ swfdec_load_object_loader_target_eof (SwfdecLoaderTarget *target,
}
/* unroot */
- swfdec_player_unroot_object (SWFDEC_PLAYER (
- SWFDEC_AS_OBJECT (load_object)->context), G_OBJECT (load_object));
+ swfdec_player_unroot (SWFDEC_PLAYER (
+ SWFDEC_AS_OBJECT (load_object)->context), load_object);
}
static void
@@ -222,8 +222,7 @@ swfdec_load_object_new (SwfdecAsObject *target, const char *url,
if (!swfdec_load_object_load (load_object, url, request, data))
return NULL;
- swfdec_player_root_object (SWFDEC_PLAYER (target->context),
- G_OBJECT (load_object));
+ swfdec_player_root (SWFDEC_PLAYER (target->context), load_object, (GFunc) swfdec_as_object_mark);
return SWFDEC_AS_OBJECT (load_object);
}
diff --git a/libswfdec/swfdec_player.c b/libswfdec/swfdec_player.c
index 215d604..f60b7e8 100644
--- a/libswfdec/swfdec_player.c
+++ b/libswfdec/swfdec_player.c
@@ -878,9 +878,8 @@ swfdec_player_dispose (GObject *object)
g_object_unref (priv->resource);
priv->resource = NULL;
}
- while (priv->rooted_objects)
- swfdec_player_unroot_object (player, priv->rooted_objects->data);
+ swfdec_function_list_clear (&priv->rooted);
/* we do this here so references to GC'd objects get freed */
G_OBJECT_CLASS (swfdec_player_parent_class)->dispose (object);
@@ -1508,16 +1507,6 @@ swfdec_player_mark_string_object (gpointer key, gpointer value, gpointer data)
}
static void
-swfdec_player_mark_rooted_object (gpointer object, gpointer unused)
-{
- if (SWFDEC_IS_RESOURCE (object)) {
- swfdec_resource_mark (object);
- } else if (SWFDEC_IS_AS_OBJECT (object)) {
- swfdec_as_object_mark (object);
- }
-}
-
-static void
swfdec_player_mark (SwfdecAsContext *context)
{
SwfdecPlayer *player = SWFDEC_PLAYER (context);
@@ -1529,7 +1518,7 @@ swfdec_player_mark (SwfdecAsContext *context)
swfdec_as_object_mark (priv->Video);
g_list_foreach (priv->roots, (GFunc) swfdec_as_object_mark, NULL);
g_list_foreach (priv->intervals, (GFunc) swfdec_as_object_mark, NULL);
- g_list_foreach (priv->rooted_objects, swfdec_player_mark_rooted_object, NULL);
+ swfdec_function_list_execute (&priv->rooted, player);
SWFDEC_AS_CONTEXT_CLASS (swfdec_player_parent_class)->mark (context);
}
@@ -2090,38 +2079,6 @@ swfdec_player_set_export_class (SwfdecPlayer *player, const char *name, SwfdecAs
}
}
-/* FIXME:
- * I don't like the idea of rooting arbitrary objects very much. And so far,
- * this API is only necessary for the objects used for loading data. So it seems
- * like a good idea to revisit the refcounting and GCing of resources.
- */
-void
-swfdec_player_root_object (SwfdecPlayer *player, GObject *object)
-{
- SwfdecPlayerPrivate *priv;
-
- g_return_if_fail (SWFDEC_IS_PLAYER (player));
- g_return_if_fail (G_IS_OBJECT (object));
-
- priv = player->priv;
- g_object_ref (object);
- priv->rooted_objects = g_list_prepend (priv->rooted_objects, object);
-}
-
-void
-swfdec_player_unroot_object (SwfdecPlayer *player, GObject *object)
-{
- SwfdecPlayerPrivate *priv = player->priv;
- GList *entry;
-
- g_return_if_fail (SWFDEC_IS_PLAYER (player));
- g_return_if_fail (G_IS_OBJECT (object));
- entry = g_list_find (priv->rooted_objects, object);
- g_return_if_fail (entry != NULL);
- g_object_unref (object);
- priv->rooted_objects = g_list_delete_link (priv->rooted_objects, entry);
-}
-
/** PUBLIC API ***/
/**
diff --git a/libswfdec/swfdec_player_internal.h b/libswfdec/swfdec_player_internal.h
index f3fbb60..06d8eea 100644
--- a/libswfdec/swfdec_player_internal.h
+++ b/libswfdec/swfdec_player_internal.h
@@ -23,6 +23,7 @@
#include <libswfdec/swfdec_player.h>
#include <libswfdec/swfdec_audio.h>
#include <libswfdec/swfdec_event.h>
+#include <libswfdec/swfdec_function_list.h>
#include <libswfdec/swfdec_player_scripting.h>
#include <libswfdec/swfdec_rect.h>
#include <libswfdec/swfdec_ringbuffer.h>
@@ -61,7 +62,6 @@ struct _SwfdecPlayerPrivate
guint width; /* width of movie */
guint height; /* height of movie */
GList * roots; /* all the root movies */
- GList * rooted_objects; /* all the objects we keep track of */
GSList * resource_requests; /* all external requested URIs - see swfdec_resource_request.[ch] */
SwfdecCache * cache; /* player cache */
gboolean bgcolor_set; /* TRUE if the background color has been set */
@@ -86,6 +86,7 @@ struct _SwfdecPlayerPrivate
guint unnamed_count; /* variable used for naming unnamed movies */
/* ActionScript */
+ SwfdecFunctionList rooted; /* all the objects we keep track of */
guint interval_id; /* id returned from setInterval call */
GList * intervals; /* all currently running intervals */
GHashTable * registered_classes; /* name => SwfdecAsObject constructor */
@@ -149,10 +150,10 @@ void swfdec_player_unlock (SwfdecPlayer * player);
void swfdec_player_unlock_soft (SwfdecPlayer * player);
void swfdec_player_perform_actions (SwfdecPlayer * player);
-void swfdec_player_root_object (SwfdecPlayer * player,
- GObject * object);
-void swfdec_player_unroot_object (SwfdecPlayer * player,
- GObject * object);
+#define swfdec_player_root(player, data, mark_func) \
+ swfdec_function_list_add (&(player)->priv->rooted, (mark_func), (data), NULL)
+#define swfdec_player_unroot(player, data) \
+ swfdec_function_list_remove (&(player)->priv->rooted, (data))
SwfdecAsObject *swfdec_player_get_export_class (SwfdecPlayer * player,
const char * name);
void swfdec_player_set_export_class (SwfdecPlayer * player,
diff --git a/libswfdec/swfdec_resource.c b/libswfdec/swfdec_resource.c
index cac371a..f4fcf3c 100644
--- a/libswfdec/swfdec_resource.c
+++ b/libswfdec/swfdec_resource.c
@@ -210,7 +210,7 @@ swfdec_resource_create_movie (SwfdecResource *resource)
SWFDEC_WARNING ("%s does not reference a movie, not loading %s", resource->target,
swfdec_url_get_url (swfdec_loader_get_url (resource->loader)));
swfdec_loader_close (resource->loader);
- swfdec_player_unroot_object (player, G_OBJECT (resource));
+ swfdec_player_unroot (player, resource);
return FALSE;
}
movie = swfdec_player_get_movie_at_level (player, level);
@@ -220,7 +220,7 @@ swfdec_resource_create_movie (SwfdecResource *resource)
} else {
movie = swfdec_resource_replace_movie (movie, resource);
}
- swfdec_player_unroot_object (player, G_OBJECT (resource));
+ swfdec_player_unroot (player, resource);
return TRUE;
}
@@ -544,7 +544,7 @@ swfdec_resource_load (SwfdecPlayer *player, const char *target, const char *url,
resource->target = path;
if (loader)
resource->clip_loader = g_object_ref (loader);
- swfdec_player_root_object (player, G_OBJECT (resource));
+ swfdec_player_root (player, resource, (GFunc) swfdec_resource_mark);
swfdec_player_request_resource (player, SWFDEC_AS_CONTEXT (player)->frame->security,
url, request, buffer, swfdec_resource_do_load, resource, g_object_unref);
}
commit d9e056c222d464336c6925a87d7510c9f4a65375
Author: Benjamin Otte <otte at gnome.org>
Date: Thu Jan 10 19:41:36 2008 +0100
add a SwfdecFunctionList struct
This is supposed to make collecting callbacks easier, as there's a lot of those
around.
I'm not sure this API works out, but we can at least try it.
diff --git a/libswfdec/Makefile.am b/libswfdec/Makefile.am
index 4f2d438..9320e97 100644
--- a/libswfdec/Makefile.am
+++ b/libswfdec/Makefile.am
@@ -80,6 +80,7 @@ libswfdec_source_files = \
swfdec_flash_security.c \
swfdec_flv_decoder.c \
swfdec_font.c \
+ swfdec_function_list.c \
swfdec_glow_filter.c \
swfdec_gradient_filter.c \
swfdec_gradient_pattern.c \
@@ -238,6 +239,7 @@ noinst_HEADERS = \
swfdec_flash_security.h \
swfdec_flv_decoder.h \
swfdec_font.h \
+ swfdec_function_list.h \
swfdec_gradient_pattern.h \
swfdec_graphic.h \
swfdec_graphic_movie.h \
diff --git a/libswfdec/swfdec_function_list.c b/libswfdec/swfdec_function_list.c
new file mode 100644
index 0000000..0b29b59
--- /dev/null
+++ b/libswfdec/swfdec_function_list.c
@@ -0,0 +1,132 @@
+/* Swfdec
+ * Copyright (C) 2008 Benjamin Otte <otte at gnome.org>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301 USA
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include <string.h>
+#include "swfdec_function_list.h"
+
+typedef struct _SwfdecFunctionListEntry SwfdecFunctionListEntry;
+struct _SwfdecFunctionListEntry {
+ GFunc func;
+ gpointer data;
+ GDestroyNotify destroy;
+};
+
+void
+swfdec_function_list_clear (SwfdecFunctionList *list)
+{
+ GList *walk;
+
+ g_return_if_fail (list != NULL);
+
+ for (walk = list->list; walk; walk = walk->next) {
+ SwfdecFunctionListEntry *entry = walk->data;
+ if (entry->destroy)
+ entry->destroy (entry->data);
+ g_slice_free (SwfdecFunctionListEntry, entry);
+ }
+ g_list_free (list->list);
+ list->list = NULL;
+}
+
+void
+swfdec_function_list_add (SwfdecFunctionList *list, GFunc func,
+ gpointer data, GDestroyNotify destroy)
+{
+ SwfdecFunctionListEntry *entry;
+
+ g_return_if_fail (list != NULL);
+ g_return_if_fail (func);
+
+ entry = g_slice_new (SwfdecFunctionListEntry);
+ entry->func = func;
+ entry->data = data;
+ entry->destroy = destroy;
+
+ list->list = g_list_append (list->list, entry);
+}
+
+static int
+swfdec_function_list_entry_compare (gconstpointer a, gconstpointer b)
+{
+ a = ((const SwfdecFunctionListEntry *) a)->data;
+ b = ((const SwfdecFunctionListEntry *) b)->data;
+
+ if (a < b)
+ return -1;
+ if (a > b)
+ return 1;
+ return 0;
+}
+
+void
+swfdec_function_list_remove (SwfdecFunctionList *list, gpointer data)
+{
+ SwfdecFunctionListEntry entry = { NULL, data, NULL };
+ SwfdecFunctionListEntry *e;
+ GList *node;
+
+ g_return_if_fail (list != NULL);
+
+ node = g_list_find_custom (list->list, &entry,
+ swfdec_function_list_entry_compare);
+ e = node->data;
+ if (e->destroy)
+ e->destroy (data);
+ g_slice_free (SwfdecFunctionListEntry, e);
+ list->list = g_list_delete_link (list->list, node);
+}
+
+void
+swfdec_function_list_execute (SwfdecFunctionList *list, gpointer data)
+{
+ SwfdecFunctionListEntry *entry;
+ GList *walk;
+
+ g_return_if_fail (list != NULL);
+
+ for (walk = list->list; walk; walk = walk->next) {
+ entry = walk->data;
+ entry->func (entry->data, data);
+ }
+}
+
+void
+swfdec_function_list_execute_and_clear (SwfdecFunctionList *list, gpointer data)
+{
+ SwfdecFunctionListEntry *entry;
+ GList *old, *walk;
+
+ g_return_if_fail (list != NULL);
+
+ old = list->list;
+ list->list = NULL;
+ for (walk = old; walk; walk = walk->next) {
+ entry = walk->data;
+ entry->func (entry->data, data);
+ if (entry->destroy)
+ entry->destroy (entry->data);
+ g_slice_free (SwfdecFunctionListEntry, entry);
+ }
+ g_list_free (old);
+}
+
diff --git a/libswfdec/swfdec_function_list.h b/libswfdec/swfdec_function_list.h
new file mode 100644
index 0000000..f7e8691
--- /dev/null
+++ b/libswfdec/swfdec_function_list.h
@@ -0,0 +1,50 @@
+/* Swfdec
+ * Copyright (C) 2008 Benjamin Otte <otte at gnome.org>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301 USA
+ */
+
+#ifndef __SWFDEC_FUNCTION_LIST_H__
+#define __SWFDEC_FUNCTION_LIST_H__
+
+#include <glib.h>
+
+G_BEGIN_DECLS
+
+
+typedef struct _SwfdecFunctionList SwfdecFunctionList;
+struct _SwfdecFunctionList {
+ GList * list;
+};
+
+void swfdec_function_list_clear (SwfdecFunctionList * list);
+
+void swfdec_function_list_add (SwfdecFunctionList * list,
+ GFunc func,
+ gpointer data,
+ GDestroyNotify destroy);
+void swfdec_function_list_remove (SwfdecFunctionList * list,
+ gpointer data);
+
+void swfdec_function_list_execute (SwfdecFunctionList * list,
+ gpointer data);
+void swfdec_function_list_execute_and_clear
+ (SwfdecFunctionList * list,
+ gpointer data);
+
+G_END_DECLS
+
+#endif
commit 5803c29fe96a360fdc31678c5a325a58a1926da0
Author: Benjamin Otte <otte at gnome.org>
Date: Thu Jan 10 18:33:44 2008 +0100
add copyright headers
diff --git a/libswfdec/swfdec_ringbuffer.c b/libswfdec/swfdec_ringbuffer.c
index acc8ba1..6d3dd04 100644
--- a/libswfdec/swfdec_ringbuffer.c
+++ b/libswfdec/swfdec_ringbuffer.c
@@ -1,3 +1,21 @@
+/* Swfdec
+ * Copyright (C) 2007 Benjamin Otte <otte at gnome.org>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301 USA
+ */
#ifdef HAVE_CONFIG_H
#include "config.h"
diff --git a/libswfdec/swfdec_ringbuffer.h b/libswfdec/swfdec_ringbuffer.h
index d7aad1b..3f02851 100644
--- a/libswfdec/swfdec_ringbuffer.h
+++ b/libswfdec/swfdec_ringbuffer.h
@@ -1,3 +1,21 @@
+/* Swfdec
+ * Copyright (C) 2007 Benjamin Otte <otte at gnome.org>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301 USA
+ */
#ifndef __SWFDEC_RING_BUFFER_H__
#define __SWFDEC_RING_BUFFER_H__
commit 2da50c68beb947d61ac817961db4ca7923ed6f75
Author: Benjamin Otte <otte at gnome.org>
Date: Mon Jan 21 22:41:16 2008 +0100
This file has been missing all the time
diff --git a/libswfdec/Makefile.am b/libswfdec/Makefile.am
index 4990956..dc62604 100644
--- a/libswfdec/Makefile.am
+++ b/libswfdec/Makefile.am
@@ -284,7 +284,8 @@ noinst_HEADERS = \
swfdec_video.h \
swfdec_video_movie.h \
swfdec_xml_node.h \
- swfdec_xml.h
+ swfdec_xml.h \
+ swfdec_xml_socket.h
EXTRA_DIST = \
compiler.c \
diff --git a/libswfdec/swfdec_xml_socket.h b/libswfdec/swfdec_xml_socket.h
new file mode 100644
index 0000000..95f19c2
--- /dev/null
+++ b/libswfdec/swfdec_xml_socket.h
@@ -0,0 +1,56 @@
+/* Swfdec
+ * Copyright (C) 2008 Benjamin Otte <otte at gnome.org>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301 USA
+ */
+
+#ifndef _SWFDEC_XML_SOCKET_H_
+#define _SWFDEC_XML_SOCKET_H_
+
+#include <libswfdec/swfdec.h>
+#include <libswfdec/swfdec_as_object.h>
+
+G_BEGIN_DECLS
+
+
+typedef struct _SwfdecXmlSocket SwfdecXmlSocket;
+typedef struct _SwfdecXmlSocketClass SwfdecXmlSocketClass;
+
+#define SWFDEC_TYPE_XML_SOCKET (swfdec_xml_socket_get_type())
+#define SWFDEC_IS_XML_SOCKET(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), SWFDEC_TYPE_XML_SOCKET))
+#define SWFDEC_IS_XML_SOCKET_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), SWFDEC_TYPE_XML_SOCKET))
+#define SWFDEC_XML_SOCKET(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), SWFDEC_TYPE_XML_SOCKET, SwfdecXmlSocket))
+#define SWFDEC_XML_SOCKET_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), SWFDEC_TYPE_XML_SOCKET, SwfdecXmlSocketClass))
+#define SWFDEC_XML_SOCKET_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), SWFDEC_TYPE_XML_SOCKET, SwfdecXmlSocketClass))
+
+struct _SwfdecXmlSocket {
+ SwfdecAsObject object;
+
+ SwfdecSocket * socket; /* the socket in use */
+ gboolean open; /* the socket has been opened already */
+ SwfdecBufferQueue * queue; /* everything that belongs to the same string */
+ SwfdecAsObject * target; /* target object we call out to */
+};
+
+struct _SwfdecXmlSocketClass {
+ SwfdecAsObjectClass object_class;
+};
+
+GType swfdec_xml_socket_get_type (void);
+
+
+G_END_DECLS
+#endif
commit 1f66627e35c49d677b036e8efb0fe1dba09bb7e0
Author: Benjamin Otte <otte at gnome.org>
Date: Mon Jan 21 22:40:01 2008 +0100
emit player events in every sandbox
FIXME: figure out correct order
diff --git a/libswfdec/swfdec_player.c b/libswfdec/swfdec_player.c
index 12ec552..b41c3e6 100644
--- a/libswfdec/swfdec_player.c
+++ b/libswfdec/swfdec_player.c
@@ -936,17 +936,22 @@ swfdec_player_dispose (GObject *object)
static void
swfdec_player_broadcast (SwfdecPlayer *player, const char *object_name, const char *signal)
{
+ GSList *walk;
SwfdecAsValue val;
SwfdecAsObject *obj;
SWFDEC_DEBUG ("broadcasting message %s.%s", object_name, signal);
- obj = SWFDEC_AS_CONTEXT (player)->global;
- swfdec_as_object_get_variable (obj, object_name, &val);
- if (!SWFDEC_AS_VALUE_IS_OBJECT (&val))
- return;
- obj = SWFDEC_AS_VALUE_GET_OBJECT (&val);
- SWFDEC_AS_VALUE_SET_STRING (&val, signal);
- swfdec_as_object_call (obj, SWFDEC_AS_STR_broadcastMessage, 1, &val, NULL);
+ for (walk = player->priv->sandboxes; walk; walk = walk->next) {
+ SwfdecSandbox *sandbox = walk->data;
+ swfdec_as_object_get_variable (SWFDEC_AS_OBJECT (sandbox), object_name, &val);
+ if (!SWFDEC_AS_VALUE_IS_OBJECT (&val))
+ return;
+ obj = SWFDEC_AS_VALUE_GET_OBJECT (&val);
+ SWFDEC_AS_VALUE_SET_STRING (&val, signal);
+ swfdec_sandbox_use (sandbox);
+ swfdec_as_object_call (obj, SWFDEC_AS_STR_broadcastMessage, 1, &val, NULL);
+ swfdec_sandbox_unuse (sandbox);
+ }
}
static void
commit ae135374042a5e5a53c6533324b7e389da92b13d
Author: Benjamin Otte <otte at gnome.org>
Date: Mon Jan 21 22:32:18 2008 +0100
make sandbox lookup work with as versions and make sandboxes not leak
diff --git a/libswfdec/swfdec_player.c b/libswfdec/swfdec_player.c
index d5345ac..12ec552 100644
--- a/libswfdec/swfdec_player.c
+++ b/libswfdec/swfdec_player.c
@@ -911,8 +911,7 @@ swfdec_player_dispose (GObject *object)
}
g_assert (priv->movies == NULL);
g_assert (priv->audio == NULL);
- g_assert (g_hash_table_size (priv->sandboxes) == 0);
- g_hash_table_destroy (priv->sandboxes);
+ g_slist_free (priv->sandboxes);
if (priv->external_timeout.callback)
swfdec_player_remove_timeout (player, &priv->external_timeout);
if (priv->rate) {
@@ -1524,6 +1523,7 @@ swfdec_player_mark (SwfdecAsContext *context)
g_hash_table_foreach (priv->scripting_callbacks, swfdec_player_mark_string_object, NULL);
g_list_foreach (priv->roots, (GFunc) swfdec_as_object_mark, NULL);
g_list_foreach (priv->intervals, (GFunc) swfdec_as_object_mark, NULL);
+ g_slist_foreach (priv->sandboxes, (GFunc) swfdec_as_object_mark, NULL);
swfdec_function_list_execute (&priv->rooted, player);
swfdec_as_object_mark (SWFDEC_AS_OBJECT (priv->resource));
@@ -1791,8 +1791,6 @@ swfdec_player_init (SwfdecPlayer *player)
priv->iterate_timeout.callback = swfdec_player_iterate;
priv->stage_width = -1;
priv->stage_height = -1;
-
- priv->sandboxes = g_hash_table_new (swfdec_url_hash, swfdec_url_equal);
}
void
diff --git a/libswfdec/swfdec_player_internal.h b/libswfdec/swfdec_player_internal.h
index 8c9e819..889a1ee 100644
--- a/libswfdec/swfdec_player_internal.h
+++ b/libswfdec/swfdec_player_internal.h
@@ -133,7 +133,7 @@ struct _SwfdecPlayerPrivate
SwfdecRingBuffer * actions[SWFDEC_PLAYER_N_ACTION_QUEUES]; /* all actions we've queued up so far */
/* security */
- GHashTable * sandboxes; /* SwfdecURL => SwfdecSandbox mapping */
+ GSList * sandboxes; /* all existing sandboxes */
GList * loading_policy_files; /* list of loading SwfdecPlayerLoader - newest first */
GSList * policy_files; /* list of SwfdecPolicyLoader that finished loading */
};
diff --git a/libswfdec/swfdec_sandbox.c b/libswfdec/swfdec_sandbox.c
index f10b102..e3c967f 100644
--- a/libswfdec/swfdec_sandbox.c
+++ b/libswfdec/swfdec_sandbox.c
@@ -62,10 +62,23 @@ swfdec_sandbox_mark (SwfdecAsObject *object)
}
static void
+swfdec_sandbox_dispose (GObject *object)
+{
+ SwfdecSandbox *sandbox = SWFDEC_SANDBOX (object);
+
+ swfdec_url_free (sandbox->url);
+
+ G_OBJECT_CLASS (swfdec_sandbox_parent_class)->dispose (object);
+}
+
+static void
swfdec_sandbox_class_init (SwfdecSandboxClass *klass)
{
+ GObjectClass *object_class = G_OBJECT_CLASS (klass);
SwfdecAsObjectClass *asobject_class = SWFDEC_AS_OBJECT_CLASS (klass);
+ object_class->dispose = swfdec_sandbox_dispose;
+
asobject_class->mark = swfdec_sandbox_mark;
}
@@ -168,6 +181,7 @@ swfdec_sandbox_get_for_url (SwfdecPlayer *player, const SwfdecURL *url,
SwfdecSandbox *sandbox;
SwfdecURL *real;
guint as_version;
+ GSList *walk;
g_return_val_if_fail (SWFDEC_IS_PLAYER (player), NULL);
g_return_val_if_fail (url != NULL, NULL);
@@ -175,11 +189,16 @@ swfdec_sandbox_get_for_url (SwfdecPlayer *player, const SwfdecURL *url,
priv = player->priv;
real = swfdec_url_new_components (swfdec_url_get_protocol (url),
swfdec_url_get_host (url), swfdec_url_get_port (url), NULL, NULL);
-
as_version = flash_version < 7 ? 1 : 2;
- /* FIXME: look up by as version */
- sandbox = g_hash_table_lookup (priv->sandboxes, real);
- if (sandbox) {
+
+ for (walk = priv->sandboxes; walk; walk = walk->next) {
+ sandbox = walk->data;
+ if (sandbox->as_version == as_version &&
+ swfdec_url_equal (sandbox->url, real))
+ break;
+ }
+
+ if (walk) {
swfdec_url_free (real);
if (!swfdec_sandbox_set_allow_network (sandbox, allow_network))
@@ -194,6 +213,7 @@ swfdec_sandbox_get_for_url (SwfdecPlayer *player, const SwfdecURL *url,
swfdec_as_object_add (SWFDEC_AS_OBJECT (sandbox), context, size);
sandbox->url = real;
sandbox->as_version = as_version;
+ priv->sandboxes = g_slist_prepend (priv->sandboxes, sandbox);
if (!swfdec_sandbox_set_allow_network (sandbox, allow_network))
return NULL;
commit 5a6e7a8c1729771557e24638bb44ad318a3ee5e0
Author: Benjamin Otte <otte at gnome.org>
Date: Mon Jan 21 21:54:45 2008 +0100
save the movie before running user code
diff --git a/libswfdec/swfdec_player.c b/libswfdec/swfdec_player.c
index 231b27a..d5345ac 100644
--- a/libswfdec/swfdec_player.c
+++ b/libswfdec/swfdec_player.c
@@ -473,9 +473,10 @@ swfdec_player_do_action (SwfdecPlayer *player)
} while (action->movie == NULL); /* skip removed actions */
if (action) {
if (action->script) {
- swfdec_sandbox_use (action->movie->resource->sandbox);
+ SwfdecSandbox *sandbox = action->movie->resource->sandbox;
+ swfdec_sandbox_use (sandbox);
swfdec_as_object_run (SWFDEC_AS_OBJECT (action->movie), action->script);
- swfdec_sandbox_unuse (action->movie->resource->sandbox);
+ swfdec_sandbox_unuse (sandbox);
} else {
swfdec_movie_execute (action->movie, action->event);
}
commit fc3baf5a0b0031ea9f62e320d3b3106f00d66702
Author: Benjamin Otte <otte at gnome.org>
Date: Mon Jan 21 21:54:22 2008 +0100
set the sandbox before parsing the amf stream and when emitting the signal
diff --git a/libswfdec/swfdec_net_stream.c b/libswfdec/swfdec_net_stream.c
index 1502a28..9df71e0 100644
--- a/libswfdec/swfdec_net_stream.c
+++ b/libswfdec/swfdec_net_stream.c
@@ -151,6 +151,7 @@ swfdec_net_stream_video_goto (SwfdecNetStream *stream, guint timestamp)
SWFDEC_LOG ("processing event from timestamp %u", process_events_from);
process_events_from++; /* increase so we get the next event next time */
swfdec_bits_init (&bits, event);
+ swfdec_sandbox_use (stream->sandbox);
if (swfdec_amf_parse (SWFDEC_AS_OBJECT (stream)->context, &bits, 2,
SWFDEC_AMF_STRING, &name, SWFDEC_AMF_MIXED_ARRAY, &value) != 2) {
SWFDEC_ERROR ("could not parse data tag");
@@ -158,6 +159,7 @@ swfdec_net_stream_video_goto (SwfdecNetStream *stream, guint timestamp)
swfdec_as_object_call (SWFDEC_AS_OBJECT (stream),
SWFDEC_AS_VALUE_GET_STRING (&name), 1, &value, NULL);
}
+ swfdec_sandbox_unuse (stream->sandbox);
}
}
}
commit 25711468e585af3ae35a22e7ca495f096124ac49
Author: Benjamin Otte <otte at gnome.org>
Date: Mon Jan 21 21:54:04 2008 +0100
add check that requires context (currently necessary)
diff --git a/libswfdec/swfdec_amf.c b/libswfdec/swfdec_amf.c
index 4baab41..688df0a 100644
--- a/libswfdec/swfdec_amf.c
+++ b/libswfdec/swfdec_amf.c
@@ -183,6 +183,7 @@ swfdec_amf_parse_one (SwfdecAsContext *context, SwfdecBits *bits,
guint type;
g_return_val_if_fail (SWFDEC_IS_AS_CONTEXT (context), 0);
+ g_return_val_if_fail (context->global != NULL, 0);
g_return_val_if_fail (bits != NULL, FALSE);
g_return_val_if_fail (rval != NULL, FALSE);
g_return_val_if_fail (expected_type < SWFDEC_AMF_N_TYPES, FALSE);
@@ -208,6 +209,7 @@ swfdec_amf_parse (SwfdecAsContext *context, SwfdecBits *bits, guint n_items, ...
guint i;
g_return_val_if_fail (SWFDEC_IS_AS_CONTEXT (context), 0);
+ g_return_val_if_fail (context->global != NULL, 0);
g_return_val_if_fail (bits != NULL, 0);
va_start (args, n_items);
commit fb9079df6b7d92e5efee09d58b0ae3d526e2a375
Author: Benjamin Otte <otte at gnome.org>
Date: Mon Jan 21 21:13:57 2008 +0100
save the version, too - we need it when parsing the data
diff --git a/libswfdec/swfdec_load_object.c b/libswfdec/swfdec_load_object.c
index 642e256..33c4e4b 100644
--- a/libswfdec/swfdec_load_object.c
+++ b/libswfdec/swfdec_load_object.c
@@ -86,7 +86,7 @@ swfdec_load_object_stream_target_close (SwfdecStreamTarget *target,
// get text
text =
- swfdec_loader_get_text (loader, load_object->target->context->version);
+ swfdec_loader_get_text (loader, load_object->version);
/* break reference to the loader */
swfdec_stream_set_target (stream, NULL);
@@ -248,5 +248,6 @@ swfdec_load_object_create (SwfdecAsObject *target, const char *url,
/* get the current security */
g_assert (SWFDEC_AS_CONTEXT (player)->frame);
load->sandbox = SWFDEC_SANDBOX (SWFDEC_AS_CONTEXT (player)->global);
+ load->version = SWFDEC_AS_CONTEXT (player)->version;
swfdec_player_request_resource (player, swfdec_load_object_request, load, NULL);
}
diff --git a/libswfdec/swfdec_load_object.h b/libswfdec/swfdec_load_object.h
index 3436562..51b3baa 100644
--- a/libswfdec/swfdec_load_object.h
+++ b/libswfdec/swfdec_load_object.h
@@ -52,6 +52,7 @@ struct _SwfdecLoadObject {
SwfdecLoader * loader; /* loader when loading or NULL */
SwfdecSandbox * sandbox; /* sandbox that inited the loading */
+ guint version; /* version used when initiating the load - for parsing the data */
SwfdecAsObject * target; /* target object */
SwfdecLoadObjectProgress progress; /* progress callback */
SwfdecLoadObjectFinish finish; /* finish callback */
commit 8df2f695cb639c92dd976c3d6f43041909c090bd
Author: Benjamin Otte <otte at gnome.org>
Date: Mon Jan 21 20:42:37 2008 +0100
require the Flash version for initialization
diff --git a/libswfdec/swfdec_resource.c b/libswfdec/swfdec_resource.c
index e3e90a8..26b9511 100644
--- a/libswfdec/swfdec_resource.c
+++ b/libswfdec/swfdec_resource.c
@@ -78,7 +78,7 @@ swfdec_resource_stream_target_image (SwfdecResource *instance)
SwfdecSwfDecoder *dec = SWFDEC_SWF_DECODER (instance->decoder);
instance->sandbox = swfdec_sandbox_get_for_url (player,
- swfdec_loader_get_url (instance->loader),
+ swfdec_loader_get_url (instance->loader), instance->version,
SWFDEC_SWF_DECODER (instance->decoder)->use_network);
if (instance->sandbox) {
movie->sprite = dec->main_sprite;
diff --git a/libswfdec/swfdec_sandbox.c b/libswfdec/swfdec_sandbox.c
index bdc7bf1..f10b102 100644
--- a/libswfdec/swfdec_sandbox.c
+++ b/libswfdec/swfdec_sandbox.c
@@ -76,7 +76,7 @@ swfdec_sandbox_init (SwfdecSandbox *sandbox)
}
static void
-swfdec_sandbox_initialize (SwfdecSandbox *sandbox)
+swfdec_sandbox_initialize (SwfdecSandbox *sandbox, guint version)
{
SwfdecAsContext *context = SWFDEC_AS_OBJECT (sandbox)->context;
SwfdecPlayer *player = SWFDEC_PLAYER (context);
@@ -93,7 +93,7 @@ swfdec_sandbox_initialize (SwfdecSandbox *sandbox)
swfdec_net_stream_init_context (player);
swfdec_as_context_run_init_script (context, swfdec_initialize,
- sizeof (swfdec_initialize), 8);
+ sizeof (swfdec_initialize), version);
sandbox->Function = context->Function;
sandbox->Function_prototype = context->Function_prototype;
@@ -140,8 +140,6 @@ swfdec_sandbox_set_allow_network (SwfdecSandbox *sandbox, gboolean network)
sandbox->type = SWFDEC_SANDBOX_REMOTE;
}
- swfdec_sandbox_initialize (sandbox);
-
return TRUE;
}
@@ -149,7 +147,7 @@ swfdec_sandbox_set_allow_network (SwfdecSandbox *sandbox, gboolean network)
* swfdec_sandbox_get_for_url:
* @player: a #SwfdecPlayer
* @url: the URL this player refers to
- * @allow_network: %TRUE to allow network access, false for local access
+ * @flash_version: The Flash version for looking up the sandbox
* @allow_network: %TRUE to allow network access, %FALSE to only allow local
* file access. See the documentation of the use_network flag
* of the SWF FileAttributes tag for what that means.
@@ -164,11 +162,12 @@ swfdec_sandbox_set_allow_network (SwfdecSandbox *sandbox, gboolean network)
**/
SwfdecSandbox *
swfdec_sandbox_get_for_url (SwfdecPlayer *player, const SwfdecURL *url,
- gboolean allow_network)
+ guint flash_version, gboolean allow_network)
{
SwfdecPlayerPrivate *priv;
SwfdecSandbox *sandbox;
SwfdecURL *real;
+ guint as_version;
g_return_val_if_fail (SWFDEC_IS_PLAYER (player), NULL);
g_return_val_if_fail (url != NULL, NULL);
@@ -177,9 +176,14 @@ swfdec_sandbox_get_for_url (SwfdecPlayer *player, const SwfdecURL *url,
real = swfdec_url_new_components (swfdec_url_get_protocol (url),
swfdec_url_get_host (url), swfdec_url_get_port (url), NULL, NULL);
+ as_version = flash_version < 7 ? 1 : 2;
+ /* FIXME: look up by as version */
sandbox = g_hash_table_lookup (priv->sandboxes, real);
if (sandbox) {
swfdec_url_free (real);
+
+ if (!swfdec_sandbox_set_allow_network (sandbox, allow_network))
+ return NULL;
} else {
SwfdecAsContext *context = SWFDEC_AS_CONTEXT (player);
guint size = sizeof (SwfdecSandbox);
@@ -189,10 +193,14 @@ swfdec_sandbox_get_for_url (SwfdecPlayer *player, const SwfdecURL *url,
sandbox = g_object_new (SWFDEC_TYPE_SANDBOX, NULL);
swfdec_as_object_add (SWFDEC_AS_OBJECT (sandbox), context, size);
sandbox->url = real;
+ sandbox->as_version = as_version;
+
+ if (!swfdec_sandbox_set_allow_network (sandbox, allow_network))
+ return NULL;
+
+ swfdec_sandbox_initialize (sandbox, flash_version);
}
- if (!swfdec_sandbox_set_allow_network (sandbox, allow_network))
- return NULL;
return sandbox;
}
diff --git a/libswfdec/swfdec_sandbox.h b/libswfdec/swfdec_sandbox.h
index 1ae30fd..6fda9b7 100644
--- a/libswfdec/swfdec_sandbox.h
+++ b/libswfdec/swfdec_sandbox.h
@@ -50,6 +50,7 @@ struct _SwfdecSandbox
SwfdecSandboxType type; /* type of this sandbox */
SwfdecURL * url; /* URL this sandbox acts for */
+ guint as_version; /* Actionscript version */
/* global cached objects from context */
SwfdecAsObject * Function; /* Function */
@@ -71,6 +72,7 @@ GType swfdec_sandbox_get_type (void);
SwfdecSandbox * swfdec_sandbox_get_for_url (SwfdecPlayer * player,
const SwfdecURL * url,
+ guint flash_version,
gboolean allow_network);
void swfdec_sandbox_use (SwfdecSandbox * sandbox);
commit 8e7acb562663dffcb6e52bb9075e19fa7f9bb532
Author: Benjamin Otte <otte at gnome.org>
Date: Mon Jan 21 14:39:49 2008 +0100
fix NEtStream to remember its sandbox
diff --git a/libswfdec/swfdec_net_stream.c b/libswfdec/swfdec_net_stream.c
index 01566ad..1502a28 100644
--- a/libswfdec/swfdec_net_stream.c
+++ b/libswfdec/swfdec_net_stream.c
@@ -41,9 +41,12 @@ swfdec_net_stream_onstatus (SwfdecNetStream *stream, const char *code, const cha
SwfdecAsValue val;
SwfdecAsObject *object;
+ swfdec_sandbox_use (stream->sandbox);
object = swfdec_as_object_new (SWFDEC_AS_OBJECT (stream)->context);
- if (!object)
+ if (!object) {
+ swfdec_sandbox_unuse (stream->sandbox);
return;
+ }
SWFDEC_INFO ("emitting onStatus for %s %s", level, code);
SWFDEC_AS_VALUE_SET_STRING (&val, code);
swfdec_as_object_set_variable (object, SWFDEC_AS_STR_code, &val);
@@ -52,6 +55,7 @@ swfdec_net_stream_onstatus (SwfdecNetStream *stream, const char *code, const cha
SWFDEC_AS_VALUE_SET_OBJECT (&val, object);
swfdec_as_object_call (SWFDEC_AS_OBJECT (stream), SWFDEC_AS_STR_onStatus, 1, &val, NULL);
+ swfdec_sandbox_unuse (stream->sandbox);
}
static cairo_surface_t *
@@ -425,6 +429,8 @@ swfdec_net_stream_mark (SwfdecAsObject *object)
if (stream->conn)
swfdec_as_object_mark (SWFDEC_AS_OBJECT (stream->conn));
+ if (stream->sandbox)
+ swfdec_as_object_mark (SWFDEC_AS_OBJECT (stream->sandbox));
SWFDEC_AS_OBJECT_CLASS (swfdec_net_stream_parent_class)->mark (object);
}
@@ -483,27 +489,29 @@ swfdec_net_stream_load (SwfdecPlayer *player, const SwfdecURL *url, gboolean all
} else {
SWFDEC_WARNING ("SECURITY: no access to %s from NetStream",
swfdec_url_get_url (url));
+ stream->sandbox = NULL;
}
}
void
-swfdec_net_stream_set_url (SwfdecNetStream *stream, const char *url_string)
+swfdec_net_stream_set_url (SwfdecNetStream *stream, SwfdecSandbox *sandbox, const char *url_string)
{
SwfdecPlayer *player;
SwfdecAsContext *cx;
SwfdecURL *url;
g_return_if_fail (SWFDEC_IS_NET_STREAM (stream));
+ g_return_if_fail (SWFDEC_IS_SANDBOX (sandbox));
g_return_if_fail (url != NULL);
cx = SWFDEC_AS_OBJECT (stream)->context;
player = SWFDEC_PLAYER (cx);
- g_assert (cx->frame);
url = swfdec_url_new_relative (swfdec_loader_get_url (player->priv->resource->loader), url_string);
+ stream->sandbox = sandbox;
if (swfdec_url_is_local (url)) {
swfdec_net_stream_load (player, url, TRUE, stream);
} else {
- switch (SWFDEC_SANDBOX (cx->global)->type) {
+ switch (sandbox->type) {
case SWFDEC_SANDBOX_REMOTE:
swfdec_net_stream_load (player, url, TRUE, stream);
break;
@@ -535,10 +543,11 @@ void
swfdec_net_stream_set_loader (SwfdecNetStream *stream, SwfdecLoader *loader)
{
g_return_if_fail (SWFDEC_IS_NET_STREAM (stream));
+ g_return_if_fail (loader == NULL || SWFDEC_IS_SANDBOX (stream->sandbox));
g_return_if_fail (loader == NULL || SWFDEC_IS_LOADER (loader));
if (stream->loader) {
- SwfdecStream *lstream = SWFDEC_STREAM (loader);
+ SwfdecStream *lstream = SWFDEC_STREAM (stream->loader);
swfdec_stream_close (lstream);
swfdec_stream_set_target (lstream, NULL);
g_object_unref (lstream);
diff --git a/libswfdec/swfdec_net_stream.h b/libswfdec/swfdec_net_stream.h
index 253f8ce..60a74cd 100644
--- a/libswfdec/swfdec_net_stream.h
+++ b/libswfdec/swfdec_net_stream.h
@@ -26,6 +26,7 @@
#include <libswfdec/swfdec_net_connection.h>
#include <libswfdec/swfdec_flv_decoder.h>
#include <libswfdec/swfdec_player_internal.h>
+#include <libswfdec/swfdec_sandbox.h>
#include <libswfdec/swfdec_video_movie.h>
G_BEGIN_DECLS
@@ -46,6 +47,7 @@ struct _SwfdecNetStream
SwfdecNetConnection * conn; /* connection used for opening streams */
SwfdecLoader * loader; /* input stream */
+ SwfdecSandbox * sandbox; /* sandbox to emit events in */
SwfdecFlvDecoder * flvdecoder; /* flv decoder */
gboolean playing; /* TRUE if this stream is playing */
gboolean buffering; /* TRUE if we're waiting for more input data */
@@ -78,6 +80,7 @@ GType swfdec_net_stream_get_type (void);
SwfdecNetStream * swfdec_net_stream_new (SwfdecNetConnection * conn);
void swfdec_net_stream_set_url (SwfdecNetStream * stream,
+ SwfdecSandbox * sandbox,
const char * url);
void swfdec_net_stream_set_loader (SwfdecNetStream * stream,
SwfdecLoader * loader);
diff --git a/libswfdec/swfdec_net_stream_as.c b/libswfdec/swfdec_net_stream_as.c
index 470b035..1dce4ba 100644
--- a/libswfdec/swfdec_net_stream_as.c
+++ b/libswfdec/swfdec_net_stream_as.c
@@ -50,7 +50,7 @@ swfdec_net_stream_play (SwfdecAsContext *cx, SwfdecAsObject *obj, guint argc, Sw
const char *url;
url = swfdec_as_value_to_string (cx, &argv[0]);
- swfdec_net_stream_set_url (stream, url);
+ swfdec_net_stream_set_url (stream, SWFDEC_SANDBOX (cx->global), url);
swfdec_net_stream_set_playing (stream, TRUE);
}
commit ffd24a1c0e77f9d98fcbd2aa9c71f5c3cf5e8824
Author: Benjamin Otte <otte at gnome.org>
Date: Mon Jan 21 13:05:30 2008 +0100
fix SEGV
diff --git a/libswfdec/swfdec_xml_socket.c b/libswfdec/swfdec_xml_socket.c
index 2978a2f..886a042 100644
--- a/libswfdec/swfdec_xml_socket.c
+++ b/libswfdec/swfdec_xml_socket.c
@@ -219,7 +219,7 @@ swfdec_xml_socket_connect (SwfdecAsContext *cx, SwfdecAsObject *object,
const char *host;
int port;
- SWFDEC_AS_CHECK (0, NULL, "si", host, port);
+ SWFDEC_AS_CHECK (0, NULL, "si", &host, &port);
if (SWFDEC_IS_MOVIE (object) || object == NULL)
return;
commit ab84805cd92e42f3a9aff3905085cc56b04e30f7
Author: Benjamin Otte <otte at gnome.org>
Date: Mon Jan 21 12:56:13 2008 +0100
sandbox will not be NULL anymore here
diff --git a/libswfdec/swfdec_resource.c b/libswfdec/swfdec_resource.c
index 7f6920c..e3e90a8 100644
--- a/libswfdec/swfdec_resource.c
+++ b/libswfdec/swfdec_resource.c
@@ -77,7 +77,6 @@ swfdec_resource_stream_target_image (SwfdecResource *instance)
if (SWFDEC_IS_SWF_DECODER (instance->decoder)) {
SwfdecSwfDecoder *dec = SWFDEC_SWF_DECODER (instance->decoder);
- g_assert (instance->sandbox == NULL);
instance->sandbox = swfdec_sandbox_get_for_url (player,
swfdec_loader_get_url (instance->loader),
SWFDEC_SWF_DECODER (instance->decoder)->use_network);
commit 76bbefc2cd2679db09b7a1461d0289dcf53e26a7
Author: Benjamin Otte <otte at gnome.org>
Date: Mon Jan 21 12:55:28 2008 +0100
new resources inherit their parent's sandbox, until they're grown up
diff --git a/libswfdec/swfdec_movie.c b/libswfdec/swfdec_movie.c
index 44ae483..278a067 100644
--- a/libswfdec/swfdec_movie.c
+++ b/libswfdec/swfdec_movie.c
@@ -469,10 +469,6 @@ swfdec_movie_execute (SwfdecMovie *movie, SwfdecEventType condition)
g_return_if_fail (SWFDEC_IS_MOVIE (movie));
- /* when resource is not an SWF file */
- if (movie->resource->sandbox == NULL)
- return;
-
if (SWFDEC_IS_BUTTON_MOVIE (movie)) {
/* these conditions don't exist for buttons */
if (condition == SWFDEC_EVENT_CONSTRUCT || condition < SWFDEC_EVENT_PRESS)
diff --git a/libswfdec/swfdec_resource.c b/libswfdec/swfdec_resource.c
index ec2eaa1..7f6920c 100644
--- a/libswfdec/swfdec_resource.c
+++ b/libswfdec/swfdec_resource.c
@@ -542,6 +542,7 @@ swfdec_resource_do_load (SwfdecPlayer *player, const SwfdecURL *url, gboolean al
resource->clip_loader = load->loader;
resource->clip_loader_sandbox = load->sandbox;
}
+ resource->sandbox = load->sandbox;
if (!allowed) {
SWFDEC_WARNING ("SECURITY: no access to %s from %s",
diff --git a/libswfdec/swfdec_resource.h b/libswfdec/swfdec_resource.h
index de7409f..fba2f95 100644
--- a/libswfdec/swfdec_resource.h
+++ b/libswfdec/swfdec_resource.h
@@ -48,7 +48,7 @@ struct _SwfdecResource
SwfdecAsObject object;
guint version; /* version of this resource */
- SwfdecSandbox * sandbox; /* sandbox this resource belongs to or NULL if not initialized yet */
+ SwfdecSandbox * sandbox; /* sandbox this resource belongs to (only NULL for a short time on very first loader) */
SwfdecSpriteMovie * movie; /* the movie responsible for creating this instance */
SwfdecLoader * loader; /* the loader providing data for the decoder */
commit 34887b70ad9a823a6f179564c137d685aef3886f
Author: Benjamin Otte <otte at gnome.org>
Date: Mon Jan 21 12:44:44 2008 +0100
use MAXUINT as a version identifier
diff --git a/libswfdec/swfdec_as_context.c b/libswfdec/swfdec_as_context.c
index e5778ef..ccce123 100644
--- a/libswfdec/swfdec_as_context.c
+++ b/libswfdec/swfdec_as_context.c
@@ -558,6 +558,8 @@ swfdec_as_context_init (SwfdecAsContext *context)
{
const char *s;
+ context->version = G_MAXUINT;
+
context->strings = g_hash_table_new (g_str_hash, g_str_equal);
context->objects = g_hash_table_new (g_direct_hash, g_direct_equal);
commit 74ecb9317bf463061fb5a86ffa893f8901b6745c
Author: Benjamin Otte <otte at gnome.org>
Date: Mon Jan 21 12:44:20 2008 +0100
set the prototype for all movies
diff --git a/libswfdec/swfdec_resource.c b/libswfdec/swfdec_resource.c
index 74f6193..ec2eaa1 100644
--- a/libswfdec/swfdec_resource.c
+++ b/libswfdec/swfdec_resource.c
@@ -86,8 +86,8 @@ swfdec_resource_stream_target_image (SwfdecResource *instance)
g_assert (movie->sprite->parse_frame > 0);
movie->n_frames = movie->sprite->n_frames;
swfdec_movie_invalidate_last (SWFDEC_MOVIE (movie));
+ swfdec_as_object_set_constructor (SWFDEC_AS_OBJECT (movie), instance->sandbox->MovieClip);
if (swfdec_resource_is_root (instance)) {
- swfdec_as_object_set_constructor (SWFDEC_AS_OBJECT (movie), instance->sandbox->MovieClip);
swfdec_movie_initialize (SWFDEC_MOVIE (movie));
swfdec_player_perform_actions (player);
}
commit 41bca6f2ebc547a0550353e4989294300a8cf7cf
Author: Benjamin Otte <otte at gnome.org>
Date: Mon Jan 21 12:43:40 2008 +0100
track the sandbox for MovieClipLoader events
diff --git a/libswfdec/swfdec_resource.c b/libswfdec/swfdec_resource.c
index 8a9e92e..74f6193 100644
--- a/libswfdec/swfdec_resource.c
+++ b/libswfdec/swfdec_resource.c
@@ -148,8 +148,11 @@ swfdec_resource_emit_signal (SwfdecResource *resource, const char *name, gboolea
}
if (n_args)
memcpy (&vals[skip], args, sizeof (SwfdecAsValue) * n_args);
+ /* FIXME: what's the correct sandbox here? */
+ swfdec_sandbox_use (resource->clip_loader_sandbox);
swfdec_as_object_call (SWFDEC_AS_OBJECT (resource->clip_loader), SWFDEC_AS_STR_broadcastMessage,
n_args + skip, vals, NULL);
+ swfdec_sandbox_unuse (resource->clip_loader_sandbox);
}
static void
@@ -372,10 +375,14 @@ swfdec_resource_mark (SwfdecAsObject *object)
{
SwfdecResource *resource = SWFDEC_RESOURCE (object);
- if (resource->clip_loader)
+ if (resource->clip_loader) {
swfdec_as_object_mark (SWFDEC_AS_OBJECT (resource->clip_loader));
+ swfdec_as_object_mark (SWFDEC_AS_OBJECT (resource->clip_loader_sandbox));
+ }
if (resource->sandbox)
swfdec_as_object_mark (SWFDEC_AS_OBJECT (resource->sandbox));
+
+ SWFDEC_AS_OBJECT_CLASS (swfdec_resource_parent_class)->mark (object);
}
static void
@@ -392,10 +399,6 @@ swfdec_resource_dispose (GObject *object)
g_object_unref (resource->decoder);
resource->decoder = NULL;
}
- if (resource->clip_loader) {
- g_object_unref (resource->clip_loader);
- resource->clip_loader = NULL;
- }
g_free (resource->target);
g_free (resource->variables);
g_hash_table_destroy (resource->exports);
@@ -535,9 +538,10 @@ swfdec_resource_do_load (SwfdecPlayer *player, const SwfdecURL *url, gboolean al
swfdec_as_object_add (SWFDEC_AS_OBJECT (resource), SWFDEC_AS_CONTEXT (player), sizeof (SwfdecResource));
resource->version = 8;
resource->target = g_strdup (load->target);
- if (load->loader)
- resource->clip_loader = g_object_ref (load->loader);
- swfdec_player_root (player, resource, (GFunc) swfdec_as_object_mark);
+ if (load->loader) {
+ resource->clip_loader = load->loader;
+ resource->clip_loader_sandbox = load->sandbox;
+ }
if (!allowed) {
SWFDEC_WARNING ("SECURITY: no access to %s from %s",
@@ -547,6 +551,7 @@ swfdec_resource_do_load (SwfdecPlayer *player, const SwfdecURL *url, gboolean al
return;
}
+ swfdec_player_root (player, resource, (GFunc) swfdec_as_object_mark);
loader = swfdec_loader_load (player->priv->resource->loader,
url, load->request, load->buffer);
swfdec_resource_set_loader (resource, loader);
@@ -673,9 +678,7 @@ swfdec_resource_emit_on_load_init (SwfdecResource *resource)
swfdec_resource_emit_signal (resource, SWFDEC_AS_STR_onLoadInit, FALSE, NULL, 0);
resource->state = SWFDEC_RESOURCE_DONE;
/* free now unneeded resources */
- if (resource->clip_loader) {
- g_object_unref (resource->clip_loader);
- resource->clip_loader = NULL;
- }
+ resource->clip_loader = NULL;
+ resource->clip_loader_sandbox = NULL;
return TRUE;
}
diff --git a/libswfdec/swfdec_resource.h b/libswfdec/swfdec_resource.h
index f72da77..de7409f 100644
--- a/libswfdec/swfdec_resource.h
+++ b/libswfdec/swfdec_resource.h
@@ -62,6 +62,7 @@ struct _SwfdecResource
SwfdecResourceState state; /* state we're in (for determining callbacks */
char * target; /* target path we use for signalling */
SwfdecMovieClipLoader *clip_loader; /* loader that gets notified about load events */
+ SwfdecSandbox * clip_loader_sandbox; /* sandbox used for events on the clip loader */
};
struct _SwfdecResourceClass
commit 839304eb0c7977ebbc153986b3c945f898b5f5e2
Author: Benjamin Otte <otte at gnome.org>
Date: Mon Jan 21 10:15:56 2008 +0100
use a sandbox when emitting onScroller
diff --git a/libswfdec/swfdec_text_field_movie.c b/libswfdec/swfdec_text_field_movie.c
index 214b345..8f8af44 100644
--- a/libswfdec/swfdec_text_field_movie.c
+++ b/libswfdec/swfdec_text_field_movie.c
@@ -1198,11 +1198,15 @@ swfdec_text_field_movie_iterate (SwfdecMovie *movie)
if (text->scroll_changed) {
SwfdecAsValue argv[2];
+ SWFDEC_FIXME ("I'm pretty sure this is swfdec_player_add_action()'d");
SWFDEC_AS_VALUE_SET_STRING (&argv[0], SWFDEC_AS_STR_onScroller);
SWFDEC_AS_VALUE_SET_OBJECT (&argv[1], SWFDEC_AS_OBJECT (movie));
+ swfdec_sandbox_use (movie->resource->sandbox);
swfdec_as_object_call (SWFDEC_AS_OBJECT (movie),
SWFDEC_AS_STR_broadcastMessage, 2, argv, NULL);
+ swfdec_sandbox_unuse (movie->resource->sandbox);
+ /* FIXME: unset this before or after emitting the event? */
text->scroll_changed = FALSE;
}
}
commit 742745f38bb27b173dee7a0bbbbdd96a4f784d46
Author: Benjamin Otte <otte at gnome.org>
Date: Mon Jan 21 10:15:39 2008 +0100
don't execute events for movies without sandbox
This happens for movies that have loaded images
diff --git a/libswfdec/swfdec_movie.c b/libswfdec/swfdec_movie.c
index 278a067..44ae483 100644
--- a/libswfdec/swfdec_movie.c
+++ b/libswfdec/swfdec_movie.c
@@ -469,6 +469,10 @@ swfdec_movie_execute (SwfdecMovie *movie, SwfdecEventType condition)
g_return_if_fail (SWFDEC_IS_MOVIE (movie));
+ /* when resource is not an SWF file */
+ if (movie->resource->sandbox == NULL)
+ return;
+
if (SWFDEC_IS_BUTTON_MOVIE (movie)) {
/* these conditions don't exist for buttons */
if (condition == SWFDEC_EVENT_CONSTRUCT || condition < SWFDEC_EVENT_PRESS)
commit 1abaa70c4a2f39d46d6c121c9db6e72d97830e1e
Author: Benjamin Otte <otte at gnome.org>
Date: Mon Jan 21 09:44:17 2008 +0100
add extra check to catch a common error case
diff --git a/libswfdec/swfdec_as_object.c b/libswfdec/swfdec_as_object.c
index 4b8ae76..3004f63 100644
--- a/libswfdec/swfdec_as_object.c
+++ b/libswfdec/swfdec_as_object.c
@@ -1230,6 +1230,7 @@ swfdec_as_object_call (SwfdecAsObject *object, const char *name, guint argc,
g_return_if_fail (SWFDEC_IS_AS_OBJECT (object));
g_return_if_fail (name != NULL);
g_return_if_fail (argc == 0 || argv != NULL);
+ g_return_if_fail (object->context->global != NULL); /* for SwfdecPlayer */
if (return_value)
SWFDEC_AS_VALUE_SET_UNDEFINED (return_value);
commit e8a740b5dea82de346194e110a7b94bc5792e65d
Author: Benjamin Otte <otte at gnome.org>
Date: Mon Jan 21 09:38:56 2008 +0100
we're not a SwfdecAsObject anymore
diff --git a/libswfdec/swfdec_load_object.c b/libswfdec/swfdec_load_object.c
index f9acafe..642e256 100644
--- a/libswfdec/swfdec_load_object.c
+++ b/libswfdec/swfdec_load_object.c
@@ -36,7 +36,7 @@
static SwfdecPlayer *
swfdec_load_object_stream_target_get_player (SwfdecStreamTarget *target)
{
- return SWFDEC_PLAYER (SWFDEC_AS_OBJECT (target)->context);
+ return SWFDEC_PLAYER (SWFDEC_LOAD_OBJECT (target)->target->context);
}
static void
@@ -47,8 +47,10 @@ swfdec_load_object_stream_target_parse (SwfdecStreamTarget *target,
SwfdecLoadObject *load_object = SWFDEC_LOAD_OBJECT (target);
if (load_object->progress != NULL) {
+ swfdec_sandbox_use (load_object->sandbox);
load_object->progress (load_object->target,
swfdec_loader_get_loaded (loader), swfdec_loader_get_size (loader));
+ swfdec_sandbox_unuse (load_object->sandbox);
}
}
@@ -65,11 +67,13 @@ swfdec_load_object_stream_target_error (SwfdecStreamTarget *target,
g_object_unref (loader);
/* call finish */
+ swfdec_sandbox_use (load_object->sandbox);
load_object->finish (load_object->target, NULL);
+ swfdec_sandbox_unuse (load_object->sandbox);
/* unroot */
swfdec_player_unroot (SWFDEC_PLAYER (
- SWFDEC_AS_OBJECT (load_object)->context), load_object);
+ SWFDEC_AS_OBJECT (load_object->sandbox)->context), load_object);
}
static void
@@ -90,16 +94,18 @@ swfdec_load_object_stream_target_close (SwfdecStreamTarget *target,
g_object_unref (loader);
/* call finish */
+ swfdec_sandbox_use (load_object->sandbox);
if (text != NULL) {
load_object->finish (load_object->target,
swfdec_as_context_give_string (load_object->target->context, text));
} else {
load_object->finish (load_object->target, SWFDEC_AS_STR_EMPTY);
}
+ swfdec_sandbox_unuse (load_object->sandbox);
/* unroot */
swfdec_player_unroot (SWFDEC_PLAYER (
- SWFDEC_AS_OBJECT (load_object)->context), load_object);
+ SWFDEC_AS_OBJECT (load_object->sandbox)->context), load_object);
}
static void
commit 2a5f9385c6a93a583d7f7a15d109fc44ffb7b161
Author: Benjamin Otte <otte at gnome.org>
Date: Mon Jan 21 09:38:46 2008 +0100
replace the movie with the right resource
diff --git a/libswfdec/swfdec_resource.c b/libswfdec/swfdec_resource.c
index d5a1856..8a9e92e 100644
--- a/libswfdec/swfdec_resource.c
+++ b/libswfdec/swfdec_resource.c
@@ -216,7 +216,7 @@ swfdec_resource_create_movie (SwfdecResource *resource)
movie = swfdec_player_create_movie_at_level (player, resource, level);
} else {
/* FIXME: is this correct? */
- movie = swfdec_resource_replace_movie (movie, SWFDEC_MOVIE (movie)->resource);
+ movie = swfdec_resource_replace_movie (movie, resource);
}
swfdec_player_unroot (player, resource);
return TRUE;
commit 9d3d043fd6a007b52bed48f754c357221ba45ce0
Author: Benjamin Otte <otte at gnome.org>
Date: Mon Jan 21 09:28:49 2008 +0100
add swfdc_sandbox_try_use() and use it
diff --git a/libswfdec/swfdec_sandbox.c b/libswfdec/swfdec_sandbox.c
index 4802fa9..bdc7bf1 100644
--- a/libswfdec/swfdec_sandbox.c
+++ b/libswfdec/swfdec_sandbox.c
@@ -226,6 +226,32 @@ swfdec_sandbox_use (SwfdecSandbox *sandbox)
}
/**
+ * swfdec_sandbox_try_use:
+ * @sandbox: the sandbox to use
+ *
+ * Makes sure a sandbox is in use. If no sandbox is in use currently, use the
+ * given @sandbox. This function is intended for cases where code can be called
+ * from both inside scripts with a sandbox already set or outside with no
+ * sandbox in use.
+ *
+ * Returns: %TRUE if the new sandbox will be used. You need to call
+ * swfdec_sandbox_unuse() afterwards. %FALSE if a sandbox is already in
+ * use.
+ **/
+gboolean
+swfdec_sandbox_try_use (SwfdecSandbox *sandbox)
+{
+ g_return_val_if_fail (SWFDEC_IS_SANDBOX (sandbox), FALSE);
+ g_return_val_if_fail (sandbox->type != SWFDEC_SANDBOX_NONE, FALSE);
+
+ if (SWFDEC_AS_OBJECT (sandbox)->context->global)
+ return FALSE;
+
+ swfdec_sandbox_use (sandbox);
+ return TRUE;
+}
+
+/**
* swfdec_sandbox_unuse:
* @sandbox: a #SwfdecSandbox
*
diff --git a/libswfdec/swfdec_sandbox.h b/libswfdec/swfdec_sandbox.h
index 3079f75..1ae30fd 100644
--- a/libswfdec/swfdec_sandbox.h
+++ b/libswfdec/swfdec_sandbox.h
@@ -74,6 +74,7 @@ SwfdecSandbox * swfdec_sandbox_get_for_url (SwfdecPlayer * player,
gboolean allow_network);
void swfdec_sandbox_use (SwfdecSandbox * sandbox);
+gboolean swfdec_sandbox_try_use (SwfdecSandbox * sandbox);
void swfdec_sandbox_unuse (SwfdecSandbox * sandbox);
G_END_DECLS
diff --git a/libswfdec/swfdec_text_field_movie.c b/libswfdec/swfdec_text_field_movie.c
index bc8cdb6..214b345 100644
--- a/libswfdec/swfdec_text_field_movie.c
+++ b/libswfdec/swfdec_text_field_movie.c
@@ -30,10 +30,12 @@
#include "swfdec_as_context.h"
#include "swfdec_as_strings.h"
#include "swfdec_as_interpret.h"
-#include "swfdec_text_format.h"
-#include "swfdec_xml.h"
#include "swfdec_debug.h"
#include "swfdec_player_internal.h"
+#include "swfdec_resource.h"
+#include "swfdec_sandbox.h"
+#include "swfdec_text_format.h"
+#include "swfdec_xml.h"
G_DEFINE_TYPE (SwfdecTextFieldMovie, swfdec_text_field_movie, SWFDEC_TYPE_MOVIE)
@@ -1118,6 +1120,9 @@ swfdec_text_field_movie_init_movie (SwfdecMovie *movie)
SwfdecTextFieldMovie *text = SWFDEC_TEXT_FIELD_MOVIE (movie);
SwfdecAsContext *cx;
SwfdecAsValue val;
+ gboolean needs_unuse;
+
+ needs_unuse = swfdec_sandbox_try_use (movie->resource->sandbox);
cx = SWFDEC_AS_OBJECT (movie)->context;
@@ -1138,7 +1143,7 @@ swfdec_text_field_movie_init_movie (SwfdecMovie *movie)
text->format_new =
SWFDEC_TEXT_FORMAT (swfdec_text_format_new_no_properties (cx));
if (!text->format_new)
- return;
+ goto out;
swfdec_text_format_set_defaults (text->format_new);
text->format_new->color = text->text->color;
@@ -1171,6 +1176,10 @@ swfdec_text_field_movie_init_movie (SwfdecMovie *movie)
swfdec_text_field_movie_set_listen_variable (text,
swfdec_as_context_get_string (cx, text->text->variable));
}
+
+out:
+ if (needs_unuse)
+ swfdec_sandbox_unuse (movie->resource->sandbox);
}
static void
commit 7bc307ee9736b60007952628ebd475147c7196b8
Author: Benjamin Otte <otte at gnome.org>
Date: Mon Jan 21 09:28:33 2008 +0100
parse exports names with the version of their Flash file
diff --git a/libswfdec/swfdec_sprite_movie.c b/libswfdec/swfdec_sprite_movie.c
index 2eaafe6..e014ece 100644
--- a/libswfdec/swfdec_sprite_movie.c
+++ b/libswfdec/swfdec_sprite_movie.c
@@ -418,12 +418,14 @@ swfdec_sprite_movie_perform_one_action (SwfdecSpriteMovie *movie, guint tag, Swf
count = swfdec_bits_get_u16 (&bits);
SWFDEC_LOG ("exporting %u assets", count);
for (i = 0; i < count && swfdec_bits_left (&bits); i++) {
+ SwfdecSwfDecoder *s = SWFDEC_SWF_DECODER (resource->decoder);
guint id;
SwfdecCharacter *object;
char *name;
+
id = swfdec_bits_get_u16 (&bits);
- object = swfdec_swf_decoder_get_character (SWFDEC_SWF_DECODER (resource->decoder), id);
- name = swfdec_bits_get_string (&bits, SWFDEC_AS_CONTEXT (player)->version);
+ object = swfdec_swf_decoder_get_character (s, id);
+ name = swfdec_bits_get_string (&bits, s->version);
if (object == NULL) {
SWFDEC_ERROR ("cannot export id %u as %s, id wasn't found", id, name);
} else if (name == NULL) {
commit b8f07a87e1ab3ee64523a62442c5b40dab460c35
Author: Benjamin Otte <otte at gnome.org>
Date: Mon Jan 21 08:42:26 2008 +0100
loads of fixes to get further in the testsuite.
We're at letter "C" now.
diff --git a/libswfdec/swfdec_as_context.c b/libswfdec/swfdec_as_context.c
index f572239..e5778ef 100644
--- a/libswfdec/swfdec_as_context.c
+++ b/libswfdec/swfdec_as_context.c
@@ -362,12 +362,16 @@ swfdec_as_context_mark_roots (gpointer key, gpointer value, gpointer data)
static void
swfdec_as_context_do_mark (SwfdecAsContext *context)
{
- swfdec_as_object_mark (context->global);
- swfdec_as_value_mark (&context->exception_value);
- swfdec_as_object_mark (context->Function);
- swfdec_as_object_mark (context->Function_prototype);
- swfdec_as_object_mark (context->Object);
- swfdec_as_object_mark (context->Object_prototype);
+ /* This if is needed for SwfdecPlayer */
+ if (context->global) {
+ swfdec_as_object_mark (context->global);
+ swfdec_as_object_mark (context->Function);
+ swfdec_as_object_mark (context->Function_prototype);
+ swfdec_as_object_mark (context->Object);
+ swfdec_as_object_mark (context->Object_prototype);
+ }
+ if (context->exception)
+ swfdec_as_value_mark (&context->exception_value);
g_hash_table_foreach (context->objects, swfdec_as_context_mark_roots, NULL);
}
@@ -1388,7 +1392,8 @@ swfdec_as_context_startup (SwfdecAsContext *context)
g_return_if_fail (SWFDEC_IS_AS_CONTEXT (context));
g_return_if_fail (context->state == SWFDEC_AS_CONTEXT_NEW);
- if (!swfdec_as_stack_push_segment (context))
+ if (context->cur == NULL &&
+ !swfdec_as_stack_push_segment (context))
return;
if (context->global == NULL)
context->global = swfdec_as_object_new_empty (context);
diff --git a/libswfdec/swfdec_as_object.c b/libswfdec/swfdec_as_object.c
index babcd27..4b8ae76 100644
--- a/libswfdec/swfdec_as_object.c
+++ b/libswfdec/swfdec_as_object.c
@@ -1339,25 +1339,23 @@ void
swfdec_as_object_set_constructor (SwfdecAsObject *object, SwfdecAsObject *construct)
{
SwfdecAsValue val;
- SwfdecAsObject *proto;
g_return_if_fail (SWFDEC_IS_AS_OBJECT (object));
g_return_if_fail (SWFDEC_IS_AS_OBJECT (construct));
+ SWFDEC_AS_VALUE_SET_OBJECT (&val, construct);
+ swfdec_as_object_set_variable_and_flags (object, SWFDEC_AS_STR_constructor,
+ &val, SWFDEC_AS_VARIABLE_HIDDEN | SWFDEC_AS_VARIABLE_PERMANENT);
swfdec_as_object_get_variable (SWFDEC_AS_OBJECT (construct),
SWFDEC_AS_STR_prototype, &val);
if (SWFDEC_AS_VALUE_IS_OBJECT (&val)) {
- proto = SWFDEC_AS_VALUE_GET_OBJECT (&val);
+ SwfdecAsObject *proto = SWFDEC_AS_VALUE_GET_OBJECT (&val);
+ SWFDEC_AS_VALUE_SET_OBJECT (&val, proto);
+ swfdec_as_object_set_variable_and_flags (object, SWFDEC_AS_STR___proto__,
+ &val, SWFDEC_AS_VARIABLE_HIDDEN | SWFDEC_AS_VARIABLE_PERMANENT);
} else {
- SWFDEC_WARNING ("constructor has no prototype, using Object.prototype");
- proto = object->context->Object_prototype;
+ SWFDEC_WARNING ("constructor has no prototype, not setting any");
}
- SWFDEC_AS_VALUE_SET_OBJECT (&val, construct);
- swfdec_as_object_set_variable_and_flags (object, SWFDEC_AS_STR_constructor,
- &val, SWFDEC_AS_VARIABLE_HIDDEN | SWFDEC_AS_VARIABLE_PERMANENT);
- SWFDEC_AS_VALUE_SET_OBJECT (&val, proto);
- swfdec_as_object_set_variable_and_flags (object, SWFDEC_AS_STR___proto__,
- &val, SWFDEC_AS_VARIABLE_HIDDEN | SWFDEC_AS_VARIABLE_PERMANENT);
}
/**
diff --git a/libswfdec/swfdec_movie.c b/libswfdec/swfdec_movie.c
index 2f45345..278a067 100644
--- a/libswfdec/swfdec_movie.c
+++ b/libswfdec/swfdec_movie.c
@@ -423,7 +423,7 @@ swfdec_movie_set_constructor (SwfdecSpriteMovie *movie)
}
}
if (constructor == NULL)
- constructor = SWFDEC_PLAYER (context)->priv->MovieClip;
+ constructor = mov->resource->sandbox->MovieClip;
swfdec_as_object_set_constructor (SWFDEC_AS_OBJECT (movie), constructor);
}
@@ -498,14 +498,14 @@ swfdec_movie_execute (SwfdecMovie *movie, SwfdecEventType condition)
swfdec_event_list_execute (movie->events, thisp, condition, 0);
}
/* FIXME: how do we compute the version correctly here? */
- if (swfdec_movie_get_version (movie) <= 5)
- return;
- name = swfdec_event_type_get_name (condition);
- if (name != NULL) {
- swfdec_as_object_call (SWFDEC_AS_OBJECT (movie), name, 0, NULL, NULL);
+ if (swfdec_movie_get_version (movie) > 5) {
+ name = swfdec_event_type_get_name (condition);
+ if (name != NULL) {
+ swfdec_as_object_call (SWFDEC_AS_OBJECT (movie), name, 0, NULL, NULL);
+ }
+ if (condition == SWFDEC_EVENT_CONSTRUCT)
+ swfdec_as_object_call (thisp, SWFDEC_AS_STR_constructor, 0, NULL, NULL);
}
- if (condition == SWFDEC_EVENT_CONSTRUCT)
- swfdec_as_object_call (thisp, SWFDEC_AS_STR_constructor, 0, NULL, NULL);
swfdec_sandbox_unuse (movie->resource->sandbox);
}
@@ -1014,10 +1014,6 @@ swfdec_movie_dispose (GObject *object)
g_assert (movie->list == NULL);
SWFDEC_LOG ("disposing movie %s (depth %d)", movie->name, movie->depth);
- if (movie->resource) {
- g_object_unref (movie->resource);
- movie->resource = NULL;
- }
if (movie->events) {
swfdec_event_list_free (movie->events);
movie->events = NULL;
@@ -1579,7 +1575,7 @@ swfdec_movie_new (SwfdecPlayer *player, int depth, SwfdecMovie *parent, SwfdecRe
g_object_ref (movie);
/* set essential properties */
movie->parent = parent;
- movie->resource = g_object_ref (resource);
+ movie->resource = resource;
if (parent) {
parent->list = g_list_insert_sorted (parent->list, movie, swfdec_movie_compare_depths);
SWFDEC_DEBUG ("inserting %s %s (depth %d) into %s %p", G_OBJECT_TYPE_NAME (movie), movie->name,
@@ -1686,6 +1682,7 @@ swfdec_movie_set_static_properties (SwfdecMovie *movie, const cairo_matrix_t *tr
* Creates a duplicate of @movie. The duplicate will not be initialized or
* queued up for any events. You have to do this manually. In particular calling
* swfdec_movie_initialize() on the returned movie must be done.
+ * This function must be called from within a script.
*
* Returns: a newly created movie or %NULL on error
**/
@@ -1693,6 +1690,7 @@ SwfdecMovie *
swfdec_movie_duplicate (SwfdecMovie *movie, const char *name, int depth)
{
SwfdecMovie *parent, *copy;
+ SwfdecSandbox *sandbox;
g_return_val_if_fail (SWFDEC_IS_MOVIE (movie), NULL);
g_return_val_if_fail (name != NULL, NULL);
@@ -1714,12 +1712,15 @@ swfdec_movie_duplicate (SwfdecMovie *movie, const char *name, int depth)
swfdec_movie_set_static_properties (copy, &movie->original_transform,
&movie->original_ctrans, movie->original_ratio, movie->clip_depth,
movie->blend_mode, movie->events);
+ sandbox = SWFDEC_SANDBOX (SWFDEC_AS_OBJECT (movie)->context->global);
+ swfdec_sandbox_unuse (sandbox);
if (SWFDEC_IS_SPRITE_MOVIE (copy)) {
swfdec_movie_queue_script (copy, SWFDEC_EVENT_INITIALIZE);
swfdec_movie_queue_script (copy, SWFDEC_EVENT_LOAD);
swfdec_movie_execute (copy, SWFDEC_EVENT_CONSTRUCT);
}
swfdec_movie_initialize (copy);
+ swfdec_sandbox_use (sandbox);
return copy;
}
diff --git a/libswfdec/swfdec_player.c b/libswfdec/swfdec_player.c
index 3393514..231b27a 100644
--- a/libswfdec/swfdec_player.c
+++ b/libswfdec/swfdec_player.c
@@ -882,10 +882,6 @@ swfdec_player_dispose (GObject *object)
while (priv->roots)
swfdec_movie_destroy (priv->roots->data);
- if (priv->resource) {
- g_object_unref (priv->resource);
- priv->resource = NULL;
- }
swfdec_function_list_clear (&priv->rooted);
/* we do this here so references to GC'd objects get freed */
@@ -1525,11 +1521,10 @@ swfdec_player_mark (SwfdecAsContext *context)
g_hash_table_foreach (priv->registered_classes, swfdec_player_mark_string_object, NULL);
g_hash_table_foreach (priv->scripting_callbacks, swfdec_player_mark_string_object, NULL);
- swfdec_as_object_mark (priv->MovieClip);
- swfdec_as_object_mark (priv->Video);
g_list_foreach (priv->roots, (GFunc) swfdec_as_object_mark, NULL);
g_list_foreach (priv->intervals, (GFunc) swfdec_as_object_mark, NULL);
swfdec_function_list_execute (&priv->rooted, player);
+ swfdec_as_object_mark (SWFDEC_AS_OBJECT (priv->resource));
SWFDEC_AS_CONTEXT_CLASS (swfdec_player_parent_class)->mark (context);
}
@@ -2046,7 +2041,7 @@ swfdec_player_get_export_class (SwfdecPlayer *player, const char *name)
SWFDEC_LOG ("found registered class %p for %s", ret, name);
return ret;
}
- return priv->MovieClip;
+ return NULL;
}
/**
diff --git a/libswfdec/swfdec_player_internal.h b/libswfdec/swfdec_player_internal.h
index fe08454..8c9e819 100644
--- a/libswfdec/swfdec_player_internal.h
+++ b/libswfdec/swfdec_player_internal.h
@@ -92,8 +92,6 @@ struct _SwfdecPlayerPrivate
guint interval_id; /* id returned from setInterval call */
GList * intervals; /* all currently running intervals */
GHashTable * registered_classes; /* name => SwfdecAsObject constructor */
- SwfdecAsObject * MovieClip; /* MovieClip object */
- SwfdecAsObject * Video; /* Video object */
/* rendering */
SwfdecRectangle invalid_extents; /* extents of area that needs a redraw in global coordinates */
diff --git a/libswfdec/swfdec_resource.c b/libswfdec/swfdec_resource.c
index 30baaa4..d5a1856 100644
--- a/libswfdec/swfdec_resource.c
+++ b/libswfdec/swfdec_resource.c
@@ -68,6 +68,7 @@ swfdec_resource_stream_target_get_player (SwfdecStreamTarget *target)
static void
swfdec_resource_stream_target_image (SwfdecResource *instance)
{
+ SwfdecPlayer *player = SWFDEC_PLAYER (SWFDEC_AS_OBJECT (instance)->context);
SwfdecSpriteMovie *movie = instance->movie;
if (movie->sprite != NULL)
@@ -76,15 +77,17 @@ swfdec_resource_stream_target_image (SwfdecResource *instance)
if (SWFDEC_IS_SWF_DECODER (instance->decoder)) {
SwfdecSwfDecoder *dec = SWFDEC_SWF_DECODER (instance->decoder);
- if (swfdec_sandbox_set_allow_network (instance->sandbox,
- SWFDEC_SWF_DECODER (instance->decoder)->use_network)) {
+ g_assert (instance->sandbox == NULL);
+ instance->sandbox = swfdec_sandbox_get_for_url (player,
+ swfdec_loader_get_url (instance->loader),
+ SWFDEC_SWF_DECODER (instance->decoder)->use_network);
+ if (instance->sandbox) {
movie->sprite = dec->main_sprite;
g_assert (movie->sprite->parse_frame > 0);
movie->n_frames = movie->sprite->n_frames;
swfdec_movie_invalidate_last (SWFDEC_MOVIE (movie));
if (swfdec_resource_is_root (instance)) {
- SwfdecPlayer *player = SWFDEC_PLAYER (SWFDEC_AS_OBJECT (instance)->context);
- swfdec_as_object_set_constructor (SWFDEC_AS_OBJECT (movie), player->priv->MovieClip);
+ swfdec_as_object_set_constructor (SWFDEC_AS_OBJECT (movie), instance->sandbox->MovieClip);
swfdec_movie_initialize (SWFDEC_MOVIE (movie));
swfdec_player_perform_actions (player);
}
@@ -371,7 +374,8 @@ swfdec_resource_mark (SwfdecAsObject *object)
if (resource->clip_loader)
swfdec_as_object_mark (SWFDEC_AS_OBJECT (resource->clip_loader));
- swfdec_as_object_mark (SWFDEC_AS_OBJECT (resource->sandbox));
+ if (resource->sandbox)
+ swfdec_as_object_mark (SWFDEC_AS_OBJECT (resource->sandbox));
}
static void
@@ -540,11 +544,10 @@ swfdec_resource_do_load (SwfdecPlayer *player, const SwfdecURL *url, gboolean al
load->url, swfdec_url_get_url (load->sandbox->url));
/* FIXME: is replacing correct? */
swfdec_resource_emit_error (resource, SWFDEC_AS_STR_IllegalRequest);
- g_object_unref (resource);
return;
}
- loader = swfdec_loader_load (SWFDEC_PLAYER (SWFDEC_AS_OBJECT (load->sandbox))->priv->resource->loader,
+ loader = swfdec_loader_load (player->priv->resource->loader,
url, load->request, load->buffer);
swfdec_resource_set_loader (resource, loader);
g_object_unref (loader);
diff --git a/libswfdec/swfdec_resource.h b/libswfdec/swfdec_resource.h
index c7d9544..f72da77 100644
--- a/libswfdec/swfdec_resource.h
+++ b/libswfdec/swfdec_resource.h
@@ -48,7 +48,7 @@ struct _SwfdecResource
SwfdecAsObject object;
guint version; /* version of this resource */
- SwfdecSandbox * sandbox; /* sandbox this resource belongs to */
+ SwfdecSandbox * sandbox; /* sandbox this resource belongs to or NULL if not initialized yet */
SwfdecSpriteMovie * movie; /* the movie responsible for creating this instance */
SwfdecLoader * loader; /* the loader providing data for the decoder */
diff --git a/libswfdec/swfdec_sandbox.c b/libswfdec/swfdec_sandbox.c
index 41b4301..4802fa9 100644
--- a/libswfdec/swfdec_sandbox.c
+++ b/libswfdec/swfdec_sandbox.c
@@ -44,58 +44,35 @@
* it as the global object.
*/
-G_DEFINE_TYPE (SwfdecSandbox, swfdec_sandbox, G_TYPE_OBJECT)
+G_DEFINE_TYPE (SwfdecSandbox, swfdec_sandbox, SWFDEC_TYPE_AS_OBJECT)
static void
-swfdec_sandbox_class_init (SwfdecSandboxClass *klass)
+swfdec_sandbox_mark (SwfdecAsObject *object)
{
+ SwfdecSandbox *sandbox = SWFDEC_SANDBOX (object);
+
+ swfdec_as_object_mark (sandbox->Function);
+ swfdec_as_object_mark (sandbox->Function_prototype);
+ swfdec_as_object_mark (sandbox->Object);
+ swfdec_as_object_mark (sandbox->Object_prototype);
+ swfdec_as_object_mark (sandbox->MovieClip);
+ swfdec_as_object_mark (sandbox->Video);
+
+ SWFDEC_AS_OBJECT_CLASS (swfdec_sandbox_parent_class)->mark (object);
}
static void
-swfdec_sandbox_init (SwfdecSandbox *sandbox)
+swfdec_sandbox_class_init (SwfdecSandboxClass *klass)
{
- sandbox->type = SWFDEC_SANDBOX_NONE;
+ SwfdecAsObjectClass *asobject_class = SWFDEC_AS_OBJECT_CLASS (klass);
+
+ asobject_class->mark = swfdec_sandbox_mark;
}
-/**
- * swfdec_sandbox_get_for_url:
- * @player: a #SwfdecPlayer
- * @url: the URL this player refers to
- *
- * Checks if a sandbox is already in use for a given URL and if so, returns it.
- * Otherwise a new sandbox is created, initialized and returned.
- * Note that the given url must be a HTTP, HTTPS or a FILE url.
- *
- * Returns: the sandbox corresponding to the given URL.
- **/
-SwfdecSandbox *
-swfdec_sandbox_get_for_url (SwfdecPlayer *player, const SwfdecURL *url)
+static void
+swfdec_sandbox_init (SwfdecSandbox *sandbox)
{
- SwfdecPlayerPrivate *priv;
- SwfdecSandbox *sandbox;
- SwfdecURL *real;
-
- g_return_val_if_fail (SWFDEC_IS_PLAYER (player), NULL);
- g_return_val_if_fail (url != NULL, NULL);
-
- priv = player->priv;
- real = swfdec_url_new_components (swfdec_url_get_protocol (url),
- swfdec_url_get_host (url), swfdec_url_get_port (url), NULL, NULL);
-
- sandbox = g_hash_table_lookup (priv->sandboxes, real);
- if (sandbox) {
- swfdec_url_free (real);
- } else {
- SwfdecAsContext *context = SWFDEC_AS_CONTEXT (player);
- guint size = sizeof (SwfdecSandbox);
- if (!swfdec_as_context_use_mem (context, size))
- size = 0;
-
- sandbox = g_object_new (SWFDEC_TYPE_SANDBOX, NULL);
- swfdec_as_object_add (SWFDEC_AS_OBJECT (sandbox), context, size);
- sandbox->url = real;
- }
- return sandbox;
+ sandbox->type = SWFDEC_SANDBOX_NONE;
}
static void
@@ -118,6 +95,11 @@ swfdec_sandbox_initialize (SwfdecSandbox *sandbox)
swfdec_as_context_run_init_script (context, swfdec_initialize,
sizeof (swfdec_initialize), 8);
+ sandbox->Function = context->Function;
+ sandbox->Function_prototype = context->Function_prototype;
+ sandbox->Object = context->Object;
+ sandbox->Object_prototype = context->Object_prototype;
+
if (context->state == SWFDEC_AS_CONTEXT_NEW)
context->state = SWFDEC_AS_CONTEXT_RUNNING;
swfdec_sandbox_unuse (sandbox);
@@ -125,18 +107,13 @@ swfdec_sandbox_initialize (SwfdecSandbox *sandbox)
/**
* swfdec_sandbox_set_allow_network:
* @sandbox: a #SwfdecSandbox
- * @network: %TRUE to allow network access, %FALSE to only allow local file
- * access. See the documentation of the use_network flag of the SWF
- * FileAttributes tag for what that means.
- *
- * This function finishes initialization of the @sandbox, if it is not yet
* finished, by giving the sandbox network or local file access. This function
* should be called on all return values of swfdec_sandbox_get_for_url().
*
* Returns: %TRUE if the sandbox initialization could be finished as requested,
* %FALSE if not and it shouldn't be used.
**/
-gboolean
+static gboolean
swfdec_sandbox_set_allow_network (SwfdecSandbox *sandbox, gboolean network)
{
g_return_val_if_fail (SWFDEC_IS_SANDBOX (sandbox), FALSE);
@@ -169,6 +146,58 @@ swfdec_sandbox_set_allow_network (SwfdecSandbox *sandbox, gboolean network)
}
/**
+ * swfdec_sandbox_get_for_url:
+ * @player: a #SwfdecPlayer
+ * @url: the URL this player refers to
+ * @allow_network: %TRUE to allow network access, false for local access
+ * @allow_network: %TRUE to allow network access, %FALSE to only allow local
+ * file access. See the documentation of the use_network flag
+ * of the SWF FileAttributes tag for what that means.
+ *
+ *
+ * Checks if a sandbox is already in use for a given URL and if so, returns it.
+ * Otherwise a new sandbox is created, initialized and returned.
+ * Note that the given url must be a HTTP, HTTPS or a FILE url.
+ *
+ * Returns: the sandbox corresponding to the given URL or %NULL if no such
+ * sandbox is allowed.
+ **/
+SwfdecSandbox *
+swfdec_sandbox_get_for_url (SwfdecPlayer *player, const SwfdecURL *url,
+ gboolean allow_network)
+{
+ SwfdecPlayerPrivate *priv;
+ SwfdecSandbox *sandbox;
+ SwfdecURL *real;
+
+ g_return_val_if_fail (SWFDEC_IS_PLAYER (player), NULL);
+ g_return_val_if_fail (url != NULL, NULL);
+
+ priv = player->priv;
+ real = swfdec_url_new_components (swfdec_url_get_protocol (url),
+ swfdec_url_get_host (url), swfdec_url_get_port (url), NULL, NULL);
+
+ sandbox = g_hash_table_lookup (priv->sandboxes, real);
+ if (sandbox) {
+ swfdec_url_free (real);
+ } else {
+ SwfdecAsContext *context = SWFDEC_AS_CONTEXT (player);
+ guint size = sizeof (SwfdecSandbox);
+ if (!swfdec_as_context_use_mem (context, size))
+ size = 0;
+
+ sandbox = g_object_new (SWFDEC_TYPE_SANDBOX, NULL);
+ swfdec_as_object_add (SWFDEC_AS_OBJECT (sandbox), context, size);
+ sandbox->url = real;
+ }
+
+ if (!swfdec_sandbox_set_allow_network (sandbox, allow_network))
+ return NULL;
+
+ return sandbox;
+}
+
+/**
* swfdec_sandbox_use:
* @sandbox: the sandbox to use when executing scripts
*
@@ -179,11 +208,21 @@ swfdec_sandbox_set_allow_network (SwfdecSandbox *sandbox, gboolean network)
void
swfdec_sandbox_use (SwfdecSandbox *sandbox)
{
+ SwfdecAsContext *context;
+ SwfdecPlayerPrivate *priv;
+
g_return_if_fail (SWFDEC_IS_SANDBOX (sandbox));
- g_return_if_fail (sandbox->type == SWFDEC_SANDBOX_NONE);
+ g_return_if_fail (sandbox->type != SWFDEC_SANDBOX_NONE);
g_return_if_fail (SWFDEC_AS_OBJECT (sandbox)->context->global == NULL);
- SWFDEC_AS_OBJECT (sandbox)->context->global = SWFDEC_AS_OBJECT (sandbox);
+ context = SWFDEC_AS_OBJECT (sandbox)->context;
+ priv = SWFDEC_PLAYER (context)->priv;
+ context->global = SWFDEC_AS_OBJECT (sandbox);
+
+ context->Function = sandbox->Function;
+ context->Function_prototype = sandbox->Function_prototype;
+ context->Object = sandbox->Object;
+ context->Object_prototype = sandbox->Object_prototype;
}
/**
@@ -195,10 +234,16 @@ swfdec_sandbox_use (SwfdecSandbox *sandbox)
void
swfdec_sandbox_unuse (SwfdecSandbox *sandbox)
{
+ SwfdecAsContext *context;
+
g_return_if_fail (SWFDEC_IS_SANDBOX (sandbox));
- g_return_if_fail (sandbox->type == SWFDEC_SANDBOX_NONE);
g_return_if_fail (SWFDEC_AS_OBJECT (sandbox)->context->global == SWFDEC_AS_OBJECT (sandbox));
- SWFDEC_AS_OBJECT (sandbox)->context->global = NULL;
+ context = SWFDEC_AS_OBJECT (sandbox)->context;
+ context->global = NULL;
+ context->Function = NULL;
+ context->Function_prototype = NULL;
+ context->Object = NULL;
+ context->Object_prototype = NULL;
}
diff --git a/libswfdec/swfdec_sandbox.h b/libswfdec/swfdec_sandbox.h
index eaf27de..3079f75 100644
--- a/libswfdec/swfdec_sandbox.h
+++ b/libswfdec/swfdec_sandbox.h
@@ -48,8 +48,18 @@ struct _SwfdecSandbox
{
SwfdecAsObject object;
- SwfdecSandboxType type; /* type of this sandbox */
- SwfdecURL * url; /* URL this sandbox acts for */
+ SwfdecSandboxType type; /* type of this sandbox */
+ SwfdecURL * url; /* URL this sandbox acts for */
+
+ /* global cached objects from context */
+ SwfdecAsObject * Function; /* Function */
+ SwfdecAsObject * Function_prototype; /* Function.prototype */
+ SwfdecAsObject * Object; /* Object */
+ SwfdecAsObject * Object_prototype; /* Object.prototype */
+
+ /* global player objects */
+ SwfdecAsObject * MovieClip; /* MovieClip object */
+ SwfdecAsObject * Video; /* Video object */
};
struct _SwfdecSandboxClass
@@ -60,10 +70,8 @@ struct _SwfdecSandboxClass
GType swfdec_sandbox_get_type (void);
SwfdecSandbox * swfdec_sandbox_get_for_url (SwfdecPlayer * player,
- const SwfdecURL * url);
-
-gboolean swfdec_sandbox_set_allow_network(SwfdecSandbox * sandbox,
- gboolean network);
+ const SwfdecURL * url,
+ gboolean allow_network);
void swfdec_sandbox_use (SwfdecSandbox * sandbox);
void swfdec_sandbox_unuse (SwfdecSandbox * sandbox);
diff --git a/libswfdec/swfdec_sprite_movie.c b/libswfdec/swfdec_sprite_movie.c
index 791f985..2eaafe6 100644
--- a/libswfdec/swfdec_sprite_movie.c
+++ b/libswfdec/swfdec_sprite_movie.c
@@ -460,7 +460,8 @@ swfdec_sprite_movie_perform_one_action (SwfdecSpriteMovie *movie, guint tag, Swf
return TRUE;
}
name = g_strdup_printf ("InitAction %u", id);
- sprite->init_action = swfdec_script_new_from_bits (&bits, name, SWFDEC_AS_CONTEXT (player)->version);
+ sprite->init_action = swfdec_script_new_from_bits (&bits, name,
+ swfdec_movie_get_version (mov));
g_free (name);
if (sprite->init_action) {
swfdec_player_add_action_script (player, mov, sprite->init_action, 0);
@@ -639,10 +640,10 @@ swfdec_sprite_movie_init_movie (SwfdecMovie *mov)
static void
swfdec_sprite_movie_add (SwfdecAsObject *object)
{
- SwfdecPlayer *player = SWFDEC_PLAYER (object->context);
+ SwfdecMovie *movie = SWFDEC_MOVIE (object);
- if (player->priv->MovieClip)
- swfdec_as_object_set_constructor (object, player->priv->MovieClip);
+ if (movie->resource->sandbox)
+ swfdec_as_object_set_constructor (object, movie->resource->sandbox->MovieClip);
SWFDEC_AS_OBJECT_CLASS (swfdec_sprite_movie_parent_class)->add (object);
}
diff --git a/libswfdec/swfdec_sprite_movie_as.c b/libswfdec/swfdec_sprite_movie_as.c
index 987a97e..03f2a21 100644
--- a/libswfdec/swfdec_sprite_movie_as.c
+++ b/libswfdec/swfdec_sprite_movie_as.c
@@ -671,10 +671,13 @@ swfdec_sprite_movie_init_from_object (SwfdecMovie *movie,
}
if (SWFDEC_IS_SPRITE_MOVIE (movie)) {
+ SwfdecSandbox *sandbox = movie->resource->sandbox;
swfdec_movie_queue_script (movie, SWFDEC_EVENT_INITIALIZE);
swfdec_movie_queue_script (movie, SWFDEC_EVENT_LOAD);
+ swfdec_sandbox_unuse (sandbox);
swfdec_movie_initialize (movie);
swfdec_movie_execute (movie, SWFDEC_EVENT_CONSTRUCT);
+ swfdec_sandbox_use (sandbox);
} else {
swfdec_movie_initialize (movie);
}
@@ -869,20 +872,20 @@ swfdec_sprite_movie_setMask (SwfdecAsContext *cx, SwfdecAsObject *object,
void
swfdec_sprite_movie_init_context (SwfdecPlayer *player)
{
- SwfdecPlayerPrivate *priv = player->priv;
SwfdecAsContext *context = SWFDEC_AS_CONTEXT (player);
SwfdecAsValue val;
- SwfdecAsObject *proto;
+ SwfdecAsObject *proto, *movie;
- priv->MovieClip = SWFDEC_AS_OBJECT (swfdec_as_object_add_function (context->global,
+ movie = SWFDEC_AS_OBJECT (swfdec_as_object_add_function (context->global,
SWFDEC_AS_STR_MovieClip, 0, NULL, 0));
- if (priv->MovieClip == NULL)
+ if (movie == NULL)
return;
+ SWFDEC_SANDBOX (context->global)->MovieClip = movie;
proto = swfdec_as_object_new (context);
if (!proto)
return;
SWFDEC_AS_VALUE_SET_OBJECT (&val, proto);
- swfdec_as_object_set_variable_and_flags (priv->MovieClip,
+ swfdec_as_object_set_variable_and_flags (movie,
SWFDEC_AS_STR_prototype, &val, SWFDEC_AS_VARIABLE_HIDDEN |
SWFDEC_AS_VARIABLE_PERMANENT);
};
diff --git a/libswfdec/swfdec_video_movie.c b/libswfdec/swfdec_video_movie.c
index 046befb..b77379a 100644
--- a/libswfdec/swfdec_video_movie.c
+++ b/libswfdec/swfdec_video_movie.c
@@ -23,6 +23,7 @@
#include "swfdec_video_movie.h"
#include "swfdec_player_internal.h"
+#include "swfdec_resource.h"
G_DEFINE_TYPE (SwfdecVideoMovie, swfdec_video_movie, SWFDEC_TYPE_MOVIE)
@@ -129,9 +130,7 @@ swfdec_video_movie_invalidate (SwfdecMovie *movie, const cairo_matrix_t *matrix,
static void
swfdec_video_movie_init_movie (SwfdecMovie *movie)
{
- SwfdecPlayer *player = SWFDEC_PLAYER (SWFDEC_AS_OBJECT (movie)->context);
-
- swfdec_as_object_set_constructor (SWFDEC_AS_OBJECT (movie), player->priv->Video);
+ swfdec_as_object_set_constructor (SWFDEC_AS_OBJECT (movie), movie->resource->sandbox->Video);
}
static void
diff --git a/libswfdec/swfdec_video_movie_as.c b/libswfdec/swfdec_video_movie_as.c
index 91f9c7e..ecc7a28 100644
--- a/libswfdec/swfdec_video_movie_as.c
+++ b/libswfdec/swfdec_video_movie_as.c
@@ -22,12 +22,13 @@
#endif
#include "swfdec_video.h"
+#include "swfdec_as_internal.h"
#include "swfdec_as_strings.h"
#include "swfdec_debug.h"
#include "swfdec_internal.h"
#include "swfdec_net_stream.h"
#include "swfdec_player_internal.h"
-#include "swfdec_as_internal.h"
+#include "swfdec_sandbox.h"
SWFDEC_AS_NATIVE (667, 1, swfdec_video_attach_video)
void
@@ -74,7 +75,7 @@ swfdec_video_movie_init_context (SwfdecPlayer *player)
SWFDEC_AS_STR_Video, 0, NULL, 0));
if (video == NULL)
return;
- player->priv->Video = video;
+ SWFDEC_SANDBOX (context->global)->Video = video;
proto = swfdec_as_object_new_empty (context);
if (proto == NULL)
return;
commit 16378e17f47f0ceeca203471040abc69359a7a7b
Author: Benjamin Otte <otte at gnome.org>
Date: Sun Jan 20 17:13:11 2008 +0100
set dump to a default value - no uninitialized variables please
diff --git a/test/swfdec_test.c b/test/swfdec_test.c
index 3974f4b..957b35b 100644
--- a/test/swfdec_test.c
+++ b/test/swfdec_test.c
@@ -77,7 +77,7 @@ main (int argc, char **argv)
SwfdecScript *script;
SwfdecAsValue val;
int i, ret;
- gboolean dump;
+ gboolean dump = FALSE;
GOptionEntry options[] = {
{ "dump", 'd', 0, G_OPTION_ARG_NONE, &dump, "dump images on failure", FALSE },
commit 1d351e5cd7105c00a2bea80671e99622c5fe7e76
Author: Benjamin Otte <otte at gnome.org>
Date: Sat Jan 19 22:14:19 2008 +0100
and add the swfdec_sandbox.[ch] files
diff --git a/libswfdec/swfdec_sandbox.c b/libswfdec/swfdec_sandbox.c
new file mode 100644
index 0000000..41b4301
--- /dev/null
+++ b/libswfdec/swfdec_sandbox.c
@@ -0,0 +1,204 @@
+/* Swfdec
+ * Copyright (C) 2007 Benjamin Otte <otte at gnome.org>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301 USA
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include "swfdec_sandbox.h"
+#include "swfdec_as_internal.h"
+#include "swfdec_debug.h"
+#include "swfdec_initialize.h"
+#include "swfdec_internal.h"
+#include "swfdec_player_internal.h"
+
+/*** GTK-DOC ***/
+
+/**
+ * SECTION:SwfdecSandbox
+ * @title: SwfdecSandbox
+ * @short_description: global object used for security
+ *
+ * The SwfdecSandbox object is a garbage-collected script object that does two
+ * things. The simple thing is its use as the global object while code is
+ * executed in a #SwfdecPlayer. So you can always assume that the global object
+ * is a #SwfdecSandbox. The second task it fulfills is acting as the security
+ * mechanism used by native functions to determine if a given action should be
+ * allowed or not. This is easy, because script functions can always refer to
+ * it as the global object.
+ */
+
+G_DEFINE_TYPE (SwfdecSandbox, swfdec_sandbox, G_TYPE_OBJECT)
+
+static void
+swfdec_sandbox_class_init (SwfdecSandboxClass *klass)
+{
+}
+
+static void
+swfdec_sandbox_init (SwfdecSandbox *sandbox)
+{
+ sandbox->type = SWFDEC_SANDBOX_NONE;
+}
+
+/**
+ * swfdec_sandbox_get_for_url:
+ * @player: a #SwfdecPlayer
+ * @url: the URL this player refers to
+ *
+ * Checks if a sandbox is already in use for a given URL and if so, returns it.
+ * Otherwise a new sandbox is created, initialized and returned.
+ * Note that the given url must be a HTTP, HTTPS or a FILE url.
+ *
+ * Returns: the sandbox corresponding to the given URL.
+ **/
+SwfdecSandbox *
+swfdec_sandbox_get_for_url (SwfdecPlayer *player, const SwfdecURL *url)
+{
+ SwfdecPlayerPrivate *priv;
+ SwfdecSandbox *sandbox;
+ SwfdecURL *real;
+
+ g_return_val_if_fail (SWFDEC_IS_PLAYER (player), NULL);
+ g_return_val_if_fail (url != NULL, NULL);
+
+ priv = player->priv;
+ real = swfdec_url_new_components (swfdec_url_get_protocol (url),
+ swfdec_url_get_host (url), swfdec_url_get_port (url), NULL, NULL);
+
+ sandbox = g_hash_table_lookup (priv->sandboxes, real);
+ if (sandbox) {
+ swfdec_url_free (real);
+ } else {
+ SwfdecAsContext *context = SWFDEC_AS_CONTEXT (player);
+ guint size = sizeof (SwfdecSandbox);
+ if (!swfdec_as_context_use_mem (context, size))
+ size = 0;
+
+ sandbox = g_object_new (SWFDEC_TYPE_SANDBOX, NULL);
+ swfdec_as_object_add (SWFDEC_AS_OBJECT (sandbox), context, size);
+ sandbox->url = real;
+ }
+ return sandbox;
+}
+
+static void
+swfdec_sandbox_initialize (SwfdecSandbox *sandbox)
+{
+ SwfdecAsContext *context = SWFDEC_AS_OBJECT (sandbox)->context;
+ SwfdecPlayer *player = SWFDEC_PLAYER (context);
+
+ swfdec_sandbox_use (sandbox);
+ if (context->state == SWFDEC_AS_CONTEXT_RUNNING)
+ context->state = SWFDEC_AS_CONTEXT_NEW;
+ swfdec_as_context_startup (context);
+ /* reset state for initialization */
+ /* FIXME: have a better way to do this */
+ context->state = SWFDEC_AS_CONTEXT_NEW;
+ swfdec_sprite_movie_init_context (player);
+ swfdec_video_movie_init_context (player);
+ swfdec_net_stream_init_context (player);
+
+ swfdec_as_context_run_init_script (context, swfdec_initialize,
+ sizeof (swfdec_initialize), 8);
+
+ if (context->state == SWFDEC_AS_CONTEXT_NEW)
+ context->state = SWFDEC_AS_CONTEXT_RUNNING;
+ swfdec_sandbox_unuse (sandbox);
+}
+/**
+ * swfdec_sandbox_set_allow_network:
+ * @sandbox: a #SwfdecSandbox
+ * @network: %TRUE to allow network access, %FALSE to only allow local file
+ * access. See the documentation of the use_network flag of the SWF
+ * FileAttributes tag for what that means.
+ *
+ * This function finishes initialization of the @sandbox, if it is not yet
+ * finished, by giving the sandbox network or local file access. This function
+ * should be called on all return values of swfdec_sandbox_get_for_url().
+ *
+ * Returns: %TRUE if the sandbox initialization could be finished as requested,
+ * %FALSE if not and it shouldn't be used.
+ **/
+gboolean
+swfdec_sandbox_set_allow_network (SwfdecSandbox *sandbox, gboolean network)
+{
+ g_return_val_if_fail (SWFDEC_IS_SANDBOX (sandbox), FALSE);
+
+ switch (sandbox->type) {
+ case SWFDEC_SANDBOX_REMOTE:
+ return TRUE;
+ case SWFDEC_SANDBOX_LOCAL_FILE:
+ return !network;
+ case SWFDEC_SANDBOX_LOCAL_NETWORK:
+ return network;
+ case SWFDEC_SANDBOX_LOCAL_TRUSTED:
+ return TRUE;
+ case SWFDEC_SANDBOX_NONE:
+ break;
+ default:
+ g_assert_not_reached ();
+ break;
+ }
+
+ if (swfdec_url_is_local (sandbox->url)) {
+ sandbox->type = network ? SWFDEC_SANDBOX_LOCAL_NETWORK : SWFDEC_SANDBOX_LOCAL_FILE;
+ } else {
+ sandbox->type = SWFDEC_SANDBOX_REMOTE;
+ }
+
+ swfdec_sandbox_initialize (sandbox);
+
+ return TRUE;
+}
+
+/**
+ * swfdec_sandbox_use:
+ * @sandbox: the sandbox to use when executing scripts
+ *
+ * Sets @sandbox to be used for scripts that are going to be executed next. No
+ * sandbox may be set yet. You must unset the sandbox with
+ * swfdec_sandbox_unuse() after calling your script.
+ **/
+void
+swfdec_sandbox_use (SwfdecSandbox *sandbox)
+{
+ g_return_if_fail (SWFDEC_IS_SANDBOX (sandbox));
+ g_return_if_fail (sandbox->type == SWFDEC_SANDBOX_NONE);
+ g_return_if_fail (SWFDEC_AS_OBJECT (sandbox)->context->global == NULL);
+
+ SWFDEC_AS_OBJECT (sandbox)->context->global = SWFDEC_AS_OBJECT (sandbox);
+}
+
+/**
+ * swfdec_sandbox_unuse:
+ * @sandbox: a #SwfdecSandbox
+ *
+ * Unsets the sandbox as the current sandbox for executing scripts.
+ **/
+void
+swfdec_sandbox_unuse (SwfdecSandbox *sandbox)
+{
+ g_return_if_fail (SWFDEC_IS_SANDBOX (sandbox));
+ g_return_if_fail (sandbox->type == SWFDEC_SANDBOX_NONE);
+ g_return_if_fail (SWFDEC_AS_OBJECT (sandbox)->context->global == SWFDEC_AS_OBJECT (sandbox));
+
+ SWFDEC_AS_OBJECT (sandbox)->context->global = NULL;
+}
+
diff --git a/libswfdec/swfdec_sandbox.h b/libswfdec/swfdec_sandbox.h
new file mode 100644
index 0000000..eaf27de
--- /dev/null
+++ b/libswfdec/swfdec_sandbox.h
@@ -0,0 +1,72 @@
+/* Swfdec
+ * Copyright (C) 2007 Benjamin Otte <otte at gnome.org>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301 USA
+ */
+
+#ifndef _SWFDEC_SANDBOX_H_
+#define _SWFDEC_SANDBOX_H_
+
+#include <libswfdec/swfdec_as_object.h>
+#include <libswfdec/swfdec_url.h>
+#include <libswfdec/swfdec_player.h>
+
+G_BEGIN_DECLS
+
+typedef struct _SwfdecSandbox SwfdecSandbox;
+typedef struct _SwfdecSandboxClass SwfdecSandboxClass;
+
+typedef enum {
+ SWFDEC_SANDBOX_NONE,
+ SWFDEC_SANDBOX_REMOTE,
+ SWFDEC_SANDBOX_LOCAL_FILE,
+ SWFDEC_SANDBOX_LOCAL_NETWORK,
+ SWFDEC_SANDBOX_LOCAL_TRUSTED
+} SwfdecSandboxType;
+
+#define SWFDEC_TYPE_SANDBOX (swfdec_sandbox_get_type())
+#define SWFDEC_IS_SANDBOX(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), SWFDEC_TYPE_SANDBOX))
+#define SWFDEC_IS_SANDBOX_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), SWFDEC_TYPE_SANDBOX))
+#define SWFDEC_SANDBOX(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), SWFDEC_TYPE_SANDBOX, SwfdecSandbox))
+#define SWFDEC_SANDBOX_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), SWFDEC_TYPE_SANDBOX, SwfdecSandboxClass))
+#define SWFDEC_SANDBOX_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), SWFDEC_TYPE_SANDBOX, SwfdecSandboxClass))
+
+struct _SwfdecSandbox
+{
+ SwfdecAsObject object;
+
+ SwfdecSandboxType type; /* type of this sandbox */
+ SwfdecURL * url; /* URL this sandbox acts for */
+};
+
+struct _SwfdecSandboxClass
+{
+ SwfdecAsObjectClass object_class;
+};
+
+GType swfdec_sandbox_get_type (void);
+
+SwfdecSandbox * swfdec_sandbox_get_for_url (SwfdecPlayer * player,
+ const SwfdecURL * url);
+
+gboolean swfdec_sandbox_set_allow_network(SwfdecSandbox * sandbox,
+ gboolean network);
+
+void swfdec_sandbox_use (SwfdecSandbox * sandbox);
+void swfdec_sandbox_unuse (SwfdecSandbox * sandbox);
+
+G_END_DECLS
+#endif
commit 38281800817046a652cd2688d11e2933edef36a9
Author: Benjamin Otte <otte at gnome.org>
Date: Sat Jan 19 22:14:02 2008 +0100
regen swfdec_initialize.h
forgot that before
diff --git a/libswfdec/swfdec_initialize.h b/libswfdec/swfdec_initialize.h
index 466c667..ba99e38 100644
--- a/libswfdec/swfdec_initialize.h
+++ b/libswfdec/swfdec_initialize.h
@@ -2,7 +2,7 @@
/* compiled from swfdec_initialize.as */
static const unsigned char swfdec_initialize[] = {
- 0x88, 0x35, 0x21, 0x08, 0x02, 0x41, 0x53, 0x53, 0x65, 0x74, 0x50, 0x72, 0x6F, 0x70, 0x46, 0x6C,
+ 0x88, 0x4F, 0x21, 0x0A, 0x02, 0x41, 0x53, 0x53, 0x65, 0x74, 0x50, 0x72, 0x6F, 0x70, 0x46, 0x6C,
0x61, 0x67, 0x73, 0x00, 0x41, 0x53, 0x6E, 0x61, 0x74, 0x69, 0x76, 0x65, 0x00, 0x41, 0x53, 0x53,
0x65, 0x74, 0x4E, 0x61, 0x74, 0x69, 0x76, 0x65, 0x00, 0x41, 0x53, 0x53, 0x65, 0x74, 0x4E, 0x61,
0x74, 0x69, 0x76, 0x65, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x6F, 0x72, 0x00, 0x66, 0x6C, 0x61,
@@ -252,1919 +252,1925 @@ static const unsigned char swfdec_initialize[] = {
0x2C, 0x37, 0x70, 0x61, 0x72, 0x73, 0x65, 0x43, 0x53, 0x53, 0x49, 0x6E, 0x74, 0x65, 0x72, 0x6E,
0x61, 0x6C, 0x2C, 0x37, 0x70, 0x61, 0x72, 0x73, 0x65, 0x43, 0x53, 0x53, 0x46, 0x6F, 0x6E, 0x74,
0x46, 0x61, 0x6D, 0x69, 0x6C, 0x79, 0x2C, 0x37, 0x70, 0x61, 0x72, 0x73, 0x65, 0x43, 0x6F, 0x6C,
- 0x6F, 0x72, 0x00, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x69, 0x62, 0x69, 0x6C, 0x69, 0x74, 0x79,
- 0x00, 0x36, 0x69, 0x73, 0x41, 0x63, 0x74, 0x69, 0x76, 0x65, 0x2C, 0x36, 0x73, 0x65, 0x6E, 0x64,
- 0x45, 0x76, 0x65, 0x6E, 0x74, 0x2C, 0x36, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x50, 0x72, 0x6F,
- 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x00, 0x43, 0x61, 0x6D, 0x65, 0x72, 0x61, 0x00, 0x67,
- 0x65, 0x74, 0x5F, 0x66, 0x75, 0x6E, 0x63, 0x00, 0x69, 0x6E, 0x64, 0x65, 0x78, 0x00, 0x36, 0x73,
- 0x65, 0x74, 0x4D, 0x6F, 0x64, 0x65, 0x2C, 0x36, 0x73, 0x65, 0x74, 0x51, 0x75, 0x61, 0x6C, 0x69,
- 0x74, 0x79, 0x2C, 0x36, 0x73, 0x65, 0x74, 0x4B, 0x65, 0x79, 0x46, 0x72, 0x61, 0x6D, 0x65, 0x49,
- 0x6E, 0x74, 0x65, 0x72, 0x76, 0x61, 0x6C, 0x2C, 0x36, 0x73, 0x65, 0x74, 0x4D, 0x6F, 0x74, 0x69,
- 0x6F, 0x6E, 0x4C, 0x65, 0x76, 0x65, 0x6C, 0x2C, 0x36, 0x73, 0x65, 0x74, 0x4C, 0x6F, 0x6F, 0x70,
- 0x62, 0x61, 0x63, 0x6B, 0x2C, 0x36, 0x73, 0x65, 0x74, 0x43, 0x75, 0x72, 0x73, 0x6F, 0x72, 0x00,
- 0x6F, 0x6E, 0x53, 0x65, 0x6C, 0x65, 0x63, 0x74, 0x00, 0x63, 0x61, 0x6C, 0x6C, 0x62, 0x61, 0x63,
- 0x6B, 0x00, 0x63, 0x75, 0x73, 0x74, 0x6F, 0x6D, 0x49, 0x74, 0x65, 0x6D, 0x73, 0x00, 0x41, 0x72,
- 0x72, 0x61, 0x79, 0x00, 0x62, 0x75, 0x69, 0x6C, 0x74, 0x49, 0x6E, 0x49, 0x74, 0x65, 0x6D, 0x73,
- 0x00, 0x66, 0x6F, 0x72, 0x77, 0x61, 0x72, 0x64, 0x5F, 0x62, 0x61, 0x63, 0x6B, 0x00, 0x6C, 0x6F,
- 0x6F, 0x70, 0x00, 0x70, 0x6C, 0x61, 0x79, 0x00, 0x70, 0x72, 0x69, 0x6E, 0x74, 0x00, 0x71, 0x75,
- 0x61, 0x6C, 0x69, 0x74, 0x79, 0x00, 0x72, 0x65, 0x77, 0x69, 0x6E, 0x64, 0x00, 0x73, 0x61, 0x76,
- 0x65, 0x00, 0x7A, 0x6F, 0x6F, 0x6D, 0x00, 0x43, 0x6F, 0x6E, 0x74, 0x65, 0x78, 0x74, 0x4D, 0x65,
- 0x6E, 0x75, 0x00, 0x63, 0x6F, 0x70, 0x79, 0x00, 0x68, 0x69, 0x64, 0x65, 0x42, 0x75, 0x69, 0x6C,
- 0x74, 0x49, 0x6E, 0x49, 0x74, 0x65, 0x6D, 0x73, 0x00, 0x63, 0x61, 0x70, 0x74, 0x69, 0x6F, 0x6E,
- 0x00, 0x73, 0x65, 0x70, 0x61, 0x72, 0x61, 0x74, 0x6F, 0x72, 0x42, 0x65, 0x66, 0x6F, 0x72, 0x65,
- 0x00, 0x76, 0x69, 0x73, 0x69, 0x62, 0x6C, 0x65, 0x00, 0x43, 0x6F, 0x6E, 0x74, 0x65, 0x78, 0x74,
- 0x4D, 0x65, 0x6E, 0x75, 0x49, 0x74, 0x65, 0x6D, 0x00, 0x6E, 0x65, 0x74, 0x00, 0x46, 0x69, 0x6C,
- 0x65, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6E, 0x63, 0x65, 0x00, 0x63, 0x00, 0x38, 0x62, 0x72,
- 0x6F, 0x77, 0x73, 0x65, 0x2C, 0x38, 0x75, 0x70, 0x6C, 0x6F, 0x61, 0x64, 0x2C, 0x38, 0x64, 0x6F,
- 0x77, 0x6E, 0x6C, 0x6F, 0x61, 0x64, 0x2C, 0x38, 0x63, 0x61, 0x6E, 0x63, 0x65, 0x6C, 0x00, 0x46,
- 0x69, 0x6C, 0x65, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6E, 0x63, 0x65, 0x4C, 0x69, 0x73, 0x74,
- 0x00, 0x66, 0x69, 0x6C, 0x65, 0x4C, 0x69, 0x73, 0x74, 0x00, 0x38, 0x62, 0x72, 0x6F, 0x77, 0x73,
- 0x65, 0x00, 0x4C, 0x6F, 0x63, 0x61, 0x6C, 0x43, 0x6F, 0x6E, 0x6E, 0x65, 0x63, 0x74, 0x69, 0x6F,
- 0x6E, 0x00, 0x36, 0x63, 0x6F, 0x6E, 0x6E, 0x65, 0x63, 0x74, 0x2C, 0x36, 0x73, 0x65, 0x6E, 0x64,
- 0x2C, 0x36, 0x63, 0x6C, 0x6F, 0x73, 0x65, 0x2C, 0x36, 0x64, 0x6F, 0x6D, 0x61, 0x69, 0x6E, 0x00,
- 0x4D, 0x69, 0x63, 0x72, 0x6F, 0x70, 0x68, 0x6F, 0x6E, 0x65, 0x00, 0x36, 0x73, 0x65, 0x74, 0x53,
- 0x69, 0x6C, 0x65, 0x6E, 0x63, 0x65, 0x4C, 0x65, 0x76, 0x65, 0x6C, 0x2C, 0x36, 0x73, 0x65, 0x74,
- 0x52, 0x61, 0x74, 0x65, 0x2C, 0x36, 0x73, 0x65, 0x74, 0x47, 0x61, 0x69, 0x6E, 0x2C, 0x36, 0x73,
- 0x65, 0x74, 0x55, 0x73, 0x65, 0x45, 0x63, 0x68, 0x6F, 0x53, 0x75, 0x70, 0x70, 0x72, 0x65, 0x73,
- 0x73, 0x69, 0x6F, 0x6E, 0x00, 0x50, 0x72, 0x69, 0x6E, 0x74, 0x4A, 0x6F, 0x62, 0x00, 0x37, 0x73,
- 0x74, 0x61, 0x72, 0x74, 0x2C, 0x37, 0x61, 0x64, 0x64, 0x50, 0x61, 0x67, 0x65, 0x2C, 0x37, 0x73,
- 0x65, 0x6E, 0x64, 0x00, 0x53, 0x65, 0x6C, 0x65, 0x63, 0x74, 0x69, 0x6F, 0x6E, 0x00, 0x67, 0x65,
- 0x74, 0x42, 0x65, 0x67, 0x69, 0x6E, 0x49, 0x6E, 0x64, 0x65, 0x78, 0x2C, 0x67, 0x65, 0x74, 0x45,
- 0x6E, 0x64, 0x49, 0x6E, 0x64, 0x65, 0x78, 0x2C, 0x67, 0x65, 0x74, 0x43, 0x61, 0x72, 0x65, 0x74,
- 0x49, 0x6E, 0x64, 0x65, 0x78, 0x2C, 0x67, 0x65, 0x74, 0x46, 0x6F, 0x63, 0x75, 0x73, 0x2C, 0x73,
- 0x65, 0x74, 0x46, 0x6F, 0x63, 0x75, 0x73, 0x2C, 0x73, 0x65, 0x74, 0x53, 0x65, 0x6C, 0x65, 0x63,
- 0x74, 0x69, 0x6F, 0x6E, 0x00, 0x74, 0x65, 0x78, 0x74, 0x00, 0x54, 0x65, 0x78, 0x74, 0x52, 0x65,
- 0x6E, 0x64, 0x65, 0x72, 0x65, 0x72, 0x00, 0x38, 0x73, 0x65, 0x74, 0x41, 0x64, 0x76, 0x61, 0x6E,
- 0x63, 0x65, 0x64, 0x41, 0x6E, 0x74, 0x69, 0x61, 0x6C, 0x69, 0x61, 0x73, 0x69, 0x6E, 0x67, 0x54,
- 0x61, 0x62, 0x6C, 0x65, 0x00, 0x38, 0x6D, 0x61, 0x78, 0x4C, 0x65, 0x76, 0x65, 0x6C, 0x00, 0x38,
- 0x64, 0x69, 0x73, 0x70, 0x6C, 0x61, 0x79, 0x4D, 0x6F, 0x64, 0x65, 0x00, 0x74, 0x65, 0x78, 0x74,
- 0x52, 0x65, 0x6E, 0x64, 0x65, 0x72, 0x65, 0x72, 0x00, 0x58, 0x4D, 0x4C, 0x53, 0x6F, 0x63, 0x6B,
- 0x65, 0x74, 0x00, 0x6F, 0x6E, 0x58, 0x4D, 0x4C, 0x00, 0x63, 0x6F, 0x6E, 0x6E, 0x65, 0x63, 0x74,
- 0x2C, 0x73, 0x65, 0x6E, 0x64, 0x2C, 0x63, 0x6C, 0x6F, 0x73, 0x65, 0x00, 0x67, 0x65, 0x6F, 0x6D,
- 0x00, 0x50, 0x6F, 0x69, 0x6E, 0x74, 0x00, 0x61, 0x72, 0x67, 0x75, 0x6D, 0x65, 0x6E, 0x74, 0x73,
- 0x00, 0x79, 0x00, 0x64, 0x69, 0x73, 0x74, 0x61, 0x6E, 0x63, 0x65, 0x00, 0x61, 0x00, 0x62, 0x00,
- 0x73, 0x75, 0x62, 0x74, 0x72, 0x61, 0x63, 0x74, 0x00, 0x69, 0x6E, 0x74, 0x65, 0x72, 0x70, 0x6F,
- 0x6C, 0x61, 0x74, 0x65, 0x00, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x00, 0x70, 0x6F, 0x6C, 0x61, 0x72,
- 0x00, 0x4D, 0x61, 0x74, 0x68, 0x00, 0x61, 0x6E, 0x67, 0x6C, 0x65, 0x00, 0x63, 0x6F, 0x73, 0x00,
- 0x73, 0x69, 0x6E, 0x00, 0x73, 0x71, 0x72, 0x74, 0x00, 0x61, 0x64, 0x64, 0x00, 0x6F, 0x74, 0x68,
- 0x65, 0x72, 0x00, 0x63, 0x6C, 0x6F, 0x6E, 0x65, 0x00, 0x65, 0x71, 0x75, 0x61, 0x6C, 0x73, 0x00,
- 0x6E, 0x6F, 0x72, 0x6D, 0x61, 0x6C, 0x69, 0x7A, 0x65, 0x00, 0x66, 0x61, 0x63, 0x74, 0x6F, 0x72,
- 0x00, 0x6F, 0x66, 0x66, 0x73, 0x65, 0x74, 0x00, 0x28, 0x78, 0x3D, 0x00, 0x2C, 0x20, 0x79, 0x3D,
- 0x00, 0x29, 0x00, 0x52, 0x65, 0x63, 0x74, 0x61, 0x6E, 0x67, 0x6C, 0x65, 0x00, 0x73, 0x65, 0x74,
- 0x45, 0x6D, 0x70, 0x74, 0x79, 0x00, 0x77, 0x69, 0x64, 0x74, 0x68, 0x00, 0x68, 0x65, 0x69, 0x67,
- 0x68, 0x74, 0x00, 0x2C, 0x20, 0x77, 0x3D, 0x00, 0x2C, 0x20, 0x68, 0x3D, 0x00, 0x72, 0x65, 0x63,
- 0x74, 0x00, 0x63, 0x6F, 0x6E, 0x74, 0x61, 0x69, 0x6E, 0x73, 0x00, 0x63, 0x6F, 0x6E, 0x74, 0x61,
- 0x69, 0x6E, 0x73, 0x50, 0x6F, 0x69, 0x6E, 0x74, 0x00, 0x70, 0x6F, 0x69, 0x6E, 0x74, 0x00, 0x63,
- 0x6F, 0x6E, 0x74, 0x61, 0x69, 0x6E, 0x73, 0x52, 0x65, 0x63, 0x74, 0x61, 0x6E, 0x67, 0x6C, 0x65,
- 0x00, 0x74, 0x72, 0x00, 0x74, 0x62, 0x00, 0x72, 0x72, 0x00, 0x72, 0x62, 0x00, 0x69, 0x73, 0x45,
- 0x6D, 0x70, 0x74, 0x79, 0x00, 0x69, 0x6E, 0x74, 0x65, 0x72, 0x73, 0x65, 0x63, 0x74, 0x69, 0x6F,
- 0x6E, 0x00, 0x69, 0x6E, 0x74, 0x73, 0x00, 0x6D, 0x61, 0x78, 0x00, 0x6D, 0x69, 0x6E, 0x00, 0x69,
- 0x6E, 0x74, 0x65, 0x72, 0x73, 0x65, 0x63, 0x74, 0x73, 0x00, 0x75, 0x6E, 0x69, 0x6F, 0x6E, 0x00,
- 0x64, 0x78, 0x00, 0x64, 0x79, 0x00, 0x6F, 0x66, 0x66, 0x73, 0x65, 0x74, 0x50, 0x6F, 0x69, 0x6E,
- 0x74, 0x00, 0x64, 0x00, 0x69, 0x6E, 0x66, 0x6C, 0x61, 0x74, 0x65, 0x00, 0x69, 0x6E, 0x66, 0x6C,
- 0x61, 0x74, 0x65, 0x50, 0x6F, 0x69, 0x6E, 0x74, 0x00, 0x6C, 0x65, 0x66, 0x74, 0x00, 0x72, 0x69,
- 0x67, 0x68, 0x74, 0x00, 0x74, 0x6F, 0x70, 0x00, 0x62, 0x6F, 0x74, 0x74, 0x6F, 0x6D, 0x00, 0x74,
- 0x6F, 0x70, 0x4C, 0x65, 0x66, 0x74, 0x00, 0x62, 0x6F, 0x74, 0x74, 0x6F, 0x6D, 0x52, 0x69, 0x67,
- 0x68, 0x74, 0x00, 0x4D, 0x61, 0x74, 0x72, 0x69, 0x78, 0x00, 0x49, 0x6D, 0x70, 0x6C, 0x65, 0x6D,
- 0x65, 0x6E, 0x74, 0x20, 0x4D, 0x61, 0x74, 0x72, 0x69, 0x78, 0x00, 0x49, 0x6D, 0x70, 0x6C, 0x65,
- 0x6D, 0x65, 0x6E, 0x74, 0x20, 0x4D, 0x61, 0x74, 0x72, 0x69, 0x78, 0x2E, 0x63, 0x6C, 0x6F, 0x6E,
- 0x65, 0x00, 0x63, 0x6F, 0x6E, 0x63, 0x61, 0x74, 0x00, 0x49, 0x6D, 0x70, 0x6C, 0x65, 0x6D, 0x65,
- 0x6E, 0x74, 0x20, 0x4D, 0x61, 0x74, 0x72, 0x69, 0x78, 0x2E, 0x63, 0x6F, 0x6E, 0x63, 0x61, 0x74,
- 0x00, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x42, 0x6F, 0x78, 0x00, 0x49, 0x6D, 0x70, 0x6C, 0x65,
- 0x6D, 0x65, 0x6E, 0x74, 0x20, 0x4D, 0x61, 0x74, 0x72, 0x69, 0x78, 0x2E, 0x63, 0x72, 0x65, 0x61,
- 0x74, 0x65, 0x42, 0x6F, 0x78, 0x00, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x47, 0x72, 0x61, 0x64,
- 0x69, 0x65, 0x6E, 0x74, 0x42, 0x6F, 0x78, 0x00, 0x49, 0x6D, 0x70, 0x6C, 0x65, 0x6D, 0x65, 0x6E,
- 0x74, 0x20, 0x4D, 0x61, 0x74, 0x72, 0x69, 0x78, 0x2E, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x47,
- 0x72, 0x61, 0x64, 0x69, 0x65, 0x6E, 0x74, 0x42, 0x6F, 0x78, 0x00, 0x64, 0x65, 0x6C, 0x74, 0x61,
- 0x54, 0x72, 0x61, 0x6E, 0x73, 0x66, 0x6F, 0x72, 0x6D, 0x50, 0x6F, 0x69, 0x6E, 0x74, 0x00, 0x49,
- 0x6D, 0x70, 0x6C, 0x65, 0x6D, 0x65, 0x6E, 0x74, 0x20, 0x4D, 0x61, 0x74, 0x72, 0x69, 0x78, 0x2E,
- 0x64, 0x65, 0x6C, 0x74, 0x61, 0x54, 0x72, 0x61, 0x6E, 0x73, 0x66, 0x6F, 0x72, 0x6D, 0x50, 0x6F,
- 0x69, 0x6E, 0x74, 0x00, 0x69, 0x64, 0x65, 0x6E, 0x74, 0x69, 0x74, 0x79, 0x00, 0x49, 0x6D, 0x70,
- 0x6C, 0x65, 0x6D, 0x65, 0x6E, 0x74, 0x20, 0x4D, 0x61, 0x74, 0x72, 0x69, 0x78, 0x2E, 0x69, 0x64,
- 0x65, 0x6E, 0x74, 0x69, 0x74, 0x79, 0x00, 0x69, 0x6E, 0x76, 0x65, 0x72, 0x74, 0x00, 0x49, 0x6D,
- 0x70, 0x6C, 0x65, 0x6D, 0x65, 0x6E, 0x74, 0x20, 0x4D, 0x61, 0x74, 0x72, 0x69, 0x78, 0x2E, 0x69,
- 0x6E, 0x76, 0x65, 0x72, 0x74, 0x00, 0x72, 0x6F, 0x74, 0x61, 0x74, 0x65, 0x00, 0x49, 0x6D, 0x70,
- 0x6C, 0x65, 0x6D, 0x65, 0x6E, 0x74, 0x20, 0x4D, 0x61, 0x74, 0x72, 0x69, 0x78, 0x2E, 0x72, 0x6F,
- 0x74, 0x61, 0x74, 0x65, 0x00, 0x73, 0x63, 0x61, 0x6C, 0x65, 0x00, 0x49, 0x6D, 0x70, 0x6C, 0x65,
- 0x6D, 0x65, 0x6E, 0x74, 0x20, 0x4D, 0x61, 0x74, 0x72, 0x69, 0x78, 0x2E, 0x73, 0x63, 0x61, 0x6C,
- 0x65, 0x00, 0x74, 0x72, 0x61, 0x6E, 0x73, 0x66, 0x6F, 0x72, 0x6D, 0x50, 0x6F, 0x69, 0x6E, 0x74,
- 0x00, 0x49, 0x6D, 0x70, 0x6C, 0x65, 0x6D, 0x65, 0x6E, 0x74, 0x20, 0x4D, 0x61, 0x74, 0x72, 0x69,
- 0x78, 0x2E, 0x74, 0x72, 0x61, 0x6E, 0x73, 0x66, 0x6F, 0x72, 0x6D, 0x50, 0x6F, 0x69, 0x6E, 0x74,
- 0x00, 0x74, 0x72, 0x61, 0x6E, 0x73, 0x6C, 0x61, 0x74, 0x65, 0x00, 0x49, 0x6D, 0x70, 0x6C, 0x65,
+ 0x6F, 0x72, 0x00, 0x56, 0x69, 0x64, 0x65, 0x6F, 0x00, 0x36, 0x61, 0x74, 0x74, 0x61, 0x63, 0x68,
+ 0x56, 0x69, 0x64, 0x65, 0x6F, 0x2C, 0x36, 0x63, 0x6C, 0x65, 0x61, 0x72, 0x00, 0x41, 0x63, 0x63,
+ 0x65, 0x73, 0x73, 0x69, 0x62, 0x69, 0x6C, 0x69, 0x74, 0x79, 0x00, 0x36, 0x69, 0x73, 0x41, 0x63,
+ 0x74, 0x69, 0x76, 0x65, 0x2C, 0x36, 0x73, 0x65, 0x6E, 0x64, 0x45, 0x76, 0x65, 0x6E, 0x74, 0x2C,
+ 0x36, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x50, 0x72, 0x6F, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65,
+ 0x73, 0x00, 0x43, 0x61, 0x6D, 0x65, 0x72, 0x61, 0x00, 0x67, 0x65, 0x74, 0x5F, 0x66, 0x75, 0x6E,
+ 0x63, 0x00, 0x69, 0x6E, 0x64, 0x65, 0x78, 0x00, 0x36, 0x73, 0x65, 0x74, 0x4D, 0x6F, 0x64, 0x65,
+ 0x2C, 0x36, 0x73, 0x65, 0x74, 0x51, 0x75, 0x61, 0x6C, 0x69, 0x74, 0x79, 0x2C, 0x36, 0x73, 0x65,
+ 0x74, 0x4B, 0x65, 0x79, 0x46, 0x72, 0x61, 0x6D, 0x65, 0x49, 0x6E, 0x74, 0x65, 0x72, 0x76, 0x61,
+ 0x6C, 0x2C, 0x36, 0x73, 0x65, 0x74, 0x4D, 0x6F, 0x74, 0x69, 0x6F, 0x6E, 0x4C, 0x65, 0x76, 0x65,
+ 0x6C, 0x2C, 0x36, 0x73, 0x65, 0x74, 0x4C, 0x6F, 0x6F, 0x70, 0x62, 0x61, 0x63, 0x6B, 0x2C, 0x36,
+ 0x73, 0x65, 0x74, 0x43, 0x75, 0x72, 0x73, 0x6F, 0x72, 0x00, 0x6F, 0x6E, 0x53, 0x65, 0x6C, 0x65,
+ 0x63, 0x74, 0x00, 0x63, 0x61, 0x6C, 0x6C, 0x62, 0x61, 0x63, 0x6B, 0x00, 0x63, 0x75, 0x73, 0x74,
+ 0x6F, 0x6D, 0x49, 0x74, 0x65, 0x6D, 0x73, 0x00, 0x41, 0x72, 0x72, 0x61, 0x79, 0x00, 0x62, 0x75,
+ 0x69, 0x6C, 0x74, 0x49, 0x6E, 0x49, 0x74, 0x65, 0x6D, 0x73, 0x00, 0x66, 0x6F, 0x72, 0x77, 0x61,
+ 0x72, 0x64, 0x5F, 0x62, 0x61, 0x63, 0x6B, 0x00, 0x6C, 0x6F, 0x6F, 0x70, 0x00, 0x70, 0x6C, 0x61,
+ 0x79, 0x00, 0x70, 0x72, 0x69, 0x6E, 0x74, 0x00, 0x71, 0x75, 0x61, 0x6C, 0x69, 0x74, 0x79, 0x00,
+ 0x72, 0x65, 0x77, 0x69, 0x6E, 0x64, 0x00, 0x73, 0x61, 0x76, 0x65, 0x00, 0x7A, 0x6F, 0x6F, 0x6D,
+ 0x00, 0x43, 0x6F, 0x6E, 0x74, 0x65, 0x78, 0x74, 0x4D, 0x65, 0x6E, 0x75, 0x00, 0x63, 0x6F, 0x70,
+ 0x79, 0x00, 0x68, 0x69, 0x64, 0x65, 0x42, 0x75, 0x69, 0x6C, 0x74, 0x49, 0x6E, 0x49, 0x74, 0x65,
+ 0x6D, 0x73, 0x00, 0x63, 0x61, 0x70, 0x74, 0x69, 0x6F, 0x6E, 0x00, 0x73, 0x65, 0x70, 0x61, 0x72,
+ 0x61, 0x74, 0x6F, 0x72, 0x42, 0x65, 0x66, 0x6F, 0x72, 0x65, 0x00, 0x76, 0x69, 0x73, 0x69, 0x62,
+ 0x6C, 0x65, 0x00, 0x43, 0x6F, 0x6E, 0x74, 0x65, 0x78, 0x74, 0x4D, 0x65, 0x6E, 0x75, 0x49, 0x74,
+ 0x65, 0x6D, 0x00, 0x6E, 0x65, 0x74, 0x00, 0x46, 0x69, 0x6C, 0x65, 0x52, 0x65, 0x66, 0x65, 0x72,
+ 0x65, 0x6E, 0x63, 0x65, 0x00, 0x63, 0x00, 0x38, 0x62, 0x72, 0x6F, 0x77, 0x73, 0x65, 0x2C, 0x38,
+ 0x75, 0x70, 0x6C, 0x6F, 0x61, 0x64, 0x2C, 0x38, 0x64, 0x6F, 0x77, 0x6E, 0x6C, 0x6F, 0x61, 0x64,
+ 0x2C, 0x38, 0x63, 0x61, 0x6E, 0x63, 0x65, 0x6C, 0x00, 0x46, 0x69, 0x6C, 0x65, 0x52, 0x65, 0x66,
+ 0x65, 0x72, 0x65, 0x6E, 0x63, 0x65, 0x4C, 0x69, 0x73, 0x74, 0x00, 0x66, 0x69, 0x6C, 0x65, 0x4C,
+ 0x69, 0x73, 0x74, 0x00, 0x38, 0x62, 0x72, 0x6F, 0x77, 0x73, 0x65, 0x00, 0x4C, 0x6F, 0x63, 0x61,
+ 0x6C, 0x43, 0x6F, 0x6E, 0x6E, 0x65, 0x63, 0x74, 0x69, 0x6F, 0x6E, 0x00, 0x36, 0x63, 0x6F, 0x6E,
+ 0x6E, 0x65, 0x63, 0x74, 0x2C, 0x36, 0x73, 0x65, 0x6E, 0x64, 0x2C, 0x36, 0x63, 0x6C, 0x6F, 0x73,
+ 0x65, 0x2C, 0x36, 0x64, 0x6F, 0x6D, 0x61, 0x69, 0x6E, 0x00, 0x4D, 0x69, 0x63, 0x72, 0x6F, 0x70,
+ 0x68, 0x6F, 0x6E, 0x65, 0x00, 0x36, 0x73, 0x65, 0x74, 0x53, 0x69, 0x6C, 0x65, 0x6E, 0x63, 0x65,
+ 0x4C, 0x65, 0x76, 0x65, 0x6C, 0x2C, 0x36, 0x73, 0x65, 0x74, 0x52, 0x61, 0x74, 0x65, 0x2C, 0x36,
+ 0x73, 0x65, 0x74, 0x47, 0x61, 0x69, 0x6E, 0x2C, 0x36, 0x73, 0x65, 0x74, 0x55, 0x73, 0x65, 0x45,
+ 0x63, 0x68, 0x6F, 0x53, 0x75, 0x70, 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6F, 0x6E, 0x00, 0x50,
+ 0x72, 0x69, 0x6E, 0x74, 0x4A, 0x6F, 0x62, 0x00, 0x37, 0x73, 0x74, 0x61, 0x72, 0x74, 0x2C, 0x37,
+ 0x61, 0x64, 0x64, 0x50, 0x61, 0x67, 0x65, 0x2C, 0x37, 0x73, 0x65, 0x6E, 0x64, 0x00, 0x53, 0x65,
+ 0x6C, 0x65, 0x63, 0x74, 0x69, 0x6F, 0x6E, 0x00, 0x67, 0x65, 0x74, 0x42, 0x65, 0x67, 0x69, 0x6E,
+ 0x49, 0x6E, 0x64, 0x65, 0x78, 0x2C, 0x67, 0x65, 0x74, 0x45, 0x6E, 0x64, 0x49, 0x6E, 0x64, 0x65,
+ 0x78, 0x2C, 0x67, 0x65, 0x74, 0x43, 0x61, 0x72, 0x65, 0x74, 0x49, 0x6E, 0x64, 0x65, 0x78, 0x2C,
+ 0x67, 0x65, 0x74, 0x46, 0x6F, 0x63, 0x75, 0x73, 0x2C, 0x73, 0x65, 0x74, 0x46, 0x6F, 0x63, 0x75,
+ 0x73, 0x2C, 0x73, 0x65, 0x74, 0x53, 0x65, 0x6C, 0x65, 0x63, 0x74, 0x69, 0x6F, 0x6E, 0x00, 0x74,
+ 0x65, 0x78, 0x74, 0x00, 0x54, 0x65, 0x78, 0x74, 0x52, 0x65, 0x6E, 0x64, 0x65, 0x72, 0x65, 0x72,
+ 0x00, 0x38, 0x73, 0x65, 0x74, 0x41, 0x64, 0x76, 0x61, 0x6E, 0x63, 0x65, 0x64, 0x41, 0x6E, 0x74,
+ 0x69, 0x61, 0x6C, 0x69, 0x61, 0x73, 0x69, 0x6E, 0x67, 0x54, 0x61, 0x62, 0x6C, 0x65, 0x00, 0x38,
+ 0x6D, 0x61, 0x78, 0x4C, 0x65, 0x76, 0x65, 0x6C, 0x00, 0x38, 0x64, 0x69, 0x73, 0x70, 0x6C, 0x61,
+ 0x79, 0x4D, 0x6F, 0x64, 0x65, 0x00, 0x74, 0x65, 0x78, 0x74, 0x52, 0x65, 0x6E, 0x64, 0x65, 0x72,
+ 0x65, 0x72, 0x00, 0x58, 0x4D, 0x4C, 0x53, 0x6F, 0x63, 0x6B, 0x65, 0x74, 0x00, 0x6F, 0x6E, 0x58,
+ 0x4D, 0x4C, 0x00, 0x63, 0x6F, 0x6E, 0x6E, 0x65, 0x63, 0x74, 0x2C, 0x73, 0x65, 0x6E, 0x64, 0x2C,
+ 0x63, 0x6C, 0x6F, 0x73, 0x65, 0x00, 0x67, 0x65, 0x6F, 0x6D, 0x00, 0x50, 0x6F, 0x69, 0x6E, 0x74,
+ 0x00, 0x61, 0x72, 0x67, 0x75, 0x6D, 0x65, 0x6E, 0x74, 0x73, 0x00, 0x79, 0x00, 0x64, 0x69, 0x73,
+ 0x74, 0x61, 0x6E, 0x63, 0x65, 0x00, 0x61, 0x00, 0x62, 0x00, 0x73, 0x75, 0x62, 0x74, 0x72, 0x61,
+ 0x63, 0x74, 0x00, 0x69, 0x6E, 0x74, 0x65, 0x72, 0x70, 0x6F, 0x6C, 0x61, 0x74, 0x65, 0x00, 0x76,
+ 0x61, 0x6C, 0x75, 0x65, 0x00, 0x70, 0x6F, 0x6C, 0x61, 0x72, 0x00, 0x4D, 0x61, 0x74, 0x68, 0x00,
+ 0x61, 0x6E, 0x67, 0x6C, 0x65, 0x00, 0x63, 0x6F, 0x73, 0x00, 0x73, 0x69, 0x6E, 0x00, 0x73, 0x71,
+ 0x72, 0x74, 0x00, 0x61, 0x64, 0x64, 0x00, 0x6F, 0x74, 0x68, 0x65, 0x72, 0x00, 0x63, 0x6C, 0x6F,
+ 0x6E, 0x65, 0x00, 0x65, 0x71, 0x75, 0x61, 0x6C, 0x73, 0x00, 0x6E, 0x6F, 0x72, 0x6D, 0x61, 0x6C,
+ 0x69, 0x7A, 0x65, 0x00, 0x66, 0x61, 0x63, 0x74, 0x6F, 0x72, 0x00, 0x6F, 0x66, 0x66, 0x73, 0x65,
+ 0x74, 0x00, 0x28, 0x78, 0x3D, 0x00, 0x2C, 0x20, 0x79, 0x3D, 0x00, 0x29, 0x00, 0x52, 0x65, 0x63,
+ 0x74, 0x61, 0x6E, 0x67, 0x6C, 0x65, 0x00, 0x73, 0x65, 0x74, 0x45, 0x6D, 0x70, 0x74, 0x79, 0x00,
+ 0x77, 0x69, 0x64, 0x74, 0x68, 0x00, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x00, 0x2C, 0x20, 0x77,
+ 0x3D, 0x00, 0x2C, 0x20, 0x68, 0x3D, 0x00, 0x72, 0x65, 0x63, 0x74, 0x00, 0x63, 0x6F, 0x6E, 0x74,
+ 0x61, 0x69, 0x6E, 0x73, 0x00, 0x63, 0x6F, 0x6E, 0x74, 0x61, 0x69, 0x6E, 0x73, 0x50, 0x6F, 0x69,
+ 0x6E, 0x74, 0x00, 0x70, 0x6F, 0x69, 0x6E, 0x74, 0x00, 0x63, 0x6F, 0x6E, 0x74, 0x61, 0x69, 0x6E,
+ 0x73, 0x52, 0x65, 0x63, 0x74, 0x61, 0x6E, 0x67, 0x6C, 0x65, 0x00, 0x74, 0x72, 0x00, 0x74, 0x62,
+ 0x00, 0x72, 0x72, 0x00, 0x72, 0x62, 0x00, 0x69, 0x73, 0x45, 0x6D, 0x70, 0x74, 0x79, 0x00, 0x69,
+ 0x6E, 0x74, 0x65, 0x72, 0x73, 0x65, 0x63, 0x74, 0x69, 0x6F, 0x6E, 0x00, 0x69, 0x6E, 0x74, 0x73,
+ 0x00, 0x6D, 0x61, 0x78, 0x00, 0x6D, 0x69, 0x6E, 0x00, 0x69, 0x6E, 0x74, 0x65, 0x72, 0x73, 0x65,
+ 0x63, 0x74, 0x73, 0x00, 0x75, 0x6E, 0x69, 0x6F, 0x6E, 0x00, 0x64, 0x78, 0x00, 0x64, 0x79, 0x00,
+ 0x6F, 0x66, 0x66, 0x73, 0x65, 0x74, 0x50, 0x6F, 0x69, 0x6E, 0x74, 0x00, 0x64, 0x00, 0x69, 0x6E,
+ 0x66, 0x6C, 0x61, 0x74, 0x65, 0x00, 0x69, 0x6E, 0x66, 0x6C, 0x61, 0x74, 0x65, 0x50, 0x6F, 0x69,
+ 0x6E, 0x74, 0x00, 0x6C, 0x65, 0x66, 0x74, 0x00, 0x72, 0x69, 0x67, 0x68, 0x74, 0x00, 0x74, 0x6F,
+ 0x70, 0x00, 0x62, 0x6F, 0x74, 0x74, 0x6F, 0x6D, 0x00, 0x74, 0x6F, 0x70, 0x4C, 0x65, 0x66, 0x74,
+ 0x00, 0x62, 0x6F, 0x74, 0x74, 0x6F, 0x6D, 0x52, 0x69, 0x67, 0x68, 0x74, 0x00, 0x4D, 0x61, 0x74,
+ 0x72, 0x69, 0x78, 0x00, 0x49, 0x6D, 0x70, 0x6C, 0x65, 0x6D, 0x65, 0x6E, 0x74, 0x20, 0x4D, 0x61,
+ 0x74, 0x72, 0x69, 0x78, 0x00, 0x49, 0x6D, 0x70, 0x6C, 0x65, 0x6D, 0x65, 0x6E, 0x74, 0x20, 0x4D,
+ 0x61, 0x74, 0x72, 0x69, 0x78, 0x2E, 0x63, 0x6C, 0x6F, 0x6E, 0x65, 0x00, 0x63, 0x6F, 0x6E, 0x63,
+ 0x61, 0x74, 0x00, 0x49, 0x6D, 0x70, 0x6C, 0x65, 0x6D, 0x65, 0x6E, 0x74, 0x20, 0x4D, 0x61, 0x74,
+ 0x72, 0x69, 0x78, 0x2E, 0x63, 0x6F, 0x6E, 0x63, 0x61, 0x74, 0x00, 0x63, 0x72, 0x65, 0x61, 0x74,
+ 0x65, 0x42, 0x6F, 0x78, 0x00, 0x49, 0x6D, 0x70, 0x6C, 0x65, 0x6D, 0x65, 0x6E, 0x74, 0x20, 0x4D,
+ 0x61, 0x74, 0x72, 0x69, 0x78, 0x2E, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x42, 0x6F, 0x78, 0x00,
+ 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x47, 0x72, 0x61, 0x64, 0x69, 0x65, 0x6E, 0x74, 0x42, 0x6F,
+ 0x78, 0x00, 0x49, 0x6D, 0x70, 0x6C, 0x65, 0x6D, 0x65, 0x6E, 0x74, 0x20, 0x4D, 0x61, 0x74, 0x72,
+ 0x69, 0x78, 0x2E, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x47, 0x72, 0x61, 0x64, 0x69, 0x65, 0x6E,
+ 0x74, 0x42, 0x6F, 0x78, 0x00, 0x64, 0x65, 0x6C, 0x74, 0x61, 0x54, 0x72, 0x61, 0x6E, 0x73, 0x66,
+ 0x6F, 0x72, 0x6D, 0x50, 0x6F, 0x69, 0x6E, 0x74, 0x00, 0x49, 0x6D, 0x70, 0x6C, 0x65, 0x6D, 0x65,
+ 0x6E, 0x74, 0x20, 0x4D, 0x61, 0x74, 0x72, 0x69, 0x78, 0x2E, 0x64, 0x65, 0x6C, 0x74, 0x61, 0x54,
+ 0x72, 0x61, 0x6E, 0x73, 0x66, 0x6F, 0x72, 0x6D, 0x50, 0x6F, 0x69, 0x6E, 0x74, 0x00, 0x69, 0x64,
+ 0x65, 0x6E, 0x74, 0x69, 0x74, 0x79, 0x00, 0x49, 0x6D, 0x70, 0x6C, 0x65, 0x6D, 0x65, 0x6E, 0x74,
+ 0x20, 0x4D, 0x61, 0x74, 0x72, 0x69, 0x78, 0x2E, 0x69, 0x64, 0x65, 0x6E, 0x74, 0x69, 0x74, 0x79,
+ 0x00, 0x69, 0x6E, 0x76, 0x65, 0x72, 0x74, 0x00, 0x49, 0x6D, 0x70, 0x6C, 0x65, 0x6D, 0x65, 0x6E,
+ 0x74, 0x20, 0x4D, 0x61, 0x74, 0x72, 0x69, 0x78, 0x2E, 0x69, 0x6E, 0x76, 0x65, 0x72, 0x74, 0x00,
+ 0x72, 0x6F, 0x74, 0x61, 0x74, 0x65, 0x00, 0x49, 0x6D, 0x70, 0x6C, 0x65, 0x6D, 0x65, 0x6E, 0x74,
+ 0x20, 0x4D, 0x61, 0x74, 0x72, 0x69, 0x78, 0x2E, 0x72, 0x6F, 0x74, 0x61, 0x74, 0x65, 0x00, 0x73,
+ 0x63, 0x61, 0x6C, 0x65, 0x00, 0x49, 0x6D, 0x70, 0x6C, 0x65, 0x6D, 0x65, 0x6E, 0x74, 0x20, 0x4D,
+ 0x61, 0x74, 0x72, 0x69, 0x78, 0x2E, 0x73, 0x63, 0x61, 0x6C, 0x65, 0x00, 0x74, 0x72, 0x61, 0x6E,
+ 0x73, 0x66, 0x6F, 0x72, 0x6D, 0x50, 0x6F, 0x69, 0x6E, 0x74, 0x00, 0x49, 0x6D, 0x70, 0x6C, 0x65,
0x6D, 0x65, 0x6E, 0x74, 0x20, 0x4D, 0x61, 0x74, 0x72, 0x69, 0x78, 0x2E, 0x74, 0x72, 0x61, 0x6E,
- 0x73, 0x6C, 0x61, 0x74, 0x65, 0x00, 0x49, 0x6D, 0x70, 0x6C, 0x65, 0x6D, 0x65, 0x6E, 0x74, 0x20,
- 0x4D, 0x61, 0x74, 0x72, 0x69, 0x78, 0x2E, 0x74, 0x6F, 0x53, 0x74, 0x72, 0x69, 0x6E, 0x67, 0x00,
- 0x43, 0x6F, 0x6C, 0x6F, 0x72, 0x54, 0x72, 0x61, 0x6E, 0x73, 0x66, 0x6F, 0x72, 0x6D, 0x00, 0x49,
- 0x6D, 0x70, 0x6C, 0x65, 0x6D, 0x65, 0x6E, 0x74, 0x20, 0x43, 0x6F, 0x6C, 0x6F, 0x72, 0x54, 0x72,
- 0x61, 0x6E, 0x73, 0x66, 0x6F, 0x72, 0x6D, 0x2E, 0x74, 0x6F, 0x53, 0x74, 0x72, 0x69, 0x6E, 0x67,
- 0x00, 0x38, 0x63, 0x6F, 0x6E, 0x63, 0x61, 0x74, 0x00, 0x38, 0x61, 0x6C, 0x70, 0x68, 0x61, 0x4D,
- 0x75, 0x6C, 0x74, 0x69, 0x70, 0x6C, 0x69, 0x65, 0x72, 0x2C, 0x38, 0x72, 0x65, 0x64, 0x4D, 0x75,
- 0x6C, 0x74, 0x69, 0x70, 0x6C, 0x69, 0x65, 0x72, 0x2C, 0x38, 0x67, 0x72, 0x65, 0x65, 0x6E, 0x4D,
- 0x75, 0x6C, 0x74, 0x69, 0x70, 0x6C, 0x69, 0x65, 0x72, 0x2C, 0x38, 0x62, 0x6C, 0x75, 0x65, 0x4D,
- 0x75, 0x6C, 0x74, 0x69, 0x70, 0x6C, 0x69, 0x65, 0x72, 0x2C, 0x38, 0x61, 0x6C, 0x70, 0x68, 0x61,
- 0x4F, 0x66, 0x66, 0x73, 0x65, 0x74, 0x2C, 0x38, 0x72, 0x65, 0x64, 0x4F, 0x66, 0x66, 0x73, 0x65,
- 0x74, 0x2C, 0x38, 0x67, 0x72, 0x65, 0x65, 0x6E, 0x4F, 0x66, 0x66, 0x73, 0x65, 0x74, 0x2C, 0x38,
- 0x62, 0x6C, 0x75, 0x65, 0x4F, 0x66, 0x66, 0x73, 0x65, 0x74, 0x2C, 0x38, 0x72, 0x67, 0x62, 0x00,
- 0x54, 0x72, 0x61, 0x6E, 0x73, 0x66, 0x6F, 0x72, 0x6D, 0x00, 0x38, 0x6D, 0x61, 0x74, 0x72, 0x69,
- 0x78, 0x2C, 0x38, 0x63, 0x6F, 0x6E, 0x63, 0x61, 0x74, 0x65, 0x6E, 0x61, 0x74, 0x65, 0x64, 0x4D,
- 0x61, 0x74, 0x72, 0x69, 0x78, 0x2C, 0x38, 0x63, 0x6F, 0x6C, 0x6F, 0x72, 0x54, 0x72, 0x61, 0x6E,
- 0x73, 0x66, 0x6F, 0x72, 0x6D, 0x2C, 0x38, 0x63, 0x6F, 0x6E, 0x63, 0x61, 0x74, 0x65, 0x6E, 0x61,
- 0x74, 0x65, 0x64, 0x43, 0x6F, 0x6C, 0x6F, 0x72, 0x54, 0x72, 0x61, 0x6E, 0x73, 0x66, 0x6F, 0x72,
- 0x6D, 0x2C, 0x38, 0x70, 0x69, 0x78, 0x65, 0x6C, 0x42, 0x6F, 0x75, 0x6E, 0x64, 0x73, 0x00, 0x42,
- 0x69, 0x74, 0x6D, 0x61, 0x70, 0x44, 0x61, 0x74, 0x61, 0x00, 0x52, 0x45, 0x44, 0x5F, 0x43, 0x48,
- 0x41, 0x4E, 0x4E, 0x45, 0x4C, 0x00, 0x47, 0x52, 0x45, 0x45, 0x4E, 0x5F, 0x43, 0x48, 0x41, 0x4E,
- 0x4E, 0x45, 0x4C, 0x00, 0x42, 0x4C, 0x55, 0x45, 0x5F, 0x43, 0x48, 0x41, 0x4E, 0x4E, 0x45, 0x4C,
- 0x00, 0x41, 0x4C, 0x50, 0x48, 0x41, 0x5F, 0x43, 0x48, 0x41, 0x4E, 0x4E, 0x45, 0x4C, 0x00, 0x38,
- 0x6C, 0x6F, 0x61, 0x64, 0x42, 0x69, 0x74, 0x6D, 0x61, 0x70, 0x00, 0x38, 0x67, 0x65, 0x74, 0x50,
- 0x69, 0x78, 0x65, 0x6C, 0x2C, 0x38, 0x73, 0x65, 0x74, 0x50, 0x69, 0x78, 0x65, 0x6C, 0x2C, 0x38,
- 0x66, 0x69, 0x6C, 0x6C, 0x52, 0x65, 0x63, 0x74, 0x2C, 0x38, 0x63, 0x6F, 0x70, 0x79, 0x50, 0x69,
- 0x78, 0x65, 0x6C, 0x73, 0x2C, 0x38, 0x61, 0x70, 0x70, 0x6C, 0x79, 0x46, 0x69, 0x6C, 0x74, 0x65,
- 0x72, 0x2C, 0x38, 0x73, 0x63, 0x72, 0x6F, 0x6C, 0x6C, 0x2C, 0x38, 0x74, 0x68, 0x72, 0x65, 0x73,
- 0x68, 0x6F, 0x6C, 0x64, 0x2C, 0x38, 0x64, 0x72, 0x61, 0x77, 0x2C, 0x38, 0x70, 0x69, 0x78, 0x65,
- 0x6C, 0x44, 0x69, 0x73, 0x73, 0x6F, 0x6C, 0x76, 0x65, 0x2C, 0x38, 0x67, 0x65, 0x74, 0x50, 0x69,
- 0x78, 0x65, 0x6C, 0x33, 0x32, 0x2C, 0x38, 0x73, 0x65, 0x74, 0x50, 0x69, 0x78, 0x65, 0x6C, 0x33,
- 0x32, 0x2C, 0x38, 0x66, 0x6C, 0x6F, 0x6F, 0x64, 0x46, 0x69, 0x6C, 0x6C, 0x2C, 0x38, 0x67, 0x65,
- 0x74, 0x43, 0x6F, 0x6C, 0x6F, 0x72, 0x42, 0x6F, 0x75, 0x6E, 0x64, 0x73, 0x52, 0x65, 0x63, 0x74,
- 0x2C, 0x38, 0x70, 0x65, 0x72, 0x6C, 0x69, 0x6E, 0x4E, 0x6F, 0x69, 0x73, 0x65, 0x2C, 0x38, 0x63,
- 0x6F, 0x6C, 0x6F, 0x72, 0x54, 0x72, 0x61, 0x6E, 0x73, 0x66, 0x6F, 0x72, 0x6D, 0x2C, 0x38, 0x68,
- 0x69, 0x74, 0x54, 0x65, 0x73, 0x74, 0x2C, 0x38, 0x70, 0x61, 0x6C, 0x65, 0x74, 0x74, 0x65, 0x4D,
- 0x61, 0x70, 0x2C, 0x38, 0x6D, 0x65, 0x72, 0x67, 0x65, 0x2C, 0x38, 0x6E, 0x6F, 0x69, 0x73, 0x65,
- 0x2C, 0x38, 0x63, 0x6F, 0x70, 0x79, 0x43, 0x68, 0x61, 0x6E, 0x6E, 0x65, 0x6C, 0x2C, 0x38, 0x63,
- 0x6C, 0x6F, 0x6E, 0x65, 0x2C, 0x38, 0x64, 0x69, 0x73, 0x70, 0x6F, 0x73, 0x65, 0x2C, 0x38, 0x67,
- 0x65, 0x6E, 0x65, 0x72, 0x61, 0x74, 0x65, 0x46, 0x69, 0x6C, 0x74, 0x65, 0x72, 0x52, 0x65, 0x63,
- 0x74, 0x2C, 0x38, 0x63, 0x6F, 0x6D, 0x70, 0x61, 0x72, 0x65, 0x00, 0x38, 0x77, 0x69, 0x64, 0x74,
- 0x68, 0x2C, 0x38, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x2C, 0x38, 0x72, 0x65, 0x63, 0x74, 0x61,
- 0x6E, 0x67, 0x6C, 0x65, 0x2C, 0x38, 0x74, 0x72, 0x61, 0x6E, 0x73, 0x70, 0x61, 0x72, 0x65, 0x6E,
- 0x74, 0x00, 0x65, 0x78, 0x74, 0x65, 0x72, 0x6E, 0x61, 0x6C, 0x00, 0x45, 0x78, 0x74, 0x65, 0x72,
- 0x6E, 0x61, 0x6C, 0x49, 0x6E, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x00, 0x61, 0x64, 0x64,
- 0x43, 0x61, 0x6C, 0x6C, 0x62, 0x61, 0x63, 0x6B, 0x00, 0x61, 0x76, 0x61, 0x69, 0x6C, 0x61, 0x62,
- 0x6C, 0x65, 0x00, 0x5F, 0x69, 0x6E, 0x69, 0x74, 0x4A, 0x53, 0x00, 0x69, 0x6E, 0x73, 0x74, 0x61,
- 0x6E, 0x63, 0x65, 0x00, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x00, 0x5F, 0x63, 0x61, 0x6C,
- 0x6C, 0x49, 0x6E, 0x00, 0x5F, 0x61, 0x64, 0x64, 0x43, 0x61, 0x6C, 0x6C, 0x62, 0x61, 0x63, 0x6B,
- 0x00, 0x63, 0x61, 0x6C, 0x6C, 0x00, 0x74, 0x72, 0x79, 0x20, 0x7B, 0x20, 0x00, 0x5F, 0x6F, 0x62,
- 0x6A, 0x65, 0x63, 0x74, 0x49, 0x44, 0x00, 0x69, 0x64, 0x00, 0x2E, 0x53, 0x65, 0x74, 0x52, 0x65,
- 0x74, 0x75, 0x72, 0x6E, 0x56, 0x61, 0x6C, 0x75, 0x65, 0x28, 0x00, 0x5F, 0x5F, 0x66, 0x6C, 0x61,
- 0x73, 0x68, 0x5F, 0x5F, 0x74, 0x6F, 0x58, 0x4D, 0x4C, 0x20, 0x28, 0x00, 0x28, 0x00, 0x2C, 0x00,
- 0x5F, 0x74, 0x6F, 0x4A, 0x53, 0x00, 0x29, 0x29, 0x20, 0x00, 0x3B, 0x20, 0x7D, 0x20, 0x63, 0x61,
- 0x74, 0x63, 0x68, 0x20, 0x28, 0x65, 0x29, 0x20, 0x7B, 0x20, 0x00, 0x2E, 0x53, 0x65, 0x74, 0x52,
- 0x65, 0x74, 0x75, 0x72, 0x6E, 0x56, 0x61, 0x6C, 0x75, 0x65, 0x28, 0x22, 0x3C, 0x75, 0x6E, 0x64,
- 0x65, 0x66, 0x69, 0x6E, 0x65, 0x64, 0x2F, 0x3E, 0x22, 0x29, 0x3B, 0x20, 0x7D, 0x00, 0x22, 0x3C,
- 0x75, 0x6E, 0x64, 0x65, 0x66, 0x69, 0x6E, 0x65, 0x64, 0x2F, 0x3E, 0x22, 0x3B, 0x20, 0x7D, 0x00,
- 0x5F, 0x65, 0x76, 0x61, 0x6C, 0x4A, 0x53, 0x00, 0x3C, 0x69, 0x6E, 0x76, 0x6F, 0x6B, 0x65, 0x20,
- 0x6E, 0x61, 0x6D, 0x65, 0x3D, 0x22, 0x00, 0x22, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6E, 0x74,
- 0x79, 0x70, 0x65, 0x3D, 0x22, 0x78, 0x6D, 0x6C, 0x22, 0x3E, 0x00, 0x5F, 0x61, 0x72, 0x67, 0x75,
- 0x6D, 0x65, 0x6E, 0x74, 0x73, 0x54, 0x6F, 0x58, 0x4D, 0x4C, 0x00, 0x3C, 0x2F, 0x69, 0x6E, 0x76,
- 0x6F, 0x6B, 0x65, 0x3E, 0x00, 0x5F, 0x63, 0x61, 0x6C, 0x6C, 0x4F, 0x75, 0x74, 0x00, 0x78, 0x6D,
- 0x6C, 0x00, 0x69, 0x67, 0x6E, 0x6F, 0x72, 0x65, 0x57, 0x68, 0x69, 0x74, 0x65, 0x00, 0x66, 0x69,
- 0x72, 0x73, 0x74, 0x43, 0x68, 0x69, 0x6C, 0x64, 0x00, 0x5F, 0x74, 0x6F, 0x41, 0x53, 0x00, 0x61,
- 0x72, 0x67, 0x73, 0x00, 0x63, 0x68, 0x69, 0x6C, 0x64, 0x4E, 0x6F, 0x64, 0x65, 0x73, 0x00, 0x6E,
- 0x6F, 0x64, 0x65, 0x4E, 0x61, 0x6D, 0x65, 0x00, 0x5F, 0x61, 0x72, 0x67, 0x75, 0x6D, 0x65, 0x6E,
- 0x74, 0x73, 0x54, 0x6F, 0x41, 0x53, 0x00, 0x61, 0x70, 0x70, 0x6C, 0x79, 0x00, 0x61, 0x74, 0x74,
- 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x00, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6E, 0x74, 0x79,
- 0x70, 0x65, 0x00, 0x6A, 0x61, 0x76, 0x61, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x00, 0x5F, 0x74,
- 0x6F, 0x58, 0x4D, 0x4C, 0x00, 0x5F, 0x61, 0x72, 0x72, 0x61, 0x79, 0x54, 0x6F, 0x58, 0x4D, 0x4C,
- 0x00, 0x3C, 0x61, 0x72, 0x72, 0x61, 0x79, 0x3E, 0x00, 0x73, 0x00, 0x61, 0x72, 0x72, 0x61, 0x79,
- 0x00, 0x3C, 0x70, 0x72, 0x6F, 0x70, 0x65, 0x72, 0x74, 0x79, 0x20, 0x69, 0x64, 0x3D, 0x22, 0x00,
- 0x22, 0x3E, 0x00, 0x3C, 0x2F, 0x70, 0x72, 0x6F, 0x70, 0x65, 0x72, 0x74, 0x79, 0x3E, 0x00, 0x3C,
- 0x2F, 0x61, 0x72, 0x72, 0x61, 0x79, 0x3E, 0x00, 0x3C, 0x61, 0x72, 0x67, 0x75, 0x6D, 0x65, 0x6E,
- 0x74, 0x73, 0x3E, 0x00, 0x3C, 0x2F, 0x61, 0x72, 0x67, 0x75, 0x6D, 0x65, 0x6E, 0x74, 0x73, 0x3E,
- 0x00, 0x5F, 0x6F, 0x62, 0x6A, 0x65, 0x63, 0x74, 0x54, 0x6F, 0x58, 0x4D, 0x4C, 0x00, 0x3C, 0x6F,
- 0x62, 0x6A, 0x65, 0x63, 0x74, 0x3E, 0x00, 0x6F, 0x62, 0x6A, 0x00, 0x3C, 0x2F, 0x6F, 0x62, 0x6A,
- 0x65, 0x63, 0x74, 0x3E, 0x00, 0x73, 0x74, 0x72, 0x69, 0x6E, 0x67, 0x00, 0x3C, 0x73, 0x74, 0x72,
- 0x69, 0x6E, 0x67, 0x3E, 0x00, 0x5F, 0x65, 0x73, 0x63, 0x61, 0x70, 0x65, 0x58, 0x4D, 0x4C, 0x00,
- 0x3C, 0x2F, 0x73, 0x74, 0x72, 0x69, 0x6E, 0x67, 0x3E, 0x00, 0x3C, 0x75, 0x6E, 0x64, 0x65, 0x66,
- 0x69, 0x6E, 0x65, 0x64, 0x2F, 0x3E, 0x00, 0x6E, 0x75, 0x6D, 0x62, 0x65, 0x72, 0x00, 0x3C, 0x6E,
- 0x75, 0x6D, 0x62, 0x65, 0x72, 0x3E, 0x00, 0x3C, 0x2F, 0x6E, 0x75, 0x6D, 0x62, 0x65, 0x72, 0x3E,
- 0x00, 0x3C, 0x6E, 0x75, 0x6C, 0x6C, 0x2F, 0x3E, 0x00, 0x62, 0x6F, 0x6F, 0x6C, 0x65, 0x61, 0x6E,
- 0x00, 0x3C, 0x74, 0x72, 0x75, 0x65, 0x2F, 0x3E, 0x00, 0x3C, 0x66, 0x61, 0x6C, 0x73, 0x65, 0x2F,
- 0x3E, 0x00, 0x68, 0x61, 0x73, 0x4F, 0x77, 0x6E, 0x50, 0x72, 0x6F, 0x70, 0x65, 0x72, 0x74, 0x79,
- 0x00, 0x5F, 0x6F, 0x62, 0x6A, 0x65, 0x63, 0x74, 0x54, 0x6F, 0x41, 0x53, 0x00, 0x70, 0x72, 0x6F,
- 0x70, 0x65, 0x72, 0x74, 0x79, 0x00, 0x5F, 0x61, 0x72, 0x72, 0x61, 0x79, 0x54, 0x6F, 0x41, 0x53,
- 0x00, 0x4E, 0x75, 0x6D, 0x62, 0x65, 0x72, 0x00, 0x53, 0x74, 0x72, 0x69, 0x6E, 0x67, 0x00, 0x5F,
- 0x75, 0x6E, 0x65, 0x73, 0x63, 0x61, 0x70, 0x65, 0x58, 0x4D, 0x4C, 0x00, 0x63, 0x6C, 0x61, 0x73,
- 0x73, 0x00, 0x5F, 0x61, 0x72, 0x72, 0x61, 0x79, 0x54, 0x6F, 0x4A, 0x53, 0x00, 0x5B, 0x00, 0x5F,
- 0x6C, 0x31, 0x00, 0x5D, 0x00, 0x5F, 0x6F, 0x62, 0x6A, 0x65, 0x63, 0x74, 0x54, 0x6F, 0x4A, 0x53,
- 0x00, 0x28, 0x7B, 0x00, 0x6E, 0x65, 0x65, 0x64, 0x73, 0x5F, 0x63, 0x6F, 0x6D, 0x6D, 0x61, 0x00,
- 0x3A, 0x00, 0x7D, 0x29, 0x00, 0x22, 0x00, 0x5F, 0x6A, 0x73, 0x51, 0x75, 0x6F, 0x74, 0x65, 0x53,
- 0x74, 0x72, 0x69, 0x6E, 0x67, 0x00, 0x38, 0x5F, 0x69, 0x6E, 0x69, 0x74, 0x4A, 0x53, 0x2C, 0x38,
- 0x5F, 0x6F, 0x62, 0x6A, 0x65, 0x63, 0x74, 0x49, 0x44, 0x2C, 0x38, 0x5F, 0x61, 0x64, 0x64, 0x43,
- 0x61, 0x6C, 0x6C, 0x62, 0x61, 0x63, 0x6B, 0x2C, 0x38, 0x5F, 0x65, 0x76, 0x61, 0x6C, 0x4A, 0x53,
- 0x2C, 0x38, 0x5F, 0x63, 0x61, 0x6C, 0x6C, 0x4F, 0x75, 0x74, 0x2C, 0x38, 0x5F, 0x65, 0x73, 0x63,
- 0x61, 0x70, 0x65, 0x58, 0x4D, 0x4C, 0x2C, 0x38, 0x5F, 0x75, 0x6E, 0x65, 0x73, 0x63, 0x61, 0x70,
- 0x65, 0x58, 0x4D, 0x4C, 0x2C, 0x38, 0x5F, 0x6A, 0x73, 0x51, 0x75, 0x6F, 0x74, 0x65, 0x53, 0x74,
- 0x72, 0x69, 0x6E, 0x67, 0x00, 0x38, 0x61, 0x76, 0x61, 0x69, 0x6C, 0x61, 0x62, 0x6C, 0x65, 0x00,
- 0x53, 0x68, 0x61, 0x72, 0x65, 0x64, 0x4F, 0x62, 0x6A, 0x65, 0x63, 0x74, 0x00, 0x64, 0x65, 0x6C,
- 0x65, 0x74, 0x65, 0x41, 0x6C, 0x6C, 0x00, 0x49, 0x6D, 0x70, 0x6C, 0x65, 0x6D, 0x65, 0x6E, 0x74,
- 0x20, 0x53, 0x68, 0x61, 0x72, 0x65, 0x64, 0x4F, 0x62, 0x6A, 0x65, 0x63, 0x74, 0x2E, 0x64, 0x65,
- 0x6C, 0x65, 0x74, 0x65, 0x41, 0x6C, 0x6C, 0x20, 0x28, 0x73, 0x74, 0x61, 0x74, 0x69, 0x63, 0x29,
- 0x00, 0x67, 0x65, 0x74, 0x44, 0x69, 0x73, 0x6B, 0x55, 0x73, 0x61, 0x67, 0x65, 0x00, 0x49, 0x6D,
+ 0x73, 0x66, 0x6F, 0x72, 0x6D, 0x50, 0x6F, 0x69, 0x6E, 0x74, 0x00, 0x74, 0x72, 0x61, 0x6E, 0x73,
+ 0x6C, 0x61, 0x74, 0x65, 0x00, 0x49, 0x6D, 0x70, 0x6C, 0x65, 0x6D, 0x65, 0x6E, 0x74, 0x20, 0x4D,
+ 0x61, 0x74, 0x72, 0x69, 0x78, 0x2E, 0x74, 0x72, 0x61, 0x6E, 0x73, 0x6C, 0x61, 0x74, 0x65, 0x00,
+ 0x49, 0x6D, 0x70, 0x6C, 0x65, 0x6D, 0x65, 0x6E, 0x74, 0x20, 0x4D, 0x61, 0x74, 0x72, 0x69, 0x78,
+ 0x2E, 0x74, 0x6F, 0x53, 0x74, 0x72, 0x69, 0x6E, 0x67, 0x00, 0x43, 0x6F, 0x6C, 0x6F, 0x72, 0x54,
+ 0x72, 0x61, 0x6E, 0x73, 0x66, 0x6F, 0x72, 0x6D, 0x00, 0x49, 0x6D, 0x70, 0x6C, 0x65, 0x6D, 0x65,
+ 0x6E, 0x74, 0x20, 0x43, 0x6F, 0x6C, 0x6F, 0x72, 0x54, 0x72, 0x61, 0x6E, 0x73, 0x66, 0x6F, 0x72,
+ 0x6D, 0x2E, 0x74, 0x6F, 0x53, 0x74, 0x72, 0x69, 0x6E, 0x67, 0x00, 0x38, 0x63, 0x6F, 0x6E, 0x63,
+ 0x61, 0x74, 0x00, 0x38, 0x61, 0x6C, 0x70, 0x68, 0x61, 0x4D, 0x75, 0x6C, 0x74, 0x69, 0x70, 0x6C,
+ 0x69, 0x65, 0x72, 0x2C, 0x38, 0x72, 0x65, 0x64, 0x4D, 0x75, 0x6C, 0x74, 0x69, 0x70, 0x6C, 0x69,
+ 0x65, 0x72, 0x2C, 0x38, 0x67, 0x72, 0x65, 0x65, 0x6E, 0x4D, 0x75, 0x6C, 0x74, 0x69, 0x70, 0x6C,
+ 0x69, 0x65, 0x72, 0x2C, 0x38, 0x62, 0x6C, 0x75, 0x65, 0x4D, 0x75, 0x6C, 0x74, 0x69, 0x70, 0x6C,
+ 0x69, 0x65, 0x72, 0x2C, 0x38, 0x61, 0x6C, 0x70, 0x68, 0x61, 0x4F, 0x66, 0x66, 0x73, 0x65, 0x74,
+ 0x2C, 0x38, 0x72, 0x65, 0x64, 0x4F, 0x66, 0x66, 0x73, 0x65, 0x74, 0x2C, 0x38, 0x67, 0x72, 0x65,
+ 0x65, 0x6E, 0x4F, 0x66, 0x66, 0x73, 0x65, 0x74, 0x2C, 0x38, 0x62, 0x6C, 0x75, 0x65, 0x4F, 0x66,
+ 0x66, 0x73, 0x65, 0x74, 0x2C, 0x38, 0x72, 0x67, 0x62, 0x00, 0x54, 0x72, 0x61, 0x6E, 0x73, 0x66,
+ 0x6F, 0x72, 0x6D, 0x00, 0x38, 0x6D, 0x61, 0x74, 0x72, 0x69, 0x78, 0x2C, 0x38, 0x63, 0x6F, 0x6E,
+ 0x63, 0x61, 0x74, 0x65, 0x6E, 0x61, 0x74, 0x65, 0x64, 0x4D, 0x61, 0x74, 0x72, 0x69, 0x78, 0x2C,
+ 0x38, 0x63, 0x6F, 0x6C, 0x6F, 0x72, 0x54, 0x72, 0x61, 0x6E, 0x73, 0x66, 0x6F, 0x72, 0x6D, 0x2C,
+ 0x38, 0x63, 0x6F, 0x6E, 0x63, 0x61, 0x74, 0x65, 0x6E, 0x61, 0x74, 0x65, 0x64, 0x43, 0x6F, 0x6C,
+ 0x6F, 0x72, 0x54, 0x72, 0x61, 0x6E, 0x73, 0x66, 0x6F, 0x72, 0x6D, 0x2C, 0x38, 0x70, 0x69, 0x78,
+ 0x65, 0x6C, 0x42, 0x6F, 0x75, 0x6E, 0x64, 0x73, 0x00, 0x42, 0x69, 0x74, 0x6D, 0x61, 0x70, 0x44,
+ 0x61, 0x74, 0x61, 0x00, 0x52, 0x45, 0x44, 0x5F, 0x43, 0x48, 0x41, 0x4E, 0x4E, 0x45, 0x4C, 0x00,
+ 0x47, 0x52, 0x45, 0x45, 0x4E, 0x5F, 0x43, 0x48, 0x41, 0x4E, 0x4E, 0x45, 0x4C, 0x00, 0x42, 0x4C,
+ 0x55, 0x45, 0x5F, 0x43, 0x48, 0x41, 0x4E, 0x4E, 0x45, 0x4C, 0x00, 0x41, 0x4C, 0x50, 0x48, 0x41,
+ 0x5F, 0x43, 0x48, 0x41, 0x4E, 0x4E, 0x45, 0x4C, 0x00, 0x38, 0x6C, 0x6F, 0x61, 0x64, 0x42, 0x69,
+ 0x74, 0x6D, 0x61, 0x70, 0x00, 0x38, 0x67, 0x65, 0x74, 0x50, 0x69, 0x78, 0x65, 0x6C, 0x2C, 0x38,
+ 0x73, 0x65, 0x74, 0x50, 0x69, 0x78, 0x65, 0x6C, 0x2C, 0x38, 0x66, 0x69, 0x6C, 0x6C, 0x52, 0x65,
+ 0x63, 0x74, 0x2C, 0x38, 0x63, 0x6F, 0x70, 0x79, 0x50, 0x69, 0x78, 0x65, 0x6C, 0x73, 0x2C, 0x38,
+ 0x61, 0x70, 0x70, 0x6C, 0x79, 0x46, 0x69, 0x6C, 0x74, 0x65, 0x72, 0x2C, 0x38, 0x73, 0x63, 0x72,
+ 0x6F, 0x6C, 0x6C, 0x2C, 0x38, 0x74, 0x68, 0x72, 0x65, 0x73, 0x68, 0x6F, 0x6C, 0x64, 0x2C, 0x38,
+ 0x64, 0x72, 0x61, 0x77, 0x2C, 0x38, 0x70, 0x69, 0x78, 0x65, 0x6C, 0x44, 0x69, 0x73, 0x73, 0x6F,
+ 0x6C, 0x76, 0x65, 0x2C, 0x38, 0x67, 0x65, 0x74, 0x50, 0x69, 0x78, 0x65, 0x6C, 0x33, 0x32, 0x2C,
+ 0x38, 0x73, 0x65, 0x74, 0x50, 0x69, 0x78, 0x65, 0x6C, 0x33, 0x32, 0x2C, 0x38, 0x66, 0x6C, 0x6F,
+ 0x6F, 0x64, 0x46, 0x69, 0x6C, 0x6C, 0x2C, 0x38, 0x67, 0x65, 0x74, 0x43, 0x6F, 0x6C, 0x6F, 0x72,
+ 0x42, 0x6F, 0x75, 0x6E, 0x64, 0x73, 0x52, 0x65, 0x63, 0x74, 0x2C, 0x38, 0x70, 0x65, 0x72, 0x6C,
+ 0x69, 0x6E, 0x4E, 0x6F, 0x69, 0x73, 0x65, 0x2C, 0x38, 0x63, 0x6F, 0x6C, 0x6F, 0x72, 0x54, 0x72,
+ 0x61, 0x6E, 0x73, 0x66, 0x6F, 0x72, 0x6D, 0x2C, 0x38, 0x68, 0x69, 0x74, 0x54, 0x65, 0x73, 0x74,
+ 0x2C, 0x38, 0x70, 0x61, 0x6C, 0x65, 0x74, 0x74, 0x65, 0x4D, 0x61, 0x70, 0x2C, 0x38, 0x6D, 0x65,
+ 0x72, 0x67, 0x65, 0x2C, 0x38, 0x6E, 0x6F, 0x69, 0x73, 0x65, 0x2C, 0x38, 0x63, 0x6F, 0x70, 0x79,
+ 0x43, 0x68, 0x61, 0x6E, 0x6E, 0x65, 0x6C, 0x2C, 0x38, 0x63, 0x6C, 0x6F, 0x6E, 0x65, 0x2C, 0x38,
+ 0x64, 0x69, 0x73, 0x70, 0x6F, 0x73, 0x65, 0x2C, 0x38, 0x67, 0x65, 0x6E, 0x65, 0x72, 0x61, 0x74,
+ 0x65, 0x46, 0x69, 0x6C, 0x74, 0x65, 0x72, 0x52, 0x65, 0x63, 0x74, 0x2C, 0x38, 0x63, 0x6F, 0x6D,
+ 0x70, 0x61, 0x72, 0x65, 0x00, 0x38, 0x77, 0x69, 0x64, 0x74, 0x68, 0x2C, 0x38, 0x68, 0x65, 0x69,
+ 0x67, 0x68, 0x74, 0x2C, 0x38, 0x72, 0x65, 0x63, 0x74, 0x61, 0x6E, 0x67, 0x6C, 0x65, 0x2C, 0x38,
+ 0x74, 0x72, 0x61, 0x6E, 0x73, 0x70, 0x61, 0x72, 0x65, 0x6E, 0x74, 0x00, 0x65, 0x78, 0x74, 0x65,
+ 0x72, 0x6E, 0x61, 0x6C, 0x00, 0x45, 0x78, 0x74, 0x65, 0x72, 0x6E, 0x61, 0x6C, 0x49, 0x6E, 0x74,
+ 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x00, 0x61, 0x64, 0x64, 0x43, 0x61, 0x6C, 0x6C, 0x62, 0x61,
+ 0x63, 0x6B, 0x00, 0x61, 0x76, 0x61, 0x69, 0x6C, 0x61, 0x62, 0x6C, 0x65, 0x00, 0x5F, 0x69, 0x6E,
+ 0x69, 0x74, 0x4A, 0x53, 0x00, 0x69, 0x6E, 0x73, 0x74, 0x61, 0x6E, 0x63, 0x65, 0x00, 0x72, 0x65,
+ 0x71, 0x75, 0x65, 0x73, 0x74, 0x00, 0x5F, 0x63, 0x61, 0x6C, 0x6C, 0x49, 0x6E, 0x00, 0x5F, 0x61,
+ 0x64, 0x64, 0x43, 0x61, 0x6C, 0x6C, 0x62, 0x61, 0x63, 0x6B, 0x00, 0x63, 0x61, 0x6C, 0x6C, 0x00,
+ 0x74, 0x72, 0x79, 0x20, 0x7B, 0x20, 0x00, 0x5F, 0x6F, 0x62, 0x6A, 0x65, 0x63, 0x74, 0x49, 0x44,
+ 0x00, 0x69, 0x64, 0x00, 0x2E, 0x53, 0x65, 0x74, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6E, 0x56, 0x61,
+ 0x6C, 0x75, 0x65, 0x28, 0x00, 0x5F, 0x5F, 0x66, 0x6C, 0x61, 0x73, 0x68, 0x5F, 0x5F, 0x74, 0x6F,
+ 0x58, 0x4D, 0x4C, 0x20, 0x28, 0x00, 0x28, 0x00, 0x2C, 0x00, 0x5F, 0x74, 0x6F, 0x4A, 0x53, 0x00,
+ 0x29, 0x29, 0x20, 0x00, 0x3B, 0x20, 0x7D, 0x20, 0x63, 0x61, 0x74, 0x63, 0x68, 0x20, 0x28, 0x65,
+ 0x29, 0x20, 0x7B, 0x20, 0x00, 0x2E, 0x53, 0x65, 0x74, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6E, 0x56,
+ 0x61, 0x6C, 0x75, 0x65, 0x28, 0x22, 0x3C, 0x75, 0x6E, 0x64, 0x65, 0x66, 0x69, 0x6E, 0x65, 0x64,
+ 0x2F, 0x3E, 0x22, 0x29, 0x3B, 0x20, 0x7D, 0x00, 0x22, 0x3C, 0x75, 0x6E, 0x64, 0x65, 0x66, 0x69,
+ 0x6E, 0x65, 0x64, 0x2F, 0x3E, 0x22, 0x3B, 0x20, 0x7D, 0x00, 0x5F, 0x65, 0x76, 0x61, 0x6C, 0x4A,
+ 0x53, 0x00, 0x3C, 0x69, 0x6E, 0x76, 0x6F, 0x6B, 0x65, 0x20, 0x6E, 0x61, 0x6D, 0x65, 0x3D, 0x22,
+ 0x00, 0x22, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6E, 0x74, 0x79, 0x70, 0x65, 0x3D, 0x22, 0x78,
+ 0x6D, 0x6C, 0x22, 0x3E, 0x00, 0x5F, 0x61, 0x72, 0x67, 0x75, 0x6D, 0x65, 0x6E, 0x74, 0x73, 0x54,
+ 0x6F, 0x58, 0x4D, 0x4C, 0x00, 0x3C, 0x2F, 0x69, 0x6E, 0x76, 0x6F, 0x6B, 0x65, 0x3E, 0x00, 0x5F,
+ 0x63, 0x61, 0x6C, 0x6C, 0x4F, 0x75, 0x74, 0x00, 0x78, 0x6D, 0x6C, 0x00, 0x69, 0x67, 0x6E, 0x6F,
+ 0x72, 0x65, 0x57, 0x68, 0x69, 0x74, 0x65, 0x00, 0x66, 0x69, 0x72, 0x73, 0x74, 0x43, 0x68, 0x69,
+ 0x6C, 0x64, 0x00, 0x5F, 0x74, 0x6F, 0x41, 0x53, 0x00, 0x61, 0x72, 0x67, 0x73, 0x00, 0x63, 0x68,
+ 0x69, 0x6C, 0x64, 0x4E, 0x6F, 0x64, 0x65, 0x73, 0x00, 0x6E, 0x6F, 0x64, 0x65, 0x4E, 0x61, 0x6D,
+ 0x65, 0x00, 0x5F, 0x61, 0x72, 0x67, 0x75, 0x6D, 0x65, 0x6E, 0x74, 0x73, 0x54, 0x6F, 0x41, 0x53,
+ 0x00, 0x61, 0x70, 0x70, 0x6C, 0x79, 0x00, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65,
+ 0x73, 0x00, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6E, 0x74, 0x79, 0x70, 0x65, 0x00, 0x6A, 0x61, 0x76,
+ 0x61, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x00, 0x5F, 0x74, 0x6F, 0x58, 0x4D, 0x4C, 0x00, 0x5F,
+ 0x61, 0x72, 0x72, 0x61, 0x79, 0x54, 0x6F, 0x58, 0x4D, 0x4C, 0x00, 0x3C, 0x61, 0x72, 0x72, 0x61,
+ 0x79, 0x3E, 0x00, 0x73, 0x00, 0x61, 0x72, 0x72, 0x61, 0x79, 0x00, 0x3C, 0x70, 0x72, 0x6F, 0x70,
+ 0x65, 0x72, 0x74, 0x79, 0x20, 0x69, 0x64, 0x3D, 0x22, 0x00, 0x22, 0x3E, 0x00, 0x3C, 0x2F, 0x70,
+ 0x72, 0x6F, 0x70, 0x65, 0x72, 0x74, 0x79, 0x3E, 0x00, 0x3C, 0x2F, 0x61, 0x72, 0x72, 0x61, 0x79,
+ 0x3E, 0x00, 0x3C, 0x61, 0x72, 0x67, 0x75, 0x6D, 0x65, 0x6E, 0x74, 0x73, 0x3E, 0x00, 0x3C, 0x2F,
+ 0x61, 0x72, 0x67, 0x75, 0x6D, 0x65, 0x6E, 0x74, 0x73, 0x3E, 0x00, 0x5F, 0x6F, 0x62, 0x6A, 0x65,
+ 0x63, 0x74, 0x54, 0x6F, 0x58, 0x4D, 0x4C, 0x00, 0x3C, 0x6F, 0x62, 0x6A, 0x65, 0x63, 0x74, 0x3E,
+ 0x00, 0x6F, 0x62, 0x6A, 0x00, 0x3C, 0x2F, 0x6F, 0x62, 0x6A, 0x65, 0x63, 0x74, 0x3E, 0x00, 0x73,
+ 0x74, 0x72, 0x69, 0x6E, 0x67, 0x00, 0x3C, 0x73, 0x74, 0x72, 0x69, 0x6E, 0x67, 0x3E, 0x00, 0x5F,
+ 0x65, 0x73, 0x63, 0x61, 0x70, 0x65, 0x58, 0x4D, 0x4C, 0x00, 0x3C, 0x2F, 0x73, 0x74, 0x72, 0x69,
+ 0x6E, 0x67, 0x3E, 0x00, 0x3C, 0x75, 0x6E, 0x64, 0x65, 0x66, 0x69, 0x6E, 0x65, 0x64, 0x2F, 0x3E,
+ 0x00, 0x6E, 0x75, 0x6D, 0x62, 0x65, 0x72, 0x00, 0x3C, 0x6E, 0x75, 0x6D, 0x62, 0x65, 0x72, 0x3E,
+ 0x00, 0x3C, 0x2F, 0x6E, 0x75, 0x6D, 0x62, 0x65, 0x72, 0x3E, 0x00, 0x3C, 0x6E, 0x75, 0x6C, 0x6C,
+ 0x2F, 0x3E, 0x00, 0x62, 0x6F, 0x6F, 0x6C, 0x65, 0x61, 0x6E, 0x00, 0x3C, 0x74, 0x72, 0x75, 0x65,
+ 0x2F, 0x3E, 0x00, 0x3C, 0x66, 0x61, 0x6C, 0x73, 0x65, 0x2F, 0x3E, 0x00, 0x68, 0x61, 0x73, 0x4F,
+ 0x77, 0x6E, 0x50, 0x72, 0x6F, 0x70, 0x65, 0x72, 0x74, 0x79, 0x00, 0x5F, 0x6F, 0x62, 0x6A, 0x65,
+ 0x63, 0x74, 0x54, 0x6F, 0x41, 0x53, 0x00, 0x70, 0x72, 0x6F, 0x70, 0x65, 0x72, 0x74, 0x79, 0x00,
+ 0x5F, 0x61, 0x72, 0x72, 0x61, 0x79, 0x54, 0x6F, 0x41, 0x53, 0x00, 0x4E, 0x75, 0x6D, 0x62, 0x65,
+ 0x72, 0x00, 0x53, 0x74, 0x72, 0x69, 0x6E, 0x67, 0x00, 0x5F, 0x75, 0x6E, 0x65, 0x73, 0x63, 0x61,
+ 0x70, 0x65, 0x58, 0x4D, 0x4C, 0x00, 0x63, 0x6C, 0x61, 0x73, 0x73, 0x00, 0x5F, 0x61, 0x72, 0x72,
+ 0x61, 0x79, 0x54, 0x6F, 0x4A, 0x53, 0x00, 0x5B, 0x00, 0x5F, 0x6C, 0x31, 0x00, 0x5D, 0x00, 0x5F,
+ 0x6F, 0x62, 0x6A, 0x65, 0x63, 0x74, 0x54, 0x6F, 0x4A, 0x53, 0x00, 0x28, 0x7B, 0x00, 0x6E, 0x65,
+ 0x65, 0x64, 0x73, 0x5F, 0x63, 0x6F, 0x6D, 0x6D, 0x61, 0x00, 0x3A, 0x00, 0x7D, 0x29, 0x00, 0x22,
+ 0x00, 0x5F, 0x6A, 0x73, 0x51, 0x75, 0x6F, 0x74, 0x65, 0x53, 0x74, 0x72, 0x69, 0x6E, 0x67, 0x00,
+ 0x38, 0x5F, 0x69, 0x6E, 0x69, 0x74, 0x4A, 0x53, 0x2C, 0x38, 0x5F, 0x6F, 0x62, 0x6A, 0x65, 0x63,
+ 0x74, 0x49, 0x44, 0x2C, 0x38, 0x5F, 0x61, 0x64, 0x64, 0x43, 0x61, 0x6C, 0x6C, 0x62, 0x61, 0x63,
+ 0x6B, 0x2C, 0x38, 0x5F, 0x65, 0x76, 0x61, 0x6C, 0x4A, 0x53, 0x2C, 0x38, 0x5F, 0x63, 0x61, 0x6C,
+ 0x6C, 0x4F, 0x75, 0x74, 0x2C, 0x38, 0x5F, 0x65, 0x73, 0x63, 0x61, 0x70, 0x65, 0x58, 0x4D, 0x4C,
+ 0x2C, 0x38, 0x5F, 0x75, 0x6E, 0x65, 0x73, 0x63, 0x61, 0x70, 0x65, 0x58, 0x4D, 0x4C, 0x2C, 0x38,
+ 0x5F, 0x6A, 0x73, 0x51, 0x75, 0x6F, 0x74, 0x65, 0x53, 0x74, 0x72, 0x69, 0x6E, 0x67, 0x00, 0x38,
+ 0x61, 0x76, 0x61, 0x69, 0x6C, 0x61, 0x62, 0x6C, 0x65, 0x00, 0x53, 0x68, 0x61, 0x72, 0x65, 0x64,
+ 0x4F, 0x62, 0x6A, 0x65, 0x63, 0x74, 0x00, 0x64, 0x65, 0x6C, 0x65, 0x74, 0x65, 0x41, 0x6C, 0x6C,
+ 0x00, 0x49, 0x6D, 0x70, 0x6C, 0x65, 0x6D, 0x65, 0x6E, 0x74, 0x20, 0x53, 0x68, 0x61, 0x72, 0x65,
+ 0x64, 0x4F, 0x62, 0x6A, 0x65, 0x63, 0x74, 0x2E, 0x64, 0x65, 0x6C, 0x65, 0x74, 0x65, 0x41, 0x6C,
+ 0x6C, 0x20, 0x28, 0x73, 0x74, 0x61, 0x74, 0x69, 0x63, 0x29, 0x00, 0x67, 0x65, 0x74, 0x44, 0x69,
+ 0x73, 0x6B, 0x55, 0x73, 0x61, 0x67, 0x65, 0x00, 0x49, 0x6D, 0x70, 0x6C, 0x65, 0x6D, 0x65, 0x6E,
+ 0x74, 0x20, 0x53, 0x68, 0x61, 0x72, 0x65, 0x64, 0x4F, 0x62, 0x6A, 0x65, 0x63, 0x74, 0x2E, 0x67,
+ 0x65, 0x74, 0x44, 0x69, 0x73, 0x6B, 0x55, 0x73, 0x61, 0x67, 0x65, 0x20, 0x28, 0x73, 0x74, 0x61,
+ 0x74, 0x69, 0x63, 0x29, 0x00, 0x67, 0x65, 0x74, 0x4C, 0x6F, 0x63, 0x61, 0x6C, 0x00, 0x49, 0x6D,
0x70, 0x6C, 0x65, 0x6D, 0x65, 0x6E, 0x74, 0x20, 0x53, 0x68, 0x61, 0x72, 0x65, 0x64, 0x4F, 0x62,
- 0x6A, 0x65, 0x63, 0x74, 0x2E, 0x67, 0x65, 0x74, 0x44, 0x69, 0x73, 0x6B, 0x55, 0x73, 0x61, 0x67,
- 0x65, 0x20, 0x28, 0x73, 0x74, 0x61, 0x74, 0x69, 0x63, 0x29, 0x00, 0x67, 0x65, 0x74, 0x4C, 0x6F,
- 0x63, 0x61, 0x6C, 0x00, 0x49, 0x6D, 0x70, 0x6C, 0x65, 0x6D, 0x65, 0x6E, 0x74, 0x20, 0x53, 0x68,
- 0x61, 0x72, 0x65, 0x64, 0x4F, 0x62, 0x6A, 0x65, 0x63, 0x74, 0x2E, 0x67, 0x65, 0x74, 0x4C, 0x6F,
- 0x63, 0x61, 0x6C, 0x20, 0x28, 0x73, 0x74, 0x61, 0x74, 0x69, 0x63, 0x29, 0x00, 0x67, 0x65, 0x74,
- 0x52, 0x65, 0x6D, 0x6F, 0x74, 0x65, 0x00, 0x49, 0x6D, 0x70, 0x6C, 0x65, 0x6D, 0x65, 0x6E, 0x74,
- 0x20, 0x53, 0x68, 0x61, 0x72, 0x65, 0x64, 0x4F, 0x62, 0x6A, 0x65, 0x63, 0x74, 0x2E, 0x67, 0x65,
- 0x74, 0x52, 0x65, 0x6D, 0x6F, 0x74, 0x65, 0x20, 0x28, 0x73, 0x74, 0x61, 0x74, 0x69, 0x63, 0x29,
- 0x00, 0x64, 0x65, 0x6C, 0x65, 0x74, 0x65, 0x41, 0x6C, 0x6C, 0x2C, 0x67, 0x65, 0x74, 0x44, 0x69,
- 0x73, 0x6B, 0x55, 0x73, 0x61, 0x67, 0x65, 0x00, 0x36, 0x63, 0x6F, 0x6E, 0x6E, 0x65, 0x63, 0x74,
- 0x2C, 0x36, 0x73, 0x65, 0x6E, 0x64, 0x2C, 0x36, 0x66, 0x6C, 0x75, 0x73, 0x68, 0x2C, 0x36, 0x63,
- 0x6C, 0x6F, 0x73, 0x65, 0x2C, 0x36, 0x67, 0x65, 0x74, 0x53, 0x69, 0x7A, 0x65, 0x2C, 0x36, 0x73,
- 0x65, 0x74, 0x46, 0x70, 0x73, 0x2C, 0x36, 0x63, 0x6C, 0x65, 0x61, 0x72, 0x00, 0x73, 0x70, 0x6C,
- 0x69, 0x74, 0x00, 0x63, 0x6F, 0x75, 0x6E, 0x74, 0x00, 0x52, 0x65, 0x6D, 0x6F, 0x74, 0x65, 0x4C,
- 0x53, 0x4F, 0x55, 0x73, 0x61, 0x67, 0x65, 0x00, 0x67, 0x65, 0x74, 0x55, 0x52, 0x4C, 0x50, 0x61,
- 0x67, 0x65, 0x53, 0x75, 0x70, 0x70, 0x6F, 0x72, 0x74, 0x00, 0x49, 0x6D, 0x70, 0x6C, 0x65, 0x6D,
- 0x65, 0x6E, 0x74, 0x20, 0x52, 0x65, 0x6D, 0x6F, 0x74, 0x65, 0x4C, 0x53, 0x4F, 0x55, 0x73, 0x61,
- 0x67, 0x65, 0x2E, 0x67, 0x65, 0x74, 0x55, 0x52, 0x4C, 0x50, 0x61, 0x67, 0x65, 0x53, 0x75, 0x70,
- 0x70, 0x6F, 0x72, 0x74, 0x20, 0x28, 0x73, 0x74, 0x61, 0x74, 0x69, 0x63, 0x29, 0x00, 0x42, 0x75,
- 0x74, 0x74, 0x6F, 0x6E, 0x00, 0x67, 0x65, 0x74, 0x44, 0x65, 0x70, 0x74, 0x68, 0x00, 0x38, 0x73,
- 0x63, 0x61, 0x6C, 0x65, 0x39, 0x47, 0x72, 0x69, 0x64, 0x2C, 0x38, 0x66, 0x69, 0x6C, 0x74, 0x65,
- 0x72, 0x73, 0x2C, 0x38, 0x63, 0x61, 0x63, 0x68, 0x65, 0x41, 0x73, 0x42, 0x69, 0x74, 0x6D, 0x61,
- 0x70, 0x2C, 0x38, 0x62, 0x6C, 0x65, 0x6E, 0x64, 0x4D, 0x6F, 0x64, 0x65, 0x00, 0x66, 0x69, 0x6C,
- 0x74, 0x65, 0x72, 0x73, 0x00, 0x42, 0x69, 0x74, 0x6D, 0x61, 0x70, 0x46, 0x69, 0x6C, 0x74, 0x65,
- 0x72, 0x00, 0x38, 0x63, 0x6C, 0x6F, 0x6E, 0x65, 0x00, 0x42, 0x65, 0x76, 0x65, 0x6C, 0x46, 0x69,
- 0x6C, 0x74, 0x65, 0x72, 0x00, 0x38, 0x64, 0x69, 0x73, 0x74, 0x61, 0x6E, 0x63, 0x65, 0x2C, 0x38,
- 0x61, 0x6E, 0x67, 0x6C, 0x65, 0x2C, 0x38, 0x68, 0x69, 0x67, 0x68, 0x6C, 0x69, 0x67, 0x68, 0x74,
- 0x43, 0x6F, 0x6C, 0x6F, 0x72, 0x2C, 0x38, 0x68, 0x69, 0x67, 0x68, 0x6C, 0x69, 0x67, 0x68, 0x74,
- 0x41, 0x6C, 0x70, 0x68, 0x61, 0x2C, 0x38, 0x73, 0x68, 0x61, 0x64, 0x6F, 0x77, 0x43, 0x6F, 0x6C,
- 0x6F, 0x72, 0x2C, 0x38, 0x73, 0x68, 0x61, 0x64, 0x6F, 0x77, 0x41, 0x6C, 0x70, 0x68, 0x61, 0x2C,
- 0x38, 0x71, 0x75, 0x61, 0x6C, 0x69, 0x74, 0x79, 0x2C, 0x38, 0x73, 0x74, 0x72, 0x65, 0x6E, 0x67,
- 0x74, 0x68, 0x2C, 0x38, 0x6B, 0x6E, 0x6F, 0x63, 0x6B, 0x6F, 0x75, 0x74, 0x2C, 0x38, 0x62, 0x6C,
- 0x75, 0x72, 0x58, 0x2C, 0x38, 0x62, 0x6C, 0x75, 0x72, 0x59, 0x2C, 0x38, 0x74, 0x79, 0x70, 0x65,
- 0x00, 0x42, 0x6C, 0x75, 0x72, 0x46, 0x69, 0x6C, 0x74, 0x65, 0x72, 0x00, 0x38, 0x62, 0x6C, 0x75,
- 0x72, 0x58, 0x2C, 0x38, 0x62, 0x6C, 0x75, 0x72, 0x59, 0x2C, 0x38, 0x71, 0x75, 0x61, 0x6C, 0x69,
- 0x74, 0x79, 0x00, 0x43, 0x6F, 0x6C, 0x6F, 0x72, 0x4D, 0x61, 0x74, 0x72, 0x69, 0x78, 0x46, 0x69,
- 0x6C, 0x74, 0x65, 0x72, 0x00, 0x38, 0x6D, 0x61, 0x74, 0x72, 0x69, 0x78, 0x00, 0x43, 0x6F, 0x6E,
- 0x76, 0x6F, 0x6C, 0x75, 0x74, 0x69, 0x6F, 0x6E, 0x46, 0x69, 0x6C, 0x74, 0x65, 0x72, 0x00, 0x38,
- 0x6D, 0x61, 0x74, 0x72, 0x69, 0x78, 0x58, 0x2C, 0x38, 0x6D, 0x61, 0x74, 0x72, 0x69, 0x78, 0x59,
- 0x2C, 0x38, 0x6D, 0x61, 0x74, 0x72, 0x69, 0x78, 0x2C, 0x38, 0x64, 0x69, 0x76, 0x69, 0x73, 0x6F,
- 0x72, 0x2C, 0x38, 0x62, 0x69, 0x61, 0x73, 0x2C, 0x38, 0x70, 0x72, 0x65, 0x73, 0x65, 0x72, 0x76,
- 0x65, 0x41, 0x6C, 0x70, 0x68, 0x61, 0x2C, 0x38, 0x63, 0x6C, 0x61, 0x6D, 0x70, 0x2C, 0x38, 0x63,
- 0x6F, 0x6C, 0x6F, 0x72, 0x2C, 0x38, 0x61, 0x6C, 0x70, 0x68, 0x61, 0x00, 0x44, 0x69, 0x73, 0x70,
- 0x6C, 0x61, 0x63, 0x65, 0x6D, 0x65, 0x6E, 0x74, 0x4D, 0x61, 0x70, 0x46, 0x69, 0x6C, 0x74, 0x65,
- 0x72, 0x00, 0x38, 0x6D, 0x61, 0x70, 0x42, 0x69, 0x74, 0x6D, 0x61, 0x70, 0x2C, 0x38, 0x6D, 0x61,
- 0x70, 0x50, 0x6F, 0x69, 0x6E, 0x74, 0x2C, 0x38, 0x63, 0x6F, 0x6D, 0x70, 0x6F, 0x6E, 0x65, 0x6E,
- 0x74, 0x58, 0x2C, 0x38, 0x63, 0x6F, 0x6D, 0x70, 0x6F, 0x6E, 0x65, 0x6E, 0x74, 0x59, 0x2C, 0x38,
- 0x73, 0x63, 0x61, 0x6C, 0x65, 0x58, 0x2C, 0x38, 0x73, 0x63, 0x61, 0x6C, 0x65, 0x59, 0x2C, 0x38,
- 0x6D, 0x6F, 0x64, 0x65, 0x2C, 0x38, 0x63, 0x6F, 0x6C, 0x6F, 0x72, 0x2C, 0x38, 0x61, 0x6C, 0x70,
- 0x68, 0x61, 0x00, 0x44, 0x72, 0x6F, 0x70, 0x53, 0x68, 0x61, 0x64, 0x6F, 0x77, 0x46, 0x69, 0x6C,
- 0x74, 0x65, 0x72, 0x00, 0x38, 0x64, 0x69, 0x73, 0x74, 0x61, 0x6E, 0x63, 0x65, 0x2C, 0x38, 0x61,
- 0x6E, 0x67, 0x6C, 0x65, 0x2C, 0x38, 0x63, 0x6F, 0x6C, 0x6F, 0x72, 0x2C, 0x38, 0x61, 0x6C, 0x70,
- 0x68, 0x61, 0x2C, 0x38, 0x71, 0x75, 0x61, 0x6C, 0x69, 0x74, 0x79, 0x2C, 0x38, 0x69, 0x6E, 0x6E,
- 0x65, 0x72, 0x2C, 0x38, 0x6B, 0x6E, 0x6F, 0x63, 0x6B, 0x6F, 0x75, 0x74, 0x2C, 0x38, 0x62, 0x6C,
- 0x75, 0x72, 0x58, 0x2C, 0x38, 0x62, 0x6C, 0x75, 0x72, 0x59, 0x2C, 0x38, 0x73, 0x74, 0x72, 0x65,
- 0x6E, 0x67, 0x74, 0x68, 0x2C, 0x38, 0x68, 0x69, 0x64, 0x65, 0x4F, 0x62, 0x6A, 0x65, 0x63, 0x74,
- 0x00, 0x47, 0x6C, 0x6F, 0x77, 0x46, 0x69, 0x6C, 0x74, 0x65, 0x72, 0x00, 0x38, 0x63, 0x6F, 0x6C,
- 0x6F, 0x72, 0x2C, 0x38, 0x61, 0x6C, 0x70, 0x68, 0x61, 0x2C, 0x38, 0x71, 0x75, 0x61, 0x6C, 0x69,
- 0x74, 0x79, 0x2C, 0x38, 0x69, 0x6E, 0x6E, 0x65, 0x72, 0x2C, 0x38, 0x6B, 0x6E, 0x6F, 0x63, 0x6B,
- 0x6F, 0x75, 0x74, 0x2C, 0x38, 0x62, 0x6C, 0x75, 0x72, 0x58, 0x2C, 0x38, 0x62, 0x6C, 0x75, 0x72,
- 0x59, 0x2C, 0x38, 0x73, 0x74, 0x72, 0x65, 0x6E, 0x67, 0x74, 0x68, 0x00, 0x47, 0x72, 0x61, 0x64,
- 0x69, 0x65, 0x6E, 0x74, 0x42, 0x65, 0x76, 0x65, 0x6C, 0x46, 0x69, 0x6C, 0x74, 0x65, 0x72, 0x00,
- 0x38, 0x64, 0x69, 0x73, 0x74, 0x61, 0x6E, 0x63, 0x65, 0x2C, 0x38, 0x61, 0x6E, 0x67, 0x6C, 0x65,
- 0x2C, 0x38, 0x63, 0x6F, 0x6C, 0x6F, 0x72, 0x73, 0x2C, 0x38, 0x61, 0x6C, 0x70, 0x68, 0x61, 0x73,
- 0x2C, 0x38, 0x72, 0x61, 0x74, 0x69, 0x6F, 0x73, 0x2C, 0x38, 0x62, 0x6C, 0x75, 0x72, 0x58, 0x2C,
- 0x38, 0x62, 0x6C, 0x75, 0x72, 0x59, 0x2C, 0x38, 0x71, 0x75, 0x61, 0x6C, 0x69, 0x74, 0x79, 0x2C,
- 0x38, 0x73, 0x74, 0x72, 0x65, 0x6E, 0x67, 0x74, 0x68, 0x2C, 0x38, 0x6B, 0x6E, 0x6F, 0x63, 0x6B,
- 0x6F, 0x75, 0x74, 0x2C, 0x38, 0x74, 0x79, 0x70, 0x65, 0x00, 0x47, 0x72, 0x61, 0x64, 0x69, 0x65,
- 0x6E, 0x74, 0x47, 0x6C, 0x6F, 0x77, 0x46, 0x69, 0x6C, 0x74, 0x65, 0x72, 0x00, 0x73, 0x65, 0x74,
- 0x49, 0x6E, 0x74, 0x65, 0x72, 0x76, 0x61, 0x6C, 0x00, 0x63, 0x6C, 0x65, 0x61, 0x72, 0x49, 0x6E,
- 0x74, 0x65, 0x72, 0x76, 0x61, 0x6C, 0x00, 0x73, 0x65, 0x74, 0x54, 0x69, 0x6D, 0x65, 0x6F, 0x75,
- 0x74, 0x00, 0x63, 0x6C, 0x65, 0x61, 0x72, 0x54, 0x69, 0x6D, 0x65, 0x6F, 0x75, 0x74, 0x00, 0x73,
- 0x68, 0x6F, 0x77, 0x52, 0x65, 0x64, 0x72, 0x61, 0x77, 0x52, 0x65, 0x67, 0x69, 0x6F, 0x6E, 0x73,
- 0x00, 0x74, 0x72, 0x61, 0x63, 0x65, 0x00, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x41, 0x66, 0x74,
- 0x65, 0x72, 0x45, 0x76, 0x65, 0x6E, 0x74, 0x00, 0x8E, 0x12, 0x00, 0x45, 0x72, 0x72, 0x6F, 0x72,
- 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6D, 0x73, 0x67, 0x00, 0x23, 0x00, 0x96, 0x02, 0x00,
- 0x08, 0x08, 0x1C, 0x44, 0x96, 0x02, 0x00, 0x08, 0x09, 0x49, 0x12, 0x12, 0x9D, 0x02, 0x00, 0x0F,
- 0x00, 0x96, 0x02, 0x00, 0x08, 0x0A, 0x1C, 0x96, 0x04, 0x00, 0x08, 0x0B, 0x08, 0x08, 0x1C, 0x4F,
- 0x8E, 0x15, 0x00, 0x41, 0x73, 0x42, 0x72, 0x6F, 0x61, 0x64, 0x63, 0x61, 0x73, 0x74, 0x65, 0x72,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8E, 0x10, 0x00, 0x4C, 0x6F, 0x61, 0x64, 0x56,
- 0x61, 0x72, 0x73, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8E, 0x0E, 0x00, 0x43, 0x61,
- 0x6D, 0x65, 0x72, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8E, 0x1D, 0x00, 0x43,
- 0x6F, 0x6E, 0x74, 0x65, 0x78, 0x74, 0x4D, 0x65, 0x6E, 0x75, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x63, 0x61, 0x6C, 0x6C, 0x62, 0x61, 0x63, 0x6B, 0x00, 0x56, 0x00, 0x96, 0x02, 0x00, 0x08,
- 0x0A, 0x1C, 0x96, 0x04, 0x00, 0x08, 0xF4, 0x08, 0xF5, 0x1C, 0x4F, 0x96, 0x02, 0x00, 0x08, 0x0A,
- 0x1C, 0x96, 0x09, 0x00, 0x08, 0xF6, 0x07, 0x00, 0x00, 0x00, 0x00, 0x08, 0xF7, 0x40, 0x4F, 0x96,
- 0x02, 0x00, 0x08, 0x0A, 0x1C, 0x96, 0x28, 0x00, 0x08, 0xF8, 0x08, 0xF9, 0x05, 0x01, 0x08, 0xFA,
- 0x05, 0x01, 0x08, 0xFB, 0x05, 0x01, 0x08, 0xFC, 0x05, 0x01, 0x08, 0xFD, 0x05, 0x01, 0x08, 0xFE,
- 0x05, 0x01, 0x08, 0xFF, 0x05, 0x01, 0x09, 0x00, 0x01, 0x05, 0x01, 0x07, 0x08, 0x00, 0x00, 0x00,
- 0x43, 0x4F, 0x8E, 0x4D, 0x00, 0x43, 0x6F, 0x6E, 0x74, 0x65, 0x78, 0x74, 0x4D, 0x65, 0x6E, 0x75,
- 0x49, 0x74, 0x65, 0x6D, 0x00, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x63, 0x61, 0x70, 0x74, 0x69,
- 0x6F, 0x6E, 0x00, 0x00, 0x63, 0x61, 0x6C, 0x6C, 0x62, 0x61, 0x63, 0x6B, 0x00, 0x00, 0x73, 0x65,
- 0x70, 0x61, 0x72, 0x61, 0x74, 0x6F, 0x72, 0x42, 0x65, 0x66, 0x6F, 0x72, 0x65, 0x00, 0x00, 0x65,
- 0x6E, 0x61, 0x62, 0x6C, 0x65, 0x64, 0x00, 0x00, 0x76, 0x69, 0x73, 0x69, 0x62, 0x6C, 0x65, 0x00,
- 0xBE, 0x00, 0x96, 0x02, 0x00, 0x08, 0x0A, 0x1C, 0x96, 0x06, 0x00, 0x09, 0x04, 0x01, 0x09, 0x04,
- 0x01, 0x1C, 0x4F, 0x96, 0x02, 0x00, 0x08, 0x0A, 0x1C, 0x96, 0x04, 0x00, 0x08, 0xF4, 0x08, 0xF5,
- 0x1C, 0x4F, 0x96, 0x03, 0x00, 0x09, 0x05, 0x01, 0x1C, 0x96, 0x01, 0x00, 0x03, 0x49, 0x9D, 0x02,
- 0x00, 0x16, 0x00, 0x96, 0x02, 0x00, 0x08, 0x0A, 0x1C, 0x96, 0x06, 0x00, 0x09, 0x05, 0x01, 0x09,
- 0x05, 0x01, 0x1C, 0x4F, 0x99, 0x02, 0x00, 0x0F, 0x00, 0x96, 0x02, 0x00, 0x08, 0x0A, 0x1C, 0x96,
- 0x05, 0x00, 0x09, 0x05, 0x01, 0x05, 0x00, 0x4F, 0x96, 0x02, 0x00, 0x08, 0x98, 0x1C, 0x96, 0x01,
- 0x00, 0x03, 0x49, 0x9D, 0x02, 0x00, 0x14, 0x00, 0x96, 0x02, 0x00, 0x08, 0x0A, 0x1C, 0x96, 0x04,
- 0x00, 0x08, 0x98, 0x08, 0x98, 0x1C, 0x4F, 0x99, 0x02, 0x00, 0x0E, 0x00, 0x96, 0x02, 0x00, 0x08,
- 0x0A, 0x1C, 0x96, 0x04, 0x00, 0x08, 0x98, 0x05, 0x01, 0x4F, 0x96, 0x03, 0x00, 0x09, 0x06, 0x01,
- 0x1C, 0x96, 0x01, 0x00, 0x03, 0x49, 0x9D, 0x02, 0x00, 0x16, 0x00, 0x96, 0x02, 0x00, 0x08, 0x0A,
- 0x1C, 0x96, 0x06, 0x00, 0x09, 0x06, 0x01, 0x09, 0x06, 0x01, 0x1C, 0x4F, 0x99, 0x02, 0x00, 0x0F,
- 0x00, 0x96, 0x02, 0x00, 0x08, 0x0A, 0x1C, 0x96, 0x05, 0x00, 0x09, 0x06, 0x01, 0x05, 0x01, 0x4F,
- 0x8E, 0x17, 0x00, 0x4C, 0x6F, 0x63, 0x61, 0x6C, 0x43, 0x6F, 0x6E, 0x6E, 0x65, 0x63, 0x74, 0x69,
- 0x6F, 0x6E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8E, 0x12, 0x00, 0x4D, 0x69, 0x63,
- 0x72, 0x6F, 0x70, 0x68, 0x6F, 0x6E, 0x65, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8E,
- 0x11, 0x00, 0x58, 0x4D, 0x4C, 0x53, 0x6F, 0x63, 0x6B, 0x65, 0x74, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x8E, 0x14, 0x00, 0x53, 0x68, 0x61, 0x72, 0x65, 0x64, 0x4F, 0x62, 0x6A, 0x65,
- 0x63, 0x74, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8E, 0x1B, 0x00, 0x41, 0x73, 0x53,
- 0x65, 0x74, 0x75, 0x70, 0x45, 0x72, 0x72, 0x6F, 0x72, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x6E, 0x61, 0x6D, 0x65, 0x73, 0x00, 0x5F, 0x00, 0x96, 0x0D, 0x00, 0x09, 0xE6, 0x01, 0x09, 0x92,
- 0x01, 0x07, 0x01, 0x00, 0x00, 0x00, 0x08, 0xC7, 0x1C, 0x96, 0x03, 0x00, 0x09, 0xE5, 0x01, 0x52,
- 0x96, 0x02, 0x00, 0x08, 0x19, 0x4E, 0x3C, 0x96, 0x07, 0x00, 0x08, 0x18, 0x07, 0x00, 0x00, 0x00,
- 0x00, 0x3C, 0x99, 0x02, 0x00, 0x09, 0x00, 0x96, 0x02, 0x00, 0x08, 0x18, 0x4C, 0x1C, 0x50, 0x1D,
- 0x96, 0x02, 0x00, 0x08, 0x18, 0x1C, 0x96, 0x03, 0x00, 0x09, 0xE6, 0x01, 0x1C, 0x48, 0x12, 0x9D,
- 0x02, 0x00, 0x13, 0x00, 0x96, 0x09, 0x00, 0x08, 0xC6, 0x07, 0x00, 0x00, 0x00, 0x00, 0x08, 0x0C,
- 0x40, 0x3C, 0x99, 0x02, 0x00, 0xD0, 0xFF, 0x8E, 0x16, 0x00, 0x52, 0x65, 0x6D, 0x6F, 0x74, 0x65,
- 0x4C, 0x53, 0x4F, 0x55, 0x73, 0x61, 0x67, 0x65, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x96, 0x13, 0x00, 0x08, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 0x07, 0x01, 0x00, 0x00, 0x00, 0x07,
- 0x02, 0x00, 0x00, 0x00, 0x08, 0x01, 0x3D, 0x1D, 0x96, 0x13, 0x00, 0x08, 0x02, 0x07, 0x00, 0x00,
- 0x00, 0x00, 0x07, 0x04, 0x00, 0x00, 0x00, 0x07, 0x02, 0x00, 0x00, 0x00, 0x08, 0x01, 0x3D, 0x1D,
- 0x96, 0x13, 0x00, 0x08, 0x03, 0x07, 0x01, 0x00, 0x00, 0x00, 0x07, 0x04, 0x00, 0x00, 0x00, 0x07,
- 0x02, 0x00, 0x00, 0x00, 0x08, 0x01, 0x3D, 0x1D, 0x96, 0x07, 0x00, 0x08, 0x04, 0x07, 0x00, 0x00,
- 0x00, 0x00, 0x43, 0x1D, 0x96, 0x02, 0x00, 0x08, 0x05, 0x1C, 0x96, 0x13, 0x00, 0x08, 0x06, 0x07,
- 0x08, 0x00, 0x00, 0x00, 0x07, 0x65, 0x00, 0x00, 0x00, 0x07, 0x02, 0x00, 0x00, 0x00, 0x08, 0x01,
- 0x3D, 0x4F, 0x96, 0x08, 0x00, 0x07, 0x07, 0x00, 0x00, 0x00, 0x02, 0x08, 0x05, 0x1C, 0x96, 0x07,
- 0x00, 0x07, 0x03, 0x00, 0x00, 0x00, 0x08, 0x00, 0x3D, 0x17, 0x96, 0x0E, 0x00, 0x07, 0x80, 0x00,
- 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 0x08, 0x07, 0x08, 0x05, 0x1C, 0x96, 0x07, 0x00, 0x07,
- 0x04, 0x00, 0x00, 0x00, 0x08, 0x00, 0x3D, 0x17, 0x96, 0x02, 0x00, 0x08, 0x0C, 0x1C, 0x96, 0x02,
- 0x00, 0x08, 0x0D, 0x4E, 0x96, 0x04, 0x00, 0x08, 0x0E, 0x08, 0x0C, 0x1C, 0x96, 0x02, 0x00, 0x08,
- 0x0D, 0x4E, 0x96, 0x04, 0x00, 0x08, 0x0B, 0x08, 0x0C, 0x87, 0x01, 0x00, 0x00, 0x4F, 0x96, 0x02,
- 0x00, 0x04, 0x00, 0x4F, 0x96, 0x02, 0x00, 0x08, 0x0C, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x0D, 0x4E,
- 0x96, 0x02, 0x00, 0x08, 0x0F, 0x8E, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0D, 0x00,
- 0x96, 0x02, 0x00, 0x08, 0x0A, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x0B, 0x4E, 0x3E, 0x4F, 0x96, 0x02,
- 0x00, 0x08, 0x10, 0x1C, 0x96, 0x13, 0x00, 0x08, 0x11, 0x07, 0x0C, 0x00, 0x00, 0x00, 0x07, 0x65,
- 0x00, 0x00, 0x00, 0x07, 0x02, 0x00, 0x00, 0x00, 0x08, 0x01, 0x3D, 0x4F, 0x96, 0x02, 0x00, 0x08,
- 0x10, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x12, 0x8E, 0x0B, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x78, 0x00, 0x3C, 0x00, 0x96, 0x02, 0x00, 0x08, 0x13, 0x1C, 0x96, 0x07, 0x00, 0x07, 0x01,
- 0x00, 0x00, 0x00, 0x08, 0x0A, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x14, 0x52, 0x17, 0x96, 0x02, 0x00,
- 0x08, 0x13, 0x1C, 0x96, 0x07, 0x00, 0x07, 0x01, 0x00, 0x00, 0x00, 0x08, 0x0A, 0x1C, 0x96, 0x02,
- 0x00, 0x08, 0x15, 0x4E, 0x96, 0x02, 0x00, 0x08, 0x16, 0x52, 0x17, 0x96, 0x02, 0x00, 0x05, 0x01,
- 0x3E, 0x4F, 0x96, 0x02, 0x00, 0x08, 0x10, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x14, 0x8E, 0x0B, 0x00,
- 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x78, 0x00, 0x8F, 0x00, 0x96, 0x04, 0x00, 0x08, 0x17,
- 0x08, 0x0A, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x15, 0x4E, 0x3C, 0x96, 0x02, 0x00, 0x08, 0x18, 0x41,
- 0x96, 0x07, 0x00, 0x08, 0x18, 0x07, 0x00, 0x00, 0x00, 0x00, 0x3C, 0x99, 0x02, 0x00, 0x09, 0x00,
- 0x96, 0x02, 0x00, 0x08, 0x18, 0x4C, 0x1C, 0x50, 0x1D, 0x96, 0x02, 0x00, 0x08, 0x18, 0x1C, 0x96,
- 0x02, 0x00, 0x08, 0x17, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x19, 0x4E, 0x48, 0x12, 0x9D, 0x02, 0x00,
- 0x42, 0x00, 0x96, 0x02, 0x00, 0x08, 0x17, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x18, 0x1C, 0x4E, 0x96,
- 0x02, 0x00, 0x08, 0x13, 0x1C, 0x49, 0x12, 0x9D, 0x02, 0x00, 0x23, 0x00, 0x96, 0x07, 0x00, 0x07,
- 0x01, 0x00, 0x00, 0x00, 0x08, 0x18, 0x1C, 0x96, 0x07, 0x00, 0x07, 0x02, 0x00, 0x00, 0x00, 0x08,
- 0x17, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x1A, 0x52, 0x17, 0x96, 0x02, 0x00, 0x05, 0x01, 0x3E, 0x99,
- 0x02, 0x00, 0x9C, 0xFF, 0x96, 0x02, 0x00, 0x05, 0x00, 0x3E, 0x4F, 0x96, 0x02, 0x00, 0x08, 0x10,
- 0x1C, 0x96, 0x02, 0x00, 0x08, 0x1B, 0x8E, 0x0B, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x6F, 0x00, 0x73, 0x00, 0x96, 0x02, 0x00, 0x08, 0x1C, 0x1C, 0x96, 0x13, 0x00, 0x08, 0x11, 0x07,
- 0x0C, 0x00, 0x00, 0x00, 0x07, 0x65, 0x00, 0x00, 0x00, 0x07, 0x02, 0x00, 0x00, 0x00, 0x08, 0x01,
- 0x3D, 0x4F, 0x96, 0x02, 0x00, 0x08, 0x1C, 0x1C, 0x96, 0x04, 0x00, 0x08, 0x12, 0x08, 0x10, 0x1C,
- 0x96, 0x02, 0x00, 0x08, 0x12, 0x4E, 0x4F, 0x96, 0x02, 0x00, 0x08, 0x1C, 0x1C, 0x96, 0x04, 0x00,
- 0x08, 0x14, 0x08, 0x10, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x14, 0x4E, 0x4F, 0x96, 0x02, 0x00, 0x08,
- 0x1C, 0x1C, 0x96, 0x07, 0x00, 0x08, 0x15, 0x07, 0x00, 0x00, 0x00, 0x00, 0x42, 0x4F, 0x96, 0x09,
- 0x00, 0x07, 0x83, 0x00, 0x00, 0x00, 0x08, 0x1D, 0x08, 0x1C, 0x1C, 0x96, 0x07, 0x00, 0x07, 0x03,
- 0x00, 0x00, 0x00, 0x08, 0x00, 0x3D, 0x17, 0x4F, 0x96, 0x8C, 0x00, 0x08, 0x1E, 0x08, 0x1F, 0x07,
- 0x12, 0x00, 0x00, 0x00, 0x08, 0x20, 0x07, 0x08, 0x00, 0x00, 0x00, 0x08, 0x21, 0x07, 0x14, 0x00,
- 0x00, 0x00, 0x08, 0x22, 0x07, 0x11, 0x00, 0x00, 0x00, 0x08, 0x23, 0x07, 0x2E, 0x00, 0x00, 0x00,
- 0x08, 0x24, 0x07, 0x28, 0x00, 0x00, 0x00, 0x08, 0x25, 0x07, 0x23, 0x00, 0x00, 0x00, 0x08, 0x26,
- 0x07, 0x0D, 0x00, 0x00, 0x00, 0x08, 0x27, 0x07, 0x1B, 0x00, 0x00, 0x00, 0x08, 0x28, 0x07, 0x24,
- 0x00, 0x00, 0x00, 0x08, 0x29, 0x07, 0x2D, 0x00, 0x00, 0x00, 0x08, 0x2A, 0x07, 0x25, 0x00, 0x00,
- 0x00, 0x08, 0x2B, 0x07, 0x22, 0x00, 0x00, 0x00, 0x08, 0x2C, 0x07, 0x21, 0x00, 0x00, 0x00, 0x08,
- 0x2D, 0x07, 0x27, 0x00, 0x00, 0x00, 0x08, 0x2E, 0x07, 0x10, 0x00, 0x00, 0x00, 0x08, 0x2F, 0x07,
- 0x20, 0x00, 0x00, 0x00, 0x08, 0x30, 0x07, 0x09, 0x00, 0x00, 0x00, 0x08, 0x31, 0x07, 0x26, 0x00,
- 0x00, 0x00, 0x07, 0x13, 0x00, 0x00, 0x00, 0x43, 0x1D, 0x96, 0x09, 0x00, 0x08, 0x32, 0x07, 0x20,
- 0x03, 0x00, 0x00, 0x08, 0x1E, 0x1C, 0x96, 0x07, 0x00, 0x07, 0x03, 0x00, 0x00, 0x00, 0x08, 0x02,
- 0x3D, 0x17, 0x96, 0x02, 0x00, 0x08, 0x1E, 0x1C, 0x96, 0x07, 0x00, 0x07, 0x01, 0x00, 0x00, 0x00,
- 0x08, 0x10, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x1B, 0x52, 0x17, 0x96, 0x08, 0x00, 0x07, 0x07, 0x00,
- 0x00, 0x00, 0x02, 0x08, 0x1E, 0x1C, 0x96, 0x07, 0x00, 0x07, 0x03, 0x00, 0x00, 0x00, 0x08, 0x00,
- 0x3D, 0x17, 0x96, 0x07, 0x00, 0x08, 0x33, 0x07, 0x00, 0x00, 0x00, 0x00, 0x43, 0x1D, 0x96, 0x02,
- 0x00, 0x08, 0x33, 0x1C, 0x96, 0x13, 0x00, 0x08, 0x34, 0x07, 0x00, 0x00, 0x00, 0x00, 0x07, 0x05,
- 0x00, 0x00, 0x00, 0x07, 0x02, 0x00, 0x00, 0x00, 0x08, 0x01, 0x3D, 0x4F, 0x96, 0x02, 0x00, 0x08,
- 0x33, 0x1C, 0x96, 0x13, 0x00, 0x08, 0x35, 0x07, 0x01, 0x00, 0x00, 0x00, 0x07, 0x05, 0x00, 0x00,
- 0x00, 0x07, 0x02, 0x00, 0x00, 0x00, 0x08, 0x01, 0x3D, 0x4F, 0x96, 0x02, 0x00, 0x08, 0x33, 0x1C,
- 0x96, 0x07, 0x00, 0x07, 0x01, 0x00, 0x00, 0x00, 0x08, 0x10, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x1B,
- 0x52, 0x17, 0x96, 0x08, 0x00, 0x07, 0x07, 0x00, 0x00, 0x00, 0x02, 0x08, 0x33, 0x1C, 0x96, 0x07,
- 0x00, 0x07, 0x03, 0x00, 0x00, 0x00, 0x08, 0x00, 0x3D, 0x17, 0x96, 0x07, 0x00, 0x08, 0x36, 0x07,
- 0x00, 0x00, 0x00, 0x00, 0x43, 0x1D, 0x96, 0x02, 0x00, 0x08, 0x36, 0x1C, 0x96, 0x07, 0x00, 0x07,
- 0x01, 0x00, 0x00, 0x00, 0x08, 0x10, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x1B, 0x52, 0x17, 0x96, 0x0E,
- 0x00, 0x07, 0x01, 0x00, 0x00, 0x00, 0x08, 0x37, 0x07, 0x9A, 0x02, 0x00, 0x00, 0x08, 0x36, 0x1C,
- 0x96, 0x07, 0x00, 0x07, 0x04, 0x00, 0x00, 0x00, 0x08, 0x03, 0x3D, 0x17, 0x96, 0x13, 0x00, 0x08,
- 0x38, 0x07, 0xC8, 0x00, 0x00, 0x00, 0x07, 0x34, 0x08, 0x00, 0x00, 0x07, 0x02, 0x00, 0x00, 0x00,
- 0x08, 0x39, 0x3D, 0x1D, 0x96, 0x09, 0x00, 0x08, 0x3A, 0x07, 0x34, 0x08, 0x00, 0x00, 0x08, 0x38,
- 0x1C, 0x96, 0x02, 0x00, 0x08, 0x0D, 0x4E, 0x96, 0x07, 0x00, 0x07, 0x03, 0x00, 0x00, 0x00, 0x08,
- 0x02, 0x3D, 0x17, 0x96, 0x12, 0x00, 0x02, 0x07, 0x04, 0x00, 0x00, 0x00, 0x07, 0x34, 0x08, 0x00,
- 0x00, 0x07, 0x02, 0x00, 0x00, 0x00, 0x08, 0x01, 0x3D, 0x96, 0x09, 0x00, 0x08, 0x3B, 0x07, 0x03,
+ 0x6A, 0x65, 0x63, 0x74, 0x2E, 0x67, 0x65, 0x74, 0x4C, 0x6F, 0x63, 0x61, 0x6C, 0x20, 0x28, 0x73,
+ 0x74, 0x61, 0x74, 0x69, 0x63, 0x29, 0x00, 0x67, 0x65, 0x74, 0x52, 0x65, 0x6D, 0x6F, 0x74, 0x65,
+ 0x00, 0x49, 0x6D, 0x70, 0x6C, 0x65, 0x6D, 0x65, 0x6E, 0x74, 0x20, 0x53, 0x68, 0x61, 0x72, 0x65,
+ 0x64, 0x4F, 0x62, 0x6A, 0x65, 0x63, 0x74, 0x2E, 0x67, 0x65, 0x74, 0x52, 0x65, 0x6D, 0x6F, 0x74,
+ 0x65, 0x20, 0x28, 0x73, 0x74, 0x61, 0x74, 0x69, 0x63, 0x29, 0x00, 0x64, 0x65, 0x6C, 0x65, 0x74,
+ 0x65, 0x41, 0x6C, 0x6C, 0x2C, 0x67, 0x65, 0x74, 0x44, 0x69, 0x73, 0x6B, 0x55, 0x73, 0x61, 0x67,
+ 0x65, 0x00, 0x36, 0x63, 0x6F, 0x6E, 0x6E, 0x65, 0x63, 0x74, 0x2C, 0x36, 0x73, 0x65, 0x6E, 0x64,
+ 0x2C, 0x36, 0x66, 0x6C, 0x75, 0x73, 0x68, 0x2C, 0x36, 0x63, 0x6C, 0x6F, 0x73, 0x65, 0x2C, 0x36,
+ 0x67, 0x65, 0x74, 0x53, 0x69, 0x7A, 0x65, 0x2C, 0x36, 0x73, 0x65, 0x74, 0x46, 0x70, 0x73, 0x2C,
+ 0x36, 0x63, 0x6C, 0x65, 0x61, 0x72, 0x00, 0x73, 0x70, 0x6C, 0x69, 0x74, 0x00, 0x63, 0x6F, 0x75,
+ 0x6E, 0x74, 0x00, 0x52, 0x65, 0x6D, 0x6F, 0x74, 0x65, 0x4C, 0x53, 0x4F, 0x55, 0x73, 0x61, 0x67,
+ 0x65, 0x00, 0x67, 0x65, 0x74, 0x55, 0x52, 0x4C, 0x50, 0x61, 0x67, 0x65, 0x53, 0x75, 0x70, 0x70,
+ 0x6F, 0x72, 0x74, 0x00, 0x49, 0x6D, 0x70, 0x6C, 0x65, 0x6D, 0x65, 0x6E, 0x74, 0x20, 0x52, 0x65,
+ 0x6D, 0x6F, 0x74, 0x65, 0x4C, 0x53, 0x4F, 0x55, 0x73, 0x61, 0x67, 0x65, 0x2E, 0x67, 0x65, 0x74,
+ 0x55, 0x52, 0x4C, 0x50, 0x61, 0x67, 0x65, 0x53, 0x75, 0x70, 0x70, 0x6F, 0x72, 0x74, 0x20, 0x28,
+ 0x73, 0x74, 0x61, 0x74, 0x69, 0x63, 0x29, 0x00, 0x42, 0x75, 0x74, 0x74, 0x6F, 0x6E, 0x00, 0x67,
+ 0x65, 0x74, 0x44, 0x65, 0x70, 0x74, 0x68, 0x00, 0x38, 0x73, 0x63, 0x61, 0x6C, 0x65, 0x39, 0x47,
+ 0x72, 0x69, 0x64, 0x2C, 0x38, 0x66, 0x69, 0x6C, 0x74, 0x65, 0x72, 0x73, 0x2C, 0x38, 0x63, 0x61,
+ 0x63, 0x68, 0x65, 0x41, 0x73, 0x42, 0x69, 0x74, 0x6D, 0x61, 0x70, 0x2C, 0x38, 0x62, 0x6C, 0x65,
+ 0x6E, 0x64, 0x4D, 0x6F, 0x64, 0x65, 0x00, 0x66, 0x69, 0x6C, 0x74, 0x65, 0x72, 0x73, 0x00, 0x42,
+ 0x69, 0x74, 0x6D, 0x61, 0x70, 0x46, 0x69, 0x6C, 0x74, 0x65, 0x72, 0x00, 0x38, 0x63, 0x6C, 0x6F,
+ 0x6E, 0x65, 0x00, 0x42, 0x65, 0x76, 0x65, 0x6C, 0x46, 0x69, 0x6C, 0x74, 0x65, 0x72, 0x00, 0x38,
+ 0x64, 0x69, 0x73, 0x74, 0x61, 0x6E, 0x63, 0x65, 0x2C, 0x38, 0x61, 0x6E, 0x67, 0x6C, 0x65, 0x2C,
+ 0x38, 0x68, 0x69, 0x67, 0x68, 0x6C, 0x69, 0x67, 0x68, 0x74, 0x43, 0x6F, 0x6C, 0x6F, 0x72, 0x2C,
+ 0x38, 0x68, 0x69, 0x67, 0x68, 0x6C, 0x69, 0x67, 0x68, 0x74, 0x41, 0x6C, 0x70, 0x68, 0x61, 0x2C,
+ 0x38, 0x73, 0x68, 0x61, 0x64, 0x6F, 0x77, 0x43, 0x6F, 0x6C, 0x6F, 0x72, 0x2C, 0x38, 0x73, 0x68,
+ 0x61, 0x64, 0x6F, 0x77, 0x41, 0x6C, 0x70, 0x68, 0x61, 0x2C, 0x38, 0x71, 0x75, 0x61, 0x6C, 0x69,
+ 0x74, 0x79, 0x2C, 0x38, 0x73, 0x74, 0x72, 0x65, 0x6E, 0x67, 0x74, 0x68, 0x2C, 0x38, 0x6B, 0x6E,
+ 0x6F, 0x63, 0x6B, 0x6F, 0x75, 0x74, 0x2C, 0x38, 0x62, 0x6C, 0x75, 0x72, 0x58, 0x2C, 0x38, 0x62,
+ 0x6C, 0x75, 0x72, 0x59, 0x2C, 0x38, 0x74, 0x79, 0x70, 0x65, 0x00, 0x42, 0x6C, 0x75, 0x72, 0x46,
+ 0x69, 0x6C, 0x74, 0x65, 0x72, 0x00, 0x38, 0x62, 0x6C, 0x75, 0x72, 0x58, 0x2C, 0x38, 0x62, 0x6C,
+ 0x75, 0x72, 0x59, 0x2C, 0x38, 0x71, 0x75, 0x61, 0x6C, 0x69, 0x74, 0x79, 0x00, 0x43, 0x6F, 0x6C,
+ 0x6F, 0x72, 0x4D, 0x61, 0x74, 0x72, 0x69, 0x78, 0x46, 0x69, 0x6C, 0x74, 0x65, 0x72, 0x00, 0x38,
+ 0x6D, 0x61, 0x74, 0x72, 0x69, 0x78, 0x00, 0x43, 0x6F, 0x6E, 0x76, 0x6F, 0x6C, 0x75, 0x74, 0x69,
+ 0x6F, 0x6E, 0x46, 0x69, 0x6C, 0x74, 0x65, 0x72, 0x00, 0x38, 0x6D, 0x61, 0x74, 0x72, 0x69, 0x78,
+ 0x58, 0x2C, 0x38, 0x6D, 0x61, 0x74, 0x72, 0x69, 0x78, 0x59, 0x2C, 0x38, 0x6D, 0x61, 0x74, 0x72,
+ 0x69, 0x78, 0x2C, 0x38, 0x64, 0x69, 0x76, 0x69, 0x73, 0x6F, 0x72, 0x2C, 0x38, 0x62, 0x69, 0x61,
+ 0x73, 0x2C, 0x38, 0x70, 0x72, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x41, 0x6C, 0x70, 0x68, 0x61,
+ 0x2C, 0x38, 0x63, 0x6C, 0x61, 0x6D, 0x70, 0x2C, 0x38, 0x63, 0x6F, 0x6C, 0x6F, 0x72, 0x2C, 0x38,
+ 0x61, 0x6C, 0x70, 0x68, 0x61, 0x00, 0x44, 0x69, 0x73, 0x70, 0x6C, 0x61, 0x63, 0x65, 0x6D, 0x65,
+ 0x6E, 0x74, 0x4D, 0x61, 0x70, 0x46, 0x69, 0x6C, 0x74, 0x65, 0x72, 0x00, 0x38, 0x6D, 0x61, 0x70,
+ 0x42, 0x69, 0x74, 0x6D, 0x61, 0x70, 0x2C, 0x38, 0x6D, 0x61, 0x70, 0x50, 0x6F, 0x69, 0x6E, 0x74,
+ 0x2C, 0x38, 0x63, 0x6F, 0x6D, 0x70, 0x6F, 0x6E, 0x65, 0x6E, 0x74, 0x58, 0x2C, 0x38, 0x63, 0x6F,
+ 0x6D, 0x70, 0x6F, 0x6E, 0x65, 0x6E, 0x74, 0x59, 0x2C, 0x38, 0x73, 0x63, 0x61, 0x6C, 0x65, 0x58,
+ 0x2C, 0x38, 0x73, 0x63, 0x61, 0x6C, 0x65, 0x59, 0x2C, 0x38, 0x6D, 0x6F, 0x64, 0x65, 0x2C, 0x38,
+ 0x63, 0x6F, 0x6C, 0x6F, 0x72, 0x2C, 0x38, 0x61, 0x6C, 0x70, 0x68, 0x61, 0x00, 0x44, 0x72, 0x6F,
+ 0x70, 0x53, 0x68, 0x61, 0x64, 0x6F, 0x77, 0x46, 0x69, 0x6C, 0x74, 0x65, 0x72, 0x00, 0x38, 0x64,
+ 0x69, 0x73, 0x74, 0x61, 0x6E, 0x63, 0x65, 0x2C, 0x38, 0x61, 0x6E, 0x67, 0x6C, 0x65, 0x2C, 0x38,
+ 0x63, 0x6F, 0x6C, 0x6F, 0x72, 0x2C, 0x38, 0x61, 0x6C, 0x70, 0x68, 0x61, 0x2C, 0x38, 0x71, 0x75,
+ 0x61, 0x6C, 0x69, 0x74, 0x79, 0x2C, 0x38, 0x69, 0x6E, 0x6E, 0x65, 0x72, 0x2C, 0x38, 0x6B, 0x6E,
+ 0x6F, 0x63, 0x6B, 0x6F, 0x75, 0x74, 0x2C, 0x38, 0x62, 0x6C, 0x75, 0x72, 0x58, 0x2C, 0x38, 0x62,
+ 0x6C, 0x75, 0x72, 0x59, 0x2C, 0x38, 0x73, 0x74, 0x72, 0x65, 0x6E, 0x67, 0x74, 0x68, 0x2C, 0x38,
+ 0x68, 0x69, 0x64, 0x65, 0x4F, 0x62, 0x6A, 0x65, 0x63, 0x74, 0x00, 0x47, 0x6C, 0x6F, 0x77, 0x46,
+ 0x69, 0x6C, 0x74, 0x65, 0x72, 0x00, 0x38, 0x63, 0x6F, 0x6C, 0x6F, 0x72, 0x2C, 0x38, 0x61, 0x6C,
+ 0x70, 0x68, 0x61, 0x2C, 0x38, 0x71, 0x75, 0x61, 0x6C, 0x69, 0x74, 0x79, 0x2C, 0x38, 0x69, 0x6E,
+ 0x6E, 0x65, 0x72, 0x2C, 0x38, 0x6B, 0x6E, 0x6F, 0x63, 0x6B, 0x6F, 0x75, 0x74, 0x2C, 0x38, 0x62,
+ 0x6C, 0x75, 0x72, 0x58, 0x2C, 0x38, 0x62, 0x6C, 0x75, 0x72, 0x59, 0x2C, 0x38, 0x73, 0x74, 0x72,
+ 0x65, 0x6E, 0x67, 0x74, 0x68, 0x00, 0x47, 0x72, 0x61, 0x64, 0x69, 0x65, 0x6E, 0x74, 0x42, 0x65,
+ 0x76, 0x65, 0x6C, 0x46, 0x69, 0x6C, 0x74, 0x65, 0x72, 0x00, 0x38, 0x64, 0x69, 0x73, 0x74, 0x61,
+ 0x6E, 0x63, 0x65, 0x2C, 0x38, 0x61, 0x6E, 0x67, 0x6C, 0x65, 0x2C, 0x38, 0x63, 0x6F, 0x6C, 0x6F,
+ 0x72, 0x73, 0x2C, 0x38, 0x61, 0x6C, 0x70, 0x68, 0x61, 0x73, 0x2C, 0x38, 0x72, 0x61, 0x74, 0x69,
+ 0x6F, 0x73, 0x2C, 0x38, 0x62, 0x6C, 0x75, 0x72, 0x58, 0x2C, 0x38, 0x62, 0x6C, 0x75, 0x72, 0x59,
+ 0x2C, 0x38, 0x71, 0x75, 0x61, 0x6C, 0x69, 0x74, 0x79, 0x2C, 0x38, 0x73, 0x74, 0x72, 0x65, 0x6E,
+ 0x67, 0x74, 0x68, 0x2C, 0x38, 0x6B, 0x6E, 0x6F, 0x63, 0x6B, 0x6F, 0x75, 0x74, 0x2C, 0x38, 0x74,
+ 0x79, 0x70, 0x65, 0x00, 0x47, 0x72, 0x61, 0x64, 0x69, 0x65, 0x6E, 0x74, 0x47, 0x6C, 0x6F, 0x77,
+ 0x46, 0x69, 0x6C, 0x74, 0x65, 0x72, 0x00, 0x73, 0x65, 0x74, 0x49, 0x6E, 0x74, 0x65, 0x72, 0x76,
+ 0x61, 0x6C, 0x00, 0x63, 0x6C, 0x65, 0x61, 0x72, 0x49, 0x6E, 0x74, 0x65, 0x72, 0x76, 0x61, 0x6C,
+ 0x00, 0x73, 0x65, 0x74, 0x54, 0x69, 0x6D, 0x65, 0x6F, 0x75, 0x74, 0x00, 0x63, 0x6C, 0x65, 0x61,
+ 0x72, 0x54, 0x69, 0x6D, 0x65, 0x6F, 0x75, 0x74, 0x00, 0x73, 0x68, 0x6F, 0x77, 0x52, 0x65, 0x64,
+ 0x72, 0x61, 0x77, 0x52, 0x65, 0x67, 0x69, 0x6F, 0x6E, 0x73, 0x00, 0x74, 0x72, 0x61, 0x63, 0x65,
+ 0x00, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x41, 0x66, 0x74, 0x65, 0x72, 0x45, 0x76, 0x65, 0x6E,
+ 0x74, 0x00, 0x8E, 0x12, 0x00, 0x45, 0x72, 0x72, 0x6F, 0x72, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x6D, 0x73, 0x67, 0x00, 0x23, 0x00, 0x96, 0x02, 0x00, 0x08, 0x08, 0x1C, 0x44, 0x96, 0x02,
+ 0x00, 0x08, 0x09, 0x49, 0x12, 0x12, 0x9D, 0x02, 0x00, 0x0F, 0x00, 0x96, 0x02, 0x00, 0x08, 0x0A,
+ 0x1C, 0x96, 0x04, 0x00, 0x08, 0x0B, 0x08, 0x08, 0x1C, 0x4F, 0x8E, 0x15, 0x00, 0x41, 0x73, 0x42,
+ 0x72, 0x6F, 0x61, 0x64, 0x63, 0x61, 0x73, 0x74, 0x65, 0x72, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x8E, 0x10, 0x00, 0x4C, 0x6F, 0x61, 0x64, 0x56, 0x61, 0x72, 0x73, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x8E, 0x0E, 0x00, 0x43, 0x61, 0x6D, 0x65, 0x72, 0x61, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8E, 0x1D, 0x00, 0x43, 0x6F, 0x6E, 0x74, 0x65, 0x78, 0x74,
+ 0x4D, 0x65, 0x6E, 0x75, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x63, 0x61, 0x6C, 0x6C, 0x62,
+ 0x61, 0x63, 0x6B, 0x00, 0x58, 0x00, 0x96, 0x02, 0x00, 0x08, 0x0A, 0x1C, 0x96, 0x04, 0x00, 0x08,
+ 0xF6, 0x08, 0xF7, 0x1C, 0x4F, 0x96, 0x02, 0x00, 0x08, 0x0A, 0x1C, 0x96, 0x09, 0x00, 0x08, 0xF8,
+ 0x07, 0x00, 0x00, 0x00, 0x00, 0x08, 0xF9, 0x40, 0x4F, 0x96, 0x02, 0x00, 0x08, 0x0A, 0x1C, 0x96,
+ 0x2A, 0x00, 0x08, 0xFA, 0x08, 0xFB, 0x05, 0x01, 0x08, 0xFC, 0x05, 0x01, 0x08, 0xFD, 0x05, 0x01,
+ 0x08, 0xFE, 0x05, 0x01, 0x08, 0xFF, 0x05, 0x01, 0x09, 0x00, 0x01, 0x05, 0x01, 0x09, 0x01, 0x01,
+ 0x05, 0x01, 0x09, 0x02, 0x01, 0x05, 0x01, 0x07, 0x08, 0x00, 0x00, 0x00, 0x43, 0x4F, 0x8E, 0x4D,
+ 0x00, 0x43, 0x6F, 0x6E, 0x74, 0x65, 0x78, 0x74, 0x4D, 0x65, 0x6E, 0x75, 0x49, 0x74, 0x65, 0x6D,
+ 0x00, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x63, 0x61, 0x70, 0x74, 0x69, 0x6F, 0x6E, 0x00, 0x00,
+ 0x63, 0x61, 0x6C, 0x6C, 0x62, 0x61, 0x63, 0x6B, 0x00, 0x00, 0x73, 0x65, 0x70, 0x61, 0x72, 0x61,
+ 0x74, 0x6F, 0x72, 0x42, 0x65, 0x66, 0x6F, 0x72, 0x65, 0x00, 0x00, 0x65, 0x6E, 0x61, 0x62, 0x6C,
+ 0x65, 0x64, 0x00, 0x00, 0x76, 0x69, 0x73, 0x69, 0x62, 0x6C, 0x65, 0x00, 0xBE, 0x00, 0x96, 0x02,
+ 0x00, 0x08, 0x0A, 0x1C, 0x96, 0x06, 0x00, 0x09, 0x06, 0x01, 0x09, 0x06, 0x01, 0x1C, 0x4F, 0x96,
+ 0x02, 0x00, 0x08, 0x0A, 0x1C, 0x96, 0x04, 0x00, 0x08, 0xF6, 0x08, 0xF7, 0x1C, 0x4F, 0x96, 0x03,
+ 0x00, 0x09, 0x07, 0x01, 0x1C, 0x96, 0x01, 0x00, 0x03, 0x49, 0x9D, 0x02, 0x00, 0x16, 0x00, 0x96,
+ 0x02, 0x00, 0x08, 0x0A, 0x1C, 0x96, 0x06, 0x00, 0x09, 0x07, 0x01, 0x09, 0x07, 0x01, 0x1C, 0x4F,
+ 0x99, 0x02, 0x00, 0x0F, 0x00, 0x96, 0x02, 0x00, 0x08, 0x0A, 0x1C, 0x96, 0x05, 0x00, 0x09, 0x07,
+ 0x01, 0x05, 0x00, 0x4F, 0x96, 0x02, 0x00, 0x08, 0x98, 0x1C, 0x96, 0x01, 0x00, 0x03, 0x49, 0x9D,
+ 0x02, 0x00, 0x14, 0x00, 0x96, 0x02, 0x00, 0x08, 0x0A, 0x1C, 0x96, 0x04, 0x00, 0x08, 0x98, 0x08,
+ 0x98, 0x1C, 0x4F, 0x99, 0x02, 0x00, 0x0E, 0x00, 0x96, 0x02, 0x00, 0x08, 0x0A, 0x1C, 0x96, 0x04,
+ 0x00, 0x08, 0x98, 0x05, 0x01, 0x4F, 0x96, 0x03, 0x00, 0x09, 0x08, 0x01, 0x1C, 0x96, 0x01, 0x00,
+ 0x03, 0x49, 0x9D, 0x02, 0x00, 0x16, 0x00, 0x96, 0x02, 0x00, 0x08, 0x0A, 0x1C, 0x96, 0x06, 0x00,
+ 0x09, 0x08, 0x01, 0x09, 0x08, 0x01, 0x1C, 0x4F, 0x99, 0x02, 0x00, 0x0F, 0x00, 0x96, 0x02, 0x00,
+ 0x08, 0x0A, 0x1C, 0x96, 0x05, 0x00, 0x09, 0x08, 0x01, 0x05, 0x01, 0x4F, 0x8E, 0x17, 0x00, 0x4C,
+ 0x6F, 0x63, 0x61, 0x6C, 0x43, 0x6F, 0x6E, 0x6E, 0x65, 0x63, 0x74, 0x69, 0x6F, 0x6E, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8E, 0x12, 0x00, 0x4D, 0x69, 0x63, 0x72, 0x6F, 0x70, 0x68,
+ 0x6F, 0x6E, 0x65, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8E, 0x11, 0x00, 0x58, 0x4D,
+ 0x4C, 0x53, 0x6F, 0x63, 0x6B, 0x65, 0x74, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8E,
+ 0x14, 0x00, 0x53, 0x68, 0x61, 0x72, 0x65, 0x64, 0x4F, 0x62, 0x6A, 0x65, 0x63, 0x74, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8E, 0x1B, 0x00, 0x41, 0x73, 0x53, 0x65, 0x74, 0x75, 0x70,
+ 0x45, 0x72, 0x72, 0x6F, 0x72, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6E, 0x61, 0x6D, 0x65,
+ 0x73, 0x00, 0x5F, 0x00, 0x96, 0x0D, 0x00, 0x09, 0xE8, 0x01, 0x09, 0x94, 0x01, 0x07, 0x01, 0x00,
+ 0x00, 0x00, 0x08, 0xC7, 0x1C, 0x96, 0x03, 0x00, 0x09, 0xE7, 0x01, 0x52, 0x96, 0x02, 0x00, 0x08,
+ 0x19, 0x4E, 0x3C, 0x96, 0x07, 0x00, 0x08, 0x18, 0x07, 0x00, 0x00, 0x00, 0x00, 0x3C, 0x99, 0x02,
+ 0x00, 0x09, 0x00, 0x96, 0x02, 0x00, 0x08, 0x18, 0x4C, 0x1C, 0x50, 0x1D, 0x96, 0x02, 0x00, 0x08,
+ 0x18, 0x1C, 0x96, 0x03, 0x00, 0x09, 0xE8, 0x01, 0x1C, 0x48, 0x12, 0x9D, 0x02, 0x00, 0x13, 0x00,
+ 0x96, 0x09, 0x00, 0x08, 0xC6, 0x07, 0x00, 0x00, 0x00, 0x00, 0x08, 0x0C, 0x40, 0x3C, 0x99, 0x02,
+ 0x00, 0xD0, 0xFF, 0x8E, 0x16, 0x00, 0x52, 0x65, 0x6D, 0x6F, 0x74, 0x65, 0x4C, 0x53, 0x4F, 0x55,
+ 0x73, 0x61, 0x67, 0x65, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x96, 0x13, 0x00, 0x08,
+ 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 0x07, 0x01, 0x00, 0x00, 0x00, 0x07, 0x02, 0x00, 0x00, 0x00,
+ 0x08, 0x01, 0x3D, 0x1D, 0x96, 0x13, 0x00, 0x08, 0x02, 0x07, 0x00, 0x00, 0x00, 0x00, 0x07, 0x04,
+ 0x00, 0x00, 0x00, 0x07, 0x02, 0x00, 0x00, 0x00, 0x08, 0x01, 0x3D, 0x1D, 0x96, 0x13, 0x00, 0x08,
+ 0x03, 0x07, 0x01, 0x00, 0x00, 0x00, 0x07, 0x04, 0x00, 0x00, 0x00, 0x07, 0x02, 0x00, 0x00, 0x00,
+ 0x08, 0x01, 0x3D, 0x1D, 0x96, 0x07, 0x00, 0x08, 0x04, 0x07, 0x00, 0x00, 0x00, 0x00, 0x43, 0x1D,
+ 0x96, 0x02, 0x00, 0x08, 0x05, 0x1C, 0x96, 0x13, 0x00, 0x08, 0x06, 0x07, 0x08, 0x00, 0x00, 0x00,
+ 0x07, 0x65, 0x00, 0x00, 0x00, 0x07, 0x02, 0x00, 0x00, 0x00, 0x08, 0x01, 0x3D, 0x4F, 0x96, 0x08,
+ 0x00, 0x07, 0x07, 0x00, 0x00, 0x00, 0x02, 0x08, 0x05, 0x1C, 0x96, 0x07, 0x00, 0x07, 0x03, 0x00,
+ 0x00, 0x00, 0x08, 0x00, 0x3D, 0x17, 0x96, 0x0E, 0x00, 0x07, 0x80, 0x00, 0x00, 0x00, 0x07, 0x00,
+ 0x00, 0x00, 0x00, 0x08, 0x07, 0x08, 0x05, 0x1C, 0x96, 0x07, 0x00, 0x07, 0x04, 0x00, 0x00, 0x00,
+ 0x08, 0x00, 0x3D, 0x17, 0x96, 0x02, 0x00, 0x08, 0x0C, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x0D, 0x4E,
+ 0x96, 0x04, 0x00, 0x08, 0x0E, 0x08, 0x0C, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x0D, 0x4E, 0x96, 0x04,
+ 0x00, 0x08, 0x0B, 0x08, 0x0C, 0x87, 0x01, 0x00, 0x00, 0x4F, 0x96, 0x02, 0x00, 0x04, 0x00, 0x4F,
+ 0x96, 0x02, 0x00, 0x08, 0x0C, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x0D, 0x4E, 0x96, 0x02, 0x00, 0x08,
+ 0x0F, 0x8E, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0D, 0x00, 0x96, 0x02, 0x00, 0x08,
+ 0x0A, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x0B, 0x4E, 0x3E, 0x4F, 0x96, 0x02, 0x00, 0x08, 0x10, 0x1C,
+ 0x96, 0x13, 0x00, 0x08, 0x11, 0x07, 0x0C, 0x00, 0x00, 0x00, 0x07, 0x65, 0x00, 0x00, 0x00, 0x07,
+ 0x02, 0x00, 0x00, 0x00, 0x08, 0x01, 0x3D, 0x4F, 0x96, 0x02, 0x00, 0x08, 0x10, 0x1C, 0x96, 0x02,
+ 0x00, 0x08, 0x12, 0x8E, 0x0B, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x78, 0x00, 0x3C,
+ 0x00, 0x96, 0x02, 0x00, 0x08, 0x13, 0x1C, 0x96, 0x07, 0x00, 0x07, 0x01, 0x00, 0x00, 0x00, 0x08,
+ 0x0A, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x14, 0x52, 0x17, 0x96, 0x02, 0x00, 0x08, 0x13, 0x1C, 0x96,
+ 0x07, 0x00, 0x07, 0x01, 0x00, 0x00, 0x00, 0x08, 0x0A, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x15, 0x4E,
+ 0x96, 0x02, 0x00, 0x08, 0x16, 0x52, 0x17, 0x96, 0x02, 0x00, 0x05, 0x01, 0x3E, 0x4F, 0x96, 0x02,
+ 0x00, 0x08, 0x10, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x14, 0x8E, 0x0B, 0x00, 0x00, 0x01, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x78, 0x00, 0x8F, 0x00, 0x96, 0x04, 0x00, 0x08, 0x17, 0x08, 0x0A, 0x1C, 0x96,
+ 0x02, 0x00, 0x08, 0x15, 0x4E, 0x3C, 0x96, 0x02, 0x00, 0x08, 0x18, 0x41, 0x96, 0x07, 0x00, 0x08,
+ 0x18, 0x07, 0x00, 0x00, 0x00, 0x00, 0x3C, 0x99, 0x02, 0x00, 0x09, 0x00, 0x96, 0x02, 0x00, 0x08,
+ 0x18, 0x4C, 0x1C, 0x50, 0x1D, 0x96, 0x02, 0x00, 0x08, 0x18, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x17,
+ 0x1C, 0x96, 0x02, 0x00, 0x08, 0x19, 0x4E, 0x48, 0x12, 0x9D, 0x02, 0x00, 0x42, 0x00, 0x96, 0x02,
+ 0x00, 0x08, 0x17, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x18, 0x1C, 0x4E, 0x96, 0x02, 0x00, 0x08, 0x13,
+ 0x1C, 0x49, 0x12, 0x9D, 0x02, 0x00, 0x23, 0x00, 0x96, 0x07, 0x00, 0x07, 0x01, 0x00, 0x00, 0x00,
+ 0x08, 0x18, 0x1C, 0x96, 0x07, 0x00, 0x07, 0x02, 0x00, 0x00, 0x00, 0x08, 0x17, 0x1C, 0x96, 0x02,
+ 0x00, 0x08, 0x1A, 0x52, 0x17, 0x96, 0x02, 0x00, 0x05, 0x01, 0x3E, 0x99, 0x02, 0x00, 0x9C, 0xFF,
+ 0x96, 0x02, 0x00, 0x05, 0x00, 0x3E, 0x4F, 0x96, 0x02, 0x00, 0x08, 0x10, 0x1C, 0x96, 0x02, 0x00,
+ 0x08, 0x1B, 0x8E, 0x0B, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6F, 0x00, 0x73, 0x00,
+ 0x96, 0x02, 0x00, 0x08, 0x1C, 0x1C, 0x96, 0x13, 0x00, 0x08, 0x11, 0x07, 0x0C, 0x00, 0x00, 0x00,
+ 0x07, 0x65, 0x00, 0x00, 0x00, 0x07, 0x02, 0x00, 0x00, 0x00, 0x08, 0x01, 0x3D, 0x4F, 0x96, 0x02,
+ 0x00, 0x08, 0x1C, 0x1C, 0x96, 0x04, 0x00, 0x08, 0x12, 0x08, 0x10, 0x1C, 0x96, 0x02, 0x00, 0x08,
+ 0x12, 0x4E, 0x4F, 0x96, 0x02, 0x00, 0x08, 0x1C, 0x1C, 0x96, 0x04, 0x00, 0x08, 0x14, 0x08, 0x10,
+ 0x1C, 0x96, 0x02, 0x00, 0x08, 0x14, 0x4E, 0x4F, 0x96, 0x02, 0x00, 0x08, 0x1C, 0x1C, 0x96, 0x07,
+ 0x00, 0x08, 0x15, 0x07, 0x00, 0x00, 0x00, 0x00, 0x42, 0x4F, 0x96, 0x09, 0x00, 0x07, 0x83, 0x00,
+ 0x00, 0x00, 0x08, 0x1D, 0x08, 0x1C, 0x1C, 0x96, 0x07, 0x00, 0x07, 0x03, 0x00, 0x00, 0x00, 0x08,
+ 0x00, 0x3D, 0x17, 0x4F, 0x96, 0x8C, 0x00, 0x08, 0x1E, 0x08, 0x1F, 0x07, 0x12, 0x00, 0x00, 0x00,
+ 0x08, 0x20, 0x07, 0x08, 0x00, 0x00, 0x00, 0x08, 0x21, 0x07, 0x14, 0x00, 0x00, 0x00, 0x08, 0x22,
+ 0x07, 0x11, 0x00, 0x00, 0x00, 0x08, 0x23, 0x07, 0x2E, 0x00, 0x00, 0x00, 0x08, 0x24, 0x07, 0x28,
+ 0x00, 0x00, 0x00, 0x08, 0x25, 0x07, 0x23, 0x00, 0x00, 0x00, 0x08, 0x26, 0x07, 0x0D, 0x00, 0x00,
+ 0x00, 0x08, 0x27, 0x07, 0x1B, 0x00, 0x00, 0x00, 0x08, 0x28, 0x07, 0x24, 0x00, 0x00, 0x00, 0x08,
+ 0x29, 0x07, 0x2D, 0x00, 0x00, 0x00, 0x08, 0x2A, 0x07, 0x25, 0x00, 0x00, 0x00, 0x08, 0x2B, 0x07,
+ 0x22, 0x00, 0x00, 0x00, 0x08, 0x2C, 0x07, 0x21, 0x00, 0x00, 0x00, 0x08, 0x2D, 0x07, 0x27, 0x00,
+ 0x00, 0x00, 0x08, 0x2E, 0x07, 0x10, 0x00, 0x00, 0x00, 0x08, 0x2F, 0x07, 0x20, 0x00, 0x00, 0x00,
+ 0x08, 0x30, 0x07, 0x09, 0x00, 0x00, 0x00, 0x08, 0x31, 0x07, 0x26, 0x00, 0x00, 0x00, 0x07, 0x13,
+ 0x00, 0x00, 0x00, 0x43, 0x1D, 0x96, 0x09, 0x00, 0x08, 0x32, 0x07, 0x20, 0x03, 0x00, 0x00, 0x08,
+ 0x1E, 0x1C, 0x96, 0x07, 0x00, 0x07, 0x03, 0x00, 0x00, 0x00, 0x08, 0x02, 0x3D, 0x17, 0x96, 0x02,
+ 0x00, 0x08, 0x1E, 0x1C, 0x96, 0x07, 0x00, 0x07, 0x01, 0x00, 0x00, 0x00, 0x08, 0x10, 0x1C, 0x96,
+ 0x02, 0x00, 0x08, 0x1B, 0x52, 0x17, 0x96, 0x08, 0x00, 0x07, 0x07, 0x00, 0x00, 0x00, 0x02, 0x08,
+ 0x1E, 0x1C, 0x96, 0x07, 0x00, 0x07, 0x03, 0x00, 0x00, 0x00, 0x08, 0x00, 0x3D, 0x17, 0x96, 0x07,
+ 0x00, 0x08, 0x33, 0x07, 0x00, 0x00, 0x00, 0x00, 0x43, 0x1D, 0x96, 0x02, 0x00, 0x08, 0x33, 0x1C,
+ 0x96, 0x13, 0x00, 0x08, 0x34, 0x07, 0x00, 0x00, 0x00, 0x00, 0x07, 0x05, 0x00, 0x00, 0x00, 0x07,
+ 0x02, 0x00, 0x00, 0x00, 0x08, 0x01, 0x3D, 0x4F, 0x96, 0x02, 0x00, 0x08, 0x33, 0x1C, 0x96, 0x13,
+ 0x00, 0x08, 0x35, 0x07, 0x01, 0x00, 0x00, 0x00, 0x07, 0x05, 0x00, 0x00, 0x00, 0x07, 0x02, 0x00,
+ 0x00, 0x00, 0x08, 0x01, 0x3D, 0x4F, 0x96, 0x02, 0x00, 0x08, 0x33, 0x1C, 0x96, 0x07, 0x00, 0x07,
+ 0x01, 0x00, 0x00, 0x00, 0x08, 0x10, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x1B, 0x52, 0x17, 0x96, 0x08,
+ 0x00, 0x07, 0x07, 0x00, 0x00, 0x00, 0x02, 0x08, 0x33, 0x1C, 0x96, 0x07, 0x00, 0x07, 0x03, 0x00,
+ 0x00, 0x00, 0x08, 0x00, 0x3D, 0x17, 0x96, 0x07, 0x00, 0x08, 0x36, 0x07, 0x00, 0x00, 0x00, 0x00,
+ 0x43, 0x1D, 0x96, 0x02, 0x00, 0x08, 0x36, 0x1C, 0x96, 0x07, 0x00, 0x07, 0x01, 0x00, 0x00, 0x00,
+ 0x08, 0x10, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x1B, 0x52, 0x17, 0x96, 0x0E, 0x00, 0x07, 0x01, 0x00,
+ 0x00, 0x00, 0x08, 0x37, 0x07, 0x9A, 0x02, 0x00, 0x00, 0x08, 0x36, 0x1C, 0x96, 0x07, 0x00, 0x07,
+ 0x04, 0x00, 0x00, 0x00, 0x08, 0x03, 0x3D, 0x17, 0x96, 0x13, 0x00, 0x08, 0x38, 0x07, 0xC8, 0x00,
+ 0x00, 0x00, 0x07, 0x34, 0x08, 0x00, 0x00, 0x07, 0x02, 0x00, 0x00, 0x00, 0x08, 0x39, 0x3D, 0x1D,
+ 0x96, 0x09, 0x00, 0x08, 0x3A, 0x07, 0x34, 0x08, 0x00, 0x00, 0x08, 0x38, 0x1C, 0x96, 0x02, 0x00,
+ 0x08, 0x0D, 0x4E, 0x96, 0x07, 0x00, 0x07, 0x03, 0x00, 0x00, 0x00, 0x08, 0x02, 0x3D, 0x17, 0x96,
+ 0x12, 0x00, 0x02, 0x07, 0x04, 0x00, 0x00, 0x00, 0x07, 0x34, 0x08, 0x00, 0x00, 0x07, 0x02, 0x00,
+ 0x00, 0x00, 0x08, 0x01, 0x3D, 0x96, 0x09, 0x00, 0x08, 0x3B, 0x07, 0x03, 0x00, 0x00, 0x00, 0x08,
+ 0x38, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x0D, 0x4E, 0x96, 0x02, 0x00, 0x08, 0x07, 0x52, 0x17, 0x96,
+ 0x02, 0x00, 0x08, 0x38, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x0D, 0x4E, 0x96, 0x04, 0x00, 0x08, 0x3C,
+ 0x08, 0x3D, 0x4F, 0x96, 0x12, 0x00, 0x02, 0x07, 0x05, 0x00, 0x00, 0x00, 0x07, 0x34, 0x08, 0x00,
+ 0x00, 0x07, 0x02, 0x00, 0x00, 0x00, 0x08, 0x01, 0x3D, 0x96, 0x09, 0x00, 0x08, 0x3E, 0x07, 0x03,
0x00, 0x00, 0x00, 0x08, 0x38, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x0D, 0x4E, 0x96, 0x02, 0x00, 0x08,
- 0x07, 0x52, 0x17, 0x96, 0x02, 0x00, 0x08, 0x38, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x0D, 0x4E, 0x96,
- 0x04, 0x00, 0x08, 0x3C, 0x08, 0x3D, 0x4F, 0x96, 0x12, 0x00, 0x02, 0x07, 0x05, 0x00, 0x00, 0x00,
- 0x07, 0x34, 0x08, 0x00, 0x00, 0x07, 0x02, 0x00, 0x00, 0x00, 0x08, 0x01, 0x3D, 0x96, 0x09, 0x00,
- 0x08, 0x3E, 0x07, 0x03, 0x00, 0x00, 0x00, 0x08, 0x38, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x0D, 0x4E,
- 0x96, 0x02, 0x00, 0x08, 0x07, 0x52, 0x17, 0x96, 0x08, 0x00, 0x07, 0x03, 0x00, 0x00, 0x00, 0x02,
- 0x08, 0x38, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x0D, 0x4E, 0x96, 0x07, 0x00, 0x07, 0x03, 0x00, 0x00,
- 0x00, 0x08, 0x00, 0x3D, 0x17, 0x96, 0x02, 0x00, 0x08, 0x3F, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x0D,
- 0x4E, 0x96, 0x02, 0x00, 0x08, 0x40, 0x8E, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1E,
- 0x00, 0x96, 0x07, 0x00, 0x08, 0x1C, 0x07, 0x00, 0x00, 0x00, 0x00, 0x43, 0x3C, 0x96, 0x07, 0x00,
- 0x07, 0x00, 0x00, 0x00, 0x00, 0x08, 0x1C, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x41, 0x52, 0x17, 0x4F,
- 0x96, 0x02, 0x00, 0x08, 0x3F, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x0D, 0x4E, 0x96, 0x02, 0x00, 0x08,
- 0x42, 0x8E, 0x0E, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x66, 0x6C, 0x61, 0x67, 0x00,
- 0x1E, 0x00, 0x96, 0x07, 0x00, 0x08, 0x1C, 0x07, 0x00, 0x00, 0x00, 0x00, 0x43, 0x3C, 0x96, 0x07,
- 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 0x08, 0x1C, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x43, 0x52, 0x17,
- 0x4F, 0x96, 0x02, 0x00, 0x08, 0x3F, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x0D, 0x4E, 0x96, 0x02, 0x00,
- 0x08, 0x44, 0x8E, 0x0E, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x66, 0x6C, 0x61, 0x67,
- 0x00, 0x1E, 0x00, 0x96, 0x07, 0x00, 0x08, 0x1C, 0x07, 0x00, 0x00, 0x00, 0x00, 0x43, 0x3C, 0x96,
- 0x07, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 0x08, 0x1C, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x45, 0x52,
- 0x17, 0x4F, 0x96, 0x09, 0x00, 0x08, 0x46, 0x07, 0x35, 0x08, 0x00, 0x00, 0x08, 0x3F, 0x1C, 0x96,
- 0x02, 0x00, 0x08, 0x0D, 0x4E, 0x96, 0x07, 0x00, 0x07, 0x03, 0x00, 0x00, 0x00, 0x08, 0x02, 0x3D,
- 0x17, 0x96, 0x0E, 0x00, 0x07, 0x05, 0x00, 0x00, 0x00, 0x08, 0x47, 0x07, 0x35, 0x08, 0x00, 0x00,
- 0x08, 0x3F, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x0D, 0x4E, 0x96, 0x07, 0x00, 0x07, 0x04, 0x00, 0x00,
- 0x00, 0x08, 0x03, 0x3D, 0x17, 0x96, 0x08, 0x00, 0x07, 0x03, 0x00, 0x00, 0x00, 0x02, 0x08, 0x3F,
- 0x1C, 0x96, 0x02, 0x00, 0x08, 0x0D, 0x4E, 0x96, 0x07, 0x00, 0x07, 0x03, 0x00, 0x00, 0x00, 0x08,
- 0x00, 0x3D, 0x17, 0x96, 0x02, 0x00, 0x08, 0x48, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x0D, 0x4E, 0x96,
- 0x04, 0x00, 0x08, 0x49, 0x08, 0x4A, 0x4F, 0x96, 0x02, 0x00, 0x08, 0x48, 0x1C, 0x96, 0x02, 0x00,
- 0x08, 0x0D, 0x4E, 0x96, 0x13, 0x00, 0x08, 0x4B, 0x07, 0x00, 0x00, 0x00, 0x00, 0x07, 0x2D, 0x01,
+ 0x07, 0x52, 0x17, 0x96, 0x08, 0x00, 0x07, 0x03, 0x00, 0x00, 0x00, 0x02, 0x08, 0x38, 0x1C, 0x96,
+ 0x02, 0x00, 0x08, 0x0D, 0x4E, 0x96, 0x07, 0x00, 0x07, 0x03, 0x00, 0x00, 0x00, 0x08, 0x00, 0x3D,
+ 0x17, 0x96, 0x02, 0x00, 0x08, 0x3F, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x0D, 0x4E, 0x96, 0x02, 0x00,
+ 0x08, 0x40, 0x8E, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1E, 0x00, 0x96, 0x07, 0x00,
+ 0x08, 0x1C, 0x07, 0x00, 0x00, 0x00, 0x00, 0x43, 0x3C, 0x96, 0x07, 0x00, 0x07, 0x00, 0x00, 0x00,
+ 0x00, 0x08, 0x1C, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x41, 0x52, 0x17, 0x4F, 0x96, 0x02, 0x00, 0x08,
+ 0x3F, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x0D, 0x4E, 0x96, 0x02, 0x00, 0x08, 0x42, 0x8E, 0x0E, 0x00,
+ 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x66, 0x6C, 0x61, 0x67, 0x00, 0x1E, 0x00, 0x96, 0x07,
+ 0x00, 0x08, 0x1C, 0x07, 0x00, 0x00, 0x00, 0x00, 0x43, 0x3C, 0x96, 0x07, 0x00, 0x07, 0x00, 0x00,
+ 0x00, 0x00, 0x08, 0x1C, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x43, 0x52, 0x17, 0x4F, 0x96, 0x02, 0x00,
+ 0x08, 0x3F, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x0D, 0x4E, 0x96, 0x02, 0x00, 0x08, 0x44, 0x8E, 0x0E,
+ 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x66, 0x6C, 0x61, 0x67, 0x00, 0x1E, 0x00, 0x96,
+ 0x07, 0x00, 0x08, 0x1C, 0x07, 0x00, 0x00, 0x00, 0x00, 0x43, 0x3C, 0x96, 0x07, 0x00, 0x07, 0x00,
+ 0x00, 0x00, 0x00, 0x08, 0x1C, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x45, 0x52, 0x17, 0x4F, 0x96, 0x09,
+ 0x00, 0x08, 0x46, 0x07, 0x35, 0x08, 0x00, 0x00, 0x08, 0x3F, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x0D,
+ 0x4E, 0x96, 0x07, 0x00, 0x07, 0x03, 0x00, 0x00, 0x00, 0x08, 0x02, 0x3D, 0x17, 0x96, 0x0E, 0x00,
+ 0x07, 0x05, 0x00, 0x00, 0x00, 0x08, 0x47, 0x07, 0x35, 0x08, 0x00, 0x00, 0x08, 0x3F, 0x1C, 0x96,
+ 0x02, 0x00, 0x08, 0x0D, 0x4E, 0x96, 0x07, 0x00, 0x07, 0x04, 0x00, 0x00, 0x00, 0x08, 0x03, 0x3D,
+ 0x17, 0x96, 0x08, 0x00, 0x07, 0x03, 0x00, 0x00, 0x00, 0x02, 0x08, 0x3F, 0x1C, 0x96, 0x02, 0x00,
+ 0x08, 0x0D, 0x4E, 0x96, 0x07, 0x00, 0x07, 0x03, 0x00, 0x00, 0x00, 0x08, 0x00, 0x3D, 0x17, 0x96,
+ 0x02, 0x00, 0x08, 0x48, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x0D, 0x4E, 0x96, 0x04, 0x00, 0x08, 0x49,
+ 0x08, 0x4A, 0x4F, 0x96, 0x02, 0x00, 0x08, 0x48, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x0D, 0x4E, 0x96,
+ 0x13, 0x00, 0x08, 0x4B, 0x07, 0x00, 0x00, 0x00, 0x00, 0x07, 0x2D, 0x01, 0x00, 0x00, 0x07, 0x02,
+ 0x00, 0x00, 0x00, 0x08, 0x01, 0x3D, 0x4F, 0x96, 0x02, 0x00, 0x08, 0x48, 0x1C, 0x96, 0x02, 0x00,
+ 0x08, 0x0D, 0x4E, 0x96, 0x13, 0x00, 0x08, 0x4C, 0x07, 0x01, 0x00, 0x00, 0x00, 0x07, 0x2D, 0x01,
0x00, 0x00, 0x07, 0x02, 0x00, 0x00, 0x00, 0x08, 0x01, 0x3D, 0x4F, 0x96, 0x02, 0x00, 0x08, 0x48,
- 0x1C, 0x96, 0x02, 0x00, 0x08, 0x0D, 0x4E, 0x96, 0x13, 0x00, 0x08, 0x4C, 0x07, 0x01, 0x00, 0x00,
+ 0x1C, 0x96, 0x02, 0x00, 0x08, 0x0D, 0x4E, 0x96, 0x13, 0x00, 0x08, 0x4D, 0x07, 0x02, 0x00, 0x00,
0x00, 0x07, 0x2D, 0x01, 0x00, 0x00, 0x07, 0x02, 0x00, 0x00, 0x00, 0x08, 0x01, 0x3D, 0x4F, 0x96,
- 0x02, 0x00, 0x08, 0x48, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x0D, 0x4E, 0x96, 0x13, 0x00, 0x08, 0x4D,
- 0x07, 0x02, 0x00, 0x00, 0x00, 0x07, 0x2D, 0x01, 0x00, 0x00, 0x07, 0x02, 0x00, 0x00, 0x00, 0x08,
+ 0x02, 0x00, 0x08, 0x48, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x0D, 0x4E, 0x96, 0x13, 0x00, 0x08, 0x4E,
+ 0x07, 0x03, 0x00, 0x00, 0x00, 0x07, 0x2D, 0x01, 0x00, 0x00, 0x07, 0x02, 0x00, 0x00, 0x00, 0x08,
0x01, 0x3D, 0x4F, 0x96, 0x02, 0x00, 0x08, 0x48, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x0D, 0x4E, 0x96,
- 0x13, 0x00, 0x08, 0x4E, 0x07, 0x03, 0x00, 0x00, 0x00, 0x07, 0x2D, 0x01, 0x00, 0x00, 0x07, 0x02,
- 0x00, 0x00, 0x00, 0x08, 0x01, 0x3D, 0x4F, 0x96, 0x02, 0x00, 0x08, 0x48, 0x1C, 0x96, 0x02, 0x00,
- 0x08, 0x0D, 0x4E, 0x96, 0x02, 0x00, 0x08, 0x4F, 0x8E, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x4F, 0x96, 0x02, 0x00, 0x08, 0x48, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x0D, 0x4E,
- 0x96, 0x02, 0x00, 0x08, 0x50, 0x8E, 0x0D, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x73,
- 0x72, 0x63, 0x00, 0x64, 0x00, 0x96, 0x02, 0x00, 0x08, 0x0A, 0x1C, 0x96, 0x04, 0x00, 0x08, 0x51,
- 0x05, 0x01, 0x4F, 0x96, 0x02, 0x00, 0x08, 0x52, 0x1C, 0x96, 0x01, 0x00, 0x02, 0x49, 0x12, 0x9D,
- 0x02, 0x00, 0x19, 0x00, 0x96, 0x09, 0x00, 0x05, 0x00, 0x07, 0x01, 0x00, 0x00, 0x00, 0x08, 0x0A,
- 0x1C, 0x96, 0x02, 0x00, 0x08, 0x4F, 0x52, 0x17, 0x99, 0x02, 0x00, 0x2C, 0x00, 0x96, 0x02, 0x00,
- 0x08, 0x52, 0x1C, 0x96, 0x07, 0x00, 0x07, 0x01, 0x00, 0x00, 0x00, 0x08, 0x0A, 0x1C, 0x96, 0x02,
- 0x00, 0x08, 0x4E, 0x52, 0x17, 0x96, 0x09, 0x00, 0x05, 0x01, 0x07, 0x01, 0x00, 0x00, 0x00, 0x08,
- 0x0A, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x4F, 0x52, 0x17, 0x4F, 0x96, 0x02, 0x00, 0x08, 0x48, 0x1C,
- 0x96, 0x02, 0x00, 0x08, 0x0D, 0x4E, 0x96, 0x02, 0x00, 0x08, 0x0F, 0x8E, 0x08, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0xB3, 0x00, 0x96, 0x03, 0x00, 0x08, 0x53, 0x02, 0x3C, 0x96, 0x02, 0x00,
- 0x08, 0x0A, 0x46, 0x87, 0x01, 0x00, 0x00, 0x96, 0x01, 0x00, 0x02, 0x49, 0x9D, 0x02, 0x00, 0x91,
- 0x00, 0x96, 0x04, 0x00, 0x08, 0x13, 0x04, 0x00, 0x3C, 0x96, 0x02, 0x00, 0x08, 0x53, 0x1C, 0x96,
- 0x01, 0x00, 0x02, 0x49, 0x9D, 0x02, 0x00, 0x41, 0x00, 0x96, 0x02, 0x00, 0x08, 0x53, 0x4C, 0x1C,
- 0x96, 0x04, 0x00, 0x08, 0x56, 0x08, 0x13, 0x1C, 0x96, 0x07, 0x00, 0x07, 0x01, 0x00, 0x00, 0x00,
- 0x08, 0x54, 0x3D, 0x47, 0x96, 0x02, 0x00, 0x08, 0x55, 0x47, 0x96, 0x02, 0x00, 0x08, 0x0A, 0x1C,
- 0x96, 0x02, 0x00, 0x08, 0x13, 0x1C, 0x4E, 0x96, 0x07, 0x00, 0x07, 0x01, 0x00, 0x00, 0x00, 0x08,
- 0x54, 0x3D, 0x47, 0x47, 0x1D, 0x99, 0x02, 0x00, 0x33, 0x00, 0x96, 0x04, 0x00, 0x08, 0x53, 0x08,
- 0x13, 0x1C, 0x96, 0x07, 0x00, 0x07, 0x01, 0x00, 0x00, 0x00, 0x08, 0x54, 0x3D, 0x96, 0x02, 0x00,
- 0x08, 0x55, 0x47, 0x96, 0x02, 0x00, 0x08, 0x0A, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x13, 0x1C, 0x4E,
- 0x96, 0x07, 0x00, 0x07, 0x01, 0x00, 0x00, 0x00, 0x08, 0x54, 0x3D, 0x47, 0x1D, 0x99, 0x02, 0x00,
- 0x61, 0xFF, 0x96, 0x02, 0x00, 0x08, 0x53, 0x1C, 0x3E, 0x4F, 0x96, 0x02, 0x00, 0x08, 0x48, 0x1C,
- 0x96, 0x02, 0x00, 0x08, 0x0D, 0x4E, 0x96, 0x02, 0x00, 0x08, 0x57, 0x8E, 0x08, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x0D, 0x00, 0x96, 0x02, 0x00, 0x08, 0x0A, 0x1C, 0x96, 0x02, 0x00, 0x08,
- 0x58, 0x4E, 0x3E, 0x4F, 0x96, 0x02, 0x00, 0x08, 0x48, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x0D, 0x4E,
- 0x96, 0x02, 0x00, 0x08, 0x59, 0x8E, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0D, 0x00,
- 0x96, 0x02, 0x00, 0x08, 0x0A, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x5A, 0x4E, 0x3E, 0x4F, 0x96, 0x02,
- 0x00, 0x08, 0x48, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x0D, 0x4E, 0x96, 0x02, 0x00, 0x08, 0x5B, 0x8E,
- 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1E, 0x00, 0x96, 0x07, 0x00, 0x08, 0x1C, 0x07,
- 0x00, 0x00, 0x00, 0x00, 0x43, 0x3C, 0x96, 0x07, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 0x08, 0x1C,
- 0x1C, 0x96, 0x02, 0x00, 0x08, 0x5C, 0x52, 0x17, 0x4F, 0x96, 0x08, 0x00, 0x07, 0x83, 0x00, 0x00,
- 0x00, 0x02, 0x08, 0x48, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x0D, 0x4E, 0x96, 0x07, 0x00, 0x07, 0x03,
- 0x00, 0x00, 0x00, 0x08, 0x00, 0x3D, 0x17, 0x96, 0x13, 0x00, 0x08, 0x5D, 0x07, 0x10, 0x00, 0x00,
- 0x00, 0x07, 0xF4, 0x01, 0x00, 0x00, 0x07, 0x02, 0x00, 0x00, 0x00, 0x08, 0x39, 0x3D, 0x1D, 0x96,
- 0x09, 0x00, 0x08, 0x5E, 0x07, 0xF4, 0x01, 0x00, 0x00, 0x08, 0x5D, 0x1C, 0x96, 0x02, 0x00, 0x08,
- 0x0D, 0x4E, 0x96, 0x07, 0x00, 0x07, 0x03, 0x00, 0x00, 0x00, 0x08, 0x02, 0x3D, 0x17, 0x96, 0x0E,
- 0x00, 0x07, 0x12, 0x00, 0x00, 0x00, 0x08, 0x47, 0x07, 0xF4, 0x01, 0x00, 0x00, 0x08, 0x5D, 0x1C,
- 0x96, 0x02, 0x00, 0x08, 0x0D, 0x4E, 0x96, 0x07, 0x00, 0x07, 0x04, 0x00, 0x00, 0x00, 0x08, 0x03,
- 0x3D, 0x17, 0x96, 0x08, 0x00, 0x07, 0x07, 0x00, 0x00, 0x00, 0x02, 0x08, 0x5D, 0x1C, 0x96, 0x02,
- 0x00, 0x08, 0x0D, 0x4E, 0x96, 0x07, 0x00, 0x07, 0x03, 0x00, 0x00, 0x00, 0x08, 0x00, 0x3D, 0x17,
- 0x96, 0x13, 0x00, 0x08, 0x5F, 0x07, 0x00, 0x00, 0x00, 0x00, 0x07, 0xFD, 0x00, 0x00, 0x00, 0x07,
- 0x02, 0x00, 0x00, 0x00, 0x08, 0x39, 0x3D, 0x1D, 0x96, 0x02, 0x00, 0x08, 0x5F, 0x1C, 0x96, 0x02,
- 0x00, 0x08, 0x0D, 0x4E, 0x96, 0x13, 0x00, 0x08, 0x60, 0x07, 0x01, 0x00, 0x00, 0x00, 0x07, 0xFD,
+ 0x02, 0x00, 0x08, 0x4F, 0x8E, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4F,
+ 0x96, 0x02, 0x00, 0x08, 0x48, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x0D, 0x4E, 0x96, 0x02, 0x00, 0x08,
+ 0x50, 0x8E, 0x0D, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x73, 0x72, 0x63, 0x00, 0x64,
+ 0x00, 0x96, 0x02, 0x00, 0x08, 0x0A, 0x1C, 0x96, 0x04, 0x00, 0x08, 0x51, 0x05, 0x01, 0x4F, 0x96,
+ 0x02, 0x00, 0x08, 0x52, 0x1C, 0x96, 0x01, 0x00, 0x02, 0x49, 0x12, 0x9D, 0x02, 0x00, 0x19, 0x00,
+ 0x96, 0x09, 0x00, 0x05, 0x00, 0x07, 0x01, 0x00, 0x00, 0x00, 0x08, 0x0A, 0x1C, 0x96, 0x02, 0x00,
+ 0x08, 0x4F, 0x52, 0x17, 0x99, 0x02, 0x00, 0x2C, 0x00, 0x96, 0x02, 0x00, 0x08, 0x52, 0x1C, 0x96,
+ 0x07, 0x00, 0x07, 0x01, 0x00, 0x00, 0x00, 0x08, 0x0A, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x4E, 0x52,
+ 0x17, 0x96, 0x09, 0x00, 0x05, 0x01, 0x07, 0x01, 0x00, 0x00, 0x00, 0x08, 0x0A, 0x1C, 0x96, 0x02,
+ 0x00, 0x08, 0x4F, 0x52, 0x17, 0x4F, 0x96, 0x02, 0x00, 0x08, 0x48, 0x1C, 0x96, 0x02, 0x00, 0x08,
+ 0x0D, 0x4E, 0x96, 0x02, 0x00, 0x08, 0x0F, 0x8E, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0xB3, 0x00, 0x96, 0x03, 0x00, 0x08, 0x53, 0x02, 0x3C, 0x96, 0x02, 0x00, 0x08, 0x0A, 0x46, 0x87,
+ 0x01, 0x00, 0x00, 0x96, 0x01, 0x00, 0x02, 0x49, 0x9D, 0x02, 0x00, 0x91, 0x00, 0x96, 0x04, 0x00,
+ 0x08, 0x13, 0x04, 0x00, 0x3C, 0x96, 0x02, 0x00, 0x08, 0x53, 0x1C, 0x96, 0x01, 0x00, 0x02, 0x49,
+ 0x9D, 0x02, 0x00, 0x41, 0x00, 0x96, 0x02, 0x00, 0x08, 0x53, 0x4C, 0x1C, 0x96, 0x04, 0x00, 0x08,
+ 0x56, 0x08, 0x13, 0x1C, 0x96, 0x07, 0x00, 0x07, 0x01, 0x00, 0x00, 0x00, 0x08, 0x54, 0x3D, 0x47,
+ 0x96, 0x02, 0x00, 0x08, 0x55, 0x47, 0x96, 0x02, 0x00, 0x08, 0x0A, 0x1C, 0x96, 0x02, 0x00, 0x08,
+ 0x13, 0x1C, 0x4E, 0x96, 0x07, 0x00, 0x07, 0x01, 0x00, 0x00, 0x00, 0x08, 0x54, 0x3D, 0x47, 0x47,
+ 0x1D, 0x99, 0x02, 0x00, 0x33, 0x00, 0x96, 0x04, 0x00, 0x08, 0x53, 0x08, 0x13, 0x1C, 0x96, 0x07,
+ 0x00, 0x07, 0x01, 0x00, 0x00, 0x00, 0x08, 0x54, 0x3D, 0x96, 0x02, 0x00, 0x08, 0x55, 0x47, 0x96,
+ 0x02, 0x00, 0x08, 0x0A, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x13, 0x1C, 0x4E, 0x96, 0x07, 0x00, 0x07,
+ 0x01, 0x00, 0x00, 0x00, 0x08, 0x54, 0x3D, 0x47, 0x1D, 0x99, 0x02, 0x00, 0x61, 0xFF, 0x96, 0x02,
+ 0x00, 0x08, 0x53, 0x1C, 0x3E, 0x4F, 0x96, 0x02, 0x00, 0x08, 0x48, 0x1C, 0x96, 0x02, 0x00, 0x08,
+ 0x0D, 0x4E, 0x96, 0x02, 0x00, 0x08, 0x57, 0x8E, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x0D, 0x00, 0x96, 0x02, 0x00, 0x08, 0x0A, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x58, 0x4E, 0x3E, 0x4F,
+ 0x96, 0x02, 0x00, 0x08, 0x48, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x0D, 0x4E, 0x96, 0x02, 0x00, 0x08,
+ 0x59, 0x8E, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0D, 0x00, 0x96, 0x02, 0x00, 0x08,
+ 0x0A, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x5A, 0x4E, 0x3E, 0x4F, 0x96, 0x02, 0x00, 0x08, 0x48, 0x1C,
+ 0x96, 0x02, 0x00, 0x08, 0x0D, 0x4E, 0x96, 0x02, 0x00, 0x08, 0x5B, 0x8E, 0x08, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x1E, 0x00, 0x96, 0x07, 0x00, 0x08, 0x1C, 0x07, 0x00, 0x00, 0x00, 0x00,
+ 0x43, 0x3C, 0x96, 0x07, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 0x08, 0x1C, 0x1C, 0x96, 0x02, 0x00,
+ 0x08, 0x5C, 0x52, 0x17, 0x4F, 0x96, 0x08, 0x00, 0x07, 0x83, 0x00, 0x00, 0x00, 0x02, 0x08, 0x48,
+ 0x1C, 0x96, 0x02, 0x00, 0x08, 0x0D, 0x4E, 0x96, 0x07, 0x00, 0x07, 0x03, 0x00, 0x00, 0x00, 0x08,
+ 0x00, 0x3D, 0x17, 0x96, 0x13, 0x00, 0x08, 0x5D, 0x07, 0x10, 0x00, 0x00, 0x00, 0x07, 0xF4, 0x01,
+ 0x00, 0x00, 0x07, 0x02, 0x00, 0x00, 0x00, 0x08, 0x39, 0x3D, 0x1D, 0x96, 0x09, 0x00, 0x08, 0x5E,
+ 0x07, 0xF4, 0x01, 0x00, 0x00, 0x08, 0x5D, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x0D, 0x4E, 0x96, 0x07,
+ 0x00, 0x07, 0x03, 0x00, 0x00, 0x00, 0x08, 0x02, 0x3D, 0x17, 0x96, 0x0E, 0x00, 0x07, 0x12, 0x00,
+ 0x00, 0x00, 0x08, 0x47, 0x07, 0xF4, 0x01, 0x00, 0x00, 0x08, 0x5D, 0x1C, 0x96, 0x02, 0x00, 0x08,
+ 0x0D, 0x4E, 0x96, 0x07, 0x00, 0x07, 0x04, 0x00, 0x00, 0x00, 0x08, 0x03, 0x3D, 0x17, 0x96, 0x08,
+ 0x00, 0x07, 0x07, 0x00, 0x00, 0x00, 0x02, 0x08, 0x5D, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x0D, 0x4E,
+ 0x96, 0x07, 0x00, 0x07, 0x03, 0x00, 0x00, 0x00, 0x08, 0x00, 0x3D, 0x17, 0x96, 0x13, 0x00, 0x08,
+ 0x5F, 0x07, 0x00, 0x00, 0x00, 0x00, 0x07, 0xFD, 0x00, 0x00, 0x00, 0x07, 0x02, 0x00, 0x00, 0x00,
+ 0x08, 0x39, 0x3D, 0x1D, 0x96, 0x02, 0x00, 0x08, 0x5F, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x0D, 0x4E,
+ 0x96, 0x13, 0x00, 0x08, 0x60, 0x07, 0x01, 0x00, 0x00, 0x00, 0x07, 0xFD, 0x00, 0x00, 0x00, 0x07,
+ 0x02, 0x00, 0x00, 0x00, 0x08, 0x01, 0x3D, 0x4F, 0x96, 0x02, 0x00, 0x08, 0x5F, 0x1C, 0x96, 0x02,
+ 0x00, 0x08, 0x0D, 0x4E, 0x96, 0x13, 0x00, 0x08, 0x61, 0x07, 0x02, 0x00, 0x00, 0x00, 0x07, 0xFD,
0x00, 0x00, 0x00, 0x07, 0x02, 0x00, 0x00, 0x00, 0x08, 0x01, 0x3D, 0x4F, 0x96, 0x02, 0x00, 0x08,
- 0x5F, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x0D, 0x4E, 0x96, 0x13, 0x00, 0x08, 0x61, 0x07, 0x02, 0x00,
+ 0x5F, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x0D, 0x4E, 0x96, 0x13, 0x00, 0x08, 0x62, 0x07, 0x03, 0x00,
0x00, 0x00, 0x07, 0xFD, 0x00, 0x00, 0x00, 0x07, 0x02, 0x00, 0x00, 0x00, 0x08, 0x01, 0x3D, 0x4F,
0x96, 0x02, 0x00, 0x08, 0x5F, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x0D, 0x4E, 0x96, 0x13, 0x00, 0x08,
- 0x62, 0x07, 0x03, 0x00, 0x00, 0x00, 0x07, 0xFD, 0x00, 0x00, 0x00, 0x07, 0x02, 0x00, 0x00, 0x00,
+ 0x63, 0x07, 0x04, 0x00, 0x00, 0x00, 0x07, 0xFD, 0x00, 0x00, 0x00, 0x07, 0x02, 0x00, 0x00, 0x00,
0x08, 0x01, 0x3D, 0x4F, 0x96, 0x02, 0x00, 0x08, 0x5F, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x0D, 0x4E,
- 0x96, 0x13, 0x00, 0x08, 0x63, 0x07, 0x04, 0x00, 0x00, 0x00, 0x07, 0xFD, 0x00, 0x00, 0x00, 0x07,
+ 0x96, 0x13, 0x00, 0x08, 0x64, 0x07, 0x05, 0x00, 0x00, 0x00, 0x07, 0xFD, 0x00, 0x00, 0x00, 0x07,
0x02, 0x00, 0x00, 0x00, 0x08, 0x01, 0x3D, 0x4F, 0x96, 0x02, 0x00, 0x08, 0x5F, 0x1C, 0x96, 0x02,
- 0x00, 0x08, 0x0D, 0x4E, 0x96, 0x13, 0x00, 0x08, 0x64, 0x07, 0x05, 0x00, 0x00, 0x00, 0x07, 0xFD,
+ 0x00, 0x08, 0x0D, 0x4E, 0x96, 0x13, 0x00, 0x08, 0x0F, 0x07, 0x06, 0x00, 0x00, 0x00, 0x07, 0xFD,
0x00, 0x00, 0x00, 0x07, 0x02, 0x00, 0x00, 0x00, 0x08, 0x01, 0x3D, 0x4F, 0x96, 0x02, 0x00, 0x08,
- 0x5F, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x0D, 0x4E, 0x96, 0x13, 0x00, 0x08, 0x0F, 0x07, 0x06, 0x00,
+ 0x5F, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x0D, 0x4E, 0x96, 0x13, 0x00, 0x08, 0x65, 0x07, 0x07, 0x00,
0x00, 0x00, 0x07, 0xFD, 0x00, 0x00, 0x00, 0x07, 0x02, 0x00, 0x00, 0x00, 0x08, 0x01, 0x3D, 0x4F,
0x96, 0x02, 0x00, 0x08, 0x5F, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x0D, 0x4E, 0x96, 0x13, 0x00, 0x08,
- 0x65, 0x07, 0x07, 0x00, 0x00, 0x00, 0x07, 0xFD, 0x00, 0x00, 0x00, 0x07, 0x02, 0x00, 0x00, 0x00,
- 0x08, 0x01, 0x3D, 0x4F, 0x96, 0x02, 0x00, 0x08, 0x5F, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x0D, 0x4E,
- 0x96, 0x13, 0x00, 0x08, 0x66, 0x07, 0x08, 0x00, 0x00, 0x00, 0x07, 0xFD, 0x00, 0x00, 0x00, 0x07,
- 0x02, 0x00, 0x00, 0x00, 0x08, 0x01, 0x3D, 0x4F, 0x96, 0x13, 0x00, 0x08, 0x67, 0x07, 0x09, 0x00,
- 0x00, 0x00, 0x07, 0xFD, 0x00, 0x00, 0x00, 0x07, 0x02, 0x00, 0x00, 0x00, 0x08, 0x39, 0x3D, 0x1D,
- 0x96, 0x02, 0x00, 0x08, 0x67, 0x1C, 0x96, 0x10, 0x00, 0x08, 0x0D, 0x08, 0x68, 0x07, 0x01, 0x00,
- 0x00, 0x00, 0x07, 0x02, 0x00, 0x00, 0x00, 0x08, 0x5F, 0x40, 0x4F, 0x96, 0x02, 0x00, 0x08, 0x67,
- 0x1C, 0x96, 0x02, 0x00, 0x08, 0x0D, 0x4E, 0x96, 0x02, 0x00, 0x08, 0x69, 0x3A, 0x17, 0x96, 0x09,
- 0x00, 0x07, 0x03, 0x00, 0x00, 0x00, 0x08, 0x0D, 0x08, 0x67, 0x1C, 0x96, 0x07, 0x00, 0x07, 0x03,
- 0x00, 0x00, 0x00, 0x08, 0x00, 0x3D, 0x17, 0x96, 0x02, 0x00, 0x08, 0x67, 0x1C, 0x96, 0x02, 0x00,
- 0x08, 0x0D, 0x4E, 0x96, 0x13, 0x00, 0x08, 0x4B, 0x07, 0x00, 0x00, 0x00, 0x00, 0x07, 0x2D, 0x01,
+ 0x66, 0x07, 0x08, 0x00, 0x00, 0x00, 0x07, 0xFD, 0x00, 0x00, 0x00, 0x07, 0x02, 0x00, 0x00, 0x00,
+ 0x08, 0x01, 0x3D, 0x4F, 0x96, 0x13, 0x00, 0x08, 0x67, 0x07, 0x09, 0x00, 0x00, 0x00, 0x07, 0xFD,
+ 0x00, 0x00, 0x00, 0x07, 0x02, 0x00, 0x00, 0x00, 0x08, 0x39, 0x3D, 0x1D, 0x96, 0x02, 0x00, 0x08,
+ 0x67, 0x1C, 0x96, 0x10, 0x00, 0x08, 0x0D, 0x08, 0x68, 0x07, 0x01, 0x00, 0x00, 0x00, 0x07, 0x02,
+ 0x00, 0x00, 0x00, 0x08, 0x5F, 0x40, 0x4F, 0x96, 0x02, 0x00, 0x08, 0x67, 0x1C, 0x96, 0x02, 0x00,
+ 0x08, 0x0D, 0x4E, 0x96, 0x02, 0x00, 0x08, 0x69, 0x3A, 0x17, 0x96, 0x09, 0x00, 0x07, 0x03, 0x00,
+ 0x00, 0x00, 0x08, 0x0D, 0x08, 0x67, 0x1C, 0x96, 0x07, 0x00, 0x07, 0x03, 0x00, 0x00, 0x00, 0x08,
+ 0x00, 0x3D, 0x17, 0x96, 0x02, 0x00, 0x08, 0x67, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x0D, 0x4E, 0x96,
+ 0x13, 0x00, 0x08, 0x4B, 0x07, 0x00, 0x00, 0x00, 0x00, 0x07, 0x2D, 0x01, 0x00, 0x00, 0x07, 0x02,
+ 0x00, 0x00, 0x00, 0x08, 0x01, 0x3D, 0x4F, 0x96, 0x02, 0x00, 0x08, 0x67, 0x1C, 0x96, 0x02, 0x00,
+ 0x08, 0x0D, 0x4E, 0x96, 0x13, 0x00, 0x08, 0x4C, 0x07, 0x01, 0x00, 0x00, 0x00, 0x07, 0x2D, 0x01,
0x00, 0x00, 0x07, 0x02, 0x00, 0x00, 0x00, 0x08, 0x01, 0x3D, 0x4F, 0x96, 0x02, 0x00, 0x08, 0x67,
- 0x1C, 0x96, 0x02, 0x00, 0x08, 0x0D, 0x4E, 0x96, 0x13, 0x00, 0x08, 0x4C, 0x07, 0x01, 0x00, 0x00,
+ 0x1C, 0x96, 0x02, 0x00, 0x08, 0x0D, 0x4E, 0x96, 0x13, 0x00, 0x08, 0x4D, 0x07, 0x02, 0x00, 0x00,
0x00, 0x07, 0x2D, 0x01, 0x00, 0x00, 0x07, 0x02, 0x00, 0x00, 0x00, 0x08, 0x01, 0x3D, 0x4F, 0x96,
- 0x02, 0x00, 0x08, 0x67, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x0D, 0x4E, 0x96, 0x13, 0x00, 0x08, 0x4D,
- 0x07, 0x02, 0x00, 0x00, 0x00, 0x07, 0x2D, 0x01, 0x00, 0x00, 0x07, 0x02, 0x00, 0x00, 0x00, 0x08,
+ 0x02, 0x00, 0x08, 0x67, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x0D, 0x4E, 0x96, 0x13, 0x00, 0x08, 0x6A,
+ 0x07, 0x0A, 0x00, 0x00, 0x00, 0x07, 0xFD, 0x00, 0x00, 0x00, 0x07, 0x02, 0x00, 0x00, 0x00, 0x08,
0x01, 0x3D, 0x4F, 0x96, 0x02, 0x00, 0x08, 0x67, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x0D, 0x4E, 0x96,
- 0x13, 0x00, 0x08, 0x6A, 0x07, 0x0A, 0x00, 0x00, 0x00, 0x07, 0xFD, 0x00, 0x00, 0x00, 0x07, 0x02,
+ 0x13, 0x00, 0x08, 0x6B, 0x07, 0x0B, 0x00, 0x00, 0x00, 0x07, 0xFD, 0x00, 0x00, 0x00, 0x07, 0x02,
0x00, 0x00, 0x00, 0x08, 0x01, 0x3D, 0x4F, 0x96, 0x02, 0x00, 0x08, 0x67, 0x1C, 0x96, 0x02, 0x00,
- 0x08, 0x0D, 0x4E, 0x96, 0x13, 0x00, 0x08, 0x6B, 0x07, 0x0B, 0x00, 0x00, 0x00, 0x07, 0xFD, 0x00,
+ 0x08, 0x0D, 0x4E, 0x96, 0x13, 0x00, 0x08, 0x6C, 0x07, 0x0C, 0x00, 0x00, 0x00, 0x07, 0xFD, 0x00,
0x00, 0x00, 0x07, 0x02, 0x00, 0x00, 0x00, 0x08, 0x01, 0x3D, 0x4F, 0x96, 0x02, 0x00, 0x08, 0x67,
- 0x1C, 0x96, 0x02, 0x00, 0x08, 0x0D, 0x4E, 0x96, 0x13, 0x00, 0x08, 0x6C, 0x07, 0x0C, 0x00, 0x00,
- 0x00, 0x07, 0xFD, 0x00, 0x00, 0x00, 0x07, 0x02, 0x00, 0x00, 0x00, 0x08, 0x01, 0x3D, 0x4F, 0x96,
- 0x02, 0x00, 0x08, 0x67, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x0D, 0x4E, 0x96, 0x02, 0x00, 0x08, 0x4F,
- 0x8E, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4F, 0x96, 0x02, 0x00, 0x08,
- 0x67, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x0D, 0x4E, 0x96, 0x02, 0x00, 0x08, 0x50, 0x8E, 0x0D, 0x00,
- 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x73, 0x72, 0x63, 0x00, 0x72, 0x00, 0x96, 0x02, 0x00,
- 0x08, 0x52, 0x1C, 0x96, 0x01, 0x00, 0x02, 0x49, 0x12, 0x9D, 0x02, 0x00, 0x27, 0x00, 0x96, 0x02,
- 0x00, 0x08, 0x0A, 0x1C, 0x96, 0x04, 0x00, 0x08, 0x51, 0x05, 0x00, 0x4F, 0x96, 0x09, 0x00, 0x05,
- 0x00, 0x07, 0x01, 0x00, 0x00, 0x00, 0x08, 0x0A, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x4F, 0x52, 0x17,
- 0x99, 0x02, 0x00, 0x3A, 0x00, 0x96, 0x02, 0x00, 0x08, 0x0A, 0x1C, 0x96, 0x04, 0x00, 0x08, 0x51,
- 0x05, 0x01, 0x4F, 0x96, 0x02, 0x00, 0x08, 0x52, 0x1C, 0x96, 0x07, 0x00, 0x07, 0x01, 0x00, 0x00,
- 0x00, 0x08, 0x0A, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x6C, 0x52, 0x17, 0x96, 0x09, 0x00, 0x05, 0x01,
- 0x07, 0x01, 0x00, 0x00, 0x00, 0x08, 0x0A, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x4F, 0x52, 0x17, 0x4F,
+ 0x1C, 0x96, 0x02, 0x00, 0x08, 0x0D, 0x4E, 0x96, 0x02, 0x00, 0x08, 0x4F, 0x8E, 0x08, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4F, 0x96, 0x02, 0x00, 0x08, 0x67, 0x1C, 0x96, 0x02,
+ 0x00, 0x08, 0x0D, 0x4E, 0x96, 0x02, 0x00, 0x08, 0x50, 0x8E, 0x0D, 0x00, 0x00, 0x01, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x73, 0x72, 0x63, 0x00, 0x72, 0x00, 0x96, 0x02, 0x00, 0x08, 0x52, 0x1C, 0x96,
+ 0x01, 0x00, 0x02, 0x49, 0x12, 0x9D, 0x02, 0x00, 0x27, 0x00, 0x96, 0x02, 0x00, 0x08, 0x0A, 0x1C,
+ 0x96, 0x04, 0x00, 0x08, 0x51, 0x05, 0x00, 0x4F, 0x96, 0x09, 0x00, 0x05, 0x00, 0x07, 0x01, 0x00,
+ 0x00, 0x00, 0x08, 0x0A, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x4F, 0x52, 0x17, 0x99, 0x02, 0x00, 0x3A,
+ 0x00, 0x96, 0x02, 0x00, 0x08, 0x0A, 0x1C, 0x96, 0x04, 0x00, 0x08, 0x51, 0x05, 0x01, 0x4F, 0x96,
+ 0x02, 0x00, 0x08, 0x52, 0x1C, 0x96, 0x07, 0x00, 0x07, 0x01, 0x00, 0x00, 0x00, 0x08, 0x0A, 0x1C,
+ 0x96, 0x02, 0x00, 0x08, 0x6C, 0x52, 0x17, 0x96, 0x09, 0x00, 0x05, 0x01, 0x07, 0x01, 0x00, 0x00,
+ 0x00, 0x08, 0x0A, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x4F, 0x52, 0x17, 0x4F, 0x96, 0x02, 0x00, 0x08,
+ 0x67, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x0D, 0x4E, 0x96, 0x02, 0x00, 0x08, 0x57, 0x8E, 0x08, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0D, 0x00, 0x96, 0x02, 0x00, 0x08, 0x0A, 0x1C, 0x96, 0x02,
+ 0x00, 0x08, 0x58, 0x4E, 0x3E, 0x4F, 0x96, 0x02, 0x00, 0x08, 0x67, 0x1C, 0x96, 0x02, 0x00, 0x08,
+ 0x0D, 0x4E, 0x96, 0x02, 0x00, 0x08, 0x59, 0x8E, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x0D, 0x00, 0x96, 0x02, 0x00, 0x08, 0x0A, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x5A, 0x4E, 0x3E, 0x4F,
0x96, 0x02, 0x00, 0x08, 0x67, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x0D, 0x4E, 0x96, 0x02, 0x00, 0x08,
- 0x57, 0x8E, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0D, 0x00, 0x96, 0x02, 0x00, 0x08,
- 0x0A, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x58, 0x4E, 0x3E, 0x4F, 0x96, 0x02, 0x00, 0x08, 0x67, 0x1C,
- 0x96, 0x02, 0x00, 0x08, 0x0D, 0x4E, 0x96, 0x02, 0x00, 0x08, 0x59, 0x8E, 0x08, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x0D, 0x00, 0x96, 0x02, 0x00, 0x08, 0x0A, 0x1C, 0x96, 0x02, 0x00, 0x08,
- 0x5A, 0x4E, 0x3E, 0x4F, 0x96, 0x02, 0x00, 0x08, 0x67, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x0D, 0x4E,
- 0x96, 0x02, 0x00, 0x08, 0x5B, 0x8E, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1E, 0x00,
+ 0x5B, 0x8E, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1E, 0x00, 0x96, 0x07, 0x00, 0x08,
+ 0x1C, 0x07, 0x00, 0x00, 0x00, 0x00, 0x43, 0x3C, 0x96, 0x07, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00,
+ 0x08, 0x1C, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x6D, 0x52, 0x17, 0x4F, 0x96, 0x07, 0x00, 0x08, 0x6E,
+ 0x07, 0x00, 0x00, 0x00, 0x00, 0x43, 0x1D, 0x96, 0x02, 0x00, 0x08, 0x6E, 0x1C, 0x96, 0x07, 0x00,
+ 0x08, 0x6F, 0x07, 0x00, 0x00, 0x00, 0x00, 0x43, 0x4F, 0x96, 0x02, 0x00, 0x08, 0x6E, 0x1C, 0x96,
+ 0x02, 0x00, 0x08, 0x6F, 0x4E, 0x96, 0x13, 0x00, 0x08, 0x70, 0x07, 0x00, 0x00, 0x00, 0x00, 0x07,
+ 0x0B, 0x00, 0x00, 0x00, 0x07, 0x02, 0x00, 0x00, 0x00, 0x08, 0x01, 0x3D, 0x4F, 0x96, 0x07, 0x00,
+ 0x07, 0x00, 0x00, 0x00, 0x00, 0x08, 0x6E, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x6F, 0x4E, 0x96, 0x02,
+ 0x00, 0x08, 0x70, 0x52, 0x17, 0x96, 0x02, 0x00, 0x08, 0x6E, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x6F,
+ 0x4E, 0x96, 0x02, 0x00, 0x08, 0x70, 0x3A, 0x17, 0x96, 0x02, 0x00, 0x08, 0x6E, 0x1C, 0x96, 0x13,
+ 0x00, 0x08, 0x71, 0x07, 0x00, 0x00, 0x00, 0x00, 0x07, 0x2A, 0x04, 0x00, 0x00, 0x07, 0x02, 0x00,
+ 0x00, 0x00, 0x08, 0x01, 0x3D, 0x4F, 0x96, 0x02, 0x00, 0x08, 0x6E, 0x1C, 0x96, 0x13, 0x00, 0x08,
+ 0x72, 0x07, 0x00, 0x00, 0x00, 0x00, 0x07, 0x3B, 0x08, 0x00, 0x00, 0x07, 0x02, 0x00, 0x00, 0x00,
+ 0x08, 0x01, 0x3D, 0x4F, 0x96, 0x0E, 0x00, 0x07, 0x01, 0x00, 0x00, 0x00, 0x08, 0x73, 0x07, 0x3B,
+ 0x08, 0x00, 0x00, 0x08, 0x6E, 0x1C, 0x96, 0x07, 0x00, 0x07, 0x04, 0x00, 0x00, 0x00, 0x08, 0x03,
+ 0x3D, 0x17, 0x96, 0x09, 0x00, 0x07, 0x80, 0x00, 0x00, 0x00, 0x08, 0x74, 0x08, 0x6E, 0x1C, 0x96,
+ 0x07, 0x00, 0x07, 0x03, 0x00, 0x00, 0x00, 0x08, 0x00, 0x3D, 0x17, 0x96, 0x02, 0x00, 0x08, 0x6E,
+ 0x1C, 0x96, 0x09, 0x00, 0x08, 0x75, 0x07, 0x00, 0x00, 0x00, 0x00, 0x08, 0x05, 0x40, 0x4F, 0x96,
+ 0x02, 0x00, 0x08, 0x6E, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x75, 0x4E, 0x96, 0x02, 0x00, 0x08, 0x69,
+ 0x3A, 0x17, 0x96, 0x09, 0x00, 0x08, 0x76, 0x07, 0x0C, 0x00, 0x00, 0x00, 0x08, 0x6E, 0x1C, 0x96,
+ 0x02, 0x00, 0x08, 0x75, 0x4E, 0x96, 0x07, 0x00, 0x07, 0x03, 0x00, 0x00, 0x00, 0x08, 0x02, 0x3D,
+ 0x17, 0x96, 0x0E, 0x00, 0x07, 0x05, 0x00, 0x00, 0x00, 0x08, 0x77, 0x07, 0x0C, 0x00, 0x00, 0x00,
+ 0x08, 0x6E, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x75, 0x4E, 0x96, 0x07, 0x00, 0x07, 0x04, 0x00, 0x00,
+ 0x00, 0x08, 0x03, 0x3D, 0x17, 0x96, 0x02, 0x00, 0x08, 0x6E, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x75,
+ 0x4E, 0x96, 0x02, 0x00, 0x08, 0x78, 0x8E, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1E,
+ 0x00, 0x96, 0x07, 0x00, 0x08, 0x1C, 0x07, 0x00, 0x00, 0x00, 0x00, 0x43, 0x3C, 0x96, 0x07, 0x00,
+ 0x07, 0x00, 0x00, 0x00, 0x00, 0x08, 0x1C, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x79, 0x52, 0x17, 0x4F,
+ 0x96, 0x02, 0x00, 0x08, 0x6E, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x75, 0x4E, 0x96, 0x02, 0x00, 0x08,
+ 0x78, 0x4E, 0x96, 0x02, 0x00, 0x08, 0x0D, 0x4E, 0x96, 0x13, 0x00, 0x08, 0x7A, 0x07, 0x00, 0x00,
+ 0x00, 0x00, 0x07, 0x0F, 0x00, 0x00, 0x00, 0x07, 0x02, 0x00, 0x00, 0x00, 0x08, 0x01, 0x3D, 0x4F,
+ 0x96, 0x02, 0x00, 0x08, 0x6E, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x75, 0x4E, 0x96, 0x02, 0x00, 0x08,
+ 0x78, 0x4E, 0x96, 0x02, 0x00, 0x08, 0x0D, 0x4E, 0x96, 0x07, 0x00, 0x07, 0x01, 0x00, 0x00, 0x00,
+ 0x08, 0x10, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x1B, 0x52, 0x17, 0x96, 0x02, 0x00, 0x08, 0x6E, 0x1C,
+ 0x96, 0x02, 0x00, 0x08, 0x7B, 0x8E, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1E, 0x00,
0x96, 0x07, 0x00, 0x08, 0x1C, 0x07, 0x00, 0x00, 0x00, 0x00, 0x43, 0x3C, 0x96, 0x07, 0x00, 0x07,
- 0x00, 0x00, 0x00, 0x00, 0x08, 0x1C, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x6D, 0x52, 0x17, 0x4F, 0x96,
- 0x07, 0x00, 0x08, 0x6E, 0x07, 0x00, 0x00, 0x00, 0x00, 0x43, 0x1D, 0x96, 0x02, 0x00, 0x08, 0x6E,
- 0x1C, 0x96, 0x07, 0x00, 0x08, 0x6F, 0x07, 0x00, 0x00, 0x00, 0x00, 0x43, 0x4F, 0x96, 0x02, 0x00,
- 0x08, 0x6E, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x6F, 0x4E, 0x96, 0x13, 0x00, 0x08, 0x70, 0x07, 0x00,
- 0x00, 0x00, 0x00, 0x07, 0x0B, 0x00, 0x00, 0x00, 0x07, 0x02, 0x00, 0x00, 0x00, 0x08, 0x01, 0x3D,
- 0x4F, 0x96, 0x07, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 0x08, 0x6E, 0x1C, 0x96, 0x02, 0x00, 0x08,
- 0x6F, 0x4E, 0x96, 0x02, 0x00, 0x08, 0x70, 0x52, 0x17, 0x96, 0x02, 0x00, 0x08, 0x6E, 0x1C, 0x96,
- 0x02, 0x00, 0x08, 0x6F, 0x4E, 0x96, 0x02, 0x00, 0x08, 0x70, 0x3A, 0x17, 0x96, 0x02, 0x00, 0x08,
- 0x6E, 0x1C, 0x96, 0x13, 0x00, 0x08, 0x71, 0x07, 0x00, 0x00, 0x00, 0x00, 0x07, 0x2A, 0x04, 0x00,
- 0x00, 0x07, 0x02, 0x00, 0x00, 0x00, 0x08, 0x01, 0x3D, 0x4F, 0x96, 0x02, 0x00, 0x08, 0x6E, 0x1C,
- 0x96, 0x13, 0x00, 0x08, 0x72, 0x07, 0x00, 0x00, 0x00, 0x00, 0x07, 0x3B, 0x08, 0x00, 0x00, 0x07,
- 0x02, 0x00, 0x00, 0x00, 0x08, 0x01, 0x3D, 0x4F, 0x96, 0x0E, 0x00, 0x07, 0x01, 0x00, 0x00, 0x00,
- 0x08, 0x73, 0x07, 0x3B, 0x08, 0x00, 0x00, 0x08, 0x6E, 0x1C, 0x96, 0x07, 0x00, 0x07, 0x04, 0x00,
- 0x00, 0x00, 0x08, 0x03, 0x3D, 0x17, 0x96, 0x09, 0x00, 0x07, 0x80, 0x00, 0x00, 0x00, 0x08, 0x74,
- 0x08, 0x6E, 0x1C, 0x96, 0x07, 0x00, 0x07, 0x03, 0x00, 0x00, 0x00, 0x08, 0x00, 0x3D, 0x17, 0x96,
- 0x02, 0x00, 0x08, 0x6E, 0x1C, 0x96, 0x09, 0x00, 0x08, 0x75, 0x07, 0x00, 0x00, 0x00, 0x00, 0x08,
- 0x05, 0x40, 0x4F, 0x96, 0x02, 0x00, 0x08, 0x6E, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x75, 0x4E, 0x96,
- 0x02, 0x00, 0x08, 0x69, 0x3A, 0x17, 0x96, 0x09, 0x00, 0x08, 0x76, 0x07, 0x0C, 0x00, 0x00, 0x00,
- 0x08, 0x6E, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x75, 0x4E, 0x96, 0x07, 0x00, 0x07, 0x03, 0x00, 0x00,
- 0x00, 0x08, 0x02, 0x3D, 0x17, 0x96, 0x0E, 0x00, 0x07, 0x05, 0x00, 0x00, 0x00, 0x08, 0x77, 0x07,
- 0x0C, 0x00, 0x00, 0x00, 0x08, 0x6E, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x75, 0x4E, 0x96, 0x07, 0x00,
- 0x07, 0x04, 0x00, 0x00, 0x00, 0x08, 0x03, 0x3D, 0x17, 0x96, 0x02, 0x00, 0x08, 0x6E, 0x1C, 0x96,
- 0x02, 0x00, 0x08, 0x75, 0x4E, 0x96, 0x02, 0x00, 0x08, 0x78, 0x8E, 0x08, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x1E, 0x00, 0x96, 0x07, 0x00, 0x08, 0x1C, 0x07, 0x00, 0x00, 0x00, 0x00, 0x43,
- 0x3C, 0x96, 0x07, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 0x08, 0x1C, 0x1C, 0x96, 0x02, 0x00, 0x08,
- 0x79, 0x52, 0x17, 0x4F, 0x96, 0x02, 0x00, 0x08, 0x6E, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x75, 0x4E,
- 0x96, 0x02, 0x00, 0x08, 0x78, 0x4E, 0x96, 0x02, 0x00, 0x08, 0x0D, 0x4E, 0x96, 0x13, 0x00, 0x08,
- 0x7A, 0x07, 0x00, 0x00, 0x00, 0x00, 0x07, 0x0F, 0x00, 0x00, 0x00, 0x07, 0x02, 0x00, 0x00, 0x00,
- 0x08, 0x01, 0x3D, 0x4F, 0x96, 0x02, 0x00, 0x08, 0x6E, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x75, 0x4E,
- 0x96, 0x02, 0x00, 0x08, 0x78, 0x4E, 0x96, 0x02, 0x00, 0x08, 0x0D, 0x4E, 0x96, 0x07, 0x00, 0x07,
- 0x01, 0x00, 0x00, 0x00, 0x08, 0x10, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x1B, 0x52, 0x17, 0x96, 0x02,
- 0x00, 0x08, 0x6E, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x7B, 0x8E, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x08, 0x1C, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x7C, 0x52, 0x17, 0x4F, 0x96,
+ 0x02, 0x00, 0x08, 0x6E, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x7B, 0x4E, 0x96, 0x02, 0x00, 0x08, 0x0D,
+ 0x4E, 0x96, 0x02, 0x00, 0x08, 0x7D, 0x8E, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1E,
+ 0x00, 0x96, 0x07, 0x00, 0x08, 0x1C, 0x07, 0x00, 0x00, 0x00, 0x00, 0x43, 0x3C, 0x96, 0x07, 0x00,
+ 0x07, 0x00, 0x00, 0x00, 0x00, 0x08, 0x1C, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x7E, 0x52, 0x17, 0x4F,
+ 0x96, 0x02, 0x00, 0x08, 0x6E, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x7B, 0x4E, 0x96, 0x02, 0x00, 0x08,
+ 0x0D, 0x4E, 0x96, 0x02, 0x00, 0x08, 0x7F, 0x8E, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x1E, 0x00, 0x96, 0x07, 0x00, 0x08, 0x1C, 0x07, 0x00, 0x00, 0x00, 0x00, 0x43, 0x3C, 0x96, 0x07,
+ 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 0x08, 0x1C, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x80, 0x52, 0x17,
+ 0x4F, 0x96, 0x02, 0x00, 0x08, 0x6E, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x7B, 0x4E, 0x96, 0x02, 0x00,
+ 0x08, 0x0D, 0x4E, 0x96, 0x02, 0x00, 0x08, 0x81, 0x8E, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x1E, 0x00, 0x96, 0x07, 0x00, 0x08, 0x1C, 0x07, 0x00, 0x00, 0x00, 0x00, 0x43, 0x3C, 0x96,
+ 0x07, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 0x08, 0x1C, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x82, 0x52,
+ 0x17, 0x4F, 0x96, 0x02, 0x00, 0x08, 0x6E, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x7B, 0x4E, 0x96, 0x02,
+ 0x00, 0x08, 0x0D, 0x4E, 0x96, 0x02, 0x00, 0x08, 0x83, 0x8E, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x1E, 0x00, 0x96, 0x07, 0x00, 0x08, 0x1C, 0x07, 0x00, 0x00, 0x00, 0x00, 0x43, 0x3C,
- 0x96, 0x07, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 0x08, 0x1C, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x7C,
+ 0x96, 0x07, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 0x08, 0x1C, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x84,
0x52, 0x17, 0x4F, 0x96, 0x02, 0x00, 0x08, 0x6E, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x7B, 0x4E, 0x96,
- 0x02, 0x00, 0x08, 0x0D, 0x4E, 0x96, 0x02, 0x00, 0x08, 0x7D, 0x8E, 0x08, 0x00, 0x00, 0x00, 0x00,
+ 0x02, 0x00, 0x08, 0x0D, 0x4E, 0x96, 0x02, 0x00, 0x08, 0x85, 0x8E, 0x08, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x1E, 0x00, 0x96, 0x07, 0x00, 0x08, 0x1C, 0x07, 0x00, 0x00, 0x00, 0x00, 0x43,
0x3C, 0x96, 0x07, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 0x08, 0x1C, 0x1C, 0x96, 0x02, 0x00, 0x08,
- 0x7E, 0x52, 0x17, 0x4F, 0x96, 0x02, 0x00, 0x08, 0x6E, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x7B, 0x4E,
- 0x96, 0x02, 0x00, 0x08, 0x0D, 0x4E, 0x96, 0x02, 0x00, 0x08, 0x7F, 0x8E, 0x08, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x1E, 0x00, 0x96, 0x07, 0x00, 0x08, 0x1C, 0x07, 0x00, 0x00, 0x00, 0x00,
- 0x43, 0x3C, 0x96, 0x07, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 0x08, 0x1C, 0x1C, 0x96, 0x02, 0x00,
- 0x08, 0x80, 0x52, 0x17, 0x4F, 0x96, 0x02, 0x00, 0x08, 0x6E, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x7B,
- 0x4E, 0x96, 0x02, 0x00, 0x08, 0x0D, 0x4E, 0x96, 0x02, 0x00, 0x08, 0x81, 0x8E, 0x08, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x1E, 0x00, 0x96, 0x07, 0x00, 0x08, 0x1C, 0x07, 0x00, 0x00, 0x00,
- 0x00, 0x43, 0x3C, 0x96, 0x07, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 0x08, 0x1C, 0x1C, 0x96, 0x02,
- 0x00, 0x08, 0x82, 0x52, 0x17, 0x4F, 0x96, 0x02, 0x00, 0x08, 0x6E, 0x1C, 0x96, 0x02, 0x00, 0x08,
- 0x7B, 0x4E, 0x96, 0x02, 0x00, 0x08, 0x0D, 0x4E, 0x96, 0x02, 0x00, 0x08, 0x83, 0x8E, 0x08, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1E, 0x00, 0x96, 0x07, 0x00, 0x08, 0x1C, 0x07, 0x00, 0x00,
- 0x00, 0x00, 0x43, 0x3C, 0x96, 0x07, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 0x08, 0x1C, 0x1C, 0x96,
- 0x02, 0x00, 0x08, 0x84, 0x52, 0x17, 0x4F, 0x96, 0x02, 0x00, 0x08, 0x6E, 0x1C, 0x96, 0x02, 0x00,
- 0x08, 0x7B, 0x4E, 0x96, 0x02, 0x00, 0x08, 0x0D, 0x4E, 0x96, 0x02, 0x00, 0x08, 0x85, 0x8E, 0x08,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1E, 0x00, 0x96, 0x07, 0x00, 0x08, 0x1C, 0x07, 0x00,
- 0x00, 0x00, 0x00, 0x43, 0x3C, 0x96, 0x07, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 0x08, 0x1C, 0x1C,
- 0x96, 0x02, 0x00, 0x08, 0x86, 0x52, 0x17, 0x4F, 0x96, 0x08, 0x00, 0x07, 0x03, 0x00, 0x00, 0x00,
- 0x02, 0x08, 0x6E, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x7B, 0x4E, 0x96, 0x02, 0x00, 0x08, 0x0D, 0x4E,
- 0x96, 0x07, 0x00, 0x07, 0x03, 0x00, 0x00, 0x00, 0x08, 0x00, 0x3D, 0x17, 0x96, 0x02, 0x00, 0x08,
- 0x6E, 0x1C, 0x96, 0x27, 0x00, 0x08, 0x87, 0x08, 0x88, 0x08, 0x88, 0x08, 0x89, 0x08, 0x89, 0x08,
- 0x8A, 0x08, 0x8A, 0x08, 0x8B, 0x08, 0x8B, 0x08, 0x8C, 0x08, 0x8C, 0x08, 0x8D, 0x08, 0x8D, 0x08,
- 0x8E, 0x08, 0x8E, 0x08, 0x8F, 0x08, 0x8F, 0x07, 0x08, 0x00, 0x00, 0x00, 0x43, 0x4F, 0x96, 0x02,
- 0x00, 0x08, 0x6E, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x87, 0x4E, 0x96, 0x07, 0x00, 0x07, 0x01, 0x00,
- 0x00, 0x00, 0x08, 0x10, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x1B, 0x52, 0x17, 0x96, 0x09, 0x00, 0x08,
- 0x90, 0x07, 0x0D, 0x00, 0x00, 0x00, 0x08, 0x6E, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x87, 0x4E, 0x96,
- 0x07, 0x00, 0x07, 0x03, 0x00, 0x00, 0x00, 0x08, 0x02, 0x3D, 0x17, 0x96, 0x08, 0x00, 0x07, 0x07,
- 0x00, 0x00, 0x00, 0x02, 0x08, 0x6E, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x87, 0x4E, 0x96, 0x07, 0x00,
- 0x07, 0x03, 0x00, 0x00, 0x00, 0x08, 0x00, 0x3D, 0x17, 0x96, 0x02, 0x00, 0x08, 0x91, 0x8E, 0x10,
- 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x00, 0x27,
- 0x00, 0x96, 0x02, 0x00, 0x08, 0x0A, 0x1C, 0x96, 0x04, 0x00, 0x08, 0x92, 0x08, 0x92, 0x1C, 0x4F,
- 0x96, 0x08, 0x00, 0x07, 0x07, 0x00, 0x00, 0x00, 0x02, 0x08, 0x0A, 0x1C, 0x96, 0x07, 0x00, 0x07,
- 0x03, 0x00, 0x00, 0x00, 0x08, 0x00, 0x3D, 0x17, 0x1D, 0x96, 0x09, 0x00, 0x08, 0x93, 0x07, 0xBC,
- 0x02, 0x00, 0x00, 0x08, 0x91, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x0D, 0x4E, 0x96, 0x07, 0x00, 0x07,
- 0x03, 0x00, 0x00, 0x00, 0x08, 0x02, 0x3D, 0x17, 0x96, 0x08, 0x00, 0x07, 0x07, 0x00, 0x00, 0x00,
- 0x02, 0x08, 0x91, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x0D, 0x4E, 0x96, 0x07, 0x00, 0x07, 0x03, 0x00,
- 0x00, 0x00, 0x08, 0x00, 0x3D, 0x17, 0x96, 0x13, 0x00, 0x08, 0x94, 0x07, 0x00, 0x00, 0x00, 0x00,
- 0x07, 0x2B, 0x04, 0x00, 0x00, 0x07, 0x02, 0x00, 0x00, 0x00, 0x08, 0x39, 0x3D, 0x1D, 0x96, 0x0E,
- 0x00, 0x07, 0x01, 0x00, 0x00, 0x00, 0x08, 0x95, 0x07, 0x2B, 0x04, 0x00, 0x00, 0x08, 0x94, 0x1C,
- 0x96, 0x02, 0x00, 0x08, 0x0D, 0x4E, 0x96, 0x07, 0x00, 0x07, 0x04, 0x00, 0x00, 0x00, 0x08, 0x02,
- 0x3D, 0x17, 0x96, 0x02, 0x00, 0x08, 0x96, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x0D, 0x4E, 0x96, 0x04,
- 0x00, 0x08, 0x97, 0x05, 0x01, 0x4F, 0x96, 0x02, 0x00, 0x08, 0x96, 0x1C, 0x96, 0x02, 0x00, 0x08,
- 0x0D, 0x4E, 0x96, 0x04, 0x00, 0x08, 0x98, 0x05, 0x01, 0x4F, 0x96, 0x02, 0x00, 0x08, 0x96, 0x1C,
- 0x96, 0x02, 0x00, 0x08, 0x0D, 0x4E, 0x96, 0x02, 0x00, 0x08, 0x99, 0x8E, 0x10, 0x00, 0x00, 0x01,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x6D, 0x65, 0x74, 0x68, 0x6F, 0x64, 0x00, 0x5B, 0x00, 0x96, 0x09,
- 0x00, 0x08, 0x9C, 0x07, 0x00, 0x00, 0x00, 0x00, 0x08, 0x9A, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x9B,
- 0x52, 0x3C, 0x96, 0x02, 0x00, 0x08, 0x9C, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x9D, 0x49, 0x9D, 0x02,
- 0x00, 0x2D, 0x00, 0x96, 0x02, 0x00, 0x08, 0x9C, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x9E, 0x49, 0x9D,
- 0x02, 0x00, 0x0E, 0x00, 0x96, 0x05, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 0x3E, 0x99, 0x02, 0x00,
- 0x09, 0x00, 0x96, 0x05, 0x00, 0x07, 0x01, 0x00, 0x00, 0x00, 0x3E, 0x99, 0x02, 0x00, 0x09, 0x00,
- 0x96, 0x05, 0x00, 0x07, 0x02, 0x00, 0x00, 0x00, 0x3E, 0x4F, 0x96, 0x02, 0x00, 0x08, 0x96, 0x1C,
- 0x96, 0x02, 0x00, 0x08, 0x0D, 0x4E, 0x96, 0x02, 0x00, 0x08, 0x9F, 0x8E, 0x1D, 0x00, 0x00, 0x03,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x75, 0x72, 0x6C, 0x00, 0x00, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74,
- 0x00, 0x00, 0x6D, 0x65, 0x74, 0x68, 0x6F, 0x64, 0x00, 0x97, 0x00, 0x96, 0x02, 0x00, 0x08, 0x92,
- 0x1C, 0x44, 0x96, 0x02, 0x00, 0x08, 0x09, 0x49, 0x12, 0x9D, 0x02, 0x00, 0x08, 0x00, 0x96, 0x04,
- 0x00, 0x08, 0x92, 0x08, 0x68, 0x1D, 0x96, 0x04, 0x00, 0x08, 0xA0, 0x08, 0x9A, 0x1C, 0x96, 0x07,
- 0x00, 0x07, 0x01, 0x00, 0x00, 0x00, 0x08, 0x0A, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x99, 0x52, 0x3C,
- 0x96, 0x02, 0x00, 0x08, 0xA0, 0x1C, 0x96, 0x05, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 0x49, 0x9D,
- 0x02, 0x00, 0x3E, 0x00, 0x96, 0x02, 0x00, 0x08, 0xA0, 0x1C, 0x96, 0x05, 0x00, 0x07, 0x01, 0x00,
- 0x00, 0x00, 0x49, 0x9D, 0x02, 0x00, 0x15, 0x00, 0x96, 0x02, 0x00, 0x08, 0xA1, 0x1C, 0x96, 0x02,
- 0x00, 0x08, 0x92, 0x1C, 0x9A, 0x01, 0x00, 0x02, 0x99, 0x02, 0x00, 0x10, 0x00, 0x96, 0x02, 0x00,
- 0x08, 0xA1, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x92, 0x1C, 0x9A, 0x01, 0x00, 0x01, 0x99, 0x02, 0x00,
- 0x10, 0x00, 0x96, 0x02, 0x00, 0x08, 0xA1, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x92, 0x1C, 0x9A, 0x01,
- 0x00, 0x00, 0x4F, 0x96, 0x02, 0x00, 0x08, 0x96, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x0D, 0x4E, 0x96,
- 0x02, 0x00, 0x08, 0xA2, 0x8E, 0x15, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x75, 0x72,
- 0x6C, 0x00, 0x00, 0x6D, 0x65, 0x74, 0x68, 0x6F, 0x64, 0x00, 0x99, 0x00, 0x96, 0x04, 0x00, 0x08,
- 0xA0, 0x08, 0x9A, 0x1C, 0x96, 0x07, 0x00, 0x07, 0x01, 0x00, 0x00, 0x00, 0x08, 0x0A, 0x1C, 0x96,
- 0x02, 0x00, 0x08, 0x99, 0x52, 0x3C, 0x96, 0x02, 0x00, 0x08, 0x0A, 0x1C, 0x20, 0x96, 0x02, 0x00,
- 0x08, 0xA0, 0x1C, 0x96, 0x05, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 0x49, 0x9D, 0x02, 0x00, 0x4A,
- 0x00, 0x96, 0x02, 0x00, 0x08, 0xA0, 0x1C, 0x96, 0x05, 0x00, 0x07, 0x01, 0x00, 0x00, 0x00, 0x49,
- 0x9D, 0x02, 0x00, 0x1B, 0x00, 0x96, 0x02, 0x00, 0x08, 0xA1, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x0A,
- 0x1C, 0x96, 0x02, 0x00, 0x08, 0xA3, 0x4E, 0x9A, 0x01, 0x00, 0xC2, 0x99, 0x02, 0x00, 0x16, 0x00,
- 0x96, 0x02, 0x00, 0x08, 0xA1, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x0A, 0x1C, 0x96, 0x02, 0x00, 0x08,
- 0xA3, 0x4E, 0x9A, 0x01, 0x00, 0xC1, 0x99, 0x02, 0x00, 0x16, 0x00, 0x96, 0x02, 0x00, 0x08, 0xA1,
- 0x1C, 0x96, 0x02, 0x00, 0x08, 0x0A, 0x1C, 0x96, 0x02, 0x00, 0x08, 0xA3, 0x4E, 0x9A, 0x01, 0x00,
- 0xC0, 0x8B, 0x01, 0x00, 0x00, 0x4F, 0x96, 0x02, 0x00, 0x08, 0x96, 0x1C, 0x96, 0x02, 0x00, 0x08,
- 0x0D, 0x4E, 0x96, 0x02, 0x00, 0x08, 0xA4, 0x8E, 0x15, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x75, 0x72, 0x6C, 0x00, 0x00, 0x6D, 0x65, 0x74, 0x68, 0x6F, 0x64, 0x00, 0x99, 0x00, 0x96,
- 0x04, 0x00, 0x08, 0xA0, 0x08, 0x9A, 0x1C, 0x96, 0x07, 0x00, 0x07, 0x01, 0x00, 0x00, 0x00, 0x08,
- 0x0A, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x99, 0x52, 0x3C, 0x96, 0x02, 0x00, 0x08, 0x0A, 0x1C, 0x20,
- 0x96, 0x02, 0x00, 0x08, 0xA0, 0x1C, 0x96, 0x05, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 0x49, 0x9D,
- 0x02, 0x00, 0x4A, 0x00, 0x96, 0x02, 0x00, 0x08, 0xA0, 0x1C, 0x96, 0x05, 0x00, 0x07, 0x01, 0x00,
- 0x00, 0x00, 0x49, 0x9D, 0x02, 0x00, 0x1B, 0x00, 0x96, 0x02, 0x00, 0x08, 0xA1, 0x1C, 0x96, 0x02,
- 0x00, 0x08, 0x0A, 0x1C, 0x96, 0x02, 0x00, 0x08, 0xA3, 0x4E, 0x9A, 0x01, 0x00, 0x42, 0x99, 0x02,
- 0x00, 0x16, 0x00, 0x96, 0x02, 0x00, 0x08, 0xA1, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x0A, 0x1C, 0x96,
- 0x02, 0x00, 0x08, 0xA3, 0x4E, 0x9A, 0x01, 0x00, 0x41, 0x99, 0x02, 0x00, 0x16, 0x00, 0x96, 0x02,
- 0x00, 0x08, 0xA1, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x0A, 0x1C, 0x96, 0x02, 0x00, 0x08, 0xA3, 0x4E,
- 0x9A, 0x01, 0x00, 0x40, 0x8B, 0x01, 0x00, 0x00, 0x4F, 0x96, 0x02, 0x00, 0x08, 0x96, 0x1C, 0x96,
- 0x02, 0x00, 0x08, 0x0D, 0x4E, 0x96, 0x02, 0x00, 0x08, 0xA5, 0x8E, 0x08, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x1D, 0x00, 0x96, 0x02, 0x00, 0x08, 0x0A, 0x1C, 0x20, 0x96, 0x04, 0x00, 0x08,
- 0x68, 0x08, 0x0A, 0x1C, 0x96, 0x02, 0x00, 0x08, 0xA3, 0x4E, 0x9A, 0x01, 0x00, 0x40, 0x8B, 0x01,
- 0x00, 0x00, 0x4F, 0x96, 0x02, 0x00, 0x08, 0x96, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x0D, 0x4E, 0x96,
- 0x02, 0x00, 0x08, 0xA6, 0x8E, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x12, 0x00, 0x96,
- 0x02, 0x00, 0x08, 0x0A, 0x1C, 0x96, 0x07, 0x00, 0x07, 0x01, 0x00, 0x00, 0x00, 0x08, 0x94, 0x40,
- 0x3E, 0x4F, 0x96, 0x09, 0x00, 0x07, 0x80, 0x00, 0x00, 0x00, 0x08, 0xA6, 0x08, 0x96, 0x1C, 0x96,
- 0x02, 0x00, 0x08, 0x0D, 0x4E, 0x96, 0x07, 0x00, 0x07, 0x03, 0x00, 0x00, 0x00, 0x08, 0x00, 0x3D,
- 0x17, 0x96, 0x09, 0x00, 0x08, 0xA7, 0x07, 0x84, 0x03, 0x00, 0x00, 0x08, 0x96, 0x1C, 0x96, 0x02,
- 0x00, 0x08, 0x0D, 0x4E, 0x96, 0x07, 0x00, 0x07, 0x03, 0x00, 0x00, 0x00, 0x08, 0x02, 0x3D, 0x17,
- 0x96, 0x0E, 0x00, 0x07, 0xC8, 0x00, 0x00, 0x00, 0x08, 0xA8, 0x07, 0x84, 0x03, 0x00, 0x00, 0x08,
+ 0x86, 0x52, 0x17, 0x4F, 0x96, 0x08, 0x00, 0x07, 0x03, 0x00, 0x00, 0x00, 0x02, 0x08, 0x6E, 0x1C,
+ 0x96, 0x02, 0x00, 0x08, 0x7B, 0x4E, 0x96, 0x02, 0x00, 0x08, 0x0D, 0x4E, 0x96, 0x07, 0x00, 0x07,
+ 0x03, 0x00, 0x00, 0x00, 0x08, 0x00, 0x3D, 0x17, 0x96, 0x02, 0x00, 0x08, 0x6E, 0x1C, 0x96, 0x27,
+ 0x00, 0x08, 0x87, 0x08, 0x88, 0x08, 0x88, 0x08, 0x89, 0x08, 0x89, 0x08, 0x8A, 0x08, 0x8A, 0x08,
+ 0x8B, 0x08, 0x8B, 0x08, 0x8C, 0x08, 0x8C, 0x08, 0x8D, 0x08, 0x8D, 0x08, 0x8E, 0x08, 0x8E, 0x08,
+ 0x8F, 0x08, 0x8F, 0x07, 0x08, 0x00, 0x00, 0x00, 0x43, 0x4F, 0x96, 0x02, 0x00, 0x08, 0x6E, 0x1C,
+ 0x96, 0x02, 0x00, 0x08, 0x87, 0x4E, 0x96, 0x07, 0x00, 0x07, 0x01, 0x00, 0x00, 0x00, 0x08, 0x10,
+ 0x1C, 0x96, 0x02, 0x00, 0x08, 0x1B, 0x52, 0x17, 0x96, 0x09, 0x00, 0x08, 0x90, 0x07, 0x0D, 0x00,
+ 0x00, 0x00, 0x08, 0x6E, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x87, 0x4E, 0x96, 0x07, 0x00, 0x07, 0x03,
+ 0x00, 0x00, 0x00, 0x08, 0x02, 0x3D, 0x17, 0x96, 0x08, 0x00, 0x07, 0x07, 0x00, 0x00, 0x00, 0x02,
+ 0x08, 0x6E, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x87, 0x4E, 0x96, 0x07, 0x00, 0x07, 0x03, 0x00, 0x00,
+ 0x00, 0x08, 0x00, 0x3D, 0x17, 0x96, 0x02, 0x00, 0x08, 0x91, 0x8E, 0x10, 0x00, 0x00, 0x01, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x00, 0x27, 0x00, 0x96, 0x02, 0x00,
+ 0x08, 0x0A, 0x1C, 0x96, 0x04, 0x00, 0x08, 0x92, 0x08, 0x92, 0x1C, 0x4F, 0x96, 0x08, 0x00, 0x07,
+ 0x07, 0x00, 0x00, 0x00, 0x02, 0x08, 0x0A, 0x1C, 0x96, 0x07, 0x00, 0x07, 0x03, 0x00, 0x00, 0x00,
+ 0x08, 0x00, 0x3D, 0x17, 0x1D, 0x96, 0x09, 0x00, 0x08, 0x93, 0x07, 0xBC, 0x02, 0x00, 0x00, 0x08,
+ 0x91, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x0D, 0x4E, 0x96, 0x07, 0x00, 0x07, 0x03, 0x00, 0x00, 0x00,
+ 0x08, 0x02, 0x3D, 0x17, 0x96, 0x08, 0x00, 0x07, 0x07, 0x00, 0x00, 0x00, 0x02, 0x08, 0x91, 0x1C,
+ 0x96, 0x02, 0x00, 0x08, 0x0D, 0x4E, 0x96, 0x07, 0x00, 0x07, 0x03, 0x00, 0x00, 0x00, 0x08, 0x00,
+ 0x3D, 0x17, 0x96, 0x13, 0x00, 0x08, 0x94, 0x07, 0x00, 0x00, 0x00, 0x00, 0x07, 0x2B, 0x04, 0x00,
+ 0x00, 0x07, 0x02, 0x00, 0x00, 0x00, 0x08, 0x39, 0x3D, 0x1D, 0x96, 0x0E, 0x00, 0x07, 0x01, 0x00,
+ 0x00, 0x00, 0x08, 0x95, 0x07, 0x2B, 0x04, 0x00, 0x00, 0x08, 0x94, 0x1C, 0x96, 0x02, 0x00, 0x08,
+ 0x0D, 0x4E, 0x96, 0x07, 0x00, 0x07, 0x04, 0x00, 0x00, 0x00, 0x08, 0x02, 0x3D, 0x17, 0x96, 0x02,
+ 0x00, 0x08, 0x96, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x0D, 0x4E, 0x96, 0x04, 0x00, 0x08, 0x97, 0x05,
+ 0x01, 0x4F, 0x96, 0x02, 0x00, 0x08, 0x96, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x0D, 0x4E, 0x96, 0x04,
+ 0x00, 0x08, 0x98, 0x05, 0x01, 0x4F, 0x96, 0x02, 0x00, 0x08, 0x96, 0x1C, 0x96, 0x02, 0x00, 0x08,
+ 0x0D, 0x4E, 0x96, 0x02, 0x00, 0x08, 0x99, 0x8E, 0x10, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x6D, 0x65, 0x74, 0x68, 0x6F, 0x64, 0x00, 0x5B, 0x00, 0x96, 0x09, 0x00, 0x08, 0x9C, 0x07,
+ 0x00, 0x00, 0x00, 0x00, 0x08, 0x9A, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x9B, 0x52, 0x3C, 0x96, 0x02,
+ 0x00, 0x08, 0x9C, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x9D, 0x49, 0x9D, 0x02, 0x00, 0x2D, 0x00, 0x96,
+ 0x02, 0x00, 0x08, 0x9C, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x9E, 0x49, 0x9D, 0x02, 0x00, 0x0E, 0x00,
+ 0x96, 0x05, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 0x3E, 0x99, 0x02, 0x00, 0x09, 0x00, 0x96, 0x05,
+ 0x00, 0x07, 0x01, 0x00, 0x00, 0x00, 0x3E, 0x99, 0x02, 0x00, 0x09, 0x00, 0x96, 0x05, 0x00, 0x07,
+ 0x02, 0x00, 0x00, 0x00, 0x3E, 0x4F, 0x96, 0x02, 0x00, 0x08, 0x96, 0x1C, 0x96, 0x02, 0x00, 0x08,
+ 0x0D, 0x4E, 0x96, 0x02, 0x00, 0x08, 0x9F, 0x8E, 0x1D, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x75, 0x72, 0x6C, 0x00, 0x00, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x00, 0x00, 0x6D, 0x65,
+ 0x74, 0x68, 0x6F, 0x64, 0x00, 0x97, 0x00, 0x96, 0x02, 0x00, 0x08, 0x92, 0x1C, 0x44, 0x96, 0x02,
+ 0x00, 0x08, 0x09, 0x49, 0x12, 0x9D, 0x02, 0x00, 0x08, 0x00, 0x96, 0x04, 0x00, 0x08, 0x92, 0x08,
+ 0x68, 0x1D, 0x96, 0x04, 0x00, 0x08, 0xA0, 0x08, 0x9A, 0x1C, 0x96, 0x07, 0x00, 0x07, 0x01, 0x00,
+ 0x00, 0x00, 0x08, 0x0A, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x99, 0x52, 0x3C, 0x96, 0x02, 0x00, 0x08,
+ 0xA0, 0x1C, 0x96, 0x05, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 0x49, 0x9D, 0x02, 0x00, 0x3E, 0x00,
+ 0x96, 0x02, 0x00, 0x08, 0xA0, 0x1C, 0x96, 0x05, 0x00, 0x07, 0x01, 0x00, 0x00, 0x00, 0x49, 0x9D,
+ 0x02, 0x00, 0x15, 0x00, 0x96, 0x02, 0x00, 0x08, 0xA1, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x92, 0x1C,
+ 0x9A, 0x01, 0x00, 0x02, 0x99, 0x02, 0x00, 0x10, 0x00, 0x96, 0x02, 0x00, 0x08, 0xA1, 0x1C, 0x96,
+ 0x02, 0x00, 0x08, 0x92, 0x1C, 0x9A, 0x01, 0x00, 0x01, 0x99, 0x02, 0x00, 0x10, 0x00, 0x96, 0x02,
+ 0x00, 0x08, 0xA1, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x92, 0x1C, 0x9A, 0x01, 0x00, 0x00, 0x4F, 0x96,
+ 0x02, 0x00, 0x08, 0x96, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x0D, 0x4E, 0x96, 0x02, 0x00, 0x08, 0xA2,
+ 0x8E, 0x15, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x75, 0x72, 0x6C, 0x00, 0x00, 0x6D,
+ 0x65, 0x74, 0x68, 0x6F, 0x64, 0x00, 0x99, 0x00, 0x96, 0x04, 0x00, 0x08, 0xA0, 0x08, 0x9A, 0x1C,
+ 0x96, 0x07, 0x00, 0x07, 0x01, 0x00, 0x00, 0x00, 0x08, 0x0A, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x99,
+ 0x52, 0x3C, 0x96, 0x02, 0x00, 0x08, 0x0A, 0x1C, 0x20, 0x96, 0x02, 0x00, 0x08, 0xA0, 0x1C, 0x96,
+ 0x05, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 0x49, 0x9D, 0x02, 0x00, 0x4A, 0x00, 0x96, 0x02, 0x00,
+ 0x08, 0xA0, 0x1C, 0x96, 0x05, 0x00, 0x07, 0x01, 0x00, 0x00, 0x00, 0x49, 0x9D, 0x02, 0x00, 0x1B,
+ 0x00, 0x96, 0x02, 0x00, 0x08, 0xA1, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x0A, 0x1C, 0x96, 0x02, 0x00,
+ 0x08, 0xA3, 0x4E, 0x9A, 0x01, 0x00, 0xC2, 0x99, 0x02, 0x00, 0x16, 0x00, 0x96, 0x02, 0x00, 0x08,
+ 0xA1, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x0A, 0x1C, 0x96, 0x02, 0x00, 0x08, 0xA3, 0x4E, 0x9A, 0x01,
+ 0x00, 0xC1, 0x99, 0x02, 0x00, 0x16, 0x00, 0x96, 0x02, 0x00, 0x08, 0xA1, 0x1C, 0x96, 0x02, 0x00,
+ 0x08, 0x0A, 0x1C, 0x96, 0x02, 0x00, 0x08, 0xA3, 0x4E, 0x9A, 0x01, 0x00, 0xC0, 0x8B, 0x01, 0x00,
+ 0x00, 0x4F, 0x96, 0x02, 0x00, 0x08, 0x96, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x0D, 0x4E, 0x96, 0x02,
+ 0x00, 0x08, 0xA4, 0x8E, 0x15, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x75, 0x72, 0x6C,
+ 0x00, 0x00, 0x6D, 0x65, 0x74, 0x68, 0x6F, 0x64, 0x00, 0x99, 0x00, 0x96, 0x04, 0x00, 0x08, 0xA0,
+ 0x08, 0x9A, 0x1C, 0x96, 0x07, 0x00, 0x07, 0x01, 0x00, 0x00, 0x00, 0x08, 0x0A, 0x1C, 0x96, 0x02,
+ 0x00, 0x08, 0x99, 0x52, 0x3C, 0x96, 0x02, 0x00, 0x08, 0x0A, 0x1C, 0x20, 0x96, 0x02, 0x00, 0x08,
+ 0xA0, 0x1C, 0x96, 0x05, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 0x49, 0x9D, 0x02, 0x00, 0x4A, 0x00,
+ 0x96, 0x02, 0x00, 0x08, 0xA0, 0x1C, 0x96, 0x05, 0x00, 0x07, 0x01, 0x00, 0x00, 0x00, 0x49, 0x9D,
+ 0x02, 0x00, 0x1B, 0x00, 0x96, 0x02, 0x00, 0x08, 0xA1, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x0A, 0x1C,
+ 0x96, 0x02, 0x00, 0x08, 0xA3, 0x4E, 0x9A, 0x01, 0x00, 0x42, 0x99, 0x02, 0x00, 0x16, 0x00, 0x96,
+ 0x02, 0x00, 0x08, 0xA1, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x0A, 0x1C, 0x96, 0x02, 0x00, 0x08, 0xA3,
+ 0x4E, 0x9A, 0x01, 0x00, 0x41, 0x99, 0x02, 0x00, 0x16, 0x00, 0x96, 0x02, 0x00, 0x08, 0xA1, 0x1C,
+ 0x96, 0x02, 0x00, 0x08, 0x0A, 0x1C, 0x96, 0x02, 0x00, 0x08, 0xA3, 0x4E, 0x9A, 0x01, 0x00, 0x40,
+ 0x8B, 0x01, 0x00, 0x00, 0x4F, 0x96, 0x02, 0x00, 0x08, 0x96, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x0D,
+ 0x4E, 0x96, 0x02, 0x00, 0x08, 0xA5, 0x8E, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1D,
+ 0x00, 0x96, 0x02, 0x00, 0x08, 0x0A, 0x1C, 0x20, 0x96, 0x04, 0x00, 0x08, 0x68, 0x08, 0x0A, 0x1C,
+ 0x96, 0x02, 0x00, 0x08, 0xA3, 0x4E, 0x9A, 0x01, 0x00, 0x40, 0x8B, 0x01, 0x00, 0x00, 0x4F, 0x96,
+ 0x02, 0x00, 0x08, 0x96, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x0D, 0x4E, 0x96, 0x02, 0x00, 0x08, 0xA6,
+ 0x8E, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x12, 0x00, 0x96, 0x02, 0x00, 0x08, 0x0A,
+ 0x1C, 0x96, 0x07, 0x00, 0x07, 0x01, 0x00, 0x00, 0x00, 0x08, 0x94, 0x40, 0x3E, 0x4F, 0x96, 0x09,
+ 0x00, 0x07, 0x80, 0x00, 0x00, 0x00, 0x08, 0xA6, 0x08, 0x96, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x0D,
+ 0x4E, 0x96, 0x07, 0x00, 0x07, 0x03, 0x00, 0x00, 0x00, 0x08, 0x00, 0x3D, 0x17, 0x96, 0x09, 0x00,
+ 0x08, 0xA7, 0x07, 0x84, 0x03, 0x00, 0x00, 0x08, 0x96, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x0D, 0x4E,
+ 0x96, 0x07, 0x00, 0x07, 0x03, 0x00, 0x00, 0x00, 0x08, 0x02, 0x3D, 0x17, 0x96, 0x0E, 0x00, 0x07,
+ 0xC8, 0x00, 0x00, 0x00, 0x08, 0xA8, 0x07, 0x84, 0x03, 0x00, 0x00, 0x08, 0x96, 0x1C, 0x96, 0x02,
+ 0x00, 0x08, 0x0D, 0x4E, 0x96, 0x07, 0x00, 0x07, 0x04, 0x00, 0x00, 0x00, 0x08, 0x03, 0x3D, 0x17,
+ 0x96, 0x0E, 0x00, 0x07, 0x2C, 0x01, 0x00, 0x00, 0x08, 0xA9, 0x07, 0x84, 0x03, 0x00, 0x00, 0x08,
0x96, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x0D, 0x4E, 0x96, 0x07, 0x00, 0x07, 0x04, 0x00, 0x00, 0x00,
- 0x08, 0x03, 0x3D, 0x17, 0x96, 0x0E, 0x00, 0x07, 0x2C, 0x01, 0x00, 0x00, 0x08, 0xA9, 0x07, 0x84,
+ 0x08, 0x03, 0x3D, 0x17, 0x96, 0x0E, 0x00, 0x07, 0x91, 0x01, 0x00, 0x00, 0x08, 0xAA, 0x07, 0x84,
0x03, 0x00, 0x00, 0x08, 0x96, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x0D, 0x4E, 0x96, 0x07, 0x00, 0x07,
- 0x04, 0x00, 0x00, 0x00, 0x08, 0x03, 0x3D, 0x17, 0x96, 0x0E, 0x00, 0x07, 0x91, 0x01, 0x00, 0x00,
- 0x08, 0xAA, 0x07, 0x84, 0x03, 0x00, 0x00, 0x08, 0x96, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x0D, 0x4E,
+ 0x04, 0x00, 0x00, 0x00, 0x08, 0x03, 0x3D, 0x17, 0x96, 0x0E, 0x00, 0x07, 0xA1, 0x01, 0x00, 0x00,
+ 0x08, 0xAB, 0x07, 0x84, 0x03, 0x00, 0x00, 0x08, 0x96, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x0D, 0x4E,
0x96, 0x07, 0x00, 0x07, 0x04, 0x00, 0x00, 0x00, 0x08, 0x03, 0x3D, 0x17, 0x96, 0x0E, 0x00, 0x07,
- 0xA1, 0x01, 0x00, 0x00, 0x08, 0xAB, 0x07, 0x84, 0x03, 0x00, 0x00, 0x08, 0x96, 0x1C, 0x96, 0x02,
+ 0xF4, 0x01, 0x00, 0x00, 0x08, 0xAC, 0x07, 0x84, 0x03, 0x00, 0x00, 0x08, 0x96, 0x1C, 0x96, 0x02,
0x00, 0x08, 0x0D, 0x4E, 0x96, 0x07, 0x00, 0x07, 0x04, 0x00, 0x00, 0x00, 0x08, 0x03, 0x3D, 0x17,
- 0x96, 0x0E, 0x00, 0x07, 0xF4, 0x01, 0x00, 0x00, 0x08, 0xAC, 0x07, 0x84, 0x03, 0x00, 0x00, 0x08,
- 0x96, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x0D, 0x4E, 0x96, 0x07, 0x00, 0x07, 0x04, 0x00, 0x00, 0x00,
- 0x08, 0x03, 0x3D, 0x17, 0x96, 0x09, 0x00, 0x08, 0xAD, 0x07, 0x85, 0x03, 0x00, 0x00, 0x08, 0x96,
+ 0x96, 0x09, 0x00, 0x08, 0xAD, 0x07, 0x85, 0x03, 0x00, 0x00, 0x08, 0x96, 0x1C, 0x96, 0x02, 0x00,
+ 0x08, 0x0D, 0x4E, 0x96, 0x07, 0x00, 0x07, 0x03, 0x00, 0x00, 0x00, 0x08, 0x02, 0x3D, 0x17, 0x96,
+ 0x0E, 0x00, 0x07, 0x0C, 0x00, 0x00, 0x00, 0x08, 0xAE, 0x07, 0x85, 0x03, 0x00, 0x00, 0x08, 0x96,
+ 0x1C, 0x96, 0x02, 0x00, 0x08, 0x0D, 0x4E, 0x96, 0x07, 0x00, 0x07, 0x04, 0x00, 0x00, 0x00, 0x08,
+ 0x03, 0x3D, 0x17, 0x96, 0x02, 0x00, 0x08, 0x96, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x0D, 0x4E, 0x96,
+ 0x13, 0x00, 0x08, 0xAF, 0x07, 0xC8, 0x00, 0x00, 0x00, 0x07, 0x68, 0x00, 0x00, 0x00, 0x07, 0x02,
+ 0x00, 0x00, 0x00, 0x08, 0x01, 0x3D, 0x4F, 0x96, 0x08, 0x00, 0x07, 0x03, 0x00, 0x00, 0x00, 0x02,
+ 0x08, 0x96, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x0D, 0x4E, 0x96, 0x07, 0x00, 0x07, 0x03, 0x00, 0x00,
+ 0x00, 0x08, 0x00, 0x3D, 0x17, 0x96, 0x13, 0x00, 0x08, 0xB0, 0x07, 0x00, 0x00, 0x00, 0x00, 0x07,
+ 0x70, 0x00, 0x00, 0x00, 0x07, 0x02, 0x00, 0x00, 0x00, 0x08, 0x39, 0x3D, 0x1D, 0x96, 0x0E, 0x00,
+ 0x07, 0x64, 0x00, 0x00, 0x00, 0x08, 0xB1, 0x07, 0x70, 0x00, 0x00, 0x00, 0x08, 0xB0, 0x1C, 0x96,
+ 0x02, 0x00, 0x08, 0x0D, 0x4E, 0x96, 0x07, 0x00, 0x07, 0x04, 0x00, 0x00, 0x00, 0x08, 0x02, 0x3D,
+ 0x17, 0x96, 0x02, 0x00, 0x08, 0xB0, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x0D, 0x4E, 0x96, 0x07, 0x00,
+ 0x07, 0x01, 0x00, 0x00, 0x00, 0x08, 0x10, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x1B, 0x52, 0x17, 0x96,
+ 0x08, 0x00, 0x07, 0x03, 0x04, 0x00, 0x00, 0x02, 0x08, 0xB0, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x0D,
+ 0x4E, 0x96, 0x07, 0x00, 0x07, 0x03, 0x00, 0x00, 0x00, 0x08, 0x00, 0x3D, 0x17, 0x96, 0x13, 0x00,
+ 0x08, 0xB2, 0x07, 0x00, 0x00, 0x00, 0x00, 0x07, 0x68, 0x00, 0x00, 0x00, 0x07, 0x02, 0x00, 0x00,
+ 0x00, 0x08, 0x39, 0x3D, 0x1D, 0x96, 0x02, 0x00, 0x08, 0xB2, 0x1C, 0x96, 0x13, 0x00, 0x08, 0xB3,
+ 0x07, 0xC9, 0x00, 0x00, 0x00, 0x07, 0x68, 0x00, 0x00, 0x00, 0x07, 0x02, 0x00, 0x00, 0x00, 0x08,
+ 0x01, 0x3D, 0x4F, 0x96, 0x0E, 0x00, 0x07, 0x64, 0x00, 0x00, 0x00, 0x08, 0xB4, 0x07, 0x68, 0x00,
+ 0x00, 0x00, 0x08, 0xB2, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x0D, 0x4E, 0x96, 0x07, 0x00, 0x07, 0x04,
+ 0x00, 0x00, 0x00, 0x08, 0x02, 0x3D, 0x17, 0x96, 0x02, 0x00, 0x08, 0xB2, 0x1C, 0x96, 0x02, 0x00,
+ 0x08, 0x0D, 0x4E, 0x96, 0x07, 0x00, 0x07, 0x01, 0x00, 0x00, 0x00, 0x08, 0x10, 0x1C, 0x96, 0x02,
+ 0x00, 0x08, 0x1B, 0x52, 0x17, 0x96, 0x08, 0x00, 0x07, 0x83, 0x00, 0x00, 0x00, 0x02, 0x08, 0xB2,
0x1C, 0x96, 0x02, 0x00, 0x08, 0x0D, 0x4E, 0x96, 0x07, 0x00, 0x07, 0x03, 0x00, 0x00, 0x00, 0x08,
- 0x02, 0x3D, 0x17, 0x96, 0x0E, 0x00, 0x07, 0x0C, 0x00, 0x00, 0x00, 0x08, 0xAE, 0x07, 0x85, 0x03,
- 0x00, 0x00, 0x08, 0x96, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x0D, 0x4E, 0x96, 0x07, 0x00, 0x07, 0x04,
- 0x00, 0x00, 0x00, 0x08, 0x03, 0x3D, 0x17, 0x96, 0x02, 0x00, 0x08, 0x96, 0x1C, 0x96, 0x02, 0x00,
- 0x08, 0x0D, 0x4E, 0x96, 0x13, 0x00, 0x08, 0xAF, 0x07, 0xC8, 0x00, 0x00, 0x00, 0x07, 0x68, 0x00,
- 0x00, 0x00, 0x07, 0x02, 0x00, 0x00, 0x00, 0x08, 0x01, 0x3D, 0x4F, 0x96, 0x08, 0x00, 0x07, 0x03,
- 0x00, 0x00, 0x00, 0x02, 0x08, 0x96, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x0D, 0x4E, 0x96, 0x07, 0x00,
- 0x07, 0x03, 0x00, 0x00, 0x00, 0x08, 0x00, 0x3D, 0x17, 0x96, 0x13, 0x00, 0x08, 0xB0, 0x07, 0x00,
- 0x00, 0x00, 0x00, 0x07, 0x70, 0x00, 0x00, 0x00, 0x07, 0x02, 0x00, 0x00, 0x00, 0x08, 0x39, 0x3D,
- 0x1D, 0x96, 0x0E, 0x00, 0x07, 0x64, 0x00, 0x00, 0x00, 0x08, 0xB1, 0x07, 0x70, 0x00, 0x00, 0x00,
- 0x08, 0xB0, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x0D, 0x4E, 0x96, 0x07, 0x00, 0x07, 0x04, 0x00, 0x00,
- 0x00, 0x08, 0x02, 0x3D, 0x17, 0x96, 0x02, 0x00, 0x08, 0xB0, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x0D,
- 0x4E, 0x96, 0x07, 0x00, 0x07, 0x01, 0x00, 0x00, 0x00, 0x08, 0x10, 0x1C, 0x96, 0x02, 0x00, 0x08,
- 0x1B, 0x52, 0x17, 0x96, 0x08, 0x00, 0x07, 0x03, 0x04, 0x00, 0x00, 0x02, 0x08, 0xB0, 0x1C, 0x96,
- 0x02, 0x00, 0x08, 0x0D, 0x4E, 0x96, 0x07, 0x00, 0x07, 0x03, 0x00, 0x00, 0x00, 0x08, 0x00, 0x3D,
- 0x17, 0x96, 0x13, 0x00, 0x08, 0xB2, 0x07, 0x00, 0x00, 0x00, 0x00, 0x07, 0x68, 0x00, 0x00, 0x00,
- 0x07, 0x02, 0x00, 0x00, 0x00, 0x08, 0x39, 0x3D, 0x1D, 0x96, 0x02, 0x00, 0x08, 0xB2, 0x1C, 0x96,
- 0x13, 0x00, 0x08, 0xB3, 0x07, 0xC9, 0x00, 0x00, 0x00, 0x07, 0x68, 0x00, 0x00, 0x00, 0x07, 0x02,
- 0x00, 0x00, 0x00, 0x08, 0x01, 0x3D, 0x4F, 0x96, 0x0E, 0x00, 0x07, 0x64, 0x00, 0x00, 0x00, 0x08,
- 0xB4, 0x07, 0x68, 0x00, 0x00, 0x00, 0x08, 0xB2, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x0D, 0x4E, 0x96,
- 0x07, 0x00, 0x07, 0x04, 0x00, 0x00, 0x00, 0x08, 0x02, 0x3D, 0x17, 0x96, 0x02, 0x00, 0x08, 0xB2,
- 0x1C, 0x96, 0x02, 0x00, 0x08, 0x0D, 0x4E, 0x96, 0x07, 0x00, 0x07, 0x01, 0x00, 0x00, 0x00, 0x08,
- 0x10, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x1B, 0x52, 0x17, 0x96, 0x08, 0x00, 0x07, 0x83, 0x00, 0x00,
- 0x00, 0x02, 0x08, 0xB2, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x0D, 0x4E, 0x96, 0x07, 0x00, 0x07, 0x03,
- 0x00, 0x00, 0x00, 0x08, 0x00, 0x3D, 0x17, 0x96, 0x0E, 0x00, 0x07, 0x2C, 0x01, 0x00, 0x00, 0x08,
- 0xB5, 0x07, 0x68, 0x00, 0x00, 0x00, 0x08, 0xB2, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x0D, 0x4E, 0x96,
- 0x07, 0x00, 0x07, 0x04, 0x00, 0x00, 0x00, 0x08, 0x03, 0x3D, 0x17, 0x96, 0x0E, 0x00, 0x07, 0xC8,
- 0x00, 0x00, 0x00, 0x08, 0xB6, 0x07, 0x84, 0x03, 0x00, 0x00, 0x08, 0xB2, 0x1C, 0x96, 0x02, 0x00,
- 0x08, 0x0D, 0x4E, 0x96, 0x07, 0x00, 0x07, 0x04, 0x00, 0x00, 0x00, 0x08, 0x03, 0x3D, 0x17, 0x96,
- 0x08, 0x00, 0x07, 0x83, 0x00, 0x00, 0x00, 0x02, 0x08, 0xB2, 0x1C, 0x96, 0x07, 0x00, 0x07, 0x03,
- 0x00, 0x00, 0x00, 0x08, 0x00, 0x3D, 0x17, 0x96, 0x13, 0x00, 0x08, 0xB7, 0x07, 0x00, 0x00, 0x00,
- 0x00, 0x07, 0x6E, 0x00, 0x00, 0x00, 0x07, 0x02, 0x00, 0x00, 0x00, 0x08, 0x39, 0x3D, 0x1D, 0x96,
- 0x02, 0x00, 0x08, 0xB2, 0x1C, 0x96, 0x13, 0x00, 0x08, 0xB8, 0x07, 0x00, 0x00, 0x00, 0x00, 0x07,
- 0x71, 0x00, 0x00, 0x00, 0x07, 0x02, 0x00, 0x00, 0x00, 0x08, 0x39, 0x3D, 0x4F, 0x96, 0x02, 0x00,
- 0x08, 0xB2, 0x1C, 0x96, 0x02, 0x00, 0x08, 0xB8, 0x4E, 0x96, 0x02, 0x00, 0x08, 0x0D, 0x4E, 0x96,
- 0x02, 0x00, 0x08, 0xB9, 0x8E, 0x0B, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6F, 0x00,
- 0x67, 0x00, 0x96, 0x02, 0x00, 0x08, 0x1C, 0x1C, 0x44, 0x96, 0x02, 0x00, 0x08, 0xBA, 0x49, 0x12,
- 0x12, 0x9D, 0x02, 0x00, 0x05, 0x00, 0x96, 0x01, 0x00, 0x02, 0x3E, 0x96, 0x07, 0x00, 0x08, 0xBB,
- 0x07, 0x00, 0x00, 0x00, 0x00, 0x43, 0x3C, 0x96, 0x02, 0x00, 0x08, 0x1C, 0x46, 0x87, 0x01, 0x00,
- 0x00, 0x96, 0x01, 0x00, 0x02, 0x49, 0x9D, 0x02, 0x00, 0x27, 0x00, 0x96, 0x04, 0x00, 0x08, 0xBC,
- 0x04, 0x00, 0x3C, 0x96, 0x02, 0x00, 0x08, 0xBB, 0x1C, 0x96, 0x02, 0x00, 0x08, 0xBC, 0x1C, 0x96,
- 0x02, 0x00, 0x08, 0x1C, 0x1C, 0x96, 0x02, 0x00, 0x08, 0xBC, 0x1C, 0x4E, 0x4F, 0x99, 0x02, 0x00,
- 0xCB, 0xFF, 0x96, 0x02, 0x00, 0x08, 0xBB, 0x1C, 0x3E, 0x4F, 0x96, 0x02, 0x00, 0x08, 0xB2, 0x1C,
- 0x96, 0x02, 0x00, 0x08, 0xB8, 0x4E, 0x96, 0x02, 0x00, 0x08, 0x0D, 0x4E, 0x96, 0x02, 0x00, 0x08,
- 0xBD, 0x8E, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x36, 0x00, 0x96, 0x02, 0x00, 0x08,
- 0x0A, 0x1C, 0x96, 0x07, 0x00, 0x08, 0xBE, 0x07, 0x00, 0x00, 0x00, 0x00, 0x43, 0x4F, 0x96, 0x02,
- 0x00, 0x08, 0x0A, 0x1C, 0x96, 0x07, 0x00, 0x08, 0xBF, 0x07, 0x00, 0x00, 0x00, 0x00, 0x43, 0x4F,
- 0x96, 0x07, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 0x08, 0x0A, 0x1C, 0x96, 0x02, 0x00, 0x08, 0xC0,
- 0x52, 0x17, 0x4F, 0x96, 0x02, 0x00, 0x08, 0xB2, 0x1C, 0x96, 0x02, 0x00, 0x08, 0xB8, 0x4E, 0x96,
- 0x02, 0x00, 0x08, 0x0D, 0x4E, 0x96, 0x02, 0x00, 0x08, 0xC1, 0x8E, 0x0E, 0x00, 0x00, 0x01, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x6E, 0x61, 0x6D, 0x65, 0x00, 0x25, 0x00, 0x96, 0x02, 0x00, 0x08, 0x0A,
- 0x1C, 0x96, 0x02, 0x00, 0x08, 0xBE, 0x4E, 0x96, 0x02, 0x00, 0x08, 0x0E, 0x1C, 0x4E, 0x96, 0x07,
- 0x00, 0x07, 0x01, 0x00, 0x00, 0x00, 0x08, 0x0A, 0x1C, 0x96, 0x02, 0x00, 0x08, 0xB9, 0x52, 0x3E,
- 0x4F, 0x96, 0x02, 0x00, 0x08, 0xB2, 0x1C, 0x96, 0x02, 0x00, 0x08, 0xB8, 0x4E, 0x96, 0x02, 0x00,
- 0x08, 0x0D, 0x4E, 0x96, 0x02, 0x00, 0x08, 0xC2, 0x8E, 0x15, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x6E, 0x61, 0x6D, 0x65, 0x00, 0x00, 0x73, 0x74, 0x79, 0x6C, 0x65, 0x00, 0x79, 0x00,
- 0x96, 0x02, 0x00, 0x08, 0x0A, 0x1C, 0x96, 0x02, 0x00, 0x08, 0xBE, 0x4E, 0x12, 0x12, 0x9D, 0x02,
- 0x00, 0x12, 0x00, 0x96, 0x02, 0x00, 0x08, 0x0A, 0x1C, 0x96, 0x07, 0x00, 0x08, 0xBE, 0x07, 0x00,
- 0x00, 0x00, 0x00, 0x43, 0x4F, 0x96, 0x02, 0x00, 0x08, 0x0A, 0x1C, 0x96, 0x02, 0x00, 0x08, 0xBE,
- 0x4E, 0x96, 0x02, 0x00, 0x08, 0x0E, 0x1C, 0x96, 0x02, 0x00, 0x08, 0xC3, 0x1C, 0x96, 0x07, 0x00,
- 0x07, 0x01, 0x00, 0x00, 0x00, 0x08, 0x0A, 0x1C, 0x96, 0x02, 0x00, 0x08, 0xB9, 0x52, 0x4F, 0x96,
- 0x02, 0x00, 0x08, 0x0E, 0x1C, 0x96, 0x07, 0x00, 0x07, 0x01, 0x00, 0x00, 0x00, 0x08, 0x0A, 0x1C,
- 0x96, 0x02, 0x00, 0x08, 0xC4, 0x52, 0x17, 0x96, 0x07, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 0x08,
- 0x0A, 0x1C, 0x96, 0x02, 0x00, 0x08, 0xC0, 0x52, 0x17, 0x4F, 0x96, 0x02, 0x00, 0x08, 0xB2, 0x1C,
- 0x96, 0x02, 0x00, 0x08, 0xB8, 0x4E, 0x96, 0x02, 0x00, 0x08, 0x0D, 0x4E, 0x96, 0x02, 0x00, 0x08,
- 0xC5, 0x8E, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5B, 0x00, 0x96, 0x04, 0x00, 0x08,
- 0xC6, 0x08, 0x0A, 0x1C, 0x96, 0x02, 0x00, 0x08, 0xBE, 0x4E, 0x3C, 0x96, 0x07, 0x00, 0x08, 0xC7,
- 0x07, 0x00, 0x00, 0x00, 0x00, 0x42, 0x3C, 0x96, 0x02, 0x00, 0x08, 0xC6, 0x46, 0x87, 0x01, 0x00,
- 0x00, 0x96, 0x01, 0x00, 0x02, 0x49, 0x9D, 0x02, 0x00, 0x25, 0x00, 0x96, 0x04, 0x00, 0x08, 0xBC,
- 0x04, 0x00, 0x3C, 0x96, 0x02, 0x00, 0x08, 0xBC, 0x1C, 0x96, 0x07, 0x00, 0x07, 0x01, 0x00, 0x00,
- 0x00, 0x08, 0xC7, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x16, 0x52, 0x17, 0x99, 0x02, 0x00, 0xCD, 0xFF,
- 0x96, 0x02, 0x00, 0x08, 0xC7, 0x1C, 0x3E, 0x4F, 0x96, 0x02, 0x00, 0x08, 0xB2, 0x1C, 0x96, 0x02,
- 0x00, 0x08, 0xB8, 0x4E, 0x96, 0x02, 0x00, 0x08, 0x0D, 0x4E, 0x96, 0x02, 0x00, 0x08, 0xC4, 0x8E,
- 0x0E, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6E, 0x61, 0x6D, 0x65, 0x00, 0x5C, 0x00,
- 0x96, 0x02, 0x00, 0x08, 0x0A, 0x1C, 0x96, 0x02, 0x00, 0x08, 0xBF, 0x4E, 0x12, 0x12, 0x9D, 0x02,
- 0x00, 0x12, 0x00, 0x96, 0x02, 0x00, 0x08, 0x0A, 0x1C, 0x96, 0x07, 0x00, 0x08, 0xBF, 0x07, 0x00,
- 0x00, 0x00, 0x00, 0x43, 0x4F, 0x96, 0x02, 0x00, 0x08, 0x0A, 0x1C, 0x96, 0x02, 0x00, 0x08, 0xBF,
- 0x4E, 0x96, 0x02, 0x00, 0x08, 0x0E, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x0A, 0x1C, 0x96, 0x02, 0x00,
+ 0x00, 0x3D, 0x17, 0x96, 0x0E, 0x00, 0x07, 0x2C, 0x01, 0x00, 0x00, 0x08, 0xB5, 0x07, 0x68, 0x00,
+ 0x00, 0x00, 0x08, 0xB2, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x0D, 0x4E, 0x96, 0x07, 0x00, 0x07, 0x04,
+ 0x00, 0x00, 0x00, 0x08, 0x03, 0x3D, 0x17, 0x96, 0x0E, 0x00, 0x07, 0xC8, 0x00, 0x00, 0x00, 0x08,
+ 0xB6, 0x07, 0x84, 0x03, 0x00, 0x00, 0x08, 0xB2, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x0D, 0x4E, 0x96,
+ 0x07, 0x00, 0x07, 0x04, 0x00, 0x00, 0x00, 0x08, 0x03, 0x3D, 0x17, 0x96, 0x08, 0x00, 0x07, 0x83,
+ 0x00, 0x00, 0x00, 0x02, 0x08, 0xB2, 0x1C, 0x96, 0x07, 0x00, 0x07, 0x03, 0x00, 0x00, 0x00, 0x08,
+ 0x00, 0x3D, 0x17, 0x96, 0x13, 0x00, 0x08, 0xB7, 0x07, 0x00, 0x00, 0x00, 0x00, 0x07, 0x6E, 0x00,
+ 0x00, 0x00, 0x07, 0x02, 0x00, 0x00, 0x00, 0x08, 0x39, 0x3D, 0x1D, 0x96, 0x02, 0x00, 0x08, 0xB2,
+ 0x1C, 0x96, 0x13, 0x00, 0x08, 0xB8, 0x07, 0x00, 0x00, 0x00, 0x00, 0x07, 0x71, 0x00, 0x00, 0x00,
+ 0x07, 0x02, 0x00, 0x00, 0x00, 0x08, 0x39, 0x3D, 0x4F, 0x96, 0x02, 0x00, 0x08, 0xB2, 0x1C, 0x96,
+ 0x02, 0x00, 0x08, 0xB8, 0x4E, 0x96, 0x02, 0x00, 0x08, 0x0D, 0x4E, 0x96, 0x02, 0x00, 0x08, 0xB9,
+ 0x8E, 0x0B, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6F, 0x00, 0x67, 0x00, 0x96, 0x02,
+ 0x00, 0x08, 0x1C, 0x1C, 0x44, 0x96, 0x02, 0x00, 0x08, 0xBA, 0x49, 0x12, 0x12, 0x9D, 0x02, 0x00,
+ 0x05, 0x00, 0x96, 0x01, 0x00, 0x02, 0x3E, 0x96, 0x07, 0x00, 0x08, 0xBB, 0x07, 0x00, 0x00, 0x00,
+ 0x00, 0x43, 0x3C, 0x96, 0x02, 0x00, 0x08, 0x1C, 0x46, 0x87, 0x01, 0x00, 0x00, 0x96, 0x01, 0x00,
+ 0x02, 0x49, 0x9D, 0x02, 0x00, 0x27, 0x00, 0x96, 0x04, 0x00, 0x08, 0xBC, 0x04, 0x00, 0x3C, 0x96,
+ 0x02, 0x00, 0x08, 0xBB, 0x1C, 0x96, 0x02, 0x00, 0x08, 0xBC, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x1C,
+ 0x1C, 0x96, 0x02, 0x00, 0x08, 0xBC, 0x1C, 0x4E, 0x4F, 0x99, 0x02, 0x00, 0xCB, 0xFF, 0x96, 0x02,
+ 0x00, 0x08, 0xBB, 0x1C, 0x3E, 0x4F, 0x96, 0x02, 0x00, 0x08, 0xB2, 0x1C, 0x96, 0x02, 0x00, 0x08,
+ 0xB8, 0x4E, 0x96, 0x02, 0x00, 0x08, 0x0D, 0x4E, 0x96, 0x02, 0x00, 0x08, 0xBD, 0x8E, 0x08, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x36, 0x00, 0x96, 0x02, 0x00, 0x08, 0x0A, 0x1C, 0x96, 0x07,
+ 0x00, 0x08, 0xBE, 0x07, 0x00, 0x00, 0x00, 0x00, 0x43, 0x4F, 0x96, 0x02, 0x00, 0x08, 0x0A, 0x1C,
+ 0x96, 0x07, 0x00, 0x08, 0xBF, 0x07, 0x00, 0x00, 0x00, 0x00, 0x43, 0x4F, 0x96, 0x07, 0x00, 0x07,
+ 0x00, 0x00, 0x00, 0x00, 0x08, 0x0A, 0x1C, 0x96, 0x02, 0x00, 0x08, 0xC0, 0x52, 0x17, 0x4F, 0x96,
+ 0x02, 0x00, 0x08, 0xB2, 0x1C, 0x96, 0x02, 0x00, 0x08, 0xB8, 0x4E, 0x96, 0x02, 0x00, 0x08, 0x0D,
+ 0x4E, 0x96, 0x02, 0x00, 0x08, 0xC1, 0x8E, 0x0E, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x6E, 0x61, 0x6D, 0x65, 0x00, 0x25, 0x00, 0x96, 0x02, 0x00, 0x08, 0x0A, 0x1C, 0x96, 0x02, 0x00,
0x08, 0xBE, 0x4E, 0x96, 0x02, 0x00, 0x08, 0x0E, 0x1C, 0x4E, 0x96, 0x07, 0x00, 0x07, 0x01, 0x00,
- 0x00, 0x00, 0x08, 0x0A, 0x1C, 0x96, 0x02, 0x00, 0x08, 0xC8, 0x52, 0x4F, 0x4F, 0x96, 0x02, 0x00,
+ 0x00, 0x00, 0x08, 0x0A, 0x1C, 0x96, 0x02, 0x00, 0x08, 0xB9, 0x52, 0x3E, 0x4F, 0x96, 0x02, 0x00,
0x08, 0xB2, 0x1C, 0x96, 0x02, 0x00, 0x08, 0xB8, 0x4E, 0x96, 0x02, 0x00, 0x08, 0x0D, 0x4E, 0x96,
- 0x02, 0x00, 0x08, 0xC8, 0x8E, 0x0F, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x73, 0x74,
- 0x79, 0x6C, 0x65, 0x00, 0x9D, 0x03, 0x96, 0x02, 0x00, 0x08, 0xC3, 0x1C, 0x96, 0x01, 0x00, 0x02,
- 0x49, 0x12, 0x9D, 0x02, 0x00, 0x05, 0x00, 0x96, 0x01, 0x00, 0x02, 0x3E, 0x96, 0x09, 0x00, 0x08,
- 0xC9, 0x07, 0x00, 0x00, 0x00, 0x00, 0x08, 0xB7, 0x40, 0x3C, 0x96, 0x02, 0x00, 0x08, 0xC3, 0x1C,
- 0x96, 0x02, 0x00, 0x08, 0xCA, 0x4E, 0x12, 0x9D, 0x02, 0x00, 0x15, 0x00, 0x96, 0x02, 0x00, 0x08,
- 0xC9, 0x1C, 0x96, 0x04, 0x00, 0x08, 0xCB, 0x08, 0xC3, 0x1C, 0x96, 0x02, 0x00, 0x08, 0xCA, 0x4E,
- 0x4F, 0x96, 0x02, 0x00, 0x08, 0xC3, 0x1C, 0x96, 0x02, 0x00, 0x08, 0xCC, 0x4E, 0x96, 0x02, 0x00,
- 0x08, 0xCD, 0x49, 0x9D, 0x02, 0x00, 0x2B, 0x00, 0x96, 0x02, 0x00, 0x08, 0xC3, 0x1C, 0x96, 0x02,
- 0x00, 0x08, 0xCC, 0x4E, 0x96, 0x02, 0x00, 0x08, 0xCE, 0x49, 0x12, 0x9D, 0x02, 0x00, 0x0E, 0x00,
- 0x96, 0x02, 0x00, 0x08, 0xC9, 0x1C, 0x96, 0x04, 0x00, 0x08, 0xCD, 0x05, 0x00, 0x4F, 0x99, 0x02,
- 0x00, 0x0E, 0x00, 0x96, 0x02, 0x00, 0x08, 0xC9, 0x1C, 0x96, 0x04, 0x00, 0x08, 0xCD, 0x05, 0x01,
- 0x4F, 0x96, 0x02, 0x00, 0x08, 0xC3, 0x1C, 0x96, 0x02, 0x00, 0x08, 0xCF, 0x4E, 0x12, 0x9D, 0x02,
- 0x00, 0x41, 0x00, 0x96, 0x04, 0x00, 0x08, 0xC6, 0x08, 0xC3, 0x1C, 0x96, 0x02, 0x00, 0x08, 0xCF,
- 0x4E, 0x96, 0x07, 0x00, 0x07, 0x01, 0x00, 0x00, 0x00, 0x08, 0x0A, 0x1C, 0x96, 0x02, 0x00, 0x08,
- 0xD0, 0x52, 0x3C, 0x96, 0x02, 0x00, 0x08, 0xC6, 0x1C, 0x96, 0x01, 0x00, 0x02, 0x49, 0x12, 0x12,
- 0x9D, 0x02, 0x00, 0x0F, 0x00, 0x96, 0x02, 0x00, 0x08, 0xC9, 0x1C, 0x96, 0x04, 0x00, 0x08, 0xCF,
- 0x08, 0xC6, 0x1C, 0x4F, 0x96, 0x02, 0x00, 0x08, 0xC9, 0x1C, 0x96, 0x04, 0x00, 0x08, 0xD1, 0x08,
- 0xC3, 0x1C, 0x96, 0x02, 0x00, 0x08, 0xD1, 0x4E, 0x4F, 0x96, 0x02, 0x00, 0x08, 0xC3, 0x1C, 0x96,
- 0x02, 0x00, 0x08, 0xD2, 0x4E, 0x12, 0x9D, 0x02, 0x00, 0x26, 0x00, 0x96, 0x02, 0x00, 0x08, 0xC9,
- 0x1C, 0x96, 0x04, 0x00, 0x08, 0xD3, 0x08, 0xC3, 0x1C, 0x96, 0x02, 0x00, 0x08, 0xD2, 0x4E, 0x96,
- 0x07, 0x00, 0x07, 0x01, 0x00, 0x00, 0x00, 0x08, 0x0A, 0x1C, 0x96, 0x02, 0x00, 0x08, 0xD4, 0x52,
- 0x4F, 0x96, 0x02, 0x00, 0x08, 0xC3, 0x1C, 0x96, 0x02, 0x00, 0x08, 0xD5, 0x4E, 0x12, 0x9D, 0x02,
- 0x00, 0x20, 0x00, 0x96, 0x02, 0x00, 0x08, 0xC9, 0x1C, 0x96, 0x04, 0x00, 0x08, 0xD6, 0x08, 0xC3,
- 0x1C, 0x96, 0x02, 0x00, 0x08, 0xD5, 0x4E, 0x96, 0x07, 0x00, 0x07, 0x01, 0x00, 0x00, 0x00, 0x08,
- 0xD7, 0x3D, 0x4F, 0x96, 0x02, 0x00, 0x08, 0xC3, 0x1C, 0x96, 0x02, 0x00, 0x08, 0xD8, 0x4E, 0x96,
- 0x02, 0x00, 0x08, 0xD9, 0x49, 0x9D, 0x02, 0x00, 0x2B, 0x00, 0x96, 0x02, 0x00, 0x08, 0xC3, 0x1C,
- 0x96, 0x02, 0x00, 0x08, 0xD8, 0x4E, 0x96, 0x02, 0x00, 0x08, 0xCE, 0x49, 0x12, 0x9D, 0x02, 0x00,
- 0x0E, 0x00, 0x96, 0x02, 0x00, 0x08, 0xC9, 0x1C, 0x96, 0x04, 0x00, 0x08, 0xD9, 0x05, 0x00, 0x4F,
- 0x99, 0x02, 0x00, 0x0E, 0x00, 0x96, 0x02, 0x00, 0x08, 0xC9, 0x1C, 0x96, 0x04, 0x00, 0x08, 0xD9,
- 0x05, 0x01, 0x4F, 0x96, 0x02, 0x00, 0x08, 0xC3, 0x1C, 0x96, 0x02, 0x00, 0x08, 0xDA, 0x4E, 0x96,
- 0x02, 0x00, 0x08, 0xDB, 0x49, 0x9D, 0x02, 0x00, 0x4F, 0x00, 0x96, 0x02, 0x00, 0x08, 0xC3, 0x1C,
- 0x96, 0x02, 0x00, 0x08, 0xDA, 0x4E, 0x96, 0x02, 0x00, 0x08, 0xDC, 0x49, 0x9D, 0x02, 0x00, 0x25,
- 0x00, 0x96, 0x02, 0x00, 0x08, 0xC9, 0x1C, 0x96, 0x04, 0x00, 0x08, 0xDA, 0x08, 0xC3, 0x1C, 0x96,
- 0x02, 0x00, 0x08, 0xDA, 0x4E, 0x96, 0x07, 0x00, 0x07, 0x01, 0x00, 0x00, 0x00, 0x08, 0xD7, 0x3D,
- 0x4F, 0x99, 0x02, 0x00, 0x0E, 0x00, 0x96, 0x02, 0x00, 0x08, 0xC9, 0x1C, 0x96, 0x04, 0x00, 0x08,
- 0xDA, 0x05, 0x00, 0x4F, 0x99, 0x02, 0x00, 0x0E, 0x00, 0x96, 0x02, 0x00, 0x08, 0xC9, 0x1C, 0x96,
- 0x04, 0x00, 0x08, 0xDA, 0x05, 0x01, 0x4F, 0x96, 0x02, 0x00, 0x08, 0xC3, 0x1C, 0x96, 0x02, 0x00,
- 0x08, 0xDD, 0x4E, 0x12, 0x9D, 0x02, 0x00, 0x20, 0x00, 0x96, 0x02, 0x00, 0x08, 0xC9, 0x1C, 0x96,
- 0x04, 0x00, 0x08, 0xDD, 0x08, 0xC3, 0x1C, 0x96, 0x02, 0x00, 0x08, 0xDD, 0x4E, 0x96, 0x07, 0x00,
+ 0x02, 0x00, 0x08, 0xC2, 0x8E, 0x15, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6E, 0x61,
+ 0x6D, 0x65, 0x00, 0x00, 0x73, 0x74, 0x79, 0x6C, 0x65, 0x00, 0x79, 0x00, 0x96, 0x02, 0x00, 0x08,
+ 0x0A, 0x1C, 0x96, 0x02, 0x00, 0x08, 0xBE, 0x4E, 0x12, 0x12, 0x9D, 0x02, 0x00, 0x12, 0x00, 0x96,
+ 0x02, 0x00, 0x08, 0x0A, 0x1C, 0x96, 0x07, 0x00, 0x08, 0xBE, 0x07, 0x00, 0x00, 0x00, 0x00, 0x43,
+ 0x4F, 0x96, 0x02, 0x00, 0x08, 0x0A, 0x1C, 0x96, 0x02, 0x00, 0x08, 0xBE, 0x4E, 0x96, 0x02, 0x00,
+ 0x08, 0x0E, 0x1C, 0x96, 0x02, 0x00, 0x08, 0xC3, 0x1C, 0x96, 0x07, 0x00, 0x07, 0x01, 0x00, 0x00,
+ 0x00, 0x08, 0x0A, 0x1C, 0x96, 0x02, 0x00, 0x08, 0xB9, 0x52, 0x4F, 0x96, 0x02, 0x00, 0x08, 0x0E,
+ 0x1C, 0x96, 0x07, 0x00, 0x07, 0x01, 0x00, 0x00, 0x00, 0x08, 0x0A, 0x1C, 0x96, 0x02, 0x00, 0x08,
+ 0xC4, 0x52, 0x17, 0x96, 0x07, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 0x08, 0x0A, 0x1C, 0x96, 0x02,
+ 0x00, 0x08, 0xC0, 0x52, 0x17, 0x4F, 0x96, 0x02, 0x00, 0x08, 0xB2, 0x1C, 0x96, 0x02, 0x00, 0x08,
+ 0xB8, 0x4E, 0x96, 0x02, 0x00, 0x08, 0x0D, 0x4E, 0x96, 0x02, 0x00, 0x08, 0xC5, 0x8E, 0x08, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5B, 0x00, 0x96, 0x04, 0x00, 0x08, 0xC6, 0x08, 0x0A, 0x1C,
+ 0x96, 0x02, 0x00, 0x08, 0xBE, 0x4E, 0x3C, 0x96, 0x07, 0x00, 0x08, 0xC7, 0x07, 0x00, 0x00, 0x00,
+ 0x00, 0x42, 0x3C, 0x96, 0x02, 0x00, 0x08, 0xC6, 0x46, 0x87, 0x01, 0x00, 0x00, 0x96, 0x01, 0x00,
+ 0x02, 0x49, 0x9D, 0x02, 0x00, 0x25, 0x00, 0x96, 0x04, 0x00, 0x08, 0xBC, 0x04, 0x00, 0x3C, 0x96,
+ 0x02, 0x00, 0x08, 0xBC, 0x1C, 0x96, 0x07, 0x00, 0x07, 0x01, 0x00, 0x00, 0x00, 0x08, 0xC7, 0x1C,
+ 0x96, 0x02, 0x00, 0x08, 0x16, 0x52, 0x17, 0x99, 0x02, 0x00, 0xCD, 0xFF, 0x96, 0x02, 0x00, 0x08,
+ 0xC7, 0x1C, 0x3E, 0x4F, 0x96, 0x02, 0x00, 0x08, 0xB2, 0x1C, 0x96, 0x02, 0x00, 0x08, 0xB8, 0x4E,
+ 0x96, 0x02, 0x00, 0x08, 0x0D, 0x4E, 0x96, 0x02, 0x00, 0x08, 0xC4, 0x8E, 0x0E, 0x00, 0x00, 0x01,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x6E, 0x61, 0x6D, 0x65, 0x00, 0x5C, 0x00, 0x96, 0x02, 0x00, 0x08,
+ 0x0A, 0x1C, 0x96, 0x02, 0x00, 0x08, 0xBF, 0x4E, 0x12, 0x12, 0x9D, 0x02, 0x00, 0x12, 0x00, 0x96,
+ 0x02, 0x00, 0x08, 0x0A, 0x1C, 0x96, 0x07, 0x00, 0x08, 0xBF, 0x07, 0x00, 0x00, 0x00, 0x00, 0x43,
+ 0x4F, 0x96, 0x02, 0x00, 0x08, 0x0A, 0x1C, 0x96, 0x02, 0x00, 0x08, 0xBF, 0x4E, 0x96, 0x02, 0x00,
+ 0x08, 0x0E, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x0A, 0x1C, 0x96, 0x02, 0x00, 0x08, 0xBE, 0x4E, 0x96,
+ 0x02, 0x00, 0x08, 0x0E, 0x1C, 0x4E, 0x96, 0x07, 0x00, 0x07, 0x01, 0x00, 0x00, 0x00, 0x08, 0x0A,
+ 0x1C, 0x96, 0x02, 0x00, 0x08, 0xC8, 0x52, 0x4F, 0x4F, 0x96, 0x02, 0x00, 0x08, 0xB2, 0x1C, 0x96,
+ 0x02, 0x00, 0x08, 0xB8, 0x4E, 0x96, 0x02, 0x00, 0x08, 0x0D, 0x4E, 0x96, 0x02, 0x00, 0x08, 0xC8,
+ 0x8E, 0x0F, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x73, 0x74, 0x79, 0x6C, 0x65, 0x00,
+ 0x9D, 0x03, 0x96, 0x02, 0x00, 0x08, 0xC3, 0x1C, 0x96, 0x01, 0x00, 0x02, 0x49, 0x12, 0x9D, 0x02,
+ 0x00, 0x05, 0x00, 0x96, 0x01, 0x00, 0x02, 0x3E, 0x96, 0x09, 0x00, 0x08, 0xC9, 0x07, 0x00, 0x00,
+ 0x00, 0x00, 0x08, 0xB7, 0x40, 0x3C, 0x96, 0x02, 0x00, 0x08, 0xC3, 0x1C, 0x96, 0x02, 0x00, 0x08,
+ 0xCA, 0x4E, 0x12, 0x9D, 0x02, 0x00, 0x15, 0x00, 0x96, 0x02, 0x00, 0x08, 0xC9, 0x1C, 0x96, 0x04,
+ 0x00, 0x08, 0xCB, 0x08, 0xC3, 0x1C, 0x96, 0x02, 0x00, 0x08, 0xCA, 0x4E, 0x4F, 0x96, 0x02, 0x00,
+ 0x08, 0xC3, 0x1C, 0x96, 0x02, 0x00, 0x08, 0xCC, 0x4E, 0x96, 0x02, 0x00, 0x08, 0xCD, 0x49, 0x9D,
+ 0x02, 0x00, 0x2B, 0x00, 0x96, 0x02, 0x00, 0x08, 0xC3, 0x1C, 0x96, 0x02, 0x00, 0x08, 0xCC, 0x4E,
+ 0x96, 0x02, 0x00, 0x08, 0xCE, 0x49, 0x12, 0x9D, 0x02, 0x00, 0x0E, 0x00, 0x96, 0x02, 0x00, 0x08,
+ 0xC9, 0x1C, 0x96, 0x04, 0x00, 0x08, 0xCD, 0x05, 0x00, 0x4F, 0x99, 0x02, 0x00, 0x0E, 0x00, 0x96,
+ 0x02, 0x00, 0x08, 0xC9, 0x1C, 0x96, 0x04, 0x00, 0x08, 0xCD, 0x05, 0x01, 0x4F, 0x96, 0x02, 0x00,
+ 0x08, 0xC3, 0x1C, 0x96, 0x02, 0x00, 0x08, 0xCF, 0x4E, 0x12, 0x9D, 0x02, 0x00, 0x41, 0x00, 0x96,
+ 0x04, 0x00, 0x08, 0xC6, 0x08, 0xC3, 0x1C, 0x96, 0x02, 0x00, 0x08, 0xCF, 0x4E, 0x96, 0x07, 0x00,
+ 0x07, 0x01, 0x00, 0x00, 0x00, 0x08, 0x0A, 0x1C, 0x96, 0x02, 0x00, 0x08, 0xD0, 0x52, 0x3C, 0x96,
+ 0x02, 0x00, 0x08, 0xC6, 0x1C, 0x96, 0x01, 0x00, 0x02, 0x49, 0x12, 0x12, 0x9D, 0x02, 0x00, 0x0F,
+ 0x00, 0x96, 0x02, 0x00, 0x08, 0xC9, 0x1C, 0x96, 0x04, 0x00, 0x08, 0xCF, 0x08, 0xC6, 0x1C, 0x4F,
+ 0x96, 0x02, 0x00, 0x08, 0xC9, 0x1C, 0x96, 0x04, 0x00, 0x08, 0xD1, 0x08, 0xC3, 0x1C, 0x96, 0x02,
+ 0x00, 0x08, 0xD1, 0x4E, 0x4F, 0x96, 0x02, 0x00, 0x08, 0xC3, 0x1C, 0x96, 0x02, 0x00, 0x08, 0xD2,
+ 0x4E, 0x12, 0x9D, 0x02, 0x00, 0x26, 0x00, 0x96, 0x02, 0x00, 0x08, 0xC9, 0x1C, 0x96, 0x04, 0x00,
+ 0x08, 0xD3, 0x08, 0xC3, 0x1C, 0x96, 0x02, 0x00, 0x08, 0xD2, 0x4E, 0x96, 0x07, 0x00, 0x07, 0x01,
+ 0x00, 0x00, 0x00, 0x08, 0x0A, 0x1C, 0x96, 0x02, 0x00, 0x08, 0xD4, 0x52, 0x4F, 0x96, 0x02, 0x00,
+ 0x08, 0xC3, 0x1C, 0x96, 0x02, 0x00, 0x08, 0xD5, 0x4E, 0x12, 0x9D, 0x02, 0x00, 0x20, 0x00, 0x96,
+ 0x02, 0x00, 0x08, 0xC9, 0x1C, 0x96, 0x04, 0x00, 0x08, 0xD6, 0x08, 0xC3, 0x1C, 0x96, 0x02, 0x00,
+ 0x08, 0xD5, 0x4E, 0x96, 0x07, 0x00, 0x07, 0x01, 0x00, 0x00, 0x00, 0x08, 0xD7, 0x3D, 0x4F, 0x96,
+ 0x02, 0x00, 0x08, 0xC3, 0x1C, 0x96, 0x02, 0x00, 0x08, 0xD8, 0x4E, 0x96, 0x02, 0x00, 0x08, 0xD9,
+ 0x49, 0x9D, 0x02, 0x00, 0x2B, 0x00, 0x96, 0x02, 0x00, 0x08, 0xC3, 0x1C, 0x96, 0x02, 0x00, 0x08,
+ 0xD8, 0x4E, 0x96, 0x02, 0x00, 0x08, 0xCE, 0x49, 0x12, 0x9D, 0x02, 0x00, 0x0E, 0x00, 0x96, 0x02,
+ 0x00, 0x08, 0xC9, 0x1C, 0x96, 0x04, 0x00, 0x08, 0xD9, 0x05, 0x00, 0x4F, 0x99, 0x02, 0x00, 0x0E,
+ 0x00, 0x96, 0x02, 0x00, 0x08, 0xC9, 0x1C, 0x96, 0x04, 0x00, 0x08, 0xD9, 0x05, 0x01, 0x4F, 0x96,
+ 0x02, 0x00, 0x08, 0xC3, 0x1C, 0x96, 0x02, 0x00, 0x08, 0xDA, 0x4E, 0x96, 0x02, 0x00, 0x08, 0xDB,
+ 0x49, 0x9D, 0x02, 0x00, 0x4F, 0x00, 0x96, 0x02, 0x00, 0x08, 0xC3, 0x1C, 0x96, 0x02, 0x00, 0x08,
+ 0xDA, 0x4E, 0x96, 0x02, 0x00, 0x08, 0xDC, 0x49, 0x9D, 0x02, 0x00, 0x25, 0x00, 0x96, 0x02, 0x00,
+ 0x08, 0xC9, 0x1C, 0x96, 0x04, 0x00, 0x08, 0xDA, 0x08, 0xC3, 0x1C, 0x96, 0x02, 0x00, 0x08, 0xDA,
+ 0x4E, 0x96, 0x07, 0x00, 0x07, 0x01, 0x00, 0x00, 0x00, 0x08, 0xD7, 0x3D, 0x4F, 0x99, 0x02, 0x00,
+ 0x0E, 0x00, 0x96, 0x02, 0x00, 0x08, 0xC9, 0x1C, 0x96, 0x04, 0x00, 0x08, 0xDA, 0x05, 0x00, 0x4F,
+ 0x99, 0x02, 0x00, 0x0E, 0x00, 0x96, 0x02, 0x00, 0x08, 0xC9, 0x1C, 0x96, 0x04, 0x00, 0x08, 0xDA,
+ 0x05, 0x01, 0x4F, 0x96, 0x02, 0x00, 0x08, 0xC3, 0x1C, 0x96, 0x02, 0x00, 0x08, 0xDD, 0x4E, 0x12,
+ 0x9D, 0x02, 0x00, 0x20, 0x00, 0x96, 0x02, 0x00, 0x08, 0xC9, 0x1C, 0x96, 0x04, 0x00, 0x08, 0xDD,
+ 0x08, 0xC3, 0x1C, 0x96, 0x02, 0x00, 0x08, 0xDD, 0x4E, 0x96, 0x07, 0x00, 0x07, 0x01, 0x00, 0x00,
+ 0x00, 0x08, 0xD7, 0x3D, 0x4F, 0x96, 0x02, 0x00, 0x08, 0xC3, 0x1C, 0x96, 0x02, 0x00, 0x08, 0xDE,
+ 0x4E, 0x12, 0x9D, 0x02, 0x00, 0x20, 0x00, 0x96, 0x02, 0x00, 0x08, 0xC9, 0x1C, 0x96, 0x04, 0x00,
+ 0x08, 0xDF, 0x08, 0xC3, 0x1C, 0x96, 0x02, 0x00, 0x08, 0xDE, 0x4E, 0x96, 0x07, 0x00, 0x07, 0x01,
+ 0x00, 0x00, 0x00, 0x08, 0xD7, 0x3D, 0x4F, 0x96, 0x02, 0x00, 0x08, 0xC3, 0x1C, 0x96, 0x02, 0x00,
+ 0x08, 0xE0, 0x4E, 0x12, 0x9D, 0x02, 0x00, 0x20, 0x00, 0x96, 0x02, 0x00, 0x08, 0xC9, 0x1C, 0x96,
+ 0x04, 0x00, 0x08, 0xE0, 0x08, 0xC3, 0x1C, 0x96, 0x02, 0x00, 0x08, 0xE0, 0x4E, 0x96, 0x07, 0x00,
0x07, 0x01, 0x00, 0x00, 0x00, 0x08, 0xD7, 0x3D, 0x4F, 0x96, 0x02, 0x00, 0x08, 0xC3, 0x1C, 0x96,
- 0x02, 0x00, 0x08, 0xDE, 0x4E, 0x12, 0x9D, 0x02, 0x00, 0x20, 0x00, 0x96, 0x02, 0x00, 0x08, 0xC9,
- 0x1C, 0x96, 0x04, 0x00, 0x08, 0xDF, 0x08, 0xC3, 0x1C, 0x96, 0x02, 0x00, 0x08, 0xDE, 0x4E, 0x96,
+ 0x02, 0x00, 0x08, 0xE1, 0x4E, 0x12, 0x9D, 0x02, 0x00, 0x20, 0x00, 0x96, 0x02, 0x00, 0x08, 0xC9,
+ 0x1C, 0x96, 0x04, 0x00, 0x08, 0xE2, 0x08, 0xC3, 0x1C, 0x96, 0x02, 0x00, 0x08, 0xE1, 0x4E, 0x96,
0x07, 0x00, 0x07, 0x01, 0x00, 0x00, 0x00, 0x08, 0xD7, 0x3D, 0x4F, 0x96, 0x02, 0x00, 0x08, 0xC3,
- 0x1C, 0x96, 0x02, 0x00, 0x08, 0xE0, 0x4E, 0x12, 0x9D, 0x02, 0x00, 0x20, 0x00, 0x96, 0x02, 0x00,
- 0x08, 0xC9, 0x1C, 0x96, 0x04, 0x00, 0x08, 0xE0, 0x08, 0xC3, 0x1C, 0x96, 0x02, 0x00, 0x08, 0xE0,
- 0x4E, 0x96, 0x07, 0x00, 0x07, 0x01, 0x00, 0x00, 0x00, 0x08, 0xD7, 0x3D, 0x4F, 0x96, 0x02, 0x00,
- 0x08, 0xC3, 0x1C, 0x96, 0x02, 0x00, 0x08, 0xE1, 0x4E, 0x12, 0x9D, 0x02, 0x00, 0x20, 0x00, 0x96,
- 0x02, 0x00, 0x08, 0xC9, 0x1C, 0x96, 0x04, 0x00, 0x08, 0xE2, 0x08, 0xC3, 0x1C, 0x96, 0x02, 0x00,
- 0x08, 0xE1, 0x4E, 0x96, 0x07, 0x00, 0x07, 0x01, 0x00, 0x00, 0x00, 0x08, 0xD7, 0x3D, 0x4F, 0x96,
- 0x02, 0x00, 0x08, 0xC3, 0x1C, 0x96, 0x02, 0x00, 0x08, 0xE3, 0x4E, 0x12, 0x9D, 0x02, 0x00, 0x3B,
- 0x00, 0x96, 0x04, 0x00, 0x08, 0xC6, 0x08, 0xC3, 0x1C, 0x96, 0x02, 0x00, 0x08, 0xE3, 0x4E, 0x96,
- 0x07, 0x00, 0x07, 0x01, 0x00, 0x00, 0x00, 0x08, 0xD7, 0x3D, 0x3C, 0x96, 0x07, 0x00, 0x07, 0x00,
- 0x00, 0x00, 0x00, 0x08, 0xC6, 0x1C, 0x48, 0x12, 0x9D, 0x02, 0x00, 0x0F, 0x00, 0x96, 0x02, 0x00,
- 0x08, 0xC9, 0x1C, 0x96, 0x04, 0x00, 0x08, 0xE4, 0x08, 0xC6, 0x1C, 0x4F, 0x96, 0x02, 0x00, 0x08,
- 0xC3, 0x1C, 0x96, 0x02, 0x00, 0x08, 0xE5, 0x4E, 0x96, 0x02, 0x00, 0x08, 0xE6, 0x49, 0x9D, 0x02,
- 0x00, 0x2B, 0x00, 0x96, 0x02, 0x00, 0x08, 0xC3, 0x1C, 0x96, 0x02, 0x00, 0x08, 0xE5, 0x4E, 0x96,
- 0x02, 0x00, 0x08, 0x3D, 0x49, 0x12, 0x9D, 0x02, 0x00, 0x0E, 0x00, 0x96, 0x02, 0x00, 0x08, 0xC9,
- 0x1C, 0x96, 0x04, 0x00, 0x08, 0xE6, 0x05, 0x00, 0x4F, 0x99, 0x02, 0x00, 0x0E, 0x00, 0x96, 0x02,
- 0x00, 0x08, 0xC9, 0x1C, 0x96, 0x04, 0x00, 0x08, 0xE6, 0x05, 0x01, 0x4F, 0x96, 0x02, 0x00, 0x08,
- 0xC9, 0x1C, 0x3E, 0x4F, 0x96, 0x02, 0x00, 0x08, 0xB2, 0x1C, 0x96, 0x02, 0x00, 0x08, 0xB8, 0x4E,
- 0x96, 0x02, 0x00, 0x08, 0x0D, 0x4E, 0x96, 0x02, 0x00, 0x08, 0xE7, 0x8E, 0x0D, 0x00, 0x00, 0x01,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x63, 0x73, 0x73, 0x00, 0xDA, 0x00, 0x96, 0x04, 0x00, 0x08, 0xEA,
- 0x08, 0xE8, 0x1C, 0x96, 0x07, 0x00, 0x07, 0x01, 0x00, 0x00, 0x00, 0x08, 0x0A, 0x1C, 0x96, 0x02,
- 0x00, 0x08, 0xE9, 0x52, 0x3C, 0x96, 0x02, 0x00, 0x08, 0xEA, 0x1C, 0x44, 0x96, 0x02, 0x00, 0x08,
- 0xEB, 0x49, 0x12, 0x9D, 0x02, 0x00, 0x06, 0x00, 0x96, 0x02, 0x00, 0x05, 0x00, 0x3E, 0x96, 0x02,
- 0x00, 0x08, 0x0A, 0x1C, 0x96, 0x02, 0x00, 0x08, 0xBE, 0x4E, 0x12, 0x12, 0x9D, 0x02, 0x00, 0x12,
- 0x00, 0x96, 0x02, 0x00, 0x08, 0x0A, 0x1C, 0x96, 0x07, 0x00, 0x08, 0xBE, 0x07, 0x00, 0x00, 0x00,
- 0x00, 0x43, 0x4F, 0x96, 0x02, 0x00, 0x08, 0xEA, 0x46, 0x87, 0x01, 0x00, 0x00, 0x96, 0x01, 0x00,
- 0x02, 0x49, 0x9D, 0x02, 0x00, 0x56, 0x00, 0x96, 0x04, 0x00, 0x08, 0xBC, 0x04, 0x00, 0x3C, 0x96,
- 0x02, 0x00, 0x08, 0x0A, 0x1C, 0x96, 0x02, 0x00, 0x08, 0xBE, 0x4E, 0x96, 0x02, 0x00, 0x08, 0xBC,
- 0x1C, 0x96, 0x02, 0x00, 0x08, 0xEA, 0x1C, 0x96, 0x02, 0x00, 0x08, 0xBC, 0x1C, 0x4E, 0x96, 0x07,
- 0x00, 0x07, 0x01, 0x00, 0x00, 0x00, 0x08, 0x0A, 0x1C, 0x96, 0x02, 0x00, 0x08, 0xB9, 0x52, 0x4F,
- 0x96, 0x02, 0x00, 0x08, 0xBC, 0x1C, 0x96, 0x07, 0x00, 0x07, 0x01, 0x00, 0x00, 0x00, 0x08, 0x0A,
- 0x1C, 0x96, 0x02, 0x00, 0x08, 0xC4, 0x52, 0x17, 0x99, 0x02, 0x00, 0x9C, 0xFF, 0x96, 0x07, 0x00,
- 0x07, 0x00, 0x00, 0x00, 0x00, 0x08, 0x0A, 0x1C, 0x96, 0x02, 0x00, 0x08, 0xC0, 0x52, 0x17, 0x96,
- 0x02, 0x00, 0x05, 0x01, 0x3E, 0x4F, 0x96, 0x02, 0x00, 0x08, 0xB2, 0x1C, 0x96, 0x02, 0x00, 0x08,
- 0xB8, 0x4E, 0x96, 0x02, 0x00, 0x08, 0x0D, 0x4E, 0x96, 0x04, 0x00, 0x08, 0xEC, 0x08, 0xB2, 0x1C,
- 0x96, 0x02, 0x00, 0x08, 0xB8, 0x4E, 0x96, 0x02, 0x00, 0x08, 0x0D, 0x4E, 0x96, 0x02, 0x00, 0x08,
- 0xE7, 0x4E, 0x4F, 0x96, 0x02, 0x00, 0x08, 0xB2, 0x1C, 0x96, 0x02, 0x00, 0x08, 0xB8, 0x4E, 0x96,
- 0x02, 0x00, 0x08, 0x0D, 0x4E, 0x96, 0x13, 0x00, 0x08, 0x4B, 0x07, 0x00, 0x00, 0x00, 0x00, 0x07,
- 0x2D, 0x01, 0x00, 0x00, 0x07, 0x02, 0x00, 0x00, 0x00, 0x08, 0x01, 0x3D, 0x4F, 0x96, 0x02, 0x00,
- 0x08, 0xB2, 0x1C, 0x96, 0x02, 0x00, 0x08, 0xB8, 0x4E, 0x96, 0x02, 0x00, 0x08, 0x0D, 0x4E, 0x96,
- 0x02, 0x00, 0x08, 0x4F, 0x8E, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4F,
+ 0x1C, 0x96, 0x02, 0x00, 0x08, 0xE3, 0x4E, 0x12, 0x9D, 0x02, 0x00, 0x3B, 0x00, 0x96, 0x04, 0x00,
+ 0x08, 0xC6, 0x08, 0xC3, 0x1C, 0x96, 0x02, 0x00, 0x08, 0xE3, 0x4E, 0x96, 0x07, 0x00, 0x07, 0x01,
+ 0x00, 0x00, 0x00, 0x08, 0xD7, 0x3D, 0x3C, 0x96, 0x07, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 0x08,
+ 0xC6, 0x1C, 0x48, 0x12, 0x9D, 0x02, 0x00, 0x0F, 0x00, 0x96, 0x02, 0x00, 0x08, 0xC9, 0x1C, 0x96,
+ 0x04, 0x00, 0x08, 0xE4, 0x08, 0xC6, 0x1C, 0x4F, 0x96, 0x02, 0x00, 0x08, 0xC3, 0x1C, 0x96, 0x02,
+ 0x00, 0x08, 0xE5, 0x4E, 0x96, 0x02, 0x00, 0x08, 0xE6, 0x49, 0x9D, 0x02, 0x00, 0x2B, 0x00, 0x96,
+ 0x02, 0x00, 0x08, 0xC3, 0x1C, 0x96, 0x02, 0x00, 0x08, 0xE5, 0x4E, 0x96, 0x02, 0x00, 0x08, 0x3D,
+ 0x49, 0x12, 0x9D, 0x02, 0x00, 0x0E, 0x00, 0x96, 0x02, 0x00, 0x08, 0xC9, 0x1C, 0x96, 0x04, 0x00,
+ 0x08, 0xE6, 0x05, 0x00, 0x4F, 0x99, 0x02, 0x00, 0x0E, 0x00, 0x96, 0x02, 0x00, 0x08, 0xC9, 0x1C,
+ 0x96, 0x04, 0x00, 0x08, 0xE6, 0x05, 0x01, 0x4F, 0x96, 0x02, 0x00, 0x08, 0xC9, 0x1C, 0x3E, 0x4F,
0x96, 0x02, 0x00, 0x08, 0xB2, 0x1C, 0x96, 0x02, 0x00, 0x08, 0xB8, 0x4E, 0x96, 0x02, 0x00, 0x08,
- 0x0D, 0x4E, 0x96, 0x02, 0x00, 0x08, 0x50, 0x8E, 0x0D, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x73, 0x72, 0x63, 0x00, 0x6B, 0x00, 0x96, 0x02, 0x00, 0x08, 0x52, 0x1C, 0x96, 0x01, 0x00,
- 0x02, 0x49, 0x12, 0x9D, 0x02, 0x00, 0x19, 0x00, 0x96, 0x09, 0x00, 0x05, 0x00, 0x07, 0x01, 0x00,
- 0x00, 0x00, 0x08, 0x0A, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x4F, 0x52, 0x17, 0x99, 0x02, 0x00, 0x41,
- 0x00, 0x96, 0x04, 0x00, 0x08, 0xEA, 0x08, 0x52, 0x1C, 0x96, 0x07, 0x00, 0x07, 0x01, 0x00, 0x00,
- 0x00, 0x08, 0x0A, 0x1C, 0x96, 0x02, 0x00, 0x08, 0xEC, 0x52, 0x3C, 0x96, 0x02, 0x00, 0x08, 0x0A,
- 0x1C, 0x96, 0x04, 0x00, 0x08, 0x51, 0x08, 0xEA, 0x1C, 0x4F, 0x96, 0x02, 0x00, 0x08, 0xEA, 0x1C,
- 0x96, 0x07, 0x00, 0x07, 0x01, 0x00, 0x00, 0x00, 0x08, 0x0A, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x4F,
- 0x52, 0x17, 0x4F, 0x96, 0x0E, 0x00, 0x07, 0x64, 0x00, 0x00, 0x00, 0x08, 0xED, 0x07, 0x71, 0x00,
- 0x00, 0x00, 0x08, 0xB2, 0x1C, 0x96, 0x02, 0x00, 0x08, 0xB8, 0x4E, 0x96, 0x02, 0x00, 0x08, 0x0D,
- 0x4E, 0x96, 0x07, 0x00, 0x07, 0x04, 0x00, 0x00, 0x00, 0x08, 0x02, 0x3D, 0x17, 0x96, 0x08, 0x00,
- 0x07, 0x03, 0x04, 0x00, 0x00, 0x02, 0x08, 0xB2, 0x1C, 0x96, 0x02, 0x00, 0x08, 0xB8, 0x4E, 0x96,
- 0x02, 0x00, 0x08, 0x0D, 0x4E, 0x96, 0x07, 0x00, 0x07, 0x03, 0x00, 0x00, 0x00, 0x08, 0x00, 0x3D,
- 0x17, 0x96, 0x09, 0x00, 0x07, 0x03, 0x04, 0x00, 0x00, 0x08, 0xB8, 0x08, 0xB2, 0x1C, 0x96, 0x07,
- 0x00, 0x07, 0x03, 0x00, 0x00, 0x00, 0x08, 0x00, 0x3D, 0x17, 0x96, 0x07, 0x00, 0x08, 0xEE, 0x07,
- 0x00, 0x00, 0x00, 0x00, 0x43, 0x1D, 0x96, 0x09, 0x00, 0x08, 0xEF, 0x07, 0xCF, 0x07, 0x00, 0x00,
- 0x08, 0xEE, 0x1C, 0x96, 0x07, 0x00, 0x07, 0x03, 0x00, 0x00, 0x00, 0x08, 0x02, 0x3D, 0x17, 0x96,
- 0x08, 0x00, 0x07, 0x06, 0x00, 0x00, 0x00, 0x02, 0x08, 0xEE, 0x1C, 0x96, 0x07, 0x00, 0x07, 0x03,
- 0x00, 0x00, 0x00, 0x08, 0x00, 0x3D, 0x17, 0x96, 0x02, 0x00, 0x08, 0xF0, 0x1C, 0x96, 0x02, 0x00,
- 0x08, 0x9E, 0x8E, 0x0F, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x69, 0x6E, 0x64, 0x65,
- 0x78, 0x00, 0x2A, 0x00, 0x96, 0x13, 0x00, 0x08, 0xF1, 0x07, 0xC8, 0x00, 0x00, 0x00, 0x07, 0x36,
- 0x08, 0x00, 0x00, 0x07, 0x02, 0x00, 0x00, 0x00, 0x08, 0x01, 0x3D, 0x3C, 0x96, 0x02, 0x00, 0x08,
- 0xF2, 0x1C, 0x96, 0x07, 0x00, 0x07, 0x01, 0x00, 0x00, 0x00, 0x08, 0xF1, 0x3D, 0x3E, 0x4F, 0x96,
- 0x12, 0x00, 0x02, 0x07, 0xC9, 0x00, 0x00, 0x00, 0x07, 0x36, 0x08, 0x00, 0x00, 0x07, 0x02, 0x00,
- 0x00, 0x00, 0x08, 0x01, 0x3D, 0x96, 0x09, 0x00, 0x08, 0xC7, 0x07, 0x03, 0x00, 0x00, 0x00, 0x08,
- 0xF0, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x07, 0x52, 0x17, 0x96, 0x09, 0x00, 0x08, 0xF3, 0x07, 0x36,
- 0x08, 0x00, 0x00, 0x08, 0xF0, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x0D, 0x4E, 0x96, 0x07, 0x00, 0x07,
- 0x03, 0x00, 0x00, 0x00, 0x08, 0x02, 0x3D, 0x17, 0x96, 0x08, 0x00, 0x07, 0x03, 0x00, 0x00, 0x00,
- 0x02, 0x08, 0xF0, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x0D, 0x4E, 0x96, 0x07, 0x00, 0x07, 0x03, 0x00,
- 0x00, 0x00, 0x08, 0x00, 0x3D, 0x17, 0x96, 0x03, 0x00, 0x09, 0x01, 0x01, 0x1C, 0x96, 0x02, 0x00,
- 0x08, 0x0D, 0x4E, 0x96, 0x03, 0x00, 0x09, 0x02, 0x01, 0x8E, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0xC8, 0x00, 0x96, 0x0A, 0x00, 0x08, 0x1C, 0x07, 0x00, 0x00, 0x00, 0x00, 0x09, 0x01,
- 0x01, 0x40, 0x3C, 0x96, 0x02, 0x00, 0x08, 0x1C, 0x1C, 0x96, 0x04, 0x00, 0x08, 0xF4, 0x08, 0x0A,
- 0x1C, 0x96, 0x02, 0x00, 0x08, 0xF4, 0x4E, 0x4F, 0x96, 0x02, 0x00, 0x08, 0x1C, 0x1C, 0x96, 0x09,
- 0x00, 0x08, 0xF6, 0x07, 0x00, 0x00, 0x00, 0x00, 0x08, 0xF7, 0x40, 0x4F, 0x96, 0x07, 0x00, 0x08,
- 0x18, 0x07, 0x00, 0x00, 0x00, 0x00, 0x3C, 0x99, 0x02, 0x00, 0x09, 0x00, 0x96, 0x02, 0x00, 0x08,
- 0x18, 0x4C, 0x1C, 0x50, 0x1D, 0x96, 0x02, 0x00, 0x08, 0x18, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x0A,
- 0x1C, 0x96, 0x02, 0x00, 0x08, 0xF6, 0x4E, 0x96, 0x02, 0x00, 0x08, 0x19, 0x4E, 0x48, 0x12, 0x9D,
- 0x02, 0x00, 0x3C, 0x00, 0x96, 0x07, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 0x08, 0x0A, 0x1C, 0x96,
- 0x02, 0x00, 0x08, 0xF6, 0x4E, 0x96, 0x02, 0x00, 0x08, 0x18, 0x1C, 0x4E, 0x96, 0x03, 0x00, 0x09,
- 0x02, 0x01, 0x52, 0x96, 0x07, 0x00, 0x07, 0x01, 0x00, 0x00, 0x00, 0x08, 0x1C, 0x1C, 0x96, 0x02,
- 0x00, 0x08, 0xF6, 0x4E, 0x96, 0x02, 0x00, 0x08, 0x16, 0x52, 0x17, 0x99, 0x02, 0x00, 0x9C, 0xFF,
- 0x96, 0x02, 0x00, 0x08, 0x1C, 0x1C, 0x96, 0x04, 0x00, 0x08, 0xF8, 0x08, 0x0A, 0x1C, 0x96, 0x02,
- 0x00, 0x08, 0xF8, 0x4E, 0x4F, 0x96, 0x02, 0x00, 0x08, 0x1C, 0x1C, 0x3E, 0x4F, 0x96, 0x03, 0x00,
- 0x09, 0x01, 0x01, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x0D, 0x4E, 0x96, 0x03, 0x00, 0x09, 0x03, 0x01,
- 0x8E, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x33, 0x00, 0x96, 0x02, 0x00, 0x08, 0x0A,
- 0x1C, 0x96, 0x28, 0x00, 0x08, 0xF8, 0x08, 0xF9, 0x05, 0x00, 0x08, 0xFA, 0x05, 0x00, 0x08, 0xFB,
- 0x05, 0x00, 0x08, 0xFC, 0x05, 0x00, 0x08, 0xFD, 0x05, 0x00, 0x08, 0xFE, 0x05, 0x00, 0x08, 0xFF,
- 0x05, 0x00, 0x09, 0x00, 0x01, 0x05, 0x00, 0x07, 0x08, 0x00, 0x00, 0x00, 0x43, 0x4F, 0x4F, 0x96,
- 0x09, 0x00, 0x07, 0x03, 0x04, 0x00, 0x00, 0x02, 0x09, 0x01, 0x01, 0x1C, 0x96, 0x02, 0x00, 0x08,
+ 0x0D, 0x4E, 0x96, 0x02, 0x00, 0x08, 0xE7, 0x8E, 0x0D, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x63, 0x73, 0x73, 0x00, 0xDA, 0x00, 0x96, 0x04, 0x00, 0x08, 0xEA, 0x08, 0xE8, 0x1C, 0x96,
+ 0x07, 0x00, 0x07, 0x01, 0x00, 0x00, 0x00, 0x08, 0x0A, 0x1C, 0x96, 0x02, 0x00, 0x08, 0xE9, 0x52,
+ 0x3C, 0x96, 0x02, 0x00, 0x08, 0xEA, 0x1C, 0x44, 0x96, 0x02, 0x00, 0x08, 0xEB, 0x49, 0x12, 0x9D,
+ 0x02, 0x00, 0x06, 0x00, 0x96, 0x02, 0x00, 0x05, 0x00, 0x3E, 0x96, 0x02, 0x00, 0x08, 0x0A, 0x1C,
+ 0x96, 0x02, 0x00, 0x08, 0xBE, 0x4E, 0x12, 0x12, 0x9D, 0x02, 0x00, 0x12, 0x00, 0x96, 0x02, 0x00,
+ 0x08, 0x0A, 0x1C, 0x96, 0x07, 0x00, 0x08, 0xBE, 0x07, 0x00, 0x00, 0x00, 0x00, 0x43, 0x4F, 0x96,
+ 0x02, 0x00, 0x08, 0xEA, 0x46, 0x87, 0x01, 0x00, 0x00, 0x96, 0x01, 0x00, 0x02, 0x49, 0x9D, 0x02,
+ 0x00, 0x56, 0x00, 0x96, 0x04, 0x00, 0x08, 0xBC, 0x04, 0x00, 0x3C, 0x96, 0x02, 0x00, 0x08, 0x0A,
+ 0x1C, 0x96, 0x02, 0x00, 0x08, 0xBE, 0x4E, 0x96, 0x02, 0x00, 0x08, 0xBC, 0x1C, 0x96, 0x02, 0x00,
+ 0x08, 0xEA, 0x1C, 0x96, 0x02, 0x00, 0x08, 0xBC, 0x1C, 0x4E, 0x96, 0x07, 0x00, 0x07, 0x01, 0x00,
+ 0x00, 0x00, 0x08, 0x0A, 0x1C, 0x96, 0x02, 0x00, 0x08, 0xB9, 0x52, 0x4F, 0x96, 0x02, 0x00, 0x08,
+ 0xBC, 0x1C, 0x96, 0x07, 0x00, 0x07, 0x01, 0x00, 0x00, 0x00, 0x08, 0x0A, 0x1C, 0x96, 0x02, 0x00,
+ 0x08, 0xC4, 0x52, 0x17, 0x99, 0x02, 0x00, 0x9C, 0xFF, 0x96, 0x07, 0x00, 0x07, 0x00, 0x00, 0x00,
+ 0x00, 0x08, 0x0A, 0x1C, 0x96, 0x02, 0x00, 0x08, 0xC0, 0x52, 0x17, 0x96, 0x02, 0x00, 0x05, 0x01,
+ 0x3E, 0x4F, 0x96, 0x02, 0x00, 0x08, 0xB2, 0x1C, 0x96, 0x02, 0x00, 0x08, 0xB8, 0x4E, 0x96, 0x02,
+ 0x00, 0x08, 0x0D, 0x4E, 0x96, 0x04, 0x00, 0x08, 0xEC, 0x08, 0xB2, 0x1C, 0x96, 0x02, 0x00, 0x08,
+ 0xB8, 0x4E, 0x96, 0x02, 0x00, 0x08, 0x0D, 0x4E, 0x96, 0x02, 0x00, 0x08, 0xE7, 0x4E, 0x4F, 0x96,
+ 0x02, 0x00, 0x08, 0xB2, 0x1C, 0x96, 0x02, 0x00, 0x08, 0xB8, 0x4E, 0x96, 0x02, 0x00, 0x08, 0x0D,
+ 0x4E, 0x96, 0x13, 0x00, 0x08, 0x4B, 0x07, 0x00, 0x00, 0x00, 0x00, 0x07, 0x2D, 0x01, 0x00, 0x00,
+ 0x07, 0x02, 0x00, 0x00, 0x00, 0x08, 0x01, 0x3D, 0x4F, 0x96, 0x02, 0x00, 0x08, 0xB2, 0x1C, 0x96,
+ 0x02, 0x00, 0x08, 0xB8, 0x4E, 0x96, 0x02, 0x00, 0x08, 0x0D, 0x4E, 0x96, 0x02, 0x00, 0x08, 0x4F,
+ 0x8E, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4F, 0x96, 0x02, 0x00, 0x08,
+ 0xB2, 0x1C, 0x96, 0x02, 0x00, 0x08, 0xB8, 0x4E, 0x96, 0x02, 0x00, 0x08, 0x0D, 0x4E, 0x96, 0x02,
+ 0x00, 0x08, 0x50, 0x8E, 0x0D, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x73, 0x72, 0x63,
+ 0x00, 0x6B, 0x00, 0x96, 0x02, 0x00, 0x08, 0x52, 0x1C, 0x96, 0x01, 0x00, 0x02, 0x49, 0x12, 0x9D,
+ 0x02, 0x00, 0x19, 0x00, 0x96, 0x09, 0x00, 0x05, 0x00, 0x07, 0x01, 0x00, 0x00, 0x00, 0x08, 0x0A,
+ 0x1C, 0x96, 0x02, 0x00, 0x08, 0x4F, 0x52, 0x17, 0x99, 0x02, 0x00, 0x41, 0x00, 0x96, 0x04, 0x00,
+ 0x08, 0xEA, 0x08, 0x52, 0x1C, 0x96, 0x07, 0x00, 0x07, 0x01, 0x00, 0x00, 0x00, 0x08, 0x0A, 0x1C,
+ 0x96, 0x02, 0x00, 0x08, 0xEC, 0x52, 0x3C, 0x96, 0x02, 0x00, 0x08, 0x0A, 0x1C, 0x96, 0x04, 0x00,
+ 0x08, 0x51, 0x08, 0xEA, 0x1C, 0x4F, 0x96, 0x02, 0x00, 0x08, 0xEA, 0x1C, 0x96, 0x07, 0x00, 0x07,
+ 0x01, 0x00, 0x00, 0x00, 0x08, 0x0A, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x4F, 0x52, 0x17, 0x4F, 0x96,
+ 0x0E, 0x00, 0x07, 0x64, 0x00, 0x00, 0x00, 0x08, 0xED, 0x07, 0x71, 0x00, 0x00, 0x00, 0x08, 0xB2,
+ 0x1C, 0x96, 0x02, 0x00, 0x08, 0xB8, 0x4E, 0x96, 0x02, 0x00, 0x08, 0x0D, 0x4E, 0x96, 0x07, 0x00,
+ 0x07, 0x04, 0x00, 0x00, 0x00, 0x08, 0x02, 0x3D, 0x17, 0x96, 0x08, 0x00, 0x07, 0x03, 0x04, 0x00,
+ 0x00, 0x02, 0x08, 0xB2, 0x1C, 0x96, 0x02, 0x00, 0x08, 0xB8, 0x4E, 0x96, 0x02, 0x00, 0x08, 0x0D,
+ 0x4E, 0x96, 0x07, 0x00, 0x07, 0x03, 0x00, 0x00, 0x00, 0x08, 0x00, 0x3D, 0x17, 0x96, 0x09, 0x00,
+ 0x07, 0x03, 0x04, 0x00, 0x00, 0x08, 0xB8, 0x08, 0xB2, 0x1C, 0x96, 0x07, 0x00, 0x07, 0x03, 0x00,
+ 0x00, 0x00, 0x08, 0x00, 0x3D, 0x17, 0x96, 0x0E, 0x00, 0x07, 0x01, 0x00, 0x00, 0x00, 0x08, 0xEF,
+ 0x07, 0x9B, 0x02, 0x00, 0x00, 0x08, 0xEE, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x0D, 0x4E, 0x96, 0x07,
+ 0x00, 0x07, 0x04, 0x00, 0x00, 0x00, 0x08, 0x02, 0x3D, 0x17, 0x96, 0x08, 0x00, 0x07, 0x03, 0x00,
+ 0x00, 0x00, 0x02, 0x08, 0xEE, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x0D, 0x4E, 0x96, 0x07, 0x00, 0x07,
+ 0x03, 0x00, 0x00, 0x00, 0x08, 0x00, 0x3D, 0x17, 0x96, 0x07, 0x00, 0x08, 0xF0, 0x07, 0x00, 0x00,
+ 0x00, 0x00, 0x43, 0x1D, 0x96, 0x09, 0x00, 0x08, 0xF1, 0x07, 0xCF, 0x07, 0x00, 0x00, 0x08, 0xF0,
+ 0x1C, 0x96, 0x07, 0x00, 0x07, 0x03, 0x00, 0x00, 0x00, 0x08, 0x02, 0x3D, 0x17, 0x96, 0x08, 0x00,
+ 0x07, 0x06, 0x00, 0x00, 0x00, 0x02, 0x08, 0xF0, 0x1C, 0x96, 0x07, 0x00, 0x07, 0x03, 0x00, 0x00,
+ 0x00, 0x08, 0x00, 0x3D, 0x17, 0x96, 0x02, 0x00, 0x08, 0xF2, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x9E,
+ 0x8E, 0x0F, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x69, 0x6E, 0x64, 0x65, 0x78, 0x00,
+ 0x2A, 0x00, 0x96, 0x13, 0x00, 0x08, 0xF3, 0x07, 0xC8, 0x00, 0x00, 0x00, 0x07, 0x36, 0x08, 0x00,
+ 0x00, 0x07, 0x02, 0x00, 0x00, 0x00, 0x08, 0x01, 0x3D, 0x3C, 0x96, 0x02, 0x00, 0x08, 0xF4, 0x1C,
+ 0x96, 0x07, 0x00, 0x07, 0x01, 0x00, 0x00, 0x00, 0x08, 0xF3, 0x3D, 0x3E, 0x4F, 0x96, 0x12, 0x00,
+ 0x02, 0x07, 0xC9, 0x00, 0x00, 0x00, 0x07, 0x36, 0x08, 0x00, 0x00, 0x07, 0x02, 0x00, 0x00, 0x00,
+ 0x08, 0x01, 0x3D, 0x96, 0x09, 0x00, 0x08, 0xC7, 0x07, 0x03, 0x00, 0x00, 0x00, 0x08, 0xF2, 0x1C,
+ 0x96, 0x02, 0x00, 0x08, 0x07, 0x52, 0x17, 0x96, 0x09, 0x00, 0x08, 0xF5, 0x07, 0x36, 0x08, 0x00,
+ 0x00, 0x08, 0xF2, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x0D, 0x4E, 0x96, 0x07, 0x00, 0x07, 0x03, 0x00,
+ 0x00, 0x00, 0x08, 0x02, 0x3D, 0x17, 0x96, 0x08, 0x00, 0x07, 0x03, 0x00, 0x00, 0x00, 0x02, 0x08,
+ 0xF2, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x0D, 0x4E, 0x96, 0x07, 0x00, 0x07, 0x03, 0x00, 0x00, 0x00,
+ 0x08, 0x00, 0x3D, 0x17, 0x96, 0x03, 0x00, 0x09, 0x03, 0x01, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x0D,
+ 0x4E, 0x96, 0x03, 0x00, 0x09, 0x04, 0x01, 0x8E, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0xC8, 0x00, 0x96, 0x0A, 0x00, 0x08, 0x1C, 0x07, 0x00, 0x00, 0x00, 0x00, 0x09, 0x03, 0x01, 0x40,
+ 0x3C, 0x96, 0x02, 0x00, 0x08, 0x1C, 0x1C, 0x96, 0x04, 0x00, 0x08, 0xF6, 0x08, 0x0A, 0x1C, 0x96,
+ 0x02, 0x00, 0x08, 0xF6, 0x4E, 0x4F, 0x96, 0x02, 0x00, 0x08, 0x1C, 0x1C, 0x96, 0x09, 0x00, 0x08,
+ 0xF8, 0x07, 0x00, 0x00, 0x00, 0x00, 0x08, 0xF9, 0x40, 0x4F, 0x96, 0x07, 0x00, 0x08, 0x18, 0x07,
+ 0x00, 0x00, 0x00, 0x00, 0x3C, 0x99, 0x02, 0x00, 0x09, 0x00, 0x96, 0x02, 0x00, 0x08, 0x18, 0x4C,
+ 0x1C, 0x50, 0x1D, 0x96, 0x02, 0x00, 0x08, 0x18, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x0A, 0x1C, 0x96,
+ 0x02, 0x00, 0x08, 0xF8, 0x4E, 0x96, 0x02, 0x00, 0x08, 0x19, 0x4E, 0x48, 0x12, 0x9D, 0x02, 0x00,
+ 0x3C, 0x00, 0x96, 0x07, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 0x08, 0x0A, 0x1C, 0x96, 0x02, 0x00,
+ 0x08, 0xF8, 0x4E, 0x96, 0x02, 0x00, 0x08, 0x18, 0x1C, 0x4E, 0x96, 0x03, 0x00, 0x09, 0x04, 0x01,
+ 0x52, 0x96, 0x07, 0x00, 0x07, 0x01, 0x00, 0x00, 0x00, 0x08, 0x1C, 0x1C, 0x96, 0x02, 0x00, 0x08,
+ 0xF8, 0x4E, 0x96, 0x02, 0x00, 0x08, 0x16, 0x52, 0x17, 0x99, 0x02, 0x00, 0x9C, 0xFF, 0x96, 0x02,
+ 0x00, 0x08, 0x1C, 0x1C, 0x96, 0x04, 0x00, 0x08, 0xFA, 0x08, 0x0A, 0x1C, 0x96, 0x02, 0x00, 0x08,
+ 0xFA, 0x4E, 0x4F, 0x96, 0x02, 0x00, 0x08, 0x1C, 0x1C, 0x3E, 0x4F, 0x96, 0x03, 0x00, 0x09, 0x03,
+ 0x01, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x0D, 0x4E, 0x96, 0x03, 0x00, 0x09, 0x05, 0x01, 0x8E, 0x08,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x35, 0x00, 0x96, 0x02, 0x00, 0x08, 0x0A, 0x1C, 0x96,
+ 0x2A, 0x00, 0x08, 0xFA, 0x08, 0xFB, 0x05, 0x00, 0x08, 0xFC, 0x05, 0x00, 0x08, 0xFD, 0x05, 0x00,
+ 0x08, 0xFE, 0x05, 0x00, 0x08, 0xFF, 0x05, 0x00, 0x09, 0x00, 0x01, 0x05, 0x00, 0x09, 0x01, 0x01,
+ 0x05, 0x00, 0x09, 0x02, 0x01, 0x05, 0x00, 0x07, 0x08, 0x00, 0x00, 0x00, 0x43, 0x4F, 0x4F, 0x96,
+ 0x09, 0x00, 0x07, 0x03, 0x04, 0x00, 0x00, 0x02, 0x09, 0x03, 0x01, 0x1C, 0x96, 0x02, 0x00, 0x08,
0x0D, 0x4E, 0x96, 0x07, 0x00, 0x07, 0x03, 0x00, 0x00, 0x00, 0x08, 0x00, 0x3D, 0x17, 0x96, 0x03,
- 0x00, 0x09, 0x07, 0x01, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x0D, 0x4E, 0x96, 0x03, 0x00, 0x09, 0x02,
+ 0x00, 0x09, 0x09, 0x01, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x0D, 0x4E, 0x96, 0x03, 0x00, 0x09, 0x04,
0x01, 0x8E, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x85, 0x00, 0x96, 0x0A, 0x00, 0x08,
- 0x1C, 0x07, 0x00, 0x00, 0x00, 0x00, 0x09, 0x07, 0x01, 0x40, 0x3C, 0x96, 0x02, 0x00, 0x08, 0x1C,
- 0x1C, 0x96, 0x05, 0x00, 0x09, 0x04, 0x01, 0x08, 0x0A, 0x1C, 0x96, 0x03, 0x00, 0x09, 0x04, 0x01,
- 0x4E, 0x4F, 0x96, 0x02, 0x00, 0x08, 0x1C, 0x1C, 0x96, 0x04, 0x00, 0x08, 0xF4, 0x08, 0x0A, 0x1C,
- 0x96, 0x02, 0x00, 0x08, 0xF4, 0x4E, 0x4F, 0x96, 0x02, 0x00, 0x08, 0x1C, 0x1C, 0x96, 0x05, 0x00,
- 0x09, 0x05, 0x01, 0x08, 0x0A, 0x1C, 0x96, 0x03, 0x00, 0x09, 0x05, 0x01, 0x4E, 0x4F, 0x96, 0x02,
+ 0x1C, 0x07, 0x00, 0x00, 0x00, 0x00, 0x09, 0x09, 0x01, 0x40, 0x3C, 0x96, 0x02, 0x00, 0x08, 0x1C,
+ 0x1C, 0x96, 0x05, 0x00, 0x09, 0x06, 0x01, 0x08, 0x0A, 0x1C, 0x96, 0x03, 0x00, 0x09, 0x06, 0x01,
+ 0x4E, 0x4F, 0x96, 0x02, 0x00, 0x08, 0x1C, 0x1C, 0x96, 0x04, 0x00, 0x08, 0xF6, 0x08, 0x0A, 0x1C,
+ 0x96, 0x02, 0x00, 0x08, 0xF6, 0x4E, 0x4F, 0x96, 0x02, 0x00, 0x08, 0x1C, 0x1C, 0x96, 0x05, 0x00,
+ 0x09, 0x07, 0x01, 0x08, 0x0A, 0x1C, 0x96, 0x03, 0x00, 0x09, 0x07, 0x01, 0x4E, 0x4F, 0x96, 0x02,
0x00, 0x08, 0x1C, 0x1C, 0x96, 0x04, 0x00, 0x08, 0x98, 0x08, 0x0A, 0x1C, 0x96, 0x02, 0x00, 0x08,
- 0x98, 0x4E, 0x4F, 0x96, 0x02, 0x00, 0x08, 0x1C, 0x1C, 0x96, 0x05, 0x00, 0x09, 0x06, 0x01, 0x08,
- 0x0A, 0x1C, 0x96, 0x03, 0x00, 0x09, 0x06, 0x01, 0x4E, 0x4F, 0x96, 0x02, 0x00, 0x08, 0x1C, 0x1C,
- 0x3E, 0x4F, 0x96, 0x09, 0x00, 0x07, 0x03, 0x04, 0x00, 0x00, 0x02, 0x09, 0x07, 0x01, 0x1C, 0x96,
+ 0x98, 0x4E, 0x4F, 0x96, 0x02, 0x00, 0x08, 0x1C, 0x1C, 0x96, 0x05, 0x00, 0x09, 0x08, 0x01, 0x08,
+ 0x0A, 0x1C, 0x96, 0x03, 0x00, 0x09, 0x08, 0x01, 0x4E, 0x4F, 0x96, 0x02, 0x00, 0x08, 0x1C, 0x1C,
+ 0x3E, 0x4F, 0x96, 0x09, 0x00, 0x07, 0x03, 0x04, 0x00, 0x00, 0x02, 0x09, 0x09, 0x01, 0x1C, 0x96,
0x02, 0x00, 0x08, 0x0D, 0x4E, 0x96, 0x07, 0x00, 0x07, 0x03, 0x00, 0x00, 0x00, 0x08, 0x00, 0x3D,
- 0x17, 0x96, 0x02, 0x00, 0x08, 0x04, 0x1C, 0x96, 0x08, 0x00, 0x09, 0x08, 0x01, 0x07, 0x00, 0x00,
- 0x00, 0x00, 0x43, 0x4F, 0x96, 0x02, 0x00, 0x08, 0x04, 0x1C, 0x96, 0x03, 0x00, 0x09, 0x08, 0x01,
- 0x4E, 0x96, 0x03, 0x00, 0x09, 0x09, 0x01, 0x8E, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x3E, 0x00, 0x96, 0x14, 0x00, 0x09, 0x0A, 0x01, 0x07, 0xC8, 0x00, 0x00, 0x00, 0x07, 0x9C, 0x08,
+ 0x17, 0x96, 0x02, 0x00, 0x08, 0x04, 0x1C, 0x96, 0x08, 0x00, 0x09, 0x0A, 0x01, 0x07, 0x00, 0x00,
+ 0x00, 0x00, 0x43, 0x4F, 0x96, 0x02, 0x00, 0x08, 0x04, 0x1C, 0x96, 0x03, 0x00, 0x09, 0x0A, 0x01,
+ 0x4E, 0x96, 0x03, 0x00, 0x09, 0x0B, 0x01, 0x8E, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x3E, 0x00, 0x96, 0x14, 0x00, 0x09, 0x0C, 0x01, 0x07, 0xC8, 0x00, 0x00, 0x00, 0x07, 0x9C, 0x08,
0x00, 0x00, 0x07, 0x02, 0x00, 0x00, 0x00, 0x08, 0x01, 0x3D, 0x3C, 0x96, 0x02, 0x00, 0x08, 0x0A,
- 0x1C, 0x96, 0x08, 0x00, 0x07, 0x01, 0x00, 0x00, 0x00, 0x09, 0x0A, 0x01, 0x3D, 0x17, 0x96, 0x02,
+ 0x1C, 0x96, 0x08, 0x00, 0x07, 0x01, 0x00, 0x00, 0x00, 0x09, 0x0C, 0x01, 0x3D, 0x17, 0x96, 0x02,
0x00, 0x08, 0x0A, 0x1C, 0x96, 0x07, 0x00, 0x08, 0x15, 0x07, 0x00, 0x00, 0x00, 0x00, 0x42, 0x4F,
- 0x4F, 0x96, 0x02, 0x00, 0x08, 0x04, 0x1C, 0x96, 0x03, 0x00, 0x09, 0x08, 0x01, 0x4E, 0x96, 0x03,
- 0x00, 0x09, 0x09, 0x01, 0x4E, 0x96, 0x02, 0x00, 0x08, 0x0D, 0x4E, 0x96, 0x07, 0x00, 0x07, 0x01,
+ 0x4F, 0x96, 0x02, 0x00, 0x08, 0x04, 0x1C, 0x96, 0x03, 0x00, 0x09, 0x0A, 0x01, 0x4E, 0x96, 0x03,
+ 0x00, 0x09, 0x0B, 0x01, 0x4E, 0x96, 0x02, 0x00, 0x08, 0x0D, 0x4E, 0x96, 0x07, 0x00, 0x07, 0x01,
0x00, 0x00, 0x00, 0x08, 0x10, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x1B, 0x52, 0x17, 0x96, 0x0A, 0x00,
- 0x09, 0x0B, 0x01, 0x07, 0x9C, 0x08, 0x00, 0x00, 0x08, 0x04, 0x1C, 0x96, 0x03, 0x00, 0x09, 0x08,
- 0x01, 0x4E, 0x96, 0x03, 0x00, 0x09, 0x09, 0x01, 0x4E, 0x96, 0x02, 0x00, 0x08, 0x0D, 0x4E, 0x96,
+ 0x09, 0x0D, 0x01, 0x07, 0x9C, 0x08, 0x00, 0x00, 0x08, 0x04, 0x1C, 0x96, 0x03, 0x00, 0x09, 0x0A,
+ 0x01, 0x4E, 0x96, 0x03, 0x00, 0x09, 0x0B, 0x01, 0x4E, 0x96, 0x02, 0x00, 0x08, 0x0D, 0x4E, 0x96,
0x07, 0x00, 0x07, 0x03, 0x00, 0x00, 0x00, 0x08, 0x02, 0x3D, 0x17, 0x96, 0x08, 0x00, 0x07, 0x03,
- 0x00, 0x00, 0x00, 0x02, 0x08, 0x04, 0x1C, 0x96, 0x03, 0x00, 0x09, 0x08, 0x01, 0x4E, 0x96, 0x03,
- 0x00, 0x09, 0x09, 0x01, 0x4E, 0x96, 0x02, 0x00, 0x08, 0x0D, 0x4E, 0x96, 0x07, 0x00, 0x07, 0x03,
+ 0x00, 0x00, 0x00, 0x02, 0x08, 0x04, 0x1C, 0x96, 0x03, 0x00, 0x09, 0x0A, 0x01, 0x4E, 0x96, 0x03,
+ 0x00, 0x09, 0x0B, 0x01, 0x4E, 0x96, 0x02, 0x00, 0x08, 0x0D, 0x4E, 0x96, 0x07, 0x00, 0x07, 0x03,
0x00, 0x00, 0x00, 0x08, 0x00, 0x3D, 0x17, 0x96, 0x02, 0x00, 0x08, 0x04, 0x1C, 0x96, 0x03, 0x00,
- 0x09, 0x08, 0x01, 0x4E, 0x96, 0x03, 0x00, 0x09, 0x0C, 0x01, 0x8E, 0x08, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x27, 0x00, 0x96, 0x02, 0x00, 0x08, 0x0A, 0x1C, 0x96, 0x0A, 0x00, 0x09, 0x0D,
- 0x01, 0x07, 0x00, 0x00, 0x00, 0x00, 0x08, 0xF7, 0x40, 0x4F, 0x96, 0x02, 0x00, 0x08, 0x0A, 0x1C,
+ 0x09, 0x0A, 0x01, 0x4E, 0x96, 0x03, 0x00, 0x09, 0x0E, 0x01, 0x8E, 0x08, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x27, 0x00, 0x96, 0x02, 0x00, 0x08, 0x0A, 0x1C, 0x96, 0x0A, 0x00, 0x09, 0x0F,
+ 0x01, 0x07, 0x00, 0x00, 0x00, 0x00, 0x08, 0xF9, 0x40, 0x4F, 0x96, 0x02, 0x00, 0x08, 0x0A, 0x1C,
0x96, 0x07, 0x00, 0x08, 0x15, 0x07, 0x00, 0x00, 0x00, 0x00, 0x42, 0x4F, 0x4F, 0x96, 0x02, 0x00,
- 0x08, 0x04, 0x1C, 0x96, 0x03, 0x00, 0x09, 0x08, 0x01, 0x4E, 0x96, 0x03, 0x00, 0x09, 0x0C, 0x01,
+ 0x08, 0x04, 0x1C, 0x96, 0x03, 0x00, 0x09, 0x0A, 0x01, 0x4E, 0x96, 0x03, 0x00, 0x09, 0x0E, 0x01,
0x4E, 0x96, 0x02, 0x00, 0x08, 0x0D, 0x4E, 0x96, 0x07, 0x00, 0x07, 0x01, 0x00, 0x00, 0x00, 0x08,
- 0x10, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x1B, 0x52, 0x17, 0x96, 0x0A, 0x00, 0x09, 0x0E, 0x01, 0x07,
- 0x9D, 0x08, 0x00, 0x00, 0x08, 0x04, 0x1C, 0x96, 0x03, 0x00, 0x09, 0x08, 0x01, 0x4E, 0x96, 0x03,
- 0x00, 0x09, 0x0C, 0x01, 0x4E, 0x96, 0x02, 0x00, 0x08, 0x0D, 0x4E, 0x96, 0x07, 0x00, 0x07, 0x03,
+ 0x10, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x1B, 0x52, 0x17, 0x96, 0x0A, 0x00, 0x09, 0x10, 0x01, 0x07,
+ 0x9D, 0x08, 0x00, 0x00, 0x08, 0x04, 0x1C, 0x96, 0x03, 0x00, 0x09, 0x0A, 0x01, 0x4E, 0x96, 0x03,
+ 0x00, 0x09, 0x0E, 0x01, 0x4E, 0x96, 0x02, 0x00, 0x08, 0x0D, 0x4E, 0x96, 0x07, 0x00, 0x07, 0x03,
0x00, 0x00, 0x00, 0x08, 0x02, 0x3D, 0x17, 0x96, 0x08, 0x00, 0x07, 0x03, 0x00, 0x00, 0x00, 0x02,
- 0x08, 0x04, 0x1C, 0x96, 0x03, 0x00, 0x09, 0x08, 0x01, 0x4E, 0x96, 0x03, 0x00, 0x09, 0x0C, 0x01,
+ 0x08, 0x04, 0x1C, 0x96, 0x03, 0x00, 0x09, 0x0A, 0x01, 0x4E, 0x96, 0x03, 0x00, 0x09, 0x0E, 0x01,
0x4E, 0x96, 0x02, 0x00, 0x08, 0x0D, 0x4E, 0x96, 0x07, 0x00, 0x07, 0x03, 0x00, 0x00, 0x00, 0x08,
- 0x00, 0x3D, 0x17, 0x96, 0x0B, 0x00, 0x09, 0x10, 0x01, 0x07, 0x98, 0x08, 0x00, 0x00, 0x09, 0x0F,
+ 0x00, 0x3D, 0x17, 0x96, 0x0B, 0x00, 0x09, 0x12, 0x01, 0x07, 0x98, 0x08, 0x00, 0x00, 0x09, 0x11,
0x01, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x0D, 0x4E, 0x96, 0x07, 0x00, 0x07, 0x03, 0x00, 0x00, 0x00,
- 0x08, 0x02, 0x3D, 0x17, 0x96, 0x09, 0x00, 0x07, 0x03, 0x00, 0x00, 0x00, 0x02, 0x09, 0x0F, 0x01,
+ 0x08, 0x02, 0x3D, 0x17, 0x96, 0x09, 0x00, 0x07, 0x03, 0x00, 0x00, 0x00, 0x02, 0x09, 0x11, 0x01,
0x1C, 0x96, 0x02, 0x00, 0x08, 0x0D, 0x4E, 0x96, 0x07, 0x00, 0x07, 0x03, 0x00, 0x00, 0x00, 0x08,
- 0x00, 0x3D, 0x17, 0x96, 0x03, 0x00, 0x09, 0x11, 0x01, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x9E, 0x8E,
+ 0x00, 0x3D, 0x17, 0x96, 0x03, 0x00, 0x09, 0x13, 0x01, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x9E, 0x8E,
0x0F, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x69, 0x6E, 0x64, 0x65, 0x78, 0x00, 0x2A,
- 0x00, 0x96, 0x13, 0x00, 0x08, 0xF1, 0x07, 0xC8, 0x00, 0x00, 0x00, 0x07, 0x38, 0x08, 0x00, 0x00,
- 0x07, 0x02, 0x00, 0x00, 0x00, 0x08, 0x01, 0x3D, 0x3C, 0x96, 0x02, 0x00, 0x08, 0xF2, 0x1C, 0x96,
- 0x07, 0x00, 0x07, 0x01, 0x00, 0x00, 0x00, 0x08, 0xF1, 0x3D, 0x3E, 0x4F, 0x96, 0x12, 0x00, 0x02,
+ 0x00, 0x96, 0x13, 0x00, 0x08, 0xF3, 0x07, 0xC8, 0x00, 0x00, 0x00, 0x07, 0x38, 0x08, 0x00, 0x00,
+ 0x07, 0x02, 0x00, 0x00, 0x00, 0x08, 0x01, 0x3D, 0x3C, 0x96, 0x02, 0x00, 0x08, 0xF4, 0x1C, 0x96,
+ 0x07, 0x00, 0x07, 0x01, 0x00, 0x00, 0x00, 0x08, 0xF3, 0x3D, 0x3E, 0x4F, 0x96, 0x12, 0x00, 0x02,
0x07, 0xC9, 0x00, 0x00, 0x00, 0x07, 0x38, 0x08, 0x00, 0x00, 0x07, 0x02, 0x00, 0x00, 0x00, 0x08,
- 0x01, 0x3D, 0x96, 0x0A, 0x00, 0x08, 0xC7, 0x07, 0x03, 0x00, 0x00, 0x00, 0x09, 0x11, 0x01, 0x1C,
- 0x96, 0x02, 0x00, 0x08, 0x07, 0x52, 0x17, 0x96, 0x0B, 0x00, 0x09, 0x12, 0x01, 0x07, 0x38, 0x08,
- 0x00, 0x00, 0x09, 0x11, 0x01, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x0D, 0x4E, 0x96, 0x07, 0x00, 0x07,
+ 0x01, 0x3D, 0x96, 0x0A, 0x00, 0x08, 0xC7, 0x07, 0x03, 0x00, 0x00, 0x00, 0x09, 0x13, 0x01, 0x1C,
+ 0x96, 0x02, 0x00, 0x08, 0x07, 0x52, 0x17, 0x96, 0x0B, 0x00, 0x09, 0x14, 0x01, 0x07, 0x38, 0x08,
+ 0x00, 0x00, 0x09, 0x13, 0x01, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x0D, 0x4E, 0x96, 0x07, 0x00, 0x07,
0x03, 0x00, 0x00, 0x00, 0x08, 0x02, 0x3D, 0x17, 0x96, 0x09, 0x00, 0x07, 0x03, 0x00, 0x00, 0x00,
- 0x02, 0x09, 0x11, 0x01, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x0D, 0x4E, 0x96, 0x07, 0x00, 0x07, 0x03,
- 0x00, 0x00, 0x00, 0x08, 0x00, 0x3D, 0x17, 0x96, 0x14, 0x00, 0x09, 0x13, 0x01, 0x07, 0x00, 0x00,
+ 0x02, 0x09, 0x13, 0x01, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x0D, 0x4E, 0x96, 0x07, 0x00, 0x07, 0x03,
+ 0x00, 0x00, 0x00, 0x08, 0x00, 0x3D, 0x17, 0x96, 0x14, 0x00, 0x09, 0x15, 0x01, 0x07, 0x00, 0x00,
0x00, 0x00, 0x07, 0x6F, 0x00, 0x00, 0x00, 0x07, 0x02, 0x00, 0x00, 0x00, 0x08, 0x39, 0x3D, 0x1D,
- 0x96, 0x10, 0x00, 0x07, 0x64, 0x00, 0x00, 0x00, 0x09, 0x14, 0x01, 0x07, 0x6F, 0x00, 0x00, 0x00,
- 0x09, 0x13, 0x01, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x0D, 0x4E, 0x96, 0x07, 0x00, 0x07, 0x04, 0x00,
+ 0x96, 0x10, 0x00, 0x07, 0x64, 0x00, 0x00, 0x00, 0x09, 0x16, 0x01, 0x07, 0x6F, 0x00, 0x00, 0x00,
+ 0x09, 0x15, 0x01, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x0D, 0x4E, 0x96, 0x07, 0x00, 0x07, 0x04, 0x00,
0x00, 0x00, 0x08, 0x02, 0x3D, 0x17, 0x96, 0x09, 0x00, 0x07, 0x03, 0x04, 0x00, 0x00, 0x02, 0x09,
- 0x13, 0x01, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x0D, 0x4E, 0x96, 0x07, 0x00, 0x07, 0x03, 0x00, 0x00,
- 0x00, 0x08, 0x00, 0x3D, 0x17, 0x96, 0x08, 0x00, 0x09, 0x15, 0x01, 0x07, 0x00, 0x00, 0x00, 0x00,
- 0x43, 0x1D, 0x96, 0x0B, 0x00, 0x09, 0x16, 0x01, 0x07, 0x58, 0x02, 0x00, 0x00, 0x09, 0x15, 0x01,
+ 0x15, 0x01, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x0D, 0x4E, 0x96, 0x07, 0x00, 0x07, 0x03, 0x00, 0x00,
+ 0x00, 0x08, 0x00, 0x3D, 0x17, 0x96, 0x08, 0x00, 0x09, 0x17, 0x01, 0x07, 0x00, 0x00, 0x00, 0x00,
+ 0x43, 0x1D, 0x96, 0x0B, 0x00, 0x09, 0x18, 0x01, 0x07, 0x58, 0x02, 0x00, 0x00, 0x09, 0x17, 0x01,
0x1C, 0x96, 0x07, 0x00, 0x07, 0x03, 0x00, 0x00, 0x00, 0x08, 0x02, 0x3D, 0x17, 0x96, 0x03, 0x00,
- 0x09, 0x15, 0x01, 0x1C, 0x96, 0x07, 0x00, 0x07, 0x01, 0x00, 0x00, 0x00, 0x08, 0x10, 0x1C, 0x96,
+ 0x09, 0x17, 0x01, 0x1C, 0x96, 0x07, 0x00, 0x07, 0x01, 0x00, 0x00, 0x00, 0x08, 0x10, 0x1C, 0x96,
0x02, 0x00, 0x08, 0x1B, 0x52, 0x17, 0x96, 0x09, 0x00, 0x07, 0x07, 0x00, 0x00, 0x00, 0x02, 0x09,
- 0x15, 0x01, 0x1C, 0x96, 0x07, 0x00, 0x07, 0x03, 0x00, 0x00, 0x00, 0x08, 0x00, 0x3D, 0x17, 0x96,
- 0x02, 0x00, 0x08, 0x04, 0x1C, 0x96, 0x08, 0x00, 0x09, 0x17, 0x01, 0x07, 0x00, 0x00, 0x00, 0x00,
- 0x43, 0x4F, 0x96, 0x02, 0x00, 0x08, 0x04, 0x1C, 0x96, 0x03, 0x00, 0x09, 0x17, 0x01, 0x4E, 0x96,
- 0x14, 0x00, 0x09, 0x18, 0x01, 0x07, 0x00, 0x00, 0x00, 0x00, 0x07, 0x66, 0x08, 0x00, 0x00, 0x07,
+ 0x17, 0x01, 0x1C, 0x96, 0x07, 0x00, 0x07, 0x03, 0x00, 0x00, 0x00, 0x08, 0x00, 0x3D, 0x17, 0x96,
+ 0x02, 0x00, 0x08, 0x04, 0x1C, 0x96, 0x08, 0x00, 0x09, 0x19, 0x01, 0x07, 0x00, 0x00, 0x00, 0x00,
+ 0x43, 0x4F, 0x96, 0x02, 0x00, 0x08, 0x04, 0x1C, 0x96, 0x03, 0x00, 0x09, 0x19, 0x01, 0x4E, 0x96,
+ 0x14, 0x00, 0x09, 0x1A, 0x01, 0x07, 0x00, 0x00, 0x00, 0x00, 0x07, 0x66, 0x08, 0x00, 0x00, 0x07,
0x02, 0x00, 0x00, 0x00, 0x08, 0x39, 0x3D, 0x4F, 0x96, 0x0F, 0x00, 0x07, 0x01, 0x00, 0x00, 0x00,
- 0x09, 0x19, 0x01, 0x07, 0x66, 0x08, 0x00, 0x00, 0x08, 0x04, 0x1C, 0x96, 0x03, 0x00, 0x09, 0x17,
- 0x01, 0x4E, 0x96, 0x03, 0x00, 0x09, 0x18, 0x01, 0x4E, 0x96, 0x07, 0x00, 0x07, 0x04, 0x00, 0x00,
- 0x00, 0x08, 0x02, 0x3D, 0x17, 0x96, 0x0F, 0x00, 0x07, 0x04, 0x00, 0x00, 0x00, 0x09, 0x1A, 0x01,
- 0x07, 0x66, 0x08, 0x00, 0x00, 0x08, 0x04, 0x1C, 0x96, 0x03, 0x00, 0x09, 0x17, 0x01, 0x4E, 0x96,
- 0x03, 0x00, 0x09, 0x18, 0x01, 0x4E, 0x96, 0x07, 0x00, 0x07, 0x04, 0x00, 0x00, 0x00, 0x08, 0x03,
- 0x3D, 0x17, 0x96, 0x0F, 0x00, 0x07, 0x0A, 0x00, 0x00, 0x00, 0x09, 0x1B, 0x01, 0x07, 0x66, 0x08,
- 0x00, 0x00, 0x08, 0x04, 0x1C, 0x96, 0x03, 0x00, 0x09, 0x17, 0x01, 0x4E, 0x96, 0x03, 0x00, 0x09,
- 0x18, 0x01, 0x4E, 0x96, 0x07, 0x00, 0x07, 0x04, 0x00, 0x00, 0x00, 0x08, 0x03, 0x3D, 0x17, 0x96,
- 0x05, 0x00, 0x09, 0x1C, 0x01, 0x08, 0x04, 0x1C, 0x96, 0x03, 0x00, 0x09, 0x17, 0x01, 0x4E, 0x96,
- 0x03, 0x00, 0x09, 0x18, 0x01, 0x4E, 0x1D, 0x96, 0x03, 0x00, 0x09, 0x1D, 0x01, 0x1C, 0x96, 0x02,
+ 0x09, 0x1B, 0x01, 0x07, 0x66, 0x08, 0x00, 0x00, 0x08, 0x04, 0x1C, 0x96, 0x03, 0x00, 0x09, 0x19,
+ 0x01, 0x4E, 0x96, 0x03, 0x00, 0x09, 0x1A, 0x01, 0x4E, 0x96, 0x07, 0x00, 0x07, 0x04, 0x00, 0x00,
+ 0x00, 0x08, 0x02, 0x3D, 0x17, 0x96, 0x0F, 0x00, 0x07, 0x04, 0x00, 0x00, 0x00, 0x09, 0x1C, 0x01,
+ 0x07, 0x66, 0x08, 0x00, 0x00, 0x08, 0x04, 0x1C, 0x96, 0x03, 0x00, 0x09, 0x19, 0x01, 0x4E, 0x96,
+ 0x03, 0x00, 0x09, 0x1A, 0x01, 0x4E, 0x96, 0x07, 0x00, 0x07, 0x04, 0x00, 0x00, 0x00, 0x08, 0x03,
+ 0x3D, 0x17, 0x96, 0x0F, 0x00, 0x07, 0x0A, 0x00, 0x00, 0x00, 0x09, 0x1D, 0x01, 0x07, 0x66, 0x08,
+ 0x00, 0x00, 0x08, 0x04, 0x1C, 0x96, 0x03, 0x00, 0x09, 0x19, 0x01, 0x4E, 0x96, 0x03, 0x00, 0x09,
+ 0x1A, 0x01, 0x4E, 0x96, 0x07, 0x00, 0x07, 0x04, 0x00, 0x00, 0x00, 0x08, 0x03, 0x3D, 0x17, 0x96,
+ 0x05, 0x00, 0x09, 0x1E, 0x01, 0x08, 0x04, 0x1C, 0x96, 0x03, 0x00, 0x09, 0x19, 0x01, 0x4E, 0x96,
+ 0x03, 0x00, 0x09, 0x1A, 0x01, 0x4E, 0x1D, 0x96, 0x03, 0x00, 0x09, 0x1F, 0x01, 0x1C, 0x96, 0x02,
0x00, 0x08, 0x0D, 0x4E, 0x96, 0x02, 0x00, 0x08, 0x50, 0x8E, 0x0D, 0x00, 0x00, 0x01, 0x00, 0x00,
0x00, 0x00, 0x00, 0x73, 0x72, 0x63, 0x00, 0x24, 0x00, 0x96, 0x02, 0x00, 0x08, 0x52, 0x1C, 0x96,
0x07, 0x00, 0x07, 0x01, 0x00, 0x00, 0x00, 0x08, 0x67, 0x40, 0x96, 0x07, 0x00, 0x07, 0x01, 0x00,
- 0x00, 0x00, 0x08, 0x0A, 0x1C, 0x96, 0x03, 0x00, 0x09, 0x1E, 0x01, 0x52, 0x17, 0x4F, 0x96, 0x0B,
- 0x00, 0x09, 0x1F, 0x01, 0x07, 0x90, 0x01, 0x00, 0x00, 0x09, 0x1D, 0x01, 0x1C, 0x96, 0x02, 0x00,
+ 0x00, 0x00, 0x08, 0x0A, 0x1C, 0x96, 0x03, 0x00, 0x09, 0x20, 0x01, 0x52, 0x17, 0x4F, 0x96, 0x0B,
+ 0x00, 0x09, 0x21, 0x01, 0x07, 0x90, 0x01, 0x00, 0x00, 0x09, 0x1F, 0x01, 0x1C, 0x96, 0x02, 0x00,
0x08, 0x0D, 0x4E, 0x96, 0x07, 0x00, 0x07, 0x03, 0x00, 0x00, 0x00, 0x08, 0x02, 0x3D, 0x17, 0x96,
- 0x09, 0x00, 0x07, 0x03, 0x00, 0x00, 0x00, 0x02, 0x09, 0x1D, 0x01, 0x1C, 0x96, 0x02, 0x00, 0x08,
+ 0x09, 0x00, 0x07, 0x03, 0x00, 0x00, 0x00, 0x02, 0x09, 0x1F, 0x01, 0x1C, 0x96, 0x02, 0x00, 0x08,
0x0D, 0x4E, 0x96, 0x07, 0x00, 0x07, 0x03, 0x00, 0x00, 0x00, 0x08, 0x00, 0x3D, 0x17, 0x96, 0x02,
- 0x00, 0x08, 0x04, 0x1C, 0x96, 0x08, 0x00, 0x09, 0x20, 0x01, 0x07, 0x00, 0x00, 0x00, 0x00, 0x43,
- 0x4F, 0x96, 0x02, 0x00, 0x08, 0x04, 0x1C, 0x96, 0x03, 0x00, 0x09, 0x20, 0x01, 0x4E, 0x96, 0x03,
- 0x00, 0x09, 0x21, 0x01, 0x8E, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x76, 0x00, 0x96,
- 0x03, 0x00, 0x09, 0x22, 0x01, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x19, 0x4E, 0x96, 0x05, 0x00, 0x07,
+ 0x00, 0x08, 0x04, 0x1C, 0x96, 0x08, 0x00, 0x09, 0x22, 0x01, 0x07, 0x00, 0x00, 0x00, 0x00, 0x43,
+ 0x4F, 0x96, 0x02, 0x00, 0x08, 0x04, 0x1C, 0x96, 0x03, 0x00, 0x09, 0x22, 0x01, 0x4E, 0x96, 0x03,
+ 0x00, 0x09, 0x23, 0x01, 0x8E, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x76, 0x00, 0x96,
+ 0x03, 0x00, 0x09, 0x24, 0x01, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x19, 0x4E, 0x96, 0x05, 0x00, 0x07,
0x00, 0x00, 0x00, 0x00, 0x49, 0x9D, 0x02, 0x00, 0x38, 0x00, 0x96, 0x02, 0x00, 0x08, 0x0A, 0x1C,
- 0x96, 0x05, 0x00, 0x08, 0x13, 0x09, 0x22, 0x01, 0x1C, 0x96, 0x05, 0x00, 0x07, 0x00, 0x00, 0x00,
- 0x00, 0x4E, 0x4F, 0x96, 0x02, 0x00, 0x08, 0x0A, 0x1C, 0x96, 0x06, 0x00, 0x09, 0x23, 0x01, 0x09,
- 0x22, 0x01, 0x1C, 0x96, 0x05, 0x00, 0x07, 0x01, 0x00, 0x00, 0x00, 0x4E, 0x4F, 0x99, 0x02, 0x00,
+ 0x96, 0x05, 0x00, 0x08, 0x13, 0x09, 0x24, 0x01, 0x1C, 0x96, 0x05, 0x00, 0x07, 0x00, 0x00, 0x00,
+ 0x00, 0x4E, 0x4F, 0x96, 0x02, 0x00, 0x08, 0x0A, 0x1C, 0x96, 0x06, 0x00, 0x09, 0x25, 0x01, 0x09,
+ 0x24, 0x01, 0x1C, 0x96, 0x05, 0x00, 0x07, 0x01, 0x00, 0x00, 0x00, 0x4E, 0x4F, 0x99, 0x02, 0x00,
0x23, 0x00, 0x96, 0x02, 0x00, 0x08, 0x0A, 0x1C, 0x96, 0x07, 0x00, 0x08, 0x13, 0x07, 0x00, 0x00,
- 0x00, 0x00, 0x4F, 0x96, 0x02, 0x00, 0x08, 0x0A, 0x1C, 0x96, 0x08, 0x00, 0x09, 0x23, 0x01, 0x07,
+ 0x00, 0x00, 0x4F, 0x96, 0x02, 0x00, 0x08, 0x0A, 0x1C, 0x96, 0x08, 0x00, 0x09, 0x25, 0x01, 0x07,
0x00, 0x00, 0x00, 0x00, 0x4F, 0x4F, 0x96, 0x02, 0x00, 0x08, 0x04, 0x1C, 0x96, 0x03, 0x00, 0x09,
- 0x20, 0x01, 0x4E, 0x96, 0x03, 0x00, 0x09, 0x21, 0x01, 0x4E, 0x96, 0x03, 0x00, 0x09, 0x24, 0x01,
+ 0x22, 0x01, 0x4E, 0x96, 0x03, 0x00, 0x09, 0x23, 0x01, 0x4E, 0x96, 0x03, 0x00, 0x09, 0x26, 0x01,
0x8E, 0x0E, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x61, 0x00, 0x00, 0x62, 0x00, 0x21,
- 0x00, 0x96, 0x03, 0x00, 0x09, 0x26, 0x01, 0x1C, 0x96, 0x08, 0x00, 0x07, 0x01, 0x00, 0x00, 0x00,
- 0x09, 0x25, 0x01, 0x1C, 0x96, 0x03, 0x00, 0x09, 0x27, 0x01, 0x52, 0x96, 0x02, 0x00, 0x08, 0x19,
- 0x4E, 0x3E, 0x4F, 0x96, 0x02, 0x00, 0x08, 0x04, 0x1C, 0x96, 0x03, 0x00, 0x09, 0x20, 0x01, 0x4E,
- 0x96, 0x03, 0x00, 0x09, 0x21, 0x01, 0x4E, 0x96, 0x03, 0x00, 0x09, 0x28, 0x01, 0x8E, 0x15, 0x00,
+ 0x00, 0x96, 0x03, 0x00, 0x09, 0x28, 0x01, 0x1C, 0x96, 0x08, 0x00, 0x07, 0x01, 0x00, 0x00, 0x00,
+ 0x09, 0x27, 0x01, 0x1C, 0x96, 0x03, 0x00, 0x09, 0x29, 0x01, 0x52, 0x96, 0x02, 0x00, 0x08, 0x19,
+ 0x4E, 0x3E, 0x4F, 0x96, 0x02, 0x00, 0x08, 0x04, 0x1C, 0x96, 0x03, 0x00, 0x09, 0x22, 0x01, 0x4E,
+ 0x96, 0x03, 0x00, 0x09, 0x23, 0x01, 0x4E, 0x96, 0x03, 0x00, 0x09, 0x2A, 0x01, 0x8E, 0x15, 0x00,
0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x61, 0x00, 0x00, 0x62, 0x00, 0x00, 0x76, 0x61, 0x6C,
- 0x75, 0x65, 0x00, 0x7F, 0x00, 0x96, 0x03, 0x00, 0x09, 0x26, 0x01, 0x1C, 0x96, 0x03, 0x00, 0x09,
- 0x23, 0x01, 0x4E, 0x96, 0x03, 0x00, 0x09, 0x29, 0x01, 0x1C, 0x96, 0x03, 0x00, 0x09, 0x25, 0x01,
- 0x1C, 0x96, 0x03, 0x00, 0x09, 0x23, 0x01, 0x4E, 0x96, 0x03, 0x00, 0x09, 0x26, 0x01, 0x1C, 0x96,
- 0x03, 0x00, 0x09, 0x23, 0x01, 0x4E, 0x0B, 0x0C, 0x47, 0x96, 0x03, 0x00, 0x09, 0x26, 0x01, 0x1C,
- 0x96, 0x02, 0x00, 0x08, 0x13, 0x4E, 0x96, 0x03, 0x00, 0x09, 0x29, 0x01, 0x1C, 0x96, 0x03, 0x00,
- 0x09, 0x25, 0x01, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x13, 0x4E, 0x96, 0x03, 0x00, 0x09, 0x26, 0x01,
+ 0x75, 0x65, 0x00, 0x7F, 0x00, 0x96, 0x03, 0x00, 0x09, 0x28, 0x01, 0x1C, 0x96, 0x03, 0x00, 0x09,
+ 0x25, 0x01, 0x4E, 0x96, 0x03, 0x00, 0x09, 0x2B, 0x01, 0x1C, 0x96, 0x03, 0x00, 0x09, 0x27, 0x01,
+ 0x1C, 0x96, 0x03, 0x00, 0x09, 0x25, 0x01, 0x4E, 0x96, 0x03, 0x00, 0x09, 0x28, 0x01, 0x1C, 0x96,
+ 0x03, 0x00, 0x09, 0x25, 0x01, 0x4E, 0x0B, 0x0C, 0x47, 0x96, 0x03, 0x00, 0x09, 0x28, 0x01, 0x1C,
+ 0x96, 0x02, 0x00, 0x08, 0x13, 0x4E, 0x96, 0x03, 0x00, 0x09, 0x2B, 0x01, 0x1C, 0x96, 0x03, 0x00,
+ 0x09, 0x27, 0x01, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x13, 0x4E, 0x96, 0x03, 0x00, 0x09, 0x28, 0x01,
0x1C, 0x96, 0x02, 0x00, 0x08, 0x13, 0x4E, 0x0B, 0x0C, 0x47, 0x96, 0x07, 0x00, 0x07, 0x02, 0x00,
- 0x00, 0x00, 0x08, 0x04, 0x1C, 0x96, 0x03, 0x00, 0x09, 0x20, 0x01, 0x4E, 0x96, 0x03, 0x00, 0x09,
- 0x21, 0x01, 0x53, 0x3E, 0x4F, 0x96, 0x02, 0x00, 0x08, 0x04, 0x1C, 0x96, 0x03, 0x00, 0x09, 0x20,
- 0x01, 0x4E, 0x96, 0x03, 0x00, 0x09, 0x21, 0x01, 0x4E, 0x96, 0x03, 0x00, 0x09, 0x2A, 0x01, 0x8E,
+ 0x00, 0x00, 0x08, 0x04, 0x1C, 0x96, 0x03, 0x00, 0x09, 0x22, 0x01, 0x4E, 0x96, 0x03, 0x00, 0x09,
+ 0x23, 0x01, 0x53, 0x3E, 0x4F, 0x96, 0x02, 0x00, 0x08, 0x04, 0x1C, 0x96, 0x03, 0x00, 0x09, 0x22,
+ 0x01, 0x4E, 0x96, 0x03, 0x00, 0x09, 0x23, 0x01, 0x4E, 0x96, 0x03, 0x00, 0x09, 0x2C, 0x01, 0x8E,
0x17, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6C, 0x65, 0x6E, 0x67, 0x74, 0x68, 0x00,
0x00, 0x61, 0x6E, 0x67, 0x6C, 0x65, 0x00, 0x5C, 0x00, 0x96, 0x02, 0x00, 0x08, 0x19, 0x1C, 0x96,
- 0x03, 0x00, 0x09, 0x2C, 0x01, 0x1C, 0x96, 0x08, 0x00, 0x07, 0x01, 0x00, 0x00, 0x00, 0x09, 0x2B,
- 0x01, 0x1C, 0x96, 0x03, 0x00, 0x09, 0x2E, 0x01, 0x52, 0x0C, 0x96, 0x02, 0x00, 0x08, 0x19, 0x1C,
- 0x96, 0x03, 0x00, 0x09, 0x2C, 0x01, 0x1C, 0x96, 0x08, 0x00, 0x07, 0x01, 0x00, 0x00, 0x00, 0x09,
- 0x2B, 0x01, 0x1C, 0x96, 0x03, 0x00, 0x09, 0x2D, 0x01, 0x52, 0x0C, 0x96, 0x07, 0x00, 0x07, 0x02,
- 0x00, 0x00, 0x00, 0x08, 0x04, 0x1C, 0x96, 0x03, 0x00, 0x09, 0x20, 0x01, 0x4E, 0x96, 0x03, 0x00,
- 0x09, 0x21, 0x01, 0x53, 0x3E, 0x4F, 0x96, 0x01, 0x00, 0x02, 0x8E, 0x08, 0x00, 0x00, 0x00, 0x00,
+ 0x03, 0x00, 0x09, 0x2E, 0x01, 0x1C, 0x96, 0x08, 0x00, 0x07, 0x01, 0x00, 0x00, 0x00, 0x09, 0x2D,
+ 0x01, 0x1C, 0x96, 0x03, 0x00, 0x09, 0x30, 0x01, 0x52, 0x0C, 0x96, 0x02, 0x00, 0x08, 0x19, 0x1C,
+ 0x96, 0x03, 0x00, 0x09, 0x2E, 0x01, 0x1C, 0x96, 0x08, 0x00, 0x07, 0x01, 0x00, 0x00, 0x00, 0x09,
+ 0x2D, 0x01, 0x1C, 0x96, 0x03, 0x00, 0x09, 0x2F, 0x01, 0x52, 0x0C, 0x96, 0x07, 0x00, 0x07, 0x02,
+ 0x00, 0x00, 0x00, 0x08, 0x04, 0x1C, 0x96, 0x03, 0x00, 0x09, 0x22, 0x01, 0x4E, 0x96, 0x03, 0x00,
+ 0x09, 0x23, 0x01, 0x53, 0x3E, 0x4F, 0x96, 0x01, 0x00, 0x02, 0x8E, 0x08, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x49, 0x00, 0x96, 0x02, 0x00, 0x08, 0x0A, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x13,
0x4E, 0x96, 0x02, 0x00, 0x08, 0x0A, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x13, 0x4E, 0x0C, 0x96, 0x02,
- 0x00, 0x08, 0x0A, 0x1C, 0x96, 0x03, 0x00, 0x09, 0x23, 0x01, 0x4E, 0x96, 0x02, 0x00, 0x08, 0x0A,
- 0x1C, 0x96, 0x03, 0x00, 0x09, 0x23, 0x01, 0x4E, 0x0C, 0x47, 0x96, 0x08, 0x00, 0x07, 0x01, 0x00,
- 0x00, 0x00, 0x09, 0x2B, 0x01, 0x1C, 0x96, 0x03, 0x00, 0x09, 0x2F, 0x01, 0x52, 0x3E, 0x96, 0x09,
- 0x00, 0x08, 0x19, 0x07, 0x03, 0x00, 0x00, 0x00, 0x08, 0x04, 0x1C, 0x96, 0x03, 0x00, 0x09, 0x20,
- 0x01, 0x4E, 0x96, 0x03, 0x00, 0x09, 0x21, 0x01, 0x4E, 0x96, 0x02, 0x00, 0x08, 0x0D, 0x4E, 0x96,
+ 0x00, 0x08, 0x0A, 0x1C, 0x96, 0x03, 0x00, 0x09, 0x25, 0x01, 0x4E, 0x96, 0x02, 0x00, 0x08, 0x0A,
+ 0x1C, 0x96, 0x03, 0x00, 0x09, 0x25, 0x01, 0x4E, 0x0C, 0x47, 0x96, 0x08, 0x00, 0x07, 0x01, 0x00,
+ 0x00, 0x00, 0x09, 0x2D, 0x01, 0x1C, 0x96, 0x03, 0x00, 0x09, 0x31, 0x01, 0x52, 0x3E, 0x96, 0x09,
+ 0x00, 0x08, 0x19, 0x07, 0x03, 0x00, 0x00, 0x00, 0x08, 0x04, 0x1C, 0x96, 0x03, 0x00, 0x09, 0x22,
+ 0x01, 0x4E, 0x96, 0x03, 0x00, 0x09, 0x23, 0x01, 0x4E, 0x96, 0x02, 0x00, 0x08, 0x0D, 0x4E, 0x96,
0x02, 0x00, 0x08, 0x07, 0x52, 0x17, 0x96, 0x02, 0x00, 0x08, 0x04, 0x1C, 0x96, 0x03, 0x00, 0x09,
- 0x20, 0x01, 0x4E, 0x96, 0x03, 0x00, 0x09, 0x21, 0x01, 0x4E, 0x96, 0x02, 0x00, 0x08, 0x0D, 0x4E,
- 0x96, 0x03, 0x00, 0x09, 0x30, 0x01, 0x8E, 0x0F, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x22, 0x01, 0x4E, 0x96, 0x03, 0x00, 0x09, 0x23, 0x01, 0x4E, 0x96, 0x02, 0x00, 0x08, 0x0D, 0x4E,
+ 0x96, 0x03, 0x00, 0x09, 0x32, 0x01, 0x8E, 0x0F, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
0x6F, 0x74, 0x68, 0x65, 0x72, 0x00, 0x50, 0x00, 0x96, 0x02, 0x00, 0x08, 0x0A, 0x1C, 0x96, 0x03,
- 0x00, 0x09, 0x23, 0x01, 0x4E, 0x96, 0x03, 0x00, 0x09, 0x31, 0x01, 0x1C, 0x96, 0x03, 0x00, 0x09,
- 0x23, 0x01, 0x4E, 0x47, 0x96, 0x02, 0x00, 0x08, 0x0A, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x13, 0x4E,
- 0x96, 0x03, 0x00, 0x09, 0x31, 0x01, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x13, 0x4E, 0x47, 0x96, 0x07,
- 0x00, 0x07, 0x02, 0x00, 0x00, 0x00, 0x08, 0x04, 0x1C, 0x96, 0x03, 0x00, 0x09, 0x20, 0x01, 0x4E,
- 0x96, 0x03, 0x00, 0x09, 0x21, 0x01, 0x53, 0x3E, 0x4F, 0x96, 0x02, 0x00, 0x08, 0x04, 0x1C, 0x96,
- 0x03, 0x00, 0x09, 0x20, 0x01, 0x4E, 0x96, 0x03, 0x00, 0x09, 0x21, 0x01, 0x4E, 0x96, 0x02, 0x00,
- 0x08, 0x0D, 0x4E, 0x96, 0x03, 0x00, 0x09, 0x32, 0x01, 0x8E, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x33, 0x00, 0x96, 0x02, 0x00, 0x08, 0x0A, 0x1C, 0x96, 0x03, 0x00, 0x09, 0x23, 0x01,
+ 0x00, 0x09, 0x25, 0x01, 0x4E, 0x96, 0x03, 0x00, 0x09, 0x33, 0x01, 0x1C, 0x96, 0x03, 0x00, 0x09,
+ 0x25, 0x01, 0x4E, 0x47, 0x96, 0x02, 0x00, 0x08, 0x0A, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x13, 0x4E,
+ 0x96, 0x03, 0x00, 0x09, 0x33, 0x01, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x13, 0x4E, 0x47, 0x96, 0x07,
+ 0x00, 0x07, 0x02, 0x00, 0x00, 0x00, 0x08, 0x04, 0x1C, 0x96, 0x03, 0x00, 0x09, 0x22, 0x01, 0x4E,
+ 0x96, 0x03, 0x00, 0x09, 0x23, 0x01, 0x53, 0x3E, 0x4F, 0x96, 0x02, 0x00, 0x08, 0x04, 0x1C, 0x96,
+ 0x03, 0x00, 0x09, 0x22, 0x01, 0x4E, 0x96, 0x03, 0x00, 0x09, 0x23, 0x01, 0x4E, 0x96, 0x02, 0x00,
+ 0x08, 0x0D, 0x4E, 0x96, 0x03, 0x00, 0x09, 0x34, 0x01, 0x8E, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x33, 0x00, 0x96, 0x02, 0x00, 0x08, 0x0A, 0x1C, 0x96, 0x03, 0x00, 0x09, 0x25, 0x01,
0x4E, 0x96, 0x02, 0x00, 0x08, 0x0A, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x13, 0x4E, 0x96, 0x07, 0x00,
- 0x07, 0x02, 0x00, 0x00, 0x00, 0x08, 0x04, 0x1C, 0x96, 0x03, 0x00, 0x09, 0x20, 0x01, 0x4E, 0x96,
- 0x03, 0x00, 0x09, 0x21, 0x01, 0x53, 0x3E, 0x4F, 0x96, 0x02, 0x00, 0x08, 0x04, 0x1C, 0x96, 0x03,
- 0x00, 0x09, 0x20, 0x01, 0x4E, 0x96, 0x03, 0x00, 0x09, 0x21, 0x01, 0x4E, 0x96, 0x02, 0x00, 0x08,
- 0x0D, 0x4E, 0x96, 0x03, 0x00, 0x09, 0x33, 0x01, 0x8E, 0x0F, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x6F, 0x74, 0x68, 0x65, 0x72, 0x00, 0x68, 0x00, 0x96, 0x03, 0x00, 0x09, 0x31, 0x01,
- 0x1C, 0x96, 0x02, 0x00, 0x08, 0x04, 0x1C, 0x96, 0x03, 0x00, 0x09, 0x20, 0x01, 0x4E, 0x96, 0x03,
- 0x00, 0x09, 0x21, 0x01, 0x4E, 0x54, 0x12, 0x12, 0x9D, 0x02, 0x00, 0x06, 0x00, 0x96, 0x02, 0x00,
- 0x05, 0x00, 0x3E, 0x96, 0x03, 0x00, 0x09, 0x31, 0x01, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x13, 0x4E,
+ 0x07, 0x02, 0x00, 0x00, 0x00, 0x08, 0x04, 0x1C, 0x96, 0x03, 0x00, 0x09, 0x22, 0x01, 0x4E, 0x96,
+ 0x03, 0x00, 0x09, 0x23, 0x01, 0x53, 0x3E, 0x4F, 0x96, 0x02, 0x00, 0x08, 0x04, 0x1C, 0x96, 0x03,
+ 0x00, 0x09, 0x22, 0x01, 0x4E, 0x96, 0x03, 0x00, 0x09, 0x23, 0x01, 0x4E, 0x96, 0x02, 0x00, 0x08,
+ 0x0D, 0x4E, 0x96, 0x03, 0x00, 0x09, 0x35, 0x01, 0x8E, 0x0F, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x6F, 0x74, 0x68, 0x65, 0x72, 0x00, 0x68, 0x00, 0x96, 0x03, 0x00, 0x09, 0x33, 0x01,
+ 0x1C, 0x96, 0x02, 0x00, 0x08, 0x04, 0x1C, 0x96, 0x03, 0x00, 0x09, 0x22, 0x01, 0x4E, 0x96, 0x03,
+ 0x00, 0x09, 0x23, 0x01, 0x4E, 0x54, 0x12, 0x12, 0x9D, 0x02, 0x00, 0x06, 0x00, 0x96, 0x02, 0x00,
+ 0x05, 0x00, 0x3E, 0x96, 0x03, 0x00, 0x09, 0x33, 0x01, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x13, 0x4E,
0x96, 0x02, 0x00, 0x08, 0x0A, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x13, 0x4E, 0x49, 0x4C, 0x12, 0x9D,
- 0x02, 0x00, 0x1D, 0x00, 0x17, 0x96, 0x03, 0x00, 0x09, 0x31, 0x01, 0x1C, 0x96, 0x03, 0x00, 0x09,
- 0x23, 0x01, 0x4E, 0x96, 0x02, 0x00, 0x08, 0x0A, 0x1C, 0x96, 0x03, 0x00, 0x09, 0x23, 0x01, 0x4E,
- 0x49, 0x3E, 0x4F, 0x96, 0x02, 0x00, 0x08, 0x04, 0x1C, 0x96, 0x03, 0x00, 0x09, 0x20, 0x01, 0x4E,
- 0x96, 0x03, 0x00, 0x09, 0x21, 0x01, 0x4E, 0x96, 0x02, 0x00, 0x08, 0x0D, 0x4E, 0x96, 0x03, 0x00,
- 0x09, 0x34, 0x01, 0x8E, 0x10, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6C, 0x65, 0x6E,
+ 0x02, 0x00, 0x1D, 0x00, 0x17, 0x96, 0x03, 0x00, 0x09, 0x33, 0x01, 0x1C, 0x96, 0x03, 0x00, 0x09,
+ 0x25, 0x01, 0x4E, 0x96, 0x02, 0x00, 0x08, 0x0A, 0x1C, 0x96, 0x03, 0x00, 0x09, 0x25, 0x01, 0x4E,
+ 0x49, 0x3E, 0x4F, 0x96, 0x02, 0x00, 0x08, 0x04, 0x1C, 0x96, 0x03, 0x00, 0x09, 0x22, 0x01, 0x4E,
+ 0x96, 0x03, 0x00, 0x09, 0x23, 0x01, 0x4E, 0x96, 0x02, 0x00, 0x08, 0x0D, 0x4E, 0x96, 0x03, 0x00,
+ 0x09, 0x36, 0x01, 0x8E, 0x10, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6C, 0x65, 0x6E,
0x67, 0x74, 0x68, 0x00, 0x71, 0x00, 0x96, 0x07, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 0x08, 0x0A,
0x1C, 0x96, 0x02, 0x00, 0x08, 0x19, 0x4E, 0x48, 0x12, 0x12, 0x9D, 0x02, 0x00, 0x05, 0x00, 0x96,
- 0x01, 0x00, 0x03, 0x3E, 0x96, 0x05, 0x00, 0x09, 0x35, 0x01, 0x08, 0x19, 0x1C, 0x96, 0x02, 0x00,
+ 0x01, 0x00, 0x03, 0x3E, 0x96, 0x05, 0x00, 0x09, 0x37, 0x01, 0x08, 0x19, 0x1C, 0x96, 0x02, 0x00,
0x08, 0x0A, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x19, 0x4E, 0x0D, 0x3C, 0x96, 0x02, 0x00, 0x08, 0x0A,
0x1C, 0x96, 0x04, 0x00, 0x08, 0x13, 0x08, 0x0A, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x13, 0x4E, 0x96,
- 0x03, 0x00, 0x09, 0x35, 0x01, 0x1C, 0x0C, 0x4F, 0x96, 0x02, 0x00, 0x08, 0x0A, 0x1C, 0x96, 0x05,
- 0x00, 0x09, 0x23, 0x01, 0x08, 0x0A, 0x1C, 0x96, 0x03, 0x00, 0x09, 0x23, 0x01, 0x4E, 0x96, 0x03,
- 0x00, 0x09, 0x35, 0x01, 0x1C, 0x0C, 0x4F, 0x4F, 0x96, 0x02, 0x00, 0x08, 0x04, 0x1C, 0x96, 0x03,
- 0x00, 0x09, 0x20, 0x01, 0x4E, 0x96, 0x03, 0x00, 0x09, 0x21, 0x01, 0x4E, 0x96, 0x02, 0x00, 0x08,
- 0x0D, 0x4E, 0x96, 0x03, 0x00, 0x09, 0x27, 0x01, 0x8E, 0x0F, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
+ 0x03, 0x00, 0x09, 0x37, 0x01, 0x1C, 0x0C, 0x4F, 0x96, 0x02, 0x00, 0x08, 0x0A, 0x1C, 0x96, 0x05,
+ 0x00, 0x09, 0x25, 0x01, 0x08, 0x0A, 0x1C, 0x96, 0x03, 0x00, 0x09, 0x25, 0x01, 0x4E, 0x96, 0x03,
+ 0x00, 0x09, 0x37, 0x01, 0x1C, 0x0C, 0x4F, 0x4F, 0x96, 0x02, 0x00, 0x08, 0x04, 0x1C, 0x96, 0x03,
+ 0x00, 0x09, 0x22, 0x01, 0x4E, 0x96, 0x03, 0x00, 0x09, 0x23, 0x01, 0x4E, 0x96, 0x02, 0x00, 0x08,
+ 0x0D, 0x4E, 0x96, 0x03, 0x00, 0x09, 0x29, 0x01, 0x8E, 0x0F, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
0x00, 0x00, 0x6F, 0x74, 0x68, 0x65, 0x72, 0x00, 0x50, 0x00, 0x96, 0x02, 0x00, 0x08, 0x0A, 0x1C,
- 0x96, 0x03, 0x00, 0x09, 0x23, 0x01, 0x4E, 0x96, 0x03, 0x00, 0x09, 0x31, 0x01, 0x1C, 0x96, 0x03,
- 0x00, 0x09, 0x23, 0x01, 0x4E, 0x0B, 0x96, 0x02, 0x00, 0x08, 0x0A, 0x1C, 0x96, 0x02, 0x00, 0x08,
- 0x13, 0x4E, 0x96, 0x03, 0x00, 0x09, 0x31, 0x01, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x13, 0x4E, 0x0B,
- 0x96, 0x07, 0x00, 0x07, 0x02, 0x00, 0x00, 0x00, 0x08, 0x04, 0x1C, 0x96, 0x03, 0x00, 0x09, 0x20,
- 0x01, 0x4E, 0x96, 0x03, 0x00, 0x09, 0x21, 0x01, 0x53, 0x3E, 0x4F, 0x96, 0x02, 0x00, 0x08, 0x04,
- 0x1C, 0x96, 0x03, 0x00, 0x09, 0x20, 0x01, 0x4E, 0x96, 0x03, 0x00, 0x09, 0x21, 0x01, 0x4E, 0x96,
- 0x02, 0x00, 0x08, 0x0D, 0x4E, 0x96, 0x03, 0x00, 0x09, 0x36, 0x01, 0x8E, 0x0E, 0x00, 0x00, 0x02,
+ 0x96, 0x03, 0x00, 0x09, 0x25, 0x01, 0x4E, 0x96, 0x03, 0x00, 0x09, 0x33, 0x01, 0x1C, 0x96, 0x03,
+ 0x00, 0x09, 0x25, 0x01, 0x4E, 0x0B, 0x96, 0x02, 0x00, 0x08, 0x0A, 0x1C, 0x96, 0x02, 0x00, 0x08,
+ 0x13, 0x4E, 0x96, 0x03, 0x00, 0x09, 0x33, 0x01, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x13, 0x4E, 0x0B,
+ 0x96, 0x07, 0x00, 0x07, 0x02, 0x00, 0x00, 0x00, 0x08, 0x04, 0x1C, 0x96, 0x03, 0x00, 0x09, 0x22,
+ 0x01, 0x4E, 0x96, 0x03, 0x00, 0x09, 0x23, 0x01, 0x53, 0x3E, 0x4F, 0x96, 0x02, 0x00, 0x08, 0x04,
+ 0x1C, 0x96, 0x03, 0x00, 0x09, 0x22, 0x01, 0x4E, 0x96, 0x03, 0x00, 0x09, 0x23, 0x01, 0x4E, 0x96,
+ 0x02, 0x00, 0x08, 0x0D, 0x4E, 0x96, 0x03, 0x00, 0x09, 0x38, 0x01, 0x8E, 0x0E, 0x00, 0x00, 0x02,
0x00, 0x00, 0x00, 0x00, 0x00, 0x78, 0x00, 0x00, 0x79, 0x00, 0x39, 0x00, 0x96, 0x02, 0x00, 0x08,
0x0A, 0x1C, 0x4C, 0x96, 0x02, 0x00, 0x08, 0x13, 0x4E, 0x96, 0x02, 0x00, 0x08, 0x13, 0x1C, 0x47,
0x96, 0x02, 0x00, 0x08, 0x13, 0x4D, 0x4F, 0x96, 0x02, 0x00, 0x08, 0x0A, 0x1C, 0x4C, 0x96, 0x03,
- 0x00, 0x09, 0x23, 0x01, 0x4E, 0x96, 0x03, 0x00, 0x09, 0x23, 0x01, 0x1C, 0x47, 0x96, 0x03, 0x00,
- 0x09, 0x23, 0x01, 0x4D, 0x4F, 0x4F, 0x96, 0x02, 0x00, 0x08, 0x04, 0x1C, 0x96, 0x03, 0x00, 0x09,
- 0x20, 0x01, 0x4E, 0x96, 0x03, 0x00, 0x09, 0x21, 0x01, 0x4E, 0x96, 0x02, 0x00, 0x08, 0x0D, 0x4E,
+ 0x00, 0x09, 0x25, 0x01, 0x4E, 0x96, 0x03, 0x00, 0x09, 0x25, 0x01, 0x1C, 0x47, 0x96, 0x03, 0x00,
+ 0x09, 0x25, 0x01, 0x4D, 0x4F, 0x4F, 0x96, 0x02, 0x00, 0x08, 0x04, 0x1C, 0x96, 0x03, 0x00, 0x09,
+ 0x22, 0x01, 0x4E, 0x96, 0x03, 0x00, 0x09, 0x23, 0x01, 0x4E, 0x96, 0x02, 0x00, 0x08, 0x0D, 0x4E,
0x96, 0x02, 0x00, 0x08, 0x0F, 0x8E, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2D, 0x00,
- 0x96, 0x05, 0x00, 0x09, 0x37, 0x01, 0x08, 0x0A, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x13, 0x4E, 0x47,
- 0x96, 0x03, 0x00, 0x09, 0x38, 0x01, 0x47, 0x96, 0x02, 0x00, 0x08, 0x0A, 0x1C, 0x96, 0x03, 0x00,
- 0x09, 0x23, 0x01, 0x4E, 0x47, 0x96, 0x03, 0x00, 0x09, 0x39, 0x01, 0x47, 0x3E, 0x4F, 0x96, 0x02,
- 0x00, 0x08, 0x04, 0x1C, 0x96, 0x03, 0x00, 0x09, 0x20, 0x01, 0x4E, 0x96, 0x03, 0x00, 0x09, 0x3A,
+ 0x96, 0x05, 0x00, 0x09, 0x39, 0x01, 0x08, 0x0A, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x13, 0x4E, 0x47,
+ 0x96, 0x03, 0x00, 0x09, 0x3A, 0x01, 0x47, 0x96, 0x02, 0x00, 0x08, 0x0A, 0x1C, 0x96, 0x03, 0x00,
+ 0x09, 0x25, 0x01, 0x4E, 0x47, 0x96, 0x03, 0x00, 0x09, 0x3B, 0x01, 0x47, 0x3E, 0x4F, 0x96, 0x02,
+ 0x00, 0x08, 0x04, 0x1C, 0x96, 0x03, 0x00, 0x09, 0x22, 0x01, 0x4E, 0x96, 0x03, 0x00, 0x09, 0x3C,
0x01, 0x8E, 0x1D, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x78, 0x00, 0x00, 0x79, 0x00,
0x00, 0x77, 0x69, 0x64, 0x74, 0x68, 0x00, 0x00, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x00, 0x75,
- 0x00, 0x96, 0x03, 0x00, 0x09, 0x22, 0x01, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x19, 0x4E, 0x96, 0x05,
+ 0x00, 0x96, 0x03, 0x00, 0x09, 0x24, 0x01, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x19, 0x4E, 0x96, 0x05,
0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 0x49, 0x9D, 0x02, 0x00, 0x47, 0x00, 0x96, 0x02, 0x00, 0x08,
0x0A, 0x1C, 0x96, 0x04, 0x00, 0x08, 0x13, 0x08, 0x13, 0x1C, 0x4F, 0x96, 0x02, 0x00, 0x08, 0x0A,
- 0x1C, 0x96, 0x06, 0x00, 0x09, 0x23, 0x01, 0x09, 0x23, 0x01, 0x1C, 0x4F, 0x96, 0x02, 0x00, 0x08,
- 0x0A, 0x1C, 0x96, 0x06, 0x00, 0x09, 0x3C, 0x01, 0x09, 0x3C, 0x01, 0x1C, 0x4F, 0x96, 0x02, 0x00,
- 0x08, 0x0A, 0x1C, 0x96, 0x06, 0x00, 0x09, 0x3D, 0x01, 0x09, 0x3D, 0x01, 0x1C, 0x4F, 0x99, 0x02,
+ 0x1C, 0x96, 0x06, 0x00, 0x09, 0x25, 0x01, 0x09, 0x25, 0x01, 0x1C, 0x4F, 0x96, 0x02, 0x00, 0x08,
+ 0x0A, 0x1C, 0x96, 0x06, 0x00, 0x09, 0x3E, 0x01, 0x09, 0x3E, 0x01, 0x1C, 0x4F, 0x96, 0x02, 0x00,
+ 0x08, 0x0A, 0x1C, 0x96, 0x06, 0x00, 0x09, 0x3F, 0x01, 0x09, 0x3F, 0x01, 0x1C, 0x4F, 0x99, 0x02,
0x00, 0x13, 0x00, 0x96, 0x07, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 0x08, 0x0A, 0x1C, 0x96, 0x03,
- 0x00, 0x09, 0x3B, 0x01, 0x52, 0x17, 0x4F, 0x96, 0x02, 0x00, 0x08, 0x04, 0x1C, 0x96, 0x03, 0x00,
- 0x09, 0x20, 0x01, 0x4E, 0x96, 0x03, 0x00, 0x09, 0x3A, 0x01, 0x4E, 0x96, 0x02, 0x00, 0x08, 0x0D,
- 0x4E, 0x96, 0x03, 0x00, 0x09, 0x32, 0x01, 0x8E, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x4D, 0x00, 0x96, 0x02, 0x00, 0x08, 0x0A, 0x1C, 0x96, 0x03, 0x00, 0x09, 0x3D, 0x01, 0x4E, 0x96,
- 0x02, 0x00, 0x08, 0x0A, 0x1C, 0x96, 0x03, 0x00, 0x09, 0x3C, 0x01, 0x4E, 0x96, 0x02, 0x00, 0x08,
- 0x0A, 0x1C, 0x96, 0x03, 0x00, 0x09, 0x23, 0x01, 0x4E, 0x96, 0x02, 0x00, 0x08, 0x0A, 0x1C, 0x96,
+ 0x00, 0x09, 0x3D, 0x01, 0x52, 0x17, 0x4F, 0x96, 0x02, 0x00, 0x08, 0x04, 0x1C, 0x96, 0x03, 0x00,
+ 0x09, 0x22, 0x01, 0x4E, 0x96, 0x03, 0x00, 0x09, 0x3C, 0x01, 0x4E, 0x96, 0x02, 0x00, 0x08, 0x0D,
+ 0x4E, 0x96, 0x03, 0x00, 0x09, 0x34, 0x01, 0x8E, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x4D, 0x00, 0x96, 0x02, 0x00, 0x08, 0x0A, 0x1C, 0x96, 0x03, 0x00, 0x09, 0x3F, 0x01, 0x4E, 0x96,
+ 0x02, 0x00, 0x08, 0x0A, 0x1C, 0x96, 0x03, 0x00, 0x09, 0x3E, 0x01, 0x4E, 0x96, 0x02, 0x00, 0x08,
+ 0x0A, 0x1C, 0x96, 0x03, 0x00, 0x09, 0x25, 0x01, 0x4E, 0x96, 0x02, 0x00, 0x08, 0x0A, 0x1C, 0x96,
0x02, 0x00, 0x08, 0x13, 0x4E, 0x96, 0x07, 0x00, 0x07, 0x04, 0x00, 0x00, 0x00, 0x08, 0x04, 0x1C,
- 0x96, 0x03, 0x00, 0x09, 0x20, 0x01, 0x4E, 0x96, 0x03, 0x00, 0x09, 0x3A, 0x01, 0x53, 0x3E, 0x4F,
- 0x96, 0x02, 0x00, 0x08, 0x04, 0x1C, 0x96, 0x03, 0x00, 0x09, 0x20, 0x01, 0x4E, 0x96, 0x03, 0x00,
- 0x09, 0x3A, 0x01, 0x4E, 0x96, 0x02, 0x00, 0x08, 0x0D, 0x4E, 0x96, 0x02, 0x00, 0x08, 0x0F, 0x8E,
- 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x57, 0x00, 0x96, 0x05, 0x00, 0x09, 0x37, 0x01,
- 0x08, 0x0A, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x13, 0x4E, 0x47, 0x96, 0x03, 0x00, 0x09, 0x38, 0x01,
- 0x47, 0x96, 0x02, 0x00, 0x08, 0x0A, 0x1C, 0x96, 0x03, 0x00, 0x09, 0x23, 0x01, 0x4E, 0x47, 0x96,
- 0x03, 0x00, 0x09, 0x3E, 0x01, 0x47, 0x96, 0x02, 0x00, 0x08, 0x0A, 0x1C, 0x96, 0x03, 0x00, 0x09,
- 0x3C, 0x01, 0x4E, 0x47, 0x96, 0x03, 0x00, 0x09, 0x3F, 0x01, 0x47, 0x96, 0x02, 0x00, 0x08, 0x0A,
- 0x1C, 0x96, 0x03, 0x00, 0x09, 0x3D, 0x01, 0x4E, 0x47, 0x96, 0x03, 0x00, 0x09, 0x39, 0x01, 0x47,
- 0x3E, 0x4F, 0x96, 0x02, 0x00, 0x08, 0x04, 0x1C, 0x96, 0x03, 0x00, 0x09, 0x20, 0x01, 0x4E, 0x96,
- 0x03, 0x00, 0x09, 0x3A, 0x01, 0x4E, 0x96, 0x02, 0x00, 0x08, 0x0D, 0x4E, 0x96, 0x03, 0x00, 0x09,
- 0x33, 0x01, 0x8E, 0x0E, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x72, 0x65, 0x63, 0x74,
- 0x00, 0xAB, 0x00, 0x96, 0x03, 0x00, 0x09, 0x40, 0x01, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x04, 0x1C,
- 0x96, 0x03, 0x00, 0x09, 0x20, 0x01, 0x4E, 0x96, 0x03, 0x00, 0x09, 0x3A, 0x01, 0x4E, 0x54, 0x4C,
+ 0x96, 0x03, 0x00, 0x09, 0x22, 0x01, 0x4E, 0x96, 0x03, 0x00, 0x09, 0x3C, 0x01, 0x53, 0x3E, 0x4F,
+ 0x96, 0x02, 0x00, 0x08, 0x04, 0x1C, 0x96, 0x03, 0x00, 0x09, 0x22, 0x01, 0x4E, 0x96, 0x03, 0x00,
+ 0x09, 0x3C, 0x01, 0x4E, 0x96, 0x02, 0x00, 0x08, 0x0D, 0x4E, 0x96, 0x02, 0x00, 0x08, 0x0F, 0x8E,
+ 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x57, 0x00, 0x96, 0x05, 0x00, 0x09, 0x39, 0x01,
+ 0x08, 0x0A, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x13, 0x4E, 0x47, 0x96, 0x03, 0x00, 0x09, 0x3A, 0x01,
+ 0x47, 0x96, 0x02, 0x00, 0x08, 0x0A, 0x1C, 0x96, 0x03, 0x00, 0x09, 0x25, 0x01, 0x4E, 0x47, 0x96,
+ 0x03, 0x00, 0x09, 0x40, 0x01, 0x47, 0x96, 0x02, 0x00, 0x08, 0x0A, 0x1C, 0x96, 0x03, 0x00, 0x09,
+ 0x3E, 0x01, 0x4E, 0x47, 0x96, 0x03, 0x00, 0x09, 0x41, 0x01, 0x47, 0x96, 0x02, 0x00, 0x08, 0x0A,
+ 0x1C, 0x96, 0x03, 0x00, 0x09, 0x3F, 0x01, 0x4E, 0x47, 0x96, 0x03, 0x00, 0x09, 0x3B, 0x01, 0x47,
+ 0x3E, 0x4F, 0x96, 0x02, 0x00, 0x08, 0x04, 0x1C, 0x96, 0x03, 0x00, 0x09, 0x22, 0x01, 0x4E, 0x96,
+ 0x03, 0x00, 0x09, 0x3C, 0x01, 0x4E, 0x96, 0x02, 0x00, 0x08, 0x0D, 0x4E, 0x96, 0x03, 0x00, 0x09,
+ 0x35, 0x01, 0x8E, 0x0E, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x72, 0x65, 0x63, 0x74,
+ 0x00, 0xAB, 0x00, 0x96, 0x03, 0x00, 0x09, 0x42, 0x01, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x04, 0x1C,
+ 0x96, 0x03, 0x00, 0x09, 0x22, 0x01, 0x4E, 0x96, 0x03, 0x00, 0x09, 0x3C, 0x01, 0x4E, 0x54, 0x4C,
0x12, 0x9D, 0x02, 0x00, 0x1B, 0x00, 0x17, 0x96, 0x02, 0x00, 0x08, 0x0A, 0x1C, 0x96, 0x02, 0x00,
- 0x08, 0x13, 0x4E, 0x96, 0x03, 0x00, 0x09, 0x40, 0x01, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x13, 0x4E,
+ 0x08, 0x13, 0x4E, 0x96, 0x03, 0x00, 0x09, 0x42, 0x01, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x13, 0x4E,
0x49, 0x4C, 0x12, 0x9D, 0x02, 0x00, 0x1D, 0x00, 0x17, 0x96, 0x02, 0x00, 0x08, 0x0A, 0x1C, 0x96,
- 0x03, 0x00, 0x09, 0x23, 0x01, 0x4E, 0x96, 0x03, 0x00, 0x09, 0x40, 0x01, 0x1C, 0x96, 0x03, 0x00,
- 0x09, 0x23, 0x01, 0x4E, 0x49, 0x4C, 0x12, 0x9D, 0x02, 0x00, 0x1D, 0x00, 0x17, 0x96, 0x02, 0x00,
- 0x08, 0x0A, 0x1C, 0x96, 0x03, 0x00, 0x09, 0x3C, 0x01, 0x4E, 0x96, 0x03, 0x00, 0x09, 0x40, 0x01,
- 0x1C, 0x96, 0x03, 0x00, 0x09, 0x3C, 0x01, 0x4E, 0x49, 0x4C, 0x12, 0x9D, 0x02, 0x00, 0x1D, 0x00,
- 0x17, 0x96, 0x02, 0x00, 0x08, 0x0A, 0x1C, 0x96, 0x03, 0x00, 0x09, 0x3D, 0x01, 0x4E, 0x96, 0x03,
- 0x00, 0x09, 0x40, 0x01, 0x1C, 0x96, 0x03, 0x00, 0x09, 0x3D, 0x01, 0x4E, 0x49, 0x3E, 0x4F, 0x96,
- 0x02, 0x00, 0x08, 0x04, 0x1C, 0x96, 0x03, 0x00, 0x09, 0x20, 0x01, 0x4E, 0x96, 0x03, 0x00, 0x09,
- 0x3A, 0x01, 0x4E, 0x96, 0x02, 0x00, 0x08, 0x0D, 0x4E, 0x96, 0x03, 0x00, 0x09, 0x41, 0x01, 0x8E,
+ 0x03, 0x00, 0x09, 0x25, 0x01, 0x4E, 0x96, 0x03, 0x00, 0x09, 0x42, 0x01, 0x1C, 0x96, 0x03, 0x00,
+ 0x09, 0x25, 0x01, 0x4E, 0x49, 0x4C, 0x12, 0x9D, 0x02, 0x00, 0x1D, 0x00, 0x17, 0x96, 0x02, 0x00,
+ 0x08, 0x0A, 0x1C, 0x96, 0x03, 0x00, 0x09, 0x3E, 0x01, 0x4E, 0x96, 0x03, 0x00, 0x09, 0x42, 0x01,
+ 0x1C, 0x96, 0x03, 0x00, 0x09, 0x3E, 0x01, 0x4E, 0x49, 0x4C, 0x12, 0x9D, 0x02, 0x00, 0x1D, 0x00,
+ 0x17, 0x96, 0x02, 0x00, 0x08, 0x0A, 0x1C, 0x96, 0x03, 0x00, 0x09, 0x3F, 0x01, 0x4E, 0x96, 0x03,
+ 0x00, 0x09, 0x42, 0x01, 0x1C, 0x96, 0x03, 0x00, 0x09, 0x3F, 0x01, 0x4E, 0x49, 0x3E, 0x4F, 0x96,
+ 0x02, 0x00, 0x08, 0x04, 0x1C, 0x96, 0x03, 0x00, 0x09, 0x22, 0x01, 0x4E, 0x96, 0x03, 0x00, 0x09,
+ 0x3C, 0x01, 0x4E, 0x96, 0x02, 0x00, 0x08, 0x0D, 0x4E, 0x96, 0x03, 0x00, 0x09, 0x43, 0x01, 0x8E,
0x0E, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x78, 0x00, 0x00, 0x79, 0x00, 0x87, 0x00,
0x96, 0x02, 0x00, 0x08, 0x13, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x0A, 0x1C, 0x96, 0x02, 0x00, 0x08,
0x13, 0x4E, 0x48, 0x12, 0x4C, 0x12, 0x9D, 0x02, 0x00, 0x17, 0x00, 0x17, 0x96, 0x03, 0x00, 0x09,
- 0x23, 0x01, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x0A, 0x1C, 0x96, 0x03, 0x00, 0x09, 0x23, 0x01, 0x4E,
+ 0x25, 0x01, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x0A, 0x1C, 0x96, 0x03, 0x00, 0x09, 0x25, 0x01, 0x4E,
0x48, 0x12, 0x4C, 0x12, 0x9D, 0x02, 0x00, 0x22, 0x00, 0x17, 0x96, 0x02, 0x00, 0x08, 0x13, 0x1C,
0x96, 0x02, 0x00, 0x08, 0x0A, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x13, 0x4E, 0x96, 0x02, 0x00, 0x08,
- 0x0A, 0x1C, 0x96, 0x03, 0x00, 0x09, 0x3C, 0x01, 0x4E, 0x47, 0x48, 0x4C, 0x12, 0x9D, 0x02, 0x00,
- 0x24, 0x00, 0x17, 0x96, 0x03, 0x00, 0x09, 0x23, 0x01, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x0A, 0x1C,
- 0x96, 0x03, 0x00, 0x09, 0x23, 0x01, 0x4E, 0x96, 0x02, 0x00, 0x08, 0x0A, 0x1C, 0x96, 0x03, 0x00,
- 0x09, 0x3D, 0x01, 0x4E, 0x47, 0x48, 0x3E, 0x4F, 0x96, 0x02, 0x00, 0x08, 0x04, 0x1C, 0x96, 0x03,
- 0x00, 0x09, 0x20, 0x01, 0x4E, 0x96, 0x03, 0x00, 0x09, 0x3A, 0x01, 0x4E, 0x96, 0x02, 0x00, 0x08,
- 0x0D, 0x4E, 0x96, 0x03, 0x00, 0x09, 0x42, 0x01, 0x8E, 0x0F, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x70, 0x6F, 0x69, 0x6E, 0x74, 0x00, 0xA3, 0x00, 0x96, 0x03, 0x00, 0x09, 0x43, 0x01,
+ 0x0A, 0x1C, 0x96, 0x03, 0x00, 0x09, 0x3E, 0x01, 0x4E, 0x47, 0x48, 0x4C, 0x12, 0x9D, 0x02, 0x00,
+ 0x24, 0x00, 0x17, 0x96, 0x03, 0x00, 0x09, 0x25, 0x01, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x0A, 0x1C,
+ 0x96, 0x03, 0x00, 0x09, 0x25, 0x01, 0x4E, 0x96, 0x02, 0x00, 0x08, 0x0A, 0x1C, 0x96, 0x03, 0x00,
+ 0x09, 0x3F, 0x01, 0x4E, 0x47, 0x48, 0x3E, 0x4F, 0x96, 0x02, 0x00, 0x08, 0x04, 0x1C, 0x96, 0x03,
+ 0x00, 0x09, 0x22, 0x01, 0x4E, 0x96, 0x03, 0x00, 0x09, 0x3C, 0x01, 0x4E, 0x96, 0x02, 0x00, 0x08,
+ 0x0D, 0x4E, 0x96, 0x03, 0x00, 0x09, 0x44, 0x01, 0x8E, 0x0F, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x70, 0x6F, 0x69, 0x6E, 0x74, 0x00, 0xA3, 0x00, 0x96, 0x03, 0x00, 0x09, 0x45, 0x01,
0x1C, 0x96, 0x02, 0x00, 0x08, 0x13, 0x4E, 0x96, 0x02, 0x00, 0x08, 0x0A, 0x1C, 0x96, 0x02, 0x00,
0x08, 0x13, 0x4E, 0x48, 0x12, 0x4C, 0x12, 0x9D, 0x02, 0x00, 0x1E, 0x00, 0x17, 0x96, 0x03, 0x00,
- 0x09, 0x43, 0x01, 0x1C, 0x96, 0x03, 0x00, 0x09, 0x23, 0x01, 0x4E, 0x96, 0x02, 0x00, 0x08, 0x0A,
- 0x1C, 0x96, 0x03, 0x00, 0x09, 0x23, 0x01, 0x4E, 0x48, 0x12, 0x4C, 0x12, 0x9D, 0x02, 0x00, 0x29,
- 0x00, 0x17, 0x96, 0x03, 0x00, 0x09, 0x43, 0x01, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x13, 0x4E, 0x96,
+ 0x09, 0x45, 0x01, 0x1C, 0x96, 0x03, 0x00, 0x09, 0x25, 0x01, 0x4E, 0x96, 0x02, 0x00, 0x08, 0x0A,
+ 0x1C, 0x96, 0x03, 0x00, 0x09, 0x25, 0x01, 0x4E, 0x48, 0x12, 0x4C, 0x12, 0x9D, 0x02, 0x00, 0x29,
+ 0x00, 0x17, 0x96, 0x03, 0x00, 0x09, 0x45, 0x01, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x13, 0x4E, 0x96,
0x02, 0x00, 0x08, 0x0A, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x13, 0x4E, 0x96, 0x02, 0x00, 0x08, 0x0A,
- 0x1C, 0x96, 0x03, 0x00, 0x09, 0x3C, 0x01, 0x4E, 0x47, 0x48, 0x4C, 0x12, 0x9D, 0x02, 0x00, 0x2B,
- 0x00, 0x17, 0x96, 0x03, 0x00, 0x09, 0x43, 0x01, 0x1C, 0x96, 0x03, 0x00, 0x09, 0x23, 0x01, 0x4E,
- 0x96, 0x02, 0x00, 0x08, 0x0A, 0x1C, 0x96, 0x03, 0x00, 0x09, 0x23, 0x01, 0x4E, 0x96, 0x02, 0x00,
- 0x08, 0x0A, 0x1C, 0x96, 0x03, 0x00, 0x09, 0x3D, 0x01, 0x4E, 0x47, 0x48, 0x3E, 0x4F, 0x96, 0x02,
- 0x00, 0x08, 0x04, 0x1C, 0x96, 0x03, 0x00, 0x09, 0x20, 0x01, 0x4E, 0x96, 0x03, 0x00, 0x09, 0x3A,
- 0x01, 0x4E, 0x96, 0x02, 0x00, 0x08, 0x0D, 0x4E, 0x96, 0x03, 0x00, 0x09, 0x44, 0x01, 0x8E, 0x0E,
+ 0x1C, 0x96, 0x03, 0x00, 0x09, 0x3E, 0x01, 0x4E, 0x47, 0x48, 0x4C, 0x12, 0x9D, 0x02, 0x00, 0x2B,
+ 0x00, 0x17, 0x96, 0x03, 0x00, 0x09, 0x45, 0x01, 0x1C, 0x96, 0x03, 0x00, 0x09, 0x25, 0x01, 0x4E,
+ 0x96, 0x02, 0x00, 0x08, 0x0A, 0x1C, 0x96, 0x03, 0x00, 0x09, 0x25, 0x01, 0x4E, 0x96, 0x02, 0x00,
+ 0x08, 0x0A, 0x1C, 0x96, 0x03, 0x00, 0x09, 0x3F, 0x01, 0x4E, 0x47, 0x48, 0x3E, 0x4F, 0x96, 0x02,
+ 0x00, 0x08, 0x04, 0x1C, 0x96, 0x03, 0x00, 0x09, 0x22, 0x01, 0x4E, 0x96, 0x03, 0x00, 0x09, 0x3C,
+ 0x01, 0x4E, 0x96, 0x02, 0x00, 0x08, 0x0D, 0x4E, 0x96, 0x03, 0x00, 0x09, 0x46, 0x01, 0x8E, 0x0E,
0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x72, 0x65, 0x63, 0x74, 0x00, 0x63, 0x01, 0x96,
- 0x05, 0x00, 0x09, 0x45, 0x01, 0x08, 0x0A, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x13, 0x4E, 0x96, 0x02,
- 0x00, 0x08, 0x0A, 0x1C, 0x96, 0x03, 0x00, 0x09, 0x3C, 0x01, 0x4E, 0x47, 0x3C, 0x96, 0x05, 0x00,
- 0x09, 0x46, 0x01, 0x08, 0x0A, 0x1C, 0x96, 0x03, 0x00, 0x09, 0x23, 0x01, 0x4E, 0x96, 0x02, 0x00,
- 0x08, 0x0A, 0x1C, 0x96, 0x03, 0x00, 0x09, 0x3D, 0x01, 0x4E, 0x47, 0x3C, 0x96, 0x06, 0x00, 0x09,
- 0x47, 0x01, 0x09, 0x40, 0x01, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x13, 0x4E, 0x96, 0x03, 0x00, 0x09,
- 0x40, 0x01, 0x1C, 0x96, 0x03, 0x00, 0x09, 0x3C, 0x01, 0x4E, 0x47, 0x3C, 0x96, 0x06, 0x00, 0x09,
- 0x48, 0x01, 0x09, 0x40, 0x01, 0x1C, 0x96, 0x03, 0x00, 0x09, 0x23, 0x01, 0x4E, 0x96, 0x03, 0x00,
- 0x09, 0x40, 0x01, 0x1C, 0x96, 0x03, 0x00, 0x09, 0x3D, 0x01, 0x4E, 0x47, 0x3C, 0x96, 0x03, 0x00,
- 0x09, 0x40, 0x01, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x13, 0x4E, 0x96, 0x02, 0x00, 0x08, 0x0A, 0x1C,
+ 0x05, 0x00, 0x09, 0x47, 0x01, 0x08, 0x0A, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x13, 0x4E, 0x96, 0x02,
+ 0x00, 0x08, 0x0A, 0x1C, 0x96, 0x03, 0x00, 0x09, 0x3E, 0x01, 0x4E, 0x47, 0x3C, 0x96, 0x05, 0x00,
+ 0x09, 0x48, 0x01, 0x08, 0x0A, 0x1C, 0x96, 0x03, 0x00, 0x09, 0x25, 0x01, 0x4E, 0x96, 0x02, 0x00,
+ 0x08, 0x0A, 0x1C, 0x96, 0x03, 0x00, 0x09, 0x3F, 0x01, 0x4E, 0x47, 0x3C, 0x96, 0x06, 0x00, 0x09,
+ 0x49, 0x01, 0x09, 0x42, 0x01, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x13, 0x4E, 0x96, 0x03, 0x00, 0x09,
+ 0x42, 0x01, 0x1C, 0x96, 0x03, 0x00, 0x09, 0x3E, 0x01, 0x4E, 0x47, 0x3C, 0x96, 0x06, 0x00, 0x09,
+ 0x4A, 0x01, 0x09, 0x42, 0x01, 0x1C, 0x96, 0x03, 0x00, 0x09, 0x25, 0x01, 0x4E, 0x96, 0x03, 0x00,
+ 0x09, 0x42, 0x01, 0x1C, 0x96, 0x03, 0x00, 0x09, 0x3F, 0x01, 0x4E, 0x47, 0x3C, 0x96, 0x03, 0x00,
+ 0x09, 0x42, 0x01, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x13, 0x4E, 0x96, 0x02, 0x00, 0x08, 0x0A, 0x1C,
0x96, 0x02, 0x00, 0x08, 0x13, 0x4E, 0x48, 0x12, 0x4C, 0x12, 0x9D, 0x02, 0x00, 0x16, 0x00, 0x17,
- 0x96, 0x03, 0x00, 0x09, 0x40, 0x01, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x13, 0x4E, 0x96, 0x03, 0x00,
- 0x09, 0x45, 0x01, 0x1C, 0x48, 0x4C, 0x12, 0x9D, 0x02, 0x00, 0x1E, 0x00, 0x17, 0x96, 0x03, 0x00,
- 0x09, 0x40, 0x01, 0x1C, 0x96, 0x03, 0x00, 0x09, 0x23, 0x01, 0x4E, 0x96, 0x02, 0x00, 0x08, 0x0A,
- 0x1C, 0x96, 0x03, 0x00, 0x09, 0x23, 0x01, 0x4E, 0x48, 0x12, 0x4C, 0x12, 0x9D, 0x02, 0x00, 0x17,
- 0x00, 0x17, 0x96, 0x03, 0x00, 0x09, 0x40, 0x01, 0x1C, 0x96, 0x03, 0x00, 0x09, 0x23, 0x01, 0x4E,
- 0x96, 0x03, 0x00, 0x09, 0x46, 0x01, 0x1C, 0x48, 0x4C, 0x12, 0x9D, 0x02, 0x00, 0x15, 0x00, 0x17,
+ 0x96, 0x03, 0x00, 0x09, 0x42, 0x01, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x13, 0x4E, 0x96, 0x03, 0x00,
+ 0x09, 0x47, 0x01, 0x1C, 0x48, 0x4C, 0x12, 0x9D, 0x02, 0x00, 0x1E, 0x00, 0x17, 0x96, 0x03, 0x00,
+ 0x09, 0x42, 0x01, 0x1C, 0x96, 0x03, 0x00, 0x09, 0x25, 0x01, 0x4E, 0x96, 0x02, 0x00, 0x08, 0x0A,
+ 0x1C, 0x96, 0x03, 0x00, 0x09, 0x25, 0x01, 0x4E, 0x48, 0x12, 0x4C, 0x12, 0x9D, 0x02, 0x00, 0x17,
+ 0x00, 0x17, 0x96, 0x03, 0x00, 0x09, 0x42, 0x01, 0x1C, 0x96, 0x03, 0x00, 0x09, 0x25, 0x01, 0x4E,
+ 0x96, 0x03, 0x00, 0x09, 0x48, 0x01, 0x1C, 0x48, 0x4C, 0x12, 0x9D, 0x02, 0x00, 0x15, 0x00, 0x17,
0x96, 0x02, 0x00, 0x08, 0x0A, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x13, 0x4E, 0x96, 0x03, 0x00, 0x09,
- 0x47, 0x01, 0x1C, 0x48, 0x4C, 0x12, 0x9D, 0x02, 0x00, 0x11, 0x00, 0x17, 0x96, 0x03, 0x00, 0x09,
- 0x45, 0x01, 0x1C, 0x96, 0x03, 0x00, 0x09, 0x47, 0x01, 0x1C, 0x48, 0x12, 0x4C, 0x12, 0x9D, 0x02,
- 0x00, 0x16, 0x00, 0x17, 0x96, 0x02, 0x00, 0x08, 0x0A, 0x1C, 0x96, 0x03, 0x00, 0x09, 0x23, 0x01,
- 0x4E, 0x96, 0x03, 0x00, 0x09, 0x48, 0x01, 0x1C, 0x48, 0x4C, 0x12, 0x9D, 0x02, 0x00, 0x11, 0x00,
- 0x17, 0x96, 0x03, 0x00, 0x09, 0x46, 0x01, 0x1C, 0x96, 0x03, 0x00, 0x09, 0x48, 0x01, 0x1C, 0x48,
- 0x12, 0x3E, 0x4F, 0x96, 0x02, 0x00, 0x08, 0x04, 0x1C, 0x96, 0x03, 0x00, 0x09, 0x20, 0x01, 0x4E,
- 0x96, 0x03, 0x00, 0x09, 0x3A, 0x01, 0x4E, 0x96, 0x02, 0x00, 0x08, 0x0D, 0x4E, 0x96, 0x03, 0x00,
- 0x09, 0x49, 0x01, 0x8E, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x96, 0x07,
- 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 0x08, 0x0A, 0x1C, 0x96, 0x03, 0x00, 0x09, 0x3C, 0x01, 0x4E,
+ 0x49, 0x01, 0x1C, 0x48, 0x4C, 0x12, 0x9D, 0x02, 0x00, 0x11, 0x00, 0x17, 0x96, 0x03, 0x00, 0x09,
+ 0x47, 0x01, 0x1C, 0x96, 0x03, 0x00, 0x09, 0x49, 0x01, 0x1C, 0x48, 0x12, 0x4C, 0x12, 0x9D, 0x02,
+ 0x00, 0x16, 0x00, 0x17, 0x96, 0x02, 0x00, 0x08, 0x0A, 0x1C, 0x96, 0x03, 0x00, 0x09, 0x25, 0x01,
+ 0x4E, 0x96, 0x03, 0x00, 0x09, 0x4A, 0x01, 0x1C, 0x48, 0x4C, 0x12, 0x9D, 0x02, 0x00, 0x11, 0x00,
+ 0x17, 0x96, 0x03, 0x00, 0x09, 0x48, 0x01, 0x1C, 0x96, 0x03, 0x00, 0x09, 0x4A, 0x01, 0x1C, 0x48,
+ 0x12, 0x3E, 0x4F, 0x96, 0x02, 0x00, 0x08, 0x04, 0x1C, 0x96, 0x03, 0x00, 0x09, 0x22, 0x01, 0x4E,
+ 0x96, 0x03, 0x00, 0x09, 0x3C, 0x01, 0x4E, 0x96, 0x02, 0x00, 0x08, 0x0D, 0x4E, 0x96, 0x03, 0x00,
+ 0x09, 0x4B, 0x01, 0x8E, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x96, 0x07,
+ 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 0x08, 0x0A, 0x1C, 0x96, 0x03, 0x00, 0x09, 0x3E, 0x01, 0x4E,
0x48, 0x12, 0x4C, 0x9D, 0x02, 0x00, 0x15, 0x00, 0x17, 0x96, 0x07, 0x00, 0x07, 0x00, 0x00, 0x00,
- 0x00, 0x08, 0x0A, 0x1C, 0x96, 0x03, 0x00, 0x09, 0x3D, 0x01, 0x4E, 0x48, 0x12, 0x3E, 0x4F, 0x96,
- 0x02, 0x00, 0x08, 0x04, 0x1C, 0x96, 0x03, 0x00, 0x09, 0x20, 0x01, 0x4E, 0x96, 0x03, 0x00, 0x09,
- 0x3A, 0x01, 0x4E, 0x96, 0x02, 0x00, 0x08, 0x0D, 0x4E, 0x96, 0x03, 0x00, 0x09, 0x3B, 0x01, 0x8E,
+ 0x00, 0x08, 0x0A, 0x1C, 0x96, 0x03, 0x00, 0x09, 0x3F, 0x01, 0x4E, 0x48, 0x12, 0x3E, 0x4F, 0x96,
+ 0x02, 0x00, 0x08, 0x04, 0x1C, 0x96, 0x03, 0x00, 0x09, 0x22, 0x01, 0x4E, 0x96, 0x03, 0x00, 0x09,
+ 0x3C, 0x01, 0x4E, 0x96, 0x02, 0x00, 0x08, 0x0D, 0x4E, 0x96, 0x03, 0x00, 0x09, 0x3D, 0x01, 0x8E,
0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, 0x00, 0x96, 0x02, 0x00, 0x08, 0x0A, 0x1C,
0x96, 0x07, 0x00, 0x08, 0x13, 0x07, 0x00, 0x00, 0x00, 0x00, 0x4F, 0x96, 0x02, 0x00, 0x08, 0x0A,
- 0x1C, 0x96, 0x08, 0x00, 0x09, 0x23, 0x01, 0x07, 0x00, 0x00, 0x00, 0x00, 0x4F, 0x96, 0x02, 0x00,
- 0x08, 0x0A, 0x1C, 0x96, 0x08, 0x00, 0x09, 0x3C, 0x01, 0x07, 0x00, 0x00, 0x00, 0x00, 0x4F, 0x96,
- 0x02, 0x00, 0x08, 0x0A, 0x1C, 0x96, 0x08, 0x00, 0x09, 0x3D, 0x01, 0x07, 0x00, 0x00, 0x00, 0x00,
- 0x4F, 0x4F, 0x96, 0x02, 0x00, 0x08, 0x04, 0x1C, 0x96, 0x03, 0x00, 0x09, 0x20, 0x01, 0x4E, 0x96,
- 0x03, 0x00, 0x09, 0x3A, 0x01, 0x4E, 0x96, 0x02, 0x00, 0x08, 0x0D, 0x4E, 0x96, 0x03, 0x00, 0x09,
- 0x4A, 0x01, 0x8E, 0x0E, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x72, 0x65, 0x63, 0x74,
- 0x00, 0xF4, 0x01, 0x96, 0x0A, 0x00, 0x09, 0x4B, 0x01, 0x07, 0x00, 0x00, 0x00, 0x00, 0x08, 0x04,
- 0x1C, 0x96, 0x03, 0x00, 0x09, 0x20, 0x01, 0x4E, 0x96, 0x03, 0x00, 0x09, 0x3A, 0x01, 0x53, 0x3C,
- 0x96, 0x07, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 0x08, 0x0A, 0x1C, 0x96, 0x03, 0x00, 0x09, 0x49,
+ 0x1C, 0x96, 0x08, 0x00, 0x09, 0x25, 0x01, 0x07, 0x00, 0x00, 0x00, 0x00, 0x4F, 0x96, 0x02, 0x00,
+ 0x08, 0x0A, 0x1C, 0x96, 0x08, 0x00, 0x09, 0x3E, 0x01, 0x07, 0x00, 0x00, 0x00, 0x00, 0x4F, 0x96,
+ 0x02, 0x00, 0x08, 0x0A, 0x1C, 0x96, 0x08, 0x00, 0x09, 0x3F, 0x01, 0x07, 0x00, 0x00, 0x00, 0x00,
+ 0x4F, 0x4F, 0x96, 0x02, 0x00, 0x08, 0x04, 0x1C, 0x96, 0x03, 0x00, 0x09, 0x22, 0x01, 0x4E, 0x96,
+ 0x03, 0x00, 0x09, 0x3C, 0x01, 0x4E, 0x96, 0x02, 0x00, 0x08, 0x0D, 0x4E, 0x96, 0x03, 0x00, 0x09,
+ 0x4C, 0x01, 0x8E, 0x0E, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x72, 0x65, 0x63, 0x74,
+ 0x00, 0xF4, 0x01, 0x96, 0x0A, 0x00, 0x09, 0x4D, 0x01, 0x07, 0x00, 0x00, 0x00, 0x00, 0x08, 0x04,
+ 0x1C, 0x96, 0x03, 0x00, 0x09, 0x22, 0x01, 0x4E, 0x96, 0x03, 0x00, 0x09, 0x3C, 0x01, 0x53, 0x3C,
+ 0x96, 0x07, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 0x08, 0x0A, 0x1C, 0x96, 0x03, 0x00, 0x09, 0x4B,
0x01, 0x52, 0x4C, 0x9D, 0x02, 0x00, 0x14, 0x00, 0x17, 0x96, 0x08, 0x00, 0x07, 0x00, 0x00, 0x00,
- 0x00, 0x09, 0x40, 0x01, 0x1C, 0x96, 0x03, 0x00, 0x09, 0x49, 0x01, 0x52, 0x12, 0x9D, 0x02, 0x00,
- 0x1C, 0x00, 0x96, 0x08, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 0x09, 0x4B, 0x01, 0x1C, 0x96, 0x03,
- 0x00, 0x09, 0x3B, 0x01, 0x52, 0x17, 0x96, 0x03, 0x00, 0x09, 0x4B, 0x01, 0x1C, 0x3E, 0x96, 0x03,
- 0x00, 0x09, 0x4B, 0x01, 0x1C, 0x96, 0x05, 0x00, 0x08, 0x13, 0x09, 0x40, 0x01, 0x1C, 0x96, 0x02,
+ 0x00, 0x09, 0x42, 0x01, 0x1C, 0x96, 0x03, 0x00, 0x09, 0x4B, 0x01, 0x52, 0x12, 0x9D, 0x02, 0x00,
+ 0x1C, 0x00, 0x96, 0x08, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 0x09, 0x4D, 0x01, 0x1C, 0x96, 0x03,
+ 0x00, 0x09, 0x3D, 0x01, 0x52, 0x17, 0x96, 0x03, 0x00, 0x09, 0x4D, 0x01, 0x1C, 0x3E, 0x96, 0x03,
+ 0x00, 0x09, 0x4D, 0x01, 0x1C, 0x96, 0x05, 0x00, 0x08, 0x13, 0x09, 0x42, 0x01, 0x1C, 0x96, 0x02,
0x00, 0x08, 0x13, 0x4E, 0x96, 0x02, 0x00, 0x08, 0x0A, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x13, 0x4E,
- 0x96, 0x08, 0x00, 0x07, 0x02, 0x00, 0x00, 0x00, 0x09, 0x2B, 0x01, 0x1C, 0x96, 0x03, 0x00, 0x09,
- 0x4C, 0x01, 0x52, 0x4F, 0x96, 0x03, 0x00, 0x09, 0x4B, 0x01, 0x1C, 0x96, 0x06, 0x00, 0x09, 0x23,
- 0x01, 0x09, 0x40, 0x01, 0x1C, 0x96, 0x03, 0x00, 0x09, 0x23, 0x01, 0x4E, 0x96, 0x02, 0x00, 0x08,
- 0x0A, 0x1C, 0x96, 0x03, 0x00, 0x09, 0x23, 0x01, 0x4E, 0x96, 0x08, 0x00, 0x07, 0x02, 0x00, 0x00,
- 0x00, 0x09, 0x2B, 0x01, 0x1C, 0x96, 0x03, 0x00, 0x09, 0x4C, 0x01, 0x52, 0x4F, 0x96, 0x03, 0x00,
- 0x09, 0x4B, 0x01, 0x1C, 0x96, 0x06, 0x00, 0x09, 0x3C, 0x01, 0x09, 0x40, 0x01, 0x1C, 0x96, 0x02,
- 0x00, 0x08, 0x13, 0x4E, 0x96, 0x03, 0x00, 0x09, 0x40, 0x01, 0x1C, 0x96, 0x03, 0x00, 0x09, 0x3C,
+ 0x96, 0x08, 0x00, 0x07, 0x02, 0x00, 0x00, 0x00, 0x09, 0x2D, 0x01, 0x1C, 0x96, 0x03, 0x00, 0x09,
+ 0x4E, 0x01, 0x52, 0x4F, 0x96, 0x03, 0x00, 0x09, 0x4D, 0x01, 0x1C, 0x96, 0x06, 0x00, 0x09, 0x25,
+ 0x01, 0x09, 0x42, 0x01, 0x1C, 0x96, 0x03, 0x00, 0x09, 0x25, 0x01, 0x4E, 0x96, 0x02, 0x00, 0x08,
+ 0x0A, 0x1C, 0x96, 0x03, 0x00, 0x09, 0x25, 0x01, 0x4E, 0x96, 0x08, 0x00, 0x07, 0x02, 0x00, 0x00,
+ 0x00, 0x09, 0x2D, 0x01, 0x1C, 0x96, 0x03, 0x00, 0x09, 0x4E, 0x01, 0x52, 0x4F, 0x96, 0x03, 0x00,
+ 0x09, 0x4D, 0x01, 0x1C, 0x96, 0x06, 0x00, 0x09, 0x3E, 0x01, 0x09, 0x42, 0x01, 0x1C, 0x96, 0x02,
+ 0x00, 0x08, 0x13, 0x4E, 0x96, 0x03, 0x00, 0x09, 0x42, 0x01, 0x1C, 0x96, 0x03, 0x00, 0x09, 0x3E,
0x01, 0x4E, 0x47, 0x96, 0x02, 0x00, 0x08, 0x0A, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x13, 0x4E, 0x96,
- 0x02, 0x00, 0x08, 0x0A, 0x1C, 0x96, 0x03, 0x00, 0x09, 0x3C, 0x01, 0x4E, 0x47, 0x96, 0x08, 0x00,
- 0x07, 0x02, 0x00, 0x00, 0x00, 0x09, 0x2B, 0x01, 0x1C, 0x96, 0x03, 0x00, 0x09, 0x4D, 0x01, 0x52,
- 0x96, 0x03, 0x00, 0x09, 0x4B, 0x01, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x13, 0x4E, 0x0B, 0x4F, 0x96,
- 0x03, 0x00, 0x09, 0x4B, 0x01, 0x1C, 0x96, 0x06, 0x00, 0x09, 0x3D, 0x01, 0x09, 0x40, 0x01, 0x1C,
- 0x96, 0x03, 0x00, 0x09, 0x23, 0x01, 0x4E, 0x96, 0x03, 0x00, 0x09, 0x40, 0x01, 0x1C, 0x96, 0x03,
- 0x00, 0x09, 0x3D, 0x01, 0x4E, 0x47, 0x96, 0x02, 0x00, 0x08, 0x0A, 0x1C, 0x96, 0x03, 0x00, 0x09,
- 0x23, 0x01, 0x4E, 0x96, 0x02, 0x00, 0x08, 0x0A, 0x1C, 0x96, 0x03, 0x00, 0x09, 0x3D, 0x01, 0x4E,
- 0x47, 0x96, 0x08, 0x00, 0x07, 0x02, 0x00, 0x00, 0x00, 0x09, 0x2B, 0x01, 0x1C, 0x96, 0x03, 0x00,
- 0x09, 0x4D, 0x01, 0x52, 0x96, 0x03, 0x00, 0x09, 0x4B, 0x01, 0x1C, 0x96, 0x03, 0x00, 0x09, 0x23,
- 0x01, 0x4E, 0x0B, 0x4F, 0x96, 0x08, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 0x09, 0x4B, 0x01, 0x1C,
- 0x96, 0x03, 0x00, 0x09, 0x3C, 0x01, 0x4E, 0x48, 0x12, 0x4C, 0x9D, 0x02, 0x00, 0x16, 0x00, 0x17,
- 0x96, 0x08, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 0x09, 0x4B, 0x01, 0x1C, 0x96, 0x03, 0x00, 0x09,
- 0x3D, 0x01, 0x4E, 0x48, 0x12, 0x12, 0x9D, 0x02, 0x00, 0x14, 0x00, 0x96, 0x08, 0x00, 0x07, 0x00,
- 0x00, 0x00, 0x00, 0x09, 0x4B, 0x01, 0x1C, 0x96, 0x03, 0x00, 0x09, 0x3B, 0x01, 0x52, 0x17, 0x96,
- 0x03, 0x00, 0x09, 0x4B, 0x01, 0x1C, 0x3E, 0x4F, 0x96, 0x02, 0x00, 0x08, 0x04, 0x1C, 0x96, 0x03,
- 0x00, 0x09, 0x20, 0x01, 0x4E, 0x96, 0x03, 0x00, 0x09, 0x3A, 0x01, 0x4E, 0x96, 0x02, 0x00, 0x08,
- 0x0D, 0x4E, 0x96, 0x03, 0x00, 0x09, 0x4E, 0x01, 0x8E, 0x0E, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
+ 0x02, 0x00, 0x08, 0x0A, 0x1C, 0x96, 0x03, 0x00, 0x09, 0x3E, 0x01, 0x4E, 0x47, 0x96, 0x08, 0x00,
+ 0x07, 0x02, 0x00, 0x00, 0x00, 0x09, 0x2D, 0x01, 0x1C, 0x96, 0x03, 0x00, 0x09, 0x4F, 0x01, 0x52,
+ 0x96, 0x03, 0x00, 0x09, 0x4D, 0x01, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x13, 0x4E, 0x0B, 0x4F, 0x96,
+ 0x03, 0x00, 0x09, 0x4D, 0x01, 0x1C, 0x96, 0x06, 0x00, 0x09, 0x3F, 0x01, 0x09, 0x42, 0x01, 0x1C,
+ 0x96, 0x03, 0x00, 0x09, 0x25, 0x01, 0x4E, 0x96, 0x03, 0x00, 0x09, 0x42, 0x01, 0x1C, 0x96, 0x03,
+ 0x00, 0x09, 0x3F, 0x01, 0x4E, 0x47, 0x96, 0x02, 0x00, 0x08, 0x0A, 0x1C, 0x96, 0x03, 0x00, 0x09,
+ 0x25, 0x01, 0x4E, 0x96, 0x02, 0x00, 0x08, 0x0A, 0x1C, 0x96, 0x03, 0x00, 0x09, 0x3F, 0x01, 0x4E,
+ 0x47, 0x96, 0x08, 0x00, 0x07, 0x02, 0x00, 0x00, 0x00, 0x09, 0x2D, 0x01, 0x1C, 0x96, 0x03, 0x00,
+ 0x09, 0x4F, 0x01, 0x52, 0x96, 0x03, 0x00, 0x09, 0x4D, 0x01, 0x1C, 0x96, 0x03, 0x00, 0x09, 0x25,
+ 0x01, 0x4E, 0x0B, 0x4F, 0x96, 0x08, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 0x09, 0x4D, 0x01, 0x1C,
+ 0x96, 0x03, 0x00, 0x09, 0x3E, 0x01, 0x4E, 0x48, 0x12, 0x4C, 0x9D, 0x02, 0x00, 0x16, 0x00, 0x17,
+ 0x96, 0x08, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 0x09, 0x4D, 0x01, 0x1C, 0x96, 0x03, 0x00, 0x09,
+ 0x3F, 0x01, 0x4E, 0x48, 0x12, 0x12, 0x9D, 0x02, 0x00, 0x14, 0x00, 0x96, 0x08, 0x00, 0x07, 0x00,
+ 0x00, 0x00, 0x00, 0x09, 0x4D, 0x01, 0x1C, 0x96, 0x03, 0x00, 0x09, 0x3D, 0x01, 0x52, 0x17, 0x96,
+ 0x03, 0x00, 0x09, 0x4D, 0x01, 0x1C, 0x3E, 0x4F, 0x96, 0x02, 0x00, 0x08, 0x04, 0x1C, 0x96, 0x03,
+ 0x00, 0x09, 0x22, 0x01, 0x4E, 0x96, 0x03, 0x00, 0x09, 0x3C, 0x01, 0x4E, 0x96, 0x02, 0x00, 0x08,
+ 0x0D, 0x4E, 0x96, 0x03, 0x00, 0x09, 0x50, 0x01, 0x8E, 0x0E, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
0x00, 0x00, 0x72, 0x65, 0x63, 0x74, 0x00, 0x27, 0x00, 0x96, 0x08, 0x00, 0x07, 0x00, 0x00, 0x00,
- 0x00, 0x09, 0x40, 0x01, 0x1C, 0x96, 0x07, 0x00, 0x07, 0x01, 0x00, 0x00, 0x00, 0x08, 0x0A, 0x1C,
- 0x96, 0x03, 0x00, 0x09, 0x4A, 0x01, 0x52, 0x96, 0x03, 0x00, 0x09, 0x49, 0x01, 0x52, 0x12, 0x3E,
- 0x4F, 0x96, 0x02, 0x00, 0x08, 0x04, 0x1C, 0x96, 0x03, 0x00, 0x09, 0x20, 0x01, 0x4E, 0x96, 0x03,
- 0x00, 0x09, 0x3A, 0x01, 0x4E, 0x96, 0x02, 0x00, 0x08, 0x0D, 0x4E, 0x96, 0x03, 0x00, 0x09, 0x4F,
+ 0x00, 0x09, 0x42, 0x01, 0x1C, 0x96, 0x07, 0x00, 0x07, 0x01, 0x00, 0x00, 0x00, 0x08, 0x0A, 0x1C,
+ 0x96, 0x03, 0x00, 0x09, 0x4C, 0x01, 0x52, 0x96, 0x03, 0x00, 0x09, 0x4B, 0x01, 0x52, 0x12, 0x3E,
+ 0x4F, 0x96, 0x02, 0x00, 0x08, 0x04, 0x1C, 0x96, 0x03, 0x00, 0x09, 0x22, 0x01, 0x4E, 0x96, 0x03,
+ 0x00, 0x09, 0x3C, 0x01, 0x4E, 0x96, 0x02, 0x00, 0x08, 0x0D, 0x4E, 0x96, 0x03, 0x00, 0x09, 0x51,
0x01, 0x8E, 0x0E, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x72, 0x65, 0x63, 0x74, 0x00,
0xB3, 0x01, 0x96, 0x07, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 0x08, 0x0A, 0x1C, 0x96, 0x03, 0x00,
- 0x09, 0x49, 0x01, 0x52, 0x12, 0x9D, 0x02, 0x00, 0x14, 0x00, 0x96, 0x08, 0x00, 0x07, 0x00, 0x00,
- 0x00, 0x00, 0x09, 0x40, 0x01, 0x1C, 0x96, 0x03, 0x00, 0x09, 0x32, 0x01, 0x52, 0x3E, 0x96, 0x08,
- 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 0x09, 0x40, 0x01, 0x1C, 0x96, 0x03, 0x00, 0x09, 0x49, 0x01,
+ 0x09, 0x4B, 0x01, 0x52, 0x12, 0x9D, 0x02, 0x00, 0x14, 0x00, 0x96, 0x08, 0x00, 0x07, 0x00, 0x00,
+ 0x00, 0x00, 0x09, 0x42, 0x01, 0x1C, 0x96, 0x03, 0x00, 0x09, 0x34, 0x01, 0x52, 0x3E, 0x96, 0x08,
+ 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 0x09, 0x42, 0x01, 0x1C, 0x96, 0x03, 0x00, 0x09, 0x4B, 0x01,
0x52, 0x12, 0x9D, 0x02, 0x00, 0x13, 0x00, 0x96, 0x07, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 0x08,
- 0x0A, 0x1C, 0x96, 0x03, 0x00, 0x09, 0x32, 0x01, 0x52, 0x3E, 0x96, 0x0A, 0x00, 0x09, 0x4F, 0x01,
- 0x07, 0x00, 0x00, 0x00, 0x00, 0x08, 0x04, 0x1C, 0x96, 0x03, 0x00, 0x09, 0x20, 0x01, 0x4E, 0x96,
- 0x03, 0x00, 0x09, 0x3A, 0x01, 0x53, 0x3C, 0x96, 0x03, 0x00, 0x09, 0x4F, 0x01, 0x1C, 0x96, 0x05,
- 0x00, 0x08, 0x13, 0x09, 0x40, 0x01, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x13, 0x4E, 0x96, 0x02, 0x00,
+ 0x0A, 0x1C, 0x96, 0x03, 0x00, 0x09, 0x34, 0x01, 0x52, 0x3E, 0x96, 0x0A, 0x00, 0x09, 0x51, 0x01,
+ 0x07, 0x00, 0x00, 0x00, 0x00, 0x08, 0x04, 0x1C, 0x96, 0x03, 0x00, 0x09, 0x22, 0x01, 0x4E, 0x96,
+ 0x03, 0x00, 0x09, 0x3C, 0x01, 0x53, 0x3C, 0x96, 0x03, 0x00, 0x09, 0x51, 0x01, 0x1C, 0x96, 0x05,
+ 0x00, 0x08, 0x13, 0x09, 0x42, 0x01, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x13, 0x4E, 0x96, 0x02, 0x00,
0x08, 0x0A, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x13, 0x4E, 0x96, 0x08, 0x00, 0x07, 0x02, 0x00, 0x00,
- 0x00, 0x09, 0x2B, 0x01, 0x1C, 0x96, 0x03, 0x00, 0x09, 0x4D, 0x01, 0x52, 0x4F, 0x96, 0x03, 0x00,
- 0x09, 0x4F, 0x01, 0x1C, 0x96, 0x06, 0x00, 0x09, 0x23, 0x01, 0x09, 0x40, 0x01, 0x1C, 0x96, 0x03,
- 0x00, 0x09, 0x23, 0x01, 0x4E, 0x96, 0x02, 0x00, 0x08, 0x0A, 0x1C, 0x96, 0x03, 0x00, 0x09, 0x23,
- 0x01, 0x4E, 0x96, 0x08, 0x00, 0x07, 0x02, 0x00, 0x00, 0x00, 0x09, 0x2B, 0x01, 0x1C, 0x96, 0x03,
- 0x00, 0x09, 0x4D, 0x01, 0x52, 0x4F, 0x96, 0x03, 0x00, 0x09, 0x4F, 0x01, 0x1C, 0x96, 0x06, 0x00,
- 0x09, 0x3C, 0x01, 0x09, 0x40, 0x01, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x13, 0x4E, 0x96, 0x03, 0x00,
- 0x09, 0x40, 0x01, 0x1C, 0x96, 0x03, 0x00, 0x09, 0x3C, 0x01, 0x4E, 0x47, 0x96, 0x02, 0x00, 0x08,
+ 0x00, 0x09, 0x2D, 0x01, 0x1C, 0x96, 0x03, 0x00, 0x09, 0x4F, 0x01, 0x52, 0x4F, 0x96, 0x03, 0x00,
+ 0x09, 0x51, 0x01, 0x1C, 0x96, 0x06, 0x00, 0x09, 0x25, 0x01, 0x09, 0x42, 0x01, 0x1C, 0x96, 0x03,
+ 0x00, 0x09, 0x25, 0x01, 0x4E, 0x96, 0x02, 0x00, 0x08, 0x0A, 0x1C, 0x96, 0x03, 0x00, 0x09, 0x25,
+ 0x01, 0x4E, 0x96, 0x08, 0x00, 0x07, 0x02, 0x00, 0x00, 0x00, 0x09, 0x2D, 0x01, 0x1C, 0x96, 0x03,
+ 0x00, 0x09, 0x4F, 0x01, 0x52, 0x4F, 0x96, 0x03, 0x00, 0x09, 0x51, 0x01, 0x1C, 0x96, 0x06, 0x00,
+ 0x09, 0x3E, 0x01, 0x09, 0x42, 0x01, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x13, 0x4E, 0x96, 0x03, 0x00,
+ 0x09, 0x42, 0x01, 0x1C, 0x96, 0x03, 0x00, 0x09, 0x3E, 0x01, 0x4E, 0x47, 0x96, 0x02, 0x00, 0x08,
0x0A, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x13, 0x4E, 0x96, 0x02, 0x00, 0x08, 0x0A, 0x1C, 0x96, 0x03,
- 0x00, 0x09, 0x3C, 0x01, 0x4E, 0x47, 0x96, 0x08, 0x00, 0x07, 0x02, 0x00, 0x00, 0x00, 0x09, 0x2B,
- 0x01, 0x1C, 0x96, 0x03, 0x00, 0x09, 0x4C, 0x01, 0x52, 0x96, 0x03, 0x00, 0x09, 0x4F, 0x01, 0x1C,
- 0x96, 0x02, 0x00, 0x08, 0x13, 0x4E, 0x0B, 0x4F, 0x96, 0x03, 0x00, 0x09, 0x4F, 0x01, 0x1C, 0x96,
- 0x06, 0x00, 0x09, 0x3D, 0x01, 0x09, 0x40, 0x01, 0x1C, 0x96, 0x03, 0x00, 0x09, 0x23, 0x01, 0x4E,
- 0x96, 0x03, 0x00, 0x09, 0x40, 0x01, 0x1C, 0x96, 0x03, 0x00, 0x09, 0x3D, 0x01, 0x4E, 0x47, 0x96,
- 0x02, 0x00, 0x08, 0x0A, 0x1C, 0x96, 0x03, 0x00, 0x09, 0x23, 0x01, 0x4E, 0x96, 0x02, 0x00, 0x08,
- 0x0A, 0x1C, 0x96, 0x03, 0x00, 0x09, 0x3D, 0x01, 0x4E, 0x47, 0x96, 0x08, 0x00, 0x07, 0x02, 0x00,
- 0x00, 0x00, 0x09, 0x2B, 0x01, 0x1C, 0x96, 0x03, 0x00, 0x09, 0x4C, 0x01, 0x52, 0x96, 0x03, 0x00,
- 0x09, 0x4F, 0x01, 0x1C, 0x96, 0x03, 0x00, 0x09, 0x23, 0x01, 0x4E, 0x0B, 0x4F, 0x96, 0x03, 0x00,
- 0x09, 0x4F, 0x01, 0x1C, 0x3E, 0x4F, 0x96, 0x02, 0x00, 0x08, 0x04, 0x1C, 0x96, 0x03, 0x00, 0x09,
- 0x20, 0x01, 0x4E, 0x96, 0x03, 0x00, 0x09, 0x3A, 0x01, 0x4E, 0x96, 0x02, 0x00, 0x08, 0x0D, 0x4E,
- 0x96, 0x03, 0x00, 0x09, 0x36, 0x01, 0x8E, 0x10, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x09, 0x3E, 0x01, 0x4E, 0x47, 0x96, 0x08, 0x00, 0x07, 0x02, 0x00, 0x00, 0x00, 0x09, 0x2D,
+ 0x01, 0x1C, 0x96, 0x03, 0x00, 0x09, 0x4E, 0x01, 0x52, 0x96, 0x03, 0x00, 0x09, 0x51, 0x01, 0x1C,
+ 0x96, 0x02, 0x00, 0x08, 0x13, 0x4E, 0x0B, 0x4F, 0x96, 0x03, 0x00, 0x09, 0x51, 0x01, 0x1C, 0x96,
+ 0x06, 0x00, 0x09, 0x3F, 0x01, 0x09, 0x42, 0x01, 0x1C, 0x96, 0x03, 0x00, 0x09, 0x25, 0x01, 0x4E,
+ 0x96, 0x03, 0x00, 0x09, 0x42, 0x01, 0x1C, 0x96, 0x03, 0x00, 0x09, 0x3F, 0x01, 0x4E, 0x47, 0x96,
+ 0x02, 0x00, 0x08, 0x0A, 0x1C, 0x96, 0x03, 0x00, 0x09, 0x25, 0x01, 0x4E, 0x96, 0x02, 0x00, 0x08,
+ 0x0A, 0x1C, 0x96, 0x03, 0x00, 0x09, 0x3F, 0x01, 0x4E, 0x47, 0x96, 0x08, 0x00, 0x07, 0x02, 0x00,
+ 0x00, 0x00, 0x09, 0x2D, 0x01, 0x1C, 0x96, 0x03, 0x00, 0x09, 0x4E, 0x01, 0x52, 0x96, 0x03, 0x00,
+ 0x09, 0x51, 0x01, 0x1C, 0x96, 0x03, 0x00, 0x09, 0x25, 0x01, 0x4E, 0x0B, 0x4F, 0x96, 0x03, 0x00,
+ 0x09, 0x51, 0x01, 0x1C, 0x3E, 0x4F, 0x96, 0x02, 0x00, 0x08, 0x04, 0x1C, 0x96, 0x03, 0x00, 0x09,
+ 0x22, 0x01, 0x4E, 0x96, 0x03, 0x00, 0x09, 0x3C, 0x01, 0x4E, 0x96, 0x02, 0x00, 0x08, 0x0D, 0x4E,
+ 0x96, 0x03, 0x00, 0x09, 0x38, 0x01, 0x8E, 0x10, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00,
0x64, 0x78, 0x00, 0x00, 0x64, 0x79, 0x00, 0x3A, 0x00, 0x96, 0x02, 0x00, 0x08, 0x0A, 0x1C, 0x4C,
- 0x96, 0x02, 0x00, 0x08, 0x13, 0x4E, 0x96, 0x03, 0x00, 0x09, 0x50, 0x01, 0x1C, 0x47, 0x96, 0x02,
+ 0x96, 0x02, 0x00, 0x08, 0x13, 0x4E, 0x96, 0x03, 0x00, 0x09, 0x52, 0x01, 0x1C, 0x47, 0x96, 0x02,
0x00, 0x08, 0x13, 0x4D, 0x4F, 0x96, 0x02, 0x00, 0x08, 0x0A, 0x1C, 0x4C, 0x96, 0x03, 0x00, 0x09,
- 0x23, 0x01, 0x4E, 0x96, 0x03, 0x00, 0x09, 0x51, 0x01, 0x1C, 0x47, 0x96, 0x03, 0x00, 0x09, 0x23,
- 0x01, 0x4D, 0x4F, 0x4F, 0x96, 0x02, 0x00, 0x08, 0x04, 0x1C, 0x96, 0x03, 0x00, 0x09, 0x20, 0x01,
- 0x4E, 0x96, 0x03, 0x00, 0x09, 0x3A, 0x01, 0x4E, 0x96, 0x02, 0x00, 0x08, 0x0D, 0x4E, 0x96, 0x03,
- 0x00, 0x09, 0x52, 0x01, 0x8E, 0x0B, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x64, 0x00,
+ 0x25, 0x01, 0x4E, 0x96, 0x03, 0x00, 0x09, 0x53, 0x01, 0x1C, 0x47, 0x96, 0x03, 0x00, 0x09, 0x25,
+ 0x01, 0x4D, 0x4F, 0x4F, 0x96, 0x02, 0x00, 0x08, 0x04, 0x1C, 0x96, 0x03, 0x00, 0x09, 0x22, 0x01,
+ 0x4E, 0x96, 0x03, 0x00, 0x09, 0x3C, 0x01, 0x4E, 0x96, 0x02, 0x00, 0x08, 0x0D, 0x4E, 0x96, 0x03,
+ 0x00, 0x09, 0x54, 0x01, 0x8E, 0x0B, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x64, 0x00,
0x47, 0x00, 0x96, 0x02, 0x00, 0x08, 0x0A, 0x1C, 0x4C, 0x96, 0x02, 0x00, 0x08, 0x13, 0x4E, 0x96,
- 0x03, 0x00, 0x09, 0x53, 0x01, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x13, 0x4E, 0x47, 0x96, 0x02, 0x00,
- 0x08, 0x13, 0x4D, 0x4F, 0x96, 0x02, 0x00, 0x08, 0x0A, 0x1C, 0x4C, 0x96, 0x03, 0x00, 0x09, 0x23,
- 0x01, 0x4E, 0x96, 0x03, 0x00, 0x09, 0x53, 0x01, 0x1C, 0x96, 0x03, 0x00, 0x09, 0x23, 0x01, 0x4E,
- 0x47, 0x96, 0x03, 0x00, 0x09, 0x23, 0x01, 0x4D, 0x4F, 0x4F, 0x96, 0x02, 0x00, 0x08, 0x04, 0x1C,
- 0x96, 0x03, 0x00, 0x09, 0x20, 0x01, 0x4E, 0x96, 0x03, 0x00, 0x09, 0x3A, 0x01, 0x4E, 0x96, 0x02,
- 0x00, 0x08, 0x0D, 0x4E, 0x96, 0x03, 0x00, 0x09, 0x54, 0x01, 0x8E, 0x10, 0x00, 0x00, 0x02, 0x00,
+ 0x03, 0x00, 0x09, 0x55, 0x01, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x13, 0x4E, 0x47, 0x96, 0x02, 0x00,
+ 0x08, 0x13, 0x4D, 0x4F, 0x96, 0x02, 0x00, 0x08, 0x0A, 0x1C, 0x4C, 0x96, 0x03, 0x00, 0x09, 0x25,
+ 0x01, 0x4E, 0x96, 0x03, 0x00, 0x09, 0x55, 0x01, 0x1C, 0x96, 0x03, 0x00, 0x09, 0x25, 0x01, 0x4E,
+ 0x47, 0x96, 0x03, 0x00, 0x09, 0x25, 0x01, 0x4D, 0x4F, 0x4F, 0x96, 0x02, 0x00, 0x08, 0x04, 0x1C,
+ 0x96, 0x03, 0x00, 0x09, 0x22, 0x01, 0x4E, 0x96, 0x03, 0x00, 0x09, 0x3C, 0x01, 0x4E, 0x96, 0x02,
+ 0x00, 0x08, 0x0D, 0x4E, 0x96, 0x03, 0x00, 0x09, 0x56, 0x01, 0x8E, 0x10, 0x00, 0x00, 0x02, 0x00,
0x00, 0x00, 0x00, 0x00, 0x64, 0x78, 0x00, 0x00, 0x64, 0x79, 0x00, 0x82, 0x00, 0x96, 0x02, 0x00,
- 0x08, 0x0A, 0x1C, 0x4C, 0x96, 0x02, 0x00, 0x08, 0x13, 0x4E, 0x96, 0x03, 0x00, 0x09, 0x50, 0x01,
+ 0x08, 0x0A, 0x1C, 0x4C, 0x96, 0x02, 0x00, 0x08, 0x13, 0x4E, 0x96, 0x03, 0x00, 0x09, 0x52, 0x01,
0x1C, 0x0B, 0x96, 0x02, 0x00, 0x08, 0x13, 0x4D, 0x4F, 0x96, 0x02, 0x00, 0x08, 0x0A, 0x1C, 0x4C,
- 0x96, 0x03, 0x00, 0x09, 0x3C, 0x01, 0x4E, 0x96, 0x08, 0x00, 0x07, 0x02, 0x00, 0x00, 0x00, 0x09,
- 0x50, 0x01, 0x1C, 0x0C, 0x47, 0x96, 0x03, 0x00, 0x09, 0x3C, 0x01, 0x4D, 0x4F, 0x96, 0x02, 0x00,
- 0x08, 0x0A, 0x1C, 0x4C, 0x96, 0x03, 0x00, 0x09, 0x23, 0x01, 0x4E, 0x96, 0x03, 0x00, 0x09, 0x51,
- 0x01, 0x1C, 0x0B, 0x96, 0x03, 0x00, 0x09, 0x23, 0x01, 0x4D, 0x4F, 0x96, 0x02, 0x00, 0x08, 0x0A,
- 0x1C, 0x4C, 0x96, 0x03, 0x00, 0x09, 0x3D, 0x01, 0x4E, 0x96, 0x08, 0x00, 0x07, 0x02, 0x00, 0x00,
- 0x00, 0x09, 0x51, 0x01, 0x1C, 0x0C, 0x47, 0x96, 0x03, 0x00, 0x09, 0x3D, 0x01, 0x4D, 0x4F, 0x4F,
- 0x96, 0x02, 0x00, 0x08, 0x04, 0x1C, 0x96, 0x03, 0x00, 0x09, 0x20, 0x01, 0x4E, 0x96, 0x03, 0x00,
- 0x09, 0x3A, 0x01, 0x4E, 0x96, 0x02, 0x00, 0x08, 0x0D, 0x4E, 0x96, 0x03, 0x00, 0x09, 0x55, 0x01,
+ 0x96, 0x03, 0x00, 0x09, 0x3E, 0x01, 0x4E, 0x96, 0x08, 0x00, 0x07, 0x02, 0x00, 0x00, 0x00, 0x09,
+ 0x52, 0x01, 0x1C, 0x0C, 0x47, 0x96, 0x03, 0x00, 0x09, 0x3E, 0x01, 0x4D, 0x4F, 0x96, 0x02, 0x00,
+ 0x08, 0x0A, 0x1C, 0x4C, 0x96, 0x03, 0x00, 0x09, 0x25, 0x01, 0x4E, 0x96, 0x03, 0x00, 0x09, 0x53,
+ 0x01, 0x1C, 0x0B, 0x96, 0x03, 0x00, 0x09, 0x25, 0x01, 0x4D, 0x4F, 0x96, 0x02, 0x00, 0x08, 0x0A,
+ 0x1C, 0x4C, 0x96, 0x03, 0x00, 0x09, 0x3F, 0x01, 0x4E, 0x96, 0x08, 0x00, 0x07, 0x02, 0x00, 0x00,
+ 0x00, 0x09, 0x53, 0x01, 0x1C, 0x0C, 0x47, 0x96, 0x03, 0x00, 0x09, 0x3F, 0x01, 0x4D, 0x4F, 0x4F,
+ 0x96, 0x02, 0x00, 0x08, 0x04, 0x1C, 0x96, 0x03, 0x00, 0x09, 0x22, 0x01, 0x4E, 0x96, 0x03, 0x00,
+ 0x09, 0x3C, 0x01, 0x4E, 0x96, 0x02, 0x00, 0x08, 0x0D, 0x4E, 0x96, 0x03, 0x00, 0x09, 0x57, 0x01,
0x8E, 0x0B, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x64, 0x00, 0x9C, 0x00, 0x96, 0x02,
- 0x00, 0x08, 0x0A, 0x1C, 0x4C, 0x96, 0x02, 0x00, 0x08, 0x13, 0x4E, 0x96, 0x03, 0x00, 0x09, 0x53,
+ 0x00, 0x08, 0x0A, 0x1C, 0x4C, 0x96, 0x02, 0x00, 0x08, 0x13, 0x4E, 0x96, 0x03, 0x00, 0x09, 0x55,
0x01, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x13, 0x4E, 0x0B, 0x96, 0x02, 0x00, 0x08, 0x13, 0x4D, 0x4F,
- 0x96, 0x02, 0x00, 0x08, 0x0A, 0x1C, 0x4C, 0x96, 0x03, 0x00, 0x09, 0x3C, 0x01, 0x4E, 0x96, 0x08,
- 0x00, 0x07, 0x02, 0x00, 0x00, 0x00, 0x09, 0x53, 0x01, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x13, 0x4E,
- 0x0C, 0x47, 0x96, 0x03, 0x00, 0x09, 0x3C, 0x01, 0x4D, 0x4F, 0x96, 0x02, 0x00, 0x08, 0x0A, 0x1C,
- 0x4C, 0x96, 0x03, 0x00, 0x09, 0x23, 0x01, 0x4E, 0x96, 0x03, 0x00, 0x09, 0x53, 0x01, 0x1C, 0x96,
- 0x03, 0x00, 0x09, 0x23, 0x01, 0x4E, 0x0B, 0x96, 0x03, 0x00, 0x09, 0x23, 0x01, 0x4D, 0x4F, 0x96,
- 0x02, 0x00, 0x08, 0x0A, 0x1C, 0x4C, 0x96, 0x03, 0x00, 0x09, 0x3D, 0x01, 0x4E, 0x96, 0x08, 0x00,
- 0x07, 0x02, 0x00, 0x00, 0x00, 0x09, 0x53, 0x01, 0x1C, 0x96, 0x03, 0x00, 0x09, 0x23, 0x01, 0x4E,
- 0x0C, 0x47, 0x96, 0x03, 0x00, 0x09, 0x3D, 0x01, 0x4D, 0x4F, 0x4F, 0x8E, 0x0E, 0x00, 0x00, 0x01,
+ 0x96, 0x02, 0x00, 0x08, 0x0A, 0x1C, 0x4C, 0x96, 0x03, 0x00, 0x09, 0x3E, 0x01, 0x4E, 0x96, 0x08,
+ 0x00, 0x07, 0x02, 0x00, 0x00, 0x00, 0x09, 0x55, 0x01, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x13, 0x4E,
+ 0x0C, 0x47, 0x96, 0x03, 0x00, 0x09, 0x3E, 0x01, 0x4D, 0x4F, 0x96, 0x02, 0x00, 0x08, 0x0A, 0x1C,
+ 0x4C, 0x96, 0x03, 0x00, 0x09, 0x25, 0x01, 0x4E, 0x96, 0x03, 0x00, 0x09, 0x55, 0x01, 0x1C, 0x96,
+ 0x03, 0x00, 0x09, 0x25, 0x01, 0x4E, 0x0B, 0x96, 0x03, 0x00, 0x09, 0x25, 0x01, 0x4D, 0x4F, 0x96,
+ 0x02, 0x00, 0x08, 0x0A, 0x1C, 0x4C, 0x96, 0x03, 0x00, 0x09, 0x3F, 0x01, 0x4E, 0x96, 0x08, 0x00,
+ 0x07, 0x02, 0x00, 0x00, 0x00, 0x09, 0x55, 0x01, 0x1C, 0x96, 0x03, 0x00, 0x09, 0x25, 0x01, 0x4E,
+ 0x0C, 0x47, 0x96, 0x03, 0x00, 0x09, 0x3F, 0x01, 0x4D, 0x4F, 0x4F, 0x8E, 0x0E, 0x00, 0x00, 0x01,
0x00, 0x00, 0x00, 0x00, 0x00, 0x6C, 0x65, 0x66, 0x74, 0x00, 0x3B, 0x00, 0x96, 0x02, 0x00, 0x08,
- 0x0A, 0x1C, 0x4C, 0x96, 0x03, 0x00, 0x09, 0x3C, 0x01, 0x4E, 0x96, 0x02, 0x00, 0x08, 0x0A, 0x1C,
- 0x96, 0x02, 0x00, 0x08, 0x13, 0x4E, 0x96, 0x03, 0x00, 0x09, 0x56, 0x01, 0x1C, 0x0B, 0x47, 0x96,
- 0x03, 0x00, 0x09, 0x3C, 0x01, 0x4D, 0x4F, 0x96, 0x02, 0x00, 0x08, 0x0A, 0x1C, 0x96, 0x05, 0x00,
- 0x08, 0x13, 0x09, 0x56, 0x01, 0x1C, 0x4F, 0x8E, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x0A, 0x1C, 0x4C, 0x96, 0x03, 0x00, 0x09, 0x3E, 0x01, 0x4E, 0x96, 0x02, 0x00, 0x08, 0x0A, 0x1C,
+ 0x96, 0x02, 0x00, 0x08, 0x13, 0x4E, 0x96, 0x03, 0x00, 0x09, 0x58, 0x01, 0x1C, 0x0B, 0x47, 0x96,
+ 0x03, 0x00, 0x09, 0x3E, 0x01, 0x4D, 0x4F, 0x96, 0x02, 0x00, 0x08, 0x0A, 0x1C, 0x96, 0x05, 0x00,
+ 0x08, 0x13, 0x09, 0x58, 0x01, 0x1C, 0x4F, 0x8E, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x0D, 0x00, 0x96, 0x02, 0x00, 0x08, 0x0A, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x13, 0x4E, 0x3E, 0x96,
- 0x0A, 0x00, 0x09, 0x56, 0x01, 0x07, 0x03, 0x00, 0x00, 0x00, 0x08, 0x04, 0x1C, 0x96, 0x03, 0x00,
- 0x09, 0x20, 0x01, 0x4E, 0x96, 0x03, 0x00, 0x09, 0x3A, 0x01, 0x4E, 0x96, 0x02, 0x00, 0x08, 0x0D,
+ 0x0A, 0x00, 0x09, 0x58, 0x01, 0x07, 0x03, 0x00, 0x00, 0x00, 0x08, 0x04, 0x1C, 0x96, 0x03, 0x00,
+ 0x09, 0x22, 0x01, 0x4E, 0x96, 0x03, 0x00, 0x09, 0x3C, 0x01, 0x4E, 0x96, 0x02, 0x00, 0x08, 0x0D,
0x4E, 0x96, 0x02, 0x00, 0x08, 0x07, 0x52, 0x17, 0x8E, 0x0F, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
0x00, 0x00, 0x72, 0x69, 0x67, 0x68, 0x74, 0x00, 0x1E, 0x00, 0x96, 0x02, 0x00, 0x08, 0x0A, 0x1C,
- 0x96, 0x06, 0x00, 0x09, 0x3C, 0x01, 0x09, 0x57, 0x01, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x0A, 0x1C,
+ 0x96, 0x06, 0x00, 0x09, 0x3E, 0x01, 0x09, 0x59, 0x01, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x0A, 0x1C,
0x96, 0x02, 0x00, 0x08, 0x13, 0x4E, 0x0B, 0x4F, 0x8E, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x1B, 0x00, 0x96, 0x02, 0x00, 0x08, 0x0A, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x13, 0x4E, 0x96,
- 0x02, 0x00, 0x08, 0x0A, 0x1C, 0x96, 0x03, 0x00, 0x09, 0x3C, 0x01, 0x4E, 0x47, 0x3E, 0x96, 0x0A,
- 0x00, 0x09, 0x57, 0x01, 0x07, 0x03, 0x00, 0x00, 0x00, 0x08, 0x04, 0x1C, 0x96, 0x03, 0x00, 0x09,
- 0x20, 0x01, 0x4E, 0x96, 0x03, 0x00, 0x09, 0x3A, 0x01, 0x4E, 0x96, 0x02, 0x00, 0x08, 0x0D, 0x4E,
+ 0x02, 0x00, 0x08, 0x0A, 0x1C, 0x96, 0x03, 0x00, 0x09, 0x3E, 0x01, 0x4E, 0x47, 0x3E, 0x96, 0x0A,
+ 0x00, 0x09, 0x59, 0x01, 0x07, 0x03, 0x00, 0x00, 0x00, 0x08, 0x04, 0x1C, 0x96, 0x03, 0x00, 0x09,
+ 0x22, 0x01, 0x4E, 0x96, 0x03, 0x00, 0x09, 0x3C, 0x01, 0x4E, 0x96, 0x02, 0x00, 0x08, 0x0D, 0x4E,
0x96, 0x02, 0x00, 0x08, 0x07, 0x52, 0x17, 0x8E, 0x0D, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00,
0x00, 0x74, 0x6F, 0x70, 0x00, 0x3D, 0x00, 0x96, 0x02, 0x00, 0x08, 0x0A, 0x1C, 0x4C, 0x96, 0x03,
- 0x00, 0x09, 0x3D, 0x01, 0x4E, 0x96, 0x02, 0x00, 0x08, 0x0A, 0x1C, 0x96, 0x03, 0x00, 0x09, 0x23,
- 0x01, 0x4E, 0x96, 0x03, 0x00, 0x09, 0x58, 0x01, 0x1C, 0x0B, 0x47, 0x96, 0x03, 0x00, 0x09, 0x3D,
- 0x01, 0x4D, 0x4F, 0x96, 0x02, 0x00, 0x08, 0x0A, 0x1C, 0x96, 0x06, 0x00, 0x09, 0x23, 0x01, 0x09,
- 0x58, 0x01, 0x1C, 0x4F, 0x8E, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0E, 0x00, 0x96,
- 0x02, 0x00, 0x08, 0x0A, 0x1C, 0x96, 0x03, 0x00, 0x09, 0x23, 0x01, 0x4E, 0x3E, 0x96, 0x0A, 0x00,
- 0x09, 0x58, 0x01, 0x07, 0x03, 0x00, 0x00, 0x00, 0x08, 0x04, 0x1C, 0x96, 0x03, 0x00, 0x09, 0x20,
- 0x01, 0x4E, 0x96, 0x03, 0x00, 0x09, 0x3A, 0x01, 0x4E, 0x96, 0x02, 0x00, 0x08, 0x0D, 0x4E, 0x96,
+ 0x00, 0x09, 0x3F, 0x01, 0x4E, 0x96, 0x02, 0x00, 0x08, 0x0A, 0x1C, 0x96, 0x03, 0x00, 0x09, 0x25,
+ 0x01, 0x4E, 0x96, 0x03, 0x00, 0x09, 0x5A, 0x01, 0x1C, 0x0B, 0x47, 0x96, 0x03, 0x00, 0x09, 0x3F,
+ 0x01, 0x4D, 0x4F, 0x96, 0x02, 0x00, 0x08, 0x0A, 0x1C, 0x96, 0x06, 0x00, 0x09, 0x25, 0x01, 0x09,
+ 0x5A, 0x01, 0x1C, 0x4F, 0x8E, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0E, 0x00, 0x96,
+ 0x02, 0x00, 0x08, 0x0A, 0x1C, 0x96, 0x03, 0x00, 0x09, 0x25, 0x01, 0x4E, 0x3E, 0x96, 0x0A, 0x00,
+ 0x09, 0x5A, 0x01, 0x07, 0x03, 0x00, 0x00, 0x00, 0x08, 0x04, 0x1C, 0x96, 0x03, 0x00, 0x09, 0x22,
+ 0x01, 0x4E, 0x96, 0x03, 0x00, 0x09, 0x3C, 0x01, 0x4E, 0x96, 0x02, 0x00, 0x08, 0x0D, 0x4E, 0x96,
0x02, 0x00, 0x08, 0x07, 0x52, 0x17, 0x8E, 0x10, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
0x62, 0x6F, 0x74, 0x74, 0x6F, 0x6D, 0x00, 0x1F, 0x00, 0x96, 0x02, 0x00, 0x08, 0x0A, 0x1C, 0x96,
- 0x06, 0x00, 0x09, 0x3D, 0x01, 0x09, 0x59, 0x01, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x0A, 0x1C, 0x96,
- 0x03, 0x00, 0x09, 0x23, 0x01, 0x4E, 0x0B, 0x4F, 0x8E, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x1C, 0x00, 0x96, 0x02, 0x00, 0x08, 0x0A, 0x1C, 0x96, 0x03, 0x00, 0x09, 0x23, 0x01, 0x4E,
- 0x96, 0x02, 0x00, 0x08, 0x0A, 0x1C, 0x96, 0x03, 0x00, 0x09, 0x3D, 0x01, 0x4E, 0x47, 0x3E, 0x96,
- 0x0A, 0x00, 0x09, 0x59, 0x01, 0x07, 0x03, 0x00, 0x00, 0x00, 0x08, 0x04, 0x1C, 0x96, 0x03, 0x00,
- 0x09, 0x20, 0x01, 0x4E, 0x96, 0x03, 0x00, 0x09, 0x3A, 0x01, 0x4E, 0x96, 0x02, 0x00, 0x08, 0x0D,
+ 0x06, 0x00, 0x09, 0x3F, 0x01, 0x09, 0x5B, 0x01, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x0A, 0x1C, 0x96,
+ 0x03, 0x00, 0x09, 0x25, 0x01, 0x4E, 0x0B, 0x4F, 0x8E, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x1C, 0x00, 0x96, 0x02, 0x00, 0x08, 0x0A, 0x1C, 0x96, 0x03, 0x00, 0x09, 0x25, 0x01, 0x4E,
+ 0x96, 0x02, 0x00, 0x08, 0x0A, 0x1C, 0x96, 0x03, 0x00, 0x09, 0x3F, 0x01, 0x4E, 0x47, 0x3E, 0x96,
+ 0x0A, 0x00, 0x09, 0x5B, 0x01, 0x07, 0x03, 0x00, 0x00, 0x00, 0x08, 0x04, 0x1C, 0x96, 0x03, 0x00,
+ 0x09, 0x22, 0x01, 0x4E, 0x96, 0x03, 0x00, 0x09, 0x3C, 0x01, 0x4E, 0x96, 0x02, 0x00, 0x08, 0x0D,
0x4E, 0x96, 0x02, 0x00, 0x08, 0x07, 0x52, 0x17, 0x8E, 0x11, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
0x00, 0x00, 0x74, 0x6F, 0x70, 0x4C, 0x65, 0x66, 0x74, 0x00, 0x92, 0x00, 0x96, 0x02, 0x00, 0x08,
- 0x0A, 0x1C, 0x4C, 0x96, 0x03, 0x00, 0x09, 0x3C, 0x01, 0x4E, 0x96, 0x02, 0x00, 0x08, 0x0A, 0x1C,
- 0x96, 0x02, 0x00, 0x08, 0x13, 0x4E, 0x96, 0x03, 0x00, 0x09, 0x5A, 0x01, 0x1C, 0x96, 0x02, 0x00,
- 0x08, 0x13, 0x4E, 0x0B, 0x47, 0x96, 0x03, 0x00, 0x09, 0x3C, 0x01, 0x4D, 0x4F, 0x96, 0x02, 0x00,
- 0x08, 0x0A, 0x1C, 0x4C, 0x96, 0x03, 0x00, 0x09, 0x3D, 0x01, 0x4E, 0x96, 0x02, 0x00, 0x08, 0x0A,
- 0x1C, 0x96, 0x03, 0x00, 0x09, 0x23, 0x01, 0x4E, 0x96, 0x03, 0x00, 0x09, 0x5A, 0x01, 0x1C, 0x96,
- 0x03, 0x00, 0x09, 0x23, 0x01, 0x4E, 0x0B, 0x47, 0x96, 0x03, 0x00, 0x09, 0x3D, 0x01, 0x4D, 0x4F,
- 0x96, 0x02, 0x00, 0x08, 0x0A, 0x1C, 0x96, 0x05, 0x00, 0x08, 0x13, 0x09, 0x5A, 0x01, 0x1C, 0x96,
+ 0x0A, 0x1C, 0x4C, 0x96, 0x03, 0x00, 0x09, 0x3E, 0x01, 0x4E, 0x96, 0x02, 0x00, 0x08, 0x0A, 0x1C,
+ 0x96, 0x02, 0x00, 0x08, 0x13, 0x4E, 0x96, 0x03, 0x00, 0x09, 0x5C, 0x01, 0x1C, 0x96, 0x02, 0x00,
+ 0x08, 0x13, 0x4E, 0x0B, 0x47, 0x96, 0x03, 0x00, 0x09, 0x3E, 0x01, 0x4D, 0x4F, 0x96, 0x02, 0x00,
+ 0x08, 0x0A, 0x1C, 0x4C, 0x96, 0x03, 0x00, 0x09, 0x3F, 0x01, 0x4E, 0x96, 0x02, 0x00, 0x08, 0x0A,
+ 0x1C, 0x96, 0x03, 0x00, 0x09, 0x25, 0x01, 0x4E, 0x96, 0x03, 0x00, 0x09, 0x5C, 0x01, 0x1C, 0x96,
+ 0x03, 0x00, 0x09, 0x25, 0x01, 0x4E, 0x0B, 0x47, 0x96, 0x03, 0x00, 0x09, 0x3F, 0x01, 0x4D, 0x4F,
+ 0x96, 0x02, 0x00, 0x08, 0x0A, 0x1C, 0x96, 0x05, 0x00, 0x08, 0x13, 0x09, 0x5C, 0x01, 0x1C, 0x96,
0x02, 0x00, 0x08, 0x13, 0x4E, 0x4F, 0x96, 0x02, 0x00, 0x08, 0x0A, 0x1C, 0x96, 0x06, 0x00, 0x09,
- 0x23, 0x01, 0x09, 0x5A, 0x01, 0x1C, 0x96, 0x03, 0x00, 0x09, 0x23, 0x01, 0x4E, 0x4F, 0x8E, 0x08,
+ 0x25, 0x01, 0x09, 0x5C, 0x01, 0x1C, 0x96, 0x03, 0x00, 0x09, 0x25, 0x01, 0x4E, 0x4F, 0x8E, 0x08,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x33, 0x00, 0x96, 0x02, 0x00, 0x08, 0x0A, 0x1C, 0x96,
- 0x03, 0x00, 0x09, 0x23, 0x01, 0x4E, 0x96, 0x02, 0x00, 0x08, 0x0A, 0x1C, 0x96, 0x02, 0x00, 0x08,
+ 0x03, 0x00, 0x09, 0x25, 0x01, 0x4E, 0x96, 0x02, 0x00, 0x08, 0x0A, 0x1C, 0x96, 0x02, 0x00, 0x08,
0x13, 0x4E, 0x96, 0x07, 0x00, 0x07, 0x02, 0x00, 0x00, 0x00, 0x08, 0x04, 0x1C, 0x96, 0x03, 0x00,
- 0x09, 0x20, 0x01, 0x4E, 0x96, 0x03, 0x00, 0x09, 0x21, 0x01, 0x53, 0x3E, 0x96, 0x0A, 0x00, 0x09,
- 0x5A, 0x01, 0x07, 0x03, 0x00, 0x00, 0x00, 0x08, 0x04, 0x1C, 0x96, 0x03, 0x00, 0x09, 0x20, 0x01,
- 0x4E, 0x96, 0x03, 0x00, 0x09, 0x3A, 0x01, 0x4E, 0x96, 0x02, 0x00, 0x08, 0x0D, 0x4E, 0x96, 0x02,
+ 0x09, 0x22, 0x01, 0x4E, 0x96, 0x03, 0x00, 0x09, 0x23, 0x01, 0x53, 0x3E, 0x96, 0x0A, 0x00, 0x09,
+ 0x5C, 0x01, 0x07, 0x03, 0x00, 0x00, 0x00, 0x08, 0x04, 0x1C, 0x96, 0x03, 0x00, 0x09, 0x22, 0x01,
+ 0x4E, 0x96, 0x03, 0x00, 0x09, 0x3C, 0x01, 0x4E, 0x96, 0x02, 0x00, 0x08, 0x0D, 0x4E, 0x96, 0x02,
0x00, 0x08, 0x07, 0x52, 0x17, 0x8E, 0x15, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x62,
0x6F, 0x74, 0x74, 0x6F, 0x6D, 0x52, 0x69, 0x67, 0x68, 0x74, 0x00, 0x4A, 0x00, 0x96, 0x02, 0x00,
- 0x08, 0x0A, 0x1C, 0x96, 0x06, 0x00, 0x09, 0x3C, 0x01, 0x09, 0x5B, 0x01, 0x1C, 0x96, 0x02, 0x00,
+ 0x08, 0x0A, 0x1C, 0x96, 0x06, 0x00, 0x09, 0x3E, 0x01, 0x09, 0x5D, 0x01, 0x1C, 0x96, 0x02, 0x00,
0x08, 0x13, 0x4E, 0x96, 0x02, 0x00, 0x08, 0x0A, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x13, 0x4E, 0x0B,
- 0x4F, 0x96, 0x02, 0x00, 0x08, 0x0A, 0x1C, 0x96, 0x06, 0x00, 0x09, 0x3D, 0x01, 0x09, 0x5B, 0x01,
- 0x1C, 0x96, 0x03, 0x00, 0x09, 0x23, 0x01, 0x4E, 0x96, 0x02, 0x00, 0x08, 0x0A, 0x1C, 0x96, 0x03,
- 0x00, 0x09, 0x23, 0x01, 0x4E, 0x0B, 0x4F, 0x8E, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x4F, 0x00, 0x96, 0x02, 0x00, 0x08, 0x0A, 0x1C, 0x96, 0x03, 0x00, 0x09, 0x23, 0x01, 0x4E, 0x96,
- 0x02, 0x00, 0x08, 0x0A, 0x1C, 0x96, 0x03, 0x00, 0x09, 0x3D, 0x01, 0x4E, 0x47, 0x96, 0x02, 0x00,
+ 0x4F, 0x96, 0x02, 0x00, 0x08, 0x0A, 0x1C, 0x96, 0x06, 0x00, 0x09, 0x3F, 0x01, 0x09, 0x5D, 0x01,
+ 0x1C, 0x96, 0x03, 0x00, 0x09, 0x25, 0x01, 0x4E, 0x96, 0x02, 0x00, 0x08, 0x0A, 0x1C, 0x96, 0x03,
+ 0x00, 0x09, 0x25, 0x01, 0x4E, 0x0B, 0x4F, 0x8E, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x4F, 0x00, 0x96, 0x02, 0x00, 0x08, 0x0A, 0x1C, 0x96, 0x03, 0x00, 0x09, 0x25, 0x01, 0x4E, 0x96,
+ 0x02, 0x00, 0x08, 0x0A, 0x1C, 0x96, 0x03, 0x00, 0x09, 0x3F, 0x01, 0x4E, 0x47, 0x96, 0x02, 0x00,
0x08, 0x0A, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x13, 0x4E, 0x96, 0x02, 0x00, 0x08, 0x0A, 0x1C, 0x96,
- 0x03, 0x00, 0x09, 0x3C, 0x01, 0x4E, 0x47, 0x96, 0x07, 0x00, 0x07, 0x02, 0x00, 0x00, 0x00, 0x08,
- 0x04, 0x1C, 0x96, 0x03, 0x00, 0x09, 0x20, 0x01, 0x4E, 0x96, 0x03, 0x00, 0x09, 0x21, 0x01, 0x53,
- 0x3E, 0x96, 0x0A, 0x00, 0x09, 0x5B, 0x01, 0x07, 0x03, 0x00, 0x00, 0x00, 0x08, 0x04, 0x1C, 0x96,
- 0x03, 0x00, 0x09, 0x20, 0x01, 0x4E, 0x96, 0x03, 0x00, 0x09, 0x3A, 0x01, 0x4E, 0x96, 0x02, 0x00,
+ 0x03, 0x00, 0x09, 0x3E, 0x01, 0x4E, 0x47, 0x96, 0x07, 0x00, 0x07, 0x02, 0x00, 0x00, 0x00, 0x08,
+ 0x04, 0x1C, 0x96, 0x03, 0x00, 0x09, 0x22, 0x01, 0x4E, 0x96, 0x03, 0x00, 0x09, 0x23, 0x01, 0x53,
+ 0x3E, 0x96, 0x0A, 0x00, 0x09, 0x5D, 0x01, 0x07, 0x03, 0x00, 0x00, 0x00, 0x08, 0x04, 0x1C, 0x96,
+ 0x03, 0x00, 0x09, 0x22, 0x01, 0x4E, 0x96, 0x03, 0x00, 0x09, 0x3C, 0x01, 0x4E, 0x96, 0x02, 0x00,
0x08, 0x0D, 0x4E, 0x96, 0x02, 0x00, 0x08, 0x07, 0x52, 0x17, 0x8E, 0x0E, 0x00, 0x00, 0x01, 0x00,
0x00, 0x00, 0x00, 0x00, 0x73, 0x69, 0x7A, 0x65, 0x00, 0x2D, 0x00, 0x96, 0x02, 0x00, 0x08, 0x0A,
- 0x1C, 0x96, 0x05, 0x00, 0x09, 0x3C, 0x01, 0x08, 0xE4, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x13, 0x4E,
- 0x4F, 0x96, 0x02, 0x00, 0x08, 0x0A, 0x1C, 0x96, 0x05, 0x00, 0x09, 0x3D, 0x01, 0x08, 0xE4, 0x1C,
- 0x96, 0x03, 0x00, 0x09, 0x23, 0x01, 0x4E, 0x4F, 0x8E, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x34, 0x00, 0x96, 0x02, 0x00, 0x08, 0x0A, 0x1C, 0x96, 0x03, 0x00, 0x09, 0x3D, 0x01, 0x4E,
- 0x96, 0x02, 0x00, 0x08, 0x0A, 0x1C, 0x96, 0x03, 0x00, 0x09, 0x3C, 0x01, 0x4E, 0x96, 0x07, 0x00,
- 0x07, 0x02, 0x00, 0x00, 0x00, 0x08, 0x04, 0x1C, 0x96, 0x03, 0x00, 0x09, 0x20, 0x01, 0x4E, 0x96,
- 0x03, 0x00, 0x09, 0x21, 0x01, 0x53, 0x3E, 0x96, 0x09, 0x00, 0x08, 0xE4, 0x07, 0x03, 0x00, 0x00,
- 0x00, 0x08, 0x04, 0x1C, 0x96, 0x03, 0x00, 0x09, 0x20, 0x01, 0x4E, 0x96, 0x03, 0x00, 0x09, 0x3A,
+ 0x1C, 0x96, 0x05, 0x00, 0x09, 0x3E, 0x01, 0x08, 0xE4, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x13, 0x4E,
+ 0x4F, 0x96, 0x02, 0x00, 0x08, 0x0A, 0x1C, 0x96, 0x05, 0x00, 0x09, 0x3F, 0x01, 0x08, 0xE4, 0x1C,
+ 0x96, 0x03, 0x00, 0x09, 0x25, 0x01, 0x4E, 0x4F, 0x8E, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x34, 0x00, 0x96, 0x02, 0x00, 0x08, 0x0A, 0x1C, 0x96, 0x03, 0x00, 0x09, 0x3F, 0x01, 0x4E,
+ 0x96, 0x02, 0x00, 0x08, 0x0A, 0x1C, 0x96, 0x03, 0x00, 0x09, 0x3E, 0x01, 0x4E, 0x96, 0x07, 0x00,
+ 0x07, 0x02, 0x00, 0x00, 0x00, 0x08, 0x04, 0x1C, 0x96, 0x03, 0x00, 0x09, 0x22, 0x01, 0x4E, 0x96,
+ 0x03, 0x00, 0x09, 0x23, 0x01, 0x53, 0x3E, 0x96, 0x09, 0x00, 0x08, 0xE4, 0x07, 0x03, 0x00, 0x00,
+ 0x00, 0x08, 0x04, 0x1C, 0x96, 0x03, 0x00, 0x09, 0x22, 0x01, 0x4E, 0x96, 0x03, 0x00, 0x09, 0x3C,
0x01, 0x4E, 0x96, 0x02, 0x00, 0x08, 0x0D, 0x4E, 0x96, 0x02, 0x00, 0x08, 0x07, 0x52, 0x17, 0x96,
- 0x02, 0x00, 0x08, 0x04, 0x1C, 0x96, 0x03, 0x00, 0x09, 0x20, 0x01, 0x4E, 0x96, 0x03, 0x00, 0x09,
- 0x5C, 0x01, 0x8E, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1F, 0x00, 0x96, 0x07, 0x00,
+ 0x02, 0x00, 0x08, 0x04, 0x1C, 0x96, 0x03, 0x00, 0x09, 0x22, 0x01, 0x4E, 0x96, 0x03, 0x00, 0x09,
+ 0x5E, 0x01, 0x8E, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1F, 0x00, 0x96, 0x07, 0x00,
0x08, 0x1C, 0x07, 0x00, 0x00, 0x00, 0x00, 0x43, 0x3C, 0x96, 0x07, 0x00, 0x07, 0x00, 0x00, 0x00,
- 0x00, 0x08, 0x1C, 0x1C, 0x96, 0x03, 0x00, 0x09, 0x5D, 0x01, 0x52, 0x17, 0x4F, 0x96, 0x02, 0x00,
- 0x08, 0x04, 0x1C, 0x96, 0x03, 0x00, 0x09, 0x20, 0x01, 0x4E, 0x96, 0x03, 0x00, 0x09, 0x5C, 0x01,
- 0x4E, 0x96, 0x02, 0x00, 0x08, 0x0D, 0x4E, 0x96, 0x03, 0x00, 0x09, 0x32, 0x01, 0x8E, 0x08, 0x00,
+ 0x00, 0x08, 0x1C, 0x1C, 0x96, 0x03, 0x00, 0x09, 0x5F, 0x01, 0x52, 0x17, 0x4F, 0x96, 0x02, 0x00,
+ 0x08, 0x04, 0x1C, 0x96, 0x03, 0x00, 0x09, 0x22, 0x01, 0x4E, 0x96, 0x03, 0x00, 0x09, 0x5E, 0x01,
+ 0x4E, 0x96, 0x02, 0x00, 0x08, 0x0D, 0x4E, 0x96, 0x03, 0x00, 0x09, 0x34, 0x01, 0x8E, 0x08, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1F, 0x00, 0x96, 0x07, 0x00, 0x08, 0x1C, 0x07, 0x00, 0x00,
0x00, 0x00, 0x43, 0x3C, 0x96, 0x07, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 0x08, 0x1C, 0x1C, 0x96,
- 0x03, 0x00, 0x09, 0x5E, 0x01, 0x52, 0x17, 0x4F, 0x96, 0x02, 0x00, 0x08, 0x04, 0x1C, 0x96, 0x03,
- 0x00, 0x09, 0x20, 0x01, 0x4E, 0x96, 0x03, 0x00, 0x09, 0x5C, 0x01, 0x4E, 0x96, 0x02, 0x00, 0x08,
- 0x0D, 0x4E, 0x96, 0x03, 0x00, 0x09, 0x5F, 0x01, 0x8E, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x03, 0x00, 0x09, 0x60, 0x01, 0x52, 0x17, 0x4F, 0x96, 0x02, 0x00, 0x08, 0x04, 0x1C, 0x96, 0x03,
+ 0x00, 0x09, 0x22, 0x01, 0x4E, 0x96, 0x03, 0x00, 0x09, 0x5E, 0x01, 0x4E, 0x96, 0x02, 0x00, 0x08,
+ 0x0D, 0x4E, 0x96, 0x03, 0x00, 0x09, 0x61, 0x01, 0x8E, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x1F, 0x00, 0x96, 0x07, 0x00, 0x08, 0x1C, 0x07, 0x00, 0x00, 0x00, 0x00, 0x43, 0x3C, 0x96,
- 0x07, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 0x08, 0x1C, 0x1C, 0x96, 0x03, 0x00, 0x09, 0x60, 0x01,
- 0x52, 0x17, 0x4F, 0x96, 0x02, 0x00, 0x08, 0x04, 0x1C, 0x96, 0x03, 0x00, 0x09, 0x20, 0x01, 0x4E,
- 0x96, 0x03, 0x00, 0x09, 0x5C, 0x01, 0x4E, 0x96, 0x02, 0x00, 0x08, 0x0D, 0x4E, 0x96, 0x03, 0x00,
- 0x09, 0x61, 0x01, 0x8E, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1F, 0x00, 0x96, 0x07,
+ 0x07, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 0x08, 0x1C, 0x1C, 0x96, 0x03, 0x00, 0x09, 0x62, 0x01,
+ 0x52, 0x17, 0x4F, 0x96, 0x02, 0x00, 0x08, 0x04, 0x1C, 0x96, 0x03, 0x00, 0x09, 0x22, 0x01, 0x4E,
+ 0x96, 0x03, 0x00, 0x09, 0x5E, 0x01, 0x4E, 0x96, 0x02, 0x00, 0x08, 0x0D, 0x4E, 0x96, 0x03, 0x00,
+ 0x09, 0x63, 0x01, 0x8E, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1F, 0x00, 0x96, 0x07,
0x00, 0x08, 0x1C, 0x07, 0x00, 0x00, 0x00, 0x00, 0x43, 0x3C, 0x96, 0x07, 0x00, 0x07, 0x00, 0x00,
- 0x00, 0x00, 0x08, 0x1C, 0x1C, 0x96, 0x03, 0x00, 0x09, 0x62, 0x01, 0x52, 0x17, 0x4F, 0x96, 0x02,
- 0x00, 0x08, 0x04, 0x1C, 0x96, 0x03, 0x00, 0x09, 0x20, 0x01, 0x4E, 0x96, 0x03, 0x00, 0x09, 0x5C,
- 0x01, 0x4E, 0x96, 0x02, 0x00, 0x08, 0x0D, 0x4E, 0x96, 0x03, 0x00, 0x09, 0x63, 0x01, 0x8E, 0x08,
+ 0x00, 0x00, 0x08, 0x1C, 0x1C, 0x96, 0x03, 0x00, 0x09, 0x64, 0x01, 0x52, 0x17, 0x4F, 0x96, 0x02,
+ 0x00, 0x08, 0x04, 0x1C, 0x96, 0x03, 0x00, 0x09, 0x22, 0x01, 0x4E, 0x96, 0x03, 0x00, 0x09, 0x5E,
+ 0x01, 0x4E, 0x96, 0x02, 0x00, 0x08, 0x0D, 0x4E, 0x96, 0x03, 0x00, 0x09, 0x65, 0x01, 0x8E, 0x08,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1F, 0x00, 0x96, 0x07, 0x00, 0x08, 0x1C, 0x07, 0x00,
0x00, 0x00, 0x00, 0x43, 0x3C, 0x96, 0x07, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 0x08, 0x1C, 0x1C,
- 0x96, 0x03, 0x00, 0x09, 0x64, 0x01, 0x52, 0x17, 0x4F, 0x96, 0x02, 0x00, 0x08, 0x04, 0x1C, 0x96,
- 0x03, 0x00, 0x09, 0x20, 0x01, 0x4E, 0x96, 0x03, 0x00, 0x09, 0x5C, 0x01, 0x4E, 0x96, 0x02, 0x00,
- 0x08, 0x0D, 0x4E, 0x96, 0x03, 0x00, 0x09, 0x65, 0x01, 0x8E, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x96, 0x03, 0x00, 0x09, 0x66, 0x01, 0x52, 0x17, 0x4F, 0x96, 0x02, 0x00, 0x08, 0x04, 0x1C, 0x96,
+ 0x03, 0x00, 0x09, 0x22, 0x01, 0x4E, 0x96, 0x03, 0x00, 0x09, 0x5E, 0x01, 0x4E, 0x96, 0x02, 0x00,
+ 0x08, 0x0D, 0x4E, 0x96, 0x03, 0x00, 0x09, 0x67, 0x01, 0x8E, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x1F, 0x00, 0x96, 0x07, 0x00, 0x08, 0x1C, 0x07, 0x00, 0x00, 0x00, 0x00, 0x43, 0x3C,
- 0x96, 0x07, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 0x08, 0x1C, 0x1C, 0x96, 0x03, 0x00, 0x09, 0x66,
- 0x01, 0x52, 0x17, 0x4F, 0x96, 0x02, 0x00, 0x08, 0x04, 0x1C, 0x96, 0x03, 0x00, 0x09, 0x20, 0x01,
- 0x4E, 0x96, 0x03, 0x00, 0x09, 0x5C, 0x01, 0x4E, 0x96, 0x02, 0x00, 0x08, 0x0D, 0x4E, 0x96, 0x03,
- 0x00, 0x09, 0x67, 0x01, 0x8E, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1F, 0x00, 0x96,
+ 0x96, 0x07, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 0x08, 0x1C, 0x1C, 0x96, 0x03, 0x00, 0x09, 0x68,
+ 0x01, 0x52, 0x17, 0x4F, 0x96, 0x02, 0x00, 0x08, 0x04, 0x1C, 0x96, 0x03, 0x00, 0x09, 0x22, 0x01,
+ 0x4E, 0x96, 0x03, 0x00, 0x09, 0x5E, 0x01, 0x4E, 0x96, 0x02, 0x00, 0x08, 0x0D, 0x4E, 0x96, 0x03,
+ 0x00, 0x09, 0x69, 0x01, 0x8E, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1F, 0x00, 0x96,
0x07, 0x00, 0x08, 0x1C, 0x07, 0x00, 0x00, 0x00, 0x00, 0x43, 0x3C, 0x96, 0x07, 0x00, 0x07, 0x00,
- 0x00, 0x00, 0x00, 0x08, 0x1C, 0x1C, 0x96, 0x03, 0x00, 0x09, 0x68, 0x01, 0x52, 0x17, 0x4F, 0x96,
- 0x02, 0x00, 0x08, 0x04, 0x1C, 0x96, 0x03, 0x00, 0x09, 0x20, 0x01, 0x4E, 0x96, 0x03, 0x00, 0x09,
- 0x5C, 0x01, 0x4E, 0x96, 0x02, 0x00, 0x08, 0x0D, 0x4E, 0x96, 0x03, 0x00, 0x09, 0x69, 0x01, 0x8E,
+ 0x00, 0x00, 0x00, 0x08, 0x1C, 0x1C, 0x96, 0x03, 0x00, 0x09, 0x6A, 0x01, 0x52, 0x17, 0x4F, 0x96,
+ 0x02, 0x00, 0x08, 0x04, 0x1C, 0x96, 0x03, 0x00, 0x09, 0x22, 0x01, 0x4E, 0x96, 0x03, 0x00, 0x09,
+ 0x5E, 0x01, 0x4E, 0x96, 0x02, 0x00, 0x08, 0x0D, 0x4E, 0x96, 0x03, 0x00, 0x09, 0x6B, 0x01, 0x8E,
0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1F, 0x00, 0x96, 0x07, 0x00, 0x08, 0x1C, 0x07,
0x00, 0x00, 0x00, 0x00, 0x43, 0x3C, 0x96, 0x07, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 0x08, 0x1C,
- 0x1C, 0x96, 0x03, 0x00, 0x09, 0x6A, 0x01, 0x52, 0x17, 0x4F, 0x96, 0x02, 0x00, 0x08, 0x04, 0x1C,
- 0x96, 0x03, 0x00, 0x09, 0x20, 0x01, 0x4E, 0x96, 0x03, 0x00, 0x09, 0x5C, 0x01, 0x4E, 0x96, 0x02,
- 0x00, 0x08, 0x0D, 0x4E, 0x96, 0x03, 0x00, 0x09, 0x6B, 0x01, 0x8E, 0x08, 0x00, 0x00, 0x00, 0x00,
+ 0x1C, 0x96, 0x03, 0x00, 0x09, 0x6C, 0x01, 0x52, 0x17, 0x4F, 0x96, 0x02, 0x00, 0x08, 0x04, 0x1C,
+ 0x96, 0x03, 0x00, 0x09, 0x22, 0x01, 0x4E, 0x96, 0x03, 0x00, 0x09, 0x5E, 0x01, 0x4E, 0x96, 0x02,
+ 0x00, 0x08, 0x0D, 0x4E, 0x96, 0x03, 0x00, 0x09, 0x6D, 0x01, 0x8E, 0x08, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x1F, 0x00, 0x96, 0x07, 0x00, 0x08, 0x1C, 0x07, 0x00, 0x00, 0x00, 0x00, 0x43,
0x3C, 0x96, 0x07, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 0x08, 0x1C, 0x1C, 0x96, 0x03, 0x00, 0x09,
- 0x6C, 0x01, 0x52, 0x17, 0x4F, 0x96, 0x02, 0x00, 0x08, 0x04, 0x1C, 0x96, 0x03, 0x00, 0x09, 0x20,
- 0x01, 0x4E, 0x96, 0x03, 0x00, 0x09, 0x5C, 0x01, 0x4E, 0x96, 0x02, 0x00, 0x08, 0x0D, 0x4E, 0x96,
- 0x03, 0x00, 0x09, 0x6D, 0x01, 0x8E, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1F, 0x00,
+ 0x6E, 0x01, 0x52, 0x17, 0x4F, 0x96, 0x02, 0x00, 0x08, 0x04, 0x1C, 0x96, 0x03, 0x00, 0x09, 0x22,
+ 0x01, 0x4E, 0x96, 0x03, 0x00, 0x09, 0x5E, 0x01, 0x4E, 0x96, 0x02, 0x00, 0x08, 0x0D, 0x4E, 0x96,
+ 0x03, 0x00, 0x09, 0x6F, 0x01, 0x8E, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1F, 0x00,
0x96, 0x07, 0x00, 0x08, 0x1C, 0x07, 0x00, 0x00, 0x00, 0x00, 0x43, 0x3C, 0x96, 0x07, 0x00, 0x07,
- 0x00, 0x00, 0x00, 0x00, 0x08, 0x1C, 0x1C, 0x96, 0x03, 0x00, 0x09, 0x6E, 0x01, 0x52, 0x17, 0x4F,
- 0x96, 0x02, 0x00, 0x08, 0x04, 0x1C, 0x96, 0x03, 0x00, 0x09, 0x20, 0x01, 0x4E, 0x96, 0x03, 0x00,
- 0x09, 0x5C, 0x01, 0x4E, 0x96, 0x02, 0x00, 0x08, 0x0D, 0x4E, 0x96, 0x03, 0x00, 0x09, 0x6F, 0x01,
+ 0x00, 0x00, 0x00, 0x00, 0x08, 0x1C, 0x1C, 0x96, 0x03, 0x00, 0x09, 0x70, 0x01, 0x52, 0x17, 0x4F,
+ 0x96, 0x02, 0x00, 0x08, 0x04, 0x1C, 0x96, 0x03, 0x00, 0x09, 0x22, 0x01, 0x4E, 0x96, 0x03, 0x00,
+ 0x09, 0x5E, 0x01, 0x4E, 0x96, 0x02, 0x00, 0x08, 0x0D, 0x4E, 0x96, 0x03, 0x00, 0x09, 0x71, 0x01,
0x8E, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1F, 0x00, 0x96, 0x07, 0x00, 0x08, 0x1C,
0x07, 0x00, 0x00, 0x00, 0x00, 0x43, 0x3C, 0x96, 0x07, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 0x08,
- 0x1C, 0x1C, 0x96, 0x03, 0x00, 0x09, 0x70, 0x01, 0x52, 0x17, 0x4F, 0x96, 0x02, 0x00, 0x08, 0x04,
- 0x1C, 0x96, 0x03, 0x00, 0x09, 0x20, 0x01, 0x4E, 0x96, 0x03, 0x00, 0x09, 0x5C, 0x01, 0x4E, 0x96,
- 0x02, 0x00, 0x08, 0x0D, 0x4E, 0x96, 0x03, 0x00, 0x09, 0x71, 0x01, 0x8E, 0x08, 0x00, 0x00, 0x00,
+ 0x1C, 0x1C, 0x96, 0x03, 0x00, 0x09, 0x72, 0x01, 0x52, 0x17, 0x4F, 0x96, 0x02, 0x00, 0x08, 0x04,
+ 0x1C, 0x96, 0x03, 0x00, 0x09, 0x22, 0x01, 0x4E, 0x96, 0x03, 0x00, 0x09, 0x5E, 0x01, 0x4E, 0x96,
+ 0x02, 0x00, 0x08, 0x0D, 0x4E, 0x96, 0x03, 0x00, 0x09, 0x73, 0x01, 0x8E, 0x08, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x1F, 0x00, 0x96, 0x07, 0x00, 0x08, 0x1C, 0x07, 0x00, 0x00, 0x00, 0x00,
0x43, 0x3C, 0x96, 0x07, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 0x08, 0x1C, 0x1C, 0x96, 0x03, 0x00,
- 0x09, 0x72, 0x01, 0x52, 0x17, 0x4F, 0x96, 0x02, 0x00, 0x08, 0x04, 0x1C, 0x96, 0x03, 0x00, 0x09,
- 0x20, 0x01, 0x4E, 0x96, 0x03, 0x00, 0x09, 0x5C, 0x01, 0x4E, 0x96, 0x02, 0x00, 0x08, 0x0D, 0x4E,
+ 0x09, 0x74, 0x01, 0x52, 0x17, 0x4F, 0x96, 0x02, 0x00, 0x08, 0x04, 0x1C, 0x96, 0x03, 0x00, 0x09,
+ 0x22, 0x01, 0x4E, 0x96, 0x03, 0x00, 0x09, 0x5E, 0x01, 0x4E, 0x96, 0x02, 0x00, 0x08, 0x0D, 0x4E,
0x96, 0x02, 0x00, 0x08, 0x0F, 0x8E, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1F, 0x00,
0x96, 0x07, 0x00, 0x08, 0x1C, 0x07, 0x00, 0x00, 0x00, 0x00, 0x43, 0x3C, 0x96, 0x07, 0x00, 0x07,
- 0x00, 0x00, 0x00, 0x00, 0x08, 0x1C, 0x1C, 0x96, 0x03, 0x00, 0x09, 0x73, 0x01, 0x52, 0x17, 0x4F,
- 0x96, 0x02, 0x00, 0x08, 0x04, 0x1C, 0x96, 0x03, 0x00, 0x09, 0x20, 0x01, 0x4E, 0x96, 0x14, 0x00,
- 0x09, 0x74, 0x01, 0x07, 0x00, 0x00, 0x00, 0x00, 0x07, 0x51, 0x04, 0x00, 0x00, 0x07, 0x02, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x08, 0x1C, 0x1C, 0x96, 0x03, 0x00, 0x09, 0x75, 0x01, 0x52, 0x17, 0x4F,
+ 0x96, 0x02, 0x00, 0x08, 0x04, 0x1C, 0x96, 0x03, 0x00, 0x09, 0x22, 0x01, 0x4E, 0x96, 0x14, 0x00,
+ 0x09, 0x76, 0x01, 0x07, 0x00, 0x00, 0x00, 0x00, 0x07, 0x51, 0x04, 0x00, 0x00, 0x07, 0x02, 0x00,
0x00, 0x00, 0x08, 0x39, 0x3D, 0x4F, 0x96, 0x02, 0x00, 0x08, 0x04, 0x1C, 0x96, 0x03, 0x00, 0x09,
- 0x20, 0x01, 0x4E, 0x96, 0x03, 0x00, 0x09, 0x74, 0x01, 0x4E, 0x96, 0x02, 0x00, 0x08, 0x0D, 0x4E,
+ 0x22, 0x01, 0x4E, 0x96, 0x03, 0x00, 0x09, 0x76, 0x01, 0x4E, 0x96, 0x02, 0x00, 0x08, 0x0D, 0x4E,
0x96, 0x02, 0x00, 0x08, 0x0F, 0x8E, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1F, 0x00,
0x96, 0x07, 0x00, 0x08, 0x1C, 0x07, 0x00, 0x00, 0x00, 0x00, 0x43, 0x3C, 0x96, 0x07, 0x00, 0x07,
- 0x00, 0x00, 0x00, 0x00, 0x08, 0x1C, 0x1C, 0x96, 0x03, 0x00, 0x09, 0x75, 0x01, 0x52, 0x17, 0x4F,
- 0x96, 0x0F, 0x00, 0x07, 0x01, 0x00, 0x00, 0x00, 0x09, 0x76, 0x01, 0x07, 0x51, 0x04, 0x00, 0x00,
- 0x08, 0x04, 0x1C, 0x96, 0x03, 0x00, 0x09, 0x20, 0x01, 0x4E, 0x96, 0x03, 0x00, 0x09, 0x74, 0x01,
+ 0x00, 0x00, 0x00, 0x00, 0x08, 0x1C, 0x1C, 0x96, 0x03, 0x00, 0x09, 0x77, 0x01, 0x52, 0x17, 0x4F,
+ 0x96, 0x0F, 0x00, 0x07, 0x01, 0x00, 0x00, 0x00, 0x09, 0x78, 0x01, 0x07, 0x51, 0x04, 0x00, 0x00,
+ 0x08, 0x04, 0x1C, 0x96, 0x03, 0x00, 0x09, 0x22, 0x01, 0x4E, 0x96, 0x03, 0x00, 0x09, 0x76, 0x01,
0x4E, 0x96, 0x02, 0x00, 0x08, 0x0D, 0x4E, 0x96, 0x07, 0x00, 0x07, 0x04, 0x00, 0x00, 0x00, 0x08,
- 0x02, 0x3D, 0x17, 0x96, 0x0F, 0x00, 0x07, 0x65, 0x00, 0x00, 0x00, 0x09, 0x77, 0x01, 0x07, 0x51,
- 0x04, 0x00, 0x00, 0x08, 0x04, 0x1C, 0x96, 0x03, 0x00, 0x09, 0x20, 0x01, 0x4E, 0x96, 0x03, 0x00,
- 0x09, 0x74, 0x01, 0x4E, 0x96, 0x02, 0x00, 0x08, 0x0D, 0x4E, 0x96, 0x07, 0x00, 0x07, 0x04, 0x00,
+ 0x02, 0x3D, 0x17, 0x96, 0x0F, 0x00, 0x07, 0x65, 0x00, 0x00, 0x00, 0x09, 0x79, 0x01, 0x07, 0x51,
+ 0x04, 0x00, 0x00, 0x08, 0x04, 0x1C, 0x96, 0x03, 0x00, 0x09, 0x22, 0x01, 0x4E, 0x96, 0x03, 0x00,
+ 0x09, 0x76, 0x01, 0x4E, 0x96, 0x02, 0x00, 0x08, 0x0D, 0x4E, 0x96, 0x07, 0x00, 0x07, 0x04, 0x00,
0x00, 0x00, 0x08, 0x03, 0x3D, 0x17, 0x96, 0x02, 0x00, 0x08, 0x04, 0x1C, 0x96, 0x03, 0x00, 0x09,
- 0x20, 0x01, 0x4E, 0x96, 0x14, 0x00, 0x09, 0x78, 0x01, 0x07, 0x00, 0x00, 0x00, 0x00, 0x07, 0x52,
+ 0x22, 0x01, 0x4E, 0x96, 0x14, 0x00, 0x09, 0x7A, 0x01, 0x07, 0x00, 0x00, 0x00, 0x00, 0x07, 0x52,
0x04, 0x00, 0x00, 0x07, 0x02, 0x00, 0x00, 0x00, 0x08, 0x39, 0x3D, 0x4F, 0x96, 0x0F, 0x00, 0x07,
- 0x65, 0x00, 0x00, 0x00, 0x09, 0x79, 0x01, 0x07, 0x52, 0x04, 0x00, 0x00, 0x08, 0x04, 0x1C, 0x96,
- 0x03, 0x00, 0x09, 0x20, 0x01, 0x4E, 0x96, 0x03, 0x00, 0x09, 0x78, 0x01, 0x4E, 0x96, 0x02, 0x00,
+ 0x65, 0x00, 0x00, 0x00, 0x09, 0x7B, 0x01, 0x07, 0x52, 0x04, 0x00, 0x00, 0x08, 0x04, 0x1C, 0x96,
+ 0x03, 0x00, 0x09, 0x22, 0x01, 0x4E, 0x96, 0x03, 0x00, 0x09, 0x7A, 0x01, 0x4E, 0x96, 0x02, 0x00,
0x08, 0x0D, 0x4E, 0x96, 0x07, 0x00, 0x07, 0x04, 0x00, 0x00, 0x00, 0x08, 0x03, 0x3D, 0x17, 0x96,
0x02, 0x00, 0x08, 0x04, 0x1C, 0x96, 0x07, 0x00, 0x08, 0xD1, 0x07, 0x00, 0x00, 0x00, 0x00, 0x43,
0x4F, 0x96, 0x02, 0x00, 0x08, 0x04, 0x1C, 0x96, 0x02, 0x00, 0x08, 0xD1, 0x4E, 0x96, 0x14, 0x00,
- 0x09, 0x7A, 0x01, 0x07, 0x00, 0x00, 0x00, 0x00, 0x07, 0x4C, 0x04, 0x00, 0x00, 0x07, 0x02, 0x00,
+ 0x09, 0x7C, 0x01, 0x07, 0x00, 0x00, 0x00, 0x00, 0x07, 0x4C, 0x04, 0x00, 0x00, 0x07, 0x02, 0x00,
0x00, 0x00, 0x08, 0x39, 0x3D, 0x4F, 0x96, 0x02, 0x00, 0x08, 0x04, 0x1C, 0x96, 0x02, 0x00, 0x08,
- 0xD1, 0x4E, 0x96, 0x03, 0x00, 0x09, 0x7A, 0x01, 0x4E, 0x96, 0x08, 0x00, 0x09, 0x7B, 0x01, 0x07,
+ 0xD1, 0x4E, 0x96, 0x03, 0x00, 0x09, 0x7C, 0x01, 0x4E, 0x96, 0x08, 0x00, 0x09, 0x7D, 0x01, 0x07,
0x01, 0x00, 0x00, 0x00, 0x4F, 0x96, 0x02, 0x00, 0x08, 0x04, 0x1C, 0x96, 0x02, 0x00, 0x08, 0xD1,
- 0x4E, 0x96, 0x03, 0x00, 0x09, 0x7A, 0x01, 0x4E, 0x96, 0x08, 0x00, 0x09, 0x7C, 0x01, 0x07, 0x02,
+ 0x4E, 0x96, 0x03, 0x00, 0x09, 0x7C, 0x01, 0x4E, 0x96, 0x08, 0x00, 0x09, 0x7E, 0x01, 0x07, 0x02,
0x00, 0x00, 0x00, 0x4F, 0x96, 0x02, 0x00, 0x08, 0x04, 0x1C, 0x96, 0x02, 0x00, 0x08, 0xD1, 0x4E,
- 0x96, 0x03, 0x00, 0x09, 0x7A, 0x01, 0x4E, 0x96, 0x08, 0x00, 0x09, 0x7D, 0x01, 0x07, 0x04, 0x00,
+ 0x96, 0x03, 0x00, 0x09, 0x7C, 0x01, 0x4E, 0x96, 0x08, 0x00, 0x09, 0x7F, 0x01, 0x07, 0x04, 0x00,
0x00, 0x00, 0x4F, 0x96, 0x02, 0x00, 0x08, 0x04, 0x1C, 0x96, 0x02, 0x00, 0x08, 0xD1, 0x4E, 0x96,
- 0x03, 0x00, 0x09, 0x7A, 0x01, 0x4E, 0x96, 0x08, 0x00, 0x09, 0x7E, 0x01, 0x07, 0x08, 0x00, 0x00,
- 0x00, 0x4F, 0x96, 0x0F, 0x00, 0x07, 0x28, 0x00, 0x00, 0x00, 0x09, 0x7F, 0x01, 0x07, 0x4C, 0x04,
- 0x00, 0x00, 0x08, 0x04, 0x1C, 0x96, 0x02, 0x00, 0x08, 0xD1, 0x4E, 0x96, 0x03, 0x00, 0x09, 0x7A,
+ 0x03, 0x00, 0x09, 0x7C, 0x01, 0x4E, 0x96, 0x08, 0x00, 0x09, 0x80, 0x01, 0x07, 0x08, 0x00, 0x00,
+ 0x00, 0x4F, 0x96, 0x0F, 0x00, 0x07, 0x28, 0x00, 0x00, 0x00, 0x09, 0x81, 0x01, 0x07, 0x4C, 0x04,
+ 0x00, 0x00, 0x08, 0x04, 0x1C, 0x96, 0x02, 0x00, 0x08, 0xD1, 0x4E, 0x96, 0x03, 0x00, 0x09, 0x7C,
0x01, 0x4E, 0x96, 0x07, 0x00, 0x07, 0x04, 0x00, 0x00, 0x00, 0x08, 0x02, 0x3D, 0x17, 0x96, 0x0F,
- 0x00, 0x07, 0x01, 0x00, 0x00, 0x00, 0x09, 0x80, 0x01, 0x07, 0x4C, 0x04, 0x00, 0x00, 0x08, 0x04,
- 0x1C, 0x96, 0x02, 0x00, 0x08, 0xD1, 0x4E, 0x96, 0x03, 0x00, 0x09, 0x7A, 0x01, 0x4E, 0x96, 0x02,
+ 0x00, 0x07, 0x01, 0x00, 0x00, 0x00, 0x09, 0x82, 0x01, 0x07, 0x4C, 0x04, 0x00, 0x00, 0x08, 0x04,
+ 0x1C, 0x96, 0x02, 0x00, 0x08, 0xD1, 0x4E, 0x96, 0x03, 0x00, 0x09, 0x7C, 0x01, 0x4E, 0x96, 0x02,
0x00, 0x08, 0x0D, 0x4E, 0x96, 0x07, 0x00, 0x07, 0x04, 0x00, 0x00, 0x00, 0x08, 0x02, 0x3D, 0x17,
- 0x96, 0x0F, 0x00, 0x07, 0x64, 0x00, 0x00, 0x00, 0x09, 0x81, 0x01, 0x07, 0x4C, 0x04, 0x00, 0x00,
- 0x08, 0x04, 0x1C, 0x96, 0x02, 0x00, 0x08, 0xD1, 0x4E, 0x96, 0x03, 0x00, 0x09, 0x7A, 0x01, 0x4E,
+ 0x96, 0x0F, 0x00, 0x07, 0x64, 0x00, 0x00, 0x00, 0x09, 0x83, 0x01, 0x07, 0x4C, 0x04, 0x00, 0x00,
+ 0x08, 0x04, 0x1C, 0x96, 0x02, 0x00, 0x08, 0xD1, 0x4E, 0x96, 0x03, 0x00, 0x09, 0x7C, 0x01, 0x4E,
0x96, 0x02, 0x00, 0x08, 0x0D, 0x4E, 0x96, 0x07, 0x00, 0x07, 0x04, 0x00, 0x00, 0x00, 0x08, 0x03,
- 0x3D, 0x17, 0x96, 0x02, 0x00, 0x08, 0x04, 0x1C, 0x96, 0x08, 0x00, 0x09, 0x82, 0x01, 0x07, 0x00,
- 0x00, 0x00, 0x00, 0x43, 0x4F, 0x96, 0x02, 0x00, 0x08, 0x04, 0x1C, 0x96, 0x03, 0x00, 0x09, 0x82,
- 0x01, 0x4E, 0x96, 0x03, 0x00, 0x09, 0x83, 0x01, 0x8E, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x4F, 0x96, 0x02, 0x00, 0x08, 0x04, 0x1C, 0x96, 0x03, 0x00, 0x09, 0x82, 0x01,
- 0x4E, 0x96, 0x03, 0x00, 0x09, 0x83, 0x01, 0x4E, 0x96, 0x03, 0x00, 0x09, 0x84, 0x01, 0x8E, 0x20,
+ 0x3D, 0x17, 0x96, 0x02, 0x00, 0x08, 0x04, 0x1C, 0x96, 0x08, 0x00, 0x09, 0x84, 0x01, 0x07, 0x00,
+ 0x00, 0x00, 0x00, 0x43, 0x4F, 0x96, 0x02, 0x00, 0x08, 0x04, 0x1C, 0x96, 0x03, 0x00, 0x09, 0x84,
+ 0x01, 0x4E, 0x96, 0x03, 0x00, 0x09, 0x85, 0x01, 0x8E, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x4F, 0x96, 0x02, 0x00, 0x08, 0x04, 0x1C, 0x96, 0x03, 0x00, 0x09, 0x84, 0x01,
+ 0x4E, 0x96, 0x03, 0x00, 0x09, 0x85, 0x01, 0x4E, 0x96, 0x03, 0x00, 0x09, 0x86, 0x01, 0x8E, 0x20,
0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6E, 0x61, 0x6D, 0x65, 0x00, 0x00, 0x69, 0x6E,
0x73, 0x74, 0x61, 0x6E, 0x63, 0x65, 0x00, 0x00, 0x6D, 0x65, 0x74, 0x68, 0x6F, 0x64, 0x00, 0xC7,
0x00, 0x96, 0x02, 0x00, 0x08, 0x9A, 0x1C, 0x12, 0x4C, 0x9D, 0x02, 0x00, 0x1D, 0x00, 0x17, 0x96,
- 0x02, 0x00, 0x08, 0x04, 0x1C, 0x96, 0x03, 0x00, 0x09, 0x82, 0x01, 0x4E, 0x96, 0x03, 0x00, 0x09,
- 0x83, 0x01, 0x4E, 0x96, 0x03, 0x00, 0x09, 0x85, 0x01, 0x4E, 0x12, 0x12, 0x9D, 0x02, 0x00, 0x06,
+ 0x02, 0x00, 0x08, 0x04, 0x1C, 0x96, 0x03, 0x00, 0x09, 0x84, 0x01, 0x4E, 0x96, 0x03, 0x00, 0x09,
+ 0x85, 0x01, 0x4E, 0x96, 0x03, 0x00, 0x09, 0x87, 0x01, 0x4E, 0x12, 0x12, 0x9D, 0x02, 0x00, 0x06,
0x00, 0x96, 0x02, 0x00, 0x05, 0x00, 0x3E, 0x96, 0x07, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 0x08,
- 0x04, 0x1C, 0x96, 0x03, 0x00, 0x09, 0x82, 0x01, 0x4E, 0x96, 0x03, 0x00, 0x09, 0x83, 0x01, 0x4E,
- 0x96, 0x03, 0x00, 0x09, 0x86, 0x01, 0x52, 0x17, 0x8E, 0x11, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
+ 0x04, 0x1C, 0x96, 0x03, 0x00, 0x09, 0x84, 0x01, 0x4E, 0x96, 0x03, 0x00, 0x09, 0x85, 0x01, 0x4E,
+ 0x96, 0x03, 0x00, 0x09, 0x88, 0x01, 0x52, 0x17, 0x8E, 0x11, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
0x00, 0x00, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x00, 0x35, 0x00, 0x96, 0x03, 0x00, 0x09,
- 0x88, 0x01, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x9A, 0x1C, 0x96, 0x03, 0x00, 0x09, 0x87, 0x01, 0x1C,
- 0x96, 0x07, 0x00, 0x07, 0x03, 0x00, 0x00, 0x00, 0x08, 0x04, 0x1C, 0x96, 0x03, 0x00, 0x09, 0x82,
- 0x01, 0x4E, 0x96, 0x03, 0x00, 0x09, 0x83, 0x01, 0x4E, 0x96, 0x03, 0x00, 0x09, 0x89, 0x01, 0x52,
+ 0x8A, 0x01, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x9A, 0x1C, 0x96, 0x03, 0x00, 0x09, 0x89, 0x01, 0x1C,
+ 0x96, 0x07, 0x00, 0x07, 0x03, 0x00, 0x00, 0x00, 0x08, 0x04, 0x1C, 0x96, 0x03, 0x00, 0x09, 0x84,
+ 0x01, 0x4E, 0x96, 0x03, 0x00, 0x09, 0x85, 0x01, 0x4E, 0x96, 0x03, 0x00, 0x09, 0x8B, 0x01, 0x52,
0x3E, 0x96, 0x02, 0x00, 0x08, 0x0E, 0x1C, 0x96, 0x07, 0x00, 0x07, 0x02, 0x00, 0x00, 0x00, 0x08,
- 0x04, 0x1C, 0x96, 0x03, 0x00, 0x09, 0x82, 0x01, 0x4E, 0x96, 0x03, 0x00, 0x09, 0x83, 0x01, 0x4E,
- 0x96, 0x03, 0x00, 0x09, 0x8A, 0x01, 0x52, 0x3E, 0x4F, 0x96, 0x02, 0x00, 0x08, 0x04, 0x1C, 0x96,
- 0x03, 0x00, 0x09, 0x82, 0x01, 0x4E, 0x96, 0x03, 0x00, 0x09, 0x83, 0x01, 0x4E, 0x96, 0x03, 0x00,
- 0x09, 0x8B, 0x01, 0x8E, 0x0E, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6E, 0x61, 0x6D,
- 0x65, 0x00, 0xF6, 0x02, 0x96, 0x02, 0x00, 0x08, 0x04, 0x1C, 0x96, 0x03, 0x00, 0x09, 0x82, 0x01,
- 0x4E, 0x96, 0x03, 0x00, 0x09, 0x83, 0x01, 0x4E, 0x96, 0x03, 0x00, 0x09, 0x85, 0x01, 0x4E, 0x12,
+ 0x04, 0x1C, 0x96, 0x03, 0x00, 0x09, 0x84, 0x01, 0x4E, 0x96, 0x03, 0x00, 0x09, 0x85, 0x01, 0x4E,
+ 0x96, 0x03, 0x00, 0x09, 0x8C, 0x01, 0x52, 0x3E, 0x4F, 0x96, 0x02, 0x00, 0x08, 0x04, 0x1C, 0x96,
+ 0x03, 0x00, 0x09, 0x84, 0x01, 0x4E, 0x96, 0x03, 0x00, 0x09, 0x85, 0x01, 0x4E, 0x96, 0x03, 0x00,
+ 0x09, 0x8D, 0x01, 0x8E, 0x0E, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6E, 0x61, 0x6D,
+ 0x65, 0x00, 0xF6, 0x02, 0x96, 0x02, 0x00, 0x08, 0x04, 0x1C, 0x96, 0x03, 0x00, 0x09, 0x84, 0x01,
+ 0x4E, 0x96, 0x03, 0x00, 0x09, 0x85, 0x01, 0x4E, 0x96, 0x03, 0x00, 0x09, 0x87, 0x01, 0x4E, 0x12,
0x12, 0x9D, 0x02, 0x00, 0x05, 0x00, 0x96, 0x01, 0x00, 0x02, 0x3E, 0x96, 0x07, 0x00, 0x07, 0x00,
- 0x00, 0x00, 0x00, 0x08, 0x04, 0x1C, 0x96, 0x03, 0x00, 0x09, 0x82, 0x01, 0x4E, 0x96, 0x03, 0x00,
- 0x09, 0x83, 0x01, 0x4E, 0x96, 0x03, 0x00, 0x09, 0x86, 0x01, 0x52, 0x17, 0x96, 0x06, 0x00, 0x09,
- 0x88, 0x01, 0x09, 0x8C, 0x01, 0x3C, 0x96, 0x0A, 0x00, 0x09, 0x8E, 0x01, 0x07, 0x00, 0x00, 0x00,
- 0x00, 0x08, 0x04, 0x1C, 0x96, 0x03, 0x00, 0x09, 0x82, 0x01, 0x4E, 0x96, 0x03, 0x00, 0x09, 0x83,
- 0x01, 0x4E, 0x96, 0x03, 0x00, 0x09, 0x8D, 0x01, 0x52, 0x3C, 0x96, 0x03, 0x00, 0x09, 0x8E, 0x01,
+ 0x00, 0x00, 0x00, 0x08, 0x04, 0x1C, 0x96, 0x03, 0x00, 0x09, 0x84, 0x01, 0x4E, 0x96, 0x03, 0x00,
+ 0x09, 0x85, 0x01, 0x4E, 0x96, 0x03, 0x00, 0x09, 0x88, 0x01, 0x52, 0x17, 0x96, 0x06, 0x00, 0x09,
+ 0x8A, 0x01, 0x09, 0x8E, 0x01, 0x3C, 0x96, 0x0A, 0x00, 0x09, 0x90, 0x01, 0x07, 0x00, 0x00, 0x00,
+ 0x00, 0x08, 0x04, 0x1C, 0x96, 0x03, 0x00, 0x09, 0x84, 0x01, 0x4E, 0x96, 0x03, 0x00, 0x09, 0x85,
+ 0x01, 0x4E, 0x96, 0x03, 0x00, 0x09, 0x8F, 0x01, 0x52, 0x3C, 0x96, 0x03, 0x00, 0x09, 0x90, 0x01,
0x1C, 0x96, 0x01, 0x00, 0x02, 0x49, 0x12, 0x12, 0x9D, 0x02, 0x00, 0x18, 0x00, 0x96, 0x03, 0x00,
- 0x09, 0x88, 0x01, 0x4C, 0x1C, 0x96, 0x03, 0x00, 0x09, 0x8E, 0x01, 0x1C, 0x96, 0x03, 0x00, 0x09,
- 0x8F, 0x01, 0x47, 0x47, 0x1D, 0x96, 0x03, 0x00, 0x09, 0x88, 0x01, 0x4C, 0x1C, 0x96, 0x05, 0x00,
- 0x09, 0x90, 0x01, 0x08, 0x0E, 0x1C, 0x47, 0x96, 0x03, 0x00, 0x09, 0x91, 0x01, 0x47, 0x47, 0x1D,
+ 0x09, 0x8A, 0x01, 0x4C, 0x1C, 0x96, 0x03, 0x00, 0x09, 0x90, 0x01, 0x1C, 0x96, 0x03, 0x00, 0x09,
+ 0x91, 0x01, 0x47, 0x47, 0x1D, 0x96, 0x03, 0x00, 0x09, 0x8A, 0x01, 0x4C, 0x1C, 0x96, 0x05, 0x00,
+ 0x09, 0x92, 0x01, 0x08, 0x0E, 0x1C, 0x47, 0x96, 0x03, 0x00, 0x09, 0x93, 0x01, 0x47, 0x47, 0x1D,
0x96, 0x07, 0x00, 0x08, 0x18, 0x07, 0x01, 0x00, 0x00, 0x00, 0x3C, 0x99, 0x02, 0x00, 0x09, 0x00,
0x96, 0x02, 0x00, 0x08, 0x18, 0x4C, 0x1C, 0x50, 0x1D, 0x96, 0x02, 0x00, 0x08, 0x18, 0x1C, 0x96,
- 0x03, 0x00, 0x09, 0x22, 0x01, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x19, 0x4E, 0x48, 0x12, 0x9D, 0x02,
+ 0x03, 0x00, 0x09, 0x24, 0x01, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x19, 0x4E, 0x48, 0x12, 0x9D, 0x02,
0x00, 0x5F, 0x00, 0x96, 0x07, 0x00, 0x07, 0x01, 0x00, 0x00, 0x00, 0x08, 0x18, 0x1C, 0x48, 0x12,
- 0x9D, 0x02, 0x00, 0x10, 0x00, 0x96, 0x03, 0x00, 0x09, 0x88, 0x01, 0x4C, 0x1C, 0x96, 0x03, 0x00,
- 0x09, 0x92, 0x01, 0x47, 0x1D, 0x96, 0x03, 0x00, 0x09, 0x88, 0x01, 0x4C, 0x1C, 0x96, 0x03, 0x00,
- 0x09, 0x22, 0x01, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x18, 0x1C, 0x4E, 0x96, 0x07, 0x00, 0x07, 0x01,
- 0x00, 0x00, 0x00, 0x08, 0x04, 0x1C, 0x96, 0x03, 0x00, 0x09, 0x82, 0x01, 0x4E, 0x96, 0x03, 0x00,
- 0x09, 0x83, 0x01, 0x4E, 0x96, 0x03, 0x00, 0x09, 0x93, 0x01, 0x52, 0x47, 0x1D, 0x99, 0x02, 0x00,
- 0x7E, 0xFF, 0x96, 0x03, 0x00, 0x09, 0x88, 0x01, 0x4C, 0x1C, 0x96, 0x03, 0x00, 0x09, 0x94, 0x01,
- 0x47, 0x1D, 0x96, 0x03, 0x00, 0x09, 0x8E, 0x01, 0x1C, 0x96, 0x01, 0x00, 0x02, 0x49, 0x12, 0x12,
- 0x9D, 0x02, 0x00, 0x10, 0x00, 0x96, 0x03, 0x00, 0x09, 0x88, 0x01, 0x4C, 0x1C, 0x96, 0x03, 0x00,
- 0x09, 0x39, 0x01, 0x47, 0x1D, 0x96, 0x03, 0x00, 0x09, 0x88, 0x01, 0x4C, 0x1C, 0x96, 0x03, 0x00,
- 0x09, 0x95, 0x01, 0x47, 0x1D, 0x96, 0x03, 0x00, 0x09, 0x8E, 0x01, 0x1C, 0x96, 0x01, 0x00, 0x02,
- 0x49, 0x12, 0x9D, 0x02, 0x00, 0x15, 0x00, 0x96, 0x03, 0x00, 0x09, 0x88, 0x01, 0x4C, 0x1C, 0x96,
- 0x03, 0x00, 0x09, 0x97, 0x01, 0x47, 0x1D, 0x99, 0x02, 0x00, 0x18, 0x00, 0x96, 0x03, 0x00, 0x09,
- 0x88, 0x01, 0x4C, 0x1C, 0x96, 0x03, 0x00, 0x09, 0x8E, 0x01, 0x1C, 0x96, 0x03, 0x00, 0x09, 0x96,
- 0x01, 0x47, 0x47, 0x1D, 0x96, 0x05, 0x00, 0x08, 0xEA, 0x09, 0x88, 0x01, 0x1C, 0x96, 0x07, 0x00,
- 0x07, 0x01, 0x00, 0x00, 0x00, 0x08, 0x04, 0x1C, 0x96, 0x03, 0x00, 0x09, 0x82, 0x01, 0x4E, 0x96,
- 0x03, 0x00, 0x09, 0x83, 0x01, 0x4E, 0x96, 0x03, 0x00, 0x09, 0x98, 0x01, 0x52, 0x3C, 0x96, 0x02,
+ 0x9D, 0x02, 0x00, 0x10, 0x00, 0x96, 0x03, 0x00, 0x09, 0x8A, 0x01, 0x4C, 0x1C, 0x96, 0x03, 0x00,
+ 0x09, 0x94, 0x01, 0x47, 0x1D, 0x96, 0x03, 0x00, 0x09, 0x8A, 0x01, 0x4C, 0x1C, 0x96, 0x03, 0x00,
+ 0x09, 0x24, 0x01, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x18, 0x1C, 0x4E, 0x96, 0x07, 0x00, 0x07, 0x01,
+ 0x00, 0x00, 0x00, 0x08, 0x04, 0x1C, 0x96, 0x03, 0x00, 0x09, 0x84, 0x01, 0x4E, 0x96, 0x03, 0x00,
+ 0x09, 0x85, 0x01, 0x4E, 0x96, 0x03, 0x00, 0x09, 0x95, 0x01, 0x52, 0x47, 0x1D, 0x99, 0x02, 0x00,
+ 0x7E, 0xFF, 0x96, 0x03, 0x00, 0x09, 0x8A, 0x01, 0x4C, 0x1C, 0x96, 0x03, 0x00, 0x09, 0x96, 0x01,
+ 0x47, 0x1D, 0x96, 0x03, 0x00, 0x09, 0x90, 0x01, 0x1C, 0x96, 0x01, 0x00, 0x02, 0x49, 0x12, 0x12,
+ 0x9D, 0x02, 0x00, 0x10, 0x00, 0x96, 0x03, 0x00, 0x09, 0x8A, 0x01, 0x4C, 0x1C, 0x96, 0x03, 0x00,
+ 0x09, 0x3B, 0x01, 0x47, 0x1D, 0x96, 0x03, 0x00, 0x09, 0x8A, 0x01, 0x4C, 0x1C, 0x96, 0x03, 0x00,
+ 0x09, 0x97, 0x01, 0x47, 0x1D, 0x96, 0x03, 0x00, 0x09, 0x90, 0x01, 0x1C, 0x96, 0x01, 0x00, 0x02,
+ 0x49, 0x12, 0x9D, 0x02, 0x00, 0x15, 0x00, 0x96, 0x03, 0x00, 0x09, 0x8A, 0x01, 0x4C, 0x1C, 0x96,
+ 0x03, 0x00, 0x09, 0x99, 0x01, 0x47, 0x1D, 0x99, 0x02, 0x00, 0x18, 0x00, 0x96, 0x03, 0x00, 0x09,
+ 0x8A, 0x01, 0x4C, 0x1C, 0x96, 0x03, 0x00, 0x09, 0x90, 0x01, 0x1C, 0x96, 0x03, 0x00, 0x09, 0x98,
+ 0x01, 0x47, 0x47, 0x1D, 0x96, 0x05, 0x00, 0x08, 0xEA, 0x09, 0x8A, 0x01, 0x1C, 0x96, 0x07, 0x00,
+ 0x07, 0x01, 0x00, 0x00, 0x00, 0x08, 0x04, 0x1C, 0x96, 0x03, 0x00, 0x09, 0x84, 0x01, 0x4E, 0x96,
+ 0x03, 0x00, 0x09, 0x85, 0x01, 0x4E, 0x96, 0x03, 0x00, 0x09, 0x9A, 0x01, 0x52, 0x3C, 0x96, 0x02,
0x00, 0x08, 0xEA, 0x1C, 0x96, 0x01, 0x00, 0x02, 0x49, 0x12, 0x9D, 0x02, 0x00, 0x6E, 0x00, 0x96,
- 0x08, 0x00, 0x09, 0x88, 0x01, 0x09, 0x99, 0x01, 0x08, 0x0E, 0x1C, 0x47, 0x96, 0x03, 0x00, 0x09,
- 0x9A, 0x01, 0x47, 0x96, 0x03, 0x00, 0x09, 0x22, 0x01, 0x1C, 0x96, 0x07, 0x00, 0x07, 0x01, 0x00,
- 0x00, 0x00, 0x08, 0x04, 0x1C, 0x96, 0x03, 0x00, 0x09, 0x82, 0x01, 0x4E, 0x96, 0x03, 0x00, 0x09,
- 0x83, 0x01, 0x4E, 0x96, 0x03, 0x00, 0x09, 0x9B, 0x01, 0x52, 0x47, 0x96, 0x03, 0x00, 0x09, 0x9C,
- 0x01, 0x47, 0x1D, 0x96, 0x05, 0x00, 0x08, 0xEA, 0x09, 0x88, 0x01, 0x1C, 0x96, 0x07, 0x00, 0x07,
- 0x01, 0x00, 0x00, 0x00, 0x08, 0x04, 0x1C, 0x96, 0x03, 0x00, 0x09, 0x82, 0x01, 0x4E, 0x96, 0x03,
- 0x00, 0x09, 0x83, 0x01, 0x4E, 0x96, 0x03, 0x00, 0x09, 0x9D, 0x01, 0x52, 0x1D, 0x96, 0x02, 0x00,
+ 0x08, 0x00, 0x09, 0x8A, 0x01, 0x09, 0x9B, 0x01, 0x08, 0x0E, 0x1C, 0x47, 0x96, 0x03, 0x00, 0x09,
+ 0x9C, 0x01, 0x47, 0x96, 0x03, 0x00, 0x09, 0x24, 0x01, 0x1C, 0x96, 0x07, 0x00, 0x07, 0x01, 0x00,
+ 0x00, 0x00, 0x08, 0x04, 0x1C, 0x96, 0x03, 0x00, 0x09, 0x84, 0x01, 0x4E, 0x96, 0x03, 0x00, 0x09,
+ 0x85, 0x01, 0x4E, 0x96, 0x03, 0x00, 0x09, 0x9D, 0x01, 0x52, 0x47, 0x96, 0x03, 0x00, 0x09, 0x9E,
+ 0x01, 0x47, 0x1D, 0x96, 0x05, 0x00, 0x08, 0xEA, 0x09, 0x8A, 0x01, 0x1C, 0x96, 0x07, 0x00, 0x07,
+ 0x01, 0x00, 0x00, 0x00, 0x08, 0x04, 0x1C, 0x96, 0x03, 0x00, 0x09, 0x84, 0x01, 0x4E, 0x96, 0x03,
+ 0x00, 0x09, 0x85, 0x01, 0x4E, 0x96, 0x03, 0x00, 0x09, 0x9F, 0x01, 0x52, 0x1D, 0x96, 0x02, 0x00,
0x08, 0xEA, 0x1C, 0x96, 0x01, 0x00, 0x02, 0x49, 0x12, 0x9D, 0x02, 0x00, 0x05, 0x00, 0x96, 0x01,
- 0x00, 0x02, 0x3E, 0x96, 0x0A, 0x00, 0x09, 0x9E, 0x01, 0x07, 0x00, 0x00, 0x00, 0x00, 0x08, 0x67,
- 0x40, 0x3C, 0x96, 0x03, 0x00, 0x09, 0x9E, 0x01, 0x1C, 0x96, 0x05, 0x00, 0x09, 0x9F, 0x01, 0x05,
+ 0x00, 0x02, 0x3E, 0x96, 0x0A, 0x00, 0x09, 0xA0, 0x01, 0x07, 0x00, 0x00, 0x00, 0x00, 0x08, 0x67,
+ 0x40, 0x3C, 0x96, 0x03, 0x00, 0x09, 0xA0, 0x01, 0x1C, 0x96, 0x05, 0x00, 0x09, 0xA1, 0x01, 0x05,
0x01, 0x4F, 0x96, 0x02, 0x00, 0x08, 0xEA, 0x1C, 0x96, 0x08, 0x00, 0x07, 0x01, 0x00, 0x00, 0x00,
- 0x09, 0x9E, 0x01, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x6C, 0x52, 0x17, 0x96, 0x03, 0x00, 0x09, 0x9E,
- 0x01, 0x1C, 0x96, 0x03, 0x00, 0x09, 0xA0, 0x01, 0x4E, 0x96, 0x07, 0x00, 0x07, 0x01, 0x00, 0x00,
- 0x00, 0x08, 0x04, 0x1C, 0x96, 0x03, 0x00, 0x09, 0x82, 0x01, 0x4E, 0x96, 0x03, 0x00, 0x09, 0x83,
- 0x01, 0x4E, 0x96, 0x03, 0x00, 0x09, 0xA1, 0x01, 0x52, 0x3E, 0x4F, 0x96, 0x02, 0x00, 0x08, 0x04,
- 0x1C, 0x96, 0x03, 0x00, 0x09, 0x82, 0x01, 0x4E, 0x96, 0x03, 0x00, 0x09, 0x83, 0x01, 0x4E, 0x96,
- 0x03, 0x00, 0x09, 0x89, 0x01, 0x8E, 0x23, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x69,
+ 0x09, 0xA0, 0x01, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x6C, 0x52, 0x17, 0x96, 0x03, 0x00, 0x09, 0xA0,
+ 0x01, 0x1C, 0x96, 0x03, 0x00, 0x09, 0xA2, 0x01, 0x4E, 0x96, 0x07, 0x00, 0x07, 0x01, 0x00, 0x00,
+ 0x00, 0x08, 0x04, 0x1C, 0x96, 0x03, 0x00, 0x09, 0x84, 0x01, 0x4E, 0x96, 0x03, 0x00, 0x09, 0x85,
+ 0x01, 0x4E, 0x96, 0x03, 0x00, 0x09, 0xA3, 0x01, 0x52, 0x3E, 0x4F, 0x96, 0x02, 0x00, 0x08, 0x04,
+ 0x1C, 0x96, 0x03, 0x00, 0x09, 0x84, 0x01, 0x4E, 0x96, 0x03, 0x00, 0x09, 0x85, 0x01, 0x4E, 0x96,
+ 0x03, 0x00, 0x09, 0x8B, 0x01, 0x8E, 0x23, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x69,
0x6E, 0x73, 0x74, 0x61, 0x6E, 0x63, 0x65, 0x00, 0x00, 0x6D, 0x65, 0x74, 0x68, 0x6F, 0x64, 0x00,
- 0x00, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x00, 0x9A, 0x01, 0x96, 0x0A, 0x00, 0x09, 0x9E,
- 0x01, 0x07, 0x00, 0x00, 0x00, 0x00, 0x08, 0x67, 0x40, 0x3C, 0x96, 0x03, 0x00, 0x09, 0x9E, 0x01,
- 0x1C, 0x96, 0x05, 0x00, 0x09, 0x9F, 0x01, 0x05, 0x01, 0x4F, 0x96, 0x03, 0x00, 0x09, 0x88, 0x01,
- 0x1C, 0x96, 0x08, 0x00, 0x07, 0x01, 0x00, 0x00, 0x00, 0x09, 0x9E, 0x01, 0x1C, 0x96, 0x02, 0x00,
- 0x08, 0x6C, 0x52, 0x17, 0x96, 0x04, 0x00, 0x09, 0xA2, 0x01, 0x02, 0x3C, 0x96, 0x07, 0x00, 0x08,
+ 0x00, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x00, 0x9A, 0x01, 0x96, 0x0A, 0x00, 0x09, 0xA0,
+ 0x01, 0x07, 0x00, 0x00, 0x00, 0x00, 0x08, 0x67, 0x40, 0x3C, 0x96, 0x03, 0x00, 0x09, 0xA0, 0x01,
+ 0x1C, 0x96, 0x05, 0x00, 0x09, 0xA1, 0x01, 0x05, 0x01, 0x4F, 0x96, 0x03, 0x00, 0x09, 0x8A, 0x01,
+ 0x1C, 0x96, 0x08, 0x00, 0x07, 0x01, 0x00, 0x00, 0x00, 0x09, 0xA0, 0x01, 0x1C, 0x96, 0x02, 0x00,
+ 0x08, 0x6C, 0x52, 0x17, 0x96, 0x04, 0x00, 0x09, 0xA4, 0x01, 0x02, 0x3C, 0x96, 0x07, 0x00, 0x08,
0x18, 0x07, 0x00, 0x00, 0x00, 0x00, 0x3C, 0x99, 0x02, 0x00, 0x09, 0x00, 0x96, 0x02, 0x00, 0x08,
- 0x18, 0x4C, 0x1C, 0x50, 0x1D, 0x96, 0x02, 0x00, 0x08, 0x18, 0x1C, 0x96, 0x03, 0x00, 0x09, 0x9E,
- 0x01, 0x1C, 0x96, 0x03, 0x00, 0x09, 0xA0, 0x01, 0x4E, 0x96, 0x03, 0x00, 0x09, 0xA3, 0x01, 0x4E,
+ 0x18, 0x4C, 0x1C, 0x50, 0x1D, 0x96, 0x02, 0x00, 0x08, 0x18, 0x1C, 0x96, 0x03, 0x00, 0x09, 0xA0,
+ 0x01, 0x1C, 0x96, 0x03, 0x00, 0x09, 0xA2, 0x01, 0x4E, 0x96, 0x03, 0x00, 0x09, 0xA5, 0x01, 0x4E,
0x96, 0x02, 0x00, 0x08, 0x19, 0x4E, 0x48, 0x12, 0x9D, 0x02, 0x00, 0x5A, 0x00, 0x96, 0x03, 0x00,
- 0x09, 0x9E, 0x01, 0x1C, 0x96, 0x03, 0x00, 0x09, 0xA0, 0x01, 0x4E, 0x96, 0x03, 0x00, 0x09, 0xA3,
- 0x01, 0x4E, 0x96, 0x02, 0x00, 0x08, 0x18, 0x1C, 0x4E, 0x96, 0x03, 0x00, 0x09, 0xA4, 0x01, 0x4E,
- 0x96, 0x03, 0x00, 0x09, 0x22, 0x01, 0x49, 0x12, 0x9D, 0x02, 0x00, 0x25, 0x00, 0x96, 0x06, 0x00,
- 0x09, 0xA2, 0x01, 0x09, 0x9E, 0x01, 0x1C, 0x96, 0x03, 0x00, 0x09, 0xA0, 0x01, 0x4E, 0x96, 0x03,
- 0x00, 0x09, 0xA3, 0x01, 0x4E, 0x96, 0x02, 0x00, 0x08, 0x18, 0x1C, 0x4E, 0x1D, 0x99, 0x02, 0x00,
- 0x05, 0x00, 0x99, 0x02, 0x00, 0x75, 0xFF, 0x96, 0x05, 0x00, 0x08, 0xEA, 0x09, 0xA2, 0x01, 0x1C,
- 0x96, 0x07, 0x00, 0x07, 0x01, 0x00, 0x00, 0x00, 0x08, 0x04, 0x1C, 0x96, 0x03, 0x00, 0x09, 0x82,
- 0x01, 0x4E, 0x96, 0x03, 0x00, 0x09, 0x83, 0x01, 0x4E, 0x96, 0x03, 0x00, 0x09, 0xA5, 0x01, 0x52,
- 0x96, 0x03, 0x00, 0x09, 0x87, 0x01, 0x1C, 0x96, 0x07, 0x00, 0x07, 0x02, 0x00, 0x00, 0x00, 0x08,
- 0x9A, 0x1C, 0x96, 0x03, 0x00, 0x09, 0xA6, 0x01, 0x52, 0x3C, 0x96, 0x03, 0x00, 0x09, 0x9E, 0x01,
- 0x1C, 0x96, 0x03, 0x00, 0x09, 0xA0, 0x01, 0x4E, 0x96, 0x03, 0x00, 0x09, 0xA7, 0x01, 0x4E, 0x96,
- 0x03, 0x00, 0x09, 0xA8, 0x01, 0x4E, 0x96, 0x03, 0x00, 0x09, 0xA9, 0x01, 0x49, 0x9D, 0x02, 0x00,
+ 0x09, 0xA0, 0x01, 0x1C, 0x96, 0x03, 0x00, 0x09, 0xA2, 0x01, 0x4E, 0x96, 0x03, 0x00, 0x09, 0xA5,
+ 0x01, 0x4E, 0x96, 0x02, 0x00, 0x08, 0x18, 0x1C, 0x4E, 0x96, 0x03, 0x00, 0x09, 0xA6, 0x01, 0x4E,
+ 0x96, 0x03, 0x00, 0x09, 0x24, 0x01, 0x49, 0x12, 0x9D, 0x02, 0x00, 0x25, 0x00, 0x96, 0x06, 0x00,
+ 0x09, 0xA4, 0x01, 0x09, 0xA0, 0x01, 0x1C, 0x96, 0x03, 0x00, 0x09, 0xA2, 0x01, 0x4E, 0x96, 0x03,
+ 0x00, 0x09, 0xA5, 0x01, 0x4E, 0x96, 0x02, 0x00, 0x08, 0x18, 0x1C, 0x4E, 0x1D, 0x99, 0x02, 0x00,
+ 0x05, 0x00, 0x99, 0x02, 0x00, 0x75, 0xFF, 0x96, 0x05, 0x00, 0x08, 0xEA, 0x09, 0xA4, 0x01, 0x1C,
+ 0x96, 0x07, 0x00, 0x07, 0x01, 0x00, 0x00, 0x00, 0x08, 0x04, 0x1C, 0x96, 0x03, 0x00, 0x09, 0x84,
+ 0x01, 0x4E, 0x96, 0x03, 0x00, 0x09, 0x85, 0x01, 0x4E, 0x96, 0x03, 0x00, 0x09, 0xA7, 0x01, 0x52,
+ 0x96, 0x03, 0x00, 0x09, 0x89, 0x01, 0x1C, 0x96, 0x07, 0x00, 0x07, 0x02, 0x00, 0x00, 0x00, 0x08,
+ 0x9A, 0x1C, 0x96, 0x03, 0x00, 0x09, 0xA8, 0x01, 0x52, 0x3C, 0x96, 0x03, 0x00, 0x09, 0xA0, 0x01,
+ 0x1C, 0x96, 0x03, 0x00, 0x09, 0xA2, 0x01, 0x4E, 0x96, 0x03, 0x00, 0x09, 0xA9, 0x01, 0x4E, 0x96,
+ 0x03, 0x00, 0x09, 0xAA, 0x01, 0x4E, 0x96, 0x03, 0x00, 0x09, 0xAB, 0x01, 0x49, 0x9D, 0x02, 0x00,
0x2C, 0x00, 0x96, 0x02, 0x00, 0x08, 0xEA, 0x1C, 0x96, 0x07, 0x00, 0x07, 0x01, 0x00, 0x00, 0x00,
- 0x08, 0x04, 0x1C, 0x96, 0x03, 0x00, 0x09, 0x82, 0x01, 0x4E, 0x96, 0x03, 0x00, 0x09, 0x83, 0x01,
- 0x4E, 0x96, 0x03, 0x00, 0x09, 0xAA, 0x01, 0x52, 0x3E, 0x99, 0x02, 0x00, 0x27, 0x00, 0x96, 0x02,
+ 0x08, 0x04, 0x1C, 0x96, 0x03, 0x00, 0x09, 0x84, 0x01, 0x4E, 0x96, 0x03, 0x00, 0x09, 0x85, 0x01,
+ 0x4E, 0x96, 0x03, 0x00, 0x09, 0xAC, 0x01, 0x52, 0x3E, 0x99, 0x02, 0x00, 0x27, 0x00, 0x96, 0x02,
0x00, 0x08, 0xEA, 0x1C, 0x96, 0x07, 0x00, 0x07, 0x01, 0x00, 0x00, 0x00, 0x08, 0x04, 0x1C, 0x96,
- 0x03, 0x00, 0x09, 0x82, 0x01, 0x4E, 0x96, 0x03, 0x00, 0x09, 0x83, 0x01, 0x4E, 0x96, 0x03, 0x00,
- 0x09, 0x93, 0x01, 0x52, 0x3E, 0x4F, 0x96, 0x02, 0x00, 0x08, 0x04, 0x1C, 0x96, 0x03, 0x00, 0x09,
- 0x82, 0x01, 0x4E, 0x96, 0x03, 0x00, 0x09, 0x83, 0x01, 0x4E, 0x96, 0x03, 0x00, 0x09, 0xAB, 0x01,
+ 0x03, 0x00, 0x09, 0x84, 0x01, 0x4E, 0x96, 0x03, 0x00, 0x09, 0x85, 0x01, 0x4E, 0x96, 0x03, 0x00,
+ 0x09, 0x95, 0x01, 0x52, 0x3E, 0x4F, 0x96, 0x02, 0x00, 0x08, 0x04, 0x1C, 0x96, 0x03, 0x00, 0x09,
+ 0x84, 0x01, 0x4E, 0x96, 0x03, 0x00, 0x09, 0x85, 0x01, 0x4E, 0x96, 0x03, 0x00, 0x09, 0xAD, 0x01,
0x8E, 0x0F, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x61, 0x72, 0x72, 0x61, 0x79, 0x00,
- 0xA2, 0x00, 0x96, 0x06, 0x00, 0x09, 0xAD, 0x01, 0x09, 0xAC, 0x01, 0x3C, 0x96, 0x07, 0x00, 0x08,
+ 0xA2, 0x00, 0x96, 0x06, 0x00, 0x09, 0xAF, 0x01, 0x09, 0xAE, 0x01, 0x3C, 0x96, 0x07, 0x00, 0x08,
0x18, 0x07, 0x00, 0x00, 0x00, 0x00, 0x3C, 0x99, 0x02, 0x00, 0x09, 0x00, 0x96, 0x02, 0x00, 0x08,
- 0x18, 0x4C, 0x1C, 0x50, 0x1D, 0x96, 0x02, 0x00, 0x08, 0x18, 0x1C, 0x96, 0x03, 0x00, 0x09, 0xAE,
+ 0x18, 0x4C, 0x1C, 0x50, 0x1D, 0x96, 0x02, 0x00, 0x08, 0x18, 0x1C, 0x96, 0x03, 0x00, 0x09, 0xB0,
0x01, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x19, 0x4E, 0x48, 0x12, 0x9D, 0x02, 0x00, 0x56, 0x00, 0x96,
- 0x03, 0x00, 0x09, 0xAD, 0x01, 0x4C, 0x1C, 0x96, 0x05, 0x00, 0x09, 0xAF, 0x01, 0x08, 0x18, 0x1C,
- 0x47, 0x96, 0x03, 0x00, 0x09, 0xB0, 0x01, 0x47, 0x96, 0x03, 0x00, 0x09, 0xAE, 0x01, 0x1C, 0x96,
+ 0x03, 0x00, 0x09, 0xAF, 0x01, 0x4C, 0x1C, 0x96, 0x05, 0x00, 0x09, 0xB1, 0x01, 0x08, 0x18, 0x1C,
+ 0x47, 0x96, 0x03, 0x00, 0x09, 0xB2, 0x01, 0x47, 0x96, 0x03, 0x00, 0x09, 0xB0, 0x01, 0x1C, 0x96,
0x02, 0x00, 0x08, 0x18, 0x1C, 0x4E, 0x96, 0x07, 0x00, 0x07, 0x01, 0x00, 0x00, 0x00, 0x08, 0x04,
- 0x1C, 0x96, 0x03, 0x00, 0x09, 0x82, 0x01, 0x4E, 0x96, 0x03, 0x00, 0x09, 0x83, 0x01, 0x4E, 0x96,
- 0x03, 0x00, 0x09, 0xAA, 0x01, 0x52, 0x47, 0x96, 0x03, 0x00, 0x09, 0xB1, 0x01, 0x47, 0x47, 0x1D,
- 0x99, 0x02, 0x00, 0x87, 0xFF, 0x96, 0x03, 0x00, 0x09, 0xAD, 0x01, 0x1C, 0x96, 0x03, 0x00, 0x09,
- 0xB2, 0x01, 0x47, 0x3E, 0x4F, 0x96, 0x02, 0x00, 0x08, 0x04, 0x1C, 0x96, 0x03, 0x00, 0x09, 0x82,
- 0x01, 0x4E, 0x96, 0x03, 0x00, 0x09, 0x83, 0x01, 0x4E, 0x96, 0x03, 0x00, 0x09, 0x9B, 0x01, 0x8E,
+ 0x1C, 0x96, 0x03, 0x00, 0x09, 0x84, 0x01, 0x4E, 0x96, 0x03, 0x00, 0x09, 0x85, 0x01, 0x4E, 0x96,
+ 0x03, 0x00, 0x09, 0xAC, 0x01, 0x52, 0x47, 0x96, 0x03, 0x00, 0x09, 0xB3, 0x01, 0x47, 0x47, 0x1D,
+ 0x99, 0x02, 0x00, 0x87, 0xFF, 0x96, 0x03, 0x00, 0x09, 0xAF, 0x01, 0x1C, 0x96, 0x03, 0x00, 0x09,
+ 0xB4, 0x01, 0x47, 0x3E, 0x4F, 0x96, 0x02, 0x00, 0x08, 0x04, 0x1C, 0x96, 0x03, 0x00, 0x09, 0x84,
+ 0x01, 0x4E, 0x96, 0x03, 0x00, 0x09, 0x85, 0x01, 0x4E, 0x96, 0x03, 0x00, 0x09, 0x9D, 0x01, 0x8E,
0x0E, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x61, 0x72, 0x67, 0x73, 0x00, 0x89, 0x00,
- 0x96, 0x06, 0x00, 0x09, 0xAD, 0x01, 0x09, 0xB3, 0x01, 0x3C, 0x96, 0x07, 0x00, 0x08, 0x18, 0x07,
+ 0x96, 0x06, 0x00, 0x09, 0xAF, 0x01, 0x09, 0xB5, 0x01, 0x3C, 0x96, 0x07, 0x00, 0x08, 0x18, 0x07,
0x00, 0x00, 0x00, 0x00, 0x3C, 0x99, 0x02, 0x00, 0x09, 0x00, 0x96, 0x02, 0x00, 0x08, 0x18, 0x4C,
- 0x1C, 0x50, 0x1D, 0x96, 0x02, 0x00, 0x08, 0x18, 0x1C, 0x96, 0x03, 0x00, 0x09, 0xA2, 0x01, 0x1C,
+ 0x1C, 0x50, 0x1D, 0x96, 0x02, 0x00, 0x08, 0x18, 0x1C, 0x96, 0x03, 0x00, 0x09, 0xA4, 0x01, 0x1C,
0x96, 0x02, 0x00, 0x08, 0x19, 0x4E, 0x48, 0x12, 0x9D, 0x02, 0x00, 0x3D, 0x00, 0x96, 0x03, 0x00,
- 0x09, 0xAD, 0x01, 0x4C, 0x1C, 0x96, 0x03, 0x00, 0x09, 0xA2, 0x01, 0x1C, 0x96, 0x02, 0x00, 0x08,
+ 0x09, 0xAF, 0x01, 0x4C, 0x1C, 0x96, 0x03, 0x00, 0x09, 0xA4, 0x01, 0x1C, 0x96, 0x02, 0x00, 0x08,
0x18, 0x1C, 0x4E, 0x96, 0x07, 0x00, 0x07, 0x01, 0x00, 0x00, 0x00, 0x08, 0x04, 0x1C, 0x96, 0x03,
- 0x00, 0x09, 0x82, 0x01, 0x4E, 0x96, 0x03, 0x00, 0x09, 0x83, 0x01, 0x4E, 0x96, 0x03, 0x00, 0x09,
- 0xAA, 0x01, 0x52, 0x47, 0x1D, 0x99, 0x02, 0x00, 0xA0, 0xFF, 0x96, 0x03, 0x00, 0x09, 0xAD, 0x01,
- 0x1C, 0x96, 0x03, 0x00, 0x09, 0xB4, 0x01, 0x47, 0x3E, 0x4F, 0x96, 0x02, 0x00, 0x08, 0x04, 0x1C,
- 0x96, 0x03, 0x00, 0x09, 0x82, 0x01, 0x4E, 0x96, 0x03, 0x00, 0x09, 0x83, 0x01, 0x4E, 0x96, 0x03,
- 0x00, 0x09, 0xB5, 0x01, 0x8E, 0x0D, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6F, 0x62,
- 0x6A, 0x00, 0x8C, 0x00, 0x96, 0x06, 0x00, 0x09, 0xAD, 0x01, 0x09, 0xB6, 0x01, 0x3C, 0x96, 0x03,
- 0x00, 0x09, 0xB7, 0x01, 0x46, 0x87, 0x01, 0x00, 0x00, 0x96, 0x01, 0x00, 0x02, 0x49, 0x9D, 0x02,
- 0x00, 0x5E, 0x00, 0x96, 0x04, 0x00, 0x08, 0xBC, 0x04, 0x00, 0x3C, 0x96, 0x03, 0x00, 0x09, 0xAD,
- 0x01, 0x4C, 0x1C, 0x96, 0x05, 0x00, 0x09, 0xAF, 0x01, 0x08, 0xBC, 0x1C, 0x47, 0x96, 0x03, 0x00,
- 0x09, 0xB0, 0x01, 0x47, 0x96, 0x03, 0x00, 0x09, 0xB7, 0x01, 0x1C, 0x96, 0x02, 0x00, 0x08, 0xBC,
+ 0x00, 0x09, 0x84, 0x01, 0x4E, 0x96, 0x03, 0x00, 0x09, 0x85, 0x01, 0x4E, 0x96, 0x03, 0x00, 0x09,
+ 0xAC, 0x01, 0x52, 0x47, 0x1D, 0x99, 0x02, 0x00, 0xA0, 0xFF, 0x96, 0x03, 0x00, 0x09, 0xAF, 0x01,
+ 0x1C, 0x96, 0x03, 0x00, 0x09, 0xB6, 0x01, 0x47, 0x3E, 0x4F, 0x96, 0x02, 0x00, 0x08, 0x04, 0x1C,
+ 0x96, 0x03, 0x00, 0x09, 0x84, 0x01, 0x4E, 0x96, 0x03, 0x00, 0x09, 0x85, 0x01, 0x4E, 0x96, 0x03,
+ 0x00, 0x09, 0xB7, 0x01, 0x8E, 0x0D, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6F, 0x62,
+ 0x6A, 0x00, 0x8C, 0x00, 0x96, 0x06, 0x00, 0x09, 0xAF, 0x01, 0x09, 0xB8, 0x01, 0x3C, 0x96, 0x03,
+ 0x00, 0x09, 0xB9, 0x01, 0x46, 0x87, 0x01, 0x00, 0x00, 0x96, 0x01, 0x00, 0x02, 0x49, 0x9D, 0x02,
+ 0x00, 0x5E, 0x00, 0x96, 0x04, 0x00, 0x08, 0xBC, 0x04, 0x00, 0x3C, 0x96, 0x03, 0x00, 0x09, 0xAF,
+ 0x01, 0x4C, 0x1C, 0x96, 0x05, 0x00, 0x09, 0xB1, 0x01, 0x08, 0xBC, 0x1C, 0x47, 0x96, 0x03, 0x00,
+ 0x09, 0xB2, 0x01, 0x47, 0x96, 0x03, 0x00, 0x09, 0xB9, 0x01, 0x1C, 0x96, 0x02, 0x00, 0x08, 0xBC,
0x1C, 0x4E, 0x96, 0x07, 0x00, 0x07, 0x01, 0x00, 0x00, 0x00, 0x08, 0x04, 0x1C, 0x96, 0x03, 0x00,
- 0x09, 0x82, 0x01, 0x4E, 0x96, 0x03, 0x00, 0x09, 0x83, 0x01, 0x4E, 0x96, 0x03, 0x00, 0x09, 0xAA,
- 0x01, 0x52, 0x47, 0x96, 0x03, 0x00, 0x09, 0xB1, 0x01, 0x47, 0x47, 0x1D, 0x99, 0x02, 0x00, 0x94,
- 0xFF, 0x96, 0x03, 0x00, 0x09, 0xAD, 0x01, 0x1C, 0x96, 0x03, 0x00, 0x09, 0xB8, 0x01, 0x47, 0x3E,
- 0x4F, 0x96, 0x02, 0x00, 0x08, 0x04, 0x1C, 0x96, 0x03, 0x00, 0x09, 0x82, 0x01, 0x4E, 0x96, 0x03,
- 0x00, 0x09, 0x83, 0x01, 0x4E, 0x96, 0x03, 0x00, 0x09, 0xAA, 0x01, 0x8E, 0x0F, 0x00, 0x00, 0x01,
+ 0x09, 0x84, 0x01, 0x4E, 0x96, 0x03, 0x00, 0x09, 0x85, 0x01, 0x4E, 0x96, 0x03, 0x00, 0x09, 0xAC,
+ 0x01, 0x52, 0x47, 0x96, 0x03, 0x00, 0x09, 0xB3, 0x01, 0x47, 0x47, 0x1D, 0x99, 0x02, 0x00, 0x94,
+ 0xFF, 0x96, 0x03, 0x00, 0x09, 0xAF, 0x01, 0x1C, 0x96, 0x03, 0x00, 0x09, 0xBA, 0x01, 0x47, 0x3E,
+ 0x4F, 0x96, 0x02, 0x00, 0x08, 0x04, 0x1C, 0x96, 0x03, 0x00, 0x09, 0x84, 0x01, 0x4E, 0x96, 0x03,
+ 0x00, 0x09, 0x85, 0x01, 0x4E, 0x96, 0x03, 0x00, 0x09, 0xAC, 0x01, 0x8E, 0x0F, 0x00, 0x00, 0x01,
0x00, 0x00, 0x00, 0x00, 0x00, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x00, 0x7A, 0x01, 0x96, 0x05, 0x00,
- 0x08, 0xA0, 0x09, 0x29, 0x01, 0x1C, 0x44, 0x3C, 0x96, 0x02, 0x00, 0x08, 0xA0, 0x1C, 0x96, 0x03,
- 0x00, 0x09, 0xB9, 0x01, 0x49, 0x9D, 0x02, 0x00, 0x2A, 0x01, 0x96, 0x02, 0x00, 0x08, 0xA0, 0x1C,
+ 0x08, 0xA0, 0x09, 0x2B, 0x01, 0x1C, 0x44, 0x3C, 0x96, 0x02, 0x00, 0x08, 0xA0, 0x1C, 0x96, 0x03,
+ 0x00, 0x09, 0xBB, 0x01, 0x49, 0x9D, 0x02, 0x00, 0x2A, 0x01, 0x96, 0x02, 0x00, 0x08, 0xA0, 0x1C,
0x96, 0x02, 0x00, 0x08, 0x09, 0x49, 0x9D, 0x02, 0x00, 0x0D, 0x01, 0x96, 0x02, 0x00, 0x08, 0xA0,
- 0x1C, 0x96, 0x03, 0x00, 0x09, 0xBE, 0x01, 0x49, 0x9D, 0x02, 0x00, 0xE3, 0x00, 0x96, 0x03, 0x00,
- 0x09, 0x29, 0x01, 0x1C, 0x96, 0x01, 0x00, 0x02, 0x49, 0x9D, 0x02, 0x00, 0xC6, 0x00, 0x96, 0x02,
- 0x00, 0x08, 0xA0, 0x1C, 0x96, 0x03, 0x00, 0x09, 0xC2, 0x01, 0x49, 0x9D, 0x02, 0x00, 0x91, 0x00,
- 0x96, 0x0A, 0x00, 0x08, 0x19, 0x07, 0x01, 0x00, 0x00, 0x00, 0x09, 0x29, 0x01, 0x1C, 0x96, 0x03,
- 0x00, 0x09, 0xC5, 0x01, 0x52, 0x9D, 0x02, 0x00, 0x4A, 0x00, 0x96, 0x02, 0x00, 0x08, 0xA0, 0x1C,
- 0x96, 0x02, 0x00, 0x08, 0xBA, 0x49, 0x9D, 0x02, 0x00, 0x0C, 0x00, 0x96, 0x03, 0x00, 0x09, 0xC1,
- 0x01, 0x3E, 0x99, 0x02, 0x00, 0x28, 0x00, 0x96, 0x03, 0x00, 0x09, 0x29, 0x01, 0x1C, 0x96, 0x07,
- 0x00, 0x07, 0x01, 0x00, 0x00, 0x00, 0x08, 0x04, 0x1C, 0x96, 0x03, 0x00, 0x09, 0x82, 0x01, 0x4E,
- 0x96, 0x03, 0x00, 0x09, 0x83, 0x01, 0x4E, 0x96, 0x03, 0x00, 0x09, 0xB5, 0x01, 0x52, 0x3E, 0x99,
- 0x02, 0x00, 0x28, 0x00, 0x96, 0x03, 0x00, 0x09, 0x29, 0x01, 0x1C, 0x96, 0x07, 0x00, 0x07, 0x01,
- 0x00, 0x00, 0x00, 0x08, 0x04, 0x1C, 0x96, 0x03, 0x00, 0x09, 0x82, 0x01, 0x4E, 0x96, 0x03, 0x00,
- 0x09, 0x83, 0x01, 0x4E, 0x96, 0x03, 0x00, 0x09, 0xAB, 0x01, 0x52, 0x3E, 0x99, 0x02, 0x00, 0x1E,
- 0x00, 0x96, 0x03, 0x00, 0x09, 0x29, 0x01, 0x1C, 0x9D, 0x02, 0x00, 0x0B, 0x00, 0x96, 0x03, 0x00,
- 0x09, 0xC4, 0x01, 0x99, 0x02, 0x00, 0x06, 0x00, 0x96, 0x03, 0x00, 0x09, 0xC3, 0x01, 0x3E, 0x99,
- 0x02, 0x00, 0x07, 0x00, 0x96, 0x03, 0x00, 0x09, 0xC1, 0x01, 0x3E, 0x99, 0x02, 0x00, 0x13, 0x00,
- 0x96, 0x06, 0x00, 0x09, 0xBF, 0x01, 0x09, 0x29, 0x01, 0x1C, 0x47, 0x96, 0x03, 0x00, 0x09, 0xC0,
- 0x01, 0x47, 0x3E, 0x99, 0x02, 0x00, 0x07, 0x00, 0x96, 0x03, 0x00, 0x09, 0xBD, 0x01, 0x3E, 0x99,
- 0x02, 0x00, 0x33, 0x00, 0x96, 0x06, 0x00, 0x09, 0xBA, 0x01, 0x09, 0x29, 0x01, 0x1C, 0x96, 0x07,
- 0x00, 0x07, 0x01, 0x00, 0x00, 0x00, 0x08, 0x04, 0x1C, 0x96, 0x03, 0x00, 0x09, 0x82, 0x01, 0x4E,
- 0x96, 0x03, 0x00, 0x09, 0x83, 0x01, 0x4E, 0x96, 0x03, 0x00, 0x09, 0xBB, 0x01, 0x52, 0x47, 0x96,
- 0x03, 0x00, 0x09, 0xBC, 0x01, 0x47, 0x3E, 0x4F, 0x96, 0x02, 0x00, 0x08, 0x04, 0x1C, 0x96, 0x03,
- 0x00, 0x09, 0x82, 0x01, 0x4E, 0x96, 0x03, 0x00, 0x09, 0x83, 0x01, 0x4E, 0x96, 0x03, 0x00, 0x09,
- 0xC6, 0x01, 0x8E, 0x0D, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x78, 0x6D, 0x6C, 0x00,
+ 0x1C, 0x96, 0x03, 0x00, 0x09, 0xC0, 0x01, 0x49, 0x9D, 0x02, 0x00, 0xE3, 0x00, 0x96, 0x03, 0x00,
+ 0x09, 0x2B, 0x01, 0x1C, 0x96, 0x01, 0x00, 0x02, 0x49, 0x9D, 0x02, 0x00, 0xC6, 0x00, 0x96, 0x02,
+ 0x00, 0x08, 0xA0, 0x1C, 0x96, 0x03, 0x00, 0x09, 0xC4, 0x01, 0x49, 0x9D, 0x02, 0x00, 0x91, 0x00,
+ 0x96, 0x0A, 0x00, 0x08, 0x19, 0x07, 0x01, 0x00, 0x00, 0x00, 0x09, 0x2B, 0x01, 0x1C, 0x96, 0x03,
+ 0x00, 0x09, 0xC7, 0x01, 0x52, 0x9D, 0x02, 0x00, 0x4A, 0x00, 0x96, 0x02, 0x00, 0x08, 0xA0, 0x1C,
+ 0x96, 0x02, 0x00, 0x08, 0xBA, 0x49, 0x9D, 0x02, 0x00, 0x0C, 0x00, 0x96, 0x03, 0x00, 0x09, 0xC3,
+ 0x01, 0x3E, 0x99, 0x02, 0x00, 0x28, 0x00, 0x96, 0x03, 0x00, 0x09, 0x2B, 0x01, 0x1C, 0x96, 0x07,
+ 0x00, 0x07, 0x01, 0x00, 0x00, 0x00, 0x08, 0x04, 0x1C, 0x96, 0x03, 0x00, 0x09, 0x84, 0x01, 0x4E,
+ 0x96, 0x03, 0x00, 0x09, 0x85, 0x01, 0x4E, 0x96, 0x03, 0x00, 0x09, 0xB7, 0x01, 0x52, 0x3E, 0x99,
+ 0x02, 0x00, 0x28, 0x00, 0x96, 0x03, 0x00, 0x09, 0x2B, 0x01, 0x1C, 0x96, 0x07, 0x00, 0x07, 0x01,
+ 0x00, 0x00, 0x00, 0x08, 0x04, 0x1C, 0x96, 0x03, 0x00, 0x09, 0x84, 0x01, 0x4E, 0x96, 0x03, 0x00,
+ 0x09, 0x85, 0x01, 0x4E, 0x96, 0x03, 0x00, 0x09, 0xAD, 0x01, 0x52, 0x3E, 0x99, 0x02, 0x00, 0x1E,
+ 0x00, 0x96, 0x03, 0x00, 0x09, 0x2B, 0x01, 0x1C, 0x9D, 0x02, 0x00, 0x0B, 0x00, 0x96, 0x03, 0x00,
+ 0x09, 0xC6, 0x01, 0x99, 0x02, 0x00, 0x06, 0x00, 0x96, 0x03, 0x00, 0x09, 0xC5, 0x01, 0x3E, 0x99,
+ 0x02, 0x00, 0x07, 0x00, 0x96, 0x03, 0x00, 0x09, 0xC3, 0x01, 0x3E, 0x99, 0x02, 0x00, 0x13, 0x00,
+ 0x96, 0x06, 0x00, 0x09, 0xC1, 0x01, 0x09, 0x2B, 0x01, 0x1C, 0x47, 0x96, 0x03, 0x00, 0x09, 0xC2,
+ 0x01, 0x47, 0x3E, 0x99, 0x02, 0x00, 0x07, 0x00, 0x96, 0x03, 0x00, 0x09, 0xBF, 0x01, 0x3E, 0x99,
+ 0x02, 0x00, 0x33, 0x00, 0x96, 0x06, 0x00, 0x09, 0xBC, 0x01, 0x09, 0x2B, 0x01, 0x1C, 0x96, 0x07,
+ 0x00, 0x07, 0x01, 0x00, 0x00, 0x00, 0x08, 0x04, 0x1C, 0x96, 0x03, 0x00, 0x09, 0x84, 0x01, 0x4E,
+ 0x96, 0x03, 0x00, 0x09, 0x85, 0x01, 0x4E, 0x96, 0x03, 0x00, 0x09, 0xBD, 0x01, 0x52, 0x47, 0x96,
+ 0x03, 0x00, 0x09, 0xBE, 0x01, 0x47, 0x3E, 0x4F, 0x96, 0x02, 0x00, 0x08, 0x04, 0x1C, 0x96, 0x03,
+ 0x00, 0x09, 0x84, 0x01, 0x4E, 0x96, 0x03, 0x00, 0x09, 0x85, 0x01, 0x4E, 0x96, 0x03, 0x00, 0x09,
+ 0xC8, 0x01, 0x8E, 0x0D, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x78, 0x6D, 0x6C, 0x00,
0xE1, 0x00, 0x96, 0x07, 0x00, 0x08, 0x1C, 0x07, 0x00, 0x00, 0x00, 0x00, 0x43, 0x3C, 0x96, 0x07,
0x00, 0x08, 0x18, 0x07, 0x00, 0x00, 0x00, 0x00, 0x1D, 0x99, 0x02, 0x00, 0x09, 0x00, 0x96, 0x02,
0x00, 0x08, 0x18, 0x4C, 0x1C, 0x50, 0x1D, 0x96, 0x02, 0x00, 0x08, 0x18, 0x1C, 0x96, 0x03, 0x00,
- 0x09, 0x9E, 0x01, 0x1C, 0x96, 0x03, 0x00, 0x09, 0xA3, 0x01, 0x4E, 0x96, 0x02, 0x00, 0x08, 0x19,
- 0x4E, 0x48, 0x12, 0x9D, 0x02, 0x00, 0x94, 0x00, 0x96, 0x03, 0x00, 0x09, 0x9E, 0x01, 0x1C, 0x96,
- 0x03, 0x00, 0x09, 0xA3, 0x01, 0x4E, 0x96, 0x02, 0x00, 0x08, 0x18, 0x1C, 0x4E, 0x96, 0x03, 0x00,
- 0x09, 0xA4, 0x01, 0x4E, 0x96, 0x03, 0x00, 0x09, 0xC7, 0x01, 0x49, 0x12, 0x9D, 0x02, 0x00, 0x66,
- 0x00, 0x96, 0x02, 0x00, 0x08, 0x1C, 0x1C, 0x96, 0x03, 0x00, 0x09, 0x9E, 0x01, 0x1C, 0x96, 0x03,
- 0x00, 0x09, 0xA3, 0x01, 0x4E, 0x96, 0x02, 0x00, 0x08, 0x18, 0x1C, 0x4E, 0x96, 0x03, 0x00, 0x09,
- 0xA7, 0x01, 0x4E, 0x96, 0x03, 0x00, 0x09, 0x8E, 0x01, 0x4E, 0x96, 0x03, 0x00, 0x09, 0x9E, 0x01,
- 0x1C, 0x96, 0x03, 0x00, 0x09, 0xA3, 0x01, 0x4E, 0x96, 0x02, 0x00, 0x08, 0x18, 0x1C, 0x4E, 0x96,
- 0x03, 0x00, 0x09, 0xA0, 0x01, 0x4E, 0x96, 0x07, 0x00, 0x07, 0x01, 0x00, 0x00, 0x00, 0x08, 0x04,
- 0x1C, 0x96, 0x03, 0x00, 0x09, 0x82, 0x01, 0x4E, 0x96, 0x03, 0x00, 0x09, 0x83, 0x01, 0x4E, 0x96,
- 0x03, 0x00, 0x09, 0xA1, 0x01, 0x52, 0x4F, 0x99, 0x02, 0x00, 0x42, 0xFF, 0x96, 0x02, 0x00, 0x08,
- 0x1C, 0x1C, 0x3E, 0x4F, 0x96, 0x02, 0x00, 0x08, 0x04, 0x1C, 0x96, 0x03, 0x00, 0x09, 0x82, 0x01,
- 0x4E, 0x96, 0x03, 0x00, 0x09, 0x83, 0x01, 0x4E, 0x96, 0x03, 0x00, 0x09, 0xC8, 0x01, 0x8E, 0x0D,
+ 0x09, 0xA0, 0x01, 0x1C, 0x96, 0x03, 0x00, 0x09, 0xA5, 0x01, 0x4E, 0x96, 0x02, 0x00, 0x08, 0x19,
+ 0x4E, 0x48, 0x12, 0x9D, 0x02, 0x00, 0x94, 0x00, 0x96, 0x03, 0x00, 0x09, 0xA0, 0x01, 0x1C, 0x96,
+ 0x03, 0x00, 0x09, 0xA5, 0x01, 0x4E, 0x96, 0x02, 0x00, 0x08, 0x18, 0x1C, 0x4E, 0x96, 0x03, 0x00,
+ 0x09, 0xA6, 0x01, 0x4E, 0x96, 0x03, 0x00, 0x09, 0xC9, 0x01, 0x49, 0x12, 0x9D, 0x02, 0x00, 0x66,
+ 0x00, 0x96, 0x02, 0x00, 0x08, 0x1C, 0x1C, 0x96, 0x03, 0x00, 0x09, 0xA0, 0x01, 0x1C, 0x96, 0x03,
+ 0x00, 0x09, 0xA5, 0x01, 0x4E, 0x96, 0x02, 0x00, 0x08, 0x18, 0x1C, 0x4E, 0x96, 0x03, 0x00, 0x09,
+ 0xA9, 0x01, 0x4E, 0x96, 0x03, 0x00, 0x09, 0x90, 0x01, 0x4E, 0x96, 0x03, 0x00, 0x09, 0xA0, 0x01,
+ 0x1C, 0x96, 0x03, 0x00, 0x09, 0xA5, 0x01, 0x4E, 0x96, 0x02, 0x00, 0x08, 0x18, 0x1C, 0x4E, 0x96,
+ 0x03, 0x00, 0x09, 0xA2, 0x01, 0x4E, 0x96, 0x07, 0x00, 0x07, 0x01, 0x00, 0x00, 0x00, 0x08, 0x04,
+ 0x1C, 0x96, 0x03, 0x00, 0x09, 0x84, 0x01, 0x4E, 0x96, 0x03, 0x00, 0x09, 0x85, 0x01, 0x4E, 0x96,
+ 0x03, 0x00, 0x09, 0xA3, 0x01, 0x52, 0x4F, 0x99, 0x02, 0x00, 0x42, 0xFF, 0x96, 0x02, 0x00, 0x08,
+ 0x1C, 0x1C, 0x3E, 0x4F, 0x96, 0x02, 0x00, 0x08, 0x04, 0x1C, 0x96, 0x03, 0x00, 0x09, 0x84, 0x01,
+ 0x4E, 0x96, 0x03, 0x00, 0x09, 0x85, 0x01, 0x4E, 0x96, 0x03, 0x00, 0x09, 0xCA, 0x01, 0x8E, 0x0D,
0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x78, 0x6D, 0x6C, 0x00, 0xE4, 0x00, 0x96, 0x08,
- 0x00, 0x09, 0x25, 0x01, 0x07, 0x00, 0x00, 0x00, 0x00, 0x42, 0x3C, 0x96, 0x07, 0x00, 0x08, 0x18,
+ 0x00, 0x09, 0x27, 0x01, 0x07, 0x00, 0x00, 0x00, 0x00, 0x42, 0x3C, 0x96, 0x07, 0x00, 0x08, 0x18,
0x07, 0x00, 0x00, 0x00, 0x00, 0x1D, 0x99, 0x02, 0x00, 0x09, 0x00, 0x96, 0x02, 0x00, 0x08, 0x18,
- 0x4C, 0x1C, 0x50, 0x1D, 0x96, 0x02, 0x00, 0x08, 0x18, 0x1C, 0x96, 0x03, 0x00, 0x09, 0x9E, 0x01,
- 0x1C, 0x96, 0x03, 0x00, 0x09, 0xA3, 0x01, 0x4E, 0x96, 0x02, 0x00, 0x08, 0x19, 0x4E, 0x48, 0x12,
- 0x9D, 0x02, 0x00, 0x95, 0x00, 0x96, 0x03, 0x00, 0x09, 0x9E, 0x01, 0x1C, 0x96, 0x03, 0x00, 0x09,
- 0xA3, 0x01, 0x4E, 0x96, 0x02, 0x00, 0x08, 0x18, 0x1C, 0x4E, 0x96, 0x03, 0x00, 0x09, 0xA4, 0x01,
- 0x4E, 0x96, 0x03, 0x00, 0x09, 0xC7, 0x01, 0x49, 0x12, 0x9D, 0x02, 0x00, 0x67, 0x00, 0x96, 0x03,
- 0x00, 0x09, 0x25, 0x01, 0x1C, 0x96, 0x03, 0x00, 0x09, 0x9E, 0x01, 0x1C, 0x96, 0x03, 0x00, 0x09,
- 0xA3, 0x01, 0x4E, 0x96, 0x02, 0x00, 0x08, 0x18, 0x1C, 0x4E, 0x96, 0x03, 0x00, 0x09, 0xA7, 0x01,
- 0x4E, 0x96, 0x03, 0x00, 0x09, 0x8E, 0x01, 0x4E, 0x96, 0x03, 0x00, 0x09, 0x9E, 0x01, 0x1C, 0x96,
- 0x03, 0x00, 0x09, 0xA3, 0x01, 0x4E, 0x96, 0x02, 0x00, 0x08, 0x18, 0x1C, 0x4E, 0x96, 0x03, 0x00,
- 0x09, 0xA0, 0x01, 0x4E, 0x96, 0x07, 0x00, 0x07, 0x01, 0x00, 0x00, 0x00, 0x08, 0x04, 0x1C, 0x96,
- 0x03, 0x00, 0x09, 0x82, 0x01, 0x4E, 0x96, 0x03, 0x00, 0x09, 0x83, 0x01, 0x4E, 0x96, 0x03, 0x00,
- 0x09, 0xA1, 0x01, 0x52, 0x4F, 0x99, 0x02, 0x00, 0x41, 0xFF, 0x96, 0x03, 0x00, 0x09, 0x25, 0x01,
- 0x1C, 0x3E, 0x4F, 0x96, 0x02, 0x00, 0x08, 0x04, 0x1C, 0x96, 0x03, 0x00, 0x09, 0x82, 0x01, 0x4E,
- 0x96, 0x03, 0x00, 0x09, 0x83, 0x01, 0x4E, 0x96, 0x03, 0x00, 0x09, 0xA1, 0x01, 0x8E, 0x0D, 0x00,
+ 0x4C, 0x1C, 0x50, 0x1D, 0x96, 0x02, 0x00, 0x08, 0x18, 0x1C, 0x96, 0x03, 0x00, 0x09, 0xA0, 0x01,
+ 0x1C, 0x96, 0x03, 0x00, 0x09, 0xA5, 0x01, 0x4E, 0x96, 0x02, 0x00, 0x08, 0x19, 0x4E, 0x48, 0x12,
+ 0x9D, 0x02, 0x00, 0x95, 0x00, 0x96, 0x03, 0x00, 0x09, 0xA0, 0x01, 0x1C, 0x96, 0x03, 0x00, 0x09,
+ 0xA5, 0x01, 0x4E, 0x96, 0x02, 0x00, 0x08, 0x18, 0x1C, 0x4E, 0x96, 0x03, 0x00, 0x09, 0xA6, 0x01,
+ 0x4E, 0x96, 0x03, 0x00, 0x09, 0xC9, 0x01, 0x49, 0x12, 0x9D, 0x02, 0x00, 0x67, 0x00, 0x96, 0x03,
+ 0x00, 0x09, 0x27, 0x01, 0x1C, 0x96, 0x03, 0x00, 0x09, 0xA0, 0x01, 0x1C, 0x96, 0x03, 0x00, 0x09,
+ 0xA5, 0x01, 0x4E, 0x96, 0x02, 0x00, 0x08, 0x18, 0x1C, 0x4E, 0x96, 0x03, 0x00, 0x09, 0xA9, 0x01,
+ 0x4E, 0x96, 0x03, 0x00, 0x09, 0x90, 0x01, 0x4E, 0x96, 0x03, 0x00, 0x09, 0xA0, 0x01, 0x1C, 0x96,
+ 0x03, 0x00, 0x09, 0xA5, 0x01, 0x4E, 0x96, 0x02, 0x00, 0x08, 0x18, 0x1C, 0x4E, 0x96, 0x03, 0x00,
+ 0x09, 0xA2, 0x01, 0x4E, 0x96, 0x07, 0x00, 0x07, 0x01, 0x00, 0x00, 0x00, 0x08, 0x04, 0x1C, 0x96,
+ 0x03, 0x00, 0x09, 0x84, 0x01, 0x4E, 0x96, 0x03, 0x00, 0x09, 0x85, 0x01, 0x4E, 0x96, 0x03, 0x00,
+ 0x09, 0xA3, 0x01, 0x52, 0x4F, 0x99, 0x02, 0x00, 0x41, 0xFF, 0x96, 0x03, 0x00, 0x09, 0x27, 0x01,
+ 0x1C, 0x3E, 0x4F, 0x96, 0x02, 0x00, 0x08, 0x04, 0x1C, 0x96, 0x03, 0x00, 0x09, 0x84, 0x01, 0x4E,
+ 0x96, 0x03, 0x00, 0x09, 0x85, 0x01, 0x4E, 0x96, 0x03, 0x00, 0x09, 0xA3, 0x01, 0x8E, 0x0D, 0x00,
0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x78, 0x6D, 0x6C, 0x00, 0xC2, 0x01, 0x96, 0x05, 0x00,
- 0x08, 0xA0, 0x09, 0x9E, 0x01, 0x1C, 0x96, 0x03, 0x00, 0x09, 0xA4, 0x01, 0x4E, 0x3C, 0x96, 0x02,
- 0x00, 0x08, 0xA0, 0x1C, 0x96, 0x03, 0x00, 0x09, 0xBE, 0x01, 0x49, 0x9D, 0x02, 0x00, 0x79, 0x01,
- 0x96, 0x02, 0x00, 0x08, 0xA0, 0x1C, 0x96, 0x03, 0x00, 0x09, 0xB9, 0x01, 0x49, 0x9D, 0x02, 0x00,
+ 0x08, 0xA0, 0x09, 0xA0, 0x01, 0x1C, 0x96, 0x03, 0x00, 0x09, 0xA6, 0x01, 0x4E, 0x3C, 0x96, 0x02,
+ 0x00, 0x08, 0xA0, 0x1C, 0x96, 0x03, 0x00, 0x09, 0xC0, 0x01, 0x49, 0x9D, 0x02, 0x00, 0x79, 0x01,
+ 0x96, 0x02, 0x00, 0x08, 0xA0, 0x1C, 0x96, 0x03, 0x00, 0x09, 0xBB, 0x01, 0x49, 0x9D, 0x02, 0x00,
0x27, 0x01, 0x96, 0x02, 0x00, 0x08, 0xA0, 0x1C, 0x96, 0x02, 0x00, 0x08, 0xDC, 0x49, 0x9D, 0x02,
0x00, 0x0B, 0x01, 0x96, 0x02, 0x00, 0x08, 0xA0, 0x1C, 0x96, 0x02, 0x00, 0x08, 0xDB, 0x49, 0x9D,
0x02, 0x00, 0xEF, 0x00, 0x96, 0x02, 0x00, 0x08, 0xA0, 0x1C, 0x96, 0x02, 0x00, 0x08, 0xEB, 0x49,
0x9D, 0x02, 0x00, 0xD4, 0x00, 0x96, 0x02, 0x00, 0x08, 0xA0, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x09,
0x49, 0x9D, 0x02, 0x00, 0xB9, 0x00, 0x96, 0x02, 0x00, 0x08, 0xA0, 0x1C, 0x96, 0x02, 0x00, 0x08,
0xBA, 0x49, 0x9D, 0x02, 0x00, 0x7B, 0x00, 0x96, 0x02, 0x00, 0x08, 0xA0, 0x1C, 0x96, 0x03, 0x00,
- 0x09, 0xAE, 0x01, 0x49, 0x9D, 0x02, 0x00, 0x3C, 0x00, 0x96, 0x02, 0x00, 0x08, 0xA0, 0x1C, 0x96,
- 0x03, 0x00, 0x09, 0xCC, 0x01, 0x49, 0x9D, 0x02, 0x00, 0x0A, 0x00, 0x96, 0x01, 0x00, 0x03, 0x3E,
- 0x99, 0x02, 0x00, 0x1B, 0x00, 0x96, 0x03, 0x00, 0x09, 0x9E, 0x01, 0x1C, 0x96, 0x03, 0x00, 0x09,
- 0xA0, 0x01, 0x4E, 0x96, 0x08, 0x00, 0x07, 0x01, 0x00, 0x00, 0x00, 0x09, 0xCA, 0x01, 0x3D, 0x3E,
- 0x99, 0x02, 0x00, 0x28, 0x00, 0x96, 0x03, 0x00, 0x09, 0x9E, 0x01, 0x1C, 0x96, 0x07, 0x00, 0x07,
- 0x01, 0x00, 0x00, 0x00, 0x08, 0x04, 0x1C, 0x96, 0x03, 0x00, 0x09, 0x82, 0x01, 0x4E, 0x96, 0x03,
- 0x00, 0x09, 0x83, 0x01, 0x4E, 0x96, 0x03, 0x00, 0x09, 0xC8, 0x01, 0x52, 0x3E, 0x99, 0x02, 0x00,
- 0x28, 0x00, 0x96, 0x03, 0x00, 0x09, 0x9E, 0x01, 0x1C, 0x96, 0x07, 0x00, 0x07, 0x01, 0x00, 0x00,
- 0x00, 0x08, 0x04, 0x1C, 0x96, 0x03, 0x00, 0x09, 0x82, 0x01, 0x4E, 0x96, 0x03, 0x00, 0x09, 0x83,
- 0x01, 0x4E, 0x96, 0x03, 0x00, 0x09, 0xC6, 0x01, 0x52, 0x3E, 0x99, 0x02, 0x00, 0x05, 0x00, 0x96,
+ 0x09, 0xB0, 0x01, 0x49, 0x9D, 0x02, 0x00, 0x3C, 0x00, 0x96, 0x02, 0x00, 0x08, 0xA0, 0x1C, 0x96,
+ 0x03, 0x00, 0x09, 0xCE, 0x01, 0x49, 0x9D, 0x02, 0x00, 0x0A, 0x00, 0x96, 0x01, 0x00, 0x03, 0x3E,
+ 0x99, 0x02, 0x00, 0x1B, 0x00, 0x96, 0x03, 0x00, 0x09, 0xA0, 0x01, 0x1C, 0x96, 0x03, 0x00, 0x09,
+ 0xA2, 0x01, 0x4E, 0x96, 0x08, 0x00, 0x07, 0x01, 0x00, 0x00, 0x00, 0x09, 0xCC, 0x01, 0x3D, 0x3E,
+ 0x99, 0x02, 0x00, 0x28, 0x00, 0x96, 0x03, 0x00, 0x09, 0xA0, 0x01, 0x1C, 0x96, 0x07, 0x00, 0x07,
+ 0x01, 0x00, 0x00, 0x00, 0x08, 0x04, 0x1C, 0x96, 0x03, 0x00, 0x09, 0x84, 0x01, 0x4E, 0x96, 0x03,
+ 0x00, 0x09, 0x85, 0x01, 0x4E, 0x96, 0x03, 0x00, 0x09, 0xCA, 0x01, 0x52, 0x3E, 0x99, 0x02, 0x00,
+ 0x28, 0x00, 0x96, 0x03, 0x00, 0x09, 0xA0, 0x01, 0x1C, 0x96, 0x07, 0x00, 0x07, 0x01, 0x00, 0x00,
+ 0x00, 0x08, 0x04, 0x1C, 0x96, 0x03, 0x00, 0x09, 0x84, 0x01, 0x4E, 0x96, 0x03, 0x00, 0x09, 0x85,
+ 0x01, 0x4E, 0x96, 0x03, 0x00, 0x09, 0xC8, 0x01, 0x52, 0x3E, 0x99, 0x02, 0x00, 0x05, 0x00, 0x96,
0x01, 0x00, 0x03, 0x3E, 0x99, 0x02, 0x00, 0x05, 0x00, 0x96, 0x01, 0x00, 0x02, 0x3E, 0x99, 0x02,
0x00, 0x06, 0x00, 0x96, 0x02, 0x00, 0x05, 0x01, 0x3E, 0x99, 0x02, 0x00, 0x06, 0x00, 0x96, 0x02,
- 0x00, 0x05, 0x00, 0x3E, 0x99, 0x02, 0x00, 0x3B, 0x00, 0x96, 0x03, 0x00, 0x09, 0x9E, 0x01, 0x1C,
- 0x96, 0x03, 0x00, 0x09, 0xA0, 0x01, 0x4E, 0x96, 0x08, 0x00, 0x07, 0x01, 0x00, 0x00, 0x00, 0x09,
- 0xCA, 0x01, 0x3D, 0x96, 0x07, 0x00, 0x07, 0x01, 0x00, 0x00, 0x00, 0x08, 0x04, 0x1C, 0x96, 0x03,
- 0x00, 0x09, 0x82, 0x01, 0x4E, 0x96, 0x03, 0x00, 0x09, 0x83, 0x01, 0x4E, 0x96, 0x03, 0x00, 0x09,
- 0xCB, 0x01, 0x52, 0x3E, 0x99, 0x02, 0x00, 0x26, 0x00, 0x96, 0x08, 0x00, 0x07, 0x00, 0x00, 0x00,
- 0x00, 0x09, 0x9E, 0x01, 0x1C, 0x96, 0x03, 0x00, 0x09, 0xA0, 0x01, 0x4E, 0x96, 0x02, 0x00, 0x08,
- 0x0F, 0x52, 0x96, 0x08, 0x00, 0x07, 0x01, 0x00, 0x00, 0x00, 0x09, 0xC9, 0x01, 0x3D, 0x3E, 0x4F,
- 0x96, 0x02, 0x00, 0x08, 0x04, 0x1C, 0x96, 0x03, 0x00, 0x09, 0x82, 0x01, 0x4E, 0x96, 0x03, 0x00,
- 0x09, 0x83, 0x01, 0x4E, 0x96, 0x03, 0x00, 0x09, 0xA5, 0x01, 0x8E, 0x0D, 0x00, 0x00, 0x01, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x78, 0x6D, 0x6C, 0x00, 0x9C, 0x00, 0x96, 0x08, 0x00, 0x09, 0xA2, 0x01,
+ 0x00, 0x05, 0x00, 0x3E, 0x99, 0x02, 0x00, 0x3B, 0x00, 0x96, 0x03, 0x00, 0x09, 0xA0, 0x01, 0x1C,
+ 0x96, 0x03, 0x00, 0x09, 0xA2, 0x01, 0x4E, 0x96, 0x08, 0x00, 0x07, 0x01, 0x00, 0x00, 0x00, 0x09,
+ 0xCC, 0x01, 0x3D, 0x96, 0x07, 0x00, 0x07, 0x01, 0x00, 0x00, 0x00, 0x08, 0x04, 0x1C, 0x96, 0x03,
+ 0x00, 0x09, 0x84, 0x01, 0x4E, 0x96, 0x03, 0x00, 0x09, 0x85, 0x01, 0x4E, 0x96, 0x03, 0x00, 0x09,
+ 0xCD, 0x01, 0x52, 0x3E, 0x99, 0x02, 0x00, 0x26, 0x00, 0x96, 0x08, 0x00, 0x07, 0x00, 0x00, 0x00,
+ 0x00, 0x09, 0xA0, 0x01, 0x1C, 0x96, 0x03, 0x00, 0x09, 0xA2, 0x01, 0x4E, 0x96, 0x02, 0x00, 0x08,
+ 0x0F, 0x52, 0x96, 0x08, 0x00, 0x07, 0x01, 0x00, 0x00, 0x00, 0x09, 0xCB, 0x01, 0x3D, 0x3E, 0x4F,
+ 0x96, 0x02, 0x00, 0x08, 0x04, 0x1C, 0x96, 0x03, 0x00, 0x09, 0x84, 0x01, 0x4E, 0x96, 0x03, 0x00,
+ 0x09, 0x85, 0x01, 0x4E, 0x96, 0x03, 0x00, 0x09, 0xA7, 0x01, 0x8E, 0x0D, 0x00, 0x00, 0x01, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x78, 0x6D, 0x6C, 0x00, 0x9C, 0x00, 0x96, 0x08, 0x00, 0x09, 0xA4, 0x01,
0x07, 0x00, 0x00, 0x00, 0x00, 0x42, 0x3C, 0x96, 0x07, 0x00, 0x08, 0x18, 0x07, 0x00, 0x00, 0x00,
0x00, 0x3C, 0x99, 0x02, 0x00, 0x09, 0x00, 0x96, 0x02, 0x00, 0x08, 0x18, 0x4C, 0x1C, 0x50, 0x1D,
- 0x96, 0x02, 0x00, 0x08, 0x18, 0x1C, 0x96, 0x03, 0x00, 0x09, 0x9E, 0x01, 0x1C, 0x96, 0x03, 0x00,
- 0x09, 0xA3, 0x01, 0x4E, 0x96, 0x02, 0x00, 0x08, 0x19, 0x4E, 0x48, 0x12, 0x9D, 0x02, 0x00, 0x4D,
- 0x00, 0x96, 0x03, 0x00, 0x09, 0x9E, 0x01, 0x1C, 0x96, 0x03, 0x00, 0x09, 0xA3, 0x01, 0x4E, 0x96,
+ 0x96, 0x02, 0x00, 0x08, 0x18, 0x1C, 0x96, 0x03, 0x00, 0x09, 0xA0, 0x01, 0x1C, 0x96, 0x03, 0x00,
+ 0x09, 0xA5, 0x01, 0x4E, 0x96, 0x02, 0x00, 0x08, 0x19, 0x4E, 0x48, 0x12, 0x9D, 0x02, 0x00, 0x4D,
+ 0x00, 0x96, 0x03, 0x00, 0x09, 0xA0, 0x01, 0x1C, 0x96, 0x03, 0x00, 0x09, 0xA5, 0x01, 0x4E, 0x96,
0x02, 0x00, 0x08, 0x18, 0x1C, 0x4E, 0x96, 0x07, 0x00, 0x07, 0x01, 0x00, 0x00, 0x00, 0x08, 0x04,
- 0x1C, 0x96, 0x03, 0x00, 0x09, 0x82, 0x01, 0x4E, 0x96, 0x03, 0x00, 0x09, 0x83, 0x01, 0x4E, 0x96,
- 0x03, 0x00, 0x09, 0xA1, 0x01, 0x52, 0x96, 0x08, 0x00, 0x07, 0x01, 0x00, 0x00, 0x00, 0x09, 0xA2,
+ 0x1C, 0x96, 0x03, 0x00, 0x09, 0x84, 0x01, 0x4E, 0x96, 0x03, 0x00, 0x09, 0x85, 0x01, 0x4E, 0x96,
+ 0x03, 0x00, 0x09, 0xA3, 0x01, 0x52, 0x96, 0x08, 0x00, 0x07, 0x01, 0x00, 0x00, 0x00, 0x09, 0xA4,
0x01, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x16, 0x52, 0x17, 0x99, 0x02, 0x00, 0x89, 0xFF, 0x96, 0x03,
- 0x00, 0x09, 0xA2, 0x01, 0x1C, 0x3E, 0x4F, 0x96, 0x02, 0x00, 0x08, 0x04, 0x1C, 0x96, 0x03, 0x00,
- 0x09, 0x82, 0x01, 0x4E, 0x96, 0x03, 0x00, 0x09, 0x83, 0x01, 0x4E, 0x96, 0x03, 0x00, 0x09, 0xCD,
+ 0x00, 0x09, 0xA4, 0x01, 0x1C, 0x3E, 0x4F, 0x96, 0x02, 0x00, 0x08, 0x04, 0x1C, 0x96, 0x03, 0x00,
+ 0x09, 0x84, 0x01, 0x4E, 0x96, 0x03, 0x00, 0x09, 0x85, 0x01, 0x4E, 0x96, 0x03, 0x00, 0x09, 0xCF,
0x01, 0x8E, 0x0F, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x61, 0x72, 0x72, 0x61, 0x79,
- 0x00, 0xB0, 0x00, 0x96, 0x06, 0x00, 0x09, 0xAD, 0x01, 0x09, 0xCE, 0x01, 0x3C, 0x96, 0x07, 0x00,
+ 0x00, 0xB0, 0x00, 0x96, 0x06, 0x00, 0x09, 0xAF, 0x01, 0x09, 0xD0, 0x01, 0x3C, 0x96, 0x07, 0x00,
0x08, 0x18, 0x07, 0x00, 0x00, 0x00, 0x00, 0x3C, 0x99, 0x02, 0x00, 0x09, 0x00, 0x96, 0x02, 0x00,
0x08, 0x18, 0x4C, 0x1C, 0x50, 0x1D, 0x96, 0x02, 0x00, 0x08, 0x18, 0x1C, 0x96, 0x03, 0x00, 0x09,
- 0xAE, 0x01, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x19, 0x4E, 0x48, 0x12, 0x9D, 0x02, 0x00, 0x64, 0x00,
+ 0xB0, 0x01, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x19, 0x4E, 0x48, 0x12, 0x9D, 0x02, 0x00, 0x64, 0x00,
0x96, 0x02, 0x00, 0x08, 0x18, 0x1C, 0x96, 0x05, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 0x49, 0x12,
- 0x12, 0x9D, 0x02, 0x00, 0x10, 0x00, 0x96, 0x03, 0x00, 0x09, 0xAD, 0x01, 0x4C, 0x1C, 0x96, 0x03,
- 0x00, 0x09, 0x92, 0x01, 0x47, 0x1D, 0x96, 0x03, 0x00, 0x09, 0xAD, 0x01, 0x4C, 0x1C, 0x96, 0x03,
- 0x00, 0x09, 0xAE, 0x01, 0x1C, 0x96, 0x03, 0x00, 0x09, 0xCF, 0x01, 0x1C, 0x4E, 0x96, 0x07, 0x00,
- 0x07, 0x01, 0x00, 0x00, 0x00, 0x08, 0x04, 0x1C, 0x96, 0x03, 0x00, 0x09, 0x82, 0x01, 0x4E, 0x96,
- 0x03, 0x00, 0x09, 0x83, 0x01, 0x4E, 0x96, 0x03, 0x00, 0x09, 0x93, 0x01, 0x52, 0x47, 0x1D, 0x99,
- 0x02, 0x00, 0x79, 0xFF, 0x96, 0x03, 0x00, 0x09, 0xAD, 0x01, 0x1C, 0x96, 0x03, 0x00, 0x09, 0xD0,
- 0x01, 0x47, 0x3E, 0x4F, 0x96, 0x02, 0x00, 0x08, 0x04, 0x1C, 0x96, 0x03, 0x00, 0x09, 0x82, 0x01,
- 0x4E, 0x96, 0x03, 0x00, 0x09, 0x83, 0x01, 0x4E, 0x96, 0x03, 0x00, 0x09, 0xD1, 0x01, 0x8E, 0x0D,
+ 0x12, 0x9D, 0x02, 0x00, 0x10, 0x00, 0x96, 0x03, 0x00, 0x09, 0xAF, 0x01, 0x4C, 0x1C, 0x96, 0x03,
+ 0x00, 0x09, 0x94, 0x01, 0x47, 0x1D, 0x96, 0x03, 0x00, 0x09, 0xAF, 0x01, 0x4C, 0x1C, 0x96, 0x03,
+ 0x00, 0x09, 0xB0, 0x01, 0x1C, 0x96, 0x03, 0x00, 0x09, 0xD1, 0x01, 0x1C, 0x4E, 0x96, 0x07, 0x00,
+ 0x07, 0x01, 0x00, 0x00, 0x00, 0x08, 0x04, 0x1C, 0x96, 0x03, 0x00, 0x09, 0x84, 0x01, 0x4E, 0x96,
+ 0x03, 0x00, 0x09, 0x85, 0x01, 0x4E, 0x96, 0x03, 0x00, 0x09, 0x95, 0x01, 0x52, 0x47, 0x1D, 0x99,
+ 0x02, 0x00, 0x79, 0xFF, 0x96, 0x03, 0x00, 0x09, 0xAF, 0x01, 0x1C, 0x96, 0x03, 0x00, 0x09, 0xD2,
+ 0x01, 0x47, 0x3E, 0x4F, 0x96, 0x02, 0x00, 0x08, 0x04, 0x1C, 0x96, 0x03, 0x00, 0x09, 0x84, 0x01,
+ 0x4E, 0x96, 0x03, 0x00, 0x09, 0x85, 0x01, 0x4E, 0x96, 0x03, 0x00, 0x09, 0xD3, 0x01, 0x8E, 0x0D,
0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6F, 0x62, 0x6A, 0x00, 0xB0, 0x00, 0x96, 0x06,
- 0x00, 0x09, 0xAD, 0x01, 0x09, 0xD2, 0x01, 0x3C, 0x96, 0x05, 0x00, 0x09, 0xD3, 0x01, 0x05, 0x00,
- 0x3C, 0x96, 0x03, 0x00, 0x09, 0xB7, 0x01, 0x46, 0x87, 0x01, 0x00, 0x00, 0x96, 0x01, 0x00, 0x02,
+ 0x00, 0x09, 0xAF, 0x01, 0x09, 0xD4, 0x01, 0x3C, 0x96, 0x05, 0x00, 0x09, 0xD5, 0x01, 0x05, 0x00,
+ 0x3C, 0x96, 0x03, 0x00, 0x09, 0xB9, 0x01, 0x46, 0x87, 0x01, 0x00, 0x00, 0x96, 0x01, 0x00, 0x02,
0x49, 0x9D, 0x02, 0x00, 0x79, 0x00, 0x96, 0x04, 0x00, 0x08, 0xBC, 0x04, 0x00, 0x3C, 0x96, 0x03,
- 0x00, 0x09, 0xD3, 0x01, 0x1C, 0x12, 0x9D, 0x02, 0x00, 0x10, 0x00, 0x96, 0x03, 0x00, 0x09, 0xAD,
- 0x01, 0x4C, 0x1C, 0x96, 0x03, 0x00, 0x09, 0x92, 0x01, 0x47, 0x1D, 0x96, 0x05, 0x00, 0x09, 0xD3,
- 0x01, 0x05, 0x01, 0x1D, 0x96, 0x03, 0x00, 0x09, 0xAD, 0x01, 0x4C, 0x1C, 0x96, 0x02, 0x00, 0x08,
- 0xBC, 0x1C, 0x96, 0x03, 0x00, 0x09, 0xD4, 0x01, 0x47, 0x96, 0x03, 0x00, 0x09, 0xB7, 0x01, 0x1C,
+ 0x00, 0x09, 0xD5, 0x01, 0x1C, 0x12, 0x9D, 0x02, 0x00, 0x10, 0x00, 0x96, 0x03, 0x00, 0x09, 0xAF,
+ 0x01, 0x4C, 0x1C, 0x96, 0x03, 0x00, 0x09, 0x94, 0x01, 0x47, 0x1D, 0x96, 0x05, 0x00, 0x09, 0xD5,
+ 0x01, 0x05, 0x01, 0x1D, 0x96, 0x03, 0x00, 0x09, 0xAF, 0x01, 0x4C, 0x1C, 0x96, 0x02, 0x00, 0x08,
+ 0xBC, 0x1C, 0x96, 0x03, 0x00, 0x09, 0xD6, 0x01, 0x47, 0x96, 0x03, 0x00, 0x09, 0xB9, 0x01, 0x1C,
0x96, 0x02, 0x00, 0x08, 0xBC, 0x1C, 0x4E, 0x96, 0x07, 0x00, 0x07, 0x01, 0x00, 0x00, 0x00, 0x08,
- 0x04, 0x1C, 0x96, 0x03, 0x00, 0x09, 0x82, 0x01, 0x4E, 0x96, 0x03, 0x00, 0x09, 0x83, 0x01, 0x4E,
- 0x96, 0x03, 0x00, 0x09, 0x93, 0x01, 0x52, 0x47, 0x47, 0x1D, 0x99, 0x02, 0x00, 0x79, 0xFF, 0x96,
- 0x03, 0x00, 0x09, 0xAD, 0x01, 0x1C, 0x96, 0x03, 0x00, 0x09, 0xD5, 0x01, 0x47, 0x3E, 0x4F, 0x96,
- 0x02, 0x00, 0x08, 0x04, 0x1C, 0x96, 0x03, 0x00, 0x09, 0x82, 0x01, 0x4E, 0x96, 0x03, 0x00, 0x09,
- 0x83, 0x01, 0x4E, 0x96, 0x03, 0x00, 0x09, 0x93, 0x01, 0x8E, 0x0F, 0x00, 0x00, 0x01, 0x00, 0x00,
+ 0x04, 0x1C, 0x96, 0x03, 0x00, 0x09, 0x84, 0x01, 0x4E, 0x96, 0x03, 0x00, 0x09, 0x85, 0x01, 0x4E,
+ 0x96, 0x03, 0x00, 0x09, 0x95, 0x01, 0x52, 0x47, 0x47, 0x1D, 0x99, 0x02, 0x00, 0x79, 0xFF, 0x96,
+ 0x03, 0x00, 0x09, 0xAF, 0x01, 0x1C, 0x96, 0x03, 0x00, 0x09, 0xD7, 0x01, 0x47, 0x3E, 0x4F, 0x96,
+ 0x02, 0x00, 0x08, 0x04, 0x1C, 0x96, 0x03, 0x00, 0x09, 0x84, 0x01, 0x4E, 0x96, 0x03, 0x00, 0x09,
+ 0x85, 0x01, 0x4E, 0x96, 0x03, 0x00, 0x09, 0x95, 0x01, 0x8E, 0x0F, 0x00, 0x00, 0x01, 0x00, 0x00,
0x00, 0x00, 0x00, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x00, 0x07, 0x01, 0x96, 0x05, 0x00, 0x08, 0xA0,
- 0x09, 0x29, 0x01, 0x1C, 0x44, 0x3C, 0x96, 0x02, 0x00, 0x08, 0xA0, 0x1C, 0x96, 0x03, 0x00, 0x09,
- 0xB9, 0x01, 0x49, 0x9D, 0x02, 0x00, 0x97, 0x00, 0x96, 0x02, 0x00, 0x08, 0xA0, 0x1C, 0x96, 0x02,
- 0x00, 0x08, 0xBA, 0x49, 0x9D, 0x02, 0x00, 0x19, 0x00, 0x96, 0x03, 0x00, 0x09, 0x29, 0x01, 0x1C,
- 0x96, 0x08, 0x00, 0x07, 0x01, 0x00, 0x00, 0x00, 0x09, 0xCA, 0x01, 0x3D, 0x3E, 0x99, 0x02, 0x00,
- 0x68, 0x00, 0x96, 0x03, 0x00, 0x09, 0x29, 0x01, 0x1C, 0x96, 0x02, 0x00, 0x08, 0xF7, 0x1C, 0x54,
- 0x9D, 0x02, 0x00, 0x2D, 0x00, 0x96, 0x03, 0x00, 0x09, 0x29, 0x01, 0x1C, 0x96, 0x07, 0x00, 0x07,
- 0x01, 0x00, 0x00, 0x00, 0x08, 0x04, 0x1C, 0x96, 0x03, 0x00, 0x09, 0x82, 0x01, 0x4E, 0x96, 0x03,
- 0x00, 0x09, 0x83, 0x01, 0x4E, 0x96, 0x03, 0x00, 0x09, 0xD1, 0x01, 0x52, 0x3E, 0x99, 0x02, 0x00,
- 0x28, 0x00, 0x96, 0x03, 0x00, 0x09, 0x29, 0x01, 0x1C, 0x96, 0x07, 0x00, 0x07, 0x01, 0x00, 0x00,
- 0x00, 0x08, 0x04, 0x1C, 0x96, 0x03, 0x00, 0x09, 0x82, 0x01, 0x4E, 0x96, 0x03, 0x00, 0x09, 0x83,
- 0x01, 0x4E, 0x96, 0x03, 0x00, 0x09, 0xCD, 0x01, 0x52, 0x3E, 0x99, 0x02, 0x00, 0x53, 0x00, 0x96,
- 0x06, 0x00, 0x09, 0xD6, 0x01, 0x09, 0x29, 0x01, 0x1C, 0x96, 0x07, 0x00, 0x07, 0x01, 0x00, 0x00,
- 0x00, 0x08, 0x04, 0x1C, 0x96, 0x03, 0x00, 0x09, 0x82, 0x01, 0x4E, 0x96, 0x03, 0x00, 0x09, 0x83,
- 0x01, 0x4E, 0x96, 0x03, 0x00, 0x09, 0xCB, 0x01, 0x52, 0x96, 0x07, 0x00, 0x07, 0x01, 0x00, 0x00,
- 0x00, 0x08, 0x04, 0x1C, 0x96, 0x03, 0x00, 0x09, 0x82, 0x01, 0x4E, 0x96, 0x03, 0x00, 0x09, 0x83,
- 0x01, 0x4E, 0x96, 0x03, 0x00, 0x09, 0xD7, 0x01, 0x52, 0x47, 0x96, 0x03, 0x00, 0x09, 0xD6, 0x01,
- 0x47, 0x3E, 0x4F, 0x96, 0x0A, 0x00, 0x09, 0xD8, 0x01, 0x07, 0x0E, 0x00, 0x00, 0x00, 0x08, 0x04,
- 0x1C, 0x96, 0x03, 0x00, 0x09, 0x82, 0x01, 0x4E, 0x96, 0x03, 0x00, 0x09, 0x83, 0x01, 0x4E, 0x96,
+ 0x09, 0x2B, 0x01, 0x1C, 0x44, 0x3C, 0x96, 0x02, 0x00, 0x08, 0xA0, 0x1C, 0x96, 0x03, 0x00, 0x09,
+ 0xBB, 0x01, 0x49, 0x9D, 0x02, 0x00, 0x97, 0x00, 0x96, 0x02, 0x00, 0x08, 0xA0, 0x1C, 0x96, 0x02,
+ 0x00, 0x08, 0xBA, 0x49, 0x9D, 0x02, 0x00, 0x19, 0x00, 0x96, 0x03, 0x00, 0x09, 0x2B, 0x01, 0x1C,
+ 0x96, 0x08, 0x00, 0x07, 0x01, 0x00, 0x00, 0x00, 0x09, 0xCC, 0x01, 0x3D, 0x3E, 0x99, 0x02, 0x00,
+ 0x68, 0x00, 0x96, 0x03, 0x00, 0x09, 0x2B, 0x01, 0x1C, 0x96, 0x02, 0x00, 0x08, 0xF9, 0x1C, 0x54,
+ 0x9D, 0x02, 0x00, 0x2D, 0x00, 0x96, 0x03, 0x00, 0x09, 0x2B, 0x01, 0x1C, 0x96, 0x07, 0x00, 0x07,
+ 0x01, 0x00, 0x00, 0x00, 0x08, 0x04, 0x1C, 0x96, 0x03, 0x00, 0x09, 0x84, 0x01, 0x4E, 0x96, 0x03,
+ 0x00, 0x09, 0x85, 0x01, 0x4E, 0x96, 0x03, 0x00, 0x09, 0xD3, 0x01, 0x52, 0x3E, 0x99, 0x02, 0x00,
+ 0x28, 0x00, 0x96, 0x03, 0x00, 0x09, 0x2B, 0x01, 0x1C, 0x96, 0x07, 0x00, 0x07, 0x01, 0x00, 0x00,
+ 0x00, 0x08, 0x04, 0x1C, 0x96, 0x03, 0x00, 0x09, 0x84, 0x01, 0x4E, 0x96, 0x03, 0x00, 0x09, 0x85,
+ 0x01, 0x4E, 0x96, 0x03, 0x00, 0x09, 0xCF, 0x01, 0x52, 0x3E, 0x99, 0x02, 0x00, 0x53, 0x00, 0x96,
+ 0x06, 0x00, 0x09, 0xD8, 0x01, 0x09, 0x2B, 0x01, 0x1C, 0x96, 0x07, 0x00, 0x07, 0x01, 0x00, 0x00,
+ 0x00, 0x08, 0x04, 0x1C, 0x96, 0x03, 0x00, 0x09, 0x84, 0x01, 0x4E, 0x96, 0x03, 0x00, 0x09, 0x85,
+ 0x01, 0x4E, 0x96, 0x03, 0x00, 0x09, 0xCD, 0x01, 0x52, 0x96, 0x07, 0x00, 0x07, 0x01, 0x00, 0x00,
+ 0x00, 0x08, 0x04, 0x1C, 0x96, 0x03, 0x00, 0x09, 0x84, 0x01, 0x4E, 0x96, 0x03, 0x00, 0x09, 0x85,
+ 0x01, 0x4E, 0x96, 0x03, 0x00, 0x09, 0xD9, 0x01, 0x52, 0x47, 0x96, 0x03, 0x00, 0x09, 0xD8, 0x01,
+ 0x47, 0x3E, 0x4F, 0x96, 0x0A, 0x00, 0x09, 0xDA, 0x01, 0x07, 0x0E, 0x00, 0x00, 0x00, 0x08, 0x04,
+ 0x1C, 0x96, 0x03, 0x00, 0x09, 0x84, 0x01, 0x4E, 0x96, 0x03, 0x00, 0x09, 0x85, 0x01, 0x4E, 0x96,
0x07, 0x00, 0x07, 0x03, 0x00, 0x00, 0x00, 0x08, 0x02, 0x3D, 0x17, 0x96, 0x0F, 0x00, 0x07, 0x64,
- 0x00, 0x00, 0x00, 0x09, 0xD9, 0x01, 0x07, 0x0E, 0x00, 0x00, 0x00, 0x08, 0x04, 0x1C, 0x96, 0x03,
- 0x00, 0x09, 0x82, 0x01, 0x4E, 0x96, 0x03, 0x00, 0x09, 0x83, 0x01, 0x4E, 0x96, 0x07, 0x00, 0x07,
+ 0x00, 0x00, 0x00, 0x09, 0xDB, 0x01, 0x07, 0x0E, 0x00, 0x00, 0x00, 0x08, 0x04, 0x1C, 0x96, 0x03,
+ 0x00, 0x09, 0x84, 0x01, 0x4E, 0x96, 0x03, 0x00, 0x09, 0x85, 0x01, 0x4E, 0x96, 0x07, 0x00, 0x07,
0x04, 0x00, 0x00, 0x00, 0x08, 0x03, 0x3D, 0x17, 0x96, 0x08, 0x00, 0x07, 0x07, 0x10, 0x00, 0x00,
- 0x02, 0x08, 0x04, 0x1C, 0x96, 0x03, 0x00, 0x09, 0x82, 0x01, 0x4E, 0x96, 0x03, 0x00, 0x09, 0x83,
+ 0x02, 0x08, 0x04, 0x1C, 0x96, 0x03, 0x00, 0x09, 0x84, 0x01, 0x4E, 0x96, 0x03, 0x00, 0x09, 0x85,
0x01, 0x4E, 0x96, 0x07, 0x00, 0x07, 0x03, 0x00, 0x00, 0x00, 0x08, 0x00, 0x3D, 0x17, 0x96, 0x03,
- 0x00, 0x09, 0xDA, 0x01, 0x1C, 0x96, 0x03, 0x00, 0x09, 0xDB, 0x01, 0x8E, 0x08, 0x00, 0x00, 0x00,
+ 0x00, 0x09, 0xDC, 0x01, 0x1C, 0x96, 0x03, 0x00, 0x09, 0xDD, 0x01, 0x8E, 0x08, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x1F, 0x00, 0x96, 0x07, 0x00, 0x08, 0x1C, 0x07, 0x00, 0x00, 0x00, 0x00,
0x43, 0x3C, 0x96, 0x07, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 0x08, 0x1C, 0x1C, 0x96, 0x03, 0x00,
- 0x09, 0xDC, 0x01, 0x52, 0x17, 0x4F, 0x96, 0x03, 0x00, 0x09, 0xDA, 0x01, 0x1C, 0x96, 0x03, 0x00,
- 0x09, 0xDD, 0x01, 0x8E, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1F, 0x00, 0x96, 0x07,
+ 0x09, 0xDE, 0x01, 0x52, 0x17, 0x4F, 0x96, 0x03, 0x00, 0x09, 0xDC, 0x01, 0x1C, 0x96, 0x03, 0x00,
+ 0x09, 0xDF, 0x01, 0x8E, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1F, 0x00, 0x96, 0x07,
0x00, 0x08, 0x1C, 0x07, 0x00, 0x00, 0x00, 0x00, 0x43, 0x3C, 0x96, 0x07, 0x00, 0x07, 0x00, 0x00,
- 0x00, 0x00, 0x08, 0x1C, 0x1C, 0x96, 0x03, 0x00, 0x09, 0xDE, 0x01, 0x52, 0x17, 0x4F, 0x96, 0x03,
- 0x00, 0x09, 0xDA, 0x01, 0x1C, 0x96, 0x03, 0x00, 0x09, 0xDF, 0x01, 0x8E, 0x08, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x08, 0x1C, 0x1C, 0x96, 0x03, 0x00, 0x09, 0xE0, 0x01, 0x52, 0x17, 0x4F, 0x96, 0x03,
+ 0x00, 0x09, 0xDC, 0x01, 0x1C, 0x96, 0x03, 0x00, 0x09, 0xE1, 0x01, 0x8E, 0x08, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x1F, 0x00, 0x96, 0x07, 0x00, 0x08, 0x1C, 0x07, 0x00, 0x00, 0x00, 0x00,
0x43, 0x3C, 0x96, 0x07, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 0x08, 0x1C, 0x1C, 0x96, 0x03, 0x00,
- 0x09, 0xE0, 0x01, 0x52, 0x17, 0x4F, 0x96, 0x03, 0x00, 0x09, 0xDA, 0x01, 0x1C, 0x96, 0x03, 0x00,
- 0x09, 0xE1, 0x01, 0x8E, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1F, 0x00, 0x96, 0x07,
+ 0x09, 0xE2, 0x01, 0x52, 0x17, 0x4F, 0x96, 0x03, 0x00, 0x09, 0xDC, 0x01, 0x1C, 0x96, 0x03, 0x00,
+ 0x09, 0xE3, 0x01, 0x8E, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1F, 0x00, 0x96, 0x07,
0x00, 0x08, 0x1C, 0x07, 0x00, 0x00, 0x00, 0x00, 0x43, 0x3C, 0x96, 0x07, 0x00, 0x07, 0x00, 0x00,
- 0x00, 0x00, 0x08, 0x1C, 0x1C, 0x96, 0x03, 0x00, 0x09, 0xE2, 0x01, 0x52, 0x17, 0x4F, 0x96, 0x0B,
- 0x00, 0x07, 0x01, 0x00, 0x00, 0x00, 0x09, 0xE3, 0x01, 0x09, 0xDA, 0x01, 0x1C, 0x96, 0x07, 0x00,
- 0x07, 0x03, 0x00, 0x00, 0x00, 0x08, 0x00, 0x3D, 0x17, 0x96, 0x0B, 0x00, 0x09, 0xE4, 0x01, 0x07,
- 0x3A, 0x08, 0x00, 0x00, 0x09, 0xDA, 0x01, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x0D, 0x4E, 0x96, 0x07,
+ 0x00, 0x00, 0x08, 0x1C, 0x1C, 0x96, 0x03, 0x00, 0x09, 0xE4, 0x01, 0x52, 0x17, 0x4F, 0x96, 0x0B,
+ 0x00, 0x07, 0x01, 0x00, 0x00, 0x00, 0x09, 0xE5, 0x01, 0x09, 0xDC, 0x01, 0x1C, 0x96, 0x07, 0x00,
+ 0x07, 0x03, 0x00, 0x00, 0x00, 0x08, 0x00, 0x3D, 0x17, 0x96, 0x0B, 0x00, 0x09, 0xE6, 0x01, 0x07,
+ 0x3A, 0x08, 0x00, 0x00, 0x09, 0xDC, 0x01, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x0D, 0x4E, 0x96, 0x07,
0x00, 0x07, 0x03, 0x00, 0x00, 0x00, 0x08, 0x02, 0x3D, 0x17, 0x96, 0x09, 0x00, 0x07, 0x03, 0x00,
- 0x00, 0x00, 0x02, 0x09, 0xDA, 0x01, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x0D, 0x4E, 0x96, 0x07, 0x00,
- 0x07, 0x03, 0x00, 0x00, 0x00, 0x08, 0x00, 0x3D, 0x17, 0x96, 0x03, 0x00, 0x09, 0xE7, 0x01, 0x1C,
- 0x96, 0x03, 0x00, 0x09, 0xE8, 0x01, 0x8E, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1F,
+ 0x00, 0x00, 0x02, 0x09, 0xDC, 0x01, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x0D, 0x4E, 0x96, 0x07, 0x00,
+ 0x07, 0x03, 0x00, 0x00, 0x00, 0x08, 0x00, 0x3D, 0x17, 0x96, 0x03, 0x00, 0x09, 0xE9, 0x01, 0x1C,
+ 0x96, 0x03, 0x00, 0x09, 0xEA, 0x01, 0x8E, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1F,
0x00, 0x96, 0x07, 0x00, 0x08, 0x1C, 0x07, 0x00, 0x00, 0x00, 0x00, 0x43, 0x3C, 0x96, 0x07, 0x00,
- 0x07, 0x00, 0x00, 0x00, 0x00, 0x08, 0x1C, 0x1C, 0x96, 0x03, 0x00, 0x09, 0xE9, 0x01, 0x52, 0x17,
- 0x4F, 0x96, 0x0B, 0x00, 0x07, 0x01, 0x00, 0x00, 0x00, 0x09, 0xE8, 0x01, 0x09, 0xE7, 0x01, 0x1C,
+ 0x07, 0x00, 0x00, 0x00, 0x00, 0x08, 0x1C, 0x1C, 0x96, 0x03, 0x00, 0x09, 0xEB, 0x01, 0x52, 0x17,
+ 0x4F, 0x96, 0x0B, 0x00, 0x07, 0x01, 0x00, 0x00, 0x00, 0x09, 0xEA, 0x01, 0x09, 0xE9, 0x01, 0x1C,
0x96, 0x07, 0x00, 0x07, 0x03, 0x00, 0x00, 0x00, 0x08, 0x00, 0x3D, 0x17, 0x96, 0x14, 0x00, 0x09,
- 0xEA, 0x01, 0x07, 0x00, 0x00, 0x00, 0x00, 0x07, 0x69, 0x00, 0x00, 0x00, 0x07, 0x02, 0x00, 0x00,
- 0x00, 0x08, 0x39, 0x3D, 0x1D, 0x96, 0x03, 0x00, 0x09, 0xEA, 0x01, 0x1C, 0x96, 0x02, 0x00, 0x08,
- 0x0D, 0x4E, 0x96, 0x04, 0x00, 0x08, 0x97, 0x05, 0x01, 0x4F, 0x96, 0x03, 0x00, 0x09, 0xEA, 0x01,
+ 0xEC, 0x01, 0x07, 0x00, 0x00, 0x00, 0x00, 0x07, 0x69, 0x00, 0x00, 0x00, 0x07, 0x02, 0x00, 0x00,
+ 0x00, 0x08, 0x39, 0x3D, 0x1D, 0x96, 0x03, 0x00, 0x09, 0xEC, 0x01, 0x1C, 0x96, 0x02, 0x00, 0x08,
+ 0x0D, 0x4E, 0x96, 0x04, 0x00, 0x08, 0x97, 0x05, 0x01, 0x4F, 0x96, 0x03, 0x00, 0x09, 0xEC, 0x01,
0x1C, 0x96, 0x02, 0x00, 0x08, 0x0D, 0x4E, 0x96, 0x04, 0x00, 0x08, 0x98, 0x05, 0x01, 0x4F, 0x96,
- 0x03, 0x00, 0x09, 0xEA, 0x01, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x0D, 0x4E, 0x96, 0x14, 0x00, 0x09,
- 0xEB, 0x01, 0x07, 0x03, 0x00, 0x00, 0x00, 0x07, 0x69, 0x00, 0x00, 0x00, 0x07, 0x02, 0x00, 0x00,
- 0x00, 0x08, 0x01, 0x3D, 0x4F, 0x96, 0x10, 0x00, 0x07, 0x04, 0x00, 0x00, 0x00, 0x09, 0xEC, 0x01,
- 0x07, 0x69, 0x00, 0x00, 0x00, 0x09, 0xEA, 0x01, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x0D, 0x4E, 0x96,
+ 0x03, 0x00, 0x09, 0xEC, 0x01, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x0D, 0x4E, 0x96, 0x14, 0x00, 0x09,
+ 0xED, 0x01, 0x07, 0x03, 0x00, 0x00, 0x00, 0x07, 0x69, 0x00, 0x00, 0x00, 0x07, 0x02, 0x00, 0x00,
+ 0x00, 0x08, 0x01, 0x3D, 0x4F, 0x96, 0x10, 0x00, 0x07, 0x04, 0x00, 0x00, 0x00, 0x09, 0xEE, 0x01,
+ 0x07, 0x69, 0x00, 0x00, 0x00, 0x09, 0xEC, 0x01, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x0D, 0x4E, 0x96,
0x07, 0x00, 0x07, 0x04, 0x00, 0x00, 0x00, 0x08, 0x03, 0x3D, 0x17, 0x96, 0x0F, 0x00, 0x07, 0xC8,
- 0x00, 0x00, 0x00, 0x08, 0xB6, 0x07, 0x84, 0x03, 0x00, 0x00, 0x09, 0xEA, 0x01, 0x1C, 0x96, 0x02,
+ 0x00, 0x00, 0x00, 0x08, 0xB6, 0x07, 0x84, 0x03, 0x00, 0x00, 0x09, 0xEC, 0x01, 0x1C, 0x96, 0x02,
0x00, 0x08, 0x0D, 0x4E, 0x96, 0x07, 0x00, 0x07, 0x04, 0x00, 0x00, 0x00, 0x08, 0x03, 0x3D, 0x17,
- 0x96, 0x02, 0x00, 0x08, 0x04, 0x1C, 0x96, 0x08, 0x00, 0x09, 0xED, 0x01, 0x07, 0x00, 0x00, 0x00,
- 0x00, 0x43, 0x4F, 0x96, 0x02, 0x00, 0x08, 0x04, 0x1C, 0x96, 0x03, 0x00, 0x09, 0xED, 0x01, 0x4E,
- 0x96, 0x14, 0x00, 0x09, 0xEE, 0x01, 0x07, 0x00, 0x00, 0x00, 0x00, 0x07, 0x58, 0x04, 0x00, 0x00,
+ 0x96, 0x02, 0x00, 0x08, 0x04, 0x1C, 0x96, 0x08, 0x00, 0x09, 0xEF, 0x01, 0x07, 0x00, 0x00, 0x00,
+ 0x00, 0x43, 0x4F, 0x96, 0x02, 0x00, 0x08, 0x04, 0x1C, 0x96, 0x03, 0x00, 0x09, 0xEF, 0x01, 0x4E,
+ 0x96, 0x14, 0x00, 0x09, 0xF0, 0x01, 0x07, 0x00, 0x00, 0x00, 0x00, 0x07, 0x58, 0x04, 0x00, 0x00,
0x07, 0x02, 0x00, 0x00, 0x00, 0x08, 0x39, 0x3D, 0x4F, 0x96, 0x0F, 0x00, 0x07, 0x01, 0x00, 0x00,
- 0x00, 0x09, 0xEF, 0x01, 0x07, 0x58, 0x04, 0x00, 0x00, 0x08, 0x04, 0x1C, 0x96, 0x03, 0x00, 0x09,
- 0xED, 0x01, 0x4E, 0x96, 0x03, 0x00, 0x09, 0xEE, 0x01, 0x4E, 0x96, 0x02, 0x00, 0x08, 0x0D, 0x4E,
+ 0x00, 0x09, 0xF1, 0x01, 0x07, 0x58, 0x04, 0x00, 0x00, 0x08, 0x04, 0x1C, 0x96, 0x03, 0x00, 0x09,
+ 0xEF, 0x01, 0x4E, 0x96, 0x03, 0x00, 0x09, 0xF0, 0x01, 0x4E, 0x96, 0x02, 0x00, 0x08, 0x0D, 0x4E,
0x96, 0x07, 0x00, 0x07, 0x04, 0x00, 0x00, 0x00, 0x08, 0x02, 0x3D, 0x17, 0x96, 0x02, 0x00, 0x08,
- 0x04, 0x1C, 0x96, 0x03, 0x00, 0x09, 0xED, 0x01, 0x4E, 0x96, 0x14, 0x00, 0x09, 0xF0, 0x01, 0x07,
+ 0x04, 0x1C, 0x96, 0x03, 0x00, 0x09, 0xEF, 0x01, 0x4E, 0x96, 0x14, 0x00, 0x09, 0xF2, 0x01, 0x07,
0x00, 0x00, 0x00, 0x00, 0x07, 0x53, 0x04, 0x00, 0x00, 0x07, 0x02, 0x00, 0x00, 0x00, 0x08, 0x39,
- 0x3D, 0x4F, 0x96, 0x02, 0x00, 0x08, 0x04, 0x1C, 0x96, 0x03, 0x00, 0x09, 0xED, 0x01, 0x4E, 0x96,
- 0x03, 0x00, 0x09, 0xF0, 0x01, 0x4E, 0x96, 0x09, 0x00, 0x08, 0x0D, 0x07, 0x00, 0x00, 0x00, 0x00,
- 0x08, 0x04, 0x1C, 0x96, 0x03, 0x00, 0x09, 0xED, 0x01, 0x4E, 0x96, 0x03, 0x00, 0x09, 0xEE, 0x01,
- 0x53, 0x4F, 0x96, 0x02, 0x00, 0x08, 0x04, 0x1C, 0x96, 0x03, 0x00, 0x09, 0xED, 0x01, 0x4E, 0x96,
- 0x03, 0x00, 0x09, 0xF0, 0x01, 0x4E, 0x96, 0x02, 0x00, 0x08, 0x0D, 0x4E, 0x96, 0x02, 0x00, 0x08,
- 0x69, 0x3A, 0x17, 0x96, 0x0F, 0x00, 0x07, 0x01, 0x00, 0x00, 0x00, 0x09, 0xF1, 0x01, 0x07, 0x53,
- 0x04, 0x00, 0x00, 0x08, 0x04, 0x1C, 0x96, 0x03, 0x00, 0x09, 0xED, 0x01, 0x4E, 0x96, 0x03, 0x00,
- 0x09, 0xF0, 0x01, 0x4E, 0x96, 0x02, 0x00, 0x08, 0x0D, 0x4E, 0x96, 0x07, 0x00, 0x07, 0x04, 0x00,
+ 0x3D, 0x4F, 0x96, 0x02, 0x00, 0x08, 0x04, 0x1C, 0x96, 0x03, 0x00, 0x09, 0xEF, 0x01, 0x4E, 0x96,
+ 0x03, 0x00, 0x09, 0xF2, 0x01, 0x4E, 0x96, 0x09, 0x00, 0x08, 0x0D, 0x07, 0x00, 0x00, 0x00, 0x00,
+ 0x08, 0x04, 0x1C, 0x96, 0x03, 0x00, 0x09, 0xEF, 0x01, 0x4E, 0x96, 0x03, 0x00, 0x09, 0xF0, 0x01,
+ 0x53, 0x4F, 0x96, 0x02, 0x00, 0x08, 0x04, 0x1C, 0x96, 0x03, 0x00, 0x09, 0xEF, 0x01, 0x4E, 0x96,
+ 0x03, 0x00, 0x09, 0xF2, 0x01, 0x4E, 0x96, 0x02, 0x00, 0x08, 0x0D, 0x4E, 0x96, 0x02, 0x00, 0x08,
+ 0x69, 0x3A, 0x17, 0x96, 0x0F, 0x00, 0x07, 0x01, 0x00, 0x00, 0x00, 0x09, 0xF3, 0x01, 0x07, 0x53,
+ 0x04, 0x00, 0x00, 0x08, 0x04, 0x1C, 0x96, 0x03, 0x00, 0x09, 0xEF, 0x01, 0x4E, 0x96, 0x03, 0x00,
+ 0x09, 0xF2, 0x01, 0x4E, 0x96, 0x02, 0x00, 0x08, 0x0D, 0x4E, 0x96, 0x07, 0x00, 0x07, 0x04, 0x00,
0x00, 0x00, 0x08, 0x03, 0x3D, 0x17, 0x96, 0x02, 0x00, 0x08, 0x04, 0x1C, 0x96, 0x03, 0x00, 0x09,
- 0xED, 0x01, 0x4E, 0x96, 0x14, 0x00, 0x09, 0xF2, 0x01, 0x07, 0x00, 0x00, 0x00, 0x00, 0x07, 0x4E,
+ 0xEF, 0x01, 0x4E, 0x96, 0x14, 0x00, 0x09, 0xF4, 0x01, 0x07, 0x00, 0x00, 0x00, 0x00, 0x07, 0x4E,
0x04, 0x00, 0x00, 0x07, 0x02, 0x00, 0x00, 0x00, 0x08, 0x39, 0x3D, 0x4F, 0x96, 0x02, 0x00, 0x08,
- 0x04, 0x1C, 0x96, 0x03, 0x00, 0x09, 0xED, 0x01, 0x4E, 0x96, 0x03, 0x00, 0x09, 0xF2, 0x01, 0x4E,
+ 0x04, 0x1C, 0x96, 0x03, 0x00, 0x09, 0xEF, 0x01, 0x4E, 0x96, 0x03, 0x00, 0x09, 0xF4, 0x01, 0x4E,
0x96, 0x09, 0x00, 0x08, 0x0D, 0x07, 0x00, 0x00, 0x00, 0x00, 0x08, 0x04, 0x1C, 0x96, 0x03, 0x00,
- 0x09, 0xED, 0x01, 0x4E, 0x96, 0x03, 0x00, 0x09, 0xEE, 0x01, 0x53, 0x4F, 0x96, 0x02, 0x00, 0x08,
- 0x04, 0x1C, 0x96, 0x03, 0x00, 0x09, 0xED, 0x01, 0x4E, 0x96, 0x03, 0x00, 0x09, 0xF2, 0x01, 0x4E,
+ 0x09, 0xEF, 0x01, 0x4E, 0x96, 0x03, 0x00, 0x09, 0xF0, 0x01, 0x53, 0x4F, 0x96, 0x02, 0x00, 0x08,
+ 0x04, 0x1C, 0x96, 0x03, 0x00, 0x09, 0xEF, 0x01, 0x4E, 0x96, 0x03, 0x00, 0x09, 0xF4, 0x01, 0x4E,
0x96, 0x02, 0x00, 0x08, 0x0D, 0x4E, 0x96, 0x02, 0x00, 0x08, 0x69, 0x3A, 0x17, 0x96, 0x0F, 0x00,
- 0x07, 0x01, 0x00, 0x00, 0x00, 0x09, 0xF3, 0x01, 0x07, 0x4E, 0x04, 0x00, 0x00, 0x08, 0x04, 0x1C,
- 0x96, 0x03, 0x00, 0x09, 0xED, 0x01, 0x4E, 0x96, 0x03, 0x00, 0x09, 0xF2, 0x01, 0x4E, 0x96, 0x02,
+ 0x07, 0x01, 0x00, 0x00, 0x00, 0x09, 0xF5, 0x01, 0x07, 0x4E, 0x04, 0x00, 0x00, 0x08, 0x04, 0x1C,
+ 0x96, 0x03, 0x00, 0x09, 0xEF, 0x01, 0x4E, 0x96, 0x03, 0x00, 0x09, 0xF4, 0x01, 0x4E, 0x96, 0x02,
0x00, 0x08, 0x0D, 0x4E, 0x96, 0x07, 0x00, 0x07, 0x04, 0x00, 0x00, 0x00, 0x08, 0x03, 0x3D, 0x17,
- 0x96, 0x02, 0x00, 0x08, 0x04, 0x1C, 0x96, 0x03, 0x00, 0x09, 0xED, 0x01, 0x4E, 0x96, 0x14, 0x00,
- 0x09, 0xF4, 0x01, 0x07, 0x00, 0x00, 0x00, 0x00, 0x07, 0x56, 0x04, 0x00, 0x00, 0x07, 0x02, 0x00,
+ 0x96, 0x02, 0x00, 0x08, 0x04, 0x1C, 0x96, 0x03, 0x00, 0x09, 0xEF, 0x01, 0x4E, 0x96, 0x14, 0x00,
+ 0x09, 0xF6, 0x01, 0x07, 0x00, 0x00, 0x00, 0x00, 0x07, 0x56, 0x04, 0x00, 0x00, 0x07, 0x02, 0x00,
0x00, 0x00, 0x08, 0x39, 0x3D, 0x4F, 0x96, 0x02, 0x00, 0x08, 0x04, 0x1C, 0x96, 0x03, 0x00, 0x09,
- 0xED, 0x01, 0x4E, 0x96, 0x03, 0x00, 0x09, 0xF4, 0x01, 0x4E, 0x96, 0x09, 0x00, 0x08, 0x0D, 0x07,
- 0x00, 0x00, 0x00, 0x00, 0x08, 0x04, 0x1C, 0x96, 0x03, 0x00, 0x09, 0xED, 0x01, 0x4E, 0x96, 0x03,
- 0x00, 0x09, 0xEE, 0x01, 0x53, 0x4F, 0x96, 0x02, 0x00, 0x08, 0x04, 0x1C, 0x96, 0x03, 0x00, 0x09,
- 0xED, 0x01, 0x4E, 0x96, 0x03, 0x00, 0x09, 0xF4, 0x01, 0x4E, 0x96, 0x02, 0x00, 0x08, 0x0D, 0x4E,
+ 0xEF, 0x01, 0x4E, 0x96, 0x03, 0x00, 0x09, 0xF6, 0x01, 0x4E, 0x96, 0x09, 0x00, 0x08, 0x0D, 0x07,
+ 0x00, 0x00, 0x00, 0x00, 0x08, 0x04, 0x1C, 0x96, 0x03, 0x00, 0x09, 0xEF, 0x01, 0x4E, 0x96, 0x03,
+ 0x00, 0x09, 0xF0, 0x01, 0x53, 0x4F, 0x96, 0x02, 0x00, 0x08, 0x04, 0x1C, 0x96, 0x03, 0x00, 0x09,
+ 0xEF, 0x01, 0x4E, 0x96, 0x03, 0x00, 0x09, 0xF6, 0x01, 0x4E, 0x96, 0x02, 0x00, 0x08, 0x0D, 0x4E,
0x96, 0x02, 0x00, 0x08, 0x69, 0x3A, 0x17, 0x96, 0x0F, 0x00, 0x07, 0x01, 0x00, 0x00, 0x00, 0x09,
- 0xF5, 0x01, 0x07, 0x56, 0x04, 0x00, 0x00, 0x08, 0x04, 0x1C, 0x96, 0x03, 0x00, 0x09, 0xED, 0x01,
- 0x4E, 0x96, 0x03, 0x00, 0x09, 0xF4, 0x01, 0x4E, 0x96, 0x02, 0x00, 0x08, 0x0D, 0x4E, 0x96, 0x07,
+ 0xF7, 0x01, 0x07, 0x56, 0x04, 0x00, 0x00, 0x08, 0x04, 0x1C, 0x96, 0x03, 0x00, 0x09, 0xEF, 0x01,
+ 0x4E, 0x96, 0x03, 0x00, 0x09, 0xF6, 0x01, 0x4E, 0x96, 0x02, 0x00, 0x08, 0x0D, 0x4E, 0x96, 0x07,
0x00, 0x07, 0x04, 0x00, 0x00, 0x00, 0x08, 0x03, 0x3D, 0x17, 0x96, 0x02, 0x00, 0x08, 0x04, 0x1C,
- 0x96, 0x03, 0x00, 0x09, 0xED, 0x01, 0x4E, 0x96, 0x14, 0x00, 0x09, 0xF6, 0x01, 0x07, 0x00, 0x00,
+ 0x96, 0x03, 0x00, 0x09, 0xEF, 0x01, 0x4E, 0x96, 0x14, 0x00, 0x09, 0xF8, 0x01, 0x07, 0x00, 0x00,
0x00, 0x00, 0x07, 0x55, 0x04, 0x00, 0x00, 0x07, 0x02, 0x00, 0x00, 0x00, 0x08, 0x39, 0x3D, 0x4F,
- 0x96, 0x02, 0x00, 0x08, 0x04, 0x1C, 0x96, 0x03, 0x00, 0x09, 0xED, 0x01, 0x4E, 0x96, 0x03, 0x00,
- 0x09, 0xF6, 0x01, 0x4E, 0x96, 0x09, 0x00, 0x08, 0x0D, 0x07, 0x00, 0x00, 0x00, 0x00, 0x08, 0x04,
- 0x1C, 0x96, 0x03, 0x00, 0x09, 0xED, 0x01, 0x4E, 0x96, 0x03, 0x00, 0x09, 0xEE, 0x01, 0x53, 0x4F,
- 0x96, 0x02, 0x00, 0x08, 0x04, 0x1C, 0x96, 0x03, 0x00, 0x09, 0xED, 0x01, 0x4E, 0x96, 0x03, 0x00,
- 0x09, 0xF6, 0x01, 0x4E, 0x96, 0x02, 0x00, 0x08, 0x0D, 0x4E, 0x96, 0x02, 0x00, 0x08, 0x69, 0x3A,
- 0x17, 0x96, 0x0F, 0x00, 0x07, 0x01, 0x00, 0x00, 0x00, 0x09, 0xF7, 0x01, 0x07, 0x55, 0x04, 0x00,
- 0x00, 0x08, 0x04, 0x1C, 0x96, 0x03, 0x00, 0x09, 0xED, 0x01, 0x4E, 0x96, 0x03, 0x00, 0x09, 0xF6,
+ 0x96, 0x02, 0x00, 0x08, 0x04, 0x1C, 0x96, 0x03, 0x00, 0x09, 0xEF, 0x01, 0x4E, 0x96, 0x03, 0x00,
+ 0x09, 0xF8, 0x01, 0x4E, 0x96, 0x09, 0x00, 0x08, 0x0D, 0x07, 0x00, 0x00, 0x00, 0x00, 0x08, 0x04,
+ 0x1C, 0x96, 0x03, 0x00, 0x09, 0xEF, 0x01, 0x4E, 0x96, 0x03, 0x00, 0x09, 0xF0, 0x01, 0x53, 0x4F,
+ 0x96, 0x02, 0x00, 0x08, 0x04, 0x1C, 0x96, 0x03, 0x00, 0x09, 0xEF, 0x01, 0x4E, 0x96, 0x03, 0x00,
+ 0x09, 0xF8, 0x01, 0x4E, 0x96, 0x02, 0x00, 0x08, 0x0D, 0x4E, 0x96, 0x02, 0x00, 0x08, 0x69, 0x3A,
+ 0x17, 0x96, 0x0F, 0x00, 0x07, 0x01, 0x00, 0x00, 0x00, 0x09, 0xF9, 0x01, 0x07, 0x55, 0x04, 0x00,
+ 0x00, 0x08, 0x04, 0x1C, 0x96, 0x03, 0x00, 0x09, 0xEF, 0x01, 0x4E, 0x96, 0x03, 0x00, 0x09, 0xF8,
0x01, 0x4E, 0x96, 0x02, 0x00, 0x08, 0x0D, 0x4E, 0x96, 0x07, 0x00, 0x07, 0x04, 0x00, 0x00, 0x00,
- 0x08, 0x03, 0x3D, 0x17, 0x96, 0x02, 0x00, 0x08, 0x04, 0x1C, 0x96, 0x03, 0x00, 0x09, 0xED, 0x01,
- 0x4E, 0x96, 0x14, 0x00, 0x09, 0xF8, 0x01, 0x07, 0x00, 0x00, 0x00, 0x00, 0x07, 0x57, 0x04, 0x00,
+ 0x08, 0x03, 0x3D, 0x17, 0x96, 0x02, 0x00, 0x08, 0x04, 0x1C, 0x96, 0x03, 0x00, 0x09, 0xEF, 0x01,
+ 0x4E, 0x96, 0x14, 0x00, 0x09, 0xFA, 0x01, 0x07, 0x00, 0x00, 0x00, 0x00, 0x07, 0x57, 0x04, 0x00,
0x00, 0x07, 0x02, 0x00, 0x00, 0x00, 0x08, 0x39, 0x3D, 0x4F, 0x96, 0x02, 0x00, 0x08, 0x04, 0x1C,
- 0x96, 0x03, 0x00, 0x09, 0xED, 0x01, 0x4E, 0x96, 0x03, 0x00, 0x09, 0xF8, 0x01, 0x4E, 0x96, 0x09,
- 0x00, 0x08, 0x0D, 0x07, 0x00, 0x00, 0x00, 0x00, 0x08, 0x04, 0x1C, 0x96, 0x03, 0x00, 0x09, 0xED,
- 0x01, 0x4E, 0x96, 0x03, 0x00, 0x09, 0xEE, 0x01, 0x53, 0x4F, 0x96, 0x02, 0x00, 0x08, 0x04, 0x1C,
- 0x96, 0x03, 0x00, 0x09, 0xED, 0x01, 0x4E, 0x96, 0x03, 0x00, 0x09, 0xF8, 0x01, 0x4E, 0x96, 0x02,
+ 0x96, 0x03, 0x00, 0x09, 0xEF, 0x01, 0x4E, 0x96, 0x03, 0x00, 0x09, 0xFA, 0x01, 0x4E, 0x96, 0x09,
+ 0x00, 0x08, 0x0D, 0x07, 0x00, 0x00, 0x00, 0x00, 0x08, 0x04, 0x1C, 0x96, 0x03, 0x00, 0x09, 0xEF,
+ 0x01, 0x4E, 0x96, 0x03, 0x00, 0x09, 0xF0, 0x01, 0x53, 0x4F, 0x96, 0x02, 0x00, 0x08, 0x04, 0x1C,
+ 0x96, 0x03, 0x00, 0x09, 0xEF, 0x01, 0x4E, 0x96, 0x03, 0x00, 0x09, 0xFA, 0x01, 0x4E, 0x96, 0x02,
0x00, 0x08, 0x0D, 0x4E, 0x96, 0x02, 0x00, 0x08, 0x69, 0x3A, 0x17, 0x96, 0x0F, 0x00, 0x07, 0x01,
- 0x00, 0x00, 0x00, 0x09, 0xF9, 0x01, 0x07, 0x57, 0x04, 0x00, 0x00, 0x08, 0x04, 0x1C, 0x96, 0x03,
- 0x00, 0x09, 0xED, 0x01, 0x4E, 0x96, 0x03, 0x00, 0x09, 0xF8, 0x01, 0x4E, 0x96, 0x02, 0x00, 0x08,
+ 0x00, 0x00, 0x00, 0x09, 0xFB, 0x01, 0x07, 0x57, 0x04, 0x00, 0x00, 0x08, 0x04, 0x1C, 0x96, 0x03,
+ 0x00, 0x09, 0xEF, 0x01, 0x4E, 0x96, 0x03, 0x00, 0x09, 0xFA, 0x01, 0x4E, 0x96, 0x02, 0x00, 0x08,
0x0D, 0x4E, 0x96, 0x07, 0x00, 0x07, 0x04, 0x00, 0x00, 0x00, 0x08, 0x03, 0x3D, 0x17, 0x96, 0x02,
- 0x00, 0x08, 0x04, 0x1C, 0x96, 0x03, 0x00, 0x09, 0xED, 0x01, 0x4E, 0x96, 0x14, 0x00, 0x09, 0xFA,
+ 0x00, 0x08, 0x04, 0x1C, 0x96, 0x03, 0x00, 0x09, 0xEF, 0x01, 0x4E, 0x96, 0x14, 0x00, 0x09, 0xFC,
0x01, 0x07, 0x00, 0x00, 0x00, 0x00, 0x07, 0x4D, 0x04, 0x00, 0x00, 0x07, 0x02, 0x00, 0x00, 0x00,
- 0x08, 0x39, 0x3D, 0x4F, 0x96, 0x02, 0x00, 0x08, 0x04, 0x1C, 0x96, 0x03, 0x00, 0x09, 0xED, 0x01,
- 0x4E, 0x96, 0x03, 0x00, 0x09, 0xFA, 0x01, 0x4E, 0x96, 0x09, 0x00, 0x08, 0x0D, 0x07, 0x00, 0x00,
- 0x00, 0x00, 0x08, 0x04, 0x1C, 0x96, 0x03, 0x00, 0x09, 0xED, 0x01, 0x4E, 0x96, 0x03, 0x00, 0x09,
- 0xEE, 0x01, 0x53, 0x4F, 0x96, 0x02, 0x00, 0x08, 0x04, 0x1C, 0x96, 0x03, 0x00, 0x09, 0xED, 0x01,
- 0x4E, 0x96, 0x03, 0x00, 0x09, 0xFA, 0x01, 0x4E, 0x96, 0x02, 0x00, 0x08, 0x0D, 0x4E, 0x96, 0x02,
- 0x00, 0x08, 0x69, 0x3A, 0x17, 0x96, 0x0F, 0x00, 0x07, 0x01, 0x00, 0x00, 0x00, 0x09, 0xFB, 0x01,
- 0x07, 0x4D, 0x04, 0x00, 0x00, 0x08, 0x04, 0x1C, 0x96, 0x03, 0x00, 0x09, 0xED, 0x01, 0x4E, 0x96,
- 0x03, 0x00, 0x09, 0xFA, 0x01, 0x4E, 0x96, 0x02, 0x00, 0x08, 0x0D, 0x4E, 0x96, 0x07, 0x00, 0x07,
+ 0x08, 0x39, 0x3D, 0x4F, 0x96, 0x02, 0x00, 0x08, 0x04, 0x1C, 0x96, 0x03, 0x00, 0x09, 0xEF, 0x01,
+ 0x4E, 0x96, 0x03, 0x00, 0x09, 0xFC, 0x01, 0x4E, 0x96, 0x09, 0x00, 0x08, 0x0D, 0x07, 0x00, 0x00,
+ 0x00, 0x00, 0x08, 0x04, 0x1C, 0x96, 0x03, 0x00, 0x09, 0xEF, 0x01, 0x4E, 0x96, 0x03, 0x00, 0x09,
+ 0xF0, 0x01, 0x53, 0x4F, 0x96, 0x02, 0x00, 0x08, 0x04, 0x1C, 0x96, 0x03, 0x00, 0x09, 0xEF, 0x01,
+ 0x4E, 0x96, 0x03, 0x00, 0x09, 0xFC, 0x01, 0x4E, 0x96, 0x02, 0x00, 0x08, 0x0D, 0x4E, 0x96, 0x02,
+ 0x00, 0x08, 0x69, 0x3A, 0x17, 0x96, 0x0F, 0x00, 0x07, 0x01, 0x00, 0x00, 0x00, 0x09, 0xFD, 0x01,
+ 0x07, 0x4D, 0x04, 0x00, 0x00, 0x08, 0x04, 0x1C, 0x96, 0x03, 0x00, 0x09, 0xEF, 0x01, 0x4E, 0x96,
+ 0x03, 0x00, 0x09, 0xFC, 0x01, 0x4E, 0x96, 0x02, 0x00, 0x08, 0x0D, 0x4E, 0x96, 0x07, 0x00, 0x07,
0x04, 0x00, 0x00, 0x00, 0x08, 0x03, 0x3D, 0x17, 0x96, 0x02, 0x00, 0x08, 0x04, 0x1C, 0x96, 0x03,
- 0x00, 0x09, 0xED, 0x01, 0x4E, 0x96, 0x14, 0x00, 0x09, 0xFC, 0x01, 0x07, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x09, 0xEF, 0x01, 0x4E, 0x96, 0x14, 0x00, 0x09, 0xFE, 0x01, 0x07, 0x00, 0x00, 0x00, 0x00,
0x07, 0x4F, 0x04, 0x00, 0x00, 0x07, 0x02, 0x00, 0x00, 0x00, 0x08, 0x39, 0x3D, 0x4F, 0x96, 0x02,
- 0x00, 0x08, 0x04, 0x1C, 0x96, 0x03, 0x00, 0x09, 0xED, 0x01, 0x4E, 0x96, 0x03, 0x00, 0x09, 0xFC,
+ 0x00, 0x08, 0x04, 0x1C, 0x96, 0x03, 0x00, 0x09, 0xEF, 0x01, 0x4E, 0x96, 0x03, 0x00, 0x09, 0xFE,
0x01, 0x4E, 0x96, 0x09, 0x00, 0x08, 0x0D, 0x07, 0x00, 0x00, 0x00, 0x00, 0x08, 0x04, 0x1C, 0x96,
- 0x03, 0x00, 0x09, 0xED, 0x01, 0x4E, 0x96, 0x03, 0x00, 0x09, 0xEE, 0x01, 0x53, 0x4F, 0x96, 0x02,
- 0x00, 0x08, 0x04, 0x1C, 0x96, 0x03, 0x00, 0x09, 0xED, 0x01, 0x4E, 0x96, 0x03, 0x00, 0x09, 0xFC,
+ 0x03, 0x00, 0x09, 0xEF, 0x01, 0x4E, 0x96, 0x03, 0x00, 0x09, 0xF0, 0x01, 0x53, 0x4F, 0x96, 0x02,
+ 0x00, 0x08, 0x04, 0x1C, 0x96, 0x03, 0x00, 0x09, 0xEF, 0x01, 0x4E, 0x96, 0x03, 0x00, 0x09, 0xFE,
0x01, 0x4E, 0x96, 0x02, 0x00, 0x08, 0x0D, 0x4E, 0x96, 0x02, 0x00, 0x08, 0x69, 0x3A, 0x17, 0x96,
- 0x0F, 0x00, 0x07, 0x01, 0x00, 0x00, 0x00, 0x09, 0xFD, 0x01, 0x07, 0x4F, 0x04, 0x00, 0x00, 0x08,
- 0x04, 0x1C, 0x96, 0x03, 0x00, 0x09, 0xED, 0x01, 0x4E, 0x96, 0x03, 0x00, 0x09, 0xFC, 0x01, 0x4E,
+ 0x0F, 0x00, 0x07, 0x01, 0x00, 0x00, 0x00, 0x09, 0xFF, 0x01, 0x07, 0x4F, 0x04, 0x00, 0x00, 0x08,
+ 0x04, 0x1C, 0x96, 0x03, 0x00, 0x09, 0xEF, 0x01, 0x4E, 0x96, 0x03, 0x00, 0x09, 0xFE, 0x01, 0x4E,
0x96, 0x02, 0x00, 0x08, 0x0D, 0x4E, 0x96, 0x07, 0x00, 0x07, 0x04, 0x00, 0x00, 0x00, 0x08, 0x03,
- 0x3D, 0x17, 0x96, 0x02, 0x00, 0x08, 0x04, 0x1C, 0x96, 0x03, 0x00, 0x09, 0xED, 0x01, 0x4E, 0x96,
- 0x14, 0x00, 0x09, 0xFE, 0x01, 0x07, 0xE8, 0x03, 0x00, 0x00, 0x07, 0x54, 0x04, 0x00, 0x00, 0x07,
+ 0x3D, 0x17, 0x96, 0x02, 0x00, 0x08, 0x04, 0x1C, 0x96, 0x03, 0x00, 0x09, 0xEF, 0x01, 0x4E, 0x96,
+ 0x14, 0x00, 0x09, 0x00, 0x02, 0x07, 0xE8, 0x03, 0x00, 0x00, 0x07, 0x54, 0x04, 0x00, 0x00, 0x07,
0x02, 0x00, 0x00, 0x00, 0x08, 0x39, 0x3D, 0x4F, 0x96, 0x02, 0x00, 0x08, 0x04, 0x1C, 0x96, 0x03,
- 0x00, 0x09, 0xED, 0x01, 0x4E, 0x96, 0x03, 0x00, 0x09, 0xFE, 0x01, 0x4E, 0x96, 0x09, 0x00, 0x08,
- 0x0D, 0x07, 0x00, 0x00, 0x00, 0x00, 0x08, 0x04, 0x1C, 0x96, 0x03, 0x00, 0x09, 0xED, 0x01, 0x4E,
- 0x96, 0x03, 0x00, 0x09, 0xEE, 0x01, 0x53, 0x4F, 0x96, 0x02, 0x00, 0x08, 0x04, 0x1C, 0x96, 0x03,
- 0x00, 0x09, 0xED, 0x01, 0x4E, 0x96, 0x03, 0x00, 0x09, 0xFE, 0x01, 0x4E, 0x96, 0x02, 0x00, 0x08,
+ 0x00, 0x09, 0xEF, 0x01, 0x4E, 0x96, 0x03, 0x00, 0x09, 0x00, 0x02, 0x4E, 0x96, 0x09, 0x00, 0x08,
+ 0x0D, 0x07, 0x00, 0x00, 0x00, 0x00, 0x08, 0x04, 0x1C, 0x96, 0x03, 0x00, 0x09, 0xEF, 0x01, 0x4E,
+ 0x96, 0x03, 0x00, 0x09, 0xF0, 0x01, 0x53, 0x4F, 0x96, 0x02, 0x00, 0x08, 0x04, 0x1C, 0x96, 0x03,
+ 0x00, 0x09, 0xEF, 0x01, 0x4E, 0x96, 0x03, 0x00, 0x09, 0x00, 0x02, 0x4E, 0x96, 0x02, 0x00, 0x08,
0x0D, 0x4E, 0x96, 0x02, 0x00, 0x08, 0x69, 0x3A, 0x17, 0x96, 0x0F, 0x00, 0x07, 0x01, 0x00, 0x00,
- 0x00, 0x09, 0xFF, 0x01, 0x07, 0x54, 0x04, 0x00, 0x00, 0x08, 0x04, 0x1C, 0x96, 0x03, 0x00, 0x09,
- 0xED, 0x01, 0x4E, 0x96, 0x03, 0x00, 0x09, 0xFE, 0x01, 0x4E, 0x96, 0x02, 0x00, 0x08, 0x0D, 0x4E,
+ 0x00, 0x09, 0x01, 0x02, 0x07, 0x54, 0x04, 0x00, 0x00, 0x08, 0x04, 0x1C, 0x96, 0x03, 0x00, 0x09,
+ 0xEF, 0x01, 0x4E, 0x96, 0x03, 0x00, 0x09, 0x00, 0x02, 0x4E, 0x96, 0x02, 0x00, 0x08, 0x0D, 0x4E,
0x96, 0x07, 0x00, 0x07, 0x04, 0x00, 0x00, 0x00, 0x08, 0x03, 0x3D, 0x17, 0x96, 0x02, 0x00, 0x08,
- 0x04, 0x1C, 0x96, 0x03, 0x00, 0x09, 0xED, 0x01, 0x4E, 0x96, 0x14, 0x00, 0x09, 0x00, 0x02, 0x07,
+ 0x04, 0x1C, 0x96, 0x03, 0x00, 0x09, 0xEF, 0x01, 0x4E, 0x96, 0x14, 0x00, 0x09, 0x02, 0x02, 0x07,
0x00, 0x00, 0x00, 0x00, 0x07, 0x54, 0x04, 0x00, 0x00, 0x07, 0x02, 0x00, 0x00, 0x00, 0x08, 0x39,
- 0x3D, 0x4F, 0x96, 0x02, 0x00, 0x08, 0x04, 0x1C, 0x96, 0x03, 0x00, 0x09, 0xED, 0x01, 0x4E, 0x96,
- 0x03, 0x00, 0x09, 0x00, 0x02, 0x4E, 0x96, 0x09, 0x00, 0x08, 0x0D, 0x07, 0x00, 0x00, 0x00, 0x00,
- 0x08, 0x04, 0x1C, 0x96, 0x03, 0x00, 0x09, 0xED, 0x01, 0x4E, 0x96, 0x03, 0x00, 0x09, 0xEE, 0x01,
+ 0x3D, 0x4F, 0x96, 0x02, 0x00, 0x08, 0x04, 0x1C, 0x96, 0x03, 0x00, 0x09, 0xEF, 0x01, 0x4E, 0x96,
+ 0x03, 0x00, 0x09, 0x02, 0x02, 0x4E, 0x96, 0x09, 0x00, 0x08, 0x0D, 0x07, 0x00, 0x00, 0x00, 0x00,
+ 0x08, 0x04, 0x1C, 0x96, 0x03, 0x00, 0x09, 0xEF, 0x01, 0x4E, 0x96, 0x03, 0x00, 0x09, 0xF0, 0x01,
0x53, 0x4C, 0x96, 0x02, 0x00, 0x08, 0x1C, 0x4D, 0x1D, 0x4F, 0x96, 0x02, 0x00, 0x08, 0x04, 0x1C,
- 0x96, 0x03, 0x00, 0x09, 0xED, 0x01, 0x4E, 0x96, 0x03, 0x00, 0x09, 0x00, 0x02, 0x4E, 0x96, 0x02,
+ 0x96, 0x03, 0x00, 0x09, 0xEF, 0x01, 0x4E, 0x96, 0x03, 0x00, 0x09, 0x02, 0x02, 0x4E, 0x96, 0x02,
0x00, 0x08, 0x0D, 0x4E, 0x96, 0x02, 0x00, 0x08, 0x69, 0x3A, 0x17, 0x96, 0x0F, 0x00, 0x07, 0x01,
- 0x00, 0x00, 0x00, 0x09, 0xFF, 0x01, 0x07, 0x54, 0x04, 0x00, 0x00, 0x08, 0x04, 0x1C, 0x96, 0x03,
- 0x00, 0x09, 0xED, 0x01, 0x4E, 0x96, 0x03, 0x00, 0x09, 0x00, 0x02, 0x4E, 0x96, 0x02, 0x00, 0x08,
+ 0x00, 0x00, 0x00, 0x09, 0x01, 0x02, 0x07, 0x54, 0x04, 0x00, 0x00, 0x08, 0x04, 0x1C, 0x96, 0x03,
+ 0x00, 0x09, 0xEF, 0x01, 0x4E, 0x96, 0x03, 0x00, 0x09, 0x02, 0x02, 0x4E, 0x96, 0x02, 0x00, 0x08,
0x0D, 0x4E, 0x96, 0x07, 0x00, 0x07, 0x04, 0x00, 0x00, 0x00, 0x08, 0x03, 0x3D, 0x17, 0x96, 0x14,
- 0x00, 0x09, 0x01, 0x02, 0x07, 0x00, 0x00, 0x00, 0x00, 0x07, 0xFA, 0x00, 0x00, 0x00, 0x07, 0x02,
- 0x00, 0x00, 0x00, 0x08, 0x01, 0x3D, 0x1D, 0x96, 0x14, 0x00, 0x09, 0x02, 0x02, 0x07, 0x01, 0x00,
+ 0x00, 0x09, 0x03, 0x02, 0x07, 0x00, 0x00, 0x00, 0x00, 0x07, 0xFA, 0x00, 0x00, 0x00, 0x07, 0x02,
+ 0x00, 0x00, 0x00, 0x08, 0x01, 0x3D, 0x1D, 0x96, 0x14, 0x00, 0x09, 0x04, 0x02, 0x07, 0x01, 0x00,
0x00, 0x00, 0x07, 0xFA, 0x00, 0x00, 0x00, 0x07, 0x02, 0x00, 0x00, 0x00, 0x08, 0x01, 0x3D, 0x1D,
- 0x96, 0x14, 0x00, 0x09, 0x03, 0x02, 0x07, 0x02, 0x00, 0x00, 0x00, 0x07, 0xFA, 0x00, 0x00, 0x00,
- 0x07, 0x02, 0x00, 0x00, 0x00, 0x08, 0x01, 0x3D, 0x1D, 0x96, 0x06, 0x00, 0x09, 0x04, 0x02, 0x09,
- 0x02, 0x02, 0x1C, 0x1D, 0x96, 0x14, 0x00, 0x09, 0x05, 0x02, 0x07, 0x01, 0x00, 0x00, 0x00, 0x07,
+ 0x96, 0x14, 0x00, 0x09, 0x05, 0x02, 0x07, 0x02, 0x00, 0x00, 0x00, 0x07, 0xFA, 0x00, 0x00, 0x00,
+ 0x07, 0x02, 0x00, 0x00, 0x00, 0x08, 0x01, 0x3D, 0x1D, 0x96, 0x06, 0x00, 0x09, 0x06, 0x02, 0x09,
+ 0x04, 0x02, 0x1C, 0x1D, 0x96, 0x14, 0x00, 0x09, 0x07, 0x02, 0x07, 0x01, 0x00, 0x00, 0x00, 0x07,
0xFD, 0x03, 0x00, 0x00, 0x07, 0x02, 0x00, 0x00, 0x00, 0x08, 0x01, 0x3D, 0x1D, 0x96, 0x14, 0x00,
- 0x09, 0x06, 0x02, 0x07, 0x04, 0x00, 0x00, 0x00, 0x07, 0x64, 0x00, 0x00, 0x00, 0x07, 0x02, 0x00,
- 0x00, 0x00, 0x08, 0x01, 0x3D, 0x1D, 0x96, 0x14, 0x00, 0x09, 0x07, 0x02, 0x07, 0x00, 0x00, 0x00,
+ 0x09, 0x08, 0x02, 0x07, 0x04, 0x00, 0x00, 0x00, 0x07, 0x64, 0x00, 0x00, 0x00, 0x07, 0x02, 0x00,
+ 0x00, 0x00, 0x08, 0x01, 0x3D, 0x1D, 0x96, 0x14, 0x00, 0x09, 0x09, 0x02, 0x07, 0x00, 0x00, 0x00,
0x00, 0x07, 0x09, 0x00, 0x00, 0x00, 0x07, 0x02, 0x00, 0x00, 0x00, 0x08, 0x01, 0x3D, 0x1D, 0x96,
0x03, 0x00, 0x08, 0x1C, 0x02, 0x1D, 0x96, 0x09, 0x00, 0x07, 0x00, 0x10, 0x00, 0x00, 0x08, 0x04,
0x08, 0x0A, 0x1C, 0x96, 0x07, 0x00, 0x07, 0x03, 0x00, 0x00, 0x00, 0x08, 0x00, 0x3D, 0x17, 0x96,
commit d7e7cb68ea597415ccc5d035152f09c35dfa81e1
Author: Benjamin Otte <otte at gnome.org>
Date: Sat Jan 19 22:12:38 2008 +0100
rework security architecture and initialization
Every sandbox has its own _global object, so now there is a SwfdecSandbox object
which gets set to the current sandbox whenever we execute code. Otherwise the
_global object is NULL.
Chages required:
- Make it possible to swfdec_as_context_startup() multiple times
- Make startup version independant
- Get rid of security framework, use the global object (the current sandbox)
diff --git a/libswfdec/Makefile.am b/libswfdec/Makefile.am
index aa2c1c1..4990956 100644
--- a/libswfdec/Makefile.am
+++ b/libswfdec/Makefile.am
@@ -77,7 +77,6 @@ libswfdec_source_files = \
swfdec_file_reference_list.c \
swfdec_filter.c \
swfdec_filter_as.c \
- swfdec_flash_security.c \
swfdec_flv_decoder.c \
swfdec_font.c \
swfdec_function_list.c \
@@ -117,9 +116,8 @@ libswfdec_source_files = \
swfdec_rectangle.c \
swfdec_resource.c \
swfdec_ringbuffer.c \
+ swfdec_sandbox.c \
swfdec_script.c \
- swfdec_security.c \
- swfdec_security_allow.c \
swfdec_selection.c \
swfdec_shape.c \
swfdec_shape_parser.c \
@@ -239,7 +237,6 @@ noinst_HEADERS = \
swfdec_text_field_movie.h \
swfdec_event.h \
swfdec_filter.h \
- swfdec_flash_security.h \
swfdec_flv_decoder.h \
swfdec_font.h \
swfdec_function_list.h \
@@ -267,9 +264,8 @@ noinst_HEADERS = \
swfdec_rect.h \
swfdec_resource.h \
swfdec_ringbuffer.h \
+ swfdec_sandbox.h \
swfdec_script_internal.h \
- swfdec_security.h \
- swfdec_security_allow.h \
swfdec_shape.h \
swfdec_shape_parser.h \
swfdec_sound.h \
diff --git a/libswfdec/swfdec_as_context.c b/libswfdec/swfdec_as_context.c
index 1c6b357..f572239 100644
--- a/libswfdec/swfdec_as_context.c
+++ b/libswfdec/swfdec_as_context.c
@@ -561,7 +561,6 @@ swfdec_as_context_init (SwfdecAsContext *context)
g_hash_table_insert (context->strings, (char *) s + 1, (char *) s);
}
g_assert (*s == 0);
- context->global = swfdec_as_object_new_empty (context);
context->rand = g_rand_new ();
g_get_current_time (&context->start_time);
}
@@ -779,6 +778,7 @@ swfdec_as_context_run (SwfdecAsContext *context)
gboolean check_block; /* some opcodes avoid a scope check */
g_return_if_fail (SWFDEC_IS_AS_CONTEXT (context));
+
if (context->frame == NULL || context->state == SWFDEC_AS_CONTEXT_ABORTED)
return;
@@ -793,6 +793,7 @@ swfdec_as_context_run (SwfdecAsContext *context)
context->last_frame = context->frame->next;
original_version = context->version;
start:
+ g_return_if_fail (context->global); /* check here because of swfdec_sandbox_(un)use() */
if (!swfdec_as_context_check_continue (context))
goto error;
/* setup data */
@@ -804,12 +805,6 @@ start:
swfdec_as_context_abort (context, "Stack overflow");
goto error;
}
- /* if security is NULL, the function may not be called */
- if (frame->security == NULL) {
- SWFDEC_WARNING ("insufficient right to call %s", frame->function_name);
- swfdec_as_frame_return (frame, NULL);
- goto start;
- }
if (SWFDEC_IS_AS_NATIVE_FUNCTION (frame->function)) {
SwfdecAsNativeFunction *native = SWFDEC_AS_NATIVE_FUNCTION (frame->function);
SwfdecAsValue rval = { 0, };
@@ -1344,7 +1339,7 @@ swfdec_as_context_parseFloat (SwfdecAsContext *cx, SwfdecAsObject *object,
}
static void
-swfdec_as_context_init_global (SwfdecAsContext *context, guint version)
+swfdec_as_context_init_global (SwfdecAsContext *context)
{
SwfdecAsValue val;
@@ -1388,25 +1383,26 @@ swfdec_as_context_run_init_script (SwfdecAsContext *context, const guint8 *data,
* functions and properties are available in the context.
**/
void
-swfdec_as_context_startup (SwfdecAsContext *context, guint version)
+swfdec_as_context_startup (SwfdecAsContext *context)
{
g_return_if_fail (SWFDEC_IS_AS_CONTEXT (context));
g_return_if_fail (context->state == SWFDEC_AS_CONTEXT_NEW);
if (!swfdec_as_stack_push_segment (context))
return;
- context->version = version;
+ if (context->global == NULL)
+ context->global = swfdec_as_object_new_empty (context);
/* init the two internal functions */
/* FIXME: remove them for normal contexts? */
- swfdec_player_preinit_global (context, version);
+ swfdec_player_preinit_global (context);
/* get the necessary objects up to define objects and functions sanely */
- swfdec_as_function_init_context (context, version);
- swfdec_as_object_init_context (context, version);
+ swfdec_as_function_init_context (context);
+ swfdec_as_object_init_context (context);
/* define the global object and other important ones */
- swfdec_as_context_init_global (context, version);
+ swfdec_as_context_init_global (context);
/* run init script */
- swfdec_as_context_run_init_script (context, swfdec_as_initialize, sizeof (swfdec_as_initialize), context->version);
+ swfdec_as_context_run_init_script (context, swfdec_as_initialize, sizeof (swfdec_as_initialize), 8);
if (context->state == SWFDEC_AS_CONTEXT_NEW)
context->state = SWFDEC_AS_CONTEXT_RUNNING;
diff --git a/libswfdec/swfdec_as_context.h b/libswfdec/swfdec_as_context.h
index df09fa2..d5ef066 100644
--- a/libswfdec/swfdec_as_context.h
+++ b/libswfdec/swfdec_as_context.h
@@ -45,7 +45,8 @@ struct _SwfdecAsContext {
GObject object;
SwfdecAsContextState state; /* our current state */
- SwfdecAsObject * global; /* the global object */
+ SwfdecAsObject * global; /* the global object or NULL if not initialized yet.
+ In SwfdecPlayer is NULL unless a sandbox is in use */
GRand * rand; /* random number generator */
GTimeVal start_time; /* time this movie started (for GetTime action) */
@@ -96,8 +97,7 @@ struct _SwfdecAsContextClass {
GType swfdec_as_context_get_type (void);
-void swfdec_as_context_startup (SwfdecAsContext * context,
- guint version);
+void swfdec_as_context_startup (SwfdecAsContext * context);
gboolean swfdec_as_context_is_aborted (SwfdecAsContext * context);
gboolean swfdec_as_context_is_constructing
diff --git a/libswfdec/swfdec_as_frame.c b/libswfdec/swfdec_as_frame.c
index 16546a5..39888b6 100644
--- a/libswfdec/swfdec_as_frame.c
+++ b/libswfdec/swfdec_as_frame.c
@@ -29,7 +29,6 @@
#include "swfdec_as_strings.h"
#include "swfdec_as_super.h"
#include "swfdec_debug.h"
-#include "swfdec_security_allow.h"
/**
* SECTION:SwfdecAsFrame
@@ -278,10 +277,6 @@ swfdec_as_frame_dispose (GObject *object)
/* clean up */
g_slice_free1 (sizeof (SwfdecAsValue) * frame->n_registers, frame->registers);
- if (frame->security) {
- g_object_unref (frame->security);
- frame->security = NULL;
- }
if (frame->constant_pool) {
swfdec_constant_pool_free (frame->constant_pool);
frame->constant_pool = NULL;
@@ -385,11 +380,6 @@ swfdec_as_frame_load (SwfdecAsFrame *frame)
{
SwfdecAsContext *context = SWFDEC_AS_OBJECT (frame)->context;
- if (context->frame) {
- frame->security = g_object_ref (context->frame->security);
- } else {
- frame->security = swfdec_security_allow_new ();
- }
frame->stack_begin = context->cur;
context->base = frame->stack_begin;
frame->next = context->frame;
@@ -903,22 +893,3 @@ swfdec_as_frame_get_this (SwfdecAsFrame *frame)
return frame->thisp;
}
-/**
- * swfdec_as_frame_set_security:
- * @frame: the frame to be executed
- * @guard: the security to be used in this frame
- *
- * Sets the security to be used in this frame to @guard.
- **/
-void
-swfdec_as_frame_set_security (SwfdecAsFrame *frame, SwfdecSecurity *guard)
-{
- g_return_if_fail (SWFDEC_IS_AS_FRAME (frame));
- g_return_if_fail (SWFDEC_IS_SECURITY (guard));
-
- if (frame->security)
- g_object_unref (frame->security);
-
- frame->security = g_object_ref (guard);
-}
-
diff --git a/libswfdec/swfdec_as_frame_internal.h b/libswfdec/swfdec_as_frame_internal.h
index d50a9ce..866d1fa 100644
--- a/libswfdec/swfdec_as_frame_internal.h
+++ b/libswfdec/swfdec_as_frame_internal.h
@@ -22,7 +22,6 @@
#include <libswfdec/swfdec_as_types.h>
#include <libswfdec/swfdec_script_internal.h>
-#include <libswfdec/swfdec_security.h>
G_BEGIN_DECLS
@@ -39,7 +38,6 @@ struct _SwfdecAsFrame {
SwfdecAsValue * return_value; /* pointer to where to store the return value */
guint argc; /* number of arguments */
const SwfdecAsValue * argv; /* arguments or %NULL if taken from stack */
- SwfdecSecurity * security; /* security for this frame or %NULL if not allowed to call */
/* debugging */
const char * function_name; /* name of function */
/* script execution */
@@ -70,8 +68,6 @@ SwfdecAsFrame * swfdec_as_frame_new_native (SwfdecAsContext * context);
void swfdec_as_frame_return (SwfdecAsFrame * frame,
SwfdecAsValue * return_value);
-void swfdec_as_frame_set_security (SwfdecAsFrame * frame,
- SwfdecSecurity * guard);
void swfdec_as_frame_set_this (SwfdecAsFrame * frame,
SwfdecAsObject * thisp);
void swfdec_as_frame_preload (SwfdecAsFrame * frame);
diff --git a/libswfdec/swfdec_as_function.c b/libswfdec/swfdec_as_function.c
index 5dce988..cc0e975 100644
--- a/libswfdec/swfdec_as_function.c
+++ b/libswfdec/swfdec_as_function.c
@@ -121,8 +121,6 @@ swfdec_as_function_call_no_preload (SwfdecAsFunction *function,
* user of that function expects success, but super may fail here */
if (frame == NULL)
return NULL;
- if (function->priv)
- swfdec_as_frame_set_security (frame, function->priv);
/* second check especially for super object */
if (thisp != NULL && frame->thisp == NULL) {
swfdec_as_frame_set_this (frame, swfdec_as_object_resolve (thisp));
@@ -248,7 +246,7 @@ swfdec_as_function_apply (SwfdecAsContext *cx, SwfdecAsObject *object,
}
void
-swfdec_as_function_init_context (SwfdecAsContext *context, guint version)
+swfdec_as_function_init_context (SwfdecAsContext *context)
{
SwfdecAsObject *function, *proto;
SwfdecAsValue val;
@@ -259,11 +257,7 @@ swfdec_as_function_init_context (SwfdecAsContext *context, guint version)
SWFDEC_AS_STR_Function, 0, NULL, 0));
if (!function)
return;
- if (version < 6) {
- /* deleting it later on is easier than duplicating swfdec_as_object_add_function() */
- swfdec_as_object_unset_variable_flags (context->global, SWFDEC_AS_STR_Function, SWFDEC_AS_VARIABLE_PERMANENT);
- swfdec_as_object_delete_variable (context->global, SWFDEC_AS_STR_Function);
- }
+ swfdec_as_object_set_variable_flags (context->global, SWFDEC_AS_STR_Function, SWFDEC_AS_VARIABLE_VERSION_6_UP);
context->Function = function;
SWFDEC_AS_VALUE_SET_OBJECT (&val, function);
swfdec_as_object_set_variable_and_flags (function, SWFDEC_AS_STR_constructor,
@@ -283,21 +277,3 @@ swfdec_as_function_init_context (SwfdecAsContext *context, guint version)
&val, SWFDEC_AS_VARIABLE_HIDDEN | SWFDEC_AS_VARIABLE_PERMANENT);
}
-/**
- * swfdec_as_function_set_security:
- * @fun: a #SwfdecFunction
- * @sec: the security guarding calls to this function
- *
- * Sets the security object guarding execution of this function. This function
- * may only be called once per #SwfdecAsFunction.
- **/
-void
-swfdec_as_function_set_security (SwfdecAsFunction *fun, SwfdecSecurity *sec)
-{
- g_return_if_fail (SWFDEC_IS_AS_FUNCTION (fun));
- g_return_if_fail (SWFDEC_IS_SECURITY (sec));
- g_return_if_fail (fun->priv == NULL);
-
- fun->priv = g_object_ref (sec);
-}
-
diff --git a/libswfdec/swfdec_as_function.h b/libswfdec/swfdec_as_function.h
index ab2c364..534aad5 100644
--- a/libswfdec/swfdec_as_function.h
+++ b/libswfdec/swfdec_as_function.h
@@ -39,8 +39,6 @@ typedef struct _SwfdecAsFunctionClass SwfdecAsFunctionClass;
struct _SwfdecAsFunction {
/*< private >*/
SwfdecAsObject object;
-
- gpointer priv; /* currently only contains the security context or NULL for any */
};
struct _SwfdecAsFunctionClass {
diff --git a/libswfdec/swfdec_as_internal.h b/libswfdec/swfdec_as_internal.h
index 7305f92..30a556c 100644
--- a/libswfdec/swfdec_as_internal.h
+++ b/libswfdec/swfdec_as_internal.h
@@ -22,7 +22,6 @@
#include <libswfdec/swfdec_as_object.h>
#include <libswfdec/swfdec_as_types.h>
-#include <libswfdec/swfdec_security.h>
G_BEGIN_DECLS
@@ -36,10 +35,7 @@ G_BEGIN_DECLS
#define SWFDEC_AS_OBJECT_PROTOTYPE_RECURSION_LIMIT 256
void swfdec_as_function_set_constructor (SwfdecAsFunction * fun);
-void swfdec_as_function_set_security (SwfdecAsFunction * fun,
- SwfdecSecurity * sec);
-void swfdec_as_function_init_context (SwfdecAsContext * context,
- guint version);
+void swfdec_as_function_init_context (SwfdecAsContext * context);
SwfdecAsFrame * swfdec_as_function_call_no_preload (SwfdecAsFunction * function,
SwfdecAsObject * thisp,
guint n_args,
@@ -58,13 +54,6 @@ typedef SwfdecAsVariableForeach SwfdecAsVariableForeachRemove;
typedef const char *(* SwfdecAsVariableForeachRename) (SwfdecAsObject *object,
const char *variable, SwfdecAsValue *value, guint flags, gpointer data);
-void swfdec_as_object_call_with_security
- (SwfdecAsObject * object,
- SwfdecSecurity * sec,
- const char * name,
- guint argc,
- SwfdecAsValue * argv,
- SwfdecAsValue * return_value);
SwfdecAsValue * swfdec_as_object_peek_variable (SwfdecAsObject * object,
const char * name);
void swfdec_as_object_collect (SwfdecAsObject * object);
@@ -75,15 +64,10 @@ void swfdec_as_object_foreach_rename (SwfdecAsObject * object,
SwfdecAsVariableForeachRename func,
gpointer data);
-void swfdec_as_object_init_context (SwfdecAsContext * context,
- guint version);
+void swfdec_as_object_init_context (SwfdecAsContext * context);
void swfdec_as_object_decode (SwfdecAsObject * obj,
const char * str);
SwfdecAsObject * swfdec_as_object_get_prototype (SwfdecAsObject * object);
-void swfdec_as_object_run_with_security
- (SwfdecAsObject * object,
- SwfdecScript * script,
- SwfdecSecurity * sec);
void swfdec_as_object_add_native_variable (SwfdecAsObject * object,
const char * variable,
SwfdecAsNative get,
diff --git a/libswfdec/swfdec_as_object.c b/libswfdec/swfdec_as_object.c
index 854681d..babcd27 100644
--- a/libswfdec/swfdec_as_object.c
+++ b/libswfdec/swfdec_as_object.c
@@ -34,7 +34,6 @@
#include "swfdec_as_super.h"
#include "swfdec_debug.h"
#include "swfdec_movie.h"
-#include "swfdec_security_allow.h"
/**
* SECTION:SwfdecAsObject
@@ -1180,22 +1179,26 @@ swfdec_as_object_add_constructor (SwfdecAsObject *object, const char *name, GTyp
return function;
}
+/**
+ * swfdec_as_object_run:
+ * @object: a #SwfdecAsObject
+ * @script: script to execute
+ *
+ * Executes the given @script with @object as this pointer.
+ **/
void
-swfdec_as_object_run_with_security (SwfdecAsObject *object, SwfdecScript *script,
- SwfdecSecurity *sec)
+swfdec_as_object_run (SwfdecAsObject *object, SwfdecScript *script)
{
SwfdecAsContext *context;
SwfdecAsFrame *frame;
g_return_if_fail (SWFDEC_IS_AS_OBJECT (object));
g_return_if_fail (script != NULL);
- g_return_if_fail (SWFDEC_IS_SECURITY (sec));
context = object->context;
frame = swfdec_as_frame_new (context, script);
if (frame == NULL)
return;
- swfdec_as_frame_set_security (frame, sec);
swfdec_as_frame_set_this (frame, object);
swfdec_as_frame_preload (frame);
swfdec_as_context_run (context);
@@ -1203,54 +1206,6 @@ swfdec_as_object_run_with_security (SwfdecAsObject *object, SwfdecScript *script
}
/**
- * swfdec_as_object_run:
- * @object: a #SwfdecAsObject
- * @script: script to execute
- *
- * Executes the given @script with @object as this pointer.
- **/
-void
-swfdec_as_object_run (SwfdecAsObject *object, SwfdecScript *script)
-{
- SwfdecSecurity *sec;
-
- g_return_if_fail (SWFDEC_IS_AS_OBJECT (object));
- g_return_if_fail (script != NULL);
-
- sec = swfdec_security_allow_new ();
- swfdec_as_object_run_with_security (object, script, sec);
- g_object_unref (sec);
-}
-
-void
-swfdec_as_object_call_with_security (SwfdecAsObject *object, SwfdecSecurity *sec,
- const char *name, guint argc, SwfdecAsValue *argv, SwfdecAsValue *return_value)
-{
- static SwfdecAsValue tmp; /* ignored */
- SwfdecAsFunction *fun;
-
- g_return_if_fail (SWFDEC_IS_AS_OBJECT (object));
- g_return_if_fail (SWFDEC_IS_SECURITY (sec));
- g_return_if_fail (name != NULL);
- g_return_if_fail (argc == 0 || argv != NULL);
- g_return_if_fail (argc == 0 || argv != NULL);
-
- if (return_value)
- SWFDEC_AS_VALUE_SET_UNDEFINED (return_value);
- swfdec_as_object_get_variable (object, name, &tmp);
- if (!SWFDEC_AS_VALUE_IS_OBJECT (&tmp))
- return;
- fun = (SwfdecAsFunction *) SWFDEC_AS_VALUE_GET_OBJECT (&tmp);
- if (!SWFDEC_IS_AS_FUNCTION (fun))
- return;
- swfdec_as_function_call (fun, object, argc, argv, return_value ? return_value : &tmp);
- if (swfdec_as_context_is_aborted (object->context))
- return;
- swfdec_as_frame_set_security (object->context->frame, sec);
- swfdec_as_context_run (object->context);
-}
-
-/**
* swfdec_as_object_call:
* @object: a #SwfdecAsObject
* @name: garbage-collected string naming the function to call.
@@ -1269,15 +1224,25 @@ void
swfdec_as_object_call (SwfdecAsObject *object, const char *name, guint argc,
SwfdecAsValue *argv, SwfdecAsValue *return_value)
{
- SwfdecSecurity *sec;
+ SwfdecAsValue tmp;
+ SwfdecAsFunction *fun;
g_return_if_fail (SWFDEC_IS_AS_OBJECT (object));
g_return_if_fail (name != NULL);
g_return_if_fail (argc == 0 || argv != NULL);
- sec = swfdec_security_allow_new ();
- swfdec_as_object_call_with_security (object, sec, name, argc, argv, return_value);
- g_object_unref (sec);
+ if (return_value)
+ SWFDEC_AS_VALUE_SET_UNDEFINED (return_value);
+ swfdec_as_object_get_variable (object, name, &tmp);
+ if (!SWFDEC_AS_VALUE_IS_OBJECT (&tmp))
+ return;
+ fun = (SwfdecAsFunction *) SWFDEC_AS_VALUE_GET_OBJECT (&tmp);
+ if (!SWFDEC_IS_AS_FUNCTION (fun))
+ return;
+ swfdec_as_function_call (fun, object, argc, argv, return_value ? return_value : &tmp);
+ if (swfdec_as_context_is_aborted (object->context))
+ return;
+ swfdec_as_context_run (object->context);
}
/**
@@ -1714,7 +1679,7 @@ swfdec_as_object_decode (SwfdecAsObject *object, const char *str)
}
void
-swfdec_as_object_init_context (SwfdecAsContext *context, guint version)
+swfdec_as_object_init_context (SwfdecAsContext *context)
{
SwfdecAsValue val;
SwfdecAsObject *object, *proto;
diff --git a/libswfdec/swfdec_event.c b/libswfdec/swfdec_event.c
index 585a5e0..6af665d 100644
--- a/libswfdec/swfdec_event.c
+++ b/libswfdec/swfdec_event.c
@@ -171,13 +171,12 @@ swfdec_event_list_parse (SwfdecEventList *list, SwfdecBits *bits, int version,
void
swfdec_event_list_execute (SwfdecEventList *list, SwfdecAsObject *object,
- SwfdecSecurity *sec, guint condition, guint8 key)
+ guint condition, guint8 key)
{
guint i;
g_return_if_fail (list != NULL);
g_return_if_fail (SWFDEC_IS_AS_OBJECT (object));
- g_return_if_fail (SWFDEC_IS_SECURITY (sec));
g_return_if_fail (condition < N_CONDITIONS);
condition = (1 << condition);
@@ -189,7 +188,7 @@ swfdec_event_list_execute (SwfdecEventList *list, SwfdecAsObject *object,
if ((event->conditions & condition) &&
event->key == key) {
SWFDEC_LOG ("executing script for event %u on scriptable %p", condition, object);
- swfdec_as_object_run_with_security (object, event->script, sec);
+ swfdec_as_object_run (object, event->script);
}
}
swfdec_event_list_free (list);
diff --git a/libswfdec/swfdec_event.h b/libswfdec/swfdec_event.h
index 7ac6857..4b1ba40 100644
--- a/libswfdec/swfdec_event.h
+++ b/libswfdec/swfdec_event.h
@@ -20,7 +20,6 @@
#include <libswfdec/swfdec_bits.h>
#include <libswfdec/swfdec_as_types.h>
#include <libswfdec/swfdec_player.h>
-#include <libswfdec/swfdec_security.h>
#include <libswfdec/swfdec_types.h>
#ifndef _SWFDEC_EVENT_H_
@@ -64,7 +63,6 @@ void swfdec_event_list_parse (SwfdecEventList * list,
const char * description);
void swfdec_event_list_execute (SwfdecEventList * list,
SwfdecAsObject * object,
- SwfdecSecurity * sec,
guint condition,
guint8 key);
gboolean swfdec_event_list_has_conditions(SwfdecEventList * list,
diff --git a/libswfdec/swfdec_flash_security.c b/libswfdec/swfdec_flash_security.c
deleted file mode 100644
index ae7fce0..0000000
--- a/libswfdec/swfdec_flash_security.c
+++ /dev/null
@@ -1,94 +0,0 @@
-/* Swfdec
- * Copyright (C) 2007 Benjamin Otte <otte at gnome.org>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor,
- * Boston, MA 02110-1301 USA
- */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include <string.h>
-#include "swfdec_flash_security.h"
-#include "swfdec_debug.h"
-#include "swfdec_security_allow.h"
-
-
-G_DEFINE_TYPE (SwfdecFlashSecurity, swfdec_flash_security, SWFDEC_TYPE_SECURITY)
-
-static gboolean
-swfdec_flash_security_allow (SwfdecSecurity *guard, SwfdecSecurity *key)
-{
- if (guard == key) {
- return TRUE;
- } else if (SWFDEC_IS_SECURITY_ALLOW (key)) {
- /* This only happens when calling functions (I hope) */
- return TRUE;
- } else if (SWFDEC_IS_FLASH_SECURITY (key)) {
- SWFDEC_FIXME ("implement security checking");
- return TRUE;
- } else {
- SWFDEC_ERROR ("unknown security %s, denying access", G_OBJECT_TYPE_NAME (key));
- return FALSE;
- }
-}
-
-static void
-swfdec_flash_security_dispose (GObject *object)
-{
- SwfdecFlashSecurity *sec = SWFDEC_FLASH_SECURITY (object);
-
- if (sec->url) {
- swfdec_url_free (sec->url);
- sec->url = NULL;
- }
- sec->sandbox = SWFDEC_SANDBOX_NONE;
-
- G_OBJECT_CLASS (swfdec_flash_security_parent_class)->dispose (object);
-}
-
-static void
-swfdec_flash_security_class_init (SwfdecFlashSecurityClass *klass)
-{
- GObjectClass *object_class = G_OBJECT_CLASS (klass);
- SwfdecSecurityClass *security_class = SWFDEC_SECURITY_CLASS (klass);
-
- object_class->dispose = swfdec_flash_security_dispose;
-
- security_class->allow = swfdec_flash_security_allow;
-}
-
-static void
-swfdec_flash_security_init (SwfdecFlashSecurity *sec)
-{
-}
-
-void
-swfdec_flash_security_set_url (SwfdecFlashSecurity *sec, const SwfdecURL *url)
-{
- g_return_if_fail (SWFDEC_IS_FLASH_SECURITY (sec));
- g_return_if_fail (sec->url == NULL);
- g_return_if_fail (url != NULL);
-
- g_assert (sec->sandbox == SWFDEC_SANDBOX_NONE);
- sec->url = swfdec_url_copy (url);
- if (swfdec_url_is_local (url)) {
- sec->sandbox = SWFDEC_SANDBOX_LOCAL_FILE;
- } else {
- sec->sandbox = SWFDEC_SANDBOX_REMOTE;
- }
-}
-
diff --git a/libswfdec/swfdec_flash_security.h b/libswfdec/swfdec_flash_security.h
deleted file mode 100644
index 3af3442..0000000
--- a/libswfdec/swfdec_flash_security.h
+++ /dev/null
@@ -1,67 +0,0 @@
-/* Swfdec
- * Copyright (C) 2007 Benjamin Otte <otte at gnome.org>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor,
- * Boston, MA 02110-1301 USA
- */
-
-#ifndef _SWFDEC_FLASH_SECURITY_H_
-#define _SWFDEC_FLASH_SECURITY_H_
-
-#include <libswfdec/swfdec_security.h>
-#include <libswfdec/swfdec_player.h>
-
-G_BEGIN_DECLS
-
-typedef struct _SwfdecFlashSecurity SwfdecFlashSecurity;
-typedef struct _SwfdecFlashSecurityClass SwfdecFlashSecurityClass;
-
-typedef enum {
- SWFDEC_SANDBOX_NONE,
- SWFDEC_SANDBOX_REMOTE,
- SWFDEC_SANDBOX_LOCAL_FILE,
- SWFDEC_SANDBOX_LOCAL_NETWORK,
- SWFDEC_SANDBOX_LOCAL_TRUSTED
-} SwfdecSandboxType;
-
-#define SWFDEC_TYPE_FLASH_SECURITY (swfdec_flash_security_get_type())
-#define SWFDEC_IS_FLASH_SECURITY(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), SWFDEC_TYPE_FLASH_SECURITY))
-#define SWFDEC_IS_FLASH_SECURITY_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), SWFDEC_TYPE_FLASH_SECURITY))
-#define SWFDEC_FLASH_SECURITY(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), SWFDEC_TYPE_FLASH_SECURITY, SwfdecFlashSecurity))
-#define SWFDEC_FLASH_SECURITY_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), SWFDEC_TYPE_FLASH_SECURITY, SwfdecFlashSecurityClass))
-#define SWFDEC_FLASH_SECURITY_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), SWFDEC_TYPE_FLASH_SECURITY, SwfdecFlashSecurityClass))
-
-struct _SwfdecFlashSecurity
-{
- SwfdecSecurity security;
-
- SwfdecPlayer *player;
- SwfdecSandboxType sandbox; /* sandbox we are operating in */
- SwfdecURL * url; /* url this security was loaded from */
-};
-
-struct _SwfdecFlashSecurityClass
-{
- SwfdecSecurityClass security_class;
-};
-
-GType swfdec_flash_security_get_type (void);
-
-void swfdec_flash_security_set_url (SwfdecFlashSecurity * sec,
- const SwfdecURL * url);
-
-
-G_END_DECLS
-#endif
diff --git a/libswfdec/swfdec_initialize.as b/libswfdec/swfdec_initialize.as
index 3302085..5444168 100644
--- a/libswfdec/swfdec_initialize.as
+++ b/libswfdec/swfdec_initialize.as
@@ -602,6 +602,11 @@ ASSetNative (TextField.StyleSheet.prototype, 113, "7update,7parseCSSInternal,7pa
ASSetPropFlags (TextField.StyleSheet.prototype, null, 1027);
ASSetPropFlags (TextField, "StyleSheet", 1027);
+/* Video */
+
+ASSetNative(Video.prototype, 667, "6attachVideo,6clear", 1);
+ASSetPropFlags(Video.prototype, null, 3);
+
/* Accessibility */
Accessibility = {};
diff --git a/libswfdec/swfdec_internal.h b/libswfdec/swfdec_internal.h
index a143330..79d49c1 100644
--- a/libswfdec/swfdec_internal.h
+++ b/libswfdec/swfdec_internal.h
@@ -59,14 +59,10 @@ SwfdecVideoDecoder * swfdec_video_decoder_gst_new (guint format);
/* AS engine setup code */
-void swfdec_player_preinit_global (SwfdecAsContext * context,
- guint version);
-void swfdec_net_stream_init_context (SwfdecPlayer * player,
- guint version);
-void swfdec_sprite_movie_init_context (SwfdecPlayer * player,
- guint version);
-void swfdec_video_movie_init_context (SwfdecPlayer * player,
- guint version);
+void swfdec_player_preinit_global (SwfdecAsContext * context);
+void swfdec_net_stream_init_context (SwfdecPlayer * player);
+void swfdec_sprite_movie_init_context (SwfdecPlayer * player);
+void swfdec_video_movie_init_context (SwfdecPlayer * player);
G_END_DECLS
#endif
diff --git a/libswfdec/swfdec_interval.c b/libswfdec/swfdec_interval.c
index c4caa21..88a2ca4 100644
--- a/libswfdec/swfdec_interval.c
+++ b/libswfdec/swfdec_interval.c
@@ -42,7 +42,7 @@ swfdec_interval_mark (SwfdecAsObject *object)
SwfdecInterval *interval = SWFDEC_INTERVAL (object);
swfdec_as_object_mark (interval->object);
- swfdec_resource_mark (interval->resource);
+ swfdec_as_object_mark (SWFDEC_AS_OBJECT (interval->sandbox));
if (interval->fun_name)
swfdec_as_string_mark (interval->fun_name);
for (i = 0; i < interval->n_args; i++) {
@@ -64,10 +64,6 @@ swfdec_interval_dispose (GObject *object)
swfdec_player_remove_timeout (SWFDEC_PLAYER (SWFDEC_AS_OBJECT (object)->context), &interval->timeout);
interval->timeout.callback = NULL;
}
- if (interval->resource) {
- g_object_unref (interval->resource);
- interval->resource = NULL;
- }
G_OBJECT_CLASS (swfdec_interval_parent_class)->dispose (object);
}
@@ -104,14 +100,16 @@ swfdec_interval_trigger (SwfdecTimeout *timeout)
player->priv->intervals = g_list_remove (player->priv->intervals, interval);
interval->timeout.callback = NULL;
}
+ swfdec_sandbox_use (interval->sandbox);
if (interval->fun_name) {
- swfdec_as_object_call_with_security (interval->object, SWFDEC_SECURITY (interval->resource),
+ swfdec_as_object_call (interval->object,
interval->fun_name, interval->n_args, interval->args, &ret);
} else {
swfdec_as_function_call (SWFDEC_AS_FUNCTION (interval->object), NULL,
interval->n_args, interval->args, &ret);
swfdec_as_context_run (context);
}
+ swfdec_sandbox_unuse (interval->sandbox);
}
static guint
@@ -131,7 +129,7 @@ swfdec_interval_new (SwfdecPlayer *player, guint msecs, gboolean repeat,
swfdec_as_object_add (SWFDEC_AS_OBJECT (interval), context, size);
interval->id = ++player->priv->interval_id;
- interval->resource = SWFDEC_RESOURCE (g_object_ref (context->frame->security));
+ interval->sandbox = SWFDEC_SANDBOX (context->global);
interval->msecs = msecs;
interval->repeat = repeat;
interval->object = object;
diff --git a/libswfdec/swfdec_interval.h b/libswfdec/swfdec_interval.h
index 40a61cc..48941bf 100644
--- a/libswfdec/swfdec_interval.h
+++ b/libswfdec/swfdec_interval.h
@@ -23,6 +23,7 @@
#include <libswfdec/swfdec_as_object.h>
#include <libswfdec/swfdec_as_types.h>
#include <libswfdec/swfdec_player_internal.h>
+#include <libswfdec/swfdec_sandbox.h>
G_BEGIN_DECLS
@@ -40,7 +41,7 @@ struct _SwfdecInterval {
SwfdecAsObject asobject;
SwfdecTimeout timeout;
- SwfdecResource * resource; /* resouce that initiated this interval */
+ SwfdecSandbox * sandbox; /* sandbox we run the script in */
guint id; /* id this interval is identified with */
guint msecs; /* interval in milliseconds */
gboolean repeat; /* TRUE for calling in intervals, FALSE for single-shot */
diff --git a/libswfdec/swfdec_load_object.c b/libswfdec/swfdec_load_object.c
index 3d3d0ec..f9acafe 100644
--- a/libswfdec/swfdec_load_object.c
+++ b/libswfdec/swfdec_load_object.c
@@ -130,8 +130,6 @@ swfdec_load_object_dispose (GObject *object)
swfdec_buffer_unref (load->buffer);
load->buffer = NULL;
}
- g_object_unref (load->resource);
- load->resource = NULL;
G_OBJECT_CLASS (swfdec_load_object_parent_class)->dispose (object);
}
@@ -156,7 +154,7 @@ swfdec_load_object_load (SwfdecPlayer *player, const SwfdecURL *url, gboolean al
if (!allow) {
SWFDEC_WARNING ("SECURITY: no access to %s from %s",
- load->url, swfdec_url_get_url (SWFDEC_FLASH_SECURITY (load->resource)->url));
+ load->url, swfdec_url_get_url (load->sandbox->url));
/* FIXME: call finish? */
@@ -165,7 +163,7 @@ swfdec_load_object_load (SwfdecPlayer *player, const SwfdecURL *url, gboolean al
return;
}
- load->loader = swfdec_loader_load (load->resource->loader, url, load->request, load->buffer);
+ load->loader = swfdec_loader_load (player->priv->resource->loader, url, load->request, load->buffer);
swfdec_stream_set_target (SWFDEC_STREAM (load->loader), SWFDEC_STREAM_TARGET (load));
swfdec_loader_set_data_type (load->loader, SWFDEC_LOADER_DATA_TEXT);
@@ -180,8 +178,8 @@ swfdec_load_object_request (gpointer objectp, gpointer playerp)
SwfdecURL *url;
/* FIXME: or is this relative to the player? */
- url = swfdec_url_new_relative (SWFDEC_FLASH_SECURITY (load->resource)->url, load->url);
- switch (SWFDEC_FLASH_SECURITY (load->resource)->sandbox) {
+ url = swfdec_url_new_relative (swfdec_loader_get_url (player->priv->resource->loader), load->url);
+ switch (load->sandbox->type) {
case SWFDEC_SANDBOX_REMOTE:
case SWFDEC_SANDBOX_LOCAL_NETWORK:
case SWFDEC_SANDBOX_LOCAL_TRUSTED:
@@ -213,6 +211,7 @@ swfdec_load_object_mark (gpointer object, gpointer player)
{
SwfdecLoadObject *load = object;
+ swfdec_as_object_mark (SWFDEC_AS_OBJECT (load->sandbox));
if (load->url)
swfdec_as_string_mark (load->url);
swfdec_as_object_mark (load->target);
@@ -242,7 +241,6 @@ swfdec_load_object_create (SwfdecAsObject *target, const char *url,
load->finish = finish;
/* get the current security */
g_assert (SWFDEC_AS_CONTEXT (player)->frame);
- load->resource = g_object_ref (SWFDEC_AS_CONTEXT (player)->frame->security);
- g_assert (SWFDEC_IS_RESOURCE (load->resource));
+ load->sandbox = SWFDEC_SANDBOX (SWFDEC_AS_CONTEXT (player)->global);
swfdec_player_request_resource (player, swfdec_load_object_request, load, NULL);
}
diff --git a/libswfdec/swfdec_load_object.h b/libswfdec/swfdec_load_object.h
index 5f36625..3436562 100644
--- a/libswfdec/swfdec_load_object.h
+++ b/libswfdec/swfdec_load_object.h
@@ -51,7 +51,7 @@ struct _SwfdecLoadObject {
SwfdecBuffer * buffer; /* data to send */
SwfdecLoader * loader; /* loader when loading or NULL */
- SwfdecResource * resource; /* resource that inited the loading */
+ SwfdecSandbox * sandbox; /* sandbox that inited the loading */
SwfdecAsObject * target; /* target object */
SwfdecLoadObjectProgress progress; /* progress callback */
SwfdecLoadObjectFinish finish; /* finish callback */
diff --git a/libswfdec/swfdec_movie.c b/libswfdec/swfdec_movie.c
index 3dd6902..2f45345 100644
--- a/libswfdec/swfdec_movie.c
+++ b/libswfdec/swfdec_movie.c
@@ -493,20 +493,20 @@ swfdec_movie_execute (SwfdecMovie *movie, SwfdecEventType condition)
return;
}
+ swfdec_sandbox_use (movie->resource->sandbox);
if (movie->events) {
- swfdec_event_list_execute (movie->events, thisp,
- SWFDEC_SECURITY (movie->resource), condition, 0);
+ swfdec_event_list_execute (movie->events, thisp, condition, 0);
}
/* FIXME: how do we compute the version correctly here? */
if (swfdec_movie_get_version (movie) <= 5)
return;
name = swfdec_event_type_get_name (condition);
if (name != NULL) {
- swfdec_as_object_call_with_security (SWFDEC_AS_OBJECT (movie),
- SWFDEC_SECURITY (movie->resource), name, 0, NULL, NULL);
+ swfdec_as_object_call (SWFDEC_AS_OBJECT (movie), name, 0, NULL, NULL);
}
if (condition == SWFDEC_EVENT_CONSTRUCT)
swfdec_as_object_call (thisp, SWFDEC_AS_STR_constructor, 0, NULL, NULL);
+ swfdec_sandbox_unuse (movie->resource->sandbox);
}
/**
@@ -1062,7 +1062,7 @@ swfdec_movie_mark (SwfdecAsObject *object)
swfdec_as_object_mark (listener->object);
swfdec_as_string_mark (listener->name);
}
- swfdec_resource_mark (movie->resource);
+ swfdec_as_object_mark (SWFDEC_AS_OBJECT (movie->resource));
SWFDEC_AS_OBJECT_CLASS (swfdec_movie_parent_class)->mark (object);
}
diff --git a/libswfdec/swfdec_net_stream.c b/libswfdec/swfdec_net_stream.c
index 5a1e935..01566ad 100644
--- a/libswfdec/swfdec_net_stream.c
+++ b/libswfdec/swfdec_net_stream.c
@@ -28,10 +28,10 @@
#include "swfdec_as_strings.h"
#include "swfdec_audio_flv.h"
#include "swfdec_debug.h"
-#include "swfdec_flash_security.h"
#include "swfdec_loader_internal.h"
#include "swfdec_player_internal.h"
#include "swfdec_resource.h"
+#include "swfdec_sandbox.h"
#include "swfdec_stream_target.h"
/* NB: code and level must be rooted gc-strings */
@@ -499,11 +499,11 @@ swfdec_net_stream_set_url (SwfdecNetStream *stream, const char *url_string)
cx = SWFDEC_AS_OBJECT (stream)->context;
player = SWFDEC_PLAYER (cx);
g_assert (cx->frame);
- url = swfdec_url_new_relative (SWFDEC_FLASH_SECURITY (player->priv->resource)->url, url_string);
+ url = swfdec_url_new_relative (swfdec_loader_get_url (player->priv->resource->loader), url_string);
if (swfdec_url_is_local (url)) {
swfdec_net_stream_load (player, url, TRUE, stream);
} else {
- switch (SWFDEC_FLASH_SECURITY (cx->frame->security)->sandbox) {
+ switch (SWFDEC_SANDBOX (cx->global)->type) {
case SWFDEC_SANDBOX_REMOTE:
swfdec_net_stream_load (player, url, TRUE, stream);
break;
diff --git a/libswfdec/swfdec_net_stream_as.c b/libswfdec/swfdec_net_stream_as.c
index 7057103..470b035 100644
--- a/libswfdec/swfdec_net_stream_as.c
+++ b/libswfdec/swfdec_net_stream_as.c
@@ -153,7 +153,7 @@ swfdec_net_stream_construct (SwfdecAsContext *cx, SwfdecAsObject *obj, guint arg
}
void
-swfdec_net_stream_init_context (SwfdecPlayer *player, guint version)
+swfdec_net_stream_init_context (SwfdecPlayer *player)
{
SwfdecAsContext *context;
SwfdecAsObject *stream, *proto;
diff --git a/libswfdec/swfdec_player.c b/libswfdec/swfdec_player.c
index 7bcce79..3393514 100644
--- a/libswfdec/swfdec_player.c
+++ b/libswfdec/swfdec_player.c
@@ -29,7 +29,6 @@
#include "swfdec_player_internal.h"
#include "swfdec_as_frame_internal.h"
-#include "swfdec_as_internal.h"
#include "swfdec_as_strings.h"
#include "swfdec_audio_internal.h"
#include "swfdec_button_movie.h" /* for mouse cursor */
@@ -37,9 +36,6 @@
#include "swfdec_debug.h"
#include "swfdec_enums.h"
#include "swfdec_event.h"
-#include "swfdec_flash_security.h"
-#include "swfdec_initialize.h"
-#include "swfdec_internal.h"
#include "swfdec_loader_internal.h"
#include "swfdec_marshal.h"
#include "swfdec_movie.h"
@@ -477,8 +473,9 @@ swfdec_player_do_action (SwfdecPlayer *player)
} while (action->movie == NULL); /* skip removed actions */
if (action) {
if (action->script) {
- swfdec_as_object_run_with_security (SWFDEC_AS_OBJECT (action->movie),
- action->script, SWFDEC_SECURITY (action->movie->resource));
+ swfdec_sandbox_use (action->movie->resource->sandbox);
+ swfdec_as_object_run (SWFDEC_AS_OBJECT (action->movie), action->script);
+ swfdec_sandbox_unuse (action->movie->resource->sandbox);
} else {
swfdec_movie_execute (action->movie, action->event);
}
@@ -917,6 +914,8 @@ swfdec_player_dispose (GObject *object)
}
g_assert (priv->movies == NULL);
g_assert (priv->audio == NULL);
+ g_assert (g_hash_table_size (priv->sandboxes) == 0);
+ g_hash_table_destroy (priv->sandboxes);
if (priv->external_timeout.callback)
swfdec_player_remove_timeout (player, &priv->external_timeout);
if (priv->rate) {
@@ -1796,6 +1795,8 @@ swfdec_player_init (SwfdecPlayer *player)
priv->iterate_timeout.callback = swfdec_player_iterate;
priv->stage_width = -1;
priv->stage_height = -1;
+
+ priv->sandboxes = g_hash_table_new (swfdec_url_hash, swfdec_url_equal);
}
void
@@ -1986,8 +1987,7 @@ swfdec_player_launch (SwfdecPlayer *player, SwfdecLoaderRequest request, const c
* the player is already initialized, this function does nothing.
**/
void
-swfdec_player_initialize (SwfdecPlayer *player, guint version,
- guint rate, guint width, guint height)
+swfdec_player_initialize (SwfdecPlayer *player, guint rate, guint width, guint height)
{
SwfdecPlayerPrivate *priv;
@@ -1996,24 +1996,6 @@ swfdec_player_initialize (SwfdecPlayer *player, guint version,
priv = player->priv;
if (!priv->initialized) {
- SwfdecAsContext *context = SWFDEC_AS_CONTEXT (player);
- swfdec_as_context_startup (context, version);
- /* reset state for initialization */
- /* FIXME: have a better way to do this */
- if (context->state == SWFDEC_AS_CONTEXT_RUNNING) {
- context->state = SWFDEC_AS_CONTEXT_NEW;
- swfdec_sprite_movie_init_context (player, version);
- swfdec_video_movie_init_context (player, version);
- swfdec_net_stream_init_context (player, version);
-
- swfdec_as_context_run_init_script (context, swfdec_initialize,
- sizeof (swfdec_initialize), context->version);
-
- if (context->state == SWFDEC_AS_CONTEXT_NEW) {
- context->state = SWFDEC_AS_CONTEXT_RUNNING;
- swfdec_as_object_set_constructor (priv->roots->data, priv->MovieClip);
- }
- }
priv->initialized = TRUE;
g_object_notify (G_OBJECT (player), "initialized");
} else {
diff --git a/libswfdec/swfdec_player_as.c b/libswfdec/swfdec_player_as.c
index e844bb6..a091f93 100644
--- a/libswfdec/swfdec_player_as.c
+++ b/libswfdec/swfdec_player_as.c
@@ -346,7 +346,7 @@ swfdec_player_object_registerClass (SwfdecAsContext *cx, SwfdecAsObject *object,
/* This is ran at the beginning of swfdec_as_context_startup.
* Yes, this is a hack */
void
-swfdec_player_preinit_global (SwfdecAsContext *context, guint version)
+swfdec_player_preinit_global (SwfdecAsContext *context)
{
/* init these two before swfdec_as_context_startup, so they won't get
* __proto__ and constructor properties */
diff --git a/libswfdec/swfdec_player_internal.h b/libswfdec/swfdec_player_internal.h
index dd9184b..fe08454 100644
--- a/libswfdec/swfdec_player_internal.h
+++ b/libswfdec/swfdec_player_internal.h
@@ -27,7 +27,6 @@
#include <libswfdec/swfdec_player_scripting.h>
#include <libswfdec/swfdec_rect.h>
#include <libswfdec/swfdec_ringbuffer.h>
-#include <libswfdec/swfdec_security.h>
#include <libswfdec/swfdec_socket.h>
#include <libswfdec/swfdec_system.h>
@@ -136,12 +135,12 @@ struct _SwfdecPlayerPrivate
SwfdecRingBuffer * actions[SWFDEC_PLAYER_N_ACTION_QUEUES]; /* all actions we've queued up so far */
/* security */
+ GHashTable * sandboxes; /* SwfdecURL => SwfdecSandbox mapping */
GList * loading_policy_files; /* list of loading SwfdecPlayerLoader - newest first */
GSList * policy_files; /* list of SwfdecPolicyLoader that finished loading */
};
void swfdec_player_initialize (SwfdecPlayer * player,
- guint version,
guint rate,
guint width,
guint height);
diff --git a/libswfdec/swfdec_policy_file.c b/libswfdec/swfdec_policy_file.c
index 9fbb768..34a532d 100644
--- a/libswfdec/swfdec_policy_file.c
+++ b/libswfdec/swfdec_policy_file.c
@@ -25,7 +25,6 @@
#include <string.h>
#include "swfdec_policy_file.h"
-#include "swfdec_flash_security.h"
#include "swfdec_resource.h"
#include "swfdec_as_strings.h"
#include "swfdec_debug.h"
diff --git a/libswfdec/swfdec_resource.c b/libswfdec/swfdec_resource.c
index f76f891..30baaa4 100644
--- a/libswfdec/swfdec_resource.c
+++ b/libswfdec/swfdec_resource.c
@@ -25,18 +25,18 @@
#include <stdlib.h>
#include <string.h>
#include "swfdec_resource.h"
-#include "swfdec_as_frame_internal.h"
+#include "swfdec_as_object.h"
#include "swfdec_as_internal.h"
#include "swfdec_as_interpret.h"
#include "swfdec_as_strings.h"
#include "swfdec_character.h"
#include "swfdec_debug.h"
#include "swfdec_decoder.h"
-#include "swfdec_flash_security.h"
#include "swfdec_image_decoder.h"
#include "swfdec_loader_internal.h"
#include "swfdec_movie_clip_loader.h"
#include "swfdec_player_internal.h"
+#include "swfdec_sandbox.h"
#include "swfdec_script.h"
#include "swfdec_sprite.h"
#include "swfdec_stream_target.h"
@@ -45,7 +45,7 @@
static void swfdec_resource_stream_target_init (SwfdecStreamTargetInterface *iface);
-G_DEFINE_TYPE_WITH_CODE (SwfdecResource, swfdec_resource, SWFDEC_TYPE_FLASH_SECURITY,
+G_DEFINE_TYPE_WITH_CODE (SwfdecResource, swfdec_resource, SWFDEC_TYPE_AS_OBJECT,
G_IMPLEMENT_INTERFACE (SWFDEC_TYPE_STREAM_TARGET, swfdec_resource_stream_target_init))
/*** SWFDEC_STREAM_TARGET interface ***/
@@ -56,27 +56,13 @@ swfdec_resource_is_root (SwfdecResource *resource)
g_return_val_if_fail (SWFDEC_IS_RESOURCE (resource), FALSE);
return
- resource->movie == SWFDEC_FLASH_SECURITY (resource)->player->priv->roots->data;
+ resource->movie == SWFDEC_PLAYER (SWFDEC_AS_OBJECT (resource)->context)->priv->roots->data;
}
static SwfdecPlayer *
swfdec_resource_stream_target_get_player (SwfdecStreamTarget *target)
{
- return SWFDEC_FLASH_SECURITY (target)->player;
-}
-
-static void
-swfdec_resource_check_rights (SwfdecResource *resource)
-{
- SwfdecFlashSecurity *sec = SWFDEC_FLASH_SECURITY (resource);
- SwfdecSwfDecoder *dec = SWFDEC_SWF_DECODER (resource->decoder);
-
- if (swfdec_resource_is_root (resource)) {
- if (dec->use_network && sec->sandbox == SWFDEC_SANDBOX_LOCAL_FILE)
- sec->sandbox = SWFDEC_SANDBOX_LOCAL_NETWORK;
- SWFDEC_INFO ("enabling local-with-network sandbox for %s",
- swfdec_url_get_url (swfdec_loader_get_url (resource->loader)));
- }
+ return SWFDEC_PLAYER (SWFDEC_AS_OBJECT (target)->context);
}
static void
@@ -90,14 +76,23 @@ swfdec_resource_stream_target_image (SwfdecResource *instance)
if (SWFDEC_IS_SWF_DECODER (instance->decoder)) {
SwfdecSwfDecoder *dec = SWFDEC_SWF_DECODER (instance->decoder);
- movie->sprite = dec->main_sprite;
- g_assert (movie->sprite->parse_frame > 0);
- movie->n_frames = movie->sprite->n_frames;
- swfdec_movie_invalidate_last (SWFDEC_MOVIE (movie));
- swfdec_resource_check_rights (instance);
- if (swfdec_resource_is_root (instance)) {
- swfdec_movie_initialize (SWFDEC_MOVIE (movie));
- swfdec_player_perform_actions (SWFDEC_FLASH_SECURITY (instance)->player);
+ if (swfdec_sandbox_set_allow_network (instance->sandbox,
+ SWFDEC_SWF_DECODER (instance->decoder)->use_network)) {
+ movie->sprite = dec->main_sprite;
+ g_assert (movie->sprite->parse_frame > 0);
+ movie->n_frames = movie->sprite->n_frames;
+ swfdec_movie_invalidate_last (SWFDEC_MOVIE (movie));
+ if (swfdec_resource_is_root (instance)) {
+ SwfdecPlayer *player = SWFDEC_PLAYER (SWFDEC_AS_OBJECT (instance)->context);
+ swfdec_as_object_set_constructor (SWFDEC_AS_OBJECT (movie), player->priv->MovieClip);
+ swfdec_movie_initialize (SWFDEC_MOVIE (movie));
+ swfdec_player_perform_actions (player);
+ }
+ } else {
+ SWFDEC_FIXME ("cannot continue loading %s, invalid rights",
+ swfdec_url_get_url (swfdec_loader_get_url (instance->loader)));
+ swfdec_stream_set_target (SWFDEC_STREAM (instance->loader), NULL);
+ /* FIXME: anyting on the movie we need to clear? */
}
} else {
g_assert_not_reached ();
@@ -200,7 +195,7 @@ swfdec_resource_create_movie (SwfdecResource *resource)
if (resource->movie)
return TRUE;
- player = SWFDEC_FLASH_SECURITY (resource)->player;
+ player = SWFDEC_PLAYER (SWFDEC_AS_OBJECT (resource)->context);
movie = (SwfdecSpriteMovie *) swfdec_action_lookup_object (SWFDEC_AS_CONTEXT (player),
player->priv->roots->data, resource->target, resource->target + strlen (resource->target));
if (!SWFDEC_IS_SPRITE_MOVIE (movie)) {
@@ -217,7 +212,8 @@ swfdec_resource_create_movie (SwfdecResource *resource)
if (movie == NULL) {
movie = swfdec_player_create_movie_at_level (player, resource, level);
} else {
- movie = swfdec_resource_replace_movie (movie, resource);
+ /* FIXME: is this correct? */
+ movie = swfdec_resource_replace_movie (movie, SWFDEC_MOVIE (movie)->resource);
}
swfdec_player_unroot (player, resource);
return TRUE;
@@ -262,7 +258,7 @@ swfdec_resource_stream_target_parse (SwfdecStreamTarget *target, SwfdecStream *s
return;
buffer = swfdec_buffer_queue_peek (queue, 4);
dec =
- swfdec_decoder_new (SWFDEC_FLASH_SECURITY (resource)->player, buffer);
+ swfdec_decoder_new (SWFDEC_PLAYER (SWFDEC_AS_OBJECT (resource)->context), buffer);
swfdec_buffer_unref (buffer);
if (dec == NULL) {
SWFDEC_ERROR ("no decoder found for format");
@@ -304,8 +300,8 @@ swfdec_resource_stream_target_parse (SwfdecStreamTarget *target, SwfdecStream *s
if (SWFDEC_IS_SWF_DECODER (dec))
resource->version = SWFDEC_SWF_DECODER (dec)->version;
if (swfdec_resource_is_root (resource)) {
- swfdec_player_initialize (SWFDEC_FLASH_SECURITY (resource)->player,
- resource->version, dec->rate, dec->width, dec->height);
+ swfdec_player_initialize (SWFDEC_PLAYER (SWFDEC_AS_OBJECT (resource)->context),
+ dec->rate, dec->width, dec->height);
}
}
if (status & SWFDEC_STATUS_IMAGE)
@@ -369,6 +365,16 @@ swfdec_resource_stream_target_init (SwfdecStreamTargetInterface *iface)
}
static void
+swfdec_resource_mark (SwfdecAsObject *object)
+{
+ SwfdecResource *resource = SWFDEC_RESOURCE (object);
+
+ if (resource->clip_loader)
+ swfdec_as_object_mark (SWFDEC_AS_OBJECT (resource->clip_loader));
+ swfdec_as_object_mark (SWFDEC_AS_OBJECT (resource->sandbox));
+}
+
+static void
swfdec_resource_dispose (GObject *object)
{
SwfdecResource *resource = SWFDEC_RESOURCE (object);
@@ -398,8 +404,11 @@ static void
swfdec_resource_class_init (SwfdecResourceClass *klass)
{
GObjectClass *object_class = G_OBJECT_CLASS (klass);
+ SwfdecAsObjectClass *asobject_class = SWFDEC_AS_OBJECT_CLASS (klass);
object_class->dispose = swfdec_resource_dispose;
+
+ asobject_class->mark = swfdec_resource_mark;
}
static void
@@ -420,8 +429,6 @@ swfdec_resource_set_loader (SwfdecResource *resource, SwfdecLoader *loader)
resource->loader = g_object_ref (loader);
swfdec_stream_set_target (SWFDEC_STREAM (resource->loader), SWFDEC_STREAM_TARGET (resource));
- swfdec_flash_security_set_url (SWFDEC_FLASH_SECURITY (resource),
- swfdec_loader_get_url (loader));
resource->state = SWFDEC_RESOURCE_REQUESTED;
}
@@ -429,28 +436,23 @@ SwfdecResource *
swfdec_resource_new (SwfdecPlayer *player, SwfdecLoader *loader, const char *variables)
{
SwfdecResource *resource;
+ guint size;
g_return_val_if_fail (SWFDEC_IS_PLAYER (player), NULL);
g_return_val_if_fail (SWFDEC_IS_LOADER (loader), NULL);
+ size = sizeof (SwfdecResource);
+ if (!swfdec_as_context_use_mem (SWFDEC_AS_CONTEXT (player), size))
+ size = 0;
resource = g_object_new (SWFDEC_TYPE_RESOURCE, NULL);
- resource->version = 7;
- SWFDEC_FLASH_SECURITY (resource)->player = player;
+ swfdec_as_object_add (SWFDEC_AS_OBJECT (resource), SWFDEC_AS_CONTEXT (player), size);
+ resource->version = 8;
resource->variables = g_strdup (variables);
swfdec_resource_set_loader (resource, loader);
return resource;
}
-void
-swfdec_resource_mark (SwfdecResource *resource)
-{
- g_return_if_fail (SWFDEC_IS_RESOURCE (resource));
-
- if (resource->clip_loader)
- swfdec_as_object_mark (SWFDEC_AS_OBJECT (resource->clip_loader));
-}
-
gpointer
swfdec_resource_get_export (SwfdecResource *instance, const char *name)
{
@@ -480,9 +482,11 @@ swfdec_resource_add_export (SwfdecResource *instance, SwfdecCharacter *character
g_hash_table_insert (instance->export_names, g_object_ref (character), g_strdup (name));
}
+/*** RESOURC LOAD ***/
+
typedef struct _SwfdecResourceLoad SwfdecResourceLoad;
struct _SwfdecResourceLoad {
- SwfdecResource * resource;
+ SwfdecSandbox * sandbox;
char * target;
char * url;
SwfdecLoaderRequest request;
@@ -496,8 +500,7 @@ swfdec_resource_load_free (gpointer loadp)
{
SwfdecResourceLoad *load = loadp;
- swfdec_player_unroot (SWFDEC_FLASH_SECURITY (load->resource)->player, load);
- g_object_unref (load->resource);
+ swfdec_player_unroot (SWFDEC_PLAYER (SWFDEC_AS_OBJECT (load->sandbox)->context), load);
g_free (load->url);
g_free (load->target);
if (load->buffer)
@@ -510,7 +513,7 @@ swfdec_resource_load_mark (gpointer loadp, gpointer playerp)
{
SwfdecResourceLoad *load = loadp;
- swfdec_resource_mark (load->resource);
+ swfdec_as_object_mark (SWFDEC_AS_OBJECT (load->sandbox));
if (load->loader)
swfdec_as_object_mark (SWFDEC_AS_OBJECT (load->loader));
}
@@ -522,24 +525,27 @@ swfdec_resource_do_load (SwfdecPlayer *player, const SwfdecURL *url, gboolean al
SwfdecResource *resource;
SwfdecLoader *loader;
+ if (!swfdec_as_context_use_mem (SWFDEC_AS_CONTEXT (player), sizeof (SwfdecResource)))
+ return;
resource = g_object_new (SWFDEC_TYPE_RESOURCE, NULL);
- resource->version = load->resource->version;
- SWFDEC_FLASH_SECURITY (resource)->player = player;
+ swfdec_as_object_add (SWFDEC_AS_OBJECT (resource), SWFDEC_AS_CONTEXT (player), sizeof (SwfdecResource));
+ resource->version = 8;
resource->target = g_strdup (load->target);
if (load->loader)
resource->clip_loader = g_object_ref (load->loader);
- swfdec_player_root (player, resource, (GFunc) swfdec_resource_mark);
+ swfdec_player_root (player, resource, (GFunc) swfdec_as_object_mark);
if (!allowed) {
SWFDEC_WARNING ("SECURITY: no access to %s from %s",
- load->url, swfdec_url_get_url (SWFDEC_FLASH_SECURITY (load->resource)->url));
+ load->url, swfdec_url_get_url (load->sandbox->url));
/* FIXME: is replacing correct? */
swfdec_resource_emit_error (resource, SWFDEC_AS_STR_IllegalRequest);
g_object_unref (resource);
return;
}
- loader = swfdec_loader_load (load->resource->loader, url, load->request, load->buffer);
+ loader = swfdec_loader_load (SWFDEC_PLAYER (SWFDEC_AS_OBJECT (load->sandbox))->priv->resource->loader,
+ url, load->request, load->buffer);
swfdec_resource_set_loader (resource, loader);
g_object_unref (loader);
}
@@ -562,7 +568,7 @@ swfdec_resource_load_request (gpointer loadp, gpointer playerp)
SWFDEC_DEBUG ("no movie, not unloading");
return;
}
- swfdec_resource_replace_movie (movie, load->resource);
+ swfdec_resource_replace_movie (movie, SWFDEC_MOVIE (movie)->resource);
return;
}
@@ -579,8 +585,8 @@ swfdec_resource_load_request (gpointer loadp, gpointer playerp)
return;
}
- url = swfdec_url_new_relative (SWFDEC_FLASH_SECURITY (player->priv->resource)->url, load->url);
- switch (SWFDEC_FLASH_SECURITY (load->resource)->sandbox) {
+ url = swfdec_url_new_relative (swfdec_loader_get_url (player->priv->resource->loader), load->url);
+ switch (load->sandbox->type) {
case SWFDEC_SANDBOX_REMOTE:
swfdec_resource_do_load (player, url, !swfdec_url_is_local (url), load);
break;
@@ -634,7 +640,7 @@ swfdec_resource_load (SwfdecPlayer *player, const char *target, const char *url,
} else {
load->target = g_strdup (target);
}
- load->resource = SWFDEC_RESOURCE (g_object_ref (SWFDEC_AS_CONTEXT (player)->frame->security));
+ load->sandbox = SWFDEC_SANDBOX (SWFDEC_AS_CONTEXT (player)->global);
load->url = g_strdup (url);
load->request = request;
load->buffer = buffer;
diff --git a/libswfdec/swfdec_resource.h b/libswfdec/swfdec_resource.h
index 5de9c9b..c7d9544 100644
--- a/libswfdec/swfdec_resource.h
+++ b/libswfdec/swfdec_resource.h
@@ -21,7 +21,7 @@
#define _SWFDEC_RESOURCE_H_
#include <libswfdec/swfdec_player.h>
-#include <libswfdec/swfdec_flash_security.h>
+#include <libswfdec/swfdec_sandbox.h>
#include <libswfdec/swfdec_sprite_movie.h>
G_BEGIN_DECLS
@@ -45,9 +45,10 @@ typedef enum {
struct _SwfdecResource
{
- SwfdecFlashSecurity flash_security;
+ SwfdecAsObject object;
guint version; /* version of this resource */
+ SwfdecSandbox * sandbox; /* sandbox this resource belongs to */
SwfdecSpriteMovie * movie; /* the movie responsible for creating this instance */
SwfdecLoader * loader; /* the loader providing data for the decoder */
@@ -65,7 +66,7 @@ struct _SwfdecResource
struct _SwfdecResourceClass
{
- SwfdecFlashSecurityClass flash_security_class;
+ SwfdecAsObjectClass object_class;
};
GType swfdec_resource_get_type (void);
@@ -74,8 +75,6 @@ SwfdecResource *swfdec_resource_new (SwfdecPlayer * player,
SwfdecLoader * loader,
const char * variables);
-void swfdec_resource_mark (SwfdecResource * resource);
-
gboolean swfdec_resource_emit_on_load_init (SwfdecResource * resource);
void swfdec_resource_add_export (SwfdecResource * instance,
SwfdecCharacter * character,
diff --git a/libswfdec/swfdec_security.c b/libswfdec/swfdec_security.c
deleted file mode 100644
index ae431a0..0000000
--- a/libswfdec/swfdec_security.c
+++ /dev/null
@@ -1,63 +0,0 @@
-/* Swfdec
- * Copyright (C) 2007 Benjamin Otte <otte at gnome.org>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor,
- * Boston, MA 02110-1301 USA
- */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include <string.h>
-#include "swfdec_security.h"
-#include "swfdec_debug.h"
-
-
-G_DEFINE_ABSTRACT_TYPE (SwfdecSecurity, swfdec_security, G_TYPE_OBJECT)
-
-static void
-swfdec_security_class_init (SwfdecSecurityClass *klass)
-{
-}
-
-static void
-swfdec_security_init (SwfdecSecurity *security)
-{
-}
-
-/**
- * swfdec_security_allow:
- * @guard: security guarding an operation
- * @key: security available
- *
- * Asks @guard to check if the given @key allows accessing it. If so, a
- * key for accessing the operation is returned.
- *
- * Returns: %TRUE if access was granted, %FALSE otherwise.
- **/
-gboolean
-swfdec_security_allow (SwfdecSecurity *guard, SwfdecSecurity *key)
-{
- SwfdecSecurityClass *klass;
-
- g_return_val_if_fail (SWFDEC_IS_SECURITY (guard), FALSE);
- g_return_val_if_fail (SWFDEC_IS_SECURITY (key), FALSE);
-
- klass = SWFDEC_SECURITY_GET_CLASS (guard);
- g_return_val_if_fail (klass->allow, FALSE);
- return klass->allow (guard, key);
-}
-
diff --git a/libswfdec/swfdec_security.h b/libswfdec/swfdec_security.h
deleted file mode 100644
index 0211301..0000000
--- a/libswfdec/swfdec_security.h
+++ /dev/null
@@ -1,58 +0,0 @@
-/* Swfdec
- * Copyright (C) 2007 Benjamin Otte <otte at gnome.org>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor,
- * Boston, MA 02110-1301 USA
- */
-
-#ifndef _SWFDEC_SECURITY_H_
-#define _SWFDEC_SECURITY_H_
-
-#include <glib-object.h>
-#include <libswfdec/swfdec_url.h>
-
-G_BEGIN_DECLS
-
-typedef struct _SwfdecSecurity SwfdecSecurity;
-typedef struct _SwfdecSecurityClass SwfdecSecurityClass;
-
-#define SWFDEC_TYPE_SECURITY (swfdec_security_get_type())
-#define SWFDEC_IS_SECURITY(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), SWFDEC_TYPE_SECURITY))
-#define SWFDEC_IS_SECURITY_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), SWFDEC_TYPE_SECURITY))
-#define SWFDEC_SECURITY(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), SWFDEC_TYPE_SECURITY, SwfdecSecurity))
-#define SWFDEC_SECURITY_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), SWFDEC_TYPE_SECURITY, SwfdecSecurityClass))
-#define SWFDEC_SECURITY_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), SWFDEC_TYPE_SECURITY, SwfdecSecurityClass))
-
-struct _SwfdecSecurity
-{
- GObject object;
-};
-
-struct _SwfdecSecurityClass
-{
- GObjectClass object_class;
-
- gboolean (* allow) (SwfdecSecurity * guard,
- SwfdecSecurity * key);
-};
-
-GType swfdec_security_get_type (void);
-
-gboolean swfdec_security_allow (SwfdecSecurity * guard,
- SwfdecSecurity * key);
-
-
-G_END_DECLS
-#endif
diff --git a/libswfdec/swfdec_security_allow.c b/libswfdec/swfdec_security_allow.c
deleted file mode 100644
index fb678b4..0000000
--- a/libswfdec/swfdec_security_allow.c
+++ /dev/null
@@ -1,72 +0,0 @@
-/* Swfdec
- * Copyright (C) 2007 Benjamin Otte <otte at gnome.org>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor,
- * Boston, MA 02110-1301 USA
- */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include <string.h>
-#include "swfdec_security_allow.h"
-#include "swfdec_debug.h"
-
-
-G_DEFINE_TYPE (SwfdecSecurityAllow, swfdec_security_allow, SWFDEC_TYPE_SECURITY)
-
-static gboolean
-swfdec_security_allow_allow (SwfdecSecurity *guard, SwfdecSecurity *key)
-{
- return TRUE;
-}
-
-static void
-swfdec_security_allow_class_init (SwfdecSecurityAllowClass *klass)
-{
- SwfdecSecurityClass *security_class = SWFDEC_SECURITY_CLASS (klass);
-
- security_class->allow = swfdec_security_allow_allow;
-}
-
-static void
-swfdec_security_allow_init (SwfdecSecurityAllow *security_allow)
-{
-}
-
-/**
- * swfdec_security_allow_new:
- *
- * Creates a new Security object that allows everything. These objects are used
- * by default when no other security object is in use. This is particularly
- * useful for script engines that are not security sensitive or code injection
- * via debugging.
- *
- * Returns: a new #SwfdecSecurity object
- **/
-SwfdecSecurity *
-swfdec_security_allow_new (void)
-{
- static SwfdecSecurity *singleton = NULL;
-
- /* FIXME: not threadsafe */
- if (singleton)
- return g_object_ref (singleton);
-
- singleton = g_object_new (SWFDEC_TYPE_SECURITY_ALLOW, NULL);
- g_object_add_weak_pointer (G_OBJECT (singleton), (gpointer) &singleton);
- return singleton;
-}
diff --git a/libswfdec/swfdec_security_allow.h b/libswfdec/swfdec_security_allow.h
deleted file mode 100644
index 108ed72..0000000
--- a/libswfdec/swfdec_security_allow.h
+++ /dev/null
@@ -1,53 +0,0 @@
-/* Swfdec
- * Copyright (C) 2007 Benjamin Otte <otte at gnome.org>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor,
- * Boston, MA 02110-1301 USA
- */
-
-#ifndef _SWFDEC_SECURITY_ALLOW_H_
-#define _SWFDEC_SECURITY_ALLOW_H_
-
-#include <libswfdec/swfdec_security.h>
-
-G_BEGIN_DECLS
-
-typedef struct _SwfdecSecurityAllow SwfdecSecurityAllow;
-typedef struct _SwfdecSecurityAllowClass SwfdecSecurityAllowClass;
-
-#define SWFDEC_TYPE_SECURITY_ALLOW (swfdec_security_allow_get_type())
-#define SWFDEC_IS_SECURITY_ALLOW(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), SWFDEC_TYPE_SECURITY_ALLOW))
-#define SWFDEC_IS_SECURITY_ALLOW_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), SWFDEC_TYPE_SECURITY_ALLOW))
-#define SWFDEC_SECURITY_ALLOW(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), SWFDEC_TYPE_SECURITY_ALLOW, SwfdecSecurityAllow))
-#define SWFDEC_SECURITY_ALLOW_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), SWFDEC_TYPE_SECURITY_ALLOW, SwfdecSecurityAllowClass))
-#define SWFDEC_SECURITY_ALLOW_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), SWFDEC_TYPE_SECURITY_ALLOW, SwfdecSecurityAllowClass))
-
-struct _SwfdecSecurityAllow
-{
- SwfdecSecurity security;
-};
-
-struct _SwfdecSecurityAllowClass
-{
- SwfdecSecurityClass security_class;
-};
-
-GType swfdec_security_allow_get_type (void);
-
-SwfdecSecurity * swfdec_security_allow_new (void);
-
-
-G_END_DECLS
-#endif
diff --git a/libswfdec/swfdec_sprite_movie_as.c b/libswfdec/swfdec_sprite_movie_as.c
index 223d3b1..987a97e 100644
--- a/libswfdec/swfdec_sprite_movie_as.c
+++ b/libswfdec/swfdec_sprite_movie_as.c
@@ -867,7 +867,7 @@ swfdec_sprite_movie_setMask (SwfdecAsContext *cx, SwfdecAsObject *object,
}
void
-swfdec_sprite_movie_init_context (SwfdecPlayer *player, guint version)
+swfdec_sprite_movie_init_context (SwfdecPlayer *player)
{
SwfdecPlayerPrivate *priv = player->priv;
SwfdecAsContext *context = SWFDEC_AS_CONTEXT (player);
diff --git a/libswfdec/swfdec_system_security.c b/libswfdec/swfdec_system_security.c
index f6b20e9..284eea1 100644
--- a/libswfdec/swfdec_system_security.c
+++ b/libswfdec/swfdec_system_security.c
@@ -24,7 +24,6 @@
#include "swfdec_as_internal.h"
#include "swfdec_debug.h"
#include "swfdec_as_strings.h"
-#include "swfdec_flash_security.h"
#include "swfdec_resource.h"
#include "swfdec_player_internal.h"
@@ -80,7 +79,7 @@ swfdec_system_security_get_sandboxType (SwfdecAsContext *cx,
SwfdecAsObject *object, guint argc, SwfdecAsValue *argv,
SwfdecAsValue *ret)
{
- switch (SWFDEC_FLASH_SECURITY (SWFDEC_PLAYER (cx)->priv->resource)->sandbox) {
+ switch (SWFDEC_SANDBOX (cx->global)->type) {
case SWFDEC_SANDBOX_REMOTE:
SWFDEC_AS_VALUE_SET_STRING (ret, SWFDEC_AS_STR_remote);
break;
diff --git a/libswfdec/swfdec_video_movie_as.c b/libswfdec/swfdec_video_movie_as.c
index 833c634..91f9c7e 100644
--- a/libswfdec/swfdec_video_movie_as.c
+++ b/libswfdec/swfdec_video_movie_as.c
@@ -61,7 +61,7 @@ swfdec_video_clear (SwfdecAsContext *cx, SwfdecAsObject *object, guint argc,
}
void
-swfdec_video_movie_init_context (SwfdecPlayer *player, guint version)
+swfdec_video_movie_init_context (SwfdecPlayer *player)
{
SwfdecAsContext *context;
SwfdecAsObject *video, *proto;
@@ -83,12 +83,6 @@ swfdec_video_movie_init_context (SwfdecPlayer *player, guint version)
swfdec_as_object_set_variable_and_flags (video, SWFDEC_AS_STR_prototype, &val,
SWFDEC_AS_VARIABLE_HIDDEN | SWFDEC_AS_VARIABLE_PERMANENT);
/* set the right properties on the Video.prototype object */
- if (version >= 6) {
- swfdec_as_object_add_function (proto, SWFDEC_AS_STR_attachVideo,
- SWFDEC_TYPE_VIDEO_MOVIE, swfdec_video_attach_video, 0);
- swfdec_as_object_add_function (proto, SWFDEC_AS_STR_clear,
- SWFDEC_TYPE_VIDEO_MOVIE, swfdec_video_clear, 0);
- }
SWFDEC_AS_VALUE_SET_OBJECT (&val, video);
swfdec_as_object_set_variable_and_flags (proto, SWFDEC_AS_STR_constructor,
&val, SWFDEC_AS_VARIABLE_HIDDEN | SWFDEC_AS_VARIABLE_PERMANENT);
diff --git a/test/swfdec_test.c b/test/swfdec_test.c
index 6e1e1d6..3974f4b 100644
--- a/test/swfdec_test.c
+++ b/test/swfdec_test.c
@@ -111,7 +111,7 @@ main (int argc, char **argv)
return EXIT_FAILURE;
context = g_object_new (SWFDEC_TYPE_AS_CONTEXT, NULL);
- swfdec_as_context_startup (context, SWFDEC_TEST_VERSION);
+ swfdec_as_context_startup (context);
SWFDEC_AS_VALUE_SET_BOOLEAN (&val, dump);
swfdec_as_object_set_variable (context->global,
diff --git a/vivified/core/vivi_application.c b/vivified/core/vivi_application.c
index c52bf1e..40051aa 100644
--- a/vivified/core/vivi_application.c
+++ b/vivified/core/vivi_application.c
@@ -153,7 +153,7 @@ vivi_application_new (void)
ViviApplication *app;
app = g_object_new (VIVI_TYPE_APPLICATION, NULL);
- swfdec_as_context_startup (SWFDEC_AS_CONTEXT (app), 8);
+ swfdec_as_context_startup (SWFDEC_AS_CONTEXT (app));
vivi_function_init_context (app);
return app;
}
commit 26341ec1a740e9eb0db4f296c747359a6ee57ff9
Author: Benjamin Otte <otte at gnome.org>
Date: Fri Jan 18 15:08:46 2008 +0100
add functions to use SwfdecURL as a hash table key
diff --git a/libswfdec/swfdec_url.c b/libswfdec/swfdec_url.c
index 6cdb54f..6243f75 100644
--- a/libswfdec/swfdec_url.c
+++ b/libswfdec/swfdec_url.c
@@ -469,3 +469,85 @@ swfdec_url_is_local (const SwfdecURL *url)
/* FIXME: If we ever support gnome-vfs, this might become tricky */
return swfdec_url_has_protocol (url, "file");
}
+
+/**
+ * swfdec_url_equal:
+ * @a: a #SwfdecURL
+ * @b: a #SwfdecURL
+ *
+ * Compares the 2 given URLs for equality. 2 URLs are considered equal, when
+ * they point to the same resource. This function is intended to be
+ * used together with swfdec_url_hash() in a #GHashtable.
+ *
+ * Returns: %TRUE if the 2 given urls point to the same resource, %FALSE
+ * otherwise.
+ **/
+gboolean
+swfdec_url_equal (gconstpointer a, gconstpointer b)
+{
+ const SwfdecURL *urla = a;
+ const SwfdecURL *urlb = b;
+
+ if (!swfdec_url_has_protocol (urla, urlb->protocol))
+ return FALSE;
+
+ if (urla->host == NULL) {
+ if (urlb->host != NULL)
+ return FALSE;
+ } else {
+ if (urlb->host == NULL ||
+ !g_str_equal (urla->host, urlb->host))
+ return FALSE;
+ }
+
+ if (urla->port != urlb->port)
+ return FALSE;
+
+ if (urla->path == NULL) {
+ if (urlb->path != NULL)
+ return FALSE;
+ } else {
+ if (urlb->path == NULL ||
+ !g_str_equal (urla->path, urlb->path))
+ return FALSE;
+ }
+
+ /* FIXME: include query strings? */
+ if (urla->query == NULL) {
+ if (urlb->query != NULL)
+ return FALSE;
+ } else {
+ if (urlb->query == NULL ||
+ !g_str_equal (urla->query, urlb->query))
+ return FALSE;
+ }
+
+ return TRUE;
+}
+
+/**
+ * swfdec_url_hash:
+ * @url: a #SwfdecURL
+ *
+ * Creates a hash value for the given @url. This function is intended to be
+ * used together with swfdec_url_equal() in a #GHashtable.
+ *
+ * Returns: a hash value
+ **/
+guint
+swfdec_url_hash (gconstpointer url)
+{
+ const SwfdecURL *u = url;
+ guint ret;
+
+ /* random hash function, feel free to improve it */
+ ret = g_str_hash (u->protocol);
+ if (u->host)
+ ret ^= g_str_hash (u->host);
+ ret ^= u->port;
+ if (u->path)
+ ret ^= g_str_hash (u->path);
+ /* queries aren't used often in hashed urls, so ignore them */
+ return ret;
+}
+
diff --git a/libswfdec/swfdec_url.h b/libswfdec/swfdec_url.h
index 5eaa306..36a0dab 100644
--- a/libswfdec/swfdec_url.h
+++ b/libswfdec/swfdec_url.h
@@ -54,6 +54,10 @@ gboolean swfdec_url_has_protocol (const SwfdecURL * url,
gboolean swfdec_url_is_parent (const SwfdecURL * parent,
const SwfdecURL * child);
gboolean swfdec_url_is_local (const SwfdecURL * url);
+
+gboolean swfdec_url_equal (gconstpointer a,
+ gconstpointer b);
+guint swfdec_url_hash (gconstpointer url);
G_END_DECLS
commit 0ea23a5cd401ac0dcdb546f223b4fea310eddaaf
Author: Benjamin Otte <otte at gnome.org>
Date: Thu Jan 17 23:35:16 2008 +0100
only copy the loader if one exists
diff --git a/libswfdec/swfdec_resource.c b/libswfdec/swfdec_resource.c
index d269b6a..f76f891 100644
--- a/libswfdec/swfdec_resource.c
+++ b/libswfdec/swfdec_resource.c
@@ -526,7 +526,8 @@ swfdec_resource_do_load (SwfdecPlayer *player, const SwfdecURL *url, gboolean al
resource->version = load->resource->version;
SWFDEC_FLASH_SECURITY (resource)->player = player;
resource->target = g_strdup (load->target);
- resource->clip_loader = g_object_ref (load->loader);
+ if (load->loader)
+ resource->clip_loader = g_object_ref (load->loader);
swfdec_player_root (player, resource, (GFunc) swfdec_resource_mark);
if (!allowed) {
commit 8d7f1cd768a66565b79936bea8dd31074ddd5dab
Author: Benjamin Otte <otte at gnome.org>
Date: Thu Jan 17 23:30:57 2008 +0100
reimplement resource loading - it compiles
diff --git a/libswfdec-gtk/swfdec_gtk_loader.c b/libswfdec-gtk/swfdec_gtk_loader.c
index 479e6ad..26823cc 100644
--- a/libswfdec-gtk/swfdec_gtk_loader.c
+++ b/libswfdec-gtk/swfdec_gtk_loader.c
@@ -141,13 +141,13 @@ swfdec_gtk_loader_dispose (GObject *object)
static void
swfdec_gtk_loader_load (SwfdecLoader *loader, SwfdecLoader *parent,
- SwfdecLoaderRequest request, const char *data, gsize data_len)
+ SwfdecLoaderRequest request, SwfdecBuffer *buffer)
{
const SwfdecURL *url = swfdec_loader_get_url (loader);
if (g_ascii_strcasecmp (swfdec_url_get_protocol (url), "http") != 0 &&
g_ascii_strcasecmp (swfdec_url_get_protocol (url), "https") != 0) {
- SWFDEC_LOADER_CLASS (swfdec_gtk_loader_parent_class)->load (loader, parent, request, data, data_len);
+ SWFDEC_LOADER_CLASS (swfdec_gtk_loader_parent_class)->load (loader, parent, request, buffer);
} else {
SwfdecGtkLoader *gtk = SWFDEC_GTK_LOADER (loader);
SwfdecGtkLoaderClass *klass = SWFDEC_GTK_LOADER_GET_CLASS (gtk);
@@ -157,9 +157,9 @@ swfdec_gtk_loader_load (SwfdecLoader *loader, SwfdecLoader *parent,
soup_message_set_flags (gtk->message, SOUP_MESSAGE_OVERWRITE_CHUNKS);
g_signal_connect (gtk->message, "got-chunk", G_CALLBACK (swfdec_gtk_loader_push), gtk);
g_signal_connect (gtk->message, "finished", G_CALLBACK (swfdec_gtk_loader_finished), gtk);
- if (data)
+ if (buffer)
soup_message_set_request (gtk->message, "appliation/x-www-urlencoded",
- SOUP_BUFFER_USER_OWNED, (char *) data, data_len);
+ SOUP_BUFFER_USER_OWNED, (char *) buffer->data, buffer->length);
g_object_ref (gtk->message);
soup_session_queue_message (klass->session, gtk->message, NULL, NULL);
}
@@ -225,6 +225,6 @@ swfdec_gtk_loader_new (const char *uri)
url = swfdec_url_new (uri);
loader = g_object_new (SWFDEC_TYPE_GTK_LOADER, "url", url, NULL);
swfdec_url_free (url);
- swfdec_gtk_loader_load (loader, NULL, SWFDEC_LOADER_REQUEST_DEFAULT, NULL, 0);
+ swfdec_gtk_loader_load (loader, NULL, SWFDEC_LOADER_REQUEST_DEFAULT, NULL);
return loader;
}
diff --git a/libswfdec/Makefile.am b/libswfdec/Makefile.am
index 6316a0b..aa2c1c1 100644
--- a/libswfdec/Makefile.am
+++ b/libswfdec/Makefile.am
@@ -116,7 +116,6 @@ libswfdec_source_files = \
swfdec_rect.c \
swfdec_rectangle.c \
swfdec_resource.c \
- swfdec_resource_request.c \
swfdec_ringbuffer.c \
swfdec_script.c \
swfdec_security.c \
@@ -267,7 +266,6 @@ noinst_HEADERS = \
swfdec_policy_file.h \
swfdec_rect.h \
swfdec_resource.h \
- swfdec_resource_request.h \
swfdec_ringbuffer.h \
swfdec_script_internal.h \
swfdec_security.h \
diff --git a/libswfdec/swfdec_as_interpret.c b/libswfdec/swfdec_as_interpret.c
index 24a822c..813c1ce 100644
--- a/libswfdec/swfdec_as_interpret.c
+++ b/libswfdec/swfdec_as_interpret.c
@@ -45,7 +45,6 @@
#include "swfdec_sprite.h"
#include "swfdec_sprite_movie.h"
#include "swfdec_resource.h"
-#include "swfdec_resource_request.h"
#include "swfdec_text_field_movie.h" // for typeof
/* Define this to get SWFDEC_WARN'd about missing properties of objects.
@@ -1149,13 +1148,9 @@ swfdec_action_get_url (SwfdecAsContext *cx, guint action, const guint8 *data, gu
}
if (!SWFDEC_IS_PLAYER (cx)) {
SWFDEC_ERROR ("GetURL without a SwfdecPlayer");
- } else if (swfdec_player_request_fscommand (SWFDEC_PLAYER (cx), url, target)) {
- /* nothing to do here */
- } else if (swfdec_player_get_level (SWFDEC_PLAYER (cx), target) >= 0) {
- swfdec_resource_load (SWFDEC_PLAYER (cx), target, url,
- SWFDEC_LOADER_REQUEST_DEFAULT, NULL, NULL);
} else {
- swfdec_player_launch (SWFDEC_PLAYER (cx), SWFDEC_LOADER_REQUEST_DEFAULT, url, target, NULL);
+ swfdec_resource_load (SWFDEC_PLAYER (cx), target, url,
+ SWFDEC_LOADER_REQUEST_DEFAULT, NULL, NULL, FALSE);
}
g_free (url);
g_free (target);
@@ -1200,21 +1195,16 @@ swfdec_action_get_url2 (SwfdecAsContext *cx, guint action, const guint8 *data, g
if (!SWFDEC_IS_PLAYER (cx)) {
SWFDEC_ERROR ("GetURL2 action requires a SwfdecPlayer");
- } else if (swfdec_player_request_fscommand (SWFDEC_PLAYER (cx), url, target)) {
- /* nothing to do here */
} else if (variables) {
SwfdecMovie *movie;
movie = swfdec_player_get_movie_from_string (SWFDEC_PLAYER (cx), target);
if (movie != NULL) {
- swfdec_load_object_new (SWFDEC_AS_OBJECT (movie), url, method, NULL, NULL,
+ swfdec_load_object_create (SWFDEC_AS_OBJECT (movie), url, method, NULL, NULL,
swfdec_as_interpret_load_variables_on_finish);
}
- } else if (internal) {
- swfdec_resource_load (SWFDEC_PLAYER (cx), target, url, method, NULL, NULL);
} else {
- /* load an external file */
- swfdec_player_launch (SWFDEC_PLAYER (cx), method, url, target, NULL);
+ swfdec_resource_load (SWFDEC_PLAYER (cx), target, url, method, NULL, NULL, internal);
}
swfdec_as_stack_pop_n (cx, 2);
diff --git a/libswfdec/swfdec_file_loader.c b/libswfdec/swfdec_file_loader.c
index 1b498ac..a393185 100644
--- a/libswfdec/swfdec_file_loader.c
+++ b/libswfdec/swfdec_file_loader.c
@@ -38,12 +38,11 @@
G_DEFINE_TYPE (SwfdecFileLoader, swfdec_file_loader, SWFDEC_TYPE_LOADER)
static void
-swfdec_file_loader_load (SwfdecLoader *loader, SwfdecLoader *parent, SwfdecLoaderRequest request,
- const char *data, gsize data_len)
+swfdec_file_loader_load (SwfdecLoader *loader, SwfdecLoader *parent,
+ SwfdecLoaderRequest request, SwfdecBuffer *buffer)
{
SwfdecStream *stream = SWFDEC_STREAM (loader);
const SwfdecURL *url;
- SwfdecBuffer *buffer;
GError *error = NULL;
char *real;
diff --git a/libswfdec/swfdec_flash_security.h b/libswfdec/swfdec_flash_security.h
index 8ee888d..3af3442 100644
--- a/libswfdec/swfdec_flash_security.h
+++ b/libswfdec/swfdec_flash_security.h
@@ -61,7 +61,6 @@ GType swfdec_flash_security_get_type (void);
void swfdec_flash_security_set_url (SwfdecFlashSecurity * sec,
const SwfdecURL * url);
-void swfdec_flash_security_free_pending (SwfdecFlashSecurity * sec);
G_END_DECLS
diff --git a/libswfdec/swfdec_load_object.c b/libswfdec/swfdec_load_object.c
index a7d3fd2..3d3d0ec 100644
--- a/libswfdec/swfdec_load_object.c
+++ b/libswfdec/swfdec_load_object.c
@@ -1,5 +1,5 @@
/* Swfdec
- * Copyright (C) 2007 Benjamin Otte <otte at gnome.org>
+ * Copyright (C) 2007-2008 Benjamin Otte <otte at gnome.org>
* 2007 Pekka Lampila <pekka.lampila at iki.fi>
*
* This library is free software; you can redistribute it and/or
@@ -30,7 +30,6 @@
#include "swfdec_loader_internal.h"
#include "swfdec_stream_target.h"
#include "swfdec_player_internal.h"
-#include "swfdec_resource_request.h"
/*** SWFDEC_STREAM_TARGET ***/
@@ -114,33 +113,25 @@ swfdec_load_object_stream_target_init (SwfdecStreamTargetInterface *iface)
/*** SWFDEC_LOAD_OBJECT ***/
-G_DEFINE_TYPE_WITH_CODE (SwfdecLoadObject, swfdec_load_object, SWFDEC_TYPE_AS_OBJECT,
+G_DEFINE_TYPE_WITH_CODE (SwfdecLoadObject, swfdec_load_object, G_TYPE_OBJECT,
G_IMPLEMENT_INTERFACE (SWFDEC_TYPE_STREAM_TARGET, swfdec_load_object_stream_target_init))
static void
-swfdec_load_object_reset (SwfdecLoadObject *load_object)
-{
- if (load_object->loader) {
- swfdec_stream_set_target (SWFDEC_STREAM (load_object->loader), NULL);
- g_object_unref (load_object->loader);
- load_object->loader = NULL;
- }
-}
-
-static void
-swfdec_load_object_mark (SwfdecAsObject *object)
-{
- swfdec_as_object_mark (SWFDEC_LOAD_OBJECT (object)->target);
-
- SWFDEC_AS_OBJECT_CLASS (swfdec_load_object_parent_class)->mark (object);
-}
-
-static void
swfdec_load_object_dispose (GObject *object)
{
- SwfdecLoadObject *load_object = SWFDEC_LOAD_OBJECT (object);
+ SwfdecLoadObject *load = SWFDEC_LOAD_OBJECT (object);
- swfdec_load_object_reset (load_object);
+ if (load->loader) {
+ swfdec_stream_set_target (SWFDEC_STREAM (load->loader), NULL);
+ g_object_unref (load->loader);
+ load->loader = NULL;
+ }
+ if (load->buffer) {
+ swfdec_buffer_unref (load->buffer);
+ load->buffer = NULL;
+ }
+ g_object_unref (load->resource);
+ load->resource = NULL;
G_OBJECT_CLASS (swfdec_load_object_parent_class)->dispose (object);
}
@@ -149,11 +140,8 @@ static void
swfdec_load_object_class_init (SwfdecLoadObjectClass *klass)
{
GObjectClass *object_class = G_OBJECT_CLASS (klass);
- SwfdecAsObjectClass *as_object_class = SWFDEC_AS_OBJECT_CLASS (klass);
object_class->dispose = swfdec_load_object_dispose;
-
- as_object_class->mark = swfdec_load_object_mark;
}
static void
@@ -162,70 +150,99 @@ swfdec_load_object_init (SwfdecLoadObject *load_object)
}
static void
-swfdec_load_object_got_loader (SwfdecPlayer *player, SwfdecLoader *loader, gpointer obj)
+swfdec_load_object_load (SwfdecPlayer *player, const SwfdecURL *url, gboolean allow, gpointer obj)
{
- SwfdecLoadObject *load_object = SWFDEC_LOAD_OBJECT (obj);
+ SwfdecLoadObject *load = SWFDEC_LOAD_OBJECT (obj);
+
+ if (!allow) {
+ SWFDEC_WARNING ("SECURITY: no access to %s from %s",
+ load->url, swfdec_url_get_url (SWFDEC_FLASH_SECURITY (load->resource)->url));
- if (loader == NULL) {
+ /* FIXME: call finish? */
+
+ /* unroot */
+ swfdec_player_unroot (player, load);
return;
}
- load_object->loader = loader;
- swfdec_stream_set_target (SWFDEC_STREAM (loader),
- SWFDEC_STREAM_TARGET (load_object));
- swfdec_loader_set_data_type (loader, SWFDEC_LOADER_DATA_TEXT);
+ load->loader = swfdec_loader_load (load->resource->loader, url, load->request, load->buffer);
+
+ swfdec_stream_set_target (SWFDEC_STREAM (load->loader), SWFDEC_STREAM_TARGET (load));
+ swfdec_loader_set_data_type (load->loader, SWFDEC_LOADER_DATA_TEXT);
}
-static gboolean
-swfdec_load_object_load (SwfdecLoadObject *load_object, const char *url,
- SwfdecLoaderRequest request, SwfdecBuffer *data)
+/* perform security checks */
+static void
+swfdec_load_object_request (gpointer objectp, gpointer playerp)
{
- SwfdecPlayer *player;
- SwfdecSecurity *sec;
-
- g_return_val_if_fail (SWFDEC_IS_LOAD_OBJECT (load_object), FALSE);
- g_return_val_if_fail (url != NULL, FALSE);
-
- player = SWFDEC_PLAYER (SWFDEC_AS_OBJECT (load_object)->context);
- swfdec_load_object_reset (load_object);
+ SwfdecLoadObject *load = SWFDEC_LOAD_OBJECT (objectp);
+ SwfdecPlayer *player = SWFDEC_PLAYER (playerp);
+ SwfdecURL *url;
+
+ /* FIXME: or is this relative to the player? */
+ url = swfdec_url_new_relative (SWFDEC_FLASH_SECURITY (load->resource)->url, load->url);
+ switch (SWFDEC_FLASH_SECURITY (load->resource)->sandbox) {
+ case SWFDEC_SANDBOX_REMOTE:
+ case SWFDEC_SANDBOX_LOCAL_NETWORK:
+ case SWFDEC_SANDBOX_LOCAL_TRUSTED:
+ if (swfdec_url_is_local (url)) {
+ swfdec_load_object_load (player, url, swfdec_url_is_local (url), load);
+ } else {
+ SwfdecURL *load_url = swfdec_url_new_components (
+ swfdec_url_get_protocol (url), swfdec_url_get_host (url),
+ swfdec_url_get_port (url), "crossdomain.xml", NULL);
+ swfdec_player_allow_or_load (player, url, load_url,
+ swfdec_load_object_load, load);
+ swfdec_url_free (load_url);
+ }
+ break;
+ case SWFDEC_SANDBOX_LOCAL_FILE:
+ swfdec_load_object_load (player, url, swfdec_url_is_local (url), load);
+ break;
+ case SWFDEC_SANDBOX_NONE:
+ default:
+ g_assert_not_reached ();
+ break;
+ }
- /* get the current security */
- g_assert (SWFDEC_AS_CONTEXT (player)->frame);
- sec = SWFDEC_AS_CONTEXT (player)->frame->security;
+ swfdec_url_free (url);
+}
- g_object_ref (load_object);
- swfdec_player_request_resource (player, sec, url, request, data,
- swfdec_load_object_got_loader, load_object, g_object_unref);
+static void
+swfdec_load_object_mark (gpointer object, gpointer player)
+{
+ SwfdecLoadObject *load = object;
- return TRUE;
+ if (load->url)
+ swfdec_as_string_mark (load->url);
+ swfdec_as_object_mark (load->target);
}
-SwfdecAsObject *
-swfdec_load_object_new (SwfdecAsObject *target, const char *url,
+void
+swfdec_load_object_create (SwfdecAsObject *target, const char *url,
SwfdecLoaderRequest request, SwfdecBuffer *data,
SwfdecLoadObjectProgress progress, SwfdecLoadObjectFinish finish)
{
- SwfdecLoadObject *load_object;
-
- g_return_val_if_fail (SWFDEC_IS_AS_OBJECT (target), NULL);
- g_return_val_if_fail (url != NULL, NULL);
- g_return_val_if_fail (finish != NULL, NULL);
-
- if (!swfdec_as_context_use_mem (target->context, sizeof (SwfdecLoadObject)))
- return NULL;
- load_object = SWFDEC_LOAD_OBJECT (g_object_new (
- SWFDEC_TYPE_LOAD_OBJECT, NULL));
- swfdec_as_object_add (SWFDEC_AS_OBJECT (load_object), target->context,
- sizeof (SwfdecLoadObject));
-
- load_object->target = target;
- load_object->progress = progress;
- load_object->finish = finish;
-
- if (!swfdec_load_object_load (load_object, url, request, data))
- return NULL;
-
- swfdec_player_root (SWFDEC_PLAYER (target->context), load_object, (GFunc) swfdec_as_object_mark);
-
- return SWFDEC_AS_OBJECT (load_object);
+ SwfdecPlayer *player;
+ SwfdecLoadObject *load;
+
+ g_return_if_fail (SWFDEC_IS_AS_OBJECT (target));
+ g_return_if_fail (url != NULL);
+ g_return_if_fail (finish != NULL);
+
+ player = SWFDEC_PLAYER (target->context);
+ load = g_object_new (SWFDEC_TYPE_LOAD_OBJECT, NULL);
+ swfdec_player_root_full (player, load, swfdec_load_object_mark, g_object_unref);
+
+ load->target = target;
+ load->url = url;
+ load->request = request;
+ load->buffer = data;
+ load->progress = progress;
+ load->finish = finish;
+ /* get the current security */
+ g_assert (SWFDEC_AS_CONTEXT (player)->frame);
+ load->resource = g_object_ref (SWFDEC_AS_CONTEXT (player)->frame->security);
+ g_assert (SWFDEC_IS_RESOURCE (load->resource));
+ swfdec_player_request_resource (player, swfdec_load_object_request, load, NULL);
}
diff --git a/libswfdec/swfdec_load_object.h b/libswfdec/swfdec_load_object.h
index 00f4451..5f36625 100644
--- a/libswfdec/swfdec_load_object.h
+++ b/libswfdec/swfdec_load_object.h
@@ -1,5 +1,5 @@
/* Swfdec
- * Copyright (C) 2007 Benjamin Otte <otte at gnome.org>
+ * Copyright (C) 2007-2008 Benjamin Otte <otte at gnome.org>
* 2007 Pekka Lampila <pekka.lampila at iki.fi>
*
* This library is free software; you can redistribute it and/or
@@ -23,6 +23,7 @@
#include <libswfdec/swfdec.h>
#include <libswfdec/swfdec_as_object.h>
+#include <libswfdec/swfdec_resource.h>
G_BEGIN_DECLS
@@ -43,22 +44,26 @@ typedef void (* SwfdecLoadObjectFinish) (SwfdecAsObject *target,
#define SWFDEC_LOAD_OBJECT_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), SWFDEC_TYPE_LOAD_OBJECT, SwfdecLoadObjectClass))
struct _SwfdecLoadObject {
- SwfdecAsObject object;
+ GObject object;
+
+ const char * url; /* GC'ed url to request */
+ SwfdecLoaderRequest request; /* type of request */
+ SwfdecBuffer * buffer; /* data to send */
+ SwfdecLoader * loader; /* loader when loading or NULL */
- SwfdecLoader * loader; /* loader when loading or NULL */
-
- SwfdecAsObject *target; /* target object */
- SwfdecLoadObjectProgress progress;
- SwfdecLoadObjectFinish finish;
+ SwfdecResource * resource; /* resource that inited the loading */
+ SwfdecAsObject * target; /* target object */
+ SwfdecLoadObjectProgress progress; /* progress callback */
+ SwfdecLoadObjectFinish finish; /* finish callback */
};
struct _SwfdecLoadObjectClass {
- SwfdecAsObjectClass object_class;
+ GObjectClass object_class;
};
GType swfdec_load_object_get_type (void);
-SwfdecAsObject *swfdec_load_object_new (SwfdecAsObject * target,
+void swfdec_load_object_create (SwfdecAsObject * target,
const char * url,
SwfdecLoaderRequest request,
SwfdecBuffer * data,
diff --git a/libswfdec/swfdec_load_object_as.c b/libswfdec/swfdec_load_object_as.c
index 51656d5..012249e 100644
--- a/libswfdec/swfdec_load_object_as.c
+++ b/libswfdec/swfdec_load_object_as.c
@@ -65,30 +65,27 @@ swfdec_load_object_on_progress (SwfdecAsObject *target, glong size,
SWFDEC_AS_NATIVE (301, 0, swfdec_load_object_as_load)
void
-swfdec_load_object_as_load (SwfdecAsContext *cx, SwfdecAsObject *obj, guint argc,
+swfdec_load_object_as_load (SwfdecAsContext *cx, SwfdecAsObject *object, guint argc,
SwfdecAsValue *argv, SwfdecAsValue *rval)
{
SwfdecAsValue val;
const char *url;
- if (argc < 1 || obj == NULL) {
- SWFDEC_AS_VALUE_SET_BOOLEAN (rval, FALSE);
- return;
- }
+ SWFDEC_AS_VALUE_SET_BOOLEAN (rval, FALSE);
+ SWFDEC_AS_CHECK (SWFDEC_TYPE_AS_OBJECT, &object, "s", &url);
- url = swfdec_as_value_to_string (cx, &argv[0]);
- swfdec_load_object_new (obj, url, SWFDEC_LOADER_REQUEST_DEFAULT, NULL,
+ swfdec_load_object_create (object, url, SWFDEC_LOADER_REQUEST_DEFAULT, NULL,
swfdec_load_object_on_progress, swfdec_load_object_on_finish);
SWFDEC_AS_VALUE_SET_INT (&val, 0);
- swfdec_as_object_set_variable_and_flags (obj, SWFDEC_AS_STR__bytesLoaded,
+ swfdec_as_object_set_variable_and_flags (object, SWFDEC_AS_STR__bytesLoaded,
&val, SWFDEC_AS_VARIABLE_HIDDEN);
SWFDEC_AS_VALUE_SET_UNDEFINED (&val);
- swfdec_as_object_set_variable_and_flags (obj, SWFDEC_AS_STR__bytesTotal,
+ swfdec_as_object_set_variable_and_flags (object, SWFDEC_AS_STR__bytesTotal,
&val, SWFDEC_AS_VARIABLE_HIDDEN);
SWFDEC_AS_VALUE_SET_BOOLEAN (&val, FALSE);
- swfdec_as_object_set_variable_and_flags (obj, SWFDEC_AS_STR_loaded, &val,
+ swfdec_as_object_set_variable_and_flags (object, SWFDEC_AS_STR_loaded, &val,
SWFDEC_AS_VARIABLE_HIDDEN);
SWFDEC_AS_VALUE_SET_BOOLEAN (rval, TRUE);
@@ -107,36 +104,27 @@ void
swfdec_load_object_as_sendAndLoad (SwfdecAsContext *cx, SwfdecAsObject *object,
guint argc, SwfdecAsValue *argv, SwfdecAsValue *rval)
{
- const char *url, *data;
+ const char *url, *data, *method_string;
SwfdecAsObject *target;
SwfdecAsValue val;
SwfdecBuffer *buffer;
+ SwfdecLoaderRequest method;
- if (object == NULL)
- return;
-
- if (argc < 2)
- return;
-
- url = swfdec_as_value_to_string (cx, &argv[0]);
- target = swfdec_as_value_to_object (cx, &argv[0]);
- if (target == NULL)
- return;
+ SWFDEC_AS_CHECK (SWFDEC_TYPE_AS_OBJECT, &object, "sO|s", &url, &target, &method_string);
- // FIXME: support for contentType is missing
+ SWFDEC_FIXME ("support for contentType is missing");
- swfdec_as_object_call (object, SWFDEC_AS_STR_toString, 0, NULL, &val);
- data = swfdec_as_value_to_string (cx, &val);
- if (strlen (data) > 0) {
- buffer = swfdec_buffer_new_for_data (g_memdup (data, strlen (data) + 1),
- strlen (data));
- swfdec_load_object_new (target, url, SWFDEC_LOADER_REQUEST_POST, buffer,
- swfdec_load_object_on_progress, swfdec_load_object_on_finish);
- swfdec_buffer_unref (buffer);
+ if (method_string == NULL || g_ascii_strcasecmp (method_string, "get") == 0) {
+ method = SWFDEC_LOADER_REQUEST_GET;
} else {
- swfdec_load_object_new (target, url, SWFDEC_LOADER_REQUEST_DEFAULT, NULL,
- swfdec_load_object_on_progress, swfdec_load_object_on_finish);
+ method = SWFDEC_LOADER_REQUEST_POST;
}
+ SWFDEC_AS_VALUE_SET_OBJECT (&val, object);
+ data = swfdec_as_value_to_string (cx, &val);
+ buffer = swfdec_buffer_new_for_data (g_memdup (data, strlen (data) + 1),
+ strlen (data) + 1);
+ swfdec_load_object_create (target, url, method, buffer,
+ swfdec_load_object_on_progress, swfdec_load_object_on_finish);
SWFDEC_AS_VALUE_SET_INT (&val, 0);
swfdec_as_object_set_variable_and_flags (target, SWFDEC_AS_STR__bytesLoaded,
diff --git a/libswfdec/swfdec_loader.c b/libswfdec/swfdec_loader.c
index 6b51e61..acf6944 100644
--- a/libswfdec/swfdec_loader.c
+++ b/libswfdec/swfdec_loader.c
@@ -208,19 +208,18 @@ swfdec_loader_init (SwfdecLoader *loader)
SwfdecLoader *
swfdec_loader_load (SwfdecLoader *loader, const SwfdecURL *url,
- SwfdecLoaderRequest request, const char *data, gsize data_len)
+ SwfdecLoaderRequest request, SwfdecBuffer *buffer)
{
SwfdecLoader *ret;
SwfdecLoaderClass *klass;
g_return_val_if_fail (SWFDEC_IS_LOADER (loader), NULL);
g_return_val_if_fail (url != NULL, NULL);
- g_return_val_if_fail (data != NULL || data_len == 0, NULL);
klass = SWFDEC_LOADER_GET_CLASS (loader);
g_return_val_if_fail (klass->load != NULL, NULL);
ret = g_object_new (G_OBJECT_CLASS_TYPE (klass), "url", url, NULL);
- klass->load (ret, loader, request, data, data_len);
+ klass->load (ret, loader, request, buffer);
return ret;
}
diff --git a/libswfdec/swfdec_loader.h b/libswfdec/swfdec_loader.h
index f668fca..e22cabd 100644
--- a/libswfdec/swfdec_loader.h
+++ b/libswfdec/swfdec_loader.h
@@ -72,8 +72,7 @@ struct _SwfdecLoaderClass
void (* load) (SwfdecLoader * loader,
SwfdecLoader * parent,
SwfdecLoaderRequest request,
- const char * data,
- gsize data_len);
+ SwfdecBuffer * buffer);
};
GType swfdec_loader_get_type (void);
diff --git a/libswfdec/swfdec_loader_internal.h b/libswfdec/swfdec_loader_internal.h
index 444610c..bb7bf67 100644
--- a/libswfdec/swfdec_loader_internal.h
+++ b/libswfdec/swfdec_loader_internal.h
@@ -36,8 +36,7 @@ void swfdec_stream_set_target (SwfdecStream * stream,
SwfdecLoader * swfdec_loader_load (SwfdecLoader * loader,
const SwfdecURL * url,
SwfdecLoaderRequest request,
- const char * data,
- gsize data_len);
+ SwfdecBuffer * buffer);
void swfdec_loader_set_data_type (SwfdecLoader * loader,
SwfdecLoaderDataType type);
char * swfdec_loader_get_text (SwfdecLoader * loader,
diff --git a/libswfdec/swfdec_movie.c b/libswfdec/swfdec_movie.c
index 90147a3..3dd6902 100644
--- a/libswfdec/swfdec_movie.c
+++ b/libswfdec/swfdec_movie.c
@@ -43,7 +43,6 @@
#include "swfdec_resource.h"
#include "swfdec_system.h"
#include "swfdec_utils.h"
-#include "swfdec_load_object.h"
#include "swfdec_as_internal.h"
/*** MOVIE ***/
diff --git a/libswfdec/swfdec_movie_clip_loader.c b/libswfdec/swfdec_movie_clip_loader.c
index f3b9500..77d8704 100644
--- a/libswfdec/swfdec_movie_clip_loader.c
+++ b/libswfdec/swfdec_movie_clip_loader.c
@@ -29,7 +29,6 @@
#include "swfdec_decoder.h"
#include "swfdec_player_internal.h"
#include "swfdec_resource.h"
-#include "swfdec_resource_request.h"
G_DEFINE_TYPE (SwfdecMovieClipLoader, swfdec_movie_clip_loader, SWFDEC_TYPE_AS_OBJECT)
@@ -75,7 +74,8 @@ swfdec_movie_clip_loader_loadClip (SwfdecAsContext *cx, SwfdecAsObject *object,
SWFDEC_AS_CHECK (SWFDEC_TYPE_MOVIE_CLIP_LOADER, &loader, "ss", &url, &target);
- swfdec_resource_load (SWFDEC_PLAYER (cx), target, url, SWFDEC_LOADER_REQUEST_DEFAULT, NULL, loader);
+ swfdec_resource_load (SWFDEC_PLAYER (cx), target, url,
+ SWFDEC_LOADER_REQUEST_DEFAULT, NULL, loader, TRUE);
}
SWFDEC_AS_NATIVE (112, 102, swfdec_movie_clip_loader_unloadClip)
@@ -88,7 +88,8 @@ swfdec_movie_clip_loader_unloadClip (SwfdecAsContext *cx, SwfdecAsObject *object
SWFDEC_AS_CHECK (SWFDEC_TYPE_MOVIE_CLIP_LOADER, &loader, "s", &target);
- swfdec_resource_load (SWFDEC_PLAYER (cx), target, "", SWFDEC_LOADER_REQUEST_DEFAULT, NULL, loader);
+ swfdec_resource_load (SWFDEC_PLAYER (cx), target, "",
+ SWFDEC_LOADER_REQUEST_DEFAULT, NULL, loader, TRUE);
}
SWFDEC_AS_NATIVE (112, 101, swfdec_movie_clip_loader_getProgress)
diff --git a/libswfdec/swfdec_net_stream.c b/libswfdec/swfdec_net_stream.c
index 324da0f..5a1e935 100644
--- a/libswfdec/swfdec_net_stream.c
+++ b/libswfdec/swfdec_net_stream.c
@@ -28,9 +28,11 @@
#include "swfdec_as_strings.h"
#include "swfdec_audio_flv.h"
#include "swfdec_debug.h"
+#include "swfdec_flash_security.h"
#include "swfdec_loader_internal.h"
+#include "swfdec_player_internal.h"
+#include "swfdec_resource.h"
#include "swfdec_stream_target.h"
-#include "swfdec_resource_request.h"
/* NB: code and level must be rooted gc-strings */
static void
@@ -468,31 +470,65 @@ swfdec_net_stream_new (SwfdecNetConnection *conn)
}
static void
-swfdec_net_stream_request_callback (SwfdecPlayer *player, SwfdecLoader *loader,
- gpointer data)
+swfdec_net_stream_load (SwfdecPlayer *player, const SwfdecURL *url, gboolean allowed, gpointer streamp)
{
- SwfdecNetStream *stream = data;
+ SwfdecNetStream *stream = streamp;
+ SwfdecLoader *loader;
- if (loader) {
+ if (allowed) {
+ loader = swfdec_loader_load (player->priv->resource->loader, url,
+ SWFDEC_LOADER_REQUEST_DEFAULT, NULL);
swfdec_net_stream_set_loader (stream, loader);
g_object_unref (loader);
+ } else {
+ SWFDEC_WARNING ("SECURITY: no access to %s from NetStream",
+ swfdec_url_get_url (url));
}
}
void
-swfdec_net_stream_set_url (SwfdecNetStream *stream, const char *url)
+swfdec_net_stream_set_url (SwfdecNetStream *stream, const char *url_string)
{
+ SwfdecPlayer *player;
SwfdecAsContext *cx;
+ SwfdecURL *url;
g_return_if_fail (SWFDEC_IS_NET_STREAM (stream));
g_return_if_fail (url != NULL);
- /* FIXME: use the connection once connections are implemented */
cx = SWFDEC_AS_OBJECT (stream)->context;
+ player = SWFDEC_PLAYER (cx);
g_assert (cx->frame);
- swfdec_player_request_resource_now (SWFDEC_PLAYER (cx), cx->frame->security,
- url, SWFDEC_LOADER_REQUEST_DEFAULT, NULL,
- swfdec_net_stream_request_callback, NULL, stream);
+ url = swfdec_url_new_relative (SWFDEC_FLASH_SECURITY (player->priv->resource)->url, url_string);
+ if (swfdec_url_is_local (url)) {
+ swfdec_net_stream_load (player, url, TRUE, stream);
+ } else {
+ switch (SWFDEC_FLASH_SECURITY (cx->frame->security)->sandbox) {
+ case SWFDEC_SANDBOX_REMOTE:
+ swfdec_net_stream_load (player, url, TRUE, stream);
+ break;
+ case SWFDEC_SANDBOX_LOCAL_NETWORK:
+ case SWFDEC_SANDBOX_LOCAL_TRUSTED:
+ {
+ SwfdecURL *load_url = swfdec_url_new_components (
+ swfdec_url_get_protocol (url), swfdec_url_get_host (url),
+ swfdec_url_get_port (url), "crossdomain.xml", NULL);
+ swfdec_player_allow_or_load (player, url, load_url,
+ swfdec_net_stream_load, stream);
+ swfdec_url_free (load_url);
+ }
+ break;
+ case SWFDEC_SANDBOX_LOCAL_FILE:
+ swfdec_net_stream_load (player, url, FALSE, stream);
+ break;
+ case SWFDEC_SANDBOX_NONE:
+ default:
+ g_assert_not_reached ();
+ break;
+ }
+ }
+
+ swfdec_url_free (url);
}
void
diff --git a/libswfdec/swfdec_player.c b/libswfdec/swfdec_player.c
index eef2dce..7bcce79 100644
--- a/libswfdec/swfdec_player.c
+++ b/libswfdec/swfdec_player.c
@@ -44,7 +44,6 @@
#include "swfdec_marshal.h"
#include "swfdec_movie.h"
#include "swfdec_resource.h"
-#include "swfdec_resource_request.h"
#include "swfdec_script_internal.h"
#include "swfdec_sprite_movie.h"
#include "swfdec_utils.h"
@@ -873,7 +872,7 @@ swfdec_player_dispose (GObject *object)
guint i;
swfdec_player_stop_all_sounds (player);
- swfdec_player_resource_request_finish (player);
+ swfdec_function_list_clear (&priv->resource_requests);
g_hash_table_destroy (priv->registered_classes);
g_hash_table_destroy (priv->scripting_callbacks);
@@ -887,8 +886,6 @@ swfdec_player_dispose (GObject *object)
while (priv->roots)
swfdec_movie_destroy (priv->roots->data);
if (priv->resource) {
- swfdec_flash_security_free_pending (
- SWFDEC_FLASH_SECURITY (priv->resource));
g_object_unref (priv->resource);
priv->resource = NULL;
}
@@ -1345,7 +1342,7 @@ swfdec_player_iterate (SwfdecTimeout *timeout)
swfdec_movie_destroy (cur);
}
swfdec_player_execute_on_load_init (player);
- swfdec_player_resource_request_perform (player);
+ swfdec_function_list_execute_and_clear (&priv->resource_requests, player);
swfdec_player_perform_actions (player);
}
@@ -1735,6 +1732,7 @@ swfdec_player_class_init (SwfdecPlayerClass *klass)
* for keyboard shortcuts or similar.</para></listitem>
* </itemizedlist>
*/
+ /* FIXME: document fscommand:toggle */
signals[FSCOMMAND] = g_signal_new ("fscommand", G_TYPE_FROM_CLASS (klass),
G_SIGNAL_RUN_LAST, 0, NULL, NULL, swfdec_marshal_VOID__STRING_STRING,
G_TYPE_NONE, 2, G_TYPE_STRING, G_TYPE_STRING);
@@ -1798,8 +1796,6 @@ swfdec_player_init (SwfdecPlayer *player)
priv->iterate_timeout.callback = swfdec_player_iterate;
priv->stage_width = -1;
priv->stage_height = -1;
-
- swfdec_player_resource_request_init (player);
}
void
diff --git a/libswfdec/swfdec_player_internal.h b/libswfdec/swfdec_player_internal.h
index bb59e8e..dd9184b 100644
--- a/libswfdec/swfdec_player_internal.h
+++ b/libswfdec/swfdec_player_internal.h
@@ -42,7 +42,7 @@ typedef enum {
typedef void (* SwfdecActionFunc) (gpointer object, gpointer data);
typedef gboolean (* SwfdecAudioRemoveFunc) (SwfdecAudio *audio, gpointer data);
-typedef void (* SwfdecPolicyFunc) (SwfdecPlayer *player, gboolean allow, gpointer data);
+typedef void (* SwfdecPolicyFunc) (SwfdecPlayer *player, const SwfdecURL *url, gboolean allow, gpointer data);
typedef struct _SwfdecTimeout SwfdecTimeout;
struct _SwfdecTimeout {
@@ -64,7 +64,6 @@ struct _SwfdecPlayerPrivate
guint width; /* width of movie */
guint height; /* height of movie */
GList * roots; /* all the root movies */
- GSList * resource_requests; /* all external requested URIs - see swfdec_resource_request.[ch] */
SwfdecCache * cache; /* player cache */
gboolean bgcolor_set; /* TRUE if the background color has been set */
SwfdecColor bgcolor; /* background color */
@@ -87,6 +86,7 @@ struct _SwfdecPlayerPrivate
int offset_x; /* x offset from top left edge after scaling */
int offset_y; /* y offset from top left edge after scaling */
+ SwfdecFunctionList resource_requests; /* all external requested URIs - see swfdec_resource_request.[ch] */
guint unnamed_count; /* variable used for naming unnamed movies */
/* ActionScript */
SwfdecFunctionList rooted; /* all the objects we keep track of */
@@ -159,8 +159,12 @@ void swfdec_player_perform_actions (SwfdecPlayer * player);
#define swfdec_player_root(player, data, mark_func) \
swfdec_function_list_add (&(player)->priv->rooted, (mark_func), (data), NULL)
+#define swfdec_player_root_full(player, data, mark_func, destroy_notify) \
+ swfdec_function_list_add (&(player)->priv->rooted, (mark_func), (data), (destroy_notify))
#define swfdec_player_unroot(player, data) \
swfdec_function_list_remove (&(player)->priv->rooted, (data))
+#define swfdec_player_request_resource(player, request_func, data, destroy_notify) \
+ swfdec_function_list_add (&(player)->priv->resource_requests, (request_func), (data), (destroy_notify))
SwfdecAsObject *swfdec_player_get_export_class (SwfdecPlayer * player,
const char * name);
void swfdec_player_set_export_class (SwfdecPlayer * player,
diff --git a/libswfdec/swfdec_policy_file.c b/libswfdec/swfdec_policy_file.c
index dd4e0ca..9fbb768 100644
--- a/libswfdec/swfdec_policy_file.c
+++ b/libswfdec/swfdec_policy_file.c
@@ -147,7 +147,7 @@ swfdec_policy_file_finished_loading (SwfdecPolicyFile *file, const char *text)
for (walk = file->requests; walk; walk = walk->next) {
SwfdecPolicyFileRequest *request = walk->data;
gboolean allow = swfdec_player_allow_now (file->player, request->url);
- request->func (file->player, allow, request->data);
+ request->func (file->player, request->url, allow, request->data);
swfdec_policy_file_request_free (request);
}
g_slist_free (file->requests);
@@ -251,7 +251,7 @@ swfdec_policy_file_new (SwfdecPlayer *player, const SwfdecURL *url)
SWFDEC_FIXME ("implement xmlsocket: protocol");
} else {
file->stream = SWFDEC_STREAM (swfdec_loader_load (player->priv->resource->loader,
- url, SWFDEC_LOADER_REQUEST_DEFAULT, NULL, 0));
+ url, SWFDEC_LOADER_REQUEST_DEFAULT, NULL));
swfdec_stream_set_target (file->stream, SWFDEC_STREAM_TARGET (file));
}
player->priv->loading_policy_files =
@@ -329,7 +329,7 @@ swfdec_player_allow_or_load (SwfdecPlayer *player, const SwfdecURL *url,
g_return_if_fail (func);
if (swfdec_player_allow_now (player, url)) {
- func (player, TRUE, data);
+ func (player, url, TRUE, data);
return;
}
if (load_url)
@@ -337,7 +337,7 @@ swfdec_player_allow_or_load (SwfdecPlayer *player, const SwfdecURL *url,
priv = player->priv;
if (priv->loading_policy_files == NULL) {
- func (player, FALSE, data);
+ func (player, url, FALSE, data);
return;
}
request = g_slice_new (SwfdecPolicyFileRequest);
diff --git a/libswfdec/swfdec_resource.c b/libswfdec/swfdec_resource.c
index 08113e3..d269b6a 100644
--- a/libswfdec/swfdec_resource.c
+++ b/libswfdec/swfdec_resource.c
@@ -37,7 +37,6 @@
#include "swfdec_loader_internal.h"
#include "swfdec_movie_clip_loader.h"
#include "swfdec_player_internal.h"
-#include "swfdec_resource_request.h"
#include "swfdec_script.h"
#include "swfdec_sprite.h"
#include "swfdec_stream_target.h"
@@ -481,44 +480,137 @@ swfdec_resource_add_export (SwfdecResource *instance, SwfdecCharacter *character
g_hash_table_insert (instance->export_names, g_object_ref (character), g_strdup (name));
}
+typedef struct _SwfdecResourceLoad SwfdecResourceLoad;
+struct _SwfdecResourceLoad {
+ SwfdecResource * resource;
+ char * target;
+ char * url;
+ SwfdecLoaderRequest request;
+ SwfdecBuffer * buffer;
+ SwfdecMovieClipLoader * loader;
+ gboolean target_is_movie;
+};
+
+static void
+swfdec_resource_load_free (gpointer loadp)
+{
+ SwfdecResourceLoad *load = loadp;
+
+ swfdec_player_unroot (SWFDEC_FLASH_SECURITY (load->resource)->player, load);
+ g_object_unref (load->resource);
+ g_free (load->url);
+ g_free (load->target);
+ if (load->buffer)
+ swfdec_buffer_unref (load->buffer);
+ g_slice_free (SwfdecResourceLoad, load);
+}
+
static void
-swfdec_resource_do_load (SwfdecPlayer *player, SwfdecLoader *loader, gpointer resourcep)
+swfdec_resource_load_mark (gpointer loadp, gpointer playerp)
{
- SwfdecResource *resource = SWFDEC_RESOURCE (resourcep);
+ SwfdecResourceLoad *load = loadp;
- if (loader == NULL) {
- /* *** Security Sandbox Violation *** */
+ swfdec_resource_mark (load->resource);
+ if (load->loader)
+ swfdec_as_object_mark (SWFDEC_AS_OBJECT (load->loader));
+}
+
+static void
+swfdec_resource_do_load (SwfdecPlayer *player, const SwfdecURL *url, gboolean allowed, gpointer loadp)
+{
+ SwfdecResourceLoad *load = loadp;
+ SwfdecResource *resource;
+ SwfdecLoader *loader;
+
+ resource = g_object_new (SWFDEC_TYPE_RESOURCE, NULL);
+ resource->version = load->resource->version;
+ SWFDEC_FLASH_SECURITY (resource)->player = player;
+ resource->target = g_strdup (load->target);
+ resource->clip_loader = g_object_ref (load->loader);
+ swfdec_player_root (player, resource, (GFunc) swfdec_resource_mark);
+
+ if (!allowed) {
+ SWFDEC_WARNING ("SECURITY: no access to %s from %s",
+ load->url, swfdec_url_get_url (SWFDEC_FLASH_SECURITY (load->resource)->url));
+ /* FIXME: is replacing correct? */
swfdec_resource_emit_error (resource, SWFDEC_AS_STR_IllegalRequest);
+ g_object_unref (resource);
return;
}
+
+ loader = swfdec_loader_load (load->resource->loader, url, load->request, load->buffer);
swfdec_resource_set_loader (resource, loader);
g_object_unref (loader);
}
static void
-swfdec_resource_do_unload (SwfdecPlayer *player, const char *target, gpointer resourcep)
+swfdec_resource_load_request (gpointer loadp, gpointer playerp)
{
- SwfdecResource *resource = SWFDEC_RESOURCE (resourcep);
- SwfdecSpriteMovie *movie;
-
- movie = (SwfdecSpriteMovie *) swfdec_action_lookup_object (
- SWFDEC_AS_CONTEXT (player), player->priv->roots->data,
- target, target + strlen (target));
- if (!SWFDEC_IS_SPRITE_MOVIE (movie)) {
- SWFDEC_DEBUG ("no movie, not unloading");
+ SwfdecResourceLoad *load = loadp;
+ SwfdecPlayer *player = playerp;
+ SwfdecURL *url;
+
+ /* empty URL means unload (yay!) */
+ if (load->url[0] == '\0') {
+ SwfdecSpriteMovie *movie;
+
+ movie = (SwfdecSpriteMovie *) swfdec_action_lookup_object (
+ SWFDEC_AS_CONTEXT (player), player->priv->roots->data,
+ load->target, load->target + strlen (load->target));
+ if (!SWFDEC_IS_SPRITE_MOVIE (movie)) {
+ SWFDEC_DEBUG ("no movie, not unloading");
+ return;
+ }
+ swfdec_resource_replace_movie (movie, load->resource);
+ return;
+ }
+
+ /* fscommand? */
+ if (g_ascii_strncasecmp (load->url, "FSCommand:", 10) == 0) {
+ char *command = load->url + 10;
+ g_signal_emit_by_name (player, "fscommand", command, load->target);
+ return;
+ }
+
+ /* LAUNCH command (aka getURL) */
+ if (!load->target_is_movie && swfdec_player_get_level (player, load->target) < 0) {
+ swfdec_player_launch (player, load->request, load->url,load->target, load->buffer);
return;
}
- swfdec_resource_replace_movie (movie, resource);
+
+ url = swfdec_url_new_relative (SWFDEC_FLASH_SECURITY (player->priv->resource)->url, load->url);
+ switch (SWFDEC_FLASH_SECURITY (load->resource)->sandbox) {
+ case SWFDEC_SANDBOX_REMOTE:
+ swfdec_resource_do_load (player, url, !swfdec_url_is_local (url), load);
+ break;
+ case SWFDEC_SANDBOX_LOCAL_NETWORK:
+ case SWFDEC_SANDBOX_LOCAL_TRUSTED:
+ if (!swfdec_url_is_local (url)) {
+ SWFDEC_FIXME ("Adobe claims you need to be allowed by policy files now, "
+ "we don't check that though");
+ }
+ swfdec_resource_do_load (player, url, TRUE, load);
+ break;
+ case SWFDEC_SANDBOX_LOCAL_FILE:
+ swfdec_resource_do_load (player, url, swfdec_url_is_local (url), load);
+ break;
+ case SWFDEC_SANDBOX_NONE:
+ default:
+ g_assert_not_reached ();
+ break;
+ }
+ swfdec_url_free (url);
}
/* NB: must be called from a script */
+/* FIXME: 7 arguments?! */
void
swfdec_resource_load (SwfdecPlayer *player, const char *target, const char *url,
- SwfdecLoaderRequest request, SwfdecBuffer *buffer, SwfdecMovieClipLoader *loader)
+ SwfdecLoaderRequest request, SwfdecBuffer *buffer, SwfdecMovieClipLoader *loader,
+ gboolean target_is_movie)
{
SwfdecSpriteMovie *movie;
- SwfdecResource *resource;
- char *path;
+ SwfdecResourceLoad *load;
g_return_if_fail (SWFDEC_IS_PLAYER (player));
g_return_if_fail (target != NULL);
@@ -526,32 +618,30 @@ swfdec_resource_load (SwfdecPlayer *player, const char *target, const char *url,
g_return_if_fail (loader == NULL || SWFDEC_IS_MOVIE_CLIP_LOADER (loader));
g_assert (SWFDEC_AS_CONTEXT (player)->frame != NULL);
- movie = (SwfdecSpriteMovie *) swfdec_player_get_movie_from_string (player, target);
- if (SWFDEC_IS_SPRITE_MOVIE (movie)) {
- path = swfdec_movie_get_path (SWFDEC_MOVIE (movie), TRUE);
- } else if (swfdec_player_get_level (player, target) >= 0) {
- path = g_strdup (target);
- } else {
- SWFDEC_WARNING ("%s does not reference a movie, not loading %s", target, url);
- return;
- }
- if (url[0] == '\0') {
- if (movie) {
- resource = g_object_ref (SWFDEC_MOVIE (movie)->resource);
- swfdec_player_request_unload (player, path, swfdec_resource_do_unload, resource, g_object_unref);
+ load = g_slice_new (SwfdecResourceLoad);
+
+ if (target_is_movie) {
+ movie = (SwfdecSpriteMovie *) swfdec_player_get_movie_from_string (player, target);
+ if (SWFDEC_IS_SPRITE_MOVIE (movie)) {
+ load->target = swfdec_movie_get_path (SWFDEC_MOVIE (movie), TRUE);
+ } else if (swfdec_player_get_level (player, target) >= 0) {
+ load->target = g_strdup (target);
+ } else {
+ SWFDEC_WARNING ("%s does not reference a movie, not loading %s", target, url);
+ return;
}
- g_free (path);
} else {
- resource = g_object_new (SWFDEC_TYPE_RESOURCE, NULL);
- resource->version = SWFDEC_AS_CONTEXT (player)->version;
- SWFDEC_FLASH_SECURITY (resource)->player = player;
- resource->target = path;
- if (loader)
- resource->clip_loader = g_object_ref (loader);
- swfdec_player_root (player, resource, (GFunc) swfdec_resource_mark);
- swfdec_player_request_resource (player, SWFDEC_AS_CONTEXT (player)->frame->security,
- url, request, buffer, swfdec_resource_do_load, resource, g_object_unref);
+ load->target = g_strdup (target);
}
+ load->resource = SWFDEC_RESOURCE (g_object_ref (SWFDEC_AS_CONTEXT (player)->frame->security));
+ load->url = g_strdup (url);
+ load->request = request;
+ load->buffer = buffer;
+ load->loader = loader;
+ load->target_is_movie = target_is_movie;
+
+ swfdec_player_root (player, load, swfdec_resource_load_mark);
+ swfdec_player_request_resource (player, swfdec_resource_load_request, load, swfdec_resource_load_free);
}
gboolean
diff --git a/libswfdec/swfdec_resource.h b/libswfdec/swfdec_resource.h
index 178ae5a..5de9c9b 100644
--- a/libswfdec/swfdec_resource.h
+++ b/libswfdec/swfdec_resource.h
@@ -73,6 +73,7 @@ GType swfdec_resource_get_type (void);
SwfdecResource *swfdec_resource_new (SwfdecPlayer * player,
SwfdecLoader * loader,
const char * variables);
+
void swfdec_resource_mark (SwfdecResource * resource);
gboolean swfdec_resource_emit_on_load_init (SwfdecResource * resource);
@@ -89,7 +90,8 @@ void swfdec_resource_load (SwfdecPlayer * player,
const char * url,
SwfdecLoaderRequest request,
SwfdecBuffer * buffer,
- SwfdecMovieClipLoader *loader);
+ SwfdecMovieClipLoader *loader,
+ gboolean target_is_movie);
G_END_DECLS
diff --git a/libswfdec/swfdec_resource_request.c b/libswfdec/swfdec_resource_request.c
deleted file mode 100644
index e367993..0000000
--- a/libswfdec/swfdec_resource_request.c
+++ /dev/null
@@ -1,310 +0,0 @@
-/* Swfdec
- * Copyright (C) 2007 Benjamin Otte <otte at gnome.org>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor,
- * Boston, MA 02110-1301 USA
- */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include <string.h>
-#include "swfdec_resource_request.h"
-#include "swfdec_as_interpret.h"
-#include "swfdec_debug.h"
-#include "swfdec_loader_internal.h"
-#include "swfdec_player_internal.h"
-#include "swfdec_resource.h"
-#include "swfdec_sprite_movie.h"
-
-static void
-swfdec_resource_request_free (SwfdecResourceRequest *request)
-{
- g_return_if_fail (request != NULL);
-
- if (request->security)
- g_object_unref (request->security);
- if (request->destroy)
- request->destroy (request->data);
- g_free (request->url);
- if (request->buffer)
- swfdec_buffer_unref (request->buffer);
- g_free (request->command);
- g_free (request->value);
- g_free (request->target);
- g_slice_free (SwfdecResourceRequest, request);
-}
-
-typedef struct {
- SwfdecPlayer * player;
- SwfdecLoaderRequest request;
- SwfdecBuffer * buffer;
- SwfdecResourceFunc callback;
- SwfdecResourceAbortFunc abort;
- gpointer user_data;
-} AllowCallbackData;
-
-static void
-swfdec_player_request_resource_allow_callback (const SwfdecURL *url,
- int status, gpointer data_)
-{
- AllowCallbackData *data = data_;
- SwfdecLoader *loader;
-
- if (status < 0) {
- if (data->abort != NULL)
- data->abort (data->player, data->user_data);
- g_free (data);
- return;
- }
-
- if (status == 0) {
- SWFDEC_ERROR ("not allowing access to %s", swfdec_url_get_url (url));
- loader = NULL;
- } else {
- if (data->buffer) {
- loader = swfdec_loader_load (data->player->priv->resource->loader, url,
- data->request, (const char *) data->buffer->data,
- data->buffer->length);
- } else {
- loader = swfdec_loader_load (data->player->priv->resource->loader, url,
- data->request, NULL, 0);
- }
- }
-
- data->callback (data->player, loader, data->user_data);
-
- g_free (data);
-}
-
-void
-swfdec_player_request_resource_now (SwfdecPlayer *player,
- SwfdecSecurity *security, const char *url, SwfdecLoaderRequest req,
- SwfdecBuffer *buffer, SwfdecResourceFunc callback,
- SwfdecResourceAbortFunc abort, gpointer user_data)
-{
- SwfdecURL *absolute;
- AllowCallbackData *data;
-
- g_assert (SWFDEC_IS_PLAYER (player));
- g_assert (SWFDEC_IS_SECURITY (security));
- g_assert (url != NULL);
-
- data = g_new (AllowCallbackData, 1);
- data->player = player;
- data->request = req;
- data->buffer = buffer;
- data->callback = callback;
- data->abort = abort;
- data->user_data = user_data;
-
- /* create absolute url first */
- absolute = swfdec_url_new_relative (swfdec_loader_get_url (player->priv->resource->loader), url);
-
- swfdec_player_request_resource_allow_callback (absolute, TRUE, data);
-
- swfdec_url_free (absolute);
-}
-
-static void
-swfdec_request_resource_perform_fscommand (SwfdecPlayer *player, SwfdecResourceRequest *request)
-{
- g_signal_emit_by_name (player, "fscommand", request->command, request->value);
- swfdec_resource_request_free (request);
-}
-
-static void
-swfdec_request_resource_perform_load_callback (SwfdecPlayer *player,
- SwfdecLoader *loader, gpointer data)
-{
- SwfdecResourceRequest *request = data;
-
- request->func (player, loader, request->data);
- swfdec_resource_request_free (request);
-}
-
-static void
-swfdec_request_resource_perform_load_abort_callback (SwfdecPlayer *player,
- gpointer data)
-{
- SwfdecResourceRequest *request = data;
-
- swfdec_resource_request_free (request);
-}
-
-static void
-swfdec_request_resource_perform_load (SwfdecPlayer *player, SwfdecResourceRequest *request)
-{
- g_assert (player->priv->resource);
- swfdec_player_request_resource_now (player, request->security,
- request->url, request->request, request->buffer,
- swfdec_request_resource_perform_load_callback,
- swfdec_request_resource_perform_load_abort_callback, request);
-}
-
-static void
-swfdec_request_resource_perform_unload (SwfdecPlayer *player, SwfdecResourceRequest *request)
-{
- request->unload (player, request->target, request->data);
- swfdec_resource_request_free (request);
-}
-
-static void
-swfdec_request_resource_perform_one (gpointer requestp, gpointer player)
-{
- SwfdecResourceRequest *request = requestp;
-
- switch (request->type) {
- case SWFDEC_RESOURCE_REQUEST_LOAD:
- swfdec_request_resource_perform_load (player, request);
- break;
- case SWFDEC_RESOURCE_REQUEST_FSCOMMAND:
- swfdec_request_resource_perform_fscommand (player, request);
- break;
- case SWFDEC_RESOURCE_REQUEST_UNLOAD:
- swfdec_request_resource_perform_unload (player, request);
- break;
- default:
- g_assert_not_reached ();
- swfdec_resource_request_free (request);
- break;
- }
-}
-
-void
-swfdec_player_resource_request_perform (SwfdecPlayer *player)
-{
- GSList *list;
-
- g_return_if_fail (SWFDEC_IS_PLAYER (player));
-
- list = player->priv->resource_requests;
- player->priv->resource_requests = NULL;
- g_slist_foreach (list, swfdec_request_resource_perform_one, player);
- g_slist_free (list);
-}
-
-void
-swfdec_player_request_resource (SwfdecPlayer *player, SwfdecSecurity *security,
- const char *url, SwfdecLoaderRequest req, SwfdecBuffer *buffer,
- SwfdecResourceFunc func, gpointer data, GDestroyNotify destroy)
-{
- SwfdecResourceRequest *request;
-
- g_return_if_fail (SWFDEC_IS_PLAYER (player));
- g_return_if_fail (SWFDEC_IS_SECURITY (security));
- g_return_if_fail (url != NULL);
- g_return_if_fail (func != NULL);
-
- request = g_slice_new0 (SwfdecResourceRequest);
- request->type = SWFDEC_RESOURCE_REQUEST_LOAD;
- request->security = g_object_ref (security);
- request->url = g_strdup (url);
- request->request = req;
- if (buffer)
- request->buffer = swfdec_buffer_ref (buffer);
- request->func = func;
- request->destroy = destroy;
- request->data = data;
-
- player->priv->resource_requests = g_slist_append (player->priv->resource_requests, request);
-}
-
-static gboolean
-is_ascii (const char *s)
-{
- while (*s) {
- if (*s & 0x80)
- return FALSE;
- s++;
- }
- return TRUE;
-}
-
-/**
- * swfdec_player_request_fscommand:
- * @player: a #SwfdecPlayer
- * @command: the command to parse
- * @value: the value passed to the command
- *
- * Checks if @command is an FSCommand and if so, queues emission of the
- * SwfdecPlayer::fscommand signal.
- *
- * Returns: %TRUE if an fscommand was found and the signal emitted, %FALSE
- * otherwise.
- **/
-gboolean
-swfdec_player_request_fscommand (SwfdecPlayer *player, const char *command,
- const char *value)
-{
- SwfdecResourceRequest *request;
-
- g_return_val_if_fail (SWFDEC_IS_PLAYER (player), FALSE);
- g_return_val_if_fail (command != NULL, FALSE);
- g_return_val_if_fail (value != NULL, FALSE);
-
- if (g_ascii_strncasecmp (command, "FSCommand:", 10) != 0)
- return FALSE;
-
- command += 10;
- if (!is_ascii (command)) {
- SWFDEC_ERROR ("command \"%s\" are not ascii, skipping fscommand", command);
- return TRUE;
- }
- request = g_slice_new0 (SwfdecResourceRequest);
- request->type = SWFDEC_RESOURCE_REQUEST_FSCOMMAND;
- request->command = g_ascii_strdown (command, -1);
- request->value = g_strdup (value);
-
- player->priv->resource_requests = g_slist_append (player->priv->resource_requests, request);
- return TRUE;
-}
-
-void
-swfdec_player_request_unload (SwfdecPlayer *player, const char *target,
- SwfdecResourceUnloadFunc func, gpointer data, GDestroyNotify destroy)
-{
- SwfdecResourceRequest *request;
-
- g_return_if_fail (SWFDEC_IS_PLAYER (player));
- g_return_if_fail (target != NULL);
-
- request = g_slice_new0 (SwfdecResourceRequest);
- request->type = SWFDEC_RESOURCE_REQUEST_UNLOAD;
- request->target = g_strdup (target);
- request->unload = func;
- request->data = data;
- request->destroy = destroy;
-
- player->priv->resource_requests = g_slist_append (player->priv->resource_requests, request);
-}
-
-void
-swfdec_player_resource_request_init (SwfdecPlayer *player)
-{
- /* empty */
-}
-
-void
-swfdec_player_resource_request_finish (SwfdecPlayer *player)
-{
- g_return_if_fail (SWFDEC_IS_PLAYER (player));
-
- g_slist_foreach (player->priv->resource_requests, (GFunc) swfdec_resource_request_free, NULL);
- g_slist_free (player->priv->resource_requests);
- player->priv->resource_requests = NULL;
-}
-
diff --git a/libswfdec/swfdec_resource_request.h b/libswfdec/swfdec_resource_request.h
deleted file mode 100644
index af9c7c7..0000000
--- a/libswfdec/swfdec_resource_request.h
+++ /dev/null
@@ -1,96 +0,0 @@
-/* Swfdec
- * Copyright (C) 2007 Benjamin Otte <otte at gnome.org>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor,
- * Boston, MA 02110-1301 USA
- */
-
-#ifndef _SWFDEC_RESOURCE_REQUEST_H_
-#define _SWFDEC_RESOURCE_REQUEST_H_
-
-#include <libswfdec/swfdec.h>
-#include <libswfdec/swfdec_security.h>
-
-G_BEGIN_DECLS
-
-typedef struct _SwfdecResourceRequest SwfdecResourceRequest;
-typedef void (* SwfdecResourceFunc) (SwfdecPlayer *player, SwfdecLoader *loader, gpointer data);
-typedef void (* SwfdecResourceAbortFunc) (SwfdecPlayer *player, gpointer data);
-typedef void (* SwfdecResourceUnloadFunc) (SwfdecPlayer *player, const char *target, gpointer data);
-
-typedef enum {
- SWFDEC_RESOURCE_REQUEST_LOAD,
- SWFDEC_RESOURCE_REQUEST_FSCOMMAND,
- SWFDEC_RESOURCE_REQUEST_UNLOAD
-} SwfdecResourceRequestType;
-
-/* FIXME: make this a union? */
-struct _SwfdecResourceRequest
-{
- SwfdecResourceRequestType type; /* type of request */
-
- GDestroyNotify destroy; /* function to call on player dispose */
- gpointer data; /* function to pass to the above functions */
-
- /* LOAD */
- SwfdecSecurity * security; /* security context when loading or NULL for fscommand */
- char * url; /* URL we're gonna load */
- SwfdecLoaderRequest request; /* how are we goona load this URL? */
- SwfdecBuffer * buffer; /* data to pass to load request or NULL */
- SwfdecResourceFunc func; /* function to call when we got a loader (or an error) */
-
- /* FSCOMMAND */
- char * command; /* fscommand to execute */
- char * value; /* value to pass to fscommand */
-
- /* UNLOAD */
- char * target; /* the target to unload */
- SwfdecResourceUnloadFunc unload; /* function to call when we got a loader (or an error) */
-};
-
-/* public api for swfdec */
-
-void swfdec_player_request_resource (SwfdecPlayer * player,
- SwfdecSecurity * security,
- const char * url,
- SwfdecLoaderRequest req,
- SwfdecBuffer * buffer,
- SwfdecResourceFunc func,
- gpointer data,
- GDestroyNotify destroy);
-void swfdec_player_request_resource_now (SwfdecPlayer * player,
- SwfdecSecurity * security,
- const char * url,
- SwfdecLoaderRequest req,
- SwfdecBuffer * buffer,
- SwfdecResourceFunc callback,
- SwfdecResourceAbortFunc abort,
- gpointer user_data);
-void swfdec_player_request_unload (SwfdecPlayer * player,
- const char * target,
- SwfdecResourceUnloadFunc func,
- gpointer data,
- GDestroyNotify destroy);
-gboolean swfdec_player_request_fscommand (SwfdecPlayer * player,
- const char * command,
- const char * value);
-
-/* private api for swfdec_player.c */
-void swfdec_player_resource_request_init (SwfdecPlayer * player);
-void swfdec_player_resource_request_perform (SwfdecPlayer * player);
-void swfdec_player_resource_request_finish (SwfdecPlayer * player);
-
-G_END_DECLS
-#endif
diff --git a/libswfdec/swfdec_security.h b/libswfdec/swfdec_security.h
index cdc0717..0211301 100644
--- a/libswfdec/swfdec_security.h
+++ b/libswfdec/swfdec_security.h
@@ -28,8 +28,6 @@ G_BEGIN_DECLS
typedef struct _SwfdecSecurity SwfdecSecurity;
typedef struct _SwfdecSecurityClass SwfdecSecurityClass;
-typedef void (* SwfdecURLAllowFunc) (const SwfdecURL *url, int status, gpointer data);
-
#define SWFDEC_TYPE_SECURITY (swfdec_security_get_type())
#define SWFDEC_IS_SECURITY(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), SWFDEC_TYPE_SECURITY))
#define SWFDEC_IS_SECURITY_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), SWFDEC_TYPE_SECURITY))
commit 7e5ebb199b18bc408f2ee4738b1d7fe8caa3eddb
Author: Benjamin Otte <otte at gnome.org>
Date: Thu Jan 17 23:29:43 2008 +0100
keep track of the security we were called with
diff --git a/libswfdec/swfdec_interval.c b/libswfdec/swfdec_interval.c
index 1d98b2b..c4caa21 100644
--- a/libswfdec/swfdec_interval.c
+++ b/libswfdec/swfdec_interval.c
@@ -26,9 +26,12 @@
#include "swfdec_interval.h"
#include "swfdec_as_context.h"
+#include "swfdec_as_frame_internal.h"
#include "swfdec_as_function.h"
+#include "swfdec_as_internal.h"
#include "swfdec_debug.h"
#include "swfdec_player_internal.h"
+#include "swfdec_resource.h"
G_DEFINE_TYPE (SwfdecInterval, swfdec_interval, SWFDEC_TYPE_AS_OBJECT)
@@ -39,6 +42,7 @@ swfdec_interval_mark (SwfdecAsObject *object)
SwfdecInterval *interval = SWFDEC_INTERVAL (object);
swfdec_as_object_mark (interval->object);
+ swfdec_resource_mark (interval->resource);
if (interval->fun_name)
swfdec_as_string_mark (interval->fun_name);
for (i = 0; i < interval->n_args; i++) {
@@ -60,6 +64,10 @@ swfdec_interval_dispose (GObject *object)
swfdec_player_remove_timeout (SWFDEC_PLAYER (SWFDEC_AS_OBJECT (object)->context), &interval->timeout);
interval->timeout.callback = NULL;
}
+ if (interval->resource) {
+ g_object_unref (interval->resource);
+ interval->resource = NULL;
+ }
G_OBJECT_CLASS (swfdec_interval_parent_class)->dispose (object);
}
@@ -97,8 +105,8 @@ swfdec_interval_trigger (SwfdecTimeout *timeout)
interval->timeout.callback = NULL;
}
if (interval->fun_name) {
- swfdec_as_object_call (interval->object, interval->fun_name,
- interval->n_args, interval->args, &ret);
+ swfdec_as_object_call_with_security (interval->object, SWFDEC_SECURITY (interval->resource),
+ interval->fun_name, interval->n_args, interval->args, &ret);
} else {
swfdec_as_function_call (SWFDEC_AS_FUNCTION (interval->object), NULL,
interval->n_args, interval->args, &ret);
@@ -123,6 +131,7 @@ swfdec_interval_new (SwfdecPlayer *player, guint msecs, gboolean repeat,
swfdec_as_object_add (SWFDEC_AS_OBJECT (interval), context, size);
interval->id = ++player->priv->interval_id;
+ interval->resource = SWFDEC_RESOURCE (g_object_ref (context->frame->security));
interval->msecs = msecs;
interval->repeat = repeat;
interval->object = object;
diff --git a/libswfdec/swfdec_interval.h b/libswfdec/swfdec_interval.h
index 07da0c9..40a61cc 100644
--- a/libswfdec/swfdec_interval.h
+++ b/libswfdec/swfdec_interval.h
@@ -40,6 +40,7 @@ struct _SwfdecInterval {
SwfdecAsObject asobject;
SwfdecTimeout timeout;
+ SwfdecResource * resource; /* resouce that initiated this interval */
guint id; /* id this interval is identified with */
guint msecs; /* interval in milliseconds */
gboolean repeat; /* TRUE for calling in intervals, FALSE for single-shot */
commit b8e849b598af072124b6eb3c9eadd645832dadd5
Author: Benjamin Otte <otte at gnome.org>
Date: Wed Jan 16 17:07:08 2008 +0100
send the terminating \0, too
diff --git a/libswfdec/swfdec_load_object_as.c b/libswfdec/swfdec_load_object_as.c
index de92fe8..51656d5 100644
--- a/libswfdec/swfdec_load_object_as.c
+++ b/libswfdec/swfdec_load_object_as.c
@@ -128,7 +128,7 @@ swfdec_load_object_as_sendAndLoad (SwfdecAsContext *cx, SwfdecAsObject *object,
swfdec_as_object_call (object, SWFDEC_AS_STR_toString, 0, NULL, &val);
data = swfdec_as_value_to_string (cx, &val);
if (strlen (data) > 0) {
- buffer = swfdec_buffer_new_for_data (g_memdup (data, strlen (data)),
+ buffer = swfdec_buffer_new_for_data (g_memdup (data, strlen (data) + 1),
strlen (data));
swfdec_load_object_new (target, url, SWFDEC_LOADER_REQUEST_POST, buffer,
swfdec_load_object_on_progress, swfdec_load_object_on_finish);
commit ab96aeb0e7242f131bd4d4cf19ecb3c2ebb7026d
Author: Benjamin Otte <otte at gnome.org>
Date: Wed Jan 16 16:49:33 2008 +0100
really do the merge
diff --git a/libswfdec/swfdec_player.c b/libswfdec/swfdec_player.c
index bfeb0bb..eef2dce 100644
--- a/libswfdec/swfdec_player.c
+++ b/libswfdec/swfdec_player.c
@@ -2098,6 +2098,36 @@ swfdec_player_set_export_class (SwfdecPlayer *player, const char *name, SwfdecAs
}
}
+/**
+ * swfdec_player_create_socket:
+ * @player: a #SwfdecPlayer
+ * @hostname: the host name to connect to.
+ * @port: the port to connect to
+ *
+ * Creates a new socket connecting to the given hostname and port.
+ *
+ * Returns: a new socket or %NULL if no socket implementation exists
+ **/
+/* FIXME: always return a socket? */
+SwfdecSocket *
+swfdec_player_create_socket (SwfdecPlayer *player, const char *hostname, guint port)
+{
+ SwfdecSocket *sock;
+ SwfdecSocketClass *klass;
+
+ g_return_val_if_fail (SWFDEC_IS_PLAYER (player), NULL);
+ g_return_val_if_fail (hostname != NULL, NULL);
+ g_return_val_if_fail (port > 0, NULL);
+
+ if (player->priv->socket_type == 0)
+ return NULL;
+ klass = g_type_class_ref (player->priv->socket_type);
+ sock = klass->create (hostname, port);
+ g_type_class_unref (klass);
+
+ return sock;
+}
+
/** PUBLIC API ***/
/**
diff --git a/libswfdec/swfdec_policy_file.c b/libswfdec/swfdec_policy_file.c
index e275119..dd4e0ca 100644
--- a/libswfdec/swfdec_policy_file.c
+++ b/libswfdec/swfdec_policy_file.c
@@ -113,10 +113,10 @@ swfdec_policy_file_parse (SwfdecPolicyFile *file, const char *text)
}
}
-/*** SWFDEC_LOADER_TARGET ***/
+/*** SWFDEC_STREAM_TARGET ***/
static SwfdecPlayer *
-swfdec_policy_file_target_get_player (SwfdecLoaderTarget *target)
+swfdec_policy_file_target_get_player (SwfdecStreamTarget *target)
{
return SWFDEC_POLICY_FILE (target)->player;
}
@@ -128,7 +128,7 @@ swfdec_policy_file_finished_loading (SwfdecPolicyFile *file, const char *text)
SwfdecPolicyFile *next;
GList *link;
- swfdec_loader_set_target (file->stream, NULL);
+ swfdec_stream_set_target (file->stream, NULL);
file->stream = NULL;
if (text)
@@ -156,8 +156,8 @@ swfdec_policy_file_finished_loading (SwfdecPolicyFile *file, const char *text)
}
static void
-swfdec_policy_file_target_error (SwfdecLoaderTarget *target,
- SwfdecLoader *loader)
+swfdec_policy_file_target_error (SwfdecStreamTarget *target,
+ SwfdecStream *stream)
{
SwfdecPolicyFile *file = SWFDEC_POLICY_FILE (target);
@@ -165,15 +165,20 @@ swfdec_policy_file_target_error (SwfdecLoaderTarget *target,
}
static void
-swfdec_policy_file_target_eof (SwfdecLoaderTarget *target,
- SwfdecLoader *loader)
+swfdec_policy_file_target_close (SwfdecStreamTarget *target,
+ SwfdecStream *stream)
{
SwfdecPolicyFile *file = SWFDEC_POLICY_FILE (target);
char *text;
- swfdec_loader_set_target (loader, NULL);
+ swfdec_stream_set_target (stream, NULL);
file->stream = NULL;
- text = swfdec_loader_get_text (loader, 8);
+ if (SWFDEC_IS_LOADER (stream)) {
+ text = swfdec_loader_get_text (SWFDEC_LOADER (stream), 8);
+ } else {
+ SWFDEC_FIXME ("rewrite swfdec_loader_get_text() to swfdec_buffer_queue_get_text()");
+ text = NULL;
+ }
if (text == NULL) {
SWFDEC_ERROR ("couldn't get text from crossdomain policy file %s",
@@ -184,17 +189,17 @@ swfdec_policy_file_target_eof (SwfdecLoaderTarget *target,
}
static void
-swfdec_policy_file_loader_target_init (SwfdecLoaderTargetInterface *iface)
+swfdec_policy_file_stream_target_init (SwfdecStreamTargetInterface *iface)
{
iface->get_player = swfdec_policy_file_target_get_player;
- iface->eof = swfdec_policy_file_target_eof;
+ iface->close = swfdec_policy_file_target_close;
iface->error = swfdec_policy_file_target_error;
}
/*** SWFDEC_POLICY_FILE ***/
G_DEFINE_TYPE_WITH_CODE (SwfdecPolicyFile, swfdec_policy_file, G_TYPE_OBJECT,
- G_IMPLEMENT_INTERFACE (SWFDEC_TYPE_LOADER_TARGET, swfdec_policy_file_loader_target_init))
+ G_IMPLEMENT_INTERFACE (SWFDEC_TYPE_STREAM_TARGET, swfdec_policy_file_stream_target_init))
static void
swfdec_policy_file_dispose (GObject *object)
@@ -202,7 +207,7 @@ swfdec_policy_file_dispose (GObject *object)
SwfdecPolicyFile *file = SWFDEC_POLICY_FILE (object);
if (file->stream) {
- swfdec_loader_set_target (file->stream, NULL);
+ swfdec_stream_set_target (file->stream, NULL);
g_object_unref (file->stream);
file->stream = NULL;
g_slist_foreach (file->requests, (GFunc) swfdec_policy_file_request_free, NULL);
@@ -245,9 +250,9 @@ swfdec_policy_file_new (SwfdecPlayer *player, const SwfdecURL *url)
if (swfdec_url_has_protocol (url, "xmlsocket")) {
SWFDEC_FIXME ("implement xmlsocket: protocol");
} else {
- file->stream = swfdec_loader_load (player->priv->resource->loader, url,
- SWFDEC_LOADER_REQUEST_DEFAULT, NULL, 0);
- swfdec_loader_set_target (file->stream, SWFDEC_LOADER_TARGET (file));
+ file->stream = SWFDEC_STREAM (swfdec_loader_load (player->priv->resource->loader,
+ url, SWFDEC_LOADER_REQUEST_DEFAULT, NULL, 0));
+ swfdec_stream_set_target (file->stream, SWFDEC_STREAM_TARGET (file));
}
player->priv->loading_policy_files =
g_list_prepend (player->priv->loading_policy_files, file);
diff --git a/libswfdec/swfdec_policy_file.h b/libswfdec/swfdec_policy_file.h
index 9a89f81..b849562 100644
--- a/libswfdec/swfdec_policy_file.h
+++ b/libswfdec/swfdec_policy_file.h
@@ -42,7 +42,7 @@ struct _SwfdecPolicyFile {
SwfdecPlayer * player; /* player we're loaded from */
SwfdecURL * load_url; /* url we're loaded from */
SwfdecURL * url; /* parent url we check with */
- SwfdecLoader * stream; /* stream we are loading or NULL if done loading */
+ SwfdecStream * stream; /* stream we are loading or NULL if done loading */
GSList * allowed_hosts; /* list of GPatternSpec of the allowed hosts */
GSList * requests; /* requests waiting for this file to finish loading */
diff --git a/libswfdec/swfdec_xml_socket.c b/libswfdec/swfdec_xml_socket.c
index bff72c7..2978a2f 100644
--- a/libswfdec/swfdec_xml_socket.c
+++ b/libswfdec/swfdec_xml_socket.c
@@ -46,7 +46,7 @@ swfdec_xml_socket_ensure_closed (SwfdecXmlSocket *xml)
g_object_unref (xml->socket);
xml->socket = NULL;
- swfdec_player_unroot_object (SWFDEC_PLAYER (SWFDEC_AS_OBJECT (xml)->context), G_OBJECT (xml));
+ swfdec_player_unroot (SWFDEC_PLAYER (SWFDEC_AS_OBJECT (xml)->context), xml);
cur = g_object_get_qdata (G_OBJECT (xml->target), xml_socket_quark);
if (cur != xml)
g_object_set_qdata (G_OBJECT (xml->target), xml_socket_quark, cur);
@@ -201,7 +201,7 @@ swfdec_xml_socket_create (SwfdecAsObject *target, const char *hostname, guint po
xml = g_object_new (SWFDEC_TYPE_XML_SOCKET, NULL);
swfdec_as_object_add (SWFDEC_AS_OBJECT (xml), cx, sizeof (SwfdecXmlSocket));
- swfdec_player_root_object (SWFDEC_PLAYER (cx), G_OBJECT (xml));
+ swfdec_player_root (SWFDEC_PLAYER (cx), xml, (GFunc) swfdec_as_object_mark);
xml->target = target;
xml->socket = sock;
commit 5f2bdfd1e50aafe4971779fdf428f39360c55788
Author: Benjamin Otte <otte at gnome.org>
Date: Wed Jan 16 16:34:23 2008 +0100
add public API functions
diff --git a/libswfdec/swfdec_player.c b/libswfdec/swfdec_player.c
index af87562..bfeb0bb 100644
--- a/libswfdec/swfdec_player.c
+++ b/libswfdec/swfdec_player.c
@@ -877,6 +877,9 @@ swfdec_player_dispose (GObject *object)
g_hash_table_destroy (priv->registered_classes);
g_hash_table_destroy (priv->scripting_callbacks);
+ g_list_foreach (priv->loading_policy_files, (GFunc) g_object_unref, NULL);
+ g_list_free (priv->loading_policy_files);
+ priv->loading_policy_files = NULL;
g_slist_foreach (priv->policy_files, (GFunc) g_object_unref, NULL);
g_slist_free (priv->policy_files);
priv->policy_files = NULL;
diff --git a/libswfdec/swfdec_player_internal.h b/libswfdec/swfdec_player_internal.h
index 09aaf33..bb59e8e 100644
--- a/libswfdec/swfdec_player_internal.h
+++ b/libswfdec/swfdec_player_internal.h
@@ -42,6 +42,7 @@ typedef enum {
typedef void (* SwfdecActionFunc) (gpointer object, gpointer data);
typedef gboolean (* SwfdecAudioRemoveFunc) (SwfdecAudio *audio, gpointer data);
+typedef void (* SwfdecPolicyFunc) (SwfdecPlayer *player, gboolean allow, gpointer data);
typedef struct _SwfdecTimeout SwfdecTimeout;
struct _SwfdecTimeout {
@@ -135,7 +136,8 @@ struct _SwfdecPlayerPrivate
SwfdecRingBuffer * actions[SWFDEC_PLAYER_N_ACTION_QUEUES]; /* all actions we've queued up so far */
/* security */
- GSList * policy_files; /* list of SwfdecPolicyLoader objects, most recent first */
+ GList * loading_policy_files; /* list of loading SwfdecPlayerLoader - newest first */
+ GSList * policy_files; /* list of SwfdecPolicyLoader that finished loading */
};
void swfdec_player_initialize (SwfdecPlayer * player,
@@ -227,6 +229,15 @@ void swfdec_player_global_to_stage (SwfdecPlayer * player,
double * x,
double * y);
void swfdec_player_update_scale (SwfdecPlayer * player);
+
+/* in swfdec_policy_file.c */
+gboolean swfdec_player_allow_now (SwfdecPlayer * player,
+ const SwfdecURL * url);
+void swfdec_player_allow_or_load (SwfdecPlayer * player,
+ const SwfdecURL * url,
+ const SwfdecURL * load_url,
+ SwfdecPolicyFunc func,
+ gpointer data);
/* in swfdec_as_interpret.c */
SwfdecMovie * swfdec_player_get_movie_from_value
(SwfdecPlayer * player,
diff --git a/libswfdec/swfdec_policy_file.c b/libswfdec/swfdec_policy_file.c
index d0f3e90..e275119 100644
--- a/libswfdec/swfdec_policy_file.c
+++ b/libswfdec/swfdec_policy_file.c
@@ -34,6 +34,20 @@
#include "swfdec_xml.h"
#include "swfdec_xml_node.h"
+typedef struct _SwfdecPolicyFileRequest SwfdecPolicyFileRequest;
+struct _SwfdecPolicyFileRequest {
+ SwfdecURL * url; /* URL we are supposed to check */
+ SwfdecPolicyFunc func; /* function to call when we know if access is (not) allowed */
+ gpointer data; /* data to pass to func */
+};
+
+static void
+swfdec_policy_file_request_free (SwfdecPolicyFileRequest *request)
+{
+ swfdec_url_free (request->url);
+ g_slice_free (SwfdecPolicyFileRequest, request);
+}
+
/*** PARSING THE FILE ***/
static void
@@ -108,13 +122,46 @@ swfdec_policy_file_target_get_player (SwfdecLoaderTarget *target)
}
static void
+swfdec_policy_file_finished_loading (SwfdecPolicyFile *file, const char *text)
+{
+ SwfdecPlayerPrivate *priv;
+ SwfdecPolicyFile *next;
+ GList *link;
+
+ swfdec_loader_set_target (file->stream, NULL);
+ file->stream = NULL;
+
+ if (text)
+ swfdec_policy_file_parse (file, text);
+
+ priv = file->player->priv;
+ link = g_list_find (priv->loading_policy_files, file);
+ next = link->next ? link->next->data : NULL;
+ priv->loading_policy_files = g_list_delete_link (priv->loading_policy_files, link);
+ priv->policy_files = g_slist_prepend (priv->policy_files, file);
+ if (next) {
+ next->requests = g_slist_concat (next->requests, file->requests);
+ } else {
+ GSList *walk;
+
+ for (walk = file->requests; walk; walk = walk->next) {
+ SwfdecPolicyFileRequest *request = walk->data;
+ gboolean allow = swfdec_player_allow_now (file->player, request->url);
+ request->func (file->player, allow, request->data);
+ swfdec_policy_file_request_free (request);
+ }
+ g_slist_free (file->requests);
+ }
+ file->requests = NULL;
+}
+
+static void
swfdec_policy_file_target_error (SwfdecLoaderTarget *target,
SwfdecLoader *loader)
{
SwfdecPolicyFile *file = SWFDEC_POLICY_FILE (target);
- swfdec_loader_set_target (loader, NULL);
- file->stream = NULL;
+ swfdec_policy_file_finished_loading (file, NULL);
}
static void
@@ -131,10 +178,8 @@ swfdec_policy_file_target_eof (SwfdecLoaderTarget *target,
if (text == NULL) {
SWFDEC_ERROR ("couldn't get text from crossdomain policy file %s",
swfdec_url_get_url (file->load_url));
- return;
}
-
- swfdec_policy_file_parse (file, text);
+ swfdec_policy_file_finished_loading (file, text);
g_free (text);
}
@@ -160,6 +205,11 @@ swfdec_policy_file_dispose (GObject *object)
swfdec_loader_set_target (file->stream, NULL);
g_object_unref (file->stream);
file->stream = NULL;
+ g_slist_foreach (file->requests, (GFunc) swfdec_policy_file_request_free, NULL);
+ g_slist_free (file->requests);
+ file->requests = NULL;
+ } else {
+ g_assert (file->requests == NULL);
}
swfdec_url_free (file->load_url);
swfdec_url_free (file->url);
@@ -199,7 +249,8 @@ swfdec_policy_file_new (SwfdecPlayer *player, const SwfdecURL *url)
SWFDEC_LOADER_REQUEST_DEFAULT, NULL, 0);
swfdec_loader_set_target (file->stream, SWFDEC_LOADER_TARGET (file));
}
- player->priv->policy_files = g_slist_prepend (player->priv->policy_files, file);
+ player->priv->loading_policy_files =
+ g_list_prepend (player->priv->loading_policy_files, file);
return file;
}
@@ -243,15 +294,53 @@ swfdec_policy_file_allow (SwfdecPolicyFile *file, const SwfdecURL *url)
return FALSE;
}
-void
-swfdec_player_load_policy_file (SwfdecPlayer *player, const SwfdecURL *url)
+/*** PLAYER API ***/
+
+gboolean
+swfdec_player_allow_now (SwfdecPlayer *player, const SwfdecURL *url)
{
- SWFDEC_FIXME ("implement");
+ GSList *walk;
+
+ g_return_val_if_fail (SWFDEC_IS_PLAYER (player), FALSE);
+ g_return_val_if_fail (url != NULL, FALSE);
+
+ for (walk = player->priv->policy_files; walk; walk = walk->next) {
+ if (swfdec_policy_file_allow (walk->data, url))
+ return TRUE;
+ }
+ return FALSE;
}
void
-swfdec_player_check_policy_files (SwfdecPlayer *player,
- SwfdecPolicyFileFunc func, gpointer data)
+swfdec_player_allow_or_load (SwfdecPlayer *player, const SwfdecURL *url,
+ const SwfdecURL *load_url, SwfdecPolicyFunc func, gpointer data)
{
- SWFDEC_FIXME ("implement");
+ SwfdecPlayerPrivate *priv;
+ SwfdecPolicyFileRequest *request;
+ SwfdecPolicyFile *file;
+
+ g_return_if_fail (SWFDEC_IS_PLAYER (player));
+ g_return_if_fail (url != NULL);
+ g_return_if_fail (func);
+
+ if (swfdec_player_allow_now (player, url)) {
+ func (player, TRUE, data);
+ return;
+ }
+ if (load_url)
+ swfdec_policy_file_new (player, load_url);
+
+ priv = player->priv;
+ if (priv->loading_policy_files == NULL) {
+ func (player, FALSE, data);
+ return;
+ }
+ request = g_slice_new (SwfdecPolicyFileRequest);
+ request->url = swfdec_url_copy (url);
+ request->func = func;
+ request->data = data;
+
+ file = priv->loading_policy_files->data;
+ file->requests = g_slist_append (file->requests, request);
}
+
diff --git a/libswfdec/swfdec_policy_file.h b/libswfdec/swfdec_policy_file.h
index 5342983..9a89f81 100644
--- a/libswfdec/swfdec_policy_file.h
+++ b/libswfdec/swfdec_policy_file.h
@@ -28,7 +28,6 @@ G_BEGIN_DECLS
typedef struct _SwfdecPolicyFile SwfdecPolicyFile;
typedef struct _SwfdecPolicyFileClass SwfdecPolicyFileClass;
-typedef void (* SwfdecPolicyFileFunc) (SwfdecPlayer *player, gboolean allow, gpointer data);
#define SWFDEC_TYPE_POLICY_FILE (swfdec_policy_file_get_type())
#define SWFDEC_IS_POLICY_FILE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), SWFDEC_TYPE_POLICY_FILE))
@@ -45,6 +44,8 @@ struct _SwfdecPolicyFile {
SwfdecURL * url; /* parent url we check with */
SwfdecLoader * stream; /* stream we are loading or NULL if done loading */
GSList * allowed_hosts; /* list of GPatternSpec of the allowed hosts */
+
+ GSList * requests; /* requests waiting for this file to finish loading */
};
struct _SwfdecPolicyFileClass {
@@ -59,12 +60,6 @@ gboolean swfdec_policy_file_is_loading (SwfdecPolicyFile * file);
gboolean swfdec_policy_file_allow (SwfdecPolicyFile * file,
const SwfdecURL * url);
-void swfdec_player_load_policy_file (SwfdecPlayer * player,
- const SwfdecURL * url);
-void swfdec_player_check_policy_files(SwfdecPlayer * player,
- SwfdecPolicyFileFunc func,
- gpointer data);
-
G_END_DECLS
#endif
commit 031c01a4b787d908bc85291b65228bef9e6518bf
Author: Benjamin Otte <otte at gnome.org>
Date: Wed Jan 16 11:10:53 2008 +0100
add initial (compiling) bunch of code that changes policy files handling
Everythng compiles, nothing works
diff --git a/libswfdec/Makefile.am b/libswfdec/Makefile.am
index 7da1ba0..6316a0b 100644
--- a/libswfdec/Makefile.am
+++ b/libswfdec/Makefile.am
@@ -112,7 +112,7 @@ libswfdec_source_files = \
swfdec_player_as.c \
swfdec_player_scripting.c \
swfdec_print_job.c \
- swfdec_policy_loader.c \
+ swfdec_policy_file.c \
swfdec_rect.c \
swfdec_rectangle.c \
swfdec_resource.c \
@@ -264,7 +264,7 @@ noinst_HEADERS = \
swfdec_path.h \
swfdec_pattern.h \
swfdec_player_internal.h \
- swfdec_policy_loader.h \
+ swfdec_policy_file.h \
swfdec_rect.h \
swfdec_resource.h \
swfdec_resource_request.h \
diff --git a/libswfdec/swfdec_flash_security.c b/libswfdec/swfdec_flash_security.c
index 21fe688..ae7fce0 100644
--- a/libswfdec/swfdec_flash_security.c
+++ b/libswfdec/swfdec_flash_security.c
@@ -23,7 +23,6 @@
#include <string.h>
#include "swfdec_flash_security.h"
-#include "swfdec_policy_loader.h"
#include "swfdec_debug.h"
#include "swfdec_security_allow.h"
@@ -47,227 +46,10 @@ swfdec_flash_security_allow (SwfdecSecurity *guard, SwfdecSecurity *key)
}
}
-static gboolean
-swfdec_flash_security_match_domain (const SwfdecURL *guard, const SwfdecURL *key)
-{
- return g_ascii_strcasecmp (swfdec_url_get_host (guard), swfdec_url_get_host (key)) == 0;
-}
-
-typedef struct {
- SwfdecURL * url;
- SwfdecURLAllowFunc callback;
- gpointer user_data;
-} SwfdecAllowURLPending;
-
-static void
-swfdec_flash_security_call_pending (SwfdecFlashSecurity *sec, const char *host,
- gboolean allow)
-{
- GSList *iter, *prev, *next;
- SwfdecAllowURLPending *pending;
-
- g_return_if_fail (SWFDEC_IS_FLASH_SECURITY (sec));
- g_return_if_fail (host != NULL);
-
- prev = NULL;
- for (iter = sec->allow_url_pending; iter != NULL; iter = next) {
- next = iter->next;
- pending = iter->data;
-
- if (!g_ascii_strcasecmp (swfdec_url_get_host (pending->url), host)) {
- pending->callback (pending->url, allow, pending->user_data);
- swfdec_url_free (pending->url);
- g_free (pending);
- g_slist_free_1 (iter);
-
- if (prev != NULL) {
- prev->next = iter->next;
- iter = prev;
- iter->next = next;
- } else {
- iter = NULL;
- sec->allow_url_pending = next;
- }
- }
-
- prev = iter;
- }
-}
-
-static void
-swfdec_flash_security_policy_loader_done (SwfdecPolicyLoader *policy_loader,
- gboolean allow)
-{
- SwfdecFlashSecurity *sec = policy_loader->sec;
- char *host = g_strdup (policy_loader->host);
-
- if (allow) {
- sec->crossdomain_allowed = g_slist_prepend (sec->crossdomain_allowed, host);
- } else {
- sec->crossdomain_denied = g_slist_prepend (sec->crossdomain_denied, host);
- }
-
- sec->policy_loaders = g_slist_remove (sec->policy_loaders, policy_loader);
-
- swfdec_flash_security_call_pending (sec, host, allow);
-
- swfdec_policy_loader_free (policy_loader);
-}
-
-static void
-swfdec_flash_security_get_cross_domain_policy (SwfdecFlashSecurity *sec,
- const char *host)
-{
- GSList *iter;
- SwfdecPolicyLoader *policy_loader;
-
- g_return_if_fail (SWFDEC_IS_FLASH_SECURITY (sec));
- g_return_if_fail (host != NULL);
-
- for (iter = sec->policy_loaders; iter != NULL; iter = iter->next) {
- policy_loader = iter->data;
-
- if (!g_ascii_strcasecmp (policy_loader->host, host))
- return;
- }
-
- policy_loader = swfdec_policy_loader_new (sec, host,
- swfdec_flash_security_policy_loader_done);
- if (policy_loader == NULL) {
- sec->crossdomain_denied = g_slist_prepend (sec->crossdomain_denied,
- g_strdup (host));
- swfdec_flash_security_call_pending (sec, host, FALSE);
- return;
- }
-
- sec->policy_loaders = g_slist_prepend (sec->policy_loaders, policy_loader);
-}
-
-static void
-swfdec_flash_security_allow_cross_domain (SwfdecFlashSecurity *sec,
- const SwfdecURL *url, SwfdecURLAllowFunc callback, gpointer user_data)
-{
- SwfdecAllowURLPending *pending;
- const char *host;
-
- g_assert (SWFDEC_IS_FLASH_SECURITY (sec));
- g_assert (url != NULL);
- g_assert (callback != NULL);
-
- host = swfdec_url_get_host (url);
-
- if (g_slist_find_custom (sec->crossdomain_allowed, host,
- (GCompareFunc)g_ascii_strcasecmp)) {
- callback (url, 1, user_data);
- return;
- }
-
- if (g_slist_find_custom (sec->crossdomain_denied, host,
- (GCompareFunc)g_ascii_strcasecmp)) {
- callback (url, 0, user_data);
- return;
- }
-
- pending = g_new (SwfdecAllowURLPending, 1);
- pending->url = swfdec_url_copy (url);
- pending->callback = callback;
- pending->user_data = user_data;
-
- sec->allow_url_pending = g_slist_prepend (sec->allow_url_pending, pending);
-
- swfdec_flash_security_get_cross_domain_policy (sec, host);
-}
-
-static void
-swfdec_flash_security_allow_url (SwfdecSecurity *guard, const SwfdecURL *url,
- SwfdecURLAllowFunc callback, gpointer user_data)
-{
- SwfdecFlashSecurity *sec = SWFDEC_FLASH_SECURITY (guard);
- int status;
-
- switch (sec->sandbox) {
- case SWFDEC_SANDBOX_NONE:
- status = 0;
- break;
- case SWFDEC_SANDBOX_REMOTE:
- if (swfdec_url_is_local (url)) {
- status = 0;
- } else if (swfdec_flash_security_match_domain (sec->url, url)) {
- status = 1;
- } else {
- swfdec_flash_security_allow_cross_domain (sec, url, callback,
- user_data);
- return;
- }
- break;
- case SWFDEC_SANDBOX_LOCAL_FILE:
- if (swfdec_url_is_local (url)) {
- status = 1;
- } else {
- status = 0;
- }
- break;
- case SWFDEC_SANDBOX_LOCAL_NETWORK:
- if (swfdec_url_is_local (url)) {
- status = 0;
- } else {
- swfdec_flash_security_allow_cross_domain (sec, url, callback,
- user_data);
- return;
- }
- break;
- case SWFDEC_SANDBOX_LOCAL_TRUSTED:
- status = 1;
- break;
- default:
- g_assert_not_reached ();
- status = 0;
- break;
- }
-
- callback (url, status, user_data);
-}
-
-void
-swfdec_flash_security_free_pending (SwfdecFlashSecurity *sec)
-{
- GSList *iter;
-
- for (iter = sec->allow_url_pending; iter != NULL; iter = iter->next) {
- SwfdecAllowURLPending *pending = iter->data;
- pending->callback (pending->url, -1, pending->user_data);
- swfdec_url_free (pending->url);
- g_free (pending);
- }
- g_slist_free (sec->allow_url_pending);
- sec->allow_url_pending = NULL;
-}
-
static void
swfdec_flash_security_dispose (GObject *object)
{
SwfdecFlashSecurity *sec = SWFDEC_FLASH_SECURITY (object);
- GSList *iter;
-
- g_assert (sec->allow_url_pending == NULL);
-
- for (iter = sec->policy_loaders; iter != NULL; iter = iter->next) {
- swfdec_policy_loader_free (iter->data);
- }
- g_slist_free (sec->policy_loaders);
- sec->policy_loaders = NULL;
-
- for (iter = sec->crossdomain_allowed; iter != NULL; iter = iter->next) {
- g_free (iter->data);
- }
- g_slist_free (sec->crossdomain_allowed);
- sec->crossdomain_allowed = NULL;
-
- for (iter = sec->crossdomain_denied; iter != NULL; iter = iter->next) {
- g_free (iter->data);
- }
- g_slist_free (sec->crossdomain_denied);
- sec->crossdomain_denied = NULL;
if (sec->url) {
swfdec_url_free (sec->url);
@@ -287,7 +69,6 @@ swfdec_flash_security_class_init (SwfdecFlashSecurityClass *klass)
object_class->dispose = swfdec_flash_security_dispose;
security_class->allow = swfdec_flash_security_allow;
- security_class->allow_url = swfdec_flash_security_allow_url;
}
static void
diff --git a/libswfdec/swfdec_flash_security.h b/libswfdec/swfdec_flash_security.h
index fcb2aaf..8ee888d 100644
--- a/libswfdec/swfdec_flash_security.h
+++ b/libswfdec/swfdec_flash_security.h
@@ -50,12 +50,6 @@ struct _SwfdecFlashSecurity
SwfdecPlayer *player;
SwfdecSandboxType sandbox; /* sandbox we are operating in */
SwfdecURL * url; /* url this security was loaded from */
-
- GSList * policy_loaders;
- GSList * crossdomain_allowed;
- GSList * crossdomain_denied;
-
- GSList * allow_url_pending;
};
struct _SwfdecFlashSecurityClass
diff --git a/libswfdec/swfdec_player.c b/libswfdec/swfdec_player.c
index 4ff88a8..af87562 100644
--- a/libswfdec/swfdec_player.c
+++ b/libswfdec/swfdec_player.c
@@ -877,6 +877,10 @@ swfdec_player_dispose (GObject *object)
g_hash_table_destroy (priv->registered_classes);
g_hash_table_destroy (priv->scripting_callbacks);
+ g_slist_foreach (priv->policy_files, (GFunc) g_object_unref, NULL);
+ g_slist_free (priv->policy_files);
+ priv->policy_files = NULL;
+
while (priv->roots)
swfdec_movie_destroy (priv->roots->data);
if (priv->resource) {
diff --git a/libswfdec/swfdec_player_internal.h b/libswfdec/swfdec_player_internal.h
index cbe49ec..09aaf33 100644
--- a/libswfdec/swfdec_player_internal.h
+++ b/libswfdec/swfdec_player_internal.h
@@ -133,6 +133,9 @@ struct _SwfdecPlayerPrivate
/* iterating */
GList * movies; /* list of all movies that want to be iterated */
SwfdecRingBuffer * actions[SWFDEC_PLAYER_N_ACTION_QUEUES]; /* all actions we've queued up so far */
+
+ /* security */
+ GSList * policy_files; /* list of SwfdecPolicyLoader objects, most recent first */
};
void swfdec_player_initialize (SwfdecPlayer * player,
diff --git a/libswfdec/swfdec_policy_file.c b/libswfdec/swfdec_policy_file.c
new file mode 100644
index 0000000..d0f3e90
--- /dev/null
+++ b/libswfdec/swfdec_policy_file.c
@@ -0,0 +1,257 @@
+/* Swfdec
+ * Copyright (C) 2007 Benjamin Otte <otte at gnome.org>
+ * 2007 Pekka Lampila <pekka.lampila at iki.fi>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301 USA
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include <string.h>
+
+#include "swfdec_policy_file.h"
+#include "swfdec_flash_security.h"
+#include "swfdec_resource.h"
+#include "swfdec_as_strings.h"
+#include "swfdec_debug.h"
+#include "swfdec_loader_internal.h"
+#include "swfdec_player_internal.h"
+#include "swfdec_xml.h"
+#include "swfdec_xml_node.h"
+
+/*** PARSING THE FILE ***/
+
+static void
+swfdec_policy_file_parse (SwfdecPolicyFile *file, const char *text)
+{
+ SwfdecXml *xml;
+ gint32 i, j;
+
+ g_return_if_fail (SWFDEC_IS_POLICY_FILE (file));
+ g_return_if_fail (text != NULL);
+
+ xml = swfdec_xml_new_no_properties (SWFDEC_AS_CONTEXT (file->player), text, TRUE);
+
+ if (xml == NULL) {
+ SWFDEC_ERROR ("failed to create an XML object for crossdomain policy");
+ return;
+ }
+
+ if (SWFDEC_XML_NODE (xml)->type != SWFDEC_XML_NODE_ELEMENT) {
+ SWFDEC_LOG ("empty crossdomain policy file");
+ return;
+ }
+
+ for (i = 0; i < swfdec_xml_node_num_children (SWFDEC_XML_NODE (xml)); i++) {
+ SwfdecXmlNode *node_cdp =
+ swfdec_xml_node_get_child (SWFDEC_XML_NODE (xml), i);
+
+ if (node_cdp->type != SWFDEC_XML_NODE_ELEMENT)
+ continue;
+
+ if (g_ascii_strcasecmp (node_cdp->name, "cross-domain-policy") != 0)
+ continue;
+
+ for (j = 0; j < swfdec_xml_node_num_children (node_cdp); j++) {
+ SwfdecXmlNode *node_aaf = swfdec_xml_node_get_child (node_cdp, j);
+ const char *value;
+ GPatternSpec *pattern;
+ char *value_lower;
+
+ if (node_aaf->type != SWFDEC_XML_NODE_ELEMENT)
+ continue;
+
+ if (g_ascii_strcasecmp (node_aaf->name, "allow-access-from") != 0)
+ continue;
+
+ // FIXME: secure attribute?
+
+ value = swfdec_xml_node_get_attribute (node_aaf, SWFDEC_AS_STR_domain);
+ if (value == NULL)
+ continue;
+
+ if (strchr (value, '?') != NULL) {
+ SWFDEC_WARNING ("'?' in allowed domain attribute for %s", value);
+ continue;
+ }
+
+ value_lower = g_ascii_strdown (value, -1);
+ pattern = g_pattern_spec_new (value_lower);
+ g_free (value_lower);
+
+ file->allowed_hosts = g_slist_prepend (file->allowed_hosts, pattern);
+ }
+ }
+}
+
+/*** SWFDEC_LOADER_TARGET ***/
+
+static SwfdecPlayer *
+swfdec_policy_file_target_get_player (SwfdecLoaderTarget *target)
+{
+ return SWFDEC_POLICY_FILE (target)->player;
+}
+
+static void
+swfdec_policy_file_target_error (SwfdecLoaderTarget *target,
+ SwfdecLoader *loader)
+{
+ SwfdecPolicyFile *file = SWFDEC_POLICY_FILE (target);
+
+ swfdec_loader_set_target (loader, NULL);
+ file->stream = NULL;
+}
+
+static void
+swfdec_policy_file_target_eof (SwfdecLoaderTarget *target,
+ SwfdecLoader *loader)
+{
+ SwfdecPolicyFile *file = SWFDEC_POLICY_FILE (target);
+ char *text;
+
+ swfdec_loader_set_target (loader, NULL);
+ file->stream = NULL;
+ text = swfdec_loader_get_text (loader, 8);
+
+ if (text == NULL) {
+ SWFDEC_ERROR ("couldn't get text from crossdomain policy file %s",
+ swfdec_url_get_url (file->load_url));
+ return;
+ }
+
+ swfdec_policy_file_parse (file, text);
+ g_free (text);
+}
+
+static void
+swfdec_policy_file_loader_target_init (SwfdecLoaderTargetInterface *iface)
+{
+ iface->get_player = swfdec_policy_file_target_get_player;
+ iface->eof = swfdec_policy_file_target_eof;
+ iface->error = swfdec_policy_file_target_error;
+}
+
+/*** SWFDEC_POLICY_FILE ***/
+
+G_DEFINE_TYPE_WITH_CODE (SwfdecPolicyFile, swfdec_policy_file, G_TYPE_OBJECT,
+ G_IMPLEMENT_INTERFACE (SWFDEC_TYPE_LOADER_TARGET, swfdec_policy_file_loader_target_init))
+
+static void
+swfdec_policy_file_dispose (GObject *object)
+{
+ SwfdecPolicyFile *file = SWFDEC_POLICY_FILE (object);
+
+ if (file->stream) {
+ swfdec_loader_set_target (file->stream, NULL);
+ g_object_unref (file->stream);
+ file->stream = NULL;
+ }
+ swfdec_url_free (file->load_url);
+ swfdec_url_free (file->url);
+
+ G_OBJECT_CLASS (swfdec_policy_file_parent_class)->dispose (object);
+}
+
+static void
+swfdec_policy_file_class_init (SwfdecPolicyFileClass *klass)
+{
+ GObjectClass *object_class = G_OBJECT_CLASS (klass);
+
+ object_class->dispose = swfdec_policy_file_dispose;
+}
+
+static void
+swfdec_policy_file_init (SwfdecPolicyFile *policy_file)
+{
+}
+
+SwfdecPolicyFile *
+swfdec_policy_file_new (SwfdecPlayer *player, const SwfdecURL *url)
+{
+ SwfdecPolicyFile *file;
+
+ g_return_val_if_fail (SWFDEC_IS_PLAYER (player), NULL);
+ g_return_val_if_fail (url != NULL, NULL);
+
+ file = g_object_new (SWFDEC_TYPE_POLICY_FILE, NULL);
+ file->player = player;
+ file->load_url = swfdec_url_copy (url);
+ file->url = swfdec_url_new_parent (url);
+ if (swfdec_url_has_protocol (url, "xmlsocket")) {
+ SWFDEC_FIXME ("implement xmlsocket: protocol");
+ } else {
+ file->stream = swfdec_loader_load (player->priv->resource->loader, url,
+ SWFDEC_LOADER_REQUEST_DEFAULT, NULL, 0);
+ swfdec_loader_set_target (file->stream, SWFDEC_LOADER_TARGET (file));
+ }
+ player->priv->policy_files = g_slist_prepend (player->priv->policy_files, file);
+
+ return file;
+}
+
+gboolean
+swfdec_policy_file_is_loading (SwfdecPolicyFile *file)
+{
+ g_return_val_if_fail (SWFDEC_IS_POLICY_FILE (file), FALSE);
+
+ return file->stream != NULL;
+}
+
+gboolean
+swfdec_policy_file_allow (SwfdecPolicyFile *file, const SwfdecURL *url)
+{
+ GSList *walk;
+ gsize len;
+ char *emantsoh;
+ const char *hostname;
+
+ g_return_val_if_fail (SWFDEC_IS_POLICY_FILE (file), FALSE);
+ g_return_val_if_fail (url != NULL, FALSE);
+
+ hostname = swfdec_url_get_host (url);
+ /* This is a hack that simplifies the following code. As the pattern can not
+ * contain any ?, the only pattern that matches the string "?" is the pattern
+ * "*"
+ */
+ if (hostname == NULL)
+ hostname = "?";
+ len = strlen (hostname);
+ emantsoh = g_utf8_strreverse (emantsoh, len);
+ for (walk = file->allowed_hosts; walk; walk = walk->next) {
+ GPatternSpec *pattern = walk->data;
+ if (g_pattern_match (pattern, len, hostname, emantsoh)) {
+ g_free (emantsoh);
+ return TRUE;
+ }
+ }
+ g_free (emantsoh);
+ return FALSE;
+}
+
+void
+swfdec_player_load_policy_file (SwfdecPlayer *player, const SwfdecURL *url)
+{
+ SWFDEC_FIXME ("implement");
+}
+
+void
+swfdec_player_check_policy_files (SwfdecPlayer *player,
+ SwfdecPolicyFileFunc func, gpointer data)
+{
+ SWFDEC_FIXME ("implement");
+}
diff --git a/libswfdec/swfdec_policy_file.h b/libswfdec/swfdec_policy_file.h
new file mode 100644
index 0000000..5342983
--- /dev/null
+++ b/libswfdec/swfdec_policy_file.h
@@ -0,0 +1,70 @@
+/* Swfdec
+ * Copyright (C) 2007 Benjamin Otte <otte at gnome.org>
+ * 2007 Pekka Lampila <pekka.lampila at iki.fi>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301 USA
+ */
+
+#ifndef _SWFDEC_FLASH_SECURITY_POLICY_H_
+#define _SWFDEC_FLASH_SECURITY_POLICY_H_
+
+#include <libswfdec/swfdec.h>
+#include <libswfdec/swfdec_player.h>
+
+G_BEGIN_DECLS
+
+typedef struct _SwfdecPolicyFile SwfdecPolicyFile;
+typedef struct _SwfdecPolicyFileClass SwfdecPolicyFileClass;
+typedef void (* SwfdecPolicyFileFunc) (SwfdecPlayer *player, gboolean allow, gpointer data);
+
+#define SWFDEC_TYPE_POLICY_FILE (swfdec_policy_file_get_type())
+#define SWFDEC_IS_POLICY_FILE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), SWFDEC_TYPE_POLICY_FILE))
+#define SWFDEC_IS_POLICY_FILE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), SWFDEC_TYPE_POLICY_FILE))
+#define SWFDEC_POLICY_FILE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), SWFDEC_TYPE_POLICY_FILE, SwfdecPolicyFile))
+#define SWFDEC_POLICY_FILE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), SWFDEC_TYPE_POLICY_FILE, SwfdecPolicyFileClass))
+#define SWFDEC_POLICY_FILE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), SWFDEC_TYPE_POLICY_FILE, SwfdecPolicyFileClass))
+
+struct _SwfdecPolicyFile {
+ GObject object;
+
+ SwfdecPlayer * player; /* player we're loaded from */
+ SwfdecURL * load_url; /* url we're loaded from */
+ SwfdecURL * url; /* parent url we check with */
+ SwfdecLoader * stream; /* stream we are loading or NULL if done loading */
+ GSList * allowed_hosts; /* list of GPatternSpec of the allowed hosts */
+};
+
+struct _SwfdecPolicyFileClass {
+ GObjectClass object_class;
+};
+
+GType swfdec_policy_file_get_type (void);
+
+SwfdecPolicyFile *swfdec_policy_file_new (SwfdecPlayer * player,
+ const SwfdecURL * url);
+gboolean swfdec_policy_file_is_loading (SwfdecPolicyFile * file);
+gboolean swfdec_policy_file_allow (SwfdecPolicyFile * file,
+ const SwfdecURL * url);
+
+void swfdec_player_load_policy_file (SwfdecPlayer * player,
+ const SwfdecURL * url);
+void swfdec_player_check_policy_files(SwfdecPlayer * player,
+ SwfdecPolicyFileFunc func,
+ gpointer data);
+
+
+G_END_DECLS
+#endif
diff --git a/libswfdec/swfdec_policy_loader.c b/libswfdec/swfdec_policy_loader.c
deleted file mode 100644
index ae722b6..0000000
--- a/libswfdec/swfdec_policy_loader.c
+++ /dev/null
@@ -1,255 +0,0 @@
-/* Swfdec
- * Copyright (C) 2007 Benjamin Otte <otte at gnome.org>
- * 2007 Pekka Lampila <pekka.lampila at iki.fi>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor,
- * Boston, MA 02110-1301 USA
- */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include <string.h>
-
-#include "swfdec_policy_loader.h"
-#include "swfdec_flash_security.h"
-#include "swfdec_resource.h"
-#include "swfdec_as_strings.h"
-#include "swfdec_debug.h"
-#include "swfdec_loader_internal.h"
-#include "swfdec_player_internal.h"
-#include "swfdec_xml.h"
-#include "swfdec_xml_node.h"
-
-/*** SWFDEC_STREAM_TARGET ***/
-
-static SwfdecPlayer *
-swfdec_policy_stream_target_get_player (SwfdecStreamTarget *target)
-{
- return SWFDEC_POLICY_LOADER (target)->sec->player;
-}
-
-static void
-swfdec_policy_stream_target_error (SwfdecStreamTarget *target,
- SwfdecStream *stream)
-{
- SwfdecPolicyLoader *policy_loader = SWFDEC_POLICY_LOADER (target);
-
- policy_loader->func (policy_loader, FALSE);
-}
-
-static gboolean
-swfdec_policy_loader_check (SwfdecAsContext *context, const char *text,
- const char *host)
-{
- SwfdecXml *xml;
- gint32 i, j;
- char *host_lower;
-
- g_return_val_if_fail (SWFDEC_IS_AS_CONTEXT (context), FALSE);
- g_return_val_if_fail (text != NULL, FALSE);
-
- xml = swfdec_xml_new_no_properties (context, text, TRUE);
-
- if (xml == NULL) {
- SWFDEC_ERROR ("failed to create an XML object for crossdomain policy");
- return FALSE;
- }
-
- if (SWFDEC_XML_NODE (xml)->type != SWFDEC_XML_NODE_ELEMENT) {
- SWFDEC_LOG ("empty crossdomain policy file");
- return FALSE;
- }
-
- if (host != NULL) {
- host_lower = g_ascii_strdown (host, -1);
- } else {
- host_lower = NULL;
- }
-
- for (i = 0; i < swfdec_xml_node_num_children (SWFDEC_XML_NODE (xml)); i++) {
- SwfdecXmlNode *node_cdp =
- swfdec_xml_node_get_child (SWFDEC_XML_NODE (xml), i);
-
- if (node_cdp->type != SWFDEC_XML_NODE_ELEMENT)
- continue;
-
- if (g_ascii_strcasecmp (node_cdp->name, "cross-domain-policy") != 0)
- continue;
-
- for (j = 0; j < swfdec_xml_node_num_children (node_cdp); j++) {
- SwfdecXmlNode *node_aaf = swfdec_xml_node_get_child (node_cdp, j);
- const char *value;
- GPatternSpec *pattern;
- char *value_lower;
-
- if (node_aaf->type != SWFDEC_XML_NODE_ELEMENT)
- continue;
-
- if (g_ascii_strcasecmp (node_aaf->name, "allow-access-from") != 0)
- continue;
-
- // FIXME: secure attribute?
-
- value = swfdec_xml_node_get_attribute (node_aaf, SWFDEC_AS_STR_domain);
- if (value == NULL)
- continue;
-
- if (host != NULL) {
- // GPatternSpec uses ? as a wildcard character, but we won't
- // And there can't be a host that has ? character
- if (strchr (value, '?') != NULL)
- continue;
-
- value_lower = g_ascii_strdown (value, -1);
- pattern = g_pattern_spec_new (value_lower);
- g_free (value_lower);
-
- if (g_pattern_match_string (pattern, host_lower)) {
- g_free (host_lower);
- g_pattern_spec_free (pattern);
- return TRUE;
- }
-
- g_pattern_spec_free (pattern);
- } else {
- // in case we don't have a host name, only match asterisks
- if (value[strspn (value, "*")] == '\0')
- return TRUE;
- }
- }
- }
-
- g_free (host_lower);
-
- return FALSE;
-}
-
-static void
-swfdec_policy_stream_target_close (SwfdecStreamTarget *target,
- SwfdecStream *stream)
-{
- SwfdecPolicyLoader *policy_loader = SWFDEC_POLICY_LOADER (target);
- gboolean allow;
- char *text;
-
- text = swfdec_loader_get_text (policy_loader->loader, 8);
-
- if (text == NULL) {
- SWFDEC_ERROR ("couldn't get text from crossdomain policy");
- allow = FALSE;
- } else {
- allow = swfdec_policy_loader_check (
- SWFDEC_AS_CONTEXT (policy_loader->sec->player), text,
- swfdec_url_get_host (policy_loader->sec->url));
- }
-
- g_free (text);
-
- SWFDEC_LOG ("crossdomain policy %s access from %s to %s",
- (allow ? "allows" : "doesn't allow"),
- swfdec_url_get_host (policy_loader->sec->url), policy_loader->host);
-
- policy_loader->func (policy_loader, allow);
-}
-
-static void
-swfdec_policy_loader_stream_target_init (SwfdecStreamTargetInterface *iface)
-{
- iface->get_player = swfdec_policy_stream_target_get_player;
- iface->close = swfdec_policy_stream_target_close;
- iface->error = swfdec_policy_stream_target_error;
-}
-
-/*** SWFDEC_POLICY_LOADER ***/
-
-G_DEFINE_TYPE_WITH_CODE (SwfdecPolicyLoader, swfdec_policy_loader, G_TYPE_OBJECT,
- G_IMPLEMENT_INTERFACE (SWFDEC_TYPE_STREAM_TARGET, swfdec_policy_loader_stream_target_init))
-
-static void
-swfdec_policy_loader_dispose (GObject *object)
-{
- SwfdecPolicyLoader *policy_loader = SWFDEC_POLICY_LOADER (object);
-
- g_assert (policy_loader->loader);
- swfdec_stream_set_target (SWFDEC_STREAM (policy_loader->loader), NULL);
- g_object_unref (policy_loader->loader);
- policy_loader->loader = NULL;
-
- g_assert (policy_loader->host);
- g_free (policy_loader->host);
-
- G_OBJECT_CLASS (swfdec_policy_loader_parent_class)->dispose (object);
-}
-
-static void
-swfdec_policy_loader_class_init (SwfdecPolicyLoaderClass *klass)
-{
- GObjectClass *object_class = G_OBJECT_CLASS (klass);
-
- object_class->dispose = swfdec_policy_loader_dispose;
-}
-
-static void
-swfdec_policy_loader_init (SwfdecPolicyLoader *policy_loader)
-{
-}
-
-SwfdecPolicyLoader *
-swfdec_policy_loader_new (SwfdecFlashSecurity *sec, const char *host,
- SwfdecPolicyLoaderFunc func)
-{
- SwfdecPolicyLoader *policy_loader;
- SwfdecURL *url;
- char *url_str;
-
- g_return_val_if_fail (SWFDEC_IS_FLASH_SECURITY (sec), NULL);
- g_return_val_if_fail (host != NULL, NULL);
- g_return_val_if_fail (func != NULL, NULL);
-
- policy_loader = SWFDEC_POLICY_LOADER (g_object_new (
- SWFDEC_TYPE_POLICY_LOADER, NULL));
-
- url_str = g_strdup_printf ("http://%s/crossdomain.xml", host);
- url = swfdec_url_new (url_str);
- g_free (url_str);
- policy_loader->loader = swfdec_loader_load (sec->player->priv->resource->loader,
- url, SWFDEC_LOADER_REQUEST_DEFAULT, NULL, 0);
- swfdec_url_free (url);
-
- if (!policy_loader->loader) {
- g_free (policy_loader);
- return NULL;
- }
-
- policy_loader->sec = sec;
- policy_loader->host = g_strdup (host);
- policy_loader->func = func;
-
- swfdec_stream_set_target (SWFDEC_STREAM (policy_loader->loader),
- SWFDEC_STREAM_TARGET (policy_loader));
- swfdec_loader_set_data_type (policy_loader->loader, SWFDEC_LOADER_DATA_XML);
-
- return policy_loader;
-}
-
-void
-swfdec_policy_loader_free (SwfdecPolicyLoader *policy_loader)
-{
- g_return_if_fail (SWFDEC_IS_POLICY_LOADER (policy_loader));
-
- g_object_unref (policy_loader);
-}
diff --git a/libswfdec/swfdec_policy_loader.h b/libswfdec/swfdec_policy_loader.h
deleted file mode 100644
index 525f48e..0000000
--- a/libswfdec/swfdec_policy_loader.h
+++ /dev/null
@@ -1,63 +0,0 @@
-/* Swfdec
- * Copyright (C) 2007 Benjamin Otte <otte at gnome.org>
- * 2007 Pekka Lampila <pekka.lampila at iki.fi>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor,
- * Boston, MA 02110-1301 USA
- */
-
-#ifndef _SWFDEC_FLASH_SECURITY_POLICY_H_
-#define _SWFDEC_FLASH_SECURITY_POLICY_H_
-
-#include <libswfdec/swfdec.h>
-#include <libswfdec/swfdec_as_object.h>
-#include <libswfdec/swfdec_flash_security.h>
-
-G_BEGIN_DECLS
-
-typedef struct _SwfdecPolicyLoader SwfdecPolicyLoader;
-typedef struct _SwfdecPolicyLoaderClass SwfdecPolicyLoaderClass;
-typedef void (* SwfdecPolicyLoaderFunc) (SwfdecPolicyLoader *policy_loader, gboolean allow);
-
-#define SWFDEC_TYPE_POLICY_LOADER (swfdec_policy_loader_get_type())
-#define SWFDEC_IS_POLICY_LOADER(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), SWFDEC_TYPE_POLICY_LOADER))
-#define SWFDEC_IS_POLICY_LOADER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), SWFDEC_TYPE_POLICY_LOADER))
-#define SWFDEC_POLICY_LOADER(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), SWFDEC_TYPE_POLICY_LOADER, SwfdecPolicyLoader))
-#define SWFDEC_POLICY_LOADER_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), SWFDEC_TYPE_POLICY_LOADER, SwfdecPolicyLoaderClass))
-#define SWFDEC_POLICY_LOADER_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), SWFDEC_TYPE_POLICY_LOADER, SwfdecPolicyLoaderClass))
-
-struct _SwfdecPolicyLoader {
- GObject object;
-
- SwfdecLoader * loader;
-
- SwfdecFlashSecurity * sec;
- char * host;
- SwfdecPolicyLoaderFunc func;
-};
-
-struct _SwfdecPolicyLoaderClass {
- GObjectClass object_class;
-};
-
-GType swfdec_policy_loader_get_type (void);
-
-SwfdecPolicyLoader *swfdec_policy_loader_new (SwfdecFlashSecurity * sec,
- const char * host,
- SwfdecPolicyLoaderFunc func);
-void swfdec_policy_loader_free (SwfdecPolicyLoader * policy_loader);
-
-G_END_DECLS
-#endif
diff --git a/libswfdec/swfdec_resource_request.c b/libswfdec/swfdec_resource_request.c
index 8c3ddbf..e367993 100644
--- a/libswfdec/swfdec_resource_request.c
+++ b/libswfdec/swfdec_resource_request.c
@@ -114,8 +114,7 @@ swfdec_player_request_resource_now (SwfdecPlayer *player,
/* create absolute url first */
absolute = swfdec_url_new_relative (swfdec_loader_get_url (player->priv->resource->loader), url);
- swfdec_security_allow_url (security, absolute,
- swfdec_player_request_resource_allow_callback, data);
+ swfdec_player_request_resource_allow_callback (absolute, TRUE, data);
swfdec_url_free (absolute);
}
diff --git a/libswfdec/swfdec_security.c b/libswfdec/swfdec_security.c
index a41f510..ae431a0 100644
--- a/libswfdec/swfdec_security.c
+++ b/libswfdec/swfdec_security.c
@@ -61,26 +61,3 @@ swfdec_security_allow (SwfdecSecurity *guard, SwfdecSecurity *key)
return klass->allow (guard, key);
}
-/**
- * swfdec_security_allow_url:
- * @guard: security that is in effect
- * @url: URL that should be accessed
- *
- * Asks @guard to check if the given @url may be accessed.
- *
- * Returns: %TRUE if @url may be accessed.
- **/
-void
-swfdec_security_allow_url (SwfdecSecurity *guard, const SwfdecURL *url,
- SwfdecURLAllowFunc callback, gpointer user_data)
-{
- SwfdecSecurityClass *klass;
-
- g_assert (SWFDEC_IS_SECURITY (guard));
- g_assert (url != NULL);
-
- klass = SWFDEC_SECURITY_GET_CLASS (guard);
- g_assert (klass->allow_url);
- klass->allow_url (guard, url, callback, user_data);
-}
-
diff --git a/libswfdec/swfdec_security.h b/libswfdec/swfdec_security.h
index 2933b44..cdc0717 100644
--- a/libswfdec/swfdec_security.h
+++ b/libswfdec/swfdec_security.h
@@ -47,21 +47,13 @@ struct _SwfdecSecurityClass
GObjectClass object_class;
gboolean (* allow) (SwfdecSecurity * guard,
- SwfdecSecurity * from);
- void (* allow_url) (SwfdecSecurity * guard,
- const SwfdecURL * url,
- SwfdecURLAllowFunc callback,
- gpointer user_data);
+ SwfdecSecurity * key);
};
GType swfdec_security_get_type (void);
gboolean swfdec_security_allow (SwfdecSecurity * guard,
SwfdecSecurity * key);
-void swfdec_security_allow_url (SwfdecSecurity * guard,
- const SwfdecURL * url,
- SwfdecURLAllowFunc callback,
- gpointer user_data);
G_END_DECLS
diff --git a/libswfdec/swfdec_security_allow.c b/libswfdec/swfdec_security_allow.c
index e60a949..fb678b4 100644
--- a/libswfdec/swfdec_security_allow.c
+++ b/libswfdec/swfdec_security_allow.c
@@ -35,19 +35,11 @@ swfdec_security_allow_allow (SwfdecSecurity *guard, SwfdecSecurity *key)
}
static void
-swfdec_security_allow_allow_url (SwfdecSecurity *guard, const SwfdecURL *url,
- SwfdecURLAllowFunc callback, gpointer user_data)
-{
- callback (url, TRUE, user_data);
-}
-
-static void
swfdec_security_allow_class_init (SwfdecSecurityAllowClass *klass)
{
SwfdecSecurityClass *security_class = SWFDEC_SECURITY_CLASS (klass);
security_class->allow = swfdec_security_allow_allow;
- security_class->allow_url = swfdec_security_allow_allow_url;
}
static void
commit 39778f967e2829a6e9552c2e68cff17d0814b86a
Author: Benjamin Otte <otte at gnome.org>
Date: Tue Jan 15 10:52:03 2008 +0100
add more functions to SwfdecURL (untested)
These functions are needed by policy file handling
diff --git a/libswfdec/swfdec_url.c b/libswfdec/swfdec_url.c
index 3d57c54..6cdb54f 100644
--- a/libswfdec/swfdec_url.c
+++ b/libswfdec/swfdec_url.c
@@ -50,9 +50,9 @@
struct _SwfdecURL {
char * url; /* the complete url */
- char * protocol; /* http, file, rtmp, ... */
- char * host; /* can be NULL for files */
- guint port; /* can be NULL */
+ char * protocol; /* lowercase, http, file, rtmp, ... */
+ char * host; /* lowercase, can be NULL for files */
+ guint port; /* can be 0 */
char * path; /* can be NULL for root path */
char * query; /* can be NULL */
};
@@ -111,16 +111,16 @@ swfdec_url_new (const char *string)
string = s + 3;
s = strchr (string, '/');
if (s == NULL) {
- url->host = g_strdup (string);
+ url->host = g_ascii_strdown (string, -1);
return url;
}
if (s != string) {
char *colon = swfdec_memrchr (string, ':', s - string);
if (colon) {
url->port = strtoul (colon + 1, &colon, 10);
- url->host = g_strndup (string, colon - string);
+ url->host = g_ascii_strdown (string, colon - string);
} else {
- url->host = g_strndup (string, s - string);
+ url->host = g_ascii_strdown (string, s - string);
}
}
string = s + 1;
@@ -137,6 +137,63 @@ swfdec_url_new (const char *string)
}
/**
+ * swfdec_url_new_components:
+ * @protocol: protocol to use
+ * @hostname: hostname or IP address or %NULL
+ * @port: port number or 0. Must be 0 if no hostname is given
+ * @path: a path or %NULL
+ * @query: the query string or %NULL
+ *
+ * Creates a new URL from the given components.
+ *
+ * Returns: a new url pointing to the url from the given components
+ **/
+SwfdecURL *
+swfdec_url_new_components (const char *protocol, const char *hostname,
+ guint port, const char *path, const char *query)
+{
+ GString *url;
+ SwfdecURL *result;
+
+ g_return_val_if_fail (protocol != NULL, NULL);
+ g_return_val_if_fail (hostname != NULL || port == 0, NULL);
+ g_return_val_if_fail (port < 65536, NULL);
+
+ url = g_string_new (protocol);
+ g_string_append (url, "://");
+ if (hostname) {
+ g_string_append (url, hostname);
+ if (port) {
+ g_string_append_printf (url, ":%u", port);
+ }
+ }
+ g_string_append (url, "/");
+ if (path)
+ g_string_append (url, path);
+ if (query) {
+ g_string_append (url, "?");
+ g_string_append (url, query);
+ }
+ result = swfdec_url_new (url->str);
+ g_string_free (url, TRUE);
+ return result;
+}
+
+/**
+ * swfdec_url_new_parent:
+ * @url: a #SwfdecURL
+ *
+ * Creates a new url that is the parent of @url.
+ *
+ * Returns: a new url pointing to the parent of @url.
+ **/
+SwfdecURL *
+swfdec_url_new_parent (const SwfdecURL *url)
+{
+ return swfdec_url_new_relative (url, "");
+}
+
+/**
* swfdec_url_new_relative:
* @url: a #SwfdecURL
* @string: a relative or absolute URL path
@@ -206,6 +263,7 @@ swfdec_url_copy (const SwfdecURL *url)
copy->url = g_strdup (url->url);
copy->protocol = g_strdup (url->protocol);
copy->host = g_strdup (url->host);
+ copy->port = url->port;
copy->path = g_strdup (url->path);
copy->query = g_strdup (url->query);
@@ -288,7 +346,7 @@ swfdec_url_has_protocol (const SwfdecURL *url, const char *protocol)
* swfdec_url_get_host:
* @url: a #SwfdecURL
*
- * Gets the host for @url.
+ * Gets the host for @url as a lower case string.
*
* Returns: the host or %NULL if none (typically for file URLs).
**/
@@ -354,6 +412,47 @@ swfdec_url_get_query (const SwfdecURL *url)
}
/**
+ * swfdec_url_is_parent:
+ * @parent: the supposed parent url
+ * @child: the supposed child url
+ *
+ * Checks if the given @parent url is a parent url of the given @child url. The
+ * algorithm used is the same as checking policy files if hey apply. If @parent
+ * equals @child, %TRUE is returned. This function does not compare query
+ * strings.
+ *
+ * Returns: %TRUE if @parent is a parent of @child, %FALSE otherwise.
+ **/
+gboolean
+swfdec_url_is_parent (const SwfdecURL *parent, const SwfdecURL *child)
+{
+ gsize len;
+
+ g_return_val_if_fail (parent != NULL, FALSE);
+ g_return_val_if_fail (child != NULL, FALSE);
+
+ if (!g_str_equal (parent->protocol, child->protocol))
+ return FALSE;
+ if (parent->host == NULL) {
+ if (child->host != NULL)
+ return FALSE;
+ } else {
+ if (child->host == NULL || !g_str_equal (parent->host, child->host))
+ return FALSE;
+ }
+ if (parent->port != child->port)
+ return FALSE;
+ if (parent->path == NULL)
+ return TRUE;
+ if (child->path == NULL)
+ return TRUE;
+ len = strlen (parent->path);
+ if (strncmp (parent->path, child->path, len) != 0)
+ return FALSE;
+ return child->path[len] == '\0' || child->path[len] == '/';
+}
+
+/**
* swfdec_url_is_local:
* @url: the url to check
*
diff --git a/libswfdec/swfdec_url.h b/libswfdec/swfdec_url.h
index 3ac0b88..5eaa306 100644
--- a/libswfdec/swfdec_url.h
+++ b/libswfdec/swfdec_url.h
@@ -30,6 +30,12 @@ typedef struct _SwfdecURL SwfdecURL;
GType swfdec_url_get_type (void) G_GNUC_CONST;
SwfdecURL * swfdec_url_new (const char * string);
+SwfdecURL * swfdec_url_new_components (const char * protocol,
+ const char * hostname,
+ guint port,
+ const char * path,
+ const char * query);
+SwfdecURL * swfdec_url_new_parent (const SwfdecURL * url);
SwfdecURL * swfdec_url_new_relative (const SwfdecURL * url,
const char * string);
SwfdecURL * swfdec_url_copy (const SwfdecURL * url);
@@ -45,6 +51,8 @@ const char * swfdec_url_get_query (const SwfdecURL * url);
gboolean swfdec_url_has_protocol (const SwfdecURL * url,
const char * protocol);
+gboolean swfdec_url_is_parent (const SwfdecURL * parent,
+ const SwfdecURL * child);
gboolean swfdec_url_is_local (const SwfdecURL * url);
commit be36299778c70baf6d7e84260d95bd6e69b79076
Author: Benjamin Otte <otte at gnome.org>
Date: Tue Jan 15 10:51:40 2008 +0100
g_object_notify next-event after a call to advance()
diff --git a/libswfdec/swfdec_player.c b/libswfdec/swfdec_player.c
index feb0638..4ff88a8 100644
--- a/libswfdec/swfdec_player.c
+++ b/libswfdec/swfdec_player.c
@@ -1399,6 +1399,7 @@ swfdec_player_do_advance (SwfdecPlayer *player, gulong msecs, guint audio_sample
}
g_assert (audio_samples == 0);
+ g_object_notify (G_OBJECT (player), "next-event");
swfdec_player_unlock (player);
}
@@ -1578,7 +1579,7 @@ swfdec_player_class_init (SwfdecPlayerClass *klass)
g_param_spec_enum ("mouse-cursor", "mouse cursor", "how the mouse pointer should be presented",
SWFDEC_TYPE_MOUSE_CURSOR, SWFDEC_MOUSE_CURSOR_NONE, G_PARAM_READABLE));
g_object_class_install_property (object_class, PROP_NEXT_EVENT,
- g_param_spec_long ("next-event", "next event", "how many milliseconds until the next event or 0 when no event pending",
+ g_param_spec_long ("next-event", "next event", "how many milliseconds until the next event or -1 when no event pending",
-1, G_MAXLONG, -1, G_PARAM_READABLE));
g_object_class_install_property (object_class, PROP_CACHE_SIZE,
g_param_spec_uint ("cache-size", "cache size", "maximum cache size in bytes",
commit b018fc217e22901b562d51b3c9b808b9a0f6f4a2
Author: Benjamin Otte <otte at gnome.org>
Date: Sat Jan 12 00:23:51 2008 +0100
parse ports seperately
diff --git a/libswfdec/swfdec_url.c b/libswfdec/swfdec_url.c
index fe9ca0a..3d57c54 100644
--- a/libswfdec/swfdec_url.c
+++ b/libswfdec/swfdec_url.c
@@ -20,7 +20,10 @@
#ifdef HAVE_CONFIG_H
#include "config.h"
#endif
+
+#include <stdlib.h>
#include <string.h>
+
#include "swfdec_url.h"
#include "swfdec_debug.h"
@@ -49,6 +52,7 @@ struct _SwfdecURL {
char * url; /* the complete url */
char * protocol; /* http, file, rtmp, ... */
char * host; /* can be NULL for files */
+ guint port; /* can be NULL */
char * path; /* can be NULL for root path */
char * query; /* can be NULL */
};
@@ -65,6 +69,19 @@ swfdec_url_get_type (void)
return type;
}
+static void *
+swfdec_memrchr (const void *s, int c, size_t n)
+{
+ void *cur, *next;
+
+ cur = memchr (s, c, n);
+ if (cur == NULL)
+ return NULL;
+ while ((next = memchr (cur, c, n)))
+ cur = next;
+ return cur;
+}
+
/**
* swfdec_url_new:
* @string: a full-qualified URL encoded in UTF-8
@@ -81,6 +98,7 @@ swfdec_url_new (const char *string)
g_return_val_if_fail (string != NULL, NULL);
+ /* FIXME: error checking? */
SWFDEC_DEBUG ("new url: %s", string);
url = g_slice_new0 (SwfdecURL);
url->url = g_strdup (string);
@@ -96,8 +114,15 @@ swfdec_url_new (const char *string)
url->host = g_strdup (string);
return url;
}
- if (s != string)
- url->host = g_strndup (string, s - string);
+ if (s != string) {
+ char *colon = swfdec_memrchr (string, ':', s - string);
+ if (colon) {
+ url->port = strtoul (colon + 1, &colon, 10);
+ url->host = g_strndup (string, colon - string);
+ } else {
+ url->host = g_strndup (string, s - string);
+ }
+ }
string = s + 1;
s = strchr (string, '?');
if (s == NULL) {
@@ -263,8 +288,7 @@ swfdec_url_has_protocol (const SwfdecURL *url, const char *protocol)
* swfdec_url_get_host:
* @url: a #SwfdecURL
*
- * Gets the host for @url. If the host includes a portnumber, it will be present
- * in the returned string.
+ * Gets the host for @url.
*
* Returns: the host or %NULL if none (typically for file URLs).
**/
@@ -277,6 +301,23 @@ swfdec_url_get_host (const SwfdecURL *url)
}
/**
+ * swfdec_url_get_port:
+ * @url: a #SwfdecURL
+ *
+ * Gets the port number specified by the given @url. If the @url does not
+ * specify a port number, 0 will be returned.
+ *
+ * Returns: the specified port or 0 if none was given.
+ **/
+guint
+swfdec_url_get_port (const SwfdecURL *url)
+{
+ g_return_val_if_fail (url != NULL, 0);
+
+ return url->port;
+}
+
+/**
* swfdec_url_get_path:
* @url: a #SwfdecURL
*
diff --git a/libswfdec/swfdec_url.h b/libswfdec/swfdec_url.h
index 7a94039..3ac0b88 100644
--- a/libswfdec/swfdec_url.h
+++ b/libswfdec/swfdec_url.h
@@ -38,6 +38,7 @@ void swfdec_url_free (SwfdecURL * url);
const char * swfdec_url_get_url (const SwfdecURL * url);
const char * swfdec_url_get_protocol (const SwfdecURL * url);
const char * swfdec_url_get_host (const SwfdecURL * url);
+guint swfdec_url_get_port (const SwfdecURL * url);
const char * swfdec_url_get_path (const SwfdecURL * url);
const char * swfdec_url_get_query (const SwfdecURL * url);
commit 506c18b1eb4111743480be75fa30c7a230742070
Author: Benjamin Otte <otte at gnome.org>
Date: Fri Jan 11 13:56:38 2008 +0100
get rid of swfdec_movie_load_variables() API and call it directly
diff --git a/libswfdec/swfdec_as_interpret.c b/libswfdec/swfdec_as_interpret.c
index 24ed902..24a822c 100644
--- a/libswfdec/swfdec_as_interpret.c
+++ b/libswfdec/swfdec_as_interpret.c
@@ -39,6 +39,7 @@
#include <math.h>
#include <string.h>
#include "swfdec_decoder.h"
+#include "swfdec_load_object.h"
#include "swfdec_movie.h"
#include "swfdec_player_internal.h"
#include "swfdec_sprite.h"
@@ -1161,6 +1162,18 @@ swfdec_action_get_url (SwfdecAsContext *cx, guint action, const guint8 *data, gu
}
static void
+swfdec_as_interpret_load_variables_on_finish (SwfdecAsObject *target,
+ const char *text)
+{
+ if (text != NULL)
+ swfdec_as_object_decode (target, text);
+
+ // only call onData for sprite movies
+ // FIXME: is it called even when loading fails?
+ swfdec_movie_queue_script (SWFDEC_MOVIE (target), SWFDEC_EVENT_DATA);
+}
+
+static void
swfdec_action_get_url2 (SwfdecAsContext *cx, guint action, const guint8 *data, guint len)
{
const char *target, *url;
@@ -1193,8 +1206,10 @@ swfdec_action_get_url2 (SwfdecAsContext *cx, guint action, const guint8 *data, g
SwfdecMovie *movie;
movie = swfdec_player_get_movie_from_string (SWFDEC_PLAYER (cx), target);
- if (movie != NULL)
- swfdec_movie_load_variables (movie, url, method, NULL);
+ if (movie != NULL) {
+ swfdec_load_object_new (SWFDEC_AS_OBJECT (movie), url, method, NULL, NULL,
+ swfdec_as_interpret_load_variables_on_finish);
+ }
} else if (internal) {
swfdec_resource_load (SWFDEC_PLAYER (cx), target, url, method, NULL, NULL);
} else {
diff --git a/libswfdec/swfdec_movie.c b/libswfdec/swfdec_movie.c
index 547155b..90147a3 100644
--- a/libswfdec/swfdec_movie.c
+++ b/libswfdec/swfdec_movie.c
@@ -1724,35 +1724,6 @@ swfdec_movie_duplicate (SwfdecMovie *movie, const char *name, int depth)
return copy;
}
-static void
-swfdec_movie_load_variables_on_finish (SwfdecAsObject *target,
- const char *text)
-{
- if (text != NULL)
- swfdec_as_object_decode (target, text);
-
- // only call onData for sprite movies
- // FIXME: is it called even when loading fails?
- if (target->context->version >= 6 && SWFDEC_IS_SPRITE_MOVIE (target))
- swfdec_as_object_call (target, SWFDEC_AS_STR_onData, 0, NULL, NULL);
-}
-
-void
-swfdec_movie_load_variables (SwfdecMovie *movie, const char *url,
- SwfdecLoaderRequest request, SwfdecBuffer *data)
-{
- g_return_if_fail (SWFDEC_IS_MOVIE (movie));
- g_return_if_fail (url != NULL);
-
- if (request != SWFDEC_LOADER_REQUEST_DEFAULT) {
- SWFDEC_FIXME ("loadVariables: Different request-modes not supported");
- return;
- }
-
- swfdec_load_object_new (SWFDEC_AS_OBJECT (movie), url, request, data, NULL,
- swfdec_movie_load_variables_on_finish);
-}
-
char *
swfdec_movie_get_path (SwfdecMovie *movie, gboolean dot)
{
diff --git a/libswfdec/swfdec_movie.h b/libswfdec/swfdec_movie.h
index 6b5b001..623707f 100644
--- a/libswfdec/swfdec_movie.h
+++ b/libswfdec/swfdec_movie.h
@@ -278,10 +278,6 @@ void swfdec_movie_execute (SwfdecMovie * movie,
SwfdecEventType condition);
void swfdec_movie_queue_script (SwfdecMovie * movie,
SwfdecEventType condition);
-void swfdec_movie_load_variables (SwfdecMovie * movie,
- const char * url,
- SwfdecLoaderRequest request,
- SwfdecBuffer * data);
int swfdec_movie_compare_depths (gconstpointer a,
gconstpointer b);
commit ddcdff6d0156b0de3002572e905577a0ccf42f2c
Author: Benjamin Otte <otte at gnome.org>
Date: Thu Jan 10 19:51:13 2008 +0100
use a function list for the player's rooted objects
diff --git a/libswfdec/swfdec_load_object.c b/libswfdec/swfdec_load_object.c
index 72c1ceb..a7d3fd2 100644
--- a/libswfdec/swfdec_load_object.c
+++ b/libswfdec/swfdec_load_object.c
@@ -69,8 +69,8 @@ swfdec_load_object_stream_target_error (SwfdecStreamTarget *target,
load_object->finish (load_object->target, NULL);
/* unroot */
- swfdec_player_unroot_object (SWFDEC_PLAYER (
- SWFDEC_AS_OBJECT (load_object)->context), G_OBJECT (load_object));
+ swfdec_player_unroot (SWFDEC_PLAYER (
+ SWFDEC_AS_OBJECT (load_object)->context), load_object);
}
static void
@@ -99,8 +99,8 @@ swfdec_load_object_stream_target_close (SwfdecStreamTarget *target,
}
/* unroot */
- swfdec_player_unroot_object (SWFDEC_PLAYER (
- SWFDEC_AS_OBJECT (load_object)->context), G_OBJECT (load_object));
+ swfdec_player_unroot (SWFDEC_PLAYER (
+ SWFDEC_AS_OBJECT (load_object)->context), load_object);
}
static void
@@ -225,8 +225,7 @@ swfdec_load_object_new (SwfdecAsObject *target, const char *url,
if (!swfdec_load_object_load (load_object, url, request, data))
return NULL;
- swfdec_player_root_object (SWFDEC_PLAYER (target->context),
- G_OBJECT (load_object));
+ swfdec_player_root (SWFDEC_PLAYER (target->context), load_object, (GFunc) swfdec_as_object_mark);
return SWFDEC_AS_OBJECT (load_object);
}
diff --git a/libswfdec/swfdec_player.c b/libswfdec/swfdec_player.c
index 2e2b728..feb0638 100644
--- a/libswfdec/swfdec_player.c
+++ b/libswfdec/swfdec_player.c
@@ -885,9 +885,8 @@ swfdec_player_dispose (GObject *object)
g_object_unref (priv->resource);
priv->resource = NULL;
}
- while (priv->rooted_objects)
- swfdec_player_unroot_object (player, priv->rooted_objects->data);
+ swfdec_function_list_clear (&priv->rooted);
/* we do this here so references to GC'd objects get freed */
G_OBJECT_CLASS (swfdec_player_parent_class)->dispose (object);
@@ -1515,16 +1514,6 @@ swfdec_player_mark_string_object (gpointer key, gpointer value, gpointer data)
}
static void
-swfdec_player_mark_rooted_object (gpointer object, gpointer unused)
-{
- if (SWFDEC_IS_RESOURCE (object)) {
- swfdec_resource_mark (object);
- } else if (SWFDEC_IS_AS_OBJECT (object)) {
- swfdec_as_object_mark (object);
- }
-}
-
-static void
swfdec_player_mark (SwfdecAsContext *context)
{
SwfdecPlayer *player = SWFDEC_PLAYER (context);
@@ -1536,7 +1525,7 @@ swfdec_player_mark (SwfdecAsContext *context)
swfdec_as_object_mark (priv->Video);
g_list_foreach (priv->roots, (GFunc) swfdec_as_object_mark, NULL);
g_list_foreach (priv->intervals, (GFunc) swfdec_as_object_mark, NULL);
- g_list_foreach (priv->rooted_objects, swfdec_player_mark_rooted_object, NULL);
+ swfdec_function_list_execute (&priv->rooted, player);
SWFDEC_AS_CONTEXT_CLASS (swfdec_player_parent_class)->mark (context);
}
@@ -2101,68 +2090,6 @@ swfdec_player_set_export_class (SwfdecPlayer *player, const char *name, SwfdecAs
}
}
-/* FIXME:
- * I don't like the idea of rooting arbitrary objects very much. And so far,
- * this API is only necessary for the objects used for loading data. So it seems
- * like a good idea to revisit the refcounting and GCing of resources.
- */
-void
-swfdec_player_root_object (SwfdecPlayer *player, GObject *object)
-{
- SwfdecPlayerPrivate *priv;
-
- g_return_if_fail (SWFDEC_IS_PLAYER (player));
- g_return_if_fail (G_IS_OBJECT (object));
-
- priv = player->priv;
- g_object_ref (object);
- priv->rooted_objects = g_list_prepend (priv->rooted_objects, object);
-}
-
-void
-swfdec_player_unroot_object (SwfdecPlayer *player, GObject *object)
-{
- SwfdecPlayerPrivate *priv = player->priv;
- GList *entry;
-
- g_return_if_fail (SWFDEC_IS_PLAYER (player));
- g_return_if_fail (G_IS_OBJECT (object));
- entry = g_list_find (priv->rooted_objects, object);
- g_return_if_fail (entry != NULL);
- g_object_unref (object);
- priv->rooted_objects = g_list_delete_link (priv->rooted_objects, entry);
-}
-
-/**
- * swfdec_player_create_socket:
- * @player: a #SwfdecPlayer
- * @hostname: the host name to connect to.
- * @port: the port to connect to
- *
- * Creates a new socket connecting to the given hostname and port.
- *
- * Returns: a new socket or %NULL if no socket implementation exists
- **/
-/* FIXME: always return a socket? */
-SwfdecSocket *
-swfdec_player_create_socket (SwfdecPlayer *player, const char *hostname, guint port)
-{
- SwfdecSocket *sock;
- SwfdecSocketClass *klass;
-
- g_return_val_if_fail (SWFDEC_IS_PLAYER (player), NULL);
- g_return_val_if_fail (hostname != NULL, NULL);
- g_return_val_if_fail (port > 0, NULL);
-
- if (player->priv->socket_type == 0)
- return NULL;
- klass = g_type_class_ref (player->priv->socket_type);
- sock = klass->create (hostname, port);
- g_type_class_unref (klass);
-
- return sock;
-}
-
/** PUBLIC API ***/
/**
diff --git a/libswfdec/swfdec_player_internal.h b/libswfdec/swfdec_player_internal.h
index fbbac20..cbe49ec 100644
--- a/libswfdec/swfdec_player_internal.h
+++ b/libswfdec/swfdec_player_internal.h
@@ -23,6 +23,7 @@
#include <libswfdec/swfdec_player.h>
#include <libswfdec/swfdec_audio.h>
#include <libswfdec/swfdec_event.h>
+#include <libswfdec/swfdec_function_list.h>
#include <libswfdec/swfdec_player_scripting.h>
#include <libswfdec/swfdec_rect.h>
#include <libswfdec/swfdec_ringbuffer.h>
@@ -62,7 +63,6 @@ struct _SwfdecPlayerPrivate
guint width; /* width of movie */
guint height; /* height of movie */
GList * roots; /* all the root movies */
- GList * rooted_objects; /* all the objects we keep track of */
GSList * resource_requests; /* all external requested URIs - see swfdec_resource_request.[ch] */
SwfdecCache * cache; /* player cache */
gboolean bgcolor_set; /* TRUE if the background color has been set */
@@ -88,6 +88,7 @@ struct _SwfdecPlayerPrivate
guint unnamed_count; /* variable used for naming unnamed movies */
/* ActionScript */
+ SwfdecFunctionList rooted; /* all the objects we keep track of */
guint interval_id; /* id returned from setInterval call */
GList * intervals; /* all currently running intervals */
GHashTable * registered_classes; /* name => SwfdecAsObject constructor */
@@ -151,10 +152,10 @@ void swfdec_player_unlock (SwfdecPlayer * player);
void swfdec_player_unlock_soft (SwfdecPlayer * player);
void swfdec_player_perform_actions (SwfdecPlayer * player);
-void swfdec_player_root_object (SwfdecPlayer * player,
- GObject * object);
-void swfdec_player_unroot_object (SwfdecPlayer * player,
- GObject * object);
+#define swfdec_player_root(player, data, mark_func) \
+ swfdec_function_list_add (&(player)->priv->rooted, (mark_func), (data), NULL)
+#define swfdec_player_unroot(player, data) \
+ swfdec_function_list_remove (&(player)->priv->rooted, (data))
SwfdecAsObject *swfdec_player_get_export_class (SwfdecPlayer * player,
const char * name);
void swfdec_player_set_export_class (SwfdecPlayer * player,
diff --git a/libswfdec/swfdec_resource.c b/libswfdec/swfdec_resource.c
index 6a8b3b4..08113e3 100644
--- a/libswfdec/swfdec_resource.c
+++ b/libswfdec/swfdec_resource.c
@@ -210,7 +210,7 @@ swfdec_resource_create_movie (SwfdecResource *resource)
SWFDEC_WARNING ("%s does not reference a movie, not loading %s", resource->target,
swfdec_url_get_url (swfdec_loader_get_url (resource->loader)));
swfdec_stream_close (SWFDEC_STREAM (resource->loader));
- swfdec_player_unroot_object (player, G_OBJECT (resource));
+ swfdec_player_unroot (player, resource);
return FALSE;
}
movie = swfdec_player_get_movie_at_level (player, level);
@@ -220,7 +220,7 @@ swfdec_resource_create_movie (SwfdecResource *resource)
} else {
movie = swfdec_resource_replace_movie (movie, resource);
}
- swfdec_player_unroot_object (player, G_OBJECT (resource));
+ swfdec_player_unroot (player, resource);
return TRUE;
}
@@ -548,7 +548,7 @@ swfdec_resource_load (SwfdecPlayer *player, const char *target, const char *url,
resource->target = path;
if (loader)
resource->clip_loader = g_object_ref (loader);
- swfdec_player_root_object (player, G_OBJECT (resource));
+ swfdec_player_root (player, resource, (GFunc) swfdec_resource_mark);
swfdec_player_request_resource (player, SWFDEC_AS_CONTEXT (player)->frame->security,
url, request, buffer, swfdec_resource_do_load, resource, g_object_unref);
}
commit 2db6a3d2215d8ce37c701943604b405ff804be03
Author: Benjamin Otte <otte at gnome.org>
Date: Thu Jan 10 19:41:36 2008 +0100
add a SwfdecFunctionList struct
This is supposed to make collecting callbacks easier, as there's a lot of those
around.
I'm not sure this API works out, but we can at least try it.
diff --git a/libswfdec/Makefile.am b/libswfdec/Makefile.am
index b0efc23..7da1ba0 100644
--- a/libswfdec/Makefile.am
+++ b/libswfdec/Makefile.am
@@ -80,6 +80,7 @@ libswfdec_source_files = \
swfdec_flash_security.c \
swfdec_flv_decoder.c \
swfdec_font.c \
+ swfdec_function_list.c \
swfdec_glow_filter.c \
swfdec_gradient_filter.c \
swfdec_gradient_pattern.c \
@@ -242,6 +243,7 @@ noinst_HEADERS = \
swfdec_flash_security.h \
swfdec_flv_decoder.h \
swfdec_font.h \
+ swfdec_function_list.h \
swfdec_gradient_pattern.h \
swfdec_graphic.h \
swfdec_graphic_movie.h \
diff --git a/libswfdec/swfdec_function_list.c b/libswfdec/swfdec_function_list.c
new file mode 100644
index 0000000..0b29b59
--- /dev/null
+++ b/libswfdec/swfdec_function_list.c
@@ -0,0 +1,132 @@
+/* Swfdec
+ * Copyright (C) 2008 Benjamin Otte <otte at gnome.org>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301 USA
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include <string.h>
+#include "swfdec_function_list.h"
+
+typedef struct _SwfdecFunctionListEntry SwfdecFunctionListEntry;
+struct _SwfdecFunctionListEntry {
+ GFunc func;
+ gpointer data;
+ GDestroyNotify destroy;
+};
+
+void
+swfdec_function_list_clear (SwfdecFunctionList *list)
+{
+ GList *walk;
+
+ g_return_if_fail (list != NULL);
+
+ for (walk = list->list; walk; walk = walk->next) {
+ SwfdecFunctionListEntry *entry = walk->data;
+ if (entry->destroy)
+ entry->destroy (entry->data);
+ g_slice_free (SwfdecFunctionListEntry, entry);
+ }
+ g_list_free (list->list);
+ list->list = NULL;
+}
+
+void
+swfdec_function_list_add (SwfdecFunctionList *list, GFunc func,
+ gpointer data, GDestroyNotify destroy)
+{
+ SwfdecFunctionListEntry *entry;
+
+ g_return_if_fail (list != NULL);
+ g_return_if_fail (func);
+
+ entry = g_slice_new (SwfdecFunctionListEntry);
+ entry->func = func;
+ entry->data = data;
+ entry->destroy = destroy;
+
+ list->list = g_list_append (list->list, entry);
+}
+
+static int
+swfdec_function_list_entry_compare (gconstpointer a, gconstpointer b)
+{
+ a = ((const SwfdecFunctionListEntry *) a)->data;
+ b = ((const SwfdecFunctionListEntry *) b)->data;
+
+ if (a < b)
+ return -1;
+ if (a > b)
+ return 1;
+ return 0;
+}
+
+void
+swfdec_function_list_remove (SwfdecFunctionList *list, gpointer data)
+{
+ SwfdecFunctionListEntry entry = { NULL, data, NULL };
+ SwfdecFunctionListEntry *e;
+ GList *node;
+
+ g_return_if_fail (list != NULL);
+
+ node = g_list_find_custom (list->list, &entry,
+ swfdec_function_list_entry_compare);
+ e = node->data;
+ if (e->destroy)
+ e->destroy (data);
+ g_slice_free (SwfdecFunctionListEntry, e);
+ list->list = g_list_delete_link (list->list, node);
+}
+
+void
+swfdec_function_list_execute (SwfdecFunctionList *list, gpointer data)
+{
+ SwfdecFunctionListEntry *entry;
+ GList *walk;
+
+ g_return_if_fail (list != NULL);
+
+ for (walk = list->list; walk; walk = walk->next) {
+ entry = walk->data;
+ entry->func (entry->data, data);
+ }
+}
+
+void
+swfdec_function_list_execute_and_clear (SwfdecFunctionList *list, gpointer data)
+{
+ SwfdecFunctionListEntry *entry;
+ GList *old, *walk;
+
+ g_return_if_fail (list != NULL);
+
+ old = list->list;
+ list->list = NULL;
+ for (walk = old; walk; walk = walk->next) {
+ entry = walk->data;
+ entry->func (entry->data, data);
+ if (entry->destroy)
+ entry->destroy (entry->data);
+ g_slice_free (SwfdecFunctionListEntry, entry);
+ }
+ g_list_free (old);
+}
+
diff --git a/libswfdec/swfdec_function_list.h b/libswfdec/swfdec_function_list.h
new file mode 100644
index 0000000..f7e8691
--- /dev/null
+++ b/libswfdec/swfdec_function_list.h
@@ -0,0 +1,50 @@
+/* Swfdec
+ * Copyright (C) 2008 Benjamin Otte <otte at gnome.org>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301 USA
+ */
+
+#ifndef __SWFDEC_FUNCTION_LIST_H__
+#define __SWFDEC_FUNCTION_LIST_H__
+
+#include <glib.h>
+
+G_BEGIN_DECLS
+
+
+typedef struct _SwfdecFunctionList SwfdecFunctionList;
+struct _SwfdecFunctionList {
+ GList * list;
+};
+
+void swfdec_function_list_clear (SwfdecFunctionList * list);
+
+void swfdec_function_list_add (SwfdecFunctionList * list,
+ GFunc func,
+ gpointer data,
+ GDestroyNotify destroy);
+void swfdec_function_list_remove (SwfdecFunctionList * list,
+ gpointer data);
+
+void swfdec_function_list_execute (SwfdecFunctionList * list,
+ gpointer data);
+void swfdec_function_list_execute_and_clear
+ (SwfdecFunctionList * list,
+ gpointer data);
+
+G_END_DECLS
+
+#endif
commit b51d972972da4aef91d54099a1f85bd614a35c96
Author: Benjamin Otte <otte at gnome.org>
Date: Thu Jan 10 18:33:44 2008 +0100
add copyright headers
diff --git a/libswfdec/swfdec_ringbuffer.c b/libswfdec/swfdec_ringbuffer.c
index acc8ba1..6d3dd04 100644
--- a/libswfdec/swfdec_ringbuffer.c
+++ b/libswfdec/swfdec_ringbuffer.c
@@ -1,3 +1,21 @@
+/* Swfdec
+ * Copyright (C) 2007 Benjamin Otte <otte at gnome.org>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301 USA
+ */
#ifdef HAVE_CONFIG_H
#include "config.h"
diff --git a/libswfdec/swfdec_ringbuffer.h b/libswfdec/swfdec_ringbuffer.h
index d7aad1b..3f02851 100644
--- a/libswfdec/swfdec_ringbuffer.h
+++ b/libswfdec/swfdec_ringbuffer.h
@@ -1,3 +1,21 @@
+/* Swfdec
+ * Copyright (C) 2007 Benjamin Otte <otte at gnome.org>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301 USA
+ */
#ifndef __SWFDEC_RING_BUFFER_H__
#define __SWFDEC_RING_BUFFER_H__
commit ab2cdc38c16b4df99c12d4b65a43372fa01c842b
Author: Benjamin Otte <otte at gnome.org>
Date: Wed Jan 9 23:47:55 2008 +0100
dump current changes here
The next round of changes needs a revamped load request system
diff --git a/libswfdec/swfdec_as_strings.c b/libswfdec/swfdec_as_strings.c
index 0729919..7f880aa 100644
--- a/libswfdec/swfdec_as_strings.c
+++ b/libswfdec/swfdec_as_strings.c
@@ -485,5 +485,7 @@ const char swfdec_as_strings[] =
SWFDEC_AS_CONSTANT_STRING ("y")
SWFDEC_AS_CONSTANT_STRING ("idMap")
SWFDEC_AS_CONSTANT_STRING ("id")
+ SWFDEC_AS_CONSTANT_STRING ("onClose")
+ SWFDEC_AS_CONSTANT_STRING ("onConnect")
/* add more here */
;
diff --git a/libswfdec/swfdec_xml_socket.c b/libswfdec/swfdec_xml_socket.c
index 89bfaae..bff72c7 100644
--- a/libswfdec/swfdec_xml_socket.c
+++ b/libswfdec/swfdec_xml_socket.c
@@ -1,5 +1,5 @@
/* Swfdec
- * Copyright (C) 2007 Pekka Lampila <pekka.lampila at iki.fi>
+ * Copyright (C) 2008 Benjamin Otte <otte at gnome.org>
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
@@ -21,14 +21,210 @@
#include "config.h"
#endif
+#include <string.h>
+
+#include "swfdec_xml_socket.h"
#include "swfdec_as_internal.h"
+#include "swfdec_as_strings.h"
+#include "swfdec_buffer.h"
#include "swfdec_debug.h"
+#include "swfdec_loader_internal.h"
+#include "swfdec_movie.h"
+#include "swfdec_player_internal.h"
+
+static GQuark xml_socket_quark = 0;
+
+static void
+swfdec_xml_socket_ensure_closed (SwfdecXmlSocket *xml)
+{
+ gpointer cur;
+
+ if (xml->socket == NULL)
+ return;
+
+ swfdec_stream_set_target (SWFDEC_STREAM (xml->socket), NULL);
+ g_object_unref (xml->socket);
+ xml->socket = NULL;
+
+ swfdec_player_unroot_object (SWFDEC_PLAYER (SWFDEC_AS_OBJECT (xml)->context), G_OBJECT (xml));
+ cur = g_object_get_qdata (G_OBJECT (xml->target), xml_socket_quark);
+ if (cur != xml)
+ g_object_set_qdata (G_OBJECT (xml->target), xml_socket_quark, cur);
+ xml->target = NULL;
+}
+
+/*** SWFDEC_STREAM_TARGET ***/
+
+static SwfdecPlayer *
+swfdec_xml_socket_stream_target_get_player (SwfdecStreamTarget *target)
+{
+ return SWFDEC_PLAYER (SWFDEC_AS_OBJECT (target)->context);
+}
+
+static void
+swfdec_xml_socket_stream_target_error (SwfdecStreamTarget *target,
+ SwfdecStream *stream)
+{
+ SwfdecXmlSocket *xml = SWFDEC_XML_SOCKET (target);
+
+ if (xml->open) {
+ SWFDEC_FIXME ("is onClose emitted on error?");
+ swfdec_as_object_call (xml->target, SWFDEC_AS_STR_onClose, 0, NULL, NULL);
+ } else {
+ SwfdecAsValue value;
+
+ SWFDEC_AS_VALUE_SET_BOOLEAN (&value, FALSE);
+ swfdec_as_object_call (xml->target, SWFDEC_AS_STR_onConnect, 1, &value, NULL);
+ }
+
+ swfdec_xml_socket_ensure_closed (xml);
+}
+
+static void
+swfdec_xml_socket_stream_target_parse (SwfdecStreamTarget *target,
+ SwfdecStream *stream)
+{
+ SwfdecXmlSocket *xml = SWFDEC_XML_SOCKET (target);
+ SwfdecBufferQueue *queue;
+ SwfdecBuffer *buffer;
+ gsize len;
+
+ /* parse until next 0 byte or take everything */
+ queue = swfdec_stream_get_queue (stream);
+ while ((buffer = swfdec_buffer_queue_peek_buffer (queue))) {
+ guchar *nul = memchr (buffer->data, 0, buffer->length);
+
+ len = nul ? (gsize) (nul - buffer->data + 1) : buffer->length;
+ g_assert (len > 0);
+ swfdec_buffer_unref (buffer);
+ buffer = swfdec_buffer_queue_pull (queue, len);
+ swfdec_buffer_queue_push (xml->queue, buffer);
+ if (nul) {
+ len = swfdec_buffer_queue_get_depth (xml->queue);
+ g_assert (len > 0);
+ buffer = swfdec_buffer_queue_pull (xml->queue, len);
+ if (!g_utf8_validate ((char *) buffer->data, len, NULL)) {
+ SWFDEC_FIXME ("invalid utf8 sent through socket, what now?");
+ } else {
+ SwfdecAsValue val;
+
+ SWFDEC_AS_VALUE_SET_STRING (&val, swfdec_as_context_get_string (
+ SWFDEC_AS_OBJECT (xml)->context, (char *) buffer->data));
+ swfdec_as_object_call (xml->target, SWFDEC_AS_STR_onData, 1, &val, NULL);
+ }
+ }
+ }
+}
+
+static void
+swfdec_xml_socket_stream_target_close (SwfdecStreamTarget *target,
+ SwfdecStream *stream)
+{
+ SwfdecXmlSocket *xml = SWFDEC_XML_SOCKET (target);
+
+ if (swfdec_buffer_queue_get_depth (xml->queue)) {
+ SWFDEC_FIXME ("data left in socket, what now?");
+ }
+
+ swfdec_as_object_call (xml->target, SWFDEC_AS_STR_onClose, 0, NULL, NULL);
+
+ swfdec_xml_socket_ensure_closed (xml);
+}
+
+static void
+swfdec_xml_socket_stream_target_init (SwfdecStreamTargetInterface *iface)
+{
+ iface->get_player = swfdec_xml_socket_stream_target_get_player;
+ iface->parse = swfdec_xml_socket_stream_target_parse;
+ iface->close = swfdec_xml_socket_stream_target_close;
+ iface->error = swfdec_xml_socket_stream_target_error;
+}
+
+/*** SWFDEC_XML_SOCKET ***/
+
+G_DEFINE_TYPE_WITH_CODE (SwfdecXmlSocket, swfdec_xml_socket, SWFDEC_TYPE_AS_OBJECT,
+ G_IMPLEMENT_INTERFACE (SWFDEC_TYPE_STREAM_TARGET, swfdec_xml_socket_stream_target_init))
+
+static void
+swfdec_xml_socket_mark (SwfdecAsObject *object)
+{
+ swfdec_as_object_mark (SWFDEC_XML_SOCKET (object)->target);
+
+ SWFDEC_AS_OBJECT_CLASS (swfdec_xml_socket_parent_class)->mark (object);
+}
+
+static void
+swfdec_xml_socket_dispose (GObject *object)
+{
+ SwfdecXmlSocket *xml = SWFDEC_XML_SOCKET (object);
+
+ swfdec_xml_socket_ensure_closed (xml);
+ if (xml->queue) {
+ swfdec_buffer_queue_unref (xml->queue);
+ xml->queue = NULL;
+ }
+
+ G_OBJECT_CLASS (swfdec_xml_socket_parent_class)->dispose (object);
+}
+
+static void
+swfdec_xml_socket_class_init (SwfdecXmlSocketClass *klass)
+{
+ GObjectClass *object_class = G_OBJECT_CLASS (klass);
+ SwfdecAsObjectClass *as_object_class = SWFDEC_AS_OBJECT_CLASS (klass);
+
+ object_class->dispose = swfdec_xml_socket_dispose;
+
+ as_object_class->mark = swfdec_xml_socket_mark;
+}
+
+static void
+swfdec_xml_socket_init (SwfdecXmlSocket *xml)
+{
+ xml->queue = swfdec_buffer_queue_new ();
+}
+
+static SwfdecXmlSocket *
+swfdec_xml_socket_create (SwfdecAsObject *target, const char *hostname, guint port)
+{
+ SwfdecAsContext *cx = target->context;
+ SwfdecXmlSocket *xml;
+ SwfdecSocket *sock;
+
+ if (!swfdec_as_context_use_mem (cx, sizeof (SwfdecXmlSocket)))
+ return NULL;
+
+ SWFDEC_FIXME ("implement security checks please");
+ sock = swfdec_player_create_socket (SWFDEC_PLAYER (cx), hostname, port);
+ if (sock == NULL)
+ return NULL;
+
+ xml = g_object_new (SWFDEC_TYPE_XML_SOCKET, NULL);
+ swfdec_as_object_add (SWFDEC_AS_OBJECT (xml), cx, sizeof (SwfdecXmlSocket));
+ swfdec_player_root_object (SWFDEC_PLAYER (cx), G_OBJECT (xml));
+
+ xml->target = target;
+ xml->socket = sock;
+
+ return xml;
+}
+
+/*** AS CODE ***/
SWFDEC_AS_NATIVE (400, 0, swfdec_xml_socket_connect)
void
swfdec_xml_socket_connect (SwfdecAsContext *cx, SwfdecAsObject *object,
guint argc, SwfdecAsValue *argv, SwfdecAsValue *ret)
{
+ const char *host;
+ int port;
+
+ SWFDEC_AS_CHECK (0, NULL, "si", host, port);
+
+ if (SWFDEC_IS_MOVIE (object) || object == NULL)
+ return;
+
+ swfdec_xml_socket_create (object, host, port);
SWFDEC_STUB ("XMLSocket.connect");
}
commit 41cadc7536fe8c353fcbb2f375a4f2ff700ae3ea
Author: Benjamin Otte <otte at gnome.org>
Date: Wed Jan 9 22:59:41 2008 +0100
actually ref the connection to keep it
Also use the pointer of the connection as its name
diff --git a/test/rtmp/rtmp_server.c b/test/rtmp/rtmp_server.c
index 9efc6da..ec431e8 100644
--- a/test/rtmp/rtmp_server.c
+++ b/test/rtmp/rtmp_server.c
@@ -30,7 +30,7 @@ socket_print (SoupSocket *sock, const char *format, ...)
{
va_list varargs;
- g_print ("%s ", (char *) g_object_get_data (G_OBJECT (sock), "name"));
+ g_print ("%p ", sock);
va_start (varargs, format);
g_vprintf (format, varargs);
va_end (varargs);
@@ -66,17 +66,9 @@ do_read (SoupSocket *conn, gpointer unused)
}
static void
-assign_name (SoupSocket *sock)
-{
- static guint count = 0;
- g_object_set_data_full (G_OBJECT (sock), "name", g_strdup_printf ("%u", ++count), g_free);
-}
-
-static void
new_connection (SoupSocket *server, SoupSocket *conn, gpointer unused)
{
- assign_name (conn);
- g_object_set (conn, SOUP_SOCKET_FLAG_NONBLOCKING, TRUE, SOUP_SOCKET_FLAG_NODELAY, TRUE, NULL);
+ g_object_ref (conn);
socket_print (conn, "new connection\n");
g_signal_connect (conn, "readable", G_CALLBACK (do_read), NULL);
do_read (conn, NULL);
commit 338c56052e0c6bc5cef599b34d0a2547fdcf8925
Author: Benjamin Otte <otte at gnome.org>
Date: Wed Jan 9 12:41:03 2008 +0100
print out connection names
diff --git a/test/rtmp/rtmp_server.c b/test/rtmp/rtmp_server.c
index d64fbec..9efc6da 100644
--- a/test/rtmp/rtmp_server.c
+++ b/test/rtmp/rtmp_server.c
@@ -23,6 +23,18 @@
#include <libsoup/soup.h>
#include <libsoup/soup-address.h>
#include <libswfdec/swfdec.h>
+#include <glib/gprintf.h>
+
+static void
+socket_print (SoupSocket *sock, const char *format, ...)
+{
+ va_list varargs;
+
+ g_print ("%s ", (char *) g_object_get_data (G_OBJECT (sock), "name"));
+ va_start (varargs, format);
+ g_vprintf (format, varargs);
+ va_end (varargs);
+}
static void
hexdump (SwfdecBuffer *buffer)
@@ -44,18 +56,28 @@ do_read (SoupSocket *conn, gpointer unused)
buf = swfdec_buffer_new_and_alloc (16);
while ((status = soup_socket_read (conn, buf->data, buf->length, &buf->length)) == SOUP_SOCKET_OK) {
+ socket_print (conn, "\n");
hexdump (buf);
soup_socket_write (conn, buf->data, buf->length, &buf->length);
buf->length = 16;
}
swfdec_buffer_unref (buf);
- g_print ("status: %u\n", (guint) status);
+ socket_print (conn, "status: %u\n", (guint) status);
+}
+
+static void
+assign_name (SoupSocket *sock)
+{
+ static guint count = 0;
+ g_object_set_data_full (G_OBJECT (sock), "name", g_strdup_printf ("%u", ++count), g_free);
}
static void
new_connection (SoupSocket *server, SoupSocket *conn, gpointer unused)
{
- g_print ("WOOT!\n");
+ assign_name (conn);
+ g_object_set (conn, SOUP_SOCKET_FLAG_NONBLOCKING, TRUE, SOUP_SOCKET_FLAG_NODELAY, TRUE, NULL);
+ socket_print (conn, "new connection\n");
g_signal_connect (conn, "readable", G_CALLBACK (do_read), NULL);
do_read (conn, NULL);
}
commit c35d9d03fb66ebeb3c6a347ffc09bd88781a4852
Author: Benjamin Otte <otte at gnome.org>
Date: Sun Jan 6 00:56:09 2008 +0100
require libsoup when building libswfdec-gtk
too many optional dependencies suck
diff --git a/configure.ac b/configure.ac
index 69504cd..2690e2f 100644
--- a/configure.ac
+++ b/configure.ac
@@ -97,7 +97,7 @@ AC_SUBST(PANGO_CFLAGS)
AC_ARG_ENABLE(gtk,
AS_HELP_STRING([--enable-gtk],
- [enable Gtk integration (default=yes)])],
+ [enable build of libswfdec-gtk (default=yes)])],
enable_gtk=$enableval,
enable_gtk="yes")
@@ -107,12 +107,8 @@ dnl
GTK_VER=2.8.0
AC_SUBST(GTK_VER)
if test "$enable_gtk" = "yes"; then
- PKG_CHECK_MODULES(GTK, gtk+-2.0 >= $GTK_VER, HAVE_GTK=yes, HAVE_GTK=no)
- if test "x$HAVE_GTK" = xyes; then
- AC_DEFINE(HAVE_GTK, 1, [Define if Gtk is enabled])
- else
- AC_MSG_ERROR([Couldn't find a suitable Gtk version. You need at least version $GTK_VER])
- fi
+ PKG_CHECK_MODULES(GTK, gtk+-2.0 >= $GTK_VER libsoup-2.2 >= 2.2.0, HAVE_GTK=yes)
+ AC_DEFINE(HAVE_GTK, 1, [Define if Gtk is enabled])
else
AC_MSG_NOTICE([Gtk support was not enabled.])
fi
@@ -266,24 +262,6 @@ fi
AM_CONDITIONAL(HAVE_GST, [test "x$HAVE_GST" = xyes])
-AC_ARG_ENABLE(soup,
- AS_HELP_STRING([--enable-soup],
- [enable libsoup HTTP support for swfdec-gtk (default=yes)])],
- enable_libsoup=$enableval,
- enable_libsoup="yes")
-
-if test "$enable_libsoup" = "yes"; then
- PKG_CHECK_MODULES(HTTP, libsoup-2.2 >= 2.2.0, HAVE_HTTP=yes, HAVE_HTTP=no)
- if test "x$HAVE_HTTP" = xyes; then
- AC_DEFINE(HAVE_HTTP, 1, [Define if libsoup is enabled])
- else
- AC_MSG_ERROR([Couldn't find libsoup-2.2.])
- fi
-else
- AC_MSG_NOTICE([libsoup HTTP support was not enabled.])
-fi
-AM_CONDITIONAL(HAVE_HTTP, [test "x$HAVE_HTTP" = xyes])
-
AC_ARG_ENABLE(vivified,
AS_HELP_STRING([--enable-vivified],
[enable Vivified Flash debugger (default=no)])],
diff --git a/libswfdec-gtk/Makefile.am b/libswfdec-gtk/Makefile.am
index b94616c..4f724cf 100644
--- a/libswfdec-gtk/Makefile.am
+++ b/libswfdec-gtk/Makefile.am
@@ -23,12 +23,12 @@ noinst_HEADERS = \
libswfdec_gtk_ at SWFDEC_MAJORMINOR@_la_CFLAGS = \
-I$(top_srcdir) $(GLOBAL_CFLAGS) $(SWFDEC_CFLAGS) $(GTK_CFLAGS) \
- $(AUDIO_CFLAGS) $(HTTP_CFLAGS) \
+ $(AUDIO_CFLAGS) \
-DG_LOG_DOMAIN=\"Swfdec-Gtk\"
libswfdec_gtk_ at SWFDEC_MAJORMINOR@_la_LDFLAGS = \
-version-info $(SWFDEC_LIBVERSION) \
-export-symbols-regex '^(swfdec_.*)' \
- $(GTK_LIBS) $(SWFDEC_LIBS) $(AUDIO_LIBS) $(HTTP_LIBS)
+ $(GTK_LIBS) $(SWFDEC_LIBS) $(AUDIO_LIBS)
libswfdec_ at SWFDEC_MAJORMINOR@includedir = $(includedir)/swfdec- at SWFDEC_MAJORMINOR@/libswfdec-gtk
libswfdec_ at SWFDEC_MAJORMINOR@include_HEADERS = \
swfdec-gtk.h \
diff --git a/libswfdec-gtk/swfdec_gtk_loader.c b/libswfdec-gtk/swfdec_gtk_loader.c
index 26979ce..479e6ad 100644
--- a/libswfdec-gtk/swfdec_gtk_loader.c
+++ b/libswfdec-gtk/swfdec_gtk_loader.c
@@ -21,10 +21,8 @@
#include "config.h"
#endif
-#ifdef HAVE_HTTP
#include <libsoup/soup.h>
#include <errno.h>
-#endif
#include <stdlib.h>
#include <string.h>
#include "swfdec_gtk_loader.h"
@@ -55,25 +53,20 @@ struct _SwfdecGtkLoader
{
SwfdecLoader loader;
-#ifdef HAVE_HTTP
SoupMessage * message; /* the message we're sending */
gboolean opened; /* set after first bytes of data have arrived */
-#endif
};
struct _SwfdecGtkLoaderClass {
SwfdecLoaderClass loader_class;
-#ifdef HAVE_HTTP
SoupSession * session; /* the session used by the loader */
-#endif
};
/*** SwfdecGtkLoader ***/
G_DEFINE_TYPE (SwfdecGtkLoader, swfdec_gtk_loader, SWFDEC_TYPE_FILE_LOADER)
-#ifdef HAVE_HTTP
static void
swfdec_gtk_loader_set_size (SwfdecGtkLoader *gtk)
{
@@ -145,20 +138,16 @@ swfdec_gtk_loader_dispose (GObject *object)
G_OBJECT_CLASS (swfdec_gtk_loader_parent_class)->dispose (object);
}
-#endif
static void
swfdec_gtk_loader_load (SwfdecLoader *loader, SwfdecLoader *parent,
SwfdecLoaderRequest request, const char *data, gsize data_len)
{
-#ifdef HAVE_HTTP
const SwfdecURL *url = swfdec_loader_get_url (loader);
if (g_ascii_strcasecmp (swfdec_url_get_protocol (url), "http") != 0 &&
g_ascii_strcasecmp (swfdec_url_get_protocol (url), "https") != 0) {
-#endif
SWFDEC_LOADER_CLASS (swfdec_gtk_loader_parent_class)->load (loader, parent, request, data, data_len);
-#ifdef HAVE_HTTP
} else {
SwfdecGtkLoader *gtk = SWFDEC_GTK_LOADER (loader);
SwfdecGtkLoaderClass *klass = SWFDEC_GTK_LOADER_GET_CLASS (gtk);
@@ -174,10 +163,8 @@ swfdec_gtk_loader_load (SwfdecLoader *loader, SwfdecLoader *parent,
g_object_ref (gtk->message);
soup_session_queue_message (klass->session, gtk->message, NULL, NULL);
}
-#endif
}
-#ifdef HAVE_HTTP
static void
swfdec_gtk_loader_close (SwfdecStream *stream)
{
@@ -196,12 +183,10 @@ swfdec_gtk_loader_close (SwfdecStream *stream)
}
}
}
-#endif
static void
swfdec_gtk_loader_class_init (SwfdecGtkLoaderClass *klass)
{
-#ifdef HAVE_HTTP
GObjectClass *object_class = G_OBJECT_CLASS (klass);
SwfdecStreamClass *stream_class = SWFDEC_STREAM_CLASS (klass);
SwfdecLoaderClass *loader_class = SWFDEC_LOADER_CLASS (klass);
@@ -213,7 +198,6 @@ swfdec_gtk_loader_class_init (SwfdecGtkLoaderClass *klass)
loader_class->load = swfdec_gtk_loader_load;
klass->session = soup_session_async_new ();
-#endif
}
static void
diff --git a/test/rtmp/Makefile.am b/test/rtmp/Makefile.am
index a0c4546..cfe8416 100644
--- a/test/rtmp/Makefile.am
+++ b/test/rtmp/Makefile.am
@@ -3,6 +3,6 @@ noinst_PROGRAMS = rtmp-server
TESTS = $(check_PROGRAMS)
rtmp_server_SOURCES = rtmp_server.c
-rtmp_server_CFLAGS = $(GLOBAL_CFLAGS) $(HTTP_CFLAGS) $(SWFDEC_CFLAGS) $(CAIRO_CFLAGS)
-rtmp_server_LDFLAGS = $(SWFDEC_LIBS) $(HTTP_LIBS) $(CAIRO_LIBS)
+rtmp_server_CFLAGS = $(GLOBAL_CFLAGS) $(GTK_CFLAGS) $(SWFDEC_CFLAGS) $(CAIRO_CFLAGS)
+rtmp_server_LDFLAGS = $(SWFDEC_LIBS) $(GTK_LIBS) $(CAIRO_LIBS)
commit 2c1ca1e740444ab00c55d2cb280979a6d59191fd
Author: Benjamin Otte <otte at gnome.org>
Date: Sun Jan 6 00:46:25 2008 +0100
use a SwfdecGtkSocket by default inside the SwfdecGtkPlayer
diff --git a/libswfdec-gtk/swfdec_gtk_player.c b/libswfdec-gtk/swfdec_gtk_player.c
index c494a71..e9b8cd4 100644
--- a/libswfdec-gtk/swfdec_gtk_player.c
+++ b/libswfdec-gtk/swfdec_gtk_player.c
@@ -23,6 +23,7 @@
#include "libswfdec-gtk/swfdec_gtk_loader.h"
#include "libswfdec-gtk/swfdec_gtk_player.h"
+#include "libswfdec-gtk/swfdec_gtk_socket.h"
#include "libswfdec-gtk/swfdec_playback.h"
#include "libswfdec-gtk/swfdec_source.h"
@@ -172,7 +173,9 @@ swfdec_gtk_player_new (SwfdecAsDebugger *debugger)
SwfdecPlayer *player;
swfdec_init ();
- player = g_object_new (SWFDEC_TYPE_GTK_PLAYER, "debugger", debugger, NULL);
+ player = g_object_new (SWFDEC_TYPE_GTK_PLAYER,
+ "socket-type", SWFDEC_TYPE_GTK_SOCKET,
+ "debugger", debugger, NULL);
return player;
}
commit c0fe44171c57fdb4724ab600fce4ee867098c2dc
Author: Benjamin Otte <otte at gnome.org>
Date: Sun Jan 6 00:46:00 2008 +0100
a variable I didn't catch when renaming
sometimes using refactoring tools might be useful...
diff --git a/libswfdec/swfdec_net_stream.c b/libswfdec/swfdec_net_stream.c
index 22de7fb..324da0f 100644
--- a/libswfdec/swfdec_net_stream.c
+++ b/libswfdec/swfdec_net_stream.c
@@ -266,7 +266,7 @@ swfdec_net_stream_stream_target_parse (SwfdecStreamTarget *target,
if (ns->flvdecoder == NULL) {
/* FIXME: add mp3 support */
ns->flvdecoder = g_object_new (SWFDEC_TYPE_FLV_DECODER, NULL);
- SWFDEC_DECODER (ns->flvdecoder)->player = SWFDEC_PLAYER (SWFDEC_AS_OBJECT (stream)->context);
+ SWFDEC_DECODER (ns->flvdecoder)->player = SWFDEC_PLAYER (SWFDEC_AS_OBJECT (ns)->context);
swfdec_net_stream_onstatus (ns, SWFDEC_AS_STR_NetStream_Play_Start,
SWFDEC_AS_STR_status);
swfdec_loader_set_data_type (SWFDEC_LOADER (stream), SWFDEC_LOADER_DATA_FLV);
commit b17a272be5f83ec675cd97d91055bda26f890281
Author: Benjamin Otte <otte at gnome.org>
Date: Sun Jan 6 00:42:28 2008 +0100
add a socket implementation using libsoup
diff --git a/libswfdec-gtk/Makefile.am b/libswfdec-gtk/Makefile.am
index c3c140f..b94616c 100644
--- a/libswfdec-gtk/Makefile.am
+++ b/libswfdec-gtk/Makefile.am
@@ -14,6 +14,7 @@ libswfdec_gtk_ at SWFDEC_MAJORMINOR@_la_SOURCES = \
swfdec_gtk_keys.c \
swfdec_gtk_loader.c \
swfdec_gtk_player.c \
+ swfdec_gtk_socket.c \
swfdec_gtk_widget.c
noinst_HEADERS = \
@@ -34,6 +35,7 @@ libswfdec_ at SWFDEC_MAJORMINOR@include_HEADERS = \
swfdec_gtk_keys.h \
swfdec_gtk_loader.h \
swfdec_gtk_player.h \
+ swfdec_gtk_socket.h \
swfdec_gtk_widget.h
EXTRA_DIST = \
diff --git a/libswfdec-gtk/swfdec-gtk.h b/libswfdec-gtk/swfdec-gtk.h
index de4f723..b64cf83 100644
--- a/libswfdec-gtk/swfdec-gtk.h
+++ b/libswfdec-gtk/swfdec-gtk.h
@@ -23,6 +23,7 @@
#include <libswfdec-gtk/swfdec_gtk_keys.h>
#include <libswfdec-gtk/swfdec_gtk_loader.h>
#include <libswfdec-gtk/swfdec_gtk_player.h>
+#include <libswfdec-gtk/swfdec_gtk_socket.h>
#include <libswfdec-gtk/swfdec_gtk_widget.h>
#endif
diff --git a/libswfdec-gtk/swfdec_gtk_socket.c b/libswfdec-gtk/swfdec_gtk_socket.c
new file mode 100644
index 0000000..08cbb76
--- /dev/null
+++ b/libswfdec-gtk/swfdec_gtk_socket.c
@@ -0,0 +1,220 @@
+/* Swfdec
+ * Copyright (C) 2006 Benjamin Otte <otte at gnome.org>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301 USA
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include "swfdec_gtk_socket.h"
+#include <libsoup/soup.h>
+#include <libsoup/soup-address.h>
+
+/*** GTK-DOC ***/
+
+/**
+ * SECTION:SwfdecGtkSocket
+ * @title: SwfdecGtkSocket
+ * @short_description: a socket implementation integrating into the Gtk main loop
+ * @see_also: #SwfdecSocket, #SwfdecGtkPlayer
+ *
+ * #SwfdecGtkSocket is a #SwfdecSocket that is a socket implementation that
+ * uses libsoup and integrates with the Gtk main loop. It is used by default
+ * by the #SwfecGtkPlayer.
+ */
+
+/**
+ * SwfdecGtkSocket:
+ *
+ * This is the object used to represent a socket. It is completely private.
+ */
+
+struct _SwfdecGtkSocket
+{
+ SwfdecSocket socket;
+
+ SoupSocket * sock; /* libsoup socket we're using */
+ gboolean sock_writable; /* FALSE if writing would block */
+ SwfdecBufferQueue * queue; /* buffers we still need to push */
+};
+
+struct _SwfdecGtkSocketClass {
+ SwfdecSocketClass socket_class;
+};
+
+/*** SwfdecGtkSocket ***/
+
+G_DEFINE_TYPE (SwfdecGtkSocket, swfdec_gtk_socket, SWFDEC_TYPE_SOCKET)
+
+static void
+swfdec_gtk_socket_close (SwfdecStream *stream)
+{
+ SwfdecGtkSocket *gtk = SWFDEC_GTK_SOCKET (stream);
+
+ soup_socket_disconnect (gtk->sock);
+}
+
+static void
+swfdec_gtk_socket_do_connect (SoupSocket *sock, int status, SwfdecGtkSocket *gtk)
+{
+ if (SOUP_STATUS_IS_SUCCESSFUL (status))
+ swfdec_stream_open (SWFDEC_STREAM (gtk));
+ else
+ swfdec_stream_error (SWFDEC_STREAM (gtk), "error connecting");
+
+}
+
+static void
+swfdec_gtk_socket_do_disconnect (SoupSocket *sock, SwfdecGtkSocket *gtk)
+{
+ swfdec_stream_eof (SWFDEC_STREAM (gtk));
+}
+
+static void
+swfdec_gtk_socket_do_read (SoupSocket *sock, SwfdecGtkSocket *gtk)
+{
+#define SWFDEC_GTK_SOCKET_BLOCK_SIZE 1024
+ SwfdecBuffer *buffer;
+ SoupSocketIOStatus status;
+ gsize len;
+
+ do {
+ buffer = swfdec_buffer_new_and_alloc (SWFDEC_GTK_SOCKET_BLOCK_SIZE);
+ status = soup_socket_read (sock, buffer, SWFDEC_GTK_SOCKET_BLOCK_SIZE, &len);
+ buffer->length = len;
+ switch (status) {
+ case SOUP_SOCKET_OK:
+ swfdec_stream_push (SWFDEC_STREAM (gtk), buffer);
+ break;
+ case SOUP_SOCKET_WOULD_BLOCK:
+ case SOUP_SOCKET_EOF:
+ swfdec_buffer_unref (buffer);
+ break;
+ case SOUP_SOCKET_ERROR:
+ swfdec_buffer_unref (buffer);
+ swfdec_stream_error (SWFDEC_STREAM (gtk), "error reading data");
+ break;
+ default:
+ g_warning ("unhandled status code %u from soup_socket_read()", (guint) status);
+ break;
+ }
+ } while (status == SOUP_SOCKET_OK);
+}
+
+static void
+swfdec_gtk_socket_do_write (SoupSocket *sock, SwfdecGtkSocket *gtk)
+{
+ SwfdecBuffer *buffer;
+ SoupSocketIOStatus status;
+ gsize len;
+
+ gtk->sock_writable = TRUE;
+ while ((buffer = swfdec_buffer_queue_peek_buffer (gtk->queue))) {
+ status = soup_socket_write (sock, buffer->data, buffer->length, &len);
+ swfdec_buffer_unref (buffer);
+ switch (status) {
+ case SOUP_SOCKET_OK:
+ buffer = swfdec_buffer_queue_pull (gtk->queue, len);
+ swfdec_buffer_unref (buffer);
+ break;
+ case SOUP_SOCKET_WOULD_BLOCK:
+ case SOUP_SOCKET_EOF:
+ gtk->sock_writable = FALSE;
+ break;
+ case SOUP_SOCKET_ERROR:
+ swfdec_stream_error (SWFDEC_STREAM (gtk), "error writing data");
+ break;
+ default:
+ g_warning ("unhandled status code %u from soup_socket_read()", (guint) status);
+ break;
+ }
+ };
+}
+
+static SwfdecSocket *
+swfdec_gtk_socket_create (const char *hostname, guint port)
+{
+ SwfdecGtkSocket *sock = g_object_new (SWFDEC_TYPE_GTK_SOCKET, NULL);
+ SoupAddress *addr;
+
+ addr = soup_address_new (hostname, port);
+ sock->sock = soup_socket_new (SOUP_SOCKET_FLAG_NONBLOCKING, TRUE,
+ /* FIXME: we should set nodelay, no? */
+ SOUP_SOCKET_FLAG_NODELAY, TRUE, NULL);
+ g_signal_connect (sock->sock, "connect-result",
+ G_CALLBACK (swfdec_gtk_socket_do_connect), socket);
+ g_signal_connect (sock->sock, "disconnect",
+ G_CALLBACK (swfdec_gtk_socket_do_disconnect), socket);
+ g_signal_connect (sock->sock, "readable",
+ G_CALLBACK (swfdec_gtk_socket_do_read), socket);
+ g_signal_connect (sock->sock, "writable",
+ G_CALLBACK (swfdec_gtk_socket_do_write), socket);
+
+ return SWFDEC_SOCKET (sock);
+}
+
+static void
+swfdec_gtk_socket_send (SwfdecSocket *sock, SwfdecBuffer *buffer)
+{
+ SwfdecGtkSocket *gtk = SWFDEC_GTK_SOCKET (sock);
+
+ swfdec_buffer_queue_push (gtk->queue, buffer);
+ if (gtk->sock_writable)
+ swfdec_gtk_socket_do_write (gtk->sock, gtk);
+}
+
+static void
+swfdec_gtk_socket_dispose (GObject *object)
+{
+ SwfdecGtkSocket *gtk = SWFDEC_GTK_SOCKET (object);
+
+ if (gtk->sock) {
+ g_signal_handlers_disconnect_matched (gtk->sock, G_SIGNAL_MATCH_DATA,
+ 0, 0, NULL, NULL, gtk);
+ g_object_unref (gtk->sock);
+ gtk->sock = NULL;
+ }
+ if (gtk->queue) {
+ swfdec_buffer_queue_unref (gtk->queue);
+ gtk->queue = NULL;
+ }
+ G_OBJECT_CLASS (swfdec_gtk_socket_parent_class)->dispose (object);
+}
+
+static void
+swfdec_gtk_socket_class_init (SwfdecGtkSocketClass *klass)
+{
+ GObjectClass *object_class = G_OBJECT_CLASS (klass);
+ SwfdecStreamClass *stream_class = SWFDEC_STREAM_CLASS (klass);
+ SwfdecSocketClass *socket_class = SWFDEC_SOCKET_CLASS (klass);
+
+ object_class->dispose = swfdec_gtk_socket_dispose;
+
+ stream_class->close = swfdec_gtk_socket_close;
+
+ socket_class->create = swfdec_gtk_socket_create;
+ socket_class->send = swfdec_gtk_socket_send;
+}
+
+static void
+swfdec_gtk_socket_init (SwfdecGtkSocket *gtk)
+{
+ gtk->sock_writable = TRUE;
+ gtk->queue = swfdec_buffer_queue_new ();
+}
+
diff --git a/libswfdec-gtk/swfdec_gtk_socket.h b/libswfdec-gtk/swfdec_gtk_socket.h
new file mode 100644
index 0000000..62bb546
--- /dev/null
+++ b/libswfdec-gtk/swfdec_gtk_socket.h
@@ -0,0 +1,42 @@
+/* Swfdec
+ * Copyright (C) 2006 Benjamin Otte <otte at gnome.org>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301 USA
+ */
+
+#ifndef _SWFDEC_GTK_SOCKET_H_
+#define _SWFDEC_GTK_SOCKET_H_
+
+#include <libswfdec/swfdec.h>
+
+G_BEGIN_DECLS
+
+
+typedef struct _SwfdecGtkSocket SwfdecGtkSocket;
+typedef struct _SwfdecGtkSocketClass SwfdecGtkSocketClass;
+
+#define SWFDEC_TYPE_GTK_SOCKET (swfdec_gtk_socket_get_type())
+#define SWFDEC_IS_GTK_SOCKET(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), SWFDEC_TYPE_GTK_SOCKET))
+#define SWFDEC_IS_GTK_SOCKET_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), SWFDEC_TYPE_GTK_SOCKET))
+#define SWFDEC_GTK_SOCKET(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), SWFDEC_TYPE_GTK_SOCKET, SwfdecGtkSocket))
+#define SWFDEC_GTK_SOCKET_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), SWFDEC_TYPE_GTK_SOCKET, SwfdecGtkSocketClass))
+#define SWFDEC_GTK_SOCKET_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), SWFDEC_TYPE_GTK_SOCKET, SwfdecGtkSocketClass))
+
+GType swfdec_gtk_socket_get_type (void);
+
+
+G_END_DECLS
+#endif
commit deb4ba14ce8e1b6ca1d560cc3ddf4b66a4e0228a
Author: Benjamin Otte <otte at gnome.org>
Date: Sat Jan 5 23:46:08 2008 +0100
send back every received buffer
diff --git a/test/rtmp/rtmp_server.c b/test/rtmp/rtmp_server.c
index 2a26675..d64fbec 100644
--- a/test/rtmp/rtmp_server.c
+++ b/test/rtmp/rtmp_server.c
@@ -45,6 +45,7 @@ do_read (SoupSocket *conn, gpointer unused)
buf = swfdec_buffer_new_and_alloc (16);
while ((status = soup_socket_read (conn, buf->data, buf->length, &buf->length)) == SOUP_SOCKET_OK) {
hexdump (buf);
+ soup_socket_write (conn, buf->data, buf->length, &buf->length);
buf->length = 16;
}
swfdec_buffer_unref (buf);
commit 96ed3681c530049fedd67fb28a664f5a08752940
Author: Benjamin Otte <otte at gnome.org>
Date: Sat Jan 5 23:45:53 2008 +0100
add a socket-type property
diff --git a/libswfdec/swfdec_player.c b/libswfdec/swfdec_player.c
index 45ce8a9..2e2b728 100644
--- a/libswfdec/swfdec_player.c
+++ b/libswfdec/swfdec_player.c
@@ -621,7 +621,8 @@ enum {
PROP_SCALE,
PROP_SCRIPTING,
PROP_SYSTEM,
- PROP_MAX_RUNTIME
+ PROP_MAX_RUNTIME,
+ PROP_SOCKET_TYPE
};
G_DEFINE_TYPE (SwfdecPlayer, swfdec_player, SWFDEC_TYPE_AS_CONTEXT)
@@ -735,6 +736,9 @@ swfdec_player_get_property (GObject *object, guint param_id, GValue *value,
case PROP_MAX_RUNTIME:
g_value_set_ulong (value, priv->max_runtime);
break;
+ case PROP_SOCKET_TYPE:
+ g_value_set_gtype (value, priv->socket_type);
+ break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, param_id, pspec);
break;
@@ -852,6 +856,9 @@ swfdec_player_set_property (GObject *object, guint param_id, const GValue *value
case PROP_MAX_RUNTIME:
swfdec_player_set_maximum_runtime (player, g_value_get_ulong (value));
break;
+ case PROP_SOCKET_TYPE:
+ priv->socket_type = g_value_get_gtype (value);
+ break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, param_id, pspec);
break;
@@ -1611,6 +1618,9 @@ swfdec_player_class_init (SwfdecPlayerClass *klass)
g_object_class_install_property (object_class, PROP_MAX_RUNTIME,
g_param_spec_ulong ("max-runtime", "maximum runtime", "maximum time in msecs scripts may run in the player before aborting",
0, G_MAXULONG, 10 * 1000, G_PARAM_READWRITE));
+ g_object_class_install_property (object_class, PROP_SOCKET_TYPE,
+ g_param_spec_gtype ("socket type", "socket type", "type to use for creating sockets",
+ SWFDEC_TYPE_SOCKET, G_PARAM_READWRITE));
/**
* SwfdecPlayer::invalidate:
@@ -1780,6 +1790,7 @@ swfdec_player_init (SwfdecPlayer *player)
priv->external_actions = swfdec_ring_buffer_new_for_type (SwfdecPlayerExternalAction, 8);
priv->cache = swfdec_cache_new (50 * 1024 * 1024); /* 100 MB */
priv->bgcolor = SWFDEC_COLOR_COMBINE (0xFF, 0xFF, 0xFF, 0xFF);
+ priv->socket_type = SWFDEC_TYPE_SOCKET;
priv->runtime = g_timer_new ();
g_timer_stop (priv->runtime);
commit 270a2138f7e98c603a8688eb383143b0e376c046
Author: Benjamin Otte <otte at gnome.org>
Date: Sat Jan 5 22:36:52 2008 +0100
add a socket class
diff --git a/libswfdec/Makefile.am b/libswfdec/Makefile.am
index 17d18ce..b0efc23 100644
--- a/libswfdec/Makefile.am
+++ b/libswfdec/Makefile.am
@@ -124,6 +124,7 @@ libswfdec_source_files = \
swfdec_shape.c \
swfdec_shape_parser.c \
swfdec_shared_object.c \
+ swfdec_socket.c \
swfdec_sound.c \
swfdec_sound_object.c \
swfdec_sprite.c \
@@ -194,6 +195,7 @@ public_headers = \
swfdec_player_scripting.h \
swfdec_rectangle.h \
swfdec_script.h \
+ swfdec_socket.h \
swfdec_stream.h \
swfdec_system.h \
swfdec_url.h
diff --git a/libswfdec/swfdec.h b/libswfdec/swfdec.h
index 8cb955a..e2432eb 100644
--- a/libswfdec/swfdec.h
+++ b/libswfdec/swfdec.h
@@ -40,6 +40,7 @@
#include <libswfdec/swfdec_player.h>
#include <libswfdec/swfdec_player_scripting.h>
#include <libswfdec/swfdec_rectangle.h>
+#include <libswfdec/swfdec_socket.h>
#include <libswfdec/swfdec_stream.h>
#include <libswfdec/swfdec_system.h>
#include <libswfdec/swfdec_url.h>
diff --git a/libswfdec/swfdec_loader_internal.h b/libswfdec/swfdec_loader_internal.h
index 2a3439f..444610c 100644
--- a/libswfdec/swfdec_loader_internal.h
+++ b/libswfdec/swfdec_loader_internal.h
@@ -43,6 +43,10 @@ void swfdec_loader_set_data_type (SwfdecLoader * loader,
char * swfdec_loader_get_text (SwfdecLoader * loader,
guint version);
+/* swfdec_socket.c */
+void swfdec_socket_send (SwfdecSocket * sock,
+ SwfdecBuffer * buffer);
+
G_END_DECLS
#endif
diff --git a/libswfdec/swfdec_player.c b/libswfdec/swfdec_player.c
index 215d604..45ce8a9 100644
--- a/libswfdec/swfdec_player.c
+++ b/libswfdec/swfdec_player.c
@@ -2122,6 +2122,36 @@ swfdec_player_unroot_object (SwfdecPlayer *player, GObject *object)
priv->rooted_objects = g_list_delete_link (priv->rooted_objects, entry);
}
+/**
+ * swfdec_player_create_socket:
+ * @player: a #SwfdecPlayer
+ * @hostname: the host name to connect to.
+ * @port: the port to connect to
+ *
+ * Creates a new socket connecting to the given hostname and port.
+ *
+ * Returns: a new socket or %NULL if no socket implementation exists
+ **/
+/* FIXME: always return a socket? */
+SwfdecSocket *
+swfdec_player_create_socket (SwfdecPlayer *player, const char *hostname, guint port)
+{
+ SwfdecSocket *sock;
+ SwfdecSocketClass *klass;
+
+ g_return_val_if_fail (SWFDEC_IS_PLAYER (player), NULL);
+ g_return_val_if_fail (hostname != NULL, NULL);
+ g_return_val_if_fail (port > 0, NULL);
+
+ if (player->priv->socket_type == 0)
+ return NULL;
+ klass = g_type_class_ref (player->priv->socket_type);
+ sock = klass->create (hostname, port);
+ g_type_class_unref (klass);
+
+ return sock;
+}
+
/** PUBLIC API ***/
/**
diff --git a/libswfdec/swfdec_player_internal.h b/libswfdec/swfdec_player_internal.h
index f3fbb60..fbbac20 100644
--- a/libswfdec/swfdec_player_internal.h
+++ b/libswfdec/swfdec_player_internal.h
@@ -27,6 +27,7 @@
#include <libswfdec/swfdec_rect.h>
#include <libswfdec/swfdec_ringbuffer.h>
#include <libswfdec/swfdec_security.h>
+#include <libswfdec/swfdec_socket.h>
#include <libswfdec/swfdec_system.h>
G_BEGIN_DECLS
@@ -69,6 +70,7 @@ struct _SwfdecPlayerPrivate
SwfdecResource * resource; /* initial resource loaded */
SwfdecPlayerScripting *scripting; /* scripting object */
GHashTable * scripting_callbacks; /* GC string => SwfdecAsFunction mapping of script callbacks */
+ GType socket_type; /* type to use for creating sockets */
/* stage properties */
guint internal_width; /* width used by the scripting engine */
guint internal_height; /* height used by the scripting engine */
@@ -159,6 +161,10 @@ void swfdec_player_set_export_class (SwfdecPlayer * player,
const char * name,
SwfdecAsObject * object);
+SwfdecSocket * swfdec_player_create_socket (SwfdecPlayer * player,
+ const char * hostname,
+ guint port);
+
#define swfdec_player_is_mouse_pressed(player) ((player)->priv->mouse_button & 1)
void swfdec_player_invalidate (SwfdecPlayer * player,
const SwfdecRect * rect);
diff --git a/libswfdec/swfdec_socket.c b/libswfdec/swfdec_socket.c
new file mode 100644
index 0000000..723050c
--- /dev/null
+++ b/libswfdec/swfdec_socket.c
@@ -0,0 +1,99 @@
+/* Swfdec
+ * Copyright (C) 2008 Benjamin Otte <otte at gnome.org>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301 USA
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include "swfdec_socket.h"
+#include "swfdec_loader_internal.h"
+
+/*** GTK-DOC ***/
+
+/**
+ * SECTION:SwfdecSocket
+ * @title: SwfdecSocket
+ * @short_description: object used for network connections
+ *
+ * SwfdecSockets are used to implement TCP streams. These are for example used
+ * to implement RTMP support or the XMLSocket script class. Backends are
+ * supposed to provide an implementation for this, as by default this class is
+ * unimplemented. However, libswfdec-gtk or other convenience libraries provide
+ * a socket implementation by default.
+ *
+ * The socket implementation used by a #SwfdecPlayer can be set with the
+ * SwfdecPlayer:socket-type property.
+ */
+
+/**
+ * SwfdecSocket:
+ *
+ * This is the base object used for providing input. It is abstract, create a
+ * subclass to provide your own socket implementation. All members are
+ * considered private.
+ */
+
+/**
+ * SwfdecSocketClass:
+ * @create: Create a new socket for the given hostname and port. This function
+ * must return a new socket, returning %NULL is not allowed. If you
+ * encounter an error, create a new socket and call
+ * swfdec_stream_error() on it.
+ * @send: Called to send data down the given socket. This function will only be
+ * called when the socket is open. You get passed a reference to the
+ * buffer, so it is your responsibility to call swfdec_buffer_unref() on
+ * it when you are done with it.
+ *
+ * This is the socket class. When you create a subclass, you need to implement
+ * the functions listed above.
+ */
+
+/*** SWFDEC_SOCKET ***/
+
+G_DEFINE_ABSTRACT_TYPE (SwfdecSocket, swfdec_socket, SWFDEC_TYPE_STREAM)
+
+static void
+swfdec_socket_class_init (SwfdecSocketClass *klass)
+{
+}
+
+static void
+swfdec_socket_init (SwfdecSocket *socket)
+{
+}
+
+/**
+ * swfdec_socket_send:
+ * @sock: a #SwfdecSocket
+ * @buffer: data to send to the stream
+ *
+ * Pushes the given @buffer down the stream.
+ **/
+void
+swfdec_socket_send (SwfdecSocket *sock, SwfdecBuffer *buffer)
+{
+ SwfdecSocketClass *klass;
+
+ g_return_if_fail (SWFDEC_IS_SOCKET (sock));
+ g_return_if_fail (buffer != NULL);
+
+ klass = SWFDEC_SOCKET_GET_CLASS (sock);
+ klass->send (sock, buffer);
+}
+
diff --git a/libswfdec/swfdec_socket.h b/libswfdec/swfdec_socket.h
new file mode 100644
index 0000000..7e062ca
--- /dev/null
+++ b/libswfdec/swfdec_socket.h
@@ -0,0 +1,58 @@
+/* Swfdec
+ * Copyright (C) 2008 Benjamin Otte <otte at gnome.org>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301 USA
+ */
+
+#ifndef _SWFDEC_SOCKET_H_
+#define _SWFDEC_SOCKET_H_
+
+#include <glib-object.h>
+#include <libswfdec/swfdec_stream.h>
+
+G_BEGIN_DECLS
+
+typedef struct _SwfdecSocket SwfdecSocket;
+typedef struct _SwfdecSocketClass SwfdecSocketClass;
+
+#define SWFDEC_TYPE_SOCKET (swfdec_socket_get_type())
+#define SWFDEC_IS_SOCKET(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), SWFDEC_TYPE_SOCKET))
+#define SWFDEC_IS_SOCKET_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), SWFDEC_TYPE_SOCKET))
+#define SWFDEC_SOCKET(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), SWFDEC_TYPE_SOCKET, SwfdecSocket))
+#define SWFDEC_SOCKET_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), SWFDEC_TYPE_SOCKET, SwfdecSocketClass))
+#define SWFDEC_SOCKET_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), SWFDEC_TYPE_SOCKET, SwfdecSocketClass))
+
+struct _SwfdecSocket
+{
+ SwfdecStream stream;
+};
+
+struct _SwfdecSocketClass
+{
+ SwfdecStreamClass stream_class;
+
+ SwfdecSocket * (* create) (const char * hostname,
+ guint port);
+
+ void (* send) (SwfdecSocket * socket,
+ SwfdecBuffer * buffer);
+};
+
+GType swfdec_socket_get_type (void);
+
+
+G_END_DECLS
+#endif
commit 996dd227f81d79077dd76517d3a20dbc13228457
Author: Benjamin Otte <otte at gnome.org>
Date: Sat Jan 5 13:35:49 2008 +0100
update tests to new loaders
diff --git a/test/sound/sound.c b/test/sound/sound.c
index 1a4eac7..5715ce7 100644
--- a/test/sound/sound.c
+++ b/test/sound/sound.c
@@ -233,9 +233,11 @@ run_test (const char *filename)
g_free (basename);
loader = swfdec_file_loader_new (filename);
- if (loader->error) {
- g_print (" ERROR: %s\n", loader->error);
+ g_object_get (loader, "error", &basename, NULL);
+ if (basename) {
+ g_print (" ERROR: %s\n", basename);
g_object_unref (loader);
+ g_free (basename);
goto error;
}
player = swfdec_player_new (NULL);
commit 8e34d5a44e1d8c89938fb80f1bbb922812cd7911
Author: Benjamin Otte <otte at gnome.org>
Date: Sat Jan 5 13:35:37 2008 +0100
no sound test in here
diff --git a/test/rtmp/Makefile.am b/test/rtmp/Makefile.am
index c9c633b..a0c4546 100644
--- a/test/rtmp/Makefile.am
+++ b/test/rtmp/Makefile.am
@@ -1,6 +1,5 @@
noinst_PROGRAMS = rtmp-server
-check_PROGRAMS = sound
TESTS = $(check_PROGRAMS)
rtmp_server_SOURCES = rtmp_server.c
commit f08ee88e4018cf43d6275b74aa698ea508fc9536
Author: Benjamin Otte <otte at gnome.org>
Date: Sat Jan 5 13:28:47 2008 +0100
get rid of the slow loader
The current loader design does not really allow writing a proxy loader the
way it was written. And since the slow loader does the wrong thing technically
(It should cnfigure the bandwidth, not the loading duration) I decided to get
rid of it.
If anyone wants to write a new one, It should probably implement the
SwfdecStreamTarget interface.
diff --git a/player/Makefile.am b/player/Makefile.am
index 53e52c1..605e409 100644
--- a/player/Makefile.am
+++ b/player/Makefile.am
@@ -1,7 +1,6 @@
noinst_PROGRAMS = swfplay
swfplay_SOURCES = \
- swfdec_slow_loader.c \
swfplay.c
#swfdebug_SOURCES = \
@@ -12,9 +11,6 @@ swfplay_SOURCES = \
# swfdec_player_manager.c \
# swfdec_debug_widget.c
-noinst_HEADERS = \
- swfdec_slow_loader.h
-
swfplay_CFLAGS = $(GLOBAL_CFLAGS) $(GTK_CFLAGS) $(SWFDEC_GTK_CFLAGS)
swfplay_LDFLAGS = $(SWFDEC_GTK_LIBS) $(GTK_LIBS)
diff --git a/player/swfdec_slow_loader.c b/player/swfdec_slow_loader.c
deleted file mode 100644
index 4261800..0000000
--- a/player/swfdec_slow_loader.c
+++ /dev/null
@@ -1,153 +0,0 @@
-/* Swfdec
- * Copyright (C) 2006 Benjamin Otte <otte at gnome.org>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor,
- * Boston, MA 02110-1301 USA
- */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include "swfdec_slow_loader.h"
-#include <libswfdec-gtk/swfdec-gtk.h>
-
-/*** SwfdecSlowLoader ***/
-
-G_DEFINE_TYPE (SwfdecSlowLoader, swfdec_slow_loader, SWFDEC_TYPE_LOADER)
-
-static void
-swfdec_slow_loader_notify_cb (SwfdecLoader *child, GParamSpec *pspec, SwfdecLoader *loader)
-{
- if (g_str_equal (pspec->name, "size")) {
- swfdec_loader_set_size (loader, swfdec_loader_get_size (child));
- }
-}
-
-static void
-swfdec_slow_loader_dispose (GObject *object)
-{
- SwfdecSlowLoader *slow = SWFDEC_SLOW_LOADER (object);
-
- g_signal_handlers_disconnect_by_func (slow->loader, swfdec_slow_loader_notify_cb, slow);
- g_object_unref (slow->loader);
- if (slow->timeout_id) {
- g_source_remove (slow->timeout_id);
- slow->timeout_id = 0;
- }
-
- G_OBJECT_CLASS (swfdec_slow_loader_parent_class)->dispose (object);
-}
-
-static gboolean
-swfdec_slow_loader_tick (gpointer data)
-{
- SwfdecSlowLoader *slow = data;
- SwfdecBuffer *buffer;
- guint total, amount;
-
- amount = swfdec_buffer_queue_get_depth (slow->loader->queue);
- if (amount > 0) {
- total = swfdec_buffer_queue_get_offset (slow->loader->queue);
- total += amount;
- total *= slow->tick_time;
- total += slow->duration - 1; /* rounding */
- amount = MIN (amount, total / slow->duration);
- buffer = swfdec_buffer_queue_pull (slow->loader->queue, amount);
-#if 0
- g_print ("pushing %u bytes (%u/%u total)\n",
- amount, swfdec_buffer_queue_get_offset (slow->loader->queue),
- swfdec_buffer_queue_get_offset (slow->loader->queue) +
- swfdec_buffer_queue_get_depth (slow->loader->queue));
-#endif
- swfdec_loader_push (SWFDEC_LOADER (slow), buffer);
- if (swfdec_buffer_queue_get_depth (slow->loader->queue) > 0)
- return TRUE;
- }
-
- if (slow->loader->error) {
- swfdec_loader_error (SWFDEC_LOADER (slow), slow->loader->error);
- slow->timeout_id = 0;
- return FALSE;
- } else {
- gboolean eof;
- g_object_get (slow->loader, "eof", &eof, NULL);
- if (eof) {
- swfdec_loader_eof (SWFDEC_LOADER (slow));
- slow->timeout_id = 0;
- return FALSE;
- } else {
- return TRUE;
- }
- }
-}
-
-static void
-swfdec_slow_loader_initialize (SwfdecSlowLoader *slow, SwfdecLoader *loader, guint duration)
-{
- glong size;
-
- slow->tick_time = 100;
- slow->duration = duration * 1000;
- slow->loader = loader;
- g_signal_connect (loader, "notify", G_CALLBACK (swfdec_slow_loader_notify_cb), slow);
- size = swfdec_loader_get_size (loader);
- if (size >= 0)
- swfdec_loader_set_size (SWFDEC_LOADER (slow), size);
- slow->timeout_id = g_timeout_add (slow->tick_time, swfdec_slow_loader_tick, slow);
- swfdec_loader_open (SWFDEC_LOADER (slow), 0);
-}
-
-static void
-swfdec_slow_loader_load (SwfdecLoader *loader, SwfdecLoader *parent,
- SwfdecLoaderRequest request, const char *data, gsize data_len)
-{
- SwfdecSlowLoader *slow = SWFDEC_SLOW_LOADER (loader);
- SwfdecLoader *new;
-
- /* FIXME: include request and data */
- new = swfdec_gtk_loader_new (swfdec_url_get_url (swfdec_loader_get_url (loader)));
- swfdec_slow_loader_initialize (slow, new, SWFDEC_SLOW_LOADER (parent)->duration / 1000);
-}
-
-static void
-swfdec_slow_loader_class_init (SwfdecSlowLoaderClass *klass)
-{
- GObjectClass *object_class = G_OBJECT_CLASS (klass);
- SwfdecLoaderClass *loader_class = SWFDEC_LOADER_CLASS (klass);
-
- object_class->dispose = swfdec_slow_loader_dispose;
-
- loader_class->load = swfdec_slow_loader_load;
-}
-
-static void
-swfdec_slow_loader_init (SwfdecSlowLoader *slow_loader)
-{
-}
-
-SwfdecLoader *
-swfdec_slow_loader_new (SwfdecLoader *loader, guint duration)
-{
- SwfdecSlowLoader *ret;
-
- g_return_val_if_fail (SWFDEC_IS_LOADER (loader), NULL);
- g_return_val_if_fail (duration > 0, NULL);
-
- ret = g_object_new (SWFDEC_TYPE_SLOW_LOADER, "url", loader->url, NULL);
- swfdec_slow_loader_initialize (ret, loader, duration);
- return SWFDEC_LOADER (ret);
-}
-
diff --git a/player/swfdec_slow_loader.h b/player/swfdec_slow_loader.h
deleted file mode 100644
index d10ce93..0000000
--- a/player/swfdec_slow_loader.h
+++ /dev/null
@@ -1,60 +0,0 @@
-/* Swfdec
- * Copyright (C) 2006 Benjamin Otte <otte at gnome.org>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor,
- * Boston, MA 02110-1301 USA
- */
-
-#ifndef _SWFDEC_SLOW_LOADER_H_
-#define _SWFDEC_SLOW_LOADER_H_
-
-#include <libswfdec/swfdec.h>
-
-G_BEGIN_DECLS
-
-
-typedef struct _SwfdecSlowLoader SwfdecSlowLoader;
-typedef struct _SwfdecSlowLoaderClass SwfdecSlowLoaderClass;
-
-#define SWFDEC_TYPE_SLOW_LOADER (swfdec_slow_loader_get_type())
-#define SWFDEC_IS_SLOW_LOADER(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), SWFDEC_TYPE_SLOW_LOADER))
-#define SWFDEC_IS_SLOW_LOADER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), SWFDEC_TYPE_SLOW_LOADER))
-#define SWFDEC_SLOW_LOADER(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), SWFDEC_TYPE_SLOW_LOADER, SwfdecSlowLoader))
-#define SWFDEC_SLOW_LOADER_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), SWFDEC_TYPE_SLOW_LOADER, SwfdecSlowLoaderClass))
-#define SWFDEC_SLOW_LOADER_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), SWFDEC_TYPE_SLOW_LOADER, SwfdecSlowLoaderClass))
-
-struct _SwfdecSlowLoader
-{
- SwfdecLoader parent;
-
- SwfdecLoader * loader; /* what we load */
- guint tick_time; /* how many msecs each tick takes */
- guint duration; /* total duration in msecs for loading */
- guint timeout_id; /* id from g_timeout_add */
-};
-
-struct _SwfdecSlowLoaderClass
-{
- SwfdecLoaderClass loader_class;
-};
-
-GType swfdec_slow_loader_get_type (void);
-
-SwfdecLoader * swfdec_slow_loader_new (SwfdecLoader * loader,
- guint duration);
-
-
-G_END_DECLS
-#endif
diff --git a/player/swfplay.c b/player/swfplay.c
index 79978be..a21586e 100644
--- a/player/swfplay.c
+++ b/player/swfplay.c
@@ -26,8 +26,6 @@
#include <libswfdec-gtk/swfdec-gtk.h>
-#include "swfdec_slow_loader.h"
-
static GMainLoop *loop = NULL;
static void
@@ -101,7 +99,6 @@ sanitize_url (const char *s)
int
main (int argc, char *argv[])
{
- int delay = 0;
int speed = 100;
int max_runtime = 0;
SwfdecLoader *loader;
@@ -116,7 +113,6 @@ main (int argc, char *argv[])
GOptionEntry options[] = {
{ "always-gc", 'g', 0, G_OPTION_ARG_NONE, &gc, "run the garbage collector as often as possible", NULL },
- { "delay", 'd', 0, G_OPTION_ARG_INT, &delay, "make loading of resources take time", "SECS" },
{ "image", 'i', 0, G_OPTION_ARG_NONE, &use_image, "use an intermediate image surface for drawing", NULL },
{ "max-runtime", 0, 0, G_OPTION_ARG_INT, &max_runtime, "maximum time scripts run before aborting the player", "SECS" },
{ "no-scripts", 0, 0, G_OPTION_ARG_NONE, &no_scripts, "don't execute scripts affecting the application", NULL },
@@ -151,9 +147,11 @@ main (int argc, char *argv[])
s = sanitize_url (argv[1]);
loader = swfdec_gtk_loader_new (s);
g_free (s);
- if (loader->error) {
- g_printerr ("Couldn't open file \"%s\": %s\n", argv[1], loader->error);
+ g_object_get (loader, "error", &s, NULL);
+ if (s) {
+ g_printerr ("Couldn't open file \"%s\": %s\n", argv[1], s);
g_object_unref (loader);
+ g_free (s);
return 1;
}
loop = g_main_loop_new (NULL, TRUE);
@@ -178,9 +176,6 @@ main (int argc, char *argv[])
if (!no_scripts)
g_signal_connect (player, "fscommand", G_CALLBACK (do_fscommand), window);
- if (delay)
- loader = swfdec_slow_loader_new (loader, delay);
-
swfdec_player_set_loader_with_variables (player, loader, variables);
swfdec_gtk_player_set_playing (SWFDEC_GTK_PLAYER (player), TRUE);
commit 03d96dece1a5aef7f3212d4999b8a3ff71fff43f
Author: Benjamin Otte <otte at gnome.org>
Date: Sat Jan 5 13:25:13 2008 +0100
make SwfdecLoader a SwfecStream
diff --git a/libswfdec-gtk/swfdec_gtk_loader.c b/libswfdec-gtk/swfdec_gtk_loader.c
index 80d95c7..26979ce 100644
--- a/libswfdec-gtk/swfdec_gtk_loader.c
+++ b/libswfdec-gtk/swfdec_gtk_loader.c
@@ -100,7 +100,8 @@ swfdec_gtk_loader_ensure_open (SwfdecGtkLoader *gtk)
real_uri = soup_uri_to_string (soup_message_get_uri (gtk->message), FALSE);
swfdec_gtk_loader_set_size (gtk);
- swfdec_loader_open (SWFDEC_LOADER (gtk), real_uri);
+ swfdec_loader_set_url (SWFDEC_LOADER (gtk), real_uri);
+ swfdec_stream_open (SWFDEC_STREAM (gtk));
gtk->opened = TRUE;
g_free (real_uri);
}
@@ -114,7 +115,7 @@ swfdec_gtk_loader_push (SoupMessage *msg, gpointer loader)
swfdec_gtk_loader_ensure_open (gtk);
buffer = swfdec_buffer_new_and_alloc (msg->response.length);
memcpy (buffer->data, msg->response.body, msg->response.length);
- swfdec_loader_push (loader, buffer);
+ swfdec_stream_push (loader, buffer);
}
static void
@@ -122,10 +123,10 @@ swfdec_gtk_loader_finished (SoupMessage *msg, gpointer loader)
{
if (SOUP_STATUS_IS_SUCCESSFUL (msg->status_code)) {
swfdec_gtk_loader_ensure_open (loader);
- swfdec_loader_eof (loader);
+ swfdec_stream_eof (loader);
} else {
char *s = g_strdup_printf ("%u %s", msg->status_code, msg->reason_phrase);
- swfdec_loader_error (loader, s);
+ swfdec_stream_error (loader, s);
g_free (s);
}
}
@@ -178,14 +179,14 @@ swfdec_gtk_loader_load (SwfdecLoader *loader, SwfdecLoader *parent,
#ifdef HAVE_HTTP
static void
-swfdec_gtk_loader_close (SwfdecLoader *loader)
+swfdec_gtk_loader_close (SwfdecStream *stream)
{
- SwfdecGtkLoader *gtk = SWFDEC_GTK_LOADER (loader);
+ SwfdecGtkLoader *gtk = SWFDEC_GTK_LOADER (stream);
if (gtk->message) {
gboolean eof;
- g_object_get (loader, "eof", &eof, NULL);
+ g_object_get (stream, "eof", &eof, NULL);
if (!eof) {
SwfdecGtkLoaderClass *klass = SWFDEC_GTK_LOADER_GET_CLASS (gtk);
@@ -202,12 +203,14 @@ swfdec_gtk_loader_class_init (SwfdecGtkLoaderClass *klass)
{
#ifdef HAVE_HTTP
GObjectClass *object_class = G_OBJECT_CLASS (klass);
+ SwfdecStreamClass *stream_class = SWFDEC_STREAM_CLASS (klass);
SwfdecLoaderClass *loader_class = SWFDEC_LOADER_CLASS (klass);
object_class->dispose = swfdec_gtk_loader_dispose;
+ stream_class->close = swfdec_gtk_loader_close;
+
loader_class->load = swfdec_gtk_loader_load;
- loader_class->close = swfdec_gtk_loader_close;
klass->session = soup_session_async_new ();
#endif
diff --git a/libswfdec-gtk/swfdec_playback_alsa.c b/libswfdec-gtk/swfdec_playback_alsa.c
index dd539c5..bddd189 100644
--- a/libswfdec-gtk/swfdec_playback_alsa.c
+++ b/libswfdec-gtk/swfdec_playback_alsa.c
@@ -118,7 +118,7 @@ try_write (Stream *stream)
}
static void
-swfdec_stream_remove_handlers (Stream *stream)
+swfdec_playback_stream_remove_handlers (Stream *stream)
{
guint i;
@@ -131,7 +131,7 @@ swfdec_stream_remove_handlers (Stream *stream)
}
}
-static void swfdec_stream_start (Stream *stream);
+static void swfdec_playback_stream_start (Stream *stream);
static gboolean
handle_stream (GIOChannel *source, GIOCondition cond, gpointer data)
{
@@ -140,7 +140,7 @@ handle_stream (GIOChannel *source, GIOCondition cond, gpointer data)
state = snd_pcm_state (stream->pcm);
if (state != SND_PCM_STATE_RUNNING) {
- swfdec_stream_start (stream);
+ swfdec_playback_stream_start (stream);
} else {
try_write (stream);
}
@@ -148,7 +148,7 @@ handle_stream (GIOChannel *source, GIOCondition cond, gpointer data)
}
static void
-swfdec_stream_install_handlers (Stream *stream)
+swfdec_playback_stream_install_handlers (Stream *stream)
{
GIOChannel *channel;
@@ -172,7 +172,7 @@ swfdec_stream_install_handlers (Stream *stream)
}
static void
-swfdec_stream_start (Stream *stream)
+swfdec_playback_stream_start (Stream *stream)
{
snd_pcm_state_t state = snd_pcm_state (stream->pcm);
switch (state) {
@@ -186,7 +186,7 @@ swfdec_stream_start (Stream *stream)
//g_print ("offset: %u (delay: %ld)\n", sound->offset, delay);
if (try_write (stream)) {
ALSA_ERROR (snd_pcm_start (stream->pcm), "error starting",);
- swfdec_stream_install_handlers (stream);
+ swfdec_playback_stream_install_handlers (stream);
}
break;
case SND_PCM_STATE_OPEN:
@@ -201,7 +201,7 @@ swfdec_stream_start (Stream *stream)
}
static void
-swfdec_stream_open (SwfdecPlayback *sound, SwfdecAudio *audio)
+swfdec_playback_stream_open (SwfdecPlayback *sound, SwfdecAudio *audio)
{
Stream *stream;
snd_pcm_t *ret;
@@ -259,7 +259,7 @@ swfdec_stream_open (SwfdecPlayback *sound, SwfdecAudio *audio)
if (stream->n_sources > 0)
stream->sources = g_new0 (GSource *, stream->n_sources);
sound->streams = g_list_prepend (sound->streams, stream);
- swfdec_stream_start (stream);
+ swfdec_playback_stream_start (stream);
return;
fail:
@@ -267,10 +267,10 @@ fail:
}
static void
-swfdec_stream_close (Stream *stream)
+swfdec_playback_stream_close (Stream *stream)
{
ALSA_TRY (snd_pcm_close (stream->pcm), "failed closing");
- swfdec_stream_remove_handlers (stream);
+ swfdec_playback_stream_remove_handlers (stream);
g_free (stream->sources);
stream->sound->streams = g_list_remove (stream->sound->streams, stream);
g_object_unref (stream->audio);
@@ -298,7 +298,7 @@ advance_before (SwfdecPlayer *player, guint msecs, guint audio_samples, gpointer
static void
audio_added (SwfdecPlayer *player, SwfdecAudio *audio, SwfdecPlayback *sound)
{
- swfdec_stream_open (sound, audio);
+ swfdec_playback_stream_open (sound, audio);
}
static void
@@ -309,7 +309,7 @@ audio_removed (SwfdecPlayer *player, SwfdecAudio *audio, SwfdecPlayback *sound)
for (walk = sound->streams; walk; walk = walk->next) {
Stream *stream = walk->data;
if (stream->audio == audio) {
- swfdec_stream_close (stream);
+ swfdec_playback_stream_close (stream);
return;
}
}
@@ -330,7 +330,7 @@ swfdec_playback_open (SwfdecPlayer *player, GMainContext *context)
g_signal_connect (player, "audio-added", G_CALLBACK (audio_added), sound);
g_signal_connect (player, "audio-removed", G_CALLBACK (audio_removed), sound);
for (walk = swfdec_player_get_audio (player); walk; walk = walk->next) {
- swfdec_stream_open (sound, walk->data);
+ swfdec_playback_stream_open (sound, walk->data);
}
g_main_context_ref (context);
sound->context = context;
@@ -349,7 +349,7 @@ swfdec_playback_close (SwfdecPlayback *sound)
#define REMOVE_HANDLER(obj,func,data) REMOVE_HANDLER_FULL (obj, func, data, 1)
while (sound->streams)
- swfdec_stream_close (sound->streams->data);
+ swfdec_playback_stream_close (sound->streams->data);
REMOVE_HANDLER (sound->player, advance_before, sound);
REMOVE_HANDLER (sound->player, audio_added, sound);
REMOVE_HANDLER (sound->player, audio_removed, sound);
diff --git a/libswfdec-gtk/swfdec_playback_oss.c b/libswfdec-gtk/swfdec_playback_oss.c
index 9c94252..c2eb493 100644
--- a/libswfdec-gtk/swfdec_playback_oss.c
+++ b/libswfdec-gtk/swfdec_playback_oss.c
@@ -108,7 +108,7 @@ handle_stream (GIOChannel *source, GIOCondition cond, gpointer data)
}
static void
-swfdec_stream_open (SwfdecPlayback *sound, SwfdecAudio *audio)
+swfdec_playback_stream_open (SwfdecPlayback *sound, SwfdecAudio *audio)
{
GIOChannel *channel;
Stream *stream;
@@ -171,7 +171,7 @@ swfdec_stream_open (SwfdecPlayback *sound, SwfdecAudio *audio)
}
static void
-swfdec_stream_close (Stream *stream)
+swfdec_playback_stream_close (Stream *stream)
{
close (stream->dsp_fd);
g_source_destroy (stream->source);
@@ -202,7 +202,7 @@ advance_before (SwfdecPlayer *player, guint msecs, guint audio_samples, gpointer
static void
audio_added (SwfdecPlayer *player, SwfdecAudio *audio, SwfdecPlayback *sound)
{
- swfdec_stream_open (sound, audio);
+ swfdec_playback_stream_open (sound, audio);
}
static void
@@ -213,7 +213,7 @@ audio_removed (SwfdecPlayer *player, SwfdecAudio *audio, SwfdecPlayback *sound)
for (walk = sound->streams; walk; walk = walk->next) {
Stream *stream = walk->data;
if (stream->audio == audio) {
- swfdec_stream_close (stream);
+ swfdec_playback_stream_close (stream);
return;
}
}
@@ -235,7 +235,7 @@ swfdec_playback_open (SwfdecPlayer *player, GMainContext *context)
g_signal_connect (player, "audio-added", G_CALLBACK (audio_added), sound);
g_signal_connect (player, "audio-removed", G_CALLBACK (audio_removed), sound);
for (walk = swfdec_player_get_audio (player); walk; walk = walk->next) {
- swfdec_stream_open (sound, walk->data);
+ swfdec_playback_stream_open (sound, walk->data);
}
g_main_context_ref (context);
sound->context = context;
@@ -254,7 +254,7 @@ swfdec_playback_close (SwfdecPlayback *sound)
#define REMOVE_HANDLER(obj,func,data) REMOVE_HANDLER_FULL (obj, func, data, 1)
while (sound->streams)
- swfdec_stream_close (sound->streams->data);
+ swfdec_playback_stream_close (sound->streams->data);
REMOVE_HANDLER (sound->player, advance_before, sound);
REMOVE_HANDLER (sound->player, audio_added, sound);
REMOVE_HANDLER (sound->player, audio_removed, sound);
diff --git a/libswfdec-gtk/swfdec_playback_pa.c b/libswfdec-gtk/swfdec_playback_pa.c
index 825775b..755b033 100644
--- a/libswfdec-gtk/swfdec_playback_pa.c
+++ b/libswfdec-gtk/swfdec_playback_pa.c
@@ -112,7 +112,7 @@ stream_drain_complete (pa_stream *pa, int success, void *data)
}
static void
-swfdec_stream_close (Stream *stream)
+swfdec_playback_stream_close (Stream *stream)
{
/* Pull it off of the active stream list. */
stream->sound->streams = g_list_remove (stream->sound->streams, stream);
@@ -148,7 +148,7 @@ stream_state_callback (pa_stream *pa, void *data)
}
static void
-swfdec_stream_open (SwfdecPlayback *sound, SwfdecAudio *audio)
+swfdec_playback_stream_open (SwfdecPlayback *sound, SwfdecAudio *audio)
{
Stream *stream;
pa_sample_spec spec = {
@@ -178,7 +178,7 @@ swfdec_stream_open (SwfdecPlayback *sound, SwfdecAudio *audio)
);
if (stream->pa == NULL) {
g_printerr("Failed to create PA stream\n");
- swfdec_stream_close(stream);
+ swfdec_playback_stream_close(stream);
return;
}
@@ -200,7 +200,7 @@ swfdec_stream_open (SwfdecPlayback *sound, SwfdecAudio *audio)
if (err != 0) {
g_printerr ("Failed to connect PA stream: %s\n",
pa_strerror(pa_context_errno(sound->pa)));
- swfdec_stream_close(stream);
+ swfdec_playback_stream_close(stream);
return;
}
}
@@ -226,7 +226,7 @@ advance_before (SwfdecPlayer *player, guint msecs, guint audio_samples, gpointer
static void
audio_added (SwfdecPlayer *player, SwfdecAudio *audio, SwfdecPlayback *sound)
{
- swfdec_stream_open (sound, audio);
+ swfdec_playback_stream_open (sound, audio);
}
static void
@@ -237,7 +237,7 @@ audio_removed (SwfdecPlayer *player, SwfdecAudio *audio, SwfdecPlayback *sound)
for (walk = sound->streams; walk; walk = walk->next) {
Stream *stream = walk->data;
if (stream->audio == audio) {
- swfdec_stream_close (stream);
+ swfdec_playback_stream_close (stream);
return;
}
}
@@ -299,7 +299,7 @@ swfdec_playback_open (SwfdecPlayer *player, GMainContext *context)
);
for (walk = swfdec_player_get_audio (player); walk; walk = walk->next) {
- swfdec_stream_open (sound, walk->data);
+ swfdec_playback_stream_open (sound, walk->data);
}
g_main_context_ref (context);
sound->context = context;
@@ -327,7 +327,7 @@ swfdec_playback_close (SwfdecPlayback *sound)
#define REMOVE_HANDLER(obj,func,data) REMOVE_HANDLER_FULL (obj, func, data, 1)
while (sound->streams)
- swfdec_stream_close (sound->streams->data);
+ swfdec_playback_stream_close (sound->streams->data);
REMOVE_HANDLER (sound->player, advance_before, sound);
REMOVE_HANDLER (sound->player, audio_added, sound);
REMOVE_HANDLER (sound->player, audio_removed, sound);
diff --git a/libswfdec/Makefile.am b/libswfdec/Makefile.am
index a8e2cf6..17d18ce 100644
--- a/libswfdec/Makefile.am
+++ b/libswfdec/Makefile.am
@@ -92,7 +92,6 @@ libswfdec_source_files = \
swfdec_load_object.c \
swfdec_load_object_as.c \
swfdec_loader.c \
- swfdec_loadertarget.c \
swfdec_loadvars_as.c \
swfdec_local_connection.c \
swfdec_microphone.c \
@@ -251,7 +250,6 @@ noinst_HEADERS = \
swfdec_interval.h \
swfdec_load_object.h \
swfdec_loader_internal.h \
- swfdec_loadertarget.h \
swfdec_marshal.h \
swfdec_morph_movie.h \
swfdec_morphshape.h \
diff --git a/libswfdec/swfdec_file_loader.c b/libswfdec/swfdec_file_loader.c
index 53c7bb8..1b498ac 100644
--- a/libswfdec/swfdec_file_loader.c
+++ b/libswfdec/swfdec_file_loader.c
@@ -25,7 +25,6 @@
#include "swfdec_loader_internal.h"
#include "swfdec_buffer.h"
#include "swfdec_debug.h"
-#include "swfdec_loadertarget.h"
#include "swfdec_player_internal.h"
/**
@@ -42,6 +41,7 @@ static void
swfdec_file_loader_load (SwfdecLoader *loader, SwfdecLoader *parent, SwfdecLoaderRequest request,
const char *data, gsize data_len)
{
+ SwfdecStream *stream = SWFDEC_STREAM (loader);
const SwfdecURL *url;
SwfdecBuffer *buffer;
GError *error = NULL;
@@ -49,11 +49,11 @@ swfdec_file_loader_load (SwfdecLoader *loader, SwfdecLoader *parent, SwfdecLoade
url = swfdec_loader_get_url (loader);
if (!g_str_equal (swfdec_url_get_protocol (url), "file")) {
- swfdec_loader_error (loader, "Don't know how to handle this protocol");
+ swfdec_stream_error (stream, "Don't know how to handle this protocol");
return;
}
if (swfdec_url_get_host (url)) {
- swfdec_loader_error (loader, "filenames cannot have hostnames");
+ swfdec_stream_error (stream, "filenames cannot have hostnames");
return;
}
@@ -62,13 +62,13 @@ swfdec_file_loader_load (SwfdecLoader *loader, SwfdecLoader *parent, SwfdecLoade
buffer = swfdec_buffer_new_from_file (real, &error);
g_free (real);
if (buffer == NULL) {
- swfdec_loader_error (loader, error->message);
+ swfdec_stream_error (stream, error->message);
g_error_free (error);
} else {
swfdec_loader_set_size (loader, buffer->length);
- swfdec_loader_open (loader, 0);
- swfdec_loader_push (loader, buffer);
- swfdec_loader_eof (loader);
+ swfdec_stream_open (stream);
+ swfdec_stream_push (stream, buffer);
+ swfdec_stream_eof (stream);
}
}
@@ -99,6 +99,7 @@ swfdec_file_loader_new (const char *filename)
{
SwfdecBuffer *buf;
SwfdecLoader *loader;
+ SwfdecStream *stream;
GError *error = NULL;
char *url_string;
SwfdecURL *url;
@@ -121,15 +122,16 @@ swfdec_file_loader_new (const char *filename)
url = swfdec_url_new (url_string);
g_free (url_string);
loader = g_object_new (SWFDEC_TYPE_FILE_LOADER, "url", url, NULL);
+ stream = SWFDEC_STREAM (loader);
swfdec_url_free (url);
if (buf == NULL) {
- swfdec_loader_error (loader, error->message);
+ swfdec_stream_error (stream, error->message);
g_error_free (error);
} else {
swfdec_loader_set_size (loader, buf->length);
- swfdec_loader_open (loader, 0);
- swfdec_loader_push (loader, buf);
- swfdec_loader_eof (loader);
+ swfdec_stream_open (stream);
+ swfdec_stream_push (stream, buf);
+ swfdec_stream_eof (stream);
}
return loader;
}
diff --git a/libswfdec/swfdec_load_object.c b/libswfdec/swfdec_load_object.c
index 5b659f2..72c1ceb 100644
--- a/libswfdec/swfdec_load_object.c
+++ b/libswfdec/swfdec_load_object.c
@@ -28,22 +28,23 @@
#include "swfdec_as_strings.h"
#include "swfdec_debug.h"
#include "swfdec_loader_internal.h"
-#include "swfdec_loadertarget.h"
+#include "swfdec_stream_target.h"
#include "swfdec_player_internal.h"
#include "swfdec_resource_request.h"
-/*** SWFDEC_LOADER_TARGET ***/
+/*** SWFDEC_STREAM_TARGET ***/
static SwfdecPlayer *
-swfdec_load_object_loader_target_get_player (SwfdecLoaderTarget *target)
+swfdec_load_object_stream_target_get_player (SwfdecStreamTarget *target)
{
return SWFDEC_PLAYER (SWFDEC_AS_OBJECT (target)->context);
}
static void
-swfdec_load_object_loader_target_parse (SwfdecLoaderTarget *target,
- SwfdecLoader *loader)
+swfdec_load_object_stream_target_parse (SwfdecStreamTarget *target,
+ SwfdecStream *stream)
{
+ SwfdecLoader *loader = SWFDEC_LOADER (stream);
SwfdecLoadObject *load_object = SWFDEC_LOAD_OBJECT (target);
if (load_object->progress != NULL) {
@@ -53,13 +54,14 @@ swfdec_load_object_loader_target_parse (SwfdecLoaderTarget *target,
}
static void
-swfdec_load_object_loader_target_error (SwfdecLoaderTarget *target,
- SwfdecLoader *loader)
+swfdec_load_object_stream_target_error (SwfdecStreamTarget *target,
+ SwfdecStream *stream)
{
+ SwfdecLoader *loader = SWFDEC_LOADER (stream);
SwfdecLoadObject *load_object = SWFDEC_LOAD_OBJECT (target);
/* break reference to the loader */
- swfdec_loader_set_target (loader, NULL);
+ swfdec_stream_set_target (SWFDEC_STREAM (loader), NULL);
load_object->loader = NULL;
g_object_unref (loader);
@@ -72,9 +74,10 @@ swfdec_load_object_loader_target_error (SwfdecLoaderTarget *target,
}
static void
-swfdec_load_object_loader_target_eof (SwfdecLoaderTarget *target,
- SwfdecLoader *loader)
+swfdec_load_object_stream_target_close (SwfdecStreamTarget *target,
+ SwfdecStream *stream)
{
+ SwfdecLoader *loader = SWFDEC_LOADER (stream);
SwfdecLoadObject *load_object = SWFDEC_LOAD_OBJECT (target);
char *text;
@@ -83,7 +86,7 @@ swfdec_load_object_loader_target_eof (SwfdecLoaderTarget *target,
swfdec_loader_get_text (loader, load_object->target->context->version);
/* break reference to the loader */
- swfdec_loader_set_target (loader, NULL);
+ swfdec_stream_set_target (stream, NULL);
load_object->loader = NULL;
g_object_unref (loader);
@@ -101,24 +104,24 @@ swfdec_load_object_loader_target_eof (SwfdecLoaderTarget *target,
}
static void
-swfdec_load_object_loader_target_init (SwfdecLoaderTargetInterface *iface)
+swfdec_load_object_stream_target_init (SwfdecStreamTargetInterface *iface)
{
- iface->get_player = swfdec_load_object_loader_target_get_player;
- iface->parse = swfdec_load_object_loader_target_parse;
- iface->eof = swfdec_load_object_loader_target_eof;
- iface->error = swfdec_load_object_loader_target_error;
+ iface->get_player = swfdec_load_object_stream_target_get_player;
+ iface->parse = swfdec_load_object_stream_target_parse;
+ iface->close = swfdec_load_object_stream_target_close;
+ iface->error = swfdec_load_object_stream_target_error;
}
/*** SWFDEC_LOAD_OBJECT ***/
G_DEFINE_TYPE_WITH_CODE (SwfdecLoadObject, swfdec_load_object, SWFDEC_TYPE_AS_OBJECT,
- G_IMPLEMENT_INTERFACE (SWFDEC_TYPE_LOADER_TARGET, swfdec_load_object_loader_target_init))
+ G_IMPLEMENT_INTERFACE (SWFDEC_TYPE_STREAM_TARGET, swfdec_load_object_stream_target_init))
static void
swfdec_load_object_reset (SwfdecLoadObject *load_object)
{
if (load_object->loader) {
- swfdec_loader_set_target (load_object->loader, NULL);
+ swfdec_stream_set_target (SWFDEC_STREAM (load_object->loader), NULL);
g_object_unref (load_object->loader);
load_object->loader = NULL;
}
@@ -168,9 +171,9 @@ swfdec_load_object_got_loader (SwfdecPlayer *player, SwfdecLoader *loader, gpoin
}
load_object->loader = loader;
- swfdec_loader_set_target (load_object->loader,
- SWFDEC_LOADER_TARGET (load_object));
- swfdec_loader_set_data_type (load_object->loader, SWFDEC_LOADER_DATA_TEXT);
+ swfdec_stream_set_target (SWFDEC_STREAM (loader),
+ SWFDEC_STREAM_TARGET (load_object));
+ swfdec_loader_set_data_type (loader, SWFDEC_LOADER_DATA_TEXT);
}
static gboolean
diff --git a/libswfdec/swfdec_load_object_as.c b/libswfdec/swfdec_load_object_as.c
index 42d4be3..de92fe8 100644
--- a/libswfdec/swfdec_load_object_as.c
+++ b/libswfdec/swfdec_load_object_as.c
@@ -28,7 +28,6 @@
#include "swfdec_as_strings.h"
#include "swfdec_debug.h"
#include "swfdec_loader_internal.h"
-#include "swfdec_loadertarget.h"
#include "swfdec_player_internal.h"
static void
diff --git a/libswfdec/swfdec_loader.c b/libswfdec/swfdec_loader.c
index e089eef..6b51e61 100644
--- a/libswfdec/swfdec_loader.c
+++ b/libswfdec/swfdec_loader.c
@@ -25,7 +25,6 @@
#include "swfdec_loader_internal.h"
#include "swfdec_buffer.h"
#include "swfdec_debug.h"
-#include "swfdec_loadertarget.h"
#include "swfdec_player_internal.h"
/*** gtk-doc ***/
@@ -35,14 +34,13 @@
* @title: SwfdecLoader
* @short_description: object used for input
*
- * SwfdecLoader is the base class used for input. Since developers normally
- * need to adapt input to the needs of their application, this class is
- * provided to be adapted to their needs.
+ * SwfdecLoader is the base class used for reading input. Since developers
+ * normally need to adapt input to the needs of their application, this class
+ * is provided to be adapted to their needs. It is used both for HTTP and
+ * RTMP access.
*
* Since Flash files can load new resources while operating, a #SwfdecLoader
- * can be instructed to load another resource. It's the loader's responsibility
- * to make sure the player is allowed to access the resource and provide its
- * data.
+ * can be instructed to load another resource.
*
* For convenience, a #SwfdecLoader for file access is provided by Swfdec.
*/
@@ -50,11 +48,20 @@
/**
* SwfdecLoader:
*
- * This is the base class used for providing input. It is abstract, use a
+ * This is the base object used for providing input. It is abstract, use a
* subclass to provide your input.
*/
/**
+ * SwfdecLoaderClass:
+ * @load: initialize a new loader based on a parent loader object. The new
+ * loader will already have its URL set.
+ *
+ * This is the base class used for input. If you create a subclass, you are
+ * supposed to set the function pointers listed above.
+ */
+
+/**
* SwfdecLoaderDataType:
* @SWFDEC_LOADER_DATA_UNKNOWN: Unidentified data or data that cannot be
* identified.
@@ -87,15 +94,19 @@
enum {
PROP_0,
- PROP_ERROR,
- PROP_EOF,
PROP_DATA_TYPE,
PROP_SIZE,
PROP_LOADED,
PROP_URL
};
-G_DEFINE_ABSTRACT_TYPE (SwfdecLoader, swfdec_loader, G_TYPE_OBJECT)
+G_DEFINE_ABSTRACT_TYPE (SwfdecLoader, swfdec_loader, SWFDEC_TYPE_STREAM)
+
+static const char *
+swfdec_loader_describe (SwfdecStream *stream)
+{
+ return swfdec_url_get_url (SWFDEC_LOADER (stream)->url);
+}
static void
swfdec_loader_get_property (GObject *object, guint param_id, GValue *value,
@@ -104,12 +115,6 @@ swfdec_loader_get_property (GObject *object, guint param_id, GValue *value,
SwfdecLoader *loader = SWFDEC_LOADER (object);
switch (param_id) {
- case PROP_ERROR:
- g_value_set_string (value, loader->error);
- break;
- case PROP_EOF:
- g_value_set_boolean (value, loader->state == SWFDEC_LOADER_STATE_EOF);
- break;
case PROP_DATA_TYPE:
g_value_set_enum (value, loader->data_type);
break;
@@ -135,9 +140,6 @@ swfdec_loader_set_property (GObject *object, guint param_id, const GValue *value
SwfdecLoader *loader = SWFDEC_LOADER (object);
switch (param_id) {
- case PROP_ERROR:
- swfdec_loader_error (loader, g_value_get_string (value));
- break;
case PROP_SIZE:
if (loader->size == -1 && g_value_get_long (value) >= 0)
swfdec_loader_set_size (loader, g_value_get_long (value));
@@ -160,11 +162,10 @@ swfdec_loader_dispose (GObject *object)
{
SwfdecLoader *loader = SWFDEC_LOADER (object);
- /* targets are supposed to keep a reference around */
- g_assert (loader->target == NULL);
- swfdec_buffer_queue_unref (loader->queue);
- swfdec_url_free (loader->url);
- g_free (loader->error);
+ if (loader->url) {
+ swfdec_url_free (loader->url);
+ loader->url = NULL;
+ }
G_OBJECT_CLASS (swfdec_loader_parent_class)->dispose (object);
}
@@ -173,17 +174,12 @@ static void
swfdec_loader_class_init (SwfdecLoaderClass *klass)
{
GObjectClass *object_class = G_OBJECT_CLASS (klass);
+ SwfdecStreamClass *stream_class = SWFDEC_STREAM_CLASS (klass);
object_class->dispose = swfdec_loader_dispose;
object_class->get_property = swfdec_loader_get_property;
object_class->set_property = swfdec_loader_set_property;
- g_object_class_install_property (object_class, PROP_ERROR,
- g_param_spec_string ("error", "error", "NULL when no error or string describing error",
- NULL, G_PARAM_READABLE));
- g_object_class_install_property (object_class, PROP_EOF,
- g_param_spec_boolean ("eof", "eof", "TRUE when all data has been handed to the loader",
- FALSE, G_PARAM_READABLE));
g_object_class_install_property (object_class, PROP_DATA_TYPE,
g_param_spec_enum ("data-type", "data type", "the data's type as identified by Swfdec",
SWFDEC_TYPE_LOADER_DATA_TYPE, SWFDEC_LOADER_DATA_UNKNOWN, G_PARAM_READABLE));
@@ -196,12 +192,13 @@ swfdec_loader_class_init (SwfdecLoaderClass *klass)
g_object_class_install_property (object_class, PROP_URL,
g_param_spec_boxed ("url", "url", "URL for this file",
SWFDEC_TYPE_URL, G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY));
+
+ stream_class->describe = swfdec_loader_describe;
}
static void
swfdec_loader_init (SwfdecLoader *loader)
{
- loader->queue = swfdec_buffer_queue_new ();
loader->data_type = SWFDEC_LOADER_DATA_UNKNOWN;
loader->size = -1;
@@ -209,53 +206,6 @@ swfdec_loader_init (SwfdecLoader *loader)
/*** INTERNAL API ***/
-static void
-swfdec_loader_process (gpointer loaderp, gpointer unused)
-{
- SwfdecLoader *loader = loaderp;
-
- g_assert (loader->target != NULL);
-
- loader->queued = FALSE;
- if (loader->state == loader->processed_state)
- return;
- g_assert (loader->state != SWFDEC_LOADER_STATE_CLOSED);
- if (loader->state == SWFDEC_LOADER_STATE_ERROR) {
- swfdec_loader_target_error (loader->target, loader);
- return;
- }
- g_object_ref (loader);
- while (loader->state != loader->processed_state) {
- if (loader->processed_state == SWFDEC_LOADER_STATE_NEW) {
- loader->processed_state = SWFDEC_LOADER_STATE_OPEN;
- swfdec_loader_target_open (loader->target, loader);
- } else if (loader->processed_state == SWFDEC_LOADER_STATE_OPEN) {
- loader->processed_state = SWFDEC_LOADER_STATE_READING;
- swfdec_loader_target_parse (loader->target, loader);
- } else if (loader->processed_state == SWFDEC_LOADER_STATE_READING) {
- loader->processed_state = SWFDEC_LOADER_STATE_EOF;
- swfdec_loader_target_eof (loader->target, loader);
- }
- /* stupid reentrancy */
- if (loader->processed_state == SWFDEC_LOADER_STATE_NEW)
- break;
- }
- g_object_unref (loader);
-}
-
-static void
-swfdec_loader_queue_processing (SwfdecLoader *loader)
-{
- if (loader->queued)
- return;
- loader->queued = TRUE;
- if (loader->target) {
- g_assert (loader->player);
- swfdec_player_add_external_action (loader->player, loader,
- swfdec_loader_process, NULL);
- }
-}
-
SwfdecLoader *
swfdec_loader_load (SwfdecLoader *loader, const SwfdecURL *url,
SwfdecLoaderRequest request, const char *data, gsize data_len)
@@ -274,142 +224,9 @@ swfdec_loader_load (SwfdecLoader *loader, const SwfdecURL *url,
return ret;
}
-void
-swfdec_loader_close (SwfdecLoader *loader)
-{
- SwfdecLoaderClass *klass;
-
- g_return_if_fail (SWFDEC_IS_LOADER (loader));
- klass = SWFDEC_LOADER_GET_CLASS (loader);
-
- if (klass->close)
- klass->close (loader);
- if (loader->state != SWFDEC_LOADER_STATE_ERROR) {
- loader->state = SWFDEC_LOADER_STATE_CLOSED;
- loader->processed_state = SWFDEC_LOADER_STATE_CLOSED;
- }
-}
-
-void
-swfdec_loader_set_target (SwfdecLoader *loader, SwfdecLoaderTarget *target)
-{
- g_return_if_fail (SWFDEC_IS_LOADER (loader));
- g_return_if_fail (target == NULL || SWFDEC_IS_LOADER_TARGET (target));
-
- if (loader->target) {
- swfdec_player_remove_all_external_actions (loader->player, loader);
- }
- loader->queued = FALSE;
- loader->target = target;
- loader->processed_state = SWFDEC_LOADER_STATE_NEW;
- if (target) {
- loader->player = swfdec_loader_target_get_player (target);
- swfdec_loader_queue_processing (loader);
- } else {
- loader->player = NULL;
- }
-}
-
/** PUBLIC API ***/
/**
- * swfdec_loader_error:
- * @loader: a #SwfdecLoader
- * @error: a string describing the error
- *
- * Moves the loader in the error state if it wasn't before. A loader that is in
- * the error state will not process any more data. Also, internal error
- * handling scripts may be executed.
- **/
-void
-swfdec_loader_error (SwfdecLoader *loader, const char *error)
-{
- g_return_if_fail (SWFDEC_IS_LOADER (loader));
- g_return_if_fail (error != NULL);
-
- if (loader->error) {
- SWFDEC_ERROR ("another error in loader for %s: %s", swfdec_url_get_url (loader->url), error);
- return;
- }
-
- SWFDEC_ERROR ("error in loader for %s: %s", swfdec_url_get_url (loader->url), error);
- loader->state = SWFDEC_LOADER_STATE_ERROR;
- loader->error = g_strdup (error);
- swfdec_loader_queue_processing (loader);
-}
-
-/**
- * swfdec_loader_open:
- * @loader: a #SwfdecLoader
- * @url: the real URL used for this loader if it has changed (e.g. after HTTP
- * redirects) or %NULL if it hasn't changed
- *
- * Call this function when your loader opened the resulting file. For HTTP this
- * is when having received the headers. You must call this function before
- * swfdec_laoder_push() can be called.
- **/
-void
-swfdec_loader_open (SwfdecLoader *loader, const char *url)
-{
- g_return_if_fail (SWFDEC_IS_LOADER (loader));
- g_return_if_fail (loader->state == SWFDEC_LOADER_STATE_NEW);
-
- loader->state = SWFDEC_LOADER_STATE_OPEN;
- if (url) {
- swfdec_url_free (loader->url);
- loader->url = swfdec_url_new (url);
- g_object_notify (G_OBJECT (loader), "url");
- }
- swfdec_loader_queue_processing (loader);
-}
-
-/**
- * swfdec_loader_push:
- * @loader: a #SwfdecLoader
- * @buffer: new data to make available. The loader takes the reference
- * to the buffer.
- *
- * Makes the data in @buffer available to @loader and processes it. The @loader
- * must be open.
- **/
-void
-swfdec_loader_push (SwfdecLoader *loader, SwfdecBuffer *buffer)
-{
- g_return_if_fail (SWFDEC_IS_LOADER (loader));
- g_return_if_fail (loader->state == SWFDEC_LOADER_STATE_OPEN || loader->state == SWFDEC_LOADER_STATE_READING);
- g_return_if_fail (buffer != NULL);
-
- swfdec_buffer_queue_push (loader->queue, buffer);
- g_object_notify (G_OBJECT (loader), "loaded");
- loader->state = SWFDEC_LOADER_STATE_READING;
- if (loader->processed_state == SWFDEC_LOADER_STATE_READING)
- loader->processed_state = SWFDEC_LOADER_STATE_OPEN;
- swfdec_loader_queue_processing (loader);
-}
-
-/**
- * swfdec_loader_eof:
- * @loader: a #SwfdecLoader
- *
- * Indicates to @loader that no more data will follow. The loader must be open.
- **/
-void
-swfdec_loader_eof (SwfdecLoader *loader)
-{
- g_return_if_fail (SWFDEC_IS_LOADER (loader));
- g_return_if_fail (loader->state == SWFDEC_LOADER_STATE_OPEN || loader->state == SWFDEC_LOADER_STATE_READING);
-
- if (loader->size == 0) {
- gulong bytes = swfdec_loader_get_loaded (loader);
- if (bytes)
- swfdec_loader_set_size (loader, bytes);
- }
- g_object_notify (G_OBJECT (loader), "eof");
- loader->state = SWFDEC_LOADER_STATE_EOF;
- swfdec_loader_queue_processing (loader);
-}
-
-/**
* swfdec_loader_get_filename:
* @loader: a #SwfdecLoader
*
@@ -458,6 +275,27 @@ swfdec_loader_get_filename (SwfdecLoader *loader)
}
/**
+ * swfdec_loader_set_url:
+ * @loader: the loader to update
+ * @url: string specifying the new URL. The url must be a valid absolute URL.
+ *
+ * Updates the url of the given @loader to point to the new @url. This is useful
+ * whe encountering HTTP redirects, as the loader is supposed to reference the
+ * final URL after all rdirections.
+ * This function may not be called after calling swfdec_loader_open().
+ **/
+void
+swfdec_loader_set_url (SwfdecLoader *loader, const char *url)
+{
+ g_return_if_fail (SWFDEC_IS_LOADER (loader));
+ g_return_if_fail (url != NULL);
+ /* g_return_if_fail (LOADER_IS_NOT_OPEN_YET) */
+
+ swfdec_url_free (loader->url);
+ loader->url = swfdec_url_new (url);
+}
+
+/**
* swfdec_loader_get_url:
* @loader: a #SwfdecLoader
*
@@ -550,10 +388,13 @@ swfdec_loader_get_size (SwfdecLoader *loader)
gulong
swfdec_loader_get_loaded (SwfdecLoader *loader)
{
+ SwfdecBufferQueue *queue;
+
g_return_val_if_fail (SWFDEC_IS_LOADER (loader), 0);
- return swfdec_buffer_queue_get_depth (loader->queue) +
- swfdec_buffer_queue_get_offset (loader->queue);
+ queue = swfdec_stream_get_queue (SWFDEC_STREAM (loader));
+ return swfdec_buffer_queue_get_depth (queue) +
+ swfdec_buffer_queue_get_offset (queue);
}
/**
@@ -605,18 +446,20 @@ static ByteOrderMark boms[] = {
char *
swfdec_loader_get_text (SwfdecLoader *loader, guint version)
{
+ SwfdecBufferQueue *queue;
SwfdecBuffer *buffer;
char *text;
guint size, i, j;
/* get the text from the loader */
- size = swfdec_buffer_queue_get_depth (loader->queue);
+ queue = swfdec_stream_get_queue (SWFDEC_STREAM (loader));
+ size = swfdec_buffer_queue_get_depth (queue);
if (size == 0) {
SWFDEC_LOG ("empty loader, returning empty string");
return g_strdup ("");
}
- buffer = swfdec_buffer_queue_peek (loader->queue, size);
+ buffer = swfdec_buffer_queue_peek (queue, size);
if (!buffer)
return NULL;
@@ -662,45 +505,3 @@ swfdec_loader_get_text (SwfdecLoader *loader, guint version)
return text;
}
-/*** X-WWW-FORM-URLENCODED ***/
-
-/* if speed ever gets an issue, use a 256 byte array instead of strchr */
-static const char *urlencode_unescaped="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz-_.,:/()'";
-static void
-swfdec_urlencode_append_string (GString *str, const char *s)
-{
- g_assert (s != NULL);
- while (*s) {
- if (strchr (urlencode_unescaped, *s))
- g_string_append_c (str, *s);
- else if (*s == ' ')
- g_string_append_c (str, '+');
- else
- g_string_append_printf (str, "%%%02X", (guint) *s);
- s++;
- }
-}
-
-/**
- * swfdec_string_append_urlencoded:
- * @str: a #GString
- * @name: name of the property to append
- * @value: value of property to append or NULL for empty
- *
- * Appends a name/value pair in encoded as 'application/x-www-form-urlencoded'
- * to the given @str
- **/
-void
-swfdec_string_append_urlencoded (GString *str, const char *name, const char *value)
-{
- g_return_if_fail (str != NULL);
- g_return_if_fail (name != NULL);
-
- if (str->len > 0)
- g_string_append_c (str, '&');
- swfdec_urlencode_append_string (str, name);
- g_string_append_c (str, '=');
- if (value)
- swfdec_urlencode_append_string (str, value);
-}
-
diff --git a/libswfdec/swfdec_loader.h b/libswfdec/swfdec_loader.h
index 0d0c6a4..f668fca 100644
--- a/libswfdec/swfdec_loader.h
+++ b/libswfdec/swfdec_loader.h
@@ -22,6 +22,7 @@
#include <glib-object.h>
#include <libswfdec/swfdec_buffer.h>
+#include <libswfdec/swfdec_stream.h>
#include <libswfdec/swfdec_url.h>
G_BEGIN_DECLS
@@ -55,24 +56,17 @@ typedef struct _SwfdecLoaderClass SwfdecLoaderClass;
struct _SwfdecLoader
{
- GObject object;
+ SwfdecStream stream;
/*< private >*/
- guint state; /* SwfdecLoaderState the loader is currently in */
- guint processed_state;/* SwfdecLoaderState the target knows about */
- gboolean queued; /* TRUE if we have queued an action already */
SwfdecURL * url; /* the URL for this loader in UTF-8 - must be set on creation */
glong size; /* number of bytes in stream or -1 if unknown */
- char * error; /* error message if in error state or NULL */
- gpointer target; /* SwfdecLoaderTarget that gets notified about loading progress */
- gpointer player; /* SwfdecPlayer belonging to target or %NULL */
- SwfdecBufferQueue * queue; /* SwfdecBufferQueue managing the input buffers */
SwfdecLoaderDataType data_type; /* type this stream is in (identified by swfdec) */
};
struct _SwfdecLoaderClass
{
- GObjectClass object_class;
+ SwfdecStreamClass stream_class;
/* initialize the loader. The URL will be set already. */
void (* load) (SwfdecLoader * loader,
@@ -80,19 +74,12 @@ struct _SwfdecLoaderClass
SwfdecLoaderRequest request,
const char * data,
gsize data_len);
- /* if open, close the loader. NB: you may not call push() or eof() after the loader has been closed */
- void (* close) (SwfdecLoader * loader);
};
GType swfdec_loader_get_type (void);
-void swfdec_loader_open (SwfdecLoader * loader,
+void swfdec_loader_set_url (SwfdecLoader * loader,
const char * url);
-void swfdec_loader_push (SwfdecLoader * loader,
- SwfdecBuffer * buffer);
-void swfdec_loader_eof (SwfdecLoader * loader);
-void swfdec_loader_error (SwfdecLoader * loader,
- const char * error);
const SwfdecURL *
swfdec_loader_get_url (SwfdecLoader * loader);
void swfdec_loader_set_size (SwfdecLoader * loader,
diff --git a/libswfdec/swfdec_loader_internal.h b/libswfdec/swfdec_loader_internal.h
index 0a835d4..2a3439f 100644
--- a/libswfdec/swfdec_loader_internal.h
+++ b/libswfdec/swfdec_loader_internal.h
@@ -21,21 +21,12 @@
#define _SWFDEC_LOADER_INTERNAL_H_
#include "swfdec_loader.h"
-#include "swfdec_loadertarget.h"
#include "swfdec_stream_target.h"
G_BEGIN_DECLS
-typedef enum {
- SWFDEC_LOADER_STATE_NEW = 0, /* loader is new and has not been opened yet */
- SWFDEC_LOADER_STATE_OPEN, /* loader is opened and has got the HTTP headers */
- SWFDEC_LOADER_STATE_READING, /* loader has read some bytes of data and is still reading */
- SWFDEC_LOADER_STATE_EOF, /* swfdec_loader_eof() has been called */
- SWFDEC_LOADER_STATE_CLOSED, /* loader has been closed by Swfdec */
- SWFDEC_LOADER_STATE_ERROR /* loader is in error state */
-} SwfdecLoaderState;
-
/* swfdec_stream.c */
+SwfdecBufferQueue * swfdec_stream_get_queue (SwfdecStream * stream);
const char * swfdec_stream_describe (SwfdecStream * stream);
void swfdec_stream_close (SwfdecStream * stream);
void swfdec_stream_set_target (SwfdecStream * stream,
@@ -47,17 +38,11 @@ SwfdecLoader * swfdec_loader_load (SwfdecLoader * loader,
SwfdecLoaderRequest request,
const char * data,
gsize data_len);
-void swfdec_loader_close (SwfdecLoader * loader);
-void swfdec_loader_set_target (SwfdecLoader * loader,
- SwfdecLoaderTarget * target);
void swfdec_loader_set_data_type (SwfdecLoader * loader,
SwfdecLoaderDataType type);
char * swfdec_loader_get_text (SwfdecLoader * loader,
guint version);
-void swfdec_string_append_urlencoded (GString * str,
- const char * name,
- const char * value);
G_END_DECLS
#endif
diff --git a/libswfdec/swfdec_loadertarget.c b/libswfdec/swfdec_loadertarget.c
deleted file mode 100644
index 39bc745..0000000
--- a/libswfdec/swfdec_loadertarget.c
+++ /dev/null
@@ -1,137 +0,0 @@
-/* Swfdec
- * Copyright (C) 2007 Benjamin Otte <otte at gnome.org>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor,
- * Boston, MA 02110-1301 USA
- */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include "swfdec_loadertarget.h"
-#include "swfdec_debug.h"
-#include "swfdec_loader_internal.h"
-#include "swfdec_player_internal.h"
-#include "swfdec_swf_decoder.h" /* HACK */
-
-static void
-swfdec_loader_target_base_init (gpointer g_class)
-{
- static gboolean initialized = FALSE;
-
- if (G_UNLIKELY (!initialized)) {
- initialized = TRUE;
- }
-}
-
-GType
-swfdec_loader_target_get_type (void)
-{
- static GType loader_target_type = 0;
-
- if (!loader_target_type) {
- static const GTypeInfo loader_target_info = {
- sizeof (SwfdecLoaderTargetInterface),
- swfdec_loader_target_base_init,
- NULL,
- NULL,
- NULL,
- NULL,
- 0,
- 0,
- NULL,
- };
-
- loader_target_type = g_type_register_static (G_TYPE_INTERFACE,
- "SwfdecLoaderTarget", &loader_target_info, 0);
- g_type_interface_add_prerequisite (loader_target_type, G_TYPE_OBJECT);
- }
-
- return loader_target_type;
-}
-
-SwfdecPlayer *
-swfdec_loader_target_get_player (SwfdecLoaderTarget *target)
-{
- SwfdecLoaderTargetInterface *iface;
-
- g_return_val_if_fail (SWFDEC_IS_LOADER_TARGET (target), NULL);
-
- iface = SWFDEC_LOADER_TARGET_GET_INTERFACE (target);
- g_assert (iface->get_player != NULL);
- return iface->get_player (target);
-}
-
-void
-swfdec_loader_target_open (SwfdecLoaderTarget *target, SwfdecLoader *loader)
-{
- SwfdecLoaderTargetInterface *iface;
-
- g_return_if_fail (SWFDEC_IS_LOADER_TARGET (target));
- g_return_if_fail (SWFDEC_IS_LOADER (loader));
-
- SWFDEC_LOG ("opening %p (state %u)", loader, loader->state);
-
- iface = SWFDEC_LOADER_TARGET_GET_INTERFACE (target);
- if (iface->open)
- iface->open (target, loader);
-}
-
-void
-swfdec_loader_target_parse (SwfdecLoaderTarget *target, SwfdecLoader *loader)
-{
- SwfdecLoaderTargetInterface *iface;
-
- g_return_if_fail (SWFDEC_IS_LOADER_TARGET (target));
- g_return_if_fail (SWFDEC_IS_LOADER (loader));
-
- SWFDEC_LOG ("parsing %p (state %u)", loader, loader->state);
-
- iface = SWFDEC_LOADER_TARGET_GET_INTERFACE (target);
- if (iface->parse)
- iface->parse (target, loader);
-}
-
-void
-swfdec_loader_target_eof (SwfdecLoaderTarget *target, SwfdecLoader *loader)
-{
- SwfdecLoaderTargetInterface *iface;
-
- g_return_if_fail (SWFDEC_IS_LOADER_TARGET (target));
- g_return_if_fail (SWFDEC_IS_LOADER (loader));
-
- SWFDEC_LOG ("eof on %p (state %u)", loader, loader->state);
-
- iface = SWFDEC_LOADER_TARGET_GET_INTERFACE (target);
- if (iface->eof)
- iface->eof (target, loader);
-}
-
-void
-swfdec_loader_target_error (SwfdecLoaderTarget *target, SwfdecLoader *loader)
-{
- SwfdecLoaderTargetInterface *iface;
-
- g_return_if_fail (SWFDEC_IS_LOADER_TARGET (target));
- g_return_if_fail (SWFDEC_IS_LOADER (loader));
-
- SWFDEC_LOG ("error on %p (state %u)", loader, loader->state);
-
- iface = SWFDEC_LOADER_TARGET_GET_INTERFACE (target);
- if (iface->error)
- iface->error (target, loader);
-}
-
diff --git a/libswfdec/swfdec_loadertarget.h b/libswfdec/swfdec_loadertarget.h
deleted file mode 100644
index 1e9c523..0000000
--- a/libswfdec/swfdec_loadertarget.h
+++ /dev/null
@@ -1,66 +0,0 @@
-/* Swfdec
- * Copyright (C) 2007 Benjamin Otte <otte at gnome.org>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor,
- * Boston, MA 02110-1301 USA
- */
-
-#ifndef __SWFDEC_LOADER_TARGET_H__
-#define __SWFDEC_LOADER_TARGET_H__
-
-#include <libswfdec/swfdec.h>
-#include <libswfdec/swfdec_decoder.h>
-
-G_BEGIN_DECLS
-
-#define SWFDEC_TYPE_LOADER_TARGET (swfdec_loader_target_get_type ())
-#define SWFDEC_LOADER_TARGET(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), SWFDEC_TYPE_LOADER_TARGET, SwfdecLoaderTarget))
-#define SWFDEC_IS_LOADER_TARGET(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), SWFDEC_TYPE_LOADER_TARGET))
-#define SWFDEC_LOADER_TARGET_GET_INTERFACE(inst) (G_TYPE_INSTANCE_GET_INTERFACE ((inst), SWFDEC_TYPE_LOADER_TARGET, SwfdecLoaderTargetInterface))
-
-typedef struct _SwfdecLoaderTarget SwfdecLoaderTarget; /* dummy object */
-typedef struct _SwfdecLoaderTargetInterface SwfdecLoaderTargetInterface;
-
-struct _SwfdecLoaderTargetInterface {
- GTypeInterface parent;
-
- /* mandatory vfunc */
- SwfdecPlayer * (* get_player) (SwfdecLoaderTarget * target);
- /* optional vfuncs */
- void (* open) (SwfdecLoaderTarget * target,
- SwfdecLoader * loader);
- void (* parse) (SwfdecLoaderTarget * target,
- SwfdecLoader * loader);
- void (* eof) (SwfdecLoaderTarget * target,
- SwfdecLoader * loader);
- void (* error) (SwfdecLoaderTarget * target,
- SwfdecLoader * loader);
-};
-
-GType swfdec_loader_target_get_type (void) G_GNUC_CONST;
-
-SwfdecPlayer * swfdec_loader_target_get_player (SwfdecLoaderTarget * target);
-void swfdec_loader_target_open (SwfdecLoaderTarget * target,
- SwfdecLoader * loader);
-void swfdec_loader_target_parse (SwfdecLoaderTarget * target,
- SwfdecLoader * loader);
-void swfdec_loader_target_eof (SwfdecLoaderTarget * target,
- SwfdecLoader * loader);
-void swfdec_loader_target_error (SwfdecLoaderTarget * target,
- SwfdecLoader * loader);
-
-G_END_DECLS
-
-#endif /* __SWFDEC_LOADER_TARGET_H__ */
diff --git a/libswfdec/swfdec_net_stream.c b/libswfdec/swfdec_net_stream.c
index 36e0d9c..22de7fb 100644
--- a/libswfdec/swfdec_net_stream.c
+++ b/libswfdec/swfdec_net_stream.c
@@ -29,7 +29,7 @@
#include "swfdec_audio_flv.h"
#include "swfdec_debug.h"
#include "swfdec_loader_internal.h"
-#include "swfdec_loadertarget.h"
+#include "swfdec_stream_target.h"
#include "swfdec_resource_request.h"
/* NB: code and level must be rooted gc-strings */
@@ -216,27 +216,27 @@ swfdec_net_stream_update_playing (SwfdecNetStream *stream)
}
}
-/*** SWFDEC_LOADER_TARGET interface ***/
+/*** SWFDEC_STREAM_TARGET interface ***/
static SwfdecPlayer *
-swfdec_net_stream_loader_target_get_player (SwfdecLoaderTarget *target)
+swfdec_net_stream_stream_target_get_player (SwfdecStreamTarget *target)
{
return SWFDEC_PLAYER (SWFDEC_AS_OBJECT (target)->context);
}
static void
-swfdec_net_stream_loader_target_error (SwfdecLoaderTarget *target,
- SwfdecLoader *loader)
+swfdec_net_stream_stream_target_error (SwfdecStreamTarget *target,
+ SwfdecStream *stream)
{
- SwfdecNetStream *stream = SWFDEC_NET_STREAM (target);
+ SwfdecNetStream *ns = SWFDEC_NET_STREAM (target);
- if (stream->flvdecoder == NULL)
- swfdec_net_stream_onstatus (stream, SWFDEC_AS_STR_NetStream_Play_StreamNotFound,
+ if (ns->flvdecoder == NULL)
+ swfdec_net_stream_onstatus (ns, SWFDEC_AS_STR_NetStream_Play_StreamNotFound,
SWFDEC_AS_STR_error);
}
static void
-swfdec_net_stream_loader_target_recheck (SwfdecNetStream *stream)
+swfdec_net_stream_stream_target_recheck (SwfdecNetStream *stream)
{
if (stream->buffering) {
guint first, last;
@@ -256,65 +256,63 @@ swfdec_net_stream_loader_target_recheck (SwfdecNetStream *stream)
}
static void
-swfdec_net_stream_loader_target_parse (SwfdecLoaderTarget *target,
- SwfdecLoader *loader)
+swfdec_net_stream_stream_target_parse (SwfdecStreamTarget *target,
+ SwfdecStream *stream)
{
- SwfdecNetStream *stream = SWFDEC_NET_STREAM (target);
+ SwfdecNetStream *ns = SWFDEC_NET_STREAM (target);
+ SwfdecBufferQueue *queue;
SwfdecStatus status;
- if (loader->state != SWFDEC_LOADER_STATE_EOF && swfdec_buffer_queue_get_depth (loader->queue) == 0) {
- SWFDEC_INFO ("nothing to do");
- return;
- }
- if (stream->flvdecoder == NULL) {
+ if (ns->flvdecoder == NULL) {
/* FIXME: add mp3 support */
- stream->flvdecoder = g_object_new (SWFDEC_TYPE_FLV_DECODER, NULL);
- SWFDEC_DECODER (stream->flvdecoder)->player = SWFDEC_PLAYER (SWFDEC_AS_OBJECT (stream)->context);
- swfdec_net_stream_onstatus (stream, SWFDEC_AS_STR_NetStream_Play_Start,
+ ns->flvdecoder = g_object_new (SWFDEC_TYPE_FLV_DECODER, NULL);
+ SWFDEC_DECODER (ns->flvdecoder)->player = SWFDEC_PLAYER (SWFDEC_AS_OBJECT (stream)->context);
+ swfdec_net_stream_onstatus (ns, SWFDEC_AS_STR_NetStream_Play_Start,
SWFDEC_AS_STR_status);
- swfdec_loader_set_data_type (loader, SWFDEC_LOADER_DATA_FLV);
+ swfdec_loader_set_data_type (SWFDEC_LOADER (stream), SWFDEC_LOADER_DATA_FLV);
}
status = SWFDEC_STATUS_OK;
+ queue = swfdec_stream_get_queue (stream);
do {
- SwfdecBuffer *buffer = swfdec_buffer_queue_pull_buffer (loader->queue);
+ SwfdecBuffer *buffer = swfdec_buffer_queue_pull_buffer (queue);
if (buffer == NULL)
break;
status &= ~SWFDEC_STATUS_NEEDBITS;
- status |= swfdec_decoder_parse (SWFDEC_DECODER (stream->flvdecoder), buffer);
+ status |= swfdec_decoder_parse (SWFDEC_DECODER (ns->flvdecoder), buffer);
} while ((status & (SWFDEC_STATUS_ERROR | SWFDEC_STATUS_EOF)) == 0);
if (status & SWFDEC_STATUS_IMAGE)
- swfdec_net_stream_loader_target_recheck (stream);
+ swfdec_net_stream_stream_target_recheck (ns);
}
static void
-swfdec_net_stream_loader_target_eof (SwfdecLoaderTarget *target,
- SwfdecLoader *loader)
+swfdec_net_stream_stream_target_close (SwfdecStreamTarget *target,
+ SwfdecStream *stream)
{
- SwfdecNetStream *stream = SWFDEC_NET_STREAM (target);
+ SwfdecNetStream *ns = SWFDEC_NET_STREAM (target);
guint first, last;
- swfdec_decoder_eof (SWFDEC_DECODER (stream->flvdecoder));
- swfdec_net_stream_onstatus (stream, SWFDEC_AS_STR_NetStream_Buffer_Flush,
+ swfdec_decoder_eof (SWFDEC_DECODER (ns->flvdecoder));
+ swfdec_net_stream_onstatus (ns, SWFDEC_AS_STR_NetStream_Buffer_Flush,
SWFDEC_AS_STR_status);
- swfdec_net_stream_video_goto (stream, stream->current_time);
- stream->buffering = FALSE;
- if (swfdec_flv_decoder_get_video_info (stream->flvdecoder, &first, &last) &&
- stream->current_time + stream->buffer_time <= last) {
- swfdec_net_stream_onstatus (stream, SWFDEC_AS_STR_NetStream_Buffer_Full,
+ swfdec_net_stream_video_goto (ns, ns->current_time);
+ ns->buffering = FALSE;
+ if (swfdec_flv_decoder_get_video_info (ns->flvdecoder, &first, &last) &&
+ ns->current_time + ns->buffer_time <= last) {
+ swfdec_net_stream_onstatus (ns, SWFDEC_AS_STR_NetStream_Buffer_Full,
SWFDEC_AS_STR_status);
}
- swfdec_net_stream_loader_target_recheck (stream);
+ swfdec_net_stream_stream_target_recheck (ns);
}
static void
-swfdec_net_stream_loader_target_init (SwfdecLoaderTargetInterface *iface)
+swfdec_net_stream_stream_target_init (SwfdecStreamTargetInterface *iface)
{
- iface->get_player = swfdec_net_stream_loader_target_get_player;
- iface->parse = swfdec_net_stream_loader_target_parse;
- iface->eof = swfdec_net_stream_loader_target_eof;
- iface->error = swfdec_net_stream_loader_target_error;
+ iface->get_player = swfdec_net_stream_stream_target_get_player;
+ iface->parse = swfdec_net_stream_stream_target_parse;
+ iface->close = swfdec_net_stream_stream_target_close;
+ iface->error = swfdec_net_stream_stream_target_error;
}
/*** SWFDEC VIDEO MOVIE INPUT ***/
@@ -348,7 +346,7 @@ swfdec_net_stream_input_get_image (SwfdecVideoMovieInput *input)
/*** SWFDEC_NET_STREAM ***/
G_DEFINE_TYPE_WITH_CODE (SwfdecNetStream, swfdec_net_stream, SWFDEC_TYPE_AS_OBJECT,
- G_IMPLEMENT_INTERFACE (SWFDEC_TYPE_LOADER_TARGET, swfdec_net_stream_loader_target_init))
+ G_IMPLEMENT_INTERFACE (SWFDEC_TYPE_STREAM_TARGET, swfdec_net_stream_stream_target_init))
static void
swfdec_net_stream_dispose (GObject *object)
@@ -504,9 +502,10 @@ swfdec_net_stream_set_loader (SwfdecNetStream *stream, SwfdecLoader *loader)
g_return_if_fail (loader == NULL || SWFDEC_IS_LOADER (loader));
if (stream->loader) {
- swfdec_loader_set_target (stream->loader, NULL);
- swfdec_loader_close (stream->loader);
- g_object_unref (stream->loader);
+ SwfdecStream *lstream = SWFDEC_STREAM (loader);
+ swfdec_stream_close (lstream);
+ swfdec_stream_set_target (lstream, NULL);
+ g_object_unref (lstream);
}
if (stream->flvdecoder) {
g_object_unref (stream->flvdecoder);
@@ -516,7 +515,7 @@ swfdec_net_stream_set_loader (SwfdecNetStream *stream, SwfdecLoader *loader)
stream->buffering = TRUE;
if (loader) {
g_object_ref (loader);
- swfdec_loader_set_target (loader, SWFDEC_LOADER_TARGET (stream));
+ swfdec_stream_set_target (SWFDEC_STREAM (loader), SWFDEC_STREAM_TARGET (stream));
}
swfdec_net_stream_set_playing (stream, TRUE);
}
diff --git a/libswfdec/swfdec_policy_loader.c b/libswfdec/swfdec_policy_loader.c
index 6d04c75..ae722b6 100644
--- a/libswfdec/swfdec_policy_loader.c
+++ b/libswfdec/swfdec_policy_loader.c
@@ -34,17 +34,17 @@
#include "swfdec_xml.h"
#include "swfdec_xml_node.h"
-/*** SWFDEC_LOADER_TARGET ***/
+/*** SWFDEC_STREAM_TARGET ***/
static SwfdecPlayer *
-swfdec_policy_loader_target_get_player (SwfdecLoaderTarget *target)
+swfdec_policy_stream_target_get_player (SwfdecStreamTarget *target)
{
return SWFDEC_POLICY_LOADER (target)->sec->player;
}
static void
-swfdec_policy_loader_target_error (SwfdecLoaderTarget *target,
- SwfdecLoader *loader)
+swfdec_policy_stream_target_error (SwfdecStreamTarget *target,
+ SwfdecStream *stream)
{
SwfdecPolicyLoader *policy_loader = SWFDEC_POLICY_LOADER (target);
@@ -139,8 +139,8 @@ swfdec_policy_loader_check (SwfdecAsContext *context, const char *text,
}
static void
-swfdec_policy_loader_target_eof (SwfdecLoaderTarget *target,
- SwfdecLoader *loader)
+swfdec_policy_stream_target_close (SwfdecStreamTarget *target,
+ SwfdecStream *stream)
{
SwfdecPolicyLoader *policy_loader = SWFDEC_POLICY_LOADER (target);
gboolean allow;
@@ -167,17 +167,17 @@ swfdec_policy_loader_target_eof (SwfdecLoaderTarget *target,
}
static void
-swfdec_policy_loader_loader_target_init (SwfdecLoaderTargetInterface *iface)
+swfdec_policy_loader_stream_target_init (SwfdecStreamTargetInterface *iface)
{
- iface->get_player = swfdec_policy_loader_target_get_player;
- iface->eof = swfdec_policy_loader_target_eof;
- iface->error = swfdec_policy_loader_target_error;
+ iface->get_player = swfdec_policy_stream_target_get_player;
+ iface->close = swfdec_policy_stream_target_close;
+ iface->error = swfdec_policy_stream_target_error;
}
/*** SWFDEC_POLICY_LOADER ***/
G_DEFINE_TYPE_WITH_CODE (SwfdecPolicyLoader, swfdec_policy_loader, G_TYPE_OBJECT,
- G_IMPLEMENT_INTERFACE (SWFDEC_TYPE_LOADER_TARGET, swfdec_policy_loader_loader_target_init))
+ G_IMPLEMENT_INTERFACE (SWFDEC_TYPE_STREAM_TARGET, swfdec_policy_loader_stream_target_init))
static void
swfdec_policy_loader_dispose (GObject *object)
@@ -185,7 +185,7 @@ swfdec_policy_loader_dispose (GObject *object)
SwfdecPolicyLoader *policy_loader = SWFDEC_POLICY_LOADER (object);
g_assert (policy_loader->loader);
- swfdec_loader_set_target (policy_loader->loader, NULL);
+ swfdec_stream_set_target (SWFDEC_STREAM (policy_loader->loader), NULL);
g_object_unref (policy_loader->loader);
policy_loader->loader = NULL;
@@ -239,9 +239,9 @@ swfdec_policy_loader_new (SwfdecFlashSecurity *sec, const char *host,
policy_loader->host = g_strdup (host);
policy_loader->func = func;
- swfdec_loader_set_target (policy_loader->loader,
- SWFDEC_LOADER_TARGET (policy_loader));
- swfdec_loader_set_data_type (policy_loader->loader, SWFDEC_LOADER_DATA_TEXT);
+ swfdec_stream_set_target (SWFDEC_STREAM (policy_loader->loader),
+ SWFDEC_STREAM_TARGET (policy_loader));
+ swfdec_loader_set_data_type (policy_loader->loader, SWFDEC_LOADER_DATA_XML);
return policy_loader;
}
diff --git a/libswfdec/swfdec_resource.c b/libswfdec/swfdec_resource.c
index cac371a..6a8b3b4 100644
--- a/libswfdec/swfdec_resource.c
+++ b/libswfdec/swfdec_resource.c
@@ -35,21 +35,21 @@
#include "swfdec_flash_security.h"
#include "swfdec_image_decoder.h"
#include "swfdec_loader_internal.h"
-#include "swfdec_loadertarget.h"
#include "swfdec_movie_clip_loader.h"
#include "swfdec_player_internal.h"
#include "swfdec_resource_request.h"
#include "swfdec_script.h"
#include "swfdec_sprite.h"
+#include "swfdec_stream_target.h"
#include "swfdec_swf_decoder.h"
#include "swfdec_utils.h"
-static void swfdec_resource_loader_target_init (SwfdecLoaderTargetInterface *iface);
+static void swfdec_resource_stream_target_init (SwfdecStreamTargetInterface *iface);
G_DEFINE_TYPE_WITH_CODE (SwfdecResource, swfdec_resource, SWFDEC_TYPE_FLASH_SECURITY,
- G_IMPLEMENT_INTERFACE (SWFDEC_TYPE_LOADER_TARGET, swfdec_resource_loader_target_init))
+ G_IMPLEMENT_INTERFACE (SWFDEC_TYPE_STREAM_TARGET, swfdec_resource_stream_target_init))
-/*** SWFDEC_LOADER_TARGET interface ***/
+/*** SWFDEC_STREAM_TARGET interface ***/
static gboolean
swfdec_resource_is_root (SwfdecResource *resource)
@@ -61,7 +61,7 @@ swfdec_resource_is_root (SwfdecResource *resource)
}
static SwfdecPlayer *
-swfdec_resource_loader_target_get_player (SwfdecLoaderTarget *target)
+swfdec_resource_stream_target_get_player (SwfdecStreamTarget *target)
{
return SWFDEC_FLASH_SECURITY (target)->player;
}
@@ -81,7 +81,7 @@ swfdec_resource_check_rights (SwfdecResource *resource)
}
static void
-swfdec_resource_loader_target_image (SwfdecResource *instance)
+swfdec_resource_stream_target_image (SwfdecResource *instance)
{
SwfdecSpriteMovie *movie = instance->movie;
@@ -209,7 +209,7 @@ swfdec_resource_create_movie (SwfdecResource *resource)
if (level < 0) {
SWFDEC_WARNING ("%s does not reference a movie, not loading %s", resource->target,
swfdec_url_get_url (swfdec_loader_get_url (resource->loader)));
- swfdec_loader_close (resource->loader);
+ swfdec_stream_close (SWFDEC_STREAM (resource->loader));
swfdec_player_unroot_object (player, G_OBJECT (resource));
return FALSE;
}
@@ -225,8 +225,9 @@ swfdec_resource_create_movie (SwfdecResource *resource)
}
static void
-swfdec_resource_loader_target_open (SwfdecLoaderTarget *target, SwfdecLoader *loader)
+swfdec_resource_stream_target_open (SwfdecStreamTarget *target, SwfdecStream *stream)
{
+ SwfdecLoader *loader = SWFDEC_LOADER (stream);
SwfdecResource *instance = SWFDEC_RESOURCE (target);
const char *query;
@@ -246,18 +247,21 @@ swfdec_resource_loader_target_open (SwfdecLoaderTarget *target, SwfdecLoader *lo
}
static void
-swfdec_resource_loader_target_parse (SwfdecLoaderTarget *target, SwfdecLoader *loader)
+swfdec_resource_stream_target_parse (SwfdecStreamTarget *target, SwfdecStream *stream)
{
+ SwfdecLoader *loader = SWFDEC_LOADER (stream);
SwfdecResource *resource = SWFDEC_RESOURCE (target);
+ SwfdecBufferQueue *queue;
SwfdecBuffer *buffer;
SwfdecDecoder *dec = resource->decoder;
SwfdecStatus status;
guint parsed;
- if (dec == NULL && swfdec_buffer_queue_get_offset (loader->queue) == 0) {
- if (swfdec_buffer_queue_get_depth (loader->queue) < SWFDEC_DECODER_DETECT_LENGTH)
+ queue = swfdec_stream_get_queue (stream);
+ if (dec == NULL && swfdec_buffer_queue_get_offset (queue) == 0) {
+ if (swfdec_buffer_queue_get_depth (queue) < SWFDEC_DECODER_DETECT_LENGTH)
return;
- buffer = swfdec_buffer_queue_peek (loader->queue, 4);
+ buffer = swfdec_buffer_queue_peek (queue, 4);
dec =
swfdec_decoder_new (SWFDEC_FLASH_SECURITY (resource)->player, buffer);
swfdec_buffer_unref (buffer);
@@ -271,19 +275,19 @@ swfdec_resource_loader_target_parse (SwfdecLoaderTarget *target, SwfdecLoader *l
dec->bytes_total = total;
}
}
- while (swfdec_buffer_queue_get_depth (loader->queue)) {
+ while (swfdec_buffer_queue_get_depth (queue)) {
parsed = 0;
status = 0;
do {
- buffer = swfdec_buffer_queue_peek_buffer (loader->queue);
+ buffer = swfdec_buffer_queue_peek_buffer (queue);
if (buffer == NULL)
break;
if (parsed + buffer->length <= 65536) {
swfdec_buffer_unref (buffer);
- buffer = swfdec_buffer_queue_pull_buffer (loader->queue);
+ buffer = swfdec_buffer_queue_pull_buffer (queue);
} else {
swfdec_buffer_unref (buffer);
- buffer = swfdec_buffer_queue_pull (loader->queue, 65536 - parsed);
+ buffer = swfdec_buffer_queue_pull (queue, 65536 - parsed);
}
parsed += buffer->length;
if (dec) {
@@ -294,7 +298,7 @@ swfdec_resource_loader_target_parse (SwfdecLoaderTarget *target, SwfdecLoader *l
} while (parsed < 65536 && (status & (SWFDEC_STATUS_ERROR | SWFDEC_STATUS_EOF)) == 0);
if (status & SWFDEC_STATUS_ERROR) {
SWFDEC_ERROR ("parsing error");
- swfdec_loader_set_target (loader, NULL);
+ swfdec_stream_set_target (SWFDEC_STREAM (loader), NULL);
return;
}
if ((status & SWFDEC_STATUS_INIT)) {
@@ -306,7 +310,7 @@ swfdec_resource_loader_target_parse (SwfdecLoaderTarget *target, SwfdecLoader *l
}
}
if (status & SWFDEC_STATUS_IMAGE)
- swfdec_resource_loader_target_image (resource);
+ swfdec_resource_stream_target_image (resource);
swfdec_resource_emit_signal (resource, SWFDEC_AS_STR_onLoadProgress, TRUE, NULL, 0);
if (status & SWFDEC_STATUS_EOF)
return;
@@ -314,7 +318,7 @@ swfdec_resource_loader_target_parse (SwfdecLoaderTarget *target, SwfdecLoader *l
}
static void
-swfdec_resource_loader_target_eof (SwfdecLoaderTarget *target, SwfdecLoader *loader)
+swfdec_resource_stream_target_close (SwfdecStreamTarget *target, SwfdecStream *stream)
{
SwfdecResource *resource = SWFDEC_RESOURCE (target);
SwfdecAsValue val;
@@ -324,7 +328,7 @@ swfdec_resource_loader_target_eof (SwfdecLoaderTarget *target, SwfdecLoader *loa
SwfdecDecoder *dec = resource->decoder;
swfdec_decoder_eof (dec);
if (dec->data_type != SWFDEC_LOADER_DATA_UNKNOWN)
- swfdec_loader_set_data_type (loader, dec->data_type);
+ swfdec_loader_set_data_type (SWFDEC_LOADER (stream), dec->data_type);
}
SWFDEC_AS_VALUE_SET_INT (&val, 0); /* FIXME */
swfdec_resource_emit_signal (resource, SWFDEC_AS_STR_onLoadComplete, FALSE, &val, 1);
@@ -332,7 +336,7 @@ swfdec_resource_loader_target_eof (SwfdecLoaderTarget *target, SwfdecLoader *loa
}
static void
-swfdec_resource_loader_target_error (SwfdecLoaderTarget *target, SwfdecLoader *loader)
+swfdec_resource_stream_target_error (SwfdecStreamTarget *target, SwfdecStream *stream)
{
SwfdecResource *resource = SWFDEC_RESOURCE (target);
const char *message;
@@ -356,13 +360,13 @@ swfdec_resource_loader_target_error (SwfdecLoaderTarget *target, SwfdecLoader *l
}
static void
-swfdec_resource_loader_target_init (SwfdecLoaderTargetInterface *iface)
+swfdec_resource_stream_target_init (SwfdecStreamTargetInterface *iface)
{
- iface->get_player = swfdec_resource_loader_target_get_player;
- iface->open = swfdec_resource_loader_target_open;
- iface->parse = swfdec_resource_loader_target_parse;
- iface->error = swfdec_resource_loader_target_error;
- iface->eof = swfdec_resource_loader_target_eof;
+ iface->get_player = swfdec_resource_stream_target_get_player;
+ iface->open = swfdec_resource_stream_target_open;
+ iface->parse = swfdec_resource_stream_target_parse;
+ iface->error = swfdec_resource_stream_target_error;
+ iface->close = swfdec_resource_stream_target_close;
}
static void
@@ -371,7 +375,7 @@ swfdec_resource_dispose (GObject *object)
SwfdecResource *resource = SWFDEC_RESOURCE (object);
if (resource->loader) {
- swfdec_loader_set_target (resource->loader, NULL);
+ swfdec_stream_set_target (SWFDEC_STREAM (resource->loader), NULL);
g_object_unref (resource->loader);
resource->loader = NULL;
}
@@ -416,7 +420,7 @@ swfdec_resource_set_loader (SwfdecResource *resource, SwfdecLoader *loader)
g_return_if_fail (resource->loader == NULL);
resource->loader = g_object_ref (loader);
- swfdec_loader_set_target (resource->loader, SWFDEC_LOADER_TARGET (resource));
+ swfdec_stream_set_target (SWFDEC_STREAM (resource->loader), SWFDEC_STREAM_TARGET (resource));
swfdec_flash_security_set_url (SWFDEC_FLASH_SECURITY (resource),
swfdec_loader_get_url (loader));
resource->state = SWFDEC_RESOURCE_REQUESTED;
diff --git a/libswfdec/swfdec_stream.c b/libswfdec/swfdec_stream.c
index f5e446d..545d0c9 100644
--- a/libswfdec/swfdec_stream.c
+++ b/libswfdec/swfdec_stream.c
@@ -161,7 +161,7 @@ swfdec_stream_class_init (SwfdecStreamClass *klass)
g_param_spec_string ("error", "error", "NULL when no error or string describing error",
NULL, G_PARAM_READABLE));
g_object_class_install_property (object_class, PROP_OPEN,
- g_param_spec_boolean ("eof", "eof", "TRUE while data is flowing",
+ g_param_spec_boolean ("open", "open", "TRUE while data is flowing",
FALSE, G_PARAM_READABLE));
g_object_class_install_property (object_class, PROP_EOF,
g_param_spec_boolean ("eof", "eof", "TRUE when all data has been transmitted",
@@ -180,6 +180,14 @@ swfdec_stream_init (SwfdecStream *stream)
/*** INTERNAL API ***/
+SwfdecBufferQueue *
+swfdec_stream_get_queue (SwfdecStream *stream)
+{
+ g_return_val_if_fail (SWFDEC_IS_STREAM (stream), NULL);
+
+ return stream->priv->queue;
+}
+
static void
swfdec_stream_process (gpointer streamp, gpointer unused)
{
@@ -192,7 +200,7 @@ swfdec_stream_process (gpointer streamp, gpointer unused)
if (priv->state == priv->processed_state &&
priv->state != SWFDEC_STREAM_STATE_OPEN)
return;
- g_assert (priv->state != SWFDEC_STREAM_STATE_CLOSED);
+ g_assert (priv->processed_state != SWFDEC_STREAM_STATE_CLOSED);
g_object_ref (stream);
if (priv->state == SWFDEC_STREAM_STATE_ERROR) {
swfdec_stream_target_error (priv->target, stream);
@@ -338,7 +346,7 @@ swfdec_stream_error (SwfdecStream *stream, const char *error)
* swfdec_stream_push() can be called.
**/
void
-swfdec_stream_open (SwfdecStream *stream, const char *url)
+swfdec_stream_open (SwfdecStream *stream)
{
g_return_if_fail (SWFDEC_IS_STREAM (stream));
g_return_if_fail (stream->priv->state == SWFDEC_STREAM_STATE_CONNECTING);
diff --git a/libswfdec/swfdec_stream.h b/libswfdec/swfdec_stream.h
index fb45b53..f971886 100644
--- a/libswfdec/swfdec_stream.h
+++ b/libswfdec/swfdec_stream.h
@@ -22,7 +22,6 @@
#include <glib-object.h>
#include <libswfdec/swfdec_buffer.h>
-#include <libswfdec/swfdec_player.h>
G_BEGIN_DECLS
@@ -57,8 +56,7 @@ struct _SwfdecStreamClass
GType swfdec_stream_get_type (void);
-void swfdec_stream_open (SwfdecStream * stream,
- const char * url);
+void swfdec_stream_open (SwfdecStream * stream);
void swfdec_stream_push (SwfdecStream * stream,
SwfdecBuffer * buffer);
void swfdec_stream_eof (SwfdecStream * stream);
diff --git a/tools/crashfinder.c b/tools/crashfinder.c
index 3c4a4a7..addf1da 100644
--- a/tools/crashfinder.c
+++ b/tools/crashfinder.c
@@ -93,6 +93,7 @@ main (int argc, char **argv)
for (i = 0; i < g_strv_length (filenames); i++)
{
glong played, advance, elapsed;
+ char *error;
g_print ("Running: %s\n", filenames[i]);
@@ -103,9 +104,11 @@ main (int argc, char **argv)
loader = swfdec_file_loader_new (filenames[i]);
player = swfdec_player_new (NULL);
- if (loader->error) {
- g_printerr ("Error loading %s: %s\n", filenames[i], loader->error);
+ g_object_get (loader, "error", &error, NULL);
+ if (error) {
+ g_printerr ("Error loading %s: %s\n", filenames[i], error);
g_object_unref (loader);
+ g_free (error);
continue;
}
diff --git a/tools/dump.c b/tools/dump.c
index efea56d..c8c1e1f 100644
--- a/tools/dump.c
+++ b/tools/dump.c
@@ -405,11 +405,6 @@ main (int argc, char *argv[])
}
player = swfdec_player_new_from_file (argv[1]);
- if (player->priv->resource->loader->error) {
- g_printerr ("Couldn't open file \"%s\": %s\n", argv[1], player->priv->resource->loader->error);
- g_object_unref (player);
- return 1;
- }
/* FIXME: HACK! */
swfdec_player_advance (player, 0);
if (!swfdec_player_is_initialized (player)) {
commit d56d2f0996f5f916b1a4b228e78377f4aa6436ac
Author: Benjamin Otte <otte at gnome.org>
Date: Sat Jan 5 11:32:59 2008 +0100
make SwfdecStream use a private field
diff --git a/libswfdec/swfdec_stream.c b/libswfdec/swfdec_stream.c
index c6bcc98..f5e446d 100644
--- a/libswfdec/swfdec_stream.c
+++ b/libswfdec/swfdec_stream.c
@@ -74,6 +74,17 @@ typedef enum {
SWFDEC_STREAM_STATE_ERROR /* loader is in error state */
} SwfdecStreamState;
+struct _SwfdecStreamPrivate
+{
+ SwfdecPlayer * player; /* player to queue target notificaions in */
+ SwfdecStreamTarget * target; /* SwfdecStreamTarget that gets notified about loading progress */
+ SwfdecStreamState state; /* SwfdecStreamState the stream is currently in */
+ SwfdecStreamState processed_state;/* SwfdecStreamState the target knows about */
+ gboolean queued; /* TRUE if we have queued an action already */
+ char * error; /* error message if in error state or NULL */
+ SwfdecBufferQueue * queue; /* SwfdecBufferQueue managing the input buffers */
+};
+
enum {
PROP_0,
PROP_ERROR,
@@ -87,7 +98,7 @@ static void
swfdec_stream_get_property (GObject *object, guint param_id, GValue *value,
GParamSpec * pspec)
{
- SwfdecStream *stream = SWFDEC_STREAM (object);
+ SwfdecStreamPrivate *stream = SWFDEC_STREAM (object)->priv;
switch (param_id) {
case PROP_ERROR:
@@ -121,7 +132,7 @@ swfdec_stream_set_property (GObject *object, guint param_id, const GValue *value
static void
swfdec_stream_dispose (GObject *object)
{
- SwfdecStream *stream = SWFDEC_STREAM (object);
+ SwfdecStreamPrivate *stream = SWFDEC_STREAM (object)->priv;
/* targets are supposed to keep a reference around */
g_assert (stream->target == NULL);
@@ -140,6 +151,8 @@ swfdec_stream_class_init (SwfdecStreamClass *klass)
{
GObjectClass *object_class = G_OBJECT_CLASS (klass);
+ g_type_class_add_private (klass, sizeof (SwfdecStreamPrivate));
+
object_class->dispose = swfdec_stream_dispose;
object_class->get_property = swfdec_stream_get_property;
object_class->set_property = swfdec_stream_set_property;
@@ -158,7 +171,11 @@ swfdec_stream_class_init (SwfdecStreamClass *klass)
static void
swfdec_stream_init (SwfdecStream *stream)
{
- stream->queue = swfdec_buffer_queue_new ();
+ SwfdecStreamPrivate *priv;
+
+ stream->priv = priv = G_TYPE_INSTANCE_GET_PRIVATE (stream, SWFDEC_TYPE_STREAM, SwfdecStreamPrivate);
+
+ priv->queue = swfdec_buffer_queue_new ();
}
/*** INTERNAL API ***/
@@ -167,29 +184,31 @@ static void
swfdec_stream_process (gpointer streamp, gpointer unused)
{
SwfdecStream *stream = streamp;
+ SwfdecStreamPrivate *priv = stream->priv;
- g_assert (stream->target != NULL);
+ g_assert (priv->target != NULL);
- stream->queued = FALSE;
- if (stream->state == stream->processed_state &&
- stream->state != SWFDEC_STREAM_STATE_OPEN)
+ priv->queued = FALSE;
+ if (priv->state == priv->processed_state &&
+ priv->state != SWFDEC_STREAM_STATE_OPEN)
return;
- g_assert (stream->state != SWFDEC_STREAM_STATE_CLOSED);
+ g_assert (priv->state != SWFDEC_STREAM_STATE_CLOSED);
g_object_ref (stream);
- if (stream->state == SWFDEC_STREAM_STATE_ERROR) {
- swfdec_stream_target_error (stream->target, stream);
+ if (priv->state == SWFDEC_STREAM_STATE_ERROR) {
+ swfdec_stream_target_error (priv->target, stream);
} else {
- while (stream->state != stream->processed_state) {
- if (stream->processed_state == SWFDEC_STREAM_STATE_CONNECTING) {
- stream->processed_state = SWFDEC_STREAM_STATE_OPEN;
- swfdec_stream_target_open (stream->target, stream);
- } else if (stream->processed_state == SWFDEC_STREAM_STATE_OPEN) {
- stream->processed_state = SWFDEC_STREAM_STATE_CLOSED;
- swfdec_stream_target_close (stream->target, stream);
+ while (priv->state != priv->processed_state) {
+ if (priv->processed_state == SWFDEC_STREAM_STATE_CONNECTING) {
+ priv->processed_state = SWFDEC_STREAM_STATE_OPEN;
+ swfdec_stream_target_open (priv->target, stream);
+ } else if (priv->processed_state == SWFDEC_STREAM_STATE_OPEN) {
+ swfdec_stream_target_parse (priv->target, stream);
+ priv->processed_state = SWFDEC_STREAM_STATE_CLOSED;
+ swfdec_stream_target_close (priv->target, stream);
}
}
- if (stream->processed_state == SWFDEC_STREAM_STATE_OPEN) {
- swfdec_stream_target_parse (stream->target, stream);
+ if (priv->processed_state == SWFDEC_STREAM_STATE_OPEN) {
+ swfdec_stream_target_parse (priv->target, stream);
}
}
g_object_unref (stream);
@@ -198,12 +217,14 @@ swfdec_stream_process (gpointer streamp, gpointer unused)
static void
swfdec_stream_queue_processing (SwfdecStream *stream)
{
- if (stream->queued)
+ SwfdecStreamPrivate *priv = stream->priv;
+
+ if (priv->queued)
return;
- stream->queued = TRUE;
- if (stream->target) {
- g_assert (stream->player);
- swfdec_player_add_external_action (stream->player, stream,
+ priv->queued = TRUE;
+ if (priv->target) {
+ g_assert (priv->player);
+ swfdec_player_add_external_action (priv->player, stream,
swfdec_stream_process, NULL);
}
}
@@ -211,42 +232,47 @@ swfdec_stream_queue_processing (SwfdecStream *stream)
void
swfdec_stream_close (SwfdecStream *stream)
{
+ SwfdecStreamPrivate *priv;
SwfdecStreamClass *klass;
g_return_if_fail (SWFDEC_IS_STREAM (stream));
-
- if (stream->state == SWFDEC_STREAM_STATE_ERROR &&
- stream->state == SWFDEC_STREAM_STATE_CLOSED)
+
+ priv = stream->priv;
+ if (priv->state == SWFDEC_STREAM_STATE_ERROR &&
+ priv->state == SWFDEC_STREAM_STATE_CLOSED)
return;
klass = SWFDEC_STREAM_GET_CLASS (stream);
if (klass->close)
klass->close (stream);
- stream->state = SWFDEC_STREAM_STATE_CLOSED;
- stream->processed_state = SWFDEC_STREAM_STATE_CLOSED;
+ priv->state = SWFDEC_STREAM_STATE_CLOSED;
+ priv->processed_state = SWFDEC_STREAM_STATE_CLOSED;
}
void
swfdec_stream_set_target (SwfdecStream *stream, SwfdecStreamTarget *target)
{
+ SwfdecStreamPrivate *priv;
+
g_return_if_fail (SWFDEC_IS_STREAM (stream));
if (target != NULL) {
- g_return_if_fail (stream->processed_state == SWFDEC_STREAM_STATE_CONNECTING);
+ g_return_if_fail (stream->priv->processed_state == SWFDEC_STREAM_STATE_CONNECTING);
g_return_if_fail (SWFDEC_IS_STREAM_TARGET (target));
}
- if (stream->target) {
- swfdec_player_remove_all_external_actions (stream->player, stream);
+ priv = stream->priv;
+ if (priv->target) {
+ swfdec_player_remove_all_external_actions (priv->player, stream);
}
- stream->queued = FALSE;
- stream->target = target;
+ priv->queued = FALSE;
+ priv->target = target;
if (target) {
- stream->player = swfdec_stream_target_get_player (target);
- if (stream->state != SWFDEC_STREAM_STATE_CONNECTING)
+ priv->player = swfdec_stream_target_get_player (target);
+ if (priv->state != SWFDEC_STREAM_STATE_CONNECTING)
swfdec_stream_queue_processing (stream);
} else {
- stream->player = NULL;
+ priv->player = NULL;
}
}
@@ -286,17 +312,20 @@ swfdec_stream_describe (SwfdecStream *stream)
void
swfdec_stream_error (SwfdecStream *stream, const char *error)
{
+ SwfdecStreamPrivate *priv;
+
g_return_if_fail (SWFDEC_IS_STREAM (stream));
g_return_if_fail (error != NULL);
- if (stream->error) {
+ priv = stream->priv;
+ if (priv->error) {
SWFDEC_ERROR ("another error in stream for %s: %s", swfdec_stream_describe (stream), error);
return;
}
SWFDEC_ERROR ("error in stream for %s: %s", swfdec_stream_describe (stream), error);
- stream->state = SWFDEC_STREAM_STATE_ERROR;
- stream->error = g_strdup (error);
+ priv->state = SWFDEC_STREAM_STATE_ERROR;
+ priv->error = g_strdup (error);
swfdec_stream_queue_processing (stream);
}
@@ -312,9 +341,9 @@ void
swfdec_stream_open (SwfdecStream *stream, const char *url)
{
g_return_if_fail (SWFDEC_IS_STREAM (stream));
- g_return_if_fail (stream->state == SWFDEC_STREAM_STATE_CONNECTING);
+ g_return_if_fail (stream->priv->state == SWFDEC_STREAM_STATE_CONNECTING);
- stream->state = SWFDEC_STREAM_STATE_OPEN;
+ stream->priv->state = SWFDEC_STREAM_STATE_OPEN;
g_object_notify (G_OBJECT (stream), "open");
swfdec_stream_queue_processing (stream);
}
@@ -332,10 +361,10 @@ void
swfdec_stream_push (SwfdecStream *stream, SwfdecBuffer *buffer)
{
g_return_if_fail (SWFDEC_IS_STREAM (stream));
- g_return_if_fail (stream->state == SWFDEC_STREAM_STATE_OPEN);
+ g_return_if_fail (stream->priv->state == SWFDEC_STREAM_STATE_OPEN);
g_return_if_fail (buffer != NULL);
- swfdec_buffer_queue_push (stream->queue, buffer);
+ swfdec_buffer_queue_push (stream->priv->queue, buffer);
/* FIXME */
if (SWFDEC_IS_LOADER (stream))
g_object_notify (G_OBJECT (stream), "loaded");
@@ -352,11 +381,11 @@ void
swfdec_stream_eof (SwfdecStream *stream)
{
g_return_if_fail (SWFDEC_IS_STREAM (stream));
- g_return_if_fail (stream->state == SWFDEC_STREAM_STATE_OPEN);
+ g_return_if_fail (stream->priv->state == SWFDEC_STREAM_STATE_OPEN);
+ stream->priv->state = SWFDEC_STREAM_STATE_CLOSED;
g_object_notify (G_OBJECT (stream), "open");
g_object_notify (G_OBJECT (stream), "eof");
- stream->state = SWFDEC_STREAM_STATE_CLOSED;
swfdec_stream_queue_processing (stream);
}
diff --git a/libswfdec/swfdec_stream.h b/libswfdec/swfdec_stream.h
index 15587fc..fb45b53 100644
--- a/libswfdec/swfdec_stream.h
+++ b/libswfdec/swfdec_stream.h
@@ -28,6 +28,7 @@ G_BEGIN_DECLS
typedef struct _SwfdecStream SwfdecStream;
typedef struct _SwfdecStreamClass SwfdecStreamClass;
+typedef struct _SwfdecStreamPrivate SwfdecStreamPrivate;
#define SWFDEC_TYPE_STREAM (swfdec_stream_get_type())
#define SWFDEC_IS_STREAM(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), SWFDEC_TYPE_STREAM))
@@ -41,13 +42,7 @@ struct _SwfdecStream
GObject object;
/*< private >*/
- SwfdecPlayer * player; /* player to queue target notificaions in */
- gpointer target; /* SwfdecStreamTarget that gets notified about loading progress */
- guint state; /* SwfdecStreamState the stream is currently in */
- guint processed_state;/* SwfdecStreamState the target knows about */
- gboolean queued; /* TRUE if we have queued an action already */
- char * error; /* error message if in error state or NULL */
- SwfdecBufferQueue * queue; /* SwfdecBufferQueue managing the input buffers */
+ SwfdecStreamPrivate * priv;
};
struct _SwfdecStreamClass
diff --git a/libswfdec/swfdec_stream_target.c b/libswfdec/swfdec_stream_target.c
index 8593fcb..a5d7184 100644
--- a/libswfdec/swfdec_stream_target.c
+++ b/libswfdec/swfdec_stream_target.c
@@ -82,7 +82,7 @@ swfdec_stream_target_open (SwfdecStreamTarget *target, SwfdecStream *stream)
g_return_if_fail (SWFDEC_IS_STREAM_TARGET (target));
g_return_if_fail (SWFDEC_IS_STREAM (stream));
- SWFDEC_LOG ("opening %s (state %u)", swfdec_stream_describe (stream), stream->state);
+ SWFDEC_LOG ("opening %s", swfdec_stream_describe (stream));
iface = SWFDEC_STREAM_TARGET_GET_INTERFACE (target);
if (iface->open)
@@ -97,7 +97,7 @@ swfdec_stream_target_parse (SwfdecStreamTarget *target, SwfdecStream *stream)
g_return_if_fail (SWFDEC_IS_STREAM_TARGET (target));
g_return_if_fail (SWFDEC_IS_STREAM (stream));
- SWFDEC_LOG ("parsing %s (state %u)", swfdec_stream_describe (stream), stream->state);
+ SWFDEC_LOG ("parsing %s", swfdec_stream_describe (stream));
iface = SWFDEC_STREAM_TARGET_GET_INTERFACE (target);
if (iface->parse)
@@ -112,7 +112,7 @@ swfdec_stream_target_close (SwfdecStreamTarget *target, SwfdecStream *stream)
g_return_if_fail (SWFDEC_IS_STREAM_TARGET (target));
g_return_if_fail (SWFDEC_IS_STREAM (stream));
- SWFDEC_LOG ("close on %s (state %u)", swfdec_stream_describe (stream), stream->state);
+ SWFDEC_LOG ("close on %s", swfdec_stream_describe (stream));
iface = SWFDEC_STREAM_TARGET_GET_INTERFACE (target);
if (iface->close)
@@ -127,7 +127,7 @@ swfdec_stream_target_error (SwfdecStreamTarget *target, SwfdecStream *stream)
g_return_if_fail (SWFDEC_IS_STREAM_TARGET (target));
g_return_if_fail (SWFDEC_IS_STREAM (stream));
- SWFDEC_LOG ("error on %s (state %u)", swfdec_stream_describe (stream), stream->state);
+ SWFDEC_LOG ("error on %s", swfdec_stream_describe (stream));
iface = SWFDEC_STREAM_TARGET_GET_INTERFACE (target);
if (iface->error)
commit ca02fc6414eedfa5c1a851afddfd9cb9f20907ac
Author: Benjamin Otte <otte at gnome.org>
Date: Sat Jan 5 11:17:54 2008 +0100
add a new SwfdecStream class
This is supposed to end up as the base class for sockets and loaders
diff --git a/libswfdec/Makefile.am b/libswfdec/Makefile.am
index 4f2d438..a8e2cf6 100644
--- a/libswfdec/Makefile.am
+++ b/libswfdec/Makefile.am
@@ -127,11 +127,13 @@ libswfdec_source_files = \
swfdec_shared_object.c \
swfdec_sound.c \
swfdec_sound_object.c \
- swfdec_stroke.c \
swfdec_sprite.c \
swfdec_sprite_movie.c \
swfdec_sprite_movie_as.c \
swfdec_stage_as.c \
+ swfdec_stream.c \
+ swfdec_stream_target.c \
+ swfdec_stroke.c \
swfdec_style_sheet.c \
swfdec_swf_decoder.c \
swfdec_system.c \
@@ -193,6 +195,7 @@ public_headers = \
swfdec_player_scripting.h \
swfdec_rectangle.h \
swfdec_script.h \
+ swfdec_stream.h \
swfdec_system.h \
swfdec_url.h
@@ -273,9 +276,10 @@ noinst_HEADERS = \
swfdec_sound_object.h \
swfdec_sprite.h \
swfdec_sprite_movie.h \
- swfdec_style_sheet.h \
swfdec_swf_decoder.h \
+ swfdec_stream_target.h \
swfdec_stroke.h \
+ swfdec_style_sheet.h \
swfdec_tag.h \
swfdec_text.h \
swfdec_text_format.h \
diff --git a/libswfdec/swfdec.h b/libswfdec/swfdec.h
index 1a9a4ca..8cb955a 100644
--- a/libswfdec/swfdec.h
+++ b/libswfdec/swfdec.h
@@ -40,6 +40,7 @@
#include <libswfdec/swfdec_player.h>
#include <libswfdec/swfdec_player_scripting.h>
#include <libswfdec/swfdec_rectangle.h>
+#include <libswfdec/swfdec_stream.h>
#include <libswfdec/swfdec_system.h>
#include <libswfdec/swfdec_url.h>
diff --git a/libswfdec/swfdec_loader_internal.h b/libswfdec/swfdec_loader_internal.h
index 49ab95d..0a835d4 100644
--- a/libswfdec/swfdec_loader_internal.h
+++ b/libswfdec/swfdec_loader_internal.h
@@ -22,6 +22,7 @@
#include "swfdec_loader.h"
#include "swfdec_loadertarget.h"
+#include "swfdec_stream_target.h"
G_BEGIN_DECLS
@@ -34,6 +35,13 @@ typedef enum {
SWFDEC_LOADER_STATE_ERROR /* loader is in error state */
} SwfdecLoaderState;
+/* swfdec_stream.c */
+const char * swfdec_stream_describe (SwfdecStream * stream);
+void swfdec_stream_close (SwfdecStream * stream);
+void swfdec_stream_set_target (SwfdecStream * stream,
+ SwfdecStreamTarget * target);
+
+/* swfdec_loader.c */
SwfdecLoader * swfdec_loader_load (SwfdecLoader * loader,
const SwfdecURL * url,
SwfdecLoaderRequest request,
diff --git a/libswfdec/swfdec_stream.c b/libswfdec/swfdec_stream.c
new file mode 100644
index 0000000..c6bcc98
--- /dev/null
+++ b/libswfdec/swfdec_stream.c
@@ -0,0 +1,362 @@
+/* Swfdec
+ * Copyright (C) 2006-2008 Benjamin Otte <otte at gnome.org>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301 USA
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include <string.h>
+#include "swfdec_loader_internal.h"
+#include "swfdec_buffer.h"
+#include "swfdec_debug.h"
+#include "swfdec_stream_target.h"
+#include "swfdec_player_internal.h"
+
+/*** gtk-doc ***/
+
+/**
+ * SECTION:SwfdecStream
+ * @title: SwfdecStream
+ * @short_description: object used for input
+ *
+ * SwfdecStream is the base class used for communication inside Swfdec. If you
+ * are a UNIX developer, think of this class as the equivalent to a file
+ * descriptor. #SwfdecLoader and #SwfdecSocket are the subclasses supposed to
+ * be used for files or network sockets, respectively.
+ *
+ * This class provides the functions necessary to implement subclasses of
+ * streams. None of the functions described in this section should be used by
+ * anything but subclass implementations. Consider them "protected".
+ */
+
+/**
+ * SwfdecStream:
+ *
+ * This is the base object used for providing input. It is abstract, use a
+ * subclass to provide your input. All members are considered private.
+ */
+
+/**
+ * SwfdecStreamClass:
+ * @describe: Provide a string describing your string. Default implementations
+ * of this function exist for both the #SwfdecLoader and
+ * #SwfdecStream subclasses. They return the URL for the stream.
+ * @close: Called when Swfdec requests that the stream be closed. After this
+ * function was called, Swfdec will consider the stream finished and
+ * will not ever read data from it again.
+ *
+ * This is the base class used for providing input. You are supposed to create
+ * a subclass that fills in the function pointers mentioned above.
+ */
+
+/*** SwfdecStream ***/
+
+typedef enum {
+ SWFDEC_STREAM_STATE_CONNECTING = 0, /* stream is still in the process of establishing a connection */
+ SWFDEC_STREAM_STATE_OPEN, /* stream is open and data flow is happening */
+ SWFDEC_STREAM_STATE_CLOSED, /* loader has been closed */
+ SWFDEC_STREAM_STATE_ERROR /* loader is in error state */
+} SwfdecStreamState;
+
+enum {
+ PROP_0,
+ PROP_ERROR,
+ PROP_OPEN,
+ PROP_EOF
+};
+
+G_DEFINE_ABSTRACT_TYPE (SwfdecStream, swfdec_stream, G_TYPE_OBJECT)
+
+static void
+swfdec_stream_get_property (GObject *object, guint param_id, GValue *value,
+ GParamSpec * pspec)
+{
+ SwfdecStream *stream = SWFDEC_STREAM (object);
+
+ switch (param_id) {
+ case PROP_ERROR:
+ g_value_set_string (value, stream->error);
+ break;
+ case PROP_OPEN:
+ g_value_set_boolean (value, stream->state == SWFDEC_STREAM_STATE_OPEN);
+ break;
+ case PROP_EOF:
+ g_value_set_boolean (value, stream->state == SWFDEC_STREAM_STATE_CLOSED);
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, param_id, pspec);
+ break;
+ }
+}
+
+static void
+swfdec_stream_set_property (GObject *object, guint param_id, const GValue *value,
+ GParamSpec *pspec)
+{
+ //SwfdecStream *stream = SWFDEC_STREAM (object);
+
+ switch (param_id) {
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, param_id, pspec);
+ break;
+ }
+}
+
+static void
+swfdec_stream_dispose (GObject *object)
+{
+ SwfdecStream *stream = SWFDEC_STREAM (object);
+
+ /* targets are supposed to keep a reference around */
+ g_assert (stream->target == NULL);
+ if (stream->queue) {
+ swfdec_buffer_queue_unref (stream->queue);
+ stream->queue = NULL;
+ }
+ g_free (stream->error);
+ stream->error = NULL;
+
+ G_OBJECT_CLASS (swfdec_stream_parent_class)->dispose (object);
+}
+
+static void
+swfdec_stream_class_init (SwfdecStreamClass *klass)
+{
+ GObjectClass *object_class = G_OBJECT_CLASS (klass);
+
+ object_class->dispose = swfdec_stream_dispose;
+ object_class->get_property = swfdec_stream_get_property;
+ object_class->set_property = swfdec_stream_set_property;
+
+ g_object_class_install_property (object_class, PROP_ERROR,
+ g_param_spec_string ("error", "error", "NULL when no error or string describing error",
+ NULL, G_PARAM_READABLE));
+ g_object_class_install_property (object_class, PROP_OPEN,
+ g_param_spec_boolean ("eof", "eof", "TRUE while data is flowing",
+ FALSE, G_PARAM_READABLE));
+ g_object_class_install_property (object_class, PROP_EOF,
+ g_param_spec_boolean ("eof", "eof", "TRUE when all data has been transmitted",
+ FALSE, G_PARAM_READABLE));
+}
+
+static void
+swfdec_stream_init (SwfdecStream *stream)
+{
+ stream->queue = swfdec_buffer_queue_new ();
+}
+
+/*** INTERNAL API ***/
+
+static void
+swfdec_stream_process (gpointer streamp, gpointer unused)
+{
+ SwfdecStream *stream = streamp;
+
+ g_assert (stream->target != NULL);
+
+ stream->queued = FALSE;
+ if (stream->state == stream->processed_state &&
+ stream->state != SWFDEC_STREAM_STATE_OPEN)
+ return;
+ g_assert (stream->state != SWFDEC_STREAM_STATE_CLOSED);
+ g_object_ref (stream);
+ if (stream->state == SWFDEC_STREAM_STATE_ERROR) {
+ swfdec_stream_target_error (stream->target, stream);
+ } else {
+ while (stream->state != stream->processed_state) {
+ if (stream->processed_state == SWFDEC_STREAM_STATE_CONNECTING) {
+ stream->processed_state = SWFDEC_STREAM_STATE_OPEN;
+ swfdec_stream_target_open (stream->target, stream);
+ } else if (stream->processed_state == SWFDEC_STREAM_STATE_OPEN) {
+ stream->processed_state = SWFDEC_STREAM_STATE_CLOSED;
+ swfdec_stream_target_close (stream->target, stream);
+ }
+ }
+ if (stream->processed_state == SWFDEC_STREAM_STATE_OPEN) {
+ swfdec_stream_target_parse (stream->target, stream);
+ }
+ }
+ g_object_unref (stream);
+}
+
+static void
+swfdec_stream_queue_processing (SwfdecStream *stream)
+{
+ if (stream->queued)
+ return;
+ stream->queued = TRUE;
+ if (stream->target) {
+ g_assert (stream->player);
+ swfdec_player_add_external_action (stream->player, stream,
+ swfdec_stream_process, NULL);
+ }
+}
+
+void
+swfdec_stream_close (SwfdecStream *stream)
+{
+ SwfdecStreamClass *klass;
+
+ g_return_if_fail (SWFDEC_IS_STREAM (stream));
+
+ if (stream->state == SWFDEC_STREAM_STATE_ERROR &&
+ stream->state == SWFDEC_STREAM_STATE_CLOSED)
+ return;
+
+ klass = SWFDEC_STREAM_GET_CLASS (stream);
+
+ if (klass->close)
+ klass->close (stream);
+ stream->state = SWFDEC_STREAM_STATE_CLOSED;
+ stream->processed_state = SWFDEC_STREAM_STATE_CLOSED;
+}
+
+void
+swfdec_stream_set_target (SwfdecStream *stream, SwfdecStreamTarget *target)
+{
+ g_return_if_fail (SWFDEC_IS_STREAM (stream));
+ if (target != NULL) {
+ g_return_if_fail (stream->processed_state == SWFDEC_STREAM_STATE_CONNECTING);
+ g_return_if_fail (SWFDEC_IS_STREAM_TARGET (target));
+ }
+
+ if (stream->target) {
+ swfdec_player_remove_all_external_actions (stream->player, stream);
+ }
+ stream->queued = FALSE;
+ stream->target = target;
+ if (target) {
+ stream->player = swfdec_stream_target_get_player (target);
+ if (stream->state != SWFDEC_STREAM_STATE_CONNECTING)
+ swfdec_stream_queue_processing (stream);
+ } else {
+ stream->player = NULL;
+ }
+}
+
+/** PUBLIC API ***/
+
+/**
+ * swfdec_stream_describe:
+ * @stream: a #SwfdecStream
+ *
+ * Describes the stream in a simple string. This is mostly useful for debugging
+ * purposes.
+ *
+ * Returns: a constant string describing the stream
+ **/
+const char *
+swfdec_stream_describe (SwfdecStream *stream)
+{
+ SwfdecStreamClass *klass;
+
+ g_return_val_if_fail (SWFDEC_IS_STREAM (stream), NULL);
+
+ klass = SWFDEC_STREAM_GET_CLASS (stream);
+ g_return_val_if_fail (klass->describe, NULL);
+
+ return klass->describe (stream);
+}
+
+/**
+ * swfdec_stream_error:
+ * @stream: a #SwfdecStream
+ * @error: a string describing the error
+ *
+ * Moves the stream in the error state if it wasn't before. A stream that is in
+ * the error state will not process any more data. Also, internal error
+ * handling scripts may be executed.
+ **/
+void
+swfdec_stream_error (SwfdecStream *stream, const char *error)
+{
+ g_return_if_fail (SWFDEC_IS_STREAM (stream));
+ g_return_if_fail (error != NULL);
+
+ if (stream->error) {
+ SWFDEC_ERROR ("another error in stream for %s: %s", swfdec_stream_describe (stream), error);
+ return;
+ }
+
+ SWFDEC_ERROR ("error in stream for %s: %s", swfdec_stream_describe (stream), error);
+ stream->state = SWFDEC_STREAM_STATE_ERROR;
+ stream->error = g_strdup (error);
+ swfdec_stream_queue_processing (stream);
+}
+
+/**
+ * swfdec_stream_open:
+ * @stream: a #SwfdecStream
+ *
+ * Call this function when your stream opened the resulting file. For HTTP this
+ * is when having received the headers. You must call this function before
+ * swfdec_stream_push() can be called.
+ **/
+void
+swfdec_stream_open (SwfdecStream *stream, const char *url)
+{
+ g_return_if_fail (SWFDEC_IS_STREAM (stream));
+ g_return_if_fail (stream->state == SWFDEC_STREAM_STATE_CONNECTING);
+
+ stream->state = SWFDEC_STREAM_STATE_OPEN;
+ g_object_notify (G_OBJECT (stream), "open");
+ swfdec_stream_queue_processing (stream);
+}
+
+/**
+ * swfdec_stream_push:
+ * @stream: a #SwfdecStream
+ * @buffer: new data to make available. The stream takes the reference
+ * to the buffer.
+ *
+ * Makes the data in @buffer available to @stream and processes it. The @stream
+ * must be open.
+ **/
+void
+swfdec_stream_push (SwfdecStream *stream, SwfdecBuffer *buffer)
+{
+ g_return_if_fail (SWFDEC_IS_STREAM (stream));
+ g_return_if_fail (stream->state == SWFDEC_STREAM_STATE_OPEN);
+ g_return_if_fail (buffer != NULL);
+
+ swfdec_buffer_queue_push (stream->queue, buffer);
+ /* FIXME */
+ if (SWFDEC_IS_LOADER (stream))
+ g_object_notify (G_OBJECT (stream), "loaded");
+ swfdec_stream_queue_processing (stream);
+}
+
+/**
+ * swfdec_stream_eof:
+ * @stream: a #SwfdecStream
+ *
+ * Indicates to @stream that no more data will follow. The stream must be open.
+ **/
+void
+swfdec_stream_eof (SwfdecStream *stream)
+{
+ g_return_if_fail (SWFDEC_IS_STREAM (stream));
+ g_return_if_fail (stream->state == SWFDEC_STREAM_STATE_OPEN);
+
+ g_object_notify (G_OBJECT (stream), "open");
+ g_object_notify (G_OBJECT (stream), "eof");
+ stream->state = SWFDEC_STREAM_STATE_CLOSED;
+ swfdec_stream_queue_processing (stream);
+}
+
diff --git a/libswfdec/swfdec_stream.h b/libswfdec/swfdec_stream.h
new file mode 100644
index 0000000..15587fc
--- /dev/null
+++ b/libswfdec/swfdec_stream.h
@@ -0,0 +1,75 @@
+/* Swfdec
+ * Copyright (C) 2006-2008 Benjamin Otte <otte at gnome.org>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301 USA
+ */
+
+#ifndef _SWFDEC_STREAM_H_
+#define _SWFDEC_STREAM_H_
+
+#include <glib-object.h>
+#include <libswfdec/swfdec_buffer.h>
+#include <libswfdec/swfdec_player.h>
+
+G_BEGIN_DECLS
+
+typedef struct _SwfdecStream SwfdecStream;
+typedef struct _SwfdecStreamClass SwfdecStreamClass;
+
+#define SWFDEC_TYPE_STREAM (swfdec_stream_get_type())
+#define SWFDEC_IS_STREAM(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), SWFDEC_TYPE_STREAM))
+#define SWFDEC_IS_STREAM_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), SWFDEC_TYPE_STREAM))
+#define SWFDEC_STREAM(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), SWFDEC_TYPE_STREAM, SwfdecStream))
+#define SWFDEC_STREAM_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), SWFDEC_TYPE_STREAM, SwfdecStreamClass))
+#define SWFDEC_STREAM_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), SWFDEC_TYPE_STREAM, SwfdecStreamClass))
+
+struct _SwfdecStream
+{
+ GObject object;
+
+ /*< private >*/
+ SwfdecPlayer * player; /* player to queue target notificaions in */
+ gpointer target; /* SwfdecStreamTarget that gets notified about loading progress */
+ guint state; /* SwfdecStreamState the stream is currently in */
+ guint processed_state;/* SwfdecStreamState the target knows about */
+ gboolean queued; /* TRUE if we have queued an action already */
+ char * error; /* error message if in error state or NULL */
+ SwfdecBufferQueue * queue; /* SwfdecBufferQueue managing the input buffers */
+};
+
+struct _SwfdecStreamClass
+{
+ GObjectClass object_class;
+
+ /* get a nice description string */
+ const char * (* describe) (SwfdecStream * stream);
+ /* close the stream. */
+ void (* close) (SwfdecStream * stream);
+};
+
+GType swfdec_stream_get_type (void);
+
+void swfdec_stream_open (SwfdecStream * stream,
+ const char * url);
+void swfdec_stream_push (SwfdecStream * stream,
+ SwfdecBuffer * buffer);
+void swfdec_stream_eof (SwfdecStream * stream);
+void swfdec_stream_error (SwfdecStream * stream,
+ const char * error);
+
+
+G_END_DECLS
+#endif
diff --git a/libswfdec/swfdec_stream_target.c b/libswfdec/swfdec_stream_target.c
new file mode 100644
index 0000000..8593fcb
--- /dev/null
+++ b/libswfdec/swfdec_stream_target.c
@@ -0,0 +1,136 @@
+/* Swfdec
+ * Copyright (C) 2007-2008 Benjamin Otte <otte at gnome.org>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301 USA
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include "swfdec_stream_target.h"
+#include "swfdec_debug.h"
+#include "swfdec_loader_internal.h"
+#include "swfdec_player_internal.h"
+
+static void
+swfdec_stream_target_base_init (gpointer g_class)
+{
+ static gboolean initialized = FALSE;
+
+ if (G_UNLIKELY (!initialized)) {
+ initialized = TRUE;
+ }
+}
+
+GType
+swfdec_stream_target_get_type (void)
+{
+ static GType stream_target_type = 0;
+
+ if (!stream_target_type) {
+ static const GTypeInfo stream_target_info = {
+ sizeof (SwfdecStreamTargetInterface),
+ swfdec_stream_target_base_init,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ 0,
+ 0,
+ NULL,
+ };
+
+ stream_target_type = g_type_register_static (G_TYPE_INTERFACE,
+ "SwfdecStreamTarget", &stream_target_info, 0);
+ g_type_interface_add_prerequisite (stream_target_type, G_TYPE_OBJECT);
+ }
+
+ return stream_target_type;
+}
+
+SwfdecPlayer *
+swfdec_stream_target_get_player (SwfdecStreamTarget *target)
+{
+ SwfdecStreamTargetInterface *iface;
+
+ g_return_val_if_fail (SWFDEC_IS_STREAM_TARGET (target), NULL);
+
+ iface = SWFDEC_STREAM_TARGET_GET_INTERFACE (target);
+ g_assert (iface->get_player != NULL);
+ return iface->get_player (target);
+}
+
+void
+swfdec_stream_target_open (SwfdecStreamTarget *target, SwfdecStream *stream)
+{
+ SwfdecStreamTargetInterface *iface;
+
+ g_return_if_fail (SWFDEC_IS_STREAM_TARGET (target));
+ g_return_if_fail (SWFDEC_IS_STREAM (stream));
+
+ SWFDEC_LOG ("opening %s (state %u)", swfdec_stream_describe (stream), stream->state);
+
+ iface = SWFDEC_STREAM_TARGET_GET_INTERFACE (target);
+ if (iface->open)
+ iface->open (target, stream);
+}
+
+void
+swfdec_stream_target_parse (SwfdecStreamTarget *target, SwfdecStream *stream)
+{
+ SwfdecStreamTargetInterface *iface;
+
+ g_return_if_fail (SWFDEC_IS_STREAM_TARGET (target));
+ g_return_if_fail (SWFDEC_IS_STREAM (stream));
+
+ SWFDEC_LOG ("parsing %s (state %u)", swfdec_stream_describe (stream), stream->state);
+
+ iface = SWFDEC_STREAM_TARGET_GET_INTERFACE (target);
+ if (iface->parse)
+ iface->parse (target, stream);
+}
+
+void
+swfdec_stream_target_close (SwfdecStreamTarget *target, SwfdecStream *stream)
+{
+ SwfdecStreamTargetInterface *iface;
+
+ g_return_if_fail (SWFDEC_IS_STREAM_TARGET (target));
+ g_return_if_fail (SWFDEC_IS_STREAM (stream));
+
+ SWFDEC_LOG ("close on %s (state %u)", swfdec_stream_describe (stream), stream->state);
+
+ iface = SWFDEC_STREAM_TARGET_GET_INTERFACE (target);
+ if (iface->close)
+ iface->close (target, stream);
+}
+
+void
+swfdec_stream_target_error (SwfdecStreamTarget *target, SwfdecStream *stream)
+{
+ SwfdecStreamTargetInterface *iface;
+
+ g_return_if_fail (SWFDEC_IS_STREAM_TARGET (target));
+ g_return_if_fail (SWFDEC_IS_STREAM (stream));
+
+ SWFDEC_LOG ("error on %s (state %u)", swfdec_stream_describe (stream), stream->state);
+
+ iface = SWFDEC_STREAM_TARGET_GET_INTERFACE (target);
+ if (iface->error)
+ iface->error (target, stream);
+}
+
diff --git a/libswfdec/swfdec_stream_target.h b/libswfdec/swfdec_stream_target.h
new file mode 100644
index 0000000..42b8e16
--- /dev/null
+++ b/libswfdec/swfdec_stream_target.h
@@ -0,0 +1,67 @@
+/* Swfdec
+ * Copyright (C) 2007-2008 Benjamin Otte <otte at gnome.org>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301 USA
+ */
+
+#ifndef __SWFDEC_STREAM_TARGET_H__
+#define __SWFDEC_STREAM_TARGET_H__
+
+#include <libswfdec/swfdec.h>
+
+G_BEGIN_DECLS
+
+
+#define SWFDEC_TYPE_STREAM_TARGET (swfdec_stream_target_get_type ())
+#define SWFDEC_STREAM_TARGET(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), SWFDEC_TYPE_STREAM_TARGET, SwfdecStreamTarget))
+#define SWFDEC_IS_STREAM_TARGET(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), SWFDEC_TYPE_STREAM_TARGET))
+#define SWFDEC_STREAM_TARGET_GET_INTERFACE(inst) (G_TYPE_INSTANCE_GET_INTERFACE ((inst), SWFDEC_TYPE_STREAM_TARGET, SwfdecStreamTargetInterface))
+
+typedef struct _SwfdecStreamTarget SwfdecStreamTarget; /* dummy object */
+typedef struct _SwfdecStreamTargetInterface SwfdecStreamTargetInterface;
+
+struct _SwfdecStreamTargetInterface {
+ GTypeInterface parent;
+
+ /* mandatory vfunc */
+ SwfdecPlayer * (* get_player) (SwfdecStreamTarget * target);
+ /* optional vfuncs */
+ void (* open) (SwfdecStreamTarget * target,
+ SwfdecStream * stream);
+ void (* parse) (SwfdecStreamTarget * target,
+ SwfdecStream * stream);
+ void (* close) (SwfdecStreamTarget * target,
+ SwfdecStream * stream);
+ void (* error) (SwfdecStreamTarget * target,
+ SwfdecStream * stream);
+};
+
+GType swfdec_stream_target_get_type (void) G_GNUC_CONST;
+
+SwfdecPlayer * swfdec_stream_target_get_player (SwfdecStreamTarget * target);
+void swfdec_stream_target_open (SwfdecStreamTarget * target,
+ SwfdecStream * stream);
+void swfdec_stream_target_parse (SwfdecStreamTarget * target,
+ SwfdecStream * stream);
+void swfdec_stream_target_close (SwfdecStreamTarget * target,
+ SwfdecStream * stream);
+void swfdec_stream_target_error (SwfdecStreamTarget * target,
+ SwfdecStream * stream);
+
+
+G_END_DECLS
+
+#endif /* __SWFDEC_STREAM_TARGET_H__ */
commit 5c0f95cba76370f852b72592c2f7c43c65f17d00
Author: Benjamin Otte <otte at gnome.org>
Date: Fri Jan 4 19:17:36 2008 +0100
add rtmp test directory and a first stab at a server application
diff --git a/configure.ac b/configure.ac
index 25bb286..69504cd 100644
--- a/configure.ac
+++ b/configure.ac
@@ -354,6 +354,7 @@ player/Makefile
test/Makefile
test/custom/Makefile
test/image/Makefile
+test/rtmp/Makefile
test/sound/Makefile
test/trace/Makefile
test/various/Makefile
diff --git a/test/rtmp/.gitignore b/test/rtmp/.gitignore
new file mode 100644
index 0000000..804265c
--- /dev/null
+++ b/test/rtmp/.gitignore
@@ -0,0 +1,10 @@
+*~
+.deps
+.libs
+
+Makefile
+Makefile.in
+*.lo
+*.o
+
+rtmp-server
diff --git a/test/rtmp/Makefile.am b/test/rtmp/Makefile.am
new file mode 100644
index 0000000..c9c633b
--- /dev/null
+++ b/test/rtmp/Makefile.am
@@ -0,0 +1,9 @@
+noinst_PROGRAMS = rtmp-server
+
+check_PROGRAMS = sound
+TESTS = $(check_PROGRAMS)
+
+rtmp_server_SOURCES = rtmp_server.c
+rtmp_server_CFLAGS = $(GLOBAL_CFLAGS) $(HTTP_CFLAGS) $(SWFDEC_CFLAGS) $(CAIRO_CFLAGS)
+rtmp_server_LDFLAGS = $(SWFDEC_LIBS) $(HTTP_LIBS) $(CAIRO_LIBS)
+
diff --git a/test/rtmp/rtmp_server.c b/test/rtmp/rtmp_server.c
new file mode 100644
index 0000000..2a26675
--- /dev/null
+++ b/test/rtmp/rtmp_server.c
@@ -0,0 +1,83 @@
+/* Swfdec
+ * Copyright (C) 2008 Benjamin Otte <otte at gnome.org>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301 USA
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+#include <libsoup/soup.h>
+#include <libsoup/soup-address.h>
+#include <libswfdec/swfdec.h>
+
+static void
+hexdump (SwfdecBuffer *buffer)
+{
+ guint i;
+
+ for (i = 0; i < buffer->length; i++) {
+ g_print ("%02X%s", buffer->data[i], i % 8 == 7 ? "\n" : (i % 4 == 3 ? " " : " "));
+ }
+ if (i % 8)
+ g_print ("\n");
+}
+
+static void
+do_read (SoupSocket *conn, gpointer unused)
+{
+ SwfdecBuffer *buf;
+ SoupSocketIOStatus status;
+
+ buf = swfdec_buffer_new_and_alloc (16);
+ while ((status = soup_socket_read (conn, buf->data, buf->length, &buf->length)) == SOUP_SOCKET_OK) {
+ hexdump (buf);
+ buf->length = 16;
+ }
+ swfdec_buffer_unref (buf);
+ g_print ("status: %u\n", (guint) status);
+}
+
+static void
+new_connection (SoupSocket *server, SoupSocket *conn, gpointer unused)
+{
+ g_print ("WOOT!\n");
+ g_signal_connect (conn, "readable", G_CALLBACK (do_read), NULL);
+ do_read (conn, NULL);
+}
+
+int
+main (int argc, char **argv)
+{
+ GMainLoop *loop;
+ SoupSocket *server;
+ SoupAddress *address;
+
+ swfdec_init ();
+
+ address = soup_address_new_any (SOUP_ADDRESS_FAMILY_IPV4, 1935);
+ server = soup_socket_new ("non-blocking", TRUE, NULL);
+ soup_socket_listen (server, address);
+ g_signal_connect (server, "new-connection", G_CALLBACK (new_connection), NULL);
+ g_object_unref (address);
+
+ loop = g_main_loop_new (NULL, FALSE);
+ g_main_loop_run (loop);
+ g_main_loop_unref (loop);
+
+ return 0;
+}
+
More information about the Swfdec
mailing list