New upstream snapshot.
Debian Janitor
2 years ago
4 | 4 | |
5 | 5 | SOURCES = edid-decode.cpp parse-base-block.cpp parse-cta-block.cpp \ |
6 | 6 | parse-displayid-block.cpp parse-ls-ext-block.cpp \ |
7 | parse-di-ext-block.cpp parse-vtb-ext-block.cpp | |
7 | parse-di-ext-block.cpp parse-vtb-ext-block.cpp calc-gtf-cvt.cpp | |
8 | 8 | WARN_FLAGS = -Wall -Wextra -Wno-missing-field-initializers -Wno-unused-parameter |
9 | 9 | |
10 | 10 | all: edid-decode |
11 | 11 | |
12 | 12 | sha = -DSHA=$(shell if test -d .git ; then git rev-parse --short=12 HEAD ; fi) |
13 | date = -DDATE=$(shell if test -d .git ; then printf '"'; TZ=UTC git show --quiet --date='format-local:%F %T"' --format="%cd"; fi) | |
13 | date = -DDATE=$(shell if test -d .git ; then TZ=UTC git show --quiet --date='format-local:"%F %T"' --format='%cd'; fi) | |
14 | 14 | |
15 | 15 | edid-decode: $(SOURCES) edid-decode.h Makefile |
16 | 16 | $(CXX) $(CPPFLAGS) $(CFLAGS) $(LDFLAGS) $(WARN_FLAGS) -g $(sha) $(date) -o $@ $(SOURCES) -lm |
0 | // SPDX-License-Identifier: MIT | |
1 | /* | |
2 | * Copyright 2006-2012 Red Hat, Inc. | |
3 | * Copyright 2018-2021 Cisco Systems, Inc. and/or its affiliates. All rights reserved. | |
4 | * | |
5 | * Author: Adam Jackson <ajax@nwnk.net> | |
6 | * Maintainer: Hans Verkuil <hverkuil-cisco@xs4all.nl> | |
7 | */ | |
8 | ||
9 | #include <stdio.h> | |
10 | #include <stdlib.h> | |
11 | #include <math.h> | |
12 | #include <time.h> | |
13 | ||
14 | #include "edid-decode.h" | |
15 | ||
16 | #define CELL_GRAN 8.0 | |
17 | #define MARGIN_PERC 1.8 | |
18 | #define GTF_MIN_PORCH 1.0 | |
19 | #define GTF_V_SYNC_RQD 3.0 | |
20 | #define GTF_H_SYNC_PERC 8.0 | |
21 | #define GTF_MIN_VSYNC_BP 550.0 | |
22 | ||
23 | timings edid_state::calc_gtf_mode(unsigned h_pixels, unsigned v_lines, | |
24 | double ip_freq_rqd, bool int_rqd, | |
25 | enum gtf_ip_parm ip_parm, bool margins_rqd, | |
26 | bool secondary, double C, double M, double K, double J) | |
27 | { | |
28 | timings t = {}; | |
29 | /* C' and M' are part of the Blanking Duty Cycle computation */ | |
30 | double C_PRIME = ((C - J) * K / 256.0) + J; | |
31 | double M_PRIME = K / 256.0 * M; | |
32 | ||
33 | double h_pixels_rnd = round(h_pixels / CELL_GRAN) * CELL_GRAN; | |
34 | double v_lines_rnd = int_rqd ? round(v_lines / 2.0) : v_lines; | |
35 | unsigned hor_margin = margins_rqd ? | |
36 | round(h_pixels_rnd * MARGIN_PERC / 100.0 / CELL_GRAN) * CELL_GRAN : 0; | |
37 | unsigned vert_margin = margins_rqd ? round(MARGIN_PERC / 100.0 * v_lines_rnd) : 0; | |
38 | double interlace = int_rqd ? 0.5 : 0; | |
39 | double total_active_pixels = h_pixels_rnd + hor_margin * 2; | |
40 | ||
41 | t.hact = h_pixels_rnd; | |
42 | t.vact = v_lines; | |
43 | t.interlaced = int_rqd; | |
44 | ||
45 | double pixel_freq; | |
46 | double h_blank_pixels; | |
47 | double total_pixels; | |
48 | double v_sync_bp; | |
49 | ||
50 | if (ip_parm == gtf_ip_vert_freq) { | |
51 | // vertical frame frequency (Hz) | |
52 | double v_field_rate_rqd = int_rqd ? ip_freq_rqd * 2 : ip_freq_rqd; | |
53 | double h_period_est = ((1.0 / v_field_rate_rqd) - GTF_MIN_VSYNC_BP / 1000000.0) / | |
54 | (v_lines_rnd + vert_margin * 2 + GTF_MIN_PORCH + interlace) * 1000000.0; | |
55 | v_sync_bp = round(GTF_MIN_VSYNC_BP / h_period_est); | |
56 | double total_v_lines = v_lines_rnd + vert_margin * 2 + | |
57 | v_sync_bp + interlace + GTF_MIN_PORCH; | |
58 | double v_field_rate_est = 1.0 / h_period_est / total_v_lines * 1000000.0; | |
59 | double h_period = h_period_est / (v_field_rate_rqd / v_field_rate_est); | |
60 | double ideal_duty_cycle = C_PRIME - (M_PRIME * h_period / 1000.0); | |
61 | h_blank_pixels = round(total_active_pixels * ideal_duty_cycle / | |
62 | (100.0 - ideal_duty_cycle) / | |
63 | (2 * CELL_GRAN)) * 2 * CELL_GRAN; | |
64 | total_pixels = total_active_pixels + h_blank_pixels; | |
65 | pixel_freq = total_pixels / h_period; | |
66 | } else if (ip_parm == gtf_ip_hor_freq) { | |
67 | // horizontal frequency (kHz) | |
68 | double h_freq = ip_freq_rqd; | |
69 | v_sync_bp = round(GTF_MIN_VSYNC_BP * h_freq / 1000.0); | |
70 | double ideal_duty_cycle = C_PRIME - (M_PRIME / h_freq); | |
71 | h_blank_pixels = round(total_active_pixels * ideal_duty_cycle / | |
72 | (100.0 - ideal_duty_cycle) / | |
73 | (2 * CELL_GRAN)) * 2 * CELL_GRAN; | |
74 | total_pixels = total_active_pixels + h_blank_pixels; | |
75 | pixel_freq = total_pixels * h_freq / 1000.0; | |
76 | } else { | |
77 | // pixel clock rate (MHz) | |
78 | pixel_freq = ip_freq_rqd; | |
79 | double ideal_h_period = | |
80 | ((C_PRIME - 100.0) + | |
81 | sqrt(((100.0 - C_PRIME) * (100.0 - C_PRIME) + | |
82 | (0.4 * M_PRIME * (total_active_pixels + hor_margin * 2) / | |
83 | pixel_freq)))) / 2.0 / M_PRIME * 1000.0; | |
84 | double ideal_duty_cycle = C_PRIME - (M_PRIME * ideal_h_period) / 1000.0; | |
85 | h_blank_pixels = round(total_active_pixels * ideal_duty_cycle / | |
86 | (100.0 - ideal_duty_cycle) / | |
87 | (2 * CELL_GRAN)) * 2 * CELL_GRAN; | |
88 | total_pixels = total_active_pixels + h_blank_pixels; | |
89 | double h_freq = pixel_freq / total_pixels * 1000.0; | |
90 | v_sync_bp = round(GTF_MIN_VSYNC_BP * h_freq / 1000.0); | |
91 | } | |
92 | ||
93 | double v_back_porch = v_sync_bp - GTF_V_SYNC_RQD; | |
94 | ||
95 | t.vbp = v_back_porch; | |
96 | t.vsync = GTF_V_SYNC_RQD; | |
97 | t.vfp = GTF_MIN_PORCH; | |
98 | t.pixclk_khz = round(1000.0 * pixel_freq); | |
99 | t.hsync = round(GTF_H_SYNC_PERC / 100.0 * total_pixels / CELL_GRAN) * CELL_GRAN; | |
100 | t.hfp = (h_blank_pixels / 2.0) - t.hsync; | |
101 | t.hbp = t.hfp + t.hsync; | |
102 | t.hborder = hor_margin; | |
103 | t.vborder = vert_margin; | |
104 | t.pos_pol_hsync = secondary; | |
105 | t.pos_pol_vsync = !secondary; | |
106 | t.rb = secondary ? RB_GTF : RB_NONE; | |
107 | return t; | |
108 | } | |
109 | ||
110 | void edid_state::edid_gtf_mode(unsigned refresh, struct timings &t) | |
111 | { | |
112 | unsigned hratio = t.hratio; | |
113 | unsigned vratio = t.vratio; | |
114 | t = calc_gtf_mode(t.hact, t.vact, refresh, t.interlaced); | |
115 | t.hratio = hratio; | |
116 | t.vratio = vratio; | |
117 | } | |
118 | ||
119 | #define CVT_MIN_VSYNC_BP 550.0 | |
120 | #define CVT_MIN_V_PORCH 3 | |
121 | /* Minimum vertical backporch for CVT and CVT RBv1 */ | |
122 | #define CVT_MIN_V_BPORCH 7 | |
123 | /* Fixed vertical backporch for CVT RBv2 and RBv3 */ | |
124 | #define CVT_FIXED_V_BPORCH 6 | |
125 | #define CVT_C_PRIME 30.0 | |
126 | #define CVT_M_PRIME 300.0 | |
127 | #define CVT_RB_MIN_VBLANK 460.0 | |
128 | ||
129 | // If rb == RB_CVT_V2, then alt means video-optimized (i.e. 59.94 instead of 60 Hz, etc.). | |
130 | // If rb == RB_CVT_V3, then alt means that rb_h_blank is 160 instead of 80. | |
131 | timings edid_state::calc_cvt_mode(unsigned h_pixels, unsigned v_lines, | |
132 | double ip_freq_rqd, unsigned rb, bool int_rqd, | |
133 | bool margins_rqd, bool alt, unsigned rb_h_blank, | |
134 | double add_vert_time) | |
135 | { | |
136 | timings t = {}; | |
137 | ||
138 | t.hact = h_pixels; | |
139 | t.vact = v_lines; | |
140 | t.interlaced = int_rqd; | |
141 | ||
142 | double cell_gran = rb == RB_CVT_V2 ? 1 : CELL_GRAN; | |
143 | double h_pixels_rnd = floor(h_pixels / cell_gran) * cell_gran; | |
144 | double v_lines_rnd = int_rqd ? floor(v_lines / 2.0) : v_lines; | |
145 | unsigned hor_margin = margins_rqd ? | |
146 | floor((h_pixels_rnd * MARGIN_PERC / 100.0) / cell_gran) * cell_gran : 0; | |
147 | unsigned vert_margin = margins_rqd ? floor(MARGIN_PERC / 100.0 * v_lines_rnd) : 0; | |
148 | double interlace = int_rqd ? 0.5 : 0; | |
149 | double total_active_pixels = h_pixels_rnd + hor_margin * 2; | |
150 | double v_field_rate_rqd = int_rqd ? ip_freq_rqd * 2 : ip_freq_rqd; | |
151 | double clock_step = rb == RB_CVT_V2 ? 0.001 : 0.25; | |
152 | double h_blank = (rb == RB_CVT_V1 || (rb == RB_CVT_V3 && alt)) ? 160 : 80; | |
153 | double rb_v_fporch = rb == RB_CVT_V1 ? 3 : 1; | |
154 | double refresh_multiplier = (rb == RB_CVT_V2 && alt) ? 1000.0 / 1001.0 : 1; | |
155 | double rb_min_vblank = CVT_RB_MIN_VBLANK; | |
156 | double h_sync = 32; | |
157 | ||
158 | double v_sync; | |
159 | double pixel_freq; | |
160 | double v_blank; | |
161 | double v_sync_bp; | |
162 | ||
163 | if (rb == RB_CVT_V3 && add_vert_time) { | |
164 | if (add_vert_time + rb_min_vblank <= 1000000.0 / ip_freq_rqd / 4.0) | |
165 | rb_min_vblank += add_vert_time; | |
166 | } | |
167 | ||
168 | if (rb == RB_CVT_V3 && rb_h_blank) { | |
169 | h_blank = rb_h_blank & ~7; | |
170 | if (h_blank < 80) | |
171 | h_blank = 80; | |
172 | else if (h_blank > 200) | |
173 | h_blank = 200; | |
174 | } | |
175 | ||
176 | /* Determine VSync Width from aspect ratio */ | |
177 | if ((t.vact * 4 / 3) == t.hact) | |
178 | v_sync = 4; | |
179 | else if ((t.vact * 16 / 9) == t.hact) | |
180 | v_sync = 5; | |
181 | else if ((t.vact * 16 / 10) == t.hact) | |
182 | v_sync = 6; | |
183 | else if (!(t.vact % 4) && ((t.vact * 5 / 4) == t.hact)) | |
184 | v_sync = 7; | |
185 | else if ((t.vact * 15 / 9) == t.hact) | |
186 | v_sync = 7; | |
187 | else /* Custom */ | |
188 | v_sync = 10; | |
189 | ||
190 | if (rb >= RB_CVT_V2) | |
191 | v_sync = 8; | |
192 | ||
193 | if (rb == RB_NONE) { | |
194 | double h_period_est = ((1.0 / v_field_rate_rqd) - CVT_MIN_VSYNC_BP / 1000000.0) / | |
195 | (v_lines_rnd + vert_margin * 2 + CVT_MIN_V_PORCH + interlace) * 1000000.0; | |
196 | v_sync_bp = floor(CVT_MIN_VSYNC_BP / h_period_est) + 1; | |
197 | if (v_sync_bp < v_sync + CVT_MIN_V_BPORCH) | |
198 | v_sync_bp = v_sync + CVT_MIN_V_BPORCH; | |
199 | v_blank = v_sync_bp + CVT_MIN_V_PORCH; | |
200 | double ideal_duty_cycle = CVT_C_PRIME - (CVT_M_PRIME * h_period_est / 1000.0); | |
201 | if (ideal_duty_cycle < 20) | |
202 | ideal_duty_cycle = 20; | |
203 | h_blank = floor(total_active_pixels * ideal_duty_cycle / | |
204 | (100.0 - ideal_duty_cycle) / | |
205 | (2 * CELL_GRAN)) * 2 * CELL_GRAN; | |
206 | double total_pixels = total_active_pixels + h_blank; | |
207 | h_sync = floor(total_pixels * 0.08 / CELL_GRAN) * CELL_GRAN; | |
208 | pixel_freq = floor((total_pixels / h_period_est) / clock_step) * clock_step; | |
209 | } else { | |
210 | double h_period_est = ((1000000.0 / v_field_rate_rqd) - rb_min_vblank) / | |
211 | (v_lines_rnd + vert_margin * 2); | |
212 | double vbi_lines = floor(rb_min_vblank / h_period_est) + 1; | |
213 | double rb_min_vbi = rb_v_fporch + v_sync + | |
214 | (rb == RB_CVT_V1 ? CVT_MIN_V_BPORCH : CVT_FIXED_V_BPORCH); | |
215 | v_blank = vbi_lines < rb_min_vbi ? rb_min_vbi : vbi_lines; | |
216 | double total_v_lines = v_blank + v_lines_rnd + vert_margin * 2 + interlace; | |
217 | if (rb == RB_CVT_V1) | |
218 | v_sync_bp = v_blank - rb_v_fporch; | |
219 | else | |
220 | v_sync_bp = v_sync + CVT_FIXED_V_BPORCH; | |
221 | double total_pixels = h_blank + total_active_pixels; | |
222 | double freq = v_field_rate_rqd * total_v_lines * total_pixels * refresh_multiplier; | |
223 | if (rb == RB_CVT_V3) | |
224 | pixel_freq = ceil((freq / 1000000.0) / clock_step) * clock_step; | |
225 | else | |
226 | pixel_freq = floor((freq / 1000000.0) / clock_step) * clock_step; | |
227 | } | |
228 | ||
229 | t.vbp = v_sync_bp - v_sync; | |
230 | t.vsync = v_sync; | |
231 | t.vfp = v_blank - t.vbp - t.vsync; | |
232 | t.pixclk_khz = round(1000.0 * pixel_freq); | |
233 | t.hsync = h_sync; | |
234 | if (rb == RB_CVT_V3) | |
235 | t.hfp = 8; | |
236 | else | |
237 | t.hfp = (h_blank / 2.0) - t.hsync; | |
238 | t.hbp = h_blank - t.hfp - t.hsync; | |
239 | t.hborder = hor_margin; | |
240 | t.vborder = vert_margin; | |
241 | t.rb = rb; | |
242 | if (alt && (rb == RB_CVT_V2 || rb == RB_CVT_V3)) | |
243 | t.rb |= RB_ALT; | |
244 | t.pos_pol_hsync = t.rb; | |
245 | t.pos_pol_vsync = !t.rb; | |
246 | calc_ratio(&t); | |
247 | return t; | |
248 | } | |
249 | ||
250 | void edid_state::edid_cvt_mode(unsigned refresh, struct timings &t, unsigned rb_h_blank, | |
251 | double add_vert_time) | |
252 | { | |
253 | unsigned hratio = t.hratio; | |
254 | unsigned vratio = t.vratio; | |
255 | ||
256 | t = calc_cvt_mode(t.hact, t.vact, refresh, t.rb & ~RB_ALT, t.interlaced, | |
257 | false, t.rb & RB_ALT, rb_h_blank, add_vert_time); | |
258 | t.hratio = hratio; | |
259 | t.vratio = vratio; | |
260 | } |
0 | edid-decode (0.1~git20210811.4fdf6f2-1) UNRELEASED; urgency=low | |
1 | ||
2 | * New upstream snapshot. | |
3 | ||
4 | -- Debian Janitor <janitor@jelmer.uk> Wed, 18 Aug 2021 01:00:55 -0000 | |
5 | ||
0 | 6 | edid-decode (0.1~git20201230.95d81c9-2) unstable; urgency=medium |
1 | 7 | |
2 | 8 | * Bump debhelper from old 11 to 13. |
112 | 112 | .TP |
113 | 113 | DisplayID 2.0: VESA DisplayID Standard, Version 2.0 |
114 | 114 | .TP |
115 | DisplayID 2.0: VESA DisplayID v2.0 Errata E8 | |
116 | .TP | |
115 | 117 | DI-EXT: VESA Display Information Extension Block Standard, Release A |
116 | 118 | .TP |
117 | 119 | LS-EXT: VESA Enhanced EDID Localized String Extension Standard, Release A |
133 | 135 | SPWG Notebook Panel Specification, Version 3.5 |
134 | 136 | .TP |
135 | 137 | EPI Embedded Panel Interface, Revision 1.0 |
138 | .TP | |
139 | Microsoft EDID extension for head-mounted and specialized monitors, Version 3 | |
136 | 140 | .RE |
137 | 141 | |
138 | 142 | .TP |
143 | 147 | .TP |
144 | 148 | CVT 1.2: VESA Coordinated Video Timings (CVT) Standard, Version 1.2 |
145 | 149 | .TP |
150 | CVT 1.2: VESA CVT v1.2 Errata E1 | |
151 | .TP | |
146 | 152 | GTF 1.1: VESA Generalized Timing Formula Standard, Version: 1.1 |
147 | 153 | .RE |
148 | 154 | |
151 | 157 | \fB\-h\fR, \fB\-\-help\fR |
152 | 158 | Prints the help message. |
153 | 159 | .TP |
154 | \fB\-o\fR, \fB\-\-output\-format\fR=\fI<fmt>\fR | |
160 | \fB\-o\fR, \fB\-\-output\-format\fR \fI<fmt>\fR | |
155 | 161 | If [out] is specified, then write the EDID in format \fI<fmt>\fR. |
156 | .br | |
162 | ||
157 | 163 | The output format can be one of: |
158 | 164 | .br |
159 | 165 | hex: hex numbers in ascii text (default for stdout) |
210 | 216 | .TP |
211 | 217 | \fB\-s\fR, \fB\-\-skip\-hex\-dump\fR |
212 | 218 | Skip the initial hex dump of the EDID. |
219 | .TP | |
220 | \fB\-H\fR, \fB\-\-only\-hex\-dump\fR | |
221 | Only show the hex dump of the EDID, then exit. | |
213 | 222 | .TP |
214 | 223 | \fB\-\-skip\-sha\fR |
215 | 224 | Don't show the SHA hash. Normally edid-decode will show the SHA, i.e. the |
227 | 236 | \fB\-\-version\fR |
228 | 237 | Show the SHA hash and the last commit date. |
229 | 238 | |
239 | .SH TIMING OPTIONS | |
240 | The following options report the timings for DMT, VIC and HDMI VIC codes and | |
241 | calculate the timings for CVT or GTF timings, based on the given parameters. | |
242 | The EDID will not be shown, although it can be used with the \fB\-\-gtf\fR | |
243 | option in order to read the secondary curve parameters. | |
244 | .TP | |
245 | \fB\-\-std\fR \fI<byte1>\fR,\fI<byte2>\fR | |
246 | Show the standard timing represented by these two bytes. | |
247 | .TP | |
248 | \fB\-\-dmt\fR \fI<dmt>\fR | |
249 | Show the timings for the DMT with the given DMT ID. | |
250 | .TP | |
251 | \fB\-\-vic\fR \fI<vic>\fR | |
252 | Show the timings for this VIC. | |
253 | .TP | |
254 | \fB\-\-hdmi\-vic\fR \fI<hdmivic>\fR | |
255 | Show the timings for this HDMI VIC. | |
256 | .TP | |
257 | \fB\-\-cvt\fR \fBw\fR=\fI<width>\fR,\fBh\fR=\fI<height>\fR,\fBfps\fR=\fI<fps>\fR[,\fBrb\fR=\fI<rb>\fR][,\fBinterlaced\fR][,\fBoverscan\fR] | |
258 | [,\fBalt\fR][,\fBhblank\fR=\fI<hblank>\fR][,\fBadd\-vblank\fR=\fI<add\-vblank>\fR] | |
259 | .br | |
260 | Calculate the CVT timings for the given format. | |
261 | ||
262 | \fI<width>\fR is the width in pixels, \fI<height>\fR is the frame (not field!) height in lines. | |
263 | .br | |
264 | \fI<fps>\fR is frames per second for progressive timings and fields per second for interlaced timings. | |
265 | .br | |
266 | \fI<rb>\fR can be 0 (no reduced blanking, default), or 1-3 for the reduced blanking version. | |
267 | .br | |
268 | If \fBinterlaced\fR is given, then this is an interlaced format. | |
269 | .br | |
270 | If \fBoverscan\fR is given, then this is an overscanned format. I.e., margins are required. | |
271 | .br | |
272 | If \fBalt\fR is given and \fI<rb>\fR=2, then report the timings | |
273 | optimized for video: 1000 / 1001 * \fI<fps>\fR. | |
274 | .br | |
275 | If \fBalt\fR is given and \fI<rb>\fR=3, then the horizontal blanking | |
276 | is 160 instead of 80 pixels. | |
277 | .br | |
278 | If \fBhblank\fR is given and \fI<rb>\fR=3, then the horizontal blanking | |
279 | is \fI<hblank>\fR pixels (range of 80-200 and divisible by 8), overriding \fBalt\fR. | |
280 | .br | |
281 | If \fBadd\-vblank\fR is given and \fI<rb>\fR=3, then \fI<add\-vblank>\fR microseconds are | |
282 | added to the minimum vertical blank time of 460 microseconds as long as the total blank | |
283 | time does not exceed 25% of the frame time. | |
284 | .TP | |
285 | \fB\-\-gtf\fR \fBw\fR=\fI<width>\fR,\fBh\fR=\fI<height>\fR[,\fBfps\fR=\fI<fps>\fR][,\fBhorfreq\fR=\fI<horfreq>\fR][,\fBpixclk\fR=\fI<pixclk>\fR] | |
286 | [,\fBinterlaced\fR][,\fBoverscan\fR][,\fBsecondary\fR][,\fBC\fR=\fI<c>\fR][,\fBM\fR=\fI<m>\fR][,\fBK\fR=\fI<k>\fR][,\fBJ\fR=\fI<j>\fR] | |
287 | .br | |
288 | Calculate the GTF timings for the given format. | |
289 | ||
290 | \fI<width>\fR is the width in pixels, \fI<height>\fR is the frame (not field!) height in lines. | |
291 | .br | |
292 | \fI<fps>\fR is frames per second for progressive timings and fields per second for interlaced timings. | |
293 | .br | |
294 | \fI<horfreq>\fR is the horizontal frequency in kHz. | |
295 | .br | |
296 | \fI<pixclk>\fR is the pixel clock frequency in MHz. | |
297 | Only one of \fBfps\fR, \fBhorfreq\fR or \fBpixclk\fR must be given. | |
298 | .br | |
299 | If \fBinterlaced\fR is given, then this is an interlaced format. | |
300 | .br | |
301 | If \fBoverscan\fR is given, then this is an overscanned format. I.e., margins are required. | |
302 | .br | |
303 | If \fBsecondary\fR is given, then the secondary GTF is used for | |
304 | reduced blanking, where \fI<c>\fR, \fI<m>\fR, \fI<k>\fR and \fI<j>\fR are parameters | |
305 | for the secondary curve. If none of the secondary curve parameters | |
306 | were set, and an EDID file is passed as command line option, then the | |
307 | secondary curve parameters are read from that EDID. | |
308 | .br | |
309 | The default secondary curve parameters are 40 for \fI<c>\fR, 600 for \fI<m>\fR, | |
310 | 128 for \fI<k>\fR and 20 for \fI<j>\fR. | |
311 | These values correspond to the normal curve that GTF uses. | |
312 | .TP | |
313 | \fB\-\-list\-established\-timings\fR | |
314 | List all known Established Timings. | |
315 | .TP | |
316 | \fB\-\-list\-dmts\fR | |
317 | List all known DMTs. | |
318 | .TP | |
319 | \fB\-\-list\-vics\fR | |
320 | List all known VICs. | |
321 | .TP | |
322 | \fB\-\-list\-hdmi\-vics\fR | |
323 | List all known HDMI VICs. | |
324 | ||
230 | 325 | .PP |
231 | 326 | .SH NOTES |
232 | Not all fields are decoded, or decoded completely. Some fields' decoding | |
233 | may appear to corrupt the output (for example, detailed string sections | |
234 | have their contents printed literally). | |
327 | Not all fields are decoded, or decoded completely. | |
235 | 328 | .B edid-decode |
236 | 329 | does attempt to validate its input against the relevant standards, but its |
237 | 330 | opinions have not been double-checked with the relevant standards bodies, |
41 | 41 | enum Option { |
42 | 42 | OptCheck = 'c', |
43 | 43 | OptCheckInline = 'C', |
44 | OptFBModeTimings = 'F', | |
44 | 45 | OptHelp = 'h', |
46 | OptOnlyHexDump = 'H', | |
47 | OptLongTimings = 'L', | |
45 | 48 | OptNativeTimings = 'n', |
46 | 49 | OptOutputFormat = 'o', |
47 | 50 | OptPreferredTimings = 'p', |
48 | 51 | OptPhysicalAddress = 'P', |
49 | OptLongTimings = 'L', | |
52 | OptSkipHexDump = 's', | |
50 | 53 | OptShortTimings = 'S', |
51 | OptFBModeTimings = 'F', | |
54 | OptV4L2Timings = 'V', | |
52 | 55 | OptXModeLineTimings = 'X', |
53 | OptV4L2Timings = 'V', | |
54 | OptSkipHexDump = 's', | |
55 | 56 | OptSkipSHA = 128, |
56 | 57 | OptHideSerialNumbers, |
57 | 58 | OptVersion, |
59 | OptSTD, | |
60 | OptDMT, | |
61 | OptVIC, | |
62 | OptHDMIVIC, | |
63 | OptCVT, | |
64 | OptGTF, | |
65 | OptListEstTimings, | |
66 | OptListDMTs, | |
67 | OptListVICs, | |
68 | OptListHDMIVICs, | |
58 | 69 | OptLast = 256 |
59 | 70 | }; |
60 | 71 | |
67 | 78 | { "preferred-timings", no_argument, 0, OptPreferredTimings }, |
68 | 79 | { "physical-address", no_argument, 0, OptPhysicalAddress }, |
69 | 80 | { "skip-hex-dump", no_argument, 0, OptSkipHexDump }, |
81 | { "only-hex-dump", no_argument, 0, OptOnlyHexDump }, | |
70 | 82 | { "skip-sha", no_argument, 0, OptSkipSHA }, |
71 | 83 | { "hide-serial-numbers", no_argument, 0, OptHideSerialNumbers }, |
72 | 84 | { "version", no_argument, 0, OptVersion }, |
77 | 89 | { "xmodeline", no_argument, 0, OptXModeLineTimings }, |
78 | 90 | { "fbmode", no_argument, 0, OptFBModeTimings }, |
79 | 91 | { "v4l2-timings", no_argument, 0, OptV4L2Timings }, |
92 | { "std", required_argument, 0, OptSTD }, | |
93 | { "dmt", required_argument, 0, OptDMT }, | |
94 | { "vic", required_argument, 0, OptVIC }, | |
95 | { "hdmi-vic", required_argument, 0, OptHDMIVIC }, | |
96 | { "cvt", required_argument, 0, OptCVT }, | |
97 | { "gtf", required_argument, 0, OptGTF }, | |
98 | { "list-established-timings", no_argument, 0, OptListEstTimings }, | |
99 | { "list-dmts", no_argument, 0, OptListDMTs }, | |
100 | { "list-vics", no_argument, 0, OptListVICs }, | |
101 | { "list-hdmi-vics", no_argument, 0, OptListHDMIVICs }, | |
80 | 102 | { 0, 0, 0, 0 } |
81 | 103 | }; |
82 | 104 | |
89 | 111 | " if the output filename is '-'.\n" |
90 | 112 | "\nOptions:\n" |
91 | 113 | " -o, --output-format <fmt>\n" |
92 | " if [out] is specified, then write the EDID in this format\n" | |
114 | " If [out] is specified, then write the EDID in this format\n" | |
93 | 115 | " <fmt> is one of:\n" |
94 | 116 | " hex: hex numbers in ascii text (default for stdout)\n" |
95 | 117 | " raw: binary data (default unless writing to stdout)\n" |
96 | 118 | " carray: c-program struct\n" |
97 | 119 | " xml: XML data\n" |
98 | " -c, --check check if the EDID conforms to the standards, failures and\n" | |
120 | " -c, --check Check if the EDID conforms to the standards, failures and\n" | |
99 | 121 | " warnings are reported at the end.\n" |
100 | " -C, --check-inline check if the EDID conforms to the standards, failures and\n" | |
122 | " -C, --check-inline Check if the EDID conforms to the standards, failures and\n" | |
101 | 123 | " warnings are reported inline.\n" |
102 | " -n, --native-timings report the native timings\n" | |
103 | " -p, --preferred-timings report the preferred timings\n" | |
104 | " -P, --physical-address only report the CEC physical address\n" | |
105 | " -S, --short-timings report all video timings in a short format\n" | |
106 | " -L, --long-timings report all video timings in a long format\n" | |
107 | " -X, --xmodeline report all long video timings in Xorg.conf format\n" | |
108 | " -F, --fbmode report all long video timings in fb.modes format\n" | |
109 | " -V, --v4l2-timings report all long video timings in v4l2-dv-timings.h format\n" | |
110 | " -s, --skip-hex-dump skip the initial hex dump of the EDID\n" | |
111 | " --skip-sha skip the SHA report\n" | |
112 | " --hide-serial-numbers replace serial numbers with '...'\n" | |
124 | " -n, --native-timings Report the native timings.\n" | |
125 | " -p, --preferred-timings Report the preferred timings.\n" | |
126 | " -P, --physical-address Only report the CEC physical address.\n" | |
127 | " -S, --short-timings Report all video timings in a short format.\n" | |
128 | " -L, --long-timings Report all video timings in a long format.\n" | |
129 | " -X, --xmodeline Report all long video timings in Xorg.conf format.\n" | |
130 | " -F, --fbmode Report all long video timings in fb.modes format.\n" | |
131 | " -V, --v4l2-timings Report all long video timings in v4l2-dv-timings.h format.\n" | |
132 | " -s, --skip-hex-dump Skip the initial hex dump of the EDID.\n" | |
133 | " -H, --only-hex-dump Only output the hex dump of the EDID.\n" | |
134 | " --skip-sha Skip the SHA report.\n" | |
135 | " --hide-serial-numbers Replace serial numbers with '...'\n" | |
113 | 136 | " --version show the edid-decode version (SHA)\n" |
114 | " -h, --help display this help message\n"); | |
137 | " --std <byte1>,<byte2> Show the standard timing represented by these two bytes.\n" | |
138 | " --dmt <dmt> Show the timings for the DMT with the given DMT ID.\n" | |
139 | " --vic <vic> Show the timings for this VIC.\n" | |
140 | " --hdmi-vic <hdmivic> Show the timings for this HDMI VIC.\n" | |
141 | " --cvt w=<width>,h=<height>,fps=<fps>[,rb=<rb>][,interlaced][,overscan][,alt][,hblank=<hblank][,add-vblank=<add-vblank>\n" | |
142 | " Calculate the CVT timings for the given format.\n" | |
143 | " <fps> is frames per second for progressive timings,\n" | |
144 | " or fields per second for interlaced timings.\n" | |
145 | " <rb> can be 0 (no reduced blanking, default), or\n" | |
146 | " 1-3 for the reduced blanking version.\n" | |
147 | " If 'interlaced' is given, then this is an interlaced format.\n" | |
148 | " If 'overscan' is given, then this is an overscanned format.\n" | |
149 | " If 'alt' is given and <rb>=2, then report the timings\n" | |
150 | " optimized for video: 1000 / 1001 * <fps>.\n" | |
151 | " If 'alt' is given and <rb>=3, then the horizontal blanking\n" | |
152 | " is 160 instead of 80 pixels.\n" | |
153 | " If 'hblank' is given and <rb>=3, then the horizontal blanking\n" | |
154 | " is <hblank> pixels (range of 80-200), overriding 'alt'.\n" | |
155 | " If 'add-vblank' is given and <rb>=3, then <add-vblank> usecs are\n" | |
156 | " added to the minimum vertical blank time of 460 usecs.\n" | |
157 | " --gtf w=<width>,h=<height>[,fps=<fps>][,horfreq=<horfreq>][,pixclk=<pixclk>][,interlaced]\n" | |
158 | " [,overscan][,secondary][,C=<c>][,M=<m>][,K=<k>][,J=<j>]\n" | |
159 | " Calculate the GTF timings for the given format.\n" | |
160 | " <fps> is frames per second for progressive timings,\n" | |
161 | " or fields per second for interlaced timings.\n" | |
162 | " <horfreq> is the horizontal frequency in kHz.\n" | |
163 | " <pixclk> is the pixel clock frequency in MHz.\n" | |
164 | " Only one of fps, horfreq or pixclk must be given.\n" | |
165 | " If 'interlaced' is given, then this is an interlaced format.\n" | |
166 | " If 'overscan' is given, then this is an overscanned format.\n" | |
167 | " If 'secondary' is given, then the secondary GTF is used for\n" | |
168 | " reduced blanking, where <c>, <m>, <k> and <j> are parameters\n" | |
169 | " for the secondary curve.\n" | |
170 | " --list-established-timings List all known Established Timings.\n" | |
171 | " --list-dmts List all known DMTs.\n" | |
172 | " --list-vics List all known VICs.\n" | |
173 | " --list-hdmi-vics List all known HDMI VICs.\n" | |
174 | " -h, --help Display this help message.\n"); | |
115 | 175 | } |
116 | 176 | |
117 | 177 | static std::string s_msgs[EDID_MAX_BLOCKS + 1][2]; |
200 | 260 | |
201 | 261 | std::string edid_state::dtd_type(unsigned cnt) |
202 | 262 | { |
203 | unsigned len = std::to_string(cta.preparse_total_dtds).length(); | |
263 | unsigned len = std::to_string(cta.preparsed_total_dtds).length(); | |
204 | 264 | char buf[16]; |
205 | 265 | sprintf(buf, "DTD %*u", len, cnt); |
206 | 266 | return buf; |
238 | 298 | num_flags++; |
239 | 299 | } |
240 | 300 | |
301 | /* | |
302 | * Return true if the timings are a close, but not identical, | |
303 | * match. The only differences allowed are polarities and | |
304 | * porches and syncs, provided the total blanking remains the | |
305 | * same. | |
306 | */ | |
307 | bool timings_close_match(const timings &t1, const timings &t2) | |
308 | { | |
309 | // We don't want to deal with borders, you're on your own | |
310 | // if you are using those. | |
311 | if (t1.hborder || t1.vborder || | |
312 | t2.hborder || t2.vborder) | |
313 | return false; | |
314 | if (t1.hact != t2.hact || t1.vact != t2.vact || | |
315 | t1.interlaced != t2.interlaced || | |
316 | t1.pixclk_khz != t2.pixclk_khz || | |
317 | t1.hfp + t1.hsync + t1.hbp != t2.hfp + t2.hsync + t2.hbp || | |
318 | t1.vfp + t1.vsync + t1.vbp != t2.vfp + t2.vsync + t2.vbp) | |
319 | return false; | |
320 | if (t1.hfp == t2.hfp && | |
321 | t1.hsync == t2.hsync && | |
322 | t1.hbp == t2.hbp && | |
323 | t1.pos_pol_hsync == t2.pos_pol_hsync && | |
324 | t1.vfp == t2.vfp && | |
325 | t1.vsync == t2.vsync && | |
326 | t1.vbp == t2.vbp && | |
327 | t1.pos_pol_vsync == t2.pos_pol_vsync) | |
328 | return false; | |
329 | return true; | |
330 | } | |
331 | ||
241 | 332 | static void print_modeline(unsigned indent, const struct timings *t, double refresh) |
242 | 333 | { |
243 | 334 | unsigned offset = (!t->even_vtotal && t->interlaced) ? 1 : 0; |
335 | unsigned hfp = t->hborder + t->hfp; | |
336 | unsigned hbp = t->hborder + t->hbp; | |
337 | unsigned vfp = t->vborder + t->vfp; | |
338 | unsigned vbp = t->vborder + t->vbp; | |
244 | 339 | |
245 | 340 | printf("%*sModeline \"%ux%u_%.2f%s\" %.3f %u %u %u %u %u %u %u %u %cHSync", |
246 | 341 | indent, "", |
247 | 342 | t->hact, t->vact, refresh, |
248 | 343 | t->interlaced ? "i" : "", t->pixclk_khz / 1000.0, |
249 | t->hact, t->hact + t->hfp, t->hact + t->hfp + t->hsync, | |
250 | t->hact + t->hfp + t->hsync + t->hbp, | |
251 | t->vact, t->vact + t->vfp, t->vact + t->vfp + t->vsync, | |
252 | t->vact + t->vfp + t->vsync + t->vbp + offset, | |
344 | t->hact, t->hact + hfp, t->hact + hfp + t->hsync, | |
345 | t->hact + hfp + t->hsync + hbp, | |
346 | t->vact, t->vact + vfp, t->vact + vfp + t->vsync, | |
347 | t->vact + vfp + t->vsync + vbp + offset, | |
253 | 348 | t->pos_pol_hsync ? '+' : '-'); |
254 | 349 | if (!t->no_pol_vsync) |
255 | 350 | printf(" %cVSync", t->pos_pol_vsync ? '+' : '-'); |
274 | 369 | t->hact, t->vact, t->hact, t->vact); |
275 | 370 | unsigned mult = t->interlaced ? 2 : 1; |
276 | 371 | unsigned offset = !t->even_vtotal && t->interlaced; |
372 | unsigned hfp = t->hborder + t->hfp; | |
373 | unsigned hbp = t->hborder + t->hbp; | |
374 | unsigned vfp = t->vborder + t->vfp; | |
375 | unsigned vbp = t->vborder + t->vbp; | |
277 | 376 | printf("%*stimings %llu %d %d %d %u %u %u\n", |
278 | 377 | indent + 8, "", |
279 | 378 | (unsigned long long)(1000000000.0 / (double)(t->pixclk_khz) + 0.5), |
280 | t->hbp, t->hfp, mult * t->vbp, mult * t->vfp + offset, t->hsync, mult * t->vsync); | |
379 | hbp, hfp, mult * vbp, mult * vfp + offset, t->hsync, mult * t->vsync); | |
281 | 380 | if (t->interlaced) |
282 | 381 | printf("%*slaced true\n", indent + 8, ""); |
283 | 382 | if (t->pos_pol_hsync) |
304 | 403 | printf("V4L2_DV_HSYNC_POS_POL, \\\n"); |
305 | 404 | else |
306 | 405 | printf("V4L2_DV_VSYNC_POS_POL, \\\n"); |
406 | unsigned hfp = t->hborder + t->hfp; | |
407 | unsigned hbp = t->hborder + t->hbp; | |
408 | unsigned vfp = t->vborder + t->vfp; | |
409 | unsigned vbp = t->vborder + t->vbp; | |
307 | 410 | printf("\t\t\t%lluULL, %d, %u, %d, %u, %u, %d, %u, %u, %d, \\\n", |
308 | t->pixclk_khz * 1000ULL, t->hfp, t->hsync, t->hbp, | |
309 | t->vfp, t->vsync, t->vbp, | |
310 | t->interlaced ? t->vfp : 0, | |
411 | t->pixclk_khz * 1000ULL, hfp, t->hsync, hbp, | |
412 | vfp, t->vsync, vbp, | |
413 | t->interlaced ? vfp : 0, | |
311 | 414 | t->interlaced ? t->vsync : 0, |
312 | t->interlaced ? t->vbp + !t->even_vtotal : 0); | |
415 | t->interlaced ? vbp + !t->even_vtotal : 0); | |
313 | 416 | |
314 | 417 | std::string flags; |
315 | 418 | unsigned num_flags = 0; |
386 | 489 | |
387 | 490 | bool edid_state::print_timings(const char *prefix, const struct timings *t, |
388 | 491 | const char *type, const char *flags, |
389 | bool detailed) | |
492 | bool detailed, bool do_checks) | |
390 | 493 | { |
391 | 494 | if (!t) { |
392 | 495 | // Should not happen |
393 | fail("Unknown video timings.\n"); | |
496 | if (do_checks) | |
497 | fail("Unknown video timings.\n"); | |
394 | 498 | return false; |
395 | 499 | } |
396 | 500 | |
400 | 504 | detailed = true; |
401 | 505 | |
402 | 506 | unsigned vact = t->vact; |
403 | unsigned hbl = t->hfp + t->hsync + t->hbp; | |
404 | unsigned vbl = t->vfp + t->vsync + t->vbp; | |
507 | unsigned hbl = t->hfp + t->hsync + t->hbp + 2 * t->hborder; | |
508 | unsigned vbl = t->vfp + t->vsync + t->vbp + 2 * t->vborder; | |
405 | 509 | unsigned htotal = t->hact + hbl; |
406 | 510 | double hor_freq_khz = htotal ? (double)t->pixclk_khz / htotal : 0; |
407 | 511 | |
417 | 521 | |
418 | 522 | if (!t->hact || !hbl || !t->hfp || !t->hsync || |
419 | 523 | !vact || !vbl || (!t->vfp && !t->interlaced && !t->even_vtotal) || !t->vsync) { |
420 | fail("0 values in the video timing:\n" | |
421 | " Horizontal Active/Blanking %u/%u\n" | |
422 | " Horizontal Frontporch/Sync Width %u/%u\n" | |
423 | " Vertical Active/Blanking %u/%u\n" | |
424 | " Vertical Frontporch/Sync Width %u/%u\n", | |
425 | t->hact, hbl, t->hfp, t->hsync, vact, vbl, t->vfp, t->vsync); | |
524 | if (do_checks) | |
525 | fail("0 values in the video timing:\n" | |
526 | " Horizontal Active/Blanking %u/%u\n" | |
527 | " Horizontal Frontporch/Sync Width %u/%u\n" | |
528 | " Vertical Active/Blanking %u/%u\n" | |
529 | " Vertical Frontporch/Sync Width %u/%u\n", | |
530 | t->hact, hbl, t->hfp, t->hsync, vact, vbl, t->vfp, t->vsync); | |
426 | 531 | ok = false; |
427 | 532 | } |
428 | 533 | |
434 | 539 | double refresh = (double)t->pixclk_khz * 1000.0 / (htotal * vtotal); |
435 | 540 | |
436 | 541 | std::string s; |
437 | if (t->rb) { | |
542 | unsigned rb = t->rb & ~RB_ALT; | |
543 | if (rb) { | |
544 | bool alt = t->rb & RB_ALT; | |
438 | 545 | s = "RB"; |
439 | if (t->rb == 2) | |
440 | s += "v2"; | |
441 | else if (t->rb == 3) | |
442 | s += "v3"; | |
546 | if (rb == RB_CVT_V2) | |
547 | s += std::string("v2") + (alt ? ",video-optimized" : ""); | |
548 | else if (rb == RB_CVT_V3) | |
549 | s += std::string("v3") + (alt ? ",h-blank-160" : ""); | |
443 | 550 | } |
444 | 551 | add_str(s, flags); |
445 | 552 | if (t->hsize_mm || t->vsize_mm) |
446 | 553 | add_str(s, std::to_string(t->hsize_mm) + " mm x " + std::to_string(t->vsize_mm) + " mm"); |
554 | if (t->hsize_mm > dtd_max_hsize_mm) | |
555 | dtd_max_hsize_mm = t->hsize_mm; | |
556 | if (t->vsize_mm > dtd_max_vsize_mm) | |
557 | dtd_max_vsize_mm = t->vsize_mm; | |
447 | 558 | if (!s.empty()) |
448 | 559 | s = " (" + s + ")"; |
449 | 560 | unsigned pixclk_khz = t->pixclk_khz / (t->ycbcr420 ? 2 : 1); |
451 | 562 | char buf[10]; |
452 | 563 | |
453 | 564 | sprintf(buf, "%u%s", t->vact, t->interlaced ? "i" : ""); |
454 | printf("%s%s: %5ux%-5s %7.3f Hz %3u:%-3u %7.3f kHz %7.3f MHz%s\n", | |
565 | printf("%s%s: %5ux%-5s %7.3f Hz %3u:%-3u %7.3f kHz %8.3f MHz%s\n", | |
455 | 566 | prefix, type, |
456 | 567 | t->hact, buf, |
457 | 568 | refresh, |
471 | 582 | else if (detailed) |
472 | 583 | print_detailed_timing(len + strlen(type) + 6, t); |
473 | 584 | |
585 | if (!do_checks) | |
586 | return ok; | |
587 | ||
588 | if (!memcmp(type, "DTD", 3)) { | |
589 | unsigned vic, dmt; | |
590 | const timings *vic_t = cta_close_match_to_vic(*t, vic); | |
591 | ||
592 | if (vic_t) | |
593 | warn("DTD is similar but not identical to VIC %u.\n", vic); | |
594 | ||
595 | const timings *dmt_t = close_match_to_dmt(*t, dmt); | |
596 | if (!vic_t && dmt_t) | |
597 | warn("DTD is similar but not identical to DMT 0x%02x.\n", dmt); | |
598 | } | |
599 | ||
600 | if (refresh) { | |
601 | min_vert_freq_hz = min(min_vert_freq_hz, refresh); | |
602 | max_vert_freq_hz = max(max_vert_freq_hz, refresh); | |
603 | } | |
604 | if (hor_freq_khz) { | |
605 | min_hor_freq_hz = min(min_hor_freq_hz, hor_freq_khz * 1000.0); | |
606 | max_hor_freq_hz = max(max_hor_freq_hz, hor_freq_khz * 1000.0); | |
607 | max_pixclk_khz = max(max_pixclk_khz, pixclk_khz); | |
608 | if (t->pos_pol_hsync && !t->pos_pol_vsync && t->vsync == 3) | |
609 | base.max_pos_neg_hor_freq_khz = hor_freq_khz; | |
610 | } | |
611 | ||
474 | 612 | if (t->ycbcr420 && t->pixclk_khz < 590000) |
475 | 613 | warn_once("Some YCbCr 4:2:0 timings are invalid for HDMI (which requires an RGB timings pixel rate >= 590 MHz).\n"); |
476 | 614 | if (t->hfp <= 0) |
479 | 617 | fail("0 or negative horizontal back porch.\n"); |
480 | 618 | if (t->vbp <= 0) |
481 | 619 | fail("0 or negative vertical back porch.\n"); |
482 | if ((!base.max_display_width_mm && t->hsize_mm) || | |
483 | (!base.max_display_height_mm && t->vsize_mm)) { | |
484 | fail("Mismatch of image size vs display size: image size is set, but not display size.\n"); | |
620 | if (!base.max_display_width_mm && !base.max_display_height_mm) { | |
621 | /* this is valid */ | |
485 | 622 | } else if (!t->hsize_mm && !t->vsize_mm) { |
486 | 623 | /* this is valid */ |
487 | 624 | } else if (t->hsize_mm > base.max_display_width_mm + 9 || |
493 | 630 | fail("Mismatch of image size %ux%u mm vs display size %ux%u mm.\n", |
494 | 631 | t->hsize_mm, t->vsize_mm, base.max_display_width_mm, base.max_display_height_mm); |
495 | 632 | } |
496 | if (refresh) { | |
497 | min_vert_freq_hz = min(min_vert_freq_hz, refresh); | |
498 | max_vert_freq_hz = max(max_vert_freq_hz, refresh); | |
499 | } | |
500 | if (pixclk_khz && (t->hact + hbl)) { | |
501 | min_hor_freq_hz = min(min_hor_freq_hz, (pixclk_khz * 1000) / (t->hact + hbl)); | |
502 | max_hor_freq_hz = max(max_hor_freq_hz, (pixclk_khz * 1000) / (t->hact + hbl)); | |
503 | max_pixclk_khz = max(max_pixclk_khz, pixclk_khz); | |
504 | } | |
505 | 633 | return ok; |
634 | } | |
635 | ||
636 | std::string containerid2s(const unsigned char *x) | |
637 | { | |
638 | char buf[40]; | |
639 | ||
640 | sprintf(buf, "%02x%02x%02x%02x-%02x%02x-%02x%02x-%02x%02x-%02x%02x%02x%02x%02x%02x", | |
641 | x[0], x[1], x[2], x[3], | |
642 | x[4], x[5], | |
643 | x[6], x[7], | |
644 | x[8], x[9], | |
645 | x[10], x[11], x[12], x[13], x[14], x[15]); | |
646 | return buf; | |
506 | 647 | } |
507 | 648 | |
508 | 649 | std::string utohex(unsigned char x) |
733 | 874 | edid_data.insert(edid_data.end(), buf, buf + i); |
734 | 875 | } |
735 | 876 | |
736 | if (edid_data.empty()) | |
877 | if (edid_data.empty()) { | |
878 | state.edid_size = 0; | |
737 | 879 | return false; |
880 | } | |
738 | 881 | |
739 | 882 | const char *data = &edid_data[0]; |
740 | 883 | const char *start; |
926 | 1069 | |
927 | 1070 | odd_hex_digits = false; |
928 | 1071 | if (!extract_edid(fd, error)) { |
1072 | if (!state.edid_size) { | |
1073 | fprintf(error, "EDID of '%s' was empty.\n", from_file); | |
1074 | return -1; | |
1075 | } | |
929 | 1076 | fprintf(error, "EDID extract of '%s' failed: ", from_file); |
930 | 1077 | if (odd_hex_digits) |
931 | 1078 | fprintf(error, "odd number of hexadecimal digits.\n"); |
1092 | 1239 | printf("edid-decode (hex):\n\n"); |
1093 | 1240 | for (unsigned i = 0; i < num_blocks; i++) { |
1094 | 1241 | hex_block("", edid + i * EDID_PAGE_SIZE, EDID_PAGE_SIZE, false); |
1242 | if (i == num_blocks - 1 && options[OptOnlyHexDump]) | |
1243 | return 0; | |
1095 | 1244 | printf("\n"); |
1096 | 1245 | } |
1097 | 1246 | printf("----------------\n\n"); |
1116 | 1265 | if (options[OptPreferredTimings] && base.preferred_timing.is_valid()) { |
1117 | 1266 | printf("\n----------------\n"); |
1118 | 1267 | printf("\nPreferred Video Timing if only Block 0 is parsed:\n"); |
1119 | print_timings(" ", base.preferred_timing, true); | |
1268 | print_timings(" ", base.preferred_timing, true, false); | |
1120 | 1269 | } |
1121 | 1270 | |
1122 | 1271 | if (options[OptNativeTimings] && |
1123 | 1272 | base.preferred_timing.is_valid() && base.preferred_is_also_native) { |
1124 | 1273 | printf("\n----------------\n"); |
1125 | 1274 | printf("\nNative Video Timing if only Block 0 is parsed:\n"); |
1126 | print_timings(" ", base.preferred_timing, true); | |
1275 | print_timings(" ", base.preferred_timing, true, false); | |
1127 | 1276 | } |
1128 | 1277 | |
1129 | 1278 | if (options[OptPreferredTimings] && !cta.preferred_timings.empty()) { |
1132 | 1281 | cta.preferred_timings.size() > 1 ? "s" : ""); |
1133 | 1282 | for (vec_timings_ext::iterator iter = cta.preferred_timings.begin(); |
1134 | 1283 | iter != cta.preferred_timings.end(); ++iter) |
1135 | print_timings(" ", *iter, true); | |
1284 | print_timings(" ", *iter, true, false); | |
1136 | 1285 | } |
1137 | 1286 | |
1138 | 1287 | if (options[OptNativeTimings] && !cta.native_timings.empty()) { |
1141 | 1290 | cta.native_timings.size() > 1 ? "s" : ""); |
1142 | 1291 | for (vec_timings_ext::iterator iter = cta.native_timings.begin(); |
1143 | 1292 | iter != cta.native_timings.end(); ++iter) |
1144 | print_timings(" ", *iter, true); | |
1293 | print_timings(" ", *iter, true, false); | |
1145 | 1294 | } |
1146 | 1295 | |
1147 | 1296 | if (options[OptPreferredTimings] && !dispid.preferred_timings.empty()) { |
1150 | 1299 | dispid.preferred_timings.size() > 1 ? "s" : ""); |
1151 | 1300 | for (vec_timings_ext::iterator iter = dispid.preferred_timings.begin(); |
1152 | 1301 | iter != dispid.preferred_timings.end(); ++iter) |
1153 | print_timings(" ", *iter, true); | |
1302 | print_timings(" ", *iter, true, false); | |
1154 | 1303 | } |
1155 | 1304 | |
1156 | 1305 | if (!options[OptCheck] && !options[OptCheckInline]) |
1178 | 1327 | return failures ? -2 : 0; |
1179 | 1328 | } |
1180 | 1329 | |
1330 | enum cvt_opts { | |
1331 | CVT_WIDTH = 0, | |
1332 | CVT_HEIGHT, | |
1333 | CVT_FPS, | |
1334 | CVT_INTERLACED, | |
1335 | CVT_OVERSCAN, | |
1336 | CVT_RB, | |
1337 | CVT_ALT, | |
1338 | CVT_RB_H_BLANK, | |
1339 | CVT_RB_ADD_V_BLANK, | |
1340 | }; | |
1341 | ||
1342 | static int parse_cvt_subopt(char **subopt_str, double *value) | |
1343 | { | |
1344 | int opt; | |
1345 | char *opt_str; | |
1346 | ||
1347 | static const char * const subopt_list[] = { | |
1348 | "w", | |
1349 | "h", | |
1350 | "fps", | |
1351 | "interlaced", | |
1352 | "overscan", | |
1353 | "rb", | |
1354 | "alt", | |
1355 | "hblank", | |
1356 | "add-vblank", | |
1357 | nullptr | |
1358 | }; | |
1359 | ||
1360 | opt = getsubopt(subopt_str, (char* const*) subopt_list, &opt_str); | |
1361 | ||
1362 | if (opt == -1) { | |
1363 | fprintf(stderr, "Invalid suboptions specified.\n"); | |
1364 | usage(); | |
1365 | std::exit(EXIT_FAILURE); | |
1366 | } | |
1367 | if (opt_str == nullptr && opt != CVT_INTERLACED && opt != CVT_ALT && | |
1368 | opt != CVT_OVERSCAN) { | |
1369 | fprintf(stderr, "No value given to suboption <%s>.\n", | |
1370 | subopt_list[opt]); | |
1371 | usage(); | |
1372 | std::exit(EXIT_FAILURE); | |
1373 | } | |
1374 | ||
1375 | if (opt_str) | |
1376 | *value = strtod(opt_str, nullptr); | |
1377 | return opt; | |
1378 | } | |
1379 | ||
1380 | static void parse_cvt(char *optarg) | |
1381 | { | |
1382 | unsigned w = 0, h = 0; | |
1383 | double fps = 0; | |
1384 | unsigned rb = RB_NONE; | |
1385 | unsigned rb_h_blank = 0; | |
1386 | unsigned rb_add_v_blank = 0; | |
1387 | bool interlaced = false; | |
1388 | bool alt = false; | |
1389 | bool overscan = false; | |
1390 | ||
1391 | while (*optarg != '\0') { | |
1392 | int opt; | |
1393 | double opt_val; | |
1394 | ||
1395 | opt = parse_cvt_subopt(&optarg, &opt_val); | |
1396 | ||
1397 | switch (opt) { | |
1398 | case CVT_WIDTH: | |
1399 | w = round(opt_val); | |
1400 | break; | |
1401 | case CVT_HEIGHT: | |
1402 | h = round(opt_val); | |
1403 | break; | |
1404 | case CVT_FPS: | |
1405 | fps = opt_val; | |
1406 | break; | |
1407 | case CVT_RB: | |
1408 | rb = opt_val; | |
1409 | break; | |
1410 | case CVT_OVERSCAN: | |
1411 | overscan = true; | |
1412 | break; | |
1413 | case CVT_INTERLACED: | |
1414 | interlaced = opt_val; | |
1415 | break; | |
1416 | case CVT_ALT: | |
1417 | alt = opt_val; | |
1418 | break; | |
1419 | case CVT_RB_H_BLANK: | |
1420 | rb_h_blank = opt_val; | |
1421 | break; | |
1422 | case CVT_RB_ADD_V_BLANK: | |
1423 | rb_add_v_blank = opt_val; | |
1424 | break; | |
1425 | default: | |
1426 | break; | |
1427 | } | |
1428 | } | |
1429 | ||
1430 | if (!w || !h || !fps) { | |
1431 | fprintf(stderr, "Missing width, height and/or fps.\n"); | |
1432 | usage(); | |
1433 | std::exit(EXIT_FAILURE); | |
1434 | } | |
1435 | if (interlaced) | |
1436 | fps /= 2; | |
1437 | timings t = state.calc_cvt_mode(w, h, fps, rb, interlaced, overscan, alt, | |
1438 | rb_h_blank, rb_add_v_blank); | |
1439 | state.print_timings("", &t, "CVT", "", true, false); | |
1440 | } | |
1441 | ||
1442 | struct gtf_parsed_data { | |
1443 | unsigned w, h; | |
1444 | double freq; | |
1445 | double C, M, K, J; | |
1446 | bool overscan; | |
1447 | bool interlaced; | |
1448 | bool secondary; | |
1449 | bool params_from_edid; | |
1450 | enum gtf_ip_parm ip_parm; | |
1451 | }; | |
1452 | ||
1453 | enum gtf_opts { | |
1454 | GTF_WIDTH = 0, | |
1455 | GTF_HEIGHT, | |
1456 | GTF_FPS, | |
1457 | GTF_HORFREQ, | |
1458 | GTF_PIXCLK, | |
1459 | GTF_INTERLACED, | |
1460 | GTF_OVERSCAN, | |
1461 | GTF_SECONDARY, | |
1462 | GTF_C2, | |
1463 | GTF_M, | |
1464 | GTF_K, | |
1465 | GTF_J2, | |
1466 | }; | |
1467 | ||
1468 | static int parse_gtf_subopt(char **subopt_str, double *value) | |
1469 | { | |
1470 | int opt; | |
1471 | char *opt_str; | |
1472 | ||
1473 | static const char * const subopt_list[] = { | |
1474 | "w", | |
1475 | "h", | |
1476 | "fps", | |
1477 | "horfreq", | |
1478 | "pixclk", | |
1479 | "interlaced", | |
1480 | "overscan", | |
1481 | "secondary", | |
1482 | "C", | |
1483 | "M", | |
1484 | "K", | |
1485 | "J", | |
1486 | nullptr | |
1487 | }; | |
1488 | ||
1489 | opt = getsubopt(subopt_str, (char * const *)subopt_list, &opt_str); | |
1490 | ||
1491 | if (opt == -1) { | |
1492 | fprintf(stderr, "Invalid suboptions specified.\n"); | |
1493 | usage(); | |
1494 | std::exit(EXIT_FAILURE); | |
1495 | } | |
1496 | if (opt_str == nullptr && opt != GTF_INTERLACED && opt != GTF_OVERSCAN && | |
1497 | opt != GTF_SECONDARY) { | |
1498 | fprintf(stderr, "No value given to suboption <%s>.\n", | |
1499 | subopt_list[opt]); | |
1500 | usage(); | |
1501 | std::exit(EXIT_FAILURE); | |
1502 | } | |
1503 | ||
1504 | if (opt == GTF_C2 || opt == GTF_J2) | |
1505 | *value = round(2.0 * strtod(opt_str, nullptr)); | |
1506 | else if (opt_str) | |
1507 | *value = strtod(opt_str, nullptr); | |
1508 | return opt; | |
1509 | } | |
1510 | ||
1511 | static void parse_gtf(char *optarg, gtf_parsed_data &data) | |
1512 | { | |
1513 | memset(&data, 0, sizeof(data)); | |
1514 | data.params_from_edid = true; | |
1515 | data.C = 40; | |
1516 | data.M = 600; | |
1517 | data.K = 128; | |
1518 | data.J = 20; | |
1519 | ||
1520 | while (*optarg != '\0') { | |
1521 | int opt; | |
1522 | double opt_val; | |
1523 | ||
1524 | opt = parse_gtf_subopt(&optarg, &opt_val); | |
1525 | ||
1526 | switch (opt) { | |
1527 | case GTF_WIDTH: | |
1528 | data.w = round(opt_val); | |
1529 | break; | |
1530 | case GTF_HEIGHT: | |
1531 | data.h = round(opt_val); | |
1532 | break; | |
1533 | case GTF_FPS: | |
1534 | data.freq = opt_val; | |
1535 | data.ip_parm = gtf_ip_vert_freq; | |
1536 | break; | |
1537 | case GTF_HORFREQ: | |
1538 | data.freq = opt_val; | |
1539 | data.ip_parm = gtf_ip_hor_freq; | |
1540 | break; | |
1541 | case GTF_PIXCLK: | |
1542 | data.freq = opt_val; | |
1543 | data.ip_parm = gtf_ip_clk_freq; | |
1544 | break; | |
1545 | case GTF_INTERLACED: | |
1546 | data.interlaced = true; | |
1547 | break; | |
1548 | case GTF_OVERSCAN: | |
1549 | data.overscan = true; | |
1550 | break; | |
1551 | case GTF_SECONDARY: | |
1552 | data.secondary = true; | |
1553 | break; | |
1554 | case GTF_C2: | |
1555 | data.C = opt_val / 2.0; | |
1556 | data.params_from_edid = false; | |
1557 | break; | |
1558 | case GTF_M: | |
1559 | data.M = round(opt_val); | |
1560 | data.params_from_edid = false; | |
1561 | break; | |
1562 | case GTF_K: | |
1563 | data.K = round(opt_val); | |
1564 | data.params_from_edid = false; | |
1565 | break; | |
1566 | case GTF_J2: | |
1567 | data.J = opt_val / 2.0; | |
1568 | data.params_from_edid = false; | |
1569 | break; | |
1570 | default: | |
1571 | break; | |
1572 | } | |
1573 | } | |
1574 | ||
1575 | if (!data.w || !data.h) { | |
1576 | fprintf(stderr, "Missing width and/or height.\n"); | |
1577 | usage(); | |
1578 | std::exit(EXIT_FAILURE); | |
1579 | } | |
1580 | if (!data.freq) { | |
1581 | fprintf(stderr, "One of fps, horfreq or pixclk must be given.\n"); | |
1582 | usage(); | |
1583 | std::exit(EXIT_FAILURE); | |
1584 | } | |
1585 | if (!data.secondary) | |
1586 | data.params_from_edid = false; | |
1587 | if (data.interlaced && data.ip_parm == gtf_ip_vert_freq) | |
1588 | data.freq /= 2; | |
1589 | } | |
1590 | ||
1591 | static void show_gtf(gtf_parsed_data &data) | |
1592 | { | |
1593 | timings t; | |
1594 | ||
1595 | t = state.calc_gtf_mode(data.w, data.h, data.freq, data.interlaced, | |
1596 | data.ip_parm, data.overscan, data.secondary, | |
1597 | data.C, data.M, data.K, data.J); | |
1598 | calc_ratio(&t); | |
1599 | state.print_timings("", &t, "GTF", "", true, false); | |
1600 | } | |
1601 | ||
1181 | 1602 | int main(int argc, char **argv) |
1182 | 1603 | { |
1183 | 1604 | char short_options[26 * 2 * 2 + 1]; |
1184 | 1605 | enum output_format out_fmt = OUT_FMT_DEFAULT; |
1606 | gtf_parsed_data gtf_data; | |
1185 | 1607 | int ret; |
1186 | 1608 | |
1187 | 1609 | while (1) { |
1188 | 1610 | int option_index = 0; |
1189 | 1611 | unsigned idx = 0; |
1190 | unsigned i; | |
1612 | unsigned i, val; | |
1613 | const timings *t; | |
1614 | char buf[16]; | |
1191 | 1615 | |
1192 | 1616 | for (i = 0; long_options[i].name; i++) { |
1193 | 1617 | if (!isalpha(long_options[i].val)) |
1221 | 1645 | exit(1); |
1222 | 1646 | } |
1223 | 1647 | break; |
1648 | case OptSTD: { | |
1649 | unsigned char byte1, byte2 = 0; | |
1650 | char *endptr; | |
1651 | ||
1652 | byte1 = strtoul(optarg, &endptr, 0); | |
1653 | if (*endptr == ',') | |
1654 | byte2 = strtoul(endptr + 1, NULL, 0); | |
1655 | state.print_standard_timing("", byte1, byte2, false, true); | |
1656 | break; | |
1657 | } | |
1658 | case OptDMT: | |
1659 | val = strtoul(optarg, NULL, 0); | |
1660 | t = find_dmt_id(val); | |
1661 | if (t) { | |
1662 | sprintf(buf, "DMT 0x%02x", val); | |
1663 | state.print_timings("", t, buf, "", true, false); | |
1664 | } else { | |
1665 | fprintf(stderr, "Unknown DMT code 0x%02x.\n", val); | |
1666 | } | |
1667 | break; | |
1668 | case OptVIC: | |
1669 | val = strtoul(optarg, NULL, 0); | |
1670 | t = find_vic_id(val); | |
1671 | if (t) { | |
1672 | sprintf(buf, "VIC %3u", val); | |
1673 | state.print_timings("", t, buf, "", true, false); | |
1674 | } else { | |
1675 | fprintf(stderr, "Unknown VIC code %u.\n", val); | |
1676 | } | |
1677 | break; | |
1678 | case OptHDMIVIC: | |
1679 | val = strtoul(optarg, NULL, 0); | |
1680 | t = find_hdmi_vic_id(val); | |
1681 | if (t) { | |
1682 | sprintf(buf, "HDMI VIC %u", val); | |
1683 | state.print_timings("", t, buf, "", true, false); | |
1684 | } else { | |
1685 | fprintf(stderr, "Unknown HDMI VIC code %u.\n", val); | |
1686 | } | |
1687 | break; | |
1688 | case OptCVT: | |
1689 | parse_cvt(optarg); | |
1690 | break; | |
1691 | case OptGTF: | |
1692 | parse_gtf(optarg, gtf_data); | |
1693 | break; | |
1224 | 1694 | case ':': |
1225 | 1695 | fprintf(stderr, "Option '%s' requires a value.\n", |
1226 | 1696 | argv[optind]); |
1241 | 1711 | return 0; |
1242 | 1712 | } |
1243 | 1713 | |
1714 | if (options[OptListEstTimings]) | |
1715 | state.list_established_timings(); | |
1716 | if (options[OptListDMTs]) | |
1717 | state.list_dmts(); | |
1718 | if (options[OptListVICs]) | |
1719 | state.cta_list_vics(); | |
1720 | if (options[OptListHDMIVICs]) | |
1721 | state.cta_list_hdmi_vics(); | |
1722 | ||
1723 | if (options[OptListEstTimings] || options[OptListDMTs] || | |
1724 | options[OptListVICs] || options[OptListHDMIVICs]) | |
1725 | return 0; | |
1726 | ||
1727 | if (options[OptCVT] || options[OptDMT] || options[OptVIC] || | |
1728 | options[OptHDMIVIC] || options[OptSTD]) | |
1729 | return 0; | |
1730 | ||
1731 | if (options[OptGTF] && (!gtf_data.params_from_edid || optind == argc)) { | |
1732 | show_gtf(gtf_data); | |
1733 | return 0; | |
1734 | } | |
1735 | ||
1244 | 1736 | if (optind == argc) |
1245 | 1737 | ret = edid_from_file("-", stdout); |
1246 | 1738 | else |
1252 | 1744 | } |
1253 | 1745 | if (optind < argc - 1) |
1254 | 1746 | return ret ? ret : edid_to_file(argv[optind + 1], out_fmt); |
1747 | ||
1748 | if (options[OptGTF]) { | |
1749 | timings t; | |
1750 | ||
1751 | // Find the Secondary Curve | |
1752 | state.preparse_detailed_block(edid + 0x36); | |
1753 | state.preparse_detailed_block(edid + 0x48); | |
1754 | state.preparse_detailed_block(edid + 0x5a); | |
1755 | state.preparse_detailed_block(edid + 0x6c); | |
1756 | ||
1757 | t = state.calc_gtf_mode(gtf_data.w, gtf_data.h, gtf_data.freq, | |
1758 | gtf_data.interlaced, gtf_data.ip_parm, | |
1759 | gtf_data.overscan); | |
1760 | unsigned hbl = t.hfp + t.hsync + t.hbp; | |
1761 | unsigned htotal = t.hact + hbl; | |
1762 | double hor_freq_khz = htotal ? (double)t.pixclk_khz / htotal : 0; | |
1763 | ||
1764 | if (state.base.supports_sec_gtf && | |
1765 | hor_freq_khz >= state.base.sec_gtf_start_freq) { | |
1766 | t = state.calc_gtf_mode(gtf_data.w, gtf_data.h, gtf_data.freq, | |
1767 | gtf_data.interlaced, gtf_data.ip_parm, | |
1768 | gtf_data.overscan, true, | |
1769 | state.base.C, state.base.M, | |
1770 | state.base.K, state.base.J); | |
1771 | } | |
1772 | calc_ratio(&t); | |
1773 | if (t.hfp <= 0) | |
1774 | state.print_timings("", &t, "GTF", "INVALID: Hfront <= 0", true, false); | |
1775 | else | |
1776 | state.print_timings("", &t, "GTF", "", true, false); | |
1777 | return 0; | |
1778 | } | |
1255 | 1779 | |
1256 | 1780 | return ret ? ret : state.parse_edid(); |
1257 | 1781 | } |
11 | 11 | |
12 | 12 | #include <string> |
13 | 13 | #include <vector> |
14 | #include <set> | |
14 | 15 | #include <string.h> |
15 | 16 | |
16 | 17 | #define ARRAY_SIZE(x) (sizeof(x) / sizeof(*(x))) |
20 | 21 | #define EDID_PAGE_SIZE 128U |
21 | 22 | #define EDID_MAX_BLOCKS 256U |
22 | 23 | |
23 | #define RB_FLAG (1U << 7) | |
24 | #define RB_ALT (1U << 7) | |
25 | ||
26 | #define RB_NONE (0U) | |
27 | #define RB_CVT_V1 (1U) | |
28 | #define RB_CVT_V2 (2U) | |
29 | #define RB_CVT_V3 (3U) | |
30 | #define RB_GTF (4U) | |
24 | 31 | |
25 | 32 | // Video Timings |
26 | 33 | // If interlaced is true, then the vertical blanking |
27 | 34 | // for each field is (vfp + vsync + vbp + 0.5), except for |
28 | 35 | // the VIC 39 timings that doesn't have the 0.5 constant. |
36 | // | |
37 | // The sequence of the various video parameters is as follows: | |
38 | // | |
39 | // border - front porch - sync - back porch - border - active video | |
40 | // | |
41 | // Note: this is slightly different from EDID 1.4 which calls | |
42 | // 'active video' as 'addressable video' and the EDID 1.4 term | |
43 | // 'active video' includes the borders. | |
44 | // | |
45 | // But since borders are rarely used, the term 'active video' will | |
46 | // typically be the same as 'addressable video', and that's how I | |
47 | // use it. | |
29 | 48 | struct timings { |
30 | // Active horizontal and vertical frame height, including any | |
49 | // Active horizontal and vertical frame height, excluding any | |
31 | 50 | // borders, if present. |
32 | 51 | // Note: for interlaced formats the active field height is vact / 2 |
33 | 52 | unsigned hact, vact; |
34 | 53 | unsigned hratio, vratio; |
35 | 54 | unsigned pixclk_khz; |
36 | 55 | // 0: no reduced blanking |
37 | // 1: reduced blanking version 1 | |
38 | // 2: reduced blanking version 2 | |
39 | // 3: reduced blanking version 3 with a horizontal blank of 80 | |
40 | // 3 | RB_FLAG: reduced blanking version 3 with a horizontal blank of 160 | |
56 | // 1: CVT reduced blanking version 1 | |
57 | // 2: CVT reduced blanking version 2 | |
58 | // 2 | RB_ALT: CVT reduced blanking version 2 video-optimized (1000/1001 fps) | |
59 | // 3: CVT reduced blanking version 3 | |
60 | // 3 | RB_ALT: v3 with a horizontal blank of 160 | |
61 | // 4: GTF Secondary Curve | |
41 | 62 | unsigned rb; |
42 | 63 | bool interlaced; |
43 | 64 | // The horizontal frontporch may be negative in GTF calculations, |
88 | 109 | std::string flags; |
89 | 110 | }; |
90 | 111 | |
112 | enum gtf_ip_parm { | |
113 | gtf_ip_vert_freq = 1, | |
114 | gtf_ip_hor_freq, | |
115 | gtf_ip_clk_freq, | |
116 | }; | |
117 | ||
91 | 118 | typedef std::vector<timings_ext> vec_timings_ext; |
92 | 119 | |
93 | 120 | struct edid_state { |
98 | 125 | max_hor_freq_hz = max_vert_freq_hz = max_pixclk_khz = 0; |
99 | 126 | min_hor_freq_hz = 0xffffff; |
100 | 127 | min_vert_freq_hz = 0xffffffff; |
128 | dtd_max_vsize_mm = dtd_max_hsize_mm = 0; | |
101 | 129 | warnings = failures = 0; |
102 | 130 | has_cta = has_dispid = false; |
103 | 131 | hide_serial_numbers = false; |
107 | 135 | base.has_name_descriptor = base.has_display_range_descriptor = |
108 | 136 | base.has_serial_number = base.has_serial_string = |
109 | 137 | base.supports_continuous_freq = base.supports_gtf = |
110 | base.supports_cvt = base.uses_gtf = base.uses_cvt = | |
138 | base.supports_cvt = base.seen_non_detailed_descriptor = | |
111 | 139 | base.has_640x480p60_est_timing = base.has_spwg = |
112 | base.seen_non_detailed_descriptor = | |
113 | 140 | base.preferred_is_also_native = false; |
141 | base.supports_sec_gtf = false; | |
142 | base.sec_gtf_start_freq = 0; | |
143 | base.C = base.M = base.K = base.J = 0; | |
144 | base.max_pos_neg_hor_freq_khz = 0; | |
114 | 145 | base.detailed_block_cnt = base.dtd_cnt = 0; |
115 | 146 | |
116 | 147 | base.min_display_hor_freq_hz = base.max_display_hor_freq_hz = |
119 | 150 | base.max_display_height_mm = 0; |
120 | 151 | |
121 | 152 | // CTA-861 block state |
122 | cta.has_vic_1 = cta.first_svd_might_be_preferred = | |
153 | cta.has_vic_1 = cta.first_svd_might_be_preferred = cta.has_sldb = | |
123 | 154 | cta.has_hdmi = cta.has_vcdb = cta.has_vfpdb = false; |
124 | 155 | cta.last_block_was_hdmi_vsdb = cta.have_hf_vsdb = cta.have_hf_scdb = false; |
125 | 156 | cta.first_block = cta.first_svd = true; |
127 | 158 | memset(cta.vics, 0, sizeof(cta.vics)); |
128 | 159 | memset(cta.preparsed_has_vic, 0, sizeof(cta.preparsed_has_vic)); |
129 | 160 | cta.preparsed_phys_addr = 0xffff; |
130 | cta.preparse_total_dtds = 0; | |
131 | cta.preparse_total_vtdbs = 0; | |
132 | cta.preparse_has_t8vtdb = false; | |
161 | cta.preparsed_speaker_count = 0; | |
162 | cta.preparsed_sld = false; | |
163 | cta.preparsed_sld_has_coord = false; | |
164 | cta.preparsed_total_dtds = 0; | |
165 | cta.preparsed_total_vtdbs = 0; | |
166 | cta.preparsed_has_t8vtdb = false; | |
133 | 167 | |
134 | 168 | // DisplayID block state |
135 | 169 | dispid.version = 0; |
136 | dispid.preparse_color_ids = dispid.preparse_xfer_ids = 0; | |
137 | dispid.preparse_displayid_blocks = 0; | |
170 | dispid.native_width = dispid.native_height = 0; | |
171 | dispid.preparsed_color_ids = dispid.preparsed_xfer_ids = 0; | |
172 | dispid.preparsed_displayid_blocks = 0; | |
138 | 173 | dispid.is_base_block = true; |
139 | 174 | dispid.is_display = dispid.has_product_identification = |
140 | 175 | dispid.has_display_parameters = dispid.has_type_1_7 = |
160 | 195 | double min_vert_freq_hz; |
161 | 196 | double max_vert_freq_hz; |
162 | 197 | unsigned max_pixclk_khz; |
198 | unsigned dtd_max_hsize_mm; | |
199 | unsigned dtd_max_vsize_mm; | |
163 | 200 | |
164 | 201 | unsigned warnings; |
165 | 202 | unsigned failures; |
173 | 210 | bool has_serial_string; |
174 | 211 | bool supports_continuous_freq; |
175 | 212 | bool supports_gtf; |
213 | bool supports_sec_gtf; | |
214 | unsigned sec_gtf_start_freq; | |
215 | double C, M, K, J; | |
176 | 216 | bool supports_cvt; |
177 | bool uses_gtf; | |
178 | bool uses_cvt; | |
179 | 217 | bool has_spwg; |
180 | 218 | unsigned detailed_block_cnt; |
181 | 219 | unsigned dtd_cnt; |
191 | 229 | unsigned max_display_pixclk_khz; |
192 | 230 | unsigned max_display_width_mm; |
193 | 231 | unsigned max_display_height_mm; |
232 | unsigned max_pos_neg_hor_freq_khz; | |
194 | 233 | } base; |
195 | 234 | |
196 | 235 | // CTA-861 block state |
197 | 236 | struct { |
198 | unsigned preparse_total_dtds; | |
237 | unsigned preparsed_total_dtds; | |
199 | 238 | vec_timings_ext vec_dtds; |
200 | unsigned preparse_total_vtdbs; | |
239 | unsigned preparsed_total_vtdbs; | |
201 | 240 | vec_timings_ext vec_vtdbs; |
202 | 241 | vec_timings_ext preferred_timings; |
203 | bool preparse_has_t8vtdb; | |
242 | bool preparsed_has_t8vtdb; | |
243 | // Keep track of the found Tag/Extended Tag pairs. | |
244 | // The unsigned value is equal to: (tag << 8) | ext_tag | |
245 | std::set<unsigned> found_tags; | |
204 | 246 | timings_ext t8vtdb; |
205 | 247 | vec_timings_ext native_timings; |
206 | 248 | bool has_vic_1; |
209 | 251 | bool has_hdmi; |
210 | 252 | bool has_vcdb; |
211 | 253 | bool has_vfpdb; |
254 | unsigned preparsed_speaker_count; | |
255 | bool preparsed_sld_has_coord; | |
256 | bool preparsed_sld; | |
257 | bool has_sldb; | |
212 | 258 | unsigned short preparsed_phys_addr; |
213 | 259 | bool last_block_was_hdmi_vsdb; |
214 | 260 | bool have_hf_vsdb, have_hf_scdb; |
224 | 270 | // DisplayID block state |
225 | 271 | struct { |
226 | 272 | unsigned char version; |
227 | unsigned short preparse_color_ids; | |
228 | unsigned short preparse_xfer_ids; | |
229 | unsigned preparse_displayid_blocks; | |
273 | unsigned short preparsed_color_ids; | |
274 | unsigned short preparsed_xfer_ids; | |
275 | unsigned preparsed_displayid_blocks; | |
230 | 276 | bool is_base_block; |
231 | 277 | bool is_display; |
232 | 278 | bool has_product_identification; |
234 | 280 | bool has_type_1_7; |
235 | 281 | bool has_display_interface_features; |
236 | 282 | vec_timings_ext preferred_timings; |
283 | unsigned native_width, native_height; | |
284 | // Keep track of the found CTA-861 Tag/Extended Tag pairs. | |
285 | // The unsigned value is equal to: (tag << 8) | ext_tag | |
286 | std::set<unsigned> found_tags; | |
237 | 287 | } dispid; |
238 | 288 | |
239 | 289 | // Block Map block state |
246 | 296 | std::string dtd_type() { return dtd_type(base.dtd_cnt); } |
247 | 297 | bool print_timings(const char *prefix, const struct timings *t, |
248 | 298 | const char *type, const char *flags = "", |
249 | bool detailed = false); | |
299 | bool detailed = false, bool do_checks = true); | |
250 | 300 | bool print_timings(const char *prefix, const struct timings_ext &t, |
251 | bool detailed = false) | |
301 | bool detailed = false, bool do_checks = true) | |
252 | 302 | { |
253 | return print_timings(prefix, &t.t, t.type.c_str(), t.flags.c_str(), detailed); | |
303 | return print_timings(prefix, &t.t, t.type.c_str(), t.flags.c_str(), | |
304 | detailed, do_checks); | |
254 | 305 | }; |
255 | 306 | bool match_timings(const timings &t1, const timings &t2); |
307 | timings calc_gtf_mode(unsigned h_pixels, unsigned v_lines, | |
308 | double ip_freq_rqd, bool int_rqd = false, | |
309 | enum gtf_ip_parm ip_parm = gtf_ip_vert_freq, | |
310 | bool margins_rqd = false, bool secondary = false, | |
311 | double C = 40, double M = 600, double K = 128, double J = 20); | |
256 | 312 | void edid_gtf_mode(unsigned refresh, struct timings &t); |
257 | void edid_cvt_mode(unsigned refresh, struct timings &t); | |
258 | timings calc_cvt_mode(unsigned refresh, unsigned hact, unsigned vact, unsigned rb); | |
313 | timings calc_cvt_mode(unsigned h_pixels, unsigned v_lines, | |
314 | double ip_freq_rqd, unsigned rb, bool int_rqd = false, | |
315 | bool margins_rqd = false, bool alt = false, | |
316 | unsigned rb_h_blank = 0, double add_vert_time = 0); | |
317 | void edid_cvt_mode(unsigned refresh, struct timings &t, unsigned rb_h_blank = 0, | |
318 | double add_vert_time = 0); | |
259 | 319 | void detailed_cvt_descriptor(const char *prefix, const unsigned char *x, bool first); |
260 | 320 | void print_standard_timing(const char *prefix, unsigned char b1, unsigned char b2, |
261 | bool gtf_only = false, unsigned vrefresh_offset = 60); | |
321 | bool gtf_only = false, bool show_both = false); | |
262 | 322 | void detailed_display_range_limits(const unsigned char *x); |
263 | 323 | void detailed_epi(const unsigned char *x); |
264 | 324 | void detailed_timings(const char *prefix, const unsigned char *x, |
265 | 325 | bool base_or_cta = true); |
326 | void preparse_detailed_block(const unsigned char *x); | |
266 | 327 | void detailed_block(const unsigned char *x); |
267 | 328 | void parse_base_block(const unsigned char *x); |
268 | 329 | void check_base_block(); |
330 | void list_dmts(); | |
331 | void list_established_timings(); | |
269 | 332 | |
270 | 333 | void print_vic_index(const char *prefix, unsigned idx, const char *suffix, bool ycbcr420 = false); |
334 | void hdmi_latency(unsigned char vid_lat, unsigned char aud_lat, bool is_ilaced); | |
271 | 335 | void cta_vcdb(const unsigned char *x, unsigned length); |
272 | 336 | void cta_svd(const unsigned char *x, unsigned n, bool for_ycbcr420); |
273 | 337 | void cta_y420cmdb(const unsigned char *x, unsigned length); |
274 | 338 | void cta_vfpdb(const unsigned char *x, unsigned length); |
339 | void cta_rcdb(const unsigned char *x, unsigned length); | |
340 | void cta_sldb(const unsigned char *x, unsigned length); | |
341 | void cta_preparse_sldb(const unsigned char *x, unsigned length); | |
275 | 342 | void cta_hdmi_block(const unsigned char *x, unsigned length); |
276 | 343 | void cta_displayid_type_7(const unsigned char *x, unsigned length); |
277 | 344 | void cta_displayid_type_8(const unsigned char *x, unsigned length); |
278 | 345 | void cta_displayid_type_10(const unsigned char *x, unsigned length); |
279 | void cta_ext_block(const unsigned char *x, unsigned length); | |
280 | void cta_block(const unsigned char *x); | |
346 | void cta_ext_block(const unsigned char *x, unsigned length, bool duplicate); | |
347 | void cta_block(const unsigned char *x, bool duplicate); | |
281 | 348 | void preparse_cta_block(const unsigned char *x); |
282 | 349 | void parse_cta_block(const unsigned char *x); |
283 | 350 | void cta_resolve_svr(vec_timings_ext::iterator iter); |
284 | 351 | void cta_resolve_svrs(); |
285 | 352 | void check_cta_blocks(); |
353 | void cta_list_vics(); | |
354 | void cta_list_hdmi_vics(); | |
286 | 355 | |
287 | 356 | void parse_digital_interface(const unsigned char *x); |
288 | 357 | void parse_display_device(const unsigned char *x); |
297 | 366 | std::string product_type(unsigned char x, bool heading); |
298 | 367 | void parse_displayid_interface_features(const unsigned char *x); |
299 | 368 | void parse_displayid_parameters(const unsigned char *x); |
300 | void parse_displayid_parameters_v2(const unsigned char *x); | |
369 | void parse_displayid_parameters_v2(const unsigned char *x, unsigned block_rev); | |
301 | 370 | void parse_displayid_display_intf(const unsigned char *x); |
302 | 371 | void parse_displayid_color_characteristics(const unsigned char *x); |
303 | 372 | void parse_displayid_transfer_characteristics(const unsigned char *x); |
317 | 386 | void parse_displayid_type_9_timing(const unsigned char *x); |
318 | 387 | void parse_displayid_dynamic_video_timings_range_limits(const unsigned char *x); |
319 | 388 | void parse_displayid_ContainerID(const unsigned char *x); |
320 | void parse_displayid_type_10_timing(const unsigned char *x, bool is_cta = false); | |
389 | void parse_displayid_type_10_timing(const unsigned char *x, unsigned sz, | |
390 | bool is_cta = false); | |
321 | 391 | void preparse_displayid_block(const unsigned char *x); |
322 | 392 | void parse_displayid_block(const unsigned char *x); |
323 | 393 | void parse_displayid_vesa(const unsigned char *x); |
377 | 447 | void do_checksum(const char *prefix, const unsigned char *x, size_t len); |
378 | 448 | std::string utohex(unsigned char x); |
379 | 449 | std::string ouitohex(unsigned oui); |
450 | std::string containerid2s(const unsigned char *x); | |
380 | 451 | bool memchk(const unsigned char *x, unsigned len, unsigned char v = 0); |
381 | 452 | void hex_block(const char *prefix, const unsigned char *x, unsigned length, |
382 | 453 | bool show_ascii = true, unsigned step = 16); |
384 | 455 | void calc_ratio(struct timings *t); |
385 | 456 | const char *oui_name(unsigned oui, bool reverse = false); |
386 | 457 | |
458 | bool timings_close_match(const timings &t1, const timings &t2); | |
387 | 459 | const struct timings *find_dmt_id(unsigned char dmt_id); |
460 | const struct timings *close_match_to_dmt(const timings &t, unsigned &dmt); | |
388 | 461 | const struct timings *find_vic_id(unsigned char vic); |
389 | 462 | const struct timings *find_hdmi_vic_id(unsigned char hdmi_vic); |
463 | const struct timings *cta_close_match_to_vic(const timings &t, unsigned &vic); | |
390 | 464 | unsigned char hdmi_vic_to_vic(unsigned char hdmi_vic); |
391 | 465 | char *extract_string(const unsigned char *x, unsigned len); |
392 | 466 |
44 | 44 | 36, 72, 108, false, 1, 3, 42, true } }, |
45 | 45 | |
46 | 46 | { 0x04, 0x3140, 0x000000, { 640, 480, 4, 3, 25175, 0, false, |
47 | 16, 96, 48, false, 10, 2, 33, false, 8, 8 } }, | |
47 | 8, 96, 40, false, 2, 2, 25, false, 8, 8 } }, | |
48 | 48 | { 0x05, 0x314c, 0x000000, { 640, 480, 4, 3, 31500, 0, false, |
49 | 24, 40, 128, false, 9, 3, 28, false, 8, 8 } }, | |
49 | 16, 40, 120, false, 1, 3, 20, false, 8, 8 } }, | |
50 | 50 | { 0x06, 0x314f, 0x000000, { 640, 480, 4, 3, 31500, 0, false, |
51 | 51 | 16, 64, 120, false, 1, 3, 16, false } }, |
52 | 52 | { 0x07, 0x3159, 0x000000, { 640, 480, 4, 3, 36000, 0, false, |
353 | 353 | return NULL; |
354 | 354 | } |
355 | 355 | |
356 | /* | |
357 | * Copied from xserver/hw/xfree86/modes/xf86gtf.c | |
358 | */ | |
359 | void edid_state::edid_gtf_mode(unsigned refresh, struct timings &t) | |
356 | void edid_state::list_established_timings() | |
360 | 357 | { |
361 | #define CELL_GRAN 8.0 /* assumed character cell granularity */ | |
362 | #define MIN_PORCH 1 /* minimum front porch */ | |
363 | #define V_SYNC_RQD 3 /* width of vsync in lines */ | |
364 | #define H_SYNC_PERCENT 8.0 /* width of hsync as % of total line */ | |
365 | #define MIN_VSYNC_PLUS_BP 550.0 /* min time of vsync + back porch (microsec) */ | |
366 | #define M 600.0 /* blanking formula gradient */ | |
367 | #define C 40.0 /* blanking formula offset */ | |
368 | #define K 128.0 /* blanking formula scaling factor */ | |
369 | #define J 20.0 /* blanking formula scaling factor */ | |
370 | ||
371 | /* C' and M' are part of the Blanking Duty Cycle computation */ | |
372 | ||
373 | #define C_PRIME (((C - J) * K/256.0) + J) | |
374 | #define M_PRIME (K/256.0 * M) | |
375 | double h_pixels_rnd; | |
376 | double v_lines_rnd; | |
377 | double v_field_rate_rqd; | |
378 | double h_period_est; | |
379 | double vsync_plus_bp; | |
380 | double total_v_lines; | |
381 | double v_field_rate_est; | |
382 | double h_period; | |
383 | double total_active_pixels; | |
384 | double ideal_duty_cycle; | |
385 | double h_blank; | |
386 | double total_pixels; | |
387 | ||
388 | /* 1. In order to give correct results, the number of horizontal | |
389 | * pixels requested is first processed to ensure that it is divisible | |
390 | * by the character size, by rounding it to the nearest character | |
391 | * cell boundary: | |
392 | * | |
393 | * [H PIXELS RND] = ((ROUND([H PIXELS]/[CELL GRAN RND],0))*[CELLGRAN RND]) | |
394 | */ | |
395 | ||
396 | h_pixels_rnd = rint((double)t.hact / CELL_GRAN) * CELL_GRAN; | |
397 | ||
398 | /* 2. If interlace is requested, the number of vertical lines assumed | |
399 | * by the calculation must be halved, as the computation calculates | |
400 | * the number of vertical lines per field. In either case, the | |
401 | * number of lines is rounded to the nearest integer. | |
402 | * | |
403 | * [V LINES RND] = IF([INT RQD?]="y", ROUND([V LINES]/2,0), | |
404 | * ROUND([V LINES],0)) | |
405 | */ | |
406 | ||
407 | v_lines_rnd = t.vact; | |
408 | ||
409 | /* 3. Find the frame rate required: | |
410 | * | |
411 | * [V FIELD RATE RQD] = IF([INT RQD?]="y", [I/P FREQ RQD]*2, | |
412 | * [I/P FREQ RQD]) | |
413 | */ | |
414 | ||
415 | v_field_rate_rqd = refresh; | |
416 | ||
417 | /* 7. Estimate the Horizontal period | |
418 | * | |
419 | * [H PERIOD EST] = ((1/[V FIELD RATE RQD]) - [MIN VSYNC+BP]/1000000) / | |
420 | * ([V LINES RND] + | |
421 | * [MIN PORCH RND]+[INTERLACE]) * 1000000 | |
422 | */ | |
423 | ||
424 | h_period_est = (((1.0/v_field_rate_rqd) - (MIN_VSYNC_PLUS_BP/1000000.0)) | |
425 | / (v_lines_rnd + MIN_PORCH) | |
426 | * 1000000.0); | |
427 | ||
428 | /* 8. Find the number of lines in V sync + back porch: | |
429 | * | |
430 | * [V SYNC+BP] = ROUND(([MIN VSYNC+BP]/[H PERIOD EST]),0) | |
431 | */ | |
432 | ||
433 | vsync_plus_bp = rint(MIN_VSYNC_PLUS_BP/h_period_est); | |
434 | ||
435 | /* 10. Find the total number of lines in Vertical field period: | |
436 | * | |
437 | * [TOTAL V LINES] = [V LINES RND] + | |
438 | * [V SYNC+BP] + [INTERLACE] + | |
439 | * [MIN PORCH RND] | |
440 | */ | |
441 | ||
442 | total_v_lines = v_lines_rnd + vsync_plus_bp + MIN_PORCH; | |
443 | t.vbp = vsync_plus_bp - V_SYNC_RQD; | |
444 | t.vsync = V_SYNC_RQD; | |
445 | t.vfp = MIN_PORCH; | |
446 | ||
447 | /* 11. Estimate the Vertical field frequency: | |
448 | * | |
449 | * [V FIELD RATE EST] = 1 / [H PERIOD EST] / [TOTAL V LINES] * 1000000 | |
450 | */ | |
451 | ||
452 | v_field_rate_est = 1.0 / h_period_est / total_v_lines * 1000000.0; | |
453 | ||
454 | /* 12. Find the actual horizontal period: | |
455 | * | |
456 | * [H PERIOD] = [H PERIOD EST] / ([V FIELD RATE RQD] / [V FIELD RATE EST]) | |
457 | */ | |
458 | ||
459 | h_period = h_period_est / (v_field_rate_rqd / v_field_rate_est); | |
460 | ||
461 | /* 17. Find total number of active pixels in image | |
462 | * | |
463 | * [TOTAL ACTIVE PIXELS] = [H PIXELS RND] | |
464 | */ | |
465 | ||
466 | total_active_pixels = h_pixels_rnd; | |
467 | ||
468 | /* 18. Find the ideal blanking duty cycle from the blanking duty cycle | |
469 | * equation: | |
470 | * | |
471 | * [IDEAL DUTY CYCLE] = [C'] - ([M']*[H PERIOD]/1000) | |
472 | */ | |
473 | ||
474 | ideal_duty_cycle = C_PRIME - (M_PRIME * h_period / 1000.0); | |
475 | ||
476 | /* 19. Find the number of pixels in the blanking time to the nearest | |
477 | * double character cell: | |
478 | * | |
479 | * [H BLANK (PIXELS)] = (ROUND(([TOTAL ACTIVE PIXELS] * | |
480 | * [IDEAL DUTY CYCLE] / | |
481 | * (100-[IDEAL DUTY CYCLE]) / | |
482 | * (2*[CELL GRAN RND])), 0)) | |
483 | * * (2*[CELL GRAN RND]) | |
484 | */ | |
485 | ||
486 | h_blank = rint(total_active_pixels * | |
487 | ideal_duty_cycle / | |
488 | (100.0 - ideal_duty_cycle) / | |
489 | (2.0 * CELL_GRAN)) * (2.0 * CELL_GRAN); | |
490 | ||
491 | /* 20. Find total number of pixels: | |
492 | * | |
493 | * [TOTAL PIXELS] = [TOTAL ACTIVE PIXELS] + [H BLANK (PIXELS)] | |
494 | */ | |
495 | ||
496 | total_pixels = total_active_pixels + h_blank; | |
497 | ||
498 | /* 21. Find pixel clock frequency: | |
499 | * | |
500 | * [PIXEL FREQ] = [TOTAL PIXELS] / [H PERIOD] | |
501 | */ | |
502 | ||
503 | t.pixclk_khz = (int)(1000.0 * total_pixels / h_period + 0.5); | |
504 | ||
505 | /* Stage 1 computations are now complete; I should really pass | |
506 | the results to another function and do the Stage 2 | |
507 | computations, but I only need a few more values so I'll just | |
508 | append the computations here for now */ | |
509 | /* 17. Find the number of pixels in the horizontal sync period: | |
510 | * | |
511 | * [H SYNC (PIXELS)] =(ROUND(([H SYNC%] / 100 * [TOTAL PIXELS] / | |
512 | * [CELL GRAN RND]),0))*[CELL GRAN RND] | |
513 | */ | |
514 | t.hsync = rint(H_SYNC_PERCENT / 100.0 * total_pixels / CELL_GRAN) * CELL_GRAN; | |
515 | /* 18. Find the number of pixels in the horizontal front porch period: | |
516 | * | |
517 | * [H FRONT PORCH (PIXELS)] = ([H BLANK (PIXELS)]/2)-[H SYNC (PIXELS)] | |
518 | */ | |
519 | t.hfp = (h_blank / 2.0) - t.hsync; | |
520 | /* 19. Find the number of pixels in the horizontal back porch period: | |
521 | * | |
522 | * [H BACK PORCH (PIXELS)] = [H FRONT PORCH (PIXELS)]+[H SYNC (PIXELS)] | |
523 | */ | |
524 | t.hbp = t.hfp + t.hsync; | |
525 | t.pos_pol_hsync = false; | |
526 | t.pos_pol_vsync = true; | |
527 | t.interlaced = false; | |
528 | t.rb = 0; | |
358 | printf("Established Timings I & II, 'Byte' is the EDID address:\n\n"); | |
359 | for (unsigned i = 0; i < ARRAY_SIZE(established_timings12); i++) { | |
360 | unsigned char dmt_id = established_timings12[i].dmt_id; | |
361 | const struct timings *t; | |
362 | char type[16]; | |
363 | ||
364 | if (dmt_id) { | |
365 | sprintf(type, "DMT 0x%02x", dmt_id); | |
366 | t = find_dmt_id(dmt_id); | |
367 | } else { | |
368 | t = &established_timings12[i].t; | |
369 | sprintf(type, "%-8s", established_timings12[i].type); | |
370 | } | |
371 | printf("Byte 0x%02x, Bit %u: ", 0x23 + i / 8, 7 - i % 8); | |
372 | print_timings("", t, type, "", false, false); | |
373 | } | |
374 | printf("\nEstablished timings III, 'Byte' is the offset from the start of the descriptor:\n\n"); | |
375 | for (unsigned i = 0; i < ARRAY_SIZE(established_timings3_dmt_ids); i++) { | |
376 | unsigned char dmt_id = established_timings3_dmt_ids[i]; | |
377 | char type[16]; | |
378 | ||
379 | sprintf(type, "DMT 0x%02x", dmt_id); | |
380 | printf("Byte 0x%02x, Bit %u: ", 6 + i / 8, 7 - i % 8); | |
381 | print_timings("", find_dmt_id(dmt_id), type, "", false, false); | |
382 | } | |
529 | 383 | } |
530 | 384 | |
531 | /* | |
532 | * Copied from xserver/hw/xfree86/modes/xf86cvt.c | |
533 | */ | |
534 | void edid_state::edid_cvt_mode(unsigned refresh, struct timings &t) | |
385 | const struct timings *close_match_to_dmt(const timings &t, unsigned &dmt) | |
535 | 386 | { |
536 | int HDisplay = t.hact; | |
537 | int VDisplay = t.vact; | |
538 | ||
539 | /* 2) character cell horizontal granularity (pixels) - default 8 */ | |
540 | #define CVT_H_GRANULARITY 8 | |
541 | ||
542 | /* 4) Minimum vertical porch (lines) - default 3 */ | |
543 | #define CVT_MIN_V_PORCH 3 | |
544 | ||
545 | /* 4) Minimum number of vertical back porch lines - default 6 */ | |
546 | #define CVT_MIN_V_BPORCH 6 | |
547 | ||
548 | /* Pixel Clock step (kHz) */ | |
549 | #define CVT_CLOCK_STEP 250 | |
550 | ||
551 | double HPeriod; | |
552 | int VDisplayRnd, VSync; | |
553 | double VFieldRate = refresh; | |
554 | int HTotal, VTotal, Clock, HSyncStart, HSyncEnd, VSyncStart, VSyncEnd; | |
555 | ||
556 | /* 2. Horizontal pixels */ | |
557 | HDisplay = HDisplay - (HDisplay % CVT_H_GRANULARITY); | |
558 | ||
559 | /* 5. Find number of lines per field */ | |
560 | VDisplayRnd = VDisplay; | |
561 | ||
562 | /* Determine VSync Width from aspect ratio */ | |
563 | if ((VDisplay * 4 / 3) == HDisplay) | |
564 | VSync = 4; | |
565 | else if ((VDisplay * 16 / 9) == HDisplay) | |
566 | VSync = 5; | |
567 | else if ((VDisplay * 16 / 10) == HDisplay) | |
568 | VSync = 6; | |
569 | else if (!(VDisplay % 4) && ((VDisplay * 5 / 4) == HDisplay)) | |
570 | VSync = 7; | |
571 | else if ((VDisplay * 15 / 9) == HDisplay) | |
572 | VSync = 7; | |
573 | else /* Custom */ | |
574 | VSync = 10; | |
575 | ||
576 | if (!t.rb) { /* simplified GTF calculation */ | |
577 | /* 4) Minimum time of vertical sync + back porch interval (µs) | |
578 | * default 550.0 */ | |
579 | #define CVT_MIN_VSYNC_BP 550.0 | |
580 | ||
581 | /* 3) Nominal HSync width (% of line period) - default 8 */ | |
582 | #define CVT_HSYNC_PERCENTAGE 8 | |
583 | ||
584 | double HBlankPercentage; | |
585 | int VSyncAndBackPorch; | |
586 | int HBlank; | |
587 | ||
588 | /* 8. Estimated Horizontal period */ | |
589 | HPeriod = ((double) (1000000.0 / VFieldRate - CVT_MIN_VSYNC_BP)) / | |
590 | (VDisplayRnd + CVT_MIN_V_PORCH); | |
591 | ||
592 | /* 9. Find number of lines in sync + backporch */ | |
593 | if (((int) (CVT_MIN_VSYNC_BP / HPeriod) + 1) < | |
594 | (VSync + CVT_MIN_V_BPORCH)) | |
595 | VSyncAndBackPorch = VSync + CVT_MIN_V_BPORCH; | |
596 | else | |
597 | VSyncAndBackPorch = (int) (CVT_MIN_VSYNC_BP / HPeriod) + 1; | |
598 | ||
599 | VTotal = VDisplayRnd + VSyncAndBackPorch + CVT_MIN_V_PORCH; | |
600 | ||
601 | /* 5) Definition of Horizontal blanking time limitation */ | |
602 | /* Gradient (%/kHz) - default 600 */ | |
603 | #define CVT_M_FACTOR 600.0 | |
604 | ||
605 | /* Offset (%) - default 40 */ | |
606 | #define CVT_C_FACTOR 40.0 | |
607 | ||
608 | /* Blanking time scaling factor - default 128 */ | |
609 | #define CVT_K_FACTOR 128.0 | |
610 | ||
611 | /* Scaling factor weighting - default 20 */ | |
612 | #define CVT_J_FACTOR 20.0 | |
613 | ||
614 | #define CVT_M_PRIME (CVT_M_FACTOR * CVT_K_FACTOR / 256.0) | |
615 | #define CVT_C_PRIME ((CVT_C_FACTOR - CVT_J_FACTOR) * CVT_K_FACTOR / 256.0 + \ | |
616 | CVT_J_FACTOR) | |
617 | ||
618 | /* 12. Find ideal blanking duty cycle from formula */ | |
619 | HBlankPercentage = CVT_C_PRIME - CVT_M_PRIME * HPeriod / 1000.0; | |
620 | ||
621 | /* 13. Blanking time */ | |
622 | if (HBlankPercentage < 20) | |
623 | HBlankPercentage = 20; | |
624 | ||
625 | HBlank = (double)HDisplay * HBlankPercentage / (100.0 - HBlankPercentage) / (2.0 * CVT_H_GRANULARITY); | |
626 | HBlank *= 2 * CVT_H_GRANULARITY; | |
627 | ||
628 | /* 14. Find total number of pixels in a line. */ | |
629 | HTotal = HDisplay + HBlank; | |
630 | ||
631 | int HSync = (HTotal * CVT_HSYNC_PERCENTAGE) / 100.0 + 0.0; | |
632 | //printf("%d %d %d\n", HTotal, HBlank, HSync); | |
633 | HSync -= HSync % CVT_H_GRANULARITY; | |
634 | ||
635 | /* Fill in HSync values */ | |
636 | HSyncEnd = HTotal - HBlank / 2; | |
637 | ||
638 | HSyncStart = HSyncEnd - HSync; | |
639 | VSyncStart = VDisplayRnd + CVT_MIN_V_PORCH; | |
640 | VSyncEnd = VSyncStart + VSync; | |
641 | ||
642 | /* 15/13. Find pixel clock frequency (kHz) */ | |
643 | Clock = ((double)HTotal / HPeriod) * 1000.0; | |
644 | Clock -= Clock % CVT_CLOCK_STEP; | |
645 | } | |
646 | else { /* Reduced blanking */ | |
647 | /* Minimum vertical blanking interval time (µs) - default 460 */ | |
648 | #define CVT_RB_MIN_VBLANK 460.0 | |
649 | ||
650 | /* Fixed number of clocks for horizontal sync */ | |
651 | #define CVT_RB_H_SYNC 32.0 | |
652 | ||
653 | /* Fixed number of clocks for horizontal blanking */ | |
654 | #define CVT_RB1_H_BLANK 160.0 // RB1 & RB3 with RB_FLAG set | |
655 | #define CVT_RB2_H_BLANK 80.0 // RB2 & RB3 with RB_FLAG cleared | |
656 | ||
657 | /* Fixed number of lines for vertical front porch - default 3 */ | |
658 | #define CVT_RB1_V_FPORCH 3 | |
659 | #define CVT_RB2_V_FPORCH 1 | |
660 | #define CVT_RB3_V_FIELD_RATE_PPM_ADJ 350.0 | |
661 | #define CVT_RB2_CLOCK_STEP 1 | |
662 | ||
663 | int VBILines; | |
664 | double h_blank = (t.rb & ~RB_FLAG) == 1 ? CVT_RB1_H_BLANK : CVT_RB2_H_BLANK; | |
665 | int v_fporch = t.rb == 1 ? CVT_RB1_V_FPORCH : CVT_RB2_V_FPORCH; | |
666 | unsigned clock_step = t.rb == 1 ? CVT_CLOCK_STEP : CVT_RB2_CLOCK_STEP; | |
667 | ||
668 | if (t.rb == 3) | |
669 | VFieldRate += VFieldRate * (CVT_RB3_V_FIELD_RATE_PPM_ADJ / 1000000.0); | |
670 | ||
671 | /* 8. Estimate Horizontal period. */ | |
672 | HPeriod = ((double) (1000000.0 / VFieldRate - CVT_RB_MIN_VBLANK)) / VDisplayRnd; | |
673 | ||
674 | /* 9. Find number of lines in vertical blanking */ | |
675 | VBILines = ((double) CVT_RB_MIN_VBLANK) / HPeriod; | |
676 | VBILines++; | |
677 | ||
678 | /* 10. Check if vertical blanking is sufficient */ | |
679 | if (VBILines < (v_fporch + VSync + CVT_MIN_V_BPORCH)) | |
680 | VBILines = v_fporch + VSync + CVT_MIN_V_BPORCH; | |
681 | ||
682 | /* 11. Find total number of lines in vertical field */ | |
683 | VTotal = VDisplayRnd + VBILines; | |
684 | ||
685 | /* 12. Find total number of pixels in a line */ | |
686 | HTotal = HDisplay + h_blank; | |
687 | ||
688 | /* Fill in HSync values */ | |
689 | HSyncEnd = HDisplay + h_blank / 2; | |
690 | HSyncStart = HSyncEnd - CVT_RB_H_SYNC; | |
691 | ||
692 | /* Fill in VSync values */ | |
693 | VSyncStart = VDisplay + v_fporch; | |
694 | VSyncEnd = VSyncStart + VSync; | |
695 | ||
696 | /* 15/13. Find pixel clock frequency (kHz) */ | |
697 | double clk_khz = ((double)VFieldRate * VTotal * HTotal) / 1000.0; | |
698 | if (t.rb < 3) | |
699 | Clock = clock_step * floor(clk_khz / clock_step); | |
700 | else | |
701 | Clock = clock_step * ceil(clk_khz / clock_step); | |
702 | } | |
703 | t.pixclk_khz = Clock; | |
704 | ||
705 | t.pos_pol_hsync = t.rb; | |
706 | t.pos_pol_vsync = !t.rb; | |
707 | t.vfp = VSyncStart - VDisplay; | |
708 | t.vsync = VSyncEnd - VSyncStart; | |
709 | t.vbp = VTotal - VSyncEnd; | |
710 | t.hfp = HSyncStart - HDisplay; | |
711 | t.hsync = HSyncEnd - HSyncStart; | |
712 | t.hbp = HTotal - HSyncEnd; | |
713 | t.interlaced = false; | |
387 | for (unsigned i = 0; i < ARRAY_SIZE(dmt_timings); i++) { | |
388 | if (timings_close_match(t, dmt_timings[i].t)) { | |
389 | dmt = dmt_timings[i].dmt_id; | |
390 | return &dmt_timings[i].t; | |
391 | } | |
392 | } | |
393 | dmt = 0; | |
394 | return NULL; | |
714 | 395 | } |
715 | 396 | |
716 | timings edid_state::calc_cvt_mode(unsigned refresh, unsigned hact, unsigned vact, unsigned rb) | |
397 | void edid_state::list_dmts() | |
717 | 398 | { |
718 | timings t = {}; | |
719 | ||
720 | t.hact = hact; | |
721 | t.vact = vact; | |
722 | t.rb = rb; | |
723 | calc_ratio(&t); | |
724 | edid_cvt_mode(refresh, t); | |
725 | return t; | |
399 | char type[16]; | |
400 | ||
401 | for (unsigned i = 0; i < ARRAY_SIZE(dmt_timings); i++) { | |
402 | sprintf(type, "DMT 0x%02x", dmt_timings[i].dmt_id); | |
403 | std::string flags; | |
404 | if (dmt_timings[i].std_id) | |
405 | flags += std::string("STD: ") + | |
406 | utohex(dmt_timings[i].std_id >> 8) + " " + | |
407 | utohex(dmt_timings[i].std_id & 0xff); | |
408 | if (dmt_timings[i].cvt_id) | |
409 | add_str(flags, std::string("CVT: ") + | |
410 | utohex(dmt_timings[i].cvt_id >> 16) + " " + | |
411 | utohex((dmt_timings[i].cvt_id >> 8) & 0xff) + " " + | |
412 | utohex(dmt_timings[i].cvt_id & 0xff)); | |
413 | print_timings("", &dmt_timings[i].t, type, flags.c_str(), false, false); | |
414 | } | |
726 | 415 | } |
727 | 416 | |
728 | 417 | void edid_state::detailed_cvt_descriptor(const char *prefix, const unsigned char *x, bool first) |
734 | 423 | if (!first && !memcmp(x, empty, 3)) |
735 | 424 | return; |
736 | 425 | |
737 | base.uses_cvt = true; | |
738 | 426 | cvt_t.vact = x[0]; |
739 | 427 | if (!cvt_t.vact) |
740 | 428 | fail("CVT byte 0 is 0, which is a reserved value.\n"); |
794 | 482 | print_timings(prefix, &cvt_t, "CVT", preferred == 3 ? s_pref : ""); |
795 | 483 | } |
796 | 484 | if (x[2] & 0x01) { |
797 | cvt_t.rb = 1; | |
485 | cvt_t.rb = RB_CVT_V1; | |
798 | 486 | edid_cvt_mode(60, cvt_t); |
799 | 487 | print_timings(prefix, &cvt_t, "CVT", preferred == 4 ? s_pref : ""); |
800 | 488 | } |
838 | 526 | } |
839 | 527 | |
840 | 528 | void edid_state::print_standard_timing(const char *prefix, unsigned char b1, unsigned char b2, |
841 | bool gtf_only, unsigned vrefresh_offset) | |
529 | bool gtf_only, bool show_both) | |
842 | 530 | { |
843 | 531 | const struct timings *t; |
844 | 532 | struct timings formula = {}; |
862 | 550 | hact = (b1 + 31) * 8; |
863 | 551 | switch ((b2 >> 6) & 0x3) { |
864 | 552 | case 0x00: |
865 | if (gtf_only || base.edid_minor >= 3) { | |
553 | if (gtf_only || show_both || base.edid_minor >= 3) { | |
866 | 554 | hratio = 16; |
867 | 555 | vratio = 10; |
868 | 556 | } else { |
885 | 573 | } |
886 | 574 | vact = (double)hact * vratio / hratio; |
887 | 575 | vact = 8 * ((vact + 7) / 8); |
888 | refresh = vrefresh_offset + (b2 & 0x3f); | |
576 | refresh = (b2 & 0x3f) + 60; | |
889 | 577 | |
890 | 578 | formula.hact = hact; |
891 | 579 | formula.vact = vact; |
892 | 580 | formula.hratio = hratio; |
893 | 581 | formula.vratio = vratio; |
894 | 582 | |
895 | if (!gtf_only && base.edid_minor >= 4) { | |
896 | base.uses_cvt = true; | |
897 | edid_cvt_mode(refresh, formula); | |
898 | print_timings(prefix, &formula, "CVT ", "EDID 1.4 source"); | |
583 | if (!gtf_only && (show_both || base.edid_minor >= 4)) { | |
584 | if (show_both || base.supports_cvt) { | |
585 | edid_cvt_mode(refresh, formula); | |
586 | print_timings(prefix, &formula, "CVT ", | |
587 | show_both ? "" : "EDID 1.4 source"); | |
588 | } | |
899 | 589 | /* |
900 | * A EDID 1.3 source will assume GTF, so both GTF and CVT | |
590 | * An EDID 1.3 source will assume GTF, so both GTF and CVT | |
901 | 591 | * have to be supported. |
902 | 592 | */ |
903 | base.uses_gtf = true; | |
904 | 593 | edid_gtf_mode(refresh, formula); |
905 | print_timings(prefix, &formula, "GTF ", "EDID 1.3 source"); | |
594 | if (base.supports_cvt) | |
595 | print_timings(prefix, &formula, "GTF ", "EDID 1.3 source"); | |
596 | else | |
597 | print_timings(prefix, &formula, "GTF "); | |
906 | 598 | } else if (gtf_only || base.edid_minor >= 2) { |
907 | base.uses_gtf = true; | |
908 | 599 | edid_gtf_mode(refresh, formula); |
909 | 600 | print_timings(prefix, &formula, "GTF "); |
910 | 601 | } else { |
924 | 615 | std::string range_class; |
925 | 616 | |
926 | 617 | data_block = "Display Range Limits"; |
927 | printf(" %s:\n", data_block.c_str()); | |
618 | printf(" %s:\n", data_block.c_str()); | |
928 | 619 | base.has_display_range_descriptor = 1; |
929 | 620 | |
930 | 621 | if (base.edid_minor >= 4) { |
950 | 641 | range_class = "GTF"; |
951 | 642 | if (base.edid_minor >= 4 && !base.supports_continuous_freq) |
952 | 643 | fail("GTF can't be combined with non-continuous frequencies.\n"); |
953 | base.supports_gtf = true; | |
644 | if (base.edid_minor >= 4) | |
645 | warn("GTF support is deprecated in EDID 1.4.\n"); | |
954 | 646 | break; |
955 | 647 | case 0x01: /* range limits only */ |
956 | 648 | range_class = "Bare Limits"; |
961 | 653 | range_class = "Secondary GTF"; |
962 | 654 | if (base.edid_minor >= 4 && !base.supports_continuous_freq) |
963 | 655 | fail("GTF can't be combined with non-continuous frequencies.\n"); |
964 | base.supports_gtf = true; | |
656 | if (base.edid_minor >= 4) | |
657 | warn("GTF support is deprecated in EDID 1.4.\n"); | |
965 | 658 | has_sec_gtf = true; |
966 | 659 | break; |
967 | 660 | case 0x04: /* cvt */ |
971 | 664 | fail("'%s' is not allowed for EDID < 1.4.\n", range_class.c_str()); |
972 | 665 | else if (!base.supports_continuous_freq) |
973 | 666 | fail("CVT can't be combined with non-continuous frequencies.\n"); |
974 | if (base.edid_minor >= 4) { | |
975 | /* GTF is implied if CVT is signaled */ | |
976 | base.supports_gtf = true; | |
977 | base.supports_cvt = true; | |
978 | } | |
979 | 667 | break; |
980 | 668 | default: /* invalid */ |
981 | 669 | fail("Unknown range class (0x%02x).\n", x[10]); |
991 | 679 | fail("Min horizontal freq > max horizontal freq.\n"); |
992 | 680 | base.min_display_hor_freq_hz = (x[7] + h_min_offset) * 1000; |
993 | 681 | base.max_display_hor_freq_hz = (x[8] + h_max_offset) * 1000; |
994 | printf(" Monitor ranges (%s): %d-%d Hz V, %d-%d kHz H", | |
682 | printf(" Monitor ranges (%s): %d-%d Hz V, %d-%d kHz H", | |
995 | 683 | range_class.c_str(), |
996 | 684 | x[5] + v_min_offset, x[6] + v_max_offset, |
997 | 685 | x[7] + h_min_offset, x[8] + h_max_offset); |
1020 | 708 | if (has_sec_gtf) { |
1021 | 709 | if (x[11]) |
1022 | 710 | fail("Byte 11 is 0x%02x instead of 0x00.\n", x[11]); |
1023 | printf(" GTF Secondary Curve Block:\n"); | |
1024 | printf(" Start frequency: %u kHz\n", x[12] * 2); | |
1025 | printf(" C: %f\n", x[13] / 2.0); | |
1026 | if (x[13] > 127) | |
1027 | fail("Byte 13 is > 127.\n"); | |
1028 | printf(" M: %u\n", (x[15] << 8) | x[14]); | |
1029 | printf(" K: %u\n", x[16]); | |
1030 | printf(" J: %f\n", x[17] / 2.0); | |
1031 | if (x[17] > 127) | |
1032 | fail("Byte 17 is > 127.\n"); | |
711 | if (memchk(x + 12, 6)) { | |
712 | fail("Zeroed Secondary Curve Block.\n"); | |
713 | } else { | |
714 | printf(" GTF Secondary Curve Block:\n"); | |
715 | printf(" Start frequency: %u kHz\n", x[12] * 2); | |
716 | printf(" C: %.1f%%\n", x[13] / 2.0); | |
717 | printf(" M: %u%%/kHz\n", (x[15] << 8) | x[14]); | |
718 | printf(" K: %u\n", x[16]); | |
719 | printf(" J: %.1f%%\n", x[17] / 2.0); | |
720 | } | |
1033 | 721 | } else if (is_cvt) { |
1034 | 722 | int max_h_pixels = 0; |
1035 | 723 | |
1036 | printf(" CVT version %d.%d\n", (x[11] & 0xf0) >> 4, x[11] & 0x0f); | |
724 | printf(" CVT version %d.%d\n", (x[11] & 0xf0) >> 4, x[11] & 0x0f); | |
1037 | 725 | |
1038 | 726 | if (x[12] & 0xfc) { |
1039 | 727 | unsigned raw_offset = (x[12] & 0xfc) >> 2; |
1040 | 728 | |
1041 | printf(" Real max dotclock: %.2f MHz\n", | |
729 | printf(" Real max dotclock: %.2f MHz\n", | |
1042 | 730 | (x[9] * 10) - (raw_offset * 0.25)); |
1043 | 731 | if (raw_offset >= 40) |
1044 | 732 | warn("CVT block corrects dotclock by more than 9.75 MHz.\n"); |
1049 | 737 | max_h_pixels |= x[13]; |
1050 | 738 | max_h_pixels *= 8; |
1051 | 739 | if (max_h_pixels) |
1052 | printf(" Max active pixels per line: %d\n", max_h_pixels); | |
1053 | ||
1054 | printf(" Supported aspect ratios:%s%s%s%s%s\n", | |
740 | printf(" Max active pixels per line: %d\n", max_h_pixels); | |
741 | ||
742 | printf(" Supported aspect ratios:%s%s%s%s%s\n", | |
1055 | 743 | x[14] & 0x80 ? " 4:3" : "", |
1056 | 744 | x[14] & 0x40 ? " 16:9" : "", |
1057 | 745 | x[14] & 0x20 ? " 16:10" : "", |
1060 | 748 | if (x[14] & 0x07) |
1061 | 749 | fail("Reserved bits of byte 14 are non-zero.\n"); |
1062 | 750 | |
1063 | printf(" Preferred aspect ratio: "); | |
751 | printf(" Preferred aspect ratio: "); | |
1064 | 752 | switch ((x[15] & 0xe0) >> 5) { |
1065 | 753 | case 0x00: |
1066 | 754 | printf("4:3"); |
1086 | 774 | printf("\n"); |
1087 | 775 | |
1088 | 776 | if (x[15] & 0x08) |
1089 | printf(" Supports CVT standard blanking\n"); | |
777 | printf(" Supports CVT standard blanking\n"); | |
1090 | 778 | if (x[15] & 0x10) |
1091 | printf(" Supports CVT reduced blanking\n"); | |
779 | printf(" Supports CVT reduced blanking\n"); | |
1092 | 780 | |
1093 | 781 | if (x[15] & 0x07) |
1094 | 782 | fail("Reserved bits of byte 15 are non-zero.\n"); |
1095 | 783 | |
1096 | 784 | if (x[16] & 0xf0) { |
1097 | printf(" Supported display scaling:\n"); | |
785 | printf(" Supported display scaling:\n"); | |
1098 | 786 | if (x[16] & 0x80) |
1099 | printf(" Horizontal shrink\n"); | |
787 | printf(" Horizontal shrink\n"); | |
1100 | 788 | if (x[16] & 0x40) |
1101 | printf(" Horizontal stretch\n"); | |
789 | printf(" Horizontal stretch\n"); | |
1102 | 790 | if (x[16] & 0x20) |
1103 | printf(" Vertical shrink\n"); | |
791 | printf(" Vertical shrink\n"); | |
1104 | 792 | if (x[16] & 0x10) |
1105 | printf(" Vertical stretch\n"); | |
793 | printf(" Vertical stretch\n"); | |
1106 | 794 | } |
1107 | 795 | |
1108 | 796 | if (x[16] & 0x0f) |
1109 | 797 | fail("Reserved bits of byte 16 are non-zero.\n"); |
1110 | 798 | |
1111 | 799 | if (x[17]) |
1112 | printf(" Preferred vertical refresh: %d Hz\n", x[17]); | |
800 | printf(" Preferred vertical refresh: %d Hz\n", x[17]); | |
1113 | 801 | else |
1114 | 802 | warn("CVT block does not set preferred refresh rate.\n"); |
1115 | 803 | } else { |
1246 | 934 | return; |
1247 | 935 | } |
1248 | 936 | |
937 | /* | |
938 | * If the borders are non-zero, then it is unclear how to interpret | |
939 | * the DTD blanking parameters. | |
940 | * | |
941 | * According to EDID 1.3 (3.12) the Hor/Vert Blanking includes the | |
942 | * borders, and so does the Hor/Vert Sync Offset. | |
943 | * | |
944 | * According to EDID 1.4 (3.12) the Hor/Vert Blanking excludes the | |
945 | * borders, and they are also excluded from the Hor/Vert Front Porch. | |
946 | * | |
947 | * But looking at what is really done in EDIDs is that the Hor/Vert | |
948 | * Blanking follows EDID 1.3, but the Hor/Vert Front Porch does not | |
949 | * include the border. | |
950 | * | |
951 | * So hbl/vbl includes the borders, so those need to be subtracted, | |
952 | * but hfp/vfp is used as-is. | |
953 | * | |
954 | * In practice you really shouldn't use non-zero borders in DTDs | |
955 | * since clearly nobody knows how to interpret the timing. | |
956 | */ | |
1249 | 957 | t.hact = (x[2] + ((x[4] & 0xf0) << 4)); |
1250 | hbl = (x[3] + ((x[4] & 0x0f) << 8)); | |
958 | t.hborder = x[15]; | |
959 | hbl = (x[3] + ((x[4] & 0x0f) << 8)) - t.hborder * 2; | |
1251 | 960 | t.hfp = (x[8] + ((x[11] & 0xc0) << 2)); |
1252 | 961 | t.hsync = (x[9] + ((x[11] & 0x30) << 4)); |
1253 | 962 | t.hbp = hbl - t.hsync - t.hfp; |
1254 | t.hborder = x[15]; | |
1255 | 963 | t.vact = (x[5] + ((x[7] & 0xf0) << 4)); |
1256 | vbl = (x[6] + ((x[7] & 0x0f) << 8)); | |
964 | t.vborder = x[16]; | |
965 | vbl = (x[6] + ((x[7] & 0x0f) << 8)) - t.vborder * 2; | |
1257 | 966 | t.vfp = ((x[10] >> 4) + ((x[11] & 0x0c) << 2)); |
1258 | 967 | t.vsync = ((x[10] & 0x0f) + ((x[11] & 0x03) << 4)); |
1259 | 968 | t.vbp = vbl - t.vsync - t.vfp; |
1260 | t.vborder = x[16]; | |
1261 | 969 | |
1262 | 970 | unsigned char flags = x[17]; |
1263 | 971 | |
1352 | 1060 | if (block_nr == 0 && base.dtd_cnt == 1) { |
1353 | 1061 | te.type = "DTD 1"; |
1354 | 1062 | base.preferred_timing = te; |
1355 | cta.preferred_timings.push_back(te); | |
1356 | cta.native_timings.push_back(te); | |
1063 | if (has_cta) { | |
1064 | cta.preferred_timings.push_back(te); | |
1065 | cta.native_timings.push_back(te); | |
1066 | } | |
1357 | 1067 | } |
1358 | 1068 | if (base_or_cta) |
1359 | 1069 | cta.vec_dtds.push_back(te); |
1360 | 1070 | |
1071 | if (t.hborder || t.vborder) | |
1072 | warn("The use of non-zero borders in a DTD is not recommended.\n"); | |
1361 | 1073 | if ((base.max_display_width_mm && !t.hsize_mm) || |
1362 | 1074 | (base.max_display_height_mm && !t.vsize_mm)) { |
1363 | 1075 | fail("Mismatch of image size vs display size: image size is not set, but display size is.\n"); |
1369 | 1081 | |
1370 | 1082 | s += " "; |
1371 | 1083 | hex_block(s.c_str(), x, 18, true, 18); |
1084 | } | |
1085 | } | |
1086 | ||
1087 | void edid_state::preparse_detailed_block(const unsigned char *x) | |
1088 | { | |
1089 | if (x[0] || x[1]) | |
1090 | return; | |
1091 | if (x[3] != 0xfd) | |
1092 | return; | |
1093 | ||
1094 | switch (x[10]) { | |
1095 | case 0x00: /* default gtf */ | |
1096 | base.supports_gtf = true; | |
1097 | break; | |
1098 | case 0x02: /* secondary gtf curve */ | |
1099 | base.supports_gtf = true; | |
1100 | base.supports_sec_gtf = !memchk(x + 12, 6); | |
1101 | base.sec_gtf_start_freq = x[12] * 2; | |
1102 | base.C = x[13] / 2.0; | |
1103 | base.M = (x[15] << 8) | x[14]; | |
1104 | base.K = x[16]; | |
1105 | base.J = x[17] / 2.0; | |
1106 | break; | |
1107 | case 0x04: /* cvt */ | |
1108 | if (base.edid_minor >= 4) { | |
1109 | /* GTF is implied if CVT is signaled */ | |
1110 | base.supports_gtf = true; | |
1111 | base.supports_cvt = true; | |
1112 | } | |
1113 | break; | |
1372 | 1114 | } |
1373 | 1115 | } |
1374 | 1116 | |
1425 | 1167 | case 0xf7: |
1426 | 1168 | data_block = "Established timings III"; |
1427 | 1169 | printf(" %s:\n", data_block.c_str()); |
1428 | for (i = 0; i < 44; i++) | |
1170 | for (i = 0; i < ARRAY_SIZE(established_timings3_dmt_ids); i++) | |
1429 | 1171 | if (x[6 + i / 8] & (1 << (7 - i % 8))) { |
1430 | 1172 | unsigned char dmt_id = established_timings3_dmt_ids[i]; |
1431 | 1173 | char type[16]; |
1433 | 1175 | sprintf(type, "DMT 0x%02x", dmt_id); |
1434 | 1176 | print_timings(" ", find_dmt_id(dmt_id), type); |
1435 | 1177 | } |
1178 | if (base.edid_minor < 4) | |
1179 | fail("Not allowed for EDID < 1.4.\n"); | |
1436 | 1180 | return; |
1437 | 1181 | case 0xf8: |
1438 | 1182 | data_block = "CVT 3 Byte Timing Codes"; |
1443 | 1187 | } |
1444 | 1188 | for (i = 0; i < 4; i++) |
1445 | 1189 | detailed_cvt_descriptor(" ", x + 6 + (i * 3), !i); |
1190 | if (base.edid_minor < 4) | |
1191 | fail("Not allowed for EDID < 1.4.\n"); | |
1446 | 1192 | return; |
1447 | 1193 | case 0xf9: |
1448 | 1194 | data_block = "Display Color Management Data"; |
1554 | 1300 | } |
1555 | 1301 | } |
1556 | 1302 | |
1303 | /* | |
1304 | * The sRGB chromaticities are (x, y): | |
1305 | * red: 0.640, 0.330 | |
1306 | * green: 0.300, 0.600 | |
1307 | * blue: 0.150, 0.060 | |
1308 | * white: 0.3127, 0.3290 | |
1309 | */ | |
1310 | static const unsigned char srgb_chromaticity[10] = { | |
1311 | 0xee, 0x91, 0xa3, 0x54, 0x4c, 0x99, 0x26, 0x0f, 0x50, 0x54 | |
1312 | }; | |
1313 | ||
1557 | 1314 | void edid_state::parse_base_block(const unsigned char *x) |
1558 | 1315 | { |
1559 | 1316 | time_t the_time; |
1560 | 1317 | struct tm *ptm; |
1561 | int analog, i; | |
1318 | int analog; | |
1562 | 1319 | unsigned col_x, col_y; |
1563 | 1320 | bool has_preferred_timing = false; |
1564 | 1321 | |
1726 | 1483 | } |
1727 | 1484 | |
1728 | 1485 | if (x[0x18] & 0x04) { |
1729 | /* | |
1730 | * The sRGB chromaticities are (x, y): | |
1731 | * red: 0.640, 0.330 | |
1732 | * green: 0.300, 0.600 | |
1733 | * blue: 0.150, 0.060 | |
1734 | * white: 0.3127, 0.3290 | |
1735 | */ | |
1736 | static const unsigned char srgb_chromaticity[10] = { | |
1737 | 0xee, 0x91, 0xa3, 0x54, 0x4c, 0x99, 0x26, 0x0f, 0x50, 0x54 | |
1738 | }; | |
1739 | 1486 | printf(" Default (sRGB) color space is primary color space\n"); |
1740 | 1487 | if (memcmp(x + 0x19, srgb_chromaticity, sizeof(srgb_chromaticity))) |
1741 | 1488 | fail("sRGB is signaled, but the chromaticities do not match.\n"); |
1742 | } | |
1489 | } else if (!memcmp(x + 0x19, srgb_chromaticity, sizeof(srgb_chromaticity))) { | |
1490 | fail("The chromaticities match sRGB, but sRGB is not signaled.\n"); | |
1491 | } | |
1492 | ||
1743 | 1493 | if (base.edid_minor >= 4) { |
1744 | 1494 | /* 1.4 always has a preferred timing and this bit means something else. */ |
1745 | 1495 | has_preferred_timing = true; |
1792 | 1542 | data_block = "Established Timings I & II"; |
1793 | 1543 | if (x[0x23] || x[0x24] || x[0x25]) { |
1794 | 1544 | printf(" %s:\n", data_block.c_str()); |
1795 | for (i = 0; i < 17; i++) { | |
1545 | for (unsigned i = 0; i < ARRAY_SIZE(established_timings12); i++) { | |
1796 | 1546 | if (x[0x23 + i / 8] & (1 << (7 - i % 8))) { |
1797 | 1547 | unsigned char dmt_id = established_timings12[i].dmt_id; |
1798 | 1548 | const struct timings *t; |
1813 | 1563 | } |
1814 | 1564 | base.has_640x480p60_est_timing = x[0x23] & 0x20; |
1815 | 1565 | |
1566 | /* | |
1567 | * Need to find the Display Range Limit info before reading | |
1568 | * the standard timings. | |
1569 | */ | |
1570 | preparse_detailed_block(x + 0x36); | |
1571 | preparse_detailed_block(x + 0x48); | |
1572 | preparse_detailed_block(x + 0x5a); | |
1573 | preparse_detailed_block(x + 0x6c); | |
1574 | ||
1816 | 1575 | data_block = "Standard Timings"; |
1817 | 1576 | bool found = false; |
1818 | for (i = 0; i < 8; i++) { | |
1577 | for (unsigned i = 0; i < 8; i++) { | |
1819 | 1578 | if (x[0x26 + i * 2] != 0x01 || x[0x26 + i * 2 + 1] != 0x01) { |
1820 | 1579 | found = true; |
1821 | 1580 | break; |
1823 | 1582 | } |
1824 | 1583 | if (found) { |
1825 | 1584 | printf(" %s:\n", data_block.c_str()); |
1826 | for (i = 0; i < 8; i++) | |
1585 | for (unsigned i = 0; i < 8; i++) | |
1827 | 1586 | print_standard_timing(" ", x[0x26 + i * 2], x[0x26 + i * 2 + 1]); |
1828 | 1587 | } else { |
1829 | 1588 | printf(" %s: none\n", data_block.c_str()); |
1843 | 1602 | |
1844 | 1603 | for (unsigned i = 0; i < (base.has_spwg ? 2 : 4); i++) |
1845 | 1604 | if (x[0x36 + i * 18] || x[0x37 + i * 18]) |
1846 | cta.preparse_total_dtds++; | |
1605 | cta.preparsed_total_dtds++; | |
1847 | 1606 | |
1848 | 1607 | data_block = "Detailed Timing Descriptors"; |
1849 | 1608 | printf(" %s:\n", data_block.c_str()); |
1879 | 1638 | void edid_state::check_base_block() |
1880 | 1639 | { |
1881 | 1640 | data_block = "Base EDID"; |
1882 | if (base.uses_gtf && !base.supports_gtf) | |
1883 | fail("GTF timings are used, but the EDID does not signal GTF support.\n"); | |
1884 | if (base.uses_cvt && !base.supports_cvt) | |
1885 | fail("CVT timings are used, but the EDID does not signal CVT support.\n"); | |
1641 | ||
1886 | 1642 | /* |
1887 | 1643 | * Allow for regular rounding of vertical and horizontal frequencies. |
1888 | 1644 | * The spec says that the pixelclock shall be rounded up, so there is |
1939 | 1695 | */ |
1940 | 1696 | msg(!out_of_range || base.edid_minor >= 4, "%s", err.c_str()); |
1941 | 1697 | } |
1698 | // The base block will only go up to 255x255 cm for the display size, | |
1699 | // so don't fail if one or more image sizes exceeds that. | |
1700 | if (!base.max_display_width_mm && !base.max_display_height_mm && | |
1701 | dtd_max_hsize_mm && dtd_max_vsize_mm && | |
1702 | dtd_max_hsize_mm <= 2559 && dtd_max_vsize_mm <= 2559) { | |
1703 | fail("The DTD image sizes all fit inside 255x255cm, but no display size was set.\n"); | |
1704 | } | |
1705 | // Secondary GTF curves start at a specific frequency. Any legacy timings | |
1706 | // that have a positive hsync and negative vsync must be less than that | |
1707 | // frequency to avoid confusion. | |
1708 | if (base.supports_sec_gtf && base.max_pos_neg_hor_freq_khz >= base.sec_gtf_start_freq) | |
1709 | fail("Second GTF start frequency %u is less than the highest P/N frequency %u.\n", | |
1710 | base.sec_gtf_start_freq, base.max_pos_neg_hor_freq_khz); | |
1942 | 1711 | if (base.edid_minor == 3 && num_blocks > 2 && !block_map.saw_block_1) |
1943 | 1712 | fail("EDID 1.3 requires a Block Map Extension in Block 1 if there are more than 2 blocks in the EDID.\n"); |
1944 | 1713 | if (base.edid_minor == 3 && num_blocks > 128 && !block_map.saw_block_128) |
200 | 200 | { |
201 | 201 | if (vic > 0 && vic <= ARRAY_SIZE(edid_cta_modes1)) |
202 | 202 | return edid_cta_modes1 + vic - 1; |
203 | if (vic >= 193 && vic <= ARRAY_SIZE(edid_cta_modes2) + 193) | |
203 | if (vic >= 193 && vic < ARRAY_SIZE(edid_cta_modes2) + 193) | |
204 | 204 | return edid_cta_modes2 + vic - 193; |
205 | 205 | return NULL; |
206 | 206 | } |
210 | 210 | if (hdmi_vic > 0 && hdmi_vic <= ARRAY_SIZE(edid_hdmi_mode_map)) |
211 | 211 | return find_vic_id(edid_hdmi_mode_map[hdmi_vic - 1]); |
212 | 212 | return NULL; |
213 | } | |
214 | ||
215 | const struct timings *cta_close_match_to_vic(const timings &t, unsigned &vic) | |
216 | { | |
217 | for (vic = 1; vic <= ARRAY_SIZE(edid_cta_modes1); vic++) { | |
218 | if (timings_close_match(t, edid_cta_modes1[vic - 1])) | |
219 | return &edid_cta_modes1[vic - 1]; | |
220 | } | |
221 | for (vic = 193; vic < ARRAY_SIZE(edid_cta_modes2) + 193; vic++) { | |
222 | if (timings_close_match(t, edid_cta_modes1[vic - 193])) | |
223 | return &edid_cta_modes1[vic - 193]; | |
224 | } | |
225 | vic = 0; | |
226 | return NULL; | |
227 | } | |
228 | ||
229 | void edid_state::cta_list_vics() | |
230 | { | |
231 | char type[16]; | |
232 | for (unsigned vic = 1; vic <= ARRAY_SIZE(edid_cta_modes1); vic++) { | |
233 | sprintf(type, "VIC %3u", vic); | |
234 | print_timings("", &edid_cta_modes1[vic - 1], type, "", false, false); | |
235 | } | |
236 | for (unsigned vic = 193; vic < ARRAY_SIZE(edid_cta_modes2) + 193; vic++) { | |
237 | sprintf(type, "VIC %3u", vic); | |
238 | print_timings("", &edid_cta_modes2[vic - 193], type, "", false, false); | |
239 | } | |
240 | } | |
241 | ||
242 | void edid_state::cta_list_hdmi_vics() | |
243 | { | |
244 | for (unsigned i = 0; i < ARRAY_SIZE(edid_hdmi_mode_map); i++) { | |
245 | unsigned vic = edid_hdmi_mode_map[i]; | |
246 | char type[16]; | |
247 | ||
248 | sprintf(type, "HDMI VIC %u", i + 1); | |
249 | print_timings("", find_vic_id(vic), type, "", false, false); | |
250 | } | |
213 | 251 | } |
214 | 252 | |
215 | 253 | static std::string audio_ext_format(unsigned char x) |
410 | 448 | print_timings(" ", t, type, flags); |
411 | 449 | } |
412 | 450 | if (override_pref) { |
451 | if (!cta.preferred_timings.empty()) { | |
452 | if (match_timings(cta.preferred_timings[0].t, *t)) | |
453 | warn("For improved preferred timing interoperability, set 'Native detailed modes' to 1.\n"); | |
454 | else | |
455 | warn("VIC %u is the preferred timing, overriding the first detailed timings. Is this intended?\n", vic); | |
456 | } | |
413 | 457 | cta.preferred_timings.insert(cta.preferred_timings.begin(), |
414 | 458 | timings_ext(*t, type, flags)); |
415 | warn("VIC %u is the preferred timing, overriding the first detailed timings. Is this intended?\n", vic); | |
416 | 459 | } else if (first_svd) { |
417 | 460 | cta.preferred_timings.push_back(timings_ext(*t, type, flags)); |
418 | 461 | } |
532 | 575 | |
533 | 576 | } else if (svr >= 129 && svr <= 144) { |
534 | 577 | sprintf(suffix, "DTD %3u", svr - 128); |
535 | if (svr >= cta.preparse_total_dtds + 129) { | |
578 | if (svr >= cta.preparsed_total_dtds + 129) { | |
536 | 579 | printf(" %s: Invalid\n", suffix); |
537 | 580 | fail("Invalid DTD %u.\n", svr - 128); |
538 | 581 | } else { |
541 | 584 | } |
542 | 585 | } else if (svr >= 145 && svr <= 160) { |
543 | 586 | sprintf(suffix, "VTDB %3u", svr - 144); |
544 | if (svr >= cta.preparse_total_vtdbs + 145) { | |
587 | if (svr >= cta.preparsed_total_vtdbs + 145) { | |
545 | 588 | printf(" %s: Invalid\n", suffix); |
546 | 589 | fail("Invalid VTDB %u.\n", svr - 144); |
547 | 590 | } else { |
550 | 593 | } |
551 | 594 | } else if (svr == 254) { |
552 | 595 | sprintf(suffix, "T8VTDB"); |
553 | if (!cta.preparse_has_t8vtdb) { | |
596 | if (!cta.preparsed_has_t8vtdb) { | |
554 | 597 | printf(" %s: Invalid\n", suffix); |
555 | 598 | fail("Invalid T8VTDB.\n"); |
556 | 599 | } else { |
561 | 604 | } |
562 | 605 | } |
563 | 606 | |
564 | static std::string hdmi_latency(unsigned char l, bool is_video) | |
607 | static std::string hdmi_latency2s(unsigned char l, bool is_video) | |
565 | 608 | { |
566 | 609 | if (!l) |
567 | 610 | return "Unknown"; |
570 | 613 | return std::to_string(1 + 2 * l) + " ms"; |
571 | 614 | } |
572 | 615 | |
616 | void edid_state::hdmi_latency(unsigned char vid_lat, unsigned char aud_lat, | |
617 | bool is_ilaced) | |
618 | { | |
619 | const char *vid = is_ilaced ? "Interlaced video" : "Video"; | |
620 | const char *aud = is_ilaced ? "Interlaced audio" : "Audio"; | |
621 | ||
622 | printf(" %s latency: %s\n", vid, hdmi_latency2s(vid_lat, true).c_str()); | |
623 | printf(" %s latency: %s\n", aud, hdmi_latency2s(aud_lat, false).c_str()); | |
624 | ||
625 | if (vid_lat > 251 && vid_lat != 0xff) | |
626 | fail("Invalid %s latency value %u.\n", vid, vid_lat); | |
627 | if (aud_lat > 251 && aud_lat != 0xff) | |
628 | fail("Invalid %s latency value %u.\n", aud, aud_lat); | |
629 | ||
630 | if (!vid_lat || vid_lat > 251) | |
631 | return; | |
632 | if (!aud_lat || aud_lat > 251) | |
633 | return; | |
634 | ||
635 | unsigned vid_ms = 1 + 2 * vid_lat; | |
636 | unsigned aud_ms = 1 + 2 * aud_lat; | |
637 | ||
638 | // HDMI 2.0 latency checks for devices without HDMI output | |
639 | if (aud_ms < vid_ms) | |
640 | warn("%s latency < %s latency (%u ms < %u ms). This is discouraged for devices without HDMI output.\n", | |
641 | aud, vid, aud_ms, vid_ms); | |
642 | else if (vid_ms + 20 < aud_ms) | |
643 | warn("%s latency + 20 < %s latency (%u + 20 ms < %u ms). This is forbidden for devices without HDMI output.\n", | |
644 | vid, aud, vid_ms, aud_ms); | |
645 | else if (vid_ms < aud_ms) | |
646 | warn("%s latency < %s latency (%u ms < %u ms). This is discouraged for devices without HDMI output.\n", | |
647 | vid, aud, vid_ms, aud_ms); | |
648 | } | |
649 | ||
573 | 650 | void edid_state::cta_hdmi_block(const unsigned char *x, unsigned length) |
574 | 651 | { |
575 | 652 | unsigned len_vic, len_3d; |
578 | 655 | fail("Empty Data Block with length %u.\n", length); |
579 | 656 | return; |
580 | 657 | } |
581 | printf(" Source physical address: %u.%u.%u.%u\n", x[3] >> 4, x[3] & 0x0f, | |
658 | printf(" Source physical address: %x.%x.%x.%x\n", x[3] >> 4, x[3] & 0x0f, | |
582 | 659 | x[4] >> 4, x[4] & 0x0f); |
583 | 660 | |
584 | 661 | if (length < 6) |
622 | 699 | |
623 | 700 | unsigned b = 8; |
624 | 701 | if (x[7] & 0x80) { |
625 | printf(" Video latency: %s\n", hdmi_latency(x[b], true).c_str()); | |
626 | printf(" Audio latency: %s\n", hdmi_latency(x[b + 1], false).c_str()); | |
702 | hdmi_latency(x[b], x[b + 1], false); | |
703 | ||
704 | if (x[7] & 0x40) { | |
705 | if (x[b] == x[b + 2] && | |
706 | x[b + 1] == x[b + 3]) | |
707 | warn("Progressive and Interlaced latency values are identical, no need for both.\n"); | |
708 | b += 2; | |
709 | hdmi_latency(x[b], x[b + 1], true); | |
710 | } | |
627 | 711 | b += 2; |
628 | ||
629 | if (x[7] & 0x40) { | |
630 | printf(" Interlaced video latency: %s\n", hdmi_latency(x[b], true).c_str()); | |
631 | printf(" Interlaced audio latency: %s\n", hdmi_latency(x[b + 1], false).c_str()); | |
632 | b += 2; | |
633 | } | |
634 | 712 | } |
635 | 713 | |
636 | 714 | if (!(x[7] & 0x20)) |
842 | 920 | static void cta_hf_scdb(const unsigned char *x, unsigned length) |
843 | 921 | { |
844 | 922 | unsigned rate = x[1] * 5; |
923 | unsigned v; | |
845 | 924 | |
846 | 925 | printf(" Version: %u\n", x[0]); |
847 | 926 | if (rate) { |
906 | 985 | if (length <= 5) |
907 | 986 | return; |
908 | 987 | |
909 | printf(" VRRmin: %d Hz\n", x[5] & 0x3f); | |
910 | printf(" VRRmax: %d Hz\n", (x[5] & 0xc0) << 2 | x[6]); | |
988 | v = x[5] & 0x3f; | |
989 | if (v) { | |
990 | printf(" VRRmin: %u Hz\n", v); | |
991 | if (v > 48) | |
992 | fail("VRRmin > 48.\n"); | |
993 | } | |
994 | v = (x[5] & 0xc0) << 2 | x[6]; | |
995 | if (v) { | |
996 | printf(" VRRmax: %u Hz\n", v); | |
997 | if (!(x[5] & 0x3f)) | |
998 | fail("VRRmin == 0, but VRRmax isn't.\n"); | |
999 | else if (v < 100) | |
1000 | fail("VRRmax < 100.\n"); | |
1001 | } | |
911 | 1002 | |
912 | 1003 | if (length <= 7) |
913 | 1004 | return; |
949 | 1040 | if (x[9] & 0x3f) |
950 | 1041 | printf(" Maximum number of bytes in a line of chunks: %u\n", |
951 | 1042 | 1024 * (1 + (x[9] & 0x3f))); |
1043 | } | |
1044 | ||
1045 | static void cta_amd(const unsigned char *x, unsigned length) | |
1046 | { | |
1047 | // These Freesync values are reversed engineered by looking | |
1048 | // at existing EDIDs. | |
1049 | printf(" Version: %u.%u\n", x[0], x[1]); | |
1050 | printf(" Minimum Refresh Rate: %u Hz\n", x[2]); | |
1051 | printf(" Maximum Refresh Rate: %u Hz\n", x[3]); | |
1052 | // Freesync 1.x flags | |
1053 | // One or more of the 0xe6 bits signal that the VESA MCCS | |
1054 | // protocol is used to switch the Freesync range | |
1055 | printf(" Flags 1.x: 0x%02x%s\n", x[4], | |
1056 | (x[4] & 0xe6) ? " (MCCS)" : ""); | |
1057 | if (length >= 10) { | |
1058 | // Freesync 2.x flags | |
1059 | // Bit 2 no doubt indicates if the monitor supports Local Dimming | |
1060 | // There are probably also bits to signal support of the | |
1061 | // FreeSync2_scRGB and FreeSync2_Gamma22 HDR display modes. | |
1062 | // I suspect bits 0 and 1. | |
1063 | printf(" Flags 2.x: 0x%02x\n", x[5]); | |
1064 | // The AMD tone mapping tutorial referred to in the URL below | |
1065 | // mentions that the Freesync HDR info reports max/min | |
1066 | // luminance of the monitor with and without local dimming. | |
1067 | // | |
1068 | // https://gpuopen.com/learn/using-amd-freesync-premium-pro-hdr-code-samples/ | |
1069 | // | |
1070 | // So I assume that the first two luminance values are | |
1071 | // the max/min luminance of the display and the next two | |
1072 | // luminance values are the max/min luminance values when | |
1073 | // local dimming is disabled. The values I get seem to | |
1074 | // support that. | |
1075 | printf(" Maximum luminance: %u (%.3f cd/m^2)\n", | |
1076 | x[6], 50.0 * pow(2, x[6] / 32.0)); | |
1077 | printf(" Minimum luminance: %u (%.3f cd/m^2)\n", | |
1078 | x[7], (50.0 * pow(2, x[6] / 32.0)) * pow(x[7] / 255.0, 2) / 100.0); | |
1079 | if (x[5] & 4) { | |
1080 | // One or both bytes can be 0. The meaning of that | |
1081 | // is unknown. | |
1082 | printf(" Maximum luminance (without local dimming): %u (%.3f cd/m^2)\n", | |
1083 | x[8], 50.0 * pow(2, x[8] / 32.0)); | |
1084 | printf(" Minimum luminance (without local dimming): %u (%.3f cd/m^2)\n", | |
1085 | x[9], (50.0 * pow(2, x[8] / 32.0)) * pow(x[9] / 255.0, 2) / 100.0); | |
1086 | } else { | |
1087 | // These bytes are always 0x08 0x2f. If these values | |
1088 | // represent max/min luminance as well, then these | |
1089 | // would map to 59.460 and 0.020 cd/m^2 respectively. | |
1090 | // I wonder if this somehow relates to SDR. | |
1091 | printf(" Unknown: 0x%02x 0x%02x\n", x[8], x[9]); | |
1092 | } | |
1093 | } | |
1094 | } | |
1095 | ||
1096 | static std::string display_use_case(unsigned char x) | |
1097 | { | |
1098 | switch (x) { | |
1099 | case 1: return "Test equipment"; | |
1100 | case 2: return "Generic display"; | |
1101 | case 3: return "Television display"; | |
1102 | case 4: return "Desktop productivity display"; | |
1103 | case 5: return "Desktop gaming display"; | |
1104 | case 6: return "Presentation display"; | |
1105 | case 7: return "Virtual reality headset"; | |
1106 | case 8: return "Augmented reality"; | |
1107 | case 16: return "Video wall display"; | |
1108 | case 17: return "Medical imaging display"; | |
1109 | case 18: return "Dedicated gaming display"; | |
1110 | case 19: return "Dedicated video monitor display"; | |
1111 | case 20: return "Accessory display"; | |
1112 | default: break; | |
1113 | } | |
1114 | fail("Unknown Display product primary use case 0x%02x.\n", x); | |
1115 | return std::string("Unknown display use case (") + utohex(x) + ")"; | |
1116 | } | |
1117 | ||
1118 | static void cta_microsoft(const unsigned char *x, unsigned length) | |
1119 | { | |
1120 | // This VSDB is documented at: | |
1121 | // https://docs.microsoft.com/en-us/windows-hardware/drivers/display/specialized-monitors-edid-extension | |
1122 | printf(" Version: %u\n", x[0]); | |
1123 | if (x[0] > 2) { | |
1124 | // In version 1 and 2 these bits should always be set to 0. | |
1125 | printf(" Desktop Usage: %u\n", (x[1] >> 6) & 1); | |
1126 | printf(" Third-Party Usage: %u\n", (x[1] >> 5) & 1); | |
1127 | } | |
1128 | printf(" Display Product Primary Use Case: %u (%s)\n", x[1] & 0x1f, | |
1129 | display_use_case(x[1] & 0x1f).c_str()); | |
1130 | printf(" Container ID: %s\n", containerid2s(x + 2).c_str()); | |
952 | 1131 | } |
953 | 1132 | |
954 | 1133 | static void cta_hdr10plus(const unsigned char *x, unsigned length) |
1331 | 1510 | return s / 64.0; |
1332 | 1511 | } |
1333 | 1512 | |
1334 | static void cta_rcdb(const unsigned char *x, unsigned length) | |
1513 | void edid_state::cta_rcdb(const unsigned char *x, unsigned length) | |
1335 | 1514 | { |
1336 | 1515 | unsigned spm = ((x[3] << 16) | (x[2] << 8) | x[1]); |
1337 | 1516 | unsigned i; |
1341 | 1520 | return; |
1342 | 1521 | } |
1343 | 1522 | |
1344 | if (x[0] & 0x40) | |
1523 | if ((x[0] & 0x20) && !cta.has_sldb) | |
1524 | fail("'SLD' flag is 1, but no Speaker Location Data Block is found.\n"); | |
1525 | else if (!(x[0] & 0x20) && cta.has_sldb) | |
1526 | fail("'SLD' flag is 0, but a Speaker Location Data Block is present.\n"); | |
1527 | ||
1528 | if (x[0] & 0x40) { | |
1345 | 1529 | printf(" Speaker count: %u\n", (x[0] & 0x1f) + 1); |
1530 | } else { | |
1531 | if (x[0] & 0x1f) | |
1532 | fail("'Speaker' flag is 0, but 'Speaker Count' is != 0.\n"); | |
1533 | if (x[0] & 0x20) | |
1534 | fail("'SLD' flag is 1, but 'Speaker' is 0.\n"); | |
1535 | } | |
1346 | 1536 | |
1347 | 1537 | printf(" Speaker Presence Mask:\n"); |
1348 | 1538 | for (i = 0; i < ARRAY_SIZE(speaker_map); i++) { |
1349 | 1539 | if ((spm >> i) & 1) |
1350 | 1540 | printf(" %s\n", speaker_map[i]); |
1351 | 1541 | } |
1542 | ||
1352 | 1543 | if ((x[0] & 0xa0) == 0x80) |
1353 | 1544 | fail("'Display' flag set, but not the 'SLD' flag.\n"); |
1354 | if ((x[0] & 0x20) && length >= 7) { | |
1545 | ||
1546 | bool valid_max = cta.preparsed_sld_has_coord || (x[0] & 0x80); | |
1547 | ||
1548 | if (valid_max && length >= 7) { | |
1355 | 1549 | printf(" Xmax: %u dm\n", x[4]); |
1356 | 1550 | printf(" Ymax: %u dm\n", x[5]); |
1357 | 1551 | printf(" Zmax: %u dm\n", x[6]); |
1552 | } else if (!valid_max && length >= 7) { | |
1553 | // The RCDB should have been truncated. | |
1554 | warn("'Display' flag is 0 and 'Coord' is 0 for all SLDs, but the Max coordinates are still present.\n"); | |
1358 | 1555 | } |
1359 | 1556 | if ((x[0] & 0x80) && length >= 10) { |
1360 | 1557 | printf(" DisplayX: %.3f * Xmax\n", decode_uchar_as_double(x[7])); |
1361 | 1558 | printf(" DisplayY: %.3f * Ymax\n", decode_uchar_as_double(x[8])); |
1362 | 1559 | printf(" DisplayZ: %.3f * Zmax\n", decode_uchar_as_double(x[9])); |
1560 | } else if (!(x[0] & 0x80) && length >= 10) { | |
1561 | // The RCDB should have been truncated. | |
1562 | warn("'Display' flag is 0, but the Display coordinates are still present.\n"); | |
1363 | 1563 | } |
1364 | 1564 | } |
1365 | 1565 | |
1394 | 1594 | "RS - Right Surround", |
1395 | 1595 | }; |
1396 | 1596 | |
1397 | static void cta_sldb(const unsigned char *x, unsigned length) | |
1597 | void edid_state::cta_sldb(const unsigned char *x, unsigned length) | |
1398 | 1598 | { |
1399 | 1599 | if (length < 2) { |
1400 | 1600 | fail("Empty Data Block with length %u.\n", length); |
1401 | 1601 | return; |
1402 | 1602 | } |
1603 | ||
1604 | unsigned active_cnt = 0; | |
1605 | unsigned channel_is_active = 0; | |
1606 | ||
1403 | 1607 | while (length >= 2) { |
1404 | 1608 | printf(" Channel: %u (%sactive)\n", x[0] & 0x1f, |
1405 | 1609 | (x[0] & 0x20) ? "" : "not "); |
1610 | if (x[0] & 0x20) { | |
1611 | if (channel_is_active & (1U << (x[0] & 0x1f))) | |
1612 | fail("Channel Index %u was already marked 'Active'.\n", | |
1613 | x[0] & 0x1f); | |
1614 | channel_is_active |= 1U << (x[0] & 0x1f); | |
1615 | active_cnt++; | |
1616 | } | |
1406 | 1617 | if ((x[1] & 0x1f) < ARRAY_SIZE(speaker_location)) |
1407 | 1618 | printf(" Speaker: %s\n", speaker_location[x[1] & 0x1f]); |
1408 | 1619 | if (length >= 5 && (x[0] & 0x40)) { |
1413 | 1624 | x += 3; |
1414 | 1625 | } |
1415 | 1626 | |
1627 | length -= 2; | |
1628 | x += 2; | |
1629 | } | |
1630 | if (active_cnt != cta.preparsed_speaker_count) | |
1631 | fail("There are %u active speakers, but 'Speaker Count' is %u.\n", | |
1632 | active_cnt, cta.preparsed_speaker_count); | |
1633 | } | |
1634 | ||
1635 | void edid_state::cta_preparse_sldb(const unsigned char *x, unsigned length) | |
1636 | { | |
1637 | cta.has_sldb = true; | |
1638 | while (length >= 2) { | |
1639 | if (length >= 5 && (x[0] & 0x40)) { | |
1640 | cta.preparsed_sld_has_coord = true; | |
1641 | return; | |
1642 | } | |
1416 | 1643 | length -= 2; |
1417 | 1644 | x += 2; |
1418 | 1645 | } |
1437 | 1664 | * follow the default rules with respect to RGB Quantization Range |
1438 | 1665 | * handling. |
1439 | 1666 | * |
1440 | * The HDMI 2.0 spec recommends that this is set, but it is a good | |
1441 | * recommendation in general, not just for HDMI. | |
1667 | * Starting with the CTA-861-H spec this bit is now required to be | |
1668 | * 1 for new designs. | |
1442 | 1669 | */ |
1443 | 1670 | if (!(d & 0x40)) |
1444 | warn("Set Selectable RGB Quantization to avoid interop issues.\n"); | |
1671 | fail("Set Selectable RGB Quantization to avoid interop issues.\n"); | |
1445 | 1672 | /* |
1446 | * HDMI 2.0 recommends that the Selectable YCbCr Quantization bit is set | |
1447 | * as well, but in practice this is less of an interop issue. | |
1673 | * Since most YCbCr formats use limited range, the interop issues are | |
1674 | * less noticable than for RGB formats. | |
1448 | 1675 | * |
1449 | * I decided to not warn about this (for now). | |
1450 | * | |
1451 | * if (!(d & 0x80)) | |
1452 | * warn("Set Selectable YCbCr Quantization to avoid interop issues.\n"); | |
1676 | * Starting with the CTA-861-H spec this bit is now required to be | |
1677 | * 1 for new designs, but just warn about it (for now). | |
1453 | 1678 | */ |
1679 | if ((cta.byte3 & 0x30) && !(d & 0x80)) | |
1680 | warn("Set Selectable YCbCr Quantization to avoid interop issues.\n"); | |
1681 | ||
1682 | unsigned char s_pt = (d >> 4) & 0x03; | |
1683 | unsigned char s_it = (d >> 2) & 0x03; | |
1684 | unsigned char s_ce = d & 0x03; | |
1685 | ||
1454 | 1686 | printf(" PT scan behavior: "); |
1455 | switch ((d >> 4) & 0x03) { | |
1687 | switch (s_pt) { | |
1456 | 1688 | case 0: printf("No Data\n"); break; |
1457 | 1689 | case 1: printf("Always Overscanned\n"); break; |
1458 | 1690 | case 2: printf("Always Underscanned\n"); break; |
1459 | 1691 | case 3: printf("Supports both over- and underscan\n"); break; |
1460 | 1692 | } |
1461 | 1693 | printf(" IT scan behavior: "); |
1462 | switch ((d >> 2) & 0x03) { | |
1694 | switch (s_it) { | |
1463 | 1695 | case 0: printf("IT video formats not supported\n"); break; |
1464 | 1696 | case 1: |
1465 | 1697 | printf("Always Overscanned\n"); |
1475 | 1707 | break; |
1476 | 1708 | case 3: printf("Supports both over- and underscan\n"); break; |
1477 | 1709 | } |
1478 | if (((d >> 2) & 0x03) < 2) | |
1710 | if (s_it < 2) | |
1479 | 1711 | warn("IT scan behavior is expected to support underscanned.\n"); |
1480 | 1712 | printf(" CE scan behavior: "); |
1481 | switch (d & 0x03) { | |
1713 | switch (s_ce) { | |
1482 | 1714 | case 0: printf("CE video formats not supported\n"); break; |
1483 | 1715 | case 1: printf("Always Overscanned\n"); break; |
1484 | 1716 | case 2: printf("Always Underscanned\n"); break; |
1485 | 1717 | case 3: printf("Supports both over- and underscan\n"); break; |
1486 | 1718 | } |
1487 | if ((d & 0x03) == 0) | |
1719 | if (s_ce == 0) | |
1488 | 1720 | warn("'CE video formats not supported' makes no sense.\n"); |
1721 | else if (s_pt == s_it && s_pt == s_ce) | |
1722 | warn("S_PT is equal to S_IT and S_CE, so should be set to 0 instead.\n"); | |
1489 | 1723 | } |
1490 | 1724 | |
1491 | 1725 | static const char *colorimetry_map[] = { |
1686 | 1920 | x++; |
1687 | 1921 | length--; |
1688 | 1922 | for (unsigned i = 0; i < length / sz; i++) |
1689 | parse_displayid_type_10_timing(x + i * sz, true); | |
1923 | parse_displayid_type_10_timing(x + i * sz, sz, true); | |
1690 | 1924 | } |
1691 | 1925 | |
1692 | 1926 | static void cta_hdmi_audio_block(const unsigned char *x, unsigned length) |
1755 | 1989 | } |
1756 | 1990 | } |
1757 | 1991 | |
1758 | void edid_state::cta_ext_block(const unsigned char *x, unsigned length) | |
1992 | void edid_state::cta_ext_block(const unsigned char *x, unsigned length, | |
1993 | bool duplicate) | |
1759 | 1994 | { |
1760 | 1995 | const char *name; |
1761 | 1996 | unsigned oui; |
1805 | 2040 | return; |
1806 | 2041 | } |
1807 | 2042 | |
2043 | switch (x[0]) { | |
2044 | case 0x00: | |
2045 | case 0x02: | |
2046 | case 0x05: | |
2047 | case 0x06: | |
2048 | case 0x0d: | |
2049 | case 0x0f: | |
2050 | case 0x12: | |
2051 | case 0x13: | |
2052 | case 0x78: | |
2053 | case 0x79: | |
2054 | if (duplicate) | |
2055 | fail("Only one instance of this Data Block is allowed.\n"); | |
2056 | break; | |
2057 | } | |
2058 | ||
2059 | ||
1808 | 2060 | // See Table 52 of CTA-861-G for a description of Byte 3 |
1809 | 2061 | if (audio_block && !(cta.byte3 & 0x40)) |
1810 | 2062 | fail("audio information is present, but bit 6 of Byte 3 of the CTA-861 Extension header indicates no Basic Audio support.\n"); |
1918 | 2170 | hex_block(" ", x + 1, length); |
1919 | 2171 | } |
1920 | 2172 | |
1921 | void edid_state::cta_block(const unsigned char *x) | |
2173 | void edid_state::cta_block(const unsigned char *x, bool duplicate) | |
1922 | 2174 | { |
1923 | 2175 | unsigned length = x[0] & 0x1f; |
1924 | 2176 | const char *name; |
1979 | 2231 | cta.have_hf_vsdb = 1; |
1980 | 2232 | break; |
1981 | 2233 | } |
2234 | if (oui == 0x00001a) { | |
2235 | cta_amd(x + 4, length - 3); | |
2236 | break; | |
2237 | } | |
2238 | if (oui == 0xca125c && length == 0x15) { | |
2239 | cta_microsoft(x + 4, length - 3); | |
2240 | break; | |
2241 | } | |
1982 | 2242 | hex_block(" ", x + 4, length - 3); |
1983 | 2243 | break; |
1984 | 2244 | case 0x04: |
1986 | 2246 | printf(" %s:\n", data_block.c_str()); |
1987 | 2247 | cta_sadb(x + 1, length); |
1988 | 2248 | audio_block = true; |
2249 | if (duplicate) | |
2250 | fail("Only one instance of this Data Block is allowed.\n"); | |
1989 | 2251 | break; |
1990 | 2252 | case 0x05: |
1991 | 2253 | data_block = "VESA Display Transfer Characteristics Data Block"; |
1992 | 2254 | printf(" %s:\n", data_block.c_str()); |
1993 | 2255 | cta_vesa_dtcdb(x + 1, length); |
2256 | if (duplicate) | |
2257 | fail("Only one instance of this Data Block is allowed.\n"); | |
1994 | 2258 | break; |
1995 | 2259 | case 0x07: |
1996 | cta_ext_block(x + 1, length - 1); | |
2260 | cta_ext_block(x + 1, length - 1, duplicate); | |
1997 | 2261 | break; |
1998 | 2262 | default: { |
1999 | 2263 | unsigned tag = (*x & 0xe0) >> 5; |
2026 | 2290 | if (memchk(detailed, 18)) |
2027 | 2291 | break; |
2028 | 2292 | if (detailed[0] || detailed[1]) |
2029 | cta.preparse_total_dtds++; | |
2293 | cta.preparsed_total_dtds++; | |
2030 | 2294 | } |
2031 | 2295 | } |
2032 | 2296 | |
2048 | 2312 | case 0x07: |
2049 | 2313 | if (x[i + 1] == 0x0d) |
2050 | 2314 | cta.has_vfpdb = true; |
2315 | if (x[i + 1] == 0x13 && (x[i + 2] & 0x40)) { | |
2316 | cta.preparsed_speaker_count = 1 + (x[i + 2] & 0x1f); | |
2317 | cta.preparsed_sld = x[i + 2] & 0x20; | |
2318 | } | |
2319 | if (x[i + 1] == 0x14) | |
2320 | cta_preparse_sldb(x + i + 2, (x[i] & 0x1f) - 1); | |
2051 | 2321 | if (x[i + 1] == 0x22) |
2052 | cta.preparse_total_vtdbs++; | |
2322 | cta.preparsed_total_vtdbs++; | |
2053 | 2323 | if (x[i + 1] == 0x23) |
2054 | cta.preparse_has_t8vtdb = true; | |
2324 | cta.preparsed_has_t8vtdb = true; | |
2055 | 2325 | if (x[i + 1] == 0x32) |
2056 | cta.preparse_total_vtdbs += | |
2326 | cta.preparsed_total_vtdbs += | |
2057 | 2327 | ((x[i] & 0x1f) - 2) / (6 + ((x[i + 2] & 0x70) >> 4)); |
2058 | 2328 | if (x[i + 1] != 0x0e) |
2059 | 2329 | continue; |
2131 | 2401 | cta.native_timings.clear(); |
2132 | 2402 | if (!native_dtds && !cta.has_vfpdb) { |
2133 | 2403 | cta.first_svd_might_be_preferred = true; |
2134 | } else if (native_dtds > cta.preparse_total_dtds) { | |
2404 | } else if (native_dtds > cta.preparsed_total_dtds) { | |
2135 | 2405 | fail("There are more Native DTDs (%u) than DTDs (%u).\n", |
2136 | native_dtds, cta.preparse_total_dtds); | |
2406 | native_dtds, cta.preparsed_total_dtds); | |
2137 | 2407 | } |
2138 | if (native_dtds > cta.preparse_total_dtds) | |
2139 | native_dtds = cta.preparse_total_dtds; | |
2408 | if (native_dtds > cta.preparsed_total_dtds) | |
2409 | native_dtds = cta.preparsed_total_dtds; | |
2140 | 2410 | for (unsigned i = 0; i < native_dtds; i++) { |
2141 | 2411 | char type[16]; |
2142 | 2412 | |
2150 | 2420 | if (version >= 3) { |
2151 | 2421 | unsigned i; |
2152 | 2422 | |
2153 | for (i = 4; i < offset; i += (x[i] & 0x1f) + 1) | |
2154 | cta_block(x + i); | |
2423 | for (i = 4; i < offset; i += (x[i] & 0x1f) + 1) { | |
2424 | unsigned tag = (x[i] & 0xe0) << 3; | |
2425 | ||
2426 | if (tag == 0x700) | |
2427 | tag |= x[i + 1]; | |
2428 | bool duplicate = cta.found_tags.find(tag) != cta.found_tags.end(); | |
2429 | ||
2430 | cta_block(x + i, duplicate); | |
2431 | if (!duplicate) | |
2432 | cta.found_tags.insert(tag); | |
2433 | } | |
2155 | 2434 | |
2156 | 2435 | data_block.clear(); |
2157 | 2436 | if (i != offset) |
2186 | 2465 | cta.supported_hdmi_vic_codes) |
2187 | 2466 | fail("HDMI VIC Codes must have their CTA-861 VIC equivalents in the VSB.\n"); |
2188 | 2467 | if (!cta.has_vcdb) |
2189 | warn("Missing VCDB, needed for Set Selectable RGB Quantization to avoid interop issues.\n"); | |
2468 | fail("Missing VCDB, needed for Set Selectable RGB Quantization to avoid interop issues.\n"); | |
2190 | 2469 | } |
2191 | 2470 | |
2192 | 2471 | void edid_state::cta_resolve_svr(vec_timings_ext::iterator iter) |
2297 | 2576 | warn("Native interlaced resolution of %ux%u is smaller than the max preferred interlaced resolution %ux%u.\n", |
2298 | 2577 | native_ilace_hact, native_ilace_vact, |
2299 | 2578 | max_pref_ilace_hact, max_pref_ilace_vact); |
2300 | } | |
2579 | ||
2580 | if (dispid.native_width && native_prog_hact && | |
2581 | !native_prog_mixed_resolutions) { | |
2582 | if (dispid.native_width != native_prog_hact || | |
2583 | dispid.native_height != native_prog_vact) | |
2584 | fail("Mismatch between CTA-861 and DisplayID native progressive resolution.\n"); | |
2585 | } | |
2586 | } |
192 | 192 | printf(" Uses %u CIE (x, y) coordinates\n", cie_year); |
193 | 193 | if (xfer_id) { |
194 | 194 | printf(" Associated with Transfer Characteristics Data Block with Identifier %u\n", xfer_id); |
195 | if (!(dispid.preparse_xfer_ids & (1 << xfer_id))) | |
195 | if (!(dispid.preparsed_xfer_ids & (1 << xfer_id))) | |
196 | 196 | fail("Missing Transfer Characteristics Data Block with Identifier %u.\n", xfer_id); |
197 | 197 | } |
198 | 198 | if (!num_primaries) { |
204 | 204 | for (unsigned i = 0; i < num_primaries; i++) { |
205 | 205 | unsigned idx = offset + 3 * i; |
206 | 206 | |
207 | printf(" Primary #%u: (%.6f, %.6f)\n", i, | |
207 | printf(" Primary #%u: (%.4f, %.4f)\n", i, | |
208 | 208 | fp2d(x[idx] | ((x[idx + 1] & 0x0f) << 8)), |
209 | 209 | fp2d(((x[idx + 1] & 0xf0) >> 4) | (x[idx + 2] << 4))); |
210 | 210 | } |
212 | 212 | for (unsigned i = 0; i < num_whitepoints; i++) { |
213 | 213 | unsigned idx = offset + 3 * i; |
214 | 214 | |
215 | printf(" White point #%u: (%.6f, %.6f)\n", i, | |
215 | printf(" White point #%u: (%.4f, %.4f)\n", i, | |
216 | 216 | fp2d(x[idx] | ((x[idx + 1] & 0x0f) << 8)), |
217 | 217 | fp2d(((x[idx + 1] & 0xf0) >> 4) | (x[idx + 2] << 4))); |
218 | 218 | } |
335 | 335 | unsigned vtot = t.vact + t.vfp + t.vsync + t.vbp; |
336 | 336 | unsigned refresh = (t.pixclk_khz * 1000ULL) / (htot * vtot); |
337 | 337 | |
338 | for (unsigned rb = 0; rb <= 3; rb++) { | |
339 | timings cvt_t = calc_cvt_mode(refresh, t.hact, t.vact, rb); | |
338 | for (unsigned rb = RB_NONE; rb <= RB_CVT_V3; rb++) { | |
339 | timings cvt_t = calc_cvt_mode(t.hact, t.vact, refresh, rb); | |
340 | 340 | if (match_timings(t, cvt_t)) { |
341 | 341 | fail("This T7VTDB can be represented as a T10VTDB.\n"); |
342 | 342 | return; |
343 | 343 | } |
344 | 344 | } |
345 | timings cvt_t = calc_cvt_mode(refresh, t.hact, t.vact, 3 | RB_FLAG); | |
345 | timings cvt_t = calc_cvt_mode(t.hact, t.vact, refresh, RB_CVT_V3, | |
346 | false, false, true); | |
346 | 347 | if (match_timings(t, cvt_t)) |
347 | 348 | fail("This T7VTDB can be represented as a T10VTDB.\n"); |
348 | 349 | } |
460 | 461 | break; |
461 | 462 | } |
462 | 463 | |
463 | t.rb = ((x[0] & 0x70) >> 4) == 1; | |
464 | t.rb = ((x[0] & 0x70) >> 4) == 1 ? RB_CVT_V1 : RB_NONE; | |
464 | 465 | t.hact = 8 + 8 * x[1]; |
465 | 466 | t.vact = t.hact * t.vratio / t.hratio; |
466 | 467 | |
504 | 505 | if (!check_displayid_datablock_length(x, 15, 15)) |
505 | 506 | return; |
506 | 507 | printf(" Pixel Clock: %.3f-%.3f MHz\n", |
507 | (double)(x[3] | (x[4] << 8) | (x[5] << 16)) / 100.0, | |
508 | (double)(x[6] | (x[7] << 8) | (x[8] << 16)) / 100.0); | |
508 | (double)((x[3] | (x[4] << 8) | (x[5] << 16)) + 1) / 100.0, | |
509 | (double)((x[6] | (x[7] << 8) | (x[8] << 16)) + 1) / 100.0); | |
509 | 510 | printf(" Horizontal Frequency: %u-%u kHz\n", x[9], x[10]); |
510 | 511 | printf(" Minimum Horizontal Blanking: %u pixels\n", x[11] | (x[12] << 8)); |
511 | 512 | printf(" Vertical Refresh: %u-%u Hz\n", x[13], x[14]); |
589 | 590 | printf(" The backlight may be switched on and off\n"); |
590 | 591 | if (x[4] & 0x04) |
591 | 592 | printf(" The backlight's intensity can be controlled\n"); |
592 | printf(" Display native pixel format: %ux%u\n", | |
593 | x[5] | (x[6] << 8), x[7] | (x[8] << 8)); | |
593 | unsigned w = x[5] | (x[6] << 8); | |
594 | unsigned h = x[7] | (x[8] << 8); | |
595 | if (w && h) { | |
596 | printf(" Display native pixel format: %ux%u\n", w + 1, h + 1); | |
597 | dispid.native_width = w + 1; | |
598 | dispid.native_height = h + 1; | |
599 | } else if (w || h) { | |
600 | fail("Invalid Native Pixel Format %ux%u.\n", w, h); | |
601 | } | |
594 | 602 | printf(" Aspect ratio and orientation:\n"); |
595 | 603 | printf(" Aspect Ratio: %.2f\n", (100 + x[9]) / 100.0); |
596 | 604 | unsigned char v = x[0x0a]; |
658 | 666 | if (!check_displayid_datablock_length(x, 6, 6)) |
659 | 667 | return; |
660 | 668 | |
661 | printf(" Power Sequence T1: %.1f-%u.0 ms\n", (x[3] >> 4) / 10.0, (x[3] & 0xf) * 2); | |
662 | printf(" Power Sequence T2: 0.0-%u.0 ms\n", (x[4] & 0x3f) * 2); | |
663 | printf(" Power Sequence T3: 0.0-%u.0 ms\n", (x[5] & 0x3f) * 2); | |
664 | printf(" Power Sequence T4: 0.0-%u.0 ms\n", (x[6] & 0x7f) * 10); | |
665 | printf(" Power Sequence T5: 0.0-%u.0 ms\n", (x[7] & 0x3f) * 10); | |
666 | printf(" Power Sequence T6: 0.0-%u.0 ms\n", (x[8] & 0x3f) * 10); | |
669 | printf(" Power Sequence T1 Range: %.1f-%u.0 ms\n", (x[3] >> 4) / 10.0, (x[3] & 0xf) * 2); | |
670 | printf(" Power Sequence T2 Range: 0.0-%u.0 ms\n", (x[4] & 0x3f) * 2); | |
671 | printf(" Power Sequence T3 Range: 0.0-%u.0 ms\n", (x[5] & 0x3f) * 2); | |
672 | printf(" Power Sequence T4 Min: %u.0 ms\n", (x[6] & 0x7f) * 10); | |
673 | printf(" Power Sequence T5 Min: %u.0 ms\n", (x[7] & 0x3f) * 10); | |
674 | printf(" Power Sequence T6 Min: %u.0 ms\n", (x[8] & 0x3f) * 10); | |
667 | 675 | } |
668 | 676 | |
669 | 677 | // tag 0x0e |
678 | 686 | |
679 | 687 | if (xfer_id) { |
680 | 688 | printf(" Transfer Characteristics Data Block Identifier: %u\n", xfer_id); |
681 | if (!(dispid.preparse_color_ids & (1 << xfer_id))) | |
689 | if (!(dispid.preparsed_color_ids & (1 << xfer_id))) | |
682 | 690 | fail("Missing Color Characteristics Data Block using Identifier %u.\n", xfer_id); |
683 | 691 | } |
684 | 692 | if (first_is_white) |
697 | 705 | i - first_is_white); |
698 | 706 | unsigned samples = x[offset]; |
699 | 707 | if (four_param) { |
708 | if (samples != 5) | |
709 | fail("Expected 5 samples.\n"); | |
700 | 710 | printf(" A0=%u A1=%u A2=%u A3=%u Gamma=%.2f\n", |
701 | 711 | x[offset + 1], x[offset + 2], x[offset + 3], x[offset + 4], |
702 | 712 | (double)(x[offset + 5] + 100.0) / 100.0); |
703 | 713 | samples++; |
704 | 714 | } else { |
705 | for (unsigned j = offset + 1; j < offset + samples; j++) | |
706 | printf(" %3u", x[j]); | |
707 | printf(" 255\n"); | |
715 | double sum = 0; | |
716 | ||
717 | // The spec is not very clear about the number of samples: | |
718 | // should this be interpreted as the actual number of | |
719 | // samples stored in this Data Block, or as the number of | |
720 | // samples in the curve, but where the last sample is not | |
721 | // actually stored since it is always 0x3ff. | |
722 | // | |
723 | // The ATP Manager interprets this as the latter, so that's | |
724 | // what we implement here. | |
725 | for (unsigned j = offset + 1; j < offset + samples; j++) { | |
726 | sum += x[j]; | |
727 | printf(" %.2f", sum * 100.0 / 1023.0); | |
728 | } | |
729 | printf(" 100.00\n"); | |
708 | 730 | } |
709 | 731 | offset += samples; |
710 | 732 | len -= samples; |
917 | 939 | if (x[0] & 0x10) |
918 | 940 | s += ", refresh rate * (1000/1001) supported"; |
919 | 941 | |
920 | t.rb = 2; | |
942 | t.rb = RB_CVT_V2; | |
921 | 943 | if ((x[0] & 0x03) == 1) |
922 | 944 | warn("Unexpected use of 'custom reduced blanking'.\n"); |
923 | 945 | else if ((x[0] & 0x03) > 1) |
1083 | 1105 | |
1084 | 1106 | // tag 0x21 |
1085 | 1107 | |
1086 | void edid_state::parse_displayid_parameters_v2(const unsigned char *x) | |
1087 | { | |
1088 | check_displayid_datablock_revision(x[1]); | |
1089 | ||
1108 | void edid_state::parse_displayid_parameters_v2(const unsigned char *x, | |
1109 | unsigned block_rev) | |
1110 | { | |
1090 | 1111 | if (!check_displayid_datablock_length(x, 29, 29)) |
1091 | 1112 | return; |
1092 | 1113 | |
1100 | 1121 | else |
1101 | 1122 | printf(" Image size: %.1f mm x %.1f mm\n", |
1102 | 1123 | hor_size / 10.0, vert_size / 10.0); |
1103 | printf(" Pixels: %d x %d\n", | |
1104 | (x[8] << 8) + x[7], (x[10] << 8) + x[9]); | |
1124 | unsigned w = (x[8] << 8) + x[7]; | |
1125 | unsigned h = (x[10] << 8) + x[9]; | |
1126 | if (w && h) { | |
1127 | printf(" Native Format: %ux%u\n", w, h); | |
1128 | dispid.native_width = w; | |
1129 | dispid.native_height = h; | |
1130 | } else if (w || h) { | |
1131 | fail("Invalid Native Format %ux%u.\n", w, h); | |
1132 | } | |
1105 | 1133 | unsigned char v = x[11]; |
1106 | 1134 | printf(" Scan Orientation: "); |
1107 | 1135 | switch (v & 0x07) { |
1144 | 1172 | printf(" Native Minimum Luminance: %s\n", |
1145 | 1173 | ieee7542d(x[0x1c] | (x[0x1d] << 8)).c_str()); |
1146 | 1174 | printf(" Native Color Depth: "); |
1147 | if (bpc444[x[0x1e] & 0x07]) | |
1175 | if (!(x[0x1e] & 0x07)) | |
1176 | printf("Not defined\n"); | |
1177 | else if (bpc444[x[0x1e] & 0x07]) | |
1148 | 1178 | printf("%s bpc\n", bpc444[x[0x1e] & 0x07]); |
1149 | 1179 | else |
1150 | 1180 | printf("Reserved\n"); |
1155 | 1185 | case 0x02: printf("Organic LED\n"); break; |
1156 | 1186 | default: printf("Reserved\n"); break; |
1157 | 1187 | } |
1188 | if (block_rev) | |
1189 | printf(" Display Device Theme Preference: %s\n", | |
1190 | (x[0x1e] & 0x80) ? "Dark Theme Preferred" : "No Preference"); | |
1158 | 1191 | if (x[0x1f] != 0xff) |
1159 | 1192 | printf(" Native Gamma EOTF: %.2f\n", |
1160 | 1193 | (100 + x[0x1f]) / 100.0); |
1190 | 1223 | s += ", refresh rate * (1000/1001) supported"; |
1191 | 1224 | |
1192 | 1225 | switch (x[0] & 0x07) { |
1193 | case 1: t.rb = 1; break; | |
1194 | case 2: t.rb = 2; break; | |
1226 | case 1: t.rb = RB_CVT_V1; break; | |
1227 | case 2: t.rb = RB_CVT_V2; break; | |
1195 | 1228 | default: break; |
1196 | 1229 | } |
1197 | 1230 | |
1326 | 1359 | |
1327 | 1360 | if (check_displayid_datablock_length(x, 16, 16)) { |
1328 | 1361 | x += 3; |
1329 | printf(" %02x%02x%02x%02x-%02x%02x-%02x%02x-%02x%02x-%02x%02x%02x%02x%02x%02x\n", | |
1330 | x[0], x[1], x[2], x[3], | |
1331 | x[4], x[5], | |
1332 | x[6], x[7], | |
1333 | x[8], x[9], | |
1334 | x[10], x[11], x[12], x[13], x[14], x[15]); | |
1362 | printf(" Container ID: %s\n", containerid2s(x).c_str()); | |
1335 | 1363 | } |
1336 | 1364 | } |
1337 | 1365 | |
1338 | 1366 | // tag 0x32 |
1339 | 1367 | |
1340 | void edid_state::parse_displayid_type_10_timing(const unsigned char *x, bool is_cta) | |
1368 | void edid_state::parse_displayid_type_10_timing(const unsigned char *x, | |
1369 | unsigned sz, bool is_cta) | |
1341 | 1370 | { |
1342 | 1371 | struct timings t = {}; |
1343 | 1372 | std::string s("aspect "); |
1364 | 1393 | } |
1365 | 1394 | |
1366 | 1395 | switch (x[0] & 0x07) { |
1367 | case 1: t.rb = 1; break; | |
1368 | case 2: t.rb = 2; break; | |
1369 | case 3: t.rb = 3; break; | |
1396 | case 1: t.rb = RB_CVT_V1; break; | |
1397 | case 2: t.rb = RB_CVT_V2; break; | |
1398 | case 3: t.rb = RB_CVT_V3; break; | |
1370 | 1399 | default: break; |
1371 | 1400 | } |
1372 | 1401 | |
1402 | unsigned rb = t.rb; | |
1403 | unsigned rb_h_blank = rb == RB_CVT_V3 ? 80 : 0; | |
1404 | ||
1373 | 1405 | if (x[0] & 0x10) { |
1374 | if (t.rb == 2) { | |
1406 | if (rb == RB_CVT_V2) { | |
1375 | 1407 | s += ", refresh rate * (1000/1001) supported"; |
1376 | } else if (t.rb == 3) { | |
1408 | t.rb |= RB_ALT; | |
1409 | } else if (rb == RB_CVT_V3) { | |
1377 | 1410 | s += ", hblank is 160 pixels"; |
1378 | t.rb |= RB_FLAG; | |
1411 | t.rb |= RB_ALT; | |
1412 | rb_h_blank = 160; | |
1379 | 1413 | } else { |
1380 | 1414 | fail("VR_HB must be 0.\n"); |
1381 | 1415 | } |
1383 | 1417 | if (x[0] & 0x80) |
1384 | 1418 | s += ", YCbCr 4:2:0"; |
1385 | 1419 | |
1386 | edid_cvt_mode(1 + x[5], t); | |
1420 | unsigned refresh = 1 + x[5] + (sz == 6 ? 0 : ((x[6] & 3) << 8)); | |
1421 | double add_vert_time = 0; | |
1422 | ||
1423 | if (sz > 6 && rb == RB_CVT_V3) { | |
1424 | unsigned delta_hblank = (x[6] >> 2) & 7; | |
1425 | ||
1426 | if (rb_h_blank == 80) | |
1427 | rb_h_blank = 80 + 8 * delta_hblank; | |
1428 | else if (delta_hblank <= 5) | |
1429 | rb_h_blank = 160 + 8 * delta_hblank; | |
1430 | else | |
1431 | rb_h_blank = 160 - (delta_hblank - 5) * 8; | |
1432 | ||
1433 | unsigned vblank_time_perc = (x[6] >> 5) & 7; | |
1434 | ||
1435 | add_vert_time = (vblank_time_perc * 10000.0) / refresh; | |
1436 | } | |
1437 | ||
1438 | edid_cvt_mode(refresh, t, rb_h_blank, add_vert_time); | |
1387 | 1439 | |
1388 | 1440 | print_timings(" ", &t, "CVT", s.c_str()); |
1389 | 1441 | if (is_cta) { |
1441 | 1493 | } |
1442 | 1494 | x += 3; |
1443 | 1495 | |
1444 | for (i = 0; i < len; i += (x[i] & 0x1f) + 1) | |
1445 | cta_block(x + i); | |
1496 | for (i = 0; i < len; i += (x[i] & 0x1f) + 1) { | |
1497 | unsigned tag = (x[i] & 0xe0) << 3; | |
1498 | ||
1499 | if (tag == 0x700) | |
1500 | tag |= x[i + 1]; | |
1501 | bool duplicate = dispid.found_tags.find(tag) != dispid.found_tags.end(); | |
1502 | ||
1503 | cta_block(x + i, duplicate); | |
1504 | if (!duplicate) | |
1505 | dispid.found_tags.insert(tag); | |
1506 | } | |
1446 | 1507 | |
1447 | 1508 | if (i != len) |
1448 | 1509 | fail("Length is %u instead of %u.\n", len, i); |
1498 | 1559 | |
1499 | 1560 | unsigned offset = 5; |
1500 | 1561 | |
1501 | dispid.preparse_displayid_blocks++; | |
1562 | dispid.preparsed_displayid_blocks++; | |
1502 | 1563 | while (length > 0) { |
1503 | 1564 | unsigned tag = x[offset]; |
1504 | 1565 | unsigned len = x[offset + 2]; |
1505 | 1566 | |
1506 | 1567 | switch (tag) { |
1507 | 1568 | case 0x02: |
1508 | dispid.preparse_color_ids |= 1 << ((x[offset + 1] >> 3) & 0x0f); | |
1569 | dispid.preparsed_color_ids |= 1 << ((x[offset + 1] >> 3) & 0x0f); | |
1509 | 1570 | break; |
1510 | 1571 | case 0x0e: |
1511 | dispid.preparse_xfer_ids |= 1 << ((x[offset + 1] >> 4) & 0x0f); | |
1572 | dispid.preparsed_xfer_ids |= 1 << ((x[offset + 1] >> 4) & 0x0f); | |
1512 | 1573 | break; |
1513 | 1574 | default: |
1514 | 1575 | break; |
1545 | 1606 | product_type(prod_type, false).c_str()); |
1546 | 1607 | if (!prod_type) |
1547 | 1608 | fail("DisplayID Base Block has no product type.\n"); |
1548 | if (ext_count != dispid.preparse_displayid_blocks - 1) | |
1609 | if (ext_count != dispid.preparsed_displayid_blocks - 1) | |
1549 | 1610 | fail("Expected %u DisplayID Extension Block%s, but got %u.\n", |
1550 | 1611 | ext_count, |
1551 | 1612 | ext_count > 1 ? "s" : "", |
1552 | dispid.preparse_displayid_blocks - 1); | |
1613 | dispid.preparsed_displayid_blocks - 1); | |
1553 | 1614 | } else { |
1554 | 1615 | if (prod_type) |
1555 | 1616 | fail("Product Type should be 0 in extension block.\n"); |
1732 | 1793 | parse_displayid_type_6_timing(&x[offset + 3 + i]); |
1733 | 1794 | break; |
1734 | 1795 | case 0x20: parse_displayid_product_id(x + offset); break; |
1735 | case 0x21: parse_displayid_parameters_v2(x + offset); break; | |
1796 | case 0x21: | |
1797 | if (block_rev >= 1) | |
1798 | check_displayid_datablock_revision(x[offset + 1], 0x80, 1); | |
1799 | else | |
1800 | check_displayid_datablock_revision(x[offset + 1], 0x80, 0); | |
1801 | parse_displayid_parameters_v2(x + offset, block_rev); | |
1802 | break; | |
1736 | 1803 | case 0x22: { |
1737 | 1804 | unsigned sz = 20; |
1738 | 1805 | |
1778 | 1845 | case 0x32: { |
1779 | 1846 | unsigned sz = 6 + ((x[offset + 1] & 0x70) >> 4); |
1780 | 1847 | |
1781 | check_displayid_datablock_revision(x[offset + 1], 0x10); | |
1848 | check_displayid_datablock_revision(x[offset + 1], 0x70); | |
1782 | 1849 | for (i = 0; i < len / sz; i++) |
1783 | parse_displayid_type_10_timing(&x[offset + 3 + i * sz]); | |
1850 | parse_displayid_type_10_timing(&x[offset + 3 + i * sz], sz); | |
1784 | 1851 | break; |
1785 | 1852 | } |
1786 | 1853 | case 0x81: parse_displayid_cta_data_block(x + offset); break; |
28 | 28 | detailed_cvt_descriptor(" ", x, false); |
29 | 29 | } |
30 | 30 | if (num_st) { |
31 | // Note: the VTB-EXT standard has a mistake in the example EDID | |
32 | // that it provides: there the refresh rate (bits 5-0 of the | |
33 | // second byte) is set to 60 for 60 Hz, but this should be 0 | |
34 | // since the actual refresh rate is the value + 60. | |
35 | // | |
36 | // The documentation itself is correct, though. | |
31 | 37 | printf(" Standard Timings:\n"); |
32 | for (unsigned i = 0; i < num_st; i++, x += 2) { | |
33 | if ((x[1] & 0x3f) >= 60) | |
34 | print_standard_timing(" ", x[0], x[1] - 60, true); | |
35 | else | |
36 | print_standard_timing(" ", x[0], x[1], true, 0); | |
37 | } | |
38 | for (unsigned i = 0; i < num_st; i++, x += 2) | |
39 | print_standard_timing(" ", x[0], x[1], true); | |
38 | 40 | } |
39 | 41 | } |
17 | 17 | 70 70 70 70 70 70 70 70 70 70 70 70 70 70 70 70 |
18 | 18 | 70 70 70 70 70 70 70 70 70 70 70 70 70 70 70 5e |
19 | 19 | |
20 | 02 03 24 f0 51 61 60 5f 5e 5d 10 1f 04 13 22 21 | |
21 | 20 05 14 02 11 01 23 09 07 07 e2 00 ea e6 0d 61 | |
20 | 02 03 24 f1 51 61 60 5f 5e 5d 10 1f 04 13 22 21 | |
21 | 20 05 14 02 11 01 23 09 07 07 e2 00 ca e6 0d 61 | |
22 | 22 | 81 82 6a 84 4d d0 00 a0 f0 70 3e 80 30 20 35 00 |
23 | 23 | c0 1c 32 00 00 1e 1a 36 80 a0 70 38 1f 40 30 20 |
24 | 24 | 35 00 c0 1c 32 00 00 1a 1a 1d 00 80 51 d0 1c 20 |
25 | 25 | 40 80 35 00 c0 1c 32 00 00 1c 00 00 00 00 00 00 |
26 | 26 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |
27 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 b7 | |
28 | ||
29 | 70 20 5f 02 7c 20 00 10 00 00 00 01 00 01 00 00 | |
27 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 d6 | |
28 | ||
29 | 70 20 5f 02 7c 20 00 10 12 34 56 01 00 01 00 00 | |
30 | 30 | 00 00 00 04 54 65 73 74 21 00 1d 80 3e 28 23 00 |
31 | 31 | 0f 70 08 00 3c 8a 54 cc 84 99 68 42 0f 00 45 54 |
32 | 00 00 00 00 00 00 00 ff 22 00 14 4f 10 09 80 ff | |
33 | 0e 2f 02 27 81 57 00 6f 08 59 00 47 80 09 00 24 | |
32 | 00 00 00 00 00 00 00 ff 22 00 14 4f 10 09 84 ff | |
33 | 0e 2f 02 af 80 57 00 6f 08 59 00 07 80 09 00 24 | |
34 | 34 | 00 06 12 7f 07 37 04 3b 26 00 09 02 02 01 01 00 |
35 | e0 07 00 00 bc 00 00 00 00 00 00 00 00 00 00 00 | |
36 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90 | |
37 | ||
38 | 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00 | |
39 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
40 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
41 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
42 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
43 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
44 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
45 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90 | |
46 | ||
47 | 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00 | |
48 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
49 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
50 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
51 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
52 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
53 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
54 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90 | |
55 | ||
56 | 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00 | |
57 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
58 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
59 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
60 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
61 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
62 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
63 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90 | |
64 | ||
65 | 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00 | |
66 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
67 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
68 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
69 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
70 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
71 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
72 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90 | |
73 | ||
74 | 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00 | |
75 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
76 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
77 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
78 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
79 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
80 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
81 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90 | |
82 | ||
83 | 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00 | |
84 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
85 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
86 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
87 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
88 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
89 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
90 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90 | |
91 | ||
92 | 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00 | |
93 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
94 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
95 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
96 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
97 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
98 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
99 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90 | |
100 | ||
101 | 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00 | |
102 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
103 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
104 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
105 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
106 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
107 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
108 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90 | |
109 | ||
110 | 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00 | |
111 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
112 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
113 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
114 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
115 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
116 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
117 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90 | |
118 | ||
119 | 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00 | |
120 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
121 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
122 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
123 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
124 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
125 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
126 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90 | |
127 | ||
128 | 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00 | |
129 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
130 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
131 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
132 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
133 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
134 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
135 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90 | |
136 | ||
137 | 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00 | |
138 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
139 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
140 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
141 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
142 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
143 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
144 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90 | |
145 | ||
146 | 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00 | |
147 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
148 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
149 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
150 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
151 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
152 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
153 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90 | |
154 | ||
155 | 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00 | |
156 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
157 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
158 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
159 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
160 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
161 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
162 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90 | |
163 | ||
164 | 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00 | |
165 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
166 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
167 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
168 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
169 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
170 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
171 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90 | |
172 | ||
173 | 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00 | |
174 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
175 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
176 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
177 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
178 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
179 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
180 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90 | |
181 | ||
182 | 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00 | |
183 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
184 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
185 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
186 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
187 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
188 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
189 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90 | |
190 | ||
191 | 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00 | |
192 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
193 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
194 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
195 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
196 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
197 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
198 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90 | |
199 | ||
200 | 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00 | |
201 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
202 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
203 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
204 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
205 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
206 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
207 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90 | |
208 | ||
209 | 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00 | |
210 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
211 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
212 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
213 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
214 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
215 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
216 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90 | |
217 | ||
218 | 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00 | |
219 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
220 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
221 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
222 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
223 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
224 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
225 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90 | |
226 | ||
227 | 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00 | |
228 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
229 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
230 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
231 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
232 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
233 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
234 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90 | |
235 | ||
236 | 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00 | |
237 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
238 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
239 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
240 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
241 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
242 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
243 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90 | |
244 | ||
245 | 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00 | |
246 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
247 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
248 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
249 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
250 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
251 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
252 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90 | |
253 | ||
254 | 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00 | |
255 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
256 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
257 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
258 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
259 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
260 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
261 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90 | |
262 | ||
263 | 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00 | |
264 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
265 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
266 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
267 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
268 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
269 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
270 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90 | |
271 | ||
272 | 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00 | |
273 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
274 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
275 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
276 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
277 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
278 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
279 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90 | |
280 | ||
281 | 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00 | |
282 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
283 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
284 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
285 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
286 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
287 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
288 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90 | |
289 | ||
290 | 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00 | |
291 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
292 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
293 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
294 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
295 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
296 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
297 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90 | |
298 | ||
299 | 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00 | |
300 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
301 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
302 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
303 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
304 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
305 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
306 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90 | |
307 | ||
308 | 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00 | |
309 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
310 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
311 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
312 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
313 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
314 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
315 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90 | |
316 | ||
317 | 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00 | |
318 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
319 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
320 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
321 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
322 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
323 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
324 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90 | |
325 | ||
326 | 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00 | |
327 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
328 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
329 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
330 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
331 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
332 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
333 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90 | |
334 | ||
335 | 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00 | |
336 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
337 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
338 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
339 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
340 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
341 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
342 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90 | |
343 | ||
344 | 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00 | |
345 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
346 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
347 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
348 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
349 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
350 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
351 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90 | |
352 | ||
353 | 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00 | |
354 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
355 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
356 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
357 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
358 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
359 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
360 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90 | |
361 | ||
362 | 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00 | |
363 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
364 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
365 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
366 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
367 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
368 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
369 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90 | |
370 | ||
371 | 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00 | |
372 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
373 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
374 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
375 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
376 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
377 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
378 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90 | |
379 | ||
380 | 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00 | |
381 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
382 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
383 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
384 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
385 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
386 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
387 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90 | |
388 | ||
389 | 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00 | |
390 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
391 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
392 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
393 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
394 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
395 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
396 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90 | |
397 | ||
398 | 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00 | |
399 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
400 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
401 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
402 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
403 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
404 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
405 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90 | |
406 | ||
407 | 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00 | |
408 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
409 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
410 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
411 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
412 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
413 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
414 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90 | |
415 | ||
416 | 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00 | |
417 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
418 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
419 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
420 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
421 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
422 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
423 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90 | |
424 | ||
425 | 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00 | |
426 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
427 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
428 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
429 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
430 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
431 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
432 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90 | |
433 | ||
434 | 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00 | |
435 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
436 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
437 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
438 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
439 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
440 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
441 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90 | |
442 | ||
443 | 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00 | |
444 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
445 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
446 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
447 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
448 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
449 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
450 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90 | |
451 | ||
452 | 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00 | |
453 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
454 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
455 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
456 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
457 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
458 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
459 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90 | |
460 | ||
461 | 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00 | |
462 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
463 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
464 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
465 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
466 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
467 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
468 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90 | |
469 | ||
470 | 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00 | |
471 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
472 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
473 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
474 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
475 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
476 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
477 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90 | |
478 | ||
479 | 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00 | |
480 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
481 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
482 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
483 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
484 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
485 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
486 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90 | |
487 | ||
488 | 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00 | |
489 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
490 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
491 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
492 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
493 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
494 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
495 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90 | |
496 | ||
497 | 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00 | |
498 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
499 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
500 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
501 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
502 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
503 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
504 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90 | |
505 | ||
506 | 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00 | |
507 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
508 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
509 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
510 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
511 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
512 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
513 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90 | |
514 | ||
515 | 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00 | |
516 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
517 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
518 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
519 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
520 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
521 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
522 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90 | |
523 | ||
524 | 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00 | |
525 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
526 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
527 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
528 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
529 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
530 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
531 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90 | |
532 | ||
533 | 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00 | |
534 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
535 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
536 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
537 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
538 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
539 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
540 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90 | |
541 | ||
542 | 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00 | |
543 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
544 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
545 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
546 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
547 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
548 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
549 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90 | |
550 | ||
551 | 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00 | |
552 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
553 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
554 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
555 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
556 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
557 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
558 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90 | |
559 | ||
560 | 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00 | |
561 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
562 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
563 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
564 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
565 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
566 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
567 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90 | |
568 | ||
569 | 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00 | |
570 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
571 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
572 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
573 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
574 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
575 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
576 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90 | |
577 | ||
578 | 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00 | |
579 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
580 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
581 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
582 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
583 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
584 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
585 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90 | |
586 | ||
587 | 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00 | |
588 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
589 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
590 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
591 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
592 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
593 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
594 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90 | |
595 | ||
596 | 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00 | |
597 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
598 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
599 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
600 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
601 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
602 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
603 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90 | |
604 | ||
605 | 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00 | |
606 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
607 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
608 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
609 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
610 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
611 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
612 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90 | |
613 | ||
614 | 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00 | |
615 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
616 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
617 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
618 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
619 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
620 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
621 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90 | |
622 | ||
623 | 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00 | |
624 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
625 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
626 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
627 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
628 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
629 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
630 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90 | |
631 | ||
632 | 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00 | |
633 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
634 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
635 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
636 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
637 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
638 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
639 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90 | |
640 | ||
641 | 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00 | |
642 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
643 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
644 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
645 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
646 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
647 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
648 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90 | |
649 | ||
650 | 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00 | |
651 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
652 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
653 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
654 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
655 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
656 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
657 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90 | |
658 | ||
659 | 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00 | |
660 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
661 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
662 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
663 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
664 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
665 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
666 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90 | |
667 | ||
668 | 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00 | |
669 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
670 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
671 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
672 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
673 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
674 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
675 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90 | |
676 | ||
677 | 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00 | |
678 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
679 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
680 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
681 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
682 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
683 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
684 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90 | |
685 | ||
686 | 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00 | |
687 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
688 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
689 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
690 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
691 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
692 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
693 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90 | |
694 | ||
695 | 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00 | |
696 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
697 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
698 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
699 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
700 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
701 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
702 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90 | |
703 | ||
704 | 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00 | |
705 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
706 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
707 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
708 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
709 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
710 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
711 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90 | |
712 | ||
713 | 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00 | |
714 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
715 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
716 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
717 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
718 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
719 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
720 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90 | |
721 | ||
722 | 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00 | |
723 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
724 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
725 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
726 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
727 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
728 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
729 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90 | |
730 | ||
731 | 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00 | |
732 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
733 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
734 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
735 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
736 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
737 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
738 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90 | |
739 | ||
740 | 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00 | |
741 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
742 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
743 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
744 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
745 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
746 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
747 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90 | |
748 | ||
749 | 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00 | |
750 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
751 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
752 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
753 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
754 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
755 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
756 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90 | |
757 | ||
758 | 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00 | |
759 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
760 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
761 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
762 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
763 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
764 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
765 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90 | |
766 | ||
767 | 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00 | |
768 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
769 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
770 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
771 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
772 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
773 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
774 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90 | |
775 | ||
776 | 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00 | |
777 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
778 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
779 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
780 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
781 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
782 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
783 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90 | |
784 | ||
785 | 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00 | |
786 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
787 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
788 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
789 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
790 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
791 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
792 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90 | |
793 | ||
794 | 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00 | |
795 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
796 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
797 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
798 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
799 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
800 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
801 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90 | |
802 | ||
803 | 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00 | |
804 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
805 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
806 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
807 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
808 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
809 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
810 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90 | |
811 | ||
812 | 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00 | |
813 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
814 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
815 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
816 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
817 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
818 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
819 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90 | |
820 | ||
821 | 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00 | |
822 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
823 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
824 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
825 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
826 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
827 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
828 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90 | |
829 | ||
830 | 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00 | |
831 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
832 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
833 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
834 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
835 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
836 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
837 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90 | |
838 | ||
839 | 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00 | |
840 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
841 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
842 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
843 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
844 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
845 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
846 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90 | |
847 | ||
848 | 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00 | |
849 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
850 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
851 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
852 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
853 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
854 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
855 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90 | |
856 | ||
857 | 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00 | |
858 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
859 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
860 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
861 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
862 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
863 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
864 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90 | |
865 | ||
866 | 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00 | |
867 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
868 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
869 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
870 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
871 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
872 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
873 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90 | |
874 | ||
875 | 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00 | |
876 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
877 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
878 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
879 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
880 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
881 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
882 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90 | |
883 | ||
884 | 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00 | |
885 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
886 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
887 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
888 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
889 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
890 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
891 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90 | |
892 | ||
893 | 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00 | |
894 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
895 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
896 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
897 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
898 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
899 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
900 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90 | |
901 | ||
902 | 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00 | |
903 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
904 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
905 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
906 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
907 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
908 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
909 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90 | |
910 | ||
911 | 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00 | |
912 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
913 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
914 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
915 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
916 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
917 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
918 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90 | |
919 | ||
920 | 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00 | |
921 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
922 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
923 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
924 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
925 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
926 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
927 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90 | |
928 | ||
929 | 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00 | |
930 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
931 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
932 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
933 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
934 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
935 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
936 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90 | |
937 | ||
938 | 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00 | |
939 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
940 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
941 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
942 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
943 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
944 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
945 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90 | |
946 | ||
947 | 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00 | |
948 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
949 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
950 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
951 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
952 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
953 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
954 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90 | |
955 | ||
956 | 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00 | |
957 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
958 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
959 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
960 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
961 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
962 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
963 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90 | |
964 | ||
965 | 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00 | |
966 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
967 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
968 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
969 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
970 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
971 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
972 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90 | |
973 | ||
974 | 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00 | |
975 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
976 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
977 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
978 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
979 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
980 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
981 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90 | |
982 | ||
983 | 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00 | |
984 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
985 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
986 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
987 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
988 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
989 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
990 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90 | |
991 | ||
992 | 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00 | |
993 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
994 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
995 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
996 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
997 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
998 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
999 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90 | |
1000 | ||
1001 | 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00 | |
1002 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
1003 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
1004 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
1005 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
1006 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
1007 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
1008 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90 | |
1009 | ||
1010 | 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00 | |
1011 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
1012 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
1013 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
1014 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
1015 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
1016 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
1017 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90 | |
1018 | ||
1019 | 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00 | |
1020 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
1021 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
1022 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
1023 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
1024 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
1025 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
1026 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90 | |
1027 | ||
1028 | 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00 | |
1029 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
1030 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
1031 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
1032 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
1033 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
1034 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
1035 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90 | |
1036 | ||
1037 | 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00 | |
1038 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
1039 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
1040 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
1041 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
1042 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
1043 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
1044 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90 | |
1045 | ||
1046 | 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00 | |
1047 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
1048 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
1049 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
1050 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
1051 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
1052 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
1053 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90 | |
1054 | ||
1055 | 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00 | |
1056 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
1057 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
1058 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
1059 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
1060 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
1061 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
1062 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90 | |
1063 | ||
1064 | 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00 | |
1065 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
1066 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
1067 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
1068 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
1069 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
1070 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
1071 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90 | |
1072 | ||
1073 | 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00 | |
1074 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
1075 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
1076 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
1077 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
1078 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
1079 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
1080 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90 | |
1081 | ||
1082 | 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00 | |
1083 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
1084 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
1085 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
1086 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
1087 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
1088 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
1089 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90 | |
1090 | ||
1091 | 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00 | |
1092 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
1093 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
1094 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
1095 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
1096 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
1097 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
1098 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90 | |
1099 | ||
1100 | 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00 | |
1101 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
1102 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
1103 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
1104 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
1105 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
1106 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
1107 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90 | |
1108 | ||
1109 | 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00 | |
1110 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
1111 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
1112 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
1113 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
1114 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
1115 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
1116 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90 | |
1117 | ||
1118 | 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00 | |
1119 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
1120 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
1121 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
1122 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
1123 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
1124 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
1125 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90 | |
1126 | ||
1127 | 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00 | |
1128 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
1129 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
1130 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
1131 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
1132 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
1133 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
1134 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90 | |
1135 | ||
1136 | 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00 | |
1137 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
1138 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
1139 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
1140 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
1141 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
1142 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
1143 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90 | |
1144 | ||
1145 | 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00 | |
1146 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
1147 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
1148 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
1149 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
1150 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
1151 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
1152 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90 | |
35 | e0 07 00 00 d5 00 00 00 00 00 00 00 00 00 00 00 | |
36 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90 | |
37 | ||
38 | 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00 | |
39 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
40 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
41 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
42 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
43 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
44 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
45 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90 | |
46 | ||
47 | 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00 | |
48 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
49 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
50 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
51 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
52 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
53 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
54 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90 | |
55 | ||
56 | 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00 | |
57 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
58 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
59 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
60 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
61 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
62 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
63 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90 | |
64 | ||
65 | 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00 | |
66 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
67 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
68 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
69 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
70 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
71 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
72 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90 | |
73 | ||
74 | 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00 | |
75 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
76 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
77 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
78 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
79 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
80 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
81 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90 | |
82 | ||
83 | 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00 | |
84 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
85 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
86 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
87 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
88 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
89 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
90 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90 | |
91 | ||
92 | 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00 | |
93 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
94 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
95 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
96 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
97 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
98 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
99 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90 | |
100 | ||
101 | 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00 | |
102 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
103 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
104 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
105 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
106 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
107 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
108 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90 | |
109 | ||
110 | 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00 | |
111 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
112 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
113 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
114 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
115 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
116 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
117 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90 | |
118 | ||
119 | 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00 | |
120 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
121 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
122 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
123 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
124 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
125 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
126 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90 | |
127 | ||
128 | 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00 | |
129 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
130 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
131 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
132 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
133 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
134 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
135 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90 | |
136 | ||
137 | 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00 | |
138 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
139 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
140 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
141 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
142 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
143 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
144 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90 | |
145 | ||
146 | 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00 | |
147 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
148 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
149 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
150 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
151 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
152 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
153 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90 | |
154 | ||
155 | 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00 | |
156 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
157 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
158 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
159 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
160 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
161 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
162 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90 | |
163 | ||
164 | 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00 | |
165 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
166 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
167 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
168 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
169 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
170 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
171 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90 | |
172 | ||
173 | 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00 | |
174 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
175 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
176 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
177 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
178 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
179 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
180 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90 | |
181 | ||
182 | 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00 | |
183 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
184 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
185 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
186 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
187 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
188 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
189 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90 | |
190 | ||
191 | 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00 | |
192 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
193 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
194 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
195 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
196 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
197 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
198 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90 | |
199 | ||
200 | 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00 | |
201 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
202 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
203 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
204 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
205 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
206 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
207 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90 | |
208 | ||
209 | 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00 | |
210 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
211 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
212 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
213 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
214 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
215 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
216 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90 | |
217 | ||
218 | 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00 | |
219 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
220 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
221 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
222 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
223 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
224 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
225 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90 | |
226 | ||
227 | 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00 | |
228 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
229 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
230 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
231 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
232 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
233 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
234 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90 | |
235 | ||
236 | 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00 | |
237 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
238 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
239 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
240 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
241 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
242 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
243 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90 | |
244 | ||
245 | 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00 | |
246 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
247 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
248 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
249 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
250 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
251 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
252 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90 | |
253 | ||
254 | 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00 | |
255 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
256 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
257 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
258 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
259 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
260 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
261 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90 | |
262 | ||
263 | 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00 | |
264 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
265 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
266 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
267 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
268 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
269 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
270 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90 | |
271 | ||
272 | 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00 | |
273 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
274 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
275 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
276 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
277 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
278 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
279 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90 | |
280 | ||
281 | 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00 | |
282 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
283 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
284 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
285 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
286 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
287 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
288 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90 | |
289 | ||
290 | 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00 | |
291 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
292 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
293 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
294 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
295 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
296 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
297 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90 | |
298 | ||
299 | 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00 | |
300 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
301 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
302 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
303 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
304 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
305 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
306 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90 | |
307 | ||
308 | 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00 | |
309 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
310 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
311 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
312 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
313 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
314 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
315 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90 | |
316 | ||
317 | 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00 | |
318 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
319 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
320 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
321 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
322 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
323 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
324 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90 | |
325 | ||
326 | 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00 | |
327 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
328 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
329 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
330 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
331 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
332 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
333 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90 | |
334 | ||
335 | 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00 | |
336 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
337 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
338 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
339 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
340 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
341 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
342 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90 | |
343 | ||
344 | 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00 | |
345 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
346 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
347 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
348 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
349 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
350 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
351 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90 | |
352 | ||
353 | 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00 | |
354 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
355 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
356 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
357 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
358 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
359 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
360 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90 | |
361 | ||
362 | 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00 | |
363 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
364 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
365 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
366 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
367 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
368 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
369 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90 | |
370 | ||
371 | 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00 | |
372 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
373 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
374 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
375 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
376 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
377 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
378 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90 | |
379 | ||
380 | 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00 | |
381 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
382 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
383 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
384 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
385 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
386 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
387 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90 | |
388 | ||
389 | 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00 | |
390 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
391 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
392 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
393 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
394 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
395 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
396 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90 | |
397 | ||
398 | 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00 | |
399 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
400 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
401 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
402 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
403 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
404 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
405 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90 | |
406 | ||
407 | 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00 | |
408 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
409 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
410 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
411 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
412 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
413 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
414 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90 | |
415 | ||
416 | 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00 | |
417 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
418 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
419 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
420 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
421 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
422 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
423 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90 | |
424 | ||
425 | 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00 | |
426 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
427 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
428 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
429 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
430 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
431 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
432 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90 | |
433 | ||
434 | 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00 | |
435 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
436 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
437 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
438 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
439 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
440 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
441 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90 | |
442 | ||
443 | 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00 | |
444 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
445 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
446 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
447 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
448 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
449 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
450 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90 | |
451 | ||
452 | 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00 | |
453 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
454 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
455 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
456 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
457 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
458 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
459 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90 | |
460 | ||
461 | 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00 | |
462 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
463 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
464 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
465 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
466 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
467 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
468 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90 | |
469 | ||
470 | 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00 | |
471 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
472 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
473 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
474 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
475 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
476 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
477 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90 | |
478 | ||
479 | 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00 | |
480 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
481 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
482 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
483 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
484 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
485 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
486 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90 | |
487 | ||
488 | 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00 | |
489 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
490 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
491 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
492 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
493 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
494 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
495 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90 | |
496 | ||
497 | 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00 | |
498 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
499 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
500 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
501 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
502 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
503 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
504 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90 | |
505 | ||
506 | 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00 | |
507 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
508 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
509 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
510 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
511 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
512 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
513 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90 | |
514 | ||
515 | 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00 | |
516 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
517 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
518 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
519 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
520 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
521 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
522 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90 | |
523 | ||
524 | 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00 | |
525 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
526 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
527 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
528 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
529 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
530 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
531 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90 | |
532 | ||
533 | 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00 | |
534 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
535 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
536 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
537 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
538 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
539 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
540 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90 | |
541 | ||
542 | 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00 | |
543 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
544 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
545 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
546 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
547 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
548 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
549 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90 | |
550 | ||
551 | 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00 | |
552 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
553 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
554 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
555 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
556 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
557 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
558 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90 | |
559 | ||
560 | 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00 | |
561 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
562 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
563 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
564 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
565 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
566 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
567 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90 | |
568 | ||
569 | 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00 | |
570 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
571 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
572 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
573 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
574 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
575 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
576 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90 | |
577 | ||
578 | 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00 | |
579 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
580 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
581 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
582 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
583 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
584 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
585 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90 | |
586 | ||
587 | 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00 | |
588 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
589 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
590 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
591 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
592 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
593 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
594 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90 | |
595 | ||
596 | 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00 | |
597 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
598 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
599 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
600 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
601 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
602 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
603 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90 | |
604 | ||
605 | 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00 | |
606 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
607 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
608 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
609 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
610 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
611 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
612 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90 | |
613 | ||
614 | 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00 | |
615 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
616 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
617 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
618 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
619 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
620 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
621 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90 | |
622 | ||
623 | 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00 | |
624 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
625 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
626 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
627 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
628 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
629 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
630 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90 | |
631 | ||
632 | 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00 | |
633 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
634 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
635 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
636 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
637 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
638 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
639 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90 | |
640 | ||
641 | 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00 | |
642 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
643 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
644 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
645 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
646 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
647 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
648 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90 | |
649 | ||
650 | 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00 | |
651 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
652 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
653 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
654 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
655 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
656 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
657 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90 | |
658 | ||
659 | 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00 | |
660 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
661 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
662 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
663 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
664 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
665 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
666 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90 | |
667 | ||
668 | 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00 | |
669 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
670 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
671 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
672 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
673 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
674 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
675 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90 | |
676 | ||
677 | 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00 | |
678 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
679 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
680 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
681 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
682 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
683 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
684 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90 | |
685 | ||
686 | 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00 | |
687 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
688 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
689 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
690 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
691 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
692 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
693 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90 | |
694 | ||
695 | 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00 | |
696 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
697 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
698 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
699 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
700 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
701 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
702 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90 | |
703 | ||
704 | 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00 | |
705 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
706 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
707 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
708 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
709 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
710 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
711 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90 | |
712 | ||
713 | 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00 | |
714 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
715 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
716 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
717 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
718 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
719 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
720 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90 | |
721 | ||
722 | 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00 | |
723 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
724 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
725 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
726 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
727 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
728 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
729 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90 | |
730 | ||
731 | 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00 | |
732 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
733 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
734 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
735 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
736 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
737 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
738 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90 | |
739 | ||
740 | 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00 | |
741 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
742 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
743 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
744 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
745 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
746 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
747 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90 | |
748 | ||
749 | 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00 | |
750 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
751 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
752 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
753 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
754 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
755 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
756 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90 | |
757 | ||
758 | 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00 | |
759 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
760 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
761 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
762 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
763 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
764 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
765 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90 | |
766 | ||
767 | 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00 | |
768 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
769 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
770 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
771 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
772 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
773 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
774 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90 | |
775 | ||
776 | 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00 | |
777 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
778 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
779 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
780 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
781 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
782 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
783 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90 | |
784 | ||
785 | 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00 | |
786 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
787 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
788 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
789 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
790 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
791 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
792 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90 | |
793 | ||
794 | 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00 | |
795 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
796 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
797 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
798 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
799 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
800 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
801 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90 | |
802 | ||
803 | 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00 | |
804 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
805 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
806 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
807 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
808 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
809 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
810 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90 | |
811 | ||
812 | 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00 | |
813 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
814 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
815 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
816 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
817 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
818 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
819 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90 | |
820 | ||
821 | 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00 | |
822 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
823 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
824 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
825 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
826 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
827 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
828 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90 | |
829 | ||
830 | 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00 | |
831 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
832 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
833 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
834 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
835 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
836 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
837 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90 | |
838 | ||
839 | 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00 | |
840 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
841 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
842 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
843 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
844 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
845 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
846 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90 | |
847 | ||
848 | 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00 | |
849 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
850 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
851 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
852 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
853 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
854 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
855 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90 | |
856 | ||
857 | 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00 | |
858 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
859 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
860 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
861 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
862 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
863 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
864 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90 | |
865 | ||
866 | 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00 | |
867 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
868 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
869 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
870 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
871 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
872 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
873 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90 | |
874 | ||
875 | 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00 | |
876 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
877 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
878 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
879 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
880 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
881 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
882 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90 | |
883 | ||
884 | 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00 | |
885 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
886 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
887 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
888 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
889 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
890 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
891 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90 | |
892 | ||
893 | 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00 | |
894 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
895 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
896 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
897 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
898 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
899 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
900 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90 | |
901 | ||
902 | 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00 | |
903 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
904 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
905 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
906 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
907 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
908 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
909 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90 | |
910 | ||
911 | 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00 | |
912 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
913 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
914 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
915 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
916 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
917 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
918 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90 | |
919 | ||
920 | 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00 | |
921 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
922 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
923 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
924 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
925 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
926 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
927 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90 | |
928 | ||
929 | 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00 | |
930 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
931 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
932 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
933 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
934 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
935 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
936 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90 | |
937 | ||
938 | 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00 | |
939 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
940 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
941 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
942 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
943 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
944 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
945 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90 | |
946 | ||
947 | 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00 | |
948 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
949 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
950 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
951 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
952 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
953 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
954 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90 | |
955 | ||
956 | 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00 | |
957 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
958 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
959 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
960 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
961 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
962 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
963 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90 | |
964 | ||
965 | 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00 | |
966 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
967 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
968 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
969 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
970 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
971 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
972 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90 | |
973 | ||
974 | 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00 | |
975 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
976 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
977 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
978 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
979 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
980 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
981 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90 | |
982 | ||
983 | 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00 | |
984 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
985 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
986 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
987 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
988 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
989 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
990 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90 | |
991 | ||
992 | 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00 | |
993 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
994 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
995 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
996 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
997 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
998 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
999 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90 | |
1000 | ||
1001 | 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00 | |
1002 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
1003 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
1004 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
1005 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
1006 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
1007 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
1008 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90 | |
1009 | ||
1010 | 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00 | |
1011 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
1012 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
1013 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
1014 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
1015 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
1016 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
1017 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90 | |
1018 | ||
1019 | 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00 | |
1020 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
1021 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
1022 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
1023 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
1024 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
1025 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
1026 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90 | |
1027 | ||
1028 | 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00 | |
1029 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
1030 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
1031 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
1032 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
1033 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
1034 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
1035 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90 | |
1036 | ||
1037 | 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00 | |
1038 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
1039 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
1040 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
1041 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
1042 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
1043 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
1044 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90 | |
1045 | ||
1046 | 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00 | |
1047 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
1048 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
1049 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
1050 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
1051 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
1052 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
1053 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90 | |
1054 | ||
1055 | 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00 | |
1056 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
1057 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
1058 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
1059 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
1060 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
1061 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
1062 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90 | |
1063 | ||
1064 | 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00 | |
1065 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
1066 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
1067 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
1068 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
1069 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
1070 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
1071 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90 | |
1072 | ||
1073 | 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00 | |
1074 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
1075 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
1076 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
1077 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
1078 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
1079 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
1080 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90 | |
1081 | ||
1082 | 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00 | |
1083 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
1084 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
1085 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
1086 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
1087 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
1088 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
1089 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90 | |
1090 | ||
1091 | 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00 | |
1092 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
1093 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
1094 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
1095 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
1096 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
1097 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
1098 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90 | |
1099 | ||
1100 | 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00 | |
1101 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
1102 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
1103 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
1104 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
1105 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
1106 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
1107 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90 | |
1108 | ||
1109 | 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00 | |
1110 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
1111 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
1112 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
1113 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
1114 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
1115 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
1116 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90 | |
1117 | ||
1118 | 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00 | |
1119 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
1120 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
1121 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
1122 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
1123 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
1124 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
1125 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90 | |
1126 | ||
1127 | 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00 | |
1128 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
1129 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
1130 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
1131 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
1132 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
1133 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
1134 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90 | |
1135 | ||
1136 | 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00 | |
1137 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
1138 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
1139 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
1140 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
1141 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
1142 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
1143 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90 | |
1144 | ||
1145 | 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00 | |
1146 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
1147 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
1148 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
1149 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
1150 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
1151 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
1152 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90 |
17 | 17 | 70 70 70 70 70 70 70 70 70 70 70 70 70 70 70 70 |
18 | 18 | 70 70 70 70 70 70 70 70 70 70 70 70 70 70 70 5e |
19 | 19 | |
20 | 02 03 24 f0 51 61 60 5f 5e 5d 10 1f 04 13 22 21 | |
21 | 20 05 14 02 11 01 23 09 07 07 e2 00 ea e6 0d 61 | |
20 | 02 03 24 f1 51 61 60 5f 5e 5d 10 1f 04 13 22 21 | |
21 | 20 05 14 02 11 01 23 09 07 07 e2 00 ca e6 0d 61 | |
22 | 22 | 81 82 6a 84 4d d0 00 a0 f0 70 3e 80 30 20 35 00 |
23 | 23 | c0 1c 32 00 00 1e 1a 36 80 a0 70 38 1f 40 30 20 |
24 | 24 | 35 00 c0 1c 32 00 00 1a 1a 1d 00 80 51 d0 1c 20 |
25 | 25 | 40 80 35 00 c0 1c 32 00 00 1c 00 00 00 00 00 00 |
26 | 26 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |
27 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 b7 | |
28 | ||
29 | 70 20 5f 02 fa 20 00 10 00 00 00 01 00 01 00 00 | |
27 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 d6 | |
28 | ||
29 | 70 20 5f 02 fa 20 00 10 12 34 56 01 00 01 00 00 | |
30 | 30 | 00 00 00 04 54 65 73 74 21 00 1d 80 3e 28 23 00 |
31 | 31 | 0f 70 08 00 3c 8a 54 cc 84 99 68 42 0f 00 45 54 |
32 | 00 00 00 00 00 00 00 ff 22 00 14 4f 10 09 80 ff | |
33 | 0e 2f 02 27 81 57 00 6f 08 59 00 47 80 09 00 24 | |
32 | 00 00 00 00 00 00 00 ff 22 00 14 4f 10 09 84 ff | |
33 | 0e 2f 02 af 80 57 00 6f 08 59 00 07 80 09 00 24 | |
34 | 34 | 00 06 12 7f 07 37 04 3b 26 00 09 02 02 01 01 00 |
35 | e0 07 00 00 3e 00 00 00 00 00 00 00 00 00 00 00 | |
35 | e0 07 00 00 57 00 00 00 00 00 00 00 00 00 00 00 | |
36 | 36 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90 |
37 | 37 | |
38 | 38 | 70 20 04 00 00 23 00 01 02 b6 00 00 00 00 00 00 |