Skip to content

Commit

Permalink
Modify modifiers
Browse files Browse the repository at this point in the history
  • Loading branch information
Sukant Hajra committed Feb 4, 2024
1 parent b0e859e commit 465b25b
Show file tree
Hide file tree
Showing 11 changed files with 141 additions and 165 deletions.
48 changes: 24 additions & 24 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -178,8 +178,8 @@ nix run github:shajra/shajra-keyboards#flash-ergodoxez
Flashing ZSA Technology Lab's Ergodox EZ (custom "shajra" keymap)
=================================================================

FLASH SOURCE: /nix/store/hr9jw8wf7fjqych406r7r04wbikn0rhk-qmk-builtin-shajra-src
FLASH BINARY: /nix/store/63xg05b7f7y20bg6n167c0k6hnvdylvv-ergodoxez-builtin-shajra.hex
FLASH SOURCE: /nix/store/n2wljqbjm18dd67h09azw363v038yjm8-qmk-builtin-shajra-src
FLASH BINARY: /nix/store/4llg9v1x0mbbcas67xl697ga1xlbifwf-ergodoxez-builtin-shajra.hex

⠋ Press the reset button of your keyboard

Expand Down Expand Up @@ -240,28 +240,28 @@ If you want to check that everything builds before flashing your keyboard, you c
tree $(nix build --no-link --print-out-paths) 2>/dev/null
```

/nix/store/7mpq6w2qhann4kidnp0qz07asn96xscg-shajra-keyboards-ci
├── build-ergodoxez-builtin-shajra-flash -> /nix/store/dqq2v9qrk94797k37wvqjayilck7zf48-ergodoxez-builtin-shajra-flash
├── build-ergodoxez-builtin-shajra-hex -> /nix/store/63xg05b7f7y20bg6n167c0k6hnvdylvv-ergodoxez-builtin-shajra.hex
├── build-ergodoxez-factory-flash -> /nix/store/3nw0fy9684l7ym56vlkbwgv4ipahffiz-ergodoxez-factory-flash
├── build-ergodoxez-factory-hex -> /nix/store/vysnvcrn9drhvqx1ksvhgzdyhh5lsqri-ergodoxez-factory.hex
├── build-model01-builtin-shajra-flash -> /nix/store/3kbvh18n7w40v6hyywyiljkzhscnnmd6-model01-builtin-shajra-flash
├── build-model01-builtin-shajra-hex -> /nix/store/0f191rrfgvvjkazj2r23fk69xvf5bh6z-model01-builtin-shajra-hex
├── build-model01-factory-flash -> /nix/store/4gyv69sgnv5dhfp63aqhs6cgrjb55hqg-model01-factory-flash
├── build-model01-factory-hex -> /nix/store/fawld7waldj7m8pf5p7vqgmdihih1pqc-model01-factory-hex
├── build-model100-builtin-shajra-flash -> /nix/store/93025h28938g0s6dg8ahp2glvrx488bv-model100-builtin-shajra-flash
├── build-model100-builtin-shajra-hex -> /nix/store/fr615qzqrzsvcsssgig934rd8sg9ghhh-model100-builtin-shajra-hex
├── build-model100-factory-flash -> /nix/store/d2lxfb32yg0gwhal6d8mbkvy0rm83ghv-model100-factory-flash
├── build-model100-factory-hex -> /nix/store/x0qja02m7wqbsyi9875lzzdv1q307szp-model100-factory-hex
├── build-moonlander-builtin-shajra-flash -> /nix/store/7g3lj42527dq8j6f9bmf3a73a1sjw5il-moonlander-builtin-shajra-flash
├── build-moonlander-builtin-shajra-hex -> /nix/store/vmjrnz1w69x560l3s9bp23ll95d9ry57-moonlander-builtin-shajra.bin
├── build-moonlander-factory-flash -> /nix/store/5hk0qjp8fkq5lx0pzgdpq37wfbk7s777-moonlander-factory-flash
├── build-moonlander-factory-hex -> /nix/store/195v42a1hbmc9b9l9jas3jz285ki9jvv-moonlander-factory.bin
├── flash-ergodoxez -> /nix/store/cvjpfm6l36f7s3n34990wv634qisb9hi-flash-ergodoxez
├── flash-model01 -> /nix/store/ldlqpkxgzw151p4cvilybq3rkhk3x6ak-flash-model01
├── flash-model100 -> /nix/store/kg6anvapld05y1kqm7xjd41jg7v404gv-flash-model100
├── flash-moonlander -> /nix/store/l25iiyryzz1xjpwjrizj9v3b20xn1fmp-flash-moonlander
└── licenses -> /nix/store/fbkma429n9az1jgd3avvcai44617s0mp-shajra-keyboards-licenses
/nix/store/pmb6sa7mbkc4w27y9lfcs66cnvfx86l5-shajra-keyboards-ci
├── build-ergodoxez-builtin-shajra-flash -> /nix/store/h5pnsghc4nf7wsd9bk964vicidwzljyn-ergodoxez-builtin-shajra-flash
├── build-ergodoxez-builtin-shajra-hex -> /nix/store/4llg9v1x0mbbcas67xl697ga1xlbifwf-ergodoxez-builtin-shajra.hex
├── build-ergodoxez-factory-flash -> /nix/store/kknpgd1japddjn8rl06n91x42ly7q4i8-ergodoxez-factory-flash
├── build-ergodoxez-factory-hex -> /nix/store/cyp9izs14157idkyrbp6j52ym98j6h9h-ergodoxez-factory.hex
├── build-model01-builtin-shajra-flash -> /nix/store/k7x60sy085k1w4bjw5zamfq8h5m3qxqr-model01-builtin-shajra-flash
├── build-model01-builtin-shajra-hex -> /nix/store/cnd04xg9s96y9wmnzkd6ng6j1akzbyxm-model01-builtin-shajra-hex
├── build-model01-factory-flash -> /nix/store/r7fcyzxqix123jagi9lvyzsvlg5qilr5-model01-factory-flash
├── build-model01-factory-hex -> /nix/store/gwxx9i59daqj1gq06biikvsyqv4a05rb-model01-factory-hex
├── build-model100-builtin-shajra-flash -> /nix/store/qfajjki3r6wvyvvkc5m0y184d6idl1kz-model100-builtin-shajra-flash
├── build-model100-builtin-shajra-hex -> /nix/store/bgmv6h58wr0barglvkklmmqkbpm379x2-model100-builtin-shajra-hex
├── build-model100-factory-flash -> /nix/store/lqq6jq9xyjb1sgnl0yjq9a1q6vlw6z0d-model100-factory-flash
├── build-model100-factory-hex -> /nix/store/a3197a8k04yzisrcxrszs6d7653krrp2-model100-factory-hex
├── build-moonlander-builtin-shajra-flash -> /nix/store/6djjs43qqc563w4dikqkx0fkz73j4j31-moonlander-builtin-shajra-flash
├── build-moonlander-builtin-shajra-hex -> /nix/store/w5nn73v48kh8r607lnqyc9b1vagrx8vh-moonlander-builtin-shajra.bin
├── build-moonlander-factory-flash -> /nix/store/z7bg73d94z645s2788vm6hw6hqc2400s-moonlander-factory-flash
├── build-moonlander-factory-hex -> /nix/store/r5d6hfhfg7ycpsag0l83mldmpv632rxi-moonlander-factory.bin
├── flash-ergodoxez -> /nix/store/j2449pgq9f4qv3wbcqxshdb3cdiy0ig7-flash-ergodoxez
├── flash-model01 -> /nix/store/j1jwh0adgyxlyldh47kxdaas3j9r3csb-flash-model01
├── flash-model100 -> /nix/store/5avja1bn9an00x9z2rgz8zw8z0rxnsvv-flash-model100
├── flash-moonlander -> /nix/store/5cpmxr1xk6zaaybswvnr5wf40n9badq6-flash-moonlander
└── licenses -> /nix/store/65nmw7i5vyfslc4dkqywc0miwffhv5y9-shajra-keyboards-licenses

18 directories, 4 files

Expand Down
48 changes: 24 additions & 24 deletions README.org
Original file line number Diff line number Diff line change
Expand Up @@ -209,8 +209,8 @@ head -c350 < <(./flash-ergodoxez) | ansifilter
: Flashing ZSA Technology Lab's Ergodox EZ (custom "shajra" keymap)
: =================================================================
:
: FLASH SOURCE: /nix/store/hr9jw8wf7fjqych406r7r04wbikn0rhk-qmk-builtin-shajra-src
: FLASH BINARY: /nix/store/63xg05b7f7y20bg6n167c0k6hnvdylvv-ergodoxez-builtin-shajra.hex
: FLASH SOURCE: /nix/store/n2wljqbjm18dd67h09azw363v038yjm8-qmk-builtin-shajra-src
: FLASH BINARY: /nix/store/4llg9v1x0mbbcas67xl697ga1xlbifwf-ergodoxez-builtin-shajra.hex
:
: ⠋ Press the reset button of your keyboard

Expand Down Expand Up @@ -305,28 +305,28 @@ tree $(nix build --no-link --print-out-paths) 2>/dev/null

#+results: nix-build
#+begin_example
/nix/store/7mpq6w2qhann4kidnp0qz07asn96xscg-shajra-keyboards-ci
├── build-ergodoxez-builtin-shajra-flash -> /nix/store/dqq2v9qrk94797k37wvqjayilck7zf48-ergodoxez-builtin-shajra-flash
├── build-ergodoxez-builtin-shajra-hex -> /nix/store/63xg05b7f7y20bg6n167c0k6hnvdylvv-ergodoxez-builtin-shajra.hex
├── build-ergodoxez-factory-flash -> /nix/store/3nw0fy9684l7ym56vlkbwgv4ipahffiz-ergodoxez-factory-flash
├── build-ergodoxez-factory-hex -> /nix/store/vysnvcrn9drhvqx1ksvhgzdyhh5lsqri-ergodoxez-factory.hex
├── build-model01-builtin-shajra-flash -> /nix/store/3kbvh18n7w40v6hyywyiljkzhscnnmd6-model01-builtin-shajra-flash
├── build-model01-builtin-shajra-hex -> /nix/store/0f191rrfgvvjkazj2r23fk69xvf5bh6z-model01-builtin-shajra-hex
├── build-model01-factory-flash -> /nix/store/4gyv69sgnv5dhfp63aqhs6cgrjb55hqg-model01-factory-flash
├── build-model01-factory-hex -> /nix/store/fawld7waldj7m8pf5p7vqgmdihih1pqc-model01-factory-hex
├── build-model100-builtin-shajra-flash -> /nix/store/93025h28938g0s6dg8ahp2glvrx488bv-model100-builtin-shajra-flash
├── build-model100-builtin-shajra-hex -> /nix/store/fr615qzqrzsvcsssgig934rd8sg9ghhh-model100-builtin-shajra-hex
├── build-model100-factory-flash -> /nix/store/d2lxfb32yg0gwhal6d8mbkvy0rm83ghv-model100-factory-flash
├── build-model100-factory-hex -> /nix/store/x0qja02m7wqbsyi9875lzzdv1q307szp-model100-factory-hex
├── build-moonlander-builtin-shajra-flash -> /nix/store/7g3lj42527dq8j6f9bmf3a73a1sjw5il-moonlander-builtin-shajra-flash
├── build-moonlander-builtin-shajra-hex -> /nix/store/vmjrnz1w69x560l3s9bp23ll95d9ry57-moonlander-builtin-shajra.bin
├── build-moonlander-factory-flash -> /nix/store/5hk0qjp8fkq5lx0pzgdpq37wfbk7s777-moonlander-factory-flash
├── build-moonlander-factory-hex -> /nix/store/195v42a1hbmc9b9l9jas3jz285ki9jvv-moonlander-factory.bin
├── flash-ergodoxez -> /nix/store/cvjpfm6l36f7s3n34990wv634qisb9hi-flash-ergodoxez
├── flash-model01 -> /nix/store/ldlqpkxgzw151p4cvilybq3rkhk3x6ak-flash-model01
├── flash-model100 -> /nix/store/kg6anvapld05y1kqm7xjd41jg7v404gv-flash-model100
├── flash-moonlander -> /nix/store/l25iiyryzz1xjpwjrizj9v3b20xn1fmp-flash-moonlander
└── licenses -> /nix/store/fbkma429n9az1jgd3avvcai44617s0mp-shajra-keyboards-licenses
/nix/store/pmb6sa7mbkc4w27y9lfcs66cnvfx86l5-shajra-keyboards-ci
├── build-ergodoxez-builtin-shajra-flash -> /nix/store/h5pnsghc4nf7wsd9bk964vicidwzljyn-ergodoxez-builtin-shajra-flash
├── build-ergodoxez-builtin-shajra-hex -> /nix/store/4llg9v1x0mbbcas67xl697ga1xlbifwf-ergodoxez-builtin-shajra.hex
├── build-ergodoxez-factory-flash -> /nix/store/kknpgd1japddjn8rl06n91x42ly7q4i8-ergodoxez-factory-flash
├── build-ergodoxez-factory-hex -> /nix/store/cyp9izs14157idkyrbp6j52ym98j6h9h-ergodoxez-factory.hex
├── build-model01-builtin-shajra-flash -> /nix/store/k7x60sy085k1w4bjw5zamfq8h5m3qxqr-model01-builtin-shajra-flash
├── build-model01-builtin-shajra-hex -> /nix/store/cnd04xg9s96y9wmnzkd6ng6j1akzbyxm-model01-builtin-shajra-hex
├── build-model01-factory-flash -> /nix/store/r7fcyzxqix123jagi9lvyzsvlg5qilr5-model01-factory-flash
├── build-model01-factory-hex -> /nix/store/gwxx9i59daqj1gq06biikvsyqv4a05rb-model01-factory-hex
├── build-model100-builtin-shajra-flash -> /nix/store/qfajjki3r6wvyvvkc5m0y184d6idl1kz-model100-builtin-shajra-flash
├── build-model100-builtin-shajra-hex -> /nix/store/bgmv6h58wr0barglvkklmmqkbpm379x2-model100-builtin-shajra-hex
├── build-model100-factory-flash -> /nix/store/lqq6jq9xyjb1sgnl0yjq9a1q6vlw6z0d-model100-factory-flash
├── build-model100-factory-hex -> /nix/store/a3197a8k04yzisrcxrszs6d7653krrp2-model100-factory-hex
├── build-moonlander-builtin-shajra-flash -> /nix/store/6djjs43qqc563w4dikqkx0fkz73j4j31-moonlander-builtin-shajra-flash
├── build-moonlander-builtin-shajra-hex -> /nix/store/w5nn73v48kh8r607lnqyc9b1vagrx8vh-moonlander-builtin-shajra.bin
├── build-moonlander-factory-flash -> /nix/store/z7bg73d94z645s2788vm6hw6hqc2400s-moonlander-factory-flash
├── build-moonlander-factory-hex -> /nix/store/r5d6hfhfg7ycpsag0l83mldmpv632rxi-moonlander-factory.bin
├── flash-ergodoxez -> /nix/store/j2449pgq9f4qv3wbcqxshdb3cdiy0ig7-flash-ergodoxez
├── flash-model01 -> /nix/store/j1jwh0adgyxlyldh47kxdaas3j9r3csb-flash-model01
├── flash-model100 -> /nix/store/5avja1bn9an00x9z2rgz8zw8z0rxnsvv-flash-model100
├── flash-moonlander -> /nix/store/5cpmxr1xk6zaaybswvnr5wf40n9badq6-flash-moonlander
└── licenses -> /nix/store/65nmw7i5vyfslc4dkqywc0miwffhv5y9-shajra-keyboards-licenses

18 directories, 4 files
#+end_example
Expand Down
17 changes: 2 additions & 15 deletions doc/design.md
Original file line number Diff line number Diff line change
Expand Up @@ -16,8 +16,7 @@
- [More on `Alt Gr` and `Compose`](#altgr_and_compose)
- [Mapping more non-modifiers](#sec-5-7)
- [Mapping the Function layer](#sec-5-8)
- [Swapping `GUI` and `Alt` mappings](#sec-5-9)
- [Media and Mouse layers](#sec-5-10)
- [Media and Mouse layers](#sec-5-9)


# Designing a keyboard mapping<a id="sec-1"></a>
Expand Down Expand Up @@ -246,19 +245,7 @@ There are a few ways to lay out keycodes in the Function layer. Here are some re

Regarding the last item in this table, some keys already exist from our Base layer with shifting, but it's nice to have all our symbols on one layer, so we don't have to toggle between switching between shifting the Base layer and toggling the Function layer (for example, this occurs with programming operators such as `<*>`, and `<$>`).

## Swapping `GUI` and `Alt` mappings<a id="sec-5-9"></a>

For different operating systems, we want to have a modifier to set user-specific custom key bindings. We might even want to have similar operations between various operating systems. For instance, we might have user-specific keybindings for window management to have a consistent experience between different operating systems. But we don't want these keybindings to overlap with useful default OS/application-level keybindings.

On Macs, the `Option` (``) key is used less frequently for default OS/application keybindings than `Cmd` (``) or `Ctrl`. So the `Left Alt` keycode is good to use as a user/custom modifier, since it's interpreted as `Left Option` key by Macs.

On GNU/Linux and Windows, the `Super` (`Windows`) key is used less frequently for default OS/application keybinding than `Ctrl` or `Alt`. So the `Left GUI` keycode is good to use as a user/custom modifier, since it's interpreted as a `Left Super` (`Left Windows`) key. However, Macs interpret this keycode as `Cmd` (``), which conflicts with common keybindings (`⌘-c` or `⌘-v` for copy/paste, for instance).

If we put our custom keybindings on the `GUI` keycode for GNU/Linux and Windows operating systems, and if we put similar keybindings on the `Alt` keycode for Macs, then it can be helpful to swap the locations of these two modifiers when switching between operating systems. This way, similar keybinds retain the same location on our Ergodox EZ, Moonlander, and Model 01/100 keyboards.

This is why the "shajra" keymap provides a function layer key to swap the `GUI` and `Left Alt` keycode locations.

## Media and Mouse layers<a id="sec-5-10"></a>
## Media and Mouse layers<a id="sec-5-9"></a>

This project doesn't provide diagrams of the Media or Mouse layers, but hopefully you can follow the code for these layers in the respective code for the [Ergodox EZ](https://github.com/shajra/shajra-keyboards/blob/main/keymaps/ergodox_ez/shajra/keymap.c#L102-L142), [Moonlander](https://github.com/shajra/shajra-keyboards/blob/main/keymaps/moonlander/shajra/keymap.c#L55-L70), [Model 01](https://github.com/shajra/shajra-keyboards/blob/main/keymaps/model_01/shajra/Model01.ino#L113-L144), and [Model 100](https://github.com/shajra/shajra-keyboards/blob/main/keymaps/model_100/shajra/Model100.ino#L113-L144).

Expand Down
30 changes: 0 additions & 30 deletions doc/design.org
Original file line number Diff line number Diff line change
Expand Up @@ -403,36 +403,6 @@ don't have to toggle between switching between shifting the Base layer and
toggling the Function layer (for example, this occurs with programming operators
such as =<*>=, and =<$>=).

** Swapping =GUI= and =Alt= mappings

For different operating systems, we want to have a modifier to set user-specific
custom key bindings. We might even want to have similar operations between
various operating systems. For instance, we might have user-specific
keybindings for window management to have a consistent experience between
different operating systems. But we don't want these keybindings to overlap with
useful default OS/application-level keybindings.

On Macs, the =Option= (=⌥=) key is used less frequently for default
OS/application keybindings than =Cmd= (=⌘=) or =Ctrl=. So the =Left Alt= keycode
is good to use as a user/custom modifier, since it's interpreted as =Left
Option= key by Macs.

On GNU/Linux and Windows, the =Super= (=Windows=) key is used less frequently
for default OS/application keybinding than =Ctrl= or =Alt=. So the =Left GUI=
keycode is good to use as a user/custom modifier, since it's interpreted as a
=Left Super= (=Left Windows=) key. However, Macs interpret this keycode as =Cmd=
(=⌘=), which conflicts with common keybindings (=⌘-c= or =⌘-v= for copy/paste,
for instance).

If we put our custom keybindings on the =GUI= keycode for GNU/Linux and Windows
operating systems, and if we put similar keybindings on the =Alt= keycode for
Macs, then it can be helpful to swap the locations of these two modifiers when
switching between operating systems. This way, similar keybinds retain the same
location on our Ergodox EZ, Moonlander, and Model 01/100 keyboards.

This is why the "shajra" keymap provides a function layer key to swap the =GUI=
and =Left Alt= keycode locations.

** Media and Mouse layers

This project doesn't provide diagrams of the Media or Mouse layers, but
Expand Down
8 changes: 4 additions & 4 deletions doc/nix-usage-flakes.md
Original file line number Diff line number Diff line change
Expand Up @@ -262,7 +262,7 @@ After a successful call of `nix build`, you'll see one or more symlinks for each
readlink result*
```

