.config:329:warning: trying to assign nonexistent symbol FEATURE_TOUCH_NODEREF
.config:478:warning: trying to reassign symbol FEATURE_FIND_INUM
archival/libarchive/data_extract_all.c: In function ‘data_extract_all’:
archival/libarchive/data_extract_all.c:235:25: warning: ignoring return value of ‘chown’ declared with attribute ‘warn_unused_result’ [-Wunused-result]
  235 |                         chown(dst_name, uid, gid);
      |                         ^~~~~~~~~~~~~~~~~~~~~~~~~
console-tools/dumpkmap.c: In function ‘dumpkmap_main’:
console-tools/dumpkmap.c:67:9: warning: ignoring return value of ‘write’ declared with attribute ‘warn_unused_result’ [-Wunused-result]
   67 |         write(STDOUT_FILENO, flags, 7 + MAX_NR_KEYMAPS);
      |         ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
console-tools/dumpkmap.c:79:41: warning: ignoring return value of ‘write’ declared with attribute ‘warn_unused_result’ [-Wunused-result]
   79 |                                         write(STDOUT_FILENO, &ke.kb_value, 2);
      |                                         ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
console-tools/loadfont.c: In function ‘setfont_main’:
console-tools/loadfont.c:445:25: warning: ignoring return value of ‘chdir’ declared with attribute ‘warn_unused_result’ [-Wunused-result]
  445 |                         chdir(CONFIG_DEFAULT_SETFONT_DIR "/consolefonts");
      |                         ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
console-tools/loadfont.c:463:33: warning: ignoring return value of ‘chdir’ declared with attribute ‘warn_unused_result’ [-Wunused-result]
  463 |                                 chdir(CONFIG_DEFAULT_SETFONT_DIR "/consoletrans");
      |                                 ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
console-tools/resize.c: In function ‘resize_main’:
console-tools/resize.c:100:9: warning: ignoring return value of ‘scanf’ declared with attribute ‘warn_unused_result’ [-Wunused-result]
  100 |         scanf(ESC"[%hu;%huR", &w.ws_row, &w.ws_col);
      |         ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
coreutils/dos2unix.c: In function ‘convert’:
coreutils/dos2unix.c:83:17: warning: ignoring return value of ‘fchown’ declared with attribute ‘warn_unused_result’ [-Wunused-result]
   83 |                 fchown(fd, st.st_uid, st.st_gid);
      |                 ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
editors/ed.c: In function ‘printLines’:
editors/ed.c:545:25: warning: ignoring return value of ‘write’ declared with attribute ‘warn_unused_result’ [-Wunused-result]
  545 |                         write(STDOUT_FILENO, lp->data, lp->len);
      |                         ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
editors/sed.c: In function ‘sed_main’:
editors/sed.c:1648:25: warning: ignoring return value of ‘fchown’ declared with attribute ‘warn_unused_result’ [-Wunused-result]
 1648 |                         fchown(nonstdoutfd, statbuf.st_uid, statbuf.st_gid);
      |                         ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
editors/vi.c: In function ‘file_write’:
editors/vi.c:2373:9: warning: ignoring return value of ‘ftruncate’ declared with attribute ‘warn_unused_result’ [-Wunused-result]
 2373 |         ftruncate(fd, charcnt);
      |         ^~~~~~~~~~~~~~~~~~~~~~
libbb/appletlib.c: In function ‘check_suid’:
libbb/appletlib.c:637:17: warning: ignoring return value of ‘setgid’ declared with attribute ‘warn_unused_result’ [-Wunused-result]
  637 |                 setgid(rgid);
      |                 ^~~~~~~~~~~~
libbb/appletlib.c:638:17: warning: ignoring return value of ‘setuid’ declared with attribute ‘warn_unused_result’ [-Wunused-result]
  638 |                 setuid(ruid);
      |                 ^~~~~~~~~~~~
mailutils/makemime.c: In function ‘makemime_main’:
mailutils/makemime.c:204:17: warning: ignoring return value of ‘freopen’ declared with attribute ‘warn_unused_result’ [-Wunused-result]
  204 |                 freopen(opt_output, "w", stdout);
      |                 ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
miscutils/crontab.c: In function ‘crontab_main’:
miscutils/crontab.c:161:17: warning: ignoring return value of ‘fchown’ declared with attribute ‘warn_unused_result’ [-Wunused-result]
  161 |                 fchown(src_fd, pas->pw_uid, pas->pw_gid);
      |                 ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
