comparison manual.lyx @ 0:be303a3f5ea8

import
author Peter Meerwald <pmeerw@cosy.sbg.ac.at>
date Sun, 12 Aug 2007 13:14:34 +0200
parents
children acb6967ee76d
comparison
equal deleted inserted replaced
-1:000000000000 0:be303a3f5ea8
1 #LyX 1.1 created this file. For more info see http://www.lyx.org/
2 \lyxformat 218
3 \textclass paper
4 \language english
5 \inputencoding auto
6 \fontscheme default
7 \graphics default
8 \paperfontsize default
9 \spacing single
10 \papersize Default
11 \paperpackage a4
12 \use_geometry 0
13 \use_amsmath 0
14 \paperorientation portrait
15 \secnumdepth 3
16 \tocdepth 3
17 \paragraph_separation skip
18 \defskip smallskip
19 \quotes_language english
20 \quotes_times 2
21 \papercolumns 1
22 \papersides 1
23 \paperpagestyle default
24
25 \layout Title
26
27 Watermarking Source Code
28 \layout SubTitle
29
30 version 0.4
31 \layout Author
32
33 Peter Meerwald
34 \layout Address
35
36 Dept.
37 of Scientific Computing, University of Salzburg
38 \newline
39 Jakob-Haringer-Str.
40 2, A-5020 Salzburg, Austria
41 \newline
42
43 \begin_inset LatexCommand \url{mailto:pmeerw@cosy.sbg.ac.at}
44
45 \end_inset
46
47
48 \newline
49
50 \begin_inset LatexCommand \url{http://www.cosy.sbg.ac.at/~pmeerw/Watermarking}
51
52 \end_inset
53
54
55 \layout Abstract
56
57 This package provides source code for some watermarking algorithms in hopefully
58 portable C code.
59 The programs can be used to study watermarking techniques, perform comparative
60 robustness tests and develop new attacks against embedded watermarks.
61 \layout Abstract
62
63 However, the provided programs are by no means suitable for real-world applicati
64 on (i.e.
65 copyright protection) and the code solely serves some educational purpose.
66 \layout Standard
67
68
69 \begin_inset LatexCommand \tableofcontents{}
70
71 \end_inset
72
73
74 \layout Section
75
76 Introduction
77 \layout Standard
78
79 Academic research in the watermarking field has grown dramatically since
80 approximately 1995.
81 But surprisingly, source code for the proposed watermarking schemes has
82 not been made available.
83 The reason is most likely the security of many watermarking systems lies
84 at least to some extent in the embedding and detection algorithm itself,
85 and not in the keys used -- violating the Kerckhoff principle
86 \begin_inset LatexCommand \cite{Kerckhoff1883a}
87
88 \end_inset
89
90 .
91 \layout Standard
92
93 With the availability of public robustness test for watermarking algorithms,
94 StirMark
95 \begin_inset LatexCommand \cite{Petitcolas99c, Petitcolas98b, Petitcolas98a}
96
97 \end_inset
98
99 , Unzign
100 \begin_float footnote
101 \layout Standard
102
103
104 \begin_inset LatexCommand \url{http://www.altern.org/watermark}
105
106 \end_inset
107
108
109 \end_float
110 and very recently Checkmark
111 \begin_inset LatexCommand \cite{Pereira01b}
112
113 \end_inset
114
115 , the situation begins to improve.
116 Now it is possible to measure the performance of watermarking systems.
117
118 \layout Standard
119
120 In order the compare and evaluate new embedding and detection techniques,
121 it is also necessary to have some reference implementations of the older,
122 now often called classical schemes.
123 In this work, we provide some implementations of watermarking schemes,
124 some of which can be considered 'classical'.
125 \layout Standard
126
127 It was the goal to capture the main ideas of the proposed algorithms, as
128 layed out in the respective papers.
129 This is clearly not an easy task as some papers do not disclose all details
130 or state which particular parameters were used to obtain the results outlined
131 in the communications.
132 \layout Standard
133
134 I am very interested in hearing your comments, complaints and suggestions
135 regarding this software.
136 Moreover, if you have source code for a watermarking scheme not yet covered
137 or some useful utility I would be happy to include your code in this distributi
138 on.
139 Please see the contact information at the top of this document.
140 \layout Standard
141
142 If you use the accompanying code, please cite my thesis:
143 \layout Quotation
144
145 Peter Meerwald, Digital Image Watermarking in the Wavelet Transform Domain,
146 Master's Thesis, Department of Scientific Computing, University of Salzburg,
147 Austria, January 2001.
148 \layout Section
149
150 Software
151 \layout Standard
152
153 Most of the software provided herein was written by myself, as part of my
154 Master thesis.
155 Some contributions were made by Vassilis Fotopoulos
156 \begin_float footnote
157 \layout Standard
158
159
160 \begin_inset LatexCommand \url{mailto:vfotop1@physics.upatras.gr}
161
162 \end_inset
163
164
165 \end_float
166 .
167 The software in the archive is organized in the following sub-directories:
168 \layout Description
169
170 Fotopoulos/ contains contributions by Vassilis Fotopoulos
171 \layout Description
172
173 Meerwald/ contains my work
174 \layout Description
175
176 images/ contains the Lena image in PGM format; the default parameters of
177 most algorithms are tuned to work best with that image
178 \layout Description
179
180 linux_bin/ the place where the Linux executables are stored in the binary
181 distribution
182 \layout Description
183
184 win32_bin/ the place where Windows 32-bit executables are distributed; tested
185 with Windows NT 4.0 only
186 \layout Description
187
188 make/ contains the
189 \family typewriter
190 \size small
191 Makefile
192 \family default
193 \size default
194 options to build the code on supported platforms
195 \layout Standard
196
197 For the purpose of this software package, a watermarking system comprises
198 four parts, namely: signature generation, watermark embedding, watermark
199 extraction and signature comparison or detection -- with the exception
200 of Vassilis's code; there are only cast and test programs (corresponds
201 to watermark embedding and detection).
202 Signature is used more less as a synonym for mark and can be thought of
203 as the payload (at least for some schemes :-).
204 \layout Standard
205
206 All programs only accept the image in NetPBM format and will also produce
207 only NetPBM-format files (see section
208 \begin_inset LatexCommand \ref{sec:prereq}
209
210 \end_inset
211
212 ).
213 Unfortunately, most programs have only been tested with 8-bit gray-scale
214 images of size
215 \begin_inset Formula \( 512\times 512. \)
216 \end_inset
217
218
219 \layout Standard
220
221 In order to simplify batch testing, the programs allow to read either from
222 a file, e.g.
223 \layout Standard
224
225
226 \family typewriter
227 \size small
228 wm_cox_e -s cox.sig
229 \series bold
230 image.pgm
231 \layout Standard
232
233 or from standard input, i.e.
234 \layout Standard
235
236 wm_cox_e -s cox.sig
237 \series bold
238 < image.pgm
239 \layout Standard
240
241 The output is usually written to standard output, i.e.
242
243 \layout Standard
244
245
246 \family typewriter
247 \size small
248 wm_cox_e -s cox.sig image.pgm
249 \series bold
250 > wm_image.pgm
251 \layout Standard
252
253 unless redirected to a file, e.g.
254 \layout Standard
255
256
257 \family typewriter
258 \size small
259 wm_cox_e -s cox.sig
260 \series bold
261 -o wm_image.pgm
262 \series default
263 image.pgm
264 \layout Subsection
265
266 Featured algorithms
267 \layout Standard
268
269 Currently it includes the following watermarking algorithms
270 \layout Itemize
271
272 Bruyndonckx [bruyn], refer to
273 \layout Quotation
274
275 O.
276 Bruyndonckx, Jean-Jacques Quisquater, and Benoit M.
277 Macq.
278 Spatial method for copyright labeling of digital images.
279 In IEEE Workshop on Nonlinear Signal and Image Processing '95, Thessaloniki,
280 Greece, pages 456 - 459, 1995.
281 \layout Itemize
282
283 Corvi, refer to
284 \layout Quotation
285
286 Marco Corvi and Gianluca Nicchiotti.
287 Wavelet-based image watermarking for copyright protection.
288 In Scandinavian Conference on Image Analysis SCIA '97, Lappeenranta, Finland,
289 June 1997.
290 \layout Itemize
291
292 Cox, refer to
293 \layout Quotation
294
295 Ingemar J.
296 Cox, Joe Kilian, Tom Leighton, and Talal G.
297 Shamoon.
298 Secure spread spectrum watermarking for multimedia.
299 In Proceedings of the IEEE ICIP '97, volume 6, pages 1673 - 1687, Santa
300 Barbara, California, USA, 1997.
301 \layout Itemize
302
303 Dugad, refer to
304 \layout Quotation
305
306 Rakesh Dugad, Krishna Ratakonda, and Narendra Ahuja.
307 A new wavelet-based scheme for watermarking images.
308 In Proceedings of the IEEE International Conference on Image Processing,
309 ICIP '98, Chicago, IL, USA, October 1998.
310
311 \layout Itemize
312
313 Fridrich (2.
314 scheme), refer to
315 \layout Quotation
316
317 Jiri Fridrich.
318 Combining low-frequency and spread spectrum watermarking.
319 In Proceedings of the SPIE Symposium on Optical Science, Engineering and
320 Instrumentation, San Diego, USA, July 1998.
321
322 \layout Itemize
323
324 Kim, refer to
325 \layout Quotation
326
327 Jong Ryul Kim and Young Shik Moon.
328 A robust wavelet-based digital watermark using level-adaptive thresholding.
329 In Proceedings of the 6th IEEE International Conference on Image Processing
330 ICIP '99, page 202, Kobe, Japan, October 1999.
331 \layout Itemize
332
333 Koch, refer to
334 \layout Quotation
335
336 Eckhard Koch and Jian Zhao.
337 Towards robust and hidden image copyright labeling.
338 In Proceedings of the IEEE International Workshop on Nonlinear Signal and
339 Image Processing, pages 452 - 455, Halkidiki, Marmaras, Greece, June 1995.
340 \layout Itemize
341
342 Wang, refer to
343 \layout Quotation
344
345 Houng-Jyh Wang, Po-Chyi Su, and C.-C.
346 Jay Kuo.
347 Wavelet-based digital image watermarking.
348 Optics Express, volume 3, pp.
349 497, December 1998.
350
351 \layout Itemize
352
353 Xia, refer to
354 \layout Quotation
355
356 Xiang-Gen Xia, Charles G.
357 Boncelet, and Gonzalo R.
358 Arce.
359 Wavelet transform based watermark for digital images.
360 Optics Express, volume 3, pp.
361 497, December 1998.
362 \layout Itemize
363
364 Xie, refer to
365 \layout Quotation
366
367 Liehua Xie and Gonzalo R.
368 Arce.
369 Joint wavelet compression and authentication watermarking.
370 In Proceedings of the IEEE International Conference on Image Processing,
371 ICIP '98, Chicago, IL, USA, 1998.
372 \layout Itemize
373
374 Zhu, refer to
375 \layout Quotation
376
377 Wenwu Zhu, Zixiang Xiong, and Ya-Qin Zhang.
378 Multiresolution watermarking for images and video: a unified approach.
379 In Proceedings of the IEEE International Conference on Image Processing,
380 ICIP '98, Chicago, IL, USA, October 1998.
381
382 \layout Itemize
383
384 Piva/Fotopoulos [cast|test-pv,hart,sub], contribution by Vassilis Fotopoulos,
385 refer to
386 \layout Quotation
387
388 M.Barni, F.
389 Bartolini, V.
390 Cappellini, A.
391 Piva.
392 A DCT-Domain System for Robust Image Watermarking, Signal Processing, vol.
393 66, pp 357 - 372, 1998.
394 \begin_deeper
395 \layout Standard
396 \added_space_top smallskip \added_space_bottom smallskip
397 and
398 \end_deeper
399 \layout Quotation
400
401 V.
402 Fotopoulos, A.
403 N.
404 Skodras, A Subband DCT approach to image watermarking, X European Signal
405 Processing Conference, September 4 - 8, 2000, Tampere, Finland.
406 \layout Standard
407
408 More algorithms will be added over time, I have implemented about 13 watermarkin
409 g algorithms in the spatial-, DCT-, and wavelet domain so far.
410 \layout Subsection
411
412
413 \begin_inset LatexCommand \label{sec:utility_programs}
414
415 \end_inset
416
417 Utility programs
418 \layout Standard
419
420 A good way to check the effect of a watermarking algorithm is computing
421 the difference image, i.e.
422 subtracting the original image from the watermarked image.
423 Alternatively, one can also have a look at the modified coefficients in
424 the transform domain.
425 The following programs facilitate these tasks:
426 \layout Description
427
428 cmp_pgm compute difference image, PSNR, ...
429 \layout Description
430
431 cmp_dct compute full-frame DCT domain difference image
432 \layout Description
433
434 cmp_dct8x8 compute 8x8 block-based DCT difference image
435 \layout Description
436
437 cmp_dwt compute DWT domain difference image
438 \layout Standard
439
440 For example, to produce the difference image of two PGM files and compute
441 the PSNR along with some other measures, the following command can be used:
442 \layout Standard
443
444
445 \family typewriter
446 \size small
447 cmp_pgm -p -i original.pgm -o diff.pgm watermarked.pgm
448 \layout Section
449
450 Usage
451 \layout Standard
452
453 Note, almost all programs will output usage information if called with the
454
455 \family typewriter
456 \size small
457 -h
458 \family default
459 \size default
460 argument.
461 \layout Subsection
462
463 Generating a mark
464 \layout Standard
465
466 First, you have to generate an appropriate signature file for the corresponding
467 embedding/detection algorithm; e.g.
468 if you are going to use Cox' scheme, then you would run
469 \layout Standard
470
471
472 \family typewriter
473 \size small
474 gen_cox_sig
475 \layout Standard
476
477 The programs outputs some parameters and a sequence of Gaussian distributed
478 random numbers (which is the watermark sequence).
479 You want to save that into a signature file, so you run
480 \layout Standard
481
482
483 \family typewriter
484 \size small
485 gen_cox_sig > cox.sig or
486 \layout Standard
487
488
489 \family typewriter
490 \size small
491 gen_cox_sig -o cox.sig
492 \layout Standard
493
494 You can influence e.g.
495 the embedding strength that will be used in the embedding step by running
496 \layout Standard
497
498
499 \family typewriter
500 \size small
501 gen_cox_sig -a 0.5 > too_strong_cox.sig
502 \layout Standard
503
504 Usually, the programs for generating a signature will supply reasonable
505 default values for marking a 8-bit gray-scale image of size
506 \begin_inset Formula \( 512\times 512. \)
507 \end_inset
508
509
510 \layout Subsection
511
512 Watermark embedding
513 \layout Standard
514
515 Watermark embedding is performed with the following command (for our example,
516 we are using Cox' scheme):
517 \layout Standard
518
519
520 \family typewriter
521 \size small
522 wm_cox_e -s cox.sig -o cox_lena.pgm lena.pgm
523 \layout Standard
524
525 The signature file is parsed to obtain the particular watermark sequence
526 and the embedding strength.
527 The watermarked image is written to the file
528 \family typewriter
529 \size small
530 cox_lena.pgm
531 \family default
532 \size default
533 .
534 Now it the time to check the perceptual quality of the produced image and
535 also have a look at the difference image (see section
536 \begin_inset LatexCommand \ref{sec:utility_programs}
537
538 \end_inset
539
540 ).
541 \layout Subsection
542
543 Watermark extraction
544 \layout Standard
545
546 To extract the embedded signature, we execute the command
547 \layout Standard
548
549
550 \family typewriter
551 \size small
552 wm_cox_d -s cox.sig -i lena.pgm -o cox.wm cox_lena.pgm
553 \layout Standard
554
555 Since Cox' algorithm is not blind, the original image is needed as a reference
556 to extract the embedded mark.
557 The embedded mark will be stored in
558 \family typewriter
559 \size small
560 cox.wm
561 \family default
562 \size default
563 .
564 The original signature,
565 \family typewriter
566 \size small
567 cox.sig
568 \family default
569 \size default
570 , is used to get the auxiliary embedding parameter correct (e.g.
571 embedding strength).
572
573 \layout Subsection
574
575 Comparing the mark
576 \layout Standard
577
578 The final step is comparing the original signature against the extracted
579 signature.
580 The result here is usually a correlation factor.
581 Values around 0 indicate that the mark has not been found, values around
582 1
583 \layout Standard
584
585 In most programs a analytical detection threshold for some detection probability
586 is not used.
587 Hence, one has to observe the output of the detector for many different
588 keys (around 1000 I'd suggest) to establish a reasonable threshold for
589 detection.
590 A good value to go with initially might be 0.2 which means we claim the
591 watermark detected if the correlation factor is > 0.2.
592 \layout Standard
593
594 The appropriate command for comparing the mark is
595 \layout Standard
596
597
598 \family typewriter
599 \size small
600 cmp_cox_sig -s cox.sig cox.wm
601 \layout Subsection
602
603 Batch testing - benchmarking
604 \layout Standard
605
606 If you want to run many test you can pipe the images to be do be watermarked
607 (and tested) through the embedder and detector.
608 The programs then act like a filter.
609 Try something like the following in a Unix shell script:
610 \layout Standard
611
612
613 \family typewriter
614 \size small
615 gen_cox_sig > cox.sig
616 \layout Standard
617
618
619 \family typewriter
620 \size small
621 for i in *.pgm
622 \layout Standard
623
624
625 \family typewriter
626 \size small
627 do
628 \layout Standard
629
630
631 \family typewriter
632 \size small
633 \SpecialChar ~
634 \SpecialChar ~
635 wm_cox_e -s cox.sig $i |
636 \backslash
637
638 \layout Standard
639
640
641 \family typewriter
642 \size small
643 \SpecialChar ~
644 \SpecialChar ~
645 wm_cox_d -s cox.sig -i $i |
646 \backslash
647
648 \layout Standard
649
650
651 \family typewriter
652 \size small
653 \SpecialChar ~
654 \SpecialChar ~
655 cmp_cox_sig -s cox.sig
656 \layout Standard
657
658
659 \family typewriter
660 \size small
661 done
662 \layout Section
663
664
665 \begin_inset LatexCommand \label{sec:recompile}
666
667 \end_inset
668
669 Recompiling
670 \layout Standard
671
672 Note, that most watermark embedding/extraction programs use the built-in
673 random number generator of the C library, i.e.
674
675 \family typewriter
676 \size small
677 srandom()
678 \family default
679 \size default
680 and
681 \family typewriter
682 \size small
683 random().
684
685 \family default
686 \size default
687 Therefore, if you recompile, chances are that you won't be able to use your
688 images watermarked with the previous version.
689 \layout Standard
690
691 The Makefile options for compiling on the different platforms can be found
692 in the
693 \family typewriter
694 \size small
695 make/
696 \family default
697 \size default
698 sub-directory of the archive.
699 \layout Subsection
700
701
702 \begin_inset LatexCommand \label{sec:prereq}
703
704 \end_inset
705
706 Prerequisites
707 \layout Subsubsection
708
709 NetPBM
710 \layout Standard
711
712 NetPBM is responsible for image file I/O and provides a definition of a
713 simple image file format along with many image file format filters that
714 allow to convert images to and from NetPBM format.
715
716 \layout Standard
717
718 You need to get and install the NetPBM library at
719 \begin_inset LatexCommand \url{http://wuarchive.wustl.edu/graphics/graphics/packages/NetPBM/}
720
721 \end_inset
722
723 or
724 \begin_inset LatexCommand \url{http://netpbm.sourceforge.net}
725
726 \end_inset
727
728 .
729 The library provides
730 \family typewriter
731 \size small
732 pgm.h
733 \family default
734 \size default
735 and the appropriate implementation.
736 \layout Subsection
737
738 Unix/Linux platform
739 \layout Standard
740
741 All programs were developed using Linux and GNU C.
742 The programs should compile and work with all recent versions of Linux
743 and GNU C.
744
745 \layout Subsection
746
747
748 \begin_inset LatexCommand \label{sec:win32_compile}
749
750 \end_inset
751
752 Win32 platform
753 \layout Standard
754
755 The programs were ported to the Windows platform using the Cygwin
756 \begin_float footnote
757 \layout Standard
758
759
760 \begin_inset LatexCommand \url{http://www.cygwin.com}
761
762 \end_inset
763
764
765 \end_float
766 and Mingw
767 \begin_float footnote
768 \layout Standard
769
770
771 \begin_inset LatexCommand \url{http://www.mingw.org}
772
773 \end_inset
774
775
776 \end_float
777 environment.
778 Most notable, the file mode for standard input and standard output has
779 to be set to binary mode.
780 This is accomplished with the
781 \family typewriter
782 \size small
783 setmode()
784 \family default
785 \size default
786 or
787 \family typewriter
788 \size small
789 _fsetmode()
790 \family default
791 \size default
792 commands.
793 \layout Section
794
795 FAQ
796 \layout Standard
797
798 Q: How can I report problems?
799 \layout Standard
800
801 A: See the contact information at the beginning of this document.
802 \layout Standard
803
804 Q: The compiler complains about
805 \family typewriter
806 \size small
807 pgm.h
808 \family default
809 \size default
810 ?
811 \layout Standard
812
813 A: You need to get and install the NetPBM library, see section
814 \begin_inset LatexCommand \ref{sec:prereq}
815
816 \end_inset
817
818 .
819 \layout Standard
820
821 Q: What is the best algorithm?
822 \layout Standard
823
824 A: Depends on your application.
825 \layout Standard
826
827 Q: What is the most robust algorithm?
828 \layout Standard
829
830 A: Depends on the attack.
831 See some results on
832 \begin_inset LatexCommand \url{http://www.cosy.sbg.ac.at/~pmeerw/Watermarking}
833
834 \end_inset
835
836 .
837 \layout Standard
838
839 Q: I need code for a full-frame DCT?
840 \layout Standard
841
842 A: See the files Meerwald/dct.* in the archive.
843 \layout Standard
844
845 Q: I need code for a 8x8 block DCT?
846 \layout Standard
847
848 A: See the files
849 \family typewriter
850 \size small
851 Meerwald/dct.*
852 \family default
853 \size default
854 in the archive.
855 \layout Standard
856
857 Q: I need code for the wavelet transform (DWT)?
858 \layout Standard
859
860 A: See the files
861 \family typewriter
862 \size small
863 Meerwald/wavelet.*
864 \family default
865 \size default
866 in the archive.
867 \layout Standard
868
869 Q: I get the message 'unable to open filter.dat' - what to do?
870 \layout Standard
871
872 A: Make sure the file filter.dat is in the current directory or accessible
873 via path/filename specified in the signature file.
874 Use the signature generation command to specify an absolute path if necessary.
875 \layout Standard
876
877 Q: I can't compile the code using some Microsoft product?
878 \layout Standard
879
880 A: Make your life easier, install GNU software! See section
881 \begin_inset LatexCommand \ref{sec:recompile}
882
883 \end_inset
884
885 .
886 \layout Section
887
888 Revision history
889 \layout Standard
890
891 version 0.4 (June 21, 2001)
892 \layout Itemize
893
894 bug fixes
895 \begin_deeper
896 \layout Itemize
897
898 wm_xia_{e|d}.c variable level uninitialized
899 \layout Itemize
900
901 wm_zhu_{e|d}.c variable level uninitialized
902 \layout Itemize
903
904 issue with random() vs.
905 rand() and RAND_MAX in frid2_common.c
906 \end_deeper
907 \layout Itemize
908
909 added option to bruyn algorithm to disable block skipping
910 \layout Itemize
911
912 added algorithm kim
913 \layout Standard
914
915 version 0.3 (June 18, 2001)
916 \layout Itemize
917
918 created a nice (?) manual/documentation
919 \layout Itemize
920
921 added algorithms by Dugad, Wang, Zhu, Fridrich
922 \layout Itemize
923
924 added Makefiles for Win32 platform (mingw32)
925 \layout Standard
926
927 version 0.2 (February 22, 2001)
928 \layout Itemize
929
930 added contribution by Vassilis Fotopoulos (Piva's algorithm,
931 \layout Itemize
932
933 DCT, Hartley and subband domain) - see Fotopoulos/ subdirectory
934 \layout Itemize
935
936 stuff moved to Meerwald/ subdirectory
937 \layout Itemize
938
939 added Bruyndonckx, Corvi, Koch, Xia, Xie algorithms
940 \layout Standard
941
942 version 0.1 (February 18, 2001)
943 \layout Itemize
944
945 initial release
946 \layout Section
947
948 Legal statement
949 \layout Standard
950
951 My license is called "I-don't-care" license: (1) You can do with the accompanyin
952 g software whatever you want, but don't blame me if it doesn't work or it
953 causes damage.
954 (2) If you think my work is useful, tell me and tell others, but you are
955 not obliged to do so.
956 I suggest not to remove information contained in this other documentation
957 file.
958 \layout Standard
959
960
961 \begin_inset LatexCommand \BibTeX[plain]{watermarking}
962
963 \end_inset
964
965
966 \the_end

Repositories maintained by Peter Meerwald, pmeerw@pmeerw.net.