/nix/store/fbkma429n9az1jgd3avvcai44617s0mp-shajra-keyboards-licenses
/nix/store/65nmw7i5vyfslc4dkqywc0miwffhv5y9-shajra-keyboards-licenses

Following these symlinks, we can see the files the project provides:

Expand All @@ -284,7 +284,7 @@ It's common to configure these “result” symlinks as ignored in source contro
nix path-info .#licenses-thirdparty
```

/nix/store/fbkma429n9az1jgd3avvcai44617s0mp-shajra-keyboards-licenses
/nix/store/65nmw7i5vyfslc4dkqywc0miwffhv5y9-shajra-keyboards-licenses

## Running commands in a shell<a id="sec-4-6"></a>

Expand Down Expand Up @@ -397,7 +397,7 @@ nix shell --ignore-environment \
--command which shajra-keyboards-licenses
```

/nix/store/fbkma429n9az1jgd3avvcai44617s0mp-shajra-keyboards-licenses/bin/shajra-keyboards-licenses
/nix/store/65nmw7i5vyfslc4dkqywc0miwffhv5y9-shajra-keyboards-licenses/bin/shajra-keyboards-licenses

What we do with local flake references can work just as well with remote flake references.

Expand Down Expand Up @@ -425,7 +425,7 @@ nix profile list
Flake attribute: packages.x86_64-linux.licenses-thirdparty
Original flake URL: git+file:///home/tnks/src/shajra/shajra-keyboards
Locked flake URL: git+file:///home/tnks/src/shajra/shajra-keyboards
Store paths: /nix/store/fbkma429n9az1jgd3avvcai44617s0mp-shajra-keyboards-licenses
Store paths: /nix/store/65nmw7i5vyfslc4dkqywc0miwffhv5y9-shajra-keyboards-licenses

If we want to uninstall a program from our profile, we do so by the index from this list:

Expand Down
8 changes: 4 additions & 4 deletions doc/nix-usage-flakes.org
Original file line number Diff line number Diff line change
Expand Up @@ -442,7 +442,7 @@ readlink result*
#+end_src

#+RESULTS: nix-build-link
: /nix/store/fbkma429n9az1jgd3avvcai44617s0mp-shajra-keyboards-licenses
: /nix/store/65nmw7i5vyfslc4dkqywc0miwffhv5y9-shajra-keyboards-licenses

Following these symlinks, we can see the files the project provides:

Expand Down Expand Up @@ -471,7 +471,7 @@ nix path-info .#<<get("package-attr-short")>>
#+end_src

#+results: nix-build-path
: /nix/store/fbkma429n9az1jgd3avvcai44617s0mp-shajra-keyboards-licenses
: /nix/store/65nmw7i5vyfslc4dkqywc0miwffhv5y9-shajra-keyboards-licenses

** Running commands in a shell

Expand Down Expand Up @@ -633,7 +633,7 @@ nix shell --ignore-environment \
#+end_src

#+RESULTS: nix-shell-remote
: /nix/store/fbkma429n9az1jgd3avvcai44617s0mp-shajra-keyboards-licenses/bin/shajra-keyboards-licenses
: /nix/store/65nmw7i5vyfslc4dkqywc0miwffhv5y9-shajra-keyboards-licenses/bin/shajra-keyboards-licenses

What we do with local flake references can work just as well with remote flake
references.
Expand Down Expand Up @@ -684,7 +684,7 @@ nix profile list --profile /tmp/nix-profile | ansifilter
: Flake attribute: packages.x86_64-linux.licenses-thirdparty
: Original flake URL: git+file:///home/tnks/src/shajra/shajra-keyboards
: Locked flake URL: git+file:///home/tnks/src/shajra/shajra-keyboards
: Store paths: /nix/store/fbkma429n9az1jgd3avvcai44617s0mp-shajra-keyboards-licenses
: Store paths: /nix/store/65nmw7i5vyfslc4dkqywc0miwffhv5y9-shajra-keyboards-licenses

If we want to uninstall a program from our profile, we do so by the index from
this list:
Expand Down
Loading

0 comments on commit 465b25b

Please sign in to comment.