miscutils/i2c_tools.c: In function ‘list_i2c_busses_and_exit’:
miscutils/i2c_tools.c:1152:46: warning: ‘%s’ directive output may be truncated writing up to 255 bytes into a region of size 236 [-Wformat-truncation=]
 1152 |                 snprintf(path, NAME_MAX, "%s/%s/name",
      |                                              ^~
In file included from /usr/include/stdio.h:894,
                 from include/libbb.h:31,
                 from miscutils/i2c_tools.c:66:
In function ‘snprintf’,
    inlined from ‘list_i2c_busses_and_exit’ at miscutils/i2c_tools.c:1152:3:
/usr/include/bits/stdio2.h:71:10: note: ‘__builtin___snprintf_chk’ output between 25 and 280 bytes into a destination of size 255
   71 |   return __builtin___snprintf_chk (__s, __n, __USE_FORTIFY_LEVEL - 1,
      |          ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   72 |                                    __glibc_objsize (__s), __fmt,
      |                                    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   73 |                                    __va_arg_pack ());
      |                                    ~~~~~~~~~~~~~~~~~
miscutils/i2c_tools.c: In function ‘list_i2c_busses_and_exit’:
miscutils/i2c_tools.c:1157:38: warning: ‘%s’ directive output may be truncated writing up to 255 bytes into a region of size 236 [-Wformat-truncation=]
 1157 |                                  "%s/%s/device/name",
      |                                      ^~
In function ‘snprintf’,
    inlined from ‘list_i2c_busses_and_exit’ at miscutils/i2c_tools.c:1156:4:
/usr/include/bits/stdio2.h:71:10: note: ‘__builtin___snprintf_chk’ output between 32 and 287 bytes into a destination of size 255
   71 |   return __builtin___snprintf_chk (__s, __n, __USE_FORTIFY_LEVEL - 1,
      |          ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   72 |                                    __glibc_objsize (__s), __fmt,
      |                                    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   73 |                                    __va_arg_pack ());
      |                                    ~~~~~~~~~~~~~~~~~
miscutils/i2c_tools.c: In function ‘list_i2c_busses_and_exit’:
miscutils/i2c_tools.c:1165:38: warning: ‘%s’ directive output may be truncated writing up to 255 bytes into a region of size 236 [-Wformat-truncation=]
 1165 |                                  "%s/%s/device/name",
      |                                      ^~
In function ‘snprintf’,
    inlined from ‘list_i2c_busses_and_exit’ at miscutils/i2c_tools.c:1164:4:
/usr/include/bits/stdio2.h:71:10: note: ‘__builtin___snprintf_chk’ output between 32 and 287 bytes into a destination of size 255
   71 |   return __builtin___snprintf_chk (__s, __n, __USE_FORTIFY_LEVEL - 1,
      |          ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   72 |                                    __glibc_objsize (__s), __fmt,
      |                                    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   73 |                                    __va_arg_pack ());
      |                                    ~~~~~~~~~~~~~~~~~
miscutils/i2c_tools.c: In function ‘list_i2c_busses_and_exit’:
miscutils/i2c_tools.c:1177:54: warning: ‘%s’ directive output may be truncated writing up to 255 bytes into a region of size 236 [-Wformat-truncation=]
 1177 |                                                  "%s/%s/device/%s/name",
      |                                                      ^~
In function ‘snprintf’,
    inlined from ‘list_i2c_busses_and_exit’ at miscutils/i2c_tools.c:1176:6:
/usr/include/bits/stdio2.h:71:10: note: ‘__builtin___snprintf_chk’ output between 33 and 543 bytes into a destination of size 255
   71 |   return __builtin___snprintf_chk (__s, __n, __USE_FORTIFY_LEVEL - 1,
      |          ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   72 |                                    __glibc_objsize (__s), __fmt,
      |                                    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   73 |                                    __va_arg_pack ());
      |                                    ~~~~~~~~~~~~~~~~~
coreutils/shred.c: In function ‘shred_main’:
coreutils/shred.c:104:25: warning: ignoring return value of ‘ftruncate’ declared with attribute ‘warn_unused_result’ [-Wunused-result]
  104 |                         ftruncate(fd, 0);
      |                         ^~~~~~~~~~~~~~~~
miscutils/man.c: In function ‘run_pipe’:
miscutils/man.c:160:9: warning: ignoring return value of ‘system’ declared with attribute ‘warn_unused_result’ [-Wunused-result]
  160 |         system(cmd);
      |         ^~~~~~~~~~~
miscutils/microcom.c: In function ‘microcom_main’:
miscutils/microcom.c:160:25: warning: ignoring return value of ‘write’ declared with attribute ‘warn_unused_result’ [-Wunused-result]
  160 |                         write(sfd, &c, 1);
      |                         ^~~~~~~~~~~~~~~~~
modutils/modutils.c: In function ‘filename2modname’:
modutils/modutils.c:115:1: warning: function may return address of local variable [-Wreturn-local-addr]
  115 | }
      | ^
