xref: /aosp_15_r20/external/pdfium/testing/fuzzers/pdf_formcalc_context_fuzzer.cc (revision 3ac0a46f773bac49fa9476ec2b1cf3f8da5ec3a4)
1 // Copyright 2019 The PDFium Authors
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4 
5 #include <stdint.h>
6 
7 #include <memory>
8 
9 #include "core/fxcrt/fx_string.h"
10 #include "fpdfsdk/cpdfsdk_helpers.h"
11 #include "fpdfsdk/fpdfxfa/cpdfxfa_context.h"
12 #include "fxjs/xfa/cfxjse_engine.h"
13 #include "fxjs/xfa/cfxjse_value.h"
14 #include "public/fpdf_formfill.h"
15 #include "testing/fuzzers/pdfium_fuzzer_helper.h"
16 #include "xfa/fxfa/cxfa_eventparam.h"
17 
18 namespace {
19 
20 // testing/resources/simple_xfa.pdf
21 const uint8_t kSimpleXfaPdfData[] = {
22     0x25, 0x50, 0x44, 0x46, 0x2d, 0x31, 0x2e, 0x37, 0x0a, 0x25, 0xa0, 0xf2,
23     0xa4, 0xf4, 0x0a, 0x31, 0x20, 0x30, 0x20, 0x6f, 0x62, 0x6a, 0x20, 0x3c,
24     0x3c, 0x0a, 0x20, 0x20, 0x2f, 0x41, 0x63, 0x72, 0x6f, 0x46, 0x6f, 0x72,
25     0x6d, 0x20, 0x32, 0x20, 0x30, 0x20, 0x52, 0x0a, 0x20, 0x20, 0x2f, 0x45,
26     0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x20, 0x3c, 0x3c,
27     0x0a, 0x20, 0x20, 0x20, 0x20, 0x2f, 0x41, 0x44, 0x42, 0x45, 0x20, 0x3c,
28     0x3c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2f, 0x42, 0x61, 0x73,
29     0x65, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x20, 0x2f, 0x31, 0x2e,
30     0x37, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2f, 0x45, 0x78, 0x74,
31     0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x20,
32     0x38, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x3e, 0x3e, 0x0a, 0x20, 0x20, 0x3e,
33     0x3e, 0x0a, 0x20, 0x20, 0x2f, 0x4e, 0x65, 0x65, 0x64, 0x73, 0x52, 0x65,
34     0x6e, 0x64, 0x65, 0x72, 0x69, 0x6e, 0x67, 0x20, 0x74, 0x72, 0x75, 0x65,
35     0x0a, 0x20, 0x20, 0x2f, 0x50, 0x61, 0x67, 0x65, 0x73, 0x20, 0x38, 0x20,
36     0x30, 0x20, 0x52, 0x0a, 0x20, 0x20, 0x2f, 0x54, 0x79, 0x70, 0x65, 0x20,
37     0x2f, 0x43, 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67, 0x0a, 0x3e, 0x3e, 0x0a,
38     0x65, 0x6e, 0x64, 0x6f, 0x62, 0x6a, 0x0a, 0x32, 0x20, 0x30, 0x20, 0x6f,
39     0x62, 0x6a, 0x20, 0x3c, 0x3c, 0x0a, 0x20, 0x20, 0x2f, 0x58, 0x46, 0x41,
40     0x20, 0x5b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x28, 0x70, 0x72, 0x65, 0x61,
41     0x6d, 0x62, 0x6c, 0x65, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x33, 0x20,
42     0x30, 0x20, 0x52, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x28, 0x63, 0x6f, 0x6e,
43     0x66, 0x69, 0x67, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x34, 0x20, 0x30,
44     0x20, 0x52, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x28, 0x74, 0x65, 0x6d, 0x70,
45     0x6c, 0x61, 0x74, 0x65, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x35, 0x20,
46     0x30, 0x20, 0x52, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x28, 0x6c, 0x6f, 0x63,
47     0x61, 0x6c, 0x65, 0x53, 0x65, 0x74, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20,
48     0x36, 0x20, 0x30, 0x20, 0x52, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x28, 0x70,
49     0x6f, 0x73, 0x74, 0x61, 0x6d, 0x62, 0x6c, 0x65, 0x29, 0x0a, 0x20, 0x20,
50     0x20, 0x20, 0x37, 0x20, 0x30, 0x20, 0x52, 0x0a, 0x20, 0x20, 0x5d, 0x0a,
51     0x3e, 0x3e, 0x0a, 0x65, 0x6e, 0x64, 0x6f, 0x62, 0x6a, 0x0a, 0x33, 0x20,
52     0x30, 0x20, 0x6f, 0x62, 0x6a, 0x20, 0x3c, 0x3c, 0x0a, 0x20, 0x20, 0x2f,
53     0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x20, 0x31, 0x32, 0x34, 0x0a, 0x3e,
54     0x3e, 0x0a, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x0a, 0x3c, 0x78, 0x64,
55     0x70, 0x3a, 0x78, 0x64, 0x70, 0x20, 0x78, 0x6d, 0x6c, 0x6e, 0x73, 0x3a,
56     0x78, 0x64, 0x70, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f,
57     0x6e, 0x73, 0x2e, 0x61, 0x64, 0x6f, 0x62, 0x65, 0x2e, 0x63, 0x6f, 0x6d,
58     0x2f, 0x78, 0x64, 0x70, 0x2f, 0x22, 0x20, 0x74, 0x69, 0x6d, 0x65, 0x53,
59     0x74, 0x61, 0x6d, 0x70, 0x3d, 0x22, 0x32, 0x30, 0x31, 0x38, 0x2d, 0x30,
60     0x32, 0x2d, 0x32, 0x33, 0x54, 0x32, 0x31, 0x3a, 0x33, 0x37, 0x3a, 0x31,
61     0x31, 0x5a, 0x22, 0x20, 0x75, 0x75, 0x69, 0x64, 0x3d, 0x22, 0x32, 0x31,
62     0x34, 0x38, 0x32, 0x37, 0x39, 0x38, 0x2d, 0x37, 0x62, 0x66, 0x30, 0x2d,
63     0x34, 0x30, 0x61, 0x34, 0x2d, 0x62, 0x63, 0x35, 0x64, 0x2d, 0x33, 0x63,
64     0x65, 0x66, 0x64, 0x63, 0x63, 0x66, 0x33, 0x32, 0x62, 0x35, 0x22, 0x3e,
65     0x0a, 0x65, 0x6e, 0x64, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x0a, 0x65,
66     0x6e, 0x64, 0x6f, 0x62, 0x6a, 0x0a, 0x34, 0x20, 0x30, 0x20, 0x6f, 0x62,
67     0x6a, 0x20, 0x3c, 0x3c, 0x0a, 0x20, 0x20, 0x2f, 0x4c, 0x65, 0x6e, 0x67,
68     0x74, 0x68, 0x20, 0x36, 0x34, 0x32, 0x0a, 0x3e, 0x3e, 0x0a, 0x73, 0x74,
69     0x72, 0x65, 0x61, 0x6d, 0x0a, 0x3c, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67,
70     0x20, 0x78, 0x6d, 0x6c, 0x6e, 0x73, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70,
71     0x3a, 0x2f, 0x2f, 0x77, 0x77, 0x77, 0x2e, 0x78, 0x66, 0x61, 0x2e, 0x6f,
72     0x72, 0x67, 0x2f, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2f, 0x78, 0x63,
73     0x69, 0x2f, 0x33, 0x2e, 0x30, 0x2f, 0x22, 0x3e, 0x0a, 0x3c, 0x61, 0x67,
74     0x65, 0x6e, 0x74, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x64, 0x65,
75     0x73, 0x69, 0x67, 0x6e, 0x65, 0x72, 0x22, 0x3e, 0x0a, 0x20, 0x20, 0x3c,
76     0x64, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x3e,
77     0x70, 0x64, 0x66, 0x3c, 0x2f, 0x64, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x61,
78     0x74, 0x69, 0x6f, 0x6e, 0x3e, 0x0a, 0x20, 0x20, 0x3c, 0x70, 0x64, 0x66,
79     0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x66, 0x6f, 0x6e, 0x74, 0x49,
80     0x6e, 0x66, 0x6f, 0x2f, 0x3e, 0x0a, 0x20, 0x20, 0x3c, 0x2f, 0x70, 0x64,
81     0x66, 0x3e, 0x0a, 0x3c, 0x2f, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x3e, 0x0a,
82     0x3c, 0x70, 0x72, 0x65, 0x73, 0x65, 0x6e, 0x74, 0x3e, 0x0a, 0x20, 0x20,
83     0x3c, 0x70, 0x64, 0x66, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x76,
84     0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x3e, 0x31, 0x2e, 0x37, 0x3c, 0x2f,
85     0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x3e, 0x0a, 0x20, 0x20, 0x20,
86     0x20, 0x3c, 0x61, 0x64, 0x6f, 0x62, 0x65, 0x45, 0x78, 0x74, 0x65, 0x6e,
87     0x73, 0x69, 0x6f, 0x6e, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x3e, 0x38, 0x3c,
88     0x2f, 0x61, 0x64, 0x6f, 0x62, 0x65, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73,
89     0x69, 0x6f, 0x6e, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x3e, 0x0a, 0x20, 0x20,
90     0x20, 0x20, 0x3c, 0x72, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x50, 0x6f, 0x6c,
91     0x69, 0x63, 0x79, 0x3e, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x3c, 0x2f,
92     0x72, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79,
93     0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x73, 0x63, 0x72, 0x69, 0x70,
94     0x74, 0x4d, 0x6f, 0x64, 0x65, 0x6c, 0x3e, 0x58, 0x46, 0x41, 0x3c, 0x2f,
95     0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x4d, 0x6f, 0x64, 0x65, 0x6c, 0x3e,
96     0x0a, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x61,
97     0x63, 0x74, 0x69, 0x76, 0x65, 0x3e, 0x31, 0x3c, 0x2f, 0x69, 0x6e, 0x74,
98     0x65, 0x72, 0x61, 0x63, 0x74, 0x69, 0x76, 0x65, 0x3e, 0x0a, 0x20, 0x20,
99     0x3c, 0x2f, 0x70, 0x64, 0x66, 0x3e, 0x0a, 0x20, 0x20, 0x3c, 0x78, 0x64,
100     0x70, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x70, 0x61, 0x63, 0x6b,
101     0x65, 0x74, 0x73, 0x3e, 0x2a, 0x3c, 0x2f, 0x70, 0x61, 0x63, 0x6b, 0x65,
102     0x74, 0x73, 0x3e, 0x0a, 0x20, 0x20, 0x3c, 0x2f, 0x78, 0x64, 0x70, 0x3e,
103     0x0a, 0x20, 0x20, 0x3c, 0x64, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x61, 0x74,
104     0x69, 0x6f, 0x6e, 0x3e, 0x70, 0x64, 0x66, 0x3c, 0x2f, 0x64, 0x65, 0x73,
105     0x74, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x3e, 0x0a, 0x20, 0x20,
106     0x3c, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x3e, 0x0a, 0x20, 0x20, 0x20,
107     0x20, 0x3c, 0x72, 0x75, 0x6e, 0x53, 0x63, 0x72, 0x69, 0x70, 0x74, 0x73,
108     0x3e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x3c, 0x2f, 0x72, 0x75, 0x6e,
109     0x53, 0x63, 0x72, 0x69, 0x70, 0x74, 0x73, 0x3e, 0x0a, 0x20, 0x20, 0x3c,
110     0x2f, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x3e, 0x0a, 0x3c, 0x2f, 0x70,
111     0x72, 0x65, 0x73, 0x65, 0x6e, 0x74, 0x3e, 0x0a, 0x3c, 0x61, 0x63, 0x72,
112     0x6f, 0x62, 0x61, 0x74, 0x3e, 0x0a, 0x20, 0x20, 0x3c, 0x61, 0x63, 0x72,
113     0x6f, 0x62, 0x61, 0x74, 0x37, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x3c,
114     0x64, 0x79, 0x6e, 0x61, 0x6d, 0x69, 0x63, 0x52, 0x65, 0x6e, 0x64, 0x65,
115     0x72, 0x3e, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x3c, 0x2f,
116     0x64, 0x79, 0x6e, 0x61, 0x6d, 0x69, 0x63, 0x52, 0x65, 0x6e, 0x64, 0x65,
117     0x72, 0x3e, 0x0a, 0x20, 0x20, 0x3c, 0x2f, 0x61, 0x63, 0x72, 0x6f, 0x62,
118     0x61, 0x74, 0x37, 0x3e, 0x0a, 0x20, 0x20, 0x3c, 0x76, 0x61, 0x6c, 0x69,
119     0x64, 0x61, 0x74, 0x65, 0x3e, 0x70, 0x72, 0x65, 0x53, 0x75, 0x62, 0x6d,
120     0x69, 0x74, 0x3c, 0x2f, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65,
121     0x3e, 0x0a, 0x3c, 0x2f, 0x61, 0x63, 0x72, 0x6f, 0x62, 0x61, 0x74, 0x3e,
122     0x0a, 0x3c, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x3e, 0x0a, 0x65,
123     0x6e, 0x64, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x0a, 0x65, 0x6e, 0x64,
124     0x6f, 0x62, 0x6a, 0x0a, 0x35, 0x20, 0x30, 0x20, 0x6f, 0x62, 0x6a, 0x20,
125     0x3c, 0x3c, 0x0a, 0x20, 0x20, 0x2f, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68,
126     0x20, 0x34, 0x38, 0x32, 0x0a, 0x3e, 0x3e, 0x0a, 0x73, 0x74, 0x72, 0x65,
127     0x61, 0x6d, 0x0a, 0x3c, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65,
128     0x20, 0x78, 0x6d, 0x6c, 0x6e, 0x73, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70,
129     0x3a, 0x2f, 0x2f, 0x77, 0x77, 0x77, 0x2e, 0x78, 0x66, 0x61, 0x2e, 0x6f,
130     0x72, 0x67, 0x2f, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2f, 0x78, 0x66,
131     0x61, 0x2d, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x2f, 0x33,
132     0x2e, 0x33, 0x2f, 0x22, 0x3e, 0x0a, 0x20, 0x20, 0x3c, 0x73, 0x75, 0x62,
133     0x66, 0x6f, 0x72, 0x6d, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x66,
134     0x6f, 0x72, 0x6d, 0x31, 0x22, 0x20, 0x6c, 0x61, 0x79, 0x6f, 0x75, 0x74,
135     0x3d, 0x22, 0x74, 0x62, 0x22, 0x20, 0x72, 0x65, 0x73, 0x74, 0x6f, 0x72,
136     0x65, 0x53, 0x74, 0x61, 0x74, 0x65, 0x3d, 0x22, 0x61, 0x75, 0x74, 0x6f,
137     0x22, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x70, 0x61, 0x67, 0x65,
138     0x53, 0x65, 0x74, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c,
139     0x70, 0x61, 0x67, 0x65, 0x41, 0x72, 0x65, 0x61, 0x20, 0x6e, 0x61, 0x6d,
140     0x65, 0x3d, 0x22, 0x50, 0x61, 0x67, 0x65, 0x31, 0x22, 0x20, 0x69, 0x64,
141     0x3d, 0x22, 0x50, 0x61, 0x67, 0x65, 0x31, 0x22, 0x3e, 0x0a, 0x20, 0x20,
142     0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x63, 0x6f, 0x6e, 0x74, 0x65,
143     0x6e, 0x74, 0x41, 0x72, 0x65, 0x61, 0x20, 0x78, 0x3d, 0x22, 0x30, 0x2e,
144     0x32, 0x35, 0x69, 0x6e, 0x22, 0x20, 0x79, 0x3d, 0x22, 0x30, 0x2e, 0x32,
145     0x35, 0x69, 0x6e, 0x22, 0x20, 0x77, 0x3d, 0x22, 0x38, 0x69, 0x6e, 0x22,
146     0x20, 0x68, 0x3d, 0x22, 0x31, 0x30, 0x2e, 0x35, 0x69, 0x6e, 0x22, 0x20,
147     0x2f, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x2f, 0x70,
148     0x61, 0x67, 0x65, 0x41, 0x72, 0x65, 0x61, 0x3e, 0x0a, 0x20, 0x20, 0x20,
149     0x20, 0x3c, 0x2f, 0x70, 0x61, 0x67, 0x65, 0x53, 0x65, 0x74, 0x3e, 0x0a,
150     0x20, 0x20, 0x20, 0x20, 0x3c, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x20, 0x6e,
151     0x61, 0x6d, 0x65, 0x3d, 0x22, 0x54, 0x65, 0x78, 0x74, 0x46, 0x69, 0x65,
152     0x6c, 0x64, 0x31, 0x22, 0x20, 0x79, 0x3d, 0x22, 0x33, 0x31, 0x2e, 0x37,
153     0x35, 0x6d, 0x6d, 0x22, 0x20, 0x78, 0x3d, 0x22, 0x34, 0x34, 0x2e, 0x34,
154     0x35, 0x6d, 0x6d, 0x22, 0x20, 0x77, 0x3d, 0x22, 0x31, 0x31, 0x34, 0x2e,
155     0x32, 0x39, 0x31, 0x6d, 0x6d, 0x22, 0x20, 0x68, 0x3d, 0x22, 0x31, 0x32,
156     0x2e, 0x37, 0x6d, 0x6d, 0x22, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x3c,
157     0x2f, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20,
158     0x3c, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d,
159     0x22, 0x54, 0x65, 0x78, 0x74, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x31, 0x31,
160     0x22, 0x20, 0x79, 0x3d, 0x22, 0x32, 0x32, 0x32, 0x2e, 0x32, 0x35, 0x6d,
161     0x6d, 0x22, 0x20, 0x78, 0x3d, 0x22, 0x34, 0x34, 0x2e, 0x34, 0x35, 0x6d,
162     0x6d, 0x22, 0x20, 0x77, 0x3d, 0x22, 0x38, 0x32, 0x2e, 0x35, 0x35, 0x6d,
163     0x6d, 0x22, 0x20, 0x68, 0x3d, 0x22, 0x31, 0x32, 0x2e, 0x37, 0x6d, 0x6d,
164     0x22, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x2f, 0x66, 0x69, 0x65,
165     0x6c, 0x64, 0x3e, 0x0a, 0x20, 0x20, 0x3c, 0x2f, 0x73, 0x75, 0x62, 0x66,
166     0x6f, 0x72, 0x6d, 0x3e, 0x0a, 0x3c, 0x2f, 0x74, 0x65, 0x6d, 0x70, 0x6c,
167     0x61, 0x74, 0x65, 0x3e, 0x0a, 0x65, 0x6e, 0x64, 0x73, 0x74, 0x72, 0x65,
168     0x61, 0x6d, 0x0a, 0x65, 0x6e, 0x64, 0x6f, 0x62, 0x6a, 0x0a, 0x36, 0x20,
169     0x30, 0x20, 0x6f, 0x62, 0x6a, 0x20, 0x3c, 0x3c, 0x0a, 0x20, 0x20, 0x2f,
170     0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x20, 0x33, 0x34, 0x35, 0x35, 0x0a,
171     0x3e, 0x3e, 0x0a, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x0a, 0x3c, 0x6c,
172     0x6f, 0x63, 0x61, 0x6c, 0x65, 0x53, 0x65, 0x74, 0x20, 0x78, 0x6d, 0x6c,
173     0x6e, 0x73, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x77,
174     0x77, 0x77, 0x2e, 0x78, 0x66, 0x61, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x73,
175     0x63, 0x68, 0x65, 0x6d, 0x61, 0x2f, 0x78, 0x66, 0x61, 0x2d, 0x6c, 0x6f,
176     0x63, 0x61, 0x6c, 0x65, 0x2d, 0x73, 0x65, 0x74, 0x2f, 0x32, 0x2e, 0x37,
177     0x2f, 0x22, 0x3e, 0x0a, 0x20, 0x20, 0x3c, 0x6c, 0x6f, 0x63, 0x61, 0x6c,
178     0x65, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x65, 0x6e, 0x5f, 0x55,
179     0x53, 0x22, 0x20, 0x64, 0x65, 0x73, 0x63, 0x3d, 0x22, 0x45, 0x6e, 0x67,
180     0x6c, 0x69, 0x73, 0x68, 0x20, 0x28, 0x55, 0x6e, 0x69, 0x74, 0x65, 0x64,
181     0x20, 0x53, 0x74, 0x61, 0x74, 0x65, 0x73, 0x29, 0x22, 0x3e, 0x0a, 0x20,
182     0x20, 0x20, 0x20, 0x3c, 0x63, 0x61, 0x6c, 0x65, 0x6e, 0x64, 0x61, 0x72,
183     0x53, 0x79, 0x6d, 0x62, 0x6f, 0x6c, 0x73, 0x20, 0x6e, 0x61, 0x6d, 0x65,
184     0x3d, 0x22, 0x67, 0x72, 0x65, 0x67, 0x6f, 0x72, 0x69, 0x61, 0x6e, 0x22,
185     0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x6d, 0x6f, 0x6e,
186     0x74, 0x68, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x3e, 0x0a, 0x20, 0x20, 0x20,
187     0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x6d, 0x6f, 0x6e, 0x74, 0x68, 0x3e,
188     0x4a, 0x61, 0x6e, 0x75, 0x61, 0x72, 0x79, 0x3c, 0x2f, 0x6d, 0x6f, 0x6e,
189     0x74, 0x68, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
190     0x3c, 0x6d, 0x6f, 0x6e, 0x74, 0x68, 0x3e, 0x46, 0x65, 0x62, 0x72, 0x75,
191     0x61, 0x72, 0x79, 0x3c, 0x2f, 0x6d, 0x6f, 0x6e, 0x74, 0x68, 0x3e, 0x0a,
192     0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x6d, 0x6f, 0x6e,
193     0x74, 0x68, 0x3e, 0x4d, 0x61, 0x72, 0x63, 0x68, 0x3c, 0x2f, 0x6d, 0x6f,
194     0x6e, 0x74, 0x68, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
195     0x20, 0x3c, 0x6d, 0x6f, 0x6e, 0x74, 0x68, 0x3e, 0x41, 0x70, 0x72, 0x69,
196     0x6c, 0x3c, 0x2f, 0x6d, 0x6f, 0x6e, 0x74, 0x68, 0x3e, 0x0a, 0x20, 0x20,
197     0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x6d, 0x6f, 0x6e, 0x74, 0x68,
198     0x3e, 0x4d, 0x61, 0x79, 0x3c, 0x2f, 0x6d, 0x6f, 0x6e, 0x74, 0x68, 0x3e,
199     0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x6d, 0x6f,
200     0x6e, 0x74, 0x68, 0x3e, 0x4a, 0x75, 0x6e, 0x65, 0x3c, 0x2f, 0x6d, 0x6f,
201     0x6e, 0x74, 0x68, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
202     0x20, 0x3c, 0x6d, 0x6f, 0x6e, 0x74, 0x68, 0x3e, 0x4a, 0x75, 0x6c, 0x79,
203     0x3c, 0x2f, 0x6d, 0x6f, 0x6e, 0x74, 0x68, 0x3e, 0x0a, 0x20, 0x20, 0x20,
204     0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x6d, 0x6f, 0x6e, 0x74, 0x68, 0x3e,
205     0x41, 0x75, 0x67, 0x75, 0x73, 0x74, 0x3c, 0x2f, 0x6d, 0x6f, 0x6e, 0x74,
206     0x68, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c,
207     0x6d, 0x6f, 0x6e, 0x74, 0x68, 0x3e, 0x53, 0x65, 0x70, 0x74, 0x65, 0x6d,
208     0x62, 0x65, 0x72, 0x3c, 0x2f, 0x6d, 0x6f, 0x6e, 0x74, 0x68, 0x3e, 0x0a,
209     0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x6d, 0x6f, 0x6e,
210     0x74, 0x68, 0x3e, 0x4f, 0x63, 0x74, 0x6f, 0x62, 0x65, 0x72, 0x3c, 0x2f,
211     0x6d, 0x6f, 0x6e, 0x74, 0x68, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20,
212     0x20, 0x20, 0x20, 0x3c, 0x6d, 0x6f, 0x6e, 0x74, 0x68, 0x3e, 0x4e, 0x6f,
213     0x76, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x3c, 0x2f, 0x6d, 0x6f, 0x6e, 0x74,
214     0x68, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c,
215     0x6d, 0x6f, 0x6e, 0x74, 0x68, 0x3e, 0x44, 0x65, 0x63, 0x65, 0x6d, 0x62,
216     0x65, 0x72, 0x3c, 0x2f, 0x6d, 0x6f, 0x6e, 0x74, 0x68, 0x3e, 0x0a, 0x20,
217     0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x2f, 0x6d, 0x6f, 0x6e, 0x74, 0x68,
218     0x4e, 0x61, 0x6d, 0x65, 0x73, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20,
219     0x20, 0x3c, 0x6d, 0x6f, 0x6e, 0x74, 0x68, 0x4e, 0x61, 0x6d, 0x65, 0x73,
220     0x20, 0x61, 0x62, 0x62, 0x72, 0x3d, 0x22, 0x31, 0x22, 0x3e, 0x0a, 0x20,
221     0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x6d, 0x6f, 0x6e, 0x74,
222     0x68, 0x3e, 0x4a, 0x61, 0x6e, 0x3c, 0x2f, 0x6d, 0x6f, 0x6e, 0x74, 0x68,
223     0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x6d,
224     0x6f, 0x6e, 0x74, 0x68, 0x3e, 0x46, 0x65, 0x62, 0x3c, 0x2f, 0x6d, 0x6f,
225     0x6e, 0x74, 0x68, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
226     0x20, 0x3c, 0x6d, 0x6f, 0x6e, 0x74, 0x68, 0x3e, 0x4d, 0x61, 0x72, 0x3c,
227     0x2f, 0x6d, 0x6f, 0x6e, 0x74, 0x68, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20,
228     0x20, 0x20, 0x20, 0x20, 0x3c, 0x6d, 0x6f, 0x6e, 0x74, 0x68, 0x3e, 0x41,
229     0x70, 0x72, 0x3c, 0x2f, 0x6d, 0x6f, 0x6e, 0x74, 0x68, 0x3e, 0x0a, 0x20,
230     0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x6d, 0x6f, 0x6e, 0x74,
231     0x68, 0x3e, 0x4d, 0x61, 0x79, 0x3c, 0x2f, 0x6d, 0x6f, 0x6e, 0x74, 0x68,
232     0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x6d,
233     0x6f, 0x6e, 0x74, 0x68, 0x3e, 0x4a, 0x75, 0x6e, 0x3c, 0x2f, 0x6d, 0x6f,
234     0x6e, 0x74, 0x68, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
235     0x20, 0x3c, 0x6d, 0x6f, 0x6e, 0x74, 0x68, 0x3e, 0x4a, 0x75, 0x6c, 0x3c,
236     0x2f, 0x6d, 0x6f, 0x6e, 0x74, 0x68, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20,
237     0x20, 0x20, 0x20, 0x20, 0x3c, 0x6d, 0x6f, 0x6e, 0x74, 0x68, 0x3e, 0x41,
238     0x75, 0x67, 0x3c, 0x2f, 0x6d, 0x6f, 0x6e, 0x74, 0x68, 0x3e, 0x0a, 0x20,
239     0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x6d, 0x6f, 0x6e, 0x74,
240     0x68, 0x3e, 0x53, 0x65, 0x70, 0x3c, 0x2f, 0x6d, 0x6f, 0x6e, 0x74, 0x68,
241     0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x6d,
242     0x6f, 0x6e, 0x74, 0x68, 0x3e, 0x4f, 0x63, 0x74, 0x3c, 0x2f, 0x6d, 0x6f,
243     0x6e, 0x74, 0x68, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
244     0x20, 0x3c, 0x6d, 0x6f, 0x6e, 0x74, 0x68, 0x3e, 0x4e, 0x6f, 0x76, 0x3c,
245     0x2f, 0x6d, 0x6f, 0x6e, 0x74, 0x68, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20,
246     0x20, 0x20, 0x20, 0x20, 0x3c, 0x6d, 0x6f, 0x6e, 0x74, 0x68, 0x3e, 0x44,
247     0x65, 0x63, 0x3c, 0x2f, 0x6d, 0x6f, 0x6e, 0x74, 0x68, 0x3e, 0x0a, 0x20,
248     0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x2f, 0x6d, 0x6f, 0x6e, 0x74, 0x68,
249     0x4e, 0x61, 0x6d, 0x65, 0x73, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20,
250     0x20, 0x3c, 0x64, 0x61, 0x79, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x3e, 0x0a,
251     0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x64, 0x61, 0x79,
252     0x3e, 0x53, 0x75, 0x6e, 0x64, 0x61, 0x79, 0x3c, 0x2f, 0x64, 0x61, 0x79,
253     0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x64,
254     0x61, 0x79, 0x3e, 0x4d, 0x6f, 0x6e, 0x64, 0x61, 0x79, 0x3c, 0x2f, 0x64,
255     0x61, 0x79, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
256     0x3c, 0x64, 0x61, 0x79, 0x3e, 0x54, 0x75, 0x65, 0x73, 0x64, 0x61, 0x79,
257     0x3c, 0x2f, 0x64, 0x61, 0x79, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20,
258     0x20, 0x20, 0x20, 0x3c, 0x64, 0x61, 0x79, 0x3e, 0x57, 0x65, 0x64, 0x6e,
259     0x65, 0x73, 0x64, 0x61, 0x79, 0x3c, 0x2f, 0x64, 0x61, 0x79, 0x3e, 0x0a,
260     0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x64, 0x61, 0x79,
261     0x3e, 0x54, 0x68, 0x75, 0x72, 0x73, 0x64, 0x61, 0x79, 0x3c, 0x2f, 0x64,
262     0x61, 0x79, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
263     0x3c, 0x64, 0x61, 0x79, 0x3e, 0x46, 0x72, 0x69, 0x64, 0x61, 0x79, 0x3c,
264     0x2f, 0x64, 0x61, 0x79, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
265     0x20, 0x20, 0x3c, 0x64, 0x61, 0x79, 0x3e, 0x53, 0x61, 0x74, 0x75, 0x72,
266     0x64, 0x61, 0x79, 0x3c, 0x2f, 0x64, 0x61, 0x79, 0x3e, 0x0a, 0x20, 0x20,
267     0x20, 0x20, 0x20, 0x20, 0x3c, 0x2f, 0x64, 0x61, 0x79, 0x4e, 0x61, 0x6d,
268     0x65, 0x73, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x64,
269     0x61, 0x79, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x20, 0x61, 0x62, 0x62, 0x72,
270     0x3d, 0x22, 0x31, 0x22, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
271     0x20, 0x20, 0x3c, 0x64, 0x61, 0x79, 0x3e, 0x53, 0x75, 0x6e, 0x3c, 0x2f,
272     0x64, 0x61, 0x79, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
273     0x20, 0x3c, 0x64, 0x61, 0x79, 0x3e, 0x4d, 0x6f, 0x6e, 0x3c, 0x2f, 0x64,
274     0x61, 0x79, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
275     0x3c, 0x64, 0x61, 0x79, 0x3e, 0x54, 0x75, 0x65, 0x3c, 0x2f, 0x64, 0x61,
276     0x79, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c,
277     0x64, 0x61, 0x79, 0x3e, 0x57, 0x65, 0x64, 0x3c, 0x2f, 0x64, 0x61, 0x79,
278     0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x64,
279     0x61, 0x79, 0x3e, 0x54, 0x68, 0x75, 0x3c, 0x2f, 0x64, 0x61, 0x79, 0x3e,
280     0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x64, 0x61,
281     0x79, 0x3e, 0x46, 0x72, 0x69, 0x3c, 0x2f, 0x64, 0x61, 0x79, 0x3e, 0x0a,
282     0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x64, 0x61, 0x79,
283     0x3e, 0x53, 0x61, 0x74, 0x3c, 0x2f, 0x64, 0x61, 0x79, 0x3e, 0x0a, 0x20,
284     0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x2f, 0x64, 0x61, 0x79, 0x4e, 0x61,
285     0x6d, 0x65, 0x73, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c,
286     0x6d, 0x65, 0x72, 0x69, 0x64, 0x69, 0x65, 0x6d, 0x4e, 0x61, 0x6d, 0x65,
287     0x73, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c,
288     0x6d, 0x65, 0x72, 0x69, 0x64, 0x69, 0x65, 0x6d, 0x3e, 0x41, 0x4d, 0x3c,
289     0x2f, 0x6d, 0x65, 0x72, 0x69, 0x64, 0x69, 0x65, 0x6d, 0x3e, 0x0a, 0x20,
290     0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x6d, 0x65, 0x72, 0x69,
291     0x64, 0x69, 0x65, 0x6d, 0x3e, 0x50, 0x4d, 0x3c, 0x2f, 0x6d, 0x65, 0x72,
292     0x69, 0x64, 0x69, 0x65, 0x6d, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20,
293     0x20, 0x3c, 0x2f, 0x6d, 0x65, 0x72, 0x69, 0x64, 0x69, 0x65, 0x6d, 0x4e,
294     0x61, 0x6d, 0x65, 0x73, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
295     0x3c, 0x65, 0x72, 0x61, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x3e, 0x0a, 0x20,
296     0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x65, 0x72, 0x61, 0x3e,
297     0x42, 0x43, 0x3c, 0x2f, 0x65, 0x72, 0x61, 0x3e, 0x0a, 0x20, 0x20, 0x20,
298     0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x65, 0x72, 0x61, 0x3e, 0x41, 0x44,
299     0x3c, 0x2f, 0x65, 0x72, 0x61, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20,
300     0x20, 0x3c, 0x2f, 0x65, 0x72, 0x61, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x3e,
301     0x0a, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x2f, 0x63, 0x61, 0x6c, 0x65, 0x6e,
302     0x64, 0x61, 0x72, 0x53, 0x79, 0x6d, 0x62, 0x6f, 0x6c, 0x73, 0x3e, 0x0a,
303     0x20, 0x20, 0x20, 0x20, 0x3c, 0x64, 0x61, 0x74, 0x65, 0x50, 0x61, 0x74,
304     0x74, 0x65, 0x72, 0x6e, 0x73, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20,
305     0x20, 0x3c, 0x64, 0x61, 0x74, 0x65, 0x50, 0x61, 0x74, 0x74, 0x65, 0x72,
306     0x6e, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x66, 0x75, 0x6c, 0x6c,
307     0x22, 0x3e, 0x45, 0x45, 0x45, 0x45, 0x2c, 0x20, 0x4d, 0x4d, 0x4d, 0x4d,
308     0x20, 0x44, 0x2c, 0x20, 0x59, 0x59, 0x59, 0x59, 0x3c, 0x2f, 0x64, 0x61,
309     0x74, 0x65, 0x50, 0x61, 0x74, 0x74, 0x65, 0x72, 0x6e, 0x3e, 0x0a, 0x20,
310     0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x64, 0x61, 0x74, 0x65, 0x50, 0x61,
311     0x74, 0x74, 0x65, 0x72, 0x6e, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22,
312     0x6c, 0x6f, 0x6e, 0x67, 0x22, 0x3e, 0x4d, 0x4d, 0x4d, 0x4d, 0x20, 0x44,
313     0x2c, 0x20, 0x59, 0x59, 0x59, 0x59, 0x3c, 0x2f, 0x64, 0x61, 0x74, 0x65,
314     0x50, 0x61, 0x74, 0x74, 0x65, 0x72, 0x6e, 0x3e, 0x0a, 0x20, 0x20, 0x20,
315     0x20, 0x20, 0x20, 0x3c, 0x64, 0x61, 0x74, 0x65, 0x50, 0x61, 0x74, 0x74,
316     0x65, 0x72, 0x6e, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x6d, 0x65,
317     0x64, 0x22, 0x3e, 0x4d, 0x4d, 0x4d, 0x20, 0x44, 0x2c, 0x20, 0x59, 0x59,
318     0x59, 0x59, 0x3c, 0x2f, 0x64, 0x61, 0x74, 0x65, 0x50, 0x61, 0x74, 0x74,
319     0x65, 0x72, 0x6e, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c,
320     0x64, 0x61, 0x74, 0x65, 0x50, 0x61, 0x74, 0x74, 0x65, 0x72, 0x6e, 0x20,
321     0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x73, 0x68, 0x6f, 0x72, 0x74, 0x22,
322     0x3e, 0x4d, 0x2f, 0x44, 0x2f, 0x59, 0x59, 0x3c, 0x2f, 0x64, 0x61, 0x74,
323     0x65, 0x50, 0x61, 0x74, 0x74, 0x65, 0x72, 0x6e, 0x3e, 0x0a, 0x20, 0x20,
324     0x20, 0x20, 0x3c, 0x2f, 0x64, 0x61, 0x74, 0x65, 0x50, 0x61, 0x74, 0x74,
325     0x65, 0x72, 0x6e, 0x73, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x74,
326     0x69, 0x6d, 0x65, 0x50, 0x61, 0x74, 0x74, 0x65, 0x72, 0x6e, 0x73, 0x3e,
327     0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x74, 0x69, 0x6d, 0x65,
328     0x50, 0x61, 0x74, 0x74, 0x65, 0x72, 0x6e, 0x20, 0x6e, 0x61, 0x6d, 0x65,
329     0x3d, 0x22, 0x66, 0x75, 0x6c, 0x6c, 0x22, 0x3e, 0x68, 0x3a, 0x4d, 0x4d,
330     0x3a, 0x53, 0x53, 0x20, 0x41, 0x20, 0x5a, 0x3c, 0x2f, 0x74, 0x69, 0x6d,
331     0x65, 0x50, 0x61, 0x74, 0x74, 0x65, 0x72, 0x6e, 0x3e, 0x0a, 0x20, 0x20,
332     0x20, 0x20, 0x20, 0x20, 0x3c, 0x74, 0x69, 0x6d, 0x65, 0x50, 0x61, 0x74,
333     0x74, 0x65, 0x72, 0x6e, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x6c,
334     0x6f, 0x6e, 0x67, 0x22, 0x3e, 0x68, 0x3a, 0x4d, 0x4d, 0x3a, 0x53, 0x53,
335     0x20, 0x41, 0x20, 0x5a, 0x3c, 0x2f, 0x74, 0x69, 0x6d, 0x65, 0x50, 0x61,
336     0x74, 0x74, 0x65, 0x72, 0x6e, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20,
337     0x20, 0x3c, 0x74, 0x69, 0x6d, 0x65, 0x50, 0x61, 0x74, 0x74, 0x65, 0x72,
338     0x6e, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x6d, 0x65, 0x64, 0x22,
339     0x3e, 0x68, 0x3a, 0x4d, 0x4d, 0x3a, 0x53, 0x53, 0x20, 0x41, 0x3c, 0x2f,
340     0x74, 0x69, 0x6d, 0x65, 0x50, 0x61, 0x74, 0x74, 0x65, 0x72, 0x6e, 0x3e,
341     0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x74, 0x69, 0x6d, 0x65,
342     0x50, 0x61, 0x74, 0x74, 0x65, 0x72, 0x6e, 0x20, 0x6e, 0x61, 0x6d, 0x65,
343     0x3d, 0x22, 0x73, 0x68, 0x6f, 0x72, 0x74, 0x22, 0x3e, 0x68, 0x3a, 0x4d,
344     0x4d, 0x20, 0x41, 0x3c, 0x2f, 0x74, 0x69, 0x6d, 0x65, 0x50, 0x61, 0x74,
345     0x74, 0x65, 0x72, 0x6e, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x2f,
346     0x74, 0x69, 0x6d, 0x65, 0x50, 0x61, 0x74, 0x74, 0x65, 0x72, 0x6e, 0x73,
347     0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x64, 0x61, 0x74, 0x65, 0x54,
348     0x69, 0x6d, 0x65, 0x53, 0x79, 0x6d, 0x62, 0x6f, 0x6c, 0x73, 0x3e, 0x47,
349     0x79, 0x4d, 0x64, 0x6b, 0x48, 0x6d, 0x73, 0x53, 0x45, 0x44, 0x46, 0x77,
350     0x57, 0x61, 0x68, 0x4b, 0x7a, 0x5a, 0x3c, 0x2f, 0x64, 0x61, 0x74, 0x65,
351     0x54, 0x69, 0x6d, 0x65, 0x53, 0x79, 0x6d, 0x62, 0x6f, 0x6c, 0x73, 0x3e,
352     0x0a, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72,
353     0x50, 0x61, 0x74, 0x74, 0x65, 0x72, 0x6e, 0x73, 0x3e, 0x0a, 0x20, 0x20,
354     0x20, 0x20, 0x20, 0x20, 0x3c, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x50,
355     0x61, 0x74, 0x74, 0x65, 0x72, 0x6e, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d,
356     0x22, 0x6e, 0x75, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x22, 0x3e, 0x7a, 0x2c,
357     0x7a, 0x7a, 0x39, 0x2e, 0x7a, 0x7a, 0x7a, 0x3c, 0x2f, 0x6e, 0x75, 0x6d,
358     0x62, 0x65, 0x72, 0x50, 0x61, 0x74, 0x74, 0x65, 0x72, 0x6e, 0x3e, 0x0a,
359     0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x6e, 0x75, 0x6d, 0x62, 0x65,
360     0x72, 0x50, 0x61, 0x74, 0x74, 0x65, 0x72, 0x6e, 0x20, 0x6e, 0x61, 0x6d,
361     0x65, 0x3d, 0x22, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x63, 0x79, 0x22,
362     0x3e, 0x24, 0x7a, 0x2c, 0x7a, 0x7a, 0x39, 0x2e, 0x39, 0x39, 0x7c, 0x28,
363     0x24, 0x7a, 0x2c, 0x7a, 0x7a, 0x39, 0x2e, 0x39, 0x39, 0x29, 0x3c, 0x2f,
364     0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x50, 0x61, 0x74, 0x74, 0x65, 0x72,
365     0x6e, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x6e, 0x75,
366     0x6d, 0x62, 0x65, 0x72, 0x50, 0x61, 0x74, 0x74, 0x65, 0x72, 0x6e, 0x20,
367     0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x70, 0x65, 0x72, 0x63, 0x65, 0x6e,
368     0x74, 0x22, 0x3e, 0x7a, 0x2c, 0x7a, 0x7a, 0x39, 0x25, 0x3c, 0x2f, 0x6e,
369     0x75, 0x6d, 0x62, 0x65, 0x72, 0x50, 0x61, 0x74, 0x74, 0x65, 0x72, 0x6e,
370     0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x2f, 0x6e, 0x75, 0x6d, 0x62,
371     0x65, 0x72, 0x50, 0x61, 0x74, 0x74, 0x65, 0x72, 0x6e, 0x73, 0x3e, 0x0a,
372     0x20, 0x20, 0x20, 0x20, 0x3c, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x53,
373     0x79, 0x6d, 0x62, 0x6f, 0x6c, 0x73, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20,
374     0x20, 0x20, 0x3c, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x53, 0x79, 0x6d,
375     0x62, 0x6f, 0x6c, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x64, 0x65,
376     0x63, 0x69, 0x6d, 0x61, 0x6c, 0x22, 0x3e, 0x2e, 0x3c, 0x2f, 0x6e, 0x75,
377     0x6d, 0x62, 0x65, 0x72, 0x53, 0x79, 0x6d, 0x62, 0x6f, 0x6c, 0x3e, 0x0a,
378     0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x6e, 0x75, 0x6d, 0x62, 0x65,
379     0x72, 0x53, 0x79, 0x6d, 0x62, 0x6f, 0x6c, 0x20, 0x6e, 0x61, 0x6d, 0x65,
380     0x3d, 0x22, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x69, 0x6e, 0x67, 0x22, 0x3e,
381     0x2c, 0x3c, 0x2f, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x53, 0x79, 0x6d,
382     0x62, 0x6f, 0x6c, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c,
383     0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x53, 0x79, 0x6d, 0x62, 0x6f, 0x6c,
384     0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x70, 0x65, 0x72, 0x63, 0x65,
385     0x6e, 0x74, 0x22, 0x3e, 0x25, 0x3c, 0x2f, 0x6e, 0x75, 0x6d, 0x62, 0x65,
386     0x72, 0x53, 0x79, 0x6d, 0x62, 0x6f, 0x6c, 0x3e, 0x0a, 0x20, 0x20, 0x20,
387     0x20, 0x20, 0x20, 0x3c, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x53, 0x79,
388     0x6d, 0x62, 0x6f, 0x6c, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x6d,
389     0x69, 0x6e, 0x75, 0x73, 0x22, 0x3e, 0x2d, 0x3c, 0x2f, 0x6e, 0x75, 0x6d,
390     0x62, 0x65, 0x72, 0x53, 0x79, 0x6d, 0x62, 0x6f, 0x6c, 0x3e, 0x0a, 0x20,
391     0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72,
392     0x53, 0x79, 0x6d, 0x62, 0x6f, 0x6c, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d,
393     0x22, 0x7a, 0x65, 0x72, 0x6f, 0x22, 0x3e, 0x30, 0x3c, 0x2f, 0x6e, 0x75,
394     0x6d, 0x62, 0x65, 0x72, 0x53, 0x79, 0x6d, 0x62, 0x6f, 0x6c, 0x3e, 0x0a,
395     0x20, 0x20, 0x20, 0x20, 0x3c, 0x2f, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72,
396     0x53, 0x79, 0x6d, 0x62, 0x6f, 0x6c, 0x73, 0x3e, 0x0a, 0x20, 0x20, 0x20,
397     0x20, 0x3c, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x63, 0x79, 0x53, 0x79,
398     0x6d, 0x62, 0x6f, 0x6c, 0x73, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20,
399     0x20, 0x3c, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x63, 0x79, 0x53, 0x79,
400     0x6d, 0x62, 0x6f, 0x6c, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x73,
401     0x79, 0x6d, 0x62, 0x6f, 0x6c, 0x22, 0x3e, 0x24, 0x3c, 0x2f, 0x63, 0x75,
402     0x72, 0x72, 0x65, 0x6e, 0x63, 0x79, 0x53, 0x79, 0x6d, 0x62, 0x6f, 0x6c,
403     0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x63, 0x75, 0x72,
404     0x72, 0x65, 0x6e, 0x63, 0x79, 0x53, 0x79, 0x6d, 0x62, 0x6f, 0x6c, 0x20,
405     0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x69, 0x73, 0x6f, 0x6e, 0x61, 0x6d,
406     0x65, 0x22, 0x3e, 0x55, 0x53, 0x44, 0x3c, 0x2f, 0x63, 0x75, 0x72, 0x72,
407     0x65, 0x6e, 0x63, 0x79, 0x53, 0x79, 0x6d, 0x62, 0x6f, 0x6c, 0x3e, 0x0a,
408     0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x63, 0x75, 0x72, 0x72, 0x65,
409     0x6e, 0x63, 0x79, 0x53, 0x79, 0x6d, 0x62, 0x6f, 0x6c, 0x20, 0x6e, 0x61,
410     0x6d, 0x65, 0x3d, 0x22, 0x64, 0x65, 0x63, 0x69, 0x6d, 0x61, 0x6c, 0x22,
411     0x3e, 0x2e, 0x3c, 0x2f, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x63, 0x79,
412     0x53, 0x79, 0x6d, 0x62, 0x6f, 0x6c, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20,
413     0x3c, 0x2f, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x63, 0x79, 0x53, 0x79,
414     0x6d, 0x62, 0x6f, 0x6c, 0x73, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x3c,
415     0x74, 0x79, 0x70, 0x65, 0x66, 0x61, 0x63, 0x65, 0x73, 0x3e, 0x0a, 0x20,
416     0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x74, 0x79, 0x70, 0x65, 0x66, 0x61,
417     0x63, 0x65, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x4d, 0x79, 0x72,
418     0x69, 0x61, 0x64, 0x20, 0x50, 0x72, 0x6f, 0x22, 0x2f, 0x3e, 0x0a, 0x20,
419     0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x74, 0x79, 0x70, 0x65, 0x66, 0x61,
420     0x63, 0x65, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x4d, 0x69, 0x6e,
421     0x69, 0x6f, 0x6e, 0x20, 0x50, 0x72, 0x6f, 0x22, 0x2f, 0x3e, 0x0a, 0x20,
422     0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x74, 0x79, 0x70, 0x65, 0x66, 0x61,
423     0x63, 0x65, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x43, 0x6f, 0x75,
424     0x72, 0x69, 0x65, 0x72, 0x20, 0x53, 0x74, 0x64, 0x22, 0x2f, 0x3e, 0x0a,
425     0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x74, 0x79, 0x70, 0x65, 0x66,
426     0x61, 0x63, 0x65, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x41, 0x64,
427     0x6f, 0x62, 0x65, 0x20, 0x50, 0x69, 0x20, 0x53, 0x74, 0x64, 0x22, 0x2f,
428     0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x74, 0x79, 0x70,
429     0x65, 0x66, 0x61, 0x63, 0x65, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22,
430     0x41, 0x64, 0x6f, 0x62, 0x65, 0x20, 0x48, 0x65, 0x62, 0x72, 0x65, 0x77,
431     0x22, 0x2f, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x74,
432     0x79, 0x70, 0x65, 0x66, 0x61, 0x63, 0x65, 0x20, 0x6e, 0x61, 0x6d, 0x65,
433     0x3d, 0x22, 0x41, 0x64, 0x6f, 0x62, 0x65, 0x20, 0x41, 0x72, 0x61, 0x62,
434     0x69, 0x63, 0x22, 0x2f, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
435     0x3c, 0x74, 0x79, 0x70, 0x65, 0x66, 0x61, 0x63, 0x65, 0x20, 0x6e, 0x61,
436     0x6d, 0x65, 0x3d, 0x22, 0x41, 0x64, 0x6f, 0x62, 0x65, 0x20, 0x54, 0x68,
437     0x61, 0x69, 0x22, 0x2f, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
438     0x3c, 0x74, 0x79, 0x70, 0x65, 0x66, 0x61, 0x63, 0x65, 0x20, 0x6e, 0x61,
439     0x6d, 0x65, 0x3d, 0x22, 0x4b, 0x6f, 0x7a, 0x75, 0x6b, 0x61, 0x20, 0x47,
440     0x6f, 0x74, 0x68, 0x69, 0x63, 0x20, 0x50, 0x72, 0x6f, 0x2d, 0x56, 0x49,
441     0x20, 0x4d, 0x22, 0x2f, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
442     0x3c, 0x74, 0x79, 0x70, 0x65, 0x66, 0x61, 0x63, 0x65, 0x20, 0x6e, 0x61,
443     0x6d, 0x65, 0x3d, 0x22, 0x4b, 0x6f, 0x7a, 0x75, 0x6b, 0x61, 0x20, 0x4d,
444     0x69, 0x6e, 0x63, 0x68, 0x6f, 0x20, 0x50, 0x72, 0x6f, 0x2d, 0x56, 0x49,
445     0x20, 0x52, 0x22, 0x2f, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
446     0x3c, 0x74, 0x79, 0x70, 0x65, 0x66, 0x61, 0x63, 0x65, 0x20, 0x6e, 0x61,
447     0x6d, 0x65, 0x3d, 0x22, 0x41, 0x64, 0x6f, 0x62, 0x65, 0x20, 0x4d, 0x69,
448     0x6e, 0x67, 0x20, 0x53, 0x74, 0x64, 0x20, 0x4c, 0x22, 0x2f, 0x3e, 0x0a,
449     0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x74, 0x79, 0x70, 0x65, 0x66,
450     0x61, 0x63, 0x65, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x41, 0x64,
451     0x6f, 0x62, 0x65, 0x20, 0x53, 0x6f, 0x6e, 0x67, 0x20, 0x53, 0x74, 0x64,
452     0x20, 0x4c, 0x22, 0x2f, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
453     0x3c, 0x74, 0x79, 0x70, 0x65, 0x66, 0x61, 0x63, 0x65, 0x20, 0x6e, 0x61,
454     0x6d, 0x65, 0x3d, 0x22, 0x41, 0x64, 0x6f, 0x62, 0x65, 0x20, 0x4d, 0x79,
455     0x75, 0x6e, 0x67, 0x6a, 0x6f, 0x20, 0x53, 0x74, 0x64, 0x20, 0x4d, 0x22,
456     0x2f, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x2f, 0x74, 0x79, 0x70,
457     0x65, 0x66, 0x61, 0x63, 0x65, 0x73, 0x3e, 0x0a, 0x20, 0x20, 0x3c, 0x2f,
458     0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x65, 0x3e, 0x0a, 0x3c, 0x2f, 0x6c, 0x6f,
459     0x63, 0x61, 0x6c, 0x65, 0x53, 0x65, 0x74, 0x3e, 0x0a, 0x65, 0x6e, 0x64,
460     0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x0a, 0x65, 0x6e, 0x64, 0x6f, 0x62,
461     0x6a, 0x0a, 0x37, 0x20, 0x30, 0x20, 0x6f, 0x62, 0x6a, 0x20, 0x3c, 0x3c,
462     0x0a, 0x20, 0x20, 0x2f, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x20, 0x31,
463     0x31, 0x0a, 0x3e, 0x3e, 0x0a, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x0a,
464     0x3c, 0x2f, 0x78, 0x64, 0x70, 0x3a, 0x78, 0x64, 0x70, 0x3e, 0x0a, 0x65,
465     0x6e, 0x64, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x0a, 0x65, 0x6e, 0x64,
466     0x6f, 0x62, 0x6a, 0x0a, 0x38, 0x20, 0x30, 0x20, 0x6f, 0x62, 0x6a, 0x20,
467     0x3c, 0x3c, 0x0a, 0x20, 0x20, 0x2f, 0x54, 0x79, 0x70, 0x65, 0x20, 0x2f,
468     0x50, 0x61, 0x67, 0x65, 0x73, 0x0a, 0x20, 0x20, 0x2f, 0x43, 0x6f, 0x75,
469     0x6e, 0x74, 0x20, 0x31, 0x0a, 0x20, 0x20, 0x2f, 0x4b, 0x69, 0x64, 0x73,
470     0x20, 0x5b, 0x39, 0x20, 0x30, 0x20, 0x52, 0x5d, 0x0a, 0x3e, 0x3e, 0x0a,
471     0x65, 0x6e, 0x64, 0x6f, 0x62, 0x6a, 0x0a, 0x39, 0x20, 0x30, 0x20, 0x6f,
472     0x62, 0x6a, 0x20, 0x3c, 0x3c, 0x0a, 0x20, 0x20, 0x2f, 0x54, 0x79, 0x70,
473     0x65, 0x20, 0x2f, 0x50, 0x61, 0x67, 0x65, 0x0a, 0x20, 0x20, 0x2f, 0x50,
474     0x61, 0x72, 0x65, 0x6e, 0x74, 0x20, 0x32, 0x20, 0x30, 0x20, 0x52, 0x0a,
475     0x20, 0x20, 0x2f, 0x4d, 0x65, 0x64, 0x69, 0x61, 0x42, 0x6f, 0x78, 0x20,
476     0x5b, 0x30, 0x20, 0x30, 0x20, 0x36, 0x31, 0x32, 0x20, 0x37, 0x39, 0x32,
477     0x5d, 0x0a, 0x3e, 0x3e, 0x0a, 0x65, 0x6e, 0x64, 0x6f, 0x62, 0x6a, 0x0a,
478     0x78, 0x72, 0x65, 0x66, 0x0a, 0x30, 0x20, 0x31, 0x30, 0x0a, 0x30, 0x30,
479     0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x20, 0x36, 0x35, 0x35,
480     0x33, 0x35, 0x20, 0x66, 0x20, 0x0a, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30,
481     0x30, 0x30, 0x31, 0x35, 0x20, 0x30, 0x30, 0x30, 0x30, 0x30, 0x20, 0x6e,
482     0x20, 0x0a, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x31, 0x39, 0x39,
483     0x20, 0x30, 0x30, 0x30, 0x30, 0x30, 0x20, 0x6e, 0x20, 0x0a, 0x30, 0x30,
484     0x30, 0x30, 0x30, 0x30, 0x30, 0x33, 0x35, 0x38, 0x20, 0x30, 0x30, 0x30,
485     0x30, 0x30, 0x20, 0x6e, 0x20, 0x0a, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30,
486     0x30, 0x35, 0x33, 0x34, 0x20, 0x30, 0x30, 0x30, 0x30, 0x30, 0x20, 0x6e,
487     0x20, 0x0a, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x31, 0x32, 0x32, 0x38,
488     0x20, 0x30, 0x30, 0x30, 0x30, 0x30, 0x20, 0x6e, 0x20, 0x0a, 0x30, 0x30,
489     0x30, 0x30, 0x30, 0x30, 0x31, 0x37, 0x36, 0x32, 0x20, 0x30, 0x30, 0x30,
490     0x30, 0x30, 0x20, 0x6e, 0x20, 0x0a, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30,
491     0x35, 0x32, 0x37, 0x30, 0x20, 0x30, 0x30, 0x30, 0x30, 0x30, 0x20, 0x6e,
492     0x20, 0x0a, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x35, 0x33, 0x33, 0x32,
493     0x20, 0x30, 0x30, 0x30, 0x30, 0x30, 0x20, 0x6e, 0x20, 0x0a, 0x30, 0x30,
494     0x30, 0x30, 0x30, 0x30, 0x35, 0x33, 0x39, 0x35, 0x20, 0x30, 0x30, 0x30,
495     0x30, 0x30, 0x20, 0x6e, 0x20, 0x0a, 0x74, 0x72, 0x61, 0x69, 0x6c, 0x65,
496     0x72, 0x20, 0x3c, 0x3c, 0x0a, 0x20, 0x20, 0x2f, 0x52, 0x6f, 0x6f, 0x74,
497     0x20, 0x31, 0x20, 0x30, 0x20, 0x52, 0x0a, 0x20, 0x20, 0x2f, 0x53, 0x69,
498     0x7a, 0x65, 0x20, 0x31, 0x30, 0x0a, 0x3e, 0x3e, 0x0a, 0x73, 0x74, 0x61,
499     0x72, 0x74, 0x78, 0x72, 0x65, 0x66, 0x0a, 0x35, 0x34, 0x37, 0x32, 0x0a,
500     0x25, 0x25, 0x45, 0x4f, 0x46, 0x0a};
501 
502 }  // namespace
503 
504 class PDFiumFormCalcContextFuzzer : public PDFiumFuzzerHelper {
505  public:
PDFiumFormCalcContextFuzzer(const uint8_t * data,size_t size)506   PDFiumFormCalcContextFuzzer(const uint8_t* data, size_t size)
507       : data_(data), size_(size) {}
508   ~PDFiumFormCalcContextFuzzer() override = default;
509 
GetFormCallbackVersion() const510   int GetFormCallbackVersion() const override { return 2; }
511 
512   // Return false if XFA doesn't load as otherwise we're duplicating the work
513   // done by the non-xfa fuzzer.
OnFormFillEnvLoaded(FPDF_DOCUMENT doc)514   bool OnFormFillEnvLoaded(FPDF_DOCUMENT doc) override {
515     return FPDF_LoadXFA(doc);
516   }
517 
OnRenderFinished(FPDF_DOCUMENT doc)518   void OnRenderFinished(FPDF_DOCUMENT doc) override {
519     auto* context = static_cast<CPDFXFA_Context*>(
520         CPDFDocumentFromFPDFDocument(doc)->GetExtension());
521     CXFA_Document* xfa_document = context->GetXFADoc()->GetXFADoc();
522     CFXJSE_Engine* script_context = xfa_document->GetScriptContext();
523 
524     CXFA_EventParam params;
525     params.m_bCancelAction = false;
526     CFXJSE_Engine::EventParamScope param_scope(script_context, nullptr,
527                                                &params);
528     ByteStringView data_view(data_, size_);
529 
530     auto value = std::make_unique<CFXJSE_Value>();
531     script_context->RunScript(CXFA_Script::Type::Formcalc,
532                               WideString::FromUTF8(data_view).AsStringView(),
533                               value.get(), xfa_document->GetRoot());
534   }
535 
536  private:
537   const uint8_t* data_;
538   size_t size_;
539 };
540 
LLVMFuzzerTestOneInput(const uint8_t * data,size_t size)541 extern "C" int LLVMFuzzerTestOneInput(const uint8_t* data, size_t size) {
542   PDFiumFormCalcContextFuzzer fuzzer(data, size);
543   fuzzer.RenderPdf(reinterpret_cast<const char*>(kSimpleXfaPdfData),
544                    sizeof(kSimpleXfaPdfData));
545   return 0;
546 }
547