summaryrefslogtreecommitdiff
authorFrank Chen <frank.chen@amlogic.com>2014-11-19 12:53:50 (GMT)
committer Frank Chen <frank.chen@amlogic.com>2014-11-19 12:56:11 (GMT)
commita064a4c5b9d9df3bbee59062941c17e631942bed (patch)
tree399e5ce669c37e4cbd60ea9be1c6c001ac5d6ec9
parentd85fc7a8267a445d41b85fde521157e09d08a8f9 (diff)
parent60283c6026060e3793a32439c78553feb7eb93f3 (diff)
downloadbusybox-a064a4c5b9d9df3bbee59062941c17e631942bed.zip
busybox-a064a4c5b9d9df3bbee59062941c17e631942bed.tar.gz
busybox-a064a4c5b9d9df3bbee59062941c17e631942bed.tar.bz2
merge from cm-12.0 and fix conflicts
Change-Id: Ie9f89a570373b5384281b1e82500369de4caa12a
Diffstat
-rw-r--r--.gitignore2
-rwxr-xr-xAndroid.mk131
-rw-r--r--CleanSpec.mk20
-rw-r--r--Config.in5
-rw-r--r--Makefile15
-rw-r--r--Makefile.custom11
-rw-r--r--Makefile.flags2
-rw-r--r--README22
-rw-r--r--TODO16
-rw-r--r--android/android.c (renamed from libbb/android.c)34
-rw-r--r--android/libc/__set_errno.c29
-rwxr-xr-xandroid/libc/arch-arm/syscalls/adjtimex.S19
-rwxr-xr-xandroid/libc/arch-arm/syscalls/getsid.S19
-rwxr-xr-xandroid/libc/arch-arm/syscalls/stime.S24
-rw-r--r--android/libc/arch-mips/syscalls/adjtimex.S22
-rw-r--r--android/libc/arch-mips/syscalls/getsid.S22
-rw-r--r--android/libc/arch-mips/syscalls/stime.S22
-rw-r--r--android/libc/arch-mips/syscalls/swapoff.S2
-rw-r--r--android/libc/arch-mips/syscalls/swapon.S2
-rw-r--r--android/libc/arch-mips/syscalls/sysinfo.S2
-rw-r--r--android/libc/arch-x86/syscalls/swapoff.S31
-rw-r--r--android/libc/arch-x86/syscalls/swapon.S35
-rw-r--r--android/libc/arch-x86/syscalls/sysinfo.S31
-rw-r--r--android/libc/mktemp.c165
-rw-r--r--android/libc/pty.c118
-rw-r--r--android/librpc/bindresvport.c1
-rw-r--r--android/librpc/pmap_rmt.c2
-rw-r--r--android/librpc/rpc_dtablesize.c4
-rw-r--r--android/regex/bb_regex.c (renamed from android/regex/regex.c)38
-rw-r--r--android/regex/bb_regex.h (renamed from android/regex/regex.h)49
-rw-r--r--android/selinux/android_selinux.h150
-rw-r--r--android/selinux/android_selinux_internal.h248
-rw-r--r--android/selinux/matchpathcon.c564
-rw-r--r--android/selinux/stubs.c39
-rw-r--r--applets/applet_tables.c10
-rwxr-xr-xapplets/busybox.mksuid54
-rwxr-xr-xapplets/usage_compressed12
-rw-r--r--archival/Config.src350
-rw-r--r--archival/Kbuild.src19
-rw-r--r--archival/ar.c43
-rw-r--r--archival/bbunzip.c210
-rw-r--r--archival/bzip2.c16
-rw-r--r--archival/cpio.c33
-rw-r--r--archival/dpkg.c16
-rw-r--r--archival/dpkg_deb.c27
-rw-r--r--archival/gzip.c31
-rw-r--r--archival/libarchive/Kbuild.src36
-rw-r--r--archival/libarchive/bz/compress.c16
-rw-r--r--archival/libarchive/data_extract_all.c18
-rw-r--r--archival/libarchive/data_extract_to_command.c4
-rw-r--r--archival/libarchive/decompress_bunzip2.c27
-rw-r--r--archival/libarchive/decompress_gunzip.c2
-rw-r--r--archival/libarchive/decompress_unlzma.c29
-rw-r--r--archival/libarchive/decompress_unxz.c47
-rw-r--r--archival/libarchive/get_header_ar.c35
-rw-r--r--archival/libarchive/get_header_tar.c16
-rw-r--r--archival/libarchive/liblzo.h2
-rw-r--r--archival/libarchive/lzo1x_9x.c3
-rw-r--r--archival/libarchive/lzo1x_d.c3
-rw-r--r--archival/libarchive/open_transformer.c47
-rw-r--r--archival/libarchive/unxz/README6
-rw-r--r--archival/libarchive/unxz/xz.h17
-rw-r--r--archival/libarchive/unxz/xz_config.h4
-rw-r--r--archival/libarchive/unxz/xz_dec_bcj.c34
-rw-r--r--archival/libarchive/unxz/xz_dec_lzma2.c7
-rw-r--r--archival/libarchive/unxz/xz_stream.h11
-rw-r--r--archival/lzop.c52
-rw-r--r--archival/rpm.c316
-rw-r--r--archival/rpm2cpio.c11
-rw-r--r--archival/tar.c185
-rw-r--r--archival/unzip.c108
-rw-r--r--busybox-full.config (renamed from .config-full)155
-rw-r--r--busybox-full.links33
-rw-r--r--busybox-full.sources76
-rw-r--r--busybox-minimal.config (renamed from .config-minimal)100
-rw-r--r--busybox-minimal.links14
-rw-r--r--busybox-minimal.sources35
-rw-r--r--console-tools/dumpkmap.c37
-rw-r--r--console-tools/loadkmap.c27
-rw-r--r--coreutils/Kbuild.src2
-rw-r--r--coreutils/cal.c2
-rw-r--r--coreutils/catv.c43
-rw-r--r--coreutils/dd.c111
-rw-r--r--coreutils/expand.c13
-rw-r--r--coreutils/head.c157
-rw-r--r--coreutils/hostid.c3
-rw-r--r--coreutils/id.c4
-rw-r--r--coreutils/md5_sha1_sum.c4
-rw-r--r--coreutils/od_bloaty.c12
-rw-r--r--coreutils/readlink.c5
-rw-r--r--coreutils/split.c11
-rw-r--r--coreutils/stat.c7
-rw-r--r--coreutils/stty.c105
-rw-r--r--coreutils/sum.c4
-rw-r--r--coreutils/tail.c44
-rw-r--r--coreutils/touch.c39
-rwxr-xr-xdebianutils/mktemp.c8
-rw-r--r--debianutils/run_parts.c58
-rw-r--r--docs/keep_data_small.txt15
-rw-r--r--docs/mdev.txt4
-rw-r--r--docs/tcp.txt93
-rw-r--r--e2fsprogs/old_e2fsprogs/blkid/blkidP.h4
-rw-r--r--e2fsprogs/old_e2fsprogs/blkid/cache.c2
-rw-r--r--e2fsprogs/old_e2fsprogs/blkid/dev.c4
-rw-r--r--e2fsprogs/old_e2fsprogs/blkid/read.c2
-rw-r--r--e2fsprogs/old_e2fsprogs/blkid/tag.c6
-rw-r--r--e2fsprogs/old_e2fsprogs/e2fsck.c10
-rw-r--r--e2fsprogs/old_e2fsprogs/ext2fs/initialize.c2
-rw-r--r--e2fsprogs/old_e2fsprogs/ext2fs/unix_io.c4
-rw-r--r--e2fsprogs/old_e2fsprogs/fsck.c1
-rw-r--r--e2fsprogs/old_e2fsprogs/mke2fs.c8
-rw-r--r--e2fsprogs/old_e2fsprogs/tune2fs.c2
-rw-r--r--e2fsprogs/old_e2fsprogs/util.c4
-rw-r--r--editors/Config.src60
-rw-r--r--editors/Kbuild.src5
-rw-r--r--editors/awk.c144
-rw-r--r--editors/cmp.c11
-rw-r--r--editors/diff.c27
-rw-r--r--editors/ed.c12
-rw-r--r--editors/patch_bbox.c4
-rw-r--r--editors/sed.c282
-rw-r--r--editors/vi.c104
-rw-r--r--examples/inittab8
-rwxr-xr-xexamples/mdev.conf.change_blockdev.sh29
-rw-r--r--examples/mdev_fat.conf37
-rwxr-xr-xexamples/udhcp/simple.script15
-rw-r--r--findutils/find.c89
-rw-r--r--findutils/grep.c48
-rw-r--r--include-full/NUM_APPLETS.h1
-rw-r--r--include-full/applet_tables.h677
-rw-r--r--include-full/applets.h498
-rw-r--r--include-full/autoconf.h3682
-rw-r--r--include-full/bbconfigopts.h898
-rw-r--r--include-full/bbconfigopts_bz2.h342
-rwxr-xr-xinclude-full/copy-current.sh13
-rw-r--r--include-full/usage_compressed.h3942
-rw-r--r--include-minimal/NUM_APPLETS.h1
-rw-r--r--include-minimal/applet_tables.h527
-rw-r--r--include-minimal/applets.h498
-rw-r--r--include-minimal/autoconf.h3678
-rw-r--r--include-minimal/bbconfigopts.h898
-rw-r--r--include-minimal/bbconfigopts_bz2.h338
-rwxr-xr-xinclude-minimal/copy-current.sh13
-rw-r--r--include-minimal/usage_compressed.h3000
-rw-r--r--include/.gitignore9
-rw-r--r--include/android.h41
-rw-r--r--include/applets.src.h42
-rw-r--r--include/bb_archive.h8
-rw-r--r--include/bb_e2fs_defs.h2
-rw-r--r--include/libbb.h121
-rw-r--r--include/liblzo_interface.h2
-rw-r--r--include/platform.h33
-rw-r--r--include/xregex.h12
-rw-r--r--init/bootchartd.c6
-rw-r--r--init/init.c109
-rw-r--r--libbb/Kbuild.src4
-rw-r--r--libbb/appletlib.c4
-rw-r--r--libbb/bb_askpass.c4
-rw-r--r--libbb/bb_pwd.c75
-rw-r--r--libbb/correct_password.c23
-rw-r--r--libbb/create_icmp6_socket.c38
-rw-r--r--libbb/create_icmp_socket.c36
-rw-r--r--libbb/dump.c2
-rw-r--r--libbb/endofname.c26
-rw-r--r--libbb/fclose_nonstdin.c3
-rw-r--r--libbb/hash_md5_sha.c6
-rw-r--r--libbb/human_readable.c6
-rw-r--r--libbb/in_ether.c59
-rw-r--r--libbb/inet_common.c3
-rw-r--r--libbb/inode_hash.c2
-rw-r--r--libbb/lineedit.c205
-rw-r--r--libbb/login.c3
-rw-r--r--libbb/messages.c4
-rw-r--r--libbb/nuke_str.c21
-rw-r--r--libbb/platform.c13
-rw-r--r--libbb/printable.c24
-rw-r--r--libbb/pw_encrypt_des.c2
-rw-r--r--libbb/pw_encrypt_md5.c2
-rw-r--r--libbb/pw_encrypt_sha.c4
-rw-r--r--libbb/rtc.c2
-rw-r--r--libbb/run_shell.c9
-rw-r--r--libbb/time.c62
-rw-r--r--libbb/unicode.c38
-rw-r--r--libbb/update_passwd.c2
-rw-r--r--libbb/xatonum.c7
-rw-r--r--libbb/xfuncs_printf.c62
-rw-r--r--libbb/xreadlink.c9
-rw-r--r--loginutils/adduser.c4
-rw-r--r--loginutils/cryptpw.c19
-rw-r--r--loginutils/getty.c13
-rw-r--r--loginutils/login.c9
-rw-r--r--loginutils/passwd.c5
-rw-r--r--loginutils/su.c2
-rw-r--r--loginutils/sulogin.c47
-rw-r--r--loginutils/vlock.c2
-rw-r--r--mailutils/sendmail.c103
-rw-r--r--miscutils/Config.src19
-rw-r--r--miscutils/Kbuild.src2
-rw-r--r--miscutils/chat.c2
-rw-r--r--miscutils/chrt.c3
-rw-r--r--miscutils/crond.c6
-rw-r--r--miscutils/crontab.c27
-rw-r--r--miscutils/devfsd.c20
-rw-r--r--miscutils/fbsplash.c2
-rw-r--r--miscutils/flash_eraseall.c15
-rw-r--r--miscutils/flashcp.c26
-rw-r--r--miscutils/hdparm.c8
-rw-r--r--miscutils/less.c33
-rw-r--r--miscutils/man.c4
-rw-r--r--miscutils/nandwrite.c8
-rw-r--r--miscutils/rfkill.c17
-rw-r--r--miscutils/setserial.c4
-rw-r--r--miscutils/setsid.c14
-rw-r--r--miscutils/ubi_tools.c305
-rw-r--r--miscutils/wall.c21
-rw-r--r--modutils/modprobe.c2
-rw-r--r--networking/Config.src16
-rw-r--r--networking/arp.c49
-rw-r--r--networking/ether-wake.c24
-rw-r--r--networking/hostname.c7
-rw-r--r--networking/httpd.c50
-rw-r--r--networking/ifconfig.c45
-rw-r--r--networking/ifplugd.c17
-rw-r--r--networking/ifupdown.c19
-rw-r--r--networking/interface.c59
-rw-r--r--networking/ipv6/ipv6_route.h56
-rw-r--r--networking/libiproute/ipaddress.c22
-rw-r--r--networking/libiproute/iplink.c153
-rw-r--r--networking/libiproute/iprule.c8
-rw-r--r--networking/libiproute/iptunnel.c6
-rw-r--r--networking/libiproute/libnetlink.c2
-rw-r--r--networking/nameif.c15
-rw-r--r--networking/nc.c22
-rw-r--r--networking/nc_bloaty.c149
-rw-r--r--networking/netstat.c8
-rw-r--r--networking/nslookup.c76
-rw-r--r--networking/ntpd.c244
-rw-r--r--networking/ntpd_simple.c2
-rw-r--r--networking/ping.c167
-rw-r--r--networking/pscan.c2
-rw-r--r--networking/route.c2
-rw-r--r--networking/tc.c5
-rw-r--r--networking/telnet.c17
-rw-r--r--networking/telnetd.c2
-rw-r--r--networking/traceroute.c19
-rw-r--r--networking/udhcp/common.c34
-rw-r--r--networking/udhcp/common.h5
-rw-r--r--networking/udhcp/d6_dhcpc.c28
-rw-r--r--networking/udhcp/dhcpc.c89
-rw-r--r--networking/udhcp/dhcpc.h6
-rw-r--r--networking/udhcp/dhcpd.c19
-rw-r--r--networking/udhcp/dhcpd.h6
-rw-r--r--networking/udhcp/packet.c9
-rw-r--r--networking/wget.c75
-rw-r--r--procps/kill.c43
-rw-r--r--procps/lsof.c9
-rw-r--r--procps/nmeter.c3
-rw-r--r--procps/pgrep.c6
-rw-r--r--procps/powertop.c3
-rw-r--r--procps/ps.c45
-rw-r--r--procps/pstree.c13
-rw-r--r--procps/smemcap.c8
-rw-r--r--procps/top.c7
-rw-r--r--procps/watch.c12
-rw-r--r--runit/chpst.c5
-rw-r--r--runit/runsv.c1
-rw-r--r--runit/runsvdir.c1
-rw-r--r--runit/sv.c1
-rw-r--r--runit/svlogd.c6
-rw-r--r--scripts/Makefile.host4
-rwxr-xr-xscripts/bloat-o-meter11
-rwxr-xr-xscripts/gen_build_files.sh28
-rw-r--r--scripts/kconfig/Makefile2
-rw-r--r--scripts/kconfig/confdata.c24
-rwxr-xr-xscripts/mkconfigs4
-rwxr-xr-xscripts/randomtest2
-rwxr-xr-xscripts/trylink6
-rw-r--r--selinux/chcon.c2
-rw-r--r--selinux/matchpathcon.c5
-rw-r--r--selinux/runcon.c6
-rw-r--r--selinux/setfiles.c10
-rw-r--r--shell/ash.c105
-rw-r--r--shell/hush.c53
-rw-r--r--shell/hush_test/hush-misc/source2.right4
-rwxr-xr-xshell/hush_test/hush-misc/source2.tests8
-rw-r--r--shell/hush_test/hush-misc/while4.right1
-rwxr-xr-xshell/hush_test/hush-misc/while4.tests6
-rw-r--r--shell/math.c12
-rw-r--r--shell/math.h5
-rw-r--r--shell/shell_common.c2
-rw-r--r--sysklogd/logread.c25
-rw-r--r--sysklogd/syslogd.c13
-rwxr-xr-xtestsuite/awk.tests79
-rw-r--r--testsuite/date/date-works8
-rw-r--r--testsuite/date/date-works-16
-rw-r--r--testsuite/du/du-k-works6
-rw-r--r--testsuite/du/du-l-works1
-rwxr-xr-xtestsuite/grep.tests32
-rw-r--r--testsuite/hostid/hostid-works10
-rwxr-xr-xtestsuite/md5sum.tests6
-rwxr-xr-xtestsuite/sed.tests23
-rwxr-xr-xtestsuite/tar.tests38
-rw-r--r--testsuite/testing.sh8
-rw-r--r--testsuite/which/which-uses-default-path2
-rw-r--r--util-linux/Config.src261
-rw-r--r--util-linux/Kbuild.src1
-rw-r--r--util-linux/dmesg.c65
-rw-r--r--util-linux/fdformat.c2
-rw-r--r--util-linux/fdisk.c3
-rw-r--r--util-linux/fdisk_gpt.c14
-rw-r--r--util-linux/fdisk_sun.c10
-rw-r--r--util-linux/fsck_minix.c2
-rw-r--r--util-linux/fstrim.c61
-rw-r--r--util-linux/getopt.c59
-rw-r--r--util-linux/hexdump.c14
-rw-r--r--util-linux/ipcs.c10
-rw-r--r--util-linux/losetup.c125
-rw-r--r--util-linux/mdev.c391
-rw-r--r--util-linux/mkfs_ext2.c2
-rw-r--r--util-linux/mkfs_minix.c79
-rw-r--r--util-linux/mount.c4
-rw-r--r--util-linux/readprofile.c12
-rw-r--r--util-linux/swaponoff.c16
-rw-r--r--util-linux/volume_id/Config.src15
-rw-r--r--util-linux/volume_id/Kbuild.src38
-rw-r--r--util-linux/volume_id/btrfs.c11
-rw-r--r--util-linux/volume_id/cramfs.c11
-rw-r--r--util-linux/volume_id/exfat.c13
-rw-r--r--util-linux/volume_id/ext.c11
-rw-r--r--util-linux/volume_id/f2fs.c95
-rw-r--r--util-linux/volume_id/fat.c11
-rw-r--r--util-linux/volume_id/get_devname.c11
-rw-r--r--util-linux/volume_id/hfs.c11
-rw-r--r--util-linux/volume_id/iso9660.c11
-rw-r--r--util-linux/volume_id/jfs.c11
-rw-r--r--util-linux/volume_id/linux_raid.c11
-rw-r--r--util-linux/volume_id/linux_swap.c11
-rw-r--r--util-linux/volume_id/luks.c11
-rw-r--r--util-linux/volume_id/nilfs.c20
-rw-r--r--util-linux/volume_id/ntfs.c13
-rw-r--r--util-linux/volume_id/ocfs2.c11
-rw-r--r--util-linux/volume_id/reiserfs.c11
-rw-r--r--util-linux/volume_id/romfs.c11
-rw-r--r--util-linux/volume_id/squashfs.c12
-rw-r--r--util-linux/volume_id/sysv.c11
-rw-r--r--util-linux/volume_id/udf.c11
-rw-r--r--util-linux/volume_id/unused_highpoint.c11
-rw-r--r--util-linux/volume_id/unused_hpfs.c11
-rw-r--r--util-linux/volume_id/unused_isw_raid.c11
-rw-r--r--util-linux/volume_id/unused_lsi_raid.c11
-rw-r--r--util-linux/volume_id/unused_lvm.c11
-rw-r--r--util-linux/volume_id/unused_mac.c11
-rw-r--r--util-linux/volume_id/unused_minix.c11
-rw-r--r--util-linux/volume_id/unused_msdos.c13
-rw-r--r--util-linux/volume_id/unused_nvidia_raid.c11
-rw-r--r--util-linux/volume_id/unused_promise_raid.c11
-rw-r--r--util-linux/volume_id/unused_silicon_raid.c11
-rw-r--r--util-linux/volume_id/unused_ufs.c11
-rw-r--r--util-linux/volume_id/unused_via_raid.c11
-rw-r--r--util-linux/volume_id/volume_id.c5
-rw-r--r--util-linux/volume_id/volume_id_internal.h54
-rw-r--r--util-linux/volume_id/xfs.c11
362 files changed, 7782 insertions, 22991 deletions
diff --git a/.gitignore b/.gitignore
index 07f6e74..4de5690 100644
--- a/.gitignore
+++ b/.gitignore
@@ -13,7 +13,7 @@ Config.in
# Never ignore these
#
!.gitignore
-!.config-*
+!.config*
#
# Normal output
diff --git a/Android.mk b/Android.mk
index e59dcc7..839acdb 100755
--- a/Android.mk
+++ b/Android.mk
@@ -1,13 +1,13 @@
LOCAL_PATH := $(call my-dir)
BB_PATH := $(LOCAL_PATH)
-# Bionic Branches Switches (CM7/AOSP/ICS)
-BIONIC_ICS := true
-
+# Bionic Branches Switches (GB/ICS/L)
+BIONIC_ICS := false
+BIONIC_L := true
# Make a static library for regex.
include $(CLEAR_VARS)
-LOCAL_SRC_FILES := android/regex/regex.c
+LOCAL_SRC_FILES := android/regex/bb_regex.c
LOCAL_C_INCLUDES := $(BB_PATH)/android/regex
LOCAL_CFLAGS := -Wno-sign-compare
LOCAL_MODULE := libclearsilverregex
@@ -19,21 +19,55 @@ LOCAL_SRC_FILES := $(shell cat $(BB_PATH)/android/librpc.sources)
LOCAL_C_INCLUDES := $(BB_PATH)/android/librpc
LOCAL_MODULE := libuclibcrpc
LOCAL_CFLAGS += -fno-strict-aliasing
+ifeq ($(BIONIC_L),true)
+LOCAL_CFLAGS += -DBIONIC_ICS -DBIONIC_L
+endif
include $(BUILD_STATIC_LIBRARY)
+#####################################################################
+
+# Execute make prepare for normal config & static lib (recovery)
LOCAL_PATH := $(BB_PATH)
include $(CLEAR_VARS)
-# Each profile require a compressed usage/config, outside the source tree for git history
-# We keep the uncompressed headers in local include-<profile> to track config changes.
-# TODO: generate includes in out/
+# Explicitly set an architecture specific CONFIG_CROSS_COMPILER_PREFIX
+ifneq ($(filter arm arm64,$(TARGET_ARCH)),)
+ BUSYBOX_CROSS_COMPILER_PREFIX := arm-linux-androideabi-
+endif
+ifneq ($(filter x86 x86_64,$(TARGET_ARCH)),)
+ BUSYBOX_CROSS_COMPILER_PREFIX := $(if $(filter x86_64,$(HOST_ARCH)),x86_64,i686)-linux-android-
+endif
+ifeq ($(TARGET_ARCH),mips)
+ BUSYBOX_CROSS_COMPILER_PREFIX := mipsel-linux-android-
+endif
-# BB_INCLUDES_OUT := $(TARGET_OUT_INTERMEDIATES)/include
-# $(BB_INCLUDES_OUT):
-# mkdir -p $(ANDROID_BUILD_TOP)/$(BB_INCLUDES_OUT)
+BB_PREPARE_FLAGS:=
+ifeq ($(HOST_OS),darwin)
+ BB_HOSTCC := $(ANDROID_BUILD_TOP)/prebuilts/gcc/darwin-x86/host/i686-apple-darwin-4.2.1/bin/i686-apple-darwin11-gcc
+ BB_PREPARE_FLAGS := HOSTCC=$(BB_HOSTCC)
+endif
-# Execute make clean, make prepare and copy profiles required for normal & static lib (recovery)
+# On aosp (master), path is relative, not on cm (kitkat)
+bb_gen := $(abspath $(TARGET_OUT_INTERMEDIATES)/busybox)
+
+busybox_prepare_full := $(bb_gen)/full/.config
+$(busybox_prepare_full): $(BB_PATH)/busybox-full.config
+ @echo -e ${CL_YLW}"Prepare config for busybox binary"${CL_RST}
+ @rm -rf $(bb_gen)/full
+ @rm -f $(shell find $(abspath $(call intermediates-dir-for,EXECUTABLES,busybox)) -name "*.o")
+ @mkdir -p $(@D)
+ @cat $^ > $@ && echo "CONFIG_CROSS_COMPILER_PREFIX=\"$(BUSYBOX_CROSS_COMPILER_PREFIX)\"" >> $@
+ +make -C $(BB_PATH) prepare O=$(@D) $(BB_PREPARE_FLAGS)
+
+busybox_prepare_minimal := $(bb_gen)/minimal/.config
+$(busybox_prepare_minimal): $(BB_PATH)/busybox-minimal.config
+ @echo -e ${CL_YLW}"Prepare config for libbusybox"${CL_RST}
+ @rm -rf $(bb_gen)/minimal
+ @rm -f $(shell find $(abspath $(call intermediates-dir-for,STATIC_LIBRARIES,libbusybox)) -name "*.o")
+ @mkdir -p $(@D)
+ @cat $^ > $@ && echo "CONFIG_CROSS_COMPILER_PREFIX=\"$(BUSYBOX_CROSS_COMPILER_PREFIX)\"" >> $@
+ +make -C $(BB_PATH) prepare O=$(@D) $(BB_PREPARE_FLAGS)
KERNEL_MODULES_DIR ?= /system/lib/modules
BUSYBOX_CONFIG := minimal full
@@ -55,6 +89,7 @@ LOCAL_MODULE := busybox_prepare
LOCAL_MODULE_TAGS := eng debug
#include $(BUILD_STATIC_LIBRARY)
+#####################################################################
LOCAL_PATH := $(BB_PATH)
include $(CLEAR_VARS)
@@ -63,52 +98,54 @@ KERNEL_MODULES_DIR ?= /system/lib/modules
SUBMAKE := make -s -C $(BB_PATH) CC=$(CC)
-BUSYBOX_SRC_FILES = $(shell cat $(BB_PATH)/busybox-$(BUSYBOX_CONFIG).sources) \
- libbb/android.c
-ifeq ($(TARGET_ARCH),arm)
- BUSYBOX_SRC_FILES += \
- android/libc/arch-arm/syscalls/swapon.S \
- android/libc/arch-arm/syscalls/swapoff.S \
- android/libc/arch-arm/syscalls/sysinfo.S
- #android/libc/arch-arm/syscalls/adjtimex.S \
- #android/libc/arch-arm/syscalls/getsid.S \
- #android/libc/arch-arm/syscalls/stime.S \
+BUSYBOX_SRC_FILES = \
+ $(shell cat $(BB_PATH)/busybox-$(BUSYBOX_CONFIG).sources) \
+ android/libc/mktemp.c \
+ android/libc/pty.c \
+ android/android.c
+BUSYBOX_ASM_FILES =
+ifneq ($(BIONIC_L),true)
+ BUSYBOX_ASM_FILES += swapon.S swapoff.S sysinfo.S
endif
-ifeq ($(TARGET_ARCH),mips)
- BUSYBOX_SRC_FILES += \
- android/libc/arch-mips/syscalls/adjtimex.S \
- android/libc/arch-mips/syscalls/getsid.S \
- android/libc/arch-mips/syscalls/stime.S \
- android/libc/arch-mips/syscalls/swapon.S \
- android/libc/arch-mips/syscalls/swapoff.S \
- android/libc/arch-mips/syscalls/sysinfo.S
+ifneq ($(filter arm x86 mips,$(TARGET_ARCH)),)
+ BUSYBOX_SRC_FILES += \
+ $(addprefix android/libc/arch-$(TARGET_ARCH)/syscalls/,$(BUSYBOX_ASM_FILES))
endif
BUSYBOX_C_INCLUDES = \
- $(BB_PATH)/include-$(BUSYBOX_CONFIG) \
$(BB_PATH)/include $(BB_PATH)/libbb \
bionic/libc/private \
bionic/libm/include \
+ bionic/libc \
bionic/libm \
libc/kernel/common \
+ external/libselinux/include \
+ external/libsepol/include \
$(BB_PATH)/android/regex \
$(BB_PATH)/android/librpc
BUSYBOX_CFLAGS = \
- -Werror=implicit \
+ -Werror=implicit -Wno-clobbered \
-DNDEBUG \
-DANDROID \
-fno-strict-aliasing \
- -include include-$(BUSYBOX_CONFIG)/autoconf.h \
+ -fno-builtin-stpcpy \
+ -include $(bb_gen)/$(BUSYBOX_CONFIG)/include/autoconf.h \
-D'CONFIG_DEFAULT_MODULES_DIR="$(KERNEL_MODULES_DIR)"' \
-D'BB_VER="$(strip $(shell $(SUBMAKE) kernelversion)) $(BUSYBOX_SUFFIX)"' -DBB_BT=AUTOCONF_TIMESTAMP
-# to handle differences in ICS (ipv6)
+ifeq ($(BIONIC_L),true)
+ BUSYBOX_CFLAGS += -DBIONIC_L
+ BUSYBOX_AFLAGS += -DBIONIC_L
+ # include changes for ICS/JB/KK
+ BIONIC_ICS := true
+endif
+
ifeq ($(BIONIC_ICS),true)
-BUSYBOX_CFLAGS += -DBIONIC_ICS
+ BUSYBOX_CFLAGS += -DBIONIC_ICS
endif
@@ -117,20 +154,22 @@ endif
BUSYBOX_CONFIG:=minimal
BUSYBOX_SUFFIX:=static
LOCAL_SRC_FILES := $(BUSYBOX_SRC_FILES)
-LOCAL_C_INCLUDES := $(BUSYBOX_C_INCLUDES)
+LOCAL_C_INCLUDES := $(bb_gen)/minimal/include $(BUSYBOX_C_INCLUDES)
LOCAL_CFLAGS := -Dmain=busybox_driver $(BUSYBOX_CFLAGS)
LOCAL_CFLAGS += \
+ -DRECOVERY_VERSION \
-Dgetusershell=busybox_getusershell \
-Dsetusershell=busybox_setusershell \
-Dendusershell=busybox_endusershell \
- -Dttyname_r=busybox_ttyname_r \
-Dgetmntent=busybox_getmntent \
-Dgetmntent_r=busybox_getmntent_r \
-Dgenerate_uuid=busybox_generate_uuid
+LOCAL_ASFLAGS := $(BUSYBOX_AFLAGS)
LOCAL_MODULE := libbusybox
LOCAL_MODULE_TAGS := eng debug
-LOCAL_STATIC_LIBRARIES := libcutils libc libm
#$(LOCAL_MODULE): busybox_prepare
+LOCAL_STATIC_LIBRARIES := libcutils libc libm libselinux
+LOCAL_ADDITIONAL_DEPENDENCIES := $(busybox_prepare_minimal)
include $(BUILD_STATIC_LIBRARY)
@@ -142,17 +181,16 @@ include $(CLEAR_VARS)
BUSYBOX_CONFIG:=full
BUSYBOX_SUFFIX:=bionic
LOCAL_SRC_FILES := $(BUSYBOX_SRC_FILES)
-ifeq ($(BIONIC_ICS),true)
-LOCAL_SRC_FILES += android/libc/__set_errno.c
-endif
-LOCAL_C_INCLUDES := $(BUSYBOX_C_INCLUDES)
+LOCAL_C_INCLUDES := $(bb_gen)/full/include $(BUSYBOX_C_INCLUDES)
LOCAL_CFLAGS := $(BUSYBOX_CFLAGS)
+LOCAL_ASFLAGS := $(BUSYBOX_AFLAGS)
LOCAL_MODULE := busybox
LOCAL_MODULE_TAGS := eng debug
LOCAL_MODULE_PATH := $(TARGET_OUT_OPTIONAL_EXECUTABLES)
LOCAL_SHARED_LIBRARIES := libc libcutils libm
-LOCAL_STATIC_LIBRARIES := libclearsilverregex libuclibcrpc
#$(LOCAL_MODULE): busybox_prepare
+LOCAL_STATIC_LIBRARIES += libclearsilverregex libuclibcrpc libselinux
+LOCAL_ADDITIONAL_DEPENDENCIES := $(busybox_prepare_full)
include $(BUILD_EXECUTABLE)
BUSYBOX_LINKS := $(shell cat $(BB_PATH)/busybox-$(BUSYBOX_CONFIG).links)
@@ -161,7 +199,7 @@ exclude := nc which
SYMLINKS := $(addprefix $(TARGET_OUT_OPTIONAL_EXECUTABLES)/,$(filter-out $(exclude),$(notdir $(BUSYBOX_LINKS))))
$(SYMLINKS): BUSYBOX_BINARY := $(LOCAL_MODULE)
$(SYMLINKS): $(LOCAL_INSTALLED_MODULE)
- @echo "Symlink: $@ -> $(BUSYBOX_BINARY)"
+ @echo -e ${CL_CYN}"Symlink:"${CL_RST}" $@ -> $(BUSYBOX_BINARY)"
@mkdir -p $(dir $@)
@rm -rf $@
$(hide) ln -sf $(BUSYBOX_BINARY) $@
@@ -182,23 +220,24 @@ include $(CLEAR_VARS)
BUSYBOX_CONFIG:=full
BUSYBOX_SUFFIX:=static
LOCAL_SRC_FILES := $(BUSYBOX_SRC_FILES)
-LOCAL_C_INCLUDES := $(BUSYBOX_C_INCLUDES)
+LOCAL_C_INCLUDES := $(bb_gen)/full/include $(BUSYBOX_C_INCLUDES)
LOCAL_CFLAGS := $(BUSYBOX_CFLAGS)
LOCAL_CFLAGS += \
-Dgetusershell=busybox_getusershell \
-Dsetusershell=busybox_setusershell \
-Dendusershell=busybox_endusershell \
- -Dttyname_r=busybox_ttyname_r \
-Dgetmntent=busybox_getmntent \
-Dgetmntent_r=busybox_getmntent_r \
-Dgenerate_uuid=busybox_generate_uuid
+LOCAL_ASFLAGS := $(BUSYBOX_AFLAGS)
LOCAL_FORCE_STATIC_EXECUTABLE := true
LOCAL_MODULE := static_busybox
LOCAL_MODULE_STEM := busybox
LOCAL_MODULE_TAGS := optional
-LOCAL_STATIC_LIBRARIES := libclearsilverregex libc libcutils libm libuclibcrpc
+LOCAL_STATIC_LIBRARIES := libclearsilverregex libc libcutils libm libuclibcrpc libselinux
LOCAL_MODULE_CLASS := UTILITY_EXECUTABLES
LOCAL_MODULE_PATH := $(PRODUCT_OUT)/utilities
LOCAL_UNSTRIPPED_PATH := $(PRODUCT_OUT)/symbols/utilities
#$(LOCAL_MODULE): busybox_prepare
+LOCAL_ADDITIONAL_DEPENDENCIES := $(busybox_prepare_full)
include $(BUILD_EXECUTABLE)
diff --git a/CleanSpec.mk b/CleanSpec.mk
index d270287..92152f4 100644
--- a/CleanSpec.mk
+++ b/CleanSpec.mk
@@ -38,14 +38,28 @@
# NEWER CLEAN STEPS MUST BE AT THE END OF THE LIST
# ************************************************
-$(call add-clean-step, rm -rf $(PRODUCT_OUT)/obj/STATIC_LIBRARIES/busybox_prepare_intermediates)
-$(call add-clean-step, rm -rf $(PRODUCT_OUT)/obj/include/busybox-*)
+# Note: this is not really required, but remember only the added lines
+# will be executed (see $OUT/clean_steps.mk value for the current line)
+
+$(call add-clean-step, rm -f $(PRODUCT_OUT)/utilities/busybox)
+$(call add-clean-step, rm -f $(PRODUCT_OUT)/symbols/system/xbin/busybox)
$(call add-clean-step, rm -rf $(PRODUCT_OUT)/obj/EXECUTABLES/busybox_intermediates)
$(call add-clean-step, rm -rf $(PRODUCT_OUT)/obj/STATIC_LIBRARIES/libbusybox_intermediates)
$(call add-clean-step, rm -rf $(PRODUCT_OUT)/obj/UTILITY_EXECUTABLES/static_busybox_intermediates)
-$(call add-clean-step, rm $(PRODUCT_OUT)/symbols/system/xbin/busybox)
+$(call add-clean-step, rm -rf $(PRODUCT_OUT)/obj/busybox)
+
+# remains from old build system */
+$(call add-clean-step, rm -f external/busybox/include/bbconfigopts.h)
+$(call add-clean-step, rm -f external/busybox/include/autoconf.h)
+$(call add-clean-step, rm -f external/busybox/include/applet_tables.h)
+$(call add-clean-step, rm -f external/busybox/include/applets.h)
+$(call add-clean-step, rm -f external/busybox/.config)
+
+# force prepare
+$(call add-clean-step, touch external/busybox/busybox-minimal.config)
+$(call add-clean-step, touch external/busybox/busybox-full.config)
# ************************************************
# NEWER CLEAN STEPS MUST BE AT THE END OF THE LIST
diff --git a/Config.in b/Config.in
index 03c2d03..2c4be2e 100644
--- a/Config.in
+++ b/Config.in
@@ -161,12 +161,13 @@ config UNICODE_USING_LOCALE
Internal implementation is smaller.
config FEATURE_CHECK_UNICODE_IN_ENV
- bool "Check $LANG environment variable"
+ bool "Check $LC_ALL, $LC_CTYPE and $LANG environment variables"
default n
depends on UNICODE_SUPPORT && !UNICODE_USING_LOCALE
help
With this option on, Unicode support is activated
- only if LANG variable has the value of the form "xxxx.utf8"
+ only if locale-related variables have the value of the form
+ "xxxx.utf8"
Otherwise, Unicode support will be always enabled and active.
diff --git a/Makefile b/Makefile
index f0793b7..111adc0 100644
--- a/Makefile
+++ b/Makefile
@@ -1,9 +1,15 @@
VERSION = 1
-PATCHLEVEL = 21
-SUBLEVEL = 0
-EXTRAVERSION = -jb
+PATCHLEVEL = 22
+SUBLEVEL = 1
+EXTRAVERSION =
NAME = bionic
+# prevent local tree builds in bionic,
+# but allow initial version check (SUBMAKE)
+ifeq (,$(filter s, $(MAKEFLAGS)))
+ KBUILD_OUTPUT ?= $(OUT)/obj/busybox
+endif
+
# *DOCUMENTATION*
# To see a list of typical targets execute "make help"
# More info can be located in ./README
@@ -104,7 +110,8 @@ ifneq ($(KBUILD_OUTPUT),)
saved-output := $(KBUILD_OUTPUT)
KBUILD_OUTPUT := $(shell cd $(KBUILD_OUTPUT) && /bin/pwd)
$(if $(KBUILD_OUTPUT),, \
- $(error output directory "$(saved-output)" does not exist))
+ $(warning output directory "$(saved-output)" does not exist) \
+ $(error On AOSP repo, type 'mma' to build or set O=out/<folder> ))
PHONY += $(MAKECMDGOALS)
diff --git a/Makefile.custom b/Makefile.custom
index 6da79e6..8c95ef2 100644
--- a/Makefile.custom
+++ b/Makefile.custom
@@ -3,7 +3,12 @@
# ==========================================================================
busybox.links: $(srctree)/applets/busybox.mkll $(objtree)/include/autoconf.h include/applets.h
- $(Q)-$(SHELL) $^ >$@
+ $(Q)-$(SHELL) $^ > $@
+
+busybox.cfg.suid: $(srctree)/applets/busybox.mksuid $(objtree)/include/autoconf.h include/applets.h
+ $(Q)-SUID="yes" $(SHELL) $^ > $@
+busybox.cfg.nosuid: $(srctree)/applets/busybox.mksuid $(objtree)/include/autoconf.h include/applets.h
+ $(Q)-SUID="DROP" $(SHELL) $^ > $@
.PHONY: install
ifeq ($(CONFIG_INSTALL_APPLET_SYMLINKS),y)
@@ -69,6 +74,10 @@ release: distclean
-print \
-exec rm -r -f {} \; ; \
find busybox-$(VERSION).$(PATCHLEVEL).$(SUBLEVEL)$(EXTRAVERSION)/ -type f \
+ -name .gitignore \
+ -print \
+ -exec rm -f {} \; ; \
+ find busybox-$(VERSION).$(PATCHLEVEL).$(SUBLEVEL)$(EXTRAVERSION)/ -type f \
-name .\#* \
-print \
-exec rm -f {} \; ; \
diff --git a/Makefile.flags b/Makefile.flags
index 307afa7..640eeec 100644
--- a/Makefile.flags
+++ b/Makefile.flags
@@ -138,11 +138,13 @@ LDLIBS += pam pam_misc pthread
endif
ifeq ($(CONFIG_SELINUX),y)
+ifeq ($(ANDROID_PRODUCT_OUT),) # Ignore pkgconfig on Android Builds
SELINUX_PC_MODULES = libselinux libsepol
$(eval $(call pkg_check_modules,SELINUX,$(SELINUX_PC_MODULES)))
CPPFLAGS += $(SELINUX_CFLAGS)
LDLIBS += $(if $(SELINUX_LIBS),$(SELINUX_LIBS:-l%=%),$(SELINUX_PC_MODULES:lib%=%))
endif
+endif
ifeq ($(CONFIG_EFENCE),y)
LDLIBS += efence
diff --git a/README b/README
index e8d9302..4814372 100644
--- a/README
+++ b/README
@@ -6,20 +6,24 @@ Note about this Android Variant :
WARNING : THIS IS A BIONIC VERSION OF BUSYBOX, DO NOT USE "make" IN THIS TREE
-This tree has multiple configurations,
+This tree has multiple configurations (busybox and recovery lib),
-- select the wanted config profile (full or minimal) :
- cp .config-full .config
+- lunch your device to prepare the environment
+- edit the wanted config profile (ie busybox-full.config)
-- type "make menuconfig" to update .config
-- type "make prepare" to generate include/ files
-- copy the generated files in include-full/ or include-minimal/
+- type "mma" in external/busybox to build with the dependencies
- (there is a script to copy files inside these directories)
+ Finally copy $OUT/obj/busybox/full/.config to the source tree without
+ the CONFIG_CROSS_COMPILER_PREFIX line! (to stay compatible with x86 targets)
- finally copy .config to .config-full or .config-minimal
+ bb_obj=$OUT/obj/busybox/full
+ cat $bb_obj/.config | grep -v CROSS_COMPILER_ > busybox-full.config
- please also check busybox-profile.links and busybox-profile.sources
+ bb_obj=$OUT/obj/busybox/minimal
+ cat $bb_obj/.config | grep -v CROSS_COMPILER_ > busybox-minimal.config
+
+ If you add or remove some applets,
+ please also update busybox-<profile>.links and busybox-<profile>.sources
----------------
diff --git a/TODO b/TODO
index 4436469..dcf48c2 100644
--- a/TODO
+++ b/TODO
@@ -127,20 +127,6 @@ patch
And while we're at it, a new patch filename quoting format is apparently
coming soon: http://marc.theaimsgroup.com/?l=git&m=112927316408690&w=2
----
-stty / catv
- stty's visible() function and catv's guts are identical. Merge them into
- an appropriate libbb function.
----
-struct suffix_mult
- Several duplicate users of: grep -r "1024\*1024" * -B2 -A1
- Merge to a single size_suffixes[] in libbb.
- Users: head tail od_bloaty hexdump and (partially as it wouldn't hurt) svlogd
----
-tail
- ./busybox tail -f foo.c~ TODO
- should not print fmt=header_fmt for subsequent date >> TODO; i.e. only
- fmt+ if another (not the current) file did change
Architectural issues:
@@ -234,8 +220,6 @@ Minor stuff:
See grep -r strtod
Alot of duplication that wants cleanup.
---
- in_ether duplicated in network/{interface,ifconfig}.c
----
unify progress_meter. wget, flash_eraseall, pipe_progress, fbsplash, setfiles.
---
support start-stop-daemon -d <chdir-path>
diff --git a/libbb/android.c b/android/android.c
index 8f2c3c4..62d25a8 100644
--- a/libbb/android.c
+++ b/android/android.c
@@ -10,22 +10,22 @@
#include <stdlib.h>
#include "libbb.h"
-/* declared in stdlib.h */
-int clearenv()
+#ifndef BIONIC_ICS
+int clearenv(void)
{
- environ = NULL;
- return 0;
-}
+ char **P = environ;
-/* bionic/stubs.c:ttyname not implemented anyway */
-int ttyname_r(int fd, char *name, size_t namesize)
-{
- char *t = ttyname(fd);
- if (!t)
- return -1;
- strncpy(name, ttyname(fd), namesize);
+ /* should never be NULL */
+ if (!environ)
+ environ = (char **)xzalloc(sizeof(char *));
+
+ if (P != NULL) {
+ for (; *P; ++P)
+ *P = NULL;
+ }
return 0;
}
+#endif
/* no /etc/shells anyway */
char *getusershell() { return NULL; }
@@ -70,19 +70,19 @@ struct mntent *getmntent(FILE *fp)
}
/* not used anyway */
-int addmntent(FILE *fp, const struct mntent *mnt)
+int addmntent(FILE *fp UNUSED_PARAM, const struct mntent *mnt UNUSED_PARAM)
{
errno = ENOENT;
return 1;
}
-const char *hasmntopt(const struct mntent *mnt, const char *opt)
+char *hasmntopt(const struct mntent *mnt, const char *opt)
{
- const char *o = mnt->mnt_opts;
+ char *o = mnt->mnt_opts;
size_t l = strlen(opt);
- while ((o = strstr(o, opt)) &&
- ((o > mnt->mnt_opts && o[-1] != ',') ||
+ while ((o = strstr(o, opt)) &&
+ ((o > mnt->mnt_opts && o[-1] != ',') ||
(o[l] != 0 && o[l] != ',' && o[l] != '=')));
return o;
}
diff --git a/android/libc/__set_errno.c b/android/libc/__set_errno.c
index 163d404..ed832e9 100644
--- a/android/libc/__set_errno.c
+++ b/android/libc/__set_errno.c
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008 The Android Open Source Project
+ * Copyright (C) 2014 The Android Open Source Project
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
@@ -28,29 +28,16 @@
#include <errno.h>
+#ifdef __LP64__
-int __set_errno(int n)
+/* __set_errno was mistakenly exposed in <errno.h> in the 32-bit NDK.
+ * but is no more present for 64-bit targets!
+ */
+
+long __set_errno(int n)
{
errno = n;
return -1;
}
-/*
- * this function is called from syscall stubs,
- * (tail-called in the case of 0-4 arg versions)
- */
-
-__LIBC_HIDDEN__
-int __set_syscall_errno(int n)
-{
- /* some syscalls, mmap() for example, have valid return
- ** values that are "negative". Since errno values are not
- ** greater than 131 on Linux, we will just consider
- ** anything significantly out of range as not-an-error
- */
- if(n > -256) {
- return __set_errno(-n);
- } else {
- return n;
- }
-}
+#endif
diff --git a/android/libc/arch-arm/syscalls/adjtimex.S b/android/libc/arch-arm/syscalls/adjtimex.S
deleted file mode 100755
index dabdb90..0000000
--- a/android/libc/arch-arm/syscalls/adjtimex.S
+++ b/dev/null
@@ -1,19 +0,0 @@
-/* autogenerated by gensyscalls.py */
-#include <asm/unistd.h>
-
- .text
- .type adjtimex, #function
- .globl adjtimex
- .align 4
- .fnstart
-
-adjtimex:
- .save {r4, r7}
- stmfd sp!, {r4, r7}
- ldr r7, =__NR_adjtimex
- swi #0
- ldmfd sp!, {r4, r7}
- movs r0, r0
- bxpl lr
- b __set_errno
- .fnend
diff --git a/android/libc/arch-arm/syscalls/getsid.S b/android/libc/arch-arm/syscalls/getsid.S
deleted file mode 100755
index fd9e9ee..0000000
--- a/android/libc/arch-arm/syscalls/getsid.S
+++ b/dev/null
@@ -1,19 +0,0 @@
-/* autogenerated by gensyscalls.py */
-#include <asm/unistd.h>
-
- .text
- .type getsid, #function
- .globl getsid
- .align 4
- .fnstart
-
-getsid:
- .save {r4, r7}
- stmfd sp!, {r4, r7}
- ldr r7, =__NR_getsid
- swi #0
- ldmfd sp!, {r4, r7}
- movs r0, r0
- bxpl lr
- b __set_errno
- .fnend
diff --git a/android/libc/arch-arm/syscalls/stime.S b/android/libc/arch-arm/syscalls/stime.S
deleted file mode 100755
index e53684c..0000000
--- a/android/libc/arch-arm/syscalls/stime.S
+++ b/dev/null
@@ -1,24 +0,0 @@
-/* autogenerated by gensyscalls.py */
-#define __KERNEL__
-#include <asm/unistd.h>
-
-#ifndef __NR_stime
-#define __NR_stime (__NR_SYSCALL_BASE + 25)
-#endif
-
- .text
- .type stime, #function
- .globl stime
- .align 4
- .fnstart
-
-stime:
- .save {r4, r7}
- stmfd sp!, {r4, r7}
- ldr r7, =__NR_stime
- swi #0
- ldmfd sp!, {r4, r7}
- movs r0, r0
- bxpl lr
- b __set_errno
- .fnend
diff --git a/android/libc/arch-mips/syscalls/adjtimex.S b/android/libc/arch-mips/syscalls/adjtimex.S
deleted file mode 100644
index 1af7b24..0000000
--- a/android/libc/arch-mips/syscalls/adjtimex.S
+++ b/dev/null
@@ -1,22 +0,0 @@
-/* autogenerated by gensyscalls.py */
-#include <sys/linux-syscalls.h>
- .text
- .globl adjtimex
- .align 4
- .ent adjtimex
-
-adjtimex:
- .set noreorder
- .cpload $t9
- li $v0, (4000+124)
- syscall
- bnez $a3, 1f
- move $a0, $v0
- j $ra
- nop
-1:
- la $t9,__set_errno
- j $t9
- nop
- .set reorder
- .end adjtimex
diff --git a/android/libc/arch-mips/syscalls/getsid.S b/android/libc/arch-mips/syscalls/getsid.S
deleted file mode 100644
index f61dee5..0000000
--- a/android/libc/arch-mips/syscalls/getsid.S
+++ b/dev/null
@@ -1,22 +0,0 @@
-/* autogenerated by gensyscalls.py */
-#include <sys/linux-syscalls.h>
- .text
- .globl getsid
- .align 4
- .ent getsid
-
-getsid:
- .set noreorder
- .cpload $t9
- li $v0, (4000+151)
- syscall
- bnez $a3, 1f
- move $a0, $v0
- j $ra
- nop
-1:
- la $t9,__set_errno
- j $t9
- nop
- .set reorder
- .end getsid
diff --git a/android/libc/arch-mips/syscalls/stime.S b/android/libc/arch-mips/syscalls/stime.S
deleted file mode 100644
index e640283..0000000
--- a/android/libc/arch-mips/syscalls/stime.S
+++ b/dev/null
@@ -1,22 +0,0 @@
-/* autogenerated by gensyscalls.py */
-#include <sys/linux-syscalls.h>
- .text
- .globl stime
- .align 4
- .ent stime
-
-stime:
- .set noreorder
- .cpload $t9
- li $v0, (4000+25)
- syscall
- bnez $a3, 1f
- move $a0, $v0
- j $ra
- nop
-1:
- la $t9,__set_errno
- j $t9
- nop
- .set reorder
- .end stime
diff --git a/android/libc/arch-mips/syscalls/swapoff.S b/android/libc/arch-mips/syscalls/swapoff.S
index 45e9ddb..5e851d5 100644
--- a/android/libc/arch-mips/syscalls/swapoff.S
+++ b/android/libc/arch-mips/syscalls/swapoff.S
@@ -1,5 +1,5 @@
/* autogenerated by gensyscalls.py */
-#include <sys/linux-syscalls.h>
+#include <asm/unistd.h>
.text
.globl swapoff
.align 4
diff --git a/android/libc/arch-mips/syscalls/swapon.S b/android/libc/arch-mips/syscalls/swapon.S
index a2c27ef..f4d1b3d 100644
--- a/android/libc/arch-mips/syscalls/swapon.S
+++ b/android/libc/arch-mips/syscalls/swapon.S
@@ -1,5 +1,5 @@
/* autogenerated by gensyscalls.py */
-#include <sys/linux-syscalls.h>
+#include <asm/unistd.h>
.text
.globl swapon
.align 4
diff --git a/android/libc/arch-mips/syscalls/sysinfo.S b/android/libc/arch-mips/syscalls/sysinfo.S
index 3f63504..6f4580f 100644
--- a/android/libc/arch-mips/syscalls/sysinfo.S
+++ b/android/libc/arch-mips/syscalls/sysinfo.S
@@ -1,5 +1,5 @@
/* autogenerated by gensyscalls.py */
-#include <sys/linux-syscalls.h>
+#include <asm/unistd.h>
.text
.globl sysinfo
.align 4
diff --git a/android/libc/arch-x86/syscalls/swapoff.S b/android/libc/arch-x86/syscalls/swapoff.S
new file mode 100644
index 0000000..5b4ee06
--- a/dev/null
+++ b/android/libc/arch-x86/syscalls/swapoff.S
@@ -0,0 +1,31 @@
+/* autogenerated by gensyscalls.py */
+
+#ifdef BIONIC_L
+# include <private/bionic_asm.h>
+#else
+# include <asm/unistd.h>
+# include <linux/err.h>
+# include <machine/asm.h>
+#endif
+
+ .text
+ .type swapoff, @function
+ .globl swapoff
+ .align 4
+
+swapoff:
+ pushl %ebx
+ mov 8(%esp), %ebx
+ movl $__NR_swapoff, %eax
+ int $0x80
+ cmpl $-MAX_ERRNO, %eax
+ jb 1f
+ negl %eax
+ pushl %eax
+ call __set_errno
+ addl $4, %esp
+ orl $-1, %eax
+1:
+ popl %ebx
+ ret
+
diff --git a/android/libc/arch-x86/syscalls/swapon.S b/android/libc/arch-x86/syscalls/swapon.S
new file mode 100644
index 0000000..957173e
--- a/dev/null
+++ b/android/libc/arch-x86/syscalls/swapon.S
@@ -0,0 +1,35 @@
+/* autogenerated by gensyscalls.py */
+
+#ifdef BIONIC_L
+# include <private/bionic_asm.h>
+#else
+# include <asm/unistd.h>
+# include <asm/unistd.h>
+# include <linux/err.h>
+# include <machine/asm.h>
+#endif
+
+ .text
+ .type swapon, @function
+ .globl swapon
+ .align 4
+
+swapon:
+ pushl %ebx
+ pushl %ecx
+ mov 12(%esp), %ebx
+ mov 16(%esp), %ecx
+ movl $__NR_swapon, %eax
+ int $0x80
+ cmpl $-MAX_ERRNO, %eax
+ jb 1f
+ negl %eax
+ pushl %eax
+ call __set_errno
+ addl $4, %esp
+ orl $-1, %eax
+1:
+ popl %ecx
+ popl %ebx
+ ret
+
diff --git a/android/libc/arch-x86/syscalls/sysinfo.S b/android/libc/arch-x86/syscalls/sysinfo.S
new file mode 100644
index 0000000..ea73dc0
--- a/dev/null
+++ b/android/libc/arch-x86/syscalls/sysinfo.S
@@ -0,0 +1,31 @@
+/* autogenerated by gensyscalls.py */
+
+#ifdef BIONIC_L
+# include <private/bionic_asm.h>
+#else
+# include <asm/unistd.h>
+# include <linux/err.h>
+# include <machine/asm.h>
+#endif
+
+ .text
+ .type sysinfo, @function
+ .globl sysinfo
+ .align 4
+
+sysinfo:
+ pushl %ebx
+ mov 8(%esp), %ebx
+ movl $__NR_sysinfo, %eax
+ int $0x80
+ cmpl $-MAX_ERRNO, %eax
+ jb 1f
+ negl %eax
+ pushl %eax
+ call __set_errno
+ addl $4, %esp
+ orl $-1, %eax
+1:
+ popl %ebx
+ ret
+
diff --git a/android/libc/mktemp.c b/android/libc/mktemp.c
new file mode 100644
index 0000000..0b2e933
--- a/dev/null
+++ b/android/libc/mktemp.c
@@ -0,0 +1,165 @@
+/*
+ * Copyright (c) 1987, 1993
+ * The Regents of the University of California. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * 3. Neither the name of the University nor the names of its contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+#if defined(LIBC_SCCS) && !defined(lint)
+static char sccsid[] = "@(#)mktemp.c 8.1 (Berkeley) 6/4/93";
+#endif /* LIBC_SCCS and not lint */
+#include <sys/cdefs.h>
+__FBSDID("$FreeBSD$");
+
+#include <sys/param.h>
+#include <sys/stat.h>
+#include <fcntl.h>
+#include <errno.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <ctype.h>
+#include <unistd.h>
+
+extern u_int32_t arc4random_uniform(u_int32_t);
+#define _open open
+
+static int _gettemp(char *, int *, int, int);
+
+static const char padchar[] =
+"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
+
+static char *
+_mktemp(char *path)
+{
+ return (_gettemp(path, (int *)NULL, 0, 0) ? path : (char *)NULL);
+}
+
+char *
+bb_mktemp(char *path)
+{
+ return (_mktemp(path));
+}
+
+static int
+_gettemp(char *path, int *doopen, int domkdir, int slen)
+{
+ char *start, *trv, *suffp, *carryp;
+ char *pad;
+ struct stat sbuf;
+ int rval;
+ uint32_t rand;
+ char carrybuf[MAXPATHLEN];
+
+ if ((doopen != NULL && domkdir) || slen < 0) {
+ errno = EINVAL;
+ return (0);
+ }
+
+ for (trv = path; *trv != '\0'; ++trv)
+ ;
+ if (trv - path >= MAXPATHLEN) {
+ errno = ENAMETOOLONG;
+ return (0);
+ }
+ trv -= slen;
+ suffp = trv;
+ --trv;
+ if (trv < path || NULL != strchr(suffp, '/')) {
+ errno = EINVAL;
+ return (0);
+ }
+
+ /* Fill space with random characters */
+ while (trv >= path && *trv == 'X') {
+ rand = arc4random_uniform(sizeof(padchar) - 1);
+ *trv-- = padchar[rand];
+ }
+ start = trv + 1;
+
+ /* save first combination of random characters */
+ memcpy(carrybuf, start, suffp - start);
+
+ /*
+ * check the target directory.
+ */
+ if (doopen != NULL || domkdir) {
+ for (; trv > path; --trv) {
+ if (*trv == '/') {
+ *trv = '\0';
+ rval = stat(path, &sbuf);
+ *trv = '/';
+ if (rval != 0)
+ return (0);
+ if (!S_ISDIR(sbuf.st_mode)) {
+ errno = ENOTDIR;
+ return (0);
+ }
+ break;
+ }
+ }
+ }
+
+ for (;;) {
+ if (doopen) {
+ if ((*doopen =
+ _open(path, O_CREAT|O_EXCL|O_RDWR, 0600)) >= 0)
+ return (1);
+ if (errno != EEXIST)
+ return (0);
+ } else if (domkdir) {
+ if (mkdir(path, 0700) == 0)
+ return (1);
+ if (errno != EEXIST)
+ return (0);
+ } else if (lstat(path, &sbuf))
+ return (errno == ENOENT);
+
+ /* If we have a collision, cycle through the space of filenames */
+ for (trv = start, carryp = carrybuf;;) {
+ /* have we tried all possible permutations? */
+ if (trv == suffp)
+ return (0); /* yes - exit with EEXIST */
+ pad = strchr(padchar, *trv);
+ if (pad == NULL) {
+ /* this should never happen */
+ errno = EIO;
+ return (0);
+ }
+ /* increment character */
+ *trv = (*++pad == '\0') ? padchar[0] : *pad;
+ /* carry to next position? */
+ if (*trv == *carryp) {
+ /* increment position and loop */
+ ++trv;
+ ++carryp;
+ } else {
+ /* try with new name */
+ break;
+ }
+ }
+ }
+ /*NOTREACHED*/
+}
diff --git a/android/libc/pty.c b/android/libc/pty.c
new file mode 100644
index 0000000..2765221
--- a/dev/null
+++ b/android/libc/pty.c
@@ -0,0 +1,118 @@
+/*
+ * Copyright (C) 2014 The Android Open Source Project
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * * Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * * Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in
+ * the documentation and/or other materials provided with the
+ * distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+ * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+ * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+ * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+ * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+/* #ifndef BIONIC_L (implementation was made after BIONIC_L (l-preview) */
+
+#include <errno.h>
+#include <fcntl.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <sys/ioctl.h>
+#include <termios.h>
+#include <unistd.h>
+
+#include <fcntl.h>
+/* if this constant is not defined, we are
+ ttyname is not in bionic */
+#ifndef SPLICE_F_GIFT
+
+int posix_openpt(int flags) {
+ return open("/dev/ptmx", flags);
+}
+
+int getpt(void) {
+ return posix_openpt(O_RDWR|O_NOCTTY);
+}
+
+#ifndef __BIONIC__
+int grantpt(int) {
+ return 0;
+}
+#endif
+
+char* ptsname(int fd) {
+ static char buf[64];
+ return ptsname_r(fd, buf, sizeof(buf)) == 0 ? buf : NULL;
+}
+
+int ptsname_r(int fd, char* buf, size_t len) {
+ if (buf == NULL) {
+ errno = EINVAL;
+ return errno;
+ }
+
+ unsigned int pty_num;
+ if (ioctl(fd, TIOCGPTN, &pty_num) != 0) {
+ errno = ENOTTY;
+ return errno;
+ }
+
+ if (snprintf(buf, len, "/dev/pts/%u", pty_num) >= (int) len) {
+ errno = ERANGE;
+ return errno;
+ }
+
+ return 0;
+}
+
+int bb_ttyname_r(int fd, char* buf, size_t len) {
+ if (buf == NULL) {
+ errno = EINVAL;
+ return errno;
+ }
+
+ if (!isatty(fd)) {
+ return errno;
+ }
+
+ char path[64];
+ snprintf(path, sizeof(path), "/proc/self/fd/%d", fd);
+
+ ssize_t count = readlink(path, buf, len);
+ if (count == -1) {
+ return errno;
+ }
+ if ((size_t) (count) == len) {
+ errno = ERANGE;
+ return errno;
+ }
+ buf[count] = '\0';
+ return 0;
+}
+
+char* bb_ttyname(int fd) {
+ static char buf[64];
+ return bb_ttyname_r(fd, buf, sizeof(buf)) == 0 ? buf : NULL;
+}
+
+int unlockpt(int fd) {
+ int unlock = 0;
+ return ioctl(fd, TIOCSPTLCK, &unlock);
+}
+
+#endif
diff --git a/android/librpc/bindresvport.c b/android/librpc/bindresvport.c
index 893873e..0181612 100644
--- a/android/librpc/bindresvport.c
+++ b/android/librpc/bindresvport.c
@@ -38,6 +38,7 @@
#include <string.h>
#ifdef ANDROID
#include <rpc/types.h>
+extern long __set_errno(int n);
#else
#include <sys/types.h>
#endif
diff --git a/android/librpc/pmap_rmt.c b/android/librpc/pmap_rmt.c
index 68089ae..e4dbd44 100644
--- a/android/librpc/pmap_rmt.c
+++ b/android/librpc/pmap_rmt.c
@@ -59,7 +59,7 @@ static char sccsid[] = "@(#)pmap_rmt.c 1.21 87/08/27 Copyr 1984 Sun Micro";
#include <arpa/inet.h>
#define MAX_BROADCAST_SIZE 1400
-#ifdef ANDROID
+#if defined(ANDROID) && !defined(BIONIC_L)
static struct in_addr inet_makeaddr(in_addr_t net, in_addr_t host)
{
struct in_addr a;
diff --git a/android/librpc/rpc_dtablesize.c b/android/librpc/rpc_dtablesize.c
index 692e8fc..0bd3a1c 100644
--- a/android/librpc/rpc_dtablesize.c
+++ b/android/librpc/rpc_dtablesize.c
@@ -38,6 +38,10 @@ static char sccsid[] = "@(#)rpc_dtablesize.c 1.2 87/08/11 Copyr 1987 Sun Micro";
#include <unistd.h>
#include <rpc/clnt.h>
+#ifdef BIONIC_L
+/* no more in unistd */
+extern int getdtablesize(void);
+#endif
/*
* Cache the result of getdtablesize(), so we don't have to do an
diff --git a/android/regex/regex.c b/android/regex/bb_regex.c
index b348d6c..682123c 100644
--- a/android/regex/regex.c
+++ b/android/regex/bb_regex.c
@@ -161,7 +161,7 @@ init_syntax_once ()
#endif /* not emacs */
/* Get the interface, including the syntax bits. */
-#include "regex.h"
+#include "bb_regex.h"
/* isalpha etc. are used for the character classes. */
#include <ctype.h>
@@ -922,7 +922,7 @@ reg_syntax_t re_syntax_options;
defined in regex.h. We return the old syntax. */
reg_syntax_t
-re_set_syntax (syntax)
+bb_re_set_syntax (syntax)
reg_syntax_t syntax;
{
reg_syntax_t ret = re_syntax_options;
@@ -2917,7 +2917,7 @@ compile_range (p_ptr, pend, translate, syntax, b)
Returns 0 if we succeed, -2 if an internal error. */
int
-re_compile_fastmap (bufp)
+bb_re_compile_fastmap (bufp)
struct re_pattern_buffer *bufp;
{
int j, k;
@@ -3223,7 +3223,7 @@ re_compile_fastmap (bufp)
freeing the old data. */
void
-re_set_registers (bufp, regs, num_regs, starts, ends)
+bb_re_set_registers (bufp, regs, num_regs, starts, ends)
struct re_pattern_buffer *bufp;
struct re_registers *regs;
unsigned num_regs;
@@ -3250,13 +3250,13 @@ re_set_registers (bufp, regs, num_regs, starts, ends)
doesn't let you say where to stop matching. */
int
-re_search (bufp, string, size, startpos, range, regs)
+bb_re_search (bufp, string, size, startpos, range, regs)
struct re_pattern_buffer *bufp;
const char *string;
int size, startpos, range;
struct re_registers *regs;
{
- return re_search_2 (bufp, NULL, 0, string, size, startpos, range,
+ return bb_re_search_2 (bufp, NULL, 0, string, size, startpos, range,
regs, size);
}
@@ -3283,7 +3283,7 @@ re_search (bufp, string, size, startpos, range, regs)
stack overflow). */
int
-re_search_2 (bufp, string1, size1, string2, size2, startpos, range, regs, stop)
+bb_re_search_2 (bufp, string1, size1, string2, size2, startpos, range, regs, stop)
struct re_pattern_buffer *bufp;
const char *string1, *string2;
int size1, size2;
@@ -3334,7 +3334,7 @@ re_search_2 (bufp, string1, size1, string2, size2, startpos, range, regs, stop)
/* Update the fastmap now if not correct already. */
if (fastmap && !bufp->fastmap_accurate)
- if (re_compile_fastmap (bufp) == -2)
+ if (bb_re_compile_fastmap (bufp) == -2)
return -2;
/* See whether the pattern is anchored. */
@@ -3526,7 +3526,7 @@ static boolean alt_match_null_string_p (),
/* re_match is like re_match_2 except it takes only a single string. */
int
-re_match (bufp, string, size, pos, regs)
+bb_re_match (bufp, string, size, pos, regs)
struct re_pattern_buffer *bufp;
const char *string;
int size, pos;
@@ -3554,7 +3554,7 @@ re_match (bufp, string, size, pos, regs)
matched substring. */
int
-re_match_2 (bufp, string1, size1, string2, size2, pos, regs, stop)
+bb_re_match_2 (bufp, string1, size1, string2, size2, pos, regs, stop)
struct re_pattern_buffer *bufp;
const char *string1, *string2;
int size1, size2;
@@ -5186,7 +5186,7 @@ bcmp_translate (s1, s2, len, translate)
We call regex_compile to do the actual compilation. */
const char *
-re_compile_pattern (pattern, length, bufp)
+bb_re_compile_pattern (pattern, length, bufp)
const char *pattern;
int length;
struct re_pattern_buffer *bufp;
@@ -5227,7 +5227,7 @@ char *
regcomp/regexec below without link errors. */
weak_function
#endif
-re_comp (s)
+bb_re_comp (s)
const char *s;
{
reg_errcode_t ret;
@@ -5271,12 +5271,12 @@ int
#ifdef _LIBC
weak_function
#endif
-re_exec (s)
+bb_re_exec (s)
const char *s;
{
const int len = strlen (s);
return
- 0 <= re_search (&re_comp_buf, s, len, 0, len, (struct re_registers *) 0);
+ 0 <= bb_re_search (&re_comp_buf, s, len, 0, len, (struct re_registers *) 0);
}
#endif /* _REGEX_RE_COMP */
@@ -5321,7 +5321,7 @@ int
#ifdef _LIBC
weak_function
#endif
-regcomp (preg, pattern, cflags)
+bb_regcomp (preg, pattern, cflags)
regex_t *preg;
const char *pattern;
int cflags;
@@ -5401,7 +5401,7 @@ int
#ifdef _LIBC
weak_function
#endif
-regexec (preg, string, nmatch, pmatch, eflags)
+bb_regexec (preg, string, nmatch, pmatch, eflags)
const regex_t *preg;
const char *string;
size_t nmatch;
@@ -5434,7 +5434,7 @@ regexec (preg, string, nmatch, pmatch, eflags)
}
/* Perform the searching operation. */
- ret = re_search (&private_preg, string, len,
+ ret = bb_re_search (&private_preg, string, len,
/* start: */ 0, /* range: */ len,
want_reg_info ? &regs : (struct re_registers *) 0);
@@ -5471,7 +5471,7 @@ size_t
regcomp/regexec below without link errors. */
weak_function
#endif
-regerror (errcode, preg, errbuf, errbuf_size)
+bb_regerror (errcode, preg, errbuf, errbuf_size)
int errcode;
const regex_t *preg;
char *errbuf;
@@ -5516,7 +5516,7 @@ void
regcomp/regexec below without link errors. */
weak_function
#endif
-regfree (preg)
+bb_regfree (preg)
regex_t *preg;
{
if (preg->buffer != NULL)
diff --git a/android/regex/regex.h b/android/regex/bb_regex.h
index eb1b406..27a08ba 100644
--- a/android/regex/regex.h
+++ b/android/regex/bb_regex.h
@@ -134,6 +134,27 @@ typedef unsigned reg_syntax_t;
without further backtracking. */
#define RE_NO_POSIX_BACKTRACKING (RE_UNMATCHED_RIGHT_PAREN_ORD << 1)
+/* If this bit is set, do not process the GNU regex operators.
+ If not set, then the GNU regex operators are recognized. */
+#define RE_NO_GNU_OPS (RE_NO_POSIX_BACKTRACKING << 1)
+
+/* If this bit is set, turn on internal regex debugging.
+ If not set, and debugging was on, turn it off.
+ This only works if regex.c is compiled -DDEBUG.
+ We define this bit always, so that all that's needed to turn on
+ debugging is to recompile regex.c; the calling code can always have
+ this bit set, and it won't affect anything in the normal case. */
+#define RE_DEBUG (RE_NO_GNU_OPS << 1)
+
+/* If this bit is set, a syntactically invalid interval is treated as
+ a string of ordinary characters. For example, the ERE 'a{1' is
+ treated as 'a\{1'. */
+#define RE_INVALID_INTERVAL_ORD (RE_DEBUG << 1)
+
+/* If this bit is set, then ignore case when matching.
+ If not set, then case is significant. */
+#define RE_ICASE (RE_INVALID_INTERVAL_ORD << 1)
+
/* This global variable defines the particular regexp syntax to use (for
some interfaces). When a regexp is compiled, the syntax used is
stored in the pattern buffer, so changing this does not affect
@@ -404,12 +425,12 @@ typedef struct
/* Sets the current default syntax to SYNTAX, and return the old syntax.
You can also simply assign to the `re_syntax_options' variable. */
-extern reg_syntax_t re_set_syntax _RE_ARGS ((reg_syntax_t syntax));
+extern reg_syntax_t bb_re_set_syntax _RE_ARGS ((reg_syntax_t syntax));
/* Compile the regular expression PATTERN, with length LENGTH
and syntax given by the global `re_syntax_options', into the buffer
BUFFER. Return NULL if successful, and an error string if not. */
-extern const char *re_compile_pattern
+extern const char *bb_re_compile_pattern
_RE_ARGS ((const char *pattern, int length,
struct re_pattern_buffer *buffer));
@@ -417,7 +438,7 @@ extern const char *re_compile_pattern
/* Compile a fastmap for the compiled pattern in BUFFER; used to
accelerate searches. Return 0 if successful and -2 if was an
internal error. */
-extern int re_compile_fastmap _RE_ARGS ((struct re_pattern_buffer *buffer));
+extern int bb_re_compile_fastmap _RE_ARGS ((struct re_pattern_buffer *buffer));
/* Search in the string STRING (with length LENGTH) for the pattern
@@ -425,14 +446,14 @@ extern int re_compile_fastmap _RE_ARGS ((struct re_pattern_buffer *buffer));
characters. Return the starting position of the match, -1 for no
match, or -2 for an internal error. Also return register
information in REGS (if REGS and BUFFER->no_sub are nonzero). */
-extern int re_search
+extern int bb_re_search
_RE_ARGS ((struct re_pattern_buffer *buffer, const char *string,
int length, int start, int range, struct re_registers *regs));
/* Like `re_search', but search in the concatenation of STRING1 and
STRING2. Also, stop searching at index START + STOP. */
-extern int re_search_2
+extern int bb_re_search_2
_RE_ARGS ((struct re_pattern_buffer *buffer, const char *string1,
int length1, const char *string2, int length2,
int start, int range, struct re_registers *regs, int stop));
@@ -440,13 +461,13 @@ extern int re_search_2
/* Like `re_search', but return how many characters in STRING the regexp
in BUFFER matched, starting at position START. */
-extern int re_match
+extern int bb_re_match
_RE_ARGS ((struct re_pattern_buffer *buffer, const char *string,
int length, int start, struct re_registers *regs));
/* Relates to `re_match' as `re_search_2' relates to `re_search'. */
-extern int re_match_2
+extern int bb_re_match_2
_RE_ARGS ((struct re_pattern_buffer *buffer, const char *string1,
int length1, const char *string2, int length2,
int start, struct re_registers *regs, int stop));
@@ -464,25 +485,25 @@ extern int re_match_2
Unless this function is called, the first search or match using
PATTERN_BUFFER will allocate its own register data, without
freeing the old data. */
-extern void re_set_registers
+extern void bb_re_set_registers
_RE_ARGS ((struct re_pattern_buffer *buffer, struct re_registers *regs,
unsigned num_regs, regoff_t *starts, regoff_t *ends));
#ifdef _REGEX_RE_COMP
/* 4.2 bsd compatibility. */
-extern char *re_comp _RE_ARGS ((const char *));
-extern int re_exec _RE_ARGS ((const char *));
+extern char *bb_re_comp _RE_ARGS ((const char *));
+extern int bb_re_exec _RE_ARGS ((const char *));
#endif
/* POSIX compatibility. */
-extern int regcomp _RE_ARGS ((regex_t *preg, const char *pattern, int cflags));
-extern int regexec
+extern int bb_regcomp _RE_ARGS ((regex_t *preg, const char *pattern, int cflags));
+extern int bb_regexec
_RE_ARGS ((const regex_t *preg, const char *string, size_t nmatch,
regmatch_t pmatch[], int eflags));
-extern size_t regerror
+extern size_t bb_regerror
_RE_ARGS ((int errcode, const regex_t *preg, char *errbuf,
size_t errbuf_size));
-extern void regfree _RE_ARGS ((regex_t *preg));
+extern void bb_regfree _RE_ARGS ((regex_t *preg));
#endif /* not __REGEXP_LIBRARY_H__ */
diff --git a/android/selinux/android_selinux.h b/android/selinux/android_selinux.h
new file mode 100644
index 0000000..8a0cfb0
--- a/dev/null
+++ b/android/selinux/android_selinux.h
@@ -0,0 +1,150 @@
+#ifndef BB_ANDROID_SELINUX_H
+#define BB_ANDROID_SELINUX_H
+
+#include <selinux/selinux.h>
+#include <selinux/label.h>
+#include <selinux/android.h>
+
+/* Set the function used by matchpathcon_init when displaying
+ errors about the file_contexts configuration. If not set,
+ then this defaults to fprintf(stderr, fmt, ...). */
+extern void set_matchpathcon_printf(void (*f) (const char *fmt, ...));
+
+/* Set the function used by matchpathcon_init when checking the
+ validity of a context in the file contexts configuration. If not set,
+ then this defaults to a test based on security_check_context().
+ The function is also responsible for reporting any such error, and
+ may include the 'path' and 'lineno' in such error messages. */
+extern void set_matchpathcon_invalidcon(int (*f) (const char *path,
+ unsigned lineno,
+ char *context));
+
+/* Same as above, but also allows canonicalization of the context,
+ by changing *context to refer to the canonical form. If not set,
+ and invalidcon is also not set, then this defaults to calling
+ security_canonicalize_context(). */
+extern void set_matchpathcon_canoncon(int (*f) (const char *path,
+ unsigned lineno,
+ char **context));
+
+/* Set flags controlling operation of matchpathcon_init or matchpathcon. */
+#define MATCHPATHCON_BASEONLY 1 /* Only process the base file_contexts file. */
+#define MATCHPATHCON_NOTRANS 2 /* Do not perform any context translation. */
+#define MATCHPATHCON_VALIDATE 4 /* Validate/canonicalize contexts at init time. */
+extern void set_matchpathcon_flags(unsigned int flags);
+
+/* Load the file contexts configuration specified by 'path'
+ into memory for use by subsequent matchpathcon calls.
+ If 'path' is NULL, then load the active file contexts configuration,
+ i.e. the path returned by selinux_file_context_path().
+ Unless the MATCHPATHCON_BASEONLY flag has been set, this
+ function also checks for a 'path'.homedirs file and
+ a 'path'.local file and loads additional specifications
+ from them if present. */
+extern int matchpathcon_init(const char *path);
+
+/* Same as matchpathcon_init, but only load entries with
+ regexes that have stems that are prefixes of 'prefix'. */
+extern int matchpathcon_init_prefix(const char *path, const char *prefix);
+
+/* Free the memory allocated by matchpathcon_init. */
+extern void matchpathcon_fini(void);
+
+/* Resolve all of the symlinks and relative portions of a pathname, but NOT
+ * the final component (same a realpath() unless the final component is a
+ * symlink. Resolved path must be a path of size PATH_MAX + 1 */
+extern int realpath_not_final(const char *name, char *resolved_path);
+
+/* Match the specified pathname and mode against the file contexts
+ configuration and set *con to refer to the resulting context.
+ 'mode' can be 0 to disable mode matching.
+ Caller must free via freecon.
+ If matchpathcon_init has not already been called, then this function
+ will call it upon its first invocation with a NULL path. */
+extern int matchpathcon(const char *path,
+ mode_t mode, char ** con);
+
+/* Same as above, but return a specification index for
+ later use in a matchpathcon_filespec_add() call - see below. */
+extern int matchpathcon_index(const char *path,
+ mode_t mode, char ** con);
+
+/* Maintain an association between an inode and a specification index,
+ and check whether a conflicting specification is already associated
+ with the same inode (e.g. due to multiple hard links). If so, then
+ use the latter of the two specifications based on their order in the
+ file contexts configuration. Return the used specification index. */
+extern int matchpathcon_filespec_add(ino_t ino, int specind, const char *file);
+
+/* Destroy any inode associations that have been added, e.g. to restart
+ for a new filesystem. */
+extern void matchpathcon_filespec_destroy(void);
+
+/* Display statistics on the hash table usage for the associations. */
+extern void matchpathcon_filespec_eval(void);
+
+/* Check to see whether any specifications had no matches and report them.
+ The 'str' is used as a prefix for any warning messages. */
+extern void matchpathcon_checkmatches(char *str);
+
+/*
+ * Verify the context of the file 'path' against policy.
+ * Return 1 if match, 0 if not and -1 on error.
+ */
+extern int selinux_file_context_verify(const char *path, mode_t mode);
+
+/* Get the default security context for a user session for 'user'
+ spawned by 'fromcon' and set *newcon to refer to it. The context
+ will be one of those authorized by the policy, but the selection
+ of a default is subject to user customizable preferences.
+ If 'fromcon' is NULL, defaults to current context.
+ Returns 0 on success or -1 otherwise.
+ Caller must free via freecon. */
+extern int get_default_context(const char* user, const char* fromcon,
+ char ** newcon);
+
+/* Check a permission in the passwd class.
+ Return 0 if granted or -1 otherwise. */
+#define PASSWD__PASSWD 0x001UL
+#define PASSWD__CHFN 0x002UL
+#define PASSWD__CHSH 0x004UL
+#define PASSWD__ROOTOK 0x008UL
+#define PASSWD__CRONTAB 0x010UL
+extern int selinux_check_passwd_access(access_vector_t requested);
+
+#define lgetfilecon_raw(path, context) \
+ lgetfilecon(path, context)
+
+#define lsetfilecon_raw(path, scontext) \
+ lsetfilecon(path, scontext)
+
+#define selabel_lookup_raw(hnd, con, path, mode) \
+ selabel_lookup(hnd, con, path, mode)
+
+#define security_canonicalize_context_raw(context, newctx) \
+ security_canonicalize_context(context, newctx)
+
+#define getprevcon_raw(context) \
+ getprevcon(context)
+
+#define is_context_customizable(ctx) false
+
+#define selinux_log(type, ...) bb_error_msg(__VA_ARGS__)
+
+#define selinux_policy_root() "/sepolicy"
+
+static int selinux_getenforcemode(int *rc)
+{
+ if (rc) {
+ *rc = security_getenforce();
+ return 0;
+ }
+ return -1;
+}
+
+static const char *selinux_file_contexts_path()
+{
+ return "/file_contexts";
+}
+
+#endif /* BB_ANDROID_SELINUX_H */
diff --git a/android/selinux/android_selinux_internal.h b/android/selinux/android_selinux_internal.h
new file mode 100644
index 0000000..dd7b771
--- a/dev/null
+++ b/android/selinux/android_selinux_internal.h
@@ -0,0 +1,248 @@
+/*
+ * selinux_internal.h and label_internal.h definitions (libselinux)
+ *
+ */
+#ifndef _SELINUX_BB_INTERNAL_H
+#define _SELINUX_BB_INTERNAL_H 1
+
+#include <selinux/selinux.h>
+#include <selinux/label.h>
+#include <pthread.h>
+
+#ifdef SHARED
+# define hidden __attribute__ ((visibility ("hidden")))
+# define hidden_proto(fct) __hidden_proto (fct, fct##_internal)
+# define __hidden_proto(fct, internal) \
+ extern __typeof (fct) internal; \
+ extern __typeof (fct) fct __asm (#internal) hidden;
+# if defined(__alpha__) || defined(__mips__)
+# define hidden_def(fct) \
+ asm (".globl " #fct "\n" #fct " = " #fct "_internal");
+# else
+# define hidden_def(fct) \
+ asm (".globl " #fct "\n.set " #fct ", " #fct "_internal");
+#endif
+#else
+# define hidden
+# define hidden_proto(fct)
+# define hidden_def(fct)
+#endif
+
+hidden_proto(selinux_mkload_policy)
+ hidden_proto(fini_selinuxmnt)
+ hidden_proto(set_selinuxmnt)
+ hidden_proto(selinuxfs_exists)
+ hidden_proto(security_disable)
+ hidden_proto(security_policyvers)
+ hidden_proto(security_load_policy)
+ hidden_proto(security_get_boolean_active)
+ hidden_proto(security_get_boolean_names)
+ hidden_proto(security_set_boolean)
+ hidden_proto(security_commit_booleans)
+ hidden_proto(security_check_context)
+ hidden_proto(security_check_context_raw)
+ hidden_proto(security_canonicalize_context)
+ hidden_proto(security_canonicalize_context_raw)
+ hidden_proto(security_compute_av)
+ hidden_proto(security_compute_av_raw)
+ hidden_proto(security_compute_av_flags)
+ hidden_proto(security_compute_av_flags_raw)
+ hidden_proto(security_compute_user)
+ hidden_proto(security_compute_user_raw)
+ hidden_proto(security_compute_create)
+ hidden_proto(security_compute_create_raw)
+ hidden_proto(security_compute_create_name)
+ hidden_proto(security_compute_create_name_raw)
+ hidden_proto(security_compute_member_raw)
+ hidden_proto(security_compute_relabel_raw)
+ hidden_proto(is_selinux_enabled)
+ hidden_proto(is_selinux_mls_enabled)
+ hidden_proto(freecon)
+ hidden_proto(freeconary)
+ hidden_proto(getprevcon)
+ hidden_proto(getprevcon_raw)
+ hidden_proto(getcon)
+ hidden_proto(getcon_raw)
+ hidden_proto(setcon_raw)
+ hidden_proto(getpeercon_raw)
+ hidden_proto(getpidcon_raw)
+ hidden_proto(getexeccon_raw)
+ hidden_proto(getfilecon)
+ hidden_proto(getfilecon_raw)
+ hidden_proto(lgetfilecon_raw)
+ hidden_proto(fgetfilecon_raw)
+ hidden_proto(setfilecon_raw)
+ hidden_proto(lsetfilecon_raw)
+ hidden_proto(fsetfilecon_raw)
+ hidden_proto(setexeccon)
+ hidden_proto(setexeccon_raw)
+ hidden_proto(getfscreatecon_raw)
+ hidden_proto(getkeycreatecon_raw)
+ hidden_proto(getsockcreatecon_raw)
+ hidden_proto(setfscreatecon_raw)
+ hidden_proto(setkeycreatecon_raw)
+ hidden_proto(setsockcreatecon_raw)
+ hidden_proto(security_getenforce)
+ hidden_proto(security_setenforce)
+ hidden_proto(security_deny_unknown)
+ hidden_proto(selinux_boolean_sub)
+ hidden_proto(selinux_binary_policy_path)
+ hidden_proto(selinux_booleans_subs_path)
+ hidden_proto(selinux_default_context_path)
+ hidden_proto(selinux_securetty_types_path)
+ hidden_proto(selinux_failsafe_context_path)
+ hidden_proto(selinux_removable_context_path)
+ hidden_proto(selinux_virtual_domain_context_path)
+ hidden_proto(selinux_virtual_image_context_path)
+ hidden_proto(selinux_lxc_contexts_path)
+ hidden_proto(selinux_file_context_path)
+ hidden_proto(selinux_file_context_homedir_path)
+ hidden_proto(selinux_file_context_local_path)
+ hidden_proto(selinux_file_context_subs_dist_path)
+ hidden_proto(selinux_file_context_subs_path)
+ hidden_proto(selinux_netfilter_context_path)
+ hidden_proto(selinux_homedir_context_path)
+ hidden_proto(selinux_user_contexts_path)
+ hidden_proto(selinux_booleans_path)
+ hidden_proto(selinux_customizable_types_path)
+ hidden_proto(selinux_media_context_path)
+ hidden_proto(selinux_x_context_path)
+ hidden_proto(selinux_sepgsql_context_path)
+ hidden_proto(selinux_path)
+ hidden_proto(selinux_check_passwd_access)
+ hidden_proto(selinux_check_securetty_context)
+ hidden_proto(matchpathcon_init_prefix)
+ hidden_proto(selinux_users_path)
+ hidden_proto(selinux_usersconf_path);
+hidden_proto(selinux_translations_path);
+hidden_proto(selinux_colors_path);
+hidden_proto(selinux_getenforcemode);
+hidden_proto(selinux_getpolicytype);
+hidden_proto(selinux_raw_to_trans_context);
+hidden_proto(selinux_trans_to_raw_context);
+ hidden_proto(selinux_raw_context_to_color);
+hidden_proto(security_get_initial_context);
+hidden_proto(security_get_initial_context_raw);
+hidden_proto(selinux_reset_config);
+
+extern int load_setlocaldefs hidden;
+extern int require_seusers hidden;
+extern int selinux_page_size hidden;
+
+/* Make pthread_once optional */
+#pragma weak pthread_once
+#pragma weak pthread_key_create
+#pragma weak pthread_key_delete
+#pragma weak pthread_setspecific
+
+/* Call handler iff the first call. */
+#define __selinux_once(ONCE_CONTROL, INIT_FUNCTION) \
+ do { \
+ if (pthread_once != NULL) \
+ pthread_once (&(ONCE_CONTROL), (INIT_FUNCTION)); \
+ else if ((ONCE_CONTROL) == PTHREAD_ONCE_INIT) { \
+ INIT_FUNCTION (); \
+ (ONCE_CONTROL) = 2; \
+ } \
+ } while (0)
+
+/* Pthread key macros */
+#define __selinux_key_create(KEY, DESTRUCTOR) \
+ (pthread_key_create != NULL ? pthread_key_create(KEY, DESTRUCTOR) : -1)
+
+#define __selinux_key_delete(KEY) \
+ do { \
+ if (pthread_key_delete != NULL) \
+ pthread_key_delete(KEY); \
+ } while (0)
+
+#define __selinux_setspecific(KEY, VALUE) \
+ do { \
+ if (pthread_setspecific != NULL) \
+ pthread_setspecific(KEY, VALUE); \
+ } while (0)
+
+
+/*
+ * Installed backends
+ */
+int selabel_file_init(struct selabel_handle *rec, struct selinux_opt *opts,
+ unsigned nopts) hidden;
+int selabel_media_init(struct selabel_handle *rec, struct selinux_opt *opts,
+ unsigned nopts) hidden;
+int selabel_x_init(struct selabel_handle *rec, struct selinux_opt *opts,
+ unsigned nopts) hidden;
+int selabel_db_init(struct selabel_handle *rec,
+ struct selinux_opt *opts, unsigned nopts) hidden;
+int selabel_property_init(struct selabel_handle *rec,
+ struct selinux_opt *opts, unsigned nopts) hidden;
+
+/*
+ * Labeling internal structures
+ */
+struct selabel_sub {
+ char *src;
+ int slen;
+ char *dst;
+ struct selabel_sub *next;
+};
+
+extern struct selabel_sub *selabel_subs_init(const char *path,
+ struct selabel_sub *list);
+
+struct selabel_lookup_rec {
+ security_context_t ctx_raw;
+ security_context_t ctx_trans;
+ int validated;
+};
+
+struct selabel_handle {
+ /* arguments that were passed to selabel_open */
+ unsigned int backend;
+ int validating;
+
+ /* labeling operations */
+ struct selabel_lookup_rec *(*func_lookup) (struct selabel_handle *h,
+ const char *key, int type);
+ void (*func_close) (struct selabel_handle *h);
+ void (*func_stats) (struct selabel_handle *h);
+
+ /* supports backend-specific state information */
+ void *data;
+#if 0
+ /*
+ * The main spec file used. Note for file contexts the local and/or
+ * homedirs could also have been used to resolve a context.
+ */
+ char *spec_file;
+#endif
+ /* substitution support */
+ struct selabel_sub *subs;
+};
+
+/*
+ * Validation function
+ */
+extern int
+selabel_validate(struct selabel_handle *rec,
+ struct selabel_lookup_rec *contexts) hidden;
+
+/*
+ * Compatibility support
+ */
+extern int myprintf_compat;
+extern void __attribute__ ((format(printf, 1, 2)))
+(*myprintf) (const char *fmt,...);
+
+#define COMPAT_LOG(type, fmt...) if (myprintf_compat) \
+ myprintf(fmt); \
+ else \
+ selinux_log(type, fmt);
+
+extern int
+compat_validate(struct selabel_handle *rec,
+ struct selabel_lookup_rec *contexts,
+ const char *path, unsigned lineno) hidden;
+
+
+#endif // _SELINUX_BB_INTERNAL_H
diff --git a/android/selinux/matchpathcon.c b/android/selinux/matchpathcon.c
new file mode 100644
index 0000000..074c029
--- a/dev/null
+++ b/android/selinux/matchpathcon.c
@@ -0,0 +1,564 @@
+#include <sys/stat.h>
+#include <string.h>
+#include <errno.h>
+#include <stdio.h>
+
+#include <selinux/selinux.h>
+#include <selinux/label.h>
+#include <selinux/android.h>
+
+#include "android_selinux.h"
+#include "android_selinux_internal.h"
+
+#include <libbb.h>
+
+static __thread struct selabel_handle *hnd = NULL;
+
+/*
+ * An array for mapping integers to contexts
+ */
+static __thread char **con_array;
+static __thread int con_array_size;
+static __thread int con_array_used;
+
+static pthread_once_t once = PTHREAD_ONCE_INIT;
+static pthread_key_t destructor_key;
+static int destructor_key_initialized = 0;
+
+static int add_array_elt(char *con)
+{
+ if (con_array_size) {
+ while (con_array_used >= con_array_size) {
+ con_array_size *= 2;
+ con_array = (char **)realloc(con_array, sizeof(char*) *
+ con_array_size);
+ if (!con_array) {
+ con_array_size = con_array_used = 0;
+ return -1;
+ }
+ }
+ } else {
+ con_array_size = 1000;
+ con_array = (char **)malloc(sizeof(char*) * con_array_size);
+ if (!con_array) {
+ con_array_size = con_array_used = 0;
+ return -1;
+ }
+ }
+
+ con_array[con_array_used] = strdup(con);
+ if (!con_array[con_array_used])
+ return -1;
+ return con_array_used++;
+}
+
+static void free_array_elts(void)
+{
+ con_array_size = con_array_used = 0;
+ free(con_array);
+ con_array = NULL;
+}
+
+static void
+#ifdef __GNUC__
+ __attribute__ ((format(printf, 1, 2)))
+#endif
+ default_printf(const char *fmt, ...)
+{
+ va_list ap;
+ va_start(ap, fmt);
+ vfprintf(stderr, fmt, ap);
+ va_end(ap);
+}
+
+void
+#ifdef __GNUC__
+ __attribute__ ((format(printf, 1, 2)))
+#endif
+ (*myprintf) (const char *fmt,...) = &default_printf;
+int myprintf_compat = 0;
+
+void set_matchpathcon_printf(void (*f) (const char *fmt, ...))
+{
+ myprintf = f ? f : &default_printf;
+ myprintf_compat = 1;
+}
+
+static int (*myinvalidcon) (const char *p, unsigned l, char *c) = NULL;
+
+void set_matchpathcon_invalidcon(int (*f) (const char *p, unsigned l, char *c))
+{
+ myinvalidcon = f;
+}
+
+static int default_canoncon(const char *path, unsigned lineno, char **context)
+{
+ char *tmpcon;
+ if (security_canonicalize_context_raw(*context, &tmpcon) < 0) {
+ if (errno == ENOENT)
+ return 0;
+ if (lineno)
+ myprintf("%s: line %u has invalid context %s\n", path,
+ lineno, *context);
+ else
+ myprintf("%s: invalid context %s\n", path, *context);
+ return 1;
+ }
+ free(*context);
+ *context = tmpcon;
+ return 0;
+}
+
+static int (*mycanoncon) (const char *p, unsigned l, char **c) =
+ NULL;
+
+void set_matchpathcon_canoncon(int (*f) (const char *p, unsigned l, char **c))
+{
+ if (f)
+ mycanoncon = f;
+ else
+ mycanoncon = &default_canoncon;
+}
+
+static __thread struct selinux_opt options[SELABEL_NOPT];
+static __thread int notrans;
+
+void set_matchpathcon_flags(unsigned int flags)
+{
+ int i;
+ memset(options, 0, sizeof(options));
+ i = SELABEL_OPT_BASEONLY;
+ options[i].type = i;
+ options[i].value = (flags & MATCHPATHCON_BASEONLY) ? (char*)1 : NULL;
+ i = SELABEL_OPT_VALIDATE;
+ options[i].type = i;
+ options[i].value = (flags & MATCHPATHCON_VALIDATE) ? (char*)1 : NULL;
+ notrans = flags & MATCHPATHCON_NOTRANS;
+}
+
+/*
+ * An association between an inode and a
+ * specification.
+ */
+typedef struct file_spec {
+ ino_t ino; /* inode number */
+ int specind; /* index of specification in spec */
+ char *file; /* full pathname for diagnostic messages about conflicts */
+ struct file_spec *next; /* next association in hash bucket chain */
+} file_spec_t;
+
+/*
+ * The hash table of associations, hashed by inode number.
+ * Chaining is used for collisions, with elements ordered
+ * by inode number in each bucket. Each hash bucket has a dummy
+ * header.
+ */
+#define HASH_BITS 16
+#define HASH_BUCKETS (1 << HASH_BITS)
+#define HASH_MASK (HASH_BUCKETS-1)
+static file_spec_t *fl_head;
+
+/*
+ * Try to add an association between an inode and
+ * a specification. If there is already an association
+ * for the inode and it conflicts with this specification,
+ * then use the specification that occurs later in the
+ * specification array.
+ */
+int matchpathcon_filespec_add(ino_t ino, int specind, const char *file)
+{
+ file_spec_t *prevfl, *fl;
+ int h, ret;
+ struct stat sb;
+
+ if (!fl_head) {
+ fl_head = malloc(sizeof(file_spec_t) * HASH_BUCKETS);
+ if (!fl_head)
+ goto oom;
+ memset(fl_head, 0, sizeof(file_spec_t) * HASH_BUCKETS);
+ }
+
+ h = (ino + (ino >> HASH_BITS)) & HASH_MASK;
+ for (prevfl = &fl_head[h], fl = fl_head[h].next; fl;
+ prevfl = fl, fl = fl->next) {
+ if (ino == fl->ino) {
+ ret = lstat(fl->file, &sb);
+ if (ret < 0 || sb.st_ino != ino) {
+ fl->specind = specind;
+ free(fl->file);
+ fl->file = malloc(strlen(file) + 1);
+ if (!fl->file)
+ goto oom;
+ strcpy(fl->file, file);
+ return fl->specind;
+
+ }
+
+ if (!strcmp(con_array[fl->specind],
+ con_array[specind]))
+ return fl->specind;
+
+ myprintf
+ ("%s: conflicting specifications for %s and %s, using %s.\n",
+ __FUNCTION__, file, fl->file,
+ con_array[fl->specind]);
+ free(fl->file);
+ fl->file = malloc(strlen(file) + 1);
+ if (!fl->file)
+ goto oom;
+ strcpy(fl->file, file);
+ return fl->specind;
+ }
+
+ if (ino > fl->ino)
+ break;
+ }
+
+ fl = malloc(sizeof(file_spec_t));
+ if (!fl)
+ goto oom;
+ fl->ino = ino;
+ fl->specind = specind;
+ fl->file = malloc(strlen(file) + 1);
+ if (!fl->file)
+ goto oom_freefl;
+ strcpy(fl->file, file);
+ fl->next = prevfl->next;
+ prevfl->next = fl;
+ return fl->specind;
+ oom_freefl:
+ free(fl);
+ oom:
+ myprintf("%s: insufficient memory for file label entry for %s\n",
+ __FUNCTION__, file);
+ return -1;
+}
+
+/*
+ * Evaluate the association hash table distribution.
+ */
+void matchpathcon_filespec_eval(void)
+{
+ file_spec_t *fl;
+ int h, used, nel, len, longest;
+
+ if (!fl_head)
+ return;
+
+ used = 0;
+ longest = 0;
+ nel = 0;
+ for (h = 0; h < HASH_BUCKETS; h++) {
+ len = 0;
+ for (fl = fl_head[h].next; fl; fl = fl->next) {
+ len++;
+ }
+ if (len)
+ used++;
+ if (len > longest)
+ longest = len;
+ nel += len;
+ }
+
+ myprintf
+ ("%s: hash table stats: %d elements, %d/%d buckets used, longest chain length %d\n",
+ __FUNCTION__, nel, used, HASH_BUCKETS, longest);
+}
+
+/*
+ * Destroy the association hash table.
+ */
+void matchpathcon_filespec_destroy(void)
+{
+ file_spec_t *fl, *tmp;
+ int h;
+
+ free_array_elts();
+
+ if (!fl_head)
+ return;
+
+ for (h = 0; h < HASH_BUCKETS; h++) {
+ fl = fl_head[h].next;
+ while (fl) {
+ tmp = fl;
+ fl = fl->next;
+ free(tmp->file);
+ free(tmp);
+ }
+ fl_head[h].next = NULL;
+ }
+ free(fl_head);
+ fl_head = NULL;
+}
+
+static void matchpathcon_thread_destructor(void __attribute__((unused)) *ptr)
+{
+ matchpathcon_fini();
+}
+
+void __attribute__((destructor)) matchpathcon_lib_destructor(void);
+
+void hidden __attribute__((destructor)) matchpathcon_lib_destructor(void)
+{
+ if (destructor_key_initialized)
+ __selinux_key_delete(destructor_key);
+}
+
+static void matchpathcon_init_once(void)
+{
+ if (__selinux_key_create(&destructor_key, matchpathcon_thread_destructor) == 0)
+ destructor_key_initialized = 1;
+}
+
+int matchpathcon_init_prefix(const char *path, const char *subset)
+{
+ if (!mycanoncon)
+ mycanoncon = default_canoncon;
+
+ __selinux_once(once, matchpathcon_init_once);
+ __selinux_setspecific(destructor_key, (void *)1);
+
+ options[SELABEL_OPT_SUBSET].type = SELABEL_OPT_SUBSET;
+ options[SELABEL_OPT_SUBSET].value = subset;
+ options[SELABEL_OPT_PATH].type = SELABEL_OPT_PATH;
+ options[SELABEL_OPT_PATH].value = path;
+
+ hnd = selabel_open(SELABEL_CTX_FILE, options, SELABEL_NOPT);
+
+ return hnd ? 0 : -1;
+}
+
+hidden_def(matchpathcon_init_prefix)
+
+int matchpathcon_init(const char *path)
+{
+ return matchpathcon_init_prefix(path, NULL);
+}
+
+void matchpathcon_fini(void)
+{
+ free_array_elts();
+
+ if (hnd) {
+ selabel_close(hnd);
+ hnd = NULL;
+ }
+}
+
+/*
+ * We do not want to resolve a symlink to a real path if it is the final
+ * component of the name. Thus we split the pathname on the last "/" and
+ * determine a real path component of the first portion. We then have to
+ * copy the last part back on to get the final real path. Wheww.
+ */
+int realpath_not_final(const char *name, char *resolved_path)
+{
+ char *last_component;
+ char *tmp_path, *p;
+ size_t len = 0;
+ int rc = 0;
+
+ tmp_path = strdup(name);
+ if (!tmp_path) {
+ myprintf("symlink_realpath(%s) strdup() failed: %s\n",
+ name, strerror(errno));
+ rc = -1;
+ goto out;
+ }
+
+ /* strip leading // */
+ while (tmp_path[len] && tmp_path[len] == '/' &&
+ tmp_path[len+1] && tmp_path[len+1] == '/') {
+ tmp_path++;
+ len++;
+ }
+ last_component = strrchr(tmp_path, '/');
+
+ if (last_component == tmp_path) {
+ last_component++;
+ p = strcpy(resolved_path, "");
+ } else if (last_component) {
+ *last_component = '\0';
+ last_component++;
+ p = realpath(tmp_path, resolved_path);
+ } else {
+ last_component = tmp_path;
+ p = realpath("./", resolved_path);
+ }
+
+ if (!p) {
+ myprintf("symlink_realpath(%s) realpath() failed: %s\n",
+ name, strerror(errno));
+ rc = -1;
+ goto out;
+ }
+
+ len = strlen(p);
+ if (len + strlen(last_component) + 2 > PATH_MAX) {
+ myprintf("symlink_realpath(%s) failed: Filename too long \n",
+ name);
+ errno=ENAMETOOLONG;
+ rc = -1;
+ goto out;
+ }
+
+ resolved_path += len;
+ strcpy(resolved_path, "/");
+ resolved_path += 1;
+ strcpy(resolved_path, last_component);
+out:
+ free(tmp_path);
+ return rc;
+}
+
+int matchpathcon(const char *path, mode_t mode, char ** con)
+{
+ char stackpath[PATH_MAX + 1];
+ char *p = NULL;
+ int ret;
+
+ if (!hnd && (matchpathcon_init_prefix(NULL, NULL) < 0))
+ return -1;
+
+ if (S_ISLNK(mode)) {
+ if (!realpath_not_final(path, stackpath))
+ path = stackpath;
+ } else {
+ p = realpath(path, stackpath);
+ if (p)
+ path = p;
+ }
+
+ ret = notrans ?
+ selabel_lookup_raw(hnd, con, path, mode) :
+ selabel_lookup(hnd, con, path, mode);
+
+ return ret;
+}
+
+int matchpathcon_index(const char *name, mode_t mode, char ** con)
+{
+ int i = matchpathcon(name, mode, con);
+
+ if (i < 0)
+ return -1;
+
+ return add_array_elt(*con);
+}
+
+void matchpathcon_checkmatches(char *str __attribute__((unused)))
+{
+ selabel_stats(hnd);
+}
+
+/* Compare two contexts to see if their differences are "significant",
+ * or whether the only difference is in the user. */
+int selinux_file_context_cmp(const char * a,
+ const char * b)
+{
+ char *rest_a, *rest_b; /* Rest of the context after the user */
+ if (!a && !b)
+ return 0;
+ if (!a)
+ return -1;
+ if (!b)
+ return 1;
+ rest_a = strchr((char *)a, ':');
+ rest_b = strchr((char *)b, ':');
+ if (!rest_a && !rest_b)
+ return 0;
+ if (!rest_a)
+ return -1;
+ if (!rest_b)
+ return 1;
+ return strcmp(rest_a, rest_b);
+}
+
+int selinux_file_context_verify(const char *path, mode_t mode)
+{
+ char * con = NULL;
+ char * fcontext = NULL;
+ int rc = 0;
+
+ rc = lgetfilecon_raw(path, &con);
+ if (rc == -1) {
+ if (errno != ENOTSUP)
+ return -1;
+ else
+ return 0;
+ }
+
+ if (!hnd && (matchpathcon_init_prefix(NULL, NULL) < 0))
+ return -1;
+
+ if (selabel_lookup_raw(hnd, &fcontext, path, mode) != 0) {
+ if (errno != ENOENT)
+ rc = -1;
+ else
+ rc = 0;
+ } else {
+ /*
+ * Need to set errno to 0 as it can be set to ENOENT if the
+ * file_contexts.subs file does not exist (see selabel_open in
+ * label.c), thus causing confusion if errno is checked on return.
+ */
+ errno = 0;
+ rc = (selinux_file_context_cmp(fcontext, con) == 0);
+ }
+
+ freecon(con);
+ freecon(fcontext);
+ return rc;
+}
+
+int selinux_lsetfilecon_default(const char *path)
+{
+ struct stat st;
+ int rc = -1;
+ char * scontext = NULL;
+ if (lstat(path, &st) != 0)
+ return rc;
+
+ if (!hnd && (matchpathcon_init_prefix(NULL, NULL) < 0))
+ return -1;
+
+ /* If there's an error determining the context, or it has none,
+ return to allow default context */
+ if (selabel_lookup_raw(hnd, &scontext, path, st.st_mode)) {
+ if (errno == ENOENT)
+ rc = 0;
+ } else {
+ rc = lsetfilecon_raw(path, scontext);
+ freecon(scontext);
+ }
+ return rc;
+}
+
+int compat_validate(struct selabel_handle *rec,
+ struct selabel_lookup_rec *contexts,
+ const char *path, unsigned lineno)
+{
+ int rc;
+ char **ctx = &contexts->ctx_raw;
+
+ if (myinvalidcon)
+ rc = myinvalidcon(path, lineno, *ctx);
+ else if (mycanoncon)
+ rc = mycanoncon(path, lineno, ctx);
+ else {
+ rc = selabel_validate(rec, contexts);
+ if (rc < 0) {
+ if (lineno) {
+ COMPAT_LOG(SELINUX_WARNING,
+ "%s: line %d has invalid context %s\n",
+ path, lineno, *ctx);
+ } else {
+ COMPAT_LOG(SELINUX_WARNING,
+ "%s: has invalid context %s\n", path, *ctx);
+ }
+ }
+ }
+
+ return rc ? -1 : 0;
+}
diff --git a/android/selinux/stubs.c b/android/selinux/stubs.c
new file mode 100644
index 0000000..c01bc57
--- a/dev/null
+++ b/android/selinux/stubs.c
@@ -0,0 +1,39 @@
+#include <libbb.h>
+#include <selinux/selinux.h>
+
+/* create a new context with user name (may be unsafe) */
+int get_default_context(const char* user,
+ const char* fromcon UNUSED_PARAM,
+ char ** newcon)
+{
+ char fmt[] = "u:r:%s:s0\0";
+ int len = strlen(user) + strlen(fmt);
+
+ *newcon = malloc(len);
+ if (!(*newcon))
+ return -1;
+ snprintf(*newcon, len, fmt, user);
+ return 0;
+}
+
+/* Compute a relabeling decision and set *newcon to refer to it.
+ Caller must free via freecon.
+ Stub not implemented in bionic, but declared in selinux.h */
+int security_compute_relabel(const char *scon UNUSED_PARAM,
+ const char *tcon,
+ security_class_t tclass UNUSED_PARAM,
+ char ** newcon)
+{
+ if (tcon)
+ *newcon = strdup(tcon);
+ if (!(*newcon))
+ return -1;
+ return 0;
+}
+
+/* Check a permission in the passwd class.
+ Return 0 if granted or -1 otherwise. */
+int selinux_check_passwd_access(access_vector_t requested UNUSED_PARAM)
+{
+ return 0;
+}
diff --git a/applets/applet_tables.c b/applets/applet_tables.c
index 152d5f4..94b974e 100644
--- a/applets/applet_tables.c
+++ b/applets/applet_tables.c
@@ -53,7 +53,7 @@ int main(int argc, char **argv)
{
int i;
int ofs;
- unsigned MAX_APPLET_NAME_LEN = 1;
+// unsigned MAX_APPLET_NAME_LEN = 1;
qsort(applets, NUM_APPLETS, sizeof(applets[0]), cmp_name);
@@ -89,8 +89,8 @@ int main(int argc, char **argv)
printf("const char applet_names[] ALIGN1 = \"\"\n");
for (i = 0; i < NUM_APPLETS; i++) {
printf("\"%s\" \"\\0\"\n", applets[i].name);
- if (MAX_APPLET_NAME_LEN < strlen(applets[i].name))
- MAX_APPLET_NAME_LEN = strlen(applets[i].name);
+// if (MAX_APPLET_NAME_LEN < strlen(applets[i].name))
+// MAX_APPLET_NAME_LEN = strlen(applets[i].name);
}
printf(";\n\n");
@@ -130,8 +130,8 @@ int main(int argc, char **argv)
printf("};\n");
#endif
//printf("#endif /* SKIP_definitions */\n");
- printf("\n");
- printf("#define MAX_APPLET_NAME_LEN %u\n", MAX_APPLET_NAME_LEN);
+// printf("\n");
+// printf("#define MAX_APPLET_NAME_LEN %u\n", MAX_APPLET_NAME_LEN);
if (argv[2]) {
char line_old[80];
diff --git a/applets/busybox.mksuid b/applets/busybox.mksuid
new file mode 100755
index 0000000..6492c07
--- a/dev/null
+++ b/applets/busybox.mksuid
@@ -0,0 +1,54 @@
+#!/bin/sh
+# Make list of configuration variables regarding suid handling
+
+# input $1: full path to autoconf.h
+# input $2: full path to applets.h
+# input $3: full path to .config
+# output (stdout): list of CONFIG_ that do or may require suid
+
+# If the environment variable SUID is not set or set to DROP,
+# lists all config options that do not require suid permissions.
+# Otherwise, lists all config options for applets that DO or MAY require
+# suid permissions.
+
+# Maintainer: Bernhard Reutner-Fischer
+
+export LC_ALL=POSIX
+export LC_CTYPE=POSIX
+
+CONFIG_H=${1:-include/autoconf.h}
+APPLETS_H=${2:-include/applets.h}
+DOT_CONFIG=${3:-.config}
+
+case ${SUID:-DROP} in
+[dD][rR][oO][pP]) USE="DROP" ;;
+*) USE="suid" ;;
+esac
+
+$HOSTCC -E -DMAKE_SUID -include $CONFIG_H $APPLETS_H |
+ awk -v USE=${USE} '
+ /^SUID[ \t]/{
+ if (USE == "DROP") {
+ if ($2 != "BB_SUID_DROP") next
+ } else {
+ if ($2 == "BB_SUID_DROP") next
+ }
+ cfg = $NF
+ gsub("\"", "", cfg)
+ cfg = substr(cfg, 8)
+ s[i++] = "CONFIG_" cfg
+ s[i++] = "CONFIG_FEATURE_" cfg "_.*"
+ }
+ END{
+ while (getline < ARGV[2]) {
+ for (j in s) {
+ if ($0 ~ "^" s[j] "=y$") {
+ sub(/=.*/, "")
+ print
+ if (s[j] !~ /\*$/) delete s[j] # can drop this applet now
+ }
+ }
+ }
+ }
+' - $DOT_CONFIG
+
diff --git a/applets/usage_compressed b/applets/usage_compressed
index af66bc5..fb6e1c2 100755
--- a/applets/usage_compressed
+++ b/applets/usage_compressed
@@ -10,20 +10,20 @@ test "$SED" || SED=sed
test "$DD" || DD=dd
# Some people were bitten by their system lacking a (proper) od
-od -v -t x1 </dev/null >/dev/null
+od -v -b </dev/null >/dev/null
if test $? != 0; then
- echo 'od tool is not installed or cannot accept "-v -t x1" options'
+ echo 'od tool is not installed or cannot accept "-v -b" options'
exit 1
fi
exec >"$target.$$"
echo '#define UNPACKED_USAGE "" \'
-"$loc/usage" | od -v -t x1 \
+"$loc/usage" | od -v -b \
| $SED -e 's/^[^ ]*//' \
-e 's/ //g' \
-e '/^$/d' \
- -e 's/\(..\)/\\x\1/g' \
+ -e 's/\(...\)/\\\1/g' \
-e 's/^/"/' \
-e 's/$/" \\/'
echo ''
@@ -39,11 +39,11 @@ echo '#define PACKED_USAGE \'
## -e '/^$/d' \
## -e 's/\(..\)\(..\)/0x\2,0x\1,/g'
## -e 's/$/ \\/'
-"$loc/usage" | bzip2 -1 | $DD bs=2 skip=1 2>/dev/null | od -v -t x1 \
+"$loc/usage" | bzip2 -1 | $DD bs=2 skip=1 2>/dev/null | od -v -b \
| $SED -e 's/^[^ ]*//' \
-e 's/ //g' \
-e '/^$/d' \
- -e 's/\(..\)/0x\1,/g' \
+ -e 's/\(...\)/0\1,/g' \
-e 's/$/ \\/'
echo ''
diff --git a/archival/Config.src b/archival/Config.src
index ae1afc5..76635ba 100644
--- a/archival/Config.src
+++ b/archival/Config.src
@@ -5,8 +5,6 @@
menu "Archival Utilities"
-INSERT
-
config FEATURE_SEAMLESS_XZ
bool "Make tar, rpm, modprobe etc understand .xz data"
default y
@@ -37,352 +35,6 @@ config FEATURE_SEAMLESS_Z
help
Make tar, rpm, modprobe etc understand .Z data.
-config AR
- bool "ar"
- default n # needs to be improved to be able to replace binutils ar
- help
- ar is an archival utility program used to create, modify, and
- extract contents from archives. An archive is a single file holding
- a collection of other files in a structure that makes it possible to
- retrieve the original individual files (called archive members).
- The original files' contents, mode (permissions), timestamp, owner,
- and group are preserved in the archive, and can be restored on
- extraction.
-
- The stored filename is limited to 15 characters. (for more information
- see long filename support).
- ar has 60 bytes of overheads for every stored file.
-
- This implementation of ar can extract archives, it cannot create or
- modify them.
- On an x86 system, the ar applet adds about 1K.
-
- Unless you have a specific application which requires ar, you should
- probably say N here.
-
-config FEATURE_AR_LONG_FILENAMES
- bool "Support for long filenames (not needed for debs)"
- default y
- depends on AR
- help
- By default the ar format can only store the first 15 characters
- of the filename, this option removes that limitation.
- It supports the GNU ar long filename method which moves multiple long
- filenames into a the data section of a new ar entry.
-
-config FEATURE_AR_CREATE
- bool "Support archive creation"
- default y
- depends on AR
- help
- This enables archive creation (-c and -r) with busybox ar.
-
-config BUNZIP2
- bool "bunzip2"
- default y
- help
- bunzip2 is a compression utility using the Burrows-Wheeler block
- sorting text compression algorithm, and Huffman coding. Compression
- is generally considerably better than that achieved by more
- conventional LZ77/LZ78-based compressors, and approaches the
- performance of the PPM family of statistical compressors.
-
- Unless you have a specific application which requires bunzip2, you
- should probably say N here.
-
-config BZIP2
- bool "bzip2"
- default y
- help
- bzip2 is a compression utility using the Burrows-Wheeler block
- sorting text compression algorithm, and Huffman coding. Compression
- is generally considerably better than that achieved by more
- conventional LZ77/LZ78-based compressors, and approaches the
- performance of the PPM family of statistical compressors.
-
- Unless you have a specific application which requires bzip2, you
- should probably say N here.
-
-config CPIO
- bool "cpio"
- default y
- help
- cpio is an archival utility program used to create, modify, and
- extract contents from archives.
- cpio has 110 bytes of overheads for every stored file.
-
- This implementation of cpio can extract cpio archives created in the
- "newc" or "crc" format, it cannot create or modify them.
-
- Unless you have a specific application which requires cpio, you
- should probably say N here.
-
-config FEATURE_CPIO_O
- bool "Support for archive creation"
- default y
- depends on CPIO
- help
- This implementation of cpio can create cpio archives in the "newc"
- format only.
-
-config FEATURE_CPIO_P
- bool "Support for passthrough mode"
- default y
- depends on FEATURE_CPIO_O
- help
- Passthrough mode. Rarely used.
-
-config DPKG
- bool "dpkg"
- default n
- select FEATURE_SEAMLESS_GZ
- help
- dpkg is a medium-level tool to install, build, remove and manage
- Debian packages.
-
- This implementation of dpkg has a number of limitations,
- you should use the official dpkg if possible.
-
-config DPKG_DEB
- bool "dpkg_deb"
- default n
- select FEATURE_SEAMLESS_GZ
- help
- dpkg-deb unpacks and provides information about Debian archives.
-
- This implementation of dpkg-deb cannot pack archives.
-
- Unless you have a specific application which requires dpkg-deb,
- say N here.
-
-config FEATURE_DPKG_DEB_EXTRACT_ONLY
- bool "Extract only (-x)"
- default n
- depends on DPKG_DEB
- help
- This reduces dpkg-deb to the equivalent of
- "ar -p <deb> data.tar.gz | tar -zx". However it saves space as none
- of the extra dpkg-deb, ar or tar options are needed, they are linked
- to internally.
-
-config GUNZIP
- bool "gunzip"
- default y
- help
- gunzip is used to decompress archives created by gzip.
- You can use the `-t' option to test the integrity of
- an archive, without decompressing it.
-
-config GZIP
- bool "gzip"
- default y
- help
- gzip is used to compress files.
- It's probably the most widely used UNIX compression program.
-
-config FEATURE_GZIP_LONG_OPTIONS
- bool "Enable long options"
- default y
- depends on GZIP && LONG_OPTS
- help
- Enable use of long options, increases size by about 106 Bytes
-
-config GZIP_FAST
- int "Trade memory for gzip speed (0:small,slow - 2:fast,big)"
- default 0
- range 0 2
- depends on GZIP
- help
- Enable big memory options for gzip.
- 0: small buffers, small hash-tables
- 1: larger buffers, larger hash-tables
- 2: larger buffers, largest hash-tables
- Larger models may give slightly better compression
-
-config LZOP
- bool "lzop"
- default y
- help
- Lzop compression/decompresion.
-
-config LZOP_COMPR_HIGH
- bool "lzop compression levels 7,8,9 (not very useful)"
- default n
- depends on LZOP
- help
- High levels (7,8,9) of lzop compression. These levels
- are actually slower than gzip at equivalent compression ratios
- and take up 3.2K of code.
-
-config RPM2CPIO
- bool "rpm2cpio"
- default y
- help
- Converts a RPM file into a CPIO archive.
-
-config RPM
- bool "rpm"
- default y
- help
- Mini RPM applet - queries and extracts RPM packages.
-
-config TAR
- bool "tar"
- default y
- help
- tar is an archiving program. It's commonly used with gzip to
- create compressed archives. It's probably the most widely used
- UNIX archive program.
-
-config FEATURE_TAR_CREATE
- bool "Enable archive creation"
- default y
- depends on TAR
- help
- If you enable this option you'll be able to create
- tar archives using the `-c' option.
-
-config FEATURE_TAR_AUTODETECT
- bool "Autodetect compressed tarballs"
- default y
- depends on TAR && (FEATURE_SEAMLESS_Z || FEATURE_SEAMLESS_GZ || FEATURE_SEAMLESS_BZ2 || FEATURE_SEAMLESS_LZMA || FEATURE_SEAMLESS_XZ)
- help
- With this option tar can automatically detect compressed
- tarballs. Currently it works only on files (not pipes etc).
-
-config FEATURE_TAR_FROM
- bool "Enable -X (exclude from) and -T (include from) options)"
- default y
- depends on TAR
- help
- If you enable this option you'll be able to specify
- a list of files to include or exclude from an archive.
-
-config FEATURE_TAR_OLDGNU_COMPATIBILITY
- bool "Support for old tar header format"
- default y
- depends on TAR || DPKG
- help
- This option is required to unpack archives created in
- the old GNU format; help to kill this old format by
- repacking your ancient archives with the new format.
-
-config FEATURE_TAR_OLDSUN_COMPATIBILITY
- bool "Enable untarring of tarballs with checksums produced by buggy Sun tar"
- default y
- depends on TAR || DPKG
- help
- This option is required to unpack archives created by some old
- version of Sun's tar (it was calculating checksum using signed
- arithmetic). It is said to be fixed in newer Sun tar, but "old"
- tarballs still exist.
-
-config FEATURE_TAR_GNU_EXTENSIONS
- bool "Support for GNU tar extensions (long filenames)"
- default y
- depends on TAR || DPKG
- help
- With this option busybox supports GNU long filenames and
- linknames.
-
-config FEATURE_TAR_LONG_OPTIONS
- bool "Enable long options"
- default y
- depends on TAR && LONG_OPTS
- help
- Enable use of long options, increases size by about 400 Bytes
-
-config FEATURE_TAR_TO_COMMAND
- bool "Support for writing to an external program"
- default y
- depends on TAR && FEATURE_TAR_LONG_OPTIONS
- help
- If you enable this option you'll be able to instruct tar to send
- the contents of each extracted file to the standard input of an
- external program.
-
-config FEATURE_TAR_UNAME_GNAME
- bool "Enable use of user and group names"
- default y
- depends on TAR
- help
- Enables use of user and group names in tar. This affects contents
- listings (-t) and preserving permissions when unpacking (-p).
- +200 bytes.
-
-config FEATURE_TAR_NOPRESERVE_TIME
- bool "Enable -m (do not preserve time) option"
- default y
- depends on TAR
- help
- With this option busybox supports GNU tar -m
- (do not preserve time) option.
-
-config FEATURE_TAR_SELINUX
- bool "Support for extracting SELinux labels"
- default n
- depends on TAR && SELINUX
- help
- With this option busybox supports restoring SELinux labels
- when extracting files from tar archives.
-
-config UNCOMPRESS
- bool "uncompress"
- default n
- help
- uncompress is used to decompress archives created by compress.
- Not much used anymore, replaced by gzip/gunzip.
-
-config UNLZMA
- bool "unlzma"
- default y
- help
- unlzma is a compression utility using the Lempel-Ziv-Markov chain
- compression algorithm, and range coding. Compression
- is generally considerably better than that achieved by the bzip2
- compressors.
-
- The BusyBox unlzma applet is limited to decompression only.
- On an x86 system, this applet adds about 4K.
-
-config FEATURE_LZMA_FAST
- bool "Optimize unlzma for speed"
- default n
- depends on UNLZMA
- help
- This option reduces decompression time by about 25% at the cost of
- a 1K bigger binary.
-
-config LZMA
- bool "Provide lzma alias which supports only unpacking"
- default y
- depends on UNLZMA
- help
- Enable this option if you want commands like "lzma -d" to work.
- IOW: you'll get lzma applet, but it will always require -d option.
-
-config UNXZ
- bool "unxz"
- default y
- help
- unxz is a unlzma successor.
-
-config XZ
- bool "Provide xz alias which supports only unpacking"
- default y
- depends on UNXZ
- help
- Enable this option if you want commands like "xz -d" to work.
- IOW: you'll get xz applet, but it will always require -d option.
-
-config UNZIP
- bool "unzip"
- default y
- help
- unzip will list or extract files from a ZIP archive,
- commonly found on DOS/WIN systems. The default behavior
- (with no options) is to extract the archive into the
- current directory. Use the `-d' option to extract to a
- directory of your choice.
+INSERT
endmenu
diff --git a/archival/Kbuild.src b/archival/Kbuild.src
index 3466452..a6fd2ea 100644
--- a/archival/Kbuild.src
+++ b/archival/Kbuild.src
@@ -9,22 +9,3 @@ libs-y += libarchive/
lib-y:=
INSERT
-
-lib-$(CONFIG_AR) += ar.o
-lib-$(CONFIG_CPIO) += cpio.o
-lib-$(CONFIG_DPKG) += dpkg.o
-lib-$(CONFIG_DPKG_DEB) += dpkg_deb.o
-lib-$(CONFIG_RPM2CPIO) += rpm2cpio.o
-lib-$(CONFIG_RPM) += rpm.o
-lib-$(CONFIG_TAR) += tar.o
-lib-$(CONFIG_UNZIP) += unzip.o
-
-lib-$(CONFIG_LZOP) += lzop.o bbunzip.o
-lib-$(CONFIG_GZIP) += gzip.o bbunzip.o
-lib-$(CONFIG_BZIP2) += bzip2.o bbunzip.o
-
-lib-$(CONFIG_UNXZ) += bbunzip.o
-lib-$(CONFIG_UNLZMA) += bbunzip.o
-lib-$(CONFIG_BUNZIP2) += bbunzip.o
-lib-$(CONFIG_GUNZIP) += bbunzip.o
-lib-$(CONFIG_UNCOMPRESS) += bbunzip.o
diff --git a/archival/ar.c b/archival/ar.c
index 88236e8..f86c52d 100644
--- a/archival/ar.c
+++ b/archival/ar.c
@@ -17,6 +17,49 @@
* http://www.unix-systems.org/single_unix_specification_v2/xcu/ar.html
*/
+//config:config AR
+//config: bool "ar"
+//config: default n # needs to be improved to be able to replace binutils ar
+//config: help
+//config: ar is an archival utility program used to create, modify, and
+//config: extract contents from archives. An archive is a single file holding
+//config: a collection of other files in a structure that makes it possible to
+//config: retrieve the original individual files (called archive members).
+//config: The original files' contents, mode (permissions), timestamp, owner,
+//config: and group are preserved in the archive, and can be restored on
+//config: extraction.
+//config:
+//config: The stored filename is limited to 15 characters. (for more information
+//config: see long filename support).
+//config: ar has 60 bytes of overheads for every stored file.
+//config:
+//config: This implementation of ar can extract archives, it cannot create or
+//config: modify them.
+//config: On an x86 system, the ar applet adds about 1K.
+//config:
+//config: Unless you have a specific application which requires ar, you should
+//config: probably say N here.
+//config:
+//config:config FEATURE_AR_LONG_FILENAMES
+//config: bool "Support for long filenames (not needed for debs)"
+//config: default y
+//config: depends on AR
+//config: help
+//config: By default the ar format can only store the first 15 characters
+//config: of the filename, this option removes that limitation.
+//config: It supports the GNU ar long filename method which moves multiple long
+//config: filenames into a the data section of a new ar entry.
+//config:
+//config:config FEATURE_AR_CREATE
+//config: bool "Support archive creation"
+//config: default y
+//config: depends on AR
+//config: help
+//config: This enables archive creation (-c and -r) with busybox ar.
+
+//applet:IF_AR(APPLET(ar, BB_DIR_USR_BIN, BB_SUID_DROP))
+//kbuild:lib-$(CONFIG_AR) += ar.o
+
//usage:#define ar_trivial_usage
//usage: "[-o] [-v] [-p] [-t] [-x] ARCHIVE FILES"
//usage:#define ar_full_usage "\n\n"
diff --git a/archival/bbunzip.c b/archival/bbunzip.c
index 94d8a81..fce5ab9 100644
--- a/archival/bbunzip.c
+++ b/archival/bbunzip.c
@@ -7,13 +7,19 @@
#include "libbb.h"
#include "bb_archive.h"
+/* lzop_main() uses bbunpack(), need this: */
+//kbuild:lib-$(CONFIG_LZOP) += bbunzip.o
+
+/* Note: must be kept in sync with archival/lzop.c */
enum {
OPT_STDOUT = 1 << 0,
OPT_FORCE = 1 << 1,
/* only some decompressors: */
OPT_VERBOSE = 1 << 2,
- OPT_DECOMPRESS = 1 << 3,
- OPT_TEST = 1 << 4,
+ OPT_QUIET = 1 << 3,
+ OPT_DECOMPRESS = 1 << 4,
+ OPT_TEST = 1 << 5,
+ SEAMLESS_MAGIC = (1 << 31) * SEAMLESS_COMPRESSION,
};
static
@@ -39,7 +45,7 @@ int FAST_FUNC bbunpack(char **argv,
)
{
struct stat stat_buf;
- IF_DESKTOP(long long) int status;
+ IF_DESKTOP(long long) int status = 0;
char *filename, *new_name;
smallint exitcode = 0;
transformer_aux_data_t aux;
@@ -54,13 +60,28 @@ int FAST_FUNC bbunpack(char **argv,
/* Open src */
if (filename) {
- if (stat(filename, &stat_buf) != 0) {
- bb_simple_perror_msg(filename);
+ if (!(option_mask32 & SEAMLESS_MAGIC)) {
+ if (stat(filename, &stat_buf) != 0) {
+ err_name:
+ bb_simple_perror_msg(filename);
err:
- exitcode = 1;
- goto free_name;
+ exitcode = 1;
+ goto free_name;
+ }
+ if (open_to_or_warn(STDIN_FILENO, filename, O_RDONLY, 0))
+ goto err;
+ } else {
+ /* "clever zcat" with FILE */
+ /* fail_if_not_compressed because zcat refuses uncompressed input */
+ int fd = open_zipped(filename, /*fail_if_not_compressed:*/ 1);
+ if (fd < 0)
+ goto err_name;
+ xmove_fd(fd, STDIN_FILENO);
}
- if (open_to_or_warn(STDIN_FILENO, filename, O_RDONLY, 0))
+ } else
+ if (option_mask32 & SEAMLESS_MAGIC) {
+ /* "clever zcat" on stdin */
+ if (setup_unzip_on_fd(STDIN_FILENO, /*fail_if_not_compressed*/ 1))
goto err;
}
@@ -68,7 +89,7 @@ int FAST_FUNC bbunpack(char **argv,
if (option_mask32 & (OPT_STDOUT|OPT_TEST)) {
if (option_mask32 & OPT_TEST)
if (open_to_or_warn(STDOUT_FILENO, bb_dev_null, O_WRONLY, 0))
- goto err;
+ xfunc_die();
filename = NULL;
}
@@ -93,23 +114,32 @@ int FAST_FUNC bbunpack(char **argv,
}
/* Check that the input is sane */
- if (isatty(STDIN_FILENO) && (option_mask32 & OPT_FORCE) == 0) {
+ if (!(option_mask32 & OPT_FORCE) && isatty(STDIN_FILENO)) {
bb_error_msg_and_die("compressed data not read from terminal, "
"use -f to force it");
}
- init_transformer_aux_data(&aux);
- aux.check_signature = 1;
- status = unpacker(&aux);
- if (status < 0)
- exitcode = 1;
+ if (!(option_mask32 & SEAMLESS_MAGIC)) {
+ init_transformer_aux_data(&aux);
+ aux.check_signature = 1;
+ status = unpacker(&aux);
+ if (status < 0)
+ exitcode = 1;
+ } else {
+ if (bb_copyfd_eof(STDIN_FILENO, STDOUT_FILENO) < 0)
+ /* Disk full, tty closed, etc. No point in continuing */
+ xfunc_die();
+ }
if (!(option_mask32 & OPT_STDOUT))
xclose(STDOUT_FILENO); /* with error check! */
if (filename) {
char *del = new_name;
+
if (status >= 0) {
+ unsigned new_name_len;
+
/* TODO: restore other things? */
if (aux.mtime != 0) {
struct timeval times[2];
@@ -123,22 +153,29 @@ int FAST_FUNC bbunpack(char **argv,
utimes(new_name, times); /* ignoring errors */
}
- /* Delete _compressed_ file */
+ if (ENABLE_DESKTOP)
+ new_name_len = strlen(new_name);
+ /* Restore source filename (unless tgz -> tar case) */
+ if (new_name == filename) {
+ new_name_len = strlen(filename);
+ filename[new_name_len] = '.';
+ }
+ /* Extreme bloat for gunzip compat */
+ /* Some users do want this info... */
+ if (ENABLE_DESKTOP && (option_mask32 & OPT_VERBOSE)) {
+ unsigned percent = status
+ ? ((uoff_t)stat_buf.st_size * 100u / (unsigned long long)status)
+ : 0;
+ fprintf(stderr, "%s: %u%% - replaced with %.*s\n",
+ filename,
+ 100u - percent,
+ new_name_len, new_name
+ );
+ }
+ /* Delete _source_ file */
del = filename;
- /* restore extension (unless tgz -> tar case) */
- if (new_name == filename)
- filename[strlen(filename)] = '.';
}
xunlink(del);
-
-#if 0 /* Currently buggy - wrong name: "a.gz: 261% - replaced with a.gz" */
- /* Extreme bloat for gunzip compat */
- if (ENABLE_DESKTOP && (option_mask32 & OPT_VERBOSE) && status >= 0) {
- fprintf(stderr, "%s: %u%% - replaced with %s\n",
- filename, (unsigned)(stat_buf.st_size*100 / (status+1)), new_name);
- }
-#endif
-
free_name:
if (new_name != filename)
free(new_name);
@@ -172,7 +209,6 @@ char* FAST_FUNC make_new_name_generic(char *filename, const char *expected_ext)
*
* Licensed under GPLv2 or later, see file LICENSE in this source tree.
*/
-
//usage:#define uncompress_trivial_usage
//usage: "[-cf] [FILE]..."
//usage:#define uncompress_full_usage "\n\n"
@@ -180,6 +216,15 @@ char* FAST_FUNC make_new_name_generic(char *filename, const char *expected_ext)
//usage: "\n -c Write to stdout"
//usage: "\n -f Overwrite"
+//config:config UNCOMPRESS
+//config: bool "uncompress"
+//config: default n
+//config: help
+//config: uncompress is used to decompress archives created by compress.
+//config: Not much used anymore, replaced by gzip/gunzip.
+
+//applet:IF_UNCOMPRESS(APPLET(uncompress, BB_DIR_BIN, BB_SUID_DROP))
+//kbuild:lib-$(CONFIG_UNCOMPRESS) += bbunzip.o
#if ENABLE_UNCOMPRESS
static
IF_DESKTOP(long long) int FAST_FUNC unpack_uncompress(transformer_aux_data_t *aux)
@@ -220,11 +265,7 @@ int uncompress_main(int argc UNUSED_PARAM, char **argv)
* Portions of the lzw code are derived from the public domain 'compress'
* written by Spencer Thomas, Joe Orost, James Woods, Jim McKie, Steve Davies,
* Ken Turkowski, Dave Mack and Peter Jannesen.
- *
- * See the license_msg below and the file COPYING for the software license.
- * See the file algorithm.doc for the compression algorithms and file formats.
*/
-
//usage:#define gunzip_trivial_usage
//usage: "[-cft] [FILE]..."
//usage:#define gunzip_full_usage "\n\n"
@@ -241,10 +282,22 @@ int uncompress_main(int argc UNUSED_PARAM, char **argv)
//usage: "-rw-rw-r-- 1 andersen andersen 1761280 Apr 14 17:47 /tmp/BusyBox-0.43.tar\n"
//usage:
//usage:#define zcat_trivial_usage
-//usage: "FILE"
+//usage: "[FILE]..."
//usage:#define zcat_full_usage "\n\n"
//usage: "Decompress to stdout"
+//config:config GUNZIP
+//config: bool "gunzip"
+//config: default y
+//config: help
+//config: gunzip is used to decompress archives created by gzip.
+//config: You can use the `-t' option to test the integrity of
+//config: an archive, without decompressing it.
+
+//applet:IF_GUNZIP(APPLET(gunzip, BB_DIR_BIN, BB_SUID_DROP))
+//applet:IF_GUNZIP(APPLET_ODDNAME(zcat, gunzip, BB_DIR_BIN, BB_SUID_DROP, zcat))
+//kbuild:lib-$(CONFIG_GZIP) += bbunzip.o
+//kbuild:lib-$(CONFIG_GUNZIP) += bbunzip.o
#if ENABLE_GUNZIP
static
char* FAST_FUNC make_new_name_gunzip(char *filename, const char *expected_ext UNUSED_PARAM)
@@ -292,11 +345,15 @@ IF_DESKTOP(long long) int FAST_FUNC unpack_gunzip(transformer_aux_data_t *aux)
int gunzip_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE;
int gunzip_main(int argc UNUSED_PARAM, char **argv)
{
- getopt32(argv, "cfvdtn");
+ getopt32(argv, "cfvqdtn");
argv += optind;
- /* if called as zcat */
+
+ /* If called as zcat...
+ * Normally, "zcat" is just "gunzip -c".
+ * But if seamless magic is enabled, then we are much more clever.
+ */
if (applet_name[1] == 'c')
- option_mask32 |= OPT_STDOUT;
+ option_mask32 |= OPT_STDOUT | SEAMLESS_MAGIC;
return bbunpack(argv, unpack_gunzip, make_new_name_gunzip, /*unused:*/ NULL);
}
@@ -316,11 +373,27 @@ int gunzip_main(int argc UNUSED_PARAM, char **argv)
//usage: "\n -c Write to stdout"
//usage: "\n -f Force"
//usage:#define bzcat_trivial_usage
-//usage: "FILE"
+//usage: "[FILE]..."
//usage:#define bzcat_full_usage "\n\n"
//usage: "Decompress to stdout"
+
+//config:config BUNZIP2
+//config: bool "bunzip2"
+//config: default y
+//config: help
+//config: bunzip2 is a compression utility using the Burrows-Wheeler block
+//config: sorting text compression algorithm, and Huffman coding. Compression
+//config: is generally considerably better than that achieved by more
+//config: conventional LZ77/LZ78-based compressors, and approaches the
+//config: performance of the PPM family of statistical compressors.
+//config:
+//config: Unless you have a specific application which requires bunzip2, you
+//config: should probably say N here.
+
//applet:IF_BUNZIP2(APPLET(bunzip2, BB_DIR_USR_BIN, BB_SUID_DROP))
//applet:IF_BUNZIP2(APPLET_ODDNAME(bzcat, bunzip2, BB_DIR_USR_BIN, BB_SUID_DROP, bzcat))
+//kbuild:lib-$(CONFIG_BZIP2) += bbunzip.o
+//kbuild:lib-$(CONFIG_BUNZIP2) += bbunzip.o
#if ENABLE_BUNZIP2
static
IF_DESKTOP(long long) int FAST_FUNC unpack_bunzip2(transformer_aux_data_t *aux)
@@ -330,7 +403,7 @@ IF_DESKTOP(long long) int FAST_FUNC unpack_bunzip2(transformer_aux_data_t *aux)
int bunzip2_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE;
int bunzip2_main(int argc UNUSED_PARAM, char **argv)
{
- getopt32(argv, "cfvdt");
+ getopt32(argv, "cfvqdt");
argv += optind;
if (applet_name[2] == 'c') /* bzcat */
option_mask32 |= OPT_STDOUT;
@@ -348,7 +421,6 @@ int bunzip2_main(int argc UNUSED_PARAM, char **argv)
*
* Licensed under GPLv2, see file LICENSE in this source tree.
*/
-
//usage:#define unlzma_trivial_usage
//usage: "[-cf] [FILE]..."
//usage:#define unlzma_full_usage "\n\n"
@@ -365,7 +437,7 @@ int bunzip2_main(int argc UNUSED_PARAM, char **argv)
//usage: "\n -f Force"
//usage:
//usage:#define lzcat_trivial_usage
-//usage: "FILE"
+//usage: "[FILE]..."
//usage:#define lzcat_full_usage "\n\n"
//usage: "Decompress to stdout"
//usage:
@@ -385,10 +457,42 @@ int bunzip2_main(int argc UNUSED_PARAM, char **argv)
//usage: "\n -f Force"
//usage:
//usage:#define xzcat_trivial_usage
-//usage: "FILE"
+//usage: "[FILE]..."
//usage:#define xzcat_full_usage "\n\n"
//usage: "Decompress to stdout"
+//config:config UNLZMA
+//config: bool "unlzma"
+//config: default y
+//config: help
+//config: unlzma is a compression utility using the Lempel-Ziv-Markov chain
+//config: compression algorithm, and range coding. Compression
+//config: is generally considerably better than that achieved by the bzip2
+//config: compressors.
+//config:
+//config: The BusyBox unlzma applet is limited to decompression only.
+//config: On an x86 system, this applet adds about 4K.
+//config:
+//config:config FEATURE_LZMA_FAST
+//config: bool "Optimize unlzma for speed"
+//config: default n
+//config: depends on UNLZMA
+//config: help
+//config: This option reduces decompression time by about 25% at the cost of
+//config: a 1K bigger binary.
+//config:
+//config:config LZMA
+//config: bool "Provide lzma alias which supports only unpacking"
+//config: default y
+//config: depends on UNLZMA
+//config: help
+//config: Enable this option if you want commands like "lzma -d" to work.
+//config: IOW: you'll get lzma applet, but it will always require -d option.
+
+//applet:IF_UNLZMA(APPLET(unlzma, BB_DIR_USR_BIN, BB_SUID_DROP))
+//applet:IF_UNLZMA(APPLET_ODDNAME(lzcat, unlzma, BB_DIR_USR_BIN, BB_SUID_DROP, lzcat))
+//applet:IF_LZMA(APPLET_ODDNAME(lzma, unlzma, BB_DIR_USR_BIN, BB_SUID_DROP, lzma))
+//kbuild:lib-$(CONFIG_UNLZMA) += bbunzip.o
#if ENABLE_UNLZMA
static
IF_DESKTOP(long long) int FAST_FUNC unpack_unlzma(transformer_aux_data_t *aux)
@@ -398,7 +502,7 @@ IF_DESKTOP(long long) int FAST_FUNC unpack_unlzma(transformer_aux_data_t *aux)
int unlzma_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE;
int unlzma_main(int argc UNUSED_PARAM, char **argv)
{
- IF_LZMA(int opts =) getopt32(argv, "cfvdt");
+ IF_LZMA(int opts =) getopt32(argv, "cfvqdt");
# if ENABLE_LZMA
/* lzma without -d or -t? */
if (applet_name[2] == 'm' && !(opts & (OPT_DECOMPRESS|OPT_TEST)))
@@ -414,6 +518,24 @@ int unlzma_main(int argc UNUSED_PARAM, char **argv)
#endif
+//config:config UNXZ
+//config: bool "unxz"
+//config: default y
+//config: help
+//config: unxz is a unlzma successor.
+//config:
+//config:config XZ
+//config: bool "Provide xz alias which supports only unpacking"
+//config: default y
+//config: depends on UNXZ
+//config: help
+//config: Enable this option if you want commands like "xz -d" to work.
+//config: IOW: you'll get xz applet, but it will always require -d option.
+
+//applet:IF_UNXZ(APPLET(unxz, BB_DIR_USR_BIN, BB_SUID_DROP))
+//applet:IF_UNXZ(APPLET_ODDNAME(xzcat, unxz, BB_DIR_USR_BIN, BB_SUID_DROP, xzcat))
+//applet:IF_XZ(APPLET_ODDNAME(xz, unxz, BB_DIR_USR_BIN, BB_SUID_DROP, xz))
+//kbuild:lib-$(CONFIG_UNXZ) += bbunzip.o
#if ENABLE_UNXZ
static
IF_DESKTOP(long long) int FAST_FUNC unpack_unxz(transformer_aux_data_t *aux)
@@ -423,7 +545,7 @@ IF_DESKTOP(long long) int FAST_FUNC unpack_unxz(transformer_aux_data_t *aux)
int unxz_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE;
int unxz_main(int argc UNUSED_PARAM, char **argv)
{
- IF_XZ(int opts =) getopt32(argv, "cfvdt");
+ IF_XZ(int opts =) getopt32(argv, "cfvqdt");
# if ENABLE_XZ
/* xz without -d or -t? */
if (applet_name[2] == '\0' && !(opts & (OPT_DECOMPRESS|OPT_TEST)))
diff --git a/archival/bzip2.c b/archival/bzip2.c
index dd77c8e..f7718b4 100644
--- a/archival/bzip2.c
+++ b/archival/bzip2.c
@@ -7,6 +7,22 @@
* about bzip2 library code.
*/
+//config:config BZIP2
+//config: bool "bzip2"
+//config: default y
+//config: help
+//config: bzip2 is a compression utility using the Burrows-Wheeler block
+//config: sorting text compression algorithm, and Huffman coding. Compression
+//config: is generally considerably better than that achieved by more
+//config: conventional LZ77/LZ78-based compressors, and approaches the
+//config: performance of the PPM family of statistical compressors.
+//config:
+//config: Unless you have a specific application which requires bzip2, you
+//config: should probably say N here.
+
+//applet:IF_BZIP2(APPLET(bzip2, BB_DIR_USR_BIN, BB_SUID_DROP))
+//kbuild:lib-$(CONFIG_BZIP2) += bzip2.o
+
//usage:#define bzip2_trivial_usage
//usage: "[OPTIONS] [FILE]..."
//usage:#define bzip2_full_usage "\n\n"
diff --git a/archival/cpio.c b/archival/cpio.c
index 12b7f9a..5fb5327 100644
--- a/archival/cpio.c
+++ b/archival/cpio.c
@@ -9,11 +9,42 @@
* Limitations:
* Doesn't check CRC's
* Only supports new ASCII and CRC formats
- *
*/
#include "libbb.h"
#include "bb_archive.h"
+//config:config CPIO
+//config: bool "cpio"
+//config: default y
+//config: help
+//config: cpio is an archival utility program used to create, modify, and
+//config: extract contents from archives.
+//config: cpio has 110 bytes of overheads for every stored file.
+//config:
+//config: This implementation of cpio can extract cpio archives created in the
+//config: "newc" or "crc" format, it cannot create or modify them.
+//config:
+//config: Unless you have a specific application which requires cpio, you
+//config: should probably say N here.
+//config:
+//config:config FEATURE_CPIO_O
+//config: bool "Support for archive creation"
+//config: default y
+//config: depends on CPIO
+//config: help
+//config: This implementation of cpio can create cpio archives in the "newc"
+//config: format only.
+//config:
+//config:config FEATURE_CPIO_P
+//config: bool "Support for passthrough mode"
+//config: default y
+//config: depends on FEATURE_CPIO_O
+//config: help
+//config: Passthrough mode. Rarely used.
+
+//applet:IF_CPIO(APPLET(cpio, BB_DIR_BIN, BB_SUID_DROP))
+//kbuild:lib-$(CONFIG_CPIO) += cpio.o
+
//usage:#define cpio_trivial_usage
//usage: "[-dmvu] [-F FILE]" IF_FEATURE_CPIO_O(" [-H newc]")
//usage: " [-ti"IF_FEATURE_CPIO_O("o")"]" IF_FEATURE_CPIO_P(" [-p DIR]")
diff --git a/archival/dpkg.c b/archival/dpkg.c
index ed86f33..2893cfc 100644
--- a/archival/dpkg.c
+++ b/archival/dpkg.c
@@ -14,7 +14,6 @@
*
* Licensed under GPLv2 or later, see file LICENSE in this source tree.
*/
-
/*
* known difference between busybox dpkg and the official dpkg that i don't
* consider important, its worth keeping a note of differences anyway, just to
@@ -25,9 +24,22 @@
*
* bugs that need to be fixed
* - (unknown, please let me know when you find any)
- *
*/
+//config:config DPKG
+//config: bool "dpkg"
+//config: default n
+//config: select FEATURE_SEAMLESS_GZ
+//config: help
+//config: dpkg is a medium-level tool to install, build, remove and manage
+//config: Debian packages.
+//config:
+//config: This implementation of dpkg has a number of limitations,
+//config: you should use the official dpkg if possible.
+
+//applet:IF_DPKG(APPLET(dpkg, BB_DIR_USR_BIN, BB_SUID_DROP))
+//kbuild:lib-$(CONFIG_DPKG) += dpkg.o
+
//usage:#define dpkg_trivial_usage
//usage: "[-ilCPru] [-F OPT] PACKAGE"
//usage:#define dpkg_full_usage "\n\n"
diff --git a/archival/dpkg_deb.c b/archival/dpkg_deb.c
index a04ec94..13f9db9 100644
--- a/archival/dpkg_deb.c
+++ b/archival/dpkg_deb.c
@@ -5,8 +5,33 @@
* Licensed under GPLv2 or later, see file LICENSE in this source tree.
*/
+//config:config DPKG_DEB
+//config: bool "dpkg_deb"
+//config: default n
+//config: select FEATURE_SEAMLESS_GZ
+//config: help
+//config: dpkg-deb unpacks and provides information about Debian archives.
+//config:
+//config: This implementation of dpkg-deb cannot pack archives.
+//config:
+//config: Unless you have a specific application which requires dpkg-deb,
+//config: say N here.
+//config:
+//config:config FEATURE_DPKG_DEB_EXTRACT_ONLY
+//config: bool "Extract only (-x)"
+//config: default n
+//config: depends on DPKG_DEB
+//config: help
+//config: This reduces dpkg-deb to the equivalent of
+//config: "ar -p <deb> data.tar.gz | tar -zx". However it saves space as none
+//config: of the extra dpkg-deb, ar or tar options are needed, they are linked
+//config: to internally.
+
+//applet:IF_DPKG_DEB(APPLET_ODDNAME(dpkg-deb, dpkg_deb, BB_DIR_USR_BIN, BB_SUID_DROP, dpkg_deb))
+//kbuild:lib-$(CONFIG_DPKG_DEB) += dpkg_deb.o
+
//usage:#define dpkg_deb_trivial_usage
-//usage: "[-cefxX] FILE [argument"
+//usage: "[-cefxX] FILE [argument]"
//usage:#define dpkg_deb_full_usage "\n\n"
//usage: "Perform actions on Debian packages (.debs)\n"
//usage: "\n -c List contents of filesystem tree"
diff --git a/archival/gzip.c b/archival/gzip.c
index 31ccab3..1e779c9 100644
--- a/archival/gzip.c
+++ b/archival/gzip.c
@@ -15,7 +15,6 @@
*
* Licensed under GPLv2 or later, see file LICENSE in this source tree.
*/
-
/* big objects in bss:
* 00000020 b bl_count
* 00000074 b base_length
@@ -31,7 +30,6 @@
* 00000480 b static_ltree
* 000008f4 b dyn_ltree
*/
-
/* TODO: full support for -v for DESKTOP
* "/usr/bin/gzip -v a bogus aa" should say:
a: 85.1% -- replaced with a.gz
@@ -39,6 +37,35 @@ gzip: bogus: No such file or directory
aa: 85.1% -- replaced with aa.gz
*/
+//config:config GZIP
+//config: bool "gzip"
+//config: default y
+//config: help
+//config: gzip is used to compress files.
+//config: It's probably the most widely used UNIX compression program.
+//config:
+//config:config FEATURE_GZIP_LONG_OPTIONS
+//config: bool "Enable long options"
+//config: default y
+//config: depends on GZIP && LONG_OPTS
+//config: help
+//config: Enable use of long options, increases size by about 106 Bytes
+//config:
+//config:config GZIP_FAST
+//config: int "Trade memory for gzip speed (0:small,slow - 2:fast,big)"
+//config: default 0
+//config: range 0 2
+//config: depends on GZIP
+//config: help
+//config: Enable big memory options for gzip.
+//config: 0: small buffers, small hash-tables
+//config: 1: larger buffers, larger hash-tables
+//config: 2: larger buffers, largest hash-tables
+//config: Larger models may give slightly better compression
+
+//applet:IF_GZIP(APPLET(gzip, BB_DIR_BIN, BB_SUID_DROP))
+//kbuild:lib-$(CONFIG_GZIP) += gzip.o
+
//usage:#define gzip_trivial_usage
//usage: "[-cfd] [FILE]..."
//usage:#define gzip_full_usage "\n\n"
diff --git a/archival/libarchive/Kbuild.src b/archival/libarchive/Kbuild.src
index 1517c8c..968fdf8 100644
--- a/archival/libarchive/Kbuild.src
+++ b/archival/libarchive/Kbuild.src
@@ -38,23 +38,38 @@ DPKG_FILES:= \
INSERT
-lib-$(CONFIG_AR) += get_header_ar.o unpack_ar_archive.o
-lib-$(CONFIG_BUNZIP2) += decompress_bunzip2.o
-lib-$(CONFIG_UNLZMA) += decompress_unlzma.o
-lib-$(CONFIG_UNXZ) += decompress_unxz.o
-lib-$(CONFIG_CPIO) += get_header_cpio.o
lib-$(CONFIG_DPKG) += $(DPKG_FILES)
lib-$(CONFIG_DPKG_DEB) += $(DPKG_FILES)
-lib-$(CONFIG_GUNZIP) += open_transformer.o decompress_gunzip.o
-lib-$(CONFIG_RPM2CPIO) += decompress_gunzip.o get_header_cpio.o
-lib-$(CONFIG_RPM) += open_transformer.o decompress_gunzip.o get_header_cpio.o
+
+lib-$(CONFIG_AR) += get_header_ar.o unpack_ar_archive.o
+lib-$(CONFIG_CPIO) += get_header_cpio.o
lib-$(CONFIG_TAR) += get_header_tar.o
-lib-$(CONFIG_UNCOMPRESS) += decompress_uncompress.o
-lib-$(CONFIG_UNZIP) += decompress_gunzip.o
+lib-$(CONFIG_FEATURE_TAR_TO_COMMAND) += data_extract_to_command.o
lib-$(CONFIG_LZOP) += lzo1x_1.o lzo1x_1o.o lzo1x_d.o
lib-$(CONFIG_LZOP_COMPR_HIGH) += lzo1x_9x.o
+lib-$(CONFIG_BUNZIP2) += open_transformer.o decompress_bunzip2.o
+lib-$(CONFIG_UNLZMA) += open_transformer.o decompress_unlzma.o
+lib-$(CONFIG_UNXZ) += open_transformer.o decompress_unxz.o
+lib-$(CONFIG_GUNZIP) += open_transformer.o decompress_gunzip.o
+lib-$(CONFIG_UNCOMPRESS) += open_transformer.o decompress_uncompress.o
+lib-$(CONFIG_UNZIP) += open_transformer.o decompress_gunzip.o
+lib-$(CONFIG_RPM2CPIO) += open_transformer.o decompress_gunzip.o get_header_cpio.o
+lib-$(CONFIG_RPM) += open_transformer.o decompress_gunzip.o get_header_cpio.o
+
+lib-$(CONFIG_GZIP) += open_transformer.o
+lib-$(CONFIG_BZIP2) += open_transformer.o
+lib-$(CONFIG_LZOP) += open_transformer.o
+lib-$(CONFIG_MAN) += open_transformer.o
+lib-$(CONFIG_SETFONT) += open_transformer.o
+lib-$(CONFIG_FEATURE_2_4_MODULES) += open_transformer.o
lib-$(CONFIG_MODINFO) += open_transformer.o
lib-$(CONFIG_INSMOD) += open_transformer.o
+lib-$(CONFIG_DEPMOD) += open_transformer.o
+lib-$(CONFIG_RMMOD) += open_transformer.o
+lib-$(CONFIG_LSMOD) += open_transformer.o
+lib-$(CONFIG_MODPROBE) += open_transformer.o
+lib-$(CONFIG_MODPROBE_SMALL) += open_transformer.o
+
lib-$(CONFIG_FEATURE_SEAMLESS_Z) += open_transformer.o decompress_uncompress.o
lib-$(CONFIG_FEATURE_SEAMLESS_GZ) += open_transformer.o decompress_gunzip.o
lib-$(CONFIG_FEATURE_SEAMLESS_BZ2) += open_transformer.o decompress_bunzip2.o
@@ -62,7 +77,6 @@ lib-$(CONFIG_FEATURE_SEAMLESS_LZMA) += open_transformer.o decompress_unlzma.
lib-$(CONFIG_FEATURE_SEAMLESS_XZ) += open_transformer.o decompress_unxz.o
lib-$(CONFIG_FEATURE_COMPRESS_USAGE) += open_transformer.o decompress_bunzip2.o
lib-$(CONFIG_FEATURE_COMPRESS_BBCONFIG) += open_transformer.o decompress_bunzip2.o
-lib-$(CONFIG_FEATURE_TAR_TO_COMMAND) += data_extract_to_command.o
ifneq ($(lib-y),)
lib-y += $(COMMON_FILES)
diff --git a/archival/libarchive/bz/compress.c b/archival/libarchive/bz/compress.c
index e9f1afd..23de9d3 100644
--- a/archival/libarchive/bz/compress.c
+++ b/archival/libarchive/bz/compress.c
@@ -249,7 +249,7 @@ void generateMTFValues(EState* s)
static NOINLINE
void sendMTFValues(EState* s)
{
- int32_t v, t, i, j, gs, ge, totc, bt, bc, iter;
+ int32_t v, t, i, j, gs, ge, bt, bc, iter;
int32_t nSelectors, alphaSize, minLen, maxLen, selCtr;
int32_t nGroups;
@@ -345,7 +345,6 @@ void sendMTFValues(EState* s)
}
#endif
nSelectors = 0;
- totc = 0;
gs = 0;
while (1) {
/*--- Set group start & end marks. --*/
@@ -411,7 +410,6 @@ void sendMTFValues(EState* s)
bt = t;
}
}
- totc += bc;
fave[bt]++;
s->selector[nSelectors] = bt;
nSelectors++;
@@ -501,14 +499,14 @@ void sendMTFValues(EState* s)
for (i = 0; i < 16; i++) {
if (sizeof(long) <= 4) {
inUse16 = inUse16*2 +
- ((*(uint32_t*)&(s->inUse[i * 16 + 0])
- | *(uint32_t*)&(s->inUse[i * 16 + 4])
- | *(uint32_t*)&(s->inUse[i * 16 + 8])
- | *(uint32_t*)&(s->inUse[i * 16 + 12])) != 0);
+ ((*(bb__aliased_uint32_t*)&(s->inUse[i * 16 + 0])
+ | *(bb__aliased_uint32_t*)&(s->inUse[i * 16 + 4])
+ | *(bb__aliased_uint32_t*)&(s->inUse[i * 16 + 8])
+ | *(bb__aliased_uint32_t*)&(s->inUse[i * 16 + 12])) != 0);
} else { /* Our CPU can do better */
inUse16 = inUse16*2 +
- ((*(uint64_t*)&(s->inUse[i * 16 + 0])
- | *(uint64_t*)&(s->inUse[i * 16 + 8])) != 0);
+ ((*(bb__aliased_uint64_t*)&(s->inUse[i * 16 + 0])
+ | *(bb__aliased_uint64_t*)&(s->inUse[i * 16 + 8])) != 0);
}
}
diff --git a/archival/libarchive/data_extract_all.c b/archival/libarchive/data_extract_all.c
index aaab437..2e18ffb 100644
--- a/archival/libarchive/data_extract_all.c
+++ b/archival/libarchive/data_extract_all.c
@@ -14,6 +14,9 @@ void FAST_FUNC data_extract_all(archive_handle_t *archive_handle)
#if ENABLE_FEATURE_TAR_SELINUX
char *sctx = archive_handle->tar__sctx[PAX_NEXT_FILE];
+#ifdef __BIONIC__
+ matchpathcon_init(NULL);
+#endif
if (!sctx)
sctx = archive_handle->tar__sctx[PAX_GLOBAL];
if (sctx) { /* setfscreatecon is 4 syscalls, avoid if possible */
@@ -106,15 +109,28 @@ void FAST_FUNC data_extract_all(archive_handle_t *archive_handle)
switch (file_header->mode & S_IFMT) {
case S_IFREG: {
/* Regular file */
+ char *dst_name;
int flags = O_WRONLY | O_CREAT | O_EXCL;
if (archive_handle->ah_flags & ARCHIVE_O_TRUNC)
flags = O_WRONLY | O_CREAT | O_TRUNC;
- dst_fd = xopen3(file_header->name,
+ dst_name = file_header->name;
+#ifdef ARCHIVE_REPLACE_VIA_RENAME
+ if (archive_handle->ah_flags & ARCHIVE_REPLACE_VIA_RENAME)
+ /* rpm-style temp file name */
+ dst_name = xasprintf("%s;%x", dst_name, (int)getpid());
+#endif
+ dst_fd = xopen3(dst_name,
flags,
file_header->mode
);
bb_copyfd_exact_size(archive_handle->src_fd, dst_fd, file_header->size);
close(dst_fd);
+#ifdef ARCHIVE_REPLACE_VIA_RENAME
+ if (archive_handle->ah_flags & ARCHIVE_REPLACE_VIA_RENAME) {
+ xrename(dst_name, file_header->name);
+ free(dst_name);
+ }
+#endif
break;
}
case S_IFDIR:
diff --git a/archival/libarchive/data_extract_to_command.c b/archival/libarchive/data_extract_to_command.c
index 354e958..599288d 100644
--- a/archival/libarchive/data_extract_to_command.c
+++ b/archival/libarchive/data_extract_to_command.c
@@ -63,7 +63,7 @@ void FAST_FUNC data_extract_to_command(archive_handle_t *archive_handle)
{
file_header_t *file_header = archive_handle->file_header;
-#if 0 /* do we need this? ENABLE_FEATURE_TAR_SELINUX */
+#if ENABLE_FEATURE_TAR_SELINUX
char *sctx = archive_handle->tar__sctx[PAX_NEXT_FILE];
if (!sctx)
sctx = archive_handle->tar__sctx[PAX_GLOBAL];
@@ -103,7 +103,7 @@ void FAST_FUNC data_extract_to_command(archive_handle_t *archive_handle)
archive_handle->tar__to_command_shell,
"-c",
archive_handle->tar__to_command,
- NULL);
+ (char *)0);
bb_perror_msg_and_die("can't execute '%s'", archive_handle->tar__to_command_shell);
}
close(p[0]);
diff --git a/archival/libarchive/decompress_bunzip2.c b/archival/libarchive/decompress_bunzip2.c
index 53bf47a..0e3ab43 100644
--- a/archival/libarchive/decompress_bunzip2.c
+++ b/archival/libarchive/decompress_bunzip2.c
@@ -42,6 +42,12 @@
#include "libbb.h"
#include "bb_archive.h"
+#if 0
+# define dbg(...) bb_error_msg(__VA_ARGS__)
+#else
+# define dbg(...) ((void)0)
+#endif
+
/* Constants for Huffman coding */
#define MAX_GROUPS 6
#define GROUP_SIZE 50 /* 64 would have been more efficient */
@@ -52,13 +58,13 @@
/* Status return values */
#define RETVAL_OK 0
-#define RETVAL_LAST_BLOCK (-1)
-#define RETVAL_NOT_BZIP_DATA (-2)
-#define RETVAL_UNEXPECTED_INPUT_EOF (-3)
-#define RETVAL_SHORT_WRITE (-4)
-#define RETVAL_DATA_ERROR (-5)
-#define RETVAL_OUT_OF_MEMORY (-6)
-#define RETVAL_OBSOLETE_INPUT (-7)
+#define RETVAL_LAST_BLOCK (dbg("%d", __LINE__), -1)
+#define RETVAL_NOT_BZIP_DATA (dbg("%d", __LINE__), -2)
+#define RETVAL_UNEXPECTED_INPUT_EOF (dbg("%d", __LINE__), -3)
+#define RETVAL_SHORT_WRITE (dbg("%d", __LINE__), -4)
+#define RETVAL_DATA_ERROR (dbg("%d", __LINE__), -5)
+#define RETVAL_OUT_OF_MEMORY (dbg("%d", __LINE__), -6)
+#define RETVAL_OBSOLETE_INPUT (dbg("%d", __LINE__), -7)
/* Other housekeeping constants */
#define IOBUF_SIZE 4096
@@ -440,7 +446,11 @@ static int get_next_block(bunzip_data *bd)
literal used is the one at the head of the mtfSymbol array.) */
if (runPos != 0) {
uint8_t tmp_byte;
- if (dbufCount + runCnt >= dbufSize) return RETVAL_DATA_ERROR;
+ if (dbufCount + runCnt > dbufSize) {
+ dbg("dbufCount:%d+runCnt:%d %d > dbufSize:%d RETVAL_DATA_ERROR",
+ dbufCount, runCnt, dbufCount + runCnt, dbufSize);
+ return RETVAL_DATA_ERROR;
+ }
tmp_byte = symToByte[mtfSymbol[0]];
byteCount[tmp_byte] += runCnt;
while (--runCnt >= 0) dbuf[dbufCount++] = (uint32_t)tmp_byte;
@@ -808,7 +818,6 @@ static char *const bunzip_errors[] = {
/* Dumb little test thing, decompress stdin to stdout */
int main(int argc, char **argv)
{
- int i;
char c;
int i = unpack_bz2_stream(0, 1);
diff --git a/archival/libarchive/decompress_gunzip.c b/archival/libarchive/decompress_gunzip.c
index ddf59bc..d27f428 100644
--- a/archival/libarchive/decompress_gunzip.c
+++ b/archival/libarchive/decompress_gunzip.c
@@ -336,7 +336,7 @@ static int huft_build(const unsigned *b, const unsigned n,
}
/* Find minimum and maximum length, bound *m by those */
- for (j = 1; (c[j] == 0) && (j <= BMAX); j++)
+ for (j = 1; (j <= BMAX) && (c[j] == 0); j++)
continue;
k = j; /* minimum code length */
for (i = BMAX; (c[i] == 0) && i; i--)
diff --git a/archival/libarchive/decompress_unlzma.c b/archival/libarchive/decompress_unlzma.c
index cfde8ea..ca32bd8 100644
--- a/archival/libarchive/decompress_unlzma.c
+++ b/archival/libarchive/decompress_unlzma.c
@@ -45,16 +45,16 @@ typedef struct {
#define RC_MODEL_TOTAL_BITS 11
-/* Called twice: once at startup (LZMA_FAST only) and once in rc_normalize() */
-static size_inline void rc_read(rc_t *rc)
+/* Called once in rc_do_normalize() */
+static void rc_read(rc_t *rc)
{
int buffer_size = safe_read(rc->fd, RC_BUFFER, RC_BUFFER_SIZE);
//TODO: return -1 instead
//This will make unlzma delete broken unpacked file on unpack errors
if (buffer_size <= 0)
bb_error_msg_and_die("unexpected EOF");
- rc->ptr = RC_BUFFER;
rc->buffer_end = RC_BUFFER + buffer_size;
+ rc->ptr = RC_BUFFER;
}
/* Called twice, but one callsite is in speed_inline'd rc_is_bit_1() */
@@ -65,6 +65,12 @@ static void rc_do_normalize(rc_t *rc)
rc->range <<= 8;
rc->code = (rc->code << 8) | *rc->ptr++;
}
+static ALWAYS_INLINE void rc_normalize(rc_t *rc)
+{
+ if (rc->range < (1 << RC_TOP_BITS)) {
+ rc_do_normalize(rc);
+ }
+}
/* Called once */
static ALWAYS_INLINE rc_t* rc_init(int fd) /*, int buffer_size) */
@@ -78,15 +84,9 @@ static ALWAYS_INLINE rc_t* rc_init(int fd) /*, int buffer_size) */
/* rc->ptr = rc->buffer_end; */
for (i = 0; i < 5; i++) {
-#if ENABLE_FEATURE_LZMA_FAST
- if (rc->ptr >= rc->buffer_end)
- rc_read(rc);
- rc->code = (rc->code << 8) | *rc->ptr++;
-#else
rc_do_normalize(rc);
-#endif
}
- rc->range = 0xFFFFFFFF;
+ rc->range = 0xffffffff;
return rc;
}
@@ -96,13 +96,6 @@ static ALWAYS_INLINE void rc_free(rc_t *rc)
free(rc);
}
-static ALWAYS_INLINE void rc_normalize(rc_t *rc)
-{
- if (rc->range < (1 << RC_TOP_BITS)) {
- rc_do_normalize(rc);
- }
-}
-
/* rc_is_bit_1 is called 9 times */
static speed_inline int rc_is_bit_1(rc_t *rc, uint16_t *p)
{
@@ -120,7 +113,7 @@ static speed_inline int rc_is_bit_1(rc_t *rc, uint16_t *p)
}
/* Called 4 times in unlzma loop */
-static speed_inline int rc_get_bit(rc_t *rc, uint16_t *p, int *symbol)
+static ALWAYS_INLINE int rc_get_bit(rc_t *rc, uint16_t *p, int *symbol)
{
int ret = rc_is_bit_1(rc, p);
*symbol = *symbol * 2 + ret;
diff --git a/archival/libarchive/decompress_unxz.c b/archival/libarchive/decompress_unxz.c
index 79b48a1..986b7b1 100644
--- a/archival/libarchive/decompress_unxz.c
+++ b/archival/libarchive/decompress_unxz.c
@@ -30,8 +30,8 @@ static uint32_t xz_crc32(const uint8_t *buf, size_t size, uint32_t crc)
/* We use arch-optimized unaligned accessors */
#define get_unaligned_le32(buf) ({ uint32_t v; move_from_unaligned32(v, buf); SWAP_LE32(v); })
#define get_unaligned_be32(buf) ({ uint32_t v; move_from_unaligned32(v, buf); SWAP_BE32(v); })
-#define put_unaligned_le32(val, buf) move_to_unaligned16(buf, SWAP_LE32(val))
-#define put_unaligned_be32(val, buf) move_to_unaligned16(buf, SWAP_BE32(val))
+#define put_unaligned_le32(val, buf) move_to_unaligned32(buf, SWAP_LE32(val))
+#define put_unaligned_be32(val, buf) move_to_unaligned32(buf, SWAP_BE32(val))
#include "unxz/xz_dec_bcj.c"
#include "unxz/xz_dec_lzma2.c"
@@ -40,6 +40,7 @@ static uint32_t xz_crc32(const uint8_t *buf, size_t size, uint32_t crc)
IF_DESKTOP(long long) int FAST_FUNC
unpack_xz_stream(transformer_aux_data_t *aux, int src_fd, int dst_fd)
{
+ enum xz_ret xz_result;
struct xz_buf iobuf;
struct xz_dec *state;
unsigned char *membuf;
@@ -63,9 +64,8 @@ unpack_xz_stream(transformer_aux_data_t *aux, int src_fd, int dst_fd)
/* Limit memory usage to about 64 MiB. */
state = xz_dec_init(XZ_DYNALLOC, 64*1024*1024);
+ xz_result = X_OK;
while (1) {
- enum xz_ret r;
-
if (iobuf.in_pos == iobuf.in_size) {
int rd = safe_read(src_fd, membuf, BUFSIZ);
if (rd < 0) {
@@ -73,28 +73,57 @@ unpack_xz_stream(transformer_aux_data_t *aux, int src_fd, int dst_fd)
total = -1;
break;
}
+ if (rd == 0 && xz_result == XZ_STREAM_END)
+ break;
iobuf.in_size = rd;
iobuf.in_pos = 0;
}
+ if (xz_result == XZ_STREAM_END) {
+ /*
+ * Try to start decoding next concatenated stream.
+ * Stream padding must always be a multiple of four
+ * bytes to preserve four-byte alignment. To keep the
+ * code slightly smaller, we aren't as strict here as
+ * the .xz spec requires. We just skip all zero-bytes
+ * without checking the alignment and thus can accept
+ * files that aren't valid, e.g. the XZ utils test
+ * files bad-0pad-empty.xz and bad-0catpad-empty.xz.
+ */
+ do {
+ if (membuf[iobuf.in_pos] != 0) {
+ xz_dec_reset(state);
+ goto do_run;
+ }
+ iobuf.in_pos++;
+ } while (iobuf.in_pos < iobuf.in_size);
+ }
+ do_run:
// bb_error_msg(">in pos:%d size:%d out pos:%d size:%d",
// iobuf.in_pos, iobuf.in_size, iobuf.out_pos, iobuf.out_size);
- r = xz_dec_run(state, &iobuf);
+ xz_result = xz_dec_run(state, &iobuf);
// bb_error_msg("<in pos:%d size:%d out pos:%d size:%d r:%d",
-// iobuf.in_pos, iobuf.in_size, iobuf.out_pos, iobuf.out_size, r);
+// iobuf.in_pos, iobuf.in_size, iobuf.out_pos, iobuf.out_size, xz_result);
if (iobuf.out_pos) {
xwrite(dst_fd, iobuf.out, iobuf.out_pos);
IF_DESKTOP(total += iobuf.out_pos;)
iobuf.out_pos = 0;
}
- if (r == XZ_STREAM_END) {
- break;
+ if (xz_result == XZ_STREAM_END) {
+ /*
+ * Can just "break;" here, if not for concatenated
+ * .xz streams.
+ * Checking for padding may require buffer
+ * replenishment. Can't do it here.
+ */
+ continue;
}
- if (r != XZ_OK && r != XZ_UNSUPPORTED_CHECK) {
+ if (xz_result != XZ_OK && xz_result != XZ_UNSUPPORTED_CHECK) {
bb_error_msg("corrupted data");
total = -1;
break;
}
}
+
xz_dec_end(state);
free(membuf);
diff --git a/archival/libarchive/get_header_ar.c b/archival/libarchive/get_header_ar.c
index 23c4124..c66bb3e 100644
--- a/archival/libarchive/get_header_ar.c
+++ b/archival/libarchive/get_header_ar.c
@@ -8,11 +8,19 @@
#include "bb_archive.h"
#include "ar.h"
-static unsigned read_num(const char *str, int base)
+/* WARNING: Clobbers str[len], so fields must be read in reverse order! */
+static unsigned read_num(char *str, int base, int len)
{
+ int err;
+
+ /* ar fields are fixed length text strings (padded with spaces).
+ * Ensure bb_strtou doesn't read past the field in case the full
+ * width is used. */
+ str[len] = 0;
+
/* This code works because
* on misformatted numbers bb_strtou returns all-ones */
- int err = bb_strtou(str, NULL, base);
+ err = bb_strtou(str, NULL, base);
if (err == -1)
bb_error_msg_and_die("invalid ar header");
return err;
@@ -51,11 +59,13 @@ char FAST_FUNC get_header_ar(archive_handle_t *archive_handle)
if (ar.formatted.magic[0] != '`' || ar.formatted.magic[1] != '\n')
bb_error_msg_and_die("invalid ar header");
- /* FIXME: more thorough routine would be in order here
- * (we have something like that in tar)
- * but for now we are lax. */
- ar.formatted.magic[0] = '\0'; /* else 4G-2 file will have size="4294967294`\n..." */
- typed->size = size = read_num(ar.formatted.size, 10);
+ /*
+ * Note that the fields MUST be read in reverse order as
+ * read_num() clobbers the next byte after the field!
+ * Order is: name, date, uid, gid, mode, size, magic.
+ */
+ typed->size = size = read_num(ar.formatted.size, 10,
+ sizeof(ar.formatted.size));
/* special filenames have '/' as the first character */
if (ar.formatted.name[0] == '/') {
@@ -87,10 +97,10 @@ char FAST_FUNC get_header_ar(archive_handle_t *archive_handle)
* long filename pseudo file. Thus we decode the rest
* after dealing with long filename pseudo file.
*/
- typed->mode = read_num(ar.formatted.mode, 8);
- typed->mtime = read_num(ar.formatted.date, 10);
- typed->uid = read_num(ar.formatted.uid, 10);
- typed->gid = read_num(ar.formatted.gid, 10);
+ typed->mode = read_num(ar.formatted.mode, 8, sizeof(ar.formatted.mode));
+ typed->gid = read_num(ar.formatted.gid, 10, sizeof(ar.formatted.gid));
+ typed->uid = read_num(ar.formatted.uid, 10, sizeof(ar.formatted.uid));
+ typed->mtime = read_num(ar.formatted.date, 10, sizeof(ar.formatted.date));
#if ENABLE_FEATURE_AR_LONG_FILENAMES
if (ar.formatted.name[0] == '/') {
@@ -98,7 +108,8 @@ char FAST_FUNC get_header_ar(archive_handle_t *archive_handle)
/* The number after the '/' indicates the offset in the ar data section
* (saved in ar_long_names) that conatains the real filename */
- long_offset = read_num(&ar.formatted.name[1], 10);
+ long_offset = read_num(&ar.formatted.name[1], 10,
+ sizeof(ar.formatted.name) - 1);
if (long_offset >= ar_long_name_size) {
bb_error_msg_and_die("can't resolve long filename");
}
diff --git a/archival/libarchive/get_header_tar.c b/archival/libarchive/get_header_tar.c
index bc09756..278c8fb 100644
--- a/archival/libarchive/get_header_tar.c
+++ b/archival/libarchive/get_header_tar.c
@@ -198,13 +198,13 @@ char FAST_FUNC get_header_tar(archive_handle_t *archive_handle)
* the message and we don't check whether we indeed
* saw zero block directly before this. */
if (i == 0) {
- xfunc_error_retval = 0;
- short_read:
- bb_error_msg_and_die("short read");
+ bb_error_msg("short read");
+ /* this merely signals end of archive, not exit(1): */
+ return EXIT_FAILURE;
}
if (i != 512) {
IF_FEATURE_TAR_AUTODETECT(goto autodetect;)
- goto short_read;
+ bb_error_msg_and_die("short read");
}
#else
@@ -221,10 +221,10 @@ char FAST_FUNC get_header_tar(archive_handle_t *archive_handle)
*/
while (full_read(archive_handle->src_fd, &tar, 512) == 512)
continue;
- return EXIT_FAILURE;
+ return EXIT_FAILURE; /* "end of archive" */
}
archive_handle->tar__end = 1;
- return EXIT_SUCCESS;
+ return EXIT_SUCCESS; /* "decoded one header" */
}
archive_handle->tar__end = 0;
@@ -241,7 +241,7 @@ char FAST_FUNC get_header_tar(archive_handle_t *archive_handle)
* or not first block (false positive, it's not .gz/.bz2!) */
if (lseek(archive_handle->src_fd, -i, SEEK_CUR) != 0)
goto err;
- if (setup_unzip_on_fd(archive_handle->src_fd, /*fail_if_not_detected:*/ 0) != 0)
+ if (setup_unzip_on_fd(archive_handle->src_fd, /*fail_if_not_compressed:*/ 0) != 0)
err:
bb_error_msg_and_die("invalid tar magic");
archive_handle->offset = 0;
@@ -471,5 +471,5 @@ char FAST_FUNC get_header_tar(archive_handle_t *archive_handle)
free(file_header->tar__uname);
free(file_header->tar__gname);
#endif
- return EXIT_SUCCESS;
+ return EXIT_SUCCESS; /* "decoded one header" */
}
diff --git a/archival/libarchive/liblzo.h b/archival/libarchive/liblzo.h
index 843997c..4596620 100644
--- a/archival/libarchive/liblzo.h
+++ b/archival/libarchive/liblzo.h
@@ -76,11 +76,13 @@
# define TEST_IP (ip < ip_end)
# define NEED_IP(x) \
if ((unsigned)(ip_end - ip) < (unsigned)(x)) goto input_overrun
+# define TEST_IV(x) if ((x) > (unsigned)0 - (511)) goto input_overrun
# undef TEST_OP /* don't need both of the tests here */
# define TEST_OP 1
# define NEED_OP(x) \
if ((unsigned)(op_end - op) < (unsigned)(x)) goto output_overrun
+# define TEST_OV(x) if ((x) > (unsigned)0 - (511)) goto output_overrun
#define HAVE_ANY_OP 1
diff --git a/archival/libarchive/lzo1x_9x.c b/archival/libarchive/lzo1x_9x.c
index 8971329..2b490ae 100644
--- a/archival/libarchive/lzo1x_9x.c
+++ b/archival/libarchive/lzo1x_9x.c
@@ -94,7 +94,7 @@ typedef struct {
( ((0x9f5f * ((((b[p]<<5)^b[p+1])<<5) ^ b[p+2])) >> 5) & (SWD_HSIZE-1) )
#if defined(LZO_UNALIGNED_OK_2)
-# define HEAD2(b,p) (* (uint16_t *) &(b[p]))
+# define HEAD2(b,p) (* (bb__aliased_uint16_t *) &(b[p]))
#else
# define HEAD2(b,p) (b[p] ^ ((unsigned)b[p+1]<<8))
#endif
@@ -466,7 +466,6 @@ static int find_match(lzo1x_999_t *c, lzo_swd_p s,
}
s->m_len = 1;
- s->m_len = 1;
#ifdef SWD_BEST_OFF
if (s->use_best_off)
memset(s->best_pos, 0, sizeof(s->best_pos));
diff --git a/archival/libarchive/lzo1x_d.c b/archival/libarchive/lzo1x_d.c
index 9bc1270..40b167e 100644
--- a/archival/libarchive/lzo1x_d.c
+++ b/archival/libarchive/lzo1x_d.c
@@ -92,6 +92,7 @@ int lzo1x_decompress_safe(const uint8_t* in, unsigned in_len,
ip++;
NEED_IP(1);
}
+ TEST_IV(t);
t += 15 + *ip++;
}
/* copy literals */
@@ -224,6 +225,7 @@ int lzo1x_decompress_safe(const uint8_t* in, unsigned in_len,
ip++;
NEED_IP(1);
}
+ TEST_IV(t);
t += 31 + *ip++;
}
#if defined(COPY_DICT)
@@ -265,6 +267,7 @@ int lzo1x_decompress_safe(const uint8_t* in, unsigned in_len,
ip++;
NEED_IP(1);
}
+ TEST_IV(t);
t += 7 + *ip++;
}
#if defined(COPY_DICT)
diff --git a/archival/libarchive/open_transformer.c b/archival/libarchive/open_transformer.c
index dae04aa..1986630 100644
--- a/archival/libarchive/open_transformer.c
+++ b/archival/libarchive/open_transformer.c
@@ -34,6 +34,7 @@ void check_errors_in_children(int signo)
if (!signo) {
/* block waiting for any child */
if (wait(&status) < 0)
+//FIXME: check EINTR?
return; /* probably there are no children */
goto check_status;
}
@@ -41,14 +42,18 @@ void check_errors_in_children(int signo)
/* Wait for any child without blocking */
for (;;) {
if (wait_any_nohang(&status) < 0)
+//FIXME: check EINTR?
/* wait failed?! I'm confused... */
return;
check_status:
- if (WIFEXITED(status) && WEXITSTATUS(status) == 0)
+ /*if (WIFEXITED(status) && WEXITSTATUS(status) == 0)*/
+ /* On Linux, the above can be checked simply as: */
+ if (status == 0)
/* this child exited with 0 */
continue;
- /* Cannot happen?
- if (!WIFSIGNALED(status) && !WIFEXITED(status)) ???; */
+ /* Cannot happen:
+ if (!WIFSIGNALED(status) && !WIFEXITED(status)) ???;
+ */
bb_got_signal = 1;
}
}
@@ -74,16 +79,17 @@ void FAST_FUNC open_transformer(int fd, const char *transform_prog)
// FIXME: error check?
#if BB_MMU
{
+ IF_DESKTOP(long long) int r;
transformer_aux_data_t aux;
init_transformer_aux_data(&aux);
aux.check_signature = check_signature;
- transformer(&aux, fd, fd_pipe.wr);
+ r = transformer(&aux, fd, fd_pipe.wr);
if (ENABLE_FEATURE_CLEAN_UP) {
close(fd_pipe.wr); /* send EOF */
close(fd);
}
/* must be _exit! bug was actually seen here */
- _exit(EXIT_SUCCESS);
+ _exit(/*error if:*/ r < 0);
}
#else
{
@@ -112,7 +118,7 @@ void FAST_FUNC open_transformer(int fd, const char *transform_prog)
/* Used by e.g. rpm which gives us a fd without filename,
* thus we can't guess the format from filename's extension.
*/
-int FAST_FUNC setup_unzip_on_fd(int fd, int fail_if_not_detected)
+int FAST_FUNC setup_unzip_on_fd(int fd, int fail_if_not_compressed)
{
union {
uint8_t b[4];
@@ -153,7 +159,7 @@ int FAST_FUNC setup_unzip_on_fd(int fd, int fail_if_not_detected)
}
/* No known magic seen */
- if (fail_if_not_detected)
+ if (fail_if_not_compressed)
bb_error_msg_and_die("no gzip"
IF_FEATURE_SEAMLESS_BZ2("/bzip2")
IF_FEATURE_SEAMLESS_XZ("/xz")
@@ -174,29 +180,28 @@ int FAST_FUNC setup_unzip_on_fd(int fd, int fail_if_not_detected)
return 0;
}
-int FAST_FUNC open_zipped(const char *fname)
+int FAST_FUNC open_zipped(const char *fname, int fail_if_not_compressed)
{
- char *sfx;
int fd;
fd = open(fname, O_RDONLY);
if (fd < 0)
return fd;
- sfx = strrchr(fname, '.');
- if (sfx) {
- sfx++;
- if (ENABLE_FEATURE_SEAMLESS_LZMA && strcmp(sfx, "lzma") == 0)
- /* .lzma has no header/signature, just trust it */
+ if (ENABLE_FEATURE_SEAMLESS_LZMA) {
+ /* .lzma has no header/signature, can only detect it by extension */
+ char *sfx = strrchr(fname, '.');
+ if (sfx && strcmp(sfx+1, "lzma") == 0) {
open_transformer_with_sig(fd, unpack_lzma_stream, "unlzma");
- else
- if ((ENABLE_FEATURE_SEAMLESS_GZ && strcmp(sfx, "gz") == 0)
- || (ENABLE_FEATURE_SEAMLESS_BZ2 && strcmp(sfx, "bz2") == 0)
- || (ENABLE_FEATURE_SEAMLESS_XZ && strcmp(sfx, "xz") == 0)
- ) {
- setup_unzip_on_fd(fd, /*fail_if_not_detected:*/ 1);
+ return fd;
}
}
+ if ((ENABLE_FEATURE_SEAMLESS_GZ)
+ || (ENABLE_FEATURE_SEAMLESS_BZ2)
+ || (ENABLE_FEATURE_SEAMLESS_XZ)
+ ) {
+ setup_unzip_on_fd(fd, fail_if_not_compressed);
+ }
return fd;
}
@@ -208,7 +213,7 @@ void* FAST_FUNC xmalloc_open_zipped_read_close(const char *fname, size_t *maxsz_
int fd;
char *image;
- fd = open_zipped(fname);
+ fd = open_zipped(fname, /*fail_if_not_compressed:*/ 0);
if (fd < 0)
return NULL;
diff --git a/archival/libarchive/unxz/README b/archival/libarchive/unxz/README
index c5972f6..a849120 100644
--- a/archival/libarchive/unxz/README
+++ b/archival/libarchive/unxz/README
@@ -7,7 +7,7 @@ XZ Embedded
XZ Embedded was written for use in the Linux kernel, but the code can
be easily used in other environments too, including regular userspace
- applications.
+ applications. See userspace/xzminidec.c for an example program.
This README contains information that is useful only when the copy
of XZ Embedded isn't part of the Linux kernel tree. You should also
@@ -55,7 +55,7 @@ Compiler requirements
code is modified not to support large files, which needs some more
care than just using 32-bit integer instead of 64-bit).
- If you use GCC, try to use a recent version. For example, on x86,
+ If you use GCC, try to use a recent version. For example, on x86-32,
xz_dec_lzma2.c compiled with GCC 3.3.6 is 15-25 % slower than when
compiled with GCC 4.3.3.
@@ -93,7 +93,7 @@ BCJ filter support
them always #defined doesn't hurt either.
#define Instruction set BCJ filter endianness
- XZ_DEC_X86 x86 or x86-64 Little endian only
+ XZ_DEC_X86 x86-32 or x86-64 Little endian only
XZ_DEC_POWERPC PowerPC Big endian only
XZ_DEC_IA64 Itanium (IA-64) Big or little endian
XZ_DEC_ARM ARM Little endian only
diff --git a/archival/libarchive/unxz/xz.h b/archival/libarchive/unxz/xz.h
index c6c071c..e0b22db 100644
--- a/archival/libarchive/unxz/xz.h
+++ b/archival/libarchive/unxz/xz.h
@@ -19,6 +19,10 @@
# include <stdint.h>
#endif
+#ifdef __cplusplus
+extern "C" {
+#endif
+
/* In Linux, this is used to make extern functions static when needed. */
#ifndef XZ_EXTERN
# define XZ_EXTERN extern
@@ -70,7 +74,7 @@ enum xz_mode {
* @XZ_UNSUPPORTED_CHECK: Integrity check type is not supported. Decoding
* is still possible in multi-call mode by simply
* calling xz_dec_run() again.
- * NOTE: This return value is used only if
+ * Note that this return value is used only if
* XZ_DEC_ANY_CHECK was defined at build time,
* which is not used in the kernel. Unsupported
* check types return XZ_OPTIONS_ERROR if
@@ -105,7 +109,7 @@ enum xz_mode {
* stream that is truncated or otherwise corrupt.
*
* In single-call mode, XZ_BUF_ERROR is returned only when the output buffer
- * is too small, or the compressed input is corrupt in a way that makes the
+ * is too small or the compressed input is corrupt in a way that makes the
* decoder produce more output than the caller expected. When it is
* (relatively) clear that the compressed input is truncated, XZ_DATA_ERROR
* is used instead of XZ_BUF_ERROR.
@@ -207,8 +211,8 @@ XZ_EXTERN struct xz_dec * XZ_FUNC xz_dec_init(
* The possible return values depend on build options and operation mode.
* See enum xz_ret for details.
*
- * NOTE: If an error occurs in single-call mode (return value is not
- * XZ_STREAM_END), b->in_pos and b->out_pos are not modified, and the
+ * Note that if an error occurs in single-call mode (return value is not
+ * XZ_STREAM_END), b->in_pos and b->out_pos are not modified and the
* contents of the output buffer from b->out[b->out_pos] onward are
* undefined. This is true even after XZ_BUF_ERROR, because with some filter
* chains, there may be a second pass over the output buffer, and this pass
@@ -268,4 +272,9 @@ XZ_EXTERN void XZ_FUNC xz_crc32_init(void);
XZ_EXTERN uint32_t XZ_FUNC xz_crc32(
const uint8_t *buf, size_t size, uint32_t crc);
#endif
+
+#ifdef __cplusplus
+}
+#endif
+
#endif
diff --git a/archival/libarchive/unxz/xz_config.h b/archival/libarchive/unxz/xz_config.h
index 187e1cb..29f3d29 100644
--- a/archival/libarchive/unxz/xz_config.h
+++ b/archival/libarchive/unxz/xz_config.h
@@ -47,6 +47,10 @@
* NOTE: System headers on GNU/Linux may #define this macro already,
* so if you want to change it, you need to #undef it first.
*/
+#ifdef __BIONIC__
+#undef __always_inline
+#endif
+
#ifndef __always_inline
# ifdef __GNUC__
# define __always_inline \
diff --git a/archival/libarchive/unxz/xz_dec_bcj.c b/archival/libarchive/unxz/xz_dec_bcj.c
index 09162b5..e0f913a 100644
--- a/archival/libarchive/unxz/xz_dec_bcj.c
+++ b/archival/libarchive/unxz/xz_dec_bcj.c
@@ -77,10 +77,13 @@ struct xz_dec_bcj {
#ifdef XZ_DEC_X86
/*
- * This is macro used to test the most significant byte of a memory address
+ * This is used to test the most significant byte of a memory address
* in an x86 instruction.
*/
-#define bcj_x86_test_msbyte(b) ((b) == 0x00 || (b) == 0xFF)
+static inline int bcj_x86_test_msbyte(uint8_t b)
+{
+ return b == 0x00 || b == 0xFF;
+}
static noinline_for_stack size_t XZ_FUNC bcj_x86(
struct xz_dec_bcj *s, uint8_t *buf, size_t size)
@@ -443,8 +446,12 @@ XZ_EXTERN enum xz_ret XZ_FUNC xz_dec_bcj_run(struct xz_dec_bcj *s,
* next filter in the chain. Apply the BCJ filter on the new data
* in the output buffer. If everything cannot be filtered, copy it
* to temp and rewind the output buffer position accordingly.
+ *
+ * This needs to be always run when temp.size == 0 to handle a special
+ * case where the output buffer is full and the next filter has no
+ * more output coming but hasn't returned XZ_STREAM_END yet.
*/
- if (s->temp.size < b->out_size - b->out_pos) {
+ if (s->temp.size < b->out_size - b->out_pos || s->temp.size == 0) {
out_start = b->out_pos;
memcpy(b->out + b->out_pos, s->temp.buf, s->temp.size);
b->out_pos += s->temp.size;
@@ -467,16 +474,25 @@ XZ_EXTERN enum xz_ret XZ_FUNC xz_dec_bcj_run(struct xz_dec_bcj *s,
s->temp.size = b->out_pos - out_start;
b->out_pos -= s->temp.size;
memcpy(s->temp.buf, b->out + b->out_pos, s->temp.size);
+
+ /*
+ * If there wasn't enough input to the next filter to fill
+ * the output buffer with unfiltered data, there's no point
+ * to try decoding more data to temp.
+ */
+ if (b->out_pos + s->temp.size < b->out_size)
+ return XZ_OK;
}
/*
- * If we have unfiltered data in temp, try to fill by decoding more
- * data from the next filter. Apply the BCJ filter on temp. Then we
- * hopefully can fill the actual output buffer by copying filtered
- * data from temp. A mix of filtered and unfiltered data may be left
- * in temp; it will be taken care on the next call to this function.
+ * We have unfiltered data in temp. If the output buffer isn't full
+ * yet, try to fill the temp buffer by decoding more data from the
+ * next filter. Apply the BCJ filter on temp. Then we hopefully can
+ * fill the actual output buffer by copying filtered data from temp.
+ * A mix of filtered and unfiltered data may be left in temp; it will
+ * be taken care on the next call to this function.
*/
- if (s->temp.size > 0) {
+ if (b->out_pos < b->out_size) {
/* Make b->out{,_pos,_size} temporarily point to s->temp. */
s->out = b->out;
s->out_pos = b->out_pos;
diff --git a/archival/libarchive/unxz/xz_dec_lzma2.c b/archival/libarchive/unxz/xz_dec_lzma2.c
index da71cb4..3c2dc88 100644
--- a/archival/libarchive/unxz/xz_dec_lzma2.c
+++ b/archival/libarchive/unxz/xz_dec_lzma2.c
@@ -407,7 +407,6 @@ static void XZ_FUNC dict_uncompressed(
b->out_pos += copy_size;
b->in_pos += copy_size;
-
}
}
@@ -972,6 +971,9 @@ XZ_EXTERN NOINLINE enum xz_ret XZ_FUNC xz_dec_lzma2_run(
*/
tmp = b->in[b->in_pos++];
+ if (tmp == 0x00)
+ return XZ_STREAM_END;
+
if (tmp >= 0xE0 || tmp == 0x01) {
s->lzma2.need_props = true;
s->lzma2.need_dict_reset = false;
@@ -1004,9 +1006,6 @@ XZ_EXTERN NOINLINE enum xz_ret XZ_FUNC xz_dec_lzma2_run(
lzma_reset(s);
}
} else {
- if (tmp == 0x00)
- return XZ_STREAM_END;
-
if (tmp > 0x02)
return XZ_DATA_ERROR;
diff --git a/archival/libarchive/unxz/xz_stream.h b/archival/libarchive/unxz/xz_stream.h
index 36f2a7c..66cb5a7 100644
--- a/archival/libarchive/unxz/xz_stream.h
+++ b/archival/libarchive/unxz/xz_stream.h
@@ -25,15 +25,20 @@
#define STREAM_HEADER_SIZE 12
-#define HEADER_MAGIC "\3757zXZ\0"
+#define HEADER_MAGIC "\3757zXZ"
#define HEADER_MAGIC_SIZE 6
#define FOOTER_MAGIC "YZ"
#define FOOTER_MAGIC_SIZE 2
/*
- * Variable-length integer can hold a 63-bit unsigned integer, or a special
- * value to indicate that the value is unknown.
+ * Variable-length integer can hold a 63-bit unsigned integer or a special
+ * value indicating that the value is unknown.
+ *
+ * Experimental: vli_type can be defined to uint32_t to save a few bytes
+ * in code size (no effect on speed). Doing so limits the uncompressed and
+ * compressed size of the file to less than 256 MiB and may also weaken
+ * error detection slightly.
*/
typedef uint64_t vli_type;
diff --git a/archival/lzop.c b/archival/lzop.c
index 56003d4..5062d93 100644
--- a/archival/lzop.c
+++ b/archival/lzop.c
@@ -25,6 +25,26 @@
"Minimalized" for busybox by Alain Knaff
*/
+//config:config LZOP
+//config: bool "lzop"
+//config: default y
+//config: help
+//config: Lzop compression/decompresion.
+//config:
+//config:config LZOP_COMPR_HIGH
+//config: bool "lzop compression levels 7,8,9 (not very useful)"
+//config: default n
+//config: depends on LZOP
+//config: help
+//config: High levels (7,8,9) of lzop compression. These levels
+//config: are actually slower than gzip at equivalent compression ratios
+//config: and take up 3.2K of code.
+
+//applet:IF_LZOP(APPLET(lzop, BB_DIR_BIN, BB_SUID_DROP))
+//applet:IF_LZOP(APPLET_ODDNAME(lzopcat, lzop, BB_DIR_USR_BIN, BB_SUID_DROP, lzopcat))
+//applet:IF_LZOP(APPLET_ODDNAME(unlzop, lzop, BB_DIR_USR_BIN, BB_SUID_DROP, unlzop))
+//kbuild:lib-$(CONFIG_LZOP) += lzop.o
+
//usage:#define lzop_trivial_usage
//usage: "[-cfvd123456789CF] [FILE]..."
//usage:#define lzop_full_usage "\n\n"
@@ -436,25 +456,27 @@ struct globals {
//#define LZOP_VERSION_STRING "1.01"
//#define LZOP_VERSION_DATE "Apr 27th 2003"
-#define OPTION_STRING "cfvdt123456789CF"
+#define OPTION_STRING "cfvqdt123456789CF"
+/* Note: must be kept in sync with archival/bbunzip.c */
enum {
OPT_STDOUT = (1 << 0),
OPT_FORCE = (1 << 1),
OPT_VERBOSE = (1 << 2),
- OPT_DECOMPRESS = (1 << 3),
- OPT_TEST = (1 << 4),
- OPT_1 = (1 << 5),
- OPT_2 = (1 << 6),
- OPT_3 = (1 << 7),
- OPT_4 = (1 << 8),
- OPT_5 = (1 << 9),
- OPT_6 = (1 << 10),
- OPT_789 = (7 << 11),
- OPT_7 = (1 << 11),
- OPT_8 = (1 << 12),
- OPT_C = (1 << 14),
- OPT_F = (1 << 15),
+ OPT_QUIET = (1 << 3),
+ OPT_DECOMPRESS = (1 << 4),
+ OPT_TEST = (1 << 5),
+ OPT_1 = (1 << 6),
+ OPT_2 = (1 << 7),
+ OPT_3 = (1 << 8),
+ OPT_4 = (1 << 9),
+ OPT_5 = (1 << 10),
+ OPT_6 = (1 << 11),
+ OPT_789 = (7 << 12),
+ OPT_7 = (1 << 13),
+ OPT_8 = (1 << 14),
+ OPT_C = (1 << 15),
+ OPT_F = (1 << 16),
};
/**********************************************************************/
@@ -1093,7 +1115,7 @@ int lzop_main(int argc UNUSED_PARAM, char **argv)
if (applet_name[4] == 'c')
option_mask32 |= (OPT_STDOUT | OPT_DECOMPRESS);
/* unlzop? */
- if (applet_name[0] == 'u')
+ if (applet_name[4] == 'o')
option_mask32 |= OPT_DECOMPRESS;
global_crc32_table = crc32_filltable(NULL, 0);
diff --git a/archival/rpm.c b/archival/rpm.c
index 6757a6c..1053944 100644
--- a/archival/rpm.c
+++ b/archival/rpm.c
@@ -7,6 +7,15 @@
* Licensed under GPLv2 or later, see file LICENSE in this source tree.
*/
+//config:config RPM
+//config: bool "rpm"
+//config: default y
+//config: help
+//config: Mini RPM applet - queries and extracts RPM packages.
+
+//applet:IF_RPM(APPLET(rpm, BB_DIR_BIN, BB_SUID_DROP))
+//kbuild:lib-$(CONFIG_RPM) += rpm.o
+
//usage:#define rpm_trivial_usage
//usage: "-i PACKAGE.rpm; rpm -qp[ildc] PACKAGE.rpm"
//usage:#define rpm_full_usage "\n\n"
@@ -14,10 +23,10 @@
//usage: "\nCommands:"
//usage: "\n -i Install package"
//usage: "\n -qp Query package"
-//usage: "\n -i Show information"
-//usage: "\n -l List contents"
-//usage: "\n -d List documents"
-//usage: "\n -c List config files"
+//usage: "\n -qpi Show information"
+//usage: "\n -qpl List contents"
+//usage: "\n -qpd List documents"
+//usage: "\n -qpc List config files"
#include "libbb.h"
#include "bb_archive.h"
@@ -79,136 +88,13 @@ typedef struct {
uint32_t count; /* 4 byte count */
} rpm_index;
-static void *map;
-static rpm_index **mytags;
-static int tagcount;
-
-static void extract_cpio(int fd, const char *source_rpm);
-static rpm_index **rpm_gettags(int fd, int *num_tags);
-static int bsearch_rpmtag(const void *key, const void *item);
-static char *rpm_getstr(int tag, int itemindex);
-static int rpm_getint(int tag, int itemindex);
-static int rpm_getcount(int tag);
-static void fileaction_dobackup(char *filename, int fileref);
-static void fileaction_setowngrp(char *filename, int fileref);
-static void loop_through_files(int filetag, void (*fileaction)(char *filename, int fileref));
-
-int rpm_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE;
-int rpm_main(int argc, char **argv)
-{
- int opt = 0, func = 0, rpm_fd, offset;
- const int pagesize = getpagesize();
-
- while ((opt = getopt(argc, argv, "iqpldc")) != -1) {
- switch (opt) {
- case 'i': /* First arg: Install mode, with q: Information */
- if (!func) func = rpm_install;
- else func |= rpm_query_info;
- break;
- case 'q': /* First arg: Query mode */
- if (func) bb_show_usage();
- func = rpm_query;
- break;
- case 'p': /* Query a package */
- func |= rpm_query_package;
- break;
- case 'l': /* List files in a package */
- func |= rpm_query_list;
- break;
- case 'd': /* List doc files in a package (implies list) */
- func |= rpm_query_list;
- func |= rpm_query_list_doc;
- break;
- case 'c': /* List config files in a package (implies list) */
- func |= rpm_query_list;
- func |= rpm_query_list_config;
- break;
- default:
- bb_show_usage();
- }
- }
- argv += optind;
- //argc -= optind;
- if (!argv[0]) {
- bb_show_usage();
- }
-
- while (*argv) {
- const char *source_rpm;
-
- rpm_fd = xopen(*argv++, O_RDONLY);
- mytags = rpm_gettags(rpm_fd, &tagcount);
- if (!mytags)
- bb_error_msg_and_die("error reading rpm header");
- offset = xlseek(rpm_fd, 0, SEEK_CUR);
- /* Mimimum is one page */
- map = mmap(0, offset > pagesize ? (offset + offset % pagesize) : pagesize, PROT_READ, MAP_PRIVATE, rpm_fd, 0);
-
- source_rpm = rpm_getstr(TAG_SOURCERPM, 0);
-
- if (func & rpm_install) {
- /* Backup any config files */
- loop_through_files(TAG_BASENAMES, fileaction_dobackup);
- /* Extact the archive */
- extract_cpio(rpm_fd, source_rpm);
- /* Set the correct file uid/gid's */
- loop_through_files(TAG_BASENAMES, fileaction_setowngrp);
- }
- else if ((func & (rpm_query|rpm_query_package)) == (rpm_query|rpm_query_package)) {
- if (!(func & (rpm_query_info|rpm_query_list))) {
- /* If just a straight query, just give package name */
- printf("%s-%s-%s\n", rpm_getstr(TAG_NAME, 0), rpm_getstr(TAG_VERSION, 0), rpm_getstr(TAG_RELEASE, 0));
- }
- if (func & rpm_query_info) {
- /* Do the nice printout */
- time_t bdate_time;
- struct tm *bdate_ptm;
- char bdatestring[50];
- const char *p;
-
- p = rpm_getstr(TAG_PREFIXS, 0);
- if (!p) p = "(not relocateable)";
- printf("Name : %-29sRelocations: %s\n", rpm_getstr(TAG_NAME, 0), p);
- p = rpm_getstr(TAG_VENDOR, 0);
- if (!p) p = "(none)";
- printf("Version : %-34sVendor: %s\n", rpm_getstr(TAG_VERSION, 0), p);
- bdate_time = rpm_getint(TAG_BUILDTIME, 0);
- bdate_ptm = localtime(&bdate_time);
- strftime(bdatestring, 50, "%a %d %b %Y %T %Z", bdate_ptm);
- printf("Release : %-30sBuild Date: %s\n", rpm_getstr(TAG_RELEASE, 0), bdatestring);
- printf("Install date: %-30sBuild Host: %s\n", "(not installed)", rpm_getstr(TAG_BUILDHOST, 0));
- printf("Group : %-30sSource RPM: %s\n", rpm_getstr(TAG_GROUP, 0), source_rpm);
- printf("Size : %-33dLicense: %s\n", rpm_getint(TAG_SIZE, 0), rpm_getstr(TAG_LICENSE, 0));
- printf("URL : %s\n", rpm_getstr(TAG_URL, 0));
- printf("Summary : %s\n", rpm_getstr(TAG_SUMMARY, 0));
- printf("Description :\n%s\n", rpm_getstr(TAG_DESCRIPTION, 0));
- }
- if (func & rpm_query_list) {
- int count, it, flags;
- count = rpm_getcount(TAG_BASENAMES);
- for (it = 0; it < count; it++) {
- flags = rpm_getint(TAG_FILEFLAGS, it);
- switch (func & (rpm_query_list_doc|rpm_query_list_config)) {
- case rpm_query_list_doc:
- if (!(flags & RPMFILE_DOC)) continue;
- break;
- case rpm_query_list_config:
- if (!(flags & RPMFILE_CONFIG)) continue;
- break;
- case rpm_query_list_doc|rpm_query_list_config:
- if (!(flags & (RPMFILE_CONFIG|RPMFILE_DOC))) continue;
- break;
- }
- printf("%s%s\n",
- rpm_getstr(TAG_DIRNAMES, rpm_getint(TAG_DIRINDEXES, it)),
- rpm_getstr(TAG_BASENAMES, it));
- }
- }
- }
- free(mytags);
- }
- return 0;
-}
+struct globals {
+ void *map;
+ rpm_index **mytags;
+ int tagcount;
+} FIX_ALIASING;
+#define G (*(struct globals*)&bb_common_bufsiz1)
+#define INIT_G() do { } while (0)
static void extract_cpio(int fd, const char *source_rpm)
{
@@ -231,12 +117,12 @@ static void extract_cpio(int fd, const char *source_rpm)
/* compat: overwrite existing files.
* try "rpm -i foo.src.rpm" few times in a row -
* standard rpm will not complain.
- * (TODO? real rpm creates "file;1234" and then renames it) */
- | ARCHIVE_UNLINK_OLD;
+ */
+ | ARCHIVE_REPLACE_VIA_RENAME;
archive_handle->src_fd = fd;
/*archive_handle->offset = 0; - init_handle() did it */
- setup_unzip_on_fd(archive_handle->src_fd, /*fail_if_not_detected:*/ 1);
+ setup_unzip_on_fd(archive_handle->src_fd, /*fail_if_not_compressed:*/ 1);
while (get_header_cpio(archive_handle) == EXIT_SUCCESS)
continue;
}
@@ -294,7 +180,7 @@ static int bsearch_rpmtag(const void *key, const void *item)
static int rpm_getcount(int tag)
{
rpm_index **found;
- found = bsearch(&tag, mytags, tagcount, sizeof(struct rpmtag *), bsearch_rpmtag);
+ found = bsearch(&tag, G.mytags, G.tagcount, sizeof(struct rpmtag *), bsearch_rpmtag);
if (!found)
return 0;
return found[0]->count;
@@ -303,7 +189,7 @@ static int rpm_getcount(int tag)
static char *rpm_getstr(int tag, int itemindex)
{
rpm_index **found;
- found = bsearch(&tag, mytags, tagcount, sizeof(struct rpmtag *), bsearch_rpmtag);
+ found = bsearch(&tag, G.mytags, G.tagcount, sizeof(struct rpmtag *), bsearch_rpmtag);
if (!found || itemindex >= found[0]->count)
return NULL;
if (found[0]->type == RPM_STRING_TYPE
@@ -311,7 +197,7 @@ static char *rpm_getstr(int tag, int itemindex)
|| found[0]->type == RPM_STRING_ARRAY_TYPE
) {
int n;
- char *tmpstr = (char *) map + found[0]->offset;
+ char *tmpstr = (char *) G.map + found[0]->offset;
for (n = 0; n < itemindex; n++)
tmpstr = tmpstr + strlen(tmpstr) + 1;
return tmpstr;
@@ -322,32 +208,25 @@ static char *rpm_getstr(int tag, int itemindex)
static int rpm_getint(int tag, int itemindex)
{
rpm_index **found;
- int *tmpint; /* NB: using int8_t* would be easier to code */
+ char *tmpint;
/* gcc throws warnings here when sizeof(void*)!=sizeof(int) ...
* it's ok to ignore it because tag won't be used as a pointer */
- found = bsearch(&tag, mytags, tagcount, sizeof(struct rpmtag *), bsearch_rpmtag);
+ found = bsearch(&tag, G.mytags, G.tagcount, sizeof(struct rpmtag *), bsearch_rpmtag);
if (!found || itemindex >= found[0]->count)
return -1;
- tmpint = (int *) ((char *) map + found[0]->offset);
-
+ tmpint = (char *) G.map + found[0]->offset;
if (found[0]->type == RPM_INT32_TYPE) {
- tmpint = (int *) ((char *) tmpint + itemindex*4);
- /*return ntohl(*tmpint);*/
- /* int can be != int32_t */
+ tmpint += itemindex*4;
return ntohl(*(int32_t*)tmpint);
}
if (found[0]->type == RPM_INT16_TYPE) {
- tmpint = (int *) ((char *) tmpint + itemindex*2);
- /* ??? read int, and THEN ntohs() it?? */
- /*return ntohs(*tmpint);*/
+ tmpint += itemindex*2;
return ntohs(*(int16_t*)tmpint);
}
if (found[0]->type == RPM_INT8_TYPE) {
- tmpint = (int *) ((char *) tmpint + itemindex);
- /* ??? why we don't read byte here??? */
- /*return ntohs(*tmpint);*/
+ tmpint += itemindex;
return *(int8_t*)tmpint;
}
return -1;
@@ -392,3 +271,134 @@ static void loop_through_files(int filetag, void (*fileaction)(char *filename, i
free(filename);
}
}
+
+int rpm_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE;
+int rpm_main(int argc, char **argv)
+{
+ int opt, func = 0;
+ const unsigned pagesize = getpagesize();
+
+ while ((opt = getopt(argc, argv, "iqpldc")) != -1) {
+ switch (opt) {
+ case 'i': /* First arg: Install mode, with q: Information */
+ if (!func) func = rpm_install;
+ else func |= rpm_query_info;
+ break;
+ case 'q': /* First arg: Query mode */
+ if (func) bb_show_usage();
+ func = rpm_query;
+ break;
+ case 'p': /* Query a package */
+ func |= rpm_query_package;
+ break;
+ case 'l': /* List files in a package */
+ func |= rpm_query_list;
+ break;
+ case 'd': /* List doc files in a package (implies list) */
+ func |= rpm_query_list;
+ func |= rpm_query_list_doc;
+ break;
+ case 'c': /* List config files in a package (implies list) */
+ func |= rpm_query_list;
+ func |= rpm_query_list_config;
+ break;
+ default:
+ bb_show_usage();
+ }
+ }
+ argv += optind;
+ //argc -= optind;
+ if (!argv[0]) {
+ bb_show_usage();
+ }
+
+ while (*argv) {
+ int rpm_fd;
+ unsigned mapsize;
+ const char *source_rpm;
+
+ rpm_fd = xopen(*argv++, O_RDONLY);
+ G.mytags = rpm_gettags(rpm_fd, &G.tagcount);
+ if (!G.mytags)
+ bb_error_msg_and_die("error reading rpm header");
+ mapsize = xlseek(rpm_fd, 0, SEEK_CUR);
+ mapsize = (mapsize + pagesize) & -(int)pagesize;
+ /* Some NOMMU systems prefer MAP_PRIVATE over MAP_SHARED */
+ G.map = mmap(0, mapsize, PROT_READ, MAP_PRIVATE, rpm_fd, 0);
+//FIXME: error check?
+
+ source_rpm = rpm_getstr(TAG_SOURCERPM, 0);
+
+ if (func & rpm_install) {
+ /* Backup any config files */
+ loop_through_files(TAG_BASENAMES, fileaction_dobackup);
+ /* Extact the archive */
+ extract_cpio(rpm_fd, source_rpm);
+ /* Set the correct file uid/gid's */
+ loop_through_files(TAG_BASENAMES, fileaction_setowngrp);
+ }
+ else if ((func & (rpm_query|rpm_query_package)) == (rpm_query|rpm_query_package)) {
+ if (!(func & (rpm_query_info|rpm_query_list))) {
+ /* If just a straight query, just give package name */
+ printf("%s-%s-%s\n", rpm_getstr(TAG_NAME, 0), rpm_getstr(TAG_VERSION, 0), rpm_getstr(TAG_RELEASE, 0));
+ }
+ if (func & rpm_query_info) {
+ /* Do the nice printout */
+ time_t bdate_time;
+ struct tm *bdate_ptm;
+ char bdatestring[50];
+ const char *p;
+
+ printf("%-12s: %s\n", "Name" , rpm_getstr(TAG_NAME, 0));
+ /* TODO compat: add "Epoch" here */
+ printf("%-12s: %s\n", "Version" , rpm_getstr(TAG_VERSION, 0));
+ printf("%-12s: %s\n", "Release" , rpm_getstr(TAG_RELEASE, 0));
+ /* add "Architecture" */
+ printf("%-12s: %s\n", "Install Date", "(not installed)");
+ printf("%-12s: %s\n", "Group" , rpm_getstr(TAG_GROUP, 0));
+ printf("%-12s: %d\n", "Size" , rpm_getint(TAG_SIZE, 0));
+ printf("%-12s: %s\n", "License" , rpm_getstr(TAG_LICENSE, 0));
+ /* add "Signature" */
+ printf("%-12s: %s\n", "Source RPM" , source_rpm ? source_rpm : "(none)");
+ bdate_time = rpm_getint(TAG_BUILDTIME, 0);
+ bdate_ptm = localtime(&bdate_time);
+ strftime(bdatestring, 50, "%a %d %b %Y %T %Z", bdate_ptm);
+ printf("%-12s: %s\n", "Build Date" , bdatestring);
+ printf("%-12s: %s\n", "Build Host" , rpm_getstr(TAG_BUILDHOST, 0));
+ p = rpm_getstr(TAG_PREFIXS, 0);
+ printf("%-12s: %s\n", "Relocations" , p ? p : "(not relocatable)");
+ /* add "Packager" */
+ p = rpm_getstr(TAG_VENDOR, 0);
+ printf("%-12s: %s\n", "Vendor" , p ? p : "(none)");
+ printf("%-12s: %s\n", "URL" , rpm_getstr(TAG_URL, 0));
+ printf("%-12s: %s\n", "Summary" , rpm_getstr(TAG_SUMMARY, 0));
+ printf("Description :\n%s\n", rpm_getstr(TAG_DESCRIPTION, 0));
+ }
+ if (func & rpm_query_list) {
+ int count, it, flags;
+ count = rpm_getcount(TAG_BASENAMES);
+ for (it = 0; it < count; it++) {
+ flags = rpm_getint(TAG_FILEFLAGS, it);
+ switch (func & (rpm_query_list_doc|rpm_query_list_config)) {
+ case rpm_query_list_doc:
+ if (!(flags & RPMFILE_DOC)) continue;
+ break;
+ case rpm_query_list_config:
+ if (!(flags & RPMFILE_CONFIG)) continue;
+ break;
+ case rpm_query_list_doc|rpm_query_list_config:
+ if (!(flags & (RPMFILE_CONFIG|RPMFILE_DOC))) continue;
+ break;
+ }
+ printf("%s%s\n",
+ rpm_getstr(TAG_DIRNAMES, rpm_getint(TAG_DIRINDEXES, it)),
+ rpm_getstr(TAG_BASENAMES, it));
+ }
+ }
+ }
+ munmap(G.map, mapsize);
+ free(G.mytags);
+ close(rpm_fd);
+ }
+ return 0;
+}
diff --git a/archival/rpm2cpio.c b/archival/rpm2cpio.c
index f3dfa51..7057570 100644
--- a/archival/rpm2cpio.c
+++ b/archival/rpm2cpio.c
@@ -7,6 +7,15 @@
* Licensed under GPLv2 or later, see file LICENSE in this source tree.
*/
+//config:config RPM2CPIO
+//config: bool "rpm2cpio"
+//config: default y
+//config: help
+//config: Converts a RPM file into a CPIO archive.
+
+//applet:IF_RPM2CPIO(APPLET(rpm2cpio, BB_DIR_USR_BIN, BB_SUID_DROP))
+//kbuild:lib-$(CONFIG_RPM2CPIO) += rpm2cpio.o
+
//usage:#define rpm2cpio_trivial_usage
//usage: "package.rpm"
//usage:#define rpm2cpio_full_usage "\n\n"
@@ -71,7 +80,7 @@ int rpm2cpio_main(int argc UNUSED_PARAM, char **argv)
// signal(SIGCHLD, check_errors_in_children);
/* This works, but doesn't report uncompress errors (they happen in child) */
- setup_unzip_on_fd(rpm_fd, /*fail_if_not_detected:*/ 1);
+ setup_unzip_on_fd(rpm_fd, /*fail_if_not_compressed:*/ 1);
if (bb_copyfd_eof(rpm_fd, STDOUT_FILENO) < 0)
bb_error_msg_and_die("error unpacking");
diff --git a/archival/tar.c b/archival/tar.c
index baca798..cdc6067 100644
--- a/archival/tar.c
+++ b/archival/tar.c
@@ -22,7 +22,6 @@
*
* Licensed under GPLv2 or later, see file LICENSE in this source tree.
*/
-
/* TODO: security with -C DESTDIR option can be enhanced.
* Consider tar file created via:
* $ tar cvf bug.tar anything.txt
@@ -42,6 +41,109 @@
* This doesn't feel right, and IIRC GNU tar doesn't do that.
*/
+//config:config TAR
+//config: bool "tar"
+//config: default y
+//config: help
+//config: tar is an archiving program. It's commonly used with gzip to
+//config: create compressed archives. It's probably the most widely used
+//config: UNIX archive program.
+//config:
+//config:config FEATURE_TAR_CREATE
+//config: bool "Enable archive creation"
+//config: default y
+//config: depends on TAR
+//config: help
+//config: If you enable this option you'll be able to create
+//config: tar archives using the `-c' option.
+//config:
+//config:config FEATURE_TAR_AUTODETECT
+//config: bool "Autodetect compressed tarballs"
+//config: default y
+//config: depends on TAR && (FEATURE_SEAMLESS_Z || FEATURE_SEAMLESS_GZ || FEATURE_SEAMLESS_BZ2 || FEATURE_SEAMLESS_LZMA || FEATURE_SEAMLESS_XZ)
+//config: help
+//config: With this option tar can automatically detect compressed
+//config: tarballs. Currently it works only on files (not pipes etc).
+//config:
+//config:config FEATURE_TAR_FROM
+//config: bool "Enable -X (exclude from) and -T (include from) options)"
+//config: default y
+//config: depends on TAR
+//config: help
+//config: If you enable this option you'll be able to specify
+//config: a list of files to include or exclude from an archive.
+//config:
+//config:config FEATURE_TAR_OLDGNU_COMPATIBILITY
+//config: bool "Support for old tar header format"
+//config: default y
+//config: depends on TAR || DPKG
+//config: help
+//config: This option is required to unpack archives created in
+//config: the old GNU format; help to kill this old format by
+//config: repacking your ancient archives with the new format.
+//config:
+//config:config FEATURE_TAR_OLDSUN_COMPATIBILITY
+//config: bool "Enable untarring of tarballs with checksums produced by buggy Sun tar"
+//config: default y
+//config: depends on TAR || DPKG
+//config: help
+//config: This option is required to unpack archives created by some old
+//config: version of Sun's tar (it was calculating checksum using signed
+//config: arithmetic). It is said to be fixed in newer Sun tar, but "old"
+//config: tarballs still exist.
+//config:
+//config:config FEATURE_TAR_GNU_EXTENSIONS
+//config: bool "Support for GNU tar extensions (long filenames)"
+//config: default y
+//config: depends on TAR || DPKG
+//config: help
+//config: With this option busybox supports GNU long filenames and
+//config: linknames.
+//config:
+//config:config FEATURE_TAR_LONG_OPTIONS
+//config: bool "Enable long options"
+//config: default y
+//config: depends on TAR && LONG_OPTS
+//config: help
+//config: Enable use of long options, increases size by about 400 Bytes
+//config:
+//config:config FEATURE_TAR_TO_COMMAND
+//config: bool "Support for writing to an external program"
+//config: default y
+//config: depends on TAR && FEATURE_TAR_LONG_OPTIONS
+//config: help
+//config: If you enable this option you'll be able to instruct tar to send
+//config: the contents of each extracted file to the standard input of an
+//config: external program.
+//config:
+//config:config FEATURE_TAR_UNAME_GNAME
+//config: bool "Enable use of user and group names"
+//config: default y
+//config: depends on TAR
+//config: help
+//config: Enables use of user and group names in tar. This affects contents
+//config: listings (-t) and preserving permissions when unpacking (-p).
+//config: +200 bytes.
+//config:
+//config:config FEATURE_TAR_NOPRESERVE_TIME
+//config: bool "Enable -m (do not preserve time) option"
+//config: default y
+//config: depends on TAR
+//config: help
+//config: With this option busybox supports GNU tar -m
+//config: (do not preserve time) option.
+//config:
+//config:config FEATURE_TAR_SELINUX
+//config: bool "Support for extracting SELinux labels"
+//config: default n
+//config: depends on TAR && SELINUX
+//config: help
+//config: With this option busybox supports restoring SELinux labels
+//config: when extracting files from tar archives.
+
+//applet:IF_TAR(APPLET(tar, BB_DIR_BIN, BB_SUID_DROP))
+//kbuild:lib-$(CONFIG_TAR) += tar.o
+
#include <fnmatch.h>
#include "libbb.h"
#include "bb_archive.h"
@@ -60,8 +162,8 @@
#if !ENABLE_FEATURE_SEAMLESS_GZ && !ENABLE_FEATURE_SEAMLESS_BZ2
/* Do not pass gzip flag to writeTarFile() */
-#define writeTarFile(tar_fd, verboseFlag, recurseFlags, include, exclude, gzip) \
- writeTarFile(tar_fd, verboseFlag, recurseFlags, include, exclude)
+#define writeTarFile(tar_fd, verboseFlag, optFlags, recurseFlags, include, exclude, gzip) \
+ writeTarFile(tar_fd, verboseFlag, optFlags, recurseFlags, include, exclude)
#endif
@@ -85,6 +187,8 @@ typedef struct TarBallInfo {
int tarFd; /* Open-for-write file descriptor
* for the tarball */
int verboseFlag; /* Whether to print extra stuff or not */
+ unsigned optFlags; /* all command line flags */
+
const llist_t *excludeList; /* List of files to not include */
HardLinkInfo *hlInfoHead; /* Hard Link Tracking Information */
HardLinkInfo *hlInfo; /* Hard Link Info for the current file */
@@ -108,6 +212,7 @@ enum {
CONTTYPE = '7', /* reserved */
GNULONGLINK = 'K', /* GNU long (>100 chars) link name */
GNULONGNAME = 'L', /* GNU long (>100 chars) file name */
+ EXTTYPE = 'x', /* ext metadata for next file, store selinux_context */
};
/* Might be faster (and bigger) if the dev/ino were stored in numeric order;) */
@@ -249,6 +354,34 @@ static void writeLongname(int fd, int type, const char *name, int dir)
}
#endif
+#if ENABLE_FEATURE_TAR_SELINUX
+# define SELINUX_CONTEXT_KEYWORD "RHT.security.selinux"
+/* Write 2 blocks : extended file header + selinux context */
+static int writeSeHeader(int fd, const char *con, struct tar_header_t *header)
+{
+ char block[TAR_BLOCK_SIZE];
+ struct tar_header_t hd;
+
+ int sz = sizeof(SELINUX_CONTEXT_KEYWORD) + 4 + strlen(con);
+ if (sz >= 100) sz++; /* another ascii digit for size */
+ if (sz > TAR_BLOCK_SIZE)
+ return FALSE;
+
+ memset(&block, 0, TAR_BLOCK_SIZE);
+ sprintf(block, "%d %s=%s\n", sz, SELINUX_CONTEXT_KEYWORD, con);
+
+ /* write duplicated file entry */
+ memcpy(&hd, header, sizeof(hd));
+ hd.typeflag = EXTTYPE;
+ PUT_OCTAL(hd.size, sz);
+ chksum_and_xwrite(fd, &hd);
+
+ /* write selinux context */
+ xwrite(fd, &block, TAR_BLOCK_SIZE);
+ return TRUE;
+}
+#endif
+
/* Write out a tar header for the specified file/directory/whatever */
static int writeTarHeader(struct TarBallInfo *tbInfo,
const char *header_name, const char *fileName, struct stat *statbuf)
@@ -365,6 +498,18 @@ static int writeTarHeader(struct TarBallInfo *tbInfo,
header_name, S_ISDIR(statbuf->st_mode));
#endif
+#if ENABLE_FEATURE_TAR_SELINUX
+ if (is_selinux_enabled() && (tbInfo->optFlags & ARCHIVE_STORE_SELINUX)) {
+ security_context_t sid;
+ lgetfilecon(fileName, &sid);
+ if (sid) {
+ // optional extended block
+ writeSeHeader(tbInfo->tarFd, sid, &header);
+ freecon(sid);
+ }
+ }
+#endif
+
/* Now write the header out to disk */
chksum_and_xwrite(tbInfo->tarFd, &header);
@@ -566,7 +711,7 @@ static void NOINLINE vfork_compressor(int tar_fd, int gzip)
xmove_fd(gzipDataPipe.rd, 0);
xmove_fd(tar_fd, 1);
/* exec gzip/bzip2 program/applet */
- BB_EXECLP(zip_exec, zip_exec, "-f", NULL);
+ BB_EXECLP(zip_exec, zip_exec, "-f", (char *)0);
vfork_exec_errno = errno;
_exit(EXIT_FAILURE);
}
@@ -597,6 +742,7 @@ static void NOINLINE vfork_compressor(int tar_fd, int gzip)
/* gcc 4.2.1 inlines it, making code bigger */
static NOINLINE int writeTarFile(int tar_fd, int verboseFlag,
+ unsigned optFlags,
int recurseFlags, const llist_t *include,
const llist_t *exclude, int gzip)
{
@@ -606,6 +752,7 @@ static NOINLINE int writeTarFile(int tar_fd, int verboseFlag,
tbInfo.hlInfoHead = NULL;
tbInfo.tarFd = tar_fd;
tbInfo.verboseFlag = verboseFlag;
+ tbInfo.optFlags = optFlags;
/* Store the stat info for the tarball's file, so
* can avoid including the tarball into itself.... */
@@ -660,6 +807,7 @@ static NOINLINE int writeTarFile(int tar_fd, int verboseFlag,
}
#else
int writeTarFile(int tar_fd, int verboseFlag,
+ unsigned optFlags,
int recurseFlags, const llist_t *include,
const llist_t *exclude, int gzip);
#endif /* FEATURE_TAR_CREATE */
@@ -678,14 +826,12 @@ static llist_t *append_file_list_to_list(llist_t *list)
char *cp = last_char_is(line, '/');
if (cp > line)
*cp = '\0';
- llist_add_to(&newlist, line);
+ llist_add_to_end(&newlist, line);
}
fclose(src_stream);
}
return newlist;
}
-#else
-# define append_file_list_to_list(x) 0
#endif
//usage:#define tar_trivial_usage
@@ -697,6 +843,7 @@ static llist_t *append_file_list_to_list(llist_t *list)
//usage: IF_FEATURE_SEAMLESS_LZMA("a")
//usage: IF_FEATURE_TAR_CREATE("h")
//usage: IF_FEATURE_TAR_NOPRESERVE_TIME("m")
+//usage: IF_FEATURE_TAR_SELINUX("p")
//usage: "vO] "
//usage: IF_FEATURE_TAR_FROM("[-X FILE] [-T FILE] ")
//usage: "[-f TARFILE] [-C DIR] [FILE]..."
@@ -742,6 +889,9 @@ static llist_t *append_file_list_to_list(llist_t *list)
//usage: "\n X File with names to exclude"
//usage: "\n T File with names to include"
//usage: )
+//usage: IF_FEATURE_TAR_SELINUX(
+//usage: "\n p Store SELinux contexts"
+//usage: )
//usage:
//usage:#define tar_example_usage
//usage: "$ zcat /tmp/tarball.tar.gz | tar -xf -\n"
@@ -977,6 +1127,11 @@ int tar_main(int argc UNUSED_PARAM, char **argv)
if (opt & OPT_NOPRESERVE_PERM)
tar_handle->ah_flags |= ARCHIVE_DONT_RESTORE_PERM;
+#if ENABLE_FEATURE_TAR_SELINUX
+ if (opt & OPT_P)
+ tar_handle->ah_flags |= ARCHIVE_STORE_SELINUX;
+#endif
+
if (opt & OPT_OVERWRITE) {
tar_handle->ah_flags &= ~ARCHIVE_UNLINK_OLD;
tar_handle->ah_flags |= ARCHIVE_O_TRUNC;
@@ -1036,7 +1191,7 @@ int tar_main(int argc UNUSED_PARAM, char **argv)
&& flags == O_RDONLY
&& !(opt & OPT_ANY_COMPRESS)
) {
- tar_handle->src_fd = open_zipped(tar_filename);
+ tar_handle->src_fd = open_zipped(tar_filename, /*fail_if_not_compressed:*/ 0);
if (tar_handle->src_fd < 0)
bb_perror_msg_and_die("can't open '%s'", tar_filename);
} else {
@@ -1063,6 +1218,7 @@ int tar_main(int argc UNUSED_PARAM, char **argv)
#endif
/* NB: writeTarFile() closes tar_handle->src_fd */
return writeTarFile(tar_handle->src_fd, verboseFlag,
+ tar_handle->ah_flags,
(opt & OPT_DEREFERENCE ? ACTION_FOLLOWLINKS : 0)
| (opt & OPT_NORECURSION ? 0 : ACTION_RECURSE),
tar_handle->accept,
@@ -1095,8 +1251,14 @@ int tar_main(int argc UNUSED_PARAM, char **argv)
/*tar_handle->offset = 0; - already is */
}
+ /* Zero processed headers (== empty file) is not a valid tarball.
+ * We (ab)use bb_got_signal as exitcode here,
+ * because check_errors_in_children() uses _it_ as error indicator.
+ */
+ bb_got_signal = EXIT_FAILURE;
+
while (get_header_tar(tar_handle) == EXIT_SUCCESS)
- continue;
+ bb_got_signal = EXIT_SUCCESS; /* saw at least one header, good */
/* Check that every file that should have been extracted was */
while (tar_handle->accept) {
@@ -1112,8 +1274,9 @@ int tar_main(int argc UNUSED_PARAM, char **argv)
close(tar_handle->src_fd);
if (SEAMLESS_COMPRESSION || OPT_COMPRESS) {
+ /* Set bb_got_signal to 1 if a child died with !0 exitcode */
check_errors_in_children(0);
- return bb_got_signal;
}
- return EXIT_SUCCESS;
+
+ return bb_got_signal;
}
diff --git a/archival/unzip.c b/archival/unzip.c
index 9add637..1cde28d 100644
--- a/archival/unzip.c
+++ b/archival/unzip.c
@@ -9,16 +9,27 @@
*
* Licensed under GPLv2 or later, see file LICENSE in this source tree.
*/
-
/* For reference see
* http://www.pkware.com/company/standards/appnote/
* http://www.info-zip.org/pub/infozip/doc/appnote-iz-latest.zip
- */
-
-/* TODO
+ *
+ * TODO
* Zip64 + other methods
*/
+//config:config UNZIP
+//config: bool "unzip"
+//config: default y
+//config: help
+//config: unzip will list or extract files from a ZIP archive,
+//config: commonly found on DOS/WIN systems. The default behavior
+//config: (with no options) is to extract the archive into the
+//config: current directory. Use the `-d' option to extract to a
+//config: directory of your choice.
+
+//applet:IF_UNZIP(APPLET(unzip, BB_DIR_USR_BIN, BB_SUID_DROP))
+//kbuild:lib-$(CONFIG_UNZIP) += unzip.o
+
//usage:#define unzip_trivial_usage
//usage: "[-lnopq] FILE[.zip] [FILE]... [-x FILE...] [-d DIR]"
//usage:#define unzip_full_usage "\n\n"
@@ -34,6 +45,12 @@
#include "libbb.h"
#include "bb_archive.h"
+#if defined(ANDROID) || defined(__ANDROID__)
+/* Needed to ensure we can extract signed Android OTA packages */
+#undef ENABLE_DESKTOP
+#define ENABLE_DESKTOP 1
+#endif
+
enum {
#if BB_BIG_ENDIAN
ZIP_FILEHEADER_MAGIC = 0x504b0304,
@@ -163,7 +180,17 @@ enum { zip_fd = 3 };
#if ENABLE_DESKTOP
-#define PEEK_FROM_END 16384
+/* Seen in the wild:
+ * Self-extracting PRO2K3XP_32.exe contains 19078464 byte zip archive,
+ * where CDE was nearly 48 kbytes before EOF.
+ * (Surprisingly, it also apparently has *another* CDE structure
+ * closer to the end, with bogus cdf_offset).
+ * To make extraction work, bumped PEEK_FROM_END from 16k to 64k.
+ */
+#define PEEK_FROM_END (64*1024)
+
+/* This value means that we failed to find CDF */
+#define BAD_CDF_OFFSET ((uint32_t)0xffffffff)
/* NB: does not preserve file position! */
static uint32_t find_cdf_offset(void)
@@ -180,6 +207,7 @@ static uint32_t find_cdf_offset(void)
xlseek(zip_fd, end, SEEK_SET);
full_read(zip_fd, buf, PEEK_FROM_END);
+ cde_header.formatted.cdf_offset = BAD_CDF_OFFSET;
p = buf;
while (p <= buf + PEEK_FROM_END - CDE_HEADER_LEN - 4) {
if (*p != 'P') {
@@ -195,11 +223,17 @@ static uint32_t find_cdf_offset(void)
/* we found CDE! */
memcpy(cde_header.raw, p + 1, CDE_HEADER_LEN);
FIX_ENDIANNESS_CDE(cde_header);
- free(buf);
- return cde_header.formatted.cdf_offset;
+ /*
+ * I've seen .ZIP files with seemingly valid CDEs
+ * where cdf_offset points past EOF - ??
+ * Ignore such CDEs:
+ */
+ if ((int64_t) cde_header.formatted.cdf_offset < end + (p - buf))
+ break;
+ cde_header.formatted.cdf_offset = BAD_CDF_OFFSET;
}
- //free(buf);
- bb_error_msg_and_die("can't find file table");
+ free(buf);
+ return cde_header.formatted.cdf_offset;
};
static uint32_t read_next_cdf(uint32_t cdf_offset, cdf_header_t *cdf_ptr)
@@ -211,13 +245,15 @@ static uint32_t read_next_cdf(uint32_t cdf_offset, cdf_header_t *cdf_ptr)
if (!cdf_offset)
cdf_offset = find_cdf_offset();
- xlseek(zip_fd, cdf_offset + 4, SEEK_SET);
- xread(zip_fd, cdf_ptr->raw, CDF_HEADER_LEN);
- FIX_ENDIANNESS_CDF(*cdf_ptr);
- cdf_offset += 4 + CDF_HEADER_LEN
- + cdf_ptr->formatted.file_name_length
- + cdf_ptr->formatted.extra_field_length
- + cdf_ptr->formatted.file_comment_length;
+ if (cdf_offset != BAD_CDF_OFFSET) {
+ xlseek(zip_fd, cdf_offset + 4, SEEK_SET);
+ xread(zip_fd, cdf_ptr->raw, CDF_HEADER_LEN);
+ FIX_ENDIANNESS_CDF(*cdf_ptr);
+ cdf_offset += 4 + CDF_HEADER_LEN
+ + cdf_ptr->formatted.file_name_length
+ + cdf_ptr->formatted.extra_field_length
+ + cdf_ptr->formatted.file_comment_length;
+ }
xlseek(zip_fd, org, SEEK_SET);
return cdf_offset;
@@ -226,8 +262,9 @@ static uint32_t read_next_cdf(uint32_t cdf_offset, cdf_header_t *cdf_ptr)
static void unzip_skip(off_t skip)
{
- if (lseek(zip_fd, skip, SEEK_CUR) == (off_t)-1)
- bb_copyfd_exact_size(zip_fd, -1, skip);
+ if (skip != 0)
+ if (lseek(zip_fd, skip, SEEK_CUR) == (off_t)-1)
+ bb_copyfd_exact_size(zip_fd, -1, skip);
}
static void unzip_create_leading_dirs(const char *fn)
@@ -267,6 +304,14 @@ static void unzip_extract(zip_header_t *zip_header, int dst_fd)
}
}
+static void my_fgets80(char *buf80)
+{
+ fflush_all();
+ if (!fgets(buf80, 80, stdin)) {
+ bb_perror_msg_and_die("can't read standard input");
+ }
+}
+
int unzip_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE;
int unzip_main(int argc, char **argv)
{
@@ -291,7 +336,7 @@ int unzip_main(int argc, char **argv)
llist_t *zreject = NULL;
char *base_dir = NULL;
int i, opt;
- char key_buf[80];
+ char key_buf[80]; /* must match size used by my_fgets80 */
struct stat stat_buf;
/* -q, -l and -v: UnZip 5.52 of 28 February 2005, by Info-ZIP:
@@ -520,21 +565,31 @@ int unzip_main(int argc, char **argv)
bb_error_msg_and_die("zip flag 1 (encryption) is not supported");
}
- {
+ if (cdf_offset != BAD_CDF_OFFSET) {
cdf_header_t cdf_header;
cdf_offset = read_next_cdf(cdf_offset, &cdf_header);
+ /*
+ * Note: cdf_offset can become BAD_CDF_OFFSET after the above call.
+ */
if (zip_header.formatted.zip_flags & SWAP_LE16(0x0008)) {
/* 0x0008 - streaming. [u]cmpsize can be reliably gotten
- * only from Central Directory. See unzip_doc.txt */
+ * only from Central Directory. See unzip_doc.txt
+ */
zip_header.formatted.crc32 = cdf_header.formatted.crc32;
zip_header.formatted.cmpsize = cdf_header.formatted.cmpsize;
zip_header.formatted.ucmpsize = cdf_header.formatted.ucmpsize;
}
if ((cdf_header.formatted.version_made_by >> 8) == 3) {
- /* this archive is created on Unix */
+ /* This archive is created on Unix */
dir_mode = file_mode = (cdf_header.formatted.external_file_attributes >> 16);
}
}
+ if (cdf_offset == BAD_CDF_OFFSET
+ && (zip_header.formatted.zip_flags & SWAP_LE16(0x0008))
+ ) {
+ /* If it's a streaming zip, we _require_ CDF */
+ bb_error_msg_and_die("can't find file table");
+ }
#endif
/* Read filename */
@@ -624,10 +679,7 @@ int unzip_main(int argc, char **argv)
i = 'y';
} else {
printf("replace %s? [y]es, [n]o, [A]ll, [N]one, [r]ename: ", dst_fn);
- fflush_all();
- if (!fgets(key_buf, sizeof(key_buf), stdin)) {
- bb_perror_msg_and_die("can't read input");
- }
+ my_fgets80(key_buf);
i = key_buf[0];
}
} else { /* File is not regular file */
@@ -668,9 +720,7 @@ int unzip_main(int argc, char **argv)
case 'r':
/* Prompt for new name */
printf("new name: ");
- if (!fgets(key_buf, sizeof(key_buf), stdin)) {
- bb_perror_msg_and_die("can't read input");
- }
+ my_fgets80(key_buf);
free(dst_fn);
dst_fn = xstrdup(key_buf);
chomp(dst_fn);
diff --git a/.config-full b/busybox-full.config
index 4aac299..d64b351 100644
--- a/.config-full
+++ b/busybox-full.config
@@ -1,7 +1,7 @@
#
# Automatically generated make config: don't edit
-# Busybox version: 1.21.0-jb
-# Wed Apr 17 15:57:51 2013
+# Busybox version: 1.22.1
+# Wed Aug 6 13:27:12 2014
#
CONFIG_HAVE_DOT_CONFIG=y
@@ -23,7 +23,7 @@ CONFIG_FEATURE_BUFFERS_USE_MALLOC=y
CONFIG_SHOW_USAGE=y
CONFIG_FEATURE_VERBOSE_USAGE=y
CONFIG_FEATURE_COMPRESS_USAGE=y
-# CONFIG_FEATURE_INSTALLER is not set
+CONFIG_FEATURE_INSTALLER=y
CONFIG_INSTALL_NO_USR=y
# CONFIG_LOCALE_SUPPORT is not set
CONFIG_UNICODE_SUPPORT=y
@@ -46,7 +46,7 @@ CONFIG_PID_FILE_PATH=""
CONFIG_FEATURE_SUID=y
# CONFIG_FEATURE_SUID_CONFIG is not set
# CONFIG_FEATURE_SUID_CONFIG_QUIET is not set
-# CONFIG_SELINUX is not set
+CONFIG_SELINUX=y
# CONFIG_FEATURE_PREFER_APPLETS is not set
CONFIG_BUSYBOX_EXEC_PATH="/proc/self/exe"
CONFIG_FEATURE_SYSLOG=y
@@ -61,8 +61,7 @@ CONFIG_FEATURE_HAVE_RPC=y
# CONFIG_BUILD_LIBBUSYBOX is not set
# CONFIG_FEATURE_INDIVIDUAL is not set
# CONFIG_FEATURE_SHARED_BUSYBOX is not set
-CONFIG_LFS=y
-CONFIG_CROSS_COMPILER_PREFIX="arm-eabi-"
+# CONFIG_LFS is not set
CONFIG_SYSROOT=""
CONFIG_EXTRA_CFLAGS="-Os -fno-short-enums -fgcse-after-reload -frerun-cse-after-loop -frename-registers"
CONFIG_EXTRA_LDFLAGS=""
@@ -135,7 +134,14 @@ CONFIG_FEATURE_SEAMLESS_GZ=y
# CONFIG_AR is not set
# CONFIG_FEATURE_AR_LONG_FILENAMES is not set
# CONFIG_FEATURE_AR_CREATE is not set
+CONFIG_UNCOMPRESS=y
+CONFIG_GUNZIP=y
CONFIG_BUNZIP2=y
+CONFIG_UNLZMA=y
+CONFIG_FEATURE_LZMA_FAST=y
+CONFIG_LZMA=y
+CONFIG_UNXZ=y
+CONFIG_XZ=y
CONFIG_BZIP2=y
CONFIG_CPIO=y
CONFIG_FEATURE_CPIO_O=y
@@ -143,14 +149,13 @@ CONFIG_FEATURE_CPIO_P=y
# CONFIG_DPKG is not set
# CONFIG_DPKG_DEB is not set
# CONFIG_FEATURE_DPKG_DEB_EXTRACT_ONLY is not set
-CONFIG_GUNZIP=y
CONFIG_GZIP=y
CONFIG_FEATURE_GZIP_LONG_OPTIONS=y
CONFIG_GZIP_FAST=2
CONFIG_LZOP=y
-# CONFIG_LZOP_COMPR_HIGH is not set
-# CONFIG_RPM2CPIO is not set
+CONFIG_LZOP_COMPR_HIGH=y
# CONFIG_RPM is not set
+# CONFIG_RPM2CPIO is not set
CONFIG_TAR=y
CONFIG_FEATURE_TAR_CREATE=y
CONFIG_FEATURE_TAR_AUTODETECT=y
@@ -162,13 +167,7 @@ CONFIG_FEATURE_TAR_LONG_OPTIONS=y
CONFIG_FEATURE_TAR_TO_COMMAND=y
CONFIG_FEATURE_TAR_UNAME_GNAME=y
CONFIG_FEATURE_TAR_NOPRESERVE_TIME=y
-# CONFIG_FEATURE_TAR_SELINUX is not set
-CONFIG_UNCOMPRESS=y
-CONFIG_UNLZMA=y
-CONFIG_FEATURE_LZMA_FAST=y
-CONFIG_LZMA=y
-CONFIG_UNXZ=y
-CONFIG_XZ=y
+CONFIG_FEATURE_TAR_SELINUX=y
CONFIG_UNZIP=y
#
@@ -186,6 +185,7 @@ CONFIG_GROUPS=y
CONFIG_TEST=y
# CONFIG_FEATURE_TEST_64 is not set
CONFIG_TOUCH=y
+# CONFIG_FEATURE_TOUCH_NODEREF is not set
CONFIG_FEATURE_TOUCH_SUSV3=y
CONFIG_TR=y
CONFIG_FEATURE_TR_CLASSES=y
@@ -293,7 +293,7 @@ CONFIG_USLEEP=y
CONFIG_UUDECODE=y
CONFIG_UUENCODE=y
CONFIG_WC=y
-# CONFIG_FEATURE_WC_LARGE is not set
+CONFIG_FEATURE_WC_LARGE=y
CONFIG_WHOAMI=y
CONFIG_YES=y
@@ -320,15 +320,15 @@ CONFIG_FEATURE_MD5_SHA1_SUM_CHECK=y
#
# Console Utilities
#
-# CONFIG_CHVT is not set
-# CONFIG_FGCONSOLE is not set
+CONFIG_CHVT=y
+CONFIG_FGCONSOLE=y
CONFIG_CLEAR=y
-# CONFIG_DEALLOCVT is not set
+CONFIG_DEALLOCVT=y
# CONFIG_DUMPKMAP is not set
# CONFIG_KBD_MODE is not set
# CONFIG_LOADFONT is not set
# CONFIG_LOADKMAP is not set
-# CONFIG_OPENVT is not set
+CONFIG_OPENVT=y
CONFIG_RESET=y
CONFIG_RESIZE=y
# CONFIG_FEATURE_RESIZE_PRINT is not set
@@ -337,7 +337,7 @@ CONFIG_SETCONSOLE=y
# CONFIG_SETFONT is not set
# CONFIG_FEATURE_SETFONT_TEXTUAL_MAP is not set
CONFIG_DEFAULT_SETFONT_DIR=""
-# CONFIG_SETKEYCODES is not set
+CONFIG_SETKEYCODES=y
# CONFIG_SETLOGCONS is not set
# CONFIG_SHOWKEY is not set
# CONFIG_FEATURE_LOADFONT_PSF2 is not set
@@ -359,7 +359,16 @@ CONFIG_WHICH=y
#
# Editors
#
+CONFIG_AWK=y
+CONFIG_FEATURE_AWK_LIBM=y
+CONFIG_FEATURE_AWK_GNU_EXTENSIONS=y
+CONFIG_CMP=y
+CONFIG_DIFF=y
+CONFIG_FEATURE_DIFF_LONG_OPTIONS=y
+CONFIG_FEATURE_DIFF_DIR=y
+CONFIG_ED=y
CONFIG_PATCH=y
+CONFIG_SED=y
CONFIG_VI=y
CONFIG_FEATURE_VI_MAX_LEN=256
CONFIG_FEATURE_VI_8BIT=y
@@ -374,14 +383,6 @@ CONFIG_FEATURE_VI_SETOPTS=y
CONFIG_FEATURE_VI_SET=y
CONFIG_FEATURE_VI_WIN_RESIZE=y
CONFIG_FEATURE_VI_ASK_TERMINAL=y
-CONFIG_AWK=y
-CONFIG_FEATURE_AWK_LIBM=y
-CONFIG_CMP=y
-CONFIG_DIFF=y
-CONFIG_FEATURE_DIFF_LONG_OPTIONS=y
-CONFIG_FEATURE_DIFF_DIR=y
-CONFIG_ED=y
-CONFIG_SED=y
CONFIG_FEATURE_ALLOW_EXEC=y
#
@@ -396,7 +397,7 @@ CONFIG_FEATURE_FIND_TYPE=y
CONFIG_FEATURE_FIND_XDEV=y
CONFIG_FEATURE_FIND_MAXDEPTH=y
CONFIG_FEATURE_FIND_NEWER=y
-# CONFIG_FEATURE_FIND_INUM is not set
+CONFIG_FEATURE_FIND_INUM=y
CONFIG_FEATURE_FIND_EXEC=y
CONFIG_FEATURE_FIND_USER=y
CONFIG_FEATURE_FIND_GROUP=y
@@ -405,7 +406,7 @@ CONFIG_FEATURE_FIND_DEPTH=y
CONFIG_FEATURE_FIND_PAREN=y
CONFIG_FEATURE_FIND_SIZE=y
CONFIG_FEATURE_FIND_PRUNE=y
-# CONFIG_FEATURE_FIND_DELETE is not set
+CONFIG_FEATURE_FIND_DELETE=y
CONFIG_FEATURE_FIND_PATH=y
CONFIG_FEATURE_FIND_REGEX=y
# CONFIG_FEATURE_FIND_CONTEXT is not set
@@ -451,7 +452,7 @@ CONFIG_FEATURE_MESG_ENABLE_ONLY_GROUP=y
# CONFIG_USE_BB_PWD_GRP is not set
# CONFIG_USE_BB_SHADOW is not set
CONFIG_USE_BB_CRYPT=y
-# CONFIG_USE_BB_CRYPT_SHA is not set
+CONFIG_USE_BB_CRYPT_SHA=y
# CONFIG_ADDUSER is not set
# CONFIG_FEATURE_ADDUSER_LONG_OPTIONS is not set
# CONFIG_FEATURE_CHECK_NAMES is not set
@@ -501,7 +502,7 @@ CONFIG_RMMOD=y
CONFIG_LSMOD=y
CONFIG_FEATURE_LSMOD_PRETTY_2_6_OUTPUT=y
CONFIG_MODPROBE=y
-# CONFIG_FEATURE_MODPROBE_BLACKLIST is not set
+CONFIG_FEATURE_MODPROBE_BLACKLIST=y
CONFIG_DEPMOD=y
#
@@ -523,6 +524,7 @@ CONFIG_DEFAULT_DEPMOD_FILE="modules.dep"
# Linux System Utilities
#
CONFIG_BLOCKDEV=y
+CONFIG_FSTRIM=y
# CONFIG_MDEV is not set
# CONFIG_FEATURE_MDEV_CONF is not set
# CONFIG_FEATURE_MDEV_RENAME is not set
@@ -538,6 +540,7 @@ CONFIG_DMESG=y
# CONFIG_FEATURE_DMESG_PRETTY is not set
CONFIG_FBSET=y
CONFIG_FEATURE_FBSET_FANCY=y
+CONFIG_FEATURE_DMESG_COLOR=y
# CONFIG_FEATURE_FBSET_READMODE is not set
# CONFIG_FDFLUSH is not set
# CONFIG_FDFORMAT is not set
@@ -548,13 +551,12 @@ CONFIG_FEATURE_FDISK_WRITABLE=y
# CONFIG_FEATURE_SGI_LABEL is not set
# CONFIG_FEATURE_SUN_LABEL is not set
# CONFIG_FEATURE_OSF_LABEL is not set
-# CONFIG_FEATURE_GPT_LABEL is not set
-# CONFIG_FEATURE_FDISK_ADVANCED is not set
-# CONFIG_FINDFS is not set
+CONFIG_FEATURE_GPT_LABEL=y
+CONFIG_FEATURE_FDISK_ADVANCED=y
+CONFIG_FINDFS=y
CONFIG_FLOCK=y
CONFIG_FREERAMDISK=y
# CONFIG_FSCK_MINIX is not set
-CONFIG_FSTRIM=y
CONFIG_MKFS_EXT2=y
# CONFIG_MKFS_MINIX is not set
# CONFIG_FEATURE_MINIX2 is not set
@@ -565,13 +567,13 @@ CONFIG_FEATURE_GETOPT_LONG=y
CONFIG_HEXDUMP=y
CONFIG_FEATURE_HEXDUMP_REVERSE=y
# CONFIG_HD is not set
-# CONFIG_HWCLOCK is not set
+CONFIG_HWCLOCK=y
# CONFIG_FEATURE_HWCLOCK_LONG_OPTIONS is not set
# CONFIG_FEATURE_HWCLOCK_ADJTIME_FHS is not set
# CONFIG_IPCRM is not set
# CONFIG_IPCS is not set
CONFIG_LOSETUP=y
-# CONFIG_LSPCI is not set
+CONFIG_LSPCI=y
CONFIG_LSUSB=y
CONFIG_MKSWAP=y
# CONFIG_FEATURE_MKSWAP_UUID is not set
@@ -586,7 +588,7 @@ CONFIG_FEATURE_MOUNT_CIFS=y
CONFIG_FEATURE_MOUNT_FLAGS=y
CONFIG_FEATURE_MOUNT_FSTAB=y
# CONFIG_PIVOT_ROOT is not set
-# CONFIG_RDATE is not set
+CONFIG_RDATE=y
CONFIG_RDEV=y
# CONFIG_READPROFILE is not set
# CONFIG_RTCWAKE is not set
@@ -594,8 +596,8 @@ CONFIG_RDEV=y
# CONFIG_SCRIPTREPLAY is not set
# CONFIG_SETARCH is not set
CONFIG_SWAPONOFF=y
-# CONFIG_FEATURE_SWAPON_PRI is not set
-# CONFIG_SWITCH_ROOT is not set
+CONFIG_FEATURE_SWAPON_PRI=y
+CONFIG_SWITCH_ROOT=y
CONFIG_UMOUNT=y
CONFIG_FEATURE_UMOUNT_ALL=y
@@ -610,26 +612,27 @@ CONFIG_VOLUMEID=y
#
# Filesystem/Volume identification
#
-CONFIG_FEATURE_VOLUMEID_EXT=y
# CONFIG_FEATURE_VOLUMEID_BTRFS is not set
-# CONFIG_FEATURE_VOLUMEID_REISERFS is not set
-CONFIG_FEATURE_VOLUMEID_FAT=y
+# CONFIG_FEATURE_VOLUMEID_CRAMFS is not set
CONFIG_FEATURE_VOLUMEID_EXFAT=y
+CONFIG_FEATURE_VOLUMEID_EXT=y
+CONFIG_FEATURE_VOLUMEID_F2FS=y
+CONFIG_FEATURE_VOLUMEID_FAT=y
# CONFIG_FEATURE_VOLUMEID_HFS is not set
+CONFIG_FEATURE_VOLUMEID_ISO9660=y
# CONFIG_FEATURE_VOLUMEID_JFS is not set
-# CONFIG_FEATURE_VOLUMEID_XFS is not set
+# CONFIG_FEATURE_VOLUMEID_LINUXRAID is not set
+CONFIG_FEATURE_VOLUMEID_LINUXSWAP=y
+# CONFIG_FEATURE_VOLUMEID_LUKS is not set
# CONFIG_FEATURE_VOLUMEID_NILFS is not set
CONFIG_FEATURE_VOLUMEID_NTFS=y
-CONFIG_FEATURE_VOLUMEID_ISO9660=y
-# CONFIG_FEATURE_VOLUMEID_UDF is not set
-# CONFIG_FEATURE_VOLUMEID_LUKS is not set
-CONFIG_FEATURE_VOLUMEID_LINUXSWAP=y
-# CONFIG_FEATURE_VOLUMEID_CRAMFS is not set
+# CONFIG_FEATURE_VOLUMEID_OCFS2 is not set
+# CONFIG_FEATURE_VOLUMEID_REISERFS is not set
# CONFIG_FEATURE_VOLUMEID_ROMFS is not set
CONFIG_FEATURE_VOLUMEID_SQUASHFS=y
# CONFIG_FEATURE_VOLUMEID_SYSV is not set
-# CONFIG_FEATURE_VOLUMEID_OCFS2 is not set
-# CONFIG_FEATURE_VOLUMEID_LINUXRAID is not set
+# CONFIG_FEATURE_VOLUMEID_UDF is not set
+# CONFIG_FEATURE_VOLUMEID_XFS is not set
#
# Miscellaneous Utilities
@@ -647,6 +650,7 @@ CONFIG_FEATURE_LESS_ASK_TERMINAL=y
# CONFIG_FEATURE_LESS_LINENUMS is not set
CONFIG_NANDWRITE=y
CONFIG_NANDDUMP=y
+# CONFIG_RFKILL is not set
CONFIG_SETSERIAL=y
# CONFIG_UBIATTACH is not set
# CONFIG_UBIDETACH is not set
@@ -654,6 +658,7 @@ CONFIG_SETSERIAL=y
# CONFIG_UBIRMVOL is not set
# CONFIG_UBIRSVOL is not set
# CONFIG_UBIUPDATEVOL is not set
+# CONFIG_WALL is not set
CONFIG_ADJTIMEX=y
CONFIG_BBCONFIG=y
CONFIG_FEATURE_COMPRESS_BBCONFIG=y
@@ -670,9 +675,9 @@ CONFIG_FEATURE_BEEP_LENGTH_MS=0
# CONFIG_FEATURE_CHAT_CLR_ABORT is not set
# CONFIG_CHRT is not set
CONFIG_CROND=y
-# CONFIG_FEATURE_CROND_D is not set
+CONFIG_FEATURE_CROND_D=y
# CONFIG_FEATURE_CROND_CALL_SENDMAIL is not set
-CONFIG_FEATURE_CROND_DIR="/system/etc/cron.d"
+CONFIG_FEATURE_CROND_DIR="/etc"
CONFIG_CRONTAB=y
CONFIG_DC=y
CONFIG_FEATURE_DC_LIBM=y
@@ -710,7 +715,6 @@ CONFIG_MOUNTPOINT=y
# CONFIG_MT is not set
# CONFIG_RAIDAUTORUN is not set
# CONFIG_READAHEAD is not set
-# CONFIG_RFKILL is not set
# CONFIG_RUNLEVEL is not set
CONFIG_RX=y
CONFIG_SETSID=y
@@ -721,7 +725,6 @@ CONFIG_TIME=y
CONFIG_TIMEOUT=y
CONFIG_TTYSIZE=y
# CONFIG_VOLNAME is not set
-# CONFIG_WALL is not set
# CONFIG_WATCHDOG is not set
#
@@ -741,7 +744,7 @@ CONFIG_FEATURE_FANCY_PING=y
CONFIG_FEATURE_IPV6=y
# CONFIG_FEATURE_UNIX_LOCAL is not set
CONFIG_FEATURE_PREFER_IPV4_ADDRESS=y
-# CONFIG_VERBOSE_RESOLUTION_ERRORS is not set
+CONFIG_VERBOSE_RESOLUTION_ERRORS=y
CONFIG_ARP=y
# CONFIG_ARPING is not set
CONFIG_BRCTL=y
@@ -893,12 +896,12 @@ CONFIG_FEATURE_MIME_CHARSET=""
CONFIG_IOSTAT=y
CONFIG_LSOF=y
CONFIG_MPSTAT=y
-# CONFIG_NMETER is not set
+CONFIG_NMETER=y
CONFIG_PMAP=y
# CONFIG_POWERTOP is not set
CONFIG_PSTREE=y
CONFIG_PWDX=y
-# CONFIG_SMEMCAP is not set
+CONFIG_SMEMCAP=y
CONFIG_TOP=y
CONFIG_FEATURE_TOP_CPU_USAGE_PERCENTAGE=y
CONFIG_FEATURE_TOP_CPU_GLOBAL_PERCENTS=y
@@ -943,21 +946,25 @@ CONFIG_SV_DEFAULT_SERVICE_DIR=""
# CONFIG_ENVUIDGID is not set
# CONFIG_ENVDIR is not set
# CONFIG_SOFTLIMIT is not set
-# CONFIG_CHCON is not set
-# CONFIG_FEATURE_CHCON_LONG_OPTIONS is not set
-# CONFIG_GETENFORCE is not set
-# CONFIG_GETSEBOOL is not set
+
+#
+# SELinux Utilities
+#
+CONFIG_CHCON=y
+CONFIG_FEATURE_CHCON_LONG_OPTIONS=y
+CONFIG_GETENFORCE=y
+CONFIG_GETSEBOOL=y
# CONFIG_LOAD_POLICY is not set
-# CONFIG_MATCHPATHCON is not set
-# CONFIG_RESTORECON is not set
-# CONFIG_RUNCON is not set
-# CONFIG_FEATURE_RUNCON_LONG_OPTIONS is not set
-# CONFIG_SELINUXENABLED is not set
-# CONFIG_SETENFORCE is not set
-# CONFIG_SETFILES is not set
+CONFIG_MATCHPATHCON=y
+CONFIG_RESTORECON=y
+CONFIG_RUNCON=y
+CONFIG_FEATURE_RUNCON_LONG_OPTIONS=y
+CONFIG_SELINUXENABLED=y
+CONFIG_SETENFORCE=y
+CONFIG_SETFILES=y
# CONFIG_FEATURE_SETFILES_CHECK_OPTION is not set
-# CONFIG_SETSEBOOL is not set
-# CONFIG_SESTATUS is not set
+CONFIG_SETSEBOOL=y
+CONFIG_SESTATUS=y
#
# Shells
diff --git a/busybox-full.links b/busybox-full.links
index 056831d..eddda8e 100644
--- a/busybox-full.links
+++ b/busybox-full.links
@@ -51,10 +51,12 @@
/bin/cat
/bin/catv
/bin/chattr
+/bin/chcon
/bin/chgrp
/bin/chmod
/bin/chown
/sbin/chroot
+/bin/chvt
/bin/clear
/bin/cmp
/bin/comm
@@ -65,6 +67,8 @@
/bin/cut
/bin/dc
/bin/dd
+/bin/deallocvt
+/sbin/depmod
/sbin/devmem
/bin/df
/bin/diff
@@ -82,6 +86,10 @@
/sbin/fbset
/sbin/fbsplash
/sbin/fdisk
+/bin/fgconsole
+/bin/fgrep
+/bin/find
+/bin/findfs
/sbin/flash_lock
/sbin/flash_unlock
/sbin/flashcp
@@ -94,11 +102,17 @@
/bin/ftpget
/bin/ftpput
/bin/fuser
+/bin/getenforce
/bin/getopt
+/bin/getsebool
+/bin/grep
+/bin/groups
/bin/gunzip
/bin/gzip
/bin/head
/bin/hexdump
+/sbin/hwclock
+/bin/id
/sbin/ifconfig
/sbin/inetd
/bin/install
@@ -112,12 +126,15 @@
/sbin/losetup
/bin/ls
/bin/lsattr
+/sbin/lsmod
+/bin/lspci
/bin/lsusb
/bin/lzcat
/bin/lzma
/bin/lzop
/bin/lzopcat
/sbin/man
+/sbin/matchpathcon
/bin/md5sum
/bin/mkdir
/sbin/mkdosfs
@@ -135,10 +152,13 @@
/bin/nc
/bin/netstat
/bin/nice
+/bin/nmeter
/bin/nohup
/bin/nslookup
/sbin/ntpd
/bin/od
+/bin/openvt
+/bin/patch
/bin/pgrep
/bin/pidof
/bin/pipe_progress
@@ -147,26 +167,39 @@
/bin/printf
/bin/ps
/bin/pwd
+/bin/pwdx
+/bin/rdate
/sbin/rdev
/bin/readlink
/bin/realpath
/bin/renice
/bin/reset
/bin/resize
+/sbin/restorecon
+/bin/rev
/bin/rm
/bin/rmdir
/sbin/route
+/bin/runcon
/bin/run-parts
/bin/rx
/bin/sed
+/sbin/selinuxenabled
/bin/seq
+/sbin/sestatus
/sbin/setconsole
+/sbin/setenforce
+/sbin/setfiles
+/bin/setkeycodes
+/sbin/setsebool
+/bin/setserial
/bin/setsid
/bin/sha1sum
/bin/sha3sum
/bin/sha256sum
/bin/sha512sum
/bin/sleep
+/bin/smemcap
/bin/sort
/bin/split
/bin/stat
diff --git a/busybox-full.sources b/busybox-full.sources
index 4d5ab8f..64e80cc 100644
--- a/busybox-full.sources
+++ b/busybox-full.sources
@@ -1,15 +1,53 @@
+android/libc/__set_errno.c
-archival/bbunzip.c archival/bzip2.c archival/cpio.c archival/gzip.c archival/lzop.c archival/tar.c archival/unzip.c
-archival/libarchive/data_align.c archival/libarchive/data_extract_all.c archival/libarchive/data_extract_to_command.c archival/libarchive/data_extract_to_stdout.c archival/libarchive/data_skip.c archival/libarchive/decompress_bunzip2.c archival/libarchive/decompress_gunzip.c archival/libarchive/decompress_uncompress.c archival/libarchive/decompress_unlzma.c archival/libarchive/decompress_unxz.c archival/libarchive/filter_accept_all.c archival/libarchive/filter_accept_list.c archival/libarchive/filter_accept_reject_list.c archival/libarchive/find_list_entry.c archival/libarchive/get_header_cpio.c archival/libarchive/get_header_tar.c archival/libarchive/header_list.c archival/libarchive/header_skip.c archival/libarchive/header_verbose_list.c archival/libarchive/init_handle.c archival/libarchive/lzo1x_1.c archival/libarchive/lzo1x_1o.c archival/libarchive/lzo1x_d.c archival/libarchive/open_transformer.c archival/libarchive/seek_by_jump.c archival/libarchive/seek_by_read.c
-console-tools/clear.c console-tools/reset.c console-tools/resize.c console-tools/setconsole.c
-coreutils/basename.c coreutils/cal.c coreutils/cat.c coreutils/catv.c coreutils/chgrp.c coreutils/chmod.c coreutils/chown.c coreutils/chroot.c coreutils/comm.c coreutils/cp.c coreutils/cut.c coreutils/date.c coreutils/dd.c coreutils/df.c coreutils/dirname.c coreutils/dos2unix.c coreutils/du.c coreutils/echo.c coreutils/env.c coreutils/expand.c coreutils/expr.c coreutils/false.c coreutils/fold.c coreutils/fsync.c coreutils/head.c coreutils/id.c coreutils/install.c coreutils/ln.c coreutils/ls.c coreutils/md5_sha1_sum.c coreutils/mkdir.c coreutils/mkfifo.c coreutils/mknod.c coreutils/mv.c coreutils/nice.c coreutils/nohup.c coreutils/od.c coreutils/printenv.c coreutils/printf.c coreutils/pwd.c coreutils/readlink.c coreutils/realpath.c coreutils/rm.c coreutils/rmdir.c coreutils/seq.c coreutils/sleep.c coreutils/sort.c coreutils/split.c coreutils/stat.c coreutils/stty.c coreutils/sum.c coreutils/sync.c coreutils/tac.c coreutils/tail.c coreutils/tee.c coreutils/test.c coreutils/test_ptr_hack.c coreutils/touch.c coreutils/tr.c coreutils/true.c coreutils/uname.c coreutils/uniq.c coreutils/usleep.c coreutils/uudecode.c coreutils/uuencode.c coreutils/wc.c coreutils/whoami.c coreutils/yes.c
+archival/bbunzip.c archival/bzip2.c archival/cpio.c archival/gzip.c
+archival/libarchive/lzo1x_1.c archival/libarchive/lzo1x_1o.c archival/libarchive/lzo1x_9x.c archival/libarchive/lzo1x_d.c archival/lzop.c
+archival/tar.c archival/unzip.c archival/libarchive/data_align.c
+archival/libarchive/data_extract_all.c archival/libarchive/data_extract_to_command.c archival/libarchive/data_extract_to_stdout.c
+archival/libarchive/data_skip.c archival/libarchive/decompress_bunzip2.c archival/libarchive/decompress_unlzma.c
+archival/libarchive/decompress_unxz.c archival/libarchive/decompress_gunzip.c archival/libarchive/decompress_uncompress.c
+archival/libarchive/filter_accept_all.c archival/libarchive/filter_accept_list.c archival/libarchive/filter_accept_reject_list.c
+archival/libarchive/find_list_entry.c archival/libarchive/get_header_cpio.c archival/libarchive/get_header_tar.c
+archival/libarchive/get_header_tar_bz2.c archival/libarchive/get_header_tar_gz.c archival/libarchive/get_header_tar_lzma.c
+archival/libarchive/header_list.c archival/libarchive/header_skip.c archival/libarchive/header_verbose_list.c
+archival/libarchive/init_handle.c archival/libarchive/open_transformer.c archival/libarchive/seek_by_jump.c archival/libarchive/seek_by_read.c
+
+console-tools/chvt.c console-tools/clear.c console-tools/deallocvt.c console-tools/fgconsole.c console-tools/openvt.c
+console-tools/reset.c console-tools/resize.c console-tools/setconsole.c console-tools/setkeycodes.c
+
+coreutils/basename.c coreutils/cal.c coreutils/cat.c coreutils/catv.c coreutils/chgrp.c coreutils/chmod.c coreutils/chown.c coreutils/chroot.c coreutils/cp.c coreutils/cut.c coreutils/date.c coreutils/dd.c coreutils/df.c coreutils/dirname.c coreutils/dos2unix.c coreutils/du.c coreutils/echo.c coreutils/env.c coreutils/expr.c coreutils/false.c coreutils/fold.c coreutils/head.c coreutils/id.c coreutils/install.c coreutils/ln.c coreutils/ls.c coreutils/md5_sha1_sum.c coreutils/mkdir.c coreutils/mkfifo.c coreutils/mknod.c coreutils/mv.c coreutils/nice.c coreutils/nohup.c coreutils/od.c coreutils/printenv.c coreutils/printf.c coreutils/pwd.c coreutils/readlink.c coreutils/realpath.c coreutils/rm.c coreutils/rmdir.c coreutils/seq.c coreutils/sleep.c coreutils/sort.c coreutils/split.c coreutils/stat.c coreutils/stty.c coreutils/sync.c coreutils/tac.c coreutils/tail.c coreutils/tee.c coreutils/test.c coreutils/test_ptr_hack.c coreutils/touch.c coreutils/tr.c coreutils/true.c coreutils/uname.c coreutils/uniq.c coreutils/usleep.c coreutils/uudecode.c coreutils/uuencode.c coreutils/wc.c coreutils/whoami.c coreutils/yes.c
coreutils/libcoreutils/cp_mv_stat.c coreutils/libcoreutils/getopt_mk_fifo_nod.c
-debianutils/mktemp.c debianutils/pipe_progress.c debianutils/run_parts.c debianutils/which.c
-e2fsprogs/chattr.c e2fsprogs/e2fs_lib.c e2fsprogs/lsattr.c e2fsprogs/tune2fs.c
+coreutils/comm.c coreutils/expand.c coreutils/sum.c coreutils/fsync.c
+
+debianutils/mktemp.c debianutils/run_parts.c debianutils/which.c debianutils/pipe_progress.c
+
editors/awk.c editors/cmp.c editors/diff.c editors/ed.c editors/patch.c editors/sed.c editors/vi.c
+e2fsprogs/e2fs_lib.c e2fsprogs/chattr.c e2fsprogs/lsattr.c e2fsprogs/tune2fs.c
+
findutils/find.c findutils/grep.c findutils/xargs.c
init/halt.c init/mesg.c
-libbb/appletlib.c libbb/ask_confirmation.c libbb/bb_askpass.c libbb/bb_bswap_64.c libbb/bb_do_delay.c libbb/bb_pwd.c libbb/bb_qsort.c libbb/bb_strtonum.c libbb/change_identity.c libbb/chomp.c libbb/compare_string_array.c libbb/concat_path_file.c libbb/concat_subpath_file.c libbb/copy_file.c libbb/copyfd.c libbb/crc32.c libbb/create_icmp6_socket.c libbb/create_icmp_socket.c libbb/default_error_retval.c libbb/device_open.c libbb/dump.c libbb/execable.c libbb/fclose_nonstdin.c libbb/fflush_stdout_and_exit.c libbb/fgets_str.c libbb/find_mount_point.c libbb/find_pid_by_name.c libbb/find_root_device.c libbb/full_write.c libbb/get_console.c libbb/get_cpu_count.c libbb/get_last_path_component.c libbb/get_line_from_file.c libbb/get_shell_name.c libbb/get_volsize.c libbb/getopt32.c libbb/getpty.c libbb/hash_md5_sha.c libbb/herror_msg.c libbb/human_readable.c libbb/inet_cksum.c libbb/inet_common.c libbb/info_msg.c libbb/inode_hash.c libbb/isdirectory.c libbb/kernel_version.c libbb/last_char_is.c libbb/lineedit.c libbb/lineedit_ptr_hack.c libbb/llist.c libbb/login.c libbb/loop.c libbb/make_directory.c libbb/makedev.c libbb/match_fstype.c libbb/messages.c libbb/missing_syscalls.c libbb/mode_string.c libbb/parse_config.c libbb/parse_mode.c libbb/percent_decode.c libbb/perror_msg.c libbb/perror_nomsg.c libbb/perror_nomsg_and_die.c libbb/pidfile.c libbb/platform.c libbb/print_flags.c libbb/printable.c libbb/printable_string.c libbb/process_escape_sequence.c libbb/procps.c libbb/progress.c libbb/ptr_to_globals.c libbb/read.c libbb/read_key.c libbb/read_printf.c libbb/recursive_action.c libbb/remove_file.c libbb/run_shell.c libbb/safe_gethostname.c libbb/safe_poll.c libbb/safe_strncpy.c libbb/safe_write.c libbb/setup_environment.c libbb/signals.c libbb/simplify_path.c libbb/single_argv.c libbb/skip_whitespace.c libbb/speed_table.c libbb/str_tolower.c libbb/strrstr.c libbb/time.c libbb/trim.c libbb/u_signal_names.c libbb/udp_io.c libbb/unicode.c libbb/uuencode.c libbb/vdprintf.c libbb/verror_msg.c libbb/vfork_daemon_rexec.c libbb/warn_ignoring_args.c libbb/wfopen.c libbb/wfopen_input.c libbb/write.c libbb/xatonum.c libbb/xconnect.c libbb/xfunc_die.c libbb/xfuncs.c libbb/xfuncs_printf.c libbb/xgetcwd.c libbb/xgethostbyname.c libbb/xreadlink.c libbb/xrealloc_vector.c libbb/xregcomp.c
+
+libbb/missing_syscalls.c
+libbb/appletlib.c libbb/ask_confirmation.c libbb/bb_askpass.c libbb/bb_do_delay.c libbb/bb_pwd.c libbb/bb_qsort.c libbb/bb_strtonum.c
+libbb/change_identity.c libbb/chomp.c libbb/compare_string_array.c libbb/concat_path_file.c libbb/concat_subpath_file.c libbb/copy_file.c libbb/copyfd.c
+libbb/crc32.c libbb/percent_decode.c libbb/default_error_retval.c libbb/device_open.c libbb/dump.c libbb/execable.c libbb/fclose_nonstdin.c
+libbb/fflush_stdout_and_exit.c libbb/fgets_str.c libbb/find_mount_point.c libbb/find_pid_by_name.c libbb/find_root_device.c libbb/full_write.c
+libbb/get_console.c libbb/get_cpu_count.c libbb/get_last_path_component.c libbb/get_line_from_file.c libbb/get_volsize.c
+libbb/getopt32.c libbb/getpty.c libbb/get_shell_name.c
+libbb/herror_msg.c libbb/human_readable.c libbb/inet_cksum.c libbb/inet_common.c libbb/info_msg.c libbb/inode_hash.c libbb/isdirectory.c
+libbb/kernel_version.c libbb/last_char_is.c libbb/lineedit.c libbb/lineedit_ptr_hack.c libbb/llist.c libbb/login.c libbb/loop.c
+libbb/make_directory.c libbb/makedev.c libbb/match_fstype.c libbb/hash_md5_sha.c libbb/bb_bswap_64.c libbb/messages.c libbb/mode_string.c libbb/mtab.c
+libbb/parse_config.c libbb/parse_mode.c libbb/perror_msg.c libbb/perror_nomsg.c libbb/perror_nomsg_and_die.c libbb/pidfile.c libbb/platform.c
+libbb/print_flags.c libbb/printable.c libbb/printable_string.c libbb/process_escape_sequence.c libbb/procps.c libbb/progress.c
+libbb/ptr_to_globals.c libbb/read.c libbb/read_key.c libbb/read_printf.c libbb/recursive_action.c libbb/remove_file.c libbb/rtc.c libbb/run_shell.c
+libbb/safe_gethostname.c libbb/safe_poll.c libbb/safe_strncpy.c libbb/safe_write.c libbb/setup_environment.c libbb/signals.c
+libbb/simplify_path.c libbb/single_argv.c libbb/skip_whitespace.c libbb/speed_table.c libbb/str_tolower.c libbb/strrstr.c
+libbb/time.c libbb/trim.c libbb/u_signal_names.c libbb/udp_io.c libbb/unicode.c libbb/uuencode.c
+libbb/vdprintf.c libbb/verror_msg.c libbb/vfork_daemon_rexec.c libbb/warn_ignoring_args.c libbb/wfopen.c libbb/wfopen_input.c
+libbb/write.c libbb/xatonum.c libbb/xconnect.c libbb/xfunc_die.c libbb/xfuncs.c libbb/xfuncs_printf.c
+libbb/xgetcwd.c libbb/xgethostbyname.c libbb/xreadlink.c libbb/xrealloc_vector.c libbb/xregcomp.c
+libbb/endofname.c libbb/in_ether.c libbb/nuke_str.c
+
libpwdgrp/uidgid_get.c
@@ -19,10 +57,26 @@ networking/arp.c networking/brctl.c networking/dnsd.c networking/ftpgetput.c net
networking/libiproute/ip_parse_common_args.c networking/libiproute/ipaddress.c networking/libiproute/iplink.c networking/libiproute/iproute.c networking/libiproute/iprule.c networking/libiproute/libnetlink.c networking/libiproute/ll_addr.c networking/libiproute/ll_map.c networking/libiproute/ll_proto.c networking/libiproute/ll_types.c networking/libiproute/rt_names.c networking/libiproute/rtm_map.c networking/libiproute/utils.c
-procps/free.c procps/fuser.c procps/iostat.c procps/kill.c procps/lsof.c procps/mpstat.c procps/pgrep.c procps/pidof.c procps/pmap.c procps/ps.c procps/pstree.c procps/pwdx.c procps/renice.c procps/sysctl.c procps/top.c procps/uptime.c procps/watch.c
-
+procps/free.c procps/fuser.c procps/kill.c procps/pgrep.c procps/pidof.c procps/ps.c procps/renice.c procps/sysctl.c procps/top.c procps/uptime.c procps/watch.c
+procps/pmap.c procps/iostat.c procps/mpstat.c
+procps/lsof.c procps/nmeter.c procps/pstree.c procps/pwdx.c procps/smemcap.c
shell/ash.c shell/ash_ptr_hack.c shell/math.c shell/random.c shell/shell_common.c
-util-linux/blkid.c util-linux/blockdev.c util-linux/dmesg.c util-linux/fbset.c util-linux/fdisk.c util-linux/flock.c util-linux/freeramdisk.c util-linux/fstrim.c util-linux/getopt.c util-linux/hexdump.c util-linux/losetup.c util-linux/lsusb.c util-linux/mkfs_ext2.c util-linux/mkfs_vfat.c util-linux/mkswap.c util-linux/more.c util-linux/mount.c util-linux/rdev.c util-linux/rev.c util-linux/swaponoff.c util-linux/umount.c
-util-linux/volume_id/exfat.c util-linux/volume_id/ext.c util-linux/volume_id/fat.c util-linux/volume_id/get_devname.c util-linux/volume_id/iso9660.c util-linux/volume_id/linux_swap.c util-linux/volume_id/ntfs.c util-linux/volume_id/squashfs.c util-linux/volume_id/util.c util-linux/volume_id/volume_id.c
+libbb/selinux_common.c android/selinux/matchpathcon.c android/selinux/stubs.c
+selinux/chcon.c selinux/selinuxenabled.c
+selinux/getenforce.c selinux/sestatus.c selinux/setsebool.c
+selinux/getsebool.c selinux/runcon.c selinux/setenforce.c selinux/setfiles.c selinux/matchpathcon.c
+
+util-linux/blkid.c util-linux/blockdev.c util-linux/dmesg.c util-linux/fdisk.c util-linux/findfs.c util-linux/flock.c
+util-linux/freeramdisk.c util-linux/fstrim.c util-linux/getopt.c
+util-linux/hexdump.c util-linux/hwclock.c util-linux/losetup.c util-linux/lspci.c util-linux/lsusb.c
+util-linux/mkfs_ext2.c util-linux/mkfs_vfat.c util-linux/mkswap.c
+util-linux/more.c util-linux/mount.c util-linux/rdate.c util-linux/rdev.c util-linux/rev.c
+util-linux/swaponoff.c util-linux/switch_root.c util-linux/umount.c
+
+util-linux/volume_id/get_devname.c util-linux/volume_id/volume_id.c util-linux/volume_id/util.c util-linux/volume_id/ext.c
+util-linux/volume_id/fat.c util-linux/volume_id/iso9660.c util-linux/volume_id/ntfs.c util-linux/volume_id/linux_swap.c
+util-linux/volume_id/exfat.c util-linux/volume_id/squashfs.c util-linux/volume_id/f2fs.c
+
+util-linux/fbset.c
diff --git a/.config-minimal b/busybox-minimal.config
index dc22b75..979e56f 100644
--- a/.config-minimal
+++ b/busybox-minimal.config
@@ -1,7 +1,7 @@
#
# Automatically generated make config: don't edit
-# Busybox version: 1.21.0-jb
-# Thu Apr 11 18:07:58 2013
+# Busybox version: 1.22.1
+# Sun Jun 22 23:11:05 2014
#
CONFIG_HAVE_DOT_CONFIG=y
@@ -46,7 +46,7 @@ CONFIG_PID_FILE_PATH=""
CONFIG_FEATURE_SUID=y
# CONFIG_FEATURE_SUID_CONFIG is not set
# CONFIG_FEATURE_SUID_CONFIG_QUIET is not set
-# CONFIG_SELINUX is not set
+CONFIG_SELINUX=y
# CONFIG_FEATURE_PREFER_APPLETS is not set
CONFIG_BUSYBOX_EXEC_PATH="/proc/self/exe"
# CONFIG_FEATURE_SYSLOG is not set
@@ -61,10 +61,10 @@ CONFIG_BUSYBOX_EXEC_PATH="/proc/self/exe"
# CONFIG_BUILD_LIBBUSYBOX is not set
# CONFIG_FEATURE_INDIVIDUAL is not set
# CONFIG_FEATURE_SHARED_BUSYBOX is not set
+# CONFIG_LFS is not set
CONFIG_LFS=y
-CONFIG_CROSS_COMPILER_PREFIX="arm-eabi-"
CONFIG_SYSROOT=""
-CONFIG_EXTRA_CFLAGS="-Os"
+CONFIG_EXTRA_CFLAGS="-Os -fno-short-enums -fgcse-after-reload -frerun-cse-after-loop -frename-registers"
CONFIG_EXTRA_LDFLAGS=""
CONFIG_EXTRA_LDLIBS=""
@@ -135,7 +135,14 @@ CONFIG_FEATURE_SEAMLESS_GZ=y
# CONFIG_AR is not set
# CONFIG_FEATURE_AR_LONG_FILENAMES is not set
# CONFIG_FEATURE_AR_CREATE is not set
+# CONFIG_UNCOMPRESS is not set
+CONFIG_GUNZIP=y
CONFIG_BUNZIP2=y
+CONFIG_UNLZMA=y
+# CONFIG_FEATURE_LZMA_FAST is not set
+# CONFIG_LZMA is not set
+CONFIG_UNXZ=y
+# CONFIG_XZ is not set
CONFIG_BZIP2=y
CONFIG_CPIO=y
CONFIG_FEATURE_CPIO_O=y
@@ -143,14 +150,13 @@ CONFIG_FEATURE_CPIO_O=y
# CONFIG_DPKG is not set
# CONFIG_DPKG_DEB is not set
# CONFIG_FEATURE_DPKG_DEB_EXTRACT_ONLY is not set
-CONFIG_GUNZIP=y
CONFIG_GZIP=y
CONFIG_FEATURE_GZIP_LONG_OPTIONS=y
CONFIG_GZIP_FAST=2
CONFIG_LZOP=y
# CONFIG_LZOP_COMPR_HIGH is not set
-# CONFIG_RPM2CPIO is not set
# CONFIG_RPM is not set
+# CONFIG_RPM2CPIO is not set
CONFIG_TAR=y
CONFIG_FEATURE_TAR_CREATE=y
# CONFIG_FEATURE_TAR_AUTODETECT is not set
@@ -162,13 +168,7 @@ CONFIG_FEATURE_TAR_LONG_OPTIONS=y
# CONFIG_FEATURE_TAR_TO_COMMAND is not set
# CONFIG_FEATURE_TAR_UNAME_GNAME is not set
CONFIG_FEATURE_TAR_NOPRESERVE_TIME=y
-# CONFIG_FEATURE_TAR_SELINUX is not set
-# CONFIG_UNCOMPRESS is not set
-CONFIG_UNLZMA=y
-# CONFIG_FEATURE_LZMA_FAST is not set
-# CONFIG_LZMA is not set
-CONFIG_UNXZ=y
-# CONFIG_XZ is not set
+CONFIG_FEATURE_TAR_SELINUX=y
CONFIG_UNZIP=y
#
@@ -186,6 +186,7 @@ CONFIG_GROUPS=y
CONFIG_TEST=y
# CONFIG_FEATURE_TEST_64 is not set
CONFIG_TOUCH=y
+# CONFIG_FEATURE_TOUCH_NODEREF is not set
# CONFIG_FEATURE_TOUCH_SUSV3 is not set
CONFIG_TR=y
CONFIG_FEATURE_TR_CLASSES=y
@@ -359,7 +360,16 @@ CONFIG_WHICH=y
#
# Editors
#
+CONFIG_AWK=y
+# CONFIG_FEATURE_AWK_LIBM is not set
+CONFIG_FEATURE_AWK_GNU_EXTENSIONS=y
+CONFIG_CMP=y
+CONFIG_DIFF=y
+CONFIG_FEATURE_DIFF_LONG_OPTIONS=y
+CONFIG_FEATURE_DIFF_DIR=y
+# CONFIG_ED is not set
CONFIG_PATCH=y
+CONFIG_SED=y
# CONFIG_VI is not set
CONFIG_FEATURE_VI_MAX_LEN=0
# CONFIG_FEATURE_VI_8BIT is not set
@@ -374,14 +384,6 @@ CONFIG_FEATURE_VI_MAX_LEN=0
# CONFIG_FEATURE_VI_SET is not set
# CONFIG_FEATURE_VI_WIN_RESIZE is not set
# CONFIG_FEATURE_VI_ASK_TERMINAL is not set
-CONFIG_AWK=y
-# CONFIG_FEATURE_AWK_LIBM is not set
-CONFIG_CMP=y
-CONFIG_DIFF=y
-CONFIG_FEATURE_DIFF_LONG_OPTIONS=y
-CONFIG_FEATURE_DIFF_DIR=y
-# CONFIG_ED is not set
-CONFIG_SED=y
CONFIG_FEATURE_ALLOW_EXEC=y
#
@@ -523,6 +525,7 @@ CONFIG_DEFAULT_DEPMOD_FILE="modules.dep"
# Linux System Utilities
#
CONFIG_BLOCKDEV=y
+CONFIG_FSTRIM=y
# CONFIG_MDEV is not set
# CONFIG_FEATURE_MDEV_CONF is not set
# CONFIG_FEATURE_MDEV_RENAME is not set
@@ -538,6 +541,7 @@ CONFIG_DMESG=y
# CONFIG_FEATURE_DMESG_PRETTY is not set
CONFIG_FBSET=y
CONFIG_FEATURE_FBSET_FANCY=y
+CONFIG_FEATURE_DMESG_COLOR=y
# CONFIG_FEATURE_FBSET_READMODE is not set
# CONFIG_FDFLUSH is not set
# CONFIG_FDFORMAT is not set
@@ -554,7 +558,6 @@ CONFIG_FEATURE_FDISK_WRITABLE=y
# CONFIG_FLOCK is not set
CONFIG_FREERAMDISK=y
# CONFIG_FSCK_MINIX is not set
-CONFIG_FSTRIM=y
CONFIG_MKFS_EXT2=y
# CONFIG_MKFS_MINIX is not set
# CONFIG_FEATURE_MINIX2 is not set
@@ -610,26 +613,27 @@ CONFIG_VOLUMEID=y
#
# Filesystem/Volume identification
#
-CONFIG_FEATURE_VOLUMEID_EXT=y
# CONFIG_FEATURE_VOLUMEID_BTRFS is not set
-# CONFIG_FEATURE_VOLUMEID_REISERFS is not set
-CONFIG_FEATURE_VOLUMEID_FAT=y
+# CONFIG_FEATURE_VOLUMEID_CRAMFS is not set
CONFIG_FEATURE_VOLUMEID_EXFAT=y
+CONFIG_FEATURE_VOLUMEID_EXT=y
+CONFIG_FEATURE_VOLUMEID_F2FS=y
+CONFIG_FEATURE_VOLUMEID_FAT=y
# CONFIG_FEATURE_VOLUMEID_HFS is not set
+CONFIG_FEATURE_VOLUMEID_ISO9660=y
# CONFIG_FEATURE_VOLUMEID_JFS is not set
-# CONFIG_FEATURE_VOLUMEID_XFS is not set
+# CONFIG_FEATURE_VOLUMEID_LINUXRAID is not set
+CONFIG_FEATURE_VOLUMEID_LINUXSWAP=y
+# CONFIG_FEATURE_VOLUMEID_LUKS is not set
# CONFIG_FEATURE_VOLUMEID_NILFS is not set
CONFIG_FEATURE_VOLUMEID_NTFS=y
-CONFIG_FEATURE_VOLUMEID_ISO9660=y
-# CONFIG_FEATURE_VOLUMEID_UDF is not set
-# CONFIG_FEATURE_VOLUMEID_LUKS is not set
-CONFIG_FEATURE_VOLUMEID_LINUXSWAP=y
-# CONFIG_FEATURE_VOLUMEID_CRAMFS is not set
+# CONFIG_FEATURE_VOLUMEID_OCFS2 is not set
+# CONFIG_FEATURE_VOLUMEID_REISERFS is not set
# CONFIG_FEATURE_VOLUMEID_ROMFS is not set
CONFIG_FEATURE_VOLUMEID_SQUASHFS=y
# CONFIG_FEATURE_VOLUMEID_SYSV is not set
-# CONFIG_FEATURE_VOLUMEID_OCFS2 is not set
-# CONFIG_FEATURE_VOLUMEID_LINUXRAID is not set
+# CONFIG_FEATURE_VOLUMEID_UDF is not set
+# CONFIG_FEATURE_VOLUMEID_XFS is not set
#
# Miscellaneous Utilities
@@ -647,6 +651,7 @@ CONFIG_FEATURE_LESS_WINCH=y
# CONFIG_FEATURE_LESS_LINENUMS is not set
CONFIG_NANDWRITE=y
CONFIG_NANDDUMP=y
+# CONFIG_RFKILL is not set
CONFIG_SETSERIAL=y
# CONFIG_UBIATTACH is not set
# CONFIG_UBIDETACH is not set
@@ -654,6 +659,7 @@ CONFIG_SETSERIAL=y
# CONFIG_UBIRMVOL is not set
# CONFIG_UBIRSVOL is not set
# CONFIG_UBIUPDATEVOL is not set
+# CONFIG_WALL is not set
# CONFIG_ADJTIMEX is not set
CONFIG_BBCONFIG=y
CONFIG_FEATURE_COMPRESS_BBCONFIG=y
@@ -710,7 +716,6 @@ CONFIG_MOUNTPOINT=y
# CONFIG_MT is not set
# CONFIG_RAIDAUTORUN is not set
# CONFIG_READAHEAD is not set
-# CONFIG_RFKILL is not set
# CONFIG_RUNLEVEL is not set
# CONFIG_RX is not set
CONFIG_SETSID=y
@@ -721,7 +726,6 @@ CONFIG_TIME=y
# CONFIG_TIMEOUT is not set
CONFIG_TTYSIZE=y
# CONFIG_VOLNAME is not set
-# CONFIG_WALL is not set
# CONFIG_WATCHDOG is not set
#
@@ -939,21 +943,25 @@ CONFIG_SV_DEFAULT_SERVICE_DIR=""
# CONFIG_ENVUIDGID is not set
# CONFIG_ENVDIR is not set
# CONFIG_SOFTLIMIT is not set
-# CONFIG_CHCON is not set
+
+#
+# SELinux Utilities
+#
+CONFIG_CHCON=y
# CONFIG_FEATURE_CHCON_LONG_OPTIONS is not set
-# CONFIG_GETENFORCE is not set
-# CONFIG_GETSEBOOL is not set
+CONFIG_GETENFORCE=y
+CONFIG_GETSEBOOL=y
# CONFIG_LOAD_POLICY is not set
-# CONFIG_MATCHPATHCON is not set
-# CONFIG_RESTORECON is not set
+CONFIG_MATCHPATHCON=y
+CONFIG_RESTORECON=y
# CONFIG_RUNCON is not set
# CONFIG_FEATURE_RUNCON_LONG_OPTIONS is not set
-# CONFIG_SELINUXENABLED is not set
-# CONFIG_SETENFORCE is not set
-# CONFIG_SETFILES is not set
+CONFIG_SELINUXENABLED=y
+CONFIG_SETENFORCE=y
+CONFIG_SETFILES=y
# CONFIG_FEATURE_SETFILES_CHECK_OPTION is not set
-# CONFIG_SETSEBOOL is not set
-# CONFIG_SESTATUS is not set
+CONFIG_SETSEBOOL=y
+CONFIG_SESTATUS=y
#
# Shells
diff --git a/busybox-minimal.links b/busybox-minimal.links
index 809fb8b..e1df95c 100644
--- a/busybox-minimal.links
+++ b/busybox-minimal.links
@@ -37,6 +37,7 @@
/bin/cat
/bin/catv
/bin/chattr
+/bin/chcon
/bin/chgrp
/bin/chmod
/bin/chown
@@ -67,7 +68,11 @@
/sbin/freeramdisk
/sbin/fstrim
/bin/fuser
+/bin/getenforce
/bin/getopt
+/bin/getsebool
+/bin/grep
+/bin/groups
/bin/gunzip
/bin/gzip
/bin/head
@@ -87,6 +92,7 @@
/bin/lzop
/bin/lzopcat
/sbin/makedevs
+/sbin/matchpathcon
/bin/md5sum
/bin/mkdir
/sbin/mkdosfs
@@ -117,12 +123,20 @@
/bin/renice
/bin/reset
/bin/resize
+/sbin/restorecon
+/bin/rev
/bin/rm
/bin/rmdir
/bin/run-parts
/bin/sed
+/sbin/selinuxenabled
/bin/seq
+/sbin/sestatus
/sbin/setconsole
+/sbin/setenforce
+/sbin/setfiles
+/bin/setsebool
+/bin/setserial
/bin/setsid
/bin/sha1sum
/bin/sha256sum
diff --git a/busybox-minimal.sources b/busybox-minimal.sources
index 70818cc..fd21458 100644
--- a/busybox-minimal.sources
+++ b/busybox-minimal.sources
@@ -1,3 +1,4 @@
+android/libc/__set_errno.c
archival/bbunzip.c archival/bzip2.c archival/cpio.c archival/gzip.c archival/lzop.c archival/tar.c archival/unzip.c
archival/libarchive/data_align.c archival/libarchive/data_extract_all.c archival/libarchive/data_extract_to_stdout.c archival/libarchive/data_skip.c archival/libarchive/decompress_bunzip2.c archival/libarchive/decompress_gunzip.c archival/libarchive/decompress_unlzma.c archival/libarchive/decompress_unxz.c archival/libarchive/filter_accept_all.c archival/libarchive/filter_accept_list.c archival/libarchive/filter_accept_reject_list.c archival/libarchive/find_list_entry.c archival/libarchive/get_header_cpio.c archival/libarchive/get_header_tar.c archival/libarchive/header_list.c archival/libarchive/header_skip.c archival/libarchive/header_verbose_list.c archival/libarchive/init_handle.c archival/libarchive/lzo1x_1.c archival/libarchive/lzo1x_1o.c archival/libarchive/lzo1x_d.c archival/libarchive/open_transformer.c archival/libarchive/seek_by_jump.c archival/libarchive/seek_by_read.c
@@ -9,7 +10,25 @@ e2fsprogs/chattr.c e2fsprogs/e2fs_lib.c e2fsprogs/lsattr.c e2fsprogs/tune2fs.c
editors/awk.c editors/cmp.c editors/diff.c editors/patch.c editors/sed.c
findutils/find.c findutils/grep.c findutils/xargs.c
-libbb/appletlib.c libbb/ask_confirmation.c libbb/bb_askpass.c libbb/bb_bswap_64.c libbb/bb_do_delay.c libbb/bb_pwd.c libbb/bb_qsort.c libbb/bb_strtonum.c libbb/change_identity.c libbb/chomp.c libbb/compare_string_array.c libbb/concat_path_file.c libbb/concat_subpath_file.c libbb/copy_file.c libbb/copyfd.c libbb/crc32.c libbb/create_icmp6_socket.c libbb/create_icmp_socket.c libbb/default_error_retval.c libbb/device_open.c libbb/dump.c libbb/execable.c libbb/fclose_nonstdin.c libbb/fflush_stdout_and_exit.c libbb/fgets_str.c libbb/find_mount_point.c libbb/find_pid_by_name.c libbb/find_root_device.c libbb/full_write.c libbb/get_console.c libbb/get_last_path_component.c libbb/get_line_from_file.c libbb/get_shell_name.c libbb/get_volsize.c libbb/getopt32.c libbb/getpty.c libbb/hash_md5_sha.c libbb/herror_msg.c libbb/human_readable.c libbb/inet_common.c libbb/info_msg.c libbb/inode_hash.c libbb/isdirectory.c libbb/kernel_version.c libbb/last_char_is.c libbb/lineedit.c libbb/lineedit_ptr_hack.c libbb/llist.c libbb/login.c libbb/loop.c libbb/make_directory.c libbb/makedev.c libbb/match_fstype.c libbb/messages.c libbb/missing_syscalls.c libbb/mode_string.c libbb/parse_config.c libbb/parse_mode.c libbb/percent_decode.c libbb/perror_msg.c libbb/perror_nomsg.c libbb/perror_nomsg_and_die.c libbb/pidfile.c libbb/platform.c libbb/print_flags.c libbb/printable.c libbb/printable_string.c libbb/process_escape_sequence.c libbb/procps.c libbb/progress.c libbb/ptr_to_globals.c libbb/read.c libbb/read_key.c libbb/read_printf.c libbb/recursive_action.c libbb/remove_file.c libbb/run_shell.c libbb/safe_gethostname.c libbb/safe_poll.c libbb/safe_strncpy.c libbb/safe_write.c libbb/setup_environment.c libbb/signals.c libbb/simplify_path.c libbb/single_argv.c libbb/skip_whitespace.c libbb/speed_table.c libbb/str_tolower.c libbb/strrstr.c libbb/time.c libbb/trim.c libbb/u_signal_names.c libbb/unicode.c libbb/uuencode.c libbb/vdprintf.c libbb/verror_msg.c libbb/vfork_daemon_rexec.c libbb/warn_ignoring_args.c libbb/wfopen.c libbb/wfopen_input.c libbb/write.c libbb/xatonum.c libbb/xconnect.c libbb/xfunc_die.c libbb/xfuncs.c libbb/xfuncs_printf.c libbb/xgetcwd.c libbb/xgethostbyname.c libbb/xreadlink.c libbb/xrealloc_vector.c libbb/xregcomp.c
+libbb/missing_syscalls.c
+libbb/appletlib.c libbb/ask_confirmation.c libbb/bb_askpass.c libbb/bb_do_delay.c libbb/bb_pwd.c libbb/bb_qsort.c libbb/bb_strtonum.c
+libbb/change_identity.c libbb/chomp.c libbb/compare_string_array.c libbb/concat_path_file.c libbb/concat_subpath_file.c libbb/copy_file.c libbb/copyfd.c
+libbb/crc32.c libbb/default_error_retval.c libbb/device_open.c libbb/dump.c libbb/execable.c libbb/fclose_nonstdin.c
+libbb/fflush_stdout_and_exit.c libbb/fgets_str.c libbb/find_mount_point.c libbb/find_pid_by_name.c libbb/find_root_device.c libbb/full_write.c
+libbb/get_console.c libbb/get_last_path_component.c libbb/get_line_from_file.c libbb/get_shell_name.c libbb/endofname.c libbb/in_ether.c libbb/get_volsize.c
+libbb/getopt32.c libbb/getpty.c libbb/herror_msg.c libbb/human_readable.c libbb/inet_common.c libbb/info_msg.c libbb/inode_hash.c libbb/isdirectory.c
+libbb/kernel_version.c libbb/last_char_is.c libbb/lineedit.c libbb/lineedit_ptr_hack.c libbb/llist.c libbb/login.c libbb/loop.c
+libbb/make_directory.c libbb/makedev.c libbb/match_fstype.c libbb/hash_md5_sha.c libbb/bb_bswap_64.c libbb/messages.c libbb/mode_string.c libbb/mtab.c
+libbb/parse_config.c libbb/parse_mode.c libbb/perror_msg.c libbb/perror_nomsg.c libbb/perror_nomsg_and_die.c libbb/pidfile.c libbb/platform.c
+libbb/print_flags.c libbb/printable.c libbb/printable_string.c libbb/process_escape_sequence.c libbb/procps.c libbb/progress.c
+libbb/ptr_to_globals.c libbb/read.c libbb/read_key.c libbb/read_printf.c libbb/recursive_action.c libbb/remove_file.c libbb/run_shell.c
+libbb/safe_gethostname.c libbb/safe_poll.c libbb/safe_strncpy.c libbb/safe_write.c libbb/setup_environment.c libbb/signals.c
+libbb/simplify_path.c libbb/single_argv.c libbb/skip_whitespace.c libbb/speed_table.c libbb/str_tolower.c libbb/strrstr.c
+libbb/time.c libbb/trim.c libbb/u_signal_names.c libbb/udp_io.c libbb/uuencode.c
+libbb/vdprintf.c libbb/verror_msg.c libbb/vfork_daemon_rexec.c libbb/warn_ignoring_args.c libbb/wfopen.c
+libbb/wfopen_input.c libbb/write.c libbb/xatonum.c libbb/xconnect.c libbb/xfunc_die.c libbb/xfuncs.c libbb/xfuncs_printf.c
+libbb/xgetcwd.c libbb/xgethostbyname.c libbb/xreadlink.c libbb/xrealloc_vector.c libbb/xregcomp.c libbb/unicode.c
+
libpwdgrp/uidgid_get.c
@@ -17,12 +36,18 @@ miscutils/bbconfig.c miscutils/dc.c miscutils/devmem.c miscutils/less.c miscutil
modutils/modinfo.c modutils/modprobe-small.c modutils/modutils.c
+android/selinux/matchpathcon.c android/selinux/stubs.c
+libbb/selinux_common.c selinux/chcon.c selinux/selinuxenabled.c
+selinux/getenforce.c selinux/sestatus.c selinux/setsebool.c
+selinux/getsebool.c selinux/setenforce.c selinux/setfiles.c selinux/matchpathcon.c
+util-linux/blkid.c util-linux/blockdev.c util-linux/dmesg.c util-linux/fdisk.c util-linux/freeramdisk.c util-linux/fstrim.c util-linux/getopt.c
+util-linux/hexdump.c util-linux/losetup.c util-linux/lspci.c util-linux/lsusb.c util-linux/mkfs_ext2.c util-linux/mkfs_vfat.c util-linux/mkswap.c
+util-linux/more.c util-linux/mount.c util-linux/rdev.c util-linux/rev.c util-linux/swaponoff.c util-linux/switch_root.c util-linux/umount.c
-procps/free.c procps/fuser.c procps/kill.c procps/lsof.c procps/pgrep.c procps/pidof.c procps/ps.c procps/pstree.c procps/renice.c procps/sysctl.c procps/top.c procps/uptime.c procps/watch.c
-
-
-shell/ash.c shell/ash_ptr_hack.c shell/math.c shell/shell_common.c
+util-linux/volume_id/get_devname.c util-linux/volume_id/volume_id.c util-linux/volume_id/util.c util-linux/volume_id/ext.c
+util-linux/volume_id/fat.c util-linux/volume_id/iso9660.c util-linux/volume_id/ntfs.c util-linux/volume_id/linux_swap.c
+util-linux/volume_id/exfat.c util-linux/volume_id/squashfs.c util-linux/volume_id/f2fs.c
util-linux/blkid.c util-linux/blockdev.c util-linux/dmesg.c util-linux/fbset.c util-linux/fdisk.c util-linux/freeramdisk.c util-linux/fstrim.c util-linux/getopt.c util-linux/hexdump.c util-linux/losetup.c util-linux/lspci.c util-linux/lsusb.c util-linux/mkfs_ext2.c util-linux/mkfs_vfat.c util-linux/mkswap.c util-linux/more.c util-linux/mount.c util-linux/rdev.c util-linux/rev.c util-linux/swaponoff.c util-linux/umount.c
util-linux/volume_id/exfat.c util-linux/volume_id/ext.c util-linux/volume_id/fat.c util-linux/volume_id/get_devname.c util-linux/volume_id/iso9660.c util-linux/volume_id/linux_swap.c util-linux/volume_id/ntfs.c util-linux/volume_id/squashfs.c util-linux/volume_id/util.c util-linux/volume_id/volume_id.c
diff --git a/console-tools/dumpkmap.c b/console-tools/dumpkmap.c
index 6b923d2..bf8d690 100644
--- a/console-tools/dumpkmap.c
+++ b/console-tools/dumpkmap.c
@@ -36,47 +36,56 @@ int dumpkmap_main(int argc UNUSED_PARAM, char **argv)
{
struct kbentry ke;
int i, j, fd;
- RESERVE_CONFIG_BUFFER(flags, MAX_NR_KEYMAPS);
+#define flags bb_common_bufsiz1
/* When user accidentally runs "dumpkmap FILE"
* instead of "dumpkmap >FILE", we'd dump binary stuff to tty.
- * Let's prevent it: */
+ * Let's prevent it:
+ */
if (argv[1])
bb_show_usage();
/* bb_warn_ignoring_args(argv[1]);*/
fd = get_console_fd_or_die();
+#if 0
write(STDOUT_FILENO, "bkeymap", 7);
-
/* Here we want to set everything to 0 except for indexes:
- * [0-2] [4-6] [8-10] [12] */
- memset(flags, 0x00, MAX_NR_KEYMAPS);
+ * [0-2] [4-6] [8-10] [12]
+ */
+ /*memset(flags, 0x00, MAX_NR_KEYMAPS); - already is */
memset(flags, 0x01, 13);
flags[3] = flags[7] = flags[11] = 0;
-
/* dump flags */
write(STDOUT_FILENO, flags, MAX_NR_KEYMAPS);
+#define flags7 flags
+#else
+ /* Same effect */
+ /* 0 1 2 3 4 5 6 7 8 9 a b c=12 */
+ memcpy(flags, "bkeymap\1\1\1\0\1\1\1\0\1\1\1\0\1",
+ /* Can use sizeof, or sizeof-1. sizeof is even, using that */
+ /****/ sizeof("bkeymap\1\1\1\0\1\1\1\0\1\1\1\0\1")
+ );
+ write(STDOUT_FILENO, flags, 7 + MAX_NR_KEYMAPS);
+#define flags7 (flags + 7)
+#endif
- for (i = 0; i < MAX_NR_KEYMAPS; i++) {
- if (flags[i] == 1) {
+ for (i = 0; i < 13; i++) {
+ if (flags7[i]) {
for (j = 0; j < NR_KEYS; j++) {
ke.kb_index = j;
ke.kb_table = i;
if (!ioctl_or_perror(fd, KDGKBENT, &ke,
- "ioctl failed with %s, %s, %p",
- (char *)&ke.kb_index,
- (char *)&ke.kb_table,
- &ke.kb_value)
+ "ioctl(KDGKBENT{%d,%d}) failed",
+ j, i)
) {
- write(STDOUT_FILENO, (void*)&ke.kb_value, 2);
+ write(STDOUT_FILENO, &ke.kb_value, 2);
}
}
}
}
if (ENABLE_FEATURE_CLEAN_UP) {
close(fd);
- RELEASE_CONFIG_BUFFER(flags);
}
return EXIT_SUCCESS;
}
diff --git a/console-tools/loadkmap.c b/console-tools/loadkmap.c
index bcffe16..66ec3b0 100644
--- a/console-tools/loadkmap.c
+++ b/console-tools/loadkmap.c
@@ -48,6 +48,7 @@ int loadkmap_main(int argc UNUSED_PARAM, char **argv)
if (argv[1])
bb_show_usage();
/* bb_warn_ignoring_args(argv[1]); */
+
fd = get_console_fd_or_die();
/* or maybe:
opt = getopt32(argv, "C:", &tty_name);
@@ -61,14 +62,24 @@ int loadkmap_main(int argc UNUSED_PARAM, char **argv)
xread(STDIN_FILENO, flags, MAX_NR_KEYMAPS);
for (i = 0; i < MAX_NR_KEYMAPS; i++) {
- if (flags[i] == 1) {
- xread(STDIN_FILENO, ibuff, NR_KEYS * sizeof(uint16_t));
- for (j = 0; j < NR_KEYS; j++) {
- ke.kb_index = j;
- ke.kb_table = i;
- ke.kb_value = ibuff[j];
- ioctl(fd, KDSKBENT, &ke);
- }
+ if (flags[i] != 1)
+ continue;
+ xread(STDIN_FILENO, ibuff, NR_KEYS * sizeof(uint16_t));
+ for (j = 0; j < NR_KEYS; j++) {
+ ke.kb_index = j;
+ ke.kb_table = i;
+ ke.kb_value = ibuff[j];
+ /*
+ * Note: table[idx:0] can contain special value
+ * K_ALLOCATED (marks allocated tables in kernel).
+ * dumpkmap saves the value as-is; but attempts
+ * to load it here fail, since it isn't a valid
+ * key value: it is K(KT_SPEC,126) == 2<<8 + 126,
+ * whereas last valid KT_SPEC is
+ * K_BARENUMLOCK == K(KT_SPEC,19).
+ * So far we just ignore these errors:
+ */
+ ioctl(fd, KDSKBENT, &ke);
}
}
diff --git a/coreutils/Kbuild.src b/coreutils/Kbuild.src
index f796b57..9970c8f 100644
--- a/coreutils/Kbuild.src
+++ b/coreutils/Kbuild.src
@@ -35,7 +35,6 @@ lib-$(CONFIG_EXPAND) += expand.o
lib-$(CONFIG_FALSE) += false.o
lib-$(CONFIG_FOLD) += fold.o
lib-$(CONFIG_FSYNC) += fsync.o
-lib-$(CONFIG_HEAD) += head.o
lib-$(CONFIG_INSTALL) += install.o
#lib-$(CONFIG_LENGTH) += length.o
lib-$(CONFIG_LN) += ln.o
@@ -72,7 +71,6 @@ lib-$(CONFIG_STTY) += stty.o
lib-$(CONFIG_SUM) += sum.o
lib-$(CONFIG_SYNC) += sync.o
lib-$(CONFIG_TAC) += tac.o
-lib-$(CONFIG_TAIL) += tail.o
lib-$(CONFIG_TEE) += tee.o
lib-$(CONFIG_TRUE) += true.o
lib-$(CONFIG_TTY) += tty.o
diff --git a/coreutils/cal.c b/coreutils/cal.c
index c631327..5d97d61 100644
--- a/coreutils/cal.c
+++ b/coreutils/cal.c
@@ -165,7 +165,7 @@ int cal_main(int argc UNUSED_PARAM, char **argv)
char lineout[30];
day_array(month, year, dp);
- len = sprintf(lineout, "%s %d", month_names[month - 1], year);
+ len = sprintf(lineout, "%s %u", month_names[month - 1], year);
printf("%*s%s\n%s\n",
((7*julian + WEEK_LEN) - len) / 2, "",
lineout, day_headings);
diff --git a/coreutils/catv.c b/coreutils/catv.c
index 214b431..e3499c5 100644
--- a/coreutils/catv.c
+++ b/coreutils/catv.c
@@ -25,14 +25,23 @@ int catv_main(int argc UNUSED_PARAM, char **argv)
{
int retval = EXIT_SUCCESS;
int fd;
- unsigned flags;
-
- flags = getopt32(argv, "etv");
+ unsigned opts;
#define CATV_OPT_e (1<<0)
#define CATV_OPT_t (1<<1)
#define CATV_OPT_v (1<<2)
- flags ^= CATV_OPT_v;
+ typedef char BUG_const_mismatch[
+ CATV_OPT_e == VISIBLE_ENDLINE && CATV_OPT_t == VISIBLE_SHOW_TABS
+ ? 1 : -1
+ ];
+
+ opts = getopt32(argv, "etv");
argv += optind;
+#if 0 /* These consts match, we can just pass "opts" to visible() */
+ if (opts & CATV_OPT_e)
+ flags |= VISIBLE_ENDLINE;
+ if (opts & CATV_OPT_t)
+ flags |= VISIBLE_SHOW_TABS;
+#endif
/* Read from stdin if there's nothing else to do. */
if (!argv[0])
@@ -50,29 +59,17 @@ int catv_main(int argc UNUSED_PARAM, char **argv)
res = read(fd, read_buf, COMMON_BUFSIZE);
if (res < 0)
retval = EXIT_FAILURE;
- if (res < 1)
+ if (res <= 0)
break;
for (i = 0; i < res; i++) {
unsigned char c = read_buf[i];
-
- if (c > 126 && (flags & CATV_OPT_v)) {
- if (c == 127) {
- printf("^?");
- continue;
- }
- printf("M-");
- c -= 128;
- }
- if (c < 32) {
- if (c == 10) {
- if (flags & CATV_OPT_e)
- bb_putchar('$');
- } else if (flags & (c==9 ? CATV_OPT_t : CATV_OPT_v)) {
- printf("^%c", c+'@');
- continue;
- }
+ if (opts & CATV_OPT_v) {
+ putchar(c);
+ } else {
+ char buf[sizeof("M-^c")];
+ visible(c, buf, opts);
+ fputs(buf, stdout);
}
- bb_putchar(c);
}
}
if (ENABLE_FEATURE_CLEAN_UP && fd)
diff --git a/coreutils/dd.c b/coreutils/dd.c
index 96602eb..2838f63 100644
--- a/coreutils/dd.c
+++ b/coreutils/dd.c
@@ -30,10 +30,10 @@
//usage: "\n conv=noerror Continue after read errors"
//usage: "\n conv=sync Pad blocks with zeros"
//usage: "\n conv=fsync Physically write data out before finishing"
+//usage: "\n conv=swab Swap every pair of bytes"
//usage: )
//usage: "\n"
-//usage: "\nNumbers may be suffixed by c (x1), w (x2), b (x512), kD (x1000), k (x1024),"
-//usage: "\nMD (x1000000), M (x1048576), GD (x1000000000) or G (x1073741824)"
+//usage: "\nN may be suffixed by c (1), w (2), b (512), kD (1000), k (1024), MD, M, GD, G"
//usage:
//usage:#define dd_example_usage
//usage: "$ dd if=/dev/zero of=/dev/ram1 bs=1M count=4\n"
@@ -151,13 +151,14 @@ int dd_main(int argc UNUSED_PARAM, char **argv)
enum {
/* Must be in the same order as OP_conv_XXX! */
/* (see "flags |= (1 << what)" below) */
- FLAG_NOTRUNC = 1 << 0,
- FLAG_SYNC = 1 << 1,
- FLAG_NOERROR = 1 << 2,
- FLAG_FSYNC = 1 << 3,
+ FLAG_NOTRUNC = (1 << 0) * ENABLE_FEATURE_DD_IBS_OBS,
+ FLAG_SYNC = (1 << 1) * ENABLE_FEATURE_DD_IBS_OBS,
+ FLAG_NOERROR = (1 << 2) * ENABLE_FEATURE_DD_IBS_OBS,
+ FLAG_FSYNC = (1 << 3) * ENABLE_FEATURE_DD_IBS_OBS,
+ FLAG_SWAB = (1 << 4) * ENABLE_FEATURE_DD_IBS_OBS,
/* end of conv flags */
- FLAG_TWOBUFS = 1 << 4,
- FLAG_COUNT = 1 << 5,
+ FLAG_TWOBUFS = (1 << 5) * ENABLE_FEATURE_DD_IBS_OBS,
+ FLAG_COUNT = 1 << 6,
};
static const char keywords[] ALIGN1 =
"bs\0""count\0""seek\0""skip\0""if\0""of\0"
@@ -167,7 +168,7 @@ int dd_main(int argc UNUSED_PARAM, char **argv)
;
#if ENABLE_FEATURE_DD_IBS_OBS
static const char conv_words[] ALIGN1 =
- "notrunc\0""sync\0""noerror\0""fsync\0";
+ "notrunc\0""sync\0""noerror\0""fsync\0""swab\0";
#endif
enum {
OP_bs = 0,
@@ -185,11 +186,11 @@ int dd_main(int argc UNUSED_PARAM, char **argv)
OP_conv_sync,
OP_conv_noerror,
OP_conv_fsync,
+ OP_conv_swab,
/* Unimplemented conv=XXX: */
//nocreat do not create the output file
//excl fail if the output file already exists
//fdatasync physically write output file data before finishing
- //swab swap every pair of input bytes
//lcase change upper case to lower case
//ucase change lower case to upper case
//block pad newline-terminated records with spaces to cbs-size
@@ -197,22 +198,33 @@ int dd_main(int argc UNUSED_PARAM, char **argv)
//ascii from EBCDIC to ASCII
//ebcdic from ASCII to EBCDIC
//ibm from ASCII to alternate EBCDIC
+ /* Partially implemented: */
+ //swab swap every pair of input bytes: will abort on non-even reads
#endif
};
- int exitcode = EXIT_FAILURE;
- size_t ibs = 512, obs = 512;
- ssize_t n, w;
- char *ibuf, *obuf;
- /* And these are all zeroed at once! */
+ smallint exitcode = EXIT_FAILURE;
+ int i;
+ size_t ibs = 512;
+ char *ibuf;
+#if ENABLE_FEATURE_DD_IBS_OBS
+ size_t obs = 512;
+ char *obuf;
+#else
+# define obs ibs
+# define obuf ibuf
+#endif
+ /* These are all zeroed at once! */
struct {
int flags;
size_t oc;
+ ssize_t prev_read_size; /* for detecting swab failure */
off_t count;
off_t seek, skip;
const char *infile, *outfile;
} Z;
#define flags (Z.flags )
#define oc (Z.oc )
+#define prev_read_size (Z.prev_read_size)
#define count (Z.count )
#define seek (Z.seek )
#define skip (Z.skip )
@@ -223,10 +235,10 @@ int dd_main(int argc UNUSED_PARAM, char **argv)
INIT_G();
//fflush_all(); - is this needed because of NOEXEC?
- for (n = 1; argv[n]; n++) {
+ for (i = 1; argv[i]; i++) {
int what;
char *val;
- char *arg = argv[n];
+ char *arg = argv[i];
#if ENABLE_DESKTOP
/* "dd --". NB: coreutils 6.9 will complain if they see
@@ -255,6 +267,7 @@ int dd_main(int argc UNUSED_PARAM, char **argv)
}
if (what == OP_conv) {
while (1) {
+ int n;
/* find ',', replace them with NUL so we can use val for
* index_in_strings() without copying.
* We rely on val being non-null, else strchr would fault.
@@ -262,20 +275,21 @@ int dd_main(int argc UNUSED_PARAM, char **argv)
arg = strchr(val, ',');
if (arg)
*arg = '\0';
- what = index_in_strings(conv_words, val);
- if (what < 0)
+ n = index_in_strings(conv_words, val);
+ if (n < 0)
bb_error_msg_and_die(bb_msg_invalid_arg, val, "conv");
- flags |= (1 << what);
+ flags |= (1 << n);
if (!arg) /* no ',' left, so this was the last specifier */
break;
/* *arg = ','; - to preserve ps listing? */
val = arg + 1; /* skip this keyword and ',' */
}
- continue; /* we trashed 'what', can't fall through */
+ /*continue;*/
}
#endif
if (what == OP_bs) {
- ibs = obs = xatoul_range_sfx(val, 1, ((size_t)-1L)/2, dd_suffixes);
+ ibs = xatoul_range_sfx(val, 1, ((size_t)-1L)/2, dd_suffixes);
+ obs = ibs;
/*continue;*/
}
/* These can be large: */
@@ -300,14 +314,17 @@ int dd_main(int argc UNUSED_PARAM, char **argv)
outfile = val;
/*continue;*/
}
- } /* end of "for (argv[n])" */
+ } /* end of "for (argv[i])" */
//XXX:FIXME for huge ibs or obs, malloc'ing them isn't the brightest idea ever
- ibuf = obuf = xmalloc(ibs);
+ ibuf = xmalloc(ibs);
+ obuf = ibuf;
+#if ENABLE_FEATURE_DD_IBS_OBS
if (ibs != obs) {
flags |= FLAG_TWOBUFS;
obuf = xmalloc(obs);
}
+#endif
#if ENABLE_FEATURE_DD_SIGNAL_HANDLING
signal_SA_RESTART_empty_mask(SIGUSR1, dd_output_status);
@@ -316,12 +333,12 @@ int dd_main(int argc UNUSED_PARAM, char **argv)
G.begin_time_us = monotonic_us();
#endif
- if (infile != NULL)
+ if (infile) {
xmove_fd(xopen(infile, O_RDONLY), ifd);
- else {
+ } else {
infile = bb_msg_standard_input;
}
- if (outfile != NULL) {
+ if (outfile) {
int oflag = O_WRONLY | O_CREAT;
if (!seek && !(flags & FLAG_NOTRUNC))
@@ -346,13 +363,13 @@ int dd_main(int argc UNUSED_PARAM, char **argv)
}
if (skip) {
if (lseek(ifd, skip * ibs, SEEK_CUR) < 0) {
- while (skip-- > 0) {
- n = safe_read(ifd, ibuf, ibs);
+ do {
+ ssize_t n = safe_read(ifd, ibuf, ibs);
if (n < 0)
goto die_infile;
if (n == 0)
break;
- }
+ } while (--skip != 0);
}
}
if (seek) {
@@ -361,6 +378,8 @@ int dd_main(int argc UNUSED_PARAM, char **argv)
}
while (!(flags & FLAG_COUNT) || (G.in_full + G.in_part != count)) {
+ ssize_t n;
+
n = safe_read(ifd, ibuf, ibs);
if (n == 0)
break;
@@ -375,6 +394,27 @@ int dd_main(int argc UNUSED_PARAM, char **argv)
* conv=noerror just ignores input bad blocks */
n = 0;
}
+ if (flags & FLAG_SWAB) {
+ uint16_t *p16;
+ ssize_t n2;
+
+ /* Our code allows only last read to be odd-sized */
+ if (prev_read_size & 1)
+ bb_error_msg_and_die("can't swab %lu byte buffer",
+ (unsigned long)prev_read_size);
+ prev_read_size = n;
+
+ /* If n is odd, last byte is not swapped:
+ * echo -n "qwe" | dd conv=swab
+ * prints "wqe".
+ */
+ p16 = (void*) ibuf;
+ n2 = (n >> 1);
+ while (--n2 >= 0) {
+ *p16 = bswap_16(*p16);
+ p16++;
+ }
+ }
if ((size_t)n == ibs)
G.in_full++;
else {
@@ -401,8 +441,10 @@ int dd_main(int argc UNUSED_PARAM, char **argv)
oc = 0;
}
}
- } else if (write_and_stats(ibuf, n, obs, outfile))
- goto out_status;
+ } else {
+ if (write_and_stats(ibuf, n, obs, outfile))
+ goto out_status;
+ }
if (flags & FLAG_FSYNC) {
if (fsync(ofd) < 0)
@@ -411,9 +453,8 @@ int dd_main(int argc UNUSED_PARAM, char **argv)
}
if (ENABLE_FEATURE_DD_IBS_OBS && oc) {
- w = full_write_or_warn(obuf, oc, outfile);
- if (w < 0) goto out_status;
- if (w > 0) G.out_part++;
+ if (write_and_stats(obuf, oc, obs, outfile))
+ goto out_status;
}
if (close(ifd) < 0) {
die_infile:
diff --git a/coreutils/expand.c b/coreutils/expand.c
index ac5ad5b..9a83fad 100644
--- a/coreutils/expand.c
+++ b/coreutils/expand.c
@@ -78,11 +78,7 @@ static void expand(FILE *file, unsigned tab_size, unsigned opt)
unsigned len;
*ptr = '\0';
# if ENABLE_UNICODE_SUPPORT
- {
- uni_stat_t uni_stat;
- printable_string(&uni_stat, ptr_strbeg);
- len = uni_stat.unicode_width;
- }
+ len = unicode_strwidth(ptr_strbeg);
# else
len = ptr - ptr_strbeg;
# endif
@@ -138,12 +134,9 @@ static void unexpand(FILE *file, unsigned tab_size, unsigned opt)
printf("%*s%.*s", len, "", n, ptr);
# if ENABLE_UNICODE_SUPPORT
{
- char c;
- uni_stat_t uni_stat;
- c = ptr[n];
+ char c = ptr[n];
ptr[n] = '\0';
- printable_string(&uni_stat, ptr);
- len = uni_stat.unicode_width;
+ len = unicode_strwidth(ptr);
ptr[n] = c;
}
# else
diff --git a/coreutils/head.c b/coreutils/head.c
index ec45127..9388b02 100644
--- a/coreutils/head.c
+++ b/coreutils/head.c
@@ -11,6 +11,8 @@
/* BB_AUDIT GNU compatible -c, -q, and -v options in 'fancy' configuration. */
/* http://www.opengroup.org/onlinepubs/007904975/utilities/head.html */
+//kbuild:lib-$(CONFIG_HEAD) += head.o
+
//usage:#define head_trivial_usage
//usage: "[OPTIONS] [FILE]..."
//usage:#define head_full_usage "\n\n"
@@ -18,7 +20,8 @@
//usage: "With more than one FILE, precede each with a filename header.\n"
//usage: "\n -n N[kbm] Print first N lines"
//usage: IF_FEATURE_FANCY_HEAD(
-//usage: "\n -c N[kbm] Print first N bytes"
+//usage: "\n -n -N[kbm] Print all except N last lines"
+//usage: "\n -c [-]N[kbm] Print first N bytes"
//usage: "\n -q Never print headers"
//usage: "\n -v Always print headers"
//usage: )
@@ -34,6 +37,110 @@
/* This is a NOEXEC applet. Be very careful! */
+#if !ENABLE_FEATURE_FANCY_HEAD
+# define print_first_N(fp,count,bytes) print_first_N(fp,count)
+#endif
+static void
+print_first_N(FILE *fp, unsigned long count, bool count_bytes)
+{
+#if !ENABLE_FEATURE_FANCY_HEAD
+ const int count_bytes = 0;
+#endif
+ while (count) {
+ int c = getc(fp);
+ if (c == EOF)
+ break;
+ if (count_bytes || (c == '\n'))
+ --count;
+ putchar(c);
+ }
+}
+
+#if ENABLE_FEATURE_FANCY_HEAD
+static void
+print_except_N_last_bytes(FILE *fp, unsigned count)
+{
+ unsigned char *circle = xmalloc(++count);
+ unsigned head = 0;
+ for(;;) {
+ int c;
+ c = getc(fp);
+ if (c == EOF)
+ goto ret;
+ circle[head++] = c;
+ if (head == count)
+ break;
+ }
+ for (;;) {
+ int c;
+ if (head == count)
+ head = 0;
+ putchar(circle[head]);
+ c = getc(fp);
+ if (c == EOF)
+ goto ret;
+ circle[head] = c;
+ head++;
+ }
+ ret:
+ free(circle);
+}
+
+static void
+print_except_N_last_lines(FILE *fp, unsigned count)
+{
+ char **circle = xzalloc((++count) * sizeof(circle[0]));
+ unsigned head = 0;
+ for(;;) {
+ char *c;
+ c = xmalloc_fgets(fp);
+ if (!c)
+ goto ret;
+ circle[head++] = c;
+ if (head == count)
+ break;
+ }
+ for (;;) {
+ char *c;
+ if (head == count)
+ head = 0;
+ fputs(circle[head], stdout);
+ c = xmalloc_fgets(fp);
+ if (!c)
+ goto ret;
+ free(circle[head]);
+ circle[head++] = c;
+ }
+ ret:
+ head = 0;
+ for(;;) {
+ free(circle[head++]);
+ if (head == count)
+ break;
+ }
+ free(circle);
+}
+#else
+/* Must never be called */
+void print_except_N_last_bytes(FILE *fp, unsigned count);
+void print_except_N_last_lines(FILE *fp, unsigned count);
+#endif
+
+#if !ENABLE_FEATURE_FANCY_HEAD
+# define eat_num(negative_N,p) eat_num(p)
+#endif
+static unsigned long
+eat_num(bool *negative_N, const char *p)
+{
+#if ENABLE_FEATURE_FANCY_HEAD
+ if (*p == '-') {
+ *negative_N = 1;
+ p++;
+ }
+#endif
+ return xatoul_sfx(p, bkm_suffixes);
+}
+
static const char head_opts[] ALIGN1 =
"n:"
#if ENABLE_FEATURE_FANCY_HEAD
@@ -41,29 +148,25 @@ static const char head_opts[] ALIGN1 =
#endif
;
-static const struct suffix_mult head_suffixes[] = {
- { "b", 512 },
- { "k", 1024 },
- { "m", 1024*1024 },
- { "", 0 }
-};
-
#define header_fmt_str "\n==> %s <==\n"
int head_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE;
int head_main(int argc, char **argv)
{
unsigned long count = 10;
- unsigned long i;
#if ENABLE_FEATURE_FANCY_HEAD
- int count_bytes = 0;
int header_threshhold = 1;
+ bool count_bytes = 0;
+ bool negative_N = 0;
+#else
+# define header_threshhold 1
+# define count_bytes 0
+# define negative_N 0
#endif
FILE *fp;
const char *fmt;
char *p;
int opt;
- int c;
int retval = EXIT_SUCCESS;
#if ENABLE_INCLUDE_SUSv2 || ENABLE_FEATURE_FANCY_HEAD
@@ -73,7 +176,7 @@ int head_main(int argc, char **argv)
) {
--argc;
++argv;
- p = (*argv) + 1;
+ p = argv[0] + 1;
goto GET_COUNT;
}
#endif
@@ -97,7 +200,7 @@ int head_main(int argc, char **argv)
#if ENABLE_INCLUDE_SUSv2 || ENABLE_FEATURE_FANCY_HEAD
GET_COUNT:
#endif
- count = xatoul_sfx(p, head_suffixes);
+ count = eat_num(&negative_N, p);
break;
default:
bb_show_usage();
@@ -110,19 +213,17 @@ int head_main(int argc, char **argv)
*--argv = (char*)"-";
fmt = header_fmt_str + 1;
-#if ENABLE_FEATURE_FANCY_HEAD
if (argc <= header_threshhold) {
+#if ENABLE_FEATURE_FANCY_HEAD
header_threshhold = 0;
- }
#else
- if (argc <= 1) {
fmt += 11; /* "" */
- }
- /* Now define some things here to avoid #ifdefs in the code below.
- * These should optimize out of the if conditions below. */
-#define header_threshhold 1
-#define count_bytes 0
#endif
+ }
+ if (negative_N) {
+ if (count >= INT_MAX / sizeof(char*))
+ bb_error_msg("count is too big: %lu", count);
+ }
do {
fp = fopen_or_warn_stdin(*argv);
@@ -133,18 +234,20 @@ int head_main(int argc, char **argv)
if (header_threshhold) {
printf(fmt, *argv);
}
- i = count;
- while (i && ((c = getc(fp)) != EOF)) {
- if (count_bytes || (c == '\n')) {
- --i;
+ if (negative_N) {
+ if (count_bytes) {
+ print_except_N_last_bytes(fp, count);
+ } else {
+ print_except_N_last_lines(fp, count);
}
- putchar(c);
+ } else {
+ print_first_N(fp, count, count_bytes);
}
+ die_if_ferror_stdout();
if (fclose_if_not_stdin(fp)) {
bb_simple_perror_msg(*argv);
retval = EXIT_FAILURE;
}
- die_if_ferror_stdout();
} else {
retval = EXIT_FAILURE;
}
diff --git a/coreutils/hostid.c b/coreutils/hostid.c
index 5c1a4e0..e5b1f51 100644
--- a/coreutils/hostid.c
+++ b/coreutils/hostid.c
@@ -36,7 +36,8 @@ int hostid_main(int argc UNUSED_PARAM, char **argv UNUSED_PARAM)
bb_show_usage();
}
- printf("%08lx\n", gethostid());
+ /* POSIX says gethostid returns a "32-bit identifier" */
+ printf("%08x\n", (unsigned)(uint32_t)gethostid());
return fflush_all();
}
diff --git a/coreutils/id.c b/coreutils/id.c
index 1f20b75..1f3e1c4 100644
--- a/coreutils/id.c
+++ b/coreutils/id.c
@@ -64,12 +64,10 @@
/* This is a NOEXEC applet. Be very careful! */
#if !ENABLE_USE_BB_PWD_GRP
-#if defined(__UCLIBC_MAJOR__) && (__UCLIBC_MAJOR__ == 0)
-#if (__UCLIBC_MINOR__ < 9) || (__UCLIBC_MINOR__ == 9 && __UCLIBC_SUBLEVEL__ < 30)
+#if defined(__UCLIBC__) && UCLIBC_VERSION < KERNEL_VERSION(0, 9, 30)
#error "Sorry, you need at least uClibc version 0.9.30 for id applet to build"
#endif
#endif
-#endif
enum {
PRINT_REAL = (1 << 0),
diff --git a/coreutils/md5_sha1_sum.c b/coreutils/md5_sha1_sum.c
index 92a4d44..1a5342e 100644
--- a/coreutils/md5_sha1_sum.c
+++ b/coreutils/md5_sha1_sum.c
@@ -151,7 +151,9 @@ static uint8_t *hash_file(const char *filename)
update(&context, in_buf, count);
}
hash_value = NULL;
- if (count == 0) {
+ if (count < 0)
+ bb_perror_msg("can't read '%s'", filename);
+ else /* count == 0 */ {
final(&context, in_buf);
hash_value = hash_bin_to_hex(in_buf, hash_len);
}
diff --git a/coreutils/od_bloaty.c b/coreutils/od_bloaty.c
index a632489..6b00a43 100644
--- a/coreutils/od_bloaty.c
+++ b/coreutils/od_bloaty.c
@@ -1166,12 +1166,6 @@ parse_old_offset(const char *s, off_t *offset)
int od_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE;
int od_main(int argc UNUSED_PARAM, char **argv)
{
- static const struct suffix_mult bkm[] = {
- { "b", 512 },
- { "k", 1024 },
- { "m", 1024*1024 },
- { "", 0 }
- };
#if ENABLE_LONG_OPTS
static const char od_longopts[] ALIGN1 =
"skip-bytes\0" Required_argument "j"
@@ -1230,7 +1224,7 @@ int od_main(int argc UNUSED_PARAM, char **argv)
address_pad_len_char = doxn_address_pad_len_char[pos];
}
if (opt & OPT_N) {
- max_bytes_to_format = xstrtooff_sfx(str_N, 0, bkm);
+ max_bytes_to_format = xstrtooff_sfx(str_N, 0, bkm_suffixes);
}
if (opt & OPT_a) decode_format_string("a");
if (opt & OPT_b) decode_format_string("oC");
@@ -1239,7 +1233,7 @@ int od_main(int argc UNUSED_PARAM, char **argv)
if (opt & OPT_f) decode_format_string("fF");
if (opt & OPT_h) decode_format_string("x2");
if (opt & OPT_i) decode_format_string("d2");
- if (opt & OPT_j) n_bytes_to_skip = xstrtooff_sfx(str_j, 0, bkm);
+ if (opt & OPT_j) n_bytes_to_skip = xstrtooff_sfx(str_j, 0, bkm_suffixes);
if (opt & OPT_l) decode_format_string("d4");
if (opt & OPT_o) decode_format_string("o2");
while (lst_t) {
@@ -1248,7 +1242,7 @@ int od_main(int argc UNUSED_PARAM, char **argv)
if (opt & OPT_x) decode_format_string("x2");
if (opt & OPT_s) decode_format_string("d2");
if (opt & OPT_S) {
- string_min = xstrtou_sfx(str_S, 0, bkm);
+ string_min = xstrtou_sfx(str_S, 0, bkm_suffixes);
}
// Bloat:
diff --git a/coreutils/readlink.c b/coreutils/readlink.c
index f7ad791..d73ef4d 100644
--- a/coreutils/readlink.c
+++ b/coreutils/readlink.c
@@ -39,7 +39,10 @@
* -q, --quiet, -s, --silent suppress most error messages
* -v, --verbose report error messages
*
- * bbox supports: -f -n -v (fully), -q -s (accepts but ignores)
+ * bbox supports: -f (partially) -n -v (fully), -q -s (accepts but ignores)
+ * Note: we export the -f flag, but our -f behaves like coreutils' -e.
+ * Unfortunately, there isn't a C lib function we can leverage to get this
+ * behavior which means we'd have to implement the full stack ourselves :(.
*/
int readlink_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE;
diff --git a/coreutils/split.c b/coreutils/split.c
index 11e6404..1e1673e 100644
--- a/coreutils/split.c
+++ b/coreutils/split.c
@@ -23,17 +23,15 @@
#include "libbb.h"
-static const struct suffix_mult split_suffices[] = {
#if ENABLE_FEATURE_SPLIT_FANCY
+static const struct suffix_mult split_suffixes[] = {
{ "b", 512 },
-#endif
{ "k", 1024 },
{ "m", 1024*1024 },
-#if ENABLE_FEATURE_SPLIT_FANCY
{ "g", 1024*1024*1024 },
-#endif
{ "", 0 }
};
+#endif
/* Increment the suffix part of the filename.
* Returns NULL if we are out of filenames.
@@ -86,7 +84,10 @@ int split_main(int argc UNUSED_PARAM, char **argv)
if (opt & SPLIT_OPT_l)
cnt = XATOOFF(count_p);
if (opt & SPLIT_OPT_b) // FIXME: also needs XATOOFF
- cnt = xatoull_sfx(count_p, split_suffices);
+ cnt = xatoull_sfx(count_p,
+ IF_FEATURE_SPLIT_FANCY(split_suffixes)
+ IF_NOT_FEATURE_SPLIT_FANCY(km_suffixes)
+ );
sfx = "x";
argv += optind;
diff --git a/coreutils/stat.c b/coreutils/stat.c
index c8677eb..769fac0 100644
--- a/coreutils/stat.c
+++ b/coreutils/stat.c
@@ -127,7 +127,7 @@ static const char *human_time(time_t t)
/*static char buf[sizeof("YYYY-MM-DD HH:MM:SS.000000000")] ALIGN1;*/
#define buf bb_common_bufsiz1
- strftime(buf, sizeof(buf), "%Y-%m-%d %H:%M:%S.000000000", localtime(&t));
+ strcpy(strftime_YYYYMMDDHHMMSS(buf, sizeof(buf), &t), ".000000000");
return buf;
#undef buf
}
@@ -655,7 +655,7 @@ static bool do_stat(const char *filename, const char *format)
);
# if ENABLE_SELINUX
if (option_mask32 & OPT_SELINUX)
- printf(" %lc\n", *scontext);
+ printf(" %s\n", scontext);
else
bb_putchar('\n');
# endif
@@ -700,7 +700,8 @@ static bool do_stat(const char *filename, const char *format)
(unsigned long) statbuf.st_gid,
(gw_ent != NULL) ? gw_ent->gr_name : "UNKNOWN");
# if ENABLE_SELINUX
- printf(" S_Context: %lc\n", *scontext);
+ if (option_mask32 & OPT_SELINUX)
+ printf(" S_Context: %s\n", scontext);
# endif
printf("Access: %s\n", human_time(statbuf.st_atime));
printf("Modify: %s\n", human_time(statbuf.st_mtime));
diff --git a/coreutils/stty.c b/coreutils/stty.c
index 96754dd..378a848 100644
--- a/coreutils/stty.c
+++ b/coreutils/stty.c
@@ -246,10 +246,21 @@ enum speed_setting {
/* Which member(s) of 'struct termios' a mode uses */
enum {
- /* Do NOT change the order or values, as mode_type_flag()
- * depends on them */
control, input, output, local, combination
};
+static tcflag_t *get_ptr_to_tcflag(unsigned type, const struct termios *mode)
+{
+ static const uint8_t tcflag_offsets[] ALIGN1 = {
+ offsetof(struct termios, c_cflag), /* control */
+ offsetof(struct termios, c_iflag), /* input */
+ offsetof(struct termios, c_oflag), /* output */
+ offsetof(struct termios, c_lflag) /* local */
+ };
+ if (type <= local) {
+ return (tcflag_t*) (((char*)mode) + tcflag_offsets[type]);
+ }
+ return NULL;
+}
/* Flags for 'struct mode_info' */
#define SANE_SET 1 /* Set in 'sane' mode */
@@ -770,51 +781,6 @@ struct globals {
G.max_col = 80; \
} while (0)
-
-/* Return a string that is the printable representation of character CH */
-/* Adapted from 'cat' by Torbjorn Granlund */
-static const char *visible(unsigned ch)
-{
- char *bpout = G.buf;
-
- if (ch == _POSIX_VDISABLE)
- return "<undef>";
-
- if (ch >= 128) {
- ch -= 128;
- *bpout++ = 'M';
- *bpout++ = '-';
- }
-
- if (ch < 32) {
- *bpout++ = '^';
- *bpout++ = ch + 64;
- } else if (ch < 127) {
- *bpout++ = ch;
- } else {
- *bpout++ = '^';
- *bpout++ = '?';
- }
-
- *bpout = '\0';
- return G.buf;
-}
-
-static tcflag_t *mode_type_flag(unsigned type, const struct termios *mode)
-{
- static const uint8_t tcflag_offsets[] ALIGN1 = {
- offsetof(struct termios, c_cflag), /* control */
- offsetof(struct termios, c_iflag), /* input */
- offsetof(struct termios, c_oflag), /* output */
- offsetof(struct termios, c_lflag) /* local */
- };
-
- if (type <= local) {
- return (tcflag_t*) (((char*)mode) + tcflag_offsets[type]);
- }
- return NULL;
-}
-
static void set_speed_or_die(enum speed_setting type, const char *arg,
struct termios *mode)
{
@@ -1042,6 +1008,7 @@ static void do_display(const struct termios *mode, int all)
#endif
for (i = 0; i != CIDX_min; ++i) {
+ char ch;
/* If swtch is the same as susp, don't print both */
#if VSWTCH == VSUSP
if (i == CIDX_swtch)
@@ -1055,8 +1022,12 @@ static void do_display(const struct termios *mode, int all)
continue;
}
#endif
- wrapf("%s = %s;", nth_string(control_name, i),
- visible(mode->c_cc[control_info[i].offset]));
+ ch = mode->c_cc[control_info[i].offset];
+ if (ch == _POSIX_VDISABLE)
+ strcpy(G.buf, "<undef>");
+ else
+ visible(ch, G.buf, 0);
+ wrapf("%s = %s;", nth_string(control_name, i), G.buf);
}
#if VEOF == VMIN
if ((mode->c_lflag & ICANON) == 0)
@@ -1072,7 +1043,7 @@ static void do_display(const struct termios *mode, int all)
prev_type = mode_info[i].type;
}
- bitsp = mode_type_flag(mode_info[i].type, mode);
+ bitsp = get_ptr_to_tcflag(mode_info[i].type, mode);
mask = mode_info[i].mask ? mode_info[i].mask : mode_info[i].bits;
if ((*bitsp & mask) == mode_info[i].bits) {
if (all || (mode_info[i].flags & SANE_UNSET))
@@ -1091,7 +1062,6 @@ static void do_display(const struct termios *mode, int all)
static void sane_mode(struct termios *mode)
{
int i;
- tcflag_t *bitsp;
for (i = 0; i < NUM_control_info; ++i) {
#if VMIN == VEOF
@@ -1102,14 +1072,17 @@ static void sane_mode(struct termios *mode)
}
for (i = 0; i < NUM_mode_info; ++i) {
+ tcflag_t val;
+ tcflag_t *bitsp = get_ptr_to_tcflag(mode_info[i].type, mode);
+
+ if (!bitsp)
+ continue;
+ val = *bitsp & ~((unsigned long)mode_info[i].mask);
if (mode_info[i].flags & SANE_SET) {
- bitsp = mode_type_flag(mode_info[i].type, mode);
- *bitsp = (*bitsp & ~((unsigned long)mode_info[i].mask))
- | mode_info[i].bits;
- } else if (mode_info[i].flags & SANE_UNSET) {
- bitsp = mode_type_flag(mode_info[i].type, mode);
- *bitsp = *bitsp & ~((unsigned long)mode_info[i].mask)
- & ~mode_info[i].bits;
+ *bitsp = val | mode_info[i].bits;
+ } else
+ if (mode_info[i].flags & SANE_UNSET) {
+ *bitsp = val & ~mode_info[i].bits;
}
}
}
@@ -1119,17 +1092,18 @@ static void set_mode(const struct mode_info *info, int reversed,
{
tcflag_t *bitsp;
- bitsp = mode_type_flag(info->type, mode);
+ bitsp = get_ptr_to_tcflag(info->type, mode);
if (bitsp) {
+ tcflag_t val = *bitsp & ~info->mask;
if (reversed)
- *bitsp = *bitsp & ~info->mask & ~info->bits;
+ *bitsp = val & ~info->bits;
else
- *bitsp = (*bitsp & ~info->mask) | info->bits;
+ *bitsp = val | info->bits;
return;
}
- /* Combination mode */
+ /* !bitsp - it's a "combination" mode */
if (info == &mode_info[IDX_evenp] || info == &mode_info[IDX_parity]) {
if (reversed)
mode->c_cflag = (mode->c_cflag & ~PARENB & ~CSIZE) | CS8;
@@ -1534,7 +1508,12 @@ int stty_main(int argc UNUSED_PARAM, char **argv)
perror_on_device_and_die("%s");
if (memcmp(&mode, &new_mode, sizeof(mode)) != 0) {
-#if CIBAUD
+/*
+ * I think the below chunk is not necessary on Linux.
+ * If you are deleting it, also delete STTY_speed_was_set bit -
+ * it is only ever checked here.
+ */
+#if 0 /* was "if CIBAUD" */
/* SunOS 4.1.3 (at least) has the problem that after this sequence,
tcgetattr (&m1); tcsetattr (&m1); tcgetattr (&m2);
sometimes (m1 != m2). The only difference is in the four bits
diff --git a/coreutils/sum.c b/coreutils/sum.c
index 75f6ef6..deb068e 100644
--- a/coreutils/sum.c
+++ b/coreutils/sum.c
@@ -70,9 +70,9 @@ static unsigned sum_file(const char *file, unsigned type)
if (type >= SUM_SYSV) {
r = (s & 0xffff) + ((s & 0xffffffff) >> 16);
s = (r & 0xffff) + (r >> 16);
- printf("%d %llu %s\n", s, (total_bytes + 511) / 512, file);
+ printf("%u %llu %s\n", s, (total_bytes + 511) / 512, file);
} else
- printf("%05d %5llu %s\n", s, (total_bytes + 1023) / 1024, file);
+ printf("%05u %5llu %s\n", s, (total_bytes + 1023) / 1024, file);
return 1;
#undef buf
}
diff --git a/coreutils/tail.c b/coreutils/tail.c
index 96fd011..0e12443 100644
--- a/coreutils/tail.c
+++ b/coreutils/tail.c
@@ -24,6 +24,8 @@
* 7) lseek attempted when count==0 even if arg was +0 (from top)
*/
+//kbuild:lib-$(CONFIG_TAIL) += tail.o
+
//usage:#define tail_trivial_usage
//usage: "[OPTIONS] [FILE]..."
//usage:#define tail_full_usage "\n\n"
@@ -34,14 +36,13 @@
//usage: "\n -s SECONDS Wait SECONDS between reads with -f"
//usage: )
//usage: "\n -n N[kbm] Print last N lines"
+//usage: "\n -n +N[kbm] Start on Nth line and print the rest"
//usage: IF_FEATURE_FANCY_TAIL(
-//usage: "\n -c N[kbm] Print last N bytes"
+//usage: "\n -c [+]N[kbm] Print last N bytes"
//usage: "\n -q Never print headers"
//usage: "\n -v Always print headers"
//usage: "\n"
//usage: "\nN may be suffixed by k (x1024), b (x512), or m (x1024^2)."
-//usage: "\nIf N starts with a '+', output begins with the Nth item from the start"
-//usage: "\nof each file, not from the end."
//usage: )
//usage:
//usage:#define tail_example_usage
@@ -50,13 +51,6 @@
#include "libbb.h"
-static const struct suffix_mult tail_suffixes[] = {
- { "b", 512 },
- { "k", 1024 },
- { "m", 1024*1024 },
- { "", 0 }
-};
-
struct globals {
bool from_top;
bool exitcode;
@@ -73,15 +67,6 @@ static void tail_xprint_header(const char *fmt, const char *filename)
static ssize_t tail_read(int fd, char *buf, size_t count)
{
ssize_t r;
- off_t current;
- struct stat sbuf;
-
- /* /proc files report zero st_size, don't lseek them. */
- if (fstat(fd, &sbuf) == 0 && sbuf.st_size > 0) {
- current = lseek(fd, 0, SEEK_CUR);
- if (sbuf.st_size < current)
- xlseek(fd, 0, SEEK_SET);
- }
r = full_read(fd, buf, count);
if (r < 0) {
@@ -102,7 +87,7 @@ static unsigned eat_num(const char *p)
p++;
G.from_top = 1;
}
- return xatou_sfx(p, tail_suffixes);
+ return xatou_sfx(p, bkm_suffixes);
}
int tail_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE;
@@ -120,6 +105,7 @@ int tail_main(int argc, char **argv)
int *fds;
const char *fmt;
+ int prev_fd;
INIT_G();
@@ -324,6 +310,7 @@ int tail_main(int argc, char **argv)
xwrite(STDOUT_FILENO, tailbuf, taillen);
}
} while (++i < nfiles);
+ prev_fd = fds[i-1];
tailbuf = xrealloc(tailbuf, BUFSIZ);
@@ -367,10 +354,23 @@ int tail_main(int argc, char **argv)
if (nfiles > header_threshhold) {
fmt = header_fmt_str;
}
- while ((nread = tail_read(fd, tailbuf, BUFSIZ)) > 0) {
- if (fmt) {
+ for (;;) {
+ /* tail -f keeps following files even if they are truncated */
+ struct stat sbuf;
+ /* /proc files report zero st_size, don't lseek them */
+ if (fstat(fd, &sbuf) == 0 && sbuf.st_size > 0) {
+ off_t current = lseek(fd, 0, SEEK_CUR);
+ if (sbuf.st_size < current)
+ xlseek(fd, 0, SEEK_SET);
+ }
+
+ nread = tail_read(fd, tailbuf, BUFSIZ);
+ if (nread <= 0)
+ break;
+ if (fmt && (fd != prev_fd)) {
tail_xprint_header(fmt, filename);
fmt = NULL;
+ prev_fd = fd;
}
xwrite(STDOUT_FILENO, tailbuf, nread);
}
diff --git a/coreutils/touch.c b/coreutils/touch.c
index 1216ca2..293a968 100644
--- a/coreutils/touch.c
+++ b/coreutils/touch.c
@@ -26,6 +26,14 @@
//config: touch is used to create or change the access and/or
//config: modification timestamp of specified files.
//config:
+//config:config FEATURE_TOUCH_NODEREF
+//config: bool "Add support for -h"
+//config: default y
+//config: depends on TOUCH
+//config: help
+//config: Enable touch to have the -h option.
+//config: This requires libc support for lutimes() function.
+//config:
//config:config FEATURE_TOUCH_SUSV3
//config: bool "Add support for SUSV3 features (-d -t -r)"
//config: default y
@@ -42,6 +50,9 @@
//usage:#define touch_full_usage "\n\n"
//usage: "Update the last-modified date on the given FILE[s]\n"
//usage: "\n -c Don't create files"
+//usage: IF_FEATURE_TOUCH_NODEREF(
+//usage: "\n -h Don't follow links"
+//usage: )
//usage: IF_FEATURE_TOUCH_SUSV3(
//usage: "\n -d DT Date/time to use"
//usage: "\n -t DT Date/time to use"
@@ -65,6 +76,7 @@
* parse STRING and use it instead of current time
* -f (ignored, BSD compat)
* -m change only the modification time
+ * -h, --no-dereference
* -r, --reference=FILE
* use this file's times instead of current time
* -t STAMP
@@ -79,6 +91,13 @@ int touch_main(int argc UNUSED_PARAM, char **argv)
int fd;
int status = EXIT_SUCCESS;
int opts;
+ enum {
+ OPT_c = (1 << 0),
+ OPT_r = (1 << 1) * ENABLE_FEATURE_TOUCH_SUSV3,
+ OPT_d = (1 << 2) * ENABLE_FEATURE_TOUCH_SUSV3,
+ OPT_t = (1 << 3) * ENABLE_FEATURE_TOUCH_SUSV3,
+ OPT_h = (1 << 4) * ENABLE_FEATURE_TOUCH_NODEREF,
+ };
#if ENABLE_FEATURE_TOUCH_SUSV3
# if ENABLE_LONG_OPTS
static const char touch_longopts[] ALIGN1 =
@@ -86,6 +105,7 @@ int touch_main(int argc UNUSED_PARAM, char **argv)
"no-create\0" No_argument "c"
"reference\0" Required_argument "r"
"date\0" Required_argument "d"
+ IF_FEATURE_TOUCH_NODEREF("no-dereference\0" No_argument "h")
;
# endif
char *reference_file = NULL;
@@ -105,13 +125,13 @@ int touch_main(int argc UNUSED_PARAM, char **argv)
* accepted data format differs a bit between -d and -t.
* We accept the same formats for both */
opts = getopt32(argv, "c" IF_FEATURE_TOUCH_SUSV3("r:d:t:")
+ IF_FEATURE_TOUCH_NODEREF("h")
/*ignored:*/ "fma"
IF_FEATURE_TOUCH_SUSV3(, &reference_file)
IF_FEATURE_TOUCH_SUSV3(, &date_str)
IF_FEATURE_TOUCH_SUSV3(, &date_str)
);
- opts &= 1; /* only -c bit is left */
argv += optind;
if (!*argv) {
bb_show_usage();
@@ -121,6 +141,10 @@ int touch_main(int argc UNUSED_PARAM, char **argv)
struct stat stbuf;
xstat(reference_file, &stbuf);
timebuf[1].tv_sec = timebuf[0].tv_sec = stbuf.st_mtime;
+ /* Can use .st_mtim.tv_nsec
+ * (or is it .st_mtimensec?? see date.c)
+ * to set microseconds too.
+ */
}
if (date_str) {
@@ -141,9 +165,16 @@ int touch_main(int argc UNUSED_PARAM, char **argv)
}
do {
- if (utimes(*argv, (reference_file || date_str) ? timebuf : NULL) != 0) {
- if (errno == ENOENT) { /* no such file */
- if (opts) { /* creation is disabled, so ignore */
+ int result;
+ result = (
+#if ENABLE_FEATURE_TOUCH_NODEREF
+ (opts & OPT_h) ? lutimes :
+#endif
+ utimes)(*argv, (reference_file || date_str) ? timebuf : NULL);
+ if (result != 0) {
+ if (errno == ENOENT) { /* no such file? */
+ if (opts & OPT_c) {
+ /* Creation is disabled, so ignore */
continue;
}
/* Try to create the file */
diff --git a/debianutils/mktemp.c b/debianutils/mktemp.c
index 4c6835f..0bbdef0 100755
--- a/debianutils/mktemp.c
+++ b/debianutils/mktemp.c
@@ -43,7 +43,7 @@
//usage: "\n -p DIR Use DIR as a base directory (implies -t)"
//usage: "\n -u Do not create anything; print a name"
//usage: "\n"
-//usage: "\nBase directory is: -p DIR, else $TMPDIR, else /tmp"
+//usage: "\nBase directory is: -p DIR, else $TMPDIR, else /data/local/tmp"
//usage:
//usage:#define mktemp_example_usage
//usage: "$ mktemp /tmp/temp.XXXXXX\n"
@@ -53,6 +53,10 @@
#include "libbb.h"
+#ifdef __BIONIC__
+#define mktemp(s) bb_mktemp(s)
+#endif
+
int mktemp_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE;
int mktemp_main(int argc UNUSED_PARAM, char **argv)
{
@@ -69,7 +73,7 @@ int mktemp_main(int argc UNUSED_PARAM, char **argv)
path = getenv("TMPDIR");
if (!path || path[0] == '\0')
- path = "/tmp";
+ path = "/data/local/tmp";
opt_complementary = "?1"; /* 1 argument max */
opts = getopt32(argv, "dqtp:u", &path);
diff --git a/debianutils/run_parts.c b/debianutils/run_parts.c
index 005b304..527fae2 100644
--- a/debianutils/run_parts.c
+++ b/debianutils/run_parts.c
@@ -21,24 +21,24 @@
* taken from debian-utils. I've only removed the long options and the
* report mode. As the original run-parts support only long options, I've
* broken compatibility because the BusyBox policy doesn't allow them.
- * The supported options are:
- * -t test. Print the name of the files to be executed, without
- * execute them.
- * -a ARG argument. Pass ARG as an argument the program executed. It can
- * be repeated to pass multiple arguments.
- * -u MASK umask. Set the umask of the program executed to MASK.
*/
//usage:#define run_parts_trivial_usage
-//usage: "[-t"IF_FEATURE_RUN_PARTS_FANCY("l")"] [-a ARG]... [-u MASK] DIRECTORY"
+//usage: "[-a ARG]... [-u UMASK] "
+//usage: IF_FEATURE_RUN_PARTS_LONG_OPTIONS("[--reverse] [--test] [--exit-on-error] "IF_FEATURE_RUN_PARTS_FANCY("[--list] "))
+//usage: "DIRECTORY"
//usage:#define run_parts_full_usage "\n\n"
//usage: "Run a bunch of scripts in DIRECTORY\n"
-//usage: "\n -t Dry run"
+//usage: "\n -a ARG Pass ARG as argument to scripts"
+//usage: "\n -u UMASK Set UMASK before running scripts"
+//usage: IF_FEATURE_RUN_PARTS_LONG_OPTIONS(
+//usage: "\n --reverse Reverse execution order"
+//usage: "\n --test Dry run"
+//usage: "\n --exit-on-error Exit if a script exits with non-zero"
//usage: IF_FEATURE_RUN_PARTS_FANCY(
-//usage: "\n -l Print names of matching files even if they are not executable"
+//usage: "\n --list Print names of matching files even if they are not executable"
+//usage: )
//usage: )
-//usage: "\n -a ARG Pass ARG as argument to programs"
-//usage: "\n -u MASK Set umask to MASK before running programs"
//usage:
//usage:#define run_parts_example_usage
//usage: "$ run-parts -a start /etc/init.d\n"
@@ -59,7 +59,7 @@
struct globals {
char **names;
int cur;
- char *cmd[1];
+ char *cmd[2 /* using 1 provokes compiler warning */];
} FIX_ALIASING;
#define G (*(struct globals*)&bb_common_bufsiz1)
#define names (G.names)
@@ -70,19 +70,15 @@ struct globals {
enum { NUM_CMD = (COMMON_BUFSIZE - sizeof(G)) / sizeof(cmd[0]) - 1 };
enum {
- OPT_r = (1 << 0),
- OPT_a = (1 << 1),
- OPT_u = (1 << 2),
- OPT_t = (1 << 3),
- OPT_l = (1 << 4) * ENABLE_FEATURE_RUN_PARTS_FANCY,
+ OPT_a = (1 << 0),
+ OPT_u = (1 << 1),
+ OPT_r = (1 << 2) * ENABLE_FEATURE_RUN_PARTS_LONG_OPTIONS,
+ OPT_t = (1 << 3) * ENABLE_FEATURE_RUN_PARTS_LONG_OPTIONS,
+ OPT_e = (1 << 4) * ENABLE_FEATURE_RUN_PARTS_LONG_OPTIONS,
+ OPT_l = (1 << 5) * ENABLE_FEATURE_RUN_PARTS_LONG_OPTIONS
+ * ENABLE_FEATURE_RUN_PARTS_FANCY,
};
-#if ENABLE_FEATURE_RUN_PARTS_FANCY
-#define list_mode (option_mask32 & OPT_l)
-#else
-#define list_mode 0
-#endif
-
/* Is this a valid filename (upper/lower alpha, digits,
* underscores, and hyphens only?)
*/
@@ -110,7 +106,7 @@ static int FAST_FUNC act(const char *file, struct stat *statbuf, void *args UNUS
if (depth == 2
&& ( !(statbuf->st_mode & (S_IFREG | S_IFLNK))
|| invalid_name(file)
- || (!list_mode && access(file, X_OK) != 0))
+ || (!(option_mask32 & OPT_l) && access(file, X_OK) != 0))
) {
return SKIP;
}
@@ -126,11 +122,12 @@ static int FAST_FUNC act(const char *file, struct stat *statbuf, void *args UNUS
static const char runparts_longopts[] ALIGN1 =
"arg\0" Required_argument "a"
"umask\0" Required_argument "u"
- "test\0" No_argument "t"
-#if ENABLE_FEATURE_RUN_PARTS_FANCY
- "list\0" No_argument "l"
- "reverse\0" No_argument "r"
//TODO: "verbose\0" No_argument "v"
+ "reverse\0" No_argument "\xf0"
+ "test\0" No_argument "\xf1"
+ "exit-on-error\0" No_argument "\xf2"
+#if ENABLE_FEATURE_RUN_PARTS_FANCY
+ "list\0" No_argument "\xf3"
#endif
;
#endif
@@ -150,7 +147,7 @@ int run_parts_main(int argc UNUSED_PARAM, char **argv)
#endif
/* We require exactly one argument: the directory name */
opt_complementary = "=1:a::";
- getopt32(argv, "ra:u:t"IF_FEATURE_RUN_PARTS_FANCY("l"), &arg_list, &umask_p);
+ getopt32(argv, "a:u:", &arg_list, &umask_p);
umask(xstrtou_range(umask_p, 8, 0, 07777));
@@ -193,6 +190,9 @@ int run_parts_main(int argc UNUSED_PARAM, char **argv)
bb_perror_msg("can't execute '%s'", name);
else /* ret > 0 */
bb_error_msg("%s exited with code %d", name, ret & 0xff);
+
+ if (option_mask32 & OPT_e)
+ xfunc_die();
}
return n;
diff --git a/docs/keep_data_small.txt b/docs/keep_data_small.txt
index 21d7326..9fc7996 100644
--- a/docs/keep_data_small.txt
+++ b/docs/keep_data_small.txt
@@ -138,13 +138,6 @@ less readable, use #defines:
#define sector (G.sector)
- Word of caution
-
-If applet doesn't use much of global data, converting it to use
-one of above methods is not worth the resulting code obfuscation.
-If you have less than ~300 bytes of global data - don't bother.
-
-
Finding non-shared duplicated strings
strings busybox | sort | uniq -c | sort -nr
@@ -224,6 +217,14 @@ Result (non-static busybox built against glibc):
Keeping code small
+Use scripts/bloat-o-meter to check whether introduced changes
+didn't generate unnecessary bloat. This script needs unstripped binaries
+to generate a detailed report. To automate this, just use
+"make bloatcheck". It requires busybox_old binary to be present,
+use "make baseline" to generate it from unmodified source, or
+copy busybox_unstripped to busybox_old before modifying sources
+and rebuilding.
+
Set CONFIG_EXTRA_CFLAGS="-fno-inline-functions-called-once",
produce "make bloatcheck", see the biggest auto-inlined functions.
Now, set CONFIG_EXTRA_CFLAGS back to "", but add NOINLINE
diff --git a/docs/mdev.txt b/docs/mdev.txt
index 61f93c9..b24025f 100644
--- a/docs/mdev.txt
+++ b/docs/mdev.txt
@@ -51,9 +51,9 @@ device nodes if your system needs something more than the default root/root
660 permissions.
The file has the format:
- [-]<device regex> <uid>:<gid> <permissions>
+ [-][envmatch]<device regex> <uid>:<gid> <permissions>
or
- @<maj[,min1[-min2]]> <uid>:<gid> <permissions>
+ [envmatch]@<maj[,min1[-min2]]> <uid>:<gid> <permissions>
or
$envvar=<regex> <uid>:<gid> <permissions>
diff --git a/docs/tcp.txt b/docs/tcp.txt
new file mode 100644
index 0000000..2000f31
--- a/dev/null
+++ b/docs/tcp.txt
@@ -0,0 +1,93 @@
+ Some less-widely known details of TCP connections.
+
+ Properly closing the connection.
+
+After this code sequence:
+
+ sock = socket(AF_INET, SOCK_STREAM, 0);
+ connect(sock, &remote, sizeof(remote));
+ write(sock, buffer, 1000000);
+
+a large block of data is only buffered by kernel, it can't be sent all at once.
+What will happen if we close the socket?
+
+"A host MAY implement a 'half-duplex' TCP close sequence, so that
+ an application that has called close() cannot continue to read
+ data from the connection. If such a host issues a close() call
+ while received data is still pending in TCP, or if new data is
+ received after close() is called, its TCP SHOULD send a RST
+ to show that data was lost."
+
+IOW: if we just close(sock) now, kernel can reset the TCP connection
+(send RST packet).
+
+This is problematic for two reasons: it discards some not-yet sent
+data, and it may be reported as error, not EOF, on peer's side.
+
+What can be done about it?
+
+Solution #1: block until sending is done:
+
+ /* When enabled, a close(2) or shutdown(2) will not return until
+ * all queued messages for the socket have been successfully sent
+ * or the linger timeout has been reached.
+ */
+ struct linger {
+ int l_onoff; /* linger active */
+ int l_linger; /* how many seconds to linger for */
+ } linger;
+ linger.l_onoff = 1;
+ linger.l_linger = SOME_NUM;
+ setsockopt(sock, SOL_SOCKET, SO_LINGER, &linger, sizeof(linger));
+ close(sock);
+
+Solution #2: tell kernel that you are done sending.
+This makes kernel send FIN after all data is written:
+
+ shutdown(sock, SHUT_WR);
+ close(sock);
+
+However, experiments on Linux 3.9.4 show that kernel can return from
+shutdown() and from close() before all data is sent,
+and if peer sends any data to us after this, kernel still responds with
+RST before all our data is sent.
+
+In practice the protocol in use often does not allow peer to send
+such data to us, in which case this solution is acceptable.
+
+Solution #3: if you know that peer is going to close its end after it sees
+our FIN (as EOF), it might be a good idea to perform a read after shutdown().
+When read finishes with 0-sized result, we conclude that peer received all
+the data, saw EOF, and closed its end.
+
+However, this incurs small performance penalty (we run for a longer time)
+and requires safeguards (nonblocking reads, timeouts etc) against
+malicious peers which don't close the connection.
+
+Solutions #1 and #2 can be combined:
+
+ /* ...set up struct linger... then: */
+ setsockopt(sock, SOL_SOCKET, SO_LINGER, &linger, sizeof(linger));
+ shutdown(sock, SHUT_WR);
+ /* At this point, kernel sent FIN packet, not RST, to the peer, */
+ /* even if there is buffered read data from the peer. */
+ close(sock);
+
+ Defeating Nagle.
+
+Method #1: manually control whether partial sends are allowed:
+
+This prevents partially filled packets being sent:
+
+ int state = 1;
+ setsockopt(fd, IPPROTO_TCP, TCP_CORK, &state, sizeof(state));
+
+and this forces last, partially filled packet (if any) to be sent:
+
+ int state = 0;
+ setsockopt(fd, IPPROTO_TCP, TCP_CORK, &state, sizeof(state));
+
+Method #2: make any write to immediately send data, even if it's partial:
+
+ int state = 1;
+ setsockopt(fd, IPPROTO_TCP, TCP_NODELAY, &state, sizeof(state));
diff --git a/e2fsprogs/old_e2fsprogs/blkid/blkidP.h b/e2fsprogs/old_e2fsprogs/blkid/blkidP.h
index d6b2b42..bbadc8e 100644
--- a/e2fsprogs/old_e2fsprogs/blkid/blkidP.h
+++ b/e2fsprogs/old_e2fsprogs/blkid/blkidP.h
@@ -179,8 +179,4 @@ extern int blkid_set_tag(blkid_dev dev, const char *name,
extern blkid_dev blkid_new_dev(void);
extern void blkid_free_dev(blkid_dev dev);
-#ifdef __cplusplus
-}
-#endif
-
#endif
diff --git a/e2fsprogs/old_e2fsprogs/blkid/cache.c b/e2fsprogs/old_e2fsprogs/blkid/cache.c
index d1d2914..251e499 100644
--- a/e2fsprogs/old_e2fsprogs/blkid/cache.c
+++ b/e2fsprogs/old_e2fsprogs/blkid/cache.c
@@ -115,7 +115,7 @@ int main(int argc, char** argv)
argv[0], ret);
exit(1);
}
- if ((ret = blkid_probe_all(cache) < 0))
+ if ((ret = blkid_probe_all(cache)) < 0)
fprintf(stderr, "error probing devices\n");
blkid_put_cache(cache);
diff --git a/e2fsprogs/old_e2fsprogs/blkid/dev.c b/e2fsprogs/old_e2fsprogs/blkid/dev.c
index bb0cc91..260e49c 100644
--- a/e2fsprogs/old_e2fsprogs/blkid/dev.c
+++ b/e2fsprogs/old_e2fsprogs/blkid/dev.c
@@ -153,7 +153,7 @@ extern int optind;
void usage(char *prog)
{
fprintf(stderr, "Usage: %s [-f blkid_file] [-m debug_mask]\n", prog);
- fprintf(stderr, "\tList all devices and exit\n", prog);
+ fprintf(stderr, "\tList all devices and exit\n");
exit(1);
}
@@ -176,7 +176,7 @@ int main(int argc, char **argv)
case 'm':
blkid_debug_mask = strtoul (optarg, &tmp, 0);
if (*tmp) {
- fprintf(stderr, "Invalid debug mask: %d\n",
+ fprintf(stderr, "Invalid debug mask: %s\n",
optarg);
exit(1);
}
diff --git a/e2fsprogs/old_e2fsprogs/blkid/read.c b/e2fsprogs/old_e2fsprogs/blkid/read.c
index f795a5d..feeda51 100644
--- a/e2fsprogs/old_e2fsprogs/blkid/read.c
+++ b/e2fsprogs/old_e2fsprogs/blkid/read.c
@@ -385,7 +385,7 @@ void blkid_read_cache(blkid_cache cache)
continue;
end = strlen(buf) - 1;
/* Continue reading next line if it ends with a backslash */
- while (buf[end] == '\\' && end < sizeof(buf) - 2 &&
+ while (end < sizeof(buf) - 2 && buf[end] == '\\' &&
fgets(buf + end, sizeof(buf) - end, file)) {
end = strlen(buf) - 1;
lineno++;
diff --git a/e2fsprogs/old_e2fsprogs/blkid/tag.c b/e2fsprogs/old_e2fsprogs/blkid/tag.c
index 8337b46..7424ede 100644
--- a/e2fsprogs/old_e2fsprogs/blkid/tag.c
+++ b/e2fsprogs/old_e2fsprogs/blkid/tag.c
@@ -356,7 +356,7 @@ void usage(char *prog)
fprintf(stderr, "Usage: %s [-f blkid_file] [-m debug_mask] device "
"[type value]\n",
prog);
- fprintf(stderr, "\tList all tags for a device and exit\n", prog);
+ fprintf(stderr, "\tList all tags for a device and exit\n");
exit(1);
}
@@ -382,7 +382,7 @@ int main(int argc, char **argv)
case 'm':
blkid_debug_mask = strtoul (optarg, &tmp, 0);
if (*tmp) {
- fprintf(stderr, "Invalid debug mask: %d\n",
+ fprintf(stderr, "Invalid debug mask: %s\n",
optarg);
exit(1);
}
@@ -407,7 +407,7 @@ int main(int argc, char **argv)
dev = blkid_get_dev(cache, devname, flags);
if (!dev) {
- fprintf(stderr, "%s: cannot find device in blkid cache\n");
+ fprintf(stderr, "%s: cannot find device in blkid cache\n", devname);
exit(1);
}
if (search_type) {
diff --git a/e2fsprogs/old_e2fsprogs/e2fsck.c b/e2fsprogs/old_e2fsprogs/e2fsck.c
index 373e8ce..8400a92 100644
--- a/e2fsprogs/old_e2fsprogs/e2fsck.c
+++ b/e2fsprogs/old_e2fsprogs/e2fsck.c
@@ -1050,7 +1050,7 @@ static errcode_t ea_refcount_create(int size, ext2_refcount_t *ret)
refcount->size = size;
bytes = (size_t) (size * sizeof(struct ea_refcount_el));
#ifdef DEBUG
- printf("Refcount allocated %d entries, %d bytes.\n",
+ printf("Refcount allocated %d entries, %lu bytes.\n",
refcount->size, bytes);
#endif
retval = ext2fs_get_mem(bytes, &refcount->list);
@@ -3424,7 +3424,7 @@ static void e2fsck_pass1(e2fsck_t ctx)
continue;
}
if ((inode->i_links_count || inode->i_blocks ||
- inode->i_blocks || inode->i_block[0]) &&
+ inode->i_block[0]) &&
fix_problem(ctx, PR_1_JOURNAL_INODE_NOT_CLEAR,
&pctx)) {
memset(inode, 0, inode_size);
@@ -12195,11 +12195,7 @@ static void swap_filesys(e2fsck_t ctx)
void *e2fsck_allocate_memory(e2fsck_t ctx, unsigned int size,
const char *description)
{
- void *ret;
- char buf[256];
-
- ret = xzalloc(size);
- return ret;
+ return xzalloc(size);
}
static char *string_copy(const char *str, int len)
diff --git a/e2fsprogs/old_e2fsprogs/ext2fs/initialize.c b/e2fsprogs/old_e2fsprogs/ext2fs/initialize.c
index da2d151..240335b 100644
--- a/e2fsprogs/old_e2fsprogs/ext2fs/initialize.c
+++ b/e2fsprogs/old_e2fsprogs/ext2fs/initialize.c
@@ -83,7 +83,7 @@ static int calc_reserved_gdt_blocks(ext2_filsys fs)
if (rsv_gdb > EXT2_ADDR_PER_BLOCK(sb))
rsv_gdb = EXT2_ADDR_PER_BLOCK(sb);
#ifdef RES_GDT_DEBUG
- printf("max_blocks %lu, rsv_groups = %lu, rsv_gdb = %lu\n",
+ printf("max_blocks %lu, rsv_groups = %lu, rsv_gdb = %u\n",
max_blocks, rsv_groups, rsv_gdb);
#endif
diff --git a/e2fsprogs/old_e2fsprogs/ext2fs/unix_io.c b/e2fsprogs/old_e2fsprogs/ext2fs/unix_io.c
index 474f073..3c95829 100644
--- a/e2fsprogs/old_e2fsprogs/ext2fs/unix_io.c
+++ b/e2fsprogs/old_e2fsprogs/ext2fs/unix_io.c
@@ -544,7 +544,7 @@ static errcode_t unix_read_blk(io_channel channel, unsigned long block,
/* If it's in the cache, use it! */
if ((cache = find_cached_block(data, block, &reuse[0]))) {
#ifdef DEBUG
- printf("Using cached block %d\n", block);
+ printf("Using cached block %lu\n", block);
#endif
memcpy(cp, cache->buf, channel->block_size);
count--;
@@ -560,7 +560,7 @@ static errcode_t unix_read_blk(io_channel channel, unsigned long block,
if (find_cached_block(data, block+i, &reuse[i]))
break;
#ifdef DEBUG
- printf("Reading %d blocks starting at %d\n", i, block);
+ printf("Reading %d blocks starting at %lu\n", i, block);
#endif
if ((retval = raw_read_blk(channel, data, block, i, cp)))
return retval;
diff --git a/e2fsprogs/old_e2fsprogs/fsck.c b/e2fsprogs/old_e2fsprogs/fsck.c
index 3a0743b..91cce97 100644
--- a/e2fsprogs/old_e2fsprogs/fsck.c
+++ b/e2fsprogs/old_e2fsprogs/fsck.c
@@ -1239,7 +1239,6 @@ static void PRS(int argc, char **argv)
progress_fd = 0;
else {
goto next_arg;
- i++;
}
}
break;
diff --git a/e2fsprogs/old_e2fsprogs/mke2fs.c b/e2fsprogs/old_e2fsprogs/mke2fs.c
index 35d717a..ebcb46c 100644
--- a/e2fsprogs/old_e2fsprogs/mke2fs.c
+++ b/e2fsprogs/old_e2fsprogs/mke2fs.c
@@ -239,7 +239,7 @@ static void test_disk(ext2_filsys fs, badblocks_list *bb_list)
errcode_t retval;
char buf[1024];
- sprintf(buf, "badblocks -b %d %s%s%s %d", fs->blocksize,
+ sprintf(buf, "badblocks -b %u %s%s%s %d", fs->blocksize,
quiet ? "" : "-s ", (cflag > 1) ? "-w " : "",
fs->device_name, fs->super->s_blocks_count);
mke2fs_verbose("Running command: %s\n", buf);
@@ -385,7 +385,7 @@ static errcode_t zero_blocks(ext2_filsys fs, blk_t blk, int num,
struct progress_struct *progress,
blk_t *ret_blk, int *ret_count)
{
- int j, count, next_update, next_update_incr;
+ int j, count, next_update;
static char *buf;
errcode_t retval;
@@ -403,9 +403,7 @@ static errcode_t zero_blocks(ext2_filsys fs, blk_t blk, int num,
}
/* OK, do the write loop */
next_update = 0;
- next_update_incr = num / 100;
- if (next_update_incr < 1)
- next_update_incr = 1;
+
for (j=0; j < num; j += STRIDE_LENGTH, blk += STRIDE_LENGTH) {
count = num - j;
if (count > STRIDE_LENGTH)
diff --git a/e2fsprogs/old_e2fsprogs/tune2fs.c b/e2fsprogs/old_e2fsprogs/tune2fs.c
index 3c3f4af..bbe30e5 100644
--- a/e2fsprogs/old_e2fsprogs/tune2fs.c
+++ b/e2fsprogs/old_e2fsprogs/tune2fs.c
@@ -607,7 +607,7 @@ int tune2fs_main(int argc, char **argv)
if (e_flag) {
sb->s_errors = errors;
ext2fs_mark_super_dirty(fs);
- printf("Setting error behavior to %d\n", errors);
+ printf("Setting error behavior to %u\n", errors);
}
if (g_flag) {
sb->s_def_resgid = resgid;
diff --git a/e2fsprogs/old_e2fsprogs/util.c b/e2fsprogs/old_e2fsprogs/util.c
index a61abc2..3e7ee8e 100644
--- a/e2fsprogs/old_e2fsprogs/util.c
+++ b/e2fsprogs/old_e2fsprogs/util.c
@@ -117,7 +117,7 @@ void parse_journal_opts(char **journal_device, int *journal_flags,
}
if (strcmp(token, "device") == 0) {
*journal_device = blkid_get_devname(NULL, arg, NULL);
- if (!journal_device) {
+ if (!*journal_device) {
journal_usage++;
continue;
}
@@ -239,7 +239,7 @@ void make_journal_blocks(ext2_filsys fs, int journal_size, int journal_flags, in
return;
}
if (!quiet)
- printf("Creating journal (%ld blocks): ", journal_blocks);
+ printf("Creating journal (%lu blocks): ", journal_blocks);
fflush(stdout);
retval = ext2fs_add_journal_inode(fs, journal_blocks,
journal_flags);
diff --git a/editors/Config.src b/editors/Config.src
index af1e1de..c6e9d92 100644
--- a/editors/Config.src
+++ b/editors/Config.src
@@ -7,66 +7,6 @@ menu "Editors"
INSERT
-config AWK
- bool "awk"
- default y
- help
- Awk is used as a pattern scanning and processing language. This is
- the BusyBox implementation of that programming language.
-
-config FEATURE_AWK_LIBM
- bool "Enable math functions (requires libm)"
- default y
- depends on AWK
- help
- Enable math functions of the Awk programming language.
- NOTE: This will require libm to be present for linking.
-
-config CMP
- bool "cmp"
- default y
- help
- cmp is used to compare two files and returns the result
- to standard output.
-
-config DIFF
- bool "diff"
- default y
- help
- diff compares two files or directories and outputs the
- differences between them in a form that can be given to
- the patch command.
-
-config FEATURE_DIFF_LONG_OPTIONS
- bool "Enable long options"
- default y
- depends on DIFF && LONG_OPTS
- help
- Enable use of long options.
-
-config FEATURE_DIFF_DIR
- bool "Enable directory support"
- default y
- depends on DIFF
- help
- This option enables support for directory and subdirectory
- comparison.
-
-config ED
- bool "ed"
- default y
- help
- The original 1970's Unix text editor, from the days of teletypes.
- Small, simple, evil. Part of SUSv3. If you're not already using
- this, you don't need it.
-
-config SED
- bool "sed"
- default y
- help
- sed is used to perform text transformations on a file
- or input from a pipeline.
-
config FEATURE_ALLOW_EXEC
bool "Allow vi and awk to execute shell commands"
default y
diff --git a/editors/Kbuild.src b/editors/Kbuild.src
index 8888cba..6b4fb74 100644
--- a/editors/Kbuild.src
+++ b/editors/Kbuild.src
@@ -7,8 +7,3 @@
lib-y:=
INSERT
-lib-$(CONFIG_AWK) += awk.o
-lib-$(CONFIG_CMP) += cmp.o
-lib-$(CONFIG_DIFF) += diff.o
-lib-$(CONFIG_ED) += ed.o
-lib-$(CONFIG_SED) += sed.o
diff --git a/editors/awk.c b/editors/awk.c
index d8c393f..e2527ff 100644
--- a/editors/awk.c
+++ b/editors/awk.c
@@ -7,12 +7,45 @@
* Licensed under GPLv2 or later, see file LICENSE in this source tree.
*/
+//config:config AWK
+//config: bool "awk"
+//config: default y
+//config: help
+//config: Awk is used as a pattern scanning and processing language. This is
+//config: the BusyBox implementation of that programming language.
+//config:
+//config:config FEATURE_AWK_LIBM
+//config: bool "Enable math functions (requires libm)"
+//config: default y
+//config: depends on AWK
+//config: help
+//config: Enable math functions of the Awk programming language.
+//config: NOTE: This will require libm to be present for linking.
+//config:
+//config:config FEATURE_AWK_GNU_EXTENSIONS
+//config: bool "Enable a few GNU extensions"
+//config: default y
+//config: depends on AWK
+//config: help
+//config: Enable a few features from gawk:
+//config: * command line option -e AWK_PROGRAM
+//config: * simultaneous use of -f and -e on the command line.
+//config: This enables the use of awk library files.
+//config: Ex: awk -f mylib.awk -e '{print myfunction($1);}' ...
+
+//applet:IF_AWK(APPLET_NOEXEC(awk, awk, BB_DIR_USR_BIN, BB_SUID_DROP, awk))
+
+//kbuild:lib-$(CONFIG_AWK) += awk.o
+
//usage:#define awk_trivial_usage
//usage: "[OPTIONS] [AWK_PROGRAM] [FILE]..."
//usage:#define awk_full_usage "\n\n"
//usage: " -v VAR=VAL Set variable"
//usage: "\n -F SEP Use SEP as field separator"
//usage: "\n -f FILE Read program from FILE"
+//usage: IF_FEATURE_AWK_GNU_EXTENSIONS(
+//usage: "\n -e AWK_PROGRAM"
+//usage: )
#include "libbb.h"
#include "xregex.h"
@@ -38,6 +71,25 @@
#endif
+#define OPTSTR_AWK \
+ "F:v:f:" \
+ IF_FEATURE_AWK_GNU_EXTENSIONS("e:") \
+ "W:"
+#define OPTCOMPLSTR_AWK \
+ "v::f::" \
+ IF_FEATURE_AWK_GNU_EXTENSIONS("e::")
+enum {
+ OPTBIT_F, /* define field separator */
+ OPTBIT_v, /* define variable */
+ OPTBIT_f, /* pull in awk program from file */
+ IF_FEATURE_AWK_GNU_EXTENSIONS(OPTBIT_e,) /* -e AWK_PROGRAM */
+ OPTBIT_W, /* -W ignored */
+ OPT_F = 1 << OPTBIT_F,
+ OPT_v = 1 << OPTBIT_v,
+ OPT_f = 1 << OPTBIT_f,
+ OPT_e = IF_FEATURE_AWK_GNU_EXTENSIONS((1 << OPTBIT_e)) + 0,
+ OPT_W = 1 << OPTBIT_W
+};
#define MAXVARFMT 240
#define MINNVBLOCK 64
@@ -190,7 +242,7 @@ typedef struct tsplitter_s {
/* combined token classes */
#define TC_BINOP (TC_BINOPX | TC_COMMA | TC_PIPE | TC_IN)
-#define TC_UNARYOP (TC_UOPPRE | TC_UOPPOST)
+//#define TC_UNARYOP (TC_UOPPRE | TC_UOPPOST)
#define TC_OPERAND (TC_VARIABLE | TC_ARRAY | TC_FUNCTION \
| TC_BUILTIN | TC_GETLINE | TC_SEQSTART | TC_STRING | TC_NUMBER)
@@ -2015,8 +2067,8 @@ static int fmt_num(char *b, int size, const char *format, double n, int int_as_i
char c;
const char *s = format;
- if (int_as_int && n == (int)n) {
- r = snprintf(b, size, "%d", (int)n);
+ if (int_as_int && n == (long long)n) {
+ r = snprintf(b, size, "%lld", (long long)n);
} else {
do { c = *s; } while (c && *++s);
if (strchr("diouxX", c)) {
@@ -2036,7 +2088,7 @@ static char *awk_printf(node *n)
char *b = NULL;
char *fmt, *s, *f;
const char *s1;
- int i, j, incr, bsize;
+ int i, j, incr, bsize = 0;
char c, c1;
var *v, *arg;
@@ -2438,11 +2490,11 @@ static var *evaluate(node *op, var *res)
struct {
var *v;
const char *s;
- } L;
+ } L = { NULL, NULL };
struct {
var *v;
const char *s;
- } R;
+ } R = { NULL, NULL };
static double L_d;
uint32_t opinfo;
int opn;
@@ -2661,7 +2713,8 @@ static var *evaluate(node *op, var *res)
var *vbeg, *v;
const char *sv_progname;
- if (!op->r.f->body.first)
+ /* The body might be empty, still has to eval the args */
+ if (!op->r.n->info && !op->r.f->body.first)
syntax_error(EMSG_UNDEF_FUNC);
vbeg = v = nvalloc(op->r.f->nargs + 1);
@@ -2732,7 +2785,7 @@ static var *evaluate(node *op, var *res)
switch (opn) {
case F_in:
- R_d = (int)L_d;
+ R_d = (long long)L_d;
break;
case F_rn:
@@ -2783,8 +2836,16 @@ static var *evaluate(node *op, var *res)
break;
case F_le:
- if (!op1)
+ debug_printf_eval("length: L.s:'%s'\n", L.s);
+ if (!op1) {
L.s = getvar_s(intvar[F0]);
+ debug_printf_eval("length: L.s='%s'\n", L.s);
+ }
+ else if (L.v->type & VF_ARRAY) {
+ R_d = L.v->x.array->nel;
+ debug_printf_eval("length: array_len:%d\n", L.v->x.array->nel);
+ break;
+ }
R_d = strlen(L.s);
break;
@@ -2930,7 +2991,7 @@ static var *evaluate(node *op, var *res)
case '%':
if (R_d == 0)
syntax_error(EMSG_DIV_BY_ZERO);
- L_d -= (int)(L_d / R_d) * R_d;
+ L_d -= (long long)(L_d / R_d) * R_d;
break;
}
debug_printf_eval("BINARY/REPLACE result:%f\n", L_d);
@@ -3078,6 +3139,9 @@ int awk_main(int argc, char **argv)
char *opt_F;
llist_t *list_v = NULL;
llist_t *list_f = NULL;
+#if ENABLE_FEATURE_AWK_GNU_EXTENSIONS
+ llist_t *list_e = NULL;
+#endif
int i, j;
var *v;
var tv;
@@ -3136,47 +3200,51 @@ int awk_main(int argc, char **argv)
*s1 = '=';
}
}
- opt_complementary = "v::f::"; /* -v and -f can occur multiple times */
- opt = getopt32(argv, "F:v:f:W:", &opt_F, &list_v, &list_f, NULL);
+ opt_complementary = OPTCOMPLSTR_AWK;
+ opt = getopt32(argv, OPTSTR_AWK, &opt_F, &list_v, &list_f, IF_FEATURE_AWK_GNU_EXTENSIONS(&list_e,) NULL);
argv += optind;
argc -= optind;
- if (opt & 0x1) { /* -F */
+ if (opt & OPT_W)
+ bb_error_msg("warning: option -W is ignored");
+ if (opt & OPT_F) {
unescape_string_in_place(opt_F);
setvar_s(intvar[FS], opt_F);
}
- while (list_v) { /* -v */
+ while (list_v) {
if (!is_assignment(llist_pop(&list_v)))
bb_show_usage();
}
- if (list_f) { /* -f */
- do {
- char *s = NULL;
- FILE *from_file;
-
- g_progname = llist_pop(&list_f);
- from_file = xfopen_stdin(g_progname);
- /* one byte is reserved for some trick in next_token */
- for (i = j = 1; j > 0; i += j) {
- s = xrealloc(s, i + 4096);
- j = fread(s + i, 1, 4094, from_file);
- }
- s[i] = '\0';
- fclose(from_file);
- parse_program(s + 1);
- free(s);
- } while (list_f);
- argc++;
- } else { // no -f: take program from 1st parameter
- if (!argc)
+ while (list_f) {
+ char *s = NULL;
+ FILE *from_file;
+
+ g_progname = llist_pop(&list_f);
+ from_file = xfopen_stdin(g_progname);
+ /* one byte is reserved for some trick in next_token */
+ for (i = j = 1; j > 0; i += j) {
+ s = xrealloc(s, i + 4096);
+ j = fread(s + i, 1, 4094, from_file);
+ }
+ s[i] = '\0';
+ fclose(from_file);
+ parse_program(s + 1);
+ free(s);
+ }
+ g_progname = "cmd. line";
+#if ENABLE_FEATURE_AWK_GNU_EXTENSIONS
+ while (list_e) {
+ parse_program(llist_pop(&list_e));
+ }
+#endif
+ if (!(opt & (OPT_f | OPT_e))) {
+ if (!*argv)
bb_show_usage();
- g_progname = "cmd. line";
parse_program(*argv++);
+ argc--;
}
- if (opt & 0x8) // -W
- bb_error_msg("warning: option -W is ignored");
/* fill in ARGV array */
- setvar_i(intvar[ARGC], argc);
+ setvar_i(intvar[ARGC], argc + 1);
setari_u(intvar[ARGV], 0, "awk");
i = 0;
while (*argv)
diff --git a/editors/cmp.c b/editors/cmp.c
index fbe6b97..a4af6f4 100644
--- a/editors/cmp.c
+++ b/editors/cmp.c
@@ -10,6 +10,17 @@
/* BB_AUDIT SUSv3 (virtually) compliant -- uses nicer GNU format for -l. */
/* http://www.opengroup.org/onlinepubs/007904975/utilities/cmp.html */
+//config:config CMP
+//config: bool "cmp"
+//config: default y
+//config: help
+//config: cmp is used to compare two files and returns the result
+//config: to standard output.
+
+//kbuild:lib-$(CONFIG_CMP) += cmp.o
+
+//applet:IF_CMP(APPLET(cmp, BB_DIR_USR_BIN, BB_SUID_DROP))
+
//usage:#define cmp_trivial_usage
//usage: "[-l] [-s] FILE1 [FILE2" IF_DESKTOP(" [SKIP1 [SKIP2]]") "]"
//usage:#define cmp_full_usage "\n\n"
diff --git a/editors/diff.c b/editors/diff.c
index 0c55820..1961de6 100644
--- a/editors/diff.c
+++ b/editors/diff.c
@@ -76,6 +76,33 @@
* 6n words for files of length n.
*/
+//config:config DIFF
+//config: bool "diff"
+//config: default y
+//config: help
+//config: diff compares two files or directories and outputs the
+//config: differences between them in a form that can be given to
+//config: the patch command.
+//config:
+//config:config FEATURE_DIFF_LONG_OPTIONS
+//config: bool "Enable long options"
+//config: default y
+//config: depends on DIFF && LONG_OPTS
+//config: help
+//config: Enable use of long options.
+//config:
+//config:config FEATURE_DIFF_DIR
+//config: bool "Enable directory support"
+//config: default y
+//config: depends on DIFF
+//config: help
+//config: This option enables support for directory and subdirectory
+//config: comparison.
+
+//kbuild:lib-$(CONFIG_DIFF) += diff.o
+
+//applet:IF_DIFF(APPLET(diff, BB_DIR_USR_BIN, BB_SUID_DROP))
+
//usage:#define diff_trivial_usage
//usage: "[-abBdiNqrTstw] [-L LABEL] [-S FILE] [-U LINES] FILE1 FILE2"
//usage:#define diff_full_usage "\n\n"
diff --git a/editors/ed.c b/editors/ed.c
index dbb5130..3087fb0 100644
--- a/editors/ed.c
+++ b/editors/ed.c
@@ -7,6 +7,18 @@
* The "ed" built-in command (much simplified)
*/
+//config:config ED
+//config: bool "ed"
+//config: default y
+//config: help
+//config: The original 1970's Unix text editor, from the days of teletypes.
+//config: Small, simple, evil. Part of SUSv3. If you're not already using
+//config: this, you don't need it.
+
+//kbuild:lib-$(CONFIG_ED) += ed.o
+
+//applet:IF_ED(APPLET(ed, BB_DIR_BIN, BB_SUID_DROP))
+
//usage:#define ed_trivial_usage ""
//usage:#define ed_full_usage ""
diff --git a/editors/patch_bbox.c b/editors/patch_bbox.c
index 78aa5fd..aae7b79 100644
--- a/editors/patch_bbox.c
+++ b/editors/patch_bbox.c
@@ -188,8 +188,8 @@ int patch_main(int argc UNUSED_PARAM, char **argv)
unsigned src_last_line = 1;
unsigned dst_last_line = 1;
- if ((sscanf(patch_line, "@@ -%d,%d +%d,%d", &src_beg_line, &src_last_line, &dst_beg_line, &dst_last_line) < 3)
- && (sscanf(patch_line, "@@ -%d +%d,%d", &src_beg_line, &dst_beg_line, &dst_last_line) < 2)
+ if ((sscanf(patch_line, "@@ -%u,%u +%u,%u", &src_beg_line, &src_last_line, &dst_beg_line, &dst_last_line) < 3)
+ && (sscanf(patch_line, "@@ -%u +%u,%u", &src_beg_line, &dst_beg_line, &dst_last_line) < 2)
) {
/* No more hunks for this file */
break;
diff --git a/editors/sed.c b/editors/sed.c
index f8ca5d3..e18e48a 100644
--- a/editors/sed.c
+++ b/editors/sed.c
@@ -23,9 +23,6 @@
* resulting sed_cmd_t structures are appended to a linked list
* (G.sed_cmd_head/G.sed_cmd_tail).
*
- * add_input_file() adds a FILE* to the list of input files. We need to
- * know all input sources ahead of time to find the last line for the $ match.
- *
* process_files() does actual sedding, reading data lines from each input FILE*
* (which could be stdin) and applying the sed command list (sed_cmd_head) to
* each of the resulting lines.
@@ -58,16 +55,27 @@
* http://pubs.opengroup.org/onlinepubs/9699919799/utilities/sed.html
*/
+//config:config SED
+//config: bool "sed"
+//config: default y
+//config: help
+//config: sed is used to perform text transformations on a file
+//config: or input from a pipeline.
+
+//kbuild:lib-$(CONFIG_SED) += sed.o
+
+//applet:IF_SED(APPLET(sed, BB_DIR_BIN, BB_SUID_DROP))
+
//usage:#define sed_trivial_usage
-//usage: "[-inr] [-f FILE]... [-e CMD]... [FILE]...\n"
-//usage: "or: sed [-inr] CMD [FILE]..."
+//usage: "[-inrE] [-f FILE]... [-e CMD]... [FILE]...\n"
+//usage: "or: sed [-inrE] CMD [FILE]..."
//usage:#define sed_full_usage "\n\n"
//usage: " -e CMD Add CMD to sed commands to be executed"
//usage: "\n -f FILE Add FILE contents to sed commands to be executed"
//usage: "\n -i[SFX] Edit files in-place (otherwise sends to stdout)"
//usage: "\n Optionally back files up, appending SFX"
//usage: "\n -n Suppress automatic printing of pattern space"
-//usage: "\n -r Use extended regex syntax"
+//usage: "\n -r,-E Use extended regex syntax"
//usage: "\n"
//usage: "\nIf no -e or -f, the first non-option argument is the sed command string."
//usage: "\nRemaining arguments are input files (stdin if none)."
@@ -124,12 +132,15 @@ static const char semicolon_whitespace[] ALIGN1 = "; \n\r\t\v";
struct globals {
/* options */
int be_quiet, regex_type;
+
FILE *nonstdout;
char *outname, *hold_space;
+ smallint exitcode;
- /* List of input files */
- int input_file_count, current_input_file;
- FILE **input_file_list;
+ /* list of input files */
+ int current_input_file, last_input_file;
+ char **input_file_list;
+ FILE *current_fp;
regmatch_t regmatch[10];
regex_t *previous_regex_ptr;
@@ -137,7 +148,7 @@ struct globals {
/* linked list of sed commands */
sed_cmd_t *sed_cmd_head, **sed_cmd_tail;
- /* Linked list of append lines */
+ /* linked list of append lines */
llist_t *append_head;
char *add_cmd_line;
@@ -189,8 +200,8 @@ static void sed_free_and_close_stuff(void)
free(G.hold_space);
- while (G.current_input_file < G.input_file_count)
- fclose(G.input_file_list[G.current_input_file++]);
+ if (G.current_fp)
+ fclose(G.current_fp);
}
#else
void sed_free_and_close_stuff(void);
@@ -330,7 +341,7 @@ static int get_address(const char *my_str, int *linenum, regex_t ** regex)
next = index_of_next_unescaped_regexp_delim(delimiter, ++pos);
temp = copy_parsing_escapes(pos, next);
*regex = xzalloc(sizeof(regex_t));
- xregcomp(*regex, temp, G.regex_type|REG_NEWLINE);
+ xregcomp(*regex, temp, G.regex_type);
free(temp);
/* Move position to next character after last delimiter */
pos += (next+1);
@@ -370,7 +381,7 @@ static int parse_subst_cmd(sed_cmd_t *sed_cmd, const char *substr)
/*
* A substitution command should look something like this:
- * s/match/replace/ #gIpw
+ * s/match/replace/ #giIpw
* || | |||
* mandatory optional
*/
@@ -418,6 +429,7 @@ static int parse_subst_cmd(sed_cmd_t *sed_cmd, const char *substr)
break;
}
/* Ignore case (gnu exension) */
+ case 'i':
case 'I':
cflags |= REG_ICASE;
break;
@@ -649,6 +661,12 @@ static void add_cmd(const char *cmdstr)
sed_cmd->cmd = *cmdstr++;
cmdstr = parse_cmd_args(sed_cmd, cmdstr);
+ /* cmdstr now points past args.
+ * GNU sed requires a separator, if there are more commands,
+ * else it complains "char N: extra characters after command".
+ * Example: "sed 'p;d'". We also allow "sed 'pd'".
+ */
+
/* Add the command to the command array */
*G.sed_cmd_tail = sed_cmd;
G.sed_cmd_tail = &sed_cmd->next;
@@ -842,46 +860,100 @@ static sed_cmd_t *branch_to(char *label)
static void append(char *s)
{
- llist_add_to_end(&G.append_head, xstrdup(s));
+ llist_add_to_end(&G.append_head, s);
+}
+
+/* Output line of text. */
+/* Note:
+ * The tricks with NO_EOL_CHAR and last_puts_char are there to emulate gnu sed.
+ * Without them, we had this:
+ * echo -n thingy >z1
+ * echo -n again >z2
+ * >znull
+ * sed "s/i/z/" z1 z2 znull | hexdump -vC
+ * output:
+ * gnu sed 4.1.5:
+ * 00000000 74 68 7a 6e 67 79 0a 61 67 61 7a 6e |thzngy.agazn|
+ * bbox:
+ * 00000000 74 68 7a 6e 67 79 61 67 61 7a 6e |thzngyagazn|
+ */
+enum {
+ NO_EOL_CHAR = 1,
+ LAST_IS_NUL = 2,
+};
+static void puts_maybe_newline(char *s, FILE *file, char *last_puts_char, char last_gets_char)
+{
+ char lpc = *last_puts_char;
+
+ /* Need to insert a '\n' between two files because first file's
+ * last line wasn't terminated? */
+ if (lpc != '\n' && lpc != '\0') {
+ fputc('\n', file);
+ lpc = '\n';
+ }
+ fputs(s, file);
+
+ /* 'x' - just something which is not '\n', '\0' or NO_EOL_CHAR */
+ if (s[0])
+ lpc = 'x';
+
+ /* had trailing '\0' and it was last char of file? */
+ if (last_gets_char == LAST_IS_NUL) {
+ fputc('\0', file);
+ lpc = 'x'; /* */
+ } else
+ /* had trailing '\n' or '\0'? */
+ if (last_gets_char != NO_EOL_CHAR) {
+ fputc(last_gets_char, file);
+ lpc = last_gets_char;
+ }
+
+ if (ferror(file)) {
+ xfunc_error_retval = 4; /* It's what gnu sed exits with... */
+ bb_error_msg_and_die(bb_msg_write_error);
+ }
+ *last_puts_char = lpc;
}
-static void flush_append(void)
+static void flush_append(char *last_puts_char, char last_gets_char)
{
char *data;
/* Output appended lines. */
while ((data = (char *)llist_pop(&G.append_head))) {
- fprintf(G.nonstdout, "%s\n", data);
+ puts_maybe_newline(data, G.nonstdout, last_puts_char, last_gets_char);
free(data);
}
}
-static void add_input_file(FILE *file)
-{
- G.input_file_list = xrealloc_vector(G.input_file_list, 2, G.input_file_count);
- G.input_file_list[G.input_file_count++] = file;
-}
-
/* Get next line of input from G.input_file_list, flushing append buffer and
* noting if we ran out of files without a newline on the last line we read.
*/
-enum {
- NO_EOL_CHAR = 1,
- LAST_IS_NUL = 2,
-};
-static char *get_next_line(char *gets_char)
+static char *get_next_line(char *gets_char, char *last_puts_char, char last_gets_char)
{
char *temp = NULL;
int len;
char gc;
- flush_append();
+ flush_append(last_puts_char, last_gets_char);
/* will be returned if last line in the file
* doesn't end with either '\n' or '\0' */
gc = NO_EOL_CHAR;
- while (G.current_input_file < G.input_file_count) {
- FILE *fp = G.input_file_list[G.current_input_file];
+ for (; G.current_input_file <= G.last_input_file; G.current_input_file++) {
+ FILE *fp = G.current_fp;
+ if (!fp) {
+ const char *path = G.input_file_list[G.current_input_file];
+ fp = stdin;
+ if (path != bb_msg_standard_input) {
+ fp = fopen_or_warn(path, "r");
+ if (!fp) {
+ G.exitcode = EXIT_FAILURE;
+ continue;
+ }
+ }
+ G.current_fp = fp;
+ }
/* Read line up to a newline or NUL byte, inclusive,
* return malloc'ed char[]. length of the chunk read
* is stored in len. NULL if EOF/error */
@@ -912,61 +984,13 @@ static char *get_next_line(char *gets_char)
* (note: *no* newline after "b bang"!) */
}
/* Close this file and advance to next one */
- fclose(fp);
- G.current_input_file++;
+ fclose_if_not_stdin(fp);
+ G.current_fp = NULL;
}
*gets_char = gc;
return temp;
}
-/* Output line of text. */
-/* Note:
- * The tricks with NO_EOL_CHAR and last_puts_char are there to emulate gnu sed.
- * Without them, we had this:
- * echo -n thingy >z1
- * echo -n again >z2
- * >znull
- * sed "s/i/z/" z1 z2 znull | hexdump -vC
- * output:
- * gnu sed 4.1.5:
- * 00000000 74 68 7a 6e 67 79 0a 61 67 61 7a 6e |thzngy.agazn|
- * bbox:
- * 00000000 74 68 7a 6e 67 79 61 67 61 7a 6e |thzngyagazn|
- */
-static void puts_maybe_newline(char *s, FILE *file, char *last_puts_char, char last_gets_char)
-{
- char lpc = *last_puts_char;
-
- /* Need to insert a '\n' between two files because first file's
- * last line wasn't terminated? */
- if (lpc != '\n' && lpc != '\0') {
- fputc('\n', file);
- lpc = '\n';
- }
- fputs(s, file);
-
- /* 'x' - just something which is not '\n', '\0' or NO_EOL_CHAR */
- if (s[0])
- lpc = 'x';
-
- /* had trailing '\0' and it was last char of file? */
- if (last_gets_char == LAST_IS_NUL) {
- fputc('\0', file);
- lpc = 'x'; /* */
- } else
- /* had trailing '\n' or '\0'? */
- if (last_gets_char != NO_EOL_CHAR) {
- fputc(last_gets_char, file);
- lpc = last_gets_char;
- }
-
- if (ferror(file)) {
- xfunc_error_retval = 4; /* It's what gnu sed exits with... */
- bb_error_msg_and_die(bb_msg_write_error);
- }
- *last_puts_char = lpc;
-}
-
#define sed_puts(s, n) (puts_maybe_newline(s, G.nonstdout, &last_puts_char, n))
static int beg_match(sed_cmd_t *sed_cmd, const char *pattern_space)
@@ -989,7 +1013,7 @@ static void process_files(void)
int substituted;
/* Prime the pump */
- next_line = get_next_line(&next_gets_char);
+ next_line = get_next_line(&next_gets_char, &last_puts_char, '\n' /*last_gets_char*/);
/* Go through every line in each file */
again:
@@ -1003,7 +1027,7 @@ static void process_files(void)
/* Read one line in advance so we can act on the last line,
* the '$' address */
- next_line = get_next_line(&next_gets_char);
+ next_line = get_next_line(&next_gets_char, &last_puts_char, last_gets_char);
linenum++;
/* For every line, go through all the commands */
@@ -1175,7 +1199,7 @@ static void process_files(void)
/* Append line to linked list to be printed later */
case 'a':
- append(sed_cmd->string);
+ append(xstrdup(sed_cmd->string));
break;
/* Insert text before this line */
@@ -1197,11 +1221,10 @@ static void process_files(void)
rfile = fopen_for_read(sed_cmd->string);
if (rfile) {
char *line;
-
while ((line = xmalloc_fgetline(rfile))
!= NULL)
append(line);
- xprint_and_close_file(rfile);
+ fclose(rfile);
}
break;
@@ -1222,7 +1245,7 @@ static void process_files(void)
free(pattern_space);
pattern_space = next_line;
last_gets_char = next_gets_char;
- next_line = get_next_line(&next_gets_char);
+ next_line = get_next_line(&next_gets_char, &last_puts_char, last_gets_char);
substituted = 0;
linenum++;
break;
@@ -1258,7 +1281,7 @@ static void process_files(void)
pattern_space[len] = '\n';
strcpy(pattern_space + len+1, next_line);
last_gets_char = next_gets_char;
- next_line = get_next_line(&next_gets_char);
+ next_line = get_next_line(&next_gets_char, &last_puts_char, last_gets_char);
linenum++;
break;
}
@@ -1362,7 +1385,7 @@ static void process_files(void)
/* Delete and such jump here. */
discard_line:
- flush_append();
+ flush_append(&last_puts_char, last_gets_char);
free(pattern_space);
goto again;
@@ -1371,7 +1394,7 @@ static void process_files(void)
/* It is possible to have a command line argument with embedded
* newlines. This counts as multiple command lines.
* However, newline can be escaped: 's/e/z\<newline>z/'
- * We check for this.
+ * add_cmd() handles this.
*/
static void add_cmd_block(char *cmdstr)
@@ -1381,22 +1404,8 @@ static void add_cmd_block(char *cmdstr)
cmdstr = sv = xstrdup(cmdstr);
do {
eol = strchr(cmdstr, '\n');
- next:
- if (eol) {
- /* Count preceding slashes */
- int slashes = 0;
- char *sl = eol;
-
- while (sl != cmdstr && *--sl == '\\')
- slashes++;
- /* Odd number of preceding slashes - newline is escaped */
- if (slashes & 1) {
- overlapping_strcpy(eol - 1, eol);
- eol = strchr(eol, '\n');
- goto next;
- }
+ if (eol)
*eol = '\0';
- }
add_cmd(cmdstr);
cmdstr = eol + 1;
} while (eol);
@@ -1421,8 +1430,6 @@ int sed_main(int argc UNUSED_PARAM, char **argv)
"file\0" Required_argument "f";
#endif
- int status = EXIT_SUCCESS;
-
INIT_G();
/* destroy command strings on exit */
@@ -1443,15 +1450,21 @@ int sed_main(int argc UNUSED_PARAM, char **argv)
IF_LONG_OPTS(applet_long_options = sed_longopts);
/* -i must be first, to match OPT_in_place definition */
- opt = getopt32(argv, "i::rne:f:", &opt_i, &opt_e, &opt_f,
+ /* -E is a synonym of -r:
+ * GNU sed 4.2.1 mentions it in neither --help
+ * nor manpage, but does recognize it.
+ */
+ opt = getopt32(argv, "i::rEne:f:", &opt_i, &opt_e, &opt_f,
&G.be_quiet); /* counter for -n */
//argc -= optind;
argv += optind;
if (opt & OPT_in_place) { // -i
atexit(cleanup_outname);
}
- if (opt & 0x2) G.regex_type |= REG_EXTENDED; // -r
- //if (opt & 0x4) G.be_quiet++; // -n
+ if (opt & (2|4))
+ G.regex_type |= REG_EXTENDED; // -r or -E
+ //if (opt & 8)
+ // G.be_quiet++; // -n (implemented with a counter instead)
while (opt_e) { // -e
add_cmd_block(llist_pop(&opt_e));
}
@@ -1466,7 +1479,7 @@ int sed_main(int argc UNUSED_PARAM, char **argv)
fclose(cmdfile);
}
/* if we didn't get a pattern from -e or -f, use argv[0] */
- if (!(opt & 0x18)) {
+ if (!(opt & 0x30)) {
if (!*argv)
bb_show_usage();
add_cmd_block(*argv++);
@@ -1480,42 +1493,38 @@ int sed_main(int argc UNUSED_PARAM, char **argv)
/* argv[0..(argc-1)] should be names of file to process. If no
* files were specified or '-' was specified, take input from stdin.
* Otherwise, we process all the files specified. */
- if (argv[0] == NULL) {
+ G.input_file_list = argv;
+ if (!argv[0]) {
if (opt & OPT_in_place)
bb_error_msg_and_die(bb_msg_requires_arg, "-i");
- add_input_file(stdin);
+ argv[0] = (char*)bb_msg_standard_input;
+ /* G.last_input_file = 0; - already is */
} else {
- int i;
+ goto start;
- for (i = 0; argv[i]; i++) {
+ for (; *argv; argv++) {
struct stat statbuf;
int nonstdoutfd;
- FILE *file;
sed_cmd_t *sed_cmd;
- if (LONE_DASH(argv[i]) && !(opt & OPT_in_place)) {
- add_input_file(stdin);
- process_files();
- continue;
- }
- file = fopen_or_warn(argv[i], "r");
- if (!file) {
- status = EXIT_FAILURE;
- continue;
- }
- add_input_file(file);
+ G.last_input_file++;
+ start:
if (!(opt & OPT_in_place)) {
+ if (LONE_DASH(*argv)) {
+ *argv = (char*)bb_msg_standard_input;
+ process_files();
+ }
continue;
}
/* -i: process each FILE separately: */
- G.outname = xasprintf("%sXXXXXX", argv[i]);
+ G.outname = xasprintf("%sXXXXXX", *argv);
nonstdoutfd = xmkstemp(G.outname);
G.nonstdout = xfdopen_for_write(nonstdoutfd);
/* Set permissions/owner of output file */
- fstat(fileno(file), &statbuf);
+ stat(*argv, &statbuf);
/* chmod'ing AFTER chown would preserve suid/sgid bits,
* but GNU sed 4.2.1 does not preserve them either */
fchmod(nonstdoutfd, statbuf.st_mode);
@@ -1526,12 +1535,12 @@ int sed_main(int argc UNUSED_PARAM, char **argv)
G.nonstdout = stdout;
if (opt_i) {
- char *backupname = xasprintf("%s%s", argv[i], opt_i);
- xrename(argv[i], backupname);
+ char *backupname = xasprintf("%s%s", *argv, opt_i);
+ xrename(*argv, backupname);
free(backupname);
}
- /* else unlink(argv[i]); - rename below does this */
- xrename(G.outname, argv[i]); //TODO: rollback backup on error?
+ /* else unlink(*argv); - rename below does this */
+ xrename(G.outname, *argv); //TODO: rollback backup on error?
free(G.outname);
G.outname = NULL;
@@ -1541,12 +1550,13 @@ int sed_main(int argc UNUSED_PARAM, char **argv)
}
}
/* Here, to handle "sed 'cmds' nonexistent_file" case we did:
- * if (G.current_input_file >= G.input_file_count)
- * return status;
+ * if (G.current_input_file[G.current_input_file] == NULL)
+ * return G.exitcode;
* but it's not needed since process_files() works correctly
* in this case too. */
}
+
process_files();
- return status;
+ return G.exitcode;
}
diff --git a/editors/vi.c b/editors/vi.c
index 5d214e2..ccf53a9 100644
--- a/editors/vi.c
+++ b/editors/vi.c
@@ -156,7 +156,7 @@
#include "libbb.h"
/* Should be after libbb.h: on some systems regex.h needs sys/types.h: */
#if ENABLE_FEATURE_VI_REGEX_SEARCH
-# include <regex.h>
+# include "xregex.h"
#endif
/* the CRASHME code is unmaintained, and doesn't currently build */
@@ -478,6 +478,7 @@ static void flash(int); // flash the terminal screen
static void show_status_line(void); // put a message on the bottom line
static void status_line(const char *, ...); // print to status buf
static void status_line_bold(const char *, ...);
+static void status_line_bold_errno(const char *fn);
static void not_implemented(const char *); // display "Not implemented" message
static int format_edit_status(void); // format file status on status line
static void redraw(int); // force a full screen refresh
@@ -1051,7 +1052,7 @@ static void colon(char *buf)
#endif
// how many lines in text[]?
li = count_lines(text, end - 1);
- status_line("\"%s\"%s"
+ status_line("'%s'%s"
IF_FEATURE_VI_READONLY("%s")
" %dL, %dC", current_filename,
(file_size(fn) < 0 ? " [New file]" : ""),
@@ -1167,7 +1168,7 @@ static void colon(char *buf)
goto ret; // nothing was inserted
// how many lines in text[]?
li = count_lines(q, q + ch - 1);
- status_line("\"%s\""
+ status_line("'%s'"
IF_FEATURE_VI_READONLY("%s")
" %dL, %dC", fn,
IF_FEATURE_VI_READONLY((readonly_mode ? " [Readonly]" : ""),)
@@ -1300,7 +1301,7 @@ static void colon(char *buf)
}
#if ENABLE_FEATURE_VI_READONLY
if (readonly_mode && !useforce) {
- status_line_bold("\"%s\" File is read only", fn);
+ status_line_bold("'%s' is read only", fn);
goto ret;
}
#endif
@@ -1323,9 +1324,9 @@ static void colon(char *buf)
}
if (l < 0) {
if (l == -1)
- status_line_bold("\"%s\" %s", fn, strerror(errno));
+ status_line_bold_errno(fn);
} else {
- status_line("\"%s\" %dL, %dC", fn, li, l);
+ status_line("'%s' %dL, %dC", fn, li, l);
if (q == text && r == end - 1 && l == ch) {
file_modified = 0;
last_file_modified = -1;
@@ -1708,65 +1709,53 @@ static char *new_screen(int ro, int co)
// search for pattern starting at p
static char *char_search(char *p, const char *pat, int dir, int range)
{
- char *q;
struct re_pattern_buffer preg;
+ const char *err;
+ char *q;
int i;
int size;
re_syntax_options = RE_SYNTAX_POSIX_EXTENDED;
- preg.translate = 0;
- preg.fastmap = 0;
- preg.buffer = 0;
- preg.allocated = 0;
+ if (ignorecase)
+ re_syntax_options = RE_SYNTAX_POSIX_EXTENDED | RE_ICASE;
+
+ memset(&preg, 0, sizeof(preg));
+ err = re_compile_pattern(pat, strlen(pat), &preg);
+ if (err != NULL) {
+ status_line_bold("bad search pattern '%s': %s", pat, err);
+ return p;
+ }
// assume a LIMITED forward search
- q = next_line(p);
- q = end_line(q);
q = end - 1;
- if (dir == BACK) {
- q = prev_line(p);
+ if (dir == BACK)
q = text;
- }
- // count the number of chars to search over, forward or backward
- size = q - p;
- if (size < 0)
- size = p - q;
// RANGE could be negative if we are searching backwards
range = q - p;
-
- q = (char *)re_compile_pattern(pat, strlen(pat), (struct re_pattern_buffer *)&preg);
- if (q != 0) {
- // The pattern was not compiled
- status_line_bold("bad search pattern: \"%s\": %s", pat, q);
- i = 0; // return p if pattern not compiled
- goto cs1;
- }
-
q = p;
+ size = range;
if (range < 0) {
+ size = -size;
q = p - size;
if (q < text)
q = text;
}
// search for the compiled pattern, preg, in p[]
- // range < 0- search backward
- // range > 0- search forward
+ // range < 0: search backward
+ // range > 0: search forward
// 0 < start < size
- // re_search() < 0 not found or error
- // re_search() > 0 index of found pattern
- // struct pattern char int int int struct reg
- // re_search (*pattern_buffer, *string, size, start, range, *regs)
- i = re_search(&preg, q, size, 0, range, 0);
- if (i == -1) {
- p = 0;
- i = 0; // return NULL if pattern not found
- }
- cs1:
- if (dir == FORWARD) {
+ // re_search() < 0: not found or error
+ // re_search() >= 0: index of found pattern
+ // struct pattern char int int int struct reg
+ // re_search(*pattern_buffer, *string, size, start, range, *regs)
+ i = re_search(&preg, q, size, /*start:*/ 0, range, /*struct re_registers*:*/ NULL);
+ regfree(&preg);
+ if (i < 0)
+ return NULL;
+ if (dir == FORWARD)
p = p + i;
- } else {
+ else
p = p - i;
- }
return p;
}
@@ -1791,7 +1780,7 @@ static char *char_search(char *p, const char *pat, int dir, int range)
len = strlen(pat);
if (dir == FORWARD) {
- stop = end - 1; // assume range is p - end-1
+ stop = end - 1; // assume range is p..end-1
if (range == LIMITED)
stop = next_line(p); // range is to next line
for (start = p; start < stop; start++) {
@@ -1800,7 +1789,7 @@ static char *char_search(char *p, const char *pat, int dir, int range)
}
}
} else if (dir == BACK) {
- stop = text; // assume range is text - p
+ stop = text; // assume range is text..p
if (range == LIMITED)
stop = prev_line(p); // range is to prev line
for (start = p - len; start >= stop; start--) {
@@ -2505,12 +2494,12 @@ static int file_insert(const char *fn, char *p, int update_ro_status)
/* Validate file */
if (stat(fn, &statbuf) < 0) {
- status_line_bold("\"%s\" %s", fn, strerror(errno));
+ status_line_bold_errno(fn);
goto fi0;
}
if (!S_ISREG(statbuf.st_mode)) {
// This is not a regular file
- status_line_bold("\"%s\" Not a regular file", fn);
+ status_line_bold("'%s' is not a regular file", fn);
goto fi0;
}
if (p < text || p > end) {
@@ -2521,19 +2510,19 @@ static int file_insert(const char *fn, char *p, int update_ro_status)
// read file to buffer
fd = open(fn, O_RDONLY);
if (fd < 0) {
- status_line_bold("\"%s\" %s", fn, strerror(errno));
+ status_line_bold_errno(fn);
goto fi0;
}
- size = statbuf.st_size;
+ size = (statbuf.st_size < INT_MAX ? (int)statbuf.st_size : INT_MAX);
p += text_hole_make(p, size);
cnt = safe_read(fd, p, size);
if (cnt < 0) {
- status_line_bold("\"%s\" %s", fn, strerror(errno));
+ status_line_bold_errno(fn);
p = text_hole_delete(p, p + size - 1); // un-do buffer insert
} else if (cnt < size) {
// There was a partial read, shrink unused space text[]
- p = text_hole_delete(p + cnt, p + (size - cnt) - 1); // un-do buffer insert
- status_line_bold("can't read all of file \"%s\"", fn);
+ p = text_hole_delete(p + cnt, p + size - 1); // un-do buffer insert
+ status_line_bold("can't read '%s'", fn);
}
if (cnt >= size)
file_modified++;
@@ -2719,6 +2708,11 @@ static void status_line_bold(const char *format, ...)
have_status_msg = 1 + sizeof(ESC_BOLD_TEXT) + sizeof(ESC_NORM_TEXT) - 2;
}
+static void status_line_bold_errno(const char *fn)
+{
+ status_line_bold("'%s' %s", fn, strerror(errno));
+}
+
// format status buffer
static void status_line(const char *format, ...)
{
@@ -3471,7 +3465,7 @@ static void do_cmd(int c)
} else {
file_modified = 0;
last_file_modified = -1;
- status_line("\"%s\" %dL, %dC", current_filename, count_lines(text, end - 1), cnt);
+ status_line("'%s' %dL, %dC", current_filename, count_lines(text, end - 1), cnt);
if (p[0] == 'x' || p[1] == 'q' || p[1] == 'n'
|| p[0] == 'X' || p[1] == 'Q' || p[1] == 'N'
) {
@@ -3669,7 +3663,7 @@ static void do_cmd(int c)
}
if (file_modified) {
if (ENABLE_FEATURE_VI_READONLY && readonly_mode) {
- status_line_bold("\"%s\" File is read only", current_filename);
+ status_line_bold("'%s' is read only", current_filename);
break;
}
cnt = file_write(current_filename, text, end - 1);
diff --git a/examples/inittab b/examples/inittab
index c4e0af5..01ceaef 100644
--- a/examples/inittab
+++ b/examples/inittab
@@ -15,10 +15,7 @@
# the specified process to run on. The contents of this field are
# appended to "/dev/" and used as-is. There is no need for this field to
# be unique, although if it isn't you may have strange results. If this
-# field is left blank, it is completely ignored. Also note that if
-# BusyBox detects that a serial console is in use, then all entries
-# containing non-empty id fields will be ignored. BusyBox init does
-# nothing with utmp. We don't need no stinkin' utmp.
+# field is left blank, then the init's stdin/out will be used.
#
# <runlevels>: The runlevels field is completely ignored.
#
@@ -43,9 +40,6 @@
# ::shutdown:/sbin/swapoff -a
# ::shutdown:/bin/umount -a -r
# ::restart:/sbin/init
-#
-# if it detects that /dev/console is _not_ a serial console, it will
-# also run:
# tty2::askfirst:/bin/sh
# tty3::askfirst:/bin/sh
# tty4::askfirst:/bin/sh
diff --git a/examples/mdev.conf.change_blockdev.sh b/examples/mdev.conf.change_blockdev.sh
new file mode 100755
index 0000000..512e43f
--- a/dev/null
+++ b/examples/mdev.conf.change_blockdev.sh
@@ -0,0 +1,29 @@
+#!/bin/sh
+
+# Seconds to try to reread partition table
+cnt=60
+
+exec </dev/null
+exec >"/tmp/${0##*/}.$$.out"
+exec 2>&1
+
+(
+echo "Running: $0"
+echo "Env:"
+env | sort
+
+while sleep 1; test $cnt != 0; do
+ echo "Trying to reread partition table on $DEVNAME ($cnt)"
+ : $((cnt--))
+ # If device node doesn't exist, it means the device was removed.
+ # Stop trying.
+ test -e "$DEVNAME" || { echo "$DEVNAME doesn't exist, aborting"; exit 1; }
+ #echo "$DEVNAME exists"
+ if blockdev --rereadpt "$DEVNAME"; then
+ echo "blockdev --rereadpt succeeded"
+ exit 0
+ fi
+ echo "blockdev --rereadpt failed, exit code: $?"
+done
+echo "Timed out"
+) &
diff --git a/examples/mdev_fat.conf b/examples/mdev_fat.conf
index ceba3a7..f2a15f3 100644
--- a/examples/mdev_fat.conf
+++ b/examples/mdev_fat.conf
@@ -7,9 +7,9 @@
# instead of the default 0:0 660.
#
# Syntax:
-# [-]devicename_regex user:group mode [=path]|[>path]|[!] [@|$|*cmd args...]
-# [-]$ENVVAR=regex user:group mode [=path]|[>path]|[!] [@|$|*cmd args...]
-# [-]@maj,min[-min2] user:group mode [=path]|[>path]|[!] [@|$|*cmd args...]
+# [-][ENVVAR=regex;]...devicename_regex user:group mode [=path]|[>path]|[!] [@|$|*cmd args...]
+# [-][ENVVAR=regex;]...@maj,min[-min2] user:group mode [=path]|[>path]|[!] [@|$|*cmd args...]
+# [-]$ENVVAR=regex user:group mode [=path]|[>path]|[!] [@|$|*cmd args...]
#
# [-]: do not stop on this match, continue reading mdev.conf
# =: move, >: move and create a symlink
@@ -53,6 +53,7 @@ sr[0-9]* root:cdrom 660 @ln -sf $MDEV cdrom
fd[0-9]* root:floppy 660
# net devices
+SUBSYSTEM=net;.* root:root 600 @nameif
tun[0-9]* root:root 600 =net/
tap[0-9]* root:root 600 =net/
@@ -111,3 +112,33 @@ usbdev[0-9].[0-9]_.* root:root 660
# zaptel devices
zap(.*) root:dialout 660 =zap/%1
dahdi!(.*) root:dialout 660 =dahdi/%1
+
+# HTC Android
+# Attaching it via USB cable causes a flurry of activity:
+#
+# mdev[1271]: 48.639459 ACTION:add SUBSYSTEM:usb DEVNAME:bus/usb/001/009 DEVPATH:/devices/pci0000:00/0000:00:02.1/usb1/1-5
+# mdev[1271]: mknod bus/usb/001/009 (189,8) 20660 0:0
+# mdev[1272]: 48.642354 ACTION:add SUBSYSTEM:usb DEVNAME:(null) DEVPATH:/devices/pci0000:00/0000:00:02.1/usb1/1-5/1-5:1.0
+# mdev[1272]: running: modprobe "$MODALIAS"
+# mdev[1273]: 48.650078 ACTION:add SUBSYSTEM:scsi DEVNAME:(null) DEVPATH:/devices/pci0000:00/0000:00:02.1/usb1/1-5/1-5:1.0/host11
+# mdev[1274]: 48.651297 ACTION:add SUBSYSTEM:scsi_host DEVNAME:(null) DEVPATH:/devices/pci0000:00/0000:00:02.1/usb1/1-5/1-5:1.0/host11/scsi_host/host11
+# mdev[1275]: 49.649422 ACTION:add SUBSYSTEM:scsi DEVNAME:(null) DEVPATH:/devices/pci0000:00/0000:00:02.1/usb1/1-5/1-5:1.0/host11/target11:0:0
+# mdev[1276]: 49.650703 ACTION:add SUBSYSTEM:scsi DEVNAME:(null) DEVPATH:/devices/pci0000:00/0000:00:02.1/usb1/1-5/1-5:1.0/host11/target11:0:0/11:0:0:0
+# mdev[1276]: running: modprobe "$MODALIAS"
+# modprobe: module scsi:t-0x00 not found in modules.dep
+# mdev[1277]: 49.658002 ACTION:add SUBSYSTEM:scsi_disk DEVNAME:(null) DEVPATH:/devices/pci0000:00/0000:00:02.1/usb1/1-5/1-5:1.0/host11/target11:0:0/11:0:0:0/scsi_disk/11:0:0:0
+# mdev[1278]: 49.659244 ACTION:add SUBSYSTEM:scsi_device DEVNAME:(null) DEVPATH:/devices/pci0000:00/0000:00:02.1/usb1/1-5/1-5:1.0/host11/target11:0:0/11:0:0:0/scsi_device/11:0:0:
+# mdev[1279]: 49.660535 ACTION:add SUBSYSTEM:bsg DEVNAME:bsg/11:0:0:0 DEVPATH:/devices/pci0000:00/0000:00:02.1/usb1/1-5/1-5:1.0/host11/target11:0:0/11:0:0:0/bsg/11:0:0:0
+# mdev[1279]: mknod bsg/11:0:0:0 (253,1) 20660 0:0
+# mdev[1280]: 49.663516 ACTION:add SUBSYSTEM:bdi DEVNAME:(null) DEVPATH:/devices/virtual/bdi/8:16
+# mdev[1281]: 49.664748 ACTION:add SUBSYSTEM:block DEVNAME:sdb DEVPATH:/block/sdb
+# mdev[1281]: mknod sdb (8,16) 60660 0:0
+# mdev[1282]: 49.677597 ACTION:change SUBSYSTEM:block DEVNAME:sdb DEVPATH:/block/sdb
+# mdev[1283]: 50.692936 ACTION:change SUBSYSTEM:block DEVNAME:sdb DEVPATH:/block/sdb
+#
+# We are hooking to the last events. To avoid having two scripts running,
+# we check for DISK_MEDIA_CHANGE=1 (prev to last event has it,
+# and it's the _only_ difference in env for these two events as of kernel 3.7.7)
+# Unfortunately, there is no event for "user pressed [Turn USB storage] btn"!
+# Script merely backgrounds and tries to rescan partition table for 1 minute:
+ACTION=change;SUBSYSTEM=block;DISK_MEDIA_CHANGE=1;.* 0:0 660 */etc/mdev.conf.change_blockdev.sh
diff --git a/examples/udhcp/simple.script b/examples/udhcp/simple.script
index 40ee738..2a917eb 100755
--- a/examples/udhcp/simple.script
+++ b/examples/udhcp/simple.script
@@ -29,18 +29,23 @@ case "$1" in
metric=0
for i in $router ; do
echo "Adding router $i"
- route add default gw $i dev $interface metric $((metric++))
+ route add default gw $i dev $interface metric $metric
+ : $(( metric += 1 ))
done
fi
echo "Recreating $RESOLV_CONF"
- echo -n > $RESOLV_CONF-$$
- [ -n "$domain" ] && echo "search $domain" >> $RESOLV_CONF-$$
+ # If the file is a symlink somewhere (like /etc/resolv.conf
+ # pointing to /run/resolv.conf), make sure things work.
+ realconf=$(readlink -f "$RESOLV_CONF" 2>/dev/null || echo "$RESOLV_CONF")
+ tmpfile="$realconf-$$"
+ > "$tmpfile"
+ [ -n "$domain" ] && echo "search $domain" >> "$tmpfile"
for i in $dns ; do
echo " Adding DNS server $i"
- echo "nameserver $i" >> $RESOLV_CONF-$$
+ echo "nameserver $i" >> "$tmpfile"
done
- mv $RESOLV_CONF-$$ $RESOLV_CONF
+ mv "$tmpfile" "$realconf"
;;
esac
diff --git a/findutils/find.c b/findutils/find.c
index 67cb47d..4c9f9d8 100644
--- a/findutils/find.c
+++ b/findutils/find.c
@@ -231,12 +231,13 @@
//kbuild:lib-$(CONFIG_FIND) += find.o
//usage:#define find_trivial_usage
-//usage: "[PATH]... [OPTIONS] [ACTIONS]"
+//usage: "[-HL] [PATH]... [OPTIONS] [ACTIONS]"
//usage:#define find_full_usage "\n\n"
//usage: "Search for files and perform actions on them.\n"
//usage: "First failed action stops processing of current file.\n"
//usage: "Defaults: PATH is current directory, action is '-print'\n"
-//usage: "\n -follow Follow symlinks"
+//usage: "\n -L,-follow Follow symlinks"
+//usage: "\n -H ...on command line only"
//usage: IF_FEATURE_FIND_XDEV(
//usage: "\n -xdev Don't descend directories on other filesystems"
//usage: )
@@ -814,6 +815,31 @@ static const char* plus_minus_num(const char* str)
}
#endif
+/* Say no to GCCism */
+#define USE_NESTED_FUNCTION 0
+
+#if !USE_NESTED_FUNCTION
+struct pp_locals {
+ action*** appp;
+ unsigned cur_group;
+ unsigned cur_action;
+ IF_FEATURE_FIND_NOT( bool invert_flag; )
+};
+static action* alloc_action(struct pp_locals *ppl, int sizeof_struct, action_fp f)
+{
+ action *ap = xzalloc(sizeof_struct);
+ action **app;
+ action ***group = &ppl->appp[ppl->cur_group];
+ *group = app = xrealloc(*group, (ppl->cur_action+2) * sizeof(ppl->appp[0][0]));
+ app[ppl->cur_action++] = ap;
+ app[ppl->cur_action] = NULL;
+ ap->f = f;
+ IF_FEATURE_FIND_NOT( ap->invert = ppl->invert_flag; )
+ IF_FEATURE_FIND_NOT( ppl->invert_flag = 0; )
+ return ap;
+}
+#endif
+
static action*** parse_params(char **argv)
{
enum {
@@ -900,10 +926,18 @@ static action*** parse_params(char **argv)
IF_FEATURE_FIND_MAXDEPTH("-mindepth\0""-maxdepth\0")
;
+#if !USE_NESTED_FUNCTION
+ struct pp_locals ppl;
+#define appp (ppl.appp )
+#define cur_group (ppl.cur_group )
+#define cur_action (ppl.cur_action )
+#define invert_flag (ppl.invert_flag)
+#define ALLOC_ACTION(name) (action_##name*)alloc_action(&ppl, sizeof(action_##name), (action_fp) func_##name)
+#else
action*** appp;
- unsigned cur_group = 0;
- unsigned cur_action = 0;
- IF_FEATURE_FIND_NOT( bool invert_flag = 0; )
+ unsigned cur_group;
+ unsigned cur_action;
+ IF_FEATURE_FIND_NOT( bool invert_flag; )
/* This is the only place in busybox where we use nested function.
* So far more standard alternatives were bigger. */
@@ -912,7 +946,7 @@ static action*** parse_params(char **argv)
action* alloc_action(int sizeof_struct, action_fp f)
{
action *ap;
- appp[cur_group] = xrealloc(appp[cur_group], (cur_action+2) * sizeof(*appp));
+ appp[cur_group] = xrealloc(appp[cur_group], (cur_action+2) * sizeof(appp[0][0]));
appp[cur_group][cur_action++] = ap = xzalloc(sizeof_struct);
appp[cur_group][cur_action] = NULL;
ap->f = f;
@@ -920,9 +954,12 @@ static action*** parse_params(char **argv)
IF_FEATURE_FIND_NOT( invert_flag = 0; )
return ap;
}
-
#define ALLOC_ACTION(name) (action_##name*)alloc_action(sizeof(action_##name), (action_fp) func_##name)
+#endif
+ cur_group = 0;
+ cur_action = 0;
+ IF_FEATURE_FIND_NOT( invert_flag = 0; )
appp = xzalloc(2 * sizeof(appp[0])); /* appp[0],[1] == NULL */
while (*argv) {
@@ -948,8 +985,8 @@ static action*** parse_params(char **argv)
*/
/* Options */
if (parm == OPT_FOLLOW) {
- dbg("follow enabled: %d", __LINE__);
- G.recurse_flags |= ACTION_FOLLOWLINKS | ACTION_DANGLING_OK;
+ dbg("follow enabled: %d", __LINE__);
+ G.recurse_flags |= ACTION_FOLLOWLINKS | ACTION_DANGLING_OK;
}
#if ENABLE_FEATURE_FIND_XDEV
else if (parm == OPT_XDEV) {
@@ -987,7 +1024,7 @@ static action*** parse_params(char **argv)
dbg("%d", __LINE__);
/* start new OR group */
cur_group++;
- appp = xrealloc(appp, (cur_group+2) * sizeof(*appp));
+ appp = xrealloc(appp, (cur_group+2) * sizeof(appp[0]));
/*appp[cur_group] = NULL; - already NULL */
appp[cur_group+1] = NULL;
cur_action = 0;
@@ -1245,16 +1282,46 @@ static action*** parse_params(char **argv)
dbg("exiting %s", __func__);
return appp;
#undef ALLOC_ACTION
+#undef appp
+#undef cur_action
+#undef invert_flag
}
int find_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE;
int find_main(int argc UNUSED_PARAM, char **argv)
{
int i, firstopt, status = EXIT_SUCCESS;
+ char **past_HLP, *saved;
INIT_G();
- argv++;
+ /* "find -type f" + getopt("+HLP") => disaster.
+ * Need to avoid getopt running into a non-HLP option.
+ * Do this by temporarily storing NULL there:
+ */
+ past_HLP = argv;
+ for (;;) {
+ saved = *++past_HLP;
+ if (!saved)
+ break;
+ if (saved[0] != '-')
+ break;
+ if (!saved[1])
+ break; /* it is "-" */
+ if ((saved+1)[strspn(saved+1, "HLP")] != '\0')
+ break;
+ }
+ *past_HLP = NULL;
+ /* "+": stop on first non-option */
+ i = getopt32(argv, "+HLP");
+ if (i & (1<<0))
+ G.recurse_flags |= ACTION_FOLLOWLINKS_L0 | ACTION_DANGLING_OK;
+ if (i & (1<<1))
+ G.recurse_flags |= ACTION_FOLLOWLINKS | ACTION_DANGLING_OK;
+ /* -P is default and is ignored */
+ argv = past_HLP; /* same result as "argv += optind;" */
+ *past_HLP = saved;
+
for (firstopt = 0; argv[firstopt]; firstopt++) {
if (argv[firstopt][0] == '-')
break;
diff --git a/findutils/grep.c b/findutils/grep.c
index a64a735..22101f3 100644
--- a/findutils/grep.c
+++ b/findutils/grep.c
@@ -373,6 +373,11 @@ static int grep_file(FILE *file)
opt_f_not_found: ;
}
} else {
+#if ENABLE_EXTRA_COMPAT
+ unsigned start_pos;
+#endif
+ char *match_at;
+
if (!(gl->flg_mem_alocated_compiled & COMPILED)) {
gl->flg_mem_alocated_compiled |= COMPILED;
#if !ENABLE_EXTRA_COMPAT
@@ -387,33 +392,56 @@ static int grep_file(FILE *file)
#if !ENABLE_EXTRA_COMPAT
gl->matched_range.rm_so = 0;
gl->matched_range.rm_eo = 0;
+#else
+ start_pos = 0;
#endif
+ match_at = line;
+ opt_w_again:
+//bb_error_msg("'%s' start_pos:%d line_len:%d", match_at, start_pos, line_len);
if (
#if !ENABLE_EXTRA_COMPAT
- regexec(&gl->compiled_regex, line, 1, &gl->matched_range, 0) == 0
+ regexec(&gl->compiled_regex, match_at, 1, &gl->matched_range, 0) == 0
#else
- re_search(&gl->compiled_regex, line, line_len,
- /*start:*/ 0, /*range:*/ line_len,
+ re_search(&gl->compiled_regex, match_at, line_len,
+ start_pos, /*range:*/ line_len,
&gl->matched_range) >= 0
#endif
) {
if (option_mask32 & OPT_x) {
found = (gl->matched_range.rm_so == 0
- && line[gl->matched_range.rm_eo] == '\0');
+ && match_at[gl->matched_range.rm_eo] == '\0');
} else
if (!(option_mask32 & OPT_w)) {
found = 1;
} else {
char c = ' ';
if (gl->matched_range.rm_so)
- c = line[gl->matched_range.rm_so - 1];
+ c = match_at[gl->matched_range.rm_so - 1];
if (!isalnum(c) && c != '_') {
- c = line[gl->matched_range.rm_eo];
- if (!c || (!isalnum(c) && c != '_'))
+ c = match_at[gl->matched_range.rm_eo];
+ if (!c || (!isalnum(c) && c != '_')) {
found = 1;
+ } else {
+ /*
+ * Why check gl->matched_range.rm_eo?
+ * Zero-length match makes -w skip the line:
+ * "echo foo | grep ^" prints "foo",
+ * "echo foo | grep -w ^" prints nothing.
+ * Without such check, we can loop forever.
+ */
+#if !ENABLE_EXTRA_COMPAT
+ if (gl->matched_range.rm_eo != 0) {
+ match_at += gl->matched_range.rm_eo;
+ goto opt_w_again;
+ }
+#else
+ if (gl->matched_range.rm_eo > start_pos) {
+ start_pos = gl->matched_range.rm_eo;
+ goto opt_w_again;
+ }
+#endif
+ }
}
-//BUG: "echo foop foo | grep -w foo" should match, but doesn't:
-//we bail out on first "mismatch" because it's not a word.
}
}
}
@@ -710,7 +738,7 @@ int grep_main(int argc UNUSED_PARAM, char **argv)
option_mask32 |= OPT_F;
#if !ENABLE_EXTRA_COMPAT
- if (!(option_mask32 & (OPT_o | OPT_w)))
+ if (!(option_mask32 & (OPT_o | OPT_w | OPT_x)))
reflags = REG_NOSUB;
#endif
diff --git a/include-full/NUM_APPLETS.h b/include-full/NUM_APPLETS.h
deleted file mode 100644
index e2dbe61..0000000
--- a/include-full/NUM_APPLETS.h
+++ b/dev/null
@@ -1 +0,0 @@
-#define NUM_APPLETS 220
diff --git a/include-full/applet_tables.h b/include-full/applet_tables.h
deleted file mode 100644
index dbfaeca..0000000
--- a/include-full/applet_tables.h
+++ b/dev/null
@@ -1,677 +0,0 @@
-/* This is a generated file, don't edit */
-
-#define NUM_APPLETS 220
-
-const char applet_names[] ALIGN1 = ""
-"[" "\0"
-"[[" "\0"
-"adjtimex" "\0"
-"arp" "\0"
-"ash" "\0"
-"awk" "\0"
-"base64" "\0"
-"basename" "\0"
-"bbconfig" "\0"
-"blkid" "\0"
-"blockdev" "\0"
-"brctl" "\0"
-"bunzip2" "\0"
-"bzcat" "\0"
-"bzip2" "\0"
-"cal" "\0"
-"cat" "\0"
-"catv" "\0"
-"chattr" "\0"
-"chgrp" "\0"
-"chmod" "\0"
-"chown" "\0"
-"chroot" "\0"
-"clear" "\0"
-"cmp" "\0"
-"comm" "\0"
-"cp" "\0"
-"cpio" "\0"
-"crond" "\0"
-"crontab" "\0"
-"cut" "\0"
-"date" "\0"
-"dc" "\0"
-"dd" "\0"
-"depmod" "\0"
-"devmem" "\0"
-"df" "\0"
-"diff" "\0"
-"dirname" "\0"
-"dmesg" "\0"
-"dnsd" "\0"
-"dos2unix" "\0"
-"du" "\0"
-"echo" "\0"
-"ed" "\0"
-"egrep" "\0"
-"env" "\0"
-"expand" "\0"
-"expr" "\0"
-"false" "\0"
-"fbset" "\0"
-"fbsplash" "\0"
-"fdisk" "\0"
-"fgrep" "\0"
-"find" "\0"
-"flash_lock" "\0"
-"flash_unlock" "\0"
-"flashcp" "\0"
-"flock" "\0"
-"fold" "\0"
-"free" "\0"
-"freeramdisk" "\0"
-"fstrim" "\0"
-"fsync" "\0"
-"ftpget" "\0"
-"ftpput" "\0"
-"fuser" "\0"
-"getopt" "\0"
-"grep" "\0"
-"groups" "\0"
-"gunzip" "\0"
-"gzip" "\0"
-"halt" "\0"
-"head" "\0"
-"hexdump" "\0"
-"id" "\0"
-"ifconfig" "\0"
-"inetd" "\0"
-"insmod" "\0"
-"install" "\0"
-"ionice" "\0"
-"iostat" "\0"
-"ip" "\0"
-"kill" "\0"
-"killall" "\0"
-"killall5" "\0"
-"less" "\0"
-"ln" "\0"
-"losetup" "\0"
-"ls" "\0"
-"lsattr" "\0"
-"lsmod" "\0"
-"lsof" "\0"
-"lsusb" "\0"
-"lzcat" "\0"
-"lzma" "\0"
-"lzop" "\0"
-"lzopcat" "\0"
-"man" "\0"
-"md5sum" "\0"
-"mesg" "\0"
-"mkdir" "\0"
-"mkdosfs" "\0"
-"mke2fs" "\0"
-"mkfifo" "\0"
-"mkfs.ext2" "\0"
-"mkfs.vfat" "\0"
-"mknod" "\0"
-"mkswap" "\0"
-"mktemp" "\0"
-"modinfo" "\0"
-"modprobe" "\0"
-"more" "\0"
-"mount" "\0"
-"mountpoint" "\0"
-"mpstat" "\0"
-"mv" "\0"
-"nanddump" "\0"
-"nandwrite" "\0"
-"nbd-client" "\0"
-"nc" "\0"
-"netstat" "\0"
-"nice" "\0"
-"nohup" "\0"
-"nslookup" "\0"
-"ntpd" "\0"
-"od" "\0"
-"patch" "\0"
-"pgrep" "\0"
-"pidof" "\0"
-"ping" "\0"
-"pipe_progress" "\0"
-"pkill" "\0"
-"pmap" "\0"
-"poweroff" "\0"
-"printenv" "\0"
-"printf" "\0"
-"ps" "\0"
-"pstree" "\0"
-"pwd" "\0"
-"pwdx" "\0"
-"rdev" "\0"
-"readlink" "\0"
-"realpath" "\0"
-"reboot" "\0"
-"renice" "\0"
-"reset" "\0"
-"resize" "\0"
-"rev" "\0"
-"rm" "\0"
-"rmdir" "\0"
-"rmmod" "\0"
-"route" "\0"
-"run-parts" "\0"
-"rx" "\0"
-"sed" "\0"
-"seq" "\0"
-"setconsole" "\0"
-"setserial" "\0"
-"setsid" "\0"
-"sh" "\0"
-"sha1sum" "\0"
-"sha256sum" "\0"
-"sha3sum" "\0"
-"sha512sum" "\0"
-"sleep" "\0"
-"sort" "\0"
-"split" "\0"
-"stat" "\0"
-"strings" "\0"
-"stty" "\0"
-"sum" "\0"
-"swapoff" "\0"
-"swapon" "\0"
-"sync" "\0"
-"sysctl" "\0"
-"tac" "\0"
-"tail" "\0"
-"tar" "\0"
-"taskset" "\0"
-"tee" "\0"
-"telnet" "\0"
-"telnetd" "\0"
-"test" "\0"
-"tftp" "\0"
-"tftpd" "\0"
-"time" "\0"
-"timeout" "\0"
-"top" "\0"
-"touch" "\0"
-"tr" "\0"
-"traceroute" "\0"
-"true" "\0"
-"ttysize" "\0"
-"tune2fs" "\0"
-"umount" "\0"
-"uname" "\0"
-"uncompress" "\0"
-"unexpand" "\0"
-"uniq" "\0"
-"unix2dos" "\0"
-"unlzma" "\0"
-"unlzop" "\0"
-"unxz" "\0"
-"unzip" "\0"
-"uptime" "\0"
-"usleep" "\0"
-"uudecode" "\0"
-"uuencode" "\0"
-"vi" "\0"
-"watch" "\0"
-"wc" "\0"
-"wget" "\0"
-"which" "\0"
-"whoami" "\0"
-"xargs" "\0"
-"xz" "\0"
-"xzcat" "\0"
-"yes" "\0"
-"zcat" "\0"
-;
-
-#ifndef SKIP_applet_main
-int (*const applet_main[])(int argc, char **argv) = {
-test_main,
-test_main,
-adjtimex_main,
-arp_main,
-ash_main,
-awk_main,
-base64_main,
-basename_main,
-bbconfig_main,
-blkid_main,
-blockdev_main,
-brctl_main,
-bunzip2_main,
-bunzip2_main,
-bzip2_main,
-cal_main,
-cat_main,
-catv_main,
-chattr_main,
-chgrp_main,
-chmod_main,
-chown_main,
-chroot_main,
-clear_main,
-cmp_main,
-comm_main,
-cp_main,
-cpio_main,
-crond_main,
-crontab_main,
-cut_main,
-date_main,
-dc_main,
-dd_main,
-depmod_main,
-devmem_main,
-df_main,
-diff_main,
-dirname_main,
-dmesg_main,
-dnsd_main,
-dos2unix_main,
-du_main,
-echo_main,
-ed_main,
-grep_main,
-env_main,
-expand_main,
-expr_main,
-false_main,
-fbset_main,
-fbsplash_main,
-fdisk_main,
-grep_main,
-find_main,
-flash_lock_unlock_main,
-flash_lock_unlock_main,
-flashcp_main,
-flock_main,
-fold_main,
-free_main,
-freeramdisk_main,
-fstrim_main,
-fsync_main,
-ftpgetput_main,
-ftpgetput_main,
-fuser_main,
-getopt_main,
-grep_main,
-id_main,
-gunzip_main,
-gzip_main,
-halt_main,
-head_main,
-hexdump_main,
-id_main,
-ifconfig_main,
-inetd_main,
-insmod_main,
-install_main,
-ionice_main,
-iostat_main,
-ip_main,
-kill_main,
-kill_main,
-kill_main,
-less_main,
-ln_main,
-losetup_main,
-ls_main,
-lsattr_main,
-lsmod_main,
-lsof_main,
-lsusb_main,
-unlzma_main,
-unlzma_main,
-lzop_main,
-lzop_main,
-man_main,
-md5_sha1_sum_main,
-mesg_main,
-mkdir_main,
-mkfs_vfat_main,
-mkfs_ext2_main,
-mkfifo_main,
-mkfs_ext2_main,
-mkfs_vfat_main,
-mknod_main,
-mkswap_main,
-mktemp_main,
-modinfo_main,
-modprobe_main,
-more_main,
-mount_main,
-mountpoint_main,
-mpstat_main,
-mv_main,
-nandwrite_main,
-nandwrite_main,
-nbdclient_main,
-nc_main,
-netstat_main,
-nice_main,
-nohup_main,
-nslookup_main,
-ntpd_main,
-od_main,
-patch_main,
-pgrep_main,
-pidof_main,
-ping_main,
-pipe_progress_main,
-pgrep_main,
-pmap_main,
-halt_main,
-printenv_main,
-printf_main,
-ps_main,
-pstree_main,
-pwd_main,
-pwdx_main,
-rdev_main,
-readlink_main,
-realpath_main,
-halt_main,
-renice_main,
-reset_main,
-resize_main,
-rev_main,
-rm_main,
-rmdir_main,
-rmmod_main,
-route_main,
-run_parts_main,
-rx_main,
-sed_main,
-seq_main,
-setconsole_main,
-setserial_main,
-setsid_main,
-ash_main,
-md5_sha1_sum_main,
-md5_sha1_sum_main,
-md5_sha1_sum_main,
-md5_sha1_sum_main,
-sleep_main,
-sort_main,
-split_main,
-stat_main,
-strings_main,
-stty_main,
-sum_main,
-swap_on_off_main,
-swap_on_off_main,
-sync_main,
-sysctl_main,
-tac_main,
-tail_main,
-tar_main,
-taskset_main,
-tee_main,
-telnet_main,
-telnetd_main,
-test_main,
-tftp_main,
-tftpd_main,
-time_main,
-timeout_main,
-top_main,
-touch_main,
-tr_main,
-traceroute_main,
-true_main,
-ttysize_main,
-tune2fs_main,
-umount_main,
-uname_main,
-uncompress_main,
-expand_main,
-uniq_main,
-dos2unix_main,
-unlzma_main,
-lzop_main,
-unxz_main,
-unzip_main,
-uptime_main,
-usleep_main,
-uudecode_main,
-uuencode_main,
-vi_main,
-watch_main,
-wc_main,
-wget_main,
-which_main,
-whoami_main,
-xargs_main,
-unxz_main,
-unxz_main,
-yes_main,
-gunzip_main,
-};
-#endif
-
-const uint16_t applet_nameofs[] ALIGN2 = {
-0x0000,
-0x0002,
-0x0005,
-0x000e,
-0x0012,
-0x0016,
-0x001a,
-0x0021,
-0x002a,
-0x0033,
-0x0039,
-0x0042,
-0x0048,
-0x0050,
-0x0056,
-0x005c,
-0x0060,
-0x0064,
-0x0069,
-0x0070,
-0x0076,
-0x007c,
-0x0082,
-0x0089,
-0x008f,
-0x0093,
-0x0098,
-0x009b,
-0x00a0,
-0x80a6,
-0x00ae,
-0x00b2,
-0x00b7,
-0x00ba,
-0x00bd,
-0x00c4,
-0x00cb,
-0x00ce,
-0x00d3,
-0x00db,
-0x00e1,
-0x00e6,
-0x00ef,
-0x00f2,
-0x00f7,
-0x00fa,
-0x0100,
-0x0104,
-0x010b,
-0x0110,
-0x0116,
-0x011c,
-0x0125,
-0x012b,
-0x0131,
-0x0136,
-0x0141,
-0x014e,
-0x0156,
-0x015c,
-0x0161,
-0x0166,
-0x0172,
-0x0179,
-0x017f,
-0x0186,
-0x018d,
-0x0193,
-0x019a,
-0x019f,
-0x01a6,
-0x01ad,
-0x01b2,
-0x01b7,
-0x01bc,
-0x01c4,
-0x01c7,
-0x01d0,
-0x01d6,
-0x01dd,
-0x01e5,
-0x01ec,
-0x01f3,
-0x01f6,
-0x01fb,
-0x0203,
-0x020c,
-0x0211,
-0x0214,
-0x021c,
-0x021f,
-0x0226,
-0x022c,
-0x0231,
-0x0237,
-0x023d,
-0x0242,
-0x0247,
-0x024f,
-0x0253,
-0x025a,
-0x025f,
-0x0265,
-0x026d,
-0x0274,
-0x027b,
-0x0285,
-0x028f,
-0x0295,
-0x029c,
-0x02a3,
-0x02ab,
-0x02b4,
-0x42b9,
-0x02bf,
-0x02ca,
-0x02d1,
-0x02d4,
-0x02dd,
-0x02e7,
-0x02f2,
-0x02f5,
-0x02fd,
-0x0302,
-0x0308,
-0x0311,
-0x0316,
-0x0319,
-0x031f,
-0x0325,
-0x432b,
-0x0330,
-0x033e,
-0x0344,
-0x0349,
-0x0352,
-0x035b,
-0x0362,
-0x0365,
-0x036c,
-0x0370,
-0x0375,
-0x037a,
-0x0383,
-0x038c,
-0x0393,
-0x039a,
-0x03a0,
-0x03a7,
-0x03ab,
-0x03ae,
-0x03b4,
-0x03ba,
-0x03c0,
-0x03ca,
-0x03cd,
-0x03d1,
-0x03d5,
-0x03e0,
-0x03ea,
-0x03f1,
-0x03f4,
-0x03fc,
-0x0406,
-0x040e,
-0x0418,
-0x041e,
-0x0423,
-0x0429,
-0x042e,
-0x0436,
-0x043b,
-0x043f,
-0x0447,
-0x044e,
-0x0453,
-0x045a,
-0x045e,
-0x0463,
-0x0467,
-0x046f,
-0x0473,
-0x047a,
-0x0482,
-0x0487,
-0x048c,
-0x0492,
-0x0497,
-0x049f,
-0x04a3,
-0x04a9,
-0x44ac,
-0x04b7,
-0x04bc,
-0x04c4,
-0x04cc,
-0x04d3,
-0x04d9,
-0x04e4,
-0x04ed,
-0x04f2,
-0x04fb,
-0x0502,
-0x0509,
-0x050e,
-0x0514,
-0x051b,
-0x0522,
-0x052b,
-0x0534,
-0x0537,
-0x053d,
-0x0540,
-0x0545,
-0x054b,
-0x0552,
-0x0558,
-0x055b,
-0x0561,
-0x0565,
-};
-
-
-#define MAX_APPLET_NAME_LEN 13
diff --git a/include-full/applets.h b/include-full/applets.h
deleted file mode 100644
index e0a3623..0000000
--- a/include-full/applets.h
+++ b/dev/null
@@ -1,498 +0,0 @@
-/* DO NOT EDIT. This file is generated from applets.src.h */
-/* vi: set sw=4 ts=4: */
-/*
- * applets.h - a listing of all busybox applets.
- *
- * If you write a new applet, you need to add an entry to this list to make
- * busybox aware of it.
- */
-
-/*
-name - applet name as it is typed on command line
-name2 - applet name, converted to C (ether-wake: name2 = ether_wake)
-main - corresponding <applet>_main to call (bzcat: main = bunzip2)
-l - location to install link to: [/usr]/[s]bin
-s - suid type:
- BB_SUID_REQUIRE: will complain if busybox isn't suid
- and is run by non-root (applet_main() will not be called at all)
- BB_SUID_DROP: will drop suid prior to applet_main()
- BB_SUID_MAYBE: neither of the above
- (every instance of BB_SUID_REQUIRE and BB_SUID_MAYBE
- needs to be justified in comment)
- NB: please update FEATURE_SUID help text whenever you add/remove
- BB_SUID_REQUIRE or BB_SUID_MAYBE applet.
-*/
-
-#if defined(PROTOTYPES)
-# define APPLET(name,l,s) int name##_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE;
-# define APPLET_ODDNAME(name,main,l,s,name2) int main##_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE;
-# define APPLET_NOEXEC(name,main,l,s,name2) int main##_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE;
-# define APPLET_NOFORK(name,main,l,s,name2) int main##_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE;
-
-#elif defined(NAME_MAIN_CNAME)
-# define APPLET(name,l,s) name name##_main name
-# define APPLET_ODDNAME(name,main,l,s,name2) name main##_main name2
-# define APPLET_NOEXEC(name,main,l,s,name2) name main##_main name2
-# define APPLET_NOFORK(name,main,l,s,name2) name main##_main name2
-
-#elif defined(MAKE_USAGE) && ENABLE_FEATURE_VERBOSE_USAGE
-# define APPLET(name,l,s) MAKE_USAGE(#name, name##_trivial_usage name##_full_usage)
-# define APPLET_ODDNAME(name,main,l,s,name2) MAKE_USAGE(#name, name2##_trivial_usage name2##_full_usage)
-# define APPLET_NOEXEC(name,main,l,s,name2) MAKE_USAGE(#name, name2##_trivial_usage name2##_full_usage)
-# define APPLET_NOFORK(name,main,l,s,name2) MAKE_USAGE(#name, name2##_trivial_usage name2##_full_usage)
-
-#elif defined(MAKE_USAGE) && !ENABLE_FEATURE_VERBOSE_USAGE
-# define APPLET(name,l,s) MAKE_USAGE(#name, name##_trivial_usage)
-# define APPLET_ODDNAME(name,main,l,s,name2) MAKE_USAGE(#name, name2##_trivial_usage)
-# define APPLET_NOEXEC(name,main,l,s,name2) MAKE_USAGE(#name, name2##_trivial_usage)
-# define APPLET_NOFORK(name,main,l,s,name2) MAKE_USAGE(#name, name2##_trivial_usage)
-
-#elif defined(MAKE_LINKS)
-# define APPLET(name,l,c) LINK l name
-# define APPLET_ODDNAME(name,main,l,s,name2) LINK l name
-# define APPLET_NOEXEC(name,main,l,s,name2) LINK l name
-# define APPLET_NOFORK(name,main,l,s,name2) LINK l name
-
-#else
- static struct bb_applet applets[] = { /* name, main, location, need_suid */
-# define APPLET(name,l,s) { #name, #name, l, s },
-# define APPLET_ODDNAME(name,main,l,s,name2) { #name, #main, l, s },
-# define APPLET_NOEXEC(name,main,l,s,name2) { #name, #main, l, s, 1 },
-# define APPLET_NOFORK(name,main,l,s,name2) { #name, #main, l, s, 1, 1 },
-#endif
-
-#if ENABLE_INSTALL_NO_USR
-# define BB_DIR_USR_BIN BB_DIR_BIN
-# define BB_DIR_USR_SBIN BB_DIR_SBIN
-#endif
-
-
-IF_BUNZIP2(APPLET(bunzip2, BB_DIR_USR_BIN, BB_SUID_DROP))
-IF_BUNZIP2(APPLET_ODDNAME(bzcat, bunzip2, BB_DIR_USR_BIN, BB_SUID_DROP, bzcat))
-IF_DATE(APPLET(date, BB_DIR_BIN, BB_SUID_DROP))
-IF_HOSTID(APPLET_NOFORK(hostid, hostid, BB_DIR_USR_BIN, BB_SUID_DROP, hostid))
-IF_GROUPS(APPLET_NOEXEC(groups, id, BB_DIR_USR_BIN, BB_SUID_DROP, groups))
-IF_ID( APPLET_NOEXEC(id, id, BB_DIR_USR_BIN, BB_SUID_DROP, id ))
-IF_TOUCH(APPLET_NOFORK(touch, touch, BB_DIR_BIN, BB_SUID_DROP, touch))
-IF_BASE64(APPLET(base64, BB_DIR_BIN, BB_SUID_DROP))
-IF_USERS(APPLET_ODDNAME(users, who, BB_DIR_USR_BIN, BB_SUID_DROP, users))
-IF_WHO( APPLET( who, BB_DIR_USR_BIN, BB_SUID_DROP))
-IF_PATCH(APPLET(patch, BB_DIR_USR_BIN, BB_SUID_DROP))
-IF_VI(APPLET(vi, BB_DIR_BIN, BB_SUID_DROP))
-IF_FIND(APPLET_NOEXEC(find, find, BB_DIR_USR_BIN, BB_SUID_DROP, find))
-IF_GREP(APPLET(grep, BB_DIR_BIN, BB_SUID_DROP))
-IF_FEATURE_GREP_EGREP_ALIAS(APPLET_ODDNAME(egrep, grep, BB_DIR_BIN, BB_SUID_DROP, egrep))
-IF_FEATURE_GREP_FGREP_ALIAS(APPLET_ODDNAME(fgrep, grep, BB_DIR_BIN, BB_SUID_DROP, fgrep))
-IF_XARGS(APPLET_NOEXEC(xargs, xargs, BB_DIR_USR_BIN, BB_SUID_DROP, xargs))
-IF_BOOTCHARTD(APPLET(bootchartd, BB_DIR_SBIN, BB_SUID_DROP))
-IF_HALT(APPLET(halt, BB_DIR_SBIN, BB_SUID_DROP))
-IF_HALT(APPLET_ODDNAME(poweroff, halt, BB_DIR_SBIN, BB_SUID_DROP, poweroff))
-IF_HALT(APPLET_ODDNAME(reboot, halt, BB_DIR_SBIN, BB_SUID_DROP, reboot))
-IF_INIT(APPLET(init, BB_DIR_SBIN, BB_SUID_DROP))
-IF_FEATURE_INITRD(APPLET_ODDNAME(linuxrc, init, BB_DIR_ROOT, BB_SUID_DROP, linuxrc))
-IF_MESG(APPLET(mesg, BB_DIR_USR_BIN, BB_SUID_DROP))
-IF_ADD_SHELL( APPLET_ODDNAME(add-shell , add_remove_shell, BB_DIR_USR_SBIN, BB_SUID_DROP, add_shell ))
-IF_REMOVE_SHELL(APPLET_ODDNAME(remove-shell, add_remove_shell, BB_DIR_USR_SBIN, BB_SUID_DROP, remove_shell))
-IF_CONSPY(APPLET(conspy, BB_DIR_BIN, BB_SUID_DROP))
-IF_NANDWRITE(APPLET(nandwrite, BB_DIR_USR_SBIN, BB_SUID_DROP))
-IF_NANDWRITE(APPLET_ODDNAME(nanddump, nandwrite, BB_DIR_USR_SBIN, BB_SUID_DROP, nanddump))
-IF_SETSERIAL(APPLET(setserial, BB_DIR_BIN, BB_SUID_DROP))
-IF_UBIATTACH(APPLET_ODDNAME(ubiattach, ubi_tools, BB_DIR_USR_SBIN, BB_SUID_DROP, ubiattach))
-IF_UBIDETACH(APPLET_ODDNAME(ubidetach, ubi_tools, BB_DIR_USR_SBIN, BB_SUID_DROP, ubidetach))
-IF_UBIMKVOL(APPLET_ODDNAME(ubimkvol, ubi_tools, BB_DIR_USR_SBIN, BB_SUID_DROP, ubimkvol))
-IF_UBIRMVOL(APPLET_ODDNAME(ubirmvol, ubi_tools, BB_DIR_USR_SBIN, BB_SUID_DROP, ubirmvol))
-IF_UBIRSVOL(APPLET_ODDNAME(ubirsvol, ubi_tools, BB_DIR_USR_SBIN, BB_SUID_DROP, ubirsvol))
-IF_UBIUPDATEVOL(APPLET_ODDNAME(ubiupdatevol, ubi_tools, BB_DIR_USR_SBIN, BB_SUID_DROP, ubiupdatevol))
-IF_DEPMOD(APPLET(depmod, BB_DIR_SBIN, BB_SUID_DROP))
-IF_INSMOD(APPLET(insmod, BB_DIR_SBIN, BB_SUID_DROP))
-IF_LSMOD(APPLET(lsmod, BB_DIR_SBIN, BB_SUID_DROP))
-IF_MODINFO(APPLET(modinfo, BB_DIR_SBIN, BB_SUID_DROP))
-IF_MODPROBE_SMALL(APPLET(modprobe, BB_DIR_SBIN, BB_SUID_DROP))
-IF_MODPROBE_SMALL(APPLET_ODDNAME(depmod, modprobe, BB_DIR_SBIN, BB_SUID_DROP, modprobe))
-IF_MODPROBE_SMALL(APPLET_ODDNAME(insmod, modprobe, BB_DIR_SBIN, BB_SUID_DROP, modprobe))
-IF_MODPROBE_SMALL(APPLET_ODDNAME(lsmod, modprobe, BB_DIR_SBIN, BB_SUID_DROP, modprobe))
-IF_MODPROBE_SMALL(APPLET_ODDNAME(rmmod, modprobe, BB_DIR_SBIN, BB_SUID_DROP, modprobe))
-IF_MODPROBE(APPLET(modprobe, BB_DIR_SBIN, BB_SUID_DROP))
-IF_RMMOD(APPLET(rmmod, BB_DIR_SBIN, BB_SUID_DROP))
-IF_NBDCLIENT(APPLET_ODDNAME(nbd-client, nbdclient, BB_DIR_USR_SBIN, BB_SUID_DROP, nbdclient))
-IF_PING(APPLET(ping, BB_DIR_BIN, BB_SUID_MAYBE))
-IF_PING6(APPLET(ping6, BB_DIR_BIN, BB_SUID_MAYBE))
-IF_WHOIS(APPLET(whois, BB_DIR_USR_BIN, BB_SUID_DROP))
-IF_IOSTAT(APPLET(iostat, BB_DIR_BIN, BB_SUID_DROP))
-IF_LSOF(APPLET(lsof, BB_DIR_USR_BIN, BB_SUID_DROP))
-IF_MPSTAT(APPLET(mpstat, BB_DIR_BIN, BB_SUID_DROP))
-IF_NMETER(APPLET(nmeter, BB_DIR_USR_BIN, BB_SUID_DROP))
-IF_PMAP(APPLET(pmap, BB_DIR_USR_BIN, BB_SUID_DROP))
-IF_POWERTOP(APPLET(powertop, BB_DIR_USR_SBIN, BB_SUID_DROP))
-IF_PSTREE(APPLET(pstree, BB_DIR_USR_BIN, BB_SUID_DROP))
-IF_PWDX(APPLET(pwdx, BB_DIR_USR_BIN, BB_SUID_DROP))
-IF_SMEMCAP(APPLET(smemcap, BB_DIR_USR_BIN, BB_SUID_DROP))
-IF_ASH(APPLET(ash, BB_DIR_BIN, BB_SUID_DROP))
-IF_FEATURE_SH_IS_ASH(APPLET_ODDNAME(sh, ash, BB_DIR_BIN, BB_SUID_DROP, sh))
-IF_FEATURE_BASH_IS_ASH(APPLET_ODDNAME(bash, ash, BB_DIR_BIN, BB_SUID_DROP, bash))
-IF_CTTYHACK(APPLET(cttyhack, BB_DIR_BIN, BB_SUID_DROP))
-IF_HUSH(APPLET(hush, BB_DIR_BIN, BB_SUID_DROP))
-IF_MSH(APPLET(msh, BB_DIR_BIN, BB_SUID_DROP))
-IF_FEATURE_SH_IS_HUSH(APPLET_ODDNAME(sh, hush, BB_DIR_BIN, BB_SUID_DROP, sh))
-IF_FEATURE_BASH_IS_HUSH(APPLET_ODDNAME(bash, hush, BB_DIR_BIN, BB_SUID_DROP, bash))
-IF_BLOCKDEV(APPLET(blockdev, BB_DIR_SBIN, BB_SUID_DROP))
-IF_MDEV(APPLET(mdev, BB_DIR_SBIN, BB_SUID_DROP))
-IF_REV(APPLET(rev, BB_DIR_BIN, BB_SUID_DROP))
-IF_UDHCPC6(APPLET(udhcpc6, BB_DIR_USR_BIN, BB_SUID_DROP))
-IF_TEST(APPLET_NOFORK([, test, BB_DIR_USR_BIN, BB_SUID_DROP, test))
-IF_TEST(APPLET_NOFORK([[, test, BB_DIR_USR_BIN, BB_SUID_DROP, test))
-IF_ACPID(APPLET(acpid, BB_DIR_SBIN, BB_SUID_DROP))
-IF_ADDGROUP(APPLET(addgroup, BB_DIR_USR_SBIN, BB_SUID_DROP))
-IF_ADDUSER(APPLET(adduser, BB_DIR_USR_SBIN, BB_SUID_DROP))
-IF_ADJTIMEX(APPLET(adjtimex, BB_DIR_SBIN, BB_SUID_DROP))
-IF_AR(APPLET(ar, BB_DIR_USR_BIN, BB_SUID_DROP))
-IF_ARP(APPLET(arp, BB_DIR_SBIN, BB_SUID_DROP))
-IF_ARPING(APPLET(arping, BB_DIR_USR_SBIN, BB_SUID_DROP))
-IF_AWK(APPLET_NOEXEC(awk, awk, BB_DIR_USR_BIN, BB_SUID_DROP, awk))
-IF_BASENAME(APPLET_NOFORK(basename, basename, BB_DIR_USR_BIN, BB_SUID_DROP, basename))
-IF_BBCONFIG(APPLET(bbconfig, BB_DIR_BIN, BB_SUID_DROP))
-IF_BEEP(APPLET(beep, BB_DIR_USR_BIN, BB_SUID_DROP))
-IF_BLKID(APPLET(blkid, BB_DIR_SBIN, BB_SUID_DROP))
-IF_BRCTL(APPLET(brctl, BB_DIR_USR_SBIN, BB_SUID_DROP))
-IF_BZIP2(APPLET(bzip2, BB_DIR_USR_BIN, BB_SUID_DROP))
-IF_CAL(APPLET(cal, BB_DIR_USR_BIN, BB_SUID_DROP))
-IF_CAT(APPLET_NOFORK(cat, cat, BB_DIR_BIN, BB_SUID_DROP, cat))
-IF_CATV(APPLET(catv, BB_DIR_BIN, BB_SUID_DROP))
-IF_CHAT(APPLET(chat, BB_DIR_USR_SBIN, BB_SUID_DROP))
-IF_CHATTR(APPLET(chattr, BB_DIR_BIN, BB_SUID_DROP))
-IF_CHCON(APPLET(chcon, BB_DIR_USR_BIN, BB_SUID_DROP))
-IF_CHGRP(APPLET_NOEXEC(chgrp, chgrp, BB_DIR_BIN, BB_SUID_DROP, chgrp))
-IF_CHMOD(APPLET_NOEXEC(chmod, chmod, BB_DIR_BIN, BB_SUID_DROP, chmod))
-IF_CHOWN(APPLET_NOEXEC(chown, chown, BB_DIR_BIN, BB_SUID_DROP, chown))
-IF_CHPASSWD(APPLET(chpasswd, BB_DIR_USR_SBIN, BB_SUID_DROP))
-IF_CHPST(APPLET(chpst, BB_DIR_USR_BIN, BB_SUID_DROP))
-IF_CHROOT(APPLET(chroot, BB_DIR_USR_SBIN, BB_SUID_DROP))
-IF_CHRT(APPLET(chrt, BB_DIR_USR_BIN, BB_SUID_DROP))
-IF_CHVT(APPLET(chvt, BB_DIR_USR_BIN, BB_SUID_DROP))
-IF_CKSUM(APPLET_NOEXEC(cksum, cksum, BB_DIR_USR_BIN, BB_SUID_DROP, cksum))
-IF_CLEAR(APPLET(clear, BB_DIR_USR_BIN, BB_SUID_DROP))
-IF_CMP(APPLET(cmp, BB_DIR_USR_BIN, BB_SUID_DROP))
-IF_COMM(APPLET(comm, BB_DIR_USR_BIN, BB_SUID_DROP))
-IF_CP(APPLET_NOEXEC(cp, cp, BB_DIR_BIN, BB_SUID_DROP, cp))
-IF_CPIO(APPLET(cpio, BB_DIR_BIN, BB_SUID_DROP))
-IF_CROND(APPLET(crond, BB_DIR_USR_SBIN, BB_SUID_DROP))
-/* Needs to be run by root or be suid root - needs to change /var/spool/cron* files: */
-IF_CRONTAB(APPLET(crontab, BB_DIR_USR_BIN, BB_SUID_REQUIRE))
-IF_CRYPTPW(APPLET(cryptpw, BB_DIR_USR_BIN, BB_SUID_DROP))
-IF_CUT(APPLET_NOEXEC(cut, cut, BB_DIR_USR_BIN, BB_SUID_DROP, cut))
-IF_DC(APPLET(dc, BB_DIR_USR_BIN, BB_SUID_DROP))
-IF_DD(APPLET_NOEXEC(dd, dd, BB_DIR_BIN, BB_SUID_DROP, dd))
-IF_DEALLOCVT(APPLET(deallocvt, BB_DIR_USR_BIN, BB_SUID_DROP))
-IF_DELGROUP(APPLET_ODDNAME(delgroup, deluser, BB_DIR_USR_SBIN, BB_SUID_DROP, delgroup))
-IF_DELUSER(APPLET(deluser, BB_DIR_USR_SBIN, BB_SUID_DROP))
-IF_DEVFSD(APPLET(devfsd, BB_DIR_SBIN, BB_SUID_DROP))
-IF_DEVMEM(APPLET(devmem, BB_DIR_SBIN, BB_SUID_DROP))
-IF_DF(APPLET(df, BB_DIR_BIN, BB_SUID_DROP))
-IF_DHCPRELAY(APPLET(dhcprelay, BB_DIR_USR_SBIN, BB_SUID_DROP))
-IF_DIFF(APPLET(diff, BB_DIR_USR_BIN, BB_SUID_DROP))
-IF_DIRNAME(APPLET_NOFORK(dirname, dirname, BB_DIR_USR_BIN, BB_SUID_DROP, dirname))
-IF_DMESG(APPLET(dmesg, BB_DIR_BIN, BB_SUID_DROP))
-IF_DNSD(APPLET(dnsd, BB_DIR_USR_SBIN, BB_SUID_DROP))
-IF_HOSTNAME(APPLET_ODDNAME(dnsdomainname, hostname, BB_DIR_BIN, BB_SUID_DROP, dnsdomainname))
-IF_DOS2UNIX(APPLET_NOEXEC(dos2unix, dos2unix, BB_DIR_USR_BIN, BB_SUID_DROP, dos2unix))
-IF_DPKG(APPLET(dpkg, BB_DIR_USR_BIN, BB_SUID_DROP))
-IF_DPKG_DEB(APPLET_ODDNAME(dpkg-deb, dpkg_deb, BB_DIR_USR_BIN, BB_SUID_DROP, dpkg_deb))
-IF_DU(APPLET(du, BB_DIR_USR_BIN, BB_SUID_DROP))
-IF_DUMPKMAP(APPLET(dumpkmap, BB_DIR_BIN, BB_SUID_DROP))
-IF_DUMPLEASES(APPLET(dumpleases, BB_DIR_USR_BIN, BB_SUID_DROP))
-//IF_E2FSCK(APPLET(e2fsck, BB_DIR_SBIN, BB_SUID_DROP))
-//IF_E2LABEL(APPLET_ODDNAME(e2label, tune2fs, BB_DIR_SBIN, BB_SUID_DROP, e2label))
-IF_ECHO(APPLET_NOFORK(echo, echo, BB_DIR_BIN, BB_SUID_DROP, echo))
-IF_ED(APPLET(ed, BB_DIR_BIN, BB_SUID_DROP))
-IF_EJECT(APPLET(eject, BB_DIR_USR_BIN, BB_SUID_DROP))
-IF_ENV(APPLET_NOEXEC(env, env, BB_DIR_USR_BIN, BB_SUID_DROP, env))
-IF_ENVDIR(APPLET_ODDNAME(envdir, chpst, BB_DIR_USR_BIN, BB_SUID_DROP, envdir))
-IF_ENVUIDGID(APPLET_ODDNAME(envuidgid, chpst, BB_DIR_USR_BIN, BB_SUID_DROP, envuidgid))
-IF_ETHER_WAKE(APPLET_ODDNAME(ether-wake, ether_wake, BB_DIR_USR_SBIN, BB_SUID_DROP, ether_wake))
-IF_EXPAND(APPLET(expand, BB_DIR_USR_BIN, BB_SUID_DROP))
-IF_EXPR(APPLET(expr, BB_DIR_USR_BIN, BB_SUID_DROP))
-IF_FAKEIDENTD(APPLET(fakeidentd, BB_DIR_USR_SBIN, BB_SUID_DROP))
-IF_FALSE(APPLET_NOFORK(false, false, BB_DIR_BIN, BB_SUID_DROP, false))
-IF_FBSET(APPLET(fbset, BB_DIR_USR_SBIN, BB_SUID_DROP))
-IF_FBSPLASH(APPLET(fbsplash, BB_DIR_SBIN, BB_SUID_DROP))
-IF_FDFLUSH(APPLET_ODDNAME(fdflush, freeramdisk, BB_DIR_BIN, BB_SUID_DROP, fdflush))
-IF_FDFORMAT(APPLET(fdformat, BB_DIR_USR_SBIN, BB_SUID_DROP))
-IF_FDISK(APPLET(fdisk, BB_DIR_SBIN, BB_SUID_DROP))
-IF_FGCONSOLE(APPLET(fgconsole, BB_DIR_USR_BIN, BB_SUID_DROP))
-/* Benefits from suid root: better access to /dev/BLOCKDEVs: */
-IF_FINDFS(APPLET(findfs, BB_DIR_SBIN, BB_SUID_MAYBE))
-IF_FLASH_ERASEALL(APPLET(flash_eraseall, BB_DIR_USR_SBIN, BB_SUID_DROP))
-IF_FLASH_LOCK(APPLET_ODDNAME(flash_lock, flash_lock_unlock, BB_DIR_USR_SBIN, BB_SUID_DROP, flash_lock))
-IF_FLASH_UNLOCK(APPLET_ODDNAME(flash_unlock, flash_lock_unlock, BB_DIR_USR_SBIN, BB_SUID_DROP, flash_unlock))
-IF_FLASHCP(APPLET(flashcp, BB_DIR_USR_SBIN, BB_SUID_DROP))
-IF_FLOCK(APPLET(flock, BB_DIR_USR_BIN, BB_SUID_DROP))
-IF_FOLD(APPLET_NOEXEC(fold, fold, BB_DIR_USR_BIN, BB_SUID_DROP, fold))
-IF_FREE(APPLET(free, BB_DIR_USR_BIN, BB_SUID_DROP))
-IF_FREERAMDISK(APPLET(freeramdisk, BB_DIR_SBIN, BB_SUID_DROP))
-IF_FSCK(APPLET(fsck, BB_DIR_SBIN, BB_SUID_DROP))
-//IF_E2FSCK(APPLET_ODDNAME(fsck.ext2, e2fsck, BB_DIR_SBIN, BB_SUID_DROP, fsck_ext2))
-//IF_E2FSCK(APPLET_ODDNAME(fsck.ext3, e2fsck, BB_DIR_SBIN, BB_SUID_DROP, fsck_ext3))
-IF_FSCK_MINIX(APPLET_ODDNAME(fsck.minix, fsck_minix, BB_DIR_SBIN, BB_SUID_DROP, fsck_minix))
-IF_FSTRIM(APPLET(fstrim, BB_DIR_SBIN, BB_SUID_DROP))
-IF_FSYNC(APPLET_NOFORK(fsync, fsync, BB_DIR_BIN, BB_SUID_DROP, fsync))
-IF_FTPD(APPLET(ftpd, BB_DIR_USR_SBIN, BB_SUID_DROP))
-IF_FTPGET(APPLET_ODDNAME(ftpget, ftpgetput, BB_DIR_USR_BIN, BB_SUID_DROP, ftpget))
-IF_FTPPUT(APPLET_ODDNAME(ftpput, ftpgetput, BB_DIR_USR_BIN, BB_SUID_DROP, ftpput))
-IF_FUSER(APPLET(fuser, BB_DIR_USR_BIN, BB_SUID_DROP))
-IF_GETENFORCE(APPLET(getenforce, BB_DIR_USR_SBIN, BB_SUID_DROP))
-IF_GETOPT(APPLET(getopt, BB_DIR_BIN, BB_SUID_DROP))
-IF_GETSEBOOL(APPLET(getsebool, BB_DIR_USR_SBIN, BB_SUID_DROP))
-IF_GETTY(APPLET(getty, BB_DIR_SBIN, BB_SUID_DROP))
-IF_GUNZIP(APPLET(gunzip, BB_DIR_BIN, BB_SUID_DROP))
-IF_GZIP(APPLET(gzip, BB_DIR_BIN, BB_SUID_DROP))
-IF_HD(APPLET_NOEXEC(hd, hexdump, BB_DIR_USR_BIN, BB_SUID_DROP, hd))
-IF_HDPARM(APPLET(hdparm, BB_DIR_SBIN, BB_SUID_DROP))
-IF_HEAD(APPLET_NOEXEC(head, head, BB_DIR_USR_BIN, BB_SUID_DROP, head))
-IF_HEXDUMP(APPLET_NOEXEC(hexdump, hexdump, BB_DIR_USR_BIN, BB_SUID_DROP, hexdump))
-IF_HOSTNAME(APPLET(hostname, BB_DIR_BIN, BB_SUID_DROP))
-IF_HTTPD(APPLET(httpd, BB_DIR_USR_SBIN, BB_SUID_DROP))
-IF_HWCLOCK(APPLET(hwclock, BB_DIR_SBIN, BB_SUID_DROP))
-IF_IFCONFIG(APPLET(ifconfig, BB_DIR_SBIN, BB_SUID_DROP))
-IF_IFUPDOWN(APPLET_ODDNAME(ifdown, ifupdown, BB_DIR_SBIN, BB_SUID_DROP, ifdown))
-IF_IFENSLAVE(APPLET(ifenslave, BB_DIR_SBIN, BB_SUID_DROP))
-IF_IFPLUGD(APPLET(ifplugd, BB_DIR_USR_SBIN, BB_SUID_DROP))
-IF_IFUPDOWN(APPLET_ODDNAME(ifup, ifupdown, BB_DIR_SBIN, BB_SUID_DROP, ifup))
-IF_INETD(APPLET(inetd, BB_DIR_USR_SBIN, BB_SUID_DROP))
-IF_INOTIFYD(APPLET(inotifyd, BB_DIR_SBIN, BB_SUID_DROP))
-IF_INSTALL(APPLET(install, BB_DIR_USR_BIN, BB_SUID_DROP))
-IF_IONICE(APPLET(ionice, BB_DIR_BIN, BB_SUID_DROP))
-#if ENABLE_FEATURE_IP_ADDRESS \
- || ENABLE_FEATURE_IP_ROUTE \
- || ENABLE_FEATURE_IP_LINK \
- || ENABLE_FEATURE_IP_TUNNEL \
- || ENABLE_FEATURE_IP_RULE
-IF_IP(APPLET(ip, BB_DIR_SBIN, BB_SUID_DROP))
-#endif
-IF_IPADDR(APPLET(ipaddr, BB_DIR_SBIN, BB_SUID_DROP))
-IF_IPCALC(APPLET(ipcalc, BB_DIR_BIN, BB_SUID_DROP))
-IF_IPCRM(APPLET(ipcrm, BB_DIR_USR_BIN, BB_SUID_DROP))
-IF_IPCS(APPLET(ipcs, BB_DIR_USR_BIN, BB_SUID_DROP))
-IF_IPLINK(APPLET(iplink, BB_DIR_SBIN, BB_SUID_DROP))
-IF_IPROUTE(APPLET(iproute, BB_DIR_SBIN, BB_SUID_DROP))
-IF_IPRULE(APPLET(iprule, BB_DIR_SBIN, BB_SUID_DROP))
-IF_IPTUNNEL(APPLET(iptunnel, BB_DIR_SBIN, BB_SUID_DROP))
-IF_KBD_MODE(APPLET(kbd_mode, BB_DIR_BIN, BB_SUID_DROP))
-IF_KILL(APPLET(kill, BB_DIR_BIN, BB_SUID_DROP))
-IF_KILLALL(APPLET_ODDNAME(killall, kill, BB_DIR_USR_BIN, BB_SUID_DROP, killall))
-IF_KILLALL5(APPLET_ODDNAME(killall5, kill, BB_DIR_USR_SBIN, BB_SUID_DROP, killall5))
-IF_KLOGD(APPLET(klogd, BB_DIR_SBIN, BB_SUID_DROP))
-IF_LAST(APPLET(last, BB_DIR_USR_BIN, BB_SUID_DROP))
-//IF_LENGTH(APPLET_NOFORK(length, length, BB_DIR_USR_BIN, BB_SUID_DROP, length))
-IF_LESS(APPLET(less, BB_DIR_USR_BIN, BB_SUID_DROP))
-IF_SETARCH(APPLET_ODDNAME(linux32, setarch, BB_DIR_BIN, BB_SUID_DROP, linux32))
-IF_SETARCH(APPLET_ODDNAME(linux64, setarch, BB_DIR_BIN, BB_SUID_DROP, linux64))
-IF_LN(APPLET_NOEXEC(ln, ln, BB_DIR_BIN, BB_SUID_DROP, ln))
-IF_LOAD_POLICY(APPLET(load_policy, BB_DIR_USR_SBIN, BB_SUID_DROP))
-IF_LOADFONT(APPLET(loadfont, BB_DIR_USR_SBIN, BB_SUID_DROP))
-IF_LOADKMAP(APPLET(loadkmap, BB_DIR_SBIN, BB_SUID_DROP))
-IF_LOGGER(APPLET(logger, BB_DIR_USR_BIN, BB_SUID_DROP))
-/* Needs to be run by root or be suid root - needs to change uid and gid: */
-IF_LOGIN(APPLET(login, BB_DIR_BIN, BB_SUID_REQUIRE))
-IF_LOGNAME(APPLET_NOFORK(logname, logname, BB_DIR_USR_BIN, BB_SUID_DROP, logname))
-IF_LOGREAD(APPLET(logread, BB_DIR_SBIN, BB_SUID_DROP))
-IF_LOSETUP(APPLET(losetup, BB_DIR_SBIN, BB_SUID_DROP))
-IF_LPD(APPLET(lpd, BB_DIR_USR_SBIN, BB_SUID_DROP))
-IF_LPQ(APPLET_ODDNAME(lpq, lpqr, BB_DIR_USR_BIN, BB_SUID_DROP, lpq))
-IF_LPR(APPLET_ODDNAME(lpr, lpqr, BB_DIR_USR_BIN, BB_SUID_DROP, lpr))
-IF_LS(APPLET_NOEXEC(ls, ls, BB_DIR_BIN, BB_SUID_DROP, ls))
-IF_LSATTR(APPLET(lsattr, BB_DIR_BIN, BB_SUID_DROP))
-IF_LSPCI(APPLET(lspci, BB_DIR_USR_BIN, BB_SUID_DROP))
-IF_LSUSB(APPLET(lsusb, BB_DIR_USR_BIN, BB_SUID_DROP))
-IF_UNLZMA(APPLET_ODDNAME(lzcat, unlzma, BB_DIR_USR_BIN, BB_SUID_DROP, lzcat))
-IF_LZMA(APPLET_ODDNAME(lzma, unlzma, BB_DIR_USR_BIN, BB_SUID_DROP, lzma))
-IF_LZOP(APPLET(lzop, BB_DIR_BIN, BB_SUID_DROP))
-IF_LZOP(APPLET_ODDNAME(lzopcat, lzop, BB_DIR_USR_BIN, BB_SUID_DROP, lzopcat))
-IF_MAKEDEVS(APPLET(makedevs, BB_DIR_SBIN, BB_SUID_DROP))
-IF_MAKEMIME(APPLET(makemime, BB_DIR_BIN, BB_SUID_DROP))
-IF_MAN(APPLET(man, BB_DIR_SBIN, BB_SUID_DROP))
-IF_MATCHPATHCON(APPLET(matchpathcon, BB_DIR_USR_SBIN, BB_SUID_DROP))
-IF_MD5SUM(APPLET_NOEXEC(md5sum, md5_sha1_sum, BB_DIR_USR_BIN, BB_SUID_DROP, md5sum))
-IF_MICROCOM(APPLET(microcom, BB_DIR_USR_BIN, BB_SUID_DROP))
-IF_MKDIR(APPLET_NOFORK(mkdir, mkdir, BB_DIR_BIN, BB_SUID_DROP, mkdir))
-IF_MKFS_VFAT(APPLET_ODDNAME(mkdosfs, mkfs_vfat, BB_DIR_SBIN, BB_SUID_DROP, mkfs_vfat))
-IF_MKFS_EXT2(APPLET_ODDNAME(mke2fs, mkfs_ext2, BB_DIR_SBIN, BB_SUID_DROP, mkfs_ext2))
-IF_MKFIFO(APPLET_NOEXEC(mkfifo, mkfifo, BB_DIR_USR_BIN, BB_SUID_DROP, mkfifo))
-IF_MKFS_EXT2(APPLET_ODDNAME(mkfs.ext2, mkfs_ext2, BB_DIR_SBIN, BB_SUID_DROP, mkfs_ext2))
-//IF_MKE2FS(APPLET_ODDNAME(mkfs.ext3, mke2fs, BB_DIR_SBIN, BB_SUID_DROP, mkfs_ext3))
-IF_MKFS_MINIX(APPLET_ODDNAME(mkfs.minix, mkfs_minix, BB_DIR_SBIN, BB_SUID_DROP, mkfs_minix))
-IF_MKFS_REISER(APPLET_ODDNAME(mkfs.reiser, mkfs_reiser, BB_DIR_SBIN, BB_SUID_DROP, mkfs_reiser))
-IF_MKFS_VFAT(APPLET_ODDNAME(mkfs.vfat, mkfs_vfat, BB_DIR_SBIN, BB_SUID_DROP, mkfs_vfat))
-IF_MKNOD(APPLET_NOEXEC(mknod, mknod, BB_DIR_BIN, BB_SUID_DROP, mknod))
-IF_CRYPTPW(APPLET_ODDNAME(mkpasswd, cryptpw, BB_DIR_USR_BIN, BB_SUID_DROP, mkpasswd))
-IF_MKSWAP(APPLET(mkswap, BB_DIR_SBIN, BB_SUID_DROP))
-IF_MKTEMP(APPLET(mktemp, BB_DIR_BIN, BB_SUID_DROP))
-IF_MORE(APPLET(more, BB_DIR_BIN, BB_SUID_DROP))
-/* On full-blown systems, requires suid for user mounts.
- * But it's not unthinkable to have it available in non-suid flavor on some systems,
- * for viewing mount table.
- * Therefore we use BB_SUID_MAYBE instead of BB_SUID_REQUIRE: */
-IF_MOUNT(APPLET(mount, BB_DIR_BIN, IF_DESKTOP(BB_SUID_MAYBE) IF_NOT_DESKTOP(BB_SUID_DROP)))
-IF_MOUNTPOINT(APPLET(mountpoint, BB_DIR_BIN, BB_SUID_DROP))
-IF_MT(APPLET(mt, BB_DIR_BIN, BB_SUID_DROP))
-IF_MV(APPLET(mv, BB_DIR_BIN, BB_SUID_DROP))
-IF_NAMEIF(APPLET(nameif, BB_DIR_SBIN, BB_SUID_DROP))
-IF_NC(APPLET(nc, BB_DIR_USR_BIN, BB_SUID_DROP))
-IF_NETSTAT(APPLET(netstat, BB_DIR_BIN, BB_SUID_DROP))
-IF_NICE(APPLET(nice, BB_DIR_BIN, BB_SUID_DROP))
-IF_NOHUP(APPLET(nohup, BB_DIR_USR_BIN, BB_SUID_DROP))
-IF_NSLOOKUP(APPLET(nslookup, BB_DIR_USR_BIN, BB_SUID_DROP))
-IF_NTPD(APPLET(ntpd, BB_DIR_USR_SBIN, BB_SUID_DROP))
-IF_OD(APPLET(od, BB_DIR_USR_BIN, BB_SUID_DROP))
-IF_OPENVT(APPLET(openvt, BB_DIR_USR_BIN, BB_SUID_DROP))
-//IF_PARSE(APPLET(parse, BB_DIR_USR_BIN, BB_SUID_DROP))
-/* Needs to be run by root or be suid root - needs to change /etc/{passwd,shadow}: */
-IF_PASSWD(APPLET(passwd, BB_DIR_USR_BIN, BB_SUID_REQUIRE))
-IF_PGREP(APPLET(pgrep, BB_DIR_USR_BIN, BB_SUID_DROP))
-IF_PIDOF(APPLET(pidof, BB_DIR_BIN, BB_SUID_DROP))
-IF_PIPE_PROGRESS(APPLET(pipe_progress, BB_DIR_BIN, BB_SUID_DROP))
-IF_PIVOT_ROOT(APPLET(pivot_root, BB_DIR_SBIN, BB_SUID_DROP))
-IF_PKILL(APPLET_ODDNAME(pkill, pgrep, BB_DIR_USR_BIN, BB_SUID_DROP, pkill))
-IF_POPMAILDIR(APPLET(popmaildir, BB_DIR_USR_SBIN, BB_SUID_DROP))
-IF_PRINTENV(APPLET_NOFORK(printenv, printenv, BB_DIR_BIN, BB_SUID_DROP, printenv))
-IF_PRINTF(APPLET_NOFORK(printf, printf, BB_DIR_USR_BIN, BB_SUID_DROP, printf))
-IF_PS(APPLET(ps, BB_DIR_BIN, BB_SUID_DROP))
-IF_PSCAN(APPLET(pscan, BB_DIR_USR_BIN, BB_SUID_DROP))
-IF_PWD(APPLET_NOFORK(pwd, pwd, BB_DIR_BIN, BB_SUID_DROP, pwd))
-IF_RAIDAUTORUN(APPLET(raidautorun, BB_DIR_SBIN, BB_SUID_DROP))
-IF_RDATE(APPLET(rdate, BB_DIR_USR_SBIN, BB_SUID_DROP))
-IF_RDEV(APPLET(rdev, BB_DIR_USR_SBIN, BB_SUID_DROP))
-IF_READAHEAD(APPLET(readahead, BB_DIR_USR_SBIN, BB_SUID_DROP))
-IF_READLINK(APPLET(readlink, BB_DIR_USR_BIN, BB_SUID_DROP))
-IF_READPROFILE(APPLET(readprofile, BB_DIR_USR_SBIN, BB_SUID_DROP))
-IF_REALPATH(APPLET(realpath, BB_DIR_USR_BIN, BB_SUID_DROP))
-IF_REFORMIME(APPLET(reformime, BB_DIR_BIN, BB_SUID_DROP))
-IF_RENICE(APPLET(renice, BB_DIR_USR_BIN, BB_SUID_DROP))
-IF_RESET(APPLET(reset, BB_DIR_USR_BIN, BB_SUID_DROP))
-IF_RESIZE(APPLET(resize, BB_DIR_USR_BIN, BB_SUID_DROP))
-IF_RESTORECON(APPLET_ODDNAME(restorecon, setfiles, BB_DIR_SBIN, BB_SUID_DROP, restorecon))
-IF_RFKILL(APPLET(rfkill, BB_DIR_USR_SBIN, BB_SUID_DROP))
-IF_RM(APPLET_NOFORK(rm, rm, BB_DIR_BIN, BB_SUID_DROP, rm))
-IF_RMDIR(APPLET_NOFORK(rmdir, rmdir, BB_DIR_BIN, BB_SUID_DROP, rmdir))
-IF_ROUTE(APPLET(route, BB_DIR_SBIN, BB_SUID_DROP))
-IF_RPM(APPLET(rpm, BB_DIR_BIN, BB_SUID_DROP))
-IF_RPM2CPIO(APPLET(rpm2cpio, BB_DIR_USR_BIN, BB_SUID_DROP))
-IF_RTCWAKE(APPLET(rtcwake, BB_DIR_USR_SBIN, BB_SUID_DROP))
-IF_RUN_PARTS(APPLET_ODDNAME(run-parts, run_parts, BB_DIR_BIN, BB_SUID_DROP, run_parts))
-IF_RUNCON(APPLET(runcon, BB_DIR_USR_BIN, BB_SUID_DROP))
-IF_RUNLEVEL(APPLET(runlevel, BB_DIR_SBIN, BB_SUID_DROP))
-IF_RUNSV(APPLET(runsv, BB_DIR_USR_BIN, BB_SUID_DROP))
-IF_RUNSVDIR(APPLET(runsvdir, BB_DIR_USR_BIN, BB_SUID_DROP))
-IF_RX(APPLET(rx, BB_DIR_USR_BIN, BB_SUID_DROP))
-IF_SCRIPT(APPLET(script, BB_DIR_USR_BIN, BB_SUID_DROP))
-IF_SCRIPTREPLAY(APPLET(scriptreplay, BB_DIR_BIN, BB_SUID_DROP))
-IF_SED(APPLET(sed, BB_DIR_BIN, BB_SUID_DROP))
-IF_SELINUXENABLED(APPLET(selinuxenabled, BB_DIR_USR_SBIN, BB_SUID_DROP))
-IF_SENDMAIL(APPLET(sendmail, BB_DIR_USR_SBIN, BB_SUID_DROP))
-IF_SEQ(APPLET_NOFORK(seq, seq, BB_DIR_USR_BIN, BB_SUID_DROP, seq))
-IF_SESTATUS(APPLET(sestatus, BB_DIR_USR_SBIN, BB_SUID_DROP))
-IF_SETARCH(APPLET(setarch, BB_DIR_BIN, BB_SUID_DROP))
-IF_SETCONSOLE(APPLET(setconsole, BB_DIR_SBIN, BB_SUID_DROP))
-IF_SETENFORCE(APPLET(setenforce, BB_DIR_USR_SBIN, BB_SUID_DROP))
-IF_SETFILES(APPLET(setfiles, BB_DIR_SBIN, BB_SUID_DROP))
-IF_SETFONT(APPLET(setfont, BB_DIR_USR_SBIN, BB_SUID_DROP))
-IF_SETKEYCODES(APPLET(setkeycodes, BB_DIR_USR_BIN, BB_SUID_DROP))
-IF_SETLOGCONS(APPLET(setlogcons, BB_DIR_USR_SBIN, BB_SUID_DROP))
-IF_SETSEBOOL(APPLET(setsebool, BB_DIR_USR_SBIN, BB_SUID_DROP))
-IF_SETSID(APPLET(setsid, BB_DIR_USR_BIN, BB_SUID_DROP))
-IF_SETUIDGID(APPLET_ODDNAME(setuidgid, chpst, BB_DIR_USR_BIN, BB_SUID_DROP, setuidgid))
-IF_SHA1SUM(APPLET_NOEXEC(sha1sum, md5_sha1_sum, BB_DIR_USR_BIN, BB_SUID_DROP, sha1sum))
-IF_SHA3SUM(APPLET_NOEXEC(sha3sum, md5_sha1_sum, BB_DIR_USR_BIN, BB_SUID_DROP, sha3sum))
-IF_SHA256SUM(APPLET_NOEXEC(sha256sum, md5_sha1_sum, BB_DIR_USR_BIN, BB_SUID_DROP, sha256sum))
-IF_SHA512SUM(APPLET_NOEXEC(sha512sum, md5_sha1_sum, BB_DIR_USR_BIN, BB_SUID_DROP, sha512sum))
-IF_SHOWKEY(APPLET(showkey, BB_DIR_USR_BIN, BB_SUID_DROP))
-IF_SLATTACH(APPLET(slattach, BB_DIR_SBIN, BB_SUID_DROP))
-/* Do not make this applet NOFORK. It breaks ^C-ing of pauses in shells: */
-IF_SLEEP(APPLET(sleep, BB_DIR_BIN, BB_SUID_DROP))
-IF_SOFTLIMIT(APPLET_ODDNAME(softlimit, chpst, BB_DIR_USR_BIN, BB_SUID_DROP, softlimit))
-IF_SORT(APPLET_NOEXEC(sort, sort, BB_DIR_USR_BIN, BB_SUID_DROP, sort))
-IF_SPLIT(APPLET(split, BB_DIR_USR_BIN, BB_SUID_DROP))
-IF_START_STOP_DAEMON(APPLET_ODDNAME(start-stop-daemon, start_stop_daemon, BB_DIR_SBIN, BB_SUID_DROP, start_stop_daemon))
-IF_STAT(APPLET(stat, BB_DIR_BIN, BB_SUID_DROP))
-IF_STRINGS(APPLET(strings, BB_DIR_USR_BIN, BB_SUID_DROP))
-IF_STTY(APPLET(stty, BB_DIR_BIN, BB_SUID_DROP))
-/* Needs to be run by root or be suid root - needs to change uid and gid: */
-IF_SU(APPLET(su, BB_DIR_BIN, BB_SUID_REQUIRE))
-IF_SULOGIN(APPLET(sulogin, BB_DIR_SBIN, BB_SUID_DROP))
-IF_SUM(APPLET(sum, BB_DIR_USR_BIN, BB_SUID_DROP))
-IF_SV(APPLET(sv, BB_DIR_USR_BIN, BB_SUID_DROP))
-IF_SVLOGD(APPLET(svlogd, BB_DIR_USR_SBIN, BB_SUID_DROP))
-IF_SWAPONOFF(APPLET_ODDNAME(swapoff, swap_on_off, BB_DIR_SBIN, BB_SUID_DROP, swapoff))
-IF_SWAPONOFF(APPLET_ODDNAME(swapon, swap_on_off, BB_DIR_SBIN, BB_SUID_DROP, swapon))
-IF_SWITCH_ROOT(APPLET(switch_root, BB_DIR_SBIN, BB_SUID_DROP))
-IF_SYNC(APPLET_NOFORK(sync, sync, BB_DIR_BIN, BB_SUID_DROP, sync))
-IF_BB_SYSCTL(APPLET(sysctl, BB_DIR_SBIN, BB_SUID_DROP))
-IF_SYSLOGD(APPLET(syslogd, BB_DIR_SBIN, BB_SUID_DROP))
-IF_TAC(APPLET_NOEXEC(tac, tac, BB_DIR_USR_BIN, BB_SUID_DROP, tac))
-IF_TAIL(APPLET(tail, BB_DIR_USR_BIN, BB_SUID_DROP))
-IF_TAR(APPLET(tar, BB_DIR_BIN, BB_SUID_DROP))
-IF_TASKSET(APPLET(taskset, BB_DIR_USR_BIN, BB_SUID_DROP))
-/* IF_TC(APPLET(tc, BB_DIR_SBIN, BB_SUID_DROP)) */
-IF_TCPSVD(APPLET_ODDNAME(tcpsvd, tcpudpsvd, BB_DIR_USR_BIN, BB_SUID_DROP, tcpsvd))
-IF_TEE(APPLET(tee, BB_DIR_USR_BIN, BB_SUID_DROP))
-IF_TELNET(APPLET(telnet, BB_DIR_USR_BIN, BB_SUID_DROP))
-IF_TELNETD(APPLET(telnetd, BB_DIR_USR_SBIN, BB_SUID_DROP))
-IF_TEST(APPLET_NOFORK(test, test, BB_DIR_USR_BIN, BB_SUID_DROP, test))
-#if ENABLE_FEATURE_TFTP_GET || ENABLE_FEATURE_TFTP_PUT
-IF_TFTP(APPLET(tftp, BB_DIR_USR_BIN, BB_SUID_DROP))
-IF_TFTPD(APPLET(tftpd, BB_DIR_USR_SBIN, BB_SUID_DROP))
-#endif
-IF_TIME(APPLET(time, BB_DIR_USR_BIN, BB_SUID_DROP))
-IF_TIMEOUT(APPLET(timeout, BB_DIR_USR_BIN, BB_SUID_DROP))
-IF_TOP(APPLET(top, BB_DIR_USR_BIN, BB_SUID_DROP))
-IF_TR(APPLET(tr, BB_DIR_USR_BIN, BB_SUID_DROP))
-/* Needs socket(AF_INET, SOCK_RAW, IPPROTO_ICMP), therefore BB_SUID_MAYBE: */
-IF_TRACEROUTE(APPLET(traceroute, BB_DIR_USR_BIN, BB_SUID_MAYBE))
-IF_TRACEROUTE6(APPLET(traceroute6, BB_DIR_USR_BIN, BB_SUID_MAYBE))
-IF_TRUE(APPLET_NOFORK(true, true, BB_DIR_BIN, BB_SUID_DROP, true))
-IF_TTY(APPLET(tty, BB_DIR_USR_BIN, BB_SUID_DROP))
-IF_TTYSIZE(APPLET(ttysize, BB_DIR_USR_BIN, BB_SUID_DROP))
-IF_TUNCTL(APPLET(tunctl, BB_DIR_SBIN, BB_SUID_DROP))
-IF_TUNE2FS(APPLET(tune2fs, BB_DIR_SBIN, BB_SUID_DROP))
-IF_UDHCPC(APPLET(udhcpc, BB_DIR_SBIN, BB_SUID_DROP))
-IF_UDHCPD(APPLET(udhcpd, BB_DIR_USR_SBIN, BB_SUID_DROP))
-IF_UDPSVD(APPLET_ODDNAME(udpsvd, tcpudpsvd, BB_DIR_USR_BIN, BB_SUID_DROP, udpsvd))
-IF_UMOUNT(APPLET(umount, BB_DIR_BIN, BB_SUID_DROP))
-IF_UNAME(APPLET(uname, BB_DIR_BIN, BB_SUID_DROP))
-IF_UNCOMPRESS(APPLET(uncompress, BB_DIR_BIN, BB_SUID_DROP))
-IF_UNEXPAND(APPLET_ODDNAME(unexpand, expand, BB_DIR_USR_BIN, BB_SUID_DROP, unexpand))
-IF_UNIQ(APPLET(uniq, BB_DIR_USR_BIN, BB_SUID_DROP))
-IF_UNIX2DOS(APPLET_NOEXEC(unix2dos, dos2unix, BB_DIR_USR_BIN, BB_SUID_DROP, unix2dos))
-IF_UNXZ(APPLET(unxz, BB_DIR_USR_BIN, BB_SUID_DROP))
-IF_UNLZMA(APPLET(unlzma, BB_DIR_USR_BIN, BB_SUID_DROP))
-IF_LZOP(APPLET_ODDNAME(unlzop, lzop, BB_DIR_USR_BIN, BB_SUID_DROP, unlzop))
-IF_UNZIP(APPLET(unzip, BB_DIR_USR_BIN, BB_SUID_DROP))
-IF_UPTIME(APPLET(uptime, BB_DIR_USR_BIN, BB_SUID_DROP))
-IF_USLEEP(APPLET_NOFORK(usleep, usleep, BB_DIR_BIN, BB_SUID_DROP, usleep))
-IF_UUDECODE(APPLET(uudecode, BB_DIR_USR_BIN, BB_SUID_DROP))
-IF_UUENCODE(APPLET(uuencode, BB_DIR_USR_BIN, BB_SUID_DROP))
-IF_VCONFIG(APPLET(vconfig, BB_DIR_SBIN, BB_SUID_DROP))
-/* Needs to be run by root or be suid root - needs to change uid and gid: */
-IF_VLOCK(APPLET(vlock, BB_DIR_USR_BIN, BB_SUID_REQUIRE))
-IF_VOLNAME(APPLET(volname, BB_DIR_USR_BIN, BB_SUID_DROP))
-/* Needs to be run by root or be suid root - needs to write to /dev/TTY: */
-IF_WALL(APPLET(wall, BB_DIR_USR_BIN, BB_SUID_REQUIRE))
-IF_WATCH(APPLET(watch, BB_DIR_BIN, BB_SUID_DROP))
-IF_WATCHDOG(APPLET(watchdog, BB_DIR_SBIN, BB_SUID_DROP))
-IF_WC(APPLET(wc, BB_DIR_USR_BIN, BB_SUID_DROP))
-IF_WGET(APPLET(wget, BB_DIR_USR_BIN, BB_SUID_DROP))
-IF_WHICH(APPLET(which, BB_DIR_USR_BIN, BB_SUID_DROP))
-IF_WHOAMI(APPLET_NOFORK(whoami, whoami, BB_DIR_USR_BIN, BB_SUID_DROP, whoami))
-IF_UNXZ(APPLET_ODDNAME(xzcat, unxz, BB_DIR_USR_BIN, BB_SUID_DROP, xzcat))
-IF_XZ(APPLET_ODDNAME(xz, unxz, BB_DIR_USR_BIN, BB_SUID_DROP, xz))
-IF_YES(APPLET_NOFORK(yes, yes, BB_DIR_USR_BIN, BB_SUID_DROP, yes))
-IF_GUNZIP(APPLET_ODDNAME(zcat, gunzip, BB_DIR_BIN, BB_SUID_DROP, zcat))
-IF_ZCIP(APPLET(zcip, BB_DIR_SBIN, BB_SUID_DROP))
-
-#if !defined(PROTOTYPES) && !defined(NAME_MAIN_CNAME) && !defined(MAKE_USAGE)
-};
-#endif
-
-#undef APPLET
-#undef APPLET_ODDNAME
-#undef APPLET_NOEXEC
-#undef APPLET_NOFORK
diff --git a/include-full/autoconf.h b/include-full/autoconf.h
deleted file mode 100644
index 7cb94db..0000000
--- a/include-full/autoconf.h
+++ b/dev/null
@@ -1,3682 +0,0 @@
-/*
- * Automatically generated C config: don't edit
- * Busybox version: 1.21.0-jb
- */
-#define AUTOCONF_TIMESTAMP "2013-04-17 15:58 -0700"
-
-#define CONFIG_HAVE_DOT_CONFIG 1
-#define ENABLE_HAVE_DOT_CONFIG 1
-#define IF_HAVE_DOT_CONFIG(...) __VA_ARGS__
-#define IF_NOT_HAVE_DOT_CONFIG(...)
-
-/*
- * Busybox Settings
- */
-
-/*
- * General Configuration
- */
-#define CONFIG_DESKTOP 1
-#define ENABLE_DESKTOP 1
-#define IF_DESKTOP(...) __VA_ARGS__
-#define IF_NOT_DESKTOP(...)
-#undef CONFIG_EXTRA_COMPAT
-#define ENABLE_EXTRA_COMPAT 0
-#define IF_EXTRA_COMPAT(...)
-#define IF_NOT_EXTRA_COMPAT(...) __VA_ARGS__
-#undef CONFIG_INCLUDE_SUSv2
-#define ENABLE_INCLUDE_SUSv2 0
-#define IF_INCLUDE_SUSv2(...)
-#define IF_NOT_INCLUDE_SUSv2(...) __VA_ARGS__
-#undef CONFIG_USE_PORTABLE_CODE
-#define ENABLE_USE_PORTABLE_CODE 0
-#define IF_USE_PORTABLE_CODE(...)
-#define IF_NOT_USE_PORTABLE_CODE(...) __VA_ARGS__
-#define CONFIG_PLATFORM_LINUX 1
-#define ENABLE_PLATFORM_LINUX 1
-#define IF_PLATFORM_LINUX(...) __VA_ARGS__
-#define IF_NOT_PLATFORM_LINUX(...)
-#define CONFIG_FEATURE_BUFFERS_USE_MALLOC 1
-#define ENABLE_FEATURE_BUFFERS_USE_MALLOC 1
-#define IF_FEATURE_BUFFERS_USE_MALLOC(...) __VA_ARGS__
-#define IF_NOT_FEATURE_BUFFERS_USE_MALLOC(...)
-#undef CONFIG_FEATURE_BUFFERS_GO_ON_STACK
-#define ENABLE_FEATURE_BUFFERS_GO_ON_STACK 0
-#define IF_FEATURE_BUFFERS_GO_ON_STACK(...)
-#define IF_NOT_FEATURE_BUFFERS_GO_ON_STACK(...) __VA_ARGS__
-#undef CONFIG_FEATURE_BUFFERS_GO_IN_BSS
-#define ENABLE_FEATURE_BUFFERS_GO_IN_BSS 0
-#define IF_FEATURE_BUFFERS_GO_IN_BSS(...)
-#define IF_NOT_FEATURE_BUFFERS_GO_IN_BSS(...) __VA_ARGS__
-#define CONFIG_SHOW_USAGE 1
-#define ENABLE_SHOW_USAGE 1
-#define IF_SHOW_USAGE(...) __VA_ARGS__
-#define IF_NOT_SHOW_USAGE(...)
-#define CONFIG_FEATURE_VERBOSE_USAGE 1
-#define ENABLE_FEATURE_VERBOSE_USAGE 1
-#define IF_FEATURE_VERBOSE_USAGE(...) __VA_ARGS__
-#define IF_NOT_FEATURE_VERBOSE_USAGE(...)
-#define CONFIG_FEATURE_COMPRESS_USAGE 1
-#define ENABLE_FEATURE_COMPRESS_USAGE 1
-#define IF_FEATURE_COMPRESS_USAGE(...) __VA_ARGS__
-#define IF_NOT_FEATURE_COMPRESS_USAGE(...)
-#undef CONFIG_FEATURE_INSTALLER
-#define ENABLE_FEATURE_INSTALLER 0
-#define IF_FEATURE_INSTALLER(...)
-#define IF_NOT_FEATURE_INSTALLER(...) __VA_ARGS__
-#define CONFIG_INSTALL_NO_USR 1
-#define ENABLE_INSTALL_NO_USR 1
-#define IF_INSTALL_NO_USR(...) __VA_ARGS__
-#define IF_NOT_INSTALL_NO_USR(...)
-#undef CONFIG_LOCALE_SUPPORT
-#define ENABLE_LOCALE_SUPPORT 0
-#define IF_LOCALE_SUPPORT(...)
-#define IF_NOT_LOCALE_SUPPORT(...) __VA_ARGS__
-#define CONFIG_UNICODE_SUPPORT 1
-#define ENABLE_UNICODE_SUPPORT 1
-#define IF_UNICODE_SUPPORT(...) __VA_ARGS__
-#define IF_NOT_UNICODE_SUPPORT(...)
-#undef CONFIG_UNICODE_USING_LOCALE
-#define ENABLE_UNICODE_USING_LOCALE 0
-#define IF_UNICODE_USING_LOCALE(...)
-#define IF_NOT_UNICODE_USING_LOCALE(...) __VA_ARGS__
-#undef CONFIG_FEATURE_CHECK_UNICODE_IN_ENV
-#define ENABLE_FEATURE_CHECK_UNICODE_IN_ENV 0
-#define IF_FEATURE_CHECK_UNICODE_IN_ENV(...)
-#define IF_NOT_FEATURE_CHECK_UNICODE_IN_ENV(...) __VA_ARGS__
-#define CONFIG_SUBST_WCHAR 63
-#define ENABLE_SUBST_WCHAR 1
-#define IF_SUBST_WCHAR(...) __VA_ARGS__
-#define IF_NOT_SUBST_WCHAR(...)
-#define CONFIG_LAST_SUPPORTED_WCHAR 0
-#define ENABLE_LAST_SUPPORTED_WCHAR 1
-#define IF_LAST_SUPPORTED_WCHAR(...) __VA_ARGS__
-#define IF_NOT_LAST_SUPPORTED_WCHAR(...)
-#undef CONFIG_UNICODE_COMBINING_WCHARS
-#define ENABLE_UNICODE_COMBINING_WCHARS 0
-#define IF_UNICODE_COMBINING_WCHARS(...)
-#define IF_NOT_UNICODE_COMBINING_WCHARS(...) __VA_ARGS__
-#define CONFIG_UNICODE_WIDE_WCHARS 1
-#define ENABLE_UNICODE_WIDE_WCHARS 1
-#define IF_UNICODE_WIDE_WCHARS(...) __VA_ARGS__
-#define IF_NOT_UNICODE_WIDE_WCHARS(...)
-#undef CONFIG_UNICODE_BIDI_SUPPORT
-#define ENABLE_UNICODE_BIDI_SUPPORT 0
-#define IF_UNICODE_BIDI_SUPPORT(...)
-#define IF_NOT_UNICODE_BIDI_SUPPORT(...) __VA_ARGS__
-#undef CONFIG_UNICODE_NEUTRAL_TABLE
-#define ENABLE_UNICODE_NEUTRAL_TABLE 0
-#define IF_UNICODE_NEUTRAL_TABLE(...)
-#define IF_NOT_UNICODE_NEUTRAL_TABLE(...) __VA_ARGS__
-#define CONFIG_UNICODE_PRESERVE_BROKEN 1
-#define ENABLE_UNICODE_PRESERVE_BROKEN 1
-#define IF_UNICODE_PRESERVE_BROKEN(...) __VA_ARGS__
-#define IF_NOT_UNICODE_PRESERVE_BROKEN(...)
-#define CONFIG_LONG_OPTS 1
-#define ENABLE_LONG_OPTS 1
-#define IF_LONG_OPTS(...) __VA_ARGS__
-#define IF_NOT_LONG_OPTS(...)
-#define CONFIG_FEATURE_DEVPTS 1
-#define ENABLE_FEATURE_DEVPTS 1
-#define IF_FEATURE_DEVPTS(...) __VA_ARGS__
-#define IF_NOT_FEATURE_DEVPTS(...)
-#undef CONFIG_FEATURE_CLEAN_UP
-#define ENABLE_FEATURE_CLEAN_UP 0
-#define IF_FEATURE_CLEAN_UP(...)
-#define IF_NOT_FEATURE_CLEAN_UP(...) __VA_ARGS__
-#undef CONFIG_FEATURE_UTMP
-#define ENABLE_FEATURE_UTMP 0
-#define IF_FEATURE_UTMP(...)
-#define IF_NOT_FEATURE_UTMP(...) __VA_ARGS__
-#undef CONFIG_FEATURE_WTMP
-#define ENABLE_FEATURE_WTMP 0
-#define IF_FEATURE_WTMP(...)
-#define IF_NOT_FEATURE_WTMP(...) __VA_ARGS__
-#undef CONFIG_FEATURE_PIDFILE
-#define ENABLE_FEATURE_PIDFILE 0
-#define IF_FEATURE_PIDFILE(...)
-#define IF_NOT_FEATURE_PIDFILE(...) __VA_ARGS__
-#define CONFIG_PID_FILE_PATH ""
-#define ENABLE_PID_FILE_PATH 1
-#define IF_PID_FILE_PATH(...) __VA_ARGS__
-#define IF_NOT_PID_FILE_PATH(...)
-#define CONFIG_FEATURE_SUID 1
-#define ENABLE_FEATURE_SUID 1
-#define IF_FEATURE_SUID(...) __VA_ARGS__
-#define IF_NOT_FEATURE_SUID(...)
-#undef CONFIG_FEATURE_SUID_CONFIG
-#define ENABLE_FEATURE_SUID_CONFIG 0
-#define IF_FEATURE_SUID_CONFIG(...)
-#define IF_NOT_FEATURE_SUID_CONFIG(...) __VA_ARGS__
-#undef CONFIG_FEATURE_SUID_CONFIG_QUIET
-#define ENABLE_FEATURE_SUID_CONFIG_QUIET 0
-#define IF_FEATURE_SUID_CONFIG_QUIET(...)
-#define IF_NOT_FEATURE_SUID_CONFIG_QUIET(...) __VA_ARGS__
-#undef CONFIG_SELINUX
-#define ENABLE_SELINUX 0
-#define IF_SELINUX(...)
-#define IF_NOT_SELINUX(...) __VA_ARGS__
-#undef CONFIG_FEATURE_PREFER_APPLETS
-#define ENABLE_FEATURE_PREFER_APPLETS 0
-#define IF_FEATURE_PREFER_APPLETS(...)
-#define IF_NOT_FEATURE_PREFER_APPLETS(...) __VA_ARGS__
-#define CONFIG_BUSYBOX_EXEC_PATH "/proc/self/exe"
-#define ENABLE_BUSYBOX_EXEC_PATH 1
-#define IF_BUSYBOX_EXEC_PATH(...) __VA_ARGS__
-#define IF_NOT_BUSYBOX_EXEC_PATH(...)
-#define CONFIG_FEATURE_SYSLOG 1
-#define ENABLE_FEATURE_SYSLOG 1
-#define IF_FEATURE_SYSLOG(...) __VA_ARGS__
-#define IF_NOT_FEATURE_SYSLOG(...)
-#define CONFIG_FEATURE_HAVE_RPC 1
-#define ENABLE_FEATURE_HAVE_RPC 1
-#define IF_FEATURE_HAVE_RPC(...) __VA_ARGS__
-#define IF_NOT_FEATURE_HAVE_RPC(...)
-
-/*
- * Build Options
- */
-#undef CONFIG_STATIC
-#define ENABLE_STATIC 0
-#define IF_STATIC(...)
-#define IF_NOT_STATIC(...) __VA_ARGS__
-#undef CONFIG_PIE
-#define ENABLE_PIE 0
-#define IF_PIE(...)
-#define IF_NOT_PIE(...) __VA_ARGS__
-#undef CONFIG_NOMMU
-#define ENABLE_NOMMU 0
-#define IF_NOMMU(...)
-#define IF_NOT_NOMMU(...) __VA_ARGS__
-#undef CONFIG_BUILD_LIBBUSYBOX
-#define ENABLE_BUILD_LIBBUSYBOX 0
-#define IF_BUILD_LIBBUSYBOX(...)
-#define IF_NOT_BUILD_LIBBUSYBOX(...) __VA_ARGS__
-#undef CONFIG_FEATURE_INDIVIDUAL
-#define ENABLE_FEATURE_INDIVIDUAL 0
-#define IF_FEATURE_INDIVIDUAL(...)
-#define IF_NOT_FEATURE_INDIVIDUAL(...) __VA_ARGS__
-#undef CONFIG_FEATURE_SHARED_BUSYBOX
-#define ENABLE_FEATURE_SHARED_BUSYBOX 0
-#define IF_FEATURE_SHARED_BUSYBOX(...)
-#define IF_NOT_FEATURE_SHARED_BUSYBOX(...) __VA_ARGS__
-#define CONFIG_LFS 1
-#define ENABLE_LFS 1
-#define IF_LFS(...) __VA_ARGS__
-#define IF_NOT_LFS(...)
-#define CONFIG_CROSS_COMPILER_PREFIX "arm-eabi-"
-#define ENABLE_CROSS_COMPILER_PREFIX 1
-#define IF_CROSS_COMPILER_PREFIX(...) __VA_ARGS__
-#define IF_NOT_CROSS_COMPILER_PREFIX(...)
-#define CONFIG_SYSROOT ""
-#define ENABLE_SYSROOT 1
-#define IF_SYSROOT(...) __VA_ARGS__
-#define IF_NOT_SYSROOT(...)
-#define CONFIG_EXTRA_CFLAGS "-Os -fno-short-enums -fgcse-after-reload -frerun-cse-after-loop -frename-registers"
-#define ENABLE_EXTRA_CFLAGS 1
-#define IF_EXTRA_CFLAGS(...) __VA_ARGS__
-#define IF_NOT_EXTRA_CFLAGS(...)
-#define CONFIG_EXTRA_LDFLAGS ""
-#define ENABLE_EXTRA_LDFLAGS 1
-#define IF_EXTRA_LDFLAGS(...) __VA_ARGS__
-#define IF_NOT_EXTRA_LDFLAGS(...)
-#define CONFIG_EXTRA_LDLIBS ""
-#define ENABLE_EXTRA_LDLIBS 1
-#define IF_EXTRA_LDLIBS(...) __VA_ARGS__
-#define IF_NOT_EXTRA_LDLIBS(...)
-
-/*
- * Debugging Options
- */
-#undef CONFIG_DEBUG
-#define ENABLE_DEBUG 0
-#define IF_DEBUG(...)
-#define IF_NOT_DEBUG(...) __VA_ARGS__
-#undef CONFIG_DEBUG_PESSIMIZE
-#define ENABLE_DEBUG_PESSIMIZE 0
-#define IF_DEBUG_PESSIMIZE(...)
-#define IF_NOT_DEBUG_PESSIMIZE(...) __VA_ARGS__
-#undef CONFIG_WERROR
-#define ENABLE_WERROR 0
-#define IF_WERROR(...)
-#define IF_NOT_WERROR(...) __VA_ARGS__
-#define CONFIG_NO_DEBUG_LIB 1
-#define ENABLE_NO_DEBUG_LIB 1
-#define IF_NO_DEBUG_LIB(...) __VA_ARGS__
-#define IF_NOT_NO_DEBUG_LIB(...)
-#undef CONFIG_DMALLOC
-#define ENABLE_DMALLOC 0
-#define IF_DMALLOC(...)
-#define IF_NOT_DMALLOC(...) __VA_ARGS__
-#undef CONFIG_EFENCE
-#define ENABLE_EFENCE 0
-#define IF_EFENCE(...)
-#define IF_NOT_EFENCE(...) __VA_ARGS__
-
-/*
- * Installation Options ("make install" behavior)
- */
-#define CONFIG_INSTALL_APPLET_SYMLINKS 1
-#define ENABLE_INSTALL_APPLET_SYMLINKS 1
-#define IF_INSTALL_APPLET_SYMLINKS(...) __VA_ARGS__
-#define IF_NOT_INSTALL_APPLET_SYMLINKS(...)
-#undef CONFIG_INSTALL_APPLET_HARDLINKS
-#define ENABLE_INSTALL_APPLET_HARDLINKS 0
-#define IF_INSTALL_APPLET_HARDLINKS(...)
-#define IF_NOT_INSTALL_APPLET_HARDLINKS(...) __VA_ARGS__
-#undef CONFIG_INSTALL_APPLET_SCRIPT_WRAPPERS
-#define ENABLE_INSTALL_APPLET_SCRIPT_WRAPPERS 0
-#define IF_INSTALL_APPLET_SCRIPT_WRAPPERS(...)
-#define IF_NOT_INSTALL_APPLET_SCRIPT_WRAPPERS(...) __VA_ARGS__
-#undef CONFIG_INSTALL_APPLET_DONT
-#define ENABLE_INSTALL_APPLET_DONT 0
-#define IF_INSTALL_APPLET_DONT(...)
-#define IF_NOT_INSTALL_APPLET_DONT(...) __VA_ARGS__
-#undef CONFIG_INSTALL_SH_APPLET_SYMLINK
-#define ENABLE_INSTALL_SH_APPLET_SYMLINK 0
-#define IF_INSTALL_SH_APPLET_SYMLINK(...)
-#define IF_NOT_INSTALL_SH_APPLET_SYMLINK(...) __VA_ARGS__
-#undef CONFIG_INSTALL_SH_APPLET_HARDLINK
-#define ENABLE_INSTALL_SH_APPLET_HARDLINK 0
-#define IF_INSTALL_SH_APPLET_HARDLINK(...)
-#define IF_NOT_INSTALL_SH_APPLET_HARDLINK(...) __VA_ARGS__
-#undef CONFIG_INSTALL_SH_APPLET_SCRIPT_WRAPPER
-#define ENABLE_INSTALL_SH_APPLET_SCRIPT_WRAPPER 0
-#define IF_INSTALL_SH_APPLET_SCRIPT_WRAPPER(...)
-#define IF_NOT_INSTALL_SH_APPLET_SCRIPT_WRAPPER(...) __VA_ARGS__
-#define CONFIG_PREFIX "./_install"
-#define ENABLE_PREFIX 1
-#define IF_PREFIX(...) __VA_ARGS__
-#define IF_NOT_PREFIX(...)
-
-/*
- * Busybox Library Tuning
- */
-#undef CONFIG_FEATURE_SYSTEMD
-#define ENABLE_FEATURE_SYSTEMD 0
-#define IF_FEATURE_SYSTEMD(...)
-#define IF_NOT_FEATURE_SYSTEMD(...) __VA_ARGS__
-#define CONFIG_FEATURE_RTMINMAX 1
-#define ENABLE_FEATURE_RTMINMAX 1
-#define IF_FEATURE_RTMINMAX(...) __VA_ARGS__
-#define IF_NOT_FEATURE_RTMINMAX(...)
-#define CONFIG_PASSWORD_MINLEN 6
-#define ENABLE_PASSWORD_MINLEN 1
-#define IF_PASSWORD_MINLEN(...) __VA_ARGS__
-#define IF_NOT_PASSWORD_MINLEN(...)
-#define CONFIG_MD5_SMALL 1
-#define ENABLE_MD5_SMALL 1
-#define IF_MD5_SMALL(...) __VA_ARGS__
-#define IF_NOT_MD5_SMALL(...)
-#define CONFIG_SHA3_SMALL 1
-#define ENABLE_SHA3_SMALL 1
-#define IF_SHA3_SMALL(...) __VA_ARGS__
-#define IF_NOT_SHA3_SMALL(...)
-#define CONFIG_FEATURE_FAST_TOP 1
-#define ENABLE_FEATURE_FAST_TOP 1
-#define IF_FEATURE_FAST_TOP(...) __VA_ARGS__
-#define IF_NOT_FEATURE_FAST_TOP(...)
-#undef CONFIG_FEATURE_ETC_NETWORKS
-#define ENABLE_FEATURE_ETC_NETWORKS 0
-#define IF_FEATURE_ETC_NETWORKS(...)
-#define IF_NOT_FEATURE_ETC_NETWORKS(...) __VA_ARGS__
-#define CONFIG_FEATURE_USE_TERMIOS 1
-#define ENABLE_FEATURE_USE_TERMIOS 1
-#define IF_FEATURE_USE_TERMIOS(...) __VA_ARGS__
-#define IF_NOT_FEATURE_USE_TERMIOS(...)
-#define CONFIG_FEATURE_EDITING 1
-#define ENABLE_FEATURE_EDITING 1
-#define IF_FEATURE_EDITING(...) __VA_ARGS__
-#define IF_NOT_FEATURE_EDITING(...)
-#define CONFIG_FEATURE_EDITING_MAX_LEN 1024
-#define ENABLE_FEATURE_EDITING_MAX_LEN 1
-#define IF_FEATURE_EDITING_MAX_LEN(...) __VA_ARGS__
-#define IF_NOT_FEATURE_EDITING_MAX_LEN(...)
-#define CONFIG_FEATURE_EDITING_VI 1
-#define ENABLE_FEATURE_EDITING_VI 1
-#define IF_FEATURE_EDITING_VI(...) __VA_ARGS__
-#define IF_NOT_FEATURE_EDITING_VI(...)
-#define CONFIG_FEATURE_EDITING_HISTORY 256
-#define ENABLE_FEATURE_EDITING_HISTORY 1
-#define IF_FEATURE_EDITING_HISTORY(...) __VA_ARGS__
-#define IF_NOT_FEATURE_EDITING_HISTORY(...)
-#define CONFIG_FEATURE_EDITING_SAVEHISTORY 1
-#define ENABLE_FEATURE_EDITING_SAVEHISTORY 1
-#define IF_FEATURE_EDITING_SAVEHISTORY(...) __VA_ARGS__
-#define IF_NOT_FEATURE_EDITING_SAVEHISTORY(...)
-#undef CONFIG_FEATURE_EDITING_SAVE_ON_EXIT
-#define ENABLE_FEATURE_EDITING_SAVE_ON_EXIT 0
-#define IF_FEATURE_EDITING_SAVE_ON_EXIT(...)
-#define IF_NOT_FEATURE_EDITING_SAVE_ON_EXIT(...) __VA_ARGS__
-#define CONFIG_FEATURE_REVERSE_SEARCH 1
-#define ENABLE_FEATURE_REVERSE_SEARCH 1
-#define IF_FEATURE_REVERSE_SEARCH(...) __VA_ARGS__
-#define IF_NOT_FEATURE_REVERSE_SEARCH(...)
-#define CONFIG_FEATURE_TAB_COMPLETION 1
-#define ENABLE_FEATURE_TAB_COMPLETION 1
-#define IF_FEATURE_TAB_COMPLETION(...) __VA_ARGS__
-#define IF_NOT_FEATURE_TAB_COMPLETION(...)
-#undef CONFIG_FEATURE_USERNAME_COMPLETION
-#define ENABLE_FEATURE_USERNAME_COMPLETION 0
-#define IF_FEATURE_USERNAME_COMPLETION(...)
-#define IF_NOT_FEATURE_USERNAME_COMPLETION(...) __VA_ARGS__
-#define CONFIG_FEATURE_EDITING_FANCY_PROMPT 1
-#define ENABLE_FEATURE_EDITING_FANCY_PROMPT 1
-#define IF_FEATURE_EDITING_FANCY_PROMPT(...) __VA_ARGS__
-#define IF_NOT_FEATURE_EDITING_FANCY_PROMPT(...)
-#define CONFIG_FEATURE_EDITING_ASK_TERMINAL 1
-#define ENABLE_FEATURE_EDITING_ASK_TERMINAL 1
-#define IF_FEATURE_EDITING_ASK_TERMINAL(...) __VA_ARGS__
-#define IF_NOT_FEATURE_EDITING_ASK_TERMINAL(...)
-#define CONFIG_FEATURE_NON_POSIX_CP 1
-#define ENABLE_FEATURE_NON_POSIX_CP 1
-#define IF_FEATURE_NON_POSIX_CP(...) __VA_ARGS__
-#define IF_NOT_FEATURE_NON_POSIX_CP(...)
-#undef CONFIG_FEATURE_VERBOSE_CP_MESSAGE
-#define ENABLE_FEATURE_VERBOSE_CP_MESSAGE 0
-#define IF_FEATURE_VERBOSE_CP_MESSAGE(...)
-#define IF_NOT_FEATURE_VERBOSE_CP_MESSAGE(...) __VA_ARGS__
-#define CONFIG_FEATURE_COPYBUF_KB 4
-#define ENABLE_FEATURE_COPYBUF_KB 1
-#define IF_FEATURE_COPYBUF_KB(...) __VA_ARGS__
-#define IF_NOT_FEATURE_COPYBUF_KB(...)
-#define CONFIG_FEATURE_SKIP_ROOTFS 1
-#define ENABLE_FEATURE_SKIP_ROOTFS 1
-#define IF_FEATURE_SKIP_ROOTFS(...) __VA_ARGS__
-#define IF_NOT_FEATURE_SKIP_ROOTFS(...)
-#define CONFIG_MONOTONIC_SYSCALL 1
-#define ENABLE_MONOTONIC_SYSCALL 1
-#define IF_MONOTONIC_SYSCALL(...) __VA_ARGS__
-#define IF_NOT_MONOTONIC_SYSCALL(...)
-#define CONFIG_IOCTL_HEX2STR_ERROR 1
-#define ENABLE_IOCTL_HEX2STR_ERROR 1
-#define IF_IOCTL_HEX2STR_ERROR(...) __VA_ARGS__
-#define IF_NOT_IOCTL_HEX2STR_ERROR(...)
-#undef CONFIG_FEATURE_HWIB
-#define ENABLE_FEATURE_HWIB 0
-#define IF_FEATURE_HWIB(...)
-#define IF_NOT_FEATURE_HWIB(...) __VA_ARGS__
-
-/*
- * Applets
- */
-
-/*
- * Archival Utilities
- */
-#define CONFIG_FEATURE_SEAMLESS_XZ 1
-#define ENABLE_FEATURE_SEAMLESS_XZ 1
-#define IF_FEATURE_SEAMLESS_XZ(...) __VA_ARGS__
-#define IF_NOT_FEATURE_SEAMLESS_XZ(...)
-#define CONFIG_FEATURE_SEAMLESS_LZMA 1
-#define ENABLE_FEATURE_SEAMLESS_LZMA 1
-#define IF_FEATURE_SEAMLESS_LZMA(...) __VA_ARGS__
-#define IF_NOT_FEATURE_SEAMLESS_LZMA(...)
-#define CONFIG_FEATURE_SEAMLESS_BZ2 1
-#define ENABLE_FEATURE_SEAMLESS_BZ2 1
-#define IF_FEATURE_SEAMLESS_BZ2(...) __VA_ARGS__
-#define IF_NOT_FEATURE_SEAMLESS_BZ2(...)
-#define CONFIG_FEATURE_SEAMLESS_GZ 1
-#define ENABLE_FEATURE_SEAMLESS_GZ 1
-#define IF_FEATURE_SEAMLESS_GZ(...) __VA_ARGS__
-#define IF_NOT_FEATURE_SEAMLESS_GZ(...)
-#undef CONFIG_FEATURE_SEAMLESS_Z
-#define ENABLE_FEATURE_SEAMLESS_Z 0
-#define IF_FEATURE_SEAMLESS_Z(...)
-#define IF_NOT_FEATURE_SEAMLESS_Z(...) __VA_ARGS__
-#undef CONFIG_AR
-#define ENABLE_AR 0
-#define IF_AR(...)
-#define IF_NOT_AR(...) __VA_ARGS__
-#undef CONFIG_FEATURE_AR_LONG_FILENAMES
-#define ENABLE_FEATURE_AR_LONG_FILENAMES 0
-#define IF_FEATURE_AR_LONG_FILENAMES(...)
-#define IF_NOT_FEATURE_AR_LONG_FILENAMES(...) __VA_ARGS__
-#undef CONFIG_FEATURE_AR_CREATE
-#define ENABLE_FEATURE_AR_CREATE 0
-#define IF_FEATURE_AR_CREATE(...)
-#define IF_NOT_FEATURE_AR_CREATE(...) __VA_ARGS__
-#define CONFIG_BUNZIP2 1
-#define ENABLE_BUNZIP2 1
-#define IF_BUNZIP2(...) __VA_ARGS__
-#define IF_NOT_BUNZIP2(...)
-#define CONFIG_BZIP2 1
-#define ENABLE_BZIP2 1
-#define IF_BZIP2(...) __VA_ARGS__
-#define IF_NOT_BZIP2(...)
-#define CONFIG_CPIO 1
-#define ENABLE_CPIO 1
-#define IF_CPIO(...) __VA_ARGS__
-#define IF_NOT_CPIO(...)
-#define CONFIG_FEATURE_CPIO_O 1
-#define ENABLE_FEATURE_CPIO_O 1
-#define IF_FEATURE_CPIO_O(...) __VA_ARGS__
-#define IF_NOT_FEATURE_CPIO_O(...)
-#define CONFIG_FEATURE_CPIO_P 1
-#define ENABLE_FEATURE_CPIO_P 1
-#define IF_FEATURE_CPIO_P(...) __VA_ARGS__
-#define IF_NOT_FEATURE_CPIO_P(...)
-#undef CONFIG_DPKG
-#define ENABLE_DPKG 0
-#define IF_DPKG(...)
-#define IF_NOT_DPKG(...) __VA_ARGS__
-#undef CONFIG_DPKG_DEB
-#define ENABLE_DPKG_DEB 0
-#define IF_DPKG_DEB(...)
-#define IF_NOT_DPKG_DEB(...) __VA_ARGS__
-#undef CONFIG_FEATURE_DPKG_DEB_EXTRACT_ONLY
-#define ENABLE_FEATURE_DPKG_DEB_EXTRACT_ONLY 0
-#define IF_FEATURE_DPKG_DEB_EXTRACT_ONLY(...)
-#define IF_NOT_FEATURE_DPKG_DEB_EXTRACT_ONLY(...) __VA_ARGS__
-#define CONFIG_GUNZIP 1
-#define ENABLE_GUNZIP 1
-#define IF_GUNZIP(...) __VA_ARGS__
-#define IF_NOT_GUNZIP(...)
-#define CONFIG_GZIP 1
-#define ENABLE_GZIP 1
-#define IF_GZIP(...) __VA_ARGS__
-#define IF_NOT_GZIP(...)
-#define CONFIG_FEATURE_GZIP_LONG_OPTIONS 1
-#define ENABLE_FEATURE_GZIP_LONG_OPTIONS 1
-#define IF_FEATURE_GZIP_LONG_OPTIONS(...) __VA_ARGS__
-#define IF_NOT_FEATURE_GZIP_LONG_OPTIONS(...)
-#define CONFIG_GZIP_FAST 2
-#define ENABLE_GZIP_FAST 1
-#define IF_GZIP_FAST(...) __VA_ARGS__
-#define IF_NOT_GZIP_FAST(...)
-#define CONFIG_LZOP 1
-#define ENABLE_LZOP 1
-#define IF_LZOP(...) __VA_ARGS__
-#define IF_NOT_LZOP(...)
-#undef CONFIG_LZOP_COMPR_HIGH
-#define ENABLE_LZOP_COMPR_HIGH 0
-#define IF_LZOP_COMPR_HIGH(...)
-#define IF_NOT_LZOP_COMPR_HIGH(...) __VA_ARGS__
-#undef CONFIG_RPM2CPIO
-#define ENABLE_RPM2CPIO 0
-#define IF_RPM2CPIO(...)
-#define IF_NOT_RPM2CPIO(...) __VA_ARGS__
-#undef CONFIG_RPM
-#define ENABLE_RPM 0
-#define IF_RPM(...)
-#define IF_NOT_RPM(...) __VA_ARGS__
-#define CONFIG_TAR 1
-#define ENABLE_TAR 1
-#define IF_TAR(...) __VA_ARGS__
-#define IF_NOT_TAR(...)
-#define CONFIG_FEATURE_TAR_CREATE 1
-#define ENABLE_FEATURE_TAR_CREATE 1
-#define IF_FEATURE_TAR_CREATE(...) __VA_ARGS__
-#define IF_NOT_FEATURE_TAR_CREATE(...)
-#define CONFIG_FEATURE_TAR_AUTODETECT 1
-#define ENABLE_FEATURE_TAR_AUTODETECT 1
-#define IF_FEATURE_TAR_AUTODETECT(...) __VA_ARGS__
-#define IF_NOT_FEATURE_TAR_AUTODETECT(...)
-#define CONFIG_FEATURE_TAR_FROM 1
-#define ENABLE_FEATURE_TAR_FROM 1
-#define IF_FEATURE_TAR_FROM(...) __VA_ARGS__
-#define IF_NOT_FEATURE_TAR_FROM(...)
-#undef CONFIG_FEATURE_TAR_OLDGNU_COMPATIBILITY
-#define ENABLE_FEATURE_TAR_OLDGNU_COMPATIBILITY 0
-#define IF_FEATURE_TAR_OLDGNU_COMPATIBILITY(...)
-#define IF_NOT_FEATURE_TAR_OLDGNU_COMPATIBILITY(...) __VA_ARGS__
-#undef CONFIG_FEATURE_TAR_OLDSUN_COMPATIBILITY
-#define ENABLE_FEATURE_TAR_OLDSUN_COMPATIBILITY 0
-#define IF_FEATURE_TAR_OLDSUN_COMPATIBILITY(...)
-#define IF_NOT_FEATURE_TAR_OLDSUN_COMPATIBILITY(...) __VA_ARGS__
-#define CONFIG_FEATURE_TAR_GNU_EXTENSIONS 1
-#define ENABLE_FEATURE_TAR_GNU_EXTENSIONS 1
-#define IF_FEATURE_TAR_GNU_EXTENSIONS(...) __VA_ARGS__
-#define IF_NOT_FEATURE_TAR_GNU_EXTENSIONS(...)
-#define CONFIG_FEATURE_TAR_LONG_OPTIONS 1
-#define ENABLE_FEATURE_TAR_LONG_OPTIONS 1
-#define IF_FEATURE_TAR_LONG_OPTIONS(...) __VA_ARGS__
-#define IF_NOT_FEATURE_TAR_LONG_OPTIONS(...)
-#define CONFIG_FEATURE_TAR_TO_COMMAND 1
-#define ENABLE_FEATURE_TAR_TO_COMMAND 1
-#define IF_FEATURE_TAR_TO_COMMAND(...) __VA_ARGS__
-#define IF_NOT_FEATURE_TAR_TO_COMMAND(...)
-#define CONFIG_FEATURE_TAR_UNAME_GNAME 1
-#define ENABLE_FEATURE_TAR_UNAME_GNAME 1
-#define IF_FEATURE_TAR_UNAME_GNAME(...) __VA_ARGS__
-#define IF_NOT_FEATURE_TAR_UNAME_GNAME(...)
-#define CONFIG_FEATURE_TAR_NOPRESERVE_TIME 1
-#define ENABLE_FEATURE_TAR_NOPRESERVE_TIME 1
-#define IF_FEATURE_TAR_NOPRESERVE_TIME(...) __VA_ARGS__
-#define IF_NOT_FEATURE_TAR_NOPRESERVE_TIME(...)
-#undef CONFIG_FEATURE_TAR_SELINUX
-#define ENABLE_FEATURE_TAR_SELINUX 0
-#define IF_FEATURE_TAR_SELINUX(...)
-#define IF_NOT_FEATURE_TAR_SELINUX(...) __VA_ARGS__
-#define CONFIG_UNCOMPRESS 1
-#define ENABLE_UNCOMPRESS 1
-#define IF_UNCOMPRESS(...) __VA_ARGS__
-#define IF_NOT_UNCOMPRESS(...)
-#define CONFIG_UNLZMA 1
-#define ENABLE_UNLZMA 1
-#define IF_UNLZMA(...) __VA_ARGS__
-#define IF_NOT_UNLZMA(...)
-#define CONFIG_FEATURE_LZMA_FAST 1
-#define ENABLE_FEATURE_LZMA_FAST 1
-#define IF_FEATURE_LZMA_FAST(...) __VA_ARGS__
-#define IF_NOT_FEATURE_LZMA_FAST(...)
-#define CONFIG_LZMA 1
-#define ENABLE_LZMA 1
-#define IF_LZMA(...) __VA_ARGS__
-#define IF_NOT_LZMA(...)
-#define CONFIG_UNXZ 1
-#define ENABLE_UNXZ 1
-#define IF_UNXZ(...) __VA_ARGS__
-#define IF_NOT_UNXZ(...)
-#define CONFIG_XZ 1
-#define ENABLE_XZ 1
-#define IF_XZ(...) __VA_ARGS__
-#define IF_NOT_XZ(...)
-#define CONFIG_UNZIP 1
-#define ENABLE_UNZIP 1
-#define IF_UNZIP(...) __VA_ARGS__
-#define IF_NOT_UNZIP(...)
-
-/*
- * Coreutils
- */
-#define CONFIG_BASENAME 1
-#define ENABLE_BASENAME 1
-#define IF_BASENAME(...) __VA_ARGS__
-#define IF_NOT_BASENAME(...)
-#define CONFIG_CAT 1
-#define ENABLE_CAT 1
-#define IF_CAT(...) __VA_ARGS__
-#define IF_NOT_CAT(...)
-#define CONFIG_DATE 1
-#define ENABLE_DATE 1
-#define IF_DATE(...) __VA_ARGS__
-#define IF_NOT_DATE(...)
-#define CONFIG_FEATURE_DATE_ISOFMT 1
-#define ENABLE_FEATURE_DATE_ISOFMT 1
-#define IF_FEATURE_DATE_ISOFMT(...) __VA_ARGS__
-#define IF_NOT_FEATURE_DATE_ISOFMT(...)
-#undef CONFIG_FEATURE_DATE_NANO
-#define ENABLE_FEATURE_DATE_NANO 0
-#define IF_FEATURE_DATE_NANO(...)
-#define IF_NOT_FEATURE_DATE_NANO(...) __VA_ARGS__
-#define CONFIG_FEATURE_DATE_COMPAT 1
-#define ENABLE_FEATURE_DATE_COMPAT 1
-#define IF_FEATURE_DATE_COMPAT(...) __VA_ARGS__
-#define IF_NOT_FEATURE_DATE_COMPAT(...)
-#undef CONFIG_HOSTID
-#define ENABLE_HOSTID 0
-#define IF_HOSTID(...)
-#define IF_NOT_HOSTID(...) __VA_ARGS__
-#define CONFIG_ID 1
-#define ENABLE_ID 1
-#define IF_ID(...) __VA_ARGS__
-#define IF_NOT_ID(...)
-#define CONFIG_GROUPS 1
-#define ENABLE_GROUPS 1
-#define IF_GROUPS(...) __VA_ARGS__
-#define IF_NOT_GROUPS(...)
-#define CONFIG_TEST 1
-#define ENABLE_TEST 1
-#define IF_TEST(...) __VA_ARGS__
-#define IF_NOT_TEST(...)
-#undef CONFIG_FEATURE_TEST_64
-#define ENABLE_FEATURE_TEST_64 0
-#define IF_FEATURE_TEST_64(...)
-#define IF_NOT_FEATURE_TEST_64(...) __VA_ARGS__
-#define CONFIG_TOUCH 1
-#define ENABLE_TOUCH 1
-#define IF_TOUCH(...) __VA_ARGS__
-#define IF_NOT_TOUCH(...)
-#define CONFIG_FEATURE_TOUCH_SUSV3 1
-#define ENABLE_FEATURE_TOUCH_SUSV3 1
-#define IF_FEATURE_TOUCH_SUSV3(...) __VA_ARGS__
-#define IF_NOT_FEATURE_TOUCH_SUSV3(...)
-#define CONFIG_TR 1
-#define ENABLE_TR 1
-#define IF_TR(...) __VA_ARGS__
-#define IF_NOT_TR(...)
-#define CONFIG_FEATURE_TR_CLASSES 1
-#define ENABLE_FEATURE_TR_CLASSES 1
-#define IF_FEATURE_TR_CLASSES(...) __VA_ARGS__
-#define IF_NOT_FEATURE_TR_CLASSES(...)
-#undef CONFIG_FEATURE_TR_EQUIV
-#define ENABLE_FEATURE_TR_EQUIV 0
-#define IF_FEATURE_TR_EQUIV(...)
-#define IF_NOT_FEATURE_TR_EQUIV(...) __VA_ARGS__
-#define CONFIG_BASE64 1
-#define ENABLE_BASE64 1
-#define IF_BASE64(...) __VA_ARGS__
-#define IF_NOT_BASE64(...)
-#undef CONFIG_WHO
-#define ENABLE_WHO 0
-#define IF_WHO(...)
-#define IF_NOT_WHO(...) __VA_ARGS__
-#undef CONFIG_USERS
-#define ENABLE_USERS 0
-#define IF_USERS(...)
-#define IF_NOT_USERS(...) __VA_ARGS__
-#define CONFIG_CAL 1
-#define ENABLE_CAL 1
-#define IF_CAL(...) __VA_ARGS__
-#define IF_NOT_CAL(...)
-#define CONFIG_CATV 1
-#define ENABLE_CATV 1
-#define IF_CATV(...) __VA_ARGS__
-#define IF_NOT_CATV(...)
-#define CONFIG_CHGRP 1
-#define ENABLE_CHGRP 1
-#define IF_CHGRP(...) __VA_ARGS__
-#define IF_NOT_CHGRP(...)
-#define CONFIG_CHMOD 1
-#define ENABLE_CHMOD 1
-#define IF_CHMOD(...) __VA_ARGS__
-#define IF_NOT_CHMOD(...)
-#define CONFIG_CHOWN 1
-#define ENABLE_CHOWN 1
-#define IF_CHOWN(...) __VA_ARGS__
-#define IF_NOT_CHOWN(...)
-#define CONFIG_FEATURE_CHOWN_LONG_OPTIONS 1
-#define ENABLE_FEATURE_CHOWN_LONG_OPTIONS 1
-#define IF_FEATURE_CHOWN_LONG_OPTIONS(...) __VA_ARGS__
-#define IF_NOT_FEATURE_CHOWN_LONG_OPTIONS(...)
-#define CONFIG_CHROOT 1
-#define ENABLE_CHROOT 1
-#define IF_CHROOT(...) __VA_ARGS__
-#define IF_NOT_CHROOT(...)
-#undef CONFIG_CKSUM
-#define ENABLE_CKSUM 0
-#define IF_CKSUM(...)
-#define IF_NOT_CKSUM(...) __VA_ARGS__
-#define CONFIG_COMM 1
-#define ENABLE_COMM 1
-#define IF_COMM(...) __VA_ARGS__
-#define IF_NOT_COMM(...)
-#define CONFIG_CP 1
-#define ENABLE_CP 1
-#define IF_CP(...) __VA_ARGS__
-#define IF_NOT_CP(...)
-#define CONFIG_FEATURE_CP_LONG_OPTIONS 1
-#define ENABLE_FEATURE_CP_LONG_OPTIONS 1
-#define IF_FEATURE_CP_LONG_OPTIONS(...) __VA_ARGS__
-#define IF_NOT_FEATURE_CP_LONG_OPTIONS(...)
-#define CONFIG_CUT 1
-#define ENABLE_CUT 1
-#define IF_CUT(...) __VA_ARGS__
-#define IF_NOT_CUT(...)
-#define CONFIG_DD 1
-#define ENABLE_DD 1
-#define IF_DD(...) __VA_ARGS__
-#define IF_NOT_DD(...)
-#define CONFIG_FEATURE_DD_SIGNAL_HANDLING 1
-#define ENABLE_FEATURE_DD_SIGNAL_HANDLING 1
-#define IF_FEATURE_DD_SIGNAL_HANDLING(...) __VA_ARGS__
-#define IF_NOT_FEATURE_DD_SIGNAL_HANDLING(...)
-#define CONFIG_FEATURE_DD_THIRD_STATUS_LINE 1
-#define ENABLE_FEATURE_DD_THIRD_STATUS_LINE 1
-#define IF_FEATURE_DD_THIRD_STATUS_LINE(...) __VA_ARGS__
-#define IF_NOT_FEATURE_DD_THIRD_STATUS_LINE(...)
-#define CONFIG_FEATURE_DD_IBS_OBS 1
-#define ENABLE_FEATURE_DD_IBS_OBS 1
-#define IF_FEATURE_DD_IBS_OBS(...) __VA_ARGS__
-#define IF_NOT_FEATURE_DD_IBS_OBS(...)
-#define CONFIG_DF 1
-#define ENABLE_DF 1
-#define IF_DF(...) __VA_ARGS__
-#define IF_NOT_DF(...)
-#define CONFIG_FEATURE_DF_FANCY 1
-#define ENABLE_FEATURE_DF_FANCY 1
-#define IF_FEATURE_DF_FANCY(...) __VA_ARGS__
-#define IF_NOT_FEATURE_DF_FANCY(...)
-#define CONFIG_DIRNAME 1
-#define ENABLE_DIRNAME 1
-#define IF_DIRNAME(...) __VA_ARGS__
-#define IF_NOT_DIRNAME(...)
-#define CONFIG_DOS2UNIX 1
-#define ENABLE_DOS2UNIX 1
-#define IF_DOS2UNIX(...) __VA_ARGS__
-#define IF_NOT_DOS2UNIX(...)
-#define CONFIG_UNIX2DOS 1
-#define ENABLE_UNIX2DOS 1
-#define IF_UNIX2DOS(...) __VA_ARGS__
-#define IF_NOT_UNIX2DOS(...)
-#define CONFIG_DU 1
-#define ENABLE_DU 1
-#define IF_DU(...) __VA_ARGS__
-#define IF_NOT_DU(...)
-#define CONFIG_FEATURE_DU_DEFAULT_BLOCKSIZE_1K 1
-#define ENABLE_FEATURE_DU_DEFAULT_BLOCKSIZE_1K 1
-#define IF_FEATURE_DU_DEFAULT_BLOCKSIZE_1K(...) __VA_ARGS__
-#define IF_NOT_FEATURE_DU_DEFAULT_BLOCKSIZE_1K(...)
-#define CONFIG_ECHO 1
-#define ENABLE_ECHO 1
-#define IF_ECHO(...) __VA_ARGS__
-#define IF_NOT_ECHO(...)
-#define CONFIG_FEATURE_FANCY_ECHO 1
-#define ENABLE_FEATURE_FANCY_ECHO 1
-#define IF_FEATURE_FANCY_ECHO(...) __VA_ARGS__
-#define IF_NOT_FEATURE_FANCY_ECHO(...)
-#define CONFIG_ENV 1
-#define ENABLE_ENV 1
-#define IF_ENV(...) __VA_ARGS__
-#define IF_NOT_ENV(...)
-#define CONFIG_FEATURE_ENV_LONG_OPTIONS 1
-#define ENABLE_FEATURE_ENV_LONG_OPTIONS 1
-#define IF_FEATURE_ENV_LONG_OPTIONS(...) __VA_ARGS__
-#define IF_NOT_FEATURE_ENV_LONG_OPTIONS(...)
-#define CONFIG_EXPAND 1
-#define ENABLE_EXPAND 1
-#define IF_EXPAND(...) __VA_ARGS__
-#define IF_NOT_EXPAND(...)
-#define CONFIG_FEATURE_EXPAND_LONG_OPTIONS 1
-#define ENABLE_FEATURE_EXPAND_LONG_OPTIONS 1
-#define IF_FEATURE_EXPAND_LONG_OPTIONS(...) __VA_ARGS__
-#define IF_NOT_FEATURE_EXPAND_LONG_OPTIONS(...)
-#define CONFIG_EXPR 1
-#define ENABLE_EXPR 1
-#define IF_EXPR(...) __VA_ARGS__
-#define IF_NOT_EXPR(...)
-#define CONFIG_EXPR_MATH_SUPPORT_64 1
-#define ENABLE_EXPR_MATH_SUPPORT_64 1
-#define IF_EXPR_MATH_SUPPORT_64(...) __VA_ARGS__
-#define IF_NOT_EXPR_MATH_SUPPORT_64(...)
-#define CONFIG_FALSE 1
-#define ENABLE_FALSE 1
-#define IF_FALSE(...) __VA_ARGS__
-#define IF_NOT_FALSE(...)
-#define CONFIG_FOLD 1
-#define ENABLE_FOLD 1
-#define IF_FOLD(...) __VA_ARGS__
-#define IF_NOT_FOLD(...)
-#define CONFIG_FSYNC 1
-#define ENABLE_FSYNC 1
-#define IF_FSYNC(...) __VA_ARGS__
-#define IF_NOT_FSYNC(...)
-#define CONFIG_HEAD 1
-#define ENABLE_HEAD 1
-#define IF_HEAD(...) __VA_ARGS__
-#define IF_NOT_HEAD(...)
-#define CONFIG_FEATURE_FANCY_HEAD 1
-#define ENABLE_FEATURE_FANCY_HEAD 1
-#define IF_FEATURE_FANCY_HEAD(...) __VA_ARGS__
-#define IF_NOT_FEATURE_FANCY_HEAD(...)
-#define CONFIG_INSTALL 1
-#define ENABLE_INSTALL 1
-#define IF_INSTALL(...) __VA_ARGS__
-#define IF_NOT_INSTALL(...)
-#define CONFIG_FEATURE_INSTALL_LONG_OPTIONS 1
-#define ENABLE_FEATURE_INSTALL_LONG_OPTIONS 1
-#define IF_FEATURE_INSTALL_LONG_OPTIONS(...) __VA_ARGS__
-#define IF_NOT_FEATURE_INSTALL_LONG_OPTIONS(...)
-#define CONFIG_LN 1
-#define ENABLE_LN 1
-#define IF_LN(...) __VA_ARGS__
-#define IF_NOT_LN(...)
-#undef CONFIG_LOGNAME
-#define ENABLE_LOGNAME 0
-#define IF_LOGNAME(...)
-#define IF_NOT_LOGNAME(...) __VA_ARGS__
-#define CONFIG_LS 1
-#define ENABLE_LS 1
-#define IF_LS(...) __VA_ARGS__
-#define IF_NOT_LS(...)
-#define CONFIG_FEATURE_LS_FILETYPES 1
-#define ENABLE_FEATURE_LS_FILETYPES 1
-#define IF_FEATURE_LS_FILETYPES(...) __VA_ARGS__
-#define IF_NOT_FEATURE_LS_FILETYPES(...)
-#define CONFIG_FEATURE_LS_FOLLOWLINKS 1
-#define ENABLE_FEATURE_LS_FOLLOWLINKS 1
-#define IF_FEATURE_LS_FOLLOWLINKS(...) __VA_ARGS__
-#define IF_NOT_FEATURE_LS_FOLLOWLINKS(...)
-#define CONFIG_FEATURE_LS_RECURSIVE 1
-#define ENABLE_FEATURE_LS_RECURSIVE 1
-#define IF_FEATURE_LS_RECURSIVE(...) __VA_ARGS__
-#define IF_NOT_FEATURE_LS_RECURSIVE(...)
-#define CONFIG_FEATURE_LS_SORTFILES 1
-#define ENABLE_FEATURE_LS_SORTFILES 1
-#define IF_FEATURE_LS_SORTFILES(...) __VA_ARGS__
-#define IF_NOT_FEATURE_LS_SORTFILES(...)
-#define CONFIG_FEATURE_LS_TIMESTAMPS 1
-#define ENABLE_FEATURE_LS_TIMESTAMPS 1
-#define IF_FEATURE_LS_TIMESTAMPS(...) __VA_ARGS__
-#define IF_NOT_FEATURE_LS_TIMESTAMPS(...)
-#define CONFIG_FEATURE_LS_USERNAME 1
-#define ENABLE_FEATURE_LS_USERNAME 1
-#define IF_FEATURE_LS_USERNAME(...) __VA_ARGS__
-#define IF_NOT_FEATURE_LS_USERNAME(...)
-#define CONFIG_FEATURE_LS_COLOR 1
-#define ENABLE_FEATURE_LS_COLOR 1
-#define IF_FEATURE_LS_COLOR(...) __VA_ARGS__
-#define IF_NOT_FEATURE_LS_COLOR(...)
-#undef CONFIG_FEATURE_LS_COLOR_IS_DEFAULT
-#define ENABLE_FEATURE_LS_COLOR_IS_DEFAULT 0
-#define IF_FEATURE_LS_COLOR_IS_DEFAULT(...)
-#define IF_NOT_FEATURE_LS_COLOR_IS_DEFAULT(...) __VA_ARGS__
-#define CONFIG_MD5SUM 1
-#define ENABLE_MD5SUM 1
-#define IF_MD5SUM(...) __VA_ARGS__
-#define IF_NOT_MD5SUM(...)
-#define CONFIG_MKDIR 1
-#define ENABLE_MKDIR 1
-#define IF_MKDIR(...) __VA_ARGS__
-#define IF_NOT_MKDIR(...)
-#define CONFIG_FEATURE_MKDIR_LONG_OPTIONS 1
-#define ENABLE_FEATURE_MKDIR_LONG_OPTIONS 1
-#define IF_FEATURE_MKDIR_LONG_OPTIONS(...) __VA_ARGS__
-#define IF_NOT_FEATURE_MKDIR_LONG_OPTIONS(...)
-#define CONFIG_MKFIFO 1
-#define ENABLE_MKFIFO 1
-#define IF_MKFIFO(...) __VA_ARGS__
-#define IF_NOT_MKFIFO(...)
-#define CONFIG_MKNOD 1
-#define ENABLE_MKNOD 1
-#define IF_MKNOD(...) __VA_ARGS__
-#define IF_NOT_MKNOD(...)
-#define CONFIG_MV 1
-#define ENABLE_MV 1
-#define IF_MV(...) __VA_ARGS__
-#define IF_NOT_MV(...)
-#define CONFIG_FEATURE_MV_LONG_OPTIONS 1
-#define ENABLE_FEATURE_MV_LONG_OPTIONS 1
-#define IF_FEATURE_MV_LONG_OPTIONS(...) __VA_ARGS__
-#define IF_NOT_FEATURE_MV_LONG_OPTIONS(...)
-#define CONFIG_NICE 1
-#define ENABLE_NICE 1
-#define IF_NICE(...) __VA_ARGS__
-#define IF_NOT_NICE(...)
-#define CONFIG_NOHUP 1
-#define ENABLE_NOHUP 1
-#define IF_NOHUP(...) __VA_ARGS__
-#define IF_NOT_NOHUP(...)
-#define CONFIG_OD 1
-#define ENABLE_OD 1
-#define IF_OD(...) __VA_ARGS__
-#define IF_NOT_OD(...)
-#define CONFIG_PRINTENV 1
-#define ENABLE_PRINTENV 1
-#define IF_PRINTENV(...) __VA_ARGS__
-#define IF_NOT_PRINTENV(...)
-#define CONFIG_PRINTF 1
-#define ENABLE_PRINTF 1
-#define IF_PRINTF(...) __VA_ARGS__
-#define IF_NOT_PRINTF(...)
-#define CONFIG_PWD 1
-#define ENABLE_PWD 1
-#define IF_PWD(...) __VA_ARGS__
-#define IF_NOT_PWD(...)
-#define CONFIG_READLINK 1
-#define ENABLE_READLINK 1
-#define IF_READLINK(...) __VA_ARGS__
-#define IF_NOT_READLINK(...)
-#define CONFIG_FEATURE_READLINK_FOLLOW 1
-#define ENABLE_FEATURE_READLINK_FOLLOW 1
-#define IF_FEATURE_READLINK_FOLLOW(...) __VA_ARGS__
-#define IF_NOT_FEATURE_READLINK_FOLLOW(...)
-#define CONFIG_REALPATH 1
-#define ENABLE_REALPATH 1
-#define IF_REALPATH(...) __VA_ARGS__
-#define IF_NOT_REALPATH(...)
-#define CONFIG_RM 1
-#define ENABLE_RM 1
-#define IF_RM(...) __VA_ARGS__
-#define IF_NOT_RM(...)
-#define CONFIG_RMDIR 1
-#define ENABLE_RMDIR 1
-#define IF_RMDIR(...) __VA_ARGS__
-#define IF_NOT_RMDIR(...)
-#define CONFIG_FEATURE_RMDIR_LONG_OPTIONS 1
-#define ENABLE_FEATURE_RMDIR_LONG_OPTIONS 1
-#define IF_FEATURE_RMDIR_LONG_OPTIONS(...) __VA_ARGS__
-#define IF_NOT_FEATURE_RMDIR_LONG_OPTIONS(...)
-#define CONFIG_SEQ 1
-#define ENABLE_SEQ 1
-#define IF_SEQ(...) __VA_ARGS__
-#define IF_NOT_SEQ(...)
-#define CONFIG_SHA1SUM 1
-#define ENABLE_SHA1SUM 1
-#define IF_SHA1SUM(...) __VA_ARGS__
-#define IF_NOT_SHA1SUM(...)
-#define CONFIG_SHA256SUM 1
-#define ENABLE_SHA256SUM 1
-#define IF_SHA256SUM(...) __VA_ARGS__
-#define IF_NOT_SHA256SUM(...)
-#define CONFIG_SHA512SUM 1
-#define ENABLE_SHA512SUM 1
-#define IF_SHA512SUM(...) __VA_ARGS__
-#define IF_NOT_SHA512SUM(...)
-#define CONFIG_SHA3SUM 1
-#define ENABLE_SHA3SUM 1
-#define IF_SHA3SUM(...) __VA_ARGS__
-#define IF_NOT_SHA3SUM(...)
-#define CONFIG_SLEEP 1
-#define ENABLE_SLEEP 1
-#define IF_SLEEP(...) __VA_ARGS__
-#define IF_NOT_SLEEP(...)
-#define CONFIG_FEATURE_FANCY_SLEEP 1
-#define ENABLE_FEATURE_FANCY_SLEEP 1
-#define IF_FEATURE_FANCY_SLEEP(...) __VA_ARGS__
-#define IF_NOT_FEATURE_FANCY_SLEEP(...)
-#define CONFIG_FEATURE_FLOAT_SLEEP 1
-#define ENABLE_FEATURE_FLOAT_SLEEP 1
-#define IF_FEATURE_FLOAT_SLEEP(...) __VA_ARGS__
-#define IF_NOT_FEATURE_FLOAT_SLEEP(...)
-#define CONFIG_SORT 1
-#define ENABLE_SORT 1
-#define IF_SORT(...) __VA_ARGS__
-#define IF_NOT_SORT(...)
-#define CONFIG_FEATURE_SORT_BIG 1
-#define ENABLE_FEATURE_SORT_BIG 1
-#define IF_FEATURE_SORT_BIG(...) __VA_ARGS__
-#define IF_NOT_FEATURE_SORT_BIG(...)
-#define CONFIG_SPLIT 1
-#define ENABLE_SPLIT 1
-#define IF_SPLIT(...) __VA_ARGS__
-#define IF_NOT_SPLIT(...)
-#define CONFIG_FEATURE_SPLIT_FANCY 1
-#define ENABLE_FEATURE_SPLIT_FANCY 1
-#define IF_FEATURE_SPLIT_FANCY(...) __VA_ARGS__
-#define IF_NOT_FEATURE_SPLIT_FANCY(...)
-#define CONFIG_STAT 1
-#define ENABLE_STAT 1
-#define IF_STAT(...) __VA_ARGS__
-#define IF_NOT_STAT(...)
-#undef CONFIG_FEATURE_STAT_FORMAT
-#define ENABLE_FEATURE_STAT_FORMAT 0
-#define IF_FEATURE_STAT_FORMAT(...)
-#define IF_NOT_FEATURE_STAT_FORMAT(...) __VA_ARGS__
-#define CONFIG_STTY 1
-#define ENABLE_STTY 1
-#define IF_STTY(...) __VA_ARGS__
-#define IF_NOT_STTY(...)
-#define CONFIG_SUM 1
-#define ENABLE_SUM 1
-#define IF_SUM(...) __VA_ARGS__
-#define IF_NOT_SUM(...)
-#define CONFIG_SYNC 1
-#define ENABLE_SYNC 1
-#define IF_SYNC(...) __VA_ARGS__
-#define IF_NOT_SYNC(...)
-#define CONFIG_TAC 1
-#define ENABLE_TAC 1
-#define IF_TAC(...) __VA_ARGS__
-#define IF_NOT_TAC(...)
-#define CONFIG_TAIL 1
-#define ENABLE_TAIL 1
-#define IF_TAIL(...) __VA_ARGS__
-#define IF_NOT_TAIL(...)
-#define CONFIG_FEATURE_FANCY_TAIL 1
-#define ENABLE_FEATURE_FANCY_TAIL 1
-#define IF_FEATURE_FANCY_TAIL(...) __VA_ARGS__
-#define IF_NOT_FEATURE_FANCY_TAIL(...)
-#define CONFIG_TEE 1
-#define ENABLE_TEE 1
-#define IF_TEE(...) __VA_ARGS__
-#define IF_NOT_TEE(...)
-#define CONFIG_FEATURE_TEE_USE_BLOCK_IO 1
-#define ENABLE_FEATURE_TEE_USE_BLOCK_IO 1
-#define IF_FEATURE_TEE_USE_BLOCK_IO(...) __VA_ARGS__
-#define IF_NOT_FEATURE_TEE_USE_BLOCK_IO(...)
-#define CONFIG_TRUE 1
-#define ENABLE_TRUE 1
-#define IF_TRUE(...) __VA_ARGS__
-#define IF_NOT_TRUE(...)
-#undef CONFIG_TTY
-#define ENABLE_TTY 0
-#define IF_TTY(...)
-#define IF_NOT_TTY(...) __VA_ARGS__
-#define CONFIG_UNAME 1
-#define ENABLE_UNAME 1
-#define IF_UNAME(...) __VA_ARGS__
-#define IF_NOT_UNAME(...)
-#define CONFIG_UNEXPAND 1
-#define ENABLE_UNEXPAND 1
-#define IF_UNEXPAND(...) __VA_ARGS__
-#define IF_NOT_UNEXPAND(...)
-#define CONFIG_FEATURE_UNEXPAND_LONG_OPTIONS 1
-#define ENABLE_FEATURE_UNEXPAND_LONG_OPTIONS 1
-#define IF_FEATURE_UNEXPAND_LONG_OPTIONS(...) __VA_ARGS__
-#define IF_NOT_FEATURE_UNEXPAND_LONG_OPTIONS(...)
-#define CONFIG_UNIQ 1
-#define ENABLE_UNIQ 1
-#define IF_UNIQ(...) __VA_ARGS__
-#define IF_NOT_UNIQ(...)
-#define CONFIG_USLEEP 1
-#define ENABLE_USLEEP 1
-#define IF_USLEEP(...) __VA_ARGS__
-#define IF_NOT_USLEEP(...)
-#define CONFIG_UUDECODE 1
-#define ENABLE_UUDECODE 1
-#define IF_UUDECODE(...) __VA_ARGS__
-#define IF_NOT_UUDECODE(...)
-#define CONFIG_UUENCODE 1
-#define ENABLE_UUENCODE 1
-#define IF_UUENCODE(...) __VA_ARGS__
-#define IF_NOT_UUENCODE(...)
-#define CONFIG_WC 1
-#define ENABLE_WC 1
-#define IF_WC(...) __VA_ARGS__
-#define IF_NOT_WC(...)
-#undef CONFIG_FEATURE_WC_LARGE
-#define ENABLE_FEATURE_WC_LARGE 0
-#define IF_FEATURE_WC_LARGE(...)
-#define IF_NOT_FEATURE_WC_LARGE(...) __VA_ARGS__
-#define CONFIG_WHOAMI 1
-#define ENABLE_WHOAMI 1
-#define IF_WHOAMI(...) __VA_ARGS__
-#define IF_NOT_WHOAMI(...)
-#define CONFIG_YES 1
-#define ENABLE_YES 1
-#define IF_YES(...) __VA_ARGS__
-#define IF_NOT_YES(...)
-
-/*
- * Common options for cp and mv
- */
-#define CONFIG_FEATURE_PRESERVE_HARDLINKS 1
-#define ENABLE_FEATURE_PRESERVE_HARDLINKS 1
-#define IF_FEATURE_PRESERVE_HARDLINKS(...) __VA_ARGS__
-#define IF_NOT_FEATURE_PRESERVE_HARDLINKS(...)
-
-/*
- * Common options for ls, more and telnet
- */
-#define CONFIG_FEATURE_AUTOWIDTH 1
-#define ENABLE_FEATURE_AUTOWIDTH 1
-#define IF_FEATURE_AUTOWIDTH(...) __VA_ARGS__
-#define IF_NOT_FEATURE_AUTOWIDTH(...)
-
-/*
- * Common options for df, du, ls
- */
-#define CONFIG_FEATURE_HUMAN_READABLE 1
-#define ENABLE_FEATURE_HUMAN_READABLE 1
-#define IF_FEATURE_HUMAN_READABLE(...) __VA_ARGS__
-#define IF_NOT_FEATURE_HUMAN_READABLE(...)
-
-/*
- * Common options for md5sum, sha1sum, sha256sum, sha512sum, sha3sum
- */
-#define CONFIG_FEATURE_MD5_SHA1_SUM_CHECK 1
-#define ENABLE_FEATURE_MD5_SHA1_SUM_CHECK 1
-#define IF_FEATURE_MD5_SHA1_SUM_CHECK(...) __VA_ARGS__
-#define IF_NOT_FEATURE_MD5_SHA1_SUM_CHECK(...)
-
-/*
- * Console Utilities
- */
-#undef CONFIG_CHVT
-#define ENABLE_CHVT 0
-#define IF_CHVT(...)
-#define IF_NOT_CHVT(...) __VA_ARGS__
-#undef CONFIG_FGCONSOLE
-#define ENABLE_FGCONSOLE 0
-#define IF_FGCONSOLE(...)
-#define IF_NOT_FGCONSOLE(...) __VA_ARGS__
-#define CONFIG_CLEAR 1
-#define ENABLE_CLEAR 1
-#define IF_CLEAR(...) __VA_ARGS__
-#define IF_NOT_CLEAR(...)
-#undef CONFIG_DEALLOCVT
-#define ENABLE_DEALLOCVT 0
-#define IF_DEALLOCVT(...)
-#define IF_NOT_DEALLOCVT(...) __VA_ARGS__
-#undef CONFIG_DUMPKMAP
-#define ENABLE_DUMPKMAP 0
-#define IF_DUMPKMAP(...)
-#define IF_NOT_DUMPKMAP(...) __VA_ARGS__
-#undef CONFIG_KBD_MODE
-#define ENABLE_KBD_MODE 0
-#define IF_KBD_MODE(...)
-#define IF_NOT_KBD_MODE(...) __VA_ARGS__
-#undef CONFIG_LOADFONT
-#define ENABLE_LOADFONT 0
-#define IF_LOADFONT(...)
-#define IF_NOT_LOADFONT(...) __VA_ARGS__
-#undef CONFIG_LOADKMAP
-#define ENABLE_LOADKMAP 0
-#define IF_LOADKMAP(...)
-#define IF_NOT_LOADKMAP(...) __VA_ARGS__
-#undef CONFIG_OPENVT
-#define ENABLE_OPENVT 0
-#define IF_OPENVT(...)
-#define IF_NOT_OPENVT(...) __VA_ARGS__
-#define CONFIG_RESET 1
-#define ENABLE_RESET 1
-#define IF_RESET(...) __VA_ARGS__
-#define IF_NOT_RESET(...)
-#define CONFIG_RESIZE 1
-#define ENABLE_RESIZE 1
-#define IF_RESIZE(...) __VA_ARGS__
-#define IF_NOT_RESIZE(...)
-#undef CONFIG_FEATURE_RESIZE_PRINT
-#define ENABLE_FEATURE_RESIZE_PRINT 0
-#define IF_FEATURE_RESIZE_PRINT(...)
-#define IF_NOT_FEATURE_RESIZE_PRINT(...) __VA_ARGS__
-#define CONFIG_SETCONSOLE 1
-#define ENABLE_SETCONSOLE 1
-#define IF_SETCONSOLE(...) __VA_ARGS__
-#define IF_NOT_SETCONSOLE(...)
-#undef CONFIG_FEATURE_SETCONSOLE_LONG_OPTIONS
-#define ENABLE_FEATURE_SETCONSOLE_LONG_OPTIONS 0
-#define IF_FEATURE_SETCONSOLE_LONG_OPTIONS(...)
-#define IF_NOT_FEATURE_SETCONSOLE_LONG_OPTIONS(...) __VA_ARGS__
-#undef CONFIG_SETFONT
-#define ENABLE_SETFONT 0
-#define IF_SETFONT(...)
-#define IF_NOT_SETFONT(...) __VA_ARGS__
-#undef CONFIG_FEATURE_SETFONT_TEXTUAL_MAP
-#define ENABLE_FEATURE_SETFONT_TEXTUAL_MAP 0
-#define IF_FEATURE_SETFONT_TEXTUAL_MAP(...)
-#define IF_NOT_FEATURE_SETFONT_TEXTUAL_MAP(...) __VA_ARGS__
-#define CONFIG_DEFAULT_SETFONT_DIR ""
-#define ENABLE_DEFAULT_SETFONT_DIR 1
-#define IF_DEFAULT_SETFONT_DIR(...) __VA_ARGS__
-#define IF_NOT_DEFAULT_SETFONT_DIR(...)
-#undef CONFIG_SETKEYCODES
-#define ENABLE_SETKEYCODES 0
-#define IF_SETKEYCODES(...)
-#define IF_NOT_SETKEYCODES(...) __VA_ARGS__
-#undef CONFIG_SETLOGCONS
-#define ENABLE_SETLOGCONS 0
-#define IF_SETLOGCONS(...)
-#define IF_NOT_SETLOGCONS(...) __VA_ARGS__
-#undef CONFIG_SHOWKEY
-#define ENABLE_SHOWKEY 0
-#define IF_SHOWKEY(...)
-#define IF_NOT_SHOWKEY(...) __VA_ARGS__
-#undef CONFIG_FEATURE_LOADFONT_PSF2
-#define ENABLE_FEATURE_LOADFONT_PSF2 0
-#define IF_FEATURE_LOADFONT_PSF2(...)
-#define IF_NOT_FEATURE_LOADFONT_PSF2(...) __VA_ARGS__
-#undef CONFIG_FEATURE_LOADFONT_RAW
-#define ENABLE_FEATURE_LOADFONT_RAW 0
-#define IF_FEATURE_LOADFONT_RAW(...)
-#define IF_NOT_FEATURE_LOADFONT_RAW(...) __VA_ARGS__
-
-/*
- * Debian Utilities
- */
-#define CONFIG_MKTEMP 1
-#define ENABLE_MKTEMP 1
-#define IF_MKTEMP(...) __VA_ARGS__
-#define IF_NOT_MKTEMP(...)
-#define CONFIG_PIPE_PROGRESS 1
-#define ENABLE_PIPE_PROGRESS 1
-#define IF_PIPE_PROGRESS(...) __VA_ARGS__
-#define IF_NOT_PIPE_PROGRESS(...)
-#define CONFIG_RUN_PARTS 1
-#define ENABLE_RUN_PARTS 1
-#define IF_RUN_PARTS(...) __VA_ARGS__
-#define IF_NOT_RUN_PARTS(...)
-#define CONFIG_FEATURE_RUN_PARTS_LONG_OPTIONS 1
-#define ENABLE_FEATURE_RUN_PARTS_LONG_OPTIONS 1
-#define IF_FEATURE_RUN_PARTS_LONG_OPTIONS(...) __VA_ARGS__
-#define IF_NOT_FEATURE_RUN_PARTS_LONG_OPTIONS(...)
-#define CONFIG_FEATURE_RUN_PARTS_FANCY 1
-#define ENABLE_FEATURE_RUN_PARTS_FANCY 1
-#define IF_FEATURE_RUN_PARTS_FANCY(...) __VA_ARGS__
-#define IF_NOT_FEATURE_RUN_PARTS_FANCY(...)
-#undef CONFIG_START_STOP_DAEMON
-#define ENABLE_START_STOP_DAEMON 0
-#define IF_START_STOP_DAEMON(...)
-#define IF_NOT_START_STOP_DAEMON(...) __VA_ARGS__
-#undef CONFIG_FEATURE_START_STOP_DAEMON_FANCY
-#define ENABLE_FEATURE_START_STOP_DAEMON_FANCY 0
-#define IF_FEATURE_START_STOP_DAEMON_FANCY(...)
-#define IF_NOT_FEATURE_START_STOP_DAEMON_FANCY(...) __VA_ARGS__
-#undef CONFIG_FEATURE_START_STOP_DAEMON_LONG_OPTIONS
-#define ENABLE_FEATURE_START_STOP_DAEMON_LONG_OPTIONS 0
-#define IF_FEATURE_START_STOP_DAEMON_LONG_OPTIONS(...)
-#define IF_NOT_FEATURE_START_STOP_DAEMON_LONG_OPTIONS(...) __VA_ARGS__
-#define CONFIG_WHICH 1
-#define ENABLE_WHICH 1
-#define IF_WHICH(...) __VA_ARGS__
-#define IF_NOT_WHICH(...)
-
-/*
- * Editors
- */
-#define CONFIG_PATCH 1
-#define ENABLE_PATCH 1
-#define IF_PATCH(...) __VA_ARGS__
-#define IF_NOT_PATCH(...)
-#define CONFIG_VI 1
-#define ENABLE_VI 1
-#define IF_VI(...) __VA_ARGS__
-#define IF_NOT_VI(...)
-#define CONFIG_FEATURE_VI_MAX_LEN 256
-#define ENABLE_FEATURE_VI_MAX_LEN 1
-#define IF_FEATURE_VI_MAX_LEN(...) __VA_ARGS__
-#define IF_NOT_FEATURE_VI_MAX_LEN(...)
-#define CONFIG_FEATURE_VI_8BIT 1
-#define ENABLE_FEATURE_VI_8BIT 1
-#define IF_FEATURE_VI_8BIT(...) __VA_ARGS__
-#define IF_NOT_FEATURE_VI_8BIT(...)
-#define CONFIG_FEATURE_VI_COLON 1
-#define ENABLE_FEATURE_VI_COLON 1
-#define IF_FEATURE_VI_COLON(...) __VA_ARGS__
-#define IF_NOT_FEATURE_VI_COLON(...)
-#define CONFIG_FEATURE_VI_YANKMARK 1
-#define ENABLE_FEATURE_VI_YANKMARK 1
-#define IF_FEATURE_VI_YANKMARK(...) __VA_ARGS__
-#define IF_NOT_FEATURE_VI_YANKMARK(...)
-#define CONFIG_FEATURE_VI_SEARCH 1
-#define ENABLE_FEATURE_VI_SEARCH 1
-#define IF_FEATURE_VI_SEARCH(...) __VA_ARGS__
-#define IF_NOT_FEATURE_VI_SEARCH(...)
-#define CONFIG_FEATURE_VI_REGEX_SEARCH 1
-#define ENABLE_FEATURE_VI_REGEX_SEARCH 1
-#define IF_FEATURE_VI_REGEX_SEARCH(...) __VA_ARGS__
-#define IF_NOT_FEATURE_VI_REGEX_SEARCH(...)
-#define CONFIG_FEATURE_VI_USE_SIGNALS 1
-#define ENABLE_FEATURE_VI_USE_SIGNALS 1
-#define IF_FEATURE_VI_USE_SIGNALS(...) __VA_ARGS__
-#define IF_NOT_FEATURE_VI_USE_SIGNALS(...)
-#define CONFIG_FEATURE_VI_DOT_CMD 1
-#define ENABLE_FEATURE_VI_DOT_CMD 1
-#define IF_FEATURE_VI_DOT_CMD(...) __VA_ARGS__
-#define IF_NOT_FEATURE_VI_DOT_CMD(...)
-#define CONFIG_FEATURE_VI_READONLY 1
-#define ENABLE_FEATURE_VI_READONLY 1
-#define IF_FEATURE_VI_READONLY(...) __VA_ARGS__
-#define IF_NOT_FEATURE_VI_READONLY(...)
-#define CONFIG_FEATURE_VI_SETOPTS 1
-#define ENABLE_FEATURE_VI_SETOPTS 1
-#define IF_FEATURE_VI_SETOPTS(...) __VA_ARGS__
-#define IF_NOT_FEATURE_VI_SETOPTS(...)
-#define CONFIG_FEATURE_VI_SET 1
-#define ENABLE_FEATURE_VI_SET 1
-#define IF_FEATURE_VI_SET(...) __VA_ARGS__
-#define IF_NOT_FEATURE_VI_SET(...)
-#define CONFIG_FEATURE_VI_WIN_RESIZE 1
-#define ENABLE_FEATURE_VI_WIN_RESIZE 1
-#define IF_FEATURE_VI_WIN_RESIZE(...) __VA_ARGS__
-#define IF_NOT_FEATURE_VI_WIN_RESIZE(...)
-#define CONFIG_FEATURE_VI_ASK_TERMINAL 1
-#define ENABLE_FEATURE_VI_ASK_TERMINAL 1
-#define IF_FEATURE_VI_ASK_TERMINAL(...) __VA_ARGS__
-#define IF_NOT_FEATURE_VI_ASK_TERMINAL(...)
-#define CONFIG_AWK 1
-#define ENABLE_AWK 1
-#define IF_AWK(...) __VA_ARGS__
-#define IF_NOT_AWK(...)
-#define CONFIG_FEATURE_AWK_LIBM 1
-#define ENABLE_FEATURE_AWK_LIBM 1
-#define IF_FEATURE_AWK_LIBM(...) __VA_ARGS__
-#define IF_NOT_FEATURE_AWK_LIBM(...)
-#define CONFIG_CMP 1
-#define ENABLE_CMP 1
-#define IF_CMP(...) __VA_ARGS__
-#define IF_NOT_CMP(...)
-#define CONFIG_DIFF 1
-#define ENABLE_DIFF 1
-#define IF_DIFF(...) __VA_ARGS__
-#define IF_NOT_DIFF(...)
-#define CONFIG_FEATURE_DIFF_LONG_OPTIONS 1
-#define ENABLE_FEATURE_DIFF_LONG_OPTIONS 1
-#define IF_FEATURE_DIFF_LONG_OPTIONS(...) __VA_ARGS__
-#define IF_NOT_FEATURE_DIFF_LONG_OPTIONS(...)
-#define CONFIG_FEATURE_DIFF_DIR 1
-#define ENABLE_FEATURE_DIFF_DIR 1
-#define IF_FEATURE_DIFF_DIR(...) __VA_ARGS__
-#define IF_NOT_FEATURE_DIFF_DIR(...)
-#define CONFIG_ED 1
-#define ENABLE_ED 1
-#define IF_ED(...) __VA_ARGS__
-#define IF_NOT_ED(...)
-#define CONFIG_SED 1
-#define ENABLE_SED 1
-#define IF_SED(...) __VA_ARGS__
-#define IF_NOT_SED(...)
-#define CONFIG_FEATURE_ALLOW_EXEC 1
-#define ENABLE_FEATURE_ALLOW_EXEC 1
-#define IF_FEATURE_ALLOW_EXEC(...) __VA_ARGS__
-#define IF_NOT_FEATURE_ALLOW_EXEC(...)
-
-/*
- * Finding Utilities
- */
-#define CONFIG_FIND 1
-#define ENABLE_FIND 1
-#define IF_FIND(...) __VA_ARGS__
-#define IF_NOT_FIND(...)
-#define CONFIG_FEATURE_FIND_PRINT0 1
-#define ENABLE_FEATURE_FIND_PRINT0 1
-#define IF_FEATURE_FIND_PRINT0(...) __VA_ARGS__
-#define IF_NOT_FEATURE_FIND_PRINT0(...)
-#define CONFIG_FEATURE_FIND_MTIME 1
-#define ENABLE_FEATURE_FIND_MTIME 1
-#define IF_FEATURE_FIND_MTIME(...) __VA_ARGS__
-#define IF_NOT_FEATURE_FIND_MTIME(...)
-#define CONFIG_FEATURE_FIND_MMIN 1
-#define ENABLE_FEATURE_FIND_MMIN 1
-#define IF_FEATURE_FIND_MMIN(...) __VA_ARGS__
-#define IF_NOT_FEATURE_FIND_MMIN(...)
-#define CONFIG_FEATURE_FIND_PERM 1
-#define ENABLE_FEATURE_FIND_PERM 1
-#define IF_FEATURE_FIND_PERM(...) __VA_ARGS__
-#define IF_NOT_FEATURE_FIND_PERM(...)
-#define CONFIG_FEATURE_FIND_TYPE 1
-#define ENABLE_FEATURE_FIND_TYPE 1
-#define IF_FEATURE_FIND_TYPE(...) __VA_ARGS__
-#define IF_NOT_FEATURE_FIND_TYPE(...)
-#define CONFIG_FEATURE_FIND_XDEV 1
-#define ENABLE_FEATURE_FIND_XDEV 1
-#define IF_FEATURE_FIND_XDEV(...) __VA_ARGS__
-#define IF_NOT_FEATURE_FIND_XDEV(...)
-#define CONFIG_FEATURE_FIND_MAXDEPTH 1
-#define ENABLE_FEATURE_FIND_MAXDEPTH 1
-#define IF_FEATURE_FIND_MAXDEPTH(...) __VA_ARGS__
-#define IF_NOT_FEATURE_FIND_MAXDEPTH(...)
-#define CONFIG_FEATURE_FIND_NEWER 1
-#define ENABLE_FEATURE_FIND_NEWER 1
-#define IF_FEATURE_FIND_NEWER(...) __VA_ARGS__
-#define IF_NOT_FEATURE_FIND_NEWER(...)
-#undef CONFIG_FEATURE_FIND_INUM
-#define ENABLE_FEATURE_FIND_INUM 0
-#define IF_FEATURE_FIND_INUM(...)
-#define IF_NOT_FEATURE_FIND_INUM(...) __VA_ARGS__
-#define CONFIG_FEATURE_FIND_EXEC 1
-#define ENABLE_FEATURE_FIND_EXEC 1
-#define IF_FEATURE_FIND_EXEC(...) __VA_ARGS__
-#define IF_NOT_FEATURE_FIND_EXEC(...)
-#define CONFIG_FEATURE_FIND_USER 1
-#define ENABLE_FEATURE_FIND_USER 1
-#define IF_FEATURE_FIND_USER(...) __VA_ARGS__
-#define IF_NOT_FEATURE_FIND_USER(...)
-#define CONFIG_FEATURE_FIND_GROUP 1
-#define ENABLE_FEATURE_FIND_GROUP 1
-#define IF_FEATURE_FIND_GROUP(...) __VA_ARGS__
-#define IF_NOT_FEATURE_FIND_GROUP(...)
-#define CONFIG_FEATURE_FIND_NOT 1
-#define ENABLE_FEATURE_FIND_NOT 1
-#define IF_FEATURE_FIND_NOT(...) __VA_ARGS__
-#define IF_NOT_FEATURE_FIND_NOT(...)
-#define CONFIG_FEATURE_FIND_DEPTH 1
-#define ENABLE_FEATURE_FIND_DEPTH 1
-#define IF_FEATURE_FIND_DEPTH(...) __VA_ARGS__
-#define IF_NOT_FEATURE_FIND_DEPTH(...)
-#define CONFIG_FEATURE_FIND_PAREN 1
-#define ENABLE_FEATURE_FIND_PAREN 1
-#define IF_FEATURE_FIND_PAREN(...) __VA_ARGS__
-#define IF_NOT_FEATURE_FIND_PAREN(...)
-#define CONFIG_FEATURE_FIND_SIZE 1
-#define ENABLE_FEATURE_FIND_SIZE 1
-#define IF_FEATURE_FIND_SIZE(...) __VA_ARGS__
-#define IF_NOT_FEATURE_FIND_SIZE(...)
-#define CONFIG_FEATURE_FIND_PRUNE 1
-#define ENABLE_FEATURE_FIND_PRUNE 1
-#define IF_FEATURE_FIND_PRUNE(...) __VA_ARGS__
-#define IF_NOT_FEATURE_FIND_PRUNE(...)
-#undef CONFIG_FEATURE_FIND_DELETE
-#define ENABLE_FEATURE_FIND_DELETE 0
-#define IF_FEATURE_FIND_DELETE(...)
-#define IF_NOT_FEATURE_FIND_DELETE(...) __VA_ARGS__
-#define CONFIG_FEATURE_FIND_PATH 1
-#define ENABLE_FEATURE_FIND_PATH 1
-#define IF_FEATURE_FIND_PATH(...) __VA_ARGS__
-#define IF_NOT_FEATURE_FIND_PATH(...)
-#define CONFIG_FEATURE_FIND_REGEX 1
-#define ENABLE_FEATURE_FIND_REGEX 1
-#define IF_FEATURE_FIND_REGEX(...) __VA_ARGS__
-#define IF_NOT_FEATURE_FIND_REGEX(...)
-#undef CONFIG_FEATURE_FIND_CONTEXT
-#define ENABLE_FEATURE_FIND_CONTEXT 0
-#define IF_FEATURE_FIND_CONTEXT(...)
-#define IF_NOT_FEATURE_FIND_CONTEXT(...) __VA_ARGS__
-#define CONFIG_FEATURE_FIND_LINKS 1
-#define ENABLE_FEATURE_FIND_LINKS 1
-#define IF_FEATURE_FIND_LINKS(...) __VA_ARGS__
-#define IF_NOT_FEATURE_FIND_LINKS(...)
-#define CONFIG_GREP 1
-#define ENABLE_GREP 1
-#define IF_GREP(...) __VA_ARGS__
-#define IF_NOT_GREP(...)
-#define CONFIG_FEATURE_GREP_EGREP_ALIAS 1
-#define ENABLE_FEATURE_GREP_EGREP_ALIAS 1
-#define IF_FEATURE_GREP_EGREP_ALIAS(...) __VA_ARGS__
-#define IF_NOT_FEATURE_GREP_EGREP_ALIAS(...)
-#define CONFIG_FEATURE_GREP_FGREP_ALIAS 1
-#define ENABLE_FEATURE_GREP_FGREP_ALIAS 1
-#define IF_FEATURE_GREP_FGREP_ALIAS(...) __VA_ARGS__
-#define IF_NOT_FEATURE_GREP_FGREP_ALIAS(...)
-#define CONFIG_FEATURE_GREP_CONTEXT 1
-#define ENABLE_FEATURE_GREP_CONTEXT 1
-#define IF_FEATURE_GREP_CONTEXT(...) __VA_ARGS__
-#define IF_NOT_FEATURE_GREP_CONTEXT(...)
-#define CONFIG_XARGS 1
-#define ENABLE_XARGS 1
-#define IF_XARGS(...) __VA_ARGS__
-#define IF_NOT_XARGS(...)
-#define CONFIG_FEATURE_XARGS_SUPPORT_CONFIRMATION 1
-#define ENABLE_FEATURE_XARGS_SUPPORT_CONFIRMATION 1
-#define IF_FEATURE_XARGS_SUPPORT_CONFIRMATION(...) __VA_ARGS__
-#define IF_NOT_FEATURE_XARGS_SUPPORT_CONFIRMATION(...)
-#define CONFIG_FEATURE_XARGS_SUPPORT_QUOTES 1
-#define ENABLE_FEATURE_XARGS_SUPPORT_QUOTES 1
-#define IF_FEATURE_XARGS_SUPPORT_QUOTES(...) __VA_ARGS__
-#define IF_NOT_FEATURE_XARGS_SUPPORT_QUOTES(...)
-#define CONFIG_FEATURE_XARGS_SUPPORT_TERMOPT 1
-#define ENABLE_FEATURE_XARGS_SUPPORT_TERMOPT 1
-#define IF_FEATURE_XARGS_SUPPORT_TERMOPT(...) __VA_ARGS__
-#define IF_NOT_FEATURE_XARGS_SUPPORT_TERMOPT(...)
-#define CONFIG_FEATURE_XARGS_SUPPORT_ZERO_TERM 1
-#define ENABLE_FEATURE_XARGS_SUPPORT_ZERO_TERM 1
-#define IF_FEATURE_XARGS_SUPPORT_ZERO_TERM(...) __VA_ARGS__
-#define IF_NOT_FEATURE_XARGS_SUPPORT_ZERO_TERM(...)
-
-/*
- * Init Utilities
- */
-#undef CONFIG_BOOTCHARTD
-#define ENABLE_BOOTCHARTD 0
-#define IF_BOOTCHARTD(...)
-#define IF_NOT_BOOTCHARTD(...) __VA_ARGS__
-#undef CONFIG_FEATURE_BOOTCHARTD_BLOATED_HEADER
-#define ENABLE_FEATURE_BOOTCHARTD_BLOATED_HEADER 0
-#define IF_FEATURE_BOOTCHARTD_BLOATED_HEADER(...)
-#define IF_NOT_FEATURE_BOOTCHARTD_BLOATED_HEADER(...) __VA_ARGS__
-#undef CONFIG_FEATURE_BOOTCHARTD_CONFIG_FILE
-#define ENABLE_FEATURE_BOOTCHARTD_CONFIG_FILE 0
-#define IF_FEATURE_BOOTCHARTD_CONFIG_FILE(...)
-#define IF_NOT_FEATURE_BOOTCHARTD_CONFIG_FILE(...) __VA_ARGS__
-#define CONFIG_HALT 1
-#define ENABLE_HALT 1
-#define IF_HALT(...) __VA_ARGS__
-#define IF_NOT_HALT(...)
-#undef CONFIG_FEATURE_CALL_TELINIT
-#define ENABLE_FEATURE_CALL_TELINIT 0
-#define IF_FEATURE_CALL_TELINIT(...)
-#define IF_NOT_FEATURE_CALL_TELINIT(...) __VA_ARGS__
-#define CONFIG_TELINIT_PATH ""
-#define ENABLE_TELINIT_PATH 1
-#define IF_TELINIT_PATH(...) __VA_ARGS__
-#define IF_NOT_TELINIT_PATH(...)
-#undef CONFIG_INIT
-#define ENABLE_INIT 0
-#define IF_INIT(...)
-#define IF_NOT_INIT(...) __VA_ARGS__
-#undef CONFIG_FEATURE_USE_INITTAB
-#define ENABLE_FEATURE_USE_INITTAB 0
-#define IF_FEATURE_USE_INITTAB(...)
-#define IF_NOT_FEATURE_USE_INITTAB(...) __VA_ARGS__
-#undef CONFIG_FEATURE_KILL_REMOVED
-#define ENABLE_FEATURE_KILL_REMOVED 0
-#define IF_FEATURE_KILL_REMOVED(...)
-#define IF_NOT_FEATURE_KILL_REMOVED(...) __VA_ARGS__
-#define CONFIG_FEATURE_KILL_DELAY 0
-#define ENABLE_FEATURE_KILL_DELAY 1
-#define IF_FEATURE_KILL_DELAY(...) __VA_ARGS__
-#define IF_NOT_FEATURE_KILL_DELAY(...)
-#undef CONFIG_FEATURE_INIT_SCTTY
-#define ENABLE_FEATURE_INIT_SCTTY 0
-#define IF_FEATURE_INIT_SCTTY(...)
-#define IF_NOT_FEATURE_INIT_SCTTY(...) __VA_ARGS__
-#undef CONFIG_FEATURE_INIT_SYSLOG
-#define ENABLE_FEATURE_INIT_SYSLOG 0
-#define IF_FEATURE_INIT_SYSLOG(...)
-#define IF_NOT_FEATURE_INIT_SYSLOG(...) __VA_ARGS__
-#undef CONFIG_FEATURE_EXTRA_QUIET
-#define ENABLE_FEATURE_EXTRA_QUIET 0
-#define IF_FEATURE_EXTRA_QUIET(...)
-#define IF_NOT_FEATURE_EXTRA_QUIET(...) __VA_ARGS__
-#undef CONFIG_FEATURE_INIT_COREDUMPS
-#define ENABLE_FEATURE_INIT_COREDUMPS 0
-#define IF_FEATURE_INIT_COREDUMPS(...)
-#define IF_NOT_FEATURE_INIT_COREDUMPS(...) __VA_ARGS__
-#undef CONFIG_FEATURE_INITRD
-#define ENABLE_FEATURE_INITRD 0
-#define IF_FEATURE_INITRD(...)
-#define IF_NOT_FEATURE_INITRD(...) __VA_ARGS__
-#define CONFIG_INIT_TERMINAL_TYPE ""
-#define ENABLE_INIT_TERMINAL_TYPE 1
-#define IF_INIT_TERMINAL_TYPE(...) __VA_ARGS__
-#define IF_NOT_INIT_TERMINAL_TYPE(...)
-#define CONFIG_MESG 1
-#define ENABLE_MESG 1
-#define IF_MESG(...) __VA_ARGS__
-#define IF_NOT_MESG(...)
-#define CONFIG_FEATURE_MESG_ENABLE_ONLY_GROUP 1
-#define ENABLE_FEATURE_MESG_ENABLE_ONLY_GROUP 1
-#define IF_FEATURE_MESG_ENABLE_ONLY_GROUP(...) __VA_ARGS__
-#define IF_NOT_FEATURE_MESG_ENABLE_ONLY_GROUP(...)
-
-/*
- * Login/Password Management Utilities
- */
-#undef CONFIG_ADD_SHELL
-#define ENABLE_ADD_SHELL 0
-#define IF_ADD_SHELL(...)
-#define IF_NOT_ADD_SHELL(...) __VA_ARGS__
-#undef CONFIG_REMOVE_SHELL
-#define ENABLE_REMOVE_SHELL 0
-#define IF_REMOVE_SHELL(...)
-#define IF_NOT_REMOVE_SHELL(...) __VA_ARGS__
-#undef CONFIG_FEATURE_SHADOWPASSWDS
-#define ENABLE_FEATURE_SHADOWPASSWDS 0
-#define IF_FEATURE_SHADOWPASSWDS(...)
-#define IF_NOT_FEATURE_SHADOWPASSWDS(...) __VA_ARGS__
-#undef CONFIG_USE_BB_PWD_GRP
-#define ENABLE_USE_BB_PWD_GRP 0
-#define IF_USE_BB_PWD_GRP(...)
-#define IF_NOT_USE_BB_PWD_GRP(...) __VA_ARGS__
-#undef CONFIG_USE_BB_SHADOW
-#define ENABLE_USE_BB_SHADOW 0
-#define IF_USE_BB_SHADOW(...)
-#define IF_NOT_USE_BB_SHADOW(...) __VA_ARGS__
-#define CONFIG_USE_BB_CRYPT 1
-#define ENABLE_USE_BB_CRYPT 1
-#define IF_USE_BB_CRYPT(...) __VA_ARGS__
-#define IF_NOT_USE_BB_CRYPT(...)
-#undef CONFIG_USE_BB_CRYPT_SHA
-#define ENABLE_USE_BB_CRYPT_SHA 0
-#define IF_USE_BB_CRYPT_SHA(...)
-#define IF_NOT_USE_BB_CRYPT_SHA(...) __VA_ARGS__
-#undef CONFIG_ADDUSER
-#define ENABLE_ADDUSER 0
-#define IF_ADDUSER(...)
-#define IF_NOT_ADDUSER(...) __VA_ARGS__
-#undef CONFIG_FEATURE_ADDUSER_LONG_OPTIONS
-#define ENABLE_FEATURE_ADDUSER_LONG_OPTIONS 0
-#define IF_FEATURE_ADDUSER_LONG_OPTIONS(...)
-#define IF_NOT_FEATURE_ADDUSER_LONG_OPTIONS(...) __VA_ARGS__
-#undef CONFIG_FEATURE_CHECK_NAMES
-#define ENABLE_FEATURE_CHECK_NAMES 0
-#define IF_FEATURE_CHECK_NAMES(...)
-#define IF_NOT_FEATURE_CHECK_NAMES(...) __VA_ARGS__
-#define CONFIG_FIRST_SYSTEM_ID 0
-#define ENABLE_FIRST_SYSTEM_ID 1
-#define IF_FIRST_SYSTEM_ID(...) __VA_ARGS__
-#define IF_NOT_FIRST_SYSTEM_ID(...)
-#define CONFIG_LAST_SYSTEM_ID 0
-#define ENABLE_LAST_SYSTEM_ID 1
-#define IF_LAST_SYSTEM_ID(...) __VA_ARGS__
-#define IF_NOT_LAST_SYSTEM_ID(...)
-#undef CONFIG_ADDGROUP
-#define ENABLE_ADDGROUP 0
-#define IF_ADDGROUP(...)
-#define IF_NOT_ADDGROUP(...) __VA_ARGS__
-#undef CONFIG_FEATURE_ADDGROUP_LONG_OPTIONS
-#define ENABLE_FEATURE_ADDGROUP_LONG_OPTIONS 0
-#define IF_FEATURE_ADDGROUP_LONG_OPTIONS(...)
-#define IF_NOT_FEATURE_ADDGROUP_LONG_OPTIONS(...) __VA_ARGS__
-#undef CONFIG_FEATURE_ADDUSER_TO_GROUP
-#define ENABLE_FEATURE_ADDUSER_TO_GROUP 0
-#define IF_FEATURE_ADDUSER_TO_GROUP(...)
-#define IF_NOT_FEATURE_ADDUSER_TO_GROUP(...) __VA_ARGS__
-#undef CONFIG_DELUSER
-#define ENABLE_DELUSER 0
-#define IF_DELUSER(...)
-#define IF_NOT_DELUSER(...) __VA_ARGS__
-#undef CONFIG_DELGROUP
-#define ENABLE_DELGROUP 0
-#define IF_DELGROUP(...)
-#define IF_NOT_DELGROUP(...) __VA_ARGS__
-#undef CONFIG_FEATURE_DEL_USER_FROM_GROUP
-#define ENABLE_FEATURE_DEL_USER_FROM_GROUP 0
-#define IF_FEATURE_DEL_USER_FROM_GROUP(...)
-#define IF_NOT_FEATURE_DEL_USER_FROM_GROUP(...) __VA_ARGS__
-#undef CONFIG_GETTY
-#define ENABLE_GETTY 0
-#define IF_GETTY(...)
-#define IF_NOT_GETTY(...) __VA_ARGS__
-#undef CONFIG_LOGIN
-#define ENABLE_LOGIN 0
-#define IF_LOGIN(...)
-#define IF_NOT_LOGIN(...) __VA_ARGS__
-#undef CONFIG_LOGIN_SESSION_AS_CHILD
-#define ENABLE_LOGIN_SESSION_AS_CHILD 0
-#define IF_LOGIN_SESSION_AS_CHILD(...)
-#define IF_NOT_LOGIN_SESSION_AS_CHILD(...) __VA_ARGS__
-#undef CONFIG_PAM
-#define ENABLE_PAM 0
-#define IF_PAM(...)
-#define IF_NOT_PAM(...) __VA_ARGS__
-#undef CONFIG_LOGIN_SCRIPTS
-#define ENABLE_LOGIN_SCRIPTS 0
-#define IF_LOGIN_SCRIPTS(...)
-#define IF_NOT_LOGIN_SCRIPTS(...) __VA_ARGS__
-#undef CONFIG_FEATURE_NOLOGIN
-#define ENABLE_FEATURE_NOLOGIN 0
-#define IF_FEATURE_NOLOGIN(...)
-#define IF_NOT_FEATURE_NOLOGIN(...) __VA_ARGS__
-#undef CONFIG_FEATURE_SECURETTY
-#define ENABLE_FEATURE_SECURETTY 0
-#define IF_FEATURE_SECURETTY(...)
-#define IF_NOT_FEATURE_SECURETTY(...) __VA_ARGS__
-#undef CONFIG_PASSWD
-#define ENABLE_PASSWD 0
-#define IF_PASSWD(...)
-#define IF_NOT_PASSWD(...) __VA_ARGS__
-#undef CONFIG_FEATURE_PASSWD_WEAK_CHECK
-#define ENABLE_FEATURE_PASSWD_WEAK_CHECK 0
-#define IF_FEATURE_PASSWD_WEAK_CHECK(...)
-#define IF_NOT_FEATURE_PASSWD_WEAK_CHECK(...) __VA_ARGS__
-#undef CONFIG_CRYPTPW
-#define ENABLE_CRYPTPW 0
-#define IF_CRYPTPW(...)
-#define IF_NOT_CRYPTPW(...) __VA_ARGS__
-#undef CONFIG_CHPASSWD
-#define ENABLE_CHPASSWD 0
-#define IF_CHPASSWD(...)
-#define IF_NOT_CHPASSWD(...) __VA_ARGS__
-#define CONFIG_FEATURE_DEFAULT_PASSWD_ALGO ""
-#define ENABLE_FEATURE_DEFAULT_PASSWD_ALGO 1
-#define IF_FEATURE_DEFAULT_PASSWD_ALGO(...) __VA_ARGS__
-#define IF_NOT_FEATURE_DEFAULT_PASSWD_ALGO(...)
-#undef CONFIG_SU
-#define ENABLE_SU 0
-#define IF_SU(...)
-#define IF_NOT_SU(...) __VA_ARGS__
-#undef CONFIG_FEATURE_SU_SYSLOG
-#define ENABLE_FEATURE_SU_SYSLOG 0
-#define IF_FEATURE_SU_SYSLOG(...)
-#define IF_NOT_FEATURE_SU_SYSLOG(...) __VA_ARGS__
-#undef CONFIG_FEATURE_SU_CHECKS_SHELLS
-#define ENABLE_FEATURE_SU_CHECKS_SHELLS 0
-#define IF_FEATURE_SU_CHECKS_SHELLS(...)
-#define IF_NOT_FEATURE_SU_CHECKS_SHELLS(...) __VA_ARGS__
-#undef CONFIG_SULOGIN
-#define ENABLE_SULOGIN 0
-#define IF_SULOGIN(...)
-#define IF_NOT_SULOGIN(...) __VA_ARGS__
-#undef CONFIG_VLOCK
-#define ENABLE_VLOCK 0
-#define IF_VLOCK(...)
-#define IF_NOT_VLOCK(...) __VA_ARGS__
-
-/*
- * Linux Ext2 FS Progs
- */
-#define CONFIG_CHATTR 1
-#define ENABLE_CHATTR 1
-#define IF_CHATTR(...) __VA_ARGS__
-#define IF_NOT_CHATTR(...)
-#undef CONFIG_FSCK
-#define ENABLE_FSCK 0
-#define IF_FSCK(...)
-#define IF_NOT_FSCK(...) __VA_ARGS__
-#define CONFIG_LSATTR 1
-#define ENABLE_LSATTR 1
-#define IF_LSATTR(...) __VA_ARGS__
-#define IF_NOT_LSATTR(...)
-#define CONFIG_TUNE2FS 1
-#define ENABLE_TUNE2FS 1
-#define IF_TUNE2FS(...) __VA_ARGS__
-#define IF_NOT_TUNE2FS(...)
-
-/*
- * Linux Module Utilities
- */
-#define CONFIG_MODINFO 1
-#define ENABLE_MODINFO 1
-#define IF_MODINFO(...) __VA_ARGS__
-#define IF_NOT_MODINFO(...)
-#undef CONFIG_MODPROBE_SMALL
-#define ENABLE_MODPROBE_SMALL 0
-#define IF_MODPROBE_SMALL(...)
-#define IF_NOT_MODPROBE_SMALL(...) __VA_ARGS__
-#define CONFIG_FEATURE_MODPROBE_SMALL_OPTIONS_ON_CMDLINE 1
-#define ENABLE_FEATURE_MODPROBE_SMALL_OPTIONS_ON_CMDLINE 1
-#define IF_FEATURE_MODPROBE_SMALL_OPTIONS_ON_CMDLINE(...) __VA_ARGS__
-#define IF_NOT_FEATURE_MODPROBE_SMALL_OPTIONS_ON_CMDLINE(...)
-#define CONFIG_FEATURE_MODPROBE_SMALL_CHECK_ALREADY_LOADED 1
-#define ENABLE_FEATURE_MODPROBE_SMALL_CHECK_ALREADY_LOADED 1
-#define IF_FEATURE_MODPROBE_SMALL_CHECK_ALREADY_LOADED(...) __VA_ARGS__
-#define IF_NOT_FEATURE_MODPROBE_SMALL_CHECK_ALREADY_LOADED(...)
-#define CONFIG_INSMOD 1
-#define ENABLE_INSMOD 1
-#define IF_INSMOD(...) __VA_ARGS__
-#define IF_NOT_INSMOD(...)
-#define CONFIG_RMMOD 1
-#define ENABLE_RMMOD 1
-#define IF_RMMOD(...) __VA_ARGS__
-#define IF_NOT_RMMOD(...)
-#define CONFIG_LSMOD 1
-#define ENABLE_LSMOD 1
-#define IF_LSMOD(...) __VA_ARGS__
-#define IF_NOT_LSMOD(...)
-#define CONFIG_FEATURE_LSMOD_PRETTY_2_6_OUTPUT 1
-#define ENABLE_FEATURE_LSMOD_PRETTY_2_6_OUTPUT 1
-#define IF_FEATURE_LSMOD_PRETTY_2_6_OUTPUT(...) __VA_ARGS__
-#define IF_NOT_FEATURE_LSMOD_PRETTY_2_6_OUTPUT(...)
-#define CONFIG_MODPROBE 1
-#define ENABLE_MODPROBE 1
-#define IF_MODPROBE(...) __VA_ARGS__
-#define IF_NOT_MODPROBE(...)
-#undef CONFIG_FEATURE_MODPROBE_BLACKLIST
-#define ENABLE_FEATURE_MODPROBE_BLACKLIST 0
-#define IF_FEATURE_MODPROBE_BLACKLIST(...)
-#define IF_NOT_FEATURE_MODPROBE_BLACKLIST(...) __VA_ARGS__
-#define CONFIG_DEPMOD 1
-#define ENABLE_DEPMOD 1
-#define IF_DEPMOD(...) __VA_ARGS__
-#define IF_NOT_DEPMOD(...)
-
-/*
- * Options common to multiple modutils
- */
-#undef CONFIG_FEATURE_2_4_MODULES
-#define ENABLE_FEATURE_2_4_MODULES 0
-#define IF_FEATURE_2_4_MODULES(...)
-#define IF_NOT_FEATURE_2_4_MODULES(...) __VA_ARGS__
-#define CONFIG_FEATURE_INSMOD_TRY_MMAP 1
-#define ENABLE_FEATURE_INSMOD_TRY_MMAP 1
-#define IF_FEATURE_INSMOD_TRY_MMAP(...) __VA_ARGS__
-#define IF_NOT_FEATURE_INSMOD_TRY_MMAP(...)
-#undef CONFIG_FEATURE_INSMOD_VERSION_CHECKING
-#define ENABLE_FEATURE_INSMOD_VERSION_CHECKING 0
-#define IF_FEATURE_INSMOD_VERSION_CHECKING(...)
-#define IF_NOT_FEATURE_INSMOD_VERSION_CHECKING(...) __VA_ARGS__
-#undef CONFIG_FEATURE_INSMOD_KSYMOOPS_SYMBOLS
-#define ENABLE_FEATURE_INSMOD_KSYMOOPS_SYMBOLS 0
-#define IF_FEATURE_INSMOD_KSYMOOPS_SYMBOLS(...)
-#define IF_NOT_FEATURE_INSMOD_KSYMOOPS_SYMBOLS(...) __VA_ARGS__
-#undef CONFIG_FEATURE_INSMOD_LOADINKMEM
-#define ENABLE_FEATURE_INSMOD_LOADINKMEM 0
-#define IF_FEATURE_INSMOD_LOADINKMEM(...)
-#define IF_NOT_FEATURE_INSMOD_LOADINKMEM(...) __VA_ARGS__
-#undef CONFIG_FEATURE_INSMOD_LOAD_MAP
-#define ENABLE_FEATURE_INSMOD_LOAD_MAP 0
-#define IF_FEATURE_INSMOD_LOAD_MAP(...)
-#define IF_NOT_FEATURE_INSMOD_LOAD_MAP(...) __VA_ARGS__
-#undef CONFIG_FEATURE_INSMOD_LOAD_MAP_FULL
-#define ENABLE_FEATURE_INSMOD_LOAD_MAP_FULL 0
-#define IF_FEATURE_INSMOD_LOAD_MAP_FULL(...)
-#define IF_NOT_FEATURE_INSMOD_LOAD_MAP_FULL(...) __VA_ARGS__
-#define CONFIG_FEATURE_CHECK_TAINTED_MODULE 1
-#define ENABLE_FEATURE_CHECK_TAINTED_MODULE 1
-#define IF_FEATURE_CHECK_TAINTED_MODULE(...) __VA_ARGS__
-#define IF_NOT_FEATURE_CHECK_TAINTED_MODULE(...)
-#define CONFIG_FEATURE_MODUTILS_ALIAS 1
-#define ENABLE_FEATURE_MODUTILS_ALIAS 1
-#define IF_FEATURE_MODUTILS_ALIAS(...) __VA_ARGS__
-#define IF_NOT_FEATURE_MODUTILS_ALIAS(...)
-#define CONFIG_FEATURE_MODUTILS_SYMBOLS 1
-#define ENABLE_FEATURE_MODUTILS_SYMBOLS 1
-#define IF_FEATURE_MODUTILS_SYMBOLS(...) __VA_ARGS__
-#define IF_NOT_FEATURE_MODUTILS_SYMBOLS(...)
-#define CONFIG_DEFAULT_DEPMOD_FILE "modules.dep"
-#define ENABLE_DEFAULT_DEPMOD_FILE 1
-#define IF_DEFAULT_DEPMOD_FILE(...) __VA_ARGS__
-#define IF_NOT_DEFAULT_DEPMOD_FILE(...)
-
-/*
- * Linux System Utilities
- */
-#define CONFIG_BLOCKDEV 1
-#define ENABLE_BLOCKDEV 1
-#define IF_BLOCKDEV(...) __VA_ARGS__
-#define IF_NOT_BLOCKDEV(...)
-#undef CONFIG_MDEV
-#define ENABLE_MDEV 0
-#define IF_MDEV(...)
-#define IF_NOT_MDEV(...) __VA_ARGS__
-#undef CONFIG_FEATURE_MDEV_CONF
-#define ENABLE_FEATURE_MDEV_CONF 0
-#define IF_FEATURE_MDEV_CONF(...)
-#define IF_NOT_FEATURE_MDEV_CONF(...) __VA_ARGS__
-#undef CONFIG_FEATURE_MDEV_RENAME
-#define ENABLE_FEATURE_MDEV_RENAME 0
-#define IF_FEATURE_MDEV_RENAME(...)
-#define IF_NOT_FEATURE_MDEV_RENAME(...) __VA_ARGS__
-#undef CONFIG_FEATURE_MDEV_RENAME_REGEXP
-#define ENABLE_FEATURE_MDEV_RENAME_REGEXP 0
-#define IF_FEATURE_MDEV_RENAME_REGEXP(...)
-#define IF_NOT_FEATURE_MDEV_RENAME_REGEXP(...) __VA_ARGS__
-#undef CONFIG_FEATURE_MDEV_EXEC
-#define ENABLE_FEATURE_MDEV_EXEC 0
-#define IF_FEATURE_MDEV_EXEC(...)
-#define IF_NOT_FEATURE_MDEV_EXEC(...) __VA_ARGS__
-#undef CONFIG_FEATURE_MDEV_LOAD_FIRMWARE
-#define ENABLE_FEATURE_MDEV_LOAD_FIRMWARE 0
-#define IF_FEATURE_MDEV_LOAD_FIRMWARE(...)
-#define IF_NOT_FEATURE_MDEV_LOAD_FIRMWARE(...) __VA_ARGS__
-#define CONFIG_REV 1
-#define ENABLE_REV 1
-#define IF_REV(...) __VA_ARGS__
-#define IF_NOT_REV(...)
-#undef CONFIG_ACPID
-#define ENABLE_ACPID 0
-#define IF_ACPID(...)
-#define IF_NOT_ACPID(...) __VA_ARGS__
-#undef CONFIG_FEATURE_ACPID_COMPAT
-#define ENABLE_FEATURE_ACPID_COMPAT 0
-#define IF_FEATURE_ACPID_COMPAT(...)
-#define IF_NOT_FEATURE_ACPID_COMPAT(...) __VA_ARGS__
-#define CONFIG_BLKID 1
-#define ENABLE_BLKID 1
-#define IF_BLKID(...) __VA_ARGS__
-#define IF_NOT_BLKID(...)
-#define CONFIG_FEATURE_BLKID_TYPE 1
-#define ENABLE_FEATURE_BLKID_TYPE 1
-#define IF_FEATURE_BLKID_TYPE(...) __VA_ARGS__
-#define IF_NOT_FEATURE_BLKID_TYPE(...)
-#define CONFIG_DMESG 1
-#define ENABLE_DMESG 1
-#define IF_DMESG(...) __VA_ARGS__
-#define IF_NOT_DMESG(...)
-#undef CONFIG_FEATURE_DMESG_PRETTY
-#define ENABLE_FEATURE_DMESG_PRETTY 0
-#define IF_FEATURE_DMESG_PRETTY(...)
-#define IF_NOT_FEATURE_DMESG_PRETTY(...) __VA_ARGS__
-#define CONFIG_FBSET 1
-#define ENABLE_FBSET 1
-#define IF_FBSET(...) __VA_ARGS__
-#define IF_NOT_FBSET(...)
-#define CONFIG_FEATURE_FBSET_FANCY 1
-#define ENABLE_FEATURE_FBSET_FANCY 1
-#define IF_FEATURE_FBSET_FANCY(...) __VA_ARGS__
-#define IF_NOT_FEATURE_FBSET_FANCY(...)
-#undef CONFIG_FEATURE_FBSET_READMODE
-#define ENABLE_FEATURE_FBSET_READMODE 0
-#define IF_FEATURE_FBSET_READMODE(...)
-#define IF_NOT_FEATURE_FBSET_READMODE(...) __VA_ARGS__
-#undef CONFIG_FDFLUSH
-#define ENABLE_FDFLUSH 0
-#define IF_FDFLUSH(...)
-#define IF_NOT_FDFLUSH(...) __VA_ARGS__
-#undef CONFIG_FDFORMAT
-#define ENABLE_FDFORMAT 0
-#define IF_FDFORMAT(...)
-#define IF_NOT_FDFORMAT(...) __VA_ARGS__
-#define CONFIG_FDISK 1
-#define ENABLE_FDISK 1
-#define IF_FDISK(...) __VA_ARGS__
-#define IF_NOT_FDISK(...)
-#undef CONFIG_FDISK_SUPPORT_LARGE_DISKS
-#define ENABLE_FDISK_SUPPORT_LARGE_DISKS 0
-#define IF_FDISK_SUPPORT_LARGE_DISKS(...)
-#define IF_NOT_FDISK_SUPPORT_LARGE_DISKS(...) __VA_ARGS__
-#define CONFIG_FEATURE_FDISK_WRITABLE 1
-#define ENABLE_FEATURE_FDISK_WRITABLE 1
-#define IF_FEATURE_FDISK_WRITABLE(...) __VA_ARGS__
-#define IF_NOT_FEATURE_FDISK_WRITABLE(...)
-#undef CONFIG_FEATURE_AIX_LABEL
-#define ENABLE_FEATURE_AIX_LABEL 0
-#define IF_FEATURE_AIX_LABEL(...)
-#define IF_NOT_FEATURE_AIX_LABEL(...) __VA_ARGS__
-#undef CONFIG_FEATURE_SGI_LABEL
-#define ENABLE_FEATURE_SGI_LABEL 0
-#define IF_FEATURE_SGI_LABEL(...)
-#define IF_NOT_FEATURE_SGI_LABEL(...) __VA_ARGS__
-#undef CONFIG_FEATURE_SUN_LABEL
-#define ENABLE_FEATURE_SUN_LABEL 0
-#define IF_FEATURE_SUN_LABEL(...)
-#define IF_NOT_FEATURE_SUN_LABEL(...) __VA_ARGS__
-#undef CONFIG_FEATURE_OSF_LABEL
-#define ENABLE_FEATURE_OSF_LABEL 0
-#define IF_FEATURE_OSF_LABEL(...)
-#define IF_NOT_FEATURE_OSF_LABEL(...) __VA_ARGS__
-#undef CONFIG_FEATURE_GPT_LABEL
-#define ENABLE_FEATURE_GPT_LABEL 0
-#define IF_FEATURE_GPT_LABEL(...)
-#define IF_NOT_FEATURE_GPT_LABEL(...) __VA_ARGS__
-#undef CONFIG_FEATURE_FDISK_ADVANCED
-#define ENABLE_FEATURE_FDISK_ADVANCED 0
-#define IF_FEATURE_FDISK_ADVANCED(...)
-#define IF_NOT_FEATURE_FDISK_ADVANCED(...) __VA_ARGS__
-#undef CONFIG_FINDFS
-#define ENABLE_FINDFS 0
-#define IF_FINDFS(...)
-#define IF_NOT_FINDFS(...) __VA_ARGS__
-#define CONFIG_FLOCK 1
-#define ENABLE_FLOCK 1
-#define IF_FLOCK(...) __VA_ARGS__
-#define IF_NOT_FLOCK(...)
-#define CONFIG_FREERAMDISK 1
-#define ENABLE_FREERAMDISK 1
-#define IF_FREERAMDISK(...) __VA_ARGS__
-#define IF_NOT_FREERAMDISK(...)
-#undef CONFIG_FSCK_MINIX
-#define ENABLE_FSCK_MINIX 0
-#define IF_FSCK_MINIX(...)
-#define IF_NOT_FSCK_MINIX(...) __VA_ARGS__
-#define CONFIG_FSTRIM 1
-#define ENABLE_FSTRIM 1
-#define IF_FSTRIM(...) __VA_ARGS__
-#define IF_NOT_FSTRIM(...)
-#define CONFIG_MKFS_EXT2 1
-#define ENABLE_MKFS_EXT2 1
-#define IF_MKFS_EXT2(...) __VA_ARGS__
-#define IF_NOT_MKFS_EXT2(...)
-#undef CONFIG_MKFS_MINIX
-#define ENABLE_MKFS_MINIX 0
-#define IF_MKFS_MINIX(...)
-#define IF_NOT_MKFS_MINIX(...) __VA_ARGS__
-#undef CONFIG_FEATURE_MINIX2
-#define ENABLE_FEATURE_MINIX2 0
-#define IF_FEATURE_MINIX2(...)
-#define IF_NOT_FEATURE_MINIX2(...) __VA_ARGS__
-#undef CONFIG_MKFS_REISER
-#define ENABLE_MKFS_REISER 0
-#define IF_MKFS_REISER(...)
-#define IF_NOT_MKFS_REISER(...) __VA_ARGS__
-#define CONFIG_MKFS_VFAT 1
-#define ENABLE_MKFS_VFAT 1
-#define IF_MKFS_VFAT(...) __VA_ARGS__
-#define IF_NOT_MKFS_VFAT(...)
-#define CONFIG_GETOPT 1
-#define ENABLE_GETOPT 1
-#define IF_GETOPT(...) __VA_ARGS__
-#define IF_NOT_GETOPT(...)
-#define CONFIG_FEATURE_GETOPT_LONG 1
-#define ENABLE_FEATURE_GETOPT_LONG 1
-#define IF_FEATURE_GETOPT_LONG(...) __VA_ARGS__
-#define IF_NOT_FEATURE_GETOPT_LONG(...)
-#define CONFIG_HEXDUMP 1
-#define ENABLE_HEXDUMP 1
-#define IF_HEXDUMP(...) __VA_ARGS__
-#define IF_NOT_HEXDUMP(...)
-#define CONFIG_FEATURE_HEXDUMP_REVERSE 1
-#define ENABLE_FEATURE_HEXDUMP_REVERSE 1
-#define IF_FEATURE_HEXDUMP_REVERSE(...) __VA_ARGS__
-#define IF_NOT_FEATURE_HEXDUMP_REVERSE(...)
-#undef CONFIG_HD
-#define ENABLE_HD 0
-#define IF_HD(...)
-#define IF_NOT_HD(...) __VA_ARGS__
-#undef CONFIG_HWCLOCK
-#define ENABLE_HWCLOCK 0
-#define IF_HWCLOCK(...)
-#define IF_NOT_HWCLOCK(...) __VA_ARGS__
-#undef CONFIG_FEATURE_HWCLOCK_LONG_OPTIONS
-#define ENABLE_FEATURE_HWCLOCK_LONG_OPTIONS 0
-#define IF_FEATURE_HWCLOCK_LONG_OPTIONS(...)
-#define IF_NOT_FEATURE_HWCLOCK_LONG_OPTIONS(...) __VA_ARGS__
-#undef CONFIG_FEATURE_HWCLOCK_ADJTIME_FHS
-#define ENABLE_FEATURE_HWCLOCK_ADJTIME_FHS 0
-#define IF_FEATURE_HWCLOCK_ADJTIME_FHS(...)
-#define IF_NOT_FEATURE_HWCLOCK_ADJTIME_FHS(...) __VA_ARGS__
-#undef CONFIG_IPCRM
-#define ENABLE_IPCRM 0
-#define IF_IPCRM(...)
-#define IF_NOT_IPCRM(...) __VA_ARGS__
-#undef CONFIG_IPCS
-#define ENABLE_IPCS 0
-#define IF_IPCS(...)
-#define IF_NOT_IPCS(...) __VA_ARGS__
-#define CONFIG_LOSETUP 1
-#define ENABLE_LOSETUP 1
-#define IF_LOSETUP(...) __VA_ARGS__
-#define IF_NOT_LOSETUP(...)
-#undef CONFIG_LSPCI
-#define ENABLE_LSPCI 0
-#define IF_LSPCI(...)
-#define IF_NOT_LSPCI(...) __VA_ARGS__
-#define CONFIG_LSUSB 1
-#define ENABLE_LSUSB 1
-#define IF_LSUSB(...) __VA_ARGS__
-#define IF_NOT_LSUSB(...)
-#define CONFIG_MKSWAP 1
-#define ENABLE_MKSWAP 1
-#define IF_MKSWAP(...) __VA_ARGS__
-#define IF_NOT_MKSWAP(...)
-#undef CONFIG_FEATURE_MKSWAP_UUID
-#define ENABLE_FEATURE_MKSWAP_UUID 0
-#define IF_FEATURE_MKSWAP_UUID(...)
-#define IF_NOT_FEATURE_MKSWAP_UUID(...) __VA_ARGS__
-#define CONFIG_MORE 1
-#define ENABLE_MORE 1
-#define IF_MORE(...) __VA_ARGS__
-#define IF_NOT_MORE(...)
-#define CONFIG_MOUNT 1
-#define ENABLE_MOUNT 1
-#define IF_MOUNT(...) __VA_ARGS__
-#define IF_NOT_MOUNT(...)
-#define CONFIG_FEATURE_MOUNT_FAKE 1
-#define ENABLE_FEATURE_MOUNT_FAKE 1
-#define IF_FEATURE_MOUNT_FAKE(...) __VA_ARGS__
-#define IF_NOT_FEATURE_MOUNT_FAKE(...)
-#define CONFIG_FEATURE_MOUNT_VERBOSE 1
-#define ENABLE_FEATURE_MOUNT_VERBOSE 1
-#define IF_FEATURE_MOUNT_VERBOSE(...) __VA_ARGS__
-#define IF_NOT_FEATURE_MOUNT_VERBOSE(...)
-#undef CONFIG_FEATURE_MOUNT_HELPERS
-#define ENABLE_FEATURE_MOUNT_HELPERS 0
-#define IF_FEATURE_MOUNT_HELPERS(...)
-#define IF_NOT_FEATURE_MOUNT_HELPERS(...) __VA_ARGS__
-#define CONFIG_FEATURE_MOUNT_LABEL 1
-#define ENABLE_FEATURE_MOUNT_LABEL 1
-#define IF_FEATURE_MOUNT_LABEL(...) __VA_ARGS__
-#define IF_NOT_FEATURE_MOUNT_LABEL(...)
-#define CONFIG_FEATURE_MOUNT_NFS 1
-#define ENABLE_FEATURE_MOUNT_NFS 1
-#define IF_FEATURE_MOUNT_NFS(...) __VA_ARGS__
-#define IF_NOT_FEATURE_MOUNT_NFS(...)
-#define CONFIG_FEATURE_MOUNT_CIFS 1
-#define ENABLE_FEATURE_MOUNT_CIFS 1
-#define IF_FEATURE_MOUNT_CIFS(...) __VA_ARGS__
-#define IF_NOT_FEATURE_MOUNT_CIFS(...)
-#define CONFIG_FEATURE_MOUNT_FLAGS 1
-#define ENABLE_FEATURE_MOUNT_FLAGS 1
-#define IF_FEATURE_MOUNT_FLAGS(...) __VA_ARGS__
-#define IF_NOT_FEATURE_MOUNT_FLAGS(...)
-#define CONFIG_FEATURE_MOUNT_FSTAB 1
-#define ENABLE_FEATURE_MOUNT_FSTAB 1
-#define IF_FEATURE_MOUNT_FSTAB(...) __VA_ARGS__
-#define IF_NOT_FEATURE_MOUNT_FSTAB(...)
-#undef CONFIG_PIVOT_ROOT
-#define ENABLE_PIVOT_ROOT 0
-#define IF_PIVOT_ROOT(...)
-#define IF_NOT_PIVOT_ROOT(...) __VA_ARGS__
-#undef CONFIG_RDATE
-#define ENABLE_RDATE 0
-#define IF_RDATE(...)
-#define IF_NOT_RDATE(...) __VA_ARGS__
-#define CONFIG_RDEV 1
-#define ENABLE_RDEV 1
-#define IF_RDEV(...) __VA_ARGS__
-#define IF_NOT_RDEV(...)
-#undef CONFIG_READPROFILE
-#define ENABLE_READPROFILE 0
-#define IF_READPROFILE(...)
-#define IF_NOT_READPROFILE(...) __VA_ARGS__
-#undef CONFIG_RTCWAKE
-#define ENABLE_RTCWAKE 0
-#define IF_RTCWAKE(...)
-#define IF_NOT_RTCWAKE(...) __VA_ARGS__
-#undef CONFIG_SCRIPT
-#define ENABLE_SCRIPT 0
-#define IF_SCRIPT(...)
-#define IF_NOT_SCRIPT(...) __VA_ARGS__
-#undef CONFIG_SCRIPTREPLAY
-#define ENABLE_SCRIPTREPLAY 0
-#define IF_SCRIPTREPLAY(...)
-#define IF_NOT_SCRIPTREPLAY(...) __VA_ARGS__
-#undef CONFIG_SETARCH
-#define ENABLE_SETARCH 0
-#define IF_SETARCH(...)
-#define IF_NOT_SETARCH(...) __VA_ARGS__
-#define CONFIG_SWAPONOFF 1
-#define ENABLE_SWAPONOFF 1
-#define IF_SWAPONOFF(...) __VA_ARGS__
-#define IF_NOT_SWAPONOFF(...)
-#undef CONFIG_FEATURE_SWAPON_PRI
-#define ENABLE_FEATURE_SWAPON_PRI 0
-#define IF_FEATURE_SWAPON_PRI(...)
-#define IF_NOT_FEATURE_SWAPON_PRI(...) __VA_ARGS__
-#undef CONFIG_SWITCH_ROOT
-#define ENABLE_SWITCH_ROOT 0
-#define IF_SWITCH_ROOT(...)
-#define IF_NOT_SWITCH_ROOT(...) __VA_ARGS__
-#define CONFIG_UMOUNT 1
-#define ENABLE_UMOUNT 1
-#define IF_UMOUNT(...) __VA_ARGS__
-#define IF_NOT_UMOUNT(...)
-#define CONFIG_FEATURE_UMOUNT_ALL 1
-#define ENABLE_FEATURE_UMOUNT_ALL 1
-#define IF_FEATURE_UMOUNT_ALL(...) __VA_ARGS__
-#define IF_NOT_FEATURE_UMOUNT_ALL(...)
-
-/*
- * Common options for mount/umount
- */
-#define CONFIG_FEATURE_MOUNT_LOOP 1
-#define ENABLE_FEATURE_MOUNT_LOOP 1
-#define IF_FEATURE_MOUNT_LOOP(...) __VA_ARGS__
-#define IF_NOT_FEATURE_MOUNT_LOOP(...)
-#define CONFIG_FEATURE_MOUNT_LOOP_CREATE 1
-#define ENABLE_FEATURE_MOUNT_LOOP_CREATE 1
-#define IF_FEATURE_MOUNT_LOOP_CREATE(...) __VA_ARGS__
-#define IF_NOT_FEATURE_MOUNT_LOOP_CREATE(...)
-#undef CONFIG_FEATURE_MTAB_SUPPORT
-#define ENABLE_FEATURE_MTAB_SUPPORT 0
-#define IF_FEATURE_MTAB_SUPPORT(...)
-#define IF_NOT_FEATURE_MTAB_SUPPORT(...) __VA_ARGS__
-#define CONFIG_VOLUMEID 1
-#define ENABLE_VOLUMEID 1
-#define IF_VOLUMEID(...) __VA_ARGS__
-#define IF_NOT_VOLUMEID(...)
-
-/*
- * Filesystem/Volume identification
- */
-#define CONFIG_FEATURE_VOLUMEID_EXT 1
-#define ENABLE_FEATURE_VOLUMEID_EXT 1
-#define IF_FEATURE_VOLUMEID_EXT(...) __VA_ARGS__
-#define IF_NOT_FEATURE_VOLUMEID_EXT(...)
-#undef CONFIG_FEATURE_VOLUMEID_BTRFS
-#define ENABLE_FEATURE_VOLUMEID_BTRFS 0
-#define IF_FEATURE_VOLUMEID_BTRFS(...)
-#define IF_NOT_FEATURE_VOLUMEID_BTRFS(...) __VA_ARGS__
-#undef CONFIG_FEATURE_VOLUMEID_REISERFS
-#define ENABLE_FEATURE_VOLUMEID_REISERFS 0
-#define IF_FEATURE_VOLUMEID_REISERFS(...)
-#define IF_NOT_FEATURE_VOLUMEID_REISERFS(...) __VA_ARGS__
-#define CONFIG_FEATURE_VOLUMEID_FAT 1
-#define ENABLE_FEATURE_VOLUMEID_FAT 1
-#define IF_FEATURE_VOLUMEID_FAT(...) __VA_ARGS__
-#define IF_NOT_FEATURE_VOLUMEID_FAT(...)
-#define CONFIG_FEATURE_VOLUMEID_EXFAT 1
-#define ENABLE_FEATURE_VOLUMEID_EXFAT 1
-#define IF_FEATURE_VOLUMEID_EXFAT(...) __VA_ARGS__
-#define IF_NOT_FEATURE_VOLUMEID_EXFAT(...)
-#undef CONFIG_FEATURE_VOLUMEID_HFS
-#define ENABLE_FEATURE_VOLUMEID_HFS 0
-#define IF_FEATURE_VOLUMEID_HFS(...)
-#define IF_NOT_FEATURE_VOLUMEID_HFS(...) __VA_ARGS__
-#undef CONFIG_FEATURE_VOLUMEID_JFS
-#define ENABLE_FEATURE_VOLUMEID_JFS 0
-#define IF_FEATURE_VOLUMEID_JFS(...)
-#define IF_NOT_FEATURE_VOLUMEID_JFS(...) __VA_ARGS__
-#undef CONFIG_FEATURE_VOLUMEID_XFS
-#define ENABLE_FEATURE_VOLUMEID_XFS 0
-#define IF_FEATURE_VOLUMEID_XFS(...)
-#define IF_NOT_FEATURE_VOLUMEID_XFS(...) __VA_ARGS__
-#undef CONFIG_FEATURE_VOLUMEID_NILFS
-#define ENABLE_FEATURE_VOLUMEID_NILFS 0
-#define IF_FEATURE_VOLUMEID_NILFS(...)
-#define IF_NOT_FEATURE_VOLUMEID_NILFS(...) __VA_ARGS__
-#define CONFIG_FEATURE_VOLUMEID_NTFS 1
-#define ENABLE_FEATURE_VOLUMEID_NTFS 1
-#define IF_FEATURE_VOLUMEID_NTFS(...) __VA_ARGS__
-#define IF_NOT_FEATURE_VOLUMEID_NTFS(...)
-#define CONFIG_FEATURE_VOLUMEID_ISO9660 1
-#define ENABLE_FEATURE_VOLUMEID_ISO9660 1
-#define IF_FEATURE_VOLUMEID_ISO9660(...) __VA_ARGS__
-#define IF_NOT_FEATURE_VOLUMEID_ISO9660(...)
-#undef CONFIG_FEATURE_VOLUMEID_UDF
-#define ENABLE_FEATURE_VOLUMEID_UDF 0
-#define IF_FEATURE_VOLUMEID_UDF(...)
-#define IF_NOT_FEATURE_VOLUMEID_UDF(...) __VA_ARGS__
-#undef CONFIG_FEATURE_VOLUMEID_LUKS
-#define ENABLE_FEATURE_VOLUMEID_LUKS 0
-#define IF_FEATURE_VOLUMEID_LUKS(...)
-#define IF_NOT_FEATURE_VOLUMEID_LUKS(...) __VA_ARGS__
-#define CONFIG_FEATURE_VOLUMEID_LINUXSWAP 1
-#define ENABLE_FEATURE_VOLUMEID_LINUXSWAP 1
-#define IF_FEATURE_VOLUMEID_LINUXSWAP(...) __VA_ARGS__
-#define IF_NOT_FEATURE_VOLUMEID_LINUXSWAP(...)
-#undef CONFIG_FEATURE_VOLUMEID_CRAMFS
-#define ENABLE_FEATURE_VOLUMEID_CRAMFS 0
-#define IF_FEATURE_VOLUMEID_CRAMFS(...)
-#define IF_NOT_FEATURE_VOLUMEID_CRAMFS(...) __VA_ARGS__
-#undef CONFIG_FEATURE_VOLUMEID_ROMFS
-#define ENABLE_FEATURE_VOLUMEID_ROMFS 0
-#define IF_FEATURE_VOLUMEID_ROMFS(...)
-#define IF_NOT_FEATURE_VOLUMEID_ROMFS(...) __VA_ARGS__
-#define CONFIG_FEATURE_VOLUMEID_SQUASHFS 1
-#define ENABLE_FEATURE_VOLUMEID_SQUASHFS 1
-#define IF_FEATURE_VOLUMEID_SQUASHFS(...) __VA_ARGS__
-#define IF_NOT_FEATURE_VOLUMEID_SQUASHFS(...)
-#undef CONFIG_FEATURE_VOLUMEID_SYSV
-#define ENABLE_FEATURE_VOLUMEID_SYSV 0
-#define IF_FEATURE_VOLUMEID_SYSV(...)
-#define IF_NOT_FEATURE_VOLUMEID_SYSV(...) __VA_ARGS__
-#undef CONFIG_FEATURE_VOLUMEID_OCFS2
-#define ENABLE_FEATURE_VOLUMEID_OCFS2 0
-#define IF_FEATURE_VOLUMEID_OCFS2(...)
-#define IF_NOT_FEATURE_VOLUMEID_OCFS2(...) __VA_ARGS__
-#undef CONFIG_FEATURE_VOLUMEID_LINUXRAID
-#define ENABLE_FEATURE_VOLUMEID_LINUXRAID 0
-#define IF_FEATURE_VOLUMEID_LINUXRAID(...)
-#define IF_NOT_FEATURE_VOLUMEID_LINUXRAID(...) __VA_ARGS__
-
-/*
- * Miscellaneous Utilities
- */
-#undef CONFIG_CONSPY
-#define ENABLE_CONSPY 0
-#define IF_CONSPY(...)
-#define IF_NOT_CONSPY(...) __VA_ARGS__
-#define CONFIG_LESS 1
-#define ENABLE_LESS 1
-#define IF_LESS(...) __VA_ARGS__
-#define IF_NOT_LESS(...)
-#define CONFIG_FEATURE_LESS_MAXLINES 65536
-#define ENABLE_FEATURE_LESS_MAXLINES 1
-#define IF_FEATURE_LESS_MAXLINES(...) __VA_ARGS__
-#define IF_NOT_FEATURE_LESS_MAXLINES(...)
-#undef CONFIG_FEATURE_LESS_BRACKETS
-#define ENABLE_FEATURE_LESS_BRACKETS 0
-#define IF_FEATURE_LESS_BRACKETS(...)
-#define IF_NOT_FEATURE_LESS_BRACKETS(...) __VA_ARGS__
-#undef CONFIG_FEATURE_LESS_FLAGS
-#define ENABLE_FEATURE_LESS_FLAGS 0
-#define IF_FEATURE_LESS_FLAGS(...)
-#define IF_NOT_FEATURE_LESS_FLAGS(...) __VA_ARGS__
-#define CONFIG_FEATURE_LESS_MARKS 1
-#define ENABLE_FEATURE_LESS_MARKS 1
-#define IF_FEATURE_LESS_MARKS(...) __VA_ARGS__
-#define IF_NOT_FEATURE_LESS_MARKS(...)
-#define CONFIG_FEATURE_LESS_REGEXP 1
-#define ENABLE_FEATURE_LESS_REGEXP 1
-#define IF_FEATURE_LESS_REGEXP(...) __VA_ARGS__
-#define IF_NOT_FEATURE_LESS_REGEXP(...)
-#define CONFIG_FEATURE_LESS_WINCH 1
-#define ENABLE_FEATURE_LESS_WINCH 1
-#define IF_FEATURE_LESS_WINCH(...) __VA_ARGS__
-#define IF_NOT_FEATURE_LESS_WINCH(...)
-#define CONFIG_FEATURE_LESS_ASK_TERMINAL 1
-#define ENABLE_FEATURE_LESS_ASK_TERMINAL 1
-#define IF_FEATURE_LESS_ASK_TERMINAL(...) __VA_ARGS__
-#define IF_NOT_FEATURE_LESS_ASK_TERMINAL(...)
-#undef CONFIG_FEATURE_LESS_DASHCMD
-#define ENABLE_FEATURE_LESS_DASHCMD 0
-#define IF_FEATURE_LESS_DASHCMD(...)
-#define IF_NOT_FEATURE_LESS_DASHCMD(...) __VA_ARGS__
-#undef CONFIG_FEATURE_LESS_LINENUMS
-#define ENABLE_FEATURE_LESS_LINENUMS 0
-#define IF_FEATURE_LESS_LINENUMS(...)
-#define IF_NOT_FEATURE_LESS_LINENUMS(...) __VA_ARGS__
-#define CONFIG_NANDWRITE 1
-#define ENABLE_NANDWRITE 1
-#define IF_NANDWRITE(...) __VA_ARGS__
-#define IF_NOT_NANDWRITE(...)
-#define CONFIG_NANDDUMP 1
-#define ENABLE_NANDDUMP 1
-#define IF_NANDDUMP(...) __VA_ARGS__
-#define IF_NOT_NANDDUMP(...)
-#define CONFIG_SETSERIAL 1
-#define ENABLE_SETSERIAL 1
-#define IF_SETSERIAL(...) __VA_ARGS__
-#define IF_NOT_SETSERIAL(...)
-#undef CONFIG_UBIATTACH
-#define ENABLE_UBIATTACH 0
-#define IF_UBIATTACH(...)
-#define IF_NOT_UBIATTACH(...) __VA_ARGS__
-#undef CONFIG_UBIDETACH
-#define ENABLE_UBIDETACH 0
-#define IF_UBIDETACH(...)
-#define IF_NOT_UBIDETACH(...) __VA_ARGS__
-#undef CONFIG_UBIMKVOL
-#define ENABLE_UBIMKVOL 0
-#define IF_UBIMKVOL(...)
-#define IF_NOT_UBIMKVOL(...) __VA_ARGS__
-#undef CONFIG_UBIRMVOL
-#define ENABLE_UBIRMVOL 0
-#define IF_UBIRMVOL(...)
-#define IF_NOT_UBIRMVOL(...) __VA_ARGS__
-#undef CONFIG_UBIRSVOL
-#define ENABLE_UBIRSVOL 0
-#define IF_UBIRSVOL(...)
-#define IF_NOT_UBIRSVOL(...) __VA_ARGS__
-#undef CONFIG_UBIUPDATEVOL
-#define ENABLE_UBIUPDATEVOL 0
-#define IF_UBIUPDATEVOL(...)
-#define IF_NOT_UBIUPDATEVOL(...) __VA_ARGS__
-#define CONFIG_ADJTIMEX 1
-#define ENABLE_ADJTIMEX 1
-#define IF_ADJTIMEX(...) __VA_ARGS__
-#define IF_NOT_ADJTIMEX(...)
-#define CONFIG_BBCONFIG 1
-#define ENABLE_BBCONFIG 1
-#define IF_BBCONFIG(...) __VA_ARGS__
-#define IF_NOT_BBCONFIG(...)
-#define CONFIG_FEATURE_COMPRESS_BBCONFIG 1
-#define ENABLE_FEATURE_COMPRESS_BBCONFIG 1
-#define IF_FEATURE_COMPRESS_BBCONFIG(...) __VA_ARGS__
-#define IF_NOT_FEATURE_COMPRESS_BBCONFIG(...)
-#undef CONFIG_BEEP
-#define ENABLE_BEEP 0
-#define IF_BEEP(...)
-#define IF_NOT_BEEP(...) __VA_ARGS__
-#define CONFIG_FEATURE_BEEP_FREQ 0
-#define ENABLE_FEATURE_BEEP_FREQ 1
-#define IF_FEATURE_BEEP_FREQ(...) __VA_ARGS__
-#define IF_NOT_FEATURE_BEEP_FREQ(...)
-#define CONFIG_FEATURE_BEEP_LENGTH_MS 0
-#define ENABLE_FEATURE_BEEP_LENGTH_MS 1
-#define IF_FEATURE_BEEP_LENGTH_MS(...) __VA_ARGS__
-#define IF_NOT_FEATURE_BEEP_LENGTH_MS(...)
-#undef CONFIG_CHAT
-#define ENABLE_CHAT 0
-#define IF_CHAT(...)
-#define IF_NOT_CHAT(...) __VA_ARGS__
-#undef CONFIG_FEATURE_CHAT_NOFAIL
-#define ENABLE_FEATURE_CHAT_NOFAIL 0
-#define IF_FEATURE_CHAT_NOFAIL(...)
-#define IF_NOT_FEATURE_CHAT_NOFAIL(...) __VA_ARGS__
-#undef CONFIG_FEATURE_CHAT_TTY_HIFI
-#define ENABLE_FEATURE_CHAT_TTY_HIFI 0
-#define IF_FEATURE_CHAT_TTY_HIFI(...)
-#define IF_NOT_FEATURE_CHAT_TTY_HIFI(...) __VA_ARGS__
-#undef CONFIG_FEATURE_CHAT_IMPLICIT_CR
-#define ENABLE_FEATURE_CHAT_IMPLICIT_CR 0
-#define IF_FEATURE_CHAT_IMPLICIT_CR(...)
-#define IF_NOT_FEATURE_CHAT_IMPLICIT_CR(...) __VA_ARGS__
-#undef CONFIG_FEATURE_CHAT_SWALLOW_OPTS
-#define ENABLE_FEATURE_CHAT_SWALLOW_OPTS 0
-#define IF_FEATURE_CHAT_SWALLOW_OPTS(...)
-#define IF_NOT_FEATURE_CHAT_SWALLOW_OPTS(...) __VA_ARGS__
-#undef CONFIG_FEATURE_CHAT_SEND_ESCAPES
-#define ENABLE_FEATURE_CHAT_SEND_ESCAPES 0
-#define IF_FEATURE_CHAT_SEND_ESCAPES(...)
-#define IF_NOT_FEATURE_CHAT_SEND_ESCAPES(...) __VA_ARGS__
-#undef CONFIG_FEATURE_CHAT_VAR_ABORT_LEN
-#define ENABLE_FEATURE_CHAT_VAR_ABORT_LEN 0
-#define IF_FEATURE_CHAT_VAR_ABORT_LEN(...)
-#define IF_NOT_FEATURE_CHAT_VAR_ABORT_LEN(...) __VA_ARGS__
-#undef CONFIG_FEATURE_CHAT_CLR_ABORT
-#define ENABLE_FEATURE_CHAT_CLR_ABORT 0
-#define IF_FEATURE_CHAT_CLR_ABORT(...)
-#define IF_NOT_FEATURE_CHAT_CLR_ABORT(...) __VA_ARGS__
-#undef CONFIG_CHRT
-#define ENABLE_CHRT 0
-#define IF_CHRT(...)
-#define IF_NOT_CHRT(...) __VA_ARGS__
-#define CONFIG_CROND 1
-#define ENABLE_CROND 1
-#define IF_CROND(...) __VA_ARGS__
-#define IF_NOT_CROND(...)
-#undef CONFIG_FEATURE_CROND_D
-#define ENABLE_FEATURE_CROND_D 0
-#define IF_FEATURE_CROND_D(...)
-#define IF_NOT_FEATURE_CROND_D(...) __VA_ARGS__
-#undef CONFIG_FEATURE_CROND_CALL_SENDMAIL
-#define ENABLE_FEATURE_CROND_CALL_SENDMAIL 0
-#define IF_FEATURE_CROND_CALL_SENDMAIL(...)
-#define IF_NOT_FEATURE_CROND_CALL_SENDMAIL(...) __VA_ARGS__
-#define CONFIG_FEATURE_CROND_DIR "/system/etc/cron.d"
-#define ENABLE_FEATURE_CROND_DIR 1
-#define IF_FEATURE_CROND_DIR(...) __VA_ARGS__
-#define IF_NOT_FEATURE_CROND_DIR(...)
-#define CONFIG_CRONTAB 1
-#define ENABLE_CRONTAB 1
-#define IF_CRONTAB(...) __VA_ARGS__
-#define IF_NOT_CRONTAB(...)
-#define CONFIG_DC 1
-#define ENABLE_DC 1
-#define IF_DC(...) __VA_ARGS__
-#define IF_NOT_DC(...)
-#define CONFIG_FEATURE_DC_LIBM 1
-#define ENABLE_FEATURE_DC_LIBM 1
-#define IF_FEATURE_DC_LIBM(...) __VA_ARGS__
-#define IF_NOT_FEATURE_DC_LIBM(...)
-#undef CONFIG_DEVFSD
-#define ENABLE_DEVFSD 0
-#define IF_DEVFSD(...)
-#define IF_NOT_DEVFSD(...) __VA_ARGS__
-#undef CONFIG_DEVFSD_MODLOAD
-#define ENABLE_DEVFSD_MODLOAD 0
-#define IF_DEVFSD_MODLOAD(...)
-#define IF_NOT_DEVFSD_MODLOAD(...) __VA_ARGS__
-#undef CONFIG_DEVFSD_FG_NP
-#define ENABLE_DEVFSD_FG_NP 0
-#define IF_DEVFSD_FG_NP(...)
-#define IF_NOT_DEVFSD_FG_NP(...) __VA_ARGS__
-#undef CONFIG_DEVFSD_VERBOSE
-#define ENABLE_DEVFSD_VERBOSE 0
-#define IF_DEVFSD_VERBOSE(...)
-#define IF_NOT_DEVFSD_VERBOSE(...) __VA_ARGS__
-#undef CONFIG_FEATURE_DEVFS
-#define ENABLE_FEATURE_DEVFS 0
-#define IF_FEATURE_DEVFS(...)
-#define IF_NOT_FEATURE_DEVFS(...) __VA_ARGS__
-#define CONFIG_DEVMEM 1
-#define ENABLE_DEVMEM 1
-#define IF_DEVMEM(...) __VA_ARGS__
-#define IF_NOT_DEVMEM(...)
-#undef CONFIG_EJECT
-#define ENABLE_EJECT 0
-#define IF_EJECT(...)
-#define IF_NOT_EJECT(...) __VA_ARGS__
-#undef CONFIG_FEATURE_EJECT_SCSI
-#define ENABLE_FEATURE_EJECT_SCSI 0
-#define IF_FEATURE_EJECT_SCSI(...)
-#define IF_NOT_FEATURE_EJECT_SCSI(...) __VA_ARGS__
-#define CONFIG_FBSPLASH 1
-#define ENABLE_FBSPLASH 1
-#define IF_FBSPLASH(...) __VA_ARGS__
-#define IF_NOT_FBSPLASH(...)
-#define CONFIG_FLASHCP 1
-#define ENABLE_FLASHCP 1
-#define IF_FLASHCP(...) __VA_ARGS__
-#define IF_NOT_FLASHCP(...)
-#define CONFIG_FLASH_LOCK 1
-#define ENABLE_FLASH_LOCK 1
-#define IF_FLASH_LOCK(...) __VA_ARGS__
-#define IF_NOT_FLASH_LOCK(...)
-#define CONFIG_FLASH_UNLOCK 1
-#define ENABLE_FLASH_UNLOCK 1
-#define IF_FLASH_UNLOCK(...) __VA_ARGS__
-#define IF_NOT_FLASH_UNLOCK(...)
-#undef CONFIG_FLASH_ERASEALL
-#define ENABLE_FLASH_ERASEALL 0
-#define IF_FLASH_ERASEALL(...)
-#define IF_NOT_FLASH_ERASEALL(...) __VA_ARGS__
-#define CONFIG_IONICE 1
-#define ENABLE_IONICE 1
-#define IF_IONICE(...) __VA_ARGS__
-#define IF_NOT_IONICE(...)
-#undef CONFIG_INOTIFYD
-#define ENABLE_INOTIFYD 0
-#define IF_INOTIFYD(...)
-#define IF_NOT_INOTIFYD(...) __VA_ARGS__
-#undef CONFIG_LAST
-#define ENABLE_LAST 0
-#define IF_LAST(...)
-#define IF_NOT_LAST(...) __VA_ARGS__
-#undef CONFIG_FEATURE_LAST_SMALL
-#define ENABLE_FEATURE_LAST_SMALL 0
-#define IF_FEATURE_LAST_SMALL(...)
-#define IF_NOT_FEATURE_LAST_SMALL(...) __VA_ARGS__
-#undef CONFIG_FEATURE_LAST_FANCY
-#define ENABLE_FEATURE_LAST_FANCY 0
-#define IF_FEATURE_LAST_FANCY(...)
-#define IF_NOT_FEATURE_LAST_FANCY(...) __VA_ARGS__
-#undef CONFIG_HDPARM
-#define ENABLE_HDPARM 0
-#define IF_HDPARM(...)
-#define IF_NOT_HDPARM(...) __VA_ARGS__
-#undef CONFIG_FEATURE_HDPARM_GET_IDENTITY
-#define ENABLE_FEATURE_HDPARM_GET_IDENTITY 0
-#define IF_FEATURE_HDPARM_GET_IDENTITY(...)
-#define IF_NOT_FEATURE_HDPARM_GET_IDENTITY(...) __VA_ARGS__
-#undef CONFIG_FEATURE_HDPARM_HDIO_SCAN_HWIF
-#define ENABLE_FEATURE_HDPARM_HDIO_SCAN_HWIF 0
-#define IF_FEATURE_HDPARM_HDIO_SCAN_HWIF(...)
-#define IF_NOT_FEATURE_HDPARM_HDIO_SCAN_HWIF(...) __VA_ARGS__
-#undef CONFIG_FEATURE_HDPARM_HDIO_UNREGISTER_HWIF
-#define ENABLE_FEATURE_HDPARM_HDIO_UNREGISTER_HWIF 0
-#define IF_FEATURE_HDPARM_HDIO_UNREGISTER_HWIF(...)
-#define IF_NOT_FEATURE_HDPARM_HDIO_UNREGISTER_HWIF(...) __VA_ARGS__
-#undef CONFIG_FEATURE_HDPARM_HDIO_DRIVE_RESET
-#define ENABLE_FEATURE_HDPARM_HDIO_DRIVE_RESET 0
-#define IF_FEATURE_HDPARM_HDIO_DRIVE_RESET(...)
-#define IF_NOT_FEATURE_HDPARM_HDIO_DRIVE_RESET(...) __VA_ARGS__
-#undef CONFIG_FEATURE_HDPARM_HDIO_TRISTATE_HWIF
-#define ENABLE_FEATURE_HDPARM_HDIO_TRISTATE_HWIF 0
-#define IF_FEATURE_HDPARM_HDIO_TRISTATE_HWIF(...)
-#define IF_NOT_FEATURE_HDPARM_HDIO_TRISTATE_HWIF(...) __VA_ARGS__
-#undef CONFIG_FEATURE_HDPARM_HDIO_GETSET_DMA
-#define ENABLE_FEATURE_HDPARM_HDIO_GETSET_DMA 0
-#define IF_FEATURE_HDPARM_HDIO_GETSET_DMA(...)
-#define IF_NOT_FEATURE_HDPARM_HDIO_GETSET_DMA(...) __VA_ARGS__
-#undef CONFIG_MAKEDEVS
-#define ENABLE_MAKEDEVS 0
-#define IF_MAKEDEVS(...)
-#define IF_NOT_MAKEDEVS(...) __VA_ARGS__
-#undef CONFIG_FEATURE_MAKEDEVS_LEAF
-#define ENABLE_FEATURE_MAKEDEVS_LEAF 0
-#define IF_FEATURE_MAKEDEVS_LEAF(...)
-#define IF_NOT_FEATURE_MAKEDEVS_LEAF(...) __VA_ARGS__
-#undef CONFIG_FEATURE_MAKEDEVS_TABLE
-#define ENABLE_FEATURE_MAKEDEVS_TABLE 0
-#define IF_FEATURE_MAKEDEVS_TABLE(...)
-#define IF_NOT_FEATURE_MAKEDEVS_TABLE(...) __VA_ARGS__
-#define CONFIG_MAN 1
-#define ENABLE_MAN 1
-#define IF_MAN(...) __VA_ARGS__
-#define IF_NOT_MAN(...)
-#undef CONFIG_MICROCOM
-#define ENABLE_MICROCOM 0
-#define IF_MICROCOM(...)
-#define IF_NOT_MICROCOM(...) __VA_ARGS__
-#define CONFIG_MOUNTPOINT 1
-#define ENABLE_MOUNTPOINT 1
-#define IF_MOUNTPOINT(...) __VA_ARGS__
-#define IF_NOT_MOUNTPOINT(...)
-#undef CONFIG_MT
-#define ENABLE_MT 0
-#define IF_MT(...)
-#define IF_NOT_MT(...) __VA_ARGS__
-#undef CONFIG_RAIDAUTORUN
-#define ENABLE_RAIDAUTORUN 0
-#define IF_RAIDAUTORUN(...)
-#define IF_NOT_RAIDAUTORUN(...) __VA_ARGS__
-#undef CONFIG_READAHEAD
-#define ENABLE_READAHEAD 0
-#define IF_READAHEAD(...)
-#define IF_NOT_READAHEAD(...) __VA_ARGS__
-#undef CONFIG_RFKILL
-#define ENABLE_RFKILL 0
-#define IF_RFKILL(...)
-#define IF_NOT_RFKILL(...) __VA_ARGS__
-#undef CONFIG_RUNLEVEL
-#define ENABLE_RUNLEVEL 0
-#define IF_RUNLEVEL(...)
-#define IF_NOT_RUNLEVEL(...) __VA_ARGS__
-#define CONFIG_RX 1
-#define ENABLE_RX 1
-#define IF_RX(...) __VA_ARGS__
-#define IF_NOT_RX(...)
-#define CONFIG_SETSID 1
-#define ENABLE_SETSID 1
-#define IF_SETSID(...) __VA_ARGS__
-#define IF_NOT_SETSID(...)
-#define CONFIG_STRINGS 1
-#define ENABLE_STRINGS 1
-#define IF_STRINGS(...) __VA_ARGS__
-#define IF_NOT_STRINGS(...)
-#define CONFIG_TASKSET 1
-#define ENABLE_TASKSET 1
-#define IF_TASKSET(...) __VA_ARGS__
-#define IF_NOT_TASKSET(...)
-#define CONFIG_FEATURE_TASKSET_FANCY 1
-#define ENABLE_FEATURE_TASKSET_FANCY 1
-#define IF_FEATURE_TASKSET_FANCY(...) __VA_ARGS__
-#define IF_NOT_FEATURE_TASKSET_FANCY(...)
-#define CONFIG_TIME 1
-#define ENABLE_TIME 1
-#define IF_TIME(...) __VA_ARGS__
-#define IF_NOT_TIME(...)
-#define CONFIG_TIMEOUT 1
-#define ENABLE_TIMEOUT 1
-#define IF_TIMEOUT(...) __VA_ARGS__
-#define IF_NOT_TIMEOUT(...)
-#define CONFIG_TTYSIZE 1
-#define ENABLE_TTYSIZE 1
-#define IF_TTYSIZE(...) __VA_ARGS__
-#define IF_NOT_TTYSIZE(...)
-#undef CONFIG_VOLNAME
-#define ENABLE_VOLNAME 0
-#define IF_VOLNAME(...)
-#define IF_NOT_VOLNAME(...) __VA_ARGS__
-#undef CONFIG_WALL
-#define ENABLE_WALL 0
-#define IF_WALL(...)
-#define IF_NOT_WALL(...) __VA_ARGS__
-#undef CONFIG_WATCHDOG
-#define ENABLE_WATCHDOG 0
-#define IF_WATCHDOG(...)
-#define IF_NOT_WATCHDOG(...) __VA_ARGS__
-
-/*
- * Networking Utilities
- */
-#undef CONFIG_NAMEIF
-#define ENABLE_NAMEIF 0
-#define IF_NAMEIF(...)
-#define IF_NOT_NAMEIF(...) __VA_ARGS__
-#undef CONFIG_FEATURE_NAMEIF_EXTENDED
-#define ENABLE_FEATURE_NAMEIF_EXTENDED 0
-#define IF_FEATURE_NAMEIF_EXTENDED(...)
-#define IF_NOT_FEATURE_NAMEIF_EXTENDED(...) __VA_ARGS__
-#define CONFIG_NBDCLIENT 1
-#define ENABLE_NBDCLIENT 1
-#define IF_NBDCLIENT(...) __VA_ARGS__
-#define IF_NOT_NBDCLIENT(...)
-#define CONFIG_NC 1
-#define ENABLE_NC 1
-#define IF_NC(...) __VA_ARGS__
-#define IF_NOT_NC(...)
-#define CONFIG_NC_SERVER 1
-#define ENABLE_NC_SERVER 1
-#define IF_NC_SERVER(...) __VA_ARGS__
-#define IF_NOT_NC_SERVER(...)
-#define CONFIG_NC_EXTRA 1
-#define ENABLE_NC_EXTRA 1
-#define IF_NC_EXTRA(...) __VA_ARGS__
-#define IF_NOT_NC_EXTRA(...)
-#undef CONFIG_NC_110_COMPAT
-#define ENABLE_NC_110_COMPAT 0
-#define IF_NC_110_COMPAT(...)
-#define IF_NOT_NC_110_COMPAT(...) __VA_ARGS__
-#define CONFIG_PING 1
-#define ENABLE_PING 1
-#define IF_PING(...) __VA_ARGS__
-#define IF_NOT_PING(...)
-#undef CONFIG_PING6
-#define ENABLE_PING6 0
-#define IF_PING6(...)
-#define IF_NOT_PING6(...) __VA_ARGS__
-#define CONFIG_FEATURE_FANCY_PING 1
-#define ENABLE_FEATURE_FANCY_PING 1
-#define IF_FEATURE_FANCY_PING(...) __VA_ARGS__
-#define IF_NOT_FEATURE_FANCY_PING(...)
-#undef CONFIG_WHOIS
-#define ENABLE_WHOIS 0
-#define IF_WHOIS(...)
-#define IF_NOT_WHOIS(...) __VA_ARGS__
-#define CONFIG_FEATURE_IPV6 1
-#define ENABLE_FEATURE_IPV6 1
-#define IF_FEATURE_IPV6(...) __VA_ARGS__
-#define IF_NOT_FEATURE_IPV6(...)
-#undef CONFIG_FEATURE_UNIX_LOCAL
-#define ENABLE_FEATURE_UNIX_LOCAL 0
-#define IF_FEATURE_UNIX_LOCAL(...)
-#define IF_NOT_FEATURE_UNIX_LOCAL(...) __VA_ARGS__
-#define CONFIG_FEATURE_PREFER_IPV4_ADDRESS 1
-#define ENABLE_FEATURE_PREFER_IPV4_ADDRESS 1
-#define IF_FEATURE_PREFER_IPV4_ADDRESS(...) __VA_ARGS__
-#define IF_NOT_FEATURE_PREFER_IPV4_ADDRESS(...)
-#undef CONFIG_VERBOSE_RESOLUTION_ERRORS
-#define ENABLE_VERBOSE_RESOLUTION_ERRORS 0
-#define IF_VERBOSE_RESOLUTION_ERRORS(...)
-#define IF_NOT_VERBOSE_RESOLUTION_ERRORS(...) __VA_ARGS__
-#define CONFIG_ARP 1
-#define ENABLE_ARP 1
-#define IF_ARP(...) __VA_ARGS__
-#define IF_NOT_ARP(...)
-#undef CONFIG_ARPING
-#define ENABLE_ARPING 0
-#define IF_ARPING(...)
-#define IF_NOT_ARPING(...) __VA_ARGS__
-#define CONFIG_BRCTL 1
-#define ENABLE_BRCTL 1
-#define IF_BRCTL(...) __VA_ARGS__
-#define IF_NOT_BRCTL(...)
-#define CONFIG_FEATURE_BRCTL_FANCY 1
-#define ENABLE_FEATURE_BRCTL_FANCY 1
-#define IF_FEATURE_BRCTL_FANCY(...) __VA_ARGS__
-#define IF_NOT_FEATURE_BRCTL_FANCY(...)
-#define CONFIG_FEATURE_BRCTL_SHOW 1
-#define ENABLE_FEATURE_BRCTL_SHOW 1
-#define IF_FEATURE_BRCTL_SHOW(...) __VA_ARGS__
-#define IF_NOT_FEATURE_BRCTL_SHOW(...)
-#define CONFIG_DNSD 1
-#define ENABLE_DNSD 1
-#define IF_DNSD(...) __VA_ARGS__
-#define IF_NOT_DNSD(...)
-#undef CONFIG_ETHER_WAKE
-#define ENABLE_ETHER_WAKE 0
-#define IF_ETHER_WAKE(...)
-#define IF_NOT_ETHER_WAKE(...) __VA_ARGS__
-#undef CONFIG_FAKEIDENTD
-#define ENABLE_FAKEIDENTD 0
-#define IF_FAKEIDENTD(...)
-#define IF_NOT_FAKEIDENTD(...) __VA_ARGS__
-#undef CONFIG_FTPD
-#define ENABLE_FTPD 0
-#define IF_FTPD(...)
-#define IF_NOT_FTPD(...) __VA_ARGS__
-#undef CONFIG_FEATURE_FTP_WRITE
-#define ENABLE_FEATURE_FTP_WRITE 0
-#define IF_FEATURE_FTP_WRITE(...)
-#define IF_NOT_FEATURE_FTP_WRITE(...) __VA_ARGS__
-#undef CONFIG_FEATURE_FTPD_ACCEPT_BROKEN_LIST
-#define ENABLE_FEATURE_FTPD_ACCEPT_BROKEN_LIST 0
-#define IF_FEATURE_FTPD_ACCEPT_BROKEN_LIST(...)
-#define IF_NOT_FEATURE_FTPD_ACCEPT_BROKEN_LIST(...) __VA_ARGS__
-#define CONFIG_FTPGET 1
-#define ENABLE_FTPGET 1
-#define IF_FTPGET(...) __VA_ARGS__
-#define IF_NOT_FTPGET(...)
-#define CONFIG_FTPPUT 1
-#define ENABLE_FTPPUT 1
-#define IF_FTPPUT(...) __VA_ARGS__
-#define IF_NOT_FTPPUT(...)
-#define CONFIG_FEATURE_FTPGETPUT_LONG_OPTIONS 1
-#define ENABLE_FEATURE_FTPGETPUT_LONG_OPTIONS 1
-#define IF_FEATURE_FTPGETPUT_LONG_OPTIONS(...) __VA_ARGS__
-#define IF_NOT_FEATURE_FTPGETPUT_LONG_OPTIONS(...)
-#undef CONFIG_HOSTNAME
-#define ENABLE_HOSTNAME 0
-#define IF_HOSTNAME(...)
-#define IF_NOT_HOSTNAME(...) __VA_ARGS__
-#undef CONFIG_HTTPD
-#define ENABLE_HTTPD 0
-#define IF_HTTPD(...)
-#define IF_NOT_HTTPD(...) __VA_ARGS__
-#undef CONFIG_FEATURE_HTTPD_RANGES
-#define ENABLE_FEATURE_HTTPD_RANGES 0
-#define IF_FEATURE_HTTPD_RANGES(...)
-#define IF_NOT_FEATURE_HTTPD_RANGES(...) __VA_ARGS__
-#undef CONFIG_FEATURE_HTTPD_USE_SENDFILE
-#define ENABLE_FEATURE_HTTPD_USE_SENDFILE 0
-#define IF_FEATURE_HTTPD_USE_SENDFILE(...)
-#define IF_NOT_FEATURE_HTTPD_USE_SENDFILE(...) __VA_ARGS__
-#undef CONFIG_FEATURE_HTTPD_SETUID
-#define ENABLE_FEATURE_HTTPD_SETUID 0
-#define IF_FEATURE_HTTPD_SETUID(...)
-#define IF_NOT_FEATURE_HTTPD_SETUID(...) __VA_ARGS__
-#undef CONFIG_FEATURE_HTTPD_BASIC_AUTH
-#define ENABLE_FEATURE_HTTPD_BASIC_AUTH 0
-#define IF_FEATURE_HTTPD_BASIC_AUTH(...)
-#define IF_NOT_FEATURE_HTTPD_BASIC_AUTH(...) __VA_ARGS__
-#undef CONFIG_FEATURE_HTTPD_AUTH_MD5
-#define ENABLE_FEATURE_HTTPD_AUTH_MD5 0
-#define IF_FEATURE_HTTPD_AUTH_MD5(...)
-#define IF_NOT_FEATURE_HTTPD_AUTH_MD5(...) __VA_ARGS__
-#undef CONFIG_FEATURE_HTTPD_CGI
-#define ENABLE_FEATURE_HTTPD_CGI 0
-#define IF_FEATURE_HTTPD_CGI(...)
-#define IF_NOT_FEATURE_HTTPD_CGI(...) __VA_ARGS__
-#undef CONFIG_FEATURE_HTTPD_CONFIG_WITH_SCRIPT_INTERPR
-#define ENABLE_FEATURE_HTTPD_CONFIG_WITH_SCRIPT_INTERPR 0
-#define IF_FEATURE_HTTPD_CONFIG_WITH_SCRIPT_INTERPR(...)
-#define IF_NOT_FEATURE_HTTPD_CONFIG_WITH_SCRIPT_INTERPR(...) __VA_ARGS__
-#undef CONFIG_FEATURE_HTTPD_SET_REMOTE_PORT_TO_ENV
-#define ENABLE_FEATURE_HTTPD_SET_REMOTE_PORT_TO_ENV 0
-#define IF_FEATURE_HTTPD_SET_REMOTE_PORT_TO_ENV(...)
-#define IF_NOT_FEATURE_HTTPD_SET_REMOTE_PORT_TO_ENV(...) __VA_ARGS__
-#undef CONFIG_FEATURE_HTTPD_ENCODE_URL_STR
-#define ENABLE_FEATURE_HTTPD_ENCODE_URL_STR 0
-#define IF_FEATURE_HTTPD_ENCODE_URL_STR(...)
-#define IF_NOT_FEATURE_HTTPD_ENCODE_URL_STR(...) __VA_ARGS__
-#undef CONFIG_FEATURE_HTTPD_ERROR_PAGES
-#define ENABLE_FEATURE_HTTPD_ERROR_PAGES 0
-#define IF_FEATURE_HTTPD_ERROR_PAGES(...)
-#define IF_NOT_FEATURE_HTTPD_ERROR_PAGES(...) __VA_ARGS__
-#undef CONFIG_FEATURE_HTTPD_PROXY
-#define ENABLE_FEATURE_HTTPD_PROXY 0
-#define IF_FEATURE_HTTPD_PROXY(...)
-#define IF_NOT_FEATURE_HTTPD_PROXY(...) __VA_ARGS__
-#undef CONFIG_FEATURE_HTTPD_GZIP
-#define ENABLE_FEATURE_HTTPD_GZIP 0
-#define IF_FEATURE_HTTPD_GZIP(...)
-#define IF_NOT_FEATURE_HTTPD_GZIP(...) __VA_ARGS__
-#define CONFIG_IFCONFIG 1
-#define ENABLE_IFCONFIG 1
-#define IF_IFCONFIG(...) __VA_ARGS__
-#define IF_NOT_IFCONFIG(...)
-#define CONFIG_FEATURE_IFCONFIG_STATUS 1
-#define ENABLE_FEATURE_IFCONFIG_STATUS 1
-#define IF_FEATURE_IFCONFIG_STATUS(...) __VA_ARGS__
-#define IF_NOT_FEATURE_IFCONFIG_STATUS(...)
-#undef CONFIG_FEATURE_IFCONFIG_SLIP
-#define ENABLE_FEATURE_IFCONFIG_SLIP 0
-#define IF_FEATURE_IFCONFIG_SLIP(...)
-#define IF_NOT_FEATURE_IFCONFIG_SLIP(...) __VA_ARGS__
-#undef CONFIG_FEATURE_IFCONFIG_MEMSTART_IOADDR_IRQ
-#define ENABLE_FEATURE_IFCONFIG_MEMSTART_IOADDR_IRQ 0
-#define IF_FEATURE_IFCONFIG_MEMSTART_IOADDR_IRQ(...)
-#define IF_NOT_FEATURE_IFCONFIG_MEMSTART_IOADDR_IRQ(...) __VA_ARGS__
-#define CONFIG_FEATURE_IFCONFIG_HW 1
-#define ENABLE_FEATURE_IFCONFIG_HW 1
-#define IF_FEATURE_IFCONFIG_HW(...) __VA_ARGS__
-#define IF_NOT_FEATURE_IFCONFIG_HW(...)
-#undef CONFIG_FEATURE_IFCONFIG_BROADCAST_PLUS
-#define ENABLE_FEATURE_IFCONFIG_BROADCAST_PLUS 0
-#define IF_FEATURE_IFCONFIG_BROADCAST_PLUS(...)
-#define IF_NOT_FEATURE_IFCONFIG_BROADCAST_PLUS(...) __VA_ARGS__
-#undef CONFIG_IFENSLAVE
-#define ENABLE_IFENSLAVE 0
-#define IF_IFENSLAVE(...)
-#define IF_NOT_IFENSLAVE(...) __VA_ARGS__
-#undef CONFIG_IFPLUGD
-#define ENABLE_IFPLUGD 0
-#define IF_IFPLUGD(...)
-#define IF_NOT_IFPLUGD(...) __VA_ARGS__
-#undef CONFIG_IFUPDOWN
-#define ENABLE_IFUPDOWN 0
-#define IF_IFUPDOWN(...)
-#define IF_NOT_IFUPDOWN(...) __VA_ARGS__
-#define CONFIG_IFUPDOWN_IFSTATE_PATH ""
-#define ENABLE_IFUPDOWN_IFSTATE_PATH 1
-#define IF_IFUPDOWN_IFSTATE_PATH(...) __VA_ARGS__
-#define IF_NOT_IFUPDOWN_IFSTATE_PATH(...)
-#undef CONFIG_FEATURE_IFUPDOWN_IP
-#define ENABLE_FEATURE_IFUPDOWN_IP 0
-#define IF_FEATURE_IFUPDOWN_IP(...)
-#define IF_NOT_FEATURE_IFUPDOWN_IP(...) __VA_ARGS__
-#undef CONFIG_FEATURE_IFUPDOWN_IP_BUILTIN
-#define ENABLE_FEATURE_IFUPDOWN_IP_BUILTIN 0
-#define IF_FEATURE_IFUPDOWN_IP_BUILTIN(...)
-#define IF_NOT_FEATURE_IFUPDOWN_IP_BUILTIN(...) __VA_ARGS__
-#undef CONFIG_FEATURE_IFUPDOWN_IFCONFIG_BUILTIN
-#define ENABLE_FEATURE_IFUPDOWN_IFCONFIG_BUILTIN 0
-#define IF_FEATURE_IFUPDOWN_IFCONFIG_BUILTIN(...)
-#define IF_NOT_FEATURE_IFUPDOWN_IFCONFIG_BUILTIN(...) __VA_ARGS__
-#undef CONFIG_FEATURE_IFUPDOWN_IPV4
-#define ENABLE_FEATURE_IFUPDOWN_IPV4 0
-#define IF_FEATURE_IFUPDOWN_IPV4(...)
-#define IF_NOT_FEATURE_IFUPDOWN_IPV4(...) __VA_ARGS__
-#undef CONFIG_FEATURE_IFUPDOWN_IPV6
-#define ENABLE_FEATURE_IFUPDOWN_IPV6 0
-#define IF_FEATURE_IFUPDOWN_IPV6(...)
-#define IF_NOT_FEATURE_IFUPDOWN_IPV6(...) __VA_ARGS__
-#undef CONFIG_FEATURE_IFUPDOWN_MAPPING
-#define ENABLE_FEATURE_IFUPDOWN_MAPPING 0
-#define IF_FEATURE_IFUPDOWN_MAPPING(...)
-#define IF_NOT_FEATURE_IFUPDOWN_MAPPING(...) __VA_ARGS__
-#undef CONFIG_FEATURE_IFUPDOWN_EXTERNAL_DHCP
-#define ENABLE_FEATURE_IFUPDOWN_EXTERNAL_DHCP 0
-#define IF_FEATURE_IFUPDOWN_EXTERNAL_DHCP(...)
-#define IF_NOT_FEATURE_IFUPDOWN_EXTERNAL_DHCP(...) __VA_ARGS__
-#define CONFIG_INETD 1
-#define ENABLE_INETD 1
-#define IF_INETD(...) __VA_ARGS__
-#define IF_NOT_INETD(...)
-#define CONFIG_FEATURE_INETD_SUPPORT_BUILTIN_ECHO 1
-#define ENABLE_FEATURE_INETD_SUPPORT_BUILTIN_ECHO 1
-#define IF_FEATURE_INETD_SUPPORT_BUILTIN_ECHO(...) __VA_ARGS__
-#define IF_NOT_FEATURE_INETD_SUPPORT_BUILTIN_ECHO(...)
-#undef CONFIG_FEATURE_INETD_SUPPORT_BUILTIN_DISCARD
-#define ENABLE_FEATURE_INETD_SUPPORT_BUILTIN_DISCARD 0
-#define IF_FEATURE_INETD_SUPPORT_BUILTIN_DISCARD(...)
-#define IF_NOT_FEATURE_INETD_SUPPORT_BUILTIN_DISCARD(...) __VA_ARGS__
-#define CONFIG_FEATURE_INETD_SUPPORT_BUILTIN_TIME 1
-#define ENABLE_FEATURE_INETD_SUPPORT_BUILTIN_TIME 1
-#define IF_FEATURE_INETD_SUPPORT_BUILTIN_TIME(...) __VA_ARGS__
-#define IF_NOT_FEATURE_INETD_SUPPORT_BUILTIN_TIME(...)
-#define CONFIG_FEATURE_INETD_SUPPORT_BUILTIN_DAYTIME 1
-#define ENABLE_FEATURE_INETD_SUPPORT_BUILTIN_DAYTIME 1
-#define IF_FEATURE_INETD_SUPPORT_BUILTIN_DAYTIME(...) __VA_ARGS__
-#define IF_NOT_FEATURE_INETD_SUPPORT_BUILTIN_DAYTIME(...)
-#undef CONFIG_FEATURE_INETD_SUPPORT_BUILTIN_CHARGEN
-#define ENABLE_FEATURE_INETD_SUPPORT_BUILTIN_CHARGEN 0
-#define IF_FEATURE_INETD_SUPPORT_BUILTIN_CHARGEN(...)
-#define IF_NOT_FEATURE_INETD_SUPPORT_BUILTIN_CHARGEN(...) __VA_ARGS__
-#undef CONFIG_FEATURE_INETD_RPC
-#define ENABLE_FEATURE_INETD_RPC 0
-#define IF_FEATURE_INETD_RPC(...)
-#define IF_NOT_FEATURE_INETD_RPC(...) __VA_ARGS__
-#define CONFIG_IP 1
-#define ENABLE_IP 1
-#define IF_IP(...) __VA_ARGS__
-#define IF_NOT_IP(...)
-#define CONFIG_FEATURE_IP_ADDRESS 1
-#define ENABLE_FEATURE_IP_ADDRESS 1
-#define IF_FEATURE_IP_ADDRESS(...) __VA_ARGS__
-#define IF_NOT_FEATURE_IP_ADDRESS(...)
-#define CONFIG_FEATURE_IP_LINK 1
-#define ENABLE_FEATURE_IP_LINK 1
-#define IF_FEATURE_IP_LINK(...) __VA_ARGS__
-#define IF_NOT_FEATURE_IP_LINK(...)
-#define CONFIG_FEATURE_IP_ROUTE 1
-#define ENABLE_FEATURE_IP_ROUTE 1
-#define IF_FEATURE_IP_ROUTE(...) __VA_ARGS__
-#define IF_NOT_FEATURE_IP_ROUTE(...)
-#undef CONFIG_FEATURE_IP_TUNNEL
-#define ENABLE_FEATURE_IP_TUNNEL 0
-#define IF_FEATURE_IP_TUNNEL(...)
-#define IF_NOT_FEATURE_IP_TUNNEL(...) __VA_ARGS__
-#define CONFIG_FEATURE_IP_RULE 1
-#define ENABLE_FEATURE_IP_RULE 1
-#define IF_FEATURE_IP_RULE(...) __VA_ARGS__
-#define IF_NOT_FEATURE_IP_RULE(...)
-#undef CONFIG_FEATURE_IP_SHORT_FORMS
-#define ENABLE_FEATURE_IP_SHORT_FORMS 0
-#define IF_FEATURE_IP_SHORT_FORMS(...)
-#define IF_NOT_FEATURE_IP_SHORT_FORMS(...) __VA_ARGS__
-#undef CONFIG_FEATURE_IP_RARE_PROTOCOLS
-#define ENABLE_FEATURE_IP_RARE_PROTOCOLS 0
-#define IF_FEATURE_IP_RARE_PROTOCOLS(...)
-#define IF_NOT_FEATURE_IP_RARE_PROTOCOLS(...) __VA_ARGS__
-#undef CONFIG_IPADDR
-#define ENABLE_IPADDR 0
-#define IF_IPADDR(...)
-#define IF_NOT_IPADDR(...) __VA_ARGS__
-#undef CONFIG_IPLINK
-#define ENABLE_IPLINK 0
-#define IF_IPLINK(...)
-#define IF_NOT_IPLINK(...) __VA_ARGS__
-#undef CONFIG_IPROUTE
-#define ENABLE_IPROUTE 0
-#define IF_IPROUTE(...)
-#define IF_NOT_IPROUTE(...) __VA_ARGS__
-#undef CONFIG_IPTUNNEL
-#define ENABLE_IPTUNNEL 0
-#define IF_IPTUNNEL(...)
-#define IF_NOT_IPTUNNEL(...) __VA_ARGS__
-#undef CONFIG_IPRULE
-#define ENABLE_IPRULE 0
-#define IF_IPRULE(...)
-#define IF_NOT_IPRULE(...) __VA_ARGS__
-#undef CONFIG_IPCALC
-#define ENABLE_IPCALC 0
-#define IF_IPCALC(...)
-#define IF_NOT_IPCALC(...) __VA_ARGS__
-#undef CONFIG_FEATURE_IPCALC_FANCY
-#define ENABLE_FEATURE_IPCALC_FANCY 0
-#define IF_FEATURE_IPCALC_FANCY(...)
-#define IF_NOT_FEATURE_IPCALC_FANCY(...) __VA_ARGS__
-#undef CONFIG_FEATURE_IPCALC_LONG_OPTIONS
-#define ENABLE_FEATURE_IPCALC_LONG_OPTIONS 0
-#define IF_FEATURE_IPCALC_LONG_OPTIONS(...)
-#define IF_NOT_FEATURE_IPCALC_LONG_OPTIONS(...) __VA_ARGS__
-#define CONFIG_NETSTAT 1
-#define ENABLE_NETSTAT 1
-#define IF_NETSTAT(...) __VA_ARGS__
-#define IF_NOT_NETSTAT(...)
-#define CONFIG_FEATURE_NETSTAT_WIDE 1
-#define ENABLE_FEATURE_NETSTAT_WIDE 1
-#define IF_FEATURE_NETSTAT_WIDE(...) __VA_ARGS__
-#define IF_NOT_FEATURE_NETSTAT_WIDE(...)
-#define CONFIG_FEATURE_NETSTAT_PRG 1
-#define ENABLE_FEATURE_NETSTAT_PRG 1
-#define IF_FEATURE_NETSTAT_PRG(...) __VA_ARGS__
-#define IF_NOT_FEATURE_NETSTAT_PRG(...)
-#define CONFIG_NSLOOKUP 1
-#define ENABLE_NSLOOKUP 1
-#define IF_NSLOOKUP(...) __VA_ARGS__
-#define IF_NOT_NSLOOKUP(...)
-#define CONFIG_NTPD 1
-#define ENABLE_NTPD 1
-#define IF_NTPD(...) __VA_ARGS__
-#define IF_NOT_NTPD(...)
-#undef CONFIG_FEATURE_NTPD_SERVER
-#define ENABLE_FEATURE_NTPD_SERVER 0
-#define IF_FEATURE_NTPD_SERVER(...)
-#define IF_NOT_FEATURE_NTPD_SERVER(...) __VA_ARGS__
-#undef CONFIG_PSCAN
-#define ENABLE_PSCAN 0
-#define IF_PSCAN(...)
-#define IF_NOT_PSCAN(...) __VA_ARGS__
-#define CONFIG_ROUTE 1
-#define ENABLE_ROUTE 1
-#define IF_ROUTE(...) __VA_ARGS__
-#define IF_NOT_ROUTE(...)
-#undef CONFIG_SLATTACH
-#define ENABLE_SLATTACH 0
-#define IF_SLATTACH(...)
-#define IF_NOT_SLATTACH(...) __VA_ARGS__
-#undef CONFIG_TCPSVD
-#define ENABLE_TCPSVD 0
-#define IF_TCPSVD(...)
-#define IF_NOT_TCPSVD(...) __VA_ARGS__
-#define CONFIG_TELNET 1
-#define ENABLE_TELNET 1
-#define IF_TELNET(...) __VA_ARGS__
-#define IF_NOT_TELNET(...)
-#define CONFIG_FEATURE_TELNET_TTYPE 1
-#define ENABLE_FEATURE_TELNET_TTYPE 1
-#define IF_FEATURE_TELNET_TTYPE(...) __VA_ARGS__
-#define IF_NOT_FEATURE_TELNET_TTYPE(...)
-#undef CONFIG_FEATURE_TELNET_AUTOLOGIN
-#define ENABLE_FEATURE_TELNET_AUTOLOGIN 0
-#define IF_FEATURE_TELNET_AUTOLOGIN(...)
-#define IF_NOT_FEATURE_TELNET_AUTOLOGIN(...) __VA_ARGS__
-#define CONFIG_TELNETD 1
-#define ENABLE_TELNETD 1
-#define IF_TELNETD(...) __VA_ARGS__
-#define IF_NOT_TELNETD(...)
-#define CONFIG_FEATURE_TELNETD_STANDALONE 1
-#define ENABLE_FEATURE_TELNETD_STANDALONE 1
-#define IF_FEATURE_TELNETD_STANDALONE(...) __VA_ARGS__
-#define IF_NOT_FEATURE_TELNETD_STANDALONE(...)
-#define CONFIG_FEATURE_TELNETD_INETD_WAIT 1
-#define ENABLE_FEATURE_TELNETD_INETD_WAIT 1
-#define IF_FEATURE_TELNETD_INETD_WAIT(...) __VA_ARGS__
-#define IF_NOT_FEATURE_TELNETD_INETD_WAIT(...)
-#define CONFIG_TFTP 1
-#define ENABLE_TFTP 1
-#define IF_TFTP(...) __VA_ARGS__
-#define IF_NOT_TFTP(...)
-#define CONFIG_TFTPD 1
-#define ENABLE_TFTPD 1
-#define IF_TFTPD(...) __VA_ARGS__
-#define IF_NOT_TFTPD(...)
-
-/*
- * Common options for tftp/tftpd
- */
-#define CONFIG_FEATURE_TFTP_GET 1
-#define ENABLE_FEATURE_TFTP_GET 1
-#define IF_FEATURE_TFTP_GET(...) __VA_ARGS__
-#define IF_NOT_FEATURE_TFTP_GET(...)
-#define CONFIG_FEATURE_TFTP_PUT 1
-#define ENABLE_FEATURE_TFTP_PUT 1
-#define IF_FEATURE_TFTP_PUT(...) __VA_ARGS__
-#define IF_NOT_FEATURE_TFTP_PUT(...)
-#undef CONFIG_FEATURE_TFTP_BLOCKSIZE
-#define ENABLE_FEATURE_TFTP_BLOCKSIZE 0
-#define IF_FEATURE_TFTP_BLOCKSIZE(...)
-#define IF_NOT_FEATURE_TFTP_BLOCKSIZE(...) __VA_ARGS__
-#undef CONFIG_FEATURE_TFTP_PROGRESS_BAR
-#define ENABLE_FEATURE_TFTP_PROGRESS_BAR 0
-#define IF_FEATURE_TFTP_PROGRESS_BAR(...)
-#define IF_NOT_FEATURE_TFTP_PROGRESS_BAR(...) __VA_ARGS__
-#undef CONFIG_TFTP_DEBUG
-#define ENABLE_TFTP_DEBUG 0
-#define IF_TFTP_DEBUG(...)
-#define IF_NOT_TFTP_DEBUG(...) __VA_ARGS__
-#define CONFIG_TRACEROUTE 1
-#define ENABLE_TRACEROUTE 1
-#define IF_TRACEROUTE(...) __VA_ARGS__
-#define IF_NOT_TRACEROUTE(...)
-#undef CONFIG_TRACEROUTE6
-#define ENABLE_TRACEROUTE6 0
-#define IF_TRACEROUTE6(...)
-#define IF_NOT_TRACEROUTE6(...) __VA_ARGS__
-#define CONFIG_FEATURE_TRACEROUTE_VERBOSE 1
-#define ENABLE_FEATURE_TRACEROUTE_VERBOSE 1
-#define IF_FEATURE_TRACEROUTE_VERBOSE(...) __VA_ARGS__
-#define IF_NOT_FEATURE_TRACEROUTE_VERBOSE(...)
-#undef CONFIG_FEATURE_TRACEROUTE_SOURCE_ROUTE
-#define ENABLE_FEATURE_TRACEROUTE_SOURCE_ROUTE 0
-#define IF_FEATURE_TRACEROUTE_SOURCE_ROUTE(...)
-#define IF_NOT_FEATURE_TRACEROUTE_SOURCE_ROUTE(...) __VA_ARGS__
-#undef CONFIG_FEATURE_TRACEROUTE_USE_ICMP
-#define ENABLE_FEATURE_TRACEROUTE_USE_ICMP 0
-#define IF_FEATURE_TRACEROUTE_USE_ICMP(...)
-#define IF_NOT_FEATURE_TRACEROUTE_USE_ICMP(...) __VA_ARGS__
-#undef CONFIG_TUNCTL
-#define ENABLE_TUNCTL 0
-#define IF_TUNCTL(...)
-#define IF_NOT_TUNCTL(...) __VA_ARGS__
-#undef CONFIG_FEATURE_TUNCTL_UG
-#define ENABLE_FEATURE_TUNCTL_UG 0
-#define IF_FEATURE_TUNCTL_UG(...)
-#define IF_NOT_FEATURE_TUNCTL_UG(...) __VA_ARGS__
-#undef CONFIG_UDHCPC6
-#define ENABLE_UDHCPC6 0
-#define IF_UDHCPC6(...)
-#define IF_NOT_UDHCPC6(...) __VA_ARGS__
-#undef CONFIG_UDHCPD
-#define ENABLE_UDHCPD 0
-#define IF_UDHCPD(...)
-#define IF_NOT_UDHCPD(...) __VA_ARGS__
-#undef CONFIG_DHCPRELAY
-#define ENABLE_DHCPRELAY 0
-#define IF_DHCPRELAY(...)
-#define IF_NOT_DHCPRELAY(...) __VA_ARGS__
-#undef CONFIG_DUMPLEASES
-#define ENABLE_DUMPLEASES 0
-#define IF_DUMPLEASES(...)
-#define IF_NOT_DUMPLEASES(...) __VA_ARGS__
-#undef CONFIG_FEATURE_UDHCPD_WRITE_LEASES_EARLY
-#define ENABLE_FEATURE_UDHCPD_WRITE_LEASES_EARLY 0
-#define IF_FEATURE_UDHCPD_WRITE_LEASES_EARLY(...)
-#define IF_NOT_FEATURE_UDHCPD_WRITE_LEASES_EARLY(...) __VA_ARGS__
-#undef CONFIG_FEATURE_UDHCPD_BASE_IP_ON_MAC
-#define ENABLE_FEATURE_UDHCPD_BASE_IP_ON_MAC 0
-#define IF_FEATURE_UDHCPD_BASE_IP_ON_MAC(...)
-#define IF_NOT_FEATURE_UDHCPD_BASE_IP_ON_MAC(...) __VA_ARGS__
-#define CONFIG_DHCPD_LEASES_FILE ""
-#define ENABLE_DHCPD_LEASES_FILE 1
-#define IF_DHCPD_LEASES_FILE(...) __VA_ARGS__
-#define IF_NOT_DHCPD_LEASES_FILE(...)
-#undef CONFIG_UDHCPC
-#define ENABLE_UDHCPC 0
-#define IF_UDHCPC(...)
-#define IF_NOT_UDHCPC(...) __VA_ARGS__
-#undef CONFIG_FEATURE_UDHCPC_ARPING
-#define ENABLE_FEATURE_UDHCPC_ARPING 0
-#define IF_FEATURE_UDHCPC_ARPING(...)
-#define IF_NOT_FEATURE_UDHCPC_ARPING(...) __VA_ARGS__
-#undef CONFIG_FEATURE_UDHCP_PORT
-#define ENABLE_FEATURE_UDHCP_PORT 0
-#define IF_FEATURE_UDHCP_PORT(...)
-#define IF_NOT_FEATURE_UDHCP_PORT(...) __VA_ARGS__
-#define CONFIG_UDHCP_DEBUG 0
-#define ENABLE_UDHCP_DEBUG 1
-#define IF_UDHCP_DEBUG(...) __VA_ARGS__
-#define IF_NOT_UDHCP_DEBUG(...)
-#undef CONFIG_FEATURE_UDHCP_RFC3397
-#define ENABLE_FEATURE_UDHCP_RFC3397 0
-#define IF_FEATURE_UDHCP_RFC3397(...)
-#define IF_NOT_FEATURE_UDHCP_RFC3397(...) __VA_ARGS__
-#undef CONFIG_FEATURE_UDHCP_8021Q
-#define ENABLE_FEATURE_UDHCP_8021Q 0
-#define IF_FEATURE_UDHCP_8021Q(...)
-#define IF_NOT_FEATURE_UDHCP_8021Q(...) __VA_ARGS__
-#define CONFIG_UDHCPC_DEFAULT_SCRIPT ""
-#define ENABLE_UDHCPC_DEFAULT_SCRIPT 1
-#define IF_UDHCPC_DEFAULT_SCRIPT(...) __VA_ARGS__
-#define IF_NOT_UDHCPC_DEFAULT_SCRIPT(...)
-#define CONFIG_UDHCPC_SLACK_FOR_BUGGY_SERVERS 0
-#define ENABLE_UDHCPC_SLACK_FOR_BUGGY_SERVERS 1
-#define IF_UDHCPC_SLACK_FOR_BUGGY_SERVERS(...) __VA_ARGS__
-#define IF_NOT_UDHCPC_SLACK_FOR_BUGGY_SERVERS(...)
-#define CONFIG_IFUPDOWN_UDHCPC_CMD_OPTIONS ""
-#define ENABLE_IFUPDOWN_UDHCPC_CMD_OPTIONS 1
-#define IF_IFUPDOWN_UDHCPC_CMD_OPTIONS(...) __VA_ARGS__
-#define IF_NOT_IFUPDOWN_UDHCPC_CMD_OPTIONS(...)
-#undef CONFIG_UDPSVD
-#define ENABLE_UDPSVD 0
-#define IF_UDPSVD(...)
-#define IF_NOT_UDPSVD(...) __VA_ARGS__
-#undef CONFIG_VCONFIG
-#define ENABLE_VCONFIG 0
-#define IF_VCONFIG(...)
-#define IF_NOT_VCONFIG(...) __VA_ARGS__
-#define CONFIG_WGET 1
-#define ENABLE_WGET 1
-#define IF_WGET(...) __VA_ARGS__
-#define IF_NOT_WGET(...)
-#define CONFIG_FEATURE_WGET_STATUSBAR 1
-#define ENABLE_FEATURE_WGET_STATUSBAR 1
-#define IF_FEATURE_WGET_STATUSBAR(...) __VA_ARGS__
-#define IF_NOT_FEATURE_WGET_STATUSBAR(...)
-#define CONFIG_FEATURE_WGET_AUTHENTICATION 1
-#define ENABLE_FEATURE_WGET_AUTHENTICATION 1
-#define IF_FEATURE_WGET_AUTHENTICATION(...) __VA_ARGS__
-#define IF_NOT_FEATURE_WGET_AUTHENTICATION(...)
-#define CONFIG_FEATURE_WGET_LONG_OPTIONS 1
-#define ENABLE_FEATURE_WGET_LONG_OPTIONS 1
-#define IF_FEATURE_WGET_LONG_OPTIONS(...) __VA_ARGS__
-#define IF_NOT_FEATURE_WGET_LONG_OPTIONS(...)
-#define CONFIG_FEATURE_WGET_TIMEOUT 1
-#define ENABLE_FEATURE_WGET_TIMEOUT 1
-#define IF_FEATURE_WGET_TIMEOUT(...) __VA_ARGS__
-#define IF_NOT_FEATURE_WGET_TIMEOUT(...)
-#undef CONFIG_ZCIP
-#define ENABLE_ZCIP 0
-#define IF_ZCIP(...)
-#define IF_NOT_ZCIP(...) __VA_ARGS__
-
-/*
- * Print Utilities
- */
-#undef CONFIG_LPD
-#define ENABLE_LPD 0
-#define IF_LPD(...)
-#define IF_NOT_LPD(...) __VA_ARGS__
-#undef CONFIG_LPR
-#define ENABLE_LPR 0
-#define IF_LPR(...)
-#define IF_NOT_LPR(...) __VA_ARGS__
-#undef CONFIG_LPQ
-#define ENABLE_LPQ 0
-#define IF_LPQ(...)
-#define IF_NOT_LPQ(...) __VA_ARGS__
-
-/*
- * Mail Utilities
- */
-#undef CONFIG_MAKEMIME
-#define ENABLE_MAKEMIME 0
-#define IF_MAKEMIME(...)
-#define IF_NOT_MAKEMIME(...) __VA_ARGS__
-#define CONFIG_FEATURE_MIME_CHARSET ""
-#define ENABLE_FEATURE_MIME_CHARSET 1
-#define IF_FEATURE_MIME_CHARSET(...) __VA_ARGS__
-#define IF_NOT_FEATURE_MIME_CHARSET(...)
-#undef CONFIG_POPMAILDIR
-#define ENABLE_POPMAILDIR 0
-#define IF_POPMAILDIR(...)
-#define IF_NOT_POPMAILDIR(...) __VA_ARGS__
-#undef CONFIG_FEATURE_POPMAILDIR_DELIVERY
-#define ENABLE_FEATURE_POPMAILDIR_DELIVERY 0
-#define IF_FEATURE_POPMAILDIR_DELIVERY(...)
-#define IF_NOT_FEATURE_POPMAILDIR_DELIVERY(...) __VA_ARGS__
-#undef CONFIG_REFORMIME
-#define ENABLE_REFORMIME 0
-#define IF_REFORMIME(...)
-#define IF_NOT_REFORMIME(...) __VA_ARGS__
-#undef CONFIG_FEATURE_REFORMIME_COMPAT
-#define ENABLE_FEATURE_REFORMIME_COMPAT 0
-#define IF_FEATURE_REFORMIME_COMPAT(...)
-#define IF_NOT_FEATURE_REFORMIME_COMPAT(...) __VA_ARGS__
-#undef CONFIG_SENDMAIL
-#define ENABLE_SENDMAIL 0
-#define IF_SENDMAIL(...)
-#define IF_NOT_SENDMAIL(...) __VA_ARGS__
-
-/*
- * Process Utilities
- */
-#define CONFIG_IOSTAT 1
-#define ENABLE_IOSTAT 1
-#define IF_IOSTAT(...) __VA_ARGS__
-#define IF_NOT_IOSTAT(...)
-#define CONFIG_LSOF 1
-#define ENABLE_LSOF 1
-#define IF_LSOF(...) __VA_ARGS__
-#define IF_NOT_LSOF(...)
-#define CONFIG_MPSTAT 1
-#define ENABLE_MPSTAT 1
-#define IF_MPSTAT(...) __VA_ARGS__
-#define IF_NOT_MPSTAT(...)
-#undef CONFIG_NMETER
-#define ENABLE_NMETER 0
-#define IF_NMETER(...)
-#define IF_NOT_NMETER(...) __VA_ARGS__
-#define CONFIG_PMAP 1
-#define ENABLE_PMAP 1
-#define IF_PMAP(...) __VA_ARGS__
-#define IF_NOT_PMAP(...)
-#undef CONFIG_POWERTOP
-#define ENABLE_POWERTOP 0
-#define IF_POWERTOP(...)
-#define IF_NOT_POWERTOP(...) __VA_ARGS__
-#define CONFIG_PSTREE 1
-#define ENABLE_PSTREE 1
-#define IF_PSTREE(...) __VA_ARGS__
-#define IF_NOT_PSTREE(...)
-#define CONFIG_PWDX 1
-#define ENABLE_PWDX 1
-#define IF_PWDX(...) __VA_ARGS__
-#define IF_NOT_PWDX(...)
-#undef CONFIG_SMEMCAP
-#define ENABLE_SMEMCAP 0
-#define IF_SMEMCAP(...)
-#define IF_NOT_SMEMCAP(...) __VA_ARGS__
-#define CONFIG_TOP 1
-#define ENABLE_TOP 1
-#define IF_TOP(...) __VA_ARGS__
-#define IF_NOT_TOP(...)
-#define CONFIG_FEATURE_TOP_CPU_USAGE_PERCENTAGE 1
-#define ENABLE_FEATURE_TOP_CPU_USAGE_PERCENTAGE 1
-#define IF_FEATURE_TOP_CPU_USAGE_PERCENTAGE(...) __VA_ARGS__
-#define IF_NOT_FEATURE_TOP_CPU_USAGE_PERCENTAGE(...)
-#define CONFIG_FEATURE_TOP_CPU_GLOBAL_PERCENTS 1
-#define ENABLE_FEATURE_TOP_CPU_GLOBAL_PERCENTS 1
-#define IF_FEATURE_TOP_CPU_GLOBAL_PERCENTS(...) __VA_ARGS__
-#define IF_NOT_FEATURE_TOP_CPU_GLOBAL_PERCENTS(...)
-#define CONFIG_FEATURE_TOP_SMP_CPU 1
-#define ENABLE_FEATURE_TOP_SMP_CPU 1
-#define IF_FEATURE_TOP_SMP_CPU(...) __VA_ARGS__
-#define IF_NOT_FEATURE_TOP_SMP_CPU(...)
-#define CONFIG_FEATURE_TOP_DECIMALS 1
-#define ENABLE_FEATURE_TOP_DECIMALS 1
-#define IF_FEATURE_TOP_DECIMALS(...) __VA_ARGS__
-#define IF_NOT_FEATURE_TOP_DECIMALS(...)
-#define CONFIG_FEATURE_TOP_SMP_PROCESS 1
-#define ENABLE_FEATURE_TOP_SMP_PROCESS 1
-#define IF_FEATURE_TOP_SMP_PROCESS(...) __VA_ARGS__
-#define IF_NOT_FEATURE_TOP_SMP_PROCESS(...)
-#define CONFIG_FEATURE_TOPMEM 1
-#define ENABLE_FEATURE_TOPMEM 1
-#define IF_FEATURE_TOPMEM(...) __VA_ARGS__
-#define IF_NOT_FEATURE_TOPMEM(...)
-#define CONFIG_UPTIME 1
-#define ENABLE_UPTIME 1
-#define IF_UPTIME(...) __VA_ARGS__
-#define IF_NOT_UPTIME(...)
-#undef CONFIG_FEATURE_UPTIME_UTMP_SUPPORT
-#define ENABLE_FEATURE_UPTIME_UTMP_SUPPORT 0
-#define IF_FEATURE_UPTIME_UTMP_SUPPORT(...)
-#define IF_NOT_FEATURE_UPTIME_UTMP_SUPPORT(...) __VA_ARGS__
-#define CONFIG_FREE 1
-#define ENABLE_FREE 1
-#define IF_FREE(...) __VA_ARGS__
-#define IF_NOT_FREE(...)
-#define CONFIG_FUSER 1
-#define ENABLE_FUSER 1
-#define IF_FUSER(...) __VA_ARGS__
-#define IF_NOT_FUSER(...)
-#define CONFIG_KILL 1
-#define ENABLE_KILL 1
-#define IF_KILL(...) __VA_ARGS__
-#define IF_NOT_KILL(...)
-#define CONFIG_KILLALL 1
-#define ENABLE_KILLALL 1
-#define IF_KILLALL(...) __VA_ARGS__
-#define IF_NOT_KILLALL(...)
-#define CONFIG_KILLALL5 1
-#define ENABLE_KILLALL5 1
-#define IF_KILLALL5(...) __VA_ARGS__
-#define IF_NOT_KILLALL5(...)
-#define CONFIG_PGREP 1
-#define ENABLE_PGREP 1
-#define IF_PGREP(...) __VA_ARGS__
-#define IF_NOT_PGREP(...)
-#define CONFIG_PIDOF 1
-#define ENABLE_PIDOF 1
-#define IF_PIDOF(...) __VA_ARGS__
-#define IF_NOT_PIDOF(...)
-#define CONFIG_FEATURE_PIDOF_SINGLE 1
-#define ENABLE_FEATURE_PIDOF_SINGLE 1
-#define IF_FEATURE_PIDOF_SINGLE(...) __VA_ARGS__
-#define IF_NOT_FEATURE_PIDOF_SINGLE(...)
-#define CONFIG_FEATURE_PIDOF_OMIT 1
-#define ENABLE_FEATURE_PIDOF_OMIT 1
-#define IF_FEATURE_PIDOF_OMIT(...) __VA_ARGS__
-#define IF_NOT_FEATURE_PIDOF_OMIT(...)
-#define CONFIG_PKILL 1
-#define ENABLE_PKILL 1
-#define IF_PKILL(...) __VA_ARGS__
-#define IF_NOT_PKILL(...)
-#define CONFIG_PS 1
-#define ENABLE_PS 1
-#define IF_PS(...) __VA_ARGS__
-#define IF_NOT_PS(...)
-#undef CONFIG_FEATURE_PS_WIDE
-#define ENABLE_FEATURE_PS_WIDE 0
-#define IF_FEATURE_PS_WIDE(...)
-#define IF_NOT_FEATURE_PS_WIDE(...) __VA_ARGS__
-#undef CONFIG_FEATURE_PS_LONG
-#define ENABLE_FEATURE_PS_LONG 0
-#define IF_FEATURE_PS_LONG(...)
-#define IF_NOT_FEATURE_PS_LONG(...) __VA_ARGS__
-#define CONFIG_FEATURE_PS_TIME 1
-#define ENABLE_FEATURE_PS_TIME 1
-#define IF_FEATURE_PS_TIME(...) __VA_ARGS__
-#define IF_NOT_FEATURE_PS_TIME(...)
-#define CONFIG_FEATURE_PS_ADDITIONAL_COLUMNS 1
-#define ENABLE_FEATURE_PS_ADDITIONAL_COLUMNS 1
-#define IF_FEATURE_PS_ADDITIONAL_COLUMNS(...) __VA_ARGS__
-#define IF_NOT_FEATURE_PS_ADDITIONAL_COLUMNS(...)
-#undef CONFIG_FEATURE_PS_UNUSUAL_SYSTEMS
-#define ENABLE_FEATURE_PS_UNUSUAL_SYSTEMS 0
-#define IF_FEATURE_PS_UNUSUAL_SYSTEMS(...)
-#define IF_NOT_FEATURE_PS_UNUSUAL_SYSTEMS(...) __VA_ARGS__
-#define CONFIG_RENICE 1
-#define ENABLE_RENICE 1
-#define IF_RENICE(...) __VA_ARGS__
-#define IF_NOT_RENICE(...)
-#define CONFIG_BB_SYSCTL 1
-#define ENABLE_BB_SYSCTL 1
-#define IF_BB_SYSCTL(...) __VA_ARGS__
-#define IF_NOT_BB_SYSCTL(...)
-#define CONFIG_FEATURE_SHOW_THREADS 1
-#define ENABLE_FEATURE_SHOW_THREADS 1
-#define IF_FEATURE_SHOW_THREADS(...) __VA_ARGS__
-#define IF_NOT_FEATURE_SHOW_THREADS(...)
-#define CONFIG_WATCH 1
-#define ENABLE_WATCH 1
-#define IF_WATCH(...) __VA_ARGS__
-#define IF_NOT_WATCH(...)
-
-/*
- * Runit Utilities
- */
-#undef CONFIG_RUNSV
-#define ENABLE_RUNSV 0
-#define IF_RUNSV(...)
-#define IF_NOT_RUNSV(...) __VA_ARGS__
-#undef CONFIG_RUNSVDIR
-#define ENABLE_RUNSVDIR 0
-#define IF_RUNSVDIR(...)
-#define IF_NOT_RUNSVDIR(...) __VA_ARGS__
-#undef CONFIG_FEATURE_RUNSVDIR_LOG
-#define ENABLE_FEATURE_RUNSVDIR_LOG 0
-#define IF_FEATURE_RUNSVDIR_LOG(...)
-#define IF_NOT_FEATURE_RUNSVDIR_LOG(...) __VA_ARGS__
-#undef CONFIG_SV
-#define ENABLE_SV 0
-#define IF_SV(...)
-#define IF_NOT_SV(...) __VA_ARGS__
-#define CONFIG_SV_DEFAULT_SERVICE_DIR ""
-#define ENABLE_SV_DEFAULT_SERVICE_DIR 1
-#define IF_SV_DEFAULT_SERVICE_DIR(...) __VA_ARGS__
-#define IF_NOT_SV_DEFAULT_SERVICE_DIR(...)
-#undef CONFIG_SVLOGD
-#define ENABLE_SVLOGD 0
-#define IF_SVLOGD(...)
-#define IF_NOT_SVLOGD(...) __VA_ARGS__
-#undef CONFIG_CHPST
-#define ENABLE_CHPST 0
-#define IF_CHPST(...)
-#define IF_NOT_CHPST(...) __VA_ARGS__
-#undef CONFIG_SETUIDGID
-#define ENABLE_SETUIDGID 0
-#define IF_SETUIDGID(...)
-#define IF_NOT_SETUIDGID(...) __VA_ARGS__
-#undef CONFIG_ENVUIDGID
-#define ENABLE_ENVUIDGID 0
-#define IF_ENVUIDGID(...)
-#define IF_NOT_ENVUIDGID(...) __VA_ARGS__
-#undef CONFIG_ENVDIR
-#define ENABLE_ENVDIR 0
-#define IF_ENVDIR(...)
-#define IF_NOT_ENVDIR(...) __VA_ARGS__
-#undef CONFIG_SOFTLIMIT
-#define ENABLE_SOFTLIMIT 0
-#define IF_SOFTLIMIT(...)
-#define IF_NOT_SOFTLIMIT(...) __VA_ARGS__
-#undef CONFIG_CHCON
-#define ENABLE_CHCON 0
-#define IF_CHCON(...)
-#define IF_NOT_CHCON(...) __VA_ARGS__
-#undef CONFIG_FEATURE_CHCON_LONG_OPTIONS
-#define ENABLE_FEATURE_CHCON_LONG_OPTIONS 0
-#define IF_FEATURE_CHCON_LONG_OPTIONS(...)
-#define IF_NOT_FEATURE_CHCON_LONG_OPTIONS(...) __VA_ARGS__
-#undef CONFIG_GETENFORCE
-#define ENABLE_GETENFORCE 0
-#define IF_GETENFORCE(...)
-#define IF_NOT_GETENFORCE(...) __VA_ARGS__
-#undef CONFIG_GETSEBOOL
-#define ENABLE_GETSEBOOL 0
-#define IF_GETSEBOOL(...)
-#define IF_NOT_GETSEBOOL(...) __VA_ARGS__
-#undef CONFIG_LOAD_POLICY
-#define ENABLE_LOAD_POLICY 0
-#define IF_LOAD_POLICY(...)
-#define IF_NOT_LOAD_POLICY(...) __VA_ARGS__
-#undef CONFIG_MATCHPATHCON
-#define ENABLE_MATCHPATHCON 0
-#define IF_MATCHPATHCON(...)
-#define IF_NOT_MATCHPATHCON(...) __VA_ARGS__
-#undef CONFIG_RESTORECON
-#define ENABLE_RESTORECON 0
-#define IF_RESTORECON(...)
-#define IF_NOT_RESTORECON(...) __VA_ARGS__
-#undef CONFIG_RUNCON
-#define ENABLE_RUNCON 0
-#define IF_RUNCON(...)
-#define IF_NOT_RUNCON(...) __VA_ARGS__
-#undef CONFIG_FEATURE_RUNCON_LONG_OPTIONS
-#define ENABLE_FEATURE_RUNCON_LONG_OPTIONS 0
-#define IF_FEATURE_RUNCON_LONG_OPTIONS(...)
-#define IF_NOT_FEATURE_RUNCON_LONG_OPTIONS(...) __VA_ARGS__
-#undef CONFIG_SELINUXENABLED
-#define ENABLE_SELINUXENABLED 0
-#define IF_SELINUXENABLED(...)
-#define IF_NOT_SELINUXENABLED(...) __VA_ARGS__
-#undef CONFIG_SETENFORCE
-#define ENABLE_SETENFORCE 0
-#define IF_SETENFORCE(...)
-#define IF_NOT_SETENFORCE(...) __VA_ARGS__
-#undef CONFIG_SETFILES
-#define ENABLE_SETFILES 0
-#define IF_SETFILES(...)
-#define IF_NOT_SETFILES(...) __VA_ARGS__
-#undef CONFIG_FEATURE_SETFILES_CHECK_OPTION
-#define ENABLE_FEATURE_SETFILES_CHECK_OPTION 0
-#define IF_FEATURE_SETFILES_CHECK_OPTION(...)
-#define IF_NOT_FEATURE_SETFILES_CHECK_OPTION(...) __VA_ARGS__
-#undef CONFIG_SETSEBOOL
-#define ENABLE_SETSEBOOL 0
-#define IF_SETSEBOOL(...)
-#define IF_NOT_SETSEBOOL(...) __VA_ARGS__
-#undef CONFIG_SESTATUS
-#define ENABLE_SESTATUS 0
-#define IF_SESTATUS(...)
-#define IF_NOT_SESTATUS(...) __VA_ARGS__
-
-/*
- * Shells
- */
-#define CONFIG_ASH 1
-#define ENABLE_ASH 1
-#define IF_ASH(...) __VA_ARGS__
-#define IF_NOT_ASH(...)
-#define CONFIG_ASH_BASH_COMPAT 1
-#define ENABLE_ASH_BASH_COMPAT 1
-#define IF_ASH_BASH_COMPAT(...) __VA_ARGS__
-#define IF_NOT_ASH_BASH_COMPAT(...)
-#undef CONFIG_ASH_IDLE_TIMEOUT
-#define ENABLE_ASH_IDLE_TIMEOUT 0
-#define IF_ASH_IDLE_TIMEOUT(...)
-#define IF_NOT_ASH_IDLE_TIMEOUT(...) __VA_ARGS__
-#define CONFIG_ASH_JOB_CONTROL 1
-#define ENABLE_ASH_JOB_CONTROL 1
-#define IF_ASH_JOB_CONTROL(...) __VA_ARGS__
-#define IF_NOT_ASH_JOB_CONTROL(...)
-#define CONFIG_ASH_ALIAS 1
-#define ENABLE_ASH_ALIAS 1
-#define IF_ASH_ALIAS(...) __VA_ARGS__
-#define IF_NOT_ASH_ALIAS(...)
-#undef CONFIG_ASH_GETOPTS
-#define ENABLE_ASH_GETOPTS 0
-#define IF_ASH_GETOPTS(...)
-#define IF_NOT_ASH_GETOPTS(...) __VA_ARGS__
-#define CONFIG_ASH_BUILTIN_ECHO 1
-#define ENABLE_ASH_BUILTIN_ECHO 1
-#define IF_ASH_BUILTIN_ECHO(...) __VA_ARGS__
-#define IF_NOT_ASH_BUILTIN_ECHO(...)
-#define CONFIG_ASH_BUILTIN_PRINTF 1
-#define ENABLE_ASH_BUILTIN_PRINTF 1
-#define IF_ASH_BUILTIN_PRINTF(...) __VA_ARGS__
-#define IF_NOT_ASH_BUILTIN_PRINTF(...)
-#define CONFIG_ASH_BUILTIN_TEST 1
-#define ENABLE_ASH_BUILTIN_TEST 1
-#define IF_ASH_BUILTIN_TEST(...) __VA_ARGS__
-#define IF_NOT_ASH_BUILTIN_TEST(...)
-#define CONFIG_ASH_CMDCMD 1
-#define ENABLE_ASH_CMDCMD 1
-#define IF_ASH_CMDCMD(...) __VA_ARGS__
-#define IF_NOT_ASH_CMDCMD(...)
-#undef CONFIG_ASH_MAIL
-#define ENABLE_ASH_MAIL 0
-#define IF_ASH_MAIL(...)
-#define IF_NOT_ASH_MAIL(...) __VA_ARGS__
-#define CONFIG_ASH_OPTIMIZE_FOR_SIZE 1
-#define ENABLE_ASH_OPTIMIZE_FOR_SIZE 1
-#define IF_ASH_OPTIMIZE_FOR_SIZE(...) __VA_ARGS__
-#define IF_NOT_ASH_OPTIMIZE_FOR_SIZE(...)
-#define CONFIG_ASH_RANDOM_SUPPORT 1
-#define ENABLE_ASH_RANDOM_SUPPORT 1
-#define IF_ASH_RANDOM_SUPPORT(...) __VA_ARGS__
-#define IF_NOT_ASH_RANDOM_SUPPORT(...)
-#define CONFIG_ASH_EXPAND_PRMT 1
-#define ENABLE_ASH_EXPAND_PRMT 1
-#define IF_ASH_EXPAND_PRMT(...) __VA_ARGS__
-#define IF_NOT_ASH_EXPAND_PRMT(...)
-#undef CONFIG_CTTYHACK
-#define ENABLE_CTTYHACK 0
-#define IF_CTTYHACK(...)
-#define IF_NOT_CTTYHACK(...) __VA_ARGS__
-#undef CONFIG_HUSH
-#define ENABLE_HUSH 0
-#define IF_HUSH(...)
-#define IF_NOT_HUSH(...) __VA_ARGS__
-#undef CONFIG_HUSH_BASH_COMPAT
-#define ENABLE_HUSH_BASH_COMPAT 0
-#define IF_HUSH_BASH_COMPAT(...)
-#define IF_NOT_HUSH_BASH_COMPAT(...) __VA_ARGS__
-#undef CONFIG_HUSH_BRACE_EXPANSION
-#define ENABLE_HUSH_BRACE_EXPANSION 0
-#define IF_HUSH_BRACE_EXPANSION(...)
-#define IF_NOT_HUSH_BRACE_EXPANSION(...) __VA_ARGS__
-#undef CONFIG_HUSH_HELP
-#define ENABLE_HUSH_HELP 0
-#define IF_HUSH_HELP(...)
-#define IF_NOT_HUSH_HELP(...) __VA_ARGS__
-#undef CONFIG_HUSH_INTERACTIVE
-#define ENABLE_HUSH_INTERACTIVE 0
-#define IF_HUSH_INTERACTIVE(...)
-#define IF_NOT_HUSH_INTERACTIVE(...) __VA_ARGS__
-#undef CONFIG_HUSH_SAVEHISTORY
-#define ENABLE_HUSH_SAVEHISTORY 0
-#define IF_HUSH_SAVEHISTORY(...)
-#define IF_NOT_HUSH_SAVEHISTORY(...) __VA_ARGS__
-#undef CONFIG_HUSH_JOB
-#define ENABLE_HUSH_JOB 0
-#define IF_HUSH_JOB(...)
-#define IF_NOT_HUSH_JOB(...) __VA_ARGS__
-#undef CONFIG_HUSH_TICK
-#define ENABLE_HUSH_TICK 0
-#define IF_HUSH_TICK(...)
-#define IF_NOT_HUSH_TICK(...) __VA_ARGS__
-#undef CONFIG_HUSH_IF
-#define ENABLE_HUSH_IF 0
-#define IF_HUSH_IF(...)
-#define IF_NOT_HUSH_IF(...) __VA_ARGS__
-#undef CONFIG_HUSH_LOOPS
-#define ENABLE_HUSH_LOOPS 0
-#define IF_HUSH_LOOPS(...)
-#define IF_NOT_HUSH_LOOPS(...) __VA_ARGS__
-#undef CONFIG_HUSH_CASE
-#define ENABLE_HUSH_CASE 0
-#define IF_HUSH_CASE(...)
-#define IF_NOT_HUSH_CASE(...) __VA_ARGS__
-#undef CONFIG_HUSH_FUNCTIONS
-#define ENABLE_HUSH_FUNCTIONS 0
-#define IF_HUSH_FUNCTIONS(...)
-#define IF_NOT_HUSH_FUNCTIONS(...) __VA_ARGS__
-#undef CONFIG_HUSH_LOCAL
-#define ENABLE_HUSH_LOCAL 0
-#define IF_HUSH_LOCAL(...)
-#define IF_NOT_HUSH_LOCAL(...) __VA_ARGS__
-#undef CONFIG_HUSH_RANDOM_SUPPORT
-#define ENABLE_HUSH_RANDOM_SUPPORT 0
-#define IF_HUSH_RANDOM_SUPPORT(...)
-#define IF_NOT_HUSH_RANDOM_SUPPORT(...) __VA_ARGS__
-#undef CONFIG_HUSH_EXPORT_N
-#define ENABLE_HUSH_EXPORT_N 0
-#define IF_HUSH_EXPORT_N(...)
-#define IF_NOT_HUSH_EXPORT_N(...) __VA_ARGS__
-#undef CONFIG_HUSH_MODE_X
-#define ENABLE_HUSH_MODE_X 0
-#define IF_HUSH_MODE_X(...)
-#define IF_NOT_HUSH_MODE_X(...) __VA_ARGS__
-#undef CONFIG_MSH
-#define ENABLE_MSH 0
-#define IF_MSH(...)
-#define IF_NOT_MSH(...) __VA_ARGS__
-#define CONFIG_FEATURE_SH_IS_ASH 1
-#define ENABLE_FEATURE_SH_IS_ASH 1
-#define IF_FEATURE_SH_IS_ASH(...) __VA_ARGS__
-#define IF_NOT_FEATURE_SH_IS_ASH(...)
-#undef CONFIG_FEATURE_SH_IS_HUSH
-#define ENABLE_FEATURE_SH_IS_HUSH 0
-#define IF_FEATURE_SH_IS_HUSH(...)
-#define IF_NOT_FEATURE_SH_IS_HUSH(...) __VA_ARGS__
-#undef CONFIG_FEATURE_SH_IS_NONE
-#define ENABLE_FEATURE_SH_IS_NONE 0
-#define IF_FEATURE_SH_IS_NONE(...)
-#define IF_NOT_FEATURE_SH_IS_NONE(...) __VA_ARGS__
-#undef CONFIG_FEATURE_BASH_IS_ASH
-#define ENABLE_FEATURE_BASH_IS_ASH 0
-#define IF_FEATURE_BASH_IS_ASH(...)
-#define IF_NOT_FEATURE_BASH_IS_ASH(...) __VA_ARGS__
-#undef CONFIG_FEATURE_BASH_IS_HUSH
-#define ENABLE_FEATURE_BASH_IS_HUSH 0
-#define IF_FEATURE_BASH_IS_HUSH(...)
-#define IF_NOT_FEATURE_BASH_IS_HUSH(...) __VA_ARGS__
-#define CONFIG_FEATURE_BASH_IS_NONE 1
-#define ENABLE_FEATURE_BASH_IS_NONE 1
-#define IF_FEATURE_BASH_IS_NONE(...) __VA_ARGS__
-#define IF_NOT_FEATURE_BASH_IS_NONE(...)
-#define CONFIG_SH_MATH_SUPPORT 1
-#define ENABLE_SH_MATH_SUPPORT 1
-#define IF_SH_MATH_SUPPORT(...) __VA_ARGS__
-#define IF_NOT_SH_MATH_SUPPORT(...)
-#define CONFIG_SH_MATH_SUPPORT_64 1
-#define ENABLE_SH_MATH_SUPPORT_64 1
-#define IF_SH_MATH_SUPPORT_64(...) __VA_ARGS__
-#define IF_NOT_SH_MATH_SUPPORT_64(...)
-#define CONFIG_FEATURE_SH_EXTRA_QUIET 1
-#define ENABLE_FEATURE_SH_EXTRA_QUIET 1
-#define IF_FEATURE_SH_EXTRA_QUIET(...) __VA_ARGS__
-#define IF_NOT_FEATURE_SH_EXTRA_QUIET(...)
-#undef CONFIG_FEATURE_SH_STANDALONE
-#define ENABLE_FEATURE_SH_STANDALONE 0
-#define IF_FEATURE_SH_STANDALONE(...)
-#define IF_NOT_FEATURE_SH_STANDALONE(...) __VA_ARGS__
-#undef CONFIG_FEATURE_SH_NOFORK
-#define ENABLE_FEATURE_SH_NOFORK 0
-#define IF_FEATURE_SH_NOFORK(...)
-#define IF_NOT_FEATURE_SH_NOFORK(...) __VA_ARGS__
-#undef CONFIG_FEATURE_SH_HISTFILESIZE
-#define ENABLE_FEATURE_SH_HISTFILESIZE 0
-#define IF_FEATURE_SH_HISTFILESIZE(...)
-#define IF_NOT_FEATURE_SH_HISTFILESIZE(...) __VA_ARGS__
-
-/*
- * System Logging Utilities
- */
-#undef CONFIG_SYSLOGD
-#define ENABLE_SYSLOGD 0
-#define IF_SYSLOGD(...)
-#define IF_NOT_SYSLOGD(...) __VA_ARGS__
-#undef CONFIG_FEATURE_ROTATE_LOGFILE
-#define ENABLE_FEATURE_ROTATE_LOGFILE 0
-#define IF_FEATURE_ROTATE_LOGFILE(...)
-#define IF_NOT_FEATURE_ROTATE_LOGFILE(...) __VA_ARGS__
-#undef CONFIG_FEATURE_REMOTE_LOG
-#define ENABLE_FEATURE_REMOTE_LOG 0
-#define IF_FEATURE_REMOTE_LOG(...)
-#define IF_NOT_FEATURE_REMOTE_LOG(...) __VA_ARGS__
-#undef CONFIG_FEATURE_SYSLOGD_DUP
-#define ENABLE_FEATURE_SYSLOGD_DUP 0
-#define IF_FEATURE_SYSLOGD_DUP(...)
-#define IF_NOT_FEATURE_SYSLOGD_DUP(...) __VA_ARGS__
-#undef CONFIG_FEATURE_SYSLOGD_CFG
-#define ENABLE_FEATURE_SYSLOGD_CFG 0
-#define IF_FEATURE_SYSLOGD_CFG(...)
-#define IF_NOT_FEATURE_SYSLOGD_CFG(...) __VA_ARGS__
-#define CONFIG_FEATURE_SYSLOGD_READ_BUFFER_SIZE 0
-#define ENABLE_FEATURE_SYSLOGD_READ_BUFFER_SIZE 1
-#define IF_FEATURE_SYSLOGD_READ_BUFFER_SIZE(...) __VA_ARGS__
-#define IF_NOT_FEATURE_SYSLOGD_READ_BUFFER_SIZE(...)
-#undef CONFIG_FEATURE_IPC_SYSLOG
-#define ENABLE_FEATURE_IPC_SYSLOG 0
-#define IF_FEATURE_IPC_SYSLOG(...)
-#define IF_NOT_FEATURE_IPC_SYSLOG(...) __VA_ARGS__
-#define CONFIG_FEATURE_IPC_SYSLOG_BUFFER_SIZE 0
-#define ENABLE_FEATURE_IPC_SYSLOG_BUFFER_SIZE 1
-#define IF_FEATURE_IPC_SYSLOG_BUFFER_SIZE(...) __VA_ARGS__
-#define IF_NOT_FEATURE_IPC_SYSLOG_BUFFER_SIZE(...)
-#undef CONFIG_LOGREAD
-#define ENABLE_LOGREAD 0
-#define IF_LOGREAD(...)
-#define IF_NOT_LOGREAD(...) __VA_ARGS__
-#undef CONFIG_FEATURE_LOGREAD_REDUCED_LOCKING
-#define ENABLE_FEATURE_LOGREAD_REDUCED_LOCKING 0
-#define IF_FEATURE_LOGREAD_REDUCED_LOCKING(...)
-#define IF_NOT_FEATURE_LOGREAD_REDUCED_LOCKING(...) __VA_ARGS__
-#undef CONFIG_FEATURE_KMSG_SYSLOG
-#define ENABLE_FEATURE_KMSG_SYSLOG 0
-#define IF_FEATURE_KMSG_SYSLOG(...)
-#define IF_NOT_FEATURE_KMSG_SYSLOG(...) __VA_ARGS__
-#undef CONFIG_KLOGD
-#define ENABLE_KLOGD 0
-#define IF_KLOGD(...)
-#define IF_NOT_KLOGD(...) __VA_ARGS__
-#undef CONFIG_FEATURE_KLOGD_KLOGCTL
-#define ENABLE_FEATURE_KLOGD_KLOGCTL 0
-#define IF_FEATURE_KLOGD_KLOGCTL(...)
-#define IF_NOT_FEATURE_KLOGD_KLOGCTL(...) __VA_ARGS__
-#undef CONFIG_LOGGER
-#define ENABLE_LOGGER 0
-#define IF_LOGGER(...)
-#define IF_NOT_LOGGER(...) __VA_ARGS__
diff --git a/include-full/bbconfigopts.h b/include-full/bbconfigopts.h
deleted file mode 100644
index c3fe210..0000000
--- a/include-full/bbconfigopts.h
+++ b/dev/null
@@ -1,898 +0,0 @@
-#ifndef _BBCONFIGOPTS_H
-#define _BBCONFIGOPTS_H
-/*
- * busybox configuration settings.
- *
- * Licensed under GPLv2 or later, see file LICENSE in this source tree.
- *
- * This file is generated automatically by scripts/mkconfigs.
- * Do not edit.
- */
-static const char bbconfig_config[] ALIGN1 =
-"CONFIG_HAVE_DOT_CONFIG=y\n"
-"CONFIG_DESKTOP=y\n"
-"# CONFIG_EXTRA_COMPAT is not set\n"
-"# CONFIG_INCLUDE_SUSv2 is not set\n"
-"# CONFIG_USE_PORTABLE_CODE is not set\n"
-"CONFIG_PLATFORM_LINUX=y\n"
-"CONFIG_FEATURE_BUFFERS_USE_MALLOC=y\n"
-"# CONFIG_FEATURE_BUFFERS_GO_ON_STACK is not set\n"
-"# CONFIG_FEATURE_BUFFERS_GO_IN_BSS is not set\n"
-"CONFIG_SHOW_USAGE=y\n"
-"CONFIG_FEATURE_VERBOSE_USAGE=y\n"
-"CONFIG_FEATURE_COMPRESS_USAGE=y\n"
-"# CONFIG_FEATURE_INSTALLER is not set\n"
-"CONFIG_INSTALL_NO_USR=y\n"
-"# CONFIG_LOCALE_SUPPORT is not set\n"
-"CONFIG_UNICODE_SUPPORT=y\n"
-"# CONFIG_UNICODE_USING_LOCALE is not set\n"
-"# CONFIG_FEATURE_CHECK_UNICODE_IN_ENV is not set\n"
-"CONFIG_SUBST_WCHAR=63\n"
-"CONFIG_LAST_SUPPORTED_WCHAR=0\n"
-"# CONFIG_UNICODE_COMBINING_WCHARS is not set\n"
-"CONFIG_UNICODE_WIDE_WCHARS=y\n"
-"# CONFIG_UNICODE_BIDI_SUPPORT is not set\n"
-"# CONFIG_UNICODE_NEUTRAL_TABLE is not set\n"
-"CONFIG_UNICODE_PRESERVE_BROKEN=y\n"
-"CONFIG_LONG_OPTS=y\n"
-"CONFIG_FEATURE_DEVPTS=y\n"
-"# CONFIG_FEATURE_CLEAN_UP is not set\n"
-"# CONFIG_FEATURE_UTMP is not set\n"
-"# CONFIG_FEATURE_WTMP is not set\n"
-"# CONFIG_FEATURE_PIDFILE is not set\n"
-"CONFIG_PID_FILE_PATH=\"\"\n"
-"CONFIG_FEATURE_SUID=y\n"
-"# CONFIG_FEATURE_SUID_CONFIG is not set\n"
-"# CONFIG_FEATURE_SUID_CONFIG_QUIET is not set\n"
-"# CONFIG_SELINUX is not set\n"
-"# CONFIG_FEATURE_PREFER_APPLETS is not set\n"
-"CONFIG_BUSYBOX_EXEC_PATH=\"/proc/self/exe\"\n"
-"CONFIG_FEATURE_SYSLOG=y\n"
-"CONFIG_FEATURE_HAVE_RPC=y\n"
-"# CONFIG_STATIC is not set\n"
-"# CONFIG_PIE is not set\n"
-"# CONFIG_NOMMU is not set\n"
-"# CONFIG_BUILD_LIBBUSYBOX is not set\n"
-"# CONFIG_FEATURE_INDIVIDUAL is not set\n"
-"# CONFIG_FEATURE_SHARED_BUSYBOX is not set\n"
-"CONFIG_LFS=y\n"
-"CONFIG_CROSS_COMPILER_PREFIX=\"arm-eabi-\"\n"
-"CONFIG_SYSROOT=\"\"\n"
-"CONFIG_EXTRA_CFLAGS=\"-Os -fno-short-enums -fgcse-after-reload -frerun-cse-after-loop -frename-registers\"\n"
-"CONFIG_EXTRA_LDFLAGS=\"\"\n"
-"CONFIG_EXTRA_LDLIBS=\"\"\n"
-"# CONFIG_DEBUG is not set\n"
-"# CONFIG_DEBUG_PESSIMIZE is not set\n"
-"# CONFIG_WERROR is not set\n"
-"CONFIG_NO_DEBUG_LIB=y\n"
-"# CONFIG_DMALLOC is not set\n"
-"# CONFIG_EFENCE is not set\n"
-"CONFIG_INSTALL_APPLET_SYMLINKS=y\n"
-"# CONFIG_INSTALL_APPLET_HARDLINKS is not set\n"
-"# CONFIG_INSTALL_APPLET_SCRIPT_WRAPPERS is not set\n"
-"# CONFIG_INSTALL_APPLET_DONT is not set\n"
-"# CONFIG_INSTALL_SH_APPLET_SYMLINK is not set\n"
-"# CONFIG_INSTALL_SH_APPLET_HARDLINK is not set\n"
-"# CONFIG_INSTALL_SH_APPLET_SCRIPT_WRAPPER is not set\n"
-"CONFIG_PREFIX=\"./_install\"\n"
-"# CONFIG_FEATURE_SYSTEMD is not set\n"
-"CONFIG_FEATURE_RTMINMAX=y\n"
-"CONFIG_PASSWORD_MINLEN=6\n"
-"CONFIG_MD5_SMALL=1\n"
-"CONFIG_SHA3_SMALL=1\n"
-"CONFIG_FEATURE_FAST_TOP=y\n"
-"# CONFIG_FEATURE_ETC_NETWORKS is not set\n"
-"CONFIG_FEATURE_USE_TERMIOS=y\n"
-"CONFIG_FEATURE_EDITING=y\n"
-"CONFIG_FEATURE_EDITING_MAX_LEN=1024\n"
-"CONFIG_FEATURE_EDITING_VI=y\n"
-"CONFIG_FEATURE_EDITING_HISTORY=256\n"
-"CONFIG_FEATURE_EDITING_SAVEHISTORY=y\n"
-"# CONFIG_FEATURE_EDITING_SAVE_ON_EXIT is not set\n"
-"CONFIG_FEATURE_REVERSE_SEARCH=y\n"
-"CONFIG_FEATURE_TAB_COMPLETION=y\n"
-"# CONFIG_FEATURE_USERNAME_COMPLETION is not set\n"
-"CONFIG_FEATURE_EDITING_FANCY_PROMPT=y\n"
-"CONFIG_FEATURE_EDITING_ASK_TERMINAL=y\n"
-"CONFIG_FEATURE_NON_POSIX_CP=y\n"
-"# CONFIG_FEATURE_VERBOSE_CP_MESSAGE is not set\n"
-"CONFIG_FEATURE_COPYBUF_KB=4\n"
-"CONFIG_FEATURE_SKIP_ROOTFS=y\n"
-"CONFIG_MONOTONIC_SYSCALL=y\n"
-"CONFIG_IOCTL_HEX2STR_ERROR=y\n"
-"# CONFIG_FEATURE_HWIB is not set\n"
-"CONFIG_FEATURE_SEAMLESS_XZ=y\n"
-"CONFIG_FEATURE_SEAMLESS_LZMA=y\n"
-"CONFIG_FEATURE_SEAMLESS_BZ2=y\n"
-"CONFIG_FEATURE_SEAMLESS_GZ=y\n"
-"# CONFIG_FEATURE_SEAMLESS_Z is not set\n"
-"# CONFIG_AR is not set\n"
-"# CONFIG_FEATURE_AR_LONG_FILENAMES is not set\n"
-"# CONFIG_FEATURE_AR_CREATE is not set\n"
-"CONFIG_BUNZIP2=y\n"
-"CONFIG_BZIP2=y\n"
-"CONFIG_CPIO=y\n"
-"CONFIG_FEATURE_CPIO_O=y\n"
-"CONFIG_FEATURE_CPIO_P=y\n"
-"# CONFIG_DPKG is not set\n"
-"# CONFIG_DPKG_DEB is not set\n"
-"# CONFIG_FEATURE_DPKG_DEB_EXTRACT_ONLY is not set\n"
-"CONFIG_GUNZIP=y\n"
-"CONFIG_GZIP=y\n"
-"CONFIG_FEATURE_GZIP_LONG_OPTIONS=y\n"
-"CONFIG_GZIP_FAST=2\n"
-"CONFIG_LZOP=y\n"
-"# CONFIG_LZOP_COMPR_HIGH is not set\n"
-"# CONFIG_RPM2CPIO is not set\n"
-"# CONFIG_RPM is not set\n"
-"CONFIG_TAR=y\n"
-"CONFIG_FEATURE_TAR_CREATE=y\n"
-"CONFIG_FEATURE_TAR_AUTODETECT=y\n"
-"CONFIG_FEATURE_TAR_FROM=y\n"
-"# CONFIG_FEATURE_TAR_OLDGNU_COMPATIBILITY is not set\n"
-"# CONFIG_FEATURE_TAR_OLDSUN_COMPATIBILITY is not set\n"
-"CONFIG_FEATURE_TAR_GNU_EXTENSIONS=y\n"
-"CONFIG_FEATURE_TAR_LONG_OPTIONS=y\n"
-"CONFIG_FEATURE_TAR_TO_COMMAND=y\n"
-"CONFIG_FEATURE_TAR_UNAME_GNAME=y\n"
-"CONFIG_FEATURE_TAR_NOPRESERVE_TIME=y\n"
-"# CONFIG_FEATURE_TAR_SELINUX is not set\n"
-"CONFIG_UNCOMPRESS=y\n"
-"CONFIG_UNLZMA=y\n"
-"CONFIG_FEATURE_LZMA_FAST=y\n"
-"CONFIG_LZMA=y\n"
-"CONFIG_UNXZ=y\n"
-"CONFIG_XZ=y\n"
-"CONFIG_UNZIP=y\n"
-"CONFIG_BASENAME=y\n"
-"CONFIG_CAT=y\n"
-"CONFIG_DATE=y\n"
-"CONFIG_FEATURE_DATE_ISOFMT=y\n"
-"# CONFIG_FEATURE_DATE_NANO is not set\n"
-"CONFIG_FEATURE_DATE_COMPAT=y\n"
-"# CONFIG_HOSTID is not set\n"
-"CONFIG_ID=y\n"
-"CONFIG_GROUPS=y\n"
-"CONFIG_TEST=y\n"
-"# CONFIG_FEATURE_TEST_64 is not set\n"
-"CONFIG_TOUCH=y\n"
-"CONFIG_FEATURE_TOUCH_SUSV3=y\n"
-"CONFIG_TR=y\n"
-"CONFIG_FEATURE_TR_CLASSES=y\n"
-"# CONFIG_FEATURE_TR_EQUIV is not set\n"
-"CONFIG_BASE64=y\n"
-"# CONFIG_WHO is not set\n"
-"# CONFIG_USERS is not set\n"
-"CONFIG_CAL=y\n"
-"CONFIG_CATV=y\n"
-"CONFIG_CHGRP=y\n"
-"CONFIG_CHMOD=y\n"
-"CONFIG_CHOWN=y\n"
-"CONFIG_FEATURE_CHOWN_LONG_OPTIONS=y\n"
-"CONFIG_CHROOT=y\n"
-"# CONFIG_CKSUM is not set\n"
-"CONFIG_COMM=y\n"
-"CONFIG_CP=y\n"
-"CONFIG_FEATURE_CP_LONG_OPTIONS=y\n"
-"CONFIG_CUT=y\n"
-"CONFIG_DD=y\n"
-"CONFIG_FEATURE_DD_SIGNAL_HANDLING=y\n"
-"CONFIG_FEATURE_DD_THIRD_STATUS_LINE=y\n"
-"CONFIG_FEATURE_DD_IBS_OBS=y\n"
-"CONFIG_DF=y\n"
-"CONFIG_FEATURE_DF_FANCY=y\n"
-"CONFIG_DIRNAME=y\n"
-"CONFIG_DOS2UNIX=y\n"
-"CONFIG_UNIX2DOS=y\n"
-"CONFIG_DU=y\n"
-"CONFIG_FEATURE_DU_DEFAULT_BLOCKSIZE_1K=y\n"
-"CONFIG_ECHO=y\n"
-"CONFIG_FEATURE_FANCY_ECHO=y\n"
-"CONFIG_ENV=y\n"
-"CONFIG_FEATURE_ENV_LONG_OPTIONS=y\n"
-"CONFIG_EXPAND=y\n"
-"CONFIG_FEATURE_EXPAND_LONG_OPTIONS=y\n"
-"CONFIG_EXPR=y\n"
-"CONFIG_EXPR_MATH_SUPPORT_64=y\n"
-"CONFIG_FALSE=y\n"
-"CONFIG_FOLD=y\n"
-"CONFIG_FSYNC=y\n"
-"CONFIG_HEAD=y\n"
-"CONFIG_FEATURE_FANCY_HEAD=y\n"
-"CONFIG_INSTALL=y\n"
-"CONFIG_FEATURE_INSTALL_LONG_OPTIONS=y\n"
-"CONFIG_LN=y\n"
-"# CONFIG_LOGNAME is not set\n"
-"CONFIG_LS=y\n"
-"CONFIG_FEATURE_LS_FILETYPES=y\n"
-"CONFIG_FEATURE_LS_FOLLOWLINKS=y\n"
-"CONFIG_FEATURE_LS_RECURSIVE=y\n"
-"CONFIG_FEATURE_LS_SORTFILES=y\n"
-"CONFIG_FEATURE_LS_TIMESTAMPS=y\n"
-"CONFIG_FEATURE_LS_USERNAME=y\n"
-"CONFIG_FEATURE_LS_COLOR=y\n"
-"# CONFIG_FEATURE_LS_COLOR_IS_DEFAULT is not set\n"
-"CONFIG_MD5SUM=y\n"
-"CONFIG_MKDIR=y\n"
-"CONFIG_FEATURE_MKDIR_LONG_OPTIONS=y\n"
-"CONFIG_MKFIFO=y\n"
-"CONFIG_MKNOD=y\n"
-"CONFIG_MV=y\n"
-"CONFIG_FEATURE_MV_LONG_OPTIONS=y\n"
-"CONFIG_NICE=y\n"
-"CONFIG_NOHUP=y\n"
-"CONFIG_OD=y\n"
-"CONFIG_PRINTENV=y\n"
-"CONFIG_PRINTF=y\n"
-"CONFIG_PWD=y\n"
-"CONFIG_READLINK=y\n"
-"CONFIG_FEATURE_READLINK_FOLLOW=y\n"
-"CONFIG_REALPATH=y\n"
-"CONFIG_RM=y\n"
-"CONFIG_RMDIR=y\n"
-"CONFIG_FEATURE_RMDIR_LONG_OPTIONS=y\n"
-"CONFIG_SEQ=y\n"
-"CONFIG_SHA1SUM=y\n"
-"CONFIG_SHA256SUM=y\n"
-"CONFIG_SHA512SUM=y\n"
-"CONFIG_SHA3SUM=y\n"
-"CONFIG_SLEEP=y\n"
-"CONFIG_FEATURE_FANCY_SLEEP=y\n"
-"CONFIG_FEATURE_FLOAT_SLEEP=y\n"
-"CONFIG_SORT=y\n"
-"CONFIG_FEATURE_SORT_BIG=y\n"
-"CONFIG_SPLIT=y\n"
-"CONFIG_FEATURE_SPLIT_FANCY=y\n"
-"CONFIG_STAT=y\n"
-"# CONFIG_FEATURE_STAT_FORMAT is not set\n"
-"CONFIG_STTY=y\n"
-"CONFIG_SUM=y\n"
-"CONFIG_SYNC=y\n"
-"CONFIG_TAC=y\n"
-"CONFIG_TAIL=y\n"
-"CONFIG_FEATURE_FANCY_TAIL=y\n"
-"CONFIG_TEE=y\n"
-"CONFIG_FEATURE_TEE_USE_BLOCK_IO=y\n"
-"CONFIG_TRUE=y\n"
-"# CONFIG_TTY is not set\n"
-"CONFIG_UNAME=y\n"
-"CONFIG_UNEXPAND=y\n"
-"CONFIG_FEATURE_UNEXPAND_LONG_OPTIONS=y\n"
-"CONFIG_UNIQ=y\n"
-"CONFIG_USLEEP=y\n"
-"CONFIG_UUDECODE=y\n"
-"CONFIG_UUENCODE=y\n"
-"CONFIG_WC=y\n"
-"# CONFIG_FEATURE_WC_LARGE is not set\n"
-"CONFIG_WHOAMI=y\n"
-"CONFIG_YES=y\n"
-"CONFIG_FEATURE_PRESERVE_HARDLINKS=y\n"
-"CONFIG_FEATURE_AUTOWIDTH=y\n"
-"CONFIG_FEATURE_HUMAN_READABLE=y\n"
-"CONFIG_FEATURE_MD5_SHA1_SUM_CHECK=y\n"
-"# CONFIG_CHVT is not set\n"
-"# CONFIG_FGCONSOLE is not set\n"
-"CONFIG_CLEAR=y\n"
-"# CONFIG_DEALLOCVT is not set\n"
-"# CONFIG_DUMPKMAP is not set\n"
-"# CONFIG_KBD_MODE is not set\n"
-"# CONFIG_LOADFONT is not set\n"
-"# CONFIG_LOADKMAP is not set\n"
-"# CONFIG_OPENVT is not set\n"
-"CONFIG_RESET=y\n"
-"CONFIG_RESIZE=y\n"
-"# CONFIG_FEATURE_RESIZE_PRINT is not set\n"
-"CONFIG_SETCONSOLE=y\n"
-"# CONFIG_FEATURE_SETCONSOLE_LONG_OPTIONS is not set\n"
-"# CONFIG_SETFONT is not set\n"
-"# CONFIG_FEATURE_SETFONT_TEXTUAL_MAP is not set\n"
-"CONFIG_DEFAULT_SETFONT_DIR=\"\"\n"
-"# CONFIG_SETKEYCODES is not set\n"
-"# CONFIG_SETLOGCONS is not set\n"
-"# CONFIG_SHOWKEY is not set\n"
-"# CONFIG_FEATURE_LOADFONT_PSF2 is not set\n"
-"# CONFIG_FEATURE_LOADFONT_RAW is not set\n"
-"CONFIG_MKTEMP=y\n"
-"CONFIG_PIPE_PROGRESS=y\n"
-"CONFIG_RUN_PARTS=y\n"
-"CONFIG_FEATURE_RUN_PARTS_LONG_OPTIONS=y\n"
-"CONFIG_FEATURE_RUN_PARTS_FANCY=y\n"
-"# CONFIG_START_STOP_DAEMON is not set\n"
-"# CONFIG_FEATURE_START_STOP_DAEMON_FANCY is not set\n"
-"# CONFIG_FEATURE_START_STOP_DAEMON_LONG_OPTIONS is not set\n"
-"CONFIG_WHICH=y\n"
-"CONFIG_PATCH=y\n"
-"CONFIG_VI=y\n"
-"CONFIG_FEATURE_VI_MAX_LEN=256\n"
-"CONFIG_FEATURE_VI_8BIT=y\n"
-"CONFIG_FEATURE_VI_COLON=y\n"
-"CONFIG_FEATURE_VI_YANKMARK=y\n"
-"CONFIG_FEATURE_VI_SEARCH=y\n"
-"CONFIG_FEATURE_VI_REGEX_SEARCH=y\n"
-"CONFIG_FEATURE_VI_USE_SIGNALS=y\n"
-"CONFIG_FEATURE_VI_DOT_CMD=y\n"
-"CONFIG_FEATURE_VI_READONLY=y\n"
-"CONFIG_FEATURE_VI_SETOPTS=y\n"
-"CONFIG_FEATURE_VI_SET=y\n"
-"CONFIG_FEATURE_VI_WIN_RESIZE=y\n"
-"CONFIG_FEATURE_VI_ASK_TERMINAL=y\n"
-"CONFIG_AWK=y\n"
-"CONFIG_FEATURE_AWK_LIBM=y\n"
-"CONFIG_CMP=y\n"
-"CONFIG_DIFF=y\n"
-"CONFIG_FEATURE_DIFF_LONG_OPTIONS=y\n"
-"CONFIG_FEATURE_DIFF_DIR=y\n"
-"CONFIG_ED=y\n"
-"CONFIG_SED=y\n"
-"CONFIG_FEATURE_ALLOW_EXEC=y\n"
-"CONFIG_FIND=y\n"
-"CONFIG_FEATURE_FIND_PRINT0=y\n"
-"CONFIG_FEATURE_FIND_MTIME=y\n"
-"CONFIG_FEATURE_FIND_MMIN=y\n"
-"CONFIG_FEATURE_FIND_PERM=y\n"
-"CONFIG_FEATURE_FIND_TYPE=y\n"
-"CONFIG_FEATURE_FIND_XDEV=y\n"
-"CONFIG_FEATURE_FIND_MAXDEPTH=y\n"
-"CONFIG_FEATURE_FIND_NEWER=y\n"
-"# CONFIG_FEATURE_FIND_INUM is not set\n"
-"CONFIG_FEATURE_FIND_EXEC=y\n"
-"CONFIG_FEATURE_FIND_USER=y\n"
-"CONFIG_FEATURE_FIND_GROUP=y\n"
-"CONFIG_FEATURE_FIND_NOT=y\n"
-"CONFIG_FEATURE_FIND_DEPTH=y\n"
-"CONFIG_FEATURE_FIND_PAREN=y\n"
-"CONFIG_FEATURE_FIND_SIZE=y\n"
-"CONFIG_FEATURE_FIND_PRUNE=y\n"
-"# CONFIG_FEATURE_FIND_DELETE is not set\n"
-"CONFIG_FEATURE_FIND_PATH=y\n"
-"CONFIG_FEATURE_FIND_REGEX=y\n"
-"# CONFIG_FEATURE_FIND_CONTEXT is not set\n"
-"CONFIG_FEATURE_FIND_LINKS=y\n"
-"CONFIG_GREP=y\n"
-"CONFIG_FEATURE_GREP_EGREP_ALIAS=y\n"
-"CONFIG_FEATURE_GREP_FGREP_ALIAS=y\n"
-"CONFIG_FEATURE_GREP_CONTEXT=y\n"
-"CONFIG_XARGS=y\n"
-"CONFIG_FEATURE_XARGS_SUPPORT_CONFIRMATION=y\n"
-"CONFIG_FEATURE_XARGS_SUPPORT_QUOTES=y\n"
-"CONFIG_FEATURE_XARGS_SUPPORT_TERMOPT=y\n"
-"CONFIG_FEATURE_XARGS_SUPPORT_ZERO_TERM=y\n"
-"# CONFIG_BOOTCHARTD is not set\n"
-"# CONFIG_FEATURE_BOOTCHARTD_BLOATED_HEADER is not set\n"
-"# CONFIG_FEATURE_BOOTCHARTD_CONFIG_FILE is not set\n"
-"CONFIG_HALT=y\n"
-"# CONFIG_FEATURE_CALL_TELINIT is not set\n"
-"CONFIG_TELINIT_PATH=\"\"\n"
-"# CONFIG_INIT is not set\n"
-"# CONFIG_FEATURE_USE_INITTAB is not set\n"
-"# CONFIG_FEATURE_KILL_REMOVED is not set\n"
-"CONFIG_FEATURE_KILL_DELAY=0\n"
-"# CONFIG_FEATURE_INIT_SCTTY is not set\n"
-"# CONFIG_FEATURE_INIT_SYSLOG is not set\n"
-"# CONFIG_FEATURE_EXTRA_QUIET is not set\n"
-"# CONFIG_FEATURE_INIT_COREDUMPS is not set\n"
-"# CONFIG_FEATURE_INITRD is not set\n"
-"CONFIG_INIT_TERMINAL_TYPE=\"\"\n"
-"CONFIG_MESG=y\n"
-"CONFIG_FEATURE_MESG_ENABLE_ONLY_GROUP=y\n"
-"# CONFIG_ADD_SHELL is not set\n"
-"# CONFIG_REMOVE_SHELL is not set\n"
-"# CONFIG_FEATURE_SHADOWPASSWDS is not set\n"
-"# CONFIG_USE_BB_PWD_GRP is not set\n"
-"# CONFIG_USE_BB_SHADOW is not set\n"
-"CONFIG_USE_BB_CRYPT=y\n"
-"# CONFIG_USE_BB_CRYPT_SHA is not set\n"
-"# CONFIG_ADDUSER is not set\n"
-"# CONFIG_FEATURE_ADDUSER_LONG_OPTIONS is not set\n"
-"# CONFIG_FEATURE_CHECK_NAMES is not set\n"
-"CONFIG_FIRST_SYSTEM_ID=0\n"
-"CONFIG_LAST_SYSTEM_ID=0\n"
-"# CONFIG_ADDGROUP is not set\n"
-"# CONFIG_FEATURE_ADDGROUP_LONG_OPTIONS is not set\n"
-"# CONFIG_FEATURE_ADDUSER_TO_GROUP is not set\n"
-"# CONFIG_DELUSER is not set\n"
-"# CONFIG_DELGROUP is not set\n"
-"# CONFIG_FEATURE_DEL_USER_FROM_GROUP is not set\n"
-"# CONFIG_GETTY is not set\n"
-"# CONFIG_LOGIN is not set\n"
-"# CONFIG_LOGIN_SESSION_AS_CHILD is not set\n"
-"# CONFIG_PAM is not set\n"
-"# CONFIG_LOGIN_SCRIPTS is not set\n"
-"# CONFIG_FEATURE_NOLOGIN is not set\n"
-"# CONFIG_FEATURE_SECURETTY is not set\n"
-"# CONFIG_PASSWD is not set\n"
-"# CONFIG_FEATURE_PASSWD_WEAK_CHECK is not set\n"
-"# CONFIG_CRYPTPW is not set\n"
-"# CONFIG_CHPASSWD is not set\n"
-"CONFIG_FEATURE_DEFAULT_PASSWD_ALGO=\"\"\n"
-"# CONFIG_SU is not set\n"
-"# CONFIG_FEATURE_SU_SYSLOG is not set\n"
-"# CONFIG_FEATURE_SU_CHECKS_SHELLS is not set\n"
-"# CONFIG_SULOGIN is not set\n"
-"# CONFIG_VLOCK is not set\n"
-"CONFIG_CHATTR=y\n"
-"# CONFIG_FSCK is not set\n"
-"CONFIG_LSATTR=y\n"
-"CONFIG_TUNE2FS=y\n"
-"CONFIG_MODINFO=y\n"
-"# CONFIG_MODPROBE_SMALL is not set\n"
-"CONFIG_FEATURE_MODPROBE_SMALL_OPTIONS_ON_CMDLINE=y\n"
-"CONFIG_FEATURE_MODPROBE_SMALL_CHECK_ALREADY_LOADED=y\n"
-"CONFIG_INSMOD=y\n"
-"CONFIG_RMMOD=y\n"
-"CONFIG_LSMOD=y\n"
-"CONFIG_FEATURE_LSMOD_PRETTY_2_6_OUTPUT=y\n"
-"CONFIG_MODPROBE=y\n"
-"# CONFIG_FEATURE_MODPROBE_BLACKLIST is not set\n"
-"CONFIG_DEPMOD=y\n"
-"# CONFIG_FEATURE_2_4_MODULES is not set\n"
-"CONFIG_FEATURE_INSMOD_TRY_MMAP=y\n"
-"# CONFIG_FEATURE_INSMOD_VERSION_CHECKING is not set\n"
-"# CONFIG_FEATURE_INSMOD_KSYMOOPS_SYMBOLS is not set\n"
-"# CONFIG_FEATURE_INSMOD_LOADINKMEM is not set\n"
-"# CONFIG_FEATURE_INSMOD_LOAD_MAP is not set\n"
-"# CONFIG_FEATURE_INSMOD_LOAD_MAP_FULL is not set\n"
-"CONFIG_FEATURE_CHECK_TAINTED_MODULE=y\n"
-"CONFIG_FEATURE_MODUTILS_ALIAS=y\n"
-"CONFIG_FEATURE_MODUTILS_SYMBOLS=y\n"
-"CONFIG_DEFAULT_DEPMOD_FILE=\"modules.dep\"\n"
-"CONFIG_BLOCKDEV=y\n"
-"# CONFIG_MDEV is not set\n"
-"# CONFIG_FEATURE_MDEV_CONF is not set\n"
-"# CONFIG_FEATURE_MDEV_RENAME is not set\n"
-"# CONFIG_FEATURE_MDEV_RENAME_REGEXP is not set\n"
-"# CONFIG_FEATURE_MDEV_EXEC is not set\n"
-"# CONFIG_FEATURE_MDEV_LOAD_FIRMWARE is not set\n"
-"CONFIG_REV=y\n"
-"# CONFIG_ACPID is not set\n"
-"# CONFIG_FEATURE_ACPID_COMPAT is not set\n"
-"CONFIG_BLKID=y\n"
-"CONFIG_FEATURE_BLKID_TYPE=y\n"
-"CONFIG_DMESG=y\n"
-"# CONFIG_FEATURE_DMESG_PRETTY is not set\n"
-"CONFIG_FBSET=y\n"
-"CONFIG_FEATURE_FBSET_FANCY=y\n"
-"# CONFIG_FEATURE_FBSET_READMODE is not set\n"
-"# CONFIG_FDFLUSH is not set\n"
-"# CONFIG_FDFORMAT is not set\n"
-"CONFIG_FDISK=y\n"
-"# CONFIG_FDISK_SUPPORT_LARGE_DISKS is not set\n"
-"CONFIG_FEATURE_FDISK_WRITABLE=y\n"
-"# CONFIG_FEATURE_AIX_LABEL is not set\n"
-"# CONFIG_FEATURE_SGI_LABEL is not set\n"
-"# CONFIG_FEATURE_SUN_LABEL is not set\n"
-"# CONFIG_FEATURE_OSF_LABEL is not set\n"
-"# CONFIG_FEATURE_GPT_LABEL is not set\n"
-"# CONFIG_FEATURE_FDISK_ADVANCED is not set\n"
-"# CONFIG_FINDFS is not set\n"
-"CONFIG_FLOCK=y\n"
-"CONFIG_FREERAMDISK=y\n"
-"# CONFIG_FSCK_MINIX is not set\n"
-"CONFIG_FSTRIM=y\n"
-"CONFIG_MKFS_EXT2=y\n"
-"# CONFIG_MKFS_MINIX is not set\n"
-"# CONFIG_FEATURE_MINIX2 is not set\n"
-"# CONFIG_MKFS_REISER is not set\n"
-"CONFIG_MKFS_VFAT=y\n"
-"CONFIG_GETOPT=y\n"
-"CONFIG_FEATURE_GETOPT_LONG=y\n"
-"CONFIG_HEXDUMP=y\n"
-"CONFIG_FEATURE_HEXDUMP_REVERSE=y\n"
-"# CONFIG_HD is not set\n"
-"# CONFIG_HWCLOCK is not set\n"
-"# CONFIG_FEATURE_HWCLOCK_LONG_OPTIONS is not set\n"
-"# CONFIG_FEATURE_HWCLOCK_ADJTIME_FHS is not set\n"
-"# CONFIG_IPCRM is not set\n"
-"# CONFIG_IPCS is not set\n"
-"CONFIG_LOSETUP=y\n"
-"# CONFIG_LSPCI is not set\n"
-"CONFIG_LSUSB=y\n"
-"CONFIG_MKSWAP=y\n"
-"# CONFIG_FEATURE_MKSWAP_UUID is not set\n"
-"CONFIG_MORE=y\n"
-"CONFIG_MOUNT=y\n"
-"CONFIG_FEATURE_MOUNT_FAKE=y\n"
-"CONFIG_FEATURE_MOUNT_VERBOSE=y\n"
-"# CONFIG_FEATURE_MOUNT_HELPERS is not set\n"
-"CONFIG_FEATURE_MOUNT_LABEL=y\n"
-"CONFIG_FEATURE_MOUNT_NFS=y\n"
-"CONFIG_FEATURE_MOUNT_CIFS=y\n"
-"CONFIG_FEATURE_MOUNT_FLAGS=y\n"
-"CONFIG_FEATURE_MOUNT_FSTAB=y\n"
-"# CONFIG_PIVOT_ROOT is not set\n"
-"# CONFIG_RDATE is not set\n"
-"CONFIG_RDEV=y\n"
-"# CONFIG_READPROFILE is not set\n"
-"# CONFIG_RTCWAKE is not set\n"
-"# CONFIG_SCRIPT is not set\n"
-"# CONFIG_SCRIPTREPLAY is not set\n"
-"# CONFIG_SETARCH is not set\n"
-"CONFIG_SWAPONOFF=y\n"
-"# CONFIG_FEATURE_SWAPON_PRI is not set\n"
-"# CONFIG_SWITCH_ROOT is not set\n"
-"CONFIG_UMOUNT=y\n"
-"CONFIG_FEATURE_UMOUNT_ALL=y\n"
-"CONFIG_FEATURE_MOUNT_LOOP=y\n"
-"CONFIG_FEATURE_MOUNT_LOOP_CREATE=y\n"
-"# CONFIG_FEATURE_MTAB_SUPPORT is not set\n"
-"CONFIG_VOLUMEID=y\n"
-"CONFIG_FEATURE_VOLUMEID_EXT=y\n"
-"# CONFIG_FEATURE_VOLUMEID_BTRFS is not set\n"
-"# CONFIG_FEATURE_VOLUMEID_REISERFS is not set\n"
-"CONFIG_FEATURE_VOLUMEID_FAT=y\n"
-"CONFIG_FEATURE_VOLUMEID_EXFAT=y\n"
-"# CONFIG_FEATURE_VOLUMEID_HFS is not set\n"
-"# CONFIG_FEATURE_VOLUMEID_JFS is not set\n"
-"# CONFIG_FEATURE_VOLUMEID_XFS is not set\n"
-"# CONFIG_FEATURE_VOLUMEID_NILFS is not set\n"
-"CONFIG_FEATURE_VOLUMEID_NTFS=y\n"
-"CONFIG_FEATURE_VOLUMEID_ISO9660=y\n"
-"# CONFIG_FEATURE_VOLUMEID_UDF is not set\n"
-"# CONFIG_FEATURE_VOLUMEID_LUKS is not set\n"
-"CONFIG_FEATURE_VOLUMEID_LINUXSWAP=y\n"
-"# CONFIG_FEATURE_VOLUMEID_CRAMFS is not set\n"
-"# CONFIG_FEATURE_VOLUMEID_ROMFS is not set\n"
-"CONFIG_FEATURE_VOLUMEID_SQUASHFS=y\n"
-"# CONFIG_FEATURE_VOLUMEID_SYSV is not set\n"
-"# CONFIG_FEATURE_VOLUMEID_OCFS2 is not set\n"
-"# CONFIG_FEATURE_VOLUMEID_LINUXRAID is not set\n"
-"# CONFIG_CONSPY is not set\n"
-"CONFIG_LESS=y\n"
-"CONFIG_FEATURE_LESS_MAXLINES=65536\n"
-"# CONFIG_FEATURE_LESS_BRACKETS is not set\n"
-"# CONFIG_FEATURE_LESS_FLAGS is not set\n"
-"CONFIG_FEATURE_LESS_MARKS=y\n"
-"CONFIG_FEATURE_LESS_REGEXP=y\n"
-"CONFIG_FEATURE_LESS_WINCH=y\n"
-"CONFIG_FEATURE_LESS_ASK_TERMINAL=y\n"
-"# CONFIG_FEATURE_LESS_DASHCMD is not set\n"
-"# CONFIG_FEATURE_LESS_LINENUMS is not set\n"
-"CONFIG_NANDWRITE=y\n"
-"CONFIG_NANDDUMP=y\n"
-"CONFIG_SETSERIAL=y\n"
-"# CONFIG_UBIATTACH is not set\n"
-"# CONFIG_UBIDETACH is not set\n"
-"# CONFIG_UBIMKVOL is not set\n"
-"# CONFIG_UBIRMVOL is not set\n"
-"# CONFIG_UBIRSVOL is not set\n"
-"# CONFIG_UBIUPDATEVOL is not set\n"
-"CONFIG_ADJTIMEX=y\n"
-"CONFIG_BBCONFIG=y\n"
-"CONFIG_FEATURE_COMPRESS_BBCONFIG=y\n"
-"# CONFIG_BEEP is not set\n"
-"CONFIG_FEATURE_BEEP_FREQ=0\n"
-"CONFIG_FEATURE_BEEP_LENGTH_MS=0\n"
-"# CONFIG_CHAT is not set\n"
-"# CONFIG_FEATURE_CHAT_NOFAIL is not set\n"
-"# CONFIG_FEATURE_CHAT_TTY_HIFI is not set\n"
-"# CONFIG_FEATURE_CHAT_IMPLICIT_CR is not set\n"
-"# CONFIG_FEATURE_CHAT_SWALLOW_OPTS is not set\n"
-"# CONFIG_FEATURE_CHAT_SEND_ESCAPES is not set\n"
-"# CONFIG_FEATURE_CHAT_VAR_ABORT_LEN is not set\n"
-"# CONFIG_FEATURE_CHAT_CLR_ABORT is not set\n"
-"# CONFIG_CHRT is not set\n"
-"CONFIG_CROND=y\n"
-"# CONFIG_FEATURE_CROND_D is not set\n"
-"# CONFIG_FEATURE_CROND_CALL_SENDMAIL is not set\n"
-"CONFIG_FEATURE_CROND_DIR=\"/system/etc/cron.d\"\n"
-"CONFIG_CRONTAB=y\n"
-"CONFIG_DC=y\n"
-"CONFIG_FEATURE_DC_LIBM=y\n"
-"# CONFIG_DEVFSD is not set\n"
-"# CONFIG_DEVFSD_MODLOAD is not set\n"
-"# CONFIG_DEVFSD_FG_NP is not set\n"
-"# CONFIG_DEVFSD_VERBOSE is not set\n"
-"# CONFIG_FEATURE_DEVFS is not set\n"
-"CONFIG_DEVMEM=y\n"
-"# CONFIG_EJECT is not set\n"
-"# CONFIG_FEATURE_EJECT_SCSI is not set\n"
-"CONFIG_FBSPLASH=y\n"
-"CONFIG_FLASHCP=y\n"
-"CONFIG_FLASH_LOCK=y\n"
-"CONFIG_FLASH_UNLOCK=y\n"
-"# CONFIG_FLASH_ERASEALL is not set\n"
-"CONFIG_IONICE=y\n"
-"# CONFIG_INOTIFYD is not set\n"
-"# CONFIG_LAST is not set\n"
-"# CONFIG_FEATURE_LAST_SMALL is not set\n"
-"# CONFIG_FEATURE_LAST_FANCY is not set\n"
-"# CONFIG_HDPARM is not set\n"
-"# CONFIG_FEATURE_HDPARM_GET_IDENTITY is not set\n"
-"# CONFIG_FEATURE_HDPARM_HDIO_SCAN_HWIF is not set\n"
-"# CONFIG_FEATURE_HDPARM_HDIO_UNREGISTER_HWIF is not set\n"
-"# CONFIG_FEATURE_HDPARM_HDIO_DRIVE_RESET is not set\n"
-"# CONFIG_FEATURE_HDPARM_HDIO_TRISTATE_HWIF is not set\n"
-"# CONFIG_FEATURE_HDPARM_HDIO_GETSET_DMA is not set\n"
-"# CONFIG_MAKEDEVS is not set\n"
-"# CONFIG_FEATURE_MAKEDEVS_LEAF is not set\n"
-"# CONFIG_FEATURE_MAKEDEVS_TABLE is not set\n"
-"CONFIG_MAN=y\n"
-"# CONFIG_MICROCOM is not set\n"
-"CONFIG_MOUNTPOINT=y\n"
-"# CONFIG_MT is not set\n"
-"# CONFIG_RAIDAUTORUN is not set\n"
-"# CONFIG_READAHEAD is not set\n"
-"# CONFIG_RFKILL is not set\n"
-"# CONFIG_RUNLEVEL is not set\n"
-"CONFIG_RX=y\n"
-"CONFIG_SETSID=y\n"
-"CONFIG_STRINGS=y\n"
-"CONFIG_TASKSET=y\n"
-"CONFIG_FEATURE_TASKSET_FANCY=y\n"
-"CONFIG_TIME=y\n"
-"CONFIG_TIMEOUT=y\n"
-"CONFIG_TTYSIZE=y\n"
-"# CONFIG_VOLNAME is not set\n"
-"# CONFIG_WALL is not set\n"
-"# CONFIG_WATCHDOG is not set\n"
-"# CONFIG_NAMEIF is not set\n"
-"# CONFIG_FEATURE_NAMEIF_EXTENDED is not set\n"
-"CONFIG_NBDCLIENT=y\n"
-"CONFIG_NC=y\n"
-"CONFIG_NC_SERVER=y\n"
-"CONFIG_NC_EXTRA=y\n"
-"# CONFIG_NC_110_COMPAT is not set\n"
-"CONFIG_PING=y\n"
-"# CONFIG_PING6 is not set\n"
-"CONFIG_FEATURE_FANCY_PING=y\n"
-"# CONFIG_WHOIS is not set\n"
-"CONFIG_FEATURE_IPV6=y\n"
-"# CONFIG_FEATURE_UNIX_LOCAL is not set\n"
-"CONFIG_FEATURE_PREFER_IPV4_ADDRESS=y\n"
-"# CONFIG_VERBOSE_RESOLUTION_ERRORS is not set\n"
-"CONFIG_ARP=y\n"
-"# CONFIG_ARPING is not set\n"
-"CONFIG_BRCTL=y\n"
-"CONFIG_FEATURE_BRCTL_FANCY=y\n"
-"CONFIG_FEATURE_BRCTL_SHOW=y\n"
-"CONFIG_DNSD=y\n"
-"# CONFIG_ETHER_WAKE is not set\n"
-"# CONFIG_FAKEIDENTD is not set\n"
-"# CONFIG_FTPD is not set\n"
-"# CONFIG_FEATURE_FTP_WRITE is not set\n"
-"# CONFIG_FEATURE_FTPD_ACCEPT_BROKEN_LIST is not set\n"
-"CONFIG_FTPGET=y\n"
-"CONFIG_FTPPUT=y\n"
-"CONFIG_FEATURE_FTPGETPUT_LONG_OPTIONS=y\n"
-"# CONFIG_HOSTNAME is not set\n"
-"# CONFIG_HTTPD is not set\n"
-"# CONFIG_FEATURE_HTTPD_RANGES is not set\n"
-"# CONFIG_FEATURE_HTTPD_USE_SENDFILE is not set\n"
-"# CONFIG_FEATURE_HTTPD_SETUID is not set\n"
-"# CONFIG_FEATURE_HTTPD_BASIC_AUTH is not set\n"
-"# CONFIG_FEATURE_HTTPD_AUTH_MD5 is not set\n"
-"# CONFIG_FEATURE_HTTPD_CGI is not set\n"
-"# CONFIG_FEATURE_HTTPD_CONFIG_WITH_SCRIPT_INTERPR is not set\n"
-"# CONFIG_FEATURE_HTTPD_SET_REMOTE_PORT_TO_ENV is not set\n"
-"# CONFIG_FEATURE_HTTPD_ENCODE_URL_STR is not set\n"
-"# CONFIG_FEATURE_HTTPD_ERROR_PAGES is not set\n"
-"# CONFIG_FEATURE_HTTPD_PROXY is not set\n"
-"# CONFIG_FEATURE_HTTPD_GZIP is not set\n"
-"CONFIG_IFCONFIG=y\n"
-"CONFIG_FEATURE_IFCONFIG_STATUS=y\n"
-"# CONFIG_FEATURE_IFCONFIG_SLIP is not set\n"
-"# CONFIG_FEATURE_IFCONFIG_MEMSTART_IOADDR_IRQ is not set\n"
-"CONFIG_FEATURE_IFCONFIG_HW=y\n"
-"# CONFIG_FEATURE_IFCONFIG_BROADCAST_PLUS is not set\n"
-"# CONFIG_IFENSLAVE is not set\n"
-"# CONFIG_IFPLUGD is not set\n"
-"# CONFIG_IFUPDOWN is not set\n"
-"CONFIG_IFUPDOWN_IFSTATE_PATH=\"\"\n"
-"# CONFIG_FEATURE_IFUPDOWN_IP is not set\n"
-"# CONFIG_FEATURE_IFUPDOWN_IP_BUILTIN is not set\n"
-"# CONFIG_FEATURE_IFUPDOWN_IFCONFIG_BUILTIN is not set\n"
-"# CONFIG_FEATURE_IFUPDOWN_IPV4 is not set\n"
-"# CONFIG_FEATURE_IFUPDOWN_IPV6 is not set\n"
-"# CONFIG_FEATURE_IFUPDOWN_MAPPING is not set\n"
-"# CONFIG_FEATURE_IFUPDOWN_EXTERNAL_DHCP is not set\n"
-"CONFIG_INETD=y\n"
-"CONFIG_FEATURE_INETD_SUPPORT_BUILTIN_ECHO=y\n"
-"# CONFIG_FEATURE_INETD_SUPPORT_BUILTIN_DISCARD is not set\n"
-"CONFIG_FEATURE_INETD_SUPPORT_BUILTIN_TIME=y\n"
-"CONFIG_FEATURE_INETD_SUPPORT_BUILTIN_DAYTIME=y\n"
-"# CONFIG_FEATURE_INETD_SUPPORT_BUILTIN_CHARGEN is not set\n"
-"# CONFIG_FEATURE_INETD_RPC is not set\n"
-"CONFIG_IP=y\n"
-"CONFIG_FEATURE_IP_ADDRESS=y\n"
-"CONFIG_FEATURE_IP_LINK=y\n"
-"CONFIG_FEATURE_IP_ROUTE=y\n"
-"# CONFIG_FEATURE_IP_TUNNEL is not set\n"
-"CONFIG_FEATURE_IP_RULE=y\n"
-"# CONFIG_FEATURE_IP_SHORT_FORMS is not set\n"
-"# CONFIG_FEATURE_IP_RARE_PROTOCOLS is not set\n"
-"# CONFIG_IPADDR is not set\n"
-"# CONFIG_IPLINK is not set\n"
-"# CONFIG_IPROUTE is not set\n"
-"# CONFIG_IPTUNNEL is not set\n"
-"# CONFIG_IPRULE is not set\n"
-"# CONFIG_IPCALC is not set\n"
-"# CONFIG_FEATURE_IPCALC_FANCY is not set\n"
-"# CONFIG_FEATURE_IPCALC_LONG_OPTIONS is not set\n"
-"CONFIG_NETSTAT=y\n"
-"CONFIG_FEATURE_NETSTAT_WIDE=y\n"
-"CONFIG_FEATURE_NETSTAT_PRG=y\n"
-"CONFIG_NSLOOKUP=y\n"
-"CONFIG_NTPD=y\n"
-"# CONFIG_FEATURE_NTPD_SERVER is not set\n"
-"# CONFIG_PSCAN is not set\n"
-"CONFIG_ROUTE=y\n"
-"# CONFIG_SLATTACH is not set\n"
-"# CONFIG_TCPSVD is not set\n"
-"CONFIG_TELNET=y\n"
-"CONFIG_FEATURE_TELNET_TTYPE=y\n"
-"# CONFIG_FEATURE_TELNET_AUTOLOGIN is not set\n"
-"CONFIG_TELNETD=y\n"
-"CONFIG_FEATURE_TELNETD_STANDALONE=y\n"
-"CONFIG_FEATURE_TELNETD_INETD_WAIT=y\n"
-"CONFIG_TFTP=y\n"
-"CONFIG_TFTPD=y\n"
-"CONFIG_FEATURE_TFTP_GET=y\n"
-"CONFIG_FEATURE_TFTP_PUT=y\n"
-"# CONFIG_FEATURE_TFTP_BLOCKSIZE is not set\n"
-"# CONFIG_FEATURE_TFTP_PROGRESS_BAR is not set\n"
-"# CONFIG_TFTP_DEBUG is not set\n"
-"CONFIG_TRACEROUTE=y\n"
-"# CONFIG_TRACEROUTE6 is not set\n"
-"CONFIG_FEATURE_TRACEROUTE_VERBOSE=y\n"
-"# CONFIG_FEATURE_TRACEROUTE_SOURCE_ROUTE is not set\n"
-"# CONFIG_FEATURE_TRACEROUTE_USE_ICMP is not set\n"
-"# CONFIG_TUNCTL is not set\n"
-"# CONFIG_FEATURE_TUNCTL_UG is not set\n"
-"# CONFIG_UDHCPC6 is not set\n"
-"# CONFIG_UDHCPD is not set\n"
-"# CONFIG_DHCPRELAY is not set\n"
-"# CONFIG_DUMPLEASES is not set\n"
-"# CONFIG_FEATURE_UDHCPD_WRITE_LEASES_EARLY is not set\n"
-"# CONFIG_FEATURE_UDHCPD_BASE_IP_ON_MAC is not set\n"
-"CONFIG_DHCPD_LEASES_FILE=\"\"\n"
-"# CONFIG_UDHCPC is not set\n"
-"# CONFIG_FEATURE_UDHCPC_ARPING is not set\n"
-"# CONFIG_FEATURE_UDHCP_PORT is not set\n"
-"CONFIG_UDHCP_DEBUG=0\n"
-"# CONFIG_FEATURE_UDHCP_RFC3397 is not set\n"
-"# CONFIG_FEATURE_UDHCP_8021Q is not set\n"
-"CONFIG_UDHCPC_DEFAULT_SCRIPT=\"\"\n"
-"CONFIG_UDHCPC_SLACK_FOR_BUGGY_SERVERS=0\n"
-"CONFIG_IFUPDOWN_UDHCPC_CMD_OPTIONS=\"\"\n"
-"# CONFIG_UDPSVD is not set\n"
-"# CONFIG_VCONFIG is not set\n"
-"CONFIG_WGET=y\n"
-"CONFIG_FEATURE_WGET_STATUSBAR=y\n"
-"CONFIG_FEATURE_WGET_AUTHENTICATION=y\n"
-"CONFIG_FEATURE_WGET_LONG_OPTIONS=y\n"
-"CONFIG_FEATURE_WGET_TIMEOUT=y\n"
-"# CONFIG_ZCIP is not set\n"
-"# CONFIG_LPD is not set\n"
-"# CONFIG_LPR is not set\n"
-"# CONFIG_LPQ is not set\n"
-"# CONFIG_MAKEMIME is not set\n"
-"CONFIG_FEATURE_MIME_CHARSET=\"\"\n"
-"# CONFIG_POPMAILDIR is not set\n"
-"# CONFIG_FEATURE_POPMAILDIR_DELIVERY is not set\n"
-"# CONFIG_REFORMIME is not set\n"
-"# CONFIG_FEATURE_REFORMIME_COMPAT is not set\n"
-"# CONFIG_SENDMAIL is not set\n"
-"CONFIG_IOSTAT=y\n"
-"CONFIG_LSOF=y\n"
-"CONFIG_MPSTAT=y\n"
-"# CONFIG_NMETER is not set\n"
-"CONFIG_PMAP=y\n"
-"# CONFIG_POWERTOP is not set\n"
-"CONFIG_PSTREE=y\n"
-"CONFIG_PWDX=y\n"
-"# CONFIG_SMEMCAP is not set\n"
-"CONFIG_TOP=y\n"
-"CONFIG_FEATURE_TOP_CPU_USAGE_PERCENTAGE=y\n"
-"CONFIG_FEATURE_TOP_CPU_GLOBAL_PERCENTS=y\n"
-"CONFIG_FEATURE_TOP_SMP_CPU=y\n"
-"CONFIG_FEATURE_TOP_DECIMALS=y\n"
-"CONFIG_FEATURE_TOP_SMP_PROCESS=y\n"
-"CONFIG_FEATURE_TOPMEM=y\n"
-"CONFIG_UPTIME=y\n"
-"# CONFIG_FEATURE_UPTIME_UTMP_SUPPORT is not set\n"
-"CONFIG_FREE=y\n"
-"CONFIG_FUSER=y\n"
-"CONFIG_KILL=y\n"
-"CONFIG_KILLALL=y\n"
-"CONFIG_KILLALL5=y\n"
-"CONFIG_PGREP=y\n"
-"CONFIG_PIDOF=y\n"
-"CONFIG_FEATURE_PIDOF_SINGLE=y\n"
-"CONFIG_FEATURE_PIDOF_OMIT=y\n"
-"CONFIG_PKILL=y\n"
-"CONFIG_PS=y\n"
-"# CONFIG_FEATURE_PS_WIDE is not set\n"
-"# CONFIG_FEATURE_PS_LONG is not set\n"
-"CONFIG_FEATURE_PS_TIME=y\n"
-"CONFIG_FEATURE_PS_ADDITIONAL_COLUMNS=y\n"
-"# CONFIG_FEATURE_PS_UNUSUAL_SYSTEMS is not set\n"
-"CONFIG_RENICE=y\n"
-"CONFIG_BB_SYSCTL=y\n"
-"CONFIG_FEATURE_SHOW_THREADS=y\n"
-"CONFIG_WATCH=y\n"
-"# CONFIG_RUNSV is not set\n"
-"# CONFIG_RUNSVDIR is not set\n"
-"# CONFIG_FEATURE_RUNSVDIR_LOG is not set\n"
-"# CONFIG_SV is not set\n"
-"CONFIG_SV_DEFAULT_SERVICE_DIR=\"\"\n"
-"# CONFIG_SVLOGD is not set\n"
-"# CONFIG_CHPST is not set\n"
-"# CONFIG_SETUIDGID is not set\n"
-"# CONFIG_ENVUIDGID is not set\n"
-"# CONFIG_ENVDIR is not set\n"
-"# CONFIG_SOFTLIMIT is not set\n"
-"# CONFIG_CHCON is not set\n"
-"# CONFIG_FEATURE_CHCON_LONG_OPTIONS is not set\n"
-"# CONFIG_GETENFORCE is not set\n"
-"# CONFIG_GETSEBOOL is not set\n"
-"# CONFIG_LOAD_POLICY is not set\n"
-"# CONFIG_MATCHPATHCON is not set\n"
-"# CONFIG_RESTORECON is not set\n"
-"# CONFIG_RUNCON is not set\n"
-"# CONFIG_FEATURE_RUNCON_LONG_OPTIONS is not set\n"
-"# CONFIG_SELINUXENABLED is not set\n"
-"# CONFIG_SETENFORCE is not set\n"
-"# CONFIG_SETFILES is not set\n"
-"# CONFIG_FEATURE_SETFILES_CHECK_OPTION is not set\n"
-"# CONFIG_SETSEBOOL is not set\n"
-"# CONFIG_SESTATUS is not set\n"
-"CONFIG_ASH=y\n"
-"CONFIG_ASH_BASH_COMPAT=y\n"
-"# CONFIG_ASH_IDLE_TIMEOUT is not set\n"
-"CONFIG_ASH_JOB_CONTROL=y\n"
-"CONFIG_ASH_ALIAS=y\n"
-"# CONFIG_ASH_GETOPTS is not set\n"
-"CONFIG_ASH_BUILTIN_ECHO=y\n"
-"CONFIG_ASH_BUILTIN_PRINTF=y\n"
-"CONFIG_ASH_BUILTIN_TEST=y\n"
-"CONFIG_ASH_CMDCMD=y\n"
-"# CONFIG_ASH_MAIL is not set\n"
-"CONFIG_ASH_OPTIMIZE_FOR_SIZE=y\n"
-"CONFIG_ASH_RANDOM_SUPPORT=y\n"
-"CONFIG_ASH_EXPAND_PRMT=y\n"
-"# CONFIG_CTTYHACK is not set\n"
-"# CONFIG_HUSH is not set\n"
-"# CONFIG_HUSH_BASH_COMPAT is not set\n"
-"# CONFIG_HUSH_BRACE_EXPANSION is not set\n"
-"# CONFIG_HUSH_HELP is not set\n"
-"# CONFIG_HUSH_INTERACTIVE is not set\n"
-"# CONFIG_HUSH_SAVEHISTORY is not set\n"
-"# CONFIG_HUSH_JOB is not set\n"
-"# CONFIG_HUSH_TICK is not set\n"
-"# CONFIG_HUSH_IF is not set\n"
-"# CONFIG_HUSH_LOOPS is not set\n"
-"# CONFIG_HUSH_CASE is not set\n"
-"# CONFIG_HUSH_FUNCTIONS is not set\n"
-"# CONFIG_HUSH_LOCAL is not set\n"
-"# CONFIG_HUSH_RANDOM_SUPPORT is not set\n"
-"# CONFIG_HUSH_EXPORT_N is not set\n"
-"# CONFIG_HUSH_MODE_X is not set\n"
-"# CONFIG_MSH is not set\n"
-"CONFIG_FEATURE_SH_IS_ASH=y\n"
-"# CONFIG_FEATURE_SH_IS_HUSH is not set\n"
-"# CONFIG_FEATURE_SH_IS_NONE is not set\n"
-"# CONFIG_FEATURE_BASH_IS_ASH is not set\n"
-"# CONFIG_FEATURE_BASH_IS_HUSH is not set\n"
-"CONFIG_FEATURE_BASH_IS_NONE=y\n"
-"CONFIG_SH_MATH_SUPPORT=y\n"
-"CONFIG_SH_MATH_SUPPORT_64=y\n"
-"CONFIG_FEATURE_SH_EXTRA_QUIET=y\n"
-"# CONFIG_FEATURE_SH_STANDALONE is not set\n"
-"# CONFIG_FEATURE_SH_NOFORK is not set\n"
-"# CONFIG_FEATURE_SH_HISTFILESIZE is not set\n"
-"# CONFIG_SYSLOGD is not set\n"
-"# CONFIG_FEATURE_ROTATE_LOGFILE is not set\n"
-"# CONFIG_FEATURE_REMOTE_LOG is not set\n"
-"# CONFIG_FEATURE_SYSLOGD_DUP is not set\n"
-"# CONFIG_FEATURE_SYSLOGD_CFG is not set\n"
-"CONFIG_FEATURE_SYSLOGD_READ_BUFFER_SIZE=0\n"
-"# CONFIG_FEATURE_IPC_SYSLOG is not set\n"
-"CONFIG_FEATURE_IPC_SYSLOG_BUFFER_SIZE=0\n"
-"# CONFIG_LOGREAD is not set\n"
-"# CONFIG_FEATURE_LOGREAD_REDUCED_LOCKING is not set\n"
-"# CONFIG_FEATURE_KMSG_SYSLOG is not set\n"
-"# CONFIG_KLOGD is not set\n"
-"# CONFIG_FEATURE_KLOGD_KLOGCTL is not set\n"
-"# CONFIG_LOGGER is not set\n"
-;
-#endif
diff --git a/include-full/bbconfigopts_bz2.h b/include-full/bbconfigopts_bz2.h
deleted file mode 100644
index d244a94..0000000
--- a/include-full/bbconfigopts_bz2.h
+++ b/dev/null
@@ -1,342 +0,0 @@
-#ifndef _BBCONFIGOPTS_BZ2_H
-#define _BBCONFIGOPTS_BZ2_H
-/*
- * busybox configuration settings.
- *
- * Licensed under GPLv2 or later, see file LICENSE in this source tree.
- *
- * This file is generated automatically by scripts/mkconfigs.
- * Do not edit.
- */
-static const char bbconfig_config_bz2[] ALIGN1 = {
-0x68,0x31,0x31,0x41,0x59,0x26,0x53,0x59,0x2b,0xff,0xfd,0x6f,0x00,0x0a,0xb0,0x5f,
-0x80,0x00,0x10,0x58,0x03,0xff,0xe2,0x3f,0xff,0xff,0xf0,0xbf,0xe7,0xdf,0x60,0x60,
-0x1b,0x1c,0x00,0x3d,0x80,0x48,0x1c,0x97,0xd5,0x46,0x87,0xdf,0x00,0x06,0x72,0x57,
-0x85,0x56,0xb5,0xec,0x07,0x47,0x90,0xd0,0x0e,0x4d,0x1e,0x8e,0xcc,0xd4,0x86,0x9d,
-0xb0,0x90,0x26,0xb5,0xef,0x73,0xd7,0xb5,0xa8,0x24,0x25,0xdb,0x76,0x57,0x5d,0xb6,
-0x3b,0x3a,0x1b,0x56,0x9f,0x3d,0x06,0xa7,0xa0,0x80,0x23,0x42,0x64,0x8d,0x29,0xa3,
-0xd4,0x68,0x87,0xa0,0x64,0x1a,0x00,0x80,0x34,0xc8,0x10,0x89,0x90,0x46,0x48,0xd5,
-0x00,0x00,0x00,0x00,0x68,0x01,0x29,0x89,0x24,0xd3,0x04,0x99,0x4d,0x4f,0x51,0xa1,
-0xa6,0x40,0xd0,0x03,0x20,0x0c,0x23,0x20,0x93,0xd5,0x29,0x48,0x84,0xc9,0xfa,0xa0,
-0x03,0x40,0x00,0xd0,0x34,0xd3,0x46,0x4d,0x00,0x01,0x24,0xa6,0x98,0x89,0x94,0xf4,
-0x80,0x01,0xa0,0x3d,0x40,0x3d,0x4d,0x3d,0x4c,0xd4,0xc9,0x8d,0x4f,0x51,0xa0,0x90,
-0x90,0x41,0x34,0xc8,0x12,0x0a,0x9e,0x50,0x00,0x00,0x00,0x1a,0x68,0x3f,0xf7,0xbb,
-0xfe,0xf8,0xb3,0x95,0xd2,0x5e,0xce,0xdd,0x29,0x28,0x8a,0x4a,0x36,0x4b,0x42,0x40,
-0x0c,0xdb,0x48,0x5c,0xb7,0x4b,0xc6,0xba,0x5c,0xe9,0xaf,0xa9,0xdd,0xa2,0xa5,0x22,
-0xc6,0x30,0x58,0x89,0x28,0xbd,0x3b,0x94,0x0b,0x7a,0x76,0xe9,0x4d,0x90,0xcc,0xa1,
-0x2d,0xaf,0x3b,0x8b,0x51,0x4f,0x3b,0x74,0xcc,0x04,0xd2,0xf1,0xd4,0x6a,0x36,0xb9,
-0x5d,0x17,0x74,0x57,0x43,0x5c,0x9d,0xe7,0x9c,0x28,0x33,0x32,0x29,0x23,0x3c,0x6e,
-0x22,0x82,0x77,0x5b,0xb0,0xad,0xd9,0xd9,0x97,0x9d,0x5c,0xc6,0x4d,0x1b,0x17,0xa7,
-0xaf,0x57,0x8b,0xe0,0x70,0x2c,0x5a,0x8c,0x89,0x90,0xb6,0x22,0xc5,0xa2,0x83,0x44,
-0xf3,0xaf,0x6d,0xe7,0x51,0x6a,0x31,0xec,0x5b,0x71,0x9a,0x8c,0x01,0xa2,0x49,0xbd,
-0xab,0xa4,0x66,0xf5,0xf3,0xcb,0xc9,0x91,0xeb,0xd7,0xb3,0xdb,0xe9,0xbc,0x46,0x0c,
-0x98,0x8d,0x92,0x66,0x22,0x43,0x04,0x6b,0xdd,0x73,0x64,0x4f,0x17,0x26,0x69,0x0c,
-0xe4,0x48,0xc9,0x84,0xcc,0x0c,0xc3,0x26,0x58,0x1f,0x97,0x54,0x00,0x21,0x72,0x5b,
-0x65,0x99,0x7a,0xa4,0x6f,0x0e,0xeb,0x3d,0xa5,0x19,0x9c,0xfb,0x7d,0xac,0x1f,0xe9,
-0x1f,0xe1,0x56,0x7f,0x78,0x2e,0xee,0xb5,0xfb,0x7d,0xd6,0x9b,0xfd,0x88,0xe6,0x93,
-0xaa,0x7b,0xa7,0xa4,0xda,0x29,0xf6,0xfd,0x83,0x32,0x4d,0x63,0xfe,0x75,0xf7,0xe6,
-0x7a,0xc6,0xec,0xa3,0x6c,0xeb,0xb0,0xf6,0xaf,0xaf,0xc1,0xa5,0xb5,0xe6,0xbb,0xcf,
-0x97,0x6e,0x75,0x97,0x34,0x76,0x8f,0xd0,0x8b,0xd7,0x16,0xb2,0xf1,0xaa,0x46,0xd3,
-0x97,0x11,0x94,0x48,0x7c,0xb9,0x6c,0x4e,0x1c,0x75,0x38,0xeb,0x98,0x9f,0x2c,0x23,
-0x44,0x3e,0xab,0x6f,0xae,0x37,0x9b,0x6f,0xb2,0x6e,0x60,0xcf,0xb0,0x5b,0xb5,0x53,
-0x39,0x94,0x4b,0x65,0xe5,0x28,0xd5,0xf5,0x97,0x16,0x8a,0xa5,0x54,0x54,0x22,0x31,
-0xed,0xc3,0xcd,0xef,0x9a,0x2d,0x1c,0x62,0x97,0x9d,0x67,0xe9,0xf0,0x96,0xfd,0x63,
-0x14,0x9c,0x79,0xae,0x82,0xed,0xa2,0x47,0xe1,0xda,0xac,0xfc,0xac,0xc7,0x05,0xa9,
-0x47,0x71,0x28,0xa5,0x4e,0x3c,0x46,0xcf,0xa2,0x0b,0x42,0x3e,0x74,0xd2,0xb2,0xdb,
-0x18,0xbd,0x49,0x8c,0x26,0x9a,0xa5,0x9d,0xc7,0x29,0xcb,0xd8,0xbe,0xfb,0xee,0xdb,
-0x46,0xf4,0x39,0xd7,0x5d,0xaf,0x8a,0xcf,0xb4,0x9f,0x26,0xaa,0x8e,0xa8,0x62,0xdd,
-0x62,0x5a,0xda,0x70,0x84,0xb9,0x2d,0x5e,0x6b,0x9d,0x4a,0x33,0x60,0x6f,0x2a,0x56,
-0x3c,0x70,0x97,0xa7,0xc9,0x6e,0x26,0x85,0xa3,0x12,0x83,0x08,0xcc,0x9a,0x68,0xac,
-0x79,0x1b,0xd5,0x6b,0x2a,0x7a,0x71,0xcc,0x46,0xfb,0xe8,0xb8,0xca,0x49,0x5b,0xe7,
-0x00,0x01,0x01,0x0f,0x68,0x00,0x42,0xac,0xd6,0xc9,0x57,0x5c,0x8f,0x63,0x43,0x58,
-0xdf,0x20,0x8b,0x00,0x04,0x2d,0x6e,0x79,0x7d,0xf4,0xda,0x18,0x3d,0xb0,0x8c,0x69,
-0xcf,0xb3,0x15,0xf0,0x73,0x54,0x23,0x4d,0xde,0x9c,0xd2,0x4a,0x9b,0x5e,0x66,0xcb,
-0xf0,0x3e,0xdc,0x9d,0x9f,0xda,0x47,0x90,0xa3,0xc4,0xfa,0xf5,0x9b,0xbd,0xb1,0xd1,
-0x50,0xcf,0xe1,0xb7,0xed,0xf7,0xe8,0x38,0xca,0xc8,0x03,0x3f,0xba,0x33,0x79,0x43,
-0xde,0xf0,0xa3,0x8a,0x52,0xbe,0xed,0x6a,0xf7,0x52,0x13,0xf8,0x94,0xd9,0x48,0xf8,
-0xd7,0x5f,0xc0,0x75,0xf8,0xb9,0xb3,0xb1,0x75,0x55,0xec,0xce,0x8f,0x97,0xf7,0xae,
-0x4c,0x7e,0x0f,0x1e,0x07,0xe3,0x6a,0x27,0xc4,0xce,0x5b,0xfa,0x04,0x95,0x2f,0xe3,
-0xe2,0xc2,0x6c,0xd5,0x9a,0x4a,0x47,0x4f,0x2a,0x55,0x92,0x98,0xa1,0xcc,0xee,0x3f,
-0x2a,0x2f,0x12,0x48,0x6d,0x15,0x58,0x5a,0xa9,0xec,0x3d,0xb0,0x1f,0xd7,0x67,0x0c,
-0x0d,0xfd,0x13,0x9b,0x39,0x2f,0xf3,0x71,0xdb,0x53,0x38,0xc5,0x0b,0x4e,0x63,0xa4,
-0xf6,0x71,0x3f,0x94,0xf1,0xe5,0x39,0xf1,0x7e,0xfe,0x59,0x51,0xdf,0x36,0x05,0x7f,
-0x3b,0xb3,0xd3,0x4e,0x98,0x49,0xf1,0x75,0xc9,0x6d,0x1f,0xbe,0x3b,0x89,0x20,0xa6,
-0xc5,0x04,0x76,0xaf,0x99,0x6e,0xba,0xca,0x84,0xe3,0x0a,0xe9,0xad,0x33,0xd7,0x6b,
-0x58,0x61,0x39,0x34,0x7b,0x76,0x27,0xf5,0x4d,0xbf,0x47,0xea,0x56,0x36,0xd6,0x43,
-0x78,0xdf,0xcf,0xca,0x47,0x34,0x75,0x5f,0x2d,0x9a,0x35,0x1a,0xa1,0x3a,0x1c,0x29,
-0xcf,0x49,0xaf,0x6b,0x41,0xe6,0x9d,0x89,0x1f,0x45,0x8e,0x50,0x81,0xa2,0x35,0x83,
-0x1c,0x99,0x75,0xe2,0x91,0xdf,0x08,0x6b,0xe9,0xf3,0x8f,0x8d,0x0e,0x75,0x97,0xcb,
-0x9e,0x5d,0xc2,0x44,0xbb,0xf1,0xe5,0xc5,0xdd,0x5d,0x85,0x3e,0x62,0xb8,0x8f,0x87,
-0xaf,0x73,0x53,0x98,0x87,0x08,0x53,0xb4,0x6f,0x4b,0x1a,0x45,0x4c,0x95,0xd2,0x5d,
-0x98,0x6b,0x62,0x1e,0xcd,0x31,0xcb,0x1e,0xfe,0x15,0x8d,0xfa,0x92,0x35,0x6f,0x16,
-0xbe,0x07,0x9e,0x7d,0x54,0x52,0xbe,0x7b,0x62,0xad,0xe9,0x1a,0x6c,0xd8,0x26,0xb7,
-0xf6,0x3c,0x29,0x34,0x7d,0x39,0xa1,0x6c,0x8a,0xe8,0x67,0x38,0xd3,0xe5,0xec,0xfc,
-0x34,0xb8,0x3f,0x6b,0xe7,0xa7,0x5d,0xef,0xb5,0xad,0x5f,0xd2,0x70,0x43,0x6c,0x9a,
-0x5b,0x90,0xc5,0xbb,0x7c,0x23,0xf7,0x42,0x12,0x55,0x06,0x40,0x5a,0xb1,0x62,0x1d,
-0x6e,0x27,0x4b,0x86,0x46,0x0e,0x98,0x41,0xc0,0xc0,0xca,0x65,0x03,0xd9,0x3e,0x16,
-0xaf,0x2f,0x50,0x27,0x23,0xce,0xcd,0x60,0x83,0xe7,0x62,0x22,0x18,0x9d,0x7c,0xf9,
-0x1c,0xf5,0x28,0x96,0x18,0x61,0x58,0x37,0xba,0x1a,0x9a,0x87,0x82,0xf7,0xc5,0x82,
-0xcc,0x78,0x89,0xf6,0x31,0x8b,0xe9,0xbf,0x51,0x76,0xfc,0xbe,0xf5,0xd4,0x80,0x0f,
-0xc6,0xc8,0xe3,0x8d,0xff,0x1d,0x92,0x59,0x73,0x23,0x3b,0xe8,0x28,0x65,0xf0,0xef,
-0x9b,0xd1,0x01,0x1e,0xa0,0xa4,0x2c,0x3f,0x20,0x02,0xeb,0x9d,0x0b,0xd9,0xca,0x6c,
-0x59,0x61,0xeb,0xaf,0x8a,0x7f,0x64,0x6e,0x69,0x84,0xb7,0x58,0x14,0x5b,0x07,0x2e,
-0xcd,0x36,0x97,0xa0,0xed,0xc7,0x67,0xaa,0x78,0x5d,0xbd,0x3f,0x54,0x2b,0x15,0x14,
-0x4e,0x34,0xe6,0xa5,0x2a,0xdc,0x4f,0xc8,0xf6,0x6a,0x5b,0x8b,0x87,0x76,0xde,0x6f,
-0x26,0x5d,0x0f,0xab,0x3b,0xf6,0xec,0xdb,0xf5,0x0c,0x36,0xde,0xf9,0x4b,0x09,0x95,
-0xad,0x5b,0x9d,0xfd,0xec,0x81,0x20,0x59,0x0c,0xda,0x10,0x4d,0x4c,0x12,0xf0,0x86,
-0x20,0x2e,0x6b,0x41,0x12,0x72,0xc2,0xf0,0x0f,0x08,0xb0,0x52,0x05,0xbb,0xdb,0x1e,
-0x85,0x45,0x9a,0xa8,0x52,0x2c,0xd1,0xe0,0xf9,0x9c,0x59,0x64,0x50,0x3d,0x14,0x64,
-0x9b,0xb3,0xf8,0xdd,0xb0,0x93,0x4a,0xe5,0xcd,0xca,0x56,0x3b,0x0b,0xec,0xa8,0x0c,
-0x6b,0xe0,0x2b,0x5b,0x41,0x5f,0x45,0x18,0xc1,0x70,0xc3,0x5d,0x28,0xb3,0x29,0xd7,
-0x56,0xf7,0xa6,0x26,0xcf,0x1f,0x27,0x9c,0x9e,0x16,0x70,0x6f,0x85,0x0f,0x34,0x33,
-0xa6,0x4d,0x1e,0xef,0x3d,0x1a,0xd9,0x3e,0xa8,0xf9,0x74,0x6d,0x89,0x6c,0x96,0x74,
-0xab,0xe6,0x93,0x46,0x66,0xdd,0xcc,0xb1,0xc4,0xd2,0x1b,0x05,0xdc,0x1a,0x8c,0x1e,
-0x3b,0xd5,0xbe,0xf9,0x9b,0x6e,0xe3,0xe2,0xd8,0x5b,0x6d,0x19,0x46,0xa3,0x2e,0x05,
-0xd7,0x1a,0xd3,0xdf,0xc2,0xe0,0x73,0x46,0x58,0xef,0xb2,0x9a,0x2e,0xbd,0xe1,0xb6,
-0xf1,0xbd,0xce,0x7b,0x7c,0xbe,0xe7,0xda,0xe7,0xd9,0xf9,0x2b,0xf9,0x05,0x48,0x6c,
-0x47,0x73,0xad,0xc3,0x23,0x31,0xa4,0xa6,0x48,0xd3,0x11,0x91,0x24,0x65,0x11,0x91,
-0xb1,0x24,0xa4,0x91,0x68,0x16,0x4c,0x69,0x29,0x36,0x00,0xd9,0x13,0x1a,0xa0,0x34,
-0xb1,0x58,0xa2,0x2d,0x09,0x51,0x19,0x44,0x8d,0x14,0xa6,0x46,0xc8,0xd2,0x12,0xa3,
-0x41,0x0a,0x49,0x09,0x32,0x12,0xca,0x90,0xa6,0x62,0xc4,0x36,0x65,0x84,0x2a,0x49,
-0x52,0x51,0x2d,0x93,0x08,0x8c,0x52,0x8a,0x7a,0x77,0x22,0xc9,0x18,0x4d,0x92,0x6d,
-0x5e,0x3a,0x64,0x04,0xc9,0x94,0xd4,0xc9,0xa5,0xa4,0xca,0x33,0x09,0xdd,0xcc,0x96,
-0x34,0x85,0x14,0x14,0xcd,0x24,0x64,0xa3,0x79,0xd7,0x02,0x60,0xa6,0xc9,0x18,0x8b,
-0x23,0x46,0x3c,0xeb,0xa1,0xdd,0x70,0x48,0x34,0x6c,0x68,0x81,0x52,0x0a,0x64,0x6c,
-0x29,0x91,0x8d,0xb6,0xdb,0x1b,0x75,0x14,0x9f,0xa9,0xec,0x81,0xae,0xd0,0x8c,0x69,
-0x1e,0x0f,0xdf,0xa5,0x57,0x8a,0x0c,0x63,0x47,0x94,0xbd,0xf5,0x48,0x25,0x72,0x6b,
-0xab,0xdb,0xea,0xef,0xc3,0xb5,0x69,0x8c,0xa9,0x8d,0xf0,0xb6,0x68,0x5b,0x46,0x4f,
-0xc7,0xcf,0x89,0x1a,0x3c,0x64,0x46,0x12,0xd7,0x65,0x84,0xae,0xaa,0x63,0xe7,0x2b,
-0xad,0x67,0xaa,0xf5,0x3c,0x4e,0x5d,0x53,0x65,0xb5,0xd4,0xab,0xb0,0x0a,0x0e,0x9b,
-0x66,0xce,0xb2,0x4d,0x9e,0xc7,0x31,0x44,0x92,0x52,0x58,0x34,0x9c,0xe1,0x82,0xac,
-0xdb,0x40,0xcc,0x26,0x86,0xa6,0x0e,0x43,0xf5,0x65,0x14,0x96,0x5a,0x8d,0x9a,0xac,
-0x0c,0x88,0x3e,0xf7,0xbd,0x21,0x5c,0x67,0xe8,0xeb,0x12,0xd3,0x3f,0xa6,0xf9,0xc2,
-0x5d,0x95,0xd1,0x81,0x6c,0xcd,0x19,0x2f,0xb5,0xbb,0xfe,0x3b,0x27,0x6b,0xdc,0xbf,
-0x82,0xb2,0x03,0x6d,0x83,0x5a,0x69,0xf4,0x8c,0x7b,0x2e,0x1c,0xdd,0x19,0x99,0x9a,
-0xe8,0x89,0x0c,0x00,0x2d,0x8c,0x5a,0x06,0xb3,0x6d,0x5c,0x83,0x8a,0xb0,0x30,0x53,
-0x28,0x61,0x83,0x30,0xee,0x42,0x79,0x10,0xee,0x95,0x2c,0xa2,0xba,0xec,0xac,0xfd,
-0x5b,0x8d,0xee,0xfb,0xe8,0x79,0xd2,0xe5,0xaa,0x52,0xb1,0x33,0xc6,0xb3,0xb4,0x6b,
-0xde,0xd1,0xaa,0xf5,0x52,0x28,0xa8,0x44,0x08,0x70,0x83,0xb7,0x9d,0x2c,0x46,0x6b,
-0x33,0xb6,0xa9,0xc6,0xb3,0x7d,0x26,0x44,0x36,0x1c,0x3e,0x82,0xec,0x7c,0xf4,0xa7,
-0x14,0x48,0xf0,0x9a,0xf0,0x86,0x89,0xda,0x1e,0x86,0xf2,0xdd,0x04,0x44,0x6e,0x58,
-0x28,0xc2,0x92,0x6b,0x68,0xad,0xb8,0x9a,0xbf,0x7c,0xbf,0x3a,0xca,0xe1,0x8c,0x7d,
-0x63,0xe6,0x6b,0xe0,0x5c,0xe3,0x4f,0xac,0x67,0x26,0xe7,0xb2,0x87,0x94,0x86,0x23,
-0xab,0xd6,0xf1,0xbc,0x74,0x3a,0x06,0x73,0x6f,0x7d,0xf0,0xae,0x2b,0x12,0x8e,0xd4,
-0x3d,0xec,0x3c,0xd1,0xcd,0x69,0xea,0x50,0xe7,0x52,0x78,0xe1,0x1c,0x63,0xc6,0x36,
-0x36,0xe2,0xdc,0xe7,0x8a,0xce,0x86,0xa6,0x3e,0x93,0x1b,0x41,0xbf,0x9d,0xaf,0x68,
-0x8b,0x0d,0x7c,0x8a,0x97,0xdd,0x02,0x40,0x34,0xc8,0x21,0xbd,0x35,0x00,0xb0,0xc0,
-0x1a,0xff,0x3c,0x1b,0x7b,0xe3,0x5d,0xf1,0x47,0x5d,0xd8,0x80,0x30,0xda,0xc1,0x64,
-0x3d,0xf2,0x0c,0x95,0x94,0xb1,0x49,0x0f,0x53,0x9d,0x58,0x91,0x62,0xc6,0x51,0xd1,
-0x89,0x6c,0xad,0x0d,0xd4,0xee,0xa8,0x4c,0x43,0x20,0x3e,0xbe,0x1a,0xc0,0x71,0x04,
-0x6f,0xec,0x5a,0x2b,0x9e,0x1f,0x69,0x5d,0xbc,0xce,0x68,0x02,0x2a,0x95,0x7a,0xef,
-0xc7,0x25,0x77,0xd4,0x24,0x7b,0x91,0xa6,0x61,0xd4,0x2e,0x08,0x34,0x02,0x89,0x00,
-0xa0,0xe9,0x22,0x1f,0xb6,0xf9,0x6b,0xdf,0xa5,0x11,0x6a,0xd1,0x44,0x22,0x1c,0x4a,
-0x2c,0xc8,0x6c,0xc3,0xd3,0xe2,0xda,0xa8,0xd8,0x1d,0xda,0x61,0x99,0xdd,0x52,0x5a,
-0x41,0x76,0xe7,0x1d,0x05,0x4f,0x0a,0x7b,0x46,0x2d,0xf9,0xdb,0x8f,0x08,0xd0,0x2f,
-0x16,0xad,0x4e,0xa1,0x6d,0x35,0xbd,0x86,0x21,0xb5,0xa1,0x7b,0x5a,0xad,0x4b,0xd0,
-0xdb,0x37,0xdd,0x10,0x74,0x5b,0x68,0x66,0x15,0x13,0x39,0x2c,0x2a,0x42,0x10,0x09,
-0x1e,0x1d,0x38,0x26,0xd9,0x69,0x9d,0x9e,0x21,0x3c,0x42,0x20,0xc6,0x34,0x28,0x67,
-0x85,0x56,0xc6,0x56,0x8a,0x82,0xf8,0xcb,0x46,0x68,0x54,0x15,0xa4,0xa8,0xc3,0x1b,
-0x48,0x75,0xb1,0xe7,0x51,0x2d,0xc1,0x9b,0x7d,0xa5,0x30,0xf2,0xc3,0xb3,0x42,0xe3,
-0x15,0xb3,0xb0,0xb0,0xd0,0x1d,0x6f,0x34,0x62,0x54,0xd2,0x2e,0xd2,0x46,0xcc,0x23,
-0x45,0x98,0x0b,0x39,0x80,0x86,0xd2,0x34,0x69,0x46,0x8a,0x62,0x6d,0x21,0x8f,0x56,
-0x0a,0x9a,0x12,0xa6,0x59,0xab,0x5e,0x16,0xad,0x68,0x31,0x68,0x61,0xe9,0xd4,0x03,
-0x57,0xab,0xcb,0x5b,0x54,0x11,0x4d,0xb1,0x46,0x04,0x7b,0xa7,0xab,0x03,0x7d,0x88,
-0x21,0x5d,0xa3,0x16,0x89,0x22,0xd6,0x9e,0xf1,0x0b,0x3d,0x6a,0x24,0x05,0x34,0x36,
-0xd8,0x78,0x5f,0x6f,0x12,0xcf,0x4f,0x79,0xb4,0xfc,0x14,0xfd,0x21,0x1f,0x77,0xdf,
-0x84,0xa0,0x76,0xd9,0x28,0x92,0x48,0x15,0x4d,0x14,0x19,0x9a,0xfb,0xa1,0x9e,0x30,
-0x13,0xe7,0x70,0x40,0x09,0x71,0xf3,0x4c,0x53,0x5d,0xc1,0x88,0x57,0x66,0xe7,0x69,
-0x7d,0xa2,0x53,0x38,0xda,0xcb,0x4b,0xb6,0x3b,0x07,0x56,0x98,0x2e,0x44,0x4c,0x07,
-0x5a,0xd7,0x7f,0x3d,0x97,0xb3,0x5b,0x49,0xb6,0x96,0xbf,0x83,0x81,0x60,0x0b,0x11,
-0xb0,0x19,0x75,0x24,0x0d,0x0d,0x58,0x43,0x7e,0x9f,0x6f,0x5e,0xed,0x92,0xb4,0x9b,
-0xac,0xc2,0x35,0x69,0x2f,0x56,0xb4,0x86,0x29,0x46,0x5e,0x55,0x75,0x56,0xc3,0x0c,
-0x30,0xf9,0x76,0x0f,0xe4,0xce,0xff,0x9f,0xbc,0x06,0xd4,0x6d,0x7d,0x83,0x38,0xd0,
-0xd7,0x7f,0x7c,0x96,0x16,0x7b,0xf6,0xdf,0x25,0xe6,0x1f,0xa6,0xa8,0x7c,0x73,0xad,
-0x2b,0x0f,0x18,0x81,0x1f,0xbe,0x03,0xbe,0xec,0x1d,0xba,0x68,0xec,0x24,0x78,0xda,
-0xf7,0x95,0xab,0xeb,0x23,0x5b,0x7a,0xb5,0xbd,0x1a,0xab,0x58,0xb5,0x46,0xaa,0xbe,
-0xaa,0xb9,0xab,0x15,0x6b,0xd5,0x5d,0x56,0x57,0x8b,0x6f,0x45,0x6a,0xf2,0x6d,0x5a,
-0x30,0x40,0x46,0x03,0x69,0x10,0xf2,0xcd,0x7c,0x28,0x3a,0x09,0x1c,0x08,0x88,0xe3,
-0x89,0x7e,0x59,0xb9,0x43,0x52,0x00,0x42,0x4b,0x3e,0x69,0xa4,0xac,0x2a,0x69,0x77,
-0x6a,0x20,0xb2,0x85,0xc6,0x12,0xbd,0x51,0x2d,0x3c,0xb7,0x56,0x60,0xcb,0xd8,0x65,
-0x0c,0x6a,0xec,0xe2,0xc2,0x5c,0xb1,0x05,0x30,0x2e,0x92,0x0b,0xb6,0xc2,0x9c,0x6d,
-0x48,0x5f,0x7e,0xaa,0xde,0xcf,0xab,0x7b,0x0f,0xc7,0x68,0x6c,0x35,0xbc,0x3c,0xad,
-0x3e,0x5e,0xd7,0xb8,0x0a,0x35,0x97,0x38,0x1d,0x73,0x43,0x40,0x7a,0xe1,0x69,0x3d,
-0x03,0x36,0xab,0x49,0x85,0x65,0x83,0x6b,0x15,0x88,0x40,0x10,0xc0,0x42,0x84,0x4e,
-0x2c,0xb0,0xad,0x94,0x1e,0xd7,0x5e,0xab,0xd3,0x48,0xe7,0x16,0x17,0x18,0xe4,0xa1,
-0x24,0x92,0x17,0x22,0xa6,0x6f,0x40,0x70,0xc5,0xe3,0x27,0x29,0x6c,0x60,0x47,0xae,
-0x2b,0xd0,0xd2,0x18,0xcf,0x1c,0x4d,0x39,0x87,0xa0,0xc2,0x3c,0xdb,0x81,0xb1,0x23,
-0x40,0x80,0x79,0xe7,0xb8,0xd1,0x6d,0x77,0xe2,0x28,0xc3,0x9e,0x35,0xc3,0x4d,0xae,
-0xca,0x23,0x66,0x28,0x52,0x41,0xa1,0xef,0xc4,0xa1,0x8e,0xe2,0x7a,0xa1,0xbe,0xfc,
-0x90,0xe0,0xb2,0xe2,0x85,0x1a,0x02,0x34,0x0c,0x7b,0x56,0xe5,0xc6,0xb4,0xae,0xbf,
-0x28,0x8d,0x81,0x76,0xb7,0x06,0xd3,0x15,0x36,0xce,0x98,0x75,0xa2,0x0f,0x5e,0x7c,
-0xba,0xbc,0xaa,0x0f,0x2f,0xd8,0xc5,0x73,0x83,0x7f,0x1a,0x85,0x92,0xe7,0x7f,0xcb,
-0xce,0xf6,0xf7,0xaf,0xb6,0x9e,0xe8,0x32,0x7a,0xd0,0x9e,0xa4,0x0d,0x7e,0x5f,0xe5,
-0xf5,0xd3,0xe6,0x81,0xe8,0x78,0xed,0x21,0xc3,0x01,0xbf,0xa0,0xf2,0xc5,0xa3,0x5e,
-0x8f,0x2a,0x8e,0x97,0x66,0x6a,0x9a,0xd1,0xbf,0xe5,0xf3,0x62,0xf7,0x32,0x3d,0xce,
-0xc0,0x7c,0x2b,0x3e,0x2e,0x8e,0x97,0x83,0xc6,0xb4,0xc3,0x27,0x0e,0x2a,0xef,0xc1,
-0x33,0x79,0x6f,0xda,0x0d,0x10,0xce,0xb0,0x64,0xdc,0xdd,0xc8,0xb8,0xc9,0x9c,0x20,
-0xb4,0xa9,0x2f,0x1f,0x53,0xa2,0x17,0x27,0xdc,0xde,0x92,0xc6,0x09,0x61,0xab,0x78,
-0x52,0x3a,0x85,0xa3,0x18,0xb3,0x17,0x70,0x2f,0x52,0xbb,0xf3,0xea,0x18,0x2c,0xf1,
-0x41,0xbd,0x22,0xae,0x6d,0x1e,0xcb,0x5d,0xf0,0xe1,0x24,0xa6,0x74,0xe9,0xee,0xdb,
-0x1d,0x54,0x9e,0xf1,0xb1,0xac,0x2f,0xb0,0x45,0xce,0xb3,0x88,0x6a,0xca,0x5d,0x31,
-0xb6,0xc1,0x93,0x8d,0x54,0x69,0x67,0x5e,0xce,0xdc,0x79,0x9a,0xd6,0x8c,0x20,0x0d,
-0x39,0x63,0x2e,0xe7,0x94,0x98,0xba,0x4d,0xd0,0x29,0xdd,0x51,0xc2,0x12,0x33,0xdd,
-0x25,0x80,0x5f,0x41,0xa2,0x06,0x4c,0x98,0x02,0x03,0x0e,0x46,0x59,0xa2,0x9a,0x6d,
-0x19,0xb5,0x85,0xb5,0x08,0xcf,0xaf,0x5e,0x8b,0x07,0x9f,0xaf,0x75,0x8c,0xc6,0x5d,
-0xbc,0x74,0x59,0xb6,0x7b,0xf1,0xab,0xa4,0xdd,0x8e,0x1f,0x52,0x22,0xa7,0x25,0x24,
-0x2a,0x6a,0x87,0xa0,0x73,0x7a,0x8c,0x9b,0x5c,0xbb,0xb5,0x86,0xda,0x3a,0x62,0x6c,
-0xd2,0xa8,0x44,0x16,0x3c,0x5f,0x02,0x44,0xd3,0xbd,0x7c,0xe8,0x30,0x8d,0x98,0x6c,
-0x4f,0x24,0xa4,0x41,0x21,0x16,0x97,0x08,0xbe,0x20,0x97,0xd8,0x63,0x42,0x3a,0xd4,
-0x2f,0x68,0xae,0x12,0x61,0x5e,0x3e,0xeb,0x82,0x1b,0x10,0x3c,0x05,0x48,0x69,0x35,
-0xd2,0x79,0x1d,0x66,0x14,0xf6,0x18,0x3e,0xa0,0x6d,0xc7,0xe0,0xe3,0xd3,0xb8,0x44,
-0xc5,0x93,0xaa,0x1f,0x03,0x1b,0x69,0x8c,0x63,0x7c,0x21,0x0c,0xdf,0xdf,0x1c,0xeb,
-0x95,0x83,0xaa,0x1b,0xae,0x5a,0xb3,0x63,0x7d,0xdd,0xbb,0x71,0x27,0x4c,0x20,0x79,
-0x99,0xcb,0x2c,0x90,0xf2,0x8e,0x8b,0x16,0x2f,0x39,0xe3,0xf1,0xdf,0x55,0xc6,0x74,
-0x56,0x25,0x56,0xf1,0x1a,0x69,0x20,0xb9,0xa4,0x8a,0x19,0xb9,0xd4,0xb8,0xb6,0x28,
-0x42,0x38,0x40,0xf8,0xb7,0xd0,0x8c,0x65,0x62,0xbb,0x14,0x63,0xdd,0x0e,0x4b,0x93,
-0x47,0x25,0x85,0x02,0x82,0x3b,0x04,0x91,0x12,0xa5,0xd9,0x1f,0x5b,0xbd,0x34,0x79,
-0x89,0x99,0x96,0x2c,0x9b,0xd3,0xe5,0x3c,0x74,0xc4,0x3c,0x85,0x9d,0x08,0x30,0xee,
-0xe0,0x75,0x25,0x6d,0x90,0x8b,0x8a,0x92,0x57,0x5b,0x4b,0xb4,0x5c,0x84,0x83,0x55,
-0x4d,0x8e,0xa0,0x50,0xd0,0x36,0x2a,0x2e,0x42,0x1e,0xc8,0x6c,0xd8,0xdb,0x16,0x42,
-0x0c,0xb9,0x71,0x20,0x04,0xad,0x92,0xd0,0x54,0xc1,0xe6,0x16,0x88,0xa9,0x01,0x48,
-0x13,0xbc,0x01,0x1d,0xc4,0x14,0xa9,0x51,0x84,0x03,0x2e,0x93,0xb6,0x5f,0x4a,0xbb,
-0x41,0x79,0x15,0xe2,0xee,0xc0,0x5e,0xb3,0xa1,0x8c,0xa5,0x70,0x69,0x19,0x50,0x22,
-0x85,0xa9,0x94,0x0c,0x45,0xc1,0x17,0x71,0x8d,0x00,0xa9,0x5c,0x6c,0xad,0xc8,0x04,
-0x0b,0xb1,0x0d,0xd0,0xce,0x8b,0x93,0x2a,0xf1,0x75,0x12,0x94,0xcc,0x61,0x53,0x45,
-0xc7,0xdf,0xbf,0x6e,0x73,0xb2,0x31,0xab,0x93,0xa7,0x56,0xca,0x2d,0x1f,0x22,0xb2,
-0x31,0x54,0x2a,0xa8,0x0b,0xd5,0x62,0xbc,0x06,0xf8,0x8b,0xd8,0x65,0xa0,0x80,0x8f,
-0x3c,0x60,0xd6,0x47,0x46,0x80,0xda,0x48,0xb0,0xed,0xf3,0xb5,0x8f,0x0b,0xe8,0x27,
-0x3c,0x1b,0x2c,0xd1,0x7d,0x38,0xe1,0x7d,0xdb,0xb2,0x11,0x32,0xf5,0x6f,0x58,0x65,
-0x80,0x51,0xc1,0x0e,0xfc,0xc1,0xae,0x5a,0xb8,0x62,0x87,0x61,0x20,0x04,0xa2,0x42,
-0xb6,0xfa,0x68,0xf8,0xd6,0xe9,0x65,0xa4,0x0c,0x1f,0x18,0x7b,0x59,0x40,0xb1,0x96,
-0xf1,0x61,0xcd,0xb4,0x9b,0x70,0x32,0xef,0x50,0xa4,0xf7,0x6f,0x8e,0x55,0xe0,0x2c,
-0xc0,0x59,0x90,0x19,0x91,0x23,0x56,0x84,0x90,0xd8,0x1a,0xdc,0x7b,0x66,0x71,0x10,
-0x43,0x56,0xfb,0x80,0x39,0x69,0xb1,0xb1,0x78,0x74,0xd1,0xa0,0x63,0x6c,0xce,0x8e,
-0xb2,0xae,0xd7,0x3a,0x66,0xfa,0x9d,0xc3,0xab,0x45,0xf3,0xa2,0x5a,0xcf,0x73,0xcf,
-0x73,0x02,0x57,0x03,0x9f,0xa5,0x10,0x71,0x63,0x3b,0xf3,0xdf,0x5a,0xab,0x46,0x93,
-0x6a,0x10,0xe4,0xd1,0xdf,0xb7,0x28,0x4f,0x28,0x48,0x72,0x1b,0xf3,0xd9,0x36,0x40,
-0xc3,0xbf,0x8d,0x58,0x13,0x86,0x72,0xd4,0x4d,0x9b,0xaa,0x32,0x89,0xc7,0x77,0x71,
-0x12,0xee,0xaa,0xb1,0x58,0xb2,0x26,0x0e,0xb0,0x29,0xe8,0x55,0x03,0xc1,0x8d,0x0c,
-0x06,0x3d,0x99,0x88,0x1d,0xbc,0xa6,0xc3,0x31,0x0d,0xc5,0xa8,0xdf,0x86,0xf5,0x5e,
-0xd9,0x40,0xc7,0xd8,0xcb,0x38,0x48,0x65,0x31,0x36,0x27,0xf9,0x0e,0x7e,0x76,0x4f,
-0x3e,0x2f,0x6d,0x74,0x26,0x8c,0x1b,0x3b,0x69,0xd8,0xa5,0x60,0x67,0x29,0xdf,0x89,
-0xe2,0x96,0x40,0x7a,0xdc,0xfb,0x63,0x53,0xb9,0x1e,0x86,0xf5,0xc0,0xcd,0x93,0x68,
-0x6c,0x47,0x96,0x46,0xca,0x48,0xe9,0x08,0xbf,0x5a,0xbc,0xe0,0x39,0x66,0xdd,0xd4,
-0x11,0xca,0x1b,0x61,0xcb,0x6e,0xb0,0xee,0xeb,0x66,0x78,0xa9,0x9d,0x21,0x86,0xb4,
-0x3c,0x62,0xc7,0x26,0xa4,0x48,0x56,0xbc,0x67,0xd1,0x0a,0x4f,0x97,0x97,0x19,0xcf,
-0x6e,0xa1,0xc4,0x00,0xa1,0xbc,0x5c,0xce,0x45,0x28,0x7d,0xd0,0x68,0x95,0x12,0x47,
-0x79,0x4f,0xd2,0x91,0x26,0xe4,0x3a,0x74,0x05,0x87,0x57,0x3a,0xef,0xf3,0xa1,0x5b,
-0x6e,0xce,0x48,0xc1,0xdb,0x39,0xb1,0xd5,0x4b,0xd2,0x6d,0xc9,0x4a,0x94,0xa3,0x1a,
-0xdf,0x17,0x86,0x2e,0xe8,0x89,0x7d,0xc9,0x3d,0x6f,0x2b,0x7a,0x5f,0x43,0xa7,0x61,
-0x41,0x6e,0x33,0xad,0x43,0x54,0xef,0x82,0x2c,0x6d,0x27,0x9b,0x25,0xef,0xe4,0xa7,
-0xd9,0x5e,0x0f,0x1f,0x5a,0xbe,0x42,0xe2,0xfb,0x32,0x30,0xbb,0x5a,0x18,0x68,0xc5,
-0xd5,0x85,0xe4,0xb5,0x36,0x57,0x78,0x45,0x12,0x00,0x0c,0xb1,0x21,0x04,0x33,0xcd,
-0xee,0x03,0x94,0x44,0x6e,0x94,0xe8,0x35,0xed,0x96,0xcd,0x5e,0x34,0x35,0xb9,0xcc,
-0x21,0x48,0x8e,0x6d,0x63,0x02,0xab,0x53,0x3a,0xb8,0xb2,0xd4,0x37,0xe3,0x5b,0x4b,
-0xa2,0x8f,0x3e,0x27,0xb0,0xb4,0xc7,0x40,0x49,0xb4,0x18,0x47,0x5c,0x3b,0x10,0x65,
-0x76,0x68,0xe1,0x96,0x6d,0xb6,0x77,0xb1,0x15,0x96,0xcd,0x06,0x30,0xa1,0x2d,0x4a,
-0x84,0x36,0x0d,0x36,0xe9,0x99,0x72,0x11,0x66,0x96,0x62,0xe8,0x8d,0x34,0xf7,0xb9,
-0x33,0x08,0x65,0x05,0x07,0x08,0x75,0xaa,0x98,0x28,0x4a,0x68,0x84,0x42,0x48,0x9e,
-0xe6,0xca,0x20,0xce,0x3d,0xe7,0xd1,0x9a,0x1d,0xd8,0x2b,0x3c,0xf6,0xf9,0xd7,0x69,
-0x18,0x2f,0xcd,0x5e,0x82,0xd5,0x27,0xae,0xee,0xce,0x48,0x73,0xb6,0xb7,0x3c,0x49,
-0x5f,0x7e,0xcb,0x51,0x28,0xd3,0x8c,0x68,0xb5,0x9e,0x25,0x75,0x63,0x9b,0xe1,0x44,
-0xaa,0x8b,0x61,0x81,0x37,0xa4,0x7b,0xce,0x87,0x11,0x19,0xd1,0x19,0x59,0x06,0xe2,
-0xef,0x2e,0xd0,0x0d,0x99,0xc2,0x7e,0xc7,0x80,0x35,0xec,0xc8,0x7d,0xf3,0x5b,0xfa,
-0xdc,0xa0,0x2e,0xe6,0xcd,0x73,0xc8,0xcf,0x1b,0xd6,0x00,0xe8,0x68,0x8d,0x1d,0x8d,
-0x98,0xed,0x15,0x2d,0xd8,0xa6,0x9e,0x8e,0x10,0x8c,0x76,0xed,0x30,0x58,0x01,0xb6,
-0x66,0x4c,0x65,0x84,0x91,0x82,0x16,0x13,0x2e,0x4e,0x45,0x11,0xde,0x7d,0xc6,0xee,
-0xde,0x96,0x93,0x1a,0x37,0x9c,0x63,0x4e,0x73,0xbb,0xa7,0x43,0x81,0x31,0xa6,0xd2,
-0x69,0xf8,0x96,0xb6,0x6c,0xb1,0xdc,0x4d,0x4d,0x37,0xd7,0x90,0xba,0xb1,0xc5,0xd0,
-0x8b,0x52,0x31,0xd2,0x86,0xad,0x6c,0xf2,0x22,0xa2,0x5d,0x44,0x36,0x42,0xf4,0xe5,
-0x2c,0xc0,0xb7,0x50,0xb3,0xce,0x6d,0x84,0xb4,0x63,0x13,0x46,0xcc,0x14,0xeb,0x62,
-0x50,0xfc,0x6b,0xb2,0x45,0xa1,0xe1,0x86,0x7a,0xd7,0x5d,0x2f,0x96,0x17,0x37,0x0b,
-0x98,0x2d,0x07,0x58,0x24,0xa4,0x9f,0x21,0x7b,0x40,0x64,0xe1,0xb4,0x30,0x19,0xfa,
-0x3c,0x53,0xea,0xf6,0xc4,0x77,0x22,0x10,0x1c,0x90,0x37,0xe5,0x2d,0xb0,0x50,0xba,
-0xb3,0x8f,0xd2,0x13,0xec,0x88,0xf2,0xa0,0x57,0xa8,0x90,0x69,0xb7,0xb3,0x28,0xf7,
-0xee,0xc5,0x16,0xb6,0x7e,0xa5,0xee,0xfb,0x13,0x07,0xce,0xef,0xac,0x26,0xcd,0x0f,
-0x3c,0xea,0x67,0x87,0xfa,0x81,0x95,0xb2,0x46,0x96,0xf7,0x10,0xdb,0xed,0x37,0xc7,
-0xd7,0x91,0x7d,0x2e,0xaa,0xcc,0x0f,0x1e,0x2d,0x47,0xa4,0xac,0xa8,0xa9,0xc5,0x99,
-0xb4,0x7b,0xdd,0x23,0x1b,0x10,0xd3,0xab,0x5a,0xb3,0x5b,0xd8,0xc5,0x9e,0xf3,0x51,
-0x43,0x5a,0xbc,0x5e,0x1e,0x2f,0x4e,0xf7,0x35,0xb7,0x4c,0x34,0xba,0x93,0x45,0x0c,
-0xe2,0xaa,0x70,0xa3,0x5d,0xee,0xfc,0x0a,0xb5,0xd0,0xd0,0xcd,0xdc,0x34,0x12,0x75,
-0x02,0x21,0x34,0x70,0xd0,0x6e,0x44,0xcd,0x6e,0x5f,0x58,0xf3,0x08,0x34,0x16,0xdc,
-0xc5,0x38,0x09,0x04,0x3b,0xa9,0x9a,0x0c,0x31,0xdc,0xb6,0xf6,0x0d,0x23,0x2c,0xce,
-0xa3,0x50,0xd8,0x80,0x93,0x66,0x13,0x1d,0x34,0x8d,0x36,0xd2,0x06,0x2d,0x8d,0x12,
-0xcd,0x83,0x81,0xfc,0x65,0x66,0xe4,0xf5,0xbd,0xc5,0xad,0xf6,0xdb,0x25,0x7c,0x7b,
-0xf5,0x05,0xfb,0xc5,0x1e,0x8d,0xc0,0x60,0x4e,0x0e,0xc5,0xa8,0x3d,0x34,0x23,0x6e,
-0x2b,0x0c,0x3e,0x48,0x1e,0x3f,0x5c,0x1d,0x75,0x07,0xee,0xfc,0xad,0x01,0x98,0x4d,
-0x3c,0x35,0x08,0xd6,0xa7,0xcd,0xe1,0x10,0x46,0xa1,0x1d,0xb1,0xda,0x85,0x9c,0x65,
-0xfc,0x88,0x79,0x62,0xef,0x7c,0xfd,0xa1,0x8d,0x98,0x4b,0x6c,0xc6,0xcd,0xef,0x28,
-0x0a,0x33,0xd1,0xfa,0xa1,0x33,0xc5,0xd6,0xba,0xd4,0x29,0xef,0x08,0xb5,0x73,0x02,
-0x49,0x02,0x7a,0x70,0xda,0x6d,0x59,0xb2,0xa2,0xd3,0x63,0x7b,0x13,0xce,0xb1,0x16,
-0xd7,0xc0,0xfa,0x15,0x36,0x0e,0x14,0x17,0xba,0x4e,0x09,0x7c,0x41,0x84,0x17,0x33,
-0x02,0x0c,0xf4,0xce,0x33,0x13,0x46,0xc6,0xad,0x0c,0x62,0xe0,0x69,0x66,0xb2,0xc9,
-0xdc,0x53,0x83,0x19,0x88,0x75,0x22,0x21,0x50,0x9f,0x68,0xf5,0x07,0xa3,0xfe,0x1e,
-0x43,0x28,0xe0,0x73,0xc4,0xa4,0xb6,0xaf,0x29,0x53,0x2c,0xd6,0xb6,0xd3,0xf1,0x50,
-0xd9,0x5d,0x21,0xe3,0x43,0x63,0xde,0x3b,0xa4,0xf9,0x62,0xf7,0x91,0x23,0x83,0x22,
-0xbd,0xf4,0xb2,0x66,0x9b,0xa9,0x40,0xbf,0x47,0x19,0x43,0x8b,0x91,0x28,0x70,0xff,
-0x3a,0x17,0x5d,0xf0,0xb7,0xc4,0x34,0x7f,0x6e,0xff,0x38,0x11,0xb2,0x11,0x7c,0x8c,
-0xfa,0xd1,0x02,0x40,0xaa,0x75,0x45,0x05,0xe5,0x6d,0x6c,0xb0,0x83,0x05,0x5a,0x88,
-0x22,0xeb,0x3c,0xad,0x26,0xde,0xde,0xf0,0x82,0x3c,0xad,0xcd,0xf6,0x28,0x2d,0xf5,
-0x8b,0x2d,0xc5,0xab,0xd1,0xda,0x9a,0x97,0x1c,0x3a,0x10,0x04,0x36,0xd0,0xbc,0xab,
-0xc0,0xb6,0x73,0x8d,0x1d,0x21,0x8e,0xe2,0xc3,0x14,0x14,0xbc,0x12,0x8c,0xbc,0x4b,
-0x02,0x14,0xa0,0xcd,0x51,0xdb,0x4e,0xf0,0x19,0x84,0xa0,0x38,0xeb,0xb0,0x7a,0x21,
-0x5a,0x1c,0x6f,0xbd,0x91,0xa1,0x93,0x91,0x69,0x12,0xba,0x74,0x65,0xb6,0xdc,0xd1,
-0xe5,0xa0,0xbb,0x52,0x28,0x59,0xe9,0x66,0xd0,0xab,0xbc,0xb0,0x77,0x63,0xa3,0x6f,
-0x08,0xe4,0x67,0x34,0x2c,0x29,0x9f,0x4c,0x72,0xa2,0x2c,0x15,0x84,0xd4,0x55,0x44,
-0x10,0x07,0x2b,0x38,0xa7,0x34,0x0c,0xac,0xfa,0x3c,0xc1,0x5d,0x96,0xce,0x8a,0xa4,
-0x23,0x94,0xf0,0x24,0x09,0x30,0x76,0xe1,0xaf,0x1e,0x22,0xa5,0x98,0xa3,0x45,0x08,
-0xc0,0x35,0x9a,0x6a,0xe7,0x38,0xa3,0xe3,0x34,0xf7,0x5c,0x2a,0xee,0x21,0xb5,0x5d,
-0x5d,0xc6,0xcd,0x85,0x9d,0x07,0x8e,0xf8,0x81,0xda,0xb8,0x1a,0x56,0x64,0xe7,0xe9,
-0x93,0x30,0x23,0xb8,0x48,0xf4,0xe2,0x56,0x78,0xd3,0x49,0x12,0x49,0xa0,0xd0,0xc4,
-0x4c,0x20,0xcc,0x77,0x5c,0xce,0xb7,0xd2,0xc5,0x1c,0x21,0x3a,0x10,0xca,0x21,0xc0,
-0x20,0xb4,0x94,0x61,0x6f,0x10,0xe4,0x55,0x3b,0x82,0x63,0x36,0xec,0x63,0x07,0x06,
-0x80,0xc3,0x15,0x27,0x04,0x2b,0x97,0x0f,0xe0,0xe6,0x60,0x16,0x62,0x7a,0x7a,0x8f,
-0x5c,0xcd,0x48,0x92,0x10,0x86,0x02,0xc7,0x0a,0x8a,0x2f,0x3d,0x19,0xf5,0x98,0xa2,
-0xb7,0x79,0xea,0xda,0xfd,0x4c,0xba,0x5e,0xab,0xc9,0x1b,0xf8,0xa6,0x4c,0x0f,0x45,
-0x15,0x53,0xf1,0x41,0xc4,0xb1,0x11,0x5d,0xe0,0xcc,0xb1,0x16,0x49,0x13,0x2d,0x97,
-0x96,0xd2,0x44,0xb1,0x68,0x1c,0xa1,0xe3,0x69,0x8e,0xdb,0xce,0xba,0x3d,0x96,0x4b,
-0x7b,0x71,0x50,0x92,0xc3,0xa6,0x5a,0xbf,0x1d,0xef,0x78,0x83,0x4d,0x78,0xa3,0x17,
-0x09,0xad,0xfa,0x58,0xf8,0x91,0x00,0x03,0xc9,0x46,0xae,0x9d,0xa3,0x7e,0xe6,0x28,
-0x44,0xf0,0xff,0x3e,0x15,0x4d,0x60,0x94,0x37,0x9e,0x7c,0xe7,0xcf,0xac,0x86,0xba,
-0xf9,0xa2,0xf8,0xa3,0x6d,0x7d,0x51,0xa2,0xcb,0x3c,0x7c,0x9c,0x5a,0x0c,0x1b,0x6c,
-0x42,0x40,0xad,0x52,0x67,0x1b,0x6c,0x85,0x50,0xdc,0xc9,0x85,0xa3,0xe1,0xbb,0x1d,
-0xd9,0x97,0x61,0x98,0x55,0x69,0x25,0x7b,0xc6,0x82,0x75,0xe0,0xfa,0xed,0x18,0xd0,
-0x52,0x5a,0xab,0xdf,0x79,0x26,0x92,0x14,0x78,0xdc,0x3b,0x93,0x6c,0x0a,0x0c,0x6e,
-0xb6,0xab,0x9c,0x5f,0x1b,0x66,0xe1,0x74,0x2d,0x63,0x68,0x08,0xac,0xfa,0xcc,0xd8,
-0xbe,0xda,0x12,0xd8,0x61,0x08,0xe0,0xda,0x1d,0x9c,0x6c,0x58,0x91,0x0d,0x31,0x36,
-0xc1,0xb0,0xbd,0xad,0xbd,0xfb,0xdb,0x0b,0x2d,0x58,0x63,0x18,0x4d,0x5d,0x0d,0xa5,
-0x33,0x34,0x29,0x85,0x33,0xac,0x05,0xcb,0x48,0x4c,0xdb,0x3e,0xbe,0xad,0xe9,0xe9,
-0xa0,0xcf,0x47,0x35,0xb5,0xf4,0x38,0x93,0xc0,0x02,0x1e,0x7a,0x4c,0x45,0xb2,0x45,
-0xe5,0xb1,0xa0,0x64,0xe9,0x02,0x66,0xe8,0x11,0x5f,0x62,0xc2,0x06,0xda,0x35,0xce,
-0x2e,0x2b,0x85,0x46,0xb7,0xd7,0x6d,0x6a,0xeb,0xc3,0xd9,0xbd,0xeb,0xa1,0x4c,0xdb,
-0x96,0x20,0x08,0xcb,0xb9,0x1b,0x52,0x70,0x49,0x9c,0xca,0xa8,0xac,0x18,0x88,0xef,
-0x0b,0x04,0x16,0x04,0x1d,0x92,0x9e,0x15,0xc2,0x2c,0xc4,0xf5,0x71,0x6e,0x8c,0x12,
-0x17,0xc2,0x10,0x11,0x42,0xb4,0x3b,0x6f,0x76,0xf9,0x31,0xa2,0x91,0xdc,0xb1,0x8b,
-0x69,0xe4,0xed,0x73,0x1e,0xd9,0x5f,0x08,0x6a,0x3d,0xaa,0x22,0x87,0x6c,0xdd,0x1e,
-0x31,0x7a,0xdd,0x00,0x34,0x59,0x9b,0x6f,0x4b,0x1f,0x73,0x1d,0x22,0xfb,0xb2,0xe9,
-0x68,0x14,0x79,0x95,0xa5,0x21,0xc9,0x04,0x0e,0xc4,0x0a,0x30,0x63,0x82,0x30,0xe8,
-0x1c,0xa0,0xa6,0xa6,0x1e,0x1c,0xaa,0x83,0x69,0xc4,0x0a,0x2e,0xc2,0x50,0xf8,0xf4,
-0x8c,0xae,0xa2,0xea,0x20,0x64,0x8c,0x3f,0xb3,0xd1,0xee,0x94,0xa2,0xf0,0x5d,0xe7,
-0xa5,0x7b,0x83,0x04,0x61,0x04,0x32,0x8a,0x64,0x6e,0xf5,0x32,0x0c,0xcb,0xa6,0x2e,
-0x91,0x62,0x48,0x30,0x47,0x53,0x46,0xe1,0xc0,0x90,0xdb,0x79,0x48,0x8c,0x94,0xba,
-0x44,0xdb,0x6d,0x9a,0xcf,0x52,0x26,0x41,0x2c,0x88,0x14,0xc2,0x44,0xab,0x2f,0xa9,
-0x03,0x76,0x83,0xed,0x9b,0xc5,0xd3,0xa7,0x43,0x15,0x63,0xc3,0x8a,0x73,0x8c,0x1c,
-0x6c,0xd5,0xf9,0x77,0x65,0xea,0x23,0x68,0x35,0xcf,0xa7,0x57,0x76,0x2a,0xe7,0x22,
-0x43,0x46,0x01,0x60,0x47,0xaa,0x78,0xde,0xcb,0xb9,0x6a,0xd0,0x8a,0xc0,0x5f,0xcc,
-0xc1,0x63,0x0b,0x42,0x25,0x0b,0x05,0x09,0xb5,0x17,0xd1,0x9b,0x26,0xa9,0xb7,0xc6,
-0x0d,0x33,0x97,0x83,0xb6,0xae,0x55,0x09,0x21,0x5b,0xa6,0x1e,0x17,0x59,0xc5,0x7d,
-0x64,0x83,0x4a,0xb3,0xf5,0xe3,0x68,0xba,0x56,0xa1,0x27,0x0c,0x4f,0xbb,0x97,0x67,
-0x6d,0x2c,0xb8,0x52,0x49,0x47,0xb6,0xf2,0x1c,0x31,0x22,0x32,0xa9,0xd2,0x42,0xb4,
-0xd6,0x68,0x68,0xd9,0x55,0x3d,0x5e,0x9a,0xb3,0x35,0x82,0x2d,0xba,0x6b,0x77,0x8d,
-0x50,0x3a,0x8e,0xfb,0x59,0x39,0xb1,0x9b,0xf0,0xf2,0x76,0x45,0x39,0x42,0x51,0x4a,
-0x90,0x51,0x38,0x80,0xf0,0xec,0x8c,0x60,0x81,0xcf,0x73,0x4d,0x2c,0xa5,0x53,0x46,
-0x23,0xd8,0x24,0x22,0xe8,0xb4,0x8d,0x1d,0x99,0xf3,0x56,0x5d,0x9f,0x2d,0xee,0x7c,
-0x61,0x83,0xee,0x1f,0xb7,0x41,0xa2,0x3a,0x5c,0xd8,0x99,0xda,0x9c,0x9d,0xb1,0xe0,
-0x02,0x15,0x24,0x90,0x0a,0x0d,0x5b,0xb0,0xfd,0xb6,0xe0,0x01,0x0b,0x7a,0x7d,0xb1,
-0x9d,0xb1,0x53,0x2b,0xd5,0xcf,0x36,0xe3,0x60,0x01,0x0b,0xf6,0x57,0xcd,0xf6,0xf4,
-0xe6,0x9f,0xfd,0x70,0x01,0x0a,0x63,0xcb,0x3b,0x9b,0x9d,0xff,0x6f,0xed,0xbe,0x5a,
-0x9e,0xea,0x80,0x04,0x2a,0xa5,0x81,0x46,0x30,0x01,0x0a,0x9d,0xcd,0xb3,0x3e,0x20,
-0x02,0x15,0x00,0x02,0x14,0xfc,0x6e,0x6c,0x63,0x72,0xce,0xfc,0x90,0xc1,0x09,0x08,
-0x50,0xff,0x17,0x72,0x45,0x38,0x50,0x90,0x2b,0xff,0xfd,0x6f,
-};
-#endif
diff --git a/include-full/copy-current.sh b/include-full/copy-current.sh
deleted file mode 100755
index 1ab393c..0000000
--- a/include-full/copy-current.sh
+++ b/dev/null
@@ -1,13 +0,0 @@
-# after .config setup, type "make prepare" to generate /include files
-# this step is no more required to build busybox, it is made automatically
-# in Android.mk (busybox_prepare module)
-
-cp ../.config ../.config-full
-
-cp ../include/applets.h ./
-cp ../include/applet_tables.h ./
-cp ../include/autoconf.h ./
-cp ../include/bbconfigopts_bz2.h ./
-cp ../include/bbconfigopts.h ./
-cp ../include/NUM_APPLETS.h ./
-cp ../include/usage_compressed.h ./
diff --git a/include-full/usage_compressed.h b/include-full/usage_compressed.h
deleted file mode 100644
index 185a580..0000000
--- a/include-full/usage_compressed.h
+++ b/dev/null
@@ -1,3942 +0,0 @@
-#define UNPACKED_USAGE "" \
-"\x45\x58\x50\x52\x45\x53\x53\x49\x4f\x4e\x20\x5d\x0a\x0a\x43\x68" \
-"\x65\x63\x6b\x20\x66\x69\x6c\x65\x20\x74\x79\x70\x65\x73\x2c\x20" \
-"\x63\x6f\x6d\x70\x61\x72\x65\x20\x76\x61\x6c\x75\x65\x73\x20\x65" \
-"\x74\x63\x2e\x20\x52\x65\x74\x75\x72\x6e\x20\x61\x20\x30\x2f\x31" \
-"\x20\x65\x78\x69\x74\x20\x63\x6f\x64\x65\x0a\x64\x65\x70\x65\x6e" \
-"\x64\x69\x6e\x67\x20\x6f\x6e\x20\x6c\x6f\x67\x69\x63\x61\x6c\x20" \
-"\x76\x61\x6c\x75\x65\x20\x6f\x66\x20\x45\x58\x50\x52\x45\x53\x53" \
-"\x49\x4f\x4e\x00\x45\x58\x50\x52\x45\x53\x53\x49\x4f\x4e\x20\x5d" \
-"\x0a\x0a\x43\x68\x65\x63\x6b\x20\x66\x69\x6c\x65\x20\x74\x79\x70" \
-"\x65\x73\x2c\x20\x63\x6f\x6d\x70\x61\x72\x65\x20\x76\x61\x6c\x75" \
-"\x65\x73\x20\x65\x74\x63\x2e\x20\x52\x65\x74\x75\x72\x6e\x20\x61" \
-"\x20\x30\x2f\x31\x20\x65\x78\x69\x74\x20\x63\x6f\x64\x65\x0a\x64" \
-"\x65\x70\x65\x6e\x64\x69\x6e\x67\x20\x6f\x6e\x20\x6c\x6f\x67\x69" \
-"\x63\x61\x6c\x20\x76\x61\x6c\x75\x65\x20\x6f\x66\x20\x45\x58\x50" \
-"\x52\x45\x53\x53\x49\x4f\x4e\x00\x5b\x2d\x71\x5d\x20\x5b\x2d\x6f" \
-"\x20\x4f\x46\x46\x5d\x20\x5b\x2d\x66\x20\x46\x52\x45\x51\x5d\x20" \
-"\x5b\x2d\x70\x20\x54\x43\x4f\x4e\x53\x54\x5d\x20\x5b\x2d\x74\x20" \
-"\x54\x49\x43\x4b\x5d\x0a\x0a\x52\x65\x61\x64\x20\x61\x6e\x64\x20" \
-"\x6f\x70\x74\x69\x6f\x6e\x61\x6c\x6c\x79\x20\x73\x65\x74\x20\x73" \
-"\x79\x73\x74\x65\x6d\x20\x74\x69\x6d\x65\x62\x61\x73\x65\x20\x70" \
-"\x61\x72\x61\x6d\x65\x74\x65\x72\x73\x2e\x20\x53\x65\x65\x20\x61" \
-"\x64\x6a\x74\x69\x6d\x65\x78\x28\x32\x29\x0a\x0a\x09\x2d\x71\x09" \
-"\x51\x75\x69\x65\x74\x0a\x09\x2d\x6f\x20\x4f\x46\x46\x09\x54\x69" \
-"\x6d\x65\x20\x6f\x66\x66\x73\x65\x74\x2c\x20\x6d\x69\x63\x72\x6f" \
-"\x73\x65\x63\x6f\x6e\x64\x73\x0a\x09\x2d\x66\x20\x46\x52\x45\x51" \
-"\x09\x46\x72\x65\x71\x75\x65\x6e\x63\x79\x20\x61\x64\x6a\x75\x73" \
-"\x74\x2c\x20\x69\x6e\x74\x65\x67\x65\x72\x20\x6b\x65\x72\x6e\x65" \
-"\x6c\x20\x75\x6e\x69\x74\x73\x20\x28\x36\x35\x35\x33\x36\x20\x69" \
-"\x73\x20\x31\x70\x70\x6d\x29\x0a\x09\x09\x28\x70\x6f\x73\x69\x74" \
-"\x69\x76\x65\x20\x76\x61\x6c\x75\x65\x73\x20\x6d\x61\x6b\x65\x20" \
-"\x63\x6c\x6f\x63\x6b\x20\x72\x75\x6e\x20\x66\x61\x73\x74\x65\x72" \
-"\x29\x0a\x09\x2d\x74\x20\x54\x49\x43\x4b\x09\x4d\x69\x63\x72\x6f" \
-"\x73\x65\x63\x6f\x6e\x64\x73\x20\x70\x65\x72\x20\x74\x69\x63\x6b" \
-"\x2c\x20\x75\x73\x75\x61\x6c\x6c\x79\x20\x31\x30\x30\x30\x30\x0a" \
-"\x09\x2d\x70\x20\x54\x43\x4f\x4e\x53\x54\x00\x0a\x5b\x2d\x76\x6e" \
-"\x5d\x09\x5b\x2d\x48\x20\x48\x57\x54\x59\x50\x45\x5d\x20\x5b\x2d" \
-"\x69\x20\x49\x46\x5d\x20\x2d\x61\x20\x5b\x48\x4f\x53\x54\x4e\x41" \
-"\x4d\x45\x5d\x0a\x5b\x2d\x76\x5d\x09\x09\x20\x20\x20\x20\x5b\x2d" \
-"\x69\x20\x49\x46\x5d\x20\x2d\x64\x20\x48\x4f\x53\x54\x4e\x41\x4d" \
-"\x45\x20\x5b\x70\x75\x62\x5d\x0a\x5b\x2d\x76\x5d\x09\x5b\x2d\x48" \
-"\x20\x48\x57\x54\x59\x50\x45\x5d\x20\x5b\x2d\x69\x20\x49\x46\x5d" \
-"\x20\x2d\x73\x20\x48\x4f\x53\x54\x4e\x41\x4d\x45\x20\x48\x57\x41" \
-"\x44\x44\x52\x20\x5b\x74\x65\x6d\x70\x5d\x0a\x5b\x2d\x76\x5d\x09" \
-"\x5b\x2d\x48\x20\x48\x57\x54\x59\x50\x45\x5d\x20\x5b\x2d\x69\x20" \
-"\x49\x46\x5d\x20\x2d\x73\x20\x48\x4f\x53\x54\x4e\x41\x4d\x45\x20" \
-"\x48\x57\x41\x44\x44\x52\x20\x5b\x6e\x65\x74\x6d\x61\x73\x6b\x20" \
-"\x4d\x41\x53\x4b\x5d\x20\x70\x75\x62\x0a\x5b\x2d\x76\x5d\x09\x5b" \
-"\x2d\x48\x20\x48\x57\x54\x59\x50\x45\x5d\x20\x5b\x2d\x69\x20\x49" \
-"\x46\x5d\x20\x2d\x44\x73\x20\x48\x4f\x53\x54\x4e\x41\x4d\x45\x20" \
-"\x49\x46\x41\x43\x45\x20\x5b\x6e\x65\x74\x6d\x61\x73\x6b\x20\x4d" \
-"\x41\x53\x4b\x5d\x20\x70\x75\x62\x0a\x0a\x4d\x61\x6e\x69\x70\x75" \
-"\x6c\x61\x74\x65\x20\x41\x52\x50\x20\x63\x61\x63\x68\x65\x0a\x0a" \
-"\x09\x2d\x61\x09\x09\x44\x69\x73\x70\x6c\x61\x79\x20\x28\x61\x6c" \
-"\x6c\x29\x20\x68\x6f\x73\x74\x73\x0a\x09\x2d\x73\x09\x09\x53\x65" \
-"\x74\x20\x6e\x65\x77\x20\x41\x52\x50\x20\x65\x6e\x74\x72\x79\x0a" \
-"\x09\x2d\x64\x09\x09\x44\x65\x6c\x65\x74\x65\x20\x61\x20\x73\x70" \
-"\x65\x63\x69\x66\x69\x65\x64\x20\x65\x6e\x74\x72\x79\x0a\x09\x2d" \
-"\x76\x09\x09\x56\x65\x72\x62\x6f\x73\x65\x0a\x09\x2d\x6e\x09\x09" \
-"\x44\x6f\x6e\x27\x74\x20\x72\x65\x73\x6f\x6c\x76\x65\x20\x6e\x61" \
-"\x6d\x65\x73\x0a\x09\x2d\x69\x20\x49\x46\x09\x09\x4e\x65\x74\x77" \
-"\x6f\x72\x6b\x20\x69\x6e\x74\x65\x72\x66\x61\x63\x65\x0a\x09\x2d" \
-"\x44\x09\x09\x52\x65\x61\x64\x20\x3c\x68\x77\x61\x64\x64\x72\x3e" \
-"\x20\x66\x72\x6f\x6d\x20\x67\x69\x76\x65\x6e\x20\x64\x65\x76\x69" \
-"\x63\x65\x0a\x09\x2d\x41\x2c\x2d\x70\x20\x41\x46\x09\x50\x72\x6f" \
-"\x74\x6f\x63\x6f\x6c\x20\x66\x61\x6d\x69\x6c\x79\x0a\x09\x2d\x48" \
-"\x20\x48\x57\x54\x59\x50\x45\x09\x48\x61\x72\x64\x77\x61\x72\x65" \
-"\x20\x61\x64\x64\x72\x65\x73\x73\x20\x74\x79\x70\x65\x00\x5b\x2d" \
-"\x2f\x2b\x4f\x50\x54\x49\x4f\x4e\x53\x5d\x20\x5b\x2d\x2f\x2b\x6f" \
-"\x20\x4f\x50\x54\x5d\x2e\x2e\x2e\x20\x5b\x2d\x63\x20\x27\x53\x43" \
-"\x52\x49\x50\x54\x27\x20\x5b\x41\x52\x47\x30\x20\x5b\x41\x52\x47" \
-"\x53\x5d\x5d\x20\x2f\x20\x46\x49\x4c\x45\x20\x5b\x41\x52\x47\x53" \
-"\x5d\x5d\x0a\x0a\x55\x6e\x69\x78\x20\x73\x68\x65\x6c\x6c\x20\x69" \
-"\x6e\x74\x65\x72\x70\x72\x65\x74\x65\x72\x00\x5b\x4f\x50\x54\x49" \
-"\x4f\x4e\x53\x5d\x20\x5b\x41\x57\x4b\x5f\x50\x52\x4f\x47\x52\x41" \
-"\x4d\x5d\x20\x5b\x46\x49\x4c\x45\x5d\x2e\x2e\x2e\x0a\x0a\x09\x2d" \
-"\x76\x20\x56\x41\x52\x3d\x56\x41\x4c\x09\x53\x65\x74\x20\x76\x61" \
-"\x72\x69\x61\x62\x6c\x65\x0a\x09\x2d\x46\x20\x53\x45\x50\x09\x09" \
-"\x55\x73\x65\x20\x53\x45\x50\x20\x61\x73\x20\x66\x69\x65\x6c\x64" \
-"\x20\x73\x65\x70\x61\x72\x61\x74\x6f\x72\x0a\x09\x2d\x66\x20\x46" \
-"\x49\x4c\x45\x09\x09\x52\x65\x61\x64\x20\x70\x72\x6f\x67\x72\x61" \
-"\x6d\x20\x66\x72\x6f\x6d\x20\x46\x49\x4c\x45\x00\x5b\x2d\x64\x5d" \
-"\x20\x5b\x46\x49\x4c\x45\x5d\x0a\x0a\x42\x61\x73\x65\x36\x34\x20" \
-"\x65\x6e\x63\x6f\x64\x65\x20\x6f\x72\x20\x64\x65\x63\x6f\x64\x65" \
-"\x20\x46\x49\x4c\x45\x20\x74\x6f\x20\x73\x74\x61\x6e\x64\x61\x72" \
-"\x64\x20\x6f\x75\x74\x70\x75\x74\x0a\x09\x2d\x64\x09\x44\x65\x63" \
-"\x6f\x64\x65\x20\x64\x61\x74\x61\x00\x46\x49\x4c\x45\x20\x5b\x53" \
-"\x55\x46\x46\x49\x58\x5d\x0a\x0a\x53\x74\x72\x69\x70\x20\x64\x69" \
-"\x72\x65\x63\x74\x6f\x72\x79\x20\x70\x61\x74\x68\x20\x61\x6e\x64" \
-"\x20\x2e\x53\x55\x46\x46\x49\x58\x20\x66\x72\x6f\x6d\x20\x46\x49" \
-"\x4c\x45\x0a\x00\x0a\x0a\x50\x72\x69\x6e\x74\x20\x74\x68\x65\x20" \
-"\x63\x6f\x6e\x66\x69\x67\x20\x66\x69\x6c\x65\x20\x75\x73\x65\x64" \
-"\x20\x62\x79\x20\x62\x75\x73\x79\x62\x6f\x78\x20\x62\x75\x69\x6c" \
-"\x64\x00\x5b\x42\x4c\x4f\x43\x4b\x44\x45\x56\x5d\x2e\x2e\x2e\x0a" \
-"\x0a\x50\x72\x69\x6e\x74\x20\x55\x55\x49\x44\x73\x20\x6f\x66\x20" \
-"\x61\x6c\x6c\x20\x66\x69\x6c\x65\x73\x79\x73\x74\x65\x6d\x73\x00" \
-"\x4f\x50\x54\x49\x4f\x4e\x20\x42\x4c\x4f\x43\x4b\x44\x45\x56\x0a" \
-"\x0a\x09\x2d\x2d\x73\x65\x74\x72\x6f\x09\x09\x53\x65\x74\x20\x72" \
-"\x6f\x0a\x09\x2d\x2d\x73\x65\x74\x72\x77\x09\x09\x53\x65\x74\x20" \
-"\x72\x77\x0a\x09\x2d\x2d\x67\x65\x74\x72\x6f\x09\x09\x47\x65\x74" \
-"\x20\x72\x6f\x0a\x09\x2d\x2d\x67\x65\x74\x73\x73\x09\x09\x47\x65" \
-"\x74\x20\x73\x65\x63\x74\x6f\x72\x20\x73\x69\x7a\x65\x0a\x09\x2d" \
-"\x2d\x67\x65\x74\x62\x73\x7a\x09\x47\x65\x74\x20\x62\x6c\x6f\x63" \
-"\x6b\x20\x73\x69\x7a\x65\x0a\x09\x2d\x2d\x73\x65\x74\x62\x73\x7a" \
-"\x20\x42\x59\x54\x45\x53\x09\x53\x65\x74\x20\x62\x6c\x6f\x63\x6b" \
-"\x20\x73\x69\x7a\x65\x0a\x09\x2d\x2d\x67\x65\x74\x73\x7a\x09\x09" \
-"\x47\x65\x74\x20\x64\x65\x76\x69\x63\x65\x20\x73\x69\x7a\x65\x20" \
-"\x69\x6e\x20\x35\x31\x32\x2d\x62\x79\x74\x65\x20\x73\x65\x63\x74" \
-"\x6f\x72\x73\x0a\x09\x2d\x2d\x67\x65\x74\x73\x69\x7a\x65\x36\x34" \
-"\x09\x47\x65\x74\x20\x64\x65\x76\x69\x63\x65\x20\x73\x69\x7a\x65" \
-"\x20\x69\x6e\x20\x62\x79\x74\x65\x73\x0a\x09\x2d\x2d\x66\x6c\x75" \
-"\x73\x68\x62\x75\x66\x73\x09\x46\x6c\x75\x73\x68\x20\x62\x75\x66" \
-"\x66\x65\x72\x73\x0a\x09\x2d\x2d\x72\x65\x72\x65\x61\x64\x70\x74" \
-"\x09\x52\x65\x72\x65\x61\x64\x20\x70\x61\x72\x74\x69\x74\x69\x6f" \
-"\x6e\x20\x74\x61\x62\x6c\x65\x00\x43\x4f\x4d\x4d\x41\x4e\x44\x20" \
-"\x5b\x42\x52\x49\x44\x47\x45\x20\x5b\x49\x4e\x54\x45\x52\x46\x41" \
-"\x43\x45\x5d\x5d\x0a\x0a\x4d\x61\x6e\x61\x67\x65\x20\x65\x74\x68" \
-"\x65\x72\x6e\x65\x74\x20\x62\x72\x69\x64\x67\x65\x73\x0a\x0a\x43" \
-"\x6f\x6d\x6d\x61\x6e\x64\x73\x3a\x0a\x09\x73\x68\x6f\x77\x09\x09" \
-"\x09\x53\x68\x6f\x77\x20\x61\x20\x6c\x69\x73\x74\x20\x6f\x66\x20" \
-"\x62\x72\x69\x64\x67\x65\x73\x0a\x09\x61\x64\x64\x62\x72\x20\x42" \
-"\x52\x49\x44\x47\x45\x09\x09\x43\x72\x65\x61\x74\x65\x20\x42\x52" \
-"\x49\x44\x47\x45\x0a\x09\x64\x65\x6c\x62\x72\x20\x42\x52\x49\x44" \
-"\x47\x45\x09\x09\x44\x65\x6c\x65\x74\x65\x20\x42\x52\x49\x44\x47" \
-"\x45\x0a\x09\x61\x64\x64\x69\x66\x20\x42\x52\x49\x44\x47\x45\x20" \
-"\x49\x46\x41\x43\x45\x09\x41\x64\x64\x20\x49\x46\x41\x43\x45\x20" \
-"\x74\x6f\x20\x42\x52\x49\x44\x47\x45\x0a\x09\x64\x65\x6c\x69\x66" \
-"\x20\x42\x52\x49\x44\x47\x45\x20\x49\x46\x41\x43\x45\x09\x44\x65" \
-"\x6c\x65\x74\x65\x20\x49\x46\x41\x43\x45\x20\x66\x72\x6f\x6d\x20" \
-"\x42\x52\x49\x44\x47\x45\x0a\x09\x73\x65\x74\x61\x67\x65\x69\x6e" \
-"\x67\x20\x42\x52\x49\x44\x47\x45\x20\x54\x49\x4d\x45\x09\x09\x53" \
-"\x65\x74\x20\x61\x67\x65\x69\x6e\x67\x20\x74\x69\x6d\x65\x0a\x09" \
-"\x73\x65\x74\x66\x64\x20\x42\x52\x49\x44\x47\x45\x20\x54\x49\x4d" \
-"\x45\x09\x09\x53\x65\x74\x20\x62\x72\x69\x64\x67\x65\x20\x66\x6f" \
-"\x72\x77\x61\x72\x64\x20\x64\x65\x6c\x61\x79\x0a\x09\x73\x65\x74" \
-"\x68\x65\x6c\x6c\x6f\x20\x42\x52\x49\x44\x47\x45\x20\x54\x49\x4d" \
-"\x45\x09\x09\x53\x65\x74\x20\x68\x65\x6c\x6c\x6f\x20\x74\x69\x6d" \
-"\x65\x0a\x09\x73\x65\x74\x6d\x61\x78\x61\x67\x65\x20\x42\x52\x49" \
-"\x44\x47\x45\x20\x54\x49\x4d\x45\x09\x09\x53\x65\x74\x20\x6d\x61" \
-"\x78\x20\x6d\x65\x73\x73\x61\x67\x65\x20\x61\x67\x65\x0a\x09\x73" \
-"\x65\x74\x70\x61\x74\x68\x63\x6f\x73\x74\x20\x42\x52\x49\x44\x47" \
-"\x45\x20\x43\x4f\x53\x54\x09\x09\x53\x65\x74\x20\x70\x61\x74\x68" \
-"\x20\x63\x6f\x73\x74\x0a\x09\x73\x65\x74\x70\x6f\x72\x74\x70\x72" \
-"\x69\x6f\x20\x42\x52\x49\x44\x47\x45\x20\x50\x52\x49\x4f\x09\x09" \
-"\x53\x65\x74\x20\x70\x6f\x72\x74\x20\x70\x72\x69\x6f\x72\x69\x74" \
-"\x79\x0a\x09\x73\x65\x74\x62\x72\x69\x64\x67\x65\x70\x72\x69\x6f" \
-"\x20\x42\x52\x49\x44\x47\x45\x20\x50\x52\x49\x4f\x09\x53\x65\x74" \
-"\x20\x62\x72\x69\x64\x67\x65\x20\x70\x72\x69\x6f\x72\x69\x74\x79" \
-"\x0a\x09\x73\x74\x70\x20\x42\x52\x49\x44\x47\x45\x20\x5b\x31\x2f" \
-"\x79\x65\x73\x2f\x6f\x6e\x7c\x30\x2f\x6e\x6f\x2f\x6f\x66\x66\x5d" \
-"\x09\x53\x54\x50\x20\x6f\x6e\x2f\x6f\x66\x66\x00\x5b\x2d\x63\x66" \
-"\x5d\x20\x5b\x46\x49\x4c\x45\x5d\x2e\x2e\x2e\x0a\x0a\x44\x65\x63" \
-"\x6f\x6d\x70\x72\x65\x73\x73\x20\x46\x49\x4c\x45\x73\x20\x28\x6f" \
-"\x72\x20\x73\x74\x64\x69\x6e\x29\x0a\x0a\x09\x2d\x63\x09\x57\x72" \
-"\x69\x74\x65\x20\x74\x6f\x20\x73\x74\x64\x6f\x75\x74\x0a\x09\x2d" \
-"\x66\x09\x46\x6f\x72\x63\x65\x00\x46\x49\x4c\x45\x0a\x0a\x44\x65" \
-"\x63\x6f\x6d\x70\x72\x65\x73\x73\x20\x74\x6f\x20\x73\x74\x64\x6f" \
-"\x75\x74\x00\x5b\x4f\x50\x54\x49\x4f\x4e\x53\x5d\x20\x5b\x46\x49" \
-"\x4c\x45\x5d\x2e\x2e\x2e\x0a\x0a\x43\x6f\x6d\x70\x72\x65\x73\x73" \
-"\x20\x46\x49\x4c\x45\x73\x20\x28\x6f\x72\x20\x73\x74\x64\x69\x6e" \
-"\x29\x20\x77\x69\x74\x68\x20\x62\x7a\x69\x70\x32\x20\x61\x6c\x67" \
-"\x6f\x72\x69\x74\x68\x6d\x0a\x0a\x09\x2d\x31\x2e\x2e\x39\x09\x43" \
-"\x6f\x6d\x70\x72\x65\x73\x73\x69\x6f\x6e\x20\x6c\x65\x76\x65\x6c" \
-"\x0a\x09\x2d\x64\x09\x44\x65\x63\x6f\x6d\x70\x72\x65\x73\x73\x0a" \
-"\x09\x2d\x63\x09\x57\x72\x69\x74\x65\x20\x74\x6f\x20\x73\x74\x64" \
-"\x6f\x75\x74\x0a\x09\x2d\x66\x09\x46\x6f\x72\x63\x65\x00\x5b\x2d" \
-"\x6a\x79\x5d\x20\x5b\x5b\x4d\x4f\x4e\x54\x48\x5d\x20\x59\x45\x41" \
-"\x52\x5d\x0a\x0a\x44\x69\x73\x70\x6c\x61\x79\x20\x61\x20\x63\x61" \
-"\x6c\x65\x6e\x64\x61\x72\x0a\x0a\x09\x2d\x6a\x09\x55\x73\x65\x20" \
-"\x6a\x75\x6c\x69\x61\x6e\x20\x64\x61\x74\x65\x73\x0a\x09\x2d\x79" \
-"\x09\x44\x69\x73\x70\x6c\x61\x79\x20\x74\x68\x65\x20\x65\x6e\x74" \
-"\x69\x72\x65\x20\x79\x65\x61\x72\x00\x5b\x46\x49\x4c\x45\x5d\x2e" \
-"\x2e\x2e\x0a\x0a\x43\x6f\x6e\x63\x61\x74\x65\x6e\x61\x74\x65\x20" \
-"\x46\x49\x4c\x45\x73\x20\x61\x6e\x64\x20\x70\x72\x69\x6e\x74\x20" \
-"\x74\x68\x65\x6d\x20\x74\x6f\x20\x73\x74\x64\x6f\x75\x74\x00\x5b" \
-"\x2d\x65\x74\x76\x5d\x20\x5b\x46\x49\x4c\x45\x5d\x2e\x2e\x2e\x0a" \
-"\x0a\x44\x69\x73\x70\x6c\x61\x79\x20\x6e\x6f\x6e\x70\x72\x69\x6e" \
-"\x74\x69\x6e\x67\x20\x63\x68\x61\x72\x61\x63\x74\x65\x72\x73\x20" \
-"\x61\x73\x20\x5e\x78\x20\x6f\x72\x20\x4d\x2d\x78\x0a\x0a\x09\x2d" \
-"\x65\x09\x45\x6e\x64\x20\x65\x61\x63\x68\x20\x6c\x69\x6e\x65\x20" \
-"\x77\x69\x74\x68\x20\x24\x0a\x09\x2d\x74\x09\x53\x68\x6f\x77\x20" \
-"\x74\x61\x62\x73\x20\x61\x73\x20\x5e\x49\x0a\x09\x2d\x76\x09\x44" \
-"\x6f\x6e\x27\x74\x20\x75\x73\x65\x20\x5e\x78\x20\x6f\x72\x20\x4d" \
-"\x2d\x78\x20\x65\x73\x63\x61\x70\x65\x73\x00\x5b\x2d\x52\x5d\x20" \
-"\x5b\x2d\x2b\x3d\x41\x61\x63\x44\x64\x69\x6a\x73\x53\x74\x54\x75" \
-"\x5d\x20\x5b\x2d\x76\x20\x56\x45\x52\x53\x49\x4f\x4e\x5d\x20\x5b" \
-"\x46\x49\x4c\x45\x5d\x2e\x2e\x2e\x0a\x0a\x43\x68\x61\x6e\x67\x65" \
-"\x20\x66\x69\x6c\x65\x20\x61\x74\x74\x72\x69\x62\x75\x74\x65\x73" \
-"\x20\x6f\x6e\x20\x61\x6e\x20\x65\x78\x74\x32\x20\x66\x73\x0a\x0a" \
-"\x4d\x6f\x64\x69\x66\x69\x65\x72\x73\x3a\x0a\x09\x2d\x09\x52\x65" \
-"\x6d\x6f\x76\x65\x20\x61\x74\x74\x72\x69\x62\x75\x74\x65\x73\x0a" \
-"\x09\x2b\x09\x41\x64\x64\x20\x61\x74\x74\x72\x69\x62\x75\x74\x65" \
-"\x73\x0a\x09\x3d\x09\x53\x65\x74\x20\x61\x74\x74\x72\x69\x62\x75" \
-"\x74\x65\x73\x0a\x41\x74\x74\x72\x69\x62\x75\x74\x65\x73\x3a\x0a" \
-"\x09\x41\x09\x44\x6f\x6e\x27\x74\x20\x74\x72\x61\x63\x6b\x20\x61" \
-"\x74\x69\x6d\x65\x0a\x09\x61\x09\x41\x70\x70\x65\x6e\x64\x20\x6d" \
-"\x6f\x64\x65\x20\x6f\x6e\x6c\x79\x0a\x09\x63\x09\x45\x6e\x61\x62" \
-"\x6c\x65\x20\x63\x6f\x6d\x70\x72\x65\x73\x73\x0a\x09\x44\x09\x57" \
-"\x72\x69\x74\x65\x20\x64\x69\x72\x20\x63\x6f\x6e\x74\x65\x6e\x74" \
-"\x73\x20\x73\x79\x6e\x63\x68\x72\x6f\x6e\x6f\x75\x73\x6c\x79\x0a" \
-"\x09\x64\x09\x44\x6f\x6e\x27\x74\x20\x62\x61\x63\x6b\x75\x70\x20" \
-"\x77\x69\x74\x68\x20\x64\x75\x6d\x70\x0a\x09\x69\x09\x43\x61\x6e" \
-"\x6e\x6f\x74\x20\x62\x65\x20\x6d\x6f\x64\x69\x66\x69\x65\x64\x20" \
-"\x28\x69\x6d\x6d\x75\x74\x61\x62\x6c\x65\x29\x0a\x09\x6a\x09\x57" \
-"\x72\x69\x74\x65\x20\x61\x6c\x6c\x20\x64\x61\x74\x61\x20\x74\x6f" \
-"\x20\x6a\x6f\x75\x72\x6e\x61\x6c\x20\x66\x69\x72\x73\x74\x0a\x09" \
-"\x73\x09\x5a\x65\x72\x6f\x20\x64\x69\x73\x6b\x20\x73\x74\x6f\x72" \
-"\x61\x67\x65\x20\x77\x68\x65\x6e\x20\x64\x65\x6c\x65\x74\x65\x64" \
-"\x0a\x09\x53\x09\x57\x72\x69\x74\x65\x20\x66\x69\x6c\x65\x20\x63" \
-"\x6f\x6e\x74\x65\x6e\x74\x73\x20\x73\x79\x6e\x63\x68\x72\x6f\x6e" \
-"\x6f\x75\x73\x6c\x79\x0a\x09\x74\x09\x44\x69\x73\x61\x62\x6c\x65" \
-"\x20\x74\x61\x69\x6c\x2d\x6d\x65\x72\x67\x69\x6e\x67\x20\x6f\x66" \
-"\x20\x70\x61\x72\x74\x69\x61\x6c\x20\x62\x6c\x6f\x63\x6b\x73\x20" \
-"\x77\x69\x74\x68\x20\x6f\x74\x68\x65\x72\x20\x66\x69\x6c\x65\x73" \
-"\x0a\x09\x75\x09\x41\x6c\x6c\x6f\x77\x20\x66\x69\x6c\x65\x20\x74" \
-"\x6f\x20\x62\x65\x20\x75\x6e\x64\x65\x6c\x65\x74\x65\x64\x0a\x09" \
-"\x2d\x52\x09\x52\x65\x63\x75\x72\x73\x65\x0a\x09\x2d\x76\x09\x53" \
-"\x65\x74\x20\x74\x68\x65\x20\x66\x69\x6c\x65\x27\x73\x20\x76\x65" \
-"\x72\x73\x69\x6f\x6e\x2f\x67\x65\x6e\x65\x72\x61\x74\x69\x6f\x6e" \
-"\x20\x6e\x75\x6d\x62\x65\x72\x00\x5b\x2d\x52\x68\x4c\x48\x50\x63" \
-"\x76\x66\x5d\x2e\x2e\x2e\x20\x47\x52\x4f\x55\x50\x20\x46\x49\x4c" \
-"\x45\x2e\x2e\x2e\x0a\x0a\x43\x68\x61\x6e\x67\x65\x20\x74\x68\x65" \
-"\x20\x67\x72\x6f\x75\x70\x20\x6d\x65\x6d\x62\x65\x72\x73\x68\x69" \
-"\x70\x20\x6f\x66\x20\x65\x61\x63\x68\x20\x46\x49\x4c\x45\x20\x74" \
-"\x6f\x20\x47\x52\x4f\x55\x50\x0a\x0a\x09\x2d\x52\x09\x52\x65\x63" \
-"\x75\x72\x73\x65\x0a\x09\x2d\x68\x09\x41\x66\x66\x65\x63\x74\x20" \
-"\x73\x79\x6d\x6c\x69\x6e\x6b\x73\x20\x69\x6e\x73\x74\x65\x61\x64" \
-"\x20\x6f\x66\x20\x73\x79\x6d\x6c\x69\x6e\x6b\x20\x74\x61\x72\x67" \
-"\x65\x74\x73\x0a\x09\x2d\x4c\x09\x54\x72\x61\x76\x65\x72\x73\x65" \
-"\x20\x61\x6c\x6c\x20\x73\x79\x6d\x6c\x69\x6e\x6b\x73\x20\x74\x6f" \
-"\x20\x64\x69\x72\x65\x63\x74\x6f\x72\x69\x65\x73\x0a\x09\x2d\x48" \
-"\x09\x54\x72\x61\x76\x65\x72\x73\x65\x20\x73\x79\x6d\x6c\x69\x6e" \
-"\x6b\x73\x20\x6f\x6e\x20\x63\x6f\x6d\x6d\x61\x6e\x64\x20\x6c\x69" \
-"\x6e\x65\x20\x6f\x6e\x6c\x79\x0a\x09\x2d\x50\x09\x44\x6f\x6e\x27" \
-"\x74\x20\x74\x72\x61\x76\x65\x72\x73\x65\x20\x73\x79\x6d\x6c\x69" \
-"\x6e\x6b\x73\x20\x28\x64\x65\x66\x61\x75\x6c\x74\x29\x0a\x09\x2d" \
-"\x63\x09\x4c\x69\x73\x74\x20\x63\x68\x61\x6e\x67\x65\x64\x20\x66" \
-"\x69\x6c\x65\x73\x0a\x09\x2d\x76\x09\x56\x65\x72\x62\x6f\x73\x65" \
-"\x0a\x09\x2d\x66\x09\x48\x69\x64\x65\x20\x65\x72\x72\x6f\x72\x73" \
-"\x00\x5b\x2d\x52\x63\x76\x66\x5d\x20\x4d\x4f\x44\x45\x5b\x2c\x4d" \
-"\x4f\x44\x45\x5d\x2e\x2e\x2e\x20\x46\x49\x4c\x45\x2e\x2e\x2e\x0a" \
-"\x0a\x45\x61\x63\x68\x20\x4d\x4f\x44\x45\x20\x69\x73\x20\x6f\x6e" \
-"\x65\x20\x6f\x72\x20\x6d\x6f\x72\x65\x20\x6f\x66\x20\x74\x68\x65" \
-"\x20\x6c\x65\x74\x74\x65\x72\x73\x20\x75\x67\x6f\x61\x2c\x20\x6f" \
-"\x6e\x65\x20\x6f\x66\x20\x74\x68\x65\x0a\x73\x79\x6d\x62\x6f\x6c" \
-"\x73\x20\x2b\x2d\x3d\x20\x61\x6e\x64\x20\x6f\x6e\x65\x20\x6f\x72" \
-"\x20\x6d\x6f\x72\x65\x20\x6f\x66\x20\x74\x68\x65\x20\x6c\x65\x74" \
-"\x74\x65\x72\x73\x20\x72\x77\x78\x73\x74\x0a\x0a\x09\x2d\x52\x09" \
-"\x52\x65\x63\x75\x72\x73\x65\x0a\x09\x2d\x63\x09\x4c\x69\x73\x74" \
-"\x20\x63\x68\x61\x6e\x67\x65\x64\x20\x66\x69\x6c\x65\x73\x0a\x09" \
-"\x2d\x76\x09\x4c\x69\x73\x74\x20\x61\x6c\x6c\x20\x66\x69\x6c\x65" \
-"\x73\x0a\x09\x2d\x66\x09\x48\x69\x64\x65\x20\x65\x72\x72\x6f\x72" \
-"\x73\x00\x5b\x2d\x52\x68\x4c\x48\x50\x63\x76\x66\x5d\x2e\x2e\x2e" \
-"\x20\x4f\x57\x4e\x45\x52\x5b\x3c\x2e\x7c\x3a\x3e\x5b\x47\x52\x4f" \
-"\x55\x50\x5d\x5d\x20\x46\x49\x4c\x45\x2e\x2e\x2e\x0a\x0a\x43\x68" \
-"\x61\x6e\x67\x65\x20\x74\x68\x65\x20\x6f\x77\x6e\x65\x72\x20\x61" \
-"\x6e\x64\x2f\x6f\x72\x20\x67\x72\x6f\x75\x70\x20\x6f\x66\x20\x65" \
-"\x61\x63\x68\x20\x46\x49\x4c\x45\x20\x74\x6f\x20\x4f\x57\x4e\x45" \
-"\x52\x20\x61\x6e\x64\x2f\x6f\x72\x20\x47\x52\x4f\x55\x50\x0a\x0a" \
-"\x09\x2d\x52\x09\x52\x65\x63\x75\x72\x73\x65\x0a\x09\x2d\x68\x09" \
-"\x41\x66\x66\x65\x63\x74\x20\x73\x79\x6d\x6c\x69\x6e\x6b\x73\x20" \
-"\x69\x6e\x73\x74\x65\x61\x64\x20\x6f\x66\x20\x73\x79\x6d\x6c\x69" \
-"\x6e\x6b\x20\x74\x61\x72\x67\x65\x74\x73\x0a\x09\x2d\x4c\x09\x54" \
-"\x72\x61\x76\x65\x72\x73\x65\x20\x61\x6c\x6c\x20\x73\x79\x6d\x6c" \
-"\x69\x6e\x6b\x73\x20\x74\x6f\x20\x64\x69\x72\x65\x63\x74\x6f\x72" \
-"\x69\x65\x73\x0a\x09\x2d\x48\x09\x54\x72\x61\x76\x65\x72\x73\x65" \
-"\x20\x73\x79\x6d\x6c\x69\x6e\x6b\x73\x20\x6f\x6e\x20\x63\x6f\x6d" \
-"\x6d\x61\x6e\x64\x20\x6c\x69\x6e\x65\x20\x6f\x6e\x6c\x79\x0a\x09" \
-"\x2d\x50\x09\x44\x6f\x6e\x27\x74\x20\x74\x72\x61\x76\x65\x72\x73" \
-"\x65\x20\x73\x79\x6d\x6c\x69\x6e\x6b\x73\x20\x28\x64\x65\x66\x61" \
-"\x75\x6c\x74\x29\x0a\x09\x2d\x63\x09\x4c\x69\x73\x74\x20\x63\x68" \
-"\x61\x6e\x67\x65\x64\x20\x66\x69\x6c\x65\x73\x0a\x09\x2d\x76\x09" \
-"\x4c\x69\x73\x74\x20\x61\x6c\x6c\x20\x66\x69\x6c\x65\x73\x0a\x09" \
-"\x2d\x66\x09\x48\x69\x64\x65\x20\x65\x72\x72\x6f\x72\x73\x00\x4e" \
-"\x45\x57\x52\x4f\x4f\x54\x20\x5b\x50\x52\x4f\x47\x20\x41\x52\x47" \
-"\x53\x5d\x0a\x0a\x52\x75\x6e\x20\x50\x52\x4f\x47\x20\x77\x69\x74" \
-"\x68\x20\x72\x6f\x6f\x74\x20\x64\x69\x72\x65\x63\x74\x6f\x72\x79" \
-"\x20\x73\x65\x74\x20\x74\x6f\x20\x4e\x45\x57\x52\x4f\x4f\x54\x00" \
-"\x0a\x0a\x43\x6c\x65\x61\x72\x20\x73\x63\x72\x65\x65\x6e\x00\x5b" \
-"\x2d\x6c\x5d\x20\x5b\x2d\x73\x5d\x20\x46\x49\x4c\x45\x31\x20\x5b" \
-"\x46\x49\x4c\x45\x32\x20\x5b\x53\x4b\x49\x50\x31\x20\x5b\x53\x4b" \
-"\x49\x50\x32\x5d\x5d\x5d\x0a\x0a\x43\x6f\x6d\x70\x61\x72\x65\x20" \
-"\x46\x49\x4c\x45\x31\x20\x77\x69\x74\x68\x20\x46\x49\x4c\x45\x32" \
-"\x20\x28\x6f\x72\x20\x73\x74\x64\x69\x6e\x29\x0a\x0a\x09\x2d\x6c" \
-"\x09\x57\x72\x69\x74\x65\x20\x74\x68\x65\x20\x62\x79\x74\x65\x20" \
-"\x6e\x75\x6d\x62\x65\x72\x73\x20\x28\x64\x65\x63\x69\x6d\x61\x6c" \
-"\x29\x20\x61\x6e\x64\x20\x76\x61\x6c\x75\x65\x73\x20\x28\x6f\x63" \
-"\x74\x61\x6c\x29\x0a\x09\x09\x66\x6f\x72\x20\x61\x6c\x6c\x20\x64" \
-"\x69\x66\x66\x65\x72\x69\x6e\x67\x20\x62\x79\x74\x65\x73\x0a\x09" \
-"\x2d\x73\x09\x51\x75\x69\x65\x74\x00\x5b\x2d\x31\x32\x33\x5d\x20" \
-"\x46\x49\x4c\x45\x31\x20\x46\x49\x4c\x45\x32\x0a\x0a\x43\x6f\x6d" \
-"\x70\x61\x72\x65\x20\x46\x49\x4c\x45\x31\x20\x77\x69\x74\x68\x20" \
-"\x46\x49\x4c\x45\x32\x0a\x0a\x09\x2d\x31\x09\x53\x75\x70\x70\x72" \
-"\x65\x73\x73\x20\x6c\x69\x6e\x65\x73\x20\x75\x6e\x69\x71\x75\x65" \
-"\x20\x74\x6f\x20\x46\x49\x4c\x45\x31\x0a\x09\x2d\x32\x09\x53\x75" \
-"\x70\x70\x72\x65\x73\x73\x20\x6c\x69\x6e\x65\x73\x20\x75\x6e\x69" \
-"\x71\x75\x65\x20\x74\x6f\x20\x46\x49\x4c\x45\x32\x0a\x09\x2d\x33" \
-"\x09\x53\x75\x70\x70\x72\x65\x73\x73\x20\x6c\x69\x6e\x65\x73\x20" \
-"\x63\x6f\x6d\x6d\x6f\x6e\x20\x74\x6f\x20\x62\x6f\x74\x68\x20\x66" \
-"\x69\x6c\x65\x73\x00\x5b\x4f\x50\x54\x49\x4f\x4e\x53\x5d\x20\x53" \
-"\x4f\x55\x52\x43\x45\x2e\x2e\x2e\x20\x44\x45\x53\x54\x0a\x0a\x43" \
-"\x6f\x70\x79\x20\x53\x4f\x55\x52\x43\x45\x28\x73\x29\x20\x74\x6f" \
-"\x20\x44\x45\x53\x54\x0a\x0a\x09\x2d\x61\x09\x53\x61\x6d\x65\x20" \
-"\x61\x73\x20\x2d\x64\x70\x52\x0a\x09\x2d\x52\x2c\x2d\x72\x09\x52" \
-"\x65\x63\x75\x72\x73\x65\x0a\x09\x2d\x64\x2c\x2d\x50\x09\x50\x72" \
-"\x65\x73\x65\x72\x76\x65\x20\x73\x79\x6d\x6c\x69\x6e\x6b\x73\x20" \
-"\x28\x64\x65\x66\x61\x75\x6c\x74\x20\x69\x66\x20\x2d\x52\x29\x0a" \
-"\x09\x2d\x4c\x09\x46\x6f\x6c\x6c\x6f\x77\x20\x61\x6c\x6c\x20\x73" \
-"\x79\x6d\x6c\x69\x6e\x6b\x73\x0a\x09\x2d\x48\x09\x46\x6f\x6c\x6c" \
-"\x6f\x77\x20\x73\x79\x6d\x6c\x69\x6e\x6b\x73\x20\x6f\x6e\x20\x63" \
-"\x6f\x6d\x6d\x61\x6e\x64\x20\x6c\x69\x6e\x65\x0a\x09\x2d\x70\x09" \
-"\x50\x72\x65\x73\x65\x72\x76\x65\x20\x66\x69\x6c\x65\x20\x61\x74" \
-"\x74\x72\x69\x62\x75\x74\x65\x73\x20\x69\x66\x20\x70\x6f\x73\x73" \
-"\x69\x62\x6c\x65\x0a\x09\x2d\x66\x09\x4f\x76\x65\x72\x77\x72\x69" \
-"\x74\x65\x0a\x09\x2d\x69\x09\x50\x72\x6f\x6d\x70\x74\x20\x62\x65" \
-"\x66\x6f\x72\x65\x20\x6f\x76\x65\x72\x77\x72\x69\x74\x65\x0a\x09" \
-"\x2d\x6c\x2c\x2d\x73\x09\x43\x72\x65\x61\x74\x65\x20\x28\x73\x79" \
-"\x6d\x29\x6c\x69\x6e\x6b\x73\x00\x5b\x2d\x64\x6d\x76\x75\x5d\x20" \
-"\x5b\x2d\x46\x20\x46\x49\x4c\x45\x5d\x20\x5b\x2d\x48\x20\x6e\x65" \
-"\x77\x63\x5d\x20\x5b\x2d\x74\x69\x6f\x5d\x20\x5b\x2d\x70\x20\x44" \
-"\x49\x52\x5d\x20\x5b\x45\x58\x54\x52\x5f\x46\x49\x4c\x45\x5d\x2e" \
-"\x2e\x2e\x0a\x0a\x45\x78\x74\x72\x61\x63\x74\x20\x6f\x72\x20\x6c" \
-"\x69\x73\x74\x20\x66\x69\x6c\x65\x73\x20\x66\x72\x6f\x6d\x20\x61" \
-"\x20\x63\x70\x69\x6f\x20\x61\x72\x63\x68\x69\x76\x65\x2c\x20\x6f" \
-"\x72\x0a\x63\x72\x65\x61\x74\x65\x20\x61\x6e\x20\x61\x72\x63\x68" \
-"\x69\x76\x65\x20\x28\x2d\x6f\x29\x20\x6f\x72\x20\x63\x6f\x70\x79" \
-"\x20\x66\x69\x6c\x65\x73\x20\x28\x2d\x70\x29\x20\x75\x73\x69\x6e" \
-"\x67\x20\x66\x69\x6c\x65\x20\x6c\x69\x73\x74\x20\x6f\x6e\x20\x73" \
-"\x74\x64\x69\x6e\x0a\x0a\x4d\x61\x69\x6e\x20\x6f\x70\x65\x72\x61" \
-"\x74\x69\x6f\x6e\x20\x6d\x6f\x64\x65\x3a\x0a\x09\x2d\x74\x09\x4c" \
-"\x69\x73\x74\x0a\x09\x2d\x69\x09\x45\x78\x74\x72\x61\x63\x74\x20" \
-"\x45\x58\x54\x52\x5f\x46\x49\x4c\x45\x73\x20\x28\x6f\x72\x20\x61" \
-"\x6c\x6c\x29\x0a\x09\x2d\x6f\x09\x43\x72\x65\x61\x74\x65\x20\x28" \
-"\x72\x65\x71\x75\x69\x72\x65\x73\x20\x2d\x48\x20\x6e\x65\x77\x63" \
-"\x29\x0a\x09\x2d\x70\x20\x44\x49\x52\x09\x43\x6f\x70\x79\x20\x66" \
-"\x69\x6c\x65\x73\x20\x74\x6f\x20\x44\x49\x52\x0a\x09\x2d\x64\x09" \
-"\x4d\x61\x6b\x65\x20\x6c\x65\x61\x64\x69\x6e\x67\x20\x64\x69\x72" \
-"\x65\x63\x74\x6f\x72\x69\x65\x73\x0a\x09\x2d\x6d\x09\x50\x72\x65" \
-"\x73\x65\x72\x76\x65\x20\x6d\x74\x69\x6d\x65\x0a\x09\x2d\x76\x09" \
-"\x56\x65\x72\x62\x6f\x73\x65\x0a\x09\x2d\x75\x09\x4f\x76\x65\x72" \
-"\x77\x72\x69\x74\x65\x0a\x09\x2d\x46\x20\x46\x49\x4c\x45\x09\x49" \
-"\x6e\x70\x75\x74\x20\x28\x2d\x74\x2c\x2d\x69\x2c\x2d\x70\x29\x20" \
-"\x6f\x72\x20\x6f\x75\x74\x70\x75\x74\x20\x28\x2d\x6f\x29\x20\x66" \
-"\x69\x6c\x65\x0a\x09\x2d\x48\x20\x6e\x65\x77\x63\x09\x41\x72\x63" \
-"\x68\x69\x76\x65\x20\x66\x6f\x72\x6d\x61\x74\x00\x2d\x66\x62\x53" \
-"\x20\x2d\x6c\x20\x4e\x20\x2d\x4c\x20\x4c\x4f\x47\x46\x49\x4c\x45" \
-"\x20\x2d\x63\x20\x44\x49\x52\x0a\x0a\x09\x2d\x66\x09\x46\x6f\x72" \
-"\x65\x67\x72\x6f\x75\x6e\x64\x0a\x09\x2d\x62\x09\x42\x61\x63\x6b" \
-"\x67\x72\x6f\x75\x6e\x64\x20\x28\x64\x65\x66\x61\x75\x6c\x74\x29" \
-"\x0a\x09\x2d\x53\x09\x4c\x6f\x67\x20\x74\x6f\x20\x73\x79\x73\x6c" \
-"\x6f\x67\x20\x28\x64\x65\x66\x61\x75\x6c\x74\x29\x0a\x09\x2d\x6c" \
-"\x09\x53\x65\x74\x20\x6c\x6f\x67\x20\x6c\x65\x76\x65\x6c\x2e\x20" \
-"\x30\x20\x69\x73\x20\x74\x68\x65\x20\x6d\x6f\x73\x74\x20\x76\x65" \
-"\x72\x62\x6f\x73\x65\x2c\x20\x64\x65\x66\x61\x75\x6c\x74\x20\x38" \
-"\x0a\x09\x2d\x4c\x09\x4c\x6f\x67\x20\x74\x6f\x20\x66\x69\x6c\x65" \
-"\x0a\x09\x2d\x63\x09\x57\x6f\x72\x6b\x69\x6e\x67\x20\x64\x69\x72" \
-"\x00\x5b\x2d\x63\x20\x44\x49\x52\x5d\x20\x5b\x2d\x75\x20\x55\x53" \
-"\x45\x52\x5d\x20\x5b\x2d\x6c\x65\x72\x5d\x7c\x5b\x46\x49\x4c\x45" \
-"\x5d\x0a\x0a\x09\x2d\x63\x09\x43\x72\x6f\x6e\x74\x61\x62\x20\x64" \
-"\x69\x72\x65\x63\x74\x6f\x72\x79\x0a\x09\x2d\x75\x09\x55\x73\x65" \
-"\x72\x0a\x09\x2d\x6c\x09\x4c\x69\x73\x74\x20\x63\x72\x6f\x6e\x74" \
-"\x61\x62\x0a\x09\x2d\x65\x09\x45\x64\x69\x74\x20\x63\x72\x6f\x6e" \
-"\x74\x61\x62\x0a\x09\x2d\x72\x09\x44\x65\x6c\x65\x74\x65\x20\x63" \
-"\x72\x6f\x6e\x74\x61\x62\x0a\x09\x46\x49\x4c\x45\x09\x52\x65\x70" \
-"\x6c\x61\x63\x65\x20\x63\x72\x6f\x6e\x74\x61\x62\x20\x62\x79\x20" \
-"\x46\x49\x4c\x45\x20\x28\x27\x2d\x27\x3a\x20\x73\x74\x64\x69\x6e" \
-"\x29\x00\x5b\x4f\x50\x54\x49\x4f\x4e\x53\x5d\x20\x5b\x46\x49\x4c" \
-"\x45\x5d\x2e\x2e\x2e\x0a\x0a\x50\x72\x69\x6e\x74\x20\x73\x65\x6c" \
-"\x65\x63\x74\x65\x64\x20\x66\x69\x65\x6c\x64\x73\x20\x66\x72\x6f" \
-"\x6d\x20\x65\x61\x63\x68\x20\x69\x6e\x70\x75\x74\x20\x46\x49\x4c" \
-"\x45\x20\x74\x6f\x20\x73\x74\x64\x6f\x75\x74\x0a\x0a\x09\x2d\x62" \
-"\x20\x4c\x49\x53\x54\x09\x4f\x75\x74\x70\x75\x74\x20\x6f\x6e\x6c" \
-"\x79\x20\x62\x79\x74\x65\x73\x20\x66\x72\x6f\x6d\x20\x4c\x49\x53" \
-"\x54\x0a\x09\x2d\x63\x20\x4c\x49\x53\x54\x09\x4f\x75\x74\x70\x75" \
-"\x74\x20\x6f\x6e\x6c\x79\x20\x63\x68\x61\x72\x61\x63\x74\x65\x72" \
-"\x73\x20\x66\x72\x6f\x6d\x20\x4c\x49\x53\x54\x0a\x09\x2d\x64\x20" \
-"\x43\x48\x41\x52\x09\x55\x73\x65\x20\x43\x48\x41\x52\x20\x69\x6e" \
-"\x73\x74\x65\x61\x64\x20\x6f\x66\x20\x74\x61\x62\x20\x61\x73\x20" \
-"\x74\x68\x65\x20\x66\x69\x65\x6c\x64\x20\x64\x65\x6c\x69\x6d\x69" \
-"\x74\x65\x72\x0a\x09\x2d\x73\x09\x4f\x75\x74\x70\x75\x74\x20\x6f" \
-"\x6e\x6c\x79\x20\x74\x68\x65\x20\x6c\x69\x6e\x65\x73\x20\x63\x6f" \
-"\x6e\x74\x61\x69\x6e\x69\x6e\x67\x20\x64\x65\x6c\x69\x6d\x69\x74" \
-"\x65\x72\x0a\x09\x2d\x66\x20\x4e\x09\x50\x72\x69\x6e\x74\x20\x6f" \
-"\x6e\x6c\x79\x20\x74\x68\x65\x73\x65\x20\x66\x69\x65\x6c\x64\x73" \
-"\x0a\x09\x2d\x6e\x09\x49\x67\x6e\x6f\x72\x65\x64\x00\x5b\x4f\x50" \
-"\x54\x49\x4f\x4e\x53\x5d\x20\x5b\x2b\x46\x4d\x54\x5d\x20\x5b\x54" \
-"\x49\x4d\x45\x5d\x0a\x0a\x44\x69\x73\x70\x6c\x61\x79\x20\x74\x69" \
-"\x6d\x65\x20\x28\x75\x73\x69\x6e\x67\x20\x2b\x46\x4d\x54\x29\x2c" \
-"\x20\x6f\x72\x20\x73\x65\x74\x20\x74\x69\x6d\x65\x0a\x0a\x09\x5b" \
-"\x2d\x73\x2c\x2d\x2d\x73\x65\x74\x5d\x20\x54\x49\x4d\x45\x09\x53" \
-"\x65\x74\x20\x74\x69\x6d\x65\x20\x74\x6f\x20\x54\x49\x4d\x45\x0a" \
-"\x09\x2d\x75\x2c\x2d\x2d\x75\x74\x63\x09\x57\x6f\x72\x6b\x20\x69" \
-"\x6e\x20\x55\x54\x43\x20\x28\x64\x6f\x6e\x27\x74\x20\x63\x6f\x6e" \
-"\x76\x65\x72\x74\x20\x74\x6f\x20\x6c\x6f\x63\x61\x6c\x20\x74\x69" \
-"\x6d\x65\x29\x0a\x09\x2d\x52\x2c\x2d\x2d\x72\x66\x63\x2d\x32\x38" \
-"\x32\x32\x09\x4f\x75\x74\x70\x75\x74\x20\x52\x46\x43\x2d\x32\x38" \
-"\x32\x32\x20\x63\x6f\x6d\x70\x6c\x69\x61\x6e\x74\x20\x64\x61\x74" \
-"\x65\x20\x73\x74\x72\x69\x6e\x67\x0a\x09\x2d\x49\x5b\x53\x50\x45" \
-"\x43\x5d\x09\x4f\x75\x74\x70\x75\x74\x20\x49\x53\x4f\x2d\x38\x36" \
-"\x30\x31\x20\x63\x6f\x6d\x70\x6c\x69\x61\x6e\x74\x20\x64\x61\x74" \
-"\x65\x20\x73\x74\x72\x69\x6e\x67\x0a\x09\x09\x09\x53\x50\x45\x43" \
-"\x3d\x27\x64\x61\x74\x65\x27\x20\x28\x64\x65\x66\x61\x75\x6c\x74" \
-"\x29\x20\x66\x6f\x72\x20\x64\x61\x74\x65\x20\x6f\x6e\x6c\x79\x2c" \
-"\x0a\x09\x09\x09\x27\x68\x6f\x75\x72\x73\x27\x2c\x20\x27\x6d\x69" \
-"\x6e\x75\x74\x65\x73\x27\x2c\x20\x6f\x72\x20\x27\x73\x65\x63\x6f" \
-"\x6e\x64\x73\x27\x20\x66\x6f\x72\x20\x64\x61\x74\x65\x20\x61\x6e" \
-"\x64\x0a\x09\x09\x09\x74\x69\x6d\x65\x20\x74\x6f\x20\x74\x68\x65" \
-"\x20\x69\x6e\x64\x69\x63\x61\x74\x65\x64\x20\x70\x72\x65\x63\x69" \
-"\x73\x69\x6f\x6e\x0a\x09\x2d\x72\x2c\x2d\x2d\x72\x65\x66\x65\x72" \
-"\x65\x6e\x63\x65\x20\x46\x49\x4c\x45\x09\x44\x69\x73\x70\x6c\x61" \
-"\x79\x20\x6c\x61\x73\x74\x20\x6d\x6f\x64\x69\x66\x69\x63\x61\x74" \
-"\x69\x6f\x6e\x20\x74\x69\x6d\x65\x20\x6f\x66\x20\x46\x49\x4c\x45" \
-"\x0a\x09\x2d\x64\x2c\x2d\x2d\x64\x61\x74\x65\x20\x54\x49\x4d\x45" \
-"\x09\x44\x69\x73\x70\x6c\x61\x79\x20\x54\x49\x4d\x45\x2c\x20\x6e" \
-"\x6f\x74\x20\x27\x6e\x6f\x77\x27\x0a\x09\x2d\x44\x20\x46\x4d\x54" \
-"\x09\x09\x55\x73\x65\x20\x46\x4d\x54\x20\x66\x6f\x72\x20\x2d\x64" \
-"\x20\x54\x49\x4d\x45\x20\x63\x6f\x6e\x76\x65\x72\x73\x69\x6f\x6e" \
-"\x0a\x0a\x52\x65\x63\x6f\x67\x6e\x69\x7a\x65\x64\x20\x54\x49\x4d" \
-"\x45\x20\x66\x6f\x72\x6d\x61\x74\x73\x3a\x0a\x09\x68\x68\x3a\x6d" \
-"\x6d\x5b\x3a\x73\x73\x5d\x0a\x09\x5b\x59\x59\x59\x59\x2e\x5d\x4d" \
-"\x4d\x2e\x44\x44\x2d\x68\x68\x3a\x6d\x6d\x5b\x3a\x73\x73\x5d\x0a" \
-"\x09\x59\x59\x59\x59\x2d\x4d\x4d\x2d\x44\x44\x20\x68\x68\x3a\x6d" \
-"\x6d\x5b\x3a\x73\x73\x5d\x0a\x09\x5b\x5b\x5b\x5b\x5b\x59\x59\x5d" \
-"\x59\x59\x5d\x4d\x4d\x5d\x44\x44\x5d\x68\x68\x5d\x6d\x6d\x5b\x2e" \
-"\x73\x73\x5d\x0a\x09\x27\x64\x61\x74\x65\x20\x54\x49\x4d\x45\x27" \
-"\x20\x66\x6f\x72\x6d\x20\x61\x63\x63\x65\x70\x74\x73\x20\x4d\x4d" \
-"\x44\x44\x68\x68\x6d\x6d\x5b\x5b\x59\x59\x5d\x59\x59\x5d\x5b\x2e" \
-"\x73\x73\x5d\x20\x69\x6e\x73\x74\x65\x61\x64\x00\x45\x58\x50\x52" \
-"\x45\x53\x53\x49\x4f\x4e\x2e\x2e\x2e\x0a\x0a\x54\x69\x6e\x79\x20" \
-"\x52\x50\x4e\x20\x63\x61\x6c\x63\x75\x6c\x61\x74\x6f\x72\x2e\x20" \
-"\x4f\x70\x65\x72\x61\x74\x69\x6f\x6e\x73\x3a\x0a\x2b\x2c\x20\x61" \
-"\x64\x64\x2c\x20\x2d\x2c\x20\x73\x75\x62\x2c\x20\x2a\x2c\x20\x6d" \
-"\x75\x6c\x2c\x20\x2f\x2c\x20\x64\x69\x76\x2c\x20\x25\x2c\x20\x6d" \
-"\x6f\x64\x2c\x20\x2a\x2a\x2c\x20\x65\x78\x70\x2c\x20\x61\x6e\x64" \
-"\x2c\x20\x6f\x72\x2c\x20\x6e\x6f\x74\x2c\x20\x78\x6f\x72\x2c\x0a" \
-"\x70\x20\x2d\x20\x70\x72\x69\x6e\x74\x20\x74\x6f\x70\x20\x6f\x66" \
-"\x20\x74\x68\x65\x20\x73\x74\x61\x63\x6b\x20\x28\x77\x69\x74\x68" \
-"\x6f\x75\x74\x20\x70\x6f\x70\x70\x69\x6e\x67\x29\x2c\x0a\x66\x20" \
-"\x2d\x20\x70\x72\x69\x6e\x74\x20\x65\x6e\x74\x69\x72\x65\x20\x73" \
-"\x74\x61\x63\x6b\x2c\x0a\x6f\x20\x2d\x20\x70\x6f\x70\x20\x74\x68" \
-"\x65\x20\x76\x61\x6c\x75\x65\x20\x61\x6e\x64\x20\x73\x65\x74\x20" \
-"\x6f\x75\x74\x70\x75\x74\x20\x72\x61\x64\x69\x78\x20\x28\x6d\x75" \
-"\x73\x74\x20\x62\x65\x20\x31\x30\x2c\x20\x31\x36\x2c\x20\x38\x20" \
-"\x6f\x72\x20\x32\x29\x2e\x0a\x45\x78\x61\x6d\x70\x6c\x65\x73\x3a" \
-"\x20\x27\x64\x63\x20\x32\x20\x32\x20\x61\x64\x64\x20\x70\x27\x20" \
-"\x2d\x3e\x20\x34\x2c\x20\x27\x64\x63\x20\x38\x20\x38\x20\x6d\x75" \
-"\x6c\x20\x32\x20\x32\x20\x2b\x20\x2f\x20\x70\x27\x20\x2d\x3e\x20" \
-"\x31\x36\x00\x5b\x69\x66\x3d\x46\x49\x4c\x45\x5d\x20\x5b\x6f\x66" \
-"\x3d\x46\x49\x4c\x45\x5d\x20\x5b\x69\x62\x73\x3d\x4e\x5d\x20\x5b" \
-"\x6f\x62\x73\x3d\x4e\x5d\x20\x5b\x62\x73\x3d\x4e\x5d\x20\x5b\x63" \
-"\x6f\x75\x6e\x74\x3d\x4e\x5d\x20\x5b\x73\x6b\x69\x70\x3d\x4e\x5d" \
-"\x0a\x09\x5b\x73\x65\x65\x6b\x3d\x4e\x5d\x20\x5b\x63\x6f\x6e\x76" \
-"\x3d\x6e\x6f\x74\x72\x75\x6e\x63\x7c\x6e\x6f\x65\x72\x72\x6f\x72" \
-"\x7c\x73\x79\x6e\x63\x7c\x66\x73\x79\x6e\x63\x5d\x0a\x0a\x43\x6f" \
-"\x70\x79\x20\x61\x20\x66\x69\x6c\x65\x20\x77\x69\x74\x68\x20\x63" \
-"\x6f\x6e\x76\x65\x72\x74\x69\x6e\x67\x20\x61\x6e\x64\x20\x66\x6f" \
-"\x72\x6d\x61\x74\x74\x69\x6e\x67\x0a\x0a\x09\x69\x66\x3d\x46\x49" \
-"\x4c\x45\x09\x09\x52\x65\x61\x64\x20\x66\x72\x6f\x6d\x20\x46\x49" \
-"\x4c\x45\x20\x69\x6e\x73\x74\x65\x61\x64\x20\x6f\x66\x20\x73\x74" \
-"\x64\x69\x6e\x0a\x09\x6f\x66\x3d\x46\x49\x4c\x45\x09\x09\x57\x72" \
-"\x69\x74\x65\x20\x74\x6f\x20\x46\x49\x4c\x45\x20\x69\x6e\x73\x74" \
-"\x65\x61\x64\x20\x6f\x66\x20\x73\x74\x64\x6f\x75\x74\x0a\x09\x62" \
-"\x73\x3d\x4e\x09\x09\x52\x65\x61\x64\x20\x61\x6e\x64\x20\x77\x72" \
-"\x69\x74\x65\x20\x4e\x20\x62\x79\x74\x65\x73\x20\x61\x74\x20\x61" \
-"\x20\x74\x69\x6d\x65\x0a\x09\x69\x62\x73\x3d\x4e\x09\x09\x52\x65" \
-"\x61\x64\x20\x4e\x20\x62\x79\x74\x65\x73\x20\x61\x74\x20\x61\x20" \
-"\x74\x69\x6d\x65\x0a\x09\x6f\x62\x73\x3d\x4e\x09\x09\x57\x72\x69" \
-"\x74\x65\x20\x4e\x20\x62\x79\x74\x65\x73\x20\x61\x74\x20\x61\x20" \
-"\x74\x69\x6d\x65\x0a\x09\x63\x6f\x75\x6e\x74\x3d\x4e\x09\x09\x43" \
-"\x6f\x70\x79\x20\x6f\x6e\x6c\x79\x20\x4e\x20\x69\x6e\x70\x75\x74" \
-"\x20\x62\x6c\x6f\x63\x6b\x73\x0a\x09\x73\x6b\x69\x70\x3d\x4e\x09" \
-"\x09\x53\x6b\x69\x70\x20\x4e\x20\x69\x6e\x70\x75\x74\x20\x62\x6c" \
-"\x6f\x63\x6b\x73\x0a\x09\x73\x65\x65\x6b\x3d\x4e\x09\x09\x53\x6b" \
-"\x69\x70\x20\x4e\x20\x6f\x75\x74\x70\x75\x74\x20\x62\x6c\x6f\x63" \
-"\x6b\x73\x0a\x09\x63\x6f\x6e\x76\x3d\x6e\x6f\x74\x72\x75\x6e\x63" \
-"\x09\x44\x6f\x6e\x27\x74\x20\x74\x72\x75\x6e\x63\x61\x74\x65\x20" \
-"\x6f\x75\x74\x70\x75\x74\x20\x66\x69\x6c\x65\x0a\x09\x63\x6f\x6e" \
-"\x76\x3d\x6e\x6f\x65\x72\x72\x6f\x72\x09\x43\x6f\x6e\x74\x69\x6e" \
-"\x75\x65\x20\x61\x66\x74\x65\x72\x20\x72\x65\x61\x64\x20\x65\x72" \
-"\x72\x6f\x72\x73\x0a\x09\x63\x6f\x6e\x76\x3d\x73\x79\x6e\x63\x09" \
-"\x50\x61\x64\x20\x62\x6c\x6f\x63\x6b\x73\x20\x77\x69\x74\x68\x20" \
-"\x7a\x65\x72\x6f\x73\x0a\x09\x63\x6f\x6e\x76\x3d\x66\x73\x79\x6e" \
-"\x63\x09\x50\x68\x79\x73\x69\x63\x61\x6c\x6c\x79\x20\x77\x72\x69" \
-"\x74\x65\x20\x64\x61\x74\x61\x20\x6f\x75\x74\x20\x62\x65\x66\x6f" \
-"\x72\x65\x20\x66\x69\x6e\x69\x73\x68\x69\x6e\x67\x0a\x0a\x4e\x75" \
-"\x6d\x62\x65\x72\x73\x20\x6d\x61\x79\x20\x62\x65\x20\x73\x75\x66" \
-"\x66\x69\x78\x65\x64\x20\x62\x79\x20\x63\x20\x28\x78\x31\x29\x2c" \
-"\x20\x77\x20\x28\x78\x32\x29\x2c\x20\x62\x20\x28\x78\x35\x31\x32" \
-"\x29\x2c\x20\x6b\x44\x20\x28\x78\x31\x30\x30\x30\x29\x2c\x20\x6b" \
-"\x20\x28\x78\x31\x30\x32\x34\x29\x2c\x0a\x4d\x44\x20\x28\x78\x31" \
-"\x30\x30\x30\x30\x30\x30\x29\x2c\x20\x4d\x20\x28\x78\x31\x30\x34" \
-"\x38\x35\x37\x36\x29\x2c\x20\x47\x44\x20\x28\x78\x31\x30\x30\x30" \
-"\x30\x30\x30\x30\x30\x30\x29\x20\x6f\x72\x20\x47\x20\x28\x78\x31" \
-"\x30\x37\x33\x37\x34\x31\x38\x32\x34\x29\x00\x5b\x2d\x6e\x5d\x20" \
-"\x5b\x4d\x4f\x44\x46\x49\x4c\x45\x53\x5d\x2e\x2e\x2e\x0a\x0a\x47" \
-"\x65\x6e\x65\x72\x61\x74\x65\x20\x6d\x6f\x64\x75\x6c\x65\x73\x2e" \
-"\x64\x65\x70\x2c\x20\x61\x6c\x69\x61\x73\x2c\x20\x61\x6e\x64\x20" \
-"\x73\x79\x6d\x62\x6f\x6c\x73\x20\x66\x69\x6c\x65\x73\x0a\x0a\x09" \
-"\x2d\x6e\x09\x44\x72\x79\x20\x72\x75\x6e\x3a\x20\x70\x72\x69\x6e" \
-"\x74\x20\x66\x69\x6c\x65\x73\x20\x74\x6f\x20\x73\x74\x64\x6f\x75" \
-"\x74\x00\x41\x44\x44\x52\x45\x53\x53\x20\x5b\x57\x49\x44\x54\x48" \
-"\x20\x5b\x56\x41\x4c\x55\x45\x5d\x5d\x0a\x0a\x52\x65\x61\x64\x2f" \
-"\x77\x72\x69\x74\x65\x20\x66\x72\x6f\x6d\x20\x70\x68\x79\x73\x69" \
-"\x63\x61\x6c\x20\x61\x64\x64\x72\x65\x73\x73\x0a\x0a\x09\x41\x44" \
-"\x44\x52\x45\x53\x53\x09\x41\x64\x64\x72\x65\x73\x73\x20\x74\x6f" \
-"\x20\x61\x63\x74\x20\x75\x70\x6f\x6e\x0a\x09\x57\x49\x44\x54\x48" \
-"\x09\x57\x69\x64\x74\x68\x20\x28\x38\x2f\x31\x36\x2f\x2e\x2e\x2e" \
-"\x29\x0a\x09\x56\x41\x4c\x55\x45\x09\x44\x61\x74\x61\x20\x74\x6f" \
-"\x20\x62\x65\x20\x77\x72\x69\x74\x74\x65\x6e\x00\x5b\x2d\x50\x6b" \
-"\x6d\x68\x61\x69\x5d\x20\x5b\x2d\x42\x20\x53\x49\x5a\x45\x5d\x20" \
-"\x5b\x46\x49\x4c\x45\x53\x59\x53\x54\x45\x4d\x5d\x2e\x2e\x2e\x0a" \
-"\x0a\x50\x72\x69\x6e\x74\x20\x66\x69\x6c\x65\x73\x79\x73\x74\x65" \
-"\x6d\x20\x75\x73\x61\x67\x65\x20\x73\x74\x61\x74\x69\x73\x74\x69" \
-"\x63\x73\x0a\x0a\x09\x2d\x50\x09\x50\x4f\x53\x49\x58\x20\x6f\x75" \
-"\x74\x70\x75\x74\x20\x66\x6f\x72\x6d\x61\x74\x0a\x09\x2d\x6b\x09" \
-"\x31\x30\x32\x34\x2d\x62\x79\x74\x65\x20\x62\x6c\x6f\x63\x6b\x73" \
-"\x20\x28\x64\x65\x66\x61\x75\x6c\x74\x29\x0a\x09\x2d\x6d\x09\x31" \
-"\x4d\x2d\x62\x79\x74\x65\x20\x62\x6c\x6f\x63\x6b\x73\x0a\x09\x2d" \
-"\x68\x09\x48\x75\x6d\x61\x6e\x20\x72\x65\x61\x64\x61\x62\x6c\x65" \
-"\x20\x28\x65\x2e\x67\x2e\x20\x31\x4b\x20\x32\x34\x33\x4d\x20\x32" \
-"\x47\x29\x0a\x09\x2d\x61\x09\x53\x68\x6f\x77\x20\x61\x6c\x6c\x20" \
-"\x66\x69\x6c\x65\x73\x79\x73\x74\x65\x6d\x73\x0a\x09\x2d\x69\x09" \
-"\x49\x6e\x6f\x64\x65\x73\x0a\x09\x2d\x42\x20\x53\x49\x5a\x45\x09" \
-"\x42\x6c\x6f\x63\x6b\x73\x69\x7a\x65\x00\x5b\x2d\x61\x62\x42\x64" \
-"\x69\x4e\x71\x72\x54\x73\x74\x77\x5d\x20\x5b\x2d\x4c\x20\x4c\x41" \
-"\x42\x45\x4c\x5d\x20\x5b\x2d\x53\x20\x46\x49\x4c\x45\x5d\x20\x5b" \
-"\x2d\x55\x20\x4c\x49\x4e\x45\x53\x5d\x20\x46\x49\x4c\x45\x31\x20" \
-"\x46\x49\x4c\x45\x32\x0a\x0a\x43\x6f\x6d\x70\x61\x72\x65\x20\x66" \
-"\x69\x6c\x65\x73\x20\x6c\x69\x6e\x65\x20\x62\x79\x20\x6c\x69\x6e" \
-"\x65\x20\x61\x6e\x64\x20\x6f\x75\x74\x70\x75\x74\x20\x74\x68\x65" \
-"\x20\x64\x69\x66\x66\x65\x72\x65\x6e\x63\x65\x73\x20\x62\x65\x74" \
-"\x77\x65\x65\x6e\x20\x74\x68\x65\x6d\x2e\x0a\x54\x68\x69\x73\x20" \
-"\x69\x6d\x70\x6c\x65\x6d\x65\x6e\x74\x61\x74\x69\x6f\x6e\x20\x73" \
-"\x75\x70\x70\x6f\x72\x74\x73\x20\x75\x6e\x69\x66\x69\x65\x64\x20" \
-"\x64\x69\x66\x66\x73\x20\x6f\x6e\x6c\x79\x2e\x0a\x0a\x09\x2d\x61" \
-"\x09\x54\x72\x65\x61\x74\x20\x61\x6c\x6c\x20\x66\x69\x6c\x65\x73" \
-"\x20\x61\x73\x20\x74\x65\x78\x74\x0a\x09\x2d\x62\x09\x49\x67\x6e" \
-"\x6f\x72\x65\x20\x63\x68\x61\x6e\x67\x65\x73\x20\x69\x6e\x20\x74" \
-"\x68\x65\x20\x61\x6d\x6f\x75\x6e\x74\x20\x6f\x66\x20\x77\x68\x69" \
-"\x74\x65\x73\x70\x61\x63\x65\x0a\x09\x2d\x42\x09\x49\x67\x6e\x6f" \
-"\x72\x65\x20\x63\x68\x61\x6e\x67\x65\x73\x20\x77\x68\x6f\x73\x65" \
-"\x20\x6c\x69\x6e\x65\x73\x20\x61\x72\x65\x20\x61\x6c\x6c\x20\x62" \
-"\x6c\x61\x6e\x6b\x0a\x09\x2d\x64\x09\x54\x72\x79\x20\x68\x61\x72" \
-"\x64\x20\x74\x6f\x20\x66\x69\x6e\x64\x20\x61\x20\x73\x6d\x61\x6c" \
-"\x6c\x65\x72\x20\x73\x65\x74\x20\x6f\x66\x20\x63\x68\x61\x6e\x67" \
-"\x65\x73\x0a\x09\x2d\x69\x09\x49\x67\x6e\x6f\x72\x65\x20\x63\x61" \
-"\x73\x65\x20\x64\x69\x66\x66\x65\x72\x65\x6e\x63\x65\x73\x0a\x09" \
-"\x2d\x4c\x09\x55\x73\x65\x20\x4c\x41\x42\x45\x4c\x20\x69\x6e\x73" \
-"\x74\x65\x61\x64\x20\x6f\x66\x20\x74\x68\x65\x20\x66\x69\x6c\x65" \
-"\x6e\x61\x6d\x65\x20\x69\x6e\x20\x74\x68\x65\x20\x75\x6e\x69\x66" \
-"\x69\x65\x64\x20\x68\x65\x61\x64\x65\x72\x0a\x09\x2d\x4e\x09\x54" \
-"\x72\x65\x61\x74\x20\x61\x62\x73\x65\x6e\x74\x20\x66\x69\x6c\x65" \
-"\x73\x20\x61\x73\x20\x65\x6d\x70\x74\x79\x0a\x09\x2d\x71\x09\x4f" \
-"\x75\x74\x70\x75\x74\x20\x6f\x6e\x6c\x79\x20\x77\x68\x65\x74\x68" \
-"\x65\x72\x20\x66\x69\x6c\x65\x73\x20\x64\x69\x66\x66\x65\x72\x0a" \
-"\x09\x2d\x72\x09\x52\x65\x63\x75\x72\x73\x65\x0a\x09\x2d\x53\x09" \
-"\x53\x74\x61\x72\x74\x20\x77\x69\x74\x68\x20\x46\x49\x4c\x45\x20" \
-"\x77\x68\x65\x6e\x20\x63\x6f\x6d\x70\x61\x72\x69\x6e\x67\x20\x64" \
-"\x69\x72\x65\x63\x74\x6f\x72\x69\x65\x73\x0a\x09\x2d\x54\x09\x4d" \
-"\x61\x6b\x65\x20\x74\x61\x62\x73\x20\x6c\x69\x6e\x65\x20\x75\x70" \
-"\x20\x62\x79\x20\x70\x72\x65\x66\x69\x78\x69\x6e\x67\x20\x61\x20" \
-"\x74\x61\x62\x20\x77\x68\x65\x6e\x20\x6e\x65\x63\x65\x73\x73\x61" \
-"\x72\x79\x0a\x09\x2d\x73\x09\x52\x65\x70\x6f\x72\x74\x20\x77\x68" \
-"\x65\x6e\x20\x74\x77\x6f\x20\x66\x69\x6c\x65\x73\x20\x61\x72\x65" \
-"\x20\x74\x68\x65\x20\x73\x61\x6d\x65\x0a\x09\x2d\x74\x09\x45\x78" \
-"\x70\x61\x6e\x64\x20\x74\x61\x62\x73\x20\x74\x6f\x20\x73\x70\x61" \
-"\x63\x65\x73\x20\x69\x6e\x20\x6f\x75\x74\x70\x75\x74\x0a\x09\x2d" \
-"\x55\x09\x4f\x75\x74\x70\x75\x74\x20\x4c\x49\x4e\x45\x53\x20\x6c" \
-"\x69\x6e\x65\x73\x20\x6f\x66\x20\x63\x6f\x6e\x74\x65\x78\x74\x0a" \
-"\x09\x2d\x77\x09\x49\x67\x6e\x6f\x72\x65\x20\x61\x6c\x6c\x20\x77" \
-"\x68\x69\x74\x65\x73\x70\x61\x63\x65\x00\x46\x49\x4c\x45\x4e\x41" \
-"\x4d\x45\x0a\x0a\x53\x74\x72\x69\x70\x20\x6e\x6f\x6e\x2d\x64\x69" \
-"\x72\x65\x63\x74\x6f\x72\x79\x20\x73\x75\x66\x66\x69\x78\x20\x66" \
-"\x72\x6f\x6d\x20\x46\x49\x4c\x45\x4e\x41\x4d\x45\x00\x5b\x2d\x63" \
-"\x5d\x20\x5b\x2d\x6e\x20\x4c\x45\x56\x45\x4c\x5d\x20\x5b\x2d\x72" \
-"\x5d\x20\x5b\x2d\x73\x20\x53\x49\x5a\x45\x5d\x20\x5b\x2d\x43\x5d" \
-"\x0a\x0a\x50\x72\x69\x6e\x74\x20\x6f\x72\x20\x63\x6f\x6e\x74\x72" \
-"\x6f\x6c\x20\x74\x68\x65\x20\x6b\x65\x72\x6e\x65\x6c\x20\x72\x69" \
-"\x6e\x67\x20\x62\x75\x66\x66\x65\x72\x0a\x0a\x09\x2d\x63\x09\x09" \
-"\x43\x6c\x65\x61\x72\x20\x72\x69\x6e\x67\x20\x62\x75\x66\x66\x65" \
-"\x72\x20\x61\x66\x74\x65\x72\x20\x70\x72\x69\x6e\x74\x69\x6e\x67" \
-"\x0a\x09\x2d\x6e\x20\x4c\x45\x56\x45\x4c\x09\x53\x65\x74\x20\x63" \
-"\x6f\x6e\x73\x6f\x6c\x65\x20\x6c\x6f\x67\x67\x69\x6e\x67\x20\x6c" \
-"\x65\x76\x65\x6c\x0a\x09\x2d\x72\x09\x09\x53\x68\x6f\x77\x20\x6c" \
-"\x65\x76\x65\x6c\x20\x70\x72\x65\x66\x69\x78\x0a\x09\x2d\x73\x20" \
-"\x53\x49\x5a\x45\x09\x09\x42\x75\x66\x66\x65\x72\x20\x73\x69\x7a" \
-"\x65\x0a\x09\x2d\x43\x09\x09\x43\x6f\x6c\x6f\x72\x65\x64\x20\x6f" \
-"\x75\x74\x70\x75\x74\x00\x5b\x2d\x64\x76\x73\x5d\x20\x5b\x2d\x63" \
-"\x20\x43\x4f\x4e\x46\x46\x49\x4c\x45\x5d\x20\x5b\x2d\x74\x20\x54" \
-"\x54\x4c\x5f\x53\x45\x43\x5d\x20\x5b\x2d\x70\x20\x50\x4f\x52\x54" \
-"\x5d\x20\x5b\x2d\x69\x20\x41\x44\x44\x52\x5d\x0a\x0a\x53\x6d\x61" \
-"\x6c\x6c\x20\x73\x74\x61\x74\x69\x63\x20\x44\x4e\x53\x20\x73\x65" \
-"\x72\x76\x65\x72\x20\x64\x61\x65\x6d\x6f\x6e\x0a\x0a\x09\x2d\x63" \
-"\x20\x46\x49\x4c\x45\x09\x43\x6f\x6e\x66\x69\x67\x20\x66\x69\x6c" \
-"\x65\x0a\x09\x2d\x74\x20\x53\x45\x43\x09\x54\x54\x4c\x0a\x09\x2d" \
-"\x70\x20\x50\x4f\x52\x54\x09\x4c\x69\x73\x74\x65\x6e\x20\x6f\x6e" \
-"\x20\x50\x4f\x52\x54\x0a\x09\x2d\x69\x20\x41\x44\x44\x52\x09\x4c" \
-"\x69\x73\x74\x65\x6e\x20\x6f\x6e\x20\x41\x44\x44\x52\x0a\x09\x2d" \
-"\x64\x09\x44\x61\x65\x6d\x6f\x6e\x69\x7a\x65\x0a\x09\x2d\x76\x09" \
-"\x56\x65\x72\x62\x6f\x73\x65\x0a\x09\x2d\x73\x09\x53\x65\x6e\x64" \
-"\x20\x73\x75\x63\x63\x65\x73\x73\x66\x75\x6c\x20\x72\x65\x70\x6c" \
-"\x69\x65\x73\x20\x6f\x6e\x6c\x79\x2e\x20\x55\x73\x65\x20\x74\x68" \
-"\x69\x73\x20\x69\x66\x20\x79\x6f\x75\x20\x77\x61\x6e\x74\x0a\x09" \
-"\x09\x74\x6f\x20\x75\x73\x65\x20\x2f\x65\x74\x63\x2f\x72\x65\x73" \
-"\x6f\x6c\x76\x2e\x63\x6f\x6e\x66\x20\x77\x69\x74\x68\x20\x74\x77" \
-"\x6f\x20\x6e\x61\x6d\x65\x73\x65\x72\x76\x65\x72\x20\x6c\x69\x6e" \
-"\x65\x73\x3a\x0a\x09\x09\x09\x6e\x61\x6d\x65\x73\x65\x72\x76\x65" \
-"\x72\x20\x44\x4e\x53\x44\x5f\x53\x45\x52\x56\x45\x52\x0a\x09\x09" \
-"\x09\x6e\x61\x6d\x65\x73\x65\x72\x76\x65\x72\x20\x4e\x4f\x52\x4d" \
-"\x41\x4c\x5f\x44\x4e\x53\x5f\x53\x45\x52\x56\x45\x52\x00\x5b\x2d" \
-"\x75\x64\x5d\x20\x5b\x46\x49\x4c\x45\x5d\x0a\x0a\x43\x6f\x6e\x76" \
-"\x65\x72\x74\x20\x46\x49\x4c\x45\x20\x69\x6e\x2d\x70\x6c\x61\x63" \
-"\x65\x20\x66\x72\x6f\x6d\x20\x44\x4f\x53\x20\x74\x6f\x20\x55\x6e" \
-"\x69\x78\x20\x66\x6f\x72\x6d\x61\x74\x2e\x0a\x57\x68\x65\x6e\x20" \
-"\x6e\x6f\x20\x66\x69\x6c\x65\x20\x69\x73\x20\x67\x69\x76\x65\x6e" \
-"\x2c\x20\x75\x73\x65\x20\x73\x74\x64\x69\x6e\x2f\x73\x74\x64\x6f" \
-"\x75\x74\x2e\x0a\x0a\x09\x2d\x75\x09\x64\x6f\x73\x32\x75\x6e\x69" \
-"\x78\x0a\x09\x2d\x64\x09\x75\x6e\x69\x78\x32\x64\x6f\x73\x00\x5b" \
-"\x2d\x61\x48\x4c\x64\x63\x6c\x73\x78\x68\x6d\x6b\x5d\x20\x5b\x46" \
-"\x49\x4c\x45\x5d\x2e\x2e\x2e\x0a\x0a\x53\x75\x6d\x6d\x61\x72\x69" \
-"\x7a\x65\x20\x64\x69\x73\x6b\x20\x73\x70\x61\x63\x65\x20\x75\x73" \
-"\x65\x64\x20\x66\x6f\x72\x20\x65\x61\x63\x68\x20\x46\x49\x4c\x45" \
-"\x20\x61\x6e\x64\x2f\x6f\x72\x20\x64\x69\x72\x65\x63\x74\x6f\x72" \
-"\x79\x0a\x0a\x09\x2d\x61\x09\x53\x68\x6f\x77\x20\x66\x69\x6c\x65" \
-"\x20\x73\x69\x7a\x65\x73\x20\x74\x6f\x6f\x0a\x09\x2d\x4c\x09\x46" \
-"\x6f\x6c\x6c\x6f\x77\x20\x61\x6c\x6c\x20\x73\x79\x6d\x6c\x69\x6e" \
-"\x6b\x73\x0a\x09\x2d\x48\x09\x46\x6f\x6c\x6c\x6f\x77\x20\x73\x79" \
-"\x6d\x6c\x69\x6e\x6b\x73\x20\x6f\x6e\x20\x63\x6f\x6d\x6d\x61\x6e" \
-"\x64\x20\x6c\x69\x6e\x65\x0a\x09\x2d\x64\x20\x4e\x09\x4c\x69\x6d" \
-"\x69\x74\x20\x6f\x75\x74\x70\x75\x74\x20\x74\x6f\x20\x64\x69\x72" \
-"\x65\x63\x74\x6f\x72\x69\x65\x73\x20\x28\x61\x6e\x64\x20\x66\x69" \
-"\x6c\x65\x73\x20\x77\x69\x74\x68\x20\x2d\x61\x29\x20\x6f\x66\x20" \
-"\x64\x65\x70\x74\x68\x20\x3c\x20\x4e\x0a\x09\x2d\x63\x09\x53\x68" \
-"\x6f\x77\x20\x67\x72\x61\x6e\x64\x20\x74\x6f\x74\x61\x6c\x0a\x09" \
-"\x2d\x6c\x09\x43\x6f\x75\x6e\x74\x20\x73\x69\x7a\x65\x73\x20\x6d" \
-"\x61\x6e\x79\x20\x74\x69\x6d\x65\x73\x20\x69\x66\x20\x68\x61\x72" \
-"\x64\x20\x6c\x69\x6e\x6b\x65\x64\x0a\x09\x2d\x73\x09\x44\x69\x73" \
-"\x70\x6c\x61\x79\x20\x6f\x6e\x6c\x79\x20\x61\x20\x74\x6f\x74\x61" \
-"\x6c\x20\x66\x6f\x72\x20\x65\x61\x63\x68\x20\x61\x72\x67\x75\x6d" \
-"\x65\x6e\x74\x0a\x09\x2d\x78\x09\x53\x6b\x69\x70\x20\x64\x69\x72" \
-"\x65\x63\x74\x6f\x72\x69\x65\x73\x20\x6f\x6e\x20\x64\x69\x66\x66" \
-"\x65\x72\x65\x6e\x74\x20\x66\x69\x6c\x65\x73\x79\x73\x74\x65\x6d" \
-"\x73\x0a\x09\x2d\x68\x09\x53\x69\x7a\x65\x73\x20\x69\x6e\x20\x68" \
-"\x75\x6d\x61\x6e\x20\x72\x65\x61\x64\x61\x62\x6c\x65\x20\x66\x6f" \
-"\x72\x6d\x61\x74\x20\x28\x65\x2e\x67\x2e\x2c\x20\x31\x4b\x20\x32" \
-"\x34\x33\x4d\x20\x32\x47\x29\x0a\x09\x2d\x6d\x09\x53\x69\x7a\x65" \
-"\x73\x20\x69\x6e\x20\x6d\x65\x67\x61\x62\x79\x74\x65\x73\x0a\x09" \
-"\x2d\x6b\x09\x53\x69\x7a\x65\x73\x20\x69\x6e\x20\x6b\x69\x6c\x6f" \
-"\x62\x79\x74\x65\x73\x20\x28\x64\x65\x66\x61\x75\x6c\x74\x29\x00" \
-"\x5b\x2d\x6e\x65\x45\x5d\x20\x5b\x41\x52\x47\x5d\x2e\x2e\x2e\x0a" \
-"\x0a\x50\x72\x69\x6e\x74\x20\x74\x68\x65\x20\x73\x70\x65\x63\x69" \
-"\x66\x69\x65\x64\x20\x41\x52\x47\x73\x20\x74\x6f\x20\x73\x74\x64" \
-"\x6f\x75\x74\x0a\x0a\x09\x2d\x6e\x09\x53\x75\x70\x70\x72\x65\x73" \
-"\x73\x20\x74\x72\x61\x69\x6c\x69\x6e\x67\x20\x6e\x65\x77\x6c\x69" \
-"\x6e\x65\x0a\x09\x2d\x65\x09\x49\x6e\x74\x65\x72\x70\x72\x65\x74" \
-"\x20\x62\x61\x63\x6b\x73\x6c\x61\x73\x68\x20\x65\x73\x63\x61\x70" \
-"\x65\x73\x20\x28\x69\x2e\x65\x2e\x2c\x20\x5c\x74\x3d\x74\x61\x62" \
-"\x29\x0a\x09\x2d\x45\x09\x44\x6f\x6e\x27\x74\x20\x69\x6e\x74\x65" \
-"\x72\x70\x72\x65\x74\x20\x62\x61\x63\x6b\x73\x6c\x61\x73\x68\x20" \
-"\x65\x73\x63\x61\x70\x65\x73\x20\x28\x64\x65\x66\x61\x75\x6c\x74" \
-"\x29\x00\x00\x08\x00\x5b\x2d\x69\x75\x5d\x20\x5b\x2d\x5d\x20\x5b" \
-"\x6e\x61\x6d\x65\x3d\x76\x61\x6c\x75\x65\x5d\x2e\x2e\x2e\x20\x5b" \
-"\x50\x52\x4f\x47\x20\x41\x52\x47\x53\x5d\x0a\x0a\x50\x72\x69\x6e" \
-"\x74\x20\x74\x68\x65\x20\x63\x75\x72\x72\x65\x6e\x74\x20\x65\x6e" \
-"\x76\x69\x72\x6f\x6e\x6d\x65\x6e\x74\x20\x6f\x72\x20\x72\x75\x6e" \
-"\x20\x50\x52\x4f\x47\x20\x61\x66\x74\x65\x72\x20\x73\x65\x74\x74" \
-"\x69\x6e\x67\x20\x75\x70\x0a\x74\x68\x65\x20\x73\x70\x65\x63\x69" \
-"\x66\x69\x65\x64\x20\x65\x6e\x76\x69\x72\x6f\x6e\x6d\x65\x6e\x74" \
-"\x0a\x0a\x09\x2d\x2c\x20\x2d\x69\x09\x53\x74\x61\x72\x74\x20\x77" \
-"\x69\x74\x68\x20\x61\x6e\x20\x65\x6d\x70\x74\x79\x20\x65\x6e\x76" \
-"\x69\x72\x6f\x6e\x6d\x65\x6e\x74\x0a\x09\x2d\x75\x09\x52\x65\x6d" \
-"\x6f\x76\x65\x20\x76\x61\x72\x69\x61\x62\x6c\x65\x20\x66\x72\x6f" \
-"\x6d\x20\x74\x68\x65\x20\x65\x6e\x76\x69\x72\x6f\x6e\x6d\x65\x6e" \
-"\x74\x00\x5b\x2d\x69\x5d\x20\x5b\x2d\x74\x20\x4e\x5d\x20\x5b\x46" \
-"\x49\x4c\x45\x5d\x2e\x2e\x2e\x0a\x0a\x43\x6f\x6e\x76\x65\x72\x74" \
-"\x20\x74\x61\x62\x73\x20\x74\x6f\x20\x73\x70\x61\x63\x65\x73\x2c" \
-"\x20\x77\x72\x69\x74\x69\x6e\x67\x20\x74\x6f\x20\x73\x74\x64\x6f" \
-"\x75\x74\x0a\x0a\x09\x2d\x69\x2c\x2d\x2d\x69\x6e\x69\x74\x69\x61" \
-"\x6c\x09\x44\x6f\x6e\x27\x74\x20\x63\x6f\x6e\x76\x65\x72\x74\x20" \
-"\x74\x61\x62\x73\x20\x61\x66\x74\x65\x72\x20\x6e\x6f\x6e\x20\x62" \
-"\x6c\x61\x6e\x6b\x73\x0a\x09\x2d\x74\x2c\x2d\x2d\x74\x61\x62\x73" \
-"\x3d\x4e\x09\x54\x61\x62\x73\x74\x6f\x70\x73\x20\x65\x76\x65\x72" \
-"\x79\x20\x4e\x20\x63\x68\x61\x72\x73\x00\x45\x58\x50\x52\x45\x53" \
-"\x53\x49\x4f\x4e\x0a\x0a\x50\x72\x69\x6e\x74\x20\x74\x68\x65\x20" \
-"\x76\x61\x6c\x75\x65\x20\x6f\x66\x20\x45\x58\x50\x52\x45\x53\x53" \
-"\x49\x4f\x4e\x20\x74\x6f\x20\x73\x74\x64\x6f\x75\x74\x0a\x0a\x45" \
-"\x58\x50\x52\x45\x53\x53\x49\x4f\x4e\x20\x6d\x61\x79\x20\x62\x65" \
-"\x3a\x0a\x09\x41\x52\x47\x31\x20\x7c\x20\x41\x52\x47\x32\x09\x41" \
-"\x52\x47\x31\x20\x69\x66\x20\x69\x74\x20\x69\x73\x20\x6e\x65\x69" \
-"\x74\x68\x65\x72\x20\x6e\x75\x6c\x6c\x20\x6e\x6f\x72\x20\x30\x2c" \
-"\x20\x6f\x74\x68\x65\x72\x77\x69\x73\x65\x20\x41\x52\x47\x32\x0a" \
-"\x09\x41\x52\x47\x31\x20\x26\x20\x41\x52\x47\x32\x09\x41\x52\x47" \
-"\x31\x20\x69\x66\x20\x6e\x65\x69\x74\x68\x65\x72\x20\x61\x72\x67" \
-"\x75\x6d\x65\x6e\x74\x20\x69\x73\x20\x6e\x75\x6c\x6c\x20\x6f\x72" \
-"\x20\x30\x2c\x20\x6f\x74\x68\x65\x72\x77\x69\x73\x65\x20\x30\x0a" \
-"\x09\x41\x52\x47\x31\x20\x3c\x20\x41\x52\x47\x32\x09\x31\x20\x69" \
-"\x66\x20\x41\x52\x47\x31\x20\x69\x73\x20\x6c\x65\x73\x73\x20\x74" \
-"\x68\x61\x6e\x20\x41\x52\x47\x32\x2c\x20\x65\x6c\x73\x65\x20\x30" \
-"\x2e\x20\x53\x69\x6d\x69\x6c\x61\x72\x6c\x79\x3a\x0a\x09\x41\x52" \
-"\x47\x31\x20\x3c\x3d\x20\x41\x52\x47\x32\x0a\x09\x41\x52\x47\x31" \
-"\x20\x3d\x20\x41\x52\x47\x32\x0a\x09\x41\x52\x47\x31\x20\x21\x3d" \
-"\x20\x41\x52\x47\x32\x0a\x09\x41\x52\x47\x31\x20\x3e\x3d\x20\x41" \
-"\x52\x47\x32\x0a\x09\x41\x52\x47\x31\x20\x3e\x20\x41\x52\x47\x32" \
-"\x0a\x09\x41\x52\x47\x31\x20\x2b\x20\x41\x52\x47\x32\x09\x53\x75" \
-"\x6d\x20\x6f\x66\x20\x41\x52\x47\x31\x20\x61\x6e\x64\x20\x41\x52" \
-"\x47\x32\x2e\x20\x53\x69\x6d\x69\x6c\x61\x72\x6c\x79\x3a\x0a\x09" \
-"\x41\x52\x47\x31\x20\x2d\x20\x41\x52\x47\x32\x0a\x09\x41\x52\x47" \
-"\x31\x20\x2a\x20\x41\x52\x47\x32\x0a\x09\x41\x52\x47\x31\x20\x2f" \
-"\x20\x41\x52\x47\x32\x0a\x09\x41\x52\x47\x31\x20\x25\x20\x41\x52" \
-"\x47\x32\x0a\x09\x53\x54\x52\x49\x4e\x47\x20\x3a\x20\x52\x45\x47" \
-"\x45\x58\x50\x09\x09\x41\x6e\x63\x68\x6f\x72\x65\x64\x20\x70\x61" \
-"\x74\x74\x65\x72\x6e\x20\x6d\x61\x74\x63\x68\x20\x6f\x66\x20\x52" \
-"\x45\x47\x45\x58\x50\x20\x69\x6e\x20\x53\x54\x52\x49\x4e\x47\x0a" \
-"\x09\x6d\x61\x74\x63\x68\x20\x53\x54\x52\x49\x4e\x47\x20\x52\x45" \
-"\x47\x45\x58\x50\x09\x53\x61\x6d\x65\x20\x61\x73\x20\x53\x54\x52" \
-"\x49\x4e\x47\x20\x3a\x20\x52\x45\x47\x45\x58\x50\x0a\x09\x73\x75" \
-"\x62\x73\x74\x72\x20\x53\x54\x52\x49\x4e\x47\x20\x50\x4f\x53\x20" \
-"\x4c\x45\x4e\x47\x54\x48\x20\x53\x75\x62\x73\x74\x72\x69\x6e\x67" \
-"\x20\x6f\x66\x20\x53\x54\x52\x49\x4e\x47\x2c\x20\x50\x4f\x53\x20" \
-"\x63\x6f\x75\x6e\x74\x65\x64\x20\x66\x72\x6f\x6d\x20\x31\x0a\x09" \
-"\x69\x6e\x64\x65\x78\x20\x53\x54\x52\x49\x4e\x47\x20\x43\x48\x41" \
-"\x52\x53\x09\x49\x6e\x64\x65\x78\x20\x69\x6e\x20\x53\x54\x52\x49" \
-"\x4e\x47\x20\x77\x68\x65\x72\x65\x20\x61\x6e\x79\x20\x43\x48\x41" \
-"\x52\x53\x20\x69\x73\x20\x66\x6f\x75\x6e\x64\x2c\x20\x6f\x72\x20" \
-"\x30\x0a\x09\x6c\x65\x6e\x67\x74\x68\x20\x53\x54\x52\x49\x4e\x47" \
-"\x09\x09\x4c\x65\x6e\x67\x74\x68\x20\x6f\x66\x20\x53\x54\x52\x49" \
-"\x4e\x47\x0a\x09\x71\x75\x6f\x74\x65\x20\x54\x4f\x4b\x45\x4e\x09" \
-"\x09\x49\x6e\x74\x65\x72\x70\x72\x65\x74\x20\x54\x4f\x4b\x45\x4e" \
-"\x20\x61\x73\x20\x61\x20\x73\x74\x72\x69\x6e\x67\x2c\x20\x65\x76" \
-"\x65\x6e\x20\x69\x66\x0a\x09\x09\x09\x09\x69\x74\x20\x69\x73\x20" \
-"\x61\x20\x6b\x65\x79\x77\x6f\x72\x64\x20\x6c\x69\x6b\x65\x20\x27" \
-"\x6d\x61\x74\x63\x68\x27\x20\x6f\x72\x20\x61\x6e\x0a\x09\x09\x09" \
-"\x09\x6f\x70\x65\x72\x61\x74\x6f\x72\x20\x6c\x69\x6b\x65\x20\x27" \
-"\x2f\x27\x0a\x09\x28\x45\x58\x50\x52\x45\x53\x53\x49\x4f\x4e\x29" \
-"\x09\x09\x56\x61\x6c\x75\x65\x20\x6f\x66\x20\x45\x58\x50\x52\x45" \
-"\x53\x53\x49\x4f\x4e\x0a\x0a\x42\x65\x77\x61\x72\x65\x20\x74\x68" \
-"\x61\x74\x20\x6d\x61\x6e\x79\x20\x6f\x70\x65\x72\x61\x74\x6f\x72" \
-"\x73\x20\x6e\x65\x65\x64\x20\x74\x6f\x20\x62\x65\x20\x65\x73\x63" \
-"\x61\x70\x65\x64\x20\x6f\x72\x20\x71\x75\x6f\x74\x65\x64\x20\x66" \
-"\x6f\x72\x20\x73\x68\x65\x6c\x6c\x73\x2e\x0a\x43\x6f\x6d\x70\x61" \
-"\x72\x69\x73\x6f\x6e\x73\x20\x61\x72\x65\x20\x61\x72\x69\x74\x68" \
-"\x6d\x65\x74\x69\x63\x20\x69\x66\x20\x62\x6f\x74\x68\x20\x41\x52" \
-"\x47\x73\x20\x61\x72\x65\x20\x6e\x75\x6d\x62\x65\x72\x73\x2c\x20" \
-"\x65\x6c\x73\x65\x0a\x6c\x65\x78\x69\x63\x6f\x67\x72\x61\x70\x68" \
-"\x69\x63\x61\x6c\x2e\x20\x50\x61\x74\x74\x65\x72\x6e\x20\x6d\x61" \
-"\x74\x63\x68\x65\x73\x20\x72\x65\x74\x75\x72\x6e\x20\x74\x68\x65" \
-"\x20\x73\x74\x72\x69\x6e\x67\x20\x6d\x61\x74\x63\x68\x65\x64\x20" \
-"\x62\x65\x74\x77\x65\x65\x6e\x0a\x5c\x28\x20\x61\x6e\x64\x20\x5c" \
-"\x29\x20\x6f\x72\x20\x6e\x75\x6c\x6c\x3b\x20\x69\x66\x20\x5c\x28" \
-"\x20\x61\x6e\x64\x20\x5c\x29\x20\x61\x72\x65\x20\x6e\x6f\x74\x20" \
-"\x75\x73\x65\x64\x2c\x20\x74\x68\x65\x79\x20\x72\x65\x74\x75\x72" \
-"\x6e\x20\x74\x68\x65\x20\x6e\x75\x6d\x62\x65\x72\x0a\x6f\x66\x20" \
-"\x63\x68\x61\x72\x61\x63\x74\x65\x72\x73\x20\x6d\x61\x74\x63\x68" \
-"\x65\x64\x20\x6f\x72\x20\x30\x2e\x00\x0a\x0a\x52\x65\x74\x75\x72" \
-"\x6e\x20\x61\x6e\x20\x65\x78\x69\x74\x20\x63\x6f\x64\x65\x20\x6f" \
-"\x66\x20\x46\x41\x4c\x53\x45\x20\x28\x31\x29\x00\x5b\x4f\x50\x54" \
-"\x49\x4f\x4e\x53\x5d\x20\x5b\x4d\x4f\x44\x45\x5d\x0a\x0a\x53\x68" \
-"\x6f\x77\x20\x61\x6e\x64\x20\x6d\x6f\x64\x69\x66\x79\x20\x66\x72" \
-"\x61\x6d\x65\x20\x62\x75\x66\x66\x65\x72\x20\x73\x65\x74\x74\x69" \
-"\x6e\x67\x73\x00\x2d\x73\x20\x49\x4d\x47\x46\x49\x4c\x45\x20\x5b" \
-"\x2d\x63\x5d\x20\x5b\x2d\x64\x20\x44\x45\x56\x5d\x20\x5b\x2d\x69" \
-"\x20\x49\x4e\x49\x46\x49\x4c\x45\x5d\x20\x5b\x2d\x66\x20\x43\x4d" \
-"\x44\x5d\x0a\x0a\x09\x2d\x73\x09\x49\x6d\x61\x67\x65\x0a\x09\x2d" \
-"\x63\x09\x48\x69\x64\x65\x20\x63\x75\x72\x73\x6f\x72\x0a\x09\x2d" \
-"\x64\x09\x46\x72\x61\x6d\x65\x62\x75\x66\x66\x65\x72\x20\x64\x65" \
-"\x76\x69\x63\x65\x20\x28\x64\x65\x66\x61\x75\x6c\x74\x20\x2f\x64" \
-"\x65\x76\x2f\x66\x62\x30\x29\x0a\x09\x2d\x69\x09\x43\x6f\x6e\x66" \
-"\x69\x67\x20\x66\x69\x6c\x65\x20\x28\x76\x61\x72\x3d\x76\x61\x6c" \
-"\x75\x65\x29\x3a\x0a\x09\x09\x09\x42\x41\x52\x5f\x4c\x45\x46\x54" \
-"\x2c\x42\x41\x52\x5f\x54\x4f\x50\x2c\x42\x41\x52\x5f\x57\x49\x44" \
-"\x54\x48\x2c\x42\x41\x52\x5f\x48\x45\x49\x47\x48\x54\x0a\x09\x09" \
-"\x09\x42\x41\x52\x5f\x52\x2c\x42\x41\x52\x5f\x47\x2c\x42\x41\x52" \
-"\x5f\x42\x0a\x09\x2d\x66\x09\x43\x6f\x6e\x74\x72\x6f\x6c\x20\x70" \
-"\x69\x70\x65\x20\x28\x65\x6c\x73\x65\x20\x65\x78\x69\x74\x20\x61" \
-"\x66\x74\x65\x72\x20\x64\x72\x61\x77\x69\x6e\x67\x20\x69\x6d\x61" \
-"\x67\x65\x29\x0a\x09\x09\x09\x63\x6f\x6d\x6d\x61\x6e\x64\x73\x3a" \
-"\x20\x27\x4e\x4e\x27\x20\x28\x25\x20\x66\x6f\x72\x20\x70\x72\x6f" \
-"\x67\x72\x65\x73\x73\x20\x62\x61\x72\x29\x20\x6f\x72\x20\x27\x65" \
-"\x78\x69\x74\x27\x00\x5b\x2d\x75\x6c\x5d\x20\x5b\x2d\x43\x20\x43" \
-"\x59\x4c\x49\x4e\x44\x45\x52\x53\x5d\x20\x5b\x2d\x48\x20\x48\x45" \
-"\x41\x44\x53\x5d\x20\x5b\x2d\x53\x20\x53\x45\x43\x54\x4f\x52\x53" \
-"\x5d\x20\x5b\x2d\x62\x20\x53\x53\x5a\x5d\x20\x44\x49\x53\x4b\x0a" \
-"\x0a\x43\x68\x61\x6e\x67\x65\x20\x70\x61\x72\x74\x69\x74\x69\x6f" \
-"\x6e\x20\x74\x61\x62\x6c\x65\x0a\x0a\x09\x2d\x75\x09\x09\x53\x74" \
-"\x61\x72\x74\x20\x61\x6e\x64\x20\x45\x6e\x64\x20\x61\x72\x65\x20" \
-"\x69\x6e\x20\x73\x65\x63\x74\x6f\x72\x73\x20\x28\x69\x6e\x73\x74" \
-"\x65\x61\x64\x20\x6f\x66\x20\x63\x79\x6c\x69\x6e\x64\x65\x72\x73" \
-"\x29\x0a\x09\x2d\x6c\x09\x09\x53\x68\x6f\x77\x20\x70\x61\x72\x74" \
-"\x69\x74\x69\x6f\x6e\x20\x74\x61\x62\x6c\x65\x20\x66\x6f\x72\x20" \
-"\x65\x61\x63\x68\x20\x44\x49\x53\x4b\x2c\x20\x74\x68\x65\x6e\x20" \
-"\x65\x78\x69\x74\x0a\x09\x2d\x62\x20\x32\x30\x34\x38\x09\x09\x28" \
-"\x66\x6f\x72\x20\x63\x65\x72\x74\x61\x69\x6e\x20\x4d\x4f\x20\x64" \
-"\x69\x73\x6b\x73\x29\x20\x75\x73\x65\x20\x32\x30\x34\x38\x2d\x62" \
-"\x79\x74\x65\x20\x73\x65\x63\x74\x6f\x72\x73\x0a\x09\x2d\x43\x20" \
-"\x43\x59\x4c\x49\x4e\x44\x45\x52\x53\x09\x53\x65\x74\x20\x6e\x75" \
-"\x6d\x62\x65\x72\x20\x6f\x66\x20\x63\x79\x6c\x69\x6e\x64\x65\x72" \
-"\x73\x2f\x68\x65\x61\x64\x73\x2f\x73\x65\x63\x74\x6f\x72\x73\x0a" \
-"\x09\x2d\x48\x20\x48\x45\x41\x44\x53\x0a\x09\x2d\x53\x20\x53\x45" \
-"\x43\x54\x4f\x52\x53\x00\x08\x00\x5b\x50\x41\x54\x48\x5d\x2e\x2e" \
-"\x2e\x20\x5b\x4f\x50\x54\x49\x4f\x4e\x53\x5d\x20\x5b\x41\x43\x54" \
-"\x49\x4f\x4e\x53\x5d\x0a\x0a\x53\x65\x61\x72\x63\x68\x20\x66\x6f" \
-"\x72\x20\x66\x69\x6c\x65\x73\x20\x61\x6e\x64\x20\x70\x65\x72\x66" \
-"\x6f\x72\x6d\x20\x61\x63\x74\x69\x6f\x6e\x73\x20\x6f\x6e\x20\x74" \
-"\x68\x65\x6d\x2e\x0a\x46\x69\x72\x73\x74\x20\x66\x61\x69\x6c\x65" \
-"\x64\x20\x61\x63\x74\x69\x6f\x6e\x20\x73\x74\x6f\x70\x73\x20\x70" \
-"\x72\x6f\x63\x65\x73\x73\x69\x6e\x67\x20\x6f\x66\x20\x63\x75\x72" \
-"\x72\x65\x6e\x74\x20\x66\x69\x6c\x65\x2e\x0a\x44\x65\x66\x61\x75" \
-"\x6c\x74\x73\x3a\x20\x50\x41\x54\x48\x20\x69\x73\x20\x63\x75\x72" \
-"\x72\x65\x6e\x74\x20\x64\x69\x72\x65\x63\x74\x6f\x72\x79\x2c\x20" \
-"\x61\x63\x74\x69\x6f\x6e\x20\x69\x73\x20\x27\x2d\x70\x72\x69\x6e" \
-"\x74\x27\x0a\x0a\x09\x2d\x66\x6f\x6c\x6c\x6f\x77\x09\x09\x46\x6f" \
-"\x6c\x6c\x6f\x77\x20\x73\x79\x6d\x6c\x69\x6e\x6b\x73\x0a\x09\x2d" \
-"\x78\x64\x65\x76\x09\x09\x44\x6f\x6e\x27\x74\x20\x64\x65\x73\x63" \
-"\x65\x6e\x64\x20\x64\x69\x72\x65\x63\x74\x6f\x72\x69\x65\x73\x20" \
-"\x6f\x6e\x20\x6f\x74\x68\x65\x72\x20\x66\x69\x6c\x65\x73\x79\x73" \
-"\x74\x65\x6d\x73\x0a\x09\x2d\x6d\x61\x78\x64\x65\x70\x74\x68\x20" \
-"\x4e\x09\x44\x65\x73\x63\x65\x6e\x64\x20\x61\x74\x20\x6d\x6f\x73" \
-"\x74\x20\x4e\x20\x6c\x65\x76\x65\x6c\x73\x2e\x20\x2d\x6d\x61\x78" \
-"\x64\x65\x70\x74\x68\x20\x30\x20\x61\x70\x70\x6c\x69\x65\x73\x0a" \
-"\x09\x09\x09\x61\x63\x74\x69\x6f\x6e\x73\x20\x74\x6f\x20\x63\x6f" \
-"\x6d\x6d\x61\x6e\x64\x20\x6c\x69\x6e\x65\x20\x61\x72\x67\x75\x6d" \
-"\x65\x6e\x74\x73\x20\x6f\x6e\x6c\x79\x0a\x09\x2d\x6d\x69\x6e\x64" \
-"\x65\x70\x74\x68\x20\x4e\x09\x44\x6f\x6e\x27\x74\x20\x61\x63\x74" \
-"\x20\x6f\x6e\x20\x66\x69\x72\x73\x74\x20\x4e\x20\x6c\x65\x76\x65" \
-"\x6c\x73\x0a\x09\x2d\x64\x65\x70\x74\x68\x09\x09\x41\x63\x74\x20" \
-"\x6f\x6e\x20\x64\x69\x72\x65\x63\x74\x6f\x72\x79\x20\x2a\x61\x66" \
-"\x74\x65\x72\x2a\x20\x74\x72\x61\x76\x65\x72\x73\x69\x6e\x67\x20" \
-"\x69\x74\x0a\x0a\x41\x63\x74\x69\x6f\x6e\x73\x3a\x0a\x09\x28\x20" \
-"\x41\x43\x54\x49\x4f\x4e\x53\x20\x29\x09\x47\x72\x6f\x75\x70\x20" \
-"\x61\x63\x74\x69\x6f\x6e\x73\x20\x66\x6f\x72\x20\x2d\x6f\x20\x2f" \
-"\x20\x2d\x61\x0a\x09\x21\x20\x41\x43\x54\x09\x09\x49\x6e\x76\x65" \
-"\x72\x74\x20\x41\x43\x54\x27\x73\x20\x73\x75\x63\x63\x65\x73\x73" \
-"\x2f\x66\x61\x69\x6c\x75\x72\x65\x0a\x09\x41\x43\x54\x31\x20\x5b" \
-"\x2d\x61\x5d\x20\x41\x43\x54\x32\x09\x49\x66\x20\x41\x43\x54\x31" \
-"\x20\x66\x61\x69\x6c\x73\x2c\x20\x73\x74\x6f\x70\x2c\x20\x65\x6c" \
-"\x73\x65\x20\x64\x6f\x20\x41\x43\x54\x32\x0a\x09\x41\x43\x54\x31" \
-"\x20\x2d\x6f\x20\x41\x43\x54\x32\x09\x49\x66\x20\x41\x43\x54\x31" \
-"\x20\x73\x75\x63\x63\x65\x65\x64\x73\x2c\x20\x73\x74\x6f\x70\x2c" \
-"\x20\x65\x6c\x73\x65\x20\x64\x6f\x20\x41\x43\x54\x32\x0a\x09\x09" \
-"\x09\x4e\x6f\x74\x65\x3a\x20\x2d\x61\x20\x68\x61\x73\x20\x68\x69" \
-"\x67\x68\x65\x72\x20\x70\x72\x69\x6f\x72\x69\x74\x79\x20\x74\x68" \
-"\x61\x6e\x20\x2d\x6f\x0a\x09\x2d\x6e\x61\x6d\x65\x20\x50\x41\x54" \
-"\x54\x45\x52\x4e\x09\x4d\x61\x74\x63\x68\x20\x66\x69\x6c\x65\x20" \
-"\x6e\x61\x6d\x65\x20\x28\x77\x2f\x6f\x20\x64\x69\x72\x65\x63\x74" \
-"\x6f\x72\x79\x20\x6e\x61\x6d\x65\x29\x20\x74\x6f\x20\x50\x41\x54" \
-"\x54\x45\x52\x4e\x0a\x09\x2d\x69\x6e\x61\x6d\x65\x20\x50\x41\x54" \
-"\x54\x45\x52\x4e\x09\x43\x61\x73\x65\x20\x69\x6e\x73\x65\x6e\x73" \
-"\x69\x74\x69\x76\x65\x20\x2d\x6e\x61\x6d\x65\x0a\x09\x2d\x70\x61" \
-"\x74\x68\x20\x50\x41\x54\x54\x45\x52\x4e\x09\x4d\x61\x74\x63\x68" \
-"\x20\x70\x61\x74\x68\x20\x74\x6f\x20\x50\x41\x54\x54\x45\x52\x4e" \
-"\x0a\x09\x2d\x69\x70\x61\x74\x68\x20\x50\x41\x54\x54\x45\x52\x4e" \
-"\x09\x43\x61\x73\x65\x20\x69\x6e\x73\x65\x6e\x73\x69\x74\x69\x76" \
-"\x65\x20\x2d\x70\x61\x74\x68\x0a\x09\x2d\x72\x65\x67\x65\x78\x20" \
-"\x50\x41\x54\x54\x45\x52\x4e\x09\x4d\x61\x74\x63\x68\x20\x70\x61" \
-"\x74\x68\x20\x74\x6f\x20\x72\x65\x67\x65\x78\x20\x50\x41\x54\x54" \
-"\x45\x52\x4e\x0a\x09\x2d\x74\x79\x70\x65\x20\x58\x09\x09\x46\x69" \
-"\x6c\x65\x20\x74\x79\x70\x65\x20\x69\x73\x20\x58\x20\x28\x6f\x6e" \
-"\x65\x20\x6f\x66\x3a\x20\x66\x2c\x64\x2c\x6c\x2c\x62\x2c\x63\x2c" \
-"\x2e\x2e\x2e\x29\x0a\x09\x2d\x70\x65\x72\x6d\x20\x4d\x41\x53\x4b" \
-"\x09\x41\x74\x20\x6c\x65\x61\x73\x74\x20\x6f\x6e\x65\x20\x6d\x61" \
-"\x73\x6b\x20\x62\x69\x74\x20\x28\x2b\x4d\x41\x53\x4b\x29\x2c\x20" \
-"\x61\x6c\x6c\x20\x62\x69\x74\x73\x20\x28\x2d\x4d\x41\x53\x4b\x29" \
-"\x2c\x0a\x09\x09\x09\x6f\x72\x20\x65\x78\x61\x63\x74\x6c\x79\x20" \
-"\x4d\x41\x53\x4b\x20\x62\x69\x74\x73\x20\x61\x72\x65\x20\x73\x65" \
-"\x74\x20\x69\x6e\x20\x66\x69\x6c\x65\x27\x73\x20\x6d\x6f\x64\x65" \
-"\x0a\x09\x2d\x6d\x74\x69\x6d\x65\x20\x44\x41\x59\x53\x09\x6d\x74" \
-"\x69\x6d\x65\x20\x69\x73\x20\x67\x72\x65\x61\x74\x65\x72\x20\x74" \
-"\x68\x61\x6e\x20\x28\x2b\x4e\x29\x2c\x20\x6c\x65\x73\x73\x20\x74" \
-"\x68\x61\x6e\x20\x28\x2d\x4e\x29\x2c\x0a\x09\x09\x09\x6f\x72\x20" \
-"\x65\x78\x61\x63\x74\x6c\x79\x20\x4e\x20\x64\x61\x79\x73\x20\x69" \
-"\x6e\x20\x74\x68\x65\x20\x70\x61\x73\x74\x0a\x09\x2d\x6d\x6d\x69" \
-"\x6e\x20\x4d\x49\x4e\x53\x09\x6d\x74\x69\x6d\x65\x20\x69\x73\x20" \
-"\x67\x72\x65\x61\x74\x65\x72\x20\x74\x68\x61\x6e\x20\x28\x2b\x4e" \
-"\x29\x2c\x20\x6c\x65\x73\x73\x20\x74\x68\x61\x6e\x20\x28\x2d\x4e" \
-"\x29\x2c\x0a\x09\x09\x09\x6f\x72\x20\x65\x78\x61\x63\x74\x6c\x79" \
-"\x20\x4e\x20\x6d\x69\x6e\x75\x74\x65\x73\x20\x69\x6e\x20\x74\x68" \
-"\x65\x20\x70\x61\x73\x74\x0a\x09\x2d\x6e\x65\x77\x65\x72\x20\x46" \
-"\x49\x4c\x45\x09\x6d\x74\x69\x6d\x65\x20\x69\x73\x20\x6d\x6f\x72" \
-"\x65\x20\x72\x65\x63\x65\x6e\x74\x20\x74\x68\x61\x6e\x20\x46\x49" \
-"\x4c\x45\x27\x73\x0a\x09\x2d\x75\x73\x65\x72\x20\x4e\x41\x4d\x45" \
-"\x2f\x49\x44\x09\x46\x69\x6c\x65\x20\x69\x73\x20\x6f\x77\x6e\x65" \
-"\x64\x20\x62\x79\x20\x67\x69\x76\x65\x6e\x20\x75\x73\x65\x72\x0a" \
-"\x09\x2d\x67\x72\x6f\x75\x70\x20\x4e\x41\x4d\x45\x2f\x49\x44\x09" \
-"\x46\x69\x6c\x65\x20\x69\x73\x20\x6f\x77\x6e\x65\x64\x20\x62\x79" \
-"\x20\x67\x69\x76\x65\x6e\x20\x67\x72\x6f\x75\x70\x0a\x09\x2d\x73" \
-"\x69\x7a\x65\x20\x4e\x5b\x62\x63\x6b\x5d\x09\x46\x69\x6c\x65\x20" \
-"\x73\x69\x7a\x65\x20\x69\x73\x20\x4e\x20\x28\x63\x3a\x62\x79\x74" \
-"\x65\x73\x2c\x6b\x3a\x6b\x62\x79\x74\x65\x73\x2c\x62\x3a\x35\x31" \
-"\x32\x20\x62\x79\x74\x65\x73\x28\x64\x65\x66\x2e\x29\x29\x0a\x09" \
-"\x09\x09\x2b\x2f\x2d\x4e\x3a\x20\x66\x69\x6c\x65\x20\x73\x69\x7a" \
-"\x65\x20\x69\x73\x20\x62\x69\x67\x67\x65\x72\x2f\x73\x6d\x61\x6c" \
-"\x6c\x65\x72\x20\x74\x68\x61\x6e\x20\x4e\x0a\x09\x2d\x6c\x69\x6e" \
-"\x6b\x73\x20\x4e\x09\x4e\x75\x6d\x62\x65\x72\x20\x6f\x66\x20\x6c" \
-"\x69\x6e\x6b\x73\x20\x69\x73\x20\x67\x72\x65\x61\x74\x65\x72\x20" \
-"\x74\x68\x61\x6e\x20\x28\x2b\x4e\x29\x2c\x20\x6c\x65\x73\x73\x20" \
-"\x74\x68\x61\x6e\x20\x28\x2d\x4e\x29\x2c\x0a\x09\x09\x09\x6f\x72" \
-"\x20\x65\x78\x61\x63\x74\x6c\x79\x20\x4e\x0a\x09\x2d\x70\x72\x75" \
-"\x6e\x65\x09\x09\x49\x66\x20\x63\x75\x72\x72\x65\x6e\x74\x20\x66" \
-"\x69\x6c\x65\x20\x69\x73\x20\x64\x69\x72\x65\x63\x74\x6f\x72\x79" \
-"\x2c\x20\x64\x6f\x6e\x27\x74\x20\x64\x65\x73\x63\x65\x6e\x64\x20" \
-"\x69\x6e\x74\x6f\x20\x69\x74\x0a\x49\x66\x20\x6e\x6f\x6e\x65\x20" \
-"\x6f\x66\x20\x74\x68\x65\x20\x66\x6f\x6c\x6c\x6f\x77\x69\x6e\x67" \
-"\x20\x61\x63\x74\x69\x6f\x6e\x73\x20\x69\x73\x20\x73\x70\x65\x63" \
-"\x69\x66\x69\x65\x64\x2c\x20\x2d\x70\x72\x69\x6e\x74\x20\x69\x73" \
-"\x20\x61\x73\x73\x75\x6d\x65\x64\x0a\x09\x2d\x70\x72\x69\x6e\x74" \
-"\x09\x09\x50\x72\x69\x6e\x74\x20\x66\x69\x6c\x65\x20\x6e\x61\x6d" \
-"\x65\x0a\x09\x2d\x70\x72\x69\x6e\x74\x30\x09\x09\x50\x72\x69\x6e" \
-"\x74\x20\x66\x69\x6c\x65\x20\x6e\x61\x6d\x65\x2c\x20\x4e\x55\x4c" \
-"\x20\x74\x65\x72\x6d\x69\x6e\x61\x74\x65\x64\x0a\x09\x2d\x65\x78" \
-"\x65\x63\x20\x43\x4d\x44\x20\x41\x52\x47\x20\x3b\x09\x52\x75\x6e" \
-"\x20\x43\x4d\x44\x20\x77\x69\x74\x68\x20\x61\x6c\x6c\x20\x69\x6e" \
-"\x73\x74\x61\x6e\x63\x65\x73\x20\x6f\x66\x20\x7b\x7d\x20\x72\x65" \
-"\x70\x6c\x61\x63\x65\x64\x20\x62\x79\x0a\x09\x09\x09\x66\x69\x6c" \
-"\x65\x20\x6e\x61\x6d\x65\x2e\x20\x46\x61\x69\x6c\x73\x20\x69\x66" \
-"\x20\x43\x4d\x44\x20\x65\x78\x69\x74\x73\x20\x77\x69\x74\x68\x20" \
-"\x6e\x6f\x6e\x7a\x65\x72\x6f\x00\x4d\x54\x44\x5f\x44\x45\x56\x49" \
-"\x43\x45\x20\x4f\x46\x46\x53\x45\x54\x20\x53\x45\x43\x54\x4f\x52" \
-"\x53\x0a\x0a\x4c\x6f\x63\x6b\x20\x70\x61\x72\x74\x20\x6f\x72\x20" \
-"\x61\x6c\x6c\x20\x6f\x66\x20\x61\x6e\x20\x4d\x54\x44\x20\x64\x65" \
-"\x76\x69\x63\x65\x2e\x20\x49\x66\x20\x53\x45\x43\x54\x4f\x52\x53" \
-"\x20\x69\x73\x20\x2d\x31\x2c\x20\x74\x68\x65\x6e\x20\x61\x6c\x6c" \
-"\x20\x73\x65\x63\x74\x6f\x72\x73\x0a\x77\x69\x6c\x6c\x20\x62\x65" \
-"\x20\x6c\x6f\x63\x6b\x65\x64\x2c\x20\x72\x65\x67\x61\x72\x64\x6c" \
-"\x65\x73\x73\x20\x6f\x66\x20\x74\x68\x65\x20\x76\x61\x6c\x75\x65" \
-"\x20\x6f\x66\x20\x4f\x46\x46\x53\x45\x54\x00\x4d\x54\x44\x5f\x44" \
-"\x45\x56\x49\x43\x45\x0a\x0a\x55\x6e\x6c\x6f\x63\x6b\x20\x61\x6e" \
-"\x20\x4d\x54\x44\x20\x64\x65\x76\x69\x63\x65\x00\x2d\x76\x20\x46" \
-"\x49\x4c\x45\x20\x4d\x54\x44\x5f\x44\x45\x56\x49\x43\x45\x0a\x0a" \
-"\x43\x6f\x70\x79\x20\x61\x6e\x20\x69\x6d\x61\x67\x65\x20\x74\x6f" \
-"\x20\x4d\x54\x44\x20\x64\x65\x76\x69\x63\x65\x0a\x0a\x09\x2d\x76" \
-"\x09\x56\x65\x72\x62\x6f\x73\x65\x00\x5b\x2d\x73\x78\x75\x6e\x5d" \
-"\x20\x46\x44\x7c\x7b\x46\x49\x4c\x45\x20\x5b\x2d\x63\x5d\x20\x50" \
-"\x52\x4f\x47\x20\x41\x52\x47\x53\x7d\x0a\x0a\x5b\x55\x6e\x5d\x6c" \
-"\x6f\x63\x6b\x20\x66\x69\x6c\x65\x20\x64\x65\x73\x63\x72\x69\x70" \
-"\x74\x6f\x72\x2c\x20\x6f\x72\x20\x6c\x6f\x63\x6b\x20\x46\x49\x4c" \
-"\x45\x2c\x20\x72\x75\x6e\x20\x50\x52\x4f\x47\x0a\x0a\x09\x2d\x73" \
-"\x09\x53\x68\x61\x72\x65\x64\x20\x6c\x6f\x63\x6b\x0a\x09\x2d\x78" \
-"\x09\x45\x78\x63\x6c\x75\x73\x69\x76\x65\x20\x6c\x6f\x63\x6b\x20" \
-"\x28\x64\x65\x66\x61\x75\x6c\x74\x29\x0a\x09\x2d\x75\x09\x55\x6e" \
-"\x6c\x6f\x63\x6b\x20\x46\x44\x0a\x09\x2d\x6e\x09\x46\x61\x69\x6c" \
-"\x20\x72\x61\x74\x68\x65\x72\x20\x74\x68\x61\x6e\x20\x77\x61\x69" \
-"\x74\x00\x5b\x2d\x62\x73\x5d\x20\x5b\x2d\x77\x20\x57\x49\x44\x54" \
-"\x48\x5d\x20\x5b\x46\x49\x4c\x45\x5d\x2e\x2e\x2e\x0a\x0a\x57\x72" \
-"\x61\x70\x20\x69\x6e\x70\x75\x74\x20\x6c\x69\x6e\x65\x73\x20\x69" \
-"\x6e\x20\x65\x61\x63\x68\x20\x46\x49\x4c\x45\x20\x28\x6f\x72\x20" \
-"\x73\x74\x64\x69\x6e\x29\x2c\x20\x77\x72\x69\x74\x69\x6e\x67\x20" \
-"\x74\x6f\x20\x73\x74\x64\x6f\x75\x74\x0a\x0a\x09\x2d\x62\x09\x43" \
-"\x6f\x75\x6e\x74\x20\x62\x79\x74\x65\x73\x20\x72\x61\x74\x68\x65" \
-"\x72\x20\x74\x68\x61\x6e\x20\x63\x6f\x6c\x75\x6d\x6e\x73\x0a\x09" \
-"\x2d\x73\x09\x42\x72\x65\x61\x6b\x20\x61\x74\x20\x73\x70\x61\x63" \
-"\x65\x73\x0a\x09\x2d\x77\x09\x55\x73\x65\x20\x57\x49\x44\x54\x48" \
-"\x20\x63\x6f\x6c\x75\x6d\x6e\x73\x20\x69\x6e\x73\x74\x65\x61\x64" \
-"\x20\x6f\x66\x20\x38\x30\x00\x5b\x2d\x62\x2f\x6b\x2f\x6d\x2f\x67" \
-"\x5d\x0a\x0a\x44\x69\x73\x70\x6c\x61\x79\x20\x74\x68\x65\x20\x61" \
-"\x6d\x6f\x75\x6e\x74\x20\x6f\x66\x20\x66\x72\x65\x65\x20\x61\x6e" \
-"\x64\x20\x75\x73\x65\x64\x20\x73\x79\x73\x74\x65\x6d\x20\x6d\x65" \
-"\x6d\x6f\x72\x79\x00\x44\x45\x56\x49\x43\x45\x0a\x0a\x46\x72\x65" \
-"\x65\x20\x61\x6c\x6c\x20\x6d\x65\x6d\x6f\x72\x79\x20\x75\x73\x65" \
-"\x64\x20\x62\x79\x20\x74\x68\x65\x20\x73\x70\x65\x63\x69\x66\x69" \
-"\x65\x64\x20\x72\x61\x6d\x64\x69\x73\x6b\x00\x5b\x4f\x70\x74\x69" \
-"\x6f\x6e\x73\x5d\x20\x3c\x6d\x6f\x75\x6e\x74\x70\x6f\x69\x6e\x74" \
-"\x3e\x0a\x0a\x4f\x70\x74\x69\x6f\x6e\x73\x3a\x0a\x09\x2d\x6f\x2c" \
-"\x2d\x2d\x6f\x66\x66\x73\x65\x74\x3d\x6f\x66\x66\x73\x65\x74\x09" \
-"\x6f\x66\x66\x73\x65\x74\x20\x69\x6e\x20\x62\x79\x74\x65\x73\x20" \
-"\x74\x6f\x20\x64\x69\x73\x63\x61\x72\x64\x20\x66\x72\x6f\x6d\x0a" \
-"\x09\x2d\x6c\x2c\x2d\x2d\x6c\x65\x6e\x67\x74\x68\x3d\x6c\x65\x6e" \
-"\x67\x74\x68\x09\x6c\x65\x6e\x67\x74\x68\x20\x6f\x66\x20\x62\x79" \
-"\x74\x65\x73\x20\x74\x6f\x20\x64\x69\x73\x63\x61\x72\x64\x20\x66" \
-"\x72\x6f\x6d\x20\x74\x68\x65\x20\x6f\x66\x66\x73\x65\x74\x0a\x09" \
-"\x2d\x6d\x2c\x2d\x2d\x6d\x69\x6e\x69\x6d\x75\x6d\x3d\x6d\x69\x6e" \
-"\x69\x6d\x75\x6d\x09\x6d\x69\x6e\x69\x6d\x75\x6d\x20\x65\x78\x74" \
-"\x65\x6e\x74\x20\x6c\x65\x6e\x67\x74\x68\x20\x74\x6f\x20\x64\x69" \
-"\x73\x63\x61\x72\x64\x0a\x09\x2d\x76\x2c\x2d\x2d\x76\x65\x72\x62" \
-"\x6f\x73\x65\x09\x09\x70\x72\x69\x6e\x74\x20\x6e\x75\x6d\x62\x65" \
-"\x72\x20\x6f\x66\x20\x64\x69\x73\x63\x61\x72\x64\x65\x64\x20\x62" \
-"\x79\x74\x65\x73\x00\x5b\x2d\x64\x5d\x20\x46\x49\x4c\x45\x2e\x2e" \
-"\x2e\x0a\x0a\x57\x72\x69\x74\x65\x20\x66\x69\x6c\x65\x73\x27\x20" \
-"\x62\x75\x66\x66\x65\x72\x65\x64\x20\x62\x6c\x6f\x63\x6b\x73\x20" \
-"\x74\x6f\x20\x64\x69\x73\x6b\x0a\x0a\x09\x2d\x64\x09\x41\x76\x6f" \
-"\x69\x64\x20\x73\x79\x6e\x63\x69\x6e\x67\x20\x6d\x65\x74\x61\x64" \
-"\x61\x74\x61\x00\x5b\x4f\x50\x54\x49\x4f\x4e\x53\x5d\x20\x48\x4f" \
-"\x53\x54\x20\x5b\x4c\x4f\x43\x41\x4c\x5f\x46\x49\x4c\x45\x5d\x20" \
-"\x52\x45\x4d\x4f\x54\x45\x5f\x46\x49\x4c\x45\x0a\x0a\x44\x6f\x77" \
-"\x6e\x6c\x6f\x61\x64\x20\x61\x20\x66\x69\x6c\x65\x20\x76\x69\x61" \
-"\x20\x46\x54\x50\x0a\x0a\x09\x2d\x63\x2c\x2d\x2d\x63\x6f\x6e\x74" \
-"\x69\x6e\x75\x65\x09\x09\x43\x6f\x6e\x74\x69\x6e\x75\x65\x20\x70" \
-"\x72\x65\x76\x69\x6f\x75\x73\x20\x74\x72\x61\x6e\x73\x66\x65\x72" \
-"\x0a\x09\x2d\x76\x2c\x2d\x2d\x76\x65\x72\x62\x6f\x73\x65\x09\x09" \
-"\x56\x65\x72\x62\x6f\x73\x65\x0a\x09\x2d\x75\x2c\x2d\x2d\x75\x73" \
-"\x65\x72\x6e\x61\x6d\x65\x20\x55\x53\x45\x52\x09\x55\x73\x65\x72" \
-"\x6e\x61\x6d\x65\x0a\x09\x2d\x70\x2c\x2d\x2d\x70\x61\x73\x73\x77" \
-"\x6f\x72\x64\x20\x50\x41\x53\x53\x09\x50\x61\x73\x73\x77\x6f\x72" \
-"\x64\x0a\x09\x2d\x50\x2c\x2d\x2d\x70\x6f\x72\x74\x20\x4e\x55\x4d" \
-"\x09\x09\x50\x6f\x72\x74\x00\x5b\x4f\x50\x54\x49\x4f\x4e\x53\x5d" \
-"\x20\x48\x4f\x53\x54\x20\x5b\x52\x45\x4d\x4f\x54\x45\x5f\x46\x49" \
-"\x4c\x45\x5d\x20\x4c\x4f\x43\x41\x4c\x5f\x46\x49\x4c\x45\x0a\x0a" \
-"\x55\x70\x6c\x6f\x61\x64\x20\x61\x20\x66\x69\x6c\x65\x20\x74\x6f" \
-"\x20\x61\x20\x46\x54\x50\x20\x73\x65\x72\x76\x65\x72\x0a\x0a\x09" \
-"\x2d\x76\x2c\x2d\x2d\x76\x65\x72\x62\x6f\x73\x65\x09\x09\x56\x65" \
-"\x72\x62\x6f\x73\x65\x0a\x09\x2d\x75\x2c\x2d\x2d\x75\x73\x65\x72" \
-"\x6e\x61\x6d\x65\x20\x55\x53\x45\x52\x09\x55\x73\x65\x72\x6e\x61" \
-"\x6d\x65\x0a\x09\x2d\x70\x2c\x2d\x2d\x70\x61\x73\x73\x77\x6f\x72" \
-"\x64\x20\x50\x41\x53\x53\x09\x50\x61\x73\x73\x77\x6f\x72\x64\x0a" \
-"\x09\x2d\x50\x2c\x2d\x2d\x70\x6f\x72\x74\x20\x4e\x55\x4d\x09\x09" \
-"\x50\x6f\x72\x74\x00\x5b\x4f\x50\x54\x49\x4f\x4e\x53\x5d\x20\x46" \
-"\x49\x4c\x45\x20\x6f\x72\x20\x50\x4f\x52\x54\x2f\x50\x52\x4f\x54" \
-"\x4f\x0a\x0a\x46\x69\x6e\x64\x20\x70\x72\x6f\x63\x65\x73\x73\x65" \
-"\x73\x20\x77\x68\x69\x63\x68\x20\x75\x73\x65\x20\x46\x49\x4c\x45" \
-"\x73\x20\x6f\x72\x20\x50\x4f\x52\x54\x73\x0a\x0a\x09\x2d\x6d\x09" \
-"\x46\x69\x6e\x64\x20\x70\x72\x6f\x63\x65\x73\x73\x65\x73\x20\x77" \
-"\x68\x69\x63\x68\x20\x75\x73\x65\x20\x73\x61\x6d\x65\x20\x66\x73" \
-"\x20\x61\x73\x20\x46\x49\x4c\x45\x73\x0a\x09\x2d\x34\x2c\x2d\x36" \
-"\x09\x53\x65\x61\x72\x63\x68\x20\x6f\x6e\x6c\x79\x20\x49\x50\x76" \
-"\x34\x2f\x49\x50\x76\x36\x20\x73\x70\x61\x63\x65\x0a\x09\x2d\x73" \
-"\x09\x44\x6f\x6e\x27\x74\x20\x64\x69\x73\x70\x6c\x61\x79\x20\x50" \
-"\x49\x44\x73\x0a\x09\x2d\x6b\x09\x4b\x69\x6c\x6c\x20\x66\x6f\x75" \
-"\x6e\x64\x20\x70\x72\x6f\x63\x65\x73\x73\x65\x73\x0a\x09\x2d\x53" \
-"\x49\x47\x4e\x41\x4c\x09\x53\x69\x67\x6e\x61\x6c\x20\x74\x6f\x20" \
-"\x73\x65\x6e\x64\x20\x28\x64\x65\x66\x61\x75\x6c\x74\x3a\x20\x4b" \
-"\x49\x4c\x4c\x29\x00\x5b\x4f\x50\x54\x49\x4f\x4e\x53\x5d\x20\x5b" \
-"\x2d\x2d\x5d\x20\x4f\x50\x54\x53\x54\x52\x49\x4e\x47\x20\x50\x41" \
-"\x52\x41\x4d\x53\x0a\x0a\x09\x2d\x61\x2c\x2d\x2d\x61\x6c\x74\x65" \
-"\x72\x6e\x61\x74\x69\x76\x65\x09\x09\x41\x6c\x6c\x6f\x77\x20\x6c" \
-"\x6f\x6e\x67\x20\x6f\x70\x74\x69\x6f\x6e\x73\x20\x73\x74\x61\x72" \
-"\x74\x69\x6e\x67\x20\x77\x69\x74\x68\x20\x73\x69\x6e\x67\x6c\x65" \
-"\x20\x2d\x0a\x09\x2d\x6c\x2c\x2d\x2d\x6c\x6f\x6e\x67\x6f\x70\x74" \
-"\x69\x6f\x6e\x73\x3d\x4c\x4f\x50\x54\x5b\x2c\x2e\x2e\x2e\x5d\x09" \
-"\x4c\x6f\x6e\x67\x20\x6f\x70\x74\x69\x6f\x6e\x73\x20\x74\x6f\x20" \
-"\x62\x65\x20\x72\x65\x63\x6f\x67\x6e\x69\x7a\x65\x64\x0a\x09\x2d" \
-"\x6e\x2c\x2d\x2d\x6e\x61\x6d\x65\x3d\x50\x52\x4f\x47\x4e\x41\x4d" \
-"\x45\x09\x09\x54\x68\x65\x20\x6e\x61\x6d\x65\x20\x75\x6e\x64\x65" \
-"\x72\x20\x77\x68\x69\x63\x68\x20\x65\x72\x72\x6f\x72\x73\x20\x61" \
-"\x72\x65\x20\x72\x65\x70\x6f\x72\x74\x65\x64\x0a\x09\x2d\x6f\x2c" \
-"\x2d\x2d\x6f\x70\x74\x69\x6f\x6e\x73\x3d\x4f\x50\x54\x53\x54\x52" \
-"\x49\x4e\x47\x09\x09\x53\x68\x6f\x72\x74\x20\x6f\x70\x74\x69\x6f" \
-"\x6e\x73\x20\x74\x6f\x20\x62\x65\x20\x72\x65\x63\x6f\x67\x6e\x69" \
-"\x7a\x65\x64\x0a\x09\x2d\x71\x2c\x2d\x2d\x71\x75\x69\x65\x74\x09" \
-"\x09\x09\x44\x69\x73\x61\x62\x6c\x65\x20\x65\x72\x72\x6f\x72\x20" \
-"\x72\x65\x70\x6f\x72\x74\x69\x6e\x67\x20\x62\x79\x20\x67\x65\x74" \
-"\x6f\x70\x74\x28\x33\x29\x0a\x09\x2d\x51\x2c\x2d\x2d\x71\x75\x69" \
-"\x65\x74\x2d\x6f\x75\x74\x70\x75\x74\x09\x09\x4e\x6f\x20\x6e\x6f" \
-"\x72\x6d\x61\x6c\x20\x6f\x75\x74\x70\x75\x74\x0a\x09\x2d\x73\x2c" \
-"\x2d\x2d\x73\x68\x65\x6c\x6c\x3d\x53\x48\x45\x4c\x4c\x09\x09\x53" \
-"\x65\x74\x20\x73\x68\x65\x6c\x6c\x20\x71\x75\x6f\x74\x69\x6e\x67" \
-"\x20\x63\x6f\x6e\x76\x65\x6e\x74\x69\x6f\x6e\x73\x0a\x09\x2d\x54" \
-"\x2c\x2d\x2d\x74\x65\x73\x74\x09\x09\x09\x54\x65\x73\x74\x20\x66" \
-"\x6f\x72\x20\x67\x65\x74\x6f\x70\x74\x28\x31\x29\x20\x76\x65\x72" \
-"\x73\x69\x6f\x6e\x0a\x09\x2d\x75\x2c\x2d\x2d\x75\x6e\x71\x75\x6f" \
-"\x74\x65\x64\x09\x09\x09\x44\x6f\x6e\x27\x74\x20\x71\x75\x6f\x74" \
-"\x65\x20\x74\x68\x65\x20\x6f\x75\x74\x70\x75\x74\x0a\x0a\x45\x78" \
-"\x61\x6d\x70\x6c\x65\x3a\x0a\x0a\x4f\x3d\x60\x67\x65\x74\x6f\x70" \
-"\x74\x20\x2d\x6c\x20\x62\x62\x3a\x20\x2d\x2d\x20\x61\x62\x3a\x63" \
-"\x3a\x3a\x20\x22\x24\x40\x22\x60\x20\x7c\x7c\x20\x65\x78\x69\x74" \
-"\x20\x31\x0a\x65\x76\x61\x6c\x20\x73\x65\x74\x20\x2d\x2d\x20\x22" \
-"\x24\x4f\x22\x0a\x77\x68\x69\x6c\x65\x20\x74\x72\x75\x65\x3b\x20" \
-"\x64\x6f\x0a\x09\x63\x61\x73\x65\x20\x22\x24\x31\x22\x20\x69\x6e" \
-"\x0a\x09\x2d\x61\x29\x09\x65\x63\x68\x6f\x20\x41\x3b\x20\x73\x68" \
-"\x69\x66\x74\x3b\x3b\x0a\x09\x2d\x62\x7c\x2d\x2d\x62\x62\x29\x20" \
-"\x65\x63\x68\x6f\x20\x22\x42\x3a\x27\x24\x32\x27\x22\x3b\x20\x73" \
-"\x68\x69\x66\x74\x20\x32\x3b\x3b\x0a\x09\x2d\x63\x29\x09\x63\x61" \
-"\x73\x65\x20\x22\x24\x32\x22\x20\x69\x6e\x0a\x09\x09\x22\x22\x29" \
-"\x09\x65\x63\x68\x6f\x20\x43\x3b\x20\x73\x68\x69\x66\x74\x20\x32" \
-"\x3b\x3b\x0a\x09\x09\x2a\x29\x09\x65\x63\x68\x6f\x20\x22\x43\x3a" \
-"\x27\x24\x32\x27\x22\x3b\x20\x73\x68\x69\x66\x74\x20\x32\x3b\x3b" \
-"\x0a\x09\x09\x65\x73\x61\x63\x3b\x3b\x0a\x09\x2d\x2d\x29\x09\x73" \
-"\x68\x69\x66\x74\x3b\x20\x62\x72\x65\x61\x6b\x3b\x3b\x0a\x09\x2a" \
-"\x29\x09\x65\x63\x68\x6f\x20\x45\x72\x72\x6f\x72\x3b\x20\x65\x78" \
-"\x69\x74\x20\x31\x3b\x3b\x0a\x09\x65\x73\x61\x63\x0a\x64\x6f\x6e" \
-"\x65\x00\x5b\x2d\x48\x68\x6e\x6c\x4c\x6f\x71\x76\x73\x72\x69\x77" \
-"\x46\x45\x5d\x20\x5b\x2d\x6d\x20\x4e\x5d\x20\x5b\x2d\x41\x2f\x42" \
-"\x2f\x43\x20\x4e\x5d\x20\x50\x41\x54\x54\x45\x52\x4e\x2f\x2d\x65" \
-"\x20\x50\x41\x54\x54\x45\x52\x4e\x2e\x2e\x2e\x2f\x2d\x66\x20\x46" \
-"\x49\x4c\x45\x20\x5b\x46\x49\x4c\x45\x5d\x2e\x2e\x2e\x0a\x0a\x53" \
-"\x65\x61\x72\x63\x68\x20\x66\x6f\x72\x20\x50\x41\x54\x54\x45\x52" \
-"\x4e\x20\x69\x6e\x20\x46\x49\x4c\x45\x73\x20\x28\x6f\x72\x20\x73" \
-"\x74\x64\x69\x6e\x29\x0a\x0a\x09\x2d\x48\x09\x41\x64\x64\x20\x27" \
-"\x66\x69\x6c\x65\x6e\x61\x6d\x65\x3a\x27\x20\x70\x72\x65\x66\x69" \
-"\x78\x0a\x09\x2d\x68\x09\x44\x6f\x20\x6e\x6f\x74\x20\x61\x64\x64" \
-"\x20\x27\x66\x69\x6c\x65\x6e\x61\x6d\x65\x3a\x27\x20\x70\x72\x65" \
-"\x66\x69\x78\x0a\x09\x2d\x6e\x09\x41\x64\x64\x20\x27\x6c\x69\x6e" \
-"\x65\x5f\x6e\x6f\x3a\x27\x20\x70\x72\x65\x66\x69\x78\x0a\x09\x2d" \
-"\x6c\x09\x53\x68\x6f\x77\x20\x6f\x6e\x6c\x79\x20\x6e\x61\x6d\x65" \
-"\x73\x20\x6f\x66\x20\x66\x69\x6c\x65\x73\x20\x74\x68\x61\x74\x20" \
-"\x6d\x61\x74\x63\x68\x0a\x09\x2d\x4c\x09\x53\x68\x6f\x77\x20\x6f" \
-"\x6e\x6c\x79\x20\x6e\x61\x6d\x65\x73\x20\x6f\x66\x20\x66\x69\x6c" \
-"\x65\x73\x20\x74\x68\x61\x74\x20\x64\x6f\x6e\x27\x74\x20\x6d\x61" \
-"\x74\x63\x68\x0a\x09\x2d\x63\x09\x53\x68\x6f\x77\x20\x6f\x6e\x6c" \
-"\x79\x20\x63\x6f\x75\x6e\x74\x20\x6f\x66\x20\x6d\x61\x74\x63\x68" \
-"\x69\x6e\x67\x20\x6c\x69\x6e\x65\x73\x0a\x09\x2d\x6f\x09\x53\x68" \
-"\x6f\x77\x20\x6f\x6e\x6c\x79\x20\x74\x68\x65\x20\x6d\x61\x74\x63" \
-"\x68\x69\x6e\x67\x20\x70\x61\x72\x74\x20\x6f\x66\x20\x6c\x69\x6e" \
-"\x65\x0a\x09\x2d\x71\x09\x51\x75\x69\x65\x74\x2e\x20\x52\x65\x74" \
-"\x75\x72\x6e\x20\x30\x20\x69\x66\x20\x50\x41\x54\x54\x45\x52\x4e" \
-"\x20\x69\x73\x20\x66\x6f\x75\x6e\x64\x2c\x20\x31\x20\x6f\x74\x68" \
-"\x65\x72\x77\x69\x73\x65\x0a\x09\x2d\x76\x09\x53\x65\x6c\x65\x63" \
-"\x74\x20\x6e\x6f\x6e\x2d\x6d\x61\x74\x63\x68\x69\x6e\x67\x20\x6c" \
-"\x69\x6e\x65\x73\x0a\x09\x2d\x73\x09\x53\x75\x70\x70\x72\x65\x73" \
-"\x73\x20\x6f\x70\x65\x6e\x20\x61\x6e\x64\x20\x72\x65\x61\x64\x20" \
-"\x65\x72\x72\x6f\x72\x73\x0a\x09\x2d\x72\x09\x52\x65\x63\x75\x72" \
-"\x73\x65\x0a\x09\x2d\x69\x09\x49\x67\x6e\x6f\x72\x65\x20\x63\x61" \
-"\x73\x65\x0a\x09\x2d\x77\x09\x4d\x61\x74\x63\x68\x20\x77\x68\x6f" \
-"\x6c\x65\x20\x77\x6f\x72\x64\x73\x20\x6f\x6e\x6c\x79\x0a\x09\x2d" \
-"\x78\x09\x4d\x61\x74\x63\x68\x20\x77\x68\x6f\x6c\x65\x20\x6c\x69" \
-"\x6e\x65\x73\x20\x6f\x6e\x6c\x79\x0a\x09\x2d\x46\x09\x50\x41\x54" \
-"\x54\x45\x52\x4e\x20\x69\x73\x20\x61\x20\x6c\x69\x74\x65\x72\x61" \
-"\x6c\x20\x28\x6e\x6f\x74\x20\x72\x65\x67\x65\x78\x70\x29\x0a\x09" \
-"\x2d\x45\x09\x50\x41\x54\x54\x45\x52\x4e\x20\x69\x73\x20\x61\x6e" \
-"\x20\x65\x78\x74\x65\x6e\x64\x65\x64\x20\x72\x65\x67\x65\x78\x70" \
-"\x0a\x09\x2d\x6d\x20\x4e\x09\x4d\x61\x74\x63\x68\x20\x75\x70\x20" \
-"\x74\x6f\x20\x4e\x20\x74\x69\x6d\x65\x73\x20\x70\x65\x72\x20\x66" \
-"\x69\x6c\x65\x0a\x09\x2d\x41\x20\x4e\x09\x50\x72\x69\x6e\x74\x20" \
-"\x4e\x20\x6c\x69\x6e\x65\x73\x20\x6f\x66\x20\x74\x72\x61\x69\x6c" \
-"\x69\x6e\x67\x20\x63\x6f\x6e\x74\x65\x78\x74\x0a\x09\x2d\x42\x20" \
-"\x4e\x09\x50\x72\x69\x6e\x74\x20\x4e\x20\x6c\x69\x6e\x65\x73\x20" \
-"\x6f\x66\x20\x6c\x65\x61\x64\x69\x6e\x67\x20\x63\x6f\x6e\x74\x65" \
-"\x78\x74\x0a\x09\x2d\x43\x20\x4e\x09\x53\x61\x6d\x65\x20\x61\x73" \
-"\x20\x27\x2d\x41\x20\x4e\x20\x2d\x42\x20\x4e\x27\x0a\x09\x2d\x65" \
-"\x20\x50\x54\x52\x4e\x09\x50\x61\x74\x74\x65\x72\x6e\x20\x74\x6f" \
-"\x20\x6d\x61\x74\x63\x68\x0a\x09\x2d\x66\x20\x46\x49\x4c\x45\x09" \
-"\x52\x65\x61\x64\x20\x70\x61\x74\x74\x65\x72\x6e\x20\x66\x72\x6f" \
-"\x6d\x20\x66\x69\x6c\x65\x00\x5b\x55\x53\x45\x52\x5d\x0a\x0a\x50" \
-"\x72\x69\x6e\x74\x20\x74\x68\x65\x20\x67\x72\x6f\x75\x70\x20\x6d" \
-"\x65\x6d\x62\x65\x72\x73\x68\x69\x70\x73\x20\x6f\x66\x20\x55\x53" \
-"\x45\x52\x20\x6f\x72\x20\x66\x6f\x72\x20\x74\x68\x65\x20\x63\x75" \
-"\x72\x72\x65\x6e\x74\x20\x70\x72\x6f\x63\x65\x73\x73\x00\x5b\x2d" \
-"\x63\x66\x74\x5d\x20\x5b\x46\x49\x4c\x45\x5d\x2e\x2e\x2e\x0a\x0a" \
-"\x44\x65\x63\x6f\x6d\x70\x72\x65\x73\x73\x20\x46\x49\x4c\x45\x73" \
-"\x20\x28\x6f\x72\x20\x73\x74\x64\x69\x6e\x29\x0a\x0a\x09\x2d\x63" \
-"\x09\x57\x72\x69\x74\x65\x20\x74\x6f\x20\x73\x74\x64\x6f\x75\x74" \
-"\x0a\x09\x2d\x66\x09\x46\x6f\x72\x63\x65\x0a\x09\x2d\x74\x09\x54" \
-"\x65\x73\x74\x20\x66\x69\x6c\x65\x20\x69\x6e\x74\x65\x67\x72\x69" \
-"\x74\x79\x00\x5b\x2d\x63\x66\x64\x5d\x20\x5b\x46\x49\x4c\x45\x5d" \
-"\x2e\x2e\x2e\x0a\x0a\x43\x6f\x6d\x70\x72\x65\x73\x73\x20\x46\x49" \
-"\x4c\x45\x73\x20\x28\x6f\x72\x20\x73\x74\x64\x69\x6e\x29\x0a\x0a" \
-"\x09\x2d\x64\x09\x44\x65\x63\x6f\x6d\x70\x72\x65\x73\x73\x0a\x09" \
-"\x2d\x63\x09\x57\x72\x69\x74\x65\x20\x74\x6f\x20\x73\x74\x64\x6f" \
-"\x75\x74\x0a\x09\x2d\x66\x09\x46\x6f\x72\x63\x65\x00\x5b\x2d\x64" \
-"\x20\x44\x45\x4c\x41\x59\x5d\x20\x5b\x2d\x6e\x5d\x20\x5b\x2d\x66" \
-"\x5d\x0a\x0a\x48\x61\x6c\x74\x20\x74\x68\x65\x20\x73\x79\x73\x74" \
-"\x65\x6d\x0a\x0a\x09\x2d\x64\x20\x53\x45\x43\x09\x44\x65\x6c\x61" \
-"\x79\x20\x69\x6e\x74\x65\x72\x76\x61\x6c\x0a\x09\x2d\x6e\x09\x44" \
-"\x6f\x20\x6e\x6f\x74\x20\x73\x79\x6e\x63\x0a\x09\x2d\x66\x09\x46" \
-"\x6f\x72\x63\x65\x20\x28\x64\x6f\x6e\x27\x74\x20\x67\x6f\x20\x74" \
-"\x68\x72\x6f\x75\x67\x68\x20\x69\x6e\x69\x74\x29\x00\x5b\x4f\x50" \
-"\x54\x49\x4f\x4e\x53\x5d\x20\x5b\x46\x49\x4c\x45\x5d\x2e\x2e\x2e" \
-"\x0a\x0a\x50\x72\x69\x6e\x74\x20\x66\x69\x72\x73\x74\x20\x31\x30" \
-"\x20\x6c\x69\x6e\x65\x73\x20\x6f\x66\x20\x65\x61\x63\x68\x20\x46" \
-"\x49\x4c\x45\x20\x28\x6f\x72\x20\x73\x74\x64\x69\x6e\x29\x20\x74" \
-"\x6f\x20\x73\x74\x64\x6f\x75\x74\x2e\x0a\x57\x69\x74\x68\x20\x6d" \
-"\x6f\x72\x65\x20\x74\x68\x61\x6e\x20\x6f\x6e\x65\x20\x46\x49\x4c" \
-"\x45\x2c\x20\x70\x72\x65\x63\x65\x64\x65\x20\x65\x61\x63\x68\x20" \
-"\x77\x69\x74\x68\x20\x61\x20\x66\x69\x6c\x65\x6e\x61\x6d\x65\x20" \
-"\x68\x65\x61\x64\x65\x72\x2e\x0a\x0a\x09\x2d\x6e\x20\x4e\x5b\x6b" \
-"\x62\x6d\x5d\x09\x50\x72\x69\x6e\x74\x20\x66\x69\x72\x73\x74\x20" \
-"\x4e\x20\x6c\x69\x6e\x65\x73\x0a\x09\x2d\x63\x20\x4e\x5b\x6b\x62" \
-"\x6d\x5d\x09\x50\x72\x69\x6e\x74\x20\x66\x69\x72\x73\x74\x20\x4e" \
-"\x20\x62\x79\x74\x65\x73\x0a\x09\x2d\x71\x09\x09\x4e\x65\x76\x65" \
-"\x72\x20\x70\x72\x69\x6e\x74\x20\x68\x65\x61\x64\x65\x72\x73\x0a" \
-"\x09\x2d\x76\x09\x09\x41\x6c\x77\x61\x79\x73\x20\x70\x72\x69\x6e" \
-"\x74\x20\x68\x65\x61\x64\x65\x72\x73\x0a\x0a\x4e\x20\x6d\x61\x79" \
-"\x20\x62\x65\x20\x73\x75\x66\x66\x69\x78\x65\x64\x20\x62\x79\x20" \
-"\x6b\x20\x28\x78\x31\x30\x32\x34\x29\x2c\x20\x62\x20\x28\x78\x35" \
-"\x31\x32\x29\x2c\x20\x6f\x72\x20\x6d\x20\x28\x78\x31\x30\x32\x34" \
-"\x5e\x32\x29\x2e\x00\x5b\x2d\x62\x63\x43\x64\x65\x66\x6e\x6f\x73" \
-"\x76\x78\x52\x5d\x20\x5b\x46\x49\x4c\x45\x5d\x2e\x2e\x2e\x0a\x0a" \
-"\x44\x69\x73\x70\x6c\x61\x79\x20\x46\x49\x4c\x45\x73\x20\x28\x6f" \
-"\x72\x20\x73\x74\x64\x69\x6e\x29\x20\x69\x6e\x20\x61\x20\x75\x73" \
-"\x65\x72\x20\x73\x70\x65\x63\x69\x66\x69\x65\x64\x20\x66\x6f\x72" \
-"\x6d\x61\x74\x0a\x0a\x09\x2d\x62\x09\x09\x4f\x6e\x65\x2d\x62\x79" \
-"\x74\x65\x20\x6f\x63\x74\x61\x6c\x20\x64\x69\x73\x70\x6c\x61\x79" \
-"\x0a\x09\x2d\x63\x09\x09\x4f\x6e\x65\x2d\x62\x79\x74\x65\x20\x63" \
-"\x68\x61\x72\x61\x63\x74\x65\x72\x20\x64\x69\x73\x70\x6c\x61\x79" \
-"\x0a\x09\x2d\x43\x09\x09\x43\x61\x6e\x6f\x6e\x69\x63\x61\x6c\x20" \
-"\x68\x65\x78\x2b\x41\x53\x43\x49\x49\x2c\x20\x31\x36\x20\x62\x79" \
-"\x74\x65\x73\x20\x70\x65\x72\x20\x6c\x69\x6e\x65\x0a\x09\x2d\x64" \
-"\x09\x09\x54\x77\x6f\x2d\x62\x79\x74\x65\x20\x64\x65\x63\x69\x6d" \
-"\x61\x6c\x20\x64\x69\x73\x70\x6c\x61\x79\x0a\x09\x2d\x65\x20\x46" \
-"\x4f\x52\x4d\x41\x54\x5f\x53\x54\x52\x49\x4e\x47\x0a\x09\x2d\x66" \
-"\x20\x46\x4f\x52\x4d\x41\x54\x5f\x46\x49\x4c\x45\x0a\x09\x2d\x6e" \
-"\x20\x4c\x45\x4e\x47\x54\x48\x09\x49\x6e\x74\x65\x72\x70\x72\x65" \
-"\x74\x20\x6f\x6e\x6c\x79\x20\x4c\x45\x4e\x47\x54\x48\x20\x62\x79" \
-"\x74\x65\x73\x20\x6f\x66\x20\x69\x6e\x70\x75\x74\x0a\x09\x2d\x6f" \
-"\x09\x09\x54\x77\x6f\x2d\x62\x79\x74\x65\x20\x6f\x63\x74\x61\x6c" \
-"\x20\x64\x69\x73\x70\x6c\x61\x79\x0a\x09\x2d\x73\x20\x4f\x46\x46" \
-"\x53\x45\x54\x09\x53\x6b\x69\x70\x20\x4f\x46\x46\x53\x45\x54\x20" \
-"\x62\x79\x74\x65\x73\x0a\x09\x2d\x76\x09\x09\x44\x69\x73\x70\x6c" \
-"\x61\x79\x20\x61\x6c\x6c\x20\x69\x6e\x70\x75\x74\x20\x64\x61\x74" \
-"\x61\x0a\x09\x2d\x78\x09\x09\x54\x77\x6f\x2d\x62\x79\x74\x65\x20" \
-"\x68\x65\x78\x61\x64\x65\x63\x69\x6d\x61\x6c\x20\x64\x69\x73\x70" \
-"\x6c\x61\x79\x0a\x09\x2d\x52\x09\x09\x52\x65\x76\x65\x72\x73\x65" \
-"\x20\x6f\x66\x20\x27\x68\x65\x78\x64\x75\x6d\x70\x20\x2d\x43\x76" \
-"\x27\x00\x5b\x4f\x50\x54\x49\x4f\x4e\x53\x5d\x20\x5b\x55\x53\x45" \
-"\x52\x5d\x0a\x0a\x50\x72\x69\x6e\x74\x20\x69\x6e\x66\x6f\x72\x6d" \
-"\x61\x74\x69\x6f\x6e\x20\x61\x62\x6f\x75\x74\x20\x55\x53\x45\x52" \
-"\x20\x6f\x72\x20\x74\x68\x65\x20\x63\x75\x72\x72\x65\x6e\x74\x20" \
-"\x75\x73\x65\x72\x0a\x0a\x09\x2d\x75\x09\x55\x73\x65\x72\x20\x49" \
-"\x44\x0a\x09\x2d\x67\x09\x47\x72\x6f\x75\x70\x20\x49\x44\x0a\x09" \
-"\x2d\x47\x09\x53\x75\x70\x70\x6c\x65\x6d\x65\x6e\x74\x61\x72\x79" \
-"\x20\x67\x72\x6f\x75\x70\x20\x49\x44\x73\x0a\x09\x2d\x6e\x09\x50" \
-"\x72\x69\x6e\x74\x20\x6e\x61\x6d\x65\x73\x20\x69\x6e\x73\x74\x65" \
-"\x61\x64\x20\x6f\x66\x20\x6e\x75\x6d\x62\x65\x72\x73\x0a\x09\x2d" \
-"\x72\x09\x50\x72\x69\x6e\x74\x20\x72\x65\x61\x6c\x20\x49\x44\x20" \
-"\x69\x6e\x73\x74\x65\x61\x64\x20\x6f\x66\x20\x65\x66\x66\x65\x63" \
-"\x74\x69\x76\x65\x20\x49\x44\x00\x5b\x2d\x61\x5d\x20\x69\x6e\x74" \
-"\x65\x72\x66\x61\x63\x65\x20\x5b\x61\x64\x64\x72\x65\x73\x73\x5d" \
-"\x0a\x0a\x43\x6f\x6e\x66\x69\x67\x75\x72\x65\x20\x61\x20\x6e\x65" \
-"\x74\x77\x6f\x72\x6b\x20\x69\x6e\x74\x65\x72\x66\x61\x63\x65\x0a" \
-"\x0a\x09\x5b\x61\x64\x64\x20\x41\x44\x44\x52\x45\x53\x53\x5b\x2f" \
-"\x50\x52\x45\x46\x49\x58\x4c\x45\x4e\x5d\x5d\x0a\x09\x5b\x64\x65" \
-"\x6c\x20\x41\x44\x44\x52\x45\x53\x53\x5b\x2f\x50\x52\x45\x46\x49" \
-"\x58\x4c\x45\x4e\x5d\x5d\x0a\x09\x5b\x5b\x2d\x5d\x62\x72\x6f\x61" \
-"\x64\x63\x61\x73\x74\x20\x5b\x41\x44\x44\x52\x45\x53\x53\x5d\x5d" \
-"\x20\x5b\x5b\x2d\x5d\x70\x6f\x69\x6e\x74\x6f\x70\x6f\x69\x6e\x74" \
-"\x20\x5b\x41\x44\x44\x52\x45\x53\x53\x5d\x5d\x0a\x09\x5b\x6e\x65" \
-"\x74\x6d\x61\x73\x6b\x20\x41\x44\x44\x52\x45\x53\x53\x5d\x20\x5b" \
-"\x64\x73\x74\x61\x64\x64\x72\x20\x41\x44\x44\x52\x45\x53\x53\x5d" \
-"\x0a\x09\x5b\x68\x77\x20\x65\x74\x68\x65\x72\x20\x41\x44\x44\x52" \
-"\x45\x53\x53\x5d\x20\x5b\x6d\x65\x74\x72\x69\x63\x20\x4e\x4e\x5d" \
-"\x20\x5b\x6d\x74\x75\x20\x4e\x4e\x5d\x0a\x09\x5b\x5b\x2d\x5d\x74" \
-"\x72\x61\x69\x6c\x65\x72\x73\x5d\x20\x5b\x5b\x2d\x5d\x61\x72\x70" \
-"\x5d\x20\x5b\x5b\x2d\x5d\x61\x6c\x6c\x6d\x75\x6c\x74\x69\x5d\x0a" \
-"\x09\x5b\x6d\x75\x6c\x74\x69\x63\x61\x73\x74\x5d\x20\x5b\x5b\x2d" \
-"\x5d\x70\x72\x6f\x6d\x69\x73\x63\x5d\x20\x5b\x74\x78\x71\x75\x65" \
-"\x75\x65\x6c\x65\x6e\x20\x4e\x4e\x5d\x20\x5b\x5b\x2d\x5d\x64\x79" \
-"\x6e\x61\x6d\x69\x63\x5d\x0a\x09\x5b\x75\x70\x7c\x64\x6f\x77\x6e" \
-"\x5d\x20\x2e\x2e\x2e\x00\x5b\x2d\x66\x65\x5d\x20\x5b\x2d\x71\x20" \
-"\x4e\x5d\x20\x5b\x2d\x52\x20\x4e\x5d\x20\x5b\x43\x4f\x4e\x46\x46" \
-"\x49\x4c\x45\x5d\x0a\x0a\x4c\x69\x73\x74\x65\x6e\x20\x66\x6f\x72" \
-"\x20\x6e\x65\x74\x77\x6f\x72\x6b\x20\x63\x6f\x6e\x6e\x65\x63\x74" \
-"\x69\x6f\x6e\x73\x20\x61\x6e\x64\x20\x6c\x61\x75\x6e\x63\x68\x20" \
-"\x70\x72\x6f\x67\x72\x61\x6d\x73\x0a\x0a\x09\x2d\x66\x09\x52\x75" \
-"\x6e\x20\x69\x6e\x20\x66\x6f\x72\x65\x67\x72\x6f\x75\x6e\x64\x0a" \
-"\x09\x2d\x65\x09\x4c\x6f\x67\x20\x74\x6f\x20\x73\x74\x64\x65\x72" \
-"\x72\x0a\x09\x2d\x71\x20\x4e\x09\x53\x6f\x63\x6b\x65\x74\x20\x6c" \
-"\x69\x73\x74\x65\x6e\x20\x71\x75\x65\x75\x65\x20\x28\x64\x65\x66" \
-"\x61\x75\x6c\x74\x3a\x20\x31\x32\x38\x29\x0a\x09\x2d\x52\x20\x4e" \
-"\x09\x50\x61\x75\x73\x65\x20\x73\x65\x72\x76\x69\x63\x65\x73\x20" \
-"\x61\x66\x74\x65\x72\x20\x4e\x20\x63\x6f\x6e\x6e\x65\x63\x74\x73" \
-"\x2f\x6d\x69\x6e\x0a\x09\x09\x28\x64\x65\x66\x61\x75\x6c\x74\x3a" \
-"\x20\x30\x20\x2d\x20\x64\x69\x73\x61\x62\x6c\x65\x64\x29\x00\x46" \
-"\x49\x4c\x45\x20\x5b\x53\x59\x4d\x42\x4f\x4c\x3d\x56\x41\x4c\x55" \
-"\x45\x5d\x2e\x2e\x2e\x0a\x0a\x4c\x6f\x61\x64\x20\x74\x68\x65\x20" \
-"\x73\x70\x65\x63\x69\x66\x69\x65\x64\x20\x6b\x65\x72\x6e\x65\x6c" \
-"\x20\x6d\x6f\x64\x75\x6c\x65\x73\x20\x69\x6e\x74\x6f\x20\x74\x68" \
-"\x65\x20\x6b\x65\x72\x6e\x65\x6c\x00\x5b\x2d\x63\x64\x44\x73\x70" \
-"\x5d\x20\x5b\x2d\x6f\x20\x55\x53\x45\x52\x5d\x20\x5b\x2d\x67\x20" \
-"\x47\x52\x50\x5d\x20\x5b\x2d\x6d\x20\x4d\x4f\x44\x45\x5d\x20\x5b" \
-"\x53\x4f\x55\x52\x43\x45\x5d\x2e\x2e\x2e\x20\x44\x45\x53\x54\x0a" \
-"\x0a\x43\x6f\x70\x79\x20\x66\x69\x6c\x65\x73\x20\x61\x6e\x64\x20" \
-"\x73\x65\x74\x20\x61\x74\x74\x72\x69\x62\x75\x74\x65\x73\x0a\x0a" \
-"\x09\x2d\x63\x09\x4a\x75\x73\x74\x20\x63\x6f\x70\x79\x20\x28\x64" \
-"\x65\x66\x61\x75\x6c\x74\x29\x0a\x09\x2d\x64\x09\x43\x72\x65\x61" \
-"\x74\x65\x20\x64\x69\x72\x65\x63\x74\x6f\x72\x69\x65\x73\x0a\x09" \
-"\x2d\x44\x09\x43\x72\x65\x61\x74\x65\x20\x6c\x65\x61\x64\x69\x6e" \
-"\x67\x20\x74\x61\x72\x67\x65\x74\x20\x64\x69\x72\x65\x63\x74\x6f" \
-"\x72\x69\x65\x73\x0a\x09\x2d\x73\x09\x53\x74\x72\x69\x70\x20\x73" \
-"\x79\x6d\x62\x6f\x6c\x20\x74\x61\x62\x6c\x65\x0a\x09\x2d\x70\x09" \
-"\x50\x72\x65\x73\x65\x72\x76\x65\x20\x64\x61\x74\x65\x0a\x09\x2d" \
-"\x6f\x20\x55\x53\x45\x52\x09\x53\x65\x74\x20\x6f\x77\x6e\x65\x72" \
-"\x73\x68\x69\x70\x0a\x09\x2d\x67\x20\x47\x52\x50\x09\x53\x65\x74" \
-"\x20\x67\x72\x6f\x75\x70\x20\x6f\x77\x6e\x65\x72\x73\x68\x69\x70" \
-"\x0a\x09\x2d\x6d\x20\x4d\x4f\x44\x45\x09\x53\x65\x74\x20\x70\x65" \
-"\x72\x6d\x69\x73\x73\x69\x6f\x6e\x73\x00\x5b\x2d\x63\x20\x31\x2d" \
-"\x33\x5d\x20\x5b\x2d\x6e\x20\x30\x2d\x37\x5d\x20\x5b\x2d\x70\x20" \
-"\x50\x49\x44\x5d\x20\x5b\x50\x52\x4f\x47\x5d\x0a\x0a\x43\x68\x61" \
-"\x6e\x67\x65\x20\x49\x2f\x4f\x20\x70\x72\x69\x6f\x72\x69\x74\x79" \
-"\x20\x61\x6e\x64\x20\x63\x6c\x61\x73\x73\x0a\x0a\x09\x2d\x63\x09" \
-"\x43\x6c\x61\x73\x73\x2e\x20\x31\x3a\x72\x65\x61\x6c\x74\x69\x6d" \
-"\x65\x20\x32\x3a\x62\x65\x73\x74\x2d\x65\x66\x66\x6f\x72\x74\x20" \
-"\x33\x3a\x69\x64\x6c\x65\x0a\x09\x2d\x6e\x09\x50\x72\x69\x6f\x72" \
-"\x69\x74\x79\x00\x5b\x2d\x63\x5d\x20\x5b\x2d\x64\x5d\x20\x5b\x2d" \
-"\x74\x5d\x20\x5b\x2d\x7a\x5d\x20\x5b\x2d\x6b\x7c\x2d\x6d\x5d\x20" \
-"\x5b\x41\x4c\x4c\x7c\x42\x4c\x4f\x43\x4b\x44\x45\x56\x2e\x2e\x2e" \
-"\x5d\x20\x5b\x49\x4e\x54\x45\x52\x56\x41\x4c\x20\x5b\x43\x4f\x55" \
-"\x4e\x54\x5d\x5d\x0a\x0a\x52\x65\x70\x6f\x72\x74\x20\x43\x50\x55" \
-"\x20\x61\x6e\x64\x20\x49\x2f\x4f\x20\x73\x74\x61\x74\x69\x73\x74" \
-"\x69\x63\x73\x0a\x0a\x09\x2d\x63\x09\x53\x68\x6f\x77\x20\x43\x50" \
-"\x55\x20\x75\x74\x69\x6c\x69\x7a\x61\x74\x69\x6f\x6e\x0a\x09\x2d" \
-"\x64\x09\x53\x68\x6f\x77\x20\x64\x65\x76\x69\x63\x65\x20\x75\x74" \
-"\x69\x6c\x69\x7a\x61\x74\x69\x6f\x6e\x0a\x09\x2d\x74\x09\x50\x72" \
-"\x69\x6e\x74\x20\x63\x75\x72\x72\x65\x6e\x74\x20\x74\x69\x6d\x65" \
-"\x0a\x09\x2d\x7a\x09\x4f\x6d\x69\x74\x20\x64\x65\x76\x69\x63\x65" \
-"\x73\x20\x77\x69\x74\x68\x20\x6e\x6f\x20\x61\x63\x74\x69\x76\x69" \
-"\x74\x79\x0a\x09\x2d\x6b\x09\x55\x73\x65\x20\x6b\x62\x2f\x73\x0a" \
-"\x09\x2d\x6d\x09\x55\x73\x65\x20\x4d\x62\x2f\x73\x00\x5b\x4f\x50" \
-"\x54\x49\x4f\x4e\x53\x5d\x20\x7b\x61\x64\x64\x72\x65\x73\x73\x20" \
-"\x7c\x20\x72\x6f\x75\x74\x65\x20\x7c\x20\x6c\x69\x6e\x6b\x20\x7c" \
-"\x20\x72\x75\x6c\x65\x7d\x20\x7b\x43\x4f\x4d\x4d\x41\x4e\x44\x7d" \
-"\x0a\x0a\x69\x70\x20\x5b\x4f\x50\x54\x49\x4f\x4e\x53\x5d\x20\x4f" \
-"\x42\x4a\x45\x43\x54\x20\x7b\x43\x4f\x4d\x4d\x41\x4e\x44\x7d\x0a" \
-"\x77\x68\x65\x72\x65\x20\x4f\x42\x4a\x45\x43\x54\x20\x3a\x3d\x20" \
-"\x7b\x61\x64\x64\x72\x65\x73\x73\x20\x7c\x20\x72\x6f\x75\x74\x65" \
-"\x20\x7c\x20\x6c\x69\x6e\x6b\x20\x7c\x20\x72\x75\x6c\x65\x7d\x0a" \
-"\x4f\x50\x54\x49\x4f\x4e\x53\x20\x3a\x3d\x20\x7b\x20\x2d\x66\x5b" \
-"\x61\x6d\x69\x6c\x79\x5d\x20\x7b\x20\x69\x6e\x65\x74\x20\x7c\x20" \
-"\x69\x6e\x65\x74\x36\x20\x7c\x20\x6c\x69\x6e\x6b\x20\x7d\x20\x7c" \
-"\x20\x2d\x6f\x5b\x6e\x65\x6c\x69\x6e\x65\x5d\x20\x7d\x00\x5b\x2d" \
-"\x6c\x5d\x20\x5b\x2d\x53\x49\x47\x5d\x20\x50\x49\x44\x2e\x2e\x2e" \
-"\x0a\x0a\x53\x65\x6e\x64\x20\x61\x20\x73\x69\x67\x6e\x61\x6c\x20" \
-"\x28\x64\x65\x66\x61\x75\x6c\x74\x3a\x20\x54\x45\x52\x4d\x29\x20" \
-"\x74\x6f\x20\x67\x69\x76\x65\x6e\x20\x50\x49\x44\x73\x0a\x0a\x09" \
-"\x2d\x6c\x09\x4c\x69\x73\x74\x20\x61\x6c\x6c\x20\x73\x69\x67\x6e" \
-"\x61\x6c\x20\x6e\x61\x6d\x65\x73\x20\x61\x6e\x64\x20\x6e\x75\x6d" \
-"\x62\x65\x72\x73\x00\x5b\x2d\x6c\x5d\x20\x5b\x2d\x71\x5d\x20\x5b" \
-"\x2d\x53\x49\x47\x5d\x20\x50\x52\x4f\x43\x45\x53\x53\x5f\x4e\x41" \
-"\x4d\x45\x2e\x2e\x2e\x0a\x0a\x53\x65\x6e\x64\x20\x61\x20\x73\x69" \
-"\x67\x6e\x61\x6c\x20\x28\x64\x65\x66\x61\x75\x6c\x74\x3a\x20\x54" \
-"\x45\x52\x4d\x29\x20\x74\x6f\x20\x67\x69\x76\x65\x6e\x20\x70\x72" \
-"\x6f\x63\x65\x73\x73\x65\x73\x0a\x0a\x09\x2d\x6c\x09\x4c\x69\x73" \
-"\x74\x20\x61\x6c\x6c\x20\x73\x69\x67\x6e\x61\x6c\x20\x6e\x61\x6d" \
-"\x65\x73\x20\x61\x6e\x64\x20\x6e\x75\x6d\x62\x65\x72\x73\x0a\x09" \
-"\x2d\x71\x09\x44\x6f\x6e\x27\x74\x20\x63\x6f\x6d\x70\x6c\x61\x69" \
-"\x6e\x20\x69\x66\x20\x6e\x6f\x20\x70\x72\x6f\x63\x65\x73\x73\x65" \
-"\x73\x20\x77\x65\x72\x65\x20\x6b\x69\x6c\x6c\x65\x64\x00\x5b\x2d" \
-"\x6c\x5d\x20\x5b\x2d\x53\x49\x47\x5d\x20\x5b\x2d\x6f\x20\x50\x49" \
-"\x44\x5d\x2e\x2e\x2e\x0a\x0a\x53\x65\x6e\x64\x20\x61\x20\x73\x69" \
-"\x67\x6e\x61\x6c\x20\x28\x64\x65\x66\x61\x75\x6c\x74\x3a\x20\x54" \
-"\x45\x52\x4d\x29\x20\x74\x6f\x20\x61\x6c\x6c\x20\x70\x72\x6f\x63" \
-"\x65\x73\x73\x65\x73\x20\x6f\x75\x74\x73\x69\x64\x65\x20\x63\x75" \
-"\x72\x72\x65\x6e\x74\x20\x73\x65\x73\x73\x69\x6f\x6e\x0a\x0a\x09" \
-"\x2d\x6c\x09\x4c\x69\x73\x74\x20\x61\x6c\x6c\x20\x73\x69\x67\x6e" \
-"\x61\x6c\x20\x6e\x61\x6d\x65\x73\x20\x61\x6e\x64\x20\x6e\x75\x6d" \
-"\x62\x65\x72\x73\x0a\x09\x2d\x6f\x20\x50\x49\x44\x09\x44\x6f\x6e" \
-"\x27\x74\x20\x73\x69\x67\x6e\x61\x6c\x20\x74\x68\x69\x73\x20\x50" \
-"\x49\x44\x00\x5b\x2d\x45\x4e\x68\x7e\x49\x3f\x5d\x20\x5b\x46\x49" \
-"\x4c\x45\x5d\x2e\x2e\x2e\x0a\x0a\x56\x69\x65\x77\x20\x46\x49\x4c" \
-"\x45\x20\x28\x6f\x72\x20\x73\x74\x64\x69\x6e\x29\x20\x6f\x6e\x65" \
-"\x20\x73\x63\x72\x65\x65\x6e\x66\x75\x6c\x20\x61\x74\x20\x61\x20" \
-"\x74\x69\x6d\x65\x0a\x0a\x09\x2d\x45\x09\x51\x75\x69\x74\x20\x6f" \
-"\x6e\x63\x65\x20\x74\x68\x65\x20\x65\x6e\x64\x20\x6f\x66\x20\x61" \
-"\x20\x66\x69\x6c\x65\x20\x69\x73\x20\x72\x65\x61\x63\x68\x65\x64" \
-"\x0a\x09\x2d\x4e\x09\x50\x72\x65\x66\x69\x78\x20\x6c\x69\x6e\x65" \
-"\x20\x6e\x75\x6d\x62\x65\x72\x20\x74\x6f\x20\x65\x61\x63\x68\x20" \
-"\x6c\x69\x6e\x65\x0a\x09\x2d\x49\x09\x49\x67\x6e\x6f\x72\x65\x20" \
-"\x63\x61\x73\x65\x20\x69\x6e\x20\x61\x6c\x6c\x20\x73\x65\x61\x72" \
-"\x63\x68\x65\x73\x0a\x09\x2d\x7e\x09\x53\x75\x70\x70\x72\x65\x73" \
-"\x73\x20\x7e\x73\x20\x64\x69\x73\x70\x6c\x61\x79\x65\x64\x20\x70" \
-"\x61\x73\x74\x20\x45\x4f\x46\x00\x5b\x4f\x50\x54\x49\x4f\x4e\x53" \
-"\x5d\x20\x54\x41\x52\x47\x45\x54\x2e\x2e\x2e\x20\x4c\x49\x4e\x4b" \
-"\x7c\x44\x49\x52\x0a\x0a\x43\x72\x65\x61\x74\x65\x20\x61\x20\x6c" \
-"\x69\x6e\x6b\x20\x4c\x49\x4e\x4b\x20\x6f\x72\x20\x44\x49\x52\x2f" \
-"\x54\x41\x52\x47\x45\x54\x20\x74\x6f\x20\x74\x68\x65\x20\x73\x70" \
-"\x65\x63\x69\x66\x69\x65\x64\x20\x54\x41\x52\x47\x45\x54\x28\x73" \
-"\x29\x0a\x0a\x09\x2d\x73\x09\x4d\x61\x6b\x65\x20\x73\x79\x6d\x6c" \
-"\x69\x6e\x6b\x73\x20\x69\x6e\x73\x74\x65\x61\x64\x20\x6f\x66\x20" \
-"\x68\x61\x72\x64\x6c\x69\x6e\x6b\x73\x0a\x09\x2d\x66\x09\x52\x65" \
-"\x6d\x6f\x76\x65\x20\x65\x78\x69\x73\x74\x69\x6e\x67\x20\x64\x65" \
-"\x73\x74\x69\x6e\x61\x74\x69\x6f\x6e\x73\x0a\x09\x2d\x6e\x09\x44" \
-"\x6f\x6e\x27\x74\x20\x64\x65\x72\x65\x66\x65\x72\x65\x6e\x63\x65" \
-"\x20\x73\x79\x6d\x6c\x69\x6e\x6b\x73\x20\x2d\x20\x74\x72\x65\x61" \
-"\x74\x20\x6c\x69\x6b\x65\x20\x6e\x6f\x72\x6d\x61\x6c\x20\x66\x69" \
-"\x6c\x65\x0a\x09\x2d\x62\x09\x4d\x61\x6b\x65\x20\x61\x20\x62\x61" \
-"\x63\x6b\x75\x70\x20\x6f\x66\x20\x74\x68\x65\x20\x74\x61\x72\x67" \
-"\x65\x74\x20\x28\x69\x66\x20\x65\x78\x69\x73\x74\x73\x29\x20\x62" \
-"\x65\x66\x6f\x72\x65\x20\x6c\x69\x6e\x6b\x20\x6f\x70\x65\x72\x61" \
-"\x74\x69\x6f\x6e\x0a\x09\x2d\x53\x20\x73\x75\x66\x09\x55\x73\x65" \
-"\x20\x73\x75\x66\x66\x69\x78\x20\x69\x6e\x73\x74\x65\x61\x64\x20" \
-"\x6f\x66\x20\x7e\x20\x77\x68\x65\x6e\x20\x6d\x61\x6b\x69\x6e\x67" \
-"\x20\x62\x61\x63\x6b\x75\x70\x20\x66\x69\x6c\x65\x73\x0a\x09\x2d" \
-"\x54\x09\x32\x6e\x64\x20\x61\x72\x67\x20\x6d\x75\x73\x74\x20\x62" \
-"\x65\x20\x61\x20\x44\x49\x52\x0a\x09\x2d\x76\x09\x56\x65\x72\x62" \
-"\x6f\x73\x65\x00\x5b\x2d\x72\x5d\x20\x5b\x2d\x6f\x20\x4f\x46\x53" \
-"\x5d\x20\x4c\x4f\x4f\x50\x44\x45\x56\x20\x46\x49\x4c\x45\x20\x2d" \
-"\x20\x61\x73\x73\x6f\x63\x69\x61\x74\x65\x20\x6c\x6f\x6f\x70\x20" \
-"\x64\x65\x76\x69\x63\x65\x73\x0a\x09\x6c\x6f\x73\x65\x74\x75\x70" \
-"\x20\x2d\x64\x20\x4c\x4f\x4f\x50\x44\x45\x56\x20\x2d\x20\x64\x69" \
-"\x73\x61\x73\x73\x6f\x63\x69\x61\x74\x65\x0a\x09\x6c\x6f\x73\x65" \
-"\x74\x75\x70\x20\x5b\x2d\x66\x5d\x20\x2d\x20\x73\x68\x6f\x77\x0a" \
-"\x0a\x09\x2d\x6f\x20\x4f\x46\x53\x09\x53\x74\x61\x72\x74\x20\x4f" \
-"\x46\x53\x20\x62\x79\x74\x65\x73\x20\x69\x6e\x74\x6f\x20\x46\x49" \
-"\x4c\x45\x0a\x09\x2d\x72\x09\x52\x65\x61\x64\x2d\x6f\x6e\x6c\x79" \
-"\x0a\x09\x2d\x66\x09\x53\x68\x6f\x77\x20\x66\x69\x72\x73\x74\x20" \
-"\x66\x72\x65\x65\x20\x6c\x6f\x6f\x70\x20\x64\x65\x76\x69\x63\x65" \
-"\x00\x5b\x2d\x31\x41\x61\x43\x78\x64\x4c\x48\x52\x46\x70\x6c\x69" \
-"\x6e\x73\x65\x68\x72\x53\x58\x76\x63\x74\x75\x5d\x20\x5b\x2d\x77" \
-"\x20\x57\x49\x44\x54\x48\x5d\x20\x5b\x46\x49\x4c\x45\x5d\x2e\x2e" \
-"\x2e\x0a\x0a\x4c\x69\x73\x74\x20\x64\x69\x72\x65\x63\x74\x6f\x72" \
-"\x79\x20\x63\x6f\x6e\x74\x65\x6e\x74\x73\x0a\x0a\x09\x2d\x31\x09" \
-"\x4f\x6e\x65\x20\x63\x6f\x6c\x75\x6d\x6e\x20\x6f\x75\x74\x70\x75" \
-"\x74\x0a\x09\x2d\x61\x09\x49\x6e\x63\x6c\x75\x64\x65\x20\x65\x6e" \
-"\x74\x72\x69\x65\x73\x20\x77\x68\x69\x63\x68\x20\x73\x74\x61\x72" \
-"\x74\x20\x77\x69\x74\x68\x20\x2e\x0a\x09\x2d\x41\x09\x4c\x69\x6b" \
-"\x65\x20\x2d\x61\x2c\x20\x62\x75\x74\x20\x65\x78\x63\x6c\x75\x64" \
-"\x65\x20\x2e\x20\x61\x6e\x64\x20\x2e\x2e\x0a\x09\x2d\x43\x09\x4c" \
-"\x69\x73\x74\x20\x62\x79\x20\x63\x6f\x6c\x75\x6d\x6e\x73\x0a\x09" \
-"\x2d\x78\x09\x4c\x69\x73\x74\x20\x62\x79\x20\x6c\x69\x6e\x65\x73" \
-"\x0a\x09\x2d\x64\x09\x4c\x69\x73\x74\x20\x64\x69\x72\x65\x63\x74" \
-"\x6f\x72\x79\x20\x65\x6e\x74\x72\x69\x65\x73\x20\x69\x6e\x73\x74" \
-"\x65\x61\x64\x20\x6f\x66\x20\x63\x6f\x6e\x74\x65\x6e\x74\x73\x0a" \
-"\x09\x2d\x4c\x09\x46\x6f\x6c\x6c\x6f\x77\x20\x73\x79\x6d\x6c\x69" \
-"\x6e\x6b\x73\x0a\x09\x2d\x48\x09\x46\x6f\x6c\x6c\x6f\x77\x20\x73" \
-"\x79\x6d\x6c\x69\x6e\x6b\x73\x20\x6f\x6e\x20\x63\x6f\x6d\x6d\x61" \
-"\x6e\x64\x20\x6c\x69\x6e\x65\x0a\x09\x2d\x52\x09\x52\x65\x63\x75" \
-"\x72\x73\x65\x0a\x09\x2d\x70\x09\x41\x70\x70\x65\x6e\x64\x20\x2f" \
-"\x20\x74\x6f\x20\x64\x69\x72\x20\x65\x6e\x74\x72\x69\x65\x73\x0a" \
-"\x09\x2d\x46\x09\x41\x70\x70\x65\x6e\x64\x20\x69\x6e\x64\x69\x63" \
-"\x61\x74\x6f\x72\x20\x28\x6f\x6e\x65\x20\x6f\x66\x20\x2a\x2f\x3d" \
-"\x40\x7c\x29\x20\x74\x6f\x20\x65\x6e\x74\x72\x69\x65\x73\x0a\x09" \
-"\x2d\x6c\x09\x4c\x6f\x6e\x67\x20\x6c\x69\x73\x74\x69\x6e\x67\x20" \
-"\x66\x6f\x72\x6d\x61\x74\x0a\x09\x2d\x69\x09\x4c\x69\x73\x74\x20" \
-"\x69\x6e\x6f\x64\x65\x20\x6e\x75\x6d\x62\x65\x72\x73\x0a\x09\x2d" \
-"\x6e\x09\x4c\x69\x73\x74\x20\x6e\x75\x6d\x65\x72\x69\x63\x20\x55" \
-"\x49\x44\x73\x20\x61\x6e\x64\x20\x47\x49\x44\x73\x20\x69\x6e\x73" \
-"\x74\x65\x61\x64\x20\x6f\x66\x20\x6e\x61\x6d\x65\x73\x0a\x09\x2d" \
-"\x73\x09\x4c\x69\x73\x74\x20\x61\x6c\x6c\x6f\x63\x61\x74\x65\x64" \
-"\x20\x62\x6c\x6f\x63\x6b\x73\x0a\x09\x2d\x65\x09\x4c\x69\x73\x74" \
-"\x20\x66\x75\x6c\x6c\x20\x64\x61\x74\x65\x20\x61\x6e\x64\x20\x74" \
-"\x69\x6d\x65\x0a\x09\x2d\x68\x09\x4c\x69\x73\x74\x20\x73\x69\x7a" \
-"\x65\x73\x20\x69\x6e\x20\x68\x75\x6d\x61\x6e\x20\x72\x65\x61\x64" \
-"\x61\x62\x6c\x65\x20\x66\x6f\x72\x6d\x61\x74\x20\x28\x31\x4b\x20" \
-"\x32\x34\x33\x4d\x20\x32\x47\x29\x0a\x09\x2d\x72\x09\x53\x6f\x72" \
-"\x74\x20\x69\x6e\x20\x72\x65\x76\x65\x72\x73\x65\x20\x6f\x72\x64" \
-"\x65\x72\x0a\x09\x2d\x53\x09\x53\x6f\x72\x74\x20\x62\x79\x20\x73" \
-"\x69\x7a\x65\x0a\x09\x2d\x58\x09\x53\x6f\x72\x74\x20\x62\x79\x20" \
-"\x65\x78\x74\x65\x6e\x73\x69\x6f\x6e\x0a\x09\x2d\x76\x09\x53\x6f" \
-"\x72\x74\x20\x62\x79\x20\x76\x65\x72\x73\x69\x6f\x6e\x0a\x09\x2d" \
-"\x63\x09\x57\x69\x74\x68\x20\x2d\x6c\x3a\x20\x73\x6f\x72\x74\x20" \
-"\x62\x79\x20\x63\x74\x69\x6d\x65\x0a\x09\x2d\x74\x09\x57\x69\x74" \
-"\x68\x20\x2d\x6c\x3a\x20\x73\x6f\x72\x74\x20\x62\x79\x20\x6d\x74" \
-"\x69\x6d\x65\x0a\x09\x2d\x75\x09\x57\x69\x74\x68\x20\x2d\x6c\x3a" \
-"\x20\x73\x6f\x72\x74\x20\x62\x79\x20\x61\x74\x69\x6d\x65\x0a\x09" \
-"\x2d\x77\x20\x4e\x09\x41\x73\x73\x75\x6d\x65\x20\x74\x68\x65\x20" \
-"\x74\x65\x72\x6d\x69\x6e\x61\x6c\x20\x69\x73\x20\x4e\x20\x63\x6f" \
-"\x6c\x75\x6d\x6e\x73\x20\x77\x69\x64\x65\x0a\x09\x2d\x2d\x63\x6f" \
-"\x6c\x6f\x72\x5b\x3d\x7b\x61\x6c\x77\x61\x79\x73\x2c\x6e\x65\x76" \
-"\x65\x72\x2c\x61\x75\x74\x6f\x7d\x5d\x09\x43\x6f\x6e\x74\x72\x6f" \
-"\x6c\x20\x63\x6f\x6c\x6f\x72\x69\x6e\x67\x00\x5b\x2d\x52\x61\x64" \
-"\x6c\x76\x5d\x20\x5b\x46\x49\x4c\x45\x5d\x2e\x2e\x2e\x0a\x0a\x4c" \
-"\x69\x73\x74\x20\x66\x69\x6c\x65\x20\x61\x74\x74\x72\x69\x62\x75" \
-"\x74\x65\x73\x20\x6f\x6e\x20\x61\x6e\x20\x65\x78\x74\x32\x20\x66" \
-"\x73\x0a\x0a\x09\x2d\x52\x09\x52\x65\x63\x75\x72\x73\x65\x0a\x09" \
-"\x2d\x61\x09\x44\x6f\x6e\x27\x74\x20\x68\x69\x64\x65\x20\x65\x6e" \
-"\x74\x72\x69\x65\x73\x20\x73\x74\x61\x72\x74\x69\x6e\x67\x20\x77" \
-"\x69\x74\x68\x20\x2e\x0a\x09\x2d\x64\x09\x4c\x69\x73\x74\x20\x64" \
-"\x69\x72\x65\x63\x74\x6f\x72\x79\x20\x65\x6e\x74\x72\x69\x65\x73" \
-"\x20\x69\x6e\x73\x74\x65\x61\x64\x20\x6f\x66\x20\x63\x6f\x6e\x74" \
-"\x65\x6e\x74\x73\x0a\x09\x2d\x6c\x09\x4c\x69\x73\x74\x20\x6c\x6f" \
-"\x6e\x67\x20\x66\x6c\x61\x67\x20\x6e\x61\x6d\x65\x73\x0a\x09\x2d" \
-"\x76\x09\x4c\x69\x73\x74\x20\x74\x68\x65\x20\x66\x69\x6c\x65\x27" \
-"\x73\x20\x76\x65\x72\x73\x69\x6f\x6e\x2f\x67\x65\x6e\x65\x72\x61" \
-"\x74\x69\x6f\x6e\x20\x6e\x75\x6d\x62\x65\x72\x00\x0a\x0a\x4c\x69" \
-"\x73\x74\x20\x74\x68\x65\x20\x63\x75\x72\x72\x65\x6e\x74\x6c\x79" \
-"\x20\x6c\x6f\x61\x64\x65\x64\x20\x6b\x65\x72\x6e\x65\x6c\x20\x6d" \
-"\x6f\x64\x75\x6c\x65\x73\x00\x0a\x0a\x53\x68\x6f\x77\x20\x61\x6c" \
-"\x6c\x20\x6f\x70\x65\x6e\x20\x66\x69\x6c\x65\x73\x00\x08\x00\x46" \
-"\x49\x4c\x45\x0a\x0a\x44\x65\x63\x6f\x6d\x70\x72\x65\x73\x73\x20" \
-"\x74\x6f\x20\x73\x74\x64\x6f\x75\x74\x00\x2d\x64\x20\x5b\x2d\x63" \
-"\x66\x5d\x20\x5b\x46\x49\x4c\x45\x5d\x2e\x2e\x2e\x0a\x0a\x44\x65" \
-"\x63\x6f\x6d\x70\x72\x65\x73\x73\x20\x46\x49\x4c\x45\x20\x28\x6f" \
-"\x72\x20\x73\x74\x64\x69\x6e\x29\x0a\x0a\x09\x2d\x64\x09\x44\x65" \
-"\x63\x6f\x6d\x70\x72\x65\x73\x73\x0a\x09\x2d\x63\x09\x57\x72\x69" \
-"\x74\x65\x20\x74\x6f\x20\x73\x74\x64\x6f\x75\x74\x0a\x09\x2d\x66" \
-"\x09\x46\x6f\x72\x63\x65\x00\x5b\x2d\x63\x66\x76\x64\x31\x32\x33" \
-"\x34\x35\x36\x37\x38\x39\x43\x46\x5d\x20\x5b\x46\x49\x4c\x45\x5d" \
-"\x2e\x2e\x2e\x0a\x0a\x09\x2d\x31\x2e\x2e\x39\x09\x43\x6f\x6d\x70" \
-"\x72\x65\x73\x73\x69\x6f\x6e\x20\x6c\x65\x76\x65\x6c\x0a\x09\x2d" \
-"\x64\x09\x44\x65\x63\x6f\x6d\x70\x72\x65\x73\x73\x0a\x09\x2d\x63" \
-"\x09\x57\x72\x69\x74\x65\x20\x74\x6f\x20\x73\x74\x64\x6f\x75\x74" \
-"\x0a\x09\x2d\x66\x09\x46\x6f\x72\x63\x65\x0a\x09\x2d\x76\x09\x56" \
-"\x65\x72\x62\x6f\x73\x65\x0a\x09\x2d\x46\x09\x44\x6f\x6e\x27\x74" \
-"\x20\x73\x74\x6f\x72\x65\x20\x6f\x72\x20\x76\x65\x72\x69\x66\x79" \
-"\x20\x63\x68\x65\x63\x6b\x73\x75\x6d\x0a\x09\x2d\x43\x09\x41\x6c" \
-"\x73\x6f\x20\x77\x72\x69\x74\x65\x20\x63\x68\x65\x63\x6b\x73\x75" \
-"\x6d\x20\x6f\x66\x20\x63\x6f\x6d\x70\x72\x65\x73\x73\x65\x64\x20" \
-"\x62\x6c\x6f\x63\x6b\x00\x5b\x2d\x76\x43\x46\x5d\x20\x5b\x46\x49" \
-"\x4c\x45\x5d\x2e\x2e\x2e\x0a\x0a\x09\x2d\x76\x09\x56\x65\x72\x62" \
-"\x6f\x73\x65\x0a\x09\x2d\x46\x09\x44\x6f\x6e\x27\x74\x20\x73\x74" \
-"\x6f\x72\x65\x20\x6f\x72\x20\x76\x65\x72\x69\x66\x79\x20\x63\x68" \
-"\x65\x63\x6b\x73\x75\x6d\x00\x5b\x2d\x61\x77\x5d\x20\x5b\x4d\x41" \
-"\x4e\x50\x41\x47\x45\x5d\x2e\x2e\x2e\x0a\x0a\x46\x6f\x72\x6d\x61" \
-"\x74\x20\x61\x6e\x64\x20\x64\x69\x73\x70\x6c\x61\x79\x20\x6d\x61" \
-"\x6e\x75\x61\x6c\x20\x70\x61\x67\x65\x0a\x0a\x09\x2d\x61\x09\x44" \
-"\x69\x73\x70\x6c\x61\x79\x20\x61\x6c\x6c\x20\x70\x61\x67\x65\x73" \
-"\x0a\x09\x2d\x77\x09\x53\x68\x6f\x77\x20\x70\x61\x67\x65\x20\x6c" \
-"\x6f\x63\x61\x74\x69\x6f\x6e\x73\x00\x5b\x2d\x63\x5b\x73\x77\x5d" \
-"\x5d\x20\x5b\x46\x49\x4c\x45\x5d\x2e\x2e\x2e\x0a\x0a\x50\x72\x69" \
-"\x6e\x74\x20\x6f\x72\x20\x63\x68\x65\x63\x6b\x20\x4d\x44\x35\x20" \
-"\x63\x68\x65\x63\x6b\x73\x75\x6d\x73\x0a\x0a\x09\x2d\x63\x09\x43" \
-"\x68\x65\x63\x6b\x20\x73\x75\x6d\x73\x20\x61\x67\x61\x69\x6e\x73" \
-"\x74\x20\x6c\x69\x73\x74\x20\x69\x6e\x20\x46\x49\x4c\x45\x73\x0a" \
-"\x09\x2d\x73\x09\x44\x6f\x6e\x27\x74\x20\x6f\x75\x74\x70\x75\x74" \
-"\x20\x61\x6e\x79\x74\x68\x69\x6e\x67\x2c\x20\x73\x74\x61\x74\x75" \
-"\x73\x20\x63\x6f\x64\x65\x20\x73\x68\x6f\x77\x73\x20\x73\x75\x63" \
-"\x63\x65\x73\x73\x0a\x09\x2d\x77\x09\x57\x61\x72\x6e\x20\x61\x62" \
-"\x6f\x75\x74\x20\x69\x6d\x70\x72\x6f\x70\x65\x72\x6c\x79\x20\x66" \
-"\x6f\x72\x6d\x61\x74\x74\x65\x64\x20\x63\x68\x65\x63\x6b\x73\x75" \
-"\x6d\x20\x6c\x69\x6e\x65\x73\x00\x5b\x79\x7c\x6e\x5d\x0a\x0a\x43" \
-"\x6f\x6e\x74\x72\x6f\x6c\x20\x77\x72\x69\x74\x65\x20\x61\x63\x63" \
-"\x65\x73\x73\x20\x74\x6f\x20\x79\x6f\x75\x72\x20\x74\x65\x72\x6d" \
-"\x69\x6e\x61\x6c\x0a\x09\x79\x09\x41\x6c\x6c\x6f\x77\x20\x77\x72" \
-"\x69\x74\x65\x20\x61\x63\x63\x65\x73\x73\x20\x74\x6f\x20\x79\x6f" \
-"\x75\x72\x20\x74\x65\x72\x6d\x69\x6e\x61\x6c\x0a\x09\x6e\x09\x44" \
-"\x69\x73\x61\x6c\x6c\x6f\x77\x20\x77\x72\x69\x74\x65\x20\x61\x63" \
-"\x63\x65\x73\x73\x20\x74\x6f\x20\x79\x6f\x75\x72\x20\x74\x65\x72" \
-"\x6d\x69\x6e\x61\x6c\x00\x5b\x4f\x50\x54\x49\x4f\x4e\x53\x5d\x20" \
-"\x44\x49\x52\x45\x43\x54\x4f\x52\x59\x2e\x2e\x2e\x0a\x0a\x43\x72" \
-"\x65\x61\x74\x65\x20\x44\x49\x52\x45\x43\x54\x4f\x52\x59\x0a\x0a" \
-"\x09\x2d\x6d\x20\x4d\x4f\x44\x45\x09\x4d\x6f\x64\x65\x0a\x09\x2d" \
-"\x70\x09\x4e\x6f\x20\x65\x72\x72\x6f\x72\x20\x69\x66\x20\x65\x78" \
-"\x69\x73\x74\x73\x3b\x20\x6d\x61\x6b\x65\x20\x70\x61\x72\x65\x6e" \
-"\x74\x20\x64\x69\x72\x65\x63\x74\x6f\x72\x69\x65\x73\x20\x61\x73" \
-"\x20\x6e\x65\x65\x64\x65\x64\x00\x5b\x2d\x76\x5d\x20\x5b\x2d\x6e" \
-"\x20\x4c\x41\x42\x45\x4c\x5d\x20\x42\x4c\x4f\x43\x4b\x44\x45\x56" \
-"\x20\x5b\x4b\x42\x59\x54\x45\x53\x5d\x0a\x0a\x4d\x61\x6b\x65\x20" \
-"\x61\x20\x46\x41\x54\x33\x32\x20\x66\x69\x6c\x65\x73\x79\x73\x74" \
-"\x65\x6d\x0a\x0a\x09\x2d\x76\x09\x56\x65\x72\x62\x6f\x73\x65\x0a" \
-"\x09\x2d\x6e\x20\x4c\x42\x4c\x09\x56\x6f\x6c\x75\x6d\x65\x20\x6c" \
-"\x61\x62\x65\x6c\x00\x5b\x2d\x46\x6e\x5d\x20\x5b\x2d\x62\x20\x42" \
-"\x4c\x4b\x5f\x53\x49\x5a\x45\x5d\x20\x5b\x2d\x69\x20\x49\x4e\x4f" \
-"\x44\x45\x5f\x52\x41\x54\x49\x4f\x5d\x20\x5b\x2d\x49\x20\x49\x4e" \
-"\x4f\x44\x45\x5f\x53\x49\x5a\x45\x5d\x20\x5b\x2d\x6d\x20\x52\x45" \
-"\x53\x45\x52\x56\x45\x44\x5f\x50\x45\x52\x43\x45\x4e\x54\x5d\x20" \
-"\x5b\x2d\x4c\x20\x4c\x41\x42\x45\x4c\x5d\x20\x42\x4c\x4f\x43\x4b" \
-"\x44\x45\x56\x20\x5b\x4b\x42\x59\x54\x45\x53\x5d\x0a\x0a\x09\x2d" \
-"\x62\x20\x42\x4c\x4b\x5f\x53\x49\x5a\x45\x09\x42\x6c\x6f\x63\x6b" \
-"\x20\x73\x69\x7a\x65\x2c\x20\x62\x79\x74\x65\x73\x0a\x09\x2d\x46" \
-"\x09\x09\x46\x6f\x72\x63\x65\x0a\x09\x2d\x69\x20\x52\x41\x54\x49" \
-"\x4f\x09\x4d\x61\x78\x20\x6e\x75\x6d\x62\x65\x72\x20\x6f\x66\x20" \
-"\x66\x69\x6c\x65\x73\x20\x69\x73\x20\x66\x69\x6c\x65\x73\x79\x73" \
-"\x74\x65\x6d\x5f\x73\x69\x7a\x65\x20\x2f\x20\x52\x41\x54\x49\x4f" \
-"\x0a\x09\x2d\x49\x20\x42\x59\x54\x45\x53\x09\x49\x6e\x6f\x64\x65" \
-"\x20\x73\x69\x7a\x65\x20\x28\x6d\x69\x6e\x20\x31\x32\x38\x29\x0a" \
-"\x09\x2d\x4c\x20\x4c\x42\x4c\x09\x09\x56\x6f\x6c\x75\x6d\x65\x20" \
-"\x6c\x61\x62\x65\x6c\x0a\x09\x2d\x6d\x20\x50\x45\x52\x43\x45\x4e" \
-"\x54\x09\x50\x65\x72\x63\x65\x6e\x74\x20\x6f\x66\x20\x62\x6c\x6f" \
-"\x63\x6b\x73\x20\x74\x6f\x20\x72\x65\x73\x65\x72\x76\x65\x20\x66" \
-"\x6f\x72\x20\x61\x64\x6d\x69\x6e\x0a\x09\x2d\x6e\x09\x09\x44\x72" \
-"\x79\x20\x72\x75\x6e\x00\x5b\x2d\x6d\x20\x4d\x4f\x44\x45\x5d\x20" \
-"\x4e\x41\x4d\x45\x0a\x0a\x43\x72\x65\x61\x74\x65\x20\x6e\x61\x6d" \
-"\x65\x64\x20\x70\x69\x70\x65\x0a\x0a\x09\x2d\x6d\x20\x4d\x4f\x44" \
-"\x45\x09\x4d\x6f\x64\x65\x20\x28\x64\x65\x66\x61\x75\x6c\x74\x20" \
-"\x61\x3d\x72\x77\x29\x00\x5b\x2d\x46\x6e\x5d\x20\x5b\x2d\x62\x20" \
-"\x42\x4c\x4b\x5f\x53\x49\x5a\x45\x5d\x20\x5b\x2d\x69\x20\x49\x4e" \
-"\x4f\x44\x45\x5f\x52\x41\x54\x49\x4f\x5d\x20\x5b\x2d\x49\x20\x49" \
-"\x4e\x4f\x44\x45\x5f\x53\x49\x5a\x45\x5d\x20\x5b\x2d\x6d\x20\x52" \
-"\x45\x53\x45\x52\x56\x45\x44\x5f\x50\x45\x52\x43\x45\x4e\x54\x5d" \
-"\x20\x5b\x2d\x4c\x20\x4c\x41\x42\x45\x4c\x5d\x20\x42\x4c\x4f\x43" \
-"\x4b\x44\x45\x56\x20\x5b\x4b\x42\x59\x54\x45\x53\x5d\x0a\x0a\x09" \
-"\x2d\x62\x20\x42\x4c\x4b\x5f\x53\x49\x5a\x45\x09\x42\x6c\x6f\x63" \
-"\x6b\x20\x73\x69\x7a\x65\x2c\x20\x62\x79\x74\x65\x73\x0a\x09\x2d" \
-"\x46\x09\x09\x46\x6f\x72\x63\x65\x0a\x09\x2d\x69\x20\x52\x41\x54" \
-"\x49\x4f\x09\x4d\x61\x78\x20\x6e\x75\x6d\x62\x65\x72\x20\x6f\x66" \
-"\x20\x66\x69\x6c\x65\x73\x20\x69\x73\x20\x66\x69\x6c\x65\x73\x79" \
-"\x73\x74\x65\x6d\x5f\x73\x69\x7a\x65\x20\x2f\x20\x52\x41\x54\x49" \
-"\x4f\x0a\x09\x2d\x49\x20\x42\x59\x54\x45\x53\x09\x49\x6e\x6f\x64" \
-"\x65\x20\x73\x69\x7a\x65\x20\x28\x6d\x69\x6e\x20\x31\x32\x38\x29" \
-"\x0a\x09\x2d\x4c\x20\x4c\x42\x4c\x09\x09\x56\x6f\x6c\x75\x6d\x65" \
-"\x20\x6c\x61\x62\x65\x6c\x0a\x09\x2d\x6d\x20\x50\x45\x52\x43\x45" \
-"\x4e\x54\x09\x50\x65\x72\x63\x65\x6e\x74\x20\x6f\x66\x20\x62\x6c" \
-"\x6f\x63\x6b\x73\x20\x74\x6f\x20\x72\x65\x73\x65\x72\x76\x65\x20" \
-"\x66\x6f\x72\x20\x61\x64\x6d\x69\x6e\x0a\x09\x2d\x6e\x09\x09\x44" \
-"\x72\x79\x20\x72\x75\x6e\x00\x5b\x2d\x76\x5d\x20\x5b\x2d\x6e\x20" \
-"\x4c\x41\x42\x45\x4c\x5d\x20\x42\x4c\x4f\x43\x4b\x44\x45\x56\x20" \
-"\x5b\x4b\x42\x59\x54\x45\x53\x5d\x0a\x0a\x4d\x61\x6b\x65\x20\x61" \
-"\x20\x46\x41\x54\x33\x32\x20\x66\x69\x6c\x65\x73\x79\x73\x74\x65" \
-"\x6d\x0a\x0a\x09\x2d\x76\x09\x56\x65\x72\x62\x6f\x73\x65\x0a\x09" \
-"\x2d\x6e\x20\x4c\x42\x4c\x09\x56\x6f\x6c\x75\x6d\x65\x20\x6c\x61" \
-"\x62\x65\x6c\x00\x5b\x2d\x6d\x20\x4d\x4f\x44\x45\x5d\x20\x4e\x41" \
-"\x4d\x45\x20\x54\x59\x50\x45\x20\x4d\x41\x4a\x4f\x52\x20\x4d\x49" \
-"\x4e\x4f\x52\x0a\x0a\x43\x72\x65\x61\x74\x65\x20\x61\x20\x73\x70" \
-"\x65\x63\x69\x61\x6c\x20\x66\x69\x6c\x65\x20\x28\x62\x6c\x6f\x63" \
-"\x6b\x2c\x20\x63\x68\x61\x72\x61\x63\x74\x65\x72\x2c\x20\x6f\x72" \
-"\x20\x70\x69\x70\x65\x29\x0a\x0a\x09\x2d\x6d\x20\x4d\x4f\x44\x45" \
-"\x09\x43\x72\x65\x61\x74\x69\x6f\x6e\x20\x6d\x6f\x64\x65\x20\x28" \
-"\x64\x65\x66\x61\x75\x6c\x74\x20\x61\x3d\x72\x77\x29\x0a\x54\x59" \
-"\x50\x45\x3a\x0a\x09\x62\x09\x42\x6c\x6f\x63\x6b\x20\x64\x65\x76" \
-"\x69\x63\x65\x0a\x09\x63\x20\x6f\x72\x20\x75\x09\x43\x68\x61\x72" \
-"\x61\x63\x74\x65\x72\x20\x64\x65\x76\x69\x63\x65\x0a\x09\x70\x09" \
-"\x4e\x61\x6d\x65\x64\x20\x70\x69\x70\x65\x20\x28\x4d\x41\x4a\x4f" \
-"\x52\x20\x61\x6e\x64\x20\x4d\x49\x4e\x4f\x52\x20\x61\x72\x65\x20" \
-"\x69\x67\x6e\x6f\x72\x65\x64\x29\x00\x5b\x2d\x4c\x20\x4c\x42\x4c" \
-"\x5d\x20\x42\x4c\x4f\x43\x4b\x44\x45\x56\x20\x5b\x4b\x42\x59\x54" \
-"\x45\x53\x5d\x0a\x0a\x50\x72\x65\x70\x61\x72\x65\x20\x42\x4c\x4f" \
-"\x43\x4b\x44\x45\x56\x20\x74\x6f\x20\x62\x65\x20\x75\x73\x65\x64" \
-"\x20\x61\x73\x20\x73\x77\x61\x70\x20\x70\x61\x72\x74\x69\x74\x69" \
-"\x6f\x6e\x0a\x0a\x09\x2d\x4c\x20\x4c\x42\x4c\x09\x4c\x61\x62\x65" \
-"\x6c\x00\x5b\x2d\x64\x74\x5d\x20\x5b\x2d\x70\x20\x44\x49\x52\x5d" \
-"\x20\x5b\x54\x45\x4d\x50\x4c\x41\x54\x45\x5d\x0a\x0a\x43\x72\x65" \
-"\x61\x74\x65\x20\x61\x20\x74\x65\x6d\x70\x6f\x72\x61\x72\x79\x20" \
-"\x66\x69\x6c\x65\x20\x77\x69\x74\x68\x20\x6e\x61\x6d\x65\x20\x62" \
-"\x61\x73\x65\x64\x20\x6f\x6e\x20\x54\x45\x4d\x50\x4c\x41\x54\x45" \
-"\x20\x61\x6e\x64\x20\x70\x72\x69\x6e\x74\x20\x69\x74\x73\x20\x6e" \
-"\x61\x6d\x65\x2e\x0a\x54\x45\x4d\x50\x4c\x41\x54\x45\x20\x6d\x75" \
-"\x73\x74\x20\x65\x6e\x64\x20\x77\x69\x74\x68\x20\x58\x58\x58\x58" \
-"\x58\x58\x20\x28\x65\x2e\x67\x2e\x20\x5b\x2f\x64\x69\x72\x2f\x5d" \
-"\x6e\x61\x6d\x65\x58\x58\x58\x58\x58\x58\x29\x2e\x0a\x57\x69\x74" \
-"\x68\x6f\x75\x74\x20\x54\x45\x4d\x50\x4c\x41\x54\x45\x2c\x20\x2d" \
-"\x74\x20\x74\x6d\x70\x2e\x58\x58\x58\x58\x58\x58\x20\x69\x73\x20" \
-"\x61\x73\x73\x75\x6d\x65\x64\x2e\x0a\x0a\x09\x2d\x64\x09\x4d\x61" \
-"\x6b\x65\x20\x64\x69\x72\x65\x63\x74\x6f\x72\x79\x2c\x20\x6e\x6f" \
-"\x74\x20\x66\x69\x6c\x65\x0a\x09\x2d\x71\x09\x46\x61\x69\x6c\x20" \
-"\x73\x69\x6c\x65\x6e\x74\x6c\x79\x20\x6f\x6e\x20\x65\x72\x72\x6f" \
-"\x72\x73\x0a\x09\x2d\x74\x09\x50\x72\x65\x70\x65\x6e\x64\x20\x62" \
-"\x61\x73\x65\x20\x64\x69\x72\x65\x63\x74\x6f\x72\x79\x20\x6e\x61" \
-"\x6d\x65\x20\x74\x6f\x20\x54\x45\x4d\x50\x4c\x41\x54\x45\x0a\x09" \
-"\x2d\x70\x20\x44\x49\x52\x09\x55\x73\x65\x20\x44\x49\x52\x20\x61" \
-"\x73\x20\x61\x20\x62\x61\x73\x65\x20\x64\x69\x72\x65\x63\x74\x6f" \
-"\x72\x79\x20\x28\x69\x6d\x70\x6c\x69\x65\x73\x20\x2d\x74\x29\x0a" \
-"\x09\x2d\x75\x09\x44\x6f\x20\x6e\x6f\x74\x20\x63\x72\x65\x61\x74" \
-"\x65\x20\x61\x6e\x79\x74\x68\x69\x6e\x67\x3b\x20\x70\x72\x69\x6e" \
-"\x74\x20\x61\x20\x6e\x61\x6d\x65\x0a\x0a\x42\x61\x73\x65\x20\x64" \
-"\x69\x72\x65\x63\x74\x6f\x72\x79\x20\x69\x73\x3a\x20\x2d\x70\x20" \
-"\x44\x49\x52\x2c\x20\x65\x6c\x73\x65\x20\x24\x54\x4d\x50\x44\x49" \
-"\x52\x2c\x20\x65\x6c\x73\x65\x20\x2f\x74\x6d\x70\x00\x5b\x2d\x61" \
-"\x64\x6c\x70\x30\x5d\x20\x5b\x2d\x46\x20\x6b\x65\x79\x77\x6f\x72" \
-"\x64\x5d\x20\x4d\x4f\x44\x55\x4c\x45\x0a\x0a\x09\x2d\x61\x09\x09" \
-"\x53\x68\x6f\x72\x74\x63\x75\x74\x20\x66\x6f\x72\x20\x27\x2d\x46" \
-"\x20\x61\x75\x74\x68\x6f\x72\x27\x0a\x09\x2d\x64\x09\x09\x53\x68" \
-"\x6f\x72\x74\x63\x75\x74\x20\x66\x6f\x72\x20\x27\x2d\x46\x20\x64" \
-"\x65\x73\x63\x72\x69\x70\x74\x69\x6f\x6e\x27\x0a\x09\x2d\x6c\x09" \
-"\x09\x53\x68\x6f\x72\x74\x63\x75\x74\x20\x66\x6f\x72\x20\x27\x2d" \
-"\x46\x20\x6c\x69\x63\x65\x6e\x73\x65\x27\x0a\x09\x2d\x70\x09\x09" \
-"\x53\x68\x6f\x72\x74\x63\x75\x74\x20\x66\x6f\x72\x20\x27\x2d\x46" \
-"\x20\x70\x61\x72\x6d\x27\x0a\x09\x2d\x46\x20\x6b\x65\x79\x77\x6f" \
-"\x72\x64\x09\x4b\x65\x79\x77\x6f\x72\x64\x20\x74\x6f\x20\x6c\x6f" \
-"\x6f\x6b\x20\x66\x6f\x72\x0a\x09\x2d\x30\x09\x09\x53\x65\x70\x61" \
-"\x72\x61\x74\x65\x20\x6f\x75\x74\x70\x75\x74\x20\x77\x69\x74\x68" \
-"\x20\x4e\x55\x4c\x73\x00\x5b\x2d\x71\x66\x77\x72\x73\x76\x5d\x20" \
-"\x4d\x4f\x44\x55\x4c\x45\x20\x5b\x73\x79\x6d\x62\x6f\x6c\x3d\x76" \
-"\x61\x6c\x75\x65\x5d\x2e\x2e\x2e\x0a\x0a\x09\x2d\x72\x09\x52\x65" \
-"\x6d\x6f\x76\x65\x20\x4d\x4f\x44\x55\x4c\x45\x20\x28\x73\x74\x61" \
-"\x63\x6b\x73\x29\x20\x6f\x72\x20\x64\x6f\x20\x61\x75\x74\x6f\x63" \
-"\x6c\x65\x61\x6e\x0a\x09\x2d\x71\x09\x51\x75\x69\x65\x74\x0a\x09" \
-"\x2d\x76\x09\x56\x65\x72\x62\x6f\x73\x65\x0a\x09\x2d\x66\x09\x46" \
-"\x6f\x72\x63\x65\x0a\x09\x2d\x77\x09\x57\x61\x69\x74\x20\x66\x6f" \
-"\x72\x20\x75\x6e\x6c\x6f\x61\x64\x0a\x09\x2d\x73\x09\x52\x65\x70" \
-"\x6f\x72\x74\x20\x76\x69\x61\x20\x73\x79\x73\x6c\x6f\x67\x20\x69" \
-"\x6e\x73\x74\x65\x61\x64\x20\x6f\x66\x20\x73\x74\x64\x65\x72\x72" \
-"\x00\x5b\x46\x49\x4c\x45\x5d\x2e\x2e\x2e\x0a\x0a\x56\x69\x65\x77" \
-"\x20\x46\x49\x4c\x45\x20\x28\x6f\x72\x20\x73\x74\x64\x69\x6e\x29" \
-"\x20\x6f\x6e\x65\x20\x73\x63\x72\x65\x65\x6e\x66\x75\x6c\x20\x61" \
-"\x74\x20\x61\x20\x74\x69\x6d\x65\x00\x5b\x4f\x50\x54\x49\x4f\x4e" \
-"\x53\x5d\x20\x5b\x2d\x6f\x20\x4f\x50\x54\x53\x5d\x20\x44\x45\x56" \
-"\x49\x43\x45\x20\x4e\x4f\x44\x45\x0a\x0a\x4d\x6f\x75\x6e\x74\x20" \
-"\x61\x20\x66\x69\x6c\x65\x73\x79\x73\x74\x65\x6d\x2e\x20\x46\x69" \
-"\x6c\x65\x73\x79\x73\x74\x65\x6d\x20\x61\x75\x74\x6f\x64\x65\x74" \
-"\x65\x63\x74\x69\x6f\x6e\x20\x72\x65\x71\x75\x69\x72\x65\x73\x20" \
-"\x2f\x70\x72\x6f\x63\x2e\x0a\x0a\x09\x2d\x61\x09\x09\x4d\x6f\x75" \
-"\x6e\x74\x20\x61\x6c\x6c\x20\x66\x69\x6c\x65\x73\x79\x73\x74\x65" \
-"\x6d\x73\x20\x69\x6e\x20\x66\x73\x74\x61\x62\x0a\x09\x2d\x66\x09" \
-"\x09\x44\x72\x79\x20\x72\x75\x6e\x0a\x09\x2d\x76\x09\x09\x56\x65" \
-"\x72\x62\x6f\x73\x65\x0a\x09\x2d\x72\x09\x09\x52\x65\x61\x64\x2d" \
-"\x6f\x6e\x6c\x79\x20\x6d\x6f\x75\x6e\x74\x0a\x09\x2d\x77\x09\x09" \
-"\x52\x65\x61\x64\x2d\x77\x72\x69\x74\x65\x20\x6d\x6f\x75\x6e\x74" \
-"\x20\x28\x64\x65\x66\x61\x75\x6c\x74\x29\x0a\x09\x2d\x74\x20\x46" \
-"\x53\x54\x59\x50\x45\x5b\x2c\x2e\x2e\x2e\x5d\x09\x46\x69\x6c\x65" \
-"\x73\x79\x73\x74\x65\x6d\x20\x74\x79\x70\x65\x28\x73\x29\x0a\x09" \
-"\x2d\x4f\x20\x4f\x50\x54\x09\x09\x4d\x6f\x75\x6e\x74\x20\x6f\x6e" \
-"\x6c\x79\x20\x66\x69\x6c\x65\x73\x79\x73\x74\x65\x6d\x73\x20\x77" \
-"\x69\x74\x68\x20\x6f\x70\x74\x69\x6f\x6e\x20\x4f\x50\x54\x20\x28" \
-"\x2d\x61\x20\x6f\x6e\x6c\x79\x29\x0a\x2d\x6f\x20\x4f\x50\x54\x3a" \
-"\x0a\x09\x6c\x6f\x6f\x70\x09\x09\x49\x67\x6e\x6f\x72\x65\x64\x20" \
-"\x28\x6c\x6f\x6f\x70\x20\x64\x65\x76\x69\x63\x65\x73\x20\x61\x72" \
-"\x65\x20\x61\x75\x74\x6f\x64\x65\x74\x65\x63\x74\x65\x64\x29\x0a" \
-"\x09\x5b\x61\x5d\x73\x79\x6e\x63\x09\x09\x57\x72\x69\x74\x65\x73" \
-"\x20\x61\x72\x65\x20\x5b\x61\x5d\x73\x79\x6e\x63\x68\x72\x6f\x6e" \
-"\x6f\x75\x73\x0a\x09\x5b\x6e\x6f\x5d\x61\x74\x69\x6d\x65\x09\x44" \
-"\x69\x73\x61\x62\x6c\x65\x2f\x65\x6e\x61\x62\x6c\x65\x20\x75\x70" \
-"\x64\x61\x74\x65\x73\x20\x74\x6f\x20\x69\x6e\x6f\x64\x65\x20\x61" \
-"\x63\x63\x65\x73\x73\x20\x74\x69\x6d\x65\x73\x0a\x09\x5b\x6e\x6f" \
-"\x5d\x64\x69\x72\x61\x74\x69\x6d\x65\x09\x44\x69\x73\x61\x62\x6c" \
-"\x65\x2f\x65\x6e\x61\x62\x6c\x65\x20\x61\x74\x69\x6d\x65\x20\x75" \
-"\x70\x64\x61\x74\x65\x73\x20\x74\x6f\x20\x64\x69\x72\x65\x63\x74" \
-"\x6f\x72\x69\x65\x73\x0a\x09\x5b\x6e\x6f\x5d\x72\x65\x6c\x61\x74" \
-"\x69\x6d\x65\x09\x44\x69\x73\x61\x62\x6c\x65\x2f\x65\x6e\x61\x62" \
-"\x6c\x65\x20\x61\x74\x69\x6d\x65\x20\x75\x70\x64\x61\x74\x65\x73" \
-"\x20\x72\x65\x6c\x61\x74\x69\x76\x65\x20\x74\x6f\x20\x6d\x6f\x64" \
-"\x69\x66\x69\x63\x61\x74\x69\x6f\x6e\x20\x74\x69\x6d\x65\x0a\x09" \
-"\x5b\x6e\x6f\x5d\x64\x65\x76\x09\x09\x28\x44\x69\x73\x29\x61\x6c" \
-"\x6c\x6f\x77\x20\x75\x73\x65\x20\x6f\x66\x20\x73\x70\x65\x63\x69" \
-"\x61\x6c\x20\x64\x65\x76\x69\x63\x65\x20\x66\x69\x6c\x65\x73\x0a" \
-"\x09\x5b\x6e\x6f\x5d\x65\x78\x65\x63\x09\x28\x44\x69\x73\x29\x61" \
-"\x6c\x6c\x6f\x77\x20\x75\x73\x65\x20\x6f\x66\x20\x65\x78\x65\x63" \
-"\x75\x74\x61\x62\x6c\x65\x20\x66\x69\x6c\x65\x73\x0a\x09\x5b\x6e" \
-"\x6f\x5d\x73\x75\x69\x64\x09\x28\x44\x69\x73\x29\x61\x6c\x6c\x6f" \
-"\x77\x20\x73\x65\x74\x2d\x75\x73\x65\x72\x2d\x69\x64\x2d\x72\x6f" \
-"\x6f\x74\x20\x70\x72\x6f\x67\x72\x61\x6d\x73\x0a\x09\x5b\x72\x5d" \
-"\x73\x68\x61\x72\x65\x64\x09\x43\x6f\x6e\x76\x65\x72\x74\x20\x5b" \
-"\x72\x65\x63\x75\x72\x73\x69\x76\x65\x6c\x79\x5d\x20\x74\x6f\x20" \
-"\x61\x20\x73\x68\x61\x72\x65\x64\x20\x73\x75\x62\x74\x72\x65\x65" \
-"\x0a\x09\x5b\x72\x5d\x73\x6c\x61\x76\x65\x09\x43\x6f\x6e\x76\x65" \
-"\x72\x74\x20\x5b\x72\x65\x63\x75\x72\x73\x69\x76\x65\x6c\x79\x5d" \
-"\x20\x74\x6f\x20\x61\x20\x73\x6c\x61\x76\x65\x20\x73\x75\x62\x74" \
-"\x72\x65\x65\x0a\x09\x5b\x72\x5d\x70\x72\x69\x76\x61\x74\x65\x09" \
-"\x43\x6f\x6e\x76\x65\x72\x74\x20\x5b\x72\x65\x63\x75\x72\x73\x69" \
-"\x76\x65\x6c\x79\x5d\x20\x74\x6f\x20\x61\x20\x70\x72\x69\x76\x61" \
-"\x74\x65\x20\x73\x75\x62\x74\x72\x65\x65\x0a\x09\x5b\x75\x6e\x5d" \
-"\x62\x69\x6e\x64\x61\x62\x6c\x65\x09\x4d\x61\x6b\x65\x20\x6d\x6f" \
-"\x75\x6e\x74\x20\x70\x6f\x69\x6e\x74\x20\x5b\x75\x6e\x5d\x61\x62" \
-"\x6c\x65\x20\x74\x6f\x20\x62\x65\x20\x62\x69\x6e\x64\x20\x6d\x6f" \
-"\x75\x6e\x74\x65\x64\x0a\x09\x5b\x72\x5d\x62\x69\x6e\x64\x09\x09" \
-"\x42\x69\x6e\x64\x20\x61\x20\x66\x69\x6c\x65\x20\x6f\x72\x20\x64" \
-"\x69\x72\x65\x63\x74\x6f\x72\x79\x20\x5b\x72\x65\x63\x75\x72\x73" \
-"\x69\x76\x65\x6c\x79\x5d\x20\x74\x6f\x20\x61\x6e\x6f\x74\x68\x65" \
-"\x72\x20\x6c\x6f\x63\x61\x74\x69\x6f\x6e\x0a\x09\x6d\x6f\x76\x65" \
-"\x09\x09\x52\x65\x6c\x6f\x63\x61\x74\x65\x20\x61\x6e\x20\x65\x78" \
-"\x69\x73\x74\x69\x6e\x67\x20\x6d\x6f\x75\x6e\x74\x20\x70\x6f\x69" \
-"\x6e\x74\x0a\x09\x72\x65\x6d\x6f\x75\x6e\x74\x09\x09\x52\x65\x6d" \
-"\x6f\x75\x6e\x74\x20\x61\x20\x6d\x6f\x75\x6e\x74\x65\x64\x20\x66" \
-"\x69\x6c\x65\x73\x79\x73\x74\x65\x6d\x2c\x20\x63\x68\x61\x6e\x67" \
-"\x69\x6e\x67\x20\x66\x6c\x61\x67\x73\x0a\x09\x72\x6f\x2f\x72\x77" \
-"\x09\x09\x53\x61\x6d\x65\x20\x61\x73\x20\x2d\x72\x2f\x2d\x77\x0a" \
-"\x0a\x54\x68\x65\x72\x65\x20\x61\x72\x65\x20\x66\x69\x6c\x65\x73" \
-"\x79\x73\x74\x65\x6d\x2d\x73\x70\x65\x63\x69\x66\x69\x63\x20\x2d" \
-"\x6f\x20\x66\x6c\x61\x67\x73\x2e\x00\x5b\x2d\x71\x5d\x20\x3c\x5b" \
-"\x2d\x64\x6e\x5d\x20\x44\x49\x52\x20\x7c\x20\x2d\x78\x20\x44\x45" \
-"\x56\x49\x43\x45\x3e\x0a\x0a\x43\x68\x65\x63\x6b\x20\x69\x66\x20" \
-"\x74\x68\x65\x20\x64\x69\x72\x65\x63\x74\x6f\x72\x79\x20\x69\x73" \
-"\x20\x61\x20\x6d\x6f\x75\x6e\x74\x70\x6f\x69\x6e\x74\x0a\x0a\x09" \
-"\x2d\x71\x09\x51\x75\x69\x65\x74\x0a\x09\x2d\x64\x09\x50\x72\x69" \
-"\x6e\x74\x20\x6d\x61\x6a\x6f\x72\x2f\x6d\x69\x6e\x6f\x72\x20\x64" \
-"\x65\x76\x69\x63\x65\x20\x6e\x75\x6d\x62\x65\x72\x20\x6f\x66\x20" \
-"\x74\x68\x65\x20\x66\x69\x6c\x65\x73\x79\x73\x74\x65\x6d\x0a\x09" \
-"\x2d\x6e\x09\x50\x72\x69\x6e\x74\x20\x64\x65\x76\x69\x63\x65\x20" \
-"\x6e\x61\x6d\x65\x20\x6f\x66\x20\x74\x68\x65\x20\x66\x69\x6c\x65" \
-"\x73\x79\x73\x74\x65\x6d\x0a\x09\x2d\x78\x09\x50\x72\x69\x6e\x74" \
-"\x20\x6d\x61\x6a\x6f\x72\x2f\x6d\x69\x6e\x6f\x72\x20\x64\x65\x76" \
-"\x69\x63\x65\x20\x6e\x75\x6d\x62\x65\x72\x20\x6f\x66\x20\x74\x68" \
-"\x65\x20\x62\x6c\x6f\x63\x6b\x64\x65\x76\x69\x63\x65\x00\x5b\x2d" \
-"\x41\x5d\x20\x5b\x2d\x49\x20\x53\x55\x4d\x7c\x43\x50\x55\x7c\x41" \
-"\x4c\x4c\x7c\x53\x43\x50\x55\x5d\x20\x5b\x2d\x75\x5d\x20\x5b\x2d" \
-"\x50\x20\x6e\x75\x6d\x7c\x41\x4c\x4c\x5d\x20\x5b\x49\x4e\x54\x45" \
-"\x52\x56\x41\x4c\x20\x5b\x43\x4f\x55\x4e\x54\x5d\x5d\x0a\x0a\x50" \
-"\x65\x72\x2d\x70\x72\x6f\x63\x65\x73\x73\x6f\x72\x20\x73\x74\x61" \
-"\x74\x69\x73\x74\x69\x63\x73\x0a\x0a\x09\x2d\x41\x09\x09\x09\x53" \
-"\x61\x6d\x65\x20\x61\x73\x20\x2d\x49\x20\x41\x4c\x4c\x20\x2d\x75" \
-"\x20\x2d\x50\x20\x41\x4c\x4c\x0a\x09\x2d\x49\x20\x53\x55\x4d\x7c" \
-"\x43\x50\x55\x7c\x41\x4c\x4c\x7c\x53\x43\x50\x55\x09\x52\x65\x70" \
-"\x6f\x72\x74\x20\x69\x6e\x74\x65\x72\x72\x75\x70\x74\x20\x73\x74" \
-"\x61\x74\x69\x73\x74\x69\x63\x73\x0a\x09\x2d\x50\x20\x6e\x75\x6d" \
-"\x7c\x41\x4c\x4c\x09\x09\x50\x72\x6f\x63\x65\x73\x73\x6f\x72\x20" \
-"\x74\x6f\x20\x6d\x6f\x6e\x69\x74\x6f\x72\x0a\x09\x2d\x75\x09\x09" \
-"\x09\x52\x65\x70\x6f\x72\x74\x20\x43\x50\x55\x20\x75\x74\x69\x6c" \
-"\x69\x7a\x61\x74\x69\x6f\x6e\x00\x5b\x2d\x66\x69\x6e\x5d\x20\x53" \
-"\x4f\x55\x52\x43\x45\x20\x44\x45\x53\x54\x0a\x6f\x72\x3a\x20\x6d" \
-"\x76\x20\x5b\x2d\x66\x69\x6e\x5d\x20\x53\x4f\x55\x52\x43\x45\x2e" \
-"\x2e\x2e\x20\x44\x49\x52\x45\x43\x54\x4f\x52\x59\x0a\x0a\x52\x65" \
-"\x6e\x61\x6d\x65\x20\x53\x4f\x55\x52\x43\x45\x20\x74\x6f\x20\x44" \
-"\x45\x53\x54\x2c\x20\x6f\x72\x20\x6d\x6f\x76\x65\x20\x53\x4f\x55" \
-"\x52\x43\x45\x28\x73\x29\x20\x74\x6f\x20\x44\x49\x52\x45\x43\x54" \
-"\x4f\x52\x59\x0a\x0a\x09\x2d\x66\x09\x44\x6f\x6e\x27\x74\x20\x70" \
-"\x72\x6f\x6d\x70\x74\x20\x62\x65\x66\x6f\x72\x65\x20\x6f\x76\x65" \
-"\x72\x77\x72\x69\x74\x69\x6e\x67\x0a\x09\x2d\x69\x09\x49\x6e\x74" \
-"\x65\x72\x61\x63\x74\x69\x76\x65\x2c\x20\x70\x72\x6f\x6d\x70\x74" \
-"\x20\x62\x65\x66\x6f\x72\x65\x20\x6f\x76\x65\x72\x77\x72\x69\x74" \
-"\x65\x0a\x09\x2d\x6e\x09\x44\x6f\x6e\x27\x74\x20\x6f\x76\x65\x72" \
-"\x77\x72\x69\x74\x65\x20\x61\x6e\x20\x65\x78\x69\x73\x74\x69\x6e" \
-"\x67\x20\x66\x69\x6c\x65\x00\x5b\x2d\x6f\x5d\x20\x5b\x2d\x62\x5d" \
-"\x20\x5b\x2d\x73\x20\x41\x44\x44\x52\x5d\x20\x5b\x2d\x66\x20\x46" \
-"\x49\x4c\x45\x5d\x20\x4d\x54\x44\x5f\x44\x45\x56\x49\x43\x45\x0a" \
-"\x0a\x44\x75\x6d\x70\x20\x74\x68\x65\x20\x73\x70\x65\x63\x69\x66" \
-"\x69\x65\x64\x20\x4d\x54\x44\x20\x64\x65\x76\x69\x63\x65\x0a\x0a" \
-"\x09\x2d\x6f\x09\x44\x75\x6d\x70\x20\x6f\x6f\x62\x20\x64\x61\x74" \
-"\x61\x0a\x09\x2d\x62\x09\x4f\x6d\x69\x74\x20\x62\x61\x64\x20\x62" \
-"\x6c\x6f\x63\x6b\x20\x66\x72\x6f\x6d\x20\x74\x68\x65\x20\x64\x75" \
-"\x6d\x70\x0a\x09\x2d\x73\x20\x41\x44\x44\x52\x09\x53\x74\x61\x72" \
-"\x74\x20\x61\x64\x64\x72\x65\x73\x73\x0a\x09\x2d\x6c\x20\x4c\x45" \
-"\x4e\x09\x4c\x65\x6e\x67\x74\x68\x0a\x09\x2d\x66\x20\x46\x49\x4c" \
-"\x45\x09\x44\x75\x6d\x70\x20\x74\x6f\x20\x66\x69\x6c\x65\x20\x28" \
-"\x27\x2d\x27\x20\x66\x6f\x72\x20\x73\x74\x64\x6f\x75\x74\x29\x00" \
-"\x5b\x2d\x70\x5d\x20\x5b\x2d\x73\x20\x41\x44\x44\x52\x5d\x20\x4d" \
-"\x54\x44\x5f\x44\x45\x56\x49\x43\x45\x20\x5b\x46\x49\x4c\x45\x5d" \
-"\x0a\x0a\x57\x72\x69\x74\x65\x20\x74\x6f\x20\x74\x68\x65\x20\x73" \
-"\x70\x65\x63\x69\x66\x69\x65\x64\x20\x4d\x54\x44\x20\x64\x65\x76" \
-"\x69\x63\x65\x0a\x0a\x09\x2d\x70\x09\x50\x61\x64\x20\x74\x6f\x20" \
-"\x70\x61\x67\x65\x20\x73\x69\x7a\x65\x0a\x09\x2d\x73\x20\x41\x44" \
-"\x44\x52\x09\x53\x74\x61\x72\x74\x20\x61\x64\x64\x72\x65\x73\x73" \
-"\x00\x48\x4f\x53\x54\x20\x50\x4f\x52\x54\x20\x42\x4c\x4f\x43\x4b" \
-"\x44\x45\x56\x0a\x0a\x43\x6f\x6e\x6e\x65\x63\x74\x20\x74\x6f\x20" \
-"\x48\x4f\x53\x54\x20\x61\x6e\x64\x20\x70\x72\x6f\x76\x69\x64\x65" \
-"\x20\x61\x20\x6e\x65\x74\x77\x6f\x72\x6b\x20\x62\x6c\x6f\x63\x6b" \
-"\x20\x64\x65\x76\x69\x63\x65\x20\x6f\x6e\x20\x42\x4c\x4f\x43\x4b" \
-"\x44\x45\x56\x00\x5b\x2d\x69\x4e\x5d\x20\x5b\x2d\x77\x4e\x5d\x20" \
-"\x5b\x2d\x6c\x5d\x20\x5b\x2d\x70\x20\x50\x4f\x52\x54\x5d\x20\x5b" \
-"\x2d\x66\x20\x46\x49\x4c\x45\x7c\x49\x50\x41\x44\x44\x52\x20\x50" \
-"\x4f\x52\x54\x5d\x20\x5b\x2d\x65\x20\x50\x52\x4f\x47\x5d\x0a\x0a" \
-"\x4f\x70\x65\x6e\x20\x61\x20\x70\x69\x70\x65\x20\x74\x6f\x20\x49" \
-"\x50\x3a\x50\x4f\x52\x54\x20\x6f\x72\x20\x46\x49\x4c\x45\x0a\x0a" \
-"\x09\x2d\x65\x20\x50\x52\x4f\x47\x09\x52\x75\x6e\x20\x50\x52\x4f" \
-"\x47\x20\x61\x66\x74\x65\x72\x20\x63\x6f\x6e\x6e\x65\x63\x74\x0a" \
-"\x09\x2d\x6c\x09\x4c\x69\x73\x74\x65\x6e\x20\x6d\x6f\x64\x65\x2c" \
-"\x20\x66\x6f\x72\x20\x69\x6e\x62\x6f\x75\x6e\x64\x20\x63\x6f\x6e" \
-"\x6e\x65\x63\x74\x73\x0a\x09\x09\x28\x75\x73\x65\x20\x2d\x6c\x20" \
-"\x74\x77\x69\x63\x65\x20\x77\x69\x74\x68\x20\x2d\x65\x20\x66\x6f" \
-"\x72\x20\x70\x65\x72\x73\x69\x73\x74\x65\x6e\x74\x20\x73\x65\x72" \
-"\x76\x65\x72\x29\x0a\x09\x2d\x70\x20\x50\x4f\x52\x54\x09\x4c\x6f" \
-"\x63\x61\x6c\x20\x70\x6f\x72\x74\x0a\x09\x2d\x77\x20\x53\x45\x43" \
-"\x09\x54\x69\x6d\x65\x6f\x75\x74\x20\x66\x6f\x72\x20\x63\x6f\x6e" \
-"\x6e\x65\x63\x74\x0a\x09\x2d\x69\x20\x53\x45\x43\x09\x44\x65\x6c" \
-"\x61\x79\x20\x69\x6e\x74\x65\x72\x76\x61\x6c\x20\x66\x6f\x72\x20" \
-"\x6c\x69\x6e\x65\x73\x20\x73\x65\x6e\x74\x0a\x09\x2d\x66\x20\x46" \
-"\x49\x4c\x45\x09\x55\x73\x65\x20\x66\x69\x6c\x65\x20\x28\x61\x6c" \
-"\x61\x20\x2f\x64\x65\x76\x2f\x74\x74\x79\x53\x30\x29\x20\x69\x6e" \
-"\x73\x74\x65\x61\x64\x20\x6f\x66\x20\x6e\x65\x74\x77\x6f\x72\x6b" \
-"\x00\x5b\x2d\x72\x61\x6c\x5d\x20\x5b\x2d\x74\x75\x77\x78\x5d\x20" \
-"\x5b\x2d\x65\x6e\x57\x70\x5d\x0a\x0a\x44\x69\x73\x70\x6c\x61\x79" \
-"\x20\x6e\x65\x74\x77\x6f\x72\x6b\x69\x6e\x67\x20\x69\x6e\x66\x6f" \
-"\x72\x6d\x61\x74\x69\x6f\x6e\x0a\x0a\x09\x2d\x72\x09\x52\x6f\x75" \
-"\x74\x69\x6e\x67\x20\x74\x61\x62\x6c\x65\x0a\x09\x2d\x61\x09\x41" \
-"\x6c\x6c\x20\x73\x6f\x63\x6b\x65\x74\x73\x0a\x09\x2d\x6c\x09\x4c" \
-"\x69\x73\x74\x65\x6e\x69\x6e\x67\x20\x73\x6f\x63\x6b\x65\x74\x73" \
-"\x0a\x09\x09\x45\x6c\x73\x65\x3a\x20\x63\x6f\x6e\x6e\x65\x63\x74" \
-"\x65\x64\x20\x73\x6f\x63\x6b\x65\x74\x73\x0a\x09\x2d\x74\x09\x54" \
-"\x43\x50\x20\x73\x6f\x63\x6b\x65\x74\x73\x0a\x09\x2d\x75\x09\x55" \
-"\x44\x50\x20\x73\x6f\x63\x6b\x65\x74\x73\x0a\x09\x2d\x77\x09\x52" \
-"\x61\x77\x20\x73\x6f\x63\x6b\x65\x74\x73\x0a\x09\x2d\x78\x09\x55" \
-"\x6e\x69\x78\x20\x73\x6f\x63\x6b\x65\x74\x73\x0a\x09\x09\x45\x6c" \
-"\x73\x65\x3a\x20\x61\x6c\x6c\x20\x73\x6f\x63\x6b\x65\x74\x20\x74" \
-"\x79\x70\x65\x73\x0a\x09\x2d\x65\x09\x4f\x74\x68\x65\x72\x2f\x6d" \
-"\x6f\x72\x65\x20\x69\x6e\x66\x6f\x72\x6d\x61\x74\x69\x6f\x6e\x0a" \
-"\x09\x2d\x6e\x09\x44\x6f\x6e\x27\x74\x20\x72\x65\x73\x6f\x6c\x76" \
-"\x65\x20\x6e\x61\x6d\x65\x73\x0a\x09\x2d\x57\x09\x57\x69\x64\x65" \
-"\x20\x64\x69\x73\x70\x6c\x61\x79\x0a\x09\x2d\x70\x09\x53\x68\x6f" \
-"\x77\x20\x50\x49\x44\x2f\x70\x72\x6f\x67\x72\x61\x6d\x20\x6e\x61" \
-"\x6d\x65\x20\x66\x6f\x72\x20\x73\x6f\x63\x6b\x65\x74\x73\x00\x5b" \
-"\x2d\x6e\x20\x41\x44\x4a\x55\x53\x54\x5d\x20\x5b\x50\x52\x4f\x47" \
-"\x20\x41\x52\x47\x53\x5d\x0a\x0a\x43\x68\x61\x6e\x67\x65\x20\x73" \
-"\x63\x68\x65\x64\x75\x6c\x69\x6e\x67\x20\x70\x72\x69\x6f\x72\x69" \
-"\x74\x79\x2c\x20\x72\x75\x6e\x20\x50\x52\x4f\x47\x0a\x0a\x09\x2d" \
-"\x6e\x20\x41\x44\x4a\x55\x53\x54\x09\x41\x64\x6a\x75\x73\x74\x20" \
-"\x70\x72\x69\x6f\x72\x69\x74\x79\x20\x62\x79\x20\x41\x44\x4a\x55" \
-"\x53\x54\x00\x50\x52\x4f\x47\x20\x41\x52\x47\x53\x0a\x0a\x52\x75" \
-"\x6e\x20\x50\x52\x4f\x47\x20\x69\x6d\x6d\x75\x6e\x65\x20\x74\x6f" \
-"\x20\x68\x61\x6e\x67\x75\x70\x73\x2c\x20\x77\x69\x74\x68\x20\x6f" \
-"\x75\x74\x70\x75\x74\x20\x74\x6f\x20\x61\x20\x6e\x6f\x6e\x2d\x74" \
-"\x74\x79\x00\x5b\x48\x4f\x53\x54\x5d\x20\x5b\x53\x45\x52\x56\x45" \
-"\x52\x5d\x0a\x0a\x51\x75\x65\x72\x79\x20\x74\x68\x65\x20\x6e\x61" \
-"\x6d\x65\x73\x65\x72\x76\x65\x72\x20\x66\x6f\x72\x20\x74\x68\x65" \
-"\x20\x49\x50\x20\x61\x64\x64\x72\x65\x73\x73\x20\x6f\x66\x20\x74" \
-"\x68\x65\x20\x67\x69\x76\x65\x6e\x20\x48\x4f\x53\x54\x0a\x6f\x70" \
-"\x74\x69\x6f\x6e\x61\x6c\x6c\x79\x20\x75\x73\x69\x6e\x67\x20\x61" \
-"\x20\x73\x70\x65\x63\x69\x66\x69\x65\x64\x20\x44\x4e\x53\x20\x73" \
-"\x65\x72\x76\x65\x72\x00\x5b\x2d\x64\x6e\x71\x4e\x77\x5d\x20\x5b" \
-"\x2d\x53\x20\x50\x52\x4f\x47\x5d\x20\x5b\x2d\x70\x20\x50\x45\x45" \
-"\x52\x5d\x2e\x2e\x2e\x0a\x0a\x4e\x54\x50\x20\x63\x6c\x69\x65\x6e" \
-"\x74\x2f\x73\x65\x72\x76\x65\x72\x0a\x0a\x09\x2d\x64\x09\x56\x65" \
-"\x72\x62\x6f\x73\x65\x0a\x09\x2d\x6e\x09\x44\x6f\x20\x6e\x6f\x74" \
-"\x20\x64\x61\x65\x6d\x6f\x6e\x69\x7a\x65\x0a\x09\x2d\x71\x09\x51" \
-"\x75\x69\x74\x20\x61\x66\x74\x65\x72\x20\x63\x6c\x6f\x63\x6b\x20" \
-"\x69\x73\x20\x73\x65\x74\x0a\x09\x2d\x4e\x09\x52\x75\x6e\x20\x61" \
-"\x74\x20\x68\x69\x67\x68\x20\x70\x72\x69\x6f\x72\x69\x74\x79\x0a" \
-"\x09\x2d\x77\x09\x44\x6f\x20\x6e\x6f\x74\x20\x73\x65\x74\x20\x74" \
-"\x69\x6d\x65\x20\x28\x6f\x6e\x6c\x79\x20\x71\x75\x65\x72\x79\x20" \
-"\x70\x65\x65\x72\x73\x29\x2c\x20\x69\x6d\x70\x6c\x69\x65\x73\x20" \
-"\x2d\x6e\x0a\x09\x2d\x53\x20\x50\x52\x4f\x47\x09\x52\x75\x6e\x20" \
-"\x50\x52\x4f\x47\x20\x61\x66\x74\x65\x72\x20\x73\x74\x65\x70\x70" \
-"\x69\x6e\x67\x20\x74\x69\x6d\x65\x2c\x20\x73\x74\x72\x61\x74\x75" \
-"\x6d\x20\x63\x68\x61\x6e\x67\x65\x2c\x20\x61\x6e\x64\x20\x65\x76" \
-"\x65\x72\x79\x20\x31\x31\x20\x6d\x69\x6e\x73\x0a\x09\x2d\x70\x20" \
-"\x50\x45\x45\x52\x09\x4f\x62\x74\x61\x69\x6e\x20\x74\x69\x6d\x65" \
-"\x20\x66\x72\x6f\x6d\x20\x50\x45\x45\x52\x20\x28\x6d\x61\x79\x20" \
-"\x62\x65\x20\x72\x65\x70\x65\x61\x74\x65\x64\x29\x00\x5b\x2d\x61" \
-"\x62\x63\x64\x66\x68\x69\x6c\x6f\x76\x78\x73\x5d\x20\x5b\x2d\x74" \
-"\x20\x54\x59\x50\x45\x5d\x20\x5b\x2d\x41\x20\x52\x41\x44\x49\x58" \
-"\x5d\x20\x5b\x2d\x4e\x20\x53\x49\x5a\x45\x5d\x20\x5b\x2d\x6a\x20" \
-"\x53\x4b\x49\x50\x5d\x20\x5b\x2d\x53\x20\x4d\x49\x4e\x53\x54\x52" \
-"\x5d\x20\x5b\x2d\x77\x20\x57\x49\x44\x54\x48\x5d\x20\x5b\x46\x49" \
-"\x4c\x45\x5d\x2e\x2e\x2e\x0a\x0a\x50\x72\x69\x6e\x74\x20\x46\x49" \
-"\x4c\x45\x73\x20\x28\x6f\x72\x20\x73\x74\x64\x69\x6e\x29\x20\x75" \
-"\x6e\x61\x6d\x62\x69\x67\x75\x6f\x75\x73\x6c\x79\x2c\x20\x61\x73" \
-"\x20\x6f\x63\x74\x61\x6c\x20\x62\x79\x74\x65\x73\x20\x62\x79\x20" \
-"\x64\x65\x66\x61\x75\x6c\x74\x00\x5b\x4f\x50\x54\x49\x4f\x4e\x53" \
-"\x5d\x20\x5b\x4f\x52\x49\x47\x46\x49\x4c\x45\x20\x5b\x50\x41\x54" \
-"\x43\x48\x46\x49\x4c\x45\x5d\x5d\x0a\x0a\x09\x2d\x70\x2c\x2d\x2d" \
-"\x73\x74\x72\x69\x70\x20\x4e\x09\x09\x53\x74\x72\x69\x70\x20\x4e" \
-"\x20\x6c\x65\x61\x64\x69\x6e\x67\x20\x63\x6f\x6d\x70\x6f\x6e\x65" \
-"\x6e\x74\x73\x20\x66\x72\x6f\x6d\x20\x66\x69\x6c\x65\x20\x6e\x61" \
-"\x6d\x65\x73\x0a\x09\x2d\x69\x2c\x2d\x2d\x69\x6e\x70\x75\x74\x20" \
-"\x44\x49\x46\x46\x09\x09\x52\x65\x61\x64\x20\x44\x49\x46\x46\x20" \
-"\x69\x6e\x73\x74\x65\x61\x64\x20\x6f\x66\x20\x73\x74\x64\x69\x6e" \
-"\x0a\x09\x2d\x52\x2c\x2d\x2d\x72\x65\x76\x65\x72\x73\x65\x09\x09" \
-"\x52\x65\x76\x65\x72\x73\x65\x20\x70\x61\x74\x63\x68\x0a\x09\x2d" \
-"\x4e\x2c\x2d\x2d\x66\x6f\x72\x77\x61\x72\x64\x09\x09\x49\x67\x6e" \
-"\x6f\x72\x65\x20\x61\x6c\x72\x65\x61\x64\x79\x20\x61\x70\x70\x6c" \
-"\x69\x65\x64\x20\x70\x61\x74\x63\x68\x65\x73\x0a\x09\x2d\x45\x2c" \
-"\x2d\x2d\x72\x65\x6d\x6f\x76\x65\x2d\x65\x6d\x70\x74\x79\x2d\x66" \
-"\x69\x6c\x65\x73\x09\x52\x65\x6d\x6f\x76\x65\x20\x6f\x75\x74\x70" \
-"\x75\x74\x20\x66\x69\x6c\x65\x73\x20\x69\x66\x20\x74\x68\x65\x79" \
-"\x20\x62\x65\x63\x6f\x6d\x65\x20\x65\x6d\x70\x74\x79\x00\x5b\x2d" \
-"\x66\x6c\x6e\x6f\x76\x78\x5d\x20\x5b\x2d\x73\x20\x53\x49\x44\x7c" \
-"\x2d\x50\x20\x50\x50\x49\x44\x7c\x50\x41\x54\x54\x45\x52\x4e\x5d" \
-"\x0a\x0a\x44\x69\x73\x70\x6c\x61\x79\x20\x70\x72\x6f\x63\x65\x73" \
-"\x73\x28\x65\x73\x29\x20\x73\x65\x6c\x65\x63\x74\x65\x64\x20\x62" \
-"\x79\x20\x72\x65\x67\x65\x78\x20\x50\x41\x54\x54\x45\x52\x4e\x0a" \
-"\x0a\x09\x2d\x6c\x09\x53\x68\x6f\x77\x20\x63\x6f\x6d\x6d\x61\x6e" \
-"\x64\x20\x6e\x61\x6d\x65\x20\x74\x6f\x6f\x0a\x09\x2d\x66\x09\x4d" \
-"\x61\x74\x63\x68\x20\x61\x67\x61\x69\x6e\x73\x74\x20\x65\x6e\x74" \
-"\x69\x72\x65\x20\x63\x6f\x6d\x6d\x61\x6e\x64\x20\x6c\x69\x6e\x65" \
-"\x0a\x09\x2d\x6e\x09\x53\x68\x6f\x77\x20\x74\x68\x65\x20\x6e\x65" \
-"\x77\x65\x73\x74\x20\x70\x72\x6f\x63\x65\x73\x73\x20\x6f\x6e\x6c" \
-"\x79\x0a\x09\x2d\x6f\x09\x53\x68\x6f\x77\x20\x74\x68\x65\x20\x6f" \
-"\x6c\x64\x65\x73\x74\x20\x70\x72\x6f\x63\x65\x73\x73\x20\x6f\x6e" \
-"\x6c\x79\x0a\x09\x2d\x76\x09\x4e\x65\x67\x61\x74\x65\x20\x74\x68" \
-"\x65\x20\x6d\x61\x74\x63\x68\x0a\x09\x2d\x78\x09\x4d\x61\x74\x63" \
-"\x68\x20\x77\x68\x6f\x6c\x65\x20\x6e\x61\x6d\x65\x20\x28\x6e\x6f" \
-"\x74\x20\x73\x75\x62\x73\x74\x72\x69\x6e\x67\x29\x0a\x09\x2d\x73" \
-"\x09\x4d\x61\x74\x63\x68\x20\x73\x65\x73\x73\x69\x6f\x6e\x20\x49" \
-"\x44\x20\x28\x30\x20\x66\x6f\x72\x20\x63\x75\x72\x72\x65\x6e\x74" \
-"\x29\x0a\x09\x2d\x50\x09\x4d\x61\x74\x63\x68\x20\x70\x61\x72\x65" \
-"\x6e\x74\x20\x70\x72\x6f\x63\x65\x73\x73\x20\x49\x44\x00\x5b\x4f" \
-"\x50\x54\x49\x4f\x4e\x53\x5d\x20\x5b\x4e\x41\x4d\x45\x5d\x2e\x2e" \
-"\x2e\x0a\x0a\x4c\x69\x73\x74\x20\x50\x49\x44\x73\x20\x6f\x66\x20" \
-"\x61\x6c\x6c\x20\x70\x72\x6f\x63\x65\x73\x73\x65\x73\x20\x77\x69" \
-"\x74\x68\x20\x6e\x61\x6d\x65\x73\x20\x74\x68\x61\x74\x20\x6d\x61" \
-"\x74\x63\x68\x20\x4e\x41\x4d\x45\x73\x0a\x0a\x09\x2d\x73\x09\x53" \
-"\x68\x6f\x77\x20\x6f\x6e\x6c\x79\x20\x6f\x6e\x65\x20\x50\x49\x44" \
-"\x0a\x09\x2d\x6f\x20\x50\x49\x44\x09\x4f\x6d\x69\x74\x20\x67\x69" \
-"\x76\x65\x6e\x20\x70\x69\x64\x0a\x09\x09\x55\x73\x65\x20\x25\x50" \
-"\x50\x49\x44\x20\x74\x6f\x20\x6f\x6d\x69\x74\x20\x70\x69\x64\x20" \
-"\x6f\x66\x20\x70\x69\x64\x6f\x66\x27\x73\x20\x70\x61\x72\x65\x6e" \
-"\x74\x00\x5b\x4f\x50\x54\x49\x4f\x4e\x53\x5d\x20\x48\x4f\x53\x54" \
-"\x0a\x0a\x53\x65\x6e\x64\x20\x49\x43\x4d\x50\x20\x45\x43\x48\x4f" \
-"\x5f\x52\x45\x51\x55\x45\x53\x54\x20\x70\x61\x63\x6b\x65\x74\x73" \
-"\x20\x74\x6f\x20\x6e\x65\x74\x77\x6f\x72\x6b\x20\x68\x6f\x73\x74" \
-"\x73\x0a\x0a\x09\x2d\x34\x2c\x2d\x36\x09\x09\x46\x6f\x72\x63\x65" \
-"\x20\x49\x50\x20\x6f\x72\x20\x49\x50\x76\x36\x20\x6e\x61\x6d\x65" \
-"\x20\x72\x65\x73\x6f\x6c\x75\x74\x69\x6f\x6e\x0a\x09\x2d\x63\x20" \
-"\x43\x4e\x54\x09\x09\x53\x65\x6e\x64\x20\x6f\x6e\x6c\x79\x20\x43" \
-"\x4e\x54\x20\x70\x69\x6e\x67\x73\x0a\x09\x2d\x73\x20\x53\x49\x5a" \
-"\x45\x09\x09\x53\x65\x6e\x64\x20\x53\x49\x5a\x45\x20\x64\x61\x74" \
-"\x61\x20\x62\x79\x74\x65\x73\x20\x69\x6e\x20\x70\x61\x63\x6b\x65" \
-"\x74\x73\x20\x28\x64\x65\x66\x61\x75\x6c\x74\x3a\x35\x36\x29\x0a" \
-"\x09\x2d\x74\x20\x54\x54\x4c\x09\x09\x53\x65\x74\x20\x54\x54\x4c" \
-"\x0a\x09\x2d\x49\x20\x49\x46\x41\x43\x45\x2f\x49\x50\x09\x55\x73" \
-"\x65\x20\x69\x6e\x74\x65\x72\x66\x61\x63\x65\x20\x6f\x72\x20\x49" \
-"\x50\x20\x61\x64\x64\x72\x65\x73\x73\x20\x61\x73\x20\x73\x6f\x75" \
-"\x72\x63\x65\x0a\x09\x2d\x57\x20\x53\x45\x43\x09\x09\x53\x65\x63" \
-"\x6f\x6e\x64\x73\x20\x74\x6f\x20\x77\x61\x69\x74\x20\x66\x6f\x72" \
-"\x20\x74\x68\x65\x20\x66\x69\x72\x73\x74\x20\x72\x65\x73\x70\x6f" \
-"\x6e\x73\x65\x20\x28\x64\x65\x66\x61\x75\x6c\x74\x3a\x31\x30\x29" \
-"\x0a\x09\x09\x09\x28\x61\x66\x74\x65\x72\x20\x61\x6c\x6c\x20\x2d" \
-"\x63\x20\x43\x4e\x54\x20\x70\x61\x63\x6b\x65\x74\x73\x20\x61\x72" \
-"\x65\x20\x73\x65\x6e\x74\x29\x0a\x09\x2d\x77\x20\x53\x45\x43\x09" \
-"\x09\x53\x65\x63\x6f\x6e\x64\x73\x20\x75\x6e\x74\x69\x6c\x20\x70" \
-"\x69\x6e\x67\x20\x65\x78\x69\x74\x73\x20\x28\x64\x65\x66\x61\x75" \
-"\x6c\x74\x3a\x69\x6e\x66\x69\x6e\x69\x74\x65\x29\x0a\x09\x09\x09" \
-"\x28\x63\x61\x6e\x20\x65\x78\x69\x74\x20\x65\x61\x72\x6c\x69\x65" \
-"\x72\x20\x77\x69\x74\x68\x20\x2d\x63\x20\x43\x4e\x54\x29\x0a\x09" \
-"\x2d\x71\x09\x09\x51\x75\x69\x65\x74\x2c\x20\x6f\x6e\x6c\x79\x20" \
-"\x64\x69\x73\x70\x6c\x61\x79\x73\x20\x6f\x75\x74\x70\x75\x74\x20" \
-"\x61\x74\x20\x73\x74\x61\x72\x74\x0a\x09\x09\x09\x61\x6e\x64\x20" \
-"\x77\x68\x65\x6e\x20\x66\x69\x6e\x69\x73\x68\x65\x64\x00\x08\x00" \
-"\x5b\x2d\x6c\x7c\x2d\x53\x49\x47\x4e\x41\x4c\x5d\x20\x5b\x2d\x66" \
-"\x6e\x6f\x76\x78\x5d\x20\x5b\x2d\x73\x20\x53\x49\x44\x7c\x2d\x50" \
-"\x20\x50\x50\x49\x44\x7c\x50\x41\x54\x54\x45\x52\x4e\x5d\x0a\x0a" \
-"\x53\x65\x6e\x64\x20\x61\x20\x73\x69\x67\x6e\x61\x6c\x20\x74\x6f" \
-"\x20\x70\x72\x6f\x63\x65\x73\x73\x28\x65\x73\x29\x20\x73\x65\x6c" \
-"\x65\x63\x74\x65\x64\x20\x62\x79\x20\x72\x65\x67\x65\x78\x20\x50" \
-"\x41\x54\x54\x45\x52\x4e\x0a\x0a\x09\x2d\x6c\x09\x4c\x69\x73\x74" \
-"\x20\x61\x6c\x6c\x20\x73\x69\x67\x6e\x61\x6c\x73\x0a\x09\x2d\x66" \
-"\x09\x4d\x61\x74\x63\x68\x20\x61\x67\x61\x69\x6e\x73\x74\x20\x65" \
-"\x6e\x74\x69\x72\x65\x20\x63\x6f\x6d\x6d\x61\x6e\x64\x20\x6c\x69" \
-"\x6e\x65\x0a\x09\x2d\x6e\x09\x53\x69\x67\x6e\x61\x6c\x20\x74\x68" \
-"\x65\x20\x6e\x65\x77\x65\x73\x74\x20\x70\x72\x6f\x63\x65\x73\x73" \
-"\x20\x6f\x6e\x6c\x79\x0a\x09\x2d\x6f\x09\x53\x69\x67\x6e\x61\x6c" \
-"\x20\x74\x68\x65\x20\x6f\x6c\x64\x65\x73\x74\x20\x70\x72\x6f\x63" \
-"\x65\x73\x73\x20\x6f\x6e\x6c\x79\x0a\x09\x2d\x76\x09\x4e\x65\x67" \
-"\x61\x74\x65\x20\x74\x68\x65\x20\x6d\x61\x74\x63\x68\x0a\x09\x2d" \
-"\x78\x09\x4d\x61\x74\x63\x68\x20\x77\x68\x6f\x6c\x65\x20\x6e\x61" \
-"\x6d\x65\x20\x28\x6e\x6f\x74\x20\x73\x75\x62\x73\x74\x72\x69\x6e" \
-"\x67\x29\x0a\x09\x2d\x73\x09\x4d\x61\x74\x63\x68\x20\x73\x65\x73" \
-"\x73\x69\x6f\x6e\x20\x49\x44\x20\x28\x30\x20\x66\x6f\x72\x20\x63" \
-"\x75\x72\x72\x65\x6e\x74\x29\x0a\x09\x2d\x50\x09\x4d\x61\x74\x63" \
-"\x68\x20\x70\x61\x72\x65\x6e\x74\x20\x70\x72\x6f\x63\x65\x73\x73" \
-"\x20\x49\x44\x00\x5b\x2d\x78\x71\x5d\x20\x50\x49\x44\x0a\x0a\x44" \
-"\x69\x73\x70\x6c\x61\x79\x20\x64\x65\x74\x61\x69\x6c\x65\x64\x20" \
-"\x70\x72\x6f\x63\x65\x73\x73\x20\x6d\x65\x6d\x6f\x72\x79\x20\x75" \
-"\x73\x61\x67\x65\x0a\x0a\x09\x2d\x78\x09\x53\x68\x6f\x77\x20\x64" \
-"\x65\x74\x61\x69\x6c\x73\x0a\x09\x2d\x71\x09\x51\x75\x69\x65\x74" \
-"\x00\x5b\x2d\x64\x20\x44\x45\x4c\x41\x59\x5d\x20\x5b\x2d\x6e\x5d" \
-"\x20\x5b\x2d\x66\x5d\x0a\x0a\x48\x61\x6c\x74\x20\x61\x6e\x64\x20" \
-"\x73\x68\x75\x74\x20\x6f\x66\x66\x20\x70\x6f\x77\x65\x72\x0a\x0a" \
-"\x09\x2d\x64\x20\x53\x45\x43\x09\x44\x65\x6c\x61\x79\x20\x69\x6e" \
-"\x74\x65\x72\x76\x61\x6c\x0a\x09\x2d\x6e\x09\x44\x6f\x20\x6e\x6f" \
-"\x74\x20\x73\x79\x6e\x63\x0a\x09\x2d\x66\x09\x46\x6f\x72\x63\x65" \
-"\x20\x28\x64\x6f\x6e\x27\x74\x20\x67\x6f\x20\x74\x68\x72\x6f\x75" \
-"\x67\x68\x20\x69\x6e\x69\x74\x29\x00\x5b\x56\x41\x52\x49\x41\x42" \
-"\x4c\x45\x5d\x2e\x2e\x2e\x0a\x0a\x50\x72\x69\x6e\x74\x20\x65\x6e" \
-"\x76\x69\x72\x6f\x6e\x6d\x65\x6e\x74\x20\x56\x41\x52\x49\x41\x42" \
-"\x4c\x45\x73\x2e\x0a\x49\x66\x20\x6e\x6f\x20\x56\x41\x52\x49\x41" \
-"\x42\x4c\x45\x20\x73\x70\x65\x63\x69\x66\x69\x65\x64\x2c\x20\x70" \
-"\x72\x69\x6e\x74\x20\x61\x6c\x6c\x2e\x00\x46\x4f\x52\x4d\x41\x54" \
-"\x20\x5b\x41\x52\x47\x5d\x2e\x2e\x2e\x0a\x0a\x46\x6f\x72\x6d\x61" \
-"\x74\x20\x61\x6e\x64\x20\x70\x72\x69\x6e\x74\x20\x41\x52\x47\x28" \
-"\x73\x29\x20\x61\x63\x63\x6f\x72\x64\x69\x6e\x67\x20\x74\x6f\x20" \
-"\x46\x4f\x52\x4d\x41\x54\x20\x28\x61\x2d\x6c\x61\x20\x43\x20\x70" \
-"\x72\x69\x6e\x74\x66\x29\x00\x5b\x2d\x6f\x20\x43\x4f\x4c\x31\x2c" \
-"\x43\x4f\x4c\x32\x3d\x48\x45\x41\x44\x45\x52\x5d\x20\x5b\x2d\x54" \
-"\x5d\x0a\x0a\x53\x68\x6f\x77\x20\x6c\x69\x73\x74\x20\x6f\x66\x20" \
-"\x70\x72\x6f\x63\x65\x73\x73\x65\x73\x0a\x0a\x09\x2d\x6f\x20\x43" \
-"\x4f\x4c\x31\x2c\x43\x4f\x4c\x32\x3d\x48\x45\x41\x44\x45\x52\x09" \
-"\x53\x65\x6c\x65\x63\x74\x20\x63\x6f\x6c\x75\x6d\x6e\x73\x20\x66" \
-"\x6f\x72\x20\x64\x69\x73\x70\x6c\x61\x79\x0a\x09\x2d\x54\x09\x09" \
-"\x09\x53\x68\x6f\x77\x20\x74\x68\x72\x65\x61\x64\x73\x00\x5b\x2d" \
-"\x70\x5d\x20\x5b\x50\x49\x44\x7c\x55\x53\x45\x52\x5d\x0a\x0a\x44" \
-"\x69\x73\x70\x6c\x61\x79\x20\x70\x72\x6f\x63\x65\x73\x73\x20\x74" \
-"\x72\x65\x65\x2c\x20\x6f\x70\x74\x69\x6f\x6e\x61\x6c\x6c\x79\x20" \
-"\x73\x74\x61\x72\x74\x20\x66\x72\x6f\x6d\x20\x55\x53\x45\x52\x20" \
-"\x6f\x72\x20\x50\x49\x44\x0a\x0a\x09\x2d\x70\x09\x53\x68\x6f\x77" \
-"\x20\x70\x69\x64\x73\x00\x0a\x0a\x50\x72\x69\x6e\x74\x20\x74\x68" \
-"\x65\x20\x66\x75\x6c\x6c\x20\x66\x69\x6c\x65\x6e\x61\x6d\x65\x20" \
-"\x6f\x66\x20\x74\x68\x65\x20\x63\x75\x72\x72\x65\x6e\x74\x20\x77" \
-"\x6f\x72\x6b\x69\x6e\x67\x20\x64\x69\x72\x65\x63\x74\x6f\x72\x79" \
-"\x00\x50\x49\x44\x2e\x2e\x2e\x0a\x0a\x53\x68\x6f\x77\x20\x63\x75" \
-"\x72\x72\x65\x6e\x74\x20\x64\x69\x72\x65\x63\x74\x6f\x72\x79\x20" \
-"\x66\x6f\x72\x20\x50\x49\x44\x73\x0a\x00\x0a\x0a\x50\x72\x69\x6e" \
-"\x74\x20\x74\x68\x65\x20\x64\x65\x76\x69\x63\x65\x20\x6e\x6f\x64" \
-"\x65\x20\x61\x73\x73\x6f\x63\x69\x61\x74\x65\x64\x20\x77\x69\x74" \
-"\x68\x20\x74\x68\x65\x20\x66\x69\x6c\x65\x73\x79\x73\x74\x65\x6d" \
-"\x20\x6d\x6f\x75\x6e\x74\x65\x64\x20\x61\x74\x20\x27\x2f\x27\x00" \
-"\x5b\x2d\x66\x6e\x76\x5d\x20\x46\x49\x4c\x45\x0a\x0a\x44\x69\x73" \
-"\x70\x6c\x61\x79\x20\x74\x68\x65\x20\x76\x61\x6c\x75\x65\x20\x6f" \
-"\x66\x20\x61\x20\x73\x79\x6d\x6c\x69\x6e\x6b\x0a\x0a\x09\x2d\x66" \
-"\x09\x43\x61\x6e\x6f\x6e\x69\x63\x61\x6c\x69\x7a\x65\x20\x62\x79" \
-"\x20\x66\x6f\x6c\x6c\x6f\x77\x69\x6e\x67\x20\x61\x6c\x6c\x20\x73" \
-"\x79\x6d\x6c\x69\x6e\x6b\x73\x0a\x09\x2d\x6e\x09\x44\x6f\x6e\x27" \
-"\x74\x20\x61\x64\x64\x20\x6e\x65\x77\x6c\x69\x6e\x65\x0a\x09\x2d" \
-"\x76\x09\x56\x65\x72\x62\x6f\x73\x65\x00\x46\x49\x4c\x45\x2e\x2e" \
-"\x2e\x0a\x0a\x52\x65\x74\x75\x72\x6e\x20\x74\x68\x65\x20\x61\x62" \
-"\x73\x6f\x6c\x75\x74\x65\x20\x70\x61\x74\x68\x6e\x61\x6d\x65\x73" \
-"\x20\x6f\x66\x20\x67\x69\x76\x65\x6e\x20\x46\x49\x4c\x45\x00\x5b" \
-"\x2d\x64\x20\x44\x45\x4c\x41\x59\x5d\x20\x5b\x2d\x6e\x5d\x20\x5b" \
-"\x2d\x66\x5d\x0a\x0a\x52\x65\x62\x6f\x6f\x74\x20\x74\x68\x65\x20" \
-"\x73\x79\x73\x74\x65\x6d\x0a\x0a\x09\x2d\x64\x20\x53\x45\x43\x09" \
-"\x44\x65\x6c\x61\x79\x20\x69\x6e\x74\x65\x72\x76\x61\x6c\x0a\x09" \
-"\x2d\x6e\x09\x44\x6f\x20\x6e\x6f\x74\x20\x73\x79\x6e\x63\x0a\x09" \
-"\x2d\x66\x09\x46\x6f\x72\x63\x65\x20\x28\x64\x6f\x6e\x27\x74\x20" \
-"\x67\x6f\x20\x74\x68\x72\x6f\x75\x67\x68\x20\x69\x6e\x69\x74\x29" \
-"\x00\x7b\x7b\x2d\x6e\x20\x49\x4e\x43\x52\x45\x4d\x45\x4e\x54\x7d" \
-"\x20\x7c\x20\x50\x52\x49\x4f\x52\x49\x54\x59\x7d\x20\x5b\x5b\x2d" \
-"\x70\x20\x7c\x20\x2d\x67\x20\x7c\x20\x2d\x75\x5d\x20\x49\x44\x2e" \
-"\x2e\x2e\x5d\x0a\x0a\x43\x68\x61\x6e\x67\x65\x20\x73\x63\x68\x65" \
-"\x64\x75\x6c\x69\x6e\x67\x20\x70\x72\x69\x6f\x72\x69\x74\x79\x20" \
-"\x66\x6f\x72\x20\x61\x20\x72\x75\x6e\x6e\x69\x6e\x67\x20\x70\x72" \
-"\x6f\x63\x65\x73\x73\x0a\x0a\x09\x2d\x6e\x09\x41\x64\x6a\x75\x73" \
-"\x74\x20\x63\x75\x72\x72\x65\x6e\x74\x20\x6e\x69\x63\x65\x20\x76" \
-"\x61\x6c\x75\x65\x20\x28\x73\x6d\x61\x6c\x6c\x65\x72\x20\x69\x73" \
-"\x20\x66\x61\x73\x74\x65\x72\x29\x0a\x09\x2d\x70\x09\x50\x72\x6f" \
-"\x63\x65\x73\x73\x20\x69\x64\x28\x73\x29\x20\x28\x64\x65\x66\x61" \
-"\x75\x6c\x74\x29\x0a\x09\x2d\x67\x09\x50\x72\x6f\x63\x65\x73\x73" \
-"\x20\x67\x72\x6f\x75\x70\x20\x69\x64\x28\x73\x29\x0a\x09\x2d\x75" \
-"\x09\x50\x72\x6f\x63\x65\x73\x73\x20\x75\x73\x65\x72\x20\x6e\x61" \
-"\x6d\x65\x28\x73\x29\x20\x61\x6e\x64\x2f\x6f\x72\x20\x69\x64\x28" \
-"\x73\x29\x00\x0a\x0a\x52\x65\x73\x65\x74\x20\x74\x68\x65\x20\x73" \
-"\x63\x72\x65\x65\x6e\x00\x0a\x0a\x52\x65\x73\x69\x7a\x65\x20\x74" \
-"\x68\x65\x20\x73\x63\x72\x65\x65\x6e\x00\x5b\x46\x49\x4c\x45\x5d" \
-"\x2e\x2e\x2e\x0a\x0a\x52\x65\x76\x65\x72\x73\x65\x20\x6c\x69\x6e" \
-"\x65\x73\x20\x6f\x66\x20\x46\x49\x4c\x45\x00\x5b\x2d\x69\x72\x66" \
-"\x5d\x20\x46\x49\x4c\x45\x2e\x2e\x2e\x0a\x0a\x52\x65\x6d\x6f\x76" \
-"\x65\x20\x28\x75\x6e\x6c\x69\x6e\x6b\x29\x20\x46\x49\x4c\x45\x73" \
-"\x0a\x0a\x09\x2d\x69\x09\x41\x6c\x77\x61\x79\x73\x20\x70\x72\x6f" \
-"\x6d\x70\x74\x20\x62\x65\x66\x6f\x72\x65\x20\x72\x65\x6d\x6f\x76" \
-"\x69\x6e\x67\x0a\x09\x2d\x66\x09\x4e\x65\x76\x65\x72\x20\x70\x72" \
-"\x6f\x6d\x70\x74\x0a\x09\x2d\x52\x2c\x2d\x72\x09\x52\x65\x63\x75" \
-"\x72\x73\x65\x00\x5b\x4f\x50\x54\x49\x4f\x4e\x53\x5d\x20\x44\x49" \
-"\x52\x45\x43\x54\x4f\x52\x59\x2e\x2e\x2e\x0a\x0a\x52\x65\x6d\x6f" \
-"\x76\x65\x20\x44\x49\x52\x45\x43\x54\x4f\x52\x59\x20\x69\x66\x20" \
-"\x69\x74\x20\x69\x73\x20\x65\x6d\x70\x74\x79\x0a\x0a\x09\x2d\x70" \
-"\x7c\x2d\x2d\x70\x61\x72\x65\x6e\x74\x73\x09\x49\x6e\x63\x6c\x75" \
-"\x64\x65\x20\x70\x61\x72\x65\x6e\x74\x73\x0a\x09\x2d\x2d\x69\x67" \
-"\x6e\x6f\x72\x65\x2d\x66\x61\x69\x6c\x2d\x6f\x6e\x2d\x6e\x6f\x6e" \
-"\x2d\x65\x6d\x70\x74\x79\x00\x5b\x2d\x77\x66\x61\x5d\x20\x5b\x4d" \
-"\x4f\x44\x55\x4c\x45\x5d\x2e\x2e\x2e\x0a\x0a\x55\x6e\x6c\x6f\x61" \
-"\x64\x20\x6b\x65\x72\x6e\x65\x6c\x20\x6d\x6f\x64\x75\x6c\x65\x73" \
-"\x0a\x0a\x09\x2d\x77\x09\x57\x61\x69\x74\x20\x75\x6e\x74\x69\x6c" \
-"\x20\x74\x68\x65\x20\x6d\x6f\x64\x75\x6c\x65\x20\x69\x73\x20\x6e" \
-"\x6f\x20\x6c\x6f\x6e\x67\x65\x72\x20\x75\x73\x65\x64\x0a\x09\x2d" \
-"\x66\x09\x46\x6f\x72\x63\x65\x20\x75\x6e\x6c\x6f\x61\x64\x0a\x09" \
-"\x2d\x61\x09\x52\x65\x6d\x6f\x76\x65\x20\x61\x6c\x6c\x20\x75\x6e" \
-"\x75\x73\x65\x64\x20\x6d\x6f\x64\x75\x6c\x65\x73\x20\x28\x72\x65" \
-"\x63\x75\x72\x73\x69\x76\x65\x6c\x79\x29\x00\x5b\x7b\x61\x64\x64" \
-"\x7c\x64\x65\x6c\x7c\x64\x65\x6c\x65\x74\x65\x7d\x5d\x0a\x0a\x45" \
-"\x64\x69\x74\x20\x6b\x65\x72\x6e\x65\x6c\x20\x72\x6f\x75\x74\x69" \
-"\x6e\x67\x20\x74\x61\x62\x6c\x65\x73\x0a\x0a\x09\x2d\x6e\x09\x44" \
-"\x6f\x6e\x27\x74\x20\x72\x65\x73\x6f\x6c\x76\x65\x20\x6e\x61\x6d" \
-"\x65\x73\x0a\x09\x2d\x65\x09\x44\x69\x73\x70\x6c\x61\x79\x20\x6f" \
-"\x74\x68\x65\x72\x2f\x6d\x6f\x72\x65\x20\x69\x6e\x66\x6f\x72\x6d" \
-"\x61\x74\x69\x6f\x6e\x0a\x09\x2d\x41\x20\x69\x6e\x65\x74\x7b\x36" \
-"\x7d\x09\x53\x65\x6c\x65\x63\x74\x20\x61\x64\x64\x72\x65\x73\x73" \
-"\x20\x66\x61\x6d\x69\x6c\x79\x00\x5b\x2d\x74\x6c\x5d\x20\x5b\x2d" \
-"\x61\x20\x41\x52\x47\x5d\x2e\x2e\x2e\x20\x5b\x2d\x75\x20\x4d\x41" \
-"\x53\x4b\x5d\x20\x44\x49\x52\x45\x43\x54\x4f\x52\x59\x0a\x0a\x52" \
-"\x75\x6e\x20\x61\x20\x62\x75\x6e\x63\x68\x20\x6f\x66\x20\x73\x63" \
-"\x72\x69\x70\x74\x73\x20\x69\x6e\x20\x44\x49\x52\x45\x43\x54\x4f" \
-"\x52\x59\x0a\x0a\x09\x2d\x74\x09\x44\x72\x79\x20\x72\x75\x6e\x0a" \
-"\x09\x2d\x6c\x09\x50\x72\x69\x6e\x74\x20\x6e\x61\x6d\x65\x73\x20" \
-"\x6f\x66\x20\x6d\x61\x74\x63\x68\x69\x6e\x67\x20\x66\x69\x6c\x65" \
-"\x73\x20\x65\x76\x65\x6e\x20\x69\x66\x20\x74\x68\x65\x79\x20\x61" \
-"\x72\x65\x20\x6e\x6f\x74\x20\x65\x78\x65\x63\x75\x74\x61\x62\x6c" \
-"\x65\x0a\x09\x2d\x61\x20\x41\x52\x47\x09\x50\x61\x73\x73\x20\x41" \
-"\x52\x47\x20\x61\x73\x20\x61\x72\x67\x75\x6d\x65\x6e\x74\x20\x74" \
-"\x6f\x20\x70\x72\x6f\x67\x72\x61\x6d\x73\x0a\x09\x2d\x75\x20\x4d" \
-"\x41\x53\x4b\x09\x53\x65\x74\x20\x75\x6d\x61\x73\x6b\x20\x74\x6f" \
-"\x20\x4d\x41\x53\x4b\x20\x62\x65\x66\x6f\x72\x65\x20\x72\x75\x6e" \
-"\x6e\x69\x6e\x67\x20\x70\x72\x6f\x67\x72\x61\x6d\x73\x00\x46\x49" \
-"\x4c\x45\x0a\x0a\x52\x65\x63\x65\x69\x76\x65\x20\x61\x20\x66\x69" \
-"\x6c\x65\x20\x75\x73\x69\x6e\x67\x20\x74\x68\x65\x20\x78\x6d\x6f" \
-"\x64\x65\x6d\x20\x70\x72\x6f\x74\x6f\x63\x6f\x6c\x00\x5b\x2d\x69" \
-"\x6e\x72\x5d\x20\x5b\x2d\x66\x20\x46\x49\x4c\x45\x5d\x2e\x2e\x2e" \
-"\x20\x5b\x2d\x65\x20\x43\x4d\x44\x5d\x2e\x2e\x2e\x20\x5b\x46\x49" \
-"\x4c\x45\x5d\x2e\x2e\x2e\x0a\x6f\x72\x3a\x20\x73\x65\x64\x20\x5b" \
-"\x2d\x69\x6e\x72\x5d\x20\x43\x4d\x44\x20\x5b\x46\x49\x4c\x45\x5d" \
-"\x2e\x2e\x2e\x0a\x0a\x09\x2d\x65\x20\x43\x4d\x44\x09\x41\x64\x64" \
-"\x20\x43\x4d\x44\x20\x74\x6f\x20\x73\x65\x64\x20\x63\x6f\x6d\x6d" \
-"\x61\x6e\x64\x73\x20\x74\x6f\x20\x62\x65\x20\x65\x78\x65\x63\x75" \
-"\x74\x65\x64\x0a\x09\x2d\x66\x20\x46\x49\x4c\x45\x09\x41\x64\x64" \
-"\x20\x46\x49\x4c\x45\x20\x63\x6f\x6e\x74\x65\x6e\x74\x73\x20\x74" \
-"\x6f\x20\x73\x65\x64\x20\x63\x6f\x6d\x6d\x61\x6e\x64\x73\x20\x74" \
-"\x6f\x20\x62\x65\x20\x65\x78\x65\x63\x75\x74\x65\x64\x0a\x09\x2d" \
-"\x69\x5b\x53\x46\x58\x5d\x09\x45\x64\x69\x74\x20\x66\x69\x6c\x65" \
-"\x73\x20\x69\x6e\x2d\x70\x6c\x61\x63\x65\x20\x28\x6f\x74\x68\x65" \
-"\x72\x77\x69\x73\x65\x20\x73\x65\x6e\x64\x73\x20\x74\x6f\x20\x73" \
-"\x74\x64\x6f\x75\x74\x29\x0a\x09\x09\x4f\x70\x74\x69\x6f\x6e\x61" \
-"\x6c\x6c\x79\x20\x62\x61\x63\x6b\x20\x66\x69\x6c\x65\x73\x20\x75" \
-"\x70\x2c\x20\x61\x70\x70\x65\x6e\x64\x69\x6e\x67\x20\x53\x46\x58" \
-"\x0a\x09\x2d\x6e\x09\x53\x75\x70\x70\x72\x65\x73\x73\x20\x61\x75" \
-"\x74\x6f\x6d\x61\x74\x69\x63\x20\x70\x72\x69\x6e\x74\x69\x6e\x67" \
-"\x20\x6f\x66\x20\x70\x61\x74\x74\x65\x72\x6e\x20\x73\x70\x61\x63" \
-"\x65\x0a\x09\x2d\x72\x09\x55\x73\x65\x20\x65\x78\x74\x65\x6e\x64" \
-"\x65\x64\x20\x72\x65\x67\x65\x78\x20\x73\x79\x6e\x74\x61\x78\x0a" \
-"\x0a\x49\x66\x20\x6e\x6f\x20\x2d\x65\x20\x6f\x72\x20\x2d\x66\x2c" \
-"\x20\x74\x68\x65\x20\x66\x69\x72\x73\x74\x20\x6e\x6f\x6e\x2d\x6f" \
-"\x70\x74\x69\x6f\x6e\x20\x61\x72\x67\x75\x6d\x65\x6e\x74\x20\x69" \
-"\x73\x20\x74\x68\x65\x20\x73\x65\x64\x20\x63\x6f\x6d\x6d\x61\x6e" \
-"\x64\x20\x73\x74\x72\x69\x6e\x67\x2e\x0a\x52\x65\x6d\x61\x69\x6e" \
-"\x69\x6e\x67\x20\x61\x72\x67\x75\x6d\x65\x6e\x74\x73\x20\x61\x72" \
-"\x65\x20\x69\x6e\x70\x75\x74\x20\x66\x69\x6c\x65\x73\x20\x28\x73" \
-"\x74\x64\x69\x6e\x20\x69\x66\x20\x6e\x6f\x6e\x65\x29\x2e\x00\x5b" \
-"\x2d\x77\x5d\x20\x5b\x2d\x73\x20\x53\x45\x50\x5d\x20\x5b\x46\x49" \
-"\x52\x53\x54\x20\x5b\x49\x4e\x43\x5d\x5d\x20\x4c\x41\x53\x54\x0a" \
-"\x0a\x50\x72\x69\x6e\x74\x20\x6e\x75\x6d\x62\x65\x72\x73\x20\x66" \
-"\x72\x6f\x6d\x20\x46\x49\x52\x53\x54\x20\x74\x6f\x20\x4c\x41\x53" \
-"\x54\x2c\x20\x69\x6e\x20\x73\x74\x65\x70\x73\x20\x6f\x66\x20\x49" \
-"\x4e\x43\x2e\x0a\x46\x49\x52\x53\x54\x2c\x20\x49\x4e\x43\x20\x64" \
-"\x65\x66\x61\x75\x6c\x74\x20\x74\x6f\x20\x31\x2e\x0a\x0a\x09\x2d" \
-"\x77\x09\x50\x61\x64\x20\x74\x6f\x20\x6c\x61\x73\x74\x20\x77\x69" \
-"\x74\x68\x20\x6c\x65\x61\x64\x69\x6e\x67\x20\x7a\x65\x72\x6f\x73" \
-"\x0a\x09\x2d\x73\x20\x53\x45\x50\x09\x53\x74\x72\x69\x6e\x67\x20" \
-"\x73\x65\x70\x61\x72\x61\x74\x6f\x72\x00\x5b\x2d\x72\x5d\x20\x5b" \
-"\x44\x45\x56\x49\x43\x45\x5d\x0a\x0a\x52\x65\x64\x69\x72\x65\x63" \
-"\x74\x20\x73\x79\x73\x74\x65\x6d\x20\x63\x6f\x6e\x73\x6f\x6c\x65" \
-"\x20\x6f\x75\x74\x70\x75\x74\x20\x74\x6f\x20\x44\x45\x56\x49\x43" \
-"\x45\x20\x28\x64\x65\x66\x61\x75\x6c\x74\x3a\x20\x2f\x64\x65\x76" \
-"\x2f\x74\x74\x79\x29\x0a\x0a\x09\x2d\x72\x09\x52\x65\x73\x65\x74" \
-"\x20\x6f\x75\x74\x70\x75\x74\x20\x74\x6f\x20\x2f\x64\x65\x76\x2f" \
-"\x63\x6f\x6e\x73\x6f\x6c\x65\x00\x5b\x2d\x67\x61\x62\x47\x76\x7a" \
-"\x56\x5d\x20\x44\x45\x56\x49\x43\x45\x20\x5b\x50\x41\x52\x41\x4d" \
-"\x45\x54\x45\x52\x20\x5b\x41\x52\x47\x5d\x5d\x2e\x2e\x2e\x0a\x0a" \
-"\x52\x65\x71\x75\x65\x73\x74\x20\x6f\x72\x20\x73\x65\x74\x20\x4c" \
-"\x69\x6e\x75\x78\x20\x73\x65\x72\x69\x61\x6c\x20\x70\x6f\x72\x74" \
-"\x20\x69\x6e\x66\x6f\x72\x6d\x61\x74\x69\x6f\x6e\x0a\x0a\x09\x2d" \
-"\x67\x09\x49\x6e\x74\x65\x72\x70\x72\x65\x74\x20\x70\x61\x72\x61" \
-"\x6d\x65\x74\x65\x72\x73\x20\x61\x73\x20\x6c\x69\x73\x74\x20\x6f" \
-"\x66\x20\x64\x65\x76\x69\x63\x65\x73\x20\x66\x6f\x72\x20\x72\x65" \
-"\x70\x6f\x72\x74\x69\x6e\x67\x0a\x09\x2d\x61\x09\x50\x72\x69\x6e" \
-"\x74\x20\x61\x6c\x6c\x20\x61\x76\x61\x69\x6c\x61\x62\x6c\x65\x20" \
-"\x69\x6e\x66\x6f\x72\x6d\x61\x74\x69\x6f\x6e\x0a\x09\x2d\x62\x09" \
-"\x50\x72\x69\x6e\x74\x20\x73\x75\x6d\x6d\x61\x72\x79\x20\x69\x6e" \
-"\x66\x6f\x72\x6d\x61\x74\x69\x6f\x6e\x0a\x09\x2d\x47\x09\x50\x72" \
-"\x69\x6e\x74\x20\x69\x6e\x20\x66\x6f\x72\x6d\x20\x77\x68\x69\x63" \
-"\x68\x20\x63\x61\x6e\x20\x62\x65\x20\x66\x65\x64\x20\x62\x61\x63" \
-"\x6b\x0a\x09\x09\x74\x6f\x20\x73\x65\x74\x73\x65\x72\x69\x61\x6c" \
-"\x20\x61\x73\x20\x63\x6f\x6d\x6d\x61\x6e\x64\x20\x6c\x69\x6e\x65" \
-"\x20\x70\x61\x72\x61\x6d\x65\x74\x65\x72\x73\x0a\x09\x2d\x7a\x09" \
-"\x5a\x65\x72\x6f\x20\x6f\x75\x74\x20\x73\x65\x72\x69\x61\x6c\x20" \
-"\x66\x6c\x61\x67\x73\x20\x62\x65\x66\x6f\x72\x65\x20\x73\x65\x74" \
-"\x74\x69\x6e\x67\x0a\x09\x2d\x76\x09\x56\x65\x72\x62\x6f\x73\x65" \
-"\x0a\x0a\x50\x61\x72\x61\x6d\x65\x74\x65\x72\x73\x3a\x20\x28\x2a" \
-"\x20\x3d\x20\x74\x61\x6b\x65\x73\x20\x61\x6e\x20\x61\x72\x67\x75" \
-"\x6d\x65\x6e\x74\x2c\x20\x5e\x20\x3d\x20\x63\x61\x6e\x20\x62\x65" \
-"\x20\x74\x75\x72\x6e\x65\x64\x20\x6f\x66\x66\x20\x62\x79\x20\x70" \
-"\x72\x65\x63\x65\x64\x69\x6e\x67\x20\x5e\x29\x0a\x09\x2a\x70\x6f" \
-"\x72\x74\x2c\x20\x2a\x69\x72\x71\x2c\x20\x2a\x64\x69\x76\x69\x73" \
-"\x6f\x72\x2c\x20\x2a\x75\x61\x72\x74\x2c\x20\x2a\x62\x61\x75\x6e" \
-"\x64\x5f\x62\x61\x73\x65\x2c\x20\x2a\x63\x6c\x6f\x73\x65\x5f\x64" \
-"\x65\x6c\x61\x79\x2c\x20\x2a\x63\x6c\x6f\x73\x69\x6e\x67\x5f\x77" \
-"\x61\x69\x74\x2c\x0a\x09\x5e\x66\x6f\x75\x72\x70\x6f\x72\x74\x2c" \
-"\x20\x5e\x61\x75\x74\x6f\x5f\x69\x72\x71\x2c\x20\x5e\x73\x6b\x69" \
-"\x70\x5f\x74\x65\x73\x74\x2c\x20\x5e\x73\x61\x6b\x2c\x20\x5e\x73" \
-"\x65\x73\x73\x69\x6f\x6e\x5f\x6c\x6f\x63\x6b\x6f\x75\x74\x2c\x20" \
-"\x5e\x70\x67\x72\x70\x5f\x6c\x6f\x63\x6b\x6f\x75\x74\x2c\x0a\x09" \
-"\x5e\x63\x61\x6c\x6c\x6f\x75\x74\x5f\x6e\x6f\x68\x75\x70\x2c\x20" \
-"\x5e\x73\x70\x6c\x69\x74\x5f\x74\x65\x72\x6d\x69\x6f\x73\x2c\x20" \
-"\x5e\x68\x75\x70\x5f\x6e\x6f\x74\x69\x66\x79\x2c\x20\x5e\x6c\x6f" \
-"\x77\x5f\x6c\x61\x74\x65\x6e\x63\x79\x2c\x20\x61\x75\x74\x6f\x63" \
-"\x6f\x6e\x66\x69\x67\x2c\x0a\x09\x73\x70\x64\x5f\x6e\x6f\x72\x6d" \
-"\x61\x6c\x2c\x20\x73\x70\x64\x5f\x68\x69\x2c\x20\x73\x70\x64\x5f" \
-"\x76\x68\x69\x2c\x20\x73\x70\x64\x5f\x73\x68\x69\x2c\x20\x73\x70" \
-"\x64\x5f\x77\x61\x72\x70\x2c\x20\x73\x70\x64\x5f\x63\x75\x73\x74" \
-"\x0a\x0a\x55\x41\x52\x54\x20\x74\x79\x70\x65\x73\x3a\x0a\x09\x75" \
-"\x6e\x6b\x6e\x6f\x77\x6e\x2c\x20\x38\x32\x35\x30\x2c\x20\x31\x36" \
-"\x34\x35\x30\x2c\x20\x31\x36\x35\x35\x30\x2c\x20\x31\x36\x35\x35" \
-"\x30\x41\x2c\x20\x43\x69\x72\x72\x75\x73\x2c\x20\x31\x36\x36\x35" \
-"\x30\x2c\x20\x31\x36\x36\x35\x30\x56\x32\x2c\x20\x31\x36\x37\x35" \
-"\x30\x2c\x0a\x09\x31\x36\x39\x35\x30\x2c\x20\x31\x36\x39\x35\x34" \
-"\x2c\x20\x31\x36\x36\x35\x34\x2c\x20\x31\x36\x38\x35\x30\x2c\x20" \
-"\x52\x53\x41\x2c\x20\x4e\x53\x31\x36\x35\x35\x30\x41\x2c\x20\x58" \
-"\x53\x43\x41\x4c\x45\x2c\x20\x52\x4d\x39\x30\x30\x30\x2c\x20\x4f" \
-"\x43\x54\x45\x4f\x4e\x2c\x20\x41\x52\x37\x2c\x0a\x09\x55\x36\x5f" \
-"\x31\x36\x35\x35\x30\x41\x00\x50\x52\x4f\x47\x20\x41\x52\x47\x53" \
-"\x0a\x0a\x52\x75\x6e\x20\x50\x52\x4f\x47\x20\x69\x6e\x20\x61\x20" \
-"\x6e\x65\x77\x20\x73\x65\x73\x73\x69\x6f\x6e\x2e\x20\x50\x52\x4f" \
-"\x47\x20\x77\x69\x6c\x6c\x20\x68\x61\x76\x65\x20\x6e\x6f\x20\x63" \
-"\x6f\x6e\x74\x72\x6f\x6c\x6c\x69\x6e\x67\x20\x74\x65\x72\x6d\x69" \
-"\x6e\x61\x6c\x0a\x61\x6e\x64\x20\x77\x69\x6c\x6c\x20\x6e\x6f\x74" \
-"\x20\x62\x65\x20\x61\x66\x66\x65\x63\x74\x65\x64\x20\x62\x79\x20" \
-"\x6b\x65\x79\x62\x6f\x61\x72\x64\x20\x73\x69\x67\x6e\x61\x6c\x73" \
-"\x20\x28\x43\x74\x72\x6c\x2d\x43\x20\x65\x74\x63\x29\x2e\x0a\x53" \
-"\x65\x65\x20\x73\x65\x74\x73\x69\x64\x28\x32\x29\x20\x66\x6f\x72" \
-"\x20\x64\x65\x74\x61\x69\x6c\x73\x2e\x00\x5b\x2d\x2f\x2b\x4f\x50" \
-"\x54\x49\x4f\x4e\x53\x5d\x20\x5b\x2d\x2f\x2b\x6f\x20\x4f\x50\x54" \
-"\x5d\x2e\x2e\x2e\x20\x5b\x2d\x63\x20\x27\x53\x43\x52\x49\x50\x54" \
-"\x27\x20\x5b\x41\x52\x47\x30\x20\x5b\x41\x52\x47\x53\x5d\x5d\x20" \
-"\x2f\x20\x46\x49\x4c\x45\x20\x5b\x41\x52\x47\x53\x5d\x5d\x0a\x0a" \
-"\x55\x6e\x69\x78\x20\x73\x68\x65\x6c\x6c\x20\x69\x6e\x74\x65\x72" \
-"\x70\x72\x65\x74\x65\x72\x00\x5b\x2d\x63\x5b\x73\x77\x5d\x5d\x20" \
-"\x5b\x46\x49\x4c\x45\x5d\x2e\x2e\x2e\x0a\x0a\x50\x72\x69\x6e\x74" \
-"\x20\x6f\x72\x20\x63\x68\x65\x63\x6b\x20\x53\x48\x41\x31\x20\x63" \
-"\x68\x65\x63\x6b\x73\x75\x6d\x73\x0a\x0a\x09\x2d\x63\x09\x43\x68" \
-"\x65\x63\x6b\x20\x73\x75\x6d\x73\x20\x61\x67\x61\x69\x6e\x73\x74" \
-"\x20\x6c\x69\x73\x74\x20\x69\x6e\x20\x46\x49\x4c\x45\x73\x0a\x09" \
-"\x2d\x73\x09\x44\x6f\x6e\x27\x74\x20\x6f\x75\x74\x70\x75\x74\x20" \
-"\x61\x6e\x79\x74\x68\x69\x6e\x67\x2c\x20\x73\x74\x61\x74\x75\x73" \
-"\x20\x63\x6f\x64\x65\x20\x73\x68\x6f\x77\x73\x20\x73\x75\x63\x63" \
-"\x65\x73\x73\x0a\x09\x2d\x77\x09\x57\x61\x72\x6e\x20\x61\x62\x6f" \
-"\x75\x74\x20\x69\x6d\x70\x72\x6f\x70\x65\x72\x6c\x79\x20\x66\x6f" \
-"\x72\x6d\x61\x74\x74\x65\x64\x20\x63\x68\x65\x63\x6b\x73\x75\x6d" \
-"\x20\x6c\x69\x6e\x65\x73\x00\x5b\x2d\x63\x5b\x73\x77\x5d\x5d\x20" \
-"\x5b\x46\x49\x4c\x45\x5d\x2e\x2e\x2e\x0a\x0a\x50\x72\x69\x6e\x74" \
-"\x20\x6f\x72\x20\x63\x68\x65\x63\x6b\x20\x53\x48\x41\x32\x35\x36" \
-"\x20\x63\x68\x65\x63\x6b\x73\x75\x6d\x73\x0a\x0a\x09\x2d\x63\x09" \
-"\x43\x68\x65\x63\x6b\x20\x73\x75\x6d\x73\x20\x61\x67\x61\x69\x6e" \
-"\x73\x74\x20\x6c\x69\x73\x74\x20\x69\x6e\x20\x46\x49\x4c\x45\x73" \
-"\x0a\x09\x2d\x73\x09\x44\x6f\x6e\x27\x74\x20\x6f\x75\x74\x70\x75" \
-"\x74\x20\x61\x6e\x79\x74\x68\x69\x6e\x67\x2c\x20\x73\x74\x61\x74" \
-"\x75\x73\x20\x63\x6f\x64\x65\x20\x73\x68\x6f\x77\x73\x20\x73\x75" \
-"\x63\x63\x65\x73\x73\x0a\x09\x2d\x77\x09\x57\x61\x72\x6e\x20\x61" \
-"\x62\x6f\x75\x74\x20\x69\x6d\x70\x72\x6f\x70\x65\x72\x6c\x79\x20" \
-"\x66\x6f\x72\x6d\x61\x74\x74\x65\x64\x20\x63\x68\x65\x63\x6b\x73" \
-"\x75\x6d\x20\x6c\x69\x6e\x65\x73\x00\x5b\x2d\x63\x5b\x73\x77\x5d" \
-"\x5d\x20\x5b\x46\x49\x4c\x45\x5d\x2e\x2e\x2e\x0a\x0a\x50\x72\x69" \
-"\x6e\x74\x20\x6f\x72\x20\x63\x68\x65\x63\x6b\x20\x53\x48\x41\x33" \
-"\x2d\x35\x31\x32\x20\x63\x68\x65\x63\x6b\x73\x75\x6d\x73\x0a\x0a" \
-"\x09\x2d\x63\x09\x43\x68\x65\x63\x6b\x20\x73\x75\x6d\x73\x20\x61" \
-"\x67\x61\x69\x6e\x73\x74\x20\x6c\x69\x73\x74\x20\x69\x6e\x20\x46" \
-"\x49\x4c\x45\x73\x0a\x09\x2d\x73\x09\x44\x6f\x6e\x27\x74\x20\x6f" \
-"\x75\x74\x70\x75\x74\x20\x61\x6e\x79\x74\x68\x69\x6e\x67\x2c\x20" \
-"\x73\x74\x61\x74\x75\x73\x20\x63\x6f\x64\x65\x20\x73\x68\x6f\x77" \
-"\x73\x20\x73\x75\x63\x63\x65\x73\x73\x0a\x09\x2d\x77\x09\x57\x61" \
-"\x72\x6e\x20\x61\x62\x6f\x75\x74\x20\x69\x6d\x70\x72\x6f\x70\x65" \
-"\x72\x6c\x79\x20\x66\x6f\x72\x6d\x61\x74\x74\x65\x64\x20\x63\x68" \
-"\x65\x63\x6b\x73\x75\x6d\x20\x6c\x69\x6e\x65\x73\x00\x5b\x2d\x63" \
-"\x5b\x73\x77\x5d\x5d\x20\x5b\x46\x49\x4c\x45\x5d\x2e\x2e\x2e\x0a" \
-"\x0a\x50\x72\x69\x6e\x74\x20\x6f\x72\x20\x63\x68\x65\x63\x6b\x20" \
-"\x53\x48\x41\x35\x31\x32\x20\x63\x68\x65\x63\x6b\x73\x75\x6d\x73" \
-"\x0a\x0a\x09\x2d\x63\x09\x43\x68\x65\x63\x6b\x20\x73\x75\x6d\x73" \
-"\x20\x61\x67\x61\x69\x6e\x73\x74\x20\x6c\x69\x73\x74\x20\x69\x6e" \
-"\x20\x46\x49\x4c\x45\x73\x0a\x09\x2d\x73\x09\x44\x6f\x6e\x27\x74" \
-"\x20\x6f\x75\x74\x70\x75\x74\x20\x61\x6e\x79\x74\x68\x69\x6e\x67" \
-"\x2c\x20\x73\x74\x61\x74\x75\x73\x20\x63\x6f\x64\x65\x20\x73\x68" \
-"\x6f\x77\x73\x20\x73\x75\x63\x63\x65\x73\x73\x0a\x09\x2d\x77\x09" \
-"\x57\x61\x72\x6e\x20\x61\x62\x6f\x75\x74\x20\x69\x6d\x70\x72\x6f" \
-"\x70\x65\x72\x6c\x79\x20\x66\x6f\x72\x6d\x61\x74\x74\x65\x64\x20" \
-"\x63\x68\x65\x63\x6b\x73\x75\x6d\x20\x6c\x69\x6e\x65\x73\x00\x5b" \
-"\x4e\x5d\x2e\x2e\x2e\x0a\x0a\x50\x61\x75\x73\x65\x20\x66\x6f\x72" \
-"\x20\x61\x20\x74\x69\x6d\x65\x20\x65\x71\x75\x61\x6c\x20\x74\x6f" \
-"\x20\x74\x68\x65\x20\x74\x6f\x74\x61\x6c\x20\x6f\x66\x20\x74\x68" \
-"\x65\x20\x61\x72\x67\x73\x20\x67\x69\x76\x65\x6e\x2c\x20\x77\x68" \
-"\x65\x72\x65\x20\x65\x61\x63\x68\x20\x61\x72\x67\x20\x63\x61\x6e" \
-"\x0a\x68\x61\x76\x65\x20\x61\x6e\x20\x6f\x70\x74\x69\x6f\x6e\x61" \
-"\x6c\x20\x73\x75\x66\x66\x69\x78\x20\x6f\x66\x20\x28\x73\x29\x65" \
-"\x63\x6f\x6e\x64\x73\x2c\x20\x28\x6d\x29\x69\x6e\x75\x74\x65\x73" \
-"\x2c\x20\x28\x68\x29\x6f\x75\x72\x73\x2c\x20\x6f\x72\x20\x28\x64" \
-"\x29\x61\x79\x73\x00\x5b\x2d\x6e\x72\x75\x67\x4d\x63\x73\x7a\x62" \
-"\x64\x66\x69\x6d\x53\x54\x6f\x6b\x74\x5d\x20\x5b\x2d\x6f\x20\x46" \
-"\x49\x4c\x45\x5d\x20\x5b\x2d\x6b\x20\x73\x74\x61\x72\x74\x5b\x2e" \
-"\x6f\x66\x66\x73\x65\x74\x5d\x5b\x6f\x70\x74\x73\x5d\x5b\x2c\x65" \
-"\x6e\x64\x5b\x2e\x6f\x66\x66\x73\x65\x74\x5d\x5b\x6f\x70\x74\x73" \
-"\x5d\x5d\x20\x5b\x2d\x74\x20\x43\x48\x41\x52\x5d\x20\x5b\x46\x49" \
-"\x4c\x45\x5d\x2e\x2e\x2e\x0a\x0a\x53\x6f\x72\x74\x20\x6c\x69\x6e" \
-"\x65\x73\x20\x6f\x66\x20\x74\x65\x78\x74\x0a\x0a\x09\x2d\x62\x09" \
-"\x49\x67\x6e\x6f\x72\x65\x20\x6c\x65\x61\x64\x69\x6e\x67\x20\x62" \
-"\x6c\x61\x6e\x6b\x73\x0a\x09\x2d\x63\x09\x43\x68\x65\x63\x6b\x20" \
-"\x77\x68\x65\x74\x68\x65\x72\x20\x69\x6e\x70\x75\x74\x20\x69\x73" \
-"\x20\x73\x6f\x72\x74\x65\x64\x0a\x09\x2d\x64\x09\x44\x69\x63\x74" \
-"\x69\x6f\x6e\x61\x72\x79\x20\x6f\x72\x64\x65\x72\x20\x28\x62\x6c" \
-"\x61\x6e\x6b\x20\x6f\x72\x20\x61\x6c\x70\x68\x61\x6e\x75\x6d\x65" \
-"\x72\x69\x63\x20\x6f\x6e\x6c\x79\x29\x0a\x09\x2d\x66\x09\x49\x67" \
-"\x6e\x6f\x72\x65\x20\x63\x61\x73\x65\x0a\x09\x2d\x67\x09\x47\x65" \
-"\x6e\x65\x72\x61\x6c\x20\x6e\x75\x6d\x65\x72\x69\x63\x61\x6c\x20" \
-"\x73\x6f\x72\x74\x0a\x09\x2d\x69\x09\x49\x67\x6e\x6f\x72\x65\x20" \
-"\x75\x6e\x70\x72\x69\x6e\x74\x61\x62\x6c\x65\x20\x63\x68\x61\x72" \
-"\x61\x63\x74\x65\x72\x73\x0a\x09\x2d\x6b\x09\x53\x6f\x72\x74\x20" \
-"\x6b\x65\x79\x0a\x09\x2d\x4d\x09\x53\x6f\x72\x74\x20\x6d\x6f\x6e" \
-"\x74\x68\x0a\x09\x2d\x6e\x09\x53\x6f\x72\x74\x20\x6e\x75\x6d\x62" \
-"\x65\x72\x73\x0a\x09\x2d\x6f\x09\x4f\x75\x74\x70\x75\x74\x20\x74" \
-"\x6f\x20\x66\x69\x6c\x65\x0a\x09\x2d\x6b\x09\x53\x6f\x72\x74\x20" \
-"\x62\x79\x20\x6b\x65\x79\x0a\x09\x2d\x74\x20\x43\x48\x41\x52\x09" \
-"\x4b\x65\x79\x20\x73\x65\x70\x61\x72\x61\x74\x6f\x72\x0a\x09\x2d" \
-"\x72\x09\x52\x65\x76\x65\x72\x73\x65\x20\x73\x6f\x72\x74\x20\x6f" \
-"\x72\x64\x65\x72\x0a\x09\x2d\x73\x09\x53\x74\x61\x62\x6c\x65\x20" \
-"\x28\x64\x6f\x6e\x27\x74\x20\x73\x6f\x72\x74\x20\x74\x69\x65\x73" \
-"\x20\x61\x6c\x70\x68\x61\x62\x65\x74\x69\x63\x61\x6c\x6c\x79\x29" \
-"\x0a\x09\x2d\x75\x09\x53\x75\x70\x70\x72\x65\x73\x73\x20\x64\x75" \
-"\x70\x6c\x69\x63\x61\x74\x65\x20\x6c\x69\x6e\x65\x73\x0a\x09\x2d" \
-"\x7a\x09\x4c\x69\x6e\x65\x73\x20\x61\x72\x65\x20\x74\x65\x72\x6d" \
-"\x69\x6e\x61\x74\x65\x64\x20\x62\x79\x20\x4e\x55\x4c\x2c\x20\x6e" \
-"\x6f\x74\x20\x6e\x65\x77\x6c\x69\x6e\x65\x0a\x09\x2d\x6d\x53\x54" \
-"\x09\x49\x67\x6e\x6f\x72\x65\x64\x20\x66\x6f\x72\x20\x47\x4e\x55" \
-"\x20\x63\x6f\x6d\x70\x61\x74\x69\x62\x69\x6c\x69\x74\x79\x00\x5b" \
-"\x4f\x50\x54\x49\x4f\x4e\x53\x5d\x20\x5b\x49\x4e\x50\x55\x54\x20" \
-"\x5b\x50\x52\x45\x46\x49\x58\x5d\x5d\x0a\x0a\x09\x2d\x62\x20\x4e" \
-"\x5b\x6b\x7c\x6d\x5d\x09\x53\x70\x6c\x69\x74\x20\x62\x79\x20\x4e" \
-"\x20\x28\x6b\x69\x6c\x6f\x7c\x6d\x65\x67\x61\x29\x62\x79\x74\x65" \
-"\x73\x0a\x09\x2d\x6c\x20\x4e\x09\x09\x53\x70\x6c\x69\x74\x20\x62" \
-"\x79\x20\x4e\x20\x6c\x69\x6e\x65\x73\x0a\x09\x2d\x61\x20\x4e\x09" \
-"\x09\x55\x73\x65\x20\x4e\x20\x6c\x65\x74\x74\x65\x72\x73\x20\x61" \
-"\x73\x20\x73\x75\x66\x66\x69\x78\x00\x5b\x4f\x50\x54\x49\x4f\x4e" \
-"\x53\x5d\x20\x46\x49\x4c\x45\x2e\x2e\x2e\x0a\x0a\x44\x69\x73\x70" \
-"\x6c\x61\x79\x20\x66\x69\x6c\x65\x20\x28\x64\x65\x66\x61\x75\x6c" \
-"\x74\x29\x20\x6f\x72\x20\x66\x69\x6c\x65\x73\x79\x73\x74\x65\x6d" \
-"\x20\x73\x74\x61\x74\x75\x73\x0a\x0a\x09\x2d\x66\x09\x44\x69\x73" \
-"\x70\x6c\x61\x79\x20\x66\x69\x6c\x65\x73\x79\x73\x74\x65\x6d\x20" \
-"\x73\x74\x61\x74\x75\x73\x0a\x09\x2d\x4c\x09\x46\x6f\x6c\x6c\x6f" \
-"\x77\x20\x6c\x69\x6e\x6b\x73\x0a\x09\x2d\x74\x09\x44\x69\x73\x70" \
-"\x6c\x61\x79\x20\x69\x6e\x66\x6f\x20\x69\x6e\x20\x74\x65\x72\x73" \
-"\x65\x20\x66\x6f\x72\x6d\x00\x5b\x2d\x61\x66\x6f\x5d\x20\x5b\x2d" \
-"\x6e\x20\x4c\x45\x4e\x5d\x20\x5b\x46\x49\x4c\x45\x5d\x2e\x2e\x2e" \
-"\x0a\x0a\x44\x69\x73\x70\x6c\x61\x79\x20\x70\x72\x69\x6e\x74\x61" \
-"\x62\x6c\x65\x20\x73\x74\x72\x69\x6e\x67\x73\x20\x69\x6e\x20\x61" \
-"\x20\x62\x69\x6e\x61\x72\x79\x20\x66\x69\x6c\x65\x0a\x0a\x09\x2d" \
-"\x61\x09\x53\x63\x61\x6e\x20\x77\x68\x6f\x6c\x65\x20\x66\x69\x6c" \
-"\x65\x20\x28\x64\x65\x66\x61\x75\x6c\x74\x29\x0a\x09\x2d\x66\x09" \
-"\x50\x72\x65\x63\x65\x64\x65\x20\x73\x74\x72\x69\x6e\x67\x73\x20" \
-"\x77\x69\x74\x68\x20\x66\x69\x6c\x65\x6e\x61\x6d\x65\x73\x0a\x09" \
-"\x2d\x6e\x20\x4c\x45\x4e\x09\x41\x74\x20\x6c\x65\x61\x73\x74\x20" \
-"\x4c\x45\x4e\x20\x63\x68\x61\x72\x61\x63\x74\x65\x72\x73\x20\x66" \
-"\x6f\x72\x6d\x20\x61\x20\x73\x74\x72\x69\x6e\x67\x20\x28\x64\x65" \
-"\x66\x61\x75\x6c\x74\x20\x34\x29\x0a\x09\x2d\x6f\x09\x50\x72\x65" \
-"\x63\x65\x64\x65\x20\x73\x74\x72\x69\x6e\x67\x73\x20\x77\x69\x74" \
-"\x68\x20\x64\x65\x63\x69\x6d\x61\x6c\x20\x6f\x66\x66\x73\x65\x74" \
-"\x73\x00\x5b\x2d\x61\x7c\x67\x5d\x20\x5b\x2d\x46\x20\x44\x45\x56" \
-"\x49\x43\x45\x5d\x20\x5b\x53\x45\x54\x54\x49\x4e\x47\x5d\x2e\x2e" \
-"\x2e\x0a\x0a\x57\x69\x74\x68\x6f\x75\x74\x20\x61\x72\x67\x75\x6d" \
-"\x65\x6e\x74\x73\x2c\x20\x70\x72\x69\x6e\x74\x73\x20\x62\x61\x75" \
-"\x64\x20\x72\x61\x74\x65\x2c\x20\x6c\x69\x6e\x65\x20\x64\x69\x73" \
-"\x63\x69\x70\x6c\x69\x6e\x65\x2c\x0a\x61\x6e\x64\x20\x64\x65\x76" \
-"\x69\x61\x74\x69\x6f\x6e\x73\x20\x66\x72\x6f\x6d\x20\x73\x74\x74" \
-"\x79\x20\x73\x61\x6e\x65\x0a\x0a\x09\x2d\x46\x20\x44\x45\x56\x49" \
-"\x43\x45\x09\x4f\x70\x65\x6e\x20\x64\x65\x76\x69\x63\x65\x20\x69" \
-"\x6e\x73\x74\x65\x61\x64\x20\x6f\x66\x20\x73\x74\x64\x69\x6e\x0a" \
-"\x09\x2d\x61\x09\x09\x50\x72\x69\x6e\x74\x20\x61\x6c\x6c\x20\x63" \
-"\x75\x72\x72\x65\x6e\x74\x20\x73\x65\x74\x74\x69\x6e\x67\x73\x20" \
-"\x69\x6e\x20\x68\x75\x6d\x61\x6e\x2d\x72\x65\x61\x64\x61\x62\x6c" \
-"\x65\x20\x66\x6f\x72\x6d\x0a\x09\x2d\x67\x09\x09\x50\x72\x69\x6e" \
-"\x74\x20\x69\x6e\x20\x73\x74\x74\x79\x2d\x72\x65\x61\x64\x61\x62" \
-"\x6c\x65\x20\x66\x6f\x72\x6d\x0a\x09\x5b\x53\x45\x54\x54\x49\x4e" \
-"\x47\x5d\x09\x53\x65\x65\x20\x6d\x61\x6e\x70\x61\x67\x65\x00\x5b" \
-"\x2d\x72\x73\x5d\x20\x5b\x46\x49\x4c\x45\x5d\x2e\x2e\x2e\x0a\x0a" \
-"\x43\x68\x65\x63\x6b\x73\x75\x6d\x20\x61\x6e\x64\x20\x63\x6f\x75" \
-"\x6e\x74\x20\x74\x68\x65\x20\x62\x6c\x6f\x63\x6b\x73\x20\x69\x6e" \
-"\x20\x61\x20\x66\x69\x6c\x65\x0a\x0a\x09\x2d\x72\x09\x55\x73\x65" \
-"\x20\x42\x53\x44\x20\x73\x75\x6d\x20\x61\x6c\x67\x6f\x72\x69\x74" \
-"\x68\x6d\x20\x28\x31\x4b\x20\x62\x6c\x6f\x63\x6b\x73\x29\x0a\x09" \
-"\x2d\x73\x09\x55\x73\x65\x20\x53\x79\x73\x74\x65\x6d\x20\x56\x20" \
-"\x73\x75\x6d\x20\x61\x6c\x67\x6f\x72\x69\x74\x68\x6d\x20\x28\x35" \
-"\x31\x32\x62\x79\x74\x65\x20\x62\x6c\x6f\x63\x6b\x73\x29\x00\x5b" \
-"\x2d\x61\x5d\x20\x5b\x44\x45\x56\x49\x43\x45\x5d\x0a\x0a\x53\x74" \
-"\x6f\x70\x20\x73\x77\x61\x70\x70\x69\x6e\x67\x20\x6f\x6e\x20\x44" \
-"\x45\x56\x49\x43\x45\x0a\x0a\x09\x2d\x61\x09\x53\x74\x6f\x70\x20" \
-"\x73\x77\x61\x70\x70\x69\x6e\x67\x20\x6f\x6e\x20\x61\x6c\x6c\x20" \
-"\x73\x77\x61\x70\x20\x64\x65\x76\x69\x63\x65\x73\x00\x5b\x2d\x61" \
-"\x5d\x20\x5b\x44\x45\x56\x49\x43\x45\x5d\x0a\x0a\x53\x74\x61\x72" \
-"\x74\x20\x73\x77\x61\x70\x70\x69\x6e\x67\x20\x6f\x6e\x20\x44\x45" \
-"\x56\x49\x43\x45\x0a\x0a\x09\x2d\x61\x09\x53\x74\x61\x72\x74\x20" \
-"\x73\x77\x61\x70\x70\x69\x6e\x67\x20\x6f\x6e\x20\x61\x6c\x6c\x20" \
-"\x73\x77\x61\x70\x20\x64\x65\x76\x69\x63\x65\x73\x00\x0a\x0a\x57" \
-"\x72\x69\x74\x65\x20\x61\x6c\x6c\x20\x62\x75\x66\x66\x65\x72\x65" \
-"\x64\x20\x62\x6c\x6f\x63\x6b\x73\x20\x74\x6f\x20\x64\x69\x73\x6b" \
-"\x00\x5b\x4f\x50\x54\x49\x4f\x4e\x53\x5d\x20\x5b\x4b\x45\x59\x5b" \
-"\x3d\x56\x41\x4c\x55\x45\x5d\x5d\x2e\x2e\x2e\x0a\x0a\x53\x68\x6f" \
-"\x77\x2f\x73\x65\x74\x20\x6b\x65\x72\x6e\x65\x6c\x20\x70\x61\x72" \
-"\x61\x6d\x65\x74\x65\x72\x73\x0a\x0a\x09\x2d\x65\x09\x44\x6f\x6e" \
-"\x27\x74\x20\x77\x61\x72\x6e\x20\x61\x62\x6f\x75\x74\x20\x75\x6e" \
-"\x6b\x6e\x6f\x77\x6e\x20\x6b\x65\x79\x73\x0a\x09\x2d\x6e\x09\x44" \
-"\x6f\x6e\x27\x74\x20\x73\x68\x6f\x77\x20\x6b\x65\x79\x20\x6e\x61" \
-"\x6d\x65\x73\x0a\x09\x2d\x61\x09\x53\x68\x6f\x77\x20\x61\x6c\x6c" \
-"\x20\x76\x61\x6c\x75\x65\x73\x0a\x09\x2d\x77\x09\x53\x65\x74\x20" \
-"\x76\x61\x6c\x75\x65\x73\x0a\x09\x2d\x70\x20\x46\x49\x4c\x45\x09" \
-"\x53\x65\x74\x20\x76\x61\x6c\x75\x65\x73\x20\x66\x72\x6f\x6d\x20" \
-"\x46\x49\x4c\x45\x20\x28\x64\x65\x66\x61\x75\x6c\x74\x20\x2f\x65" \
-"\x74\x63\x2f\x73\x79\x73\x63\x74\x6c\x2e\x63\x6f\x6e\x66\x29\x0a" \
-"\x09\x2d\x71\x20\x20\x20\x20\x20\x20\x53\x65\x74\x20\x76\x61\x6c" \
-"\x75\x65\x73\x20\x73\x69\x6c\x65\x6e\x74\x6c\x79\x00\x5b\x46\x49" \
-"\x4c\x45\x5d\x2e\x2e\x2e\x0a\x0a\x43\x6f\x6e\x63\x61\x74\x65\x6e" \
-"\x61\x74\x65\x20\x46\x49\x4c\x45\x73\x20\x61\x6e\x64\x20\x70\x72" \
-"\x69\x6e\x74\x20\x74\x68\x65\x6d\x20\x69\x6e\x20\x72\x65\x76\x65" \
-"\x72\x73\x65\x00\x5b\x4f\x50\x54\x49\x4f\x4e\x53\x5d\x20\x5b\x46" \
-"\x49\x4c\x45\x5d\x2e\x2e\x2e\x0a\x0a\x50\x72\x69\x6e\x74\x20\x6c" \
-"\x61\x73\x74\x20\x31\x30\x20\x6c\x69\x6e\x65\x73\x20\x6f\x66\x20" \
-"\x65\x61\x63\x68\x20\x46\x49\x4c\x45\x20\x28\x6f\x72\x20\x73\x74" \
-"\x64\x69\x6e\x29\x20\x74\x6f\x20\x73\x74\x64\x6f\x75\x74\x2e\x0a" \
-"\x57\x69\x74\x68\x20\x6d\x6f\x72\x65\x20\x74\x68\x61\x6e\x20\x6f" \
-"\x6e\x65\x20\x46\x49\x4c\x45\x2c\x20\x70\x72\x65\x63\x65\x64\x65" \
-"\x20\x65\x61\x63\x68\x20\x77\x69\x74\x68\x20\x61\x20\x66\x69\x6c" \
-"\x65\x6e\x61\x6d\x65\x20\x68\x65\x61\x64\x65\x72\x2e\x0a\x0a\x09" \
-"\x2d\x66\x09\x09\x50\x72\x69\x6e\x74\x20\x64\x61\x74\x61\x20\x61" \
-"\x73\x20\x66\x69\x6c\x65\x20\x67\x72\x6f\x77\x73\x0a\x09\x2d\x73" \
-"\x20\x53\x45\x43\x4f\x4e\x44\x53\x09\x57\x61\x69\x74\x20\x53\x45" \
-"\x43\x4f\x4e\x44\x53\x20\x62\x65\x74\x77\x65\x65\x6e\x20\x72\x65" \
-"\x61\x64\x73\x20\x77\x69\x74\x68\x20\x2d\x66\x0a\x09\x2d\x6e\x20" \
-"\x4e\x5b\x6b\x62\x6d\x5d\x09\x50\x72\x69\x6e\x74\x20\x6c\x61\x73" \
-"\x74\x20\x4e\x20\x6c\x69\x6e\x65\x73\x0a\x09\x2d\x63\x20\x4e\x5b" \
-"\x6b\x62\x6d\x5d\x09\x50\x72\x69\x6e\x74\x20\x6c\x61\x73\x74\x20" \
-"\x4e\x20\x62\x79\x74\x65\x73\x0a\x09\x2d\x71\x09\x09\x4e\x65\x76" \
-"\x65\x72\x20\x70\x72\x69\x6e\x74\x20\x68\x65\x61\x64\x65\x72\x73" \
-"\x0a\x09\x2d\x76\x09\x09\x41\x6c\x77\x61\x79\x73\x20\x70\x72\x69" \
-"\x6e\x74\x20\x68\x65\x61\x64\x65\x72\x73\x0a\x0a\x4e\x20\x6d\x61" \
-"\x79\x20\x62\x65\x20\x73\x75\x66\x66\x69\x78\x65\x64\x20\x62\x79" \
-"\x20\x6b\x20\x28\x78\x31\x30\x32\x34\x29\x2c\x20\x62\x20\x28\x78" \
-"\x35\x31\x32\x29\x2c\x20\x6f\x72\x20\x6d\x20\x28\x78\x31\x30\x32" \
-"\x34\x5e\x32\x29\x2e\x0a\x49\x66\x20\x4e\x20\x73\x74\x61\x72\x74" \
-"\x73\x20\x77\x69\x74\x68\x20\x61\x20\x27\x2b\x27\x2c\x20\x6f\x75" \
-"\x74\x70\x75\x74\x20\x62\x65\x67\x69\x6e\x73\x20\x77\x69\x74\x68" \
-"\x20\x74\x68\x65\x20\x4e\x74\x68\x20\x69\x74\x65\x6d\x20\x66\x72" \
-"\x6f\x6d\x20\x74\x68\x65\x20\x73\x74\x61\x72\x74\x0a\x6f\x66\x20" \
-"\x65\x61\x63\x68\x20\x66\x69\x6c\x65\x2c\x20\x6e\x6f\x74\x20\x66" \
-"\x72\x6f\x6d\x20\x74\x68\x65\x20\x65\x6e\x64\x2e\x00\x2d\x5b\x63" \
-"\x78\x74\x7a\x4a\x6a\x61\x68\x6d\x76\x4f\x5d\x20\x5b\x2d\x58\x20" \
-"\x46\x49\x4c\x45\x5d\x20\x5b\x2d\x54\x20\x46\x49\x4c\x45\x5d\x20" \
-"\x5b\x2d\x66\x20\x54\x41\x52\x46\x49\x4c\x45\x5d\x20\x5b\x2d\x43" \
-"\x20\x44\x49\x52\x5d\x20\x5b\x46\x49\x4c\x45\x5d\x2e\x2e\x2e\x0a" \
-"\x0a\x43\x72\x65\x61\x74\x65\x2c\x20\x65\x78\x74\x72\x61\x63\x74" \
-"\x2c\x20\x6f\x72\x20\x6c\x69\x73\x74\x20\x66\x69\x6c\x65\x73\x20" \
-"\x66\x72\x6f\x6d\x20\x61\x20\x74\x61\x72\x20\x66\x69\x6c\x65\x0a" \
-"\x0a\x4f\x70\x65\x72\x61\x74\x69\x6f\x6e\x3a\x0a\x09\x63\x09\x43" \
-"\x72\x65\x61\x74\x65\x0a\x09\x78\x09\x45\x78\x74\x72\x61\x63\x74" \
-"\x0a\x09\x74\x09\x4c\x69\x73\x74\x0a\x09\x66\x09\x4e\x61\x6d\x65" \
-"\x20\x6f\x66\x20\x54\x41\x52\x46\x49\x4c\x45\x20\x28\x27\x2d\x27" \
-"\x20\x66\x6f\x72\x20\x73\x74\x64\x69\x6e\x2f\x6f\x75\x74\x29\x0a" \
-"\x09\x43\x09\x43\x68\x61\x6e\x67\x65\x20\x74\x6f\x20\x44\x49\x52" \
-"\x20\x62\x65\x66\x6f\x72\x65\x20\x6f\x70\x65\x72\x61\x74\x69\x6f" \
-"\x6e\x0a\x09\x76\x09\x56\x65\x72\x62\x6f\x73\x65\x0a\x09\x7a\x09" \
-"\x28\x44\x65\x29\x63\x6f\x6d\x70\x72\x65\x73\x73\x20\x75\x73\x69" \
-"\x6e\x67\x20\x67\x7a\x69\x70\x0a\x09\x4a\x09\x28\x44\x65\x29\x63" \
-"\x6f\x6d\x70\x72\x65\x73\x73\x20\x75\x73\x69\x6e\x67\x20\x78\x7a" \
-"\x0a\x09\x6a\x09\x28\x44\x65\x29\x63\x6f\x6d\x70\x72\x65\x73\x73" \
-"\x20\x75\x73\x69\x6e\x67\x20\x62\x7a\x69\x70\x32\x0a\x09\x61\x09" \
-"\x28\x44\x65\x29\x63\x6f\x6d\x70\x72\x65\x73\x73\x20\x75\x73\x69" \
-"\x6e\x67\x20\x6c\x7a\x6d\x61\x0a\x09\x4f\x09\x45\x78\x74\x72\x61" \
-"\x63\x74\x20\x74\x6f\x20\x73\x74\x64\x6f\x75\x74\x0a\x09\x68\x09" \
-"\x46\x6f\x6c\x6c\x6f\x77\x20\x73\x79\x6d\x6c\x69\x6e\x6b\x73\x0a" \
-"\x09\x6d\x09\x44\x6f\x6e\x27\x74\x20\x72\x65\x73\x74\x6f\x72\x65" \
-"\x20\x6d\x74\x69\x6d\x65\x0a\x09\x65\x78\x63\x6c\x75\x64\x65\x09" \
-"\x46\x69\x6c\x65\x20\x74\x6f\x20\x65\x78\x63\x6c\x75\x64\x65\x0a" \
-"\x09\x58\x09\x46\x69\x6c\x65\x20\x77\x69\x74\x68\x20\x6e\x61\x6d" \
-"\x65\x73\x20\x74\x6f\x20\x65\x78\x63\x6c\x75\x64\x65\x0a\x09\x54" \
-"\x09\x46\x69\x6c\x65\x20\x77\x69\x74\x68\x20\x6e\x61\x6d\x65\x73" \
-"\x20\x74\x6f\x20\x69\x6e\x63\x6c\x75\x64\x65\x00\x5b\x2d\x70\x5d" \
-"\x20\x5b\x4d\x41\x53\x4b\x5d\x20\x5b\x50\x49\x44\x20\x7c\x20\x50" \
-"\x52\x4f\x47\x20\x41\x52\x47\x53\x5d\x0a\x0a\x53\x65\x74\x20\x6f" \
-"\x72\x20\x67\x65\x74\x20\x43\x50\x55\x20\x61\x66\x66\x69\x6e\x69" \
-"\x74\x79\x0a\x0a\x09\x2d\x70\x09\x4f\x70\x65\x72\x61\x74\x65\x20" \
-"\x6f\x6e\x20\x61\x6e\x20\x65\x78\x69\x73\x74\x69\x6e\x67\x20\x50" \
-"\x49\x44\x00\x5b\x2d\x61\x69\x5d\x20\x5b\x46\x49\x4c\x45\x5d\x2e" \
-"\x2e\x2e\x0a\x0a\x43\x6f\x70\x79\x20\x73\x74\x64\x69\x6e\x20\x74" \
-"\x6f\x20\x65\x61\x63\x68\x20\x46\x49\x4c\x45\x2c\x20\x61\x6e\x64" \
-"\x20\x61\x6c\x73\x6f\x20\x74\x6f\x20\x73\x74\x64\x6f\x75\x74\x0a" \
-"\x0a\x09\x2d\x61\x09\x41\x70\x70\x65\x6e\x64\x20\x74\x6f\x20\x74" \
-"\x68\x65\x20\x67\x69\x76\x65\x6e\x20\x46\x49\x4c\x45\x73\x2c\x20" \
-"\x64\x6f\x6e\x27\x74\x20\x6f\x76\x65\x72\x77\x72\x69\x74\x65\x0a" \
-"\x09\x2d\x69\x09\x49\x67\x6e\x6f\x72\x65\x20\x69\x6e\x74\x65\x72" \
-"\x72\x75\x70\x74\x20\x73\x69\x67\x6e\x61\x6c\x73\x20\x28\x53\x49" \
-"\x47\x49\x4e\x54\x29\x00\x48\x4f\x53\x54\x20\x5b\x50\x4f\x52\x54" \
-"\x5d\x0a\x0a\x43\x6f\x6e\x6e\x65\x63\x74\x20\x74\x6f\x20\x74\x65" \
-"\x6c\x6e\x65\x74\x20\x73\x65\x72\x76\x65\x72\x00\x5b\x4f\x50\x54" \
-"\x49\x4f\x4e\x53\x5d\x0a\x0a\x48\x61\x6e\x64\x6c\x65\x20\x69\x6e" \
-"\x63\x6f\x6d\x69\x6e\x67\x20\x74\x65\x6c\x6e\x65\x74\x20\x63\x6f" \
-"\x6e\x6e\x65\x63\x74\x69\x6f\x6e\x73\x0a\x0a\x09\x2d\x6c\x20\x4c" \
-"\x4f\x47\x49\x4e\x09\x45\x78\x65\x63\x20\x4c\x4f\x47\x49\x4e\x20" \
-"\x6f\x6e\x20\x63\x6f\x6e\x6e\x65\x63\x74\x0a\x09\x2d\x66\x20\x49" \
-"\x53\x53\x55\x45\x5f\x46\x49\x4c\x45\x09\x44\x69\x73\x70\x6c\x61" \
-"\x79\x20\x49\x53\x53\x55\x45\x5f\x46\x49\x4c\x45\x20\x69\x6e\x73" \
-"\x74\x65\x61\x64\x20\x6f\x66\x20\x2f\x65\x74\x63\x2f\x69\x73\x73" \
-"\x75\x65\x0a\x09\x2d\x4b\x09\x09\x43\x6c\x6f\x73\x65\x20\x63\x6f" \
-"\x6e\x6e\x65\x63\x74\x69\x6f\x6e\x20\x61\x73\x20\x73\x6f\x6f\x6e" \
-"\x20\x61\x73\x20\x6c\x6f\x67\x69\x6e\x20\x65\x78\x69\x74\x73\x0a" \
-"\x09\x09\x09\x28\x6e\x6f\x72\x6d\x61\x6c\x6c\x79\x20\x77\x61\x69" \
-"\x74\x20\x75\x6e\x74\x69\x6c\x20\x61\x6c\x6c\x20\x70\x72\x6f\x67" \
-"\x72\x61\x6d\x73\x20\x63\x6c\x6f\x73\x65\x20\x73\x6c\x61\x76\x65" \
-"\x20\x70\x74\x79\x29\x0a\x09\x2d\x70\x20\x50\x4f\x52\x54\x09\x09" \
-"\x50\x6f\x72\x74\x20\x74\x6f\x20\x6c\x69\x73\x74\x65\x6e\x20\x6f" \
-"\x6e\x0a\x09\x2d\x62\x20\x41\x44\x44\x52\x5b\x3a\x50\x4f\x52\x54" \
-"\x5d\x09\x41\x64\x64\x72\x65\x73\x73\x20\x74\x6f\x20\x62\x69\x6e" \
-"\x64\x20\x74\x6f\x0a\x09\x2d\x46\x09\x09\x52\x75\x6e\x20\x69\x6e" \
-"\x20\x66\x6f\x72\x65\x67\x72\x6f\x75\x6e\x64\x0a\x09\x2d\x69\x09" \
-"\x09\x49\x6e\x65\x74\x64\x20\x6d\x6f\x64\x65\x0a\x09\x2d\x77\x20" \
-"\x53\x45\x43\x09\x09\x49\x6e\x65\x74\x64\x20\x27\x77\x61\x69\x74" \
-"\x27\x20\x6d\x6f\x64\x65\x2c\x20\x6c\x69\x6e\x67\x65\x72\x20\x74" \
-"\x69\x6d\x65\x20\x53\x45\x43\x0a\x09\x2d\x53\x09\x09\x4c\x6f\x67" \
-"\x20\x74\x6f\x20\x73\x79\x73\x6c\x6f\x67\x20\x28\x69\x6d\x70\x6c" \
-"\x69\x65\x64\x20\x62\x79\x20\x2d\x69\x20\x6f\x72\x20\x77\x69\x74" \
-"\x68\x6f\x75\x74\x20\x2d\x46\x20\x61\x6e\x64\x20\x2d\x77\x29\x00" \
-"\x45\x58\x50\x52\x45\x53\x53\x49\x4f\x4e\x20\x5d\x0a\x0a\x43\x68" \
-"\x65\x63\x6b\x20\x66\x69\x6c\x65\x20\x74\x79\x70\x65\x73\x2c\x20" \
-"\x63\x6f\x6d\x70\x61\x72\x65\x20\x76\x61\x6c\x75\x65\x73\x20\x65" \
-"\x74\x63\x2e\x20\x52\x65\x74\x75\x72\x6e\x20\x61\x20\x30\x2f\x31" \
-"\x20\x65\x78\x69\x74\x20\x63\x6f\x64\x65\x0a\x64\x65\x70\x65\x6e" \
-"\x64\x69\x6e\x67\x20\x6f\x6e\x20\x6c\x6f\x67\x69\x63\x61\x6c\x20" \
-"\x76\x61\x6c\x75\x65\x20\x6f\x66\x20\x45\x58\x50\x52\x45\x53\x53" \
-"\x49\x4f\x4e\x00\x5b\x4f\x50\x54\x49\x4f\x4e\x53\x5d\x20\x48\x4f" \
-"\x53\x54\x20\x5b\x50\x4f\x52\x54\x5d\x0a\x0a\x54\x72\x61\x6e\x73" \
-"\x66\x65\x72\x20\x61\x20\x66\x69\x6c\x65\x20\x66\x72\x6f\x6d\x2f" \
-"\x74\x6f\x20\x74\x66\x74\x70\x20\x73\x65\x72\x76\x65\x72\x0a\x0a" \
-"\x09\x2d\x6c\x20\x46\x49\x4c\x45\x09\x4c\x6f\x63\x61\x6c\x20\x46" \
-"\x49\x4c\x45\x0a\x09\x2d\x72\x20\x46\x49\x4c\x45\x09\x52\x65\x6d" \
-"\x6f\x74\x65\x20\x46\x49\x4c\x45\x0a\x09\x2d\x67\x09\x47\x65\x74" \
-"\x20\x66\x69\x6c\x65\x0a\x09\x2d\x70\x09\x50\x75\x74\x20\x66\x69" \
-"\x6c\x65\x00\x5b\x2d\x63\x72\x5d\x20\x5b\x2d\x75\x20\x55\x53\x45" \
-"\x52\x5d\x20\x5b\x44\x49\x52\x5d\x0a\x0a\x54\x72\x61\x6e\x73\x66" \
-"\x65\x72\x20\x61\x20\x66\x69\x6c\x65\x20\x6f\x6e\x20\x74\x66\x74" \
-"\x70\x20\x63\x6c\x69\x65\x6e\x74\x27\x73\x20\x72\x65\x71\x75\x65" \
-"\x73\x74\x0a\x0a\x74\x66\x74\x70\x64\x20\x73\x68\x6f\x75\x6c\x64" \
-"\x20\x62\x65\x20\x75\x73\x65\x64\x20\x61\x73\x20\x61\x6e\x20\x69" \
-"\x6e\x65\x74\x64\x20\x73\x65\x72\x76\x69\x63\x65\x2e\x0a\x74\x66" \
-"\x74\x70\x64\x27\x73\x20\x6c\x69\x6e\x65\x20\x66\x6f\x72\x20\x69" \
-"\x6e\x65\x74\x64\x2e\x63\x6f\x6e\x66\x3a\x0a\x09\x36\x39\x20\x64" \
-"\x67\x72\x61\x6d\x20\x75\x64\x70\x20\x6e\x6f\x77\x61\x69\x74\x20" \
-"\x72\x6f\x6f\x74\x20\x74\x66\x74\x70\x64\x20\x74\x66\x74\x70\x64" \
-"\x20\x2d\x6c\x20\x2f\x66\x69\x6c\x65\x73\x2f\x74\x6f\x2f\x73\x65" \
-"\x72\x76\x65\x0a\x49\x74\x20\x61\x6c\x73\x6f\x20\x63\x61\x6e\x20" \
-"\x62\x65\x20\x72\x61\x6e\x20\x66\x72\x6f\x6d\x20\x75\x64\x70\x73" \
-"\x76\x64\x3a\x0a\x09\x75\x64\x70\x73\x76\x64\x20\x2d\x76\x45\x20" \
-"\x30\x2e\x30\x2e\x30\x2e\x30\x20\x36\x39\x20\x74\x66\x74\x70\x64" \
-"\x20\x2f\x66\x69\x6c\x65\x73\x2f\x74\x6f\x2f\x73\x65\x72\x76\x65" \
-"\x0a\x0a\x09\x2d\x72\x09\x50\x72\x6f\x68\x69\x62\x69\x74\x20\x75" \
-"\x70\x6c\x6f\x61\x64\x0a\x09\x2d\x63\x09\x41\x6c\x6c\x6f\x77\x20" \
-"\x66\x69\x6c\x65\x20\x63\x72\x65\x61\x74\x69\x6f\x6e\x20\x76\x69" \
-"\x61\x20\x75\x70\x6c\x6f\x61\x64\x0a\x09\x2d\x75\x09\x41\x63\x63" \
-"\x65\x73\x73\x20\x66\x69\x6c\x65\x73\x20\x61\x73\x20\x55\x53\x45" \
-"\x52\x0a\x09\x2d\x6c\x09\x4c\x6f\x67\x20\x74\x6f\x20\x73\x79\x73" \
-"\x6c\x6f\x67\x20\x28\x69\x6e\x65\x74\x64\x20\x6d\x6f\x64\x65\x20" \
-"\x72\x65\x71\x75\x69\x72\x65\x73\x20\x74\x68\x69\x73\x29\x00\x5b" \
-"\x2d\x76\x5d\x20\x50\x52\x4f\x47\x20\x41\x52\x47\x53\x0a\x0a\x52" \
-"\x75\x6e\x20\x50\x52\x4f\x47\x2c\x20\x64\x69\x73\x70\x6c\x61\x79" \
-"\x20\x72\x65\x73\x6f\x75\x72\x63\x65\x20\x75\x73\x61\x67\x65\x20" \
-"\x77\x68\x65\x6e\x20\x69\x74\x20\x65\x78\x69\x74\x73\x0a\x0a\x09" \
-"\x2d\x76\x09\x56\x65\x72\x62\x6f\x73\x65\x00\x5b\x2d\x74\x20\x53" \
-"\x45\x43\x53\x5d\x20\x5b\x2d\x73\x20\x53\x49\x47\x5d\x20\x50\x52" \
-"\x4f\x47\x20\x41\x52\x47\x53\x0a\x0a\x52\x75\x6e\x73\x20\x50\x52" \
-"\x4f\x47\x2e\x20\x53\x65\x6e\x64\x73\x20\x53\x49\x47\x20\x74\x6f" \
-"\x20\x69\x74\x20\x69\x66\x20\x69\x74\x20\x69\x73\x20\x6e\x6f\x74" \
-"\x20\x67\x6f\x6e\x65\x20\x69\x6e\x20\x53\x45\x43\x53\x20\x73\x65" \
-"\x63\x6f\x6e\x64\x73\x2e\x0a\x44\x65\x66\x61\x75\x6c\x74\x73\x3a" \
-"\x20\x53\x45\x43\x53\x3a\x20\x31\x30\x2c\x20\x53\x49\x47\x3a\x20" \
-"\x54\x45\x52\x4d\x2e\x00\x5b\x2d\x62\x5d\x20\x5b\x2d\x6e\x43\x4f" \
-"\x55\x4e\x54\x5d\x20\x5b\x2d\x64\x53\x45\x43\x4f\x4e\x44\x53\x5d" \
-"\x20\x5b\x2d\x6d\x5d\x0a\x0a\x50\x72\x6f\x76\x69\x64\x65\x20\x61" \
-"\x20\x76\x69\x65\x77\x20\x6f\x66\x20\x70\x72\x6f\x63\x65\x73\x73" \
-"\x20\x61\x63\x74\x69\x76\x69\x74\x79\x20\x69\x6e\x20\x72\x65\x61" \
-"\x6c\x20\x74\x69\x6d\x65\x2e\x0a\x52\x65\x61\x64\x20\x74\x68\x65" \
-"\x20\x73\x74\x61\x74\x75\x73\x20\x6f\x66\x20\x61\x6c\x6c\x20\x70" \
-"\x72\x6f\x63\x65\x73\x73\x65\x73\x20\x66\x72\x6f\x6d\x20\x2f\x70" \
-"\x72\x6f\x63\x20\x65\x61\x63\x68\x20\x53\x45\x43\x4f\x4e\x44\x53" \
-"\x0a\x61\x6e\x64\x20\x64\x69\x73\x70\x6c\x61\x79\x20\x61\x20\x73" \
-"\x63\x72\x65\x65\x6e\x66\x75\x6c\x20\x6f\x66\x20\x74\x68\x65\x6d" \
-"\x2e\x0a\x4b\x65\x79\x73\x3a\x0a\x09\x4e\x2f\x4d\x2f\x50\x2f\x54" \
-"\x3a\x20\x73\x68\x6f\x77\x20\x43\x50\x55\x20\x75\x73\x61\x67\x65" \
-"\x2c\x20\x73\x6f\x72\x74\x20\x62\x79\x20\x70\x69\x64\x2f\x6d\x65" \
-"\x6d\x2f\x63\x70\x75\x2f\x74\x69\x6d\x65\x0a\x09\x53\x3a\x20\x73" \
-"\x68\x6f\x77\x20\x6d\x65\x6d\x6f\x72\x79\x0a\x09\x52\x3a\x20\x72" \
-"\x65\x76\x65\x72\x73\x65\x20\x73\x6f\x72\x74\x0a\x09\x48\x3a\x20" \
-"\x74\x6f\x67\x67\x6c\x65\x20\x74\x68\x72\x65\x61\x64\x73\x2c\x20" \
-"\x31\x3a\x20\x74\x6f\x67\x67\x6c\x65\x20\x53\x4d\x50\x0a\x09\x51" \
-"\x2c\x5e\x43\x3a\x20\x65\x78\x69\x74\x0a\x0a\x4f\x70\x74\x69\x6f" \
-"\x6e\x73\x3a\x0a\x09\x2d\x62\x09\x42\x61\x74\x63\x68\x20\x6d\x6f" \
-"\x64\x65\x0a\x09\x2d\x6e\x20\x4e\x09\x45\x78\x69\x74\x20\x61\x66" \
-"\x74\x65\x72\x20\x4e\x20\x69\x74\x65\x72\x61\x74\x69\x6f\x6e\x73" \
-"\x0a\x09\x2d\x64\x20\x4e\x09\x44\x65\x6c\x61\x79\x20\x62\x65\x74" \
-"\x77\x65\x65\x6e\x20\x75\x70\x64\x61\x74\x65\x73\x0a\x09\x2d\x6d" \
-"\x09\x53\x61\x6d\x65\x20\x61\x73\x20\x27\x73\x27\x20\x6b\x65\x79" \
-"\x00\x5b\x2d\x63\x5d\x20\x5b\x2d\x64\x20\x44\x41\x54\x45\x5d\x20" \
-"\x5b\x2d\x74\x20\x44\x41\x54\x45\x5d\x20\x5b\x2d\x72\x20\x46\x49" \
-"\x4c\x45\x5d\x20\x46\x49\x4c\x45\x2e\x2e\x2e\x0a\x0a\x55\x70\x64" \
-"\x61\x74\x65\x20\x74\x68\x65\x20\x6c\x61\x73\x74\x2d\x6d\x6f\x64" \
-"\x69\x66\x69\x65\x64\x20\x64\x61\x74\x65\x20\x6f\x6e\x20\x74\x68" \
-"\x65\x20\x67\x69\x76\x65\x6e\x20\x46\x49\x4c\x45\x5b\x73\x5d\x0a" \
-"\x0a\x09\x2d\x63\x09\x44\x6f\x6e\x27\x74\x20\x63\x72\x65\x61\x74" \
-"\x65\x20\x66\x69\x6c\x65\x73\x0a\x09\x2d\x64\x20\x44\x54\x09\x44" \
-"\x61\x74\x65\x2f\x74\x69\x6d\x65\x20\x74\x6f\x20\x75\x73\x65\x0a" \
-"\x09\x2d\x74\x20\x44\x54\x09\x44\x61\x74\x65\x2f\x74\x69\x6d\x65" \
-"\x20\x74\x6f\x20\x75\x73\x65\x0a\x09\x2d\x72\x20\x46\x49\x4c\x45" \
-"\x09\x55\x73\x65\x20\x46\x49\x4c\x45\x27\x73\x20\x64\x61\x74\x65" \
-"\x2f\x74\x69\x6d\x65\x00\x5b\x2d\x63\x64\x73\x5d\x20\x53\x54\x52" \
-"\x49\x4e\x47\x31\x20\x5b\x53\x54\x52\x49\x4e\x47\x32\x5d\x0a\x0a" \
-"\x54\x72\x61\x6e\x73\x6c\x61\x74\x65\x2c\x20\x73\x71\x75\x65\x65" \
-"\x7a\x65\x2c\x20\x6f\x72\x20\x64\x65\x6c\x65\x74\x65\x20\x63\x68" \
-"\x61\x72\x61\x63\x74\x65\x72\x73\x20\x66\x72\x6f\x6d\x20\x73\x74" \
-"\x64\x69\x6e\x2c\x20\x77\x72\x69\x74\x69\x6e\x67\x20\x74\x6f\x20" \
-"\x73\x74\x64\x6f\x75\x74\x0a\x0a\x09\x2d\x63\x09\x54\x61\x6b\x65" \
-"\x20\x63\x6f\x6d\x70\x6c\x65\x6d\x65\x6e\x74\x20\x6f\x66\x20\x53" \
-"\x54\x52\x49\x4e\x47\x31\x0a\x09\x2d\x64\x09\x44\x65\x6c\x65\x74" \
-"\x65\x20\x69\x6e\x70\x75\x74\x20\x63\x68\x61\x72\x61\x63\x74\x65" \
-"\x72\x73\x20\x63\x6f\x64\x65\x64\x20\x53\x54\x52\x49\x4e\x47\x31" \
-"\x0a\x09\x2d\x73\x09\x53\x71\x75\x65\x65\x7a\x65\x20\x6d\x75\x6c" \
-"\x74\x69\x70\x6c\x65\x20\x6f\x75\x74\x70\x75\x74\x20\x63\x68\x61" \
-"\x72\x61\x63\x74\x65\x72\x73\x20\x6f\x66\x20\x53\x54\x52\x49\x4e" \
-"\x47\x32\x20\x69\x6e\x74\x6f\x20\x6f\x6e\x65\x20\x63\x68\x61\x72" \
-"\x61\x63\x74\x65\x72\x00\x5b\x2d\x46\x49\x6c\x64\x6e\x72\x76\x5d" \
-"\x20\x5b\x2d\x66\x20\x31\x53\x54\x5f\x54\x54\x4c\x5d\x20\x5b\x2d" \
-"\x6d\x20\x4d\x41\x58\x54\x54\x4c\x5d\x20\x5b\x2d\x70\x20\x50\x4f" \
-"\x52\x54\x5d\x20\x5b\x2d\x71\x20\x50\x52\x4f\x42\x45\x53\x5d\x0a" \
-"\x09\x5b\x2d\x73\x20\x53\x52\x43\x5f\x49\x50\x5d\x20\x5b\x2d\x74" \
-"\x20\x54\x4f\x53\x5d\x20\x5b\x2d\x77\x20\x57\x41\x49\x54\x5f\x53" \
-"\x45\x43\x5d\x20\x5b\x2d\x67\x20\x47\x41\x54\x45\x57\x41\x59\x5d" \
-"\x20\x5b\x2d\x69\x20\x49\x46\x41\x43\x45\x5d\x0a\x09\x5b\x2d\x7a" \
-"\x20\x50\x41\x55\x53\x45\x5f\x4d\x53\x45\x43\x5d\x20\x48\x4f\x53" \
-"\x54\x20\x5b\x42\x59\x54\x45\x53\x5d\x0a\x0a\x54\x72\x61\x63\x65" \
-"\x20\x74\x68\x65\x20\x72\x6f\x75\x74\x65\x20\x74\x6f\x20\x48\x4f" \
-"\x53\x54\x0a\x0a\x09\x2d\x46\x09\x53\x65\x74\x20\x74\x68\x65\x20" \
-"\x64\x6f\x6e\x27\x74\x20\x66\x72\x61\x67\x6d\x65\x6e\x74\x20\x62" \
-"\x69\x74\x0a\x09\x2d\x49\x09\x55\x73\x65\x20\x49\x43\x4d\x50\x20" \
-"\x45\x43\x48\x4f\x20\x69\x6e\x73\x74\x65\x61\x64\x20\x6f\x66\x20" \
-"\x55\x44\x50\x20\x64\x61\x74\x61\x67\x72\x61\x6d\x73\x0a\x09\x2d" \
-"\x6c\x09\x44\x69\x73\x70\x6c\x61\x79\x20\x74\x68\x65\x20\x54\x54" \
-"\x4c\x20\x76\x61\x6c\x75\x65\x20\x6f\x66\x20\x74\x68\x65\x20\x72" \
-"\x65\x74\x75\x72\x6e\x65\x64\x20\x70\x61\x63\x6b\x65\x74\x0a\x09" \
-"\x2d\x64\x09\x53\x65\x74\x20\x53\x4f\x5f\x44\x45\x42\x55\x47\x20" \
-"\x6f\x70\x74\x69\x6f\x6e\x73\x20\x74\x6f\x20\x73\x6f\x63\x6b\x65" \
-"\x74\x0a\x09\x2d\x6e\x09\x50\x72\x69\x6e\x74\x20\x6e\x75\x6d\x65" \
-"\x72\x69\x63\x20\x61\x64\x64\x72\x65\x73\x73\x65\x73\x0a\x09\x2d" \
-"\x72\x09\x42\x79\x70\x61\x73\x73\x20\x72\x6f\x75\x74\x69\x6e\x67" \
-"\x20\x74\x61\x62\x6c\x65\x73\x2c\x20\x73\x65\x6e\x64\x20\x64\x69" \
-"\x72\x65\x63\x74\x6c\x79\x20\x74\x6f\x20\x48\x4f\x53\x54\x0a\x09" \
-"\x2d\x76\x09\x56\x65\x72\x62\x6f\x73\x65\x0a\x09\x2d\x6d\x09\x4d" \
-"\x61\x78\x20\x74\x69\x6d\x65\x2d\x74\x6f\x2d\x6c\x69\x76\x65\x20" \
-"\x28\x6d\x61\x78\x20\x6e\x75\x6d\x62\x65\x72\x20\x6f\x66\x20\x68" \
-"\x6f\x70\x73\x29\x0a\x09\x2d\x70\x09\x42\x61\x73\x65\x20\x55\x44" \
-"\x50\x20\x70\x6f\x72\x74\x20\x6e\x75\x6d\x62\x65\x72\x20\x75\x73" \
-"\x65\x64\x20\x69\x6e\x20\x70\x72\x6f\x62\x65\x73\x0a\x09\x09\x28" \
-"\x64\x65\x66\x61\x75\x6c\x74\x20\x33\x33\x34\x33\x34\x29\x0a\x09" \
-"\x2d\x71\x09\x4e\x75\x6d\x62\x65\x72\x20\x6f\x66\x20\x70\x72\x6f" \
-"\x62\x65\x73\x20\x70\x65\x72\x20\x54\x54\x4c\x20\x28\x64\x65\x66" \
-"\x61\x75\x6c\x74\x20\x33\x29\x0a\x09\x2d\x73\x09\x49\x50\x20\x61" \
-"\x64\x64\x72\x65\x73\x73\x20\x74\x6f\x20\x75\x73\x65\x20\x61\x73" \
-"\x20\x74\x68\x65\x20\x73\x6f\x75\x72\x63\x65\x20\x61\x64\x64\x72" \
-"\x65\x73\x73\x0a\x09\x2d\x74\x09\x54\x79\x70\x65\x2d\x6f\x66\x2d" \
-"\x73\x65\x72\x76\x69\x63\x65\x20\x69\x6e\x20\x70\x72\x6f\x62\x65" \
-"\x20\x70\x61\x63\x6b\x65\x74\x73\x20\x28\x64\x65\x66\x61\x75\x6c" \
-"\x74\x20\x30\x29\x0a\x09\x2d\x77\x09\x54\x69\x6d\x65\x20\x69\x6e" \
-"\x20\x73\x65\x63\x6f\x6e\x64\x73\x20\x74\x6f\x20\x77\x61\x69\x74" \
-"\x20\x66\x6f\x72\x20\x61\x20\x72\x65\x73\x70\x6f\x6e\x73\x65\x20" \
-"\x28\x64\x65\x66\x61\x75\x6c\x74\x20\x33\x29\x0a\x09\x2d\x67\x09" \
-"\x4c\x6f\x6f\x73\x65\x20\x73\x6f\x75\x72\x63\x65\x20\x72\x6f\x75" \
-"\x74\x65\x20\x67\x61\x74\x65\x77\x61\x79\x20\x28\x38\x20\x6d\x61" \
-"\x78\x29\x00\x0a\x0a\x52\x65\x74\x75\x72\x6e\x20\x61\x6e\x20\x65" \
-"\x78\x69\x74\x20\x63\x6f\x64\x65\x20\x6f\x66\x20\x54\x52\x55\x45" \
-"\x20\x28\x30\x29\x00\x5b\x77\x5d\x20\x5b\x68\x5d\x0a\x0a\x50\x72" \
-"\x69\x6e\x74\x20\x64\x69\x6d\x65\x6e\x73\x69\x6f\x6e\x28\x73\x29" \
-"\x20\x6f\x66\x20\x73\x74\x64\x69\x6e\x27\x73\x20\x74\x65\x72\x6d" \
-"\x69\x6e\x61\x6c\x2c\x20\x6f\x6e\x20\x65\x72\x72\x6f\x72\x20\x72" \
-"\x65\x74\x75\x72\x6e\x20\x38\x30\x78\x32\x35\x00\x5b\x2d\x63\x20" \
-"\x4d\x41\x58\x5f\x4d\x4f\x55\x4e\x54\x5f\x43\x4f\x55\x4e\x54\x5d" \
-"\x20\x5b\x2d\x69\x20\x44\x41\x59\x53\x5d\x20\x5b\x2d\x43\x20\x4d" \
-"\x4f\x55\x4e\x54\x5f\x43\x4f\x55\x4e\x54\x5d\x20\x5b\x2d\x4c\x20" \
-"\x4c\x41\x42\x45\x4c\x5d\x20\x42\x4c\x4f\x43\x4b\x44\x45\x56\x0a" \
-"\x0a\x41\x64\x6a\x75\x73\x74\x20\x66\x69\x6c\x65\x73\x79\x73\x74" \
-"\x65\x6d\x20\x6f\x70\x74\x69\x6f\x6e\x73\x20\x6f\x6e\x20\x65\x78" \
-"\x74\x5b\x32\x33\x5d\x20\x66\x69\x6c\x65\x73\x79\x73\x74\x65\x6d" \
-"\x73\x00\x5b\x4f\x50\x54\x49\x4f\x4e\x53\x5d\x20\x46\x49\x4c\x45" \
-"\x53\x59\x53\x54\x45\x4d\x7c\x44\x49\x52\x45\x43\x54\x4f\x52\x59" \
-"\x0a\x0a\x55\x6e\x6d\x6f\x75\x6e\x74\x20\x66\x69\x6c\x65\x20\x73" \
-"\x79\x73\x74\x65\x6d\x73\x0a\x0a\x09\x2d\x61\x09\x55\x6e\x6d\x6f" \
-"\x75\x6e\x74\x20\x61\x6c\x6c\x20\x66\x69\x6c\x65\x20\x73\x79\x73" \
-"\x74\x65\x6d\x73\x0a\x09\x2d\x72\x09\x54\x72\x79\x20\x74\x6f\x20" \
-"\x72\x65\x6d\x6f\x75\x6e\x74\x20\x64\x65\x76\x69\x63\x65\x73\x20" \
-"\x61\x73\x20\x72\x65\x61\x64\x2d\x6f\x6e\x6c\x79\x20\x69\x66\x20" \
-"\x6d\x6f\x75\x6e\x74\x20\x69\x73\x20\x62\x75\x73\x79\x0a\x09\x2d" \
-"\x6c\x09\x4c\x61\x7a\x79\x20\x75\x6d\x6f\x75\x6e\x74\x20\x28\x64" \
-"\x65\x74\x61\x63\x68\x20\x66\x69\x6c\x65\x73\x79\x73\x74\x65\x6d" \
-"\x29\x0a\x09\x2d\x66\x09\x46\x6f\x72\x63\x65\x20\x75\x6d\x6f\x75" \
-"\x6e\x74\x20\x28\x69\x2e\x65\x2e\x2c\x20\x75\x6e\x72\x65\x61\x63" \
-"\x68\x61\x62\x6c\x65\x20\x4e\x46\x53\x20\x73\x65\x72\x76\x65\x72" \
-"\x29\x0a\x09\x2d\x64\x09\x46\x72\x65\x65\x20\x6c\x6f\x6f\x70\x20" \
-"\x64\x65\x76\x69\x63\x65\x20\x65\x76\x65\x6e\x20\x69\x66\x20\x69" \
-"\x74\x20\x68\x61\x73\x20\x62\x65\x65\x6e\x20\x75\x73\x65\x64\x00" \
-"\x5b\x2d\x61\x6d\x6e\x72\x73\x70\x76\x5d\x0a\x0a\x50\x72\x69\x6e" \
-"\x74\x20\x73\x79\x73\x74\x65\x6d\x20\x69\x6e\x66\x6f\x72\x6d\x61" \
-"\x74\x69\x6f\x6e\x0a\x0a\x09\x2d\x61\x09\x50\x72\x69\x6e\x74\x20" \
-"\x61\x6c\x6c\x0a\x09\x2d\x6d\x09\x54\x68\x65\x20\x6d\x61\x63\x68" \
-"\x69\x6e\x65\x20\x28\x68\x61\x72\x64\x77\x61\x72\x65\x29\x20\x74" \
-"\x79\x70\x65\x0a\x09\x2d\x6e\x09\x48\x6f\x73\x74\x6e\x61\x6d\x65" \
-"\x0a\x09\x2d\x72\x09\x4f\x53\x20\x72\x65\x6c\x65\x61\x73\x65\x0a" \
-"\x09\x2d\x73\x09\x4f\x53\x20\x6e\x61\x6d\x65\x20\x28\x64\x65\x66" \
-"\x61\x75\x6c\x74\x29\x0a\x09\x2d\x70\x09\x50\x72\x6f\x63\x65\x73" \
-"\x73\x6f\x72\x20\x74\x79\x70\x65\x0a\x09\x2d\x76\x09\x4f\x53\x20" \
-"\x76\x65\x72\x73\x69\x6f\x6e\x00\x5b\x2d\x63\x66\x5d\x20\x5b\x46" \
-"\x49\x4c\x45\x5d\x2e\x2e\x2e\x0a\x0a\x44\x65\x63\x6f\x6d\x70\x72" \
-"\x65\x73\x73\x20\x2e\x5a\x20\x66\x69\x6c\x65\x5b\x73\x5d\x0a\x0a" \
-"\x09\x2d\x63\x09\x57\x72\x69\x74\x65\x20\x74\x6f\x20\x73\x74\x64" \
-"\x6f\x75\x74\x0a\x09\x2d\x66\x09\x4f\x76\x65\x72\x77\x72\x69\x74" \
-"\x65\x00\x5b\x2d\x66\x61\x5d\x5b\x2d\x74\x20\x4e\x5d\x20\x5b\x46" \
-"\x49\x4c\x45\x5d\x2e\x2e\x2e\x0a\x0a\x43\x6f\x6e\x76\x65\x72\x74" \
-"\x20\x73\x70\x61\x63\x65\x73\x20\x74\x6f\x20\x74\x61\x62\x73\x2c" \
-"\x20\x77\x72\x69\x74\x69\x6e\x67\x20\x74\x6f\x20\x73\x74\x64\x6f" \
-"\x75\x74\x0a\x0a\x09\x2d\x61\x2c\x2d\x2d\x61\x6c\x6c\x09\x43\x6f" \
-"\x6e\x76\x65\x72\x74\x20\x61\x6c\x6c\x20\x62\x6c\x61\x6e\x6b\x73" \
-"\x0a\x09\x2d\x66\x2c\x2d\x2d\x66\x69\x72\x73\x74\x2d\x6f\x6e\x6c" \
-"\x79\x09\x43\x6f\x6e\x76\x65\x72\x74\x20\x6f\x6e\x6c\x79\x20\x6c" \
-"\x65\x61\x64\x69\x6e\x67\x20\x62\x6c\x61\x6e\x6b\x73\x0a\x09\x2d" \
-"\x74\x2c\x2d\x2d\x74\x61\x62\x73\x3d\x4e\x09\x54\x61\x62\x73\x74" \
-"\x6f\x70\x73\x20\x65\x76\x65\x72\x79\x20\x4e\x20\x63\x68\x61\x72" \
-"\x73\x00\x5b\x2d\x63\x64\x75\x5d\x5b\x2d\x66\x2c\x73\x2c\x77\x20" \
-"\x4e\x5d\x20\x5b\x49\x4e\x50\x55\x54\x20\x5b\x4f\x55\x54\x50\x55" \
-"\x54\x5d\x5d\x0a\x0a\x44\x69\x73\x63\x61\x72\x64\x20\x64\x75\x70" \
-"\x6c\x69\x63\x61\x74\x65\x20\x6c\x69\x6e\x65\x73\x0a\x0a\x09\x2d" \
-"\x63\x09\x50\x72\x65\x66\x69\x78\x20\x6c\x69\x6e\x65\x73\x20\x62" \
-"\x79\x20\x74\x68\x65\x20\x6e\x75\x6d\x62\x65\x72\x20\x6f\x66\x20" \
-"\x6f\x63\x63\x75\x72\x72\x65\x6e\x63\x65\x73\x0a\x09\x2d\x64\x09" \
-"\x4f\x6e\x6c\x79\x20\x70\x72\x69\x6e\x74\x20\x64\x75\x70\x6c\x69" \
-"\x63\x61\x74\x65\x20\x6c\x69\x6e\x65\x73\x0a\x09\x2d\x75\x09\x4f" \
-"\x6e\x6c\x79\x20\x70\x72\x69\x6e\x74\x20\x75\x6e\x69\x71\x75\x65" \
-"\x20\x6c\x69\x6e\x65\x73\x0a\x09\x2d\x66\x20\x4e\x09\x53\x6b\x69" \
-"\x70\x20\x66\x69\x72\x73\x74\x20\x4e\x20\x66\x69\x65\x6c\x64\x73" \
-"\x0a\x09\x2d\x73\x20\x4e\x09\x53\x6b\x69\x70\x20\x66\x69\x72\x73" \
-"\x74\x20\x4e\x20\x63\x68\x61\x72\x73\x20\x28\x61\x66\x74\x65\x72" \
-"\x20\x61\x6e\x79\x20\x73\x6b\x69\x70\x70\x65\x64\x20\x66\x69\x65" \
-"\x6c\x64\x73\x29\x0a\x09\x2d\x77\x20\x4e\x09\x43\x6f\x6d\x70\x61" \
-"\x72\x65\x20\x4e\x20\x63\x68\x61\x72\x61\x63\x74\x65\x72\x73\x20" \
-"\x69\x6e\x20\x6c\x69\x6e\x65\x00\x5b\x2d\x75\x64\x5d\x20\x5b\x46" \
-"\x49\x4c\x45\x5d\x0a\x0a\x43\x6f\x6e\x76\x65\x72\x74\x20\x46\x49" \
-"\x4c\x45\x20\x69\x6e\x2d\x70\x6c\x61\x63\x65\x20\x66\x72\x6f\x6d" \
-"\x20\x55\x6e\x69\x78\x20\x74\x6f\x20\x44\x4f\x53\x20\x66\x6f\x72" \
-"\x6d\x61\x74\x2e\x0a\x57\x68\x65\x6e\x20\x6e\x6f\x20\x66\x69\x6c" \
-"\x65\x20\x69\x73\x20\x67\x69\x76\x65\x6e\x2c\x20\x75\x73\x65\x20" \
-"\x73\x74\x64\x69\x6e\x2f\x73\x74\x64\x6f\x75\x74\x2e\x0a\x0a\x09" \
-"\x2d\x75\x09\x64\x6f\x73\x32\x75\x6e\x69\x78\x0a\x09\x2d\x64\x09" \
-"\x75\x6e\x69\x78\x32\x64\x6f\x73\x00\x5b\x2d\x63\x66\x5d\x20\x5b" \
-"\x46\x49\x4c\x45\x5d\x2e\x2e\x2e\x0a\x0a\x44\x65\x63\x6f\x6d\x70" \
-"\x72\x65\x73\x73\x20\x46\x49\x4c\x45\x20\x28\x6f\x72\x20\x73\x74" \
-"\x64\x69\x6e\x29\x0a\x0a\x09\x2d\x63\x09\x57\x72\x69\x74\x65\x20" \
-"\x74\x6f\x20\x73\x74\x64\x6f\x75\x74\x0a\x09\x2d\x66\x09\x46\x6f" \
-"\x72\x63\x65\x00\x5b\x2d\x63\x66\x76\x43\x46\x5d\x20\x5b\x46\x49" \
-"\x4c\x45\x5d\x2e\x2e\x2e\x0a\x0a\x09\x2d\x63\x09\x57\x72\x69\x74" \
-"\x65\x20\x74\x6f\x20\x73\x74\x64\x6f\x75\x74\x0a\x09\x2d\x66\x09" \
-"\x46\x6f\x72\x63\x65\x0a\x09\x2d\x76\x09\x56\x65\x72\x62\x6f\x73" \
-"\x65\x0a\x09\x2d\x46\x09\x44\x6f\x6e\x27\x74\x20\x73\x74\x6f\x72" \
-"\x65\x20\x6f\x72\x20\x76\x65\x72\x69\x66\x79\x20\x63\x68\x65\x63" \
-"\x6b\x73\x75\x6d\x00\x5b\x2d\x63\x66\x5d\x20\x5b\x46\x49\x4c\x45" \
-"\x5d\x2e\x2e\x2e\x0a\x0a\x44\x65\x63\x6f\x6d\x70\x72\x65\x73\x73" \
-"\x20\x46\x49\x4c\x45\x20\x28\x6f\x72\x20\x73\x74\x64\x69\x6e\x29" \
-"\x0a\x0a\x09\x2d\x63\x09\x57\x72\x69\x74\x65\x20\x74\x6f\x20\x73" \
-"\x74\x64\x6f\x75\x74\x0a\x09\x2d\x66\x09\x46\x6f\x72\x63\x65\x00" \
-"\x5b\x2d\x6c\x6e\x6f\x70\x71\x5d\x20\x46\x49\x4c\x45\x5b\x2e\x7a" \
-"\x69\x70\x5d\x20\x5b\x46\x49\x4c\x45\x5d\x2e\x2e\x2e\x20\x5b\x2d" \
-"\x78\x20\x46\x49\x4c\x45\x2e\x2e\x2e\x5d\x20\x5b\x2d\x64\x20\x44" \
-"\x49\x52\x5d\x0a\x0a\x45\x78\x74\x72\x61\x63\x74\x20\x46\x49\x4c" \
-"\x45\x73\x20\x66\x72\x6f\x6d\x20\x5a\x49\x50\x20\x61\x72\x63\x68" \
-"\x69\x76\x65\x0a\x0a\x09\x2d\x6c\x09\x4c\x69\x73\x74\x20\x63\x6f" \
-"\x6e\x74\x65\x6e\x74\x73\x20\x28\x77\x69\x74\x68\x20\x2d\x71\x20" \
-"\x66\x6f\x72\x20\x73\x68\x6f\x72\x74\x20\x66\x6f\x72\x6d\x29\x0a" \
-"\x09\x2d\x6e\x09\x4e\x65\x76\x65\x72\x20\x6f\x76\x65\x72\x77\x72" \
-"\x69\x74\x65\x20\x66\x69\x6c\x65\x73\x20\x28\x64\x65\x66\x61\x75" \
-"\x6c\x74\x3a\x20\x61\x73\x6b\x29\x0a\x09\x2d\x6f\x09\x4f\x76\x65" \
-"\x72\x77\x72\x69\x74\x65\x0a\x09\x2d\x70\x09\x50\x72\x69\x6e\x74" \
-"\x20\x74\x6f\x20\x73\x74\x64\x6f\x75\x74\x0a\x09\x2d\x71\x09\x51" \
-"\x75\x69\x65\x74\x0a\x09\x2d\x78\x20\x46\x49\x4c\x45\x09\x45\x78" \
-"\x63\x6c\x75\x64\x65\x20\x46\x49\x4c\x45\x73\x0a\x09\x2d\x64\x20" \
-"\x44\x49\x52\x09\x45\x78\x74\x72\x61\x63\x74\x20\x69\x6e\x74\x6f" \
-"\x20\x44\x49\x52\x00\x0a\x0a\x44\x69\x73\x70\x6c\x61\x79\x20\x74" \
-"\x68\x65\x20\x74\x69\x6d\x65\x20\x73\x69\x6e\x63\x65\x20\x74\x68" \
-"\x65\x20\x6c\x61\x73\x74\x20\x62\x6f\x6f\x74\x00\x4e\x0a\x0a\x50" \
-"\x61\x75\x73\x65\x20\x66\x6f\x72\x20\x4e\x20\x6d\x69\x63\x72\x6f" \
-"\x73\x65\x63\x6f\x6e\x64\x73\x00\x5b\x2d\x6f\x20\x4f\x55\x54\x46" \
-"\x49\x4c\x45\x5d\x20\x5b\x49\x4e\x46\x49\x4c\x45\x5d\x0a\x0a\x55" \
-"\x75\x64\x65\x63\x6f\x64\x65\x20\x61\x20\x66\x69\x6c\x65\x0a\x46" \
-"\x69\x6e\x64\x73\x20\x4f\x55\x54\x46\x49\x4c\x45\x20\x69\x6e\x20" \
-"\x75\x75\x65\x6e\x63\x6f\x64\x65\x64\x20\x73\x6f\x75\x72\x63\x65" \
-"\x20\x75\x6e\x6c\x65\x73\x73\x20\x2d\x6f\x20\x69\x73\x20\x67\x69" \
-"\x76\x65\x6e\x00\x5b\x2d\x6d\x5d\x20\x5b\x46\x49\x4c\x45\x5d\x20" \
-"\x53\x54\x4f\x52\x45\x44\x5f\x46\x49\x4c\x45\x4e\x41\x4d\x45\x0a" \
-"\x0a\x55\x75\x65\x6e\x63\x6f\x64\x65\x20\x46\x49\x4c\x45\x20\x28" \
-"\x6f\x72\x20\x73\x74\x64\x69\x6e\x29\x20\x74\x6f\x20\x73\x74\x64" \
-"\x6f\x75\x74\x0a\x0a\x09\x2d\x6d\x09\x55\x73\x65\x20\x62\x61\x73" \
-"\x65\x36\x34\x20\x65\x6e\x63\x6f\x64\x69\x6e\x67\x20\x70\x65\x72" \
-"\x20\x52\x46\x43\x31\x35\x32\x31\x00\x5b\x4f\x50\x54\x49\x4f\x4e" \
-"\x53\x5d\x20\x5b\x46\x49\x4c\x45\x5d\x2e\x2e\x2e\x0a\x0a\x45\x64" \
-"\x69\x74\x20\x46\x49\x4c\x45\x0a\x0a\x09\x2d\x63\x20\x43\x4d\x44" \
-"\x09\x49\x6e\x69\x74\x69\x61\x6c\x20\x63\x6f\x6d\x6d\x61\x6e\x64" \
-"\x20\x74\x6f\x20\x72\x75\x6e\x20\x28\x24\x45\x58\x49\x4e\x49\x54" \
-"\x20\x61\x6c\x73\x6f\x20\x61\x76\x61\x69\x6c\x61\x62\x6c\x65\x29" \
-"\x0a\x09\x2d\x52\x09\x52\x65\x61\x64\x2d\x6f\x6e\x6c\x79\x0a\x09" \
-"\x2d\x48\x09\x4c\x69\x73\x74\x20\x61\x76\x61\x69\x6c\x61\x62\x6c" \
-"\x65\x20\x66\x65\x61\x74\x75\x72\x65\x73\x00\x5b\x2d\x6e\x20\x53" \
-"\x45\x43\x5d\x20\x5b\x2d\x74\x5d\x20\x50\x52\x4f\x47\x20\x41\x52" \
-"\x47\x53\x0a\x0a\x52\x75\x6e\x20\x50\x52\x4f\x47\x20\x70\x65\x72" \
-"\x69\x6f\x64\x69\x63\x61\x6c\x6c\x79\x0a\x0a\x09\x2d\x6e\x09\x4c" \
-"\x6f\x6f\x70\x20\x70\x65\x72\x69\x6f\x64\x20\x69\x6e\x20\x73\x65" \
-"\x63\x6f\x6e\x64\x73\x20\x28\x64\x65\x66\x61\x75\x6c\x74\x20\x32" \
-"\x29\x0a\x09\x2d\x74\x09\x44\x6f\x6e\x27\x74\x20\x70\x72\x69\x6e" \
-"\x74\x20\x68\x65\x61\x64\x65\x72\x00\x5b\x2d\x63\x6d\x6c\x77\x4c" \
-"\x5d\x20\x5b\x46\x49\x4c\x45\x5d\x2e\x2e\x2e\x0a\x0a\x43\x6f\x75" \
-"\x6e\x74\x20\x6c\x69\x6e\x65\x73\x2c\x20\x77\x6f\x72\x64\x73\x2c" \
-"\x20\x61\x6e\x64\x20\x62\x79\x74\x65\x73\x20\x66\x6f\x72\x20\x65" \
-"\x61\x63\x68\x20\x46\x49\x4c\x45\x20\x28\x6f\x72\x20\x73\x74\x64" \
-"\x69\x6e\x29\x0a\x0a\x09\x2d\x63\x09\x43\x6f\x75\x6e\x74\x20\x62" \
-"\x79\x74\x65\x73\x0a\x09\x2d\x6d\x09\x43\x6f\x75\x6e\x74\x20\x63" \
-"\x68\x61\x72\x61\x63\x74\x65\x72\x73\x0a\x09\x2d\x6c\x09\x43\x6f" \
-"\x75\x6e\x74\x20\x6e\x65\x77\x6c\x69\x6e\x65\x73\x0a\x09\x2d\x77" \
-"\x09\x43\x6f\x75\x6e\x74\x20\x77\x6f\x72\x64\x73\x0a\x09\x2d\x4c" \
-"\x09\x50\x72\x69\x6e\x74\x20\x6c\x6f\x6e\x67\x65\x73\x74\x20\x6c" \
-"\x69\x6e\x65\x20\x6c\x65\x6e\x67\x74\x68\x00\x5b\x2d\x63\x7c\x2d" \
-"\x2d\x63\x6f\x6e\x74\x69\x6e\x75\x65\x5d\x20\x5b\x2d\x73\x7c\x2d" \
-"\x2d\x73\x70\x69\x64\x65\x72\x5d\x20\x5b\x2d\x71\x7c\x2d\x2d\x71" \
-"\x75\x69\x65\x74\x5d\x20\x5b\x2d\x4f\x7c\x2d\x2d\x6f\x75\x74\x70" \
-"\x75\x74\x2d\x64\x6f\x63\x75\x6d\x65\x6e\x74\x20\x46\x49\x4c\x45" \
-"\x5d\x0a\x09\x5b\x2d\x2d\x68\x65\x61\x64\x65\x72\x20\x27\x68\x65" \
-"\x61\x64\x65\x72\x3a\x20\x76\x61\x6c\x75\x65\x27\x5d\x20\x5b\x2d" \
-"\x59\x7c\x2d\x2d\x70\x72\x6f\x78\x79\x20\x6f\x6e\x2f\x6f\x66\x66" \
-"\x5d\x20\x5b\x2d\x50\x20\x44\x49\x52\x5d\x0a\x09\x5b\x2d\x55\x7c" \
-"\x2d\x2d\x75\x73\x65\x72\x2d\x61\x67\x65\x6e\x74\x20\x41\x47\x45" \
-"\x4e\x54\x5d\x20\x5b\x2d\x54\x20\x53\x45\x43\x5d\x20\x55\x52\x4c" \
-"\x2e\x2e\x2e\x0a\x0a\x52\x65\x74\x72\x69\x65\x76\x65\x20\x66\x69" \
-"\x6c\x65\x73\x20\x76\x69\x61\x20\x48\x54\x54\x50\x20\x6f\x72\x20" \
-"\x46\x54\x50\x0a\x0a\x09\x2d\x73\x09\x53\x70\x69\x64\x65\x72\x20" \
-"\x6d\x6f\x64\x65\x20\x2d\x20\x6f\x6e\x6c\x79\x20\x63\x68\x65\x63" \
-"\x6b\x20\x66\x69\x6c\x65\x20\x65\x78\x69\x73\x74\x65\x6e\x63\x65" \
-"\x0a\x09\x2d\x63\x09\x43\x6f\x6e\x74\x69\x6e\x75\x65\x20\x72\x65" \
-"\x74\x72\x69\x65\x76\x61\x6c\x20\x6f\x66\x20\x61\x62\x6f\x72\x74" \
-"\x65\x64\x20\x74\x72\x61\x6e\x73\x66\x65\x72\x0a\x09\x2d\x71\x09" \
-"\x51\x75\x69\x65\x74\x0a\x09\x2d\x50\x20\x44\x49\x52\x09\x53\x61" \
-"\x76\x65\x20\x74\x6f\x20\x44\x49\x52\x20\x28\x64\x65\x66\x61\x75" \
-"\x6c\x74\x20\x2e\x29\x0a\x09\x2d\x54\x20\x53\x45\x43\x09\x4e\x65" \
-"\x74\x77\x6f\x72\x6b\x20\x72\x65\x61\x64\x20\x74\x69\x6d\x65\x6f" \
-"\x75\x74\x20\x69\x73\x20\x53\x45\x43\x20\x73\x65\x63\x6f\x6e\x64" \
-"\x73\x0a\x09\x2d\x4f\x20\x46\x49\x4c\x45\x09\x53\x61\x76\x65\x20" \
-"\x74\x6f\x20\x46\x49\x4c\x45\x20\x28\x27\x2d\x27\x20\x66\x6f\x72" \
-"\x20\x73\x74\x64\x6f\x75\x74\x29\x0a\x09\x2d\x55\x20\x53\x54\x52" \
-"\x09\x55\x73\x65\x20\x53\x54\x52\x20\x66\x6f\x72\x20\x55\x73\x65" \
-"\x72\x2d\x41\x67\x65\x6e\x74\x20\x68\x65\x61\x64\x65\x72\x0a\x09" \
-"\x2d\x59\x09\x55\x73\x65\x20\x70\x72\x6f\x78\x79\x20\x28\x27\x6f" \
-"\x6e\x27\x20\x6f\x72\x20\x27\x6f\x66\x66\x27\x29\x00\x5b\x43\x4f" \
-"\x4d\x4d\x41\x4e\x44\x5d\x2e\x2e\x2e\x0a\x0a\x4c\x6f\x63\x61\x74" \
-"\x65\x20\x61\x20\x43\x4f\x4d\x4d\x41\x4e\x44\x00\x0a\x0a\x50\x72" \
-"\x69\x6e\x74\x20\x74\x68\x65\x20\x75\x73\x65\x72\x20\x6e\x61\x6d" \
-"\x65\x20\x61\x73\x73\x6f\x63\x69\x61\x74\x65\x64\x20\x77\x69\x74" \
-"\x68\x20\x74\x68\x65\x20\x63\x75\x72\x72\x65\x6e\x74\x20\x65\x66" \
-"\x66\x65\x63\x74\x69\x76\x65\x20\x75\x73\x65\x72\x20\x69\x64\x00" \
-"\x5b\x4f\x50\x54\x49\x4f\x4e\x53\x5d\x20\x5b\x50\x52\x4f\x47\x20" \
-"\x41\x52\x47\x53\x5d\x0a\x0a\x52\x75\x6e\x20\x50\x52\x4f\x47\x20" \
-"\x6f\x6e\x20\x65\x76\x65\x72\x79\x20\x69\x74\x65\x6d\x20\x67\x69" \
-"\x76\x65\x6e\x20\x62\x79\x20\x73\x74\x64\x69\x6e\x0a\x0a\x09\x2d" \
-"\x70\x09\x41\x73\x6b\x20\x75\x73\x65\x72\x20\x77\x68\x65\x74\x68" \
-"\x65\x72\x20\x74\x6f\x20\x72\x75\x6e\x20\x65\x61\x63\x68\x20\x63" \
-"\x6f\x6d\x6d\x61\x6e\x64\x0a\x09\x2d\x72\x09\x44\x6f\x6e\x27\x74" \
-"\x20\x72\x75\x6e\x20\x63\x6f\x6d\x6d\x61\x6e\x64\x20\x69\x66\x20" \
-"\x69\x6e\x70\x75\x74\x20\x69\x73\x20\x65\x6d\x70\x74\x79\x0a\x09" \
-"\x2d\x30\x09\x49\x6e\x70\x75\x74\x20\x69\x73\x20\x73\x65\x70\x61" \
-"\x72\x61\x74\x65\x64\x20\x62\x79\x20\x4e\x55\x4c\x20\x63\x68\x61" \
-"\x72\x61\x63\x74\x65\x72\x73\x0a\x09\x2d\x74\x09\x50\x72\x69\x6e" \
-"\x74\x20\x74\x68\x65\x20\x63\x6f\x6d\x6d\x61\x6e\x64\x20\x6f\x6e" \
-"\x20\x73\x74\x64\x65\x72\x72\x20\x62\x65\x66\x6f\x72\x65\x20\x65" \
-"\x78\x65\x63\x75\x74\x69\x6f\x6e\x0a\x09\x2d\x65\x5b\x53\x54\x52" \
-"\x5d\x09\x53\x54\x52\x20\x73\x74\x6f\x70\x73\x20\x69\x6e\x70\x75" \
-"\x74\x20\x70\x72\x6f\x63\x65\x73\x73\x69\x6e\x67\x0a\x09\x2d\x6e" \
-"\x20\x4e\x09\x50\x61\x73\x73\x20\x6e\x6f\x20\x6d\x6f\x72\x65\x20" \
-"\x74\x68\x61\x6e\x20\x4e\x20\x61\x72\x67\x73\x20\x74\x6f\x20\x50" \
-"\x52\x4f\x47\x0a\x09\x2d\x73\x20\x4e\x09\x50\x61\x73\x73\x20\x63" \
-"\x6f\x6d\x6d\x61\x6e\x64\x20\x6c\x69\x6e\x65\x20\x6f\x66\x20\x6e" \
-"\x6f\x20\x6d\x6f\x72\x65\x20\x74\x68\x61\x6e\x20\x4e\x20\x62\x79" \
-"\x74\x65\x73\x0a\x09\x2d\x78\x09\x45\x78\x69\x74\x20\x69\x66\x20" \
-"\x73\x69\x7a\x65\x20\x69\x73\x20\x65\x78\x63\x65\x65\x64\x65\x64" \
-"\x00\x2d\x64\x20\x5b\x2d\x63\x66\x5d\x20\x5b\x46\x49\x4c\x45\x5d" \
-"\x2e\x2e\x2e\x0a\x0a\x44\x65\x63\x6f\x6d\x70\x72\x65\x73\x73\x20" \
-"\x46\x49\x4c\x45\x20\x28\x6f\x72\x20\x73\x74\x64\x69\x6e\x29\x0a" \
-"\x0a\x09\x2d\x64\x09\x44\x65\x63\x6f\x6d\x70\x72\x65\x73\x73\x0a" \
-"\x09\x2d\x63\x09\x57\x72\x69\x74\x65\x20\x74\x6f\x20\x73\x74\x64" \
-"\x6f\x75\x74\x0a\x09\x2d\x66\x09\x46\x6f\x72\x63\x65\x00\x46\x49" \
-"\x4c\x45\x0a\x0a\x44\x65\x63\x6f\x6d\x70\x72\x65\x73\x73\x20\x74" \
-"\x6f\x20\x73\x74\x64\x6f\x75\x74\x00\x5b\x53\x54\x52\x49\x4e\x47" \
-"\x5d\x0a\x0a\x52\x65\x70\x65\x61\x74\x65\x64\x6c\x79\x20\x6f\x75" \
-"\x74\x70\x75\x74\x20\x61\x20\x6c\x69\x6e\x65\x20\x77\x69\x74\x68" \
-"\x20\x53\x54\x52\x49\x4e\x47\x2c\x20\x6f\x72\x20\x27\x79\x27\x00" \
-"\x46\x49\x4c\x45\x0a\x0a\x44\x65\x63\x6f\x6d\x70\x72\x65\x73\x73" \
-"\x20\x74\x6f\x20\x73\x74\x64\x6f\x75\x74\x00" \
-
-#define PACKED_USAGE \
-0x68,0x31,0x31,0x41,0x59,0x26,0x53,0x59,0x21,0x32,0x7f,0xed,0x00,0x1b,0x0b,0xdf, \
-0x80,0x72,0x70,0x77,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x60, \
-0x4f,0x85,0x07,0xa0,0x0f,0xa1,0x7d,0x6f,0x05,0x7d,0x15,0xd0,0xde,0x0f,0x77,0x7b, \
-0x9d,0x05,0x28,0x05,0xee,0xbc,0xf7,0xa8,0x2f,0x55,0x80,0xa3,0x66,0x14,0x3a,0x6a, \
-0x22,0xae,0x67,0x40,0x75,0x3e,0xfb,0x00,0x20,0xfa,0x05,0x17,0xbd,0xbc,0x66,0x77, \
-0x06,0x7a,0xf4,0xb3,0x6b,0x5f,0x37,0x39,0x66,0x4c,0xac,0xa9,0x66,0x9b,0x40,0xac, \
-0xec,0xb6,0xf6,0xc8,0xfb,0x68,0x91,0x0a,0x70,0x06,0x96,0x81,0xd7,0xd7,0x42,0xdc, \
-0xba,0x5c,0xa0,0xc5,0xaf,0xa5,0xb3,0xb0,0xf7,0x90,0x50,0x03,0x9c,0xee,0xce,0xf6, \
-0x4e,0xf7,0xb9,0xdd,0x3d,0xc3,0xcd,0x8b,0x68,0xa8,0xdb,0x6d,0x29,0xaa,0x75,0xdd, \
-0xb3,0x66,0xb6,0x8e,0xec,0xe8,0x66,0xda,0x92,0x4b,0xc3,0x59,0x8b,0xaa,0x61,0x95, \
-0xb6,0xd8,0x6b,0x4b,0x6c,0x2d,0xed,0xb9,0x6d,0x50,0x91,0x43,0x56,0xc3,0xdd,0xe1, \
-0xe8,0x3d,0x36,0xa2,0xae,0xb6,0xb5,0xde,0xba,0x6a,0x2b,0x39,0x11,0x23,0xdb,0xb9, \
-0x8e,0xc1,0x6d,0x9a,0x0f,0x78,0x67,0xc1,0xa9,0x90,0x04,0xd0,0x01,0x00,0x02,0x60, \
-0x9a,0x1a,0x04,0xd1,0xa4,0xc2,0x19,0x26,0x68,0x9e,0x08,0x06,0x22,0x6d,0x14,0xf5, \
-0x06,0x9a,0x02,0x08,0x20,0x20,0x4c,0x9a,0x02,0x06,0x9a,0x28,0xcd,0x27,0xa9,0xa1, \
-0xa7,0xa9,0xb5,0x1a,0x7a,0x43,0x43,0x40,0x68,0x00,0x01,0xa6,0x12,0x09,0x35,0x0a, \
-0x9f,0xa6,0xa9,0xb5,0x1f,0xa8,0xf5,0x4d,0xb5,0x43,0x4d,0xa3,0x50,0x34,0xf5,0x0c, \
-0x8d,0x06,0x80,0x00,0x00,0x00,0x00,0x12,0x69,0x44,0x20,0x26,0x40,0x13,0x40,0x40, \
-0x2a,0x7e,0x82,0x9e,0x68,0xa7,0x94,0xf4,0x8f,0x4f,0x41,0x47,0xa8,0xf2,0x8f,0x51, \
-0xa7,0xa9,0xa0,0x00,0x32,0x04,0x49,0x0a,0x62,0x13,0xd1,0x0d,0x23,0x29,0xe2,0x13, \
-0x13,0xd4,0xd1,0x33,0x4a,0x7e,0xd4,0xd0,0xa7,0x8a,0x3d,0x35,0x32,0x06,0x9a,0x0f, \
-0x50,0xd0,0x7a,0x80,0x00,0x48,0x88,0x20,0x40,0x26,0x9a,0x34,0x09,0xa1,0xa0,0x26, \
-0x98,0xa6,0x98,0xd4,0xc4,0x29,0xe6,0x94,0xf2,0x4f,0x48,0x3d,0x47,0xa8,0xf5,0x0d, \
-0x1e,0x90,0x34,0x9f,0xe0,0x7f,0x87,0xd1,0x83,0xc9,0xe4,0xf8,0x4c,0x1d,0xd3,0x0f, \
-0xd7,0x21,0xa8,0x3b,0xd0,0xa8,0xfc,0x42,0xfd,0xab,0x49,0xff,0x4a,0x4f,0x9d,0xed, \
-0xb7,0x23,0x83,0x7d,0x8c,0x48,0x91,0x49,0x8f,0xc2,0x45,0x08,0xab,0xb9,0xae,0x61, \
-0x0a,0x2a,0xfd,0xe4,0x51,0x55,0x27,0xe6,0x4c,0x24,0x29,0xac,0x3f,0x8f,0xc5,0x55, \
-0x9b,0x2f,0xca,0x25,0x4c,0x38,0x99,0x92,0x29,0x1e,0x5a,0x26,0x7e,0x07,0x3f,0xe3, \
-0x4d,0x02,0xc7,0xf6,0x65,0x71,0x04,0xc6,0x20,0x46,0x99,0xbf,0x6b,0xfb,0x7f,0x55, \
-0x5b,0x3e,0x13,0xff,0xbc,0xf6,0xd1,0xe1,0x68,0xb8,0xec,0x04,0x92,0xcc,0x8e,0x6c, \
-0x66,0x9a,0x3e,0x46,0x8a,0x73,0x9d,0x4a,0x7c,0xb2,0x48,0xeb,0xea,0x5a,0x60,0xc2, \
-0x39,0x0e,0x59,0x29,0xf9,0xac,0xf3,0x50,0x69,0xf4,0xc6,0x2e,0x83,0x3b,0x54,0xa2, \
-0x8d,0x07,0x3b,0x1d,0x4c,0x8c,0xad,0x6f,0x77,0x88,0x98,0x5c,0xa0,0xbf,0x2f,0xc4, \
-0x67,0x2c,0x67,0xbc,0x06,0x04,0x6e,0x40,0x12,0x4e,0x7f,0xf8,0xb6,0x7c,0xf7,0x31, \
-0x48,0x40,0xfd,0x89,0xdf,0x32,0x06,0x3e,0x93,0x34,0x16,0xcb,0x16,0x3f,0x25,0x09, \
-0x76,0x7e,0x1f,0xcf,0xbc,0xdd,0xa5,0x61,0x8d,0xd5,0x00,0x7b,0x11,0xc2,0x61,0x82, \
-0xcd,0x63,0x2f,0xf7,0xd5,0x9e,0x89,0xba,0x6a,0xfe,0xab,0xc5,0xee,0xf0,0x5a,0x99, \
-0xbf,0xb1,0x96,0xec,0x3f,0x3b,0xbf,0x60,0xe7,0xdf,0x77,0x27,0x87,0xf6,0x8f,0x3c, \
-0xd4,0x8c,0xc3,0xa7,0x26,0x09,0x2b,0xed,0x4b,0x92,0x17,0x7c,0x3a,0x99,0xe6,0x48, \
-0x18,0x95,0xfb,0xe4,0x73,0x30,0xdb,0x93,0xb7,0x2c,0xd5,0xa4,0xec,0x47,0x29,0x1c, \
-0xed,0xed,0x97,0x1d,0x0d,0xdb,0xc7,0x68,0xbe,0x2a,0x0b,0x93,0x44,0xa8,0x81,0x14, \
-0x1d,0x92,0x89,0x24,0x93,0xfe,0xfe,0x2e,0x5f,0x9f,0x3e,0x79,0x65,0x10,0x8c,0x8a, \
-0xa0,0xa7,0xed,0xf7,0xd7,0xdf,0xd1,0x42,0x17,0x0a,0xd6,0x7e,0xfc,0xfc,0x94,0x8f, \
-0x57,0x0e,0xb5,0xc9,0xd4,0x2a,0xa2,0x31,0xef,0xd8,0x63,0x89,0x69,0xdc,0xe0,0xe4, \
-0xe2,0x1d,0x77,0xda,0x3a,0x56,0x46,0x55,0xa3,0x7a,0x76,0x5f,0x95,0x3c,0x64,0x13, \
-0xd3,0x32,0x10,0xb4,0x2b,0xdc,0x24,0x74,0x16,0xcb,0xa1,0xa2,0x82,0xdd,0x6f,0x3b, \
-0x9d,0x56,0x66,0x0e,0x0a,0xdf,0x6b,0x64,0xcd,0x4b,0x2e,0x52,0x71,0x83,0x08,0xb6, \
-0xf0,0x0e,0x59,0x58,0xb5,0x92,0x7a,0x2b,0x46,0x54,0xb4,0x16,0x3b,0x98,0xa9,0xdb, \
-0x55,0xd9,0x71,0x49,0x69,0x22,0x62,0x9b,0x8b,0xac,0x55,0x11,0xa2,0x63,0x40,0x54, \
-0xf4,0x31,0x20,0xaf,0x54,0x9b,0xb3,0x23,0xc1,0xcc,0x25,0xe1,0x7a,0x02,0x24,0xfc, \
-0x53,0xaf,0x2a,0xc3,0x92,0xae,0x7b,0x81,0x3c,0xb3,0xe7,0xe3,0x9e,0x5c,0x15,0x89, \
-0xa3,0x37,0x6e,0x85,0x5e,0xc1,0xd0,0x03,0x33,0xef,0x46,0x34,0x21,0x20,0x90,0x82, \
-0x24,0x66,0x1f,0x1e,0xce,0x2b,0xf7,0x24,0xc1,0x75,0xd9,0x8b,0x1c,0x11,0x74,0xb3, \
-0xf1,0x10,0xd8,0x4c,0xc4,0x3e,0x3c,0x3e,0x29,0x32,0x83,0x2f,0xc3,0x71,0x74,0xa8, \
-0x64,0x30,0xda,0x3b,0x8d,0x79,0x70,0xdc,0x9b,0x6d,0xd1,0x8b,0xb3,0x27,0x36,0xc7, \
-0x72,0x9e,0x6d,0xa3,0x78,0x60,0x16,0xcf,0xc7,0x7c,0xe8,0x58,0x98,0x55,0x5a,0x70, \
-0xe8,0x91,0x35,0xe2,0x3b,0xe7,0x63,0xf0,0x5a,0xc1,0xb2,0x4c,0x19,0x27,0x0e,0xb2, \
-0x4c,0xe2,0xff,0x00,0x41,0x40,0xad,0x46,0x9e,0x51,0xbb,0xae,0xc1,0x50,0xcf,0x27, \
-0x5d,0xf0,0xac,0x76,0x18,0x5a,0xcc,0x4b,0xcc,0xe9,0xf8,0xc3,0x15,0xda,0x35,0xf9, \
-0xe4,0x18,0x3a,0xaa,0x9d,0x58,0x71,0xfc,0xb9,0xb2,0x0a,0x6b,0xea,0xba,0x24,0x7d, \
-0x72,0xe6,0xd9,0x9a,0x8f,0x16,0x21,0xc8,0x08,0x4c,0x19,0x5a,0x24,0x8a,0xd5,0xbd, \
-0xe3,0x44,0x56,0x39,0xc3,0xd8,0x59,0xc8,0x5c,0x26,0x33,0x1b,0x75,0xe1,0x66,0xd2, \
-0x86,0x9c,0xf2,0x6c,0xaf,0xae,0x3a,0xf5,0x45,0xfd,0xbc,0xe7,0xcb,0xbb,0xb8,0x57, \
-0x67,0x75,0x3b,0xa8,0x89,0x7e,0x9c,0xa0,0x64,0x0d,0x8d,0x91,0x2e,0x79,0x7f,0xc7, \
-0xb7,0x2d,0x6d,0x6e,0x85,0x0a,0x9e,0xa0,0x43,0xf5,0xc4,0x2e,0x82,0xe7,0x05,0x88, \
-0x1a,0xb2,0x2a,0x72,0xc9,0x4c,0xea,0xf2,0x2c,0x3f,0xd2,0xcd,0xea,0x14,0x96,0x52, \
-0x1f,0xbe,0xb3,0xe7,0xd5,0x32,0x74,0x90,0x5c,0x0e,0x72,0x03,0x2c,0x53,0xcf,0x90, \
-0xe1,0x33,0x50,0x35,0xe7,0x3b,0x04,0xba,0xea,0x4e,0x06,0xb0,0x9e,0xd7,0xec,0x8b, \
-0x24,0xcb,0xad,0x6a,0x33,0x77,0x47,0x56,0x36,0x0d,0xf4,0xe5,0x47,0x89,0x98,0x2f, \
-0x6a,0x4f,0x9a,0x6a,0xb3,0xc4,0xc3,0xb1,0x84,0xdf,0x4e,0xf3,0xca,0xa6,0x73,0x6b, \
-0x86,0xef,0xd3,0x8a,0xd8,0xbf,0xf7,0x7e,0x3e,0xcb,0xc3,0x42,0x65,0xc4,0x59,0xf6, \
-0x37,0x30,0xed,0x0f,0xb3,0x5e,0x37,0xa2,0x49,0x6c,0xcc,0x4d,0x5b,0x30,0x8d,0x89, \
-0xf1,0x4b,0x4a,0x42,0xed,0xa9,0x4e,0x76,0x1f,0xa7,0x3f,0xdf,0xbe,0x71,0x20,0xa7, \
-0x57,0xa0,0x43,0xe8,0x82,0x18,0xc6,0x6d,0x20,0xa7,0x8e,0xd4,0xbf,0xbf,0x56,0x5d, \
-0x9d,0x4c,0xc3,0x6f,0xdf,0x8f,0xbe,0x95,0x48,0x79,0x9c,0xbe,0x91,0xea,0x04,0x00, \
-0xca,0x29,0x3f,0x5d,0xa0,0x72,0x30,0x17,0x08,0x8c,0x0f,0xc2,0xc3,0xda,0xf1,0x3d, \
-0x6e,0x82,0x74,0x80,0x86,0xc1,0x5d,0xa5,0x09,0x9c,0x46,0x8a,0xe9,0xcb,0xd1,0xfd, \
-0xb0,0x28,0xff,0xef,0xf0,0xf5,0xfe,0xaa,0xea,0xb7,0xee,0xbf,0x7e,0x21,0xaf,0x3c, \
-0x1d,0xe3,0xc2,0x40,0xd4,0x93,0xd1,0x0d,0x77,0xa4,0xfb,0xda,0xd7,0xaa,0xb5,0x79, \
-0x54,0x5a,0x0f,0xb1,0x26,0x09,0x69,0xdb,0x52,0x40,0xe8,0xb4,0xda,0x5f,0x83,0xab, \
-0x21,0x4a,0xdc,0x9f,0x19,0x78,0x75,0xe1,0xc0,0x5d,0x93,0x53,0x09,0x77,0x0a,0x27, \
-0x1e,0xc7,0x94,0x92,0x86,0x45,0xfe,0xd1,0xf2,0x8f,0x07,0xce,0x96,0x1f,0x81,0xf5, \
-0x94,0x61,0x9c,0xf8,0x69,0xd2,0xaa,0xa4,0x11,0x52,0xf4,0x1e,0x0c,0x01,0x87,0x6d, \
-0xcd,0x78,0xfd,0x6d,0x9a,0x9f,0x61,0xce,0x48,0x93,0x75,0x59,0x15,0x91,0x45,0x88, \
-0x32,0xbb,0xe8,0xa2,0xd6,0x54,0x12,0xb4,0xc9,0x1e,0x0b,0x63,0x3e,0x32,0xe5,0xc0, \
-0xf4,0x1d,0x2c,0xa8,0x2e,0x6c,0x50,0x9c,0x29,0x51,0xf5,0xf1,0x5b,0xc2,0xc9,0x28, \
-0x50,0x90,0xc7,0xd4,0xc3,0x0d,0x8e,0xea,0x6c,0x73,0xd5,0x93,0xe5,0x1e,0x5b,0xf3, \
-0xad,0x3d,0x15,0x76,0xb8,0xdf,0xd5,0x1f,0x58,0xe3,0x29,0xb3,0xa7,0xb9,0x58,0x37, \
-0xdc,0x59,0xb6,0x2d,0xc8,0xf2,0xcc,0x53,0x8f,0xbc,0x8d,0x42,0x0b,0xfd,0x09,0xc6, \
-0xa3,0x30,0x5f,0xd2,0xb8,0x9c,0xb5,0xa9,0x92,0xd8,0xfb,0xe1,0xde,0x06,0x9a,0xcc, \
-0x37,0x54,0x2a,0xd4,0xa8,0x8e,0xf7,0x30,0x5c,0xf3,0x29,0x5a,0xd9,0x16,0xb2,0x33, \
-0x9c,0xd3,0x72,0x8c,0x34,0xb5,0x79,0x06,0x77,0x10,0x78,0xf6,0xe1,0xbc,0x4b,0xd2, \
-0x0d,0x5a,0xc7,0xc0,0xf7,0xda,0x77,0x21,0xc9,0xe7,0xf7,0x6b,0xb5,0x44,0xba,0x86, \
-0xd5,0x60,0x1e,0x40,0xc7,0x38,0xbe,0xb6,0xc7,0x23,0x9d,0x3c,0xd6,0x42,0xb8,0xcf, \
-0x74,0x61,0xf1,0xd4,0xf7,0x75,0xe5,0xf7,0xf2,0x18,0xbf,0x2f,0x95,0x97,0xf8,0x76, \
-0x77,0xe0,0x69,0x17,0x50,0x78,0x86,0x72,0xdb,0x63,0xd9,0x7e,0xe6,0x9b,0xaa,0x82, \
-0x8a,0x0d,0xd9,0xb5,0xb8,0x5f,0x90,0xfe,0x9a,0x12,0x5a,0xeb,0xda,0xf4,0x20,0xba, \
-0xdd,0xbc,0x20,0x75,0xde,0x85,0x45,0xdb,0xb2,0xde,0x6e,0xed,0x7d,0xa9,0x98,0x29, \
-0xb3,0x2c,0x41,0xc7,0x64,0x0b,0x3a,0xa0,0xaa,0x52,0xa1,0xac,0xf1,0xa3,0xca,0x7b, \
-0x26,0x45,0x47,0x87,0xa5,0xec,0x47,0xa0,0xf0,0x85,0xac,0x5b,0xab,0xec,0x7f,0xb8, \
-0xb9,0x38,0x34,0x48,0x63,0xbb,0xab,0x7d,0x97,0x78,0x5c,0x96,0x75,0x8b,0x22,0x70, \
-0xc7,0x6b,0x02,0xe7,0xbc,0xe9,0x8b,0xa8,0x7c,0xd9,0xa4,0x37,0x8f,0x18,0x20,0xf2, \
-0x51,0xae,0xb5,0x58,0x5a,0x97,0x4d,0x4b,0x32,0xa0,0x56,0x25,0xfe,0x4f,0x74,0x0a, \
-0xed,0x1e,0xbb,0xd4,0x12,0x97,0x23,0xea,0xea,0xa7,0xe9,0x79,0x54,0x4b,0xfe,0x11, \
-0x09,0xea,0xb7,0x6e,0x3d,0x75,0xd9,0xf4,0xd9,0xbb,0x56,0x6f,0x5e,0x9d,0x33,0xf2, \
-0x0d,0xaf,0x73,0x0a,0xcc,0x06,0xda,0xb0,0xc6,0x21,0xc9,0x36,0x17,0x67,0xef,0xdb, \
-0x81,0xd6,0x3d,0xd2,0xa4,0x16,0x91,0xf0,0x6a,0x15,0xc9,0xb5,0xf5,0x7e,0x3e,0x1d, \
-0x95,0xa5,0x1f,0x5f,0x4f,0x63,0xa9,0x6d,0x20,0x9d,0xb7,0x82,0x43,0xda,0x39,0x47, \
-0x61,0x87,0x81,0x7a,0xc1,0x8f,0xe9,0x9e,0x9d,0xbf,0x16,0x13,0xe6,0x78,0xe1,0xc5, \
-0xf5,0x11,0x5b,0xbb,0x4d,0x97,0x68,0x13,0x6a,0xfa,0x8a,0x77,0x82,0x7c,0xdc,0x26, \
-0x8c,0x15,0x1d,0x80,0x97,0xac,0xe9,0xe7,0x29,0x37,0xd8,0x9c,0x7b,0xde,0xe6,0x9f, \
-0xf2,0xfb,0x57,0xe7,0xd1,0x76,0xca,0xb1,0xf9,0x39,0x1d,0xa1,0xc4,0xb5,0xe5,0xd3, \
-0x94,0x77,0xeb,0x11,0xf8,0xf3,0x4f,0xf0,0xe8,0xd7,0xcc,0x5d,0x69,0xa5,0xb1,0x8e, \
-0x9a,0x4e,0xb7,0x0b,0x0b,0xd0,0x18,0x5c,0x24,0x79,0xf9,0xef,0x7c,0xf6,0x9c,0xfc, \
-0x08,0x20,0x6b,0xfa,0xaf,0x99,0xc7,0x85,0x98,0x02,0xd9,0x01,0x0f,0x05,0xea,0xa7, \
-0x5d,0xe2,0x67,0x00,0x21,0x6b,0xe7,0x6a,0x33,0x7e,0x6a,0x76,0x64,0xc5,0x6f,0xe8, \
-0x4c,0xb8,0x9e,0xeb,0x35,0xc5,0x3d,0xfe,0xcc,0x4f,0xc1,0xd3,0x72,0x6b,0xe1,0xf2, \
-0xd7,0xc7,0x9f,0x7d,0xf1,0xdb,0x41,0x16,0x2f,0x73,0x0a,0xbd,0x8a,0x36,0xe7,0x10, \
-0xe3,0xce,0xe8,0x7a,0x52,0xea,0x28,0x9d,0x0c,0x2b,0x97,0x18,0xdd,0x65,0x34,0x6a, \
-0xab,0x36,0xbe,0xf7,0x01,0xc9,0x2e,0x77,0x5b,0x86,0x86,0xae,0x3f,0x79,0xaf,0x67, \
-0xbf,0xeb,0x3b,0x90,0x86,0xcc,0x80,0x23,0x08,0x28,0xbd,0x6d,0x91,0x5d,0x71,0x70, \
-0x07,0xd0,0x84,0xdc,0xc2,0x06,0x18,0x2c,0x90,0x52,0x03,0xb5,0xac,0x01,0x83,0x0d, \
-0xfe,0x09,0xc7,0x1d,0xae,0xa7,0x56,0x48,0xa3,0xb3,0x6b,0x1a,0xe5,0xa5,0x93,0xda, \
-0x26,0x52,0xd8,0x9d,0xd4,0xfe,0x75,0xfa,0xc2,0x3b,0xfe,0xd9,0xe0,0x2f,0x78,0x78, \
-0x8e,0xb5,0x2e,0x73,0x3e,0xb9,0x2b,0x00,0xb9,0xc6,0x3a,0x83,0x69,0xfc,0x40,0xfe, \
-0xe2,0xcb,0xd4,0x58,0xc1,0xed,0xfa,0xfc,0xec,0x47,0xd7,0x9b,0xca,0x5c,0xa7,0x83, \
-0x53,0xaf,0xcc,0x2c,0x17,0xe2,0x1e,0xfc,0x96,0x4e,0x8a,0x8b,0x97,0xf2,0x93,0xf4, \
-0x4e,0x18,0x5e,0xef,0xb6,0x83,0xae,0xd2,0x36,0xfd,0x9b,0x8f,0xaf,0xe8,0x77,0x3e, \
-0x0e,0xfe,0x4d,0x65,0x91,0x9f,0xaa,0xd1,0xff,0x29,0x8e,0x4e,0xb2,0x5f,0x3d,0x4e, \
-0x9b,0xa9,0x7b,0xed,0x67,0xc3,0x48,0x2f,0xbf,0xf5,0x4c,0x9b,0x1b,0x1b,0x1f,0xcd, \
-0xc2,0x18,0xe6,0x0b,0x11,0x25,0x26,0x80,0x55,0xe3,0xc2,0x83,0x46,0x11,0xf6,0x78, \
-0x3a,0x78,0xa3,0x9f,0x55,0x82,0x6b,0xe6,0x11,0x42,0xa6,0xbf,0x42,0x69,0xee,0xed, \
-0x56,0xc9,0x39,0xfa,0xa1,0x1c,0xbb,0x53,0xa4,0x67,0x6b,0x58,0xb0,0xaf,0x2b,0xfe, \
-0x0c,0x7e,0xe9,0x73,0x9d,0x2b,0x8e,0x78,0xae,0x82,0x4f,0xff,0x7f,0xb5,0x5f,0xd7, \
-0x86,0xc9,0xde,0x8e,0xc8,0xa7,0x9a,0x38,0x79,0x17,0x2d,0x8d,0x9a,0x11,0xc8,0x32, \
-0xfc,0x2b,0x70,0x64,0x56,0xcf,0x63,0x5c,0xb4,0x71,0x23,0xf5,0xce,0x66,0xda,0x7d, \
-0x5d,0xf6,0x7a,0xee,0xf7,0xeb,0x03,0x95,0xf7,0xe7,0xd3,0x10,0x18,0xb3,0x04,0xa8, \
-0x83,0x27,0xb6,0x84,0x86,0xc6,0xf0,0x90,0x1f,0x89,0xc0,0x22,0x56,0x91,0xd5,0x46, \
-0x9a,0xa5,0x36,0xd3,0xaa,0x6f,0x1a,0x09,0x48,0xda,0x82,0x40,0x96,0x7e,0x44,0xc3, \
-0xea,0x9e,0x76,0x1e,0xe1,0x9b,0xa8,0xf2,0xe2,0x2c,0xb9,0x08,0xff,0xcf,0xe0,0xc6, \
-0x3f,0x85,0x13,0x06,0xa9,0x1f,0xc7,0xaf,0x18,0xa7,0x1c,0xb8,0xb8,0x96,0x36,0xb4, \
-0x67,0x70,0xdd,0x37,0xd5,0xe9,0xc1,0xaf,0xad,0xec,0xac,0x7f,0xee,0x5f,0xe7,0x87, \
-0xbb,0x8e,0xdf,0x26,0xdc,0xcb,0x47,0xf3,0x66,0x1d,0x48,0x40,0xab,0x52,0x61,0xe1, \
-0xc4,0x03,0x7b,0x74,0xec,0x24,0x06,0x66,0x04,0x35,0x74,0xe0,0xc0,0x12,0x3c,0x32, \
-0x9b,0x33,0x96,0x61,0xf6,0xd4,0xb7,0xb5,0x95,0xe9,0x52,0x79,0x84,0xf2,0xb6,0xa3, \
-0x5a,0xc3,0x49,0xe2,0x07,0xd9,0x01,0x69,0x17,0x94,0x72,0x26,0x30,0xd8,0x68,0x87, \
-0x60,0x79,0xfb,0x67,0x07,0x40,0xf2,0x29,0xb0,0x25,0xda,0x7b,0xcd,0x34,0xd2,0x73, \
-0x14,0x17,0x81,0x2a,0x8c,0xcc,0x49,0x07,0xc1,0xef,0xa4,0x97,0x92,0x23,0x39,0xf0, \
-0xda,0x30,0x17,0xb1,0x01,0x68,0x6d,0xc7,0xd1,0x9e,0x17,0x84,0xce,0xeb,0xcb,0x97, \
-0xc1,0xb7,0xfd,0x3c,0x95,0x8d,0xd6,0xdb,0x57,0x09,0xd5,0xfb,0xed,0xcf,0x80,0x18, \
-0x44,0x12,0x8f,0x27,0xb7,0x78,0x99,0x57,0xa6,0x10,0x8c,0xab,0x10,0x59,0xda,0x93, \
-0x21,0x75,0xf6,0x0c,0x24,0x8b,0xcf,0x34,0x30,0x1b,0x7a,0x81,0x48,0xb1,0x09,0x2c, \
-0x9a,0xff,0x9b,0xb7,0x5c,0x57,0x7a,0x68,0x20,0x7d,0x44,0x94,0x60,0x89,0xac,0x19, \
-0x29,0x93,0x75,0xa9,0xea,0x32,0x0c,0xcd,0x39,0x58,0x0f,0x6f,0x26,0x04,0x87,0xc4, \
-0x0f,0xea,0x0c,0x3a,0xec,0x40,0x5d,0xd2,0xd8,0xf7,0x0a,0x41,0xb3,0x92,0x60,0x7a, \
-0xf4,0xc0,0xf5,0xe5,0xfd,0xf8,0x4b,0x5f,0xe6,0x70,0x98,0xe1,0xcb,0x2e,0x85,0x88, \
-0xb8,0x4f,0x6a,0x6b,0x72,0x6b,0xf2,0x37,0xca,0x89,0x01,0x53,0x03,0x42,0x41,0x15, \
-0x50,0x3c,0x30,0x34,0x27,0xf2,0xd3,0x1e,0x7d,0xf8,0xc4,0xb1,0x8a,0xae,0x54,0x2d, \
-0xac,0x5e,0x7f,0xd3,0x55,0x27,0x38,0x54,0x87,0xf5,0xc6,0xaa,0xf0,0x1b,0x40,0xd5, \
-0x41,0xa0,0xae,0x2e,0x65,0xb8,0x4c,0x73,0xac,0x32,0xbc,0x79,0x78,0x07,0xc4,0x3c, \
-0xe3,0x28,0x4c,0xfe,0xcf,0xcf,0x2d,0x2c,0x3f,0xf9,0xf4,0x3a,0xfa,0xc9,0xb4,0x2b, \
-0x10,0x2a,0x84,0xc4,0xc0,0xa6,0xe1,0x4a,0x6b,0x34,0x9a,0xd4,0x14,0x40,0x28,0xd5, \
-0x1b,0xa7,0xb4,0x29,0x95,0xad,0xf8,0x65,0xc3,0x7d,0xb8,0xa5,0x22,0x7c,0xc1,0xed, \
-0x71,0x16,0x4b,0xaf,0xde,0xbe,0xe1,0x81,0xe2,0xa9,0x69,0xb2,0xda,0xac,0x50,0x79, \
-0x74,0xd0,0x6f,0x24,0x34,0x86,0x61,0xd5,0x80,0x69,0x9a,0xe2,0x2e,0x76,0x82,0x46, \
-0x0a,0x17,0x27,0x5d,0x17,0x11,0x09,0xb7,0x40,0x35,0xee,0x16,0xb9,0x6a,0xc5,0x55, \
-0x8b,0x41,0xf0,0x5d,0xf5,0x20,0xec,0xbf,0xc4,0x60,0x1f,0x46,0x29,0xe8,0xd7,0x44, \
-0xc1,0x48,0x61,0x1a,0x11,0x88,0x85,0x8d,0x69,0x2b,0x57,0x28,0xea,0x19,0x28,0x2c, \
-0x52,0x61,0x17,0xac,0xb2,0xf9,0x44,0x0c,0x1e,0xf2,0xcc,0x89,0xb1,0x3d,0x54,0xd6, \
-0x33,0x2a,0xda,0x4e,0xd7,0x54,0x66,0xbe,0xa7,0x3c,0xb2,0xf2,0x80,0x68,0xa4,0x91, \
-0xb6,0x83,0xf0,0x27,0xde,0xeb,0xe5,0x71,0x18,0xa1,0xbb,0x53,0xd0,0xbb,0x28,0xad, \
-0xbb,0x30,0xad,0x6b,0x32,0x9d,0xe7,0xc4,0x62,0x03,0xa6,0x45,0x06,0x33,0x60,0xd5, \
-0x0a,0x31,0x00,0x43,0x58,0x0f,0x6b,0x1c,0x1b,0x99,0x91,0x82,0x37,0x65,0xb1,0x76, \
-0xf8,0x5e,0xec,0x39,0x7a,0xe6,0xa3,0xe9,0x1b,0x33,0x47,0x1d,0x17,0xf2,0x3c,0x2f, \
-0xaf,0x25,0x0e,0x7c,0x7b,0x36,0xb9,0x09,0x0f,0xd0,0x87,0x21,0xed,0x3b,0xcb,0x0c, \
-0x21,0x3c,0x79,0x58,0x4c,0xa1,0x24,0xcb,0x01,0x5d,0x2f,0x31,0xfe,0x44,0x9f,0x99, \
-0xe8,0xa7,0xc1,0xfd,0xb3,0x1f,0x68,0xd1,0xa9,0x85,0xda,0xab,0x40,0x10,0xc3,0x26, \
-0x7d,0xb7,0x85,0x46,0x7d,0x10,0xf0,0x93,0xa6,0xb7,0x1a,0x14,0xb1,0xc3,0x55,0x3f, \
-0xd1,0xbe,0xba,0x16,0x7c,0x7f,0x05,0x87,0xf3,0x7d,0x06,0x06,0x9d,0x29,0x7b,0xa7, \
-0x8b,0x71,0x4f,0x37,0xa8,0x3b,0xfd,0xaa,0x3e,0x8f,0x04,0x00,0x3d,0x3c,0x3c,0x69, \
-0x01,0xe6,0x31,0x8e,0xbf,0x5d,0x4f,0x1e,0x4f,0x21,0x9c,0x6c,0x75,0x6c,0xdf,0x8b, \
-0x64,0xb1,0xbe,0x84,0xec,0x69,0x6c,0x02,0x6f,0xa8,0xf3,0xbe,0x63,0x9c,0x50,0xde, \
-0xf8,0x90,0x7c,0x1a,0x95,0x4e,0x64,0x81,0xef,0xa6,0x33,0xcb,0x8a,0x57,0x2e,0x66, \
-0x8c,0x0e,0x31,0x0e,0xfe,0xe4,0x90,0x4e,0xc2,0xa6,0xa0,0x7c,0xb0,0x68,0xeb,0x23, \
-0x5a,0xd4,0x2e,0x0a,0x40,0x4a,0xe3,0x30,0x95,0xac,0x56,0x14,0x92,0xca,0x07,0x4e, \
-0xc5,0xd3,0x13,0x30,0xf3,0xc0,0xf0,0xea,0x2e,0x07,0xce,0xa2,0x87,0x3c,0x22,0x9c, \
-0x48,0xdd,0x5b,0xd4,0xfd,0x89,0x0a,0xe3,0x14,0xb6,0x79,0x12,0x08,0x04,0xce,0x49, \
-0x1d,0x3a,0x99,0xaa,0x2c,0xbd,0x9b,0xeb,0x17,0x09,0x2f,0x35,0x36,0x3a,0xc2,0x47, \
-0x9a,0xca,0x12,0xdd,0x26,0x2e,0xad,0x62,0x30,0xa3,0xce,0xcd,0xbd,0xfb,0x63,0xc2, \
-0x9a,0xc8,0x16,0xb8,0x7d,0x1e,0x7a,0xdb,0x50,0x2b,0x4d,0x5a,0xda,0x28,0x4e,0xc7, \
-0x9f,0x63,0x6d,0x89,0x3c,0xe7,0x72,0x11,0xc9,0x4c,0xda,0xfe,0x7e,0x98,0xdf,0xe6, \
-0x5c,0x9e,0x45,0x48,0xa3,0xfb,0x59,0xf5,0x7b,0x94,0x38,0x8c,0x2a,0x1a,0x6f,0x5e, \
-0xfd,0x16,0x91,0xdc,0x2a,0x7a,0xbb,0x35,0x6f,0x1c,0xce,0x66,0x52,0xd8,0x81,0xd3, \
-0x82,0x8b,0x2c,0x60,0x35,0xe1,0x2e,0x06,0xac,0xca,0xc2,0xe0,0x2a,0xd1,0x0c,0x27, \
-0xac,0xf6,0xf6,0x28,0x1f,0x84,0x2d,0xbe,0x66,0xb1,0xd7,0x5c,0xd7,0x2d,0xb0,0x77, \
-0x3b,0xae,0x90,0x64,0x59,0x4a,0xa1,0x0a,0x3d,0xa2,0x95,0xad,0x11,0x7f,0xd6,0xc1, \
-0x8d,0xc4,0xdb,0xea,0xf1,0xfc,0x5b,0x6f,0xc3,0xae,0xe1,0x7c,0x34,0x0c,0x09,0x04, \
-0x41,0xce,0x8e,0x03,0x16,0x54,0xd7,0xe7,0x70,0xdc,0xe9,0x9a,0x4d,0x50,0x0a,0xca, \
-0x1f,0xa0,0xc0,0xa5,0xb2,0xcd,0x77,0x37,0xe7,0x08,0xd1,0xcb,0x2d,0x90,0xd1,0x34, \
-0x56,0xbb,0xfa,0xeb,0x03,0x2e,0x69,0x91,0x2a,0x85,0xa4,0x08,0x93,0xd3,0x94,0x69, \
-0xae,0xb1,0x7a,0x42,0xc5,0x15,0x0e,0x84,0x5b,0xdd,0xc3,0x79,0xff,0x8a,0xf3,0xe8, \
-0xc7,0x0e,0x7a,0x21,0x8b,0xae,0x79,0x6a,0xaf,0x56,0xce,0x55,0x56,0x1d,0xe7,0x98, \
-0x2d,0xea,0x9a,0x42,0x0a,0xb9,0x0c,0xe1,0x16,0xd9,0x5d,0xc9,0xb8,0x9b,0x50,0xda, \
-0x97,0x6a,0x96,0xa4,0xe1,0x9e,0x02,0xd5,0x41,0xfc,0xb2,0x86,0x2a,0xc4,0xaa,0xc7, \
-0x17,0x58,0xc3,0x4e,0xfe,0xfb,0x19,0xb1,0x95,0xe5,0xaa,0x4d,0x45,0x60,0xe5,0x10, \
-0x66,0x32,0x84,0x4c,0xf9,0xa0,0xd5,0x36,0xe7,0x16,0x99,0x4d,0x81,0xf6,0xd6,0xda, \
-0x19,0x36,0x0f,0x3c,0x14,0xea,0xd3,0x44,0x51,0xba,0x45,0xc2,0xa7,0xbb,0xaf,0x2c, \
-0x98,0x16,0xa4,0x12,0xaa,0x5c,0x64,0x58,0x6a,0x43,0xdc,0xe0,0x1b,0x53,0xfe,0x5c, \
-0xee,0x31,0x9d,0x27,0x68,0xef,0x75,0x50,0xc1,0xd4,0x1c,0x43,0xf6,0xef,0x57,0x5a, \
-0x01,0x92,0xd6,0x61,0x87,0xf8,0x08,0x4d,0x59,0x41,0x3f,0xc5,0x6d,0x49,0x0e,0x6d, \
-0xa8,0xeb,0x8e,0x6b,0xf3,0xd0,0xb3,0x2d,0x2b,0x37,0x6b,0xd5,0xa0,0x68,0x37,0x55, \
-0x1a,0xfe,0xdd,0xde,0x23,0xd3,0x35,0x22,0xff,0x19,0x5d,0x02,0x3e,0x52,0xff,0xb0, \
-0x34,0x12,0x87,0x38,0xdc,0x30,0xf2,0xd1,0x59,0x64,0x34,0x1b,0x14,0x75,0x3b,0xb7, \
-0xc1,0x47,0x96,0x89,0xe8,0x8d,0x8b,0x51,0x16,0xd4,0x05,0xc0,0xc8,0xde,0x80,0x92, \
-0x42,0x83,0xec,0xfb,0xba,0xc7,0xbd,0x20,0x0a,0xf1,0xf4,0xec,0xe9,0x27,0x9f,0x6b, \
-0xe6,0xd7,0xdb,0xbc,0xda,0xe8,0xa7,0xd7,0xc8,0x56,0xb9,0xe5,0xdf,0x8e,0x62,0x44, \
-0x9d,0xfd,0xb4,0x63,0x34,0x62,0x96,0x88,0xeb,0xeb,0x16,0xda,0x05,0xc3,0x53,0x77, \
-0x1d,0x5c,0x72,0xbe,0x90,0xed,0x84,0xb3,0x26,0x9c,0x75,0x19,0xb7,0xfd,0xc8,0x7c, \
-0x44,0x9f,0x53,0xb8,0xe4,0x8a,0x38,0xf1,0xcb,0x65,0xdb,0x8c,0x3d,0x46,0xac,0x07, \
-0x78,0xb1,0x16,0x6d,0xdf,0x05,0x3e,0x40,0x5e,0x2c,0xba,0xcc,0x6f,0xa0,0xd3,0xf2, \
-0x52,0xd8,0xdf,0x6e,0x17,0x79,0x1c,0x03,0xaf,0x28,0x14,0x86,0x35,0x2e,0xa1,0xa0, \
-0x74,0x4b,0x3b,0x28,0x6f,0x53,0x4d,0x48,0x3e,0xc1,0xd5,0x80,0x3d,0x64,0xf9,0x60, \
-0xec,0x6c,0x55,0x27,0xf6,0x39,0xdf,0x5a,0xa4,0x45,0xa2,0x02,0xc1,0xd2,0xa1,0x9d, \
-0xf9,0xad,0x98,0x7b,0x7e,0x3f,0x1e,0x48,0x22,0x36,0xc8,0xb4,0x78,0xac,0xb9,0xaa, \
-0xf3,0xfd,0x11,0x19,0x54,0x8a,0x2a,0x06,0xa7,0xf0,0x65,0x1d,0xf0,0xd5,0x7a,0x6f, \
-0x30,0x56,0x14,0x72,0x1b,0x5f,0x67,0x4f,0x45,0xc4,0x53,0x2c,0xa3,0x01,0xe2,0xa9, \
-0x77,0x5a,0x17,0x95,0xe7,0x6c,0x51,0x8f,0x3e,0x6b,0xb1,0xb0,0x28,0x19,0x7d,0xcc, \
-0x33,0x5e,0x8e,0x3b,0x26,0xc3,0xce,0x5a,0xbd,0xcd,0xe9,0xf7,0xfd,0x16,0x7d,0xed, \
-0xfe,0x16,0xbf,0x25,0x71,0x2f,0xa3,0x49,0xb6,0x3a,0x3e,0x94,0xf1,0xba,0x3f,0xa9, \
-0x7a,0x4a,0x3d,0xb3,0xf5,0x77,0xe7,0x63,0x1e,0x36,0x30,0xa3,0xd0,0x70,0x82,0x76, \
-0xec,0xed,0xac,0xd0,0xd7,0x3d,0x8d,0x42,0xb3,0x99,0x0b,0x14,0xa0,0xdf,0x77,0x34, \
-0x59,0xf6,0xca,0xd2,0x21,0x2c,0x6d,0x2d,0xc8,0x89,0xe4,0x4d,0xc1,0xb9,0x89,0x52, \
-0x65,0xa9,0x41,0x7c,0x2b,0x57,0x49,0x0d,0x04,0x2f,0x14,0xfd,0xaf,0x68,0x50,0xe6, \
-0xef,0xc9,0x89,0x99,0x04,0xa7,0x64,0xe0,0xce,0xf0,0x05,0x0c,0x7b,0x4f,0x17,0x2f, \
-0x7b,0x9e,0xe3,0x2c,0x10,0x23,0xf7,0xa8,0xfb,0xd5,0x41,0xf0,0xc8,0x9c,0x79,0x40, \
-0x72,0x3d,0xe6,0x89,0x1d,0x8a,0x8b,0xc8,0xc7,0xce,0xba,0xf7,0xdf,0x8f,0xa5,0x4a, \
-0x79,0xc6,0xd5,0x19,0xed,0x80,0x54,0x76,0x24,0x29,0xe3,0xf5,0x2c,0xfd,0x27,0x4f, \
-0x2f,0xa4,0xd9,0x88,0x12,0x86,0x32,0xb8,0x2d,0xa6,0xcc,0x36,0xa0,0xa7,0x64,0xe3, \
-0x2e,0x30,0x38,0x6c,0x5c,0x6b,0xc3,0x5c,0x56,0x59,0xc8,0x1a,0x6a,0xba,0x6a,0x6d, \
-0xe2,0xe0,0x35,0xb8,0x7b,0x50,0x6a,0x97,0xe1,0xb8,0x20,0x5e,0xcb,0x83,0xdb,0xd0, \
-0x59,0xcb,0xef,0x21,0xd7,0x6d,0x23,0xde,0x9b,0xf3,0xe3,0x42,0xc8,0x2a,0xf1,0x6e, \
-0x91,0xbc,0xf0,0x7b,0x4e,0x0a,0x9a,0x3c,0xd3,0x0d,0x8a,0x53,0x09,0x8a,0x0a,0xa0, \
-0xce,0x67,0x2a,0x0b,0x5a,0x4c,0x38,0xc1,0xad,0xcb,0x38,0x85,0xaf,0xdc,0xba,0x10, \
-0xcd,0x82,0xd9,0x97,0x96,0xe8,0xba,0xcc,0x66,0x6c,0xbf,0x64,0x6c,0x30,0x7e,0x07, \
-0x9f,0x1e,0x50,0x76,0x0a,0x55,0xde,0x85,0xd8,0x5c,0x3c,0x74,0x3d,0x37,0x5c,0x72, \
-0xec,0x19,0xa8,0x1d,0x78,0x2d,0xbc,0x7e,0xc6,0xb7,0xa1,0x52,0xfb,0x65,0xbd,0x5a, \
-0x6a,0xd2,0xcb,0xc4,0xa2,0x94,0xdf,0x5e,0x49,0xc6,0x01,0xca,0x4f,0x2e,0x77,0x17, \
-0x27,0x7c,0xc2,0xde,0xeb,0xe6,0x97,0x1a,0x3e,0xa4,0x5c,0x69,0x1a,0x0d,0x03,0x86, \
-0xd3,0xc2,0x86,0x60,0x69,0x7d,0xad,0xb7,0x42,0xc4,0x33,0x0c,0x96,0x01,0x97,0x19, \
-0x83,0xa0,0x8d,0x07,0x7a,0x28,0x0b,0xb2,0xaa,0x8d,0x59,0x89,0x19,0xf8,0x07,0xbc, \
-0x25,0x1a,0x1c,0xd4,0x23,0x92,0x76,0x1c,0x70,0xee,0x25,0x4a,0xe1,0x90,0xba,0x49, \
-0xce,0x05,0xe5,0x73,0xec,0xe1,0x58,0xeb,0x17,0xc4,0x10,0x59,0x8d,0x06,0x92,0x62, \
-0x19,0x90,0x97,0x85,0xf1,0x8b,0x03,0x64,0x0b,0x36,0x6c,0xae,0xaa,0x1c,0xa6,0x02, \
-0xc1,0xb1,0x98,0x2c,0xa1,0xc8,0xe3,0xc0,0x2e,0x81,0x65,0x43,0x52,0x27,0xa0,0xdb, \
-0x97,0x3f,0x83,0xbd,0x22,0xd9,0xac,0x1b,0xa5,0x3e,0x02,0xe5,0xb1,0x6a,0xdc,0x1b, \
-0x82,0x10,0xb7,0x09,0xb0,0x23,0xed,0xe5,0x76,0x0a,0x84,0x91,0xf5,0xf6,0xdf,0x02, \
-0xb2,0xaf,0x91,0x54,0x46,0x53,0x9a,0x5b,0xab,0x13,0x58,0xaa,0xb3,0x1a,0x24,0x29, \
-0x5f,0x9b,0xcb,0xe0,0xbe,0xf7,0x1e,0x21,0xc3,0x4d,0xb3,0xdb,0x39,0x84,0x3d,0xf3, \
-0x91,0x8b,0x38,0x70,0x1c,0x17,0x07,0x67,0x0b,0x1d,0xd2,0x9f,0x83,0xac,0x76,0xf6, \
-0xf6,0xaf,0xba,0x47,0x87,0x96,0x92,0x0f,0x6e,0x3c,0xef,0x94,0x1c,0xb1,0xe7,0x29, \
-0xf6,0x2d,0xe4,0x99,0x8c,0xda,0x66,0x09,0xe6,0x90,0x49,0xcb,0xea,0x68,0x54,0xb8, \
-0x44,0xd9,0xe8,0x35,0x93,0xce,0x05,0x10,0x5c,0xb9,0xf0,0xea,0x9e,0x66,0x44,0x81, \
-0x91,0x59,0x24,0x02,0x94,0x1a,0xb7,0xc8,0x02,0x9f,0xa1,0xf5,0x69,0xa9,0x2f,0x84, \
-0xb4,0x55,0x20,0x3b,0xd0,0x70,0xd4,0x4a,0x1a,0x0d,0xe3,0x00,0x91,0xf9,0x90,0xd4, \
-0xd6,0xad,0xcc,0x54,0x37,0x42,0x22,0xc0,0xe4,0x2d,0x83,0xbd,0x79,0xdf,0x7d,0xf1, \
-0xea,0x3c,0x0d,0x2a,0xee,0x15,0xad,0x44,0x0e,0x63,0x02,0x5c,0x64,0x96,0x2e,0xb1, \
-0x0e,0x16,0x78,0xb5,0xa1,0xf5,0x9c,0x8d,0x9e,0xdd,0xd7,0xdc,0x7d,0x63,0x6d,0xaa, \
-0xf8,0x5a,0xa3,0x77,0x2b,0x1e,0x2d,0x40,0x51,0xa4,0xce,0xb8,0x17,0x13,0x5f,0x08, \
-0xa1,0xf7,0xe8,0xba,0x09,0xcb,0x48,0x36,0x4c,0x72,0x50,0xd4,0xf4,0xd4,0x3b,0x6f, \
-0x34,0x38,0x99,0x1f,0x11,0x16,0x51,0x70,0x33,0xb8,0xbd,0x9b,0x84,0x6b,0x88,0xba, \
-0x87,0x29,0x45,0x23,0xa6,0x7b,0x77,0x1c,0x71,0x42,0x1f,0x83,0x6a,0x3e,0x51,0x2b, \
-0xbb,0xec,0x4f,0x67,0x4e,0x15,0xbe,0x53,0xd1,0x95,0x21,0x2c,0x79,0xdc,0x33,0xc9, \
-0x4d,0xad,0x69,0x9c,0x4d,0xc6,0xd9,0xd8,0x16,0x17,0x6c,0xc0,0xd3,0x94,0x02,0x7e, \
-0x5b,0x16,0x4e,0x40,0x55,0x93,0x44,0x85,0x56,0x6d,0x5a,0x36,0xbf,0x70,0x3b,0xba, \
-0x27,0x73,0x8b,0x06,0x73,0x81,0xbd,0xed,0xbf,0x46,0xd7,0x98,0xe5,0xbb,0xe3,0x82, \
-0x75,0x5d,0xa0,0x18,0x75,0xee,0x7a,0x59,0x39,0x13,0x90,0x2a,0xa5,0xe4,0x48,0x22, \
-0xa4,0x84,0x9c,0xac,0x48,0x6b,0x8e,0xbb,0x24,0x70,0xdb,0x4b,0x64,0x76,0x7c,0xe2, \
-0x28,0x09,0xd9,0xab,0x74,0x2d,0x70,0xe3,0x86,0x29,0x06,0x0e,0xe5,0xc4,0x15,0x62, \
-0x25,0xb6,0x3b,0xe0,0x7b,0xa3,0x66,0x8a,0x98,0x1b,0xdb,0xe8,0x85,0x9d,0xeb,0x62, \
-0x95,0x7e,0xdd,0xe2,0x9e,0xd8,0xdb,0x5d,0xed,0x7e,0x8f,0xcf,0x1d,0x68,0xd2,0xc6, \
-0x14,0xf0,0x6c,0xcf,0x67,0x03,0x9d,0xd3,0x34,0x45,0xc2,0xa2,0x86,0x0c,0x96,0x15, \
-0xe5,0xd5,0x2f,0x42,0x44,0x15,0x17,0x7c,0xf9,0x61,0x42,0x89,0xcd,0x59,0xae,0xdf, \
-0x9e,0xeb,0x5b,0x03,0x0f,0xda,0x8d,0x1b,0x7d,0x8b,0xa3,0x6c,0xb6,0xd3,0xee,0xd7, \
-0x09,0x49,0xd0,0xb3,0x5c,0x12,0x0b,0x29,0x17,0x6f,0x29,0xc1,0x2e,0x2a,0x88,0x83, \
-0x21,0xd5,0x13,0xdf,0x67,0x27,0x50,0x5d,0x67,0xbf,0x4e,0x6f,0x97,0xc4,0x63,0xb9, \
-0x88,0x3a,0x20,0x5f,0x0b,0xb9,0xe9,0xf2,0xe6,0x05,0x8c,0xa8,0xb9,0xb0,0x5e,0xb8, \
-0x1b,0xe6,0xb2,0xd7,0xa0,0xf7,0x9a,0x88,0xb1,0x98,0xe2,0xc2,0x1c,0xec,0x21,0x82, \
-0xeb,0x7d,0x35,0x5c,0xa6,0xd8,0xe5,0xb2,0xe8,0xc9,0xac,0xab,0x8d,0x69,0xa4,0x5a, \
-0x33,0x6e,0xab,0xc3,0x3a,0xe7,0xca,0xce,0x47,0xa7,0xda,0x56,0x72,0x1f,0x0a,0x06, \
-0x66,0xed,0x47,0xe8,0xee,0x5e,0xaf,0x37,0xec,0xcc,0x8f,0x13,0x3f,0x32,0x3c,0xab, \
-0xec,0xe0,0x2f,0x8f,0x46,0xe8,0x7e,0x25,0x2f,0x95,0x01,0xfb,0x32,0xd7,0xe5,0x5b, \
-0xe9,0x22,0x24,0x7d,0x3a,0x45,0x03,0x89,0xc5,0x79,0xc7,0x75,0x6b,0xd6,0x44,0x55, \
-0x35,0x14,0xe7,0xba,0xa7,0x71,0x19,0x44,0x19,0x1d,0xf0,0x24,0x8e,0x13,0xde,0x54, \
-0x32,0x2c,0xe9,0x61,0xdd,0x95,0x10,0x13,0xd8,0x0a,0xcc,0xf2,0x66,0xf2,0x88,0x2c, \
-0x3f,0x57,0xca,0xd2,0xe6,0xfd,0x7a,0xc6,0xdd,0x27,0x9d,0x95,0x37,0x77,0x13,0x1d, \
-0x66,0x88,0x72,0xea,0x30,0xac,0x28,0xf9,0xb4,0x18,0xe5,0x19,0x8d,0x19,0x27,0x89, \
-0xce,0x8f,0xf9,0xfb,0x13,0x6c,0x53,0x7a,0x83,0x6c,0x33,0xbd,0xd3,0x25,0x79,0xde, \
-0x0b,0x8d,0xb6,0xf3,0xb3,0x6a,0x44,0x1c,0x6c,0x1a,0xe4,0x71,0x42,0x9e,0xce,0xdd, \
-0x1f,0x58,0x46,0x24,0x13,0xb2,0x7a,0xb5,0xd6,0x50,0xc2,0x64,0x93,0xcc,0x75,0x07, \
-0x7f,0xc6,0x37,0x13,0xe5,0x2f,0xdb,0xd0,0xcc,0xd1,0x85,0xb4,0xdf,0x28,0xa2,0xbc, \
-0x94,0xdf,0x01,0x42,0x13,0xce,0x97,0x19,0xcb,0x84,0xb6,0x82,0xf3,0x16,0x1e,0xa8, \
-0xed,0x98,0xf5,0x97,0x65,0x20,0x81,0xcb,0x4c,0xb6,0x06,0xcb,0xad,0xad,0x65,0x9f, \
-0x21,0xc3,0xbb,0xa4,0x81,0x40,0xe5,0x72,0xb4,0x26,0x8d,0xba,0xf8,0xe8,0x4a,0x5b, \
-0x52,0xdb,0xbe,0xe4,0xdd,0x54,0xa3,0x85,0xa3,0x08,0xff,0x65,0x39,0x55,0xf9,0xfe, \
-0x9d,0x1e,0x59,0x94,0xa0,0x3e,0x9e,0xe0,0x63,0xfc,0x24,0x84,0x82,0xf5,0x12,0x41, \
-0x92,0x31,0x74,0xd5,0xf8,0x1e,0x6d,0x7a,0x7a,0xb6,0x5f,0x72,0x4f,0x20,0xcc,0x2d, \
-0x1d,0x28,0xe5,0x36,0xbb,0x4f,0x42,0x2f,0x82,0x18,0x6b,0x68,0xfc,0x6d,0x02,0xc0, \
-0x6e,0x8e,0xbd,0x9e,0xbb,0x2d,0x44,0xc6,0xa7,0xb3,0x66,0xde,0x1c,0x78,0xdc,0xcc, \
-0xa4,0x52,0x1a,0x7f,0xe9,0x48,0x3b,0x21,0xf5,0x6f,0xc6,0x21,0xa0,0x0c,0x59,0x14, \
-0xe8,0xc9,0x50,0x82,0xc8,0x14,0xb4,0x80,0xa1,0x22,0x85,0x38,0x9e,0x5c,0x13,0x08, \
-0x86,0x04,0x34,0x80,0x40,0x7b,0xe1,0x7e,0x12,0x19,0xa8,0xbf,0x06,0x4c,0x4a,0xcb, \
-0xd8,0x99,0x74,0x1f,0xa3,0x39,0xe3,0x9f,0xcb,0xe1,0xf0,0x72,0x1e,0x27,0xde,0xeb, \
-0x2d,0x52,0x75,0xfe,0xbd,0xba,0xfa,0xbd,0x02,0xf3,0x47,0xca,0x0a,0x24,0xfb,0x4b, \
-0x49,0x23,0x96,0x5b,0xc9,0x71,0x51,0x03,0x0d,0x64,0xfc,0x72,0xb2,0x0d,0xbd,0x22, \
-0x63,0xa1,0xb9,0xa3,0x37,0x80,0x49,0xc2,0x30,0xec,0x35,0x44,0xe9,0x49,0x89,0x75, \
-0x57,0xa0,0x20,0x14,0x1c,0xd2,0xe4,0x3a,0xca,0xc2,0xdc,0x58,0x7b,0xa5,0x7b,0x24, \
-0x9b,0x43,0x92,0x29,0xfe,0xde,0xa7,0xc9,0x91,0x20,0x51,0xf0,0xf4,0x10,0x82,0x12, \
-0x4a,0x5e,0xd4,0xdb,0xf6,0xee,0x46,0x4c,0x38,0x7d,0x4b,0xb9,0x62,0x4b,0x52,0xe4, \
-0x10,0xcd,0x18,0xa6,0x62,0x19,0xe4,0x4b,0xd1,0x92,0xfa,0x40,0x4e,0x81,0xd9,0xd3, \
-0xc3,0x1f,0x10,0x7c,0x08,0x00,0x64,0x44,0x3a,0x3e,0x26,0x9e,0x7e,0x94,0xff,0x4f, \
-0x03,0xb8,0x0d,0xfd,0x20,0x61,0xff,0x35,0x8c,0xea,0xb0,0xb9,0x6a,0xf1,0x67,0xae, \
-0xf0,0xc1,0xc2,0x48,0x4d,0xef,0x4c,0x19,0x69,0x77,0x73,0x9f,0xe9,0x58,0x11,0x29, \
-0xb4,0x11,0xa7,0x76,0xee,0x4d,0xbe,0xdb,0xdb,0x88,0xec,0x7f,0x5d,0x06,0x15,0x0a, \
-0xc4,0x6d,0x31,0x82,0xee,0x0a,0xf1,0x9c,0xb2,0x3a,0x52,0x50,0x60,0x5a,0x37,0x2c, \
-0x6e,0x83,0x50,0x99,0xf3,0xb9,0x43,0xb8,0x5e,0x90,0x67,0xdc,0xf1,0x2d,0xb5,0x1a, \
-0x02,0x41,0xfe,0x4b,0xa6,0x2b,0xf1,0xe7,0xcd,0x63,0xd6,0x34,0xd7,0x56,0x75,0x2d, \
-0xd3,0x09,0xcc,0xd7,0x88,0x3e,0x60,0x97,0xbc,0xe6,0x52,0x95,0x54,0xde,0xd4,0x26, \
-0xb4,0x05,0x83,0xd3,0xe2,0xe9,0xea,0x8e,0x6d,0x23,0x25,0x47,0x04,0x19,0x9d,0xb7, \
-0x87,0x53,0xa4,0xd5,0x40,0xa4,0x67,0x87,0x80,0x58,0x3f,0x01,0xc9,0xfd,0x63,0xc1, \
-0xa8,0x54,0x1b,0x50,0xcb,0xf7,0x01,0xcc,0x8e,0x51,0x62,0xf7,0xd7,0x01,0x5d,0xdc, \
-0x47,0x22,0xbd,0xf2,0xd9,0x98,0x32,0xcb,0x21,0x5f,0x46,0x26,0x26,0x92,0x49,0x76, \
-0x75,0xea,0x22,0x24,0x03,0xec,0x0b,0xb6,0x73,0x1b,0xfc,0x4f,0xea,0xc5,0xa9,0x56, \
-0x18,0x68,0x18,0x10,0x51,0x4a,0xc6,0x35,0x82,0x93,0x01,0x80,0xca,0x51,0xf0,0xfe, \
-0xcb,0xd5,0x3e,0xfd,0x8f,0xc5,0xfc,0x3f,0x3f,0x03,0x59,0xcf,0x8d,0x13,0xbe,0x99, \
-0x70,0xc1,0x8f,0x7d,0xc6,0x27,0xeb,0xb4,0x30,0x90,0x55,0xba,0x97,0x14,0x65,0x20, \
-0xa8,0x38,0xa5,0x2b,0x28,0xa8,0x44,0x18,0xdb,0xfa,0xbf,0xf5,0x66,0x71,0x2f,0xe9, \
-0x4c,0x30,0xe7,0xad,0xc7,0x71,0x6a,0x29,0x07,0x14,0x2c,0x10,0x45,0x54,0xc5,0x96, \
-0x2a,0xaa,0xac,0x57,0x6e,0xfa,0x06,0x21,0x0d,0x1a,0xd3,0x75,0x81,0x92,0x83,0x47, \
-0x51,0xa9,0x42,0x63,0x18,0x43,0x33,0xf1,0xf9,0x7b,0x06,0xfe,0xef,0xdd,0x80,0x90, \
-0x5d,0x33,0x22,0x16,0x8a,0x08,0x13,0x7c,0x4b,0x09,0x18,0x2b,0x81,0x83,0xc8,0xa6, \
-0x03,0x37,0xf0,0xe2,0x7d,0x7a,0xd3,0x30,0x17,0xb5,0xae,0x07,0x3a,0x71,0xd0,0xcc, \
-0x20,0x69,0x4b,0x0d,0x6c,0xa2,0xc7,0x16,0xd6,0x19,0xdd,0x7f,0xc4,0x9b,0xd5,0x35, \
-0xac,0x95,0x75,0x71,0x0c,0x48,0xff,0x2a,0x13,0x2e,0x45,0x80,0xca,0x9d,0xf8,0xaf, \
-0x6e,0xb8,0x4c,0x15,0x14,0x48,0x89,0x21,0xa2,0x0c,0x63,0x2c,0x3f,0x2e,0x6e,0x7a, \
-0xdc,0x38,0x20,0xa0,0xc5,0x44,0x47,0xc1,0xec,0xdb,0x3e,0x4e,0xaf,0x54,0x00,0xce, \
-0xb5,0xfe,0xd4,0xa0,0xaa,0x0a,0xc3,0x17,0x4c,0x5d,0xad,0x81,0x98,0xd1,0x57,0xef, \
-0x4a,0x2b,0x83,0xcc,0xc1,0x71,0xdd,0xb7,0x0e,0x1f,0x38,0x70,0xce,0x1d,0xd2,0x4e, \
-0xa9,0x8e,0x24,0x0c,0x69,0xa6,0xc9,0xca,0x54,0xaa,0xaa,0xc9,0x75,0x24,0x4f,0x5c, \
-0x6e,0xa4,0x24,0x16,0x2b,0x10,0x12,0x9b,0x03,0x72,0xb2,0x15,0xcd,0x0d,0xbb,0xf5, \
-0xd1,0x0e,0x3a,0x60,0xd9,0x84,0x94,0xd8,0xf0,0xc4,0x30,0x08,0xc5,0xf9,0xf6,0x86, \
-0x3e,0xea,0x64,0xc1,0x22,0x22,0x2a,0x8a,0x6a,0x53,0x9e,0x0c,0xc4,0xeb,0xca,0xe9, \
-0x00,0xd5,0xb1,0x0b,0x43,0x4c,0x3d,0x19,0x49,0x27,0x07,0x2c,0x74,0x64,0xcc,0x70, \
-0x40,0xf3,0x61,0x43,0x2c,0xe7,0x29,0x1d,0x94,0x8a,0x4c,0x43,0x06,0x3e,0xfa,0xf0, \
-0xf4,0x5b,0xec,0xfb,0x66,0x31,0x96,0xfc,0xb8,0xc6,0x0f,0xa4,0x7b,0x46,0x7a,0x5a, \
-0x04,0x17,0xe6,0x71,0xef,0xec,0x56,0x57,0xfb,0x5d,0x5a,0xc0,0x35,0x3c,0xee,0x69, \
-0xc0,0x7a,0x55,0x23,0x1d,0x95,0x7d,0x92,0xff,0x1f,0x6f,0x3e,0x38,0x41,0xa9,0x4e, \
-0x82,0x1f,0x05,0xb5,0x2d,0x78,0x80,0x33,0xf6,0x2f,0xbc,0x88,0x7e,0xe8,0x85,0x42, \
-0x44,0x19,0x55,0xf7,0x5a,0x9f,0x0a,0x70,0xbe,0x8e,0x58,0x36,0xdb,0x67,0xc9,0xa0, \
-0xf3,0xf8,0x56,0x0b,0x5b,0xfa,0x67,0xda,0x31,0x6e,0x4c,0xef,0xd7,0xf4,0x72,0x8f, \
-0x47,0xdf,0xd9,0xe3,0x87,0xb8,0x5c,0x8e,0x44,0x0f,0xe2,0x00,0x0d,0xc3,0x68,0x07, \
-0xd3,0x74,0xdc,0x9e,0x7a,0xd1,0xd3,0xe6,0xf1,0xfc,0x70,0xa3,0xb6,0x1f,0x50,0xc3, \
-0x50,0xd1,0xe3,0xf2,0x4f,0x8b,0xa2,0xc0,0x1b,0x7d,0x06,0x8c,0x2b,0x30,0xbe,0x80, \
-0xae,0x7f,0x1f,0x9f,0x32,0xa4,0x02,0xff,0xdc,0xee,0xf2,0x5b,0x00,0x39,0x06,0xd9, \
-0x19,0x20,0x69,0x8e,0xb7,0xc8,0xf0,0xd9,0xfc,0xe4,0x24,0x9e,0x02,0x81,0x36,0xea, \
-0x32,0x90,0x9b,0x48,0x7a,0x34,0x76,0x03,0xf0,0x82,0x0e,0x06,0x56,0x27,0xde,0xff, \
-0x82,0xc9,0x00,0xc8,0xd4,0x80,0xe0,0x40,0x79,0x16,0x05,0xff,0x74,0x7e,0x38,0x3f, \
-0xbe,0x43,0x30,0xfa,0x38,0xdf,0x81,0xe1,0xc4,0xde,0x41,0xf4,0xc1,0xb1,0x53,0xd3, \
-0x63,0xd9,0xaf,0x8b,0xb3,0xef,0xc3,0xae,0x97,0xd0,0xbf,0xfc,0xf9,0x0f,0xe7,0xe6, \
-0xfb,0x0c,0xca,0x3e,0x3a,0x3f,0x28,0x62,0x44,0xdf,0x02,0xb9,0x2f,0x76,0x56,0x6d, \
-0xf8,0x53,0xc6,0x1f,0xfd,0x3b,0x9a,0x31,0x7f,0x16,0xb0,0x66,0xb2,0x90,0x6d,0x5b, \
-0xce,0x51,0x69,0xe0,0xe4,0x47,0x5c,0x85,0x93,0x71,0xc5,0x5f,0xf8,0x1e,0x62,0xfc, \
-0x95,0xf4,0x3a,0x30,0x5f,0xf0,0xa3,0xfc,0x2f,0x47,0x43,0x8f,0x71,0x43,0xae,0x3b, \
-0x02,0xa9,0x98,0xcf,0x6d,0x97,0x02,0xc1,0xda,0x35,0x97,0x75,0x70,0x3a,0x7d,0x25, \
-0xb8,0x58,0x63,0xb4,0x2f,0x77,0x5e,0xce,0x5f,0xd1,0x10,0x8f,0x73,0xea,0x42,0xf4, \
-0xa8,0xb4,0x20,0x37,0xbe,0xd2,0xc9,0x4b,0xd1,0x19,0x3e,0xa8,0x5c,0x5e,0xbd,0xb7, \
-0x25,0x09,0xd5,0x19,0xeb,0x44,0xf4,0xd8,0xe8,0x3c,0x22,0x30,0x8c,0x5b,0x10,0x4e, \
-0xa2,0x91,0x8d,0x34,0x2c,0x37,0x72,0x0e,0x28,0x20,0x26,0x20,0x18,0x57,0x50,0x63, \
-0xf5,0xfb,0x3a,0xef,0x4f,0x07,0x95,0x14,0xc0,0x44,0x85,0x68,0x4a,0x52,0x12,0x22, \
-0x6c,0x5b,0x28,0xde,0x14,0x3b,0x08,0x55,0xe9,0xc6,0x81,0x67,0xa0,0xfd,0x21,0x27, \
-0xb7,0xac,0xf3,0x97,0x39,0x2c,0xb2,0x12,0x38,0xa4,0xf2,0x0e,0x04,0x0e,0xc0,0x46, \
-0x8d,0x6b,0x32,0xe8,0x9b,0xc5,0xdb,0x36,0x63,0x9e,0x3e,0x74,0x79,0x71,0xfa,0x99, \
-0x1e,0xf2,0x97,0xc9,0x3d,0x65,0xdf,0x60,0xf0,0xf1,0xea,0xe4,0x5b,0x76,0xbb,0xe8, \
-0xf5,0xa2,0x97,0x22,0x4f,0xd9,0x08,0x64,0xf4,0xd9,0x8f,0xed,0xaf,0xf1,0x1d,0xb5, \
-0x09,0xea,0x91,0x33,0xcc,0x27,0x20,0x3a,0x8b,0xd1,0xf1,0xf9,0xf4,0x28,0x6b,0x13, \
-0xf9,0xfe,0xcd,0x80,0x4a,0x2c,0x9c,0x87,0x9e,0xa3,0x41,0x91,0x90,0x49,0x5f,0xbd, \
-0xaf,0xc9,0x67,0xaf,0xc7,0x97,0xeb,0x34,0x43,0xd6,0x0c,0xf3,0x42,0x4c,0x7e,0x35, \
-0xe4,0x72,0xbb,0xe5,0xfc,0x7f,0x3f,0xfa,0x7e,0xbb,0xf8,0x34,0x47,0xd6,0xe0,0xf8, \
-0x06,0x3c,0x52,0xc5,0x7f,0x90,0x12,0x60,0x34,0xb6,0x30,0xf7,0xff,0x99,0x4f,0xf6, \
-0xd1,0x15,0x18,0x6f,0x39,0xc2,0x81,0x97,0xbf,0xe2,0x7f,0x1f,0xb9,0x9e,0x5f,0x3b, \
-0x8f,0x26,0x6a,0xa8,0x5a,0xf7,0x21,0x0b,0x36,0x93,0x04,0xeb,0x37,0xeb,0xc4,0xfd, \
-0x06,0x03,0x89,0xd0,0x25,0x45,0x40,0x31,0x12,0x18,0x05,0x15,0x34,0x8c,0xb1,0xf9, \
-0xec,0x8f,0xd2,0x97,0xb3,0x31,0x19,0x9d,0x04,0x1b,0x49,0x90,0xfa,0x3f,0xe2,0x49, \
-0xb4,0x4c,0x41,0x61,0xeb,0x82,0x87,0x46,0xc7,0xcb,0xf4,0x76,0xf2,0x3f,0x28,0x84, \
-0x8d,0xe2,0x85,0x4a,0xfd,0x90,0x3d,0xbe,0xff,0xeb,0x70,0x43,0xea,0x5f,0x99,0xdc, \
-0x94,0xf6,0x0b,0xdf,0xba,0x9b,0xa8,0x01,0x2f,0xad,0xaf,0xea,0x89,0xc8,0xd8,0x3f, \
-0xc2,0x20,0x0d,0x85,0xd3,0x88,0x08,0x61,0xdf,0x08,0xdb,0xe1,0x19,0x57,0x9d,0x1f, \
-0xf8,0xf0,0xad,0x7c,0xb8,0x1c,0x0f,0x48,0x1d,0xac,0x21,0x42,0x1c,0x40,0x4c,0xc8, \
-0x4c,0x7f,0x3f,0x81,0x80,0xb6,0x62,0x63,0x86,0x20,0xcc,0x21,0x08,0x3d,0x64,0xf0, \
-0xea,0xfe,0x83,0x30,0xab,0xe8,0x4e,0xdf,0xc6,0x5c,0xbe,0xec,0x24,0xee,0x39,0x51, \
-0x9b,0xc6,0x12,0x07,0x62,0x58,0x4d,0x47,0xc5,0x86,0xbd,0xde,0x70,0xff,0x2f,0xb2, \
-0x4a,0x20,0x91,0xda,0x95,0x18,0xa0,0x88,0x8c,0x60,0xc6,0x09,0x11,0x62,0xc8,0x82, \
-0x22,0x7f,0x2d,0xdf,0x9b,0x77,0x8c,0x31,0xf0,0x6c,0xae,0xa9,0xd8,0xd1,0xf7,0x53, \
-0xd4,0xed,0x78,0xe0,0x87,0xe5,0x7e,0x0e,0x47,0x2c,0x23,0x58,0x5f,0xf9,0x70,0x04, \
-0x7f,0x4a,0xf1,0x17,0x55,0xd5,0x74,0x1d,0x27,0xa8,0x3d,0x84,0x5a,0x70,0x77,0xca, \
-0x21,0x0e,0xd6,0x17,0xcd,0x4e,0x64,0x0b,0x09,0xdb,0x13,0x38,0x34,0xd1,0x66,0x2c, \
-0x41,0xac,0x19,0xf5,0x2d,0xa0,0x8d,0x2a,0xc6,0xe8,0x62,0x96,0x41,0xaa,0x28,0xe2, \
-0xdb,0xd1,0xda,0xb8,0x72,0x0f,0x6f,0xa8,0x52,0x7b,0x61,0x19,0x0d,0x9c,0x44,0x98, \
-0x54,0x51,0x18,0x88,0xc5,0x58,0xc8,0x21,0xb4,0x62,0x1c,0x98,0x7f,0x09,0xa3,0x94, \
-0x76,0x6a,0x35,0x7a,0xd7,0xf7,0xed,0x20,0x89,0x44,0x1f,0x29,0x51,0xab,0x8d,0x26, \
-0xaf,0x53,0x3b,0xc8,0xc0,0xb8,0x18,0x0e,0xd0,0x03,0xb8,0x85,0xb0,0x16,0x01,0x05, \
-0xa1,0x48,0x5a,0x6d,0x23,0x5a,0xf2,0x28,0x45,0x57,0xb1,0x97,0x80,0x81,0xe2,0xe0, \
-0x82,0xa3,0x08,0x86,0x52,0x54,0x5a,0xd9,0x0b,0xa1,0x8c,0x57,0x16,0x83,0x06,0x8c, \
-0xa5,0x31,0x4c,0x33,0x8a,0x4a,0x99,0x1a,0x5a,0x13,0x75,0xfc,0x81,0xfe,0xfd,0xdc, \
-0x82,0x69,0xe8,0x59,0x3f,0xfa,0x21,0xeb,0x42,0xf4,0x95,0xe2,0x59,0xa7,0x6c,0x0d, \
-0x2f,0xe3,0xa3,0x6a,0x1b,0x5d,0xd5,0x7e,0x1c,0x89,0x17,0x98,0x39,0xf8,0x59,0xe3, \
-0xc3,0x2d,0x43,0x47,0x6f,0x76,0xb7,0x6d,0x2d,0x8e,0xab,0x3c,0x42,0xca,0x9b,0x36, \
-0x4a,0x2e,0x98,0x8d,0xef,0x4e,0xcc,0x38,0xc9,0x53,0x55,0x83,0x8b,0xd0,0xdb,0x71, \
-0x5e,0x71,0x0d,0x8b,0x64,0x17,0x42,0xa0,0xd2,0x0b,0x58,0xfd,0x37,0x0d,0x81,0xe8, \
-0x0e,0xc8,0xee,0x9f,0x3c,0xf1,0xe8,0xcf,0x45,0xb9,0x86,0xad,0x91,0x34,0x64,0x12, \
-0xd4,0x8c,0xab,0xeb,0x68,0x80,0x85,0x1d,0x90,0x5c,0x9f,0xa4,0xc6,0x19,0x50,0xaf, \
-0x0d,0x28,0xe5,0x14,0x31,0x8a,0x6a,0xce,0x72,0x74,0xe0,0x39,0xcf,0x31,0x23,0xc2, \
-0x4c,0xc0,0xd2,0x0b,0x73,0x20,0x2a,0xdf,0x9b,0xd4,0xf8,0xf5,0xa4,0xf9,0xda,0x80, \
-0xa1,0x89,0x3d,0x78,0x44,0x4f,0xe9,0x8d,0x9f,0x53,0xa9,0x88,0x69,0x3f,0x32,0xa7, \
-0xd4,0xc9,0xcd,0x02,0xa1,0xea,0x0d,0xaf,0x0c,0x49,0x3c,0x5f,0xc5,0x6c,0x74,0x29, \
-0xe2,0x9a,0xb2,0x04,0xb1,0x2e,0xc7,0x13,0x33,0xc5,0xa8,0x0d,0xda,0xe2,0x6a,0xdc, \
-0x65,0x2b,0x63,0x2d,0x8e,0xa2,0xc9,0x0a,0xed,0x20,0xab,0xf1,0x80,0x25,0xa1,0x4b, \
-0xe3,0x7f,0x30,0xdf,0x45,0x0f,0xb4,0x7b,0x18,0x70,0x36,0x5c,0x26,0x6f,0x0b,0xac, \
-0xd8,0x8a,0xf3,0x5c,0x4a,0xb2,0x2f,0x25,0x1e,0x43,0x09,0x29,0xdd,0x6a,0x71,0x31, \
-0x9e,0x23,0x8a,0x89,0xad,0x33,0x89,0x0a,0x0c,0xac,0xf2,0x78,0x66,0x99,0xfd,0x93, \
-0x18,0x7b,0x6e,0x4c,0x08,0x45,0x90,0x14,0x74,0xd8,0xf1,0x80,0x7b,0x34,0x9d,0x42, \
-0xe5,0xdb,0x91,0x95,0x8a,0x65,0x48,0xf2,0x86,0x4a,0xe8,0x17,0x26,0x02,0xac,0x5a, \
-0x1a,0xf0,0x80,0x51,0xef,0xe2,0x1d,0x71,0x91,0x62,0x46,0x5f,0x90,0x74,0x8f,0x59, \
-0xbc,0xe8,0xbd,0xfd,0xb2,0xe1,0xe5,0x84,0x8b,0xc4,0xb7,0x7b,0xdb,0x70,0x37,0x27, \
-0x49,0xcb,0x9a,0x44,0xfc,0xe8,0x1d,0xfa,0x9f,0xf9,0xee,0x9f,0x64,0x03,0x79,0x93, \
-0xe8,0x54,0x7f,0x40,0xd1,0x8c,0x41,0x74,0x40,0xfb,0x16,0x82,0xd3,0xcd,0xac,0xae, \
-0x44,0x6e,0x07,0x79,0xd9,0x49,0x73,0x3e,0xfa,0x5e,0x5e,0x74,0x04,0x7c,0x35,0x05, \
-0x7d,0x06,0xb9,0x72,0x07,0x92,0x41,0x56,0xe9,0xfe,0x75,0x20,0x3c,0x0b,0x0c,0xbc, \
-0x2b,0xdc,0x6c,0xcd,0x0d,0xa4,0xc1,0x03,0x88,0x37,0xdc,0xea,0xf5,0x46,0x83,0xf9, \
-0x5c,0x9e,0xfa,0x17,0xe0,0x81,0x6d,0x4d,0x04,0xad,0x81,0xc3,0x0f,0x3d,0xb5,0xb5, \
-0x77,0x48,0xf6,0xea,0x77,0xed,0xaa,0x60,0xb8,0x82,0x15,0x3f,0x41,0x99,0x9b,0xff, \
-0x57,0xcf,0x4f,0x2c,0x3e,0xd6,0x13,0x9a,0x9e,0xa4,0xb8,0x2f,0x22,0x35,0xd1,0x51, \
-0x87,0x76,0xe0,0xcb,0x63,0x31,0x9e,0x4f,0x69,0xa8,0x1b,0x3b,0x37,0x43,0x6a,0x4a, \
-0xd5,0x8e,0x50,0x50,0xef,0xd9,0x31,0x8a,0xe5,0xc5,0x38,0x21,0xde,0x99,0x34,0x3e, \
-0x80,0x5d,0x91,0x06,0x45,0x24,0x43,0x74,0x5d,0xb1,0x07,0xaf,0x0d,0x30,0x3c,0xc5, \
-0x34,0x44,0x17,0x10,0x1d,0x90,0x16,0xa7,0xe2,0x78,0xfb,0x8d,0x80,0x60,0x34,0xc9, \
-0x97,0x61,0x4e,0x55,0x05,0x08,0xf5,0xd1,0x16,0x45,0x1c,0x6e,0x23,0xe1,0xbe,0x8a, \
-0x9c,0x4f,0xa9,0xa3,0x16,0x72,0x69,0x26,0xc5,0x82,0xa8,0x28,0x8c,0x0f,0xd9,0xdb, \
-0xba,0x27,0x9e,0xbf,0xca,0x7a,0x4f,0xaf,0xe1,0x93,0x18,0xf9,0xee,0x3e,0xeb,0x98, \
-0x78,0x64,0x37,0x7e,0x4b,0x84,0xd0,0x13,0xcf,0xe6,0x3a,0xb0,0xc6,0xea,0x77,0xfa, \
-0x02,0xc4,0x04,0x19,0xe4,0xd6,0x3a,0x07,0x1f,0xd3,0xf1,0x4b,0x54,0x5d,0xf1,0xfb, \
-0xaa,0x98,0x66,0x57,0x9f,0xd5,0xb8,0xf8,0x30,0x9b,0xf1,0xe0,0xe4,0xbe,0xd2,0x55, \
-0xf1,0xc3,0x8b,0xda,0x30,0x88,0x1a,0xff,0x1b,0x30,0x27,0xa9,0xaf,0x6c,0xf9,0x54, \
-0x36,0x8b,0x7c,0x8a,0x1e,0x2e,0x1c,0x44,0x17,0xc5,0x8a,0x1a,0x16,0xe0,0x46,0x6b, \
-0xd8,0xe0,0x1c,0xb2,0xea,0x93,0xe9,0xb4,0x0d,0x51,0x89,0x0e,0x26,0x94,0xde,0xca, \
-0xfd,0x51,0x82,0xeb,0x51,0x0e,0xe6,0xa9,0xfa,0x8c,0x9e,0x10,0x74,0x28,0x7d,0x10, \
-0x47,0x28,0xd0,0x3a,0x06,0x66,0x10,0xbd,0x64,0x94,0xdd,0x52,0x6d,0x14,0x34,0x62, \
-0xfe,0xdb,0x05,0x0c,0xca,0x9c,0x1f,0x29,0x79,0x56,0x8a,0x05,0x76,0x64,0x42,0xf2, \
-0x37,0xe9,0xf2,0x61,0x31,0x3d,0x98,0x02,0xe8,0xe9,0xe8,0x25,0x79,0x7f,0x68,0xc9, \
-0x98,0x3b,0xdd,0x36,0x6f,0xa1,0xd2,0x21,0xb5,0x7b,0x41,0xa7,0xfd,0xb5,0xcb,0x47, \
-0x1e,0x47,0x67,0xaf,0xd0,0x7d,0x3c,0xd9,0x70,0xd0,0xf5,0x90,0xc1,0x46,0x01,0xbd, \
-0xa4,0xc1,0xa3,0x6c,0xa0,0xaa,0x42,0xaa,0x68,0xd0,0xe4,0x1e,0xd6,0x8d,0x80,0xae, \
-0xe0,0x4c,0x63,0x10,0x18,0x3b,0x97,0x2f,0xc4,0xc5,0x76,0xe9,0xc5,0x25,0xe0,0x30, \
-0x0e,0x55,0x31,0x66,0xcf,0xd4,0x3c,0xad,0xa4,0xfa,0x02,0x81,0xe7,0x49,0x34,0x0c, \
-0xef,0xeb,0x1b,0x8d,0xfd,0x48,0x0a,0xee,0x38,0x1c,0x2a,0x88,0x20,0x3a,0x52,0xd8, \
-0x6b,0x66,0xb3,0xf0,0xa6,0x5a,0x20,0xe8,0x63,0xb4,0x41,0x78,0x42,0xe7,0xf5,0xf5, \
-0x40,0xa3,0x39,0xcf,0x4a,0x79,0x8d,0xa5,0xd5,0x09,0x82,0xa1,0x6b,0xdb,0x7c,0x61, \
-0x62,0x85,0xab,0x1b,0x62,0x86,0xee,0xdb,0x07,0x1d,0x7b,0x53,0x6d,0xa4,0x6c,0x1b, \
-0xee,0x26,0x47,0x1f,0x91,0xe4,0x5d,0x3c,0x0b,0x0d,0x2f,0x97,0x4a,0xef,0x8b,0x62, \
-0xd9,0x27,0x4d,0xd3,0xf5,0x49,0x72,0x97,0x7f,0xe7,0x46,0xd2,0x9c,0x41,0x48,0x8c, \
-0x86,0xa4,0x1a,0x17,0x7e,0xa9,0x92,0xdb,0x0d,0xe3,0x04,0x12,0xc5,0xc4,0x5c,0x0e, \
-0x98,0x9a,0x74,0x7c,0xfd,0x3a,0xcf,0x63,0x0e,0x0d,0x1f,0x52,0xd9,0xec,0x64,0xac, \
-0x14,0x52,0x22,0x22,0x08,0xc8,0xa2,0x45,0x55,0x01,0x20,0xbb,0x4d,0xb3,0x8a,0x66, \
-0xc8,0x67,0x19,0xa7,0xd7,0xed,0xce,0x64,0xcd,0x30,0x47,0xcc,0xaf,0xc5,0x71,0x9a, \
-0xec,0x29,0x64,0x46,0x43,0x46,0x0c,0x66,0x52,0x78,0x20,0x81,0xe4,0x57,0xb3,0xc9, \
-0x1e,0x74,0x05,0x4d,0x62,0xc4,0x1f,0x6e,0x08,0x33,0xec,0x57,0x0d,0xef,0x8f,0x86, \
-0x4e,0x4d,0xa5,0x81,0x34,0xb3,0x93,0x51,0xc1,0x88,0x03,0xd0,0x80,0xcf,0x78,0x23, \
-0x05,0xa1,0x3b,0x31,0x0c,0x65,0x10,0x8b,0x34,0x2b,0x08,0x0f,0x68,0xf7,0x23,0x22, \
-0xf1,0x79,0xc2,0x0a,0x3f,0x85,0x46,0x55,0x43,0x40,0x69,0xd5,0x2a,0x03,0xa9,0x3b, \
-0xb6,0x8d,0x44,0x7b,0x9a,0x21,0xda,0x43,0xf8,0x61,0x62,0xe4,0x49,0xaf,0x82,0xcf, \
-0x24,0x14,0x10,0x48,0x2a,0x88,0x91,0x15,0x05,0x19,0xc0,0x18,0x42,0x91,0x84,0x24, \
-0xd3,0xe5,0x3d,0x31,0x81,0x32,0x44,0xcf,0x43,0xd2,0xfe,0x6e,0xb9,0xf3,0x5f,0x72, \
-0x26,0x9f,0x8b,0xc3,0x7b,0x42,0x2b,0x91,0x41,0xc2,0x26,0x2e,0x70,0x5b,0x94,0x3d, \
-0xca,0x5c,0xce,0xcf,0x56,0xa1,0xcc,0x31,0x3b,0x6d,0xc8,0x42,0x3b,0x49,0x08,0xb4, \
-0xb3,0x02,0x40,0xca,0x84,0x77,0x98,0x3e,0x58,0x27,0x80,0x52,0xe9,0x50,0xfa,0x10, \
-0xfb,0xbc,0x82,0xbe,0x81,0x3b,0xfc,0xf2,0x70,0x18,0x8a,0x3d,0xe7,0xc1,0x83,0xc8, \
-0x99,0x07,0x2c,0x52,0xfa,0x62,0x35,0xd4,0x68,0x55,0x26,0x00,0xdf,0xaf,0x17,0xfe, \
-0xcb,0x04,0x95,0x57,0x82,0x19,0x9b,0x44,0x41,0x31,0xdc,0x51,0x18,0xe6,0xc6,0xfc, \
-0x35,0x41,0x2c,0x96,0x83,0x52,0xd5,0xbd,0xeb,0xc3,0xec,0xd9,0xb4,0xfd,0xf8,0x62, \
-0x7f,0x85,0xe8,0x69,0x15,0x3e,0x6e,0x36,0x59,0x5b,0xcf,0x01,0x58,0x73,0x64,0xeb, \
-0xdd,0xf2,0x5c,0x7c,0x7a,0xd2,0x4e,0x03,0xba,0xf0,0x04,0xc7,0x74,0x0f,0x9c,0x67, \
-0x46,0xb1,0x50,0x4a,0xc9,0x2b,0x09,0xff,0x66,0x42,0xaa,0xa4,0x50,0x8b,0x30,0x30, \
-0x2b,0x22,0x93,0xfd,0x6c,0x2b,0x16,0x23,0x86,0xb0,0x2e,0xdb,0xf7,0x6f,0x7d,0x9c, \
-0x7e,0xbe,0xce,0x7a,0x79,0x4a,0xee,0x34,0x59,0x0e,0xa2,0x45,0xfe,0x66,0x10,0x50, \
-0x0b,0xfa,0x32,0xf6,0x83,0x46,0x19,0x3c,0x08,0x3a,0xaf,0x89,0x9d,0xad,0xa3,0x93, \
-0x49,0xcb,0x31,0xcd,0x4b,0x59,0x67,0xc6,0xb8,0x5c,0x0d,0x0c,0x7d,0xdb,0xc6,0xcd, \
-0x74,0x83,0x6e,0x82,0x24,0x24,0xe0,0xfa,0xb5,0x99,0x69,0xd3,0x40,0xf4,0x20,0x53, \
-0xd2,0x06,0xf0,0xef,0x39,0x9e,0x5e,0x4a,0xb9,0x75,0x65,0xdd,0x09,0xcb,0x79,0x80, \
-0xed,0xe4,0x8a,0x00,0x41,0x20,0x7c,0xf5,0xa3,0x4c,0x0e,0xf9,0xc1,0x0a,0x78,0x9a, \
-0x53,0x09,0xd7,0x29,0x23,0x3b,0x41,0xea,0x25,0x68,0x20,0xdc,0x54,0xe8,0x66,0x96, \
-0x8e,0xbf,0x74,0x71,0xca,0x24,0x39,0xe7,0xd6,0x73,0x7b,0x90,0xd3,0x77,0x5d,0x75, \
-0x36,0xd4,0x36,0xe0,0xed,0xb1,0x2d,0x06,0x9c,0x30,0x80,0x31,0xee,0xff,0x19,0x0c, \
-0x34,0xcd,0x8c,0x86,0xa6,0xfa,0xc8,0xf2,0xc7,0xfc,0xa1,0x66,0x1e,0xbb,0x6c,0xc9, \
-0x76,0x83,0x5a,0x1e,0xa4,0x0d,0x00,0xfb,0x7d,0xe5,0x9d,0xdf,0x9a,0x75,0x31,0xac, \
-0xb5,0xd2,0xf5,0x3a,0xdb,0x55,0x89,0x21,0x51,0x4a,0x76,0xe8,0x7a,0xc8,0x68,0x9f, \
-0xcf,0xed,0xf0,0x37,0x5d,0xee,0xa5,0x72,0x6a,0x25,0x6c,0x03,0xef,0x4d,0x49,0x0e, \
-0x02,0x19,0x1d,0x85,0xeb,0x4c,0x27,0xb9,0xad,0x9a,0xcb,0x17,0x45,0xc0,0xc4,0x68, \
-0x60,0xcf,0xe7,0x10,0xda,0x6d,0x09,0xbe,0xf5,0x84,0x67,0xe1,0x31,0xdc,0x62,0xc6, \
-0x01,0x2c,0xce,0xe2,0x9f,0x67,0xf8,0x61,0x75,0x6e,0x5e,0xa3,0x2e,0x08,0x31,0xf4, \
-0x95,0xf4,0xa0,0xbc,0x0f,0xbd,0x06,0x01,0xb3,0x8f,0xeb,0xff,0xf4,0x46,0xfb,0x85, \
-0x83,0x56,0x5b,0xb6,0x21,0x6b,0xd5,0xa1,0x9c,0xe5,0x77,0x9c,0x95,0xfb,0x48,0x18, \
-0xc6,0xd0,0xb1,0x8d,0x06,0xb2,0x28,0x2b,0x06,0x42,0xb3,0x59,0x1c,0x2c,0x83,0x11, \
-0x44,0x56,0x45,0x50,0x11,0x01,0x63,0x15,0x3f,0xa3,0x2c,0x59,0x34,0x42,0xc5,0x54, \
-0x58,0x2c,0x11,0x62,0xa2,0x28,0xa2,0x8c,0x15,0x41,0x41,0x04,0x14,0x50,0x33,0x65, \
-0x15,0x11,0x58,0xc9,0xa0,0xd6,0x65,0xac,0x8b,0x06,0x2f,0x88,0x31,0xb0,0x81,0xba, \
-0x47,0x97,0xcf,0xe3,0x7c,0xb4,0x2c,0x5b,0x8d,0x93,0xdd,0xec,0xa8,0x96,0x6c,0x6c, \
-0x47,0xa1,0x89,0x40,0xd2,0x13,0x69,0xb0,0xfe,0x8d,0x64,0x0e,0x8d,0x90,0x58,0x29, \
-0x22,0x28,0xa1,0x3b,0x1f,0xeb,0x67,0x7b,0x9f,0x6d,0x85,0xee,0xb5,0xd7,0x62,0x95, \
-0x8a,0x73,0xc6,0x0c,0x2f,0xfb,0xbe,0xcb,0x3d,0x33,0x45,0xdb,0x30,0xa6,0x1f,0xed, \
-0xb4,0x48,0x9e,0x21,0x18,0x04,0x05,0xb1,0x4a,0x7d,0x88,0x04,0x01,0x87,0x20,0xe5, \
-0x24,0x79,0xb0,0xfc,0xf4,0xfb,0xb2,0x8d,0x36,0x01,0x5e,0x2e,0xd4,0xc3,0x59,0x0e, \
-0xe1,0x5b,0x33,0x9a,0x6d,0xbc,0x66,0xac,0x46,0xab,0x94,0x12,0xc6,0x03,0xe2,0x98, \
-0xce,0xcb,0x10,0xc6,0xd9,0x33,0x84,0x09,0x72,0xf9,0x8a,0x5f,0x4a,0xee,0x55,0x62, \
-0x55,0x10,0x74,0xe4,0x7f,0x73,0x2d,0xb1,0x49,0xb4,0xbd,0x4d,0x84,0x20,0x96,0xa2, \
-0x52,0x55,0x2e,0x31,0x7d,0x4a,0x57,0xb5,0xa1,0x88,0xa7,0xea,0x93,0x9d,0x02,0xd6, \
-0x0f,0xf9,0x7b,0xdb,0xde,0x11,0xbe,0x7f,0x5b,0xac,0x48,0xf5,0xa6,0xf2,0x64,0x29, \
-0x68,0xe8,0xff,0xaa,0x98,0xa7,0x2c,0x24,0x8f,0x93,0xdc,0x97,0xbe,0x0a,0xb8,0x82, \
-0xf9,0x70,0xc9,0x88,0x74,0xb8,0xf4,0x3a,0x97,0x91,0xd0,0x96,0xd1,0xe0,0x4c,0xa4, \
-0x86,0x47,0x67,0xb1,0x2a,0x2e,0x4b,0x3e,0x85,0x2b,0xc4,0x3b,0xb5,0x23,0xd7,0xae, \
-0x8c,0x10,0x9b,0x3f,0x95,0xb1,0x9f,0x01,0x4d,0x1a,0x8e,0x7f,0xba,0x2c,0xbc,0x1f, \
-0xd9,0x7f,0x00,0xe7,0x89,0x97,0xdf,0x92,0x59,0xb5,0xaf,0x6a,0xa2,0x8b,0x32,0xb5, \
-0x83,0xbd,0x80,0x6d,0x20,0x3c,0xd8,0x18,0xec,0x0b,0x45,0x7b,0x27,0x16,0x55,0xcb, \
-0x2a,0x32,0x62,0xb1,0xfc,0x9c,0x1e,0xc4,0xfc,0x31,0x5d,0x4f,0xa3,0xc5,0x7d,0x71, \
-0xad,0x91,0xa3,0x46,0x31,0x43,0x5d,0x0e,0x10,0xdd,0x1b,0xe9,0xcf,0x47,0x0b,0xf0, \
-0xc5,0x1f,0x46,0xa9,0xc9,0x4f,0xcb,0x81,0x7d,0x52,0x9a,0x9f,0xd2,0x1c,0x17,0x2a, \
-0x1b,0xc8,0x8f,0x4b,0xa4,0x5c,0x12,0x2b,0xc3,0x0d,0xe1,0x13,0x1e,0x96,0x37,0xa1, \
-0x24,0x62,0xfa,0x01,0x2f,0xc3,0xfe,0xaf,0x36,0x1a,0xe0,0xe9,0x79,0x4f,0x33,0x4f, \
-0x96,0xf1,0x8e,0xc5,0x66,0x4f,0x88,0xe4,0x14,0x1a,0x97,0x7a,0x5a,0xac,0xff,0xa9, \
-0x43,0x26,0x81,0xa7,0xb4,0x92,0x5a,0x39,0xa1,0x45,0x02,0x08,0x0f,0xe4,0x7a,0x09, \
-0x88,0x5e,0xd9,0x80,0xdf,0xbf,0x49,0xfa,0xdf,0x83,0x02,0xfb,0xe0,0xbc,0x42,0x25, \
-0x87,0x71,0xc4,0x89,0x75,0xe7,0xa6,0x1d,0x5f,0x05,0xbf,0xd3,0x5a,0x6f,0x8a,0x05, \
-0x5d,0x52,0xd3,0x41,0x91,0x12,0x80,0xc9,0xba,0x38,0x90,0x15,0x5b,0x7b,0xb2,0xe4, \
-0x1d,0x1b,0x92,0x94,0x82,0x2b,0xe9,0xf0,0xfa,0x96,0xc2,0x61,0x82,0xb4,0x25,0x3e, \
-0x31,0xf2,0x1e,0xf3,0x1e,0x70,0x48,0x03,0xe5,0xa6,0xe1,0xdf,0x3a,0x06,0xfa,0x94, \
-0x46,0x49,0x23,0x58,0x17,0x8b,0x0a,0xae,0x60,0xd8,0xb5,0x07,0xbf,0x1b,0xde,0xe1, \
-0x62,0xb7,0x6f,0xeb,0x3d,0x0f,0xa3,0x9f,0xbb,0xae,0xbe,0x6b,0x51,0xfc,0x89,0x99, \
-0xfc,0x9f,0xfd,0x7f,0x9d,0x4e,0xc0,0xea,0x6d,0xa0,0x20,0xc3,0xd3,0xf4,0x33,0x25, \
-0xa1,0xf9,0xd7,0x06,0x98,0x05,0x92,0x54,0x23,0x69,0x03,0x0c,0x0a,0x35,0x30,0x70, \
-0x7b,0x19,0xfd,0x28,0x7e,0xc9,0x0f,0xad,0xbf,0xe0,0x62,0x82,0xb4,0xc1,0xe5,0xcd, \
-0xaf,0x4d,0xb7,0x6a,0x84,0x44,0xf4,0x12,0xfd,0x76,0x92,0xa1,0x69,0x9a,0x7b,0x6d, \
-0x4a,0x50,0x19,0x98,0x0c,0x06,0x75,0x9a,0x50,0xd9,0x41,0x74,0x9b,0x58,0xf0,0x6d, \
-0x3f,0x4c,0xcb,0x0e,0xa4,0x1d,0x8d,0x19,0xb1,0x7d,0x8f,0x97,0xe1,0x4c,0x22,0x2e, \
-0x8f,0xe7,0x12,0x8a,0x06,0x6c,0x6c,0x01,0xa3,0x9c,0x41,0xf8,0x86,0x3d,0x80,0xd3, \
-0x19,0x6f,0x84,0x29,0x60,0x26,0xc8,0x1a,0x46,0x13,0x6e,0xc6,0xb1,0x29,0xe1,0x28, \
-0x3f,0xb1,0x58,0x8c,0xaf,0x80,0x83,0x3a,0x9d,0xde,0x30,0x50,0x5d,0xa7,0xa2,0x4a, \
-0xb3,0xcc,0x30,0x3f,0xbf,0x28,0x4b,0xa3,0x8c,0x47,0x3d,0x6f,0xba,0x48,0xae,0xb8, \
-0x87,0xc2,0xf9,0xda,0xd4,0xc5,0x7f,0xf7,0xc6,0xdf,0xac,0xaf,0x77,0xeb,0x4e,0x30, \
-0x4e,0x93,0x0d,0xe1,0xf7,0xc6,0xa7,0xe2,0x97,0x3f,0xe8,0xc6,0xc6,0xca,0x1c,0xb7, \
-0x3b,0xa9,0xf6,0xaa,0x29,0x16,0x5e,0x7e,0xf6,0xdd,0x18,0x26,0xfe,0xcb,0x99,0x12, \
-0x45,0x29,0x25,0x64,0xb5,0x43,0x81,0x4c,0xf2,0x3e,0xd9,0xa8,0x5a,0x07,0x84,0x15, \
-0x95,0x7b,0xd1,0xce,0x1d,0x70,0x72,0x07,0xd1,0x02,0x02,0xad,0x22,0x8e,0x17,0xaa, \
-0x2b,0xff,0x95,0xb6,0x33,0xc8,0x2f,0x63,0x63,0x66,0x3f,0x71,0xb7,0x9b,0x54,0xfb, \
-0xe2,0x07,0xa7,0x83,0x9c,0x89,0xbe,0x09,0xed,0x18,0x5a,0x5a,0x3f,0x6c,0x00,0x97, \
-0x0d,0x24,0x42,0x1f,0x33,0xcb,0x3d,0x47,0x98,0xb0,0xa3,0x56,0xce,0xf4,0x12,0x34, \
-0xc8,0x51,0xca,0x45,0x2d,0x55,0x94,0x1e,0xe9,0x73,0x7d,0x3d,0x34,0xc2,0x49,0xfc, \
-0x84,0xf6,0x38,0x52,0x0a,0xc5,0x84,0x5f,0x99,0xbb,0xe9,0xf6,0x6b,0x49,0xb7,0x55, \
-0x83,0xa3,0x44,0x06,0x7e,0x61,0x7d,0x8b,0x0b,0x66,0x8f,0x0d,0xa4,0xe1,0x58,0x6d, \
-0x8a,0x85,0x5e,0xd0,0x89,0x90,0x66,0xef,0x56,0xb8,0x3d,0xdd,0xb9,0x24,0xb8,0x07, \
-0xb9,0xa2,0xa1,0x82,0xc7,0x36,0xd5,0xb2,0xf7,0x44,0xf9,0x47,0x43,0xc4,0x30,0xc1, \
-0xa8,0x69,0x10,0xe1,0x44,0xa8,0x14,0x9a,0x81,0x88,0xd0,0x92,0x36,0x69,0xbc,0xa7, \
-0x92,0x31,0x3d,0x39,0x2c,0x92,0xa8,0xd1,0xe8,0x70,0xc6,0x0f,0x97,0x87,0x19,0xd2, \
-0x75,0x09,0x60,0xc1,0xb0,0x5d,0x3b,0xf6,0x35,0xef,0x7c,0xa1,0xc7,0x51,0x04,0xb3, \
-0x79,0x92,0x30,0x8e,0xa5,0xb2,0x36,0x52,0x19,0x32,0x19,0x78,0x53,0x82,0x54,0xbf, \
-0x23,0x70,0x6c,0x8c,0x34,0x29,0xcf,0x18,0xb2,0xcc,0x1e,0xc9,0x3f,0x02,0x5d,0x20, \
-0xf6,0xba,0xd5,0x29,0x1b,0x44,0xeb,0xc7,0x3e,0xd7,0x9a,0x1d,0x05,0xcd,0x6c,0x12, \
-0x8a,0x0a,0x71,0xca,0xd2,0xe5,0xe9,0x45,0x1f,0x00,0x61,0xec,0xda,0x8b,0xda,0x15, \
-0x6e,0x28,0x28,0xa5,0x4a,0x41,0x6c,0x80,0x2c,0x08,0xeb,0xa5,0x3f,0x6f,0x00,0x3f, \
-0x44,0x07,0x2a,0x4e,0x59,0x80,0xca,0xa5,0x9c,0x33,0x29,0xd7,0x55,0x80,0x1b,0x0c, \
-0x90,0x54,0xd0,0x4c,0x8e,0x84,0xae,0x51,0x1f,0x17,0x01,0xe4,0xea,0x51,0x34,0xac, \
-0xdc,0xbf,0x38,0x9f,0x64,0x71,0xe5,0x21,0xe0,0x6e,0x5f,0x6f,0xc5,0x5b,0xf5,0xec, \
-0x24,0x81,0x90,0x1e,0x68,0x84,0x21,0xa4,0x2f,0x77,0x5c,0x50,0x3e,0x78,0x87,0x93, \
-0x17,0xea,0x0f,0x39,0xb5,0x4a,0x09,0x3c,0x9a,0xe3,0x5e,0x15,0xd7,0xfb,0xf9,0x5a, \
-0xb7,0x6d,0x96,0x46,0x8a,0x75,0xff,0x6d,0x3e,0x37,0xa9,0x97,0xcd,0xe8,0xb8,0x9a, \
-0xc1,0x1b,0xa7,0x52,0x8d,0x8f,0xf2,0xb5,0xd2,0xff,0x0d,0x7a,0x61,0x21,0x51,0xf9, \
-0xa0,0x61,0x2d,0x15,0x69,0x2d,0x00,0x3a,0x03,0xf5,0x64,0x16,0xe1,0xb3,0xb9,0x06, \
-0xc7,0xae,0xcb,0x6e,0xce,0xca,0xae,0xe6,0x6a,0xb0,0xb5,0x73,0xdb,0x23,0xdf,0x4e, \
-0x14,0x0e,0x90,0xc4,0xfc,0x21,0x64,0x6d,0x61,0xe2,0xd1,0x80,0x0c,0x10,0x6e,0x3f, \
-0x63,0x2a,0x08,0x6f,0xf9,0x52,0x72,0x49,0x3c,0x7c,0xe9,0xac,0xf0,0xe3,0x7e,0x4c, \
-0x0e,0xd4,0xcd,0xb0,0xa2,0x4e,0xa8,0x4b,0x38,0xd3,0x6e,0x77,0xc0,0x77,0xa4,0xc2, \
-0x56,0xa2,0x72,0x4d,0xee,0x38,0x70,0xbe,0xff,0x7e,0xd9,0x27,0x3f,0x5e,0x7f,0x07, \
-0x82,0x32,0xd9,0x08,0xcf,0xdf,0xb7,0x3b,0x0d,0xb6,0x10,0x3f,0x4b,0x50,0x19,0x7a, \
-0x6c,0x82,0x4d,0xa3,0x37,0xdb,0x01,0xac,0xe2,0xd2,0xd1,0x7c,0xf9,0xb0,0xfd,0x54, \
-0x28,0xe7,0xb3,0xa2,0x6b,0xf0,0x34,0xa5,0x83,0x4b,0xb9,0x28,0x86,0x21,0x5b,0x2e, \
-0x2d,0x5c,0x08,0xc8,0xda,0x62,0x63,0x00,0xe2,0x0f,0x8c,0x3e,0xef,0xb6,0xf4,0x9a, \
-0x6a,0x63,0x3d,0x99,0x37,0x1b,0xa8,0x56,0xd6,0xbc,0x74,0x82,0x0b,0x22,0x08,0x3a, \
-0xd8,0x15,0x87,0x02,0x1e,0x24,0xd0,0x82,0xb1,0x35,0x5b,0x4d,0xe3,0x29,0xbb,0x14, \
-0x2a,0x65,0x44,0x32,0x2e,0xf8,0x11,0x42,0x0d,0x38,0x0e,0xae,0x10,0xa1,0xc2,0x1b, \
-0x02,0x6f,0x06,0x01,0x75,0xb8,0xd5,0x14,0xb0,0x6b,0x28,0x5b,0x62,0xc1,0xaa,0xcf, \
-0x7d,0x16,0x8a,0x44,0x88,0x12,0x42,0xea,0xc7,0x4b,0x44,0xf5,0x1c,0x74,0xd5,0x21, \
-0x39,0xb0,0xdb,0x36,0x8a,0x83,0x0a,0x76,0xe6,0x63,0x0b,0x7c,0x50,0x87,0x3c,0x52, \
-0xc9,0x22,0x9f,0x00,0x55,0x29,0xfa,0x9a,0xca,0x21,0xf8,0xc4,0x73,0x21,0x93,0xe8, \
-0x94,0xbd,0x33,0xcf,0x0b,0x5e,0x8d,0x9b,0x3e,0x9b,0x3d,0x28,0x40,0xd5,0x7d,0x9c, \
-0xe7,0x7c,0x45,0xf4,0xa5,0x05,0x4e,0xc0,0xa4,0xb2,0x4d,0x6d,0x5d,0x69,0x43,0x4a, \
-0x59,0xb2,0x14,0x04,0x7c,0x7c,0xb0,0xdb,0x88,0x05,0x52,0x4f,0xdb,0xcc,0x25,0x1e, \
-0xff,0xa8,0xdf,0xc8,0xb9,0xbe,0x0b,0x1a,0x9a,0xd1,0xed,0x74,0xaf,0x6b,0x32,0xe5, \
-0x21,0xe2,0x99,0x42,0x69,0xa6,0x99,0x1d,0xb2,0xda,0xc5,0x82,0xd3,0x14,0xf5,0x9c, \
-0xf4,0x30,0x7e,0x3e,0xec,0x01,0x67,0x0e,0xfd,0x8e,0x21,0xa1,0x64,0x43,0x70,0xa2, \
-0x12,0x4c,0x21,0x36,0x15,0x48,0x11,0x20,0xaa,0x80,0xd0,0xad,0x12,0xc7,0x4b,0x79, \
-0x53,0x2c,0x59,0x26,0x18,0x2c,0x47,0x5c,0xe3,0x08,0x61,0xa6,0x4b,0x60,0xb0,0x71, \
-0x71,0x6e,0x1e,0xfa,0x5c,0xb7,0x29,0x06,0xf1,0xc2,0xd4,0xd9,0x9a,0x45,0x03,0x92, \
-0x43,0x23,0x00,0xd6,0x15,0xb8,0x41,0x2c,0xd1,0x00,0x9a,0x45,0x79,0x92,0x1b,0xd3, \
-0x1c,0x9d,0x58,0x44,0x8d,0xa5,0x34,0x13,0x73,0x59,0x6e,0x54,0xb4,0x31,0xd2,0xa1, \
-0x21,0xe3,0x9e,0x73,0x64,0xd6,0x87,0x96,0x21,0x83,0xad,0x73,0xa4,0x85,0x36,0x1d, \
-0x3f,0x1d,0xfa,0x3d,0x89,0xd4,0xed,0xcf,0x52,0x3b,0xe1,0xde,0x51,0xa8,0x1a,0xff, \
-0x2a,0x4d,0x2d,0xab,0x1e,0xb8,0x34,0xff,0x0f,0xb6,0xaa,0x09,0x22,0x32,0x70,0x3a, \
-0x77,0x85,0x12,0x28,0xb4,0x44,0x5e,0xe1,0xc3,0x31,0x0a,0x81,0x62,0x37,0xd0,0xe5, \
-0x31,0x83,0x1c,0x36,0x6a,0x5b,0x2c,0xa2,0x12,0x32,0x08,0xf8,0xf5,0xdb,0xb7,0xb2, \
-0xb2,0x9f,0x95,0xa8,0xac,0xfd,0x3e,0x87,0x8f,0x2b,0x3c,0x35,0x1a,0xdb,0x6f,0x74, \
-0xca,0x8a,0xf3,0x52,0x14,0x32,0xa0,0x76,0x8f,0x73,0x52,0x7c,0x32,0xf3,0x85,0x17, \
-0xbd,0x88,0x58,0x1d,0xde,0xbd,0x48,0xa7,0xd9,0x95,0x8e,0xea,0x0a,0x45,0xf6,0x46, \
-0xd0,0x02,0xbc,0xf7,0x22,0x15,0xa3,0x7b,0xb2,0xd7,0xb6,0xf2,0x09,0x70,0x69,0x1f, \
-0x36,0x80,0xfc,0x81,0xfb,0xf0,0x3c,0x13,0xdd,0xab,0x42,0x4c,0x99,0x92,0xe5,0x88, \
-0x45,0xf9,0x48,0xd3,0x1f,0x57,0xc8,0xed,0x38,0x02,0x0e,0xdf,0x36,0x2c,0xcf,0x91, \
-0x93,0x49,0x67,0xb2,0x9b,0x20,0xd6,0x34,0xe2,0x12,0x97,0x2e,0x27,0x64,0xcb,0x39, \
-0xf8,0x67,0x84,0xf5,0x04,0xa1,0x91,0xe4,0x52,0x70,0x31,0xdd,0xad,0xf5,0x23,0xe7, \
-0x3e,0xe2,0x37,0xfc,0x7e,0x86,0x12,0x7a,0x2a,0x83,0x6b,0x7d,0x84,0x58,0xd1,0x8f, \
-0x9b,0xac,0x2c,0x03,0x6b,0x15,0xd8,0x06,0xcd,0x68,0xae,0x94,0xfa,0x04,0x75,0x5a, \
-0x83,0x7c,0x19,0x78,0xb6,0x43,0xe8,0xdd,0x84,0x48,0x46,0xb8,0x3a,0x18,0x11,0x3b, \
-0xda,0x0f,0x9b,0xb1,0x05,0xda,0x52,0x45,0x90,0x0b,0xde,0x26,0x91,0x21,0xb6,0x5d, \
-0x94,0x45,0x88,0x98,0x13,0x0e,0xcb,0x63,0xb9,0x50,0x79,0x21,0x7b,0xaa,0x60,0xb1, \
-0x19,0x6b,0x36,0x3e,0x31,0x5b,0xeb,0x70,0xac,0x15,0xe9,0x4b,0x58,0xc6,0x51,0xac, \
-0x40,0xf6,0x88,0x8b,0xa8,0xb4,0x50,0x6b,0x1d,0xde,0x11,0x84,0xe6,0xdb,0x8b,0x24, \
-0xeb,0x73,0x0f,0x62,0x71,0x9c,0xc0,0x6b,0x86,0x03,0xda,0x68,0xdb,0x81,0x1b,0xb0, \
-0xe2,0x21,0x5e,0xfa,0xae,0x03,0xec,0x2e,0x19,0xc3,0x8b,0x5d,0x6c,0xfc,0x2e,0xee, \
-0x5c,0x59,0x76,0xd6,0x9f,0x41,0x8d,0x0a,0x2d,0x52,0xdd,0x85,0xd2,0xca,0xe0,0xf0, \
-0xbe,0x5a,0x76,0xdd,0x37,0xc3,0xad,0x2a,0x2e,0x0a,0xa5,0x9f,0x8d,0xb8,0xf1,0x79, \
-0x11,0x91,0x87,0x18,0x10,0x8c,0x78,0x59,0x6a,0x54,0xcc,0x2e,0xc1,0x2c,0x74,0xdc, \
-0x60,0xa4,0x44,0x69,0x6b,0x82,0x5f,0x6f,0x13,0x22,0x95,0xe8,0x8e,0xc7,0x05,0xbb, \
-0x5b,0x43,0x1d,0x92,0xb9,0x34,0x43,0xe4,0xdc,0xc1,0x61,0x22,0x33,0xbe,0x35,0x04, \
-0x0c,0x30,0xcb,0x22,0x82,0xb7,0x64,0xd3,0x7d,0x54,0x54,0x6b,0x70,0xaf,0x76,0x0c, \
-0xf5,0xac,0x21,0xb4,0x2d,0xa5,0x61,0x18,0x14,0xa0,0xe2,0x34,0xe3,0xa4,0x38,0x82, \
-0x31,0x88,0x38,0x70,0xd7,0x62,0x81,0x98,0x36,0x35,0xce,0x16,0xd3,0x06,0xac,0xca, \
-0x6c,0x68,0x4b,0xab,0x57,0x12,0xe4,0x8b,0x21,0x02,0x05,0x84,0xb8,0x0a,0x17,0x7b, \
-0xe1,0xc7,0x16,0x4a,0x63,0x6a,0x3a,0x6b,0xbb,0x71,0x16,0xb2,0xe1,0x52,0x0b,0x93, \
-0x9a,0xbe,0xb7,0x03,0x7a,0x51,0x52,0x8a,0xc8,0xaf,0x54,0x1c,0x30,0xbf,0x1b,0x41, \
-0x1a,0xbe,0xc8,0x23,0x75,0x2a,0xae,0xe4,0xb8,0x32,0x1d,0x6c,0xe4,0x5a,0xd9,0x30, \
-0x2e,0xb6,0xe3,0x2f,0x32,0x21,0x31,0x67,0xb6,0x8a,0xb0,0x8f,0xb5,0x56,0xb7,0xe1, \
-0x21,0xed,0xb3,0xb6,0x6f,0x82,0x09,0x36,0xda,0xaf,0xa9,0x83,0x6b,0x85,0x1a,0x0c, \
-0x85,0x78,0x27,0x81,0xc2,0x0c,0x59,0x45,0xc6,0xc9,0x49,0x62,0x40,0x14,0x64,0xb0, \
-0xb8,0x58,0xa1,0xab,0xc6,0xa8,0xca,0x2f,0xb2,0x8b,0x0b,0x06,0x2a,0x30,0x12,0xd3, \
-0x82,0xa0,0x2a,0xb7,0x0d,0x2f,0x6b,0x62,0xc6,0xfb,0x83,0xc5,0xec,0x28,0x0e,0x15, \
-0x28,0x81,0xc9,0x4b,0x46,0xc4,0x0d,0x55,0xdd,0x86,0xb6,0x71,0x2f,0x21,0x56,0xd4, \
-0xcc,0x14,0x0a,0x47,0x0f,0x71,0x69,0x2c,0x82,0xaa,0xae,0x34,0x3a,0x4a,0x69,0xa3, \
-0xe5,0xd8,0xba,0xd6,0x2b,0xd8,0x02,0xde,0x2d,0xb0,0x6c,0x70,0x27,0x3c,0x78,0x49, \
-0xa9,0xb5,0xc3,0xe9,0xab,0xdc,0x8e,0x04,0xfb,0x87,0x9a,0x3a,0x5d,0x33,0xb0,0xdb, \
-0x94,0x43,0x8b,0x8e,0x24,0xd6,0x72,0xd9,0xf2,0x63,0x10,0xd9,0x5d,0x6a,0x1c,0x4d, \
-0x3e,0x64,0xa2,0x52,0x25,0x53,0x21,0x23,0x13,0xc8,0xa6,0x8b,0x41,0x50,0x6b,0xdf, \
-0x0f,0xde,0x74,0xce,0xce,0x04,0x39,0x11,0x37,0xeb,0xb6,0x77,0x37,0x4b,0x4e,0x6c, \
-0xfe,0x10,0xcd,0x5e,0x80,0xae,0xb4,0x92,0x83,0x9c,0x98,0x70,0x90,0x0d,0x62,0xd8, \
-0x3f,0x93,0xd1,0x6d,0x5b,0x4c,0x64,0x89,0x51,0xbd,0xb6,0x49,0x4a,0xb4,0x86,0x86, \
-0x08,0x93,0x21,0x10,0x8d,0xa8,0xd5,0xaa,0xd8,0xc5,0x71,0x75,0x85,0x56,0x71,0x7b, \
-0xe3,0xb6,0x4f,0x35,0xd8,0x60,0xef,0x3b,0x23,0x1d,0x5c,0x37,0xa1,0xea,0xe9,0x89, \
-0xcf,0x58,0x21,0xd3,0xe8,0xa8,0x2a,0xb0,0x17,0x77,0x85,0x2d,0xda,0xb2,0x56,0x14, \
-0x76,0x38,0xb3,0xbf,0x6c,0xb7,0x01,0x7d,0x9f,0x01,0x8c,0x63,0xc9,0xd2,0x5d,0x44, \
-0x8e,0x33,0x6d,0xc0,0xb0,0x3c,0xa9,0xb6,0x17,0x4e,0x84,0x02,0x3d,0x77,0x6f,0x12, \
-0x57,0xe8,0x0e,0x50,0xb7,0x73,0x37,0x08,0x47,0x51,0x43,0x99,0xd9,0x09,0x52,0xe2, \
-0x37,0x13,0xf7,0x9b,0xa1,0x2a,0x44,0x2d,0x39,0x1b,0x0d,0x9b,0xcb,0xcb,0x3c,0x06, \
-0x3c,0xe4,0x21,0xa7,0x81,0x3a,0xd0,0xce,0x91,0x4f,0x05,0x9a,0xdd,0x65,0x66,0x41, \
-0xcf,0x92,0xea,0x75,0x6e,0x3a,0x47,0xcd,0x49,0x96,0x14,0xd9,0x02,0xa3,0x51,0x23, \
-0x3a,0x61,0x95,0x1d,0x6f,0xc2,0xd0,0x63,0xa2,0xa0,0x26,0x87,0x0f,0x24,0x1b,0x03, \
-0xbd,0x78,0xa2,0x1b,0xdf,0x3e,0x2d,0xa3,0x6a,0xe9,0x80,0xa4,0x34,0xd4,0x0e,0xa4, \
-0xb2,0x42,0xde,0xe5,0x96,0x09,0x5d,0x64,0x8d,0xd9,0xb6,0xe7,0x7e,0x9c,0x05,0xd3, \
-0x13,0x10,0xdd,0xa8,0x44,0x1f,0x2c,0x6e,0x50,0x2b,0x7f,0xcc,0xeb,0x36,0xab,0x9f, \
-0x26,0xda,0xc3,0x37,0xc3,0x01,0xeb,0x88,0x58,0x35,0x29,0x4b,0x99,0x29,0x31,0xa0, \
-0xd9,0x84,0xc3,0x84,0xf6,0x26,0xb8,0xc2,0x77,0xf4,0x0d,0xfa,0xb4,0x0a,0x6e,0x0d, \
-0x3d,0x1b,0x1c,0xc1,0x3c,0xfa,0x70,0x0d,0x8e,0xf7,0x32,0xd1,0x83,0x36,0xe6,0xe6, \
-0x1c,0xf7,0xe8,0x6a,0xcf,0x5d,0x57,0x5e,0x65,0xb1,0xde,0x7c,0x8b,0x8a,0x67,0xc8, \
-0xc1,0x98,0x1d,0xed,0x11,0x40,0xb7,0x51,0x64,0x7e,0x06,0x88,0x82,0xe4,0x43,0xa3, \
-0xca,0xf1,0xde,0x21,0xf1,0x22,0x9b,0x21,0x05,0xd3,0x69,0x68,0xec,0x61,0x00,0xec, \
-0x6b,0x7a,0x69,0x63,0x7e,0x4e,0x36,0x4d,0x19,0x5e,0x9b,0x1a,0x1a,0x43,0x8c,0x8e, \
-0x47,0x40,0x21,0x2a,0x3f,0x70,0x6d,0x62,0x04,0xd0,0xd0,0x35,0xe3,0xc7,0x89,0xbe, \
-0x26,0xd0,0xdb,0xcb,0x83,0x03,0x73,0x8b,0x81,0x84,0x16,0x1a,0x03,0xf2,0x03,0x8f, \
-0xd1,0xfc,0xc4,0xcc,0x9c,0x27,0xdb,0xe4,0x41,0xc1,0xe5,0xc6,0x96,0x0e,0x82,0x25, \
-0xb0,0x50,0x59,0x7d,0x71,0x8c,0x79,0xdf,0x2e,0x81,0x52,0x1e,0x46,0xa5,0x93,0xaa, \
-0x13,0xd1,0xd0,0x3b,0x64,0x87,0x50,0xc0,0x44,0xf2,0x17,0x13,0x46,0xe9,0x6e,0x8b, \
-0x04,0xe7,0x30,0x34,0x6c,0xb0,0x54,0xb6,0x94,0xdd,0x05,0xc0,0x87,0x6c,0xa8,0x7e, \
-0xf7,0x16,0xa2,0x09,0x53,0xa9,0x8d,0xc5,0x76,0x16,0x44,0x2f,0x19,0xde,0x04,0xe1, \
-0x67,0x3a,0x39,0xca,0xbc,0xed,0x82,0x6e,0x2c,0x70,0xda,0xe1,0x46,0xb0,0x0d,0xd7, \
-0xae,0x52,0x05,0xb3,0x25,0x92,0x59,0x5d,0x14,0xba,0x35,0x90,0xb3,0xe5,0xd9,0xc5, \
-0x2a,0xcf,0x40,0x29,0xf4,0x31,0x71,0x4c,0xc0,0x5a,0xac,0x04,0x24,0x2a,0x91,0x66, \
-0x14,0x18,0xdf,0x79,0x84,0xda,0x6f,0x58,0x13,0xaa,0xd2,0x30,0x2b,0x8c,0xf0,0x24, \
-0xcf,0x06,0x69,0x31,0x68,0xb9,0xe2,0x3d,0x8a,0x70,0xad,0x09,0xf4,0xb2,0x93,0x59, \
-0xf5,0x9c,0x83,0xd3,0xd0,0x1b,0xf7,0x0b,0x70,0x7a,0xca,0x4e,0x03,0x39,0xb2,0x30, \
-0x57,0x83,0x02,0xc6,0x0c,0x62,0xda,0x16,0x85,0xb2,0x31,0x55,0x91,0x8e,0x96,0xab, \
-0x21,0xd2,0x51,0x2c,0xd3,0xbf,0xf5,0x9d,0xd7,0xdc,0x72,0x34,0xf2,0xbb,0xf8,0x81, \
-0x3c,0x67,0x11,0x3c,0xeb,0x67,0x0c,0x2f,0xc7,0x54,0xad,0x1f,0x99,0x3c,0x86,0x9a, \
-0x34,0xd2,0x6d,0x42,0xeb,0x68,0xd6,0x65,0x1d,0x6e,0x51,0x8b,0xa5,0x86,0x31,0xb0, \
-0xb6,0x95,0x37,0xf5,0xb6,0x3b,0xdf,0x00,0xfa,0x26,0xd0,0xe4,0x4d,0x44,0xe4,0x66, \
-0x95,0x91,0x97,0x26,0x5f,0x5c,0xdc,0x6d,0x61,0x7c,0xf9,0x5e,0xee,0xad,0x11,0x0a, \
-0x29,0xda,0xd0,0xdf,0x10,0x63,0xeb,0xd0,0x34,0x0f,0x09,0x21,0xc8,0xd4,0x78,0xfb, \
-0x66,0xe5,0xe0,0xe4,0x19,0x6d,0x37,0x12,0x49,0x70,0xcc,0x56,0xd7,0xc9,0x9e,0x3c, \
-0x60,0x46,0xc0,0xb0,0xf7,0x6f,0xc4,0x1b,0xe6,0xd4,0x7d,0x5b,0xe5,0x1b,0x18,0x83, \
-0xed,0x61,0x80,0xf3,0x43,0x03,0x8a,0xc0,0x5f,0xdd,0x45,0x17,0xe8,0x37,0x1a,0xfd, \
-0x3c,0x21,0x27,0x26,0x4f,0x2e,0xeb,0xf5,0x4f,0x3c,0x5c,0x3f,0xd8,0x38,0x0c,0x59, \
-0x18,0x2c,0x8b,0x31,0x70,0xd6,0x18,0x66,0x18,0x0b,0xb3,0x26,0x58,0x4c,0x09,0x16, \
-0x30,0x60,0xab,0x46,0xd6,0xc1,0xc5,0x0a,0xc9,0x14,0x22,0x27,0x85,0xa6,0x1d,0xf9, \
-0xd4,0xe8,0xe7,0x96,0x6e,0xc8,0xe6,0xec,0x3a,0x7d,0x53,0xe2,0x28,0x3c,0xd5,0xa8, \
-0x3c,0x8e,0xf6,0x19,0xa4,0x22,0x26,0x9a,0x61,0x36,0xc5,0x0f,0xbe,0x1b,0x63,0x16, \
-0x64,0x4d,0xe3,0xf4,0x9f,0x3d,0xcd,0x7a,0x16,0x04,0xb4,0x5b,0x5b,0x00,0x77,0x52, \
-0x86,0x83,0x39,0xd2,0x80,0x4f,0x06,0x42,0x7a,0x8c,0xe6,0xc2,0x07,0x68,0x92,0x1b, \
-0x60,0xb3,0x5e,0x74,0x86,0x2f,0x00,0x44,0x41,0xc0,0x58,0xa8,0x5f,0x7d,0x5d,0x43, \
-0x4f,0x8e,0x85,0x76,0x09,0x17,0xa2,0x09,0x90,0x11,0x73,0xca,0x83,0xed,0x88,0x87, \
-0x08,0xdd,0x09,0xfc,0x5e,0xfe,0x29,0xcb,0x54,0x7a,0x97,0x73,0xd5,0x99,0x83,0xfa, \
-0x72,0x4c,0x73,0x2c,0x53,0xa9,0x85,0x31,0x03,0x84,0x46,0xe4,0x91,0x6f,0x09,0x16, \
-0xdb,0x68,0x00,0xb1,0x02,0x31,0x31,0x1c,0x45,0xf7,0xb3,0xa7,0x8f,0x66,0x3b,0xb6, \
-0x77,0xc8,0xce,0x74,0x99,0x47,0xc6,0xda,0x94,0x62,0x0a,0xc4,0xd8,0x7c,0xf3,0xae, \
-0x87,0xc9,0xd2,0xe5,0x3a,0xe7,0x34,0xff,0xcb,0x15,0x62,0x39,0xae,0xbc,0x1d,0x5a, \
-0x28,0x33,0xdd,0x96,0xcc,0xd5,0xbd,0xcd,0xd9,0x0b,0x93,0xdc,0xa5,0x63,0xac,0xde, \
-0xed,0xf0,0x9a,0x9c,0xdd,0xc8,0x68,0xb1,0xe0,0x1f,0x1c,0x1c,0xd2,0x7e,0x2d,0xe6, \
-0xc7,0x65,0x14,0xa8,0x14,0x0e,0x55,0xd3,0xcc,0xda,0x7b,0x99,0x7c,0xe2,0xa2,0x32, \
-0x44,0x05,0x45,0x16,0x2a,0xc1,0x18,0x9e,0x96,0x88,0x34,0x4a,0x33,0xba,0x34,0x62, \
-0x02,0x88,0xc4,0x2b,0x51,0x54,0x9a,0x06,0xfb,0x7c,0xea,0x7d,0x47,0xdd,0x3b,0x2d, \
-0xea,0xb0,0x07,0xe2,0x04,0x81,0xaa,0xb1,0x2d,0x0a,0x56,0x39,0xfb,0xdd,0x15,0x0c, \
-0x83,0xc2,0xaf,0x6b,0xc0,0x47,0xe7,0x89,0x22,0x89,0x77,0x84,0x3e,0x28,0x1e,0x7d, \
-0x83,0xb8,0x48,0xc8,0xa6,0x6c,0x10,0xdb,0x4b,0x49,0xf5,0x8a,0x1f,0xb0,0x68,0x1d, \
-0xec,0x29,0xc5,0xb0,0xda,0x36,0x6c,0x70,0xc4,0xe3,0xe1,0x9f,0xc1,0xf1,0xf7,0x7e, \
-0x5a,0xfc,0x38,0xe8,0x8c,0x28,0x86,0x47,0xbb,0x5d,0x18,0x6a,0x14,0x03,0x36,0x3a, \
-0x94,0x08,0x0f,0xa7,0x5f,0x84,0xff,0xaa,0xa8,0xb2,0x36,0xde,0xda,0x76,0x26,0x30, \
-0x5b,0x96,0xc0,0xa7,0x02,0xc8,0x48,0x8c,0x4f,0x4d,0x8c,0x98,0xec,0x78,0x7c,0xfb, \
-0x3c,0xdf,0xdd,0xd1,0xf6,0x78,0xf3,0x39,0xb0,0x4b,0x82,0x6b,0xcc,0x3f,0x5b,0xd7, \
-0xc6,0x1f,0x30,0xf5,0x14,0x6c,0xde,0x41,0xec,0x08,0x0a,0x53,0x1d,0xb9,0xed,0xc0, \
-0x0e,0xcb,0x42,0x6d,0xfa,0x6d,0xeb,0xa7,0x8a,0xc6,0x76,0x56,0xe6,0xa5,0x38,0x8f, \
-0x41,0x22,0xdd,0x90,0x55,0x81,0x82,0x2f,0xdd,0xa1,0xfb,0x64,0x3e,0x1e,0xdf,0x97, \
-0xb0,0xee,0xe3,0x77,0xcb,0x7d,0x79,0x8c,0x7a,0x3d,0x7c,0x29,0xd8,0x75,0x27,0xe3, \
-0x46,0x3a,0x87,0xa6,0x2c,0x88,0x46,0x4c,0x09,0x0d,0xb0,0x88,0x66,0xc0,0x4c,0xfc, \
-0x0d,0x36,0x2e,0x9b,0x40,0x76,0xb4,0x07,0x3e,0x75,0x17,0x63,0x4d,0x0f,0x9c,0x26, \
-0xc2,0x37,0xa3,0x35,0x1a,0xb5,0x87,0xdd,0x53,0xa0,0x5e,0x81,0x8d,0xae,0x5a,0xab, \
-0x6c,0x36,0x1f,0x8b,0xc8,0xf0,0x1b,0x47,0x71,0xc6,0xe9,0x01,0xf9,0x8c,0x05,0x23, \
-0xd8,0xd0,0x11,0x26,0x83,0x27,0x32,0xd2,0x48,0x61,0x05,0x24,0xa7,0x1d,0xd3,0xdb, \
-0xf7,0xb3,0xe4,0x62,0xec,0x8c,0xd6,0x1b,0x0e,0x01,0x8a,0x12,0xf6,0xb0,0x6c,0x16, \
-0xe8,0x84,0x70,0x37,0xef,0x2f,0xd4,0xdb,0x6d,0x1e,0x51,0xe3,0xbc,0xb4,0xb1,0x28, \
-0x0f,0x2a,0x13,0xe8,0x40,0xb9,0xb2,0xb0,0x06,0xd4,0x90,0x62,0xb5,0x15,0x17,0x4f, \
-0x08,0x35,0x5b,0x8b,0x29,0xf4,0xbc,0x74,0x8c,0xbe,0xb3,0x9d,0xca,0xc8,0x2e,0x2c, \
-0x40,0x6e,0x68,0x0a,0x1b,0x9a,0xf0,0x68,0x39,0xad,0x7d,0xac,0xd8,0xcc,0x69,0x3e, \
-0xda,0x6f,0x27,0xcb,0xb0,0xa7,0x2e,0xcb,0x18,0x14,0x77,0x89,0xd6,0xe2,0xce,0xd6, \
-0xa4,0x78,0xd2,0xb3,0xde,0xcd,0x89,0x57,0x80,0xb6,0xf1,0xac,0xb3,0xcb,0xdc,0x0c, \
-0x25,0x8d,0x0c,0x8b,0x19,0x47,0xeb,0x17,0xda,0xf1,0x28,0x8e,0xb6,0x0e,0xf1,0x43, \
-0x74,0xbb,0xb5,0x6b,0x0c,0xc1,0x73,0x3a,0x8d,0xe9,0xf3,0x78,0xa4,0x04,0x95,0x1d, \
-0x18,0x86,0x46,0xba,0x50,0xb2,0xc5,0xea,0x8a,0xe7,0xea,0x22,0x42,0x28,0x04,0x85, \
-0x2b,0x02,0x25,0x56,0xd4,0xcc,0xfc,0x3a,0xfc,0xd8,0x3b,0x35,0xa7,0x4b,0x05,0x05, \
-0x46,0x0a,0xc6,0x08,0x92,0x20,0xa9,0x16,0x48,0x58,0x17,0xea,0xdc,0x7e,0x54,0xe4, \
-0xd9,0xf3,0x70,0xc7,0x47,0x42,0x46,0xf8,0x64,0x8c,0x7a,0xa9,0x7b,0xae,0xa0,0xe4, \
-0x8b,0x03,0x40,0x1e,0x77,0x4d,0xe9,0xf8,0xfd,0x1e,0xee,0xd5,0xf4,0x40,0xeb,0x4e, \
-0x68,0x23,0x08,0x01,0x3e,0x56,0xa2,0x6e,0x93,0x94,0xa8,0x1e,0x70,0xe0,0x74,0x58, \
-0x79,0xf5,0xa5,0xd8,0xc8,0x48,0xb2,0x2c,0x83,0x0c,0xbc,0x7b,0x05,0x3c,0xc4,0x89, \
-0x18,0x11,0x14,0x7e,0x6b,0xeb,0xe4,0x18,0x99,0x67,0xc7,0xe9,0xbd,0x56,0xd3,0x86, \
-0x6f,0xa3,0xc7,0x62,0xc3,0x4c,0x5d,0xb1,0xac,0xce,0x0c,0xff,0x4b,0x2b,0x7a,0x96, \
-0x58,0x5e,0x37,0x27,0x8e,0xd4,0x20,0x9c,0x4b,0x94,0x8a,0x70,0x38,0x23,0xde,0x98, \
-0x21,0x8c,0x03,0xd2,0x50,0x22,0x47,0x81,0x28,0xd8,0x1b,0x54,0xe8,0x6a,0x88,0x8c, \
-0xa2,0xcb,0x3e,0x88,0x56,0x6a,0x19,0xd9,0xba,0x0c,0xb5,0x97,0x85,0xae,0x74,0x96, \
-0xa5,0x27,0xad,0x5c,0xac,0x65,0xd7,0xb8,0x81,0x7a,0xa4,0x83,0x03,0x47,0x21,0xb4, \
-0x91,0x2b,0x14,0x85,0x97,0xec,0x4c,0xf5,0xe8,0xdf,0xfc,0xf8,0x9b,0xbe,0xed,0x21, \
-0x85,0x72,0xed,0xc4,0x91,0x46,0x6e,0x62,0x0b,0x29,0x82,0x60,0x81,0x60,0xe2,0xc5, \
-0x03,0xec,0x6a,0xc7,0x41,0xac,0x33,0xb3,0x61,0x92,0x96,0xca,0xdd,0x53,0xdd,0xfb, \
-0xb1,0xe0,0x70,0xd3,0xd6,0xfe,0x30,0xfc,0x37,0xe0,0xe4,0x04,0x8e,0xdb,0x6c,0x02, \
-0xd4,0x01,0x48,0x48,0x7e,0x8b,0x6a,0xf4,0x8e,0xa1,0xe3,0x99,0x99,0x12,0x41,0x60, \
-0xa8,0xc5,0x16,0x41,0x81,0x84,0x81,0xda,0xce,0xde,0x7d,0x26,0x5e,0x19,0x3c,0x59, \
-0x58,0x06,0x0b,0x8a,0x58,0xb2,0x5c,0x7c,0x73,0x72,0x20,0xf4,0x72,0x69,0x94,0x30, \
-0xba,0xb6,0x2a,0x15,0x28,0x08,0x22,0x82,0xeb,0x2c,0xa2,0x2e,0x8d,0x11,0xc6,0xba, \
-0x64,0xc6,0x61,0x9d,0x30,0x60,0xca,0x19,0x45,0x24,0xa2,0x40,0x66,0x00,0x4c,0x43, \
-0x21,0x10,0xaa,0x4c,0xa8,0x84,0xe5,0xb5,0x84,0xda,0x7b,0xa9,0x1c,0x5f,0x5c,0x38, \
-0x82,0x96,0x1e,0xe0,0xc5,0x7b,0x11,0xd6,0x0f,0xbc,0x52,0x6e,0x37,0x79,0x5d,0x2c, \
-0xe9,0xea,0xda,0x4d,0x28,0xb1,0x4a,0x8d,0x03,0x60,0xc1,0x00,0x51,0xe5,0xbf,0x5c, \
-0x1d,0x0f,0xd5,0x43,0x96,0x99,0x4a,0xaa,0x22,0xfb,0x6d,0x22,0xc8,0x8f,0xc2,0xa9, \
-0x62,0x31,0x5c,0xb2,0x53,0x36,0x86,0xcc,0xca,0xa8,0x93,0x7d,0xb3,0x28,0xeb,0x6b, \
-0x23,0x16,0xd1,0xa2,0x11,0xbd,0x6e,0x5d,0x75,0x36,0xd8,0x83,0xd3,0x83,0x2c,0x9b, \
-0xd9,0x79,0xb6,0x7e,0x1e,0x72,0xba,0x70,0x68,0xd5,0x1d,0x88,0x4e,0x0d,0x45,0x84, \
-0x59,0x0b,0x69,0xc3,0xc7,0xae,0xe0,0xc8,0x13,0x94,0x0a,0x43,0xf1,0x6c,0x73,0x8e, \
-0xe2,0xb3,0x29,0xd0,0xf3,0xa1,0xb6,0x62,0x7e,0xd2,0xc3,0xea,0x10,0x52,0x4c,0xe7, \
-0xf5,0x62,0x13,0x28,0x43,0x89,0xc0,0xeb,0x8f,0x99,0x11,0x9d,0x1f,0xcb,0x89,0xd5, \
-0xc2,0x4e,0xe6,0x56,0x4e,0x54,0x91,0x8e,0xfc,0xb3,0xac,0x14,0x9c,0x11,0x49,0x44, \
-0xe6,0x38,0xc5,0x2b,0x0c,0x32,0x7e,0xb4,0x93,0x18,0xce,0x27,0x9b,0x81,0x2c,0xd0, \
-0x5b,0x48,0xc8,0x82,0x65,0x06,0xa8,0x2f,0xdb,0x26,0xbc,0xdb,0x19,0x9e,0x4e,0xf5, \
-0x83,0x8b,0x2a,0xdf,0xe8,0x9f,0xc1,0xf4,0x8c,0x91,0x95,0xef,0x21,0x25,0x3d,0xe1, \
-0x41,0x1a,0x9f,0x36,0xbd,0x3b,0x97,0x76,0x45,0x47,0xab,0x63,0x10,0x7e,0x0c,0x8e, \
-0x5d,0x0b,0x7b,0x96,0x62,0x42,0xad,0xc0,0xfd,0x66,0x1f,0x26,0x9e,0x54,0x6d,0x24, \
-0x51,0x90,0x91,0xa0,0x29,0x53,0x31,0x33,0xf7,0x75,0xe2,0xee,0xe8,0xfb,0x37,0xcd, \
-0xdb,0xbe,0x8f,0x64,0xa9,0x0f,0x13,0xa1,0x66,0x62,0xb5,0x27,0xc6,0x09,0x86,0x2f, \
-0x06,0x64,0x66,0x29,0x5d,0xb1,0x0c,0xb3,0x2c,0x50,0x2f,0xc7,0xa6,0x69,0xb8,0x93, \
-0xa1,0x81,0x04,0xec,0xa9,0x1e,0xf8,0x06,0x5c,0xa0,0x2a,0x58,0x45,0x41,0x34,0x4c, \
-0x29,0xac,0xc2,0xe2,0xa7,0x66,0x0a,0x98,0x82,0x62,0x97,0x0c,0x64,0x66,0x2d,0xc9, \
-0xdb,0x11,0xd5,0xe6,0x9c,0x18,0xbd,0xd7,0xc6,0x9a,0xba,0x11,0xda,0x1f,0xb2,0x8b, \
-0x03,0xed,0xd9,0xeb,0xc0,0xa4,0xa2,0x0d,0x6d,0xb7,0xef,0xe2,0xa3,0x40,0xd0,0x11, \
-0x60,0x67,0x25,0x13,0x41,0x10,0x2e,0x2f,0xc9,0xa3,0x53,0xdb,0x54,0x94,0x70,0x78, \
-0x54,0x99,0x0c,0x10,0x2d,0x47,0x8f,0x80,0x3d,0x08,0x91,0x00,0x41,0x14,0x45,0x09, \
-0xc2,0xd5,0x8a,0xcd,0x01,0xb1,0x5b,0x68,0x22,0x2a,0x31,0x91,0x6a,0x3d,0xdb,0x78, \
-0x24,0xd3,0xcc,0xd1,0x5f,0xf0,0x53,0x86,0x29,0x46,0x64,0xd2,0x03,0x10,0x25,0xa6, \
-0xd0,0xda,0x57,0x1a,0x3a,0xbd,0xd4,0xfb,0x69,0x52,0x48,0x59,0xf6,0x9b,0x4e,0x3c, \
-0x00,0xd3,0x77,0xbb,0xa6,0x70,0x33,0x3a,0x6f,0x77,0xfc,0x16,0xa9,0x66,0xde,0x94, \
-0x91,0xe6,0xf6,0x7d,0x6a,0x96,0x04,0x71,0x35,0x46,0x04,0xf0,0x68,0xd4,0x91,0xf3, \
-0x6a,0xcc,0x9e,0x7d,0xf6,0x8f,0x68,0xc9,0x41,0x11,0x35,0x2f,0xa2,0xe3,0x70,0x93, \
-0xfa,0xfc,0x34,0x98,0x64,0xf7,0x6c,0x46,0xf3,0x90,0xd9,0xe7,0x69,0x63,0x84,0x84, \
-0xb0,0x61,0x64,0xc2,0x0a,0x23,0xa4,0x2b,0x06,0x9a,0xce,0x58,0x2e,0x72,0x7a,0x22, \
-0x31,0x5a,0xfa,0xe4,0x87,0xbb,0x9e,0x86,0x66,0xa1,0xc3,0x6f,0x44,0x68,0xc4,0x2d, \
-0x59,0x96,0x1c,0xc4,0x0c,0xac,0x20,0xa1,0xa6,0x69,0x91,0x44,0x93,0x89,0x0d,0x57, \
-0xc5,0xc6,0x29,0x61,0x88,0xac,0x8b,0xc4,0x28,0x51,0x0c,0x58,0xa0,0xc4,0x08,0x1a, \
-0x88,0x44,0x6e,0xa8,0x5c,0x21,0x9c,0x51,0x84,0x59,0x90,0x52,0x6e,0x98,0x21,0x61, \
-0x12,0x2d,0x52,0x76,0x1c,0x94,0x21,0x6a,0x90,0x92,0x3a,0x35,0x0d,0x42,0x19,0x8e, \
-0x08,0x55,0x5d,0xa6,0x68,0x82,0x0a,0xb0,0x6d,0xfc,0xdb,0x60,0x9a,0x78,0x0d,0xb2, \
-0x68,0x83,0x56,0x19,0x6b,0x93,0x08,0x22,0x51,0x51,0x86,0x94,0xaa,0x82,0xdb,0x6d, \
-0x16,0xe1,0xa8,0xe3,0x01,0x71,0x91,0x2a,0x49,0x04,0x20,0xc4,0xa5,0xa9,0x41,0x55, \
-0xa1,0x4a,0x8e,0xa5,0xfa,0x7c,0xda,0xe7,0x1a,0x1e,0xd0,0xd0,0x0c,0x7e,0x8e,0x38, \
-0x1e,0x83,0xce,0x80,0xf9,0x15,0xd6,0x92,0xb3,0x44,0x40,0x42,0xc2,0x86,0x3b,0xfa, \
-0x5a,0x2f,0x38,0xd4,0xa2,0x80,0x62,0x19,0x3c,0x7b,0x68,0x2a,0x30,0x38,0xb0,0xe2, \
-0x33,0xbf,0x1d,0x56,0x21,0x64,0xe9,0xa3,0x13,0xa9,0x54,0xe9,0x0b,0x5d,0x0f,0x6d, \
-0x82,0xbe,0xa2,0xc1,0x0c,0x9a,0xcd,0xa1,0x2e,0x6c,0x50,0x55,0x31,0x41,0xbd,0xbf, \
-0xc3,0x26,0x0d,0x12,0x89,0x94,0x28,0xc8,0x2e,0x88,0x54,0x59,0x33,0x82,0x93,0x0c, \
-0xad,0x60,0xb8,0x1a,0x83,0x71,0x70,0x98,0xc2,0xcd,0x93,0x01,0x9d,0xe1,0x8c,0x5c, \
-0x16,0x92,0x8e,0x34,0x64,0x30,0xe2,0x31,0xf9,0xe9,0x55,0x56,0x22,0x29,0x9b,0x2b, \
-0x26,0xe8,0x35,0x77,0xa4,0x75,0x1b,0x09,0x06,0x07,0x0c,0x29,0x98,0x32,0xe9,0x01, \
-0x5e,0xe2,0x0d,0x43,0x57,0x58,0x0a,0x3c,0x69,0x37,0x41,0xda,0x05,0xc4,0xda,0xc1, \
-0x52,0xa2,0x12,0x00,0x42,0x2a,0x1a,0x83,0x2a,0x93,0x71,0x0c,0x52,0x04,0xc9,0x4d, \
-0x65,0x51,0xa8,0xb5,0xa8,0xa8,0x96,0x57,0x99,0x67,0x52,0x19,0x27,0x52,0xb5,0x53, \
-0x6b,0x72,0x05,0x49,0x08,0x41,0x0f,0x25,0x83,0x8e,0x4e,0x42,0xbc,0xe4,0x56,0x88, \
-0xa5,0xcc,0xb7,0x89,0xe6,0xf9,0x6e,0x16,0x74,0x7a,0x97,0xab,0xbe,0xd5,0x37,0xb4, \
-0x62,0x33,0xa1,0xe0,0x6e,0x00,0x82,0xde,0x3f,0x09,0x5c,0x5a,0x52,0xd8,0xd1,0x85, \
-0x73,0x36,0xac,0xb0,0xf5,0xdf,0xd8,0x61,0xbe,0xfa,0xb6,0xb0,0x1b,0x5e,0x7a,0x40, \
-0xfd,0x3b,0xa9,0x64,0x56,0x84,0x55,0xa8,0x6d,0x80,0xf1,0x60,0x7b,0x2c,0xdc,0x14, \
-0x1c,0x4c,0x12,0x4c,0x0e,0x99,0xc1,0x5c,0x2d,0x96,0xa8,0x29,0x44,0x11,0xb6,0x53, \
-0x03,0x5c,0x45,0x44,0x4b,0x4a,0x28,0x28,0x16,0x94,0x1b,0x60,0xdb,0x19,0x42,0xc9, \
-0x68,0xca,0x32,0xd2,0xdb,0x21,0x46,0x35,0xa9,0x1a,0x39,0x82,0x38,0x3e,0x19,0x0c, \
-0x99,0x93,0x7d,0x05,0x62,0x05,0x8b,0x89,0x65,0x86,0x80,0x52,0x60,0xa4,0xc4,0x18, \
-0x16,0x83,0xb2,0x93,0x72,0x8d,0x47,0x16,0x0c,0x27,0x34,0x32,0x80,0xe4,0x99,0x62, \
-0x21,0x63,0xb9,0xde,0x84,0x3d,0x36,0x2d,0xcd,0xdc,0x78,0xf9,0x2f,0xb0,0xbd,0x60, \
-0xb6,0x87,0x4e,0x30,0x5d,0x0a,0x89,0x51,0x48,0x3f,0x99,0x29,0x8c,0x51,0xd9,0x22, \
-0x9a,0xed,0xf8,0x71,0x20,0xb9,0x61,0xee,0x61,0xc9,0x9f,0xb5,0x86,0x4f,0x95,0xde, \
-0xce,0xe4,0xa9,0x32,0x84,0x2f,0x58,0xfb,0x96,0x8c,0xa1,0x88,0xa2,0xf7,0xbc,0x37, \
-0x58,0x64,0x74,0x0d,0x1a,0xd9,0x95,0x15,0x73,0x6f,0x35,0x86,0x98,0xe2,0x97,0xe1, \
-0x84,0x7c,0xf8,0x4a,0xf6,0x79,0xeb,0x25,0x88,0x6c,0x39,0xc8,0x92,0xd8,0x12,0x91, \
-0x46,0x04,0x7c,0x9a,0x08,0x20,0x71,0x0d,0x67,0xcf,0xe3,0xd3,0xe1,0x3f,0x6b,0xf7, \
-0x4b,0x4b,0x3b,0x85,0x4a,0xac,0x29,0x65,0x1b,0xb8,0xd3,0x01,0xa3,0x88,0x38,0x33, \
-0x44,0x3b,0x60,0xb2,0x28,0xb9,0xf5,0x57,0x3f,0x3f,0x65,0x8f,0x4d,0x1e,0xab,0x62, \
-0x6c,0xfd,0x65,0x73,0xa7,0x24,0x9b,0x86,0x1b,0x17,0x14,0x9b,0x36,0x7c,0x7f,0x48, \
-0xba,0xbf,0x65,0xac,0xdf,0x36,0x3c,0xce,0xbf,0x11,0xb1,0xba,0x77,0x7c,0xd0,0x32, \
-0xff,0x7b,0xc0,0xfd,0xa1,0x49,0xb8,0x9b,0x40,0x0e,0xb8,0x2f,0x0a,0x40,0xd9,0x10, \
-0x41,0x64,0x04,0x60,0x26,0x21,0xef,0x26,0x58,0x1d,0x88,0x7b,0x90,0xc0,0x31,0x16, \
-0x0f,0x47,0xb7,0x10,0x96,0x31,0x05,0x46,0x0c,0x4c,0xa7,0xb3,0xe7,0x87,0xb9,0x8a, \
-0x82,0x2c,0x16,0x41,0x60,0x63,0x59,0xe8,0x96,0x6c,0x20,0x71,0x2f,0x29,0x0d,0xa8, \
-0x7c,0xcf,0xc9,0xda,0xd0,0xbc,0xf5,0x9b,0x08,0xfa,0x7b,0x15,0x9a,0x1d,0x93,0x96, \
-0xe5,0x14,0x81,0x24,0x8e,0x91,0x0e,0x29,0xa3,0xa1,0x06,0x9c,0xb9,0x97,0xa2,0x20, \
-0x6f,0x30,0xe1,0x22,0x9b,0x66,0x4c,0x82,0xa0,0x20,0x2a,0x6d,0xef,0xef,0x38,0x73, \
-0xe2,0xc3,0xb0,0xf1,0xe3,0x1f,0x08,0x6c,0xa7,0x34,0xdd,0x0f,0xbd,0xd6,0x18,0xce, \
-0x70,0x1d,0x6d,0x57,0x7b,0x5e,0x66,0x8e,0x89,0xf3,0x1b,0xb7,0xa6,0xc3,0x66,0x1a, \
-0x73,0xdf,0x2b,0x29,0x06,0x88,0x88,0x6c,0xd4,0xc5,0x7b,0xe8,0x51,0x51,0x91,0xf2, \
-0x4a,0xc1,0x44,0x11,0xc9,0x9c,0x61,0x43,0xe2,0x0d,0x8e,0x0d,0xd4,0xd9,0xc8,0x0a, \
-0x2a,0xb8,0x2c,0xa6,0x1d,0xdb,0xa4,0x0b,0x0c,0xb8,0x2d,0x43,0xaf,0xe9,0xce,0x35, \
-0x3f,0x89,0xbc,0xc7,0x95,0x3a,0x3b,0xd2,0x0f,0x20,0x30,0x5c,0x21,0x6e,0x03,0x59, \
-0xcc,0x82,0x30,0x92,0x21,0x35,0x0d,0x30,0x94,0x63,0xb2,0xb4,0xc1,0xb1,0x4c,0x79, \
-0x5e,0xd4,0x34,0x0f,0xd3,0x19,0x0d,0x80,0x66,0x10,0x73,0x22,0x06,0xae,0x8c,0x61, \
-0x1f,0xbc,0xee,0xea,0xe9,0x42,0x9f,0x60,0x89,0xd8,0xe0,0x62,0xdc,0x61,0xd2,0x86, \
-0x03,0x17,0xe0,0x86,0xa7,0x5d,0xc2,0xa4,0x98,0xd6,0x3e,0x03,0x36,0x41,0x70,0x16, \
-0xec,0x9f,0x84,0xc5,0x93,0x59,0x1c,0x0c,0x8f,0xdf,0x81,0xbb,0x16,0x26,0xd0,0xda, \
-0x4c,0x66,0x8a,0xbf,0x59,0xee,0x66,0x87,0x22,0xcc,0x3b,0x22,0x9a,0xc8,0x3e,0x30, \
-0xb3,0x61,0x7d,0xeb,0x24,0x7b,0xd8,0xfc,0x54,0x26,0x3d,0xae,0x59,0x32,0xd9,0x09, \
-0xb2,0xc2,0x30,0x5c,0x51,0xdd,0x86,0x5f,0xb7,0x4e,0x4c,0xd7,0xc9,0x09,0x54,0xd8, \
-0xf7,0x7c,0x65,0x0e,0x66,0x68,0xbc,0x7e,0x64,0x07,0x3d,0xa1,0xf9,0xb2,0xfe,0xb6, \
-0x21,0x37,0xc1,0x21,0x8a,0x48,0xd4,0x5b,0x36,0xd2,0x63,0x22,0xa8,0x2a,0xc0,0x64, \
-0x41,0x0b,0x6d,0xf7,0x52,0x9b,0xf6,0x87,0xdb,0xbb,0x68,0x73,0xa6,0xde,0xde,0x1e, \
-0xee,0x41,0xe1,0x14,0xe9,0x3c,0x31,0xca,0xd5,0x5e,0x15,0x58,0xce,0x0d,0x18,0x09, \
-0x29,0x4a,0xa8,0x5b,0x33,0xdc,0x42,0xe5,0xe1,0x18,0x85,0xe0,0x55,0xcd,0x18,0x69, \
-0x22,0x21,0x61,0x4d,0x70,0x18,0x50,0xdd,0x8c,0xb2,0x36,0x84,0xad,0xae,0x06,0x9f, \
-0x23,0xfa,0x26,0x08,0xd8,0xdf,0x8c,0xc0,0xe5,0x0f,0x04,0x39,0x21,0xcc,0x9b,0xe4, \
-0xa1,0xbd,0xa2,0x07,0xbb,0x05,0x83,0xb9,0xa1,0xd1,0xc4,0x69,0x34,0x1f,0xab,0x70, \
-0x66,0xe6,0xc2,0x49,0x34,0x30,0xaf,0x97,0xa3,0x4f,0xaf,0xa6,0x4b,0xec,0x81,0x1b, \
-0xa5,0xee,0xc1,0x90,0x9a,0x35,0x41,0x6c,0x18,0xc3,0xf6,0xf4,0x13,0x40,0xf5,0xe7, \
-0x0b,0x31,0x3f,0x16,0x8c,0x74,0x63,0xdd,0x61,0x20,0xd7,0x05,0xd8,0x6c,0x4e,0x06, \
-0x56,0x9e,0xcc,0x8b,0xdc,0xdd,0x86,0x5b,0xf7,0x44,0x7e,0x56,0xd3,0x02,0xa4,0x3d, \
-0x0d,0x44,0x43,0x19,0xfb,0xf9,0x43,0xa6,0xef,0x8f,0x61,0xc7,0xf8,0x43,0xa5,0x32, \
-0xe1,0xad,0x8f,0xf3,0xa4,0x2d,0x92,0x1a,0xab,0xb4,0x60,0x48,0x12,0x3b,0xd6,0xda, \
-0xb2,0x0b,0xf0,0x42,0x9e,0xdb,0x14,0xe9,0xca,0x81,0xdc,0x87,0xd2,0x20,0x4d,0x5a, \
-0x93,0x08,0x6f,0x83,0x28,0x66,0xad,0xb6,0x0d,0x5d,0xea,0xf2,0xc2,0x48,0x2a,0x86, \
-0x55,0xf6,0xb0,0x18,0xc7,0x12,0xe4,0xa8,0xb0,0x7d,0x70,0x7e,0x5d,0x39,0xc3,0xb1, \
-0x8c,0x42,0x31,0x55,0x10,0x41,0x60,0x79,0xee,0x81,0xcf,0x92,0x10,0xed,0x1d,0x5d, \
-0xfd,0xf0,0xbd,0xfb,0x33,0x5d,0x99,0xce,0xb6,0x3b,0xdd,0x4a,0xe3,0x4c,0x99,0xaa, \
-0xb5,0x58,0xb5,0x3c,0xb5,0x49,0x55,0x46,0x20,0x70,0x98,0x86,0x1a,0x8a,0x19,0x65, \
-0x58,0x2c,0x52,0x1e,0x17,0xe7,0x31,0x75,0x1b,0x50,0xa8,0x22,0x8c,0x1e,0xd6,0xa3, \
-0x04,0x60,0xcd,0xa9,0x2a,0xee,0xa1,0x58,0x22,0x0a,0x28,0x54,0x2e,0xe6,0xaa,0x20, \
-0xa0,0xc5,0x54,0x58,0xb1,0x14,0x52,0x0a,0x88,0x2a,0xb2,0xab,0x54,0x62,0xac,0x90, \
-0x7b,0x62,0x4a,0x0c,0x56,0x23,0x18,0x88,0x61,0xa0,0xee,0xd2,0x88,0xac,0x12,0x98, \
-0xdd,0x31,0xf4,0x7f,0x1a,0x6a,0x30,0xbb,0xe2,0xf8,0x84,0xfd,0xba,0xc0,0xcd,0x25, \
-0x3b,0x71,0xf7,0x55,0x50,0xc3,0xe6,0xad,0x5f,0x3e,0x08,0xa0,0xa8,0xee,0x62,0xbd, \
-0x53,0x96,0x45,0xee,0xd9,0xba,0x40,0x94,0xcc,0x30,0x18,0xc7,0xba,0x50,0x4d,0xa4, \
-0xee,0x48,0x22,0xad,0x35,0x27,0xc9,0x33,0x14,0x41,0x41,0x14,0x11,0x89,0x94,0x32, \
-0xd4,0xc1,0x82,0x94,0x9b,0x8c,0x5c,0x0a,0x22,0xd6,0x58,0xc8,0x2a,0x38,0xb4,0x11, \
-0x65,0x6f,0x6f,0x09,0xa3,0x3a,0x09,0x7b,0xeb,0xf4,0xff,0x9b,0xcf,0x27,0xef,0xea, \
-0x75,0xfc,0x80,0x79,0x8a,0xce,0xf8,0xdf,0x89,0xf9,0x87,0x72,0xcd,0xe8,0x03,0xd5, \
-0xcc,0x38,0x74,0x3d,0xe3,0x86,0x37,0xa2,0xeb,0xe6,0x38,0xd0,0x5c,0x6f,0xa0,0x6a, \
-0x1e,0xaa,0x31,0x62,0xbd,0x30,0x7c,0x1c,0xbb,0x4f,0x83,0xcc,0xa4,0xa9,0x44,0x04, \
-0xdf,0x95,0x87,0x27,0xa2,0x6d,0xeb,0xdb,0x35,0x32,0x23,0xf5,0x24,0xf7,0xf4,0x82, \
-0x2b,0x01,0x7c,0x5a,0xc5,0x44,0x15,0x41,0x15,0x53,0x0c,0x89,0x37,0x25,0xdb,0x98, \
-0x65,0xe4,0x45,0x08,0xce,0xe8,0x08,0x7a,0x43,0xbb,0x0c,0x58,0x22,0x21,0x89,0x6c, \
-0xdc,0x63,0x4c,0x10,0xdc,0x72,0x05,0x8a,0x08,0xc5,0x06,0x0c,0x44,0x05,0x24,0x11, \
-0x61,0x2e,0x55,0x01,0x64,0xe9,0x71,0xf4,0xaf,0x9e,0x04,0x23,0x09,0x21,0x15,0xd1, \
-0xb5,0x86,0xb5,0x80,0x64,0x7a,0x71,0x89,0x0d,0xd7,0x84,0x13,0x12,0xa1,0x52,0x49, \
-0x48,0x76,0xc3,0x04,0x4a,0x0c,0x56,0x08,0x90,0xb9,0xbc,0xa3,0xab,0x5d,0x04,0xd4, \
-0x83,0x20,0xb0,0x80,0x4d,0x89,0xe5,0x40,0x2c,0x5a,0x3c,0xe9,0xe6,0x79,0xc3,0x9e, \
-0x7c,0x1d,0x91,0xd4,0x85,0xa8,0xb2,0x9c,0x70,0x5b,0xd1,0xfc,0x98,0xda,0x30,0x15, \
-0x6b,0x30,0x6e,0x23,0x76,0x29,0x6a,0x1a,0xb0,0x04,0x3f,0x72,0x43,0x1a,0x77,0xc7, \
-0x15,0x46,0x44,0x41,0x63,0x6d,0x19,0x05,0x9a,0x31,0x43,0xb1,0xa8,0xc0,0x60,0x44, \
-0x9f,0x36,0xa1,0x3c,0xb5,0x36,0x62,0xea,0x88,0x96,0xc4,0x5b,0x01,0x40,0x6d,0xa9, \
-0x68,0x94,0x52,0x82,0x36,0xc9,0x5a,0xd2,0x23,0xdf,0xaf,0x32,0x4b,0x39,0x53,0xb6, \
-0x67,0x69,0x09,0xec,0xd7,0x4f,0xd6,0x6f,0x34,0x24,0xc5,0x33,0xbe,0xd4,0x33,0x10, \
-0xc0,0xbf,0x16,0x98,0x4a,0xaf,0x72,0x82,0x0a,0x21,0x4b,0xc0,0x8f,0x27,0x3e,0xdf, \
-0x82,0x51,0x0c,0x2e,0x3a,0xc2,0xa9,0x30,0xfd,0x33,0x0f,0xdc,0xe0,0x7b,0xcf,0x83, \
-0xda,0x77,0xe5,0x13,0xbe,0x1a,0x45,0xbc,0x53,0xcf,0xcf,0x7b,0x91,0x86,0xfa,0x9d, \
-0x96,0xa8,0x9a,0xb0,0xae,0xcc,0x6b,0x0b,0xd7,0x7d,0x3d,0x11,0x2b,0x54,0x0a,0x05, \
-0xcb,0xfc,0xab,0x05,0x15,0x69,0x94,0x70,0x52,0x46,0x87,0x40,0xd9,0x0d,0x82,0x07, \
-0x07,0xac,0x72,0xc5,0xf1,0x65,0x24,0xc1,0x0b,0x95,0x51,0x6c,0xc6,0x88,0x20,0x0b, \
-0x78,0x74,0xeb,0xae,0x05,0xf7,0x61,0x66,0xcf,0xe5,0x90,0xe1,0x1c,0xa4,0xa0,0x3a, \
-0x35,0x30,0x82,0x23,0x92,0x81,0x63,0x89,0x96,0x5c,0x10,0xb6,0x1c,0x87,0x5b,0x04, \
-0xc4,0x07,0xb6,0x23,0x7e,0x33,0xaf,0x6d,0xd9,0x23,0x2a,0xc7,0x38,0x0a,0x7b,0xbc, \
-0x4c,0xb9,0xe8,0x21,0x8b,0x74,0xe0,0xe0,0xa1,0x60,0x5c,0xe0,0x00,0x43,0x4c,0x59, \
-0xec,0x0e,0x15,0x54,0xb7,0x70,0x12,0x8a,0x30,0x83,0x5c,0x11,0x85,0xe0,0xb0,0xf3, \
-0x8d,0x6e,0x51,0x2d,0x18,0x12,0xd3,0x4e,0xf8,0xf8,0xed,0x44,0x15,0xae,0x77,0x70, \
-0x35,0x05,0x14,0xe9,0xe7,0xba,0x86,0x15,0xc1,0x73,0x0a,0x48,0xd1,0x57,0x20,0xa3, \
-0x0a,0xae,0x8f,0x00,0x8d,0x79,0xa0,0xb5,0xaa,0x04,0xf6,0x2a,0xff,0xa4,0x2c,0x17, \
-0x03,0xcc,0x2b,0x97,0x1d,0x59,0x87,0x01,0x22,0xec,0x14,0x29,0x3c,0x54,0x74,0xdd, \
-0xe6,0x53,0x72,0x96,0xc1,0xc5,0xd1,0xc5,0xa7,0xab,0xf0,0x21,0x8e,0x08,0x1e,0x04, \
-0x6d,0xa2,0x8a,0xea,0xaa,0x08,0x05,0xb0,0xdc,0x79,0xec,0x9b,0x87,0x19,0x0d,0x13, \
-0xb3,0xcb,0x08,0x21,0x67,0x30,0x73,0xcc,0xb8,0x41,0x40,0x81,0xa2,0x03,0xa1,0x37, \
-0x5c,0x40,0x1c,0x7a,0x3b,0x73,0xe0,0xd4,0x37,0x54,0xa7,0x1a,0x96,0x8d,0xd6,0x4d, \
-0xb7,0x58,0x06,0x14,0x95,0xd3,0xc1,0x05,0x40,0xd4,0x2a,0xd8,0x09,0x45,0xa0,0x55, \
-0x8f,0x25,0xd0,0xde,0x57,0xa1,0xa4,0x46,0x6f,0xa3,0x8e,0xe3,0x4d,0x19,0xe5,0xb6, \
-0x31,0x46,0x57,0xbd,0x3b,0x37,0x64,0xd1,0xcc,0x39,0x94,0x4b,0x97,0x8c,0x86,0x0b, \
-0xd3,0x49,0x36,0x48,0xab,0x5d,0x83,0x8f,0x74,0xee,0xb1,0xc9,0xda,0xc4,0x0c,0x96, \
-0xb0,0x50,0xb3,0x48,0xcf,0x3a,0x9f,0x41,0xe2,0xe9,0xd2,0xc3,0x0d,0x1d,0xba,0x37, \
-0x33,0xde,0x08,0xec,0xfb,0xe7,0xa9,0xb6,0x57,0x96,0x96,0x55,0xd1,0xa4,0x8d,0x81, \
-0xe9,0x04,0x2e,0x66,0xd3,0x48,0x8a,0xef,0xaa,0xae,0xb0,0x1f,0xd3,0x20,0xf6,0x8e, \
-0x76,0xe5,0xfa,0xfe,0x38,0x66,0x5f,0x23,0x31,0x68,0x71,0xa3,0x5f,0x75,0x3c,0x95, \
-0x20,0xa8,0x30,0x66,0x0a,0x92,0x8f,0x5e,0xd0,0xdf,0x12,0x20,0x9e,0x76,0x58,0x2e, \
-0xfc,0x5a,0xcd,0xb3,0x9c,0x1d,0xf0,0x3f,0xbb,0x79,0x72,0x6e,0xe2,0x28,0x10,0xc0, \
-0xab,0x8b,0x8e,0x2f,0x40,0xb2,0x9c,0x9d,0x4b,0x55,0x4a,0xb4,0x94,0x1e,0x5c,0xe3, \
-0x67,0x4c,0x8d,0x33,0x80,0x77,0x6b,0xa2,0x6e,0x2f,0x05,0x55,0xf6,0xa1,0xf4,0xa6, \
-0xf1,0x4e,0x69,0x63,0x36,0x4f,0xab,0xcb,0x86,0x84,0x47,0xb9,0x86,0x9c,0x95,0x22, \
-0x9d,0xd8,0x30,0x60,0xe0,0x75,0x26,0x4a,0x94,0x51,0x3c,0x93,0x91,0x04,0x3b,0xfe, \
-0x6a,0xb1,0x75,0x4d,0x55,0x98,0x5d,0x53,0x99,0x58,0x25,0xc1,0x3a,0x9c,0xc3,0x1c, \
-0xb6,0x1f,0x0b,0x4f,0x44,0x2c,0x5f,0xee,0x6b,0x37,0x4e,0x21,0x04,0xb1,0x18,0xf4, \
-0x9b,0xc9,0x12,0x9c,0x51,0x67,0x0c,0xd5,0x4a,0x1b,0x9e,0x7a,0xd4,0x2b,0x44,0x69, \
-0xa6,0xb8,0x87,0xcb,0x60,0x38,0x9c,0xac,0x3a,0xa7,0x16,0x71,0x9d,0x01,0x1f,0xb9, \
-0xe9,0xd3,0xd1,0x6b,0x66,0x6c,0xdf,0x43,0x78,0x6d,0x5e,0x33,0xc7,0xac,0x38,0x84, \
-0x88,0xc1,0x75,0x6f,0x46,0x94,0xe3,0x65,0x32,0x85,0x4f,0x26,0x42,0x0e,0x78,0x9d, \
-0x50,0x19,0x81,0x43,0x9f,0x06,0x78,0xee,0xb1,0xe4,0x88,0xf5,0x40,0x90,0x59,0x10, \
-0x91,0x63,0x04,0x9b,0xfd,0xbf,0x35,0x10,0xc4,0xb9,0xb4,0x19,0x54,0x21,0x47,0x5c, \
-0x8a,0x66,0x07,0x95,0x7b,0xfa,0x6d,0x6a,0xd6,0x08,0x6e,0x56,0xea,0xa0,0x68,0x5a, \
-0x4a,0xac,0x7b,0xcc,0xe3,0x54,0xcd,0xc6,0x24,0xb9,0x85,0xd3,0x36,0x17,0x3a,0x21, \
-0x7b,0xbb,0x31,0x7c,0x4a,0xc4,0xee,0xd4,0xf2,0xf9,0xf6,0xd8,0x56,0xd0,0x45,0xeb, \
-0x21,0x61,0x4e,0xc4,0x03,0x7a,0x16,0x37,0x14,0x38,0x30,0xe5,0x93,0xd0,0x66,0x59, \
-0xe5,0x8b,0x06,0x30,0xf2,0xd0,0xd4,0xc1,0xf6,0xf5,0xbb,0x30,0x9e,0xc4,0x0e,0xce, \
-0xd5,0x03,0x4a,0x54,0x42,0x18,0xb8,0x79,0x19,0x77,0xa2,0x89,0x58,0x3b,0xf5,0x66, \
-0x74,0x56,0xdf,0xaa,0x00,0x5a,0x7c,0x3a,0xa5,0x39,0xb3,0xf7,0xbe,0x88,0x78,0x88, \
-0xc6,0x20,0xb0,0x88,0x9f,0x0f,0x23,0xf1,0xf6,0x76,0x7a,0x27,0x76,0xde,0x8e,0x0f, \
-0x5f,0x25,0xbe,0x0b,0xf5,0x58,0x1d,0xd8,0x40,0x4a,0x76,0x94,0x13,0x68,0xf1,0x18, \
-0x71,0x36,0x0e,0xea,0xe0,0xa2,0x08,0xd7,0x16,0xd5,0x89,0x97,0x26,0x54,0x8c,0x23, \
-0xac,0xa6,0xa5,0x98,0x86,0x12,0x63,0x27,0x26,0x84,0xd2,0x06,0xc1,0xce,0x3a,0x9d, \
-0x87,0x80,0x4e,0xc3,0xe3,0x50,0x26,0xe0,0xaf,0x44,0x29,0x82,0x0d,0x84,0x6a,0x2e, \
-0xe1,0x6e,0x5f,0x5b,0xc0,0x8a,0x0f,0x2d,0x26,0x94,0x01,0x02,0x44,0x0e,0x6b,0x37, \
-0x76,0x98,0x21,0x8d,0x91,0x65,0x5b,0x28,0x25,0x99,0xa3,0x11,0xf9,0x6a,0x76,0x33, \
-0xcd,0x67,0x81,0x46,0x64,0x59,0x54,0x02,0x7e,0xf7,0x71,0x8c,0xa2,0x50,0x92,0x31, \
-0x76,0x19,0x11,0xb0,0x07,0x34,0x15,0x21,0x52,0x46,0x18,0xa1,0x20,0x40,0x54,0x30, \
-0x1d,0x06,0x97,0xa1,0x2a,0x0d,0xd5,0x60,0xd3,0xd2,0xa4,0x21,0x90,0x64,0xa9,0x94, \
-0x32,0x63,0x2b,0x26,0x10,0xd6,0x71,0x23,0xcc,0x4c,0x5d,0x04,0x50,0x56,0xd9,0xa0, \
-0xc0,0x65,0xa1,0xb7,0xa8,0xf0,0xae,0x53,0xcb,0xc8,0xa4,0xf6,0xcc,0x0b,0xa0,0xb2, \
-0x09,0x15,0x72,0x4b,0x59,0xb1,0x35,0x21,0x55,0x15,0x41,0x14,0xd0,0xc9,0xe6,0x0e, \
-0x2f,0x50,0xec,0x83,0x20,0xaa,0xb1,0xb3,0x25,0xbb,0x13,0xa2,0x1c,0x62,0x3c,0x02, \
-0xc8,0x05,0x94,0xca,0x3a,0xb0,0xf8,0x38,0x82,0xf0,0x91,0x41,0x0a,0x78,0x57,0x37, \
-0x42,0xc6,0x50,0x40,0x2b,0x19,0x72,0xf1,0x74,0x40,0xbd,0x58,0x51,0xba,0x87,0x03, \
-0x29,0x0b,0xc2,0x43,0x05,0x41,0xce,0x63,0xe3,0x66,0xdd,0x64,0x5d,0x8e,0x03,0xa2, \
-0xf5,0x04,0x74,0x34,0x77,0x6c,0xb0,0x4e,0x90,0xa0,0x49,0x74,0xda,0xa4,0xd9,0xd5, \
-0x24,0x48,0x70,0x6e,0x04,0x05,0x8d,0x12,0x22,0xf1,0x20,0x62,0xd0,0x52,0xc5,0xa0, \
-0x5e,0x91,0x3d,0x07,0x03,0x32,0x8c,0x0d,0x1a,0x03,0xa1,0x6d,0x03,0x34,0x21,0x7a, \
-0x1a,0x1d,0x3a,0x6e,0xae,0xea,0xc2,0x1a,0x0c,0x8c,0x0d,0xa4,0x66,0x91,0xb4,0xa1, \
-0x3f,0xfb,0x8f,0xa6,0xab,0xe7,0x63,0xbf,0xc6,0x71,0xd5,0x53,0x4d,0xba,0xd0,0x69, \
-0x56,0x75,0x31,0xf6,0xb2,0xcc,0xd7,0x49,0x98,0x88,0x03,0x23,0x1b,0xa6,0xde,0x14, \
-0x85,0xaf,0xab,0x0a,0x6f,0xe0,0x98,0xf0,0x25,0x0c,0xcc,0x1b,0x1a,0x21,0xa2,0xa1, \
-0x1d,0xd3,0x8b,0x27,0x08,0x01,0xc0,0x2c,0x34,0x92,0x01,0xcf,0x2c,0x15,0x86,0x13, \
-0x82,0x5c,0x14,0xc3,0x30,0xe2,0x0a,0x87,0xcc,0x18,0xc2,0xd7,0x0a,0xcd,0xb1,0x9c, \
-0x93,0x2e,0x23,0x0c,0xc1,0x0a,0x5a,0xac,0x51,0x82,0x64,0xc3,0x14,0xd8,0x48,0xb1, \
-0x0e,0xf4,0xb1,0x13,0x81,0x45,0x9a,0xe6,0x87,0x37,0x74,0x9b,0x42,0x87,0x26,0x86, \
-0x28,0x32,0x1a,0x4b,0xc2,0x61,0x06,0x2c,0x56,0x1b,0xe8,0x21,0x8e,0xe9,0x33,0x0c, \
-0xcc,0x4d,0xe2,0x91,0x8a,0xea,0xa4,0x4d,0xaa,0x30,0xc4,0x0f,0x5e,0x48,0xe5,0x44, \
-0x16,0x59,0x0d,0xd2,0x12,0x64,0x16,0xa0,0x75,0xea,0x93,0x93,0x06,0xcb,0xc1,0x25, \
-0x54,0x44,0xc0,0x8d,0xaa,0x38,0x3b,0xf8,0xe9,0xa9,0xb2,0xee,0xad,0x0f,0x92,0xfe, \
-0x1f,0x54,0xd3,0x5d,0xfe,0x89,0x0d,0x0f,0x1b,0x28,0xe4,0xd6,0xc9,0x51,0x66,0x7f, \
-0xaa,0xc0,0xc8,0x81,0x9a,0xd2,0xef,0x08,0x61,0x00,0x86,0xf6,0x40,0xe0,0xc8,0xe9, \
-0xb5,0x56,0xe8,0x63,0x1f,0xe4,0xb4,0x34,0x0d,0x82,0x6a,0xc1,0x6d,0x90,0x12,0x8d, \
-0xf1,0xc9,0xd4,0xc1,0xba,0x57,0x88,0x3c,0x76,0xac,0x57,0x8d,0x30,0x4f,0x8f,0xc4, \
-0x99,0xa3,0x87,0x2c,0x0c,0x62,0x13,0x4d,0x79,0xea,0x54,0x94,0x1f,0x0c,0xf5,0xeb, \
-0xd3,0xa8,0xa5,0x09,0xd7,0x21,0x1a,0xd5,0x82,0xd6,0x19,0x48,0x7a,0x70,0x86,0xaa, \
-0x86,0xac,0xf2,0x5e,0xa5,0x04,0x71,0x19,0x85,0x86,0x2e,0xa9,0x62,0xe1,0x62,0xa9, \
-0x59,0xd7,0x21,0x80,0xde,0x0e,0xa6,0xb5,0xa8,0x6e,0xd2,0x82,0x3d,0xa1,0xd3,0xa7, \
-0x36,0x4d,0x18,0x29,0x00,0x16,0x41,0x42,0x75,0x60,0x43,0x29,0x86,0x18,0x49,0xb6, \
-0x4e,0x67,0x41,0x99,0x16,0x7b,0x8d,0xc6,0x70,0x34,0x77,0xbb,0xe1,0xbf,0x85,0x61, \
-0x2c,0x01,0x50,0x13,0x37,0x4b,0xfc,0x06,0x71,0x34,0x2b,0x86,0x11,0x0c,0x5b,0xb1, \
-0x2f,0x28,0x09,0x61,0xde,0x9f,0x40,0x18,0x62,0x26,0x55,0x1b,0x18,0x0c,0x3e,0xe9, \
-0x28,0x8b,0x6e,0x6e,0x64,0x60,0xf6,0xf6,0x30,0xc1,0x04,0xe8,0x80,0x94,0xa6,0x0b, \
-0xed,0x2d,0xa0,0xd2,0xa6,0x7b,0x03,0xb7,0x8e,0xdf,0x50,0x4d,0x0d,0x0e,0xd6,0x69, \
-0x0d,0xcc,0x28,0x2c,0x64,0xfa,0x7c,0x76,0xf1,0x5f,0x4e,0x3a,0xec,0x29,0x0e,0x8d, \
-0x03,0x6b,0xb2,0x19,0x88,0x1f,0x2e,0x07,0x23,0xbe,0xd5,0x41,0x45,0x2b,0x6d,0xb4, \
-0xd2,0x6c,0xc9,0xe5,0xb6,0x27,0xa6,0x68,0x06,0x89,0xc1,0x85,0xdf,0xbd,0xe3,0xed, \
-0xb7,0x8f,0x1f,0xc3,0x67,0xe5,0x91,0x0d,0xf3,0x68,0x5b,0xf3,0x3a,0x80,0xf9,0x6d, \
-0xdc,0xf3,0xbe,0xfb,0x4b,0xd1,0x81,0x04,0x10,0x73,0x98,0x24,0xa6,0x1c,0xe4,0xfe, \
-0xb5,0x41,0x01,0x87,0x70,0x7e,0x4d,0x42,0x4f,0x2e,0x4b,0x4a,0x60,0x5d,0x89,0xb7, \
-0x66,0xa0,0xec,0xf3,0x03,0xdb,0xc3,0xb7,0x2e,0x91,0x68,0x78,0xc1,0x81,0xc1,0x71, \
-0x40,0x8c,0x93,0x35,0x90,0xc3,0xaa,0x21,0x1c,0x9c,0x7e,0xef,0xc5,0xe9,0xcc,0x0f, \
-0x64,0x90,0x19,0x3c,0x81,0x93,0xec,0xe7,0x8b,0x70,0xdb,0x7c,0x0e,0x46,0xaf,0xbd, \
-0xb8,0x9b,0x0e,0x74,0xfd,0x30,0x56,0x03,0x11,0xf9,0xfe,0x83,0x76,0x0f,0x5e,0xfb, \
-0xe4,0x05,0xc9,0x8e,0xfa,0x4f,0xe0,0x7c,0x8a,0xbf,0x9d,0x34,0x1f,0x6b,0xcb,0x78, \
-0x01,0x62,0x3e,0xf8,0x78,0x63,0x1e,0xcb,0x16,0xfe,0x4a,0x0b,0x6f,0xb2,0xa8,0x78, \
-0xc6,0x79,0xf8,0xa0,0x6e,0xe4,0x77,0xef,0x03,0xcf,0x3c,0x64,0x30,0x8f,0xa4,0x01, \
-0x10,0x0b,0x59,0x1d,0x77,0x93,0xab,0x0f,0x01,0x8a,0x43,0xcd,0x0e,0xe6,0x08,0x70, \
-0x34,0xc4,0x97,0x69,0xbf,0xc4,0xfe,0x3e,0xfa,0xcd,0x7d,0x0d,0x67,0xc1,0x88,0x32, \
-0x0a,0xb2,0x0c,0x58,0x22,0x45,0x59,0x2f,0xdf,0x66,0xe0,0xcd,0x48,0x87,0x8a,0x15, \
-0x14,0x8a,0x91,0x61,0x63,0x3d,0xf6,0xdd,0x1b,0x99,0xa7,0x34,0x21,0x35,0xdc,0xe1, \
-0xd9,0xb2,0xeb,0x60,0x3d,0xac,0x46,0x04,0x19,0x1c,0x6e,0xc3,0xcb,0x24,0xd8,0x85, \
-0xd8,0xc3,0x4f,0xab,0xdb,0x2b,0x55,0x83,0x72,0xc1,0x1e,0x8a,0x98,0x30,0xdd,0x4e, \
-0x73,0xc9,0x9a,0xb2,0xdc,0xa8,0x1c,0x4e,0x84,0x3e,0xe8,0xc0,0xf4,0x4e,0x87,0xfb, \
-0x78,0xf4,0x71,0xdf,0xc2,0xf0,0x13,0x08,0xa8,0xb8,0x70,0xbc,0x13,0x23,0xc5,0xc6, \
-0x21,0x68,0x5d,0xb4,0x26,0x16,0x85,0x8c,0x1d,0x70,0x25,0x82,0x13,0x57,0x70,0x51, \
-0x91,0x06,0x25,0x38,0x84,0x47,0x91,0x9c,0x84,0x8e,0x03,0xa9,0xf1,0xd8,0x16,0x47, \
-0x48,0x84,0x81,0x20,0x60,0xb4,0x8b,0xa3,0x25,0x97,0xc7,0xc3,0xc7,0xa7,0x6e,0x2b, \
-0xf2,0x65,0xf4,0x1a,0x01,0xc4,0x69,0xa4,0x8c,0x93,0xf2,0x98,0x49,0xa4,0x77,0x34, \
-0x8b,0xc0,0x24,0xe8,0x8a,0xdf,0x23,0xc9,0x6e,0x1c,0xb1,0xd7,0xec,0xac,0xfd,0x3c, \
-0x13,0x3d,0xfa,0xb5,0x3e,0xbf,0x25,0x61,0x75,0x39,0x71,0x97,0xc5,0xb5,0x08,0xea, \
-0x1a,0x56,0x21,0xcd,0x4b,0xf5,0x41,0x24,0x03,0x12,0xa1,0x83,0x5d,0xa1,0x64,0xe7, \
-0x80,0x84,0xcc,0x30,0x86,0x47,0xb9,0xfa,0xb5,0x08,0xe4,0xdd,0x64,0xcd,0x68,0x24, \
-0x27,0xbf,0x7d,0x59,0x3b,0xf4,0x1f,0x75,0xfc,0x9b,0x1f,0x5c,0x02,0x86,0x70,0xaa, \
-0x75,0x4c,0xaa,0xc5,0xa3,0x70,0x9f,0x79,0x9d,0x37,0xbd,0x55,0x4e,0x20,0xff,0x85, \
-0xca,0x7e,0xbf,0xc2,0x18,0x4d,0x9f,0x81,0x49,0x0f,0x92,0xc6,0xeb,0xb7,0x89,0x9b, \
-0xca,0xaa,0x29,0x68,0xb2,0x27,0x39,0x1a,0xc7,0x4e,0x9b,0x70,0x0e,0x04,0x3e,0xeb, \
-0xf0,0x17,0xe4,0x22,0xe9,0xdc,0x49,0x1c,0xd7,0x4f,0xa1,0xf7,0x74,0x92,0x15,0x28, \
-0xab,0xe1,0x51,0x99,0xd6,0x14,0x38,0x72,0xa4,0x28,0x53,0x28,0x7a,0x60,0xf4,0x58, \
-0xd6,0x12,0xf3,0xb5,0x68,0x9a,0x50,0x20,0x89,0x0e,0x5a,0xb2,0x8d,0xf5,0xa0,0xf5, \
-0xeb,0xf1,0xbc,0xe2,0x83,0x2e,0xe2,0x23,0xbe,0x96,0xda,0x16,0x98,0xb8,0xa1,0xd5, \
-0x2b,0x92,0xdd,0x0c,0x4a,0x81,0xcb,0x64,0x03,0x50,0x05,0x10,0x28,0xa6,0x32,0xc4, \
-0x07,0xa1,0xd3,0xe9,0x85,0x10,0xcd,0x20,0xe8,0xa0,0xb3,0x28,0x69,0x5b,0xbc,0x35, \
-0x99,0x8c,0xd5,0x87,0x61,0x86,0x70,0xa7,0xe4,0x21,0x59,0xaf,0x12,0x32,0x49,0x19, \
-0xe9,0x87,0xd4,0x85,0xd3,0x02,0x7c,0xf4,0x9b,0xf8,0x74,0x69,0xdf,0xa1,0x70,0x5e, \
-0x78,0x8e,0x03,0xec,0xda,0x3e,0x88,0x99,0xe9,0x06,0x6c,0xf5,0x10,0x4f,0x74,0x11, \
-0xe7,0x01,0x3a,0x47,0x01,0xf1,0x5f,0xae,0x75,0xbd,0x75,0x5b,0xbb,0xab,0xbd,0xbc, \
-0x44,0xce,0x32,0x06,0x9c,0x4a,0x1f,0x76,0xf3,0xcd,0x75,0x2c,0x1e,0xc9,0x4c,0x79, \
-0xc8,0x53,0xd7,0xf7,0x24,0x00,0xa2,0x00,0x7f,0x92,0x61,0xec,0xd3,0xf9,0x76,0x5b, \
-0xe6,0xf2,0x0a,0xbc,0x77,0xad,0xee,0x0c,0x1f,0x67,0xde,0x3d,0x85,0xcf,0x00,0xa0, \
-0x5e,0x89,0x36,0xd1,0x56,0x39,0xfa,0x3c,0x0a,0xe6,0x86,0x01,0xf8,0xee,0x4f,0x21, \
-0x60,0xd2,0x96,0x72,0xc8,0x9d,0x8a,0xe5,0x2f,0xff,0x17,0x72,0x45,0x38,0x50,0x90, \
-0x21,0x32,0x7f,0xed, \
-
diff --git a/include-minimal/NUM_APPLETS.h b/include-minimal/NUM_APPLETS.h
deleted file mode 100644
index 05995fc..0000000
--- a/include-minimal/NUM_APPLETS.h
+++ b/dev/null
@@ -1 +0,0 @@
-#define NUM_APPLETS 170
diff --git a/include-minimal/applet_tables.h b/include-minimal/applet_tables.h
deleted file mode 100644
index 5c9a915..0000000
--- a/include-minimal/applet_tables.h
+++ b/dev/null
@@ -1,527 +0,0 @@
-/* This is a generated file, don't edit */
-
-#define NUM_APPLETS 170
-
-const char applet_names[] ALIGN1 = ""
-"[" "\0"
-"[[" "\0"
-"ash" "\0"
-"awk" "\0"
-"base64" "\0"
-"basename" "\0"
-"bbconfig" "\0"
-"blkid" "\0"
-"blockdev" "\0"
-"bunzip2" "\0"
-"bzcat" "\0"
-"bzip2" "\0"
-"cal" "\0"
-"cat" "\0"
-"catv" "\0"
-"chattr" "\0"
-"chgrp" "\0"
-"chmod" "\0"
-"chown" "\0"
-"chroot" "\0"
-"clear" "\0"
-"cmp" "\0"
-"cp" "\0"
-"cpio" "\0"
-"cut" "\0"
-"date" "\0"
-"dc" "\0"
-"dd" "\0"
-"depmod" "\0"
-"devmem" "\0"
-"df" "\0"
-"diff" "\0"
-"dirname" "\0"
-"dmesg" "\0"
-"dos2unix" "\0"
-"du" "\0"
-"echo" "\0"
-"egrep" "\0"
-"env" "\0"
-"expand" "\0"
-"expr" "\0"
-"false" "\0"
-"fbset" "\0"
-"fdisk" "\0"
-"fgrep" "\0"
-"find" "\0"
-"fold" "\0"
-"free" "\0"
-"freeramdisk" "\0"
-"fstrim" "\0"
-"fuser" "\0"
-"getopt" "\0"
-"grep" "\0"
-"groups" "\0"
-"gunzip" "\0"
-"gzip" "\0"
-"head" "\0"
-"hexdump" "\0"
-"id" "\0"
-"insmod" "\0"
-"install" "\0"
-"kill" "\0"
-"killall" "\0"
-"killall5" "\0"
-"less" "\0"
-"ln" "\0"
-"losetup" "\0"
-"ls" "\0"
-"lsattr" "\0"
-"lsmod" "\0"
-"lsof" "\0"
-"lspci" "\0"
-"lsusb" "\0"
-"lzcat" "\0"
-"lzop" "\0"
-"lzopcat" "\0"
-"makedevs" "\0"
-"md5sum" "\0"
-"mkdir" "\0"
-"mkdosfs" "\0"
-"mke2fs" "\0"
-"mkfifo" "\0"
-"mkfs.ext2" "\0"
-"mkfs.vfat" "\0"
-"mknod" "\0"
-"mkswap" "\0"
-"mktemp" "\0"
-"modinfo" "\0"
-"modprobe" "\0"
-"more" "\0"
-"mount" "\0"
-"mountpoint" "\0"
-"mv" "\0"
-"nanddump" "\0"
-"nandwrite" "\0"
-"nice" "\0"
-"nohup" "\0"
-"od" "\0"
-"patch" "\0"
-"pgrep" "\0"
-"pidof" "\0"
-"pkill" "\0"
-"printenv" "\0"
-"printf" "\0"
-"ps" "\0"
-"pstree" "\0"
-"pwd" "\0"
-"rdev" "\0"
-"readlink" "\0"
-"realpath" "\0"
-"renice" "\0"
-"reset" "\0"
-"resize" "\0"
-"rev" "\0"
-"rm" "\0"
-"rmdir" "\0"
-"rmmod" "\0"
-"run-parts" "\0"
-"sed" "\0"
-"seq" "\0"
-"setconsole" "\0"
-"setserial" "\0"
-"setsid" "\0"
-"sh" "\0"
-"sha1sum" "\0"
-"sha256sum" "\0"
-"sha512sum" "\0"
-"sleep" "\0"
-"sort" "\0"
-"split" "\0"
-"stat" "\0"
-"strings" "\0"
-"stty" "\0"
-"swapoff" "\0"
-"swapon" "\0"
-"sync" "\0"
-"sysctl" "\0"
-"tac" "\0"
-"tail" "\0"
-"tar" "\0"
-"tee" "\0"
-"test" "\0"
-"time" "\0"
-"top" "\0"
-"touch" "\0"
-"tr" "\0"
-"true" "\0"
-"ttysize" "\0"
-"tune2fs" "\0"
-"umount" "\0"
-"uname" "\0"
-"unexpand" "\0"
-"uniq" "\0"
-"unix2dos" "\0"
-"unlzma" "\0"
-"unlzop" "\0"
-"unxz" "\0"
-"unzip" "\0"
-"uptime" "\0"
-"usleep" "\0"
-"uudecode" "\0"
-"uuencode" "\0"
-"watch" "\0"
-"wc" "\0"
-"which" "\0"
-"whoami" "\0"
-"xargs" "\0"
-"xzcat" "\0"
-"yes" "\0"
-"zcat" "\0"
-;
-
-#ifndef SKIP_applet_main
-int (*const applet_main[])(int argc, char **argv) = {
-test_main,
-test_main,
-ash_main,
-awk_main,
-base64_main,
-basename_main,
-bbconfig_main,
-blkid_main,
-blockdev_main,
-bunzip2_main,
-bunzip2_main,
-bzip2_main,
-cal_main,
-cat_main,
-catv_main,
-chattr_main,
-chgrp_main,
-chmod_main,
-chown_main,
-chroot_main,
-clear_main,
-cmp_main,
-cp_main,
-cpio_main,
-cut_main,
-date_main,
-dc_main,
-dd_main,
-modprobe_main,
-devmem_main,
-df_main,
-diff_main,
-dirname_main,
-dmesg_main,
-dos2unix_main,
-du_main,
-echo_main,
-grep_main,
-env_main,
-expand_main,
-expr_main,
-false_main,
-fbset_main,
-fdisk_main,
-grep_main,
-find_main,
-fold_main,
-free_main,
-freeramdisk_main,
-fstrim_main,
-fuser_main,
-getopt_main,
-grep_main,
-id_main,
-gunzip_main,
-gzip_main,
-head_main,
-hexdump_main,
-id_main,
-modprobe_main,
-install_main,
-kill_main,
-kill_main,
-kill_main,
-less_main,
-ln_main,
-losetup_main,
-ls_main,
-lsattr_main,
-modprobe_main,
-lsof_main,
-lspci_main,
-lsusb_main,
-unlzma_main,
-lzop_main,
-lzop_main,
-makedevs_main,
-md5_sha1_sum_main,
-mkdir_main,
-mkfs_vfat_main,
-mkfs_ext2_main,
-mkfifo_main,
-mkfs_ext2_main,
-mkfs_vfat_main,
-mknod_main,
-mkswap_main,
-mktemp_main,
-modinfo_main,
-modprobe_main,
-more_main,
-mount_main,
-mountpoint_main,
-mv_main,
-nandwrite_main,
-nandwrite_main,
-nice_main,
-nohup_main,
-od_main,
-patch_main,
-pgrep_main,
-pidof_main,
-pgrep_main,
-printenv_main,
-printf_main,
-ps_main,
-pstree_main,
-pwd_main,
-rdev_main,
-readlink_main,
-realpath_main,
-renice_main,
-reset_main,
-resize_main,
-rev_main,
-rm_main,
-rmdir_main,
-modprobe_main,
-run_parts_main,
-sed_main,
-seq_main,
-setconsole_main,
-setserial_main,
-setsid_main,
-ash_main,
-md5_sha1_sum_main,
-md5_sha1_sum_main,
-md5_sha1_sum_main,
-sleep_main,
-sort_main,
-split_main,
-stat_main,
-strings_main,
-stty_main,
-swap_on_off_main,
-swap_on_off_main,
-sync_main,
-sysctl_main,
-tac_main,
-tail_main,
-tar_main,
-tee_main,
-test_main,
-time_main,
-top_main,
-touch_main,
-tr_main,
-true_main,
-ttysize_main,
-tune2fs_main,
-umount_main,
-uname_main,
-expand_main,
-uniq_main,
-dos2unix_main,
-unlzma_main,
-lzop_main,
-unxz_main,
-unzip_main,
-uptime_main,
-usleep_main,
-uudecode_main,
-uuencode_main,
-watch_main,
-wc_main,
-which_main,
-whoami_main,
-xargs_main,
-unxz_main,
-yes_main,
-gunzip_main,
-};
-#endif
-
-const uint16_t applet_nameofs[] ALIGN2 = {
-0x0000,
-0x0002,
-0x0005,
-0x0009,
-0x000d,
-0x0014,
-0x001d,
-0x0026,
-0x002c,
-0x0035,
-0x003d,
-0x0043,
-0x0049,
-0x004d,
-0x0051,
-0x0056,
-0x005d,
-0x0063,
-0x0069,
-0x006f,
-0x0076,
-0x007c,
-0x0080,
-0x0083,
-0x0088,
-0x008c,
-0x0091,
-0x0094,
-0x0097,
-0x009e,
-0x00a5,
-0x00a8,
-0x00ad,
-0x00b5,
-0x00bb,
-0x00c4,
-0x00c7,
-0x00cc,
-0x00d2,
-0x00d6,
-0x00dd,
-0x00e2,
-0x00e8,
-0x00ee,
-0x00f4,
-0x00fa,
-0x00ff,
-0x0104,
-0x0109,
-0x0115,
-0x011c,
-0x0122,
-0x0129,
-0x012e,
-0x0135,
-0x013c,
-0x0141,
-0x0146,
-0x014e,
-0x0151,
-0x0158,
-0x0160,
-0x0165,
-0x016d,
-0x0176,
-0x017b,
-0x017e,
-0x0186,
-0x0189,
-0x0190,
-0x0196,
-0x019b,
-0x01a1,
-0x01a7,
-0x01ad,
-0x01b2,
-0x01ba,
-0x01c3,
-0x01ca,
-0x01d0,
-0x01d8,
-0x01df,
-0x01e6,
-0x01f0,
-0x01fa,
-0x0200,
-0x0207,
-0x020e,
-0x0216,
-0x021f,
-0x0224,
-0x022a,
-0x0235,
-0x0238,
-0x0241,
-0x024b,
-0x0250,
-0x0256,
-0x0259,
-0x025f,
-0x0265,
-0x026b,
-0x0271,
-0x027a,
-0x0281,
-0x0284,
-0x028b,
-0x028f,
-0x0294,
-0x029d,
-0x02a6,
-0x02ad,
-0x02b3,
-0x02ba,
-0x02be,
-0x02c1,
-0x02c7,
-0x02cd,
-0x02d7,
-0x02db,
-0x02df,
-0x02ea,
-0x02f4,
-0x02fb,
-0x02fe,
-0x0306,
-0x0310,
-0x031a,
-0x0320,
-0x0325,
-0x032b,
-0x0330,
-0x0338,
-0x033d,
-0x0345,
-0x034c,
-0x0351,
-0x0358,
-0x035c,
-0x0361,
-0x0365,
-0x0369,
-0x036e,
-0x0373,
-0x0377,
-0x037d,
-0x0380,
-0x0385,
-0x038d,
-0x0395,
-0x039c,
-0x03a2,
-0x03ab,
-0x03b0,
-0x03b9,
-0x03c0,
-0x03c7,
-0x03cc,
-0x03d2,
-0x03d9,
-0x03e0,
-0x03e9,
-0x03f2,
-0x03f8,
-0x03fb,
-0x0401,
-0x0408,
-0x040e,
-0x0414,
-0x0418,
-};
-
-
-#define MAX_APPLET_NAME_LEN 11
diff --git a/include-minimal/applets.h b/include-minimal/applets.h
deleted file mode 100644
index e0a3623..0000000
--- a/include-minimal/applets.h
+++ b/dev/null
@@ -1,498 +0,0 @@
-/* DO NOT EDIT. This file is generated from applets.src.h */
-/* vi: set sw=4 ts=4: */
-/*
- * applets.h - a listing of all busybox applets.
- *
- * If you write a new applet, you need to add an entry to this list to make
- * busybox aware of it.
- */
-
-/*
-name - applet name as it is typed on command line
-name2 - applet name, converted to C (ether-wake: name2 = ether_wake)
-main - corresponding <applet>_main to call (bzcat: main = bunzip2)
-l - location to install link to: [/usr]/[s]bin
-s - suid type:
- BB_SUID_REQUIRE: will complain if busybox isn't suid
- and is run by non-root (applet_main() will not be called at all)
- BB_SUID_DROP: will drop suid prior to applet_main()
- BB_SUID_MAYBE: neither of the above
- (every instance of BB_SUID_REQUIRE and BB_SUID_MAYBE
- needs to be justified in comment)
- NB: please update FEATURE_SUID help text whenever you add/remove
- BB_SUID_REQUIRE or BB_SUID_MAYBE applet.
-*/
-
-#if defined(PROTOTYPES)
-# define APPLET(name,l,s) int name##_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE;
-# define APPLET_ODDNAME(name,main,l,s,name2) int main##_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE;
-# define APPLET_NOEXEC(name,main,l,s,name2) int main##_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE;
-# define APPLET_NOFORK(name,main,l,s,name2) int main##_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE;
-
-#elif defined(NAME_MAIN_CNAME)
-# define APPLET(name,l,s) name name##_main name
-# define APPLET_ODDNAME(name,main,l,s,name2) name main##_main name2
-# define APPLET_NOEXEC(name,main,l,s,name2) name main##_main name2
-# define APPLET_NOFORK(name,main,l,s,name2) name main##_main name2
-
-#elif defined(MAKE_USAGE) && ENABLE_FEATURE_VERBOSE_USAGE
-# define APPLET(name,l,s) MAKE_USAGE(#name, name##_trivial_usage name##_full_usage)
-# define APPLET_ODDNAME(name,main,l,s,name2) MAKE_USAGE(#name, name2##_trivial_usage name2##_full_usage)
-# define APPLET_NOEXEC(name,main,l,s,name2) MAKE_USAGE(#name, name2##_trivial_usage name2##_full_usage)
-# define APPLET_NOFORK(name,main,l,s,name2) MAKE_USAGE(#name, name2##_trivial_usage name2##_full_usage)
-
-#elif defined(MAKE_USAGE) && !ENABLE_FEATURE_VERBOSE_USAGE
-# define APPLET(name,l,s) MAKE_USAGE(#name, name##_trivial_usage)
-# define APPLET_ODDNAME(name,main,l,s,name2) MAKE_USAGE(#name, name2##_trivial_usage)
-# define APPLET_NOEXEC(name,main,l,s,name2) MAKE_USAGE(#name, name2##_trivial_usage)
-# define APPLET_NOFORK(name,main,l,s,name2) MAKE_USAGE(#name, name2##_trivial_usage)
-
-#elif defined(MAKE_LINKS)
-# define APPLET(name,l,c) LINK l name
-# define APPLET_ODDNAME(name,main,l,s,name2) LINK l name
-# define APPLET_NOEXEC(name,main,l,s,name2) LINK l name
-# define APPLET_NOFORK(name,main,l,s,name2) LINK l name
-
-#else
- static struct bb_applet applets[] = { /* name, main, location, need_suid */
-# define APPLET(name,l,s) { #name, #name, l, s },
-# define APPLET_ODDNAME(name,main,l,s,name2) { #name, #main, l, s },
-# define APPLET_NOEXEC(name,main,l,s,name2) { #name, #main, l, s, 1 },
-# define APPLET_NOFORK(name,main,l,s,name2) { #name, #main, l, s, 1, 1 },
-#endif
-
-#if ENABLE_INSTALL_NO_USR
-# define BB_DIR_USR_BIN BB_DIR_BIN
-# define BB_DIR_USR_SBIN BB_DIR_SBIN
-#endif
-
-
-IF_BUNZIP2(APPLET(bunzip2, BB_DIR_USR_BIN, BB_SUID_DROP))
-IF_BUNZIP2(APPLET_ODDNAME(bzcat, bunzip2, BB_DIR_USR_BIN, BB_SUID_DROP, bzcat))
-IF_DATE(APPLET(date, BB_DIR_BIN, BB_SUID_DROP))
-IF_HOSTID(APPLET_NOFORK(hostid, hostid, BB_DIR_USR_BIN, BB_SUID_DROP, hostid))
-IF_GROUPS(APPLET_NOEXEC(groups, id, BB_DIR_USR_BIN, BB_SUID_DROP, groups))
-IF_ID( APPLET_NOEXEC(id, id, BB_DIR_USR_BIN, BB_SUID_DROP, id ))
-IF_TOUCH(APPLET_NOFORK(touch, touch, BB_DIR_BIN, BB_SUID_DROP, touch))
-IF_BASE64(APPLET(base64, BB_DIR_BIN, BB_SUID_DROP))
-IF_USERS(APPLET_ODDNAME(users, who, BB_DIR_USR_BIN, BB_SUID_DROP, users))
-IF_WHO( APPLET( who, BB_DIR_USR_BIN, BB_SUID_DROP))
-IF_PATCH(APPLET(patch, BB_DIR_USR_BIN, BB_SUID_DROP))
-IF_VI(APPLET(vi, BB_DIR_BIN, BB_SUID_DROP))
-IF_FIND(APPLET_NOEXEC(find, find, BB_DIR_USR_BIN, BB_SUID_DROP, find))
-IF_GREP(APPLET(grep, BB_DIR_BIN, BB_SUID_DROP))
-IF_FEATURE_GREP_EGREP_ALIAS(APPLET_ODDNAME(egrep, grep, BB_DIR_BIN, BB_SUID_DROP, egrep))
-IF_FEATURE_GREP_FGREP_ALIAS(APPLET_ODDNAME(fgrep, grep, BB_DIR_BIN, BB_SUID_DROP, fgrep))
-IF_XARGS(APPLET_NOEXEC(xargs, xargs, BB_DIR_USR_BIN, BB_SUID_DROP, xargs))
-IF_BOOTCHARTD(APPLET(bootchartd, BB_DIR_SBIN, BB_SUID_DROP))
-IF_HALT(APPLET(halt, BB_DIR_SBIN, BB_SUID_DROP))
-IF_HALT(APPLET_ODDNAME(poweroff, halt, BB_DIR_SBIN, BB_SUID_DROP, poweroff))
-IF_HALT(APPLET_ODDNAME(reboot, halt, BB_DIR_SBIN, BB_SUID_DROP, reboot))
-IF_INIT(APPLET(init, BB_DIR_SBIN, BB_SUID_DROP))
-IF_FEATURE_INITRD(APPLET_ODDNAME(linuxrc, init, BB_DIR_ROOT, BB_SUID_DROP, linuxrc))
-IF_MESG(APPLET(mesg, BB_DIR_USR_BIN, BB_SUID_DROP))
-IF_ADD_SHELL( APPLET_ODDNAME(add-shell , add_remove_shell, BB_DIR_USR_SBIN, BB_SUID_DROP, add_shell ))
-IF_REMOVE_SHELL(APPLET_ODDNAME(remove-shell, add_remove_shell, BB_DIR_USR_SBIN, BB_SUID_DROP, remove_shell))
-IF_CONSPY(APPLET(conspy, BB_DIR_BIN, BB_SUID_DROP))
-IF_NANDWRITE(APPLET(nandwrite, BB_DIR_USR_SBIN, BB_SUID_DROP))
-IF_NANDWRITE(APPLET_ODDNAME(nanddump, nandwrite, BB_DIR_USR_SBIN, BB_SUID_DROP, nanddump))
-IF_SETSERIAL(APPLET(setserial, BB_DIR_BIN, BB_SUID_DROP))
-IF_UBIATTACH(APPLET_ODDNAME(ubiattach, ubi_tools, BB_DIR_USR_SBIN, BB_SUID_DROP, ubiattach))
-IF_UBIDETACH(APPLET_ODDNAME(ubidetach, ubi_tools, BB_DIR_USR_SBIN, BB_SUID_DROP, ubidetach))
-IF_UBIMKVOL(APPLET_ODDNAME(ubimkvol, ubi_tools, BB_DIR_USR_SBIN, BB_SUID_DROP, ubimkvol))
-IF_UBIRMVOL(APPLET_ODDNAME(ubirmvol, ubi_tools, BB_DIR_USR_SBIN, BB_SUID_DROP, ubirmvol))
-IF_UBIRSVOL(APPLET_ODDNAME(ubirsvol, ubi_tools, BB_DIR_USR_SBIN, BB_SUID_DROP, ubirsvol))
-IF_UBIUPDATEVOL(APPLET_ODDNAME(ubiupdatevol, ubi_tools, BB_DIR_USR_SBIN, BB_SUID_DROP, ubiupdatevol))
-IF_DEPMOD(APPLET(depmod, BB_DIR_SBIN, BB_SUID_DROP))
-IF_INSMOD(APPLET(insmod, BB_DIR_SBIN, BB_SUID_DROP))
-IF_LSMOD(APPLET(lsmod, BB_DIR_SBIN, BB_SUID_DROP))
-IF_MODINFO(APPLET(modinfo, BB_DIR_SBIN, BB_SUID_DROP))
-IF_MODPROBE_SMALL(APPLET(modprobe, BB_DIR_SBIN, BB_SUID_DROP))
-IF_MODPROBE_SMALL(APPLET_ODDNAME(depmod, modprobe, BB_DIR_SBIN, BB_SUID_DROP, modprobe))
-IF_MODPROBE_SMALL(APPLET_ODDNAME(insmod, modprobe, BB_DIR_SBIN, BB_SUID_DROP, modprobe))
-IF_MODPROBE_SMALL(APPLET_ODDNAME(lsmod, modprobe, BB_DIR_SBIN, BB_SUID_DROP, modprobe))
-IF_MODPROBE_SMALL(APPLET_ODDNAME(rmmod, modprobe, BB_DIR_SBIN, BB_SUID_DROP, modprobe))
-IF_MODPROBE(APPLET(modprobe, BB_DIR_SBIN, BB_SUID_DROP))
-IF_RMMOD(APPLET(rmmod, BB_DIR_SBIN, BB_SUID_DROP))
-IF_NBDCLIENT(APPLET_ODDNAME(nbd-client, nbdclient, BB_DIR_USR_SBIN, BB_SUID_DROP, nbdclient))
-IF_PING(APPLET(ping, BB_DIR_BIN, BB_SUID_MAYBE))
-IF_PING6(APPLET(ping6, BB_DIR_BIN, BB_SUID_MAYBE))
-IF_WHOIS(APPLET(whois, BB_DIR_USR_BIN, BB_SUID_DROP))
-IF_IOSTAT(APPLET(iostat, BB_DIR_BIN, BB_SUID_DROP))
-IF_LSOF(APPLET(lsof, BB_DIR_USR_BIN, BB_SUID_DROP))
-IF_MPSTAT(APPLET(mpstat, BB_DIR_BIN, BB_SUID_DROP))
-IF_NMETER(APPLET(nmeter, BB_DIR_USR_BIN, BB_SUID_DROP))
-IF_PMAP(APPLET(pmap, BB_DIR_USR_BIN, BB_SUID_DROP))
-IF_POWERTOP(APPLET(powertop, BB_DIR_USR_SBIN, BB_SUID_DROP))
-IF_PSTREE(APPLET(pstree, BB_DIR_USR_BIN, BB_SUID_DROP))
-IF_PWDX(APPLET(pwdx, BB_DIR_USR_BIN, BB_SUID_DROP))
-IF_SMEMCAP(APPLET(smemcap, BB_DIR_USR_BIN, BB_SUID_DROP))
-IF_ASH(APPLET(ash, BB_DIR_BIN, BB_SUID_DROP))
-IF_FEATURE_SH_IS_ASH(APPLET_ODDNAME(sh, ash, BB_DIR_BIN, BB_SUID_DROP, sh))
-IF_FEATURE_BASH_IS_ASH(APPLET_ODDNAME(bash, ash, BB_DIR_BIN, BB_SUID_DROP, bash))
-IF_CTTYHACK(APPLET(cttyhack, BB_DIR_BIN, BB_SUID_DROP))
-IF_HUSH(APPLET(hush, BB_DIR_BIN, BB_SUID_DROP))
-IF_MSH(APPLET(msh, BB_DIR_BIN, BB_SUID_DROP))
-IF_FEATURE_SH_IS_HUSH(APPLET_ODDNAME(sh, hush, BB_DIR_BIN, BB_SUID_DROP, sh))
-IF_FEATURE_BASH_IS_HUSH(APPLET_ODDNAME(bash, hush, BB_DIR_BIN, BB_SUID_DROP, bash))
-IF_BLOCKDEV(APPLET(blockdev, BB_DIR_SBIN, BB_SUID_DROP))
-IF_MDEV(APPLET(mdev, BB_DIR_SBIN, BB_SUID_DROP))
-IF_REV(APPLET(rev, BB_DIR_BIN, BB_SUID_DROP))
-IF_UDHCPC6(APPLET(udhcpc6, BB_DIR_USR_BIN, BB_SUID_DROP))
-IF_TEST(APPLET_NOFORK([, test, BB_DIR_USR_BIN, BB_SUID_DROP, test))
-IF_TEST(APPLET_NOFORK([[, test, BB_DIR_USR_BIN, BB_SUID_DROP, test))
-IF_ACPID(APPLET(acpid, BB_DIR_SBIN, BB_SUID_DROP))
-IF_ADDGROUP(APPLET(addgroup, BB_DIR_USR_SBIN, BB_SUID_DROP))
-IF_ADDUSER(APPLET(adduser, BB_DIR_USR_SBIN, BB_SUID_DROP))
-IF_ADJTIMEX(APPLET(adjtimex, BB_DIR_SBIN, BB_SUID_DROP))
-IF_AR(APPLET(ar, BB_DIR_USR_BIN, BB_SUID_DROP))
-IF_ARP(APPLET(arp, BB_DIR_SBIN, BB_SUID_DROP))
-IF_ARPING(APPLET(arping, BB_DIR_USR_SBIN, BB_SUID_DROP))
-IF_AWK(APPLET_NOEXEC(awk, awk, BB_DIR_USR_BIN, BB_SUID_DROP, awk))
-IF_BASENAME(APPLET_NOFORK(basename, basename, BB_DIR_USR_BIN, BB_SUID_DROP, basename))
-IF_BBCONFIG(APPLET(bbconfig, BB_DIR_BIN, BB_SUID_DROP))
-IF_BEEP(APPLET(beep, BB_DIR_USR_BIN, BB_SUID_DROP))
-IF_BLKID(APPLET(blkid, BB_DIR_SBIN, BB_SUID_DROP))
-IF_BRCTL(APPLET(brctl, BB_DIR_USR_SBIN, BB_SUID_DROP))
-IF_BZIP2(APPLET(bzip2, BB_DIR_USR_BIN, BB_SUID_DROP))
-IF_CAL(APPLET(cal, BB_DIR_USR_BIN, BB_SUID_DROP))
-IF_CAT(APPLET_NOFORK(cat, cat, BB_DIR_BIN, BB_SUID_DROP, cat))
-IF_CATV(APPLET(catv, BB_DIR_BIN, BB_SUID_DROP))
-IF_CHAT(APPLET(chat, BB_DIR_USR_SBIN, BB_SUID_DROP))
-IF_CHATTR(APPLET(chattr, BB_DIR_BIN, BB_SUID_DROP))
-IF_CHCON(APPLET(chcon, BB_DIR_USR_BIN, BB_SUID_DROP))
-IF_CHGRP(APPLET_NOEXEC(chgrp, chgrp, BB_DIR_BIN, BB_SUID_DROP, chgrp))
-IF_CHMOD(APPLET_NOEXEC(chmod, chmod, BB_DIR_BIN, BB_SUID_DROP, chmod))
-IF_CHOWN(APPLET_NOEXEC(chown, chown, BB_DIR_BIN, BB_SUID_DROP, chown))
-IF_CHPASSWD(APPLET(chpasswd, BB_DIR_USR_SBIN, BB_SUID_DROP))
-IF_CHPST(APPLET(chpst, BB_DIR_USR_BIN, BB_SUID_DROP))
-IF_CHROOT(APPLET(chroot, BB_DIR_USR_SBIN, BB_SUID_DROP))
-IF_CHRT(APPLET(chrt, BB_DIR_USR_BIN, BB_SUID_DROP))
-IF_CHVT(APPLET(chvt, BB_DIR_USR_BIN, BB_SUID_DROP))
-IF_CKSUM(APPLET_NOEXEC(cksum, cksum, BB_DIR_USR_BIN, BB_SUID_DROP, cksum))
-IF_CLEAR(APPLET(clear, BB_DIR_USR_BIN, BB_SUID_DROP))
-IF_CMP(APPLET(cmp, BB_DIR_USR_BIN, BB_SUID_DROP))
-IF_COMM(APPLET(comm, BB_DIR_USR_BIN, BB_SUID_DROP))
-IF_CP(APPLET_NOEXEC(cp, cp, BB_DIR_BIN, BB_SUID_DROP, cp))
-IF_CPIO(APPLET(cpio, BB_DIR_BIN, BB_SUID_DROP))
-IF_CROND(APPLET(crond, BB_DIR_USR_SBIN, BB_SUID_DROP))
-/* Needs to be run by root or be suid root - needs to change /var/spool/cron* files: */
-IF_CRONTAB(APPLET(crontab, BB_DIR_USR_BIN, BB_SUID_REQUIRE))
-IF_CRYPTPW(APPLET(cryptpw, BB_DIR_USR_BIN, BB_SUID_DROP))
-IF_CUT(APPLET_NOEXEC(cut, cut, BB_DIR_USR_BIN, BB_SUID_DROP, cut))
-IF_DC(APPLET(dc, BB_DIR_USR_BIN, BB_SUID_DROP))
-IF_DD(APPLET_NOEXEC(dd, dd, BB_DIR_BIN, BB_SUID_DROP, dd))
-IF_DEALLOCVT(APPLET(deallocvt, BB_DIR_USR_BIN, BB_SUID_DROP))
-IF_DELGROUP(APPLET_ODDNAME(delgroup, deluser, BB_DIR_USR_SBIN, BB_SUID_DROP, delgroup))
-IF_DELUSER(APPLET(deluser, BB_DIR_USR_SBIN, BB_SUID_DROP))
-IF_DEVFSD(APPLET(devfsd, BB_DIR_SBIN, BB_SUID_DROP))
-IF_DEVMEM(APPLET(devmem, BB_DIR_SBIN, BB_SUID_DROP))
-IF_DF(APPLET(df, BB_DIR_BIN, BB_SUID_DROP))
-IF_DHCPRELAY(APPLET(dhcprelay, BB_DIR_USR_SBIN, BB_SUID_DROP))
-IF_DIFF(APPLET(diff, BB_DIR_USR_BIN, BB_SUID_DROP))
-IF_DIRNAME(APPLET_NOFORK(dirname, dirname, BB_DIR_USR_BIN, BB_SUID_DROP, dirname))
-IF_DMESG(APPLET(dmesg, BB_DIR_BIN, BB_SUID_DROP))
-IF_DNSD(APPLET(dnsd, BB_DIR_USR_SBIN, BB_SUID_DROP))
-IF_HOSTNAME(APPLET_ODDNAME(dnsdomainname, hostname, BB_DIR_BIN, BB_SUID_DROP, dnsdomainname))
-IF_DOS2UNIX(APPLET_NOEXEC(dos2unix, dos2unix, BB_DIR_USR_BIN, BB_SUID_DROP, dos2unix))
-IF_DPKG(APPLET(dpkg, BB_DIR_USR_BIN, BB_SUID_DROP))
-IF_DPKG_DEB(APPLET_ODDNAME(dpkg-deb, dpkg_deb, BB_DIR_USR_BIN, BB_SUID_DROP, dpkg_deb))
-IF_DU(APPLET(du, BB_DIR_USR_BIN, BB_SUID_DROP))
-IF_DUMPKMAP(APPLET(dumpkmap, BB_DIR_BIN, BB_SUID_DROP))
-IF_DUMPLEASES(APPLET(dumpleases, BB_DIR_USR_BIN, BB_SUID_DROP))
-//IF_E2FSCK(APPLET(e2fsck, BB_DIR_SBIN, BB_SUID_DROP))
-//IF_E2LABEL(APPLET_ODDNAME(e2label, tune2fs, BB_DIR_SBIN, BB_SUID_DROP, e2label))
-IF_ECHO(APPLET_NOFORK(echo, echo, BB_DIR_BIN, BB_SUID_DROP, echo))
-IF_ED(APPLET(ed, BB_DIR_BIN, BB_SUID_DROP))
-IF_EJECT(APPLET(eject, BB_DIR_USR_BIN, BB_SUID_DROP))
-IF_ENV(APPLET_NOEXEC(env, env, BB_DIR_USR_BIN, BB_SUID_DROP, env))
-IF_ENVDIR(APPLET_ODDNAME(envdir, chpst, BB_DIR_USR_BIN, BB_SUID_DROP, envdir))
-IF_ENVUIDGID(APPLET_ODDNAME(envuidgid, chpst, BB_DIR_USR_BIN, BB_SUID_DROP, envuidgid))
-IF_ETHER_WAKE(APPLET_ODDNAME(ether-wake, ether_wake, BB_DIR_USR_SBIN, BB_SUID_DROP, ether_wake))
-IF_EXPAND(APPLET(expand, BB_DIR_USR_BIN, BB_SUID_DROP))
-IF_EXPR(APPLET(expr, BB_DIR_USR_BIN, BB_SUID_DROP))
-IF_FAKEIDENTD(APPLET(fakeidentd, BB_DIR_USR_SBIN, BB_SUID_DROP))
-IF_FALSE(APPLET_NOFORK(false, false, BB_DIR_BIN, BB_SUID_DROP, false))
-IF_FBSET(APPLET(fbset, BB_DIR_USR_SBIN, BB_SUID_DROP))
-IF_FBSPLASH(APPLET(fbsplash, BB_DIR_SBIN, BB_SUID_DROP))
-IF_FDFLUSH(APPLET_ODDNAME(fdflush, freeramdisk, BB_DIR_BIN, BB_SUID_DROP, fdflush))
-IF_FDFORMAT(APPLET(fdformat, BB_DIR_USR_SBIN, BB_SUID_DROP))
-IF_FDISK(APPLET(fdisk, BB_DIR_SBIN, BB_SUID_DROP))
-IF_FGCONSOLE(APPLET(fgconsole, BB_DIR_USR_BIN, BB_SUID_DROP))
-/* Benefits from suid root: better access to /dev/BLOCKDEVs: */
-IF_FINDFS(APPLET(findfs, BB_DIR_SBIN, BB_SUID_MAYBE))
-IF_FLASH_ERASEALL(APPLET(flash_eraseall, BB_DIR_USR_SBIN, BB_SUID_DROP))
-IF_FLASH_LOCK(APPLET_ODDNAME(flash_lock, flash_lock_unlock, BB_DIR_USR_SBIN, BB_SUID_DROP, flash_lock))
-IF_FLASH_UNLOCK(APPLET_ODDNAME(flash_unlock, flash_lock_unlock, BB_DIR_USR_SBIN, BB_SUID_DROP, flash_unlock))
-IF_FLASHCP(APPLET(flashcp, BB_DIR_USR_SBIN, BB_SUID_DROP))
-IF_FLOCK(APPLET(flock, BB_DIR_USR_BIN, BB_SUID_DROP))
-IF_FOLD(APPLET_NOEXEC(fold, fold, BB_DIR_USR_BIN, BB_SUID_DROP, fold))
-IF_FREE(APPLET(free, BB_DIR_USR_BIN, BB_SUID_DROP))
-IF_FREERAMDISK(APPLET(freeramdisk, BB_DIR_SBIN, BB_SUID_DROP))
-IF_FSCK(APPLET(fsck, BB_DIR_SBIN, BB_SUID_DROP))
-//IF_E2FSCK(APPLET_ODDNAME(fsck.ext2, e2fsck, BB_DIR_SBIN, BB_SUID_DROP, fsck_ext2))
-//IF_E2FSCK(APPLET_ODDNAME(fsck.ext3, e2fsck, BB_DIR_SBIN, BB_SUID_DROP, fsck_ext3))
-IF_FSCK_MINIX(APPLET_ODDNAME(fsck.minix, fsck_minix, BB_DIR_SBIN, BB_SUID_DROP, fsck_minix))
-IF_FSTRIM(APPLET(fstrim, BB_DIR_SBIN, BB_SUID_DROP))
-IF_FSYNC(APPLET_NOFORK(fsync, fsync, BB_DIR_BIN, BB_SUID_DROP, fsync))
-IF_FTPD(APPLET(ftpd, BB_DIR_USR_SBIN, BB_SUID_DROP))
-IF_FTPGET(APPLET_ODDNAME(ftpget, ftpgetput, BB_DIR_USR_BIN, BB_SUID_DROP, ftpget))
-IF_FTPPUT(APPLET_ODDNAME(ftpput, ftpgetput, BB_DIR_USR_BIN, BB_SUID_DROP, ftpput))
-IF_FUSER(APPLET(fuser, BB_DIR_USR_BIN, BB_SUID_DROP))
-IF_GETENFORCE(APPLET(getenforce, BB_DIR_USR_SBIN, BB_SUID_DROP))
-IF_GETOPT(APPLET(getopt, BB_DIR_BIN, BB_SUID_DROP))
-IF_GETSEBOOL(APPLET(getsebool, BB_DIR_USR_SBIN, BB_SUID_DROP))
-IF_GETTY(APPLET(getty, BB_DIR_SBIN, BB_SUID_DROP))
-IF_GUNZIP(APPLET(gunzip, BB_DIR_BIN, BB_SUID_DROP))
-IF_GZIP(APPLET(gzip, BB_DIR_BIN, BB_SUID_DROP))
-IF_HD(APPLET_NOEXEC(hd, hexdump, BB_DIR_USR_BIN, BB_SUID_DROP, hd))
-IF_HDPARM(APPLET(hdparm, BB_DIR_SBIN, BB_SUID_DROP))
-IF_HEAD(APPLET_NOEXEC(head, head, BB_DIR_USR_BIN, BB_SUID_DROP, head))
-IF_HEXDUMP(APPLET_NOEXEC(hexdump, hexdump, BB_DIR_USR_BIN, BB_SUID_DROP, hexdump))
-IF_HOSTNAME(APPLET(hostname, BB_DIR_BIN, BB_SUID_DROP))
-IF_HTTPD(APPLET(httpd, BB_DIR_USR_SBIN, BB_SUID_DROP))
-IF_HWCLOCK(APPLET(hwclock, BB_DIR_SBIN, BB_SUID_DROP))
-IF_IFCONFIG(APPLET(ifconfig, BB_DIR_SBIN, BB_SUID_DROP))
-IF_IFUPDOWN(APPLET_ODDNAME(ifdown, ifupdown, BB_DIR_SBIN, BB_SUID_DROP, ifdown))
-IF_IFENSLAVE(APPLET(ifenslave, BB_DIR_SBIN, BB_SUID_DROP))
-IF_IFPLUGD(APPLET(ifplugd, BB_DIR_USR_SBIN, BB_SUID_DROP))
-IF_IFUPDOWN(APPLET_ODDNAME(ifup, ifupdown, BB_DIR_SBIN, BB_SUID_DROP, ifup))
-IF_INETD(APPLET(inetd, BB_DIR_USR_SBIN, BB_SUID_DROP))
-IF_INOTIFYD(APPLET(inotifyd, BB_DIR_SBIN, BB_SUID_DROP))
-IF_INSTALL(APPLET(install, BB_DIR_USR_BIN, BB_SUID_DROP))
-IF_IONICE(APPLET(ionice, BB_DIR_BIN, BB_SUID_DROP))
-#if ENABLE_FEATURE_IP_ADDRESS \
- || ENABLE_FEATURE_IP_ROUTE \
- || ENABLE_FEATURE_IP_LINK \
- || ENABLE_FEATURE_IP_TUNNEL \
- || ENABLE_FEATURE_IP_RULE
-IF_IP(APPLET(ip, BB_DIR_SBIN, BB_SUID_DROP))
-#endif
-IF_IPADDR(APPLET(ipaddr, BB_DIR_SBIN, BB_SUID_DROP))
-IF_IPCALC(APPLET(ipcalc, BB_DIR_BIN, BB_SUID_DROP))
-IF_IPCRM(APPLET(ipcrm, BB_DIR_USR_BIN, BB_SUID_DROP))
-IF_IPCS(APPLET(ipcs, BB_DIR_USR_BIN, BB_SUID_DROP))
-IF_IPLINK(APPLET(iplink, BB_DIR_SBIN, BB_SUID_DROP))
-IF_IPROUTE(APPLET(iproute, BB_DIR_SBIN, BB_SUID_DROP))
-IF_IPRULE(APPLET(iprule, BB_DIR_SBIN, BB_SUID_DROP))
-IF_IPTUNNEL(APPLET(iptunnel, BB_DIR_SBIN, BB_SUID_DROP))
-IF_KBD_MODE(APPLET(kbd_mode, BB_DIR_BIN, BB_SUID_DROP))
-IF_KILL(APPLET(kill, BB_DIR_BIN, BB_SUID_DROP))
-IF_KILLALL(APPLET_ODDNAME(killall, kill, BB_DIR_USR_BIN, BB_SUID_DROP, killall))
-IF_KILLALL5(APPLET_ODDNAME(killall5, kill, BB_DIR_USR_SBIN, BB_SUID_DROP, killall5))
-IF_KLOGD(APPLET(klogd, BB_DIR_SBIN, BB_SUID_DROP))
-IF_LAST(APPLET(last, BB_DIR_USR_BIN, BB_SUID_DROP))
-//IF_LENGTH(APPLET_NOFORK(length, length, BB_DIR_USR_BIN, BB_SUID_DROP, length))
-IF_LESS(APPLET(less, BB_DIR_USR_BIN, BB_SUID_DROP))
-IF_SETARCH(APPLET_ODDNAME(linux32, setarch, BB_DIR_BIN, BB_SUID_DROP, linux32))
-IF_SETARCH(APPLET_ODDNAME(linux64, setarch, BB_DIR_BIN, BB_SUID_DROP, linux64))
-IF_LN(APPLET_NOEXEC(ln, ln, BB_DIR_BIN, BB_SUID_DROP, ln))
-IF_LOAD_POLICY(APPLET(load_policy, BB_DIR_USR_SBIN, BB_SUID_DROP))
-IF_LOADFONT(APPLET(loadfont, BB_DIR_USR_SBIN, BB_SUID_DROP))
-IF_LOADKMAP(APPLET(loadkmap, BB_DIR_SBIN, BB_SUID_DROP))
-IF_LOGGER(APPLET(logger, BB_DIR_USR_BIN, BB_SUID_DROP))
-/* Needs to be run by root or be suid root - needs to change uid and gid: */
-IF_LOGIN(APPLET(login, BB_DIR_BIN, BB_SUID_REQUIRE))
-IF_LOGNAME(APPLET_NOFORK(logname, logname, BB_DIR_USR_BIN, BB_SUID_DROP, logname))
-IF_LOGREAD(APPLET(logread, BB_DIR_SBIN, BB_SUID_DROP))
-IF_LOSETUP(APPLET(losetup, BB_DIR_SBIN, BB_SUID_DROP))
-IF_LPD(APPLET(lpd, BB_DIR_USR_SBIN, BB_SUID_DROP))
-IF_LPQ(APPLET_ODDNAME(lpq, lpqr, BB_DIR_USR_BIN, BB_SUID_DROP, lpq))
-IF_LPR(APPLET_ODDNAME(lpr, lpqr, BB_DIR_USR_BIN, BB_SUID_DROP, lpr))
-IF_LS(APPLET_NOEXEC(ls, ls, BB_DIR_BIN, BB_SUID_DROP, ls))
-IF_LSATTR(APPLET(lsattr, BB_DIR_BIN, BB_SUID_DROP))
-IF_LSPCI(APPLET(lspci, BB_DIR_USR_BIN, BB_SUID_DROP))
-IF_LSUSB(APPLET(lsusb, BB_DIR_USR_BIN, BB_SUID_DROP))
-IF_UNLZMA(APPLET_ODDNAME(lzcat, unlzma, BB_DIR_USR_BIN, BB_SUID_DROP, lzcat))
-IF_LZMA(APPLET_ODDNAME(lzma, unlzma, BB_DIR_USR_BIN, BB_SUID_DROP, lzma))
-IF_LZOP(APPLET(lzop, BB_DIR_BIN, BB_SUID_DROP))
-IF_LZOP(APPLET_ODDNAME(lzopcat, lzop, BB_DIR_USR_BIN, BB_SUID_DROP, lzopcat))
-IF_MAKEDEVS(APPLET(makedevs, BB_DIR_SBIN, BB_SUID_DROP))
-IF_MAKEMIME(APPLET(makemime, BB_DIR_BIN, BB_SUID_DROP))
-IF_MAN(APPLET(man, BB_DIR_SBIN, BB_SUID_DROP))
-IF_MATCHPATHCON(APPLET(matchpathcon, BB_DIR_USR_SBIN, BB_SUID_DROP))
-IF_MD5SUM(APPLET_NOEXEC(md5sum, md5_sha1_sum, BB_DIR_USR_BIN, BB_SUID_DROP, md5sum))
-IF_MICROCOM(APPLET(microcom, BB_DIR_USR_BIN, BB_SUID_DROP))
-IF_MKDIR(APPLET_NOFORK(mkdir, mkdir, BB_DIR_BIN, BB_SUID_DROP, mkdir))
-IF_MKFS_VFAT(APPLET_ODDNAME(mkdosfs, mkfs_vfat, BB_DIR_SBIN, BB_SUID_DROP, mkfs_vfat))
-IF_MKFS_EXT2(APPLET_ODDNAME(mke2fs, mkfs_ext2, BB_DIR_SBIN, BB_SUID_DROP, mkfs_ext2))
-IF_MKFIFO(APPLET_NOEXEC(mkfifo, mkfifo, BB_DIR_USR_BIN, BB_SUID_DROP, mkfifo))
-IF_MKFS_EXT2(APPLET_ODDNAME(mkfs.ext2, mkfs_ext2, BB_DIR_SBIN, BB_SUID_DROP, mkfs_ext2))
-//IF_MKE2FS(APPLET_ODDNAME(mkfs.ext3, mke2fs, BB_DIR_SBIN, BB_SUID_DROP, mkfs_ext3))
-IF_MKFS_MINIX(APPLET_ODDNAME(mkfs.minix, mkfs_minix, BB_DIR_SBIN, BB_SUID_DROP, mkfs_minix))
-IF_MKFS_REISER(APPLET_ODDNAME(mkfs.reiser, mkfs_reiser, BB_DIR_SBIN, BB_SUID_DROP, mkfs_reiser))
-IF_MKFS_VFAT(APPLET_ODDNAME(mkfs.vfat, mkfs_vfat, BB_DIR_SBIN, BB_SUID_DROP, mkfs_vfat))
-IF_MKNOD(APPLET_NOEXEC(mknod, mknod, BB_DIR_BIN, BB_SUID_DROP, mknod))
-IF_CRYPTPW(APPLET_ODDNAME(mkpasswd, cryptpw, BB_DIR_USR_BIN, BB_SUID_DROP, mkpasswd))
-IF_MKSWAP(APPLET(mkswap, BB_DIR_SBIN, BB_SUID_DROP))
-IF_MKTEMP(APPLET(mktemp, BB_DIR_BIN, BB_SUID_DROP))
-IF_MORE(APPLET(more, BB_DIR_BIN, BB_SUID_DROP))
-/* On full-blown systems, requires suid for user mounts.
- * But it's not unthinkable to have it available in non-suid flavor on some systems,
- * for viewing mount table.
- * Therefore we use BB_SUID_MAYBE instead of BB_SUID_REQUIRE: */
-IF_MOUNT(APPLET(mount, BB_DIR_BIN, IF_DESKTOP(BB_SUID_MAYBE) IF_NOT_DESKTOP(BB_SUID_DROP)))
-IF_MOUNTPOINT(APPLET(mountpoint, BB_DIR_BIN, BB_SUID_DROP))
-IF_MT(APPLET(mt, BB_DIR_BIN, BB_SUID_DROP))
-IF_MV(APPLET(mv, BB_DIR_BIN, BB_SUID_DROP))
-IF_NAMEIF(APPLET(nameif, BB_DIR_SBIN, BB_SUID_DROP))
-IF_NC(APPLET(nc, BB_DIR_USR_BIN, BB_SUID_DROP))
-IF_NETSTAT(APPLET(netstat, BB_DIR_BIN, BB_SUID_DROP))
-IF_NICE(APPLET(nice, BB_DIR_BIN, BB_SUID_DROP))
-IF_NOHUP(APPLET(nohup, BB_DIR_USR_BIN, BB_SUID_DROP))
-IF_NSLOOKUP(APPLET(nslookup, BB_DIR_USR_BIN, BB_SUID_DROP))
-IF_NTPD(APPLET(ntpd, BB_DIR_USR_SBIN, BB_SUID_DROP))
-IF_OD(APPLET(od, BB_DIR_USR_BIN, BB_SUID_DROP))
-IF_OPENVT(APPLET(openvt, BB_DIR_USR_BIN, BB_SUID_DROP))
-//IF_PARSE(APPLET(parse, BB_DIR_USR_BIN, BB_SUID_DROP))
-/* Needs to be run by root or be suid root - needs to change /etc/{passwd,shadow}: */
-IF_PASSWD(APPLET(passwd, BB_DIR_USR_BIN, BB_SUID_REQUIRE))
-IF_PGREP(APPLET(pgrep, BB_DIR_USR_BIN, BB_SUID_DROP))
-IF_PIDOF(APPLET(pidof, BB_DIR_BIN, BB_SUID_DROP))
-IF_PIPE_PROGRESS(APPLET(pipe_progress, BB_DIR_BIN, BB_SUID_DROP))
-IF_PIVOT_ROOT(APPLET(pivot_root, BB_DIR_SBIN, BB_SUID_DROP))
-IF_PKILL(APPLET_ODDNAME(pkill, pgrep, BB_DIR_USR_BIN, BB_SUID_DROP, pkill))
-IF_POPMAILDIR(APPLET(popmaildir, BB_DIR_USR_SBIN, BB_SUID_DROP))
-IF_PRINTENV(APPLET_NOFORK(printenv, printenv, BB_DIR_BIN, BB_SUID_DROP, printenv))
-IF_PRINTF(APPLET_NOFORK(printf, printf, BB_DIR_USR_BIN, BB_SUID_DROP, printf))
-IF_PS(APPLET(ps, BB_DIR_BIN, BB_SUID_DROP))
-IF_PSCAN(APPLET(pscan, BB_DIR_USR_BIN, BB_SUID_DROP))
-IF_PWD(APPLET_NOFORK(pwd, pwd, BB_DIR_BIN, BB_SUID_DROP, pwd))
-IF_RAIDAUTORUN(APPLET(raidautorun, BB_DIR_SBIN, BB_SUID_DROP))
-IF_RDATE(APPLET(rdate, BB_DIR_USR_SBIN, BB_SUID_DROP))
-IF_RDEV(APPLET(rdev, BB_DIR_USR_SBIN, BB_SUID_DROP))
-IF_READAHEAD(APPLET(readahead, BB_DIR_USR_SBIN, BB_SUID_DROP))
-IF_READLINK(APPLET(readlink, BB_DIR_USR_BIN, BB_SUID_DROP))
-IF_READPROFILE(APPLET(readprofile, BB_DIR_USR_SBIN, BB_SUID_DROP))
-IF_REALPATH(APPLET(realpath, BB_DIR_USR_BIN, BB_SUID_DROP))
-IF_REFORMIME(APPLET(reformime, BB_DIR_BIN, BB_SUID_DROP))
-IF_RENICE(APPLET(renice, BB_DIR_USR_BIN, BB_SUID_DROP))
-IF_RESET(APPLET(reset, BB_DIR_USR_BIN, BB_SUID_DROP))
-IF_RESIZE(APPLET(resize, BB_DIR_USR_BIN, BB_SUID_DROP))
-IF_RESTORECON(APPLET_ODDNAME(restorecon, setfiles, BB_DIR_SBIN, BB_SUID_DROP, restorecon))
-IF_RFKILL(APPLET(rfkill, BB_DIR_USR_SBIN, BB_SUID_DROP))
-IF_RM(APPLET_NOFORK(rm, rm, BB_DIR_BIN, BB_SUID_DROP, rm))
-IF_RMDIR(APPLET_NOFORK(rmdir, rmdir, BB_DIR_BIN, BB_SUID_DROP, rmdir))
-IF_ROUTE(APPLET(route, BB_DIR_SBIN, BB_SUID_DROP))
-IF_RPM(APPLET(rpm, BB_DIR_BIN, BB_SUID_DROP))
-IF_RPM2CPIO(APPLET(rpm2cpio, BB_DIR_USR_BIN, BB_SUID_DROP))
-IF_RTCWAKE(APPLET(rtcwake, BB_DIR_USR_SBIN, BB_SUID_DROP))
-IF_RUN_PARTS(APPLET_ODDNAME(run-parts, run_parts, BB_DIR_BIN, BB_SUID_DROP, run_parts))
-IF_RUNCON(APPLET(runcon, BB_DIR_USR_BIN, BB_SUID_DROP))
-IF_RUNLEVEL(APPLET(runlevel, BB_DIR_SBIN, BB_SUID_DROP))
-IF_RUNSV(APPLET(runsv, BB_DIR_USR_BIN, BB_SUID_DROP))
-IF_RUNSVDIR(APPLET(runsvdir, BB_DIR_USR_BIN, BB_SUID_DROP))
-IF_RX(APPLET(rx, BB_DIR_USR_BIN, BB_SUID_DROP))
-IF_SCRIPT(APPLET(script, BB_DIR_USR_BIN, BB_SUID_DROP))
-IF_SCRIPTREPLAY(APPLET(scriptreplay, BB_DIR_BIN, BB_SUID_DROP))
-IF_SED(APPLET(sed, BB_DIR_BIN, BB_SUID_DROP))
-IF_SELINUXENABLED(APPLET(selinuxenabled, BB_DIR_USR_SBIN, BB_SUID_DROP))
-IF_SENDMAIL(APPLET(sendmail, BB_DIR_USR_SBIN, BB_SUID_DROP))
-IF_SEQ(APPLET_NOFORK(seq, seq, BB_DIR_USR_BIN, BB_SUID_DROP, seq))
-IF_SESTATUS(APPLET(sestatus, BB_DIR_USR_SBIN, BB_SUID_DROP))
-IF_SETARCH(APPLET(setarch, BB_DIR_BIN, BB_SUID_DROP))
-IF_SETCONSOLE(APPLET(setconsole, BB_DIR_SBIN, BB_SUID_DROP))
-IF_SETENFORCE(APPLET(setenforce, BB_DIR_USR_SBIN, BB_SUID_DROP))
-IF_SETFILES(APPLET(setfiles, BB_DIR_SBIN, BB_SUID_DROP))
-IF_SETFONT(APPLET(setfont, BB_DIR_USR_SBIN, BB_SUID_DROP))
-IF_SETKEYCODES(APPLET(setkeycodes, BB_DIR_USR_BIN, BB_SUID_DROP))
-IF_SETLOGCONS(APPLET(setlogcons, BB_DIR_USR_SBIN, BB_SUID_DROP))
-IF_SETSEBOOL(APPLET(setsebool, BB_DIR_USR_SBIN, BB_SUID_DROP))
-IF_SETSID(APPLET(setsid, BB_DIR_USR_BIN, BB_SUID_DROP))
-IF_SETUIDGID(APPLET_ODDNAME(setuidgid, chpst, BB_DIR_USR_BIN, BB_SUID_DROP, setuidgid))
-IF_SHA1SUM(APPLET_NOEXEC(sha1sum, md5_sha1_sum, BB_DIR_USR_BIN, BB_SUID_DROP, sha1sum))
-IF_SHA3SUM(APPLET_NOEXEC(sha3sum, md5_sha1_sum, BB_DIR_USR_BIN, BB_SUID_DROP, sha3sum))
-IF_SHA256SUM(APPLET_NOEXEC(sha256sum, md5_sha1_sum, BB_DIR_USR_BIN, BB_SUID_DROP, sha256sum))
-IF_SHA512SUM(APPLET_NOEXEC(sha512sum, md5_sha1_sum, BB_DIR_USR_BIN, BB_SUID_DROP, sha512sum))
-IF_SHOWKEY(APPLET(showkey, BB_DIR_USR_BIN, BB_SUID_DROP))
-IF_SLATTACH(APPLET(slattach, BB_DIR_SBIN, BB_SUID_DROP))
-/* Do not make this applet NOFORK. It breaks ^C-ing of pauses in shells: */
-IF_SLEEP(APPLET(sleep, BB_DIR_BIN, BB_SUID_DROP))
-IF_SOFTLIMIT(APPLET_ODDNAME(softlimit, chpst, BB_DIR_USR_BIN, BB_SUID_DROP, softlimit))
-IF_SORT(APPLET_NOEXEC(sort, sort, BB_DIR_USR_BIN, BB_SUID_DROP, sort))
-IF_SPLIT(APPLET(split, BB_DIR_USR_BIN, BB_SUID_DROP))
-IF_START_STOP_DAEMON(APPLET_ODDNAME(start-stop-daemon, start_stop_daemon, BB_DIR_SBIN, BB_SUID_DROP, start_stop_daemon))
-IF_STAT(APPLET(stat, BB_DIR_BIN, BB_SUID_DROP))
-IF_STRINGS(APPLET(strings, BB_DIR_USR_BIN, BB_SUID_DROP))
-IF_STTY(APPLET(stty, BB_DIR_BIN, BB_SUID_DROP))
-/* Needs to be run by root or be suid root - needs to change uid and gid: */
-IF_SU(APPLET(su, BB_DIR_BIN, BB_SUID_REQUIRE))
-IF_SULOGIN(APPLET(sulogin, BB_DIR_SBIN, BB_SUID_DROP))
-IF_SUM(APPLET(sum, BB_DIR_USR_BIN, BB_SUID_DROP))
-IF_SV(APPLET(sv, BB_DIR_USR_BIN, BB_SUID_DROP))
-IF_SVLOGD(APPLET(svlogd, BB_DIR_USR_SBIN, BB_SUID_DROP))
-IF_SWAPONOFF(APPLET_ODDNAME(swapoff, swap_on_off, BB_DIR_SBIN, BB_SUID_DROP, swapoff))
-IF_SWAPONOFF(APPLET_ODDNAME(swapon, swap_on_off, BB_DIR_SBIN, BB_SUID_DROP, swapon))
-IF_SWITCH_ROOT(APPLET(switch_root, BB_DIR_SBIN, BB_SUID_DROP))
-IF_SYNC(APPLET_NOFORK(sync, sync, BB_DIR_BIN, BB_SUID_DROP, sync))
-IF_BB_SYSCTL(APPLET(sysctl, BB_DIR_SBIN, BB_SUID_DROP))
-IF_SYSLOGD(APPLET(syslogd, BB_DIR_SBIN, BB_SUID_DROP))
-IF_TAC(APPLET_NOEXEC(tac, tac, BB_DIR_USR_BIN, BB_SUID_DROP, tac))
-IF_TAIL(APPLET(tail, BB_DIR_USR_BIN, BB_SUID_DROP))
-IF_TAR(APPLET(tar, BB_DIR_BIN, BB_SUID_DROP))
-IF_TASKSET(APPLET(taskset, BB_DIR_USR_BIN, BB_SUID_DROP))
-/* IF_TC(APPLET(tc, BB_DIR_SBIN, BB_SUID_DROP)) */
-IF_TCPSVD(APPLET_ODDNAME(tcpsvd, tcpudpsvd, BB_DIR_USR_BIN, BB_SUID_DROP, tcpsvd))
-IF_TEE(APPLET(tee, BB_DIR_USR_BIN, BB_SUID_DROP))
-IF_TELNET(APPLET(telnet, BB_DIR_USR_BIN, BB_SUID_DROP))
-IF_TELNETD(APPLET(telnetd, BB_DIR_USR_SBIN, BB_SUID_DROP))
-IF_TEST(APPLET_NOFORK(test, test, BB_DIR_USR_BIN, BB_SUID_DROP, test))
-#if ENABLE_FEATURE_TFTP_GET || ENABLE_FEATURE_TFTP_PUT
-IF_TFTP(APPLET(tftp, BB_DIR_USR_BIN, BB_SUID_DROP))
-IF_TFTPD(APPLET(tftpd, BB_DIR_USR_SBIN, BB_SUID_DROP))
-#endif
-IF_TIME(APPLET(time, BB_DIR_USR_BIN, BB_SUID_DROP))
-IF_TIMEOUT(APPLET(timeout, BB_DIR_USR_BIN, BB_SUID_DROP))
-IF_TOP(APPLET(top, BB_DIR_USR_BIN, BB_SUID_DROP))
-IF_TR(APPLET(tr, BB_DIR_USR_BIN, BB_SUID_DROP))
-/* Needs socket(AF_INET, SOCK_RAW, IPPROTO_ICMP), therefore BB_SUID_MAYBE: */
-IF_TRACEROUTE(APPLET(traceroute, BB_DIR_USR_BIN, BB_SUID_MAYBE))
-IF_TRACEROUTE6(APPLET(traceroute6, BB_DIR_USR_BIN, BB_SUID_MAYBE))
-IF_TRUE(APPLET_NOFORK(true, true, BB_DIR_BIN, BB_SUID_DROP, true))
-IF_TTY(APPLET(tty, BB_DIR_USR_BIN, BB_SUID_DROP))
-IF_TTYSIZE(APPLET(ttysize, BB_DIR_USR_BIN, BB_SUID_DROP))
-IF_TUNCTL(APPLET(tunctl, BB_DIR_SBIN, BB_SUID_DROP))
-IF_TUNE2FS(APPLET(tune2fs, BB_DIR_SBIN, BB_SUID_DROP))
-IF_UDHCPC(APPLET(udhcpc, BB_DIR_SBIN, BB_SUID_DROP))
-IF_UDHCPD(APPLET(udhcpd, BB_DIR_USR_SBIN, BB_SUID_DROP))
-IF_UDPSVD(APPLET_ODDNAME(udpsvd, tcpudpsvd, BB_DIR_USR_BIN, BB_SUID_DROP, udpsvd))
-IF_UMOUNT(APPLET(umount, BB_DIR_BIN, BB_SUID_DROP))
-IF_UNAME(APPLET(uname, BB_DIR_BIN, BB_SUID_DROP))
-IF_UNCOMPRESS(APPLET(uncompress, BB_DIR_BIN, BB_SUID_DROP))
-IF_UNEXPAND(APPLET_ODDNAME(unexpand, expand, BB_DIR_USR_BIN, BB_SUID_DROP, unexpand))
-IF_UNIQ(APPLET(uniq, BB_DIR_USR_BIN, BB_SUID_DROP))
-IF_UNIX2DOS(APPLET_NOEXEC(unix2dos, dos2unix, BB_DIR_USR_BIN, BB_SUID_DROP, unix2dos))
-IF_UNXZ(APPLET(unxz, BB_DIR_USR_BIN, BB_SUID_DROP))
-IF_UNLZMA(APPLET(unlzma, BB_DIR_USR_BIN, BB_SUID_DROP))
-IF_LZOP(APPLET_ODDNAME(unlzop, lzop, BB_DIR_USR_BIN, BB_SUID_DROP, unlzop))
-IF_UNZIP(APPLET(unzip, BB_DIR_USR_BIN, BB_SUID_DROP))
-IF_UPTIME(APPLET(uptime, BB_DIR_USR_BIN, BB_SUID_DROP))
-IF_USLEEP(APPLET_NOFORK(usleep, usleep, BB_DIR_BIN, BB_SUID_DROP, usleep))
-IF_UUDECODE(APPLET(uudecode, BB_DIR_USR_BIN, BB_SUID_DROP))
-IF_UUENCODE(APPLET(uuencode, BB_DIR_USR_BIN, BB_SUID_DROP))
-IF_VCONFIG(APPLET(vconfig, BB_DIR_SBIN, BB_SUID_DROP))
-/* Needs to be run by root or be suid root - needs to change uid and gid: */
-IF_VLOCK(APPLET(vlock, BB_DIR_USR_BIN, BB_SUID_REQUIRE))
-IF_VOLNAME(APPLET(volname, BB_DIR_USR_BIN, BB_SUID_DROP))
-/* Needs to be run by root or be suid root - needs to write to /dev/TTY: */
-IF_WALL(APPLET(wall, BB_DIR_USR_BIN, BB_SUID_REQUIRE))
-IF_WATCH(APPLET(watch, BB_DIR_BIN, BB_SUID_DROP))
-IF_WATCHDOG(APPLET(watchdog, BB_DIR_SBIN, BB_SUID_DROP))
-IF_WC(APPLET(wc, BB_DIR_USR_BIN, BB_SUID_DROP))
-IF_WGET(APPLET(wget, BB_DIR_USR_BIN, BB_SUID_DROP))
-IF_WHICH(APPLET(which, BB_DIR_USR_BIN, BB_SUID_DROP))
-IF_WHOAMI(APPLET_NOFORK(whoami, whoami, BB_DIR_USR_BIN, BB_SUID_DROP, whoami))
-IF_UNXZ(APPLET_ODDNAME(xzcat, unxz, BB_DIR_USR_BIN, BB_SUID_DROP, xzcat))
-IF_XZ(APPLET_ODDNAME(xz, unxz, BB_DIR_USR_BIN, BB_SUID_DROP, xz))
-IF_YES(APPLET_NOFORK(yes, yes, BB_DIR_USR_BIN, BB_SUID_DROP, yes))
-IF_GUNZIP(APPLET_ODDNAME(zcat, gunzip, BB_DIR_BIN, BB_SUID_DROP, zcat))
-IF_ZCIP(APPLET(zcip, BB_DIR_SBIN, BB_SUID_DROP))
-
-#if !defined(PROTOTYPES) && !defined(NAME_MAIN_CNAME) && !defined(MAKE_USAGE)
-};
-#endif
-
-#undef APPLET
-#undef APPLET_ODDNAME
-#undef APPLET_NOEXEC
-#undef APPLET_NOFORK
diff --git a/include-minimal/autoconf.h b/include-minimal/autoconf.h
deleted file mode 100644
index 498fb4c..0000000
--- a/include-minimal/autoconf.h
+++ b/dev/null
@@ -1,3678 +0,0 @@
-/*
- * Automatically generated C config: don't edit
- * Busybox version: 1.21.0-jb
- */
-#define AUTOCONF_TIMESTAMP "2013-04-17 15:58 -0700"
-
-#define CONFIG_HAVE_DOT_CONFIG 1
-#define ENABLE_HAVE_DOT_CONFIG 1
-#define IF_HAVE_DOT_CONFIG(...) __VA_ARGS__
-#define IF_NOT_HAVE_DOT_CONFIG(...)
-
-/*
- * Busybox Settings
- */
-
-/*
- * General Configuration
- */
-#undef CONFIG_DESKTOP
-#define ENABLE_DESKTOP 0
-#define IF_DESKTOP(...)
-#define IF_NOT_DESKTOP(...) __VA_ARGS__
-#undef CONFIG_EXTRA_COMPAT
-#define ENABLE_EXTRA_COMPAT 0
-#define IF_EXTRA_COMPAT(...)
-#define IF_NOT_EXTRA_COMPAT(...) __VA_ARGS__
-#undef CONFIG_INCLUDE_SUSv2
-#define ENABLE_INCLUDE_SUSv2 0
-#define IF_INCLUDE_SUSv2(...)
-#define IF_NOT_INCLUDE_SUSv2(...) __VA_ARGS__
-#undef CONFIG_USE_PORTABLE_CODE
-#define ENABLE_USE_PORTABLE_CODE 0
-#define IF_USE_PORTABLE_CODE(...)
-#define IF_NOT_USE_PORTABLE_CODE(...) __VA_ARGS__
-#define CONFIG_PLATFORM_LINUX 1
-#define ENABLE_PLATFORM_LINUX 1
-#define IF_PLATFORM_LINUX(...) __VA_ARGS__
-#define IF_NOT_PLATFORM_LINUX(...)
-#define CONFIG_FEATURE_BUFFERS_USE_MALLOC 1
-#define ENABLE_FEATURE_BUFFERS_USE_MALLOC 1
-#define IF_FEATURE_BUFFERS_USE_MALLOC(...) __VA_ARGS__
-#define IF_NOT_FEATURE_BUFFERS_USE_MALLOC(...)
-#undef CONFIG_FEATURE_BUFFERS_GO_ON_STACK
-#define ENABLE_FEATURE_BUFFERS_GO_ON_STACK 0
-#define IF_FEATURE_BUFFERS_GO_ON_STACK(...)
-#define IF_NOT_FEATURE_BUFFERS_GO_ON_STACK(...) __VA_ARGS__
-#undef CONFIG_FEATURE_BUFFERS_GO_IN_BSS
-#define ENABLE_FEATURE_BUFFERS_GO_IN_BSS 0
-#define IF_FEATURE_BUFFERS_GO_IN_BSS(...)
-#define IF_NOT_FEATURE_BUFFERS_GO_IN_BSS(...) __VA_ARGS__
-#define CONFIG_SHOW_USAGE 1
-#define ENABLE_SHOW_USAGE 1
-#define IF_SHOW_USAGE(...) __VA_ARGS__
-#define IF_NOT_SHOW_USAGE(...)
-#define CONFIG_FEATURE_VERBOSE_USAGE 1
-#define ENABLE_FEATURE_VERBOSE_USAGE 1
-#define IF_FEATURE_VERBOSE_USAGE(...) __VA_ARGS__
-#define IF_NOT_FEATURE_VERBOSE_USAGE(...)
-#define CONFIG_FEATURE_COMPRESS_USAGE 1
-#define ENABLE_FEATURE_COMPRESS_USAGE 1
-#define IF_FEATURE_COMPRESS_USAGE(...) __VA_ARGS__
-#define IF_NOT_FEATURE_COMPRESS_USAGE(...)
-#undef CONFIG_FEATURE_INSTALLER
-#define ENABLE_FEATURE_INSTALLER 0
-#define IF_FEATURE_INSTALLER(...)
-#define IF_NOT_FEATURE_INSTALLER(...) __VA_ARGS__
-#define CONFIG_INSTALL_NO_USR 1
-#define ENABLE_INSTALL_NO_USR 1
-#define IF_INSTALL_NO_USR(...) __VA_ARGS__
-#define IF_NOT_INSTALL_NO_USR(...)
-#undef CONFIG_LOCALE_SUPPORT
-#define ENABLE_LOCALE_SUPPORT 0
-#define IF_LOCALE_SUPPORT(...)
-#define IF_NOT_LOCALE_SUPPORT(...) __VA_ARGS__
-#define CONFIG_UNICODE_SUPPORT 1
-#define ENABLE_UNICODE_SUPPORT 1
-#define IF_UNICODE_SUPPORT(...) __VA_ARGS__
-#define IF_NOT_UNICODE_SUPPORT(...)
-#undef CONFIG_UNICODE_USING_LOCALE
-#define ENABLE_UNICODE_USING_LOCALE 0
-#define IF_UNICODE_USING_LOCALE(...)
-#define IF_NOT_UNICODE_USING_LOCALE(...) __VA_ARGS__
-#undef CONFIG_FEATURE_CHECK_UNICODE_IN_ENV
-#define ENABLE_FEATURE_CHECK_UNICODE_IN_ENV 0
-#define IF_FEATURE_CHECK_UNICODE_IN_ENV(...)
-#define IF_NOT_FEATURE_CHECK_UNICODE_IN_ENV(...) __VA_ARGS__
-#define CONFIG_SUBST_WCHAR 63
-#define ENABLE_SUBST_WCHAR 1
-#define IF_SUBST_WCHAR(...) __VA_ARGS__
-#define IF_NOT_SUBST_WCHAR(...)
-#define CONFIG_LAST_SUPPORTED_WCHAR 0
-#define ENABLE_LAST_SUPPORTED_WCHAR 1
-#define IF_LAST_SUPPORTED_WCHAR(...) __VA_ARGS__
-#define IF_NOT_LAST_SUPPORTED_WCHAR(...)
-#undef CONFIG_UNICODE_COMBINING_WCHARS
-#define ENABLE_UNICODE_COMBINING_WCHARS 0
-#define IF_UNICODE_COMBINING_WCHARS(...)
-#define IF_NOT_UNICODE_COMBINING_WCHARS(...) __VA_ARGS__
-#define CONFIG_UNICODE_WIDE_WCHARS 1
-#define ENABLE_UNICODE_WIDE_WCHARS 1
-#define IF_UNICODE_WIDE_WCHARS(...) __VA_ARGS__
-#define IF_NOT_UNICODE_WIDE_WCHARS(...)
-#undef CONFIG_UNICODE_BIDI_SUPPORT
-#define ENABLE_UNICODE_BIDI_SUPPORT 0
-#define IF_UNICODE_BIDI_SUPPORT(...)
-#define IF_NOT_UNICODE_BIDI_SUPPORT(...) __VA_ARGS__
-#undef CONFIG_UNICODE_NEUTRAL_TABLE
-#define ENABLE_UNICODE_NEUTRAL_TABLE 0
-#define IF_UNICODE_NEUTRAL_TABLE(...)
-#define IF_NOT_UNICODE_NEUTRAL_TABLE(...) __VA_ARGS__
-#define CONFIG_UNICODE_PRESERVE_BROKEN 1
-#define ENABLE_UNICODE_PRESERVE_BROKEN 1
-#define IF_UNICODE_PRESERVE_BROKEN(...) __VA_ARGS__
-#define IF_NOT_UNICODE_PRESERVE_BROKEN(...)
-#define CONFIG_LONG_OPTS 1
-#define ENABLE_LONG_OPTS 1
-#define IF_LONG_OPTS(...) __VA_ARGS__
-#define IF_NOT_LONG_OPTS(...)
-#undef CONFIG_FEATURE_DEVPTS
-#define ENABLE_FEATURE_DEVPTS 0
-#define IF_FEATURE_DEVPTS(...)
-#define IF_NOT_FEATURE_DEVPTS(...) __VA_ARGS__
-#undef CONFIG_FEATURE_CLEAN_UP
-#define ENABLE_FEATURE_CLEAN_UP 0
-#define IF_FEATURE_CLEAN_UP(...)
-#define IF_NOT_FEATURE_CLEAN_UP(...) __VA_ARGS__
-#undef CONFIG_FEATURE_UTMP
-#define ENABLE_FEATURE_UTMP 0
-#define IF_FEATURE_UTMP(...)
-#define IF_NOT_FEATURE_UTMP(...) __VA_ARGS__
-#undef CONFIG_FEATURE_WTMP
-#define ENABLE_FEATURE_WTMP 0
-#define IF_FEATURE_WTMP(...)
-#define IF_NOT_FEATURE_WTMP(...) __VA_ARGS__
-#undef CONFIG_FEATURE_PIDFILE
-#define ENABLE_FEATURE_PIDFILE 0
-#define IF_FEATURE_PIDFILE(...)
-#define IF_NOT_FEATURE_PIDFILE(...) __VA_ARGS__
-#define CONFIG_PID_FILE_PATH ""
-#define ENABLE_PID_FILE_PATH 1
-#define IF_PID_FILE_PATH(...) __VA_ARGS__
-#define IF_NOT_PID_FILE_PATH(...)
-#define CONFIG_FEATURE_SUID 1
-#define ENABLE_FEATURE_SUID 1
-#define IF_FEATURE_SUID(...) __VA_ARGS__
-#define IF_NOT_FEATURE_SUID(...)
-#undef CONFIG_FEATURE_SUID_CONFIG
-#define ENABLE_FEATURE_SUID_CONFIG 0
-#define IF_FEATURE_SUID_CONFIG(...)
-#define IF_NOT_FEATURE_SUID_CONFIG(...) __VA_ARGS__
-#undef CONFIG_FEATURE_SUID_CONFIG_QUIET
-#define ENABLE_FEATURE_SUID_CONFIG_QUIET 0
-#define IF_FEATURE_SUID_CONFIG_QUIET(...)
-#define IF_NOT_FEATURE_SUID_CONFIG_QUIET(...) __VA_ARGS__
-#undef CONFIG_SELINUX
-#define ENABLE_SELINUX 0
-#define IF_SELINUX(...)
-#define IF_NOT_SELINUX(...) __VA_ARGS__
-#undef CONFIG_FEATURE_PREFER_APPLETS
-#define ENABLE_FEATURE_PREFER_APPLETS 0
-#define IF_FEATURE_PREFER_APPLETS(...)
-#define IF_NOT_FEATURE_PREFER_APPLETS(...) __VA_ARGS__
-#define CONFIG_BUSYBOX_EXEC_PATH "/proc/self/exe"
-#define ENABLE_BUSYBOX_EXEC_PATH 1
-#define IF_BUSYBOX_EXEC_PATH(...) __VA_ARGS__
-#define IF_NOT_BUSYBOX_EXEC_PATH(...)
-#undef CONFIG_FEATURE_SYSLOG
-#define ENABLE_FEATURE_SYSLOG 0
-#define IF_FEATURE_SYSLOG(...)
-#define IF_NOT_FEATURE_SYSLOG(...) __VA_ARGS__
-#undef CONFIG_FEATURE_HAVE_RPC
-#define ENABLE_FEATURE_HAVE_RPC 0
-#define IF_FEATURE_HAVE_RPC(...)
-#define IF_NOT_FEATURE_HAVE_RPC(...) __VA_ARGS__
-
-/*
- * Build Options
- */
-#undef CONFIG_STATIC
-#define ENABLE_STATIC 0
-#define IF_STATIC(...)
-#define IF_NOT_STATIC(...) __VA_ARGS__
-#undef CONFIG_PIE
-#define ENABLE_PIE 0
-#define IF_PIE(...)
-#define IF_NOT_PIE(...) __VA_ARGS__
-#undef CONFIG_NOMMU
-#define ENABLE_NOMMU 0
-#define IF_NOMMU(...)
-#define IF_NOT_NOMMU(...) __VA_ARGS__
-#undef CONFIG_BUILD_LIBBUSYBOX
-#define ENABLE_BUILD_LIBBUSYBOX 0
-#define IF_BUILD_LIBBUSYBOX(...)
-#define IF_NOT_BUILD_LIBBUSYBOX(...) __VA_ARGS__
-#undef CONFIG_FEATURE_INDIVIDUAL
-#define ENABLE_FEATURE_INDIVIDUAL 0
-#define IF_FEATURE_INDIVIDUAL(...)
-#define IF_NOT_FEATURE_INDIVIDUAL(...) __VA_ARGS__
-#undef CONFIG_FEATURE_SHARED_BUSYBOX
-#define ENABLE_FEATURE_SHARED_BUSYBOX 0
-#define IF_FEATURE_SHARED_BUSYBOX(...)
-#define IF_NOT_FEATURE_SHARED_BUSYBOX(...) __VA_ARGS__
-#define CONFIG_LFS 1
-#define ENABLE_LFS 1
-#define IF_LFS(...) __VA_ARGS__
-#define IF_NOT_LFS(...)
-#define CONFIG_CROSS_COMPILER_PREFIX "arm-eabi-"
-#define ENABLE_CROSS_COMPILER_PREFIX 1
-#define IF_CROSS_COMPILER_PREFIX(...) __VA_ARGS__
-#define IF_NOT_CROSS_COMPILER_PREFIX(...)
-#define CONFIG_SYSROOT ""
-#define ENABLE_SYSROOT 1
-#define IF_SYSROOT(...) __VA_ARGS__
-#define IF_NOT_SYSROOT(...)
-#define CONFIG_EXTRA_CFLAGS "-Os"
-#define ENABLE_EXTRA_CFLAGS 1
-#define IF_EXTRA_CFLAGS(...) __VA_ARGS__
-#define IF_NOT_EXTRA_CFLAGS(...)
-#define CONFIG_EXTRA_LDFLAGS ""
-#define ENABLE_EXTRA_LDFLAGS 1
-#define IF_EXTRA_LDFLAGS(...) __VA_ARGS__
-#define IF_NOT_EXTRA_LDFLAGS(...)
-#define CONFIG_EXTRA_LDLIBS ""
-#define ENABLE_EXTRA_LDLIBS 1
-#define IF_EXTRA_LDLIBS(...) __VA_ARGS__
-#define IF_NOT_EXTRA_LDLIBS(...)
-
-/*
- * Debugging Options
- */
-#undef CONFIG_DEBUG
-#define ENABLE_DEBUG 0
-#define IF_DEBUG(...)
-#define IF_NOT_DEBUG(...) __VA_ARGS__
-#undef CONFIG_DEBUG_PESSIMIZE
-#define ENABLE_DEBUG_PESSIMIZE 0
-#define IF_DEBUG_PESSIMIZE(...)
-#define IF_NOT_DEBUG_PESSIMIZE(...) __VA_ARGS__
-#undef CONFIG_WERROR
-#define ENABLE_WERROR 0
-#define IF_WERROR(...)
-#define IF_NOT_WERROR(...) __VA_ARGS__
-#define CONFIG_NO_DEBUG_LIB 1
-#define ENABLE_NO_DEBUG_LIB 1
-#define IF_NO_DEBUG_LIB(...) __VA_ARGS__
-#define IF_NOT_NO_DEBUG_LIB(...)
-#undef CONFIG_DMALLOC
-#define ENABLE_DMALLOC 0
-#define IF_DMALLOC(...)
-#define IF_NOT_DMALLOC(...) __VA_ARGS__
-#undef CONFIG_EFENCE
-#define ENABLE_EFENCE 0
-#define IF_EFENCE(...)
-#define IF_NOT_EFENCE(...) __VA_ARGS__
-
-/*
- * Installation Options ("make install" behavior)
- */
-#define CONFIG_INSTALL_APPLET_SYMLINKS 1
-#define ENABLE_INSTALL_APPLET_SYMLINKS 1
-#define IF_INSTALL_APPLET_SYMLINKS(...) __VA_ARGS__
-#define IF_NOT_INSTALL_APPLET_SYMLINKS(...)
-#undef CONFIG_INSTALL_APPLET_HARDLINKS
-#define ENABLE_INSTALL_APPLET_HARDLINKS 0
-#define IF_INSTALL_APPLET_HARDLINKS(...)
-#define IF_NOT_INSTALL_APPLET_HARDLINKS(...) __VA_ARGS__
-#undef CONFIG_INSTALL_APPLET_SCRIPT_WRAPPERS
-#define ENABLE_INSTALL_APPLET_SCRIPT_WRAPPERS 0
-#define IF_INSTALL_APPLET_SCRIPT_WRAPPERS(...)
-#define IF_NOT_INSTALL_APPLET_SCRIPT_WRAPPERS(...) __VA_ARGS__
-#undef CONFIG_INSTALL_APPLET_DONT
-#define ENABLE_INSTALL_APPLET_DONT 0
-#define IF_INSTALL_APPLET_DONT(...)
-#define IF_NOT_INSTALL_APPLET_DONT(...) __VA_ARGS__
-#undef CONFIG_INSTALL_SH_APPLET_SYMLINK
-#define ENABLE_INSTALL_SH_APPLET_SYMLINK 0
-#define IF_INSTALL_SH_APPLET_SYMLINK(...)
-#define IF_NOT_INSTALL_SH_APPLET_SYMLINK(...) __VA_ARGS__
-#undef CONFIG_INSTALL_SH_APPLET_HARDLINK
-#define ENABLE_INSTALL_SH_APPLET_HARDLINK 0
-#define IF_INSTALL_SH_APPLET_HARDLINK(...)
-#define IF_NOT_INSTALL_SH_APPLET_HARDLINK(...) __VA_ARGS__
-#undef CONFIG_INSTALL_SH_APPLET_SCRIPT_WRAPPER
-#define ENABLE_INSTALL_SH_APPLET_SCRIPT_WRAPPER 0
-#define IF_INSTALL_SH_APPLET_SCRIPT_WRAPPER(...)
-#define IF_NOT_INSTALL_SH_APPLET_SCRIPT_WRAPPER(...) __VA_ARGS__
-#define CONFIG_PREFIX "/system/xbin/bb"
-#define ENABLE_PREFIX 1
-#define IF_PREFIX(...) __VA_ARGS__
-#define IF_NOT_PREFIX(...)
-
-/*
- * Busybox Library Tuning
- */
-#undef CONFIG_FEATURE_SYSTEMD
-#define ENABLE_FEATURE_SYSTEMD 0
-#define IF_FEATURE_SYSTEMD(...)
-#define IF_NOT_FEATURE_SYSTEMD(...) __VA_ARGS__
-#undef CONFIG_FEATURE_RTMINMAX
-#define ENABLE_FEATURE_RTMINMAX 0
-#define IF_FEATURE_RTMINMAX(...)
-#define IF_NOT_FEATURE_RTMINMAX(...) __VA_ARGS__
-#define CONFIG_PASSWORD_MINLEN 6
-#define ENABLE_PASSWORD_MINLEN 1
-#define IF_PASSWORD_MINLEN(...) __VA_ARGS__
-#define IF_NOT_PASSWORD_MINLEN(...)
-#define CONFIG_MD5_SMALL 0
-#define ENABLE_MD5_SMALL 1
-#define IF_MD5_SMALL(...) __VA_ARGS__
-#define IF_NOT_MD5_SMALL(...)
-#define CONFIG_SHA3_SMALL 1
-#define ENABLE_SHA3_SMALL 1
-#define IF_SHA3_SMALL(...) __VA_ARGS__
-#define IF_NOT_SHA3_SMALL(...)
-#define CONFIG_FEATURE_FAST_TOP 1
-#define ENABLE_FEATURE_FAST_TOP 1
-#define IF_FEATURE_FAST_TOP(...) __VA_ARGS__
-#define IF_NOT_FEATURE_FAST_TOP(...)
-#undef CONFIG_FEATURE_ETC_NETWORKS
-#define ENABLE_FEATURE_ETC_NETWORKS 0
-#define IF_FEATURE_ETC_NETWORKS(...)
-#define IF_NOT_FEATURE_ETC_NETWORKS(...) __VA_ARGS__
-#define CONFIG_FEATURE_USE_TERMIOS 1
-#define ENABLE_FEATURE_USE_TERMIOS 1
-#define IF_FEATURE_USE_TERMIOS(...) __VA_ARGS__
-#define IF_NOT_FEATURE_USE_TERMIOS(...)
-#define CONFIG_FEATURE_EDITING 1
-#define ENABLE_FEATURE_EDITING 1
-#define IF_FEATURE_EDITING(...) __VA_ARGS__
-#define IF_NOT_FEATURE_EDITING(...)
-#define CONFIG_FEATURE_EDITING_MAX_LEN 1024
-#define ENABLE_FEATURE_EDITING_MAX_LEN 1
-#define IF_FEATURE_EDITING_MAX_LEN(...) __VA_ARGS__
-#define IF_NOT_FEATURE_EDITING_MAX_LEN(...)
-#define CONFIG_FEATURE_EDITING_VI 1
-#define ENABLE_FEATURE_EDITING_VI 1
-#define IF_FEATURE_EDITING_VI(...) __VA_ARGS__
-#define IF_NOT_FEATURE_EDITING_VI(...)
-#define CONFIG_FEATURE_EDITING_HISTORY 256
-#define ENABLE_FEATURE_EDITING_HISTORY 1
-#define IF_FEATURE_EDITING_HISTORY(...) __VA_ARGS__
-#define IF_NOT_FEATURE_EDITING_HISTORY(...)
-#define CONFIG_FEATURE_EDITING_SAVEHISTORY 1
-#define ENABLE_FEATURE_EDITING_SAVEHISTORY 1
-#define IF_FEATURE_EDITING_SAVEHISTORY(...) __VA_ARGS__
-#define IF_NOT_FEATURE_EDITING_SAVEHISTORY(...)
-#define CONFIG_FEATURE_EDITING_SAVE_ON_EXIT 1
-#define ENABLE_FEATURE_EDITING_SAVE_ON_EXIT 1
-#define IF_FEATURE_EDITING_SAVE_ON_EXIT(...) __VA_ARGS__
-#define IF_NOT_FEATURE_EDITING_SAVE_ON_EXIT(...)
-#define CONFIG_FEATURE_REVERSE_SEARCH 1
-#define ENABLE_FEATURE_REVERSE_SEARCH 1
-#define IF_FEATURE_REVERSE_SEARCH(...) __VA_ARGS__
-#define IF_NOT_FEATURE_REVERSE_SEARCH(...)
-#define CONFIG_FEATURE_TAB_COMPLETION 1
-#define ENABLE_FEATURE_TAB_COMPLETION 1
-#define IF_FEATURE_TAB_COMPLETION(...) __VA_ARGS__
-#define IF_NOT_FEATURE_TAB_COMPLETION(...)
-#undef CONFIG_FEATURE_USERNAME_COMPLETION
-#define ENABLE_FEATURE_USERNAME_COMPLETION 0
-#define IF_FEATURE_USERNAME_COMPLETION(...)
-#define IF_NOT_FEATURE_USERNAME_COMPLETION(...) __VA_ARGS__
-#define CONFIG_FEATURE_EDITING_FANCY_PROMPT 1
-#define ENABLE_FEATURE_EDITING_FANCY_PROMPT 1
-#define IF_FEATURE_EDITING_FANCY_PROMPT(...) __VA_ARGS__
-#define IF_NOT_FEATURE_EDITING_FANCY_PROMPT(...)
-#undef CONFIG_FEATURE_EDITING_ASK_TERMINAL
-#define ENABLE_FEATURE_EDITING_ASK_TERMINAL 0
-#define IF_FEATURE_EDITING_ASK_TERMINAL(...)
-#define IF_NOT_FEATURE_EDITING_ASK_TERMINAL(...) __VA_ARGS__
-#define CONFIG_FEATURE_NON_POSIX_CP 1
-#define ENABLE_FEATURE_NON_POSIX_CP 1
-#define IF_FEATURE_NON_POSIX_CP(...) __VA_ARGS__
-#define IF_NOT_FEATURE_NON_POSIX_CP(...)
-#undef CONFIG_FEATURE_VERBOSE_CP_MESSAGE
-#define ENABLE_FEATURE_VERBOSE_CP_MESSAGE 0
-#define IF_FEATURE_VERBOSE_CP_MESSAGE(...)
-#define IF_NOT_FEATURE_VERBOSE_CP_MESSAGE(...) __VA_ARGS__
-#define CONFIG_FEATURE_COPYBUF_KB 4
-#define ENABLE_FEATURE_COPYBUF_KB 1
-#define IF_FEATURE_COPYBUF_KB(...) __VA_ARGS__
-#define IF_NOT_FEATURE_COPYBUF_KB(...)
-#define CONFIG_FEATURE_SKIP_ROOTFS 1
-#define ENABLE_FEATURE_SKIP_ROOTFS 1
-#define IF_FEATURE_SKIP_ROOTFS(...) __VA_ARGS__
-#define IF_NOT_FEATURE_SKIP_ROOTFS(...)
-#define CONFIG_MONOTONIC_SYSCALL 1
-#define ENABLE_MONOTONIC_SYSCALL 1
-#define IF_MONOTONIC_SYSCALL(...) __VA_ARGS__
-#define IF_NOT_MONOTONIC_SYSCALL(...)
-#define CONFIG_IOCTL_HEX2STR_ERROR 1
-#define ENABLE_IOCTL_HEX2STR_ERROR 1
-#define IF_IOCTL_HEX2STR_ERROR(...) __VA_ARGS__
-#define IF_NOT_IOCTL_HEX2STR_ERROR(...)
-#undef CONFIG_FEATURE_HWIB
-#define ENABLE_FEATURE_HWIB 0
-#define IF_FEATURE_HWIB(...)
-#define IF_NOT_FEATURE_HWIB(...) __VA_ARGS__
-
-/*
- * Applets
- */
-
-/*
- * Archival Utilities
- */
-#undef CONFIG_FEATURE_SEAMLESS_XZ
-#define ENABLE_FEATURE_SEAMLESS_XZ 0
-#define IF_FEATURE_SEAMLESS_XZ(...)
-#define IF_NOT_FEATURE_SEAMLESS_XZ(...) __VA_ARGS__
-#undef CONFIG_FEATURE_SEAMLESS_LZMA
-#define ENABLE_FEATURE_SEAMLESS_LZMA 0
-#define IF_FEATURE_SEAMLESS_LZMA(...)
-#define IF_NOT_FEATURE_SEAMLESS_LZMA(...) __VA_ARGS__
-#define CONFIG_FEATURE_SEAMLESS_BZ2 1
-#define ENABLE_FEATURE_SEAMLESS_BZ2 1
-#define IF_FEATURE_SEAMLESS_BZ2(...) __VA_ARGS__
-#define IF_NOT_FEATURE_SEAMLESS_BZ2(...)
-#define CONFIG_FEATURE_SEAMLESS_GZ 1
-#define ENABLE_FEATURE_SEAMLESS_GZ 1
-#define IF_FEATURE_SEAMLESS_GZ(...) __VA_ARGS__
-#define IF_NOT_FEATURE_SEAMLESS_GZ(...)
-#undef CONFIG_FEATURE_SEAMLESS_Z
-#define ENABLE_FEATURE_SEAMLESS_Z 0
-#define IF_FEATURE_SEAMLESS_Z(...)
-#define IF_NOT_FEATURE_SEAMLESS_Z(...) __VA_ARGS__
-#undef CONFIG_AR
-#define ENABLE_AR 0
-#define IF_AR(...)
-#define IF_NOT_AR(...) __VA_ARGS__
-#undef CONFIG_FEATURE_AR_LONG_FILENAMES
-#define ENABLE_FEATURE_AR_LONG_FILENAMES 0
-#define IF_FEATURE_AR_LONG_FILENAMES(...)
-#define IF_NOT_FEATURE_AR_LONG_FILENAMES(...) __VA_ARGS__
-#undef CONFIG_FEATURE_AR_CREATE
-#define ENABLE_FEATURE_AR_CREATE 0
-#define IF_FEATURE_AR_CREATE(...)
-#define IF_NOT_FEATURE_AR_CREATE(...) __VA_ARGS__
-#define CONFIG_BUNZIP2 1
-#define ENABLE_BUNZIP2 1
-#define IF_BUNZIP2(...) __VA_ARGS__
-#define IF_NOT_BUNZIP2(...)
-#define CONFIG_BZIP2 1
-#define ENABLE_BZIP2 1
-#define IF_BZIP2(...) __VA_ARGS__
-#define IF_NOT_BZIP2(...)
-#define CONFIG_CPIO 1
-#define ENABLE_CPIO 1
-#define IF_CPIO(...) __VA_ARGS__
-#define IF_NOT_CPIO(...)
-#define CONFIG_FEATURE_CPIO_O 1
-#define ENABLE_FEATURE_CPIO_O 1
-#define IF_FEATURE_CPIO_O(...) __VA_ARGS__
-#define IF_NOT_FEATURE_CPIO_O(...)
-#undef CONFIG_FEATURE_CPIO_P
-#define ENABLE_FEATURE_CPIO_P 0
-#define IF_FEATURE_CPIO_P(...)
-#define IF_NOT_FEATURE_CPIO_P(...) __VA_ARGS__
-#undef CONFIG_DPKG
-#define ENABLE_DPKG 0
-#define IF_DPKG(...)
-#define IF_NOT_DPKG(...) __VA_ARGS__
-#undef CONFIG_DPKG_DEB
-#define ENABLE_DPKG_DEB 0
-#define IF_DPKG_DEB(...)
-#define IF_NOT_DPKG_DEB(...) __VA_ARGS__
-#undef CONFIG_FEATURE_DPKG_DEB_EXTRACT_ONLY
-#define ENABLE_FEATURE_DPKG_DEB_EXTRACT_ONLY 0
-#define IF_FEATURE_DPKG_DEB_EXTRACT_ONLY(...)
-#define IF_NOT_FEATURE_DPKG_DEB_EXTRACT_ONLY(...) __VA_ARGS__
-#define CONFIG_GUNZIP 1
-#define ENABLE_GUNZIP 1
-#define IF_GUNZIP(...) __VA_ARGS__
-#define IF_NOT_GUNZIP(...)
-#define CONFIG_GZIP 1
-#define ENABLE_GZIP 1
-#define IF_GZIP(...) __VA_ARGS__
-#define IF_NOT_GZIP(...)
-#define CONFIG_FEATURE_GZIP_LONG_OPTIONS 1
-#define ENABLE_FEATURE_GZIP_LONG_OPTIONS 1
-#define IF_FEATURE_GZIP_LONG_OPTIONS(...) __VA_ARGS__
-#define IF_NOT_FEATURE_GZIP_LONG_OPTIONS(...)
-#define CONFIG_GZIP_FAST 2
-#define ENABLE_GZIP_FAST 1
-#define IF_GZIP_FAST(...) __VA_ARGS__
-#define IF_NOT_GZIP_FAST(...)
-#define CONFIG_LZOP 1
-#define ENABLE_LZOP 1
-#define IF_LZOP(...) __VA_ARGS__
-#define IF_NOT_LZOP(...)
-#undef CONFIG_LZOP_COMPR_HIGH
-#define ENABLE_LZOP_COMPR_HIGH 0
-#define IF_LZOP_COMPR_HIGH(...)
-#define IF_NOT_LZOP_COMPR_HIGH(...) __VA_ARGS__
-#undef CONFIG_RPM2CPIO
-#define ENABLE_RPM2CPIO 0
-#define IF_RPM2CPIO(...)
-#define IF_NOT_RPM2CPIO(...) __VA_ARGS__
-#undef CONFIG_RPM
-#define ENABLE_RPM 0
-#define IF_RPM(...)
-#define IF_NOT_RPM(...) __VA_ARGS__
-#define CONFIG_TAR 1
-#define ENABLE_TAR 1
-#define IF_TAR(...) __VA_ARGS__
-#define IF_NOT_TAR(...)
-#define CONFIG_FEATURE_TAR_CREATE 1
-#define ENABLE_FEATURE_TAR_CREATE 1
-#define IF_FEATURE_TAR_CREATE(...) __VA_ARGS__
-#define IF_NOT_FEATURE_TAR_CREATE(...)
-#undef CONFIG_FEATURE_TAR_AUTODETECT
-#define ENABLE_FEATURE_TAR_AUTODETECT 0
-#define IF_FEATURE_TAR_AUTODETECT(...)
-#define IF_NOT_FEATURE_TAR_AUTODETECT(...) __VA_ARGS__
-#define CONFIG_FEATURE_TAR_FROM 1
-#define ENABLE_FEATURE_TAR_FROM 1
-#define IF_FEATURE_TAR_FROM(...) __VA_ARGS__
-#define IF_NOT_FEATURE_TAR_FROM(...)
-#undef CONFIG_FEATURE_TAR_OLDGNU_COMPATIBILITY
-#define ENABLE_FEATURE_TAR_OLDGNU_COMPATIBILITY 0
-#define IF_FEATURE_TAR_OLDGNU_COMPATIBILITY(...)
-#define IF_NOT_FEATURE_TAR_OLDGNU_COMPATIBILITY(...) __VA_ARGS__
-#undef CONFIG_FEATURE_TAR_OLDSUN_COMPATIBILITY
-#define ENABLE_FEATURE_TAR_OLDSUN_COMPATIBILITY 0
-#define IF_FEATURE_TAR_OLDSUN_COMPATIBILITY(...)
-#define IF_NOT_FEATURE_TAR_OLDSUN_COMPATIBILITY(...) __VA_ARGS__
-#define CONFIG_FEATURE_TAR_GNU_EXTENSIONS 1
-#define ENABLE_FEATURE_TAR_GNU_EXTENSIONS 1
-#define IF_FEATURE_TAR_GNU_EXTENSIONS(...) __VA_ARGS__
-#define IF_NOT_FEATURE_TAR_GNU_EXTENSIONS(...)
-#define CONFIG_FEATURE_TAR_LONG_OPTIONS 1
-#define ENABLE_FEATURE_TAR_LONG_OPTIONS 1
-#define IF_FEATURE_TAR_LONG_OPTIONS(...) __VA_ARGS__
-#define IF_NOT_FEATURE_TAR_LONG_OPTIONS(...)
-#undef CONFIG_FEATURE_TAR_TO_COMMAND
-#define ENABLE_FEATURE_TAR_TO_COMMAND 0
-#define IF_FEATURE_TAR_TO_COMMAND(...)
-#define IF_NOT_FEATURE_TAR_TO_COMMAND(...) __VA_ARGS__
-#undef CONFIG_FEATURE_TAR_UNAME_GNAME
-#define ENABLE_FEATURE_TAR_UNAME_GNAME 0
-#define IF_FEATURE_TAR_UNAME_GNAME(...)
-#define IF_NOT_FEATURE_TAR_UNAME_GNAME(...) __VA_ARGS__
-#define CONFIG_FEATURE_TAR_NOPRESERVE_TIME 1
-#define ENABLE_FEATURE_TAR_NOPRESERVE_TIME 1
-#define IF_FEATURE_TAR_NOPRESERVE_TIME(...) __VA_ARGS__
-#define IF_NOT_FEATURE_TAR_NOPRESERVE_TIME(...)
-#undef CONFIG_FEATURE_TAR_SELINUX
-#define ENABLE_FEATURE_TAR_SELINUX 0
-#define IF_FEATURE_TAR_SELINUX(...)
-#define IF_NOT_FEATURE_TAR_SELINUX(...) __VA_ARGS__
-#undef CONFIG_UNCOMPRESS
-#define ENABLE_UNCOMPRESS 0
-#define IF_UNCOMPRESS(...)
-#define IF_NOT_UNCOMPRESS(...) __VA_ARGS__
-#define CONFIG_UNLZMA 1
-#define ENABLE_UNLZMA 1
-#define IF_UNLZMA(...) __VA_ARGS__
-#define IF_NOT_UNLZMA(...)
-#undef CONFIG_FEATURE_LZMA_FAST
-#define ENABLE_FEATURE_LZMA_FAST 0
-#define IF_FEATURE_LZMA_FAST(...)
-#define IF_NOT_FEATURE_LZMA_FAST(...) __VA_ARGS__
-#undef CONFIG_LZMA
-#define ENABLE_LZMA 0
-#define IF_LZMA(...)
-#define IF_NOT_LZMA(...) __VA_ARGS__
-#define CONFIG_UNXZ 1
-#define ENABLE_UNXZ 1
-#define IF_UNXZ(...) __VA_ARGS__
-#define IF_NOT_UNXZ(...)
-#undef CONFIG_XZ
-#define ENABLE_XZ 0
-#define IF_XZ(...)
-#define IF_NOT_XZ(...) __VA_ARGS__
-#define CONFIG_UNZIP 1
-#define ENABLE_UNZIP 1
-#define IF_UNZIP(...) __VA_ARGS__
-#define IF_NOT_UNZIP(...)
-
-/*
- * Coreutils
- */
-#define CONFIG_BASENAME 1
-#define ENABLE_BASENAME 1
-#define IF_BASENAME(...) __VA_ARGS__
-#define IF_NOT_BASENAME(...)
-#define CONFIG_CAT 1
-#define ENABLE_CAT 1
-#define IF_CAT(...) __VA_ARGS__
-#define IF_NOT_CAT(...)
-#define CONFIG_DATE 1
-#define ENABLE_DATE 1
-#define IF_DATE(...) __VA_ARGS__
-#define IF_NOT_DATE(...)
-#define CONFIG_FEATURE_DATE_ISOFMT 1
-#define ENABLE_FEATURE_DATE_ISOFMT 1
-#define IF_FEATURE_DATE_ISOFMT(...) __VA_ARGS__
-#define IF_NOT_FEATURE_DATE_ISOFMT(...)
-#undef CONFIG_FEATURE_DATE_NANO
-#define ENABLE_FEATURE_DATE_NANO 0
-#define IF_FEATURE_DATE_NANO(...)
-#define IF_NOT_FEATURE_DATE_NANO(...) __VA_ARGS__
-#define CONFIG_FEATURE_DATE_COMPAT 1
-#define ENABLE_FEATURE_DATE_COMPAT 1
-#define IF_FEATURE_DATE_COMPAT(...) __VA_ARGS__
-#define IF_NOT_FEATURE_DATE_COMPAT(...)
-#undef CONFIG_HOSTID
-#define ENABLE_HOSTID 0
-#define IF_HOSTID(...)
-#define IF_NOT_HOSTID(...) __VA_ARGS__
-#define CONFIG_ID 1
-#define ENABLE_ID 1
-#define IF_ID(...) __VA_ARGS__
-#define IF_NOT_ID(...)
-#define CONFIG_GROUPS 1
-#define ENABLE_GROUPS 1
-#define IF_GROUPS(...) __VA_ARGS__
-#define IF_NOT_GROUPS(...)
-#define CONFIG_TEST 1
-#define ENABLE_TEST 1
-#define IF_TEST(...) __VA_ARGS__
-#define IF_NOT_TEST(...)
-#undef CONFIG_FEATURE_TEST_64
-#define ENABLE_FEATURE_TEST_64 0
-#define IF_FEATURE_TEST_64(...)
-#define IF_NOT_FEATURE_TEST_64(...) __VA_ARGS__
-#define CONFIG_TOUCH 1
-#define ENABLE_TOUCH 1
-#define IF_TOUCH(...) __VA_ARGS__
-#define IF_NOT_TOUCH(...)
-#undef CONFIG_FEATURE_TOUCH_SUSV3
-#define ENABLE_FEATURE_TOUCH_SUSV3 0
-#define IF_FEATURE_TOUCH_SUSV3(...)
-#define IF_NOT_FEATURE_TOUCH_SUSV3(...) __VA_ARGS__
-#define CONFIG_TR 1
-#define ENABLE_TR 1
-#define IF_TR(...) __VA_ARGS__
-#define IF_NOT_TR(...)
-#define CONFIG_FEATURE_TR_CLASSES 1
-#define ENABLE_FEATURE_TR_CLASSES 1
-#define IF_FEATURE_TR_CLASSES(...) __VA_ARGS__
-#define IF_NOT_FEATURE_TR_CLASSES(...)
-#undef CONFIG_FEATURE_TR_EQUIV
-#define ENABLE_FEATURE_TR_EQUIV 0
-#define IF_FEATURE_TR_EQUIV(...)
-#define IF_NOT_FEATURE_TR_EQUIV(...) __VA_ARGS__
-#define CONFIG_BASE64 1
-#define ENABLE_BASE64 1
-#define IF_BASE64(...) __VA_ARGS__
-#define IF_NOT_BASE64(...)
-#undef CONFIG_WHO
-#define ENABLE_WHO 0
-#define IF_WHO(...)
-#define IF_NOT_WHO(...) __VA_ARGS__
-#undef CONFIG_USERS
-#define ENABLE_USERS 0
-#define IF_USERS(...)
-#define IF_NOT_USERS(...) __VA_ARGS__
-#define CONFIG_CAL 1
-#define ENABLE_CAL 1
-#define IF_CAL(...) __VA_ARGS__
-#define IF_NOT_CAL(...)
-#define CONFIG_CATV 1
-#define ENABLE_CATV 1
-#define IF_CATV(...) __VA_ARGS__
-#define IF_NOT_CATV(...)
-#define CONFIG_CHGRP 1
-#define ENABLE_CHGRP 1
-#define IF_CHGRP(...) __VA_ARGS__
-#define IF_NOT_CHGRP(...)
-#define CONFIG_CHMOD 1
-#define ENABLE_CHMOD 1
-#define IF_CHMOD(...) __VA_ARGS__
-#define IF_NOT_CHMOD(...)
-#define CONFIG_CHOWN 1
-#define ENABLE_CHOWN 1
-#define IF_CHOWN(...) __VA_ARGS__
-#define IF_NOT_CHOWN(...)
-#define CONFIG_FEATURE_CHOWN_LONG_OPTIONS 1
-#define ENABLE_FEATURE_CHOWN_LONG_OPTIONS 1
-#define IF_FEATURE_CHOWN_LONG_OPTIONS(...) __VA_ARGS__
-#define IF_NOT_FEATURE_CHOWN_LONG_OPTIONS(...)
-#define CONFIG_CHROOT 1
-#define ENABLE_CHROOT 1
-#define IF_CHROOT(...) __VA_ARGS__
-#define IF_NOT_CHROOT(...)
-#undef CONFIG_CKSUM
-#define ENABLE_CKSUM 0
-#define IF_CKSUM(...)
-#define IF_NOT_CKSUM(...) __VA_ARGS__
-#undef CONFIG_COMM
-#define ENABLE_COMM 0
-#define IF_COMM(...)
-#define IF_NOT_COMM(...) __VA_ARGS__
-#define CONFIG_CP 1
-#define ENABLE_CP 1
-#define IF_CP(...) __VA_ARGS__
-#define IF_NOT_CP(...)
-#define CONFIG_FEATURE_CP_LONG_OPTIONS 1
-#define ENABLE_FEATURE_CP_LONG_OPTIONS 1
-#define IF_FEATURE_CP_LONG_OPTIONS(...) __VA_ARGS__
-#define IF_NOT_FEATURE_CP_LONG_OPTIONS(...)
-#define CONFIG_CUT 1
-#define ENABLE_CUT 1
-#define IF_CUT(...) __VA_ARGS__
-#define IF_NOT_CUT(...)
-#define CONFIG_DD 1
-#define ENABLE_DD 1
-#define IF_DD(...) __VA_ARGS__
-#define IF_NOT_DD(...)
-#define CONFIG_FEATURE_DD_SIGNAL_HANDLING 1
-#define ENABLE_FEATURE_DD_SIGNAL_HANDLING 1
-#define IF_FEATURE_DD_SIGNAL_HANDLING(...) __VA_ARGS__
-#define IF_NOT_FEATURE_DD_SIGNAL_HANDLING(...)
-#define CONFIG_FEATURE_DD_THIRD_STATUS_LINE 1
-#define ENABLE_FEATURE_DD_THIRD_STATUS_LINE 1
-#define IF_FEATURE_DD_THIRD_STATUS_LINE(...) __VA_ARGS__
-#define IF_NOT_FEATURE_DD_THIRD_STATUS_LINE(...)
-#define CONFIG_FEATURE_DD_IBS_OBS 1
-#define ENABLE_FEATURE_DD_IBS_OBS 1
-#define IF_FEATURE_DD_IBS_OBS(...) __VA_ARGS__
-#define IF_NOT_FEATURE_DD_IBS_OBS(...)
-#define CONFIG_DF 1
-#define ENABLE_DF 1
-#define IF_DF(...) __VA_ARGS__
-#define IF_NOT_DF(...)
-#define CONFIG_FEATURE_DF_FANCY 1
-#define ENABLE_FEATURE_DF_FANCY 1
-#define IF_FEATURE_DF_FANCY(...) __VA_ARGS__
-#define IF_NOT_FEATURE_DF_FANCY(...)
-#define CONFIG_DIRNAME 1
-#define ENABLE_DIRNAME 1
-#define IF_DIRNAME(...) __VA_ARGS__
-#define IF_NOT_DIRNAME(...)
-#define CONFIG_DOS2UNIX 1
-#define ENABLE_DOS2UNIX 1
-#define IF_DOS2UNIX(...) __VA_ARGS__
-#define IF_NOT_DOS2UNIX(...)
-#define CONFIG_UNIX2DOS 1
-#define ENABLE_UNIX2DOS 1
-#define IF_UNIX2DOS(...) __VA_ARGS__
-#define IF_NOT_UNIX2DOS(...)
-#define CONFIG_DU 1
-#define ENABLE_DU 1
-#define IF_DU(...) __VA_ARGS__
-#define IF_NOT_DU(...)
-#define CONFIG_FEATURE_DU_DEFAULT_BLOCKSIZE_1K 1
-#define ENABLE_FEATURE_DU_DEFAULT_BLOCKSIZE_1K 1
-#define IF_FEATURE_DU_DEFAULT_BLOCKSIZE_1K(...) __VA_ARGS__
-#define IF_NOT_FEATURE_DU_DEFAULT_BLOCKSIZE_1K(...)
-#define CONFIG_ECHO 1
-#define ENABLE_ECHO 1
-#define IF_ECHO(...) __VA_ARGS__
-#define IF_NOT_ECHO(...)
-#define CONFIG_FEATURE_FANCY_ECHO 1
-#define ENABLE_FEATURE_FANCY_ECHO 1
-#define IF_FEATURE_FANCY_ECHO(...) __VA_ARGS__
-#define IF_NOT_FEATURE_FANCY_ECHO(...)
-#define CONFIG_ENV 1
-#define ENABLE_ENV 1
-#define IF_ENV(...) __VA_ARGS__
-#define IF_NOT_ENV(...)
-#undef CONFIG_FEATURE_ENV_LONG_OPTIONS
-#define ENABLE_FEATURE_ENV_LONG_OPTIONS 0
-#define IF_FEATURE_ENV_LONG_OPTIONS(...)
-#define IF_NOT_FEATURE_ENV_LONG_OPTIONS(...) __VA_ARGS__
-#define CONFIG_EXPAND 1
-#define ENABLE_EXPAND 1
-#define IF_EXPAND(...) __VA_ARGS__
-#define IF_NOT_EXPAND(...)
-#undef CONFIG_FEATURE_EXPAND_LONG_OPTIONS
-#define ENABLE_FEATURE_EXPAND_LONG_OPTIONS 0
-#define IF_FEATURE_EXPAND_LONG_OPTIONS(...)
-#define IF_NOT_FEATURE_EXPAND_LONG_OPTIONS(...) __VA_ARGS__
-#define CONFIG_EXPR 1
-#define ENABLE_EXPR 1
-#define IF_EXPR(...) __VA_ARGS__
-#define IF_NOT_EXPR(...)
-#define CONFIG_EXPR_MATH_SUPPORT_64 1
-#define ENABLE_EXPR_MATH_SUPPORT_64 1
-#define IF_EXPR_MATH_SUPPORT_64(...) __VA_ARGS__
-#define IF_NOT_EXPR_MATH_SUPPORT_64(...)
-#define CONFIG_FALSE 1
-#define ENABLE_FALSE 1
-#define IF_FALSE(...) __VA_ARGS__
-#define IF_NOT_FALSE(...)
-#define CONFIG_FOLD 1
-#define ENABLE_FOLD 1
-#define IF_FOLD(...) __VA_ARGS__
-#define IF_NOT_FOLD(...)
-#undef CONFIG_FSYNC
-#define ENABLE_FSYNC 0
-#define IF_FSYNC(...)
-#define IF_NOT_FSYNC(...) __VA_ARGS__
-#define CONFIG_HEAD 1
-#define ENABLE_HEAD 1
-#define IF_HEAD(...) __VA_ARGS__
-#define IF_NOT_HEAD(...)
-#undef CONFIG_FEATURE_FANCY_HEAD
-#define ENABLE_FEATURE_FANCY_HEAD 0
-#define IF_FEATURE_FANCY_HEAD(...)
-#define IF_NOT_FEATURE_FANCY_HEAD(...) __VA_ARGS__
-#define CONFIG_INSTALL 1
-#define ENABLE_INSTALL 1
-#define IF_INSTALL(...) __VA_ARGS__
-#define IF_NOT_INSTALL(...)
-#undef CONFIG_FEATURE_INSTALL_LONG_OPTIONS
-#define ENABLE_FEATURE_INSTALL_LONG_OPTIONS 0
-#define IF_FEATURE_INSTALL_LONG_OPTIONS(...)
-#define IF_NOT_FEATURE_INSTALL_LONG_OPTIONS(...) __VA_ARGS__
-#define CONFIG_LN 1
-#define ENABLE_LN 1
-#define IF_LN(...) __VA_ARGS__
-#define IF_NOT_LN(...)
-#undef CONFIG_LOGNAME
-#define ENABLE_LOGNAME 0
-#define IF_LOGNAME(...)
-#define IF_NOT_LOGNAME(...) __VA_ARGS__
-#define CONFIG_LS 1
-#define ENABLE_LS 1
-#define IF_LS(...) __VA_ARGS__
-#define IF_NOT_LS(...)
-#define CONFIG_FEATURE_LS_FILETYPES 1
-#define ENABLE_FEATURE_LS_FILETYPES 1
-#define IF_FEATURE_LS_FILETYPES(...) __VA_ARGS__
-#define IF_NOT_FEATURE_LS_FILETYPES(...)
-#define CONFIG_FEATURE_LS_FOLLOWLINKS 1
-#define ENABLE_FEATURE_LS_FOLLOWLINKS 1
-#define IF_FEATURE_LS_FOLLOWLINKS(...) __VA_ARGS__
-#define IF_NOT_FEATURE_LS_FOLLOWLINKS(...)
-#define CONFIG_FEATURE_LS_RECURSIVE 1
-#define ENABLE_FEATURE_LS_RECURSIVE 1
-#define IF_FEATURE_LS_RECURSIVE(...) __VA_ARGS__
-#define IF_NOT_FEATURE_LS_RECURSIVE(...)
-#define CONFIG_FEATURE_LS_SORTFILES 1
-#define ENABLE_FEATURE_LS_SORTFILES 1
-#define IF_FEATURE_LS_SORTFILES(...) __VA_ARGS__
-#define IF_NOT_FEATURE_LS_SORTFILES(...)
-#define CONFIG_FEATURE_LS_TIMESTAMPS 1
-#define ENABLE_FEATURE_LS_TIMESTAMPS 1
-#define IF_FEATURE_LS_TIMESTAMPS(...) __VA_ARGS__
-#define IF_NOT_FEATURE_LS_TIMESTAMPS(...)
-#define CONFIG_FEATURE_LS_USERNAME 1
-#define ENABLE_FEATURE_LS_USERNAME 1
-#define IF_FEATURE_LS_USERNAME(...) __VA_ARGS__
-#define IF_NOT_FEATURE_LS_USERNAME(...)
-#define CONFIG_FEATURE_LS_COLOR 1
-#define ENABLE_FEATURE_LS_COLOR 1
-#define IF_FEATURE_LS_COLOR(...) __VA_ARGS__
-#define IF_NOT_FEATURE_LS_COLOR(...)
-#undef CONFIG_FEATURE_LS_COLOR_IS_DEFAULT
-#define ENABLE_FEATURE_LS_COLOR_IS_DEFAULT 0
-#define IF_FEATURE_LS_COLOR_IS_DEFAULT(...)
-#define IF_NOT_FEATURE_LS_COLOR_IS_DEFAULT(...) __VA_ARGS__
-#define CONFIG_MD5SUM 1
-#define ENABLE_MD5SUM 1
-#define IF_MD5SUM(...) __VA_ARGS__
-#define IF_NOT_MD5SUM(...)
-#define CONFIG_MKDIR 1
-#define ENABLE_MKDIR 1
-#define IF_MKDIR(...) __VA_ARGS__
-#define IF_NOT_MKDIR(...)
-#undef CONFIG_FEATURE_MKDIR_LONG_OPTIONS
-#define ENABLE_FEATURE_MKDIR_LONG_OPTIONS 0
-#define IF_FEATURE_MKDIR_LONG_OPTIONS(...)
-#define IF_NOT_FEATURE_MKDIR_LONG_OPTIONS(...) __VA_ARGS__
-#define CONFIG_MKFIFO 1
-#define ENABLE_MKFIFO 1
-#define IF_MKFIFO(...) __VA_ARGS__
-#define IF_NOT_MKFIFO(...)
-#define CONFIG_MKNOD 1
-#define ENABLE_MKNOD 1
-#define IF_MKNOD(...) __VA_ARGS__
-#define IF_NOT_MKNOD(...)
-#define CONFIG_MV 1
-#define ENABLE_MV 1
-#define IF_MV(...) __VA_ARGS__
-#define IF_NOT_MV(...)
-#undef CONFIG_FEATURE_MV_LONG_OPTIONS
-#define ENABLE_FEATURE_MV_LONG_OPTIONS 0
-#define IF_FEATURE_MV_LONG_OPTIONS(...)
-#define IF_NOT_FEATURE_MV_LONG_OPTIONS(...) __VA_ARGS__
-#define CONFIG_NICE 1
-#define ENABLE_NICE 1
-#define IF_NICE(...) __VA_ARGS__
-#define IF_NOT_NICE(...)
-#define CONFIG_NOHUP 1
-#define ENABLE_NOHUP 1
-#define IF_NOHUP(...) __VA_ARGS__
-#define IF_NOT_NOHUP(...)
-#define CONFIG_OD 1
-#define ENABLE_OD 1
-#define IF_OD(...) __VA_ARGS__
-#define IF_NOT_OD(...)
-#define CONFIG_PRINTENV 1
-#define ENABLE_PRINTENV 1
-#define IF_PRINTENV(...) __VA_ARGS__
-#define IF_NOT_PRINTENV(...)
-#define CONFIG_PRINTF 1
-#define ENABLE_PRINTF 1
-#define IF_PRINTF(...) __VA_ARGS__
-#define IF_NOT_PRINTF(...)
-#define CONFIG_PWD 1
-#define ENABLE_PWD 1
-#define IF_PWD(...) __VA_ARGS__
-#define IF_NOT_PWD(...)
-#define CONFIG_READLINK 1
-#define ENABLE_READLINK 1
-#define IF_READLINK(...) __VA_ARGS__
-#define IF_NOT_READLINK(...)
-#define CONFIG_FEATURE_READLINK_FOLLOW 1
-#define ENABLE_FEATURE_READLINK_FOLLOW 1
-#define IF_FEATURE_READLINK_FOLLOW(...) __VA_ARGS__
-#define IF_NOT_FEATURE_READLINK_FOLLOW(...)
-#define CONFIG_REALPATH 1
-#define ENABLE_REALPATH 1
-#define IF_REALPATH(...) __VA_ARGS__
-#define IF_NOT_REALPATH(...)
-#define CONFIG_RM 1
-#define ENABLE_RM 1
-#define IF_RM(...) __VA_ARGS__
-#define IF_NOT_RM(...)
-#define CONFIG_RMDIR 1
-#define ENABLE_RMDIR 1
-#define IF_RMDIR(...) __VA_ARGS__
-#define IF_NOT_RMDIR(...)
-#define CONFIG_FEATURE_RMDIR_LONG_OPTIONS 1
-#define ENABLE_FEATURE_RMDIR_LONG_OPTIONS 1
-#define IF_FEATURE_RMDIR_LONG_OPTIONS(...) __VA_ARGS__
-#define IF_NOT_FEATURE_RMDIR_LONG_OPTIONS(...)
-#define CONFIG_SEQ 1
-#define ENABLE_SEQ 1
-#define IF_SEQ(...) __VA_ARGS__
-#define IF_NOT_SEQ(...)
-#define CONFIG_SHA1SUM 1
-#define ENABLE_SHA1SUM 1
-#define IF_SHA1SUM(...) __VA_ARGS__
-#define IF_NOT_SHA1SUM(...)
-#define CONFIG_SHA256SUM 1
-#define ENABLE_SHA256SUM 1
-#define IF_SHA256SUM(...) __VA_ARGS__
-#define IF_NOT_SHA256SUM(...)
-#define CONFIG_SHA512SUM 1
-#define ENABLE_SHA512SUM 1
-#define IF_SHA512SUM(...) __VA_ARGS__
-#define IF_NOT_SHA512SUM(...)
-#undef CONFIG_SHA3SUM
-#define ENABLE_SHA3SUM 0
-#define IF_SHA3SUM(...)
-#define IF_NOT_SHA3SUM(...) __VA_ARGS__
-#define CONFIG_SLEEP 1
-#define ENABLE_SLEEP 1
-#define IF_SLEEP(...) __VA_ARGS__
-#define IF_NOT_SLEEP(...)
-#define CONFIG_FEATURE_FANCY_SLEEP 1
-#define ENABLE_FEATURE_FANCY_SLEEP 1
-#define IF_FEATURE_FANCY_SLEEP(...) __VA_ARGS__
-#define IF_NOT_FEATURE_FANCY_SLEEP(...)
-#define CONFIG_FEATURE_FLOAT_SLEEP 1
-#define ENABLE_FEATURE_FLOAT_SLEEP 1
-#define IF_FEATURE_FLOAT_SLEEP(...) __VA_ARGS__
-#define IF_NOT_FEATURE_FLOAT_SLEEP(...)
-#define CONFIG_SORT 1
-#define ENABLE_SORT 1
-#define IF_SORT(...) __VA_ARGS__
-#define IF_NOT_SORT(...)
-#undef CONFIG_FEATURE_SORT_BIG
-#define ENABLE_FEATURE_SORT_BIG 0
-#define IF_FEATURE_SORT_BIG(...)
-#define IF_NOT_FEATURE_SORT_BIG(...) __VA_ARGS__
-#define CONFIG_SPLIT 1
-#define ENABLE_SPLIT 1
-#define IF_SPLIT(...) __VA_ARGS__
-#define IF_NOT_SPLIT(...)
-#undef CONFIG_FEATURE_SPLIT_FANCY
-#define ENABLE_FEATURE_SPLIT_FANCY 0
-#define IF_FEATURE_SPLIT_FANCY(...)
-#define IF_NOT_FEATURE_SPLIT_FANCY(...) __VA_ARGS__
-#define CONFIG_STAT 1
-#define ENABLE_STAT 1
-#define IF_STAT(...) __VA_ARGS__
-#define IF_NOT_STAT(...)
-#undef CONFIG_FEATURE_STAT_FORMAT
-#define ENABLE_FEATURE_STAT_FORMAT 0
-#define IF_FEATURE_STAT_FORMAT(...)
-#define IF_NOT_FEATURE_STAT_FORMAT(...) __VA_ARGS__
-#define CONFIG_STTY 1
-#define ENABLE_STTY 1
-#define IF_STTY(...) __VA_ARGS__
-#define IF_NOT_STTY(...)
-#undef CONFIG_SUM
-#define ENABLE_SUM 0
-#define IF_SUM(...)
-#define IF_NOT_SUM(...) __VA_ARGS__
-#define CONFIG_SYNC 1
-#define ENABLE_SYNC 1
-#define IF_SYNC(...) __VA_ARGS__
-#define IF_NOT_SYNC(...)
-#define CONFIG_TAC 1
-#define ENABLE_TAC 1
-#define IF_TAC(...) __VA_ARGS__
-#define IF_NOT_TAC(...)
-#define CONFIG_TAIL 1
-#define ENABLE_TAIL 1
-#define IF_TAIL(...) __VA_ARGS__
-#define IF_NOT_TAIL(...)
-#define CONFIG_FEATURE_FANCY_TAIL 1
-#define ENABLE_FEATURE_FANCY_TAIL 1
-#define IF_FEATURE_FANCY_TAIL(...) __VA_ARGS__
-#define IF_NOT_FEATURE_FANCY_TAIL(...)
-#define CONFIG_TEE 1
-#define ENABLE_TEE 1
-#define IF_TEE(...) __VA_ARGS__
-#define IF_NOT_TEE(...)
-#undef CONFIG_FEATURE_TEE_USE_BLOCK_IO
-#define ENABLE_FEATURE_TEE_USE_BLOCK_IO 0
-#define IF_FEATURE_TEE_USE_BLOCK_IO(...)
-#define IF_NOT_FEATURE_TEE_USE_BLOCK_IO(...) __VA_ARGS__
-#define CONFIG_TRUE 1
-#define ENABLE_TRUE 1
-#define IF_TRUE(...) __VA_ARGS__
-#define IF_NOT_TRUE(...)
-#undef CONFIG_TTY
-#define ENABLE_TTY 0
-#define IF_TTY(...)
-#define IF_NOT_TTY(...) __VA_ARGS__
-#define CONFIG_UNAME 1
-#define ENABLE_UNAME 1
-#define IF_UNAME(...) __VA_ARGS__
-#define IF_NOT_UNAME(...)
-#define CONFIG_UNEXPAND 1
-#define ENABLE_UNEXPAND 1
-#define IF_UNEXPAND(...) __VA_ARGS__
-#define IF_NOT_UNEXPAND(...)
-#define CONFIG_FEATURE_UNEXPAND_LONG_OPTIONS 1
-#define ENABLE_FEATURE_UNEXPAND_LONG_OPTIONS 1
-#define IF_FEATURE_UNEXPAND_LONG_OPTIONS(...) __VA_ARGS__
-#define IF_NOT_FEATURE_UNEXPAND_LONG_OPTIONS(...)
-#define CONFIG_UNIQ 1
-#define ENABLE_UNIQ 1
-#define IF_UNIQ(...) __VA_ARGS__
-#define IF_NOT_UNIQ(...)
-#define CONFIG_USLEEP 1
-#define ENABLE_USLEEP 1
-#define IF_USLEEP(...) __VA_ARGS__
-#define IF_NOT_USLEEP(...)
-#define CONFIG_UUDECODE 1
-#define ENABLE_UUDECODE 1
-#define IF_UUDECODE(...) __VA_ARGS__
-#define IF_NOT_UUDECODE(...)
-#define CONFIG_UUENCODE 1
-#define ENABLE_UUENCODE 1
-#define IF_UUENCODE(...) __VA_ARGS__
-#define IF_NOT_UUENCODE(...)
-#define CONFIG_WC 1
-#define ENABLE_WC 1
-#define IF_WC(...) __VA_ARGS__
-#define IF_NOT_WC(...)
-#undef CONFIG_FEATURE_WC_LARGE
-#define ENABLE_FEATURE_WC_LARGE 0
-#define IF_FEATURE_WC_LARGE(...)
-#define IF_NOT_FEATURE_WC_LARGE(...) __VA_ARGS__
-#define CONFIG_WHOAMI 1
-#define ENABLE_WHOAMI 1
-#define IF_WHOAMI(...) __VA_ARGS__
-#define IF_NOT_WHOAMI(...)
-#define CONFIG_YES 1
-#define ENABLE_YES 1
-#define IF_YES(...) __VA_ARGS__
-#define IF_NOT_YES(...)
-
-/*
- * Common options for cp and mv
- */
-#define CONFIG_FEATURE_PRESERVE_HARDLINKS 1
-#define ENABLE_FEATURE_PRESERVE_HARDLINKS 1
-#define IF_FEATURE_PRESERVE_HARDLINKS(...) __VA_ARGS__
-#define IF_NOT_FEATURE_PRESERVE_HARDLINKS(...)
-
-/*
- * Common options for ls, more and telnet
- */
-#define CONFIG_FEATURE_AUTOWIDTH 1
-#define ENABLE_FEATURE_AUTOWIDTH 1
-#define IF_FEATURE_AUTOWIDTH(...) __VA_ARGS__
-#define IF_NOT_FEATURE_AUTOWIDTH(...)
-
-/*
- * Common options for df, du, ls
- */
-#define CONFIG_FEATURE_HUMAN_READABLE 1
-#define ENABLE_FEATURE_HUMAN_READABLE 1
-#define IF_FEATURE_HUMAN_READABLE(...) __VA_ARGS__
-#define IF_NOT_FEATURE_HUMAN_READABLE(...)
-
-/*
- * Common options for md5sum, sha1sum, sha256sum, sha512sum, sha3sum
- */
-#define CONFIG_FEATURE_MD5_SHA1_SUM_CHECK 1
-#define ENABLE_FEATURE_MD5_SHA1_SUM_CHECK 1
-#define IF_FEATURE_MD5_SHA1_SUM_CHECK(...) __VA_ARGS__
-#define IF_NOT_FEATURE_MD5_SHA1_SUM_CHECK(...)
-
-/*
- * Console Utilities
- */
-#undef CONFIG_CHVT
-#define ENABLE_CHVT 0
-#define IF_CHVT(...)
-#define IF_NOT_CHVT(...) __VA_ARGS__
-#undef CONFIG_FGCONSOLE
-#define ENABLE_FGCONSOLE 0
-#define IF_FGCONSOLE(...)
-#define IF_NOT_FGCONSOLE(...) __VA_ARGS__
-#define CONFIG_CLEAR 1
-#define ENABLE_CLEAR 1
-#define IF_CLEAR(...) __VA_ARGS__
-#define IF_NOT_CLEAR(...)
-#undef CONFIG_DEALLOCVT
-#define ENABLE_DEALLOCVT 0
-#define IF_DEALLOCVT(...)
-#define IF_NOT_DEALLOCVT(...) __VA_ARGS__
-#undef CONFIG_DUMPKMAP
-#define ENABLE_DUMPKMAP 0
-#define IF_DUMPKMAP(...)
-#define IF_NOT_DUMPKMAP(...) __VA_ARGS__
-#undef CONFIG_KBD_MODE
-#define ENABLE_KBD_MODE 0
-#define IF_KBD_MODE(...)
-#define IF_NOT_KBD_MODE(...) __VA_ARGS__
-#undef CONFIG_LOADFONT
-#define ENABLE_LOADFONT 0
-#define IF_LOADFONT(...)
-#define IF_NOT_LOADFONT(...) __VA_ARGS__
-#undef CONFIG_LOADKMAP
-#define ENABLE_LOADKMAP 0
-#define IF_LOADKMAP(...)
-#define IF_NOT_LOADKMAP(...) __VA_ARGS__
-#undef CONFIG_OPENVT
-#define ENABLE_OPENVT 0
-#define IF_OPENVT(...)
-#define IF_NOT_OPENVT(...) __VA_ARGS__
-#define CONFIG_RESET 1
-#define ENABLE_RESET 1
-#define IF_RESET(...) __VA_ARGS__
-#define IF_NOT_RESET(...)
-#define CONFIG_RESIZE 1
-#define ENABLE_RESIZE 1
-#define IF_RESIZE(...) __VA_ARGS__
-#define IF_NOT_RESIZE(...)
-#undef CONFIG_FEATURE_RESIZE_PRINT
-#define ENABLE_FEATURE_RESIZE_PRINT 0
-#define IF_FEATURE_RESIZE_PRINT(...)
-#define IF_NOT_FEATURE_RESIZE_PRINT(...) __VA_ARGS__
-#define CONFIG_SETCONSOLE 1
-#define ENABLE_SETCONSOLE 1
-#define IF_SETCONSOLE(...) __VA_ARGS__
-#define IF_NOT_SETCONSOLE(...)
-#undef CONFIG_FEATURE_SETCONSOLE_LONG_OPTIONS
-#define ENABLE_FEATURE_SETCONSOLE_LONG_OPTIONS 0
-#define IF_FEATURE_SETCONSOLE_LONG_OPTIONS(...)
-#define IF_NOT_FEATURE_SETCONSOLE_LONG_OPTIONS(...) __VA_ARGS__
-#undef CONFIG_SETFONT
-#define ENABLE_SETFONT 0
-#define IF_SETFONT(...)
-#define IF_NOT_SETFONT(...) __VA_ARGS__
-#undef CONFIG_FEATURE_SETFONT_TEXTUAL_MAP
-#define ENABLE_FEATURE_SETFONT_TEXTUAL_MAP 0
-#define IF_FEATURE_SETFONT_TEXTUAL_MAP(...)
-#define IF_NOT_FEATURE_SETFONT_TEXTUAL_MAP(...) __VA_ARGS__
-#define CONFIG_DEFAULT_SETFONT_DIR ""
-#define ENABLE_DEFAULT_SETFONT_DIR 1
-#define IF_DEFAULT_SETFONT_DIR(...) __VA_ARGS__
-#define IF_NOT_DEFAULT_SETFONT_DIR(...)
-#undef CONFIG_SETKEYCODES
-#define ENABLE_SETKEYCODES 0
-#define IF_SETKEYCODES(...)
-#define IF_NOT_SETKEYCODES(...) __VA_ARGS__
-#undef CONFIG_SETLOGCONS
-#define ENABLE_SETLOGCONS 0
-#define IF_SETLOGCONS(...)
-#define IF_NOT_SETLOGCONS(...) __VA_ARGS__
-#undef CONFIG_SHOWKEY
-#define ENABLE_SHOWKEY 0
-#define IF_SHOWKEY(...)
-#define IF_NOT_SHOWKEY(...) __VA_ARGS__
-#undef CONFIG_FEATURE_LOADFONT_PSF2
-#define ENABLE_FEATURE_LOADFONT_PSF2 0
-#define IF_FEATURE_LOADFONT_PSF2(...)
-#define IF_NOT_FEATURE_LOADFONT_PSF2(...) __VA_ARGS__
-#undef CONFIG_FEATURE_LOADFONT_RAW
-#define ENABLE_FEATURE_LOADFONT_RAW 0
-#define IF_FEATURE_LOADFONT_RAW(...)
-#define IF_NOT_FEATURE_LOADFONT_RAW(...) __VA_ARGS__
-
-/*
- * Debian Utilities
- */
-#define CONFIG_MKTEMP 1
-#define ENABLE_MKTEMP 1
-#define IF_MKTEMP(...) __VA_ARGS__
-#define IF_NOT_MKTEMP(...)
-#undef CONFIG_PIPE_PROGRESS
-#define ENABLE_PIPE_PROGRESS 0
-#define IF_PIPE_PROGRESS(...)
-#define IF_NOT_PIPE_PROGRESS(...) __VA_ARGS__
-#define CONFIG_RUN_PARTS 1
-#define ENABLE_RUN_PARTS 1
-#define IF_RUN_PARTS(...) __VA_ARGS__
-#define IF_NOT_RUN_PARTS(...)
-#undef CONFIG_FEATURE_RUN_PARTS_LONG_OPTIONS
-#define ENABLE_FEATURE_RUN_PARTS_LONG_OPTIONS 0
-#define IF_FEATURE_RUN_PARTS_LONG_OPTIONS(...)
-#define IF_NOT_FEATURE_RUN_PARTS_LONG_OPTIONS(...) __VA_ARGS__
-#define CONFIG_FEATURE_RUN_PARTS_FANCY 1
-#define ENABLE_FEATURE_RUN_PARTS_FANCY 1
-#define IF_FEATURE_RUN_PARTS_FANCY(...) __VA_ARGS__
-#define IF_NOT_FEATURE_RUN_PARTS_FANCY(...)
-#undef CONFIG_START_STOP_DAEMON
-#define ENABLE_START_STOP_DAEMON 0
-#define IF_START_STOP_DAEMON(...)
-#define IF_NOT_START_STOP_DAEMON(...) __VA_ARGS__
-#undef CONFIG_FEATURE_START_STOP_DAEMON_FANCY
-#define ENABLE_FEATURE_START_STOP_DAEMON_FANCY 0
-#define IF_FEATURE_START_STOP_DAEMON_FANCY(...)
-#define IF_NOT_FEATURE_START_STOP_DAEMON_FANCY(...) __VA_ARGS__
-#undef CONFIG_FEATURE_START_STOP_DAEMON_LONG_OPTIONS
-#define ENABLE_FEATURE_START_STOP_DAEMON_LONG_OPTIONS 0
-#define IF_FEATURE_START_STOP_DAEMON_LONG_OPTIONS(...)
-#define IF_NOT_FEATURE_START_STOP_DAEMON_LONG_OPTIONS(...) __VA_ARGS__
-#define CONFIG_WHICH 1
-#define ENABLE_WHICH 1
-#define IF_WHICH(...) __VA_ARGS__
-#define IF_NOT_WHICH(...)
-
-/*
- * Editors
- */
-#define CONFIG_PATCH 1
-#define ENABLE_PATCH 1
-#define IF_PATCH(...) __VA_ARGS__
-#define IF_NOT_PATCH(...)
-#undef CONFIG_VI
-#define ENABLE_VI 0
-#define IF_VI(...)
-#define IF_NOT_VI(...) __VA_ARGS__
-#define CONFIG_FEATURE_VI_MAX_LEN 0
-#define ENABLE_FEATURE_VI_MAX_LEN 1
-#define IF_FEATURE_VI_MAX_LEN(...) __VA_ARGS__
-#define IF_NOT_FEATURE_VI_MAX_LEN(...)
-#undef CONFIG_FEATURE_VI_8BIT
-#define ENABLE_FEATURE_VI_8BIT 0
-#define IF_FEATURE_VI_8BIT(...)
-#define IF_NOT_FEATURE_VI_8BIT(...) __VA_ARGS__
-#undef CONFIG_FEATURE_VI_COLON
-#define ENABLE_FEATURE_VI_COLON 0
-#define IF_FEATURE_VI_COLON(...)
-#define IF_NOT_FEATURE_VI_COLON(...) __VA_ARGS__
-#undef CONFIG_FEATURE_VI_YANKMARK
-#define ENABLE_FEATURE_VI_YANKMARK 0
-#define IF_FEATURE_VI_YANKMARK(...)
-#define IF_NOT_FEATURE_VI_YANKMARK(...) __VA_ARGS__
-#undef CONFIG_FEATURE_VI_SEARCH
-#define ENABLE_FEATURE_VI_SEARCH 0
-#define IF_FEATURE_VI_SEARCH(...)
-#define IF_NOT_FEATURE_VI_SEARCH(...) __VA_ARGS__
-#undef CONFIG_FEATURE_VI_REGEX_SEARCH
-#define ENABLE_FEATURE_VI_REGEX_SEARCH 0
-#define IF_FEATURE_VI_REGEX_SEARCH(...)
-#define IF_NOT_FEATURE_VI_REGEX_SEARCH(...) __VA_ARGS__
-#undef CONFIG_FEATURE_VI_USE_SIGNALS
-#define ENABLE_FEATURE_VI_USE_SIGNALS 0
-#define IF_FEATURE_VI_USE_SIGNALS(...)
-#define IF_NOT_FEATURE_VI_USE_SIGNALS(...) __VA_ARGS__
-#undef CONFIG_FEATURE_VI_DOT_CMD
-#define ENABLE_FEATURE_VI_DOT_CMD 0
-#define IF_FEATURE_VI_DOT_CMD(...)
-#define IF_NOT_FEATURE_VI_DOT_CMD(...) __VA_ARGS__
-#undef CONFIG_FEATURE_VI_READONLY
-#define ENABLE_FEATURE_VI_READONLY 0
-#define IF_FEATURE_VI_READONLY(...)
-#define IF_NOT_FEATURE_VI_READONLY(...) __VA_ARGS__
-#undef CONFIG_FEATURE_VI_SETOPTS
-#define ENABLE_FEATURE_VI_SETOPTS 0
-#define IF_FEATURE_VI_SETOPTS(...)
-#define IF_NOT_FEATURE_VI_SETOPTS(...) __VA_ARGS__
-#undef CONFIG_FEATURE_VI_SET
-#define ENABLE_FEATURE_VI_SET 0
-#define IF_FEATURE_VI_SET(...)
-#define IF_NOT_FEATURE_VI_SET(...) __VA_ARGS__
-#undef CONFIG_FEATURE_VI_WIN_RESIZE
-#define ENABLE_FEATURE_VI_WIN_RESIZE 0
-#define IF_FEATURE_VI_WIN_RESIZE(...)
-#define IF_NOT_FEATURE_VI_WIN_RESIZE(...) __VA_ARGS__
-#undef CONFIG_FEATURE_VI_ASK_TERMINAL
-#define ENABLE_FEATURE_VI_ASK_TERMINAL 0
-#define IF_FEATURE_VI_ASK_TERMINAL(...)
-#define IF_NOT_FEATURE_VI_ASK_TERMINAL(...) __VA_ARGS__
-#define CONFIG_AWK 1
-#define ENABLE_AWK 1
-#define IF_AWK(...) __VA_ARGS__
-#define IF_NOT_AWK(...)
-#undef CONFIG_FEATURE_AWK_LIBM
-#define ENABLE_FEATURE_AWK_LIBM 0
-#define IF_FEATURE_AWK_LIBM(...)
-#define IF_NOT_FEATURE_AWK_LIBM(...) __VA_ARGS__
-#define CONFIG_CMP 1
-#define ENABLE_CMP 1
-#define IF_CMP(...) __VA_ARGS__
-#define IF_NOT_CMP(...)
-#define CONFIG_DIFF 1
-#define ENABLE_DIFF 1
-#define IF_DIFF(...) __VA_ARGS__
-#define IF_NOT_DIFF(...)
-#define CONFIG_FEATURE_DIFF_LONG_OPTIONS 1
-#define ENABLE_FEATURE_DIFF_LONG_OPTIONS 1
-#define IF_FEATURE_DIFF_LONG_OPTIONS(...) __VA_ARGS__
-#define IF_NOT_FEATURE_DIFF_LONG_OPTIONS(...)
-#define CONFIG_FEATURE_DIFF_DIR 1
-#define ENABLE_FEATURE_DIFF_DIR 1
-#define IF_FEATURE_DIFF_DIR(...) __VA_ARGS__
-#define IF_NOT_FEATURE_DIFF_DIR(...)
-#undef CONFIG_ED
-#define ENABLE_ED 0
-#define IF_ED(...)
-#define IF_NOT_ED(...) __VA_ARGS__
-#define CONFIG_SED 1
-#define ENABLE_SED 1
-#define IF_SED(...) __VA_ARGS__
-#define IF_NOT_SED(...)
-#define CONFIG_FEATURE_ALLOW_EXEC 1
-#define ENABLE_FEATURE_ALLOW_EXEC 1
-#define IF_FEATURE_ALLOW_EXEC(...) __VA_ARGS__
-#define IF_NOT_FEATURE_ALLOW_EXEC(...)
-
-/*
- * Finding Utilities
- */
-#define CONFIG_FIND 1
-#define ENABLE_FIND 1
-#define IF_FIND(...) __VA_ARGS__
-#define IF_NOT_FIND(...)
-#define CONFIG_FEATURE_FIND_PRINT0 1
-#define ENABLE_FEATURE_FIND_PRINT0 1
-#define IF_FEATURE_FIND_PRINT0(...) __VA_ARGS__
-#define IF_NOT_FEATURE_FIND_PRINT0(...)
-#define CONFIG_FEATURE_FIND_MTIME 1
-#define ENABLE_FEATURE_FIND_MTIME 1
-#define IF_FEATURE_FIND_MTIME(...) __VA_ARGS__
-#define IF_NOT_FEATURE_FIND_MTIME(...)
-#define CONFIG_FEATURE_FIND_MMIN 1
-#define ENABLE_FEATURE_FIND_MMIN 1
-#define IF_FEATURE_FIND_MMIN(...) __VA_ARGS__
-#define IF_NOT_FEATURE_FIND_MMIN(...)
-#define CONFIG_FEATURE_FIND_PERM 1
-#define ENABLE_FEATURE_FIND_PERM 1
-#define IF_FEATURE_FIND_PERM(...) __VA_ARGS__
-#define IF_NOT_FEATURE_FIND_PERM(...)
-#define CONFIG_FEATURE_FIND_TYPE 1
-#define ENABLE_FEATURE_FIND_TYPE 1
-#define IF_FEATURE_FIND_TYPE(...) __VA_ARGS__
-#define IF_NOT_FEATURE_FIND_TYPE(...)
-#define CONFIG_FEATURE_FIND_XDEV 1
-#define ENABLE_FEATURE_FIND_XDEV 1
-#define IF_FEATURE_FIND_XDEV(...) __VA_ARGS__
-#define IF_NOT_FEATURE_FIND_XDEV(...)
-#define CONFIG_FEATURE_FIND_MAXDEPTH 1
-#define ENABLE_FEATURE_FIND_MAXDEPTH 1
-#define IF_FEATURE_FIND_MAXDEPTH(...) __VA_ARGS__
-#define IF_NOT_FEATURE_FIND_MAXDEPTH(...)
-#define CONFIG_FEATURE_FIND_NEWER 1
-#define ENABLE_FEATURE_FIND_NEWER 1
-#define IF_FEATURE_FIND_NEWER(...) __VA_ARGS__
-#define IF_NOT_FEATURE_FIND_NEWER(...)
-#undef CONFIG_FEATURE_FIND_INUM
-#define ENABLE_FEATURE_FIND_INUM 0
-#define IF_FEATURE_FIND_INUM(...)
-#define IF_NOT_FEATURE_FIND_INUM(...) __VA_ARGS__
-#define CONFIG_FEATURE_FIND_EXEC 1
-#define ENABLE_FEATURE_FIND_EXEC 1
-#define IF_FEATURE_FIND_EXEC(...) __VA_ARGS__
-#define IF_NOT_FEATURE_FIND_EXEC(...)
-#define CONFIG_FEATURE_FIND_USER 1
-#define ENABLE_FEATURE_FIND_USER 1
-#define IF_FEATURE_FIND_USER(...) __VA_ARGS__
-#define IF_NOT_FEATURE_FIND_USER(...)
-#define CONFIG_FEATURE_FIND_GROUP 1
-#define ENABLE_FEATURE_FIND_GROUP 1
-#define IF_FEATURE_FIND_GROUP(...) __VA_ARGS__
-#define IF_NOT_FEATURE_FIND_GROUP(...)
-#define CONFIG_FEATURE_FIND_NOT 1
-#define ENABLE_FEATURE_FIND_NOT 1
-#define IF_FEATURE_FIND_NOT(...) __VA_ARGS__
-#define IF_NOT_FEATURE_FIND_NOT(...)
-#define CONFIG_FEATURE_FIND_DEPTH 1
-#define ENABLE_FEATURE_FIND_DEPTH 1
-#define IF_FEATURE_FIND_DEPTH(...) __VA_ARGS__
-#define IF_NOT_FEATURE_FIND_DEPTH(...)
-#define CONFIG_FEATURE_FIND_PAREN 1
-#define ENABLE_FEATURE_FIND_PAREN 1
-#define IF_FEATURE_FIND_PAREN(...) __VA_ARGS__
-#define IF_NOT_FEATURE_FIND_PAREN(...)
-#define CONFIG_FEATURE_FIND_SIZE 1
-#define ENABLE_FEATURE_FIND_SIZE 1
-#define IF_FEATURE_FIND_SIZE(...) __VA_ARGS__
-#define IF_NOT_FEATURE_FIND_SIZE(...)
-#define CONFIG_FEATURE_FIND_PRUNE 1
-#define ENABLE_FEATURE_FIND_PRUNE 1
-#define IF_FEATURE_FIND_PRUNE(...) __VA_ARGS__
-#define IF_NOT_FEATURE_FIND_PRUNE(...)
-#undef CONFIG_FEATURE_FIND_DELETE
-#define ENABLE_FEATURE_FIND_DELETE 0
-#define IF_FEATURE_FIND_DELETE(...)
-#define IF_NOT_FEATURE_FIND_DELETE(...) __VA_ARGS__
-#define CONFIG_FEATURE_FIND_PATH 1
-#define ENABLE_FEATURE_FIND_PATH 1
-#define IF_FEATURE_FIND_PATH(...) __VA_ARGS__
-#define IF_NOT_FEATURE_FIND_PATH(...)
-#define CONFIG_FEATURE_FIND_REGEX 1
-#define ENABLE_FEATURE_FIND_REGEX 1
-#define IF_FEATURE_FIND_REGEX(...) __VA_ARGS__
-#define IF_NOT_FEATURE_FIND_REGEX(...)
-#undef CONFIG_FEATURE_FIND_CONTEXT
-#define ENABLE_FEATURE_FIND_CONTEXT 0
-#define IF_FEATURE_FIND_CONTEXT(...)
-#define IF_NOT_FEATURE_FIND_CONTEXT(...) __VA_ARGS__
-#undef CONFIG_FEATURE_FIND_LINKS
-#define ENABLE_FEATURE_FIND_LINKS 0
-#define IF_FEATURE_FIND_LINKS(...)
-#define IF_NOT_FEATURE_FIND_LINKS(...) __VA_ARGS__
-#define CONFIG_GREP 1
-#define ENABLE_GREP 1
-#define IF_GREP(...) __VA_ARGS__
-#define IF_NOT_GREP(...)
-#define CONFIG_FEATURE_GREP_EGREP_ALIAS 1
-#define ENABLE_FEATURE_GREP_EGREP_ALIAS 1
-#define IF_FEATURE_GREP_EGREP_ALIAS(...) __VA_ARGS__
-#define IF_NOT_FEATURE_GREP_EGREP_ALIAS(...)
-#define CONFIG_FEATURE_GREP_FGREP_ALIAS 1
-#define ENABLE_FEATURE_GREP_FGREP_ALIAS 1
-#define IF_FEATURE_GREP_FGREP_ALIAS(...) __VA_ARGS__
-#define IF_NOT_FEATURE_GREP_FGREP_ALIAS(...)
-#define CONFIG_FEATURE_GREP_CONTEXT 1
-#define ENABLE_FEATURE_GREP_CONTEXT 1
-#define IF_FEATURE_GREP_CONTEXT(...) __VA_ARGS__
-#define IF_NOT_FEATURE_GREP_CONTEXT(...)
-#define CONFIG_XARGS 1
-#define ENABLE_XARGS 1
-#define IF_XARGS(...) __VA_ARGS__
-#define IF_NOT_XARGS(...)
-#define CONFIG_FEATURE_XARGS_SUPPORT_CONFIRMATION 1
-#define ENABLE_FEATURE_XARGS_SUPPORT_CONFIRMATION 1
-#define IF_FEATURE_XARGS_SUPPORT_CONFIRMATION(...) __VA_ARGS__
-#define IF_NOT_FEATURE_XARGS_SUPPORT_CONFIRMATION(...)
-#define CONFIG_FEATURE_XARGS_SUPPORT_QUOTES 1
-#define ENABLE_FEATURE_XARGS_SUPPORT_QUOTES 1
-#define IF_FEATURE_XARGS_SUPPORT_QUOTES(...) __VA_ARGS__
-#define IF_NOT_FEATURE_XARGS_SUPPORT_QUOTES(...)
-#undef CONFIG_FEATURE_XARGS_SUPPORT_TERMOPT
-#define ENABLE_FEATURE_XARGS_SUPPORT_TERMOPT 0
-#define IF_FEATURE_XARGS_SUPPORT_TERMOPT(...)
-#define IF_NOT_FEATURE_XARGS_SUPPORT_TERMOPT(...) __VA_ARGS__
-#define CONFIG_FEATURE_XARGS_SUPPORT_ZERO_TERM 1
-#define ENABLE_FEATURE_XARGS_SUPPORT_ZERO_TERM 1
-#define IF_FEATURE_XARGS_SUPPORT_ZERO_TERM(...) __VA_ARGS__
-#define IF_NOT_FEATURE_XARGS_SUPPORT_ZERO_TERM(...)
-
-/*
- * Init Utilities
- */
-#undef CONFIG_BOOTCHARTD
-#define ENABLE_BOOTCHARTD 0
-#define IF_BOOTCHARTD(...)
-#define IF_NOT_BOOTCHARTD(...) __VA_ARGS__
-#undef CONFIG_FEATURE_BOOTCHARTD_BLOATED_HEADER
-#define ENABLE_FEATURE_BOOTCHARTD_BLOATED_HEADER 0
-#define IF_FEATURE_BOOTCHARTD_BLOATED_HEADER(...)
-#define IF_NOT_FEATURE_BOOTCHARTD_BLOATED_HEADER(...) __VA_ARGS__
-#undef CONFIG_FEATURE_BOOTCHARTD_CONFIG_FILE
-#define ENABLE_FEATURE_BOOTCHARTD_CONFIG_FILE 0
-#define IF_FEATURE_BOOTCHARTD_CONFIG_FILE(...)
-#define IF_NOT_FEATURE_BOOTCHARTD_CONFIG_FILE(...) __VA_ARGS__
-#undef CONFIG_HALT
-#define ENABLE_HALT 0
-#define IF_HALT(...)
-#define IF_NOT_HALT(...) __VA_ARGS__
-#undef CONFIG_FEATURE_CALL_TELINIT
-#define ENABLE_FEATURE_CALL_TELINIT 0
-#define IF_FEATURE_CALL_TELINIT(...)
-#define IF_NOT_FEATURE_CALL_TELINIT(...) __VA_ARGS__
-#define CONFIG_TELINIT_PATH ""
-#define ENABLE_TELINIT_PATH 1
-#define IF_TELINIT_PATH(...) __VA_ARGS__
-#define IF_NOT_TELINIT_PATH(...)
-#undef CONFIG_INIT
-#define ENABLE_INIT 0
-#define IF_INIT(...)
-#define IF_NOT_INIT(...) __VA_ARGS__
-#undef CONFIG_FEATURE_USE_INITTAB
-#define ENABLE_FEATURE_USE_INITTAB 0
-#define IF_FEATURE_USE_INITTAB(...)
-#define IF_NOT_FEATURE_USE_INITTAB(...) __VA_ARGS__
-#undef CONFIG_FEATURE_KILL_REMOVED
-#define ENABLE_FEATURE_KILL_REMOVED 0
-#define IF_FEATURE_KILL_REMOVED(...)
-#define IF_NOT_FEATURE_KILL_REMOVED(...) __VA_ARGS__
-#define CONFIG_FEATURE_KILL_DELAY 0
-#define ENABLE_FEATURE_KILL_DELAY 1
-#define IF_FEATURE_KILL_DELAY(...) __VA_ARGS__
-#define IF_NOT_FEATURE_KILL_DELAY(...)
-#undef CONFIG_FEATURE_INIT_SCTTY
-#define ENABLE_FEATURE_INIT_SCTTY 0
-#define IF_FEATURE_INIT_SCTTY(...)
-#define IF_NOT_FEATURE_INIT_SCTTY(...) __VA_ARGS__
-#undef CONFIG_FEATURE_INIT_SYSLOG
-#define ENABLE_FEATURE_INIT_SYSLOG 0
-#define IF_FEATURE_INIT_SYSLOG(...)
-#define IF_NOT_FEATURE_INIT_SYSLOG(...) __VA_ARGS__
-#undef CONFIG_FEATURE_EXTRA_QUIET
-#define ENABLE_FEATURE_EXTRA_QUIET 0
-#define IF_FEATURE_EXTRA_QUIET(...)
-#define IF_NOT_FEATURE_EXTRA_QUIET(...) __VA_ARGS__
-#undef CONFIG_FEATURE_INIT_COREDUMPS
-#define ENABLE_FEATURE_INIT_COREDUMPS 0
-#define IF_FEATURE_INIT_COREDUMPS(...)
-#define IF_NOT_FEATURE_INIT_COREDUMPS(...) __VA_ARGS__
-#undef CONFIG_FEATURE_INITRD
-#define ENABLE_FEATURE_INITRD 0
-#define IF_FEATURE_INITRD(...)
-#define IF_NOT_FEATURE_INITRD(...) __VA_ARGS__
-#define CONFIG_INIT_TERMINAL_TYPE ""
-#define ENABLE_INIT_TERMINAL_TYPE 1
-#define IF_INIT_TERMINAL_TYPE(...) __VA_ARGS__
-#define IF_NOT_INIT_TERMINAL_TYPE(...)
-#undef CONFIG_MESG
-#define ENABLE_MESG 0
-#define IF_MESG(...)
-#define IF_NOT_MESG(...) __VA_ARGS__
-#undef CONFIG_FEATURE_MESG_ENABLE_ONLY_GROUP
-#define ENABLE_FEATURE_MESG_ENABLE_ONLY_GROUP 0
-#define IF_FEATURE_MESG_ENABLE_ONLY_GROUP(...)
-#define IF_NOT_FEATURE_MESG_ENABLE_ONLY_GROUP(...) __VA_ARGS__
-
-/*
- * Login/Password Management Utilities
- */
-#undef CONFIG_ADD_SHELL
-#define ENABLE_ADD_SHELL 0
-#define IF_ADD_SHELL(...)
-#define IF_NOT_ADD_SHELL(...) __VA_ARGS__
-#undef CONFIG_REMOVE_SHELL
-#define ENABLE_REMOVE_SHELL 0
-#define IF_REMOVE_SHELL(...)
-#define IF_NOT_REMOVE_SHELL(...) __VA_ARGS__
-#undef CONFIG_FEATURE_SHADOWPASSWDS
-#define ENABLE_FEATURE_SHADOWPASSWDS 0
-#define IF_FEATURE_SHADOWPASSWDS(...)
-#define IF_NOT_FEATURE_SHADOWPASSWDS(...) __VA_ARGS__
-#undef CONFIG_USE_BB_PWD_GRP
-#define ENABLE_USE_BB_PWD_GRP 0
-#define IF_USE_BB_PWD_GRP(...)
-#define IF_NOT_USE_BB_PWD_GRP(...) __VA_ARGS__
-#undef CONFIG_USE_BB_SHADOW
-#define ENABLE_USE_BB_SHADOW 0
-#define IF_USE_BB_SHADOW(...)
-#define IF_NOT_USE_BB_SHADOW(...) __VA_ARGS__
-#define CONFIG_USE_BB_CRYPT 1
-#define ENABLE_USE_BB_CRYPT 1
-#define IF_USE_BB_CRYPT(...) __VA_ARGS__
-#define IF_NOT_USE_BB_CRYPT(...)
-#undef CONFIG_USE_BB_CRYPT_SHA
-#define ENABLE_USE_BB_CRYPT_SHA 0
-#define IF_USE_BB_CRYPT_SHA(...)
-#define IF_NOT_USE_BB_CRYPT_SHA(...) __VA_ARGS__
-#undef CONFIG_ADDUSER
-#define ENABLE_ADDUSER 0
-#define IF_ADDUSER(...)
-#define IF_NOT_ADDUSER(...) __VA_ARGS__
-#undef CONFIG_FEATURE_ADDUSER_LONG_OPTIONS
-#define ENABLE_FEATURE_ADDUSER_LONG_OPTIONS 0
-#define IF_FEATURE_ADDUSER_LONG_OPTIONS(...)
-#define IF_NOT_FEATURE_ADDUSER_LONG_OPTIONS(...) __VA_ARGS__
-#undef CONFIG_FEATURE_CHECK_NAMES
-#define ENABLE_FEATURE_CHECK_NAMES 0
-#define IF_FEATURE_CHECK_NAMES(...)
-#define IF_NOT_FEATURE_CHECK_NAMES(...) __VA_ARGS__
-#define CONFIG_FIRST_SYSTEM_ID 0
-#define ENABLE_FIRST_SYSTEM_ID 1
-#define IF_FIRST_SYSTEM_ID(...) __VA_ARGS__
-#define IF_NOT_FIRST_SYSTEM_ID(...)
-#define CONFIG_LAST_SYSTEM_ID 0
-#define ENABLE_LAST_SYSTEM_ID 1
-#define IF_LAST_SYSTEM_ID(...) __VA_ARGS__
-#define IF_NOT_LAST_SYSTEM_ID(...)
-#undef CONFIG_ADDGROUP
-#define ENABLE_ADDGROUP 0
-#define IF_ADDGROUP(...)
-#define IF_NOT_ADDGROUP(...) __VA_ARGS__
-#undef CONFIG_FEATURE_ADDGROUP_LONG_OPTIONS
-#define ENABLE_FEATURE_ADDGROUP_LONG_OPTIONS 0
-#define IF_FEATURE_ADDGROUP_LONG_OPTIONS(...)
-#define IF_NOT_FEATURE_ADDGROUP_LONG_OPTIONS(...) __VA_ARGS__
-#undef CONFIG_FEATURE_ADDUSER_TO_GROUP
-#define ENABLE_FEATURE_ADDUSER_TO_GROUP 0
-#define IF_FEATURE_ADDUSER_TO_GROUP(...)
-#define IF_NOT_FEATURE_ADDUSER_TO_GROUP(...) __VA_ARGS__
-#undef CONFIG_DELUSER
-#define ENABLE_DELUSER 0
-#define IF_DELUSER(...)
-#define IF_NOT_DELUSER(...) __VA_ARGS__
-#undef CONFIG_DELGROUP
-#define ENABLE_DELGROUP 0
-#define IF_DELGROUP(...)
-#define IF_NOT_DELGROUP(...) __VA_ARGS__
-#undef CONFIG_FEATURE_DEL_USER_FROM_GROUP
-#define ENABLE_FEATURE_DEL_USER_FROM_GROUP 0
-#define IF_FEATURE_DEL_USER_FROM_GROUP(...)
-#define IF_NOT_FEATURE_DEL_USER_FROM_GROUP(...) __VA_ARGS__
-#undef CONFIG_GETTY
-#define ENABLE_GETTY 0
-#define IF_GETTY(...)
-#define IF_NOT_GETTY(...) __VA_ARGS__
-#undef CONFIG_LOGIN
-#define ENABLE_LOGIN 0
-#define IF_LOGIN(...)
-#define IF_NOT_LOGIN(...) __VA_ARGS__
-#undef CONFIG_LOGIN_SESSION_AS_CHILD
-#define ENABLE_LOGIN_SESSION_AS_CHILD 0
-#define IF_LOGIN_SESSION_AS_CHILD(...)
-#define IF_NOT_LOGIN_SESSION_AS_CHILD(...) __VA_ARGS__
-#undef CONFIG_PAM
-#define ENABLE_PAM 0
-#define IF_PAM(...)
-#define IF_NOT_PAM(...) __VA_ARGS__
-#undef CONFIG_LOGIN_SCRIPTS
-#define ENABLE_LOGIN_SCRIPTS 0
-#define IF_LOGIN_SCRIPTS(...)
-#define IF_NOT_LOGIN_SCRIPTS(...) __VA_ARGS__
-#undef CONFIG_FEATURE_NOLOGIN
-#define ENABLE_FEATURE_NOLOGIN 0
-#define IF_FEATURE_NOLOGIN(...)
-#define IF_NOT_FEATURE_NOLOGIN(...) __VA_ARGS__
-#undef CONFIG_FEATURE_SECURETTY
-#define ENABLE_FEATURE_SECURETTY 0
-#define IF_FEATURE_SECURETTY(...)
-#define IF_NOT_FEATURE_SECURETTY(...) __VA_ARGS__
-#undef CONFIG_PASSWD
-#define ENABLE_PASSWD 0
-#define IF_PASSWD(...)
-#define IF_NOT_PASSWD(...) __VA_ARGS__
-#undef CONFIG_FEATURE_PASSWD_WEAK_CHECK
-#define ENABLE_FEATURE_PASSWD_WEAK_CHECK 0
-#define IF_FEATURE_PASSWD_WEAK_CHECK(...)
-#define IF_NOT_FEATURE_PASSWD_WEAK_CHECK(...) __VA_ARGS__
-#undef CONFIG_CRYPTPW
-#define ENABLE_CRYPTPW 0
-#define IF_CRYPTPW(...)
-#define IF_NOT_CRYPTPW(...) __VA_ARGS__
-#undef CONFIG_CHPASSWD
-#define ENABLE_CHPASSWD 0
-#define IF_CHPASSWD(...)
-#define IF_NOT_CHPASSWD(...) __VA_ARGS__
-#define CONFIG_FEATURE_DEFAULT_PASSWD_ALGO ""
-#define ENABLE_FEATURE_DEFAULT_PASSWD_ALGO 1
-#define IF_FEATURE_DEFAULT_PASSWD_ALGO(...) __VA_ARGS__
-#define IF_NOT_FEATURE_DEFAULT_PASSWD_ALGO(...)
-#undef CONFIG_SU
-#define ENABLE_SU 0
-#define IF_SU(...)
-#define IF_NOT_SU(...) __VA_ARGS__
-#undef CONFIG_FEATURE_SU_SYSLOG
-#define ENABLE_FEATURE_SU_SYSLOG 0
-#define IF_FEATURE_SU_SYSLOG(...)
-#define IF_NOT_FEATURE_SU_SYSLOG(...) __VA_ARGS__
-#undef CONFIG_FEATURE_SU_CHECKS_SHELLS
-#define ENABLE_FEATURE_SU_CHECKS_SHELLS 0
-#define IF_FEATURE_SU_CHECKS_SHELLS(...)
-#define IF_NOT_FEATURE_SU_CHECKS_SHELLS(...) __VA_ARGS__
-#undef CONFIG_SULOGIN
-#define ENABLE_SULOGIN 0
-#define IF_SULOGIN(...)
-#define IF_NOT_SULOGIN(...) __VA_ARGS__
-#undef CONFIG_VLOCK
-#define ENABLE_VLOCK 0
-#define IF_VLOCK(...)
-#define IF_NOT_VLOCK(...) __VA_ARGS__
-
-/*
- * Linux Ext2 FS Progs
- */
-#define CONFIG_CHATTR 1
-#define ENABLE_CHATTR 1
-#define IF_CHATTR(...) __VA_ARGS__
-#define IF_NOT_CHATTR(...)
-#undef CONFIG_FSCK
-#define ENABLE_FSCK 0
-#define IF_FSCK(...)
-#define IF_NOT_FSCK(...) __VA_ARGS__
-#define CONFIG_LSATTR 1
-#define ENABLE_LSATTR 1
-#define IF_LSATTR(...) __VA_ARGS__
-#define IF_NOT_LSATTR(...)
-#define CONFIG_TUNE2FS 1
-#define ENABLE_TUNE2FS 1
-#define IF_TUNE2FS(...) __VA_ARGS__
-#define IF_NOT_TUNE2FS(...)
-
-/*
- * Linux Module Utilities
- */
-#define CONFIG_MODINFO 1
-#define ENABLE_MODINFO 1
-#define IF_MODINFO(...) __VA_ARGS__
-#define IF_NOT_MODINFO(...)
-#define CONFIG_MODPROBE_SMALL 1
-#define ENABLE_MODPROBE_SMALL 1
-#define IF_MODPROBE_SMALL(...) __VA_ARGS__
-#define IF_NOT_MODPROBE_SMALL(...)
-#define CONFIG_FEATURE_MODPROBE_SMALL_OPTIONS_ON_CMDLINE 1
-#define ENABLE_FEATURE_MODPROBE_SMALL_OPTIONS_ON_CMDLINE 1
-#define IF_FEATURE_MODPROBE_SMALL_OPTIONS_ON_CMDLINE(...) __VA_ARGS__
-#define IF_NOT_FEATURE_MODPROBE_SMALL_OPTIONS_ON_CMDLINE(...)
-#undef CONFIG_FEATURE_MODPROBE_SMALL_CHECK_ALREADY_LOADED
-#define ENABLE_FEATURE_MODPROBE_SMALL_CHECK_ALREADY_LOADED 0
-#define IF_FEATURE_MODPROBE_SMALL_CHECK_ALREADY_LOADED(...)
-#define IF_NOT_FEATURE_MODPROBE_SMALL_CHECK_ALREADY_LOADED(...) __VA_ARGS__
-#undef CONFIG_INSMOD
-#define ENABLE_INSMOD 0
-#define IF_INSMOD(...)
-#define IF_NOT_INSMOD(...) __VA_ARGS__
-#undef CONFIG_RMMOD
-#define ENABLE_RMMOD 0
-#define IF_RMMOD(...)
-#define IF_NOT_RMMOD(...) __VA_ARGS__
-#undef CONFIG_LSMOD
-#define ENABLE_LSMOD 0
-#define IF_LSMOD(...)
-#define IF_NOT_LSMOD(...) __VA_ARGS__
-#undef CONFIG_FEATURE_LSMOD_PRETTY_2_6_OUTPUT
-#define ENABLE_FEATURE_LSMOD_PRETTY_2_6_OUTPUT 0
-#define IF_FEATURE_LSMOD_PRETTY_2_6_OUTPUT(...)
-#define IF_NOT_FEATURE_LSMOD_PRETTY_2_6_OUTPUT(...) __VA_ARGS__
-#undef CONFIG_MODPROBE
-#define ENABLE_MODPROBE 0
-#define IF_MODPROBE(...)
-#define IF_NOT_MODPROBE(...) __VA_ARGS__
-#undef CONFIG_FEATURE_MODPROBE_BLACKLIST
-#define ENABLE_FEATURE_MODPROBE_BLACKLIST 0
-#define IF_FEATURE_MODPROBE_BLACKLIST(...)
-#define IF_NOT_FEATURE_MODPROBE_BLACKLIST(...) __VA_ARGS__
-#undef CONFIG_DEPMOD
-#define ENABLE_DEPMOD 0
-#define IF_DEPMOD(...)
-#define IF_NOT_DEPMOD(...) __VA_ARGS__
-
-/*
- * Options common to multiple modutils
- */
-#undef CONFIG_FEATURE_2_4_MODULES
-#define ENABLE_FEATURE_2_4_MODULES 0
-#define IF_FEATURE_2_4_MODULES(...)
-#define IF_NOT_FEATURE_2_4_MODULES(...) __VA_ARGS__
-#define CONFIG_FEATURE_INSMOD_TRY_MMAP 1
-#define ENABLE_FEATURE_INSMOD_TRY_MMAP 1
-#define IF_FEATURE_INSMOD_TRY_MMAP(...) __VA_ARGS__
-#define IF_NOT_FEATURE_INSMOD_TRY_MMAP(...)
-#undef CONFIG_FEATURE_INSMOD_VERSION_CHECKING
-#define ENABLE_FEATURE_INSMOD_VERSION_CHECKING 0
-#define IF_FEATURE_INSMOD_VERSION_CHECKING(...)
-#define IF_NOT_FEATURE_INSMOD_VERSION_CHECKING(...) __VA_ARGS__
-#undef CONFIG_FEATURE_INSMOD_KSYMOOPS_SYMBOLS
-#define ENABLE_FEATURE_INSMOD_KSYMOOPS_SYMBOLS 0
-#define IF_FEATURE_INSMOD_KSYMOOPS_SYMBOLS(...)
-#define IF_NOT_FEATURE_INSMOD_KSYMOOPS_SYMBOLS(...) __VA_ARGS__
-#undef CONFIG_FEATURE_INSMOD_LOADINKMEM
-#define ENABLE_FEATURE_INSMOD_LOADINKMEM 0
-#define IF_FEATURE_INSMOD_LOADINKMEM(...)
-#define IF_NOT_FEATURE_INSMOD_LOADINKMEM(...) __VA_ARGS__
-#undef CONFIG_FEATURE_INSMOD_LOAD_MAP
-#define ENABLE_FEATURE_INSMOD_LOAD_MAP 0
-#define IF_FEATURE_INSMOD_LOAD_MAP(...)
-#define IF_NOT_FEATURE_INSMOD_LOAD_MAP(...) __VA_ARGS__
-#undef CONFIG_FEATURE_INSMOD_LOAD_MAP_FULL
-#define ENABLE_FEATURE_INSMOD_LOAD_MAP_FULL 0
-#define IF_FEATURE_INSMOD_LOAD_MAP_FULL(...)
-#define IF_NOT_FEATURE_INSMOD_LOAD_MAP_FULL(...) __VA_ARGS__
-#undef CONFIG_FEATURE_CHECK_TAINTED_MODULE
-#define ENABLE_FEATURE_CHECK_TAINTED_MODULE 0
-#define IF_FEATURE_CHECK_TAINTED_MODULE(...)
-#define IF_NOT_FEATURE_CHECK_TAINTED_MODULE(...) __VA_ARGS__
-#undef CONFIG_FEATURE_MODUTILS_ALIAS
-#define ENABLE_FEATURE_MODUTILS_ALIAS 0
-#define IF_FEATURE_MODUTILS_ALIAS(...)
-#define IF_NOT_FEATURE_MODUTILS_ALIAS(...) __VA_ARGS__
-#undef CONFIG_FEATURE_MODUTILS_SYMBOLS
-#define ENABLE_FEATURE_MODUTILS_SYMBOLS 0
-#define IF_FEATURE_MODUTILS_SYMBOLS(...)
-#define IF_NOT_FEATURE_MODUTILS_SYMBOLS(...) __VA_ARGS__
-#define CONFIG_DEFAULT_DEPMOD_FILE "modules.dep"
-#define ENABLE_DEFAULT_DEPMOD_FILE 1
-#define IF_DEFAULT_DEPMOD_FILE(...) __VA_ARGS__
-#define IF_NOT_DEFAULT_DEPMOD_FILE(...)
-
-/*
- * Linux System Utilities
- */
-#define CONFIG_BLOCKDEV 1
-#define ENABLE_BLOCKDEV 1
-#define IF_BLOCKDEV(...) __VA_ARGS__
-#define IF_NOT_BLOCKDEV(...)
-#undef CONFIG_MDEV
-#define ENABLE_MDEV 0
-#define IF_MDEV(...)
-#define IF_NOT_MDEV(...) __VA_ARGS__
-#undef CONFIG_FEATURE_MDEV_CONF
-#define ENABLE_FEATURE_MDEV_CONF 0
-#define IF_FEATURE_MDEV_CONF(...)
-#define IF_NOT_FEATURE_MDEV_CONF(...) __VA_ARGS__
-#undef CONFIG_FEATURE_MDEV_RENAME
-#define ENABLE_FEATURE_MDEV_RENAME 0
-#define IF_FEATURE_MDEV_RENAME(...)
-#define IF_NOT_FEATURE_MDEV_RENAME(...) __VA_ARGS__
-#undef CONFIG_FEATURE_MDEV_RENAME_REGEXP
-#define ENABLE_FEATURE_MDEV_RENAME_REGEXP 0
-#define IF_FEATURE_MDEV_RENAME_REGEXP(...)
-#define IF_NOT_FEATURE_MDEV_RENAME_REGEXP(...) __VA_ARGS__
-#undef CONFIG_FEATURE_MDEV_EXEC
-#define ENABLE_FEATURE_MDEV_EXEC 0
-#define IF_FEATURE_MDEV_EXEC(...)
-#define IF_NOT_FEATURE_MDEV_EXEC(...) __VA_ARGS__
-#undef CONFIG_FEATURE_MDEV_LOAD_FIRMWARE
-#define ENABLE_FEATURE_MDEV_LOAD_FIRMWARE 0
-#define IF_FEATURE_MDEV_LOAD_FIRMWARE(...)
-#define IF_NOT_FEATURE_MDEV_LOAD_FIRMWARE(...) __VA_ARGS__
-#define CONFIG_REV 1
-#define ENABLE_REV 1
-#define IF_REV(...) __VA_ARGS__
-#define IF_NOT_REV(...)
-#undef CONFIG_ACPID
-#define ENABLE_ACPID 0
-#define IF_ACPID(...)
-#define IF_NOT_ACPID(...) __VA_ARGS__
-#undef CONFIG_FEATURE_ACPID_COMPAT
-#define ENABLE_FEATURE_ACPID_COMPAT 0
-#define IF_FEATURE_ACPID_COMPAT(...)
-#define IF_NOT_FEATURE_ACPID_COMPAT(...) __VA_ARGS__
-#define CONFIG_BLKID 1
-#define ENABLE_BLKID 1
-#define IF_BLKID(...) __VA_ARGS__
-#define IF_NOT_BLKID(...)
-#define CONFIG_FEATURE_BLKID_TYPE 1
-#define ENABLE_FEATURE_BLKID_TYPE 1
-#define IF_FEATURE_BLKID_TYPE(...) __VA_ARGS__
-#define IF_NOT_FEATURE_BLKID_TYPE(...)
-#define CONFIG_DMESG 1
-#define ENABLE_DMESG 1
-#define IF_DMESG(...) __VA_ARGS__
-#define IF_NOT_DMESG(...)
-#undef CONFIG_FEATURE_DMESG_PRETTY
-#define ENABLE_FEATURE_DMESG_PRETTY 0
-#define IF_FEATURE_DMESG_PRETTY(...)
-#define IF_NOT_FEATURE_DMESG_PRETTY(...) __VA_ARGS__
-#define CONFIG_FBSET 1
-#define ENABLE_FBSET 1
-#define IF_FBSET(...) __VA_ARGS__
-#define IF_NOT_FBSET(...)
-#define CONFIG_FEATURE_FBSET_FANCY 1
-#define ENABLE_FEATURE_FBSET_FANCY 1
-#define IF_FEATURE_FBSET_FANCY(...) __VA_ARGS__
-#define IF_NOT_FEATURE_FBSET_FANCY(...)
-#undef CONFIG_FEATURE_FBSET_READMODE
-#define ENABLE_FEATURE_FBSET_READMODE 0
-#define IF_FEATURE_FBSET_READMODE(...)
-#define IF_NOT_FEATURE_FBSET_READMODE(...) __VA_ARGS__
-#undef CONFIG_FDFLUSH
-#define ENABLE_FDFLUSH 0
-#define IF_FDFLUSH(...)
-#define IF_NOT_FDFLUSH(...) __VA_ARGS__
-#undef CONFIG_FDFORMAT
-#define ENABLE_FDFORMAT 0
-#define IF_FDFORMAT(...)
-#define IF_NOT_FDFORMAT(...) __VA_ARGS__
-#define CONFIG_FDISK 1
-#define ENABLE_FDISK 1
-#define IF_FDISK(...) __VA_ARGS__
-#define IF_NOT_FDISK(...)
-#undef CONFIG_FDISK_SUPPORT_LARGE_DISKS
-#define ENABLE_FDISK_SUPPORT_LARGE_DISKS 0
-#define IF_FDISK_SUPPORT_LARGE_DISKS(...)
-#define IF_NOT_FDISK_SUPPORT_LARGE_DISKS(...) __VA_ARGS__
-#define CONFIG_FEATURE_FDISK_WRITABLE 1
-#define ENABLE_FEATURE_FDISK_WRITABLE 1
-#define IF_FEATURE_FDISK_WRITABLE(...) __VA_ARGS__
-#define IF_NOT_FEATURE_FDISK_WRITABLE(...)
-#undef CONFIG_FEATURE_AIX_LABEL
-#define ENABLE_FEATURE_AIX_LABEL 0
-#define IF_FEATURE_AIX_LABEL(...)
-#define IF_NOT_FEATURE_AIX_LABEL(...) __VA_ARGS__
-#undef CONFIG_FEATURE_SGI_LABEL
-#define ENABLE_FEATURE_SGI_LABEL 0
-#define IF_FEATURE_SGI_LABEL(...)
-#define IF_NOT_FEATURE_SGI_LABEL(...) __VA_ARGS__
-#undef CONFIG_FEATURE_SUN_LABEL
-#define ENABLE_FEATURE_SUN_LABEL 0
-#define IF_FEATURE_SUN_LABEL(...)
-#define IF_NOT_FEATURE_SUN_LABEL(...) __VA_ARGS__
-#undef CONFIG_FEATURE_OSF_LABEL
-#define ENABLE_FEATURE_OSF_LABEL 0
-#define IF_FEATURE_OSF_LABEL(...)
-#define IF_NOT_FEATURE_OSF_LABEL(...) __VA_ARGS__
-#undef CONFIG_FEATURE_GPT_LABEL
-#define ENABLE_FEATURE_GPT_LABEL 0
-#define IF_FEATURE_GPT_LABEL(...)
-#define IF_NOT_FEATURE_GPT_LABEL(...) __VA_ARGS__
-#undef CONFIG_FEATURE_FDISK_ADVANCED
-#define ENABLE_FEATURE_FDISK_ADVANCED 0
-#define IF_FEATURE_FDISK_ADVANCED(...)
-#define IF_NOT_FEATURE_FDISK_ADVANCED(...) __VA_ARGS__
-#undef CONFIG_FINDFS
-#define ENABLE_FINDFS 0
-#define IF_FINDFS(...)
-#define IF_NOT_FINDFS(...) __VA_ARGS__
-#undef CONFIG_FLOCK
-#define ENABLE_FLOCK 0
-#define IF_FLOCK(...)
-#define IF_NOT_FLOCK(...) __VA_ARGS__
-#define CONFIG_FREERAMDISK 1
-#define ENABLE_FREERAMDISK 1
-#define IF_FREERAMDISK(...) __VA_ARGS__
-#define IF_NOT_FREERAMDISK(...)
-#undef CONFIG_FSCK_MINIX
-#define ENABLE_FSCK_MINIX 0
-#define IF_FSCK_MINIX(...)
-#define IF_NOT_FSCK_MINIX(...) __VA_ARGS__
-#define CONFIG_FSTRIM 1
-#define ENABLE_FSTRIM 1
-#define IF_FSTRIM(...) __VA_ARGS__
-#define IF_NOT_FSTRIM(...)
-#define CONFIG_MKFS_EXT2 1
-#define ENABLE_MKFS_EXT2 1
-#define IF_MKFS_EXT2(...) __VA_ARGS__
-#define IF_NOT_MKFS_EXT2(...)
-#undef CONFIG_MKFS_MINIX
-#define ENABLE_MKFS_MINIX 0
-#define IF_MKFS_MINIX(...)
-#define IF_NOT_MKFS_MINIX(...) __VA_ARGS__
-#undef CONFIG_FEATURE_MINIX2
-#define ENABLE_FEATURE_MINIX2 0
-#define IF_FEATURE_MINIX2(...)
-#define IF_NOT_FEATURE_MINIX2(...) __VA_ARGS__
-#undef CONFIG_MKFS_REISER
-#define ENABLE_MKFS_REISER 0
-#define IF_MKFS_REISER(...)
-#define IF_NOT_MKFS_REISER(...) __VA_ARGS__
-#define CONFIG_MKFS_VFAT 1
-#define ENABLE_MKFS_VFAT 1
-#define IF_MKFS_VFAT(...) __VA_ARGS__
-#define IF_NOT_MKFS_VFAT(...)
-#define CONFIG_GETOPT 1
-#define ENABLE_GETOPT 1
-#define IF_GETOPT(...) __VA_ARGS__
-#define IF_NOT_GETOPT(...)
-#undef CONFIG_FEATURE_GETOPT_LONG
-#define ENABLE_FEATURE_GETOPT_LONG 0
-#define IF_FEATURE_GETOPT_LONG(...)
-#define IF_NOT_FEATURE_GETOPT_LONG(...) __VA_ARGS__
-#define CONFIG_HEXDUMP 1
-#define ENABLE_HEXDUMP 1
-#define IF_HEXDUMP(...) __VA_ARGS__
-#define IF_NOT_HEXDUMP(...)
-#undef CONFIG_FEATURE_HEXDUMP_REVERSE
-#define ENABLE_FEATURE_HEXDUMP_REVERSE 0
-#define IF_FEATURE_HEXDUMP_REVERSE(...)
-#define IF_NOT_FEATURE_HEXDUMP_REVERSE(...) __VA_ARGS__
-#undef CONFIG_HD
-#define ENABLE_HD 0
-#define IF_HD(...)
-#define IF_NOT_HD(...) __VA_ARGS__
-#undef CONFIG_HWCLOCK
-#define ENABLE_HWCLOCK 0
-#define IF_HWCLOCK(...)
-#define IF_NOT_HWCLOCK(...) __VA_ARGS__
-#undef CONFIG_FEATURE_HWCLOCK_LONG_OPTIONS
-#define ENABLE_FEATURE_HWCLOCK_LONG_OPTIONS 0
-#define IF_FEATURE_HWCLOCK_LONG_OPTIONS(...)
-#define IF_NOT_FEATURE_HWCLOCK_LONG_OPTIONS(...) __VA_ARGS__
-#undef CONFIG_FEATURE_HWCLOCK_ADJTIME_FHS
-#define ENABLE_FEATURE_HWCLOCK_ADJTIME_FHS 0
-#define IF_FEATURE_HWCLOCK_ADJTIME_FHS(...)
-#define IF_NOT_FEATURE_HWCLOCK_ADJTIME_FHS(...) __VA_ARGS__
-#undef CONFIG_IPCRM
-#define ENABLE_IPCRM 0
-#define IF_IPCRM(...)
-#define IF_NOT_IPCRM(...) __VA_ARGS__
-#undef CONFIG_IPCS
-#define ENABLE_IPCS 0
-#define IF_IPCS(...)
-#define IF_NOT_IPCS(...) __VA_ARGS__
-#define CONFIG_LOSETUP 1
-#define ENABLE_LOSETUP 1
-#define IF_LOSETUP(...) __VA_ARGS__
-#define IF_NOT_LOSETUP(...)
-#define CONFIG_LSPCI 1
-#define ENABLE_LSPCI 1
-#define IF_LSPCI(...) __VA_ARGS__
-#define IF_NOT_LSPCI(...)
-#define CONFIG_LSUSB 1
-#define ENABLE_LSUSB 1
-#define IF_LSUSB(...) __VA_ARGS__
-#define IF_NOT_LSUSB(...)
-#define CONFIG_MKSWAP 1
-#define ENABLE_MKSWAP 1
-#define IF_MKSWAP(...) __VA_ARGS__
-#define IF_NOT_MKSWAP(...)
-#undef CONFIG_FEATURE_MKSWAP_UUID
-#define ENABLE_FEATURE_MKSWAP_UUID 0
-#define IF_FEATURE_MKSWAP_UUID(...)
-#define IF_NOT_FEATURE_MKSWAP_UUID(...) __VA_ARGS__
-#define CONFIG_MORE 1
-#define ENABLE_MORE 1
-#define IF_MORE(...) __VA_ARGS__
-#define IF_NOT_MORE(...)
-#define CONFIG_MOUNT 1
-#define ENABLE_MOUNT 1
-#define IF_MOUNT(...) __VA_ARGS__
-#define IF_NOT_MOUNT(...)
-#undef CONFIG_FEATURE_MOUNT_FAKE
-#define ENABLE_FEATURE_MOUNT_FAKE 0
-#define IF_FEATURE_MOUNT_FAKE(...)
-#define IF_NOT_FEATURE_MOUNT_FAKE(...) __VA_ARGS__
-#undef CONFIG_FEATURE_MOUNT_VERBOSE
-#define ENABLE_FEATURE_MOUNT_VERBOSE 0
-#define IF_FEATURE_MOUNT_VERBOSE(...)
-#define IF_NOT_FEATURE_MOUNT_VERBOSE(...) __VA_ARGS__
-#undef CONFIG_FEATURE_MOUNT_HELPERS
-#define ENABLE_FEATURE_MOUNT_HELPERS 0
-#define IF_FEATURE_MOUNT_HELPERS(...)
-#define IF_NOT_FEATURE_MOUNT_HELPERS(...) __VA_ARGS__
-#define CONFIG_FEATURE_MOUNT_LABEL 1
-#define ENABLE_FEATURE_MOUNT_LABEL 1
-#define IF_FEATURE_MOUNT_LABEL(...) __VA_ARGS__
-#define IF_NOT_FEATURE_MOUNT_LABEL(...)
-#undef CONFIG_FEATURE_MOUNT_NFS
-#define ENABLE_FEATURE_MOUNT_NFS 0
-#define IF_FEATURE_MOUNT_NFS(...)
-#define IF_NOT_FEATURE_MOUNT_NFS(...) __VA_ARGS__
-#define CONFIG_FEATURE_MOUNT_CIFS 1
-#define ENABLE_FEATURE_MOUNT_CIFS 1
-#define IF_FEATURE_MOUNT_CIFS(...) __VA_ARGS__
-#define IF_NOT_FEATURE_MOUNT_CIFS(...)
-#define CONFIG_FEATURE_MOUNT_FLAGS 1
-#define ENABLE_FEATURE_MOUNT_FLAGS 1
-#define IF_FEATURE_MOUNT_FLAGS(...) __VA_ARGS__
-#define IF_NOT_FEATURE_MOUNT_FLAGS(...)
-#define CONFIG_FEATURE_MOUNT_FSTAB 1
-#define ENABLE_FEATURE_MOUNT_FSTAB 1
-#define IF_FEATURE_MOUNT_FSTAB(...) __VA_ARGS__
-#define IF_NOT_FEATURE_MOUNT_FSTAB(...)
-#undef CONFIG_PIVOT_ROOT
-#define ENABLE_PIVOT_ROOT 0
-#define IF_PIVOT_ROOT(...)
-#define IF_NOT_PIVOT_ROOT(...) __VA_ARGS__
-#undef CONFIG_RDATE
-#define ENABLE_RDATE 0
-#define IF_RDATE(...)
-#define IF_NOT_RDATE(...) __VA_ARGS__
-#define CONFIG_RDEV 1
-#define ENABLE_RDEV 1
-#define IF_RDEV(...) __VA_ARGS__
-#define IF_NOT_RDEV(...)
-#undef CONFIG_READPROFILE
-#define ENABLE_READPROFILE 0
-#define IF_READPROFILE(...)
-#define IF_NOT_READPROFILE(...) __VA_ARGS__
-#undef CONFIG_RTCWAKE
-#define ENABLE_RTCWAKE 0
-#define IF_RTCWAKE(...)
-#define IF_NOT_RTCWAKE(...) __VA_ARGS__
-#undef CONFIG_SCRIPT
-#define ENABLE_SCRIPT 0
-#define IF_SCRIPT(...)
-#define IF_NOT_SCRIPT(...) __VA_ARGS__
-#undef CONFIG_SCRIPTREPLAY
-#define ENABLE_SCRIPTREPLAY 0
-#define IF_SCRIPTREPLAY(...)
-#define IF_NOT_SCRIPTREPLAY(...) __VA_ARGS__
-#undef CONFIG_SETARCH
-#define ENABLE_SETARCH 0
-#define IF_SETARCH(...)
-#define IF_NOT_SETARCH(...) __VA_ARGS__
-#define CONFIG_SWAPONOFF 1
-#define ENABLE_SWAPONOFF 1
-#define IF_SWAPONOFF(...) __VA_ARGS__
-#define IF_NOT_SWAPONOFF(...)
-#undef CONFIG_FEATURE_SWAPON_PRI
-#define ENABLE_FEATURE_SWAPON_PRI 0
-#define IF_FEATURE_SWAPON_PRI(...)
-#define IF_NOT_FEATURE_SWAPON_PRI(...) __VA_ARGS__
-#undef CONFIG_SWITCH_ROOT
-#define ENABLE_SWITCH_ROOT 0
-#define IF_SWITCH_ROOT(...)
-#define IF_NOT_SWITCH_ROOT(...) __VA_ARGS__
-#define CONFIG_UMOUNT 1
-#define ENABLE_UMOUNT 1
-#define IF_UMOUNT(...) __VA_ARGS__
-#define IF_NOT_UMOUNT(...)
-#undef CONFIG_FEATURE_UMOUNT_ALL
-#define ENABLE_FEATURE_UMOUNT_ALL 0
-#define IF_FEATURE_UMOUNT_ALL(...)
-#define IF_NOT_FEATURE_UMOUNT_ALL(...) __VA_ARGS__
-
-/*
- * Common options for mount/umount
- */
-#define CONFIG_FEATURE_MOUNT_LOOP 1
-#define ENABLE_FEATURE_MOUNT_LOOP 1
-#define IF_FEATURE_MOUNT_LOOP(...) __VA_ARGS__
-#define IF_NOT_FEATURE_MOUNT_LOOP(...)
-#undef CONFIG_FEATURE_MOUNT_LOOP_CREATE
-#define ENABLE_FEATURE_MOUNT_LOOP_CREATE 0
-#define IF_FEATURE_MOUNT_LOOP_CREATE(...)
-#define IF_NOT_FEATURE_MOUNT_LOOP_CREATE(...) __VA_ARGS__
-#undef CONFIG_FEATURE_MTAB_SUPPORT
-#define ENABLE_FEATURE_MTAB_SUPPORT 0
-#define IF_FEATURE_MTAB_SUPPORT(...)
-#define IF_NOT_FEATURE_MTAB_SUPPORT(...) __VA_ARGS__
-#define CONFIG_VOLUMEID 1
-#define ENABLE_VOLUMEID 1
-#define IF_VOLUMEID(...) __VA_ARGS__
-#define IF_NOT_VOLUMEID(...)
-
-/*
- * Filesystem/Volume identification
- */
-#define CONFIG_FEATURE_VOLUMEID_EXT 1
-#define ENABLE_FEATURE_VOLUMEID_EXT 1
-#define IF_FEATURE_VOLUMEID_EXT(...) __VA_ARGS__
-#define IF_NOT_FEATURE_VOLUMEID_EXT(...)
-#undef CONFIG_FEATURE_VOLUMEID_BTRFS
-#define ENABLE_FEATURE_VOLUMEID_BTRFS 0
-#define IF_FEATURE_VOLUMEID_BTRFS(...)
-#define IF_NOT_FEATURE_VOLUMEID_BTRFS(...) __VA_ARGS__
-#undef CONFIG_FEATURE_VOLUMEID_REISERFS
-#define ENABLE_FEATURE_VOLUMEID_REISERFS 0
-#define IF_FEATURE_VOLUMEID_REISERFS(...)
-#define IF_NOT_FEATURE_VOLUMEID_REISERFS(...) __VA_ARGS__
-#define CONFIG_FEATURE_VOLUMEID_FAT 1
-#define ENABLE_FEATURE_VOLUMEID_FAT 1
-#define IF_FEATURE_VOLUMEID_FAT(...) __VA_ARGS__
-#define IF_NOT_FEATURE_VOLUMEID_FAT(...)
-#define CONFIG_FEATURE_VOLUMEID_EXFAT 1
-#define ENABLE_FEATURE_VOLUMEID_EXFAT 1
-#define IF_FEATURE_VOLUMEID_EXFAT(...) __VA_ARGS__
-#define IF_NOT_FEATURE_VOLUMEID_EXFAT(...)
-#undef CONFIG_FEATURE_VOLUMEID_HFS
-#define ENABLE_FEATURE_VOLUMEID_HFS 0
-#define IF_FEATURE_VOLUMEID_HFS(...)
-#define IF_NOT_FEATURE_VOLUMEID_HFS(...) __VA_ARGS__
-#undef CONFIG_FEATURE_VOLUMEID_JFS
-#define ENABLE_FEATURE_VOLUMEID_JFS 0
-#define IF_FEATURE_VOLUMEID_JFS(...)
-#define IF_NOT_FEATURE_VOLUMEID_JFS(...) __VA_ARGS__
-#undef CONFIG_FEATURE_VOLUMEID_XFS
-#define ENABLE_FEATURE_VOLUMEID_XFS 0
-#define IF_FEATURE_VOLUMEID_XFS(...)
-#define IF_NOT_FEATURE_VOLUMEID_XFS(...) __VA_ARGS__
-#undef CONFIG_FEATURE_VOLUMEID_NILFS
-#define ENABLE_FEATURE_VOLUMEID_NILFS 0
-#define IF_FEATURE_VOLUMEID_NILFS(...)
-#define IF_NOT_FEATURE_VOLUMEID_NILFS(...) __VA_ARGS__
-#define CONFIG_FEATURE_VOLUMEID_NTFS 1
-#define ENABLE_FEATURE_VOLUMEID_NTFS 1
-#define IF_FEATURE_VOLUMEID_NTFS(...) __VA_ARGS__
-#define IF_NOT_FEATURE_VOLUMEID_NTFS(...)
-#define CONFIG_FEATURE_VOLUMEID_ISO9660 1
-#define ENABLE_FEATURE_VOLUMEID_ISO9660 1
-#define IF_FEATURE_VOLUMEID_ISO9660(...) __VA_ARGS__
-#define IF_NOT_FEATURE_VOLUMEID_ISO9660(...)
-#undef CONFIG_FEATURE_VOLUMEID_UDF
-#define ENABLE_FEATURE_VOLUMEID_UDF 0
-#define IF_FEATURE_VOLUMEID_UDF(...)
-#define IF_NOT_FEATURE_VOLUMEID_UDF(...) __VA_ARGS__
-#undef CONFIG_FEATURE_VOLUMEID_LUKS
-#define ENABLE_FEATURE_VOLUMEID_LUKS 0
-#define IF_FEATURE_VOLUMEID_LUKS(...)
-#define IF_NOT_FEATURE_VOLUMEID_LUKS(...) __VA_ARGS__
-#define CONFIG_FEATURE_VOLUMEID_LINUXSWAP 1
-#define ENABLE_FEATURE_VOLUMEID_LINUXSWAP 1
-#define IF_FEATURE_VOLUMEID_LINUXSWAP(...) __VA_ARGS__
-#define IF_NOT_FEATURE_VOLUMEID_LINUXSWAP(...)
-#undef CONFIG_FEATURE_VOLUMEID_CRAMFS
-#define ENABLE_FEATURE_VOLUMEID_CRAMFS 0
-#define IF_FEATURE_VOLUMEID_CRAMFS(...)
-#define IF_NOT_FEATURE_VOLUMEID_CRAMFS(...) __VA_ARGS__
-#undef CONFIG_FEATURE_VOLUMEID_ROMFS
-#define ENABLE_FEATURE_VOLUMEID_ROMFS 0
-#define IF_FEATURE_VOLUMEID_ROMFS(...)
-#define IF_NOT_FEATURE_VOLUMEID_ROMFS(...) __VA_ARGS__
-#define CONFIG_FEATURE_VOLUMEID_SQUASHFS 1
-#define ENABLE_FEATURE_VOLUMEID_SQUASHFS 1
-#define IF_FEATURE_VOLUMEID_SQUASHFS(...) __VA_ARGS__
-#define IF_NOT_FEATURE_VOLUMEID_SQUASHFS(...)
-#undef CONFIG_FEATURE_VOLUMEID_SYSV
-#define ENABLE_FEATURE_VOLUMEID_SYSV 0
-#define IF_FEATURE_VOLUMEID_SYSV(...)
-#define IF_NOT_FEATURE_VOLUMEID_SYSV(...) __VA_ARGS__
-#undef CONFIG_FEATURE_VOLUMEID_OCFS2
-#define ENABLE_FEATURE_VOLUMEID_OCFS2 0
-#define IF_FEATURE_VOLUMEID_OCFS2(...)
-#define IF_NOT_FEATURE_VOLUMEID_OCFS2(...) __VA_ARGS__
-#undef CONFIG_FEATURE_VOLUMEID_LINUXRAID
-#define ENABLE_FEATURE_VOLUMEID_LINUXRAID 0
-#define IF_FEATURE_VOLUMEID_LINUXRAID(...)
-#define IF_NOT_FEATURE_VOLUMEID_LINUXRAID(...) __VA_ARGS__
-
-/*
- * Miscellaneous Utilities
- */
-#undef CONFIG_CONSPY
-#define ENABLE_CONSPY 0
-#define IF_CONSPY(...)
-#define IF_NOT_CONSPY(...) __VA_ARGS__
-#define CONFIG_LESS 1
-#define ENABLE_LESS 1
-#define IF_LESS(...) __VA_ARGS__
-#define IF_NOT_LESS(...)
-#define CONFIG_FEATURE_LESS_MAXLINES 65536
-#define ENABLE_FEATURE_LESS_MAXLINES 1
-#define IF_FEATURE_LESS_MAXLINES(...) __VA_ARGS__
-#define IF_NOT_FEATURE_LESS_MAXLINES(...)
-#undef CONFIG_FEATURE_LESS_BRACKETS
-#define ENABLE_FEATURE_LESS_BRACKETS 0
-#define IF_FEATURE_LESS_BRACKETS(...)
-#define IF_NOT_FEATURE_LESS_BRACKETS(...) __VA_ARGS__
-#undef CONFIG_FEATURE_LESS_FLAGS
-#define ENABLE_FEATURE_LESS_FLAGS 0
-#define IF_FEATURE_LESS_FLAGS(...)
-#define IF_NOT_FEATURE_LESS_FLAGS(...) __VA_ARGS__
-#define CONFIG_FEATURE_LESS_MARKS 1
-#define ENABLE_FEATURE_LESS_MARKS 1
-#define IF_FEATURE_LESS_MARKS(...) __VA_ARGS__
-#define IF_NOT_FEATURE_LESS_MARKS(...)
-#define CONFIG_FEATURE_LESS_REGEXP 1
-#define ENABLE_FEATURE_LESS_REGEXP 1
-#define IF_FEATURE_LESS_REGEXP(...) __VA_ARGS__
-#define IF_NOT_FEATURE_LESS_REGEXP(...)
-#define CONFIG_FEATURE_LESS_WINCH 1
-#define ENABLE_FEATURE_LESS_WINCH 1
-#define IF_FEATURE_LESS_WINCH(...) __VA_ARGS__
-#define IF_NOT_FEATURE_LESS_WINCH(...)
-#undef CONFIG_FEATURE_LESS_ASK_TERMINAL
-#define ENABLE_FEATURE_LESS_ASK_TERMINAL 0
-#define IF_FEATURE_LESS_ASK_TERMINAL(...)
-#define IF_NOT_FEATURE_LESS_ASK_TERMINAL(...) __VA_ARGS__
-#undef CONFIG_FEATURE_LESS_DASHCMD
-#define ENABLE_FEATURE_LESS_DASHCMD 0
-#define IF_FEATURE_LESS_DASHCMD(...)
-#define IF_NOT_FEATURE_LESS_DASHCMD(...) __VA_ARGS__
-#undef CONFIG_FEATURE_LESS_LINENUMS
-#define ENABLE_FEATURE_LESS_LINENUMS 0
-#define IF_FEATURE_LESS_LINENUMS(...)
-#define IF_NOT_FEATURE_LESS_LINENUMS(...) __VA_ARGS__
-#define CONFIG_NANDWRITE 1
-#define ENABLE_NANDWRITE 1
-#define IF_NANDWRITE(...) __VA_ARGS__
-#define IF_NOT_NANDWRITE(...)
-#define CONFIG_NANDDUMP 1
-#define ENABLE_NANDDUMP 1
-#define IF_NANDDUMP(...) __VA_ARGS__
-#define IF_NOT_NANDDUMP(...)
-#define CONFIG_SETSERIAL 1
-#define ENABLE_SETSERIAL 1
-#define IF_SETSERIAL(...) __VA_ARGS__
-#define IF_NOT_SETSERIAL(...)
-#undef CONFIG_UBIATTACH
-#define ENABLE_UBIATTACH 0
-#define IF_UBIATTACH(...)
-#define IF_NOT_UBIATTACH(...) __VA_ARGS__
-#undef CONFIG_UBIDETACH
-#define ENABLE_UBIDETACH 0
-#define IF_UBIDETACH(...)
-#define IF_NOT_UBIDETACH(...) __VA_ARGS__
-#undef CONFIG_UBIMKVOL
-#define ENABLE_UBIMKVOL 0
-#define IF_UBIMKVOL(...)
-#define IF_NOT_UBIMKVOL(...) __VA_ARGS__
-#undef CONFIG_UBIRMVOL
-#define ENABLE_UBIRMVOL 0
-#define IF_UBIRMVOL(...)
-#define IF_NOT_UBIRMVOL(...) __VA_ARGS__
-#undef CONFIG_UBIRSVOL
-#define ENABLE_UBIRSVOL 0
-#define IF_UBIRSVOL(...)
-#define IF_NOT_UBIRSVOL(...) __VA_ARGS__
-#undef CONFIG_UBIUPDATEVOL
-#define ENABLE_UBIUPDATEVOL 0
-#define IF_UBIUPDATEVOL(...)
-#define IF_NOT_UBIUPDATEVOL(...) __VA_ARGS__
-#undef CONFIG_ADJTIMEX
-#define ENABLE_ADJTIMEX 0
-#define IF_ADJTIMEX(...)
-#define IF_NOT_ADJTIMEX(...) __VA_ARGS__
-#define CONFIG_BBCONFIG 1
-#define ENABLE_BBCONFIG 1
-#define IF_BBCONFIG(...) __VA_ARGS__
-#define IF_NOT_BBCONFIG(...)
-#define CONFIG_FEATURE_COMPRESS_BBCONFIG 1
-#define ENABLE_FEATURE_COMPRESS_BBCONFIG 1
-#define IF_FEATURE_COMPRESS_BBCONFIG(...) __VA_ARGS__
-#define IF_NOT_FEATURE_COMPRESS_BBCONFIG(...)
-#undef CONFIG_BEEP
-#define ENABLE_BEEP 0
-#define IF_BEEP(...)
-#define IF_NOT_BEEP(...) __VA_ARGS__
-#define CONFIG_FEATURE_BEEP_FREQ 0
-#define ENABLE_FEATURE_BEEP_FREQ 1
-#define IF_FEATURE_BEEP_FREQ(...) __VA_ARGS__
-#define IF_NOT_FEATURE_BEEP_FREQ(...)
-#define CONFIG_FEATURE_BEEP_LENGTH_MS 0
-#define ENABLE_FEATURE_BEEP_LENGTH_MS 1
-#define IF_FEATURE_BEEP_LENGTH_MS(...) __VA_ARGS__
-#define IF_NOT_FEATURE_BEEP_LENGTH_MS(...)
-#undef CONFIG_CHAT
-#define ENABLE_CHAT 0
-#define IF_CHAT(...)
-#define IF_NOT_CHAT(...) __VA_ARGS__
-#undef CONFIG_FEATURE_CHAT_NOFAIL
-#define ENABLE_FEATURE_CHAT_NOFAIL 0
-#define IF_FEATURE_CHAT_NOFAIL(...)
-#define IF_NOT_FEATURE_CHAT_NOFAIL(...) __VA_ARGS__
-#undef CONFIG_FEATURE_CHAT_TTY_HIFI
-#define ENABLE_FEATURE_CHAT_TTY_HIFI 0
-#define IF_FEATURE_CHAT_TTY_HIFI(...)
-#define IF_NOT_FEATURE_CHAT_TTY_HIFI(...) __VA_ARGS__
-#undef CONFIG_FEATURE_CHAT_IMPLICIT_CR
-#define ENABLE_FEATURE_CHAT_IMPLICIT_CR 0
-#define IF_FEATURE_CHAT_IMPLICIT_CR(...)
-#define IF_NOT_FEATURE_CHAT_IMPLICIT_CR(...) __VA_ARGS__
-#undef CONFIG_FEATURE_CHAT_SWALLOW_OPTS
-#define ENABLE_FEATURE_CHAT_SWALLOW_OPTS 0
-#define IF_FEATURE_CHAT_SWALLOW_OPTS(...)
-#define IF_NOT_FEATURE_CHAT_SWALLOW_OPTS(...) __VA_ARGS__
-#undef CONFIG_FEATURE_CHAT_SEND_ESCAPES
-#define ENABLE_FEATURE_CHAT_SEND_ESCAPES 0
-#define IF_FEATURE_CHAT_SEND_ESCAPES(...)
-#define IF_NOT_FEATURE_CHAT_SEND_ESCAPES(...) __VA_ARGS__
-#undef CONFIG_FEATURE_CHAT_VAR_ABORT_LEN
-#define ENABLE_FEATURE_CHAT_VAR_ABORT_LEN 0
-#define IF_FEATURE_CHAT_VAR_ABORT_LEN(...)
-#define IF_NOT_FEATURE_CHAT_VAR_ABORT_LEN(...) __VA_ARGS__
-#undef CONFIG_FEATURE_CHAT_CLR_ABORT
-#define ENABLE_FEATURE_CHAT_CLR_ABORT 0
-#define IF_FEATURE_CHAT_CLR_ABORT(...)
-#define IF_NOT_FEATURE_CHAT_CLR_ABORT(...) __VA_ARGS__
-#undef CONFIG_CHRT
-#define ENABLE_CHRT 0
-#define IF_CHRT(...)
-#define IF_NOT_CHRT(...) __VA_ARGS__
-#undef CONFIG_CROND
-#define ENABLE_CROND 0
-#define IF_CROND(...)
-#define IF_NOT_CROND(...) __VA_ARGS__
-#undef CONFIG_FEATURE_CROND_D
-#define ENABLE_FEATURE_CROND_D 0
-#define IF_FEATURE_CROND_D(...)
-#define IF_NOT_FEATURE_CROND_D(...) __VA_ARGS__
-#undef CONFIG_FEATURE_CROND_CALL_SENDMAIL
-#define ENABLE_FEATURE_CROND_CALL_SENDMAIL 0
-#define IF_FEATURE_CROND_CALL_SENDMAIL(...)
-#define IF_NOT_FEATURE_CROND_CALL_SENDMAIL(...) __VA_ARGS__
-#define CONFIG_FEATURE_CROND_DIR ""
-#define ENABLE_FEATURE_CROND_DIR 1
-#define IF_FEATURE_CROND_DIR(...) __VA_ARGS__
-#define IF_NOT_FEATURE_CROND_DIR(...)
-#undef CONFIG_CRONTAB
-#define ENABLE_CRONTAB 0
-#define IF_CRONTAB(...)
-#define IF_NOT_CRONTAB(...) __VA_ARGS__
-#define CONFIG_DC 1
-#define ENABLE_DC 1
-#define IF_DC(...) __VA_ARGS__
-#define IF_NOT_DC(...)
-#undef CONFIG_FEATURE_DC_LIBM
-#define ENABLE_FEATURE_DC_LIBM 0
-#define IF_FEATURE_DC_LIBM(...)
-#define IF_NOT_FEATURE_DC_LIBM(...) __VA_ARGS__
-#undef CONFIG_DEVFSD
-#define ENABLE_DEVFSD 0
-#define IF_DEVFSD(...)
-#define IF_NOT_DEVFSD(...) __VA_ARGS__
-#undef CONFIG_DEVFSD_MODLOAD
-#define ENABLE_DEVFSD_MODLOAD 0
-#define IF_DEVFSD_MODLOAD(...)
-#define IF_NOT_DEVFSD_MODLOAD(...) __VA_ARGS__
-#undef CONFIG_DEVFSD_FG_NP
-#define ENABLE_DEVFSD_FG_NP 0
-#define IF_DEVFSD_FG_NP(...)
-#define IF_NOT_DEVFSD_FG_NP(...) __VA_ARGS__
-#undef CONFIG_DEVFSD_VERBOSE
-#define ENABLE_DEVFSD_VERBOSE 0
-#define IF_DEVFSD_VERBOSE(...)
-#define IF_NOT_DEVFSD_VERBOSE(...) __VA_ARGS__
-#undef CONFIG_FEATURE_DEVFS
-#define ENABLE_FEATURE_DEVFS 0
-#define IF_FEATURE_DEVFS(...)
-#define IF_NOT_FEATURE_DEVFS(...) __VA_ARGS__
-#define CONFIG_DEVMEM 1
-#define ENABLE_DEVMEM 1
-#define IF_DEVMEM(...) __VA_ARGS__
-#define IF_NOT_DEVMEM(...)
-#undef CONFIG_EJECT
-#define ENABLE_EJECT 0
-#define IF_EJECT(...)
-#define IF_NOT_EJECT(...) __VA_ARGS__
-#undef CONFIG_FEATURE_EJECT_SCSI
-#define ENABLE_FEATURE_EJECT_SCSI 0
-#define IF_FEATURE_EJECT_SCSI(...)
-#define IF_NOT_FEATURE_EJECT_SCSI(...) __VA_ARGS__
-#undef CONFIG_FBSPLASH
-#define ENABLE_FBSPLASH 0
-#define IF_FBSPLASH(...)
-#define IF_NOT_FBSPLASH(...) __VA_ARGS__
-#undef CONFIG_FLASHCP
-#define ENABLE_FLASHCP 0
-#define IF_FLASHCP(...)
-#define IF_NOT_FLASHCP(...) __VA_ARGS__
-#undef CONFIG_FLASH_LOCK
-#define ENABLE_FLASH_LOCK 0
-#define IF_FLASH_LOCK(...)
-#define IF_NOT_FLASH_LOCK(...) __VA_ARGS__
-#undef CONFIG_FLASH_UNLOCK
-#define ENABLE_FLASH_UNLOCK 0
-#define IF_FLASH_UNLOCK(...)
-#define IF_NOT_FLASH_UNLOCK(...) __VA_ARGS__
-#undef CONFIG_FLASH_ERASEALL
-#define ENABLE_FLASH_ERASEALL 0
-#define IF_FLASH_ERASEALL(...)
-#define IF_NOT_FLASH_ERASEALL(...) __VA_ARGS__
-#undef CONFIG_IONICE
-#define ENABLE_IONICE 0
-#define IF_IONICE(...)
-#define IF_NOT_IONICE(...) __VA_ARGS__
-#undef CONFIG_INOTIFYD
-#define ENABLE_INOTIFYD 0
-#define IF_INOTIFYD(...)
-#define IF_NOT_INOTIFYD(...) __VA_ARGS__
-#undef CONFIG_LAST
-#define ENABLE_LAST 0
-#define IF_LAST(...)
-#define IF_NOT_LAST(...) __VA_ARGS__
-#undef CONFIG_FEATURE_LAST_SMALL
-#define ENABLE_FEATURE_LAST_SMALL 0
-#define IF_FEATURE_LAST_SMALL(...)
-#define IF_NOT_FEATURE_LAST_SMALL(...) __VA_ARGS__
-#undef CONFIG_FEATURE_LAST_FANCY
-#define ENABLE_FEATURE_LAST_FANCY 0
-#define IF_FEATURE_LAST_FANCY(...)
-#define IF_NOT_FEATURE_LAST_FANCY(...) __VA_ARGS__
-#undef CONFIG_HDPARM
-#define ENABLE_HDPARM 0
-#define IF_HDPARM(...)
-#define IF_NOT_HDPARM(...) __VA_ARGS__
-#undef CONFIG_FEATURE_HDPARM_GET_IDENTITY
-#define ENABLE_FEATURE_HDPARM_GET_IDENTITY 0
-#define IF_FEATURE_HDPARM_GET_IDENTITY(...)
-#define IF_NOT_FEATURE_HDPARM_GET_IDENTITY(...) __VA_ARGS__
-#undef CONFIG_FEATURE_HDPARM_HDIO_SCAN_HWIF
-#define ENABLE_FEATURE_HDPARM_HDIO_SCAN_HWIF 0
-#define IF_FEATURE_HDPARM_HDIO_SCAN_HWIF(...)
-#define IF_NOT_FEATURE_HDPARM_HDIO_SCAN_HWIF(...) __VA_ARGS__
-#undef CONFIG_FEATURE_HDPARM_HDIO_UNREGISTER_HWIF
-#define ENABLE_FEATURE_HDPARM_HDIO_UNREGISTER_HWIF 0
-#define IF_FEATURE_HDPARM_HDIO_UNREGISTER_HWIF(...)
-#define IF_NOT_FEATURE_HDPARM_HDIO_UNREGISTER_HWIF(...) __VA_ARGS__
-#undef CONFIG_FEATURE_HDPARM_HDIO_DRIVE_RESET
-#define ENABLE_FEATURE_HDPARM_HDIO_DRIVE_RESET 0
-#define IF_FEATURE_HDPARM_HDIO_DRIVE_RESET(...)
-#define IF_NOT_FEATURE_HDPARM_HDIO_DRIVE_RESET(...) __VA_ARGS__
-#undef CONFIG_FEATURE_HDPARM_HDIO_TRISTATE_HWIF
-#define ENABLE_FEATURE_HDPARM_HDIO_TRISTATE_HWIF 0
-#define IF_FEATURE_HDPARM_HDIO_TRISTATE_HWIF(...)
-#define IF_NOT_FEATURE_HDPARM_HDIO_TRISTATE_HWIF(...) __VA_ARGS__
-#undef CONFIG_FEATURE_HDPARM_HDIO_GETSET_DMA
-#define ENABLE_FEATURE_HDPARM_HDIO_GETSET_DMA 0
-#define IF_FEATURE_HDPARM_HDIO_GETSET_DMA(...)
-#define IF_NOT_FEATURE_HDPARM_HDIO_GETSET_DMA(...) __VA_ARGS__
-#define CONFIG_MAKEDEVS 1
-#define ENABLE_MAKEDEVS 1
-#define IF_MAKEDEVS(...) __VA_ARGS__
-#define IF_NOT_MAKEDEVS(...)
-#undef CONFIG_FEATURE_MAKEDEVS_LEAF
-#define ENABLE_FEATURE_MAKEDEVS_LEAF 0
-#define IF_FEATURE_MAKEDEVS_LEAF(...)
-#define IF_NOT_FEATURE_MAKEDEVS_LEAF(...) __VA_ARGS__
-#define CONFIG_FEATURE_MAKEDEVS_TABLE 1
-#define ENABLE_FEATURE_MAKEDEVS_TABLE 1
-#define IF_FEATURE_MAKEDEVS_TABLE(...) __VA_ARGS__
-#define IF_NOT_FEATURE_MAKEDEVS_TABLE(...)
-#undef CONFIG_MAN
-#define ENABLE_MAN 0
-#define IF_MAN(...)
-#define IF_NOT_MAN(...) __VA_ARGS__
-#undef CONFIG_MICROCOM
-#define ENABLE_MICROCOM 0
-#define IF_MICROCOM(...)
-#define IF_NOT_MICROCOM(...) __VA_ARGS__
-#define CONFIG_MOUNTPOINT 1
-#define ENABLE_MOUNTPOINT 1
-#define IF_MOUNTPOINT(...) __VA_ARGS__
-#define IF_NOT_MOUNTPOINT(...)
-#undef CONFIG_MT
-#define ENABLE_MT 0
-#define IF_MT(...)
-#define IF_NOT_MT(...) __VA_ARGS__
-#undef CONFIG_RAIDAUTORUN
-#define ENABLE_RAIDAUTORUN 0
-#define IF_RAIDAUTORUN(...)
-#define IF_NOT_RAIDAUTORUN(...) __VA_ARGS__
-#undef CONFIG_READAHEAD
-#define ENABLE_READAHEAD 0
-#define IF_READAHEAD(...)
-#define IF_NOT_READAHEAD(...) __VA_ARGS__
-#undef CONFIG_RFKILL
-#define ENABLE_RFKILL 0
-#define IF_RFKILL(...)
-#define IF_NOT_RFKILL(...) __VA_ARGS__
-#undef CONFIG_RUNLEVEL
-#define ENABLE_RUNLEVEL 0
-#define IF_RUNLEVEL(...)
-#define IF_NOT_RUNLEVEL(...) __VA_ARGS__
-#undef CONFIG_RX
-#define ENABLE_RX 0
-#define IF_RX(...)
-#define IF_NOT_RX(...) __VA_ARGS__
-#define CONFIG_SETSID 1
-#define ENABLE_SETSID 1
-#define IF_SETSID(...) __VA_ARGS__
-#define IF_NOT_SETSID(...)
-#define CONFIG_STRINGS 1
-#define ENABLE_STRINGS 1
-#define IF_STRINGS(...) __VA_ARGS__
-#define IF_NOT_STRINGS(...)
-#undef CONFIG_TASKSET
-#define ENABLE_TASKSET 0
-#define IF_TASKSET(...)
-#define IF_NOT_TASKSET(...) __VA_ARGS__
-#undef CONFIG_FEATURE_TASKSET_FANCY
-#define ENABLE_FEATURE_TASKSET_FANCY 0
-#define IF_FEATURE_TASKSET_FANCY(...)
-#define IF_NOT_FEATURE_TASKSET_FANCY(...) __VA_ARGS__
-#define CONFIG_TIME 1
-#define ENABLE_TIME 1
-#define IF_TIME(...) __VA_ARGS__
-#define IF_NOT_TIME(...)
-#undef CONFIG_TIMEOUT
-#define ENABLE_TIMEOUT 0
-#define IF_TIMEOUT(...)
-#define IF_NOT_TIMEOUT(...) __VA_ARGS__
-#define CONFIG_TTYSIZE 1
-#define ENABLE_TTYSIZE 1
-#define IF_TTYSIZE(...) __VA_ARGS__
-#define IF_NOT_TTYSIZE(...)
-#undef CONFIG_VOLNAME
-#define ENABLE_VOLNAME 0
-#define IF_VOLNAME(...)
-#define IF_NOT_VOLNAME(...) __VA_ARGS__
-#undef CONFIG_WALL
-#define ENABLE_WALL 0
-#define IF_WALL(...)
-#define IF_NOT_WALL(...) __VA_ARGS__
-#undef CONFIG_WATCHDOG
-#define ENABLE_WATCHDOG 0
-#define IF_WATCHDOG(...)
-#define IF_NOT_WATCHDOG(...) __VA_ARGS__
-
-/*
- * Networking Utilities
- */
-#undef CONFIG_NAMEIF
-#define ENABLE_NAMEIF 0
-#define IF_NAMEIF(...)
-#define IF_NOT_NAMEIF(...) __VA_ARGS__
-#undef CONFIG_FEATURE_NAMEIF_EXTENDED
-#define ENABLE_FEATURE_NAMEIF_EXTENDED 0
-#define IF_FEATURE_NAMEIF_EXTENDED(...)
-#define IF_NOT_FEATURE_NAMEIF_EXTENDED(...) __VA_ARGS__
-#undef CONFIG_NBDCLIENT
-#define ENABLE_NBDCLIENT 0
-#define IF_NBDCLIENT(...)
-#define IF_NOT_NBDCLIENT(...) __VA_ARGS__
-#undef CONFIG_NC
-#define ENABLE_NC 0
-#define IF_NC(...)
-#define IF_NOT_NC(...) __VA_ARGS__
-#undef CONFIG_NC_SERVER
-#define ENABLE_NC_SERVER 0
-#define IF_NC_SERVER(...)
-#define IF_NOT_NC_SERVER(...) __VA_ARGS__
-#undef CONFIG_NC_EXTRA
-#define ENABLE_NC_EXTRA 0
-#define IF_NC_EXTRA(...)
-#define IF_NOT_NC_EXTRA(...) __VA_ARGS__
-#undef CONFIG_NC_110_COMPAT
-#define ENABLE_NC_110_COMPAT 0
-#define IF_NC_110_COMPAT(...)
-#define IF_NOT_NC_110_COMPAT(...) __VA_ARGS__
-#undef CONFIG_PING
-#define ENABLE_PING 0
-#define IF_PING(...)
-#define IF_NOT_PING(...) __VA_ARGS__
-#undef CONFIG_PING6
-#define ENABLE_PING6 0
-#define IF_PING6(...)
-#define IF_NOT_PING6(...) __VA_ARGS__
-#undef CONFIG_FEATURE_FANCY_PING
-#define ENABLE_FEATURE_FANCY_PING 0
-#define IF_FEATURE_FANCY_PING(...)
-#define IF_NOT_FEATURE_FANCY_PING(...) __VA_ARGS__
-#undef CONFIG_WHOIS
-#define ENABLE_WHOIS 0
-#define IF_WHOIS(...)
-#define IF_NOT_WHOIS(...) __VA_ARGS__
-#undef CONFIG_FEATURE_IPV6
-#define ENABLE_FEATURE_IPV6 0
-#define IF_FEATURE_IPV6(...)
-#define IF_NOT_FEATURE_IPV6(...) __VA_ARGS__
-#undef CONFIG_FEATURE_UNIX_LOCAL
-#define ENABLE_FEATURE_UNIX_LOCAL 0
-#define IF_FEATURE_UNIX_LOCAL(...)
-#define IF_NOT_FEATURE_UNIX_LOCAL(...) __VA_ARGS__
-#undef CONFIG_FEATURE_PREFER_IPV4_ADDRESS
-#define ENABLE_FEATURE_PREFER_IPV4_ADDRESS 0
-#define IF_FEATURE_PREFER_IPV4_ADDRESS(...)
-#define IF_NOT_FEATURE_PREFER_IPV4_ADDRESS(...) __VA_ARGS__
-#undef CONFIG_VERBOSE_RESOLUTION_ERRORS
-#define ENABLE_VERBOSE_RESOLUTION_ERRORS 0
-#define IF_VERBOSE_RESOLUTION_ERRORS(...)
-#define IF_NOT_VERBOSE_RESOLUTION_ERRORS(...) __VA_ARGS__
-#undef CONFIG_ARP
-#define ENABLE_ARP 0
-#define IF_ARP(...)
-#define IF_NOT_ARP(...) __VA_ARGS__
-#undef CONFIG_ARPING
-#define ENABLE_ARPING 0
-#define IF_ARPING(...)
-#define IF_NOT_ARPING(...) __VA_ARGS__
-#undef CONFIG_BRCTL
-#define ENABLE_BRCTL 0
-#define IF_BRCTL(...)
-#define IF_NOT_BRCTL(...) __VA_ARGS__
-#undef CONFIG_FEATURE_BRCTL_FANCY
-#define ENABLE_FEATURE_BRCTL_FANCY 0
-#define IF_FEATURE_BRCTL_FANCY(...)
-#define IF_NOT_FEATURE_BRCTL_FANCY(...) __VA_ARGS__
-#undef CONFIG_FEATURE_BRCTL_SHOW
-#define ENABLE_FEATURE_BRCTL_SHOW 0
-#define IF_FEATURE_BRCTL_SHOW(...)
-#define IF_NOT_FEATURE_BRCTL_SHOW(...) __VA_ARGS__
-#undef CONFIG_DNSD
-#define ENABLE_DNSD 0
-#define IF_DNSD(...)
-#define IF_NOT_DNSD(...) __VA_ARGS__
-#undef CONFIG_ETHER_WAKE
-#define ENABLE_ETHER_WAKE 0
-#define IF_ETHER_WAKE(...)
-#define IF_NOT_ETHER_WAKE(...) __VA_ARGS__
-#undef CONFIG_FAKEIDENTD
-#define ENABLE_FAKEIDENTD 0
-#define IF_FAKEIDENTD(...)
-#define IF_NOT_FAKEIDENTD(...) __VA_ARGS__
-#undef CONFIG_FTPD
-#define ENABLE_FTPD 0
-#define IF_FTPD(...)
-#define IF_NOT_FTPD(...) __VA_ARGS__
-#undef CONFIG_FEATURE_FTP_WRITE
-#define ENABLE_FEATURE_FTP_WRITE 0
-#define IF_FEATURE_FTP_WRITE(...)
-#define IF_NOT_FEATURE_FTP_WRITE(...) __VA_ARGS__
-#undef CONFIG_FEATURE_FTPD_ACCEPT_BROKEN_LIST
-#define ENABLE_FEATURE_FTPD_ACCEPT_BROKEN_LIST 0
-#define IF_FEATURE_FTPD_ACCEPT_BROKEN_LIST(...)
-#define IF_NOT_FEATURE_FTPD_ACCEPT_BROKEN_LIST(...) __VA_ARGS__
-#undef CONFIG_FTPGET
-#define ENABLE_FTPGET 0
-#define IF_FTPGET(...)
-#define IF_NOT_FTPGET(...) __VA_ARGS__
-#undef CONFIG_FTPPUT
-#define ENABLE_FTPPUT 0
-#define IF_FTPPUT(...)
-#define IF_NOT_FTPPUT(...) __VA_ARGS__
-#undef CONFIG_FEATURE_FTPGETPUT_LONG_OPTIONS
-#define ENABLE_FEATURE_FTPGETPUT_LONG_OPTIONS 0
-#define IF_FEATURE_FTPGETPUT_LONG_OPTIONS(...)
-#define IF_NOT_FEATURE_FTPGETPUT_LONG_OPTIONS(...) __VA_ARGS__
-#undef CONFIG_HOSTNAME
-#define ENABLE_HOSTNAME 0
-#define IF_HOSTNAME(...)
-#define IF_NOT_HOSTNAME(...) __VA_ARGS__
-#undef CONFIG_HTTPD
-#define ENABLE_HTTPD 0
-#define IF_HTTPD(...)
-#define IF_NOT_HTTPD(...) __VA_ARGS__
-#undef CONFIG_FEATURE_HTTPD_RANGES
-#define ENABLE_FEATURE_HTTPD_RANGES 0
-#define IF_FEATURE_HTTPD_RANGES(...)
-#define IF_NOT_FEATURE_HTTPD_RANGES(...) __VA_ARGS__
-#undef CONFIG_FEATURE_HTTPD_USE_SENDFILE
-#define ENABLE_FEATURE_HTTPD_USE_SENDFILE 0
-#define IF_FEATURE_HTTPD_USE_SENDFILE(...)
-#define IF_NOT_FEATURE_HTTPD_USE_SENDFILE(...) __VA_ARGS__
-#undef CONFIG_FEATURE_HTTPD_SETUID
-#define ENABLE_FEATURE_HTTPD_SETUID 0
-#define IF_FEATURE_HTTPD_SETUID(...)
-#define IF_NOT_FEATURE_HTTPD_SETUID(...) __VA_ARGS__
-#undef CONFIG_FEATURE_HTTPD_BASIC_AUTH
-#define ENABLE_FEATURE_HTTPD_BASIC_AUTH 0
-#define IF_FEATURE_HTTPD_BASIC_AUTH(...)
-#define IF_NOT_FEATURE_HTTPD_BASIC_AUTH(...) __VA_ARGS__
-#undef CONFIG_FEATURE_HTTPD_AUTH_MD5
-#define ENABLE_FEATURE_HTTPD_AUTH_MD5 0
-#define IF_FEATURE_HTTPD_AUTH_MD5(...)
-#define IF_NOT_FEATURE_HTTPD_AUTH_MD5(...) __VA_ARGS__
-#undef CONFIG_FEATURE_HTTPD_CGI
-#define ENABLE_FEATURE_HTTPD_CGI 0
-#define IF_FEATURE_HTTPD_CGI(...)
-#define IF_NOT_FEATURE_HTTPD_CGI(...) __VA_ARGS__
-#undef CONFIG_FEATURE_HTTPD_CONFIG_WITH_SCRIPT_INTERPR
-#define ENABLE_FEATURE_HTTPD_CONFIG_WITH_SCRIPT_INTERPR 0
-#define IF_FEATURE_HTTPD_CONFIG_WITH_SCRIPT_INTERPR(...)
-#define IF_NOT_FEATURE_HTTPD_CONFIG_WITH_SCRIPT_INTERPR(...) __VA_ARGS__
-#undef CONFIG_FEATURE_HTTPD_SET_REMOTE_PORT_TO_ENV
-#define ENABLE_FEATURE_HTTPD_SET_REMOTE_PORT_TO_ENV 0
-#define IF_FEATURE_HTTPD_SET_REMOTE_PORT_TO_ENV(...)
-#define IF_NOT_FEATURE_HTTPD_SET_REMOTE_PORT_TO_ENV(...) __VA_ARGS__
-#undef CONFIG_FEATURE_HTTPD_ENCODE_URL_STR
-#define ENABLE_FEATURE_HTTPD_ENCODE_URL_STR 0
-#define IF_FEATURE_HTTPD_ENCODE_URL_STR(...)
-#define IF_NOT_FEATURE_HTTPD_ENCODE_URL_STR(...) __VA_ARGS__
-#undef CONFIG_FEATURE_HTTPD_ERROR_PAGES
-#define ENABLE_FEATURE_HTTPD_ERROR_PAGES 0
-#define IF_FEATURE_HTTPD_ERROR_PAGES(...)
-#define IF_NOT_FEATURE_HTTPD_ERROR_PAGES(...) __VA_ARGS__
-#undef CONFIG_FEATURE_HTTPD_PROXY
-#define ENABLE_FEATURE_HTTPD_PROXY 0
-#define IF_FEATURE_HTTPD_PROXY(...)
-#define IF_NOT_FEATURE_HTTPD_PROXY(...) __VA_ARGS__
-#undef CONFIG_FEATURE_HTTPD_GZIP
-#define ENABLE_FEATURE_HTTPD_GZIP 0
-#define IF_FEATURE_HTTPD_GZIP(...)
-#define IF_NOT_FEATURE_HTTPD_GZIP(...) __VA_ARGS__
-#undef CONFIG_IFCONFIG
-#define ENABLE_IFCONFIG 0
-#define IF_IFCONFIG(...)
-#define IF_NOT_IFCONFIG(...) __VA_ARGS__
-#undef CONFIG_FEATURE_IFCONFIG_STATUS
-#define ENABLE_FEATURE_IFCONFIG_STATUS 0
-#define IF_FEATURE_IFCONFIG_STATUS(...)
-#define IF_NOT_FEATURE_IFCONFIG_STATUS(...) __VA_ARGS__
-#undef CONFIG_FEATURE_IFCONFIG_SLIP
-#define ENABLE_FEATURE_IFCONFIG_SLIP 0
-#define IF_FEATURE_IFCONFIG_SLIP(...)
-#define IF_NOT_FEATURE_IFCONFIG_SLIP(...) __VA_ARGS__
-#undef CONFIG_FEATURE_IFCONFIG_MEMSTART_IOADDR_IRQ
-#define ENABLE_FEATURE_IFCONFIG_MEMSTART_IOADDR_IRQ 0
-#define IF_FEATURE_IFCONFIG_MEMSTART_IOADDR_IRQ(...)
-#define IF_NOT_FEATURE_IFCONFIG_MEMSTART_IOADDR_IRQ(...) __VA_ARGS__
-#undef CONFIG_FEATURE_IFCONFIG_HW
-#define ENABLE_FEATURE_IFCONFIG_HW 0
-#define IF_FEATURE_IFCONFIG_HW(...)
-#define IF_NOT_FEATURE_IFCONFIG_HW(...) __VA_ARGS__
-#undef CONFIG_FEATURE_IFCONFIG_BROADCAST_PLUS
-#define ENABLE_FEATURE_IFCONFIG_BROADCAST_PLUS 0
-#define IF_FEATURE_IFCONFIG_BROADCAST_PLUS(...)
-#define IF_NOT_FEATURE_IFCONFIG_BROADCAST_PLUS(...) __VA_ARGS__
-#undef CONFIG_IFENSLAVE
-#define ENABLE_IFENSLAVE 0
-#define IF_IFENSLAVE(...)
-#define IF_NOT_IFENSLAVE(...) __VA_ARGS__
-#undef CONFIG_IFPLUGD
-#define ENABLE_IFPLUGD 0
-#define IF_IFPLUGD(...)
-#define IF_NOT_IFPLUGD(...) __VA_ARGS__
-#undef CONFIG_IFUPDOWN
-#define ENABLE_IFUPDOWN 0
-#define IF_IFUPDOWN(...)
-#define IF_NOT_IFUPDOWN(...) __VA_ARGS__
-#define CONFIG_IFUPDOWN_IFSTATE_PATH ""
-#define ENABLE_IFUPDOWN_IFSTATE_PATH 1
-#define IF_IFUPDOWN_IFSTATE_PATH(...) __VA_ARGS__
-#define IF_NOT_IFUPDOWN_IFSTATE_PATH(...)
-#undef CONFIG_FEATURE_IFUPDOWN_IP
-#define ENABLE_FEATURE_IFUPDOWN_IP 0
-#define IF_FEATURE_IFUPDOWN_IP(...)
-#define IF_NOT_FEATURE_IFUPDOWN_IP(...) __VA_ARGS__
-#undef CONFIG_FEATURE_IFUPDOWN_IP_BUILTIN
-#define ENABLE_FEATURE_IFUPDOWN_IP_BUILTIN 0
-#define IF_FEATURE_IFUPDOWN_IP_BUILTIN(...)
-#define IF_NOT_FEATURE_IFUPDOWN_IP_BUILTIN(...) __VA_ARGS__
-#undef CONFIG_FEATURE_IFUPDOWN_IFCONFIG_BUILTIN
-#define ENABLE_FEATURE_IFUPDOWN_IFCONFIG_BUILTIN 0
-#define IF_FEATURE_IFUPDOWN_IFCONFIG_BUILTIN(...)
-#define IF_NOT_FEATURE_IFUPDOWN_IFCONFIG_BUILTIN(...) __VA_ARGS__
-#undef CONFIG_FEATURE_IFUPDOWN_IPV4
-#define ENABLE_FEATURE_IFUPDOWN_IPV4 0
-#define IF_FEATURE_IFUPDOWN_IPV4(...)
-#define IF_NOT_FEATURE_IFUPDOWN_IPV4(...) __VA_ARGS__
-#undef CONFIG_FEATURE_IFUPDOWN_IPV6
-#define ENABLE_FEATURE_IFUPDOWN_IPV6 0
-#define IF_FEATURE_IFUPDOWN_IPV6(...)
-#define IF_NOT_FEATURE_IFUPDOWN_IPV6(...) __VA_ARGS__
-#undef CONFIG_FEATURE_IFUPDOWN_MAPPING
-#define ENABLE_FEATURE_IFUPDOWN_MAPPING 0
-#define IF_FEATURE_IFUPDOWN_MAPPING(...)
-#define IF_NOT_FEATURE_IFUPDOWN_MAPPING(...) __VA_ARGS__
-#undef CONFIG_FEATURE_IFUPDOWN_EXTERNAL_DHCP
-#define ENABLE_FEATURE_IFUPDOWN_EXTERNAL_DHCP 0
-#define IF_FEATURE_IFUPDOWN_EXTERNAL_DHCP(...)
-#define IF_NOT_FEATURE_IFUPDOWN_EXTERNAL_DHCP(...) __VA_ARGS__
-#undef CONFIG_INETD
-#define ENABLE_INETD 0
-#define IF_INETD(...)
-#define IF_NOT_INETD(...) __VA_ARGS__
-#undef CONFIG_FEATURE_INETD_SUPPORT_BUILTIN_ECHO
-#define ENABLE_FEATURE_INETD_SUPPORT_BUILTIN_ECHO 0
-#define IF_FEATURE_INETD_SUPPORT_BUILTIN_ECHO(...)
-#define IF_NOT_FEATURE_INETD_SUPPORT_BUILTIN_ECHO(...) __VA_ARGS__
-#undef CONFIG_FEATURE_INETD_SUPPORT_BUILTIN_DISCARD
-#define ENABLE_FEATURE_INETD_SUPPORT_BUILTIN_DISCARD 0
-#define IF_FEATURE_INETD_SUPPORT_BUILTIN_DISCARD(...)
-#define IF_NOT_FEATURE_INETD_SUPPORT_BUILTIN_DISCARD(...) __VA_ARGS__
-#undef CONFIG_FEATURE_INETD_SUPPORT_BUILTIN_TIME
-#define ENABLE_FEATURE_INETD_SUPPORT_BUILTIN_TIME 0
-#define IF_FEATURE_INETD_SUPPORT_BUILTIN_TIME(...)
-#define IF_NOT_FEATURE_INETD_SUPPORT_BUILTIN_TIME(...) __VA_ARGS__
-#undef CONFIG_FEATURE_INETD_SUPPORT_BUILTIN_DAYTIME
-#define ENABLE_FEATURE_INETD_SUPPORT_BUILTIN_DAYTIME 0
-#define IF_FEATURE_INETD_SUPPORT_BUILTIN_DAYTIME(...)
-#define IF_NOT_FEATURE_INETD_SUPPORT_BUILTIN_DAYTIME(...) __VA_ARGS__
-#undef CONFIG_FEATURE_INETD_SUPPORT_BUILTIN_CHARGEN
-#define ENABLE_FEATURE_INETD_SUPPORT_BUILTIN_CHARGEN 0
-#define IF_FEATURE_INETD_SUPPORT_BUILTIN_CHARGEN(...)
-#define IF_NOT_FEATURE_INETD_SUPPORT_BUILTIN_CHARGEN(...) __VA_ARGS__
-#undef CONFIG_FEATURE_INETD_RPC
-#define ENABLE_FEATURE_INETD_RPC 0
-#define IF_FEATURE_INETD_RPC(...)
-#define IF_NOT_FEATURE_INETD_RPC(...) __VA_ARGS__
-#undef CONFIG_IP
-#define ENABLE_IP 0
-#define IF_IP(...)
-#define IF_NOT_IP(...) __VA_ARGS__
-#undef CONFIG_FEATURE_IP_ADDRESS
-#define ENABLE_FEATURE_IP_ADDRESS 0
-#define IF_FEATURE_IP_ADDRESS(...)
-#define IF_NOT_FEATURE_IP_ADDRESS(...) __VA_ARGS__
-#undef CONFIG_FEATURE_IP_LINK
-#define ENABLE_FEATURE_IP_LINK 0
-#define IF_FEATURE_IP_LINK(...)
-#define IF_NOT_FEATURE_IP_LINK(...) __VA_ARGS__
-#undef CONFIG_FEATURE_IP_ROUTE
-#define ENABLE_FEATURE_IP_ROUTE 0
-#define IF_FEATURE_IP_ROUTE(...)
-#define IF_NOT_FEATURE_IP_ROUTE(...) __VA_ARGS__
-#undef CONFIG_FEATURE_IP_TUNNEL
-#define ENABLE_FEATURE_IP_TUNNEL 0
-#define IF_FEATURE_IP_TUNNEL(...)
-#define IF_NOT_FEATURE_IP_TUNNEL(...) __VA_ARGS__
-#undef CONFIG_FEATURE_IP_RULE
-#define ENABLE_FEATURE_IP_RULE 0
-#define IF_FEATURE_IP_RULE(...)
-#define IF_NOT_FEATURE_IP_RULE(...) __VA_ARGS__
-#undef CONFIG_FEATURE_IP_SHORT_FORMS
-#define ENABLE_FEATURE_IP_SHORT_FORMS 0
-#define IF_FEATURE_IP_SHORT_FORMS(...)
-#define IF_NOT_FEATURE_IP_SHORT_FORMS(...) __VA_ARGS__
-#undef CONFIG_FEATURE_IP_RARE_PROTOCOLS
-#define ENABLE_FEATURE_IP_RARE_PROTOCOLS 0
-#define IF_FEATURE_IP_RARE_PROTOCOLS(...)
-#define IF_NOT_FEATURE_IP_RARE_PROTOCOLS(...) __VA_ARGS__
-#undef CONFIG_IPADDR
-#define ENABLE_IPADDR 0
-#define IF_IPADDR(...)
-#define IF_NOT_IPADDR(...) __VA_ARGS__
-#undef CONFIG_IPLINK
-#define ENABLE_IPLINK 0
-#define IF_IPLINK(...)
-#define IF_NOT_IPLINK(...) __VA_ARGS__
-#undef CONFIG_IPROUTE
-#define ENABLE_IPROUTE 0
-#define IF_IPROUTE(...)
-#define IF_NOT_IPROUTE(...) __VA_ARGS__
-#undef CONFIG_IPTUNNEL
-#define ENABLE_IPTUNNEL 0
-#define IF_IPTUNNEL(...)
-#define IF_NOT_IPTUNNEL(...) __VA_ARGS__
-#undef CONFIG_IPRULE
-#define ENABLE_IPRULE 0
-#define IF_IPRULE(...)
-#define IF_NOT_IPRULE(...) __VA_ARGS__
-#undef CONFIG_IPCALC
-#define ENABLE_IPCALC 0
-#define IF_IPCALC(...)
-#define IF_NOT_IPCALC(...) __VA_ARGS__
-#undef CONFIG_FEATURE_IPCALC_FANCY
-#define ENABLE_FEATURE_IPCALC_FANCY 0
-#define IF_FEATURE_IPCALC_FANCY(...)
-#define IF_NOT_FEATURE_IPCALC_FANCY(...) __VA_ARGS__
-#undef CONFIG_FEATURE_IPCALC_LONG_OPTIONS
-#define ENABLE_FEATURE_IPCALC_LONG_OPTIONS 0
-#define IF_FEATURE_IPCALC_LONG_OPTIONS(...)
-#define IF_NOT_FEATURE_IPCALC_LONG_OPTIONS(...) __VA_ARGS__
-#undef CONFIG_NETSTAT
-#define ENABLE_NETSTAT 0
-#define IF_NETSTAT(...)
-#define IF_NOT_NETSTAT(...) __VA_ARGS__
-#undef CONFIG_FEATURE_NETSTAT_WIDE
-#define ENABLE_FEATURE_NETSTAT_WIDE 0
-#define IF_FEATURE_NETSTAT_WIDE(...)
-#define IF_NOT_FEATURE_NETSTAT_WIDE(...) __VA_ARGS__
-#undef CONFIG_FEATURE_NETSTAT_PRG
-#define ENABLE_FEATURE_NETSTAT_PRG 0
-#define IF_FEATURE_NETSTAT_PRG(...)
-#define IF_NOT_FEATURE_NETSTAT_PRG(...) __VA_ARGS__
-#undef CONFIG_NSLOOKUP
-#define ENABLE_NSLOOKUP 0
-#define IF_NSLOOKUP(...)
-#define IF_NOT_NSLOOKUP(...) __VA_ARGS__
-#undef CONFIG_NTPD
-#define ENABLE_NTPD 0
-#define IF_NTPD(...)
-#define IF_NOT_NTPD(...) __VA_ARGS__
-#undef CONFIG_FEATURE_NTPD_SERVER
-#define ENABLE_FEATURE_NTPD_SERVER 0
-#define IF_FEATURE_NTPD_SERVER(...)
-#define IF_NOT_FEATURE_NTPD_SERVER(...) __VA_ARGS__
-#undef CONFIG_PSCAN
-#define ENABLE_PSCAN 0
-#define IF_PSCAN(...)
-#define IF_NOT_PSCAN(...) __VA_ARGS__
-#undef CONFIG_ROUTE
-#define ENABLE_ROUTE 0
-#define IF_ROUTE(...)
-#define IF_NOT_ROUTE(...) __VA_ARGS__
-#undef CONFIG_SLATTACH
-#define ENABLE_SLATTACH 0
-#define IF_SLATTACH(...)
-#define IF_NOT_SLATTACH(...) __VA_ARGS__
-#undef CONFIG_TCPSVD
-#define ENABLE_TCPSVD 0
-#define IF_TCPSVD(...)
-#define IF_NOT_TCPSVD(...) __VA_ARGS__
-#undef CONFIG_TELNET
-#define ENABLE_TELNET 0
-#define IF_TELNET(...)
-#define IF_NOT_TELNET(...) __VA_ARGS__
-#undef CONFIG_FEATURE_TELNET_TTYPE
-#define ENABLE_FEATURE_TELNET_TTYPE 0
-#define IF_FEATURE_TELNET_TTYPE(...)
-#define IF_NOT_FEATURE_TELNET_TTYPE(...) __VA_ARGS__
-#undef CONFIG_FEATURE_TELNET_AUTOLOGIN
-#define ENABLE_FEATURE_TELNET_AUTOLOGIN 0
-#define IF_FEATURE_TELNET_AUTOLOGIN(...)
-#define IF_NOT_FEATURE_TELNET_AUTOLOGIN(...) __VA_ARGS__
-#undef CONFIG_TELNETD
-#define ENABLE_TELNETD 0
-#define IF_TELNETD(...)
-#define IF_NOT_TELNETD(...) __VA_ARGS__
-#undef CONFIG_FEATURE_TELNETD_STANDALONE
-#define ENABLE_FEATURE_TELNETD_STANDALONE 0
-#define IF_FEATURE_TELNETD_STANDALONE(...)
-#define IF_NOT_FEATURE_TELNETD_STANDALONE(...) __VA_ARGS__
-#undef CONFIG_FEATURE_TELNETD_INETD_WAIT
-#define ENABLE_FEATURE_TELNETD_INETD_WAIT 0
-#define IF_FEATURE_TELNETD_INETD_WAIT(...)
-#define IF_NOT_FEATURE_TELNETD_INETD_WAIT(...) __VA_ARGS__
-#undef CONFIG_TFTP
-#define ENABLE_TFTP 0
-#define IF_TFTP(...)
-#define IF_NOT_TFTP(...) __VA_ARGS__
-#undef CONFIG_TFTPD
-#define ENABLE_TFTPD 0
-#define IF_TFTPD(...)
-#define IF_NOT_TFTPD(...) __VA_ARGS__
-#undef CONFIG_FEATURE_TFTP_GET
-#define ENABLE_FEATURE_TFTP_GET 0
-#define IF_FEATURE_TFTP_GET(...)
-#define IF_NOT_FEATURE_TFTP_GET(...) __VA_ARGS__
-#undef CONFIG_FEATURE_TFTP_PUT
-#define ENABLE_FEATURE_TFTP_PUT 0
-#define IF_FEATURE_TFTP_PUT(...)
-#define IF_NOT_FEATURE_TFTP_PUT(...) __VA_ARGS__
-#undef CONFIG_FEATURE_TFTP_BLOCKSIZE
-#define ENABLE_FEATURE_TFTP_BLOCKSIZE 0
-#define IF_FEATURE_TFTP_BLOCKSIZE(...)
-#define IF_NOT_FEATURE_TFTP_BLOCKSIZE(...) __VA_ARGS__
-#undef CONFIG_FEATURE_TFTP_PROGRESS_BAR
-#define ENABLE_FEATURE_TFTP_PROGRESS_BAR 0
-#define IF_FEATURE_TFTP_PROGRESS_BAR(...)
-#define IF_NOT_FEATURE_TFTP_PROGRESS_BAR(...) __VA_ARGS__
-#undef CONFIG_TFTP_DEBUG
-#define ENABLE_TFTP_DEBUG 0
-#define IF_TFTP_DEBUG(...)
-#define IF_NOT_TFTP_DEBUG(...) __VA_ARGS__
-#undef CONFIG_TRACEROUTE
-#define ENABLE_TRACEROUTE 0
-#define IF_TRACEROUTE(...)
-#define IF_NOT_TRACEROUTE(...) __VA_ARGS__
-#undef CONFIG_TRACEROUTE6
-#define ENABLE_TRACEROUTE6 0
-#define IF_TRACEROUTE6(...)
-#define IF_NOT_TRACEROUTE6(...) __VA_ARGS__
-#undef CONFIG_FEATURE_TRACEROUTE_VERBOSE
-#define ENABLE_FEATURE_TRACEROUTE_VERBOSE 0
-#define IF_FEATURE_TRACEROUTE_VERBOSE(...)
-#define IF_NOT_FEATURE_TRACEROUTE_VERBOSE(...) __VA_ARGS__
-#undef CONFIG_FEATURE_TRACEROUTE_SOURCE_ROUTE
-#define ENABLE_FEATURE_TRACEROUTE_SOURCE_ROUTE 0
-#define IF_FEATURE_TRACEROUTE_SOURCE_ROUTE(...)
-#define IF_NOT_FEATURE_TRACEROUTE_SOURCE_ROUTE(...) __VA_ARGS__
-#undef CONFIG_FEATURE_TRACEROUTE_USE_ICMP
-#define ENABLE_FEATURE_TRACEROUTE_USE_ICMP 0
-#define IF_FEATURE_TRACEROUTE_USE_ICMP(...)
-#define IF_NOT_FEATURE_TRACEROUTE_USE_ICMP(...) __VA_ARGS__
-#undef CONFIG_TUNCTL
-#define ENABLE_TUNCTL 0
-#define IF_TUNCTL(...)
-#define IF_NOT_TUNCTL(...) __VA_ARGS__
-#undef CONFIG_FEATURE_TUNCTL_UG
-#define ENABLE_FEATURE_TUNCTL_UG 0
-#define IF_FEATURE_TUNCTL_UG(...)
-#define IF_NOT_FEATURE_TUNCTL_UG(...) __VA_ARGS__
-#undef CONFIG_UDHCPC6
-#define ENABLE_UDHCPC6 0
-#define IF_UDHCPC6(...)
-#define IF_NOT_UDHCPC6(...) __VA_ARGS__
-#undef CONFIG_UDHCPD
-#define ENABLE_UDHCPD 0
-#define IF_UDHCPD(...)
-#define IF_NOT_UDHCPD(...) __VA_ARGS__
-#undef CONFIG_DHCPRELAY
-#define ENABLE_DHCPRELAY 0
-#define IF_DHCPRELAY(...)
-#define IF_NOT_DHCPRELAY(...) __VA_ARGS__
-#undef CONFIG_DUMPLEASES
-#define ENABLE_DUMPLEASES 0
-#define IF_DUMPLEASES(...)
-#define IF_NOT_DUMPLEASES(...) __VA_ARGS__
-#undef CONFIG_FEATURE_UDHCPD_WRITE_LEASES_EARLY
-#define ENABLE_FEATURE_UDHCPD_WRITE_LEASES_EARLY 0
-#define IF_FEATURE_UDHCPD_WRITE_LEASES_EARLY(...)
-#define IF_NOT_FEATURE_UDHCPD_WRITE_LEASES_EARLY(...) __VA_ARGS__
-#undef CONFIG_FEATURE_UDHCPD_BASE_IP_ON_MAC
-#define ENABLE_FEATURE_UDHCPD_BASE_IP_ON_MAC 0
-#define IF_FEATURE_UDHCPD_BASE_IP_ON_MAC(...)
-#define IF_NOT_FEATURE_UDHCPD_BASE_IP_ON_MAC(...) __VA_ARGS__
-#define CONFIG_DHCPD_LEASES_FILE ""
-#define ENABLE_DHCPD_LEASES_FILE 1
-#define IF_DHCPD_LEASES_FILE(...) __VA_ARGS__
-#define IF_NOT_DHCPD_LEASES_FILE(...)
-#undef CONFIG_UDHCPC
-#define ENABLE_UDHCPC 0
-#define IF_UDHCPC(...)
-#define IF_NOT_UDHCPC(...) __VA_ARGS__
-#undef CONFIG_FEATURE_UDHCPC_ARPING
-#define ENABLE_FEATURE_UDHCPC_ARPING 0
-#define IF_FEATURE_UDHCPC_ARPING(...)
-#define IF_NOT_FEATURE_UDHCPC_ARPING(...) __VA_ARGS__
-#undef CONFIG_FEATURE_UDHCP_PORT
-#define ENABLE_FEATURE_UDHCP_PORT 0
-#define IF_FEATURE_UDHCP_PORT(...)
-#define IF_NOT_FEATURE_UDHCP_PORT(...) __VA_ARGS__
-#define CONFIG_UDHCP_DEBUG 0
-#define ENABLE_UDHCP_DEBUG 1
-#define IF_UDHCP_DEBUG(...) __VA_ARGS__
-#define IF_NOT_UDHCP_DEBUG(...)
-#undef CONFIG_FEATURE_UDHCP_RFC3397
-#define ENABLE_FEATURE_UDHCP_RFC3397 0
-#define IF_FEATURE_UDHCP_RFC3397(...)
-#define IF_NOT_FEATURE_UDHCP_RFC3397(...) __VA_ARGS__
-#undef CONFIG_FEATURE_UDHCP_8021Q
-#define ENABLE_FEATURE_UDHCP_8021Q 0
-#define IF_FEATURE_UDHCP_8021Q(...)
-#define IF_NOT_FEATURE_UDHCP_8021Q(...) __VA_ARGS__
-#define CONFIG_UDHCPC_DEFAULT_SCRIPT ""
-#define ENABLE_UDHCPC_DEFAULT_SCRIPT 1
-#define IF_UDHCPC_DEFAULT_SCRIPT(...) __VA_ARGS__
-#define IF_NOT_UDHCPC_DEFAULT_SCRIPT(...)
-#define CONFIG_UDHCPC_SLACK_FOR_BUGGY_SERVERS 0
-#define ENABLE_UDHCPC_SLACK_FOR_BUGGY_SERVERS 1
-#define IF_UDHCPC_SLACK_FOR_BUGGY_SERVERS(...) __VA_ARGS__
-#define IF_NOT_UDHCPC_SLACK_FOR_BUGGY_SERVERS(...)
-#define CONFIG_IFUPDOWN_UDHCPC_CMD_OPTIONS ""
-#define ENABLE_IFUPDOWN_UDHCPC_CMD_OPTIONS 1
-#define IF_IFUPDOWN_UDHCPC_CMD_OPTIONS(...) __VA_ARGS__
-#define IF_NOT_IFUPDOWN_UDHCPC_CMD_OPTIONS(...)
-#undef CONFIG_UDPSVD
-#define ENABLE_UDPSVD 0
-#define IF_UDPSVD(...)
-#define IF_NOT_UDPSVD(...) __VA_ARGS__
-#undef CONFIG_VCONFIG
-#define ENABLE_VCONFIG 0
-#define IF_VCONFIG(...)
-#define IF_NOT_VCONFIG(...) __VA_ARGS__
-#undef CONFIG_WGET
-#define ENABLE_WGET 0
-#define IF_WGET(...)
-#define IF_NOT_WGET(...) __VA_ARGS__
-#undef CONFIG_FEATURE_WGET_STATUSBAR
-#define ENABLE_FEATURE_WGET_STATUSBAR 0
-#define IF_FEATURE_WGET_STATUSBAR(...)
-#define IF_NOT_FEATURE_WGET_STATUSBAR(...) __VA_ARGS__
-#undef CONFIG_FEATURE_WGET_AUTHENTICATION
-#define ENABLE_FEATURE_WGET_AUTHENTICATION 0
-#define IF_FEATURE_WGET_AUTHENTICATION(...)
-#define IF_NOT_FEATURE_WGET_AUTHENTICATION(...) __VA_ARGS__
-#undef CONFIG_FEATURE_WGET_LONG_OPTIONS
-#define ENABLE_FEATURE_WGET_LONG_OPTIONS 0
-#define IF_FEATURE_WGET_LONG_OPTIONS(...)
-#define IF_NOT_FEATURE_WGET_LONG_OPTIONS(...) __VA_ARGS__
-#undef CONFIG_FEATURE_WGET_TIMEOUT
-#define ENABLE_FEATURE_WGET_TIMEOUT 0
-#define IF_FEATURE_WGET_TIMEOUT(...)
-#define IF_NOT_FEATURE_WGET_TIMEOUT(...) __VA_ARGS__
-#undef CONFIG_ZCIP
-#define ENABLE_ZCIP 0
-#define IF_ZCIP(...)
-#define IF_NOT_ZCIP(...) __VA_ARGS__
-
-/*
- * Print Utilities
- */
-#undef CONFIG_LPD
-#define ENABLE_LPD 0
-#define IF_LPD(...)
-#define IF_NOT_LPD(...) __VA_ARGS__
-#undef CONFIG_LPR
-#define ENABLE_LPR 0
-#define IF_LPR(...)
-#define IF_NOT_LPR(...) __VA_ARGS__
-#undef CONFIG_LPQ
-#define ENABLE_LPQ 0
-#define IF_LPQ(...)
-#define IF_NOT_LPQ(...) __VA_ARGS__
-
-/*
- * Mail Utilities
- */
-#undef CONFIG_MAKEMIME
-#define ENABLE_MAKEMIME 0
-#define IF_MAKEMIME(...)
-#define IF_NOT_MAKEMIME(...) __VA_ARGS__
-#define CONFIG_FEATURE_MIME_CHARSET ""
-#define ENABLE_FEATURE_MIME_CHARSET 1
-#define IF_FEATURE_MIME_CHARSET(...) __VA_ARGS__
-#define IF_NOT_FEATURE_MIME_CHARSET(...)
-#undef CONFIG_POPMAILDIR
-#define ENABLE_POPMAILDIR 0
-#define IF_POPMAILDIR(...)
-#define IF_NOT_POPMAILDIR(...) __VA_ARGS__
-#undef CONFIG_FEATURE_POPMAILDIR_DELIVERY
-#define ENABLE_FEATURE_POPMAILDIR_DELIVERY 0
-#define IF_FEATURE_POPMAILDIR_DELIVERY(...)
-#define IF_NOT_FEATURE_POPMAILDIR_DELIVERY(...) __VA_ARGS__
-#undef CONFIG_REFORMIME
-#define ENABLE_REFORMIME 0
-#define IF_REFORMIME(...)
-#define IF_NOT_REFORMIME(...) __VA_ARGS__
-#undef CONFIG_FEATURE_REFORMIME_COMPAT
-#define ENABLE_FEATURE_REFORMIME_COMPAT 0
-#define IF_FEATURE_REFORMIME_COMPAT(...)
-#define IF_NOT_FEATURE_REFORMIME_COMPAT(...) __VA_ARGS__
-#undef CONFIG_SENDMAIL
-#define ENABLE_SENDMAIL 0
-#define IF_SENDMAIL(...)
-#define IF_NOT_SENDMAIL(...) __VA_ARGS__
-
-/*
- * Process Utilities
- */
-#undef CONFIG_IOSTAT
-#define ENABLE_IOSTAT 0
-#define IF_IOSTAT(...)
-#define IF_NOT_IOSTAT(...) __VA_ARGS__
-#define CONFIG_LSOF 1
-#define ENABLE_LSOF 1
-#define IF_LSOF(...) __VA_ARGS__
-#define IF_NOT_LSOF(...)
-#undef CONFIG_MPSTAT
-#define ENABLE_MPSTAT 0
-#define IF_MPSTAT(...)
-#define IF_NOT_MPSTAT(...) __VA_ARGS__
-#undef CONFIG_NMETER
-#define ENABLE_NMETER 0
-#define IF_NMETER(...)
-#define IF_NOT_NMETER(...) __VA_ARGS__
-#undef CONFIG_PMAP
-#define ENABLE_PMAP 0
-#define IF_PMAP(...)
-#define IF_NOT_PMAP(...) __VA_ARGS__
-#undef CONFIG_POWERTOP
-#define ENABLE_POWERTOP 0
-#define IF_POWERTOP(...)
-#define IF_NOT_POWERTOP(...) __VA_ARGS__
-#define CONFIG_PSTREE 1
-#define ENABLE_PSTREE 1
-#define IF_PSTREE(...) __VA_ARGS__
-#define IF_NOT_PSTREE(...)
-#undef CONFIG_PWDX
-#define ENABLE_PWDX 0
-#define IF_PWDX(...)
-#define IF_NOT_PWDX(...) __VA_ARGS__
-#undef CONFIG_SMEMCAP
-#define ENABLE_SMEMCAP 0
-#define IF_SMEMCAP(...)
-#define IF_NOT_SMEMCAP(...) __VA_ARGS__
-#define CONFIG_TOP 1
-#define ENABLE_TOP 1
-#define IF_TOP(...) __VA_ARGS__
-#define IF_NOT_TOP(...)
-#define CONFIG_FEATURE_TOP_CPU_USAGE_PERCENTAGE 1
-#define ENABLE_FEATURE_TOP_CPU_USAGE_PERCENTAGE 1
-#define IF_FEATURE_TOP_CPU_USAGE_PERCENTAGE(...) __VA_ARGS__
-#define IF_NOT_FEATURE_TOP_CPU_USAGE_PERCENTAGE(...)
-#define CONFIG_FEATURE_TOP_CPU_GLOBAL_PERCENTS 1
-#define ENABLE_FEATURE_TOP_CPU_GLOBAL_PERCENTS 1
-#define IF_FEATURE_TOP_CPU_GLOBAL_PERCENTS(...) __VA_ARGS__
-#define IF_NOT_FEATURE_TOP_CPU_GLOBAL_PERCENTS(...)
-#undef CONFIG_FEATURE_TOP_SMP_CPU
-#define ENABLE_FEATURE_TOP_SMP_CPU 0
-#define IF_FEATURE_TOP_SMP_CPU(...)
-#define IF_NOT_FEATURE_TOP_SMP_CPU(...) __VA_ARGS__
-#define CONFIG_FEATURE_TOP_DECIMALS 1
-#define ENABLE_FEATURE_TOP_DECIMALS 1
-#define IF_FEATURE_TOP_DECIMALS(...) __VA_ARGS__
-#define IF_NOT_FEATURE_TOP_DECIMALS(...)
-#undef CONFIG_FEATURE_TOP_SMP_PROCESS
-#define ENABLE_FEATURE_TOP_SMP_PROCESS 0
-#define IF_FEATURE_TOP_SMP_PROCESS(...)
-#define IF_NOT_FEATURE_TOP_SMP_PROCESS(...) __VA_ARGS__
-#define CONFIG_FEATURE_TOPMEM 1
-#define ENABLE_FEATURE_TOPMEM 1
-#define IF_FEATURE_TOPMEM(...) __VA_ARGS__
-#define IF_NOT_FEATURE_TOPMEM(...)
-#define CONFIG_UPTIME 1
-#define ENABLE_UPTIME 1
-#define IF_UPTIME(...) __VA_ARGS__
-#define IF_NOT_UPTIME(...)
-#undef CONFIG_FEATURE_UPTIME_UTMP_SUPPORT
-#define ENABLE_FEATURE_UPTIME_UTMP_SUPPORT 0
-#define IF_FEATURE_UPTIME_UTMP_SUPPORT(...)
-#define IF_NOT_FEATURE_UPTIME_UTMP_SUPPORT(...) __VA_ARGS__
-#define CONFIG_FREE 1
-#define ENABLE_FREE 1
-#define IF_FREE(...) __VA_ARGS__
-#define IF_NOT_FREE(...)
-#define CONFIG_FUSER 1
-#define ENABLE_FUSER 1
-#define IF_FUSER(...) __VA_ARGS__
-#define IF_NOT_FUSER(...)
-#define CONFIG_KILL 1
-#define ENABLE_KILL 1
-#define IF_KILL(...) __VA_ARGS__
-#define IF_NOT_KILL(...)
-#define CONFIG_KILLALL 1
-#define ENABLE_KILLALL 1
-#define IF_KILLALL(...) __VA_ARGS__
-#define IF_NOT_KILLALL(...)
-#define CONFIG_KILLALL5 1
-#define ENABLE_KILLALL5 1
-#define IF_KILLALL5(...) __VA_ARGS__
-#define IF_NOT_KILLALL5(...)
-#define CONFIG_PGREP 1
-#define ENABLE_PGREP 1
-#define IF_PGREP(...) __VA_ARGS__
-#define IF_NOT_PGREP(...)
-#define CONFIG_PIDOF 1
-#define ENABLE_PIDOF 1
-#define IF_PIDOF(...) __VA_ARGS__
-#define IF_NOT_PIDOF(...)
-#define CONFIG_FEATURE_PIDOF_SINGLE 1
-#define ENABLE_FEATURE_PIDOF_SINGLE 1
-#define IF_FEATURE_PIDOF_SINGLE(...) __VA_ARGS__
-#define IF_NOT_FEATURE_PIDOF_SINGLE(...)
-#define CONFIG_FEATURE_PIDOF_OMIT 1
-#define ENABLE_FEATURE_PIDOF_OMIT 1
-#define IF_FEATURE_PIDOF_OMIT(...) __VA_ARGS__
-#define IF_NOT_FEATURE_PIDOF_OMIT(...)
-#define CONFIG_PKILL 1
-#define ENABLE_PKILL 1
-#define IF_PKILL(...) __VA_ARGS__
-#define IF_NOT_PKILL(...)
-#define CONFIG_PS 1
-#define ENABLE_PS 1
-#define IF_PS(...) __VA_ARGS__
-#define IF_NOT_PS(...)
-#define CONFIG_FEATURE_PS_WIDE 1
-#define ENABLE_FEATURE_PS_WIDE 1
-#define IF_FEATURE_PS_WIDE(...) __VA_ARGS__
-#define IF_NOT_FEATURE_PS_WIDE(...)
-#define CONFIG_FEATURE_PS_LONG 1
-#define ENABLE_FEATURE_PS_LONG 1
-#define IF_FEATURE_PS_LONG(...) __VA_ARGS__
-#define IF_NOT_FEATURE_PS_LONG(...)
-#undef CONFIG_FEATURE_PS_TIME
-#define ENABLE_FEATURE_PS_TIME 0
-#define IF_FEATURE_PS_TIME(...)
-#define IF_NOT_FEATURE_PS_TIME(...) __VA_ARGS__
-#undef CONFIG_FEATURE_PS_ADDITIONAL_COLUMNS
-#define ENABLE_FEATURE_PS_ADDITIONAL_COLUMNS 0
-#define IF_FEATURE_PS_ADDITIONAL_COLUMNS(...)
-#define IF_NOT_FEATURE_PS_ADDITIONAL_COLUMNS(...) __VA_ARGS__
-#undef CONFIG_FEATURE_PS_UNUSUAL_SYSTEMS
-#define ENABLE_FEATURE_PS_UNUSUAL_SYSTEMS 0
-#define IF_FEATURE_PS_UNUSUAL_SYSTEMS(...)
-#define IF_NOT_FEATURE_PS_UNUSUAL_SYSTEMS(...) __VA_ARGS__
-#define CONFIG_RENICE 1
-#define ENABLE_RENICE 1
-#define IF_RENICE(...) __VA_ARGS__
-#define IF_NOT_RENICE(...)
-#define CONFIG_BB_SYSCTL 1
-#define ENABLE_BB_SYSCTL 1
-#define IF_BB_SYSCTL(...) __VA_ARGS__
-#define IF_NOT_BB_SYSCTL(...)
-#define CONFIG_FEATURE_SHOW_THREADS 1
-#define ENABLE_FEATURE_SHOW_THREADS 1
-#define IF_FEATURE_SHOW_THREADS(...) __VA_ARGS__
-#define IF_NOT_FEATURE_SHOW_THREADS(...)
-#define CONFIG_WATCH 1
-#define ENABLE_WATCH 1
-#define IF_WATCH(...) __VA_ARGS__
-#define IF_NOT_WATCH(...)
-
-/*
- * Runit Utilities
- */
-#undef CONFIG_RUNSV
-#define ENABLE_RUNSV 0
-#define IF_RUNSV(...)
-#define IF_NOT_RUNSV(...) __VA_ARGS__
-#undef CONFIG_RUNSVDIR
-#define ENABLE_RUNSVDIR 0
-#define IF_RUNSVDIR(...)
-#define IF_NOT_RUNSVDIR(...) __VA_ARGS__
-#undef CONFIG_FEATURE_RUNSVDIR_LOG
-#define ENABLE_FEATURE_RUNSVDIR_LOG 0
-#define IF_FEATURE_RUNSVDIR_LOG(...)
-#define IF_NOT_FEATURE_RUNSVDIR_LOG(...) __VA_ARGS__
-#undef CONFIG_SV
-#define ENABLE_SV 0
-#define IF_SV(...)
-#define IF_NOT_SV(...) __VA_ARGS__
-#define CONFIG_SV_DEFAULT_SERVICE_DIR ""
-#define ENABLE_SV_DEFAULT_SERVICE_DIR 1
-#define IF_SV_DEFAULT_SERVICE_DIR(...) __VA_ARGS__
-#define IF_NOT_SV_DEFAULT_SERVICE_DIR(...)
-#undef CONFIG_SVLOGD
-#define ENABLE_SVLOGD 0
-#define IF_SVLOGD(...)
-#define IF_NOT_SVLOGD(...) __VA_ARGS__
-#undef CONFIG_CHPST
-#define ENABLE_CHPST 0
-#define IF_CHPST(...)
-#define IF_NOT_CHPST(...) __VA_ARGS__
-#undef CONFIG_SETUIDGID
-#define ENABLE_SETUIDGID 0
-#define IF_SETUIDGID(...)
-#define IF_NOT_SETUIDGID(...) __VA_ARGS__
-#undef CONFIG_ENVUIDGID
-#define ENABLE_ENVUIDGID 0
-#define IF_ENVUIDGID(...)
-#define IF_NOT_ENVUIDGID(...) __VA_ARGS__
-#undef CONFIG_ENVDIR
-#define ENABLE_ENVDIR 0
-#define IF_ENVDIR(...)
-#define IF_NOT_ENVDIR(...) __VA_ARGS__
-#undef CONFIG_SOFTLIMIT
-#define ENABLE_SOFTLIMIT 0
-#define IF_SOFTLIMIT(...)
-#define IF_NOT_SOFTLIMIT(...) __VA_ARGS__
-#undef CONFIG_CHCON
-#define ENABLE_CHCON 0
-#define IF_CHCON(...)
-#define IF_NOT_CHCON(...) __VA_ARGS__
-#undef CONFIG_FEATURE_CHCON_LONG_OPTIONS
-#define ENABLE_FEATURE_CHCON_LONG_OPTIONS 0
-#define IF_FEATURE_CHCON_LONG_OPTIONS(...)
-#define IF_NOT_FEATURE_CHCON_LONG_OPTIONS(...) __VA_ARGS__
-#undef CONFIG_GETENFORCE
-#define ENABLE_GETENFORCE 0
-#define IF_GETENFORCE(...)
-#define IF_NOT_GETENFORCE(...) __VA_ARGS__
-#undef CONFIG_GETSEBOOL
-#define ENABLE_GETSEBOOL 0
-#define IF_GETSEBOOL(...)
-#define IF_NOT_GETSEBOOL(...) __VA_ARGS__
-#undef CONFIG_LOAD_POLICY
-#define ENABLE_LOAD_POLICY 0
-#define IF_LOAD_POLICY(...)
-#define IF_NOT_LOAD_POLICY(...) __VA_ARGS__
-#undef CONFIG_MATCHPATHCON
-#define ENABLE_MATCHPATHCON 0
-#define IF_MATCHPATHCON(...)
-#define IF_NOT_MATCHPATHCON(...) __VA_ARGS__
-#undef CONFIG_RESTORECON
-#define ENABLE_RESTORECON 0
-#define IF_RESTORECON(...)
-#define IF_NOT_RESTORECON(...) __VA_ARGS__
-#undef CONFIG_RUNCON
-#define ENABLE_RUNCON 0
-#define IF_RUNCON(...)
-#define IF_NOT_RUNCON(...) __VA_ARGS__
-#undef CONFIG_FEATURE_RUNCON_LONG_OPTIONS
-#define ENABLE_FEATURE_RUNCON_LONG_OPTIONS 0
-#define IF_FEATURE_RUNCON_LONG_OPTIONS(...)
-#define IF_NOT_FEATURE_RUNCON_LONG_OPTIONS(...) __VA_ARGS__
-#undef CONFIG_SELINUXENABLED
-#define ENABLE_SELINUXENABLED 0
-#define IF_SELINUXENABLED(...)
-#define IF_NOT_SELINUXENABLED(...) __VA_ARGS__
-#undef CONFIG_SETENFORCE
-#define ENABLE_SETENFORCE 0
-#define IF_SETENFORCE(...)
-#define IF_NOT_SETENFORCE(...) __VA_ARGS__
-#undef CONFIG_SETFILES
-#define ENABLE_SETFILES 0
-#define IF_SETFILES(...)
-#define IF_NOT_SETFILES(...) __VA_ARGS__
-#undef CONFIG_FEATURE_SETFILES_CHECK_OPTION
-#define ENABLE_FEATURE_SETFILES_CHECK_OPTION 0
-#define IF_FEATURE_SETFILES_CHECK_OPTION(...)
-#define IF_NOT_FEATURE_SETFILES_CHECK_OPTION(...) __VA_ARGS__
-#undef CONFIG_SETSEBOOL
-#define ENABLE_SETSEBOOL 0
-#define IF_SETSEBOOL(...)
-#define IF_NOT_SETSEBOOL(...) __VA_ARGS__
-#undef CONFIG_SESTATUS
-#define ENABLE_SESTATUS 0
-#define IF_SESTATUS(...)
-#define IF_NOT_SESTATUS(...) __VA_ARGS__
-
-/*
- * Shells
- */
-#define CONFIG_ASH 1
-#define ENABLE_ASH 1
-#define IF_ASH(...) __VA_ARGS__
-#define IF_NOT_ASH(...)
-#define CONFIG_ASH_BASH_COMPAT 1
-#define ENABLE_ASH_BASH_COMPAT 1
-#define IF_ASH_BASH_COMPAT(...) __VA_ARGS__
-#define IF_NOT_ASH_BASH_COMPAT(...)
-#undef CONFIG_ASH_IDLE_TIMEOUT
-#define ENABLE_ASH_IDLE_TIMEOUT 0
-#define IF_ASH_IDLE_TIMEOUT(...)
-#define IF_NOT_ASH_IDLE_TIMEOUT(...) __VA_ARGS__
-#define CONFIG_ASH_JOB_CONTROL 1
-#define ENABLE_ASH_JOB_CONTROL 1
-#define IF_ASH_JOB_CONTROL(...) __VA_ARGS__
-#define IF_NOT_ASH_JOB_CONTROL(...)
-#define CONFIG_ASH_ALIAS 1
-#define ENABLE_ASH_ALIAS 1
-#define IF_ASH_ALIAS(...) __VA_ARGS__
-#define IF_NOT_ASH_ALIAS(...)
-#define CONFIG_ASH_GETOPTS 1
-#define ENABLE_ASH_GETOPTS 1
-#define IF_ASH_GETOPTS(...) __VA_ARGS__
-#define IF_NOT_ASH_GETOPTS(...)
-#define CONFIG_ASH_BUILTIN_ECHO 1
-#define ENABLE_ASH_BUILTIN_ECHO 1
-#define IF_ASH_BUILTIN_ECHO(...) __VA_ARGS__
-#define IF_NOT_ASH_BUILTIN_ECHO(...)
-#define CONFIG_ASH_BUILTIN_PRINTF 1
-#define ENABLE_ASH_BUILTIN_PRINTF 1
-#define IF_ASH_BUILTIN_PRINTF(...) __VA_ARGS__
-#define IF_NOT_ASH_BUILTIN_PRINTF(...)
-#define CONFIG_ASH_BUILTIN_TEST 1
-#define ENABLE_ASH_BUILTIN_TEST 1
-#define IF_ASH_BUILTIN_TEST(...) __VA_ARGS__
-#define IF_NOT_ASH_BUILTIN_TEST(...)
-#define CONFIG_ASH_CMDCMD 1
-#define ENABLE_ASH_CMDCMD 1
-#define IF_ASH_CMDCMD(...) __VA_ARGS__
-#define IF_NOT_ASH_CMDCMD(...)
-#undef CONFIG_ASH_MAIL
-#define ENABLE_ASH_MAIL 0
-#define IF_ASH_MAIL(...)
-#define IF_NOT_ASH_MAIL(...) __VA_ARGS__
-#define CONFIG_ASH_OPTIMIZE_FOR_SIZE 1
-#define ENABLE_ASH_OPTIMIZE_FOR_SIZE 1
-#define IF_ASH_OPTIMIZE_FOR_SIZE(...) __VA_ARGS__
-#define IF_NOT_ASH_OPTIMIZE_FOR_SIZE(...)
-#undef CONFIG_ASH_RANDOM_SUPPORT
-#define ENABLE_ASH_RANDOM_SUPPORT 0
-#define IF_ASH_RANDOM_SUPPORT(...)
-#define IF_NOT_ASH_RANDOM_SUPPORT(...) __VA_ARGS__
-#define CONFIG_ASH_EXPAND_PRMT 1
-#define ENABLE_ASH_EXPAND_PRMT 1
-#define IF_ASH_EXPAND_PRMT(...) __VA_ARGS__
-#define IF_NOT_ASH_EXPAND_PRMT(...)
-#undef CONFIG_CTTYHACK
-#define ENABLE_CTTYHACK 0
-#define IF_CTTYHACK(...)
-#define IF_NOT_CTTYHACK(...) __VA_ARGS__
-#undef CONFIG_HUSH
-#define ENABLE_HUSH 0
-#define IF_HUSH(...)
-#define IF_NOT_HUSH(...) __VA_ARGS__
-#undef CONFIG_HUSH_BASH_COMPAT
-#define ENABLE_HUSH_BASH_COMPAT 0
-#define IF_HUSH_BASH_COMPAT(...)
-#define IF_NOT_HUSH_BASH_COMPAT(...) __VA_ARGS__
-#undef CONFIG_HUSH_BRACE_EXPANSION
-#define ENABLE_HUSH_BRACE_EXPANSION 0
-#define IF_HUSH_BRACE_EXPANSION(...)
-#define IF_NOT_HUSH_BRACE_EXPANSION(...) __VA_ARGS__
-#undef CONFIG_HUSH_HELP
-#define ENABLE_HUSH_HELP 0
-#define IF_HUSH_HELP(...)
-#define IF_NOT_HUSH_HELP(...) __VA_ARGS__
-#undef CONFIG_HUSH_INTERACTIVE
-#define ENABLE_HUSH_INTERACTIVE 0
-#define IF_HUSH_INTERACTIVE(...)
-#define IF_NOT_HUSH_INTERACTIVE(...) __VA_ARGS__
-#undef CONFIG_HUSH_SAVEHISTORY
-#define ENABLE_HUSH_SAVEHISTORY 0
-#define IF_HUSH_SAVEHISTORY(...)
-#define IF_NOT_HUSH_SAVEHISTORY(...) __VA_ARGS__
-#undef CONFIG_HUSH_JOB
-#define ENABLE_HUSH_JOB 0
-#define IF_HUSH_JOB(...)
-#define IF_NOT_HUSH_JOB(...) __VA_ARGS__
-#undef CONFIG_HUSH_TICK
-#define ENABLE_HUSH_TICK 0
-#define IF_HUSH_TICK(...)
-#define IF_NOT_HUSH_TICK(...) __VA_ARGS__
-#undef CONFIG_HUSH_IF
-#define ENABLE_HUSH_IF 0
-#define IF_HUSH_IF(...)
-#define IF_NOT_HUSH_IF(...) __VA_ARGS__
-#undef CONFIG_HUSH_LOOPS
-#define ENABLE_HUSH_LOOPS 0
-#define IF_HUSH_LOOPS(...)
-#define IF_NOT_HUSH_LOOPS(...) __VA_ARGS__
-#undef CONFIG_HUSH_CASE
-#define ENABLE_HUSH_CASE 0
-#define IF_HUSH_CASE(...)
-#define IF_NOT_HUSH_CASE(...) __VA_ARGS__
-#undef CONFIG_HUSH_FUNCTIONS
-#define ENABLE_HUSH_FUNCTIONS 0
-#define IF_HUSH_FUNCTIONS(...)
-#define IF_NOT_HUSH_FUNCTIONS(...) __VA_ARGS__
-#undef CONFIG_HUSH_LOCAL
-#define ENABLE_HUSH_LOCAL 0
-#define IF_HUSH_LOCAL(...)
-#define IF_NOT_HUSH_LOCAL(...) __VA_ARGS__
-#undef CONFIG_HUSH_RANDOM_SUPPORT
-#define ENABLE_HUSH_RANDOM_SUPPORT 0
-#define IF_HUSH_RANDOM_SUPPORT(...)
-#define IF_NOT_HUSH_RANDOM_SUPPORT(...) __VA_ARGS__
-#undef CONFIG_HUSH_EXPORT_N
-#define ENABLE_HUSH_EXPORT_N 0
-#define IF_HUSH_EXPORT_N(...)
-#define IF_NOT_HUSH_EXPORT_N(...) __VA_ARGS__
-#undef CONFIG_HUSH_MODE_X
-#define ENABLE_HUSH_MODE_X 0
-#define IF_HUSH_MODE_X(...)
-#define IF_NOT_HUSH_MODE_X(...) __VA_ARGS__
-#undef CONFIG_MSH
-#define ENABLE_MSH 0
-#define IF_MSH(...)
-#define IF_NOT_MSH(...) __VA_ARGS__
-#define CONFIG_FEATURE_SH_IS_ASH 1
-#define ENABLE_FEATURE_SH_IS_ASH 1
-#define IF_FEATURE_SH_IS_ASH(...) __VA_ARGS__
-#define IF_NOT_FEATURE_SH_IS_ASH(...)
-#undef CONFIG_FEATURE_SH_IS_HUSH
-#define ENABLE_FEATURE_SH_IS_HUSH 0
-#define IF_FEATURE_SH_IS_HUSH(...)
-#define IF_NOT_FEATURE_SH_IS_HUSH(...) __VA_ARGS__
-#undef CONFIG_FEATURE_SH_IS_NONE
-#define ENABLE_FEATURE_SH_IS_NONE 0
-#define IF_FEATURE_SH_IS_NONE(...)
-#define IF_NOT_FEATURE_SH_IS_NONE(...) __VA_ARGS__
-#undef CONFIG_FEATURE_BASH_IS_ASH
-#define ENABLE_FEATURE_BASH_IS_ASH 0
-#define IF_FEATURE_BASH_IS_ASH(...)
-#define IF_NOT_FEATURE_BASH_IS_ASH(...) __VA_ARGS__
-#undef CONFIG_FEATURE_BASH_IS_HUSH
-#define ENABLE_FEATURE_BASH_IS_HUSH 0
-#define IF_FEATURE_BASH_IS_HUSH(...)
-#define IF_NOT_FEATURE_BASH_IS_HUSH(...) __VA_ARGS__
-#define CONFIG_FEATURE_BASH_IS_NONE 1
-#define ENABLE_FEATURE_BASH_IS_NONE 1
-#define IF_FEATURE_BASH_IS_NONE(...) __VA_ARGS__
-#define IF_NOT_FEATURE_BASH_IS_NONE(...)
-#define CONFIG_SH_MATH_SUPPORT 1
-#define ENABLE_SH_MATH_SUPPORT 1
-#define IF_SH_MATH_SUPPORT(...) __VA_ARGS__
-#define IF_NOT_SH_MATH_SUPPORT(...)
-#define CONFIG_SH_MATH_SUPPORT_64 1
-#define ENABLE_SH_MATH_SUPPORT_64 1
-#define IF_SH_MATH_SUPPORT_64(...) __VA_ARGS__
-#define IF_NOT_SH_MATH_SUPPORT_64(...)
-#define CONFIG_FEATURE_SH_EXTRA_QUIET 1
-#define ENABLE_FEATURE_SH_EXTRA_QUIET 1
-#define IF_FEATURE_SH_EXTRA_QUIET(...) __VA_ARGS__
-#define IF_NOT_FEATURE_SH_EXTRA_QUIET(...)
-#undef CONFIG_FEATURE_SH_STANDALONE
-#define ENABLE_FEATURE_SH_STANDALONE 0
-#define IF_FEATURE_SH_STANDALONE(...)
-#define IF_NOT_FEATURE_SH_STANDALONE(...) __VA_ARGS__
-#undef CONFIG_FEATURE_SH_NOFORK
-#define ENABLE_FEATURE_SH_NOFORK 0
-#define IF_FEATURE_SH_NOFORK(...)
-#define IF_NOT_FEATURE_SH_NOFORK(...) __VA_ARGS__
-#undef CONFIG_FEATURE_SH_HISTFILESIZE
-#define ENABLE_FEATURE_SH_HISTFILESIZE 0
-#define IF_FEATURE_SH_HISTFILESIZE(...)
-#define IF_NOT_FEATURE_SH_HISTFILESIZE(...) __VA_ARGS__
-
-/*
- * System Logging Utilities
- */
-#undef CONFIG_SYSLOGD
-#define ENABLE_SYSLOGD 0
-#define IF_SYSLOGD(...)
-#define IF_NOT_SYSLOGD(...) __VA_ARGS__
-#undef CONFIG_FEATURE_ROTATE_LOGFILE
-#define ENABLE_FEATURE_ROTATE_LOGFILE 0
-#define IF_FEATURE_ROTATE_LOGFILE(...)
-#define IF_NOT_FEATURE_ROTATE_LOGFILE(...) __VA_ARGS__
-#undef CONFIG_FEATURE_REMOTE_LOG
-#define ENABLE_FEATURE_REMOTE_LOG 0
-#define IF_FEATURE_REMOTE_LOG(...)
-#define IF_NOT_FEATURE_REMOTE_LOG(...) __VA_ARGS__
-#undef CONFIG_FEATURE_SYSLOGD_DUP
-#define ENABLE_FEATURE_SYSLOGD_DUP 0
-#define IF_FEATURE_SYSLOGD_DUP(...)
-#define IF_NOT_FEATURE_SYSLOGD_DUP(...) __VA_ARGS__
-#undef CONFIG_FEATURE_SYSLOGD_CFG
-#define ENABLE_FEATURE_SYSLOGD_CFG 0
-#define IF_FEATURE_SYSLOGD_CFG(...)
-#define IF_NOT_FEATURE_SYSLOGD_CFG(...) __VA_ARGS__
-#define CONFIG_FEATURE_SYSLOGD_READ_BUFFER_SIZE 0
-#define ENABLE_FEATURE_SYSLOGD_READ_BUFFER_SIZE 1
-#define IF_FEATURE_SYSLOGD_READ_BUFFER_SIZE(...) __VA_ARGS__
-#define IF_NOT_FEATURE_SYSLOGD_READ_BUFFER_SIZE(...)
-#undef CONFIG_FEATURE_IPC_SYSLOG
-#define ENABLE_FEATURE_IPC_SYSLOG 0
-#define IF_FEATURE_IPC_SYSLOG(...)
-#define IF_NOT_FEATURE_IPC_SYSLOG(...) __VA_ARGS__
-#define CONFIG_FEATURE_IPC_SYSLOG_BUFFER_SIZE 0
-#define ENABLE_FEATURE_IPC_SYSLOG_BUFFER_SIZE 1
-#define IF_FEATURE_IPC_SYSLOG_BUFFER_SIZE(...) __VA_ARGS__
-#define IF_NOT_FEATURE_IPC_SYSLOG_BUFFER_SIZE(...)
-#undef CONFIG_LOGREAD
-#define ENABLE_LOGREAD 0
-#define IF_LOGREAD(...)
-#define IF_NOT_LOGREAD(...) __VA_ARGS__
-#undef CONFIG_FEATURE_LOGREAD_REDUCED_LOCKING
-#define ENABLE_FEATURE_LOGREAD_REDUCED_LOCKING 0
-#define IF_FEATURE_LOGREAD_REDUCED_LOCKING(...)
-#define IF_NOT_FEATURE_LOGREAD_REDUCED_LOCKING(...) __VA_ARGS__
-#undef CONFIG_FEATURE_KMSG_SYSLOG
-#define ENABLE_FEATURE_KMSG_SYSLOG 0
-#define IF_FEATURE_KMSG_SYSLOG(...)
-#define IF_NOT_FEATURE_KMSG_SYSLOG(...) __VA_ARGS__
-#undef CONFIG_KLOGD
-#define ENABLE_KLOGD 0
-#define IF_KLOGD(...)
-#define IF_NOT_KLOGD(...) __VA_ARGS__
-#undef CONFIG_FEATURE_KLOGD_KLOGCTL
-#define ENABLE_FEATURE_KLOGD_KLOGCTL 0
-#define IF_FEATURE_KLOGD_KLOGCTL(...)
-#define IF_NOT_FEATURE_KLOGD_KLOGCTL(...) __VA_ARGS__
-#undef CONFIG_LOGGER
-#define ENABLE_LOGGER 0
-#define IF_LOGGER(...)
-#define IF_NOT_LOGGER(...) __VA_ARGS__
diff --git a/include-minimal/bbconfigopts.h b/include-minimal/bbconfigopts.h
deleted file mode 100644
index c34f01b..0000000
--- a/include-minimal/bbconfigopts.h
+++ b/dev/null
@@ -1,898 +0,0 @@
-#ifndef _BBCONFIGOPTS_H
-#define _BBCONFIGOPTS_H
-/*
- * busybox configuration settings.
- *
- * Licensed under GPLv2 or later, see file LICENSE in this source tree.
- *
- * This file is generated automatically by scripts/mkconfigs.
- * Do not edit.
- */
-static const char bbconfig_config[] ALIGN1 =
-"CONFIG_HAVE_DOT_CONFIG=y\n"
-"# CONFIG_DESKTOP is not set\n"
-"# CONFIG_EXTRA_COMPAT is not set\n"
-"# CONFIG_INCLUDE_SUSv2 is not set\n"
-"# CONFIG_USE_PORTABLE_CODE is not set\n"
-"CONFIG_PLATFORM_LINUX=y\n"
-"CONFIG_FEATURE_BUFFERS_USE_MALLOC=y\n"
-"# CONFIG_FEATURE_BUFFERS_GO_ON_STACK is not set\n"
-"# CONFIG_FEATURE_BUFFERS_GO_IN_BSS is not set\n"
-"CONFIG_SHOW_USAGE=y\n"
-"CONFIG_FEATURE_VERBOSE_USAGE=y\n"
-"CONFIG_FEATURE_COMPRESS_USAGE=y\n"
-"# CONFIG_FEATURE_INSTALLER is not set\n"
-"CONFIG_INSTALL_NO_USR=y\n"
-"# CONFIG_LOCALE_SUPPORT is not set\n"
-"CONFIG_UNICODE_SUPPORT=y\n"
-"# CONFIG_UNICODE_USING_LOCALE is not set\n"
-"# CONFIG_FEATURE_CHECK_UNICODE_IN_ENV is not set\n"
-"CONFIG_SUBST_WCHAR=63\n"
-"CONFIG_LAST_SUPPORTED_WCHAR=0\n"
-"# CONFIG_UNICODE_COMBINING_WCHARS is not set\n"
-"CONFIG_UNICODE_WIDE_WCHARS=y\n"
-"# CONFIG_UNICODE_BIDI_SUPPORT is not set\n"
-"# CONFIG_UNICODE_NEUTRAL_TABLE is not set\n"
-"CONFIG_UNICODE_PRESERVE_BROKEN=y\n"
-"CONFIG_LONG_OPTS=y\n"
-"# CONFIG_FEATURE_DEVPTS is not set\n"
-"# CONFIG_FEATURE_CLEAN_UP is not set\n"
-"# CONFIG_FEATURE_UTMP is not set\n"
-"# CONFIG_FEATURE_WTMP is not set\n"
-"# CONFIG_FEATURE_PIDFILE is not set\n"
-"CONFIG_PID_FILE_PATH=\"\"\n"
-"CONFIG_FEATURE_SUID=y\n"
-"# CONFIG_FEATURE_SUID_CONFIG is not set\n"
-"# CONFIG_FEATURE_SUID_CONFIG_QUIET is not set\n"
-"# CONFIG_SELINUX is not set\n"
-"# CONFIG_FEATURE_PREFER_APPLETS is not set\n"
-"CONFIG_BUSYBOX_EXEC_PATH=\"/proc/self/exe\"\n"
-"# CONFIG_FEATURE_SYSLOG is not set\n"
-"# CONFIG_FEATURE_HAVE_RPC is not set\n"
-"# CONFIG_STATIC is not set\n"
-"# CONFIG_PIE is not set\n"
-"# CONFIG_NOMMU is not set\n"
-"# CONFIG_BUILD_LIBBUSYBOX is not set\n"
-"# CONFIG_FEATURE_INDIVIDUAL is not set\n"
-"# CONFIG_FEATURE_SHARED_BUSYBOX is not set\n"
-"CONFIG_LFS=y\n"
-"CONFIG_CROSS_COMPILER_PREFIX=\"arm-eabi-\"\n"
-"CONFIG_SYSROOT=\"\"\n"
-"CONFIG_EXTRA_CFLAGS=\"-Os\"\n"
-"CONFIG_EXTRA_LDFLAGS=\"\"\n"
-"CONFIG_EXTRA_LDLIBS=\"\"\n"
-"# CONFIG_DEBUG is not set\n"
-"# CONFIG_DEBUG_PESSIMIZE is not set\n"
-"# CONFIG_WERROR is not set\n"
-"CONFIG_NO_DEBUG_LIB=y\n"
-"# CONFIG_DMALLOC is not set\n"
-"# CONFIG_EFENCE is not set\n"
-"CONFIG_INSTALL_APPLET_SYMLINKS=y\n"
-"# CONFIG_INSTALL_APPLET_HARDLINKS is not set\n"
-"# CONFIG_INSTALL_APPLET_SCRIPT_WRAPPERS is not set\n"
-"# CONFIG_INSTALL_APPLET_DONT is not set\n"
-"# CONFIG_INSTALL_SH_APPLET_SYMLINK is not set\n"
-"# CONFIG_INSTALL_SH_APPLET_HARDLINK is not set\n"
-"# CONFIG_INSTALL_SH_APPLET_SCRIPT_WRAPPER is not set\n"
-"CONFIG_PREFIX=\"/system/xbin/bb\"\n"
-"# CONFIG_FEATURE_SYSTEMD is not set\n"
-"# CONFIG_FEATURE_RTMINMAX is not set\n"
-"CONFIG_PASSWORD_MINLEN=6\n"
-"CONFIG_MD5_SMALL=0\n"
-"CONFIG_SHA3_SMALL=1\n"
-"CONFIG_FEATURE_FAST_TOP=y\n"
-"# CONFIG_FEATURE_ETC_NETWORKS is not set\n"
-"CONFIG_FEATURE_USE_TERMIOS=y\n"
-"CONFIG_FEATURE_EDITING=y\n"
-"CONFIG_FEATURE_EDITING_MAX_LEN=1024\n"
-"CONFIG_FEATURE_EDITING_VI=y\n"
-"CONFIG_FEATURE_EDITING_HISTORY=256\n"
-"CONFIG_FEATURE_EDITING_SAVEHISTORY=y\n"
-"CONFIG_FEATURE_EDITING_SAVE_ON_EXIT=y\n"
-"CONFIG_FEATURE_REVERSE_SEARCH=y\n"
-"CONFIG_FEATURE_TAB_COMPLETION=y\n"
-"# CONFIG_FEATURE_USERNAME_COMPLETION is not set\n"
-"CONFIG_FEATURE_EDITING_FANCY_PROMPT=y\n"
-"# CONFIG_FEATURE_EDITING_ASK_TERMINAL is not set\n"
-"CONFIG_FEATURE_NON_POSIX_CP=y\n"
-"# CONFIG_FEATURE_VERBOSE_CP_MESSAGE is not set\n"
-"CONFIG_FEATURE_COPYBUF_KB=4\n"
-"CONFIG_FEATURE_SKIP_ROOTFS=y\n"
-"CONFIG_MONOTONIC_SYSCALL=y\n"
-"CONFIG_IOCTL_HEX2STR_ERROR=y\n"
-"# CONFIG_FEATURE_HWIB is not set\n"
-"# CONFIG_FEATURE_SEAMLESS_XZ is not set\n"
-"# CONFIG_FEATURE_SEAMLESS_LZMA is not set\n"
-"CONFIG_FEATURE_SEAMLESS_BZ2=y\n"
-"CONFIG_FEATURE_SEAMLESS_GZ=y\n"
-"# CONFIG_FEATURE_SEAMLESS_Z is not set\n"
-"# CONFIG_AR is not set\n"
-"# CONFIG_FEATURE_AR_LONG_FILENAMES is not set\n"
-"# CONFIG_FEATURE_AR_CREATE is not set\n"
-"CONFIG_BUNZIP2=y\n"
-"CONFIG_BZIP2=y\n"
-"CONFIG_CPIO=y\n"
-"CONFIG_FEATURE_CPIO_O=y\n"
-"# CONFIG_FEATURE_CPIO_P is not set\n"
-"# CONFIG_DPKG is not set\n"
-"# CONFIG_DPKG_DEB is not set\n"
-"# CONFIG_FEATURE_DPKG_DEB_EXTRACT_ONLY is not set\n"
-"CONFIG_GUNZIP=y\n"
-"CONFIG_GZIP=y\n"
-"CONFIG_FEATURE_GZIP_LONG_OPTIONS=y\n"
-"CONFIG_GZIP_FAST=2\n"
-"CONFIG_LZOP=y\n"
-"# CONFIG_LZOP_COMPR_HIGH is not set\n"
-"# CONFIG_RPM2CPIO is not set\n"
-"# CONFIG_RPM is not set\n"
-"CONFIG_TAR=y\n"
-"CONFIG_FEATURE_TAR_CREATE=y\n"
-"# CONFIG_FEATURE_TAR_AUTODETECT is not set\n"
-"CONFIG_FEATURE_TAR_FROM=y\n"
-"# CONFIG_FEATURE_TAR_OLDGNU_COMPATIBILITY is not set\n"
-"# CONFIG_FEATURE_TAR_OLDSUN_COMPATIBILITY is not set\n"
-"CONFIG_FEATURE_TAR_GNU_EXTENSIONS=y\n"
-"CONFIG_FEATURE_TAR_LONG_OPTIONS=y\n"
-"# CONFIG_FEATURE_TAR_TO_COMMAND is not set\n"
-"# CONFIG_FEATURE_TAR_UNAME_GNAME is not set\n"
-"CONFIG_FEATURE_TAR_NOPRESERVE_TIME=y\n"
-"# CONFIG_FEATURE_TAR_SELINUX is not set\n"
-"# CONFIG_UNCOMPRESS is not set\n"
-"CONFIG_UNLZMA=y\n"
-"# CONFIG_FEATURE_LZMA_FAST is not set\n"
-"# CONFIG_LZMA is not set\n"
-"CONFIG_UNXZ=y\n"
-"# CONFIG_XZ is not set\n"
-"CONFIG_UNZIP=y\n"
-"CONFIG_BASENAME=y\n"
-"CONFIG_CAT=y\n"
-"CONFIG_DATE=y\n"
-"CONFIG_FEATURE_DATE_ISOFMT=y\n"
-"# CONFIG_FEATURE_DATE_NANO is not set\n"
-"CONFIG_FEATURE_DATE_COMPAT=y\n"
-"# CONFIG_HOSTID is not set\n"
-"CONFIG_ID=y\n"
-"CONFIG_GROUPS=y\n"
-"CONFIG_TEST=y\n"
-"# CONFIG_FEATURE_TEST_64 is not set\n"
-"CONFIG_TOUCH=y\n"
-"# CONFIG_FEATURE_TOUCH_SUSV3 is not set\n"
-"CONFIG_TR=y\n"
-"CONFIG_FEATURE_TR_CLASSES=y\n"
-"# CONFIG_FEATURE_TR_EQUIV is not set\n"
-"CONFIG_BASE64=y\n"
-"# CONFIG_WHO is not set\n"
-"# CONFIG_USERS is not set\n"
-"CONFIG_CAL=y\n"
-"CONFIG_CATV=y\n"
-"CONFIG_CHGRP=y\n"
-"CONFIG_CHMOD=y\n"
-"CONFIG_CHOWN=y\n"
-"CONFIG_FEATURE_CHOWN_LONG_OPTIONS=y\n"
-"CONFIG_CHROOT=y\n"
-"# CONFIG_CKSUM is not set\n"
-"# CONFIG_COMM is not set\n"
-"CONFIG_CP=y\n"
-"CONFIG_FEATURE_CP_LONG_OPTIONS=y\n"
-"CONFIG_CUT=y\n"
-"CONFIG_DD=y\n"
-"CONFIG_FEATURE_DD_SIGNAL_HANDLING=y\n"
-"CONFIG_FEATURE_DD_THIRD_STATUS_LINE=y\n"
-"CONFIG_FEATURE_DD_IBS_OBS=y\n"
-"CONFIG_DF=y\n"
-"CONFIG_FEATURE_DF_FANCY=y\n"
-"CONFIG_DIRNAME=y\n"
-"CONFIG_DOS2UNIX=y\n"
-"CONFIG_UNIX2DOS=y\n"
-"CONFIG_DU=y\n"
-"CONFIG_FEATURE_DU_DEFAULT_BLOCKSIZE_1K=y\n"
-"CONFIG_ECHO=y\n"
-"CONFIG_FEATURE_FANCY_ECHO=y\n"
-"CONFIG_ENV=y\n"
-"# CONFIG_FEATURE_ENV_LONG_OPTIONS is not set\n"
-"CONFIG_EXPAND=y\n"
-"# CONFIG_FEATURE_EXPAND_LONG_OPTIONS is not set\n"
-"CONFIG_EXPR=y\n"
-"CONFIG_EXPR_MATH_SUPPORT_64=y\n"
-"CONFIG_FALSE=y\n"
-"CONFIG_FOLD=y\n"
-"# CONFIG_FSYNC is not set\n"
-"CONFIG_HEAD=y\n"
-"# CONFIG_FEATURE_FANCY_HEAD is not set\n"
-"CONFIG_INSTALL=y\n"
-"# CONFIG_FEATURE_INSTALL_LONG_OPTIONS is not set\n"
-"CONFIG_LN=y\n"
-"# CONFIG_LOGNAME is not set\n"
-"CONFIG_LS=y\n"
-"CONFIG_FEATURE_LS_FILETYPES=y\n"
-"CONFIG_FEATURE_LS_FOLLOWLINKS=y\n"
-"CONFIG_FEATURE_LS_RECURSIVE=y\n"
-"CONFIG_FEATURE_LS_SORTFILES=y\n"
-"CONFIG_FEATURE_LS_TIMESTAMPS=y\n"
-"CONFIG_FEATURE_LS_USERNAME=y\n"
-"CONFIG_FEATURE_LS_COLOR=y\n"
-"# CONFIG_FEATURE_LS_COLOR_IS_DEFAULT is not set\n"
-"CONFIG_MD5SUM=y\n"
-"CONFIG_MKDIR=y\n"
-"# CONFIG_FEATURE_MKDIR_LONG_OPTIONS is not set\n"
-"CONFIG_MKFIFO=y\n"
-"CONFIG_MKNOD=y\n"
-"CONFIG_MV=y\n"
-"# CONFIG_FEATURE_MV_LONG_OPTIONS is not set\n"
-"CONFIG_NICE=y\n"
-"CONFIG_NOHUP=y\n"
-"CONFIG_OD=y\n"
-"CONFIG_PRINTENV=y\n"
-"CONFIG_PRINTF=y\n"
-"CONFIG_PWD=y\n"
-"CONFIG_READLINK=y\n"
-"CONFIG_FEATURE_READLINK_FOLLOW=y\n"
-"CONFIG_REALPATH=y\n"
-"CONFIG_RM=y\n"
-"CONFIG_RMDIR=y\n"
-"CONFIG_FEATURE_RMDIR_LONG_OPTIONS=y\n"
-"CONFIG_SEQ=y\n"
-"CONFIG_SHA1SUM=y\n"
-"CONFIG_SHA256SUM=y\n"
-"CONFIG_SHA512SUM=y\n"
-"# CONFIG_SHA3SUM is not set\n"
-"CONFIG_SLEEP=y\n"
-"CONFIG_FEATURE_FANCY_SLEEP=y\n"
-"CONFIG_FEATURE_FLOAT_SLEEP=y\n"
-"CONFIG_SORT=y\n"
-"# CONFIG_FEATURE_SORT_BIG is not set\n"
-"CONFIG_SPLIT=y\n"
-"# CONFIG_FEATURE_SPLIT_FANCY is not set\n"
-"CONFIG_STAT=y\n"
-"# CONFIG_FEATURE_STAT_FORMAT is not set\n"
-"CONFIG_STTY=y\n"
-"# CONFIG_SUM is not set\n"
-"CONFIG_SYNC=y\n"
-"CONFIG_TAC=y\n"
-"CONFIG_TAIL=y\n"
-"CONFIG_FEATURE_FANCY_TAIL=y\n"
-"CONFIG_TEE=y\n"
-"# CONFIG_FEATURE_TEE_USE_BLOCK_IO is not set\n"
-"CONFIG_TRUE=y\n"
-"# CONFIG_TTY is not set\n"
-"CONFIG_UNAME=y\n"
-"CONFIG_UNEXPAND=y\n"
-"CONFIG_FEATURE_UNEXPAND_LONG_OPTIONS=y\n"
-"CONFIG_UNIQ=y\n"
-"CONFIG_USLEEP=y\n"
-"CONFIG_UUDECODE=y\n"
-"CONFIG_UUENCODE=y\n"
-"CONFIG_WC=y\n"
-"# CONFIG_FEATURE_WC_LARGE is not set\n"
-"CONFIG_WHOAMI=y\n"
-"CONFIG_YES=y\n"
-"CONFIG_FEATURE_PRESERVE_HARDLINKS=y\n"
-"CONFIG_FEATURE_AUTOWIDTH=y\n"
-"CONFIG_FEATURE_HUMAN_READABLE=y\n"
-"CONFIG_FEATURE_MD5_SHA1_SUM_CHECK=y\n"
-"# CONFIG_CHVT is not set\n"
-"# CONFIG_FGCONSOLE is not set\n"
-"CONFIG_CLEAR=y\n"
-"# CONFIG_DEALLOCVT is not set\n"
-"# CONFIG_DUMPKMAP is not set\n"
-"# CONFIG_KBD_MODE is not set\n"
-"# CONFIG_LOADFONT is not set\n"
-"# CONFIG_LOADKMAP is not set\n"
-"# CONFIG_OPENVT is not set\n"
-"CONFIG_RESET=y\n"
-"CONFIG_RESIZE=y\n"
-"# CONFIG_FEATURE_RESIZE_PRINT is not set\n"
-"CONFIG_SETCONSOLE=y\n"
-"# CONFIG_FEATURE_SETCONSOLE_LONG_OPTIONS is not set\n"
-"# CONFIG_SETFONT is not set\n"
-"# CONFIG_FEATURE_SETFONT_TEXTUAL_MAP is not set\n"
-"CONFIG_DEFAULT_SETFONT_DIR=\"\"\n"
-"# CONFIG_SETKEYCODES is not set\n"
-"# CONFIG_SETLOGCONS is not set\n"
-"# CONFIG_SHOWKEY is not set\n"
-"# CONFIG_FEATURE_LOADFONT_PSF2 is not set\n"
-"# CONFIG_FEATURE_LOADFONT_RAW is not set\n"
-"CONFIG_MKTEMP=y\n"
-"# CONFIG_PIPE_PROGRESS is not set\n"
-"CONFIG_RUN_PARTS=y\n"
-"# CONFIG_FEATURE_RUN_PARTS_LONG_OPTIONS is not set\n"
-"CONFIG_FEATURE_RUN_PARTS_FANCY=y\n"
-"# CONFIG_START_STOP_DAEMON is not set\n"
-"# CONFIG_FEATURE_START_STOP_DAEMON_FANCY is not set\n"
-"# CONFIG_FEATURE_START_STOP_DAEMON_LONG_OPTIONS is not set\n"
-"CONFIG_WHICH=y\n"
-"CONFIG_PATCH=y\n"
-"# CONFIG_VI is not set\n"
-"CONFIG_FEATURE_VI_MAX_LEN=0\n"
-"# CONFIG_FEATURE_VI_8BIT is not set\n"
-"# CONFIG_FEATURE_VI_COLON is not set\n"
-"# CONFIG_FEATURE_VI_YANKMARK is not set\n"
-"# CONFIG_FEATURE_VI_SEARCH is not set\n"
-"# CONFIG_FEATURE_VI_REGEX_SEARCH is not set\n"
-"# CONFIG_FEATURE_VI_USE_SIGNALS is not set\n"
-"# CONFIG_FEATURE_VI_DOT_CMD is not set\n"
-"# CONFIG_FEATURE_VI_READONLY is not set\n"
-"# CONFIG_FEATURE_VI_SETOPTS is not set\n"
-"# CONFIG_FEATURE_VI_SET is not set\n"
-"# CONFIG_FEATURE_VI_WIN_RESIZE is not set\n"
-"# CONFIG_FEATURE_VI_ASK_TERMINAL is not set\n"
-"CONFIG_AWK=y\n"
-"# CONFIG_FEATURE_AWK_LIBM is not set\n"
-"CONFIG_CMP=y\n"
-"CONFIG_DIFF=y\n"
-"CONFIG_FEATURE_DIFF_LONG_OPTIONS=y\n"
-"CONFIG_FEATURE_DIFF_DIR=y\n"
-"# CONFIG_ED is not set\n"
-"CONFIG_SED=y\n"
-"CONFIG_FEATURE_ALLOW_EXEC=y\n"
-"CONFIG_FIND=y\n"
-"CONFIG_FEATURE_FIND_PRINT0=y\n"
-"CONFIG_FEATURE_FIND_MTIME=y\n"
-"CONFIG_FEATURE_FIND_MMIN=y\n"
-"CONFIG_FEATURE_FIND_PERM=y\n"
-"CONFIG_FEATURE_FIND_TYPE=y\n"
-"CONFIG_FEATURE_FIND_XDEV=y\n"
-"CONFIG_FEATURE_FIND_MAXDEPTH=y\n"
-"CONFIG_FEATURE_FIND_NEWER=y\n"
-"# CONFIG_FEATURE_FIND_INUM is not set\n"
-"CONFIG_FEATURE_FIND_EXEC=y\n"
-"CONFIG_FEATURE_FIND_USER=y\n"
-"CONFIG_FEATURE_FIND_GROUP=y\n"
-"CONFIG_FEATURE_FIND_NOT=y\n"
-"CONFIG_FEATURE_FIND_DEPTH=y\n"
-"CONFIG_FEATURE_FIND_PAREN=y\n"
-"CONFIG_FEATURE_FIND_SIZE=y\n"
-"CONFIG_FEATURE_FIND_PRUNE=y\n"
-"# CONFIG_FEATURE_FIND_DELETE is not set\n"
-"CONFIG_FEATURE_FIND_PATH=y\n"
-"CONFIG_FEATURE_FIND_REGEX=y\n"
-"# CONFIG_FEATURE_FIND_CONTEXT is not set\n"
-"# CONFIG_FEATURE_FIND_LINKS is not set\n"
-"CONFIG_GREP=y\n"
-"CONFIG_FEATURE_GREP_EGREP_ALIAS=y\n"
-"CONFIG_FEATURE_GREP_FGREP_ALIAS=y\n"
-"CONFIG_FEATURE_GREP_CONTEXT=y\n"
-"CONFIG_XARGS=y\n"
-"CONFIG_FEATURE_XARGS_SUPPORT_CONFIRMATION=y\n"
-"CONFIG_FEATURE_XARGS_SUPPORT_QUOTES=y\n"
-"# CONFIG_FEATURE_XARGS_SUPPORT_TERMOPT is not set\n"
-"CONFIG_FEATURE_XARGS_SUPPORT_ZERO_TERM=y\n"
-"# CONFIG_BOOTCHARTD is not set\n"
-"# CONFIG_FEATURE_BOOTCHARTD_BLOATED_HEADER is not set\n"
-"# CONFIG_FEATURE_BOOTCHARTD_CONFIG_FILE is not set\n"
-"# CONFIG_HALT is not set\n"
-"# CONFIG_FEATURE_CALL_TELINIT is not set\n"
-"CONFIG_TELINIT_PATH=\"\"\n"
-"# CONFIG_INIT is not set\n"
-"# CONFIG_FEATURE_USE_INITTAB is not set\n"
-"# CONFIG_FEATURE_KILL_REMOVED is not set\n"
-"CONFIG_FEATURE_KILL_DELAY=0\n"
-"# CONFIG_FEATURE_INIT_SCTTY is not set\n"
-"# CONFIG_FEATURE_INIT_SYSLOG is not set\n"
-"# CONFIG_FEATURE_EXTRA_QUIET is not set\n"
-"# CONFIG_FEATURE_INIT_COREDUMPS is not set\n"
-"# CONFIG_FEATURE_INITRD is not set\n"
-"CONFIG_INIT_TERMINAL_TYPE=\"\"\n"
-"# CONFIG_MESG is not set\n"
-"# CONFIG_FEATURE_MESG_ENABLE_ONLY_GROUP is not set\n"
-"# CONFIG_ADD_SHELL is not set\n"
-"# CONFIG_REMOVE_SHELL is not set\n"
-"# CONFIG_FEATURE_SHADOWPASSWDS is not set\n"
-"# CONFIG_USE_BB_PWD_GRP is not set\n"
-"# CONFIG_USE_BB_SHADOW is not set\n"
-"CONFIG_USE_BB_CRYPT=y\n"
-"# CONFIG_USE_BB_CRYPT_SHA is not set\n"
-"# CONFIG_ADDUSER is not set\n"
-"# CONFIG_FEATURE_ADDUSER_LONG_OPTIONS is not set\n"
-"# CONFIG_FEATURE_CHECK_NAMES is not set\n"
-"CONFIG_FIRST_SYSTEM_ID=0\n"
-"CONFIG_LAST_SYSTEM_ID=0\n"
-"# CONFIG_ADDGROUP is not set\n"
-"# CONFIG_FEATURE_ADDGROUP_LONG_OPTIONS is not set\n"
-"# CONFIG_FEATURE_ADDUSER_TO_GROUP is not set\n"
-"# CONFIG_DELUSER is not set\n"
-"# CONFIG_DELGROUP is not set\n"
-"# CONFIG_FEATURE_DEL_USER_FROM_GROUP is not set\n"
-"# CONFIG_GETTY is not set\n"
-"# CONFIG_LOGIN is not set\n"
-"# CONFIG_LOGIN_SESSION_AS_CHILD is not set\n"
-"# CONFIG_PAM is not set\n"
-"# CONFIG_LOGIN_SCRIPTS is not set\n"
-"# CONFIG_FEATURE_NOLOGIN is not set\n"
-"# CONFIG_FEATURE_SECURETTY is not set\n"
-"# CONFIG_PASSWD is not set\n"
-"# CONFIG_FEATURE_PASSWD_WEAK_CHECK is not set\n"
-"# CONFIG_CRYPTPW is not set\n"
-"# CONFIG_CHPASSWD is not set\n"
-"CONFIG_FEATURE_DEFAULT_PASSWD_ALGO=\"\"\n"
-"# CONFIG_SU is not set\n"
-"# CONFIG_FEATURE_SU_SYSLOG is not set\n"
-"# CONFIG_FEATURE_SU_CHECKS_SHELLS is not set\n"
-"# CONFIG_SULOGIN is not set\n"
-"# CONFIG_VLOCK is not set\n"
-"CONFIG_CHATTR=y\n"
-"# CONFIG_FSCK is not set\n"
-"CONFIG_LSATTR=y\n"
-"CONFIG_TUNE2FS=y\n"
-"CONFIG_MODINFO=y\n"
-"CONFIG_MODPROBE_SMALL=y\n"
-"CONFIG_FEATURE_MODPROBE_SMALL_OPTIONS_ON_CMDLINE=y\n"
-"# CONFIG_FEATURE_MODPROBE_SMALL_CHECK_ALREADY_LOADED is not set\n"
-"# CONFIG_INSMOD is not set\n"
-"# CONFIG_RMMOD is not set\n"
-"# CONFIG_LSMOD is not set\n"
-"# CONFIG_FEATURE_LSMOD_PRETTY_2_6_OUTPUT is not set\n"
-"# CONFIG_MODPROBE is not set\n"
-"# CONFIG_FEATURE_MODPROBE_BLACKLIST is not set\n"
-"# CONFIG_DEPMOD is not set\n"
-"# CONFIG_FEATURE_2_4_MODULES is not set\n"
-"CONFIG_FEATURE_INSMOD_TRY_MMAP=y\n"
-"# CONFIG_FEATURE_INSMOD_VERSION_CHECKING is not set\n"
-"# CONFIG_FEATURE_INSMOD_KSYMOOPS_SYMBOLS is not set\n"
-"# CONFIG_FEATURE_INSMOD_LOADINKMEM is not set\n"
-"# CONFIG_FEATURE_INSMOD_LOAD_MAP is not set\n"
-"# CONFIG_FEATURE_INSMOD_LOAD_MAP_FULL is not set\n"
-"# CONFIG_FEATURE_CHECK_TAINTED_MODULE is not set\n"
-"# CONFIG_FEATURE_MODUTILS_ALIAS is not set\n"
-"# CONFIG_FEATURE_MODUTILS_SYMBOLS is not set\n"
-"CONFIG_DEFAULT_DEPMOD_FILE=\"modules.dep\"\n"
-"CONFIG_BLOCKDEV=y\n"
-"# CONFIG_MDEV is not set\n"
-"# CONFIG_FEATURE_MDEV_CONF is not set\n"
-"# CONFIG_FEATURE_MDEV_RENAME is not set\n"
-"# CONFIG_FEATURE_MDEV_RENAME_REGEXP is not set\n"
-"# CONFIG_FEATURE_MDEV_EXEC is not set\n"
-"# CONFIG_FEATURE_MDEV_LOAD_FIRMWARE is not set\n"
-"CONFIG_REV=y\n"
-"# CONFIG_ACPID is not set\n"
-"# CONFIG_FEATURE_ACPID_COMPAT is not set\n"
-"CONFIG_BLKID=y\n"
-"CONFIG_FEATURE_BLKID_TYPE=y\n"
-"CONFIG_DMESG=y\n"
-"# CONFIG_FEATURE_DMESG_PRETTY is not set\n"
-"CONFIG_FBSET=y\n"
-"CONFIG_FEATURE_FBSET_FANCY=y\n"
-"# CONFIG_FEATURE_FBSET_READMODE is not set\n"
-"# CONFIG_FDFLUSH is not set\n"
-"# CONFIG_FDFORMAT is not set\n"
-"CONFIG_FDISK=y\n"
-"# CONFIG_FDISK_SUPPORT_LARGE_DISKS is not set\n"
-"CONFIG_FEATURE_FDISK_WRITABLE=y\n"
-"# CONFIG_FEATURE_AIX_LABEL is not set\n"
-"# CONFIG_FEATURE_SGI_LABEL is not set\n"
-"# CONFIG_FEATURE_SUN_LABEL is not set\n"
-"# CONFIG_FEATURE_OSF_LABEL is not set\n"
-"# CONFIG_FEATURE_GPT_LABEL is not set\n"
-"# CONFIG_FEATURE_FDISK_ADVANCED is not set\n"
-"# CONFIG_FINDFS is not set\n"
-"# CONFIG_FLOCK is not set\n"
-"CONFIG_FREERAMDISK=y\n"
-"# CONFIG_FSCK_MINIX is not set\n"
-"CONFIG_FSTRIM=y\n"
-"CONFIG_MKFS_EXT2=y\n"
-"# CONFIG_MKFS_MINIX is not set\n"
-"# CONFIG_FEATURE_MINIX2 is not set\n"
-"# CONFIG_MKFS_REISER is not set\n"
-"CONFIG_MKFS_VFAT=y\n"
-"CONFIG_GETOPT=y\n"
-"# CONFIG_FEATURE_GETOPT_LONG is not set\n"
-"CONFIG_HEXDUMP=y\n"
-"# CONFIG_FEATURE_HEXDUMP_REVERSE is not set\n"
-"# CONFIG_HD is not set\n"
-"# CONFIG_HWCLOCK is not set\n"
-"# CONFIG_FEATURE_HWCLOCK_LONG_OPTIONS is not set\n"
-"# CONFIG_FEATURE_HWCLOCK_ADJTIME_FHS is not set\n"
-"# CONFIG_IPCRM is not set\n"
-"# CONFIG_IPCS is not set\n"
-"CONFIG_LOSETUP=y\n"
-"CONFIG_LSPCI=y\n"
-"CONFIG_LSUSB=y\n"
-"CONFIG_MKSWAP=y\n"
-"# CONFIG_FEATURE_MKSWAP_UUID is not set\n"
-"CONFIG_MORE=y\n"
-"CONFIG_MOUNT=y\n"
-"# CONFIG_FEATURE_MOUNT_FAKE is not set\n"
-"# CONFIG_FEATURE_MOUNT_VERBOSE is not set\n"
-"# CONFIG_FEATURE_MOUNT_HELPERS is not set\n"
-"CONFIG_FEATURE_MOUNT_LABEL=y\n"
-"# CONFIG_FEATURE_MOUNT_NFS is not set\n"
-"CONFIG_FEATURE_MOUNT_CIFS=y\n"
-"CONFIG_FEATURE_MOUNT_FLAGS=y\n"
-"CONFIG_FEATURE_MOUNT_FSTAB=y\n"
-"# CONFIG_PIVOT_ROOT is not set\n"
-"# CONFIG_RDATE is not set\n"
-"CONFIG_RDEV=y\n"
-"# CONFIG_READPROFILE is not set\n"
-"# CONFIG_RTCWAKE is not set\n"
-"# CONFIG_SCRIPT is not set\n"
-"# CONFIG_SCRIPTREPLAY is not set\n"
-"# CONFIG_SETARCH is not set\n"
-"CONFIG_SWAPONOFF=y\n"
-"# CONFIG_FEATURE_SWAPON_PRI is not set\n"
-"# CONFIG_SWITCH_ROOT is not set\n"
-"CONFIG_UMOUNT=y\n"
-"# CONFIG_FEATURE_UMOUNT_ALL is not set\n"
-"CONFIG_FEATURE_MOUNT_LOOP=y\n"
-"# CONFIG_FEATURE_MOUNT_LOOP_CREATE is not set\n"
-"# CONFIG_FEATURE_MTAB_SUPPORT is not set\n"
-"CONFIG_VOLUMEID=y\n"
-"CONFIG_FEATURE_VOLUMEID_EXT=y\n"
-"# CONFIG_FEATURE_VOLUMEID_BTRFS is not set\n"
-"# CONFIG_FEATURE_VOLUMEID_REISERFS is not set\n"
-"CONFIG_FEATURE_VOLUMEID_FAT=y\n"
-"CONFIG_FEATURE_VOLUMEID_EXFAT=y\n"
-"# CONFIG_FEATURE_VOLUMEID_HFS is not set\n"
-"# CONFIG_FEATURE_VOLUMEID_JFS is not set\n"
-"# CONFIG_FEATURE_VOLUMEID_XFS is not set\n"
-"# CONFIG_FEATURE_VOLUMEID_NILFS is not set\n"
-"CONFIG_FEATURE_VOLUMEID_NTFS=y\n"
-"CONFIG_FEATURE_VOLUMEID_ISO9660=y\n"
-"# CONFIG_FEATURE_VOLUMEID_UDF is not set\n"
-"# CONFIG_FEATURE_VOLUMEID_LUKS is not set\n"
-"CONFIG_FEATURE_VOLUMEID_LINUXSWAP=y\n"
-"# CONFIG_FEATURE_VOLUMEID_CRAMFS is not set\n"
-"# CONFIG_FEATURE_VOLUMEID_ROMFS is not set\n"
-"CONFIG_FEATURE_VOLUMEID_SQUASHFS=y\n"
-"# CONFIG_FEATURE_VOLUMEID_SYSV is not set\n"
-"# CONFIG_FEATURE_VOLUMEID_OCFS2 is not set\n"
-"# CONFIG_FEATURE_VOLUMEID_LINUXRAID is not set\n"
-"# CONFIG_CONSPY is not set\n"
-"CONFIG_LESS=y\n"
-"CONFIG_FEATURE_LESS_MAXLINES=65536\n"
-"# CONFIG_FEATURE_LESS_BRACKETS is not set\n"
-"# CONFIG_FEATURE_LESS_FLAGS is not set\n"
-"CONFIG_FEATURE_LESS_MARKS=y\n"
-"CONFIG_FEATURE_LESS_REGEXP=y\n"
-"CONFIG_FEATURE_LESS_WINCH=y\n"
-"# CONFIG_FEATURE_LESS_ASK_TERMINAL is not set\n"
-"# CONFIG_FEATURE_LESS_DASHCMD is not set\n"
-"# CONFIG_FEATURE_LESS_LINENUMS is not set\n"
-"CONFIG_NANDWRITE=y\n"
-"CONFIG_NANDDUMP=y\n"
-"CONFIG_SETSERIAL=y\n"
-"# CONFIG_UBIATTACH is not set\n"
-"# CONFIG_UBIDETACH is not set\n"
-"# CONFIG_UBIMKVOL is not set\n"
-"# CONFIG_UBIRMVOL is not set\n"
-"# CONFIG_UBIRSVOL is not set\n"
-"# CONFIG_UBIUPDATEVOL is not set\n"
-"# CONFIG_ADJTIMEX is not set\n"
-"CONFIG_BBCONFIG=y\n"
-"CONFIG_FEATURE_COMPRESS_BBCONFIG=y\n"
-"# CONFIG_BEEP is not set\n"
-"CONFIG_FEATURE_BEEP_FREQ=0\n"
-"CONFIG_FEATURE_BEEP_LENGTH_MS=0\n"
-"# CONFIG_CHAT is not set\n"
-"# CONFIG_FEATURE_CHAT_NOFAIL is not set\n"
-"# CONFIG_FEATURE_CHAT_TTY_HIFI is not set\n"
-"# CONFIG_FEATURE_CHAT_IMPLICIT_CR is not set\n"
-"# CONFIG_FEATURE_CHAT_SWALLOW_OPTS is not set\n"
-"# CONFIG_FEATURE_CHAT_SEND_ESCAPES is not set\n"
-"# CONFIG_FEATURE_CHAT_VAR_ABORT_LEN is not set\n"
-"# CONFIG_FEATURE_CHAT_CLR_ABORT is not set\n"
-"# CONFIG_CHRT is not set\n"
-"# CONFIG_CROND is not set\n"
-"# CONFIG_FEATURE_CROND_D is not set\n"
-"# CONFIG_FEATURE_CROND_CALL_SENDMAIL is not set\n"
-"CONFIG_FEATURE_CROND_DIR=\"\"\n"
-"# CONFIG_CRONTAB is not set\n"
-"CONFIG_DC=y\n"
-"# CONFIG_FEATURE_DC_LIBM is not set\n"
-"# CONFIG_DEVFSD is not set\n"
-"# CONFIG_DEVFSD_MODLOAD is not set\n"
-"# CONFIG_DEVFSD_FG_NP is not set\n"
-"# CONFIG_DEVFSD_VERBOSE is not set\n"
-"# CONFIG_FEATURE_DEVFS is not set\n"
-"CONFIG_DEVMEM=y\n"
-"# CONFIG_EJECT is not set\n"
-"# CONFIG_FEATURE_EJECT_SCSI is not set\n"
-"# CONFIG_FBSPLASH is not set\n"
-"# CONFIG_FLASHCP is not set\n"
-"# CONFIG_FLASH_LOCK is not set\n"
-"# CONFIG_FLASH_UNLOCK is not set\n"
-"# CONFIG_FLASH_ERASEALL is not set\n"
-"# CONFIG_IONICE is not set\n"
-"# CONFIG_INOTIFYD is not set\n"
-"# CONFIG_LAST is not set\n"
-"# CONFIG_FEATURE_LAST_SMALL is not set\n"
-"# CONFIG_FEATURE_LAST_FANCY is not set\n"
-"# CONFIG_HDPARM is not set\n"
-"# CONFIG_FEATURE_HDPARM_GET_IDENTITY is not set\n"
-"# CONFIG_FEATURE_HDPARM_HDIO_SCAN_HWIF is not set\n"
-"# CONFIG_FEATURE_HDPARM_HDIO_UNREGISTER_HWIF is not set\n"
-"# CONFIG_FEATURE_HDPARM_HDIO_DRIVE_RESET is not set\n"
-"# CONFIG_FEATURE_HDPARM_HDIO_TRISTATE_HWIF is not set\n"
-"# CONFIG_FEATURE_HDPARM_HDIO_GETSET_DMA is not set\n"
-"CONFIG_MAKEDEVS=y\n"
-"# CONFIG_FEATURE_MAKEDEVS_LEAF is not set\n"
-"CONFIG_FEATURE_MAKEDEVS_TABLE=y\n"
-"# CONFIG_MAN is not set\n"
-"# CONFIG_MICROCOM is not set\n"
-"CONFIG_MOUNTPOINT=y\n"
-"# CONFIG_MT is not set\n"
-"# CONFIG_RAIDAUTORUN is not set\n"
-"# CONFIG_READAHEAD is not set\n"
-"# CONFIG_RFKILL is not set\n"
-"# CONFIG_RUNLEVEL is not set\n"
-"# CONFIG_RX is not set\n"
-"CONFIG_SETSID=y\n"
-"CONFIG_STRINGS=y\n"
-"# CONFIG_TASKSET is not set\n"
-"# CONFIG_FEATURE_TASKSET_FANCY is not set\n"
-"CONFIG_TIME=y\n"
-"# CONFIG_TIMEOUT is not set\n"
-"CONFIG_TTYSIZE=y\n"
-"# CONFIG_VOLNAME is not set\n"
-"# CONFIG_WALL is not set\n"
-"# CONFIG_WATCHDOG is not set\n"
-"# CONFIG_NAMEIF is not set\n"
-"# CONFIG_FEATURE_NAMEIF_EXTENDED is not set\n"
-"# CONFIG_NBDCLIENT is not set\n"
-"# CONFIG_NC is not set\n"
-"# CONFIG_NC_SERVER is not set\n"
-"# CONFIG_NC_EXTRA is not set\n"
-"# CONFIG_NC_110_COMPAT is not set\n"
-"# CONFIG_PING is not set\n"
-"# CONFIG_PING6 is not set\n"
-"# CONFIG_FEATURE_FANCY_PING is not set\n"
-"# CONFIG_WHOIS is not set\n"
-"# CONFIG_FEATURE_IPV6 is not set\n"
-"# CONFIG_FEATURE_UNIX_LOCAL is not set\n"
-"# CONFIG_FEATURE_PREFER_IPV4_ADDRESS is not set\n"
-"# CONFIG_VERBOSE_RESOLUTION_ERRORS is not set\n"
-"# CONFIG_ARP is not set\n"
-"# CONFIG_ARPING is not set\n"
-"# CONFIG_BRCTL is not set\n"
-"# CONFIG_FEATURE_BRCTL_FANCY is not set\n"
-"# CONFIG_FEATURE_BRCTL_SHOW is not set\n"
-"# CONFIG_DNSD is not set\n"
-"# CONFIG_ETHER_WAKE is not set\n"
-"# CONFIG_FAKEIDENTD is not set\n"
-"# CONFIG_FTPD is not set\n"
-"# CONFIG_FEATURE_FTP_WRITE is not set\n"
-"# CONFIG_FEATURE_FTPD_ACCEPT_BROKEN_LIST is not set\n"
-"# CONFIG_FTPGET is not set\n"
-"# CONFIG_FTPPUT is not set\n"
-"# CONFIG_FEATURE_FTPGETPUT_LONG_OPTIONS is not set\n"
-"# CONFIG_HOSTNAME is not set\n"
-"# CONFIG_HTTPD is not set\n"
-"# CONFIG_FEATURE_HTTPD_RANGES is not set\n"
-"# CONFIG_FEATURE_HTTPD_USE_SENDFILE is not set\n"
-"# CONFIG_FEATURE_HTTPD_SETUID is not set\n"
-"# CONFIG_FEATURE_HTTPD_BASIC_AUTH is not set\n"
-"# CONFIG_FEATURE_HTTPD_AUTH_MD5 is not set\n"
-"# CONFIG_FEATURE_HTTPD_CGI is not set\n"
-"# CONFIG_FEATURE_HTTPD_CONFIG_WITH_SCRIPT_INTERPR is not set\n"
-"# CONFIG_FEATURE_HTTPD_SET_REMOTE_PORT_TO_ENV is not set\n"
-"# CONFIG_FEATURE_HTTPD_ENCODE_URL_STR is not set\n"
-"# CONFIG_FEATURE_HTTPD_ERROR_PAGES is not set\n"
-"# CONFIG_FEATURE_HTTPD_PROXY is not set\n"
-"# CONFIG_FEATURE_HTTPD_GZIP is not set\n"
-"# CONFIG_IFCONFIG is not set\n"
-"# CONFIG_FEATURE_IFCONFIG_STATUS is not set\n"
-"# CONFIG_FEATURE_IFCONFIG_SLIP is not set\n"
-"# CONFIG_FEATURE_IFCONFIG_MEMSTART_IOADDR_IRQ is not set\n"
-"# CONFIG_FEATURE_IFCONFIG_HW is not set\n"
-"# CONFIG_FEATURE_IFCONFIG_BROADCAST_PLUS is not set\n"
-"# CONFIG_IFENSLAVE is not set\n"
-"# CONFIG_IFPLUGD is not set\n"
-"# CONFIG_IFUPDOWN is not set\n"
-"CONFIG_IFUPDOWN_IFSTATE_PATH=\"\"\n"
-"# CONFIG_FEATURE_IFUPDOWN_IP is not set\n"
-"# CONFIG_FEATURE_IFUPDOWN_IP_BUILTIN is not set\n"
-"# CONFIG_FEATURE_IFUPDOWN_IFCONFIG_BUILTIN is not set\n"
-"# CONFIG_FEATURE_IFUPDOWN_IPV4 is not set\n"
-"# CONFIG_FEATURE_IFUPDOWN_IPV6 is not set\n"
-"# CONFIG_FEATURE_IFUPDOWN_MAPPING is not set\n"
-"# CONFIG_FEATURE_IFUPDOWN_EXTERNAL_DHCP is not set\n"
-"# CONFIG_INETD is not set\n"
-"# CONFIG_FEATURE_INETD_SUPPORT_BUILTIN_ECHO is not set\n"
-"# CONFIG_FEATURE_INETD_SUPPORT_BUILTIN_DISCARD is not set\n"
-"# CONFIG_FEATURE_INETD_SUPPORT_BUILTIN_TIME is not set\n"
-"# CONFIG_FEATURE_INETD_SUPPORT_BUILTIN_DAYTIME is not set\n"
-"# CONFIG_FEATURE_INETD_SUPPORT_BUILTIN_CHARGEN is not set\n"
-"# CONFIG_FEATURE_INETD_RPC is not set\n"
-"# CONFIG_IP is not set\n"
-"# CONFIG_FEATURE_IP_ADDRESS is not set\n"
-"# CONFIG_FEATURE_IP_LINK is not set\n"
-"# CONFIG_FEATURE_IP_ROUTE is not set\n"
-"# CONFIG_FEATURE_IP_TUNNEL is not set\n"
-"# CONFIG_FEATURE_IP_RULE is not set\n"
-"# CONFIG_FEATURE_IP_SHORT_FORMS is not set\n"
-"# CONFIG_FEATURE_IP_RARE_PROTOCOLS is not set\n"
-"# CONFIG_IPADDR is not set\n"
-"# CONFIG_IPLINK is not set\n"
-"# CONFIG_IPROUTE is not set\n"
-"# CONFIG_IPTUNNEL is not set\n"
-"# CONFIG_IPRULE is not set\n"
-"# CONFIG_IPCALC is not set\n"
-"# CONFIG_FEATURE_IPCALC_FANCY is not set\n"
-"# CONFIG_FEATURE_IPCALC_LONG_OPTIONS is not set\n"
-"# CONFIG_NETSTAT is not set\n"
-"# CONFIG_FEATURE_NETSTAT_WIDE is not set\n"
-"# CONFIG_FEATURE_NETSTAT_PRG is not set\n"
-"# CONFIG_NSLOOKUP is not set\n"
-"# CONFIG_NTPD is not set\n"
-"# CONFIG_FEATURE_NTPD_SERVER is not set\n"
-"# CONFIG_PSCAN is not set\n"
-"# CONFIG_ROUTE is not set\n"
-"# CONFIG_SLATTACH is not set\n"
-"# CONFIG_TCPSVD is not set\n"
-"# CONFIG_TELNET is not set\n"
-"# CONFIG_FEATURE_TELNET_TTYPE is not set\n"
-"# CONFIG_FEATURE_TELNET_AUTOLOGIN is not set\n"
-"# CONFIG_TELNETD is not set\n"
-"# CONFIG_FEATURE_TELNETD_STANDALONE is not set\n"
-"# CONFIG_FEATURE_TELNETD_INETD_WAIT is not set\n"
-"# CONFIG_TFTP is not set\n"
-"# CONFIG_TFTPD is not set\n"
-"# CONFIG_FEATURE_TFTP_GET is not set\n"
-"# CONFIG_FEATURE_TFTP_PUT is not set\n"
-"# CONFIG_FEATURE_TFTP_BLOCKSIZE is not set\n"
-"# CONFIG_FEATURE_TFTP_PROGRESS_BAR is not set\n"
-"# CONFIG_TFTP_DEBUG is not set\n"
-"# CONFIG_TRACEROUTE is not set\n"
-"# CONFIG_TRACEROUTE6 is not set\n"
-"# CONFIG_FEATURE_TRACEROUTE_VERBOSE is not set\n"
-"# CONFIG_FEATURE_TRACEROUTE_SOURCE_ROUTE is not set\n"
-"# CONFIG_FEATURE_TRACEROUTE_USE_ICMP is not set\n"
-"# CONFIG_TUNCTL is not set\n"
-"# CONFIG_FEATURE_TUNCTL_UG is not set\n"
-"# CONFIG_UDHCPC6 is not set\n"
-"# CONFIG_UDHCPD is not set\n"
-"# CONFIG_DHCPRELAY is not set\n"
-"# CONFIG_DUMPLEASES is not set\n"
-"# CONFIG_FEATURE_UDHCPD_WRITE_LEASES_EARLY is not set\n"
-"# CONFIG_FEATURE_UDHCPD_BASE_IP_ON_MAC is not set\n"
-"CONFIG_DHCPD_LEASES_FILE=\"\"\n"
-"# CONFIG_UDHCPC is not set\n"
-"# CONFIG_FEATURE_UDHCPC_ARPING is not set\n"
-"# CONFIG_FEATURE_UDHCP_PORT is not set\n"
-"CONFIG_UDHCP_DEBUG=0\n"
-"# CONFIG_FEATURE_UDHCP_RFC3397 is not set\n"
-"# CONFIG_FEATURE_UDHCP_8021Q is not set\n"
-"CONFIG_UDHCPC_DEFAULT_SCRIPT=\"\"\n"
-"CONFIG_UDHCPC_SLACK_FOR_BUGGY_SERVERS=0\n"
-"CONFIG_IFUPDOWN_UDHCPC_CMD_OPTIONS=\"\"\n"
-"# CONFIG_UDPSVD is not set\n"
-"# CONFIG_VCONFIG is not set\n"
-"# CONFIG_WGET is not set\n"
-"# CONFIG_FEATURE_WGET_STATUSBAR is not set\n"
-"# CONFIG_FEATURE_WGET_AUTHENTICATION is not set\n"
-"# CONFIG_FEATURE_WGET_LONG_OPTIONS is not set\n"
-"# CONFIG_FEATURE_WGET_TIMEOUT is not set\n"
-"# CONFIG_ZCIP is not set\n"
-"# CONFIG_LPD is not set\n"
-"# CONFIG_LPR is not set\n"
-"# CONFIG_LPQ is not set\n"
-"# CONFIG_MAKEMIME is not set\n"
-"CONFIG_FEATURE_MIME_CHARSET=\"\"\n"
-"# CONFIG_POPMAILDIR is not set\n"
-"# CONFIG_FEATURE_POPMAILDIR_DELIVERY is not set\n"
-"# CONFIG_REFORMIME is not set\n"
-"# CONFIG_FEATURE_REFORMIME_COMPAT is not set\n"
-"# CONFIG_SENDMAIL is not set\n"
-"# CONFIG_IOSTAT is not set\n"
-"CONFIG_LSOF=y\n"
-"# CONFIG_MPSTAT is not set\n"
-"# CONFIG_NMETER is not set\n"
-"# CONFIG_PMAP is not set\n"
-"# CONFIG_POWERTOP is not set\n"
-"CONFIG_PSTREE=y\n"
-"# CONFIG_PWDX is not set\n"
-"# CONFIG_SMEMCAP is not set\n"
-"CONFIG_TOP=y\n"
-"CONFIG_FEATURE_TOP_CPU_USAGE_PERCENTAGE=y\n"
-"CONFIG_FEATURE_TOP_CPU_GLOBAL_PERCENTS=y\n"
-"# CONFIG_FEATURE_TOP_SMP_CPU is not set\n"
-"CONFIG_FEATURE_TOP_DECIMALS=y\n"
-"# CONFIG_FEATURE_TOP_SMP_PROCESS is not set\n"
-"CONFIG_FEATURE_TOPMEM=y\n"
-"CONFIG_UPTIME=y\n"
-"# CONFIG_FEATURE_UPTIME_UTMP_SUPPORT is not set\n"
-"CONFIG_FREE=y\n"
-"CONFIG_FUSER=y\n"
-"CONFIG_KILL=y\n"
-"CONFIG_KILLALL=y\n"
-"CONFIG_KILLALL5=y\n"
-"CONFIG_PGREP=y\n"
-"CONFIG_PIDOF=y\n"
-"CONFIG_FEATURE_PIDOF_SINGLE=y\n"
-"CONFIG_FEATURE_PIDOF_OMIT=y\n"
-"CONFIG_PKILL=y\n"
-"CONFIG_PS=y\n"
-"CONFIG_FEATURE_PS_WIDE=y\n"
-"CONFIG_FEATURE_PS_LONG=y\n"
-"# CONFIG_FEATURE_PS_TIME is not set\n"
-"# CONFIG_FEATURE_PS_ADDITIONAL_COLUMNS is not set\n"
-"# CONFIG_FEATURE_PS_UNUSUAL_SYSTEMS is not set\n"
-"CONFIG_RENICE=y\n"
-"CONFIG_BB_SYSCTL=y\n"
-"CONFIG_FEATURE_SHOW_THREADS=y\n"
-"CONFIG_WATCH=y\n"
-"# CONFIG_RUNSV is not set\n"
-"# CONFIG_RUNSVDIR is not set\n"
-"# CONFIG_FEATURE_RUNSVDIR_LOG is not set\n"
-"# CONFIG_SV is not set\n"
-"CONFIG_SV_DEFAULT_SERVICE_DIR=\"\"\n"
-"# CONFIG_SVLOGD is not set\n"
-"# CONFIG_CHPST is not set\n"
-"# CONFIG_SETUIDGID is not set\n"
-"# CONFIG_ENVUIDGID is not set\n"
-"# CONFIG_ENVDIR is not set\n"
-"# CONFIG_SOFTLIMIT is not set\n"
-"# CONFIG_CHCON is not set\n"
-"# CONFIG_FEATURE_CHCON_LONG_OPTIONS is not set\n"
-"# CONFIG_GETENFORCE is not set\n"
-"# CONFIG_GETSEBOOL is not set\n"
-"# CONFIG_LOAD_POLICY is not set\n"
-"# CONFIG_MATCHPATHCON is not set\n"
-"# CONFIG_RESTORECON is not set\n"
-"# CONFIG_RUNCON is not set\n"
-"# CONFIG_FEATURE_RUNCON_LONG_OPTIONS is not set\n"
-"# CONFIG_SELINUXENABLED is not set\n"
-"# CONFIG_SETENFORCE is not set\n"
-"# CONFIG_SETFILES is not set\n"
-"# CONFIG_FEATURE_SETFILES_CHECK_OPTION is not set\n"
-"# CONFIG_SETSEBOOL is not set\n"
-"# CONFIG_SESTATUS is not set\n"
-"CONFIG_ASH=y\n"
-"CONFIG_ASH_BASH_COMPAT=y\n"
-"# CONFIG_ASH_IDLE_TIMEOUT is not set\n"
-"CONFIG_ASH_JOB_CONTROL=y\n"
-"CONFIG_ASH_ALIAS=y\n"
-"CONFIG_ASH_GETOPTS=y\n"
-"CONFIG_ASH_BUILTIN_ECHO=y\n"
-"CONFIG_ASH_BUILTIN_PRINTF=y\n"
-"CONFIG_ASH_BUILTIN_TEST=y\n"
-"CONFIG_ASH_CMDCMD=y\n"
-"# CONFIG_ASH_MAIL is not set\n"
-"CONFIG_ASH_OPTIMIZE_FOR_SIZE=y\n"
-"# CONFIG_ASH_RANDOM_SUPPORT is not set\n"
-"CONFIG_ASH_EXPAND_PRMT=y\n"
-"# CONFIG_CTTYHACK is not set\n"
-"# CONFIG_HUSH is not set\n"
-"# CONFIG_HUSH_BASH_COMPAT is not set\n"
-"# CONFIG_HUSH_BRACE_EXPANSION is not set\n"
-"# CONFIG_HUSH_HELP is not set\n"
-"# CONFIG_HUSH_INTERACTIVE is not set\n"
-"# CONFIG_HUSH_SAVEHISTORY is not set\n"
-"# CONFIG_HUSH_JOB is not set\n"
-"# CONFIG_HUSH_TICK is not set\n"
-"# CONFIG_HUSH_IF is not set\n"
-"# CONFIG_HUSH_LOOPS is not set\n"
-"# CONFIG_HUSH_CASE is not set\n"
-"# CONFIG_HUSH_FUNCTIONS is not set\n"
-"# CONFIG_HUSH_LOCAL is not set\n"
-"# CONFIG_HUSH_RANDOM_SUPPORT is not set\n"
-"# CONFIG_HUSH_EXPORT_N is not set\n"
-"# CONFIG_HUSH_MODE_X is not set\n"
-"# CONFIG_MSH is not set\n"
-"CONFIG_FEATURE_SH_IS_ASH=y\n"
-"# CONFIG_FEATURE_SH_IS_HUSH is not set\n"
-"# CONFIG_FEATURE_SH_IS_NONE is not set\n"
-"# CONFIG_FEATURE_BASH_IS_ASH is not set\n"
-"# CONFIG_FEATURE_BASH_IS_HUSH is not set\n"
-"CONFIG_FEATURE_BASH_IS_NONE=y\n"
-"CONFIG_SH_MATH_SUPPORT=y\n"
-"CONFIG_SH_MATH_SUPPORT_64=y\n"
-"CONFIG_FEATURE_SH_EXTRA_QUIET=y\n"
-"# CONFIG_FEATURE_SH_STANDALONE is not set\n"
-"# CONFIG_FEATURE_SH_NOFORK is not set\n"
-"# CONFIG_FEATURE_SH_HISTFILESIZE is not set\n"
-"# CONFIG_SYSLOGD is not set\n"
-"# CONFIG_FEATURE_ROTATE_LOGFILE is not set\n"
-"# CONFIG_FEATURE_REMOTE_LOG is not set\n"
-"# CONFIG_FEATURE_SYSLOGD_DUP is not set\n"
-"# CONFIG_FEATURE_SYSLOGD_CFG is not set\n"
-"CONFIG_FEATURE_SYSLOGD_READ_BUFFER_SIZE=0\n"
-"# CONFIG_FEATURE_IPC_SYSLOG is not set\n"
-"CONFIG_FEATURE_IPC_SYSLOG_BUFFER_SIZE=0\n"
-"# CONFIG_LOGREAD is not set\n"
-"# CONFIG_FEATURE_LOGREAD_REDUCED_LOCKING is not set\n"
-"# CONFIG_FEATURE_KMSG_SYSLOG is not set\n"
-"# CONFIG_KLOGD is not set\n"
-"# CONFIG_FEATURE_KLOGD_KLOGCTL is not set\n"
-"# CONFIG_LOGGER is not set\n"
-;
-#endif
diff --git a/include-minimal/bbconfigopts_bz2.h b/include-minimal/bbconfigopts_bz2.h
deleted file mode 100644
index 59c6237..0000000
--- a/include-minimal/bbconfigopts_bz2.h
+++ b/dev/null
@@ -1,338 +0,0 @@
-#ifndef _BBCONFIGOPTS_BZ2_H
-#define _BBCONFIGOPTS_BZ2_H
-/*
- * busybox configuration settings.
- *
- * Licensed under GPLv2 or later, see file LICENSE in this source tree.
- *
- * This file is generated automatically by scripts/mkconfigs.
- * Do not edit.
- */
-static const char bbconfig_config_bz2[] ALIGN1 = {
-0x68,0x31,0x31,0x41,0x59,0x26,0x53,0x59,0x6c,0xb8,0x9c,0xaf,0x00,0x0b,0xb3,0xdf,
-0x80,0x00,0x10,0x58,0x03,0xff,0xe2,0x3f,0xff,0xff,0xf0,0xbf,0x27,0xdf,0x60,0x60,
-0x1a,0xdc,0x00,0x3d,0x8e,0x41,0x90,0x35,0xf3,0x45,0x07,0xcf,0x80,0x06,0x7b,0xde,
-0xee,0xe0,0x65,0xb0,0x07,0xd6,0x8f,0x90,0xdd,0x80,0xfb,0xec,0xf4,0x68,0x3a,0x0d,
-0x50,0x76,0xd5,0x57,0x60,0x67,0x67,0xd1,0xae,0xcd,0x90,0x88,0xbd,0xad,0xbb,0x28,
-0x6a,0x36,0x6d,0x83,0xaa,0x9f,0x03,0x54,0xf0,0x08,0x11,0xa2,0x19,0x42,0xa7,0xe8,
-0xa0,0xde,0xa4,0xf5,0x3d,0x27,0xe9,0x34,0xd1,0x00,0x68,0x06,0x99,0x04,0x13,0x42,
-0x9e,0x49,0x94,0xd4,0xda,0xa0,0x00,0x00,0x00,0x0d,0x00,0xc1,0x21,0x4d,0x34,0x9f,
-0xaa,0x1a,0x87,0xa0,0x9a,0x00,0x00,0x06,0x81,0xa0,0x01,0x27,0xaa,0x52,0x51,0x4c,
-0x8d,0x3f,0x54,0x01,0xa1,0x90,0x00,0x03,0x40,0x00,0x00,0x8a,0x40,0xa6,0x90,0xc4,
-0xc2,0x19,0x43,0x08,0xf5,0x1a,0x3d,0x4f,0x53,0x08,0xc4,0xf4,0xc4,0x4f,0x50,0x48,
-0x48,0x26,0x89,0xa3,0x41,0x26,0xa3,0x54,0x69,0xa0,0x00,0x00,0x00,0x07,0xfe,0xf8,
-0x3f,0xdd,0xbb,0x4b,0x95,0xd3,0x7b,0x9d,0x77,0x57,0x34,0x68,0x2a,0x34,0x46,0xc6,
-0xb1,0x24,0x83,0x01,0x94,0x54,0x5b,0x1b,0x73,0x5b,0xc6,0xbc,0xcb,0x9a,0xdd,0xf4,
-0xbb,0x6e,0xcd,0x90,0x84,0x8a,0xc6,0x28,0x82,0xc4,0xc9,0x29,0xeb,0xa7,0x5c,0x91,
-0x45,0x33,0x16,0xf5,0xdc,0x93,0xbb,0x6b,0xb3,0x64,0x34,0x6c,0xcd,0x46,0xad,0xe3,
-0x73,0x5a,0x29,0xe7,0x6b,0x83,0xce,0xe4,0x1a,0xa4,0xe5,0xcc,0x6d,0x15,0xb9,0xb9,
-0x47,0x39,0xcb,0x96,0x20,0xd7,0x23,0xbc,0xee,0x1a,0x0a,0x09,0x61,0x41,0xe2,0xe2,
-0x29,0x94,0x30,0xd9,0x3b,0x3a,0x4b,0xce,0xd7,0x24,0xa3,0x45,0xe9,0xec,0xdf,0x13,
-0xd0,0xd8,0xb6,0x52,0xd0,0x13,0x2a,0x4c,0xf3,0xdf,0xde,0x48,0x91,0x04,0x32,0x06,
-0x41,0x35,0xef,0x57,0x57,0xb7,0x9e,0x6f,0x14,0xbd,0xba,0xf8,0x3c,0xe1,0x18,0x24,
-0x0c,0x26,0x09,0x09,0x02,0xf4,0xe4,0x23,0x5e,0xfe,0xb8,0x2c,0x73,0x73,0x28,0x62,
-0x21,0x88,0x20,0x83,0x8d,0x50,0x40,0xcd,0xa7,0xb3,0xbb,0xef,0x3e,0xad,0x5a,0xb5,
-0xf5,0xcb,0xb6,0x52,0xed,0xb7,0xe6,0xea,0x5a,0xc4,0xe2,0xf4,0x9d,0xbe,0x9f,0x73,
-0xe8,0xde,0xdf,0x22,0xf9,0x28,0x5b,0x6a,0x09,0x99,0x93,0x34,0xd6,0xdf,0x3b,0x1d,
-0x62,0x0d,0x88,0xea,0x74,0x16,0x4f,0x94,0xeb,0xe7,0x28,0xc5,0x08,0xdb,0xff,0x21,
-0xb3,0x9e,0x63,0xdb,0x3e,0xfb,0xce,0x5f,0x0a,0x83,0x8e,0xfe,0xfd,0x97,0x23,0xb8,
-0xfd,0xcb,0xdf,0xe8,0xb6,0x1f,0x4c,0x0a,0x77,0xda,0xc9,0xe2,0xde,0x4c,0xa8,0x43,
-0x3d,0x58,0x79,0x5a,0xab,0x62,0x85,0xa7,0xef,0x31,0xe2,0xd7,0xf3,0xbd,0xb7,0x31,
-0x52,0xd1,0x4a,0xe9,0x4b,0x95,0x39,0x95,0x87,0x20,0xe3,0x8a,0xf9,0xf6,0x7a,0xcd,
-0xdb,0xaf,0xae,0x6b,0xbe,0x68,0xfc,0xf2,0xa3,0x8c,0xdd,0x14,0x12,0x44,0x7a,0xbf,
-0x75,0xbf,0xe9,0xc5,0x5f,0x38,0x55,0x9d,0xf8,0x7c,0xbc,0xf1,0x1e,0x7d,0xd7,0x92,
-0xde,0xf3,0x4f,0xa5,0xb6,0x36,0x83,0x31,0x21,0x6a,0x48,0xd3,0xaa,0xb5,0x41,0x8b,
-0xcd,0xad,0x5b,0x4f,0x56,0xf1,0xb4,0xc2,0xa5,0x55,0x11,0x45,0x43,0x40,0xe1,0x5c,
-0xb9,0xd6,0x1d,0xa9,0xc5,0x52,0xac,0x35,0xa6,0x26,0xb2,0x23,0xce,0x1f,0x85,0xea,
-0xf0,0x9f,0x0a,0x67,0x2b,0xb4,0x60,0x4d,0xe1,0xda,0x5c,0x90,0x5d,0xf6,0x39,0x05,
-0xe7,0xde,0xc8,0xde,0x09,0x24,0x60,0x92,0x94,0x66,0x10,0xe6,0x9b,0x5b,0x55,0xd7,
-0xd5,0xf1,0x5a,0xd7,0x6a,0xcc,0x24,0x0c,0x68,0xbd,0x62,0x73,0x89,0xe3,0x09,0x8b,
-0xd8,0xac,0x28,0xc4,0x14,0x6f,0x64,0x76,0x1e,0x0f,0xc0,0xe5,0x70,0x5d,0x88,0x77,
-0x9e,0x1a,0x6f,0xbe,0x73,0x4b,0xb9,0xe5,0x8f,0xa5,0x31,0x20,0xb9,0xb4,0x5f,0x10,
-0xfe,0x65,0xd1,0x00,0xc4,0x5c,0x76,0x48,0xeb,0xb5,0x76,0xdc,0x85,0xd9,0xe6,0x42,
-0xd2,0xba,0x92,0xc7,0xad,0x38,0x50,0xb4,0xa0,0x3e,0xe6,0xb2,0x67,0x08,0xe9,0x18,
-0xbb,0x72,0x38,0x60,0x8b,0x5f,0x96,0x9e,0x8a,0xfc,0x60,0xb6,0x19,0x72,0x18,0xfa,
-0x72,0x52,0x95,0xf6,0x54,0x10,0x3e,0x8a,0x82,0x06,0x97,0xcf,0xf9,0x20,0x37,0xc5,
-0x60,0xd7,0x1e,0x20,0x9a,0xd5,0x04,0x0d,0x93,0xdb,0x6d,0xdb,0x69,0xeb,0x15,0xb8,
-0x1f,0x3f,0xdf,0xeb,0x2c,0xa8,0x46,0xcf,0x08,0xef,0xd0,0x57,0xbb,0x3f,0xdb,0xfe,
-0xfe,0x81,0x9e,0xdf,0x70,0xf8,0xfb,0x4f,0xc4,0xb6,0xb6,0xa3,0x3f,0xc7,0xdf,0x8f,
-0xbf,0x51,0xdb,0x2f,0x00,0x14,0xfc,0xde,0x5a,0x07,0xd5,0xb4,0xa3,0x53,0xf0,0xae,
-0xc5,0x7a,0xb5,0xd8,0x81,0xff,0x79,0x43,0x21,0xf3,0xaf,0xbe,0x7d,0xc5,0x3a,0x57,
-0x24,0x65,0x26,0x33,0x3e,0xe1,0x72,0xbf,0x82,0x6f,0xf8,0x9d,0x3d,0xde,0x3b,0x87,
-0xb5,0x3e,0xc9,0x31,0xe1,0xe6,0xb6,0xf3,0xfa,0xb0,0x95,0xa9,0xb3,0x39,0x75,0xbc,
-0x9d,0xa8,0x96,0xf5,0xb8,0xd7,0x7b,0x62,0x1c,0xc9,0x33,0xc2,0xfa,0x5c,0xdd,0xe0,
-0xe2,0xd7,0x68,0xf5,0x3a,0xc8,0x18,0xfd,0xab,0xc1,0x41,0x31,0x87,0x23,0x4e,0xf7,
-0x42,0x25,0xf8,0xf0,0x7b,0x77,0xbb,0xaa,0xcc,0xd3,0x6f,0x86,0xb2,0xdc,0xbb,0xeb,
-0xb7,0x81,0x76,0x1d,0x8e,0x81,0xd7,0xeb,0xd9,0xd5,0xfa,0xc4,0xa6,0x29,0xa9,0x4e,
-0x17,0x77,0x72,0x10,0x09,0x71,0x21,0x38,0xb7,0x1b,0x55,0x8b,0xae,0xdc,0xd2,0x6c,
-0x61,0xd7,0x32,0x5f,0x63,0xfb,0x2e,0xb4,0xa7,0x19,0x1b,0x71,0x8f,0x2e,0xf0,0x59,
-0xcb,0x22,0x73,0xe4,0xaf,0x92,0x22,0x73,0x06,0x86,0xc4,0x83,0xa4,0x17,0x69,0x1f,
-0x3c,0x71,0xea,0xde,0xb3,0x16,0xbe,0x5f,0x87,0xc2,0x91,0xc6,0xf2,0x26,0x6d,0x59,
-0xb9,0x17,0x8f,0x7e,0x47,0x7f,0x12,0x65,0x6a,0x90,0x8c,0x7c,0x4f,0x0d,0xdf,0x1d,
-0x93,0xec,0xd3,0x8b,0x53,0xd5,0x05,0xdd,0x67,0x81,0x69,0xe2,0x0f,0xd2,0x95,0xa3,
-0x31,0x57,0x8b,0xd2,0x74,0x82,0x76,0x5b,0x89,0xae,0xde,0xe3,0xfd,0xe2,0x17,0x73,
-0x22,0x81,0x99,0x92,0xc4,0x3d,0xee,0x27,0x4b,0xb3,0x23,0x07,0x4c,0x20,0xe0,0x60,
-0x65,0x32,0x81,0xee,0x9f,0x65,0xa7,0x97,0xa0,0xbe,0x8f,0x3c,0x2c,0x8c,0x7e,0x78,
-0x76,0x70,0xc8,0xe7,0x7e,0xbe,0x4a,0x1e,0xc8,0x35,0xd8,0x55,0x5d,0xf5,0x03,0x26,
-0x9d,0xdc,0x54,0xd4,0x01,0x04,0x1a,0x4c,0x74,0x2a,0xb5,0x8e,0x3a,0xa5,0xdb,0xe9,
-0xf7,0xae,0xa4,0x00,0x7e,0x77,0x47,0x3b,0xf3,0xf3,0xb2,0x4a,0xb4,0x5c,0xd7,0x6d,
-0xc9,0x65,0x3f,0x35,0x5a,0xce,0xed,0x11,0xf4,0x46,0x64,0xaf,0x00,0x3a,0x9e,0x0d,
-0xcc,0xf0,0xc6,0xf6,0xa5,0x87,0xad,0x79,0xa7,0xf4,0x8e,0x0d,0xb0,0x97,0x0b,0x02,
-0x8b,0x70,0xf0,0xec,0xd3,0x69,0x7b,0x0e,0xdc,0xf6,0x7a,0x4f,0x1d,0x99,0xee,0x7b,
-0xa1,0x58,0xa8,0xa2,0x71,0xa6,0xb0,0x1d,0x9f,0x60,0xc7,0xb0,0x72,0x59,0x46,0xf5,
-0x40,0x96,0xe1,0x14,0xa5,0x59,0x0f,0x67,0x33,0xa1,0xa2,0x7c,0x11,0x72,0x5b,0xe3,
-0x29,0x61,0x32,0xb5,0x56,0xf1,0xc7,0xcd,0xd0,0x24,0x0b,0x21,0x9b,0x46,0x37,0xbb,
-0x53,0xb2,0x5c,0xa3,0xb3,0xdf,0x46,0x1b,0xea,0xc7,0x64,0x5d,0x62,0xc5,0x30,0xe3,
-0xf6,0x73,0xda,0x7e,0x6a,0x71,0x67,0xb8,0x2b,0x34,0x79,0x3e,0xb3,0x8b,0x2c,0x8a,
-0x07,0xb2,0x8c,0x93,0x86,0x7f,0x1b,0xb6,0x12,0x69,0x5c,0xb9,0xc1,0x4a,0xc7,0x61,
-0x7d,0xaa,0x03,0x1a,0xf2,0x15,0xab,0x41,0x5f,0x65,0x18,0xc1,0x72,0xc3,0x5b,0x51,
-0x66,0x53,0xae,0xad,0xf0,0xf1,0xa9,0x9a,0xe2,0xb3,0xe7,0xeb,0x63,0x19,0xb9,0xc6,
-0x54,0x3d,0x50,0xce,0x99,0x34,0xf8,0x79,0xea,0x9e,0xa0,0xfa,0xa3,0xea,0xe8,0xdf,
-0x12,0xd9,0x2c,0xe1,0x49,0xe7,0x3f,0x45,0x67,0xb9,0x96,0x15,0x14,0x48,0x48,0x03,
-0x90,0x11,0x68,0x05,0x7c,0xca,0xef,0xe1,0xed,0xd4,0xa8,0xc6,0x69,0xd3,0x6d,0x0b,
-0xc6,0xa3,0x15,0x00,0xa3,0x9d,0x4b,0xe2,0xe0,0xe9,0x1d,0x10,0xbd,0xbb,0x74,0x0b,
-0x42,0x8e,0x89,0x22,0x4c,0x47,0x0d,0x5e,0x6f,0x5f,0x1f,0xd8,0xe7,0xf4,0xab,0xf6,
-0xea,0x03,0x44,0xbd,0xc7,0x5b,0x86,0x46,0x49,0x22,0x53,0x25,0x4c,0x40,0x88,0xc6,
-0x51,0x13,0x1b,0x11,0x94,0xb1,0x58,0x50,0x99,0x29,0x99,0x22,0xcd,0x12,0x91,0x32,
-0x55,0x34,0xa5,0x68,0xb6,0xc5,0x8a,0x8b,0x4a,0x50,0xb2,0x4b,0x1a,0x21,0x13,0x51,
-0x49,0x82,0x4c,0x94,0x25,0xa4,0x28,0xd1,0xa8,0x1a,0x55,0x29,0x63,0x51,0x44,0x51,
-0x69,0x84,0x46,0x35,0x21,0xeb,0xb8,0xd3,0x22,0x82,0x68,0x49,0xb5,0x78,0xe5,0x26,
-0x23,0x26,0x2b,0x32,0x69,0x69,0x32,0x30,0x32,0x72,0xec,0x9a,0x34,0xc2,0x58,0x08,
-0xcd,0x34,0x99,0x44,0xf1,0x70,0x26,0x09,0xa8,0xc6,0x22,0xc8,0x88,0xc7,0x9d,0x74,
-0x3b,0xae,0x29,0x05,0x24,0x8c,0x32,0x02,0xa4,0x10,0xc8,0xd8,0x53,0x34,0xdb,0x6d,
-0x8d,0xb7,0x52,0x37,0x3f,0x7c,0xf8,0x40,0xd6,0xf0,0x83,0x18,0x8f,0x27,0xed,0xa5,
-0x57,0x8a,0x0c,0x63,0x47,0xa4,0xbe,0x75,0x48,0x25,0x78,0x35,0xaf,0xc4,0xe2,0xf5,
-0xe5,0xda,0xb6,0xc6,0x54,0xc7,0x18,0x0d,0xd8,0x2d,0xe3,0x27,0xeb,0xf5,0xe0,0xde,
-0x8c,0xf0,0x43,0x07,0x6b,0xaa,0x03,0xb1,0xcd,0xe5,0xd4,0x97,0x14,0xf3,0xad,0x1f,
-0x56,0x6a,0x4b,0x25,0xd3,0x67,0x4e,0x5e,0x89,0xb5,0x9d,0xfd,0x0d,0x2e,0x38,0xa4,
-0xfb,0x80,0x81,0xe2,0x1f,0x18,0xa7,0xea,0x82,0x10,0x30,0xad,0xec,0xc6,0x42,0xc9,
-0xd1,0x69,0x22,0x7d,0x6e,0x82,0x13,0x84,0x5a,0x43,0x4b,0xa0,0x90,0x64,0x0e,0x7a,
-0xb4,0x20,0xd8,0x21,0xd4,0xaa,0xee,0x9e,0x3a,0xb5,0xc5,0xc9,0xca,0xba,0x30,0x2d,
-0xd9,0xb3,0x25,0xf7,0xb7,0x8f,0xd7,0xb2,0x76,0xbd,0xcb,0xf4,0x56,0x40,0x6d,0xb0,
-0x6b,0x6d,0xbe,0x23,0x1e,0x86,0x03,0x6b,0x9a,0xaa,0xaa,0xdc,0xcc,0xf4,0xc0,0x02,
-0xd8,0xc5,0xb4,0x2a,0xca,0xec,0xc4,0x0b,0x15,0x50,0x5a,0x21,0x46,0x98,0x50,0xaa,
-0x3e,0x84,0x2e,0xc3,0x03,0x2c,0xce,0xd6,0x60,0xfe,0xda,0x68,0x3e,0x23,0x7d,0xa4,
-0xf1,0x71,0xdd,0xe4,0x43,0xa7,0x68,0x0a,0xdb,0xe1,0x69,0x16,0xf5,0x98,0xcd,0x7a,
-0xa9,0x14,0x54,0x22,0x04,0x38,0x41,0xdb,0xe9,0x95,0x78,0xc5,0x62,0x76,0xcd,0x38,
-0xce,0x2d,0xbc,0xc8,0x86,0xbb,0x87,0xc8,0x5d,0x1f,0x5b,0xd3,0x8a,0x24,0x78,0x4d,
-0x6b,0xa1,0x92,0x76,0x87,0xa1,0xa9,0x6d,0xc4,0x44,0x68,0xb0,0x51,0x75,0x24,0xd6,
-0xd1,0x5b,0x71,0x35,0x6f,0x38,0x7e,0x73,0x85,0xc0,0x29,0x72,0xf1,0x69,0xb5,0x09,
-0xb0,0xc7,0xd6,0xf6,0x5f,0x35,0x16,0x3f,0x02,0x22,0xb1,0xa7,0xda,0x67,0x07,0x09,
-0x4f,0x6a,0x04,0x98,0xbc,0x74,0xf5,0xbc,0x6b,0x79,0x19,0x63,0x34,0x5d,0xeb,0x1e,
-0xc5,0xd2,0xf3,0x3a,0x7c,0x1c,0x5f,0x0f,0x52,0xb9,0xc8,0xde,0xe3,0x5a,0xdf,0x6d,
-0x6b,0x37,0x13,0xe9,0x88,0x25,0x80,0xcf,0x79,0x98,0x4c,0x20,0x16,0xf2,0x99,0xdb,
-0xe1,0x81,0x20,0x57,0xb8,0xc5,0xf6,0xb0,0x13,0x64,0x0f,0x1f,0xef,0xcb,0xcd,0x67,
-0x9c,0x1b,0xf5,0xbe,0x7e,0x28,0x06,0xcb,0x7d,0x9a,0x87,0xe3,0x60,0x64,0xad,0x25,
-0x8a,0x48,0x7a,0x3c,0x69,0x89,0x16,0x2c,0x64,0xe9,0xa7,0x89,0x6c,0xad,0x8e,0x14,
-0xee,0x9c,0x31,0x08,0x60,0x07,0xcf,0xc3,0x58,0x07,0x10,0x46,0xbc,0x16,0x8a,0xe7,
-0x87,0xda,0x57,0x5e,0xa7,0x14,0x01,0x15,0x4a,0xbe,0x9d,0xf1,0xb1,0x1f,0x15,0xd2,
-0x0b,0x92,0x1a,0xe7,0x4e,0x74,0xb8,0x20,0x54,0x02,0x87,0xa0,0x40,0x5a,0xc1,0x06,
-0xef,0x52,0xe3,0x2d,0x7e,0x4c,0x3d,0x69,0x22,0xc1,0x72,0xf1,0xa5,0x0e,0x11,0xf7,
-0x5b,0x65,0x63,0x0f,0x21,0xe9,0x5e,0xc9,0x55,0x4c,0x49,0xbc,0x27,0x9f,0x1b,0x72,
-0x62,0xfd,0xe5,0xfc,0xdb,0x59,0xbf,0xe7,0x9f,0x28,0xd8,0x1d,0x99,0xa6,0xba,0x65,
-0x5b,0x3a,0xab,0x0c,0x43,0x6b,0x45,0xed,0x6a,0xb5,0x2f,0x6f,0x8e,0xd1,0x95,0x1b,
-0x37,0x6b,0x8b,0xa4,0x62,0xd8,0xbe,0x9a,0x31,0x72,0x16,0x6d,0x7b,0xa9,0x43,0x79,
-0x53,0x75,0x4a,0xad,0x69,0x54,0xc6,0x51,0x08,0x46,0x3a,0x36,0xbb,0x56,0x84,0x16,
-0xed,0x05,0xb5,0xdf,0x2c,0xdc,0x50,0x76,0x6d,0xa3,0x0c,0x6d,0x21,0xd6,0xe7,0xad,
-0x09,0x70,0x0c,0xdf,0xee,0x53,0x0f,0x4c,0x3b,0x34,0x2e,0x71,0x5b,0xbb,0x0b,0x0d,
-0x01,0xd7,0x13,0x66,0x25,0x4d,0x22,0xed,0x24,0x6e,0xc2,0x34,0x59,0x80,0xb3,0x98,
-0x08,0x6d,0x23,0x66,0x94,0x68,0xa6,0x26,0xd2,0x18,0xf4,0xc1,0x53,0x42,0x54,0xcb,
-0x35,0x6b,0xc2,0xd5,0xaa,0x0c,0x5a,0x18,0x7b,0x75,0x00,0xd3,0xd3,0xcb,0x5b,0xd4,
-0x11,0x4d,0xb1,0x46,0x04,0x7c,0x27,0xa6,0x07,0x1b,0x90,0x42,0xbb,0x46,0x2d,0x12,
-0x45,0xad,0x3e,0x62,0x16,0x7a,0xa8,0x90,0x14,0xd0,0xdb,0x61,0xe5,0x74,0xe9,0xfd,
-0xed,0xf3,0x45,0xd6,0x9c,0xe7,0x19,0x51,0x33,0xc6,0x1c,0x0b,0x20,0xe4,0xe3,0x59,
-0x2a,0xa0,0xce,0x57,0x32,0x20,0xbd,0x3c,0xe9,0x06,0x3c,0x04,0xfa,0xf0,0x08,0x01,
-0x2e,0x7e,0xaf,0xb5,0x45,0xdc,0x18,0x85,0x76,0x70,0x76,0x97,0xde,0x25,0x33,0xbe,
-0x6c,0xb6,0xb9,0x10,0x24,0x0c,0x8b,0x20,0x98,0x83,0x96,0x83,0x9d,0xab,0xc7,0x9d,
-0x37,0xbb,0x77,0x7d,0x68,0x96,0xbf,0xa1,0x60,0x54,0x02,0x52,0x1b,0x81,0x9b,0xd3,
-0x60,0xd0,0xd5,0x84,0x37,0xed,0xf7,0xf7,0xf2,0xd9,0x3a,0xb6,0xa8,0xcd,0x96,0x25,
-0x14,0xce,0xa4,0xc1,0x6a,0xac,0xca,0x76,0x86,0x2a,0x32,0xf7,0x61,0x76,0x1f,0x59,
-0x60,0xfe,0xa6,0x38,0xfc,0xfe,0x90,0x1b,0x51,0xb5,0xf6,0x19,0xc6,0xc6,0xb8,0xf9,
-0xe0,0xb0,0xb3,0xdf,0xb7,0x19,0x1d,0xf1,0x3d,0xb5,0x43,0xe7,0xc6,0xa9,0x58,0x66,
-0x31,0x14,0x7f,0x39,0x5b,0xbe,0xe8,0x96,0xe9,0xab,0xe2,0xb6,0xbc,0x6d,0x7c,0x2a,
-0xd5,0xf5,0x11,0xad,0xbd,0x9a,0xde,0x9a,0xab,0x58,0xb5,0x46,0xaa,0xbe,0x9a,0xb9,
-0xab,0x15,0x6b,0xd9,0x5d,0x56,0x57,0x8b,0x6f,0x4a,0xd5,0xe4,0xd2,0x05,0x1a,0x10,
-0x11,0xa4,0xda,0x44,0x3d,0x3f,0x23,0x37,0x8a,0x0e,0x81,0xc6,0x9c,0x08,0x38,0x97,
-0xe5,0x9c,0x16,0x1a,0x90,0x02,0x12,0x59,0xcf,0x00,0x16,0x15,0x34,0xbb,0xb5,0x10,
-0x59,0x42,0xe3,0x09,0x5e,0xe8,0x96,0x9e,0x9b,0xa2,0xcd,0x32,0xf6,0x19,0x43,0x1a,
-0xbb,0x39,0xb0,0x97,0x86,0x20,0xa6,0x05,0xd2,0x41,0x76,0xd8,0x53,0x8d,0xa9,0x15,
-0xf8,0xeb,0xe1,0x7f,0xc5,0x7c,0x0f,0xd7,0xb4,0x37,0x1a,0xe2,0x1e,0x96,0xbe,0xae,
-0xac,0xc0,0x0a,0x2e,0x13,0x38,0x1c,0xf8,0xa1,0x50,0x17,0x3d,0x92,0x93,0xa8,0x55,
-0xd9,0x29,0x21,0x15,0x34,0x5d,0x9d,0x1c,0x18,0x06,0x5a,0x0d,0xf8,0x25,0x82,0x8d,
-0x9a,0x5e,0x43,0x33,0xcb,0x96,0x79,0x61,0x4c,0x56,0xa3,0x82,0x1b,0x62,0x24,0x2a,
-0xa8,0xe2,0x19,0xb3,0x8a,0x03,0x96,0x2f,0x39,0x3c,0x25,0xb9,0x81,0x1e,0xf9,0xa5,
-0xec,0x68,0x18,0xcf,0x3c,0xcd,0xbc,0x43,0xd8,0x61,0x1e,0xad,0xc8,0xd8,0x91,0xb0,
-0x40,0x3d,0x78,0x3b,0x8c,0x2d,0xae,0x39,0x8a,0x30,0xf1,0xce,0xb0,0xd3,0x6b,0xb2,
-0x88,0xdd,0x8a,0x14,0x90,0x6c,0x7c,0xf3,0x28,0x63,0xb8,0x9e,0x90,0xdf,0x7f,0x04,
-0x39,0xb3,0x64,0xe5,0xa2,0x31,0x22,0x30,0x63,0xde,0xb8,0x2e,0x35,0xb5,0x1f,0x9f,
-0x2d,0x10,0x0b,0xb5,0xc0,0x36,0x98,0xa9,0xb6,0x74,0xc3,0xad,0x90,0x7b,0xf5,0xe9,
-0xd5,0xe5,0x50,0x7a,0x7f,0x06,0x2b,0x9c,0x9c,0x79,0xd0,0x59,0x2f,0x1c,0x6f,0xee,
-0x6d,0xf9,0xbe,0xbe,0x34,0xf8,0x41,0x83,0xde,0x49,0xee,0x40,0xdf,0xea,0xff,0x57,
-0xd6,0xdf,0x5b,0x07,0xb1,0xe3,0xbc,0x8b,0x96,0x93,0x7f,0x80,0xf4,0xc5,0xb3,0x5e,
-0xcf,0x4a,0x8e,0x96,0xdd,0x88,0x11,0x30,0xdb,0xcb,0xfe,0x5b,0x64,0xbf,0x07,0x60,
-0x3e,0x8a,0xdb,0xcd,0xd1,0xd2,0xf2,0x79,0xd5,0x30,0xc9,0xd9,0x33,0x33,0xb8,0x4d,
-0x8e,0xf9,0xdf,0x0b,0x50,0x6c,0x36,0x17,0x6e,0x71,0x39,0x16,0x6e,0xc6,0x50,0x14,
-0x91,0x4a,0xf9,0xe8,0xe3,0xe9,0x8e,0x11,0x29,0x28,0x4f,0x11,0x33,0x01,0xdc,0x05,
-0x12,0x52,0x20,0x42,0x83,0x11,0x24,0x05,0xb0,0x6f,0x7b,0xf4,0x0b,0x96,0x3c,0xd0,
-0x71,0x48,0xab,0x9c,0x47,0xba,0xd7,0x18,0x70,0x92,0x53,0xe8,0x63,0x74,0xf8,0x63,
-0x8c,0xf9,0x8d,0xcd,0x42,0xdb,0x84,0x5e,0x36,0x9c,0xc3,0x76,0x52,0xe9,0x8d,0xb6,
-0x0c,0x9c,0xe9,0x46,0x96,0x75,0xd9,0xdb,0x9f,0x53,0x55,0x24,0x01,0x80,0xb3,0x18,
-0xca,0xb0,0xf0,0x72,0x12,0xe9,0x24,0x11,0x0f,0x82,0x60,0xa4,0x43,0x3d,0x1c,0x60,
-0x13,0x6a,0x33,0xb2,0x13,0xbc,0x40,0xc1,0x87,0x81,0x94,0xd1,0x4d,0x36,0x8c,0xda,
-0xc2,0xde,0x84,0x67,0xdf,0xbf,0x65,0x83,0xd7,0xb9,0xf8,0xc6,0x69,0x97,0x6f,0x1d,
-0x2b,0x36,0xfe,0x79,0xd9,0xd2,0x6e,0xc7,0x2d,0xf5,0x11,0x55,0xe0,0xa4,0x85,0x4d,
-0x50,0xf6,0x0f,0x17,0xa8,0xc9,0xbd,0xe3,0xbb,0x96,0x1b,0x47,0x4c,0x4d,0x93,0x6a,
-0x10,0xc5,0x8f,0x37,0xc0,0x91,0x36,0xef,0x5f,0x5d,0x2a,0x04,0xb6,0xcc,0x36,0x27,
-0x92,0x52,0x20,0x90,0x8b,0x4b,0x84,0x5e,0xfb,0x7b,0x53,0x99,0x7f,0x79,0xc9,0x1a,
-0x15,0x68,0x87,0x7d,0xe4,0x2d,0xfa,0x7c,0x67,0x31,0xbd,0x88,0x1e,0x42,0xa4,0x36,
-0x9b,0xed,0x3d,0x19,0x96,0x65,0x3d,0xc6,0x0f,0xa8,0x1b,0xf6,0xfd,0x4e,0x7d,0xb7,
-0x70,0x63,0x16,0x4e,0xa8,0xe4,0x8c,0x63,0x63,0x4c,0x6c,0xe5,0x08,0x67,0x1f,0x3b,
-0xf8,0xd6,0x56,0x09,0xd3,0x6e,0xbc,0x35,0x66,0xc6,0xfb,0xbb,0x76,0xe6,0x4e,0x98,
-0x40,0xf5,0x33,0x96,0x59,0x21,0xe5,0x1d,0x16,0x2c,0x5e,0x78,0xe7,0x9d,0xdf,0xeb,
-0xdf,0x64,0x2b,0xd9,0x2e,0x69,0x9b,0xef,0x54,0x3d,0x36,0xc4,0x43,0x93,0xcd,0xaa,
-0x4e,0xc2,0x18,0xce,0xec,0x27,0x7c,0xd6,0xe5,0xb6,0xd4,0xd6,0x3c,0xb8,0xed,0xf5,
-0x0e,0x9d,0x37,0x87,0xa6,0x8c,0x0e,0x11,0xf0,0x48,0xd0,0x16,0x7a,0xde,0x9a,0x10,
-0x2e,0x6b,0x97,0xc2,0x55,0x52,0x2c,0xf3,0x4d,0x1c,0xae,0x2c,0x50,0x96,0x1a,0x6d,
-0x11,0x49,0x22,0x3a,0x27,0x1a,0x21,0x71,0x52,0x4a,0xeb,0x78,0x5d,0x85,0xc8,0x48,
-0x35,0x54,0xd8,0xea,0x05,0x0d,0x03,0x62,0xa5,0x72,0x13,0xe1,0x0d,0xdb,0x1b,0x62,
-0xc8,0x41,0x97,0x2e,0x24,0x00,0x95,0xb2,0x5a,0x25,0x4d,0xb3,0x2c,0xb3,0x29,0xa6,
-0x02,0x60,0xe5,0xae,0x05,0x4b,0x53,0x04,0xd3,0x45,0xd8,0x10,0xb2,0x72,0xd0,0xb7,
-0x8a,0xbb,0x41,0x79,0x15,0xe2,0xee,0xc0,0x5e,0xf3,0xb1,0x8c,0xa5,0x70,0x69,0x19,
-0x50,0x2d,0x45,0x0e,0xa8,0x81,0x06,0x5a,0x86,0x5a,0xd5,0x08,0xc0,0x69,0xda,0xa4,
-0x17,0x25,0x01,0x41,0x6b,0x04,0x24,0xc1,0x0e,0x4d,0x90,0x68,0x98,0x67,0x25,0xd9,
-0x09,0x92,0xc8,0x88,0x7f,0x77,0x3b,0xae,0xf1,0x99,0x10,0x7b,0x1c,0xf5,0x68,0x22,
-0xcc,0xfd,0xc7,0x64,0x62,0xa8,0x55,0x50,0x17,0xba,0xc5,0x79,0x47,0x18,0x87,0xc0,
-0xcb,0x41,0x01,0x1d,0xbd,0x50,0xc3,0xa2,0xe2,0xec,0x09,0x0c,0xc2,0x01,0x8f,0x3a,
-0x81,0xd7,0xa2,0x0b,0x2e,0x77,0x19,0x6b,0x38,0x9b,0xef,0xbb,0x7c,0x13,0x0c,0x22,
-0x65,0xe9,0xbd,0x43,0x2c,0x02,0x8e,0x48,0x77,0xef,0xe0,0xa1,0xa2,0xe1,0x8b,0x0e,
-0xc2,0x40,0x09,0x44,0x85,0x6e,0x33,0xb1,0xce,0xae,0x23,0x2c,0x01,0x83,0xe7,0x0f,
-0x7b,0x28,0x16,0x32,0xde,0x2c,0x39,0xbe,0xd3,0x7e,0x46,0x5d,0xe8,0x29,0x3e,0x17,
-0x7f,0xd2,0x67,0x62,0x6a,0xe6,0xaa,0xe0,0x93,0x6c,0xdf,0x30,0xbb,0x16,0xc6,0xfd,
-0x8f,0x9a,0xbe,0xd6,0xb3,0x16,0x3b,0x76,0x4b,0xc3,0x06,0xc6,0xc5,0xe5,0xd3,0x46,
-0xc1,0x8d,0xf3,0x3a,0x3a,0xca,0xbb,0x5e,0x36,0xcd,0xf4,0x77,0x0e,0xad,0x17,0xd7,
-0x44,0xb5,0x9f,0x07,0xae,0xe6,0x04,0xae,0x07,0x8f,0xc2,0x88,0x39,0xb1,0xc6,0xde,
-0x3b,0xea,0xd5,0x68,0xd2,0x6f,0x43,0x06,0x36,0x12,0x4d,0x7d,0x8c,0x8b,0xc1,0x91,
-0x06,0x20,0xbf,0x5d,0xd4,0x93,0x1b,0xa0,0x71,0xd1,0x7a,0x65,0x41,0x72,0x7b,0x32,
-0x39,0xaa,0x1b,0xd6,0xcf,0xde,0x55,0x82,0x97,0x0a,0xe9,0x3c,0x52,0x9a,0xb9,0x13,
-0x9b,0x28,0x11,0x44,0x3e,0xc2,0x83,0x1e,0x99,0x88,0x3c,0xfe,0x22,0xca,0x4c,0x5d,
-0xed,0x47,0x1d,0x87,0xa5,0xf1,0x90,0x18,0xfc,0x06,0x79,0x48,0x85,0x31,0x36,0x27,
-0xf9,0x03,0x9f,0x3a,0x63,0x6e,0xa6,0x31,0x70,0xae,0x40,0x24,0x6b,0x58,0x2e,0xd0,
-0x01,0x1c,0xb1,0x9d,0xd7,0x4e,0xd6,0x00,0x1c,0x48,0xfb,0xc6,0x8e,0xe4,0x7b,0x1c,
-0x57,0x23,0x37,0x06,0xc1,0xb1,0x1e,0x99,0x1b,0x29,0x23,0xa4,0x22,0xfd,0x69,0xe7,
-0x00,0x72,0x46,0x78,0x64,0x18,0x72,0xc0,0x92,0x07,0x24,0x97,0xa3,0x25,0xf2,0x47,
-0x4e,0xaf,0x74,0x28,0xb5,0xd1,0x95,0xd7,0x26,0x8a,0x48,0x55,0x79,0xf7,0x22,0x77,
-0x7f,0x8a,0xbd,0x1b,0xf9,0xdf,0xa2,0x8b,0x04,0xa5,0xef,0x37,0xbe,0x8c,0x4b,0x57,
-0x68,0x28,0x95,0x12,0x47,0x72,0x9f,0x7a,0x44,0x9b,0x48,0x74,0xe8,0x0b,0x07,0x56,
-0x9e,0xf6,0xf9,0xc8,0xad,0xb4,0xce,0x48,0xb9,0xdb,0x17,0xc0,0xb7,0x24,0xb9,0xaa,
-0x67,0x72,0x86,0x14,0xe0,0x77,0xd2,0xf6,0xab,0xda,0x22,0x79,0xc3,0x7d,0xad,0x5c,
-0xd6,0x1e,0x01,0x45,0x42,0x82,0xe0,0x67,0x5a,0x0d,0x27,0x7c,0x11,0x63,0x79,0x3d,
-0x59,0x2f,0x9f,0x52,0x9f,0x65,0x78,0x3c,0x6d,0xf8,0x3c,0x05,0xc5,0xf6,0xc8,0xc2,
-0xed,0x6c,0x61,0xa3,0x17,0x56,0x17,0xa2,0xd4,0xd9,0x5d,0xe1,0x14,0x48,0x00,0x32,
-0xc4,0x84,0x10,0xcf,0x8b,0xdc,0x07,0x28,0x88,0xe1,0x29,0xd0,0x6b,0xb6,0x5b,0x34,
-0xf1,0xb1,0xab,0x9e,0x21,0x0a,0x44,0x73,0x7b,0x18,0x15,0x5a,0x99,0xd5,0xc5,0x96,
-0xa1,0xc7,0x3a,0xb4,0xba,0x28,0xf5,0xe6,0x7c,0x0b,0x4c,0x74,0x04,0x23,0xdd,0x11,
-0xf3,0x62,0xc4,0x19,0x5d,0x98,0x72,0xd5,0x9b,0x6d,0x9d,0xec,0x45,0x6d,0xda,0x46,
-0x30,0xa1,0x2d,0x4a,0x84,0x36,0x0d,0x35,0xcd,0xb5,0x50,0x8d,0x2b,0xa4,0xea,0x33,
-0x75,0x7f,0x59,0xbb,0xbd,0xa1,0xa8,0x4b,0x3d,0xa1,0xd6,0x31,0x30,0x91,0x94,0xd1,
-0x08,0x84,0x91,0x3b,0xf6,0xae,0x52,0x41,0x6f,0x6c,0xe3,0x9f,0x37,0xc9,0xbe,0x05,
-0x9f,0xa6,0x10,0x48,0xc1,0xce,0xdf,0x36,0xea,0x5b,0x05,0xf9,0xde,0xfb,0x62,0x76,
-0xb0,0xce,0x3b,0x8a,0x9c,0x54,0x12,0x29,0x47,0x47,0x92,0x68,0x58,0xbd,0xba,0xf0,
-0xf9,0x11,0x15,0xbf,0x91,0x39,0x61,0x6a,0x58,0xa4,0xbf,0x13,0x05,0x6b,0xca,0x1b,
-0x0c,0x2d,0xac,0x65,0xc5,0x2e,0x89,0x45,0x53,0x30,0x48,0x5b,0xcf,0x90,0xd7,0xc5,
-0x0f,0xd3,0x35,0xbf,0xd6,0xe5,0x01,0x77,0x37,0x6b,0xba,0xf3,0xe0,0xe1,0xe0,0x0f,
-0x23,0x44,0x68,0xec,0x6e,0xc7,0x68,0xa9,0x70,0x9c,0x57,0xe6,0x88,0x5b,0xaa,0xd7,
-0x9b,0x52,0x03,0x8d,0x62,0xe5,0xb4,0x8b,0xb3,0x66,0x4d,0xa2,0x9e,0x1f,0xc3,0x7b,
-0xd7,0xd6,0xf7,0x7c,0xe1,0x77,0x5e,0xad,0x26,0x34,0x6f,0x38,0xc6,0x9c,0xe7,0x77,
-0x4e,0x1b,0x71,0xb6,0xdc,0x23,0x91,0xb8,0xe7,0xc7,0xc5,0x8e,0xce,0xfd,0x15,0xc1,
-0xbf,0x3c,0x19,0x4f,0xcc,0xaa,0xf0,0x53,0xe0,0xa8,0x44,0xe8,0xd3,0x5b,0xbc,0x88,
-0xa8,0x97,0x51,0x0d,0x90,0xbd,0x39,0x4b,0x30,0x2d,0xd4,0x2c,0xf3,0x9c,0x05,0xda,
-0xd9,0x8c,0x4d,0x1b,0xb0,0x5a,0xa6,0xfa,0x74,0x79,0xd6,0xe9,0x15,0x0f,0x2d,0x75,
-0x9d,0x56,0xb6,0x86,0x5a,0x71,0x60,0x18,0x38,0x5d,0x19,0x34,0x38,0x83,0xf5,0x26,
-0xb6,0x83,0x25,0x85,0xd4,0xb4,0x19,0xf6,0x39,0xfe,0x1f,0xb3,0xe4,0xbd,0x10,0xd3,
-0x41,0xe0,0x80,0xf5,0xf5,0x38,0xf2,0x51,0x5e,0x19,0xcf,0xee,0xc2,0x7d,0xa2,0x3c,
-0xa8,0x15,0xee,0x24,0x1b,0x6f,0xf0,0xca,0x3e,0x7c,0xb1,0x45,0xad,0x9f,0x4a,0x64,
-0xe8,0x2a,0x1f,0x5d,0x3e,0x6e,0x9b,0x14,0x3d,0x73,0x99,0x9e,0x1f,0xea,0x06,0x16,
-0xc9,0x1a,0x5a,0xb4,0x43,0x6b,0x69,0x0f,0x6b,0x6b,0xe9,0xbc,0xe4,0x43,0x6a,0x81,
-0x4a,0xa0,0x85,0x1c,0xde,0xa5,0x01,0x60,0xd0,0x7a,0x7a,0x62,0x56,0x2b,0x4a,0x11,
-0x28,0xbc,0x2a,0x62,0xf7,0x49,0x97,0xb1,0x06,0xc5,0xd6,0xb7,0xa2,0x60,0x28,0x87,
-0x9a,0xc4,0xb5,0x10,0x1b,0x43,0x2d,0x66,0xb4,0x50,0x49,0x14,0xe2,0xb4,0xed,0x05,
-0x87,0xd9,0xe0,0xdb,0x19,0xb2,0x82,0x4e,0xa0,0x44,0x26,0x8d,0xda,0x0d,0xc8,0x99,
-0xab,0x97,0xd4,0x6c,0xcc,0x13,0x01,0x1b,0x51,0x00,0xb9,0x44,0x3b,0xa9,0x9a,0x0c,
-0x2f,0xd9,0x6d,0x58,0x1a,0x46,0x59,0x9d,0x46,0x61,0xaf,0x01,0x26,0xc4,0x26,0x39,
-0x69,0x17,0xcd,0xd0,0x15,0x15,0x76,0x6b,0x40,0x1b,0x83,0xe4,0x87,0xb4,0x85,0xe3,
-0x69,0x0d,0x89,0xce,0x6c,0x3c,0xc2,0xe1,0xf4,0xc3,0xf6,0x94,0x7b,0x38,0x01,0x81,
-0xc5,0x72,0x4b,0x50,0xbe,0x34,0x83,0x7e,0x6b,0x0c,0x3e,0xa4,0x0f,0x3f,0xb3,0x07,
-0x5d,0x41,0xfc,0xbf,0x85,0xb0,0x33,0x09,0xa7,0x86,0xa1,0x1a,0xd1,0xf5,0xc4,0x22,
-0x08,0xd4,0x23,0xb6,0x3b,0x50,0xb3,0x8c,0xbf,0xa8,0x87,0x96,0x2e,0xf7,0xcf,0xdc,
-0x31,0xbb,0x09,0x63,0x76,0x37,0xc5,0xe5,0x01,0x46,0x7a,0x3f,0x62,0x13,0x3c,0xdd,
-0x6b,0x55,0x0a,0x7c,0x42,0x06,0xa6,0x04,0x92,0x04,0xf6,0xe5,0xb4,0xd8,0x5d,0x54,
-0x5b,0x6e,0x71,0x61,0x77,0x84,0xc2,0x31,0xd0,0x7c,0x8a,0x9b,0x03,0x78,0x70,0xf6,
-0xa4,0xe0,0x97,0xbc,0x18,0x41,0x47,0x30,0x20,0xce,0xf8,0xbe,0x22,0x68,0xdc,0x66,
-0xc8,0x5e,0xf6,0x81,0x95,0x8a,0xc3,0x27,0x71,0x4e,0x0c,0x62,0x21,0xd4,0x88,0x85,
-0x42,0x7d,0xe1,0xfe,0x83,0x77,0xfc,0x7c,0x86,0x51,0xc0,0xe7,0x89,0x66,0x6c,0xbf,
-0x60,0x07,0x30,0x5b,0x11,0x7f,0xb1,0xd0,0xcb,0x4b,0x30,0x35,0x7c,0x93,0xef,0x5c,
-0x33,0x1e,0x58,0xbe,0x64,0x48,0xe4,0xc8,0xaf,0x7d,0xac,0x99,0xb7,0x0a,0x50,0x2f,
-0xd8,0xe3,0x28,0x71,0x78,0x12,0x87,0x2f,0xf3,0xb1,0x75,0xdf,0x01,0xc6,0x27,0xdb,
-0xd7,0x7f,0xae,0x44,0x6e,0x84,0x5f,0x23,0x3f,0x19,0x40,0x90,0x2a,0x93,0xa7,0x41,
-0x79,0x5b,0xdb,0x2c,0x20,0xc1,0x56,0x84,0x11,0x75,0x9f,0x0b,0x69,0xf1,0x70,0xb8,
-0x68,0x3d,0x2e,0x0e,0x37,0x28,0x2d,0xf8,0xcd,0x97,0x01,0xb0,0x6e,0x61,0xca,0x97,
-0x1c,0x3a,0x10,0x04,0x3f,0xa4,0x34,0x5e,0xd7,0x16,0x67,0x37,0xc9,0xca,0x16,0xec,
-0x58,0x31,0x41,0xda,0x52,0x4d,0x5a,0x55,0x88,0x41,0xd9,0x82,0x6f,0x43,0x97,0x59,
-0x40,0x91,0x6b,0x01,0x9e,0x4d,0x44,0xba,0x0f,0x0c,0x67,0x8c,0x76,0x86,0xe6,0x9e,
-0x85,0xb4,0x4b,0x09,0xd1,0x96,0xdb,0x73,0x67,0x96,0x82,0xed,0x48,0xa1,0x67,0xb5,
-0x9b,0x40,0xcc,0xba,0x03,0x28,0x32,0x37,0x70,0x94,0xf4,0xab,0x6c,0xe3,0x82,0x90,
-0x56,0x78,0x22,0xca,0x81,0xa4,0xd4,0x44,0x88,0x08,0x00,0x54,0x0e,0x29,0xcd,0x03,
-0x2b,0x8c,0xfd,0x0a,0x82,0xba,0x0b,0x67,0x45,0x52,0x11,0xcc,0x87,0x89,0x70,0xe5,
-0x6d,0xdd,0x63,0x6f,0x76,0xcd,0xd2,0x68,0xc2,0x84,0x60,0x1b,0x4d,0xb4,0xe7,0x8c,
-0x51,0xf4,0xcd,0xbb,0x1f,0x2d,0x2b,0xb8,0x86,0xd2,0x65,0x88,0xc8,0x85,0x46,0x91,
-0xa8,0xf4,0xeb,0x1a,0x16,0xf5,0xc0,0xd6,0xb2,0x45,0x97,0xf6,0x55,0x04,0x3a,0x06,
-0xef,0xcc,0x0b,0x33,0xd3,0x57,0x24,0x93,0x86,0xe2,0x86,0x03,0x86,0x63,0xa5,0xcc,
-0xe7,0x59,0x57,0xa3,0x74,0x27,0x22,0x19,0x44,0x38,0x04,0x16,0x92,0x8c,0x2d,0x44,
-0x39,0x15,0x4e,0xe0,0x98,0xc5,0x9d,0x8c,0x5c,0xdc,0xd0,0x17,0x62,0xa4,0xdc,0x85,
-0x69,0x70,0xfe,0x0e,0x26,0x01,0x69,0xa1,0x16,0x3a,0x5e,0xb6,0x6a,0x90,0x83,0x20,
-0x65,0xa0,0xb1,0x61,0x0d,0x05,0xe7,0x55,0x6d,0xa4,0x51,0x17,0xa9,0xdb,0xef,0x6c,
-0xa9,0xeb,0x7c,0xbf,0x92,0x3b,0xfa,0xdf,0xd8,0xb1,0xdd,0x45,0x54,0xfc,0x50,0x71,
-0x2c,0x44,0x53,0xf6,0x26,0x58,0x8b,0x12,0x44,0xcb,0x61,0xe5,0xb2,0x91,0x2c,0x5a,
-0x07,0x28,0x29,0xd3,0xcf,0x7b,0xbf,0x59,0x5a,0x34,0x77,0x84,0xe5,0x81,0x26,0x53,
-0x20,0xf0,0xbe,0xc8,0xdd,0xe1,0xc2,0x28,0xf8,0x74,0x0f,0x09,0xac,0xfb,0xd8,0x7c,
-0x48,0x80,0x01,0xe4,0xa3,0x56,0xa7,0x68,0xd7,0x66,0x28,0x44,0xf0,0xff,0x3e,0x15,
-0x4d,0x5c,0x94,0x35,0x3c,0xf7,0x6e,0xfc,0x58,0x0c,0x63,0xb7,0x1e,0x2a,0xd0,0x06,
-0xd9,0xbb,0x58,0x8f,0x3d,0xad,0xe1,0x02,0x01,0x24,0x88,0x48,0x15,0x55,0x56,0x2a,
-0x49,0x0a,0x12,0x24,0xac,0xc0,0xb3,0x3e,0xed,0x62,0x5a,0xc6,0x3d,0x10,0xbb,0x50,
-0x49,0x31,0xbb,0xa2,0x13,0xaf,0x07,0xe9,0xd4,0x5f,0x21,0x49,0x6f,0x36,0xb6,0xa4,
-0x9a,0x48,0x51,0xeb,0x41,0xdc,0x9a,0x60,0x60,0xb6,0x98,0xe3,0x19,0xb6,0x2f,0x8d,
-0xf3,0x70,0xba,0x16,0xa3,0x68,0x08,0xac,0xfa,0xcc,0xdc,0xbe,0xfb,0x12,0xd8,0x61,
-0x08,0xe0,0xda,0x1d,0x9c,0x6c,0x58,0x91,0x0d,0x31,0x36,0xc1,0xb0,0xbd,0xad,0xc5,
-0xfb,0xdb,0x0b,0x2d,0x58,0x63,0x18,0x4d,0x3a,0x1b,0x4a,0x66,0x6c,0x53,0x0a,0x67,
-0x58,0x0b,0x96,0x90,0x99,0xb6,0x7d,0xfe,0x2d,0xed,0xed,0xb0,0x43,0xb0,0xd9,0x2a,
-0xd2,0x3b,0x43,0x68,0x01,0x06,0x9d,0x64,0x3a,0xe4,0x85,0xe3,0x72,0xa0,0x53,0xe4,
-0xc1,0xdb,0x26,0x09,0x1b,0x72,0x50,0xc7,0x8d,0x46,0x8e,0xf1,0xa3,0xc2,0xb6,0xb3,
-0x8f,0x18,0x8a,0x47,0x3d,0x97,0xb6,0xb6,0xdc,0xa6,0x6d,0x8b,0x10,0x04,0x6c,0xee,
-0x46,0x29,0x38,0x24,0xce,0xd2,0xaa,0x2a,0xe6,0x23,0xb9,0x83,0x72,0x0b,0x02,0x0e,
-0x52,0x9e,0x15,0xa1,0x16,0x62,0x7d,0x9c,0x59,0xe3,0xb3,0x64,0xfd,0x21,0x40,0xc4,
-0x3b,0x32,0x5a,0x4e,0x64,0xcc,0x23,0x13,0x3a,0x77,0xbd,0xa3,0x98,0x96,0x7a,0x07,
-0x77,0x5d,0x48,0x19,0x2f,0x77,0x55,0x71,0x9a,0x43,0x96,0xb3,0x15,0xb9,0x80,0x05,
-0x4b,0x4d,0x2d,0xd1,0xcf,0xc2,0x70,0xb1,0xc6,0x87,0x88,0x40,0xa3,0xcc,0xac,0xa9,
-0x0e,0x48,0x2d,0xd1,0x61,0x46,0x0c,0x70,0x45,0xdd,0x03,0x84,0x14,0xd4,0xc3,0xc3,
-0x95,0x50,0x6c,0x9c,0x40,0xa2,0xec,0x25,0x0f,0x8f,0xa2,0x32,0xbd,0x85,0xaa,0x20,
-0x60,0x8b,0xbf,0xbb,0xd1,0xed,0x29,0x45,0xe0,0xbb,0xce,0xf5,0xe4,0x18,0x37,0x28,
-0x11,0x84,0x53,0x23,0x6b,0x66,0x64,0x99,0x94,0x98,0xba,0x45,0x89,0x20,0xc1,0x1e,
-0xc6,0x8d,0xa1,0xc0,0x96,0x1b,0x7a,0x42,0x87,0xb1,0x47,0x54,0xba,0xd7,0x51,0xb4,
-0xe4,0x8b,0x90,0x4c,0x24,0x1c,0xb5,0x12,0xf0,0xff,0x7c,0x81,0xdc,0x34,0xf5,0xed,
-0xaa,0x92,0x99,0x30,0x40,0xb4,0xfa,0xe1,0x93,0xf1,0x23,0x8d,0x23,0xaf,0xc1,0x4d,
-0x1b,0x02,0x34,0xe1,0x1c,0x73,0xd3,0xaa,0x08,0xe9,0x23,0x39,0xa0,0x21,0x43,0xc2,
-0xfa,0x77,0xad,0x66,0xf5,0xb7,0x44,0x36,0x91,0xbb,0xa1,0x19,0x63,0xa9,0xba,0x6a,
-0x83,0x85,0xd5,0xde,0x7e,0x66,0x4b,0xb2,0x4b,0x89,0x19,0x57,0x89,0x1d,0xec,0x9d,
-0x98,0x12,0x41,0x94,0xc8,0x0f,0x50,0xd7,0x73,0x1c,0xb2,0x40,0xd2,0x3a,0x74,0xe6,
-0xfa,0xda,0xf8,0x6e,0x47,0x01,0x4b,0xb9,0x14,0x30,0xed,0x7a,0x40,0xec,0x92,0x6b,
-0x93,0x75,0x83,0x86,0x24,0x46,0x13,0x26,0x24,0x18,0x28,0xdc,0x84,0x46,0x8b,0x32,
-0xd9,0x67,0x64,0x2e,0x64,0x39,0xd7,0x3b,0x44,0x4e,0xc8,0x06,0x63,0xad,0xf4,0x26,
-0x8c,0x31,0xc5,0x97,0x77,0x42,0x29,0x88,0x21,0x05,0x14,0x01,0x13,0x30,0x07,0x67,
-0x42,0x30,0xc0,0x40,0x4b,0x45,0xb2,0xa8,0x67,0x66,0x30,0x2c,0x80,0x63,0x13,0x09,
-0xac,0x75,0xfb,0x3a,0xfb,0x3f,0x1f,0xef,0xe7,0xe9,0x3f,0x57,0xd7,0xb3,0xf7,0xef,
-0x35,0x41,0x02,0xfc,0xb8,0x8f,0x05,0x41,0x03,0x86,0x1e,0x11,0x8b,0x7d,0x55,0x04,
-0x0a,0x7a,0xef,0x54,0x10,0x2d,0xc5,0x93,0xda,0xe5,0x41,0x03,0xa6,0xb5,0xbe,0xa8,
-0x20,0x70,0x94,0xd5,0x04,0x0c,0xca,0x82,0x07,0x2e,0x3c,0xf5,0xae,0xe1,0x41,0x0a,
-0xff,0xc5,0xdc,0x91,0x4e,0x14,0x24,0x1b,0x2e,0x27,0x2b,0xc0,
-};
-#endif
diff --git a/include-minimal/copy-current.sh b/include-minimal/copy-current.sh
deleted file mode 100755
index 36d677f..0000000
--- a/include-minimal/copy-current.sh
+++ b/dev/null
@@ -1,13 +0,0 @@
-# after .config setup, type "make prepare" to generate /include files
-# this step is no more required to build busybox, it is made automatically
-# in Android.mk (busybox_prepare module)
-
-cp ../.config ../.config-minimal
-
-cp ../include/applets.h ./
-cp ../include/applet_tables.h ./
-cp ../include/autoconf.h ./
-cp ../include/bbconfigopts_bz2.h ./
-cp ../include/bbconfigopts.h ./
-cp ../include/NUM_APPLETS.h ./
-cp ../include/usage_compressed.h ./
diff --git a/include-minimal/usage_compressed.h b/include-minimal/usage_compressed.h
deleted file mode 100644
index 50491de..0000000
--- a/include-minimal/usage_compressed.h
+++ b/dev/null
@@ -1,3000 +0,0 @@
-#define UNPACKED_USAGE "" \
-"\x45\x58\x50\x52\x45\x53\x53\x49\x4f\x4e\x20\x5d\x0a\x0a\x43\x68" \
-"\x65\x63\x6b\x20\x66\x69\x6c\x65\x20\x74\x79\x70\x65\x73\x2c\x20" \
-"\x63\x6f\x6d\x70\x61\x72\x65\x20\x76\x61\x6c\x75\x65\x73\x20\x65" \
-"\x74\x63\x2e\x20\x52\x65\x74\x75\x72\x6e\x20\x61\x20\x30\x2f\x31" \
-"\x20\x65\x78\x69\x74\x20\x63\x6f\x64\x65\x0a\x64\x65\x70\x65\x6e" \
-"\x64\x69\x6e\x67\x20\x6f\x6e\x20\x6c\x6f\x67\x69\x63\x61\x6c\x20" \
-"\x76\x61\x6c\x75\x65\x20\x6f\x66\x20\x45\x58\x50\x52\x45\x53\x53" \
-"\x49\x4f\x4e\x00\x45\x58\x50\x52\x45\x53\x53\x49\x4f\x4e\x20\x5d" \
-"\x0a\x0a\x43\x68\x65\x63\x6b\x20\x66\x69\x6c\x65\x20\x74\x79\x70" \
-"\x65\x73\x2c\x20\x63\x6f\x6d\x70\x61\x72\x65\x20\x76\x61\x6c\x75" \
-"\x65\x73\x20\x65\x74\x63\x2e\x20\x52\x65\x74\x75\x72\x6e\x20\x61" \
-"\x20\x30\x2f\x31\x20\x65\x78\x69\x74\x20\x63\x6f\x64\x65\x0a\x64" \
-"\x65\x70\x65\x6e\x64\x69\x6e\x67\x20\x6f\x6e\x20\x6c\x6f\x67\x69" \
-"\x63\x61\x6c\x20\x76\x61\x6c\x75\x65\x20\x6f\x66\x20\x45\x58\x50" \
-"\x52\x45\x53\x53\x49\x4f\x4e\x00\x5b\x2d\x2f\x2b\x4f\x50\x54\x49" \
-"\x4f\x4e\x53\x5d\x20\x5b\x2d\x2f\x2b\x6f\x20\x4f\x50\x54\x5d\x2e" \
-"\x2e\x2e\x20\x5b\x2d\x63\x20\x27\x53\x43\x52\x49\x50\x54\x27\x20" \
-"\x5b\x41\x52\x47\x30\x20\x5b\x41\x52\x47\x53\x5d\x5d\x20\x2f\x20" \
-"\x46\x49\x4c\x45\x20\x5b\x41\x52\x47\x53\x5d\x5d\x0a\x0a\x55\x6e" \
-"\x69\x78\x20\x73\x68\x65\x6c\x6c\x20\x69\x6e\x74\x65\x72\x70\x72" \
-"\x65\x74\x65\x72\x00\x5b\x4f\x50\x54\x49\x4f\x4e\x53\x5d\x20\x5b" \
-"\x41\x57\x4b\x5f\x50\x52\x4f\x47\x52\x41\x4d\x5d\x20\x5b\x46\x49" \
-"\x4c\x45\x5d\x2e\x2e\x2e\x0a\x0a\x09\x2d\x76\x20\x56\x41\x52\x3d" \
-"\x56\x41\x4c\x09\x53\x65\x74\x20\x76\x61\x72\x69\x61\x62\x6c\x65" \
-"\x0a\x09\x2d\x46\x20\x53\x45\x50\x09\x09\x55\x73\x65\x20\x53\x45" \
-"\x50\x20\x61\x73\x20\x66\x69\x65\x6c\x64\x20\x73\x65\x70\x61\x72" \
-"\x61\x74\x6f\x72\x0a\x09\x2d\x66\x20\x46\x49\x4c\x45\x09\x09\x52" \
-"\x65\x61\x64\x20\x70\x72\x6f\x67\x72\x61\x6d\x20\x66\x72\x6f\x6d" \
-"\x20\x46\x49\x4c\x45\x00\x5b\x2d\x64\x5d\x20\x5b\x46\x49\x4c\x45" \
-"\x5d\x0a\x0a\x42\x61\x73\x65\x36\x34\x20\x65\x6e\x63\x6f\x64\x65" \
-"\x20\x6f\x72\x20\x64\x65\x63\x6f\x64\x65\x20\x46\x49\x4c\x45\x20" \
-"\x74\x6f\x20\x73\x74\x61\x6e\x64\x61\x72\x64\x20\x6f\x75\x74\x70" \
-"\x75\x74\x0a\x09\x2d\x64\x09\x44\x65\x63\x6f\x64\x65\x20\x64\x61" \
-"\x74\x61\x00\x46\x49\x4c\x45\x20\x5b\x53\x55\x46\x46\x49\x58\x5d" \
-"\x0a\x0a\x53\x74\x72\x69\x70\x20\x64\x69\x72\x65\x63\x74\x6f\x72" \
-"\x79\x20\x70\x61\x74\x68\x20\x61\x6e\x64\x20\x2e\x53\x55\x46\x46" \
-"\x49\x58\x20\x66\x72\x6f\x6d\x20\x46\x49\x4c\x45\x0a\x00\x0a\x0a" \
-"\x50\x72\x69\x6e\x74\x20\x74\x68\x65\x20\x63\x6f\x6e\x66\x69\x67" \
-"\x20\x66\x69\x6c\x65\x20\x75\x73\x65\x64\x20\x62\x79\x20\x62\x75" \
-"\x73\x79\x62\x6f\x78\x20\x62\x75\x69\x6c\x64\x00\x5b\x42\x4c\x4f" \
-"\x43\x4b\x44\x45\x56\x5d\x2e\x2e\x2e\x0a\x0a\x50\x72\x69\x6e\x74" \
-"\x20\x55\x55\x49\x44\x73\x20\x6f\x66\x20\x61\x6c\x6c\x20\x66\x69" \
-"\x6c\x65\x73\x79\x73\x74\x65\x6d\x73\x00\x4f\x50\x54\x49\x4f\x4e" \
-"\x20\x42\x4c\x4f\x43\x4b\x44\x45\x56\x0a\x0a\x09\x2d\x2d\x73\x65" \
-"\x74\x72\x6f\x09\x09\x53\x65\x74\x20\x72\x6f\x0a\x09\x2d\x2d\x73" \
-"\x65\x74\x72\x77\x09\x09\x53\x65\x74\x20\x72\x77\x0a\x09\x2d\x2d" \
-"\x67\x65\x74\x72\x6f\x09\x09\x47\x65\x74\x20\x72\x6f\x0a\x09\x2d" \
-"\x2d\x67\x65\x74\x73\x73\x09\x09\x47\x65\x74\x20\x73\x65\x63\x74" \
-"\x6f\x72\x20\x73\x69\x7a\x65\x0a\x09\x2d\x2d\x67\x65\x74\x62\x73" \
-"\x7a\x09\x47\x65\x74\x20\x62\x6c\x6f\x63\x6b\x20\x73\x69\x7a\x65" \
-"\x0a\x09\x2d\x2d\x73\x65\x74\x62\x73\x7a\x20\x42\x59\x54\x45\x53" \
-"\x09\x53\x65\x74\x20\x62\x6c\x6f\x63\x6b\x20\x73\x69\x7a\x65\x0a" \
-"\x09\x2d\x2d\x67\x65\x74\x73\x7a\x09\x09\x47\x65\x74\x20\x64\x65" \
-"\x76\x69\x63\x65\x20\x73\x69\x7a\x65\x20\x69\x6e\x20\x35\x31\x32" \
-"\x2d\x62\x79\x74\x65\x20\x73\x65\x63\x74\x6f\x72\x73\x0a\x09\x2d" \
-"\x2d\x67\x65\x74\x73\x69\x7a\x65\x36\x34\x09\x47\x65\x74\x20\x64" \
-"\x65\x76\x69\x63\x65\x20\x73\x69\x7a\x65\x20\x69\x6e\x20\x62\x79" \
-"\x74\x65\x73\x0a\x09\x2d\x2d\x66\x6c\x75\x73\x68\x62\x75\x66\x73" \
-"\x09\x46\x6c\x75\x73\x68\x20\x62\x75\x66\x66\x65\x72\x73\x0a\x09" \
-"\x2d\x2d\x72\x65\x72\x65\x61\x64\x70\x74\x09\x52\x65\x72\x65\x61" \
-"\x64\x20\x70\x61\x72\x74\x69\x74\x69\x6f\x6e\x20\x74\x61\x62\x6c" \
-"\x65\x00\x5b\x2d\x63\x66\x5d\x20\x5b\x46\x49\x4c\x45\x5d\x2e\x2e" \
-"\x2e\x0a\x0a\x44\x65\x63\x6f\x6d\x70\x72\x65\x73\x73\x20\x46\x49" \
-"\x4c\x45\x73\x20\x28\x6f\x72\x20\x73\x74\x64\x69\x6e\x29\x0a\x0a" \
-"\x09\x2d\x63\x09\x57\x72\x69\x74\x65\x20\x74\x6f\x20\x73\x74\x64" \
-"\x6f\x75\x74\x0a\x09\x2d\x66\x09\x46\x6f\x72\x63\x65\x00\x46\x49" \
-"\x4c\x45\x0a\x0a\x44\x65\x63\x6f\x6d\x70\x72\x65\x73\x73\x20\x74" \
-"\x6f\x20\x73\x74\x64\x6f\x75\x74\x00\x5b\x4f\x50\x54\x49\x4f\x4e" \
-"\x53\x5d\x20\x5b\x46\x49\x4c\x45\x5d\x2e\x2e\x2e\x0a\x0a\x43\x6f" \
-"\x6d\x70\x72\x65\x73\x73\x20\x46\x49\x4c\x45\x73\x20\x28\x6f\x72" \
-"\x20\x73\x74\x64\x69\x6e\x29\x20\x77\x69\x74\x68\x20\x62\x7a\x69" \
-"\x70\x32\x20\x61\x6c\x67\x6f\x72\x69\x74\x68\x6d\x0a\x0a\x09\x2d" \
-"\x31\x2e\x2e\x39\x09\x43\x6f\x6d\x70\x72\x65\x73\x73\x69\x6f\x6e" \
-"\x20\x6c\x65\x76\x65\x6c\x0a\x09\x2d\x64\x09\x44\x65\x63\x6f\x6d" \
-"\x70\x72\x65\x73\x73\x0a\x09\x2d\x63\x09\x57\x72\x69\x74\x65\x20" \
-"\x74\x6f\x20\x73\x74\x64\x6f\x75\x74\x0a\x09\x2d\x66\x09\x46\x6f" \
-"\x72\x63\x65\x00\x5b\x2d\x6a\x79\x5d\x20\x5b\x5b\x4d\x4f\x4e\x54" \
-"\x48\x5d\x20\x59\x45\x41\x52\x5d\x0a\x0a\x44\x69\x73\x70\x6c\x61" \
-"\x79\x20\x61\x20\x63\x61\x6c\x65\x6e\x64\x61\x72\x0a\x0a\x09\x2d" \
-"\x6a\x09\x55\x73\x65\x20\x6a\x75\x6c\x69\x61\x6e\x20\x64\x61\x74" \
-"\x65\x73\x0a\x09\x2d\x79\x09\x44\x69\x73\x70\x6c\x61\x79\x20\x74" \
-"\x68\x65\x20\x65\x6e\x74\x69\x72\x65\x20\x79\x65\x61\x72\x00\x5b" \
-"\x46\x49\x4c\x45\x5d\x2e\x2e\x2e\x0a\x0a\x43\x6f\x6e\x63\x61\x74" \
-"\x65\x6e\x61\x74\x65\x20\x46\x49\x4c\x45\x73\x20\x61\x6e\x64\x20" \
-"\x70\x72\x69\x6e\x74\x20\x74\x68\x65\x6d\x20\x74\x6f\x20\x73\x74" \
-"\x64\x6f\x75\x74\x00\x5b\x2d\x65\x74\x76\x5d\x20\x5b\x46\x49\x4c" \
-"\x45\x5d\x2e\x2e\x2e\x0a\x0a\x44\x69\x73\x70\x6c\x61\x79\x20\x6e" \
-"\x6f\x6e\x70\x72\x69\x6e\x74\x69\x6e\x67\x20\x63\x68\x61\x72\x61" \
-"\x63\x74\x65\x72\x73\x20\x61\x73\x20\x5e\x78\x20\x6f\x72\x20\x4d" \
-"\x2d\x78\x0a\x0a\x09\x2d\x65\x09\x45\x6e\x64\x20\x65\x61\x63\x68" \
-"\x20\x6c\x69\x6e\x65\x20\x77\x69\x74\x68\x20\x24\x0a\x09\x2d\x74" \
-"\x09\x53\x68\x6f\x77\x20\x74\x61\x62\x73\x20\x61\x73\x20\x5e\x49" \
-"\x0a\x09\x2d\x76\x09\x44\x6f\x6e\x27\x74\x20\x75\x73\x65\x20\x5e" \
-"\x78\x20\x6f\x72\x20\x4d\x2d\x78\x20\x65\x73\x63\x61\x70\x65\x73" \
-"\x00\x5b\x2d\x52\x5d\x20\x5b\x2d\x2b\x3d\x41\x61\x63\x44\x64\x69" \
-"\x6a\x73\x53\x74\x54\x75\x5d\x20\x5b\x2d\x76\x20\x56\x45\x52\x53" \
-"\x49\x4f\x4e\x5d\x20\x5b\x46\x49\x4c\x45\x5d\x2e\x2e\x2e\x0a\x0a" \
-"\x43\x68\x61\x6e\x67\x65\x20\x66\x69\x6c\x65\x20\x61\x74\x74\x72" \
-"\x69\x62\x75\x74\x65\x73\x20\x6f\x6e\x20\x61\x6e\x20\x65\x78\x74" \
-"\x32\x20\x66\x73\x0a\x0a\x4d\x6f\x64\x69\x66\x69\x65\x72\x73\x3a" \
-"\x0a\x09\x2d\x09\x52\x65\x6d\x6f\x76\x65\x20\x61\x74\x74\x72\x69" \
-"\x62\x75\x74\x65\x73\x0a\x09\x2b\x09\x41\x64\x64\x20\x61\x74\x74" \
-"\x72\x69\x62\x75\x74\x65\x73\x0a\x09\x3d\x09\x53\x65\x74\x20\x61" \
-"\x74\x74\x72\x69\x62\x75\x74\x65\x73\x0a\x41\x74\x74\x72\x69\x62" \
-"\x75\x74\x65\x73\x3a\x0a\x09\x41\x09\x44\x6f\x6e\x27\x74\x20\x74" \
-"\x72\x61\x63\x6b\x20\x61\x74\x69\x6d\x65\x0a\x09\x61\x09\x41\x70" \
-"\x70\x65\x6e\x64\x20\x6d\x6f\x64\x65\x20\x6f\x6e\x6c\x79\x0a\x09" \
-"\x63\x09\x45\x6e\x61\x62\x6c\x65\x20\x63\x6f\x6d\x70\x72\x65\x73" \
-"\x73\x0a\x09\x44\x09\x57\x72\x69\x74\x65\x20\x64\x69\x72\x20\x63" \
-"\x6f\x6e\x74\x65\x6e\x74\x73\x20\x73\x79\x6e\x63\x68\x72\x6f\x6e" \
-"\x6f\x75\x73\x6c\x79\x0a\x09\x64\x09\x44\x6f\x6e\x27\x74\x20\x62" \
-"\x61\x63\x6b\x75\x70\x20\x77\x69\x74\x68\x20\x64\x75\x6d\x70\x0a" \
-"\x09\x69\x09\x43\x61\x6e\x6e\x6f\x74\x20\x62\x65\x20\x6d\x6f\x64" \
-"\x69\x66\x69\x65\x64\x20\x28\x69\x6d\x6d\x75\x74\x61\x62\x6c\x65" \
-"\x29\x0a\x09\x6a\x09\x57\x72\x69\x74\x65\x20\x61\x6c\x6c\x20\x64" \
-"\x61\x74\x61\x20\x74\x6f\x20\x6a\x6f\x75\x72\x6e\x61\x6c\x20\x66" \
-"\x69\x72\x73\x74\x0a\x09\x73\x09\x5a\x65\x72\x6f\x20\x64\x69\x73" \
-"\x6b\x20\x73\x74\x6f\x72\x61\x67\x65\x20\x77\x68\x65\x6e\x20\x64" \
-"\x65\x6c\x65\x74\x65\x64\x0a\x09\x53\x09\x57\x72\x69\x74\x65\x20" \
-"\x66\x69\x6c\x65\x20\x63\x6f\x6e\x74\x65\x6e\x74\x73\x20\x73\x79" \
-"\x6e\x63\x68\x72\x6f\x6e\x6f\x75\x73\x6c\x79\x0a\x09\x74\x09\x44" \
-"\x69\x73\x61\x62\x6c\x65\x20\x74\x61\x69\x6c\x2d\x6d\x65\x72\x67" \
-"\x69\x6e\x67\x20\x6f\x66\x20\x70\x61\x72\x74\x69\x61\x6c\x20\x62" \
-"\x6c\x6f\x63\x6b\x73\x20\x77\x69\x74\x68\x20\x6f\x74\x68\x65\x72" \
-"\x20\x66\x69\x6c\x65\x73\x0a\x09\x75\x09\x41\x6c\x6c\x6f\x77\x20" \
-"\x66\x69\x6c\x65\x20\x74\x6f\x20\x62\x65\x20\x75\x6e\x64\x65\x6c" \
-"\x65\x74\x65\x64\x0a\x09\x2d\x52\x09\x52\x65\x63\x75\x72\x73\x65" \
-"\x0a\x09\x2d\x76\x09\x53\x65\x74\x20\x74\x68\x65\x20\x66\x69\x6c" \
-"\x65\x27\x73\x20\x76\x65\x72\x73\x69\x6f\x6e\x2f\x67\x65\x6e\x65" \
-"\x72\x61\x74\x69\x6f\x6e\x20\x6e\x75\x6d\x62\x65\x72\x00\x5b\x2d" \
-"\x52\x68\x4c\x48\x50\x5d\x2e\x2e\x2e\x20\x47\x52\x4f\x55\x50\x20" \
-"\x46\x49\x4c\x45\x2e\x2e\x2e\x0a\x0a\x43\x68\x61\x6e\x67\x65\x20" \
-"\x74\x68\x65\x20\x67\x72\x6f\x75\x70\x20\x6d\x65\x6d\x62\x65\x72" \
-"\x73\x68\x69\x70\x20\x6f\x66\x20\x65\x61\x63\x68\x20\x46\x49\x4c" \
-"\x45\x20\x74\x6f\x20\x47\x52\x4f\x55\x50\x0a\x0a\x09\x2d\x52\x09" \
-"\x52\x65\x63\x75\x72\x73\x65\x0a\x09\x2d\x68\x09\x41\x66\x66\x65" \
-"\x63\x74\x20\x73\x79\x6d\x6c\x69\x6e\x6b\x73\x20\x69\x6e\x73\x74" \
-"\x65\x61\x64\x20\x6f\x66\x20\x73\x79\x6d\x6c\x69\x6e\x6b\x20\x74" \
-"\x61\x72\x67\x65\x74\x73\x0a\x09\x2d\x4c\x09\x54\x72\x61\x76\x65" \
-"\x72\x73\x65\x20\x61\x6c\x6c\x20\x73\x79\x6d\x6c\x69\x6e\x6b\x73" \
-"\x20\x74\x6f\x20\x64\x69\x72\x65\x63\x74\x6f\x72\x69\x65\x73\x0a" \
-"\x09\x2d\x48\x09\x54\x72\x61\x76\x65\x72\x73\x65\x20\x73\x79\x6d" \
-"\x6c\x69\x6e\x6b\x73\x20\x6f\x6e\x20\x63\x6f\x6d\x6d\x61\x6e\x64" \
-"\x20\x6c\x69\x6e\x65\x20\x6f\x6e\x6c\x79\x0a\x09\x2d\x50\x09\x44" \
-"\x6f\x6e\x27\x74\x20\x74\x72\x61\x76\x65\x72\x73\x65\x20\x73\x79" \
-"\x6d\x6c\x69\x6e\x6b\x73\x20\x28\x64\x65\x66\x61\x75\x6c\x74\x29" \
-"\x00\x5b\x2d\x52\x5d\x20\x4d\x4f\x44\x45\x5b\x2c\x4d\x4f\x44\x45" \
-"\x5d\x2e\x2e\x2e\x20\x46\x49\x4c\x45\x2e\x2e\x2e\x0a\x0a\x45\x61" \
-"\x63\x68\x20\x4d\x4f\x44\x45\x20\x69\x73\x20\x6f\x6e\x65\x20\x6f" \
-"\x72\x20\x6d\x6f\x72\x65\x20\x6f\x66\x20\x74\x68\x65\x20\x6c\x65" \
-"\x74\x74\x65\x72\x73\x20\x75\x67\x6f\x61\x2c\x20\x6f\x6e\x65\x20" \
-"\x6f\x66\x20\x74\x68\x65\x0a\x73\x79\x6d\x62\x6f\x6c\x73\x20\x2b" \
-"\x2d\x3d\x20\x61\x6e\x64\x20\x6f\x6e\x65\x20\x6f\x72\x20\x6d\x6f" \
-"\x72\x65\x20\x6f\x66\x20\x74\x68\x65\x20\x6c\x65\x74\x74\x65\x72" \
-"\x73\x20\x72\x77\x78\x73\x74\x0a\x0a\x09\x2d\x52\x09\x52\x65\x63" \
-"\x75\x72\x73\x65\x00\x5b\x2d\x52\x68\x4c\x48\x50\x5d\x2e\x2e\x2e" \
-"\x20\x4f\x57\x4e\x45\x52\x5b\x3c\x2e\x7c\x3a\x3e\x5b\x47\x52\x4f" \
-"\x55\x50\x5d\x5d\x20\x46\x49\x4c\x45\x2e\x2e\x2e\x0a\x0a\x43\x68" \
-"\x61\x6e\x67\x65\x20\x74\x68\x65\x20\x6f\x77\x6e\x65\x72\x20\x61" \
-"\x6e\x64\x2f\x6f\x72\x20\x67\x72\x6f\x75\x70\x20\x6f\x66\x20\x65" \
-"\x61\x63\x68\x20\x46\x49\x4c\x45\x20\x74\x6f\x20\x4f\x57\x4e\x45" \
-"\x52\x20\x61\x6e\x64\x2f\x6f\x72\x20\x47\x52\x4f\x55\x50\x0a\x0a" \
-"\x09\x2d\x52\x09\x52\x65\x63\x75\x72\x73\x65\x0a\x09\x2d\x68\x09" \
-"\x41\x66\x66\x65\x63\x74\x20\x73\x79\x6d\x6c\x69\x6e\x6b\x73\x20" \
-"\x69\x6e\x73\x74\x65\x61\x64\x20\x6f\x66\x20\x73\x79\x6d\x6c\x69" \
-"\x6e\x6b\x20\x74\x61\x72\x67\x65\x74\x73\x0a\x09\x2d\x4c\x09\x54" \
-"\x72\x61\x76\x65\x72\x73\x65\x20\x61\x6c\x6c\x20\x73\x79\x6d\x6c" \
-"\x69\x6e\x6b\x73\x20\x74\x6f\x20\x64\x69\x72\x65\x63\x74\x6f\x72" \
-"\x69\x65\x73\x0a\x09\x2d\x48\x09\x54\x72\x61\x76\x65\x72\x73\x65" \
-"\x20\x73\x79\x6d\x6c\x69\x6e\x6b\x73\x20\x6f\x6e\x20\x63\x6f\x6d" \
-"\x6d\x61\x6e\x64\x20\x6c\x69\x6e\x65\x20\x6f\x6e\x6c\x79\x0a\x09" \
-"\x2d\x50\x09\x44\x6f\x6e\x27\x74\x20\x74\x72\x61\x76\x65\x72\x73" \
-"\x65\x20\x73\x79\x6d\x6c\x69\x6e\x6b\x73\x20\x28\x64\x65\x66\x61" \
-"\x75\x6c\x74\x29\x00\x4e\x45\x57\x52\x4f\x4f\x54\x20\x5b\x50\x52" \
-"\x4f\x47\x20\x41\x52\x47\x53\x5d\x0a\x0a\x52\x75\x6e\x20\x50\x52" \
-"\x4f\x47\x20\x77\x69\x74\x68\x20\x72\x6f\x6f\x74\x20\x64\x69\x72" \
-"\x65\x63\x74\x6f\x72\x79\x20\x73\x65\x74\x20\x74\x6f\x20\x4e\x45" \
-"\x57\x52\x4f\x4f\x54\x00\x0a\x0a\x43\x6c\x65\x61\x72\x20\x73\x63" \
-"\x72\x65\x65\x6e\x00\x5b\x2d\x6c\x5d\x20\x5b\x2d\x73\x5d\x20\x46" \
-"\x49\x4c\x45\x31\x20\x5b\x46\x49\x4c\x45\x32\x5d\x0a\x0a\x43\x6f" \
-"\x6d\x70\x61\x72\x65\x20\x46\x49\x4c\x45\x31\x20\x77\x69\x74\x68" \
-"\x20\x46\x49\x4c\x45\x32\x20\x28\x6f\x72\x20\x73\x74\x64\x69\x6e" \
-"\x29\x0a\x0a\x09\x2d\x6c\x09\x57\x72\x69\x74\x65\x20\x74\x68\x65" \
-"\x20\x62\x79\x74\x65\x20\x6e\x75\x6d\x62\x65\x72\x73\x20\x28\x64" \
-"\x65\x63\x69\x6d\x61\x6c\x29\x20\x61\x6e\x64\x20\x76\x61\x6c\x75" \
-"\x65\x73\x20\x28\x6f\x63\x74\x61\x6c\x29\x0a\x09\x09\x66\x6f\x72" \
-"\x20\x61\x6c\x6c\x20\x64\x69\x66\x66\x65\x72\x69\x6e\x67\x20\x62" \
-"\x79\x74\x65\x73\x0a\x09\x2d\x73\x09\x51\x75\x69\x65\x74\x00\x5b" \
-"\x4f\x50\x54\x49\x4f\x4e\x53\x5d\x20\x53\x4f\x55\x52\x43\x45\x2e" \
-"\x2e\x2e\x20\x44\x45\x53\x54\x0a\x0a\x43\x6f\x70\x79\x20\x53\x4f" \
-"\x55\x52\x43\x45\x28\x73\x29\x20\x74\x6f\x20\x44\x45\x53\x54\x0a" \
-"\x0a\x09\x2d\x61\x09\x53\x61\x6d\x65\x20\x61\x73\x20\x2d\x64\x70" \
-"\x52\x0a\x09\x2d\x52\x2c\x2d\x72\x09\x52\x65\x63\x75\x72\x73\x65" \
-"\x0a\x09\x2d\x64\x2c\x2d\x50\x09\x50\x72\x65\x73\x65\x72\x76\x65" \
-"\x20\x73\x79\x6d\x6c\x69\x6e\x6b\x73\x20\x28\x64\x65\x66\x61\x75" \
-"\x6c\x74\x20\x69\x66\x20\x2d\x52\x29\x0a\x09\x2d\x4c\x09\x46\x6f" \
-"\x6c\x6c\x6f\x77\x20\x61\x6c\x6c\x20\x73\x79\x6d\x6c\x69\x6e\x6b" \
-"\x73\x0a\x09\x2d\x48\x09\x46\x6f\x6c\x6c\x6f\x77\x20\x73\x79\x6d" \
-"\x6c\x69\x6e\x6b\x73\x20\x6f\x6e\x20\x63\x6f\x6d\x6d\x61\x6e\x64" \
-"\x20\x6c\x69\x6e\x65\x0a\x09\x2d\x70\x09\x50\x72\x65\x73\x65\x72" \
-"\x76\x65\x20\x66\x69\x6c\x65\x20\x61\x74\x74\x72\x69\x62\x75\x74" \
-"\x65\x73\x20\x69\x66\x20\x70\x6f\x73\x73\x69\x62\x6c\x65\x0a\x09" \
-"\x2d\x66\x09\x4f\x76\x65\x72\x77\x72\x69\x74\x65\x0a\x09\x2d\x69" \
-"\x09\x50\x72\x6f\x6d\x70\x74\x20\x62\x65\x66\x6f\x72\x65\x20\x6f" \
-"\x76\x65\x72\x77\x72\x69\x74\x65\x0a\x09\x2d\x6c\x2c\x2d\x73\x09" \
-"\x43\x72\x65\x61\x74\x65\x20\x28\x73\x79\x6d\x29\x6c\x69\x6e\x6b" \
-"\x73\x00\x5b\x2d\x64\x6d\x76\x75\x5d\x20\x5b\x2d\x46\x20\x46\x49" \
-"\x4c\x45\x5d\x20\x5b\x2d\x48\x20\x6e\x65\x77\x63\x5d\x20\x5b\x2d" \
-"\x74\x69\x6f\x5d\x20\x5b\x45\x58\x54\x52\x5f\x46\x49\x4c\x45\x5d" \
-"\x2e\x2e\x2e\x0a\x0a\x45\x78\x74\x72\x61\x63\x74\x20\x6f\x72\x20" \
-"\x6c\x69\x73\x74\x20\x66\x69\x6c\x65\x73\x20\x66\x72\x6f\x6d\x20" \
-"\x61\x20\x63\x70\x69\x6f\x20\x61\x72\x63\x68\x69\x76\x65\x2c\x20" \
-"\x6f\x72\x0a\x63\x72\x65\x61\x74\x65\x20\x61\x6e\x20\x61\x72\x63" \
-"\x68\x69\x76\x65\x20\x75\x73\x69\x6e\x67\x20\x66\x69\x6c\x65\x20" \
-"\x6c\x69\x73\x74\x20\x6f\x6e\x20\x73\x74\x64\x69\x6e\x0a\x0a\x4d" \
-"\x61\x69\x6e\x20\x6f\x70\x65\x72\x61\x74\x69\x6f\x6e\x20\x6d\x6f" \
-"\x64\x65\x3a\x0a\x09\x2d\x74\x09\x4c\x69\x73\x74\x0a\x09\x2d\x69" \
-"\x09\x45\x78\x74\x72\x61\x63\x74\x20\x45\x58\x54\x52\x5f\x46\x49" \
-"\x4c\x45\x73\x20\x28\x6f\x72\x20\x61\x6c\x6c\x29\x0a\x09\x2d\x6f" \
-"\x09\x43\x72\x65\x61\x74\x65\x20\x28\x72\x65\x71\x75\x69\x72\x65" \
-"\x73\x20\x2d\x48\x20\x6e\x65\x77\x63\x29\x0a\x09\x2d\x64\x09\x4d" \
-"\x61\x6b\x65\x20\x6c\x65\x61\x64\x69\x6e\x67\x20\x64\x69\x72\x65" \
-"\x63\x74\x6f\x72\x69\x65\x73\x0a\x09\x2d\x6d\x09\x50\x72\x65\x73" \
-"\x65\x72\x76\x65\x20\x6d\x74\x69\x6d\x65\x0a\x09\x2d\x76\x09\x56" \
-"\x65\x72\x62\x6f\x73\x65\x0a\x09\x2d\x75\x09\x4f\x76\x65\x72\x77" \
-"\x72\x69\x74\x65\x0a\x09\x2d\x46\x20\x46\x49\x4c\x45\x09\x49\x6e" \
-"\x70\x75\x74\x20\x28\x2d\x74\x2c\x2d\x69\x2c\x2d\x70\x29\x20\x6f" \
-"\x72\x20\x6f\x75\x74\x70\x75\x74\x20\x28\x2d\x6f\x29\x20\x66\x69" \
-"\x6c\x65\x0a\x09\x2d\x48\x20\x6e\x65\x77\x63\x09\x41\x72\x63\x68" \
-"\x69\x76\x65\x20\x66\x6f\x72\x6d\x61\x74\x00\x5b\x4f\x50\x54\x49" \
-"\x4f\x4e\x53\x5d\x20\x5b\x46\x49\x4c\x45\x5d\x2e\x2e\x2e\x0a\x0a" \
-"\x50\x72\x69\x6e\x74\x20\x73\x65\x6c\x65\x63\x74\x65\x64\x20\x66" \
-"\x69\x65\x6c\x64\x73\x20\x66\x72\x6f\x6d\x20\x65\x61\x63\x68\x20" \
-"\x69\x6e\x70\x75\x74\x20\x46\x49\x4c\x45\x20\x74\x6f\x20\x73\x74" \
-"\x64\x6f\x75\x74\x0a\x0a\x09\x2d\x62\x20\x4c\x49\x53\x54\x09\x4f" \
-"\x75\x74\x70\x75\x74\x20\x6f\x6e\x6c\x79\x20\x62\x79\x74\x65\x73" \
-"\x20\x66\x72\x6f\x6d\x20\x4c\x49\x53\x54\x0a\x09\x2d\x63\x20\x4c" \
-"\x49\x53\x54\x09\x4f\x75\x74\x70\x75\x74\x20\x6f\x6e\x6c\x79\x20" \
-"\x63\x68\x61\x72\x61\x63\x74\x65\x72\x73\x20\x66\x72\x6f\x6d\x20" \
-"\x4c\x49\x53\x54\x0a\x09\x2d\x64\x20\x43\x48\x41\x52\x09\x55\x73" \
-"\x65\x20\x43\x48\x41\x52\x20\x69\x6e\x73\x74\x65\x61\x64\x20\x6f" \
-"\x66\x20\x74\x61\x62\x20\x61\x73\x20\x74\x68\x65\x20\x66\x69\x65" \
-"\x6c\x64\x20\x64\x65\x6c\x69\x6d\x69\x74\x65\x72\x0a\x09\x2d\x73" \
-"\x09\x4f\x75\x74\x70\x75\x74\x20\x6f\x6e\x6c\x79\x20\x74\x68\x65" \
-"\x20\x6c\x69\x6e\x65\x73\x20\x63\x6f\x6e\x74\x61\x69\x6e\x69\x6e" \
-"\x67\x20\x64\x65\x6c\x69\x6d\x69\x74\x65\x72\x0a\x09\x2d\x66\x20" \
-"\x4e\x09\x50\x72\x69\x6e\x74\x20\x6f\x6e\x6c\x79\x20\x74\x68\x65" \
-"\x73\x65\x20\x66\x69\x65\x6c\x64\x73\x0a\x09\x2d\x6e\x09\x49\x67" \
-"\x6e\x6f\x72\x65\x64\x00\x5b\x4f\x50\x54\x49\x4f\x4e\x53\x5d\x20" \
-"\x5b\x2b\x46\x4d\x54\x5d\x20\x5b\x54\x49\x4d\x45\x5d\x0a\x0a\x44" \
-"\x69\x73\x70\x6c\x61\x79\x20\x74\x69\x6d\x65\x20\x28\x75\x73\x69" \
-"\x6e\x67\x20\x2b\x46\x4d\x54\x29\x2c\x20\x6f\x72\x20\x73\x65\x74" \
-"\x20\x74\x69\x6d\x65\x0a\x0a\x09\x5b\x2d\x73\x2c\x2d\x2d\x73\x65" \
-"\x74\x5d\x20\x54\x49\x4d\x45\x09\x53\x65\x74\x20\x74\x69\x6d\x65" \
-"\x20\x74\x6f\x20\x54\x49\x4d\x45\x0a\x09\x2d\x75\x2c\x2d\x2d\x75" \
-"\x74\x63\x09\x57\x6f\x72\x6b\x20\x69\x6e\x20\x55\x54\x43\x20\x28" \
-"\x64\x6f\x6e\x27\x74\x20\x63\x6f\x6e\x76\x65\x72\x74\x20\x74\x6f" \
-"\x20\x6c\x6f\x63\x61\x6c\x20\x74\x69\x6d\x65\x29\x0a\x09\x2d\x52" \
-"\x2c\x2d\x2d\x72\x66\x63\x2d\x32\x38\x32\x32\x09\x4f\x75\x74\x70" \
-"\x75\x74\x20\x52\x46\x43\x2d\x32\x38\x32\x32\x20\x63\x6f\x6d\x70" \
-"\x6c\x69\x61\x6e\x74\x20\x64\x61\x74\x65\x20\x73\x74\x72\x69\x6e" \
-"\x67\x0a\x09\x2d\x49\x5b\x53\x50\x45\x43\x5d\x09\x4f\x75\x74\x70" \
-"\x75\x74\x20\x49\x53\x4f\x2d\x38\x36\x30\x31\x20\x63\x6f\x6d\x70" \
-"\x6c\x69\x61\x6e\x74\x20\x64\x61\x74\x65\x20\x73\x74\x72\x69\x6e" \
-"\x67\x0a\x09\x09\x09\x53\x50\x45\x43\x3d\x27\x64\x61\x74\x65\x27" \
-"\x20\x28\x64\x65\x66\x61\x75\x6c\x74\x29\x20\x66\x6f\x72\x20\x64" \
-"\x61\x74\x65\x20\x6f\x6e\x6c\x79\x2c\x0a\x09\x09\x09\x27\x68\x6f" \
-"\x75\x72\x73\x27\x2c\x20\x27\x6d\x69\x6e\x75\x74\x65\x73\x27\x2c" \
-"\x20\x6f\x72\x20\x27\x73\x65\x63\x6f\x6e\x64\x73\x27\x20\x66\x6f" \
-"\x72\x20\x64\x61\x74\x65\x20\x61\x6e\x64\x0a\x09\x09\x09\x74\x69" \
-"\x6d\x65\x20\x74\x6f\x20\x74\x68\x65\x20\x69\x6e\x64\x69\x63\x61" \
-"\x74\x65\x64\x20\x70\x72\x65\x63\x69\x73\x69\x6f\x6e\x0a\x09\x2d" \
-"\x72\x2c\x2d\x2d\x72\x65\x66\x65\x72\x65\x6e\x63\x65\x20\x46\x49" \
-"\x4c\x45\x09\x44\x69\x73\x70\x6c\x61\x79\x20\x6c\x61\x73\x74\x20" \
-"\x6d\x6f\x64\x69\x66\x69\x63\x61\x74\x69\x6f\x6e\x20\x74\x69\x6d" \
-"\x65\x20\x6f\x66\x20\x46\x49\x4c\x45\x0a\x09\x2d\x64\x2c\x2d\x2d" \
-"\x64\x61\x74\x65\x20\x54\x49\x4d\x45\x09\x44\x69\x73\x70\x6c\x61" \
-"\x79\x20\x54\x49\x4d\x45\x2c\x20\x6e\x6f\x74\x20\x27\x6e\x6f\x77" \
-"\x27\x0a\x09\x2d\x44\x20\x46\x4d\x54\x09\x09\x55\x73\x65\x20\x46" \
-"\x4d\x54\x20\x66\x6f\x72\x20\x2d\x64\x20\x54\x49\x4d\x45\x20\x63" \
-"\x6f\x6e\x76\x65\x72\x73\x69\x6f\x6e\x0a\x0a\x52\x65\x63\x6f\x67" \
-"\x6e\x69\x7a\x65\x64\x20\x54\x49\x4d\x45\x20\x66\x6f\x72\x6d\x61" \
-"\x74\x73\x3a\x0a\x09\x68\x68\x3a\x6d\x6d\x5b\x3a\x73\x73\x5d\x0a" \
-"\x09\x5b\x59\x59\x59\x59\x2e\x5d\x4d\x4d\x2e\x44\x44\x2d\x68\x68" \
-"\x3a\x6d\x6d\x5b\x3a\x73\x73\x5d\x0a\x09\x59\x59\x59\x59\x2d\x4d" \
-"\x4d\x2d\x44\x44\x20\x68\x68\x3a\x6d\x6d\x5b\x3a\x73\x73\x5d\x0a" \
-"\x09\x5b\x5b\x5b\x5b\x5b\x59\x59\x5d\x59\x59\x5d\x4d\x4d\x5d\x44" \
-"\x44\x5d\x68\x68\x5d\x6d\x6d\x5b\x2e\x73\x73\x5d\x0a\x09\x27\x64" \
-"\x61\x74\x65\x20\x54\x49\x4d\x45\x27\x20\x66\x6f\x72\x6d\x20\x61" \
-"\x63\x63\x65\x70\x74\x73\x20\x4d\x4d\x44\x44\x68\x68\x6d\x6d\x5b" \
-"\x5b\x59\x59\x5d\x59\x59\x5d\x5b\x2e\x73\x73\x5d\x20\x69\x6e\x73" \
-"\x74\x65\x61\x64\x00\x45\x58\x50\x52\x45\x53\x53\x49\x4f\x4e\x2e" \
-"\x2e\x2e\x0a\x0a\x54\x69\x6e\x79\x20\x52\x50\x4e\x20\x63\x61\x6c" \
-"\x63\x75\x6c\x61\x74\x6f\x72\x2e\x20\x4f\x70\x65\x72\x61\x74\x69" \
-"\x6f\x6e\x73\x3a\x0a\x2b\x2c\x20\x61\x64\x64\x2c\x20\x2d\x2c\x20" \
-"\x73\x75\x62\x2c\x20\x2a\x2c\x20\x6d\x75\x6c\x2c\x20\x2f\x2c\x20" \
-"\x64\x69\x76\x2c\x20\x25\x2c\x20\x6d\x6f\x64\x2c\x20\x61\x6e\x64" \
-"\x2c\x20\x6f\x72\x2c\x20\x6e\x6f\x74\x2c\x20\x78\x6f\x72\x2c\x0a" \
-"\x70\x20\x2d\x20\x70\x72\x69\x6e\x74\x20\x74\x6f\x70\x20\x6f\x66" \
-"\x20\x74\x68\x65\x20\x73\x74\x61\x63\x6b\x20\x28\x77\x69\x74\x68" \
-"\x6f\x75\x74\x20\x70\x6f\x70\x70\x69\x6e\x67\x29\x2c\x0a\x66\x20" \
-"\x2d\x20\x70\x72\x69\x6e\x74\x20\x65\x6e\x74\x69\x72\x65\x20\x73" \
-"\x74\x61\x63\x6b\x2c\x0a\x6f\x20\x2d\x20\x70\x6f\x70\x20\x74\x68" \
-"\x65\x20\x76\x61\x6c\x75\x65\x20\x61\x6e\x64\x20\x73\x65\x74\x20" \
-"\x6f\x75\x74\x70\x75\x74\x20\x72\x61\x64\x69\x78\x20\x28\x6d\x75" \
-"\x73\x74\x20\x62\x65\x20\x31\x30\x2c\x20\x31\x36\x2c\x20\x38\x20" \
-"\x6f\x72\x20\x32\x29\x2e\x0a\x45\x78\x61\x6d\x70\x6c\x65\x73\x3a" \
-"\x20\x27\x64\x63\x20\x32\x20\x32\x20\x61\x64\x64\x20\x70\x27\x20" \
-"\x2d\x3e\x20\x34\x2c\x20\x27\x64\x63\x20\x38\x20\x38\x20\x6d\x75" \
-"\x6c\x20\x32\x20\x32\x20\x2b\x20\x2f\x20\x70\x27\x20\x2d\x3e\x20" \
-"\x31\x36\x00\x5b\x69\x66\x3d\x46\x49\x4c\x45\x5d\x20\x5b\x6f\x66" \
-"\x3d\x46\x49\x4c\x45\x5d\x20\x5b\x69\x62\x73\x3d\x4e\x5d\x20\x5b" \
-"\x6f\x62\x73\x3d\x4e\x5d\x20\x5b\x62\x73\x3d\x4e\x5d\x20\x5b\x63" \
-"\x6f\x75\x6e\x74\x3d\x4e\x5d\x20\x5b\x73\x6b\x69\x70\x3d\x4e\x5d" \
-"\x0a\x09\x5b\x73\x65\x65\x6b\x3d\x4e\x5d\x20\x5b\x63\x6f\x6e\x76" \
-"\x3d\x6e\x6f\x74\x72\x75\x6e\x63\x7c\x6e\x6f\x65\x72\x72\x6f\x72" \
-"\x7c\x73\x79\x6e\x63\x7c\x66\x73\x79\x6e\x63\x5d\x0a\x0a\x43\x6f" \
-"\x70\x79\x20\x61\x20\x66\x69\x6c\x65\x20\x77\x69\x74\x68\x20\x63" \
-"\x6f\x6e\x76\x65\x72\x74\x69\x6e\x67\x20\x61\x6e\x64\x20\x66\x6f" \
-"\x72\x6d\x61\x74\x74\x69\x6e\x67\x0a\x0a\x09\x69\x66\x3d\x46\x49" \
-"\x4c\x45\x09\x09\x52\x65\x61\x64\x20\x66\x72\x6f\x6d\x20\x46\x49" \
-"\x4c\x45\x20\x69\x6e\x73\x74\x65\x61\x64\x20\x6f\x66\x20\x73\x74" \
-"\x64\x69\x6e\x0a\x09\x6f\x66\x3d\x46\x49\x4c\x45\x09\x09\x57\x72" \
-"\x69\x74\x65\x20\x74\x6f\x20\x46\x49\x4c\x45\x20\x69\x6e\x73\x74" \
-"\x65\x61\x64\x20\x6f\x66\x20\x73\x74\x64\x6f\x75\x74\x0a\x09\x62" \
-"\x73\x3d\x4e\x09\x09\x52\x65\x61\x64\x20\x61\x6e\x64\x20\x77\x72" \
-"\x69\x74\x65\x20\x4e\x20\x62\x79\x74\x65\x73\x20\x61\x74\x20\x61" \
-"\x20\x74\x69\x6d\x65\x0a\x09\x69\x62\x73\x3d\x4e\x09\x09\x52\x65" \
-"\x61\x64\x20\x4e\x20\x62\x79\x74\x65\x73\x20\x61\x74\x20\x61\x20" \
-"\x74\x69\x6d\x65\x0a\x09\x6f\x62\x73\x3d\x4e\x09\x09\x57\x72\x69" \
-"\x74\x65\x20\x4e\x20\x62\x79\x74\x65\x73\x20\x61\x74\x20\x61\x20" \
-"\x74\x69\x6d\x65\x0a\x09\x63\x6f\x75\x6e\x74\x3d\x4e\x09\x09\x43" \
-"\x6f\x70\x79\x20\x6f\x6e\x6c\x79\x20\x4e\x20\x69\x6e\x70\x75\x74" \
-"\x20\x62\x6c\x6f\x63\x6b\x73\x0a\x09\x73\x6b\x69\x70\x3d\x4e\x09" \
-"\x09\x53\x6b\x69\x70\x20\x4e\x20\x69\x6e\x70\x75\x74\x20\x62\x6c" \
-"\x6f\x63\x6b\x73\x0a\x09\x73\x65\x65\x6b\x3d\x4e\x09\x09\x53\x6b" \
-"\x69\x70\x20\x4e\x20\x6f\x75\x74\x70\x75\x74\x20\x62\x6c\x6f\x63" \
-"\x6b\x73\x0a\x09\x63\x6f\x6e\x76\x3d\x6e\x6f\x74\x72\x75\x6e\x63" \
-"\x09\x44\x6f\x6e\x27\x74\x20\x74\x72\x75\x6e\x63\x61\x74\x65\x20" \
-"\x6f\x75\x74\x70\x75\x74\x20\x66\x69\x6c\x65\x0a\x09\x63\x6f\x6e" \
-"\x76\x3d\x6e\x6f\x65\x72\x72\x6f\x72\x09\x43\x6f\x6e\x74\x69\x6e" \
-"\x75\x65\x20\x61\x66\x74\x65\x72\x20\x72\x65\x61\x64\x20\x65\x72" \
-"\x72\x6f\x72\x73\x0a\x09\x63\x6f\x6e\x76\x3d\x73\x79\x6e\x63\x09" \
-"\x50\x61\x64\x20\x62\x6c\x6f\x63\x6b\x73\x20\x77\x69\x74\x68\x20" \
-"\x7a\x65\x72\x6f\x73\x0a\x09\x63\x6f\x6e\x76\x3d\x66\x73\x79\x6e" \
-"\x63\x09\x50\x68\x79\x73\x69\x63\x61\x6c\x6c\x79\x20\x77\x72\x69" \
-"\x74\x65\x20\x64\x61\x74\x61\x20\x6f\x75\x74\x20\x62\x65\x66\x6f" \
-"\x72\x65\x20\x66\x69\x6e\x69\x73\x68\x69\x6e\x67\x0a\x0a\x4e\x75" \
-"\x6d\x62\x65\x72\x73\x20\x6d\x61\x79\x20\x62\x65\x20\x73\x75\x66" \
-"\x66\x69\x78\x65\x64\x20\x62\x79\x20\x63\x20\x28\x78\x31\x29\x2c" \
-"\x20\x77\x20\x28\x78\x32\x29\x2c\x20\x62\x20\x28\x78\x35\x31\x32" \
-"\x29\x2c\x20\x6b\x44\x20\x28\x78\x31\x30\x30\x30\x29\x2c\x20\x6b" \
-"\x20\x28\x78\x31\x30\x32\x34\x29\x2c\x0a\x4d\x44\x20\x28\x78\x31" \
-"\x30\x30\x30\x30\x30\x30\x29\x2c\x20\x4d\x20\x28\x78\x31\x30\x34" \
-"\x38\x35\x37\x36\x29\x2c\x20\x47\x44\x20\x28\x78\x31\x30\x30\x30" \
-"\x30\x30\x30\x30\x30\x30\x29\x20\x6f\x72\x20\x47\x20\x28\x78\x31" \
-"\x30\x37\x33\x37\x34\x31\x38\x32\x34\x29\x00\x5b\x2d\x71\x66\x77" \
-"\x72\x73\x76\x5d\x20\x4d\x4f\x44\x55\x4c\x45\x20\x5b\x73\x79\x6d" \
-"\x62\x6f\x6c\x3d\x76\x61\x6c\x75\x65\x5d\x2e\x2e\x2e\x0a\x0a\x09" \
-"\x2d\x72\x09\x52\x65\x6d\x6f\x76\x65\x20\x4d\x4f\x44\x55\x4c\x45" \
-"\x20\x28\x73\x74\x61\x63\x6b\x73\x29\x20\x6f\x72\x20\x64\x6f\x20" \
-"\x61\x75\x74\x6f\x63\x6c\x65\x61\x6e\x0a\x09\x2d\x71\x09\x51\x75" \
-"\x69\x65\x74\x0a\x09\x2d\x76\x09\x56\x65\x72\x62\x6f\x73\x65\x0a" \
-"\x09\x2d\x66\x09\x46\x6f\x72\x63\x65\x0a\x09\x2d\x77\x09\x57\x61" \
-"\x69\x74\x20\x66\x6f\x72\x20\x75\x6e\x6c\x6f\x61\x64\x0a\x09\x2d" \
-"\x73\x09\x52\x65\x70\x6f\x72\x74\x20\x76\x69\x61\x20\x73\x79\x73" \
-"\x6c\x6f\x67\x20\x69\x6e\x73\x74\x65\x61\x64\x20\x6f\x66\x20\x73" \
-"\x74\x64\x65\x72\x72\x00\x41\x44\x44\x52\x45\x53\x53\x20\x5b\x57" \
-"\x49\x44\x54\x48\x20\x5b\x56\x41\x4c\x55\x45\x5d\x5d\x0a\x0a\x52" \
-"\x65\x61\x64\x2f\x77\x72\x69\x74\x65\x20\x66\x72\x6f\x6d\x20\x70" \
-"\x68\x79\x73\x69\x63\x61\x6c\x20\x61\x64\x64\x72\x65\x73\x73\x0a" \
-"\x0a\x09\x41\x44\x44\x52\x45\x53\x53\x09\x41\x64\x64\x72\x65\x73" \
-"\x73\x20\x74\x6f\x20\x61\x63\x74\x20\x75\x70\x6f\x6e\x0a\x09\x57" \
-"\x49\x44\x54\x48\x09\x57\x69\x64\x74\x68\x20\x28\x38\x2f\x31\x36" \
-"\x2f\x2e\x2e\x2e\x29\x0a\x09\x56\x41\x4c\x55\x45\x09\x44\x61\x74" \
-"\x61\x20\x74\x6f\x20\x62\x65\x20\x77\x72\x69\x74\x74\x65\x6e\x00" \
-"\x5b\x2d\x50\x6b\x6d\x68\x61\x69\x5d\x20\x5b\x2d\x42\x20\x53\x49" \
-"\x5a\x45\x5d\x20\x5b\x46\x49\x4c\x45\x53\x59\x53\x54\x45\x4d\x5d" \
-"\x2e\x2e\x2e\x0a\x0a\x50\x72\x69\x6e\x74\x20\x66\x69\x6c\x65\x73" \
-"\x79\x73\x74\x65\x6d\x20\x75\x73\x61\x67\x65\x20\x73\x74\x61\x74" \
-"\x69\x73\x74\x69\x63\x73\x0a\x0a\x09\x2d\x50\x09\x50\x4f\x53\x49" \
-"\x58\x20\x6f\x75\x74\x70\x75\x74\x20\x66\x6f\x72\x6d\x61\x74\x0a" \
-"\x09\x2d\x6b\x09\x31\x30\x32\x34\x2d\x62\x79\x74\x65\x20\x62\x6c" \
-"\x6f\x63\x6b\x73\x20\x28\x64\x65\x66\x61\x75\x6c\x74\x29\x0a\x09" \
-"\x2d\x6d\x09\x31\x4d\x2d\x62\x79\x74\x65\x20\x62\x6c\x6f\x63\x6b" \
-"\x73\x0a\x09\x2d\x68\x09\x48\x75\x6d\x61\x6e\x20\x72\x65\x61\x64" \
-"\x61\x62\x6c\x65\x20\x28\x65\x2e\x67\x2e\x20\x31\x4b\x20\x32\x34" \
-"\x33\x4d\x20\x32\x47\x29\x0a\x09\x2d\x61\x09\x53\x68\x6f\x77\x20" \
-"\x61\x6c\x6c\x20\x66\x69\x6c\x65\x73\x79\x73\x74\x65\x6d\x73\x0a" \
-"\x09\x2d\x69\x09\x49\x6e\x6f\x64\x65\x73\x0a\x09\x2d\x42\x20\x53" \
-"\x49\x5a\x45\x09\x42\x6c\x6f\x63\x6b\x73\x69\x7a\x65\x00\x5b\x2d" \
-"\x61\x62\x42\x64\x69\x4e\x71\x72\x54\x73\x74\x77\x5d\x20\x5b\x2d" \
-"\x4c\x20\x4c\x41\x42\x45\x4c\x5d\x20\x5b\x2d\x53\x20\x46\x49\x4c" \
-"\x45\x5d\x20\x5b\x2d\x55\x20\x4c\x49\x4e\x45\x53\x5d\x20\x46\x49" \
-"\x4c\x45\x31\x20\x46\x49\x4c\x45\x32\x0a\x0a\x43\x6f\x6d\x70\x61" \
-"\x72\x65\x20\x66\x69\x6c\x65\x73\x20\x6c\x69\x6e\x65\x20\x62\x79" \
-"\x20\x6c\x69\x6e\x65\x20\x61\x6e\x64\x20\x6f\x75\x74\x70\x75\x74" \
-"\x20\x74\x68\x65\x20\x64\x69\x66\x66\x65\x72\x65\x6e\x63\x65\x73" \
-"\x20\x62\x65\x74\x77\x65\x65\x6e\x20\x74\x68\x65\x6d\x2e\x0a\x54" \
-"\x68\x69\x73\x20\x69\x6d\x70\x6c\x65\x6d\x65\x6e\x74\x61\x74\x69" \
-"\x6f\x6e\x20\x73\x75\x70\x70\x6f\x72\x74\x73\x20\x75\x6e\x69\x66" \
-"\x69\x65\x64\x20\x64\x69\x66\x66\x73\x20\x6f\x6e\x6c\x79\x2e\x0a" \
-"\x0a\x09\x2d\x61\x09\x54\x72\x65\x61\x74\x20\x61\x6c\x6c\x20\x66" \
-"\x69\x6c\x65\x73\x20\x61\x73\x20\x74\x65\x78\x74\x0a\x09\x2d\x62" \
-"\x09\x49\x67\x6e\x6f\x72\x65\x20\x63\x68\x61\x6e\x67\x65\x73\x20" \
-"\x69\x6e\x20\x74\x68\x65\x20\x61\x6d\x6f\x75\x6e\x74\x20\x6f\x66" \
-"\x20\x77\x68\x69\x74\x65\x73\x70\x61\x63\x65\x0a\x09\x2d\x42\x09" \
-"\x49\x67\x6e\x6f\x72\x65\x20\x63\x68\x61\x6e\x67\x65\x73\x20\x77" \
-"\x68\x6f\x73\x65\x20\x6c\x69\x6e\x65\x73\x20\x61\x72\x65\x20\x61" \
-"\x6c\x6c\x20\x62\x6c\x61\x6e\x6b\x0a\x09\x2d\x64\x09\x54\x72\x79" \
-"\x20\x68\x61\x72\x64\x20\x74\x6f\x20\x66\x69\x6e\x64\x20\x61\x20" \
-"\x73\x6d\x61\x6c\x6c\x65\x72\x20\x73\x65\x74\x20\x6f\x66\x20\x63" \
-"\x68\x61\x6e\x67\x65\x73\x0a\x09\x2d\x69\x09\x49\x67\x6e\x6f\x72" \
-"\x65\x20\x63\x61\x73\x65\x20\x64\x69\x66\x66\x65\x72\x65\x6e\x63" \
-"\x65\x73\x0a\x09\x2d\x4c\x09\x55\x73\x65\x20\x4c\x41\x42\x45\x4c" \
-"\x20\x69\x6e\x73\x74\x65\x61\x64\x20\x6f\x66\x20\x74\x68\x65\x20" \
-"\x66\x69\x6c\x65\x6e\x61\x6d\x65\x20\x69\x6e\x20\x74\x68\x65\x20" \
-"\x75\x6e\x69\x66\x69\x65\x64\x20\x68\x65\x61\x64\x65\x72\x0a\x09" \
-"\x2d\x4e\x09\x54\x72\x65\x61\x74\x20\x61\x62\x73\x65\x6e\x74\x20" \
-"\x66\x69\x6c\x65\x73\x20\x61\x73\x20\x65\x6d\x70\x74\x79\x0a\x09" \
-"\x2d\x71\x09\x4f\x75\x74\x70\x75\x74\x20\x6f\x6e\x6c\x79\x20\x77" \
-"\x68\x65\x74\x68\x65\x72\x20\x66\x69\x6c\x65\x73\x20\x64\x69\x66" \
-"\x66\x65\x72\x0a\x09\x2d\x72\x09\x52\x65\x63\x75\x72\x73\x65\x0a" \
-"\x09\x2d\x53\x09\x53\x74\x61\x72\x74\x20\x77\x69\x74\x68\x20\x46" \
-"\x49\x4c\x45\x20\x77\x68\x65\x6e\x20\x63\x6f\x6d\x70\x61\x72\x69" \
-"\x6e\x67\x20\x64\x69\x72\x65\x63\x74\x6f\x72\x69\x65\x73\x0a\x09" \
-"\x2d\x54\x09\x4d\x61\x6b\x65\x20\x74\x61\x62\x73\x20\x6c\x69\x6e" \
-"\x65\x20\x75\x70\x20\x62\x79\x20\x70\x72\x65\x66\x69\x78\x69\x6e" \
-"\x67\x20\x61\x20\x74\x61\x62\x20\x77\x68\x65\x6e\x20\x6e\x65\x63" \
-"\x65\x73\x73\x61\x72\x79\x0a\x09\x2d\x73\x09\x52\x65\x70\x6f\x72" \
-"\x74\x20\x77\x68\x65\x6e\x20\x74\x77\x6f\x20\x66\x69\x6c\x65\x73" \
-"\x20\x61\x72\x65\x20\x74\x68\x65\x20\x73\x61\x6d\x65\x0a\x09\x2d" \
-"\x74\x09\x45\x78\x70\x61\x6e\x64\x20\x74\x61\x62\x73\x20\x74\x6f" \
-"\x20\x73\x70\x61\x63\x65\x73\x20\x69\x6e\x20\x6f\x75\x74\x70\x75" \
-"\x74\x0a\x09\x2d\x55\x09\x4f\x75\x74\x70\x75\x74\x20\x4c\x49\x4e" \
-"\x45\x53\x20\x6c\x69\x6e\x65\x73\x20\x6f\x66\x20\x63\x6f\x6e\x74" \
-"\x65\x78\x74\x0a\x09\x2d\x77\x09\x49\x67\x6e\x6f\x72\x65\x20\x61" \
-"\x6c\x6c\x20\x77\x68\x69\x74\x65\x73\x70\x61\x63\x65\x00\x46\x49" \
-"\x4c\x45\x4e\x41\x4d\x45\x0a\x0a\x53\x74\x72\x69\x70\x20\x6e\x6f" \
-"\x6e\x2d\x64\x69\x72\x65\x63\x74\x6f\x72\x79\x20\x73\x75\x66\x66" \
-"\x69\x78\x20\x66\x72\x6f\x6d\x20\x46\x49\x4c\x45\x4e\x41\x4d\x45" \
-"\x00\x5b\x2d\x63\x5d\x20\x5b\x2d\x6e\x20\x4c\x45\x56\x45\x4c\x5d" \
-"\x20\x5b\x2d\x72\x5d\x20\x5b\x2d\x73\x20\x53\x49\x5a\x45\x5d\x20" \
-"\x5b\x2d\x43\x5d\x0a\x0a\x50\x72\x69\x6e\x74\x20\x6f\x72\x20\x63" \
-"\x6f\x6e\x74\x72\x6f\x6c\x20\x74\x68\x65\x20\x6b\x65\x72\x6e\x65" \
-"\x6c\x20\x72\x69\x6e\x67\x20\x62\x75\x66\x66\x65\x72\x0a\x0a\x09" \
-"\x2d\x63\x09\x09\x43\x6c\x65\x61\x72\x20\x72\x69\x6e\x67\x20\x62" \
-"\x75\x66\x66\x65\x72\x20\x61\x66\x74\x65\x72\x20\x70\x72\x69\x6e" \
-"\x74\x69\x6e\x67\x0a\x09\x2d\x6e\x20\x4c\x45\x56\x45\x4c\x09\x53" \
-"\x65\x74\x20\x63\x6f\x6e\x73\x6f\x6c\x65\x20\x6c\x6f\x67\x67\x69" \
-"\x6e\x67\x20\x6c\x65\x76\x65\x6c\x0a\x09\x2d\x72\x09\x09\x53\x68" \
-"\x6f\x77\x20\x6c\x65\x76\x65\x6c\x20\x70\x72\x65\x66\x69\x78\x0a" \
-"\x09\x2d\x73\x20\x53\x49\x5a\x45\x09\x09\x42\x75\x66\x66\x65\x72" \
-"\x20\x73\x69\x7a\x65\x0a\x09\x2d\x43\x09\x09\x43\x6f\x6c\x6f\x72" \
-"\x65\x64\x20\x6f\x75\x74\x70\x75\x74\x00\x5b\x2d\x75\x64\x5d\x20" \
-"\x5b\x46\x49\x4c\x45\x5d\x0a\x0a\x43\x6f\x6e\x76\x65\x72\x74\x20" \
-"\x46\x49\x4c\x45\x20\x69\x6e\x2d\x70\x6c\x61\x63\x65\x20\x66\x72" \
-"\x6f\x6d\x20\x44\x4f\x53\x20\x74\x6f\x20\x55\x6e\x69\x78\x20\x66" \
-"\x6f\x72\x6d\x61\x74\x2e\x0a\x57\x68\x65\x6e\x20\x6e\x6f\x20\x66" \
-"\x69\x6c\x65\x20\x69\x73\x20\x67\x69\x76\x65\x6e\x2c\x20\x75\x73" \
-"\x65\x20\x73\x74\x64\x69\x6e\x2f\x73\x74\x64\x6f\x75\x74\x2e\x0a" \
-"\x0a\x09\x2d\x75\x09\x64\x6f\x73\x32\x75\x6e\x69\x78\x0a\x09\x2d" \
-"\x64\x09\x75\x6e\x69\x78\x32\x64\x6f\x73\x00\x5b\x2d\x61\x48\x4c" \
-"\x64\x63\x6c\x73\x78\x68\x6d\x6b\x5d\x20\x5b\x46\x49\x4c\x45\x5d" \
-"\x2e\x2e\x2e\x0a\x0a\x53\x75\x6d\x6d\x61\x72\x69\x7a\x65\x20\x64" \
-"\x69\x73\x6b\x20\x73\x70\x61\x63\x65\x20\x75\x73\x65\x64\x20\x66" \
-"\x6f\x72\x20\x65\x61\x63\x68\x20\x46\x49\x4c\x45\x20\x61\x6e\x64" \
-"\x2f\x6f\x72\x20\x64\x69\x72\x65\x63\x74\x6f\x72\x79\x0a\x0a\x09" \
-"\x2d\x61\x09\x53\x68\x6f\x77\x20\x66\x69\x6c\x65\x20\x73\x69\x7a" \
-"\x65\x73\x20\x74\x6f\x6f\x0a\x09\x2d\x4c\x09\x46\x6f\x6c\x6c\x6f" \
-"\x77\x20\x61\x6c\x6c\x20\x73\x79\x6d\x6c\x69\x6e\x6b\x73\x0a\x09" \
-"\x2d\x48\x09\x46\x6f\x6c\x6c\x6f\x77\x20\x73\x79\x6d\x6c\x69\x6e" \
-"\x6b\x73\x20\x6f\x6e\x20\x63\x6f\x6d\x6d\x61\x6e\x64\x20\x6c\x69" \
-"\x6e\x65\x0a\x09\x2d\x64\x20\x4e\x09\x4c\x69\x6d\x69\x74\x20\x6f" \
-"\x75\x74\x70\x75\x74\x20\x74\x6f\x20\x64\x69\x72\x65\x63\x74\x6f" \
-"\x72\x69\x65\x73\x20\x28\x61\x6e\x64\x20\x66\x69\x6c\x65\x73\x20" \
-"\x77\x69\x74\x68\x20\x2d\x61\x29\x20\x6f\x66\x20\x64\x65\x70\x74" \
-"\x68\x20\x3c\x20\x4e\x0a\x09\x2d\x63\x09\x53\x68\x6f\x77\x20\x67" \
-"\x72\x61\x6e\x64\x20\x74\x6f\x74\x61\x6c\x0a\x09\x2d\x6c\x09\x43" \
-"\x6f\x75\x6e\x74\x20\x73\x69\x7a\x65\x73\x20\x6d\x61\x6e\x79\x20" \
-"\x74\x69\x6d\x65\x73\x20\x69\x66\x20\x68\x61\x72\x64\x20\x6c\x69" \
-"\x6e\x6b\x65\x64\x0a\x09\x2d\x73\x09\x44\x69\x73\x70\x6c\x61\x79" \
-"\x20\x6f\x6e\x6c\x79\x20\x61\x20\x74\x6f\x74\x61\x6c\x20\x66\x6f" \
-"\x72\x20\x65\x61\x63\x68\x20\x61\x72\x67\x75\x6d\x65\x6e\x74\x0a" \
-"\x09\x2d\x78\x09\x53\x6b\x69\x70\x20\x64\x69\x72\x65\x63\x74\x6f" \
-"\x72\x69\x65\x73\x20\x6f\x6e\x20\x64\x69\x66\x66\x65\x72\x65\x6e" \
-"\x74\x20\x66\x69\x6c\x65\x73\x79\x73\x74\x65\x6d\x73\x0a\x09\x2d" \
-"\x68\x09\x53\x69\x7a\x65\x73\x20\x69\x6e\x20\x68\x75\x6d\x61\x6e" \
-"\x20\x72\x65\x61\x64\x61\x62\x6c\x65\x20\x66\x6f\x72\x6d\x61\x74" \
-"\x20\x28\x65\x2e\x67\x2e\x2c\x20\x31\x4b\x20\x32\x34\x33\x4d\x20" \
-"\x32\x47\x29\x0a\x09\x2d\x6d\x09\x53\x69\x7a\x65\x73\x20\x69\x6e" \
-"\x20\x6d\x65\x67\x61\x62\x79\x74\x65\x73\x0a\x09\x2d\x6b\x09\x53" \
-"\x69\x7a\x65\x73\x20\x69\x6e\x20\x6b\x69\x6c\x6f\x62\x79\x74\x65" \
-"\x73\x20\x28\x64\x65\x66\x61\x75\x6c\x74\x29\x00\x5b\x2d\x6e\x65" \
-"\x45\x5d\x20\x5b\x41\x52\x47\x5d\x2e\x2e\x2e\x0a\x0a\x50\x72\x69" \
-"\x6e\x74\x20\x74\x68\x65\x20\x73\x70\x65\x63\x69\x66\x69\x65\x64" \
-"\x20\x41\x52\x47\x73\x20\x74\x6f\x20\x73\x74\x64\x6f\x75\x74\x0a" \
-"\x0a\x09\x2d\x6e\x09\x53\x75\x70\x70\x72\x65\x73\x73\x20\x74\x72" \
-"\x61\x69\x6c\x69\x6e\x67\x20\x6e\x65\x77\x6c\x69\x6e\x65\x0a\x09" \
-"\x2d\x65\x09\x49\x6e\x74\x65\x72\x70\x72\x65\x74\x20\x62\x61\x63" \
-"\x6b\x73\x6c\x61\x73\x68\x20\x65\x73\x63\x61\x70\x65\x73\x20\x28" \
-"\x69\x2e\x65\x2e\x2c\x20\x5c\x74\x3d\x74\x61\x62\x29\x0a\x09\x2d" \
-"\x45\x09\x44\x6f\x6e\x27\x74\x20\x69\x6e\x74\x65\x72\x70\x72\x65" \
-"\x74\x20\x62\x61\x63\x6b\x73\x6c\x61\x73\x68\x20\x65\x73\x63\x61" \
-"\x70\x65\x73\x20\x28\x64\x65\x66\x61\x75\x6c\x74\x29\x00\x08\x00" \
-"\x5b\x2d\x69\x75\x5d\x20\x5b\x2d\x5d\x20\x5b\x6e\x61\x6d\x65\x3d" \
-"\x76\x61\x6c\x75\x65\x5d\x2e\x2e\x2e\x20\x5b\x50\x52\x4f\x47\x20" \
-"\x41\x52\x47\x53\x5d\x0a\x0a\x50\x72\x69\x6e\x74\x20\x74\x68\x65" \
-"\x20\x63\x75\x72\x72\x65\x6e\x74\x20\x65\x6e\x76\x69\x72\x6f\x6e" \
-"\x6d\x65\x6e\x74\x20\x6f\x72\x20\x72\x75\x6e\x20\x50\x52\x4f\x47" \
-"\x20\x61\x66\x74\x65\x72\x20\x73\x65\x74\x74\x69\x6e\x67\x20\x75" \
-"\x70\x0a\x74\x68\x65\x20\x73\x70\x65\x63\x69\x66\x69\x65\x64\x20" \
-"\x65\x6e\x76\x69\x72\x6f\x6e\x6d\x65\x6e\x74\x0a\x0a\x09\x2d\x2c" \
-"\x20\x2d\x69\x09\x53\x74\x61\x72\x74\x20\x77\x69\x74\x68\x20\x61" \
-"\x6e\x20\x65\x6d\x70\x74\x79\x20\x65\x6e\x76\x69\x72\x6f\x6e\x6d" \
-"\x65\x6e\x74\x0a\x09\x2d\x75\x09\x52\x65\x6d\x6f\x76\x65\x20\x76" \
-"\x61\x72\x69\x61\x62\x6c\x65\x20\x66\x72\x6f\x6d\x20\x74\x68\x65" \
-"\x20\x65\x6e\x76\x69\x72\x6f\x6e\x6d\x65\x6e\x74\x00\x5b\x2d\x69" \
-"\x5d\x20\x5b\x2d\x74\x20\x4e\x5d\x20\x5b\x46\x49\x4c\x45\x5d\x2e" \
-"\x2e\x2e\x0a\x0a\x43\x6f\x6e\x76\x65\x72\x74\x20\x74\x61\x62\x73" \
-"\x20\x74\x6f\x20\x73\x70\x61\x63\x65\x73\x2c\x20\x77\x72\x69\x74" \
-"\x69\x6e\x67\x20\x74\x6f\x20\x73\x74\x64\x6f\x75\x74\x0a\x0a\x09" \
-"\x2d\x69\x09\x44\x6f\x6e\x27\x74\x20\x63\x6f\x6e\x76\x65\x72\x74" \
-"\x20\x74\x61\x62\x73\x20\x61\x66\x74\x65\x72\x20\x6e\x6f\x6e\x20" \
-"\x62\x6c\x61\x6e\x6b\x73\x0a\x09\x2d\x74\x09\x54\x61\x62\x73\x74" \
-"\x6f\x70\x73\x20\x65\x76\x65\x72\x79\x20\x4e\x20\x63\x68\x61\x72" \
-"\x73\x00\x45\x58\x50\x52\x45\x53\x53\x49\x4f\x4e\x0a\x0a\x50\x72" \
-"\x69\x6e\x74\x20\x74\x68\x65\x20\x76\x61\x6c\x75\x65\x20\x6f\x66" \
-"\x20\x45\x58\x50\x52\x45\x53\x53\x49\x4f\x4e\x20\x74\x6f\x20\x73" \
-"\x74\x64\x6f\x75\x74\x0a\x0a\x45\x58\x50\x52\x45\x53\x53\x49\x4f" \
-"\x4e\x20\x6d\x61\x79\x20\x62\x65\x3a\x0a\x09\x41\x52\x47\x31\x20" \
-"\x7c\x20\x41\x52\x47\x32\x09\x41\x52\x47\x31\x20\x69\x66\x20\x69" \
-"\x74\x20\x69\x73\x20\x6e\x65\x69\x74\x68\x65\x72\x20\x6e\x75\x6c" \
-"\x6c\x20\x6e\x6f\x72\x20\x30\x2c\x20\x6f\x74\x68\x65\x72\x77\x69" \
-"\x73\x65\x20\x41\x52\x47\x32\x0a\x09\x41\x52\x47\x31\x20\x26\x20" \
-"\x41\x52\x47\x32\x09\x41\x52\x47\x31\x20\x69\x66\x20\x6e\x65\x69" \
-"\x74\x68\x65\x72\x20\x61\x72\x67\x75\x6d\x65\x6e\x74\x20\x69\x73" \
-"\x20\x6e\x75\x6c\x6c\x20\x6f\x72\x20\x30\x2c\x20\x6f\x74\x68\x65" \
-"\x72\x77\x69\x73\x65\x20\x30\x0a\x09\x41\x52\x47\x31\x20\x3c\x20" \
-"\x41\x52\x47\x32\x09\x31\x20\x69\x66\x20\x41\x52\x47\x31\x20\x69" \
-"\x73\x20\x6c\x65\x73\x73\x20\x74\x68\x61\x6e\x20\x41\x52\x47\x32" \
-"\x2c\x20\x65\x6c\x73\x65\x20\x30\x2e\x20\x53\x69\x6d\x69\x6c\x61" \
-"\x72\x6c\x79\x3a\x0a\x09\x41\x52\x47\x31\x20\x3c\x3d\x20\x41\x52" \
-"\x47\x32\x0a\x09\x41\x52\x47\x31\x20\x3d\x20\x41\x52\x47\x32\x0a" \
-"\x09\x41\x52\x47\x31\x20\x21\x3d\x20\x41\x52\x47\x32\x0a\x09\x41" \
-"\x52\x47\x31\x20\x3e\x3d\x20\x41\x52\x47\x32\x0a\x09\x41\x52\x47" \
-"\x31\x20\x3e\x20\x41\x52\x47\x32\x0a\x09\x41\x52\x47\x31\x20\x2b" \
-"\x20\x41\x52\x47\x32\x09\x53\x75\x6d\x20\x6f\x66\x20\x41\x52\x47" \
-"\x31\x20\x61\x6e\x64\x20\x41\x52\x47\x32\x2e\x20\x53\x69\x6d\x69" \
-"\x6c\x61\x72\x6c\x79\x3a\x0a\x09\x41\x52\x47\x31\x20\x2d\x20\x41" \
-"\x52\x47\x32\x0a\x09\x41\x52\x47\x31\x20\x2a\x20\x41\x52\x47\x32" \
-"\x0a\x09\x41\x52\x47\x31\x20\x2f\x20\x41\x52\x47\x32\x0a\x09\x41" \
-"\x52\x47\x31\x20\x25\x20\x41\x52\x47\x32\x0a\x09\x53\x54\x52\x49" \
-"\x4e\x47\x20\x3a\x20\x52\x45\x47\x45\x58\x50\x09\x09\x41\x6e\x63" \
-"\x68\x6f\x72\x65\x64\x20\x70\x61\x74\x74\x65\x72\x6e\x20\x6d\x61" \
-"\x74\x63\x68\x20\x6f\x66\x20\x52\x45\x47\x45\x58\x50\x20\x69\x6e" \
-"\x20\x53\x54\x52\x49\x4e\x47\x0a\x09\x6d\x61\x74\x63\x68\x20\x53" \
-"\x54\x52\x49\x4e\x47\x20\x52\x45\x47\x45\x58\x50\x09\x53\x61\x6d" \
-"\x65\x20\x61\x73\x20\x53\x54\x52\x49\x4e\x47\x20\x3a\x20\x52\x45" \
-"\x47\x45\x58\x50\x0a\x09\x73\x75\x62\x73\x74\x72\x20\x53\x54\x52" \
-"\x49\x4e\x47\x20\x50\x4f\x53\x20\x4c\x45\x4e\x47\x54\x48\x20\x53" \
-"\x75\x62\x73\x74\x72\x69\x6e\x67\x20\x6f\x66\x20\x53\x54\x52\x49" \
-"\x4e\x47\x2c\x20\x50\x4f\x53\x20\x63\x6f\x75\x6e\x74\x65\x64\x20" \
-"\x66\x72\x6f\x6d\x20\x31\x0a\x09\x69\x6e\x64\x65\x78\x20\x53\x54" \
-"\x52\x49\x4e\x47\x20\x43\x48\x41\x52\x53\x09\x49\x6e\x64\x65\x78" \
-"\x20\x69\x6e\x20\x53\x54\x52\x49\x4e\x47\x20\x77\x68\x65\x72\x65" \
-"\x20\x61\x6e\x79\x20\x43\x48\x41\x52\x53\x20\x69\x73\x20\x66\x6f" \
-"\x75\x6e\x64\x2c\x20\x6f\x72\x20\x30\x0a\x09\x6c\x65\x6e\x67\x74" \
-"\x68\x20\x53\x54\x52\x49\x4e\x47\x09\x09\x4c\x65\x6e\x67\x74\x68" \
-"\x20\x6f\x66\x20\x53\x54\x52\x49\x4e\x47\x0a\x09\x71\x75\x6f\x74" \
-"\x65\x20\x54\x4f\x4b\x45\x4e\x09\x09\x49\x6e\x74\x65\x72\x70\x72" \
-"\x65\x74\x20\x54\x4f\x4b\x45\x4e\x20\x61\x73\x20\x61\x20\x73\x74" \
-"\x72\x69\x6e\x67\x2c\x20\x65\x76\x65\x6e\x20\x69\x66\x0a\x09\x09" \
-"\x09\x09\x69\x74\x20\x69\x73\x20\x61\x20\x6b\x65\x79\x77\x6f\x72" \
-"\x64\x20\x6c\x69\x6b\x65\x20\x27\x6d\x61\x74\x63\x68\x27\x20\x6f" \
-"\x72\x20\x61\x6e\x0a\x09\x09\x09\x09\x6f\x70\x65\x72\x61\x74\x6f" \
-"\x72\x20\x6c\x69\x6b\x65\x20\x27\x2f\x27\x0a\x09\x28\x45\x58\x50" \
-"\x52\x45\x53\x53\x49\x4f\x4e\x29\x09\x09\x56\x61\x6c\x75\x65\x20" \
-"\x6f\x66\x20\x45\x58\x50\x52\x45\x53\x53\x49\x4f\x4e\x0a\x0a\x42" \
-"\x65\x77\x61\x72\x65\x20\x74\x68\x61\x74\x20\x6d\x61\x6e\x79\x20" \
-"\x6f\x70\x65\x72\x61\x74\x6f\x72\x73\x20\x6e\x65\x65\x64\x20\x74" \
-"\x6f\x20\x62\x65\x20\x65\x73\x63\x61\x70\x65\x64\x20\x6f\x72\x20" \
-"\x71\x75\x6f\x74\x65\x64\x20\x66\x6f\x72\x20\x73\x68\x65\x6c\x6c" \
-"\x73\x2e\x0a\x43\x6f\x6d\x70\x61\x72\x69\x73\x6f\x6e\x73\x20\x61" \
-"\x72\x65\x20\x61\x72\x69\x74\x68\x6d\x65\x74\x69\x63\x20\x69\x66" \
-"\x20\x62\x6f\x74\x68\x20\x41\x52\x47\x73\x20\x61\x72\x65\x20\x6e" \
-"\x75\x6d\x62\x65\x72\x73\x2c\x20\x65\x6c\x73\x65\x0a\x6c\x65\x78" \
-"\x69\x63\x6f\x67\x72\x61\x70\x68\x69\x63\x61\x6c\x2e\x20\x50\x61" \
-"\x74\x74\x65\x72\x6e\x20\x6d\x61\x74\x63\x68\x65\x73\x20\x72\x65" \
-"\x74\x75\x72\x6e\x20\x74\x68\x65\x20\x73\x74\x72\x69\x6e\x67\x20" \
-"\x6d\x61\x74\x63\x68\x65\x64\x20\x62\x65\x74\x77\x65\x65\x6e\x0a" \
-"\x5c\x28\x20\x61\x6e\x64\x20\x5c\x29\x20\x6f\x72\x20\x6e\x75\x6c" \
-"\x6c\x3b\x20\x69\x66\x20\x5c\x28\x20\x61\x6e\x64\x20\x5c\x29\x20" \
-"\x61\x72\x65\x20\x6e\x6f\x74\x20\x75\x73\x65\x64\x2c\x20\x74\x68" \
-"\x65\x79\x20\x72\x65\x74\x75\x72\x6e\x20\x74\x68\x65\x20\x6e\x75" \
-"\x6d\x62\x65\x72\x0a\x6f\x66\x20\x63\x68\x61\x72\x61\x63\x74\x65" \
-"\x72\x73\x20\x6d\x61\x74\x63\x68\x65\x64\x20\x6f\x72\x20\x30\x2e" \
-"\x00\x0a\x0a\x52\x65\x74\x75\x72\x6e\x20\x61\x6e\x20\x65\x78\x69" \
-"\x74\x20\x63\x6f\x64\x65\x20\x6f\x66\x20\x46\x41\x4c\x53\x45\x20" \
-"\x28\x31\x29\x00\x5b\x4f\x50\x54\x49\x4f\x4e\x53\x5d\x20\x5b\x4d" \
-"\x4f\x44\x45\x5d\x0a\x0a\x53\x68\x6f\x77\x20\x61\x6e\x64\x20\x6d" \
-"\x6f\x64\x69\x66\x79\x20\x66\x72\x61\x6d\x65\x20\x62\x75\x66\x66" \
-"\x65\x72\x20\x73\x65\x74\x74\x69\x6e\x67\x73\x00\x5b\x2d\x75\x6c" \
-"\x5d\x20\x5b\x2d\x43\x20\x43\x59\x4c\x49\x4e\x44\x45\x52\x53\x5d" \
-"\x20\x5b\x2d\x48\x20\x48\x45\x41\x44\x53\x5d\x20\x5b\x2d\x53\x20" \
-"\x53\x45\x43\x54\x4f\x52\x53\x5d\x20\x5b\x2d\x62\x20\x53\x53\x5a" \
-"\x5d\x20\x44\x49\x53\x4b\x0a\x0a\x43\x68\x61\x6e\x67\x65\x20\x70" \
-"\x61\x72\x74\x69\x74\x69\x6f\x6e\x20\x74\x61\x62\x6c\x65\x0a\x0a" \
-"\x09\x2d\x75\x09\x09\x53\x74\x61\x72\x74\x20\x61\x6e\x64\x20\x45" \
-"\x6e\x64\x20\x61\x72\x65\x20\x69\x6e\x20\x73\x65\x63\x74\x6f\x72" \
-"\x73\x20\x28\x69\x6e\x73\x74\x65\x61\x64\x20\x6f\x66\x20\x63\x79" \
-"\x6c\x69\x6e\x64\x65\x72\x73\x29\x0a\x09\x2d\x6c\x09\x09\x53\x68" \
-"\x6f\x77\x20\x70\x61\x72\x74\x69\x74\x69\x6f\x6e\x20\x74\x61\x62" \
-"\x6c\x65\x20\x66\x6f\x72\x20\x65\x61\x63\x68\x20\x44\x49\x53\x4b" \
-"\x2c\x20\x74\x68\x65\x6e\x20\x65\x78\x69\x74\x0a\x09\x2d\x62\x20" \
-"\x32\x30\x34\x38\x09\x09\x28\x66\x6f\x72\x20\x63\x65\x72\x74\x61" \
-"\x69\x6e\x20\x4d\x4f\x20\x64\x69\x73\x6b\x73\x29\x20\x75\x73\x65" \
-"\x20\x32\x30\x34\x38\x2d\x62\x79\x74\x65\x20\x73\x65\x63\x74\x6f" \
-"\x72\x73\x0a\x09\x2d\x43\x20\x43\x59\x4c\x49\x4e\x44\x45\x52\x53" \
-"\x09\x53\x65\x74\x20\x6e\x75\x6d\x62\x65\x72\x20\x6f\x66\x20\x63" \
-"\x79\x6c\x69\x6e\x64\x65\x72\x73\x2f\x68\x65\x61\x64\x73\x2f\x73" \
-"\x65\x63\x74\x6f\x72\x73\x0a\x09\x2d\x48\x20\x48\x45\x41\x44\x53" \
-"\x0a\x09\x2d\x53\x20\x53\x45\x43\x54\x4f\x52\x53\x00\x08\x00\x5b" \
-"\x50\x41\x54\x48\x5d\x2e\x2e\x2e\x20\x5b\x4f\x50\x54\x49\x4f\x4e" \
-"\x53\x5d\x20\x5b\x41\x43\x54\x49\x4f\x4e\x53\x5d\x0a\x0a\x53\x65" \
-"\x61\x72\x63\x68\x20\x66\x6f\x72\x20\x66\x69\x6c\x65\x73\x20\x61" \
-"\x6e\x64\x20\x70\x65\x72\x66\x6f\x72\x6d\x20\x61\x63\x74\x69\x6f" \
-"\x6e\x73\x20\x6f\x6e\x20\x74\x68\x65\x6d\x2e\x0a\x46\x69\x72\x73" \
-"\x74\x20\x66\x61\x69\x6c\x65\x64\x20\x61\x63\x74\x69\x6f\x6e\x20" \
-"\x73\x74\x6f\x70\x73\x20\x70\x72\x6f\x63\x65\x73\x73\x69\x6e\x67" \
-"\x20\x6f\x66\x20\x63\x75\x72\x72\x65\x6e\x74\x20\x66\x69\x6c\x65" \
-"\x2e\x0a\x44\x65\x66\x61\x75\x6c\x74\x73\x3a\x20\x50\x41\x54\x48" \
-"\x20\x69\x73\x20\x63\x75\x72\x72\x65\x6e\x74\x20\x64\x69\x72\x65" \
-"\x63\x74\x6f\x72\x79\x2c\x20\x61\x63\x74\x69\x6f\x6e\x20\x69\x73" \
-"\x20\x27\x2d\x70\x72\x69\x6e\x74\x27\x0a\x0a\x09\x2d\x66\x6f\x6c" \
-"\x6c\x6f\x77\x09\x09\x46\x6f\x6c\x6c\x6f\x77\x20\x73\x79\x6d\x6c" \
-"\x69\x6e\x6b\x73\x0a\x09\x2d\x78\x64\x65\x76\x09\x09\x44\x6f\x6e" \
-"\x27\x74\x20\x64\x65\x73\x63\x65\x6e\x64\x20\x64\x69\x72\x65\x63" \
-"\x74\x6f\x72\x69\x65\x73\x20\x6f\x6e\x20\x6f\x74\x68\x65\x72\x20" \
-"\x66\x69\x6c\x65\x73\x79\x73\x74\x65\x6d\x73\x0a\x09\x2d\x6d\x61" \
-"\x78\x64\x65\x70\x74\x68\x20\x4e\x09\x44\x65\x73\x63\x65\x6e\x64" \
-"\x20\x61\x74\x20\x6d\x6f\x73\x74\x20\x4e\x20\x6c\x65\x76\x65\x6c" \
-"\x73\x2e\x20\x2d\x6d\x61\x78\x64\x65\x70\x74\x68\x20\x30\x20\x61" \
-"\x70\x70\x6c\x69\x65\x73\x0a\x09\x09\x09\x61\x63\x74\x69\x6f\x6e" \
-"\x73\x20\x74\x6f\x20\x63\x6f\x6d\x6d\x61\x6e\x64\x20\x6c\x69\x6e" \
-"\x65\x20\x61\x72\x67\x75\x6d\x65\x6e\x74\x73\x20\x6f\x6e\x6c\x79" \
-"\x0a\x09\x2d\x6d\x69\x6e\x64\x65\x70\x74\x68\x20\x4e\x09\x44\x6f" \
-"\x6e\x27\x74\x20\x61\x63\x74\x20\x6f\x6e\x20\x66\x69\x72\x73\x74" \
-"\x20\x4e\x20\x6c\x65\x76\x65\x6c\x73\x0a\x09\x2d\x64\x65\x70\x74" \
-"\x68\x09\x09\x41\x63\x74\x20\x6f\x6e\x20\x64\x69\x72\x65\x63\x74" \
-"\x6f\x72\x79\x20\x2a\x61\x66\x74\x65\x72\x2a\x20\x74\x72\x61\x76" \
-"\x65\x72\x73\x69\x6e\x67\x20\x69\x74\x0a\x0a\x41\x63\x74\x69\x6f" \
-"\x6e\x73\x3a\x0a\x09\x28\x20\x41\x43\x54\x49\x4f\x4e\x53\x20\x29" \
-"\x09\x47\x72\x6f\x75\x70\x20\x61\x63\x74\x69\x6f\x6e\x73\x20\x66" \
-"\x6f\x72\x20\x2d\x6f\x20\x2f\x20\x2d\x61\x0a\x09\x21\x20\x41\x43" \
-"\x54\x09\x09\x49\x6e\x76\x65\x72\x74\x20\x41\x43\x54\x27\x73\x20" \
-"\x73\x75\x63\x63\x65\x73\x73\x2f\x66\x61\x69\x6c\x75\x72\x65\x0a" \
-"\x09\x41\x43\x54\x31\x20\x5b\x2d\x61\x5d\x20\x41\x43\x54\x32\x09" \
-"\x49\x66\x20\x41\x43\x54\x31\x20\x66\x61\x69\x6c\x73\x2c\x20\x73" \
-"\x74\x6f\x70\x2c\x20\x65\x6c\x73\x65\x20\x64\x6f\x20\x41\x43\x54" \
-"\x32\x0a\x09\x41\x43\x54\x31\x20\x2d\x6f\x20\x41\x43\x54\x32\x09" \
-"\x49\x66\x20\x41\x43\x54\x31\x20\x73\x75\x63\x63\x65\x65\x64\x73" \
-"\x2c\x20\x73\x74\x6f\x70\x2c\x20\x65\x6c\x73\x65\x20\x64\x6f\x20" \
-"\x41\x43\x54\x32\x0a\x09\x09\x09\x4e\x6f\x74\x65\x3a\x20\x2d\x61" \
-"\x20\x68\x61\x73\x20\x68\x69\x67\x68\x65\x72\x20\x70\x72\x69\x6f" \
-"\x72\x69\x74\x79\x20\x74\x68\x61\x6e\x20\x2d\x6f\x0a\x09\x2d\x6e" \
-"\x61\x6d\x65\x20\x50\x41\x54\x54\x45\x52\x4e\x09\x4d\x61\x74\x63" \
-"\x68\x20\x66\x69\x6c\x65\x20\x6e\x61\x6d\x65\x20\x28\x77\x2f\x6f" \
-"\x20\x64\x69\x72\x65\x63\x74\x6f\x72\x79\x20\x6e\x61\x6d\x65\x29" \
-"\x20\x74\x6f\x20\x50\x41\x54\x54\x45\x52\x4e\x0a\x09\x2d\x69\x6e" \
-"\x61\x6d\x65\x20\x50\x41\x54\x54\x45\x52\x4e\x09\x43\x61\x73\x65" \
-"\x20\x69\x6e\x73\x65\x6e\x73\x69\x74\x69\x76\x65\x20\x2d\x6e\x61" \
-"\x6d\x65\x0a\x09\x2d\x70\x61\x74\x68\x20\x50\x41\x54\x54\x45\x52" \
-"\x4e\x09\x4d\x61\x74\x63\x68\x20\x70\x61\x74\x68\x20\x74\x6f\x20" \
-"\x50\x41\x54\x54\x45\x52\x4e\x0a\x09\x2d\x69\x70\x61\x74\x68\x20" \
-"\x50\x41\x54\x54\x45\x52\x4e\x09\x43\x61\x73\x65\x20\x69\x6e\x73" \
-"\x65\x6e\x73\x69\x74\x69\x76\x65\x20\x2d\x70\x61\x74\x68\x0a\x09" \
-"\x2d\x72\x65\x67\x65\x78\x20\x50\x41\x54\x54\x45\x52\x4e\x09\x4d" \
-"\x61\x74\x63\x68\x20\x70\x61\x74\x68\x20\x74\x6f\x20\x72\x65\x67" \
-"\x65\x78\x20\x50\x41\x54\x54\x45\x52\x4e\x0a\x09\x2d\x74\x79\x70" \
-"\x65\x20\x58\x09\x09\x46\x69\x6c\x65\x20\x74\x79\x70\x65\x20\x69" \
-"\x73\x20\x58\x20\x28\x6f\x6e\x65\x20\x6f\x66\x3a\x20\x66\x2c\x64" \
-"\x2c\x6c\x2c\x62\x2c\x63\x2c\x2e\x2e\x2e\x29\x0a\x09\x2d\x70\x65" \
-"\x72\x6d\x20\x4d\x41\x53\x4b\x09\x41\x74\x20\x6c\x65\x61\x73\x74" \
-"\x20\x6f\x6e\x65\x20\x6d\x61\x73\x6b\x20\x62\x69\x74\x20\x28\x2b" \
-"\x4d\x41\x53\x4b\x29\x2c\x20\x61\x6c\x6c\x20\x62\x69\x74\x73\x20" \
-"\x28\x2d\x4d\x41\x53\x4b\x29\x2c\x0a\x09\x09\x09\x6f\x72\x20\x65" \
-"\x78\x61\x63\x74\x6c\x79\x20\x4d\x41\x53\x4b\x20\x62\x69\x74\x73" \
-"\x20\x61\x72\x65\x20\x73\x65\x74\x20\x69\x6e\x20\x66\x69\x6c\x65" \
-"\x27\x73\x20\x6d\x6f\x64\x65\x0a\x09\x2d\x6d\x74\x69\x6d\x65\x20" \
-"\x44\x41\x59\x53\x09\x6d\x74\x69\x6d\x65\x20\x69\x73\x20\x67\x72" \
-"\x65\x61\x74\x65\x72\x20\x74\x68\x61\x6e\x20\x28\x2b\x4e\x29\x2c" \
-"\x20\x6c\x65\x73\x73\x20\x74\x68\x61\x6e\x20\x28\x2d\x4e\x29\x2c" \
-"\x0a\x09\x09\x09\x6f\x72\x20\x65\x78\x61\x63\x74\x6c\x79\x20\x4e" \
-"\x20\x64\x61\x79\x73\x20\x69\x6e\x20\x74\x68\x65\x20\x70\x61\x73" \
-"\x74\x0a\x09\x2d\x6d\x6d\x69\x6e\x20\x4d\x49\x4e\x53\x09\x6d\x74" \
-"\x69\x6d\x65\x20\x69\x73\x20\x67\x72\x65\x61\x74\x65\x72\x20\x74" \
-"\x68\x61\x6e\x20\x28\x2b\x4e\x29\x2c\x20\x6c\x65\x73\x73\x20\x74" \
-"\x68\x61\x6e\x20\x28\x2d\x4e\x29\x2c\x0a\x09\x09\x09\x6f\x72\x20" \
-"\x65\x78\x61\x63\x74\x6c\x79\x20\x4e\x20\x6d\x69\x6e\x75\x74\x65" \
-"\x73\x20\x69\x6e\x20\x74\x68\x65\x20\x70\x61\x73\x74\x0a\x09\x2d" \
-"\x6e\x65\x77\x65\x72\x20\x46\x49\x4c\x45\x09\x6d\x74\x69\x6d\x65" \
-"\x20\x69\x73\x20\x6d\x6f\x72\x65\x20\x72\x65\x63\x65\x6e\x74\x20" \
-"\x74\x68\x61\x6e\x20\x46\x49\x4c\x45\x27\x73\x0a\x09\x2d\x75\x73" \
-"\x65\x72\x20\x4e\x41\x4d\x45\x2f\x49\x44\x09\x46\x69\x6c\x65\x20" \
-"\x69\x73\x20\x6f\x77\x6e\x65\x64\x20\x62\x79\x20\x67\x69\x76\x65" \
-"\x6e\x20\x75\x73\x65\x72\x0a\x09\x2d\x67\x72\x6f\x75\x70\x20\x4e" \
-"\x41\x4d\x45\x2f\x49\x44\x09\x46\x69\x6c\x65\x20\x69\x73\x20\x6f" \
-"\x77\x6e\x65\x64\x20\x62\x79\x20\x67\x69\x76\x65\x6e\x20\x67\x72" \
-"\x6f\x75\x70\x0a\x09\x2d\x73\x69\x7a\x65\x20\x4e\x5b\x62\x63\x6b" \
-"\x5d\x09\x46\x69\x6c\x65\x20\x73\x69\x7a\x65\x20\x69\x73\x20\x4e" \
-"\x20\x28\x63\x3a\x62\x79\x74\x65\x73\x2c\x6b\x3a\x6b\x62\x79\x74" \
-"\x65\x73\x2c\x62\x3a\x35\x31\x32\x20\x62\x79\x74\x65\x73\x28\x64" \
-"\x65\x66\x2e\x29\x29\x0a\x09\x09\x09\x2b\x2f\x2d\x4e\x3a\x20\x66" \
-"\x69\x6c\x65\x20\x73\x69\x7a\x65\x20\x69\x73\x20\x62\x69\x67\x67" \
-"\x65\x72\x2f\x73\x6d\x61\x6c\x6c\x65\x72\x20\x74\x68\x61\x6e\x20" \
-"\x4e\x0a\x09\x2d\x70\x72\x75\x6e\x65\x09\x09\x49\x66\x20\x63\x75" \
-"\x72\x72\x65\x6e\x74\x20\x66\x69\x6c\x65\x20\x69\x73\x20\x64\x69" \
-"\x72\x65\x63\x74\x6f\x72\x79\x2c\x20\x64\x6f\x6e\x27\x74\x20\x64" \
-"\x65\x73\x63\x65\x6e\x64\x20\x69\x6e\x74\x6f\x20\x69\x74\x0a\x49" \
-"\x66\x20\x6e\x6f\x6e\x65\x20\x6f\x66\x20\x74\x68\x65\x20\x66\x6f" \
-"\x6c\x6c\x6f\x77\x69\x6e\x67\x20\x61\x63\x74\x69\x6f\x6e\x73\x20" \
-"\x69\x73\x20\x73\x70\x65\x63\x69\x66\x69\x65\x64\x2c\x20\x2d\x70" \
-"\x72\x69\x6e\x74\x20\x69\x73\x20\x61\x73\x73\x75\x6d\x65\x64\x0a" \
-"\x09\x2d\x70\x72\x69\x6e\x74\x09\x09\x50\x72\x69\x6e\x74\x20\x66" \
-"\x69\x6c\x65\x20\x6e\x61\x6d\x65\x0a\x09\x2d\x70\x72\x69\x6e\x74" \
-"\x30\x09\x09\x50\x72\x69\x6e\x74\x20\x66\x69\x6c\x65\x20\x6e\x61" \
-"\x6d\x65\x2c\x20\x4e\x55\x4c\x20\x74\x65\x72\x6d\x69\x6e\x61\x74" \
-"\x65\x64\x0a\x09\x2d\x65\x78\x65\x63\x20\x43\x4d\x44\x20\x41\x52" \
-"\x47\x20\x3b\x09\x52\x75\x6e\x20\x43\x4d\x44\x20\x77\x69\x74\x68" \
-"\x20\x61\x6c\x6c\x20\x69\x6e\x73\x74\x61\x6e\x63\x65\x73\x20\x6f" \
-"\x66\x20\x7b\x7d\x20\x72\x65\x70\x6c\x61\x63\x65\x64\x20\x62\x79" \
-"\x0a\x09\x09\x09\x66\x69\x6c\x65\x20\x6e\x61\x6d\x65\x2e\x20\x46" \
-"\x61\x69\x6c\x73\x20\x69\x66\x20\x43\x4d\x44\x20\x65\x78\x69\x74" \
-"\x73\x20\x77\x69\x74\x68\x20\x6e\x6f\x6e\x7a\x65\x72\x6f\x00\x5b" \
-"\x2d\x62\x73\x5d\x20\x5b\x2d\x77\x20\x57\x49\x44\x54\x48\x5d\x20" \
-"\x5b\x46\x49\x4c\x45\x5d\x2e\x2e\x2e\x0a\x0a\x57\x72\x61\x70\x20" \
-"\x69\x6e\x70\x75\x74\x20\x6c\x69\x6e\x65\x73\x20\x69\x6e\x20\x65" \
-"\x61\x63\x68\x20\x46\x49\x4c\x45\x20\x28\x6f\x72\x20\x73\x74\x64" \
-"\x69\x6e\x29\x2c\x20\x77\x72\x69\x74\x69\x6e\x67\x20\x74\x6f\x20" \
-"\x73\x74\x64\x6f\x75\x74\x0a\x0a\x09\x2d\x62\x09\x43\x6f\x75\x6e" \
-"\x74\x20\x62\x79\x74\x65\x73\x20\x72\x61\x74\x68\x65\x72\x20\x74" \
-"\x68\x61\x6e\x20\x63\x6f\x6c\x75\x6d\x6e\x73\x0a\x09\x2d\x73\x09" \
-"\x42\x72\x65\x61\x6b\x20\x61\x74\x20\x73\x70\x61\x63\x65\x73\x0a" \
-"\x09\x2d\x77\x09\x55\x73\x65\x20\x57\x49\x44\x54\x48\x20\x63\x6f" \
-"\x6c\x75\x6d\x6e\x73\x20\x69\x6e\x73\x74\x65\x61\x64\x20\x6f\x66" \
-"\x20\x38\x30\x00\x0a\x0a\x44\x69\x73\x70\x6c\x61\x79\x20\x74\x68" \
-"\x65\x20\x61\x6d\x6f\x75\x6e\x74\x20\x6f\x66\x20\x66\x72\x65\x65" \
-"\x20\x61\x6e\x64\x20\x75\x73\x65\x64\x20\x73\x79\x73\x74\x65\x6d" \
-"\x20\x6d\x65\x6d\x6f\x72\x79\x00\x44\x45\x56\x49\x43\x45\x0a\x0a" \
-"\x46\x72\x65\x65\x20\x61\x6c\x6c\x20\x6d\x65\x6d\x6f\x72\x79\x20" \
-"\x75\x73\x65\x64\x20\x62\x79\x20\x74\x68\x65\x20\x73\x70\x65\x63" \
-"\x69\x66\x69\x65\x64\x20\x72\x61\x6d\x64\x69\x73\x6b\x00\x5b\x4f" \
-"\x70\x74\x69\x6f\x6e\x73\x5d\x20\x3c\x6d\x6f\x75\x6e\x74\x70\x6f" \
-"\x69\x6e\x74\x3e\x0a\x0a\x4f\x70\x74\x69\x6f\x6e\x73\x3a\x0a\x09" \
-"\x2d\x6f\x2c\x2d\x2d\x6f\x66\x66\x73\x65\x74\x3d\x6f\x66\x66\x73" \
-"\x65\x74\x09\x6f\x66\x66\x73\x65\x74\x20\x69\x6e\x20\x62\x79\x74" \
-"\x65\x73\x20\x74\x6f\x20\x64\x69\x73\x63\x61\x72\x64\x20\x66\x72" \
-"\x6f\x6d\x0a\x09\x2d\x6c\x2c\x2d\x2d\x6c\x65\x6e\x67\x74\x68\x3d" \
-"\x6c\x65\x6e\x67\x74\x68\x09\x6c\x65\x6e\x67\x74\x68\x20\x6f\x66" \
-"\x20\x62\x79\x74\x65\x73\x20\x74\x6f\x20\x64\x69\x73\x63\x61\x72" \
-"\x64\x20\x66\x72\x6f\x6d\x20\x74\x68\x65\x20\x6f\x66\x66\x73\x65" \
-"\x74\x0a\x09\x2d\x6d\x2c\x2d\x2d\x6d\x69\x6e\x69\x6d\x75\x6d\x3d" \
-"\x6d\x69\x6e\x69\x6d\x75\x6d\x09\x6d\x69\x6e\x69\x6d\x75\x6d\x20" \
-"\x65\x78\x74\x65\x6e\x74\x20\x6c\x65\x6e\x67\x74\x68\x20\x74\x6f" \
-"\x20\x64\x69\x73\x63\x61\x72\x64\x0a\x09\x2d\x76\x2c\x2d\x2d\x76" \
-"\x65\x72\x62\x6f\x73\x65\x09\x09\x70\x72\x69\x6e\x74\x20\x6e\x75" \
-"\x6d\x62\x65\x72\x20\x6f\x66\x20\x64\x69\x73\x63\x61\x72\x64\x65" \
-"\x64\x20\x62\x79\x74\x65\x73\x00\x5b\x4f\x50\x54\x49\x4f\x4e\x53" \
-"\x5d\x20\x46\x49\x4c\x45\x20\x6f\x72\x20\x50\x4f\x52\x54\x2f\x50" \
-"\x52\x4f\x54\x4f\x0a\x0a\x46\x69\x6e\x64\x20\x70\x72\x6f\x63\x65" \
-"\x73\x73\x65\x73\x20\x77\x68\x69\x63\x68\x20\x75\x73\x65\x20\x46" \
-"\x49\x4c\x45\x73\x20\x6f\x72\x20\x50\x4f\x52\x54\x73\x0a\x0a\x09" \
-"\x2d\x6d\x09\x46\x69\x6e\x64\x20\x70\x72\x6f\x63\x65\x73\x73\x65" \
-"\x73\x20\x77\x68\x69\x63\x68\x20\x75\x73\x65\x20\x73\x61\x6d\x65" \
-"\x20\x66\x73\x20\x61\x73\x20\x46\x49\x4c\x45\x73\x0a\x09\x2d\x34" \
-"\x2c\x2d\x36\x09\x53\x65\x61\x72\x63\x68\x20\x6f\x6e\x6c\x79\x20" \
-"\x49\x50\x76\x34\x2f\x49\x50\x76\x36\x20\x73\x70\x61\x63\x65\x0a" \
-"\x09\x2d\x73\x09\x44\x6f\x6e\x27\x74\x20\x64\x69\x73\x70\x6c\x61" \
-"\x79\x20\x50\x49\x44\x73\x0a\x09\x2d\x6b\x09\x4b\x69\x6c\x6c\x20" \
-"\x66\x6f\x75\x6e\x64\x20\x70\x72\x6f\x63\x65\x73\x73\x65\x73\x0a" \
-"\x09\x2d\x53\x49\x47\x4e\x41\x4c\x09\x53\x69\x67\x6e\x61\x6c\x20" \
-"\x74\x6f\x20\x73\x65\x6e\x64\x20\x28\x64\x65\x66\x61\x75\x6c\x74" \
-"\x3a\x20\x4b\x49\x4c\x4c\x29\x00\x5b\x4f\x50\x54\x49\x4f\x4e\x53" \
-"\x5d\x20\x5b\x2d\x2d\x5d\x20\x4f\x50\x54\x53\x54\x52\x49\x4e\x47" \
-"\x20\x50\x41\x52\x41\x4d\x53\x0a\x0a\x09\x2d\x61\x2c\x2d\x2d\x61" \
-"\x6c\x74\x65\x72\x6e\x61\x74\x69\x76\x65\x09\x09\x41\x6c\x6c\x6f" \
-"\x77\x20\x6c\x6f\x6e\x67\x20\x6f\x70\x74\x69\x6f\x6e\x73\x20\x73" \
-"\x74\x61\x72\x74\x69\x6e\x67\x20\x77\x69\x74\x68\x20\x73\x69\x6e" \
-"\x67\x6c\x65\x20\x2d\x0a\x09\x2d\x6c\x2c\x2d\x2d\x6c\x6f\x6e\x67" \
-"\x6f\x70\x74\x69\x6f\x6e\x73\x3d\x4c\x4f\x50\x54\x5b\x2c\x2e\x2e" \
-"\x2e\x5d\x09\x4c\x6f\x6e\x67\x20\x6f\x70\x74\x69\x6f\x6e\x73\x20" \
-"\x74\x6f\x20\x62\x65\x20\x72\x65\x63\x6f\x67\x6e\x69\x7a\x65\x64" \
-"\x0a\x09\x2d\x6e\x2c\x2d\x2d\x6e\x61\x6d\x65\x3d\x50\x52\x4f\x47" \
-"\x4e\x41\x4d\x45\x09\x09\x54\x68\x65\x20\x6e\x61\x6d\x65\x20\x75" \
-"\x6e\x64\x65\x72\x20\x77\x68\x69\x63\x68\x20\x65\x72\x72\x6f\x72" \
-"\x73\x20\x61\x72\x65\x20\x72\x65\x70\x6f\x72\x74\x65\x64\x0a\x09" \
-"\x2d\x6f\x2c\x2d\x2d\x6f\x70\x74\x69\x6f\x6e\x73\x3d\x4f\x50\x54" \
-"\x53\x54\x52\x49\x4e\x47\x09\x09\x53\x68\x6f\x72\x74\x20\x6f\x70" \
-"\x74\x69\x6f\x6e\x73\x20\x74\x6f\x20\x62\x65\x20\x72\x65\x63\x6f" \
-"\x67\x6e\x69\x7a\x65\x64\x0a\x09\x2d\x71\x2c\x2d\x2d\x71\x75\x69" \
-"\x65\x74\x09\x09\x09\x44\x69\x73\x61\x62\x6c\x65\x20\x65\x72\x72" \
-"\x6f\x72\x20\x72\x65\x70\x6f\x72\x74\x69\x6e\x67\x20\x62\x79\x20" \
-"\x67\x65\x74\x6f\x70\x74\x28\x33\x29\x0a\x09\x2d\x51\x2c\x2d\x2d" \
-"\x71\x75\x69\x65\x74\x2d\x6f\x75\x74\x70\x75\x74\x09\x09\x4e\x6f" \
-"\x20\x6e\x6f\x72\x6d\x61\x6c\x20\x6f\x75\x74\x70\x75\x74\x0a\x09" \
-"\x2d\x73\x2c\x2d\x2d\x73\x68\x65\x6c\x6c\x3d\x53\x48\x45\x4c\x4c" \
-"\x09\x09\x53\x65\x74\x20\x73\x68\x65\x6c\x6c\x20\x71\x75\x6f\x74" \
-"\x69\x6e\x67\x20\x63\x6f\x6e\x76\x65\x6e\x74\x69\x6f\x6e\x73\x0a" \
-"\x09\x2d\x54\x2c\x2d\x2d\x74\x65\x73\x74\x09\x09\x09\x54\x65\x73" \
-"\x74\x20\x66\x6f\x72\x20\x67\x65\x74\x6f\x70\x74\x28\x31\x29\x20" \
-"\x76\x65\x72\x73\x69\x6f\x6e\x0a\x09\x2d\x75\x2c\x2d\x2d\x75\x6e" \
-"\x71\x75\x6f\x74\x65\x64\x09\x09\x09\x44\x6f\x6e\x27\x74\x20\x71" \
-"\x75\x6f\x74\x65\x20\x74\x68\x65\x20\x6f\x75\x74\x70\x75\x74\x0a" \
-"\x0a\x45\x78\x61\x6d\x70\x6c\x65\x3a\x0a\x0a\x4f\x3d\x60\x67\x65" \
-"\x74\x6f\x70\x74\x20\x2d\x6c\x20\x62\x62\x3a\x20\x2d\x2d\x20\x61" \
-"\x62\x3a\x63\x3a\x3a\x20\x22\x24\x40\x22\x60\x20\x7c\x7c\x20\x65" \
-"\x78\x69\x74\x20\x31\x0a\x65\x76\x61\x6c\x20\x73\x65\x74\x20\x2d" \
-"\x2d\x20\x22\x24\x4f\x22\x0a\x77\x68\x69\x6c\x65\x20\x74\x72\x75" \
-"\x65\x3b\x20\x64\x6f\x0a\x09\x63\x61\x73\x65\x20\x22\x24\x31\x22" \
-"\x20\x69\x6e\x0a\x09\x2d\x61\x29\x09\x65\x63\x68\x6f\x20\x41\x3b" \
-"\x20\x73\x68\x69\x66\x74\x3b\x3b\x0a\x09\x2d\x62\x7c\x2d\x2d\x62" \
-"\x62\x29\x20\x65\x63\x68\x6f\x20\x22\x42\x3a\x27\x24\x32\x27\x22" \
-"\x3b\x20\x73\x68\x69\x66\x74\x20\x32\x3b\x3b\x0a\x09\x2d\x63\x29" \
-"\x09\x63\x61\x73\x65\x20\x22\x24\x32\x22\x20\x69\x6e\x0a\x09\x09" \
-"\x22\x22\x29\x09\x65\x63\x68\x6f\x20\x43\x3b\x20\x73\x68\x69\x66" \
-"\x74\x20\x32\x3b\x3b\x0a\x09\x09\x2a\x29\x09\x65\x63\x68\x6f\x20" \
-"\x22\x43\x3a\x27\x24\x32\x27\x22\x3b\x20\x73\x68\x69\x66\x74\x20" \
-"\x32\x3b\x3b\x0a\x09\x09\x65\x73\x61\x63\x3b\x3b\x0a\x09\x2d\x2d" \
-"\x29\x09\x73\x68\x69\x66\x74\x3b\x20\x62\x72\x65\x61\x6b\x3b\x3b" \
-"\x0a\x09\x2a\x29\x09\x65\x63\x68\x6f\x20\x45\x72\x72\x6f\x72\x3b" \
-"\x20\x65\x78\x69\x74\x20\x31\x3b\x3b\x0a\x09\x65\x73\x61\x63\x0a" \
-"\x64\x6f\x6e\x65\x00\x5b\x2d\x48\x68\x6e\x6c\x4c\x6f\x71\x76\x73" \
-"\x72\x69\x77\x46\x45\x5d\x20\x5b\x2d\x6d\x20\x4e\x5d\x20\x5b\x2d" \
-"\x41\x2f\x42\x2f\x43\x20\x4e\x5d\x20\x50\x41\x54\x54\x45\x52\x4e" \
-"\x2f\x2d\x65\x20\x50\x41\x54\x54\x45\x52\x4e\x2e\x2e\x2e\x2f\x2d" \
-"\x66\x20\x46\x49\x4c\x45\x20\x5b\x46\x49\x4c\x45\x5d\x2e\x2e\x2e" \
-"\x0a\x0a\x53\x65\x61\x72\x63\x68\x20\x66\x6f\x72\x20\x50\x41\x54" \
-"\x54\x45\x52\x4e\x20\x69\x6e\x20\x46\x49\x4c\x45\x73\x20\x28\x6f" \
-"\x72\x20\x73\x74\x64\x69\x6e\x29\x0a\x0a\x09\x2d\x48\x09\x41\x64" \
-"\x64\x20\x27\x66\x69\x6c\x65\x6e\x61\x6d\x65\x3a\x27\x20\x70\x72" \
-"\x65\x66\x69\x78\x0a\x09\x2d\x68\x09\x44\x6f\x20\x6e\x6f\x74\x20" \
-"\x61\x64\x64\x20\x27\x66\x69\x6c\x65\x6e\x61\x6d\x65\x3a\x27\x20" \
-"\x70\x72\x65\x66\x69\x78\x0a\x09\x2d\x6e\x09\x41\x64\x64\x20\x27" \
-"\x6c\x69\x6e\x65\x5f\x6e\x6f\x3a\x27\x20\x70\x72\x65\x66\x69\x78" \
-"\x0a\x09\x2d\x6c\x09\x53\x68\x6f\x77\x20\x6f\x6e\x6c\x79\x20\x6e" \
-"\x61\x6d\x65\x73\x20\x6f\x66\x20\x66\x69\x6c\x65\x73\x20\x74\x68" \
-"\x61\x74\x20\x6d\x61\x74\x63\x68\x0a\x09\x2d\x4c\x09\x53\x68\x6f" \
-"\x77\x20\x6f\x6e\x6c\x79\x20\x6e\x61\x6d\x65\x73\x20\x6f\x66\x20" \
-"\x66\x69\x6c\x65\x73\x20\x74\x68\x61\x74\x20\x64\x6f\x6e\x27\x74" \
-"\x20\x6d\x61\x74\x63\x68\x0a\x09\x2d\x63\x09\x53\x68\x6f\x77\x20" \
-"\x6f\x6e\x6c\x79\x20\x63\x6f\x75\x6e\x74\x20\x6f\x66\x20\x6d\x61" \
-"\x74\x63\x68\x69\x6e\x67\x20\x6c\x69\x6e\x65\x73\x0a\x09\x2d\x6f" \
-"\x09\x53\x68\x6f\x77\x20\x6f\x6e\x6c\x79\x20\x74\x68\x65\x20\x6d" \
-"\x61\x74\x63\x68\x69\x6e\x67\x20\x70\x61\x72\x74\x20\x6f\x66\x20" \
-"\x6c\x69\x6e\x65\x0a\x09\x2d\x71\x09\x51\x75\x69\x65\x74\x2e\x20" \
-"\x52\x65\x74\x75\x72\x6e\x20\x30\x20\x69\x66\x20\x50\x41\x54\x54" \
-"\x45\x52\x4e\x20\x69\x73\x20\x66\x6f\x75\x6e\x64\x2c\x20\x31\x20" \
-"\x6f\x74\x68\x65\x72\x77\x69\x73\x65\x0a\x09\x2d\x76\x09\x53\x65" \
-"\x6c\x65\x63\x74\x20\x6e\x6f\x6e\x2d\x6d\x61\x74\x63\x68\x69\x6e" \
-"\x67\x20\x6c\x69\x6e\x65\x73\x0a\x09\x2d\x73\x09\x53\x75\x70\x70" \
-"\x72\x65\x73\x73\x20\x6f\x70\x65\x6e\x20\x61\x6e\x64\x20\x72\x65" \
-"\x61\x64\x20\x65\x72\x72\x6f\x72\x73\x0a\x09\x2d\x72\x09\x52\x65" \
-"\x63\x75\x72\x73\x65\x0a\x09\x2d\x69\x09\x49\x67\x6e\x6f\x72\x65" \
-"\x20\x63\x61\x73\x65\x0a\x09\x2d\x77\x09\x4d\x61\x74\x63\x68\x20" \
-"\x77\x68\x6f\x6c\x65\x20\x77\x6f\x72\x64\x73\x20\x6f\x6e\x6c\x79" \
-"\x0a\x09\x2d\x78\x09\x4d\x61\x74\x63\x68\x20\x77\x68\x6f\x6c\x65" \
-"\x20\x6c\x69\x6e\x65\x73\x20\x6f\x6e\x6c\x79\x0a\x09\x2d\x46\x09" \
-"\x50\x41\x54\x54\x45\x52\x4e\x20\x69\x73\x20\x61\x20\x6c\x69\x74" \
-"\x65\x72\x61\x6c\x20\x28\x6e\x6f\x74\x20\x72\x65\x67\x65\x78\x70" \
-"\x29\x0a\x09\x2d\x45\x09\x50\x41\x54\x54\x45\x52\x4e\x20\x69\x73" \
-"\x20\x61\x6e\x20\x65\x78\x74\x65\x6e\x64\x65\x64\x20\x72\x65\x67" \
-"\x65\x78\x70\x0a\x09\x2d\x6d\x20\x4e\x09\x4d\x61\x74\x63\x68\x20" \
-"\x75\x70\x20\x74\x6f\x20\x4e\x20\x74\x69\x6d\x65\x73\x20\x70\x65" \
-"\x72\x20\x66\x69\x6c\x65\x0a\x09\x2d\x41\x20\x4e\x09\x50\x72\x69" \
-"\x6e\x74\x20\x4e\x20\x6c\x69\x6e\x65\x73\x20\x6f\x66\x20\x74\x72" \
-"\x61\x69\x6c\x69\x6e\x67\x20\x63\x6f\x6e\x74\x65\x78\x74\x0a\x09" \
-"\x2d\x42\x20\x4e\x09\x50\x72\x69\x6e\x74\x20\x4e\x20\x6c\x69\x6e" \
-"\x65\x73\x20\x6f\x66\x20\x6c\x65\x61\x64\x69\x6e\x67\x20\x63\x6f" \
-"\x6e\x74\x65\x78\x74\x0a\x09\x2d\x43\x20\x4e\x09\x53\x61\x6d\x65" \
-"\x20\x61\x73\x20\x27\x2d\x41\x20\x4e\x20\x2d\x42\x20\x4e\x27\x0a" \
-"\x09\x2d\x65\x20\x50\x54\x52\x4e\x09\x50\x61\x74\x74\x65\x72\x6e" \
-"\x20\x74\x6f\x20\x6d\x61\x74\x63\x68\x0a\x09\x2d\x66\x20\x46\x49" \
-"\x4c\x45\x09\x52\x65\x61\x64\x20\x70\x61\x74\x74\x65\x72\x6e\x20" \
-"\x66\x72\x6f\x6d\x20\x66\x69\x6c\x65\x00\x5b\x55\x53\x45\x52\x5d" \
-"\x0a\x0a\x50\x72\x69\x6e\x74\x20\x74\x68\x65\x20\x67\x72\x6f\x75" \
-"\x70\x20\x6d\x65\x6d\x62\x65\x72\x73\x68\x69\x70\x73\x20\x6f\x66" \
-"\x20\x55\x53\x45\x52\x20\x6f\x72\x20\x66\x6f\x72\x20\x74\x68\x65" \
-"\x20\x63\x75\x72\x72\x65\x6e\x74\x20\x70\x72\x6f\x63\x65\x73\x73" \
-"\x00\x5b\x2d\x63\x66\x74\x5d\x20\x5b\x46\x49\x4c\x45\x5d\x2e\x2e" \
-"\x2e\x0a\x0a\x44\x65\x63\x6f\x6d\x70\x72\x65\x73\x73\x20\x46\x49" \
-"\x4c\x45\x73\x20\x28\x6f\x72\x20\x73\x74\x64\x69\x6e\x29\x0a\x0a" \
-"\x09\x2d\x63\x09\x57\x72\x69\x74\x65\x20\x74\x6f\x20\x73\x74\x64" \
-"\x6f\x75\x74\x0a\x09\x2d\x66\x09\x46\x6f\x72\x63\x65\x0a\x09\x2d" \
-"\x74\x09\x54\x65\x73\x74\x20\x66\x69\x6c\x65\x20\x69\x6e\x74\x65" \
-"\x67\x72\x69\x74\x79\x00\x5b\x2d\x63\x66\x64\x5d\x20\x5b\x46\x49" \
-"\x4c\x45\x5d\x2e\x2e\x2e\x0a\x0a\x43\x6f\x6d\x70\x72\x65\x73\x73" \
-"\x20\x46\x49\x4c\x45\x73\x20\x28\x6f\x72\x20\x73\x74\x64\x69\x6e" \
-"\x29\x0a\x0a\x09\x2d\x64\x09\x44\x65\x63\x6f\x6d\x70\x72\x65\x73" \
-"\x73\x0a\x09\x2d\x63\x09\x57\x72\x69\x74\x65\x20\x74\x6f\x20\x73" \
-"\x74\x64\x6f\x75\x74\x0a\x09\x2d\x66\x09\x46\x6f\x72\x63\x65\x00" \
-"\x5b\x4f\x50\x54\x49\x4f\x4e\x53\x5d\x20\x5b\x46\x49\x4c\x45\x5d" \
-"\x2e\x2e\x2e\x0a\x0a\x50\x72\x69\x6e\x74\x20\x66\x69\x72\x73\x74" \
-"\x20\x31\x30\x20\x6c\x69\x6e\x65\x73\x20\x6f\x66\x20\x65\x61\x63" \
-"\x68\x20\x46\x49\x4c\x45\x20\x28\x6f\x72\x20\x73\x74\x64\x69\x6e" \
-"\x29\x20\x74\x6f\x20\x73\x74\x64\x6f\x75\x74\x2e\x0a\x57\x69\x74" \
-"\x68\x20\x6d\x6f\x72\x65\x20\x74\x68\x61\x6e\x20\x6f\x6e\x65\x20" \
-"\x46\x49\x4c\x45\x2c\x20\x70\x72\x65\x63\x65\x64\x65\x20\x65\x61" \
-"\x63\x68\x20\x77\x69\x74\x68\x20\x61\x20\x66\x69\x6c\x65\x6e\x61" \
-"\x6d\x65\x20\x68\x65\x61\x64\x65\x72\x2e\x0a\x0a\x09\x2d\x6e\x20" \
-"\x4e\x5b\x6b\x62\x6d\x5d\x09\x50\x72\x69\x6e\x74\x20\x66\x69\x72" \
-"\x73\x74\x20\x4e\x20\x6c\x69\x6e\x65\x73\x0a\x0a\x4e\x20\x6d\x61" \
-"\x79\x20\x62\x65\x20\x73\x75\x66\x66\x69\x78\x65\x64\x20\x62\x79" \
-"\x20\x6b\x20\x28\x78\x31\x30\x32\x34\x29\x2c\x20\x62\x20\x28\x78" \
-"\x35\x31\x32\x29\x2c\x20\x6f\x72\x20\x6d\x20\x28\x78\x31\x30\x32" \
-"\x34\x5e\x32\x29\x2e\x00\x5b\x2d\x62\x63\x43\x64\x65\x66\x6e\x6f" \
-"\x73\x76\x78\x5d\x20\x5b\x46\x49\x4c\x45\x5d\x2e\x2e\x2e\x0a\x0a" \
-"\x44\x69\x73\x70\x6c\x61\x79\x20\x46\x49\x4c\x45\x73\x20\x28\x6f" \
-"\x72\x20\x73\x74\x64\x69\x6e\x29\x20\x69\x6e\x20\x61\x20\x75\x73" \
-"\x65\x72\x20\x73\x70\x65\x63\x69\x66\x69\x65\x64\x20\x66\x6f\x72" \
-"\x6d\x61\x74\x0a\x0a\x09\x2d\x62\x09\x09\x4f\x6e\x65\x2d\x62\x79" \
-"\x74\x65\x20\x6f\x63\x74\x61\x6c\x20\x64\x69\x73\x70\x6c\x61\x79" \
-"\x0a\x09\x2d\x63\x09\x09\x4f\x6e\x65\x2d\x62\x79\x74\x65\x20\x63" \
-"\x68\x61\x72\x61\x63\x74\x65\x72\x20\x64\x69\x73\x70\x6c\x61\x79" \
-"\x0a\x09\x2d\x43\x09\x09\x43\x61\x6e\x6f\x6e\x69\x63\x61\x6c\x20" \
-"\x68\x65\x78\x2b\x41\x53\x43\x49\x49\x2c\x20\x31\x36\x20\x62\x79" \
-"\x74\x65\x73\x20\x70\x65\x72\x20\x6c\x69\x6e\x65\x0a\x09\x2d\x64" \
-"\x09\x09\x54\x77\x6f\x2d\x62\x79\x74\x65\x20\x64\x65\x63\x69\x6d" \
-"\x61\x6c\x20\x64\x69\x73\x70\x6c\x61\x79\x0a\x09\x2d\x65\x20\x46" \
-"\x4f\x52\x4d\x41\x54\x5f\x53\x54\x52\x49\x4e\x47\x0a\x09\x2d\x66" \
-"\x20\x46\x4f\x52\x4d\x41\x54\x5f\x46\x49\x4c\x45\x0a\x09\x2d\x6e" \
-"\x20\x4c\x45\x4e\x47\x54\x48\x09\x49\x6e\x74\x65\x72\x70\x72\x65" \
-"\x74\x20\x6f\x6e\x6c\x79\x20\x4c\x45\x4e\x47\x54\x48\x20\x62\x79" \
-"\x74\x65\x73\x20\x6f\x66\x20\x69\x6e\x70\x75\x74\x0a\x09\x2d\x6f" \
-"\x09\x09\x54\x77\x6f\x2d\x62\x79\x74\x65\x20\x6f\x63\x74\x61\x6c" \
-"\x20\x64\x69\x73\x70\x6c\x61\x79\x0a\x09\x2d\x73\x20\x4f\x46\x46" \
-"\x53\x45\x54\x09\x53\x6b\x69\x70\x20\x4f\x46\x46\x53\x45\x54\x20" \
-"\x62\x79\x74\x65\x73\x0a\x09\x2d\x76\x09\x09\x44\x69\x73\x70\x6c" \
-"\x61\x79\x20\x61\x6c\x6c\x20\x69\x6e\x70\x75\x74\x20\x64\x61\x74" \
-"\x61\x0a\x09\x2d\x78\x09\x09\x54\x77\x6f\x2d\x62\x79\x74\x65\x20" \
-"\x68\x65\x78\x61\x64\x65\x63\x69\x6d\x61\x6c\x20\x64\x69\x73\x70" \
-"\x6c\x61\x79\x00\x5b\x4f\x50\x54\x49\x4f\x4e\x53\x5d\x20\x5b\x55" \
-"\x53\x45\x52\x5d\x0a\x0a\x50\x72\x69\x6e\x74\x20\x69\x6e\x66\x6f" \
-"\x72\x6d\x61\x74\x69\x6f\x6e\x20\x61\x62\x6f\x75\x74\x20\x55\x53" \
-"\x45\x52\x20\x6f\x72\x20\x74\x68\x65\x20\x63\x75\x72\x72\x65\x6e" \
-"\x74\x20\x75\x73\x65\x72\x0a\x0a\x09\x2d\x75\x09\x55\x73\x65\x72" \
-"\x20\x49\x44\x0a\x09\x2d\x67\x09\x47\x72\x6f\x75\x70\x20\x49\x44" \
-"\x0a\x09\x2d\x47\x09\x53\x75\x70\x70\x6c\x65\x6d\x65\x6e\x74\x61" \
-"\x72\x79\x20\x67\x72\x6f\x75\x70\x20\x49\x44\x73\x0a\x09\x2d\x6e" \
-"\x09\x50\x72\x69\x6e\x74\x20\x6e\x61\x6d\x65\x73\x20\x69\x6e\x73" \
-"\x74\x65\x61\x64\x20\x6f\x66\x20\x6e\x75\x6d\x62\x65\x72\x73\x0a" \
-"\x09\x2d\x72\x09\x50\x72\x69\x6e\x74\x20\x72\x65\x61\x6c\x20\x49" \
-"\x44\x20\x69\x6e\x73\x74\x65\x61\x64\x20\x6f\x66\x20\x65\x66\x66" \
-"\x65\x63\x74\x69\x76\x65\x20\x49\x44\x00\x5b\x2d\x71\x66\x77\x72" \
-"\x73\x76\x5d\x20\x4d\x4f\x44\x55\x4c\x45\x20\x5b\x73\x79\x6d\x62" \
-"\x6f\x6c\x3d\x76\x61\x6c\x75\x65\x5d\x2e\x2e\x2e\x0a\x0a\x09\x2d" \
-"\x72\x09\x52\x65\x6d\x6f\x76\x65\x20\x4d\x4f\x44\x55\x4c\x45\x20" \
-"\x28\x73\x74\x61\x63\x6b\x73\x29\x20\x6f\x72\x20\x64\x6f\x20\x61" \
-"\x75\x74\x6f\x63\x6c\x65\x61\x6e\x0a\x09\x2d\x71\x09\x51\x75\x69" \
-"\x65\x74\x0a\x09\x2d\x76\x09\x56\x65\x72\x62\x6f\x73\x65\x0a\x09" \
-"\x2d\x66\x09\x46\x6f\x72\x63\x65\x0a\x09\x2d\x77\x09\x57\x61\x69" \
-"\x74\x20\x66\x6f\x72\x20\x75\x6e\x6c\x6f\x61\x64\x0a\x09\x2d\x73" \
-"\x09\x52\x65\x70\x6f\x72\x74\x20\x76\x69\x61\x20\x73\x79\x73\x6c" \
-"\x6f\x67\x20\x69\x6e\x73\x74\x65\x61\x64\x20\x6f\x66\x20\x73\x74" \
-"\x64\x65\x72\x72\x00\x5b\x2d\x63\x64\x44\x73\x70\x5d\x20\x5b\x2d" \
-"\x6f\x20\x55\x53\x45\x52\x5d\x20\x5b\x2d\x67\x20\x47\x52\x50\x5d" \
-"\x20\x5b\x2d\x6d\x20\x4d\x4f\x44\x45\x5d\x20\x5b\x53\x4f\x55\x52" \
-"\x43\x45\x5d\x2e\x2e\x2e\x20\x44\x45\x53\x54\x0a\x0a\x43\x6f\x70" \
-"\x79\x20\x66\x69\x6c\x65\x73\x20\x61\x6e\x64\x20\x73\x65\x74\x20" \
-"\x61\x74\x74\x72\x69\x62\x75\x74\x65\x73\x0a\x0a\x09\x2d\x63\x09" \
-"\x4a\x75\x73\x74\x20\x63\x6f\x70\x79\x20\x28\x64\x65\x66\x61\x75" \
-"\x6c\x74\x29\x0a\x09\x2d\x64\x09\x43\x72\x65\x61\x74\x65\x20\x64" \
-"\x69\x72\x65\x63\x74\x6f\x72\x69\x65\x73\x0a\x09\x2d\x44\x09\x43" \
-"\x72\x65\x61\x74\x65\x20\x6c\x65\x61\x64\x69\x6e\x67\x20\x74\x61" \
-"\x72\x67\x65\x74\x20\x64\x69\x72\x65\x63\x74\x6f\x72\x69\x65\x73" \
-"\x0a\x09\x2d\x73\x09\x53\x74\x72\x69\x70\x20\x73\x79\x6d\x62\x6f" \
-"\x6c\x20\x74\x61\x62\x6c\x65\x0a\x09\x2d\x70\x09\x50\x72\x65\x73" \
-"\x65\x72\x76\x65\x20\x64\x61\x74\x65\x0a\x09\x2d\x6f\x20\x55\x53" \
-"\x45\x52\x09\x53\x65\x74\x20\x6f\x77\x6e\x65\x72\x73\x68\x69\x70" \
-"\x0a\x09\x2d\x67\x20\x47\x52\x50\x09\x53\x65\x74\x20\x67\x72\x6f" \
-"\x75\x70\x20\x6f\x77\x6e\x65\x72\x73\x68\x69\x70\x0a\x09\x2d\x6d" \
-"\x20\x4d\x4f\x44\x45\x09\x53\x65\x74\x20\x70\x65\x72\x6d\x69\x73" \
-"\x73\x69\x6f\x6e\x73\x00\x5b\x2d\x6c\x5d\x20\x5b\x2d\x53\x49\x47" \
-"\x5d\x20\x50\x49\x44\x2e\x2e\x2e\x0a\x0a\x53\x65\x6e\x64\x20\x61" \
-"\x20\x73\x69\x67\x6e\x61\x6c\x20\x28\x64\x65\x66\x61\x75\x6c\x74" \
-"\x3a\x20\x54\x45\x52\x4d\x29\x20\x74\x6f\x20\x67\x69\x76\x65\x6e" \
-"\x20\x50\x49\x44\x73\x0a\x0a\x09\x2d\x6c\x09\x4c\x69\x73\x74\x20" \
-"\x61\x6c\x6c\x20\x73\x69\x67\x6e\x61\x6c\x20\x6e\x61\x6d\x65\x73" \
-"\x20\x61\x6e\x64\x20\x6e\x75\x6d\x62\x65\x72\x73\x00\x5b\x2d\x6c" \
-"\x5d\x20\x5b\x2d\x71\x5d\x20\x5b\x2d\x53\x49\x47\x5d\x20\x50\x52" \
-"\x4f\x43\x45\x53\x53\x5f\x4e\x41\x4d\x45\x2e\x2e\x2e\x0a\x0a\x53" \
-"\x65\x6e\x64\x20\x61\x20\x73\x69\x67\x6e\x61\x6c\x20\x28\x64\x65" \
-"\x66\x61\x75\x6c\x74\x3a\x20\x54\x45\x52\x4d\x29\x20\x74\x6f\x20" \
-"\x67\x69\x76\x65\x6e\x20\x70\x72\x6f\x63\x65\x73\x73\x65\x73\x0a" \
-"\x0a\x09\x2d\x6c\x09\x4c\x69\x73\x74\x20\x61\x6c\x6c\x20\x73\x69" \
-"\x67\x6e\x61\x6c\x20\x6e\x61\x6d\x65\x73\x20\x61\x6e\x64\x20\x6e" \
-"\x75\x6d\x62\x65\x72\x73\x0a\x09\x2d\x71\x09\x44\x6f\x6e\x27\x74" \
-"\x20\x63\x6f\x6d\x70\x6c\x61\x69\x6e\x20\x69\x66\x20\x6e\x6f\x20" \
-"\x70\x72\x6f\x63\x65\x73\x73\x65\x73\x20\x77\x65\x72\x65\x20\x6b" \
-"\x69\x6c\x6c\x65\x64\x00\x5b\x2d\x6c\x5d\x20\x5b\x2d\x53\x49\x47" \
-"\x5d\x20\x5b\x2d\x6f\x20\x50\x49\x44\x5d\x2e\x2e\x2e\x0a\x0a\x53" \
-"\x65\x6e\x64\x20\x61\x20\x73\x69\x67\x6e\x61\x6c\x20\x28\x64\x65" \
-"\x66\x61\x75\x6c\x74\x3a\x20\x54\x45\x52\x4d\x29\x20\x74\x6f\x20" \
-"\x61\x6c\x6c\x20\x70\x72\x6f\x63\x65\x73\x73\x65\x73\x20\x6f\x75" \
-"\x74\x73\x69\x64\x65\x20\x63\x75\x72\x72\x65\x6e\x74\x20\x73\x65" \
-"\x73\x73\x69\x6f\x6e\x0a\x0a\x09\x2d\x6c\x09\x4c\x69\x73\x74\x20" \
-"\x61\x6c\x6c\x20\x73\x69\x67\x6e\x61\x6c\x20\x6e\x61\x6d\x65\x73" \
-"\x20\x61\x6e\x64\x20\x6e\x75\x6d\x62\x65\x72\x73\x0a\x09\x2d\x6f" \
-"\x20\x50\x49\x44\x09\x44\x6f\x6e\x27\x74\x20\x73\x69\x67\x6e\x61" \
-"\x6c\x20\x74\x68\x69\x73\x20\x50\x49\x44\x00\x5b\x2d\x45\x4e\x68" \
-"\x7e\x49\x3f\x5d\x20\x5b\x46\x49\x4c\x45\x5d\x2e\x2e\x2e\x0a\x0a" \
-"\x56\x69\x65\x77\x20\x46\x49\x4c\x45\x20\x28\x6f\x72\x20\x73\x74" \
-"\x64\x69\x6e\x29\x20\x6f\x6e\x65\x20\x73\x63\x72\x65\x65\x6e\x66" \
-"\x75\x6c\x20\x61\x74\x20\x61\x20\x74\x69\x6d\x65\x0a\x0a\x09\x2d" \
-"\x45\x09\x51\x75\x69\x74\x20\x6f\x6e\x63\x65\x20\x74\x68\x65\x20" \
-"\x65\x6e\x64\x20\x6f\x66\x20\x61\x20\x66\x69\x6c\x65\x20\x69\x73" \
-"\x20\x72\x65\x61\x63\x68\x65\x64\x0a\x09\x2d\x4e\x09\x50\x72\x65" \
-"\x66\x69\x78\x20\x6c\x69\x6e\x65\x20\x6e\x75\x6d\x62\x65\x72\x20" \
-"\x74\x6f\x20\x65\x61\x63\x68\x20\x6c\x69\x6e\x65\x0a\x09\x2d\x49" \
-"\x09\x49\x67\x6e\x6f\x72\x65\x20\x63\x61\x73\x65\x20\x69\x6e\x20" \
-"\x61\x6c\x6c\x20\x73\x65\x61\x72\x63\x68\x65\x73\x0a\x09\x2d\x7e" \
-"\x09\x53\x75\x70\x70\x72\x65\x73\x73\x20\x7e\x73\x20\x64\x69\x73" \
-"\x70\x6c\x61\x79\x65\x64\x20\x70\x61\x73\x74\x20\x45\x4f\x46\x00" \
-"\x5b\x4f\x50\x54\x49\x4f\x4e\x53\x5d\x20\x54\x41\x52\x47\x45\x54" \
-"\x2e\x2e\x2e\x20\x4c\x49\x4e\x4b\x7c\x44\x49\x52\x0a\x0a\x43\x72" \
-"\x65\x61\x74\x65\x20\x61\x20\x6c\x69\x6e\x6b\x20\x4c\x49\x4e\x4b" \
-"\x20\x6f\x72\x20\x44\x49\x52\x2f\x54\x41\x52\x47\x45\x54\x20\x74" \
-"\x6f\x20\x74\x68\x65\x20\x73\x70\x65\x63\x69\x66\x69\x65\x64\x20" \
-"\x54\x41\x52\x47\x45\x54\x28\x73\x29\x0a\x0a\x09\x2d\x73\x09\x4d" \
-"\x61\x6b\x65\x20\x73\x79\x6d\x6c\x69\x6e\x6b\x73\x20\x69\x6e\x73" \
-"\x74\x65\x61\x64\x20\x6f\x66\x20\x68\x61\x72\x64\x6c\x69\x6e\x6b" \
-"\x73\x0a\x09\x2d\x66\x09\x52\x65\x6d\x6f\x76\x65\x20\x65\x78\x69" \
-"\x73\x74\x69\x6e\x67\x20\x64\x65\x73\x74\x69\x6e\x61\x74\x69\x6f" \
-"\x6e\x73\x0a\x09\x2d\x6e\x09\x44\x6f\x6e\x27\x74\x20\x64\x65\x72" \
-"\x65\x66\x65\x72\x65\x6e\x63\x65\x20\x73\x79\x6d\x6c\x69\x6e\x6b" \
-"\x73\x20\x2d\x20\x74\x72\x65\x61\x74\x20\x6c\x69\x6b\x65\x20\x6e" \
-"\x6f\x72\x6d\x61\x6c\x20\x66\x69\x6c\x65\x0a\x09\x2d\x62\x09\x4d" \
-"\x61\x6b\x65\x20\x61\x20\x62\x61\x63\x6b\x75\x70\x20\x6f\x66\x20" \
-"\x74\x68\x65\x20\x74\x61\x72\x67\x65\x74\x20\x28\x69\x66\x20\x65" \
-"\x78\x69\x73\x74\x73\x29\x20\x62\x65\x66\x6f\x72\x65\x20\x6c\x69" \
-"\x6e\x6b\x20\x6f\x70\x65\x72\x61\x74\x69\x6f\x6e\x0a\x09\x2d\x53" \
-"\x20\x73\x75\x66\x09\x55\x73\x65\x20\x73\x75\x66\x66\x69\x78\x20" \
-"\x69\x6e\x73\x74\x65\x61\x64\x20\x6f\x66\x20\x7e\x20\x77\x68\x65" \
-"\x6e\x20\x6d\x61\x6b\x69\x6e\x67\x20\x62\x61\x63\x6b\x75\x70\x20" \
-"\x66\x69\x6c\x65\x73\x0a\x09\x2d\x54\x09\x32\x6e\x64\x20\x61\x72" \
-"\x67\x20\x6d\x75\x73\x74\x20\x62\x65\x20\x61\x20\x44\x49\x52\x0a" \
-"\x09\x2d\x76\x09\x56\x65\x72\x62\x6f\x73\x65\x00\x5b\x2d\x72\x5d" \
-"\x20\x5b\x2d\x6f\x20\x4f\x46\x53\x5d\x20\x4c\x4f\x4f\x50\x44\x45" \
-"\x56\x20\x46\x49\x4c\x45\x20\x2d\x20\x61\x73\x73\x6f\x63\x69\x61" \
-"\x74\x65\x20\x6c\x6f\x6f\x70\x20\x64\x65\x76\x69\x63\x65\x73\x0a" \
-"\x09\x6c\x6f\x73\x65\x74\x75\x70\x20\x2d\x64\x20\x4c\x4f\x4f\x50" \
-"\x44\x45\x56\x20\x2d\x20\x64\x69\x73\x61\x73\x73\x6f\x63\x69\x61" \
-"\x74\x65\x0a\x09\x6c\x6f\x73\x65\x74\x75\x70\x20\x5b\x2d\x66\x5d" \
-"\x20\x2d\x20\x73\x68\x6f\x77\x0a\x0a\x09\x2d\x6f\x20\x4f\x46\x53" \
-"\x09\x53\x74\x61\x72\x74\x20\x4f\x46\x53\x20\x62\x79\x74\x65\x73" \
-"\x20\x69\x6e\x74\x6f\x20\x46\x49\x4c\x45\x0a\x09\x2d\x72\x09\x52" \
-"\x65\x61\x64\x2d\x6f\x6e\x6c\x79\x0a\x09\x2d\x66\x09\x53\x68\x6f" \
-"\x77\x20\x66\x69\x72\x73\x74\x20\x66\x72\x65\x65\x20\x6c\x6f\x6f" \
-"\x70\x20\x64\x65\x76\x69\x63\x65\x00\x5b\x2d\x31\x41\x61\x43\x78" \
-"\x64\x4c\x48\x52\x46\x70\x6c\x69\x6e\x73\x65\x68\x72\x53\x58\x76" \
-"\x63\x74\x75\x5d\x20\x5b\x2d\x77\x20\x57\x49\x44\x54\x48\x5d\x20" \
-"\x5b\x46\x49\x4c\x45\x5d\x2e\x2e\x2e\x0a\x0a\x4c\x69\x73\x74\x20" \
-"\x64\x69\x72\x65\x63\x74\x6f\x72\x79\x20\x63\x6f\x6e\x74\x65\x6e" \
-"\x74\x73\x0a\x0a\x09\x2d\x31\x09\x4f\x6e\x65\x20\x63\x6f\x6c\x75" \
-"\x6d\x6e\x20\x6f\x75\x74\x70\x75\x74\x0a\x09\x2d\x61\x09\x49\x6e" \
-"\x63\x6c\x75\x64\x65\x20\x65\x6e\x74\x72\x69\x65\x73\x20\x77\x68" \
-"\x69\x63\x68\x20\x73\x74\x61\x72\x74\x20\x77\x69\x74\x68\x20\x2e" \
-"\x0a\x09\x2d\x41\x09\x4c\x69\x6b\x65\x20\x2d\x61\x2c\x20\x62\x75" \
-"\x74\x20\x65\x78\x63\x6c\x75\x64\x65\x20\x2e\x20\x61\x6e\x64\x20" \
-"\x2e\x2e\x0a\x09\x2d\x43\x09\x4c\x69\x73\x74\x20\x62\x79\x20\x63" \
-"\x6f\x6c\x75\x6d\x6e\x73\x0a\x09\x2d\x78\x09\x4c\x69\x73\x74\x20" \
-"\x62\x79\x20\x6c\x69\x6e\x65\x73\x0a\x09\x2d\x64\x09\x4c\x69\x73" \
-"\x74\x20\x64\x69\x72\x65\x63\x74\x6f\x72\x79\x20\x65\x6e\x74\x72" \
-"\x69\x65\x73\x20\x69\x6e\x73\x74\x65\x61\x64\x20\x6f\x66\x20\x63" \
-"\x6f\x6e\x74\x65\x6e\x74\x73\x0a\x09\x2d\x4c\x09\x46\x6f\x6c\x6c" \
-"\x6f\x77\x20\x73\x79\x6d\x6c\x69\x6e\x6b\x73\x0a\x09\x2d\x48\x09" \
-"\x46\x6f\x6c\x6c\x6f\x77\x20\x73\x79\x6d\x6c\x69\x6e\x6b\x73\x20" \
-"\x6f\x6e\x20\x63\x6f\x6d\x6d\x61\x6e\x64\x20\x6c\x69\x6e\x65\x0a" \
-"\x09\x2d\x52\x09\x52\x65\x63\x75\x72\x73\x65\x0a\x09\x2d\x70\x09" \
-"\x41\x70\x70\x65\x6e\x64\x20\x2f\x20\x74\x6f\x20\x64\x69\x72\x20" \
-"\x65\x6e\x74\x72\x69\x65\x73\x0a\x09\x2d\x46\x09\x41\x70\x70\x65" \
-"\x6e\x64\x20\x69\x6e\x64\x69\x63\x61\x74\x6f\x72\x20\x28\x6f\x6e" \
-"\x65\x20\x6f\x66\x20\x2a\x2f\x3d\x40\x7c\x29\x20\x74\x6f\x20\x65" \
-"\x6e\x74\x72\x69\x65\x73\x0a\x09\x2d\x6c\x09\x4c\x6f\x6e\x67\x20" \
-"\x6c\x69\x73\x74\x69\x6e\x67\x20\x66\x6f\x72\x6d\x61\x74\x0a\x09" \
-"\x2d\x69\x09\x4c\x69\x73\x74\x20\x69\x6e\x6f\x64\x65\x20\x6e\x75" \
-"\x6d\x62\x65\x72\x73\x0a\x09\x2d\x6e\x09\x4c\x69\x73\x74\x20\x6e" \
-"\x75\x6d\x65\x72\x69\x63\x20\x55\x49\x44\x73\x20\x61\x6e\x64\x20" \
-"\x47\x49\x44\x73\x20\x69\x6e\x73\x74\x65\x61\x64\x20\x6f\x66\x20" \
-"\x6e\x61\x6d\x65\x73\x0a\x09\x2d\x73\x09\x4c\x69\x73\x74\x20\x61" \
-"\x6c\x6c\x6f\x63\x61\x74\x65\x64\x20\x62\x6c\x6f\x63\x6b\x73\x0a" \
-"\x09\x2d\x65\x09\x4c\x69\x73\x74\x20\x66\x75\x6c\x6c\x20\x64\x61" \
-"\x74\x65\x20\x61\x6e\x64\x20\x74\x69\x6d\x65\x0a\x09\x2d\x68\x09" \
-"\x4c\x69\x73\x74\x20\x73\x69\x7a\x65\x73\x20\x69\x6e\x20\x68\x75" \
-"\x6d\x61\x6e\x20\x72\x65\x61\x64\x61\x62\x6c\x65\x20\x66\x6f\x72" \
-"\x6d\x61\x74\x20\x28\x31\x4b\x20\x32\x34\x33\x4d\x20\x32\x47\x29" \
-"\x0a\x09\x2d\x72\x09\x53\x6f\x72\x74\x20\x69\x6e\x20\x72\x65\x76" \
-"\x65\x72\x73\x65\x20\x6f\x72\x64\x65\x72\x0a\x09\x2d\x53\x09\x53" \
-"\x6f\x72\x74\x20\x62\x79\x20\x73\x69\x7a\x65\x0a\x09\x2d\x58\x09" \
-"\x53\x6f\x72\x74\x20\x62\x79\x20\x65\x78\x74\x65\x6e\x73\x69\x6f" \
-"\x6e\x0a\x09\x2d\x76\x09\x53\x6f\x72\x74\x20\x62\x79\x20\x76\x65" \
-"\x72\x73\x69\x6f\x6e\x0a\x09\x2d\x63\x09\x57\x69\x74\x68\x20\x2d" \
-"\x6c\x3a\x20\x73\x6f\x72\x74\x20\x62\x79\x20\x63\x74\x69\x6d\x65" \
-"\x0a\x09\x2d\x74\x09\x57\x69\x74\x68\x20\x2d\x6c\x3a\x20\x73\x6f" \
-"\x72\x74\x20\x62\x79\x20\x6d\x74\x69\x6d\x65\x0a\x09\x2d\x75\x09" \
-"\x57\x69\x74\x68\x20\x2d\x6c\x3a\x20\x73\x6f\x72\x74\x20\x62\x79" \
-"\x20\x61\x74\x69\x6d\x65\x0a\x09\x2d\x77\x20\x4e\x09\x41\x73\x73" \
-"\x75\x6d\x65\x20\x74\x68\x65\x20\x74\x65\x72\x6d\x69\x6e\x61\x6c" \
-"\x20\x69\x73\x20\x4e\x20\x63\x6f\x6c\x75\x6d\x6e\x73\x20\x77\x69" \
-"\x64\x65\x0a\x09\x2d\x2d\x63\x6f\x6c\x6f\x72\x5b\x3d\x7b\x61\x6c" \
-"\x77\x61\x79\x73\x2c\x6e\x65\x76\x65\x72\x2c\x61\x75\x74\x6f\x7d" \
-"\x5d\x09\x43\x6f\x6e\x74\x72\x6f\x6c\x20\x63\x6f\x6c\x6f\x72\x69" \
-"\x6e\x67\x00\x5b\x2d\x52\x61\x64\x6c\x76\x5d\x20\x5b\x46\x49\x4c" \
-"\x45\x5d\x2e\x2e\x2e\x0a\x0a\x4c\x69\x73\x74\x20\x66\x69\x6c\x65" \
-"\x20\x61\x74\x74\x72\x69\x62\x75\x74\x65\x73\x20\x6f\x6e\x20\x61" \
-"\x6e\x20\x65\x78\x74\x32\x20\x66\x73\x0a\x0a\x09\x2d\x52\x09\x52" \
-"\x65\x63\x75\x72\x73\x65\x0a\x09\x2d\x61\x09\x44\x6f\x6e\x27\x74" \
-"\x20\x68\x69\x64\x65\x20\x65\x6e\x74\x72\x69\x65\x73\x20\x73\x74" \
-"\x61\x72\x74\x69\x6e\x67\x20\x77\x69\x74\x68\x20\x2e\x0a\x09\x2d" \
-"\x64\x09\x4c\x69\x73\x74\x20\x64\x69\x72\x65\x63\x74\x6f\x72\x79" \
-"\x20\x65\x6e\x74\x72\x69\x65\x73\x20\x69\x6e\x73\x74\x65\x61\x64" \
-"\x20\x6f\x66\x20\x63\x6f\x6e\x74\x65\x6e\x74\x73\x0a\x09\x2d\x6c" \
-"\x09\x4c\x69\x73\x74\x20\x6c\x6f\x6e\x67\x20\x66\x6c\x61\x67\x20" \
-"\x6e\x61\x6d\x65\x73\x0a\x09\x2d\x76\x09\x4c\x69\x73\x74\x20\x74" \
-"\x68\x65\x20\x66\x69\x6c\x65\x27\x73\x20\x76\x65\x72\x73\x69\x6f" \
-"\x6e\x2f\x67\x65\x6e\x65\x72\x61\x74\x69\x6f\x6e\x20\x6e\x75\x6d" \
-"\x62\x65\x72\x00\x5b\x2d\x71\x66\x77\x72\x73\x76\x5d\x20\x4d\x4f" \
-"\x44\x55\x4c\x45\x20\x5b\x73\x79\x6d\x62\x6f\x6c\x3d\x76\x61\x6c" \
-"\x75\x65\x5d\x2e\x2e\x2e\x0a\x0a\x09\x2d\x72\x09\x52\x65\x6d\x6f" \
-"\x76\x65\x20\x4d\x4f\x44\x55\x4c\x45\x20\x28\x73\x74\x61\x63\x6b" \
-"\x73\x29\x20\x6f\x72\x20\x64\x6f\x20\x61\x75\x74\x6f\x63\x6c\x65" \
-"\x61\x6e\x0a\x09\x2d\x71\x09\x51\x75\x69\x65\x74\x0a\x09\x2d\x76" \
-"\x09\x56\x65\x72\x62\x6f\x73\x65\x0a\x09\x2d\x66\x09\x46\x6f\x72" \
-"\x63\x65\x0a\x09\x2d\x77\x09\x57\x61\x69\x74\x20\x66\x6f\x72\x20" \
-"\x75\x6e\x6c\x6f\x61\x64\x0a\x09\x2d\x73\x09\x52\x65\x70\x6f\x72" \
-"\x74\x20\x76\x69\x61\x20\x73\x79\x73\x6c\x6f\x67\x20\x69\x6e\x73" \
-"\x74\x65\x61\x64\x20\x6f\x66\x20\x73\x74\x64\x65\x72\x72\x00\x0a" \
-"\x0a\x53\x68\x6f\x77\x20\x61\x6c\x6c\x20\x6f\x70\x65\x6e\x20\x66" \
-"\x69\x6c\x65\x73\x00\x5b\x2d\x6d\x6b\x5d\x0a\x0a\x4c\x69\x73\x74" \
-"\x20\x61\x6c\x6c\x20\x50\x43\x49\x20\x64\x65\x76\x69\x63\x65\x73" \
-"\x0a\x0a\x09\x2d\x6d\x09\x50\x61\x72\x73\x61\x62\x6c\x65\x20\x6f" \
-"\x75\x74\x70\x75\x74\x0a\x09\x2d\x6b\x09\x53\x68\x6f\x77\x20\x64" \
-"\x72\x69\x76\x65\x72\x00\x08\x00\x46\x49\x4c\x45\x0a\x0a\x44\x65" \
-"\x63\x6f\x6d\x70\x72\x65\x73\x73\x20\x74\x6f\x20\x73\x74\x64\x6f" \
-"\x75\x74\x00\x5b\x2d\x63\x66\x76\x64\x31\x32\x33\x34\x35\x36\x37" \
-"\x38\x39\x43\x46\x5d\x20\x5b\x46\x49\x4c\x45\x5d\x2e\x2e\x2e\x0a" \
-"\x0a\x09\x2d\x31\x2e\x2e\x39\x09\x43\x6f\x6d\x70\x72\x65\x73\x73" \
-"\x69\x6f\x6e\x20\x6c\x65\x76\x65\x6c\x0a\x09\x2d\x64\x09\x44\x65" \
-"\x63\x6f\x6d\x70\x72\x65\x73\x73\x0a\x09\x2d\x63\x09\x57\x72\x69" \
-"\x74\x65\x20\x74\x6f\x20\x73\x74\x64\x6f\x75\x74\x0a\x09\x2d\x66" \
-"\x09\x46\x6f\x72\x63\x65\x0a\x09\x2d\x76\x09\x56\x65\x72\x62\x6f" \
-"\x73\x65\x0a\x09\x2d\x46\x09\x44\x6f\x6e\x27\x74\x20\x73\x74\x6f" \
-"\x72\x65\x20\x6f\x72\x20\x76\x65\x72\x69\x66\x79\x20\x63\x68\x65" \
-"\x63\x6b\x73\x75\x6d\x0a\x09\x2d\x43\x09\x41\x6c\x73\x6f\x20\x77" \
-"\x72\x69\x74\x65\x20\x63\x68\x65\x63\x6b\x73\x75\x6d\x20\x6f\x66" \
-"\x20\x63\x6f\x6d\x70\x72\x65\x73\x73\x65\x64\x20\x62\x6c\x6f\x63" \
-"\x6b\x00\x5b\x2d\x76\x43\x46\x5d\x20\x5b\x46\x49\x4c\x45\x5d\x2e" \
-"\x2e\x2e\x0a\x0a\x09\x2d\x76\x09\x56\x65\x72\x62\x6f\x73\x65\x0a" \
-"\x09\x2d\x46\x09\x44\x6f\x6e\x27\x74\x20\x73\x74\x6f\x72\x65\x20" \
-"\x6f\x72\x20\x76\x65\x72\x69\x66\x79\x20\x63\x68\x65\x63\x6b\x73" \
-"\x75\x6d\x00\x5b\x2d\x64\x20\x64\x65\x76\x69\x63\x65\x5f\x74\x61" \
-"\x62\x6c\x65\x5d\x20\x72\x6f\x6f\x74\x64\x69\x72\x0a\x0a\x43\x72" \
-"\x65\x61\x74\x65\x20\x61\x20\x72\x61\x6e\x67\x65\x20\x6f\x66\x20" \
-"\x73\x70\x65\x63\x69\x61\x6c\x20\x66\x69\x6c\x65\x73\x20\x61\x73" \
-"\x20\x73\x70\x65\x63\x69\x66\x69\x65\x64\x20\x69\x6e\x20\x61\x20" \
-"\x64\x65\x76\x69\x63\x65\x20\x74\x61\x62\x6c\x65\x2e\x0a\x44\x65" \
-"\x76\x69\x63\x65\x20\x74\x61\x62\x6c\x65\x20\x65\x6e\x74\x72\x69" \
-"\x65\x73\x20\x74\x61\x6b\x65\x20\x74\x68\x65\x20\x66\x6f\x72\x6d" \
-"\x20\x6f\x66\x3a\x0a\x3c\x6e\x61\x6d\x65\x3e\x20\x3c\x74\x79\x70" \
-"\x65\x3e\x20\x3c\x6d\x6f\x64\x65\x3e\x20\x3c\x75\x69\x64\x3e\x20" \
-"\x3c\x67\x69\x64\x3e\x20\x3c\x6d\x61\x6a\x6f\x72\x3e\x20\x3c\x6d" \
-"\x69\x6e\x6f\x72\x3e\x20\x3c\x73\x74\x61\x72\x74\x3e\x20\x3c\x69" \
-"\x6e\x63\x3e\x20\x3c\x63\x6f\x75\x6e\x74\x3e\x0a\x57\x68\x65\x72" \
-"\x65\x20\x6e\x61\x6d\x65\x20\x69\x73\x20\x74\x68\x65\x20\x66\x69" \
-"\x6c\x65\x20\x6e\x61\x6d\x65\x2c\x20\x74\x79\x70\x65\x20\x63\x61" \
-"\x6e\x20\x62\x65\x20\x6f\x6e\x65\x20\x6f\x66\x3a\x0a\x09\x66\x09" \
-"\x52\x65\x67\x75\x6c\x61\x72\x20\x66\x69\x6c\x65\x0a\x09\x64\x09" \
-"\x44\x69\x72\x65\x63\x74\x6f\x72\x79\x0a\x09\x63\x09\x43\x68\x61" \
-"\x72\x61\x63\x74\x65\x72\x20\x64\x65\x76\x69\x63\x65\x0a\x09\x62" \
-"\x09\x42\x6c\x6f\x63\x6b\x20\x64\x65\x76\x69\x63\x65\x0a\x09\x70" \
-"\x09\x46\x69\x66\x6f\x20\x28\x6e\x61\x6d\x65\x64\x20\x70\x69\x70" \
-"\x65\x29\x0a\x75\x69\x64\x20\x69\x73\x20\x74\x68\x65\x20\x75\x73" \
-"\x65\x72\x20\x69\x64\x20\x66\x6f\x72\x20\x74\x68\x65\x20\x74\x61" \
-"\x72\x67\x65\x74\x20\x66\x69\x6c\x65\x2c\x20\x67\x69\x64\x20\x69" \
-"\x73\x20\x74\x68\x65\x20\x67\x72\x6f\x75\x70\x20\x69\x64\x20\x66" \
-"\x6f\x72\x20\x74\x68\x65\x0a\x74\x61\x72\x67\x65\x74\x20\x66\x69" \
-"\x6c\x65\x2e\x20\x54\x68\x65\x20\x72\x65\x73\x74\x20\x6f\x66\x20" \
-"\x74\x68\x65\x20\x65\x6e\x74\x72\x69\x65\x73\x20\x28\x6d\x61\x6a" \
-"\x6f\x72\x2c\x20\x6d\x69\x6e\x6f\x72\x2c\x20\x65\x74\x63\x29\x20" \
-"\x61\x70\x70\x6c\x79\x20\x74\x6f\x0a\x74\x6f\x20\x64\x65\x76\x69" \
-"\x63\x65\x20\x73\x70\x65\x63\x69\x61\x6c\x20\x66\x69\x6c\x65\x73" \
-"\x2e\x20\x41\x20\x27\x2d\x27\x20\x6d\x61\x79\x20\x62\x65\x20\x75" \
-"\x73\x65\x64\x20\x66\x6f\x72\x20\x62\x6c\x61\x6e\x6b\x20\x65\x6e" \
-"\x74\x72\x69\x65\x73\x2e\x00\x5b\x2d\x63\x5b\x73\x77\x5d\x5d\x20" \
-"\x5b\x46\x49\x4c\x45\x5d\x2e\x2e\x2e\x0a\x0a\x50\x72\x69\x6e\x74" \
-"\x20\x6f\x72\x20\x63\x68\x65\x63\x6b\x20\x4d\x44\x35\x20\x63\x68" \
-"\x65\x63\x6b\x73\x75\x6d\x73\x0a\x0a\x09\x2d\x63\x09\x43\x68\x65" \
-"\x63\x6b\x20\x73\x75\x6d\x73\x20\x61\x67\x61\x69\x6e\x73\x74\x20" \
-"\x6c\x69\x73\x74\x20\x69\x6e\x20\x46\x49\x4c\x45\x73\x0a\x09\x2d" \
-"\x73\x09\x44\x6f\x6e\x27\x74\x20\x6f\x75\x74\x70\x75\x74\x20\x61" \
-"\x6e\x79\x74\x68\x69\x6e\x67\x2c\x20\x73\x74\x61\x74\x75\x73\x20" \
-"\x63\x6f\x64\x65\x20\x73\x68\x6f\x77\x73\x20\x73\x75\x63\x63\x65" \
-"\x73\x73\x0a\x09\x2d\x77\x09\x57\x61\x72\x6e\x20\x61\x62\x6f\x75" \
-"\x74\x20\x69\x6d\x70\x72\x6f\x70\x65\x72\x6c\x79\x20\x66\x6f\x72" \
-"\x6d\x61\x74\x74\x65\x64\x20\x63\x68\x65\x63\x6b\x73\x75\x6d\x20" \
-"\x6c\x69\x6e\x65\x73\x00\x5b\x4f\x50\x54\x49\x4f\x4e\x53\x5d\x20" \
-"\x44\x49\x52\x45\x43\x54\x4f\x52\x59\x2e\x2e\x2e\x0a\x0a\x43\x72" \
-"\x65\x61\x74\x65\x20\x44\x49\x52\x45\x43\x54\x4f\x52\x59\x0a\x0a" \
-"\x09\x2d\x6d\x20\x4d\x4f\x44\x45\x09\x4d\x6f\x64\x65\x0a\x09\x2d" \
-"\x70\x09\x4e\x6f\x20\x65\x72\x72\x6f\x72\x20\x69\x66\x20\x65\x78" \
-"\x69\x73\x74\x73\x3b\x20\x6d\x61\x6b\x65\x20\x70\x61\x72\x65\x6e" \
-"\x74\x20\x64\x69\x72\x65\x63\x74\x6f\x72\x69\x65\x73\x20\x61\x73" \
-"\x20\x6e\x65\x65\x64\x65\x64\x00\x5b\x2d\x76\x5d\x20\x5b\x2d\x6e" \
-"\x20\x4c\x41\x42\x45\x4c\x5d\x20\x42\x4c\x4f\x43\x4b\x44\x45\x56" \
-"\x20\x5b\x4b\x42\x59\x54\x45\x53\x5d\x0a\x0a\x4d\x61\x6b\x65\x20" \
-"\x61\x20\x46\x41\x54\x33\x32\x20\x66\x69\x6c\x65\x73\x79\x73\x74" \
-"\x65\x6d\x0a\x0a\x09\x2d\x76\x09\x56\x65\x72\x62\x6f\x73\x65\x0a" \
-"\x09\x2d\x6e\x20\x4c\x42\x4c\x09\x56\x6f\x6c\x75\x6d\x65\x20\x6c" \
-"\x61\x62\x65\x6c\x00\x5b\x2d\x46\x6e\x5d\x20\x5b\x2d\x62\x20\x42" \
-"\x4c\x4b\x5f\x53\x49\x5a\x45\x5d\x20\x5b\x2d\x69\x20\x49\x4e\x4f" \
-"\x44\x45\x5f\x52\x41\x54\x49\x4f\x5d\x20\x5b\x2d\x49\x20\x49\x4e" \
-"\x4f\x44\x45\x5f\x53\x49\x5a\x45\x5d\x20\x5b\x2d\x6d\x20\x52\x45" \
-"\x53\x45\x52\x56\x45\x44\x5f\x50\x45\x52\x43\x45\x4e\x54\x5d\x20" \
-"\x5b\x2d\x4c\x20\x4c\x41\x42\x45\x4c\x5d\x20\x42\x4c\x4f\x43\x4b" \
-"\x44\x45\x56\x20\x5b\x4b\x42\x59\x54\x45\x53\x5d\x0a\x0a\x09\x2d" \
-"\x62\x20\x42\x4c\x4b\x5f\x53\x49\x5a\x45\x09\x42\x6c\x6f\x63\x6b" \
-"\x20\x73\x69\x7a\x65\x2c\x20\x62\x79\x74\x65\x73\x0a\x09\x2d\x46" \
-"\x09\x09\x46\x6f\x72\x63\x65\x0a\x09\x2d\x69\x20\x52\x41\x54\x49" \
-"\x4f\x09\x4d\x61\x78\x20\x6e\x75\x6d\x62\x65\x72\x20\x6f\x66\x20" \
-"\x66\x69\x6c\x65\x73\x20\x69\x73\x20\x66\x69\x6c\x65\x73\x79\x73" \
-"\x74\x65\x6d\x5f\x73\x69\x7a\x65\x20\x2f\x20\x52\x41\x54\x49\x4f" \
-"\x0a\x09\x2d\x49\x20\x42\x59\x54\x45\x53\x09\x49\x6e\x6f\x64\x65" \
-"\x20\x73\x69\x7a\x65\x20\x28\x6d\x69\x6e\x20\x31\x32\x38\x29\x0a" \
-"\x09\x2d\x4c\x20\x4c\x42\x4c\x09\x09\x56\x6f\x6c\x75\x6d\x65\x20" \
-"\x6c\x61\x62\x65\x6c\x0a\x09\x2d\x6d\x20\x50\x45\x52\x43\x45\x4e" \
-"\x54\x09\x50\x65\x72\x63\x65\x6e\x74\x20\x6f\x66\x20\x62\x6c\x6f" \
-"\x63\x6b\x73\x20\x74\x6f\x20\x72\x65\x73\x65\x72\x76\x65\x20\x66" \
-"\x6f\x72\x20\x61\x64\x6d\x69\x6e\x0a\x09\x2d\x6e\x09\x09\x44\x72" \
-"\x79\x20\x72\x75\x6e\x00\x5b\x2d\x6d\x20\x4d\x4f\x44\x45\x5d\x20" \
-"\x4e\x41\x4d\x45\x0a\x0a\x43\x72\x65\x61\x74\x65\x20\x6e\x61\x6d" \
-"\x65\x64\x20\x70\x69\x70\x65\x0a\x0a\x09\x2d\x6d\x20\x4d\x4f\x44" \
-"\x45\x09\x4d\x6f\x64\x65\x20\x28\x64\x65\x66\x61\x75\x6c\x74\x20" \
-"\x61\x3d\x72\x77\x29\x00\x5b\x2d\x46\x6e\x5d\x20\x5b\x2d\x62\x20" \
-"\x42\x4c\x4b\x5f\x53\x49\x5a\x45\x5d\x20\x5b\x2d\x69\x20\x49\x4e" \
-"\x4f\x44\x45\x5f\x52\x41\x54\x49\x4f\x5d\x20\x5b\x2d\x49\x20\x49" \
-"\x4e\x4f\x44\x45\x5f\x53\x49\x5a\x45\x5d\x20\x5b\x2d\x6d\x20\x52" \
-"\x45\x53\x45\x52\x56\x45\x44\x5f\x50\x45\x52\x43\x45\x4e\x54\x5d" \
-"\x20\x5b\x2d\x4c\x20\x4c\x41\x42\x45\x4c\x5d\x20\x42\x4c\x4f\x43" \
-"\x4b\x44\x45\x56\x20\x5b\x4b\x42\x59\x54\x45\x53\x5d\x0a\x0a\x09" \
-"\x2d\x62\x20\x42\x4c\x4b\x5f\x53\x49\x5a\x45\x09\x42\x6c\x6f\x63" \
-"\x6b\x20\x73\x69\x7a\x65\x2c\x20\x62\x79\x74\x65\x73\x0a\x09\x2d" \
-"\x46\x09\x09\x46\x6f\x72\x63\x65\x0a\x09\x2d\x69\x20\x52\x41\x54" \
-"\x49\x4f\x09\x4d\x61\x78\x20\x6e\x75\x6d\x62\x65\x72\x20\x6f\x66" \
-"\x20\x66\x69\x6c\x65\x73\x20\x69\x73\x20\x66\x69\x6c\x65\x73\x79" \
-"\x73\x74\x65\x6d\x5f\x73\x69\x7a\x65\x20\x2f\x20\x52\x41\x54\x49" \
-"\x4f\x0a\x09\x2d\x49\x20\x42\x59\x54\x45\x53\x09\x49\x6e\x6f\x64" \
-"\x65\x20\x73\x69\x7a\x65\x20\x28\x6d\x69\x6e\x20\x31\x32\x38\x29" \
-"\x0a\x09\x2d\x4c\x20\x4c\x42\x4c\x09\x09\x56\x6f\x6c\x75\x6d\x65" \
-"\x20\x6c\x61\x62\x65\x6c\x0a\x09\x2d\x6d\x20\x50\x45\x52\x43\x45" \
-"\x4e\x54\x09\x50\x65\x72\x63\x65\x6e\x74\x20\x6f\x66\x20\x62\x6c" \
-"\x6f\x63\x6b\x73\x20\x74\x6f\x20\x72\x65\x73\x65\x72\x76\x65\x20" \
-"\x66\x6f\x72\x20\x61\x64\x6d\x69\x6e\x0a\x09\x2d\x6e\x09\x09\x44" \
-"\x72\x79\x20\x72\x75\x6e\x00\x5b\x2d\x76\x5d\x20\x5b\x2d\x6e\x20" \
-"\x4c\x41\x42\x45\x4c\x5d\x20\x42\x4c\x4f\x43\x4b\x44\x45\x56\x20" \
-"\x5b\x4b\x42\x59\x54\x45\x53\x5d\x0a\x0a\x4d\x61\x6b\x65\x20\x61" \
-"\x20\x46\x41\x54\x33\x32\x20\x66\x69\x6c\x65\x73\x79\x73\x74\x65" \
-"\x6d\x0a\x0a\x09\x2d\x76\x09\x56\x65\x72\x62\x6f\x73\x65\x0a\x09" \
-"\x2d\x6e\x20\x4c\x42\x4c\x09\x56\x6f\x6c\x75\x6d\x65\x20\x6c\x61" \
-"\x62\x65\x6c\x00\x5b\x2d\x6d\x20\x4d\x4f\x44\x45\x5d\x20\x4e\x41" \
-"\x4d\x45\x20\x54\x59\x50\x45\x20\x4d\x41\x4a\x4f\x52\x20\x4d\x49" \
-"\x4e\x4f\x52\x0a\x0a\x43\x72\x65\x61\x74\x65\x20\x61\x20\x73\x70" \
-"\x65\x63\x69\x61\x6c\x20\x66\x69\x6c\x65\x20\x28\x62\x6c\x6f\x63" \
-"\x6b\x2c\x20\x63\x68\x61\x72\x61\x63\x74\x65\x72\x2c\x20\x6f\x72" \
-"\x20\x70\x69\x70\x65\x29\x0a\x0a\x09\x2d\x6d\x20\x4d\x4f\x44\x45" \
-"\x09\x43\x72\x65\x61\x74\x69\x6f\x6e\x20\x6d\x6f\x64\x65\x20\x28" \
-"\x64\x65\x66\x61\x75\x6c\x74\x20\x61\x3d\x72\x77\x29\x0a\x54\x59" \
-"\x50\x45\x3a\x0a\x09\x62\x09\x42\x6c\x6f\x63\x6b\x20\x64\x65\x76" \
-"\x69\x63\x65\x0a\x09\x63\x20\x6f\x72\x20\x75\x09\x43\x68\x61\x72" \
-"\x61\x63\x74\x65\x72\x20\x64\x65\x76\x69\x63\x65\x0a\x09\x70\x09" \
-"\x4e\x61\x6d\x65\x64\x20\x70\x69\x70\x65\x20\x28\x4d\x41\x4a\x4f" \
-"\x52\x20\x61\x6e\x64\x20\x4d\x49\x4e\x4f\x52\x20\x61\x72\x65\x20" \
-"\x69\x67\x6e\x6f\x72\x65\x64\x29\x00\x5b\x2d\x4c\x20\x4c\x42\x4c" \
-"\x5d\x20\x42\x4c\x4f\x43\x4b\x44\x45\x56\x20\x5b\x4b\x42\x59\x54" \
-"\x45\x53\x5d\x0a\x0a\x50\x72\x65\x70\x61\x72\x65\x20\x42\x4c\x4f" \
-"\x43\x4b\x44\x45\x56\x20\x74\x6f\x20\x62\x65\x20\x75\x73\x65\x64" \
-"\x20\x61\x73\x20\x73\x77\x61\x70\x20\x70\x61\x72\x74\x69\x74\x69" \
-"\x6f\x6e\x0a\x0a\x09\x2d\x4c\x20\x4c\x42\x4c\x09\x4c\x61\x62\x65" \
-"\x6c\x00\x5b\x2d\x64\x74\x5d\x20\x5b\x2d\x70\x20\x44\x49\x52\x5d" \
-"\x20\x5b\x54\x45\x4d\x50\x4c\x41\x54\x45\x5d\x0a\x0a\x43\x72\x65" \
-"\x61\x74\x65\x20\x61\x20\x74\x65\x6d\x70\x6f\x72\x61\x72\x79\x20" \
-"\x66\x69\x6c\x65\x20\x77\x69\x74\x68\x20\x6e\x61\x6d\x65\x20\x62" \
-"\x61\x73\x65\x64\x20\x6f\x6e\x20\x54\x45\x4d\x50\x4c\x41\x54\x45" \
-"\x20\x61\x6e\x64\x20\x70\x72\x69\x6e\x74\x20\x69\x74\x73\x20\x6e" \
-"\x61\x6d\x65\x2e\x0a\x54\x45\x4d\x50\x4c\x41\x54\x45\x20\x6d\x75" \
-"\x73\x74\x20\x65\x6e\x64\x20\x77\x69\x74\x68\x20\x58\x58\x58\x58" \
-"\x58\x58\x20\x28\x65\x2e\x67\x2e\x20\x5b\x2f\x64\x69\x72\x2f\x5d" \
-"\x6e\x61\x6d\x65\x58\x58\x58\x58\x58\x58\x29\x2e\x0a\x57\x69\x74" \
-"\x68\x6f\x75\x74\x20\x54\x45\x4d\x50\x4c\x41\x54\x45\x2c\x20\x2d" \
-"\x74\x20\x74\x6d\x70\x2e\x58\x58\x58\x58\x58\x58\x20\x69\x73\x20" \
-"\x61\x73\x73\x75\x6d\x65\x64\x2e\x0a\x0a\x09\x2d\x64\x09\x4d\x61" \
-"\x6b\x65\x20\x64\x69\x72\x65\x63\x74\x6f\x72\x79\x2c\x20\x6e\x6f" \
-"\x74\x20\x66\x69\x6c\x65\x0a\x09\x2d\x71\x09\x46\x61\x69\x6c\x20" \
-"\x73\x69\x6c\x65\x6e\x74\x6c\x79\x20\x6f\x6e\x20\x65\x72\x72\x6f" \
-"\x72\x73\x0a\x09\x2d\x74\x09\x50\x72\x65\x70\x65\x6e\x64\x20\x62" \
-"\x61\x73\x65\x20\x64\x69\x72\x65\x63\x74\x6f\x72\x79\x20\x6e\x61" \
-"\x6d\x65\x20\x74\x6f\x20\x54\x45\x4d\x50\x4c\x41\x54\x45\x0a\x09" \
-"\x2d\x70\x20\x44\x49\x52\x09\x55\x73\x65\x20\x44\x49\x52\x20\x61" \
-"\x73\x20\x61\x20\x62\x61\x73\x65\x20\x64\x69\x72\x65\x63\x74\x6f" \
-"\x72\x79\x20\x28\x69\x6d\x70\x6c\x69\x65\x73\x20\x2d\x74\x29\x0a" \
-"\x09\x2d\x75\x09\x44\x6f\x20\x6e\x6f\x74\x20\x63\x72\x65\x61\x74" \
-"\x65\x20\x61\x6e\x79\x74\x68\x69\x6e\x67\x3b\x20\x70\x72\x69\x6e" \
-"\x74\x20\x61\x20\x6e\x61\x6d\x65\x0a\x0a\x42\x61\x73\x65\x20\x64" \
-"\x69\x72\x65\x63\x74\x6f\x72\x79\x20\x69\x73\x3a\x20\x2d\x70\x20" \
-"\x44\x49\x52\x2c\x20\x65\x6c\x73\x65\x20\x24\x54\x4d\x50\x44\x49" \
-"\x52\x2c\x20\x65\x6c\x73\x65\x20\x2f\x74\x6d\x70\x00\x5b\x2d\x61" \
-"\x64\x6c\x70\x30\x5d\x20\x5b\x2d\x46\x20\x6b\x65\x79\x77\x6f\x72" \
-"\x64\x5d\x20\x4d\x4f\x44\x55\x4c\x45\x0a\x0a\x09\x2d\x61\x09\x09" \
-"\x53\x68\x6f\x72\x74\x63\x75\x74\x20\x66\x6f\x72\x20\x27\x2d\x46" \
-"\x20\x61\x75\x74\x68\x6f\x72\x27\x0a\x09\x2d\x64\x09\x09\x53\x68" \
-"\x6f\x72\x74\x63\x75\x74\x20\x66\x6f\x72\x20\x27\x2d\x46\x20\x64" \
-"\x65\x73\x63\x72\x69\x70\x74\x69\x6f\x6e\x27\x0a\x09\x2d\x6c\x09" \
-"\x09\x53\x68\x6f\x72\x74\x63\x75\x74\x20\x66\x6f\x72\x20\x27\x2d" \
-"\x46\x20\x6c\x69\x63\x65\x6e\x73\x65\x27\x0a\x09\x2d\x70\x09\x09" \
-"\x53\x68\x6f\x72\x74\x63\x75\x74\x20\x66\x6f\x72\x20\x27\x2d\x46" \
-"\x20\x70\x61\x72\x6d\x27\x0a\x09\x2d\x46\x20\x6b\x65\x79\x77\x6f" \
-"\x72\x64\x09\x4b\x65\x79\x77\x6f\x72\x64\x20\x74\x6f\x20\x6c\x6f" \
-"\x6f\x6b\x20\x66\x6f\x72\x0a\x09\x2d\x30\x09\x09\x53\x65\x70\x61" \
-"\x72\x61\x74\x65\x20\x6f\x75\x74\x70\x75\x74\x20\x77\x69\x74\x68" \
-"\x20\x4e\x55\x4c\x73\x00\x5b\x2d\x71\x66\x77\x72\x73\x76\x5d\x20" \
-"\x4d\x4f\x44\x55\x4c\x45\x20\x5b\x73\x79\x6d\x62\x6f\x6c\x3d\x76" \
-"\x61\x6c\x75\x65\x5d\x2e\x2e\x2e\x0a\x0a\x09\x2d\x72\x09\x52\x65" \
-"\x6d\x6f\x76\x65\x20\x4d\x4f\x44\x55\x4c\x45\x20\x28\x73\x74\x61" \
-"\x63\x6b\x73\x29\x20\x6f\x72\x20\x64\x6f\x20\x61\x75\x74\x6f\x63" \
-"\x6c\x65\x61\x6e\x0a\x09\x2d\x71\x09\x51\x75\x69\x65\x74\x0a\x09" \
-"\x2d\x76\x09\x56\x65\x72\x62\x6f\x73\x65\x0a\x09\x2d\x66\x09\x46" \
-"\x6f\x72\x63\x65\x0a\x09\x2d\x77\x09\x57\x61\x69\x74\x20\x66\x6f" \
-"\x72\x20\x75\x6e\x6c\x6f\x61\x64\x0a\x09\x2d\x73\x09\x52\x65\x70" \
-"\x6f\x72\x74\x20\x76\x69\x61\x20\x73\x79\x73\x6c\x6f\x67\x20\x69" \
-"\x6e\x73\x74\x65\x61\x64\x20\x6f\x66\x20\x73\x74\x64\x65\x72\x72" \
-"\x00\x5b\x46\x49\x4c\x45\x5d\x2e\x2e\x2e\x0a\x0a\x56\x69\x65\x77" \
-"\x20\x46\x49\x4c\x45\x20\x28\x6f\x72\x20\x73\x74\x64\x69\x6e\x29" \
-"\x20\x6f\x6e\x65\x20\x73\x63\x72\x65\x65\x6e\x66\x75\x6c\x20\x61" \
-"\x74\x20\x61\x20\x74\x69\x6d\x65\x00\x5b\x4f\x50\x54\x49\x4f\x4e" \
-"\x53\x5d\x20\x5b\x2d\x6f\x20\x4f\x50\x54\x53\x5d\x20\x44\x45\x56" \
-"\x49\x43\x45\x20\x4e\x4f\x44\x45\x0a\x0a\x4d\x6f\x75\x6e\x74\x20" \
-"\x61\x20\x66\x69\x6c\x65\x73\x79\x73\x74\x65\x6d\x2e\x20\x46\x69" \
-"\x6c\x65\x73\x79\x73\x74\x65\x6d\x20\x61\x75\x74\x6f\x64\x65\x74" \
-"\x65\x63\x74\x69\x6f\x6e\x20\x72\x65\x71\x75\x69\x72\x65\x73\x20" \
-"\x2f\x70\x72\x6f\x63\x2e\x0a\x0a\x09\x2d\x61\x09\x09\x4d\x6f\x75" \
-"\x6e\x74\x20\x61\x6c\x6c\x20\x66\x69\x6c\x65\x73\x79\x73\x74\x65" \
-"\x6d\x73\x20\x69\x6e\x20\x66\x73\x74\x61\x62\x0a\x09\x2d\x72\x09" \
-"\x09\x52\x65\x61\x64\x2d\x6f\x6e\x6c\x79\x20\x6d\x6f\x75\x6e\x74" \
-"\x0a\x09\x2d\x77\x09\x09\x52\x65\x61\x64\x2d\x77\x72\x69\x74\x65" \
-"\x20\x6d\x6f\x75\x6e\x74\x20\x28\x64\x65\x66\x61\x75\x6c\x74\x29" \
-"\x0a\x09\x2d\x74\x20\x46\x53\x54\x59\x50\x45\x5b\x2c\x2e\x2e\x2e" \
-"\x5d\x09\x46\x69\x6c\x65\x73\x79\x73\x74\x65\x6d\x20\x74\x79\x70" \
-"\x65\x28\x73\x29\x0a\x09\x2d\x4f\x20\x4f\x50\x54\x09\x09\x4d\x6f" \
-"\x75\x6e\x74\x20\x6f\x6e\x6c\x79\x20\x66\x69\x6c\x65\x73\x79\x73" \
-"\x74\x65\x6d\x73\x20\x77\x69\x74\x68\x20\x6f\x70\x74\x69\x6f\x6e" \
-"\x20\x4f\x50\x54\x20\x28\x2d\x61\x20\x6f\x6e\x6c\x79\x29\x0a\x2d" \
-"\x6f\x20\x4f\x50\x54\x3a\x0a\x09\x6c\x6f\x6f\x70\x09\x09\x49\x67" \
-"\x6e\x6f\x72\x65\x64\x20\x28\x6c\x6f\x6f\x70\x20\x64\x65\x76\x69" \
-"\x63\x65\x73\x20\x61\x72\x65\x20\x61\x75\x74\x6f\x64\x65\x74\x65" \
-"\x63\x74\x65\x64\x29\x0a\x09\x5b\x61\x5d\x73\x79\x6e\x63\x09\x09" \
-"\x57\x72\x69\x74\x65\x73\x20\x61\x72\x65\x20\x5b\x61\x5d\x73\x79" \
-"\x6e\x63\x68\x72\x6f\x6e\x6f\x75\x73\x0a\x09\x5b\x6e\x6f\x5d\x61" \
-"\x74\x69\x6d\x65\x09\x44\x69\x73\x61\x62\x6c\x65\x2f\x65\x6e\x61" \
-"\x62\x6c\x65\x20\x75\x70\x64\x61\x74\x65\x73\x20\x74\x6f\x20\x69" \
-"\x6e\x6f\x64\x65\x20\x61\x63\x63\x65\x73\x73\x20\x74\x69\x6d\x65" \
-"\x73\x0a\x09\x5b\x6e\x6f\x5d\x64\x69\x72\x61\x74\x69\x6d\x65\x09" \
-"\x44\x69\x73\x61\x62\x6c\x65\x2f\x65\x6e\x61\x62\x6c\x65\x20\x61" \
-"\x74\x69\x6d\x65\x20\x75\x70\x64\x61\x74\x65\x73\x20\x74\x6f\x20" \
-"\x64\x69\x72\x65\x63\x74\x6f\x72\x69\x65\x73\x0a\x09\x5b\x6e\x6f" \
-"\x5d\x72\x65\x6c\x61\x74\x69\x6d\x65\x09\x44\x69\x73\x61\x62\x6c" \
-"\x65\x2f\x65\x6e\x61\x62\x6c\x65\x20\x61\x74\x69\x6d\x65\x20\x75" \
-"\x70\x64\x61\x74\x65\x73\x20\x72\x65\x6c\x61\x74\x69\x76\x65\x20" \
-"\x74\x6f\x20\x6d\x6f\x64\x69\x66\x69\x63\x61\x74\x69\x6f\x6e\x20" \
-"\x74\x69\x6d\x65\x0a\x09\x5b\x6e\x6f\x5d\x64\x65\x76\x09\x09\x28" \
-"\x44\x69\x73\x29\x61\x6c\x6c\x6f\x77\x20\x75\x73\x65\x20\x6f\x66" \
-"\x20\x73\x70\x65\x63\x69\x61\x6c\x20\x64\x65\x76\x69\x63\x65\x20" \
-"\x66\x69\x6c\x65\x73\x0a\x09\x5b\x6e\x6f\x5d\x65\x78\x65\x63\x09" \
-"\x28\x44\x69\x73\x29\x61\x6c\x6c\x6f\x77\x20\x75\x73\x65\x20\x6f" \
-"\x66\x20\x65\x78\x65\x63\x75\x74\x61\x62\x6c\x65\x20\x66\x69\x6c" \
-"\x65\x73\x0a\x09\x5b\x6e\x6f\x5d\x73\x75\x69\x64\x09\x28\x44\x69" \
-"\x73\x29\x61\x6c\x6c\x6f\x77\x20\x73\x65\x74\x2d\x75\x73\x65\x72" \
-"\x2d\x69\x64\x2d\x72\x6f\x6f\x74\x20\x70\x72\x6f\x67\x72\x61\x6d" \
-"\x73\x0a\x09\x5b\x72\x5d\x73\x68\x61\x72\x65\x64\x09\x43\x6f\x6e" \
-"\x76\x65\x72\x74\x20\x5b\x72\x65\x63\x75\x72\x73\x69\x76\x65\x6c" \
-"\x79\x5d\x20\x74\x6f\x20\x61\x20\x73\x68\x61\x72\x65\x64\x20\x73" \
-"\x75\x62\x74\x72\x65\x65\x0a\x09\x5b\x72\x5d\x73\x6c\x61\x76\x65" \
-"\x09\x43\x6f\x6e\x76\x65\x72\x74\x20\x5b\x72\x65\x63\x75\x72\x73" \
-"\x69\x76\x65\x6c\x79\x5d\x20\x74\x6f\x20\x61\x20\x73\x6c\x61\x76" \
-"\x65\x20\x73\x75\x62\x74\x72\x65\x65\x0a\x09\x5b\x72\x5d\x70\x72" \
-"\x69\x76\x61\x74\x65\x09\x43\x6f\x6e\x76\x65\x72\x74\x20\x5b\x72" \
-"\x65\x63\x75\x72\x73\x69\x76\x65\x6c\x79\x5d\x20\x74\x6f\x20\x61" \
-"\x20\x70\x72\x69\x76\x61\x74\x65\x20\x73\x75\x62\x74\x72\x65\x65" \
-"\x0a\x09\x5b\x75\x6e\x5d\x62\x69\x6e\x64\x61\x62\x6c\x65\x09\x4d" \
-"\x61\x6b\x65\x20\x6d\x6f\x75\x6e\x74\x20\x70\x6f\x69\x6e\x74\x20" \
-"\x5b\x75\x6e\x5d\x61\x62\x6c\x65\x20\x74\x6f\x20\x62\x65\x20\x62" \
-"\x69\x6e\x64\x20\x6d\x6f\x75\x6e\x74\x65\x64\x0a\x09\x5b\x72\x5d" \
-"\x62\x69\x6e\x64\x09\x09\x42\x69\x6e\x64\x20\x61\x20\x66\x69\x6c" \
-"\x65\x20\x6f\x72\x20\x64\x69\x72\x65\x63\x74\x6f\x72\x79\x20\x5b" \
-"\x72\x65\x63\x75\x72\x73\x69\x76\x65\x6c\x79\x5d\x20\x74\x6f\x20" \
-"\x61\x6e\x6f\x74\x68\x65\x72\x20\x6c\x6f\x63\x61\x74\x69\x6f\x6e" \
-"\x0a\x09\x6d\x6f\x76\x65\x09\x09\x52\x65\x6c\x6f\x63\x61\x74\x65" \
-"\x20\x61\x6e\x20\x65\x78\x69\x73\x74\x69\x6e\x67\x20\x6d\x6f\x75" \
-"\x6e\x74\x20\x70\x6f\x69\x6e\x74\x0a\x09\x72\x65\x6d\x6f\x75\x6e" \
-"\x74\x09\x09\x52\x65\x6d\x6f\x75\x6e\x74\x20\x61\x20\x6d\x6f\x75" \
-"\x6e\x74\x65\x64\x20\x66\x69\x6c\x65\x73\x79\x73\x74\x65\x6d\x2c" \
-"\x20\x63\x68\x61\x6e\x67\x69\x6e\x67\x20\x66\x6c\x61\x67\x73\x0a" \
-"\x09\x72\x6f\x2f\x72\x77\x09\x09\x53\x61\x6d\x65\x20\x61\x73\x20" \
-"\x2d\x72\x2f\x2d\x77\x0a\x0a\x54\x68\x65\x72\x65\x20\x61\x72\x65" \
-"\x20\x66\x69\x6c\x65\x73\x79\x73\x74\x65\x6d\x2d\x73\x70\x65\x63" \
-"\x69\x66\x69\x63\x20\x2d\x6f\x20\x66\x6c\x61\x67\x73\x2e\x00\x5b" \
-"\x2d\x71\x5d\x20\x3c\x5b\x2d\x64\x6e\x5d\x20\x44\x49\x52\x20\x7c" \
-"\x20\x2d\x78\x20\x44\x45\x56\x49\x43\x45\x3e\x0a\x0a\x43\x68\x65" \
-"\x63\x6b\x20\x69\x66\x20\x74\x68\x65\x20\x64\x69\x72\x65\x63\x74" \
-"\x6f\x72\x79\x20\x69\x73\x20\x61\x20\x6d\x6f\x75\x6e\x74\x70\x6f" \
-"\x69\x6e\x74\x0a\x0a\x09\x2d\x71\x09\x51\x75\x69\x65\x74\x0a\x09" \
-"\x2d\x64\x09\x50\x72\x69\x6e\x74\x20\x6d\x61\x6a\x6f\x72\x2f\x6d" \
-"\x69\x6e\x6f\x72\x20\x64\x65\x76\x69\x63\x65\x20\x6e\x75\x6d\x62" \
-"\x65\x72\x20\x6f\x66\x20\x74\x68\x65\x20\x66\x69\x6c\x65\x73\x79" \
-"\x73\x74\x65\x6d\x0a\x09\x2d\x6e\x09\x50\x72\x69\x6e\x74\x20\x64" \
-"\x65\x76\x69\x63\x65\x20\x6e\x61\x6d\x65\x20\x6f\x66\x20\x74\x68" \
-"\x65\x20\x66\x69\x6c\x65\x73\x79\x73\x74\x65\x6d\x0a\x09\x2d\x78" \
-"\x09\x50\x72\x69\x6e\x74\x20\x6d\x61\x6a\x6f\x72\x2f\x6d\x69\x6e" \
-"\x6f\x72\x20\x64\x65\x76\x69\x63\x65\x20\x6e\x75\x6d\x62\x65\x72" \
-"\x20\x6f\x66\x20\x74\x68\x65\x20\x62\x6c\x6f\x63\x6b\x64\x65\x76" \
-"\x69\x63\x65\x00\x5b\x2d\x66\x69\x6e\x5d\x20\x53\x4f\x55\x52\x43" \
-"\x45\x20\x44\x45\x53\x54\x0a\x6f\x72\x3a\x20\x6d\x76\x20\x5b\x2d" \
-"\x66\x69\x6e\x5d\x20\x53\x4f\x55\x52\x43\x45\x2e\x2e\x2e\x20\x44" \
-"\x49\x52\x45\x43\x54\x4f\x52\x59\x0a\x0a\x52\x65\x6e\x61\x6d\x65" \
-"\x20\x53\x4f\x55\x52\x43\x45\x20\x74\x6f\x20\x44\x45\x53\x54\x2c" \
-"\x20\x6f\x72\x20\x6d\x6f\x76\x65\x20\x53\x4f\x55\x52\x43\x45\x28" \
-"\x73\x29\x20\x74\x6f\x20\x44\x49\x52\x45\x43\x54\x4f\x52\x59\x0a" \
-"\x0a\x09\x2d\x66\x09\x44\x6f\x6e\x27\x74\x20\x70\x72\x6f\x6d\x70" \
-"\x74\x20\x62\x65\x66\x6f\x72\x65\x20\x6f\x76\x65\x72\x77\x72\x69" \
-"\x74\x69\x6e\x67\x0a\x09\x2d\x69\x09\x49\x6e\x74\x65\x72\x61\x63" \
-"\x74\x69\x76\x65\x2c\x20\x70\x72\x6f\x6d\x70\x74\x20\x62\x65\x66" \
-"\x6f\x72\x65\x20\x6f\x76\x65\x72\x77\x72\x69\x74\x65\x0a\x09\x2d" \
-"\x6e\x09\x44\x6f\x6e\x27\x74\x20\x6f\x76\x65\x72\x77\x72\x69\x74" \
-"\x65\x20\x61\x6e\x20\x65\x78\x69\x73\x74\x69\x6e\x67\x20\x66\x69" \
-"\x6c\x65\x00\x5b\x2d\x6f\x5d\x20\x5b\x2d\x62\x5d\x20\x5b\x2d\x73" \
-"\x20\x41\x44\x44\x52\x5d\x20\x5b\x2d\x66\x20\x46\x49\x4c\x45\x5d" \
-"\x20\x4d\x54\x44\x5f\x44\x45\x56\x49\x43\x45\x0a\x0a\x44\x75\x6d" \
-"\x70\x20\x74\x68\x65\x20\x73\x70\x65\x63\x69\x66\x69\x65\x64\x20" \
-"\x4d\x54\x44\x20\x64\x65\x76\x69\x63\x65\x0a\x0a\x09\x2d\x6f\x09" \
-"\x44\x75\x6d\x70\x20\x6f\x6f\x62\x20\x64\x61\x74\x61\x0a\x09\x2d" \
-"\x62\x09\x4f\x6d\x69\x74\x20\x62\x61\x64\x20\x62\x6c\x6f\x63\x6b" \
-"\x20\x66\x72\x6f\x6d\x20\x74\x68\x65\x20\x64\x75\x6d\x70\x0a\x09" \
-"\x2d\x73\x20\x41\x44\x44\x52\x09\x53\x74\x61\x72\x74\x20\x61\x64" \
-"\x64\x72\x65\x73\x73\x0a\x09\x2d\x6c\x20\x4c\x45\x4e\x09\x4c\x65" \
-"\x6e\x67\x74\x68\x0a\x09\x2d\x66\x20\x46\x49\x4c\x45\x09\x44\x75" \
-"\x6d\x70\x20\x74\x6f\x20\x66\x69\x6c\x65\x20\x28\x27\x2d\x27\x20" \
-"\x66\x6f\x72\x20\x73\x74\x64\x6f\x75\x74\x29\x00\x5b\x2d\x70\x5d" \
-"\x20\x5b\x2d\x73\x20\x41\x44\x44\x52\x5d\x20\x4d\x54\x44\x5f\x44" \
-"\x45\x56\x49\x43\x45\x20\x5b\x46\x49\x4c\x45\x5d\x0a\x0a\x57\x72" \
-"\x69\x74\x65\x20\x74\x6f\x20\x74\x68\x65\x20\x73\x70\x65\x63\x69" \
-"\x66\x69\x65\x64\x20\x4d\x54\x44\x20\x64\x65\x76\x69\x63\x65\x0a" \
-"\x0a\x09\x2d\x70\x09\x50\x61\x64\x20\x74\x6f\x20\x70\x61\x67\x65" \
-"\x20\x73\x69\x7a\x65\x0a\x09\x2d\x73\x20\x41\x44\x44\x52\x09\x53" \
-"\x74\x61\x72\x74\x20\x61\x64\x64\x72\x65\x73\x73\x00\x5b\x2d\x6e" \
-"\x20\x41\x44\x4a\x55\x53\x54\x5d\x20\x5b\x50\x52\x4f\x47\x20\x41" \
-"\x52\x47\x53\x5d\x0a\x0a\x43\x68\x61\x6e\x67\x65\x20\x73\x63\x68" \
-"\x65\x64\x75\x6c\x69\x6e\x67\x20\x70\x72\x69\x6f\x72\x69\x74\x79" \
-"\x2c\x20\x72\x75\x6e\x20\x50\x52\x4f\x47\x0a\x0a\x09\x2d\x6e\x20" \
-"\x41\x44\x4a\x55\x53\x54\x09\x41\x64\x6a\x75\x73\x74\x20\x70\x72" \
-"\x69\x6f\x72\x69\x74\x79\x20\x62\x79\x20\x41\x44\x4a\x55\x53\x54" \
-"\x00\x50\x52\x4f\x47\x20\x41\x52\x47\x53\x0a\x0a\x52\x75\x6e\x20" \
-"\x50\x52\x4f\x47\x20\x69\x6d\x6d\x75\x6e\x65\x20\x74\x6f\x20\x68" \
-"\x61\x6e\x67\x75\x70\x73\x2c\x20\x77\x69\x74\x68\x20\x6f\x75\x74" \
-"\x70\x75\x74\x20\x74\x6f\x20\x61\x20\x6e\x6f\x6e\x2d\x74\x74\x79" \
-"\x00\x5b\x2d\x61\x42\x62\x63\x44\x64\x65\x46\x66\x48\x68\x49\x69" \
-"\x4c\x6c\x4f\x6f\x76\x58\x78\x5d\x20\x5b\x46\x49\x4c\x45\x5d\x0a" \
-"\x0a\x50\x72\x69\x6e\x74\x20\x46\x49\x4c\x45\x20\x28\x6f\x72\x20" \
-"\x73\x74\x64\x69\x6e\x29\x20\x75\x6e\x61\x6d\x62\x69\x67\x75\x6f" \
-"\x75\x73\x6c\x79\x2c\x20\x61\x73\x20\x6f\x63\x74\x61\x6c\x20\x62" \
-"\x79\x74\x65\x73\x20\x62\x79\x20\x64\x65\x66\x61\x75\x6c\x74\x00" \
-"\x5b\x4f\x50\x54\x49\x4f\x4e\x53\x5d\x20\x5b\x4f\x52\x49\x47\x46" \
-"\x49\x4c\x45\x20\x5b\x50\x41\x54\x43\x48\x46\x49\x4c\x45\x5d\x5d" \
-"\x0a\x0a\x09\x2d\x70\x2c\x2d\x2d\x73\x74\x72\x69\x70\x20\x4e\x09" \
-"\x09\x53\x74\x72\x69\x70\x20\x4e\x20\x6c\x65\x61\x64\x69\x6e\x67" \
-"\x20\x63\x6f\x6d\x70\x6f\x6e\x65\x6e\x74\x73\x20\x66\x72\x6f\x6d" \
-"\x20\x66\x69\x6c\x65\x20\x6e\x61\x6d\x65\x73\x0a\x09\x2d\x69\x2c" \
-"\x2d\x2d\x69\x6e\x70\x75\x74\x20\x44\x49\x46\x46\x09\x09\x52\x65" \
-"\x61\x64\x20\x44\x49\x46\x46\x20\x69\x6e\x73\x74\x65\x61\x64\x20" \
-"\x6f\x66\x20\x73\x74\x64\x69\x6e\x0a\x09\x2d\x52\x2c\x2d\x2d\x72" \
-"\x65\x76\x65\x72\x73\x65\x09\x09\x52\x65\x76\x65\x72\x73\x65\x20" \
-"\x70\x61\x74\x63\x68\x0a\x09\x2d\x4e\x2c\x2d\x2d\x66\x6f\x72\x77" \
-"\x61\x72\x64\x09\x09\x49\x67\x6e\x6f\x72\x65\x20\x61\x6c\x72\x65" \
-"\x61\x64\x79\x20\x61\x70\x70\x6c\x69\x65\x64\x20\x70\x61\x74\x63" \
-"\x68\x65\x73\x0a\x09\x2d\x45\x2c\x2d\x2d\x72\x65\x6d\x6f\x76\x65" \
-"\x2d\x65\x6d\x70\x74\x79\x2d\x66\x69\x6c\x65\x73\x09\x52\x65\x6d" \
-"\x6f\x76\x65\x20\x6f\x75\x74\x70\x75\x74\x20\x66\x69\x6c\x65\x73" \
-"\x20\x69\x66\x20\x74\x68\x65\x79\x20\x62\x65\x63\x6f\x6d\x65\x20" \
-"\x65\x6d\x70\x74\x79\x00\x5b\x2d\x66\x6c\x6e\x6f\x76\x78\x5d\x20" \
-"\x5b\x2d\x73\x20\x53\x49\x44\x7c\x2d\x50\x20\x50\x50\x49\x44\x7c" \
-"\x50\x41\x54\x54\x45\x52\x4e\x5d\x0a\x0a\x44\x69\x73\x70\x6c\x61" \
-"\x79\x20\x70\x72\x6f\x63\x65\x73\x73\x28\x65\x73\x29\x20\x73\x65" \
-"\x6c\x65\x63\x74\x65\x64\x20\x62\x79\x20\x72\x65\x67\x65\x78\x20" \
-"\x50\x41\x54\x54\x45\x52\x4e\x0a\x0a\x09\x2d\x6c\x09\x53\x68\x6f" \
-"\x77\x20\x63\x6f\x6d\x6d\x61\x6e\x64\x20\x6e\x61\x6d\x65\x20\x74" \
-"\x6f\x6f\x0a\x09\x2d\x66\x09\x4d\x61\x74\x63\x68\x20\x61\x67\x61" \
-"\x69\x6e\x73\x74\x20\x65\x6e\x74\x69\x72\x65\x20\x63\x6f\x6d\x6d" \
-"\x61\x6e\x64\x20\x6c\x69\x6e\x65\x0a\x09\x2d\x6e\x09\x53\x68\x6f" \
-"\x77\x20\x74\x68\x65\x20\x6e\x65\x77\x65\x73\x74\x20\x70\x72\x6f" \
-"\x63\x65\x73\x73\x20\x6f\x6e\x6c\x79\x0a\x09\x2d\x6f\x09\x53\x68" \
-"\x6f\x77\x20\x74\x68\x65\x20\x6f\x6c\x64\x65\x73\x74\x20\x70\x72" \
-"\x6f\x63\x65\x73\x73\x20\x6f\x6e\x6c\x79\x0a\x09\x2d\x76\x09\x4e" \
-"\x65\x67\x61\x74\x65\x20\x74\x68\x65\x20\x6d\x61\x74\x63\x68\x0a" \
-"\x09\x2d\x78\x09\x4d\x61\x74\x63\x68\x20\x77\x68\x6f\x6c\x65\x20" \
-"\x6e\x61\x6d\x65\x20\x28\x6e\x6f\x74\x20\x73\x75\x62\x73\x74\x72" \
-"\x69\x6e\x67\x29\x0a\x09\x2d\x73\x09\x4d\x61\x74\x63\x68\x20\x73" \
-"\x65\x73\x73\x69\x6f\x6e\x20\x49\x44\x20\x28\x30\x20\x66\x6f\x72" \
-"\x20\x63\x75\x72\x72\x65\x6e\x74\x29\x0a\x09\x2d\x50\x09\x4d\x61" \
-"\x74\x63\x68\x20\x70\x61\x72\x65\x6e\x74\x20\x70\x72\x6f\x63\x65" \
-"\x73\x73\x20\x49\x44\x00\x5b\x4f\x50\x54\x49\x4f\x4e\x53\x5d\x20" \
-"\x5b\x4e\x41\x4d\x45\x5d\x2e\x2e\x2e\x0a\x0a\x4c\x69\x73\x74\x20" \
-"\x50\x49\x44\x73\x20\x6f\x66\x20\x61\x6c\x6c\x20\x70\x72\x6f\x63" \
-"\x65\x73\x73\x65\x73\x20\x77\x69\x74\x68\x20\x6e\x61\x6d\x65\x73" \
-"\x20\x74\x68\x61\x74\x20\x6d\x61\x74\x63\x68\x20\x4e\x41\x4d\x45" \
-"\x73\x0a\x0a\x09\x2d\x73\x09\x53\x68\x6f\x77\x20\x6f\x6e\x6c\x79" \
-"\x20\x6f\x6e\x65\x20\x50\x49\x44\x0a\x09\x2d\x6f\x20\x50\x49\x44" \
-"\x09\x4f\x6d\x69\x74\x20\x67\x69\x76\x65\x6e\x20\x70\x69\x64\x0a" \
-"\x09\x09\x55\x73\x65\x20\x25\x50\x50\x49\x44\x20\x74\x6f\x20\x6f" \
-"\x6d\x69\x74\x20\x70\x69\x64\x20\x6f\x66\x20\x70\x69\x64\x6f\x66" \
-"\x27\x73\x20\x70\x61\x72\x65\x6e\x74\x00\x5b\x2d\x6c\x7c\x2d\x53" \
-"\x49\x47\x4e\x41\x4c\x5d\x20\x5b\x2d\x66\x6e\x6f\x76\x78\x5d\x20" \
-"\x5b\x2d\x73\x20\x53\x49\x44\x7c\x2d\x50\x20\x50\x50\x49\x44\x7c" \
-"\x50\x41\x54\x54\x45\x52\x4e\x5d\x0a\x0a\x53\x65\x6e\x64\x20\x61" \
-"\x20\x73\x69\x67\x6e\x61\x6c\x20\x74\x6f\x20\x70\x72\x6f\x63\x65" \
-"\x73\x73\x28\x65\x73\x29\x20\x73\x65\x6c\x65\x63\x74\x65\x64\x20" \
-"\x62\x79\x20\x72\x65\x67\x65\x78\x20\x50\x41\x54\x54\x45\x52\x4e" \
-"\x0a\x0a\x09\x2d\x6c\x09\x4c\x69\x73\x74\x20\x61\x6c\x6c\x20\x73" \
-"\x69\x67\x6e\x61\x6c\x73\x0a\x09\x2d\x66\x09\x4d\x61\x74\x63\x68" \
-"\x20\x61\x67\x61\x69\x6e\x73\x74\x20\x65\x6e\x74\x69\x72\x65\x20" \
-"\x63\x6f\x6d\x6d\x61\x6e\x64\x20\x6c\x69\x6e\x65\x0a\x09\x2d\x6e" \
-"\x09\x53\x69\x67\x6e\x61\x6c\x20\x74\x68\x65\x20\x6e\x65\x77\x65" \
-"\x73\x74\x20\x70\x72\x6f\x63\x65\x73\x73\x20\x6f\x6e\x6c\x79\x0a" \
-"\x09\x2d\x6f\x09\x53\x69\x67\x6e\x61\x6c\x20\x74\x68\x65\x20\x6f" \
-"\x6c\x64\x65\x73\x74\x20\x70\x72\x6f\x63\x65\x73\x73\x20\x6f\x6e" \
-"\x6c\x79\x0a\x09\x2d\x76\x09\x4e\x65\x67\x61\x74\x65\x20\x74\x68" \
-"\x65\x20\x6d\x61\x74\x63\x68\x0a\x09\x2d\x78\x09\x4d\x61\x74\x63" \
-"\x68\x20\x77\x68\x6f\x6c\x65\x20\x6e\x61\x6d\x65\x20\x28\x6e\x6f" \
-"\x74\x20\x73\x75\x62\x73\x74\x72\x69\x6e\x67\x29\x0a\x09\x2d\x73" \
-"\x09\x4d\x61\x74\x63\x68\x20\x73\x65\x73\x73\x69\x6f\x6e\x20\x49" \
-"\x44\x20\x28\x30\x20\x66\x6f\x72\x20\x63\x75\x72\x72\x65\x6e\x74" \
-"\x29\x0a\x09\x2d\x50\x09\x4d\x61\x74\x63\x68\x20\x70\x61\x72\x65" \
-"\x6e\x74\x20\x70\x72\x6f\x63\x65\x73\x73\x20\x49\x44\x00\x5b\x56" \
-"\x41\x52\x49\x41\x42\x4c\x45\x5d\x2e\x2e\x2e\x0a\x0a\x50\x72\x69" \
-"\x6e\x74\x20\x65\x6e\x76\x69\x72\x6f\x6e\x6d\x65\x6e\x74\x20\x56" \
-"\x41\x52\x49\x41\x42\x4c\x45\x73\x2e\x0a\x49\x66\x20\x6e\x6f\x20" \
-"\x56\x41\x52\x49\x41\x42\x4c\x45\x20\x73\x70\x65\x63\x69\x66\x69" \
-"\x65\x64\x2c\x20\x70\x72\x69\x6e\x74\x20\x61\x6c\x6c\x2e\x00\x46" \
-"\x4f\x52\x4d\x41\x54\x20\x5b\x41\x52\x47\x5d\x2e\x2e\x2e\x0a\x0a" \
-"\x46\x6f\x72\x6d\x61\x74\x20\x61\x6e\x64\x20\x70\x72\x69\x6e\x74" \
-"\x20\x41\x52\x47\x28\x73\x29\x20\x61\x63\x63\x6f\x72\x64\x69\x6e" \
-"\x67\x20\x74\x6f\x20\x46\x4f\x52\x4d\x41\x54\x20\x28\x61\x2d\x6c" \
-"\x61\x20\x43\x20\x70\x72\x69\x6e\x74\x66\x29\x00\x0a\x0a\x53\x68" \
-"\x6f\x77\x20\x6c\x69\x73\x74\x20\x6f\x66\x20\x70\x72\x6f\x63\x65" \
-"\x73\x73\x65\x73\x0a\x0a\x09\x77\x09\x57\x69\x64\x65\x20\x6f\x75" \
-"\x74\x70\x75\x74\x0a\x09\x6c\x09\x4c\x6f\x6e\x67\x20\x6f\x75\x74" \
-"\x70\x75\x74\x0a\x09\x54\x09\x53\x68\x6f\x77\x20\x74\x68\x72\x65" \
-"\x61\x64\x73\x00\x5b\x2d\x70\x5d\x20\x5b\x50\x49\x44\x7c\x55\x53" \
-"\x45\x52\x5d\x0a\x0a\x44\x69\x73\x70\x6c\x61\x79\x20\x70\x72\x6f" \
-"\x63\x65\x73\x73\x20\x74\x72\x65\x65\x2c\x20\x6f\x70\x74\x69\x6f" \
-"\x6e\x61\x6c\x6c\x79\x20\x73\x74\x61\x72\x74\x20\x66\x72\x6f\x6d" \
-"\x20\x55\x53\x45\x52\x20\x6f\x72\x20\x50\x49\x44\x0a\x0a\x09\x2d" \
-"\x70\x09\x53\x68\x6f\x77\x20\x70\x69\x64\x73\x00\x0a\x0a\x50\x72" \
-"\x69\x6e\x74\x20\x74\x68\x65\x20\x66\x75\x6c\x6c\x20\x66\x69\x6c" \
-"\x65\x6e\x61\x6d\x65\x20\x6f\x66\x20\x74\x68\x65\x20\x63\x75\x72" \
-"\x72\x65\x6e\x74\x20\x77\x6f\x72\x6b\x69\x6e\x67\x20\x64\x69\x72" \
-"\x65\x63\x74\x6f\x72\x79\x00\x0a\x0a\x50\x72\x69\x6e\x74\x20\x74" \
-"\x68\x65\x20\x64\x65\x76\x69\x63\x65\x20\x6e\x6f\x64\x65\x20\x61" \
-"\x73\x73\x6f\x63\x69\x61\x74\x65\x64\x20\x77\x69\x74\x68\x20\x74" \
-"\x68\x65\x20\x66\x69\x6c\x65\x73\x79\x73\x74\x65\x6d\x20\x6d\x6f" \
-"\x75\x6e\x74\x65\x64\x20\x61\x74\x20\x27\x2f\x27\x00\x5b\x2d\x66" \
-"\x6e\x76\x5d\x20\x46\x49\x4c\x45\x0a\x0a\x44\x69\x73\x70\x6c\x61" \
-"\x79\x20\x74\x68\x65\x20\x76\x61\x6c\x75\x65\x20\x6f\x66\x20\x61" \
-"\x20\x73\x79\x6d\x6c\x69\x6e\x6b\x0a\x0a\x09\x2d\x66\x09\x43\x61" \
-"\x6e\x6f\x6e\x69\x63\x61\x6c\x69\x7a\x65\x20\x62\x79\x20\x66\x6f" \
-"\x6c\x6c\x6f\x77\x69\x6e\x67\x20\x61\x6c\x6c\x20\x73\x79\x6d\x6c" \
-"\x69\x6e\x6b\x73\x0a\x09\x2d\x6e\x09\x44\x6f\x6e\x27\x74\x20\x61" \
-"\x64\x64\x20\x6e\x65\x77\x6c\x69\x6e\x65\x0a\x09\x2d\x76\x09\x56" \
-"\x65\x72\x62\x6f\x73\x65\x00\x46\x49\x4c\x45\x2e\x2e\x2e\x0a\x0a" \
-"\x52\x65\x74\x75\x72\x6e\x20\x74\x68\x65\x20\x61\x62\x73\x6f\x6c" \
-"\x75\x74\x65\x20\x70\x61\x74\x68\x6e\x61\x6d\x65\x73\x20\x6f\x66" \
-"\x20\x67\x69\x76\x65\x6e\x20\x46\x49\x4c\x45\x00\x7b\x7b\x2d\x6e" \
-"\x20\x49\x4e\x43\x52\x45\x4d\x45\x4e\x54\x7d\x20\x7c\x20\x50\x52" \
-"\x49\x4f\x52\x49\x54\x59\x7d\x20\x5b\x5b\x2d\x70\x20\x7c\x20\x2d" \
-"\x67\x20\x7c\x20\x2d\x75\x5d\x20\x49\x44\x2e\x2e\x2e\x5d\x0a\x0a" \
-"\x43\x68\x61\x6e\x67\x65\x20\x73\x63\x68\x65\x64\x75\x6c\x69\x6e" \
-"\x67\x20\x70\x72\x69\x6f\x72\x69\x74\x79\x20\x66\x6f\x72\x20\x61" \
-"\x20\x72\x75\x6e\x6e\x69\x6e\x67\x20\x70\x72\x6f\x63\x65\x73\x73" \
-"\x0a\x0a\x09\x2d\x6e\x09\x41\x64\x6a\x75\x73\x74\x20\x63\x75\x72" \
-"\x72\x65\x6e\x74\x20\x6e\x69\x63\x65\x20\x76\x61\x6c\x75\x65\x20" \
-"\x28\x73\x6d\x61\x6c\x6c\x65\x72\x20\x69\x73\x20\x66\x61\x73\x74" \
-"\x65\x72\x29\x0a\x09\x2d\x70\x09\x50\x72\x6f\x63\x65\x73\x73\x20" \
-"\x69\x64\x28\x73\x29\x20\x28\x64\x65\x66\x61\x75\x6c\x74\x29\x0a" \
-"\x09\x2d\x67\x09\x50\x72\x6f\x63\x65\x73\x73\x20\x67\x72\x6f\x75" \
-"\x70\x20\x69\x64\x28\x73\x29\x0a\x09\x2d\x75\x09\x50\x72\x6f\x63" \
-"\x65\x73\x73\x20\x75\x73\x65\x72\x20\x6e\x61\x6d\x65\x28\x73\x29" \
-"\x20\x61\x6e\x64\x2f\x6f\x72\x20\x69\x64\x28\x73\x29\x00\x0a\x0a" \
-"\x52\x65\x73\x65\x74\x20\x74\x68\x65\x20\x73\x63\x72\x65\x65\x6e" \
-"\x00\x0a\x0a\x52\x65\x73\x69\x7a\x65\x20\x74\x68\x65\x20\x73\x63" \
-"\x72\x65\x65\x6e\x00\x5b\x46\x49\x4c\x45\x5d\x2e\x2e\x2e\x0a\x0a" \
-"\x52\x65\x76\x65\x72\x73\x65\x20\x6c\x69\x6e\x65\x73\x20\x6f\x66" \
-"\x20\x46\x49\x4c\x45\x00\x5b\x2d\x69\x72\x66\x5d\x20\x46\x49\x4c" \
-"\x45\x2e\x2e\x2e\x0a\x0a\x52\x65\x6d\x6f\x76\x65\x20\x28\x75\x6e" \
-"\x6c\x69\x6e\x6b\x29\x20\x46\x49\x4c\x45\x73\x0a\x0a\x09\x2d\x69" \
-"\x09\x41\x6c\x77\x61\x79\x73\x20\x70\x72\x6f\x6d\x70\x74\x20\x62" \
-"\x65\x66\x6f\x72\x65\x20\x72\x65\x6d\x6f\x76\x69\x6e\x67\x0a\x09" \
-"\x2d\x66\x09\x4e\x65\x76\x65\x72\x20\x70\x72\x6f\x6d\x70\x74\x0a" \
-"\x09\x2d\x52\x2c\x2d\x72\x09\x52\x65\x63\x75\x72\x73\x65\x00\x5b" \
-"\x4f\x50\x54\x49\x4f\x4e\x53\x5d\x20\x44\x49\x52\x45\x43\x54\x4f" \
-"\x52\x59\x2e\x2e\x2e\x0a\x0a\x52\x65\x6d\x6f\x76\x65\x20\x44\x49" \
-"\x52\x45\x43\x54\x4f\x52\x59\x20\x69\x66\x20\x69\x74\x20\x69\x73" \
-"\x20\x65\x6d\x70\x74\x79\x0a\x0a\x09\x2d\x70\x7c\x2d\x2d\x70\x61" \
-"\x72\x65\x6e\x74\x73\x09\x49\x6e\x63\x6c\x75\x64\x65\x20\x70\x61" \
-"\x72\x65\x6e\x74\x73\x0a\x09\x2d\x2d\x69\x67\x6e\x6f\x72\x65\x2d" \
-"\x66\x61\x69\x6c\x2d\x6f\x6e\x2d\x6e\x6f\x6e\x2d\x65\x6d\x70\x74" \
-"\x79\x00\x5b\x2d\x71\x66\x77\x72\x73\x76\x5d\x20\x4d\x4f\x44\x55" \
-"\x4c\x45\x20\x5b\x73\x79\x6d\x62\x6f\x6c\x3d\x76\x61\x6c\x75\x65" \
-"\x5d\x2e\x2e\x2e\x0a\x0a\x09\x2d\x72\x09\x52\x65\x6d\x6f\x76\x65" \
-"\x20\x4d\x4f\x44\x55\x4c\x45\x20\x28\x73\x74\x61\x63\x6b\x73\x29" \
-"\x20\x6f\x72\x20\x64\x6f\x20\x61\x75\x74\x6f\x63\x6c\x65\x61\x6e" \
-"\x0a\x09\x2d\x71\x09\x51\x75\x69\x65\x74\x0a\x09\x2d\x76\x09\x56" \
-"\x65\x72\x62\x6f\x73\x65\x0a\x09\x2d\x66\x09\x46\x6f\x72\x63\x65" \
-"\x0a\x09\x2d\x77\x09\x57\x61\x69\x74\x20\x66\x6f\x72\x20\x75\x6e" \
-"\x6c\x6f\x61\x64\x0a\x09\x2d\x73\x09\x52\x65\x70\x6f\x72\x74\x20" \
-"\x76\x69\x61\x20\x73\x79\x73\x6c\x6f\x67\x20\x69\x6e\x73\x74\x65" \
-"\x61\x64\x20\x6f\x66\x20\x73\x74\x64\x65\x72\x72\x00\x5b\x2d\x74" \
-"\x6c\x5d\x20\x5b\x2d\x61\x20\x41\x52\x47\x5d\x2e\x2e\x2e\x20\x5b" \
-"\x2d\x75\x20\x4d\x41\x53\x4b\x5d\x20\x44\x49\x52\x45\x43\x54\x4f" \
-"\x52\x59\x0a\x0a\x52\x75\x6e\x20\x61\x20\x62\x75\x6e\x63\x68\x20" \
-"\x6f\x66\x20\x73\x63\x72\x69\x70\x74\x73\x20\x69\x6e\x20\x44\x49" \
-"\x52\x45\x43\x54\x4f\x52\x59\x0a\x0a\x09\x2d\x74\x09\x44\x72\x79" \
-"\x20\x72\x75\x6e\x0a\x09\x2d\x6c\x09\x50\x72\x69\x6e\x74\x20\x6e" \
-"\x61\x6d\x65\x73\x20\x6f\x66\x20\x6d\x61\x74\x63\x68\x69\x6e\x67" \
-"\x20\x66\x69\x6c\x65\x73\x20\x65\x76\x65\x6e\x20\x69\x66\x20\x74" \
-"\x68\x65\x79\x20\x61\x72\x65\x20\x6e\x6f\x74\x20\x65\x78\x65\x63" \
-"\x75\x74\x61\x62\x6c\x65\x0a\x09\x2d\x61\x20\x41\x52\x47\x09\x50" \
-"\x61\x73\x73\x20\x41\x52\x47\x20\x61\x73\x20\x61\x72\x67\x75\x6d" \
-"\x65\x6e\x74\x20\x74\x6f\x20\x70\x72\x6f\x67\x72\x61\x6d\x73\x0a" \
-"\x09\x2d\x75\x20\x4d\x41\x53\x4b\x09\x53\x65\x74\x20\x75\x6d\x61" \
-"\x73\x6b\x20\x74\x6f\x20\x4d\x41\x53\x4b\x20\x62\x65\x66\x6f\x72" \
-"\x65\x20\x72\x75\x6e\x6e\x69\x6e\x67\x20\x70\x72\x6f\x67\x72\x61" \
-"\x6d\x73\x00\x5b\x2d\x69\x6e\x72\x5d\x20\x5b\x2d\x66\x20\x46\x49" \
-"\x4c\x45\x5d\x2e\x2e\x2e\x20\x5b\x2d\x65\x20\x43\x4d\x44\x5d\x2e" \
-"\x2e\x2e\x20\x5b\x46\x49\x4c\x45\x5d\x2e\x2e\x2e\x0a\x6f\x72\x3a" \
-"\x20\x73\x65\x64\x20\x5b\x2d\x69\x6e\x72\x5d\x20\x43\x4d\x44\x20" \
-"\x5b\x46\x49\x4c\x45\x5d\x2e\x2e\x2e\x0a\x0a\x09\x2d\x65\x20\x43" \
-"\x4d\x44\x09\x41\x64\x64\x20\x43\x4d\x44\x20\x74\x6f\x20\x73\x65" \
-"\x64\x20\x63\x6f\x6d\x6d\x61\x6e\x64\x73\x20\x74\x6f\x20\x62\x65" \
-"\x20\x65\x78\x65\x63\x75\x74\x65\x64\x0a\x09\x2d\x66\x20\x46\x49" \
-"\x4c\x45\x09\x41\x64\x64\x20\x46\x49\x4c\x45\x20\x63\x6f\x6e\x74" \
-"\x65\x6e\x74\x73\x20\x74\x6f\x20\x73\x65\x64\x20\x63\x6f\x6d\x6d" \
-"\x61\x6e\x64\x73\x20\x74\x6f\x20\x62\x65\x20\x65\x78\x65\x63\x75" \
-"\x74\x65\x64\x0a\x09\x2d\x69\x5b\x53\x46\x58\x5d\x09\x45\x64\x69" \
-"\x74\x20\x66\x69\x6c\x65\x73\x20\x69\x6e\x2d\x70\x6c\x61\x63\x65" \
-"\x20\x28\x6f\x74\x68\x65\x72\x77\x69\x73\x65\x20\x73\x65\x6e\x64" \
-"\x73\x20\x74\x6f\x20\x73\x74\x64\x6f\x75\x74\x29\x0a\x09\x09\x4f" \
-"\x70\x74\x69\x6f\x6e\x61\x6c\x6c\x79\x20\x62\x61\x63\x6b\x20\x66" \
-"\x69\x6c\x65\x73\x20\x75\x70\x2c\x20\x61\x70\x70\x65\x6e\x64\x69" \
-"\x6e\x67\x20\x53\x46\x58\x0a\x09\x2d\x6e\x09\x53\x75\x70\x70\x72" \
-"\x65\x73\x73\x20\x61\x75\x74\x6f\x6d\x61\x74\x69\x63\x20\x70\x72" \
-"\x69\x6e\x74\x69\x6e\x67\x20\x6f\x66\x20\x70\x61\x74\x74\x65\x72" \
-"\x6e\x20\x73\x70\x61\x63\x65\x0a\x09\x2d\x72\x09\x55\x73\x65\x20" \
-"\x65\x78\x74\x65\x6e\x64\x65\x64\x20\x72\x65\x67\x65\x78\x20\x73" \
-"\x79\x6e\x74\x61\x78\x0a\x0a\x49\x66\x20\x6e\x6f\x20\x2d\x65\x20" \
-"\x6f\x72\x20\x2d\x66\x2c\x20\x74\x68\x65\x20\x66\x69\x72\x73\x74" \
-"\x20\x6e\x6f\x6e\x2d\x6f\x70\x74\x69\x6f\x6e\x20\x61\x72\x67\x75" \
-"\x6d\x65\x6e\x74\x20\x69\x73\x20\x74\x68\x65\x20\x73\x65\x64\x20" \
-"\x63\x6f\x6d\x6d\x61\x6e\x64\x20\x73\x74\x72\x69\x6e\x67\x2e\x0a" \
-"\x52\x65\x6d\x61\x69\x6e\x69\x6e\x67\x20\x61\x72\x67\x75\x6d\x65" \
-"\x6e\x74\x73\x20\x61\x72\x65\x20\x69\x6e\x70\x75\x74\x20\x66\x69" \
-"\x6c\x65\x73\x20\x28\x73\x74\x64\x69\x6e\x20\x69\x66\x20\x6e\x6f" \
-"\x6e\x65\x29\x2e\x00\x5b\x2d\x77\x5d\x20\x5b\x2d\x73\x20\x53\x45" \
-"\x50\x5d\x20\x5b\x46\x49\x52\x53\x54\x20\x5b\x49\x4e\x43\x5d\x5d" \
-"\x20\x4c\x41\x53\x54\x0a\x0a\x50\x72\x69\x6e\x74\x20\x6e\x75\x6d" \
-"\x62\x65\x72\x73\x20\x66\x72\x6f\x6d\x20\x46\x49\x52\x53\x54\x20" \
-"\x74\x6f\x20\x4c\x41\x53\x54\x2c\x20\x69\x6e\x20\x73\x74\x65\x70" \
-"\x73\x20\x6f\x66\x20\x49\x4e\x43\x2e\x0a\x46\x49\x52\x53\x54\x2c" \
-"\x20\x49\x4e\x43\x20\x64\x65\x66\x61\x75\x6c\x74\x20\x74\x6f\x20" \
-"\x31\x2e\x0a\x0a\x09\x2d\x77\x09\x50\x61\x64\x20\x74\x6f\x20\x6c" \
-"\x61\x73\x74\x20\x77\x69\x74\x68\x20\x6c\x65\x61\x64\x69\x6e\x67" \
-"\x20\x7a\x65\x72\x6f\x73\x0a\x09\x2d\x73\x20\x53\x45\x50\x09\x53" \
-"\x74\x72\x69\x6e\x67\x20\x73\x65\x70\x61\x72\x61\x74\x6f\x72\x00" \
-"\x5b\x2d\x72\x5d\x20\x5b\x44\x45\x56\x49\x43\x45\x5d\x0a\x0a\x52" \
-"\x65\x64\x69\x72\x65\x63\x74\x20\x73\x79\x73\x74\x65\x6d\x20\x63" \
-"\x6f\x6e\x73\x6f\x6c\x65\x20\x6f\x75\x74\x70\x75\x74\x20\x74\x6f" \
-"\x20\x44\x45\x56\x49\x43\x45\x20\x28\x64\x65\x66\x61\x75\x6c\x74" \
-"\x3a\x20\x2f\x64\x65\x76\x2f\x74\x74\x79\x29\x0a\x0a\x09\x2d\x72" \
-"\x09\x52\x65\x73\x65\x74\x20\x6f\x75\x74\x70\x75\x74\x20\x74\x6f" \
-"\x20\x2f\x64\x65\x76\x2f\x63\x6f\x6e\x73\x6f\x6c\x65\x00\x5b\x2d" \
-"\x67\x61\x62\x47\x76\x7a\x56\x5d\x20\x44\x45\x56\x49\x43\x45\x20" \
-"\x5b\x50\x41\x52\x41\x4d\x45\x54\x45\x52\x20\x5b\x41\x52\x47\x5d" \
-"\x5d\x2e\x2e\x2e\x0a\x0a\x52\x65\x71\x75\x65\x73\x74\x20\x6f\x72" \
-"\x20\x73\x65\x74\x20\x4c\x69\x6e\x75\x78\x20\x73\x65\x72\x69\x61" \
-"\x6c\x20\x70\x6f\x72\x74\x20\x69\x6e\x66\x6f\x72\x6d\x61\x74\x69" \
-"\x6f\x6e\x0a\x0a\x09\x2d\x67\x09\x49\x6e\x74\x65\x72\x70\x72\x65" \
-"\x74\x20\x70\x61\x72\x61\x6d\x65\x74\x65\x72\x73\x20\x61\x73\x20" \
-"\x6c\x69\x73\x74\x20\x6f\x66\x20\x64\x65\x76\x69\x63\x65\x73\x20" \
-"\x66\x6f\x72\x20\x72\x65\x70\x6f\x72\x74\x69\x6e\x67\x0a\x09\x2d" \
-"\x61\x09\x50\x72\x69\x6e\x74\x20\x61\x6c\x6c\x20\x61\x76\x61\x69" \
-"\x6c\x61\x62\x6c\x65\x20\x69\x6e\x66\x6f\x72\x6d\x61\x74\x69\x6f" \
-"\x6e\x0a\x09\x2d\x62\x09\x50\x72\x69\x6e\x74\x20\x73\x75\x6d\x6d" \
-"\x61\x72\x79\x20\x69\x6e\x66\x6f\x72\x6d\x61\x74\x69\x6f\x6e\x0a" \
-"\x09\x2d\x47\x09\x50\x72\x69\x6e\x74\x20\x69\x6e\x20\x66\x6f\x72" \
-"\x6d\x20\x77\x68\x69\x63\x68\x20\x63\x61\x6e\x20\x62\x65\x20\x66" \
-"\x65\x64\x20\x62\x61\x63\x6b\x0a\x09\x09\x74\x6f\x20\x73\x65\x74" \
-"\x73\x65\x72\x69\x61\x6c\x20\x61\x73\x20\x63\x6f\x6d\x6d\x61\x6e" \
-"\x64\x20\x6c\x69\x6e\x65\x20\x70\x61\x72\x61\x6d\x65\x74\x65\x72" \
-"\x73\x0a\x09\x2d\x7a\x09\x5a\x65\x72\x6f\x20\x6f\x75\x74\x20\x73" \
-"\x65\x72\x69\x61\x6c\x20\x66\x6c\x61\x67\x73\x20\x62\x65\x66\x6f" \
-"\x72\x65\x20\x73\x65\x74\x74\x69\x6e\x67\x0a\x09\x2d\x76\x09\x56" \
-"\x65\x72\x62\x6f\x73\x65\x0a\x0a\x50\x61\x72\x61\x6d\x65\x74\x65" \
-"\x72\x73\x3a\x20\x28\x2a\x20\x3d\x20\x74\x61\x6b\x65\x73\x20\x61" \
-"\x6e\x20\x61\x72\x67\x75\x6d\x65\x6e\x74\x2c\x20\x5e\x20\x3d\x20" \
-"\x63\x61\x6e\x20\x62\x65\x20\x74\x75\x72\x6e\x65\x64\x20\x6f\x66" \
-"\x66\x20\x62\x79\x20\x70\x72\x65\x63\x65\x64\x69\x6e\x67\x20\x5e" \
-"\x29\x0a\x09\x2a\x70\x6f\x72\x74\x2c\x20\x2a\x69\x72\x71\x2c\x20" \
-"\x2a\x64\x69\x76\x69\x73\x6f\x72\x2c\x20\x2a\x75\x61\x72\x74\x2c" \
-"\x20\x2a\x62\x61\x75\x6e\x64\x5f\x62\x61\x73\x65\x2c\x20\x2a\x63" \
-"\x6c\x6f\x73\x65\x5f\x64\x65\x6c\x61\x79\x2c\x20\x2a\x63\x6c\x6f" \
-"\x73\x69\x6e\x67\x5f\x77\x61\x69\x74\x2c\x0a\x09\x5e\x66\x6f\x75" \
-"\x72\x70\x6f\x72\x74\x2c\x20\x5e\x61\x75\x74\x6f\x5f\x69\x72\x71" \
-"\x2c\x20\x5e\x73\x6b\x69\x70\x5f\x74\x65\x73\x74\x2c\x20\x5e\x73" \
-"\x61\x6b\x2c\x20\x5e\x73\x65\x73\x73\x69\x6f\x6e\x5f\x6c\x6f\x63" \
-"\x6b\x6f\x75\x74\x2c\x20\x5e\x70\x67\x72\x70\x5f\x6c\x6f\x63\x6b" \
-"\x6f\x75\x74\x2c\x0a\x09\x5e\x63\x61\x6c\x6c\x6f\x75\x74\x5f\x6e" \
-"\x6f\x68\x75\x70\x2c\x20\x5e\x73\x70\x6c\x69\x74\x5f\x74\x65\x72" \
-"\x6d\x69\x6f\x73\x2c\x20\x5e\x68\x75\x70\x5f\x6e\x6f\x74\x69\x66" \
-"\x79\x2c\x20\x5e\x6c\x6f\x77\x5f\x6c\x61\x74\x65\x6e\x63\x79\x2c" \
-"\x20\x61\x75\x74\x6f\x63\x6f\x6e\x66\x69\x67\x2c\x0a\x09\x73\x70" \
-"\x64\x5f\x6e\x6f\x72\x6d\x61\x6c\x2c\x20\x73\x70\x64\x5f\x68\x69" \
-"\x2c\x20\x73\x70\x64\x5f\x76\x68\x69\x2c\x20\x73\x70\x64\x5f\x73" \
-"\x68\x69\x2c\x20\x73\x70\x64\x5f\x77\x61\x72\x70\x2c\x20\x73\x70" \
-"\x64\x5f\x63\x75\x73\x74\x0a\x0a\x55\x41\x52\x54\x20\x74\x79\x70" \
-"\x65\x73\x3a\x0a\x09\x75\x6e\x6b\x6e\x6f\x77\x6e\x2c\x20\x38\x32" \
-"\x35\x30\x2c\x20\x31\x36\x34\x35\x30\x2c\x20\x31\x36\x35\x35\x30" \
-"\x2c\x20\x31\x36\x35\x35\x30\x41\x2c\x20\x43\x69\x72\x72\x75\x73" \
-"\x2c\x20\x31\x36\x36\x35\x30\x2c\x20\x31\x36\x36\x35\x30\x56\x32" \
-"\x2c\x20\x31\x36\x37\x35\x30\x2c\x0a\x09\x31\x36\x39\x35\x30\x2c" \
-"\x20\x31\x36\x39\x35\x34\x2c\x20\x31\x36\x36\x35\x34\x2c\x20\x31" \
-"\x36\x38\x35\x30\x2c\x20\x52\x53\x41\x2c\x20\x4e\x53\x31\x36\x35" \
-"\x35\x30\x41\x2c\x20\x58\x53\x43\x41\x4c\x45\x2c\x20\x52\x4d\x39" \
-"\x30\x30\x30\x2c\x20\x4f\x43\x54\x45\x4f\x4e\x2c\x20\x41\x52\x37" \
-"\x2c\x0a\x09\x55\x36\x5f\x31\x36\x35\x35\x30\x41\x00\x50\x52\x4f" \
-"\x47\x20\x41\x52\x47\x53\x0a\x0a\x52\x75\x6e\x20\x50\x52\x4f\x47" \
-"\x20\x69\x6e\x20\x61\x20\x6e\x65\x77\x20\x73\x65\x73\x73\x69\x6f" \
-"\x6e\x2e\x20\x50\x52\x4f\x47\x20\x77\x69\x6c\x6c\x20\x68\x61\x76" \
-"\x65\x20\x6e\x6f\x20\x63\x6f\x6e\x74\x72\x6f\x6c\x6c\x69\x6e\x67" \
-"\x20\x74\x65\x72\x6d\x69\x6e\x61\x6c\x0a\x61\x6e\x64\x20\x77\x69" \
-"\x6c\x6c\x20\x6e\x6f\x74\x20\x62\x65\x20\x61\x66\x66\x65\x63\x74" \
-"\x65\x64\x20\x62\x79\x20\x6b\x65\x79\x62\x6f\x61\x72\x64\x20\x73" \
-"\x69\x67\x6e\x61\x6c\x73\x20\x28\x43\x74\x72\x6c\x2d\x43\x20\x65" \
-"\x74\x63\x29\x2e\x0a\x53\x65\x65\x20\x73\x65\x74\x73\x69\x64\x28" \
-"\x32\x29\x20\x66\x6f\x72\x20\x64\x65\x74\x61\x69\x6c\x73\x2e\x00" \
-"\x5b\x2d\x2f\x2b\x4f\x50\x54\x49\x4f\x4e\x53\x5d\x20\x5b\x2d\x2f" \
-"\x2b\x6f\x20\x4f\x50\x54\x5d\x2e\x2e\x2e\x20\x5b\x2d\x63\x20\x27" \
-"\x53\x43\x52\x49\x50\x54\x27\x20\x5b\x41\x52\x47\x30\x20\x5b\x41" \
-"\x52\x47\x53\x5d\x5d\x20\x2f\x20\x46\x49\x4c\x45\x20\x5b\x41\x52" \
-"\x47\x53\x5d\x5d\x0a\x0a\x55\x6e\x69\x78\x20\x73\x68\x65\x6c\x6c" \
-"\x20\x69\x6e\x74\x65\x72\x70\x72\x65\x74\x65\x72\x00\x5b\x2d\x63" \
-"\x5b\x73\x77\x5d\x5d\x20\x5b\x46\x49\x4c\x45\x5d\x2e\x2e\x2e\x0a" \
-"\x0a\x50\x72\x69\x6e\x74\x20\x6f\x72\x20\x63\x68\x65\x63\x6b\x20" \
-"\x53\x48\x41\x31\x20\x63\x68\x65\x63\x6b\x73\x75\x6d\x73\x0a\x0a" \
-"\x09\x2d\x63\x09\x43\x68\x65\x63\x6b\x20\x73\x75\x6d\x73\x20\x61" \
-"\x67\x61\x69\x6e\x73\x74\x20\x6c\x69\x73\x74\x20\x69\x6e\x20\x46" \
-"\x49\x4c\x45\x73\x0a\x09\x2d\x73\x09\x44\x6f\x6e\x27\x74\x20\x6f" \
-"\x75\x74\x70\x75\x74\x20\x61\x6e\x79\x74\x68\x69\x6e\x67\x2c\x20" \
-"\x73\x74\x61\x74\x75\x73\x20\x63\x6f\x64\x65\x20\x73\x68\x6f\x77" \
-"\x73\x20\x73\x75\x63\x63\x65\x73\x73\x0a\x09\x2d\x77\x09\x57\x61" \
-"\x72\x6e\x20\x61\x62\x6f\x75\x74\x20\x69\x6d\x70\x72\x6f\x70\x65" \
-"\x72\x6c\x79\x20\x66\x6f\x72\x6d\x61\x74\x74\x65\x64\x20\x63\x68" \
-"\x65\x63\x6b\x73\x75\x6d\x20\x6c\x69\x6e\x65\x73\x00\x5b\x2d\x63" \
-"\x5b\x73\x77\x5d\x5d\x20\x5b\x46\x49\x4c\x45\x5d\x2e\x2e\x2e\x0a" \
-"\x0a\x50\x72\x69\x6e\x74\x20\x6f\x72\x20\x63\x68\x65\x63\x6b\x20" \
-"\x53\x48\x41\x32\x35\x36\x20\x63\x68\x65\x63\x6b\x73\x75\x6d\x73" \
-"\x0a\x0a\x09\x2d\x63\x09\x43\x68\x65\x63\x6b\x20\x73\x75\x6d\x73" \
-"\x20\x61\x67\x61\x69\x6e\x73\x74\x20\x6c\x69\x73\x74\x20\x69\x6e" \
-"\x20\x46\x49\x4c\x45\x73\x0a\x09\x2d\x73\x09\x44\x6f\x6e\x27\x74" \
-"\x20\x6f\x75\x74\x70\x75\x74\x20\x61\x6e\x79\x74\x68\x69\x6e\x67" \
-"\x2c\x20\x73\x74\x61\x74\x75\x73\x20\x63\x6f\x64\x65\x20\x73\x68" \
-"\x6f\x77\x73\x20\x73\x75\x63\x63\x65\x73\x73\x0a\x09\x2d\x77\x09" \
-"\x57\x61\x72\x6e\x20\x61\x62\x6f\x75\x74\x20\x69\x6d\x70\x72\x6f" \
-"\x70\x65\x72\x6c\x79\x20\x66\x6f\x72\x6d\x61\x74\x74\x65\x64\x20" \
-"\x63\x68\x65\x63\x6b\x73\x75\x6d\x20\x6c\x69\x6e\x65\x73\x00\x5b" \
-"\x2d\x63\x5b\x73\x77\x5d\x5d\x20\x5b\x46\x49\x4c\x45\x5d\x2e\x2e" \
-"\x2e\x0a\x0a\x50\x72\x69\x6e\x74\x20\x6f\x72\x20\x63\x68\x65\x63" \
-"\x6b\x20\x53\x48\x41\x35\x31\x32\x20\x63\x68\x65\x63\x6b\x73\x75" \
-"\x6d\x73\x0a\x0a\x09\x2d\x63\x09\x43\x68\x65\x63\x6b\x20\x73\x75" \
-"\x6d\x73\x20\x61\x67\x61\x69\x6e\x73\x74\x20\x6c\x69\x73\x74\x20" \
-"\x69\x6e\x20\x46\x49\x4c\x45\x73\x0a\x09\x2d\x73\x09\x44\x6f\x6e" \
-"\x27\x74\x20\x6f\x75\x74\x70\x75\x74\x20\x61\x6e\x79\x74\x68\x69" \
-"\x6e\x67\x2c\x20\x73\x74\x61\x74\x75\x73\x20\x63\x6f\x64\x65\x20" \
-"\x73\x68\x6f\x77\x73\x20\x73\x75\x63\x63\x65\x73\x73\x0a\x09\x2d" \
-"\x77\x09\x57\x61\x72\x6e\x20\x61\x62\x6f\x75\x74\x20\x69\x6d\x70" \
-"\x72\x6f\x70\x65\x72\x6c\x79\x20\x66\x6f\x72\x6d\x61\x74\x74\x65" \
-"\x64\x20\x63\x68\x65\x63\x6b\x73\x75\x6d\x20\x6c\x69\x6e\x65\x73" \
-"\x00\x5b\x4e\x5d\x2e\x2e\x2e\x0a\x0a\x50\x61\x75\x73\x65\x20\x66" \
-"\x6f\x72\x20\x61\x20\x74\x69\x6d\x65\x20\x65\x71\x75\x61\x6c\x20" \
-"\x74\x6f\x20\x74\x68\x65\x20\x74\x6f\x74\x61\x6c\x20\x6f\x66\x20" \
-"\x74\x68\x65\x20\x61\x72\x67\x73\x20\x67\x69\x76\x65\x6e\x2c\x20" \
-"\x77\x68\x65\x72\x65\x20\x65\x61\x63\x68\x20\x61\x72\x67\x20\x63" \
-"\x61\x6e\x0a\x68\x61\x76\x65\x20\x61\x6e\x20\x6f\x70\x74\x69\x6f" \
-"\x6e\x61\x6c\x20\x73\x75\x66\x66\x69\x78\x20\x6f\x66\x20\x28\x73" \
-"\x29\x65\x63\x6f\x6e\x64\x73\x2c\x20\x28\x6d\x29\x69\x6e\x75\x74" \
-"\x65\x73\x2c\x20\x28\x68\x29\x6f\x75\x72\x73\x2c\x20\x6f\x72\x20" \
-"\x28\x64\x29\x61\x79\x73\x00\x5b\x2d\x6e\x72\x75\x5d\x20\x5b\x46" \
-"\x49\x4c\x45\x5d\x2e\x2e\x2e\x0a\x0a\x53\x6f\x72\x74\x20\x6c\x69" \
-"\x6e\x65\x73\x20\x6f\x66\x20\x74\x65\x78\x74\x0a\x0a\x09\x2d\x6e" \
-"\x09\x53\x6f\x72\x74\x20\x6e\x75\x6d\x62\x65\x72\x73\x0a\x09\x2d" \
-"\x72\x09\x52\x65\x76\x65\x72\x73\x65\x20\x73\x6f\x72\x74\x20\x6f" \
-"\x72\x64\x65\x72\x0a\x09\x2d\x75\x09\x53\x75\x70\x70\x72\x65\x73" \
-"\x73\x20\x64\x75\x70\x6c\x69\x63\x61\x74\x65\x20\x6c\x69\x6e\x65" \
-"\x73\x00\x5b\x4f\x50\x54\x49\x4f\x4e\x53\x5d\x20\x5b\x49\x4e\x50" \
-"\x55\x54\x20\x5b\x50\x52\x45\x46\x49\x58\x5d\x5d\x0a\x0a\x09\x2d" \
-"\x62\x20\x4e\x5b\x6b\x7c\x6d\x5d\x09\x53\x70\x6c\x69\x74\x20\x62" \
-"\x79\x20\x4e\x20\x28\x6b\x69\x6c\x6f\x7c\x6d\x65\x67\x61\x29\x62" \
-"\x79\x74\x65\x73\x0a\x09\x2d\x6c\x20\x4e\x09\x09\x53\x70\x6c\x69" \
-"\x74\x20\x62\x79\x20\x4e\x20\x6c\x69\x6e\x65\x73\x0a\x09\x2d\x61" \
-"\x20\x4e\x09\x09\x55\x73\x65\x20\x4e\x20\x6c\x65\x74\x74\x65\x72" \
-"\x73\x20\x61\x73\x20\x73\x75\x66\x66\x69\x78\x00\x5b\x4f\x50\x54" \
-"\x49\x4f\x4e\x53\x5d\x20\x46\x49\x4c\x45\x2e\x2e\x2e\x0a\x0a\x44" \
-"\x69\x73\x70\x6c\x61\x79\x20\x66\x69\x6c\x65\x20\x28\x64\x65\x66" \
-"\x61\x75\x6c\x74\x29\x20\x6f\x72\x20\x66\x69\x6c\x65\x73\x79\x73" \
-"\x74\x65\x6d\x20\x73\x74\x61\x74\x75\x73\x0a\x0a\x09\x2d\x66\x09" \
-"\x44\x69\x73\x70\x6c\x61\x79\x20\x66\x69\x6c\x65\x73\x79\x73\x74" \
-"\x65\x6d\x20\x73\x74\x61\x74\x75\x73\x0a\x09\x2d\x4c\x09\x46\x6f" \
-"\x6c\x6c\x6f\x77\x20\x6c\x69\x6e\x6b\x73\x0a\x09\x2d\x74\x09\x44" \
-"\x69\x73\x70\x6c\x61\x79\x20\x69\x6e\x66\x6f\x20\x69\x6e\x20\x74" \
-"\x65\x72\x73\x65\x20\x66\x6f\x72\x6d\x00\x5b\x2d\x61\x66\x6f\x5d" \
-"\x20\x5b\x2d\x6e\x20\x4c\x45\x4e\x5d\x20\x5b\x46\x49\x4c\x45\x5d" \
-"\x2e\x2e\x2e\x0a\x0a\x44\x69\x73\x70\x6c\x61\x79\x20\x70\x72\x69" \
-"\x6e\x74\x61\x62\x6c\x65\x20\x73\x74\x72\x69\x6e\x67\x73\x20\x69" \
-"\x6e\x20\x61\x20\x62\x69\x6e\x61\x72\x79\x20\x66\x69\x6c\x65\x0a" \
-"\x0a\x09\x2d\x61\x09\x53\x63\x61\x6e\x20\x77\x68\x6f\x6c\x65\x20" \
-"\x66\x69\x6c\x65\x20\x28\x64\x65\x66\x61\x75\x6c\x74\x29\x0a\x09" \
-"\x2d\x66\x09\x50\x72\x65\x63\x65\x64\x65\x20\x73\x74\x72\x69\x6e" \
-"\x67\x73\x20\x77\x69\x74\x68\x20\x66\x69\x6c\x65\x6e\x61\x6d\x65" \
-"\x73\x0a\x09\x2d\x6e\x20\x4c\x45\x4e\x09\x41\x74\x20\x6c\x65\x61" \
-"\x73\x74\x20\x4c\x45\x4e\x20\x63\x68\x61\x72\x61\x63\x74\x65\x72" \
-"\x73\x20\x66\x6f\x72\x6d\x20\x61\x20\x73\x74\x72\x69\x6e\x67\x20" \
-"\x28\x64\x65\x66\x61\x75\x6c\x74\x20\x34\x29\x0a\x09\x2d\x6f\x09" \
-"\x50\x72\x65\x63\x65\x64\x65\x20\x73\x74\x72\x69\x6e\x67\x73\x20" \
-"\x77\x69\x74\x68\x20\x64\x65\x63\x69\x6d\x61\x6c\x20\x6f\x66\x66" \
-"\x73\x65\x74\x73\x00\x5b\x2d\x61\x7c\x67\x5d\x20\x5b\x2d\x46\x20" \
-"\x44\x45\x56\x49\x43\x45\x5d\x20\x5b\x53\x45\x54\x54\x49\x4e\x47" \
-"\x5d\x2e\x2e\x2e\x0a\x0a\x57\x69\x74\x68\x6f\x75\x74\x20\x61\x72" \
-"\x67\x75\x6d\x65\x6e\x74\x73\x2c\x20\x70\x72\x69\x6e\x74\x73\x20" \
-"\x62\x61\x75\x64\x20\x72\x61\x74\x65\x2c\x20\x6c\x69\x6e\x65\x20" \
-"\x64\x69\x73\x63\x69\x70\x6c\x69\x6e\x65\x2c\x0a\x61\x6e\x64\x20" \
-"\x64\x65\x76\x69\x61\x74\x69\x6f\x6e\x73\x20\x66\x72\x6f\x6d\x20" \
-"\x73\x74\x74\x79\x20\x73\x61\x6e\x65\x0a\x0a\x09\x2d\x46\x20\x44" \
-"\x45\x56\x49\x43\x45\x09\x4f\x70\x65\x6e\x20\x64\x65\x76\x69\x63" \
-"\x65\x20\x69\x6e\x73\x74\x65\x61\x64\x20\x6f\x66\x20\x73\x74\x64" \
-"\x69\x6e\x0a\x09\x2d\x61\x09\x09\x50\x72\x69\x6e\x74\x20\x61\x6c" \
-"\x6c\x20\x63\x75\x72\x72\x65\x6e\x74\x20\x73\x65\x74\x74\x69\x6e" \
-"\x67\x73\x20\x69\x6e\x20\x68\x75\x6d\x61\x6e\x2d\x72\x65\x61\x64" \
-"\x61\x62\x6c\x65\x20\x66\x6f\x72\x6d\x0a\x09\x2d\x67\x09\x09\x50" \
-"\x72\x69\x6e\x74\x20\x69\x6e\x20\x73\x74\x74\x79\x2d\x72\x65\x61" \
-"\x64\x61\x62\x6c\x65\x20\x66\x6f\x72\x6d\x0a\x09\x5b\x53\x45\x54" \
-"\x54\x49\x4e\x47\x5d\x09\x53\x65\x65\x20\x6d\x61\x6e\x70\x61\x67" \
-"\x65\x00\x5b\x2d\x61\x5d\x20\x5b\x44\x45\x56\x49\x43\x45\x5d\x0a" \
-"\x0a\x53\x74\x6f\x70\x20\x73\x77\x61\x70\x70\x69\x6e\x67\x20\x6f" \
-"\x6e\x20\x44\x45\x56\x49\x43\x45\x0a\x0a\x09\x2d\x61\x09\x53\x74" \
-"\x6f\x70\x20\x73\x77\x61\x70\x70\x69\x6e\x67\x20\x6f\x6e\x20\x61" \
-"\x6c\x6c\x20\x73\x77\x61\x70\x20\x64\x65\x76\x69\x63\x65\x73\x00" \
-"\x5b\x2d\x61\x5d\x20\x5b\x44\x45\x56\x49\x43\x45\x5d\x0a\x0a\x53" \
-"\x74\x61\x72\x74\x20\x73\x77\x61\x70\x70\x69\x6e\x67\x20\x6f\x6e" \
-"\x20\x44\x45\x56\x49\x43\x45\x0a\x0a\x09\x2d\x61\x09\x53\x74\x61" \
-"\x72\x74\x20\x73\x77\x61\x70\x70\x69\x6e\x67\x20\x6f\x6e\x20\x61" \
-"\x6c\x6c\x20\x73\x77\x61\x70\x20\x64\x65\x76\x69\x63\x65\x73\x00" \
-"\x0a\x0a\x57\x72\x69\x74\x65\x20\x61\x6c\x6c\x20\x62\x75\x66\x66" \
-"\x65\x72\x65\x64\x20\x62\x6c\x6f\x63\x6b\x73\x20\x74\x6f\x20\x64" \
-"\x69\x73\x6b\x00\x5b\x4f\x50\x54\x49\x4f\x4e\x53\x5d\x20\x5b\x4b" \
-"\x45\x59\x5b\x3d\x56\x41\x4c\x55\x45\x5d\x5d\x2e\x2e\x2e\x0a\x0a" \
-"\x53\x68\x6f\x77\x2f\x73\x65\x74\x20\x6b\x65\x72\x6e\x65\x6c\x20" \
-"\x70\x61\x72\x61\x6d\x65\x74\x65\x72\x73\x0a\x0a\x09\x2d\x65\x09" \
-"\x44\x6f\x6e\x27\x74\x20\x77\x61\x72\x6e\x20\x61\x62\x6f\x75\x74" \
-"\x20\x75\x6e\x6b\x6e\x6f\x77\x6e\x20\x6b\x65\x79\x73\x0a\x09\x2d" \
-"\x6e\x09\x44\x6f\x6e\x27\x74\x20\x73\x68\x6f\x77\x20\x6b\x65\x79" \
-"\x20\x6e\x61\x6d\x65\x73\x0a\x09\x2d\x61\x09\x53\x68\x6f\x77\x20" \
-"\x61\x6c\x6c\x20\x76\x61\x6c\x75\x65\x73\x0a\x09\x2d\x77\x09\x53" \
-"\x65\x74\x20\x76\x61\x6c\x75\x65\x73\x0a\x09\x2d\x70\x20\x46\x49" \
-"\x4c\x45\x09\x53\x65\x74\x20\x76\x61\x6c\x75\x65\x73\x20\x66\x72" \
-"\x6f\x6d\x20\x46\x49\x4c\x45\x20\x28\x64\x65\x66\x61\x75\x6c\x74" \
-"\x20\x2f\x65\x74\x63\x2f\x73\x79\x73\x63\x74\x6c\x2e\x63\x6f\x6e" \
-"\x66\x29\x0a\x09\x2d\x71\x20\x20\x20\x20\x20\x20\x53\x65\x74\x20" \
-"\x76\x61\x6c\x75\x65\x73\x20\x73\x69\x6c\x65\x6e\x74\x6c\x79\x00" \
-"\x5b\x46\x49\x4c\x45\x5d\x2e\x2e\x2e\x0a\x0a\x43\x6f\x6e\x63\x61" \
-"\x74\x65\x6e\x61\x74\x65\x20\x46\x49\x4c\x45\x73\x20\x61\x6e\x64" \
-"\x20\x70\x72\x69\x6e\x74\x20\x74\x68\x65\x6d\x20\x69\x6e\x20\x72" \
-"\x65\x76\x65\x72\x73\x65\x00\x5b\x4f\x50\x54\x49\x4f\x4e\x53\x5d" \
-"\x20\x5b\x46\x49\x4c\x45\x5d\x2e\x2e\x2e\x0a\x0a\x50\x72\x69\x6e" \
-"\x74\x20\x6c\x61\x73\x74\x20\x31\x30\x20\x6c\x69\x6e\x65\x73\x20" \
-"\x6f\x66\x20\x65\x61\x63\x68\x20\x46\x49\x4c\x45\x20\x28\x6f\x72" \
-"\x20\x73\x74\x64\x69\x6e\x29\x20\x74\x6f\x20\x73\x74\x64\x6f\x75" \
-"\x74\x2e\x0a\x57\x69\x74\x68\x20\x6d\x6f\x72\x65\x20\x74\x68\x61" \
-"\x6e\x20\x6f\x6e\x65\x20\x46\x49\x4c\x45\x2c\x20\x70\x72\x65\x63" \
-"\x65\x64\x65\x20\x65\x61\x63\x68\x20\x77\x69\x74\x68\x20\x61\x20" \
-"\x66\x69\x6c\x65\x6e\x61\x6d\x65\x20\x68\x65\x61\x64\x65\x72\x2e" \
-"\x0a\x0a\x09\x2d\x66\x09\x09\x50\x72\x69\x6e\x74\x20\x64\x61\x74" \
-"\x61\x20\x61\x73\x20\x66\x69\x6c\x65\x20\x67\x72\x6f\x77\x73\x0a" \
-"\x09\x2d\x73\x20\x53\x45\x43\x4f\x4e\x44\x53\x09\x57\x61\x69\x74" \
-"\x20\x53\x45\x43\x4f\x4e\x44\x53\x20\x62\x65\x74\x77\x65\x65\x6e" \
-"\x20\x72\x65\x61\x64\x73\x20\x77\x69\x74\x68\x20\x2d\x66\x0a\x09" \
-"\x2d\x6e\x20\x4e\x5b\x6b\x62\x6d\x5d\x09\x50\x72\x69\x6e\x74\x20" \
-"\x6c\x61\x73\x74\x20\x4e\x20\x6c\x69\x6e\x65\x73\x0a\x09\x2d\x63" \
-"\x20\x4e\x5b\x6b\x62\x6d\x5d\x09\x50\x72\x69\x6e\x74\x20\x6c\x61" \
-"\x73\x74\x20\x4e\x20\x62\x79\x74\x65\x73\x0a\x09\x2d\x71\x09\x09" \
-"\x4e\x65\x76\x65\x72\x20\x70\x72\x69\x6e\x74\x20\x68\x65\x61\x64" \
-"\x65\x72\x73\x0a\x09\x2d\x76\x09\x09\x41\x6c\x77\x61\x79\x73\x20" \
-"\x70\x72\x69\x6e\x74\x20\x68\x65\x61\x64\x65\x72\x73\x0a\x0a\x4e" \
-"\x20\x6d\x61\x79\x20\x62\x65\x20\x73\x75\x66\x66\x69\x78\x65\x64" \
-"\x20\x62\x79\x20\x6b\x20\x28\x78\x31\x30\x32\x34\x29\x2c\x20\x62" \
-"\x20\x28\x78\x35\x31\x32\x29\x2c\x20\x6f\x72\x20\x6d\x20\x28\x78" \
-"\x31\x30\x32\x34\x5e\x32\x29\x2e\x0a\x49\x66\x20\x4e\x20\x73\x74" \
-"\x61\x72\x74\x73\x20\x77\x69\x74\x68\x20\x61\x20\x27\x2b\x27\x2c" \
-"\x20\x6f\x75\x74\x70\x75\x74\x20\x62\x65\x67\x69\x6e\x73\x20\x77" \
-"\x69\x74\x68\x20\x74\x68\x65\x20\x4e\x74\x68\x20\x69\x74\x65\x6d" \
-"\x20\x66\x72\x6f\x6d\x20\x74\x68\x65\x20\x73\x74\x61\x72\x74\x0a" \
-"\x6f\x66\x20\x65\x61\x63\x68\x20\x66\x69\x6c\x65\x2c\x20\x6e\x6f" \
-"\x74\x20\x66\x72\x6f\x6d\x20\x74\x68\x65\x20\x65\x6e\x64\x2e\x00" \
-"\x2d\x5b\x63\x78\x74\x7a\x6a\x68\x6d\x76\x4f\x5d\x20\x5b\x2d\x58" \
-"\x20\x46\x49\x4c\x45\x5d\x20\x5b\x2d\x54\x20\x46\x49\x4c\x45\x5d" \
-"\x20\x5b\x2d\x66\x20\x54\x41\x52\x46\x49\x4c\x45\x5d\x20\x5b\x2d" \
-"\x43\x20\x44\x49\x52\x5d\x20\x5b\x46\x49\x4c\x45\x5d\x2e\x2e\x2e" \
-"\x0a\x0a\x43\x72\x65\x61\x74\x65\x2c\x20\x65\x78\x74\x72\x61\x63" \
-"\x74\x2c\x20\x6f\x72\x20\x6c\x69\x73\x74\x20\x66\x69\x6c\x65\x73" \
-"\x20\x66\x72\x6f\x6d\x20\x61\x20\x74\x61\x72\x20\x66\x69\x6c\x65" \
-"\x0a\x0a\x4f\x70\x65\x72\x61\x74\x69\x6f\x6e\x3a\x0a\x09\x63\x09" \
-"\x43\x72\x65\x61\x74\x65\x0a\x09\x78\x09\x45\x78\x74\x72\x61\x63" \
-"\x74\x0a\x09\x74\x09\x4c\x69\x73\x74\x0a\x09\x66\x09\x4e\x61\x6d" \
-"\x65\x20\x6f\x66\x20\x54\x41\x52\x46\x49\x4c\x45\x20\x28\x27\x2d" \
-"\x27\x20\x66\x6f\x72\x20\x73\x74\x64\x69\x6e\x2f\x6f\x75\x74\x29" \
-"\x0a\x09\x43\x09\x43\x68\x61\x6e\x67\x65\x20\x74\x6f\x20\x44\x49" \
-"\x52\x20\x62\x65\x66\x6f\x72\x65\x20\x6f\x70\x65\x72\x61\x74\x69" \
-"\x6f\x6e\x0a\x09\x76\x09\x56\x65\x72\x62\x6f\x73\x65\x0a\x09\x7a" \
-"\x09\x28\x44\x65\x29\x63\x6f\x6d\x70\x72\x65\x73\x73\x20\x75\x73" \
-"\x69\x6e\x67\x20\x67\x7a\x69\x70\x0a\x09\x6a\x09\x28\x44\x65\x29" \
-"\x63\x6f\x6d\x70\x72\x65\x73\x73\x20\x75\x73\x69\x6e\x67\x20\x62" \
-"\x7a\x69\x70\x32\x0a\x09\x4f\x09\x45\x78\x74\x72\x61\x63\x74\x20" \
-"\x74\x6f\x20\x73\x74\x64\x6f\x75\x74\x0a\x09\x68\x09\x46\x6f\x6c" \
-"\x6c\x6f\x77\x20\x73\x79\x6d\x6c\x69\x6e\x6b\x73\x0a\x09\x6d\x09" \
-"\x44\x6f\x6e\x27\x74\x20\x72\x65\x73\x74\x6f\x72\x65\x20\x6d\x74" \
-"\x69\x6d\x65\x0a\x09\x65\x78\x63\x6c\x75\x64\x65\x09\x46\x69\x6c" \
-"\x65\x20\x74\x6f\x20\x65\x78\x63\x6c\x75\x64\x65\x0a\x09\x58\x09" \
-"\x46\x69\x6c\x65\x20\x77\x69\x74\x68\x20\x6e\x61\x6d\x65\x73\x20" \
-"\x74\x6f\x20\x65\x78\x63\x6c\x75\x64\x65\x0a\x09\x54\x09\x46\x69" \
-"\x6c\x65\x20\x77\x69\x74\x68\x20\x6e\x61\x6d\x65\x73\x20\x74\x6f" \
-"\x20\x69\x6e\x63\x6c\x75\x64\x65\x00\x5b\x2d\x61\x69\x5d\x20\x5b" \
-"\x46\x49\x4c\x45\x5d\x2e\x2e\x2e\x0a\x0a\x43\x6f\x70\x79\x20\x73" \
-"\x74\x64\x69\x6e\x20\x74\x6f\x20\x65\x61\x63\x68\x20\x46\x49\x4c" \
-"\x45\x2c\x20\x61\x6e\x64\x20\x61\x6c\x73\x6f\x20\x74\x6f\x20\x73" \
-"\x74\x64\x6f\x75\x74\x0a\x0a\x09\x2d\x61\x09\x41\x70\x70\x65\x6e" \
-"\x64\x20\x74\x6f\x20\x74\x68\x65\x20\x67\x69\x76\x65\x6e\x20\x46" \
-"\x49\x4c\x45\x73\x2c\x20\x64\x6f\x6e\x27\x74\x20\x6f\x76\x65\x72" \
-"\x77\x72\x69\x74\x65\x0a\x09\x2d\x69\x09\x49\x67\x6e\x6f\x72\x65" \
-"\x20\x69\x6e\x74\x65\x72\x72\x75\x70\x74\x20\x73\x69\x67\x6e\x61" \
-"\x6c\x73\x20\x28\x53\x49\x47\x49\x4e\x54\x29\x00\x45\x58\x50\x52" \
-"\x45\x53\x53\x49\x4f\x4e\x20\x5d\x0a\x0a\x43\x68\x65\x63\x6b\x20" \
-"\x66\x69\x6c\x65\x20\x74\x79\x70\x65\x73\x2c\x20\x63\x6f\x6d\x70" \
-"\x61\x72\x65\x20\x76\x61\x6c\x75\x65\x73\x20\x65\x74\x63\x2e\x20" \
-"\x52\x65\x74\x75\x72\x6e\x20\x61\x20\x30\x2f\x31\x20\x65\x78\x69" \
-"\x74\x20\x63\x6f\x64\x65\x0a\x64\x65\x70\x65\x6e\x64\x69\x6e\x67" \
-"\x20\x6f\x6e\x20\x6c\x6f\x67\x69\x63\x61\x6c\x20\x76\x61\x6c\x75" \
-"\x65\x20\x6f\x66\x20\x45\x58\x50\x52\x45\x53\x53\x49\x4f\x4e\x00" \
-"\x5b\x2d\x76\x5d\x20\x50\x52\x4f\x47\x20\x41\x52\x47\x53\x0a\x0a" \
-"\x52\x75\x6e\x20\x50\x52\x4f\x47\x2c\x20\x64\x69\x73\x70\x6c\x61" \
-"\x79\x20\x72\x65\x73\x6f\x75\x72\x63\x65\x20\x75\x73\x61\x67\x65" \
-"\x20\x77\x68\x65\x6e\x20\x69\x74\x20\x65\x78\x69\x74\x73\x0a\x0a" \
-"\x09\x2d\x76\x09\x56\x65\x72\x62\x6f\x73\x65\x00\x5b\x2d\x62\x5d" \
-"\x20\x5b\x2d\x6e\x43\x4f\x55\x4e\x54\x5d\x20\x5b\x2d\x64\x53\x45" \
-"\x43\x4f\x4e\x44\x53\x5d\x20\x5b\x2d\x6d\x5d\x0a\x0a\x50\x72\x6f" \
-"\x76\x69\x64\x65\x20\x61\x20\x76\x69\x65\x77\x20\x6f\x66\x20\x70" \
-"\x72\x6f\x63\x65\x73\x73\x20\x61\x63\x74\x69\x76\x69\x74\x79\x20" \
-"\x69\x6e\x20\x72\x65\x61\x6c\x20\x74\x69\x6d\x65\x2e\x0a\x52\x65" \
-"\x61\x64\x20\x74\x68\x65\x20\x73\x74\x61\x74\x75\x73\x20\x6f\x66" \
-"\x20\x61\x6c\x6c\x20\x70\x72\x6f\x63\x65\x73\x73\x65\x73\x20\x66" \
-"\x72\x6f\x6d\x20\x2f\x70\x72\x6f\x63\x20\x65\x61\x63\x68\x20\x53" \
-"\x45\x43\x4f\x4e\x44\x53\x0a\x61\x6e\x64\x20\x64\x69\x73\x70\x6c" \
-"\x61\x79\x20\x61\x20\x73\x63\x72\x65\x65\x6e\x66\x75\x6c\x20\x6f" \
-"\x66\x20\x74\x68\x65\x6d\x2e\x0a\x4b\x65\x79\x73\x3a\x0a\x09\x4e" \
-"\x2f\x4d\x2f\x50\x2f\x54\x3a\x20\x73\x68\x6f\x77\x20\x43\x50\x55" \
-"\x20\x75\x73\x61\x67\x65\x2c\x20\x73\x6f\x72\x74\x20\x62\x79\x20" \
-"\x70\x69\x64\x2f\x6d\x65\x6d\x2f\x63\x70\x75\x2f\x74\x69\x6d\x65" \
-"\x0a\x09\x53\x3a\x20\x73\x68\x6f\x77\x20\x6d\x65\x6d\x6f\x72\x79" \
-"\x0a\x09\x52\x3a\x20\x72\x65\x76\x65\x72\x73\x65\x20\x73\x6f\x72" \
-"\x74\x0a\x09\x48\x3a\x20\x74\x6f\x67\x67\x6c\x65\x20\x74\x68\x72" \
-"\x65\x61\x64\x73\x0a\x09\x51\x2c\x5e\x43\x3a\x20\x65\x78\x69\x74" \
-"\x0a\x0a\x4f\x70\x74\x69\x6f\x6e\x73\x3a\x0a\x09\x2d\x62\x09\x42" \
-"\x61\x74\x63\x68\x20\x6d\x6f\x64\x65\x0a\x09\x2d\x6e\x20\x4e\x09" \
-"\x45\x78\x69\x74\x20\x61\x66\x74\x65\x72\x20\x4e\x20\x69\x74\x65" \
-"\x72\x61\x74\x69\x6f\x6e\x73\x0a\x09\x2d\x64\x20\x4e\x09\x44\x65" \
-"\x6c\x61\x79\x20\x62\x65\x74\x77\x65\x65\x6e\x20\x75\x70\x64\x61" \
-"\x74\x65\x73\x0a\x09\x2d\x6d\x09\x53\x61\x6d\x65\x20\x61\x73\x20" \
-"\x27\x73\x27\x20\x6b\x65\x79\x00\x5b\x2d\x63\x5d\x20\x46\x49\x4c" \
-"\x45\x2e\x2e\x2e\x0a\x0a\x55\x70\x64\x61\x74\x65\x20\x74\x68\x65" \
-"\x20\x6c\x61\x73\x74\x2d\x6d\x6f\x64\x69\x66\x69\x65\x64\x20\x64" \
-"\x61\x74\x65\x20\x6f\x6e\x20\x74\x68\x65\x20\x67\x69\x76\x65\x6e" \
-"\x20\x46\x49\x4c\x45\x5b\x73\x5d\x0a\x0a\x09\x2d\x63\x09\x44\x6f" \
-"\x6e\x27\x74\x20\x63\x72\x65\x61\x74\x65\x20\x66\x69\x6c\x65\x73" \
-"\x00\x5b\x2d\x63\x64\x73\x5d\x20\x53\x54\x52\x49\x4e\x47\x31\x20" \
-"\x5b\x53\x54\x52\x49\x4e\x47\x32\x5d\x0a\x0a\x54\x72\x61\x6e\x73" \
-"\x6c\x61\x74\x65\x2c\x20\x73\x71\x75\x65\x65\x7a\x65\x2c\x20\x6f" \
-"\x72\x20\x64\x65\x6c\x65\x74\x65\x20\x63\x68\x61\x72\x61\x63\x74" \
-"\x65\x72\x73\x20\x66\x72\x6f\x6d\x20\x73\x74\x64\x69\x6e\x2c\x20" \
-"\x77\x72\x69\x74\x69\x6e\x67\x20\x74\x6f\x20\x73\x74\x64\x6f\x75" \
-"\x74\x0a\x0a\x09\x2d\x63\x09\x54\x61\x6b\x65\x20\x63\x6f\x6d\x70" \
-"\x6c\x65\x6d\x65\x6e\x74\x20\x6f\x66\x20\x53\x54\x52\x49\x4e\x47" \
-"\x31\x0a\x09\x2d\x64\x09\x44\x65\x6c\x65\x74\x65\x20\x69\x6e\x70" \
-"\x75\x74\x20\x63\x68\x61\x72\x61\x63\x74\x65\x72\x73\x20\x63\x6f" \
-"\x64\x65\x64\x20\x53\x54\x52\x49\x4e\x47\x31\x0a\x09\x2d\x73\x09" \
-"\x53\x71\x75\x65\x65\x7a\x65\x20\x6d\x75\x6c\x74\x69\x70\x6c\x65" \
-"\x20\x6f\x75\x74\x70\x75\x74\x20\x63\x68\x61\x72\x61\x63\x74\x65" \
-"\x72\x73\x20\x6f\x66\x20\x53\x54\x52\x49\x4e\x47\x32\x20\x69\x6e" \
-"\x74\x6f\x20\x6f\x6e\x65\x20\x63\x68\x61\x72\x61\x63\x74\x65\x72" \
-"\x00\x0a\x0a\x52\x65\x74\x75\x72\x6e\x20\x61\x6e\x20\x65\x78\x69" \
-"\x74\x20\x63\x6f\x64\x65\x20\x6f\x66\x20\x54\x52\x55\x45\x20\x28" \
-"\x30\x29\x00\x5b\x77\x5d\x20\x5b\x68\x5d\x0a\x0a\x50\x72\x69\x6e" \
-"\x74\x20\x64\x69\x6d\x65\x6e\x73\x69\x6f\x6e\x28\x73\x29\x20\x6f" \
-"\x66\x20\x73\x74\x64\x69\x6e\x27\x73\x20\x74\x65\x72\x6d\x69\x6e" \
-"\x61\x6c\x2c\x20\x6f\x6e\x20\x65\x72\x72\x6f\x72\x20\x72\x65\x74" \
-"\x75\x72\x6e\x20\x38\x30\x78\x32\x35\x00\x5b\x2d\x63\x20\x4d\x41" \
-"\x58\x5f\x4d\x4f\x55\x4e\x54\x5f\x43\x4f\x55\x4e\x54\x5d\x20\x5b" \
-"\x2d\x69\x20\x44\x41\x59\x53\x5d\x20\x5b\x2d\x43\x20\x4d\x4f\x55" \
-"\x4e\x54\x5f\x43\x4f\x55\x4e\x54\x5d\x20\x5b\x2d\x4c\x20\x4c\x41" \
-"\x42\x45\x4c\x5d\x20\x42\x4c\x4f\x43\x4b\x44\x45\x56\x0a\x0a\x41" \
-"\x64\x6a\x75\x73\x74\x20\x66\x69\x6c\x65\x73\x79\x73\x74\x65\x6d" \
-"\x20\x6f\x70\x74\x69\x6f\x6e\x73\x20\x6f\x6e\x20\x65\x78\x74\x5b" \
-"\x32\x33\x5d\x20\x66\x69\x6c\x65\x73\x79\x73\x74\x65\x6d\x73\x00" \
-"\x5b\x4f\x50\x54\x49\x4f\x4e\x53\x5d\x20\x46\x49\x4c\x45\x53\x59" \
-"\x53\x54\x45\x4d\x7c\x44\x49\x52\x45\x43\x54\x4f\x52\x59\x0a\x0a" \
-"\x55\x6e\x6d\x6f\x75\x6e\x74\x20\x66\x69\x6c\x65\x20\x73\x79\x73" \
-"\x74\x65\x6d\x73\x0a\x0a\x09\x2d\x72\x09\x54\x72\x79\x20\x74\x6f" \
-"\x20\x72\x65\x6d\x6f\x75\x6e\x74\x20\x64\x65\x76\x69\x63\x65\x73" \
-"\x20\x61\x73\x20\x72\x65\x61\x64\x2d\x6f\x6e\x6c\x79\x20\x69\x66" \
-"\x20\x6d\x6f\x75\x6e\x74\x20\x69\x73\x20\x62\x75\x73\x79\x0a\x09" \
-"\x2d\x6c\x09\x4c\x61\x7a\x79\x20\x75\x6d\x6f\x75\x6e\x74\x20\x28" \
-"\x64\x65\x74\x61\x63\x68\x20\x66\x69\x6c\x65\x73\x79\x73\x74\x65" \
-"\x6d\x29\x0a\x09\x2d\x66\x09\x46\x6f\x72\x63\x65\x20\x75\x6d\x6f" \
-"\x75\x6e\x74\x20\x28\x69\x2e\x65\x2e\x2c\x20\x75\x6e\x72\x65\x61" \
-"\x63\x68\x61\x62\x6c\x65\x20\x4e\x46\x53\x20\x73\x65\x72\x76\x65" \
-"\x72\x29\x0a\x09\x2d\x64\x09\x46\x72\x65\x65\x20\x6c\x6f\x6f\x70" \
-"\x20\x64\x65\x76\x69\x63\x65\x20\x65\x76\x65\x6e\x20\x69\x66\x20" \
-"\x69\x74\x20\x68\x61\x73\x20\x62\x65\x65\x6e\x20\x75\x73\x65\x64" \
-"\x00\x5b\x2d\x61\x6d\x6e\x72\x73\x70\x76\x5d\x0a\x0a\x50\x72\x69" \
-"\x6e\x74\x20\x73\x79\x73\x74\x65\x6d\x20\x69\x6e\x66\x6f\x72\x6d" \
-"\x61\x74\x69\x6f\x6e\x0a\x0a\x09\x2d\x61\x09\x50\x72\x69\x6e\x74" \
-"\x20\x61\x6c\x6c\x0a\x09\x2d\x6d\x09\x54\x68\x65\x20\x6d\x61\x63" \
-"\x68\x69\x6e\x65\x20\x28\x68\x61\x72\x64\x77\x61\x72\x65\x29\x20" \
-"\x74\x79\x70\x65\x0a\x09\x2d\x6e\x09\x48\x6f\x73\x74\x6e\x61\x6d" \
-"\x65\x0a\x09\x2d\x72\x09\x4f\x53\x20\x72\x65\x6c\x65\x61\x73\x65" \
-"\x0a\x09\x2d\x73\x09\x4f\x53\x20\x6e\x61\x6d\x65\x20\x28\x64\x65" \
-"\x66\x61\x75\x6c\x74\x29\x0a\x09\x2d\x70\x09\x50\x72\x6f\x63\x65" \
-"\x73\x73\x6f\x72\x20\x74\x79\x70\x65\x0a\x09\x2d\x76\x09\x4f\x53" \
-"\x20\x76\x65\x72\x73\x69\x6f\x6e\x00\x5b\x2d\x66\x61\x5d\x5b\x2d" \
-"\x74\x20\x4e\x5d\x20\x5b\x46\x49\x4c\x45\x5d\x2e\x2e\x2e\x0a\x0a" \
-"\x43\x6f\x6e\x76\x65\x72\x74\x20\x73\x70\x61\x63\x65\x73\x20\x74" \
-"\x6f\x20\x74\x61\x62\x73\x2c\x20\x77\x72\x69\x74\x69\x6e\x67\x20" \
-"\x74\x6f\x20\x73\x74\x64\x6f\x75\x74\x0a\x0a\x09\x2d\x61\x2c\x2d" \
-"\x2d\x61\x6c\x6c\x09\x43\x6f\x6e\x76\x65\x72\x74\x20\x61\x6c\x6c" \
-"\x20\x62\x6c\x61\x6e\x6b\x73\x0a\x09\x2d\x66\x2c\x2d\x2d\x66\x69" \
-"\x72\x73\x74\x2d\x6f\x6e\x6c\x79\x09\x43\x6f\x6e\x76\x65\x72\x74" \
-"\x20\x6f\x6e\x6c\x79\x20\x6c\x65\x61\x64\x69\x6e\x67\x20\x62\x6c" \
-"\x61\x6e\x6b\x73\x0a\x09\x2d\x74\x2c\x2d\x2d\x74\x61\x62\x73\x3d" \
-"\x4e\x09\x54\x61\x62\x73\x74\x6f\x70\x73\x20\x65\x76\x65\x72\x79" \
-"\x20\x4e\x20\x63\x68\x61\x72\x73\x00\x5b\x2d\x63\x64\x75\x5d\x5b" \
-"\x2d\x66\x2c\x73\x2c\x77\x20\x4e\x5d\x20\x5b\x49\x4e\x50\x55\x54" \
-"\x20\x5b\x4f\x55\x54\x50\x55\x54\x5d\x5d\x0a\x0a\x44\x69\x73\x63" \
-"\x61\x72\x64\x20\x64\x75\x70\x6c\x69\x63\x61\x74\x65\x20\x6c\x69" \
-"\x6e\x65\x73\x0a\x0a\x09\x2d\x63\x09\x50\x72\x65\x66\x69\x78\x20" \
-"\x6c\x69\x6e\x65\x73\x20\x62\x79\x20\x74\x68\x65\x20\x6e\x75\x6d" \
-"\x62\x65\x72\x20\x6f\x66\x20\x6f\x63\x63\x75\x72\x72\x65\x6e\x63" \
-"\x65\x73\x0a\x09\x2d\x64\x09\x4f\x6e\x6c\x79\x20\x70\x72\x69\x6e" \
-"\x74\x20\x64\x75\x70\x6c\x69\x63\x61\x74\x65\x20\x6c\x69\x6e\x65" \
-"\x73\x0a\x09\x2d\x75\x09\x4f\x6e\x6c\x79\x20\x70\x72\x69\x6e\x74" \
-"\x20\x75\x6e\x69\x71\x75\x65\x20\x6c\x69\x6e\x65\x73\x0a\x09\x2d" \
-"\x66\x20\x4e\x09\x53\x6b\x69\x70\x20\x66\x69\x72\x73\x74\x20\x4e" \
-"\x20\x66\x69\x65\x6c\x64\x73\x0a\x09\x2d\x73\x20\x4e\x09\x53\x6b" \
-"\x69\x70\x20\x66\x69\x72\x73\x74\x20\x4e\x20\x63\x68\x61\x72\x73" \
-"\x20\x28\x61\x66\x74\x65\x72\x20\x61\x6e\x79\x20\x73\x6b\x69\x70" \
-"\x70\x65\x64\x20\x66\x69\x65\x6c\x64\x73\x29\x0a\x09\x2d\x77\x20" \
-"\x4e\x09\x43\x6f\x6d\x70\x61\x72\x65\x20\x4e\x20\x63\x68\x61\x72" \
-"\x61\x63\x74\x65\x72\x73\x20\x69\x6e\x20\x6c\x69\x6e\x65\x00\x5b" \
-"\x2d\x75\x64\x5d\x20\x5b\x46\x49\x4c\x45\x5d\x0a\x0a\x43\x6f\x6e" \
-"\x76\x65\x72\x74\x20\x46\x49\x4c\x45\x20\x69\x6e\x2d\x70\x6c\x61" \
-"\x63\x65\x20\x66\x72\x6f\x6d\x20\x55\x6e\x69\x78\x20\x74\x6f\x20" \
-"\x44\x4f\x53\x20\x66\x6f\x72\x6d\x61\x74\x2e\x0a\x57\x68\x65\x6e" \
-"\x20\x6e\x6f\x20\x66\x69\x6c\x65\x20\x69\x73\x20\x67\x69\x76\x65" \
-"\x6e\x2c\x20\x75\x73\x65\x20\x73\x74\x64\x69\x6e\x2f\x73\x74\x64" \
-"\x6f\x75\x74\x2e\x0a\x0a\x09\x2d\x75\x09\x64\x6f\x73\x32\x75\x6e" \
-"\x69\x78\x0a\x09\x2d\x64\x09\x75\x6e\x69\x78\x32\x64\x6f\x73\x00" \
-"\x5b\x2d\x63\x66\x5d\x20\x5b\x46\x49\x4c\x45\x5d\x2e\x2e\x2e\x0a" \
-"\x0a\x44\x65\x63\x6f\x6d\x70\x72\x65\x73\x73\x20\x46\x49\x4c\x45" \
-"\x20\x28\x6f\x72\x20\x73\x74\x64\x69\x6e\x29\x0a\x0a\x09\x2d\x63" \
-"\x09\x57\x72\x69\x74\x65\x20\x74\x6f\x20\x73\x74\x64\x6f\x75\x74" \
-"\x0a\x09\x2d\x66\x09\x46\x6f\x72\x63\x65\x00\x5b\x2d\x63\x66\x76" \
-"\x43\x46\x5d\x20\x5b\x46\x49\x4c\x45\x5d\x2e\x2e\x2e\x0a\x0a\x09" \
-"\x2d\x63\x09\x57\x72\x69\x74\x65\x20\x74\x6f\x20\x73\x74\x64\x6f" \
-"\x75\x74\x0a\x09\x2d\x66\x09\x46\x6f\x72\x63\x65\x0a\x09\x2d\x76" \
-"\x09\x56\x65\x72\x62\x6f\x73\x65\x0a\x09\x2d\x46\x09\x44\x6f\x6e" \
-"\x27\x74\x20\x73\x74\x6f\x72\x65\x20\x6f\x72\x20\x76\x65\x72\x69" \
-"\x66\x79\x20\x63\x68\x65\x63\x6b\x73\x75\x6d\x00\x5b\x2d\x63\x66" \
-"\x5d\x20\x5b\x46\x49\x4c\x45\x5d\x2e\x2e\x2e\x0a\x0a\x44\x65\x63" \
-"\x6f\x6d\x70\x72\x65\x73\x73\x20\x46\x49\x4c\x45\x20\x28\x6f\x72" \
-"\x20\x73\x74\x64\x69\x6e\x29\x0a\x0a\x09\x2d\x63\x09\x57\x72\x69" \
-"\x74\x65\x20\x74\x6f\x20\x73\x74\x64\x6f\x75\x74\x0a\x09\x2d\x66" \
-"\x09\x46\x6f\x72\x63\x65\x00\x5b\x2d\x6c\x6e\x6f\x70\x71\x5d\x20" \
-"\x46\x49\x4c\x45\x5b\x2e\x7a\x69\x70\x5d\x20\x5b\x46\x49\x4c\x45" \
-"\x5d\x2e\x2e\x2e\x20\x5b\x2d\x78\x20\x46\x49\x4c\x45\x2e\x2e\x2e" \
-"\x5d\x20\x5b\x2d\x64\x20\x44\x49\x52\x5d\x0a\x0a\x45\x78\x74\x72" \
-"\x61\x63\x74\x20\x46\x49\x4c\x45\x73\x20\x66\x72\x6f\x6d\x20\x5a" \
-"\x49\x50\x20\x61\x72\x63\x68\x69\x76\x65\x0a\x0a\x09\x2d\x6c\x09" \
-"\x4c\x69\x73\x74\x20\x63\x6f\x6e\x74\x65\x6e\x74\x73\x20\x28\x77" \
-"\x69\x74\x68\x20\x2d\x71\x20\x66\x6f\x72\x20\x73\x68\x6f\x72\x74" \
-"\x20\x66\x6f\x72\x6d\x29\x0a\x09\x2d\x6e\x09\x4e\x65\x76\x65\x72" \
-"\x20\x6f\x76\x65\x72\x77\x72\x69\x74\x65\x20\x66\x69\x6c\x65\x73" \
-"\x20\x28\x64\x65\x66\x61\x75\x6c\x74\x3a\x20\x61\x73\x6b\x29\x0a" \
-"\x09\x2d\x6f\x09\x4f\x76\x65\x72\x77\x72\x69\x74\x65\x0a\x09\x2d" \
-"\x70\x09\x50\x72\x69\x6e\x74\x20\x74\x6f\x20\x73\x74\x64\x6f\x75" \
-"\x74\x0a\x09\x2d\x71\x09\x51\x75\x69\x65\x74\x0a\x09\x2d\x78\x20" \
-"\x46\x49\x4c\x45\x09\x45\x78\x63\x6c\x75\x64\x65\x20\x46\x49\x4c" \
-"\x45\x73\x0a\x09\x2d\x64\x20\x44\x49\x52\x09\x45\x78\x74\x72\x61" \
-"\x63\x74\x20\x69\x6e\x74\x6f\x20\x44\x49\x52\x00\x0a\x0a\x44\x69" \
-"\x73\x70\x6c\x61\x79\x20\x74\x68\x65\x20\x74\x69\x6d\x65\x20\x73" \
-"\x69\x6e\x63\x65\x20\x74\x68\x65\x20\x6c\x61\x73\x74\x20\x62\x6f" \
-"\x6f\x74\x00\x4e\x0a\x0a\x50\x61\x75\x73\x65\x20\x66\x6f\x72\x20" \
-"\x4e\x20\x6d\x69\x63\x72\x6f\x73\x65\x63\x6f\x6e\x64\x73\x00\x5b" \
-"\x2d\x6f\x20\x4f\x55\x54\x46\x49\x4c\x45\x5d\x20\x5b\x49\x4e\x46" \
-"\x49\x4c\x45\x5d\x0a\x0a\x55\x75\x64\x65\x63\x6f\x64\x65\x20\x61" \
-"\x20\x66\x69\x6c\x65\x0a\x46\x69\x6e\x64\x73\x20\x4f\x55\x54\x46" \
-"\x49\x4c\x45\x20\x69\x6e\x20\x75\x75\x65\x6e\x63\x6f\x64\x65\x64" \
-"\x20\x73\x6f\x75\x72\x63\x65\x20\x75\x6e\x6c\x65\x73\x73\x20\x2d" \
-"\x6f\x20\x69\x73\x20\x67\x69\x76\x65\x6e\x00\x5b\x2d\x6d\x5d\x20" \
-"\x5b\x46\x49\x4c\x45\x5d\x20\x53\x54\x4f\x52\x45\x44\x5f\x46\x49" \
-"\x4c\x45\x4e\x41\x4d\x45\x0a\x0a\x55\x75\x65\x6e\x63\x6f\x64\x65" \
-"\x20\x46\x49\x4c\x45\x20\x28\x6f\x72\x20\x73\x74\x64\x69\x6e\x29" \
-"\x20\x74\x6f\x20\x73\x74\x64\x6f\x75\x74\x0a\x0a\x09\x2d\x6d\x09" \
-"\x55\x73\x65\x20\x62\x61\x73\x65\x36\x34\x20\x65\x6e\x63\x6f\x64" \
-"\x69\x6e\x67\x20\x70\x65\x72\x20\x52\x46\x43\x31\x35\x32\x31\x00" \
-"\x5b\x2d\x6e\x20\x53\x45\x43\x5d\x20\x5b\x2d\x74\x5d\x20\x50\x52" \
-"\x4f\x47\x20\x41\x52\x47\x53\x0a\x0a\x52\x75\x6e\x20\x50\x52\x4f" \
-"\x47\x20\x70\x65\x72\x69\x6f\x64\x69\x63\x61\x6c\x6c\x79\x0a\x0a" \
-"\x09\x2d\x6e\x09\x4c\x6f\x6f\x70\x20\x70\x65\x72\x69\x6f\x64\x20" \
-"\x69\x6e\x20\x73\x65\x63\x6f\x6e\x64\x73\x20\x28\x64\x65\x66\x61" \
-"\x75\x6c\x74\x20\x32\x29\x0a\x09\x2d\x74\x09\x44\x6f\x6e\x27\x74" \
-"\x20\x70\x72\x69\x6e\x74\x20\x68\x65\x61\x64\x65\x72\x00\x5b\x2d" \
-"\x63\x6d\x6c\x77\x4c\x5d\x20\x5b\x46\x49\x4c\x45\x5d\x2e\x2e\x2e" \
-"\x0a\x0a\x43\x6f\x75\x6e\x74\x20\x6c\x69\x6e\x65\x73\x2c\x20\x77" \
-"\x6f\x72\x64\x73\x2c\x20\x61\x6e\x64\x20\x62\x79\x74\x65\x73\x20" \
-"\x66\x6f\x72\x20\x65\x61\x63\x68\x20\x46\x49\x4c\x45\x20\x28\x6f" \
-"\x72\x20\x73\x74\x64\x69\x6e\x29\x0a\x0a\x09\x2d\x63\x09\x43\x6f" \
-"\x75\x6e\x74\x20\x62\x79\x74\x65\x73\x0a\x09\x2d\x6d\x09\x43\x6f" \
-"\x75\x6e\x74\x20\x63\x68\x61\x72\x61\x63\x74\x65\x72\x73\x0a\x09" \
-"\x2d\x6c\x09\x43\x6f\x75\x6e\x74\x20\x6e\x65\x77\x6c\x69\x6e\x65" \
-"\x73\x0a\x09\x2d\x77\x09\x43\x6f\x75\x6e\x74\x20\x77\x6f\x72\x64" \
-"\x73\x0a\x09\x2d\x4c\x09\x50\x72\x69\x6e\x74\x20\x6c\x6f\x6e\x67" \
-"\x65\x73\x74\x20\x6c\x69\x6e\x65\x20\x6c\x65\x6e\x67\x74\x68\x00" \
-"\x5b\x43\x4f\x4d\x4d\x41\x4e\x44\x5d\x2e\x2e\x2e\x0a\x0a\x4c\x6f" \
-"\x63\x61\x74\x65\x20\x61\x20\x43\x4f\x4d\x4d\x41\x4e\x44\x00\x0a" \
-"\x0a\x50\x72\x69\x6e\x74\x20\x74\x68\x65\x20\x75\x73\x65\x72\x20" \
-"\x6e\x61\x6d\x65\x20\x61\x73\x73\x6f\x63\x69\x61\x74\x65\x64\x20" \
-"\x77\x69\x74\x68\x20\x74\x68\x65\x20\x63\x75\x72\x72\x65\x6e\x74" \
-"\x20\x65\x66\x66\x65\x63\x74\x69\x76\x65\x20\x75\x73\x65\x72\x20" \
-"\x69\x64\x00\x5b\x4f\x50\x54\x49\x4f\x4e\x53\x5d\x20\x5b\x50\x52" \
-"\x4f\x47\x20\x41\x52\x47\x53\x5d\x0a\x0a\x52\x75\x6e\x20\x50\x52" \
-"\x4f\x47\x20\x6f\x6e\x20\x65\x76\x65\x72\x79\x20\x69\x74\x65\x6d" \
-"\x20\x67\x69\x76\x65\x6e\x20\x62\x79\x20\x73\x74\x64\x69\x6e\x0a" \
-"\x0a\x09\x2d\x70\x09\x41\x73\x6b\x20\x75\x73\x65\x72\x20\x77\x68" \
-"\x65\x74\x68\x65\x72\x20\x74\x6f\x20\x72\x75\x6e\x20\x65\x61\x63" \
-"\x68\x20\x63\x6f\x6d\x6d\x61\x6e\x64\x0a\x09\x2d\x72\x09\x44\x6f" \
-"\x6e\x27\x74\x20\x72\x75\x6e\x20\x63\x6f\x6d\x6d\x61\x6e\x64\x20" \
-"\x69\x66\x20\x69\x6e\x70\x75\x74\x20\x69\x73\x20\x65\x6d\x70\x74" \
-"\x79\x0a\x09\x2d\x30\x09\x49\x6e\x70\x75\x74\x20\x69\x73\x20\x73" \
-"\x65\x70\x61\x72\x61\x74\x65\x64\x20\x62\x79\x20\x4e\x55\x4c\x20" \
-"\x63\x68\x61\x72\x61\x63\x74\x65\x72\x73\x0a\x09\x2d\x74\x09\x50" \
-"\x72\x69\x6e\x74\x20\x74\x68\x65\x20\x63\x6f\x6d\x6d\x61\x6e\x64" \
-"\x20\x6f\x6e\x20\x73\x74\x64\x65\x72\x72\x20\x62\x65\x66\x6f\x72" \
-"\x65\x20\x65\x78\x65\x63\x75\x74\x69\x6f\x6e\x0a\x09\x2d\x65\x5b" \
-"\x53\x54\x52\x5d\x09\x53\x54\x52\x20\x73\x74\x6f\x70\x73\x20\x69" \
-"\x6e\x70\x75\x74\x20\x70\x72\x6f\x63\x65\x73\x73\x69\x6e\x67\x0a" \
-"\x09\x2d\x6e\x20\x4e\x09\x50\x61\x73\x73\x20\x6e\x6f\x20\x6d\x6f" \
-"\x72\x65\x20\x74\x68\x61\x6e\x20\x4e\x20\x61\x72\x67\x73\x20\x74" \
-"\x6f\x20\x50\x52\x4f\x47\x0a\x09\x2d\x73\x20\x4e\x09\x50\x61\x73" \
-"\x73\x20\x63\x6f\x6d\x6d\x61\x6e\x64\x20\x6c\x69\x6e\x65\x20\x6f" \
-"\x66\x20\x6e\x6f\x20\x6d\x6f\x72\x65\x20\x74\x68\x61\x6e\x20\x4e" \
-"\x20\x62\x79\x74\x65\x73\x00\x46\x49\x4c\x45\x0a\x0a\x44\x65\x63" \
-"\x6f\x6d\x70\x72\x65\x73\x73\x20\x74\x6f\x20\x73\x74\x64\x6f\x75" \
-"\x74\x00\x5b\x53\x54\x52\x49\x4e\x47\x5d\x0a\x0a\x52\x65\x70\x65" \
-"\x61\x74\x65\x64\x6c\x79\x20\x6f\x75\x74\x70\x75\x74\x20\x61\x20" \
-"\x6c\x69\x6e\x65\x20\x77\x69\x74\x68\x20\x53\x54\x52\x49\x4e\x47" \
-"\x2c\x20\x6f\x72\x20\x27\x79\x27\x00\x46\x49\x4c\x45\x0a\x0a\x44" \
-"\x65\x63\x6f\x6d\x70\x72\x65\x73\x73\x20\x74\x6f\x20\x73\x74\x64" \
-"\x6f\x75\x74\x00" \
-
-#define PACKED_USAGE \
-0x68,0x31,0x31,0x41,0x59,0x26,0x53,0x59,0xad,0x69,0x6a,0x85,0x00,0x14,0x5c,0x5f, \
-0x80,0x72,0x70,0x77,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x60, \
-0x3c,0x0d,0xb1,0xe8,0x01,0xf3,0xde,0x01,0xa1,0xdf,0x0b,0x7b,0x64,0x91,0x47,0xbe, \
-0xb8,0x03,0xa1,0xa0,0x1a,0x28,0x00,0x00,0xa0,0xb2,0x01,0xf0,0x0f,0xa7,0x2e,0x6f, \
-0xb6,0xfb,0x0e,0xe9,0x7a,0xd8,0x63,0x6d,0x1b,0x4c,0x6d,0x8c,0x1b,0x64,0x89,0xec, \
-0x69,0x07,0x83,0x4d,0xf7,0xdb,0xbc,0x68,0x3d,0xbd,0xca,0x60,0x50,0xed,0xa3,0x1f, \
-0x05,0x03,0x74,0xd3,0x0e,0xde,0xee,0x3d,0x8e,0xf6,0x5a,0x9b,0x4b,0x4f,0xad,0x74, \
-0xf7,0xde,0xf7,0xb6,0xc5,0x45,0x25,0x0a,0x9f,0x6c,0xf2,0x65,0xaf,0x71,0x85,0x4d, \
-0x64,0xa1,0x55,0xf4,0x75,0xc2,0x52,0x28,0x27,0x55,0x05,0x6f,0x5c,0x7b,0x1a,0xef, \
-0x45,0x2e,0xb9,0x92,0x4f,0x6d,0x1b,0x0b,0x69,0xb5,0xde,0x3d,0xf0,0xd0,0x82,0x68, \
-0x00,0x08,0xd1,0xa2,0x62,0x60,0x26,0x80,0x4c,0x26,0x81,0x1a,0x61,0x1b,0x22,0x65, \
-0x3c,0x02,0x65,0x36,0xa1,0xa0,0xd3,0x40,0x80,0x82,0x09,0xa0,0x26,0x40,0xd0,0x53, \
-0x35,0x32,0x34,0xf5,0x4f,0x28,0xda,0x4d,0x06,0x81,0xa6,0x80,0xd0,0x68,0x00,0xd0, \
-0x34,0xc4,0x21,0x44,0xd3,0x48,0xc8,0xd4,0xf5,0x34,0x7a,0x46,0x20,0x69,0xa0,0x68, \
-0x68,0x00,0x1a,0x00,0x03,0x40,0x68,0x00,0x09,0x34,0xa1,0x26,0x84,0x34,0x01,0x34, \
-0x13,0x45,0x3c,0x53,0xd3,0x08,0xd1,0xa8,0x0d,0x1a,0x6a,0x18,0xd4,0xc3,0x48,0xc2, \
-0x34,0x60,0x20,0x68,0x22,0x52,0x68,0x4d,0x34,0xd1,0x34,0x9e,0x98,0x88,0x62,0xa7, \
-0x9a,0x28,0xfd,0x01,0xea,0x99,0x95,0x3d,0x4d,0x19,0xa8,0xf2,0x43,0x4d,0x00,0x31, \
-0x06,0x4d,0x06,0x20,0x91,0x10,0x40,0x9a,0x04,0xc8,0x13,0x13,0x22,0x64,0x60,0x4d, \
-0x43,0x35,0x53,0xfd,0x02,0x9e,0x84,0x9e,0x88,0x3f,0x52,0x1a,0x00,0x19,0x0c,0x9f, \
-0x49,0xbb,0x3c,0x16,0xf8,0x22,0xfe,0xfe,0xdc,0x8e,0xf9,0xe2,0x84,0x29,0x9f,0xb2, \
-0xcd,0x6f,0x2f,0xfa,0xf1,0x3d,0xfc,0xdd,0x5f,0xb5,0xef,0x62,0x08,0x9f,0x73,0x28, \
-0xe8,0x64,0x2f,0x4d,0xf3,0x72,0x8e,0x73,0xd7,0x7b,0xa1,0x5d,0x09,0x08,0x77,0xff, \
-0x45,0xc7,0x2b,0x77,0x7f,0xce,0x5a,0xa1,0xaf,0x69,0xb8,0xd6,0x69,0xae,0x3a,0xab, \
-0xad,0xf5,0xbf,0x19,0xe9,0xa9,0xbc,0x74,0xe5,0xea,0x6a,0xd2,0xb6,0x2e,0x3e,0x5c, \
-0x54,0x4a,0xae,0xba,0xb7,0x2d,0x62,0x60,0x5d,0x5b,0xfd,0x7a,0xb4,0xce,0x17,0xf6, \
-0x5e,0xf0,0x6a,0x2c,0x7f,0xe8,0xe3,0xf8,0x6d,0xab,0x5e,0x62,0x03,0x6c,0x6c,0x91, \
-0x6f,0x42,0xc9,0xd6,0xe6,0xf4,0x3b,0x48,0xab,0xdd,0xed,0x1b,0xe7,0xb1,0x34,0x93, \
-0x41,0x67,0x02,0x29,0x90,0x21,0x91,0x2b,0xfd,0xf6,0x29,0x57,0xe6,0x67,0xad,0xd2, \
-0x79,0xfe,0xa7,0x89,0xf7,0x81,0xdc,0x27,0xfe,0xee,0x1f,0x9d,0x18,0xa5,0x93,0x4c, \
-0x5b,0x3f,0x8e,0x04,0xfe,0xef,0xcd,0x4f,0xde,0xfb,0xdf,0x86,0xdd,0xc3,0x4c,0x62, \
-0xd1,0xa6,0xca,0x5c,0x72,0x29,0xfa,0xd3,0xdd,0x4c,0x95,0xf0,0x59,0x12,0x48,0x5f, \
-0x93,0x8a,0x57,0xb6,0xc7,0x55,0xf7,0xb7,0xb4,0x4c,0x14,0xfd,0xb0,0xb8,0xcc,0xca, \
-0xa3,0x40,0x66,0x67,0xf9,0xef,0xe9,0xba,0xdb,0x61,0x19,0x00,0x10,0x0f,0x93,0xcb, \
-0x4e,0x1a,0xa8,0x81,0x52,0x5b,0xfc,0xfc,0x3e,0x6d,0x3e,0xef,0x65,0x70,0xeb,0x37, \
-0xe1,0xd7,0x3f,0xec,0xc5,0xbf,0xbc,0x29,0x55,0xf1,0xf0,0xd4,0xf1,0x89,0x8b,0x62, \
-0xaa,0x85,0x35,0xb8,0x47,0x0c,0x86,0x03,0x02,0xfd,0x43,0x3f,0xe3,0x7b,0x11,0xe8, \
-0xef,0x39,0xf9,0xf1,0xb0,0x6b,0x5e,0x9a,0x60,0xc7,0x5d,0x66,0xa0,0x27,0x33,0x38, \
-0xb6,0xca,0x4c,0x55,0x6b,0x53,0xf3,0x61,0xae,0x0c,0x50,0xee,0xb6,0x75,0xc7,0x05, \
-0xd1,0x20,0x0b,0x8e,0x46,0xd7,0x7d,0x94,0xe2,0x2e,0xfe,0xc1,0x1f,0x1d,0x90,0x08, \
-0xaf,0xcb,0x73,0xcd,0x55,0x6d,0xe0,0xab,0xc1,0xf3,0xbd,0xbf,0x40,0x8a,0x19,0x39, \
-0x74,0x2e,0xf5,0xbc,0x20,0x37,0x1e,0xc2,0xb8,0x82,0x81,0x90,0x18,0xf7,0x2b,0xb4, \
-0xc7,0x37,0x26,0x8c,0xb0,0x71,0x06,0xea,0x3b,0x47,0xc7,0x6f,0xc5,0x4e,0x66,0xba, \
-0x78,0xc9,0x99,0xbb,0xc8,0xdc,0x36,0x50,0xac,0xf6,0x73,0x5b,0xc5,0xa5,0xbb,0x53, \
-0x50,0x58,0x13,0x72,0x6b,0x54,0x02,0x49,0x55,0x56,0x0d,0xaa,0xcc,0x6b,0xb5,0xc1, \
-0xd0,0xef,0xe6,0x12,0xf0,0x03,0x0b,0x07,0x21,0x63,0xd8,0x30,0x8a,0xc6,0x57,0xf5, \
-0xd0,0x26,0x62,0xd6,0x81,0x90,0xf0,0xbd,0x3e,0xcf,0x0b,0xc2,0x9e,0x38,0xd5,0x67, \
-0xd7,0x55,0x82,0x3e,0x17,0x4f,0xc7,0xc9,0x0d,0xbb,0xf7,0xec,0xe2,0xe9,0xb8,0xa4, \
-0x0d,0x82,0x15,0xab,0x33,0x83,0xa0,0x60,0xda,0x2a,0x17,0x18,0xae,0x34,0x41,0xa3, \
-0x7a,0xfb,0x72,0xbf,0x8f,0x14,0xb2,0xea,0x3b,0xe7,0x9f,0x2d,0xd7,0x00,0x30,0xaa, \
-0x80,0x10,0xe1,0x31,0xca,0x80,0xcc,0xc1,0x98,0xb5,0x41,0x44,0x3b,0x94,0xe8,0x4c, \
-0x14,0x6c,0x69,0xfb,0xa0,0x0a,0xb1,0x27,0xc1,0x6b,0x30,0x27,0x89,0xed,0x0c,0xf7, \
-0xf1,0xe2,0x72,0x53,0x53,0x49,0xe4,0xeb,0xdf,0x47,0x30,0x84,0x42,0xee,0x24,0xbd, \
-0x99,0x86,0xd6,0xde,0xdf,0x66,0x2b,0x72,0x2f,0x3a,0x23,0xb7,0x47,0x7d,0xf0,0xf6, \
-0x7c,0x03,0xa6,0xf5,0x98,0xe3,0xc2,0xfc,0xed,0xb4,0x2a,0xc5,0x66,0x4c,0x2b,0x6e, \
-0xbd,0x50,0x66,0x5a,0x7f,0x99,0x85,0xb4,0x5c,0x90,0x58,0x76,0x8e,0x50,0xd9,0x76, \
-0x56,0xd2,0x80,0xea,0x06,0xe3,0x19,0x60,0x6f,0x83,0x2d,0x0f,0xbd,0x68,0x00,0x62, \
-0x41,0x3d,0x59,0x08,0xdb,0x7d,0xfb,0xdd,0xf3,0xf8,0x61,0xe5,0x4a,0x80,0xf2,0x39, \
-0xff,0xa2,0x01,0x12,0xc0,0xf9,0xb4,0xb3,0x20,0x22,0x5a,0x63,0x11,0xe4,0xd1,0xc5, \
-0xe4,0x7d,0x50,0x6b,0x65,0x03,0x68,0xbb,0x44,0x0f,0x98,0xd1,0x5e,0x8e,0xcf,0xf7, \
-0x5f,0xbb,0xdf,0xbb,0xf0,0xa8,0xd9,0x8e,0xd6,0x5a,0x5e,0x47,0x3f,0x63,0xbd,0xdd, \
-0xbb,0xdb,0x3c,0x53,0xdc,0x93,0xce,0xbc,0xb6,0x81,0xa7,0xd6,0xe2,0x71,0x5d,0xdb, \
-0x1c,0xae,0x9f,0x35,0x4d,0x1d,0xda,0x0a,0xb0,0x14,0x4a,0xb2,0x88,0xe3,0xe4,0xf2, \
-0x12,0x07,0xda,0x3a,0x6b,0x78,0x4f,0x02,0x8a,0x29,0xd3,0x78,0x7d,0x01,0x10,0x48, \
-0x17,0x9c,0xbe,0xbe,0x76,0x9f,0x44,0xe0,0x09,0x7b,0x39,0x0a,0xcb,0xa1,0x16,0x95, \
-0x02,0x16,0x59,0x3a,0x8d,0x23,0xae,0x19,0xc0,0xe8,0x75,0x20,0x0f,0x76,0xeb,0x24, \
-0x5c,0x92,0x0f,0xc8,0xd3,0xab,0x1a,0x63,0xd9,0x53,0xf6,0xbd,0x7b,0x21,0x9a,0x7c, \
-0x3f,0x08,0xcb,0x8b,0xfa,0x8a,0xd4,0x2a,0xaf,0x0d,0x36,0xec,0x70,0x30,0x00,0xa2, \
-0x0c,0xf6,0xdb,0xa3,0xbb,0x5f,0xb2,0xdc,0xc7,0xd0,0xd0,0x31,0xe8,0xf4,0x2d,0xbe, \
-0xa9,0xc0,0xe5,0x55,0x32,0x36,0x66,0x27,0x56,0x64,0x6d,0x3b,0x44,0xc3,0x93,0xc7, \
-0x0b,0xd9,0xc2,0x50,0x30,0xe4,0xb9,0x2c,0x37,0xfb,0x34,0xb3,0xc0,0x21,0x6c,0xc0, \
-0x6e,0x14,0x66,0x30,0xb4,0xc0,0xc5,0x64,0x39,0x24,0x2d,0xb0,0xce,0x1f,0xeb,0x21, \
-0x43,0x74,0xe0,0xc5,0xfc,0xf8,0xf5,0xe8,0x31,0x04,0x5b,0x50,0xcb,0xd5,0x7f,0x1b, \
-0x73,0x69,0x24,0xa5,0x42,0xe9,0x55,0x77,0x95,0xea,0x78,0x0d,0x76,0xe2,0x83,0x2f, \
-0x5a,0xfc,0xf9,0xab,0xdb,0x1d,0x6b,0x70,0x86,0xab,0x17,0xed,0x8a,0xba,0xa0,0x89, \
-0x0d,0x47,0x84,0x19,0x9f,0x43,0x89,0xec,0xee,0x69,0x23,0xb7,0x78,0x6c,0x5a,0xbc, \
-0x9c,0x7e,0xa2,0xc2,0x17,0x94,0xb3,0x3a,0xd7,0x58,0x72,0x23,0x7e,0x0a,0xbf,0x37, \
-0xa9,0x65,0x57,0x6f,0x44,0x43,0xc5,0x10,0x47,0x64,0x71,0xa6,0x0e,0xb4,0x92,0x10, \
-0xc1,0xe9,0xe5,0x39,0x72,0x3b,0xb0,0x28,0x1e,0xb3,0xcb,0xe1,0x7c,0x2a,0x06,0x3f, \
-0x7a,0xaa,0x1c,0xcd,0x59,0xdb,0x1a,0x59,0xcc,0xde,0xbb,0xbf,0xc7,0x3a,0x28,0x8c, \
-0x41,0x02,0xea,0xa5,0xcd,0x41,0xc9,0xbe,0x58,0xb7,0x95,0x14,0x82,0x1b,0xdc,0xb3, \
-0x24,0xf6,0xb6,0x9e,0x0d,0xa4,0xf0,0xa5,0xea,0x7c,0x38,0x31,0x21,0x65,0xc9,0x1a, \
-0xfd,0x9a,0xbb,0xd6,0xba,0x58,0x47,0xfb,0x4f,0x2f,0x84,0x0d,0x6b,0x14,0x38,0x13, \
-0xde,0xf1,0xef,0xae,0x90,0x26,0x7e,0x24,0x74,0x04,0xf8,0xe0,0x0c,0xb2,0x87,0x60, \
-0x24,0x96,0xf5,0x28,0xf8,0xb7,0xf3,0xfb,0xb6,0x6a,0xdd,0x58,0xfb,0x36,0x38,0x61, \
-0x2b,0x58,0x7d,0xa0,0x75,0xe6,0x3e,0x9b,0xaf,0xc3,0x7a,0xd6,0x88,0x31,0x72,0x70, \
-0xe8,0xd8,0x16,0x75,0x83,0x08,0xbd,0xf4,0x75,0xe5,0xc3,0x33,0xdd,0x4a,0x08,0x0c, \
-0xbe,0x5e,0x74,0xce,0xb0,0x10,0x18,0xc0,0x86,0x85,0xaa,0x53,0x5e,0x15,0x90,0x85, \
-0xab,0x13,0x81,0x8a,0xf5,0xe5,0xc5,0xfb,0xdc,0xfb,0xae,0x59,0xe9,0x4e,0xed,0x27, \
-0x7f,0xc7,0xbf,0x97,0x6d,0xef,0xe5,0xc4,0x56,0x2f,0x6a,0x15,0x7b,0x14,0x6d,0xce, \
-0x0e,0xa7,0x27,0x95,0xba,0x04,0xf8,0x18,0x57,0x38,0xc3,0x1c,0xad,0x2c,0xec,0xbe, \
-0xd7,0x1d,0x49,0xb6,0x2e,0xa8,0x6d,0x8e,0xbf,0x63,0xf1,0x3b,0x90,0x0d,0x90,0x91, \
-0x10,0x05,0x17,0xa5,0xa2,0xbc,0x9b,0x0f,0x95,0x81,0x0a,0xc5,0x08,0x29,0x23,0xc2, \
-0xd6,0x41,0x3b,0x99,0x43,0xa6,0xba,0x7d,0xbe,0x90,0x17,0x3e,0x86,0xbc,0xb4,0x64, \
-0x55,0xc2,0xb6,0x0d,0x1a,0xa5,0xf6,0x7a,0x4b,0xc7,0x1b,0xc2,0xae,0x77,0x0e,0x15, \
-0xb2,0x14,0x4e,0x2f,0x2d,0xfa,0x00,0x3a,0x1b,0x50,0x89,0xfe,0x32,0x75,0x89,0xa0, \
-0xf0,0x8a,0x47,0x41,0x24,0x74,0x61,0xf1,0x14,0x0b,0xb4,0xd4,0xc9,0x0b,0xe9,0xbb, \
-0x50,0xfa,0xa0,0x2a,0x0f,0x8a,0xf6,0x32,0xdf,0xe8,0x5c,0x71,0x78,0x51,0x77,0xef, \
-0xdf,0xd0,0xf8,0xdd,0x31,0x8d,0xaf,0x85,0xdb,0xb1,0xe3,0xf3,0x6d,0x62,0x78,0xbb, \
-0x88,0x70,0x92,0x08,0xec,0x94,0x20,0x9a,0x1d,0xc3,0x42,0x0a,0x40,0x0f,0x93,0x05, \
-0xf2,0x42,0xe3,0x1f,0x6e,0x5e,0x1e,0xa2,0xd9,0xbf,0x54,0x97,0x90,0x14,0xcb,0x93, \
-0x14,0xca,0x9f,0x9a,0xc8,0x36,0x70,0xbf,0x0d,0xd9,0xf2,0x0c,0x6c,0xaf,0xf8,0x47, \
-0xb7,0x6c,0x7a,0x29,0xa4,0x37,0xed,0xd3,0x47,0x4f,0x95,0xbd,0xf4,0xe5,0xe5,0x8d, \
-0x26,0xf6,0x75,0x38,0x0c,0x1f,0xd8,0x34,0xb7,0x20,0xe3,0xf4,0xc5,0xa6,0xfb,0x79, \
-0x66,0xa3,0x5c,0xec,0xa8,0xdf,0x81,0x26,0x97,0xba,0x88,0xa0,0xfa,0xe1,0x10,0x3f, \
-0x15,0xef,0xf3,0xe6,0xb1,0x9f,0x2b,0xfc,0xd1,0xd3,0xd8,0x87,0x19,0xb7,0xf4,0xe7, \
-0xbd,0xd3,0x39,0x5b,0x51,0xda,0xf8,0x23,0x32,0x4f,0xcf,0xc9,0x05,0x55,0xfb,0xe5, \
-0x8c,0x3e,0xb2,0xf9,0x60,0x03,0x4c,0xc2,0x6c,0x3b,0x59,0x04,0x03,0xeb,0x97,0xe7, \
-0x9b,0xb7,0x46,0x2e,0x8b,0xf7,0x98,0x5f,0x39,0xf4,0xdc,0x00,0xa2,0xe5,0x65,0x03, \
-0x5e,0x00,0x51,0xf9,0x47,0xa1,0xd7,0x39,0x90,0x61,0x4c,0xcf,0xdf,0x6c,0x8c,0x7f, \
-0x93,0xa0,0x63,0x5f,0x74,0x79,0x87,0x22,0x7b,0x2e,0x17,0x41,0xfb,0x8f,0xea,0xd6, \
-0x0f,0xd7,0xb6,0x5e,0xaf,0xf4,0xb3,0xdf,0x32,0xc4,0x57,0x6a,0xb7,0x6d,0x7e,0xac, \
-0xf2,0x40,0x6a,0xed,0xa0,0x85,0xc9,0x18,0x3b,0x6c,0xb9,0xda,0x8d,0x6d,0x1b,0x4f, \
-0x31,0xcc,0x61,0x86,0xc7,0xf1,0xfa,0xc5,0xdb,0x84,0x0b,0x63,0x10,0x2d,0x0b,0xb9, \
-0x61,0xfc,0x70,0x39,0x91,0xc4,0x87,0xe0,0x6c,0x0b,0x0e,0x8a,0x9e,0xae,0x9e,0xc5, \
-0xd5,0x0b,0xc0,0x76,0x1a,0x8b,0x19,0xac,0x4e,0x6b,0x8b,0x85,0x54,0xbe,0x8d,0xa0, \
-0x5f,0xc7,0x62,0x3c,0xbe,0xb1,0xea,0x0e,0x8c,0x5c,0xf4,0x83,0xaa,0xc5,0xc5,0x23, \
-0x32,0x8d,0x02,0x99,0xfa,0xe3,0xed,0x27,0x81,0xc3,0x42,0x12,0x81,0x9c,0x6f,0x25, \
-0xf7,0xd0,0x95,0xfc,0xf8,0x6b,0xe0,0xd7,0x80,0x5b,0x23,0xaa,0xb0,0x6b,0x6f,0x6d, \
-0x12,0xa4,0x11,0xfa,0x62,0x9b,0x01,0xbe,0x06,0x69,0x50,0x8e,0xc2,0x06,0x43,0x6b, \
-0xc1,0x05,0x97,0x6d,0xda,0x18,0xf8,0x81,0x20,0x85,0x5e,0xdf,0xd7,0x26,0x90,0xbf, \
-0x74,0xb7,0x39,0x61,0xdb,0xc0,0x60,0xc0,0x69,0x55,0xd9,0x7b,0x16,0x1c,0x39,0x01, \
-0xd5,0xef,0xd7,0xa7,0x20,0xf3,0xbc,0x5b,0xb3,0xb6,0xe6,0x17,0x25,0xf3,0xc1,0x4d, \
-0x53,0x0a,0xde,0x7e,0x89,0x64,0x69,0xfe,0xf0,0xa4,0xe6,0x4d,0x31,0x70,0xe3,0xcb, \
-0x0c,0xe6,0x7b,0x9a,0x0c,0xab,0xbc,0xc8,0x2e,0xa0,0x44,0xe0,0xc7,0x9a,0xab,0x24, \
-0x99,0x82,0x4a,0x38,0x47,0x7d,0xf7,0xdc,0x80,0xc8,0x50,0x62,0x14,0xd2,0x38,0xc5, \
-0x50,0x9d,0x13,0x89,0x65,0x96,0x63,0x80,0x09,0xea,0x6e,0x81,0x2f,0x13,0x26,0x3d, \
-0xba,0x09,0x0b,0x21,0x9d,0x4c,0x8c,0xd0,0x63,0x38,0xa0,0x9d,0xd8,0x27,0x63,0x18, \
-0x87,0x95,0xe4,0x9c,0x6d,0x40,0xb5,0xda,0xf5,0x36,0x14,0x8c,0x63,0x49,0xda,0xed, \
-0x87,0x96,0x7e,0x58,0x75,0x56,0xd3,0xa4,0x45,0x3f,0xba,0x26,0x31,0xf2,0x1f,0x1e, \
-0xce,0x1b,0xb1,0x60,0x07,0xda,0xc3,0x51,0x8d,0xaf,0x46,0x54,0x4e,0x38,0xa3,0x58, \
-0xc2,0x7b,0xce,0x33,0xf6,0x9f,0x05,0x7c,0xb1,0x33,0xc4,0xb6,0x3c,0x20,0x8d,0x20, \
-0x66,0x85,0xd1,0xfd,0xe8,0x6a,0x5c,0xd0,0x88,0x72,0xe1,0x96,0xa4,0x2e,0xcf,0x2f, \
-0xf3,0x9e,0x86,0x07,0x35,0xdb,0x17,0x44,0xf6,0x6f,0x39,0xfd,0xe9,0xfa,0x3a,0xe0, \
-0x00,0xdf,0xb7,0xc1,0x15,0x03,0x28,0xcf,0x72,0xbd,0xef,0x14,0x18,0xa9,0x95,0x52, \
-0x69,0xe0,0x1f,0xca,0x8d,0x50,0x09,0x7b,0xd6,0xf9,0x67,0xba,0x0b,0x5a,0xee,0xe3, \
-0xf2,0xb0,0x45,0x69,0x3f,0x36,0xce,0xba,0x78,0xe6,0xba,0xd0,0x7e,0x8a,0x28,0xf9, \
-0x6c,0x32,0xd2,0xcd,0xf1,0xe2,0x1c,0x0a,0xca,0x56,0x54,0x93,0x45,0xe3,0xeb,0x5e, \
-0x56,0x97,0x8d,0xcf,0x1a,0x00,0x43,0x8d,0xa4,0x29,0xb4,0x05,0xe0,0x43,0x1d,0x2e, \
-0xa2,0xa0,0x32,0x8f,0x07,0xef,0xac,0x79,0x7e,0x71,0xb8,0xd3,0x48,0x4f,0xcb,0x85, \
-0xaf,0x72,0x8d,0x0b,0xa7,0x66,0xf7,0xcd,0x37,0x8e,0x34,0x6b,0x80,0xb4,0xe5,0xeb, \
-0xa7,0xd5,0xa5,0xb4,0x02,0xb9,0xd1,0xad,0x55,0x03,0x93,0xcf,0x83,0x6b,0x79,0x3c, \
-0x67,0x62,0x81,0xc9,0x18,0xaf,0x67,0x6b,0xed,0xf9,0x14,0x71,0x29,0xa9,0xfc,0x1f, \
-0x1f,0x2c,0x87,0x11,0x65,0x42,0xbf,0x4f,0x33,0x08,0xdb,0x05,0x4f,0x97,0x44,0x19, \
-0x6f,0x4d,0xee,0xe9,0x5b,0xd8,0x72,0xd9,0x41,0x7b,0x0a,0xd6,0x12,0xe0,0x73,0x52, \
-0xa2,0xc8,0xaa,0x14,0x91,0x1d,0x51,0xd7,0xd1,0x40,0xfd,0x10,0xb8,0xf3,0x6a,0x9d, \
-0x34,0xe3,0xad,0x8e,0x4e,0xbb,0x60,0x64,0x55,0x4a,0xa1,0x5f,0x50,0x95,0x76,0xfd, \
-0x52,0x26,0x7b,0xff,0x0e,0x9a,0xed,0xcf,0x2b,0x90,0xa4,0x82,0x1c,0xda,0xee,0x81, \
-0x59,0x33,0xe6,0xe1,0xb5,0xa3,0x34,0xfa,0x1a,0x2e,0x21,0xed,0xf1,0x54,0xda,0x99, \
-0xe7,0xf1,0xfe,0xeb,0x63,0x6f,0x86,0x79,0x5b,0x3c,0x5d,0xf7,0xf6,0x94,0xe9,0x65, \
-0x1c,0x48,0x39,0xfd,0xea,0xad,0xf1,0x2b,0x47,0x54,0xa8,0x10,0x9c,0x00,0x6e,0xb9, \
-0xa5,0xf9,0x3e,0x42,0xc2,0x15,0xbd,0x4c,0x15,0x47,0x4a,0xc9,0x80,0xf1,0xb9,0x01, \
-0xeb,0x5c,0xa5,0x51,0x32,0x25,0xcd,0x2d,0x2a,0xa4,0xd9,0x92,0x15,0x89,0x97,0xce, \
-0x7e,0x15,0x12,0xfb,0x33,0xc8,0xdc,0xd7,0xb7,0xb5,0x83,0x63,0x03,0x01,0xd4,0x75, \
-0x11,0x90,0xe1,0x7c,0xe0,0x2c,0x18,0x5e,0x4a,0xe3,0x8f,0x54,0xe9,0x18,0xfb,0x56, \
-0x77,0xb6,0x6e,0x9e,0xd7,0x98,0xf1,0x5f,0x58,0x3f,0x50,0x6d,0xaf,0x6d,0x64,0x28, \
-0xea,0xe5,0x7a,0xa7,0xde,0x63,0x5e,0x76,0x17,0xc5,0x65,0xee,0x48,0xd4,0x32,0x83, \
-0x68,0x7c,0xcd,0x56,0x51,0x92,0x94,0x61,0x67,0xf7,0xc2,0x61,0x94,0x9f,0xbb,0x36, \
-0x29,0x5c,0xf8,0x5c,0xf9,0xd8,0x51,0x03,0x49,0xf1,0x7e,0xba,0x45,0x68,0x32,0x36, \
-0x55,0x1a,0x7e,0x4b,0x3c,0x47,0xa2,0x69,0x23,0xe3,0x16,0xd0,0x23,0xe1,0x2d,0xfa, \
-0xc3,0x41,0x28,0x71,0x75,0xef,0x1a,0xeb,0x71,0xa5,0x89,0xab,0xc2,0x8d,0xed,0x9f, \
-0xae,0x0d,0x3c,0xdb,0x14,0x56,0x15,0xf4,0x58,0x99,0x1a,0xd8,0x2a,0x40,0xfd,0xbf, \
-0x4e,0x5e,0x94,0xe2,0x9e,0x2a,0x95,0x3c,0x3a,0xb5,0xbd,0x2b,0xad,0x41,0x3e,0x9e, \
-0x43,0xd1,0x6e,0x1d,0x7d,0xd7,0x0d,0xa1,0xf2,0xe7,0x18,0x83,0x24,0x65,0x44,0x09, \
-0xbb,0x74,0x33,0x88,0xdb,0xbe,0x0f,0x6a,0x56,0x31,0xca,0xc2,0x97,0x22,0x03,0x68, \
-0xeb,0x1e,0x2a,0x36,0x34,0x5a,0xea,0xd5,0x0f,0x76,0x03,0xb0,0x50,0x8c,0xf1,0xa3, \
-0x8f,0x68,0x33,0x7b,0x2e,0x94,0x8d,0x78,0x8b,0x7e,0x3a,0x2d,0x4d,0xb5,0xab,0x46, \
-0xc3,0x75,0xe1,0x1c,0x04,0xd1,0xab,0xbd,0x00,0xfa,0x34,0x8d,0xe5,0x53,0x7f,0xac, \
-0x7c,0xfa,0xc3,0xd2,0x33,0x5b,0xbb,0xfe,0x9a,0x85,0xe2,0x61,0x05,0x52,0x61,0x78, \
-0x3a,0xee,0xb2,0xc3,0xd3,0xf0,0xf8,0xee,0x04,0x6b,0x80,0xdd,0xb6,0x87,0x36,0xef, \
-0xfc,0xee,0xf8,0x54,0x99,0x50,0x34,0x2a,0x47,0x53,0xb4,0xd7,0xbc,0x35,0x21,0x78, \
-0x67,0xca,0xfa,0x40,0xec,0xbc,0xd5,0x96,0x53,0xb4,0x8b,0xb5,0x18,0x8b,0xd1,0x79, \
-0x56,0xf4,0x31,0xe1,0xc5,0x76,0xa8,0x50,0xcb,0xe9,0x6c,0x65,0x33,0xe0,0x41,0x66, \
-0x7f,0x4b,0x78,0x7a,0xbc,0xea,0xf9,0xaf,0xf6,0x57,0x72,0xc2,0x3a,0xd5,0x75,0xfc, \
-0x8b,0xa0,0x1f,0xd4,0x1d,0x98,0x0f,0x3f,0x9f,0x85,0xa3,0x4b,0x7b,0x2c,0x2d,0x04, \
-0x10,0x06,0x9d,0xed,0x48,0xf0,0x6e,0xea,0x23,0xf9,0x29,0x0c,0xd3,0x50,0xb5,0xa0, \
-0x83,0xdf,0xec,0xdc,0x4f,0x79,0x7e,0xec,0xb0,0x7f,0x36,0x4f,0x02,0x9e,0x28,0x3e, \
-0x53,0xb8,0x71,0xf3,0xfb,0x3a,0xe3,0x6c,0x05,0x46,0xd3,0xbf,0x85,0x8d,0x36,0xcf, \
-0x59,0xa7,0x72,0xd3,0x99,0x10,0x64,0x84,0x37,0x55,0xf6,0x81,0x90,0xde,0x14,0x21, \
-0x23,0xc9,0x2a,0x8e,0x2a,0x9d,0x2d,0xf2,0xb5,0x9a,0x56,0x6d,0xdf,0x00,0xbb,0x7c, \
-0x3d,0xf1,0x7e,0xdf,0x79,0x96,0x20,0x51,0x0c,0x59,0x56,0xf9,0x61,0x99,0x0a,0x72, \
-0x36,0x97,0x16,0x1a,0xe8,0xe3,0x3c,0xb7,0xbd,0x30,0xce,0x40,0xce,0x8b,0x9d,0x2b, \
-0xd8,0xe0,0x3d,0x77,0xf1,0x03,0x7d,0x45,0xd7,0x70,0x43,0x1b,0x1b,0x9e,0xaf,0x78, \
-0x87,0x2e,0xb6,0x5c,0xf1,0xdc,0x40,0x1a,0xb4,0x62,0x9c,0xa8,0xfc,0x52,0xb4,0x30, \
-0xe9,0x00,0xb0,0xf7,0xcb,0x35,0x95,0x44,0xa8,0x57,0xb4,0x2f,0x21,0x0d,0x10,0xac, \
-0xd9,0x90,0x53,0x1e,0x16,0x58,0x66,0xeb,0x1d,0x41,0xcb,0x2c,0x6b,0x9c,0x3c,0xc0, \
-0xf0,0x6d,0x8f,0x4d,0x3a,0x3f,0x2d,0x22,0x17,0x98,0x3b,0x64,0x47,0x5b,0xb9,0xab, \
-0xd8,0xa9,0x6d,0x54,0x5f,0x2a,0xec,0xa3,0x72,0x14,0xeb,0x8e,0x49,0xbc,0x03,0x64, \
-0xe3,0x51,0x43,0x9f,0x04,0xb8,0xbe,0x6c,0x28,0x1e,0xa2,0xac,0x1b,0x3d,0x24,0x5e, \
-0x06,0x73,0xa5,0x79,0xf1,0x2c,0x59,0x81,0x37,0xc1,0xc8,0x7c,0x0e,0xe0,0xa0,0x6a, \
-0x48,0xcb,0xb1,0x25,0x68,0xc2,0x0c,0x75,0x28,0x47,0x27,0x23,0x7a,0xb3,0x83,0x2a, \
-0xa8,0xc2,0x0c,0xc0,0x79,0x5b,0xfb,0x25,0x60,0x70,0x11,0x67,0x0e,0x20,0xb9,0x0a, \
-0x4a,0xb9,0x7a,0x05,0xec,0x8b,0xc8,0x70,0x05,0x88,0x15,0x6d,0xec,0xb4,0x86,0x60, \
-0x2e,0x22,0x64,0xcc,0x60,0xa9,0x82,0x37,0xc8,0x72,0x24,0x01,0x4d,0xf8,0x7b,0x5d, \
-0xe1,0x16,0x5a,0xac,0xbc,0x45,0x2c,0xd6,0x9a,0x53,0x50,0x58,0x10,0x87,0x69,0xa8, \
-0x23,0x72,0x0a,0x12,0x47,0x28,0x9d,0xce,0xde,0x6f,0xad,0xae,0xba,0x70,0xdc,0x65, \
-0x80,0xa1,0xb6,0xdd,0xbf,0x6f,0x0e,0xa1,0xed,0xef,0xe1,0xe8,0xca,0x0c,0xe4,0xd4, \
-0x25,0x1d,0xd1,0xc1,0x70,0x70,0xe1,0x63,0xf0,0x4a,0x31,0x7e,0x1c,0x3d,0x70,0x3a, \
-0x76,0x5e,0x01,0xaf,0x1e,0x4a,0x3b,0xba,0x64,0x0b,0xf9,0x42,0x7d,0x0f,0x62,0xda, \
-0xaa,0xf2,0x55,0x06,0xca,0xc0,0xb7,0x77,0xef,0xd3,0x68,0xd6,0x68,0xd6,0x07,0xdb, \
-0xb7,0x96,0x2f,0x1e,0x24,0x29,0x3c,0x2a,0x19,0x84,0xd2,0xc1,0xab,0xe5,0x8f,0x1e, \
-0x6b,0x8b,0x66,0xa3,0x81,0x81,0xf6,0x1d,0xe7,0xa8,0x56,0x7b,0xd2,0x19,0xbd,0xb0, \
-0xd5,0xad,0xb6,0xa2,0x3c,0x0f,0xc5,0x1d,0xf5,0xaf,0x17,0x3d,0xcc,0xa4,0x6a,0x40, \
-0xaf,0x59,0xc7,0x08,0xd8,0x43,0x85,0x9d,0x5a,0xb0,0xf7,0xc2,0xc9,0x6a,0x2d,0x30, \
-0x60,0x18,0x5b,0x81,0x07,0xa9,0x2d,0x91,0x41,0x13,0xed,0x89,0xfc,0xa6,0xc2,0xce, \
-0x2c,0xf5,0x86,0xac,0x8f,0x76,0x62,0x47,0x6f,0xd3,0x54,0xda,0x23,0x1b,0x65,0xb2, \
-0xa2,0x85,0x24,0xa4,0x70,0xc6,0x95,0x80,0xba,0x2d,0xc7,0xa8,0x42,0xb6,0x38,0xf1, \
-0x8f,0x67,0x25,0xe2,0x3b,0x74,0xde,0x97,0x55,0x3c,0x23,0x30,0x1c,0x57,0x86,0x02, \
-0xb7,0x60,0x07,0xb3,0x83,0x9a,0x01,0x44,0xca,0x3a,0xae,0x5b,0x76,0x8d,0x6d,0xee, \
-0x07,0x67,0x44,0x61,0x40,0xad,0x60,0xb7,0x4e,0xa5,0xc7,0x3f,0xba,0xd6,0xe0,0x4d, \
-0x10,0x74,0xb9,0xb0,0x4c,0xec,0xa7,0xce,0x58,0x50,0xeb,0xb4,0x8f,0x63,0xf8,0x8a, \
-0x00,0xb7,0x41,0xb1,0x4a,0xa9,0x5c,0x20,0x02,0x4c,0x0b,0x84,0x47,0x21,0x03,0x14, \
-0x9a,0x0f,0x35,0xdb,0x64,0xa8,0xd8,0x9e,0x0a,0x98,0x9a,0xc8,0x78,0x3e,0x7b,0x20, \
-0xed,0x3b,0x3f,0x51,0x4a,0x64,0x0b,0xb8,0x97,0xf5,0x92,0x34,0xe0,0x3b,0xa5,0x08, \
-0xb2,0x09,0x0a,0x8a,0x18,0x50,0x77,0x51,0x04,0x8d,0x66,0xaf,0x7a,0x97,0x26,0x6c, \
-0xb4,0x6e,0x2d,0x7f,0xdd,0xb3,0x78,0x1d,0x43,0x33,0x47,0xcb,0x0b,0xa7,0x40,0xa3, \
-0x81,0xcb,0x50,0x12,0x18,0x91,0x0d,0xd9,0x4a,0x17,0x13,0x41,0x06,0x43,0xa8,0x3d, \
-0x20,0xd1,0x96,0xa2,0x03,0x25,0x3a,0x2d,0x1e,0xdb,0x51,0xdd,0xb8,0xb0,0x91,0x75, \
-0x07,0x8b,0xd5,0xb0,0xef,0x02,0x01,0xa9,0xb2,0xf3,0xb8,0xb5,0xef,0xca,0xcd,0xad, \
-0xe6,0x91,0x7b,0xdc,0xc1,0x0f,0x53,0xa3,0xb0,0x5c,0xe9,0x7e,0x1a,0x55,0x40,0xb5, \
-0x95,0xa1,0xe8,0x30,0xdb,0xeb,0x43,0x18,0xf0,0x23,0xca,0xbc,0x95,0xb3,0x9e,0xf5, \
-0x0e,0x5b,0xac,0x89,0xf1,0x6b,0x72,0x12,0xda,0x8c,0xa1,0x60,0x27,0x86,0x95,0x6b, \
-0x32,0x74,0x08,0x55,0x5b,0x86,0xb6,0xb8,0x70,0xce,0x2e,0xf6,0x35,0x8f,0xad,0xba, \
-0x46,0x3a,0xac,0x33,0x45,0x92,0x38,0x11,0xde,0x45,0xc0,0x16,0x1d,0xfd,0x04,0x91, \
-0xb4,0xf6,0x15,0x07,0x5a,0x8e,0xbc,0x7a,0xa1,0xf1,0x3c,0x59,0xbc,0x21,0x47,0xf2, \
-0xfb,0x1a,0x1c,0xf5,0x67,0x97,0x8b,0xf2,0x29,0xb3,0xd6,0xbd,0x51,0x52,0x1c,0xb8, \
-0x30,0x82,0xbc,0x5b,0xa4,0xe1,0x92,0x98,0x5f,0xd1,0x7a,0x47,0x90,0x5b,0x8a,0xd0, \
-0x64,0x8e,0x34,0x72,0xc9,0x8e,0x3e,0x2a,0xc6,0x14,0x75,0x21,0x12,0xb4,0x64,0x64, \
-0x3b,0xa7,0x8d,0xf5,0xb0,0x94,0x18,0xca,0xb7,0x65,0x87,0xeb,0xfb,0xe3,0xe9,0xa5, \
-0xf3,0xcc,0xdd,0x36,0xed,0xe1,0xc8,0x07,0x16,0xe3,0xab,0x0c,0xf4,0x3e,0x65,0xe2, \
-0x28,0x3c,0x63,0x9c,0xc7,0x91,0x76,0x52,0x0a,0x70,0xc6,0x1a,0xe0,0xcc,0xca,0xbf, \
-0x97,0x17,0x02,0x09,0xa6,0x76,0xc3,0x7b,0xb6,0xf8,0xfe,0xd6,0xc9,0xef,0xf6,0xf8, \
-0xfa,0xdc,0xb5,0x81,0xd9,0xcc,0x10,0x7e,0x0d,0x41,0x40,0xc2,0x10,0xa3,0x68,0xcf, \
-0x8f,0x1e,0xdc,0x77,0xb0,0x9d,0xe1,0xa8,0x53,0xac,0x67,0x44,0xc3,0xb5,0x73,0x19, \
-0xbe,0xa7,0xed,0xfc,0xc9,0x48,0xe9,0xf9,0x40,0x43,0x0c,0xb6,0x76,0xec,0xdd,0x25, \
-0x48,0x04,0x0e,0xdf,0xfe,0x20,0x03,0x7b,0xf4,0x44,0x14,0x13,0x41,0xb1,0xa1,0x26, \
-0x44,0x08,0x45,0x2e,0xf0,0x7e,0x99,0xc7,0x32,0xc8,0x4b,0x1c,0x73,0xc6,0x7a,0x72, \
-0x85,0xe5,0xe7,0xde,0xf1,0x5b,0x0f,0x57,0x37,0x1e,0x54,0xbb,0x82,0x2e,0x1f,0x77, \
-0x1e,0x5e,0x0f,0x10,0xbc,0xf0,0xfb,0xe1,0xb9,0x5a,0x27,0xd2,0xa0,0xf1,0xb1,0x51, \
-0xf7,0xad,0x73,0x7d,0x38,0xdd,0xc8,0x35,0xb0,0x42,0x0d,0xb8,0xe4,0xcc,0x00,0x3e, \
-0x06,0x9e,0x55,0x2a,0x43,0x94,0xe7,0xd0,0x97,0xb9,0xa3,0x92,0x2c,0x6d,0x41,0xf7, \
-0x42,0x0c,0x76,0x05,0x01,0x1f,0xc3,0xd2,0x61,0xc4,0xa3,0x5e,0x84,0xab,0xcb,0xa0, \
-0x61,0xbf,0xe3,0xf3,0x32,0x86,0x0d,0x68,0xf0,0x31,0xb6,0x18,0x55,0x19,0x8b,0xd0, \
-0x48,0x57,0x58,0xd0,0xac,0x83,0x97,0x8f,0x83,0x7f,0x88,0x20,0x00,0xcc,0xcc,0x73, \
-0xfc,0x51,0x5b,0xbf,0x45,0x7d,0x9c,0x5d,0x20,0x6b,0xe3,0x2b,0x7f,0x19,0xc6,0xf2, \
-0xe9,0x3d,0x93,0xfa,0xf7,0xa9,0xb0,0x6c,0x81,0xf8,0xfb,0x54,0xfe,0x0a,0xcf,0xa7, \
-0x72,0x77,0x52,0x04,0x47,0x26,0x43,0x4d,0x5a,0xb7,0xf4,0xfb,0x6f,0x6a,0x34,0xa9, \
-0xdc,0x93,0x22,0xe0,0xa4,0x49,0x5a,0x0b,0x6c,0xdc,0xbe,0xc8,0xe1,0x75,0x6d,0x68, \
-0x61,0x6a,0x94,0x6a,0x85,0xc5,0x36,0x47,0x28,0x74,0x0b,0xf0,0x8b,0xb2,0x42,0x2c, \
-0x90,0x04,0x5f,0xc3,0xae,0x88,0x98,0xcc,0x74,0x28,0x65,0x9e,0x6a,0x97,0x7a,0x31, \
-0x24,0x08,0xcc,0x01,0xf8,0xc2,0x9f,0x7e,0x33,0x9e,0x4f,0x71,0x2a,0x80,0x1a,0x32, \
-0xf4,0xf2,0x40,0xdc,0x59,0x04,0xc6,0xe2,0x44,0x4a,0x6b,0x0f,0x3f,0x92,0x39,0x06, \
-0x27,0xfa,0x06,0x4f,0xcd,0xfb,0x31,0x89,0x45,0x93,0x60,0xf8,0x0d,0x7a,0x69,0x64, \
-0xef,0x89,0xf9,0xb7,0x14,0xb2,0xae,0x4d,0xb6,0x24,0x26,0x87,0xc7,0xc5,0x8c,0xcc, \
-0xc8,0xb2,0x92,0x42,0xb5,0x91,0xa7,0x98,0x74,0xa9,0x05,0x48,0xc9,0x50,0xac,0x63, \
-0x26,0x02,0xc1,0xec,0xfe,0xac,0x67,0xf9,0x3f,0x1e,0xe6,0x4e,0x5b,0xd3,0x0d,0x60, \
-0xc7,0xa5,0xa7,0xef,0xa1,0x50,0x15,0x74,0x36,0x89,0x60,0x2e,0xa9,0x62,0x24,0x10, \
-0x63,0xfb,0x5f,0xe3,0x82,0x8f,0xde,0x93,0x9f,0x61,0xb6,0x24,0xe0,0x85,0x82,0x2a, \
-0x98,0xb2,0x8a,0x2b,0xc3,0xa5,0xc0,0x06,0x9a,0xdd,0xed,0x13,0x10,0x32,0x25,0x20, \
-0x88,0xca,0x9c,0xbd,0x7e,0xaf,0x98,0x5f,0xbf,0xf4,0xef,0x24,0x38,0x0a,0x8c,0x03, \
-0x7a,0x10,0xbc,0x68,0xda,0x26,0x2f,0xd1,0x83,0x2e,0x20,0xbd,0x1c,0x39,0xe3,0xac, \
-0x10,0x99,0x43,0x58,0x2c,0x71,0x6c,0xcf,0xdd,0x4e,0x0a,0x99,0xac,0x2e,0x9c,0x43, \
-0x12,0x7f,0x32,0x43,0x39,0x96,0x77,0x37,0xdf,0xb6,0x1c,0x15,0x15,0x24,0x34,0xc6, \
-0x50,0xfa,0xf3,0x57,0x30,0x8c,0x54,0x45,0x39,0xeb,0x1e,0x4e,0xb5,0x7e,0x64,0x90, \
-0xbf,0xee,0x94,0x15,0x41,0x5d,0xae,0xb1,0x78,0x5a,0x06,0x63,0x7f,0x3a,0x51,0x5c, \
-0x1e,0x58,0x31,0x7a,0xd7,0x56,0x35,0x2e,0xc0,0x8c,0xe1,0x1d,0xc9,0x0a,0x96,0x2e, \
-0x0a,0xe6,0x40,0x00,0x8d,0x44,0x50,0x42,0x2c,0x92,0x04,0xce,0x66,0xdd,0xbb,0x69, \
-0x0e,0x37,0x83,0x02,0x6c,0x30,0x62,0x8b,0x98,0x5f,0xb2,0xd0,0x98,0x37,0x2f,0x56, \
-0x32,0x27,0x1c,0xc2,0x54,0xd5,0x99,0xc7,0x3b,0x48,0x4c,0x28,0x5a,0x01,0xe0,0x98, \
-0x9c,0xac,0x9e,0xce,0x17,0x38,0xa1,0xf6,0xd7,0x6f,0x9f,0xde,0xc7,0x87,0xc1,0xbf, \
-0x2e,0x11,0x77,0xd2,0x34,0x6d,0x19,0xf9,0x31,0x09,0x63,0xd8,0x65,0xe8,0xe5,0x14, \
-0x8a,0x7c,0xa9,0x13,0x80,0x4d,0xed,0x67,0x01,0x6b,0x42,0xc7,0x96,0xdc,0x75,0x5d, \
-0xfb,0xf1,0xc1,0x19,0xb5,0xbd,0x9f,0x54,0xd0,0xa5,0x04,0x84,0x7e,0xc9,0x1f,0x11, \
-0x81,0xff,0x64,0x95,0x14,0x80,0xdb,0x59,0xf3,0x5b,0x3f,0x0b,0x60,0xaa,0x7e,0x56, \
-0x07,0xc7,0xe1,0xaa,0x6d,0xb6,0xfe,0xc0,0xc8,0xae,0x87,0x95,0x40,0x6b,0xaf,0x8c, \
-0x4c,0x59,0x0b,0xe4,0xe0,0x06,0x71,0xbe,0x02,0x6e,0x9e,0x1c,0x5d,0x98,0x0b,0x6f, \
-0x57,0x67,0xca,0xc1,0xc7,0x05,0x97,0x7c,0x7a,0x23,0xe9,0xd5,0x40,0xb2,0xf1,0x26, \
-0xbd,0x60,0xf8,0x1c,0x3c,0xc8,0x02,0xd8,0x39,0xda,0xc6,0xb0,0x6d,0xeb,0x7a,0x27, \
-0xef,0x5f,0x1b,0xb1,0x06,0x8f,0x00,0x3e,0x60,0x7a,0x42,0x37,0xe5,0x2d,0x10,0xe8, \
-0x94,0x0a,0x7f,0xf6,0xcf,0x3b,0x17,0xda,0x32,0xc1,0xf6,0x69,0x4c,0xf3,0x32,0x18, \
-0xbb,0x58,0xbc,0x21,0xc1,0xe3,0xb3,0xdc,0xdb,0xd9,0x6b,0x7d,0x97,0xd9,0xfe,0xb5, \
-0x9f,0x25,0xd8,0x91,0xa0,0xe6,0x81,0xa8,0x76,0x54,0xed,0x8e,0x88,0x7d,0xf3,0xe7, \
-0x89,0x9a,0x7e,0x19,0x9e,0x10,0xae,0x32,0x94,0x50,0x88,0x0c,0x80,0xa8,0xe7,0x0f, \
-0x00,0xaa,0xc3,0x7d,0x42,0xd0,0xf5,0x44,0xf4,0x35,0x38,0xbb,0x56,0x7f,0x17,0x96, \
-0x6b,0x16,0x5a,0x17,0xf5,0x47,0x58,0x55,0x33,0x19,0xec,0xb1,0xd0,0x58,0x5c,0x32, \
-0xb9,0xd1,0xe8,0x36,0xf2,0x3a,0x3f,0xb7,0xa5,0x47,0x72,0x79,0xb4,0xf8,0x1b,0x27, \
-0xc2,0xf0,0xad,0xd9,0xc9,0x19,0x3e,0x70,0xb7,0xb5,0x3d,0x3d,0x4c,0x8d,0xfd,0xbd, \
-0x39,0x26,0xdd,0x2b,0x28,0x2f,0x7b,0xc6,0xe7,0x1b,0xe8,0xc2,0x3e,0x08,0xb6,0x42, \
-0x00,0x92,0x9f,0x1e,0x0a,0x29,0x6b,0x4e,0x29,0x4a,0x40,0x95,0xa8,0x28,0x40,0x8c, \
-0x64,0xb2,0x72,0x8e,0x26,0x09,0xaf,0x81,0x39,0xf8,0xc2,0x25,0xdb,0x7c,0x4a,0xb8, \
-0xd8,0x6a,0xc2,0x83,0xcc,0xb4,0xce,0x0e,0x70,0x80,0x6c,0x7b,0x9b,0x8b,0x09,0xc3, \
-0xb3,0xbe,0x5f,0x58,0xb9,0x8e,0x0e,0x89,0x79,0xbc,0xc6,0x9e,0xae,0xe2,0xe1,0x2a, \
-0x7e,0x64,0x55,0x43,0x3c,0xb5,0xfe,0xd2,0xfb,0x87,0x0e,0x81,0x24,0xd0,0xab,0x44, \
-0x82,0x53,0x20,0x3d,0x06,0x5c,0x87,0xfa,0x7f,0x5f,0x8d,0x8b,0x12,0xf6,0x7e,0xb9, \
-0x80,0xaa,0x53,0x1d,0x94,0x20,0x43,0x43,0x0a,0x3b,0xf7,0xb3,0x51,0xdb,0xde,0xc5, \
-0xfa,0x21,0x3f,0xda,0x11,0x1c,0x41,0xf7,0x6d,0x58,0xa4,0x61,0xf2,0x28,0xf2,0x3c, \
-0x66,0x2c,0x1b,0x7d,0xbe,0x4f,0x8f,0x7f,0x7a,0x27,0x8c,0x2b,0x71,0xa6,0xe2,0xaf, \
-0xd2,0xb8,0x34,0x2f,0x22,0xeb,0x85,0x3e,0x6a,0x27,0x19,0xda,0x7b,0xbd,0x5e,0x1f, \
-0xaa,0xc6,0xc1,0x39,0xe1,0x0b,0x4c,0x8c,0xd6,0xfc,0xa7,0x61,0x21,0xb0,0xd8,0x0a, \
-0x18,0xdb,0x00,0x94,0xc0,0x91,0x36,0xca,0xab,0x1f,0xd5,0xb3,0xd5,0x92,0x5b,0xc6, \
-0x6a,0x69,0x29,0x0c,0x86,0x08,0x54,0xc6,0x7b,0xcf,0x3e,0xee,0x2f,0x3c,0x59,0x04, \
-0x26,0xd4,0xf2,0x70,0xe0,0xb9,0x24,0x76,0x03,0xa2,0xca,0x3f,0xd5,0x33,0x18,0x78, \
-0xfb,0x2c,0xb0,0x0c,0x59,0x37,0xc4,0xd1,0xcb,0x4c,0x36,0x59,0x3f,0x56,0xaa,0xee, \
-0xe8,0xe7,0x1d,0xf1,0x89,0x20,0x79,0x60,0x23,0xf9,0xfb,0x0b,0x86,0xbd,0xb8,0x60, \
-0x82,0x80,0x73,0xc8,0x3f,0xa7,0xe2,0xe9,0xba,0xe7,0x58,0x8c,0x19,0x74,0x8a,0x8f, \
-0x83,0xb7,0x44,0x3e,0xdf,0x32,0x58,0x82,0x1b,0x35,0x54,0x11,0x11,0x18,0x30,0x56, \
-0x29,0x18,0x23,0x1f,0xf2,0xeb,0xb7,0x40,0x78,0x65,0x01,0x66,0x2f,0x95,0x3f,0xa3, \
-0xab,0xe8,0x1f,0x8d,0x88,0x22,0x08,0xd0,0xaf,0xf1,0xdc,0x2f,0xda,0xbc,0x05,0xb0, \
-0xbd,0x3a,0x4d,0xe4,0x1a,0x3b,0x7a,0xe8,0x52,0x1c,0xac,0xad,0xe2,0x50,0x7e,0x38, \
-0x17,0xc1,0xa4,0x03,0x16,0x1a,0x87,0x96,0x11,0x7a,0x43,0x84,0x85,0xbd,0x5a,0xed, \
-0x3d,0x93,0xc7,0xd8,0x7a,0x14,0x3d,0x90,0x18,0xed,0x71,0x18,0x60,0x55,0x62,0xa0, \
-0xb1,0x84,0x0d,0xe4,0xfc,0xb7,0x0e,0x21,0xc7,0xe8,0x9f,0xee,0x95,0x2c,0xdf,0xeb, \
-0xce,0x7d,0x59,0x93,0xee,0xc1,0x8c,0x66,0xc3,0xb1,0xae,0x8b,0x61,0x4c,0xe0,0xc6, \
-0xdf,0x25,0xd2,0x00,0xf9,0x3a,0xc1,0x55,0x93,0x82,0x60,0x61,0xc3,0x14,0xcb,0x0c, \
-0xb4,0xc5,0x30,0x9b,0xa4,0xae,0x46,0x89,0x36,0xc7,0xda,0x7f,0x5e,0x38,0x93,0xe8, \
-0x81,0x6d,0xfc,0x62,0x87,0xfa,0xd9,0x8a,0x27,0x34,0xbb,0x72,0x1b,0x4b,0x20,0xce, \
-0x34,0xec,0xb6,0x68,0x7d,0x50,0xb6,0x04,0xa1,0x1b,0x74,0x74,0x2a,0xc2,0x8a,0x34, \
-0x00,0xce,0xa8,0xc8,0xaa,0x2b,0x63,0xc5,0x69,0x05,0x84,0x58,0x69,0x2a,0x95,0x0c, \
-0xc3,0xc0,0x39,0xc7,0x54,0xf7,0xce,0xfd,0xd8,0xe4,0x8d,0x9b,0x23,0x5a,0x32,0x14, \
-0x0c,0xe6,0xc1,0x9f,0x63,0x3f,0x73,0x9a,0xd6,0x10,0x2b,0x31,0x04,0xcd,0x1d,0xe5, \
-0x03,0x57,0x31,0x94,0x96,0xad,0xf1,0x1a,0x95,0x49,0x24,0xe7,0xdc,0x68,0x80,0xc8, \
-0x17,0xbb,0x4f,0xdd,0xde,0x34,0x1c,0x0d,0x4f,0xc8,0xa9,0x0f,0x9d,0xf3,0x07,0x76, \
-0x49,0xec,0xc5,0x3c,0x59,0x02,0xb2,0x7a,0x37,0x6c,0x62,0x21,0xea,0xd7,0x78,0x0b, \
-0x60,0x50,0x48,0xb3,0x40,0x51,0xf7,0x42,0x52,0xd2,0x25,0xef,0xdc,0x78,0xc9,0xf6, \
-0x8f,0x46,0x6a,0x6c,0xb1,0x38,0xf8,0x1e,0xc9,0xe5,0x9f,0x6d,0x02,0xbc,0xd4,0x7c, \
-0xc6,0x04,0xbd,0xed,0xe4,0x63,0x25,0xe2,0x8e,0xd4,0xce,0x00,0xa0,0xd4,0x2a,0x5f, \
-0xf8,0x4c,0x61,0xc0,0x88,0x45,0x90,0x14,0x73,0x67,0x60,0x79,0xe1,0x9a,0x2c,0xed, \
-0x4d,0x04,0xda,0x1a,0x94,0xa9,0xc6,0x44,0xfc,0xbc,0x83,0xc9,0x14,0x60,0xcc,0xf4, \
-0x9d,0x03,0x89,0x6f,0xd9,0xed,0x9c,0x03,0xe2,0xcd,0x98,0x9c,0x20,0x5f,0x97,0xd7, \
-0x93,0xd4,0x2f,0x83,0x4b,0x3d,0x44,0xa1,0x08,0xc2,0x7d,0xe9,0x42,0x93,0xa7,0xa6, \
-0x53,0x8c,0x8f,0x84,0xc6,0x45,0xa7,0x99,0x09,0x20,0xfa,0xb8,0x81,0x92,0xea,0xe4, \
-0x0f,0x04,0x82,0x8d,0xc9,0x40,0xf4,0x95,0x1e,0xca,0x86,0x48,0x91,0x62,0x8c,0xbe, \
-0x87,0x8a,0x85,0xfc,0x59,0x02,0x68,0x62,0x59,0x88,0x5b,0x5c,0xd0,0x82,0x6c,0xda, \
-0x73,0xc8,0xc1,0x3e,0x28,0x2f,0x98,0xce,0xd2,0xe7,0xb5,0x87,0x3c,0x78,0xd3,0x62, \
-0x1d,0x05,0x35,0x57,0x7f,0x10,0x65,0x9c,0xc2,0xcf,0x21,0xa8,0x24,0xf9,0xba,0x55, \
-0x98,0x10,0x3d,0xb9,0x75,0xce,0x07,0xb6,0x09,0x3e,0x04,0x0c,0xb0,0x06,0x09,0x18, \
-0x20,0x70,0x49,0xbb,0x00,0xcc,0x62,0x08,0x8c,0x84,0x30,0xc2,0x03,0xe0,0x7d,0xdf, \
-0x71,0xa0,0x32,0x1c,0xb6,0xb0,0x30,0x7d,0x9b,0x86,0xa1,0x96,0xbf,0x6f,0x43,0xed, \
-0x43,0x82,0x77,0x08,0x0a,0x29,0x3f,0xb2,0xd0,0xfd,0x1d,0x35,0xfd,0x53,0xe0,0xbc, \
-0xbc,0xd4,0x23,0xc2,0x93,0xf1,0xa1,0x01,0xd5,0xf0,0x8a,0x83,0xf0,0xd8,0xd1,0x16, \
-0x8e,0x07,0x24,0xc1,0x83,0x5c,0x5c,0x32,0xab,0x1f,0x57,0x49,0x65,0x22,0xf4,0xc7, \
-0xfa,0x45,0x29,0x3e,0x0f,0x1e,0x74,0xc3,0xc4,0xda,0x12,0x96,0x65,0xa5,0xdc,0x03, \
-0x08,0x59,0xa1,0xef,0x52,0x06,0xf1,0x6f,0x71,0x61,0x5b,0x18,0xf4,0xa4,0xcd,0xb8, \
-0x16,0x6b,0xf3,0x38,0x88,0x3b,0x30,0xf9,0xad,0x93,0x48,0xc4,0x87,0x13,0x56,0x0a, \
-0xf0,0x3c,0x4b,0x5d,0x1c,0xb1,0xf8,0x8d,0xde,0x14,0x7b,0x53,0xb9,0xf1,0x0e,0xd4, \
-0xe4,0x17,0xe9,0x30,0x67,0xa5,0xac,0x81,0xbc,0x61,0x58,0x1b,0x54,0x84,0xc1,0x8b, \
-0xee,0xc0,0x83,0x90,0x3b,0xbb,0x0a,0x55,0x94,0x74,0x46,0x5a,0xa5,0x46,0xbb,0xab, \
-0xbe,0x72,0x0e,0x5b,0xfa,0x3f,0x1f,0x5d,0xf5,0xf5,0x20,0xca,0xc1,0xeb,0x69,0x30, \
-0x69,0x1b,0x25,0x15,0x04,0x64,0x79,0x8d,0x01,0x55,0xc0,0x34,0x85,0x67,0x81,0x63, \
-0x79,0x82,0xe3,0xbd,0x07,0x50,0xc4,0xb8,0xd0,0xbb,0x36,0x7f,0x98,0xf5,0xb6,0x7d, \
-0xa1,0x27,0x68,0xd0,0x33,0xec,0xe6,0x37,0x1a,0x9b,0x77,0xad,0xe4,0x07,0x42,0x5a, \
-0x9a,0x33,0x43,0xe9,0x92,0x5e,0x97,0xce,0xb1,0x05,0xa0,0x47,0xf8,0x74,0xf5,0x8a, \
-0x33,0x98,0xed,0x54,0x33,0xa5,0x3d,0x18,0x64,0xdb,0x69,0x18,0x8d,0x7c,0xc7,0xbc, \
-0xdd,0xec,0x37,0x94,0x3c,0x49,0x84,0x74,0x34,0x33,0x1b,0x23,0x75,0x03,0x2f,0xfb, \
-0x41,0x5d,0x80,0xa0,0x3b,0xc6,0x48,0x30,0x3b,0xf8,0xea,0xd2,0x6b,0x22,0x8d,0xb0, \
-0x77,0x77,0x4e,0x6d,0x3b,0x3a,0xcd,0xda,0xdd,0xf0,0x33,0xca,0x11,0xdf,0x02,0x91, \
-0x24,0x24,0x82,0x22,0x31,0x19,0x15,0x82,0xaa,0x80,0x91,0xea,0x31,0x89,0x0a,0x52, \
-0x70,0xf7,0x1f,0x3e,0x7f,0xad,0x9b,0x4a,0xb6,0xe0,0xa4,0xad,0x93,0x76,0x30,0x74, \
-0xc1,0xaf,0xab,0x30,0xe0,0x6c,0x16,0x20,0xee,0x83,0x2e,0xbb,0x07,0x06,0x6a,0x48, \
-0x28,0x32,0x37,0x34,0x92,0x56,0xd4,0x11,0x5b,0x93,0x92,0xbc,0x04,0x22,0xad,0x0a, \
-0xa8,0x47,0xd4,0x3d,0x70,0xd9,0xdb,0x7d,0x9c,0xde,0x71,0xce,0x53,0x7c,0x16,0x03, \
-0x71,0x72,0x9d,0x3a,0x96,0xe0,0xd1,0x9e,0x84,0xee,0x62,0x24,0x14,0x54,0x60,0x22, \
-0x45,0x13,0x88,0x21,0x4c,0x0d,0x93,0xbf,0xde,0xef,0x1d,0x7c,0xaf,0x2b,0xf7,0x73, \
-0x9e,0xed,0xc1,0x13,0x6d,0xcc,0xce,0x98,0xd0,0xcb,0x38,0x26,0xd0,0x5f,0x3b,0x79, \
-0xb7,0xff,0xc8,0xf4,0x6f,0x5f,0x06,0x97,0x58,0x6c,0x18,0x6c,0x3b,0xca,0x36,0xbb, \
-0xd9,0xec,0xdc,0x8e,0x00,0xb5,0xdf,0x5e,0xe1,0x8c,0x1e,0xd3,0xad,0x83,0x6e,0x05, \
-0x97,0x07,0xa8,0x94,0xbd,0x4a,0x84,0x2b,0x3c,0x54,0x47,0x49,0x6c,0x1f,0x5e,0x50, \
-0x4b,0x25,0xa0,0xc9,0x6e,0xcf,0xf1,0x9f,0xe5,0x91,0xb5,0x9d,0x6d,0x35,0xd5,0x93, \
-0x0c,0x3c,0x52,0x75,0xf4,0xf5,0x5c,0x12,0x70,0x0d,0xfb,0x09,0xee,0x11,0x50,0x40, \
-0x3f,0xc5,0x92,0xaa,0x45,0x90,0x59,0xda,0x30,0x95,0x0f,0xf9,0xa1,0x58,0xb1,0x1c, \
-0x35,0x27,0x96,0xdf,0x2f,0xc7,0xe3,0xeb,0x9d,0xad,0x3a,0x8c,0x77,0x32,0x24,0xf6, \
-0x49,0x6e,0xb1,0x79,0xb3,0xaf,0x0a,0x8c,0x36,0x26,0x52,0xef,0x49,0x00,0x5c,0x57, \
-0xd9,0xa8,0x24,0x65,0xee,0x01,0x01,0x86,0xaf,0xa7,0x43,0x1c,0xe8,0xb9,0x88,0x39, \
-0x01,0x86,0x47,0x47,0x26,0xdb,0x9d,0xf0,0x45,0xd2,0xcf,0x02,0x43,0x6e,0x63,0x40, \
-0xa0,0xf6,0xf1,0xb9,0xad,0x92,0x34,0x84,0x22,0xf4,0x8f,0x12,0x56,0x02,0x0d,0xa5, \
-0x77,0x5b,0xcd,0x6d,0xa8,0x9e,0x12,0x65,0x43,0x13,0x9a,0x58,0xe2,0x10,0x07,0x2e, \
-0xcf,0xf4,0xca,0xbf,0x51,0x94,0xdf,0xc7,0x06,0x6c,0x32,0xd3,0x13,0x9a,0x43,0xe2, \
-0x01,0x40,0xfa,0xfa,0x48,0xf6,0xad,0x85,0xd4,0xb4,0xea,0x14,0xeb,0x84,0x4f,0x12, \
-0x1f,0xcb,0xf3,0xe7,0x8d,0xd8,0xaf,0x69,0xb1,0x52,0x4f,0xfd,0x3b,0x40,0x37,0x18, \
-0x5a,0xab,0x96,0x65,0x8a,0x88,0xb2,0x68,0x60,0xdb,0x6d,0x09,0xbe,0xa5,0x68,0xe8, \
-0xf1,0x98,0xeb,0x2e,0x01,0x2c,0xb0,0xa3,0xcb,0xf5,0xbd,0x8c,0xfa,0x7e,0x1e,0x26, \
-0xf4,0x18,0xf7,0x9e,0x75,0x7b,0x8f,0xef,0x02,0xe1,0xbb,0x8f,0xef,0xff,0x28,0x8e, \
-0x15,0x0c,0x75,0x11,0xa6,0x7c,0x4d,0xf1,0xc3,0x66,0x9f,0x78,0x8a,0x45,0x88,0x8a, \
-0x46,0x44,0x82,0x28,0x0c,0x54,0x44,0x80,0xaa,0x7e,0xb6,0xac,0xe4,0xd1,0x55,0x58, \
-0xa8,0x46,0x0c,0x41,0x51,0x14,0x5d,0xac,0xa9,0x15,0x27,0x07,0x2c,0xc2,0xc5,0x04, \
-0x5f,0xe8,0xc7,0x0c,0x7c,0xf9,0x9d,0xdd,0x7f,0x46,0xa4,0x37,0x10,0x82,0x30,0x82, \
-0xc5,0x87,0xeb,0x64,0x39,0xb8,0x90,0x50,0x88,0xa2,0x93,0x9b,0xfb,0xaf,0x6b,0x9f, \
-0x4a,0x15,0x5d,0x6c,0x53,0x9d,0xc1,0x8f,0x9d,0x9e,0xe4,0xdb,0x01,0x72,0x44,0x41, \
-0x0e,0x96,0xfe,0xa0,0x49,0x74,0x98,0x8c,0xbf,0x38,0xfd,0x3b,0xc3,0x14,0x85,0x5e, \
-0xe4,0xe2,0x02,0x5b,0x86,0x05,0x1c,0xef,0xae,0x32,0xf4,0xac,0x50,0x6d,0x84,0x3e, \
-0xa4,0x8d,0xc4,0xaf,0x22,0xe4,0xcc,0xc5,0x48,0xfb,0xd2,0xb0,0xa0,0x51,0x4d,0x1b, \
-0x42,0x87,0x9d,0x07,0xde,0x8f,0x4f,0x20,0x2d,0xe8,0x7c,0xff,0xc7,0xa1,0x43,0xd1, \
-0x4a,0x42,0x71,0x5e,0x48,0x8e,0x3f,0xa3,0x55,0x5f,0x85,0xf2,0x13,0xa8,0xc6,0x4a, \
-0xec,0x1a,0x9b,0x3b,0xe6,0xf4,0x6a,0x67,0x91,0x20,0x32,0x7f,0x4f,0x95,0xcb,0x3f, \
-0xe6,0x6e,0xf2,0xd7,0xcc,0x38,0x8b,0xf7,0xb9,0x8f,0xd8,0x6f,0x07,0x9f,0x54,0xe1, \
-0xbe,0xed,0x30,0xcd,0x8e,0x08,0x94,0xb5,0x0e,0xa3,0x27,0x58,0x1f,0xc3,0xdd,0x03, \
-0x2d,0xf3,0xdb,0x34,0x8a,0x7a,0xaf,0xa0,0x7d,0xb7,0xf5,0x45,0x58,0xba,0x49,0xcd, \
-0xd9,0xc4,0xeb,0xde,0x28,0xb5,0x75,0x97,0x93,0x23,0x20,0x41,0x2d,0x58,0x33,0x95, \
-0xe8,0x6d,0x7b,0x32,0x3e,0x33,0x80,0x75,0x70,0x7f,0x8d,0xbb,0x1d,0x50,0x38,0x82, \
-0xf7,0x91,0x62,0x55,0x2b,0xe0,0xd2,0xef,0xb7,0xae,0x61,0xfe,0xdd,0xdf,0x75,0xc2, \
-0xaa,0x10,0xc1,0x1e,0x86,0xbf,0x8d,0xfd,0xf3,0xe6,0x69,0x57,0x94,0x16,0x88,0x09, \
-0x61,0xbc,0xda,0x22,0x8d,0x94,0x40,0xed,0x3d,0xf2,0xbd,0x99,0x39,0x1f,0x84,0xeb, \
-0x02,0x3d,0x36,0x01,0x2b,0x36,0x68,0xd2,0x88,0x54,0x72,0xf9,0x98,0xb3,0x07,0x28, \
-0xe7,0x1f,0x41,0xeb,0x41,0xdf,0x06,0x40,0x7c,0xe8,0x10,0x83,0x3c,0xa2,0xaa,0x94, \
-0x3a,0x67,0x06,0x01,0x86,0xee,0x18,0x4e,0x5a,0xf3,0xd6,0xcd,0x8d,0x59,0xf1,0x05, \
-0xad,0x6b,0xe8,0x3f,0x7f,0xf2,0xeb,0xeb,0x9e,0x49,0x25,0x3c,0x82,0x9f,0xb5,0x42, \
-0xe2,0x92,0x56,0x03,0x6c,0x93,0xf3,0x41,0x81,0x46,0x60,0xd1,0xde,0x47,0xcf,0x21, \
-0x77,0x48,0x1d,0xbf,0x70,0x64,0x0a,0x9c,0xec,0xf4,0x8c,0x56,0xfe,0x05,0x0b,0xad, \
-0xc9,0x0f,0xce,0x22,0x40,0xab,0x99,0x3d,0xab,0x65,0x8c,0xc4,0x62,0xc3,0x79,0x8d, \
-0x4d,0x55,0x79,0x03,0x06,0x48,0x1b,0x50,0xe5,0x89,0x84,0x5d,0xfe,0xcb,0x3a,0xa9, \
-0x41,0x61,0x43,0x74,0x50,0x06,0x1e,0xcb,0x7f,0x72,0x70,0xf5,0x83,0x36,0xfa,0xec, \
-0x24,0x44,0x86,0xa4,0xd5,0x08,0xdb,0xd9,0x98,0x16,0x08,0xd4,0x78,0x4c,0x0f,0xb4, \
-0xc8,0x0a,0x61,0x43,0xe6,0x16,0x56,0xbb,0xaa,0x7c,0x5d,0x46,0xe0,0xb4,0x59,0x9b, \
-0xdc,0x95,0xaa,0xf8,0x2f,0x60,0xbd,0x14,0x0e,0x1a,0xbb,0xae,0xd6,0xa8,0xcc,0x08, \
-0x7e,0x60,0xd9,0x6f,0xa7,0x81,0x57,0x68,0x6d,0xc2,0xb3,0x9a,0x48,0x45,0x0a,0x6e, \
-0xa0,0x56,0xd0,0x7c,0xa5,0x5e,0xf4,0x72,0xb9,0x3e,0x30,0x84,0x12,0x9c,0xff,0xe5, \
-0x3a,0x8e,0x61,0x3a,0xe2,0x8f,0xb9,0x80,0x7f,0xeb,0x65,0x9b,0x5b,0x98,0x1e,0xd4, \
-0x32,0x66,0x03,0xe6,0xc4,0x0d,0xa0,0x24,0x30,0xc4,0xef,0x25,0x46,0xe4,0x69,0xd8, \
-0x23,0x05,0x97,0xbf,0x00,0x51,0xed,0x99,0x7b,0xb1,0x52,0x1f,0xc6,0x7c,0x97,0x12, \
-0x0a,0xc5,0x20,0xfc,0x2f,0x24,0xd2,0x2b,0x54,0xdb,0x8d,0x9a,0x47,0x6a,0x3e,0xe5, \
-0x7b,0x57,0x42,0x65,0xb6,0x8e,0xc2,0x8f,0x60,0x44,0xc8,0x35,0xaf,0xd7,0x8e,0x92, \
-0x66,0x92,0xd5,0x79,0x30,0x90,0xba,0xc3,0x20,0xb6,0x3e,0x98,0x96,0x5d,0x58,0x1b, \
-0x41,0x67,0x0a,0x24,0x81,0x49,0x88,0x98,0x8e,0xa2,0x48,0xd9,0xa1,0x3d,0xe1,0x81, \
-0x82,0xd9,0x88,0xaa,0xd1,0xe6,0x70,0xc6,0x0f,0x87,0x4e,0xf9,0xcf,0x44,0x8c,0x58, \
-0x36,0x83,0x7e,0xd0,0xf4,0xff,0x6b,0x8e,0x44,0x4b,0x37,0x98,0x17,0xda,0xb6,0x42, \
-0x35,0x2a,0xf2,0x80,0x6c,0xf2,0xb8,0x55,0x8d,0x14,0x23,0x48,0x6a,0x49,0x39,0x23, \
-0xe2,0xe3,0x06,0x2f,0x15,0xb2,0x21,0x21,0xa9,0x68,0xe7,0x5e,0xac,0x83,0xa0,0x93, \
-0x84,0xa0,0xa0,0x80,0x51,0x29,0x87,0xc8,0x85,0x9e,0xb8,0x35,0x3c,0x59,0xc3,0x39, \
-0x14,0x85,0x21,0x70,0x36,0x08,0xb3,0xb2,0x9f,0x67,0x78,0x33,0x87,0x7b,0x66,0xf6, \
-0x79,0xe4,0xa7,0x3e,0x77,0x38,0xe3,0x83,0x4d,0x78,0x43,0x91,0xe2,0xb7,0x94,0x9b, \
-0xc9,0xe5,0xe3,0x21,0x1b,0x4a,0xfd,0x31,0x0f,0x5c,0xcf,0xb4,0x98,0xae,0x1b,0x0c, \
-0x4a,0xa9,0x12,0x08,0x78,0xbb,0x9d,0xd7,0xcf,0xe0,0x7c,0xa4,0x4e,0xdc,0x9a,0x01, \
-0x1e,0x2c,0xe1,0xe7,0xdf,0x0e,0x55,0x4b,0x08,0xff,0x7b,0x5e,0xe9,0x87,0xe1,0xf6, \
-0xc8,0x80,0xb2,0x37,0xa4,0x88,0x43,0x7d,0xed,0xb0,0x24,0x3b,0x98,0x25,0x01,0xea, \
-0x60,0xbf,0xa9,0x7e,0x77,0x4a,0x7a,0xd0,0x0e,0xc2,0xa4,0x40,0xaf,0xc3,0x84,0xbc, \
-0xe9,0x95,0x43,0x8c,0x39,0x48,0xe6,0x4e,0x68,0x97,0x01,0x00,0x0b,0x92,0x40,0x89, \
-0x76,0xfa,0x06,0x11,0x1d,0x3f,0xde,0x0b,0x2f,0x1f,0x2e,0xcd,0xb4,0x43,0x74,0x88, \
-0x81,0xa3,0x56,0x06,0x6c,0xbe,0x9d,0xa6,0x34,0x53,0xa3,0xc5,0xce,0x58,0x9d,0x7e, \
-0x7b,0xc8,0x6c,0xe7,0xb3,0x5e,0xd2,0x32,0x09,0x66,0x59,0x98,0xb0,0xda,0x3f,0x06, \
-0x40,0x7b,0xbd,0x68,0x23,0x70,0xcb,0x15,0x58,0xc4,0x41,0x16,0x79,0xf3,0x41,0x5c, \
-0x73,0x9e,0xb8,0xd5,0x59,0x51,0x10,0x29,0x2e,0xd4,0xa2,0x05,0x44,0xc4,0xc6,0x07, \
-0xc2,0x1f,0x47,0x39,0x9d,0x19,0xcf,0x2c,0x9c,0x0e,0x14,0x2b,0x6a,0x71,0xd0,0x24, \
-0x14,0x1d,0xa8,0x4e,0x32,0x77,0x93,0x44,0x15,0x89,0xc1,0x6d,0x38,0x8c,0xa6,0xf8, \
-0xa4,0xca,0x88,0x64,0x5e,0x21,0x01,0xa7,0x21,0xd3,0x84,0x28,0x71,0x87,0x00,0x43, \
-0x88,0x32,0x4d,0x9b,0xb1,0x41,0xa5,0x96,0xd4,0x10,0xb7,0xb5,0x24,0xb0,0x53,0x01, \
-0x19,0x61,0xf2,0x1e,0x7c,0x3e,0xd8,0x27,0x5f,0x54,0xbb,0xca,0x56,0x09,0x67,0x5e, \
-0x72,0x4c,0x24,0x23,0x14,0x0f,0x52,0xd0,0xfe,0x2b,0xcb,0xf8,0x6c,0x93,0xc2,0x7c, \
-0x1a,0x4f,0x06,0xe3,0xfa,0x70,0x6b,0xf2,0x53,0xc0,0x0d,0x87,0x00,0xd3,0xef,0x82, \
-0x13,0x5a,0x04,0x22,0x12,0x56,0x70,0xd1,0x48,0x20,0xb3,0x50,0x90,0x1e,0xef,0xaf, \
-0x5b,0xa2,0x64,0x93,0xea,0xf5,0x0b,0x0e,0x9e,0x3a,0x13,0x8e,0x66,0xef,0x5b,0x9f, \
-0x5f,0x23,0x39,0xa4,0xf0,0x1c,0xb0,0x35,0xad,0x40,0xaf,0x08,0x6a,0x9e,0x93,0x34, \
-0x41,0xdb,0x1a,0xa6,0x70,0xd7,0x25,0x33,0x4a,0x98,0x01,0x70,0x94,0x73,0x6a,0x61, \
-0x16,0x12,0xa0,0x6f,0x75,0x8a,0x6c,0xdd,0x09,0x50,0xe0,0x37,0x37,0x36,0xe1,0xee, \
-0xa6,0x8c,0xd2,0x0a,0x1b,0xb3,0x65,0x93,0x29,0x26,0xc6,0x06,0x6a,0xeb,0x39,0x17, \
-0x08,0x32,0x5b,0xed,0xc5,0x38,0xd2,0xda,0x20,0xd1,0x4d,0x92,0xc4,0x30,0x70,0x02, \
-0x1c,0xf9,0x53,0xa2,0x10,0xd8,0x3c,0x5c,0xc6,0x4d,0x53,0x40,0x3e,0x8b,0x1c,0x3b, \
-0x30,0xd1,0xea,0x78,0xe3,0xed,0x13,0xc9,0x0c,0xe0,0x95,0xbf,0xbe,0x05,0x58,0x70, \
-0xd3,0x83,0xd9,0xd7,0x76,0x0c,0x4f,0x13,0x66,0xf5,0x46,0x0a,0x2d,0x45,0xed,0x2e, \
-0x31,0x0b,0x69,0x30,0x27,0xe4,0xdb,0x89,0xe2,0xed,0xb6,0xdd,0x3b,0x0b,0xb6,0xc9, \
-0x16,0x20,0xf8,0xf6,0x4d,0x5a,0xf3,0x2d,0xfc,0x65,0xd3,0x43,0x22,0x20,0xa7,0x68, \
-0xa0,0x93,0x3a,0x2e,0xb1,0xe8,0xe4,0xf6,0xe3,0xde,0x50,0xfa,0xda,0x05,0x81,0xee, \
-0xbc,0x12,0x28,0x17,0x18,0xd1,0x09,0x53,0x86,0xc0,0x85,0x68,0xd5,0xd6,0xc6,0x5a, \
-0x61,0x28,0x16,0xd6,0x23,0xdc,0xc1,0x7c,0xdf,0xab,0x1e,0xa5,0x9c,0x18,0x33,0x02, \
-0xc0,0x75,0x71,0x85,0xcb,0xfb,0x0f,0x23,0x72,0x49,0x5f,0x0f,0x20,0xbe,0x3c,0x69, \
-0xa7,0x50,0x98,0x4d,0x43,0x2c,0xbd,0xd3,0xe2,0x6b,0x0a,0x46,0x60,0x5d,0xcf,0x60, \
-0x8c,0xaf,0x43,0xe9,0xe0,0x7c,0x16,0x09,0x05,0x59,0xe9,0x4a,0x9e,0xc5,0x16,0x37, \
-0xab,0x8d,0xe3,0x24,0x61,0x6a,0x16,0x96,0x63,0x32,0x34,0x1c,0x96,0x18,0x44,0xc0, \
-0x44,0x64,0xd0,0xb0,0x70,0x7a,0xf8,0x14,0x26,0x52,0xc4,0xce,0x03,0x6b,0x02,0xf2, \
-0xd9,0x67,0x28,0x54,0x89,0x6a,0x02,0xdc,0x74,0x0e,0xf8,0x32,0x34,0xa4,0x8b,0x96, \
-0x0b,0x46,0xac,0x66,0xf4,0x0d,0x00,0xc9,0xb2,0x2f,0xd4,0x08,0x1e,0x21,0xe8,0x60, \
-0x19,0x22,0xda,0x06,0x16,0xc7,0xac,0xe5,0xc5,0x2e,0xc2,0xd5,0x18,0x4f,0xa0,0x8d, \
-0x8e,0xe2,0xcb,0x7a,0xe6,0xc3,0x41,0x55,0x81,0x22,0xb4,0x52,0x81,0x84,0x36,0x71, \
-0xb6,0x05,0x6e,0x65,0xad,0x64,0x6d,0xae,0xad,0xa6,0xa9,0xa3,0x00,0x70,0x5f,0x6a, \
-0x40,0xde,0xa1,0x85,0x03,0xa5,0xce,0x94,0x5a,0x4a,0x99,0x85,0xc8,0x4b,0xec,0x2c, \
-0x51,0xef,0x18,0xad,0x83,0x6d,0x77,0xd6,0xa8,0x1a,0x50,0xa8,0x7d,0x6e,0xa4,0xa6, \
-0x48,0x33,0x92,0xd9,0x2a,0x15,0x48,0x9a,0xdd,0x83,0xda,0xa3,0x0c,0x02,0xdc,0xab, \
-0x36,0x77,0x22,0x73,0x56,0xa2,0xcb,0xf0,0xd2,0x00,0x35,0x85,0xab,0xa1,0x04,0x50, \
-0x60,0x52,0x21,0xb4,0x2c,0x5a,0xd5,0x08,0x48,0x3c,0x6d,0xc9,0x53,0x77,0x73,0x63, \
-0x12,0xf1,0xc2,0x5c,0x66,0x0c,0x1b,0xcc,0xb0,0x0a,0x35,0xb6,0xac,0x17,0x72,0x28, \
-0xc6,0xb5,0x23,0x71,0x10,0xb4,0x54,0xd9,0xed,0xad,0x73,0x60,0x17,0x5a,0xb2,0x50, \
-0xa8,0x97,0xa4,0x87,0x0c,0x2d,0xbd,0x60,0x86,0xd1,0x03,0xea,0x0a,0xea,0xe7,0x75, \
-0x80,0x68,0x08,0xb2,0x57,0x56,0x16,0x68,0xe0,0xda,0xc0,0x74,0xbb,0x3d,0x56,0x9a, \
-0xaa,0xca,0x3d,0x35,0xa6,0x5c,0x5a,0x94,0xc0,0x21,0xc9,0x78,0x0a,0x2a,0x24,0x2b, \
-0xc6,0xe6,0xa0,0x69,0x55,0x1b,0x0c,0xa5,0x02,0xd5,0x12,0x86,0x4b,0x8b,0x05,0x9a, \
-0x0d,0x1e,0x32,0x8c,0xa2,0xda,0x28,0xa3,0x06,0x5a,0xa5,0xd0,0x56,0x22,0xea,0xc0, \
-0x2b,0xef,0x9a,0xd6,0x25,0xc3,0xa6,0xb8,0x70,0x03,0x93,0x31,0x92,0x05,0xd5,0xdd, \
-0xa8,0xc2,0x1a,0x14,0xad,0x24,0x15,0x54,0xba,0x35,0x85,0x45,0x10,0x52,0x33,0x77, \
-0x4e,0x18,0x0a,0xa1,0x62,0x9e,0x40,0xd1,0xf4,0x15,0xa9,0x3b,0xe5,0xce,0x62,0x6a, \
-0x1e,0xf5,0x0e,0x8f,0xd8,0x76,0x28,0x58,0xe6,0x70,0xdb,0x4c,0xf0,0x3a,0x19,0xb9, \
-0xdb,0x63,0x8e,0x8b,0xd8,0x58,0xdb,0x8f,0x34,0x83,0x69,0x9f,0xd1,0x40,0xe0,0x48, \
-0xb4,0x16,0x30,0xf2,0x27,0x12,0x50,0xac,0x2c,0x3f,0x32,0x7e,0x49,0xca,0xcc,0x90, \
-0x3a,0x33,0xe9,0x12,0x75,0x73,0xf3,0x05,0x52,0x5b,0xc2,0xb9,0x80,0xa0,0xeb,0x93, \
-0x67,0x19,0x48,0xd1,0x7c,0x36,0x7b,0x4b,0xb8,0x5b,0xc8,0x2b,0x44,0x86,0x0d,0x20, \
-0xc0,0x43,0x0d,0xa8,0x9b,0x65,0x4b,0xbc,0xe0,0x39,0xbe,0x71,0xe6,0x93,0xbe,0xcd, \
-0x5d,0xd7,0x1c,0x5d,0xb4,0xca,0x67,0x0e,0x71,0x39,0xe6,0x08,0x64,0x6c,0x28,0x0a, \
-0x98,0x45,0xe2,0x58,0x16,0x24,0x4b,0x5a,0x2d,0xd2,0x57,0x64,0xab,0x59,0x1e,0xbe, \
-0x88,0x0c,0x60,0x3d,0xb4,0x0b,0x3d,0xf6,0x9c,0xcc,0x12,0xe9,0x1e,0xc2,0xf8,0x92, \
-0xbe,0xd0,0xe7,0x0b,0xac,0xd5,0x21,0x74,0xc9,0xd6,0x34,0xa6,0xa2,0x36,0x9f,0x71, \
-0x44,0xa7,0x6e,0xec,0xf6,0x1b,0x8a,0xae,0xf1,0x8e,0x5b,0xb9,0xa6,0x7c,0x05,0x3b, \
-0xf1,0x54,0xab,0x0e,0x08,0xcf,0x13,0x68,0x90,0xeb,0x03,0x29,0x16,0x0c,0x7a,0x26, \
-0xa9,0xe9,0x19,0xcf,0x0b,0x20,0x99,0xe1,0xef,0x41,0xa0,0x76,0xaf,0x14,0x43,0xcd, \
-0xe4,0x55,0xa1,0x60,0x98,0x2a,0x50,0xfa,0xa7,0x1e,0x72,0x70,0x39,0x43,0xc7,0x9a, \
-0xe3,0xa7,0x3e,0xd0,0xf3,0xaa,0xba,0x53,0x7d,0x8c,0x06,0xdf,0x29,0xd7,0x34,0x7d, \
-0xca,0xcd,0xf8,0x77,0x70,0x1e,0xa4,0x12,0x56,0x98,0xb7,0x23,0x61,0x6d,0x06,0x74, \
-0xe6,0x1c,0x06,0x06,0x4d,0x83,0x5e,0x4d,0x8e,0x61,0xd7,0xc6,0x6d,0xd1,0xf0,0x8d, \
-0x23,0x30,0xe0,0x6d,0xc5,0x50,0xdb,0x7d,0x33,0x84,0x90,0x39,0xea,0x26,0x9c,0xf3, \
-0x2a,0x3d,0x1a,0xe1,0x9e,0x91,0x89,0x51,0x43,0x89,0xb6,0x25,0x65,0x2c,0x89,0x98, \
-0x8b,0x3c,0x0b,0x41,0x35,0xb3,0xa6,0x57,0xb2,0x73,0x27,0x1a,0x18,0xac,0x87,0x0d, \
-0x7c,0xd5,0xda,0x17,0xdc,0x62,0xb2,0x9a,0xb5,0x6a,0xd1,0x13,0x0e,0xe6,0x96,0x62, \
-0xd6,0xab,0xa1,0x24,0x1e,0x83,0xa3,0xf6,0x10,0xb1,0x70,0x1f,0x37,0x22,0xcb,0x36, \
-0x61,0x4a,0x41,0xd2,0x36,0xc1,0x41,0x65,0xaf,0xc9,0x8e,0x60,0xb0,0x3c,0x4d,0x16, \
-0x40,0xf4,0x7a,0x49,0xde,0x14,0x10,0xef,0x7a,0xc0,0xe5,0x04,0x49,0x5a,0x63,0x62, \
-0xcb,0x0a,0x2f,0x56,0xfa,0x19,0x8a,0x3c,0xaf,0x14,0x41,0x2a,0x7a,0x8d,0x99,0x90, \
-0x9a,0x9b,0x9d,0x1a,0xce,0x0d,0x19,0xc6,0xa4,0xa7,0x5b,0x55,0xa7,0xa7,0xc8,0xcf, \
-0x26,0xc8,0x91,0x8c,0xec,0x63,0x09,0x09,0x84,0x64,0x3c,0xc1,0x73,0xb2,0x5c,0x8c, \
-0x25,0x7c,0x60,0x63,0x75,0x56,0x86,0x1b,0x8b,0xc0,0x13,0x12,0x91,0x18,0x62,0xc3, \
-0xd5,0x3a,0x69,0x79,0x16,0x11,0x08,0x41,0xad,0x9e,0xb2,0x45,0xd9,0x64,0x7b,0x41, \
-0xd5,0x33,0x66,0x15,0xa2,0xc2,0xfb,0x47,0x50,0x1e,0x9e,0x29,0xbf,0x12,0x7b,0x23, \
-0xc4,0xe7,0x60,0x82,0xbc,0x52,0x58,0x89,0x1b,0x2d,0x22,0x31,0x05,0x90,0xec,0x94, \
-0x4b,0x9f,0xce,0x76,0xeb,0xc3,0xda,0x73,0x36,0x73,0xc4,0x09,0xda,0x72,0x54,0x9b, \
-0xd3,0x2f,0xc2,0x8f,0xfc,0x94,0xcc,0xb9,0x8b,0x94,0xb5,0xca,0x29,0x81,0x58,0x6a, \
-0xa9,0xc0,0xda,0xf6,0xc3,0xe6,0xe2,0x68,0x4e,0x27,0xa0,0x77,0x0e,0xe1,0xbb,0x08, \
-0x46,0xd6,0x83,0xae,0xe8,0x30,0xf0,0x77,0x43,0x00,0xf2,0x5e,0x3a,0x1e,0xa7,0x97, \
-0x31,0x84,0x92,0x55,0xbd,0x43,0x73,0x41,0xb9,0x5b,0xe2,0xd0,0x6a,0x14,0x1e,0xeb, \
-0xa7,0xd7,0x0b,0xe3,0xba,0x11,0xab,0x00,0xb1,0xcd,0x10,0x07,0x7e,0x03,0x69,0xfa, \
-0x51,0x7e,0xa3,0x70,0x87,0x26,0x29,0xee,0xe9,0x7e,0x73,0xcb,0x17,0xf5,0x8d,0x19, \
-0x32,0x0a,0x0a,0x63,0x18,0x26,0x12,0xb2,0x3f,0x45,0x93,0x2c,0x26,0x04,0x8a,0x20, \
-0x82,0xb4,0xb6,0xb6,0x0b,0x24,0x1b,0x10,0xc6,0x8d,0x9c,0x2c,0x6a,0xf3,0xaa,0xb3, \
-0x1f,0xe7,0x4e,0x9f,0x15,0x05,0xce,0xe7,0x82,0x42,0xad,0x74,0x45,0x18,0xa8,0x44, \
-0xc3,0x81,0xe9,0xa9,0x8f,0x12,0x40,0x80,0x4b,0x52,0x20,0x5e,0x33,0x22,0x82,0xba, \
-0xe2,0xa7,0x69,0x1d,0x58,0x02,0x63,0x10,0xf3,0xc4,0x18,0xc6,0x0e,0x42,0x48,0x65, \
-0xef,0x94,0xd5,0x25,0x83,0xf5,0x30,0x15,0xe2,0x44,0xd3,0x14,0xbd,0x20,0xdd,0x1f, \
-0x86,0x2a,0xe5,0x1c,0x46,0x7b,0x7f,0x96,0x49,0xaf,0x4a,0xe7,0x6e,0x2c,0x3e,0x64, \
-0xb5,0x2b,0x88,0x40,0x61,0x05,0xd1,0x01,0xb2,0x26,0xb4,0x8b,0x66,0x6a,0x20,0x16, \
-0xc6,0xd8,0x3d,0x91,0xe4,0xf4,0xd3,0xb1,0x11,0xc4,0x11,0x8c,0xf1,0x3d,0xf8,0x0e, \
-0x21,0xb7,0xff,0x3b,0x0b,0x81,0x9b,0xc9,0xcf,0xa8,0x59,0xaf,0xcf,0x0c,0x70,0xbd, \
-0x50,0xa9,0x4b,0x89,0x5d,0x76,0x01,0x0c,0x7c,0x6b,0xe1,0x50,0xbb,0x66,0x0c,0xcd, \
-0xa5,0xef,0xb6,0xd3,0x48,0x1a,0x54,0x0d,0xb0,0x07,0x2c,0x6d,0xef,0x37,0x9e,0xac, \
-0xbe,0x51,0x54,0x61,0x10,0x15,0x51,0x62,0xac,0x11,0x89,0xf8,0xad,0x18,0xd1,0x2a, \
-0x08,0xc6,0x45,0x11,0x88,0x28,0xa9,0x14,0x0d,0xf6,0x78,0xa9,0xfe,0xcf,0x59,0xfa, \
-0x52,0xde,0xdb,0x21,0x7e,0x69,0x48,0x68,0xe0,0x60,0xa1,0x63,0x91,0x2a,0x4a,0x87, \
-0xa6,0x29,0x28,0x0f,0x08,0xc8,0xa4,0x88,0x36,0x0f,0x7a,0xe0,0xcc,0x04,0x40,0xb9, \
-0x2d,0x4e,0x04,0x8f,0xb8,0x94,0x17,0x99,0x91,0x8b,0xa4,0x85,0x93,0x93,0x12,0x16, \
-0xfe,0x13,0xec,0xf7,0xfe,0xff,0xd3,0x67,0x9b,0x24,0x5e,0x50,0xe3,0x39,0x61,0x9a, \
-0x20,0x1e,0xca,0x14,0x09,0x3f,0x0e,0x5f,0xe5,0x3d,0x75,0x45,0x91,0x31,0x87,0xf0, \
-0x45,0x3d,0xd5,0x54,0x28,0x81,0xb1,0xb0,0x4c,0x3c,0x24,0x69,0x44,0x59,0x77,0x4b, \
-0xd7,0xde,0xbd,0x78,0xc8,0x8a,0x72,0x31,0x88,0x6a,0xe7,0x56,0x93,0x3b,0x48,0x69, \
-0x29,0xa6,0x01,0x06,0xa2,0x40,0x17,0x4c,0x59,0xda,0x01,0xf1,0x78,0x15,0xf5,0xf9, \
-0x2d,0xd1,0xad,0x34,0x51,0x80,0xf3,0x04,0x55,0xd1,0xa5,0x64,0x77,0x7a,0xb2,0xea, \
-0xfb,0x3a,0x60,0xd9,0x33,0xb2,0x8b,0x8c,0xd2,0xde,0xfe,0x37,0xe3,0xd5,0x79,0x38, \
-0x94,0xd3,0x04,0x9a,0xd4,0x91,0x0c,0xea,0x7c,0x26,0x19,0x2e,0xf8,0x2f,0x27,0x27, \
-0x20,0xed,0x89,0x83,0xe7,0x03,0x61,0x1f,0xbb,0x72,0x34,0x53,0xcb,0x69,0xf7,0xd7, \
-0x88,0xbc,0xe3,0x1b,0x5d,0x3a,0xd7,0x0e,0x27,0xe0,0xfb,0x43,0xb0,0xe7,0xa0,0x13, \
-0xa0,0xc0,0x50,0x7a,0xda,0x44,0x64,0xd3,0x27,0x50,0xc0,0x0c,0x20,0xa4,0x98,0x3f, \
-0x77,0xda,0x7d,0xea,0x43,0x88,0x70,0x00,0x35,0x6b,0x81,0xb7,0x69,0xbf,0xa5,0xb6, \
-0x1c,0x93,0xb8,0xf8,0x10,0x99,0x09,0x3c,0xa1,0x00,0xe6,0x14,0x34,0x28,0x6d,0x20, \
-0x69,0xad,0x4a,0x2e,0x8e,0x88,0xd3,0xed,0xe3,0x85,0x7e,0x78,0x47,0x40,0xf0,0xd4, \
-0xeb,0xb9,0x59,0x48,0x74,0x28,0x81,0x03,0x04,0xec,0x4c,0xf7,0x11,0x92,0x25,0xdb, \
-0x61,0xe5,0xd8,0x27,0x97,0x64,0x50,0x39,0xa2,0xb6,0x0a,0xc9,0x86,0x96,0x9b,0x75, \
-0x5b,0x09,0x8b,0x9c,0xaa,0xa9,0xea,0x81,0x98,0xc1,0xc0,0xd0,0xcb,0x66,0xe2,0x0b, \
-0x16,0x6c,0x02,0x72,0x29,0x92,0x38,0x9d,0xa7,0x73,0x01,0x5e,0x22,0xa1,0x36,0xc4, \
-0x21,0x95,0x6c,0x2e,0x18,0x9b,0xa0,0x86,0x6e,0xa2,0x24,0x80,0xb1,0x6c,0x10,0x41, \
-0xe5,0xc4,0xfd,0x1e,0xdf,0xb3,0xb7,0x5b,0x1d,0x2c,0x56,0x30,0x41,0x04,0x61,0x10, \
-0x56,0x9b,0x48,0x20,0x2f,0xb8,0xfc,0x27,0xa1,0xb4,0xd8,0xe5,0xc9,0x23,0x7b,0xf0, \
-0x0b,0xf7,0xd2,0xf7,0x39,0x72,0x45,0x81,0xa3,0xe7,0x88,0x1f,0x80,0xcf,0xcc,0x9e, \
-0xdf,0x47,0x0e,0xe8,0xf3,0xc7,0x73,0xa6,0x2a,0x48,0x2e,0x2c,0x89,0x89,0x20,0x77, \
-0xc3,0xb3,0xbb,0x10,0xed,0xeb,0xb0,0xd9,0x45,0x20,0xb0,0x7c,0x7d,0x00,0x3d,0xe2, \
-0x83,0x18,0x9e,0x1f,0x21,0x84,0x34,0x6f,0xcf,0x07,0x7b,0xbd,0x48,0x45,0x70,0xaa, \
-0x2b,0x3f,0xdc,0xce,0x99,0x29,0x7d,0x88,0x4a,0xa5,0x09,0x89,0xde,0x6f,0x5f,0x5a, \
-0x69,0x03,0x18,0x97,0xbc,0xa1,0x24,0xc2,0x35,0x0e,0xe3,0x5d,0xa6,0x31,0x50,0xe0, \
-0xce,0xcd,0xf0,0x61,0xa3,0x4d,0x8c,0x78,0x87,0x92,0x15,0x2b,0x48,0xe9,0xe9,0x18, \
-0x52,0x21,0x0d,0x0c,0x2c,0x0b,0x75,0x60,0x0a,0x27,0xea,0x4c,0xf4,0xe6,0xfc,0xfc, \
-0x83,0xb7,0xf7,0x1e,0xa9,0xb7,0xbb,0x72,0x85,0xe4,0x3a,0x96,0x87,0x07,0x49,0x84, \
-0x3e,0x84,0xea,0xc5,0x0c,0x88,0x52,0xc6,0x2a,0xff,0x8c,0x75,0x18,0x53,0xac,0xf6, \
-0x2f,0xe5,0x3a,0xab,0xa4,0xd8,0x63,0x72,0x1a,0x0f,0xae,0x34,0xe0,0x2d,0x81,0xf1, \
-0xb9,0x88,0xc1,0xa2,0xc1,0x51,0x8b,0x20,0x90,0xc2,0x40,0xe7,0xd7,0x3b,0x4f,0x14, \
-0x87,0x8a,0x18,0x39,0xe6,0xcb,0x0f,0x91,0xc9,0x9a,0x60,0xb8,0x66,0x17,0xc2,0xca, \
-0xa4,0x55,0x63,0x11,0x41,0x58,0x8e,0x5a,0x3a,0x5a,0x0b,0x50,0xed,0xb6,0x4d,0x16, \
-0x42,0x8a,0xe9,0x36,0x9e,0x1d,0x38,0x1b,0x6b,0xd3,0x69,0x83,0x78,0x76,0x7c,0xbc, \
-0xaa,0x59,0xae,0x21,0x8f,0xac,0x3a,0xc1,0xf7,0xa2,0xf4,0x38,0x96,0x49,0xfd,0x5b, \
-0xca,0xc9,0x74,0x89,0x69,0x26,0xf6,0xde,0x4d,0x44,0x38,0xdc,0x15,0x55,0x44,0x14, \
-0x8f,0xbd,0x96,0x2a,0x61,0x92,0xac,0x95,0x54,0x49,0x76,0xc6,0x26,0x17,0x2d,0x91, \
-0x61,0x86,0x56,0x2b,0x32,0xf2,0x27,0x94,0x3e,0x93,0x7c,0x08,0x77,0xf0,0xe1,0x18, \
-0xb2,0xaf,0xe5,0xcc,0x8d,0xf5,0x2e,0x9a,0x12,0xbf,0x45,0x54,0x80,0xb1,0x08,0x41, \
-0xf3,0xcb,0x7d,0xd1,0x46,0x9a,0xa9,0xfa,0x90,0x8f,0x4b,0x06,0xd0,0xa9,0xfc,0x20, \
-0x14,0xb4,0x96,0x25,0xcc,0xfc,0xf4,0x19,0xa4,0x7b,0xe5,0x79,0x39,0x60,0x19,0x40, \
-0x87,0x1e,0xb9,0x0d,0xd5,0x0e,0x22,0x75,0x8e,0x31,0x6b,0x30,0x80,0x5b,0x8c,0x4f, \
-0x24,0x67,0xe9,0x5b,0x48,0x8c,0xa4,0x06,0xfe,0xcd,0x88,0xbe,0x36,0xd6,0x3a,0x7e, \
-0x23,0x4c,0x67,0x68,0xd2,0x23,0xb5,0x14,0x4b,0x27,0xd2,0xd7,0xa3,0x55,0xdb,0x41, \
-0xe4,0x01,0xf7,0x33,0x67,0x2d,0xfb,0x5a,0xc2,0x8a,0xb4,0x4a,0x9c,0x30,0xe2,0x21, \
-0x4b,0x20,0x08,0x12,0x2e,0x82,0xfe,0xfe,0x89,0xcb,0x9e,0x25,0xfc,0x39,0x82,0xe2, \
-0x6b,0x04,0x8d,0xb8,0x61,0xe2,0x0d,0x12,0xf0,0x65,0x1a,0xea,0x70,0xcb,0x3b,0x1b, \
-0x83,0x94,0x6f,0x20,0xe2,0xd2,0x82,0x75,0xa9,0x1f,0x5c,0x1c,0xca,0x24,0x52,0xc8, \
-0x50,0x10,0xd9,0x42,0x2c,0xcd,0x64,0x24,0x11,0x33,0x72,0x8c,0x8c,0xa2,0xf9,0xfc, \
-0x31,0xc1,0x26,0xdd,0xf0,0xf5,0x9f,0xa3,0x46,0x8e,0x6e,0xf4,0xfc,0x13,0xd8,0x73, \
-0x55,0xef,0x59,0x86,0x68,0x0a,0xa6,0x38,0xa2,0x08,0x16,0xe7,0xe0,0xd1,0x9b,0xdb, \
-0x54,0x89,0x25,0x16,0x42,0x34,0x37,0x76,0xc8,0xf5,0x41,0x06,0x11,0x05,0x59,0x0d, \
-0xed,0x06,0x3a,0x0b,0x63,0x6d,0x11,0x15,0x8a,0x05,0x63,0xd3,0x87,0xf0,0x30,0xd7, \
-0x81,0xa4,0x4e,0x36,0x94,0x67,0x27,0x78,0x69,0x8b,0x05,0x93,0xc3,0xf0,0x72,0xc5, \
-0xe1,0x50,0xa2,0x60,0x20,0xdf,0xa5,0x25,0x0f,0xd6,0x75,0x3c,0x3b,0x84,0x55,0x18, \
-0x74,0xb5,0x91,0x10,0xc7,0xe0,0xe1,0x25,0xbc,0x40,0x0a,0xc3,0xce,0x23,0x93,0x0d, \
-0x82,0xd5,0xaa,0xb0,0x39,0xa6,0xd9,0x42,0x0e,0x99,0xb0,0xc5,0x6e,0x15,0x4a,0x58, \
-0xbb,0xae,0x87,0x92,0x0e,0x0f,0x2b,0x4a,0xe9,0x90,0x28,0x30,0xa0,0x61,0x04,0xd0, \
-0x54,0x13,0x69,0xcb,0x79,0x67,0x09,0xe5,0xe7,0x82,0xbd,0x7e,0x9b,0x9c,0xde,0x4a, \
-0xf2,0x08,0x73,0xe5,0xa5,0x46,0x6a,0x98,0x86,0x21,0x58,0x23,0xac,0x13,0x92,0x60, \
-0xd8,0x77,0x62,0xae,0x4a,0x80,0x58,0xa1,0x01,0x82,0x26,0x08,0x73,0x40,0x07,0x42, \
-0x4d,0xc1,0x93,0x0d,0xc0,0x48,0x20,0x45,0x5a,0x20,0x15,0x21,0xd4,0xc0,0x96,0x42, \
-0x13,0x32,0xe0,0x89,0x20,0x23,0x2d,0xaa,0x38,0x62,0x23,0x87,0xe9,0xc6,0x05,0x98, \
-0xc9,0x8c,0x18,0x89,0xa3,0x0d,0xbc,0xf2,0x66,0x38,0xca,0x1a,0xa5,0x54,0x1a,0xdb, \
-0x45,0xb8,0x4b,0x8c,0x05,0xce,0x6b,0x08,0x0c,0x03,0x6c,0xcb,0xbe,0x61,0x66,0xa8, \
-0x42,0x73,0x8c,0x9e,0x26,0x45,0x6e,0x7f,0x37,0x5f,0xb1,0x67,0x10,0xaa,0xd1,0x10, \
-0x42,0xb6,0x3a,0xef,0x68,0xb4,0xe1,0x23,0x4d,0xb1,0x0c,0x8f,0x77,0x1e,0x75,0xe2, \
-0xcb,0x30,0x38,0xb0,0xc2,0x46,0x6c,0xea,0xd1,0x92,0xe3,0x52,0xa3,0xa4,0x2e,0x14, \
-0xf4,0x59,0x57,0xe8,0x6d,0x0c,0x6b,0x3b,0x19,0x45,0x25,0xa0,0xde,0xff,0xe4,0xc9, \
-0x81,0x70,0xca,0x24,0x17,0x28,0x54,0x0d,0x30,0x84,0x32,0x01,0x2c,0x14,0x40,0x4d, \
-0xb2,0x1b,0x26,0x30,0x43,0x03,0x41,0x50,0x6e,0x1d,0x11,0x02,0x5c,0x46,0x3e,0xfa, \
-0x55,0x50,0x44,0x53,0x36,0x57,0x07,0x7d,0xeb,0xf4,0x3b,0x28,0x26,0xd8,0xe2,0x26, \
-0x81,0x7d,0x17,0x05,0xf1,0x2e,0x6a,0x37,0x30,0x04,0xa4,0x59,0x05,0x8c,0x45,0xce, \
-0xa5,0x25,0x29,0x12,0x40,0x99,0x29,0x91,0x54,0x76,0x91,0x0c,0xfe,0xf0,0x67,0x52, \
-0xbd,0x06,0xd1,0x23,0x44,0x31,0x8c,0x03,0x8c,0xa5,0x80,0x85,0xa8,0xc1,0x5e,0x4b, \
-0x62,0x07,0xb7,0xa8,0x58,0xcb,0xde,0xbc,0xbd,0x36,0xa9,0xb9,0xa3,0x01,0x9e,0xb7, \
-0x80,0x6d,0x05,0x05,0xbe,0xc8,0x5b,0xd8,0x76,0x26,0x61,0x5c,0xcd,0xcb,0x2c,0x3d, \
-0x3e,0xa2,0xf5,0xd3,0x6b,0x01,0xb3,0x7b,0x1f,0x96,0xea,0x84,0x0e,0x2c,0x8e,0x6c, \
-0x9e,0x76,0x21,0xc3,0x13,0x04,0x93,0x03,0xb5,0x5a,0xb6,0x30,0xad,0x10,0x56,0x39, \
-0x1a,0xe0,0x54,0x44,0xb4,0xab,0x02,0xd2,0x83,0x6c,0x1b,0x46,0x50,0xa4,0xb4,0x65, \
-0x12,0xd2,0xb2,0x0b,0x1a,0xd6,0x34,0x57,0x38,0x3d,0xf9,0x0c,0xe6,0x4d,0xca,0xc6, \
-0x58,0x83,0xa9,0x28,0x64,0xb0,0x31,0x19,0x30,0x91,0xe8,0x04,0x43,0x10,0xea,0x4d, \
-0x90,0x9a,0x86,0xfa,0x60,0x4f,0x62,0xcc,0x06,0x41,0x1e,0x5e,0x3d,0x86,0x5e,0xfe, \
-0x76,0xa9,0x58,0xb1,0x12,0x93,0x60,0x48,0x7f,0xd0,0x70,0x9a,0x71,0x1d,0x32,0x73, \
-0xda,0x14,0x86,0x12,0x7e,0x24,0x39,0xb3,0xf8,0x99,0x93,0xe5,0xbb,0xb3,0xa9,0x2b, \
-0x26,0x4d,0x7e,0x73,0x05,0xd9,0x46,0x24,0x8f,0x69,0x65,0x82,0xad,0x67,0x0c,0xe4, \
-0x57,0xee,0xec,0x47,0xbb,0x87,0xb3,0xc6,0x99,0x8f,0xf7,0x35,0xd7,0x29,0x0b,0x68, \
-0x48,0x0b,0x21,0x51,0x78,0xec,0xee,0x5f,0xd3,0xe0,0x9c,0x42,0xdc,0x36,0xc8,0x68, \
-0x82,0x08,0x22,0xe5,0x68,0x15,0x75,0xa9,0x71,0x5e,0x68,0x2c,0x82,0x2e,0xf8,0xea, \
-0xd5,0x4f,0x04,0xb3,0x92,0x9a,0x47,0x28,0xe7,0x78,0x82,0x63,0xe9,0x0e,0xe5,0x76, \
-0x48,0x98,0x1c,0x7c,0xc3,0x63,0x74,0xe9,0xf8,0x20,0x66,0x5f,0xbd,0xe1,0xfa,0x04, \
-0x23,0x0b,0x82,0x5a,0xce,0x4d,0x01,0x74,0xc1,0xb4,0x44,0x64,0x4c,0xc3,0xd2,0x07, \
-0x5b,0x26,0x86,0x2a,0x0f,0x65,0x09,0x63,0x10,0x54,0x60,0x8c,0xf7,0xc3,0xc9,0x8b, \
-0x14,0x16,0x01,0x73,0x3b,0xd2,0x81,0xb9,0xb7,0x10,0xe1,0x61,0xea,0xec,0xd4,0x23, \
-0x1a,0xae,0x3d,0x8d,0x8c,0xa1,0x95,0x93,0x69,0x26,0xdb,0x11,0xa0,0x13,0x98,0x6a, \
-0xc0,0x30,0x12,0xd0,0x68,0x18,0x0d,0xb2,0x9a,0x97,0xc4,0x59,0x6e,0xc9,0x74,0x22, \
-0xcd,0x9b,0x19,0x74,0x7e,0x2e,0xa1,0x4c,0x6a,0x95,0x35,0x62,0xf3,0x5e,0xae,0xb8, \
-0x75,0x6d,0xc7,0xc6,0xef,0x41,0x96,0xd5,0x38,0xa1,0xf1,0x4c,0x0c,0x61,0xdf,0x68, \
-0xc1,0x04,0x72,0x52,0x45,0x21,0xd4,0x9c,0x0e,0x4b,0xde,0x89,0x14,0x92,0x14,0x13, \
-0x74,0x04,0x04,0xbe,0x31,0x08,0x6b,0xab,0xf0,0xa6,0x5f,0xad,0x70,0x83,0xb8,0xca, \
-0x2b,0xce,0xbc,0x7b,0x40,0x3c,0xe1,0x89,0xc6,0x15,0xd2,0xd4,0x6e,0xfe,0x04,0x42, \
-0x6a,0x1a,0x61,0x2b,0x1d,0xb1,0x54,0x89,0xe7,0xd8,0x1f,0x96,0x38,0xa0,0xba,0x62, \
-0xd1,0xa1,0x60,0xb6,0xa6,0xde,0xf5,0xf8,0x31,0x9a,0x3d,0xcc,0x89,0x90,0x20,0x18, \
-0x5a,0xba,0x8d,0x24,0xda,0xbf,0x70,0xcd,0x90,0x77,0x20,0x30,0xdd,0x56,0xb1,0xc3, \
-0xf5,0xd7,0xbd,0xa1,0xb4,0xd8,0x73,0x97,0xeb,0x3e,0x94,0xe7,0xe6,0x6c,0xcf,0x6d, \
-0xca,0x76,0xce,0x50,0xfa,0x57,0xe3,0x2c,0x47,0xd5,0xc2,0x60,0xc4,0xb1,0x4d,0xc9, \
-0x1d,0x07,0x65,0xf8,0xfe,0x19,0x2c,0xf9,0x20,0x54,0xda,0xf6,0xc0,0x44,0x44,0x9d, \
-0xfe,0xe2,0x03,0xa6,0xbe,0x4c,0x12,0xf9,0x6e,0x12,0xa4,0xed,0xbd,0x46,0xdc,0xc1, \
-0x18,0x28,0x2a,0x80,0xc8,0x82,0x5b,0x65,0x35,0x0d,0x64,0x39,0xeb,0xa6,0xfd,0x39, \
-0x2f,0x21,0x81,0xda,0x79,0x57,0x7b,0x98,0xf2,0x75,0x06,0x48,0x36,0xd5,0xcf,0x60, \
-0xc9,0x25,0x8c,0x96,0x40,0x2c,0x64,0xbb,0x23,0xba,0xba,0x98,0xd4,0x55,0x58,0x40, \
-0xd5,0xa7,0x35,0x03,0x87,0x5c,0x31,0x9a,0xb3,0xa0,0x1c,0x31,0x82,0x9f,0x42,0x19, \
-0x8a,0x03,0x17,0x03,0x05,0x17,0x70,0x95,0xc5,0xf2,0xc4,0x3e,0x05,0x86,0x0c,0x78, \
-0x55,0x25,0xe3,0xbb,0x77,0x37,0x35,0x60,0xd6,0x4a,0x55,0x06,0x42,0x61,0x9c,0x59, \
-0x60,0x1f,0x48,0x91,0x60,0x8e,0xe8,0x0b,0x2c,0x75,0xcd,0x21,0x69,0x05,0xd8,0x6c, \
-0x50,0x44,0xfa,0x7d,0x25,0xab,0x8f,0x53,0x78,0x61,0x23,0x78,0x8b,0xf4,0xe5,0x0a, \
-0xf4,0xcf,0xe6,0x1b,0x51,0xc3,0x28,0x4c,0x51,0x54,0x19,0xc4,0xbd,0x81,0x21,0x23, \
-0x82,0xea,0xa8,0x12,0x73,0x40,0xa1,0x1d,0xd0,0x7f,0x24,0xe8,0x22,0xad,0xe1,0x5c, \
-0x56,0xba,0xc6,0x9d,0x96,0x96,0x13,0x05,0x50,0xca,0xbe,0xa6,0x86,0x31,0xcc,0xd5, \
-0x2e,0x7c,0x45,0xb1,0xa1,0xa6,0x41,0x8a,0xa8,0xc4,0x16,0x4f,0x1d,0xc9,0xce,0x49, \
-0xda,0x27,0x72,0x4f,0xd9,0xe7,0xcf,0xcf,0x7c,0x68,0x4f,0x0e,0xee,0xa4,0xe7,0x93, \
-0x98,0x8a,0x5b,0xe2,0xe3,0x81,0x94,0x80,0xd1,0x49,0x97,0x96,0x2b,0x00,0x51,0x45, \
-0x50,0x7a,0xe8,0x56,0x33,0x6a,0x4c,0xa0,0x60,0x41,0x60,0x56,0x5d,0x0d,0x55,0x88, \
-0x8a,0xa2,0xc1,0x05,0x91,0x54,0x15,0x95,0x5a,0xa3,0x11,0x90,0x10,0x41,0x11,0x0c, \
-0x6d,0x34,0x3b,0x30,0x88,0xa4,0x12,0xd1,0xe1,0xfd,0x71,0x91,0x65,0xf2,0x0c,0x80, \
-0xc5,0x25,0x86,0x77,0xa1,0x3e,0xea,0x7d,0x56,0x09,0x09,0xfd,0x7d,0xf3,0x85,0x6a, \
-0xde,0xb8,0x01,0x23,0x2e,0x62,0x31,0xc2,0x02,0xc0,0x1d,0x44,0x15,0x47,0xbd,0x99, \
-0x41,0x41,0x16,0x2c,0x72,0xc2,0x99,0x29,0x61,0xc0,0xc5,0xc0,0xb1,0xa8,0xd9,0x52, \
-0x1b,0x6e,0x58,0x42,0x21,0xc6,0xb8,0xaa,0xb3,0x51,0x91,0xb8,0x8f,0x47,0xe7,0xea, \
-0x93,0x53,0x5f,0x60,0x1d,0xa3,0x6d,0x6f,0x1f,0x69,0xfa,0x0e,0xed,0x9b,0xd2,0x4b, \
-0x98,0x6f,0xe0,0xf7,0x32,0x1e,0x6b,0xd1,0xd2,0x38,0xd8,0x2e,0x37,0xcc,0x34,0x1c, \
-0xe8,0x2f,0x24,0xf7,0x38,0x76,0x9e,0xe7,0xac,0xb0,0xa9,0x44,0x89,0xb9,0x90,0xfc, \
-0x6e,0xdd,0xa6,0x4c,0x08,0xfe,0xc7,0x38,0xab,0x01,0x64,0x28,0xc8,0x86,0x93,0x57, \
-0x8e,0xe0,0x28,0x46,0x75,0x80,0xf6,0xd6,0x28,0x2a,0x22,0x16,0x5b,0x36,0x31,0x9c, \
-0x10,0xe0,0x71,0x05,0x8b,0x11,0x23,0x18,0x88,0x0a,0x10,0x46,0xc4,0x50,0x61,0x28, \
-0xd4,0xaf,0xc4,0x5d,0xcd,0x8d,0x31,0xa6,0x0b,0x19,0x91,0x72,0x90,0xb9,0xb3,0xc2, \
-0xd4,0x38,0xf2,0x0c,0x18,0x95,0x85,0x40,0x94,0x9f,0x08,0x62,0x09,0x41,0x8a,0xac, \
-0xc9,0xd6,0x53,0xbf,0x8c,0x9d,0x83,0x05,0x84,0x50,0xd4,0xf2,0x09,0x2e,0x19,0xdd, \
-0x0f,0x7c,0xdf,0xbd,0xc8,0x78,0x90,0xe4,0x78,0x77,0x7e,0xa4,0x52,0x72,0x7a,0x3d, \
-0x36,0x93,0xa8,0x49,0x49,0x10,0xfd,0x09,0x31,0xa2,0xf7,0x28,0xc1,0x56,0x29,0x5a, \
-0x32,0x0b,0x34,0x8b,0x31,0x4a,0x20,0x32,0x41,0x0f,0x8e,0x88,0x79,0x43,0x6d,0xb6, \
-0x8b,0x11,0x68,0x0a,0x0d,0xa3,0x46,0x52,0x50,0x46,0xd8,0x56,0xb4,0x8b,0xae,0xfe, \
-0x92,0x33,0xa5,0x3a,0x1c,0x22,0xf5,0x56,0x9f,0x79,0x8d,0x50,0xa6,0x0c,0x5a,0x24, \
-0x61,0x0b,0xbd,0xc1,0x2d,0x7d,0xc9,0x94,0x68,0xeb,0xa6,0x4f,0xd6,0xe8,0xf2,0x6a, \
-0x93,0xd9,0xf1,0xb6,0xda,0xda,0xbe,0xec,0x4f,0xe1,0xce,0xab,0x07,0x6e,0xc0,0x3c, \
-0xdb,0x21,0x2a,0x31,0x1d,0xd0,0xb3,0xa3,0xeb,0x98,0x68,0xd5,0x31,0x7b,0x63,0x42, \
-0x1c,0x0d,0x88,0xc2,0x14,0xab,0x7b,0xac,0x4b,0x91,0xa2,0x93,0xc8,0xe2,0xcb,0x62, \
-0x04,0x4d,0x78,0x62,0xb6,0xa0,0x52,0x18,0x57,0x30,0x90,0xaf,0x5f,0x1c,0x6e,0x32, \
-0xb9,0x7d,0x29,0x28,0xd0,0x32,0xb4,0xd1,0x94,0xc7,0x6c,0x86,0x18,0xde,0xf4,0x8e, \
-0x2c,0x8d,0xbc,0x79,0xd4,0x07,0x14,0xb6,0xdb,0xbf,0x43,0xad,0x22,0xec,0xf6,0x36, \
-0x3d,0x7e,0x06,0x7a,0x84,0x41,0xe1,0xb3,0x10,0x49,0x0c,0x45,0xd1,0x0d,0xad,0x59, \
-0xbe,0x4e,0x0e,0x90,0x95,0x2c,0x56,0x93,0x21,0xe5,0x10,0x95,0x61,0xa6,0x9d,0x7d, \
-0x5b,0x03,0x0a,0xed,0x80,0xd0,0x69,0xcc,0xe3,0xcb,0x65,0x6c,0x6f,0x88,0x72,0x50, \
-0x9b,0x82,0x99,0xa5,0x39,0xbc,0x02,0x39,0x01,0x4a,0x4b,0xc1,0x3f,0xb1,0xd5,0xcb, \
-0x81,0xe4,0x15,0x81,0x1a,0x38,0xa3,0x05,0x0a,0x4e,0xaa,0x38,0xe5,0xe6,0x53,0x24, \
-0x5e,0xc7,0x9d,0x91,0xeb,0x2d,0xc4,0x85,0x36,0x29,0xdc,0x46,0x98,0x51,0xd5,0xcd, \
-0x54,0x14,0x6b,0xaf,0x1d,0x56,0xc3,0xb6,0x34,0x68,0x6d,0x8a,0xce,0x20,0xe3,0x91, \
-0x70,0x89,0x94,0x07,0x24,0xd5,0x6f,0x70,0x38,0x73,0x5e,0x51,0x23,0x55,0x1b,0xe8, \
-0x55,0xf6,0x51,0xb3,0x2b,0x2a,0xe7,0xb8,0x0a,0xc0,0xd0,0x43,0x36,0x11,0x91,0x68, \
-0x03,0x71,0x3a,0x8b,0x26,0xc2,0x88,0x4a,0x11,0x6e,0x22,0x40,0xe9,0x49,0x0c,0x34, \
-0x96,0x64,0xc8,0x54,0x16,0x33,0x17,0x0c,0xbc,0xf1,0x26,0xb4,0xad,0xb0,0x28,0x7a, \
-0x09,0x75,0x61,0x8b,0xba,0x2c,0x41,0x1b,0x14,0x4d,0x79,0x76,0xc4,0xae,0x8c,0x4c, \
-0x69,0xd3,0xca,0xdc,0x1f,0x58,0xce,0x7f,0x9d,0xa7,0x9a,0xe0,0xb7,0x0c,0xe3,0x41, \
-0xc9,0x88,0x8b,0xea,0xac,0x5f,0x83,0x87,0xd5,0x10,0xfc,0xee,0x07,0xc1,0xb7,0xcc, \
-0xc5,0x6c,0x40,0xb8,0xe2,0x9f,0x8b,0xd7,0x36,0xd6,0x81,0x83,0x30,0x54,0x95,0xec, \
-0xe9,0xba,0x31,0x06,0x30,0x62,0x3e,0xdb,0xb6,0x31,0x83,0xba,0x8f,0x6c,0xd1,0xda, \
-0x98,0x46,0x01,0xb0,0xa8,0x0a,0x0b,0x54,0x2a,0xa2,0x70,0xe4,0x10,0x70,0x82,0x12, \
-0x80,0xdf,0x71,0x7b,0x17,0xd5,0x9f,0x4b,0xba,0xf5,0xa5,0x89,0xb2,0x7c,0xfe,0x1c, \
-0x75,0x04,0xee,0xb3,0x47,0x52,0x07,0x96,0x0e,0x84,0x79,0x40,0x43,0x87,0x81,0x09, \
-0xbd,0x8c,0xa8,0xd4,0xf2,0x07,0x02,0xdc,0x63,0xb4,0xfb,0x29,0x2d,0x59,0xfe,0x4d, \
-0x6f,0x7d,0x1d,0x01,0x08,0x35,0xe6,0x6e,0x24,0x4a,0x71,0x0a,0xc6,0x94,0x92,0xef, \
-0x8d,0x61,0x84,0x38,0x19,0x04,0x07,0x7d,0x40,0xcc,0xd2,0x03,0x73,0x33,0x6b,0x13, \
-0x6b,0x1f,0xc1,0xed,0xe7,0xd1,0x6b,0x66,0x6c,0xe1,0x4e,0x08,0xe0,0xbc,0x27,0x97, \
-0x59,0xd0,0x18,0x2e,0xac,0xe5,0xd9,0x2e,0x1e,0x86,0x42,0x0e,0x28,0xbb,0x20,0x96, \
-0xa8,0xf1,0x6d,0xb3,0xdf,0x79,0xb6,0x03,0xc9,0x04,0x91,0x91,0x53,0xf5,0xfb,0xd9, \
-0x45,0x39,0x98,0x1c,0xb4,0x17,0xd6,0x97,0x14,0x79,0x7e,0xf7,0x9e,0x70,0xc6,0x70, \
-0xb7,0x52,0x64,0xc5,0x94,0x63,0xe0,0x67,0x1c,0x13,0x37,0x18,0x25,0xc8,0x5d,0x66, \
-0xcc,0xb8,0xba,0x43,0x06,0x2b,0x9f,0x7f,0x61,0xe9,0x0d,0xe8,0x7f,0x1a,0x48,0x61, \
-0x20,0x4f,0x60,0x99,0x92,0x1e,0xa1,0x25,0xdf,0x97,0x24,0x3a,0xb2,0x7b,0x06,0x65, \
-0x95,0x06,0x30,0xf2,0xd1,0x4f,0xb1,0xf4,0x52,0x0e,0xdf,0x30,0x1d,0xaa,0x60,0x1a, \
-0x38,0x23,0x3e,0xe0,0x94,0xbb,0xb9,0x1c,0x66,0x88,0xfa,0x42,0x48,0xcb,0xe1,0xd2, \
-0x44,0x9f,0xc5,0xf4,0x61,0xe3,0x06,0x30,0x05,0x3e,0x1e,0x47,0x57,0x62,0x7b,0x07, \
-0x4f,0xa7,0x6d,0xc7,0x85,0xd1,0xe3,0xe9,0x05,0x3e,0xb4,0x36,0xea,0x07,0x61,0x73, \
-0x29,0x20,0x0c,0xec,0x09,0xb0,0xa3,0x4e,0x01,0xb2,0xb9,0x64,0x51,0x12,0xbc,0xd4, \
-0x98,0xc1,0x81,0x83,0x35,0x50,0x60,0xd2,0x74,0x68,0x0d,0x20,0x9b,0x0b,0xe9,0x36, \
-0x05,0x79,0xa1,0xbd,0x2d,0x39,0x67,0x0e,0xda,0x2c,0x1b,0xaa,0x24,0x87,0x16,0xeb, \
-0x46,0xcd,0x8a,0x82,0x11,0x1b,0x60,0x68,0x1f,0x1b,0x71,0xb1,0x9b,0xd1,0x66,0xcb, \
-0x00,0x96,0xf3,0x03,0x40,0x63,0x16,0x32,0x2b,0x70,0x06,0xc1,0x89,0xa1,0x94,0x41, \
-0x20,0x6a,0x24,0x4c,0x0c,0xdd,0xa0,0x72,0x95,0x5c,0x38,0x34,0x08,0x26,0x62,0x94, \
-0xe9,0x09,0x83,0x17,0x58,0x94,0xd0,0x90,0x30,0x4b,0x4c,0x2a,0x4c,0x06,0x02,0x70, \
-0x32,0xda,0x95,0x79,0x32,0x95,0xbd,0x40,0x90,0x24,0x45,0x49,0x2d,0x39,0xab,0x8a, \
-0x28,0x55,0x22,0x85,0x3c,0x41,0xc5,0x62,0xce,0xc8,0x0c,0x48,0xd1,0x65,0x81,0xa7, \
-0x97,0x65,0x98,0x69,0x32,0x81,0x90,0xb4,0x6b,0x22,0xad,0x22,0x94,0x0b,0x34,0xf2, \
-0x05,0x8c,0x20,0xa1,0x50,0xc4,0xdb,0x82,0x03,0xdb,0x21,0x4b,0x76,0x09,0x0e,0x48, \
-0x4c,0x70,0x5c,0xec,0xd5,0x46,0x44,0xb1,0x74,0x55,0x05,0x05,0xad,0x56,0x0a,0x50, \
-0x11,0xa3,0xe8,0x58,0x89,0x81,0x43,0x60,0x21,0x61,0xde,0xcf,0x00,0x4a,0x07,0x2a, \
-0xcf,0x1a,0xac,0xcc,0x42,0xa4,0x90,0x2c,0xa6,0x07,0xa5,0xca,0xb9,0xbe,0x79,0xe0, \
-0x49,0x99,0x53,0x41,0x91,0x86,0xd3,0x31,0x36,0x0c,0x1f,0xfe,0xd4,0x67,0xee,0xa6, \
-0x27,0xe1,0x5b,0xed,0x94,0x4d,0x3a,0x0e,0xe3,0x05,0x09,0xd1,0x57,0xde,0x42,0x63, \
-0x14,0x44,0x65,0xd6,0x8c,0x38,0x77,0xc4,0x76,0x30,0x1e,0xf4,0xbd,0xc0,0xa2,0x88, \
-0x6c,0x20,0x3b,0x9c,0xd2,0x75,0xc0,0x0e,0x41,0xa9,0x00,0xe4,0xc9,0x26,0x3b,0x20, \
-0xac,0x88,0x98,0x61,0x45,0x43,0xe6,0x9b,0x60,0xae,0x15,0x2e,0x31,0x09,0x72,0x98, \
-0x5e,0x08,0x52,0xd5,0x60,0x44,0x04,0x59,0x24,0x58,0x87,0x36,0x2f,0x38,0x14,0x34, \
-0x5d,0x80,0xe6,0xee,0x8a,0x5c,0x60,0x2c,0x46,0x25,0xa3,0x02,0xf5,0x5c,0x42,0xc9, \
-0x52,0xf8,0x98,0x1c,0x09,0x4c,0x2e,0x56,0x26,0xd5,0x38,0x87,0x77,0x28,0x79,0x68, \
-0x0d,0x8e,0x42,0xe6,0xc8,0x97,0x6e,0x87,0x44,0x9d,0x4c,0x6c,0xbc,0x92,0x51,0x11, \
-0x30,0x23,0x6a,0x8e,0x0e,0xfe,0x7c,0x8e,0x0a,0xfd,0xbe,0x89,0xc7,0x87,0x9a,0x06, \
-0x4e,0xfa,0x51,0xc9,0xab,0x25,0x51,0xf4,0x60,0x48,0xc0,0x98,0x71,0x18,0x00,0x91, \
-0xcd,0x89,0x13,0x7d,0x59,0x16,0x99,0x0a,0x06,0xa8,0x75,0x2b,0xac,0x29,0x39,0x5e, \
-0xbd,0x18,0x56,0x53,0xe1,0xf0,0x27,0xbe,0x90,0xe5,0xa1,0xb6,0x9a,0xee,0x92,0x11, \
-0x7c,0x72,0xe1,0xc8,0x92,0x33,0xd0,0x5d,0x06,0xb4,0x26,0x3c,0xb7,0x9d,0x89,0xb2, \
-0x78,0x2f,0x65,0x04,0x71,0x13,0x0b,0x36,0xa6,0x57,0x0b,0x11,0x2b,0x3c,0xf2,0x18, \
-0xe2,0x0e,0xc6,0xd5,0x0d,0xf5,0x63,0xd3,0xaf,0xa9,0x26,0x18,0xb2,0x49,0xde,0xc2, \
-0x16,0x2c,0x8a,0x6a,0x80,0x86,0x48,0x49,0x1e,0x52,0xe1,0xe3,0x71,0x0c,0xf2,0xc4, \
-0xa2,0xb4,0x8a,0x16,0xb6,0xc0,0x60,0x82,0xb3,0xd6,0x93,0x17,0x7a,0x7c,0x00,0xb2, \
-0x0a,0xa3,0x26,0x03,0x0f,0x9e,0x65,0x15,0xba,0x1b,0x93,0x11,0x13,0xb8,0x7c,0x5a, \
-0x96,0xd0,0xf0,0x2f,0x1c,0x74,0xf1,0xc7,0x03,0xa3,0x32,0x1b,0x30,0xa0,0xb1,0x93, \
-0xe3,0xe5,0x6e,0x4f,0x8d,0x81,0x6b,0x74,0xa2,0x8c,0x27,0x7e,0x3a,0xa1,0xb6,0x43, \
-0x6e,0x22,0x4c,0x5a,0xf5,0x30,0xe8,0x9e,0x53,0x02,0x56,0x7f,0x66,0x1e,0xbc,0x78, \
-0xf7,0x7d,0x3f,0x1d,0xa7,0x5b,0x48,0xdf,0x99,0xcc,0x0f,0x83,0xea,0x78,0x31,0x64, \
-0xc5,0x05,0x3a,0xa4,0x09,0xc3,0xb5,0x7e,0x0c,0x84,0x9f,0x18,0xee,0xe9,0xff,0xe5, \
-0xda,0x4d,0xda,0x08,0xf0,0xf4,0xa7,0xb7,0xcb,0xbb,0xe5,0xcc,0xb1,0xc5,0x74,0x08, \
-0x58,0x3d,0x48,0x6d,0x87,0x29,0x4f,0xcf,0xf9,0x5e,0x3b,0xd4,0x3c,0x73,0x90,0x2f, \
-0x74,0x81,0x66,0x16,0x55,0x2e,0x34,0x1e,0xb6,0xa0,0x72,0xbf,0x2c,0x22,0xc3,0xd2, \
-0x6d,0x4f,0x37,0xea,0x9d,0xd9,0x31,0xdd,0x67,0xea,0x3e,0x82,0xaf,0xe6,0x61,0xa3, \
-0xd9,0x77,0x80,0x1e,0xd8,0x78,0x5c,0x7c,0xd6,0x2d,0xfc,0x2c,0x16,0xdf,0x4a,0xa1, \
-0xe1,0x1f,0x2f,0x06,0x1b,0xf3,0xdc,0xf2,0xe4,0x42,0xaf,0xb8,0x91,0x12,0x4b,0x52, \
-0x67,0x72,0x77,0x8c,0x93,0xb1,0x23,0xc0,0xe9,0x89,0xc2,0x6f,0xde,0x7f,0xe3,0xdf, \
-0x53,0xc8,0xd4,0xfa,0x91,0x04,0x04,0x51,0x16,0x02,0x02,0x30,0x46,0x4a,0xcd,0x81, \
-0xc0,0x32,0x28,0xb0,0x54,0x85,0x35,0xcb,0x96,0x0d,0x93,0x9a,0x10,0x9a,0x2c,0x8a, \
-0x5e,0xa7,0xe8,0x62,0x90,0x20,0x1a,0x2e,0xf2,0x60,0x48,0x29,0xbe,0x38,0xfe,0x2a, \
-0x54,0xfd,0x0b,0x23,0xc6,0x96,0xc7,0x6d,0x7a,0x51,0x55,0xcb,0x7e,0xdc,0xf5,0x4b, \
-0xe4,0x26,0x23,0x53,0xf6,0xd6,0x36,0x5e,0x21,0x8d,0xb1,0x43,0xe9,0x6c,0xc3,0x8c, \
-0x37,0x13,0x08,0xee,0x4b,0x20,0xc4,0x9d,0x6d,0x99,0x7a,0xb8,0xca,0x70,0x18,0x30, \
-0xb3,0x64,0x68,0x5c,0x30,0x6c,0x6d,0x55,0x7e,0xea,0xa2,0x10,0x94,0xc3,0xaa,0x31, \
-0x3b,0xf8,0x50,0xdf,0xf9,0x46,0x9b,0x06,0x92,0xe5,0x13,0x39,0x46,0x64,0x9f,0x93, \
-0x24,0x41,0x2d,0x26,0xc4,0xaa,0x76,0xc6,0x9d,0x1c,0xaf,0xe5,0xb0,0x2d,0xbe,0x12, \
-0xc7,0x2f,0x0d,0x95,0xc9,0x51,0x64,0x12,0xb0,0x8a,0xf5,0xc5,0x30,0x33,0x05,0x1c, \
-0xa0,0x01,0x2d,0x6a,0xb7,0x7a,0x1e,0xc0,0xb8,0x2f,0x19,0x20,0xfe,0x1d,0x2e,0x21, \
-0xeb,0x0d,0xe1,0x8e,0xed,0x78,0x24,0xa4,0x7d,0x6d,0x9d,0x50,0xda,0xe0,0xc3,0x32, \
-0x3f,0xc2,0x7d,0xf4,0xca,0xf4,0x07,0xe7,0xb0,0xa3,0xeb,0x39,0xe5,0xa1,0xf1,0x90, \
-0x27,0xb3,0x39,0x8d,0x57,0x33,0xcb,0x4a,0x44,0x2e,0x8b,0xae,0x14,0xf6,0xd0,0x15, \
-0x08,0x7c,0xf8,0x8e,0xb6,0x29,0xdb,0x83,0x8f,0x73,0xbb,0xa1,0x07,0x25,0x1a,0x8e, \
-0xc8,0xa0,0xa1,0x2d,0xe6,0xc2,0x7d,0x93,0x28,0xce,0x14,0x22,0x5c,0xd2,0xa2,0x8d, \
-0x1e,0x7d,0x98,0x99,0x80,0xcb,0xcc,0xa3,0xcd,0x0b,0x2d,0x04,0x25,0x2a,0x39,0x55, \
-0x34,0x80,0xb7,0x16,0x1c,0xd3,0x02,0x61,0x4a,0x04,0xb1,0x86,0x24,0x8c,0x2d,0x3a, \
-0xb8,0x42,0x61,0x03,0x73,0x18,0x33,0x76,0xb1,0x35,0x81,0x42,0x82,0x08,0xda,0xaf, \
-0x94,0xd3,0x1e,0xc6,0x10,0xc6,0xcb,0x7c,0x28,0x54,0x38,0xf2,0x88,0x1c,0x1c,0x3d, \
-0x1d,0x64,0x30,0x02,0x2e,0x91,0x35,0x60,0xe7,0xde,0x34,0x01,0xa2,0x10,0x6a,0x8a, \
-0x04,0xf7,0x3e,0x0f,0xa7,0x98,0x82,0xad,0x36,0x06,0xc4,0x10,0x16,0xe7,0xc7,0x8e, \
-0x38,0xfd,0x7b,0xbd,0x2f,0x82,0xf2,0x7f,0xd7,0xf0,0x74,0x8b,0x22,0xee,0xfe,0x16, \
-0x57,0xe4,0xe9,0xd6,0xab,0xa4,0xff,0x54,0x6e,0x6e,0x16,0x62,0x3f,0xfe,0x2e,0xe4, \
-0x8a,0x70,0xa1,0x21,0x5a,0xd2,0xd5,0x0a, \
-
diff --git a/include/.gitignore b/include/.gitignore
index 9d9b6c4..50cf6de 100644
--- a/include/.gitignore
+++ b/include/.gitignore
@@ -1,10 +1 @@
/config
-
-/applets.h
-/applet_tables.h
-/autoconf.h
-/bbconfigopts_bz2.h
-/bbconfigopts.h
-/NUM_APPLETS.h
-/usage_compressed.h
-/usage.h
diff --git a/include/android.h b/include/android.h
index 38ab3a7..651f7df 100644
--- a/include/android.h
+++ b/include/android.h
@@ -15,6 +15,11 @@
# include <math.h>
#endif
+/* lutimes doesnt exists in libc */
+#if ENABLE_FEATURE_TOUCH_NODEREF
+# define lutimes utimes
+#endif
+
#define killpg_busybox(P, S) kill(-(P), S)
#define setmntent fopen
@@ -25,9 +30,7 @@ void endutent(void);
/* defined in bionic/mktemp.c */
char *mkdtemp(char *);
-
-/* defined in bionic/stubs.c */
-char *ttyname(int);
+char *bb_mktemp(char *);
/* SYSCALLS */
int stime(const time_t *);
@@ -40,12 +43,31 @@ int getsid(pid_t);
#define SYS_ioprio_get __NR_ioprio_get
#endif
+/* XXX These need to be obtained from kernel headers. See b/9336527 */
+#define SWAP_FLAG_PREFER 0x8000
+#define SWAP_FLAG_PRIO_MASK 0x7fff
+#define SWAP_FLAG_PRIO_SHIFT 0
+#define SWAP_FLAG_DISCARD 0x10000
+
/* local definition in libbb/xfuncs_printf.c */
int fdprintf(int fd, const char *format, ...);
-/* local definitions in libbb/android.c */
-int ttyname_r(int, char *, size_t);
+/* local definitions in android/libc/pty.c */
+#include <fcntl.h>
+#ifndef SPLICE_F_GIFT
+/* if this constant is not defined,
+ ttyname is not in bionic */
+char* bb_ttyname(int);
+int bb_ttyname_r(int, char *, size_t);
+#define ttyname(n) bb_ttyname(n)
+#define ttyname_r(n,s,z) bb_ttyname_r(n,s,z)
+#else
+/* should be available in android M ? */
+extern char* ttyname(int);
+extern int ttyname_r(int, char *, size_t);
+#endif
+/* local definitions in android/android.c */
char *getusershell(void);
void setusershell(void);
void endusershell(void);
@@ -54,14 +76,21 @@ struct mntent;
struct __sFILE;
int addmntent(struct __sFILE *, const struct mntent *);
struct mntent *getmntent_r(struct __sFILE *fp, struct mntent *mnt, char *buf, int buflen);
-const char *hasmntopt(const struct mntent *, const char *);
+char *hasmntopt(const struct mntent *, const char *);
#define MNTOPT_NOAUTO "noauto"
/* bionic's vfork is rather broken; for now a terrible bandaid: */
#define vfork fork
+#if !defined(BIONIC_L) && !defined(BLOATCHECK)
#define _SOCKLEN_T_DECLARED
typedef int socklen_t;
+#endif
+
+/* wait3 was removed in android L */
+#ifdef BIONIC_L
+#define wait3(status, options, rusage) wait4(-1, status, options, rusage)
+#endif
#endif
diff --git a/include/applets.src.h b/include/applets.src.h
index c9244fb..7dbd4c7 100644
--- a/include/applets.src.h
+++ b/include/applets.src.h
@@ -52,6 +52,12 @@ s - suid type:
# define APPLET_NOEXEC(name,main,l,s,name2) LINK l name
# define APPLET_NOFORK(name,main,l,s,name2) LINK l name
+#elif defined(MAKE_SUID)
+# define APPLET(name,l,s) SUID s l name
+# define APPLET_ODDNAME(name,main,l,s,name2) SUID s l name
+# define APPLET_NOEXEC(name,main,l,s,name2) SUID s l name
+# define APPLET_NOFORK(name,main,l,s,name2) SUID s l name
+
#else
static struct bb_applet applets[] = { /* name, main, location, need_suid */
# define APPLET(name,l,s) { #name, #name, l, s },
@@ -73,16 +79,13 @@ IF_ACPID(APPLET(acpid, BB_DIR_SBIN, BB_SUID_DROP))
IF_ADDGROUP(APPLET(addgroup, BB_DIR_USR_SBIN, BB_SUID_DROP))
IF_ADDUSER(APPLET(adduser, BB_DIR_USR_SBIN, BB_SUID_DROP))
IF_ADJTIMEX(APPLET(adjtimex, BB_DIR_SBIN, BB_SUID_DROP))
-IF_AR(APPLET(ar, BB_DIR_USR_BIN, BB_SUID_DROP))
IF_ARP(APPLET(arp, BB_DIR_SBIN, BB_SUID_DROP))
IF_ARPING(APPLET(arping, BB_DIR_USR_SBIN, BB_SUID_DROP))
-IF_AWK(APPLET_NOEXEC(awk, awk, BB_DIR_USR_BIN, BB_SUID_DROP, awk))
IF_BASENAME(APPLET_NOFORK(basename, basename, BB_DIR_USR_BIN, BB_SUID_DROP, basename))
IF_BBCONFIG(APPLET(bbconfig, BB_DIR_BIN, BB_SUID_DROP))
IF_BEEP(APPLET(beep, BB_DIR_USR_BIN, BB_SUID_DROP))
IF_BLKID(APPLET(blkid, BB_DIR_SBIN, BB_SUID_DROP))
IF_BRCTL(APPLET(brctl, BB_DIR_USR_SBIN, BB_SUID_DROP))
-IF_BZIP2(APPLET(bzip2, BB_DIR_USR_BIN, BB_SUID_DROP))
IF_CAL(APPLET(cal, BB_DIR_USR_BIN, BB_SUID_DROP))
IF_CAT(APPLET_NOFORK(cat, cat, BB_DIR_BIN, BB_SUID_DROP, cat))
IF_CATV(APPLET(catv, BB_DIR_BIN, BB_SUID_DROP))
@@ -99,10 +102,8 @@ IF_CHRT(APPLET(chrt, BB_DIR_USR_BIN, BB_SUID_DROP))
IF_CHVT(APPLET(chvt, BB_DIR_USR_BIN, BB_SUID_DROP))
IF_CKSUM(APPLET_NOEXEC(cksum, cksum, BB_DIR_USR_BIN, BB_SUID_DROP, cksum))
IF_CLEAR(APPLET(clear, BB_DIR_USR_BIN, BB_SUID_DROP))
-IF_CMP(APPLET(cmp, BB_DIR_USR_BIN, BB_SUID_DROP))
IF_COMM(APPLET(comm, BB_DIR_USR_BIN, BB_SUID_DROP))
IF_CP(APPLET_NOEXEC(cp, cp, BB_DIR_BIN, BB_SUID_DROP, cp))
-IF_CPIO(APPLET(cpio, BB_DIR_BIN, BB_SUID_DROP))
IF_CROND(APPLET(crond, BB_DIR_USR_SBIN, BB_SUID_DROP))
/* Needs to be run by root or be suid root - needs to change /var/spool/cron* files: */
IF_CRONTAB(APPLET(crontab, BB_DIR_USR_BIN, BB_SUID_REQUIRE))
@@ -117,21 +118,17 @@ IF_DEVFSD(APPLET(devfsd, BB_DIR_SBIN, BB_SUID_DROP))
IF_DEVMEM(APPLET(devmem, BB_DIR_SBIN, BB_SUID_DROP))
IF_DF(APPLET(df, BB_DIR_BIN, BB_SUID_DROP))
IF_DHCPRELAY(APPLET(dhcprelay, BB_DIR_USR_SBIN, BB_SUID_DROP))
-IF_DIFF(APPLET(diff, BB_DIR_USR_BIN, BB_SUID_DROP))
IF_DIRNAME(APPLET_NOFORK(dirname, dirname, BB_DIR_USR_BIN, BB_SUID_DROP, dirname))
IF_DMESG(APPLET(dmesg, BB_DIR_BIN, BB_SUID_DROP))
IF_DNSD(APPLET(dnsd, BB_DIR_USR_SBIN, BB_SUID_DROP))
IF_HOSTNAME(APPLET_ODDNAME(dnsdomainname, hostname, BB_DIR_BIN, BB_SUID_DROP, dnsdomainname))
IF_DOS2UNIX(APPLET_NOEXEC(dos2unix, dos2unix, BB_DIR_USR_BIN, BB_SUID_DROP, dos2unix))
-IF_DPKG(APPLET(dpkg, BB_DIR_USR_BIN, BB_SUID_DROP))
-IF_DPKG_DEB(APPLET_ODDNAME(dpkg-deb, dpkg_deb, BB_DIR_USR_BIN, BB_SUID_DROP, dpkg_deb))
IF_DU(APPLET(du, BB_DIR_USR_BIN, BB_SUID_DROP))
IF_DUMPKMAP(APPLET(dumpkmap, BB_DIR_BIN, BB_SUID_DROP))
IF_DUMPLEASES(APPLET(dumpleases, BB_DIR_USR_BIN, BB_SUID_DROP))
//IF_E2FSCK(APPLET(e2fsck, BB_DIR_SBIN, BB_SUID_DROP))
//IF_E2LABEL(APPLET_ODDNAME(e2label, tune2fs, BB_DIR_SBIN, BB_SUID_DROP, e2label))
IF_ECHO(APPLET_NOFORK(echo, echo, BB_DIR_BIN, BB_SUID_DROP, echo))
-IF_ED(APPLET(ed, BB_DIR_BIN, BB_SUID_DROP))
IF_EJECT(APPLET(eject, BB_DIR_USR_BIN, BB_SUID_DROP))
IF_ENV(APPLET_NOEXEC(env, env, BB_DIR_USR_BIN, BB_SUID_DROP, env))
IF_ENVDIR(APPLET_ODDNAME(envdir, chpst, BB_DIR_USR_BIN, BB_SUID_DROP, envdir))
@@ -161,7 +158,6 @@ IF_FSCK(APPLET(fsck, BB_DIR_SBIN, BB_SUID_DROP))
//IF_E2FSCK(APPLET_ODDNAME(fsck.ext2, e2fsck, BB_DIR_SBIN, BB_SUID_DROP, fsck_ext2))
//IF_E2FSCK(APPLET_ODDNAME(fsck.ext3, e2fsck, BB_DIR_SBIN, BB_SUID_DROP, fsck_ext3))
IF_FSCK_MINIX(APPLET_ODDNAME(fsck.minix, fsck_minix, BB_DIR_SBIN, BB_SUID_DROP, fsck_minix))
-IF_FSTRIM(APPLET(fstrim, BB_DIR_SBIN, BB_SUID_DROP))
IF_FSYNC(APPLET_NOFORK(fsync, fsync, BB_DIR_BIN, BB_SUID_DROP, fsync))
IF_FTPD(APPLET(ftpd, BB_DIR_USR_SBIN, BB_SUID_DROP))
IF_FTPGET(APPLET_ODDNAME(ftpget, ftpgetput, BB_DIR_USR_BIN, BB_SUID_DROP, ftpget))
@@ -171,8 +167,6 @@ IF_GETENFORCE(APPLET(getenforce, BB_DIR_USR_SBIN, BB_SUID_DROP))
IF_GETOPT(APPLET(getopt, BB_DIR_BIN, BB_SUID_DROP))
IF_GETSEBOOL(APPLET(getsebool, BB_DIR_USR_SBIN, BB_SUID_DROP))
IF_GETTY(APPLET(getty, BB_DIR_SBIN, BB_SUID_DROP))
-IF_GUNZIP(APPLET(gunzip, BB_DIR_BIN, BB_SUID_DROP))
-IF_GZIP(APPLET(gzip, BB_DIR_BIN, BB_SUID_DROP))
IF_HD(APPLET_NOEXEC(hd, hexdump, BB_DIR_USR_BIN, BB_SUID_DROP, hd))
IF_HDPARM(APPLET(hdparm, BB_DIR_SBIN, BB_SUID_DROP))
IF_HEAD(APPLET_NOEXEC(head, head, BB_DIR_USR_BIN, BB_SUID_DROP, head))
@@ -231,13 +225,9 @@ IF_LS(APPLET_NOEXEC(ls, ls, BB_DIR_BIN, BB_SUID_DROP, ls))
IF_LSATTR(APPLET(lsattr, BB_DIR_BIN, BB_SUID_DROP))
IF_LSPCI(APPLET(lspci, BB_DIR_USR_BIN, BB_SUID_DROP))
IF_LSUSB(APPLET(lsusb, BB_DIR_USR_BIN, BB_SUID_DROP))
-IF_UNLZMA(APPLET_ODDNAME(lzcat, unlzma, BB_DIR_USR_BIN, BB_SUID_DROP, lzcat))
-IF_LZMA(APPLET_ODDNAME(lzma, unlzma, BB_DIR_USR_BIN, BB_SUID_DROP, lzma))
-IF_LZOP(APPLET(lzop, BB_DIR_BIN, BB_SUID_DROP))
-IF_LZOP(APPLET_ODDNAME(lzopcat, lzop, BB_DIR_USR_BIN, BB_SUID_DROP, lzopcat))
IF_MAKEDEVS(APPLET(makedevs, BB_DIR_SBIN, BB_SUID_DROP))
IF_MAKEMIME(APPLET(makemime, BB_DIR_BIN, BB_SUID_DROP))
-IF_MAN(APPLET(man, BB_DIR_SBIN, BB_SUID_DROP))
+IF_MAN(APPLET(man, BB_DIR_USR_BIN, BB_SUID_DROP))
IF_MATCHPATHCON(APPLET(matchpathcon, BB_DIR_USR_SBIN, BB_SUID_DROP))
IF_MD5SUM(APPLET_NOEXEC(md5sum, md5_sha1_sum, BB_DIR_USR_BIN, BB_SUID_DROP, md5sum))
IF_MICROCOM(APPLET(microcom, BB_DIR_USR_BIN, BB_SUID_DROP))
@@ -298,12 +288,9 @@ IF_RENICE(APPLET(renice, BB_DIR_USR_BIN, BB_SUID_DROP))
IF_RESET(APPLET(reset, BB_DIR_USR_BIN, BB_SUID_DROP))
IF_RESIZE(APPLET(resize, BB_DIR_USR_BIN, BB_SUID_DROP))
IF_RESTORECON(APPLET_ODDNAME(restorecon, setfiles, BB_DIR_SBIN, BB_SUID_DROP, restorecon))
-IF_RFKILL(APPLET(rfkill, BB_DIR_USR_SBIN, BB_SUID_DROP))
IF_RM(APPLET_NOFORK(rm, rm, BB_DIR_BIN, BB_SUID_DROP, rm))
IF_RMDIR(APPLET_NOFORK(rmdir, rmdir, BB_DIR_BIN, BB_SUID_DROP, rmdir))
IF_ROUTE(APPLET(route, BB_DIR_SBIN, BB_SUID_DROP))
-IF_RPM(APPLET(rpm, BB_DIR_BIN, BB_SUID_DROP))
-IF_RPM2CPIO(APPLET(rpm2cpio, BB_DIR_USR_BIN, BB_SUID_DROP))
IF_RTCWAKE(APPLET(rtcwake, BB_DIR_USR_SBIN, BB_SUID_DROP))
IF_RUN_PARTS(APPLET_ODDNAME(run-parts, run_parts, BB_DIR_BIN, BB_SUID_DROP, run_parts))
IF_RUNCON(APPLET(runcon, BB_DIR_USR_BIN, BB_SUID_DROP))
@@ -313,7 +300,6 @@ IF_RUNSVDIR(APPLET(runsvdir, BB_DIR_USR_BIN, BB_SUID_DROP))
IF_RX(APPLET(rx, BB_DIR_USR_BIN, BB_SUID_DROP))
IF_SCRIPT(APPLET(script, BB_DIR_USR_BIN, BB_SUID_DROP))
IF_SCRIPTREPLAY(APPLET(scriptreplay, BB_DIR_BIN, BB_SUID_DROP))
-IF_SED(APPLET(sed, BB_DIR_BIN, BB_SUID_DROP))
IF_SELINUXENABLED(APPLET(selinuxenabled, BB_DIR_USR_SBIN, BB_SUID_DROP))
IF_SENDMAIL(APPLET(sendmail, BB_DIR_USR_SBIN, BB_SUID_DROP))
IF_SEQ(APPLET_NOFORK(seq, seq, BB_DIR_USR_BIN, BB_SUID_DROP, seq))
@@ -357,7 +343,6 @@ IF_BB_SYSCTL(APPLET(sysctl, BB_DIR_SBIN, BB_SUID_DROP))
IF_SYSLOGD(APPLET(syslogd, BB_DIR_SBIN, BB_SUID_DROP))
IF_TAC(APPLET_NOEXEC(tac, tac, BB_DIR_USR_BIN, BB_SUID_DROP, tac))
IF_TAIL(APPLET(tail, BB_DIR_USR_BIN, BB_SUID_DROP))
-IF_TAR(APPLET(tar, BB_DIR_BIN, BB_SUID_DROP))
IF_TASKSET(APPLET(taskset, BB_DIR_USR_BIN, BB_SUID_DROP))
/* IF_TC(APPLET(tc, BB_DIR_SBIN, BB_SUID_DROP)) */
IF_TCPSVD(APPLET_ODDNAME(tcpsvd, tcpudpsvd, BB_DIR_USR_BIN, BB_SUID_DROP, tcpsvd))
@@ -386,14 +371,9 @@ IF_UDHCPD(APPLET(udhcpd, BB_DIR_USR_SBIN, BB_SUID_DROP))
IF_UDPSVD(APPLET_ODDNAME(udpsvd, tcpudpsvd, BB_DIR_USR_BIN, BB_SUID_DROP, udpsvd))
IF_UMOUNT(APPLET(umount, BB_DIR_BIN, BB_SUID_DROP))
IF_UNAME(APPLET(uname, BB_DIR_BIN, BB_SUID_DROP))
-IF_UNCOMPRESS(APPLET(uncompress, BB_DIR_BIN, BB_SUID_DROP))
IF_UNEXPAND(APPLET_ODDNAME(unexpand, expand, BB_DIR_USR_BIN, BB_SUID_DROP, unexpand))
IF_UNIQ(APPLET(uniq, BB_DIR_USR_BIN, BB_SUID_DROP))
IF_UNIX2DOS(APPLET_NOEXEC(unix2dos, dos2unix, BB_DIR_USR_BIN, BB_SUID_DROP, unix2dos))
-IF_UNXZ(APPLET(unxz, BB_DIR_USR_BIN, BB_SUID_DROP))
-IF_UNLZMA(APPLET(unlzma, BB_DIR_USR_BIN, BB_SUID_DROP))
-IF_LZOP(APPLET_ODDNAME(unlzop, lzop, BB_DIR_USR_BIN, BB_SUID_DROP, unlzop))
-IF_UNZIP(APPLET(unzip, BB_DIR_USR_BIN, BB_SUID_DROP))
IF_UPTIME(APPLET(uptime, BB_DIR_USR_BIN, BB_SUID_DROP))
IF_USLEEP(APPLET_NOFORK(usleep, usleep, BB_DIR_BIN, BB_SUID_DROP, usleep))
IF_UUDECODE(APPLET(uudecode, BB_DIR_USR_BIN, BB_SUID_DROP))
@@ -402,21 +382,17 @@ IF_VCONFIG(APPLET(vconfig, BB_DIR_SBIN, BB_SUID_DROP))
/* Needs to be run by root or be suid root - needs to change uid and gid: */
IF_VLOCK(APPLET(vlock, BB_DIR_USR_BIN, BB_SUID_REQUIRE))
IF_VOLNAME(APPLET(volname, BB_DIR_USR_BIN, BB_SUID_DROP))
-/* Needs to be run by root or be suid root - needs to write to /dev/TTY: */
-IF_WALL(APPLET(wall, BB_DIR_USR_BIN, BB_SUID_REQUIRE))
IF_WATCH(APPLET(watch, BB_DIR_BIN, BB_SUID_DROP))
IF_WATCHDOG(APPLET(watchdog, BB_DIR_SBIN, BB_SUID_DROP))
IF_WC(APPLET(wc, BB_DIR_USR_BIN, BB_SUID_DROP))
IF_WGET(APPLET(wget, BB_DIR_USR_BIN, BB_SUID_DROP))
IF_WHICH(APPLET(which, BB_DIR_USR_BIN, BB_SUID_DROP))
IF_WHOAMI(APPLET_NOFORK(whoami, whoami, BB_DIR_USR_BIN, BB_SUID_DROP, whoami))
-IF_UNXZ(APPLET_ODDNAME(xzcat, unxz, BB_DIR_USR_BIN, BB_SUID_DROP, xzcat))
-IF_XZ(APPLET_ODDNAME(xz, unxz, BB_DIR_USR_BIN, BB_SUID_DROP, xz))
IF_YES(APPLET_NOFORK(yes, yes, BB_DIR_USR_BIN, BB_SUID_DROP, yes))
-IF_GUNZIP(APPLET_ODDNAME(zcat, gunzip, BB_DIR_BIN, BB_SUID_DROP, zcat))
IF_ZCIP(APPLET(zcip, BB_DIR_SBIN, BB_SUID_DROP))
-#if !defined(PROTOTYPES) && !defined(NAME_MAIN_CNAME) && !defined(MAKE_USAGE)
+#if !defined(PROTOTYPES) && !defined(NAME_MAIN_CNAME) && !defined(MAKE_USAGE) \
+ && !defined(MAKE_LINKS) && !defined(MAKE_SUID)
};
#endif
diff --git a/include/bb_archive.h b/include/bb_archive.h
index a7a2a11..fc976f2 100644
--- a/include/bb_archive.h
+++ b/include/bb_archive.h
@@ -122,6 +122,12 @@ typedef struct archive_handle_t {
#define ARCHIVE_NUMERIC_OWNER (1 << 7)
#define ARCHIVE_O_TRUNC (1 << 8)
#define ARCHIVE_REMEMBER_NAMES (1 << 9)
+#if ENABLE_RPM
+#define ARCHIVE_REPLACE_VIA_RENAME (1 << 10)
+#endif
+#if ENABLE_FEATURE_TAR_SELINUX
+#define ARCHIVE_STORE_SELINUX (1 << 15)
+#endif
/* POSIX tar Header Block, from POSIX 1003.1-1990 */
@@ -143,7 +149,7 @@ typedef struct tar_header_t { /* byte offset */
/* Normally it's defined as magic[6] followed by
* version[2], but we put them together to save code.
*/
- char magic[8]; /* 257-264 */
+ char magic[8]; /* 257-264 (magic 6 + version 2) */
char uname[32]; /* 265-296 */
char gname[32]; /* 297-328 */
char devmajor[8]; /* 329-336 */
diff --git a/include/bb_e2fs_defs.h b/include/bb_e2fs_defs.h
index b400f8c..3f5e3c4 100644
--- a/include/bb_e2fs_defs.h
+++ b/include/bb_e2fs_defs.h
@@ -442,7 +442,7 @@ struct ext2_super_block {
uint32_t s_reserved[162]; /* Padding to the end of the block */
};
struct BUG_ext2_super_block {
- char bug[sizeof(struct ext2_super_block) == 1024 ? 1 : -1];
+ char bug[sizeof(struct ext2_super_block) == 1024 ? 1 : -1];
};
/*
diff --git a/include/libbb.h b/include/libbb.h
index 199c17c..85fc485 100644
--- a/include/libbb.h
+++ b/include/libbb.h
@@ -45,12 +45,12 @@
#include <stdarg.h>
#include <stddef.h>
#include <string.h>
-/* There are two incompatible basename's, let not use them! */
+/* There are two incompatible basename's, let's not use them! */
/* See the dirname/basename man page for details */
#include <libgen.h> /* dirname,basename */
#undef basename
#define basename dont_use_basename
-#include <sys/poll.h>
+#include <poll.h>
#include <sys/ioctl.h>
#include <sys/mman.h>
#include <sys/socket.h>
@@ -74,11 +74,6 @@
# include <shadow.h>
# endif
#endif
-#if defined(ANDROID) || defined(__ANDROID__)
-//see android.h
-//# define endpwent() ((void)0)
-//# define endgrent() ((void)0)
-#endif
#ifdef HAVE_MNTENT_H
# include <mntent.h>
#endif
@@ -94,9 +89,14 @@
#if ENABLE_SELINUX
# include <selinux/selinux.h>
# include <selinux/context.h>
+#ifdef __BIONIC__
+# include "android/selinux/android_selinux.h"
+# include <sepol/policydb/flask.h>
+#else
# include <selinux/flask.h>
# include <selinux/av_permissions.h>
#endif
+#endif
#if ENABLE_FEATURE_UTMP
# include <utmp.h>
#endif
@@ -275,7 +275,7 @@ struct BUG_off_t_size_is_misdetected {
};
#endif
-#ifdef __BIONIC__
+#if defined(__BIONIC__) && !defined(__LP64__)
/* bionic uses stat64 which has long long file sizes, whereas off_t is only long bits */
typedef long long filesize_t;
#define FILESIZE_FMT "ll"
@@ -417,6 +417,7 @@ char *bb_get_last_path_component_nostrip(const char *path) FAST_FUNC;
const char *bb_basename(const char *name) FAST_FUNC;
/* NB: can violate const-ness (similarly to strchr) */
char *last_char_is(const char *s, int c) FAST_FUNC;
+const char* endofname(const char *name) FAST_FUNC;
void ndelay_on(int fd) FAST_FUNC;
void ndelay_off(int fd) FAST_FUNC;
@@ -491,6 +492,8 @@ void record_signo(int signo); /* not FAST_FUNC! */
void xsetgid(gid_t gid) FAST_FUNC;
void xsetuid(uid_t uid) FAST_FUNC;
+void xsetegid(gid_t egid) FAST_FUNC;
+void xseteuid(uid_t euid) FAST_FUNC;
void xchdir(const char *path) FAST_FUNC;
void xchroot(const char *path) FAST_FUNC;
void xsetenv(const char *key, const char *value) FAST_FUNC;
@@ -499,11 +502,12 @@ void bb_unsetenv_and_free(char *key) FAST_FUNC;
void xunlink(const char *pathname) FAST_FUNC;
void xstat(const char *pathname, struct stat *buf) FAST_FUNC;
void xfstat(int fd, struct stat *buf, const char *errmsg) FAST_FUNC;
+int open3_or_warn(const char *pathname, int flags, int mode) FAST_FUNC;
+int open_or_warn(const char *pathname, int flags) FAST_FUNC;
+int xopen3(const char *pathname, int flags, int mode) FAST_FUNC;
int xopen(const char *pathname, int flags) FAST_FUNC;
int xopen_nonblocking(const char *pathname) FAST_FUNC;
-int xopen3(const char *pathname, int flags, int mode) FAST_FUNC;
-int open_or_warn(const char *pathname, int flags) FAST_FUNC;
-int open3_or_warn(const char *pathname, int flags, int mode) FAST_FUNC;
+int xopen_as_uid_gid(const char *pathname, int flags, uid_t u, gid_t g) FAST_FUNC;
int open_or_warn_stdin(const char *pathname) FAST_FUNC;
int xopen_stdin(const char *pathname) FAST_FUNC;
void xrename(const char *oldpath, const char *newpath) FAST_FUNC;
@@ -513,9 +517,9 @@ int xmkstemp(char *template) FAST_FUNC;
off_t fdlength(int fd) FAST_FUNC;
uoff_t FAST_FUNC get_volume_size_in_bytes(int fd,
- const char *override,
- unsigned override_units,
- int extend);
+ const char *override,
+ unsigned override_units,
+ int extend);
void xpipe(int filedes[2]) FAST_FUNC;
/* In this form code with pipes is much more readable */
@@ -553,7 +557,8 @@ struct BUG_too_small {
void parse_datestr(const char *date_str, struct tm *ptm) FAST_FUNC;
time_t validate_tm_time(const char *date_str, struct tm *ptm) FAST_FUNC;
-
+char *strftime_HHMMSS(char *buf, unsigned len, time_t *tp) FAST_FUNC;
+char *strftime_YYYYMMDDHHMMSS(char *buf, unsigned len, time_t *tp) FAST_FUNC;
int xsocket(int domain, int type, int protocol) FAST_FUNC;
void xbind(int sockfd, struct sockaddr *my_addr, socklen_t addrlen) FAST_FUNC;
@@ -707,6 +712,13 @@ const char* FAST_FUNC printable_string(uni_stat_t *stats, const char *str);
* else it is printed as-is (except for ch = 0x9b) */
enum { PRINTABLE_META = 0x100 };
void fputc_printable(int ch, FILE *file) FAST_FUNC;
+/* Return a string that is the printable representation of character ch.
+ * Buffer must hold at least four characters. */
+enum {
+ VISIBLE_ENDLINE = 1 << 0,
+ VISIBLE_SHOW_TABS = 1 << 1,
+};
+void visible(unsigned ch, char *buf, int flags) FAST_FUNC;
/* dmalloc will redefine these to it's own implementation. It is safe
* to have the prototypes here unconditionally. */
@@ -755,12 +767,12 @@ extern void *xmalloc_xopen_read_close(const char *filename, size_t *maxsz_p) FAS
#if SEAMLESS_COMPRESSION
/* Autodetects gzip/bzip2 formats. fd may be in the middle of the file! */
-extern int setup_unzip_on_fd(int fd, int fail_if_not_detected) FAST_FUNC;
+extern int setup_unzip_on_fd(int fd, int fail_if_not_compressed) FAST_FUNC;
/* Autodetects .gz etc */
-extern int open_zipped(const char *fname) FAST_FUNC;
+extern int open_zipped(const char *fname, int fail_if_not_compressed) FAST_FUNC;
#else
# define setup_unzip_on_fd(...) (0)
-# define open_zipped(fname) open((fname), O_RDONLY);
+# define open_zipped(fname, fail_if_not_compressed) open((fname), O_RDONLY);
#endif
extern void *xmalloc_open_zipped_read_close(const char *fname, size_t *maxsz_p) FAST_FUNC RETURNS_MALLOC;
@@ -837,8 +849,8 @@ char *itoa(int n) FAST_FUNC;
char *utoa_to_buf(unsigned n, char *buf, unsigned buflen) FAST_FUNC;
char *itoa_to_buf(int n, char *buf, unsigned buflen) FAST_FUNC;
/* Intelligent formatters of bignums */
-void smart_ulltoa4(unsigned long long ul, char buf[4], const char *scale) FAST_FUNC;
-void smart_ulltoa5(unsigned long long ul, char buf[5], const char *scale) FAST_FUNC;
+char *smart_ulltoa4(unsigned long long ul, char buf[4], const char *scale) FAST_FUNC;
+char *smart_ulltoa5(unsigned long long ul, char buf[5], const char *scale) FAST_FUNC;
/* If block_size == 0, display size without fractional part,
* else display (size * block_size) with one decimal digit.
* If display_unit == 0, show value no bigger than 1024 with suffix (K,M,G...),
@@ -861,6 +873,9 @@ struct suffix_mult {
char suffix[4];
unsigned mult;
};
+extern const struct suffix_mult bkm_suffixes[];
+#define km_suffixes (bkm_suffixes + 1)
+
#include "xatonum.h"
/* Specialized: */
@@ -895,6 +910,8 @@ int get_uidgid(struct bb_uidgid_t*, const char*, int numeric_ok) FAST_FUNC;
void xget_uidgid(struct bb_uidgid_t*, const char*) FAST_FUNC;
/* chown-like handling of "user[:[group]" */
void parse_chown_usergroup_or_die(struct bb_uidgid_t *u, char *user_group) FAST_FUNC;
+struct passwd* safegetpwnam(const char *name) FAST_FUNC;
+struct passwd* safegetpwuid(uid_t uid) FAST_FUNC;
struct passwd* xgetpwnam(const char *name) FAST_FUNC;
struct group* xgetgrnam(const char *name) FAST_FUNC;
struct passwd* xgetpwuid(uid_t uid) FAST_FUNC;
@@ -1138,9 +1155,6 @@ void bb_displayroutes(int noresolve, int netstatfmt) FAST_FUNC;
/* Networking */
-int create_icmp_socket(void) FAST_FUNC;
-int create_icmp6_socket(void) FAST_FUNC;
-/* interface.c */
/* This structure defines protocol families and their handlers. */
struct aftype {
const char *name;
@@ -1169,6 +1183,7 @@ struct hwtype {
};
extern smallint interface_opt_a;
int display_interfaces(char *ifname) FAST_FUNC;
+int in_ether(const char *bufp, struct sockaddr *sap) FAST_FUNC;
#if ENABLE_FEATURE_HWIB
int in_ib(const char *bufp, struct sockaddr *sap) FAST_FUNC;
#else
@@ -1318,8 +1333,10 @@ int sd_listen_fds(void);
#define SETUP_ENV_CLEARENV (1 << 1)
#define SETUP_ENV_TO_TMP (1 << 2)
#define SETUP_ENV_NO_CHDIR (1 << 4)
-extern void setup_environment(const char *shell, int flags, const struct passwd *pw) FAST_FUNC;
-extern int correct_password(const struct passwd *pw) FAST_FUNC;
+void setup_environment(const char *shell, int flags, const struct passwd *pw) FAST_FUNC;
+void nuke_str(char *str) FAST_FUNC;
+int ask_and_check_password_extended(const struct passwd *pw, int timeout, const char *prompt) FAST_FUNC;
+int ask_and_check_password(const struct passwd *pw) FAST_FUNC;
/* Returns a malloced string */
#if !ENABLE_USE_BB_CRYPT
#define pw_encrypt(clear, salt, cleanup) pw_encrypt(clear, salt)
@@ -1465,7 +1482,7 @@ void read_key_ungets(char *buffer, const char *str, unsigned len) FAST_FUNC;
/* It's NOT just ENABLEd or disabled. It's a number: */
# if defined CONFIG_FEATURE_EDITING_HISTORY && CONFIG_FEATURE_EDITING_HISTORY > 0
# define MAX_HISTORY (CONFIG_FEATURE_EDITING_HISTORY + 0)
-unsigned size_from_HISTFILESIZE(const char *hp);
+unsigned size_from_HISTFILESIZE(const char *hp) FAST_FUNC;
# else
# define MAX_HISTORY 0
# endif
@@ -1507,6 +1524,7 @@ line_input_t *new_line_input_t(int flags) FAST_FUNC;
* >0 length of input string, including terminating '\n'
*/
int read_line_input(line_input_t *st, const char *prompt, char *command, int maxsize, int timeout) FAST_FUNC;
+void show_history(const line_input_t *st) FAST_FUNC;
# if ENABLE_FEATURE_EDITING_SAVE_ON_EXIT
void save_history(line_input_t *st);
# endif
@@ -1768,7 +1786,11 @@ extern const char bb_busybox_exec_path[] ALIGN1;
* but I want to save a few bytes here */
extern const char bb_PATH_root_path[] ALIGN1; /* "PATH=/sbin:/usr/sbin:/bin:/usr/bin" */
#define bb_default_root_path (bb_PATH_root_path + sizeof("PATH"))
+#ifdef __BIONIC__
+#define bb_default_path (bb_PATH_root_path + sizeof("PATH=/sbin"))
+#else
#define bb_default_path (bb_PATH_root_path + sizeof("PATH=/sbin:/usr/sbin"))
+#endif
extern const int const_int_0;
extern const int const_int_1;
@@ -1790,6 +1812,11 @@ extern struct globals *const ptr_to_globals;
(*(struct globals**)&ptr_to_globals) = (void*)(x); \
barrier(); \
} while (0)
+#define FREE_PTR_TO_GLOBALS() do { \
+ if (ENABLE_FEATURE_CLEAN_UP) { \
+ free(ptr_to_globals); \
+ } \
+} while (0)
/* You can change LIBBB_DEFAULT_LOGIN_SHELL, but don't use it,
* use bb_default_login_shell and following defines.
@@ -1839,21 +1866,37 @@ extern const char bb_default_login_shell[] ALIGN1;
# define VC_4 "/dev/ttyv3"
# define VC_5 "/dev/ttyv4"
# define VC_FORMAT "/dev/ttyv%d"
-# define LOOP_FORMAT "/dev/loop%d"
-# define LOOP_NAMESIZE (sizeof("/dev/loop") + sizeof(int)*3 + 1)
-# define LOOP_NAME "/dev/loop"
-# define FB_0 "/dev/fb0"
-
-#else //__GNU__
-/*Linux 2.6, normal names */
+#elif defined(__GNU__)
# define CURRENT_VC CURRENT_TTY
-# define VC_1 "/dev/tty0"
-# define VC_2 "/dev/tty1"
-# define VC_3 "/dev/tty2"
-# define VC_4 "/dev/tty3"
-# define VC_5 "/dev/tty4"
+# define VC_1 "/dev/tty1"
+# define VC_2 "/dev/tty2"
+# define VC_3 "/dev/tty3"
+# define VC_4 "/dev/tty4"
+# define VC_5 "/dev/tty5"
+# define VC_FORMAT "/dev/tty%d"
+#elif ENABLE_FEATURE_DEVFS
+/*Linux, obsolete devfs names */
+# define CURRENT_VC "/dev/vc/0"
+# define VC_1 "/dev/vc/1"
+# define VC_2 "/dev/vc/2"
+# define VC_3 "/dev/vc/3"
+# define VC_4 "/dev/vc/4"
+# define VC_5 "/dev/vc/5"
+# define VC_FORMAT "/dev/vc/%d"
+# define LOOP_FORMAT "/dev/loop/%u"
+# define LOOP_NAMESIZE (sizeof("/dev/loop/") + sizeof(int)*3 + 1)
+# define LOOP_NAME "/dev/loop/"
+# define FB_0 "/dev/fb/0"
+#else
+/*Linux, normal names */
+# define CURRENT_VC "/dev/tty0"
+# define VC_1 "/dev/tty1"
+# define VC_2 "/dev/tty2"
+# define VC_3 "/dev/tty3"
+# define VC_4 "/dev/tty4"
+# define VC_5 "/dev/tty5"
# define VC_FORMAT "/dev/tty%d"
-# define LOOP_FORMAT "/dev/loop%d"
+# define LOOP_FORMAT "/dev/loop%u"
# define LOOP_NAMESIZE (sizeof("/dev/loop") + sizeof(int)*3 + 1)
# define LOOP_NAME "/dev/loop"
# define FB_0 "/dev/fb0"
diff --git a/include/liblzo_interface.h b/include/liblzo_interface.h
index 9a84c0b..b7f1b63 100644
--- a/include/liblzo_interface.h
+++ b/include/liblzo_interface.h
@@ -30,7 +30,7 @@
/*
static void die_at(int line)
{
- bb_error_msg_and_die("internal error at %d", line);
+ bb_error_msg_and_die("internal error at %d", line);
}
#define assert(v) if (!(v)) die_at(__LINE__)
*/
diff --git a/include/platform.h b/include/platform.h
index 63f6bd9..b5aa683 100644
--- a/include/platform.h
+++ b/include/platform.h
@@ -214,6 +214,7 @@ typedef int bb__aliased_int FIX_ALIASING;
typedef long bb__aliased_long FIX_ALIASING;
typedef uint16_t bb__aliased_uint16_t FIX_ALIASING;
typedef uint32_t bb__aliased_uint32_t FIX_ALIASING;
+typedef uint64_t bb__aliased_uint64_t FIX_ALIASING;
/* NB: unaligned parameter should be a pointer, aligned one -
* a lvalue. This makes it more likely to not swap them by mistake
@@ -234,7 +235,7 @@ typedef uint32_t bb__aliased_uint32_t FIX_ALIASING;
# define move_from_unaligned32(v, u32p) (memcpy(&(v), (u32p), 4))
# define move_to_unaligned16(u16p, v) do { \
uint16_t __t = (v); \
- memcpy((u16p), &__t, sizeof(uint16_t)); \
+ memcpy((u16p), &__t, 2); \
} while (0)
# define move_to_unaligned32(u32p, v) do { \
uint32_t __t = (v); \
@@ -269,6 +270,12 @@ typedef unsigned smalluint;
#define KERNEL_VERSION(a,b,c) (((a) << 16) + ((b) << 8) + (c))
+#ifdef __UCLIBC__
+# define UCLIBC_VERSION KERNEL_VERSION(__UCLIBC_MAJOR__, __UCLIBC_MINOR__, __UCLIBC_SUBLEVEL__)
+#else
+# define UCLIBC_VERSION 0
+#endif
+
/* ---- Miscellaneous --------------------------------------- */
@@ -311,8 +318,9 @@ typedef unsigned smalluint;
* for a mmu-less system.
*/
#if ENABLE_NOMMU || \
- (defined __UCLIBC__ && __UCLIBC_MAJOR__ >= 0 && __UCLIBC_MINOR__ >= 9 && \
- __UCLIBC_SUBLEVEL__ > 28 && !defined __ARCH_USE_MMU__)
+ (defined __UCLIBC__ && \
+ UCLIBC_VERSION > KERNEL_VERSION(0, 9, 28) && \
+ !defined __ARCH_USE_MMU__)
# define BB_MMU 0
# define USE_FOR_NOMMU(...) __VA_ARGS__
# define USE_FOR_MMU(...)
@@ -345,7 +353,7 @@ typedef unsigned smalluint;
#endif
#if defined(ANDROID) || defined(__ANDROID__)
-# define BB_ADDITIONAL_PATH ":/system/sbin:/system/bin:/system/xbin"
+# define BB_ADDITIONAL_PATH ":/vendor/bin:/system/sbin:/system/bin:/system/xbin"
# define SYS_ioprio_set __NR_ioprio_set
# define SYS_ioprio_get __NR_ioprio_get
#endif
@@ -379,13 +387,8 @@ typedef unsigned smalluint;
#define HAVE_NET_ETHERNET_H 1
#define HAVE_SYS_STATFS_H 1
-#if defined(__UCLIBC_MAJOR__)
-# if __UCLIBC_MAJOR__ == 0 \
- && ( __UCLIBC_MINOR__ < 9 \
- || (__UCLIBC_MINOR__ == 9 && __UCLIBC_SUBLEVEL__ < 32) \
- )
-# undef HAVE_STRVERSCMP
-# endif
+#if defined(__UCLIBC__) && UCLIBC_VERSION < KERNEL_VERSION(0, 9, 32)
+# undef HAVE_STRVERSCMP
#endif
#if defined(__dietlibc__)
@@ -437,7 +440,7 @@ typedef unsigned smalluint;
# undef HAVE_UNLOCKED_LINE_OPS
#endif
-#if defined(__FreeBSD__)
+#if defined(__FreeBSD__) || defined(__APPLE__)
# undef HAVE_STRCHRNUL
#endif
@@ -451,13 +454,13 @@ typedef unsigned smalluint;
#if defined(ANDROID) || defined(__ANDROID__)
# undef HAVE_DPRINTF
-# undef HAVE_FDPRINTF
-# undef HAVE_GETLINE
-# undef HAVE_STPCPY
# undef HAVE_STRCHRNUL
# undef HAVE_STRVERSCMP
# undef HAVE_UNLOCKED_LINE_OPS
# undef HAVE_NET_ETHERNET_H
+# ifndef BIONIC_L
+# undef HAVE_STPCPY
+# endif
#endif
/*
diff --git a/include/xregex.h b/include/xregex.h
index 5e5e6a2..62f438c 100644
--- a/include/xregex.h
+++ b/include/xregex.h
@@ -11,7 +11,19 @@
#ifndef BB_REGEX_H
#define BB_REGEX_H 1
+#if defined(ANDROID) && !defined(RECOVERY_VERSION)
+
+#include <bb_regex.h>
+#define regcomp bb_regcomp
+#define re_compile_pattern bb_re_compile_pattern
+#define re_search bb_re_search
+#define regexec bb_regexec
+#define regfree bb_regfree
+#define regerror bb_regerror
+
+#else
#include <regex.h>
+#endif
PUSH_AND_SET_FUNCTION_VISIBILITY_TO_HIDDEN
diff --git a/init/bootchartd.c b/init/bootchartd.c
index 9fd6233..c7388c9 100644
--- a/init/bootchartd.c
+++ b/init/bootchartd.c
@@ -60,6 +60,12 @@
# endif
#endif
+#if !ENABLE_TAR && !ENABLE_WERROR
+# warning Note: bootchartd requires tar command, but you did not select it.
+#elif !ENABLE_FEATURE_SEAMLESS_GZ && !ENABLE_WERROR
+# warning Note: bootchartd requires tar -z support, but you did not select it.
+#endif
+
#define BC_VERSION_STR "0.8"
/* For debugging, set to 0:
diff --git a/init/init.c b/init/init.c
index b84bdcc..d29328c 100644
--- a/init/init.c
+++ b/init/init.c
@@ -9,11 +9,6 @@
* Licensed under GPLv2 or later, see file LICENSE in this source tree.
*/
-//applet:IF_INIT(APPLET(init, BB_DIR_SBIN, BB_SUID_DROP))
-//applet:IF_FEATURE_INITRD(APPLET_ODDNAME(linuxrc, init, BB_DIR_ROOT, BB_SUID_DROP, linuxrc))
-
-//kbuild:lib-$(CONFIG_INIT) += init.o
-
//config:config INIT
//config: bool "init"
//config: default y
@@ -108,6 +103,11 @@
//config: Note that on Linux, init attempts to detect serial terminal and
//config: sets TERM to "vt102" if one is found.
+//applet:IF_INIT(APPLET(init, BB_DIR_SBIN, BB_SUID_DROP))
+//applet:IF_FEATURE_INITRD(APPLET_ODDNAME(linuxrc, init, BB_DIR_ROOT, BB_SUID_DROP, linuxrc))
+
+//kbuild:lib-$(CONFIG_INIT) += init.o
+
#define DEBUG_SEGV_HANDLER 0
#include "libbb.h"
@@ -140,12 +140,11 @@
* not fully functional init by switching it on! */
#define DEBUG_INIT 0
-#define COMMAND_SIZE 256
#define CONSOLE_NAME_SIZE 32
/* Default sysinit script. */
#ifndef INIT_SCRIPT
-#define INIT_SCRIPT "/etc/init.d/rcS"
+# define INIT_SCRIPT "/etc/init.d/rcS"
#endif
/* Each type of actions can appear many times. They will be
@@ -195,7 +194,7 @@ struct init_action {
pid_t pid;
uint8_t action_type;
char terminal[CONSOLE_NAME_SIZE];
- char command[COMMAND_SIZE];
+ char command[1];
};
static struct init_action *init_action_list = NULL;
@@ -223,8 +222,8 @@ static void message(int where, const char *fmt, ...)
msg[0] = '\r';
va_start(arguments, fmt);
l = 1 + vsnprintf(msg + 1, sizeof(msg) - 2, fmt, arguments);
- if (l > sizeof(msg) - 1)
- l = sizeof(msg) - 1;
+ if (l > sizeof(msg) - 2)
+ l = sizeof(msg) - 2;
va_end(arguments);
#if ENABLE_FEATURE_INIT_SYSLOG
@@ -398,7 +397,7 @@ static void reset_sighandlers_and_unblock_sigs(void)
}
/* Wrapper around exec:
- * Takes string (max COMMAND_SIZE chars).
+ * Takes string.
* If chars like '>' detected, execs '[-]/bin/sh -c "exec ......."'.
* Otherwise splits words on whitespace, deals with leading dash,
* and uses plain exec().
@@ -406,10 +405,15 @@ static void reset_sighandlers_and_unblock_sigs(void)
*/
static void init_exec(const char *command)
{
- char *cmd[COMMAND_SIZE / 2];
- char buf[COMMAND_SIZE + 6]; /* COMMAND_SIZE+strlen("exec ")+1 */
- int dash = (command[0] == '-' /* maybe? && command[1] == '/' */);
-
+ /* +8 allows to write VLA sizes below more efficiently: */
+ unsigned command_size = strlen(command) + 8;
+ /* strlen(command) + strlen("exec ")+1: */
+ char buf[command_size];
+ /* strlen(command) / 2 + 4: */
+ char *cmd[command_size / 2];
+ int dash;
+
+ dash = (command[0] == '-' /* maybe? && command[1] == '/' */);
command += dash;
/* See if any special /bin/sh requiring characters are present */
@@ -626,21 +630,21 @@ static void new_init_action(uint8_t action_type, const char *command, const char
nextp = &a->next;
}
- a = xzalloc(sizeof(*a));
+ a = xzalloc(sizeof(*a) + strlen(command));
/* Append to the end of the list */
append:
*nextp = a;
a->action_type = action_type;
- safe_strncpy(a->command, command, sizeof(a->command));
+ strcpy(a->command, command);
safe_strncpy(a->terminal, cons, sizeof(a->terminal));
- dbg_message(L_LOG | L_CONSOLE, "command='%s' action=%d tty='%s'\n",
+ dbg_message(L_LOG | L_CONSOLE, "command='%s' action=%x tty='%s'\n",
a->command, a->action_type, a->terminal);
}
/* NOTE that if CONFIG_FEATURE_USE_INITTAB is NOT defined,
* then parse_inittab() simply adds in some default
- * actions(i.e., runs INIT_SCRIPT and then starts a pair
+ * actions (i.e., runs INIT_SCRIPT and then starts a pair
* of "askfirst" shells). If CONFIG_FEATURE_USE_INITTAB
* _is_ defined, but /etc/inittab is missing, this
* results in the same set of default behaviors.
@@ -655,23 +659,22 @@ static void parse_inittab(void)
#endif
{
/* No inittab file - set up some default behavior */
- /* Reboot on Ctrl-Alt-Del */
- new_init_action(CTRLALTDEL, "reboot", "");
- /* Umount all filesystems on halt/reboot */
- new_init_action(SHUTDOWN, "umount -a -r", "");
- /* Swapoff on halt/reboot */
- if (ENABLE_SWAPONOFF)
- new_init_action(SHUTDOWN, "swapoff -a", "");
- /* Prepare to restart init when a QUIT is received */
- new_init_action(RESTART, "init", "");
+ /* Sysinit */
+ new_init_action(SYSINIT, INIT_SCRIPT, "");
/* Askfirst shell on tty1-4 */
new_init_action(ASKFIRST, bb_default_login_shell, "");
//TODO: VC_1 instead of ""? "" is console -> ctty problems -> angry users
new_init_action(ASKFIRST, bb_default_login_shell, VC_2);
new_init_action(ASKFIRST, bb_default_login_shell, VC_3);
new_init_action(ASKFIRST, bb_default_login_shell, VC_4);
- /* sysinit */
- new_init_action(SYSINIT, INIT_SCRIPT, "");
+ /* Reboot on Ctrl-Alt-Del */
+ new_init_action(CTRLALTDEL, "reboot", "");
+ /* Umount all filesystems on halt/reboot */
+ new_init_action(SHUTDOWN, "umount -a -r", "");
+ /* Swapoff on halt/reboot */
+ new_init_action(SHUTDOWN, "swapoff -a", "");
+ /* Restart init when a QUIT is received */
+ new_init_action(RESTART, "init", "");
return;
}
@@ -786,7 +789,7 @@ static void run_shutdown_and_kill_processes(void)
* and only one will be remembered and acted upon.
*/
-/* The SIGUSR[12]/SIGTERM handler */
+/* The SIGPWR/SIGUSR[12]/SIGTERM handler */
static void halt_reboot_pwoff(int sig) NORETURN;
static void halt_reboot_pwoff(int sig)
{
@@ -931,10 +934,17 @@ static void reload_inittab(void)
/* Remove stale entries and SYSINIT entries.
* We never rerun SYSINIT entries anyway,
- * removing them too saves a few bytes */
+ * removing them too saves a few bytes
+ */
nextp = &init_action_list;
while ((a = *nextp) != NULL) {
- if ((a->action_type & ~SYSINIT) == 0) {
+ /*
+ * Why pid == 0 check?
+ * Process can be removed from inittab and added *later*.
+ * If we delete its entry but process still runs,
+ * duplicate is spawned when the entry is re-added.
+ */
+ if ((a->action_type & ~SYSINIT) == 0 && a->pid == 0) {
*nextp = a->next;
free(a);
} else {
@@ -1058,10 +1068,13 @@ int init_main(int argc UNUSED_PARAM, char **argv)
message(L_CONSOLE | L_LOG, "init started: %s", bb_banner);
#endif
+#if 0
+/* It's 2013, does anyone really still depend on this? */
+/* If you do, consider adding swapon to sysinot actions then! */
/* struct sysinfo is linux-specific */
-#ifdef __linux__
+# ifdef __linux__
/* Make sure there is enough memory to do something useful. */
- if (ENABLE_SWAPONOFF) {
+ /*if (ENABLE_SWAPONOFF) - WRONG: we may have non-bbox swapon*/ {
struct sysinfo info;
if (sysinfo(&info) == 0
@@ -1075,6 +1088,7 @@ int init_main(int argc UNUSED_PARAM, char **argv)
run_actions(SYSINIT); /* wait and removing */
}
}
+# endif
#endif
/* Check if we are supposed to be in single user mode */
@@ -1089,8 +1103,8 @@ int init_main(int argc UNUSED_PARAM, char **argv)
/* NOTE that if CONFIG_FEATURE_USE_INITTAB is NOT defined,
* then parse_inittab() simply adds in some default
- * actions(i.e., INIT_SCRIPT and a pair
- * of "askfirst" shells */
+ * actions (i.e., INIT_SCRIPT and a pair
+ * of "askfirst" shells) */
parse_inittab();
}
@@ -1114,13 +1128,14 @@ int init_main(int argc UNUSED_PARAM, char **argv)
strncpy(argv[0], "init", strlen(argv[0]));
/* Wipe argv[1]-argv[N] so they don't clutter the ps listing */
while (*++argv)
- memset(*argv, 0, strlen(*argv));
+ nuke_str(*argv);
/* Set up signal handlers */
if (!DEBUG_INIT) {
struct sigaction sa;
bb_signals(0
+ + (1 << SIGPWR) /* halt */
+ (1 << SIGUSR1) /* halt */
+ (1 << SIGTERM) /* reboot */
+ (1 << SIGUSR2) /* poweroff */
@@ -1216,7 +1231,14 @@ int init_main(int argc UNUSED_PARAM, char **argv)
//usage:#define init_trivial_usage
//usage: ""
//usage:#define init_full_usage "\n\n"
-//usage: "Init is the parent of all processes"
+//usage: "Init is the first process started during boot. It never exits."
+//usage: IF_FEATURE_USE_INITTAB(
+//usage: "\n""It (re)spawns children according to /etc/inittab."
+//usage: )
+//usage: IF_NOT_FEATURE_USE_INITTAB(
+//usage: "\n""This version of init doesn't use /etc/inittab,"
+//usage: "\n""has fixed set of processed to run."
+//usage: )
//usage:
//usage:#define init_notes_usage
//usage: "This version of init is designed to be run only by the kernel.\n"
@@ -1234,9 +1256,6 @@ int init_main(int argc UNUSED_PARAM, char **argv)
//usage: " ::shutdown:/sbin/swapoff -a\n"
//usage: " ::shutdown:/bin/umount -a -r\n"
//usage: " ::restart:/sbin/init\n"
-//usage: "\n"
-//usage: "if it detects that /dev/console is _not_ a serial console, it will also run:\n"
-//usage: "\n"
//usage: " tty2::askfirst:/bin/sh\n"
//usage: " tty3::askfirst:/bin/sh\n"
//usage: " tty4::askfirst:/bin/sh\n"
@@ -1252,11 +1271,7 @@ int init_main(int argc UNUSED_PARAM, char **argv)
//usage: " the specified process to run on. The contents of this field are\n"
//usage: " appended to \"/dev/\" and used as-is. There is no need for this field to\n"
//usage: " be unique, although if it isn't you may have strange results. If this\n"
-//usage: " field is left blank, the controlling tty is set to the console. Also\n"
-//usage: " note that if BusyBox detects that a serial console is in use, then only\n"
-//usage: " entries whose controlling tty is either the serial console or /dev/null\n"
-//usage: " will be run. BusyBox init does nothing with utmp. We don't need no\n"
-//usage: " stinkin' utmp.\n"
+//usage: " field is left blank, then the init's stdin/out will be used.\n"
//usage: "\n"
//usage: " <runlevels>:\n"
//usage: "\n"
diff --git a/libbb/Kbuild.src b/libbb/Kbuild.src
index 61eec26..a6468f1 100644
--- a/libbb/Kbuild.src
+++ b/libbb/Kbuild.src
@@ -27,8 +27,6 @@ lib-y += concat_subpath_file.o
lib-y += copy_file.o
lib-y += copyfd.o
lib-y += crc32.o
-lib-y += create_icmp6_socket.o
-lib-y += create_icmp_socket.o
lib-y += default_error_retval.o
lib-y += device_open.o
lib-y += dump.o
@@ -146,7 +144,7 @@ lib-$(CONFIG_DELUSER) += update_passwd.o
lib-$(CONFIG_PASSWD) += pw_encrypt.o update_passwd.o obscure.o
lib-$(CONFIG_CHPASSWD) += pw_encrypt.o update_passwd.o
lib-$(CONFIG_CRYPTPW) += pw_encrypt.o
-lib-$(CONFIG_SULOGIN) += pw_encrypt.o
+lib-$(CONFIG_SULOGIN) += pw_encrypt.o correct_password.o
lib-$(CONFIG_VLOCK) += pw_encrypt.o correct_password.o
lib-$(CONFIG_SU) += pw_encrypt.o correct_password.o
lib-$(CONFIG_LOGIN) += pw_encrypt.o correct_password.o
diff --git a/libbb/appletlib.c b/libbb/appletlib.c
index fc1847a..5e4f4a9 100644
--- a/libbb/appletlib.c
+++ b/libbb/appletlib.c
@@ -29,7 +29,7 @@
#include "busybox.h"
#if !(defined(__FreeBSD__) || defined(__OpenBSD__) || defined(__NetBSD__) \
- || defined(__APPLE__) \
+ || defined(__APPLE__) \
)
# include <malloc.h> /* for mallopt */
#endif
@@ -750,7 +750,7 @@ void FAST_FUNC run_applet_no_and_exit(int applet_no, char **argv)
//TODO: just compare applet_no with APPLET_NO_test
if (!ENABLE_TEST || strcmp(applet_name, "test") != 0) {
/* If you want "foo --help" to return 0: */
- /*xfunc_error_retval = 0;*/
+ xfunc_error_retval = 0;
bb_show_usage();
}
}
diff --git a/libbb/bb_askpass.c b/libbb/bb_askpass.c
index fe2b506..77c1bcd 100644
--- a/libbb/bb_askpass.c
+++ b/libbb/bb_askpass.c
@@ -65,7 +65,9 @@ char* FAST_FUNC bb_ask(const int fd, int timeout, const char *prompt)
i = 0;
while (1) {
int r = read(fd, &ret[i], 1);
- if (r < 0) {
+ if ((i == 0 && r == 0) /* EOF (^D) with no password */
+ || r < 0
+ ) {
/* read is interrupted by timeout or ^C */
ret = NULL;
break;
diff --git a/libbb/bb_pwd.c b/libbb/bb_pwd.c
index 4829b72..d5e651c 100644
--- a/libbb/bb_pwd.c
+++ b/libbb/bb_pwd.c
@@ -15,9 +15,31 @@
* pointers to static data (getpwuid)
*/
-struct passwd* FAST_FUNC xgetpwnam(const char *name)
+struct passwd* FAST_FUNC safegetpwnam(const char *name)
{
struct passwd *pw = getpwnam(name);
+#ifdef __BIONIC__
+ if (pw && !pw->pw_passwd) {
+ pw->pw_passwd = "";
+ }
+#endif
+ return pw;
+}
+
+struct passwd* FAST_FUNC safegetpwuid(uid_t uid)
+{
+ struct passwd *pw = getpwuid(uid);
+#ifdef __BIONIC__
+ if (pw && !pw->pw_passwd) {
+ pw->pw_passwd = "";
+ }
+#endif
+ return pw;
+}
+
+struct passwd* FAST_FUNC xgetpwnam(const char *name)
+{
+ struct passwd *pw = safegetpwnam(name);
if (!pw)
bb_error_msg_and_die("unknown user %s", name);
return pw;
@@ -31,10 +53,9 @@ struct group* FAST_FUNC xgetgrnam(const char *name)
return gr;
}
-
struct passwd* FAST_FUNC xgetpwuid(uid_t uid)
{
- struct passwd *pw = getpwuid(uid);
+ struct passwd *pw = safegetpwuid(uid);
if (!pw)
bb_error_msg_and_die("unknown uid %u", (unsigned)uid);
return pw;
@@ -110,3 +131,51 @@ unsigned long FAST_FUNC get_ug_id(const char *s,
return xname2id(s);
return r;
}
+
+/* Experimental "mallocing" API.
+ * The goal is nice: "we want to support a case when "guests" group is very large"
+ * but the code is butt-ugly.
+ */
+#if 0
+static char *find_latest(char last, char *cp)
+{
+ if (!cp)
+ return last;
+ cp += strlen(cp) + 1;
+ if (last < cp)
+ last = cp;
+ return last;
+}
+
+struct group* FAST_FUNC xmalloc_getgrnam(const char *name)
+{
+ struct {
+ struct group gr;
+ // May still be not enough!
+ char buf[64*1024 - sizeof(struct group) - 16];
+ } *s;
+ struct group *grp;
+ int r;
+ char *last;
+ char **gr_mem;
+
+ s = xmalloc(sizeof(*s));
+ r = getgrnam_r(name, &s->gr, s->buf, sizeof(s->buf), &grp);
+ if (!grp) {
+ free(s);
+ return grp;
+ }
+ last = find_latest(s->buf, grp->gr_name);
+ last = find_latest(last, grp->gr_passwd);
+ gr_mem = grp->gr_mem;
+ while (*gr_mem)
+ last = find_latest(last, *gr_mem++);
+ gr_mem++; /* points past NULL */
+ if (last < (char*)gr_mem)
+ last = (char*)gr_mem;
+//FIXME: what if we get not only truncated, but also moved here?
+// grp->gr_name pointer and friends are invalid now!!!
+ s = xrealloc(s, last - (char*)s);
+ return grp;
+}
+#endif
diff --git a/libbb/correct_password.c b/libbb/correct_password.c
index 7cabd33..acadf39 100644
--- a/libbb/correct_password.c
+++ b/libbb/correct_password.c
@@ -31,12 +31,15 @@
#include "libbb.h"
/* Ask the user for a password.
+ * Return 1 without asking if PW has an empty password.
+ * Return -1 on EOF, error while reading input, or timeout.
* Return 1 if the user gives the correct password for entry PW,
- * 0 if not. Return 1 without asking if PW has an empty password.
+ * 0 if not.
*
- * NULL pw means "just fake it for login with bad username" */
-
-int FAST_FUNC correct_password(const struct passwd *pw)
+ * NULL pw means "just fake it for login with bad username"
+ */
+int FAST_FUNC ask_and_check_password_extended(const struct passwd *pw,
+ int timeout, const char *prompt)
{
char *unencrypted, *encrypted;
const char *correct;
@@ -65,13 +68,19 @@ int FAST_FUNC correct_password(const struct passwd *pw)
return 1;
fake_it:
- unencrypted = bb_ask_stdin("Password: ");
+ unencrypted = bb_ask(STDIN_FILENO, timeout, prompt);
if (!unencrypted) {
- return 0;
+ /* EOF (such as ^D) or error (such as ^C) or timeout */
+ return -1;
}
encrypted = pw_encrypt(unencrypted, correct, 1);
r = (strcmp(encrypted, correct) == 0);
free(encrypted);
- memset(unencrypted, 0, strlen(unencrypted));
+ nuke_str(unencrypted);
return r;
}
+
+int FAST_FUNC ask_and_check_password(const struct passwd *pw)
+{
+ return ask_and_check_password_extended(pw, 0, "Password: ");
+}
diff --git a/libbb/create_icmp6_socket.c b/libbb/create_icmp6_socket.c
deleted file mode 100644
index bdee7a0..0000000
--- a/libbb/create_icmp6_socket.c
+++ b/dev/null
@@ -1,38 +0,0 @@
-/* vi: set sw=4 ts=4: */
-/*
- * Utility routines.
- *
- * create raw socket for icmp (IPv6 version) protocol
- * and drop root privileges if running setuid
- *
- * Licensed under GPLv2, see file LICENSE in this source tree.
- */
-
-#include "libbb.h"
-
-#if ENABLE_FEATURE_IPV6
-int FAST_FUNC create_icmp6_socket(void)
-{
- int sock;
-#if 0
- struct protoent *proto;
- proto = getprotobyname("ipv6-icmp");
- /* if getprotobyname failed, just silently force
- * proto->p_proto to have the correct value for "ipv6-icmp" */
- sock = socket(AF_INET6, SOCK_RAW,
- (proto ? proto->p_proto : IPPROTO_ICMPV6));
-#else
- sock = socket(AF_INET6, SOCK_RAW, IPPROTO_ICMPV6);
-#endif
- if (sock < 0) {
- if (errno == EPERM)
- bb_error_msg_and_die("%s", bb_msg_perm_denied_are_you_root);
- bb_perror_msg_and_die("%s", bb_msg_can_not_create_raw_socket);
- }
-
- /* drop root privs if running setuid */
- xsetuid(getuid());
-
- return sock;
-}
-#endif
diff --git a/libbb/create_icmp_socket.c b/libbb/create_icmp_socket.c
deleted file mode 100644
index 65eea3b..0000000
--- a/libbb/create_icmp_socket.c
+++ b/dev/null
@@ -1,36 +0,0 @@
-/* vi: set sw=4 ts=4: */
-/*
- * Utility routines.
- *
- * create raw socket for icmp protocol
- * and drop root privileges if running setuid
- *
- * Licensed under GPLv2, see file LICENSE in this source tree.
- */
-
-#include "libbb.h"
-
-int FAST_FUNC create_icmp_socket(void)
-{
- int sock;
-#if 0
- struct protoent *proto;
- proto = getprotobyname("icmp");
- /* if getprotobyname failed, just silently force
- * proto->p_proto to have the correct value for "icmp" */
- sock = socket(AF_INET, SOCK_RAW,
- (proto ? proto->p_proto : 1)); /* 1 == ICMP */
-#else
- sock = socket(AF_INET, SOCK_RAW, 1); /* 1 == ICMP */
-#endif
- if (sock < 0) {
- if (errno == EPERM)
- bb_error_msg_and_die("%s", bb_msg_perm_denied_are_you_root);
- bb_perror_msg_and_die("%s", bb_msg_can_not_create_raw_socket);
- }
-
- /* drop root privs if running setuid */
- xsetuid(getuid());
-
- return sock;
-}
diff --git a/libbb/dump.c b/libbb/dump.c
index 91efe41..b465c5d 100644
--- a/libbb/dump.c
+++ b/libbb/dump.c
@@ -333,7 +333,7 @@ static void do_skip(priv_dumper_t *dumper, const char *fname, int statok)
return;
}
}
- if (fseek(stdin, dumper->pub.dump_skip, SEEK_SET)) {
+ if (fseeko(stdin, dumper->pub.dump_skip, SEEK_SET)) {
bb_simple_perror_msg_and_die(fname);
}
dumper->address += dumper->pub.dump_skip;
diff --git a/libbb/endofname.c b/libbb/endofname.c
new file mode 100644
index 0000000..305f093
--- a/dev/null
+++ b/libbb/endofname.c
@@ -0,0 +1,26 @@
+/*
+ * Utility routines.
+ *
+ * Copyright (C) 2013 Denys Vlasenko
+ *
+ * Licensed under GPLv2, see file LICENSE in this source tree.
+ */
+
+//kbuild:lib-y += endofname.o
+
+#include "libbb.h"
+
+#define is_name(c) ((c) == '_' || isalpha((unsigned char)(c)))
+#define is_in_name(c) ((c) == '_' || isalnum((unsigned char)(c)))
+
+const char* FAST_FUNC
+endofname(const char *name)
+{
+ if (!is_name(*name))
+ return name;
+ while (*++name) {
+ if (!is_in_name(*name))
+ break;
+ }
+ return name;
+}
diff --git a/libbb/fclose_nonstdin.c b/libbb/fclose_nonstdin.c
index 5ce9d5b..1b14413 100644
--- a/libbb/fclose_nonstdin.c
+++ b/libbb/fclose_nonstdin.c
@@ -18,7 +18,8 @@ int FAST_FUNC fclose_if_not_stdin(FILE *f)
{
/* Some more paranoid applets want ferror() check too */
int r = ferror(f); /* NB: does NOT set errno! */
- if (r) errno = EIO; /* so we'll help it */
+ if (r)
+ errno = EIO; /* so we'll help it */
if (f != stdin)
return (r | fclose(f)); /* fclose does set errno on error */
return r;
diff --git a/libbb/hash_md5_sha.c b/libbb/hash_md5_sha.c
index b4d955e..3f743ac 100644
--- a/libbb/hash_md5_sha.c
+++ b/libbb/hash_md5_sha.c
@@ -84,7 +84,7 @@ static void FAST_FUNC common64_end(md5_ctx_t *ctx, int swap_needed)
if (swap_needed)
t = bb_bswap_64(t);
/* wbuffer is suitably aligned for this */
- *(uint64_t *) (&ctx->wbuffer[64 - 8]) = t;
+ *(bb__aliased_uint64_t *) (&ctx->wbuffer[64 - 8]) = t;
}
ctx->process_block(ctx);
if (remaining >= 8)
@@ -883,10 +883,10 @@ void FAST_FUNC sha512_end(sha512_ctx_t *ctx, void *resbuf)
uint64_t t;
t = ctx->total64[0] << 3;
t = SWAP_BE64(t);
- *(uint64_t *) (&ctx->wbuffer[128 - 8]) = t;
+ *(bb__aliased_uint64_t *) (&ctx->wbuffer[128 - 8]) = t;
t = (ctx->total64[1] << 3) | (ctx->total64[0] >> 61);
t = SWAP_BE64(t);
- *(uint64_t *) (&ctx->wbuffer[128 - 16]) = t;
+ *(bb__aliased_uint64_t *) (&ctx->wbuffer[128 - 16]) = t;
}
sha512_process_block128(ctx);
if (remaining >= 16)
diff --git a/libbb/human_readable.c b/libbb/human_readable.c
index 8b22b0c..0b2eb77 100644
--- a/libbb/human_readable.c
+++ b/libbb/human_readable.c
@@ -94,7 +94,7 @@ const char* FAST_FUNC make_human_readable_str(unsigned long long val,
/* Convert unsigned long long value into compact 5-char representation.
* String is not terminated (buf[5] is untouched) */
-void FAST_FUNC smart_ulltoa5(unsigned long long ul, char buf[5], const char *scale)
+char* FAST_FUNC smart_ulltoa5(unsigned long long ul, char buf[5], const char *scale)
{
const char *fmt;
char c;
@@ -145,12 +145,13 @@ void FAST_FUNC smart_ulltoa5(unsigned long long ul, char buf[5], const char *sca
buf[3] = "0123456789"[v];
buf[4] = scale[idx]; /* typically scale = " kmgt..." */
}
+ return buf + 5;
}
/* Convert unsigned long long value into compact 4-char
* representation. Examples: "1234", "1.2k", " 27M", "123T"
* String is not terminated (buf[4] is untouched) */
-void FAST_FUNC smart_ulltoa4(unsigned long long ul, char buf[4], const char *scale)
+char* FAST_FUNC smart_ulltoa4(unsigned long long ul, char buf[4], const char *scale)
{
const char *fmt;
char c;
@@ -194,4 +195,5 @@ void FAST_FUNC smart_ulltoa4(unsigned long long ul, char buf[4], const char *sca
buf[2] = "0123456789"[v];
buf[3] = scale[idx]; /* typically scale = " kmgt..." */
}
+ return buf + 4;
}
diff --git a/libbb/in_ether.c b/libbb/in_ether.c
new file mode 100644
index 0000000..1de383b
--- a/dev/null
+++ b/libbb/in_ether.c
@@ -0,0 +1,59 @@
+/* vi: set sw=4 ts=4: */
+/*
+ * Utility routines.
+ */
+
+//kbuild:lib-$(CONFIG_ARP) += in_ether.o
+//kbuild:lib-$(CONFIG_IFCONFIG) += in_ether.o
+//kbuild:lib-$(CONFIG_IFENSLAVE) += in_ether.o
+
+#include "libbb.h"
+#include <net/if_arp.h>
+#include <net/ethernet.h>
+
+/* Convert Ethernet address from "XX[:]XX[:]XX[:]XX[:]XX[:]XX" to sockaddr.
+ * Return nonzero on error.
+ */
+int FAST_FUNC in_ether(const char *bufp, struct sockaddr *sap)
+{
+ char *ptr;
+ int i, j;
+ unsigned char val;
+ unsigned char c;
+
+ sap->sa_family = ARPHRD_ETHER;
+ ptr = (char *) sap->sa_data;
+
+ i = ETH_ALEN;
+ goto first;
+ do {
+ /* We might get a semicolon here */
+ if (*bufp == ':')
+ bufp++;
+ first:
+ j = val = 0;
+ do {
+ c = *bufp;
+ if (((unsigned char)(c - '0')) <= 9) {
+ c -= '0';
+ } else if ((unsigned char)((c|0x20) - 'a') <= 5) {
+ c = (unsigned char)((c|0x20) - 'a') + 10;
+ } else {
+ if (j && (c == ':' || c == '\0'))
+ /* One-digit byte: __:X:__ */
+ break;
+ return -1;
+ }
+ ++bufp;
+ val <<= 4;
+ val += c;
+ j ^= 1;
+ } while (j);
+
+ *ptr++ = val;
+
+ } while (--i);
+
+ /* Error if we aren't at end of string */
+ return *bufp;
+}
diff --git a/libbb/inet_common.c b/libbb/inet_common.c
index 0f4fca1..b3e0802 100644
--- a/libbb/inet_common.c
+++ b/libbb/inet_common.c
@@ -175,8 +175,7 @@ int FAST_FUNC INET6_resolve(const char *name, struct sockaddr_in6 *sin6)
return -1;
}
memcpy(sin6, ai->ai_addr, sizeof(*sin6));
- if (ai)
- freeaddrinfo(ai);
+ freeaddrinfo(ai);
return 0;
}
diff --git a/libbb/inode_hash.c b/libbb/inode_hash.c
index 715535e..377ecbc 100644
--- a/libbb/inode_hash.c
+++ b/libbb/inode_hash.c
@@ -71,7 +71,7 @@ void FAST_FUNC add_to_ino_dev_hashtable(const struct stat *statbuf, const char *
/* Clear statbuf hash table */
void FAST_FUNC reset_ino_dev_hashtable(void)
{
- int i;
+ unsigned i;
ino_dev_hashtable_bucket_t *bucket;
for (i = 0; ino_dev_hashtable && i < HASH_SIZE; i++) {
diff --git a/libbb/lineedit.c b/libbb/lineedit.c
index 0da625f..f897e96 100644
--- a/libbb/lineedit.c
+++ b/libbb/lineedit.c
@@ -38,6 +38,14 @@
* and the \] escape to signal the end of such a sequence. Example:
*
* PS1='\[\033[01;32m\]\u@\h\[\033[01;34m\] \w \$\[\033[00m\] '
+ *
+ * Unicode in PS1 is not fully supported: prompt length calulation is wrong,
+ * resulting in line wrap problems with long (multi-line) input.
+ *
+ * Multi-line PS1 (e.g. PS1="\n[\w]\n$ ") has problems with history
+ * browsing: up/down arrows result in scrolling.
+ * It stems from simplistic "cmdedit_y = cmdedit_prmt_len / cmdedit_termw"
+ * calculation of how many lines the prompt takes.
*/
#include "libbb.h"
#include "unicode.h"
@@ -133,9 +141,6 @@ struct lineedit_statics {
CHAR_T *command_ps;
const char *cmdedit_prompt;
-#if ENABLE_FEATURE_EDITING_FANCY_PROMPT
- int num_ok_lines; /* = 1; */
-#endif
#if ENABLE_USERNAME_OR_HOMEDIR
char *user_buf;
@@ -172,7 +177,6 @@ extern struct lineedit_statics *const lineedit_ptr_to_statics;
#define command_len (S.command_len )
#define command_ps (S.command_ps )
#define cmdedit_prompt (S.cmdedit_prompt )
-#define num_ok_lines (S.num_ok_lines )
#define user_buf (S.user_buf )
#define home_pwd_buf (S.home_pwd_buf )
#define matches (S.matches )
@@ -185,8 +189,8 @@ extern struct lineedit_statics *const lineedit_ptr_to_statics;
(*(struct lineedit_statics**)&lineedit_ptr_to_statics) = xzalloc(sizeof(S)); \
barrier(); \
cmdedit_termw = 80; \
- IF_FEATURE_EDITING_FANCY_PROMPT(num_ok_lines = 1;) \
IF_USERNAME_OR_HOMEDIR(home_pwd_buf = (char*)null_str;) \
+ IF_FEATURE_EDITING_VI(delptr = delbuf;) \
} while (0)
static void deinit_S(void)
@@ -1251,14 +1255,16 @@ line_input_t* FAST_FUNC new_line_input_t(int flags)
{
line_input_t *n = xzalloc(sizeof(*n));
n->flags = flags;
+#if MAX_HISTORY > 0
n->max_history = MAX_HISTORY;
+#endif
return n;
}
#if MAX_HISTORY > 0
-unsigned size_from_HISTFILESIZE(const char *hp)
+unsigned FAST_FUNC size_from_HISTFILESIZE(const char *hp)
{
int size = MAX_HISTORY;
if (hp) {
@@ -1313,6 +1319,17 @@ static int get_next_history(void)
return 0;
}
+/* Lists command history. Used by shell 'history' builtins */
+void FAST_FUNC show_history(const line_input_t *st)
+{
+ unsigned i;
+
+ if (!st)
+ return;
+ for (i = 0; i < st->cnt_history; i++)
+ printf("%4d %s\n", i, st->history[i]);
+}
+
# if ENABLE_FEATURE_EDITING_SAVEHISTORY
/* We try to ensure that concurrent additions to the history
* do not overwrite each other.
@@ -1532,7 +1549,6 @@ static void remember_in_history(char *str)
# if ENABLE_FEATURE_EDITING_SAVEHISTORY && !ENABLE_FEATURE_EDITING_SAVE_ON_EXIT
save_history(str);
# endif
- IF_FEATURE_EDITING_FANCY_PROMPT(num_ok_lines++;)
}
#else /* MAX_HISTORY == 0 */
@@ -1754,43 +1770,84 @@ static void ask_terminal(void)
#define ask_terminal() ((void)0)
#endif
+/* Called just once at read_line_input() init time */
#if !ENABLE_FEATURE_EDITING_FANCY_PROMPT
static void parse_and_put_prompt(const char *prmt_ptr)
{
+ const char *p;
cmdedit_prompt = prmt_ptr;
- cmdedit_prmt_len = strlen(prmt_ptr);
+ p = strrchr(prmt_ptr, '\n');
+ cmdedit_prmt_len = unicode_strwidth(p ? p+1 : prmt_ptr);
put_prompt();
}
#else
static void parse_and_put_prompt(const char *prmt_ptr)
{
- int prmt_len = 0;
- size_t cur_prmt_len = 0;
- char flg_not_length = '[';
+ int prmt_size = 0;
char *prmt_mem_ptr = xzalloc(1);
- char *cwd_buf = xrealloc_getcwd_or_warn(NULL);
+# if ENABLE_USERNAME_OR_HOMEDIR
+ char *cwd_buf = NULL;
+# endif
+ char flg_not_length = '[';
char cbuf[2];
- char c;
- char *pbuf;
-
- cmdedit_prmt_len = 0;
- if (!cwd_buf) {
- cwd_buf = (char *)bb_msg_unknown;
- }
+ /*cmdedit_prmt_len = 0; - already is */
cbuf[1] = '\0'; /* never changes */
while (*prmt_ptr) {
+ char timebuf[sizeof("HH:MM:SS")];
char *free_me = NULL;
+ char *pbuf;
+ char c;
pbuf = cbuf;
c = *prmt_ptr++;
if (c == '\\') {
- const char *cp = prmt_ptr;
+ const char *cp;
int l;
-
- c = bb_process_escape_sequence(&prmt_ptr);
+/*
+ * Supported via bb_process_escape_sequence:
+ * \a ASCII bell character (07)
+ * \e ASCII escape character (033)
+ * \n newline
+ * \r carriage return
+ * \\ backslash
+ * \nnn char with octal code nnn
+ * Supported:
+ * \$ if the effective UID is 0, a #, otherwise a $
+ * \w current working directory, with $HOME abbreviated with a tilde
+ * Note: we do not support $PROMPT_DIRTRIM=n feature
+ * \W basename of the current working directory, with $HOME abbreviated with a tilde
+ * \h hostname up to the first '.'
+ * \H hostname
+ * \u username
+ * \[ begin a sequence of non-printing characters
+ * \] end a sequence of non-printing characters
+ * \T current time in 12-hour HH:MM:SS format
+ * \@ current time in 12-hour am/pm format
+ * \A current time in 24-hour HH:MM format
+ * \t current time in 24-hour HH:MM:SS format
+ * (all of the above work as \A)
+ * Not supported:
+ * \! history number of this command
+ * \# command number of this command
+ * \j number of jobs currently managed by the shell
+ * \l basename of the shell's terminal device name
+ * \s name of the shell, the basename of $0 (the portion following the final slash)
+ * \V release of bash, version + patch level (e.g., 2.00.0)
+ * \d date in "Weekday Month Date" format (e.g., "Tue May 26")
+ * \D{format}
+ * format is passed to strftime(3).
+ * An empty format results in a locale-specific time representation.
+ * The braces are required.
+ * Mishandled by bb_process_escape_sequence:
+ * \v version of bash (e.g., 2.00)
+ */
+ cp = prmt_ptr;
+ c = *cp;
+ if (c != 't') /* don't treat \t as tab */
+ c = bb_process_escape_sequence(&prmt_ptr);
if (prmt_ptr == cp) {
if (*cp == '\0')
break;
@@ -1802,39 +1859,54 @@ static void parse_and_put_prompt(const char *prmt_ptr)
pbuf = user_buf ? user_buf : (char*)"";
break;
# endif
+ case 'H':
case 'h':
pbuf = free_me = safe_gethostname();
- *strchrnul(pbuf, '.') = '\0';
+ if (c == 'h')
+ strchrnul(pbuf, '.')[0] = '\0';
break;
case '$':
c = (geteuid() == 0 ? '#' : '$');
break;
+ case 'T': /* 12-hour HH:MM:SS format */
+ case '@': /* 12-hour am/pm format */
+ case 'A': /* 24-hour HH:MM format */
+ case 't': /* 24-hour HH:MM:SS format */
+ /* We show all of them as 24-hour HH:MM */
+ strftime_HHMMSS(timebuf, sizeof(timebuf), NULL)[-3] = '\0';
+ pbuf = timebuf;
+ break;
# if ENABLE_USERNAME_OR_HOMEDIR
- case 'w':
- /* /home/user[/something] -> ~[/something] */
- pbuf = cwd_buf;
- l = strlen(home_pwd_buf);
- if (l != 0
- && strncmp(home_pwd_buf, cwd_buf, l) == 0
- && (cwd_buf[l]=='/' || cwd_buf[l]=='\0')
- && strlen(cwd_buf + l) < PATH_MAX
- ) {
- pbuf = free_me = xasprintf("~%s", cwd_buf + l);
+ case 'w': /* current dir */
+ case 'W': /* basename of cur dir */
+ if (!cwd_buf) {
+ cwd_buf = xrealloc_getcwd_or_warn(NULL);
+ if (!cwd_buf)
+ cwd_buf = (char *)bb_msg_unknown;
+ else {
+ /* /home/user[/something] -> ~[/something] */
+ l = strlen(home_pwd_buf);
+ if (l != 0
+ && strncmp(home_pwd_buf, cwd_buf, l) == 0
+ && (cwd_buf[l] == '/' || cwd_buf[l] == '\0')
+ ) {
+ cwd_buf[0] = '~';
+ overlapping_strcpy(cwd_buf + 1, cwd_buf + l);
+ }
+ }
}
- break;
-# endif
- case 'W':
pbuf = cwd_buf;
+ if (c == 'w')
+ break;
cp = strrchr(pbuf, '/');
- if (cp != NULL && cp != pbuf)
- pbuf += (cp-pbuf) + 1;
- break;
- case '!':
- pbuf = free_me = xasprintf("%d", num_ok_lines);
- break;
- case 'e': case 'E': /* \e \E = \033 */
- c = '\033';
+ if (cp)
+ pbuf = (char*)cp + 1;
break;
+# endif
+// bb_process_escape_sequence does this now:
+// case 'e': case 'E': /* \e \E = \033 */
+// c = '\033';
+// break;
case 'x': case 'X': {
char buf2[4];
for (l = 0; l < 3;) {
@@ -1856,7 +1928,8 @@ static void parse_and_put_prompt(const char *prmt_ptr)
}
case '[': case ']':
if (c == flg_not_length) {
- flg_not_length = (flg_not_length == '[' ? ']' : '[');
+ /* Toggle '['/']' hex 5b/5d */
+ flg_not_length ^= 6;
continue;
}
break;
@@ -1864,16 +1937,29 @@ static void parse_and_put_prompt(const char *prmt_ptr)
} /* if */
} /* if */
cbuf[0] = c;
- cur_prmt_len = strlen(pbuf);
- prmt_len += cur_prmt_len;
- if (flg_not_length != ']')
- cmdedit_prmt_len += cur_prmt_len;
- prmt_mem_ptr = strcat(xrealloc(prmt_mem_ptr, prmt_len+1), pbuf);
+ {
+ int n = strlen(pbuf);
+ prmt_size += n;
+ if (c == '\n')
+ cmdedit_prmt_len = 0;
+ else if (flg_not_length != ']') {
+#if 0 /*ENABLE_UNICODE_SUPPORT*/
+/* Won't work, pbuf is one BYTE string here instead of an one Unicode char string. */
+/* FIXME */
+ cmdedit_prmt_len += unicode_strwidth(pbuf);
+#else
+ cmdedit_prmt_len += n;
+#endif
+ }
+ }
+ prmt_mem_ptr = strcat(xrealloc(prmt_mem_ptr, prmt_size+1), pbuf);
free(free_me);
} /* while */
+# if ENABLE_USERNAME_OR_HOMEDIR
if (cwd_buf != (char *)bb_msg_unknown)
free(cwd_buf);
+# endif
cmdedit_prompt = prmt_mem_ptr;
put_prompt();
}
@@ -1935,7 +2021,15 @@ static int lineedit_read_key(char *read_key_buffer, int timeout)
S.sent_ESC_br6n = 0;
if (cursor == 0) { /* otherwise it may be bogus */
int col = ((ic >> 32) & 0x7fff) - 1;
- if (col > (int) cmdedit_prmt_len) {
+ /*
+ * Is col > cmdedit_prmt_len?
+ * If yes (terminal says cursor is farther to the right
+ * of where we think it should be),
+ * the prompt wasn't printed starting at col 1,
+ * there was additional text before it.
+ */
+ if ((int)(col - cmdedit_prmt_len) > 0) {
+ /* Fix our understanding of current x position */
cmdedit_x += (col - cmdedit_prmt_len);
while (cmdedit_x >= cmdedit_termw) {
cmdedit_x -= cmdedit_termw;
@@ -2026,6 +2120,7 @@ static int32_t reverse_i_search(void)
char read_key_buffer[KEYCODE_BUFFER_SIZE];
const char *matched_history_line;
const char *saved_prompt;
+ unsigned saved_prmt_len;
int32_t ic;
matched_history_line = NULL;
@@ -2034,6 +2129,7 @@ static int32_t reverse_i_search(void)
/* Save and replace the prompt */
saved_prompt = cmdedit_prompt;
+ saved_prmt_len = cmdedit_prmt_len;
goto set_prompt;
while (1) {
@@ -2109,7 +2205,7 @@ static int32_t reverse_i_search(void)
free((char*)cmdedit_prompt);
set_prompt:
cmdedit_prompt = xasprintf("(reverse-i-search)'%s': ", match_buf);
- cmdedit_prmt_len = strlen(cmdedit_prompt);
+ cmdedit_prmt_len = unicode_strwidth(cmdedit_prompt);
goto do_redraw;
}
}
@@ -2131,7 +2227,7 @@ static int32_t reverse_i_search(void)
free((char*)cmdedit_prompt);
cmdedit_prompt = saved_prompt;
- cmdedit_prmt_len = strlen(cmdedit_prompt);
+ cmdedit_prmt_len = saved_prmt_len;
redraw(cmdedit_y, command_len - cursor);
return ic;
@@ -2699,8 +2795,9 @@ int FAST_FUNC read_line_input(line_input_t *st, const char *prompt, char *comman
free(command_ps);
#endif
- if (command_len > 0)
+ if (command_len > 0) {
remember_in_history(command);
+ }
if (break_out > 0) {
command[command_len++] = '\n';
diff --git a/libbb/login.c b/libbb/login.c
index 8a82c6a..8f080b7 100644
--- a/libbb/login.c
+++ b/libbb/login.c
@@ -16,7 +16,6 @@
#define LOGIN " login: "
static const char fmtstr_d[] ALIGN1 = "%A, %d %B %Y";
-static const char fmtstr_t[] ALIGN1 = "%H:%M:%S";
void FAST_FUNC print_login_issue(const char *issue_file, const char *tty)
{
@@ -73,7 +72,7 @@ void FAST_FUNC print_login_issue(const char *issue_file, const char *tty)
strftime(buf, sizeof(buf), fmtstr_d, localtime(&t));
break;
case 't':
- strftime(buf, sizeof(buf), fmtstr_t, localtime(&t));
+ strftime_HHMMSS(buf, sizeof(buf), &t);
break;
case 'l':
outbuf = tty;
diff --git a/libbb/messages.c b/libbb/messages.c
index fad82c9..1ce84cf 100644
--- a/libbb/messages.c
+++ b/libbb/messages.c
@@ -40,7 +40,11 @@ const char bb_default_login_shell[] ALIGN1 = LIBBB_DEFAULT_LOGIN_SHELL;
/* util-linux manpage says /sbin:/bin:/usr/sbin:/usr/bin,
* but I want to save a few bytes here. Check libbb.h before changing! */
const char bb_PATH_root_path[] ALIGN1 =
+#ifdef __BIONIC__
+ "PATH=/sbin" BB_ADDITIONAL_PATH; /* platform.h */
+#else
"PATH=/sbin:/usr/sbin:/bin:/usr/bin" BB_ADDITIONAL_PATH;
+#endif
const int const_int_1 = 1;
diff --git a/libbb/nuke_str.c b/libbb/nuke_str.c
new file mode 100644
index 0000000..56b808b
--- a/dev/null
+++ b/libbb/nuke_str.c
@@ -0,0 +1,21 @@
+/* vi: set sw=4 ts=4: */
+/*
+ * Utility routines.
+ *
+ * Copyright (C) 2008 Denys Vlasenko
+ *
+ * Licensed under GPLv2, see file LICENSE in this source tree.
+ */
+
+//kbuild:lib-y += nuke_str.o
+
+#include "libbb.h"
+
+void FAST_FUNC nuke_str(char *str)
+{
+ if (str) {
+ while (*str)
+ *str++ = 0;
+ /* or: memset(str, 0, strlen(str)); - not as small as above */
+ }
+}
diff --git a/libbb/platform.c b/libbb/platform.c
index 2bf34f5..5fcd448 100644
--- a/libbb/platform.c
+++ b/libbb/platform.c
@@ -28,14 +28,16 @@ int FAST_FUNC vasprintf(char **string_ptr, const char *format, va_list p)
r = vsnprintf(buf, 128, format, p);
va_end(p);
+ /* Note: can't use xstrdup/xmalloc, they call vasprintf (us) on failure! */
+
if (r < 128) {
va_end(p2);
- *string_ptr = xstrdup(buf);
- return r;
+ *string_ptr = strdup(buf);
+ return (*string_ptr ? r : -1);
}
- *string_ptr = xmalloc(r+1);
- r = vsnprintf(*string_ptr, r+1, format, p2);
+ *string_ptr = malloc(r+1);
+ r = (*string_ptr ? vsnprintf(*string_ptr, r+1, format, p2) : -1);
va_end(p2);
return r;
@@ -84,6 +86,9 @@ void* FAST_FUNC memrchr(const void *s, int c, size_t n)
#endif
#ifndef HAVE_MKDTEMP
+#ifdef __BIONIC__
+#define mktemp(s) bb_mktemp(s)
+#endif
/* This is now actually part of POSIX.1, but was only added in 2008 */
char* FAST_FUNC mkdtemp(char *template)
{
diff --git a/libbb/printable.c b/libbb/printable.c
index f6ada49..9a42343 100644
--- a/libbb/printable.c
+++ b/libbb/printable.c
@@ -32,3 +32,27 @@ void FAST_FUNC fputc_printable(int ch, FILE *file)
}
fputc(ch, file);
}
+
+void FAST_FUNC visible(unsigned ch, char *buf, int flags)
+{
+ if (ch == '\t' && !(flags & VISIBLE_SHOW_TABS)) {
+ goto raw;
+ }
+ if (ch == '\n') {
+ if (flags & VISIBLE_ENDLINE)
+ *buf++ = '$';
+ } else {
+ if (ch >= 128) {
+ ch -= 128;
+ *buf++ = 'M';
+ *buf++ = '-';
+ }
+ if (ch < 32 || ch == 127) {
+ *buf++ = '^';
+ ch ^= 0x40;
+ }
+ }
+ raw:
+ *buf++ = ch;
+ *buf = '\0';
+}
diff --git a/libbb/pw_encrypt_des.c b/libbb/pw_encrypt_des.c
index c8e02dd..35326a5 100644
--- a/libbb/pw_encrypt_des.c
+++ b/libbb/pw_encrypt_des.c
@@ -598,7 +598,7 @@ do_des(struct des_ctx *ctx, /*uint32_t l_in, uint32_t r_in,*/ uint32_t *l_out, u
* l_in, r_in, l_out, and r_out are in pseudo-"big-endian" format.
*/
uint32_t l, r, *kl, *kr;
- uint32_t f = f; /* silence gcc */
+ static uint32_t f; /* silence gcc */
uint32_t r48l, r48r;
int round;
diff --git a/libbb/pw_encrypt_md5.c b/libbb/pw_encrypt_md5.c
index 889e09c..1e52eca 100644
--- a/libbb/pw_encrypt_md5.c
+++ b/libbb/pw_encrypt_md5.c
@@ -86,7 +86,7 @@ md5_crypt(char result[MD5_OUT_BUFSIZE], const unsigned char *pw, const unsigned
/* Get the length of the salt including "$1$" */
sl = 3;
- while (salt[sl] && salt[sl] != '$' && sl < (3 + 8))
+ while (sl < (3 + 8) && salt[sl] && salt[sl] != '$')
sl++;
/* Hash. the password first, since that is what is most unknown */
diff --git a/libbb/pw_encrypt_sha.c b/libbb/pw_encrypt_sha.c
index 8aeaaca..e48b341 100644
--- a/libbb/pw_encrypt_sha.c
+++ b/libbb/pw_encrypt_sha.c
@@ -21,7 +21,7 @@ sha_crypt(/*const*/ char *key_data, /*const*/ char *salt_data)
void (*sha_begin)(void *ctx) FAST_FUNC;
void (*sha_hash)(void *ctx, const void *buffer, size_t len) FAST_FUNC;
void (*sha_end)(void *ctx, void *resbuf) FAST_FUNC;
- int _32or64;
+ unsigned _32or64;
char *result, *resptr;
@@ -152,7 +152,7 @@ sha_crypt(/*const*/ char *key_data, /*const*/ char *salt_data)
/* Start computation of S byte sequence. */
/* For every character in the password add the entire password. */
sha_begin(&alt_ctx);
- for (cnt = 0; cnt < 16 + alt_result[0]; ++cnt)
+ for (cnt = 0; cnt < 16U + alt_result[0]; ++cnt)
sha_hash(&alt_ctx, salt_data, salt_len);
sha_end(&alt_ctx, temp_result);
diff --git a/libbb/rtc.c b/libbb/rtc.c
index 97455e8..c31f848 100644
--- a/libbb/rtc.c
+++ b/libbb/rtc.c
@@ -61,7 +61,7 @@ void FAST_FUNC rtc_read_tm(struct tm *ptm, int fd)
time_t FAST_FUNC rtc_tm2time(struct tm *ptm, int utc)
{
- char *oldtz = oldtz; /* for compiler */
+ char *oldtz = NULL;
time_t t;
if (utc) {
diff --git a/libbb/run_shell.c b/libbb/run_shell.c
index 4d92c3c..9494f27 100644
--- a/libbb/run_shell.c
+++ b/libbb/run_shell.c
@@ -34,16 +34,18 @@
#endif
#if ENABLE_SELINUX
-static security_context_t current_sid;
+static security_context_t current_sid = NULL;
void FAST_FUNC renew_current_security_context(void)
{
- freecon(current_sid); /* Release old context */
+ if (current_sid)
+ freecon(current_sid); /* Release old context */
getcon(&current_sid); /* update */
}
void FAST_FUNC set_current_security_context(security_context_t sid)
{
- freecon(current_sid); /* Release old context */
+ if (current_sid)
+ freecon(current_sid); /* Release old context */
current_sid = sid;
}
@@ -82,6 +84,7 @@ void FAST_FUNC run_shell(const char *shell, int loginshell, const char *command,
args[argno] = NULL;
#if ENABLE_SELINUX
+ renew_current_security_context();
if (current_sid)
setexeccon(current_sid);
if (ENABLE_FEATURE_CLEAN_UP)
diff --git a/libbb/time.c b/libbb/time.c
index 3778a2d..5a64bcb 100644
--- a/libbb/time.c
+++ b/libbb/time.c
@@ -23,14 +23,16 @@ void FAST_FUNC parse_datestr(const char *date_str, struct tm *ptm)
if (sscanf(date_str, "%u:%u%c",
&ptm->tm_hour,
&ptm->tm_min,
- &end) >= 2) {
+ &end) >= 2
+ ) {
/* no adjustments needed */
} else
/* mm.dd-HH:MM */
if (sscanf(date_str, "%u.%u-%u:%u%c",
&ptm->tm_mon, &ptm->tm_mday,
&ptm->tm_hour, &ptm->tm_min,
- &end) >= 4) {
+ &end) >= 4
+ ) {
/* Adjust month from 1-12 to 0-11 */
ptm->tm_mon -= 1;
} else
@@ -38,15 +40,13 @@ void FAST_FUNC parse_datestr(const char *date_str, struct tm *ptm)
if (sscanf(date_str, "%u.%u.%u-%u:%u%c", &ptm->tm_year,
&ptm->tm_mon, &ptm->tm_mday,
&ptm->tm_hour, &ptm->tm_min,
- &end) >= 5) {
- ptm->tm_year -= 1900; /* Adjust years */
- ptm->tm_mon -= 1; /* Adjust month from 1-12 to 0-11 */
- } else
+ &end) >= 5
/* yyyy-mm-dd HH:MM */
- if (sscanf(date_str, "%u-%u-%u %u:%u%c", &ptm->tm_year,
+ || sscanf(date_str, "%u-%u-%u %u:%u%c", &ptm->tm_year,
&ptm->tm_mon, &ptm->tm_mday,
&ptm->tm_hour, &ptm->tm_min,
- &end) >= 5) {
+ &end) >= 5
+ ) {
ptm->tm_year -= 1900; /* Adjust years */
ptm->tm_mon -= 1; /* Adjust month from 1-12 to 0-11 */
} else
@@ -58,7 +58,6 @@ void FAST_FUNC parse_datestr(const char *date_str, struct tm *ptm)
return; /* don't fall through to end == ":" check */
} else
#endif
-//TODO: coreutils 6.9 also accepts "yyyy-mm-dd HH" (no minutes)
{
bb_error_msg_and_die(bb_msg_invalid_date, date_str);
}
@@ -68,7 +67,29 @@ void FAST_FUNC parse_datestr(const char *date_str, struct tm *ptm)
end = '\0';
/* else end != NUL and we error out */
}
- } else if (date_str[0] == '@') {
+ } else
+ if (strchr(date_str, '-')
+ /* Why strchr('-') check?
+ * sscanf below will trash ptm->tm_year, this breaks
+ * if parse_str is "10101010" (iow, "MMddhhmm" form)
+ * because we destroy year. Do these sscanf
+ * only if we saw a dash in parse_str.
+ */
+ /* yyyy-mm-dd HH */
+ && (sscanf(date_str, "%u-%u-%u %u%c", &ptm->tm_year,
+ &ptm->tm_mon, &ptm->tm_mday,
+ &ptm->tm_hour,
+ &end) >= 4
+ /* yyyy-mm-dd */
+ || sscanf(date_str, "%u-%u-%u%c", &ptm->tm_year,
+ &ptm->tm_mon, &ptm->tm_mday,
+ &end) >= 3
+ )
+ ) {
+ ptm->tm_year -= 1900; /* Adjust years */
+ ptm->tm_mon -= 1; /* Adjust month from 1-12 to 0-11 */
+ } else
+ if (date_str[0] == '@') {
time_t t = bb_strtol(date_str + 1, NULL, 10);
if (!errno) {
struct tm *lt = localtime(&t);
@@ -187,6 +208,27 @@ time_t FAST_FUNC validate_tm_time(const char *date_str, struct tm *ptm)
return t;
}
+static char* strftime_fmt(char *buf, unsigned len, time_t *tp, const char *fmt)
+{
+ time_t t;
+ if (!tp) {
+ tp = &t;
+ time(tp);
+ }
+ /* Returns pointer to NUL */
+ return buf + strftime(buf, len, fmt, localtime(tp));
+}
+
+char* FAST_FUNC strftime_HHMMSS(char *buf, unsigned len, time_t *tp)
+{
+ return strftime_fmt(buf, len, tp, "%H:%M:%S");
+}
+
+char* FAST_FUNC strftime_YYYYMMDDHHMMSS(char *buf, unsigned len, time_t *tp)
+{
+ return strftime_fmt(buf, len, tp, "%Y-%m-%d %H:%M:%S");
+}
+
#if ENABLE_MONOTONIC_SYSCALL
#include <sys/syscall.h>
diff --git a/libbb/unicode.c b/libbb/unicode.c
index 96eb646..6bdb666 100644
--- a/libbb/unicode.c
+++ b/libbb/unicode.c
@@ -34,19 +34,37 @@ void FAST_FUNC reinit_unicode(const char *LANG)
static const char unicode_0x394[] = { 0xce, 0x94, 0 };
size_t width;
+ /* We pass "" instead of "C" because some libc's have
+ * non-ASCII default locale for setlocale("") call
+ * (this allows users of such libc to have Unicoded
+ * system without having to mess with env).
+ *
+ * We set LC_CTYPE because (a) we may be called with $LC_CTYPE
+ * value in LANG, not with $LC_ALL, (b) internationalized
+ * LC_NUMERIC and LC_TIME are more PITA than benefit
+ * (for one, some utilities have hard time with comma
+ * used as a fractional separator).
+ */
//TODO: avoid repeated calls by caching last string?
- setlocale(LC_ALL, (LANG && LANG[0]) ? LANG : "C");
+ setlocale(LC_CTYPE, LANG ? LANG : "");
/* In unicode, this is a one character string */
-// can use unicode_strlen(string) too, but otherwise unicode_strlen() is unused
- width = mbstowcs(NULL, unicode_0x394, INT_MAX);
+ width = unicode_strlen(unicode_0x394);
unicode_status = (width == 1 ? UNICODE_ON : UNICODE_OFF);
}
void FAST_FUNC init_unicode(VOID)
{
- if (unicode_status == UNICODE_UNKNOWN)
- reinit_unicode(getenv("LANG"));
+ /* Some people set only $LC_CTYPE, not $LC_ALL, because they want
+ * only Unicode to be activated on their system, not the whole
+ * shebang of wrong decimal points, strange date formats and so on.
+ */
+ if (unicode_status == UNICODE_UNKNOWN) {
+ char *s = getenv("LC_ALL");
+ if (!s) s = getenv("LC_CTYPE");
+ if (!s) s = getenv("LANG");
+ reinit_unicode(s);
+ }
}
#else
@@ -64,8 +82,12 @@ void FAST_FUNC reinit_unicode(const char *LANG)
void FAST_FUNC init_unicode(VOID)
{
- if (unicode_status == UNICODE_UNKNOWN)
- reinit_unicode(getenv("LANG"));
+ if (unicode_status == UNICODE_UNKNOWN) {
+ char *s = getenv("LC_ALL");
+ if (!s) s = getenv("LC_CTYPE");
+ if (!s) s = getenv("LANG");
+ reinit_unicode(s);
+ }
}
# endif
@@ -971,7 +993,6 @@ int FAST_FUNC unicode_bidi_is_neutral_wchar(wint_t wc)
/* The rest is mostly same for libc and for "homegrown" support */
-#if 0 // UNUSED
size_t FAST_FUNC unicode_strlen(const char *string)
{
size_t width = mbstowcs(NULL, string, INT_MAX);
@@ -979,7 +1000,6 @@ size_t FAST_FUNC unicode_strlen(const char *string)
return strlen(string);
return width;
}
-#endif
size_t FAST_FUNC unicode_strwidth(const char *string)
{
diff --git a/libbb/update_passwd.c b/libbb/update_passwd.c
index a30af6f..b2d0464 100644
--- a/libbb/update_passwd.c
+++ b/libbb/update_passwd.c
@@ -30,7 +30,7 @@ static void check_selinux_update_passwd(const char *username)
if (!seuser)
bb_error_msg_and_die("invalid context '%s'", context);
if (strcmp(seuser, username) != 0) {
- if (checkPasswdAccess(PASSWD__PASSWD) != 0)
+ if (selinux_check_passwd_access(PASSWD__PASSWD) != 0)
bb_error_msg_and_die("SELinux: access denied");
}
if (ENABLE_FEATURE_CLEAN_UP)
diff --git a/libbb/xatonum.c b/libbb/xatonum.c
index 62bbe53..6f4e023 100644
--- a/libbb/xatonum.c
+++ b/libbb/xatonum.c
@@ -68,3 +68,10 @@ uint16_t FAST_FUNC xatou16(const char *numstr)
{
return xatou_range(numstr, 0, 0xffff);
}
+
+const struct suffix_mult bkm_suffixes[] = {
+ { "b", 512 },
+ { "k", 1024 },
+ { "m", 1024*1024 },
+ { "", 0 }
+};
diff --git a/libbb/xfuncs_printf.c b/libbb/xfuncs_printf.c
index bdd10d7..6c1c0d3 100644
--- a/libbb/xfuncs_printf.c
+++ b/libbb/xfuncs_printf.c
@@ -140,15 +140,6 @@ int FAST_FUNC xopen(const char *pathname, int flags)
return xopen3(pathname, flags, 0666);
}
-/* Die if we can't open an existing file readonly with O_NONBLOCK
- * and return the fd.
- * Note that for ioctl O_RDONLY is sufficient.
- */
-int FAST_FUNC xopen_nonblocking(const char *pathname)
-{
- return xopen(pathname, O_RDONLY | O_NONBLOCK);
-}
-
// Warn if we can't open a file and return a fd.
int FAST_FUNC open3_or_warn(const char *pathname, int flags, int mode)
{
@@ -167,6 +158,32 @@ int FAST_FUNC open_or_warn(const char *pathname, int flags)
return open3_or_warn(pathname, flags, 0666);
}
+/* Die if we can't open an existing file readonly with O_NONBLOCK
+ * and return the fd.
+ * Note that for ioctl O_RDONLY is sufficient.
+ */
+int FAST_FUNC xopen_nonblocking(const char *pathname)
+{
+ return xopen(pathname, O_RDONLY | O_NONBLOCK);
+}
+
+int FAST_FUNC xopen_as_uid_gid(const char *pathname, int flags, uid_t u, gid_t g)
+{
+ int fd;
+ uid_t old_euid = geteuid();
+ gid_t old_egid = getegid();
+
+ xsetegid(g);
+ xseteuid(u);
+
+ fd = xopen(pathname, flags);
+
+ xseteuid(old_euid);
+ xsetegid(old_egid);
+
+ return fd;
+}
+
void FAST_FUNC xunlink(const char *pathname)
{
if (unlink(pathname))
@@ -305,6 +322,11 @@ char* FAST_FUNC xasprintf(const char *format, ...)
void FAST_FUNC xsetenv(const char *key, const char *value)
{
+#ifdef __BIONIC__
+ /* on login, can be NULL, and should not be for bionic */
+ if (environ == NULL)
+ bb_error_msg_and_die("environment is not initialized");
+#endif
if (setenv(key, value, 1))
bb_error_msg_and_die("%s", bb_msg_memory_exhausted);
}
@@ -351,6 +373,16 @@ void FAST_FUNC xsetuid(uid_t uid)
if (setuid(uid)) bb_perror_msg_and_die("setuid");
}
+void FAST_FUNC xsetegid(gid_t egid)
+{
+ if (setegid(egid)) bb_perror_msg_and_die("setegid");
+}
+
+void FAST_FUNC xseteuid(uid_t euid)
+{
+ if (seteuid(euid)) bb_perror_msg_and_die("seteuid");
+}
+
// Die if we can't chdir to a new path.
void FAST_FUNC xchdir(const char *path)
{
@@ -541,13 +573,11 @@ int FAST_FUNC bb_xioctl(int fd, unsigned request, void *argp)
char* FAST_FUNC xmalloc_ttyname(int fd)
{
- char *buf = xzalloc(128);
- int r = ttyname_r(fd, buf, 127);
- if (r) {
- free(buf);
- buf = NULL;
- }
- return buf;
+ char buf[128];
+ int r = ttyname_r(fd, buf, sizeof(buf) - 1);
+ if (r)
+ return NULL;
+ return xstrdup(buf);
}
void FAST_FUNC generate_uuid(uint8_t *buf)
diff --git a/libbb/xreadlink.c b/libbb/xreadlink.c
index ec95af2..bb63da0 100644
--- a/libbb/xreadlink.c
+++ b/libbb/xreadlink.c
@@ -8,6 +8,12 @@
#include "libbb.h"
+/* some systems (eg Hurd) does not have MAXSYMLINKS definition,
+ * set it to some reasonable value if it isn't defined */
+#ifndef MAXSYMLINKS
+# define MAXSYMLINKS 20
+#endif
+
/*
* NOTE: This function returns a malloced char* that you will have to free
* yourself.
@@ -102,7 +108,8 @@ char* FAST_FUNC xmalloc_readlink_or_warn(const char *path)
char* FAST_FUNC xmalloc_realpath(const char *path)
{
-#if defined(__GLIBC__) && !defined(__UCLIBC__)
+#if defined(__GLIBC__) || \
+ (defined(__UCLIBC__) && UCLIBC_VERSION >= KERNEL_VERSION(0, 9, 31))
/* glibc provides a non-standard extension */
/* new: POSIX.1-2008 specifies this behavior as well */
return realpath(path, NULL);
diff --git a/loginutils/adduser.c b/loginutils/adduser.c
index 5dd2de1..79b9501 100644
--- a/loginutils/adduser.c
+++ b/loginutils/adduser.c
@@ -162,9 +162,9 @@ int adduser_main(int argc UNUSED_PARAM, char **argv)
pw.pw_shell = (char *)get_shell_name();
pw.pw_dir = NULL;
- /* at most two non-option args */
+ /* at least one and at most two non-option args */
/* disable interactive passwd for system accounts */
- opt_complementary = "?2:SD:u+";
+ opt_complementary = "-1:?2:SD:u+";
if (sizeof(pw.pw_uid) == sizeof(int)) {
opts = getopt32(argv, "h:g:s:G:DSHu:", &pw.pw_dir, &pw.pw_gecos, &pw.pw_shell, &usegroup, &pw.pw_uid);
} else {
diff --git a/loginutils/cryptpw.c b/loginutils/cryptpw.c
index a36f920..29f0fbe 100644
--- a/loginutils/cryptpw.c
+++ b/loginutils/cryptpw.c
@@ -92,6 +92,7 @@ int cryptpw_main(int argc UNUSED_PARAM, char **argv)
{
char salt[MAX_PW_SALT_LEN];
char *salt_ptr;
+ char *password;
const char *opt_m, *opt_S;
int fd;
@@ -123,15 +124,19 @@ int cryptpw_main(int argc UNUSED_PARAM, char **argv)
xmove_fd(fd, STDIN_FILENO);
- puts(pw_encrypt(
- argv[0] ? argv[0] : (
- /* Only mkpasswd, and only from tty, prompts.
- * Otherwise it is a plain read. */
- (isatty(STDIN_FILENO) && applet_name[0] == 'm')
+ password = argv[0];
+ if (!password) {
+ /* Only mkpasswd, and only from tty, prompts.
+ * Otherwise it is a plain read. */
+ password = (isatty(STDIN_FILENO) && applet_name[0] == 'm')
? bb_ask_stdin("Password: ")
: xmalloc_fgetline(stdin)
- ),
- salt, 1));
+ ;
+ /* may still be NULL on EOF/error */
+ }
+
+ if (password)
+ puts(pw_encrypt(password, salt, 1));
return EXIT_SUCCESS;
}
diff --git a/loginutils/getty.c b/loginutils/getty.c
index e5d13be..6fd4ff2 100644
--- a/loginutils/getty.c
+++ b/loginutils/getty.c
@@ -54,7 +54,12 @@ static FILE *dbf;
* and for line editing at the same time.
*/
#undef _PATH_LOGIN
+#ifdef __BIONIC__
+#define cfsetspeed(t,s) cfsetispeed(t,s)
+#define _PATH_LOGIN "/system/xbin/login"
+#else
#define _PATH_LOGIN "/bin/login"
+#endif
/* Displayed before the login prompt.
* If ISSUE is not defined, getty will never display the contents of the
@@ -94,7 +99,7 @@ struct globals {
//usage:#define getty_trivial_usage
//usage: "[OPTIONS] BAUD_RATE[,BAUD_RATE]... TTY [TERMTYPE]"
//usage:#define getty_full_usage "\n\n"
-//usage: "Open TTY, prompt for login name, then invoke /bin/login\n"
+//usage: "Open TTY, prompt for login name, then invoke /system/xbin/login\n"
//usage: "\n -h Enable hardware RTS/CTS flow control"
//usage: "\n -L Set CLOCAL (ignore Carrier Detect state)"
//usage: "\n -m Get baud rate from modem's CONNECT status message"
@@ -102,7 +107,7 @@ struct globals {
//usage: "\n -w Wait for CR or LF before sending /etc/issue"
//usage: "\n -i Don't display /etc/issue"
//usage: "\n -f ISSUE_FILE Display ISSUE_FILE instead of /etc/issue"
-//usage: "\n -l LOGIN Invoke LOGIN instead of /bin/login"
+//usage: "\n -l LOGIN Invoke LOGIN instead of /system/xbin/login"
//usage: "\n -t SEC Terminate after SEC if no login name is read"
//usage: "\n -I INITSTR Send INITSTR before anything else"
//usage: "\n -H HOST Log HOST into the utmp file as the hostname"
@@ -499,7 +504,7 @@ static char *get_logname(void)
default:
if ((unsigned char)c < ' ') {
/* ignore garbage characters */
- } else if ((int)(bp - G.line_buf) < sizeof(G.line_buf) - 1) {
+ } else if ((int)(bp - G.line_buf) < (int)sizeof(G.line_buf) - 1) {
/* echo and store the character */
full_write(STDOUT_FILENO, &c, 1);
*bp++ = c;
@@ -695,6 +700,6 @@ int getty_main(int argc UNUSED_PARAM, char **argv)
/* We use PATH because we trust that root doesn't set "bad" PATH,
* and getty is not suid-root applet */
/* With -n, logname == NULL, and login will ask for username instead */
- BB_EXECLP(G.login, G.login, "--", logname, NULL);
+ BB_EXECLP(G.login, G.login, "--", logname, (char *)0);
bb_error_msg_and_die("can't execute '%s'", G.login);
}
diff --git a/loginutils/login.c b/loginutils/login.c
index 6ec8dc4..862104c 100644
--- a/loginutils/login.c
+++ b/loginutils/login.c
@@ -17,9 +17,11 @@
#if ENABLE_SELINUX
# include <selinux/selinux.h> /* for is_selinux_enabled() */
+#ifndef __BIONIC__
# include <selinux/get_context_list.h> /* for get_default_context() */
# include <selinux/flask.h> /* for security class definitions */
#endif
+#endif
#if ENABLE_PAM
/* PAM may include <locale.h>. We may need to undefine bbox's stub define: */
@@ -118,7 +120,8 @@ static void initselinux(char *username, char *full_tty,
bb_perror_msg_and_die("security_change_sid(%s) failed", full_tty);
}
if (setfilecon(full_tty, new_tty_sid) != 0) {
- bb_perror_msg_and_die("chsid(%s, %s) failed", full_tty, new_tty_sid);
+ if (strcmp(old_tty_sid, new_tty_sid))
+ bb_perror_msg_and_die("chsid(%s, %s) failed", full_tty, new_tty_sid);
}
}
#endif
@@ -397,7 +400,7 @@ int login_main(int argc UNUSED_PARAM, char **argv)
pam_strerror(pamh, pamret), pamret);
safe_strncpy(username, "UNKNOWN", sizeof(username));
#else /* not PAM */
- pw = getpwnam(username);
+ pw = safegetpwnam(username);
if (!pw) {
strcpy(username, "UNKNOWN");
goto fake_it;
@@ -420,7 +423,7 @@ int login_main(int argc UNUSED_PARAM, char **argv)
* Note that reads (in no-echo mode) trash tty attributes.
* If we get interrupted by SIGALRM, we need to restore attrs.
*/
- if (correct_password(pw))
+ if (ask_and_check_password(pw) > 0)
break;
#endif /* ENABLE_PAM */
auth_failed:
diff --git a/loginutils/passwd.c b/loginutils/passwd.c
index a7006f0..1509089 100644
--- a/loginutils/passwd.c
+++ b/loginutils/passwd.c
@@ -17,11 +17,6 @@
#include <syslog.h>
#include <sys/resource.h> /* setrlimit */
-static void nuke_str(char *str)
-{
- if (str) memset(str, 0, strlen(str));
-}
-
static char* new_password(const struct passwd *pw, uid_t myuid, const char *algo)
{
char salt[MAX_PW_SALT_LEN];
diff --git a/loginutils/su.c b/loginutils/su.c
index 2ec05e1..c51f26f 100644
--- a/loginutils/su.c
+++ b/loginutils/su.c
@@ -93,7 +93,7 @@ int su_main(int argc UNUSED_PARAM, char **argv)
pw = xgetpwnam(opt_username);
- if (cur_uid == 0 || correct_password(pw)) {
+ if (cur_uid == 0 || ask_and_check_password(pw) > 0) {
if (ENABLE_FEATURE_SU_SYSLOG)
syslog(LOG_NOTICE, "%c %s %s:%s",
'+', tty, old_user, opt_username);
diff --git a/loginutils/sulogin.c b/loginutils/sulogin.c
index bd2b09e..c8e5fc9 100644
--- a/loginutils/sulogin.c
+++ b/loginutils/sulogin.c
@@ -14,24 +14,12 @@
#include "libbb.h"
#include <syslog.h>
-//static void catchalarm(int UNUSED_PARAM junk)
-//{
-// exit(EXIT_FAILURE);
-//}
-
-
int sulogin_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE;
int sulogin_main(int argc UNUSED_PARAM, char **argv)
{
- char *cp;
int timeout = 0;
struct passwd *pwd;
const char *shell;
-#if ENABLE_FEATURE_SHADOWPASSWDS
- /* Using _r function to avoid pulling in static buffers */
- char buffer[256];
- struct spwd spw;
-#endif
logmode = LOGMODE_BOTH;
openlog(applet_name, 0, LOG_AUTH);
@@ -57,48 +45,29 @@ int sulogin_main(int argc UNUSED_PARAM, char **argv)
/* Clear dangerous stuff, set PATH */
sanitize_env_if_suid();
- pwd = getpwuid(0);
+ pwd = safegetpwuid(0);
if (!pwd) {
goto auth_error;
}
-#if ENABLE_FEATURE_SHADOWPASSWDS
- {
- /* getspnam_r may return 0 yet set result to NULL.
- * At least glibc 2.4 does this. Be extra paranoid here. */
- struct spwd *result = NULL;
- int r = getspnam_r(pwd->pw_name, &spw, buffer, sizeof(buffer), &result);
- if (r || !result) {
- goto auth_error;
- }
- pwd->pw_passwd = result->sp_pwdp;
- }
-#endif
-
while (1) {
- char *encrypted;
int r;
- /* cp points to a static buffer that is zeroed every time */
- cp = bb_ask(STDIN_FILENO, timeout,
- "Give root password for system maintenance\n"
- "(or type Control-D for normal startup):");
-
- if (!cp || !*cp) {
+ r = ask_and_check_password_extended(pwd, timeout,
+ "Give root password for system maintenance\n"
+ "(or type Control-D for normal startup):"
+ );
+ if (r < 0) {
+ /* ^D, ^C, timeout, or read error */
bb_info_msg("Normal startup");
return 0;
}
- encrypted = pw_encrypt(cp, pwd->pw_passwd, 1);
- r = strcmp(encrypted, pwd->pw_passwd);
- free(encrypted);
- if (r == 0) {
+ if (r > 0) {
break;
}
bb_do_delay(LOGIN_FAIL_DELAY);
bb_info_msg("Login incorrect");
}
- memset(cp, 0, strlen(cp));
-// signal(SIGALRM, SIG_DFL);
bb_info_msg("System Maintenance Mode");
diff --git a/loginutils/vlock.c b/loginutils/vlock.c
index 75af939..44b14e6 100644
--- a/loginutils/vlock.c
+++ b/loginutils/vlock.c
@@ -104,7 +104,7 @@ int vlock_main(int argc UNUSED_PARAM, char **argv)
/* "s" if -a, else "": */ "s" + !option_mask32,
pw->pw_name
);
- if (correct_password(pw)) {
+ if (ask_and_check_password(pw) > 0) {
break;
}
bb_do_delay(LOGIN_FAIL_DELAY);
diff --git a/mailutils/sendmail.c b/mailutils/sendmail.c
index c426e9d..b5aa1d1 100644
--- a/mailutils/sendmail.c
+++ b/mailutils/sendmail.c
@@ -92,25 +92,73 @@ static int smtp_check(const char *fmt, int code)
// strip argument of bad chars
static char *sane_address(char *str)
{
- char *s = str;
- char *p = s;
+ char *s;
+
+ trim(str);
+ s = str;
while (*s) {
- if (isalnum(*s) || '_' == *s || '-' == *s || '.' == *s || '@' == *s) {
- *p++ = *s;
+ if (!isalnum(*s) && !strchr("_-.@", *s)) {
+ bb_error_msg("bad address '%s'", str);
+ /* returning "": */
+ str[0] = '\0';
+ return str;
}
s++;
}
- *p = '\0';
return str;
}
+// check for an address inside angle brackets, if not found fall back to normal
+static char *angle_address(char *str)
+{
+ char *s, *e;
+
+ trim(str);
+ e = last_char_is(str, '>');
+ if (e) {
+ s = strrchr(str, '<');
+ if (s) {
+ *e = '\0';
+ str = s + 1;
+ }
+ }
+ return sane_address(str);
+}
+
static void rcptto(const char *s)
{
+ if (!*s)
+ return;
// N.B. we don't die if recipient is rejected, for the other recipients may be accepted
if (250 != smtp_checkp("RCPT TO:<%s>", s, -1))
bb_error_msg("Bad recipient: <%s>", s);
}
+// send to a list of comma separated addresses
+static void rcptto_list(const char *list)
+{
+ char *str = xstrdup(list);
+ char *s = str;
+ char prev = 0;
+ int in_quote = 0;
+
+ while (*s) {
+ char ch = *s++;
+
+ if (ch == '"' && prev != '\\') {
+ in_quote = !in_quote;
+ } else if (!in_quote && ch == ',') {
+ s[-1] = '\0';
+ rcptto(angle_address(str));
+ str = s;
+ }
+ prev = ch;
+ }
+ if (prev != ',')
+ rcptto(angle_address(str));
+ free(str);
+}
+
int sendmail_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE;
int sendmail_main(int argc UNUSED_PARAM, char **argv)
{
@@ -121,6 +169,13 @@ int sendmail_main(int argc UNUSED_PARAM, char **argv)
char *host = sane_address(safe_gethostname());
unsigned nheaders = 0;
int code;
+ enum {
+ HDR_OTHER = 0,
+ HDR_TOCC,
+ HDR_BCC,
+ } last_hdr = 0;
+ int check_hdr;
+ int has_to = 0;
enum {
//--- standard options
@@ -282,23 +337,36 @@ int sendmail_main(int argc UNUSED_PARAM, char **argv)
// analyze headers
// To: or Cc: headers add recipients
+ check_hdr = (0 == strncasecmp("To:", s, 3));
+ has_to |= check_hdr;
if (opts & OPT_t) {
- if (0 == strncasecmp("To:", s, 3) || 0 == strncasecmp("Bcc:" + 1, s, 3)) {
- rcptto(sane_address(s+3));
+ if (check_hdr || 0 == strncasecmp("Bcc:" + 1, s, 3)) {
+ rcptto_list(s+3);
+ last_hdr = HDR_TOCC;
goto addheader;
}
// Bcc: header adds blind copy (hidden) recipient
if (0 == strncasecmp("Bcc:", s, 4)) {
- rcptto(sane_address(s+4));
+ rcptto_list(s+4);
free(s);
+ last_hdr = HDR_BCC;
continue; // N.B. Bcc: vanishes from headers!
}
}
- if (strchr(s, ':') || (list && isspace(s[0]))) {
+ check_hdr = (list && isspace(s[0]));
+ if (strchr(s, ':') || check_hdr) {
// other headers go verbatim
// N.B. RFC2822 2.2.3 "Long Header Fields" allows for headers to occupy several lines.
// Continuation is denoted by prefixing additional lines with whitespace(s).
// Thanks (stefan.seyfried at googlemail.com) for pointing this out.
+ if (check_hdr && last_hdr != HDR_OTHER) {
+ rcptto_list(s+1);
+ if (last_hdr == HDR_BCC)
+ continue;
+ // N.B. Bcc: vanishes from headers!
+ } else {
+ last_hdr = HDR_OTHER;
+ }
addheader:
// N.B. we allow MAX_HEADERS generic headers at most to prevent attacks
if (MAX_HEADERS && ++nheaders >= MAX_HEADERS)
@@ -309,12 +377,27 @@ int sendmail_main(int argc UNUSED_PARAM, char **argv)
// so stop "analyze headers" mode
reenter:
// put recipients specified on cmdline
+ check_hdr = 1;
while (*argv) {
char *t = sane_address(*argv);
rcptto(t);
//if (MAX_HEADERS && ++nheaders >= MAX_HEADERS)
// goto bail;
- llist_add_to_end(&list, xasprintf("To: %s", t));
+ if (!has_to) {
+ const char *hdr;
+
+ if (check_hdr && argv[1])
+ hdr = "To: %s,";
+ else if (check_hdr)
+ hdr = "To: %s";
+ else if (argv[1])
+ hdr = "To: %s," + 3;
+ else
+ hdr = "To: %s" + 3;
+ llist_add_to_end(&list,
+ xasprintf(hdr, t));
+ check_hdr = 0;
+ }
argv++;
}
// enter "put message" mode
diff --git a/miscutils/Config.src b/miscutils/Config.src
index b9fc196..1da9800 100644
--- a/miscutils/Config.src
+++ b/miscutils/Config.src
@@ -503,18 +503,6 @@ config READAHEAD
As readahead(2) blocks until each file has been read, it is best to
run this applet as a background job.
-config RFKILL
- bool "rfkill"
- default n # doesn't build on Ubuntu 9.04
- select PLATFORM_LINUX
- help
- Enable/disable wireless devices.
-
- rfkill list : list all wireless devices
- rfkill list bluetooth : list all bluetooth devices
- rfkill list 1 : list device corresponding to the given index
- rfkill block|unblock wlan : block/unblock all wlan(wifi) devices
-
config RUNLEVEL
bool "runlevel"
default y
@@ -591,13 +579,6 @@ config VOLNAME
help
Prints a CD-ROM volume name.
-config WALL
- bool "wall"
- default y
- depends on FEATURE_UTMP
- help
- Write a message to all users that are logged in.
-
config WATCHDOG
bool "watchdog"
default y
diff --git a/miscutils/Kbuild.src b/miscutils/Kbuild.src
index 8c49864..9e164f1 100644
--- a/miscutils/Kbuild.src
+++ b/miscutils/Kbuild.src
@@ -36,7 +36,6 @@ lib-$(CONFIG_MOUNTPOINT) += mountpoint.o
lib-$(CONFIG_MT) += mt.o
lib-$(CONFIG_RAIDAUTORUN) += raidautorun.o
lib-$(CONFIG_READAHEAD) += readahead.o
-lib-$(CONFIG_RFKILL) += rfkill.o
lib-$(CONFIG_RUNLEVEL) += runlevel.o
lib-$(CONFIG_RX) += rx.o
lib-$(CONFIG_SETSID) += setsid.o
@@ -46,5 +45,4 @@ lib-$(CONFIG_TIME) += time.o
lib-$(CONFIG_TIMEOUT) += timeout.o
lib-$(CONFIG_TTYSIZE) += ttysize.o
lib-$(CONFIG_VOLNAME) += volname.o
-lib-$(CONFIG_WALL) += wall.o
lib-$(CONFIG_WATCHDOG) += watchdog.o
diff --git a/miscutils/chat.c b/miscutils/chat.c
index ce994f8..bd2abc2 100644
--- a/miscutils/chat.c
+++ b/miscutils/chat.c
@@ -296,7 +296,7 @@ int chat_main(int argc UNUSED_PARAM, char **argv)
full_write(record_fd, buf+buf_len, 1);
}
// dump device input if ECHO ON
- if (echo > 0) {
+ if (echo) {
// if (buf[buf_len] < ' ') {
// full_write(STDERR_FILENO, "^", 1);
// buf[buf_len] += '@';
diff --git a/miscutils/chrt.c b/miscutils/chrt.c
index 91b5397..f2f559f 100644
--- a/miscutils/chrt.c
+++ b/miscutils/chrt.c
@@ -23,9 +23,6 @@
#include <sched.h>
#include "libbb.h"
-#ifndef _POSIX_PRIORITY_SCHEDULING
-#warning your system may be foobared
-#endif
static const struct {
int policy;
diff --git a/miscutils/crond.c b/miscutils/crond.c
index c9f4552..2545618 100644
--- a/miscutils/crond.c
+++ b/miscutils/crond.c
@@ -36,7 +36,11 @@
#endif
+#ifdef __BIONIC__
+#define TMPDIR "/data/local/tmp"
+#else
#define TMPDIR CONFIG_FEATURE_CROND_DIR
+#endif
#define CRONTABS CONFIG_FEATURE_CROND_DIR "/crontabs"
#ifndef SENDMAIL
# define SENDMAIL "sendmail"
@@ -693,7 +697,7 @@ static void start_one_job(const char *user, CronLine *line)
struct passwd *pas;
pid_t pid;
- pas = getpwnam(user);
+ pas = safegetpwnam(user);
if (!pas) {
crondlog(WARN9 "can't get uid for %s", user);
goto err;
diff --git a/miscutils/crontab.c b/miscutils/crontab.c
index 49d1da7..94659bd 100644
--- a/miscutils/crontab.c
+++ b/miscutils/crontab.c
@@ -55,28 +55,6 @@ static void edit_file(const struct passwd *pas, const char *file)
bb_perror_msg_and_die("can't execute '%s'", ptr);
}
-static int open_as_user(const struct passwd *pas, const char *file)
-{
- pid_t pid;
- char c;
-
- pid = xvfork();
- if (pid) { /* PARENT */
- if (wait4pid(pid) == 0) {
- /* exitcode 0: child says it can read */
- return open(file, O_RDONLY);
- }
- return -1;
- }
-
- /* CHILD */
- /* initgroups, setgid, setuid */
- change_identity(pas);
- /* We just try to read one byte. If it works, file is readable
- * under this user. We signal that by exiting with 0. */
- _exit(safe_read(xopen(file, O_RDONLY), &c, 1) < 0);
-}
-
int crontab_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE;
int crontab_main(int argc UNUSED_PARAM, char **argv)
{
@@ -137,10 +115,7 @@ int crontab_main(int argc UNUSED_PARAM, char **argv)
if (!argv[0])
bb_show_usage();
if (NOT_LONE_DASH(argv[0])) {
- src_fd = open_as_user(pas, argv[0]);
- if (src_fd < 0)
- bb_error_msg_and_die("user %s cannot read %s",
- pas->pw_name, argv[0]);
+ src_fd = xopen_as_uid_gid(argv[0], O_RDONLY, pas->pw_uid, pas->pw_gid);
}
}
diff --git a/miscutils/devfsd.c b/miscutils/devfsd.c
index 24c953b..96ffe07 100644
--- a/miscutils/devfsd.c
+++ b/miscutils/devfsd.c
@@ -1083,21 +1083,23 @@ static int get_uid_gid(int flag, const char *string)
{
struct passwd *pw_ent;
struct group *grp_ent;
- static const char *msg;
+ const char *msg;
- if (ENABLE_DEVFSD_VERBOSE)
- msg = "user";
-
- if (isdigit(string[0]) ||((string[0] == '-') && isdigit(string[1])))
+ if (isdigit(string[0]) || ((string[0] == '-') && isdigit(string[1])))
return atoi(string);
if (flag == UID && (pw_ent = getpwnam(string)) != NULL)
return pw_ent->pw_uid;
- if (flag == GID && (grp_ent = getgrnam(string)) != NULL)
- return grp_ent->gr_gid;
- else if (ENABLE_DEVFSD_VERBOSE)
- msg = "group";
+ if (ENABLE_DEVFSD_VERBOSE)
+ msg = "user";
+
+ if (flag == GID) {
+ if ((grp_ent = getgrnam(string)) != NULL)
+ return grp_ent->gr_gid;
+ if (ENABLE_DEVFSD_VERBOSE)
+ msg = "group";
+ }
if (ENABLE_DEVFSD_VERBOSE)
msg_logger(LOG_ERR, "unknown %s: %s, defaulting to %cid=0", msg, string, msg[0]);
diff --git a/miscutils/fbsplash.c b/miscutils/fbsplash.c
index 9639672..383b829 100644
--- a/miscutils/fbsplash.c
+++ b/miscutils/fbsplash.c
@@ -353,7 +353,7 @@ static void fb_drawimage(void)
if (LONE_DASH(G.image_filename)) {
theme_file = stdin;
} else {
- int fd = open_zipped(G.image_filename);
+ int fd = open_zipped(G.image_filename, /*fail_if_not_compressed:*/ 0);
if (fd < 0)
bb_simple_perror_msg_and_die(G.image_filename);
theme_file = xfdopen_for_read(fd);
diff --git a/miscutils/flash_eraseall.c b/miscutils/flash_eraseall.c
index 0598371..bf9b739 100644
--- a/miscutils/flash_eraseall.c
+++ b/miscutils/flash_eraseall.c
@@ -11,10 +11,11 @@
*/
//usage:#define flash_eraseall_trivial_usage
-//usage: "[-jq] MTD_DEVICE"
+//usage: "[-jNq] MTD_DEVICE"
//usage:#define flash_eraseall_full_usage "\n\n"
//usage: "Erase an MTD device\n"
//usage: "\n -j Format the device for jffs2"
+//usage: "\n -N Don't skip bad blocks"
//usage: "\n -q Don't display progress messages"
#include "libbb.h"
@@ -22,9 +23,9 @@
#include <linux/jffs2.h>
#define OPTION_J (1 << 0)
-#define OPTION_Q (1 << 1)
-#define IS_NAND (1 << 2)
-#define BBTEST (1 << 3)
+#define OPTION_N (1 << 1)
+#define OPTION_Q (1 << 2)
+#define IS_NAND (1 << 3)
/* mtd/jffs2-user.h used to have this atrocity:
extern int target_endian;
@@ -71,7 +72,7 @@ int flash_eraseall_main(int argc UNUSED_PARAM, char **argv)
char *mtd_name;
opt_complementary = "=1";
- flags = BBTEST | getopt32(argv, "jq");
+ flags = getopt32(argv, "jNq");
mtd_name = argv[optind];
fd = xopen(mtd_name, O_RDWR);
@@ -139,7 +140,7 @@ int flash_eraseall_main(int argc UNUSED_PARAM, char **argv)
for (erase.start = 0; erase.start < meminfo.size;
erase.start += meminfo.erasesize) {
- if (flags & BBTEST) {
+ if (!(flags & OPTION_N)) {
int ret;
loff_t offset = erase.start;
@@ -154,7 +155,7 @@ int flash_eraseall_main(int argc UNUSED_PARAM, char **argv)
* types e.g. NOR
*/
if (errno == EOPNOTSUPP) {
- flags &= ~BBTEST;
+ flags |= OPTION_N;
if (flags & IS_NAND)
bb_error_msg_and_die("bad block check not available");
} else {
diff --git a/miscutils/flashcp.c b/miscutils/flashcp.c
index 1704479..a834a7f 100644
--- a/miscutils/flashcp.c
+++ b/miscutils/flashcp.c
@@ -16,6 +16,7 @@
#include "libbb.h"
#include <mtd/mtd-user.h>
+/* If 1, simulates "flashing" by writing to existing regular file */
#define MTD_DEBUG 0
#define OPT_v (1 << 0)
@@ -32,7 +33,7 @@ static void progress(int mode, uoff_t count, uoff_t total)
if (total)
percent = (unsigned) (percent / total);
printf("\r%s: %"OFF_FMT"u/%"OFF_FMT"u (%u%%) ",
- (mode == 0) ? "Erasing block" : ((mode == 1) ? "Writing kb" : "Verifying kb"),
+ (mode < 0) ? "Erasing block" : ((mode == 0) ? "Writing kb" : "Verifying kb"),
count, total, (unsigned)percent);
fflush_all();
}
@@ -97,8 +98,7 @@ int flashcp_main(int argc UNUSED_PARAM, char **argv)
#endif
e.start = 0;
for (i = 1; i <= erase_count; i++) {
- progress(0, i, erase_count);
- errno = 0;
+ progress(-1, i, erase_count);
#if !MTD_DEBUG
if (ioctl(fd_d, MEMERASE, &e) < 0) {
bb_perror_msg_and_die("erase error at 0x%llx on %s",
@@ -113,7 +113,7 @@ int flashcp_main(int argc UNUSED_PARAM, char **argv)
/* doing this outer loop gives significantly smaller code
* than doing two separate loops for writing and verifying */
- for (i = 1; i <= 2; i++) {
+ for (i = 0; i <= 1; i++) {
uoff_t done;
unsigned count;
@@ -122,25 +122,29 @@ int flashcp_main(int argc UNUSED_PARAM, char **argv)
done = 0;
count = BUFSIZE;
while (1) {
- uoff_t rem = statb.st_size - done;
+ uoff_t rem;
+
+ progress(i, done / 1024, (uoff_t)statb.st_size / 1024);
+ rem = statb.st_size - done;
if (rem == 0)
break;
if (rem < BUFSIZE)
count = rem;
- progress(i, done / 1024, (uoff_t)statb.st_size / 1024);
xread(fd_f, buf, count);
- if (i == 1) {
+ if (i == 0) {
int ret;
+ if (count < BUFSIZE)
+ memset((char*)buf + count, 0, BUFSIZE - count);
errno = 0;
- ret = full_write(fd_d, buf, count);
- if (ret != (int) count) {
+ ret = full_write(fd_d, buf, BUFSIZE);
+ if (ret != BUFSIZE) {
bb_perror_msg_and_die("write error at 0x%"OFF_FMT"x on %s, "
"write returned %d",
done, devicename, ret);
}
- } else { /* i == 2 */
+ } else { /* i == 1 */
xread(fd_d, buf2, count);
- if (memcmp(buf, buf2, count)) {
+ if (memcmp(buf, buf2, count) != 0) {
bb_error_msg_and_die("verification mismatch at 0x%"OFF_FMT"x", done);
}
}
diff --git a/miscutils/hdparm.c b/miscutils/hdparm.c
index 69726ae..f0e9c9d 100644
--- a/miscutils/hdparm.c
+++ b/miscutils/hdparm.c
@@ -465,14 +465,14 @@ static void on_off(int value)
static void print_flag_on_off(int get_arg, const char *s, unsigned long arg)
{
if (get_arg) {
- printf(" setting %s to %ld", s, arg);
+ printf(" setting %s to %lu", s, arg);
on_off(arg);
}
}
static void print_value_on_off(const char *str, unsigned long argp)
{
- printf(" %s\t= %2ld", str, argp);
+ printf(" %s\t= %2lu", str, argp);
on_off(argp != 0);
}
@@ -1509,7 +1509,7 @@ static void bus_state_value(unsigned value)
else if (value == BUSSTATE_TRISTATE)
printf(" (tristate)\n");
else
- printf(" (unknown: %d)\n", value);
+ printf(" (unknown: %u)\n", value);
}
#endif
@@ -1589,7 +1589,7 @@ static void interpret_xfermode(unsigned xfermode)
static void print_flag(int flag, const char *s, unsigned long value)
{
if (flag)
- printf(" setting %s to %ld\n", s, value);
+ printf(" setting %s to %lu\n", s, value);
}
static void process_dev(char *devname)
diff --git a/miscutils/less.c b/miscutils/less.c
index 622969f..3f4d50f 100644
--- a/miscutils/less.c
+++ b/miscutils/less.c
@@ -502,7 +502,7 @@ static void read_lines(void)
}
if (!(option_mask32 & FLAG_S)
? (max_fline > cur_fline + max_displayed_line)
- : (max_fline >= cur_fline
+ : (max_fline >= (unsigned) cur_fline
&& max_lineno > LINENO(flines[cur_fline]) + max_displayed_line)
) {
#if !ENABLE_FEATURE_LESS_REGEXP
@@ -926,7 +926,7 @@ static int64_t getch_nowait(void)
//TODO: reuse code for determining this
if (!(option_mask32 & FLAG_S)
? !(max_fline > cur_fline + max_displayed_line)
- : !(max_fline >= cur_fline
+ : !(max_fline >= (unsigned) cur_fline
&& max_lineno > LINENO(flines[cur_fline]) + max_displayed_line)
) {
if (eof_error > 0) /* did NOT reach eof yet */
@@ -1608,6 +1608,9 @@ static void sigwinch_handler(int sig UNUSED_PARAM)
int less_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE;
int less_main(int argc, char **argv)
{
+ char *tty_name;
+ int tty_fd;
+
INIT_G();
/* TODO: -x: do not interpret backspace, -xx: tab also */
@@ -1637,10 +1640,28 @@ int less_main(int argc, char **argv)
if (option_mask32 & FLAG_TILDE)
empty_line_marker = "";
- kbd_fd = open(CURRENT_TTY, O_RDONLY);
- if (kbd_fd < 0)
- return bb_cat(argv);
- ndelay_on(kbd_fd);
+ /* Some versions of less can survive w/o controlling tty,
+ * try to do the same. This also allows to specify an alternative
+ * tty via "less 1<>TTY".
+ * We don't try to use STDOUT_FILENO directly,
+ * since we want to set this fd to non-blocking mode,
+ * and not bother with restoring it on exit.
+ */
+ tty_name = xmalloc_ttyname(STDOUT_FILENO);
+ if (tty_name) {
+ tty_fd = open(tty_name, O_RDONLY);
+ free(tty_name);
+ if (tty_fd < 0)
+ goto try_ctty;
+ } else {
+ /* Try controlling tty */
+ try_ctty:
+ tty_fd = open(CURRENT_TTY, O_RDONLY);
+ if (tty_fd < 0)
+ return bb_cat(argv);
+ }
+ ndelay_on(tty_fd);
+ kbd_fd = tty_fd; /* save in a global */
tcgetattr(kbd_fd, &term_orig);
term_less = term_orig;
diff --git a/miscutils/man.c b/miscutils/man.c
index e380fda..9d58ef4 100644
--- a/miscutils/man.c
+++ b/miscutils/man.c
@@ -102,7 +102,7 @@ static int run_pipe(const char *pager, char *man_filename, int man, int level)
ordinary_manpage:
close(STDIN_FILENO);
- open_zipped(man_filename); /* guaranteed to use fd 0 (STDIN_FILENO) */
+ open_zipped(man_filename, /*fail_if_not_compressed:*/ 0); /* guaranteed to use fd 0 (STDIN_FILENO) */
/* "2>&1" is added so that nroff errors are shown in pager too.
* Otherwise it may show just empty screen */
cmd = xasprintf(
@@ -162,7 +162,7 @@ int man_main(int argc UNUSED_PARAM, char **argv)
opt = getopt32(argv, "+aw");
argv += optind;
- sec_list = xstrdup("1:2:3:4:5:6:7:8:9");
+ sec_list = xstrdup("0p:1:1p:2:3:3p:4:5:6:7:8:9");
/* Last valid man_path_list[] is [0x10] */
count_mp = 0;
man_path_list = xzalloc(0x11 * sizeof(man_path_list[0]));
diff --git a/miscutils/nandwrite.c b/miscutils/nandwrite.c
index 5dc1373..d5ae1e7 100644
--- a/miscutils/nandwrite.c
+++ b/miscutils/nandwrite.c
@@ -23,7 +23,7 @@
//config: Dump the content of raw NAND chip
//applet:IF_NANDWRITE(APPLET(nandwrite, BB_DIR_USR_SBIN, BB_SUID_DROP))
-//applet:IF_NANDWRITE(APPLET_ODDNAME(nanddump, nandwrite, BB_DIR_USR_SBIN, BB_SUID_DROP, nanddump))
+//applet:IF_NANDDUMP(APPLET_ODDNAME(nanddump, nandwrite, BB_DIR_USR_SBIN, BB_SUID_DROP, nanddump))
//kbuild:lib-$(CONFIG_NANDWRITE) += nandwrite.o
//kbuild:lib-$(CONFIG_NANDDUMP) += nandwrite.o
@@ -31,14 +31,14 @@
//usage:#define nandwrite_trivial_usage
//usage: "[-p] [-s ADDR] MTD_DEVICE [FILE]"
//usage:#define nandwrite_full_usage "\n\n"
-//usage: "Write to the specified MTD device\n"
+//usage: "Write to MTD_DEVICE\n"
//usage: "\n -p Pad to page size"
//usage: "\n -s ADDR Start address"
//usage:#define nanddump_trivial_usage
-//usage: "[-o] [-b] [-s ADDR] [-f FILE] MTD_DEVICE"
+//usage: "[-o] [-b] [-s ADDR] [-l LEN] [-f FILE] MTD_DEVICE"
//usage:#define nanddump_full_usage "\n\n"
-//usage: "Dump the specified MTD device\n"
+//usage: "Dump MTD_DEVICE\n"
//usage: "\n -o Dump oob data"
//usage: "\n -b Omit bad block from the dump"
//usage: "\n -s ADDR Start address"
diff --git a/miscutils/rfkill.c b/miscutils/rfkill.c
index 4671973..7411b6f 100644
--- a/miscutils/rfkill.c
+++ b/miscutils/rfkill.c
@@ -7,6 +7,23 @@
* Licensed under GPLv2 or later, see file LICENSE in this source tree.
*/
+//config:config RFKILL
+//config: bool "rfkill"
+//config: default n # doesn't build on Ubuntu 9.04
+//config: select PLATFORM_LINUX
+//config: help
+//config: Enable/disable wireless devices.
+//config:
+//config: rfkill list : list all wireless devices
+//config: rfkill list bluetooth : list all bluetooth devices
+//config: rfkill list 1 : list device corresponding to the given index
+//config: rfkill block|unblock wlan : block/unblock all wlan(wifi) devices
+//config:
+
+//applet:IF_RFKILL(APPLET(rfkill, BB_DIR_USR_SBIN, BB_SUID_DROP))
+
+//kbuild:lib-$(CONFIG_RFKILL) += rfkill.o
+
//usage:#define rfkill_trivial_usage
//usage: "COMMAND [INDEX|TYPE]"
//usage:#define rfkill_full_usage "\n\n"
diff --git a/miscutils/setserial.c b/miscutils/setserial.c
index 2a034e3..dfed330 100644
--- a/miscutils/setserial.c
+++ b/miscutils/setserial.c
@@ -223,7 +223,7 @@ struct serial_struct {
//usage: " -v Verbose\n"
//usage: "\n"
//usage: "Parameters: (* = takes an argument, ^ = can be turned off by preceding ^)\n"
-//usage: " *port, *irq, *divisor, *uart, *baund_base, *close_delay, *closing_wait,\n"
+//usage: " *port, *irq, *divisor, *uart, *baud_base, *close_delay, *closing_wait,\n"
//usage: " ^fourport, ^auto_irq, ^skip_test, ^sak, ^session_lockout, ^pgrp_lockout,\n"
//usage: " ^callout_nohup, ^split_termios, ^hup_notify, ^low_latency, autoconfig,\n"
//usage: " spd_normal, spd_hi, spd_vhi, spd_shi, spd_warp, spd_cust\n"
@@ -311,7 +311,7 @@ static const char commands[] =
"irq\0"
"divisor\0"
"uart\0"
- "baund_base\0"
+ "baud_base\0"
"close_delay\0"
"closing_wait\0"
diff --git a/miscutils/setsid.c b/miscutils/setsid.c
index ad2c8a4..637081b 100644
--- a/miscutils/setsid.c
+++ b/miscutils/setsid.c
@@ -31,7 +31,17 @@ int setsid_main(int argc UNUSED_PARAM, char **argv)
/* setsid() is allowed only when we are not a process group leader.
* Otherwise our PID serves as PGID of some existing process group
- * and cannot be used as PGID of a new process group. */
+ * and cannot be used as PGID of a new process group.
+ *
+ * Example: setsid() below fails when run alone in interactive shell:
+ * $ setsid PROG
+ * because shell's child (setsid) is put in a new process group.
+ * But doesn't fail if shell is not interactive
+ * (and therefore doesn't create process groups for pipes),
+ * or if setsid is not the first process in the process group:
+ * $ true | setsid PROG
+ * or if setsid is executed in backquotes (`setsid PROG`)...
+ */
if (setsid() < 0) {
pid_t pid = fork_or_rexec(argv);
if (pid != 0) {
@@ -43,7 +53,7 @@ int setsid_main(int argc UNUSED_PARAM, char **argv)
* However, the code is larger and upstream
* does not do such trick.
*/
- exit(EXIT_SUCCESS);
+ return EXIT_SUCCESS;
}
/* child */
diff --git a/miscutils/ubi_tools.c b/miscutils/ubi_tools.c
index dd99a44..b713935 100644
--- a/miscutils/ubi_tools.c
+++ b/miscutils/ubi_tools.c
@@ -66,14 +66,6 @@
#endif
#include <mtd/ubi-user.h>
-#define OPTION_M (1 << 0)
-#define OPTION_D (1 << 1)
-#define OPTION_n (1 << 2)
-#define OPTION_N (1 << 3)
-#define OPTION_s (1 << 4)
-#define OPTION_a (1 << 5)
-#define OPTION_t (1 << 6)
-
#define do_attach (ENABLE_UBIATTACH && applet_name[3] == 'a')
#define do_detach (ENABLE_UBIDETACH && applet_name[3] == 'd')
#define do_mkvol (ENABLE_UBIMKVOL && applet_name[3] == 'm')
@@ -81,191 +73,250 @@
#define do_rsvol (ENABLE_UBIRSVOL && applet_name[4] == 's')
#define do_update (ENABLE_UBIUPDATEVOL && applet_name[3] == 'u')
-//usage:#define ubiattach_trivial_usage
-//usage: "-m MTD_NUM [-d UBI_NUM] UBI_CTRL_DEV"
-//usage:#define ubiattach_full_usage "\n\n"
-//usage: "Attach MTD device to UBI\n"
-//usage: "\n -m MTD_NUM MTD device number to attach"
-//usage: "\n -d UBI_NUM UBI device number to assign"
-//usage:
-//usage:#define ubidetach_trivial_usage
-//usage: "-d UBI_NUM UBI_CTRL_DEV"
-//usage:#define ubidetach_full_usage "\n\n"
-//usage: "Detach MTD device from UBI\n"
-//usage: "\n -d UBI_NUM UBI device number"
-//usage:
-//usage:#define ubimkvol_trivial_usage
-//usage: "UBI_DEVICE -N NAME -s SIZE"
-//usage:#define ubimkvol_full_usage "\n\n"
-//usage: "Create UBI volume\n"
-//usage: "\n -a ALIGNMENT Volume alignment (default 1)"
-//usage: "\n -n VOLID Volume ID, if not specified, it"
-//usage: "\n will be assigned automatically"
-//usage: "\n -N NAME Volume name"
-//usage: "\n -s SIZE Size in bytes"
-//usage: "\n -t TYPE Volume type (static|dynamic)"
-//usage:
-//usage:#define ubirmvol_trivial_usage
-//usage: "UBI_DEVICE -n VOLID"
-//usage:#define ubirmvol_full_usage "\n\n"
-//usage: "Remove UBI volume\n"
-//usage: "\n -n VOLID Volume ID"
-//usage:
-//usage:#define ubirsvol_trivial_usage
-//usage: "UBI_DEVICE -n VOLID -s SIZE"
-//usage:#define ubirsvol_full_usage "\n\n"
-//usage: "Resize UBI volume\n"
-//usage: "\n -n VOLID Volume ID to resize"
-//usage: "\n -s SIZE Size in bytes"
-//usage:
-//usage:#define ubiupdatevol_trivial_usage
-//usage: "UBI_DEVICE [IMG_FILE]"
-//usage:#define ubiupdatevol_full_usage "\n\n"
-//usage: "Update UBI volume\n"
-//usage: "\n -t Truncate UBI volume"
-//usage: "\n -s SIZE Bytes in input (if reading stdin)"
+static unsigned get_num_from_file(const char *path, unsigned max, const char *errmsg)
+{
+ char buf[sizeof(long long)*3];
+ unsigned long long num;
+
+ if (open_read_close(path, buf, sizeof(buf)) < 0)
+ bb_perror_msg_and_die(errmsg, path);
+ /* It can be \n terminated, xatoull won't work well */
+ if (sscanf(buf, "%llu", &num) != 1 || num > max)
+ bb_error_msg_and_die(errmsg, path);
+ return num;
+}
+/* To prevent malloc(1G) accidents */
+#define MAX_SANE_ERASEBLOCK (16*1024*1024)
int ubi_tools_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE;
int ubi_tools_main(int argc UNUSED_PARAM, char **argv)
{
+ static const struct suffix_mult size_suffixes[] = {
+ { "KiB", 1024 },
+ { "MiB", 1024*1024 },
+ { "GiB", 1024*1024*1024 },
+ { "", 0 }
+ };
+
unsigned opts;
char *ubi_ctrl;
- //struct stat st;
int fd;
int mtd_num;
int dev_num = UBI_DEV_NUM_AUTO;
int vol_id = UBI_VOL_NUM_AUTO;
- char *vol_name = NULL;
- int size_bytes;
+ char *vol_name;
+ unsigned long long size_bytes = size_bytes; /* for compiler */
+ char *size_bytes_str;
int alignment = 1;
- char *type = NULL;
+ char *type;
+ union {
+ struct ubi_attach_req attach_req;
+ struct ubi_mkvol_req mkvol_req;
+ struct ubi_rsvol_req rsvol_req;
+ } req_structs;
+#define attach_req req_structs.attach_req
+#define mkvol_req req_structs.mkvol_req
+#define rsvol_req req_structs.rsvol_req
+ char path[sizeof("/sys/class/ubi/ubi%d_%d/usable_eb_size")
+ + 2 * sizeof(int)*3 + /*just in case:*/ 16];
+#define path_sys_class_ubi_ubi (path + sizeof("/sys/class/ubi/ubi")-1)
+
+ strcpy(path, "/sys/class/ubi/ubi");
+ memset(&req_structs, 0, sizeof(req_structs));
+
+ if (do_mkvol) {
+ opt_complementary = "-1:d+:n+:a+";
+ opts = getopt32(argv, "md:n:N:s:a:t:",
+ &dev_num, &vol_id,
+ &vol_name, &size_bytes_str, &alignment, &type
+ );
+ } else {
+ opt_complementary = "-1:m+:d+:n+:a+";
+ opts = getopt32(argv, "m:d:n:N:s:a:t:",
+ &mtd_num, &dev_num, &vol_id,
+ &vol_name, &size_bytes_str, &alignment, &type
+ );
+ }
+#define OPTION_m (1 << 0)
+#define OPTION_d (1 << 1)
+#define OPTION_n (1 << 2)
+#define OPTION_N (1 << 3)
+#define OPTION_s (1 << 4)
+#define OPTION_a (1 << 5)
+#define OPTION_t (1 << 6)
- opt_complementary = "-1:m+:d+:n+:s+:a+";
- opts = getopt32(argv, "m:d:n:N:s:a:t::",
- &mtd_num, &dev_num, &vol_id,
- &vol_name, &size_bytes, &alignment, &type
- );
- ubi_ctrl = argv[optind];
+ if (opts & OPTION_s)
+ size_bytes = xatoull_sfx(size_bytes_str, size_suffixes);
+ argv += optind;
+ ubi_ctrl = *argv++;
fd = xopen(ubi_ctrl, O_RDWR);
//xfstat(fd, &st, ubi_ctrl);
//if (!S_ISCHR(st.st_mode))
// bb_error_msg_and_die("%s: not a char device", ubi_ctrl);
+//usage:#define ubiattach_trivial_usage
+//usage: "-m MTD_NUM [-d UBI_NUM] UBI_CTRL_DEV"
+//usage:#define ubiattach_full_usage "\n\n"
+//usage: "Attach MTD device to UBI\n"
+//usage: "\n -m MTD_NUM MTD device number to attach"
+//usage: "\n -d UBI_NUM UBI device number to assign"
if (do_attach) {
- struct ubi_attach_req req;
- if (!(opts & OPTION_M))
+ if (!(opts & OPTION_m))
bb_error_msg_and_die("%s device not specified", "MTD");
- memset(&req, 0, sizeof(req));
- req.mtd_num = mtd_num;
- req.ubi_num = dev_num;
+ attach_req.mtd_num = mtd_num;
+ attach_req.ubi_num = dev_num;
- xioctl(fd, UBI_IOCATT, &req);
+ xioctl(fd, UBI_IOCATT, &attach_req);
} else
+
+//usage:#define ubidetach_trivial_usage
+//usage: "-d UBI_NUM UBI_CTRL_DEV"
+//usage:#define ubidetach_full_usage "\n\n"
+//usage: "Detach MTD device from UBI\n"
+//usage: "\n -d UBI_NUM UBI device number"
if (do_detach) {
- if (!(opts & OPTION_D))
+ if (!(opts & OPTION_d))
bb_error_msg_and_die("%s device not specified", "UBI");
+ /* FIXME? kernel expects int32_t* here: */
xioctl(fd, UBI_IOCDET, &dev_num);
} else
+
+//usage:#define ubimkvol_trivial_usage
+//usage: "UBI_DEVICE -N NAME [-s SIZE | -m]"
+//usage:#define ubimkvol_full_usage "\n\n"
+//usage: "Create UBI volume\n"
+//usage: "\n -a ALIGNMENT Volume alignment (default 1)"
+//usage: "\n -m Set volume size to maximum available"
+//usage: "\n -n VOLID Volume ID. If not specified,"
+//usage: "\n assigned automatically"
+//usage: "\n -N NAME Volume name"
+//usage: "\n -s SIZE Size in bytes"
+//usage: "\n -t TYPE Volume type (static|dynamic)"
if (do_mkvol) {
- struct ubi_mkvol_req req;
- int vol_name_len;
+ if (opts & OPTION_m) {
+ unsigned leb_avail;
+ unsigned leb_size;
+ unsigned num;
+ char *p;
+
+ if (sscanf(ubi_ctrl, "/dev/ubi%u", &num) != 1)
+ bb_error_msg_and_die("wrong format of UBI device name");
+
+ p = path_sys_class_ubi_ubi + sprintf(path_sys_class_ubi_ubi, "%u/", num);
+
+ strcpy(p, "avail_eraseblocks");
+ leb_avail = get_num_from_file(path, UINT_MAX, "Can't get available eraseblocks from '%s'");
+
+ strcpy(p, "eraseblock_size");
+ leb_size = get_num_from_file(path, MAX_SANE_ERASEBLOCK, "Can't get eraseblock size from '%s'");
+
+ size_bytes = leb_avail * (unsigned long long)leb_size;
+ //if (size_bytes <= 0)
+ // bb_error_msg_and_die("%s invalid maximum size calculated", "UBI");
+ } else
if (!(opts & OPTION_s))
- bb_error_msg_and_die("%s size not specified", "UBI");
+ bb_error_msg_and_die("size not specified");
+
if (!(opts & OPTION_N))
- bb_error_msg_and_die("%s name not specified", "UBI");
- vol_name_len = strlen(vol_name);
- if (vol_name_len > UBI_MAX_VOLUME_NAME)
- bb_error_msg_and_die("%s volume name too long", "UBI");
-
- memset(&req, 0, sizeof(req));
- req.vol_id = vol_id;
- if ((opts & OPTION_t) && type) {
- if (type[0] == 's')
- req.vol_type = UBI_STATIC_VOLUME;
- else
- req.vol_type = UBI_DYNAMIC_VOLUME;
- } else {
- req.vol_type = UBI_DYNAMIC_VOLUME;
- }
- req.alignment = alignment;
- req.bytes = size_bytes;
- strncpy(req.name, vol_name, UBI_MAX_VOLUME_NAME);
- req.name_len = vol_name_len;
+ bb_error_msg_and_die("name not specified");
+
+ mkvol_req.vol_id = vol_id;
+ mkvol_req.vol_type = UBI_DYNAMIC_VOLUME;
+ if ((opts & OPTION_t) && type[0] == 's')
+ mkvol_req.vol_type = UBI_STATIC_VOLUME;
+ mkvol_req.alignment = alignment;
+ mkvol_req.bytes = size_bytes; /* signed int64_t */
+ strncpy(mkvol_req.name, vol_name, UBI_MAX_VOLUME_NAME);
+ mkvol_req.name_len = strlen(vol_name);
+ if (mkvol_req.name_len > UBI_MAX_VOLUME_NAME)
+ bb_error_msg_and_die("volume name too long: '%s'", vol_name);
- xioctl(fd, UBI_IOCMKVOL, &req);
+ xioctl(fd, UBI_IOCMKVOL, &mkvol_req);
} else
+
+//usage:#define ubirmvol_trivial_usage
+//usage: "UBI_DEVICE -n VOLID"
+//usage:#define ubirmvol_full_usage "\n\n"
+//usage: "Remove UBI volume\n"
+//usage: "\n -n VOLID Volume ID"
if (do_rmvol) {
if (!(opts & OPTION_n))
- bb_error_msg_and_die("%s volume id not specified", "UBI");
+ bb_error_msg_and_die("volume id not specified");
+ /* FIXME? kernel expects int32_t* here: */
xioctl(fd, UBI_IOCRMVOL, &vol_id);
} else
+
+//usage:#define ubirsvol_trivial_usage
+//usage: "UBI_DEVICE -n VOLID -s SIZE"
+//usage:#define ubirsvol_full_usage "\n\n"
+//usage: "Resize UBI volume\n"
+//usage: "\n -n VOLID Volume ID"
+//usage: "\n -s SIZE Size in bytes"
if (do_rsvol) {
- struct ubi_rsvol_req req;
if (!(opts & OPTION_s))
- bb_error_msg_and_die("%s size not specified", "UBI");
+ bb_error_msg_and_die("size not specified");
if (!(opts & OPTION_n))
- bb_error_msg_and_die("%s volume id not specified", "UBI");
+ bb_error_msg_and_die("volume id not specified");
- memset(&req, 0, sizeof(req));
- req.bytes = size_bytes;
- req.vol_id = vol_id;
+ rsvol_req.bytes = size_bytes; /* signed int64_t */
+ rsvol_req.vol_id = vol_id;
- xioctl(fd, UBI_IOCRSVOL, &req);
+ xioctl(fd, UBI_IOCRSVOL, &rsvol_req);
} else
+
+//usage:#define ubiupdatevol_trivial_usage
+//usage: "UBI_DEVICE [-t | [-s SIZE] IMG_FILE]"
+//usage:#define ubiupdatevol_full_usage "\n\n"
+//usage: "Update UBI volume\n"
+//usage: "\n -t Truncate to zero size"
+//usage: "\n -s SIZE Size in bytes to resize to"
if (do_update) {
- long long bytes;
+ int64_t bytes64;
if (opts & OPTION_t) {
- // truncate the volume by starting an update for size 0
- bytes = 0;
- xioctl(fd, UBI_IOCVOLUP, &bytes);
+ /* truncate the volume by starting an update for size 0 */
+ bytes64 = 0;
+ /* this ioctl expects int64_t* parameter */
+ xioctl(fd, UBI_IOCVOLUP, &bytes64);
}
else {
struct stat st;
- char buf[sizeof("/sys/class/ubi/ubi%d_%d/usable_eb_size") + 2 * sizeof(int)*3];
- int input_fd;
unsigned ubinum, volnum;
unsigned leb_size;
ssize_t len;
char *input_data;
- // Make assumption that device not is in normal format.
- // Removes need for scanning sysfs tree as full libubi does
+ /* Assume that device is in normal format. */
+ /* Removes need for scanning sysfs tree as full libubi does. */
if (sscanf(ubi_ctrl, "/dev/ubi%u_%u", &ubinum, &volnum) != 2)
- bb_error_msg_and_die("%s volume node not in correct format", "UBI");
-
- sprintf(buf, "/sys/class/ubi/ubi%u_%u/usable_eb_size", ubinum, volnum);
- if (open_read_close(buf, buf, sizeof(buf)) <= 0)
- bb_error_msg_and_die("%s could not get LEB size", "UBI");
- if (sscanf(buf, "%u", &leb_size) != 1)
- bb_error_msg_and_die("%s could not get LEB size", "UBI");
-
- if (opts & OPTION_s) {
- input_fd = 0;
- } else {
- if (!argv[optind+1])
+ bb_error_msg_and_die("wrong format of UBI device name");
+
+ sprintf(path_sys_class_ubi_ubi, "%u_%u/usable_eb_size", ubinum, volnum);
+ leb_size = get_num_from_file(path, MAX_SANE_ERASEBLOCK, "Can't get usable eraseblock size from '%s'");
+
+ if (!(opts & OPTION_s)) {
+ if (!*argv)
bb_show_usage();
- xstat(argv[optind+1], &st);
+ xstat(*argv, &st);
size_bytes = st.st_size;
- input_fd = xopen(argv[optind+1], O_RDONLY);
+ xmove_fd(xopen(*argv, O_RDONLY), STDIN_FILENO);
}
- bytes = size_bytes;
- xioctl(fd, UBI_IOCVOLUP, &bytes);
+ bytes64 = size_bytes;
+ /* this ioctl expects signed int64_t* parameter */
+ xioctl(fd, UBI_IOCVOLUP, &bytes64);
input_data = xmalloc(leb_size);
- while ((len = full_read(input_fd, input_data, leb_size)) > 0) {
+ while ((len = full_read(STDIN_FILENO, input_data, leb_size)) > 0) {
xwrite(fd, input_data, len);
}
if (len < 0)
- bb_error_msg_and_die("%s volume update failed", "UBI");
- if (ENABLE_FEATURE_CLEAN_UP)
- close(input_fd);
+ bb_perror_msg_and_die("UBI volume update failed");
}
}
diff --git a/miscutils/wall.c b/miscutils/wall.c
index 762f53b..bb709ee 100644
--- a/miscutils/wall.c
+++ b/miscutils/wall.c
@@ -6,6 +6,18 @@
* Licensed under GPLv2 or later, see file LICENSE in this source tree.
*/
+//config:config WALL
+//config: bool "wall"
+//config: default y
+//config: depends on FEATURE_UTMP
+//config: help
+//config: Write a message to all users that are logged in.
+
+/* Needs to be run by root or be suid root - needs to write to /dev/TTY: */
+//applet:IF_WALL(APPLET(wall, BB_DIR_USR_BIN, BB_SUID_REQUIRE))
+
+//kbuild:lib-$(CONFIG_WALL) += wall.o
+
//usage:#define wall_trivial_usage
//usage: "[FILE]"
//usage:#define wall_full_usage "\n\n"
@@ -22,8 +34,15 @@ int wall_main(int argc UNUSED_PARAM, char **argv)
{
struct utmp *ut;
char *msg;
- int fd = argv[1] ? xopen(argv[1], O_RDONLY) : STDIN_FILENO;
+ int fd;
+ fd = STDIN_FILENO;
+ if (argv[1]) {
+ /* The applet is setuid.
+ * Access to the file must be under user's uid/gid.
+ */
+ fd = xopen_as_uid_gid(argv[1], O_RDONLY, getuid(), getgid());
+ }
msg = xmalloc_read(fd, NULL);
if (ENABLE_FEATURE_CLEAN_UP && argv[1])
close(fd);
diff --git a/modutils/modprobe.c b/modutils/modprobe.c
index 7ea5a11..f6f45f3 100644
--- a/modutils/modprobe.c
+++ b/modutils/modprobe.c
@@ -175,7 +175,7 @@ struct globals {
} FIX_ALIASING;
#define G (*ptr_to_globals)
#define INIT_G() do { \
- SET_PTR_TO_GLOBALS(xzalloc(sizeof(G))); \
+ SET_PTR_TO_GLOBALS(xzalloc(sizeof(G))); \
} while (0)
diff --git a/networking/Config.src b/networking/Config.src
index e1ae0c9..ca0ddcd 100644
--- a/networking/Config.src
+++ b/networking/Config.src
@@ -970,16 +970,18 @@ config FEATURE_WGET_LONG_OPTIONS
Support long options for the wget applet.
config FEATURE_WGET_TIMEOUT
- bool "Enable read timeout option -T SEC"
+ bool "Enable timeout option -T SEC"
default y
depends on WGET
help
- Supports network read timeout for wget, so that wget will give
- up and timeout when reading network data, through the -T command
- line option. Currently only network data read timeout is
- supported (i.e., timeout is not applied to the DNS nor TCP
- connection initialization). When FEATURE_WGET_LONG_OPTIONS is
- also enabled, the --timeout option will work in addition to -T.
+ Supports network read and connect timeouts for wget,
+ so that wget will give up and timeout, through the -T
+ command line option.
+
+ Currently only connect and network data read timeout are
+ supported (i.e., timeout is not applied to the DNS query). When
+ FEATURE_WGET_LONG_OPTIONS is also enabled, the --timeout option
+ will work in addition to -T.
config ZCIP
bool "zcip"
diff --git a/networking/arp.c b/networking/arp.c
index 1c99987..e79b1b6 100644
--- a/networking/arp.c
+++ b/networking/arp.c
@@ -22,12 +22,12 @@
//usage:#define arp_full_usage "\n\n"
//usage: "Manipulate ARP cache\n"
//usage: "\n -a Display (all) hosts"
-//usage: "\n -s Set new ARP entry"
-//usage: "\n -d Delete a specified entry"
+//usage: "\n -d Delete ARP entry"
+//usage: "\n -s Set new entry"
//usage: "\n -v Verbose"
//usage: "\n -n Don't resolve names"
//usage: "\n -i IF Network interface"
-//usage: "\n -D Read <hwaddr> from given device"
+//usage: "\n -D Read HWADDR from IFACE"
//usage: "\n -A,-p AF Protocol family"
//usage: "\n -H HWTYPE Hardware address type"
@@ -213,16 +213,15 @@ static int arp_del(char **args)
}
/* Get the hardware address to a specified interface name */
-static void arp_getdevhw(char *ifname, struct sockaddr *sa,
- const struct hwtype *hwt)
+static void arp_getdevhw(char *ifname, struct sockaddr *sa)
{
struct ifreq ifr;
const struct hwtype *xhw;
strcpy(ifr.ifr_name, ifname);
ioctl_or_perror_and_die(sockfd, SIOCGIFHWADDR, &ifr,
- "cant get HW-Address for '%s'", ifname);
- if (hwt && (ifr.ifr_hwaddr.sa_family != hw->type)) {
+ "can't get HW-Address for '%s'", ifname);
+ if (hw_set && (ifr.ifr_hwaddr.sa_family != hw->type)) {
bb_error_msg_and_die("protocol type mismatch");
}
memcpy(sa, &(ifr.ifr_hwaddr), sizeof(struct sockaddr));
@@ -233,8 +232,8 @@ static void arp_getdevhw(char *ifname, struct sockaddr *sa,
xhw = get_hwntype(-1);
}
bb_error_msg("device '%s' has HW address %s '%s'",
- ifname, xhw->name,
- xhw->print((unsigned char *) &ifr.ifr_hwaddr.sa_data));
+ ifname, xhw->name,
+ xhw->print((unsigned char *) &ifr.ifr_hwaddr.sa_data));
}
}
@@ -261,7 +260,7 @@ static int arp_set(char **args)
bb_error_msg_and_die("need hardware address");
}
if (option_mask32 & ARP_OPT_D) {
- arp_getdevhw(*args++, &req.arp_ha, hw_set ? hw : NULL);
+ arp_getdevhw(*args++, &req.arp_ha);
} else {
if (hw->input(*args++, &req.arp_ha) < 0) {
bb_error_msg_and_die("invalid hardware address");
@@ -460,12 +459,12 @@ static int arp_show(char *name)
arp_disp(hostname, ip, type, flags, hwa, mask, dev);
}
if (option_mask32 & ARP_OPT_v)
- printf("Entries: %d\tSkipped: %d\tFound: %d\n",
+ printf("Entries: %u\tSkipped: %u\tFound: %u\n",
entries, entries - shown, shown);
if (!shown) {
if (hw_set || host || device[0])
- printf("No match found in %d entries\n", entries);
+ printf("No match found in %u entries\n", entries);
}
if (ENABLE_FEATURE_CLEAN_UP) {
free((char*)host);
@@ -477,28 +476,33 @@ static int arp_show(char *name)
int arp_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE;
int arp_main(int argc UNUSED_PARAM, char **argv)
{
- const char *hw_type = "ether";
+ const char *hw_type;
const char *protocol;
unsigned opts;
INIT_G();
xmove_fd(xsocket(AF_INET, SOCK_DGRAM, 0), sockfd);
+
ap = get_aftype(DFLT_AF);
- if (!ap)
- bb_error_msg_and_die("%s: %s not supported", DFLT_AF, "address family");
+ /* Defaults are always supported */
+ //if (!ap)
+ // bb_error_msg_and_die("%s: %s not supported", DFLT_AF, "address family");
+ hw = get_hwtype(DFLT_HW);
+ //if (!hw)
+ // bb_error_msg_and_die("%s: %s not supported", DFLT_HW, "hardware type");
opts = getopt32(argv, "A:p:H:t:i:adnDsv", &protocol, &protocol,
&hw_type, &hw_type, &device);
argv += optind;
if (opts & (ARP_OPT_A | ARP_OPT_p)) {
ap = get_aftype(protocol);
- if (ap == NULL)
+ if (!ap)
bb_error_msg_and_die("%s: unknown %s", protocol, "address family");
}
- if (opts & (ARP_OPT_A | ARP_OPT_p)) {
+ if (opts & (ARP_OPT_H | ARP_OPT_t)) {
hw = get_hwtype(hw_type);
- if (hw == NULL)
+ if (!hw)
bb_error_msg_and_die("%s: unknown %s", hw_type, "hardware type");
hw_set = 1;
}
@@ -507,14 +511,6 @@ int arp_main(int argc UNUSED_PARAM, char **argv)
if (ap->af != AF_INET) {
bb_error_msg_and_die("%s: kernel only supports 'inet'", ap->name);
}
-
- /* If no hw type specified get default */
- if (!hw) {
- hw = get_hwtype(DFLT_HW);
- if (!hw)
- bb_error_msg_and_die("%s: %s not supported", DFLT_HW, "hardware type");
- }
-
if (hw->alen <= 0) {
bb_error_msg_and_die("%s: %s without ARP support",
hw->name, "hardware type");
@@ -528,6 +524,7 @@ int arp_main(int argc UNUSED_PARAM, char **argv)
return arp_set(argv);
return arp_del(argv);
}
+
//if (opts & ARP_OPT_a) - default
return arp_show(argv[0]);
}
diff --git a/networking/ether-wake.c b/networking/ether-wake.c
index bf09cd5..c38547d 100644
--- a/networking/ether-wake.c
+++ b/networking/ether-wake.c
@@ -62,17 +62,17 @@
* An alternative to needing 'root' is using a UDP broadcast socket, however
* doing so only works with adapters configured for unicast+broadcast Rx
* filter. That configuration consumes more power.
-*/
+ */
//usage:#define ether_wake_trivial_usage
-//usage: "[-b] [-i iface] [-p aa:bb:cc:dd[:ee:ff]] MAC"
+//usage: "[-b] [-i IFACE] [-p aa:bb:cc:dd[:ee:ff]/a.b.c.d] MAC"
//usage:#define ether_wake_full_usage "\n\n"
//usage: "Send a magic packet to wake up sleeping machines.\n"
//usage: "MAC must be a station address (00:11:22:33:44:55) or\n"
//usage: "a hostname with a known 'ethers' entry.\n"
-//usage: "\n -b Send wake-up packet to the broadcast address"
-//usage: "\n -i iface Interface to use (default eth0)"
-//usage: "\n -p pass Append four or six byte password PW to the packet"
+//usage: "\n -b Broadcast the packet"
+//usage: "\n -i IFACE Interface to use (default eth0)"
+//usage: "\n -p PASSWORD Append four or six byte PASSWORD to the packet"
#include "libbb.h"
#include <netpacket/packet.h>
@@ -121,10 +121,7 @@ static void get_dest_addr(const char *hostid, struct ether_addr *eaddr)
eap = ether_aton_r(hostid, eaddr);
if (eap) {
bb_debug_msg("The target station address is %s\n\n", ether_ntoa(eap));
-#if !defined(__UCLIBC_MAJOR__) \
- || __UCLIBC_MAJOR__ > 0 \
- || __UCLIBC_MINOR__ > 9 \
- || (__UCLIBC_MINOR__ == 9 && __UCLIBC_SUBLEVEL__ >= 30)
+#if !defined(__UCLIBC__) || UCLIBC_VERSION >= KERNEL_VERSION(0, 9, 30)
} else if (ether_hostton(hostid, eaddr) == 0) {
bb_debug_msg("Station address for hostname %s is %s\n\n", hostid, ether_ntoa(eaddr));
#endif
@@ -133,7 +130,8 @@ static void get_dest_addr(const char *hostid, struct ether_addr *eaddr)
}
}
-static int get_fill(unsigned char *pkt, struct ether_addr *eaddr, int broadcast)
+#define PKT_HEADER_SIZE (20 + 16*6)
+static int fill_pkt_header(unsigned char *pkt, struct ether_addr *eaddr, int broadcast)
{
int i;
unsigned char *station_addr = eaddr->ether_addr_octet;
@@ -156,7 +154,7 @@ static int get_fill(unsigned char *pkt, struct ether_addr *eaddr, int broadcast)
memcpy(pkt, station_addr, 6); /* 20,26,32,... */
}
- return 20 + 16*6; /* length of packet */
+ return PKT_HEADER_SIZE; /* length of packet */
}
static int get_wol_pw(const char *ethoptarg, unsigned char *wol_passwd)
@@ -198,7 +196,7 @@ int ether_wake_main(int argc UNUSED_PARAM, char **argv)
int wol_passwd_sz = 0;
int s; /* Raw socket */
int pktsize;
- unsigned char outpack[1000];
+ unsigned char outpack[PKT_HEADER_SIZE + 6 /* max passwd size */ + 16 /* paranoia */];
struct ether_addr eaddr;
struct whereto_t whereto; /* who to wake up */
@@ -220,7 +218,7 @@ int ether_wake_main(int argc UNUSED_PARAM, char **argv)
get_dest_addr(argv[optind], &eaddr);
/* fill out the header of the packet */
- pktsize = get_fill(outpack, &eaddr, flags /* & 1 OPT_BROADCAST */);
+ pktsize = fill_pkt_header(outpack, &eaddr, flags /* & 1 OPT_BROADCAST */);
bb_debug_dump_packet(outpack, pktsize);
diff --git a/networking/hostname.c b/networking/hostname.c
index 5209bc8..4da5b40 100644
--- a/networking/hostname.c
+++ b/networking/hostname.c
@@ -106,7 +106,7 @@ int hostname_main(int argc UNUSED_PARAM, char **argv)
OPT_i = 0x4,
OPT_s = 0x8,
OPT_F = 0x10,
- OPT_dfis = 0xf,
+ OPT_dfi = 0x7,
};
unsigned opts;
@@ -134,7 +134,7 @@ int hostname_main(int argc UNUSED_PARAM, char **argv)
if (applet_name[0] == 'd') /* dnsdomainname? */
opts = OPT_d;
- if (opts & OPT_dfis) {
+ if (opts & OPT_dfi) {
/* Cases when we need full hostname (or its part) */
struct hostent *hp;
char *p;
@@ -159,6 +159,9 @@ int hostname_main(int argc UNUSED_PARAM, char **argv)
bb_putchar('\n');
}
}
+ } else if (opts & OPT_s) {
+ strchrnul(buf, '.')[0] = '\0';
+ puts(buf);
} else if (opts & OPT_F) {
/* Set the hostname */
do_sethostname(hostname_str, 1);
diff --git a/networking/httpd.c b/networking/httpd.c
index 1934bb2..621d9cd 100644
--- a/networking/httpd.c
+++ b/networking/httpd.c
@@ -1104,18 +1104,31 @@ static NOINLINE void cgi_io_loop_and_exit(int fromCgi_rd, int toCgi_wr, int post
/* NB: breaking out of this loop jumps to log_and_exit() */
out_cnt = 0;
+ pfd[FROM_CGI].fd = fromCgi_rd;
+ pfd[FROM_CGI].events = POLLIN;
+ pfd[TO_CGI].fd = toCgi_wr;
while (1) {
- memset(pfd, 0, sizeof(pfd));
-
- pfd[FROM_CGI].fd = fromCgi_rd;
- pfd[FROM_CGI].events = POLLIN;
-
- if (toCgi_wr) {
- pfd[TO_CGI].fd = toCgi_wr;
- if (hdr_cnt > 0) {
- pfd[TO_CGI].events = POLLOUT;
- } else if (post_len > 0) {
- pfd[0].events = POLLIN;
+ /* Note: even pfd[0].events == 0 won't prevent
+ * revents == POLLHUP|POLLERR reports from closed stdin.
+ * Setting fd to -1 works: */
+ pfd[0].fd = -1;
+ pfd[0].events = POLLIN;
+ pfd[0].revents = 0; /* probably not needed, paranoia */
+
+ /* We always poll this fd, thus kernel always sets revents: */
+ /*pfd[FROM_CGI].events = POLLIN; - moved out of loop */
+ /*pfd[FROM_CGI].revents = 0; - not needed */
+
+ /* gcc-4.8.0 still doesnt fill two shorts with one insn :( */
+ /* http://gcc.gnu.org/bugzilla/show_bug.cgi?id=47059 */
+ /* hopefully one day it will... */
+ pfd[TO_CGI].events = POLLOUT;
+ pfd[TO_CGI].revents = 0; /* needed! */
+
+ if (toCgi_wr && hdr_cnt <= 0) {
+ if (post_len > 0) {
+ /* Expect more POST data from network */
+ pfd[0].fd = 0;
} else {
/* post_len <= 0 && hdr_cnt <= 0:
* no more POST data to CGI,
@@ -1127,7 +1140,7 @@ static NOINLINE void cgi_io_loop_and_exit(int fromCgi_rd, int toCgi_wr, int post
}
/* Now wait on the set of sockets */
- count = safe_poll(pfd, toCgi_wr ? TO_CGI+1 : FROM_CGI+1, -1);
+ count = safe_poll(pfd, hdr_cnt > 0 ? TO_CGI+1 : FROM_CGI+1, -1);
if (count <= 0) {
#if 0
if (safe_waitpid(pid, &status, WNOHANG) <= 0) {
@@ -1144,7 +1157,7 @@ static NOINLINE void cgi_io_loop_and_exit(int fromCgi_rd, int toCgi_wr, int post
}
if (pfd[TO_CGI].revents) {
- /* hdr_cnt > 0 here due to the way pfd[TO_CGI].events set */
+ /* hdr_cnt > 0 here due to the way poll() called */
/* Have data from peer and can write to CGI */
count = safe_write(toCgi_wr, hdr_ptr, hdr_cnt);
/* Doesn't happen, we dont use nonblocking IO here
@@ -1709,8 +1722,8 @@ static int pam_talker(int num_msg,
s = userinfo->pw;
break;
case PAM_ERROR_MSG:
- case PAM_TEXT_INFO:
- s = "";
+ case PAM_TEXT_INFO:
+ s = "";
break;
default:
free(response);
@@ -1964,7 +1977,9 @@ static void handle_incoming_and_exit(const len_and_sockaddr *fromAddr)
send_headers_and_exit(HTTP_BAD_REQUEST);
/* Determine type of request (GET/POST) */
- urlp = strpbrk(iobuf, " \t");
+ // rfc2616: method and URI is separated by exactly one space
+ //urlp = strpbrk(iobuf, " \t"); - no, tab isn't allowed
+ urlp = strchr(iobuf, ' ');
if (urlp == NULL)
send_headers_and_exit(HTTP_BAD_REQUEST);
*urlp++ = '\0';
@@ -1982,7 +1997,8 @@ static void handle_incoming_and_exit(const len_and_sockaddr *fromAddr)
if (strcasecmp(iobuf, request_GET) != 0)
send_headers_and_exit(HTTP_NOT_IMPLEMENTED);
#endif
- urlp = skip_whitespace(urlp);
+ // rfc2616: method and URI is separated by exactly one space
+ //urlp = skip_whitespace(urlp); - should not be necessary
if (urlp[0] != '/')
send_headers_and_exit(HTTP_BAD_REQUEST);
diff --git a/networking/ifconfig.c b/networking/ifconfig.c
index 5a934fa..dcbb552 100644
--- a/networking/ifconfig.c
+++ b/networking/ifconfig.c
@@ -56,7 +56,7 @@
#endif
#if ENABLE_FEATURE_IFCONFIG_SLIP
-# include <net/if_slip.h>
+# include <linux/if_slip.h>
#endif
/* I don't know if this is needed for busybox or not. Anyone? */
@@ -265,49 +265,6 @@ static const struct options OptArray[] = {
{ NULL, 0, ARG_HOSTNAME, (IFF_UP | IFF_RUNNING) }
};
-#if ENABLE_FEATURE_IFCONFIG_HW
-/* Input an Ethernet address and convert to binary. */
-static int in_ether(const char *bufp, struct sockaddr *sap)
-{
- char *ptr;
- int i, j;
- unsigned char val;
- unsigned char c;
-
- sap->sa_family = ARPHRD_ETHER;
- ptr = (char *) sap->sa_data;
-
- i = 0;
- do {
- j = val = 0;
-
- /* We might get a semicolon here - not required. */
- if (i && (*bufp == ':')) {
- bufp++;
- }
-
- do {
- c = *bufp;
- if (((unsigned char)(c - '0')) <= 9) {
- c -= '0';
- } else if ((unsigned char)((c|0x20) - 'a') <= 5) {
- c = (unsigned char)((c|0x20) - 'a') + 10;
- } else if (j && (c == ':' || c == 0)) {
- break;
- } else {
- return -1;
- }
- ++bufp;
- val <<= 4;
- val += c;
- } while (++j < 2);
- *ptr++ = val;
- } while (++i < ETH_ALEN);
-
- return *bufp; /* Error if we don't end at end of string. */
-}
-#endif
-
int ifconfig_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE;
int ifconfig_main(int argc UNUSED_PARAM, char **argv)
{
diff --git a/networking/ifplugd.c b/networking/ifplugd.c
index 86586f0..b578f4c 100644
--- a/networking/ifplugd.c
+++ b/networking/ifplugd.c
@@ -451,20 +451,24 @@ static smallint detect_link(void)
static NOINLINE int check_existence_through_netlink(void)
{
int iface_len;
- char replybuf[1024];
+ /* Buffer was 1K, but on linux-3.9.9 it was reported to be too small.
+ * netlink.h: "limit to 8K to avoid MSG_TRUNC when PAGE_SIZE is very large".
+ * Note: on error returns (-1) we exit, no need to free replybuf.
+ */
+ enum { BUF_SIZE = 8 * 1024 };
+ char *replybuf = xmalloc(BUF_SIZE);
iface_len = strlen(G.iface);
while (1) {
struct nlmsghdr *mhdr;
ssize_t bytes;
- bytes = recv(netlink_fd, &replybuf, sizeof(replybuf), MSG_DONTWAIT);
+ bytes = recv(netlink_fd, replybuf, BUF_SIZE, MSG_DONTWAIT);
if (bytes < 0) {
if (errno == EAGAIN)
- return G.iface_exists;
+ goto ret;
if (errno == EINTR)
continue;
-
bb_perror_msg("netlink: recv");
return -1;
}
@@ -507,6 +511,8 @@ static NOINLINE int check_existence_through_netlink(void)
}
}
+ ret:
+ free(replybuf);
return G.iface_exists;
}
@@ -556,7 +562,8 @@ int ifplugd_main(int argc UNUSED_PARAM, char **argv)
if (opts & FLAG_KILL) {
if (pid_from_pidfile > 0)
- kill(pid_from_pidfile, SIGQUIT);
+ /* Upstream tool use SIGINT for -k */
+ kill(pid_from_pidfile, SIGINT);
return EXIT_SUCCESS;
}
diff --git a/networking/ifupdown.c b/networking/ifupdown.c
index 8180482..0f0857c 100644
--- a/networking/ifupdown.c
+++ b/networking/ifupdown.c
@@ -743,7 +743,7 @@ static const struct method_t *get_method(const struct address_family_t *af, char
return NULL;
}
-static struct interfaces_file_t *read_interfaces(const char *filename)
+static struct interfaces_file_t *read_interfaces(const char *filename, struct interfaces_file_t *defn)
{
/* Let's try to be compatible.
*
@@ -758,19 +758,25 @@ static struct interfaces_file_t *read_interfaces(const char *filename)
* be ignored. Blank lines are ignored. Lines may be indented freely.
* A "\" character at the very end of the line indicates the next line
* should be treated as a continuation of the current one.
+ *
+ * Lines beginning with "source" are used to include stanzas from
+ * other files, so configuration can be split into many files.
+ * The word "source" is followed by the path of file to be sourced.
*/
#if ENABLE_FEATURE_IFUPDOWN_MAPPING
struct mapping_defn_t *currmap = NULL;
#endif
struct interface_defn_t *currif = NULL;
- struct interfaces_file_t *defn;
FILE *f;
char *buf;
char *first_word;
char *rest_of_line;
enum { NONE, IFACE, MAPPING } currently_processing = NONE;
- defn = xzalloc(sizeof(*defn));
+ if (!defn)
+ defn = xzalloc(sizeof(*defn));
+
+ debug_noise("reading %s file:\n", filename);
f = xfopen_for_read(filename);
while ((buf = xmalloc_fgetline(f)) != NULL) {
@@ -881,6 +887,8 @@ static struct interfaces_file_t *read_interfaces(const char *filename)
debug_noise("\nauto %s\n", first_word);
}
currently_processing = NONE;
+ } else if (strcmp(first_word, "source") == 0) {
+ read_interfaces(next_word(&rest_of_line), defn);
} else {
switch (currently_processing) {
case IFACE:
@@ -934,6 +942,7 @@ static struct interfaces_file_t *read_interfaces(const char *filename)
bb_error_msg_and_die("%s: I/O error", filename);
}
fclose(f);
+ debug_noise("\ndone reading %s\n\n", filename);
return defn;
}
@@ -1199,9 +1208,7 @@ int ifupdown_main(int argc UNUSED_PARAM, char **argv)
if (!DO_ALL) bb_show_usage();
}
- debug_noise("reading %s file:\n", interfaces);
- defn = read_interfaces(interfaces);
- debug_noise("\ndone reading %s\n\n", interfaces);
+ defn = read_interfaces(interfaces, NULL);
/* Create a list of interfaces to work on */
if (DO_ALL) {
diff --git a/networking/interface.c b/networking/interface.c
index 9ae8b3f..8e95d94 100644
--- a/networking/interface.c
+++ b/networking/interface.c
@@ -54,7 +54,7 @@
#define _PATH_PROCNET_DEV "/proc/net/dev"
#define _PATH_PROCNET_IFINET6 "/proc/net/if_inet6"
-#ifdef HAVE_AFINET6
+#if defined(HAVE_AFINET6) && !defined(BIONIC_L)
# ifndef _LINUX_IN6_H
/*
* This is from linux/include/net/ipv6.h
@@ -722,68 +722,15 @@ static char* FAST_FUNC ether_print(unsigned char *ptr)
return buff;
}
-static int FAST_FUNC ether_input(const char *bufp, struct sockaddr *sap);
-
static const struct hwtype ether_hwtype = {
.name = "ether",
.title = "Ethernet",
.type = ARPHRD_ETHER,
.alen = ETH_ALEN,
.print = ether_print,
- .input = ether_input
+ .input = in_ether
};
-static unsigned hexchar2int(char c)
-{
- if (isdigit(c))
- return c - '0';
- c &= ~0x20; /* a -> A */
- if ((unsigned)(c - 'A') <= 5)
- return c - ('A' - 10);
- return ~0U;
-}
-
-/* Input an Ethernet address and convert to binary. */
-static int FAST_FUNC ether_input(const char *bufp, struct sockaddr *sap)
-{
- unsigned char *ptr;
- char c;
- int i;
- unsigned val;
-
- sap->sa_family = ether_hwtype.type;
- ptr = (unsigned char*) sap->sa_data;
-
- i = 0;
- while ((*bufp != '\0') && (i < ETH_ALEN)) {
- val = hexchar2int(*bufp++) * 0x10;
- if (val > 0xff) {
- errno = EINVAL;
- return -1;
- }
- c = *bufp;
- if (c == ':' || c == 0)
- val >>= 4;
- else {
- val |= hexchar2int(c);
- if (val > 0xff) {
- errno = EINVAL;
- return -1;
- }
- }
- if (c != 0)
- bufp++;
- *ptr++ = (unsigned char) val;
- i++;
-
- /* We might get a semicolon here - not required. */
- if (*bufp == ':') {
- bufp++;
- }
- }
- return 0;
-}
-
static const struct hwtype ppp_hwtype = {
.name = "ppp",
.title = "Point-to-Point Protocol",
@@ -927,7 +874,7 @@ static void print_bytes_scaled(unsigned long long ull, const char *end)
static void ife_print6(struct interface *ptr)
{
FILE *f;
- char addr6[40], devname[20];
+ char addr6[40], devname[21];
struct sockaddr_in6 sap;
int plen, scope, dad_status, if_idx;
char addr6p[8][5];
diff --git a/networking/ipv6/ipv6_route.h b/networking/ipv6/ipv6_route.h
deleted file mode 100644
index 886bbb7..0000000
--- a/networking/ipv6/ipv6_route.h
+++ b/dev/null
@@ -1,56 +0,0 @@
-/*
- * Linux INET6 implementation
- *
- * Authors:
- * Pedro Roque <roque@di.fc.ul.pt>
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation; either version
- * 2 of the License, or (at your option) any later version.
- */
-
-#ifndef _LINUX_IPV6_ROUTE_H
-#define _LINUX_IPV6_ROUTE_H
-
-#define RTF_DEFAULT 0x00010000 /* default - learned via ND */
-#define RTF_ALLONLINK 0x00020000 /* (deprecated and will be removed)
- fallback, no routers on link */
-#define RTF_ADDRCONF 0x00040000 /* addrconf route - RA */
-#define RTF_PREFIX_RT 0x00080000 /* A prefix only route - RA */
-#define RTF_ANYCAST 0x00100000 /* Anycast */
-
-#define RTF_NONEXTHOP 0x00200000 /* route with no nexthop */
-#define RTF_EXPIRES 0x00400000
-
-#define RTF_ROUTEINFO 0x00800000 /* route information - RA */
-
-#define RTF_CACHE 0x01000000 /* cache entry */
-#define RTF_FLOW 0x02000000 /* flow significant route */
-#define RTF_POLICY 0x04000000 /* policy route */
-
-#define RTF_PREF(pref) ((pref) << 27)
-#define RTF_PREF_MASK 0x18000000
-
-#define RTF_LOCAL 0x80000000
-
-
-struct in6_rtmsg {
- struct in6_addr rtmsg_dst;
- struct in6_addr rtmsg_src;
- struct in6_addr rtmsg_gateway;
- __u32 rtmsg_type;
- __u16 rtmsg_dst_len;
- __u16 rtmsg_src_len;
- __u32 rtmsg_metric;
- unsigned long rtmsg_info;
- __u32 rtmsg_flags;
- int rtmsg_ifindex;
-};
-
-#define RTMSG_NEWDEVICE 0x11
-#define RTMSG_DELDEVICE 0x12
-#define RTMSG_NEWROUTE 0x21
-#define RTMSG_DELROUTE 0x22
-
-#endif
diff --git a/networking/libiproute/ipaddress.c b/networking/libiproute/ipaddress.c
index da76bbe..1058b5a 100644
--- a/networking/libiproute/ipaddress.c
+++ b/networking/libiproute/ipaddress.c
@@ -627,10 +627,12 @@ static int ipaddr_modify(int cmd, char **argv)
req.ifa.ifa_family = preferred_family;
while (*argv) {
- const smalluint arg = index_in_strings(option, *argv);
- if (arg <= 1) { /* peer, remote */
+ unsigned arg = index_in_strings(option, *argv);
+ /* if search fails, "local" is assumed */
+ if ((int)arg >= 0)
NEXT_ARG();
+ if (arg <= 1) { /* peer, remote */
if (peer_len) {
duparg("peer", *argv);
}
@@ -643,7 +645,6 @@ static int ipaddr_modify(int cmd, char **argv)
req.ifa.ifa_prefixlen = peer.bitlen;
} else if (arg <= 3) { /* broadcast, brd */
inet_prefix addr;
- NEXT_ARG();
if (brd_len) {
duparg("broadcast", *argv);
}
@@ -660,7 +661,6 @@ static int ipaddr_modify(int cmd, char **argv)
}
} else if (arg == 4) { /* anycast */
inet_prefix addr;
- NEXT_ARG();
if (any_len) {
duparg("anycast", *argv);
}
@@ -672,22 +672,18 @@ static int ipaddr_modify(int cmd, char **argv)
any_len = addr.bytelen;
} else if (arg == 5) { /* scope */
uint32_t scope = 0;
- NEXT_ARG();
if (rtnl_rtscope_a2n(&scope, *argv)) {
invarg(*argv, "scope");
}
req.ifa.ifa_scope = scope;
scoped = 1;
} else if (arg == 6) { /* dev */
- NEXT_ARG();
d = *argv;
} else if (arg == 7) { /* label */
- NEXT_ARG();
l = *argv;
addattr_l(&req.n, sizeof(req), IFA_LABEL, l, strlen(l) + 1);
} else {
- if (arg == 8) /* local */
- NEXT_ARG();
+ /* local (specified or assumed) */
if (local_len) {
duparg2("local", *argv);
}
@@ -724,7 +720,7 @@ static int ipaddr_modify(int cmd, char **argv)
}
brd = peer;
if (brd.bitlen <= 30) {
- for (i=31; i>=brd.bitlen; i--) {
+ for (i = 31; i >= brd.bitlen; i--) {
if (brd_len == -1)
brd.data[0] |= htonl(1<<(31-i));
else
@@ -754,11 +750,11 @@ int FAST_FUNC do_ipaddr(char **argv)
{
static const char commands[] ALIGN1 =
"add\0""delete\0""list\0""show\0""lst\0""flush\0";
- smalluint cmd = 2;
+ int cmd = 2;
if (*argv) {
cmd = index_in_substrings(commands, *argv);
- if (cmd > 5)
- bb_error_msg_and_die(bb_msg_invalid_arg, *argv, applet_name);
+ if (cmd < 0)
+ invarg(*argv, applet_name);
argv++;
if (cmd <= 1)
return ipaddr_modify((cmd == 0) ? RTM_NEWADDR : RTM_DELADDR, argv);
diff --git a/networking/libiproute/iplink.c b/networking/libiproute/iplink.c
index 8e9f1bd..1b414a2 100644
--- a/networking/libiproute/iplink.c
+++ b/networking/libiproute/iplink.c
@@ -1,21 +1,46 @@
/* vi: set sw=4 ts=4: */
/*
* Authors: Alexey Kuznetsov, <kuznet@ms2.inr.ac.ru>
+ * Patrick McHardy <kaber@trash.net>
*
* Licensed under GPLv2 or later, see file LICENSE in this source tree.
*/
#include <net/if.h>
-#include <net/if_packet.h>
+/*#include <net/if_packet.h> - not needed? */
#include <netpacket/packet.h>
#include <netinet/if_ether.h>
+#include <linux/if_vlan.h>
#include "ip_common.h" /* #include "libbb.h" is inside */
#include "rt_names.h"
#include "utils.h"
+#undef ETH_P_8021AD
+#define ETH_P_8021AD 0x88A8
+#undef VLAN_FLAG_REORDER_HDR
+#define VLAN_FLAG_REORDER_HDR 0x1
+#undef VLAN_FLAG_GVRP
+#define VLAN_FLAG_GVRP 0x2
+#undef VLAN_FLAG_LOOSE_BINDING
+#define VLAN_FLAG_LOOSE_BINDING 0x4
+#undef VLAN_FLAG_MVRP
+#define VLAN_FLAG_MVRP 0x8
+#undef IFLA_VLAN_PROTOCOL
+#define IFLA_VLAN_PROTOCOL 5
+
#ifndef IFLA_LINKINFO
# define IFLA_LINKINFO 18
# define IFLA_INFO_KIND 1
+# define IFLA_INFO_DATA 2
+#endif
+
+#ifndef IFLA_VLAN_MAX
+# define IFLA_VLAN_ID 1
+# define IFLA_VLAN_FLAGS 2
+struct ifla_vlan_flags {
+ uint32_t flags;
+ uint32_t mask;
+};
#endif
/* taken from linux/sockios.h */
@@ -277,12 +302,103 @@ static int ipaddr_list_link(char **argv)
return ipaddr_list_or_flush(argv, 0);
}
+static void vlan_parse_opt(char **argv, struct nlmsghdr *n, unsigned int size)
+{
+ static const char keywords[] ALIGN1 =
+ "id\0"
+ "protocol\0"
+ "reorder_hdr\0"
+ "gvrp\0"
+ "mvrp\0"
+ "loose_binding\0"
+ ;
+ static const char protocols[] ALIGN1 =
+ "802.1q\0"
+ "802.1ad\0"
+ ;
+ static const char str_on_off[] ALIGN1 =
+ "on\0"
+ "off\0"
+ ;
+ enum {
+ ARG_id = 0,
+ ARG_reorder_hdr,
+ ARG_gvrp,
+ ARG_mvrp,
+ ARG_loose_binding,
+ ARG_protocol,
+ };
+ enum {
+ PROTO_8021Q = 0,
+ PROTO_8021AD,
+ };
+ enum {
+ PARM_on = 0,
+ PARM_off
+ };
+ int arg;
+ uint16_t id, proto;
+ struct ifla_vlan_flags flags = { 0, 0 };
+
+ while (*argv) {
+ arg = index_in_substrings(keywords, *argv);
+ if (arg < 0)
+ invarg(*argv, "type vlan");
+
+ NEXT_ARG();
+ if (arg == ARG_id) {
+ id = get_u16(*argv, "id");
+ addattr_l(n, size, IFLA_VLAN_ID, &id, sizeof(id));
+ } else if (arg == ARG_protocol) {
+ arg = index_in_substrings(protocols, *argv);
+ if (arg == PROTO_8021Q)
+ proto = ETH_P_8021Q;
+ else if (arg == PROTO_8021AD)
+ proto = ETH_P_8021AD;
+ else
+ bb_error_msg_and_die("unknown VLAN encapsulation protocol '%s'",
+ *argv);
+ addattr_l(n, size, IFLA_VLAN_PROTOCOL, &proto, sizeof(proto));
+ } else {
+ int param = index_in_strings(str_on_off, *argv);
+ if (param < 0)
+ die_must_be_on_off(nth_string(keywords, arg));
+
+ if (arg == ARG_reorder_hdr) {
+ flags.mask |= VLAN_FLAG_REORDER_HDR;
+ flags.flags &= ~VLAN_FLAG_REORDER_HDR;
+ if (param == PARM_on)
+ flags.flags |= VLAN_FLAG_REORDER_HDR;
+ } else if (arg == ARG_gvrp) {
+ flags.mask |= VLAN_FLAG_GVRP;
+ flags.flags &= ~VLAN_FLAG_GVRP;
+ if (param == PARM_on)
+ flags.flags |= VLAN_FLAG_GVRP;
+ } else if (arg == ARG_mvrp) {
+ flags.mask |= VLAN_FLAG_MVRP;
+ flags.flags &= ~VLAN_FLAG_MVRP;
+ if (param == PARM_on)
+ flags.flags |= VLAN_FLAG_MVRP;
+ } else { /*if (arg == ARG_loose_binding) */
+ flags.mask |= VLAN_FLAG_LOOSE_BINDING;
+ flags.flags &= ~VLAN_FLAG_LOOSE_BINDING;
+ if (param == PARM_on)
+ flags.flags |= VLAN_FLAG_LOOSE_BINDING;
+ }
+ }
+ argv++;
+ }
+
+ if (flags.mask)
+ addattr_l(n, size, IFLA_VLAN_FLAGS, &flags, sizeof(flags));
+}
+
#ifndef NLMSG_TAIL
#define NLMSG_TAIL(nmsg) \
- ((struct rtattr *) ((size_t)((void *) (nmsg)) + (size_t) NLMSG_ALIGN((nmsg)->nlmsg_len)))
+ ((struct rtattr *) ((void *) ((nmsg) + NLMSG_ALIGN((nmsg)->nlmsg_len))))
#endif
/* Return value becomes exitcode. It's okay to not return at all */
-static int do_change(char **argv, const unsigned rtm)
+static int do_add_or_delete(char **argv, const unsigned rtm)
{
static const char keywords[] ALIGN1 =
"link\0""name\0""type\0""dev\0";
@@ -312,15 +428,17 @@ static int do_change(char **argv, const unsigned rtm)
while (*argv) {
arg = index_in_substrings(keywords, *argv);
+ if (arg == ARG_type) {
+ NEXT_ARG();
+ type_str = *argv++;
+ break;
+ }
if (arg == ARG_link) {
NEXT_ARG();
link_str = *argv;
} else if (arg == ARG_name) {
NEXT_ARG();
name_str = *argv;
- } else if (arg == ARG_type) {
- NEXT_ARG();
- type_str = *argv;
} else {
if (arg == ARG_dev) {
if (dev_str)
@@ -339,7 +457,18 @@ static int do_change(char **argv, const unsigned rtm)
addattr_l(&req.n, sizeof(req), IFLA_LINKINFO, NULL, 0);
addattr_l(&req.n, sizeof(req), IFLA_INFO_KIND, type_str,
strlen(type_str));
- linkinfo->rta_len = (size_t) NLMSG_TAIL(&req.n) - (size_t) linkinfo;
+
+ if (*argv) {
+ struct rtattr *data = NLMSG_TAIL(&req.n);
+ addattr_l(&req.n, sizeof(req), IFLA_INFO_DATA, NULL, 0);
+
+ if (strcmp(type_str, "vlan") == 0)
+ vlan_parse_opt(argv, &req.n, sizeof(req));
+
+ data->rta_len = (NLMSG_TAIL(&req.n) - (data));
+ }
+
+ linkinfo->rta_len = (NLMSG_TAIL(&req.n) - (linkinfo));
}
if (rtm != RTM_NEWLINK) {
if (!dev_str)
@@ -370,13 +499,13 @@ int FAST_FUNC do_iplink(char **argv)
static const char keywords[] ALIGN1 =
"add\0""delete\0""set\0""show\0""lst\0""list\0";
if (*argv) {
- smalluint key = index_in_substrings(keywords, *argv);
- if (key > 5) /* invalid argument */
- bb_error_msg_and_die(bb_msg_invalid_arg, *argv, applet_name);
+ int key = index_in_substrings(keywords, *argv);
+ if (key < 0) /* invalid argument */
+ invarg(*argv, applet_name);
argv++;
if (key <= 1) /* add/delete */
- return do_change(argv, key ? RTM_DELLINK : RTM_NEWLINK);
- else if (key == 2) /* set */
+ return do_add_or_delete(argv, key ? RTM_DELLINK : RTM_NEWLINK);
+ if (key == 2) /* set */
return do_set(argv);
}
/* show, lst, list */
diff --git a/networking/libiproute/iprule.c b/networking/libiproute/iprule.c
index 241a6bf..8dbe6bd 100644
--- a/networking/libiproute/iprule.c
+++ b/networking/libiproute/iprule.c
@@ -215,7 +215,7 @@ static int iprule_modify(int cmd, char **argv)
while (*argv) {
key = index_in_substrings(keywords, *argv) + 1;
if (key == 0) /* no match found in keywords array, bail out. */
- bb_error_msg_and_die(bb_msg_invalid_arg, *argv, applet_name);
+ invarg(*argv, applet_name);
if (key == ARG_from) {
inet_prefix dst;
NEXT_ARG();
@@ -308,9 +308,9 @@ int FAST_FUNC do_iprule(char **argv)
static const char ip_rule_commands[] ALIGN1 =
"add\0""delete\0""list\0""show\0";
if (*argv) {
- smalluint cmd = index_in_substrings(ip_rule_commands, *argv);
- if (cmd > 3)
- bb_error_msg_and_die(bb_msg_invalid_arg, *argv, applet_name);
+ int cmd = index_in_substrings(ip_rule_commands, *argv);
+ if (cmd < 0)
+ invarg(*argv, applet_name);
argv++;
if (cmd < 2)
return iprule_modify((cmd == 0) ? RTM_NEWRULE : RTM_DELRULE, argv);
diff --git a/networking/libiproute/iptunnel.c b/networking/libiproute/iptunnel.c
index 2b651b9..b54c3c5 100644
--- a/networking/libiproute/iptunnel.c
+++ b/networking/libiproute/iptunnel.c
@@ -561,9 +561,9 @@ int FAST_FUNC do_iptunnel(char **argv)
enum { ARG_add = 0, ARG_change, ARG_del, ARG_show, ARG_list, ARG_lst };
if (*argv) {
- smalluint key = index_in_substrings(keywords, *argv);
- if (key > 5)
- bb_error_msg_and_die(bb_msg_invalid_arg, *argv, applet_name);
+ int key = index_in_substrings(keywords, *argv);
+ if (key < 0)
+ invarg(*argv, applet_name);
argv++;
if (key == ARG_add)
return do_add(SIOCADDTUNNEL, argv);
diff --git a/networking/libiproute/libnetlink.c b/networking/libiproute/libnetlink.c
index c7533a4..7c80072 100644
--- a/networking/libiproute/libnetlink.c
+++ b/networking/libiproute/libnetlink.c
@@ -129,7 +129,7 @@ static int rtnl_dump_filter(struct rtnl_handle *rth,
}
h = (struct nlmsghdr*)buf;
- while (NLMSG_OK(h, status)) {
+ while (NLMSG_OK(h, (unsigned) status)) {
int err;
if (nladdr.nl_pid != 0 ||
diff --git a/networking/nameif.c b/networking/nameif.c
index 5d7e8f9..9a8846d 100644
--- a/networking/nameif.c
+++ b/networking/nameif.c
@@ -292,12 +292,11 @@ int nameif_main(int argc UNUSED_PARAM, char **argv)
if (ch->mac && memcmp(ch->mac, ifr.ifr_hwaddr.sa_data, ETH_ALEN) != 0)
continue;
/* if we came here, all selectors have matched */
- break;
+ goto found;
}
/* Nothing found for current interface */
- if (!ch)
- continue;
-
+ continue;
+ found:
if (strcmp(ifr.ifr_name, ch->ifname) != 0) {
strcpy(ifr.ifr_newname, ch->ifname);
ioctl_or_perror_and_die(ctl_sk, SIOCSIFNAME, &ifr,
@@ -313,10 +312,14 @@ int nameif_main(int argc UNUSED_PARAM, char **argv)
ch->next->prev = ch->prev;
if (ENABLE_FEATURE_CLEAN_UP)
delete_eth_table(ch);
- }
+ } /* while */
+
if (ENABLE_FEATURE_CLEAN_UP) {
- for (ch = clist; ch; ch = ch->next)
+ ethtable_t *next;
+ for (ch = clist; ch; ch = next) {
+ next = ch->next;
delete_eth_table(ch);
+ }
config_close(parser);
};
diff --git a/networking/nc.c b/networking/nc.c
index 3ae73c4..6105db1 100644
--- a/networking/nc.c
+++ b/networking/nc.c
@@ -24,7 +24,7 @@
//config: Allow netcat to act as a server.
//config:
//config:config NC_EXTRA
-//config: bool "Netcat extensions (-eiw and filename)"
+//config: bool "Netcat extensions (-eiw and -f FILE)"
//config: default y
//config: depends on NC
//config: help
@@ -40,7 +40,7 @@
//config: This option makes nc closely follow original nc-1.10.
//config: The code is about 2.5k bigger. It enables
//config: -s ADDR, -n, -u, -v, -o FILE, -z options, but loses
-//config: busybox-specific extensions: -f FILE and -ll.
+//config: busybox-specific extensions: -f FILE.
#if ENABLE_NC_110_COMPAT
# include "nc_bloaty.c"
@@ -60,17 +60,18 @@
//usage:#define nc_full_usage "\n\n"
//usage: "Open a pipe to IP:PORT" IF_NC_EXTRA(" or FILE")
//usage: NC_OPTIONS_STR
-//usage: IF_NC_EXTRA(
-//usage: "\n -e PROG Run PROG after connect"
//usage: IF_NC_SERVER(
//usage: "\n -l Listen mode, for inbound connects"
//usage: IF_NC_EXTRA(
-//usage: "\n (use -l twice with -e for persistent server)")
+//usage: "\n (use -ll with -e for persistent server)"
+//usage: )
//usage: "\n -p PORT Local port"
//usage: )
-//usage: "\n -w SEC Timeout for connect"
+//usage: IF_NC_EXTRA(
+//usage: "\n -w SEC Connect timeout"
//usage: "\n -i SEC Delay interval for lines sent"
//usage: "\n -f FILE Use file (ala /dev/ttyS0) instead of network"
+//usage: "\n -e PROG Run PROG after connect"
//usage: )
//usage:
//usage:#define nc_notes_usage ""
@@ -147,7 +148,7 @@ int nc_main(int argc, char **argv)
*p++ = argv[optind++];
}
)
- /* optind points to argv[arvc] (NULL) now.
+ /* optind points to argv[argc] (NULL) now.
** FIXME: we assume that getopt will not count options
** possibly present on "-e PROG ARGS" and will not
** include them into final value of optind
@@ -226,10 +227,9 @@ int nc_main(int argc, char **argv)
/* child, or main thread if only one -l */
xmove_fd(cfd, 0);
xdup2(0, 1);
- xdup2(0, 2);
+ /*xdup2(0, 2); - original nc 1.10 does this, we don't */
IF_NC_EXTRA(BB_EXECVP(execparam[0], execparam);)
- /* Don't print stuff or it will go over the wire... */
- _exit(127);
+ IF_NC_EXTRA(bb_perror_msg_and_die("can't execute '%s'", execparam[0]);)
}
/* Select loop copying stdin to cfd, and cfd to stdout */
@@ -261,7 +261,7 @@ int nc_main(int argc, char **argv)
if (nread < 1) {
/* Close outgoing half-connection so they get EOF,
* but leave incoming alone so we can see response */
- shutdown(cfd, 1);
+ shutdown(cfd, SHUT_WR);
FD_CLR(STDIN_FILENO, &readfds);
}
ofd = cfd;
diff --git a/networking/nc_bloaty.c b/networking/nc_bloaty.c
index 62a0251..b28d05f 100644
--- a/networking/nc_bloaty.c
+++ b/networking/nc_bloaty.c
@@ -48,6 +48,12 @@
* - TCP connects from wrong ip/ports (if peer ip:port is specified
* on the command line, but accept() says that it came from different addr)
* are closed, but we don't exit - we continue to listen/accept.
+ * Since bbox 1.22:
+ * - nc exits when _both_ stdin and network are closed.
+ * This makes these two commands:
+ * echo "Yes" | nc 127.0.0.1 1234
+ * echo "no" | nc -lp 1234
+ * exchange their data _and exit_ instead of being stuck.
*/
/* done in nc.c: #include "libbb.h" */
@@ -63,6 +69,12 @@
//usage: " -e PROG Run PROG after connect (must be last)"
//usage: IF_NC_SERVER(
//usage: "\n -l Listen mode, for inbound connects"
+//usage: "\n -lk With -e, provides persistent server"
+/* -ll does the same as -lk, but its our extension, while -k is BSD'd,
+ * presumably more widely known. Therefore we advertise it, not -ll.
+ * I would like to drop -ll support, but our "small" nc supports it,
+ * and Rob uses it.
+ */
//usage: )
//usage: "\n -p PORT Local port"
//usage: "\n -s ADDR Local address"
@@ -128,8 +140,6 @@ struct globals {
jmp_buf jbuf; /* timer crud */
- fd_set ding1; /* for select loop */
- fd_set ding2;
char bigbuf_in[BIGSIZ]; /* data buffers */
char bigbuf_net[BIGSIZ];
};
@@ -141,8 +151,6 @@ struct globals {
#define themaddr (G.themaddr )
#define remend (G.remend )
#define jbuf (G.jbuf )
-#define ding1 (G.ding1 )
-#define ding2 (G.ding2 )
#define bigbuf_in (G.bigbuf_in )
#define bigbuf_net (G.bigbuf_net)
#define o_verbose (G.o_verbose )
@@ -166,18 +174,14 @@ enum {
OPT_v = (1 << 4),
OPT_w = (1 << 5),
OPT_l = (1 << 6) * ENABLE_NC_SERVER,
- OPT_i = (1 << (6+ENABLE_NC_SERVER)) * ENABLE_NC_EXTRA,
- OPT_o = (1 << (7+ENABLE_NC_SERVER)) * ENABLE_NC_EXTRA,
- OPT_z = (1 << (8+ENABLE_NC_SERVER)) * ENABLE_NC_EXTRA,
+ OPT_k = (1 << 7) * ENABLE_NC_SERVER,
+ OPT_i = (1 << (6+2*ENABLE_NC_SERVER)) * ENABLE_NC_EXTRA,
+ OPT_o = (1 << (7+2*ENABLE_NC_SERVER)) * ENABLE_NC_EXTRA,
+ OPT_z = (1 << (8+2*ENABLE_NC_SERVER)) * ENABLE_NC_EXTRA,
};
#define o_nflag (option_mask32 & OPT_n)
#define o_udpmode (option_mask32 & OPT_u)
-#if ENABLE_NC_SERVER
-#define o_listen (option_mask32 & OPT_l)
-#else
-#define o_listen 0
-#endif
#if ENABLE_NC_EXTRA
#define o_ofile (option_mask32 & OPT_o)
#define o_zero (option_mask32 & OPT_z)
@@ -298,7 +302,7 @@ static int connect_w_timeout(int fd)
incoming and returns an open connection *from* someplace. If we were
given host/port args, any connections from elsewhere are rejected. This
in conjunction with local-address binding should limit things nicely... */
-static void dolisten(void)
+static void dolisten(int is_persistent, char **proggie)
{
int rr;
@@ -371,6 +375,7 @@ create new one, and bind() it. TODO */
xconnect(netfd, &remend.u.sa, ouraddr->len);
} else {
/* TCP */
+ another:
arm(o_wait); /* wrap this in a timer, too; 0 = forever */
if (setjmp(jbuf) == 0) {
again:
@@ -405,6 +410,19 @@ create new one, and bind() it. TODO */
unarm();
} else
bb_error_msg_and_die("timeout");
+
+ if (is_persistent && proggie) {
+ /* -l -k -e PROG */
+ signal(SIGCHLD, SIG_IGN); /* no zombies please */
+ if (xvfork() != 0) {
+ /* parent: go back and accept more connections */
+ close(rr);
+ goto another;
+ }
+ /* child */
+ signal(SIGCHLD, SIG_DFL);
+ }
+
xmove_fd(rr, netfd); /* dump the old socket, here's our new one */
/* find out what address the connection was *to* on our end, in case we're
doing a listen-on-any on a multihomed machine. This allows one to
@@ -454,6 +472,9 @@ create new one, and bind() it. TODO */
if (!o_nflag)
free(remhostname);
}
+
+ if (proggie)
+ doexec(proggie);
}
/* udptest:
@@ -571,26 +592,27 @@ static int readwrite(void)
unsigned rzleft;
unsigned rnleft;
unsigned netretry; /* net-read retry counter */
- unsigned wretry; /* net-write sanity counter */
- unsigned wfirst; /* one-shot flag to skip first net read */
+ unsigned fds_open;
/* if you don't have all this FD_* macro hair in sys/types.h, you'll have to
either find it or do your own bit-bashing: *ding1 |= (1 << fd), etc... */
- FD_SET(netfd, &ding1); /* global: the net is open */
+ fd_set ding1; /* for select loop */
+ fd_set ding2;
+ FD_ZERO(&ding1);
+ FD_SET(netfd, &ding1);
+ FD_SET(STDIN_FILENO, &ding1);
+ fds_open = 2;
+
netretry = 2;
- wfirst = 0;
rzleft = rnleft = 0;
if (o_interval)
sleep(o_interval); /* pause *before* sending stuff, too */
- errno = 0; /* clear from sleep, close, whatever */
/* and now the big ol' select shoveling loop ... */
- while (FD_ISSET(netfd, &ding1)) { /* i.e. till the *net* closes! */
- wretry = 8200; /* more than we'll ever hafta write */
- if (wfirst) { /* any saved stdin buffer? */
- wfirst = 0; /* clear flag for the duration */
- goto shovel; /* and go handle it first */
- }
+ /* nc 1.10 has "while (FD_ISSET(netfd)" here */
+ while (fds_open) {
+ unsigned wretry = 8200; /* net-write sanity counter */
+
ding2 = ding1; /* FD_COPY ain't portable... */
/* some systems, notably linux, crap into their select timers on return, so
we create a expendable copy and give *that* to select. */
@@ -610,13 +632,14 @@ static int readwrite(void)
/* if we have a timeout AND stdin is closed AND we haven't heard anything
from the net during that time, assume it's dead and close it too. */
if (rr == 0) {
- if (!FD_ISSET(STDIN_FILENO, &ding1))
+ if (!FD_ISSET(STDIN_FILENO, &ding1)) {
netretry--; /* we actually try a coupla times. */
- if (!netretry) {
- if (o_verbose > 1) /* normally we don't care */
- fprintf(stderr, "net timeout\n");
- close(netfd);
- return 0; /* not an error! */
+ if (!netretry) {
+ if (o_verbose > 1) /* normally we don't care */
+ fprintf(stderr, "net timeout\n");
+ /*close(netfd); - redundant, exit will do it */
+ return 0; /* not an error! */
+ }
}
} /* select timeout */
/* xxx: should we check the exception fds too? The read fds seem to give
@@ -630,7 +653,8 @@ static int readwrite(void)
/* nc 1.10 doesn't do this */
bb_perror_msg("net read");
}
- FD_CLR(netfd, &ding1); /* net closed, we'll finish up... */
+ FD_CLR(netfd, &ding1); /* net closed */
+ fds_open--;
rzleft = 0; /* can't write anymore: broken pipe */
} else {
rnleft = rr;
@@ -650,11 +674,12 @@ Debug("got %d from the net, errno %d", rr, errno);
/* Considered making reads here smaller for UDP mode, but 8192-byte
mobygrams are kinda fun and exercise the reassembler. */
if (rr <= 0) { /* at end, or fukt, or ... */
- FD_CLR(STDIN_FILENO, &ding1); /* disable and close stdin */
- close(STDIN_FILENO);
-// Does it make sense to shutdown(net_fd, SHUT_WR)
-// to let other side know that we won't write anything anymore?
-// (and what about keeping compat if we do that?)
+ FD_CLR(STDIN_FILENO, &ding1); /* disable stdin */
+ /*close(STDIN_FILENO); - not really necessary */
+ /* Let peer know we have no more data */
+ /* nc 1.10 doesn't do this: */
+ shutdown(netfd, SHUT_WR);
+ fds_open--;
} else {
rzleft = rr;
zp = bigbuf_in;
@@ -665,24 +690,14 @@ Debug("got %d from the net, errno %d", rr, errno);
Geez, why does this look an awful lot like the big loop in "rsh"? ...
not sure if the order of this matters, but write net -> stdout first. */
- /* sanity check. Works because they're both unsigned... */
- if ((rzleft > 8200) || (rnleft > 8200)) {
- holler_error("bogus buffers: %u, %u", rzleft, rnleft);
- rzleft = rnleft = 0;
- }
- /* net write retries sometimes happen on UDP connections */
- if (!wretry) { /* is something hung? */
- holler_error("too many output retries");
- return 1;
- }
if (rnleft) {
rr = write(STDOUT_FILENO, np, rnleft);
if (rr > 0) {
if (o_ofile) /* log the stdout */
oprint('<', (unsigned char *)np, rr);
- np += rr; /* fix up ptrs and whatnot */
- rnleft -= rr; /* will get sanity-checked above */
- wrote_out += rr; /* global count */
+ np += rr;
+ rnleft -= rr;
+ wrote_out += rr; /* global count */
}
Debug("wrote %d to stdout, errno %d", rr, errno);
} /* rnleft */
@@ -697,20 +712,24 @@ Debug("wrote %d to stdout, errno %d", rr, errno);
oprint('>', (unsigned char *)zp, rr);
zp += rr;
rzleft -= rr;
- wrote_net += rr; /* global count */
+ wrote_net += rr; /* global count */
}
Debug("wrote %d to net, errno %d", rr, errno);
} /* rzleft */
if (o_interval) { /* cycle between slow lines, or ... */
sleep(o_interval);
- errno = 0; /* clear from sleep */
continue; /* ...with hairy select loop... */
}
- if ((rzleft) || (rnleft)) { /* shovel that shit till they ain't */
+ if (rzleft || rnleft) { /* shovel that shit till they ain't */
wretry--; /* none left, and get another load */
+ /* net write retries sometimes happen on UDP connections */
+ if (!wretry) { /* is something hung? */
+ holler_error("too many output retries");
+ return 1;
+ }
goto shovel;
}
- } /* while ding1:netfd is open */
+ } /* while (fds_open) */
/* XXX: maybe want a more graceful shutdown() here, or screw around with
linger times?? I suspect that I don't need to since I'm always doing
@@ -730,6 +749,7 @@ int nc_main(int argc UNUSED_PARAM, char **argv)
char *themdotted = themdotted; /* for compiler */
char **proggie;
int x;
+ unsigned cnt_l = 0;
unsigned o_lport = 0;
INIT_G();
@@ -760,7 +780,7 @@ int nc_main(int argc UNUSED_PARAM, char **argv)
if (proggie[0][0] == '-') {
char *optpos = *proggie + 1;
/* Skip all valid opts w/o params */
- optpos = optpos + strspn(optpos, "nuv"IF_NC_SERVER("l")IF_NC_EXTRA("z"));
+ optpos = optpos + strspn(optpos, "nuv"IF_NC_SERVER("lk")IF_NC_EXTRA("z"));
if (*optpos == 'e' && !optpos[1]) {
*optpos = '\0';
proggie++;
@@ -774,17 +794,21 @@ int nc_main(int argc UNUSED_PARAM, char **argv)
e_found:
// -g -G -t -r deleted, unimplemented -a deleted too
- opt_complementary = "?2:vv:w+"; /* max 2 params; -v is a counter; -w N */
- getopt32(argv, "np:s:uvw:" IF_NC_SERVER("l")
+ opt_complementary = "?2:vv:ll:w+"; /* max 2 params; -v and -l are counters; -w N */
+ getopt32(argv, "np:s:uvw:" IF_NC_SERVER("lk")
IF_NC_EXTRA("i:o:z"),
&str_p, &str_s, &o_wait
- IF_NC_EXTRA(, &str_i, &str_o), &o_verbose);
+ IF_NC_EXTRA(, &str_i, &str_o), &o_verbose IF_NC_SERVER(, &cnt_l));
argv += optind;
#if ENABLE_NC_EXTRA
if (option_mask32 & OPT_i) /* line-interval time */
o_interval = xatou_range(str_i, 1, 0xffff);
#endif
+#if ENABLE_NC_SERVER
//if (option_mask32 & OPT_l) /* listen mode */
+ if (option_mask32 & OPT_k) /* persistent server mode */
+ cnt_l = 2;
+#endif
//if (option_mask32 & OPT_n) /* numeric-only, no DNS lookups */
//if (option_mask32 & OPT_o) /* hexdump log */
if (option_mask32 & OPT_p) { /* local source port */
@@ -833,7 +857,7 @@ int nc_main(int argc UNUSED_PARAM, char **argv)
if (o_udpmode)
socket_want_pktinfo(netfd);
if (!ENABLE_FEATURE_UNIX_LOCAL
- || o_listen
+ || cnt_l != 0 /* listen */
|| ouraddr->u.sa.sa_family != AF_UNIX
) {
xbind(netfd, &ouraddr->u.sa, ouraddr->len);
@@ -852,9 +876,8 @@ int nc_main(int argc UNUSED_PARAM, char **argv)
}
#endif
- FD_SET(STDIN_FILENO, &ding1); /* stdin *is* initially open */
if (proggie) {
- close(0); /* won't need stdin */
+ close(STDIN_FILENO); /* won't need stdin */
option_mask32 &= ~OPT_o; /* -o with -e is meaningless! */
}
#if ENABLE_NC_EXTRA
@@ -862,11 +885,9 @@ int nc_main(int argc UNUSED_PARAM, char **argv)
xmove_fd(xopen(str_o, O_WRONLY|O_CREAT|O_TRUNC), ofd);
#endif
- if (o_listen) {
- dolisten();
+ if (cnt_l != 0) {
+ dolisten((cnt_l - 1), proggie);
/* dolisten does its own connect reporting */
- if (proggie) /* -e given? */
- doexec(proggie);
x = readwrite(); /* it even works with UDP! */
} else {
/* Outbound connects. Now we're more picky about args... */
diff --git a/networking/netstat.c b/networking/netstat.c
index c0c6ba5..f80b845 100644
--- a/networking/netstat.c
+++ b/networking/netstat.c
@@ -125,10 +125,10 @@ typedef enum {
*/
#define ADDR_WIDE 51 /* INET6_ADDRSTRLEN + 5 for the port number */
#if ENABLE_FEATURE_NETSTAT_WIDE
-# define FMT_NET_CONN_DATA "%s %6ld %6ld %-*s %-*s %-12s"
+# define FMT_NET_CONN_DATA "%s %6lu %6lu %-*s %-*s %-12s"
# define FMT_NET_CONN_HEADER "\nProto Recv-Q Send-Q %-*s %-*s State %s\n"
#else
-# define FMT_NET_CONN_DATA "%s %6ld %6ld %-23s %-23s %-12s"
+# define FMT_NET_CONN_DATA "%s %6lu %6lu %-23s %-23s %-12s"
# define FMT_NET_CONN_HEADER "\nProto Recv-Q Send-Q %-23s %-23s State %s\n"
#endif
@@ -403,7 +403,7 @@ static int scan_inet_proc_line(struct inet_params *param, char *line)
"%*d: %32[0-9A-Fa-f]:%X "
"%32[0-9A-Fa-f]:%X %X "
"%lX:%lX %*X:%*X "
- "%*X %d %*d %ld ",
+ "%*X %d %*d %lu ",
local_addr, &param->local_port,
rem_addr, &param->rem_port, &param->state,
&param->txq, &param->rxq,
@@ -611,7 +611,7 @@ static int FAST_FUNC unix_do_one(char *line)
strcat(ss_flags, "N ");
strcat(ss_flags, "]");
- printf("%-5s %-6ld %-11s %-10s %-13s %6lu ",
+ printf("%-5s %-6lu %-11s %-10s %-13s %6lu ",
ss_proto, refcnt, ss_flags, ss_type, ss_state, inode
);
diff --git a/networking/nslookup.c b/networking/nslookup.c
index 62e2c6e..202356b 100644
--- a/networking/nslookup.c
+++ b/networking/nslookup.c
@@ -28,18 +28,31 @@
#include <resolv.h>
#include "libbb.h"
-#ifdef __BIONIC__
+#ifdef ANDROID
# include <netinet/in.h>
-# ifdef ENABLE_FEATURE_IPV6
+# if ENABLE_FEATURE_IPV6
# include <netinet/in6.h>
# endif
-# include <arpa_nameser.h>
-# include <resolv_private.h>
-# include <resolv.h>
-# undef _res
-# define _res (*__res_get_state())
+# define ANDROID_CHANGES
+# ifdef BIONIC_L
+# include <arpa/nameser.h>
+# include <dns/include/resolv_private.h>
+# include <dns/resolv/res_private.h>
+# else
+# include <arpa_nameser.h>
+# include <private/resolv_private.h>
+# include <netbsd/resolv/res_private.h>
+# endif
+
+static struct __res_state res_st;
+struct __res_state * __res_state(void)
+{
+ return &res_st;
+}
#endif
+#define EXT(res) ((&res)->_u._ext)
+
/*
* I'm only implementing non-interactive mode;
* I totally forgot nslookup even had an interactive mode.
@@ -129,13 +142,19 @@ static int print_host(const char *hostname, const char *header)
static void server_print(void)
{
char *server;
- struct sockaddr *sa=NULL;
+ struct sockaddr *sa = NULL;
+
+#if ENABLE_FEATURE_IPV6
+# ifdef ANDROID
+ if (EXT(_res).ext)
+ sa = (struct sockaddr*) &EXT(_res).ext->nsaddrs[0];
+# else
+ sa = (struct sockaddr*)_res._u._ext.nsaddrs[0];
+# endif
-#if ENABLE_FEATURE_IPV6 && !defined(__BIONIC__)
- sa = (struct sockaddr*)_res._u._ext.nsaddrs[0];
if (!sa)
#endif
- sa = (struct sockaddr*)&_res.nsaddr_list[0];
+ sa = (struct sockaddr*) &_res.nsaddr_list[0];
server = xmalloc_sockaddr2dotted_noport(sa);
print_host(server, "Server:");
@@ -150,7 +169,10 @@ static void set_default_dns(const char *server)
{
len_and_sockaddr *lsa;
- /* NB: this works even with, say, "[::1]:5353"! :) */
+ if (!server)
+ return;
+
+ /* NB: this works even with, say, "[::1]:53"! :) */
lsa = xhost2sockaddr(server, 53);
if (lsa->u.sa.sa_family == AF_INET) {
@@ -158,7 +180,8 @@ static void set_default_dns(const char *server)
/* struct copy */
_res.nsaddr_list[0] = lsa->u.sin;
}
-#if ENABLE_FEATURE_IPV6 && !defined(__BIONIC__)
+
+#if ENABLE_FEATURE_IPV6
/* Hoped libc can cope with IPv4 address there too.
* No such luck, glibc 2.4 segfaults even with IPv6,
* maybe I misunderstand how to make glibc use IPv6 addr?
@@ -167,10 +190,18 @@ static void set_default_dns(const char *server)
// glibc neither SEGVs nor sends any dgrams with this
// (strace shows no socket ops):
//_res.nscount = 0;
- _res._u._ext.nscount = 1;
+ #ifdef ANDROID
+ if (EXT(_res).ext) {
+ EXT(_res).nscount = 1;
+ memcpy(&EXT(_res).ext->nsaddrs[0].sin6, &lsa->u.sin6,
+ sizeof(struct sockaddr_in6));
+ }
+ #else
/* store a pointer to part of malloc'ed lsa */
+ _res._u._ext.nscount = 1;
_res._u._ext.nsaddrs[0] = &lsa->u.sin6;
/* must not free(lsa)! */
+ #endif
}
#endif
}
@@ -189,13 +220,26 @@ int nslookup_main(int argc, char **argv)
/* initialize DNS structure _res used in printing the default
* name server and in the explicit name server option feature. */
res_init();
+
+#ifdef ANDROID
+ res_ninit(&_res);
+#endif
+
/* rfc2133 says this enables IPv6 lookups */
/* (but it also says "may be enabled in /etc/resolv.conf") */
/*_res.options |= RES_USE_INET6;*/
- if (argv[2])
- set_default_dns(argv[2]);
+ set_default_dns(argv[2]);
server_print();
+
+ /* getaddrinfo and friends are free to request a resolver
+ * reinitialization. Just in case, set_default_dns() again
+ * after getaddrinfo (in server_print). This reportedly helps
+ * with bug 675 "nslookup does not properly use second argument"
+ * at least on Debian Wheezy and Openwrt AA (eglibc based).
+ */
+ set_default_dns(argv[2]);
+
return print_host(argv[1], "Name:");
}
diff --git a/networking/ntpd.c b/networking/ntpd.c
index 447a464..1c1c38f 100644
--- a/networking/ntpd.c
+++ b/networking/ntpd.c
@@ -63,10 +63,10 @@ extern int adjtimex (struct timex *);
/* Verbosity control (max level of -dddd options accepted).
- * max 5 is very talkative (and bloated). 2 is non-bloated,
+ * max 6 is very talkative (and bloated). 3 is non-bloated,
* production level setting.
*/
-#define MAX_VERBOSE 2
+#define MAX_VERBOSE 3
/* High-level description of the algorithm:
@@ -96,11 +96,24 @@ extern int adjtimex (struct timex *);
* was hibernated, someone set totally wrong date, etc),
* then the time is stepped, all datapoints are discarded,
* and we go back to steady state.
+ *
+ * Made some changes to speed up re-syncing after our clock goes bad
+ * (tested with suspending my laptop):
+ * - if largish offset (>= STEP_THRESHOLD * 8 == 1 sec) is seen
+ * from a peer, schedule next query for this peer soon
+ * without drastically lowering poll interval for everybody.
+ * This makes us collect enough data for step much faster:
+ * e.g. at poll = 10 (1024 secs), step was done within 5 minutes
+ * after first reply which indicated that our clock is 14 seconds off.
+ * - on step, do not discard d_dispersion data of the existing datapoints,
+ * do not clear reachable_bits. This prevents discarding first ~8
+ * datapoints after the step.
*/
-#define RETRY_INTERVAL 5 /* on error, retry in N secs */
+#define RETRY_INTERVAL 5 /* on error, retry in N secs */
#define RESPONSE_INTERVAL 15 /* wait for reply up to N secs */
-#define INITIAL_SAMPLES 4 /* how many samples do we want for init */
+#define INITIAL_SAMPLES 4 /* how many samples do we want for init */
+#define BAD_DELAY_GROWTH 4 /* drop packet if its delay grew by more than this */
/* Clock discipline parameters and constants */
@@ -114,6 +127,10 @@ extern int adjtimex (struct timex *);
#define FREQ_TOLERANCE 0.000015 /* frequency tolerance (15 PPM) */
#define BURSTPOLL 0 /* initial poll */
#define MINPOLL 5 /* minimum poll interval. std ntpd uses 6 (6: 64 sec) */
+/* If we got largish offset from a peer, cap next query interval
+ * for this peer by this many seconds:
+ */
+#define BIGOFF_INTERVAL (1 << 6)
/* If offset > discipline_jitter * POLLADJ_GATE, and poll interval is >= 2^BIGPOLL,
* then it is decreased _at once_. (If < 2^BIGPOLL, it will be decreased _eventually_).
*/
@@ -233,8 +250,8 @@ typedef struct {
uint8_t lastpkt_status;
uint8_t lastpkt_stratum;
uint8_t reachable_bits;
- /* when to send new query (if p_fd == -1)
- * or when receive times out (if p_fd >= 0): */
+ /* when to send new query (if p_fd == -1)
+ * or when receive times out (if p_fd >= 0): */
double next_action_time;
double p_xmttime;
double lastpkt_recv_time;
@@ -339,7 +356,7 @@ struct globals {
#define STATE_NSET 0 /* initial state, "nothing is set" */
//#define STATE_FSET 1 /* frequency set from file */
-#define STATE_SPIK 2 /* spike detected */
+//#define STATE_SPIK 2 /* spike detected */
//#define STATE_FREQ 3 /* initial frequency */
#define STATE_SYNC 4 /* clock synchronized (normal operation) */
uint8_t discipline_state; // doc calls it c.state
@@ -372,6 +389,7 @@ static const int const_IPTOS_LOWDELAY = IPTOS_LOWDELAY;
#define VERB3 if (MAX_VERBOSE >= 3 && G.verbose >= 3)
#define VERB4 if (MAX_VERBOSE >= 4 && G.verbose >= 4)
#define VERB5 if (MAX_VERBOSE >= 5 && G.verbose >= 5)
+#define VERB6 if (MAX_VERBOSE >= 6 && G.verbose >= 6)
static double LOG2D(int a)
@@ -573,7 +591,7 @@ filter_datapoints(peer_t *p)
got_newest = 0;
sum = 0;
for (i = 0; i < NUM_DATAPOINTS; i++) {
- VERB4 {
+ VERB5 {
bb_error_msg("datapoint[%d]: off:%f disp:%f(%f) age:%f%s",
i,
fdp[idx].d_offset,
@@ -670,7 +688,7 @@ filter_datapoints(peer_t *p)
sum = SQRT(sum / NUM_DATAPOINTS);
p->filter_jitter = sum > G_precision_sec ? sum : G_precision_sec;
- VERB3 bb_error_msg("filter offset:%+f disp:%f jitter:%f",
+ VERB4 bb_error_msg("filter offset:%+f disp:%f jitter:%f",
p->filter_offset,
p->filter_dispersion,
p->filter_jitter);
@@ -682,6 +700,18 @@ reset_peer_stats(peer_t *p, double offset)
int i;
bool small_ofs = fabs(offset) < 16 * STEP_THRESHOLD;
+ /* Used to set p->filter_datapoint[i].d_dispersion = MAXDISP
+ * and clear reachable bits, but this proved to be too agressive:
+ * after step (tested with suspinding laptop for ~30 secs),
+ * this caused all previous data to be considered invalid,
+ * making us needing to collect full ~8 datapoins per peer
+ * after step in order to start trusting them.
+ * In turn, this was making poll interval decrease even after
+ * step was done. (Poll interval decreases already before step
+ * in this scenario, because we see large offsets and end up with
+ * no good peer to select).
+ */
+
for (i = 0; i < NUM_DATAPOINTS; i++) {
if (small_ofs) {
p->filter_datapoint[i].d_recv_time += offset;
@@ -695,17 +725,17 @@ reset_peer_stats(peer_t *p, double offset)
} else {
p->filter_datapoint[i].d_recv_time = G.cur_time;
p->filter_datapoint[i].d_offset = 0;
- p->filter_datapoint[i].d_dispersion = MAXDISP;
+ /*p->filter_datapoint[i].d_dispersion = MAXDISP;*/
}
}
if (small_ofs) {
p->lastpkt_recv_time += offset;
} else {
- p->reachable_bits = 0;
+ /*p->reachable_bits = 0;*/
p->lastpkt_recv_time = G.cur_time;
}
filter_datapoints(p); /* recalc p->filter_xxx */
- VERB5 bb_error_msg("%s->lastpkt_recv_time=%f", p->p_dotted, p->lastpkt_recv_time);
+ VERB6 bb_error_msg("%s->lastpkt_recv_time=%f", p->p_dotted, p->lastpkt_recv_time);
}
static void
@@ -810,22 +840,34 @@ send_query_to_peer(peer_t *p)
p->p_xmt_msg.m_xmttime.fractionl = random();
p->p_xmttime = gettime1900d();
+ /* Were doing it only if sendto worked, but
+ * loss of sync detection needs reachable_bits updated
+ * even if sending fails *locally*:
+ * "network is unreachable" because cable was pulled?
+ * We still need to declare "unsync" if this condition persists.
+ */
+ p->reachable_bits <<= 1;
+
if (do_sendto(p->p_fd, /*from:*/ NULL, /*to:*/ &p->p_lsa->u.sa, /*addrlen:*/ p->p_lsa->len,
&p->p_xmt_msg, NTP_MSGSIZE_NOAUTH) == -1
) {
close(p->p_fd);
p->p_fd = -1;
+ /*
+ * We know that we sent nothing.
+ * We can retry *soon* without fearing
+ * that we are flooding the peer.
+ */
set_next(p, RETRY_INTERVAL);
return;
}
- p->reachable_bits <<= 1;
set_next(p, RESPONSE_INTERVAL);
}
/* Note that there is no provision to prevent several run_scripts
- * to be done in quick succession. In fact, it happens rather often
+ * to be started in quick succession. In fact, it happens rather often
* if initial syncronization results in a step.
* You will see "step" and then "stratum" script runs, sometimes
* as close as only 0.002 seconds apart.
@@ -836,6 +878,8 @@ static void run_script(const char *action, double offset)
char *argv[3];
char *env1, *env2, *env3, *env4;
+ G.last_script_run = G.cur_time;
+
if (!G.script_name)
return;
@@ -872,8 +916,6 @@ static void run_script(const char *action, double offset)
free(env2);
free(env3);
free(env4);
-
- G.last_script_run = G.cur_time;
}
static NOINLINE void
@@ -893,11 +935,11 @@ step_time(double offset)
VERB2 {
tval = tvc.tv_sec;
- strftime(buf, sizeof(buf), "%Y-%m-%d %H:%M:%S", localtime(&tval));
+ strftime_YYYYMMDDHHMMSS(buf, sizeof(buf), &tval);
bb_error_msg("current time is %s.%06u", buf, (unsigned)tvc.tv_usec);
}
tval = tvn.tv_sec;
- strftime(buf, sizeof(buf), "%Y-%m-%d %H:%M:%S", localtime(&tval));
+ strftime_YYYYMMDDHHMMSS(buf, sizeof(buf), &tval);
bb_error_msg("setting time to %s.%06u (offset %+fs)", buf, (unsigned)tvn.tv_usec, offset);
/* Correct various fields which contain time-relative values: */
@@ -965,20 +1007,20 @@ fit(peer_t *p, double rd)
{
if ((p->reachable_bits & (p->reachable_bits-1)) == 0) {
/* One or zero bits in reachable_bits */
- VERB3 bb_error_msg("peer %s unfit for selection: unreachable", p->p_dotted);
+ VERB4 bb_error_msg("peer %s unfit for selection: unreachable", p->p_dotted);
return 0;
}
#if 0 /* we filter out such packets earlier */
if ((p->lastpkt_status & LI_ALARM) == LI_ALARM
|| p->lastpkt_stratum >= MAXSTRAT
) {
- VERB3 bb_error_msg("peer %s unfit for selection: bad status/stratum", p->p_dotted);
+ VERB4 bb_error_msg("peer %s unfit for selection: bad status/stratum", p->p_dotted);
return 0;
}
#endif
/* rd is root_distance(p) */
if (rd > MAXDIST + FREQ_TOLERANCE * (1 << G.poll_exp)) {
- VERB3 bb_error_msg("peer %s unfit for selection: root distance too high", p->p_dotted);
+ VERB4 bb_error_msg("peer %s unfit for selection: root distance too high", p->p_dotted);
return 0;
}
//TODO
@@ -1018,7 +1060,7 @@ select_and_cluster(void)
continue;
}
- VERB4 bb_error_msg("interval: [%f %f %f] %s",
+ VERB5 bb_error_msg("interval: [%f %f %f] %s",
offset - rd,
offset,
offset + rd,
@@ -1043,7 +1085,7 @@ select_and_cluster(void)
}
num_candidates = num_points / 3;
if (num_candidates == 0) {
- VERB3 bb_error_msg("no valid datapoints, no peer selected");
+ VERB3 bb_error_msg("no valid datapoints%s", ", no peer selected");
return NULL;
}
//TODO: sorting does not seem to be done in reference code
@@ -1101,12 +1143,13 @@ select_and_cluster(void)
break;
num_falsetickers++;
if (num_falsetickers * 2 >= num_candidates) {
- VERB3 bb_error_msg("too many falsetickers:%d (candidates:%d), no peer selected",
- num_falsetickers, num_candidates);
+ VERB3 bb_error_msg("falsetickers:%d, candidates:%d%s",
+ num_falsetickers, num_candidates,
+ ", no peer selected");
return NULL;
}
}
- VERB3 bb_error_msg("selected interval: [%f, %f]; candidates:%d falsetickers:%d",
+ VERB4 bb_error_msg("selected interval: [%f, %f]; candidates:%d falsetickers:%d",
low, high, num_candidates, num_falsetickers);
/* Clustering */
@@ -1124,7 +1167,7 @@ select_and_cluster(void)
survivor[num_survivors].p = p;
/* x.opt_rd == root_distance(p); */
survivor[num_survivors].metric = MAXDIST * p->lastpkt_stratum + point[i].opt_rd;
- VERB4 bb_error_msg("survivor[%d] metric:%f peer:%s",
+ VERB5 bb_error_msg("survivor[%d] metric:%f peer:%s",
num_survivors, survivor[num_survivors].metric, p->p_dotted);
num_survivors++;
}
@@ -1134,8 +1177,9 @@ select_and_cluster(void)
* is acceptable.
*/
if (num_survivors < MIN_SELECTED) {
- VERB3 bb_error_msg("num_survivors %d < %d, no peer selected",
- num_survivors, MIN_SELECTED);
+ VERB3 bb_error_msg("survivors:%d%s",
+ num_survivors,
+ ", no peer selected");
return NULL;
}
@@ -1155,7 +1199,7 @@ select_and_cluster(void)
double min_jitter = min_jitter;
if (num_survivors <= MIN_CLUSTERED) {
- VERB3 bb_error_msg("num_survivors %d <= %d, not discarding more",
+ VERB4 bb_error_msg("num_survivors %d <= %d, not discarding more",
num_survivors, MIN_CLUSTERED);
break;
}
@@ -1181,11 +1225,11 @@ select_and_cluster(void)
max_selection_jitter = selection_jitter_sq;
max_idx = i;
}
- VERB5 bb_error_msg("survivor %d selection_jitter^2:%f",
+ VERB6 bb_error_msg("survivor %d selection_jitter^2:%f",
i, selection_jitter_sq);
}
max_selection_jitter = SQRT(max_selection_jitter / num_survivors);
- VERB4 bb_error_msg("max_selection_jitter (at %d):%f min_jitter:%f",
+ VERB5 bb_error_msg("max_selection_jitter (at %d):%f min_jitter:%f",
max_idx, max_selection_jitter, min_jitter);
/* If the maximum selection jitter is less than the
@@ -1194,7 +1238,7 @@ select_and_cluster(void)
* as well stop.
*/
if (max_selection_jitter < min_jitter) {
- VERB3 bb_error_msg("max_selection_jitter:%f < min_jitter:%f, num_survivors:%d, not discarding more",
+ VERB4 bb_error_msg("max_selection_jitter:%f < min_jitter:%f, num_survivors:%d, not discarding more",
max_selection_jitter, min_jitter, num_survivors);
break;
}
@@ -1202,7 +1246,7 @@ select_and_cluster(void)
/* Delete survivor[max_idx] from the list
* and go around again.
*/
- VERB5 bb_error_msg("dropping survivor %d", max_idx);
+ VERB6 bb_error_msg("dropping survivor %d", max_idx);
num_survivors--;
while (max_idx < num_survivors) {
survivor[max_idx] = survivor[max_idx + 1];
@@ -1244,7 +1288,7 @@ select_and_cluster(void)
/* Starting from 1 is ok here */
for (i = 1; i < num_survivors; i++) {
if (G.last_update_peer == survivor[i].p) {
- VERB4 bb_error_msg("keeping old synced peer");
+ VERB5 bb_error_msg("keeping old synced peer");
p = G.last_update_peer;
goto keep_old;
}
@@ -1252,7 +1296,7 @@ select_and_cluster(void)
}
G.last_update_peer = p;
keep_old:
- VERB3 bb_error_msg("selected peer %s filter_offset:%+f age:%f",
+ VERB4 bb_error_msg("selected peer %s filter_offset:%+f age:%f",
p->p_dotted,
p->filter_offset,
G.cur_time - p->lastpkt_recv_time
@@ -1271,7 +1315,7 @@ set_new_values(int disc_state, double offset, double recv_time)
* of the last clock filter sample, which must be earlier than
* the current time.
*/
- VERB3 bb_error_msg("disc_state=%d last update offset=%f recv_time=%f",
+ VERB4 bb_error_msg("disc_state=%d last update offset=%f recv_time=%f",
disc_state, offset, recv_time);
G.discipline_state = disc_state;
G.last_update_offset = offset;
@@ -1309,8 +1353,8 @@ update_local_clock(peer_t *p)
* an old sample or the same sample twice.
*/
if (recv_time <= G.last_update_recv_time) {
- VERB3 bb_error_msg("same or older datapoint: %f >= %f, not using it",
- G.last_update_recv_time, recv_time);
+ VERB3 bb_error_msg("update from %s: same or older datapoint, not using it",
+ p->p_dotted);
return 0; /* "leave poll interval as is" */
}
@@ -1326,7 +1370,7 @@ update_local_clock(peer_t *p)
if (G.discipline_state == STATE_FREQ) {
/* Ignore updates until the stepout threshold */
if (since_last_update < WATCH_THRESHOLD) {
- VERB3 bb_error_msg("measuring drift, datapoint ignored, %f sec remains",
+ VERB4 bb_error_msg("measuring drift, datapoint ignored, %f sec remains",
WATCH_THRESHOLD - since_last_update);
return 0; /* "leave poll interval as is" */
}
@@ -1340,10 +1384,21 @@ update_local_clock(peer_t *p)
* offset exceeds the step threshold and when it does not.
*/
if (abs_offset > STEP_THRESHOLD) {
+#if 0
+ double remains;
+
+// This "spike state" seems to be useless, peer selection already drops
+// occassional "bad" datapoints. If we are here, there were _many_
+// large offsets. When a few first large offsets are seen,
+// we end up in "no valid datapoints, no peer selected" state.
+// Only when enough of them are seen (which means it's not a fluke),
+// we end up here. Looks like _our_ clock is off.
switch (G.discipline_state) {
case STATE_SYNC:
/* The first outlyer: ignore it, switch to SPIK state */
- VERB3 bb_error_msg("offset:%+f - spike detected", offset);
+ VERB3 bb_error_msg("update from %s: offset:%+f, spike%s",
+ p->p_dotted, offset,
+ "");
G.discipline_state = STATE_SPIK;
return -1; /* "decrease poll interval" */
@@ -1351,13 +1406,16 @@ update_local_clock(peer_t *p)
/* Ignore succeeding outlyers until either an inlyer
* is found or the stepout threshold is exceeded.
*/
- if (since_last_update < WATCH_THRESHOLD) {
- VERB3 bb_error_msg("spike detected, datapoint ignored, %f sec remains",
- WATCH_THRESHOLD - since_last_update);
+ remains = WATCH_THRESHOLD - since_last_update;
+ if (remains > 0) {
+ VERB3 bb_error_msg("update from %s: offset:%+f, spike%s",
+ p->p_dotted, offset,
+ ", datapoint ignored");
return -1; /* "decrease poll interval" */
}
/* fall through: we need to step */
} /* switch */
+#endif
/* Step the time and clamp down the poll interval.
*
@@ -1380,7 +1438,7 @@ update_local_clock(peer_t *p)
* is always suppressed, even at the longer poll
* intervals.
*/
- VERB3 bb_error_msg("stepping time by %+f; poll_exp=MINPOLL", offset);
+ VERB4 bb_error_msg("stepping time by %+f; poll_exp=MINPOLL", offset);
step_time(offset);
if (option_mask32 & OPT_q) {
/* We were only asked to set time once. Done. */
@@ -1393,6 +1451,8 @@ update_local_clock(peer_t *p)
run_script("step", offset);
+ recv_time += offset;
+
#if USING_INITIAL_FREQ_ESTIMATION
if (G.discipline_state == STATE_NSET) {
set_new_values(STATE_FREQ, /*offset:*/ 0, recv_time);
@@ -1405,7 +1465,7 @@ update_local_clock(peer_t *p)
} else { /* abs_offset <= STEP_THRESHOLD */
if (G.poll_exp < MINPOLL && G.initial_poll_complete) {
- VERB3 bb_error_msg("small offset:%+f, disabling burst mode", offset);
+ VERB4 bb_error_msg("small offset:%+f, disabling burst mode", offset);
G.polladj_count = 0;
G.poll_exp = MINPOLL;
}
@@ -1434,7 +1494,7 @@ update_local_clock(peer_t *p)
#else
set_new_values(STATE_SYNC, offset, recv_time);
#endif
- VERB3 bb_error_msg("transitioning to FREQ, datapoint ignored");
+ VERB4 bb_error_msg("transitioning to FREQ, datapoint ignored");
return 0; /* "leave poll interval as is" */
#if 0 /* this is dead code for now */
@@ -1503,7 +1563,7 @@ update_local_clock(peer_t *p)
dtemp = p->filter_jitter; // SQRT(SQUARE(p->filter_jitter) + SQUARE(G.cluster_jitter));
dtemp += MAXD(p->filter_dispersion + FREQ_TOLERANCE * (G.cur_time - p->lastpkt_recv_time) + abs_offset, MINDISP);
G.rootdisp = p->lastpkt_rootdisp + dtemp;
- VERB3 bb_error_msg("updating leap/refid/reftime/rootdisp from peer %s", p->p_dotted);
+ VERB4 bb_error_msg("updating leap/refid/reftime/rootdisp from peer %s", p->p_dotted);
/* We are in STATE_SYNC now, but did not do adjtimex yet.
* (Any other state does not reach this, they all return earlier)
@@ -1523,13 +1583,13 @@ update_local_clock(peer_t *p)
dtemp = SQUARE(dtemp);
G.discipline_wander = SQRT(etemp + (dtemp - etemp) / AVG);
- VERB3 bb_error_msg("discipline freq_drift=%.9f(int:%ld corr:%e) wander=%f",
+ VERB4 bb_error_msg("discipline freq_drift=%.9f(int:%ld corr:%e) wander=%f",
G.discipline_freq_drift,
(long)(G.discipline_freq_drift * 65536e6),
freq_drift,
G.discipline_wander);
#endif
- VERB3 {
+ VERB4 {
memset(&tmx, 0, sizeof(tmx));
if (adjtimex(&tmx) < 0)
bb_perror_msg_and_die("adjtimex");
@@ -1577,7 +1637,7 @@ update_local_clock(peer_t *p)
/* NB: here kernel returns constant == G.poll_exp, not == G.poll_exp - 4.
* Not sure why. Perhaps it is normal.
*/
- VERB3 bb_error_msg("adjtimex:%d freq:%ld offset:%+ld status:0x%x",
+ VERB4 bb_error_msg("adjtimex:%d freq:%ld offset:%+ld status:0x%x",
rc, tmx.freq, tmx.offset, tmx.status);
G.kernel_freq_drift = tmx.freq / 65536;
VERB2 bb_error_msg("update from:%s offset:%+f jitter:%f clock drift:%+.3fppm tc:%d",
@@ -1599,7 +1659,7 @@ retry_interval(void)
interval = RETRY_INTERVAL;
r = random();
interval += r % (unsigned)(RETRY_INTERVAL / 4);
- VERB3 bb_error_msg("chose retry interval:%u", interval);
+ VERB4 bb_error_msg("chose retry interval:%u", interval);
return interval;
}
static unsigned
@@ -1612,7 +1672,7 @@ poll_interval(int exponent)
interval = 1 << exponent;
r = random();
interval += ((r & (interval-1)) >> 4) + ((r >> 8) & 1); /* + 1/16 of interval, max */
- VERB3 bb_error_msg("chose poll interval:%u (poll_exp:%d exp:%d)", interval, G.poll_exp, exponent);
+ VERB4 bb_error_msg("chose poll interval:%u (poll_exp:%d exp:%d)", interval, G.poll_exp, exponent);
return interval;
}
static NOINLINE void
@@ -1622,10 +1682,13 @@ recv_and_process_peer_pkt(peer_t *p)
ssize_t size;
msg_t msg;
double T1, T2, T3, T4;
+ double dv, offset;
unsigned interval;
datapoint_t *datapoint;
peer_t *q;
+ offset = 0;
+
/* We can recvfrom here and check from.IP, but some multihomed
* ntp servers reply from their *other IP*.
* TODO: maybe we should check at least what we can: from.port == 123?
@@ -1671,9 +1734,8 @@ recv_and_process_peer_pkt(peer_t *p)
// TODO: stratum 0 responses may have commands in 32-bit m_refid field:
// "DENY", "RSTR" - peer does not like us at all
// "RATE" - peer is overloaded, reduce polling freq
- interval = poll_interval(0);
- bb_error_msg("reply from %s: peer is unsynced, next query in %us", p->p_dotted, interval);
- goto set_next_and_ret;
+ bb_error_msg("reply from %s: peer is unsynced", p->p_dotted);
+ goto pick_normal_interval;
}
// /* Verify valid root distance */
@@ -1706,27 +1768,37 @@ recv_and_process_peer_pkt(peer_t *p)
T4 = G.cur_time;
p->lastpkt_recv_time = T4;
+ VERB6 bb_error_msg("%s->lastpkt_recv_time=%f", p->p_dotted, p->lastpkt_recv_time);
- VERB5 bb_error_msg("%s->lastpkt_recv_time=%f", p->p_dotted, p->lastpkt_recv_time);
- p->datapoint_idx = p->reachable_bits ? (p->datapoint_idx + 1) % NUM_DATAPOINTS : 0;
- datapoint = &p->filter_datapoint[p->datapoint_idx];
- datapoint->d_recv_time = T4;
- datapoint->d_offset = ((T2 - T1) + (T3 - T4)) / 2;
/* The delay calculation is a special case. In cases where the
* server and client clocks are running at different rates and
* with very fast networks, the delay can appear negative. In
* order to avoid violating the Principle of Least Astonishment,
* the delay is clamped not less than the system precision.
*/
+ dv = p->lastpkt_delay;
p->lastpkt_delay = (T4 - T1) - (T3 - T2);
if (p->lastpkt_delay < G_precision_sec)
p->lastpkt_delay = G_precision_sec;
+ /*
+ * If this packet's delay is much bigger than the last one,
+ * it's better to just ignore it than use its much less precise value.
+ */
+ if (p->reachable_bits && p->lastpkt_delay > dv * BAD_DELAY_GROWTH) {
+ bb_error_msg("reply from %s: delay %f is too high, ignoring", p->p_dotted, p->lastpkt_delay);
+ goto pick_normal_interval;
+ }
+
+ p->datapoint_idx = p->reachable_bits ? (p->datapoint_idx + 1) % NUM_DATAPOINTS : 0;
+ datapoint = &p->filter_datapoint[p->datapoint_idx];
+ datapoint->d_recv_time = T4;
+ datapoint->d_offset = offset = ((T2 - T1) + (T3 - T4)) / 2;
datapoint->d_dispersion = LOG2D(msg.m_precision_exp) + G_precision_sec;
if (!p->reachable_bits) {
/* 1st datapoint ever - replicate offset in every element */
int i;
for (i = 0; i < NUM_DATAPOINTS; i++) {
- p->filter_datapoint[i].d_offset = datapoint->d_offset;
+ p->filter_datapoint[i].d_offset = offset;
}
}
@@ -1734,7 +1806,7 @@ recv_and_process_peer_pkt(peer_t *p)
if ((MAX_VERBOSE && G.verbose) || (option_mask32 & OPT_w)) {
bb_error_msg("reply from %s: offset:%+f delay:%f status:0x%02x strat:%d refid:0x%08x rootdelay:%f reach:0x%02x",
p->p_dotted,
- datapoint->d_offset,
+ offset,
p->lastpkt_delay,
p->lastpkt_status,
p->lastpkt_stratum,
@@ -1759,7 +1831,7 @@ recv_and_process_peer_pkt(peer_t *p)
* drop poll interval one step down.
*/
if (fabs(q->filter_offset) >= POLLDOWN_OFFSET) {
- VERB3 bb_error_msg("offset:%+f > POLLDOWN_OFFSET", q->filter_offset);
+ VERB4 bb_error_msg("offset:%+f > POLLDOWN_OFFSET", q->filter_offset);
goto poll_down;
}
}
@@ -1781,11 +1853,11 @@ recv_and_process_peer_pkt(peer_t *p)
G.polladj_count = 0;
if (G.poll_exp < MAXPOLL) {
G.poll_exp++;
- VERB3 bb_error_msg("polladj: discipline_jitter:%f ++poll_exp=%d",
+ VERB4 bb_error_msg("polladj: discipline_jitter:%f ++poll_exp=%d",
G.discipline_jitter, G.poll_exp);
}
} else {
- VERB3 bb_error_msg("polladj: incr:%d", G.polladj_count);
+ VERB4 bb_error_msg("polladj: incr:%d", G.polladj_count);
}
} else {
G.polladj_count -= G.poll_exp * 2;
@@ -1807,17 +1879,32 @@ recv_and_process_peer_pkt(peer_t *p)
if (pp->p_fd < 0)
pp->next_action_time -= (1 << G.poll_exp);
}
- VERB3 bb_error_msg("polladj: discipline_jitter:%f --poll_exp=%d",
+ VERB4 bb_error_msg("polladj: discipline_jitter:%f --poll_exp=%d",
G.discipline_jitter, G.poll_exp);
}
} else {
- VERB3 bb_error_msg("polladj: decr:%d", G.polladj_count);
+ VERB4 bb_error_msg("polladj: decr:%d", G.polladj_count);
}
}
}
/* Decide when to send new query for this peer */
+ pick_normal_interval:
interval = poll_interval(0);
+ if (fabs(offset) >= STEP_THRESHOLD * 8 && interval > BIGOFF_INTERVAL) {
+ /* If we are synced, offsets are less than STEP_THRESHOLD,
+ * or at the very least not much larger than it.
+ * Now we see a largish one.
+ * Either this peer is feeling bad, or packet got corrupted,
+ * or _our_ clock is wrong now and _all_ peers will show similar
+ * largish offsets too.
+ * I observed this with laptop suspend stopping clock.
+ * In any case, it makes sense to make next request soonish:
+ * cases 1 and 2: get a better datapoint,
+ * case 3: allows to resync faster.
+ */
+ interval = BIGOFF_INTERVAL;
+ }
set_next_and_ret:
set_next(p, interval);
@@ -2165,12 +2252,14 @@ int ntpd_main(int argc UNUSED_PARAM, char **argv)
did_poll:
gettime1900d(); /* sets G.cur_time */
if (nfds <= 0) {
- if (G.script_name && G.cur_time - G.last_script_run > 11*60) {
+ if (!bb_got_signal /* poll wasn't interrupted by a signal */
+ && G.cur_time - G.last_script_run > 11*60
+ ) {
/* Useful for updating battery-backed RTC and such */
run_script("periodic", G.last_update_offset);
gettime1900d(); /* sets G.cur_time */
}
- continue;
+ goto check_unsync;
}
/* Process any received packets */
@@ -2201,6 +2290,21 @@ int ntpd_main(int argc UNUSED_PARAM, char **argv)
gettime1900d(); /* sets G.cur_time */
}
}
+
+ check_unsync:
+ if (G.ntp_peers && G.stratum != MAXSTRAT) {
+ for (item = G.ntp_peers; item != NULL; item = item->link) {
+ peer_t *p = (peer_t *) item->data;
+ if (p->reachable_bits)
+ goto have_reachable_peer;
+ }
+ /* No peer responded for last 8 packets, panic */
+ G.polladj_count = 0;
+ G.poll_exp = MINPOLL;
+ G.stratum = MAXSTRAT;
+ run_script("unsync", 0.0);
+ have_reachable_peer: ;
+ }
} /* while (!bb_got_signal) */
remove_pidfile(CONFIG_PID_FILE_PATH "/ntpd.pid");
diff --git a/networking/ntpd_simple.c b/networking/ntpd_simple.c
index 55bded8..3e7fc47 100644
--- a/networking/ntpd_simple.c
+++ b/networking/ntpd_simple.c
@@ -378,7 +378,7 @@ step_time_once(double offset)
bb_perror_msg_and_die("settimeofday");
tval = tv.tv_sec;
- strftime(buf, sizeof(buf), "%a %b %e %H:%M:%S %Z %Y", localtime(&tval));
+ strftime_YYYYMMDDHHMMSS(buf, sizeof(buf), &tval);
bb_error_msg("setting clock to %s (offset %fs)", buf, offset);
diff --git a/networking/ping.c b/networking/ping.c
index ac67d46..46a3889 100644
--- a/networking/ping.c
+++ b/networking/ping.c
@@ -89,7 +89,9 @@
//usage: "[OPTIONS] HOST"
//usage:# define ping_full_usage "\n\n"
//usage: "Send ICMP ECHO_REQUEST packets to network hosts\n"
+//usage: IF_PING6(
//usage: "\n -4,-6 Force IP or IPv6 name resolution"
+//usage: )
//usage: "\n -c CNT Send only CNT pings"
//usage: "\n -s SIZE Send SIZE data bytes in packets (default:56)"
//usage: "\n -t TTL Set TTL"
@@ -147,8 +149,46 @@ enum {
MAX_DUP_CHK = (8 * 128),
MAXWAIT = 10,
PINGINTERVAL = 1, /* 1 second */
+ pingsock = 0,
};
+static void
+#if ENABLE_PING6
+create_icmp_socket(len_and_sockaddr *lsa)
+#else
+create_icmp_socket(void)
+#define create_icmp_socket(lsa) create_icmp_socket()
+#endif
+{
+ int sock;
+#if ENABLE_PING6
+ if (lsa->u.sa.sa_family == AF_INET6)
+ sock = socket(AF_INET6, SOCK_RAW, IPPROTO_ICMPV6);
+ else
+#endif
+ sock = socket(AF_INET, SOCK_RAW, 1); /* 1 == ICMP */
+ if (sock < 0) {
+ if (errno != EPERM)
+ bb_perror_msg_and_die("%s", bb_msg_can_not_create_raw_socket);
+#if defined(__linux__) || defined(__APPLE__)
+ /* We don't have root privileges. Try SOCK_DGRAM instead.
+ * Linux needs net.ipv4.ping_group_range for this to work.
+ * MacOSX allows ICMP_ECHO, ICMP_TSTAMP or ICMP_MASKREQ
+ */
+#if ENABLE_PING6
+ if (lsa->u.sa.sa_family == AF_INET6)
+ sock = socket(AF_INET6, SOCK_DGRAM, IPPROTO_ICMPV6);
+ else
+#endif
+ sock = socket(AF_INET, SOCK_DGRAM, 1); /* 1 == ICMP */
+ if (sock < 0)
+#endif
+ bb_error_msg_and_die("%s", bb_msg_perm_denied_are_you_root);
+ }
+
+ xmove_fd(sock, pingsock);
+}
+
#if !ENABLE_FEATURE_FANCY_PING
/* Simple version */
@@ -169,12 +209,10 @@ static void noresp(int ign UNUSED_PARAM)
static void ping4(len_and_sockaddr *lsa)
{
struct icmp *pkt;
- int pingsock, c;
-
- pingsock = create_icmp_socket();
+ int c;
pkt = (struct icmp *) G.packet;
- memset(pkt, 0, sizeof(G.packet));
+ /*memset(pkt, 0, sizeof(G.packet)); already is */
pkt->icmp_type = ICMP_ECHO;
pkt->icmp_cksum = inet_cksum((uint16_t *) pkt, sizeof(G.packet));
@@ -182,11 +220,15 @@ static void ping4(len_and_sockaddr *lsa)
/* listen for replies */
while (1) {
+#if 0
struct sockaddr_in from;
socklen_t fromlen = sizeof(from);
c = recvfrom(pingsock, G.packet, sizeof(G.packet), 0,
(struct sockaddr *) &from, &fromlen);
+#else
+ c = recv(pingsock, G.packet, sizeof(G.packet), 0);
+#endif
if (c < 0) {
if (errno != EINTR)
bb_perror_msg("recvfrom");
@@ -208,13 +250,11 @@ static void ping4(len_and_sockaddr *lsa)
static void ping6(len_and_sockaddr *lsa)
{
struct icmp6_hdr *pkt;
- int pingsock, c;
+ int c;
int sockopt;
- pingsock = create_icmp6_socket();
-
pkt = (struct icmp6_hdr *) G.packet;
- memset(pkt, 0, sizeof(G.packet));
+ /*memset(pkt, 0, sizeof(G.packet)); already is */
pkt->icmp6_type = ICMP6_ECHO_REQUEST;
sockopt = offsetof(struct icmp6_hdr, icmp6_cksum);
@@ -224,18 +264,21 @@ static void ping6(len_and_sockaddr *lsa)
/* listen for replies */
while (1) {
+#if 0
struct sockaddr_in6 from;
socklen_t fromlen = sizeof(from);
c = recvfrom(pingsock, G.packet, sizeof(G.packet), 0,
(struct sockaddr *) &from, &fromlen);
+#else
+ c = recv(pingsock, G.packet, sizeof(G.packet), 0);
+#endif
if (c < 0) {
if (errno != EINTR)
bb_perror_msg("recvfrom");
continue;
}
- if (c >= ICMP_MINLEN) { /* icmp6_hdr */
- pkt = (struct icmp6_hdr *) G.packet;
+ if (c >= ICMP_MINLEN) { /* icmp6_hdr */
if (pkt->icmp6_type == ICMP6_ECHO_REPLY)
break;
}
@@ -283,6 +326,7 @@ static int common_ping_main(sa_family_t af, char **argv)
signal(SIGALRM, noresp);
alarm(5); /* give the host 5000ms to respond */
+ create_icmp_socket(lsa);
#if ENABLE_PING6
if (lsa->u.sa.sa_family == AF_INET6)
ping6(lsa);
@@ -299,7 +343,7 @@ static int common_ping_main(sa_family_t af, char **argv)
/* Full(er) version */
-#define OPT_STRING ("qvc:s:t:w:W:I:4" IF_PING6("6"))
+#define OPT_STRING ("qvc:s:t:w:W:I:n4" IF_PING6("6"))
enum {
OPT_QUIET = 1 << 0,
OPT_VERBOSE = 1 << 1,
@@ -309,13 +353,13 @@ enum {
OPT_w = 1 << 5,
OPT_W = 1 << 6,
OPT_I = 1 << 7,
- OPT_IPV4 = 1 << 8,
- OPT_IPV6 = (1 << 9) * ENABLE_PING6,
+ /*OPT_n = 1 << 8, - ignored */
+ OPT_IPV4 = 1 << 9,
+ OPT_IPV6 = (1 << 10) * ENABLE_PING6,
};
struct globals {
- int pingsock;
int if_index;
char *str_I;
len_and_sockaddr *source_lsa;
@@ -341,17 +385,13 @@ struct globals {
struct sockaddr_in6 sin6;
#endif
} pingaddr;
- char rcvd_tbl[MAX_DUP_CHK / 8];
+ unsigned char rcvd_tbl[MAX_DUP_CHK / 8];
} FIX_ALIASING;
#define G (*(struct globals*)&bb_common_bufsiz1)
-#define pingsock (G.pingsock )
#define if_index (G.if_index )
#define source_lsa (G.source_lsa )
#define str_I (G.str_I )
#define datalen (G.datalen )
-#define ntransmitted (G.ntransmitted)
-#define nreceived (G.nreceived )
-#define nrepeats (G.nrepeats )
#define pingcount (G.pingcount )
#define opt_ttl (G.opt_ttl )
#define myid (G.myid )
@@ -369,51 +409,55 @@ void BUG_ping_globals_too_big(void);
#define INIT_G() do { \
if (sizeof(G) > COMMON_BUFSIZE) \
BUG_ping_globals_too_big(); \
- pingsock = -1; \
datalen = DEFDATALEN; \
timeout = MAXWAIT; \
tmin = UINT_MAX; \
} while (0)
-#define A(bit) rcvd_tbl[(bit)>>3] /* identify byte in array */
-#define B(bit) (1 << ((bit) & 0x07)) /* identify bit in byte */
-#define SET(bit) (A(bit) |= B(bit))
-#define CLR(bit) (A(bit) &= (~B(bit)))
-#define TST(bit) (A(bit) & B(bit))
-
-/**************************************************************************/
+#define BYTE(bit) rcvd_tbl[(bit)>>3]
+#define MASK(bit) (1 << ((bit) & 7))
+#define SET(bit) (BYTE(bit) |= MASK(bit))
+#define CLR(bit) (BYTE(bit) &= (~MASK(bit)))
+#define TST(bit) (BYTE(bit) & MASK(bit))
static void print_stats_and_exit(int junk) NORETURN;
static void print_stats_and_exit(int junk UNUSED_PARAM)
{
+ unsigned long ul;
+ unsigned long nrecv;
+
signal(SIGINT, SIG_IGN);
- printf("\n--- %s ping statistics ---\n", hostname);
- printf("%lu packets transmitted, ", ntransmitted);
- printf("%lu packets received, ", nreceived);
- if (nrepeats)
- printf("%lu duplicates, ", nrepeats);
- if (ntransmitted)
- ntransmitted = (ntransmitted - nreceived) * 100 / ntransmitted;
- printf("%lu%% packet loss\n", ntransmitted);
+ nrecv = G.nreceived;
+ printf("\n--- %s ping statistics ---\n"
+ "%lu packets transmitted, "
+ "%lu packets received, ",
+ hostname, G.ntransmitted, nrecv
+ );
+ if (G.nrepeats)
+ printf("%lu duplicates, ", G.nrepeats);
+ ul = G.ntransmitted;
+ if (ul != 0)
+ ul = (ul - nrecv) * 100 / ul;
+ printf("%lu%% packet loss\n", ul);
if (tmin != UINT_MAX) {
- unsigned tavg = tsum / (nreceived + nrepeats);
+ unsigned tavg = tsum / (nrecv + G.nrepeats);
printf("round-trip min/avg/max = %u.%03u/%u.%03u/%u.%03u ms\n",
tmin / 1000, tmin % 1000,
tavg / 1000, tavg % 1000,
tmax / 1000, tmax % 1000);
}
/* if condition is true, exit with 1 -- 'failure' */
- exit(nreceived == 0 || (deadline && nreceived < pingcount));
+ exit(nrecv == 0 || (deadline && nrecv < pingcount));
}
static void sendping_tail(void (*sp)(int), int size_pkt)
{
int sz;
- CLR((uint16_t)ntransmitted % MAX_DUP_CHK);
- ntransmitted++;
+ CLR((uint16_t)G.ntransmitted % MAX_DUP_CHK);
+ G.ntransmitted++;
size_pkt += datalen;
@@ -423,7 +467,7 @@ static void sendping_tail(void (*sp)(int), int size_pkt)
if (sz != size_pkt)
bb_error_msg_and_die("%s", bb_msg_write_error);
- if (pingcount == 0 || deadline || ntransmitted < pingcount) {
+ if (pingcount == 0 || deadline || G.ntransmitted < pingcount) {
/* Didn't send all pings yet - schedule next in 1s */
signal(SIGALRM, sp);
if (deadline) {
@@ -439,7 +483,7 @@ static void sendping_tail(void (*sp)(int), int size_pkt)
* otherwise ping waits for two RTTs. */
unsigned expire = timeout;
- if (nreceived) {
+ if (G.nreceived) {
/* approx. 2*tmax, in seconds (2 RTT) */
expire = tmax / (512*1024);
if (expire == 0)
@@ -458,7 +502,7 @@ static void sendping4(int junk UNUSED_PARAM)
pkt->icmp_type = ICMP_ECHO;
/*pkt->icmp_code = 0;*/
pkt->icmp_cksum = 0; /* cksum is calculated with this field set to 0 */
- pkt->icmp_seq = htons(ntransmitted); /* don't ++ here, it can be a macro */
+ pkt->icmp_seq = htons(G.ntransmitted); /* don't ++ here, it can be a macro */
pkt->icmp_id = myid;
/* If datalen < 4, we store timestamp _past_ the packet,
@@ -481,11 +525,11 @@ static void sendping6(int junk UNUSED_PARAM)
pkt->icmp6_type = ICMP6_ECHO_REQUEST;
/*pkt->icmp6_code = 0;*/
/*pkt->icmp6_cksum = 0;*/
- pkt->icmp6_seq = htons(ntransmitted); /* don't ++ here, it can be a macro */
+ pkt->icmp6_seq = htons(G.ntransmitted); /* don't ++ here, it can be a macro */
pkt->icmp6_id = myid;
/*if (datalen >= 4)*/
- *(uint32_t*)(&pkt->icmp6_data8[4]) = monotonic_us();
+ *(bb__aliased_uint32_t*)(&pkt->icmp6_data8[4]) = monotonic_us();
//TODO? pkt->icmp_cksum = inet_cksum(...);
@@ -545,11 +589,10 @@ static void unpack_tail(int sz, uint32_t *tp,
const char *from_str,
uint16_t recv_seq, int ttl)
{
+ unsigned char *b, m;
const char *dupmsg = " (DUP!)";
unsigned triptime = 0;
- ++nreceived;
-
if (tp) {
/* (int32_t) cast is for hypothetical 64-bit unsigned */
/* (doesn't hurt 32-bit real-world anyway) */
@@ -561,11 +604,15 @@ static void unpack_tail(int sz, uint32_t *tp,
tmax = triptime;
}
- if (TST(recv_seq % MAX_DUP_CHK)) {
- ++nrepeats;
- --nreceived;
+ b = &BYTE(recv_seq % MAX_DUP_CHK);
+ m = MASK(recv_seq % MAX_DUP_CHK);
+ /*if TST(recv_seq % MAX_DUP_CHK):*/
+ if (*b & m) {
+ ++G.nrepeats;
} else {
- SET(recv_seq % MAX_DUP_CHK);
+ /*SET(recv_seq % MAX_DUP_CHK):*/
+ *b |= m;
+ ++G.nreceived;
dupmsg += 7;
}
@@ -619,7 +666,7 @@ static void unpack6(char *packet, int sz, struct sockaddr_in6 *from, int hoplimi
char buf[INET6_ADDRSTRLEN];
/* discard if too short */
- if (sz < (datalen + sizeof(struct icmp6_hdr)))
+ if (sz < (int) (datalen + sizeof(struct icmp6_hdr)))
return;
icmppkt = (struct icmp6_hdr *) packet;
@@ -630,7 +677,7 @@ static void unpack6(char *packet, int sz, struct sockaddr_in6 *from, int hoplimi
uint16_t recv_seq = ntohs(icmppkt->icmp6_seq);
uint32_t *tp = NULL;
- if (sz >= sizeof(struct icmp6_hdr) + sizeof(uint32_t))
+ if (sz >= (int) (sizeof(struct icmp6_hdr) + sizeof(uint32_t)))
tp = (uint32_t *) &icmppkt->icmp6_data8[4];
unpack_tail(sz, tp,
inet_ntop(AF_INET6, &from->sin6_addr,
@@ -648,7 +695,6 @@ static void ping4(len_and_sockaddr *lsa)
{
int sockopt;
- pingsock = create_icmp_socket();
pingaddr.sin = lsa->u.sin;
if (source_lsa) {
if (setsockopt(pingsock, IPPROTO_IP, IP_MULTICAST_IF,
@@ -656,8 +702,6 @@ static void ping4(len_and_sockaddr *lsa)
bb_error_msg_and_die("can't set multicast source interface");
xbind(pingsock, &source_lsa->u.sa, source_lsa->len);
}
- if (str_I)
- setsockopt_bindtodevice(pingsock, str_I);
/* enable broadcast pings */
setsockopt_broadcast(pingsock);
@@ -692,7 +736,7 @@ static void ping4(len_and_sockaddr *lsa)
continue;
}
unpack4(G.rcv_packet, c, &from);
- if (pingcount && nreceived >= pingcount)
+ if (pingcount && G.nreceived >= pingcount)
break;
}
}
@@ -706,13 +750,9 @@ static void ping6(len_and_sockaddr *lsa)
struct iovec iov;
char control_buf[CMSG_SPACE(36)];
- pingsock = create_icmp6_socket();
pingaddr.sin6 = lsa->u.sin6;
- /* untested whether "-I addr" really works for IPv6: */
if (source_lsa)
xbind(pingsock, &source_lsa->u.sa, source_lsa->len);
- if (str_I)
- setsockopt_bindtodevice(pingsock, str_I);
#ifdef ICMP6_FILTER
{
@@ -784,7 +824,7 @@ static void ping6(len_and_sockaddr *lsa)
}
}
unpack6(G.rcv_packet, c, &from, hoplimit);
- if (pingcount && nreceived >= pingcount)
+ if (pingcount && G.nreceived >= pingcount)
break;
}
}
@@ -799,6 +839,11 @@ static void ping(len_and_sockaddr *lsa)
}
printf(": %d data bytes\n", datalen);
+ create_icmp_socket(lsa);
+ /* untested whether "-I addr" really works for IPv6: */
+ if (str_I)
+ setsockopt_bindtodevice(pingsock, str_I);
+
G.sizeof_rcv_packet = datalen + MAXIPLEN + MAXICMPLEN;
G.rcv_packet = xzalloc(G.sizeof_rcv_packet);
#if ENABLE_PING6
diff --git a/networking/pscan.c b/networking/pscan.c
index 28005ad..72ed8cd 100644
--- a/networking/pscan.c
+++ b/networking/pscan.c
@@ -157,7 +157,7 @@ int pscan_main(int argc UNUSED_PARAM, char **argv)
}
if (ENABLE_FEATURE_CLEAN_UP) free(lsap);
- printf("%d closed, %d open, %d timed out (or blocked) ports\n",
+ printf("%u closed, %u open, %u timed out (or blocked) ports\n",
closed_ports,
open_ports,
nports - (closed_ports + open_ports));
diff --git a/networking/route.c b/networking/route.c
index 41e86bd..75bb59a 100644
--- a/networking/route.c
+++ b/networking/route.c
@@ -41,7 +41,7 @@
#include "inet_common.h"
#if ENABLE_FEATURE_IPV6
-#include "ipv6/ipv6_route.h"
+#include <linux/ipv6_route.h>
#endif
#ifndef RTF_UP
diff --git a/networking/tc.c b/networking/tc.c
index f968707..533f7c0 100644
--- a/networking/tc.c
+++ b/networking/tc.c
@@ -65,7 +65,7 @@ struct globals {
} FIX_ALIASING;
#define G (*(struct globals*)&bb_common_bufsiz1)
struct BUG_G_too_big {
- char BUG_G_too_big[sizeof(G) <= COMMON_BUFSIZE ? 1 : -1];
+ char BUG_G_too_big[sizeof(G) <= COMMON_BUFSIZE ? 1 : -1];
};
#define filter_ifindex (G.filter_ifindex)
#define filter_qdisc (G.filter_qdisc)
@@ -418,9 +418,6 @@ static int print_class(const struct sockaddr_nl *who UNUSED_PARAM,
static int print_filter(const struct sockaddr_nl *who UNUSED_PARAM,
struct nlmsghdr *hdr, void *arg UNUSED_PARAM)
{
- struct tcmsg *msg = NLMSG_DATA(hdr);
- int len = hdr->nlmsg_len;
- struct rtattr * tb[TCA_MAX+1];
return 0;
}
diff --git a/networking/telnet.c b/networking/telnet.c
index 58a6919..a255797 100644
--- a/networking/telnet.c
+++ b/networking/telnet.c
@@ -125,12 +125,10 @@ static void subneg(byte c);
static void iac_flush(void)
{
- write(netfd, G.iacbuf, G.iaclen);
+ full_write(netfd, G.iacbuf, G.iaclen);
G.iaclen = 0;
}
-#define write_str(fd, str) write(fd, str, sizeof(str) - 1)
-
static void doexit(int ev) NORETURN;
static void doexit(int ev)
{
@@ -145,7 +143,7 @@ static void con_escape(void)
if (bb_got_signal) /* came from line mode... go raw */
rawmode();
- write_str(1, "\r\nConsole escape. Commands are:\r\n\n"
+ full_write1_str("\r\nConsole escape. Commands are:\r\n\n"
" l go to line mode\r\n"
" c go to character mode\r\n"
" z suspend telnet\r\n"
@@ -176,7 +174,7 @@ static void con_escape(void)
doexit(EXIT_SUCCESS);
}
- write_str(1, "continuing...\r\n");
+ full_write1_str("continuing...\r\n");
if (bb_got_signal)
cookmode();
@@ -383,10 +381,11 @@ static void put_iac_naws(byte c, int x, int y)
put_iac(SB);
put_iac(c);
- put_iac((x >> 8) & 0xff);
- put_iac(x & 0xff);
- put_iac((y >> 8) & 0xff);
- put_iac(y & 0xff);
+ /* "... & 0xff" implicitly done below */
+ put_iac(x >> 8);
+ put_iac(x);
+ put_iac(y >> 8);
+ put_iac(y);
put_iac(IAC);
put_iac(SE);
diff --git a/networking/telnetd.c b/networking/telnetd.c
index 1f244a3..d00d87d 100644
--- a/networking/telnetd.c
+++ b/networking/telnetd.c
@@ -84,7 +84,7 @@ struct globals {
} FIX_ALIASING;
#define G (*(struct globals*)&bb_common_bufsiz1)
#define INIT_G() do { \
- G.loginpath = "/bin/login"; \
+ G.loginpath = "/system/xbin/login"; \
G.issuefile = "/etc/issue.net"; \
} while (0)
diff --git a/networking/traceroute.c b/networking/traceroute.c
index eaefac6..c3b9b71 100644
--- a/networking/traceroute.c
+++ b/networking/traceroute.c
@@ -796,7 +796,9 @@ static int
common_traceroute_main(int op, char **argv)
{
int minpacket;
+#ifdef IP_TOS
int tos = 0;
+#endif
int max_ttl = 30;
int nprobes = 3;
int first_ttl = 1;
@@ -810,6 +812,7 @@ common_traceroute_main(int op, char **argv)
char *waittime_str;
char *pausemsecs_str;
char *first_ttl_str;
+ char *dest_str;
#if ENABLE_FEATURE_TRACEROUTE_SOURCE_ROUTE
llist_t *source_route_list = NULL;
int lsrr = 0;
@@ -842,8 +845,10 @@ common_traceroute_main(int op, char **argv)
if (op & OPT_IP_CHKSUM)
bb_error_msg("warning: ip checksums disabled");
#endif
+#ifdef IP_TOS
if (op & OPT_TOS)
tos = xatou_range(tos_str, 0, 255);
+#endif
if (op & OPT_MAX_TTL)
max_ttl = xatou_range(max_ttl_str, 1, 255);
if (op & OPT_PORT)
@@ -1064,8 +1069,12 @@ common_traceroute_main(int op, char **argv)
xsetgid(getgid());
xsetuid(getuid());
- printf("traceroute to %s (%s)", argv[0],
- xmalloc_sockaddr2dotted_noport(&dest_lsa->u.sa));
+ dest_str = xmalloc_sockaddr2dotted_noport(&dest_lsa->u.sa);
+ printf("traceroute to %s (%s)", argv[0], dest_str);
+ if (ENABLE_FEATURE_CLEAN_UP) {
+ free(dest_str);
+ }
+
if (op & OPT_SOURCE)
printf(" from %s", source);
printf(", %d hops max, %d byte packets\n", max_ttl, packlen);
@@ -1221,6 +1230,12 @@ common_traceroute_main(int op, char **argv)
}
}
+ if (ENABLE_FEATURE_CLEAN_UP) {
+ free(to);
+ free(lastaddr);
+ free(from_lsa);
+ }
+
return 0;
}
diff --git a/networking/udhcp/common.c b/networking/udhcp/common.c
index ae0e0d3..fe322db 100644
--- a/networking/udhcp/common.c
+++ b/networking/udhcp/common.c
@@ -62,6 +62,7 @@ const struct dhcp_optflag dhcp_optflags[] = {
{ OPTION_U16 , 0x84 }, /* DHCP_VLAN_ID */
{ OPTION_U8 , 0x85 }, /* DHCP_VLAN_PRIORITY */
#endif
+ { OPTION_STRING , 0xd1 }, /* DHCP_PXE_CONF_FILE */
{ OPTION_6RD , 0xd4 }, /* DHCP_6RD */
{ OPTION_STATIC_ROUTES | OPTION_LIST , 0xf9 }, /* DHCP_MS_STATIC_ROUTES */
{ OPTION_STRING , 0xfc }, /* DHCP_WPAD */
@@ -128,6 +129,7 @@ const char dhcp_option_strings[] ALIGN1 =
"vlanid" "\0" /* DHCP_VLAN_ID */
"vlanpriority" "\0"/* DHCP_VLAN_PRIORITY */
#endif
+ "pxeconffile" "\0" /* DHCP_PXE_CONF_FILE */
"ip6rd" "\0" /* DHCP_6RD */
"msstaticroutes""\0"/* DHCP_MS_STATIC_ROUTES */
"wpad" "\0" /* DHCP_WPAD */
@@ -371,20 +373,23 @@ static NOINLINE void attach_option(
char *buffer,
int length)
{
- struct option_set *existing, *new, **curr;
- char *allocated = NULL;
+ struct option_set *existing;
+ char *allocated;
- existing = udhcp_find_option(*opt_list, optflag->code);
- if (!existing) {
- log2("Attaching option %02x to list", optflag->code);
- allocated = allocate_tempopt_if_needed(optflag, buffer, &length);
+ allocated = allocate_tempopt_if_needed(optflag, buffer, &length);
#if ENABLE_FEATURE_UDHCP_RFC3397
- if ((optflag->flags & OPTION_TYPE_MASK) == OPTION_DNS_STRING) {
- /* reuse buffer and length for RFC1035-formatted string */
- allocated = buffer = (char *)dname_enc(NULL, 0, buffer, &length);
- }
+ if ((optflag->flags & OPTION_TYPE_MASK) == OPTION_DNS_STRING) {
+ /* reuse buffer and length for RFC1035-formatted string */
+ allocated = buffer = (char *)dname_enc(NULL, 0, buffer, &length);
+ }
#endif
+
+ existing = udhcp_find_option(*opt_list, optflag->code);
+ if (!existing) {
+ struct option_set *new, **curr;
+
/* make a new option */
+ log2("Attaching option %02x to list", optflag->code);
new = xmalloc(sizeof(*new));
new->data = xmalloc(length + OPT_DATA);
new->data[OPT_CODE] = optflag->code;
@@ -405,14 +410,7 @@ static NOINLINE void attach_option(
/* add it to an existing option */
log2("Attaching option %02x to existing member of list", optflag->code);
- allocated = allocate_tempopt_if_needed(optflag, buffer, &length);
old_len = existing->data[OPT_LEN];
-#if ENABLE_FEATURE_UDHCP_RFC3397
- if ((optflag->flags & OPTION_TYPE_MASK) == OPTION_DNS_STRING) {
- /* reuse buffer and length for RFC1035-formatted string */
- allocated = buffer = (char *)dname_enc(existing->data + OPT_DATA, old_len, buffer, &length);
- }
-#endif
if (old_len + length < 255) {
/* actually 255 is ok too, but adding a space can overlow it */
@@ -424,7 +422,7 @@ static NOINLINE void attach_option(
existing->data[OPT_DATA + old_len] = ' ';
old_len++;
}
- memcpy(existing->data + OPT_DATA + old_len, buffer, length);
+ memcpy(existing->data + OPT_DATA + old_len, (allocated ? allocated : buffer), length);
existing->data[OPT_LEN] = old_len + length;
} /* else, ignore the data, we could put this in a second option in the future */
} /* else, ignore the new data */
diff --git a/networking/udhcp/common.h b/networking/udhcp/common.h
index 0e8e45f..5e70d60 100644
--- a/networking/udhcp/common.h
+++ b/networking/udhcp/common.h
@@ -149,8 +149,9 @@ enum {
//#define DHCP_DOMAIN_SEARCH 0x77 /* RFC 3397. set of ASCIZ string, DNS-style compressed */
//#define DHCP_SIP_SERVERS 0x78 /* RFC 3361. flag byte, then: 0: domain names, 1: IP addrs */
//#define DHCP_STATIC_ROUTES 0x79 /* RFC 3442. (mask,ip,router) tuples */
-#define DHCP_VLAN_ID 0x84 /* 802.1P VLAN ID */
-#define DHCP_VLAN_PRIORITY 0x85 /* 802.1Q VLAN priority */
+//#define DHCP_VLAN_ID 0x84 /* 802.1P VLAN ID */
+//#define DHCP_VLAN_PRIORITY 0x85 /* 802.1Q VLAN priority */
+//#define DHCP_PXE_CONF_FILE 0xd1 /* RFC 5071 Configuration File */
//#define DHCP_MS_STATIC_ROUTES 0xf9 /* Microsoft's pre-RFC 3442 code for 0x79? */
//#define DHCP_WPAD 0xfc /* MSIE's Web Proxy Autodiscovery Protocol */
#define DHCP_END 0xff
diff --git a/networking/udhcp/d6_dhcpc.c b/networking/udhcp/d6_dhcpc.c
index c44220b..b0f0798 100644
--- a/networking/udhcp/d6_dhcpc.c
+++ b/networking/udhcp/d6_dhcpc.c
@@ -311,8 +311,8 @@ static int d6_mcast_from_client_config_ifindex(struct d6_packet *packet, uint8_t
return d6_send_raw_packet(
packet, (end - (uint8_t*) packet),
- /*src*/ NULL, CLIENT_PORT,
- /*dst*/ (struct in6_addr*)FF02__1_2, SERVER_PORT, MAC_BCAST_ADDR,
+ /*src*/ NULL, CLIENT_PORT6,
+ /*dst*/ (struct in6_addr*)FF02__1_2, SERVER_PORT6, MAC_BCAST_ADDR,
client_config.ifindex
);
}
@@ -554,8 +554,8 @@ static NOINLINE int send_d6_renew(uint32_t xid, struct in6_addr *server_ipv6, st
if (server_ipv6)
return d6_send_kernel_packet(
&packet, (opt_ptr - (uint8_t*) &packet),
- our_cur_ipv6, CLIENT_PORT,
- server_ipv6, SERVER_PORT
+ our_cur_ipv6, CLIENT_PORT6,
+ server_ipv6, SERVER_PORT6
);
return d6_mcast_from_client_config_ifindex(&packet, opt_ptr);
}
@@ -576,8 +576,8 @@ static int send_d6_release(struct in6_addr *server_ipv6, struct in6_addr *our_cu
bb_info_msg("Sending release...");
return d6_send_kernel_packet(
&packet, (opt_ptr - (uint8_t*) &packet),
- our_cur_ipv6, CLIENT_PORT,
- server_ipv6, SERVER_PORT
+ our_cur_ipv6, CLIENT_PORT6,
+ server_ipv6, SERVER_PORT6
);
}
@@ -614,7 +614,7 @@ static NOINLINE int d6_recv_raw_packet(struct in6_addr *peer_ipv6
/* make sure its the right packet for us, and that it passes sanity checks */
if (packet.ip6.ip6_nxt != IPPROTO_UDP
|| (packet.ip6.ip6_vfc >> 4) != 6
- || packet.udp.dest != htons(CLIENT_PORT)
+ || packet.udp.dest != htons(CLIENT_PORT6)
/* || bytes > (int) sizeof(packet) - can't happen */
|| packet.udp.len != packet.ip6.ip6_plen
) {
@@ -708,7 +708,7 @@ static int d6_raw_socket(int ifindex)
BPF_STMT(BPF_LDX|BPF_B|BPF_MSH, 0),
/* load udp destination port from halfword[header_len + 2] */
BPF_STMT(BPF_LD|BPF_H|BPF_IND, 2),
- /* jump to L3 if udp dport is CLIENT_PORT, else to L4 */
+ /* jump to L3 if udp dport is CLIENT_PORT6, else to L4 */
BPF_JUMP(BPF_JMP|BPF_JEQ|BPF_K, 68, 0, 1),
/* L3: accept packet */
BPF_STMT(BPF_RET|BPF_K, 0xffffffff),
@@ -733,7 +733,7 @@ static int d6_raw_socket(int ifindex)
xbind(fd, (struct sockaddr *) &sock, sizeof(sock));
#if 0
- if (CLIENT_PORT == 68) {
+ if (CLIENT_PORT6 == 546) {
/* Use only if standard port is in use */
/* Ignoring error (kernel may lack support for this) */
if (setsockopt(fd, SOL_SOCKET, SO_ATTACH_FILTER, &filter_prog,
@@ -761,7 +761,7 @@ static void change_listen_mode(int new_mode)
sockfd = -1;
}
if (new_mode == LISTEN_KERNEL)
- sockfd = udhcp_listen_socket(/*INADDR_ANY,*/ CLIENT_PORT, client_config.interface);
+ sockfd = udhcp_listen_socket(/*INADDR_ANY,*/ CLIENT_PORT6, client_config.interface);
else if (new_mode != LISTEN_NONE)
sockfd = d6_raw_socket(client_config.ifindex);
/* else LISTEN_NONE: sockfd stays closed */
@@ -931,8 +931,8 @@ int udhcpc6_main(int argc UNUSED_PARAM, char **argv)
fd_set rfds;
/* Default options */
- IF_FEATURE_UDHCP_PORT(SERVER_PORT = 547;)
- IF_FEATURE_UDHCP_PORT(CLIENT_PORT = 546;)
+ IF_FEATURE_UDHCP_PORT(SERVER_PORT6 = 547;)
+ IF_FEATURE_UDHCP_PORT(CLIENT_PORT6 = 546;)
client_config.interface = "eth0";
client_config.script = CONFIG_UDHCPC_DEFAULT_SCRIPT;
@@ -961,8 +961,8 @@ int udhcpc6_main(int argc UNUSED_PARAM, char **argv)
}
#if ENABLE_FEATURE_UDHCP_PORT
if (opt & OPT_P) {
- CLIENT_PORT = xatou16(str_P);
- SERVER_PORT = CLIENT_PORT - 1;
+ CLIENT_PORT6 = xatou16(str_P);
+ SERVER_PORT6 = CLIENT_PORT6 + 1;
}
#endif
while (list_O) {
diff --git a/networking/udhcp/dhcpc.c b/networking/udhcp/dhcpc.c
index 0862288..8dee916 100644
--- a/networking/udhcp/dhcpc.c
+++ b/networking/udhcp/dhcpc.c
@@ -667,6 +667,15 @@ static int raw_bcast_from_client_config_ifindex(struct dhcp_packet *packet)
client_config.ifindex);
}
+static int bcast_or_ucast(struct dhcp_packet *packet, uint32_t ciaddr, uint32_t server)
+{
+ if (server)
+ return udhcp_send_kernel_packet(packet,
+ ciaddr, CLIENT_PORT,
+ server, SERVER_PORT);
+ return raw_bcast_from_client_config_ifindex(packet);
+}
+
/* Broadcast a DHCP discover packet to the network, with an optionally requested IP */
/* NOINLINE: limit stack usage in caller */
static NOINLINE int send_discover(uint32_t xid, uint32_t requested)
@@ -773,11 +782,7 @@ static NOINLINE int send_renew(uint32_t xid, uint32_t server, uint32_t ciaddr)
add_client_options(&packet);
bb_info_msg("Sending renew...");
- if (server)
- return udhcp_send_kernel_packet(&packet,
- ciaddr, CLIENT_PORT,
- server, SERVER_PORT);
- return raw_bcast_from_client_config_ifindex(&packet);
+ return bcast_or_ucast(&packet, ciaddr, server);
}
#if ENABLE_FEATURE_UDHCPC_ARPING
@@ -826,7 +831,11 @@ static int send_release(uint32_t server, uint32_t ciaddr)
udhcp_add_simple_option(&packet, DHCP_SERVER_ID, server);
bb_info_msg("Sending release...");
- return udhcp_send_kernel_packet(&packet, ciaddr, CLIENT_PORT, server, SERVER_PORT);
+ /* Note: normally we unicast here since "server" is not zero.
+ * However, there _are_ people who run "address-less" DHCP servers,
+ * and reportedly ISC dhcp client and Windows allow that.
+ */
+ return bcast_or_ucast(&packet, ciaddr, server);
}
/* Returns -1 on errors that are fatal for the socket, -2 for those that aren't */
@@ -1135,34 +1144,35 @@ static void client_background(void)
//usage:# define IF_UDHCP_VERBOSE(...)
//usage:#endif
//usage:#define udhcpc_trivial_usage
-//usage: "[-fbnq"IF_UDHCP_VERBOSE("v")"oCRB] [-i IFACE] [-r IP] [-s PROG] [-p PIDFILE]\n"
-//usage: " [-V VENDOR] [-x OPT:VAL]... [-O OPT]..." IF_FEATURE_UDHCP_PORT(" [-P N]")
+//usage: "[-fbq"IF_UDHCP_VERBOSE("v")IF_FEATURE_UDHCPC_ARPING("a")"RB] [-t N] [-T SEC] [-A SEC/-n]\n"
+//usage: " [-i IFACE]"IF_FEATURE_UDHCP_PORT(" [-P PORT]")" [-s PROG] [-p PIDFILE]\n"
+//usage: " [-oC] [-r IP] [-V VENDOR] [-F NAME] [-x OPT:VAL]... [-O OPT]..."
//usage:#define udhcpc_full_usage "\n"
//usage: IF_LONG_OPTS(
//usage: "\n -i,--interface IFACE Interface to use (default eth0)"
-//usage: "\n -p,--pidfile FILE Create pidfile"
+//usage: IF_FEATURE_UDHCP_PORT(
+//usage: "\n -P,--client-port PORT Use PORT (default 68)"
+//usage: )
//usage: "\n -s,--script PROG Run PROG at DHCP events (default "CONFIG_UDHCPC_DEFAULT_SCRIPT")"
+//usage: "\n -p,--pidfile FILE Create pidfile"
//usage: "\n -B,--broadcast Request broadcast replies"
-//usage: "\n -t,--retries N Send up to N discover packets"
-//usage: "\n -T,--timeout N Pause between packets (default 3 seconds)"
-//usage: "\n -A,--tryagain N Wait N seconds after failure (default 20)"
+//usage: "\n -t,--retries N Send up to N discover packets (default 3)"
+//usage: "\n -T,--timeout SEC Pause between packets (default 3)"
+//usage: "\n -A,--tryagain SEC Wait if lease is not obtained (default 20)"
+//usage: "\n -n,--now Exit if lease is not obtained"
+//usage: "\n -q,--quit Exit after obtaining lease"
+//usage: "\n -R,--release Release IP on exit"
//usage: "\n -f,--foreground Run in foreground"
//usage: USE_FOR_MMU(
//usage: "\n -b,--background Background if lease is not obtained"
//usage: )
-//usage: "\n -n,--now Exit if lease is not obtained"
-//usage: "\n -q,--quit Exit after obtaining lease"
-//usage: "\n -R,--release Release IP on exit"
//usage: "\n -S,--syslog Log to syslog too"
-//usage: IF_FEATURE_UDHCP_PORT(
-//usage: "\n -P,--client-port N Use port N (default 68)"
-//usage: )
//usage: IF_FEATURE_UDHCPC_ARPING(
//usage: "\n -a,--arping Use arping to validate offered address"
//usage: )
-//usage: "\n -O,--request-option OPT Request option OPT from server (cumulative)"
-//usage: "\n -o,--no-default-options Don't request any options (unless -O is given)"
//usage: "\n -r,--request IP Request this IP address"
+//usage: "\n -o,--no-default-options Don't request any options (unless -O is given)"
+//usage: "\n -O,--request-option OPT Request option OPT from server (cumulative)"
//usage: "\n -x OPT:VAL Include option OPT in sent packets (cumulative)"
//usage: "\n Examples of string, numeric, and hex byte opts:"
//usage: "\n -x hostname:bbox - option 12"
@@ -1177,29 +1187,29 @@ static void client_background(void)
//usage: )
//usage: IF_NOT_LONG_OPTS(
//usage: "\n -i IFACE Interface to use (default eth0)"
-//usage: "\n -p FILE Create pidfile"
+//usage: IF_FEATURE_UDHCP_PORT(
+//usage: "\n -P PORT Use PORT (default 68)"
+//usage: )
//usage: "\n -s PROG Run PROG at DHCP events (default "CONFIG_UDHCPC_DEFAULT_SCRIPT")"
+//usage: "\n -p FILE Create pidfile"
//usage: "\n -B Request broadcast replies"
-//usage: "\n -t N Send up to N discover packets"
-//usage: "\n -T N Pause between packets (default 3 seconds)"
-//usage: "\n -A N Wait N seconds (default 20) after failure"
+//usage: "\n -t N Send up to N discover packets (default 3)"
+//usage: "\n -T SEC Pause between packets (default 3)"
+//usage: "\n -A SEC Wait if lease is not obtained (default 20)"
+//usage: "\n -n Exit if lease is not obtained"
+//usage: "\n -q Exit after obtaining lease"
+//usage: "\n -R Release IP on exit"
//usage: "\n -f Run in foreground"
//usage: USE_FOR_MMU(
//usage: "\n -b Background if lease is not obtained"
//usage: )
-//usage: "\n -n Exit if lease is not obtained"
-//usage: "\n -q Exit after obtaining lease"
-//usage: "\n -R Release IP on exit"
//usage: "\n -S Log to syslog too"
-//usage: IF_FEATURE_UDHCP_PORT(
-//usage: "\n -P N Use port N (default 68)"
-//usage: )
//usage: IF_FEATURE_UDHCPC_ARPING(
//usage: "\n -a Use arping to validate offered address"
//usage: )
-//usage: "\n -O OPT Request option OPT from server (cumulative)"
-//usage: "\n -o Don't request any options (unless -O is given)"
//usage: "\n -r IP Request this IP address"
+//usage: "\n -o Don't request any options (unless -O is given)"
+//usage: "\n -O OPT Request option OPT from server (cumulative)"
//usage: "\n -x OPT:VAL Include option OPT in sent packets (cumulative)"
//usage: "\n Examples of string, numeric, and hex byte opts:"
//usage: "\n -x hostname:bbox - option 12"
@@ -1647,14 +1657,19 @@ int udhcpc_main(int argc UNUSED_PARAM, char **argv)
* might work too.
* "Next server" and router are definitely wrong ones to use, though...
*/
+/* We used to ignore pcakets without DHCP_SERVER_ID.
+ * I've got user reports from people who run "address-less" servers.
+ * They either supply DHCP_SERVER_ID of 0.0.0.0 or don't supply it at all.
+ * They say ISC DHCP client supports this case.
+ */
+ server_addr = 0;
temp = udhcp_get_option(&packet, DHCP_SERVER_ID);
if (!temp) {
- bb_error_msg("no server ID, ignoring packet");
- continue;
- /* still selecting - this server looks bad */
+ bb_error_msg("no server ID, using 0.0.0.0");
+ } else {
+ /* it IS unaligned sometimes, don't "optimize" */
+ move_from_unaligned32(server_addr, temp);
}
- /* it IS unaligned sometimes, don't "optimize" */
- move_from_unaligned32(server_addr, temp);
/*xid = packet.xid; - already is */
requested_ip = packet.yiaddr;
diff --git a/networking/udhcp/dhcpc.h b/networking/udhcp/dhcpc.h
index 2859a07..9f423a5 100644
--- a/networking/udhcp/dhcpc.h
+++ b/networking/udhcp/dhcpc.h
@@ -29,9 +29,11 @@ struct client_config_t {
#define client_config (*(struct client_config_t*)(&bb_common_bufsiz1[COMMON_BUFSIZE / 2]))
#if ENABLE_FEATURE_UDHCP_PORT
-#define CLIENT_PORT (client_config.port)
+#define CLIENT_PORT (client_config.port)
+#define CLIENT_PORT6 (client_config.port)
#else
-#define CLIENT_PORT 68
+#define CLIENT_PORT 68
+#define CLIENT_PORT6 546
#endif
POP_SAVED_FUNCTION_VISIBILITY
diff --git a/networking/udhcp/dhcpd.c b/networking/udhcp/dhcpd.c
index 9ad9595..a1a7f6b 100644
--- a/networking/udhcp/dhcpd.c
+++ b/networking/udhcp/dhcpd.c
@@ -22,11 +22,12 @@
*/
//usage:#define udhcpd_trivial_usage
-//usage: "[-fS]" IF_FEATURE_UDHCP_PORT(" [-P N]") " [CONFFILE]"
+//usage: "[-fS] [-I ADDR]" IF_FEATURE_UDHCP_PORT(" [-P N]") " [CONFFILE]"
//usage:#define udhcpd_full_usage "\n\n"
//usage: "DHCP server\n"
//usage: "\n -f Run in foreground"
//usage: "\n -S Log to syslog too"
+//usage: "\n -I ADDR Local address"
//usage: IF_FEATURE_UDHCP_PORT(
//usage: "\n -P N Use port N (default 67)"
//usage: )
@@ -302,6 +303,7 @@ int udhcpd_main(int argc UNUSED_PARAM, char **argv)
unsigned num_ips;
unsigned opt;
struct option_set *option;
+ char *str_I = str_I;
IF_FEATURE_UDHCP_PORT(char *str_P;)
#if ENABLE_FEATURE_UDHCP_PORT
@@ -312,8 +314,10 @@ int udhcpd_main(int argc UNUSED_PARAM, char **argv)
#if defined CONFIG_UDHCP_DEBUG && CONFIG_UDHCP_DEBUG >= 1
opt_complementary = "vv";
#endif
- opt = getopt32(argv, "fSv"
- IF_FEATURE_UDHCP_PORT("P:", &str_P)
+ opt = getopt32(argv, "fSI:v"
+ IF_FEATURE_UDHCP_PORT("P:")
+ , &str_I
+ IF_FEATURE_UDHCP_PORT(, &str_P)
IF_UDHCP_VERBOSE(, &dhcp_verbose)
);
if (!(opt & 1)) { /* no -f */
@@ -326,8 +330,13 @@ int udhcpd_main(int argc UNUSED_PARAM, char **argv)
openlog(applet_name, LOG_PID, LOG_DAEMON);
logmode |= LOGMODE_SYSLOG;
}
+ if (opt & 4) { /* -I */
+ len_and_sockaddr *lsa = xhost_and_af2sockaddr(str_I, 0, AF_INET);
+ server_config.server_nip = lsa->u.sin.sin_addr.s_addr;
+ free(lsa);
+ }
#if ENABLE_FEATURE_UDHCP_PORT
- if (opt & 8) { /* -P */
+ if (opt & 16) { /* -P */
SERVER_PORT = xatou16(str_P);
CLIENT_PORT = SERVER_PORT + 1;
}
@@ -367,7 +376,7 @@ int udhcpd_main(int argc UNUSED_PARAM, char **argv)
if (udhcp_read_interface(server_config.interface,
&server_config.ifindex,
- &server_config.server_nip,
+ (server_config.server_nip == 0 ? &server_config.server_nip : NULL),
server_config.server_mac)
) {
retval = 1;
diff --git a/networking/udhcp/dhcpd.h b/networking/udhcp/dhcpd.h
index 7c801bf..a77724f 100644
--- a/networking/udhcp/dhcpd.h
+++ b/networking/udhcp/dhcpd.h
@@ -61,9 +61,11 @@ struct server_config_t {
/* client_config sits in 2nd half of bb_common_bufsiz1 */
#if ENABLE_FEATURE_UDHCP_PORT
-#define SERVER_PORT (server_config.port)
+#define SERVER_PORT (server_config.port)
+#define SERVER_PORT6 (server_config.port)
#else
-#define SERVER_PORT 67
+#define SERVER_PORT 67
+#define SERVER_PORT6 547
#endif
diff --git a/networking/udhcp/packet.c b/networking/udhcp/packet.c
index 33c9585..148f525 100644
--- a/networking/udhcp/packet.c
+++ b/networking/udhcp/packet.c
@@ -143,8 +143,15 @@ int FAST_FUNC udhcp_send_raw_packet(struct dhcp_packet *dhcp_pkt,
*
* In order to work with those buggy servers,
* we truncate packets after end option byte.
+ *
+ * However, RFC 1542 says "The IP Total Length and UDP Length
+ * must be large enough to contain the minimal BOOTP header of 300 octets".
+ * Thus, we retain enough padding to not go below 300 BOOTP bytes.
+ * Some devices have filters which drop DHCP packets shorter than that.
*/
padding = DHCP_OPTIONS_BUFSIZE - 1 - udhcp_end_option(packet.data.options);
+ if (padding > DHCP_SIZE - 300)
+ padding = DHCP_SIZE - 300;
packet.ip.protocol = IPPROTO_UDP;
packet.ip.saddr = source_nip;
@@ -215,6 +222,8 @@ int FAST_FUNC udhcp_send_kernel_packet(struct dhcp_packet *dhcp_pkt,
udhcp_dump_packet(dhcp_pkt);
padding = DHCP_OPTIONS_BUFSIZE - 1 - udhcp_end_option(dhcp_pkt->options);
+ if (padding > DHCP_SIZE - 300)
+ padding = DHCP_SIZE - 300;
result = safe_write(fd, dhcp_pkt, DHCP_SIZE - padding);
msg = "write";
ret_close:
diff --git a/networking/wget.c b/networking/wget.c
index 071cd94..e15f68d 100644
--- a/networking/wget.c
+++ b/networking/wget.c
@@ -62,16 +62,17 @@ struct globals {
const char *curfile; /* Name of current file being transferred */
bb_progress_t pmt;
#endif
- char *dir_prefix;
+ char *dir_prefix;
#if ENABLE_FEATURE_WGET_LONG_OPTIONS
- char *post_data;
- char *extra_headers;
+ char *post_data;
+ char *extra_headers;
#endif
- char *fname_out; /* where to direct output (-O) */
- const char *proxy_flag; /* Use proxies if env vars are set */
- const char *user_agent; /* "User-Agent" header field */
+ char *fname_out; /* where to direct output (-O) */
+ const char *proxy_flag; /* Use proxies if env vars are set */
+ const char *user_agent; /* "User-Agent" header field */
#if ENABLE_FEATURE_WGET_TIMEOUT
unsigned timeout_seconds;
+ bool connecting;
#endif
int output_fd;
int o_flags;
@@ -86,8 +87,10 @@ struct globals {
} FIX_ALIASING;
#define G (*ptr_to_globals)
#define INIT_G() do { \
- SET_PTR_TO_GLOBALS(xzalloc(sizeof(G))); \
- IF_FEATURE_WGET_TIMEOUT(G.timeout_seconds = 900;) \
+ SET_PTR_TO_GLOBALS(xzalloc(sizeof(G))); \
+} while (0)
+#define FINI_G() do { \
+ FREE_PTR_TO_GLOBALS(); \
} while (0)
@@ -195,13 +198,27 @@ static char* sanitize_string(char *s)
return s;
}
+#if ENABLE_FEATURE_WGET_TIMEOUT
+static void alarm_handler(int sig UNUSED_PARAM)
+{
+ /* This is theoretically unsafe (uses stdio and malloc in signal handler) */
+ if (G.connecting)
+ bb_error_msg_and_die("download timed out");
+}
+#endif
+
static FILE *open_socket(len_and_sockaddr *lsa)
{
+ int fd;
FILE *fp;
+ IF_FEATURE_WGET_TIMEOUT(alarm(G.timeout_seconds); G.connecting = 1;)
+ fd = xconnect_stream(lsa);
+ IF_FEATURE_WGET_TIMEOUT(G.connecting = 0;)
+
/* glibc 2.4 seems to try seeking on it - ??! */
/* hopefully it understands what ESPIPE means... */
- fp = fdopen(xconnect_stream(lsa), "r+");
+ fp = fdopen(fd, "r+");
if (fp == NULL)
bb_perror_msg_and_die("%s", bb_msg_memory_exhausted);
@@ -209,6 +226,7 @@ static FILE *open_socket(len_and_sockaddr *lsa)
}
/* Returns '\n' if it was seen, else '\0'. Trims at first '\r' or '\n' */
+/* FIXME: does not respect FEATURE_WGET_TIMEOUT and -T N: */
static char fgets_and_trim(FILE *fp)
{
char c;
@@ -256,15 +274,22 @@ static void parse_url(const char *src_url, struct host_info *h)
free(h->allocated);
h->allocated = url = xstrdup(src_url);
- if (strncmp(url, "http://", 7) == 0) {
- h->port = bb_lookup_port("http", "tcp", 80);
- h->host = url + 7;
- h->is_ftp = 0;
- } else if (strncmp(url, "ftp://", 6) == 0) {
+ if (strncmp(url, "ftp://", 6) == 0) {
h->port = bb_lookup_port("ftp", "tcp", 21);
h->host = url + 6;
h->is_ftp = 1;
} else
+ if (strncmp(url, "http://", 7) == 0) {
+ h->host = url + 7;
+ http:
+ h->port = bb_lookup_port("http", "tcp", 80);
+ h->is_ftp = 0;
+ } else
+ if (!strstr(url, "//")) {
+ // GNU wget is user-friendly and falls back to http://
+ h->host = url;
+ goto http;
+ } else
bb_error_msg_and_die("not an http or ftp url: %s", sanitize_string(url));
// FYI:
@@ -328,8 +353,16 @@ static char *gethdr(FILE *fp)
return NULL;
/* convert the header name to lower case */
- for (s = G.wget_buf; isalnum(*s) || *s == '-' || *s == '.'; ++s) {
- /* tolower for "A-Z", no-op for "0-9a-z-." */
+ for (s = G.wget_buf; isalnum(*s) || *s == '-' || *s == '.' || *s == '_'; ++s) {
+ /*
+ * No-op for 20-3f and 60-7f. "0-9a-z-." are in these ranges.
+ * 40-5f range ("@A-Z[\]^_") maps to 60-7f.
+ * "A-Z" maps to "a-z".
+ * "@[\]" can't occur in header names.
+ * "^_" maps to "~,DEL" (which is wrong).
+ * "^" was never seen yet, "_" was seen from web.archive.org
+ * (x-archive-orig-x_commoncrawl_Signature: HEXSTRING).
+ */
*s |= 0x20;
}
@@ -936,7 +969,10 @@ int wget_main(int argc UNUSED_PARAM, char **argv)
INIT_G();
- IF_FEATURE_WGET_TIMEOUT(G.timeout_seconds = 900;)
+#if ENABLE_FEATURE_WGET_TIMEOUT
+ G.timeout_seconds = 900;
+ signal(SIGALRM, alarm_handler);
+#endif
G.proxy_flag = "on"; /* use proxies if env vars are set */
G.user_agent = "Wget"; /* "User-Agent" header field */
@@ -987,5 +1023,10 @@ int wget_main(int argc UNUSED_PARAM, char **argv)
if (G.output_fd >= 0)
xclose(G.output_fd);
+#if ENABLE_FEATURE_CLEAN_UP && ENABLE_FEATURE_WGET_LONG_OPTIONS
+ free(G.extra_headers);
+#endif
+ FINI_G();
+
return EXIT_SUCCESS;
}
diff --git a/procps/kill.c b/procps/kill.c
index cb129ac..f4637c4 100644
--- a/procps/kill.c
+++ b/procps/kill.c
@@ -60,7 +60,7 @@
* This is needed to avoid collision with kill -9 ... syntax
*/
-int kill_main(int argc, char **argv)
+int kill_main(int argc UNUSED_PARAM, char **argv)
{
char *arg;
pid_t pid;
@@ -79,10 +79,9 @@ int kill_main(int argc, char **argv)
#endif
/* Parse any options */
- argc--;
arg = *++argv;
- if (argc < 1 || arg[0] != '-') {
+ if (!arg || arg[0] != '-') {
goto do_it_now;
}
@@ -91,13 +90,14 @@ int kill_main(int argc, char **argv)
* echo "Died of SIG`kill -l $?`"
* We try to mimic what kill from coreutils-6.8 does */
if (arg[1] == 'l' && arg[2] == '\0') {
- if (argc == 1) {
+ arg = *++argv;
+ if (!arg) {
/* Print the whole signal list */
print_signames();
return 0;
}
/* -l <sig list> */
- while ((arg = *++argv)) {
+ do {
if (isdigit(arg[0])) {
signo = bb_strtou(arg, NULL, 10);
if (errno) {
@@ -118,8 +118,8 @@ int kill_main(int argc, char **argv)
}
printf("%d\n", signo);
}
- }
- /* If they specified -l, we are all done */
+ arg = *++argv;
+ } while (arg);
return EXIT_SUCCESS;
}
@@ -127,8 +127,7 @@ int kill_main(int argc, char **argv)
if (killall && arg[1] == 'q' && arg[2] == '\0') {
quiet = 1;
arg = *++argv;
- argc--;
- if (argc < 1)
+ if (!arg)
bb_show_usage();
if (arg[0] != '-')
goto do_it_now;
@@ -140,8 +139,7 @@ int kill_main(int argc, char **argv)
if (killall5 && arg[0] == 'o')
goto do_it_now;
- if (argc > 1 && arg[0] == 's' && arg[1] == '\0') { /* -s SIG? */
- argc--;
+ if (argv[1] && arg[0] == 's' && arg[1] == '\0') { /* -s SIG? */
arg = *++argv;
} /* else it must be -SIG */
signo = get_signum(arg);
@@ -150,7 +148,6 @@ int kill_main(int argc, char **argv)
return EXIT_FAILURE;
}
arg = *++argv;
- argc--;
do_it_now:
pid = getpid();
@@ -158,7 +155,8 @@ int kill_main(int argc, char **argv)
if (killall5) {
pid_t sid;
procps_status_t* p = NULL;
- int ret = 0;
+ /* compat: exitcode 2 is "no one was signaled" */
+ int ret = 2;
/* Find out our session id */
sid = getsid(pid);
@@ -167,9 +165,10 @@ int kill_main(int argc, char **argv)
kill(-1, SIGSTOP);
/* Signal all processes except those in our session */
while ((p = procps_scan(p, PSSCAN_PID|PSSCAN_SID)) != NULL) {
- int i;
+ char **args;
if (p->sid == (unsigned)sid
+ || p->sid == 0 /* compat: kernel thread, don't signal it */
|| p->pid == (unsigned)pid
|| p->pid == 1
) {
@@ -178,18 +177,19 @@ int kill_main(int argc, char **argv)
/* All remaining args must be -o PID options.
* Check p->pid against them. */
- for (i = 0; i < argc; i++) {
+ args = argv;
+ while (*args) {
pid_t omit;
- arg = argv[i];
+ arg = *args++;
if (arg[0] != '-' || arg[1] != 'o') {
bb_error_msg("bad option '%s'", arg);
ret = 1;
goto resume;
}
arg += 2;
- if (!arg[0] && argv[++i])
- arg = argv[i];
+ if (!arg[0] && *args)
+ arg = *args++;
omit = bb_strtoi(arg, NULL, 10);
if (errno) {
bb_error_msg("invalid number '%s'", arg);
@@ -200,6 +200,7 @@ int kill_main(int argc, char **argv)
goto dont_kill;
}
kill(p->pid, signo);
+ ret = 0;
dont_kill: ;
}
resume:
@@ -210,14 +211,14 @@ int kill_main(int argc, char **argv)
}
/* Pid or name is required for kill/killall */
- if (argc < 1) {
+ if (!arg) {
bb_error_msg("you need to specify whom to kill");
return EXIT_FAILURE;
}
if (killall) {
/* Looks like they want to do a killall. Do that */
- while (arg) {
+ do {
pid_t* pidList;
pidList = find_pid_by_name(arg);
@@ -240,7 +241,7 @@ int kill_main(int argc, char **argv)
}
free(pidList);
arg = *++argv;
- }
+ } while (arg);
return errors;
}
diff --git a/procps/lsof.c b/procps/lsof.c
index ee39ddb..281a55c 100644
--- a/procps/lsof.c
+++ b/procps/lsof.c
@@ -61,9 +61,12 @@ int lsof_main(int argc UNUSED_PARAM, char **argv UNUSED_PARAM)
d_fd = opendir(name);
if (d_fd) {
while ((entry = readdir(d_fd)) != NULL) {
- if (entry->d_type == DT_LNK) {
- safe_strncpy(name + baseofs, entry->d_name, 10);
- fdlink = xmalloc_readlink(name);
+ /* Skip entries '.' and '..' (and any hidden file) */
+ if (entry->d_name[0] == '.')
+ continue;
+
+ safe_strncpy(name + baseofs, entry->d_name, 10);
+ if ((fdlink = xmalloc_readlink(name)) != NULL) {
printf("%d\t%s\t%s\n", proc->pid, proc->exe, fdlink);
free(fdlink);
}
diff --git a/procps/nmeter.c b/procps/nmeter.c
index 6a3b327..5d5b83b 100644
--- a/procps/nmeter.c
+++ b/procps/nmeter.c
@@ -333,8 +333,7 @@ static void scale(ullong ul)
char buf[5];
/* see http://en.wikipedia.org/wiki/Tera */
- smart_ulltoa4(ul, buf, " kmgtpezy");
- buf[4] = '\0';
+ smart_ulltoa4(ul, buf, " kmgtpezy")[0] = '\0';
put(buf);
}
diff --git a/procps/pgrep.c b/procps/pgrep.c
index 044f553..4ab458b 100644
--- a/procps/pgrep.c
+++ b/procps/pgrep.c
@@ -65,9 +65,9 @@ static void act(unsigned pid, char *cmd, int signo)
{
if (pgrep) {
if (option_mask32 & (1 << OPTBIT_L)) /* OPT_LIST */
- printf("%d %s\n", pid, cmd);
+ printf("%u %s\n", pid, cmd);
else
- printf("%d\n", pid);
+ printf("%u\n", pid);
} else
kill(pid, signo);
}
@@ -128,7 +128,7 @@ int pgrep_main(int argc UNUSED_PARAM, char **argv)
bb_show_usage();
if (argv[0])
- xregcomp(&re_buffer, argv[0], REG_EXTENDED | REG_NOSUB);
+ xregcomp(&re_buffer, argv[0], OPT_ANCHOR ? REG_EXTENDED : (REG_EXTENDED|REG_NOSUB));
matched_pid = 0;
cmd_last = NULL;
diff --git a/procps/powertop.c b/procps/powertop.c
index 71988a2..e3c29d1 100644
--- a/procps/powertop.c
+++ b/procps/powertop.c
@@ -627,7 +627,6 @@ static void show_timerstats(void)
int i, n = 0;
char strbuf6[6];
- strbuf6[5] = '\0';
puts("\nTop causes for wakeups:");
for (i = 0; i < G.lines_cnt; i++) {
if ((G.lines[i].count > 0 /*|| G.lines[i].disk_count > 0*/)
@@ -639,7 +638,7 @@ static void show_timerstats(void)
/*char c = ' ';
if (G.lines[i].disk_count)
c = 'D';*/
- smart_ulltoa5(G.lines[i].count, strbuf6, " KMGTPEZY");
+ smart_ulltoa5(G.lines[i].count, strbuf6, " KMGTPEZY")[0] = '\0';
printf(/*" %5.1f%% (%s)%c %s\n"*/
" %5.1f%% (%s) %s\n",
G.lines[i].count * 100.0 / G.lines_cumulative_count,
diff --git a/procps/ps.c b/procps/ps.c
index 0df20b7..ba8bc9a 100644
--- a/procps/ps.c
+++ b/procps/ps.c
@@ -70,7 +70,7 @@
enum { MAX_WIDTH = 2*1024 };
#if ENABLE_FEATURE_PS_TIME || ENABLE_FEATURE_PS_LONG
-static long get_uptime(void)
+static unsigned long get_uptime(void)
{
#ifdef __linux__
struct sysinfo info;
@@ -78,12 +78,15 @@ static long get_uptime(void)
return 0;
return info.uptime;
#elif 1
- char buf[64];
- long uptime;
+ unsigned long uptime;
+ char buf[sizeof(uptime)*3 + 2];
+ /* /proc/uptime is "UPTIME_SEC.NN IDLE_SEC.NN\n"
+ * (where IDLE is cumulative over all CPUs)
+ */
if (open_read_close("/proc/uptime", buf, sizeof(buf)) <= 0)
- bb_perror_msg_and_die("can't read %s", "/proc/uptime");
+ bb_perror_msg_and_die("can't read '%s'", "/proc/uptime");
buf[sizeof(buf)-1] = '\0';
- sscanf(buf, "%l", &uptime);
+ sscanf(buf, "%lu", &uptime);
return uptime;
#else
struct timespec ts;
@@ -138,7 +141,7 @@ struct globals {
unsigned terminal_width;
#if ENABLE_FEATURE_PS_TIME
unsigned kernel_HZ;
- unsigned long long seconds_since_boot;
+ unsigned long seconds_since_boot;
#endif
} FIX_ALIASING;
#define G (*(struct globals*)&bb_common_bufsiz1)
@@ -149,14 +152,13 @@ struct globals {
#define buffer (G.buffer )
#define terminal_width (G.terminal_width )
#define kernel_HZ (G.kernel_HZ )
-#define seconds_since_boot (G.seconds_since_boot)
#define INIT_G() do { } while (0)
#if ENABLE_FEATURE_PS_TIME
/* for ELF executables, notes are pushed before environment and args */
-static ptrdiff_t find_elf_note(ptrdiff_t findme)
+static uintptr_t find_elf_note(uintptr_t findme)
{
- ptrdiff_t *ep = (ptrdiff_t *) environ;
+ uintptr_t *ep = (uintptr_t *) environ;
while (*ep++)
continue;
@@ -222,7 +224,6 @@ static inline unsigned get_HZ_by_waiting(void)
static unsigned get_kernel_HZ(void)
{
-
if (kernel_HZ)
return kernel_HZ;
@@ -231,7 +232,7 @@ static unsigned get_kernel_HZ(void)
if (kernel_HZ == (unsigned)-1)
kernel_HZ = get_HZ_by_waiting();
- seconds_since_boot = get_uptime();
+ G.seconds_since_boot = get_uptime();
return kernel_HZ;
}
@@ -298,8 +299,7 @@ static void put_lu(char *buf, int size, unsigned long u)
char buf4[5];
/* see http://en.wikipedia.org/wiki/Tera */
- smart_ulltoa4(u, buf4, " mgtpezy");
- buf4[4] = '\0';
+ smart_ulltoa4(u, buf4, " mgtpezy")[0] = '\0';
sprintf(buf, "%.*s", size, buf4);
}
@@ -350,7 +350,7 @@ static void func_etime(char *buf, int size, const procps_status_t *ps)
mm = ps->start_time / get_kernel_HZ();
/* must be after get_kernel_HZ()! */
- mm = seconds_since_boot - mm;
+ mm = G.seconds_since_boot - mm;
ss = mm % 60;
mm /= 60;
snprintf(buf, size+1, "%3lu:%02u", mm, ss);
@@ -588,7 +588,7 @@ int ps_main(int argc UNUSED_PARAM, char **argv)
// -o col1,col2,col3=header
// Select which columns to display
/* We allow (and ignore) most of the above. FIXME.
- * -T is picked for threads (POSIX hasn't it standardized).
+ * -T is picked for threads (POSIX hasn't standardized it).
* procps v3.2.7 supports -T and shows tids as SPID column,
* it also supports -L where it shows tids as LWP column.
*/
@@ -599,7 +599,9 @@ int ps_main(int argc UNUSED_PARAM, char **argv)
parse_o(llist_pop(&opt_o));
} while (opt_o);
} else {
- /* Below: parse_o() needs char*, NOT const char*, can't give it default_o */
+ /* Below: parse_o() needs char*, NOT const char*,
+ * can't pass it constant string. Need to make a copy first.
+ */
#if ENABLE_SELINUX
if (!(opt & OPT_Z) || !is_selinux_enabled()) {
/* no -Z or no SELinux: do not show LABEL */
@@ -652,8 +654,13 @@ int ps_main(int argc UNUSED_PARAM, char **argv UNUSED_PARAM)
OPT_l = (1 << ENABLE_SELINUX) * (1 << ENABLE_FEATURE_SHOW_THREADS) * ENABLE_FEATURE_PS_LONG,
};
#if ENABLE_FEATURE_PS_LONG
+ #ifdef __BIONIC__
time_t now = 0;
long uptime = 0;
+ #else
+ time_t now = now;
+ unsigned long uptime;
+ #endif
#endif
/* If we support any options, parse argv */
#if ENABLE_SELINUX || ENABLE_FEATURE_SHOW_THREADS || ENABLE_FEATURE_PS_WIDE || ENABLE_FEATURE_PS_LONG
@@ -737,8 +744,7 @@ int ps_main(int argc UNUSED_PARAM, char **argv UNUSED_PARAM)
#endif
{
char buf6[6];
- smart_ulltoa5(p->vsz, buf6, " mgtpezy");
- buf6[5] = '\0';
+ smart_ulltoa5(p->vsz, buf6, " mgtpezy")[0] = '\0';
#if ENABLE_FEATURE_PS_LONG
if (opts & OPT_l) {
char bufr[6], stime_str[6];
@@ -749,8 +755,7 @@ int ps_main(int argc UNUSED_PARAM, char **argv UNUSED_PARAM)
time_t start = now - elapsed;
struct tm *tm = localtime(&start);
- smart_ulltoa5(p->rss, bufr, " mgtpezy");
- bufr[5] = '\0';
+ smart_ulltoa5(p->rss, bufr, " mgtpezy")[0] = '\0';
if (p->tty_major == 136)
/* It should be pts/N, not ptsN, but N > 9
diff --git a/procps/pstree.c b/procps/pstree.c
index 45fce3a..2ff5ccb 100644
--- a/procps/pstree.c
+++ b/procps/pstree.c
@@ -34,8 +34,15 @@
struct child;
+#ifdef ENABLE_FEATURE_SHOW_THREADS
+/* For threads, we add {...} around the comm, so we need two extra bytes */
+# define COMM_DISP_LEN (COMM_LEN + 2)
+#else
+# define COMM_DISP_LEN COMM_LEN
+#endif
+
typedef struct proc {
- char comm[COMM_LEN + 1];
+ char comm[COMM_DISP_LEN + 1];
// char flags; - unused, delete?
pid_t pid;
uid_t uid;
@@ -341,8 +348,8 @@ static void dump_by_user(PROC *current, uid_t uid)
#if ENABLE_FEATURE_SHOW_THREADS
static void handle_thread(const char *comm, pid_t pid, pid_t ppid, uid_t uid)
{
- char threadname[COMM_LEN + 2];
- sprintf(threadname, "{%.*s}", COMM_LEN - 2, comm);
+ char threadname[COMM_DISP_LEN + 1];
+ sprintf(threadname, "{%.*s}", (int)sizeof(threadname) - 3, comm);
add_proc(threadname, pid, ppid, uid/*, 1*/);
}
#endif
diff --git a/procps/smemcap.c b/procps/smemcap.c
index 9d1126a..7dc1601 100644
--- a/procps/smemcap.c
+++ b/procps/smemcap.c
@@ -36,8 +36,16 @@ static void writeheader(const char *path, struct stat *sb, int type)
strcpy(header.name, path);
sprintf(header.mode, "%o", sb->st_mode & 0777);
/* careful to not overflow fields! */
+#ifdef BIONIC_L
+ sprintf(header.uid, "%uo", sb->st_uid & 07777777);
+ sprintf(header.gid, "%uo", sb->st_gid & 07777777);
+#elif defined(__BIONIC__)
+ sprintf(header.uid, "%lo", sb->st_uid & 07777777);
+ sprintf(header.gid, "%lo", sb->st_gid & 07777777);
+#else
sprintf(header.uid, "%o", sb->st_uid & 07777777);
sprintf(header.gid, "%o", sb->st_gid & 07777777);
+#endif
sprintf(header.size, "%o", (unsigned)sb->st_size);
sprintf(header.mtime, "%llo", sb->st_mtime & 077777777777LL);
header.typeflag = type;
diff --git a/procps/top.c b/procps/top.c
index 2908bd3..51f1c1a 100644
--- a/procps/top.c
+++ b/procps/top.c
@@ -294,7 +294,7 @@ static void get_jiffy_counts(void)
* they are used to calculate per process CPU% */
prev_jif = cur_jif;
if (read_cpu_jiffy(fp, &cur_jif) < 4)
- bb_error_msg_and_die("can't read /proc/stat");
+ bb_error_msg_and_die("can't read '%s'", "/proc/stat");
#if !ENABLE_FEATURE_TOP_SMP_CPU
fclose(fp);
@@ -677,7 +677,7 @@ static NOINLINE void display_process_list(int lines_rem, int scr_width)
if (s->vsz >= 100000)
sprintf(vsz_str_buf, "%6ldm", s->vsz/1024);
else
- sprintf(vsz_str_buf, "%7ld", s->vsz);
+ sprintf(vsz_str_buf, "%7lu", s->vsz);
/* PID PPID USER STAT VSZ %VSZ [%CPU] COMMAND */
col = snprintf(line_buf, scr_width,
"\n" "%5u%6u %-8.8s %s%s" FMT
@@ -847,8 +847,7 @@ static void display_topmem_header(int scr_width, int *lines_rem_p)
static void ulltoa6_and_space(unsigned long long ul, char buf[6])
{
/* see http://en.wikipedia.org/wiki/Tera */
- smart_ulltoa5(ul, buf, " mgtpezy");
- buf[5] = ' ';
+ smart_ulltoa5(ul, buf, " mgtpezy")[0] = ' ';
}
static NOINLINE void display_topmem_process_list(int lines_rem, int scr_width)
diff --git a/procps/watch.c b/procps/watch.c
index 36af1cc..0397f21 100644
--- a/procps/watch.c
+++ b/procps/watch.c
@@ -69,7 +69,6 @@ int watch_main(int argc UNUSED_PARAM, char **argv)
printf("\033[H""\033[J");
if (!(opt & 0x2)) { // no -t
const unsigned time_len = sizeof("1234-67-90 23:56:89");
- time_t t;
// STDERR_FILENO is procps3 compat:
// "watch ls 2>/dev/null" does not detect tty size
@@ -79,10 +78,13 @@ int watch_main(int argc UNUSED_PARAM, char **argv)
free(header);
header = xasprintf("Every %us: %-*s", period, (int)width, cmd);
}
- time(&t);
- if (time_len < width)
- strftime(header + width - time_len, time_len,
- "%Y-%m-%d %H:%M:%S", localtime(&t));
+ if (time_len < width) {
+ strftime_YYYYMMDDHHMMSS(
+ header + width - time_len,
+ time_len,
+ /*time_t*:*/ NULL
+ );
+ }
// compat: empty line between header and cmd output
printf("%s\n\n", header);
diff --git a/runit/chpst.c b/runit/chpst.c
index ed72c8b..71af29f 100644
--- a/runit/chpst.c
+++ b/runit/chpst.c
@@ -236,7 +236,6 @@ int chpst_main(int argc UNUSED_PARAM, char **argv)
{
struct bb_uidgid_t ugid;
char *set_user = set_user; /* for compiler */
- char *env_user = env_user;
char *env_dir = env_dir;
char *root;
char *nicestr;
@@ -264,7 +263,7 @@ int chpst_main(int argc UNUSED_PARAM, char **argv)
IF_CHPST("/:n:vP012"),
&limita, &limitc, &limitd, &limitf, &limitl,
&limitm, &limito, &limitp, &limitr, &limits, &limitt,
- &set_user, &env_user, &env_dir
+ &set_user, &set_user, &env_dir
IF_CHPST(, &root, &nicestr));
argv += optind;
if (opt & OPT_m) { // -m means -asld
@@ -292,7 +291,7 @@ int chpst_main(int argc UNUSED_PARAM, char **argv)
// envuidgid?
if (ENABLE_ENVUIDGID && applet_name[0] == 'e' && applet_name[3] == 'u') {
- env_user = *argv++;
+ set_user = *argv++;
opt |= OPT_U;
}
diff --git a/runit/runsv.c b/runit/runsv.c
index 3e1a3c8..d941e89 100644
--- a/runit/runsv.c
+++ b/runit/runsv.c
@@ -33,7 +33,6 @@ ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
//usage:#define runsv_full_usage "\n\n"
//usage: "Start and monitor a service and optionally an appendant log service"
-#include <sys/poll.h>
#include <sys/file.h>
#include "libbb.h"
#include "runit_lib.h"
diff --git a/runit/runsvdir.c b/runit/runsvdir.c
index 32526cf..af7e75b 100644
--- a/runit/runsvdir.c
+++ b/runit/runsvdir.c
@@ -35,7 +35,6 @@ ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
//usage: "\n -P Put each runsv in a new session"
//usage: "\n -s SCRIPT Run SCRIPT <signo> after signal is processed"
-#include <sys/poll.h>
#include <sys/file.h>
#include "libbb.h"
#include "runit_lib.h"
diff --git a/runit/sv.c b/runit/sv.c
index 5b01c87..825e9d4 100644
--- a/runit/sv.c
+++ b/runit/sv.c
@@ -169,7 +169,6 @@ Exit Codes
//usage: "pause, cont, hup, alarm, interrupt, quit, 1, 2, term, kill: send\n"
//usage: "STOP, CONT, HUP, ALRM, INT, QUIT, USR1, USR2, TERM, KILL signal to service"
-#include <sys/poll.h>
#include <sys/file.h>
#include "libbb.h"
#include "runit_lib.h"
diff --git a/runit/svlogd.c b/runit/svlogd.c
index b7a0a6e..c080b9a 100644
--- a/runit/svlogd.c
+++ b/runit/svlogd.c
@@ -142,7 +142,6 @@ log message, you can use a pattern like this instead
//usage: "\n""+,-PATTERN - (de)select line for logging"
//usage: "\n""E,ePATTERN - (de)select line for stderr"
-#include <sys/poll.h>
#include <sys/file.h>
#include "libbb.h"
#include "runit_lib.h"
@@ -745,11 +744,6 @@ static NOINLINE unsigned logdir_open(struct logdir *ld, const char *fn)
ld->inst = new;
break;
case 's': {
- static const struct suffix_mult km_suffixes[] = {
- { "k", 1024 },
- { "m", 1024*1024 },
- { "", 0 }
- };
ld->sizemax = xatou_sfx(&s[1], km_suffixes);
break;
}
diff --git a/scripts/Makefile.host b/scripts/Makefile.host
index 484d446..2e62850 100644
--- a/scripts/Makefile.host
+++ b/scripts/Makefile.host
@@ -89,8 +89,8 @@ __hostc_flags = -I$(obj) $(call flags,_hostc_flags)
__hostcxx_flags = -I$(obj) $(call flags,_hostcxx_flags)
endif
-hostc_flags = -Wp,-Wno-unused-result,-MD,$(depfile) $(__hostc_flags)
-hostcxx_flags = -Wp,-Wno-unused-result,-MD,$(depfile) $(__hostcxx_flags)
+hostc_flags = -Wp,-MD,$(depfile) $(__hostc_flags)
+hostcxx_flags = -Wp,-MD,$(depfile) $(__hostcxx_flags)
#####
# Compile programs on the host
diff --git a/scripts/bloat-o-meter b/scripts/bloat-o-meter
index 6db2a5e..cb861b8 100755
--- a/scripts/bloat-o-meter
+++ b/scripts/bloat-o-meter
@@ -7,11 +7,14 @@
# This software may be used and distributed according to the terms
# of the GNU General Public License, incorporated herein by reference.
-import sys, os#, re
+import sys, os
def usage():
- sys.stderr.write("usage: %s [-t] file1 file2\n" % sys.argv[0])
- sys.exit(-1)
+ sys.stderr.write("usage: %s [-t] file1 file2 [-- <readelf options>]\n"
+ % sys.argv[0])
+ sys.stderr.write("\t-t\tShow time spent on parsing/processing\n")
+ sys.stderr.write("\t--\tPass additional parameters to readelf\n")
+ sys.exit(1)
f1, f2 = (None, None)
flag_timing, dashes = (False, False)
@@ -31,6 +34,8 @@ for f in sys.argv[1:]:
f1 = f
elif f2 is None:
f2 = f
+ else:
+ usage()
if flag_timing:
import time
if f1 is None or f2 is None:
diff --git a/scripts/gen_build_files.sh b/scripts/gen_build_files.sh
index 0989b2f..d5f7b94 100755
--- a/scripts/gen_build_files.sh
+++ b/scripts/gen_build_files.sh
@@ -17,6 +17,22 @@ status() { printf ' %-8s%s\n' "$1" "$2"; }
gen() { status "GEN" "$@"; }
chk() { status "CHK" "$@"; }
+# On OSX the sed implementation is not compatible with some of the
+# features in this script, so this uses gsed and warns the user if
+# it does not exist.
+UNAME=$(uname -sm)
+case "$UNAME" in
+*Darwin*|*Macintosh*)
+ SED_IMPL=$(which gsed)
+ if [ $? != 0 ]; then
+ echo "GNU sed is required for Darwin builds, please install and add 'gsed' to the path"
+ exit 1;
+ fi
+ ;;
+*)
+ SED_IMPL=sed
+esac
+
generate()
{
# NB: data to be inserted at INSERT line is coming on stdin
@@ -27,11 +43,11 @@ generate()
# rules re handling of "\n" in echo params.
printf "%s\n" "${header}"
# print everything up to INSERT line
- sed -n '/^INSERT$/ q; p' "${src}"
+ $SED_IMPL -n '/^INSERT$/ q; p' "${src}"
# copy stdin to stdout
cat
# print everything after INSERT line
- sed -n '/^INSERT$/ { :l; n; p; bl }' "${src}"
+ $SED_IMPL -n '/^INSERT$/ { :l; n; p; bl }' "${src}"
} >"${dst}.tmp"
if ! cmp -s "${dst}" "${dst}.tmp"; then
gen "${dst}"
@@ -42,7 +58,7 @@ generate()
}
# (Re)generate include/applets.h
-sed -n 's@^//applet:@@p' "$srctree"/*/*.c "$srctree"/*/*/*.c \
+$SED_IMPL -n 's@^//applet:@@p' "$srctree"/*/*.c "$srctree"/*/*/*.c \
| generate \
"$srctree/include/applets.src.h" \
"include/applets.h" \
@@ -52,7 +68,7 @@ sed -n 's@^//applet:@@p' "$srctree"/*/*.c "$srctree"/*/*/*.c \
# We add line continuation backslash after each line,
# and insert empty line before each line which doesn't start
# with space or tab
-sed -n -e 's@^//usage:\([ \t].*\)$@\1 \\@p' -e 's@^//usage:\([^ \t].*\)$@\n\1 \\@p' \
+$SED_IMPL -n -e 's@^//usage:\([ \t].*\)$@\1 \\@p' -e 's@^//usage:\([^ \t].*\)$@\n\1 \\@p' \
"$srctree"/*/*.c "$srctree"/*/*/*.c \
| generate \
"$srctree/include/usage.src.h" \
@@ -70,7 +86,7 @@ sed -n -e 's@^//usage:\([ \t].*\)$@\1 \\@p' -e 's@^//usage:\([^ \t].*\)$@\n\1 \\
if test -f "$src"; then
mkdir -p -- "$d" 2>/dev/null
- sed -n 's@^//kbuild:@@p' "$srctree/$d"/*.c \
+ $SED_IMPL -n 's@^//kbuild:@@p' "$srctree/$d"/*.c \
| generate \
"${src}" "${dst}" \
"# DO NOT EDIT. This file is generated from Kbuild.src"
@@ -81,7 +97,7 @@ sed -n -e 's@^//usage:\([ \t].*\)$@\1 \\@p' -e 's@^//usage:\([^ \t].*\)$@\n\1 \\
if test -f "$src"; then
mkdir -p -- "$d" 2>/dev/null
- sed -n 's@^//config:@@p' "$srctree/$d"/*.c \
+ $SED_IMPL -n 's@^//config:@@p' "$srctree/$d"/*.c \
| generate \
"${src}" "${dst}" \
"# DO NOT EDIT. This file is generated from Config.src"
diff --git a/scripts/kconfig/Makefile b/scripts/kconfig/Makefile
index 1651390..38bae80 100644
--- a/scripts/kconfig/Makefile
+++ b/scripts/kconfig/Makefile
@@ -150,7 +150,7 @@ HOSTCFLAGS_zconf.tab.o := -I$(src)
HOSTLOADLIBES_qconf = $(KC_QT_LIBS) -ldl
HOSTCXXFLAGS_qconf.o = $(KC_QT_CFLAGS) -D LKC_DIRECT_LINK
-HOSTLOADLIBES_gconf = `pkg-config --libs gtk+-2.0 gmodule-2.0 libglade-2.0`
+HOSTLOADLIBES_gconf = `pkg-config --libs gtk+-2.0 gmodule-2.0 libglade-2.0` -ldl
HOSTCFLAGS_gconf.o = `pkg-config --cflags gtk+-2.0 gmodule-2.0 libglade-2.0` \
-D LKC_DIRECT_LINK
diff --git a/scripts/kconfig/confdata.c b/scripts/kconfig/confdata.c
index fe6d2db..d21d06e 100644
--- a/scripts/kconfig/confdata.c
+++ b/scripts/kconfig/confdata.c
@@ -474,7 +474,11 @@ int conf_write(const char *name)
fprintf(out_h, "#define CONFIG_%s 1\n", sym->name);
/* bbox */
fprintf(out_h, "#define ENABLE_%s 1\n", sym->name);
- fprintf(out_h, "#define IF_%s(...) __VA_ARGS__\n", sym->name);
+ fprintf(out_h, "#ifdef MAKE_SUID\n");
+ fprintf(out_h, "# define IF_%s(...) __VA_ARGS__ \"CONFIG_%s\"\n", sym->name, sym->name);
+ fprintf(out_h, "#else\n");
+ fprintf(out_h, "# define IF_%s(...) __VA_ARGS__\n", sym->name);
+ fprintf(out_h, "#endif\n");
fprintf(out_h, "#define IF_NOT_%s(...)\n", sym->name);
}
break;
@@ -506,7 +510,11 @@ int conf_write(const char *name)
fputs("\"\n", out_h);
/* bbox */
fprintf(out_h, "#define ENABLE_%s 1\n", sym->name);
- fprintf(out_h, "#define IF_%s(...) __VA_ARGS__\n", sym->name);
+ fprintf(out_h, "#ifdef MAKE_SUID\n");
+ fprintf(out_h, "# define IF_%s(...) __VA_ARGS__ \"CONFIG_%s\"\n", sym->name, sym->name);
+ fprintf(out_h, "#else\n");
+ fprintf(out_h, "# define IF_%s(...) __VA_ARGS__\n", sym->name);
+ fprintf(out_h, "#endif\n");
fprintf(out_h, "#define IF_NOT_%s(...)\n", sym->name);
}
break;
@@ -518,7 +526,11 @@ int conf_write(const char *name)
fprintf(out_h, "#define CONFIG_%s 0x%s\n", sym->name, str);
/* bbox */
fprintf(out_h, "#define ENABLE_%s 1\n", sym->name);
- fprintf(out_h, "#define IF_%s(...) __VA_ARGS__\n", sym->name);
+ fprintf(out_h, "#ifdef MAKE_SUID\n");
+ fprintf(out_h, "# define IF_%s(...) __VA_ARGS__ \"CONFIG_%s\"\n", sym->name, sym->name);
+ fprintf(out_h, "#else\n");
+ fprintf(out_h, "# define IF_%s(...) __VA_ARGS__\n", sym->name);
+ fprintf(out_h, "#endif\n");
fprintf(out_h, "#define IF_NOT_%s(...)\n", sym->name);
}
break;
@@ -532,7 +544,11 @@ int conf_write(const char *name)
fprintf(out_h, "#define CONFIG_%s %s\n", sym->name, str);
/* bbox */
fprintf(out_h, "#define ENABLE_%s 1\n", sym->name);
- fprintf(out_h, "#define IF_%s(...) __VA_ARGS__\n", sym->name);
+ fprintf(out_h, "#ifdef MAKE_SUID\n");
+ fprintf(out_h, "# define IF_%s(...) __VA_ARGS__ \"CONFIG_%s\"\n", sym->name, sym->name);
+ fprintf(out_h, "#else\n");
+ fprintf(out_h, "# define IF_%s(...) __VA_ARGS__\n", sym->name);
+ fprintf(out_h, "#endif\n");
fprintf(out_h, "#define IF_NOT_%s(...)\n", sym->name);
}
break;
diff --git a/scripts/mkconfigs b/scripts/mkconfigs
index db94fcc..6a26fe1 100755
--- a/scripts/mkconfigs
+++ b/scripts/mkconfigs
@@ -65,11 +65,11 @@ static const char bbconfig_config_bz2[] ALIGN1 = {"
grep -e '^# CONFIG_' -e '^CONFIG_' "$config" \
| bzip2 -1 | dd bs=2 skip=1 2>/dev/null \
-| od -v -t x1 \
+| od -v -b \
| sed -e 's/^[^ ]*//' \
-e 's/ //g' \
-e '/^$/d' \
- -e 's/\(..\)/0x\1,/g'
+ -e 's/\(...\)/0\1,/g'
echo "};"
echo "#endif"
diff --git a/scripts/randomtest b/scripts/randomtest
index a102593..d2b26bc 100755
--- a/scripts/randomtest
+++ b/scripts/randomtest
@@ -65,6 +65,7 @@ if test x"$LIBC" = x"uclibc"; then
| grep -v CONFIG_BUILD_LIBBUSYBOX \
| grep -v CONFIG_PIE \
\
+ | grep -v CONFIG_FEATURE_TOUCH_NODEREF \
| grep -v CONFIG_FEATURE_2_4_MODULES \
>.config.new
mv .config.new .config
@@ -72,6 +73,7 @@ if test x"$LIBC" = x"uclibc"; then
echo '# CONFIG_BUILD_LIBBUSYBOX is not set' >>.config
echo '# CONFIG_PIE is not set' >>.config
echo '# CONFIG_FEATURE_2_4_MODULES is not set' >>.config
+ echo '# CONFIG_FEATURE_TOUCH_NODEREF is not set' >>.config
fi
# If STATIC, remove some things.
diff --git a/scripts/trylink b/scripts/trylink
index a8b0b2e..e471699 100755
--- a/scripts/trylink
+++ b/scripts/trylink
@@ -117,7 +117,7 @@ LDLIBS=`echo "$LDLIBS" | xargs -n1 | sort | uniq | xargs`
# First link with all libs. If it fails, bail out
echo "Trying libraries: $LDLIBS"
# "lib1 lib2 lib3" -> "-llib1 -llib2 -llib3"
-l_list=`echo "$LDLIBS" | sed -e 's/ / -l/g' -e 's/^/-l/' -e 's/^-l$//'`
+l_list=`echo " $LDLIBS " | sed -e 's: \([^- ][^ ]*\): -l\1:g'`
test "x$l_list" != "x" && l_list="$START_GROUP $l_list $END_GROUP"
try $CC $CFLAGS $LDFLAGS \
-o $EXE \
@@ -141,7 +141,7 @@ while test "$LDLIBS"; do
for one in $LDLIBS; do
without_one=`echo " $LDLIBS " | sed "s/ $one / /g" | xargs`
# "lib1 lib2 lib3" -> "-llib1 -llib2 -llib3"
- l_list=`echo "$without_one" | sed -e 's/ / -l/g' -e 's/^/-l/' -e 's/^-l$//'`
+ l_list=`echo " $without_one " | sed -e 's: \([^- ][^ ]*\): -l\1:g'`
test x"$l_list" != x"" && l_list="$START_GROUP $l_list $END_GROUP"
$debug && echo "Trying -l options: '$l_list'"
try $CC $CFLAGS $LDFLAGS \
@@ -172,7 +172,7 @@ done
# Make the binary with final, minimal list of libs
echo "Final link with: ${LDLIBS:-<none>}"
-l_list=`echo "$LDLIBS" | sed -e 's/ / -l/g' -e 's/^/-l/' -e 's/^-l$//'`
+l_list=`echo " $LDLIBS " | sed -e 's: \([^- ][^ ]*\): -l\1:g'`
test "x$l_list" != "x" && l_list="$START_GROUP $l_list $END_GROUP"
# --verbose gives us gobs of info to stdout (e.g. linker script used)
if ! test -f busybox_ldscript; then
diff --git a/selinux/chcon.c b/selinux/chcon.c
index f947c2c..d1e9047 100644
--- a/selinux/chcon.c
+++ b/selinux/chcon.c
@@ -201,7 +201,7 @@ int chcon_main(int argc UNUSED_PARAM, char **argv)
fname[fname_len] = '\0';
if (recursive_action(fname,
- 1<<option_mask32 & OPT_RECURSIVE,
+ option_mask32 & OPT_RECURSIVE,
change_filedir_context,
change_filedir_context,
NULL, 0) != TRUE)
diff --git a/selinux/matchpathcon.c b/selinux/matchpathcon.c
index 9e5728e..f033892 100644
--- a/selinux/matchpathcon.c
+++ b/selinux/matchpathcon.c
@@ -64,6 +64,11 @@ int matchpathcon_main(int argc UNUSED_PARAM, char **argv)
bb_perror_msg_and_die("error while processing %s", prefix);
}
+#ifdef ANDROID
+ if (!(opts & (OPT_FCONTEXT | OPT_PREFIX))) {
+ matchpathcon_init(selinux_file_contexts_path());
+ }
+#endif
while ((path = *argv++) != NULL) {
security_context_t con;
int rc;
diff --git a/selinux/runcon.c b/selinux/runcon.c
index 27f2be3..60d4100 100644
--- a/selinux/runcon.c
+++ b/selinux/runcon.c
@@ -30,8 +30,8 @@
*/
//usage:#define runcon_trivial_usage
-//usage: "[-c] [-u USER] [-r ROLE] [-t TYPE] [-l RANGE] PROG ARGS\n"
-//usage: "runcon CONTEXT PROG ARGS"
+//usage: "[-c] [-u USER] [-r ROLE] [-t TYPE] [-l RANGE] PROG -- ARGS\n"
+//usage: "runcon CONTEXT PROG -- ARGS"
//usage:#define runcon_full_usage "\n\n"
//usage: "Run PROG in a different security context\n"
//usage: "\n CONTEXT Complete security context\n"
@@ -51,7 +51,9 @@
//usage: )
#include <selinux/context.h>
+#ifndef ANDROID
#include <selinux/flask.h>
+#endif
#include "libbb.h"
diff --git a/selinux/setfiles.c b/selinux/setfiles.c
index 0173db9..1c8ab89 100644
--- a/selinux/setfiles.c
+++ b/selinux/setfiles.c
@@ -651,6 +651,16 @@ int setfiles_main(int argc UNUSED_PARAM, char **argv)
argv++;
}
+#ifdef __BIONIC__
+ else {
+ const char *file_contexts = selinux_file_contexts_path();
+ /* Load the default file contexts configuration and check it. */
+ if (matchpathcon_init(file_contexts) < 0) {
+ bb_perror_msg_and_die("%s not found!", file_contexts);
+ }
+ }
+#endif
+
if (input_filename) {
ssize_t len;
FILE *f = stdin;
diff --git a/shell/ash.c b/shell/ash.c
index e731345..c79ef74 100644
--- a/shell/ash.c
+++ b/shell/ash.c
@@ -385,6 +385,9 @@ static void trace_vprintf(const char *fmt, va_list va);
/* ============ Utility functions */
#define xbarrier() do { __asm__ __volatile__ ("": : :"memory"); } while (0)
+#define is_name(c) ((c) == '_' || isalpha((unsigned char)(c)))
+#define is_in_name(c) ((c) == '_' || isalnum((unsigned char)(c)))
+
static int isdigit_str9(const char *str)
{
int maxlen = 9 + 1; /* max 9 digits: 999999999 */
@@ -2008,27 +2011,6 @@ getoptsreset(const char *value)
}
#endif
-/* math.h has these, otherwise define our private copies */
-#if !ENABLE_SH_MATH_SUPPORT
-#define is_name(c) ((c) == '_' || isalpha((unsigned char)(c)))
-#define is_in_name(c) ((c) == '_' || isalnum((unsigned char)(c)))
-/*
- * Return the pointer to the first char which is not part of a legal variable name
- * (a letter or underscore followed by letters, underscores, and digits).
- */
-static const char*
-endofname(const char *name)
-{
- if (!is_name(*name))
- return name;
- while (*++name) {
- if (!is_in_name(*name))
- break;
- }
- return name;
-}
-#endif
-
/*
* Compares two strings up to the first = or '\0'. The first
* string must be terminated by '='; the second may be terminated by
@@ -2230,10 +2212,10 @@ setvar(const char *name, const char *val, int flags)
INT_OFF;
nameeq = ckmalloc(namelen + vallen + 2);
- p = (char*) ((uint32_t) memcpy(nameeq, name, namelen) + namelen);
+ p = (char*) ((uintptr_t) memcpy(nameeq, name, namelen) + namelen);
if (val) {
*p++ = '=';
- p = (char*) ((uint32_t) memcpy(p, val, vallen) + vallen);
+ p = (char*) ((uintptr_t) memcpy(p, val, vallen) + vallen);
}
*p = '\0';
setvareq(nameeq, flags | VNOSAVE);
@@ -2304,7 +2286,7 @@ unsetvar(const char *s)
free(vp);
INT_ON;
} else {
- setvar(s, 0, 0);
+ setvar2(s, 0);
vp->flags &= ~VEXPORT;
}
ok:
@@ -6357,7 +6339,7 @@ subevalvar(char *p, char *varname, int strloc, int subtype,
switch (subtype) {
case VSASSIGN:
- setvar(varname, startp, 0);
+ setvar2(varname, startp);
amount = startp - expdest;
STADJUST(amount, expdest);
return startp;
@@ -6368,7 +6350,7 @@ subevalvar(char *p, char *varname, int strloc, int subtype,
#if ENABLE_ASH_BASH_COMPAT
case VSSUBSTR:
- loc = str = (char*) ((uint32_t) stackblock() + strloc);
+ loc = str = (char*) ((uintptr_t) stackblock() + strloc);
/* Read POS in ${var:POS:LEN} */
pos = atoi(loc); /* number(loc) errors out on "1:4" */
len = str - startp - 1;
@@ -8572,7 +8554,7 @@ evalfor(union node *n, int flags)
loopnest++;
flags &= EV_TESTED;
for (sp = arglist.list; sp; sp = sp->next) {
- setvar(n->nfor.var, sp->text, 0);
+ setvar2(n->nfor.var, sp->text);
evaltree(n->nfor.body, flags);
if (evalskip) {
if (evalskip == SKIPCONT && --skipcount <= 0) {
@@ -9051,6 +9033,9 @@ static int getoptscmd(int, char **) FAST_FUNC;
#if !ENABLE_FEATURE_SH_EXTRA_QUIET
static int helpcmd(int, char **) FAST_FUNC;
#endif
+#if MAX_HISTORY
+static int historycmd(int, char **) FAST_FUNC;
+#endif
#if ENABLE_SH_MATH_SUPPORT
static int letcmd(int, char **) FAST_FUNC;
#endif
@@ -9124,6 +9109,9 @@ static const struct builtincmd builtintab[] = {
#if !ENABLE_FEATURE_SH_EXTRA_QUIET
{ BUILTIN_NOSPEC "help" , helpcmd },
#endif
+#if MAX_HISTORY
+ { BUILTIN_NOSPEC "history" , historycmd },
+#endif
#if JOBS
{ BUILTIN_REGULAR "jobs" , jobscmd },
{ BUILTIN_REGULAR "kill" , killcmd },
@@ -9463,7 +9451,7 @@ evalcommand(union node *cmd, int flags)
* '_' in 'vi' command mode during line editing...
* However I implemented that within libedit itself.
*/
- setvar("_", lastarg, 0);
+ setvar2("_", lastarg);
}
popstackmark(&smark);
}
@@ -9669,7 +9657,12 @@ preadfd(void)
* _during_ shell execution, not only if it was set when
* shell was started. Therefore, re-check LANG every time:
*/
- reinit_unicode(lookupvar("LANG"));
+ {
+ const char *s = lookupvar("LC_ALL");
+ if (!s) s = lookupvar("LC_CTYPE");
+ if (!s) s = lookupvar("LANG");
+ reinit_unicode(s);
+ }
nr = read_line_input(line_input_state, cmdedit_prompt, buf, IBUFSIZ, timeout);
if (nr == 0) {
/* Ctrl+C pressed */
@@ -12276,8 +12269,10 @@ dotcmd(int argc, char **argv)
/* "false; . empty_file; echo $?" should print 0, not 1: */
exitstatus = 0;
+ /* This aborts if file isn't found, which is POSIXly correct.
+ * bash returns exitcode 1 instead.
+ */
fullname = find_dot_file(argv[1]);
-
argv += 2;
argc -= 2;
if (argc) { /* argc > 0, argv[0] != NULL */
@@ -12287,6 +12282,9 @@ dotcmd(int argc, char **argv)
shellparam.p = argv;
};
+ /* This aborts if file can't be opened, which is POSIXly correct.
+ * bash returns exitcode 1 instead.
+ */
setinputfile(fullname, INPUT_PUSH_FILE);
commandname = fullname;
cmdloop(0);
@@ -12633,6 +12631,15 @@ helpcmd(int argc UNUSED_PARAM, char **argv UNUSED_PARAM)
}
#endif /* FEATURE_SH_EXTRA_QUIET */
+#if MAX_HISTORY
+static int FAST_FUNC
+historycmd(int argc UNUSED_PARAM, char **argv UNUSED_PARAM)
+{
+ show_history(line_input_state);
+ return EXIT_SUCCESS;
+}
+#endif
+
/*
* The export and readonly commands.
*/
@@ -13004,8 +13011,11 @@ init(void)
}
}
- setvar("PPID", utoa(getppid()), 0);
-
+ setvar2("PPID", utoa(getppid()));
+#if ENABLE_ASH_BASH_COMPAT
+ p = lookupvar("SHLVL");
+ setvar("SHLVL", utoa((p ? atoi(p) : 0) + 1), VEXPORT);
+#endif
p = lookupvar("PWD");
if (p) {
if (*p != '/' || stat(p, &st1) || stat(".", &st2)
@@ -13209,27 +13219,21 @@ int ash_main(int argc UNUSED_PARAM, char **argv)
setstackmark(&smark);
procargs(argv);
-#if ENABLE_FEATURE_EDITING_SAVEHISTORY
- if (iflag) {
- const char *hp = lookupvar("HISTFILE");
- if (!hp) {
- hp = lookupvar("HOME");
- if (hp) {
- char *defhp = concat_path_file(hp, ".ash_history");
- setvar("HISTFILE", defhp, 0);
- free(defhp);
- }
- }
- }
-#endif
if (argv[0] && argv[0][0] == '-')
isloginsh = 1;
if (isloginsh) {
+ const char *hp;
+
state = 1;
read_profile("/etc/profile");
state1:
state = 2;
- read_profile(".profile");
+ hp = lookupvar("HOME");
+ if (hp) {
+ hp = concat_path_file(hp, ".profile");
+ read_profile(hp);
+ free((char*)hp);
+ }
}
state2:
state = 3;
@@ -13261,6 +13265,15 @@ int ash_main(int argc UNUSED_PARAM, char **argv)
#if MAX_HISTORY > 0 && ENABLE_FEATURE_EDITING_SAVEHISTORY
if (iflag) {
const char *hp = lookupvar("HISTFILE");
+ if (!hp) {
+ hp = lookupvar("HOME");
+ if (hp) {
+ hp = concat_path_file(hp, ".ash_history");
+ setvar2("HISTFILE", hp);
+ free((char*)hp);
+ hp = lookupvar("HISTFILE");
+ }
+ }
if (hp)
line_input_state->hist_file = hp;
# if ENABLE_FEATURE_SH_HISTFILESIZE
diff --git a/shell/hush.c b/shell/hush.c
index 2f1d51a..8a4215d 100644
--- a/shell/hush.c
+++ b/shell/hush.c
@@ -850,6 +850,9 @@ static int builtin_jobs(char **argv) FAST_FUNC;
#if ENABLE_HUSH_HELP
static int builtin_help(char **argv) FAST_FUNC;
#endif
+#if MAX_HISTORY && ENABLE_FEATURE_EDITING
+static int builtin_history(char **argv) FAST_FUNC;
+#endif
#if ENABLE_HUSH_LOCAL
static int builtin_local(char **argv) FAST_FUNC;
#endif
@@ -919,6 +922,9 @@ static const struct built_in_command bltins1[] = {
#if ENABLE_HUSH_HELP
BLTIN("help" , builtin_help , NULL),
#endif
+#if MAX_HISTORY && ENABLE_FEATURE_EDITING
+ BLTIN("history" , builtin_history , "Show command history"),
+#endif
#if ENABLE_HUSH_JOB
BLTIN("jobs" , builtin_jobs , "List jobs"),
#endif
@@ -1304,7 +1310,7 @@ static void restore_G_args(save_arg_t *sv, char **argv)
* backgrounds (i.e. stops) or kills all members of currently running
* pipe.
*
- * Wait builtin in interruptible by signals for which user trap is set
+ * Wait builtin is interruptible by signals for which user trap is set
* or by SIGINT in interactive shell.
*
* Trap handlers will execute even within trap handlers. (right?)
@@ -1383,7 +1389,7 @@ static void restore_G_args(save_arg_t *sv, char **argv)
* are set to '' (ignore) are NOT reset to defaults. We do the same.
*
* Problem: the above approach makes it unwieldy to catch signals while
- * we are in read builtin, of while we read commands from stdin:
+ * we are in read builtin, or while we read commands from stdin:
* masked signals are not visible!
*
* New implementation
@@ -1392,7 +1398,7 @@ static void restore_G_args(save_arg_t *sv, char **argv)
* for them - a bit like emulating kernel pending signal mask in userspace.
* We are interested in: signals which need to have special handling
* as described above, and all signals which have traps set.
- * Signals are rocorded in pending_set.
+ * Signals are recorded in pending_set.
* After each pipe execution, we extract any pending signals
* and act on them.
*
@@ -2038,7 +2044,10 @@ static void get_user_input(struct in_str *i)
* _during_ shell execution, not only if it was set when
* shell was started. Therefore, re-check LANG every time:
*/
- reinit_unicode(get_local_var_value("LANG"));
+ const char *s = get_local_var_value("LC_ALL");
+ if (!s) s = get_local_var_value("LC_CTYPE");
+ if (!s) s = get_local_var_value("LANG");
+ reinit_unicode(s);
G.flag_SIGINT = 0;
/* buglet: SIGINT will not make new prompt to appear _at once_,
@@ -7354,7 +7363,7 @@ static int run_list(struct pipe *pi)
* and we should not execute CMD */
debug_printf_exec("skipped cmd because of || or &&\n");
last_followup = pi->followup;
- continue;
+ goto dont_check_jobs_but_continue;
}
}
last_followup = pi->followup;
@@ -7493,8 +7502,10 @@ static int run_list(struct pipe *pi)
G.flag_break_continue = 0;
/* else: e.g. "continue 2" should *break* once, *then* continue */
} /* else: "while... do... { we are here (innermost list is not a loop!) };...done" */
- if (G.depth_break_continue != 0 || fbc == BC_BREAK)
- goto check_jobs_and_break;
+ if (G.depth_break_continue != 0 || fbc == BC_BREAK) {
+ checkjobs(NULL);
+ break;
+ }
/* "continue": simulate end of loop */
rword = RES_DONE;
continue;
@@ -7502,7 +7513,6 @@ static int run_list(struct pipe *pi)
#endif
#if ENABLE_HUSH_FUNCTIONS
if (G.flag_return_in_progress == 1) {
- /* same as "goto check_jobs_and_break" */
checkjobs(NULL);
break;
}
@@ -7544,6 +7554,9 @@ static int run_list(struct pipe *pi)
if (rword == RES_IF || rword == RES_ELIF)
cond_code = rcode;
#endif
+ check_jobs_and_continue:
+ checkjobs(NULL);
+ dont_check_jobs_but_continue: ;
#if ENABLE_HUSH_LOOPS
/* Beware of "while false; true; do ..."! */
if (pi->next
@@ -7555,22 +7568,17 @@ static int run_list(struct pipe *pi)
/* "while false; do...done" - exitcode 0 */
G.last_exitcode = rcode = EXIT_SUCCESS;
debug_printf_exec(": while expr is false: breaking (exitcode:EXIT_SUCCESS)\n");
- goto check_jobs_and_break;
+ break;
}
}
if (rword == RES_UNTIL) {
if (!rcode) {
debug_printf_exec(": until expr is true: breaking\n");
- check_jobs_and_break:
- checkjobs(NULL);
break;
}
}
}
#endif
-
- check_jobs_and_continue:
- checkjobs(NULL);
} /* for (pi) */
#if ENABLE_HUSH_JOB
@@ -8628,6 +8636,14 @@ static int FAST_FUNC builtin_help(char **argv UNUSED_PARAM)
}
#endif
+#if MAX_HISTORY && ENABLE_FEATURE_EDITING
+static int FAST_FUNC builtin_history(char **argv UNUSED_PARAM)
+{
+ show_history(G.line_input_state);
+ return EXIT_SUCCESS;
+}
+#endif
+
#if ENABLE_HUSH_JOB
static int FAST_FUNC builtin_jobs(char **argv UNUSED_PARAM)
{
@@ -8880,6 +8896,9 @@ static int FAST_FUNC builtin_source(char **argv)
free(arg_path);
if (!input) {
/* bb_perror_msg("%s", *argv); - done by fopen_or_warn */
+ /* POSIX: non-interactive shell should abort here,
+ * not merely fail. So far no one complained :)
+ */
return EXIT_FAILURE;
}
close_on_exec_on(fileno(input));
@@ -8889,12 +8908,14 @@ static int FAST_FUNC builtin_source(char **argv)
/* "we are inside sourced file, ok to use return" */
G.flag_return_in_progress = -1;
#endif
- save_and_replace_G_args(&sv, argv);
+ if (argv[1])
+ save_and_replace_G_args(&sv, argv);
parse_and_run_file(input);
fclose(input);
- restore_G_args(&sv, argv);
+ if (argv[1])
+ restore_G_args(&sv, argv);
#if ENABLE_HUSH_FUNCTIONS
G.flag_return_in_progress = sv_flg;
#endif
diff --git a/shell/hush_test/hush-misc/source2.right b/shell/hush_test/hush-misc/source2.right
new file mode 100644
index 0000000..0587bad
--- a/dev/null
+++ b/shell/hush_test/hush-misc/source2.right
@@ -0,0 +1,4 @@
+0:arg0 1:arg1 2:arg2
+Ok1:0
+0:arg0 1:q 2:w
+Ok2:0
diff --git a/shell/hush_test/hush-misc/source2.tests b/shell/hush_test/hush-misc/source2.tests
new file mode 100755
index 0000000..40b6b83
--- a/dev/null
+++ b/shell/hush_test/hush-misc/source2.tests
@@ -0,0 +1,8 @@
+echo 'echo "0:$0 1:$1 2:$2"' >sourced1
+set -- 1 2 3
+"$THIS_SH" -c '. ./sourced1' arg0 arg1 arg2
+echo Ok1:$?
+"$THIS_SH" -c '. ./sourced1 q w e' arg0 arg1 arg2
+echo Ok2:$?
+
+rm sourced1
diff --git a/shell/hush_test/hush-misc/while4.right b/shell/hush_test/hush-misc/while4.right
new file mode 100644
index 0000000..7b24a35
--- a/dev/null
+++ b/shell/hush_test/hush-misc/while4.right
@@ -0,0 +1 @@
+Ok:0
diff --git a/shell/hush_test/hush-misc/while4.tests b/shell/hush_test/hush-misc/while4.tests
new file mode 100755
index 0000000..ba80e60
--- a/dev/null
+++ b/shell/hush_test/hush-misc/while4.tests
@@ -0,0 +1,6 @@
+false
+while false && echo Not reached; do
+ echo BUG
+ break
+done
+echo Ok:$?
diff --git a/shell/math.c b/shell/math.c
index 15c0039..3da1511 100644
--- a/shell/math.c
+++ b/shell/math.c
@@ -494,18 +494,6 @@ static const char op_tokens[] ALIGN1 = {
};
#define ptr_to_rparen (&op_tokens[sizeof(op_tokens)-7])
-const char* FAST_FUNC
-endofname(const char *name)
-{
- if (!is_name(*name))
- return name;
- while (*++name) {
- if (!is_in_name(*name))
- break;
- }
- return name;
-}
-
static arith_t FAST_FUNC
evaluate_string(arith_state_t *math_state, const char *expr)
{
diff --git a/shell/math.h b/shell/math.h
index 2d305eb..864bee6 100644
--- a/shell/math.h
+++ b/shell/math.h
@@ -73,11 +73,6 @@ typedef long arith_t;
#define strto_arith_t strtoul
#endif
-/* ash's and hush's endofname is the same, so... */
-# define is_name(c) ((c) == '_' || isalpha((unsigned char)(c)))
-# define is_in_name(c) ((c) == '_' || isalnum((unsigned char)(c)))
-const char* FAST_FUNC endofname(const char *name);
-
typedef const char* FAST_FUNC (*arith_var_lookup_t)(const char *name);
typedef void FAST_FUNC (*arith_var_set_t)(const char *name, const char *val);
//typedef const char* FAST_FUNC (*arith_var_endofname_t)(const char *name);
diff --git a/shell/shell_common.c b/shell/shell_common.c
index 0051f21..5729715 100644
--- a/shell/shell_common.c
+++ b/shell/shell_common.c
@@ -37,7 +37,7 @@ int FAST_FUNC is_well_formed_var_name(const char *s, char terminator)
/* read builtin */
-/* Needs to be interruptible: shell mush handle traps and shell-special signals
+/* Needs to be interruptible: shell must handle traps and shell-special signals
* while inside read. To implement this, be sure to not loop on EINTR
* and return errno == EINTR reliably.
*/
diff --git a/sysklogd/logread.c b/sysklogd/logread.c
index 9939569..bea73d9 100644
--- a/sysklogd/logread.c
+++ b/sysklogd/logread.c
@@ -49,13 +49,18 @@ struct globals {
memcpy(SMrup, init_sem, sizeof(init_sem)); \
} while (0)
+#if 0
static void error_exit(const char *str) NORETURN;
static void error_exit(const char *str)
{
- //release all acquired resources
+ /* Release all acquired resources */
shmdt(shbuf);
bb_perror_msg_and_die(str);
}
+#else
+/* On Linux, shmdt is not mandatory on exit */
+# define error_exit(str) bb_perror_msg_and_die(str)
+#endif
/*
* sem_up - up()'s a semaphore.
@@ -66,11 +71,10 @@ static void sem_up(int semid)
error_exit("semop[SMrup]");
}
-static void interrupted(int sig UNUSED_PARAM)
+static void interrupted(int sig)
{
- signal(SIGINT, SIG_IGN);
- shmdt(shbuf);
- exit(EXIT_SUCCESS);
+ /* shmdt(shbuf); - on Linux, shmdt is not mandatory on exit */
+ kill_myself_with_sig(sig);
}
int logread_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE;
@@ -85,18 +89,18 @@ int logread_main(int argc UNUSED_PARAM, char **argv)
log_shmid = shmget(KEY_ID, 0, 0);
if (log_shmid == -1)
- bb_perror_msg_and_die("can't find syslogd buffer");
+ bb_perror_msg_and_die("can't %s syslogd buffer", "find");
/* Attach shared memory to our char* */
shbuf = shmat(log_shmid, NULL, SHM_RDONLY);
if (shbuf == NULL)
- bb_perror_msg_and_die("can't access syslogd buffer");
+ bb_perror_msg_and_die("can't %s syslogd buffer", "access");
log_semid = semget(KEY_ID, 0, 0);
if (log_semid == -1)
error_exit("can't get access to semaphores for syslogd buffer");
- signal(SIGINT, interrupted);
+ bb_signals(BB_FATAL_SIGS, interrupted);
/* Suppose atomic memory read */
/* Max possible value for tail is shbuf->size - 1 */
@@ -122,7 +126,7 @@ int logread_main(int argc UNUSED_PARAM, char **argv)
shbuf_data = shbuf->data; /* pointer! */
if (DEBUG)
- printf("cur:%d tail:%i size:%i\n",
+ printf("cur:%u tail:%u size:%u\n",
cur, shbuf_tail, shbuf_size);
if (!follow) {
@@ -183,9 +187,10 @@ int logread_main(int argc UNUSED_PARAM, char **argv)
}
free(copy);
#endif
+ fflush_all();
} while (follow);
- shmdt(shbuf);
+ /* shmdt(shbuf); - on Linux, shmdt is not mandatory on exit */
fflush_stdout_and_exit(EXIT_SUCCESS);
}
diff --git a/sysklogd/syslogd.c b/sysklogd/syslogd.c
index 3fe3f53..a6a4ff2 100644
--- a/sysklogd/syslogd.c
+++ b/sysklogd/syslogd.c
@@ -29,7 +29,7 @@
//usage: "\n -b N N rotated logs to keep (default:1, max=99, 0=purge)"
//usage: )
//usage: IF_FEATURE_REMOTE_LOG(
-//usage: "\n -R HOST[:PORT] Log to IP or hostname on PORT (default PORT=514/UDP)"
+//usage: "\n -R HOST[:PORT] Log to HOST:PORT (default PORT:514)"
//usage: "\n -L Log locally and via network (default is network only if -R)"
//usage: )
//usage: IF_FEATURE_SYSLOGD_DUP(
@@ -58,6 +58,9 @@
#define SYSLOG_NAMES_CONST
#include <syslog.h>
*/
+#ifndef _PATH_LOG
+#define _PATH_LOG "/dev/log"
+#endif
#include <sys/un.h>
#include <sys/uio.h>
@@ -824,8 +827,8 @@ static NOINLINE int create_socket(void)
/* Unlink old /dev/log or object it points to. */
/* (if it exists, bind will fail) */
- strcpy(sunx.sun_path, "/dev/log");
- dev_log_name = xmalloc_follow_symlinks("/dev/log");
+ strcpy(sunx.sun_path, _PATH_LOG);
+ dev_log_name = xmalloc_follow_symlinks(_PATH_LOG);
if (dev_log_name) {
safe_strncpy(sunx.sun_path, dev_log_name, sizeof(sunx.sun_path));
free(dev_log_name);
@@ -834,7 +837,7 @@ static NOINLINE int create_socket(void)
sock_fd = xsocket(AF_UNIX, SOCK_DGRAM, 0);
xbind(sock_fd, (struct sockaddr *) &sunx, sizeof(sunx));
- chmod("/dev/log", 0666);
+ chmod(_PATH_LOG, 0666);
return sock_fd;
}
@@ -905,7 +908,7 @@ static void do_syslogd(void)
sz = read(sock_fd, recvbuf, MAX_READ - 1);
if (sz < 0) {
if (!bb_got_signal)
- bb_perror_msg("read from /dev/log");
+ bb_perror_msg("read from %s", _PATH_LOG);
break;
}
diff --git a/testsuite/awk.tests b/testsuite/awk.tests
index f9c3b6b..132afc6 100755
--- a/testsuite/awk.tests
+++ b/testsuite/awk.tests
@@ -24,10 +24,57 @@ testing "awk if operator < " "awk 'BEGIN{if(2 < 13) print \"foo\"}'" "foo\n" "
testing "awk if string == " "awk 'BEGIN{if(\"a\"==\"ab\") print \"bar\"}'" "" "" ""
# 4294967295 = 0xffffffff
-testing "awk bitwise op" "awk '{ print or(4294967295,1) }'" "4.29497e+09\n" "" "\n"
+testing "awk bitwise op" "awk '{ print or(4294967295,1) }'" "4294967295\n" "" "\n"
+
+# we were testing for a non-empty body when deciding if a function was
+# defined or not. The testcase below caused:
+# awk: cmd. line:8: Call to undefined function
+prg='
+function empty_fun(count) {
+ # empty
+}
+END {
+ i=1
+ print "L" i "\n"
+ empty_fun(i + i + ++i)
+ print "L" i "\n"
+}'
+testing "awk handles empty function f(arg){}" \
+ "awk '$prg'" \
+ "L1\n\nL2\n\n" \
+ "" ""
+
+prg='
+function outer_fun() {
+ return 1
+}
+END {
+ i=1
+ print "L" i "\n"
+ i += outer_fun()
+ print "L" i "\n"
+}'
+testing "awk properly handles function from other scope" \
+ "awk '$prg'" \
+ "L1\n\nL2\n\n" \
+ "" ""
+
+prg='
+END {
+ i=1
+ print "L" i "\n"
+ i + trigger_error_fun()
+ print "L" i "\n"
+}'
+testing "awk properly handles undefined function" \
+ "awk '$prg' 2>&1" \
+ "L1\n\nawk: cmd. line:5: Call to undefined function\n" \
+ "" ""
+
+
optional DESKTOP
-testing "awk hex const 1" "awk '{ print or(0xffffffff,1) }'" "4.29497e+09\n" "" "\n"
-testing "awk hex const 2" "awk '{ print or(0x80000000,1) }'" "2.14748e+09\n" "" "\n"
+testing "awk hex const 1" "awk '{ print or(0xffffffff,1) }'" "4294967295\n" "" "\n"
+testing "awk hex const 2" "awk '{ print or(0x80000000,1) }'" "2147483649\n" "" "\n"
testing "awk oct const" "awk '{ print or(01234,1) }'" "669\n" "" "\n"
SKIP=
@@ -222,6 +269,32 @@ testing "awk FS assignment" "awk '{FS=\":\"; print \$1}'" \
"" \
"a:b c:d\ne:f g:h"
+optional FEATURE_AWK_LIBM
+testing "awk large integer" \
+ "awk 'BEGIN{n=(2^31)-1; print n, int(n), n%1, ++n, int(n), n%1}'" \
+ "2147483647 2147483647 0 2147483648 2147483648 0\n" \
+ "" ""
+SKIP=
+
+testing "awk length(array)" \
+ "awk 'BEGIN{ A[1]=2; A[\"qwe\"]=\"asd\"; print length(A)}'" \
+ "2\n" \
+ "" ""
+
+testing "awk -f and ARGC" \
+ "awk -f - input" \
+ "re\n2\n" \
+ "do re mi\n" \
+ '{print $2; print ARGC;}' \
+
+optional FEATURE_AWK_GNU_EXTENSIONS
+testing "awk -e and ARGC" \
+ "awk -e '{print \$2; print ARGC;}' input" \
+ "re\n2\n" \
+ "do re mi\n" \
+ ""
+SKIP=
+
# testing "description" "command" "result" "infile" "stdin"
exit $FAILCOUNT
diff --git a/testsuite/date/date-works b/testsuite/date/date-works
index 901c485..35c2468 100644
--- a/testsuite/date/date-works
+++ b/testsuite/date/date-works
@@ -31,9 +31,11 @@ dt=`busybox date -d '1999-1-2 3:4:5'`
dt=`echo "$dt" | cut -b1-19`
test x"$dt" = x"Sat Jan 2 03:04:05"
-dt=`busybox date -d 01231133`
-dt=`echo "$dt" | cut -b5-19`
-test x"$dt" = x"Jan 23 11:33:00"
+# date (GNU coreutils) 8.17 doesn't accept 01231133 either:
+# date: invalid date '01231133'
+#dt=`busybox date -d 01231133`
+#dt=`echo "$dt" | cut -b5-19`
+#test x"$dt" = x"Jan 23 11:33:00"
dt=`busybox date -d 200001231133`
dt=`echo "$dt" | cut -b1-19`
diff --git a/testsuite/date/date-works-1 b/testsuite/date/date-works-1
index 12018fe..6b2421e 100644
--- a/testsuite/date/date-works-1
+++ b/testsuite/date/date-works-1
@@ -41,9 +41,9 @@ test x"$hdt" = x"$dt"
# Avoiding using week day in this evaluation, as it's mostly different every year
# date (GNU coreutils) 6.10 reports:
# date: invalid date '01231133'
-dt=`busybox date -d 01231133 +%c`
-dt=`echo "$dt" | cut -b5-19`
-test x"$dt" = x"Jan 23 11:33:00"
+#dt=`busybox date -d 01231133 +%c`
+#dt=`echo "$dt" | cut -b5-19`
+#test x"$dt" = x"Jan 23 11:33:00"
# date (GNU coreutils) 6.10 reports:
# date: invalid date '012311332000'
diff --git a/testsuite/du/du-k-works b/testsuite/du/du-k-works
index 36dcaa8..213e9ba 100644
--- a/testsuite/du/du-k-works
+++ b/testsuite/du/du-k-works
@@ -2,6 +2,12 @@ mkdir du.testdir
cd du.testdir
dd if=/dev/zero of=file1 bs=1k count=64 2>/dev/null
dd if=/dev/zero of=file2 bs=1k count=16 2>/dev/null
+# ext4 on images <512M gives 81kb
+# ext3 on images <512M gives 83kb
+# a bsd system reportedly gives 82kb
test x"`busybox du -k .`" = x"80 ." \
+ -o x"`busybox du -k .`" = x"81 ." \
+ -o x"`busybox du -k .`" = x"82 ." \
+ -o x"`busybox du -k .`" = x"83 ." \
-o x"`busybox du -k .`" = x"84 ." \
-o x"`busybox du -k .`" = x"88 ."
diff --git a/testsuite/du/du-l-works b/testsuite/du/du-l-works
index 426ee89..af87345 100644
--- a/testsuite/du/du-l-works
+++ b/testsuite/du/du-l-works
@@ -6,6 +6,7 @@ dd if=/dev/zero of=file1 bs=1k count=64 2>/dev/null
ln file1 file1.1
dd if=/dev/zero of=file2 bs=1k count=16 2>/dev/null
test x"`busybox du -l .`" = x"144 ." \
+ -o x"`busybox du -l .`" = x"146 ." \
-o x"`busybox du -l .`" = x"148 ." \
-o x"`busybox du -l .`" = x"152 ." \
-o x"`busybox du -l .`" = x"156 ."
diff --git a/testsuite/grep.tests b/testsuite/grep.tests
index 4781f22..412efff 100755
--- a/testsuite/grep.tests
+++ b/testsuite/grep.tests
@@ -82,6 +82,20 @@ testing "grep -F handles -i" "grep -F -i foo input ; echo \$?" \
testing "grep can read regexps from stdin" "grep -f - input ; echo \$?" \
"two\nthree\n0\n" "tw\ntwo\nthree\n" "tw.\nthr\n"
+# -x (whole line match)
+testing "grep -x (full match)" "grep -x foo input ; echo \$?" \
+ "foo\n0\n" "foo\n" ""
+testing "grep -x (partial match 1)" "grep -x foo input ; echo \$?" \
+ "1\n" "foo bar\n" ""
+testing "grep -x (partial match 2)" "grep -x foo input ; echo \$?" \
+ "1\n" "bar foo\n" ""
+testing "grep -x -F (full match)" "grep -x -F foo input ; echo \$?" \
+ "foo\n0\n" "foo\n" ""
+testing "grep -x -F (partial match 1)" "grep -x -F foo input ; echo \$?" \
+ "1\n" "foo bar\n" ""
+testing "grep -x -F (partial match 2)" "grep -x -F foo input ; echo \$?" \
+ "1\n" "bar foo\n" ""
+
optional FEATURE_GREP_EGREP_ALIAS
testing "grep -E supports extended regexps" "grep -E fo+" "foo\n" "" \
"b\ar\nfoo\nbaz"
@@ -127,6 +141,24 @@ testing "grep -Fw doesn't stop on 1st mismatch" \
"foop foo\n" \
""
+testing "grep -w doesn't stop on 1st mismatch" \
+ "grep -w foo input" \
+ "foop foo\n" \
+ "foop foo\n" \
+ ""
+
+testing "grep -w ^str doesn't match str not at the beginning" \
+ "grep -w ^str input" \
+ "" \
+ "strstr\n" \
+ ""
+
+testing "grep -w ^ doesn't hang" \
+ "grep -w ^ input" \
+ "" \
+ "anything\n" \
+ ""
+
# testing "test name" "commands" "expected result" "file input" "stdin"
# file input will be file called "input"
# test can create a file "actual" instead of writing to stdout
diff --git a/testsuite/hostid/hostid-works b/testsuite/hostid/hostid-works
index bcfd717..8c20bdf 100644
--- a/testsuite/hostid/hostid-works
+++ b/testsuite/hostid/hostid-works
@@ -1,8 +1,6 @@
h=x$(busybox hostid)
# Is $h a sequence of hex numbers?
-x="${h//[0123456789abcdef]/x}"
-x="${x//xxx/x}"
-x="${x//xxx/x}"
-x="${x//xxx/x}"
-x="${x//xx/x}"
-test x"$x" = x"x"
+case "$h" in
+ x*[!0-9a-f]*) false;;
+ *) true;;
+esac
diff --git a/testsuite/md5sum.tests b/testsuite/md5sum.tests
index 1068b08..6c75b6d 100755
--- a/testsuite/md5sum.tests
+++ b/testsuite/md5sum.tests
@@ -30,13 +30,13 @@ result=`(
n=0
while test $n -le 999; do
echo "$text" | head -c $n | "$sum"
- : $((n++))
+ n=$(($n+1))
done | "$sum"
)`
if test x"$result" = x"$expected -"; then
- echo "PASS: $sum"
- exit 0
+ echo "PASS: $sum"
+ exit 0
fi
echo "FAIL: $sum (r:$result exp:$expected)"
diff --git a/testsuite/sed.tests b/testsuite/sed.tests
index 468565f..9494ac2 100755
--- a/testsuite/sed.tests
+++ b/testsuite/sed.tests
@@ -154,11 +154,9 @@ testing "sed selective matches insert newline" \
testing "sed selective matches noinsert newline" \
"sed -ne 's/woo/bang/p' input -" "a bang\nb bang" "a woo\nb woo" \
"c no\nd no"
-test x"$SKIP_KNOWN_BUGS" = x"" && {
testing "sed clusternewline" \
"sed -e '/one/a 111' -e '/two/i 222' -e p input -" \
"one\none\n111\n222\ntwo\ntwo" "one" "two"
-}
testing "sed subst+write" \
"sed -e 's/i/z/' -e 'woutputw' input -; $ECHO -n X; cat outputw" \
"thzngy\nagaznXthzngy\nagazn" "thingy" "again"
@@ -310,6 +308,27 @@ testing "sed zero chars match/replace logic must not falsely trigger here 2" \
"sed 's/ *$/_/g'" \
"qwerty_\n" "" "qwerty\n"
+testing "sed /\$_in_regex/ should not match newlines, only end-of-line" \
+ "sed ': testcont; /\\\\$/{ =; N; b testcont }'" \
+ "\
+this is a regular line
+2
+line with \\
+continuation
+more regular lines
+5
+line with \\
+continuation
+" \
+ "" "\
+this is a regular line
+line with \\
+continuation
+more regular lines
+line with \\
+continuation
+"
+
# testing "description" "commands" "result" "infile" "stdin"
exit $FAILCOUNT
diff --git a/testsuite/tar.tests b/testsuite/tar.tests
index 7927020..4929f4e 100755
--- a/testsuite/tar.tests
+++ b/testsuite/tar.tests
@@ -15,6 +15,44 @@ mkdir tar.tempdir && cd tar.tempdir || exit 1
# testing "test name" "script" "expected result" "file input" "stdin"
+testing "Empty file is not a tarball" '\
+tar xvf - 2>&1; echo $?
+' "\
+tar: short read
+1
+" \
+"" ""
+SKIP=
+
+optional FEATURE_SEAMLESS_GZ
+# In NOMMU case, "invalid magic" message comes from gunzip child process.
+# Otherwise, it comes from tar.
+# Need to fix output up to avoid false positive.
+testing "Empty file is not a tarball.tar.gz" '\
+{ tar xvzf - 2>&1; echo $?; } | grep -Fv "invalid magic"
+' "\
+tar: short read
+1
+" \
+"" ""
+SKIP=
+
+testing "Two zeroed blocks is a ('truncated') empty tarball" '\
+dd if=/dev/zero bs=512 count=2 2>/dev/null | tar xvf - 2>&1; echo $?
+' "\
+0
+" \
+"" ""
+SKIP=
+
+testing "Twenty zeroed blocks is an empty tarball" '\
+dd if=/dev/zero bs=512 count=20 2>/dev/null | tar xvf - 2>&1; echo $?
+' "\
+0
+" \
+"" ""
+SKIP=
+
optional FEATURE_TAR_CREATE FEATURE_LS_SORTFILES
testing "tar hardlinks and repeated files" '\
rm -rf input_* test.tar 2>/dev/null
diff --git a/testsuite/testing.sh b/testsuite/testing.sh
index 9ce9844..ccfebc8 100644
--- a/testsuite/testing.sh
+++ b/testsuite/testing.sh
@@ -63,10 +63,10 @@ optional()
{
SKIP=
while test "$1"; do
- if test x"${OPTIONFLAGS/*:$1:*/y}" != x"y"; then
- SKIP=1
- return
- fi
+ case "${OPTIONFLAGS}" in
+ *:$1:*) ;;
+ *) SKIP=1; return ;;
+ esac
shift
done
}
diff --git a/testsuite/which/which-uses-default-path b/testsuite/which/which-uses-default-path
index 63ceb9f..349583d 100644
--- a/testsuite/which/which-uses-default-path
+++ b/testsuite/which/which-uses-default-path
@@ -1,4 +1,4 @@
-BUSYBOX=$(type -p busybox)
+BUSYBOX=$(command -pv busybox)
SAVED_PATH=$PATH
unset PATH
$BUSYBOX which ls
diff --git a/util-linux/Config.src b/util-linux/Config.src
index 135d6a5..9af923e 100644
--- a/util-linux/Config.src
+++ b/util-linux/Config.src
@@ -81,6 +81,14 @@ config FEATURE_DMESG_PRETTY
<6>BIOS-provided physical RAM map:
<6> BIOS-e820: 0000000000000000 - 000000000009f000 (usable)
+config FEATURE_DMESG_COLOR
+ bool "Colored dmesg output"
+ default y
+ depends on DMESG
+ help
+ Allow to show errors and warnings in different colors
+ dmesg -C
+
config FBSET
bool "fbset"
default y
@@ -246,13 +254,6 @@ config FSCK_MINIX
check for and attempt to repair any corruption that occurs to a minix
filesystem.
-config FSTRIM
- bool "fstrim"
- default y
- select PLATFORM_LINUX
- help
- discard unused blocks on a mounted filesystem.
-
config MKFS_EXT2
bool "mkfs_ext2"
default y
@@ -706,250 +707,6 @@ config FEATURE_MTAB_SUPPORT
About the only reason to use this is if you've removed /proc from
your kernel.
-config VOLUMEID
- bool #No description makes it a hidden option
- default n
-
-menu "Filesystem/Volume identification"
- depends on VOLUMEID
-
-config FEATURE_VOLUMEID_EXT
- bool "Ext filesystem"
- default y
- depends on VOLUMEID
- help
- TODO
-
-config FEATURE_VOLUMEID_BTRFS
- bool "btrfs filesystem"
- default y
- depends on VOLUMEID
- help
- TODO
-
-config FEATURE_VOLUMEID_REISERFS
- bool "Reiser filesystem"
- default y
- depends on VOLUMEID
- help
- TODO
-
-config FEATURE_VOLUMEID_FAT
- bool "fat filesystem"
- default y
- depends on VOLUMEID
- help
- TODO
-
-config FEATURE_VOLUMEID_EXFAT
- bool "exFAT filesystem"
- default y
- depends on VOLUMEID
- help
- exFAT (extended FAT) is a proprietary file system designed especially
- for flash drives. It has many features from NTFS, but with less
- overhead. exFAT is used on most SDXC cards for consumer electronics.
-
-config FEATURE_VOLUMEID_HFS
- bool "hfs filesystem"
- default y
- depends on VOLUMEID
- help
- TODO
-
-config FEATURE_VOLUMEID_JFS
- bool "jfs filesystem"
- default y
- depends on VOLUMEID
- help
- TODO
-
-### config FEATURE_VOLUMEID_UFS
-### bool "ufs filesystem"
-### default y
-### depends on VOLUMEID
-### help
-### TODO
-
-config FEATURE_VOLUMEID_XFS
- bool "xfs filesystem"
- default y
- depends on VOLUMEID
- help
- TODO
-
-config FEATURE_VOLUMEID_NILFS
- bool "nilfs filesystem"
- default y
- depends on VOLUMEID
- help
- TODO
-
-config FEATURE_VOLUMEID_NTFS
- bool "ntfs filesystem"
- default y
- depends on VOLUMEID
- help
- TODO
-
-config FEATURE_VOLUMEID_ISO9660
- bool "iso9660 filesystem"
- default y
- depends on VOLUMEID
- help
- TODO
-
-config FEATURE_VOLUMEID_UDF
- bool "udf filesystem"
- default y
- depends on VOLUMEID
- help
- TODO
-
-config FEATURE_VOLUMEID_LUKS
- bool "luks filesystem"
- default y
- depends on VOLUMEID
- help
- TODO
-
-config FEATURE_VOLUMEID_LINUXSWAP
- bool "linux swap filesystem"
- default y
- depends on VOLUMEID
- help
- TODO
-
-### config FEATURE_VOLUMEID_LVM
-### bool "lvm"
-### default y
-### depends on VOLUMEID
-### help
-### TODO
-
-config FEATURE_VOLUMEID_CRAMFS
- bool "cramfs filesystem"
- default y
- depends on VOLUMEID
- help
- TODO
-
-### config FEATURE_VOLUMEID_HPFS
-### bool "hpfs filesystem"
-### default y
-### depends on VOLUMEID
-### help
-### TODO
-
-config FEATURE_VOLUMEID_ROMFS
- bool "romfs filesystem"
- default y
- depends on VOLUMEID
- help
- TODO
-
-config FEATURE_VOLUMEID_SQUASHFS
- bool "SquashFS filesystem"
- default y
- depends on VOLUMEID && FEATURE_BLKID_TYPE
- help
- Squashfs is a compressed read-only filesystem for Linux. Squashfs is
- intended for general read-only filesystem use and in constrained block
- device/memory systems (e.g. embedded systems) where low overhead is
- needed.
-
-config FEATURE_VOLUMEID_SYSV
- bool "sysv filesystem"
- default y
- depends on VOLUMEID
- help
- TODO
-
-### config FEATURE_VOLUMEID_MINIX
-### bool "minix filesystem"
-### default y
-### depends on VOLUMEID
-### help
-### TODO
-
-### These only detect partition tables - not used (yet?)
-### config FEATURE_VOLUMEID_MAC
-### bool "mac filesystem"
-### default y
-### depends on VOLUMEID
-### help
-### TODO
-###
-### config FEATURE_VOLUMEID_MSDOS
-### bool "msdos filesystem"
-### default y
-### depends on VOLUMEID
-### help
-### TODO
-
-config FEATURE_VOLUMEID_OCFS2
- bool "ocfs2 filesystem"
- default y
- depends on VOLUMEID
- help
- TODO
-
-### config FEATURE_VOLUMEID_HIGHPOINTRAID
-### bool "highpoint raid"
-### default y
-### depends on VOLUMEID
-### help
-### TODO
-
-### config FEATURE_VOLUMEID_ISWRAID
-### bool "intel raid"
-### default y
-### depends on VOLUMEID
-### help
-### TODO
-
-### config FEATURE_VOLUMEID_LSIRAID
-### bool "lsi raid"
-### default y
-### depends on VOLUMEID
-### help
-### TODO
-
-### config FEATURE_VOLUMEID_VIARAID
-### bool "via raid"
-### default y
-### depends on VOLUMEID
-### help
-### TODO
-
-### config FEATURE_VOLUMEID_SILICONRAID
-### bool "silicon raid"
-### default y
-### depends on VOLUMEID
-### help
-### TODO
-
-### config FEATURE_VOLUMEID_NVIDIARAID
-### bool "nvidia raid"
-### default y
-### depends on VOLUMEID
-### help
-### TODO
-
-### config FEATURE_VOLUMEID_PROMISERAID
-### bool "promise raid"
-### default y
-### depends on VOLUMEID
-### help
-### TODO
-
-config FEATURE_VOLUMEID_LINUXRAID
- bool "linuxraid"
- default y
- depends on VOLUMEID
- help
- TODO
-
-endmenu
+source util-linux/volume_id/Config.in
endmenu
diff --git a/util-linux/Kbuild.src b/util-linux/Kbuild.src
index 429cf11..468fc6b 100644
--- a/util-linux/Kbuild.src
+++ b/util-linux/Kbuild.src
@@ -18,7 +18,6 @@ lib-$(CONFIG_FINDFS) += findfs.o
lib-$(CONFIG_FLOCK) += flock.o
lib-$(CONFIG_FREERAMDISK) += freeramdisk.o
lib-$(CONFIG_FSCK_MINIX) += fsck_minix.o
-lib-$(CONFIG_FSTRIM) += fstrim.o
lib-$(CONFIG_GETOPT) += getopt.o
lib-$(CONFIG_HEXDUMP) += hexdump.o
lib-$(CONFIG_HWCLOCK) += hwclock.o
diff --git a/util-linux/dmesg.c b/util-linux/dmesg.c
index 84173ce..ba52036 100644
--- a/util-linux/dmesg.c
+++ b/util-linux/dmesg.c
@@ -10,23 +10,37 @@
*/
//usage:#define dmesg_trivial_usage
-//usage: "[-c] [-n LEVEL] [-r] [-s SIZE] [-C]"
+//usage: "[-c] [-n LEVEL] [-s SIZE]"
+//usage: IF_FEATURE_DMESG_PRETTY(" [-r]")
+//usage: IF_FEATURE_DMESG_COLOR(" [-C]")
//usage:#define dmesg_full_usage "\n\n"
//usage: "Print or control the kernel ring buffer\n"
//usage: "\n -c Clear ring buffer after printing"
//usage: "\n -n LEVEL Set console logging level"
-//usage: "\n -r Show level prefix"
//usage: "\n -s SIZE Buffer size"
-//usage: "\n -C Colored output"
+//usage: IF_FEATURE_DMESG_PRETTY(
+//usage: "\n -r Show level prefix")
+//usage: IF_FEATURE_DMESG_COLOR(
+//usage: "\n -C Colored output")
#include <sys/klog.h>
#include "libbb.h"
+#if ENABLE_FEATURE_DMESG_COLOR
#define COLOR_DEFAULT 0
-#define COLOR_WHITE 231
-#define COLOR_YELLOW 226
-#define COLOR_ORANGE 166
-#define COLOR_RED 196
+#define COLOR_WHITE 97
+#define COLOR_YELLOW 93
+#define COLOR_ORANGE 33
+#define COLOR_RED 91
+
+static void set_color(int color)
+{
+ printf("%c[%dm", 0x1B, color);
+}
+
+#else
+#define set_color(c) {}
+#endif
int dmesg_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE;
int dmesg_main(int argc UNUSED_PARAM, char **argv)
@@ -34,12 +48,14 @@ int dmesg_main(int argc UNUSED_PARAM, char **argv)
int len, level;
char *buf;
unsigned opts;
+ int color = 0;
enum {
OPT_c = 1 << 0,
OPT_s = 1 << 1,
OPT_n = 1 << 2,
OPT_r = 1 << 3,
- OPT_C = 1 << 4
+ OPT_C = 1 << 4,
+ OPT_end
};
opt_complementary = "s+:n+"; /* numeric */
@@ -67,14 +83,15 @@ int dmesg_main(int argc UNUSED_PARAM, char **argv)
if ((ENABLE_FEATURE_DMESG_PRETTY || (opts & OPT_C)) && !(opts & OPT_r)) {
int last = '\n';
- int in = 0, l, color;
- char pfx[16], *lvl;
+ int in = 0;
/* Skip <[0-9]+> at the start of lines */
while (1) {
if (last == '\n' && buf[in] == '<') {
+
+#if ENABLE_FEATURE_DMESG_COLOR
if (opts & OPT_C) {
- lvl = buf + in + 1;
+ char *lvl = buf + in + 1;
sscanf(lvl, "%d", &level);
switch (level) {
@@ -84,18 +101,14 @@ int dmesg_main(int argc UNUSED_PARAM, char **argv)
case 4: color = COLOR_ORANGE; break;
case 5: color = COLOR_YELLOW; break;
case 7: color = COLOR_WHITE; break;
- case 6: // common dmesg info
- default: color = COLOR_DEFAULT;
+ case 6: /* common dmesg info */
+ default:
+ color = COLOR_DEFAULT;
}
- if (color != COLOR_DEFAULT)
- l = sprintf(pfx, "%c[%d;%d;%dm",
- 0x1B, 38, 5, color);
- else
- l = sprintf(pfx, "%c[%dm", 0x1B, 0);
-
- full_write(STDOUT_FILENO, pfx, l);
+ set_color(color);
}
+#endif
while (buf[in++] != '>' && in < len)
;
} else {
@@ -105,17 +118,9 @@ int dmesg_main(int argc UNUSED_PARAM, char **argv)
if (in >= len)
break;
}
-
- if (opts & OPT_C) {
- /* Reset default terminal color */
- l = sprintf(pfx, "%c[%dm", 0x1B, 0);
- full_write(STDOUT_FILENO, pfx, l);
- }
-
/* Make sure we end with a newline */
if (last != '\n')
bb_putchar('\n');
-
} else {
full_write(STDOUT_FILENO, buf, len);
if (buf[len-1] != '\n')
@@ -124,5 +129,9 @@ int dmesg_main(int argc UNUSED_PARAM, char **argv)
if (ENABLE_FEATURE_CLEAN_UP) free(buf);
+ /* Reset default terminal color */
+ if (color)
+ set_color(0);
+
return EXIT_SUCCESS;
}
diff --git a/util-linux/fdformat.c b/util-linux/fdformat.c
index b3e918f..6f49cec 100644
--- a/util-linux/fdformat.c
+++ b/util-linux/fdformat.c
@@ -72,7 +72,7 @@ int fdformat_main(int argc UNUSED_PARAM, char **argv)
/* original message was: "Could not determine current format type" */
xioctl(fd, FDGETPRM, &param);
- printf("%s-sided, %d tracks, %d sec/track. Total capacity %d kB\n",
+ printf("%s-sided, %u tracks, %u sec/track. Total capacity %d kB\n",
(param.head == 2) ? "Double" : "Single",
param.track, param.sect, param.size >> 1);
diff --git a/util-linux/fdisk.c b/util-linux/fdisk.c
index c1cca10..ce4c24f 100644
--- a/util-linux/fdisk.c
+++ b/util-linux/fdisk.c
@@ -2611,7 +2611,8 @@ write_table(void)
static void
print_buffer(char *pbuffer)
{
- int i,l;
+ unsigned i;
+ int l;
for (i = 0, l = 0; i < sector_size; i++, l++) {
if (l == 0)
diff --git a/util-linux/fdisk_gpt.c b/util-linux/fdisk_gpt.c
index d43d9c7..4ec3ee4 100644
--- a/util-linux/fdisk_gpt.c
+++ b/util-linux/fdisk_gpt.c
@@ -47,7 +47,7 @@ static unsigned int part_array_len;
static unsigned int part_entry_len;
static inline gpt_partition *
-gpt_part(int i)
+gpt_part(unsigned i)
{
if (i >= n_parts) {
return NULL;
@@ -90,12 +90,10 @@ gpt_print_wide(uint16_t *s, int max_len)
static void
gpt_list_table(int xtra UNUSED_PARAM)
{
- int i;
+ unsigned i;
char numstr6[6];
- numstr6[5] = '\0';
-
- smart_ulltoa5(total_number_of_sectors, numstr6, " KMGTPEZY");
+ smart_ulltoa5(total_number_of_sectors * sector_size, numstr6, " KMGTPEZY")[0] = '\0';
printf("Disk %s: %llu sectors, %s\n", disk_device,
(unsigned long long)total_number_of_sectors,
numstr6);
@@ -112,8 +110,8 @@ gpt_list_table(int xtra UNUSED_PARAM)
for (i = 0; i < n_parts; i++) {
gpt_partition *p = gpt_part(i);
if (p->lba_start) {
- smart_ulltoa5(1 + SWAP_LE64(p->lba_end) - SWAP_LE64(p->lba_start),
- numstr6, " KMGTPEZY");
+ smart_ulltoa5((1 + SWAP_LE64(p->lba_end) - SWAP_LE64(p->lba_start)) * sector_size,
+ numstr6, " KMGTPEZY")[0] = '\0';
printf("%4u %15llu %15llu %11s %04x ",
i + 1,
(unsigned long long)SWAP_LE64(p->lba_start),
@@ -177,7 +175,7 @@ check_gpt_label(void)
part_array_len = n_parts * part_entry_len;
part_array = xmalloc(part_array_len);
seek_sector(SWAP_LE64(gpt_hdr->first_part_lba));
- if (full_read(dev_fd, part_array, part_array_len) != part_array_len) {
+ if (full_read(dev_fd, part_array, part_array_len) != (ssize_t) part_array_len) {
fdisk_fatal(unable_to_read);
}
diff --git a/util-linux/fdisk_sun.c b/util-linux/fdisk_sun.c
index e7fcc06..e32740d 100644
--- a/util-linux/fdisk_sun.c
+++ b/util-linux/fdisk_sun.c
@@ -348,6 +348,7 @@ create_sunlabel(void)
set_all_unchanged();
set_changed(0);
+ check_sun_label();
get_boot(CREATE_EMPTY_SUN);
}
@@ -497,11 +498,14 @@ add_sun_partition(int n, int sys)
else
first = read_int(scround(start), scround(stop)+1,
scround(stop), 0, mesg);
- if (display_in_cyl_units)
+ if (display_in_cyl_units) {
first *= units_per_sector;
- else
+ } else {
/* Starting sector has to be properly aligned */
- first = (first + g_heads * g_sectors - 1) / (g_heads * g_sectors);
+ first = (first + g_heads * g_sectors - 1) /
+ (g_heads * g_sectors);
+ first *= g_heads * g_sectors;
+ }
if (n == 2 && first != 0)
printf("\
It is highly recommended that the third partition covers the whole disk\n\
diff --git a/util-linux/fsck_minix.c b/util-linux/fsck_minix.c
index c1d1b2c..33767a1 100644
--- a/util-linux/fsck_minix.c
+++ b/util-linux/fsck_minix.c
@@ -686,7 +686,7 @@ static void get_inode_common(unsigned nr, uint16_t i_mode)
total++;
if (!inode_count[nr]) {
if (!inode_in_use(nr)) {
- printf("Inode %d is marked as 'unused', but it is used "
+ printf("Inode %u is marked as 'unused', but it is used "
"for file '%s'\n", nr, current_name);
if (OPT_repair) {
if (ask("Mark as 'in use'", 1))
diff --git a/util-linux/fstrim.c b/util-linux/fstrim.c
index 915de06..675a021 100644
--- a/util-linux/fstrim.c
+++ b/util-linux/fstrim.c
@@ -8,21 +8,31 @@
* Licensed under GPLv2 or later, see file LICENSE in this source tree.
*/
+//config:config FSTRIM
+//config: bool "fstrim"
+//config: default y
+//config: select PLATFORM_LINUX
+//config: help
+//config: Discard unused blocks on a mounted filesystem.
+
+//applet:IF_FSTRIM(APPLET(fstrim, BB_DIR_SBIN, BB_SUID_DROP))
+
+//kbuild:lib-$(CONFIG_FSTRIM) += fstrim.o
+
//usage:#define fstrim_trivial_usage
-//usage: "[Options] <mountpoint>"
+//usage: "[OPTIONS] MOUNTPOINT"
//usage:#define fstrim_full_usage "\n\n"
-//usage: "Options:"
//usage: IF_LONG_OPTS(
-//usage: "\n -o,--offset=offset offset in bytes to discard from"
-//usage: "\n -l,--length=length length of bytes to discard from the offset"
-//usage: "\n -m,--minimum=minimum minimum extent length to discard"
-//usage: "\n -v,--verbose print number of discarded bytes"
+//usage: " -o,--offset=OFFSET Offset in bytes to discard from"
+//usage: "\n -l,--length=LEN Bytes to discard"
+//usage: "\n -m,--minimum=MIN Minimum extent length"
+//usage: "\n -v,--verbose Print number of discarded bytes"
//usage: )
//usage: IF_NOT_LONG_OPTS(
-//usage: "\n -o offset offset in bytes to discard from"
-//usage: "\n -l length length of bytes to discard from the offset"
-//usage: "\n -m minimum minimum extent length to discard"
-//usage: "\n -v, print number of discarded bytes"
+//usage: " -o OFFSET Offset in bytes to discard from"
+//usage: "\n -l LEN Bytes to discard"
+//usage: "\n -m MIN Minimum extent length"
+//usage: "\n -v, Print number of discarded bytes"
//usage: )
#include "libbb.h"
@@ -60,9 +70,7 @@ int fstrim_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE;
int fstrim_main(int argc UNUSED_PARAM, char **argv)
{
struct fstrim_range range;
- char *arg_o;
- char *arg_l;
- char *arg_m;
+ char *arg_o, *arg_l, *arg_m, *mp;
unsigned opts;
int fd;
@@ -83,32 +91,29 @@ int fstrim_main(int argc UNUSED_PARAM, char **argv)
applet_long_options = getopt_longopts;
#endif
- opt_complementary = "=1";
+ opt_complementary = "=1"; /* exactly one non-option arg: the mountpoint */
opts = getopt32(argv, "o:l:m:v", &arg_o, &arg_l, &arg_m);
memset(&range, 0, sizeof(range));
range.len = ULLONG_MAX;
- if (opts & OPT_o) {
+ if (opts & OPT_o)
range.start = xatoull_sfx(arg_o, fstrim_sfx);
- }
-
- if (opts & OPT_l) {
+ if (opts & OPT_l)
range.len = xatoull_sfx(arg_l, fstrim_sfx);
- }
-
- if (opts & OPT_m) {
+ if (opts & OPT_m)
range.minlen = xatoull_sfx(arg_m, fstrim_sfx);
- }
- if (find_block_device(argv[optind])) {
- fd = xopen_nonblocking(argv[optind]);
+ mp = argv[optind];
+ if (find_block_device(mp)) {
+ fd = xopen_nonblocking(mp);
xioctl(fd, FITRIM, &range);
- close(fd);
+ if (ENABLE_FEATURE_CLEAN_UP)
+ close(fd);
if (opts & OPT_v)
- printf("%s: %llu bytes was trimmed\n", argv[optind], range.len);
+ printf("%s: %llu bytes trimmed\n", mp, (unsigned long long)range.len);
+ return EXIT_SUCCESS;
}
-
- return EXIT_SUCCESS;
+ return EXIT_FAILURE;
}
diff --git a/util-linux/getopt.c b/util-linux/getopt.c
index 1ae0c59..58df1c8 100644
--- a/util-linux/getopt.c
+++ b/util-linux/getopt.c
@@ -35,27 +35,32 @@
//usage: "[OPTIONS] [--] OPTSTRING PARAMS"
//usage:#define getopt_full_usage "\n\n"
//usage: IF_LONG_OPTS(
-//usage: " -a,--alternative Allow long options starting with single -"
-//usage: "\n -l,--longoptions=LOPT[,...] Long options to be recognized"
-//usage: "\n -n,--name=PROGNAME The name under which errors are reported"
-//usage: "\n -o,--options=OPTSTRING Short options to be recognized"
-//usage: "\n -q,--quiet Disable error reporting by getopt(3)"
+//usage: IF_FEATURE_GETOPT_LONG(
+//usage: " -a,--alternative Allow long options starting with single -\n"
+//usage: " -l,--longoptions=LOPT[,...] Long options to recognize\n"
+//usage: )
+//usage: " -n,--name=PROGNAME The name under which errors are reported"
+//usage: "\n -o,--options=OPTSTRING Short options to recognize"
+//usage: "\n -q,--quiet No error messages on unrecognized options"
//usage: "\n -Q,--quiet-output No normal output"
//usage: "\n -s,--shell=SHELL Set shell quoting conventions"
-//usage: "\n -T,--test Test for getopt(1) version"
-//usage: "\n -u,--unquoted Don't quote the output"
+//usage: "\n -T,--test Version test (exits with 4)"
+//usage: "\n -u,--unquoted Don't quote output"
//usage: )
//usage: IF_NOT_LONG_OPTS(
-//usage: " -a Allow long options starting with single -"
-//usage: "\n -l LOPT[,...] Long options to be recognized"
-//usage: "\n -n PROGNAME The name under which errors are reported"
-//usage: "\n -o OPTSTRING Short options to be recognized"
-//usage: "\n -q Disable error reporting by getopt(3)"
+//usage: IF_FEATURE_GETOPT_LONG(
+//usage: " -a Allow long options starting with single -\n"
+//usage: " -l LOPT[,...] Long options to recognize\n"
+//usage: )
+//usage: " -n PROGNAME The name under which errors are reported"
+//usage: "\n -o OPTSTRING Short options to recognize"
+//usage: "\n -q No error messages on unrecognized options"
//usage: "\n -Q No normal output"
//usage: "\n -s SHELL Set shell quoting conventions"
-//usage: "\n -T Test for getopt(1) version"
-//usage: "\n -u Don't quote the output"
+//usage: "\n -T Version test (exits with 4)"
+//usage: "\n -u Don't quote output"
//usage: )
+//usage: IF_FEATURE_GETOPT_LONG( /* example uses -l, needs FEATURE_GETOPT_LONG */
//usage: "\n"
//usage: "\nExample:"
//usage: "\n"
@@ -73,6 +78,7 @@
//usage: "\n *) echo Error; exit 1;;"
//usage: "\n esac"
//usage: "\ndone"
+//usage: )
//usage:
//usage:#define getopt_example_usage
//usage: "$ cat getopt.test\n"
@@ -214,11 +220,6 @@ static const char *normalize(const char *arg)
static int generate_output(char **argv, int argc, const char *optstr, const struct option *longopts)
{
int exit_code = 0; /* We assume everything will be OK */
- int opt;
-#if ENABLE_FEATURE_GETOPT_LONG
- int longindex;
-#endif
- const char *charptr;
if (quiet_errors) /* No error reporting from getopt(3) */
opterr = 0;
@@ -233,13 +234,14 @@ static int generate_output(char **argv, int argc, const char *optstr, const stru
#endif
while (1) {
- opt =
#if ENABLE_FEATURE_GETOPT_LONG
- alternative ?
- getopt_long_only(argc, argv, optstr, longopts, &longindex) :
- getopt_long(argc, argv, optstr, longopts, &longindex);
+ int longindex;
+ int opt = alternative
+ ? getopt_long_only(argc, argv, optstr, longopts, &longindex)
+ : getopt_long(argc, argv, optstr, longopts, &longindex)
+ ;
#else
- getopt(argc, argv, optstr);
+ int opt = getopt(argc, argv, optstr);
#endif
if (opt == -1)
break;
@@ -257,9 +259,10 @@ static int generate_output(char **argv, int argc, const char *optstr, const stru
if (opt == NON_OPT)
printf(" %s", normalize(optarg));
else {
+ const char *charptr;
printf(" -%c", opt);
charptr = strchr(optstr, opt);
- if (charptr != NULL && *++charptr == ':')
+ if (charptr && *++charptr == ':')
printf(" %s",
normalize(optarg ? optarg : ""));
}
@@ -267,9 +270,11 @@ static int generate_output(char **argv, int argc, const char *optstr, const stru
}
if (!quiet_output) {
+ unsigned idx;
printf(" --");
- while (optind < argc)
- printf(" %s", normalize(argv[optind++]));
+ idx = optind;
+ while (argv[idx])
+ printf(" %s", normalize(argv[idx++]));
bb_putchar('\n');
}
return exit_code;
diff --git a/util-linux/hexdump.c b/util-linux/hexdump.c
index 9a312f9..ac7e24f 100644
--- a/util-linux/hexdump.c
+++ b/util-linux/hexdump.c
@@ -66,13 +66,6 @@ static const char add_first[] ALIGN1 = "\"%07.7_Ax\n\"";
static const char hexdump_opts[] ALIGN1 = "bcdoxCe:f:n:s:v" IF_FEATURE_HEXDUMP_REVERSE("R");
-static const struct suffix_mult suffixes[] = {
- { "b", 512 },
- { "k", 1024 },
- { "m", 1024*1024 },
- { "", 0 }
-};
-
int hexdump_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE;
int hexdump_main(int argc, char **argv)
{
@@ -116,7 +109,12 @@ int hexdump_main(int argc, char **argv)
dumper->dump_length = xatoi_positive(optarg);
} /* else */
if (ch == 's') { /* compat: -s accepts hex numbers too */
- dumper->dump_skip = xstrtoul_range_sfx(optarg, /*base:*/ 0, /*lo:*/ 0, /*hi:*/ LONG_MAX, suffixes);
+ dumper->dump_skip = xstrtoull_range_sfx(
+ optarg,
+ /*base:*/ 0,
+ /*lo:*/ 0, /*hi:*/ OFF_T_MAX,
+ bkm_suffixes
+ );
} /* else */
if (ch == 'v') {
dumper->dump_vflag = ALL;
diff --git a/util-linux/ipcs.c b/util-linux/ipcs.c
index 2668caf..67a25a8 100644
--- a/util-linux/ipcs.c
+++ b/util-linux/ipcs.c
@@ -166,10 +166,10 @@ static NOINLINE void do_shm(void)
case STATUS:
printf("------ Shared Memory %s --------\n", "Status");
printf("segments allocated %d\n"
- "pages allocated %ld\n"
- "pages resident %ld\n"
- "pages swapped %ld\n"
- "Swap performance: %ld attempts\t%ld successes\n",
+ "pages allocated %lu\n"
+ "pages resident %lu\n"
+ "pages swapped %lu\n"
+ "Swap performance: %lu attempts\t%lu successes\n",
shm_info.used_ids,
shm_info.shm_tot,
shm_info.shm_rss,
@@ -569,7 +569,7 @@ static void print_sem(int semid)
if (val < 0 || ncnt < 0 || zcnt < 0 || pid < 0) {
bb_perror_msg_and_die("semctl");
}
- printf("%-10d %-10d %-10d %-10d %-10d\n", i, val, ncnt, zcnt, pid);
+ printf("%-10u %-10d %-10d %-10d %-10d\n", i, val, ncnt, zcnt, pid);
}
bb_putchar('\n');
}
diff --git a/util-linux/losetup.c b/util-linux/losetup.c
index 21108d0..d450b5a 100644
--- a/util-linux/losetup.c
+++ b/util-linux/losetup.c
@@ -8,16 +8,16 @@
*/
//usage:#define losetup_trivial_usage
-//usage: "[-r] [-o OFS] LOOPDEV FILE - associate loop devices\n"
+//usage: "[-r] [-o OFS] {-f|LOOPDEV} FILE - associate loop devices\n"
//usage: " losetup -d LOOPDEV - disassociate\n"
-//usage: " losetup [-f] - show"
+//usage: " losetup -a - show status\n"
+//usage: " losetup -f - show next free loop device"
//usage:#define losetup_full_usage "\n\n"
//usage: " -o OFS Start OFS bytes into FILE"
//usage: "\n -r Read-only"
-//usage: "\n -f Show first free loop device"
+//usage: "\n -f Show/use next free loop device"
//usage:
//usage:#define losetup_notes_usage
-//usage: "No arguments will display all current associations.\n"
//usage: "One argument (losetup /dev/loop1) will display the current association\n"
//usage: "(if any), or disassociate it (with -d). The display shows the offset\n"
//usage: "and filename of the file the loop device is currently bound to.\n\n"
@@ -27,50 +27,32 @@
#include "libbb.h"
+/* 1048575 is a max possible minor number in Linux circa 2010 */
+/* for now use something less extreme */
+#define MAX_LOOP_NUM 1023
+
int losetup_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE;
int losetup_main(int argc UNUSED_PARAM, char **argv)
{
unsigned opt;
- int n;
char *opt_o;
- unsigned long long offset = 0;
+ char dev[LOOP_NAMESIZE];
enum {
OPT_d = (1 << 0),
OPT_o = (1 << 1),
OPT_f = (1 << 2),
- OPT_r = (1 << 3), /* must be last */
+ OPT_a = (1 << 3),
+ OPT_r = (1 << 4), /* must be last */
};
- /* max 2 args, -d,-o,-f opts are mutually exclusive */
- opt_complementary = "?2:d--of:o--df:f--do";
- opt = getopt32(argv, "do:fr", &opt_o);
+ opt_complementary = "?2:d--ofar:a--ofr";
+ opt = getopt32(argv, "do:far", &opt_o);
argv += optind;
- if (opt == OPT_o)
- offset = xatoull(opt_o);
-
- if (opt == OPT_d) {
- /* -d BLOCKDEV */
- if (!argv[0] || argv[1])
- bb_show_usage();
- if (del_loop(argv[0]))
- bb_simple_perror_msg_and_die(argv[0]);
- return EXIT_SUCCESS;
- }
-
- if (argv[0]) {
+ /* LOOPDEV */
+ if (!opt && argv[0] && !argv[1]) {
char *s;
- if (opt == OPT_f) /* -f should not have arguments */
- bb_show_usage();
-
- if (argv[1]) {
- /* [-r] [-o OFS] BLOCKDEV FILE */
- if (set_loop(&argv[0], argv[1], offset, (opt / OPT_r)) < 0)
- bb_simple_perror_msg_and_die(argv[0]);
- return EXIT_SUCCESS;
- }
- /* [-r] [-o OFS] BLOCKDEV */
s = query_loop(argv[0]);
if (!s)
bb_simple_perror_msg_and_die(argv[0]);
@@ -80,28 +62,65 @@ int losetup_main(int argc UNUSED_PARAM, char **argv)
return EXIT_SUCCESS;
}
- /* [-r] [-o OFS|-f] with no params */
- n = 0;
- while (1) {
- char *s;
- char dev[LOOP_NAMESIZE];
-
- sprintf(dev, LOOP_FORMAT, n);
- s = query_loop(dev);
- n++;
- if (!s) {
- if (n > 9 && errno && errno != ENXIO)
- return EXIT_SUCCESS;
- if (opt == OPT_f) {
- puts(dev);
- return EXIT_SUCCESS;
- }
- } else {
- if (opt != OPT_f)
+ /* -d LOOPDEV */
+ if (opt == OPT_d && argv[0]) {
+ if (del_loop(argv[0]))
+ bb_simple_perror_msg_and_die(argv[0]);
+ return EXIT_SUCCESS;
+ }
+
+ /* -a */
+ if (opt == OPT_a) {
+ int n;
+ for (n = 0; n < MAX_LOOP_NUM; n++) {
+ char *s;
+
+ sprintf(dev, LOOP_FORMAT, n);
+ s = query_loop(dev);
+ if (s) {
printf("%s: %s\n", dev, s);
- if (ENABLE_FEATURE_CLEAN_UP)
free(s);
+ }
+ }
+ return EXIT_SUCCESS;
+ }
+
+ /* contains -f */
+ if (opt & OPT_f) {
+ char *s;
+ int n = 0;
+
+ do {
+ if (n > MAX_LOOP_NUM)
+ bb_error_msg_and_die("no free loop devices");
+ sprintf(dev, LOOP_FORMAT, n++);
+ s = query_loop(dev);
+ free(s);
+ } while (s);
+ /* now: dev is next free "/dev/loopN" */
+ if ((opt == OPT_f) && !argv[0]) {
+ puts(dev);
+ return EXIT_SUCCESS;
}
}
- return EXIT_SUCCESS;
+
+ /* [-r] [-o OFS] {-f|LOOPDEV} FILE */
+ if (argv[0] && ((opt & OPT_f) || argv[1])) {
+ unsigned long long offset = 0;
+ char *d = dev;
+
+ if (opt & OPT_o)
+ offset = xatoull(opt_o);
+ if (!(opt & OPT_f))
+ d = *argv++;
+
+ if (argv[0]) {
+ if (set_loop(&d, argv[0], offset, (opt & OPT_r)) < 0)
+ bb_simple_perror_msg_and_die(argv[0]);
+ return EXIT_SUCCESS;
+ }
+ }
+
+ bb_show_usage(); /* does not return */
+ /*return EXIT_FAILURE;*/
}
diff --git a/util-linux/mdev.c b/util-linux/mdev.c
index 75de14f..e80b58f 100644
--- a/util-linux/mdev.c
+++ b/util-linux/mdev.c
@@ -80,7 +80,7 @@
//usage: IF_FEATURE_MDEV_CONF(
//usage: "\n"
//usage: "It uses /etc/mdev.conf with lines\n"
-//usage: " [-]DEVNAME UID:GID PERM"
+//usage: " [-][ENV=regex;]...DEVNAME UID:GID PERM"
//usage: IF_FEATURE_MDEV_RENAME(" [>|=PATH]|[!]")
//usage: IF_FEATURE_MDEV_EXEC(" [@|$|*PROG]")
//usage: "\n"
@@ -230,9 +230,34 @@
* SUBSYSTEM=block
*/
-static const char keywords[] ALIGN1 = "add\0remove\0change\0";
+#define DEBUG_LVL 2
+
+#if DEBUG_LVL >= 1
+# define dbg1(...) do { if (G.verbose) bb_error_msg(__VA_ARGS__); } while(0)
+#else
+# define dbg1(...) ((void)0)
+#endif
+#if DEBUG_LVL >= 2
+# define dbg2(...) do { if (G.verbose >= 2) bb_error_msg(__VA_ARGS__); } while(0)
+#else
+# define dbg2(...) ((void)0)
+#endif
+#if DEBUG_LVL >= 3
+# define dbg3(...) do { if (G.verbose >= 3) bb_error_msg(__VA_ARGS__); } while(0)
+#else
+# define dbg3(...) ((void)0)
+#endif
+
+
+static const char keywords[] ALIGN1 = "add\0remove\0"; // "change\0"
enum { OP_add, OP_remove };
+struct envmatch {
+ struct envmatch *next;
+ char *envname;
+ regex_t match;
+};
+
struct rule {
bool keep_matching;
bool regex_compiled;
@@ -243,12 +268,14 @@ struct rule {
char *ren_mov;
IF_FEATURE_MDEV_EXEC(char *r_cmd;)
regex_t match;
+ struct envmatch *envmatch;
};
struct globals {
int root_major, root_minor;
smallint verbose;
char *subsystem;
+ char *subsys_env; /* for putenv("SUBSYSTEM=subsystem") */
#if ENABLE_FEATURE_MDEV_CONF
const char *filename;
parser_t *parser;
@@ -256,6 +283,7 @@ struct globals {
unsigned rule_idx;
#endif
struct rule cur_rule;
+ char timestr[sizeof("60.123456")];
} FIX_ALIASING;
#define G (*(struct globals*)&bb_common_bufsiz1)
#define INIT_G() do { \
@@ -267,15 +295,8 @@ struct globals {
/* Prevent infinite loops in /sys symlinks */
#define MAX_SYSFS_DEPTH 3
-/* We use additional 64+ bytes in make_device() */
-#define SCRATCH_SIZE 80
-
-#if 0
-# define dbg(...) bb_error_msg(__VA_ARGS__)
-#else
-# define dbg(...) ((void)0)
-#endif
-
+/* We use additional bytes in make_device() */
+#define SCRATCH_SIZE 128
#if ENABLE_FEATURE_MDEV_CONF
@@ -288,14 +309,48 @@ static void make_default_cur_rule(void)
static void clean_up_cur_rule(void)
{
+ struct envmatch *e;
+
free(G.cur_rule.envvar);
+ free(G.cur_rule.ren_mov);
if (G.cur_rule.regex_compiled)
regfree(&G.cur_rule.match);
- free(G.cur_rule.ren_mov);
IF_FEATURE_MDEV_EXEC(free(G.cur_rule.r_cmd);)
+ e = G.cur_rule.envmatch;
+ while (e) {
+ free(e->envname);
+ regfree(&e->match);
+ e = e->next;
+ }
make_default_cur_rule();
}
+static char *parse_envmatch_pfx(char *val)
+{
+ struct envmatch **nextp = &G.cur_rule.envmatch;
+
+ for (;;) {
+ struct envmatch *e;
+ char *semicolon;
+ char *eq = strchr(val, '=');
+ if (!eq /* || eq == val? */)
+ return val;
+ if (endofname(val) != eq)
+ return val;
+ semicolon = strchr(eq, ';');
+ if (!semicolon)
+ return val;
+ /* ENVVAR=regex;... */
+ *nextp = e = xzalloc(sizeof(*e));
+ nextp = &e->next;
+ e->envname = xstrndup(val, eq - val);
+ *semicolon = '\0';
+ xregcomp(&e->match, eq + 1, REG_EXTENDED);
+ *semicolon = ';';
+ val = semicolon + 1;
+ }
+}
+
static void parse_next_rule(void)
{
/* Note: on entry, G.cur_rule is set to default */
@@ -308,12 +363,13 @@ static void parse_next_rule(void)
break;
/* Fields: [-]regex uid:gid mode [alias] [cmd] */
- dbg("token1:'%s'", tokens[1]);
+ dbg3("token1:'%s'", tokens[1]);
/* 1st field */
val = tokens[0];
G.cur_rule.keep_matching = ('-' == val[0]);
val += G.cur_rule.keep_matching; /* swallow leading dash */
+ val = parse_envmatch_pfx(val);
if (val[0] == '@') {
/* @major,minor[-minor2] */
/* (useful when name is ambiguous:
@@ -328,8 +384,10 @@ static void parse_next_rule(void)
if (sc == 2)
G.cur_rule.min1 = G.cur_rule.min0;
} else {
+ char *eq = strchr(val, '=');
if (val[0] == '$') {
- char *eq = strchr(++val, '=');
+ /* $ENVVAR=regex ... */
+ val++;
if (!eq) {
bb_error_msg("bad $envvar=regex on line %d", G.parser->lineno);
goto next_rule;
@@ -373,7 +431,7 @@ static void parse_next_rule(void)
clean_up_cur_rule();
} /* while (config_read) */
- dbg("config_close(G.parser)");
+ dbg3("config_close(G.parser)");
config_close(G.parser);
G.parser = NULL;
@@ -390,7 +448,7 @@ static const struct rule *next_rule(void)
/* Open conf file if we didn't do it yet */
if (!G.parser && G.filename) {
- dbg("config_open('%s')", G.filename);
+ dbg3("config_open('%s')", G.filename);
G.parser = config_open2(G.filename, fopen_for_read);
G.filename = NULL;
}
@@ -399,7 +457,7 @@ static const struct rule *next_rule(void)
/* mdev -s */
/* Do we have rule parsed already? */
if (G.rule_vec[G.rule_idx]) {
- dbg("< G.rule_vec[G.rule_idx:%d]=%p", G.rule_idx, G.rule_vec[G.rule_idx]);
+ dbg3("< G.rule_vec[G.rule_idx:%d]=%p", G.rule_idx, G.rule_vec[G.rule_idx]);
return G.rule_vec[G.rule_idx++];
}
make_default_cur_rule();
@@ -416,13 +474,28 @@ static const struct rule *next_rule(void)
rule = memcpy(xmalloc(sizeof(G.cur_rule)), &G.cur_rule, sizeof(G.cur_rule));
G.rule_vec = xrealloc_vector(G.rule_vec, 4, G.rule_idx);
G.rule_vec[G.rule_idx++] = rule;
- dbg("> G.rule_vec[G.rule_idx:%d]=%p", G.rule_idx, G.rule_vec[G.rule_idx]);
+ dbg3("> G.rule_vec[G.rule_idx:%d]=%p", G.rule_idx, G.rule_vec[G.rule_idx]);
}
}
return rule;
}
+static int env_matches(struct envmatch *e)
+{
+ while (e) {
+ int r;
+ char *val = getenv(e->envname);
+ if (!val)
+ return 0;
+ r = regexec(&e->match, val, /*size*/ 0, /*range[]*/ NULL, /*eflags*/ 0);
+ if (r != 0) /* no match */
+ return 0;
+ e = e->next;
+ }
+ return 1;
+}
+
#else
# define next_rule() (&G.cur_rule)
@@ -468,7 +541,7 @@ static char *build_alias(char *alias, const char *device_name)
/* mknod in /dev based on a path like "/sys/block/hda/hda1"
* NB1: path parameter needs to have SCRATCH_SIZE scratch bytes
- * after NUL, but we promise to not mangle (IOW: to restore if needed)
+ * after NUL, but we promise to not mangle (IOW: to restore NUL if needed)
* path string.
* NB2: "mdev -s" may call us many times, do not leak memory/fds!
*
@@ -478,9 +551,7 @@ static char *build_alias(char *alias, const char *device_name)
static void make_device(char *device_name, char *path, int operation)
{
int major, minor, type, len;
-
- if (G.verbose)
- bb_error_msg("device: %s, %s", device_name, path);
+ char *path_end = path + strlen(path);
/* Try to read major/minor string. Note that the kernel puts \n after
* the data, so we don't need to worry about null terminating the string
@@ -489,29 +560,51 @@ static void make_device(char *device_name, char *path, int operation)
*/
major = -1;
if (operation == OP_add) {
- char *dev_maj_min = path + strlen(path);
-
- strcpy(dev_maj_min, "/dev");
- len = open_read_close(path, dev_maj_min + 1, 64);
- *dev_maj_min = '\0';
+ strcpy(path_end, "/dev");
+ len = open_read_close(path, path_end + 1, SCRATCH_SIZE - 1);
+ *path_end = '\0';
if (len < 1) {
if (!ENABLE_FEATURE_MDEV_EXEC)
return;
/* no "dev" file, but we can still run scripts
* based on device name */
- } else if (sscanf(++dev_maj_min, "%u:%u", &major, &minor) == 2) {
- if (G.verbose)
- bb_error_msg("maj,min: %u,%u", major, minor);
+ } else if (sscanf(path_end + 1, "%u:%u", &major, &minor) == 2) {
+ dbg1("dev %u,%u", major, minor);
} else {
major = -1;
}
}
/* else: for delete, -1 still deletes the node, but < -1 suppresses that */
- /* Determine device name, type, major and minor */
- if (!device_name)
- device_name = (char*) bb_basename(path);
- /* http://kernel.org/doc/pending/hotplug.txt says that only
+ /* Determine device name */
+ if (!device_name) {
+ /*
+ * There was no $DEVNAME envvar (for example, mdev -s never has).
+ * But it is very useful: it contains the *path*, not only basename,
+ * Thankfully, uevent file has it.
+ * Example of .../sound/card0/controlC0/uevent file on Linux-3.7.7:
+ * MAJOR=116
+ * MINOR=7
+ * DEVNAME=snd/controlC0
+ */
+ strcpy(path_end, "/uevent");
+ len = open_read_close(path, path_end + 1, SCRATCH_SIZE - 1);
+ if (len < 0)
+ len = 0;
+ *path_end = '\0';
+ path_end[1 + len] = '\0';
+ device_name = strstr(path_end + 1, "\nDEVNAME=");
+ if (device_name) {
+ device_name += sizeof("\nDEVNAME=")-1;
+ strchrnul(device_name, '\n')[0] = '\0';
+ } else {
+ /* Fall back to just basename */
+ device_name = (char*) bb_basename(path);
+ }
+ }
+ /* Determine device type */
+ /*
+ * http://kernel.org/doc/pending/hotplug.txt says that only
* "/sys/block/..." is for block devices. "/sys/bus" etc is not.
* But since 2.6.25 block devices are also in /sys/class/block.
* We use strstr("/block/") to forestall future surprises.
@@ -537,6 +630,8 @@ static void make_device(char *device_name, char *path, int operation)
rule = next_rule();
#if ENABLE_FEATURE_MDEV_CONF
+ if (!env_matches(rule->envmatch))
+ continue;
if (rule->maj >= 0) { /* @maj,min rule */
if (major != rule->maj)
continue;
@@ -547,7 +642,7 @@ static void make_device(char *device_name, char *path, int operation)
}
if (rule->envvar) { /* $envvar=regex rule */
str_to_match = getenv(rule->envvar);
- dbg("getenv('%s'):'%s'", rule->envvar, str_to_match);
+ dbg3("getenv('%s'):'%s'", rule->envvar, str_to_match);
if (!str_to_match)
continue;
}
@@ -555,7 +650,7 @@ static void make_device(char *device_name, char *path, int operation)
if (rule->regex_compiled) {
int regex_match = regexec(&rule->match, str_to_match, ARRAY_SIZE(off), off, 0);
- dbg("regex_match for '%s':%d", str_to_match, regex_match);
+ dbg3("regex_match for '%s':%d", str_to_match, regex_match);
//bb_error_msg("matches:");
//for (int i = 0; i < ARRAY_SIZE(off); i++) {
// if (off[i].rm_so < 0) continue;
@@ -574,9 +669,8 @@ static void make_device(char *device_name, char *path, int operation)
}
/* else: it's final implicit "match-all" rule */
rule_matches:
+ dbg2("rule matched, line %d", G.parser ? G.parser->lineno : -1);
#endif
- dbg("rule matched");
-
/* Build alias name */
alias = NULL;
if (ENABLE_FEATURE_MDEV_RENAME && rule->ren_mov) {
@@ -619,34 +713,30 @@ static void make_device(char *device_name, char *path, int operation)
}
}
}
- dbg("alias:'%s'", alias);
+ dbg3("alias:'%s'", alias);
command = NULL;
IF_FEATURE_MDEV_EXEC(command = rule->r_cmd;)
if (command) {
- const char *s = "$@*";
- const char *s2 = strchr(s, command[0]);
-
/* Are we running this command now?
- * Run $cmd on delete, @cmd on create, *cmd on both
+ * Run @cmd on create, $cmd on delete, *cmd on any
*/
- if (s2 - s != (operation == OP_remove) || *s2 == '*') {
- /* We are here if: '*',
- * or: '@' and delete = 0,
- * or: '$' and delete = 1
- */
+ if ((command[0] == '@' && operation == OP_add)
+ || (command[0] == '$' && operation == OP_remove)
+ || (command[0] == '*')
+ ) {
command++;
} else {
command = NULL;
}
}
- dbg("command:'%s'", command);
+ dbg3("command:'%s'", command);
/* "Execute" the line we found */
node_name = device_name;
if (ENABLE_FEATURE_MDEV_RENAME && alias) {
node_name = alias = build_alias(alias, device_name);
- dbg("alias2:'%s'", alias);
+ dbg3("alias2:'%s'", alias);
}
if (operation == OP_add && major >= 0) {
@@ -656,8 +746,17 @@ static void make_device(char *device_name, char *path, int operation)
mkdir_recursive(node_name);
*slash = '/';
}
- if (G.verbose)
- bb_error_msg("mknod: %s (%d,%d) %o", node_name, major, minor, rule->mode | type);
+ if (ENABLE_FEATURE_MDEV_CONF) {
+ dbg1("mknod %s (%d,%d) %o"
+ " %u:%u",
+ node_name, major, minor, rule->mode | type,
+ rule->ugid.uid, rule->ugid.gid
+ );
+ } else {
+ dbg1("mknod %s (%d,%d) %o",
+ node_name, major, minor, rule->mode | type
+ );
+ }
if (mknod(node_name, rule->mode | type, makedev(major, minor)) && errno != EEXIST)
bb_perror_msg("can't create '%s'", node_name);
if (ENABLE_FEATURE_MDEV_CONF) {
@@ -671,8 +770,7 @@ static void make_device(char *device_name, char *path, int operation)
//TODO: on devtmpfs, device_name already exists and symlink() fails.
//End result is that instead of symlink, we have two nodes.
//What should be done?
- if (G.verbose)
- bb_error_msg("symlink: %s", device_name);
+ dbg1("symlink: %s", device_name);
symlink(node_name, device_name);
}
}
@@ -681,27 +779,21 @@ static void make_device(char *device_name, char *path, int operation)
if (ENABLE_FEATURE_MDEV_EXEC && command) {
/* setenv will leak memory, use putenv/unsetenv/free */
char *s = xasprintf("%s=%s", "MDEV", node_name);
- char *s1 = xasprintf("%s=%s", "SUBSYSTEM", G.subsystem);
putenv(s);
- putenv(s1);
- if (G.verbose)
- bb_error_msg("running: %s", command);
+ dbg1("running: %s", command);
if (system(command) == -1)
bb_perror_msg("can't run '%s'", command);
- bb_unsetenv_and_free(s1);
bb_unsetenv_and_free(s);
}
if (operation == OP_remove && major >= -1) {
if (ENABLE_FEATURE_MDEV_RENAME && alias) {
if (aliaslink == '>') {
- if (G.verbose)
- bb_error_msg("unlink: %s", device_name);
+ dbg1("unlink: %s", device_name);
unlink(device_name);
}
}
- if (G.verbose)
- bb_error_msg("unlink: %s", node_name);
+ dbg1("unlink: %s", node_name);
unlink(node_name);
}
@@ -746,9 +838,16 @@ static int FAST_FUNC dirAction(const char *fileName UNUSED_PARAM,
* under /sys/class/ */
if (1 == depth) {
free(G.subsystem);
+ if (G.subsys_env) {
+ bb_unsetenv_and_free(G.subsys_env);
+ G.subsys_env = NULL;
+ }
G.subsystem = strrchr(fileName, '/');
- if (G.subsystem)
+ if (G.subsystem) {
G.subsystem = xstrdup(G.subsystem + 1);
+ G.subsys_env = xasprintf("%s=%s", "SUBSYSTEM", G.subsystem);
+ putenv(G.subsys_env);
+ }
}
return (depth >= MAX_SYSFS_DEPTH ? SKIP : TRUE);
@@ -813,12 +912,107 @@ static void load_firmware(const char *firmware, const char *sysfs_path)
full_write(loading_fd, "-1", 2);
out:
+ xchdir("/dev");
if (ENABLE_FEATURE_CLEAN_UP) {
close(firmware_fd);
close(loading_fd);
}
}
+static char *curtime(void)
+{
+ struct timeval tv;
+ gettimeofday(&tv, NULL);
+ sprintf(G.timestr, "%u.%06u", (unsigned)tv.tv_sec % 60, (unsigned)tv.tv_usec);
+ return G.timestr;
+}
+
+static void open_mdev_log(const char *seq, unsigned my_pid)
+{
+ int logfd = open("mdev.log", O_WRONLY | O_APPEND);
+ if (logfd >= 0) {
+ xmove_fd(logfd, STDERR_FILENO);
+ G.verbose = 2;
+ applet_name = xasprintf("%s[%s]", applet_name, seq ? seq : utoa(my_pid));
+ }
+}
+
+/* If it exists, does /dev/mdev.seq match $SEQNUM?
+ * If it does not match, earlier mdev is running
+ * in parallel, and we need to wait.
+ * Active mdev pokes us with SIGCHLD to check the new file.
+ */
+static int
+wait_for_seqfile(const char *seq)
+{
+ /* We time out after 2 sec */
+ static const struct timespec ts = { 0, 32*1000*1000 };
+ int timeout = 2000 / 32;
+ int seq_fd = -1;
+ int do_once = 1;
+ sigset_t set_CHLD;
+
+ sigemptyset(&set_CHLD);
+ sigaddset(&set_CHLD, SIGCHLD);
+ sigprocmask(SIG_BLOCK, &set_CHLD, NULL);
+
+ for (;;) {
+ int seqlen;
+ char seqbuf[sizeof(int)*3 + 2];
+
+ if (seq_fd < 0) {
+ seq_fd = open("mdev.seq", O_RDWR);
+ if (seq_fd < 0)
+ break;
+ }
+ seqlen = pread(seq_fd, seqbuf, sizeof(seqbuf) - 1, 0);
+ if (seqlen < 0) {
+ close(seq_fd);
+ seq_fd = -1;
+ break;
+ }
+ seqbuf[seqlen] = '\0';
+ if (seqbuf[0] == '\n') {
+ /* seed file: write out seq ASAP */
+ xwrite_str(seq_fd, seq);
+ xlseek(seq_fd, 0, SEEK_SET);
+ dbg2("first seq written");
+ break;
+ }
+ if (strcmp(seq, seqbuf) == 0) {
+ /* correct idx */
+ break;
+ }
+ if (do_once) {
+ dbg2("%s waiting for '%s'", curtime(), seqbuf);
+ do_once = 0;
+ }
+ if (sigtimedwait(&set_CHLD, NULL, &ts) >= 0) {
+ dbg3("woken up");
+ continue; /* don't decrement timeout! */
+ }
+ if (--timeout == 0) {
+ dbg1("%s waiting for '%s'", "timed out", seqbuf);
+ break;
+ }
+ }
+ sigprocmask(SIG_UNBLOCK, &set_CHLD, NULL);
+ return seq_fd;
+}
+
+static void signal_mdevs(unsigned my_pid)
+{
+ procps_status_t* p = NULL;
+ while ((p = procps_scan(p, PSSCAN_ARGV0)) != NULL) {
+ if (p->pid != my_pid
+ && p->argv0
+ && strcmp(bb_basename(p->argv0), "mdev") == 0
+ ) {
+ kill(p->pid, SIGCHLD);
+ }
+ }
+}
+
int mdev_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE;
int mdev_main(int argc UNUSED_PARAM, char **argv)
{
@@ -840,8 +1034,8 @@ int mdev_main(int argc UNUSED_PARAM, char **argv)
xchdir("/dev");
if (argv[1] && strcmp(argv[1], "-s") == 0) {
- /* Scan:
- * mdev -s
+ /*
+ * Scan: mdev -s
*/
struct stat st;
@@ -853,6 +1047,8 @@ int mdev_main(int argc UNUSED_PARAM, char **argv)
G.root_major = major(st.st_dev);
G.root_minor = minor(st.st_dev);
+ putenv((char*)"ACTION=add");
+
/* ACTION_FOLLOWLINKS is needed since in newer kernels
* /sys/block/loop* (for example) are symlinks to dirs,
* not real directories.
@@ -878,54 +1074,37 @@ int mdev_main(int argc UNUSED_PARAM, char **argv)
char *action;
char *env_devname;
char *env_devpath;
+ unsigned my_pid;
+ int seq_fd;
smalluint op;
/* Hotplug:
* env ACTION=... DEVPATH=... SUBSYSTEM=... [SEQNUM=...] mdev
- * ACTION can be "add" or "remove"
+ * ACTION can be "add", "remove", "change"
* DEVPATH is like "/block/sda" or "/class/input/mice"
*/
- action = getenv("ACTION");
- op = index_in_strings(keywords, action);
env_devname = getenv("DEVNAME"); /* can be NULL */
- env_devpath = getenv("DEVPATH");
G.subsystem = getenv("SUBSYSTEM");
+ action = getenv("ACTION");
+ env_devpath = getenv("DEVPATH");
if (!action || !env_devpath /*|| !G.subsystem*/)
bb_show_usage();
fw = getenv("FIRMWARE");
- /* If it exists, does /dev/mdev.seq match $SEQNUM?
- * If it does not match, earlier mdev is running
- * in parallel, and we need to wait */
seq = getenv("SEQNUM");
- if (seq) {
- int timeout = 2000 / 32; /* 2000 msec */
- do {
- int seqlen;
- char seqbuf[sizeof(int)*3 + 2];
-
- seqlen = open_read_close("mdev.seq", seqbuf, sizeof(seqbuf) - 1);
- if (seqlen < 0) {
- seq = NULL;
- break;
- }
- seqbuf[seqlen] = '\0';
- if (seqbuf[0] == '\n' /* seed file? */
- || strcmp(seq, seqbuf) == 0 /* correct idx? */
- ) {
- break;
- }
- usleep(32*1000);
- } while (--timeout);
- }
+ op = index_in_strings(keywords, action);
- {
- int logfd = open("/dev/mdev.log", O_WRONLY | O_APPEND);
- if (logfd >= 0) {
- xmove_fd(logfd, STDERR_FILENO);
- G.verbose = 1;
- bb_error_msg("seq: %s action: %s", seq, action);
- }
- }
+ my_pid = getpid();
+ open_mdev_log(seq, my_pid);
+
+ seq_fd = seq ? wait_for_seqfile(seq) : -1;
+
+ dbg1("%s "
+ "ACTION:%s SUBSYSTEM:%s DEVNAME:%s DEVPATH:%s"
+ "%s%s",
+ curtime(),
+ action, G.subsystem, env_devname, env_devpath,
+ fw ? " FW:" : "", fw ? fw : ""
+ );
snprintf(temp, PATH_MAX, "/sys%s", env_devpath);
if (op == OP_remove) {
@@ -935,16 +1114,18 @@ int mdev_main(int argc UNUSED_PARAM, char **argv)
if (!fw)
make_device(env_devname, temp, op);
}
- else if (op == OP_add) {
+ else {
make_device(env_devname, temp, op);
if (ENABLE_FEATURE_MDEV_LOAD_FIRMWARE) {
- if (fw)
+ if (op == OP_add && fw)
load_firmware(fw, temp);
}
}
- if (seq) {
- xopen_xwrite_close("mdev.seq", utoa(xatou(seq) + 1));
+ dbg1("%s exiting", curtime());
+ if (seq_fd >= 0) {
+ xwrite_str(seq_fd, utoa(xatou(seq) + 1));
+ signal_mdevs(my_pid);
}
}
diff --git a/util-linux/mkfs_ext2.c b/util-linux/mkfs_ext2.c
index 900bfef..c437307 100644
--- a/util-linux/mkfs_ext2.c
+++ b/util-linux/mkfs_ext2.c
@@ -58,7 +58,7 @@
#define EXT2_FLAGS_UNSIGNED_HASH 0x0002
// storage helpers
-char BUG_wrong_field_size(void);
+unsigned char BUG_wrong_field_size(void);
#define STORE_LE(field, value) \
do { \
if (sizeof(field) == 4) \
diff --git a/util-linux/mkfs_minix.c b/util-linux/mkfs_minix.c
index 59d7d23..d65a516 100644
--- a/util-linux/mkfs_minix.c
+++ b/util-linux/mkfs_minix.c
@@ -196,54 +196,6 @@ static void minix_clrbit(char *a, unsigned i)
# define BLKGETSIZE _IO(0x12,96) /* return device size */
#endif
-
-static long valid_offset(int fd, int offset)
-{
- char ch;
-
- if (lseek(fd, offset, SEEK_SET) < 0)
- return 0;
- if (read(fd, &ch, 1) < 1)
- return 0;
- return 1;
-}
-
-static int count_blocks(int fd)
-{
- int high, low;
-
- low = 0;
- for (high = 1; valid_offset(fd, high); high *= 2)
- low = high;
-
- while (low < high - 1) {
- const int mid = (low + high) / 2;
-
- if (valid_offset(fd, mid))
- low = mid;
- else
- high = mid;
- }
- valid_offset(fd, 0);
- return (low + 1);
-}
-
-static int get_size(const char *file)
-{
- int fd;
- long size;
-
- fd = xopen(file, O_RDWR);
- if (ioctl(fd, BLKGETSIZE, &size) >= 0) {
- close(fd);
- return (size * 512);
- }
-
- size = count_blocks(fd);
- close(fd);
- return size;
-}
-
static void write_tables(void)
{
/* Mark the superblock valid. */
@@ -553,7 +505,7 @@ static void get_list_blocks(char *filename)
listfile = xfopen_for_read(filename);
while (!feof(listfile)) {
- fscanf(listfile, "%ld\n", &blockno);
+ fscanf(listfile, "%lu\n", &blockno);
mark_zone(blockno);
G.badblocks++;
}
@@ -636,7 +588,6 @@ int mkfs_minix_main(int argc UNUSED_PARAM, char **argv)
{
unsigned opt;
char *tmp;
- struct stat statbuf;
char *str_i;
char *listfile = NULL;
@@ -673,13 +624,17 @@ int mkfs_minix_main(int argc UNUSED_PARAM, char **argv)
#endif
}
- G.device_name = *argv++;
+ G.device_name = argv[0];
if (!G.device_name)
bb_show_usage();
- if (*argv)
- G.total_blocks = xatou32(*argv);
- else
- G.total_blocks = get_size(G.device_name) / 1024;
+
+ /* Check if it is mounted */
+ if (find_mount_point(G.device_name, 0))
+ bb_error_msg_and_die("can't format mounted filesystem");
+
+ xmove_fd(xopen(G.device_name, O_RDWR), dev_fd);
+
+ G.total_blocks = get_volume_size_in_bytes(dev_fd, argv[1], 1024, /*extend:*/ 1) / 1024;
if (G.total_blocks < 10)
bb_error_msg_and_die("must have at least 10 blocks");
@@ -690,25 +645,21 @@ int mkfs_minix_main(int argc UNUSED_PARAM, char **argv)
G.magic = MINIX2_SUPER_MAGIC;
} else if (G.total_blocks > 65535)
G.total_blocks = 65535;
-
- /* Check if it is mounted */
- if (find_mount_point(G.device_name, 0))
- bb_error_msg_and_die("can't format mounted filesystem");
-
- xmove_fd(xopen(G.device_name, O_RDWR), dev_fd);
+#if 0
+ struct stat statbuf;
xfstat(dev_fd, &statbuf, G.device_name);
+/* why? */
if (!S_ISBLK(statbuf.st_mode))
opt &= ~1; // clear -c (check)
-
+#if 0
/* I don't know why someone has special code to prevent mkfs.minix
* on IDE devices. Why IDE but not SCSI, etc?... */
-#if 0
else if (statbuf.st_rdev == 0x0300 || statbuf.st_rdev == 0x0340)
/* what is this? */
bb_error_msg_and_die("will not try "
"to make filesystem on '%s'", G.device_name);
#endif
-
+#endif
tmp = G.root_block;
*(short *) tmp = 1;
strcpy(tmp + 2, ".");
diff --git a/util-linux/mount.c b/util-linux/mount.c
index 7e547fe..16b58a0 100644
--- a/util-linux/mount.c
+++ b/util-linux/mount.c
@@ -1856,8 +1856,8 @@ static int singlemount(struct mntent *mp, int ignore_busy)
len, share,
share + len + 1 /* "dir1/dir2" */
);
- parse_mount_options(unc, &filteropts);
- if (ENABLE_FEATURE_CLEAN_UP) free(unc);
+ parse_mount_options(unc, &filteropts);
+ if (ENABLE_FEATURE_CLEAN_UP) free(unc);
}
lsa = host2sockaddr(hostname, 0);
diff --git a/util-linux/readprofile.c b/util-linux/readprofile.c
index 974fe89..a645404 100644
--- a/util-linux/readprofile.c
+++ b/util-linux/readprofile.c
@@ -152,7 +152,7 @@ int readprofile_main(int argc UNUSED_PARAM, char **argv)
step = buf[0];
if (optInfo) {
- printf("Sampling_step: %i\n", step);
+ printf("Sampling_step: %u\n", step);
return EXIT_SUCCESS;
}
@@ -219,10 +219,10 @@ int readprofile_main(int argc UNUSED_PARAM, char **argv)
&& (fn_len = next_add-fn_add) != 0
) {
if (optVerbose)
- printf("%016llx %-40s %6i %8.4f\n", fn_add,
+ printf("%016llx %-40s %6u %8.4f\n", fn_add,
fn_name, this, this/(double)fn_len);
else
- printf("%6i %-40s %8.4f\n",
+ printf("%6u %-40s %8.4f\n",
this, fn_name, this/(double)fn_len);
if (optSub) {
unsigned long long scan;
@@ -246,14 +246,14 @@ int readprofile_main(int argc UNUSED_PARAM, char **argv)
}
/* clock ticks, out of kernel text - probably modules */
- printf("%6i %s\n", buf[len/sizeof(*buf)-1], "*unknown*");
+ printf("%6u %s\n", buf[len/sizeof(*buf)-1], "*unknown*");
/* trailer */
if (optVerbose)
- printf("%016x %-40s %6i %8.4f\n",
+ printf("%016x %-40s %6u %8.4f\n",
0, "total", total, total/(double)(fn_add-add0));
else
- printf("%6i %-40s %8.4f\n",
+ printf("%6u %-40s %8.4f\n",
total, "total", total/(double)(fn_add-add0));
fclose(map);
diff --git a/util-linux/swaponoff.c b/util-linux/swaponoff.c
index 54867ec..963139a 100644
--- a/util-linux/swaponoff.c
+++ b/util-linux/swaponoff.c
@@ -60,7 +60,7 @@ static int swap_enable_disable(char *device)
#if ENABLE_DESKTOP
/* test for holes */
if (S_ISREG(st.st_mode))
- if (st.st_blocks * (off_t)512 < st.st_size)
+ if (st.st_blocks * (off_t)512 < (uint64_t) st.st_size)
bb_error_msg("warning: swap file has holes");
#endif
@@ -95,6 +95,20 @@ static int do_em_all(void)
if (applet_name[5] != 'n'
|| hasmntopt(m, MNTOPT_NOAUTO) == NULL
) {
+#if ENABLE_FEATURE_SWAPON_PRI
+ const char *p;
+ g_flags = 0; /* each swap space might have different flags */
+ p = hasmntopt(m, "pri");
+ if (p) {
+ /* Max allowed 32767 (==SWAP_FLAG_PRIO_MASK) */
+ unsigned int swap_prio = MIN(bb_strtou(p + 4 , NULL, 10), SWAP_FLAG_PRIO_MASK);
+ /* We want to allow "NNNN,foo", thus errno == EINVAL is allowed too */
+ if (errno != ERANGE) {
+ g_flags = SWAP_FLAG_PREFER |
+ (swap_prio << SWAP_FLAG_PRIO_SHIFT);
+ }
+ }
+#endif
err += swap_enable_disable(m->mnt_fsname);
}
}
diff --git a/util-linux/volume_id/Config.src b/util-linux/volume_id/Config.src
new file mode 100644
index 0000000..ac208c9
--- a/dev/null
+++ b/util-linux/volume_id/Config.src
@@ -0,0 +1,15 @@
+#
+# For a description of the syntax of this configuration file,
+# see scripts/kbuild/config-language.txt.
+#
+
+config VOLUMEID
+ bool #No description makes it a hidden option
+ default n
+
+menu "Filesystem/Volume identification"
+ depends on VOLUMEID
+
+INSERT
+
+endmenu
diff --git a/util-linux/volume_id/Kbuild.src b/util-linux/volume_id/Kbuild.src
index 759fdaa..6b4fb74 100644
--- a/util-linux/volume_id/Kbuild.src
+++ b/util-linux/volume_id/Kbuild.src
@@ -7,41 +7,3 @@
lib-y:=
INSERT
-
-lib-$(CONFIG_BLKID) += get_devname.o
-lib-$(CONFIG_FINDFS) += get_devname.o
-lib-$(CONFIG_FEATURE_MOUNT_LABEL) += get_devname.o
-
-lib-$(CONFIG_VOLUMEID) += volume_id.o util.o
-lib-$(CONFIG_FEATURE_VOLUMEID_BTRFS) += btrfs.o
-lib-$(CONFIG_FEATURE_VOLUMEID_EXT) += ext.o
-lib-$(CONFIG_FEATURE_VOLUMEID_FAT) += fat.o
-lib-$(CONFIG_FEATURE_VOLUMEID_HFS) += hfs.o
-### lib-$(CONFIG_FEATURE_VOLUMEID_HIGHPOINTRAID) += highpoint.o
-### lib-$(CONFIG_FEATURE_VOLUMEID_ISWRAID) += isw_raid.o
-### lib-$(CONFIG_FEATURE_VOLUMEID_LSIRAID) += lsi_raid.o
-### lib-$(CONFIG_FEATURE_VOLUMEID_VIARAID) += via_raid.o
-### lib-$(CONFIG_FEATURE_VOLUMEID_SILICONRAID) += silicon_raid.o
-### lib-$(CONFIG_FEATURE_VOLUMEID_NVIDIARAID) += nvidia_raid.o
-### lib-$(CONFIG_FEATURE_VOLUMEID_PROMISERAID) += promise_raid.o
-lib-$(CONFIG_FEATURE_VOLUMEID_ISO9660) += iso9660.o
-lib-$(CONFIG_FEATURE_VOLUMEID_JFS) += jfs.o
-lib-$(CONFIG_FEATURE_VOLUMEID_LINUXRAID) += linux_raid.o
-lib-$(CONFIG_FEATURE_VOLUMEID_LINUXSWAP) += linux_swap.o
-### lib-$(CONFIG_FEATURE_VOLUMEID_LVM) += lvm.o
-### lib-$(CONFIG_FEATURE_VOLUMEID_MAC) += mac.o
-### lib-$(CONFIG_FEATURE_VOLUMEID_MSDOS) += msdos.o
-lib-$(CONFIG_FEATURE_VOLUMEID_NILFS) += nilfs.o
-lib-$(CONFIG_FEATURE_VOLUMEID_NTFS) += ntfs.o
-lib-$(CONFIG_FEATURE_VOLUMEID_EXFAT) += exfat.o
-lib-$(CONFIG_FEATURE_VOLUMEID_REISERFS) += reiserfs.o
-lib-$(CONFIG_FEATURE_VOLUMEID_UDF) += udf.o
-### lib-$(CONFIG_FEATURE_VOLUMEID_UFS) += ufs.o
-lib-$(CONFIG_FEATURE_VOLUMEID_XFS) += xfs.o
-lib-$(CONFIG_FEATURE_VOLUMEID_CRAMFS) += cramfs.o
-### lib-$(CONFIG_FEATURE_VOLUMEID_HPFS) += hpfs.o
-lib-$(CONFIG_FEATURE_VOLUMEID_ROMFS) += romfs.o
-lib-$(CONFIG_FEATURE_VOLUMEID_SYSV) += sysv.o
-### lib-$(CONFIG_FEATURE_VOLUMEID_MINIX) += minix.o
-lib-$(CONFIG_FEATURE_VOLUMEID_LUKS) += luks.o
-lib-$(CONFIG_FEATURE_VOLUMEID_OCFS2) += ocfs2.o
diff --git a/util-linux/volume_id/btrfs.c b/util-linux/volume_id/btrfs.c
index ee71d2e..e4dddf2 100644
--- a/util-linux/volume_id/btrfs.c
+++ b/util-linux/volume_id/btrfs.c
@@ -19,6 +19,17 @@
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
+//kbuild:lib-$(CONFIG_FEATURE_VOLUMEID_BTRFS) += btrfs.o
+
+//config:
+//config:config FEATURE_VOLUMEID_BTRFS
+//config: bool "btrfs filesystem"
+//config: default y
+//config: depends on VOLUMEID
+//config: help
+//config: TODO
+//config:
+
#include "volume_id_internal.h"
#define BTRFS_UUID_SIZE 16
diff --git a/util-linux/volume_id/cramfs.c b/util-linux/volume_id/cramfs.c
index 28e9970..aeb7f20 100644
--- a/util-linux/volume_id/cramfs.c
+++ b/util-linux/volume_id/cramfs.c
@@ -18,6 +18,17 @@
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
+//kbuild:lib-$(CONFIG_FEATURE_VOLUMEID_CRAMFS) += cramfs.o
+
+//config:
+//config:config FEATURE_VOLUMEID_CRAMFS
+//config: bool "cramfs filesystem"
+//config: default y
+//config: depends on VOLUMEID
+//config: help
+//config: TODO
+//config:
+
#include "volume_id_internal.h"
struct cramfs_super {
diff --git a/util-linux/volume_id/exfat.c b/util-linux/volume_id/exfat.c
index a38a891..c3aa368 100644
--- a/util-linux/volume_id/exfat.c
+++ b/util-linux/volume_id/exfat.c
@@ -18,6 +18,19 @@
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
+//kbuild:lib-$(CONFIG_FEATURE_VOLUMEID_EXFAT) += exfat.o
+
+//config:
+//config:config FEATURE_VOLUMEID_EXFAT
+//config: bool "exFAT filesystem"
+//config: default y
+//config: depends on VOLUMEID
+//config: help
+//config: exFAT (extended FAT) is a proprietary file system designed especially
+//config: for flash drives. It has many features from NTFS, but with less
+//config: overhead. exFAT is used on most SDXC cards for consumer electronics.
+//config:
+
#include "volume_id_internal.h"
#define EXFAT_SB_OFFSET 0
diff --git a/util-linux/volume_id/ext.c b/util-linux/volume_id/ext.c
index 9745106..df39d93 100644
--- a/util-linux/volume_id/ext.c
+++ b/util-linux/volume_id/ext.c
@@ -18,6 +18,17 @@
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
+//kbuild:lib-$(CONFIG_FEATURE_VOLUMEID_EXT) += ext.o
+
+//config:
+//config:config FEATURE_VOLUMEID_EXT
+//config: bool "Ext filesystem"
+//config: default y
+//config: depends on VOLUMEID
+//config: help
+//config: TODO
+//config:
+
#include "volume_id_internal.h"
#include "bb_e2fs_defs.h"
diff --git a/util-linux/volume_id/f2fs.c b/util-linux/volume_id/f2fs.c
new file mode 100644
index 0000000..bf0b662
--- a/dev/null
+++ b/util-linux/volume_id/f2fs.c
@@ -0,0 +1,95 @@
+/*
+ * volume_id - reads filesystem label and uuid
+ *
+ * Copyright (C) 2012 S-G Bergh <sgb@systemasis.org>
+ *
+ * Licensed under GPLv2, see file LICENSE in this source tree.
+ */
+
+//kbuild:lib-$(CONFIG_FEATURE_VOLUMEID_F2FS) += f2fs.o
+
+//config:
+//config:config FEATURE_VOLUMEID_F2FS
+//config: bool "f2fs filesystem"
+//config: default y
+//config: depends on VOLUMEID
+//config: help
+//config: F2FS (aka Flash-Friendly File System) is a log-structured file system,
+//config: which is adapted to newer forms of storage. F2FS also remedies some
+//config: known issues of the older log structured file systems, such as high
+//config: cleaning overhead.
+//config:
+
+#include "volume_id_internal.h"
+
+#define F2FS_MAGIC 0xF2F52010 // F2FS Magic Number
+#define F2FS_UUID_SIZE 16
+#define F2FS_LABEL_SIZE 512
+#define F2FS_LABEL_BYTES 1024
+#define F2FS_SB1_OFFSET 0x400 // offset for 1:st super block
+/*
+#define F2FS_SB2_OFFSET 0x1400 // offset for 2:nd super block
+*/
+
+struct f2fs_super_block { // According to version 1.1
+/* 0x00 */ uint32_t magic; // Magic Number
+/* 0x04 */ uint16_t major_ver; // Major Version
+/* 0x06 */ uint16_t minor_ver; // Minor Version
+/* 0x08 */ uint32_t log_sectorsize; // log2 sector size in bytes
+/* 0x0C */ uint32_t log_sectors_per_block; // log2 # of sectors per block
+/* 0x10 */ uint32_t log_blocksize; // log2 block size in bytes
+/* 0x14 */ uint32_t log_blocks_per_seg; // log2 # of blocks per segment
+/* 0x18 */ uint32_t segs_per_sec; // # of segments per section
+/* 0x1C */ uint32_t secs_per_zone; // # of sections per zone
+/* 0x20 */ uint32_t checksum_offset; // checksum offset inside super block
+/* 0x24 */ uint64_t block_count; // total # of user blocks
+/* 0x2C */ uint32_t section_count; // total # of sections
+/* 0x30 */ uint32_t segment_count; // total # of segments
+/* 0x34 */ uint32_t segment_count_ckpt; // # of segments for checkpoint
+/* 0x38 */ uint32_t segment_count_sit; // # of segments for SIT
+/* 0x3C */ uint32_t segment_count_nat; // # of segments for NAT
+/* 0x40 */ uint32_t segment_count_ssa; // # of segments for SSA
+/* 0x44 */ uint32_t segment_count_main; // # of segments for main area
+/* 0x48 */ uint32_t segment0_blkaddr; // start block address of segment 0
+/* 0x4C */ uint32_t cp_blkaddr; // start block address of checkpoint
+/* 0x50 */ uint32_t sit_blkaddr; // start block address of SIT
+/* 0x54 */ uint32_t nat_blkaddr; // start block address of NAT
+/* 0x58 */ uint32_t ssa_blkaddr; // start block address of SSA
+/* 0x5C */ uint32_t main_blkaddr; // start block address of main area
+/* 0x60 */ uint32_t root_ino; // root inode number
+/* 0x64 */ uint32_t node_ino; // node inode number
+/* 0x68 */ uint32_t meta_ino; // meta inode number
+/* 0x6C */ uint8_t uuid[F2FS_UUID_SIZE]; // 128-bit uuid for volume
+/* 0x7C */ uint16_t volume_name[F2FS_LABEL_SIZE]; // volume name
+// /* 0x47C */ uint32_t extension_count; // # of extensions below
+// /* 0x480 */ uint8_t extension_list[64][8]; // extension array
+} PACKED;
+
+
+int FAST_FUNC volume_id_probe_f2fs(struct volume_id *id /*,uint64_t off*/)
+{
+ struct f2fs_super_block *sb;
+
+ // Go for primary super block (ignore second sb)
+ dbg("f2fs: probing at offset 0x%x", F2FS_SB1_OFFSET);
+ sb = volume_id_get_buffer(id, F2FS_SB1_OFFSET, sizeof(*sb));
+
+ if (!sb)
+ return -1;
+
+ if (sb->magic != cpu_to_le32(F2FS_MAGIC))
+ return -1;
+
+ IF_FEATURE_BLKID_TYPE(id->type = "f2fs");
+
+ // For version 1.0 we don't know sb structure and can't set label/uuid
+ if (sb->major_ver == cpu_to_le16(1) && sb->minor_ver == cpu_to_le16(0))
+ return 0;
+
+ volume_id_set_label_unicode16(id, (uint8_t *)sb->volume_name,
+ LE, MIN(F2FS_LABEL_BYTES, VOLUME_ID_LABEL_SIZE));
+
+ volume_id_set_uuid(id, sb->uuid, UUID_DCE);
+
+ return 0;
+}
diff --git a/util-linux/volume_id/fat.c b/util-linux/volume_id/fat.c
index 904fbb2..476d500 100644
--- a/util-linux/volume_id/fat.c
+++ b/util-linux/volume_id/fat.c
@@ -18,6 +18,17 @@
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
+//kbuild:lib-$(CONFIG_FEATURE_VOLUMEID_FAT) += fat.o
+
+//config:
+//config:config FEATURE_VOLUMEID_FAT
+//config: bool "fat filesystem"
+//config: default y
+//config: depends on VOLUMEID
+//config: help
+//config: TODO
+//config:
+
#include "volume_id_internal.h"
/* linux/msdos_fs.h says: */
diff --git a/util-linux/volume_id/get_devname.c b/util-linux/volume_id/get_devname.c
index 665cb9b..648dbc4 100644
--- a/util-linux/volume_id/get_devname.c
+++ b/util-linux/volume_id/get_devname.c
@@ -7,6 +7,11 @@
*
* Licensed under GPLv2 or later, see file LICENSE in this source tree.
*/
+
+//kbuild:lib-$(CONFIG_BLKID) += get_devname.o
+//kbuild:lib-$(CONFIG_FINDFS) += get_devname.o
+//kbuild:lib-$(CONFIG_FEATURE_MOUNT_LABEL) += get_devname.o
+
#include <sys/mount.h> /* BLKGETSIZE64 */
#if !defined(BLKGETSIZE64)
# define BLKGETSIZE64 _IOR(0x12,114,size_t)
@@ -241,10 +246,10 @@ void display_uuid_cache(int scan_devices)
int add_to_uuid_cache(const char *device)
{
- char *uuid = uuid; /* for compiler */
- char *label = label;
+ static char *uuid; /* for compiler */
+ static char *label;
#if ENABLE_FEATURE_BLKID_TYPE
- const char *type = type;
+ static const char *type;
#endif
int fd;
diff --git a/util-linux/volume_id/hfs.c b/util-linux/volume_id/hfs.c
index 3d9704d..8d34aaf 100644
--- a/util-linux/volume_id/hfs.c
+++ b/util-linux/volume_id/hfs.c
@@ -18,6 +18,17 @@
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
+//kbuild:lib-$(CONFIG_FEATURE_VOLUMEID_HFS) += hfs.o
+
+//config:
+//config:config FEATURE_VOLUMEID_HFS
+//config: bool "hfs filesystem"
+//config: default y
+//config: depends on VOLUMEID
+//config: help
+//config: TODO
+//config:
+
#include "volume_id_internal.h"
struct hfs_finder_info{
diff --git a/util-linux/volume_id/iso9660.c b/util-linux/volume_id/iso9660.c
index 1d7693a..3848de4 100644
--- a/util-linux/volume_id/iso9660.c
+++ b/util-linux/volume_id/iso9660.c
@@ -18,6 +18,17 @@
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
+//kbuild:lib-$(CONFIG_FEATURE_VOLUMEID_ISO9660) += iso9660.o
+
+//config:
+//config:config FEATURE_VOLUMEID_ISO9660
+//config: bool "iso9660 filesystem"
+//config: default y
+//config: depends on VOLUMEID
+//config: help
+//config: TODO
+//config:
+
#include "volume_id_internal.h"
#define ISO_SUPERBLOCK_OFFSET 0x8000
diff --git a/util-linux/volume_id/jfs.c b/util-linux/volume_id/jfs.c
index 5333af2..a6eaff4 100644
--- a/util-linux/volume_id/jfs.c
+++ b/util-linux/volume_id/jfs.c
@@ -18,6 +18,17 @@
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
+//kbuild:lib-$(CONFIG_FEATURE_VOLUMEID_JFS) += jfs.o
+
+//config:
+//config:config FEATURE_VOLUMEID_JFS
+//config: bool "jfs filesystem"
+//config: default y
+//config: depends on VOLUMEID
+//config: help
+//config: TODO
+//config:
+
#include "volume_id_internal.h"
struct jfs_super_block {
diff --git a/util-linux/volume_id/linux_raid.c b/util-linux/volume_id/linux_raid.c
index 209eaab..f20823a 100644
--- a/util-linux/volume_id/linux_raid.c
+++ b/util-linux/volume_id/linux_raid.c
@@ -18,6 +18,17 @@
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
+//kbuild:lib-$(CONFIG_FEATURE_VOLUMEID_LINUXRAID) += linux_raid.o
+
+//config:
+//config:config FEATURE_VOLUMEID_LINUXRAID
+//config: bool "linuxraid"
+//config: default y
+//config: depends on VOLUMEID
+//config: help
+//config: TODO
+//config:
+
#include "volume_id_internal.h"
struct mdp_super_block {
diff --git a/util-linux/volume_id/linux_swap.c b/util-linux/volume_id/linux_swap.c
index 1ee534a..39470d4 100644
--- a/util-linux/volume_id/linux_swap.c
+++ b/util-linux/volume_id/linux_swap.c
@@ -18,6 +18,17 @@
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
+//kbuild:lib-$(CONFIG_FEATURE_VOLUMEID_LINUXSWAP) += linux_swap.o
+
+//config:
+//config:config FEATURE_VOLUMEID_LINUXSWAP
+//config: bool "linux swap filesystem"
+//config: default y
+//config: depends on VOLUMEID
+//config: help
+//config: TODO
+//config:
+
#include "volume_id_internal.h"
struct swap_header_v1_2 {
diff --git a/util-linux/volume_id/luks.c b/util-linux/volume_id/luks.c
index f9b3766..42bf876 100644
--- a/util-linux/volume_id/luks.c
+++ b/util-linux/volume_id/luks.c
@@ -18,6 +18,17 @@
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
+//kbuild:lib-$(CONFIG_FEATURE_VOLUMEID_LUKS) += luks.o
+
+//config:
+//config:config FEATURE_VOLUMEID_LUKS
+//config: bool "luks filesystem"
+//config: default y
+//config: depends on VOLUMEID
+//config: help
+//config: TODO
+//config:
+
#include "volume_id_internal.h"
#define LUKS_MAGIC_L 6
diff --git a/util-linux/volume_id/nilfs.c b/util-linux/volume_id/nilfs.c
index b88a9e4..f3a9ef5 100644
--- a/util-linux/volume_id/nilfs.c
+++ b/util-linux/volume_id/nilfs.c
@@ -19,6 +19,26 @@
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
+//kbuild:lib-$(CONFIG_FEATURE_VOLUMEID_NILFS) += nilfs.o
+
+//config:
+//config:config FEATURE_VOLUMEID_NILFS
+//config: bool "nilfs filesystem"
+//config: default y
+//config: depends on VOLUMEID
+//config: help
+//config: NILFS is a New Implementation of a Log-Structured File System (LFS)
+//config: that supports continuous snapshots. This provides features like
+//config: versioning of the entire filesystem, restoration of files that
+//config: were deleted a few minutes ago. NILFS keeps consistency like
+//config: conventional LFS, so it provides quick recovery after system crashes.
+//config:
+//config: The possible use of NILFS includes versioning, tamper detection,
+//config: SOX compliance logging, and so forth. It can serve as an alternative
+//config: filesystem for Linux desktop environment, or as a basis of advanced
+//config: storage appliances.
+//config:
+
#include "volume_id_internal.h"
#define NILFS_UUID_SIZE 16
diff --git a/util-linux/volume_id/ntfs.c b/util-linux/volume_id/ntfs.c
index 7b2612f..46f687a 100644
--- a/util-linux/volume_id/ntfs.c
+++ b/util-linux/volume_id/ntfs.c
@@ -18,6 +18,17 @@
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
+//kbuild:lib-$(CONFIG_FEATURE_VOLUMEID_NTFS) += ntfs.o
+
+//config:
+//config:config FEATURE_VOLUMEID_NTFS
+//config: bool "ntfs filesystem"
+//config: default y
+//config: depends on VOLUMEID
+//config: help
+//config: TODO
+//config:
+
#include "volume_id_internal.h"
struct ntfs_super_block {
@@ -150,7 +161,7 @@ int FAST_FUNC volume_id_probe_ntfs(struct volume_id *id /*,uint64_t off*/)
attr = (struct file_attribute*) &buf[attr_off];
attr_type = le32_to_cpu(attr->type);
- attr_len = le16_to_cpu(attr->len);
+ attr_len = le32_to_cpu(attr->len);
val_off = le16_to_cpu(attr->value_offset);
val_len = le32_to_cpu(attr->value_len);
attr_off += attr_len;
diff --git a/util-linux/volume_id/ocfs2.c b/util-linux/volume_id/ocfs2.c
index fcdb151..415e0bf 100644
--- a/util-linux/volume_id/ocfs2.c
+++ b/util-linux/volume_id/ocfs2.c
@@ -18,6 +18,17 @@
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
+//kbuild:lib-$(CONFIG_FEATURE_VOLUMEID_OCFS2) += ocfs2.o
+
+//config:
+//config:config FEATURE_VOLUMEID_OCFS2
+//config: bool "ocfs2 filesystem"
+//config: default y
+//config: depends on VOLUMEID
+//config: help
+//config: TODO
+//config:
+
#include "volume_id_internal.h"
/* All these values are taken from ocfs2-tools's ocfs2_fs.h */
diff --git a/util-linux/volume_id/reiserfs.c b/util-linux/volume_id/reiserfs.c
index 67b4a18..24979fb 100644
--- a/util-linux/volume_id/reiserfs.c
+++ b/util-linux/volume_id/reiserfs.c
@@ -19,6 +19,17 @@
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
+//kbuild:lib-$(CONFIG_FEATURE_VOLUMEID_REISERFS) += reiserfs.o
+
+//config:
+//config:config FEATURE_VOLUMEID_REISERFS
+//config: bool "Reiser filesystem"
+//config: default y
+//config: depends on VOLUMEID
+//config: help
+//config: TODO
+//config:
+
#include "volume_id_internal.h"
struct reiserfs_super_block {
diff --git a/util-linux/volume_id/romfs.c b/util-linux/volume_id/romfs.c
index 15653be..4754fdb 100644
--- a/util-linux/volume_id/romfs.c
+++ b/util-linux/volume_id/romfs.c
@@ -18,6 +18,17 @@
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
+//kbuild:lib-$(CONFIG_FEATURE_VOLUMEID_ROMFS) += romfs.o
+
+//config:
+//config:config FEATURE_VOLUMEID_ROMFS
+//config: bool "romfs filesystem"
+//config: default y
+//config: depends on VOLUMEID
+//config: help
+//config: TODO
+//config:
+
#include "volume_id_internal.h"
struct romfs_super {
diff --git a/util-linux/volume_id/squashfs.c b/util-linux/volume_id/squashfs.c
index c5b4f9c..079b6cc 100644
--- a/util-linux/volume_id/squashfs.c
+++ b/util-linux/volume_id/squashfs.c
@@ -8,6 +8,18 @@
//kbuild:lib-$(CONFIG_FEATURE_VOLUMEID_SQUASHFS) += squashfs.o
+//config:
+//config:config FEATURE_VOLUMEID_SQUASHFS
+//config: bool "SquashFS filesystem"
+//config: default y
+//config: depends on VOLUMEID && FEATURE_BLKID_TYPE
+//config: help
+//config: Squashfs is a compressed read-only filesystem for Linux. Squashfs is
+//config: intended for general read-only filesystem use and in constrained block
+//config: device/memory systems (e.g. embedded systems) where low overhead is
+//config: needed.
+//config:
+
#include "volume_id_internal.h"
struct squashfs_superblock {
diff --git a/util-linux/volume_id/sysv.c b/util-linux/volume_id/sysv.c
index 6eb9646..7b4b536 100644
--- a/util-linux/volume_id/sysv.c
+++ b/util-linux/volume_id/sysv.c
@@ -18,6 +18,17 @@
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
+//kbuild:lib-$(CONFIG_FEATURE_VOLUMEID_SYSV) += sysv.o
+
+//config:
+//config:config FEATURE_VOLUMEID_SYSV
+//config: bool "sysv filesystem"
+//config: default y
+//config: depends on VOLUMEID
+//config: help
+//config: TODO
+//config:
+
#include "volume_id_internal.h"
#define SYSV_NICINOD 100
diff --git a/util-linux/volume_id/udf.c b/util-linux/volume_id/udf.c
index d3747fb..9214545 100644
--- a/util-linux/volume_id/udf.c
+++ b/util-linux/volume_id/udf.c
@@ -18,6 +18,17 @@
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
+//kbuild:lib-$(CONFIG_FEATURE_VOLUMEID_UDF) += udf.o
+
+//config:
+//config:config FEATURE_VOLUMEID_UDF
+//config: bool "udf filesystem"
+//config: default y
+//config: depends on VOLUMEID
+//config: help
+//config: TODO
+//config:
+
#include "volume_id_internal.h"
struct volume_descriptor {
diff --git a/util-linux/volume_id/unused_highpoint.c b/util-linux/volume_id/unused_highpoint.c
index 17b7b32..7231a1d 100644
--- a/util-linux/volume_id/unused_highpoint.c
+++ b/util-linux/volume_id/unused_highpoint.c
@@ -18,6 +18,17 @@
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
+//kbuild:### lib-$(CONFIG_FEATURE_VOLUMEID_HIGHPOINTRAID) += highpoint.o
+
+//config:
+//config:### config FEATURE_VOLUMEID_HIGHPOINTRAID
+//config:### bool "highpoint raid"
+//config:### default y
+//config:### depends on VOLUMEID
+//config:### help
+//config:### TODO
+//config:
+
#include "volume_id_internal.h"
struct hpt37x_meta {
diff --git a/util-linux/volume_id/unused_hpfs.c b/util-linux/volume_id/unused_hpfs.c
index 4429524..a87c89f 100644
--- a/util-linux/volume_id/unused_hpfs.c
+++ b/util-linux/volume_id/unused_hpfs.c
@@ -18,6 +18,17 @@
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
+//kbuild:### lib-$(CONFIG_FEATURE_VOLUMEID_HPFS) += hpfs.o
+
+//config:
+//config:### config FEATURE_VOLUMEID_HPFS
+//config:### bool "hpfs filesystem"
+//config:### default y
+//config:### depends on VOLUMEID
+//config:### help
+//config:### TODO
+//config:
+
#include "volume_id_internal.h"
struct hpfs_super {
diff --git a/util-linux/volume_id/unused_isw_raid.c b/util-linux/volume_id/unused_isw_raid.c
index 7ab47b3..851bd2f 100644
--- a/util-linux/volume_id/unused_isw_raid.c
+++ b/util-linux/volume_id/unused_isw_raid.c
@@ -18,6 +18,17 @@
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
+//kbuild:### lib-$(CONFIG_FEATURE_VOLUMEID_ISWRAID) += isw_raid.o
+
+//config:
+//config:### config FEATURE_VOLUMEID_ISWRAID
+//config:### bool "intel raid"
+//config:### default y
+//config:### depends on VOLUMEID
+//config:### help
+//config:### TODO
+//config:
+
#include "volume_id_internal.h"
struct isw_meta {
diff --git a/util-linux/volume_id/unused_lsi_raid.c b/util-linux/volume_id/unused_lsi_raid.c
index e6cc8ed..52d68de 100644
--- a/util-linux/volume_id/unused_lsi_raid.c
+++ b/util-linux/volume_id/unused_lsi_raid.c
@@ -18,6 +18,17 @@
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
+//kbuild:### lib-$(CONFIG_FEATURE_VOLUMEID_LSIRAID) += lsi_raid.o
+
+//config:
+//config:### config FEATURE_VOLUMEID_LSIRAID
+//config:### bool "lsi raid"
+//config:### default y
+//config:### depends on VOLUMEID
+//config:### help
+//config:### TODO
+//config:
+
#include "volume_id_internal.h"
struct lsi_meta {
diff --git a/util-linux/volume_id/unused_lvm.c b/util-linux/volume_id/unused_lvm.c
index 2206498..08fa052 100644
--- a/util-linux/volume_id/unused_lvm.c
+++ b/util-linux/volume_id/unused_lvm.c
@@ -18,6 +18,17 @@
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
+//kbuild:### lib-$(CONFIG_FEATURE_VOLUMEID_LVM) += lvm.o
+
+//config:
+//config:### config FEATURE_VOLUMEID_LVM
+//config:### bool "lvm"
+//config:### default y
+//config:### depends on VOLUMEID
+//config:### help
+//config:### TODO
+//config:
+
#include "volume_id_internal.h"
struct lvm1_super_block {
diff --git a/util-linux/volume_id/unused_mac.c b/util-linux/volume_id/unused_mac.c
index e8deb97..a1a53d1 100644
--- a/util-linux/volume_id/unused_mac.c
+++ b/util-linux/volume_id/unused_mac.c
@@ -18,6 +18,17 @@
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
+//kbuild:### lib-$(CONFIG_FEATURE_VOLUMEID_MAC) += mac.o
+
+//config:
+//config:### config FEATURE_VOLUMEID_MAC
+//config:### bool "mac filesystem"
+//config:### default y
+//config:### depends on VOLUMEID
+//config:### help
+//config:### TODO
+//config:
+
#include "volume_id_internal.h"
struct mac_driver_desc {
diff --git a/util-linux/volume_id/unused_minix.c b/util-linux/volume_id/unused_minix.c
index a3e1077..50afd5c 100644
--- a/util-linux/volume_id/unused_minix.c
+++ b/util-linux/volume_id/unused_minix.c
@@ -18,6 +18,17 @@
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
+//kbuild:### lib-$(CONFIG_FEATURE_VOLUMEID_MINIX) += minix.o
+
+//config:
+//config:### config FEATURE_VOLUMEID_MINIX
+//config:### bool "minix filesystem"
+//config:### default y
+//config:### depends on VOLUMEID
+//config:### help
+//config:### TODO
+//config:
+
#include "volume_id_internal.h"
struct minix_super_block {
diff --git a/util-linux/volume_id/unused_msdos.c b/util-linux/volume_id/unused_msdos.c
index 2e8cb19..5ebaa3e 100644
--- a/util-linux/volume_id/unused_msdos.c
+++ b/util-linux/volume_id/unused_msdos.c
@@ -18,6 +18,17 @@
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
+//kbuild:### lib-$(CONFIG_FEATURE_VOLUMEID_MSDOS) += msdos.o
+
+//config:
+//config:### config FEATURE_VOLUMEID_MSDOS
+//config:### bool "msdos filesystem"
+//config:### default y
+//config:### depends on VOLUMEID
+//config:### help
+//config:### TODO
+//config:
+
#include "volume_id_internal.h"
struct msdos_partition_entry {
@@ -165,7 +176,7 @@ int FAST_FUNC volume_id_probe_msdos_part_table(struct volume_id *id, uint64_t of
if (id->partition_count < 4)
id->partition_count = 4;
- p = &id->partitions[id->partition_count];
+// p = &id->partitions[id->partition_count];
// if (is_raid(part[i].sys_ind))
// volume_id_set_usage_part(p, VOLUME_ID_RAID);
diff --git a/util-linux/volume_id/unused_nvidia_raid.c b/util-linux/volume_id/unused_nvidia_raid.c
index 9e84729..d99a108 100644
--- a/util-linux/volume_id/unused_nvidia_raid.c
+++ b/util-linux/volume_id/unused_nvidia_raid.c
@@ -18,6 +18,17 @@
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
+//kbuild:### lib-$(CONFIG_FEATURE_VOLUMEID_NVIDIARAID) += nvidia_raid.o
+
+//config:
+//config:### config FEATURE_VOLUMEID_NVIDIARAID
+//config:### bool "nvidia raid"
+//config:### default y
+//config:### depends on VOLUMEID
+//config:### help
+//config:### TODO
+//config:
+
#include "volume_id_internal.h"
struct nvidia_meta {
diff --git a/util-linux/volume_id/unused_promise_raid.c b/util-linux/volume_id/unused_promise_raid.c
index 0b0d006..cebebe3 100644
--- a/util-linux/volume_id/unused_promise_raid.c
+++ b/util-linux/volume_id/unused_promise_raid.c
@@ -18,6 +18,17 @@
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
+//kbuild:### lib-$(CONFIG_FEATURE_VOLUMEID_PROMISERAID) += promise_raid.o
+
+//config:
+//config:### config FEATURE_VOLUMEID_PROMISERAID
+//config:### bool "promise raid"
+//config:### default y
+//config:### depends on VOLUMEID
+//config:### help
+//config:### TODO
+//config:
+
#include "volume_id_internal.h"
struct promise_meta {
diff --git a/util-linux/volume_id/unused_silicon_raid.c b/util-linux/volume_id/unused_silicon_raid.c
index 878b881..40c8faa 100644
--- a/util-linux/volume_id/unused_silicon_raid.c
+++ b/util-linux/volume_id/unused_silicon_raid.c
@@ -18,6 +18,17 @@
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
+//kbuild:### lib-$(CONFIG_FEATURE_VOLUMEID_SILICONRAID) += silicon_raid.o
+
+//config:
+//config:### config FEATURE_VOLUMEID_SILICONRAID
+//config:### bool "silicon raid"
+//config:### default y
+//config:### depends on VOLUMEID
+//config:### help
+//config:### TODO
+//config:
+
#include "volume_id_internal.h"
struct silicon_meta {
diff --git a/util-linux/volume_id/unused_ufs.c b/util-linux/volume_id/unused_ufs.c
index 9f925d9..d33c10f 100644
--- a/util-linux/volume_id/unused_ufs.c
+++ b/util-linux/volume_id/unused_ufs.c
@@ -18,6 +18,17 @@
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
+//kbuild:### lib-$(CONFIG_FEATURE_VOLUMEID_UFS) += ufs.o
+
+//config:
+//config:### config FEATURE_VOLUMEID_UFS
+//config:### bool "ufs filesystem"
+//config:### default y
+//config:### depends on VOLUMEID
+//config:### help
+//config:### TODO
+//config:
+
#include "volume_id_internal.h"
struct ufs_super_block {
diff --git a/util-linux/volume_id/unused_via_raid.c b/util-linux/volume_id/unused_via_raid.c
index a11eec1..258f93a 100644
--- a/util-linux/volume_id/unused_via_raid.c
+++ b/util-linux/volume_id/unused_via_raid.c
@@ -18,6 +18,17 @@
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
+//kbuild:### lib-$(CONFIG_FEATURE_VOLUMEID_VIARAID) += via_raid.o
+
+//config:
+//config:### config FEATURE_VOLUMEID_VIARAID
+//config:### bool "via raid"
+//config:### default y
+//config:### depends on VOLUMEID
+//config:### help
+//config:### TODO
+//config:
+
#include "volume_id_internal.h"
struct via_meta {
diff --git a/util-linux/volume_id/volume_id.c b/util-linux/volume_id/volume_id.c
index e928af5..66690c2 100644
--- a/util-linux/volume_id/volume_id.c
+++ b/util-linux/volume_id/volume_id.c
@@ -18,6 +18,8 @@
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
+//kbuild:lib-$(CONFIG_VOLUMEID) += volume_id.o util.o
+
#include "volume_id_internal.h"
@@ -136,6 +138,9 @@ static const probe_fptr fs2[] = {
#if ENABLE_FEATURE_VOLUMEID_UFS
volume_id_probe_ufs,
#endif
+#if ENABLE_FEATURE_VOLUMEID_F2FS
+ volume_id_probe_f2fs,
+#endif
#if ENABLE_FEATURE_VOLUMEID_NILFS
volume_id_probe_nilfs,
#endif
diff --git a/util-linux/volume_id/volume_id_internal.h b/util-linux/volume_id/volume_id_internal.h
index 3f02bd5..6e2dbd7 100644
--- a/util-linux/volume_id/volume_id_internal.h
+++ b/util-linux/volume_id/volume_id_internal.h
@@ -96,44 +96,24 @@ void FAST_FUNC free_volume_id(struct volume_id *id);
/* size of seek buffer, FAT cluster is 32k max */
#define SEEK_BUFFER_SIZE 0x10000
-#define bswap16(x) (uint16_t) ( \
- (((uint16_t)(x) & 0x00ffu) << 8) | \
- (((uint16_t)(x) & 0xff00u) >> 8))
-
-#define bswap32(x) (uint32_t) ( \
- (((uint32_t)(x) & 0xff000000u) >> 24) | \
- (((uint32_t)(x) & 0x00ff0000u) >> 8) | \
- (((uint32_t)(x) & 0x0000ff00u) << 8) | \
- (((uint32_t)(x) & 0x000000ffu) << 24))
-
-#define bswap64(x) (uint64_t) ( \
- (((uint64_t)(x) & 0xff00000000000000ull) >> 56) | \
- (((uint64_t)(x) & 0x00ff000000000000ull) >> 40) | \
- (((uint64_t)(x) & 0x0000ff0000000000ull) >> 24) | \
- (((uint64_t)(x) & 0x000000ff00000000ull) >> 8) | \
- (((uint64_t)(x) & 0x00000000ff000000ull) << 8) | \
- (((uint64_t)(x) & 0x0000000000ff0000ull) << 24) | \
- (((uint64_t)(x) & 0x000000000000ff00ull) << 40) | \
- (((uint64_t)(x) & 0x00000000000000ffull) << 56))
-
#if BB_LITTLE_ENDIAN
-#define le16_to_cpu(x) (x)
-#define le32_to_cpu(x) (x)
-#define le64_to_cpu(x) (x)
-#define be16_to_cpu(x) bswap16(x)
-#define be32_to_cpu(x) bswap32(x)
-#define cpu_to_le16(x) (x)
-#define cpu_to_le32(x) (x)
-#define cpu_to_be32(x) bswap32(x)
+# define le16_to_cpu(x) (uint16_t)(x)
+# define le32_to_cpu(x) (uint32_t)(x)
+# define le64_to_cpu(x) (uint64_t)(x)
+# define be16_to_cpu(x) (uint16_t)(bswap_16(x))
+# define be32_to_cpu(x) (uint32_t)(bswap_32(x))
+# define cpu_to_le16(x) (uint16_t)(x)
+# define cpu_to_le32(x) (uint32_t)(x)
+# define cpu_to_be32(x) (uint32_t)(bswap_32(x))
#else
-#define le16_to_cpu(x) bswap16(x)
-#define le32_to_cpu(x) bswap32(x)
-#define le64_to_cpu(x) bswap64(x)
-#define be16_to_cpu(x) (x)
-#define be32_to_cpu(x) (x)
-#define cpu_to_le16(x) bswap16(x)
-#define cpu_to_le32(x) bswap32(x)
-#define cpu_to_be32(x) (x)
+# define le16_to_cpu(x) (uint16_t)(bswap_16(x))
+# define le32_to_cpu(x) (uint32_t)(bswap_32(x))
+# define le64_to_cpu(x) (uint64_t)(bb_bswap_64(x))
+# define be16_to_cpu(x) (uint16_t)(x)
+# define be32_to_cpu(x) (uint32_t)(x)
+# define cpu_to_le16(x) (uint16_t)(bswap_16(x))
+# define cpu_to_le32(x) (uint32_t)(bswap_32(x))
+# define cpu_to_be32(x) (uint32_t)(x)
#endif
/* volume_id_set_uuid(id,buf,fmt) assumes size of uuid buf
@@ -215,6 +195,8 @@ int FAST_FUNC volume_id_probe_luks(struct volume_id *id /*,uint64_t off*/);
//int FAST_FUNC volume_id_probe_msdos_part_table(struct volume_id *id /*,uint64_t off*/);
+int FAST_FUNC volume_id_probe_f2fs(struct volume_id *id /*,uint64_t off*/);
+
int FAST_FUNC volume_id_probe_nilfs(struct volume_id *id /*,uint64_t off*/);
int FAST_FUNC volume_id_probe_ntfs(struct volume_id *id /*,uint64_t off*/);
diff --git a/util-linux/volume_id/xfs.c b/util-linux/volume_id/xfs.c
index 8474602..5eefc20 100644
--- a/util-linux/volume_id/xfs.c
+++ b/util-linux/volume_id/xfs.c
@@ -18,6 +18,17 @@
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
+//kbuild:lib-$(CONFIG_FEATURE_VOLUMEID_XFS) += xfs.o
+
+//config:
+//config:config FEATURE_VOLUMEID_XFS
+//config: bool "xfs filesystem"
+//config: default y
+//config: depends on VOLUMEID
+//config: help
+//config: TODO
+//config:
+
#include "volume_id_internal.h"
struct xfs_super_block {