modutils/modutils.c:94:14: note: declared here
   94 |         char local_modname[MODULE_NAME_LEN];
      |              ^~~~~~~~~~~~~
In file included from networking/arp.c:43:
networking/arp.c: In function ‘arp_show’:
include/libbb.h:236:28: warning: ignoring return value of ‘fgets_unlocked’ declared with attribute ‘warn_unused_result’ [-Wunused-result]
  236 | # define fgets(s,n,stream) fgets_unlocked(s,n,stream)
      |                            ^~~~~~~~~~~~~~~~~~~~~~~~~~
networking/arp.c:430:9: note: in expansion of macro ‘fgets’
  430 |         fgets(line, sizeof(line), fp);
      |         ^~~~~
networking/ftpd.c: In function ‘popen_ls’:
networking/ftpd.c:718:17: warning: ignoring return value of ‘dup’ declared with attribute ‘warn_unused_result’ [-Wunused-result]
  718 |                 dup(STDOUT_FILENO); /* copy will become STDIN_FILENO */
      |                 ^~~~~~~~~~~~~~~~~~
miscutils/watchdog.c: In function ‘watchdog_main’:
miscutils/watchdog.c:161:17: warning: ignoring return value of ‘write’ declared with attribute ‘warn_unused_result’ [-Wunused-result]
  161 |                 write(3, "", 1); /* write zero byte */
      |                 ^~~~~~~~~~~~~~~
miscutils/watchdog.c: In function ‘shutdown_watchdog’:
miscutils/watchdog.c:71:9: warning: ignoring return value of ‘write’ declared with attribute ‘warn_unused_result’ [-Wunused-result]
   71 |         write(3, &V, 1);  /* Magic, see watchdog-api.txt in kernel */
      |         ^~~~~~~~~~~~~~~
In file included from networking/interface.c:33:
networking/interface.c: In function ‘if_readlist_proc’:
include/libbb.h:236:28: warning: ignoring return value of ‘fgets_unlocked’ declared with attribute ‘warn_unused_result’ [-Wunused-result]
  236 | # define fgets(s,n,stream) fgets_unlocked(s,n,stream)
      |                            ^~~~~~~~~~~~~~~~~~~~~~~~~~
networking/interface.c:554:9: note: in expansion of macro ‘fgets’
  554 |         fgets(buf, sizeof buf, fh);     /* eat line */
      |         ^~~~~
include/libbb.h:236:28: warning: ignoring return value of ‘fgets_unlocked’ declared with attribute ‘warn_unused_result’ [-Wunused-result]
  236 | # define fgets(s,n,stream) fgets_unlocked(s,n,stream)
      |                            ^~~~~~~~~~~~~~~~~~~~~~~~~~
networking/interface.c:555:9: note: in expansion of macro ‘fgets’
  555 |         fgets(buf, sizeof buf, fh);
      |         ^~~~~
networking/nbd-client.c: In function ‘nbdclient_main’:
networking/nbd-client.c:281:25: warning: ignoring return value of ‘daemon’ declared with attribute ‘warn_unused_result’ [-Wunused-result]
  281 |                         daemon(0, 0);
      |                         ^~~~~~~~~~~~
networking/nslookup.c: In function ‘send_queries’:
networking/nslookup.c:622:33: warning: ignoring return value of ‘write’ declared with attribute ‘warn_unused_result’ [-Wunused-result]
  622 |                                 write(pfd.fd, G.query[qn].query, G.query[qn].qlen);
      |                                 ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
networking/slattach.c: In function ‘slattach_main’:
networking/slattach.c:225:17: warning: ignoring return value of ‘system’ declared with attribute ‘warn_unused_result’ [-Wunused-result]
  225 |                 system(extcmd);
      |                 ^~~~~~~~~~~~~~
networking/tc.c:179:13: warning: ‘print_rate’ defined but not used [-Wunused-function]
  179 | static void print_rate(char *buf, int len, uint32_t rate)
      |             ^~~~~~~~~~
In file included from networking/libiproute/ip_common.h:5,
                 from networking/libiproute/iptunnel.c:64:
networking/libiproute/iptunnel.c: In function ‘do_tunnels_list’:
include/libbb.h:236:28: warning: ignoring return value of ‘fgets_unlocked’ declared with attribute ‘warn_unused_result’ [-Wunused-result]
  236 | # define fgets(s,n,stream) fgets_unlocked(s,n,stream)
      |                            ^~~~~~~~~~~~~~~~~~~~~~~~~~
networking/libiproute/iptunnel.c:477:9: note: in expansion of macro ‘fgets’
  477 |         fgets(buf, sizeof(buf), fp);
      |         ^~~~~
include/libbb.h:236:28: warning: ignoring return value of ‘fgets_unlocked’ declared with attribute ‘warn_unused_result’ [-Wunused-result]
  236 | # define fgets(s,n,stream) fgets_unlocked(s,n,stream)
      |                            ^~~~~~~~~~~~~~~~~~~~~~~~~~
networking/libiproute/iptunnel.c:478:9: note: in expansion of macro ‘fgets’
  478 |         fgets(buf, sizeof(buf), fp);
      |         ^~~~~
networking/tftp.c: In function ‘tftpd_main’:
networking/tftp.c:886:15: warning: ‘local_file’ is used uninitialized [-Wuninitialized]
  886 |         char *local_file = local_file;
      |               ^~~~~~~~~~
networking/tftp.c:886:15: note: ‘local_file’ was declared here
  886 |         char *local_file = local_file;
      |               ^~~~~~~~~~
printutils/lpr.c: In function ‘lpqr_main’:
printutils/lpr.c:272:17: warning: ignoring return value of ‘write’ declared with attribute ‘warn_unused_result’ [-Wunused-result]
  272 |                 write(fd, "", 1); // send ACK
      |                 ^~~~~~~~~~~~~~~~
runit/runsv.c: In function ‘s_chld_term’:
runit/runsv.c:161:9: warning: ignoring return value of ‘write’ declared with attribute ‘warn_unused_result’ [-Wunused-result]
  161 |         write(selfpipe.wr, "", 1);
      |         ^~~~~~~~~~~~~~~~~~~~~~~~~
runit/runsv.c: In function ‘update_status’:
runit/runsv.c:203:25: warning: ignoring return value of ‘write’ declared with attribute ‘warn_unused_result’ [-Wunused-result]
  203 |                         write(fd, spid, size);
      |                         ^~~~~~~~~~~~~~~~~~~~~
runit/runsv.c:244:17: warning: ignoring return value of ‘write’ declared with attribute ‘warn_unused_result’ [-Wunused-result]
  244 |                 write(fd, stat_buf, p - stat_buf);
      |                 ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
networking/wget.c: In function ‘retrieve_file_data’:
networking/wget.c:1085:33: warning: ignoring return value of ‘ftruncate’ declared with attribute ‘warn_unused_result’ [-Wunused-result]
 1085 |                                 ftruncate(G.output_fd, pos);
      |                                 ^~~~~~~~~~~~~~~~~~~~~~~~~~~
shell/ash.c: In function ‘preadfd’:
shell/ash.c:10839:25: warning: ignoring return value of ‘write’ declared with attribute ‘warn_unused_result’ [-Wunused-result]
10839 |                         write(STDOUT_FILENO, "^C\n", 3);
      |                         ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
shell/ash.c:10843:25: warning: ignoring return value of ‘write’ declared with attribute ‘warn_unused_result’ [-Wunused-result]
10843 |                         write(STDOUT_FILENO, "^C\n", 3);
      |                         ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
shell/ash.c:10865:41: warning: ignoring return value of ‘write’ declared with attribute ‘warn_unused_result’ [-Wunused-result]
10865 |                                         write(STDOUT_FILENO, "\n", 1);
      |                                         ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
procps/powertop.c: In function ‘read_cstate_counts’:
procps/powertop.c:181:34: warning: ‘%s’ directive writing up to 255 bytes into a region of size 171 [-Wformat-overflow=]
  181 |                 sprintf(buf, "%s/%s/power", "/proc/acpi/processor", d->d_name);
      |                                  ^~
In file included from /usr/include/stdio.h:894,
                 from include/libbb.h:31,
                 from procps/powertop.c:32:
In function ‘sprintf’,
    inlined from ‘read_cstate_counts’ at procps/powertop.c:181:3:
/usr/include/bits/stdio2.h:38:10: note: ‘__builtin___sprintf_chk’ output between 28 and 283 bytes into a destination of size 192
   38 |   return __builtin___sprintf_chk (__s, __USE_FORTIFY_LEVEL - 1,
      |          ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   39 |                                   __glibc_objsize (__s), __fmt,
      |                                   ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   40 |                                   __va_arg_pack ());
      |                                   ~~~~~~~~~~~~~~~~~
