Print this page
6117 Many small bugs prevent a clean build on SPARC
Split |
Close |
Expand all |
Collapse all |
--- old/usr/src/lib/Makefile
+++ new/usr/src/lib/Makefile
1 1 #
2 2 # CDDL HEADER START
3 3 #
4 4 # The contents of this file are subject to the terms of the
5 5 # Common Development and Distribution License (the "License").
6 6 # You may not use this file except in compliance with the License.
7 7 #
8 8 # You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
9 9 # or http://www.opensolaris.org/os/licensing.
10 10 # See the License for the specific language governing permissions
11 11 # and limitations under the License.
12 12 #
13 13 # When distributing Covered Code, include this CDDL HEADER in each
14 14 # file and include the License file at usr/src/OPENSOLARIS.LICENSE.
15 15 # If applicable, add the following below this CDDL HEADER, with the
16 16 # fields enclosed by brackets "[]" replaced with your own identifying
17 17 # information: Portions Copyright [yyyy] [name of copyright owner]
↓ open down ↓ |
17 lines elided |
↑ open up ↑ |
18 18 #
19 19 # CDDL HEADER END
20 20 #
21 21
22 22 # Copyright 2011 Nexenta Systems, Inc. All rights reserved.
23 23 # Copyright (c) 1989, 2010, Oracle and/or its affiliates. All rights reserved.
24 24 # Copyright (c) 2012 by Delphix. All rights reserved.
25 25 # Copyright (c) 2012, Joyent, Inc. All rights reserved.
26 26 # Copyright (c) 2013 Gary Mills
27 27 # Copyright 2014 Garrett D'Amore <garrett@damore.org>
28 +# Copyright (c) 2015 Gary Mills
28 29
29 30 include ../Makefile.master
30 31
31 32 # Note that libcurses installs commands along with its library.
32 33 # This is a minor bug which probably should be fixed.
33 34 # Note also that a few extra libraries are kept in cmd source.
34 35 #
35 36 # Certain libraries are linked with, hence depend on, other libraries.
36 37 #
37 38 # Although we have historically used .WAIT to express dependencies, it
38 39 # reduces the amount of parallelism and thus lengthens the time it
39 40 # takes to build the libraries. Thus, we now require that any new
40 41 # libraries explicitly call out their dependencies. Eventually, all
41 42 # the library dependencies will be called out explicitly. See
42 43 # "Library interdependencies" near the end of this file.
43 44 #
44 45 # Aside from explicit dependencies (and legacy .WAITs), all libraries
45 46 # are built in parallel.
46 47 #
47 48 .PARALLEL:
48 49
49 50 SUBDIRS= \
50 51 common .WAIT \
51 52 ../cmd/sgs/libconv \
52 53 ../cmd/sgs/libdl .WAIT
53 54
54 55 SUBDIRS += \
55 56 libc .WAIT \
56 57 ../cmd/sgs/libelf .WAIT \
57 58 c_synonyms \
58 59 libmd \
59 60 libmd5 \
60 61 librsm \
61 62 libmp .WAIT \
62 63 libnsl \
63 64 libsecdb .WAIT \
64 65 librpcsvc \
65 66 libsocket .WAIT \
66 67 libsctp \
67 68 libsip \
68 69 libcommputil \
69 70 libresolv \
70 71 libresolv2 .WAIT \
71 72 libw .WAIT \
72 73 libintl .WAIT \
73 74 ../cmd/sgs/librtld_db \
74 75 libaio \
75 76 libast \
76 77 libdll \
77 78 libcmd \
78 79 libshell \
79 80 libsum \
80 81 librt \
81 82 libadm \
82 83 libctf \
83 84 libdtrace \
84 85 libdtrace_jni \
85 86 libcurses \
86 87 libtermcap \
87 88 libgen \
88 89 libgss \
89 90 libpam \
90 91 libuuid \
91 92 libthread \
92 93 libpthread .WAIT \
93 94 libslp \
94 95 libbsdmalloc \
95 96 libdoor \
96 97 libdevinfo \
97 98 libdladm \
98 99 libdlpi \
99 100 libeti \
100 101 libcrypt \
101 102 libdns_sd \
102 103 libefi \
103 104 libfstyp \
104 105 libwanboot \
105 106 libwanbootutil \
106 107 libcryptoutil \
107 108 libinetutil \
108 109 libipadm \
109 110 libipd \
110 111 libipmp \
111 112 libiscsit \
112 113 libkmf \
113 114 libkstat \
114 115 libkvm \
115 116 liblm \
116 117 libmalloc \
117 118 libmapmalloc \
118 119 libmtmalloc \
119 120 libnls \
120 121 libnwam \
121 122 libsmbios \
122 123 libtecla \
123 124 libumem \
124 125 libnvpair .WAIT \
125 126 libexacct \
126 127 libsasl \
127 128 libldap5 \
128 129 libsldap .WAIT \
129 130 libbsm \
130 131 libsys \
131 132 libsysevent \
132 133 libnisdb \
133 134 libpool \
134 135 libpp \
135 136 libproc \
136 137 libproject \
137 138 libsendfile \
138 139 nametoaddr \
139 140 ncad_addr \
140 141 hbaapi \
141 142 smhba \
142 143 sun_fc \
143 144 sun_sas \
144 145 gss_mechs/mech_krb5 .WAIT \
145 146 libkrb5 .WAIT \
146 147 krb5 .WAIT \
147 148 libsmbfs \
148 149 libfcoe \
149 150 libsrpt \
150 151 libstmf \
151 152 libstmfproxy \
152 153 libnsctl \
153 154 libunistat \
154 155 libdscfg \
155 156 librdc \
156 157 libinstzones \
157 158 libpkg \
158 159 libpcidb \
159 160 libm1 \
160 161 libm \
161 162 libmvec
162 163
163 164
164 165 SUBDIRS += \
165 166 passwdutil \
166 167 pam_modules \
167 168 crypt_modules \
168 169 libadt_jni \
169 170 abi \
170 171 auditd_plugins \
171 172 libvolmgt \
172 173 libdevice \
173 174 libdevid \
174 175 libc_db \
175 176 libndmp \
176 177 libsec \
177 178 libtnfprobe \
178 179 libtnf \
179 180 libtnfctl \
180 181 libdhcpagent \
181 182 libdhcputil \
182 183 libxnet \
183 184 libipsecutil \
184 185 nsswitch \
185 186 print \
186 187 libuutil \
187 188 libscf \
188 189 libinetsvc \
189 190 librestart \
190 191 libsched \
191 192 libelfsign \
192 193 pkcs11 .WAIT \
193 194 libpctx .WAIT \
194 195 libcpc \
195 196 getloginx \
196 197 watchmalloc \
197 198 extendedFILE \
198 199 madv \
199 200 mpss \
200 201 libdisasm \
201 202 libwrap \
202 203 libxcurses \
203 204 libxcurses2 \
204 205 libbrand .WAIT \
205 206 libzonecfg \
206 207 libzoneinfo \
207 208 libzonestat \
208 209 libtsnet \
209 210 libtsol \
210 211 gss_mechs/mech_spnego \
211 212 gss_mechs/mech_dummy \
212 213 gss_mechs/mech_dh \
213 214 rpcsec_gss \
214 215 libraidcfg .WAIT \
215 216 librcm .WAIT \
216 217 libcfgadm .WAIT \
217 218 libpicl .WAIT \
218 219 libpicltree .WAIT \
219 220 raidcfg_plugins \
220 221 cfgadm_plugins \
221 222 libmail \
222 223 lvm \
223 224 libsmedia \
224 225 libipp \
225 226 libdiskmgt \
226 227 liblgrp \
227 228 libfsmgt \
228 229 fm \
229 230 libavl \
230 231 libcmdutils \
231 232 libcontract \
232 233 ../cmd/sendmail/libmilter \
233 234 sasl_plugins \
234 235 udapl \
235 236 libzpool \
236 237 libzfs_core \
237 238 libzfs \
238 239 libbe \
239 240 pylibbe \
240 241 libzfs_jni \
241 242 pyzfs \
242 243 pysolaris \
243 244 libmapid \
244 245 brand \
245 246 policykit \
246 247 hal \
247 248 libshare \
248 249 libsqlite \
249 250 libidmap \
250 251 libadutils \
251 252 libipmi \
252 253 libexacct/demo \
253 254 libvrrpadm \
254 255 libvscan \
255 256 libgrubmgmt \
256 257 libfakekernel \
257 258 smbsrv \
258 259 libilb \
259 260 scsi \
260 261 libima \
261 262 libsun_ima \
262 263 mpapi \
263 264 librstp \
264 265 libreparse \
265 266 libhotplug \
266 267 libfruutils .WAIT \
267 268 libfru \
268 269 $($(MACH)_SUBDIRS)
269 270
270 271 i386_SUBDIRS= \
271 272 libfdisk \
272 273 libsaveargs
273 274
274 275 sparc_SUBDIRS= .WAIT \
275 276 efcode \
276 277 libds \
277 278 libdscp \
278 279 libprtdiag .WAIT \
279 280 libprtdiag_psr \
280 281 libpri \
281 282 librsc \
282 283 storage \
283 284 libpcp \
284 285 libtsalarm \
285 286 libv12n
286 287
287 288 FM_sparc_DEPLIBS= libpri
288 289
289 290 fm: \
290 291 libexacct \
291 292 libipmi \
292 293 libzfs \
293 294 scsi \
294 295 $(FM_$(MACH)_DEPLIBS)
295 296
296 297 #
297 298 # Create a special version of $(SUBDIRS) with no .WAIT's, for use with the
298 299 # clean and clobber targets (for more information, see those targets, below).
299 300 #
300 301 NOWAIT_SUBDIRS= $(SUBDIRS:.WAIT=)
301 302
302 303 DCSUBDIRS = \
303 304 lvm
304 305
305 306 MSGSUBDIRS= \
306 307 abi \
307 308 auditd_plugins \
308 309 brand \
309 310 cfgadm_plugins \
310 311 gss_mechs/mech_dh \
311 312 gss_mechs/mech_krb5 \
312 313 krb5 \
313 314 libast \
314 315 libbsm \
315 316 libc \
316 317 libcfgadm \
317 318 libcmd \
318 319 libcontract \
319 320 libcurses \
320 321 libdhcputil \
321 322 libipsecutil \
322 323 libdiskmgt \
323 324 libdladm \
324 325 libdll \
325 326 libgrubmgmt \
326 327 libgss \
327 328 libidmap \
328 329 libipmp \
329 330 libilb \
330 331 libinetutil \
331 332 libinstzones \
332 333 libipadm \
333 334 libnsl \
334 335 libnwam \
335 336 libpam \
336 337 libpicl \
337 338 libpool \
338 339 libpkg \
339 340 libpp \
340 341 libscf \
341 342 libsasl \
342 343 libldap5 \
343 344 libsecdb \
344 345 libshare \
345 346 libshell \
346 347 libsldap \
347 348 libslp \
348 349 libsmbfs \
349 350 libsmedia \
350 351 libsum \
351 352 libtsol \
352 353 libuutil \
353 354 libvrrpadm \
354 355 libvscan \
355 356 libwanboot \
356 357 libwanbootutil \
357 358 libzfs \
358 359 libzonecfg \
359 360 lvm \
360 361 madv \
361 362 mpss \
362 363 pam_modules \
363 364 pyzfs \
364 365 pysolaris \
365 366 rpcsec_gss \
366 367 libreparse
367 368 MSGSUBDIRS += \
368 369 $($(MACH)_MSGSUBDIRS)
369 370
370 371 sparc_MSGSUBDIRS= \
371 372 libprtdiag \
372 373 libprtdiag_psr
373 374
374 375 i386_MSGSUBDIRS= libfdisk
375 376
376 377 HDRSUBDIRS= \
377 378 auditd_plugins \
378 379 libast \
379 380 libbrand \
380 381 libbsm \
381 382 libc \
382 383 libcmd \
383 384 libcmdutils \
384 385 libcommputil \
385 386 libcontract \
386 387 libcpc \
387 388 libctf \
388 389 libcurses \
389 390 libtermcap \
390 391 libcryptoutil \
391 392 libdevice \
392 393 libdevid \
393 394 libdevinfo \
394 395 libdiskmgt \
395 396 libdladm \
396 397 libdll \
397 398 libdlpi \
398 399 libdhcpagent \
399 400 libdhcputil \
400 401 libdisasm \
401 402 libdns_sd \
402 403 libdscfg \
403 404 libdtrace \
404 405 libdtrace_jni \
405 406 libelfsign \
406 407 libeti \
407 408 libfakekernel \
408 409 libfru \
409 410 libfstyp \
410 411 libgen \
411 412 libipadm \
412 413 libipd \
413 414 libipsecutil \
414 415 libinetsvc \
415 416 libinetutil \
416 417 libinstzones \
417 418 libipmi \
418 419 libipmp \
419 420 libipp \
420 421 libiscsit \
421 422 libkstat \
422 423 libkvm \
423 424 libmail \
424 425 libmd \
425 426 libmtmalloc \
426 427 libndmp \
427 428 libnvpair \
428 429 libnsctl \
429 430 libnsl \
430 431 libnwam \
431 432 libpam \
432 433 libpcidb \
433 434 libpctx \
434 435 libpicl \
435 436 libpicltree \
436 437 libpool \
437 438 libpp \
438 439 libproc \
439 440 libraidcfg \
440 441 librcm \
441 442 librdc \
442 443 libscf \
443 444 libsip \
444 445 libsmbios \
445 446 librestart \
446 447 librpcsvc \
447 448 librsm \
448 449 librstp \
449 450 libsasl \
450 451 libsec \
451 452 libshell \
452 453 libslp \
453 454 libsmedia \
454 455 libsocket \
455 456 libsqlite \
456 457 libfcoe \
457 458 libsrpt \
458 459 libstmf \
459 460 libstmfproxy \
460 461 libsum \
461 462 libsysevent \
462 463 libtecla \
463 464 libtnf \
464 465 libtnfctl \
465 466 libtnfprobe \
466 467 libtsnet \
467 468 libtsol \
468 469 libvrrpadm \
469 470 libvolmgt \
470 471 libumem \
471 472 libunistat \
472 473 libuutil \
473 474 libwanboot \
474 475 libwanbootutil \
475 476 libwrap \
476 477 libxcurses2 \
477 478 libzfs \
478 479 libzfs_core \
479 480 libzfs_jni \
480 481 libzoneinfo \
481 482 libzonestat \
482 483 hal \
483 484 policykit \
484 485 lvm \
485 486 pkcs11 \
486 487 passwdutil \
487 488 ../cmd/sendmail/libmilter \
488 489 fm \
489 490 udapl \
490 491 libmapid \
491 492 libkrb5 \
492 493 libsmbfs \
493 494 libshare \
494 495 libidmap \
495 496 libvscan \
496 497 libgrubmgmt \
497 498 smbsrv \
498 499 libilb \
499 500 scsi \
500 501 hbaapi \
501 502 smhba \
502 503 libima \
503 504 libsun_ima \
504 505 mpapi \
505 506 libreparse \
506 507 $($(MACH)_HDRSUBDIRS)
507 508
508 509 i386_HDRSUBDIRS= \
509 510 libfdisk \
510 511 libsaveargs
511 512
512 513 sparc_HDRSUBDIRS= \
513 514 libds \
514 515 libdscp \
515 516 libpri \
516 517 libv12n \
517 518 storage
518 519
519 520 all := TARGET= all
520 521 check := TARGET= check
521 522 clean := TARGET= clean
522 523 clobber := TARGET= clobber
523 524 install := TARGET= install
524 525 install_h := TARGET= install_h
525 526 lint := TARGET= lint
526 527 _dc := TARGET= _dc
527 528 _msg := TARGET= _msg
528 529
529 530 .KEEP_STATE:
530 531
531 532 #
532 533 # For the all and install targets, we clearly must respect library
533 534 # dependencies so that the libraries link correctly. However, for
534 535 # the remaining targets (check, clean, clobber, install_h, lint, _dc
535 536 # and _msg), libraries do not have any dependencies on one another
536 537 # and thus respecting dependencies just slows down the build.
537 538 # As such, for these rules, we use pattern replacement to explicitly
538 539 # avoid triggering the dependency information. Note that for clean,
539 540 # clobber and lint, we must use $(NOWAIT_SUBDIRS) rather than
540 541 # $(SUBDIRS), to prevent `.WAIT' from expanding to `.WAIT-nodepend'.
541 542 #
542 543
543 544 all: $(SUBDIRS)
544 545
545 546 install: $(SUBDIRS) .WAIT install_extra
546 547
547 548 # extra libraries kept in other source areas
548 549 install_extra:
549 550 @cd ../cmd/sgs; pwd; $(MAKE) install_lib
550 551 @pwd
551 552
552 553 clean clobber lint: $(NOWAIT_SUBDIRS:%=%-nodepend)
553 554
↓ open down ↓ |
516 lines elided |
↑ open up ↑ |
554 555 install_h check: $(HDRSUBDIRS:%=%-nodepend)
555 556
556 557 _msg: $(MSGSUBDIRS:%=%-nodepend) .WAIT _dc
557 558
558 559 _dc: $(DCSUBDIRS:%=%-nodepend)
559 560
560 561 #
561 562 # Library interdependencies are called out explicitly here
562 563 #
563 564 auditd_plugins: libbsm libnsl libsecdb
565 +krb5: gss_mechs/mech_krb5
564 566 gss_mechs/mech_krb5: libgss libnsl libsocket libresolv pkcs11
567 +gss_mechs/mech_spnego: gss_mechs/mech_krb5
565 568 libadt_jni: libbsm
566 569 libast: libsocket libm
567 570 libadutils: libldap5 libresolv libsocket libnsl
568 571 nsswitch: libadutils libidmap
569 572 libbe: libzfs
570 573 libbsm: libtsol
571 574 libcmd: libsum libast libsocket libnsl
572 -libcmdutils: libavl
575 +libcmdutils: libavl libnvpair
573 576 libcontract: libnvpair
577 +libcpc: libdevinfo
574 578 libdevid: libdevinfo
575 579 libdevinfo: libnvpair libsec
576 580 libdhcpagent: libsocket libdhcputil libuuid libdlpi libcontract
577 581 libdhcputil: libnsl libgen libinetutil libdlpi
578 582 libdladm: libdevinfo libinetutil libsocket libscf librcm libnvpair \
579 583 libexacct libnsl libkstat libcurses
584 +libdevice: libnvpair
580 585 libdll: libast
581 586 libdlpi: libinetutil libdladm
582 587 libds: libsysevent
583 588 libdscfg: libnsctl libunistat libsocket libnsl
584 -libdtrace: libproc libgen libctf
589 +libdtrace: libproc libgen libctf libmapmalloc
585 590 libdtrace_jni: libuutil libdtrace
586 591 libefi: libuuid
592 +libfcoe: libdladm
587 593 libfstyp: libnvpair
588 594 libelfsign: libcryptoutil libkmf
589 595 libidmap: libadutils libldap5 libavl libsldap libuutil
590 596 libipadm: libnsl libinetutil libsocket libdlpi libnvpair libdhcpagent \
591 597 libdladm libsecdb
592 598 libiscsit: libc libnvpair libstmf libuuid libnsl
593 599 libkmf: libcryptoutil pkcs11
594 600 libm: libc
595 601 libm1: libc libm
596 602 libmvec: libc libm
597 603 libnsl: libmd5
598 604 libmapid: libresolv
605 +libnisdb: libnsl libldap5
606 +librcm: libnvpair
599 607 librdc: libsocket libnsl libnsctl libunistat libdscfg
600 608 libuuid: libdlpi
601 609 libinetutil: libsocket
602 610 libipsecutil: libtecla libsocket
603 611 libinstzones: libzonecfg libcontract
604 612 libpkg: libwanboot libscf libadm
605 -libnwam: libscf
613 +libnwam: libscf libbsm libdladm
606 614 libsecdb: libnsl
607 615 libsasl: libgss libsocket pkcs11 libmd
608 616 sasl_plugins: pkcs11 libgss libsocket libsasl
609 617 libsctp: libsocket
610 618 libshell: libast libcmd libdll libsocket libsecdb libm
611 619 libsip: libmd5
612 -libsmbfs: libcmdutils libsocket libnsl libkrb5
620 +libsmbfs: libcmdutils libsocket libnsl libkrb5 libsec libidmap
613 621 libsocket: libnsl
614 622 libstmfproxy: libstmf libsocket libnsl libpthread
615 623 libsum: libast
616 -libsysevent: libsecdb
624 +libsysevent: libsecdb libnvpair
617 625 libldap5: libsasl libsocket libnsl libmd
618 626 libsldap: libldap5 libtsol libnsl libc libscf libresolv
619 627 libpool: libnvpair libexacct
620 628 libpp: libast
621 629 libzonecfg: libc libsocket libnsl libuuid libnvpair libsysevent libsec \
622 630 libbrand libpool libscf
623 631 libproc: ../cmd/sgs/librtld_db ../cmd/sgs/libelf libctf libsaveargs
624 632 libproject: libpool libproc libsecdb
625 633 libtermcap: libcurses
626 634 libtsnet: libnsl libtsol libsecdb
627 635 libwrap: libnsl libsocket
628 636 libwanboot: libnvpair libresolv libnsl libsocket libdevinfo libinetutil \
629 637 libdhcputil
630 638 libwanbootutil: libnsl
631 -pam_modules: libproject passwdutil smbsrv
632 -libscf: libuutil libmd libgen libsmbios libnsl
639 +pam_modules: libproject passwdutil smbsrv libtsnet
640 +libscf: libuutil libmd libgen libsmbios libnsl libnvpair
633 641 libinetsvc: libscf
634 -librestart: libuutil libscf
642 +librestart: libuutil libscf libpool libproject libsecdb libnvpair
635 643 libsaveargs: libdisasm
636 644 ../cmd/sgs/libdl: ../cmd/sgs/libconv
637 645 ../cmd/sgs/libelf: ../cmd/sgs/libconv
638 -pkcs11: libcryptoutil
646 +passwdutil: libsldap
647 +pkcs11: libcryptoutil libmd
648 +# Adding libuuid or libdladm results in a circular dependancy
639 649 print: libldap5
640 650 udapl/udapl_tavor: udapl/libdat
641 651 libzfs: libdevid libgen libnvpair libuutil \
642 652 libadm libavl libefi libidmap libmd libzfs_core libm
643 653 libzfs_core: libnvpair
644 654 libzfs_jni: libdiskmgt libnvpair libzfs
645 655 libzpool: libavl libumem libnvpair libcmdutils
646 656 libsec: libavl libidmap
647 657 brand: libc libsocket
648 658 libshare: libscf libzfs libuuid libfsmgt libsecdb libumem libsmbfs
649 659 libexacct/demo: libexacct libproject libsocket libnsl
650 660 libtsalarm: libpcp
651 661 smbsrv: libsocket libnsl libmd libxnet libpthread librt \
652 662 libshare libidmap pkcs11 libsqlite libcryptoutil \
653 663 libreparse libcmdutils libfakekernel
654 664 libv12n: libds libuuid
655 665 libvrrpadm: libsocket libdladm libscf
656 666 libvscan: libscf
657 667 libfru: libfruutils
658 668 scsi: libnvpair libfru
659 669 mpapi: libpthread libdevinfo libsysevent libnvpair
660 670 sun_fc: libdevinfo libsysevent libnvpair
661 671 libsun_ima: libdevinfo libsysevent libnsl
662 672 sun_sas: libdevinfo libsysevent libnvpair libkstat libdevid
663 673 libgrubmgmt: libdevinfo libzfs libfstyp
664 674 pylibbe: libbe libzfs
665 675 pyzfs: libnvpair libzfs
666 676 pysolaris: libsec libidmap
667 677 libreparse: libnvpair
668 678 libhotplug: libnvpair
669 679 cfgadm_plugins: libhotplug
670 680 libilb: libsocket
671 681 libipmi: libm
672 682 libprtdiag: libm
673 683 libsqlite: libm
674 684 libstmf: libm
675 685 libvscan: libm
676 686
677 687
678 688 $(INTEL_BUILD)libdiskmgt:libfdisk
679 689
680 690 #
681 691 # The reason this rule checks for the existence of the
682 692 # Makefile is that some of the directories do not exist
683 693 # in certain situations (e.g., exportable source builds,
684 694 # OpenSolaris).
685 695 #
686 696 $(SUBDIRS): FRC
687 697 @if [ -f $@/Makefile ]; then \
688 698 cd $@; pwd; $(MAKE) $(TARGET); \
689 699 else \
690 700 true; \
691 701 fi
692 702
693 703 $(SUBDIRS:%=%-nodepend):
694 704 @if [ -f $(@:%-nodepend=%)/Makefile ]; then \
695 705 cd $(@:%-nodepend=%); pwd; $(MAKE) $(TARGET); \
696 706 else \
697 707 true; \
698 708 fi
699 709
700 710 FRC:
↓ open down ↓ |
52 lines elided |
↑ open up ↑ |
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX