author | Frank 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) |
commit | a064a4c5b9d9df3bbee59062941c17e631942bed (patch) | |
tree | 399e5ce669c37e4cbd60ea9be1c6c001ac5d6ec9 | |
parent | d85fc7a8267a445d41b85fde521157e09d08a8f9 (diff) | |
parent | 60283c6026060e3793a32439c78553feb7eb93f3 (diff) | |
download | busybox-a064a4c5b9d9df3bbee59062941c17e631942bed.zip busybox-a064a4c5b9d9df3bbee59062941c17e631942bed.tar.gz busybox-a064a4c5b9d9df3bbee59062941c17e631942bed.tar.bz2 |
merge from cm-12.0 and fix conflicts
Change-Id: Ie9f89a570373b5384281b1e82500369de4caa12a
362 files changed, 7782 insertions, 22991 deletions
@@ -13,7 +13,7 @@ Config.in # Never ignore these # !.gitignore -!.config-* +!.config* # # Normal output @@ -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 @@ -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. @@ -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 @@ -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 ---------------- @@ -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 ? ®s : (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(¤t_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, ¶m->local_port, rem_addr, ¶m->rem_port, ¶m->state, ¶m->txq, ¶m->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" @@ -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, ¶m); - 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 { |