| Index: sandbox/linux/seccomp-bpf-helpers/syscall_sets.cc
 | 
| diff --git a/sandbox/linux/seccomp-bpf-helpers/syscall_sets.cc b/sandbox/linux/seccomp-bpf-helpers/syscall_sets.cc
 | 
| index 7daacfda5745498e8b22fa765f878fcf823d0c5c..40cb5ad8393569abdfbdbcf22154342016709cc6 100644
 | 
| --- a/sandbox/linux/seccomp-bpf-helpers/syscall_sets.cc
 | 
| +++ b/sandbox/linux/seccomp-bpf-helpers/syscall_sets.cc
 | 
| @@ -29,7 +29,7 @@ bool SyscallSets::IsAllowedGettime(int sysno) {
 | 
|    switch (sysno) {
 | 
|      case __NR_clock_gettime:
 | 
|      case __NR_gettimeofday:
 | 
| -#if defined(__i386__) || defined(__x86_64__)
 | 
| +#if defined(__i386__) || defined(__x86_64__) || defined(__mips__)
 | 
|      case __NR_time:
 | 
|  #endif
 | 
|        return true;
 | 
| @@ -38,11 +38,11 @@ bool SyscallSets::IsAllowedGettime(int sysno) {
 | 
|      case __NR_clock_getres:     // Could be allowed.
 | 
|      case __NR_clock_nanosleep:  // Could be allowed.
 | 
|      case __NR_clock_settime:    // Privileged.
 | 
| -#if defined(__i386__)
 | 
| +#if defined(__i386__) || defined(__mips__)
 | 
|      case __NR_ftime:  // Obsolete.
 | 
|  #endif
 | 
|      case __NR_settimeofday:  // Privileged.
 | 
| -#if defined(__i386__)
 | 
| +#if defined(__i386__) || defined(__mips__)
 | 
|      case __NR_stime:
 | 
|  #endif
 | 
|      default:
 | 
| @@ -89,7 +89,7 @@ bool SyscallSets::IsFileSystem(int sysno) {
 | 
|      case __NR_fchownat:  // Should be called chownat ?
 | 
|  #if defined(__x86_64__)
 | 
|      case __NR_newfstatat:  // fstatat(). EPERM not a valid errno.
 | 
| -#elif defined(__i386__) || defined(__arm__)
 | 
| +#elif defined(__i386__) || defined(__arm__) || defined(__mips__)
 | 
|      case __NR_fstatat64:
 | 
|  #endif
 | 
|      case __NR_futimesat:  // Should be called utimesat ?
 | 
| @@ -104,7 +104,7 @@ bool SyscallSets::IsFileSystem(int sysno) {
 | 
|  #if defined(__i386__)
 | 
|      case __NR_oldlstat:
 | 
|  #endif
 | 
| -#if defined(__i386__) || defined(__arm__)
 | 
| +#if defined(__i386__) || defined(__arm__) || defined(__mips__)
 | 
|      case __NR_lstat64:
 | 
|  #endif
 | 
|      case __NR_mkdir:
 | 
| @@ -122,24 +122,24 @@ bool SyscallSets::IsFileSystem(int sysno) {
 | 
|  #if defined(__i386__)
 | 
|      case __NR_oldstat:
 | 
|  #endif
 | 
| -#if defined(__i386__) || defined(__arm__)
 | 
| +#if defined(__i386__) || defined(__arm__) || defined(__mips__)
 | 
|      case __NR_stat64:
 | 
|  #endif
 | 
|      case __NR_statfs:  // EPERM not a valid errno.
 | 
| -#if defined(__i386__) || defined(__arm__)
 | 
| +#if defined(__i386__) || defined(__arm__) || defined(__mips__)
 | 
|      case __NR_statfs64:
 | 
|  #endif
 | 
|      case __NR_symlink:
 | 
|      case __NR_symlinkat:
 | 
|      case __NR_truncate:
 | 
| -#if defined(__i386__) || defined(__arm__)
 | 
| +#if defined(__i386__) || defined(__arm__) || defined(__mips__)
 | 
|      case __NR_truncate64:
 | 
|  #endif
 | 
|      case __NR_unlink:
 | 
|      case __NR_unlinkat:
 | 
|      case __NR_uselib:  // Neither EPERM, nor ENOENT are valid errno.
 | 
|      case __NR_ustat:   // Same as above. Deprecated.
 | 
| -#if defined(__i386__) || defined(__x86_64__)
 | 
| +#if defined(__i386__) || defined(__x86_64__) || defined(__mips__)
 | 
|      case __NR_utime:
 | 
|  #endif
 | 
|      case __NR_utimensat:  // New.
 | 
| @@ -153,12 +153,12 @@ bool SyscallSets::IsFileSystem(int sysno) {
 | 
|  bool SyscallSets::IsAllowedFileSystemAccessViaFd(int sysno) {
 | 
|    switch (sysno) {
 | 
|      case __NR_fstat:
 | 
| -#if defined(__i386__) || defined(__arm__)
 | 
| +#if defined(__i386__) || defined(__arm__) || defined(__mips__)
 | 
|      case __NR_fstat64:
 | 
|  #endif
 | 
|        return true;
 | 
|  // TODO(jln): these should be denied gracefully as well (moved below).
 | 
| -#if defined(__i386__) || defined(__x86_64__)
 | 
| +#if defined(__i386__) || defined(__x86_64__) || defined(__mips__)
 | 
|      case __NR_fadvise64:  // EPERM not a valid errno.
 | 
|  #endif
 | 
|  #if defined(__i386__)
 | 
| @@ -170,14 +170,14 @@ bool SyscallSets::IsAllowedFileSystemAccessViaFd(int sysno) {
 | 
|      case __NR_fdatasync:  // EPERM not a valid errno.
 | 
|      case __NR_flock:      // EPERM not a valid errno.
 | 
|      case __NR_fstatfs:    // Give information about the whole filesystem.
 | 
| -#if defined(__i386__) || defined(__arm__)
 | 
| +#if defined(__i386__) || defined(__arm__) || defined(__mips__)
 | 
|      case __NR_fstatfs64:
 | 
|  #endif
 | 
|      case __NR_fsync:  // EPERM not a valid errno.
 | 
|  #if defined(__i386__)
 | 
|      case __NR_oldfstat:
 | 
|  #endif
 | 
| -#if defined(__i386__) || defined(__x86_64__)
 | 
| +#if defined(__i386__) || defined(__x86_64__) || defined(__mips__)
 | 
|      case __NR_sync_file_range:  // EPERM not a valid errno.
 | 
|  #elif defined(__arm__)
 | 
|      case __NR_arm_sync_file_range:  // EPERM not a valid errno.
 | 
| @@ -196,11 +196,13 @@ bool SyscallSets::IsDeniedFileSystemAccessViaFd(int sysno) {
 | 
|      case __NR_ftruncate:
 | 
|  #if defined(__i386__) || defined(__arm__)
 | 
|      case __NR_fchown32:
 | 
| +#endif
 | 
| +#if defined(__i386__) || defined(__arm__) || defined(__mips__)
 | 
|      case __NR_ftruncate64:
 | 
|  #endif
 | 
|      case __NR_getdents:    // EPERM not a valid errno.
 | 
|      case __NR_getdents64:  // EPERM not a valid errno.
 | 
| -#if defined(__i386__)
 | 
| +#if defined(__i386__) || defined(__mips__)
 | 
|      case __NR_readdir:
 | 
|  #endif
 | 
|        return true;
 | 
| @@ -241,7 +243,7 @@ bool SyscallSets::IsGetSimpleId(int sysno) {
 | 
|  bool SyscallSets::IsProcessPrivilegeChange(int sysno) {
 | 
|    switch (sysno) {
 | 
|      case __NR_capset:
 | 
| -#if defined(__i386__) || defined(__x86_64__)
 | 
| +#if defined(__i386__) || defined(__x86_64__) || defined(__mips__)
 | 
|      case __NR_ioperm:  // Intel privilege.
 | 
|      case __NR_iopl:    // Intel privilege.
 | 
|  #endif
 | 
| @@ -288,7 +290,7 @@ bool SyscallSets::IsAllowedSignalHandling(int sysno) {
 | 
|      case __NR_rt_sigaction:
 | 
|      case __NR_rt_sigprocmask:
 | 
|      case __NR_rt_sigreturn:
 | 
| -#if defined(__i386__) || defined(__arm__)
 | 
| +#if defined(__i386__) || defined(__arm__) || defined(__mips__)
 | 
|      case __NR_sigaction:
 | 
|      case __NR_sigprocmask:
 | 
|      case __NR_sigreturn:
 | 
| @@ -301,11 +303,11 @@ bool SyscallSets::IsAllowedSignalHandling(int sysno) {
 | 
|      case __NR_rt_tgsigqueueinfo:
 | 
|      case __NR_signalfd:
 | 
|      case __NR_signalfd4:
 | 
| -#if defined(__i386__) || defined(__arm__)
 | 
| +#if defined(__i386__) || defined(__arm__) || defined(__mips__)
 | 
|      case __NR_sigpending:
 | 
|      case __NR_sigsuspend:
 | 
|  #endif
 | 
| -#if defined(__i386__)
 | 
| +#if defined(__i386__) || defined(__mips__)
 | 
|      case __NR_signal:
 | 
|      case __NR_sgetmask:  // Obsolete.
 | 
|      case __NR_ssetmask:
 | 
| @@ -321,12 +323,12 @@ bool SyscallSets::IsAllowedOperationOnFd(int sysno) {
 | 
|      case __NR_dup:
 | 
|      case __NR_dup2:
 | 
|      case __NR_dup3:
 | 
| -#if defined(__x86_64__) || defined(__arm__)
 | 
| +#if defined(__x86_64__) || defined(__arm__) || defined(__mips__)
 | 
|      case __NR_shutdown:
 | 
|  #endif
 | 
|        return true;
 | 
|      case __NR_fcntl:
 | 
| -#if defined(__i386__) || defined(__arm__)
 | 
| +#if defined(__i386__) || defined(__arm__) || defined(__mips__)
 | 
|      case __NR_fcntl64:
 | 
|  #endif
 | 
|      default:
 | 
| @@ -362,11 +364,15 @@ bool SyscallSets::IsAllowedProcessStartOrDeath(int sysno) {
 | 
|      case __NR_fork:
 | 
|  #if defined(__i386__) || defined(__x86_64__)
 | 
|      case __NR_get_thread_area:
 | 
| +#endif
 | 
| +#if defined(__i386__) || defined(__x86_64__) || defined(__mips__)
 | 
|      case __NR_set_thread_area:
 | 
|  #endif
 | 
|      case __NR_set_tid_address:
 | 
|      case __NR_unshare:
 | 
| +#if !defined(__mips__)
 | 
|      case __NR_vfork:
 | 
| +#endif
 | 
|      default:
 | 
|        return false;
 | 
|    }
 | 
| @@ -409,7 +415,7 @@ bool SyscallSets::IsAllowedGetOrModifySocket(int sysno) {
 | 
|      case __NR_pipe2:
 | 
|        return true;
 | 
|      default:
 | 
| -#if defined(__x86_64__) || defined(__arm__)
 | 
| +#if defined(__x86_64__) || defined(__arm__) || defined(__mips__)
 | 
|      case __NR_socketpair:  // We will want to inspect its argument.
 | 
|  #endif
 | 
|        return false;
 | 
| @@ -418,7 +424,7 @@ bool SyscallSets::IsAllowedGetOrModifySocket(int sysno) {
 | 
|  
 | 
|  bool SyscallSets::IsDeniedGetOrModifySocket(int sysno) {
 | 
|    switch (sysno) {
 | 
| -#if defined(__x86_64__) || defined(__arm__)
 | 
| +#if defined(__x86_64__) || defined(__arm__) || defined(__mips__)
 | 
|      case __NR_accept:
 | 
|      case __NR_accept4:
 | 
|      case __NR_bind:
 | 
| @@ -432,7 +438,7 @@ bool SyscallSets::IsDeniedGetOrModifySocket(int sysno) {
 | 
|    }
 | 
|  }
 | 
|  
 | 
| -#if defined(__i386__)
 | 
| +#if defined(__i386__) || defined(__mips__)
 | 
|  // Big multiplexing system call for sockets.
 | 
|  bool SyscallSets::IsSocketCall(int sysno) {
 | 
|    switch (sysno) {
 | 
| @@ -444,7 +450,7 @@ bool SyscallSets::IsSocketCall(int sysno) {
 | 
|  }
 | 
|  #endif
 | 
|  
 | 
| -#if defined(__x86_64__) || defined(__arm__)
 | 
| +#if defined(__x86_64__) || defined(__arm__) || defined(__mips__)
 | 
|  bool SyscallSets::IsNetworkSocketInformation(int sysno) {
 | 
|    switch (sysno) {
 | 
|      case __NR_getpeername:
 | 
| @@ -468,13 +474,13 @@ bool SyscallSets::IsAllowedAddressSpaceAccess(int sysno) {
 | 
|      case __NR_madvise:
 | 
|      case __NR_mincore:
 | 
|      case __NR_mlockall:
 | 
| -#if defined(__i386__) || defined(__x86_64__)
 | 
| +#if defined(__i386__) || defined(__x86_64__) || defined(__mips__)
 | 
|      case __NR_mmap:
 | 
|  #endif
 | 
| -#if defined(__i386__) || defined(__arm__)
 | 
| +#if defined(__i386__) || defined(__arm__) || defined(__mips__)
 | 
|      case __NR_mmap2:
 | 
|  #endif
 | 
| -#if defined(__i386__) || defined(__x86_64__)
 | 
| +#if defined(__i386__) || defined(__x86_64__) || defined(__mips__)
 | 
|      case __NR_modify_ldt:
 | 
|  #endif
 | 
|      case __NR_mprotect:
 | 
| @@ -483,8 +489,10 @@ bool SyscallSets::IsAllowedAddressSpaceAccess(int sysno) {
 | 
|      case __NR_munlockall:
 | 
|      case __NR_readahead:
 | 
|      case __NR_remap_file_pages:
 | 
| -#if defined(__i386__)
 | 
| +#if defined(__i386__) || defined(__mips__)
 | 
|      case __NR_vm86:
 | 
| +#endif
 | 
| +#if defined(__i386__)
 | 
|      case __NR_vm86old:
 | 
|  #endif
 | 
|      default:
 | 
| @@ -495,7 +503,7 @@ bool SyscallSets::IsAllowedAddressSpaceAccess(int sysno) {
 | 
|  bool SyscallSets::IsAllowedGeneralIo(int sysno) {
 | 
|    switch (sysno) {
 | 
|      case __NR_lseek:
 | 
| -#if defined(__i386__) || defined(__arm__)
 | 
| +#if defined(__i386__) || defined(__arm__) || defined(__mips__)
 | 
|      case __NR__llseek:
 | 
|  #endif
 | 
|      case __NR_poll:
 | 
| @@ -503,23 +511,23 @@ bool SyscallSets::IsAllowedGeneralIo(int sysno) {
 | 
|      case __NR_pselect6:
 | 
|      case __NR_read:
 | 
|      case __NR_readv:
 | 
| -#if defined(__arm__)
 | 
| +#if defined(__arm__) || defined(__mips__)
 | 
|      case __NR_recv:
 | 
|  #endif
 | 
| -#if defined(__x86_64__) || defined(__arm__)
 | 
| +#if defined(__x86_64__) || defined(__arm__) || defined(__mips__)
 | 
|      case __NR_recvfrom:  // Could specify source.
 | 
|      case __NR_recvmsg:   // Could specify source.
 | 
|  #endif
 | 
|  #if defined(__i386__) || defined(__x86_64__)
 | 
|      case __NR_select:
 | 
|  #endif
 | 
| -#if defined(__i386__) || defined(__arm__)
 | 
| +#if defined(__i386__) || defined(__arm__) || defined(__mips__)
 | 
|      case __NR__newselect:
 | 
|  #endif
 | 
|  #if defined(__arm__)
 | 
|      case __NR_send:
 | 
|  #endif
 | 
| -#if defined(__x86_64__) || defined(__arm__)
 | 
| +#if defined(__x86_64__) || defined(__arm__) || defined(__mips__)
 | 
|      case __NR_sendmsg:  // Could specify destination.
 | 
|      case __NR_sendto:   // Could specify destination.
 | 
|  #endif
 | 
| @@ -533,7 +541,7 @@ bool SyscallSets::IsAllowedGeneralIo(int sysno) {
 | 
|      case __NR_pwritev:
 | 
|      case __NR_recvmmsg:  // Could specify source.
 | 
|      case __NR_sendfile:
 | 
| -#if defined(__i386__) || defined(__arm__)
 | 
| +#if defined(__i386__) || defined(__arm__) || defined(__mips__)
 | 
|      case __NR_sendfile64:
 | 
|  #endif
 | 
|      case __NR_sendmmsg:  // Could specify destination.
 | 
| @@ -564,7 +572,7 @@ bool SyscallSets::IsAllowedBasicScheduler(int sysno) {
 | 
|      case __NR_nanosleep:
 | 
|        return true;
 | 
|      case __NR_getpriority:
 | 
| -#if defined(__i386__) || defined(__arm__)
 | 
| +#if defined(__i386__) || defined(__arm__) || defined(__mips__)
 | 
|      case __NR_nice:
 | 
|  #endif
 | 
|      case __NR_setpriority:
 | 
| @@ -575,7 +583,7 @@ bool SyscallSets::IsAllowedBasicScheduler(int sysno) {
 | 
|  
 | 
|  bool SyscallSets::IsAdminOperation(int sysno) {
 | 
|    switch (sysno) {
 | 
| -#if defined(__i386__) || defined(__arm__)
 | 
| +#if defined(__i386__) || defined(__arm__) || defined(__mips__)
 | 
|      case __NR_bdflush:
 | 
|  #endif
 | 
|      case __NR_kexec_load:
 | 
| @@ -591,7 +599,7 @@ bool SyscallSets::IsAdminOperation(int sysno) {
 | 
|  
 | 
|  bool SyscallSets::IsKernelModule(int sysno) {
 | 
|    switch (sysno) {
 | 
| -#if defined(__i386__) || defined(__x86_64__)
 | 
| +#if defined(__i386__) || defined(__x86_64__) || defined(__mips__)
 | 
|      case __NR_create_module:
 | 
|      case __NR_get_kernel_syms:  // Should ENOSYS.
 | 
|      case __NR_query_module:
 | 
| @@ -622,7 +630,7 @@ bool SyscallSets::IsFsControl(int sysno) {
 | 
|      case __NR_quotactl:
 | 
|      case __NR_swapoff:
 | 
|      case __NR_swapon:
 | 
| -#if defined(__i386__)
 | 
| +#if defined(__i386__) || defined(__mips__)
 | 
|      case __NR_umount:
 | 
|  #endif
 | 
|      case __NR_umount2:
 | 
| @@ -637,7 +645,7 @@ bool SyscallSets::IsNuma(int sysno) {
 | 
|      case __NR_get_mempolicy:
 | 
|      case __NR_getcpu:
 | 
|      case __NR_mbind:
 | 
| -#if defined(__i386__) || defined(__x86_64__)
 | 
| +#if defined(__i386__) || defined(__x86_64__) || defined(__mips__)
 | 
|      case __NR_migrate_pages:
 | 
|  #endif
 | 
|      case __NR_move_pages:
 | 
| @@ -665,13 +673,13 @@ bool SyscallSets::IsMessageQueue(int sysno) {
 | 
|  bool SyscallSets::IsGlobalProcessEnvironment(int sysno) {
 | 
|    switch (sysno) {
 | 
|      case __NR_acct:  // Privileged.
 | 
| -#if defined(__i386__) || defined(__x86_64__)
 | 
| +#if defined(__i386__) || defined(__x86_64__) || defined(__mips__)
 | 
|      case __NR_getrlimit:
 | 
|  #endif
 | 
|  #if defined(__i386__) || defined(__arm__)
 | 
|      case __NR_ugetrlimit:
 | 
|  #endif
 | 
| -#if defined(__i386__)
 | 
| +#if defined(__i386__) || defined(__mips__)
 | 
|      case __NR_ulimit:
 | 
|  #endif
 | 
|      case __NR_getrusage:
 | 
| @@ -690,7 +698,7 @@ bool SyscallSets::IsDebug(int sysno) {
 | 
|      case __NR_ptrace:
 | 
|      case __NR_process_vm_readv:
 | 
|      case __NR_process_vm_writev:
 | 
| -#if defined(__i386__) || defined(__x86_64__)
 | 
| +#if defined(__i386__) || defined(__x86_64__) || defined(__mips__)
 | 
|      case __NR_kcmp:
 | 
|  #endif
 | 
|        return true;
 | 
| @@ -793,7 +801,7 @@ bool SyscallSets::IsSystemVMessageQueue(int sysno) {
 | 
|  }
 | 
|  #endif
 | 
|  
 | 
| -#if defined(__i386__)
 | 
| +#if defined(__i386__) || defined(__mips__)
 | 
|  // Big system V multiplexing system call.
 | 
|  bool SyscallSets::IsSystemVIpc(int sysno) {
 | 
|    switch (sysno) {
 | 
| @@ -809,7 +817,7 @@ bool SyscallSets::IsAnySystemV(int sysno) {
 | 
|  #if defined(__x86_64__) || defined(__arm__)
 | 
|    return IsSystemVMessageQueue(sysno) || IsSystemVSemaphores(sysno) ||
 | 
|           IsSystemVSharedMemory(sysno);
 | 
| -#elif defined(__i386__)
 | 
| +#elif defined(__i386__) || defined(__mips__)
 | 
|    return IsSystemVIpc(sysno);
 | 
|  #endif
 | 
|  }
 | 
| @@ -858,7 +866,7 @@ bool SyscallSets::IsFaNotify(int sysno) {
 | 
|  bool SyscallSets::IsTimer(int sysno) {
 | 
|    switch (sysno) {
 | 
|      case __NR_getitimer:
 | 
| -#if defined(__i386__) || defined(__x86_64__)
 | 
| +#if defined(__i386__) || defined(__x86_64__) || defined(__mips__)
 | 
|      case __NR_alarm:
 | 
|  #endif
 | 
|      case __NR_setitimer:
 | 
| @@ -914,16 +922,16 @@ bool SyscallSets::IsMisc(int sysno) {
 | 
|      case __NR_syncfs:
 | 
|      case __NR_vhangup:
 | 
|  // The system calls below are not implemented.
 | 
| -#if defined(__i386__) || defined(__x86_64__)
 | 
| +#if defined(__i386__) || defined(__x86_64__) || defined(__mips__)
 | 
|      case __NR_afs_syscall:
 | 
|  #endif
 | 
| -#if defined(__i386__)
 | 
| +#if defined(__i386__) || defined(__mips__)
 | 
|      case __NR_break:
 | 
|  #endif
 | 
| -#if defined(__i386__) || defined(__x86_64__)
 | 
| +#if defined(__i386__) || defined(__x86_64__) || defined(__mips__)
 | 
|      case __NR_getpmsg:
 | 
|  #endif
 | 
| -#if defined(__i386__)
 | 
| +#if defined(__i386__) || defined(__mips__)
 | 
|      case __NR_gtty:
 | 
|      case __NR_idle:
 | 
|      case __NR_lock:
 | 
| @@ -931,13 +939,13 @@ bool SyscallSets::IsMisc(int sysno) {
 | 
|      case __NR_prof:
 | 
|      case __NR_profil:
 | 
|  #endif
 | 
| -#if defined(__i386__) || defined(__x86_64__)
 | 
| +#if defined(__i386__) || defined(__x86_64__) || defined(__mips__)
 | 
|      case __NR_putpmsg:
 | 
|  #endif
 | 
|  #if defined(__x86_64__)
 | 
|      case __NR_security:
 | 
|  #endif
 | 
| -#if defined(__i386__)
 | 
| +#if defined(__i386__) || defined(__mips__)
 | 
|      case __NR_stty:
 | 
|  #endif
 | 
|  #if defined(__x86_64__)
 | 
| @@ -976,4 +984,25 @@ bool SyscallSets::IsArmPrivate(int sysno) {
 | 
|  }
 | 
|  #endif  // defined(__arm__)
 | 
|  
 | 
| +#if defined(__mips__)
 | 
| +bool SyscallSets::IsMipsSpecific(int sysno) {
 | 
| +  switch (sysno) {
 | 
| +    case __NR_cacheflush:
 | 
| +    case __NR_cachectl:
 | 
| +      return true;
 | 
| +    default:
 | 
| +      return false;
 | 
| +  }
 | 
| +}
 | 
| +
 | 
| +bool SyscallSets::IsMipsMisc(int sysno) {
 | 
| +  switch (sysno) {
 | 
| +    case __NR_sysmips:
 | 
| +    case __NR_unused150:
 | 
| +      return true;
 | 
| +    default:
 | 
| +      return false;
 | 
| +  }
 | 
| +}
 | 
| +#endif   // defined(__mips__)
 | 
|  }  // namespace sandbox.
 | 
| 
 |