- 25 Oct, 2018 1 commit
-
-
Ivan Markin authored
Now as `SYS_UNVEIL` has landed in `x/sys`, it's time to have a convenient handle for it too. Change-Id: I61db9cc23fa9f2e10bac601959002319ea9c854b GitHub-Last-Rev: eb9487242e1fafa06c057ef49444ea5a711382df GitHub-Pull-Request: golang/sys#19 Reviewed-on: https://go-review.googlesource.com/c/142317Reviewed-by: Tobias Klauser <tobias.klauser@gmail.com> Run-TryBot: Tobias Klauser <tobias.klauser@gmail.com> TryBot-Result: Gobot Gobot <gobot@golang.org>
-
- 24 Oct, 2018 2 commits
-
-
Tobias Klauser authored
Use ppoll instead of re-implementing it using Syscall6(SYS_PPOLL, ...) Change-Id: I7b3baa00df32dc1fe7ee80755843a492a884938c Reviewed-on: https://go-review.googlesource.com/c/144171 Run-TryBot: Tobias Klauser <tobias.klauser@gmail.com> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Ian Lance Taylor <iant@golang.org>
-
Tobias Klauser authored
Change-Id: I0c9d97d7db72e74cfd5d7ba77c46726ec38b821b Reviewed-on: https://go-review.googlesource.com/c/144172 Run-TryBot: Tobias Klauser <tobias.klauser@gmail.com> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Ian Lance Taylor <iant@golang.org>
-
- 23 Oct, 2018 1 commit
-
-
Tobias Klauser authored
Change-Id: I3a13730e219e6f6df28829cf0d1e193c62073ac8 Reviewed-on: https://go-review.googlesource.com/c/144057 Run-TryBot: Tobias Klauser <tobias.klauser@gmail.com> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Ian Lance Taylor <iant@golang.org>
-
- 22 Oct, 2018 3 commits
-
-
Tobias Klauser authored
Change-Id: I58c2cfb11ddd5ce731a880c0c63790092052f130 Reviewed-on: https://go-review.googlesource.com/c/143697 Run-TryBot: Tobias Klauser <tobias.klauser@gmail.com> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
-
Ivan Markin authored
Change-Id: Ifecafeedd733d4b33ef082a8f505165de9bac20a GitHub-Last-Rev: 44c40b042479bb3a4a73838b2536adbb715cde11 GitHub-Pull-Request: golang/sys#20 Reviewed-on: https://go-review.googlesource.com/c/142318Reviewed-by: Tobias Klauser <tobias.klauser@gmail.com> Run-TryBot: Tobias Klauser <tobias.klauser@gmail.com> TryBot-Result: Gobot Gobot <gobot@golang.org>
-
Yuval Pavel Zholkover authored
Background: The 64-bit inode project was merged into the upcoming FreeBSD 12 release. It changes the ABI for structs holding inodes: stat, statfs, dirent. New system call numbers were introduced which accept the new struct layouts, the old ones were marked as COMPAT11. Their equivalent libc wrappers are using ELF symbol versioning. The new wrappers have moved from @FBSD_1.0 to @FBSD_1.5. Backward and forward compatability is achieved by always using the new struct layouts while converting the old struct instance to the new layout on old kernels. https://svnweb.freebsd.org/base?view=revision&revision=318736 https://svnweb.freebsd.org/base?view=revision&revision=320278 The same approach is used for Go: The new Stat_t, Statfs_t and Dirent types hold 64-bit inodes and additional ABI changes, they are generated from their C definitions in FreeBSD-12 using cgo -godefs. Each type has an unexported *_freebsd11 counterpart generated the same way. Previous directly exposed syscalls like Fstat have now a wrapper in place calling either fstat or fstat_freebsd12 zsyscall wrapper based on the kern.osreldate. If an old syscall needs to be used, then the returned *_freebsd11 result is converted to the new layout before returning from the wrapper. Introduce supportsABI() call to check the kern.osreldate sysctl for the ABI version. Drop the old struct stat8 definition in favour of the <sys/stat.h> version. Run the mktypes part of GOOS=freebsd GOARCH={386,amd64,arm} ./mkall.sh on FreeBSD-12.0-ALPHA6 (r338675), updating all types except Kevent. Expose Mknodat, both COMPAT11 version (currently missing) and the FreeBSD 12 one. Some COMPAT11 syscalls have no direct FreeBSD 12 counterpart, in those cases an *at(AT_FDCWD, ...) is used instead. Updates golang/go#22448 Change-Id: I87940b88ae358db88103cdcd06f9cafbf4694cfc Reviewed-on: https://go-review.googlesource.com/c/136816 Run-TryBot: Tobias Klauser <tobias.klauser@gmail.com> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Giovanni Bajo <rasky@develer.com> Reviewed-by: Tobias Klauser <tobias.klauser@gmail.com>
-
- 21 Oct, 2018 1 commit
-
-
Ivan Markin authored
For all supported platforms (386, amd64, arm). Note that this doesn't update whole `unix` package for these platforms. Change-Id: I0a66f8403f704c6328000ffc9f238989c22936d2 GitHub-Last-Rev: 14fd451964abcfacdb94dca3dc41742bacd0f732 GitHub-Pull-Request: golang/sys#21 Reviewed-on: https://go-review.googlesource.com/c/143542Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org> Reviewed-by: Tobias Klauser <tobias.klauser@gmail.com> Run-TryBot: Brad Fitzpatrick <bradfitz@golang.org> TryBot-Result: Gobot Gobot <gobot@golang.org>
-
- 19 Oct, 2018 2 commits
-
-
Tobias Klauser authored
Add the SOF_TIMESTAMPING_* flags used to request different types of timestamping operations. In err := unix.SetsockoptInt(fd, unix.SOL_SOCKET, unix.SO_TIMESTAMPING, val) val is a mask of SOF_TIMESTAMPING_* values. See https://www.kernel.org/doc/Documentation/networking/timestamping.txt for more information. Fixes golang/go#28173 Change-Id: I26e964d607606f2b3cb24f66f071d11765b9696e Reviewed-on: https://go-review.googlesource.com/c/143337 Run-TryBot: Tobias Klauser <tobias.klauser@gmail.com> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Ian Lance Taylor <iant@golang.org>
-
chigotc authored
This commit ports unix package for aix/ppc64 with gc implementation. In order to merge as much as possible gc and gccgo implementation, the mksyscall_aix_ppc64.pl creates three files. zsyscall_aix_ppc64.go is common for both implementation. It has the main syscall function and handles the pointer creations, type conversions and the error if needed. It calls a function "call..." which is available for each implementation. zsyscall_aix_ppc64_gc.go is the gc part. It implements "call..." functions using //go:cgo_import_dynamic and //go:linkname. It is based on syscall.syscall6 function. zsyscall_aix_ppc64_gccgo.go is the gccgo part. It implements "call..." functions using cgo and C functions. Some unavailable syscalls were also removed from the previous implementation. For aix/ppc, the script is left unchanged as aix/ppc won't be implemented inside gc. Change-Id: I3701095df31517c66f95874ba8e682967993090b Reviewed-on: https://go-review.googlesource.com/c/143117 Run-TryBot: Tobias Klauser <tobias.klauser@gmail.com> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Tobias Klauser <tobias.klauser@gmail.com>
-
- 11 Oct, 2018 1 commit
-
-
Tobias Klauser authored
These marker comments are in every other zsyscall_*.go file generated by mksyscall.pl and mksyscall_aix.pl. Also add them to the file generated by mksyscall_solaris.pl. Change-Id: Ic0ad5f28dd0a0934aa768f58ccc390b613a36abb Reviewed-on: https://go-review.googlesource.com/c/141557 Run-TryBot: Tobias Klauser <tobias.klauser@gmail.com> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
-
- 05 Oct, 2018 2 commits
-
-
Tobias Klauser authored
This wasn't converted during CL 110875 Updates golang/go#25134 Change-Id: Iaa579e0c173d3e27cf9f7e20072752277089beb1 Reviewed-on: https://go-review.googlesource.com/c/139977 Run-TryBot: Tobias Klauser <tobias.klauser@gmail.com> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Ian Lance Taylor <iant@golang.org>
-
Tobias Klauser authored
Add a wrapper for the kexec_file_load syscall on the architectures that implement it (amd64, ppc64x, s390x). See http://man7.org/linux/man-pages/man2/kexec_file_load.2.html Change-Id: Ie29f871902176610a6ba7ed0a7bcc95c10eb172b Reviewed-on: https://go-review.googlesource.com/c/140037 Run-TryBot: Tobias Klauser <tobias.klauser@gmail.com> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Ian Lance Taylor <iant@golang.org>
-
- 04 Oct, 2018 1 commit
-
-
Tobias Klauser authored
Export the sizeof(Ptr|Short|Int|Long|LongLong) consts. This allows users to get this information (e.g. for alignment purposes) without using cgo or generating these constants themselves. Change-Id: I8640482bf67b89c2f2b6e9a116ba7bc268f8135a Reviewed-on: https://go-review.googlesource.com/c/139617 Run-TryBot: Tobias Klauser <tobias.klauser@gmail.com> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
-
- 03 Oct, 2018 3 commits
-
-
Tobias Klauser authored
It's not guaranteed that the []byte buffer will be aligned as required for Clockinfo. Use a Clockinfo var for the sysctl call instead. This came up during the review for SysctlUvmexp on OpenBSD in CL 139278. Thanks to Ian Lance Taylor for pointing this out. Change-Id: Idc7a624922da7249c6e7d5ce0236a431b58ebe5f Reviewed-on: https://go-review.googlesource.com/c/139279 Run-TryBot: Tobias Klauser <tobias.klauser@gmail.com> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org> Reviewed-by: Ian Lance Taylor <iant@golang.org>
-
Tobias Klauser authored
OpenBSD uses sysctl with struct uvmexp to get information from the virtual memory system of the kernel. Add type Uvmexp and the SysctlUvmexp function to query this information. This will be used in github.com/tklauser/go-sysconf to get _SC_AVPHYS_PAGES on OpenBSD. Change-Id: I96ded2d1be37e5307bab55e79b13234cc93d21e6 Reviewed-on: https://go-review.googlesource.com/c/139278 Run-TryBot: Tobias Klauser <tobias.klauser@gmail.com> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Ian Lance Taylor <iant@golang.org>
-
Tobias Klauser authored
These sysctl strings were lost in CL 114075 which updated openbsd/amd64 to OpenBSD 6.3. Re-add them by adding uvm/uvmexp.h to mksysctl_openbsd.pl. The defines for the VM_* constants were moved to this header in OpenBSD 6.3. Change-Id: If4291380d6d8235485d91c4442076dd03485bc2c Reviewed-on: https://go-review.googlesource.com/c/139277 Run-TryBot: Tobias Klauser <tobias.klauser@gmail.com> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Ian Lance Taylor <iant@golang.org>
-
- 28 Sep, 2018 1 commit
-
-
Matt Layher authored
Change-Id: I458f69e01fb64ff66f0b518c547d9eca3e8625cb Reviewed-on: https://go-review.googlesource.com/138375 Run-TryBot: Matt Layher <mdlayher@gmail.com> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
-
- 27 Sep, 2018 2 commits
-
-
Tobias Klauser authored
Change-Id: Id60c9310bad85e02ec81b04e7f304f058b680822 Reviewed-on: https://go-review.googlesource.com/138116 Run-TryBot: Tobias Klauser <tobias.klauser@gmail.com> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
-
Tobias Klauser authored
NetBSD uses sysctl with struct clockinfo to get clock rate information from the kernel. Add type Clockinfo and the SysctlClockinfo function to query this information. This will be used in github.com/tklauser/go-sysconf to get _SC_CLK_TCK on NetBSD. Change-Id: I9e67d766f491ec3b460f26cb243b3595f0ba4d69 Reviewed-on: https://go-review.googlesource.com/138035 Run-TryBot: Tobias Klauser <tobias.klauser@gmail.com> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
-
- 26 Sep, 2018 2 commits
-
-
Lynn Boger authored
If a system has the ability to disable some cores, as on ppc64 with the ppc64_cpu command, then TestSchedSetaffinity will fail if the CPUset passed to Setaffinity includes one that has been disabled. This adds a check to use values from the oldMask, which are the valid cores returned from Getaffinity, to pass to Setaffinity. Fixes golang/go#27875 Change-Id: I9656f41867afc18e0eaedc4bdef5f75e137a1fcd Reviewed-on: https://go-review.googlesource.com/137675Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
-
Tobias Klauser authored
CL 45052 added them to mkerrors.sh but they weren't generated on NetBSD. Do so now. Change-Id: I314b0b7b203aba910a5733f9fbb63b1a0e6ccecf Reviewed-on: https://go-review.googlesource.com/137595 Run-TryBot: Tobias Klauser <tobias.klauser@gmail.com> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Ian Lance Taylor <iant@golang.org>
-
- 25 Sep, 2018 1 commit
-
-
Tobias Klauser authored
Now that all BSDs define MNT_NOWAIT, use it in TestGetfsstat instead of the locally defined copy. Change-Id: Ib6cee08a6d3a034464c7b79591605b49889a46ae Reviewed-on: https://go-review.googlesource.com/137195 Run-TryBot: Tobias Klauser <tobias.klauser@gmail.com> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
-
- 24 Sep, 2018 3 commits
-
-
Jordan Rhee authored
Updates golang/go#26148 Change-Id: I0425244bfb0c8f600a6f02d9d7b228e175a720a4 Reviewed-on: https://go-review.googlesource.com/127665Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
-
Tobias Klauser authored
Change-Id: I0326a7bfcf3cd794eb1158055a8ee98a396d3b47 Reviewed-on: https://go-review.googlesource.com/136818 Run-TryBot: Tobias Klauser <tobias.klauser@gmail.com> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Ian Lance Taylor <iant@golang.org>
-
Tobias Klauser authored
Change-Id: Ifc720a583a830883908e83bfe0e2d74c2bfa013f Reviewed-on: https://go-review.googlesource.com/136817 Run-TryBot: Tobias Klauser <tobias.klauser@gmail.com> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Ian Lance Taylor <iant@golang.org>
-
- 21 Sep, 2018 1 commit
-
-
Matt Layher authored
Provides access to the Linux AF_XDP socket family. For more information on AF_XDP, see: https://www.kernel.org/doc/html/latest/networking/af_xdp.html. Change-Id: I7efb82c4a67da3e15932e3c0d882f0bad7ba16ef Reviewed-on: https://go-review.googlesource.com/136695 Run-TryBot: Matt Layher <mdlayher@gmail.com> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Tobias Klauser <tobias.klauser@gmail.com>
-
- 20 Sep, 2018 1 commit
-
-
Tobias Klauser authored
Now all non-deprecated RTA_* constants as of Linux v4.18 are present. Change-Id: Ib04e233015f381ceb7c7e06b3d808f3c7948f5b4 Reviewed-on: https://go-review.googlesource.com/136456 Run-TryBot: Tobias Klauser <tobias.klauser@gmail.com> Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org> TryBot-Result: Gobot Gobot <gobot@golang.org>
-
- 19 Sep, 2018 2 commits
-
-
Tony Reix authored
These changes add Termio/Winsize/Statfs_t for AIX, constants TC[GS]ET and the syscalls Mkdir and Mknod. It also changes the comments for AIX which still were talking about Linux and glibc. Change-Id: I64325330328d6e16cff540f103fdfa533b7d8f5b Reviewed-on: https://go-review.googlesource.com/136295 Run-TryBot: Tobias Klauser <tobias.klauser@gmail.com> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Tobias Klauser <tobias.klauser@gmail.com>
-
Tobias Klauser authored
For some reason I didn't completely re-generate the zsyscall_linux_* files for all GOARCHes during review of CL 135915. Do so now such that the flags parameter is of type int on all GOARCHes. Change-Id: Ifc4afacfbedb70f3818b23ed3ea468745bbdb455 Reviewed-on: https://go-review.googlesource.com/136296 Run-TryBot: Tobias Klauser <tobias.klauser@gmail.com> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
-
- 18 Sep, 2018 1 commit
-
-
Tobias Klauser authored
Add a wrapper for the memfd_create syscall on Linux. See http://man7.org/linux/man-pages/man2/memfd_create.2.html for more information. Also add the corresponding MFD_* constants to be used in the flags argument. Change-Id: Ib30a007e15575a38ecf204601ffede9c913799b6 Reviewed-on: https://go-review.googlesource.com/135915 Run-TryBot: Tobias Klauser <tobias.klauser@gmail.com> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Ian Lance Taylor <iant@golang.org>
-
- 09 Sep, 2018 2 commits
-
-
Leigh McCulloch authored
The TestRlimitAs function has fatal output that uses the word 'suceeded' that is a misspelling of 'succeeded'. Change-Id: Id235c9e38338e09c5c06c4ed4a0037afc8f6f2bd GitHub-Last-Rev: 84d6abe5768b9b2c82541ed7504e30a3a192b972 GitHub-Pull-Request: golang/sys#17 Reviewed-on: https://go-review.googlesource.com/134220 Run-TryBot: Ian Lance Taylor <iant@golang.org> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Ian Lance Taylor <iant@golang.org>
-
Leigh McCulloch authored
The comment for ConsoleScreenBufferInfo uses the word 'retreive' that is a misspelling of 'retrieve'. Change-Id: Idd9fb0c5082b6a2b10badbbb162e312710bfe68b GitHub-Last-Rev: 08d62a57df113291ea0abd7198bae7d15fa6f075 GitHub-Pull-Request: golang/sys#18 Reviewed-on: https://go-review.googlesource.com/134221Reviewed-by: Ian Lance Taylor <iant@golang.org>
-
- 07 Sep, 2018 1 commit
-
-
Matt Layher authored
Change-Id: Ie48ba8d5bacc73b69d1b964d55ae4d443ab46aac Reviewed-on: https://go-review.googlesource.com/134116 Run-TryBot: Matt Layher <mdlayher@gmail.com> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Ian Lance Taylor <iant@golang.org>
-
- 06 Sep, 2018 1 commit
-
-
Tobias Klauser authored
Add syscall wrappers, error constants and types for linux/riscv64 Switch docker image to Ubuntu 18.10 in order to get qemu supporting riscv64. Also set the uname release string for qemu to 4.15 (the first Linux kernel version with riscv64 support), because otherwise running the generating C program in mkerrors.sh on a host with an older kernel would fail with a "FATAL: kernel too old". Note that linux/riscv64 is currently only usable using gccgo. Updates golang/go#27532 Change-Id: Ic420f842342418443474cac72d38adff14d1b938 Reviewed-on: https://go-review.googlesource.com/133735 Run-TryBot: Tobias Klauser <tobias.klauser@gmail.com> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
-
- 05 Sep, 2018 2 commits
-
-
Tobias Klauser authored
These are usefule to specify SyncFileRange's flags argument. Change-Id: I1726c3adf55aaebac61beed09d39a48a8e040a93 Reviewed-on: https://go-review.googlesource.com/133475 Run-TryBot: Tobias Klauser <tobias.klauser@gmail.com> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
-
Tobias Klauser authored
On linux/ppc64{,le} the SYS_SYNC_FILE_RANGE2 syscall is used to implement SyncFileRange. This syscall has a different argument order than SYS_SYNC_FILE_RANGE. Apart from that the implementations of both syscalls are the same, so use a simple wrapper to invoke the syscall with the correct argument order. For context see: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=edd5cd4a9424f22b0fa08bef5e299d41befd5622 Fixes golang/go#27485 Change-Id: Idc154eab7b7c521a34de821e1d1a97095e96fed0 Reviewed-on: https://go-review.googlesource.com/133215 Run-TryBot: Tobias Klauser <tobias.klauser@gmail.com> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
-
- 03 Sep, 2018 2 commits
-
-
Brad Fitzpatrick authored
This reverts commit 1b739671 (https://go-review.googlesource.com/c/sys/+/133015) Reason for revert: breaks the build. No Syscall9 on linux/arm. Not obvious this was ever compiled, much less tested. (Unless it was only for gccgo, but that was never specified.) Fixes golang/go#27475 Change-Id: I5ed04c9ab672ce33adc64bdaec601bf73df42269 Reviewed-on: https://go-review.googlesource.com/133095Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
-
Andrei Gherzan authored
Change-Id: I5a98a732c0e6a229ab93acbce08b4f780f860f72 GitHub-Last-Rev: 886bffd986fbb7be149e7df3bda65331a74db0b8 GitHub-Pull-Request: golang/sys#16 Reviewed-on: https://go-review.googlesource.com/133015Reviewed-by: Tobias Klauser <tobias.klauser@gmail.com> Run-TryBot: Tobias Klauser <tobias.klauser@gmail.com> TryBot-Result: Gobot Gobot <gobot@golang.org>
-
- 31 Aug, 2018 1 commit
-
-
Tobias Klauser authored
CL 125456 added the implementation of AF_UNIX to the syscall package. Add the same implementation to golang.org/x/sys/windows as well. This works only on Windows 10. https://blogs.msdn.microsoft.com/commandline/2017/12/19/af_unix-comes-to-windows/ Updates golang/go#26072 Change-Id: Ibd4a17342ed4f9f4f2b16b82c7b02834e681b7b4 Reviewed-on: https://go-review.googlesource.com/132555 Run-TryBot: Tobias Klauser <tobias.klauser@gmail.com> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Yasuhiro MATSUMOTO <mattn.jp@gmail.com> Reviewed-by: Alex Brainman <alex.brainman@gmail.com>
-