procps/watch.c: In function ‘watch_main’:
procps/watch.c:115:17: warning: ignoring return value of ‘system’ declared with attribute ‘warn_unused_result’ [-Wunused-result]
  115 |                 system(cmd);
      |                 ^~~~~~~~~~~
util-linux/volume_id/btrfs.c: In function ‘volume_id_probe_btrfs’:
util-linux/volume_id/btrfs.c:110:34: warning: ‘sb’ may be used uninitialized [-Wmaybe-uninitialized]
  110 |         volume_id_set_uuid(id, sb->fsid, UUID_DCE);
      |                                ~~^~~~~~
util-linux/volume_id/btrfs.c:93:35: note: ‘sb’ was declared here
   93 |         struct btrfs_super_block *sb;
      |                                   ^~
In file included from /usr/include/features.h:490,
                 from /usr/include/bits/libc-header-start.h:33,
                 from /usr/include/limits.h:26,
                 from /usr/lib/gcc/x86_64-pc-linux-gnu/13.3.0/include/limits.h:205,
                 from /usr/lib/gcc/x86_64-pc-linux-gnu/13.3.0/include/syslimits.h:7,
                 from /usr/lib/gcc/x86_64-pc-linux-gnu/13.3.0/include/limits.h:34,
                 from include/platform.h:157,
                 from include/libbb.h:13,
                 from libbb/unicode.c:9:
In function ‘mbstowcs’,
    inlined from ‘unicode_strlen’ at libbb/unicode.c:998:17:
/usr/include/bits/stdlib.h:115:10: warning: argument 1 is null but the corresponding size argument 3 value is 2147483647 [-Wnonnull]
  115 |   return __glibc_fortify_n (mbstowcs, __len, sizeof (wchar_t),
      |          ^~~~~~~~~~~~~~~~~
/usr/include/bits/stdlib.h: In function ‘unicode_strlen’:
/usr/include/bits/stdlib.h:99:15: note: in a call to function ‘__mbstowcs_alias’ declared with attribute ‘access (read_only, 2)’
   99 | extern size_t __REDIRECT_NTH (__mbstowcs_alias,
      |               ^~~~~~~~~~~~~~
In function ‘mbstowcs’,
    inlined from ‘unicode_strlen’ at libbb/unicode.c:998:17:
/usr/include/bits/stdlib.h:115:10: warning: argument 1 is null but the corresponding size argument 3 value is 2147483647 [-Wnonnull]
  115 |   return __glibc_fortify_n (mbstowcs, __len, sizeof (wchar_t),
      |          ^~~~~~~~~~~~~~~~~
In file included from /usr/include/stdlib.h:1027,
                 from include/libbb.h:32:
/usr/include/bits/stdlib.h: In function ‘unicode_strlen’:
/usr/include/bits/stdlib.h:95:15: note: in a call to function ‘__mbstowcs_chk’ declared with attribute ‘access (read_only, 2)’
   95 | extern size_t __mbstowcs_chk (wchar_t *__restrict __dst,
      |               ^~~~~~~~~~~~~~
util-linux/mdev.c: In function ‘make_device’:
util-linux/mdev.c:787:33: warning: ignoring return value of ‘chown’ declared with attribute ‘warn_unused_result’ [-Wunused-result]
  787 |                                 chown(node_name, rule->ugid.uid, rule->ugid.gid);
      |                                 ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
util-linux/mdev.c:790:33: warning: ignoring return value of ‘symlink’ declared with attribute ‘warn_unused_result’ [-Wunused-result]
  790 |                                 symlink(node_name, "root");
      |                                 ^~~~~~~~~~~~~~~~~~~~~~~~~~
util-linux/mdev.c:797:41: warning: ignoring return value of ‘symlink’ declared with attribute ‘warn_unused_result’ [-Wunused-result]
  797 |                                         symlink(node_name, device_name);
      |                                         ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
util-linux/mkfs_minix.c: In function ‘get_list_blocks’:
util-linux/mkfs_minix.c:532:17: warning: ignoring return value of ‘fscanf’ declared with attribute ‘warn_unused_result’ [-Wunused-result]
  532 |                 fscanf(listfile, "%lu\n", &blockno);
      |                 ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
util-linux/unshare.c: In function ‘unshare_main’:
util-linux/unshare.c:295:25: warning: ignoring return value of ‘read’ declared with attribute ‘warn_unused_result’ [-Wunused-result]
  295 |                         read(fdp.rd, ns_ctx_list, 1); /* ...using bogus buffer */
      |                         ^~~~~~~~~~~~~~~~~~~~~~~~~~~~