diff --git a/README.md b/README.md
index 2b00b5ab4..793536229 100644
--- a/README.md
+++ b/README.md
@@ -1,3 +1,5 @@
+![Cosmopolitan Honeybadger](usr/share/img/honeybadger.png)
+
 # Cosmopolitan
 
 [Cosmopolitan Libc](https://justine.lol/cosmopolitan/index.html) makes C
diff --git a/libc/intrin/asan.c b/libc/intrin/asan.c
index 70dbdd877..3d029d2dd 100644
--- a/libc/intrin/asan.c
+++ b/libc/intrin/asan.c
@@ -321,7 +321,7 @@ static size_t __asan_int2str(int64_t i, char *a) {
   return 1 + __asan_uint2str(-i, a);
 }
 
-flattenout void __asan_poison(uintptr_t p, size_t n, int kind) {
+void __asan_poison(uintptr_t p, size_t n, int kind) {
   int k;
   char *s;
   if (!n) return;
@@ -343,7 +343,7 @@ flattenout void __asan_poison(uintptr_t p, size_t n, int kind) {
   }
 }
 
-flattenout void __asan_unpoison(uintptr_t p, size_t n) {
+void __asan_unpoison(uintptr_t p, size_t n) {
   int k;
   char *s;
   if (!n) return;
diff --git a/libc/str/decodentsutf16.c b/libc/str/decodentsutf16.c
deleted file mode 100644
index b0ff37546..000000000
--- a/libc/str/decodentsutf16.c
+++ /dev/null
@@ -1,41 +0,0 @@
-/*-*- mode:c;indent-tabs-mode:nil;c-basic-offset:2;tab-width:8;coding:utf-8 -*-│
-│vi: set net ft=c ts=2 sts=2 sw=2 fenc=utf-8                                :vi│
-╞══════════════════════════════════════════════════════════════════════════════╡
-│ Copyright 2020 Justine Alexandra Roberts Tunney                              │
-│                                                                              │
-│ Permission to use, copy, modify, and/or distribute this software for         │
-│ any purpose with or without fee is hereby granted, provided that the         │
-│ above copyright notice and this permission notice appear in all copies.      │
-│                                                                              │
-│ THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL                │
-│ WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED                │
-│ WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE             │
-│ AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL         │
-│ DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR        │
-│ PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER               │
-│ TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR             │
-│ PERFORMANCE OF THIS SOFTWARE.                                                │
-╚─────────────────────────────────────────────────────────────────────────────*/
-#include "libc/str/str.h"
-#include "libc/str/utf16.h"
-
-/**
- * Helps runtime decode UTF-16 with slightly smaller code size.
- */
-wint_t DecodeNtsUtf16(const char16_t **s) {
-  wint_t x, y;
-  for (;;) {
-    if (!(x = *(*s)++)) break;
-    if (IsUtf16Cont(x)) continue;
-    if (IsUcs2(x)) {
-      return x;
-    } else {
-      if ((y = *(*s)++)) {
-        return MergeUtf16(x, y);
-      } else {
-        return 0;
-      }
-    }
-  }
-  return x;
-}
diff --git a/libc/str/undeflate.c b/libc/str/undeflate.c
index 9c7523159..b79ed1e5a 100644
--- a/libc/str/undeflate.c
+++ b/libc/str/undeflate.c
@@ -69,8 +69,8 @@ static const struct DeflateConsts {
     {{144, 8}, {112, 9}, {24, 7}, {8, 8}, {32, 5}, {0, 0}},
 };
 
-static noasan uint32_t undeflatetree(struct DeflateState *ds, uint32_t *tree,
-                                     const uint8_t *lens, size_t symcount) {
+static uint32_t undeflatetree(struct DeflateState *ds, uint32_t *tree,
+                              const uint8_t *lens, size_t symcount) {
   size_t i, len;
   uint32_t code, slot;
   uint16_t codes[16], first[16], counts[16];
@@ -96,10 +96,10 @@ static noasan uint32_t undeflatetree(struct DeflateState *ds, uint32_t *tree,
   return first[15];
 }
 
-static noasan struct DeflateHold undeflatesymbol(struct DeflateHold hold,
-                                                 const uint32_t *tree,
-                                                 size_t treecount,
-                                                 uint32_t *out_symbol) {
+static struct DeflateHold undeflatesymbol(struct DeflateHold hold,
+                                          const uint32_t *tree,
+                                          size_t treecount,
+                                          uint32_t *out_symbol) {
   size_t left, right, m;
   uint32_t search, key;
   left = 0;
@@ -122,8 +122,6 @@ static noasan struct DeflateHold undeflatesymbol(struct DeflateHold hold,
   return hold;
 }
 
-/* TODO(jart): Do we really need noasan? */
-
 /**
  * Decompresses raw DEFLATE data.
  *
@@ -134,8 +132,8 @@ static noasan struct DeflateHold undeflatesymbol(struct DeflateHold hold,
  *     are part of the design of this algorithm
  * @note h/t Phil Katz, David Huffman, Claude Shannon
  */
-noasan ssize_t undeflate(void *output, size_t outputsize, void *input,
-                         size_t inputsize, struct DeflateState *ds) {
+ssize_t undeflate(void *output, size_t outputsize, void *input,
+                  size_t inputsize, struct DeflateState *ds) {
   struct DeflateHold hold;
   bool isfinalblock;
   size_t i, nlit, ndist;
diff --git a/tool/build/blinkenlights.c b/tool/build/blinkenlights.c
index 0e14cd992..82be8de2f 100644
--- a/tool/build/blinkenlights.c
+++ b/tool/build/blinkenlights.c
@@ -50,6 +50,7 @@
 #include "libc/str/str.h"
 #include "libc/str/thompike.h"
 #include "libc/str/tpdecode.internal.h"
+#include "libc/str/tpenc.h"
 #include "libc/str/tpencode.internal.h"
 #include "libc/sysv/consts/auxv.h"
 #include "libc/sysv/consts/ex.h"
@@ -1957,12 +1958,16 @@ static int GetVidyaByte(unsigned char b) {
 }
 
 static void OnVidyaServiceWriteCharacter(void) {
+  uint64_t w;
   int i, n, y, x;
   char *p, buf[32];
   p = buf;
   p += FormatCga(m->bx[0], p);
   p = stpcpy(p, "\e7");
-  p += tpencode(p, 8, GetVidyaByte(m->ax[0]), false);
+  w = tpenc(GetVidyaByte(m->ax[0]));
+  do {
+    *p++ = w;
+  } while ((w >>= 8));
   p = stpcpy(p, "\e8");
   for (i = Read16(m->cx); i--;) {
     PtyWrite(pty, buf, p - buf);
@@ -1984,9 +1989,13 @@ static char16_t VidyaServiceXlatTeletype(uint8_t c) {
 
 static void OnVidyaServiceTeletypeOutput(void) {
   int n;
+  uint64_t w;
   char buf[12];
   n = FormatCga(m->bx[0], buf);
-  n += tpencode(buf + n, 6, VidyaServiceXlatTeletype(m->ax[0]), false);
+  w = tpenc(VidyaServiceXlatTeletype(m->ax[0]));
+  do {
+    buf[n++] = w;
+  } while ((w >>= 8));
   PtyWrite(pty, buf, n);
 }
 
diff --git a/tool/build/lib/dis.c b/tool/build/lib/dis.c
index 91c01244b..24b008cbb 100644
--- a/tool/build/lib/dis.c
+++ b/tool/build/lib/dis.c
@@ -28,7 +28,7 @@
 #include "libc/mem/mem.h"
 #include "libc/runtime/runtime.h"
 #include "libc/str/str.h"
-#include "libc/str/tpencode.internal.h"
+#include "libc/str/tpenc.h"
 #include "third_party/xed/x86.h"
 #include "tool/build/lib/case.h"
 #include "tool/build/lib/demangle.h"
@@ -134,12 +134,18 @@ static char *DisLineCode(struct Dis *d, char *p) {
 
 static char *DisLineData(struct Dis *d, char *p, const uint8_t *b, size_t n) {
   size_t i;
+  uint64_t w;
   p = DisColumn(DisAddr(d, p), p, ADDRLEN);
   p = DisColumn(DisByte(p, b, n), p, 64);
   p = HighStart(p, g_high.comment);
   *p++ = '#';
   *p++ = ' ';
-  for (i = 0; i < n; ++i) p += tpencode(p, 8, bing(b[i], 0), false);
+  for (i = 0; i < n; ++i) {
+    w = tpenc(bing(b[i], 0));
+    do {
+      *p++ = w;
+    } while ((w >>= 8));
+  }
   p = HighEnd(p);
   *p = '\0';
   return p;
diff --git a/tool/build/lib/loader.c b/tool/build/lib/loader.c
index e1d5ddce7..ed3313bdb 100644
--- a/tool/build/lib/loader.c
+++ b/tool/build/lib/loader.c
@@ -140,7 +140,7 @@ void LoadProgram(struct Machine *m, const char *prog, char **args, char **vars,
   size_t i, mappedsize;
   DCHECK_NOTNULL(prog);
   elf->prog = prog;
-  if ((fd = open(prog, O_RDONLY)) == -1 ||
+  if ((fd = open(prog, O_RDWR)) == -1 ||
       (fstat(fd, &st) == -1 || !st.st_size)) {
     fputs(prog, stderr);
     fputs(": not found\n", stderr);
diff --git a/usr/share/img/honeybadger.png b/usr/share/img/honeybadger.png
new file mode 100644
index 000000000..6f9d154fa
Binary files /dev/null and b/usr/share/img/honeybadger.png differ