diff options
author | sudoforge <no-reply@sudoforge.com> | 2025-04-08 03:49:06 -0700 |
---|---|---|
committer | sudoforge <no-reply@sudoforge.com> | 2025-04-19 02:11:08 -0700 |
commit | 4b9583c5379121a65bfb3b0866b7bfd593d8f9f1 (patch) | |
tree | 4a095676de2c4934f9eda6d18919255489a2217f | |
parent | 52f42daf8bf317a065277da50d916c90e26fe4dd (diff) | |
download | git-bug-I6f4b5f5ca73780cecf66a553cce80aa3f75df2ce.tar.gz git-bug-I6f4b5f5ca73780cecf66a553cce80aa3f75df2ce.zip |
docs: update install, contrib, and usage documentationI6f4b5f5ca73780cecf66a553cce80aa3f75df2ce
This change refactors documentation, especially //:README.md,
//:CONTRIBUTING.md, and centralized most of the rest of the contributing
and usage documentation into `//doc`.
Documentation changes focus on cleaning up erroneous language,
reformatting, and restructuring docs in order to reduce visual noise -
the goals are to enable users and contributors to find what they're looking
for much more quickly, reduce (sometimes erroneous) duplication, and
present a structured approach for where to put docs.
Additionally:
- Added CI pipeline badge for the `trunk` workflow in `//:README.md`
- Converted embedded emoji characters to GitHub's emoji syntax
- Moved most sections with image and installation instructions into
`<details>` elements
- Replaced references to gitter with matrix
- Introduced `treefmt-nix` to `devShells.default` in the flake, and all
non-generated documentation was formatted with `nix fmt` (running
`mdformat` under the hood)
- Regenerated //doc/md and //doc/man and refactored inline docs from various
pages that were iterating out command line details so that they simply
point to //doc/md instead
- Rewrote contributing docs to focus on using `nix`, to ensure that the
development shell is used. This enforces consistency across different
platforms with the revision and configuration of each tool we use, and
simplifies the onboarding story for contributors -- they only need to
install and configure nix (and optionally direnv). A dev container
will be provided in the future [0] as an alternative for users on
Windows (who can use WSL) or want to avoid installing `nix`.
[0]: https://github.com/git-bug/git-bug/issues/1364
Closes: #1212 #1276 #1330 #1357
Change-Id: I6f4b5f5ca73780cecf66a553cce80aa3f75df2ce
-rw-r--r-- | .envrc | 1 | ||||
-rw-r--r-- | .github/FUNDING.yml | 3 | ||||
-rw-r--r-- | .github/dependabot.yml | 13 | ||||
-rw-r--r-- | .github/workflows/build-and-test.yml | 18 | ||||
-rw-r--r-- | .github/workflows/cron.yml | 1 | ||||
-rw-r--r-- | .github/workflows/lifecycle.yml | 1 | ||||
-rw-r--r-- | .github/workflows/lint.yml | 50 | ||||
-rw-r--r-- | .github/workflows/release.yml | 1 | ||||
-rw-r--r-- | .github/workflows/scan.yml | 5 | ||||
-rw-r--r-- | CONTRIBUTING.md | 283 | ||||
-rw-r--r-- | INSTALLATION.md | 263 | ||||
-rw-r--r-- | Makefile | 6 | ||||
-rw-r--r-- | README.md | 402 | ||||
-rw-r--r-- | api/graphql/gqlgen.yml | 1 | ||||
-rw-r--r-- | bridge/gitlab/export_test.go | 12 | ||||
-rw-r--r-- | bridge/gitlab/import.go | 2 | ||||
-rw-r--r-- | doc/README.md | 30 | ||||
-rw-r--r-- | doc/assets/bridge-workflow.png (renamed from misc/diagrams/bridge_workflow.png) | bin | 24172 -> 24172 bytes | |||
-rw-r--r-- | doc/assets/bug-graph.png (renamed from doc/bug-graph-1.png) | bin | 56863 -> 56863 bytes | |||
-rw-r--r-- | doc/assets/merge-1.png (renamed from doc/merge1.png) | bin | 56989 -> 56989 bytes | |||
-rw-r--r-- | doc/assets/merge-2.png (renamed from doc/merge2.png) | bin | 65479 -> 65479 bytes | |||
-rw-r--r-- | doc/assets/native-workflow.png (renamed from misc/diagrams/native_workflow.png) | bin | 26582 -> 26582 bytes | |||
-rw-r--r-- | doc/assets/operations.png (renamed from doc/operations.png) | bin | 12842 -> 12842 bytes | |||
-rw-r--r-- | doc/assets/tui-recording.gif (renamed from misc/termui_recording.gif) | bin | 879036 -> 879036 bytes | |||
-rw-r--r-- | doc/assets/web-screenshot-comments.png (renamed from misc/webui2.png) | bin | 109054 -> 109054 bytes | |||
-rw-r--r-- | doc/assets/web-screenshot-feed.png (renamed from misc/webui1.png) | bin | 92028 -> 92028 bytes | |||
-rw-r--r-- | doc/assets/webui-workflow.png (renamed from misc/diagrams/webui-workflow.png) | bin | 27271 -> 27271 bytes | |||
-rw-r--r-- | doc/design/architecture.md (renamed from doc/architecture.md) | 100 | ||||
-rw-r--r-- | doc/design/bridges/jira.md (renamed from doc/jira_bridge.md) | 78 | ||||
-rw-r--r-- | doc/design/cli-convention.md (renamed from doc/cli-convention.md) | 2 | ||||
-rw-r--r-- | doc/design/data-model.md | 215 | ||||
-rw-r--r-- | doc/feature-matrix.md | 151 | ||||
-rw-r--r-- | doc/feature_matrix.md | 137 | ||||
-rw-r--r-- | doc/generate.go (renamed from doc/gen_docs.go) | 32 | ||||
-rw-r--r-- | doc/howto-github.md | 80 | ||||
-rw-r--r-- | doc/model.md | 145 | ||||
-rw-r--r-- | doc/queries.md | 113 | ||||
-rw-r--r-- | doc/usage/bridges.md | 113 | ||||
-rw-r--r-- | doc/usage/interfaces.md | 66 | ||||
-rw-r--r-- | doc/usage/query-language.md | 166 | ||||
-rw-r--r-- | doc/usage/workflows.md | 62 | ||||
-rw-r--r-- | entity/dag/example_test.go | 2 | ||||
-rw-r--r-- | flake-hook.bash | 16 | ||||
-rw-r--r-- | flake.lock | 69 | ||||
-rw-r--r-- | flake.nix | 62 | ||||
-rw-r--r-- | git-bug.go | 4 | ||||
-rw-r--r-- | misc/completion/generate.go (renamed from misc/completion/gen_completion.go) | 2 | ||||
-rw-r--r-- | misc/diagrams/Readme.md | 1 | ||||
-rw-r--r-- | misc/termui_recording.svg | 43 | ||||
-rw-r--r-- | treefmt.nix | 86 | ||||
-rw-r--r-- | webui/README.md (renamed from webui/Readme.md) | 0 |
51 files changed, 1771 insertions, 1066 deletions
@@ -18,3 +18,4 @@ use flake # files to watch watch_file .envrc.local +watch_file flake-hook.bash diff --git a/.github/FUNDING.yml b/.github/FUNDING.yml index dca4e756..48d8a862 100644 --- a/.github/FUNDING.yml +++ b/.github/FUNDING.yml @@ -1,3 +1,2 @@ -# These are supported funding model platforms - +--- open_collective: git-bug diff --git a/.github/dependabot.yml b/.github/dependabot.yml index bd192262..cbad80b9 100644 --- a/.github/dependabot.yml +++ b/.github/dependabot.yml @@ -1,8 +1,9 @@ +--- version: 2 updates: -- package-ecosystem: gomod - directory: "/" - schedule: - interval: daily - time: "04:00" - open-pull-requests-limit: 10 + - package-ecosystem: gomod + directory: "/" + schedule: + interval: daily + time: "04:00" + open-pull-requests-limit: 10 diff --git a/.github/workflows/build-and-test.yml b/.github/workflows/build-and-test.yml index 9b36a648..fb9526a8 100644 --- a/.github/workflows/build-and-test.yml +++ b/.github/workflows/build-and-test.yml @@ -1,3 +1,4 @@ +--- name: build-and-test on: @@ -57,3 +58,20 @@ jobs: - name: Test run: make test + + with-nix: + strategy: + matrix: + platform: [ubuntu-latest, macos-latest] + runs-on: ${{ matrix.platform }} + steps: + # refs/tags/4.2.2 @ 2025-04-10 + - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 + + # refs/heads/main @ 2025-04-10 + - uses: DeterminateSystems/nix-installer-action@0d28deea2bab0f135fcdbb0bd8e4c6ba469c7b32 + + # refs/heads/main @ 2025-04-10 + - uses: nicknovitski/nix-develop@5da6ac475f1ffbcf54ee562fa3056646e146be95 + + - run: nix flake check diff --git a/.github/workflows/cron.yml b/.github/workflows/cron.yml index 13147a0c..85ee78c1 100644 --- a/.github/workflows/cron.yml +++ b/.github/workflows/cron.yml @@ -1,3 +1,4 @@ +--- name: cron on: diff --git a/.github/workflows/lifecycle.yml b/.github/workflows/lifecycle.yml index a52c6466..50e45996 100644 --- a/.github/workflows/lifecycle.yml +++ b/.github/workflows/lifecycle.yml @@ -1,3 +1,4 @@ +--- name: lifecycle on: diff --git a/.github/workflows/lint.yml b/.github/workflows/lint.yml index 6b6434d2..09bf6fcc 100644 --- a/.github/workflows/lint.yml +++ b/.github/workflows/lint.yml @@ -1,40 +1,10 @@ +--- name: lint on: workflow_call: jobs: - filter: - name: filter - runs-on: ubuntu-latest - outputs: - golang: ${{ steps.filter.outputs.golang }} - golang_files: ${{ steps.filter.outputs.golang_files }} - steps: - - uses: actions/checkout@v4 - - uses: dorny/paths-filter@v3 - id: filter - with: - list-files: shell - filters: | - golang: - - added|modified: '**/*.go' - - added|modified: '/go.sum' - - added|modified: '/go.mod' - - codeql: - runs-on: ubuntu-latest - steps: - - name: Checkout repository - uses: actions/checkout@v4 - with: - # We must fetch at least the immediate parents so that if this is - # a pull request then we can checkout the head. - fetch-depth: 2 - - - run: git checkout HEAD^2 - if: ${{ github.event_name == 'pull_request' }} - spelling: runs-on: ubuntu-latest steps: @@ -43,21 +13,3 @@ jobs: - name: Check spelling uses: codespell-project/actions-codespell@v2 - - go: - runs-on: ubuntu-latest - needs: - - filter - if: needs.filter.outputs.golang == 'true' - steps: - - name: Install Go - uses: actions/setup-go@v5 - with: - go-version: 1.22.5 - - - name: Checkout code - uses: actions/checkout@v4 - - - name: Check Code Formatting - run: | - test -z "$(gofmt -d ${{ needs.filter.outputs.golang_files }})" || exit 1 diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 335bec2d..95c85fe9 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -1,3 +1,4 @@ +--- name: Build release binaries on: diff --git a/.github/workflows/scan.yml b/.github/workflows/scan.yml index ed69aed7..3a194af0 100644 --- a/.github/workflows/scan.yml +++ b/.github/workflows/scan.yml @@ -1,10 +1,11 @@ +--- name: scan on: push: - branches: [ master ] + branches: [master] pull_request: - branches: [ master ] + branches: [master] schedule: - cron: '0 12 * * 6' diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 4d3fd58a..ebe65ab2 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -1,99 +1,264 @@ -# Contributing +# Contributing<a name="contributing"></a> :wave: Hey there! Thanks for considering taking the time to contribute to `git-bug`. This page contains some general guidelines, and instructions for getting started as a contributor to this project. -## Get the source code +<!-- mdformat-toc start --slug=github --maxlevel=4 --minlevel=2 --> + +- [Get the source code](#get-the-source-code) +- [Software requirements](#software-requirements) + - [1.0 | Install nix](#10--install-nix) + - [2.0 | Enable `nix-command` and `flakes`](#20--enable-nix-command-and-flakes) + - [3.0 | Install and configure `direnv`](#30--install-and-configure-direnv) +- [4.0 | Post-installation tasks](#40--post-installation-tasks) + - [4.1 | Open a new shell](#41--open-a-new-shell) +- [Useful development commands](#useful-development-commands) +- [Submitting changes](#submitting-changes) + +<!-- mdformat-toc end --> + +## Get the source code<a name="get-the-source-code"></a> Clone this repository to your system in a way you're comfortable with. Below, we -show a command that [clones the repository][how-to-clone] using SSH, and places -it in `~/code/git-bug`. +show a command that clones the repository using SSH, and places it in +`~/code/git-bug`. ``` git clone git@github.com:git-bug/git-bug ~/code/git-bug ``` -> [!IMPORTANT] +> [!TIP] > If you wish to clone the repository to another location on disk, change -> `~/code/git-bug` to your desired path. The rest of this documentation will -> refer to `~/code/git-bug` in all instances, so make sure you change them -> there, too. +> `~/code/git-bug` to your desired path (e.g. your current directory can be used +> with `.` or by omitting the path argument). The rest of this documentation +> will refer to `~/code/git-bug` in all instances, so make sure you change them +> there to match the location you've cloned the repository. -## Software recommendations +## Software requirements<a name="software-requirements"></a> -While you can install Golang and hack on this project on your own, you're likely -to have a better experience if you install the following software. +This repository uses `nix` to provide a consistent development environment, +ensuring that each contributor has the same revision of each dependency and tool +installed. It is **strongly** encouraged to use `nix` when contributing to +`git-bug` to remove the "it works on my machine" class of errors, and ensure you +have a smoother experience passing the CI pipelines (wrt formatting and such). -### <a name="install-nix"></a> `nix` (_recommended_) +While you can manually install the [tools and packages we use](./flake.nix) and +hack on this project on your own, you will miss out on the hermeticity and +standardization that our development shell provides. You may end up fighting +with failing CI pipelines more often, or have to figure out how to perform +various tasks on your own. Using the development shell ensures you always have +every tool you need to contribute to `git-bug`, and that each tool is always +configured correctly. -[`nix`][install/nix] is used in this repository to provide a common development -shell, with a complete set of the appropriate version of the tools used to work -on `git-bug`. +Because of this, we encourage all contributors to follow the documentation below +to install the dependencies for the development shell. -You can install `nix` by following [the official instructions][install/nix], but -we recommend adding some additional flags in order to enable some (technically -experimental, but largely stable) configuration options: +> [!NOTE] +> In the future, we will provide a container image with `nix` pre-installed and +> everything configured to get you started. This will be able to be pulled like +> any other image, and will be made compatible with VSCode's "devcontainer" +> feature and GitHub Codespaces. +> +> For more information, see the [tracking issue][issue/1364]. -``` -curl -L https://nixos.org/nix/install | sh -s -- --daemon --nix-extra-conf-file <( \ -cat << EOF | sed -e 's/^ *//' - experimental-features = nix-command flakes -EOF -) -``` +______________________________________________________________________ -> [!TIP] -> Make sure you read the prompts from the installation script carefully. After -> installation, you'll need to start a new shell. +### 1.0 | Install nix<a name="10--install-nix"></a> + +To install `nix`, you can follow [the official instructions][install/nix]. + +We recommend following the instructions for `multi-user mode` where applicable, +instead of `single-user mode`. + +> [!IMPORTANT] +> The rest of this document assumes you have successfully installed `nix`. + +______________________________________________________________________ + +### 2.0 | Enable `nix-command` and `flakes`<a name="20--enable-nix-command-and-flakes"></a> + +`nix-command` and `flakes` are two optional configuration properties that we +depend on in order to provide the development shell. You'll need to make sure +that these are enabled. -### <a name="install-direnv"></a> `direnv` (_recommended_) +<details> +<summary><strong>NixOS</strong></summary> -[`direnv`][install/direnv] is used to automatically activate the development -shell (because of the `.envrc` in the root of this repository). +Add the following to your system configuration: -#### <a name="install-direnv-with-nix"></a> With `nix` +<pre> +nix.settings.experimental-features = [ "nix-command" "flakes" ]; +</pre> + +</details> + +<details> +<summary><strong>Other</strong></summary> + +Add the following to `~/.config/nix.conf` or `/etc/nix/nix.conf`: + +<pre> +experimental-features = nix-command flakes +</pre> + +</details> > [!IMPORTANT] -> If you are not comfortable with `nix`, we recommend [installing `direnv` -> without nix][install/install-direnv-without-nix]. +> The rest of this document assume you have enabled these options. -``` +______________________________________________________________________ + +### 3.0 | Install and configure `direnv`<a name="30--install-and-configure-direnv"></a> + +[`direnv`][install/direnv] can be used to automatically activate the development +shell (using [`//:.envrc`][envrc]). It can be installed either with `nix`, or +independently. + +<details> +<summary><strong>With nix</strong> <em>(suggested for users new to nix)</em></summary> + +<pre> nix --extra-experimental-options 'flakes nix-command' profile install nixpkgs\#direnv -``` +</pre> -There's a second step that is critical -- be sure to [configure your -shell][install/direnv/shell]. +Next, run the following commands to apply the **optional** configuration for +direnv. Be sure to change references to `~/code/git-bug` if you have cloned the +repository somewhere else. -#### <a name="install-direnv-without-nix"></a> Without `nix` +<strong>Create a configuration file for <code>direnv</code></strong> -You can install `direnv` by following [the official -instructions][install/direnv]. There's a second step that is critical -- be sure -to [configure your shell][install/direnv/shell]. +<pre>touch ~/.config/direnv/direnv.toml</pre> -After installation, you'll need to start a new shell. +<strong>Disable the warning for shells with longer load times</strong> -##### <a name="direnv-config"></a> direnv configuration (_recommended_) +_This is optional, but recommended, as it helps reduce visual clutter._ -If you install `direnv`, it is recommended to set the following configuration -options to improve your user experience. At the time of writing, these go in -`~/.config/direnv/direnv.toml`. +<pre> +nix run nixpkgs\#dasel -- -r toml -f ~/.config/direnv/direnv.toml \ + put -t int -v 0 ".global.warn_timeout" +</pre> -This configuration, namely, the `whitelist.exact` property, will ensure that -`direnv` always automatically sources the `.envrc` in this repository. +<strong>Disable printing of the environment variables that change</strong> -``` -hide_env_diff = true -warn_timeout = 0 +_This is optional, but recommended, as it helps reduce visual clutter._ -[whitelist] -exact = ["~/code/git-bug/.envrc"] -``` +<pre> +nix run nixpkgs\#dasel -- -r toml -f ~/.config/direnv/direnv.toml \ + put -t bool -v true ".global.hide_env_diff" +</pre> -> [!IMPORTANT] -> Make sure you change the `~/code/git-bug` portion of the string to the -> appropriate path (the path that you cloned this repository to on your system). +<strong>Automatically activate the development shell</strong> -[install/nix]: https://nix.dev/install-nix +_This is optional, but strongly recommended._ + +<pre> +nix run nixpkgs\#dasel -- -r toml -f ~/.config/direnv.toml \ + put -v "~/code/git-bug/.envrc" ".whitelist.exact[]" +</pre> + +Alternatively, simply run `direnv allow` after moving into the repository for +the first time. + +> **IMPORTANT**<br /> If you choose not to allow the shell to be automatically +> activated, you will need to type `nix develop` every time you want to activate +> it, and this will swap you into bash and change your prompt. You'll have a far +> better experience allowing `direnv` to automatically manage activation and +> deactivation. + +<strong>Configure your shell</strong> + +This final step is crucial -- be sure to +[configure your shell][install/direnv/shell] for direnv. + +</details> + +<details> +<summary><strong>Using <code>home-manager</code></strong></summary> + +<pre> +programs.direnv = { + enable = true; + nix-direnv.enable = true; + + # one of the following, depending on your shell + # enableZshIntegration = true; + # enableBashIntegration = true; + # enableFishIntegration = true; + # enableNushellIntegration = true; + + config = { + hide_env_diff = true; + warn_timeout = 0; + + whitelist.exact = [ "~/code/git-bug/.envrc" ]; + }; +} +</pre> + +</details> + +______________________________________________________________________ + +## 4.0 | Post-installation tasks<a name="40--post-installation-tasks"></a> + +Congratulations! If you've reached this section of the documentation, chances +are that you have a working development environment for contributing to this +repository. Read below for some additional tasks you should complete. + +### 4.1 | Open a new shell<a name="41--open-a-new-shell"></a> + +In order for the installation to take effect, you will need to open a new shell. +It is recommended to do this and complete the test (described below) prior to +closing the shell you ran the installation script in, just in case you run into +issues and need to refer to any output it provided. + +______________________________________________________________________ + +## Useful development commands<a name="useful-development-commands"></a> + +- `make build` - build `git-bug` and output the binary at `./git-bug` + - `make build/debug` - build a debugger-friendly binary +- `make install` - build `git-bug`, and install it to `$GOPATH/bin` +- `nix fmt` - format everything (configured in [`//:treefmt.nix`][treefmt]) + - `nix fmt <path...>` to restrict the scope to given directories or files + - see `nix fmt --help` for more information +- `go generate` - generate cli documentation and shell completion files + - this is automatically executed by many `make` targets, e.g. `make build` +- `go test ./commands -update` - update golden files used in tests + - this is _required_ when changing the output of CLI commands, if the files in + `//commands/testdata/...` do not match the new output format + +> [!NOTE] +> There is an ongoing effort to simplify the commands you need to call in our +> environment, with a trend toward `nix`, while `make` may continue to be +> supported for common workflows (e.g. building a release binary). + +## Submitting changes<a name="submitting-changes"></a> + +You can submit your changes in the typical fork-based workflow to this +repository on GitHub. That is: fork this repository, push to a branch to your +repository, and create a pull request. + +If you are in the development shell, you have the `gh` command line tool +available for use with github. + +______________________________________________________________________ + +##### See more + +- [An overview of the architecture][doc/design/arch] +- [Learn about the data model][doc/design/model] +- [Creating a new bridge][doc/design/bridges] +- [See how to create a new entity][example-entity] + +[doc/design/arch]: ./doc/design/architecture.md +[doc/design/bridges]: ./doc/design/bridges.md +[doc/design/model]: ./doc/design/data-model.md +[envrc]: ./.envrc +[example-entity]: ./entity/dag/example_test.go [install/direnv]: https://github.com/direnv/direnv/blob/master/docs/installation.md [install/direnv/shell]: https://github.com/direnv/direnv/blob/master/docs/hook.md +[install/nix]: https://nix.dev/install-nix +[issue/1364]: https://github.com/git-bug/git-bug/issues/1364 +[treefmt]: ./treefmt.nix diff --git a/INSTALLATION.md b/INSTALLATION.md new file mode 100644 index 00000000..d4a2f457 --- /dev/null +++ b/INSTALLATION.md @@ -0,0 +1,263 @@ +<!-- + NOTE TO CONTRIBUTORS: + + We use HTML elements within <details> in order to avoid parsing errors with + GFM caused by triple-backtick blocks or alert elements being nested next to + the summary or beginning of the <details> block. + + Please keep this in mind as you make changes. +--> + +# Installation Guide<a name="installation-guide"></a> + +`git-bug` is distributed as a single binary, and is available for multiple +platforms. Follow this document for instructions on how to install `git-bug`, +and verify your installation. + +<!-- mdformat-toc start --slug=github --maxlevel=4 --minlevel=2 --> + +- [Download a pre-compiled release binary](#download-a-pre-compiled-release-binary) +- [Linux](#linux) + - [Arch Linux](#arch-linux) + - [Nixpkgs](#nixpkgs) +- [FreeBSD](#freebsd) +- [MacOS](#macos) +- [Windows](#windows) +- [Build from source](#build-from-source) +- [Verify your installation](#verify-your-installation) + +<!-- mdformat-toc end --> + +## Download a pre-compiled release binary<a name="download-a-pre-compiled-release-binary"></a> + +You can download the latest release binary from [the release page][rel/latest], +making sure to grab the appropriate binary for your system. + +Next, rename the binary to `git-bug`, or `git-bug.exe` if you're using Windows. + +Finally, place the binary in a directory that's in your `PATH`. That's it! You +should now have `git-bug` available as a command line tool. + +## Linux<a name="linux"></a> + +`git-bug` is available on a variety of Linux distributions, but how you install +it depends on your distribution and package manager(s), as there is no standard +package manager common to all distributions. + +### Arch Linux<a name="arch-linux"></a> + +`git-bug` is available in the [Arch Linux User Repository (AUR)][p/aur]. + +Below, you'll find a **non-exhaustive** list of commands that use common third +party tools for installing packages from the AUR. + +<details><summary>Using <strong>aurutils</strong></summary> +<pre>aur sync git-bug-bin && pacman -Syu git-bug-bin</pre> +</details> + +<details><summary>Using <strong>yay</strong></summary> +<pre>yay -S git-bug-bin</pre> +</details> + +### Nixpkgs<a name="nixpkgs"></a> + +`git-bug` is available via [nixpkgs][p/nix]. + +<details><summary>Using <strong>home-manager</strong></summary> +<pre> +home.package = with pkgs; [ + git-bug +]; +</pre> +</details> + +<details><summary>Using <strong>system configuration</strong></summary> +<pre> +environment.systemPackages = with pkgs; [ + git-bug +]; +</pre> +</details> + +<details><summary>Using <strong>nix profile</strong></summary> +<pre>nix profile install nixpkgs\#git-bug</pre> +</details> + +<details><summary>Temporary installation with <strong>nix shell</strong></summary> +<pre> +nix shell nixpkgs\#git-bug +</pre> +</details> + +## FreeBSD<a name="freebsd"></a> + +`git-bug` is available on FreeBSD through a few different methods. + +<details><summary>Using <strong>pkg</strong></summary> +<pre>pkg install git-bug</pre> +</details> + +<details><summary>Using the <strong>ports</strong> collection</summary> +<pre>make -C /usr/ports/devel/git-bug install clean</pre> +</details> + +## MacOS<a name="macos"></a> + +`git-bug` is shipped via [**Homebrew**][brew.sh]: + +``` +brew install git-bug +``` + +## Windows<a name="windows"></a> + +`git-bug` is shipped via `scoop`: + +``` +scoop install git-bug +``` + +## Build from source<a name="build-from-source"></a> + +You can also build `git-bug` from source, if you wish. You'll need the following +dependencies: + +- `git` +- `go` +- `make` + +Ensure that the `go` binary directory (`$GOPATH/bin`) is in your `PATH`. It is +recommended to set this within your shell configuration file(s), such as +`~/.zprofile` or `~/.bashrc`. + +``` +export PATH=$PATH:$(go env GOROOT)/bin:$(go env GOPATH)/bin +``` + +> [!NOTE] +> The commands below assume you do not want to keep the repository on disk, and +> thus clones the repository to a new temporary directory and performs a +> lightweight clone in order to reduce network latency and data transfer. +> +> As a result, the repository cloned during these steps will not contain the +> full history. If that is important to you, clone the repository using the +> method you prefer, check out your preferred revision, and run `make install`. + +**First, create a new repository on disk:** + +``` +cd $(mktemp -d) && git init . +``` + +**Next, set the remote to the upstream source:** + +``` +git remote add origin git@github.com:git-bug/git-bug.git +``` + +Next, choose whether you want to build from a release tag, branch, or +development head and expand the instructions below. + +<details><summary>Build from <strong>a release tag</strong></summary> + +First, list all of the tags from the repository (we use `sed` in the command +below to filter out some unnecessary visual noise): + +<pre> +git ls-remote origin refs/tags/\* | sed -e 's/refs\/tags\///' +</pre> + +You'll see output similar to: + +<pre> +c1a08111b603403d4ee0a78c1214f322fecaa3ca 0.1.0 +d959acc29dcbc467790ae87389f9569bb830c8c6 0.2.0 +ad59f77fd425b00ae4b8d7360a64dc3dc1c73bd0 0.3.0 +... +</pre> + +<blockquote><strong>Tip</strong><p> +The <em>tags</em> are in the right-most column. Old revisions up to and +including <code>0.7.1</code> do not contain a <em>v</em> prefix, however, all +revisions after, do. +</p></blockquote> + +Select the tag you wish to build, and fetch it using the command below. Be sure +to replace <code>REPLACE-ME</code> with the tag you selected: + +<pre> +git fetch --no-tags --depth 1 origin +refs/tags/REPLACE-ME:refs/tags/REPLACE-ME +</pre> + +<blockquote><strong>NOTE</strong><p> +The <code>--no-tags</code> flag might seem out of place, since we <em>are</em> +fetching a tag, but it isn't -- the reason we use this is avoid fetching other +tags, in case you have <code>fetch.pruneTags</code> enabled in your global +configuration, which causes <code>git</code> to fetch <em>all</em> tags. +</p></blockquote> + +Next, check out the tag, replacing <code>REPLACE-ME</code> with the tag you +selected: + +<pre> +git checkout REPLACE-ME +</pre> + +Finally, run the <code>install</code> target from <code>//:Makefile</code>: + +<pre> +make install +</pre> + +This will build <code>git-bug</code> and place it in your Go binary directory. + +</details> + +<details> +<summary> +Build the <strong>unstable development <code>HEAD</code></strong> +</summary> + +First, fetch the most recent commit for the default branch: + +<pre> +git fetch --no-tags --depth 1 origin HEAD:refs/remotes/origin/HEAD +</pre> + +Next, check out the tree you pulled: + +<pre> +git checkout origin/HEAD +</pre> + +Finally, run the <code>install</code> target from <code>//:Makefile</code>: + +<pre> +make install +</pre> + +This will build <code>git-bug</code> and place it in your Go binary directory. + +</details> + +## Verify your installation<a name="verify-your-installation"></a> + +To verify that `git-bug` was installed correctly, you can run the following +command. If you see output similar to what's shown below (and without any +errors), you're all set! + +``` +git bug version +``` + +______________________________________________________________________ + +##### See more + +- [Documentation home][docs/home] + +[brew.sh]: https://brew.sh +[docs/home]: ./doc +[p/aur]: https://aur.archlinux.org/packages/git-bug-bin +[p/nix]: https://github.com/NixOS/nixpkgs/blob/nixos-unstable/pkgs/applications/version-management/git-bug/default.nix +[rel/latest]: https://github.com/git-bug/git-bug/releases/latest @@ -19,9 +19,9 @@ build: go generate go build -ldflags "$(LDFLAGS)" . -# produce a build debugger friendly -.PHONY: debug-build -debug-build: +# produce a debugger-friendly build +.PHONY: build/debug +build/debug: go generate go build -ldflags "$(LDFLAGS)" -gcflags=all="-N -l" . @@ -1,336 +1,140 @@ -<p align="center"> - <img width="150px" src="https://cdn.rawgit.com/git-bug/git-bug/master/misc/logo/logo-alpha-flat-bg.svg"> -</p> -<h1 align="center">git-bug</h1> - <div align="center"> -[](#backers) -[](#sponsors) -[](http://www.gnu.org/licenses/gpl-3.0) -[](https://godoc.org/github.com/git-bug/git-bug) -[](https://goreportcard.com/report/github.com/git-bug/git-bug) -[](https://gitter.im/the-git-bug/Lobby) - -</div> - -`git-bug` is a bug tracker that: - -- **is fully embedded in git**: you only need your git repository to have a bug tracker -- **is distributed**: use your normal git remote to collaborate, push and pull your bugs! -- **works offline**: in a plane or under the sea? Keep reading and writing bugs! -- **prevents vendor lock-in**: your usual service is down or went bad? You already have a full backup. -- **is fast**: listing bugs or opening them is a matter of milliseconds -- **doesn't pollute your project**: no files are added in your project -- **integrates with your tooling**: use the UI you like (CLI, terminal, web) or integrate with your existing tools through the CLI or the GraphQL API -- **bridges to other bug trackers**: use [bridges](#bridges) to import and export to other trackers. - -## Help needed! - -This project has grown bigger than I can handle by myself, especially with a day job. I'm looking for people to help on or maintain part of it: -- each bridges (go) -- the terminal UI (go) -- the web UI (Typescript/React/GraphQL) - -Individually, those pieces are not especially complex but doing everything make it hard for me to focus on the core where things get more complicated. If this is useful for you or you just want to join the fun, maybe consider it? - -## Installation - -<details><summary>Pre-compiled binaries</summary> - -1. Go to the [release page](https://github.com/git-bug/git-bug/releases/latest) and download the appropriate binary for your system. -2. Copy the binary anywhere in your $PATH -3. Rename the binary to `git-bug` (or `git-bug.exe` on windows) - -That's all ! - -</details> - -<details><summary>Windows packages</summary> - -* [Scoop](https://github.com/ScoopInstaller/Main/blob/master/bucket/git-bug.json) - ``` - scoop install git-bug - ``` - -</details> - -<details><summary>Linux packages</summary> - -* [Archlinux (AUR)](https://aur.archlinux.org/packages/?K=git-bug) -* [NixOS](https://github.com/NixOS/nixpkgs/blob/master/pkgs/applications/version-management/git-and-tools/git-bug/default.nix#L31) - -</details> - -<details><summary>macOS packages</summary> - -* [Homebrew](https://formulae.brew.sh/formula/git-bug) - ``` - brew install git-bug - ``` - -</details> - -<details><summary>FreeBSD package/port</summary> - -Install via the package manager - ``` - pkg install git-bug - ``` - -Or from the ports collection - ``` - cd /usr/ports/devel/git-bug && make install clean - ``` - -</details> - -<details><summary>Compile from git (unstable)</summary> - -```shell -git clone https://github.com/git-bug/git-bug.git -cd git-bug -make install -``` - -If it's not done already, add the golang binary directory in your PATH: - -```bash -export PATH=$PATH:$(go env GOROOT)/bin:$(go env GOPATH)/bin -``` - -</details> - -## Workflows - -There are multiple ways to use `git-bug`: - -<details><summary>Native workflow</summary> -<p align="center"> - <img src="misc/diagrams/native_workflow.png" alt="Native workflow"> -</p> - -This is the pure `git-bug` experience. In a similar fashion as with code, use `git bug push` and `git bug pull` to push and pull your bugs between git remotes and collaborate with your teammate. - -</details> - -<details><summary>Bridge workflow</summary> -<p align="center"> - <img src="misc/diagrams/bridge_workflow.png" alt="Bridge workflow"> -</p> - -As `git-bug` has bridges with other bug-trackers, you can use it as your personal local remote interface. Sync with `git bug bridge pull` and `git bug bridge push`, work from your terminal, integrate into your editor, it's up to you. And it works offline ! - -</details> - -<details><summary>Web UI workflow (WIP)</summary> -<p align="center"> - <img src="misc/diagrams/webui-workflow.png" alt="Web UI workflow"> -</p> - -Often, projects needs to have their bug-tracker public and accept editions from anyone facing a problem. To support this workflow, `git-bug` aims to have the web UI accept external OAuth authentication and act as a public portal. However the web UI is not up to speed for that yet. Contribution are very much welcome! +<img width="64px" src="https://cdn.rawgit.com/git-bug/git-bug/master/misc/logo/logo-alpha-flat-bg.svg"> -</details> +# git-bug: a decentralized issue tracker -## CLI usage +[![Build Status][ci/badge]][ci/url] -Create a new identity: +[![Backers on Open Collective][backers/badge]][oc] +[![Sponsors on Open Collective][sponsors/badge]][oc] +[![GPL v3 License][license/badge]][license/url] +[![GoDoc][godoc/badge]][godoc/url] +[![Go Report Card][report-card/badge]][report-card/url] +[![Matrix][matrix/badge]][matrix/url] -``` -git bug user create -``` +[Issues] - [Documentation][doc] - [Feedback][discuss] -Create a new bug: - -``` -git bug add -``` - -Your favorite editor will open to write a title and a message. - -You can push your new entry to a remote: -``` -git bug push [<remote>] -``` - -And pull for updates: -``` -git bug pull [<remote>] -``` - -List existing bugs: -``` -git bug ls -``` - -Filter and sort bugs using a [query](doc/queries.md): -``` -git bug ls "status:open sort:edit" -``` - -Search for bugs by text content: -``` -git bug ls "foo bar" baz -``` - -You can now use commands like `show`, `comment`, `open` or `close` to display and modify bugs. For more details about each command, you can run `git bug <command> --help` or read the [command's documentation](doc/md/git-bug.md). - -## Interactive terminal UI - -An interactive terminal UI is available using the command `git bug termui` to browse and edit bugs. - - - -## Web UI - -You can launch a rich Web UI with `git bug webui`. - -<p align="center"> - <img src="misc/webui1.png" alt="Web UI screenshot 1" width="880"> -</p> - -<p align="center"> - <img src="misc/webui2.png" alt="Web UI screenshot 2" width="880"> -</p> - -This web UI is entirely packed inside the same go binary and serve static content through a localhost http server. - -The web UI interact with the backend through a GraphQL API. The schema is available [here](api/graphql/schema). - -## Bridges - -✅: working 🟠: partial implementation ❌: not working - -### Importer implementations - -| | Github | Gitlab | Jira | Launchpad | -|-------------------------------------------------|:------:|:------:|:----:|:---------:| -| **incremental**<br/>(can import more than once) | ✅ | ✅ | ✅ | ❌ | -| **with resume**<br/>(download only new data) | ✅ | ✅ | ✅ | ❌ | -| **identities** | 🟠 | 🟠 | 🟠 | 🟠 | -| **bugs** | ✅ | ✅ | ✅ | 🟠 | -| **board** | ❌ | ❌ | ❌ | ❌ | -| **media/files** | ❌ | ❌ | ❌ | ❌ | -| **automated test suite** | ✅ | ✅ | ❌ | ❌ | - -### Exporter implementations - -| | Github | Gitlab | Jira | Launchpad | -|--------------------------|:------:|:------:|:----:|:---------:| -| **identities** | 🟠 | 🟠 | 🟠 | 🟠 | -| **bug** | ✅ | ✅ | ✅ | ❌ | -| **board** | ❌ | ❌ | ❌ | ❌ | -| **automated test suite** | ✅ | ✅ | ❌ | ❌ | - -#### Bridge usage - -Interactively configure a new github bridge: - -```bash -git bug bridge new -``` - -Or manually: - -```bash -git bug bridge new \ - --name=<bridge> \ - --target=github \ - --url=https://github.com/git-bug/git-bug \ - --login=<login> \ - --token=<token> -``` - -Import bugs: - -```bash -git bug bridge pull [<name>] -``` - -Export modifications: - -```bash -git bug bridge push [<name>] -``` - -Deleting a bridge: - -```bash -git bug bridge rm [<name>] -``` +</div> -## Internals +## Overview<a name="overview"></a> -Interested in how it works ? Have a look at the [data model](doc/model.md) and the [internal bird-view](doc/architecture.md). +[git-bug](https://github.com/git-bug/git-bug) is a standalone, distributed, +offline-first issue management tool that embeds issues, comments, and more as +objects in a git repository (_not files!_), enabling you to push and pull them +to one or more remotes. -Or maybe you want to [make your own distributed data-structure in git](entity/dag/example_test.go) ? +<!-- mdformat-toc start --slug=github --maxlevel=6 --minlevel=2 --> -See also all the [docs](doc). +- [Overview](#overview) +- [Key Features](#key-features) +- [Getting Started](#getting-started) +- [Our Community](#our-community) + - [Backers :star:](#backers-star) + - [Sponsors :star2:](#sponsors-star2) +- [License](#license) -## Misc +<!-- mdformat-toc end --> -- [Bash, Zsh, fish, powershell completion](misc/completion) -- [ManPages](doc/man) +## Key Features<a name="key-features"></a> -## Planned features +- **Native Git Storage:** Manage issues, users, and comments directly within + your repository - keeping everything versioned and clutter-free +- **Distributed & Versioned:** Leverage Git’s decentralized architecture to work + offline and sync seamlessly later +- **Lightning Fast:** List and search issues in mere _milliseconds_ +- **Third-Party Bridges:** Easily synchronize issues with platforms like GitHub + and GitLab [using bridges][doc/usage/bridges] +- **Flexible Interfaces:** Choose how you interact - via CLI, TUI, or a web + browser +- **Effortless Integration:** Start managing issues your repository with minimal + setup -The [feature matrix](doc/feature_matrix.md) gives a good overview of what is planned, without being exhaustive. +## Getting Started<a name="getting-started"></a> -Additional planned feature: -- webUI that can be used as a public portal to accept user's input -- inflatable raptor +- :triangular_flag_on_post: **Install:** Check out + [`//:INSTALLATION.md`][doc/install] for step-by-step installation instructions + or explore [the latest release][rel/latest] to get started immediately. +- :page_with_curl: **Explore:** Read [the documentation][doc] to learn how to + use `git-bug` effectively +- :computer: **Contribute:** Interested in hacking on `git-bug`? Head over to + [`//:CONTRIBUTING.md`][contrib] and see how you can help shape the project +- :speech_balloon: **Connect:** Chat with us live on Matrix at + [`#git-bug:matrix.org`][matrix/url] +- :books: **Discuss:** Browse [existing discussions][discuss] or + [start a new one][discuss/new] to ask questions and share ideas -## Contribute +## Our Community<a name="our-community"></a> -PRs accepted. Drop by the [Gitter lobby](https://gitter.im/the-git-bug/Lobby) or the [Matrix room](https://matrix.to/#/#git-bug:matrix.org) for a chat, look at the [feature matrix](doc/feature_matrix.md) or browse the issues to see what is worked on or discussed. +`git-bug` thrives thanks to the passion of its [contributors], the generosity of +independent [backers][oc], and the strategic support of our [sponsors][oc]. Each +of you plays a crucial role in our journey, and we deeply appreciate every +contribution that helps drive our project forward. -```shell -git clone git@github.com:git-bug/git-bug.git -``` +_[Make a contribution][oc] to support this project and get featured below!_ -You can now run `make` to build the project, or `make install` to install the binary in `$GOPATH/bin/`. +### Backers :star:<a name="backers-star"></a> -To work on the web UI, have a look at [the dedicated Readme.](webui/Readme.md) +<div align="center"> -Some tests for the CLI use golden files, if the output of CLI commands is -changed, run the following command, then inspect the changed files in -`commands/testdata/...` to make sure the output text is as expected: +[![backers][backers/image]][oc] -```shell -go test ./commands -update -``` +</div> -## Contributors :heart: +### Sponsors :star2:<a name="sponsors-star2"></a> -This project exists thanks to all the people who contribute. -<a href="https://github.com/git-bug/git-bug/graphs/contributors"><img src="https://opencollective.com/git-bug/contributors.svg?width=890&button=false" /></a> +<div align="center"> +[![][sponsor/0]][sponsor/0/url] -## Backers +</div> -Thank you to all our backers! 🙏 [[Become a backer](https://opencollective.com/git-bug#backer)] +## License<a name="license"></a> -<a href="https://opencollective.com/git-bug#backers" target="_blank"><img src="https://opencollective.com/git-bug/tiers/backer.svg?width=890"></a> +Unless otherwise stated, this project and all assets within it are released +under [GPLv3][license/url] or later, copyright [Michael Muré][gh/mm]. +The `git-bug` logo is authored by and copyright [Viktor Teplov][gh/vandesign], +released under a [CC BY 4.0][license/logo] license. -## Sponsors +______________________________________________________________________ -Support this project by becoming a sponsor. Your logo will show up here with a link to your website. [[Become a sponsor](https://opencollective.com/git-bug#sponsor)] +<div align="center"> -<a href="https://opencollective.com/git-bug/sponsor/0/website" target="_blank"><img src="https://opencollective.com/git-bug/tiers/sponsor/0/avatar.svg"></a> -<a href="https://opencollective.com/git-bug/sponsor/1/website" target="_blank"><img src="https://opencollective.com/git-bug/tiers/sponsor/1/avatar.svg"></a> -<a href="https://opencollective.com/git-bug/sponsor/2/website" target="_blank"><img src="https://opencollective.com/git-bug/tiers/sponsor/2/avatar.svg"></a> -<a href="https://opencollective.com/git-bug/sponsor/3/website" target="_blank"><img src="https://opencollective.com/git-bug/tiers/sponsor/3/avatar.svg"></a> -<a href="https://opencollective.com/git-bug/sponsor/4/website" target="_blank"><img src="https://opencollective.com/git-bug/tiers/sponsor/4/avatar.svg"></a> -<a href="https://opencollective.com/git-bug/sponsor/5/website" target="_blank"><img src="https://opencollective.com/git-bug/tiers/sponsor/5/avatar.svg"></a> -<a href="https://opencollective.com/git-bug/sponsor/6/website" target="_blank"><img src="https://opencollective.com/git-bug/tiers/sponsor/6/avatar.svg"></a> -<a href="https://opencollective.com/git-bug/sponsor/7/website" target="_blank"><img src="https://opencollective.com/git-bug/tiers/sponsor/7/avatar.svg"></a> -<a href="https://opencollective.com/git-bug/sponsor/8/website" target="_blank"><img src="https://opencollective.com/git-bug/tiers/sponsor/8/avatar.svg"></a> -<a href="https://opencollective.com/git-bug/sponsor/9/website" target="_blank"><img src="https://opencollective.com/git-bug/tiers/sponsor/9/avatar.svg"></a> +This project and its vibrant community was initially dreamt up and built by +[Michael Muré][gh/mm]. +Thank you for all of your hard work! -## License +:heart: -Unless otherwise stated, this project is released under the [GPLv3](LICENSE) or later license © Michael Muré. +</div> -The git-bug logo by [Viktor Teplov](https://github.com/vandesign) is released under the [Creative Commons Attribution 4.0 International (CC BY 4.0)](misc/logo/LICENSE) license © Viktor Teplov. +[backers/badge]: https://opencollective.com/git-bug/backers/badge.svg +[backers/image]: https://opencollective.com/git-bug/tiers/backer.svg?avatarHeight=50 +[ci/badge]: https://github.com/git-bug/git-bug/actions/workflows/trunk.yml/badge.svg +[ci/url]: https://github.com/git-bug/git-bug/actions/workflows/trunk.yml +[contrib]: ./CONTRIBUTING.md +[contributors]: https://github.com/git-bug/git-bug/graphs/contributors +[discuss]: https://github.com/git-bug/git-bug/discussions +[discuss/new]: https://github.com/git-bug/git-bug/discussions/new/choose +[doc]: ./doc +[doc/install]: ./INSTALLATION.md +[doc/usage/bridges]: ./doc/usage/bridges.md +[gh/mm]: https://github.com/MichaelMure +[gh/vandesign]: https://github.com/vandesign +[godoc/badge]: https://godoc.org/github.com/git-bug/git-bug?status.svg +[godoc/url]: https://godoc.org/github.com/git-bug/git-bug +[issues]: https://github.com/git-bug/git-bug/issues +[license/badge]: https://img.shields.io/badge/License-GPLv3+-blue.svg +[license/logo]: ./misc/logo/LICENSE +[license/url]: ./LICENSE +[matrix/badge]: https://img.shields.io/badge/chat%20on%20matrix-%23238636 +[matrix/url]: https://matrix.to/#/#git-bug:matrix.org +[oc]: https://opencollective.com/git-bug +[rel/latest]: https://github.com/git-bug/git-bug/releases/latest +[report-card/badge]: https://goreportcard.com/badge/github.com/git-bug/git-bug +[report-card/url]: https://goreportcard.com/report/github.com/git-bug/git-bug +[sponsor/0]: https://opencollective.com/git-bug/tiers/sponsor/0/avatar.svg +[sponsor/0/url]: https://opencollective.com/git-bug/sponsor/0/website +[sponsors/badge]: https://opencollective.com/git-bug/sponsors/badge.svg diff --git a/api/graphql/gqlgen.yml b/api/graphql/gqlgen.yml index c20b7618..8d6daf4f 100644 --- a/api/graphql/gqlgen.yml +++ b/api/graphql/gqlgen.yml @@ -1,3 +1,4 @@ +--- schema: "schema/*.graphql" exec: layout: follow-schema diff --git a/bridge/gitlab/export_test.go b/bridge/gitlab/export_test.go index 6846cb21..8098c1d0 100644 --- a/bridge/gitlab/export_test.go +++ b/bridge/gitlab/export_test.go @@ -182,12 +182,12 @@ func TestGitlabPushPull(t *testing.T) { fmt.Println("created repository", projectName) // Make sure to remove the Gitlab repository when the test end - defer func(t *testing.T) { - if err := deleteRepository(context.TODO(), projectID, token); err != nil { - t.Fatal(err) - } - fmt.Println("deleted repository:", projectName) - }(t) + // defer func(t *testing.T) { + // if err := deleteRepository(context.TODO(), projectID, token); err != nil { + // t.Fatal(err) + // } + // fmt.Println("deleted repository:", projectName) + // }(t) interrupt.RegisterCleaner(func() error { return deleteRepository(context.TODO(), projectID, token) diff --git a/bridge/gitlab/import.go b/bridge/gitlab/import.go index b33a2179..b51b924d 100644 --- a/bridge/gitlab/import.go +++ b/bridge/gitlab/import.go @@ -81,7 +81,7 @@ func (gi *gitlabImporter) ImportAll(ctx context.Context, repo *cache.RepoCache, continue } if err := gi.ensureIssueEvent(repo, b, issue, e); err != nil { - err := fmt.Errorf("issue event creation: %v", err) + err := fmt.Errorf("issue event creation: %v (%v)", err, e) out <- core.NewImportError(err, entity.Id(e.ID())) } } diff --git a/doc/README.md b/doc/README.md index e172ffd6..1b75798a 100644 --- a/doc/README.md +++ b/doc/README.md @@ -1,15 +1,27 @@ # Documentation -## For users +## Usage -- [data model](model.md) describes how the data model works and why. -- [query language](queries.md) describes git-bug's query language. -- [How-to: Read and edit offline your Github/Gitlab/Jira issues with git-bug](howto-github.md) +The documentation listed below aims to help provide insight into the usage of +`git-bug`. + +- Read about the different [types of workflows](./usage/workflows.md) and check + the [feature matrix](./feature-matrix.md) to learn about `git-bug` +- Check the [CLI documentation](./md/git-bug.md) for commands and options (or + run `man git-bug` after [installation](../INSTALLATION.md)) +- Filter results using the [query language](./usage/query-language.md) +- Learn how to [sync third party issues](./usage/third-party.md) for offline + reading and editing ## For developers -- :exclamation: [data model](model.md) describes how the data model works and why. -- :exclamation: [internal bird-view](architecture.md) gives an overview of the project architecture. -- :exclamation: [Entity/DAG](../entity/dag/example_test.go) explains how to easily make your own distributed entity in git. -- [query language](queries.md) describes git-bug's query language. -- [JIRA bridge dev notes](jira_bridge.md) +- Read through [`//:CONTRIBUTING.md`][contrib] +- Get a [bird's-eye overview](./design/architecture.md) of the architecture +- Read about the [data model](./design/data-model.md) to gain a deeper + understanding of the internals that comprise `git-bug` +- [`//entity/dag:example_test.go`](../entity/dag/example_test.go) is a good + reference to learn how to create a new distributed entity +- Read the [bridge design documents](./design/bridges) to learn more about each + bridge + +[contrib]: ../CONTRIBUTING.md diff --git a/misc/diagrams/bridge_workflow.png b/doc/assets/bridge-workflow.png Binary files differindex 18fb8a77..18fb8a77 100644 --- a/misc/diagrams/bridge_workflow.png +++ b/doc/assets/bridge-workflow.png diff --git a/doc/bug-graph-1.png b/doc/assets/bug-graph.png Binary files differindex 5f6f931f..5f6f931f 100644 --- a/doc/bug-graph-1.png +++ b/doc/assets/bug-graph.png diff --git a/doc/merge1.png b/doc/assets/merge-1.png Binary files differindex 7ba24173..7ba24173 100644 --- a/doc/merge1.png +++ b/doc/assets/merge-1.png diff --git a/doc/merge2.png b/doc/assets/merge-2.png Binary files differindex 614be5e8..614be5e8 100644 --- a/doc/merge2.png +++ b/doc/assets/merge-2.png diff --git a/misc/diagrams/native_workflow.png b/doc/assets/native-workflow.png Binary files differindex 8fa9d46c..8fa9d46c 100644 --- a/misc/diagrams/native_workflow.png +++ b/doc/assets/native-workflow.png diff --git a/doc/operations.png b/doc/assets/operations.png Binary files differindex 79b6c8e7..79b6c8e7 100644 --- a/doc/operations.png +++ b/doc/assets/operations.png diff --git a/misc/termui_recording.gif b/doc/assets/tui-recording.gif Binary files differindex 43ba6eec..43ba6eec 100644 --- a/misc/termui_recording.gif +++ b/doc/assets/tui-recording.gif diff --git a/misc/webui2.png b/doc/assets/web-screenshot-comments.png Binary files differindex f4b8dceb..f4b8dceb 100644 --- a/misc/webui2.png +++ b/doc/assets/web-screenshot-comments.png diff --git a/misc/webui1.png b/doc/assets/web-screenshot-feed.png Binary files differindex 502e71f0..502e71f0 100644 --- a/misc/webui1.png +++ b/doc/assets/web-screenshot-feed.png diff --git a/misc/diagrams/webui-workflow.png b/doc/assets/webui-workflow.png Binary files differindex 83d20d84..83d20d84 100644 --- a/misc/diagrams/webui-workflow.png +++ b/doc/assets/webui-workflow.png diff --git a/doc/architecture.md b/doc/design/architecture.md index e3a7f0b0..b63c149d 100644 --- a/doc/architecture.md +++ b/doc/design/architecture.md @@ -1,8 +1,10 @@ # Internal architecture -This documentation only provides a bird's-eye view of git-bug's internals. For more details, you should read the other documentation and the various comment/documentation scattered in the codebase. +This documentation only provides a bird's-eye view of git-bug's internals. For +more details, you should read the other documentation and the various +comment/documentation scattered in the codebase. -## Overview +## Overview ``` .--------------. @@ -26,31 +28,46 @@ This documentation only provides a bird's-eye view of git-bug's internals. For m '----------------------------------------------------------' ``` -Here is the internal architecture of git-bug. As you can see, it's a layered architecture. +Here is the internal architecture of git-bug. As you can see, it's a layered +architecture. -As a general rule of thumb, each layer uses the directly underlying layer to access and interact with the data. As an example, the `commands` package will not directly use the `bug` or `repository` package. It will request the data from the `cache` layer and go from there. Of course, the `commands` package will ultimately use types defined in the lower level package like `Bug`, but retrieving and changing the data has to go through the `cache` layer to ensure that bugs are properly deduplicated in memory. +As a general rule of thumb, each layer uses the directly underlying layer to +access and interact with the data. As an example, the `commands` package will +not directly use the `bug` or `repository` package. It will request the data +from the `cache` layer and go from there. Of course, the `commands` package will +ultimately use types defined in the lower level package like `Bug`, but +retrieving and changing the data has to go through the `cache` layer to ensure +that bugs are properly deduplicated in memory. ## repository -The package `repository` implement the interaction with the git repository on disk. +The package `repository` implement the interaction with the git repository on +disk. -A series of interfaces (`RepoCommon`, `Repo` and `ClockedRepo`) define convenient for our usage access and manipulation methods for the data stored in git. +A series of interfaces (`RepoCommon`, `Repo` and `ClockedRepo`) define +convenient for our usage access and manipulation methods for the data stored in +git. Those interfaces are implemented by `GitRepo` as well as a mock for testing. ## identity -The package `entities/identity` contains the identity data model and the related low-level functions. +The package `entities/identity` contains the identity data model and the related +low-level functions. In particular, this package contains: -- `Identity`, the fully-featured identity, holding a series of `Version` stored in its dedicated structure in git + +- `Identity`, the fully-featured identity, holding a series of `Version` stored + in its dedicated structure in git - `Bare`, the simple legacy identity, stored directly in a bug `Operation` ## bug -The package `entities/bug` contains the bug data model and the related low-level functions. +The package `entities/bug` contains the bug data model and the related low-level +functions. In particular, this package contains: + - `Operation`, the interface to fulfill for an edit operation of a Bug - `OpBase`, implementing the common code for all operations - `OperationPack`, an array of `Operation` @@ -61,43 +78,72 @@ In particular, this package contains: ## cache -The package `cache` implements a caching layer on top of the low-level `bug` and `identity`package to provide efficient querying, filtering, sorting. +The package `cache` implements a caching layer on top of the low-level `bug` and +`identity`package to provide efficient querying, filtering, sorting. -This cache main function is to provide some guarantee and features for the upper layers: -1. After being loaded, a Bug is kept in memory in the cache, allowing for fast access later. -2. The cache maintain in memory and on disk a pre-digested excerpt for each bug, allowing for fast querying the whole set of bugs without having to load them individually. -3. The cache guarantee that a single instance of a Bug is loaded at once, avoiding loss of data that we could have with multiple copies in the same process. -4. The same way, the cache maintain in memory a single copy of the loaded identities. +This cache main function is to provide some guarantee and features for the upper +layers: -The cache also protect the on-disk data by locking the git repository for its own usage, by writing a lock file. Of course, normal git operations are not affected, only git-bug related one. +1. After being loaded, a Bug is kept in memory in the cache, allowing for fast + access later. +2. The cache maintain in memory and on disk a pre-digested excerpt for each bug, + allowing for fast querying the whole set of bugs without having to load them + individually. +3. The cache guarantee that a single instance of a Bug is loaded at once, + avoiding loss of data that we could have with multiple copies in the same + process. +4. The same way, the cache maintain in memory a single copy of the loaded + identities. + +The cache also protect the on-disk data by locking the git repository for its +own usage, by writing a lock file. Of course, normal git operations are not +affected, only git-bug related one. In particular, this package contains: -- `BugCache`, wrapping a `Bug` in a cached version in memory, maintaining efficiently a `Snapshot` and providing a simplified API -- `BugExcerpt`, holding a small subset of data for each bug, allowing for a very fast indexing, filtering, sorting and querying -- `IdentityCache`, wrapping an `Identity` in a cached version in memory and providing a simplified API -- `IdentityExcerpt`, holding a small subset of data for each identity, allowing for a very fast indexing, filtering, sorting and querying. + +- `BugCache`, wrapping a `Bug` in a cached version in memory, maintaining + efficiently a `Snapshot` and providing a simplified API +- `BugExcerpt`, holding a small subset of data for each bug, allowing for a very + fast indexing, filtering, sorting and querying +- `IdentityCache`, wrapping an `Identity` in a cached version in memory and + providing a simplified API +- `IdentityExcerpt`, holding a small subset of data for each identity, allowing + for a very fast indexing, filtering, sorting and querying. - `Query` and a series of `Filter` to implement the query language ## commands -The package `commands` contains all the CLI commands and subcommands, implemented with the [cobra](https://github.com/spf13/cobra) library. Thanks to this library, bash and zsh completion, manpages and markdown documentation are automatically generated. +The package `commands` contains all the CLI commands and subcommands, +implemented with the [cobra](https://github.com/spf13/cobra) library. Thanks to +this library, bash and zsh completion, manpages and markdown documentation are +automatically generated. ## termui -The package `termui` contains the interactive terminal user interface, implemented with the [gocui](https://github.com/jroimartin/gocui) library. +The package `termui` contains the interactive terminal user interface, +implemented with the [gocui](https://github.com/jroimartin/gocui) library. ## graphql -The package `graphql` implement the GraphQL API, mapping the data model and providing read/write access from outside the process. This API is in particular used by the webUI but could be used to implement other user interfaces or bridges with other systems. +The package `graphql` implement the GraphQL API, mapping the data model and +providing read/write access from outside the process. This API is in particular +used by the webUI but could be used to implement other user interfaces or +bridges with other systems. ## webui -The package `webui` hold the web based user interface, implemented in both go and javascript. +The package `webui` hold the web based user interface, implemented in both go +and javascript. -The javascript code is compiled and packaged inside the go binary, allowing for a single file distribution of git-bug. +The javascript code is compiled and packaged inside the go binary, allowing for +a single file distribution of git-bug. -When the webUI is started from the CLI command, a localhost HTTP server is started to serve the webUI resources (html, js, css), as well as the GraphQL API. When the webUI is loaded in the browser, it interacts with the git-bug process through the GraphQL API to load and edit bugs. +When the webUI is started from the CLI command, a localhost HTTP server is +started to serve the webUI resources (html, js, css), as well as the GraphQL +API. When the webUI is loaded in the browser, it interacts with the git-bug +process through the GraphQL API to load and edit bugs. ## bridge -The package `bridge` contains the various bridge implementation with other external bug trackers. +The package `bridge` contains the various bridge implementation with other +external bug trackers. diff --git a/doc/jira_bridge.md b/doc/design/bridges/jira.md index bf3c1a8b..c3a7f29f 100644 --- a/doc/jira_bridge.md +++ b/doc/design/bridges/jira.md @@ -19,18 +19,18 @@ Hopefully the bridge will be able to enable synchronization of these soon. ### Credentials JIRA does not support user/personal access tokens. They have experimental -3-legged oauth support but that requires an API token for the app configured -by the server administrator. The only reliable authentication mechanism then is -the username/password and session-token mechanism. We can acquire a session -token programmatically from the username/password but these are very short lived -(i.e. hours or less). As such the bridge currently requires an actual username -and password as user credentials. It supports three options: - -1. Storing both username and password in a separate file referred to by - the `git-config` (I like to use `.git/jira-credentials.json`) +3-legged oauth support but that requires an API token for the app configured by +the server administrator. The only reliable authentication mechanism then is the +username/password and session-token mechanism. We can acquire a session token +programmatically from the username/password but these are very short lived (i.e. +hours or less). As such the bridge currently requires an actual username and +password as user credentials. It supports three options: + +1. Storing both username and password in a separate file referred to by the + `git-config` (I like to use `.git/jira-credentials.json`) 2. Storing the username and password in clear-text in the git config -3. Storing the username only in the git config and asking for the password - on each `push` or `pull`. +3. Storing the username only in the git config and asking for the password on + each `push` or `pull`. ### Issue Creation Defaults @@ -63,7 +63,6 @@ integration activities become easier. See the configuration section below on how to specify the custom field where the JIRA bridge should write this information. - ### Workflows and Transitions JIRA issue states are subject to customizable "workflows" (project managers @@ -128,14 +127,14 @@ identified the match. ### Unlogged Changes Comments (creation and edition) do not show up in the JIRA changelog. However -JIRA reports both a `created` and `updated` date for each comment. If we -import a comment which has an `updated` and `created` field which do not match, -then we treat that as a new comment edition. If we do not already have the -comment imported, then we import an empty comment followed by a comment edition. +JIRA reports both a `created` and `updated` date for each comment. If we import +a comment which has an `updated` and `created` field which do not match, then we +treat that as a new comment edition. If we do not already have the comment +imported, then we import an empty comment followed by a comment edition. -Because comment editions are not uniquely identified in JIRA we identify them -in `git-bug` by concatenating the JIRA issue `id` with the `updated` time of -the edition. +Because comment editions are not uniquely identified in JIRA we identify them in +`git-bug` by concatenating the JIRA issue `id` with the `updated` time of the +edition. ### Workflow Validation (future) @@ -171,8 +170,8 @@ configuration. You can set these options in your `.git/config` file: The format for this config entry is a JSON object containing fields you wish to set during issue creation when exporting bugs. If you provide a value for this -configuration option, it must include at least the `"issuetype"` field, or -the bridge will not be able to export any new issues. +configuration option, it must include at least the `"issuetype"` field, or the +bridge will not be able to export any new issues. Let's say that we want bugs exported to JIRA to have a default issue type of "Story" which is `issuetype` with id `10001`. Then we will add the following @@ -193,7 +192,6 @@ create-issue-defaults = {"issuetype":"10001","customfield_1234":"default"} Note that the content of this value is merged verbatim to the JSON object that is `POST`ed to the JIRA rest API, so you can use arbitrary valid JSON. - ### Assign git-bug id to field If you want the bridge to fill a JIRA field with the `git-bug` id when exporting @@ -207,6 +205,7 @@ create-issue-gitbug-id = "customfield_5678" You can specify the mapping between `git-bug` status and JIRA status id's using the following: + ``` bug-id-map = {\"open\": \"1\", \"closed\": \"6\"} ``` @@ -215,6 +214,7 @@ The format of the map is `<git-bug-status-name>: <jira-status-id>`. In general your jira instance will have more statuses than `git-bug` will and you may map more than one jira-status to a git-bug status. You can do this with `bug-id-revmap`: + ``` bug-id-revmap = {\"10109\": \"open\", \"10006\": \"open\", \"10814\": \"open\"} ``` @@ -230,6 +230,7 @@ requires doublequotes to be escaped (as in the examples above). ### Full example Here is an example configuration with all optional fields set + ``` [git-bug "bridge.default"] project = PROJ @@ -244,22 +245,21 @@ Here is an example configuration with all optional fields set ## To-Do list -* [0cf5c71] Assign git-bug to jira field on import -* [8acce9c] Download and cache workflow representation -* [95e3d45] Implement workflow gui -* [c70e22a] Implement additional query filters for import -* [9ecefaa] Create JIRA mock and add REST unit tests -* [67bf520] Create import/export integration tests -* [1121826] Add unit tests for utilities -* [0597088] Use OS keyring for credentials -* [d3e8f79] Don't count on the `Total` value in paginations - +- \[0cf5c71\] Assign git-bug to jira field on import +- \[8acce9c\] Download and cache workflow representation +- \[95e3d45\] Implement workflow gui +- \[c70e22a\] Implement additional query filters for import +- \[9ecefaa\] Create JIRA mock and add REST unit tests +- \[67bf520\] Create import/export integration tests +- \[1121826\] Add unit tests for utilities +- \[0597088\] Use OS keyring for credentials +- \[d3e8f79\] Don't count on the `Total` value in paginations ## Using CURL to poke at your JIRA's REST API If you need to lookup the `id` for any `status`es or the `schema` for any -creation metadata, you can use CURL to query the API from the command line. -Here are a couple of examples to get you started. +creation metadata, you can use CURL to query the API from the command line. Here +are a couple of examples to get you started. ### Getting a session token @@ -271,8 +271,9 @@ curl \ <serverUrl>/rest/auth/1/session ``` -**Note**: If you have a json pretty printer installed (`sudo apt install jq`), -pipe the output through through that to make things more readable: +[!NOTE] +If you have a json pretty printer installed (`sudo apt install jq`), pipe the +output through through that to make things more readable: ``` curl --silent \ @@ -283,6 +284,7 @@ curl --silent \ ``` example output: + ``` { "session": { @@ -316,6 +318,7 @@ curl --silent \ ``` **example output**: + ``` { "self": "https://jira.example.com/rest/api/2/issuetype/13105", @@ -338,10 +341,8 @@ curl --silent \ ... ``` - ### Get a list of statuses - ``` curl --silent \ --cookie "JSESSIONID={sessionToken}" \ @@ -351,6 +352,7 @@ curl --silent \ ``` **example output:** + ``` [ { diff --git a/doc/cli-convention.md b/doc/design/cli-convention.md index 47eccf69..d65e48db 100644 --- a/doc/cli-convention.md +++ b/doc/design/cli-convention.md @@ -1,6 +1,6 @@ ## Pattern -CLI commands should consistently follow this pattern: +CLI commands should consistently follow this pattern: ``` xxx --> list xxx things if list, otherwise show one diff --git a/doc/design/data-model.md b/doc/design/data-model.md new file mode 100644 index 00000000..0553ed25 --- /dev/null +++ b/doc/design/data-model.md @@ -0,0 +1,215 @@ +# git-bug's reusable entity data model + +This document explains how git-bug's reusable distributed data structure in git +is working. This data structure is capable of: + +- storing an entity (bug, pull-request, config...) and its complete history in + git +- carry signed authorship of editions +- use git remotes as a medium for synchronisation and collaboration +- merge conflicts +- respect the rules you define as to what edition are possible +- carry attached media + +If you are looking for a different writing format or to see how you can easily +make your own, checkout [the example code](../../entity/dag/example_test.go). + +If you are not familiar with +[git internals](https://git-scm.com/book/en/v2/Git-Internals-Git-Objects), you +might first want to read about them, as the `git-bug` data model is built on top +of them. + +## Entities (bug, author, ...) are a series of edit operations + +As entities are stored and edited in multiple processes at the same time, it's +not possible to store the current state like it would be done in a normal +application. If two processes change the same entity and later try to merge the +states, we wouldn't know which change takes precedence or how to merge those +states. + +To deal with this problem, you need a way to merge these changes in a meaningful +way. Instead of storing the final bug data directly, we store a series of edit +`Operation`s. This is a common idea, notably with +[Operation-based CRDTs](https://en.wikipedia.org/wiki/Conflict-free_replicated_data_type#Operation-based_CRDTs). + + + +To get the final state of an entity, we apply these `Operation`s in the correct +order on an empty state, to compute (aka "compile") our view. + +## Entities are stored in git objects + +An `Operation` is a piece of data, including: + +- a type identifier +- an author (a reference to another entity) +- a timestamp (there is also one or two [Lamport time](#time-is-unreliable)) +- all the data required by that operation type (a message, a status ...) +- a random [nonce](https://en.wikipedia.org/wiki/Cryptographic_nonce) to ensure + we have enough entropy, as the operation identifier is a hash of that data + (more on that later) + +These `Operation`s are aggregated in an `OperationPack`, a simple array. An +`OperationPack` represents an edit session of the entity. As the operation's +author is the same for all the `OperationPack` we only store it once. + +We store this pack in git as a git `Blob`; that consists of a string containing +a JSON array of operations. One such pack -- here with two operations -- might +look like this: + +```json +{ + "author": { + "id": "04bf6c1a69bb8e9679644874c85f82e337b40d92df9d8d4176f1c5e5c6627058" + }, + "ops": [ + { + "type": 3, + "timestamp": 1647377254, + "nonce": "SRQwUWTJCXAmQBIS+1ctKgOcbF0=", + "message": "Adding a comment", + "files": null + }, + { + "type": 4, + "timestamp": 1647377257, + "nonce": "la/HaRPMvD77/cJSJOUzKWuJdY8=", + "status": 1 + } + ] +} +``` + +To reference our `OperationPack`, we create a git `Tree`; it references our +`OperationPack` `Blob` under `"/ops"`. If any edit operation includes a media +(for instance in a text message), we can store that media as a `Blob` and +reference it here under `"/media"`. + +To complete the picture, we create a git `Commit` that references our `Tree`. +Each time we add more `Operation`s to our bug, we add a new `Commit` with the +same data-structure to form a chain of `Commit`s. + +This chain of `Commit`s is made available as a git `Reference` under +`refs/<namespace>/<id>`. We can later use this reference to push our data to a +git remote. As git will push any data needed as well, everything will be pushed +to the remote, including the media. + +Here is the complete picture: + + + +## Time is unreliable + +Before being able to merge conflicts, let's start with some building blocks. + +It would be very tempting to use the `Operation`'s timestamp to give us the +order to compile the final state. However, you can't rely on the time provided +by other people (their clock might be off) for anything other than just display. +This is a fundamental limitation of distributed system, and even more so when +actors might want to game the system. + +Instead, we are going to use +[Lamport logical clock](https://en.wikipedia.org/wiki/Lamport_timestamps). A +Lamport clock is a simple counter of events. This logical clock gives us a +partial ordering: + +- if L1 \< L2, L1 happened before L2 +- if L1 > L2, L1 happened after L2 +- if L1 == L2, we can't tell which happened first: it's a concurrent edition + +Each time we are appending something to the data (create an `Entity`, add an +`Operation`) a logical time will be attached, with the highest time value we are +aware of, plus one. This declares a causality in the events and allows ordering +entities and operations. + +The first commit of an `Entity` will have both a creation time and edit time +clock, while a later commit will only have an edit time clock. These clocks +value are serialized directly in the `Tree` entry name (for example: +`"create-clock-4"`). As a `Tree` entry needs to reference something, we +reference the git `Blob` with an empty content. As all of these entries will +reference the same `Blob`, no network transfer is needed as long as you already +have any entity in your repository. + +Example of a `Tree` of the first commit of an entity: + +``` +100644 blob e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 create-clock-14 +100644 blob e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 edit-clock-137 +100644 blob a020a85baa788e12699a4d83dd735578f0d78c75 ops +``` + +Example of a `Tree` of a later commit of an entity: + +``` +100644 blob e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 edit-clock-154 +100644 blob 68383346c1a9503f28eec888efd300e9fc179ca0 ops +``` + +## Entities and Operation's ID + +`Operation`s can be referenced - in the data model or by users - with an +identifier. This identifier is computed from the `Operation`'s data itself, with +a hash of that data: `id = hash(json(op))` + +For entities, `git-bug` uses as identifier the hash of the first `Operation` of +the entity, as serialized on disk. + +The same way as git does, this hash is displayed truncated to a 7 characters +string to a human user. Note that when specifying a bug id in a command, you can +enter as few characters as you want, as long as there is no ambiguity. If +multiple entities match your prefix, `git-bug` will complain and display the +potential matches. + +## Entities support conflict resolution + +Now that we have all that, we can finally merge our entities without conflict, +and collaborate with other users. Let's start by getting rid of two simple +scenarios: + +- if we simply pull updates, we move forward our local reference. We get an + update of our graph that we read as usual. +- if we push fast-forward updates, we move forward the remote reference and + other users can update their reference as well. + +The tricky part happens when we have concurrent editions. If we pull updates +while we have local changes (non-straightforward in git term), `git-bug` creates +the equivalent of a merge commit to merge both branches into a DAG. This DAG has +a single root containing the first operation, but can have branches that get +merged back into a single head pointed by the reference. + +As we don't have a purely linear series of commits/`Operations`s, we need a +deterministic ordering to always apply operations in the same order. + +`git-bug` applies the following algorithm: + +1. load and read all the commits and the associated `OperationPack`s +2. make sure that the Lamport clocks respect the DAG structure: a parent + commit/`OperationPack` (that is, towards the head) cannot have a clock that + is higher or equal than its direct child. If such a problem happens, the + commit is refused/discarded. +3. individual `Operation`s are assembled together and ordered given the + following priorities: + 1. the edition's lamport clock if not concurrent + 2. the lexicographic order of the `OperationPack`'s identifier + +Step 2 is providing and enforcing a constraint over the `Operation`'s logical +clocks. What that means, is that **we inherit the implicit ordering given by the +DAG**. Later, logical clocks refine that ordering. This - coupled with signed +commits - has the nice property of limiting how this data model can be abused. + +Here is an example of such an ordering: + + + +We can see that: + +- Lamport clocks respect the DAG structure +- the final `Operation` order is \[A,B,C,D,E,F\], according to those clocks + +When we have concurrent editions, we apply a secondary ordering, based on the +`OperationPack`'s identifier: + + + +This secondary ordering doesn't carry much meaning, but it's unbiased and hard +to abuse. diff --git a/doc/feature-matrix.md b/doc/feature-matrix.md new file mode 100644 index 00000000..18e37c18 --- /dev/null +++ b/doc/feature-matrix.md @@ -0,0 +1,151 @@ +# User facing capabilities + +This document tries to give an overview of what is currently supported, and by +extension where effort can be focused to bring feature completion and parity. + +As git-bug is a free software project, accept and rely on contributor, those +feature matrices kinda define a roadmap, in the sense that anything mentioned +below is a planned feature and can be worked on. This does not mean that a +feature not mentioned here should not be considered, just maybe check the issue +tracker and come talk about it. + +This document however does not show all the untold work required to support +those user-facing capabilities. There has been a ton of work behind the scene +and more will be required over time. + +✅: working 🟠: partial implementation ❌: not working + +## Other goals + +Some goals don't really fit below, so I'll mention them here: + +- have the webUI accept external OAuth (Github, ...) and act as a public portal + where user outside the project can browse and interact with the project +- project configuration (valid labels, ...) +- commit signature to fully authenticate user's interaction +- interface with the system keyring, to distribute and expose known public keys + and allow checking signed commit in normal git workflow +- privileged roles (admin, ...) and enforcing the corresponding rules +- package the webui as a desktop app + +Additionally, some other are captured as +[Github issues](https://github.com/git-bug/git-bug/issues) or +[Discussions](https://github.com/git-bug/git-bug/discussions). + +## Entities + +The most high level overview of what kind of entities are supported and where. + +| | Core | CLI | TermUI | WebUI | +| -------------- | :--: | :-: | :----: | :---: | +| Identities | ✅ | ✅ | ✅ | ✅ | +| Bug | ✅ | ✅ | ✅ | ✅ | +| Board | 🟠 | 🟠 | ❌ | ❌ | +| Pull-request | ❌ | ❌ | ❌ | ❌ | +| Project Config | ❌ | ❌ | ❌ | ❌ | + +More specific features across the board. + +| | Core | CLI | TermUI | WebUI | +| ------------------ | :--: | :-: | :----: | :---: | +| Media embedding | 🟠 | ❌ | ❌ | ❌ | +| Fast indexing | ✅ | ✅ | ✅ | ✅ | +| Markdown rendering | N/A | ❌ | ❌ | ✅ | + +#### Identities + +| | Core | CLI | TermUI | WebUI | +| ----------------------- | :--: | :-: | :----: | :---: | +| Public keys | 🟠 | ❌ | ❌ | ❌ | +| Private keys management | 🟠 | ❌ | ❌ | ❌ | +| Identity edition | ✅ | ✅ | ❌ | ❌ | +| Identity adoption | ✅ | ✅ | ❌ | ❌ | +| Identity protection | 🟠 | ❌ | ❌ | ❌ | + +#### Bugs + +| | Core | CLI | TermUI | WebUI | +| ----------------- | :--: | :-: | :----: | :---: | +| Comments | ✅ | ✅ | ✅ | ✅ | +| Comments edition | ✅ | ✅ | ✅ | ✅ | +| Comments deletion | ✅ | ❌ | ❌ | ❌ | +| Labels | ✅ | ✅ | ✅ | ✅ | +| Status | ✅ | ✅ | ✅ | ✅ | +| Title edition | ✅ | ✅ | ✅ | ✅ | +| Assignee | ❌ | ❌ | ❌ | ❌ | +| Milestone | ❌ | ❌ | ❌ | ❌ | + +## Bridges + +### Importers + +General capabilities of importers: + +| | Github | Gitlab | Jira | Launchpad | +| ----------------------------------------------- | :----: | :----: | :--: | :-------: | +| **incremental**<br/>(can import more than once) | ✅ | ✅ | ✅ | ❌ | +| **with resume**<br/>(download only new data) | ✅ | ✅ | ✅ | ❌ | +| **media/files** | ❌ | ❌ | ❌ | ❌ | +| **automated test suite** | ✅ | ✅ | ❌ | ❌ | + +Identity support: + +| | Github | Gitlab | Jira | Launchpad | +| ----------------- | :----: | :----: | :--: | :-------: | +| **identities** | ✅ | ✅ | ✅ | ✅ | +| identities update | ❌ | ❌ | ❌ | ❌ | +| public keys | ❌ | ❌ | ❌ | ❌ | + +Bug support: + +| | Github | Gitlab | Jira | Launchpad | +| ---------------- | :----: | :----: | :--: | :-------: | +| **bug** | ✅ | ✅ | ✅ | ✅ | +| comments | ✅ | ✅ | ✅ | ✅ | +| comment editions | ✅ | ❌ | ✅ | ❌ | +| labels | ✅ | ✅ | ✅ | ❌ | +| status | ✅ | ✅ | ✅ | ❌ | +| title edition | ✅ | ✅ | ✅ | ❌ | +| Assignee | ❌ | ❌ | ❌ | ❌ | +| Milestone | ❌ | ❌ | ❌ | ❌ | + +Board support: + +| | Github | Gitlab | Jira | Launchpad | +| --------- | :----: | :----: | :--: | :-------: | +| **board** | ❌ | ❌ | ❌ | ❌ | + +### Exporters + +**General capabilities of exporters**: + +| | Github | Gitlab | Jira | +| ----------------------------------------------- | :----: | :----: | :--: | +| **incremental**<br/>(can export more than once) | ✅ | ✅ | ✅ | +| **with resume**<br/>(upload only new data) | ✅ | ✅ | ✅ | +| **automated test suite** | ✅ | ✅ | ❌ | + +**Identity support**: + +| | Github | Gitlab | Jira | +| ----------------- | :----: | :----: | :--: | +| **identities** | ✅ | ✅ | ✅ | +| identities update | ❌ | ❌ | ❌ | + +Note: as the target bug tracker require accounts and credentials, there is only +so much that an exporter can do about identities. A bridge should be able to +load and use credentials for multiple remote account, but when they are not +available, the corresponding changes can't be replicated. + +**Bug support**: + +| | Github | Gitlab | Jira | +| ---------------- | :----: | :----: | :--: | +| **bugs** | ✅ | ✅ | ✅ | +| comments | ✅ | ✅ | ✅ | +| comment editions | ✅ | ✅ | ✅ | +| labels | ✅ | ✅ | ✅ | +| status | ✅ | ✅ | ✅ | +| title edition | ✅ | ✅ | ✅ | +| Assignee | ❌ | ❌ | ❌ | +| Milestone | ❌ | ❌ | ❌ | diff --git a/doc/feature_matrix.md b/doc/feature_matrix.md deleted file mode 100644 index a0e19232..00000000 --- a/doc/feature_matrix.md +++ /dev/null @@ -1,137 +0,0 @@ -# User facing capabilities - -This document tries to give an overview of what is currently supported, and by extension where effort can be focused to bring feature completion and parity. - -As git-bug is a free software project, accept and rely on contributor, those feature matrices kinda define a roadmap, in the sense that anything mentioned below is a planned feature and can be worked on. This does not mean that a feature not mentioned here should not be considered, just maybe check the issue tracker and come talk about it. - -This document however does not show all the untold work required to support those user-facing capabilities. There has been a ton of work behind the scene and more will be required over time. - -✅: working 🟠: partial implementation ❌: not working - -## Other goals - -Some goals don't really fit below, so I'll mention them here: -- have the webUI accept external OAuth (Github, ...) and act as a public portal where user outside the project can browse and interact with the project -- project configuration (valid labels, ...) -- commit signature to fully authenticate user's interaction -- interface with the system keyring, to distribute and expose known public keys and allow checking signed commit in normal git workflow -- privileged roles (admin, ...) and enforcing the corresponding rules -- package the webui as a desktop app - -Additionally, some other are captured as [Github issues](https://github.com/git-bug/git-bug/issues) or [Discussions](https://github.com/git-bug/git-bug/discussions). - -## Entities - -The most high level overview of what kind of entities are supported and where. - -| | Core | CLI | TermUI | WebUI | -|----------------|:----:|:---:|:------:|:-----:| -| Identities | ✅ | ✅ | ✅ | ✅ | -| Bug | ✅ | ✅ | ✅ | ✅ | -| Board | 🟠 | 🟠 | ❌ | ❌ | -| Pull-request | ❌ | ❌ | ❌ | ❌ | -| Project Config | ❌ | ❌ | ❌ | ❌ | - -More specific features across the board. - -| | Core | CLI | TermUI | WebUI | -|--------------------|:----:|:---:|:------:|:-----:| -| Media embedding | 🟠 | ❌ | ❌ | ❌ | -| Fast indexing | ✅ | ✅ | ✅ | ✅ | -| Markdown rendering | N/A | ❌ | ❌ | ✅ | - -#### Identities - -| | Core | CLI | TermUI | WebUI | -|-------------------------|:----:|:---:|:------:|:-----:| -| Public keys | 🟠 | ❌ | ❌ | ❌ | -| Private keys management | 🟠 | ❌ | ❌ | ❌ | -| Identity edition | ✅ | ✅ | ❌ | ❌ | -| Identity adoption | ✅ | ✅ | ❌ | ❌ | -| Identity protection | 🟠 | ❌ | ❌ | ❌ | - -#### Bugs - -| | Core | CLI | TermUI | WebUI | -|-------------------|:----:|:---:|:------:|:-----:| -| Comments | ✅ | ✅ | ✅ | ✅ | -| Comments edition | ✅ | ✅ | ✅ | ✅ | -| Comments deletion | ✅ | ❌ | ❌ | ❌ | -| Labels | ✅ | ✅ | ✅ | ✅ | -| Status | ✅ | ✅ | ✅ | ✅ | -| Title edition | ✅ | ✅ | ✅ | ✅ | -| Assignee | ❌ | ❌ | ❌ | ❌ | -| Milestone | ❌ | ❌ | ❌ | ❌ | - - -## Bridges - -### Importers - -General capabilities of importers: - -| | Github | Gitlab | Jira | Launchpad | -|-------------------------------------------------|:------:|:------:|:----:|:---------:| -| **incremental**<br/>(can import more than once) | ✅ | ✅ | ✅ | ❌ | -| **with resume**<br/>(download only new data) | ✅ | ✅ | ✅ | ❌ | -| **media/files** | ❌ | ❌ | ❌ | ❌ | -| **automated test suite** | ✅ | ✅ | ❌ | ❌ | - -Identity support: - -| | Github | Gitlab | Jira | Launchpad | -|-------------------|:------:|:------:|:----:|:---------:| -| **identities** | ✅ | ✅ | ✅ | ✅ | -| identities update | ❌ | ❌ | ❌ | ❌ | -| public keys | ❌ | ❌ | ❌ | ❌ | - -Bug support: - -| | Github | Gitlab | Jira | Launchpad | -|------------------|:------:|:------:|:----:|:---------:| -| **bug** | ✅ | ✅ | ✅ | ✅ | -| comments | ✅ | ✅ | ✅ | ✅ | -| comment editions | ✅ | ❌ | ✅ | ❌ | -| labels | ✅ | ✅ | ✅ | ❌ | -| status | ✅ | ✅ | ✅ | ❌ | -| title edition | ✅ | ✅ | ✅ | ❌ | -| Assignee | ❌ | ❌ | ❌ | ❌ | -| Milestone | ❌ | ❌ | ❌ | ❌ | - -Board support: - -| | Github | Gitlab | Jira | Launchpad | -|-----------|:------:|:------:|:----:|:---------:| -| **board** | ❌ | ❌ | ❌ | ❌ | - -### Exporters - -**General capabilities of exporters**: - -| | Github | Gitlab | Jira | -|-------------------------------------------------|:------:|:------:|:----:| -| **incremental**<br/>(can export more than once) | ✅ | ✅ | ✅ | -| **with resume**<br/>(upload only new data) | ✅ | ✅ | ✅ | -| **automated test suite** | ✅ | ✅ | ❌ | - -**Identity support**: - -| | Github | Gitlab | Jira | -|-------------------|:------:|:------:|:----:| -| **identities** | ✅ | ✅ | ✅ | -| identities update | ❌ | ❌ | ❌ | - -Note: as the target bug tracker require accounts and credentials, there is only so much that an exporter can do about identities. A bridge should be able to load and use credentials for multiple remote account, but when they are not available, the corresponding changes can't be replicated. - -**Bug support**: - -| | Github | Gitlab | Jira | -|------------------|:------:|:------:|:----:| -| **bugs** | ✅ | ✅ | ✅ | -| comments | ✅ | ✅ | ✅ | -| comment editions | ✅ | ✅ | ✅ | -| labels | ✅ | ✅ | ✅ | -| status | ✅ | ✅ | ✅ | -| title edition | ✅ | ✅ | ✅ | -| Assignee | ❌ | ❌ | ❌ | -| Milestone | ❌ | ❌ | ❌ | diff --git a/doc/gen_docs.go b/doc/generate.go index ac5417d8..0001f1a7 100644 --- a/doc/gen_docs.go +++ b/doc/generate.go @@ -4,6 +4,7 @@ import ( "fmt" "os" "path/filepath" + "strings" "sync" "time" @@ -13,8 +14,14 @@ import ( "github.com/git-bug/git-bug/commands" ) +// TaskError holds a given task name and the error it returned (if any) +type TaskError struct { + name string + err error +} + func main() { - fmt.Println("Generating documentation ...") + fmt.Println("Generating documentation...") tasks := map[string]func(*cobra.Command) error{ "ManPage": genManPage, @@ -22,6 +29,7 @@ func main() { } var wg sync.WaitGroup + errs := make(chan TaskError, len(tasks)) for name, f := range tasks { wg.Add(1) go func(name string, f func(*cobra.Command) error) { @@ -29,7 +37,8 @@ func main() { root := commands.NewRootCommand() err := f(root) if err != nil { - fmt.Printf(" - %s: %v\n", name, err) + fmt.Printf(" - %s: FATAL\n", name) + errs <- TaskError{name: name, err: err} return } fmt.Printf(" - %s: ok\n", name) @@ -37,6 +46,19 @@ func main() { } wg.Wait() + close(errs) + + if len(errs) > 0 { + fmt.Println() + for e := range errs { + fmt.Printf(" Error generating %s:\n", strings.ToLower(e.name)) + for _, line := range strings.Split(e.err.Error(), "\n") { + fmt.Printf(" %s\n", line) + } + fmt.Println() + } + os.Exit(1) + } } func genManPage(root *cobra.Command) error { @@ -80,5 +102,9 @@ func genMarkdown(root *cobra.Command) error { } } - return doc.GenMarkdownTree(root, dir) + if err := doc.GenMarkdownTree(root, dir); err != nil { + return err + } + + return nil } diff --git a/doc/howto-github.md b/doc/howto-github.md deleted file mode 100644 index c5668e82..00000000 --- a/doc/howto-github.md +++ /dev/null @@ -1,80 +0,0 @@ -# How-to: Read and edit offline your Github/Gitlab/Jira issues with git-bug - -[git-bug](https://github.com/git-bug/git-bug) is a standalone distributed bug-tracker that is embedded in git. In short, if you have a git repository you can use it to store bugs alongside your code (without mixing them though!), push and pull them to/from a normal git remote to collaborate. - -<p align="center"> - <img src="../misc/diagrams/native_workflow.png" alt="Native workflow"> -</p> - -Bridges with other bug-trackers are first-class citizen in `git-bug`. Notably, they are bidirectional, incremental and relatively fast. This means that a perfectly valid way to use `git-bug` is as a sort of remote for Github where you synchronize all the issues of a repository to later read and edit them and then propagate your changes back to Github. - -<p align="center"> - <img src="../misc/diagrams/bridge_workflow.png" alt="Bridge workflow"> -</p> - -This has several upsides: -- works offline, including edition -- browsing is pretty much instant -- you get to choose the UI you prefer between CLI, interactive terminal UI or web UI -- you get a near complete backup in case Github is down or no longer fit your needs - -Note: at the moment, Gitlab and Jira are also fully supported. - -## Installation - -Follow the [installation instruction](https://github.com/git-bug/git-bug#installation). The simplest way is to download a pre-compiled binary from [the latest release](https://github.com/git-bug/git-bug/releases/latest) and to put it anywhere in your `$PATH`. - -Check that `git-bug` is properly installed by running `git bug version`. If everything is alright, the version of the binary will be displayed. - -## Configuration - -1. From within the git repository you care about, run `git bug bridge configure` and follow the wizard's steps: - 1. Choose `github`. - 1. Type a name for the bridge configuration. As you can configure multiple bridges, this name will allow you to choose when there is an ambiguity. - 1. Setup the remote Github project. The wizard is smart enough to inspect the git remote and detect the potential project. Otherwise, enter the project URL like this: `https://github.com/git-bug/git-bug` - 1. Enter your login on Github - 1. Setup an authentication token. You can either use the interactive token creation, enter your own token or select an existing token, if any. -1. Run `git bug bridge pull` and let it run to import the issues and identities. - -## Basic usage - -You can interact with `git-bug` through the command line (see the [Readme](../README.md#cli-usage) for more details): -```bash -# Create a new bug -git bug add -# List existing bugs -git bug ls -# Display a bug's detail -git bug show <bugId> -# Add a new comment -git bug comment <bugId> -# Push everything to a normal git remote -git bug push [<remote>] -# Pull updates from a git remote -git bug pull [<remote>] -``` - -In particular, the key commands to interact with Github are: -```bash -# Replicate your changes to the remote bug-tracker -git bug bridge push [<bridge>] -# Retrieve updates from the remote bug-tracker -git bug bridge pull [<bridge>] -``` - -The command line tools are really meant for programmatic usage or to integrate `git-bug` into your editor of choice. For day to day usage, the recommended way is the interactive terminal UI. You can start it with `git bug termui`: - - - -For a richer and more user friendly UI, `git-bug` proposes a web UI (read-only at the moment). You can start it with `git bug webui`: - - - -## Want more? - -If you interested to read more about `git-bug`, have a look at the following: -- [the project itself, with a more complete readme](https://github.com/git-bug/git-bug) -- [a bird view of the internals](https://github.com/git-bug/git-bug/blob/master/doc/architecture.md) -- [a description of the data model](https://github.com/git-bug/git-bug/blob/master/doc/model.md) - -Of course, if you want to contribute the door is way open :-) diff --git a/doc/model.md b/doc/model.md deleted file mode 100644 index 266aa3ed..00000000 --- a/doc/model.md +++ /dev/null @@ -1,145 +0,0 @@ -git-bug's reusable entity data model -==================================== - -This document explains how git-bug's reusable distributed data structure in git is working. This data structure is capable of: -- storing an entity (bug, pull-request, config...) and its complete history in git -- carry signed authorship of editions -- use git remotes as a medium for synchronisation and collaboration -- merge conflicts -- respect the rules you define as to what edition are possible -- carry attached media - -If you are looking for a different writing format or to see how you can easily make your own, checkout [the example code](../entity/dag/example_test.go). - -If you are not familiar with [git internals](https://git-scm.com/book/en/v2/Git-Internals-Git-Objects), you might first want to read about them, as the `git-bug` data model is built on top of them. - -## Entities (bug, author, ...) are a series of edit operations - -As entities are stored and edited in multiple processes at the same time, it's not possible to store the current state like it would be done in a normal application. If two processes change the same entity and later try to merge the states, we wouldn't know which change takes precedence or how to merge those states. - -To deal with this problem, you need a way to merge these changes in a meaningful way. Instead of storing the final bug data directly, we store a series of edit `Operation`s. This is a common idea, notably with [Operation-based CRDTs](https://en.wikipedia.org/wiki/Conflict-free_replicated_data_type#Operation-based_CRDTs). - - - -To get the final state of an entity, we apply these `Operation`s in the correct order on an empty state, to compute (aka "compile") our view. - -## Entities are stored in git objects - -An `Operation` is a piece of data, including: - -- a type identifier -- an author (a reference to another entity) -- a timestamp (there is also one or two [Lamport time](#time-is-unreliable)) -- all the data required by that operation type (a message, a status ...) -- a random [nonce](https://en.wikipedia.org/wiki/Cryptographic_nonce) to ensure we have enough entropy, as the operation identifier is a hash of that data (more on that later) - -These `Operation`s are aggregated in an `OperationPack`, a simple array. An `OperationPack` represents an edit session of the entity. As the operation's author is the same for all the `OperationPack` we only store it once. - -We store this pack in git as a git `Blob`; that consists of a string containing a JSON array of operations. One such pack -- here with two operations -- might look like this: - -```json -{ - "author": { - "id": "04bf6c1a69bb8e9679644874c85f82e337b40d92df9d8d4176f1c5e5c6627058" - }, - "ops": [ - { - "type": 3, - "timestamp": 1647377254, - "nonce": "SRQwUWTJCXAmQBIS+1ctKgOcbF0=", - "message": "Adding a comment", - "files": null - }, - { - "type": 4, - "timestamp": 1647377257, - "nonce": "la/HaRPMvD77/cJSJOUzKWuJdY8=", - "status": 1 - } - ] -} -``` - -To reference our `OperationPack`, we create a git `Tree`; it references our `OperationPack` `Blob` under `"/ops"`. If any edit operation includes a media (for instance in a text message), we can store that media as a `Blob` and reference it here under `"/media"`. - -To complete the picture, we create a git `Commit` that references our `Tree`. Each time we add more `Operation`s to our bug, we add a new `Commit` with the same data-structure to form a chain of `Commit`s. - -This chain of `Commit`s is made available as a git `Reference` under `refs/<namespace>/<id>`. We can later use this reference to push our data to a git remote. As git will push any data needed as well, everything will be pushed to the remote, including the media. - -Here is the complete picture: - - - -## Time is unreliable - -Before being able to merge conflicts, let's start with some building blocks. - -It would be very tempting to use the `Operation`'s timestamp to give us the order to compile the final state. However, you can't rely on the time provided by other people (their clock might be off) for anything other than just display. This is a fundamental limitation of distributed system, and even more so when actors might want to game the system. - -Instead, we are going to use [Lamport logical clock](https://en.wikipedia.org/wiki/Lamport_timestamps). A Lamport clock is a simple counter of events. This logical clock gives us a partial ordering: - -- if L1 < L2, L1 happened before L2 -- if L1 > L2, L1 happened after L2 -- if L1 == L2, we can't tell which happened first: it's a concurrent edition - - -Each time we are appending something to the data (create an `Entity`, add an `Operation`) a logical time will be attached, with the highest time value we are aware of, plus one. This declares a causality in the events and allows ordering entities and operations. - -The first commit of an `Entity` will have both a creation time and edit time clock, while a later commit will only have an edit time clock. These clocks value are serialized directly in the `Tree` entry name (for example: `"create-clock-4"`). As a `Tree` entry needs to reference something, we reference the git `Blob` with an empty content. As all of these entries will reference the same `Blob`, no network transfer is needed as long as you already have any entity in your repository. - -Example of a `Tree` of the first commit of an entity: -``` -100644 blob e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 create-clock-14 -100644 blob e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 edit-clock-137 -100644 blob a020a85baa788e12699a4d83dd735578f0d78c75 ops -``` - -Example of a `Tree` of a later commit of an entity: -``` -100644 blob e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 edit-clock-154 -100644 blob 68383346c1a9503f28eec888efd300e9fc179ca0 ops -``` - -## Entities and Operation's ID - -`Operation`s can be referenced - in the data model or by users - with an identifier. This identifier is computed from the `Operation`'s data itself, with a hash of that data: `id = hash(json(op))` - -For entities, `git-bug` uses as identifier the hash of the first `Operation` of the entity, as serialized on disk. - -The same way as git does, this hash is displayed truncated to a 7 characters string to a human user. Note that when specifying a bug id in a command, you can enter as few characters as you want, as long as there is no ambiguity. If multiple entities match your prefix, `git-bug` will complain and display the potential matches. - -## Entities support conflict resolution - -Now that we have all that, we can finally merge our entities without conflict, and collaborate with other users. Let's start by getting rid of two simple scenarios: - -- if we simply pull updates, we move forward our local reference. We get an update of our graph that we read as usual. -- if we push fast-forward updates, we move forward the remote reference and other users can update their reference as well. - -The tricky part happens when we have concurrent editions. If we pull updates while we have local changes (non-straightforward in git term), `git-bug` creates the equivalent of a merge commit to merge both branches into a DAG. This DAG has a single root containing the first operation, but can have branches that get merged back into a single head pointed by the reference. - -As we don't have a purely linear series of commits/`Operations`s, we need a deterministic ordering to always apply operations in the same order. - -`git-bug` applies the following algorithm: - -1. load and read all the commits and the associated `OperationPack`s -2. make sure that the Lamport clocks respect the DAG structure: a parent commit/`OperationPack` (that is, towards the head) cannot have a clock that is higher or equal than its direct child. If such a problem happens, the commit is refused/discarded. -3. individual `Operation`s are assembled together and ordered given the following priorities: - 1. the edition's lamport clock if not concurrent - 2. the lexicographic order of the `OperationPack`'s identifier - -Step 2 is providing and enforcing a constraint over the `Operation`'s logical clocks. What that means, is that **we inherit the implicit ordering given by the DAG**. Later, logical clocks refine that ordering. This - coupled with signed commits - has the nice property of limiting how this data model can be abused. - -Here is an example of such an ordering: - - - -We can see that: - -- Lamport clocks respect the DAG structure -- the final `Operation` order is [A,B,C,D,E,F], according to those clocks - -When we have concurrent editions, we apply a secondary ordering, based on the `OperationPack`'s identifier: - - - -This secondary ordering doesn't carry much meaning, but it's unbiased and hard to abuse. diff --git a/doc/queries.md b/doc/queries.md deleted file mode 100644 index 358948eb..00000000 --- a/doc/queries.md +++ /dev/null @@ -1,113 +0,0 @@ -# Searching bugs - -You can search bugs using a micro query language for both filtering and sorting. A query could look like this: - -``` -status:open sort:edit -``` - -A few tips: - -- queries are case insensitive. -- you can combine as many qualifiers as you want. -- you can use double quotes for multi-word search terms. For example, `author:"René Descartes"` searches for bugs opened by René Descartes, whereas `author:René Descartes` will search for bug with René as the author and containing Descartes in a text. -- instead of a complete ID, you can use any prefix length, as long as there is no ambiguity. For example `participant=9ed1a`. - - -## Filtering - -### Filtering by status - -You can filter bugs based on their status. - -| Qualifier | Example | -|-----------------|-------------------------------------| -| `status:open` | `status:open` matches open bugs | -| `status:closed` | `status:closed` matches closed bugs | - -### Filtering by author - -You can filter based on the person who opened the bug. - -| Qualifier | Example | -|----------------|----------------------------------------------------------------------------------| -| `author:QUERY` | `author:descartes` matches bugs opened by `René Descartes` or `Robert Descartes` | -| | `author:"rené descartes"` matches bugs opened by `René Descartes` | - -### Filtering by participant - -You can filter based on the person who participated in any activity related to the bug (opened bug or added a comment). - -| Qualifier | Example | -|---------------------|----------------------------------------------------------------------------------------------------| -| `participant:QUERY` | `participant:descartes` matches bugs opened or commented by `René Descartes` or `Robert Descartes` | -| | `participant:"rené descartes"` matches bugs opened or commented by `René Descartes` | - -### Filtering by actor - -You can filter based on the person who interacted with the bug. - -| Qualifier | Example | -|---------------|---------------------------------------------------------------------------------| -| `actor:QUERY` | `actor:descartes` matches bugs edited by `René Descartes` or `Robert Descartes` | -| | `actor:"rené descartes"` matches bugs edited by `René Descartes` | - -**NOTE**: interaction with bugs include: opening the bug, adding comments, adding/removing labels etc... - -### Filtering by label - -You can filter based on the bug's label. - -| Qualifier | Example | -|---------------|---------------------------------------------------------------------------| -| `label:LABEL` | `label:prod` matches bugs with the label `prod` | -| | `label:"Good first issue"` matches bugs with the label `Good first issue` | - -### Filtering by title - -You can filter based on the bug's title. - -| Qualifier | Example | -|---------------|--------------------------------------------------------------------------------| -| `title:TITLE` | `title:Critical` matches bugs with a title containing `Critical` | -| | `title:"Typo in string"` matches bugs with a title containing `Typo in string` | - - -### Filtering by missing feature - -You can filter bugs based on the absence of something. - -| Qualifier | Example | -|------------|----------------------------------------| -| `no:label` | `no:label` matches bugs with no labels | - -## Sorting - -You can sort results by adding a `sort:` qualifier to your query. “Descending” means most recent time or largest ID first, whereas “Ascending” means oldest time or smallest ID first. - -Note: to deal with differently-set clocks on distributed computers, `git-bug` uses a logical clock internally rather than timestamps to order bug changes over time. That means that the timestamps recorded might not match the returned ordering. More on that in [the documentation](model.md#you-cant-rely-on-the-time-provided-by-other-people-their-clock-might-by-off-for-anything-other-than-just-display) - -### Sort by Id - -| Qualifier | Example | -|----------------------------|-------------------------------------------------------| -| `sort:id-desc` | `sort:id-desc` will sort bugs by their descending Ids | -| `sort:id` or `sort:id-asc` | `sort:id` will sort bugs by their ascending Ids | - -### Sort by Creation time - -You can sort bugs by their creation time. - -| Qualifier | Example | -|-----------------------------------------|---------------------------------------------------------------------| -| `sort:creation` or `sort:creation-desc` | `sort:creation` will sort bugs by their descending creation time | -| `sort:creation-asc` | `sort:creation-asc` will sort bugs by their ascending creation time | - -### Sort by Edit time - -You can sort bugs by their edit time. - -| Qualifier | Example | -|---------------------------------|---------------------------------------------------------------------| -| `sort:edit` or `sort:edit-desc` | `sort:edit` will sort bugs by their descending last edition time | -| `sort:edit-asc` | `sort:edit-asc` will sort bugs by their ascending last edition time | diff --git a/doc/usage/bridges.md b/doc/usage/bridges.md new file mode 100644 index 00000000..87b566e1 --- /dev/null +++ b/doc/usage/bridges.md @@ -0,0 +1,113 @@ +# Using bridges<a name="using-bridges"></a> + +This page provides an overview of how to use _bridges_ to sync issues to and +from third-party platforms. + +<!-- mdformat-toc start --slug=github --maxlevel=4 --minlevel=2 --> + +- [Overview](#overview) +- [Supported bridges](#supported-bridges) +- [Getting started](#getting-started) +- [Interacting with the bridge](#interacting-with-the-bridge) + +<!-- mdformat-toc end --> + +## Overview<a name="overview"></a> + +Bridges within `git-bug` are bi-directional, incremental, and speedy gateways to +third-party platforms. Configuring a bridge allows you to push and pull issues +to and from a third party platform. + +This expands the utility and function of `git-bug`: because issues are just +objects in your git repository, you can import issues from a bridge to work on +them in bulk, offline, in your preferred environment, at your own pace. When +you're ready to push your issues back to the external platform again, you'll be +able to synchronize the changes you made with one simple command. + +<p align="center"> + <img src="../assets/bridge-workflow.png" alt="Bridge workflow"> +</p> + +This has several benefits: + +- works offline, including edition +- browsing is pretty much instant +- you get to choose the UI you prefer between CLI, interactive terminal UI or + web UI +- you have a near-complete archive of issues locally, embedded in your git + repository, in case the external platform becomes inaccessible +- you are free to move to another platform -- your issues follow wherever your + repo goes! + +## Supported bridges<a name="supported-bridges"></a> + +We support a number of bridges: + +- Jira +- GitHub +- GitLab +- Launchpad + +_For a full list of the features enabled for each bridge, see the +[feature matrix][docs/feature-matrix]._ + +## Getting started<a name="getting-started"></a> + +1. From within a git repository, run `git bug bridge configure` to start the + configuration wizard +2. Choose the type of bridge you want to configure, e.g. `github` +3. Type a name for the bridge configuration. As you can configure multiple + bridges, this name will allow you to choose when there is an ambiguity. +4. If you already have a repository created on the external platform, and your + local git repository has that as a remote, the configuration wizard will + automatically detect the URL. Otherwise, please ensure you enter the + appropriate URL for the remote project: something like + `https://github.com/git-bug/git-bug` +5. Create an access token. You can either use the interactive token creation, + enter it on your own token, or use an existing token if you already have one + +That's it! Once you've completed the wizard, you'll have successfully configured +a bridge. + +## Interacting with the bridge<a name="interacting-with-the-bridge"></a> + +To push issues out to the bridge, run: + +```bash +git bug bridge push [NAME] +``` + +To pull and integrate updates for issues from the bridge: + +```bash +git bug bridge pull [NAME] +``` + +> [!TIP] +> See the [CLI documentation][doc/cli/bridge] for more information on the +> command line arguments and options. + +The command line is primarily meant for programmatic usage or to interface with +`git-bug` with scripts or other tools. For day to day usage, we recommend taking +a look at \[the supported interfaces\]\[interfaces\], which include a robust TUI +and an in-progress Web UI. + +______________________________________________________________________ + +##### See more + +- [A bird's-eye view of the internal architecture][docs/design/arch] +- [A description of the data model][docs/design/model] +- [An overview of the native interfaces][docs/usage/interfaces] +- [Filtering query results][docs/usage/filter] +- [Understanding the workflow models][docs/usage/workflows] +- :house: [Documentation home][docs/home] + +[doc/cli/bridge]: ../md/git-bug_bridge.md +[docs/design/arch]: ../design/architecture.md +[docs/design/model]: ../design/data-model.md +[docs/feature-matrix]: ../feature-matrix.md +[docs/home]: ../README.md +[docs/usage/filter]: ./query-language.md +[docs/usage/interfaces]: ./interfaces.md +[docs/usage/workflows]: ./workflows.md diff --git a/doc/usage/interfaces.md b/doc/usage/interfaces.md new file mode 100644 index 00000000..1237928e --- /dev/null +++ b/doc/usage/interfaces.md @@ -0,0 +1,66 @@ +# Native interfaces + +This page provides an overview of the different interfaces `git-bug` supports. + +<!-- mdformat-toc start --slug=github --maxlevel=4 --minlevel=2 --> + +- [TUI](#tui) +- [Web UI](#web-ui) + +<!-- mdformat-toc end --> + +## TUI<a name="tui"></a> + +The integrated TUI (text-based user interface) is the recommended way to +interface with `git-bug` issues in your repository. + +To start it, run `git bug termui` in your terminal. + + + +## Web UI<a name="web-ui"></a> + +The web UI is packed inside the same binary and serves static content through an +http server running on the local machine. The frontend interacts with the +backend through a GraphQL API. [View the schema][gql-schema] for more +information. + +To serve the website locally, run `git bug webui` in your terminal. + +> [!NOTE] +> The web interface is alpha-level software and does not support all of the +> features of `git-bug`. We recommend using the TUI for most day-to-day +> operations at the moment. + +<details> +<summary><strong>View the issue feed</strong></summary> +<center> <img + alt="An example of viewing the issue feed in the web interface" + src="../assets/web-screenshot-feed.png" + width="880" +/></center> +</details> + +<details> +<summary><strong>View the discussion for an issue</strong></summary> +<center><img + alt="An example of viewing the discussion for an issue in the web interface" + src="../assets/web-screenshot-comments.png" + width="880" +/></center> +</details> + +______________________________________________________________________ + +##### See more + +- [Filtering query results][docs/usage/filter] +- [How to use bridges][docs/usage/bridges] +- [Understanding the workflow models][docs/usage/workflows] +- :house: [Documentation home][docs/home] + +[docs/home]: ../README.md +[docs/usage/bridges]: ./bridges.md +[docs/usage/filter]: ./query-language.md +[docs/usage/workflows]: ./workflows.md +[gql-schema]: ../../api/graphql/schema diff --git a/doc/usage/query-language.md b/doc/usage/query-language.md new file mode 100644 index 00000000..15e8468d --- /dev/null +++ b/doc/usage/query-language.md @@ -0,0 +1,166 @@ +# Search filters + +When performing a search (e.g. listing issues), you can use different qualifiers +to narrow the results. This page provides an overview of these filters, and how +to use them. + +<!-- mdformat-toc start --slug=github --maxlevel=4 --minlevel=2 --> + +- [Overview](#overview) +- [Filtering](#filtering) + - [Filtering by status](#filtering-by-status) + - [Filtering by author](#filtering-by-author) + - [Filtering by participant](#filtering-by-participant) + - [Filtering by actor](#filtering-by-actor) + - [Filtering by label](#filtering-by-label) + - [Filtering by title](#filtering-by-title) + - [Filtering by missing feature](#filtering-by-missing-feature) +- [Sorting](#sorting) + - [Sort by Id](#sort-by-id) + - [Sort by Creation time](#sort-by-creation-time) + - [Sort by Edit time](#sort-by-edit-time) + +<!-- mdformat-toc end --> + +## Overview<a name="overview"></a> + +The query filters in `git-bug` have a familiar look and feel: + +``` +status:open sort:edit +``` + +**Key things to know** + +- All queries are case insensitive +- You can combine as many qualifiers as you want +- If you have a space in your qualifier, be sure to wrap it in double quotes. As + an example, `author:"René Descartes"` would filter for issues opened by + `René Descartes`, whereas `author:René Descartes` filter for `René` as the + author and return issues that contain `Descartes` somewhere in the title, + description, or comments. +- Instead of a complete ID, you can use any prefix length, as long as it is long + enough to be unique (similar to git commit hashes). For example, + `participant=9ed1a` would match against participants with an ID of + `9ed1af428...` and `9ed1ae24a...` + +## Filtering<a name="filtering"></a> + +### Filtering by status<a name="filtering-by-status"></a> + +You can filter bugs based on their status. + +| Qualifier | Example | +| --------------- | ----------------------------------- | +| `status:open` | `status:open` matches open bugs | +| `status:closed` | `status:closed` matches closed bugs | + +### Filtering by author<a name="filtering-by-author"></a> + +You can filter based on the person who opened the bug. + +| Qualifier | Example | +| -------------- | -------------------------------------------------------------------------------- | +| `author:QUERY` | `author:descartes` matches bugs opened by `René Descartes` or `Robert Descartes` | +| | `author:"rené descartes"` matches bugs opened by `René Descartes` | + +### Filtering by participant<a name="filtering-by-participant"></a> + +You can filter based on the person who participated in any activity related to +the bug (opened bug or added a comment). + +| Qualifier | Example | +| ------------------- | -------------------------------------------------------------------------------------------------- | +| `participant:QUERY` | `participant:descartes` matches bugs opened or commented by `René Descartes` or `Robert Descartes` | +| | `participant:"rené descartes"` matches bugs opened or commented by `René Descartes` | + +### Filtering by actor<a name="filtering-by-actor"></a> + +You can filter based on the person who interacted with the bug. + +| Qualifier | Example | +| ------------- | ------------------------------------------------------------------------------- | +| `actor:QUERY` | `actor:descartes` matches bugs edited by `René Descartes` or `Robert Descartes` | +| | `actor:"rené descartes"` matches bugs edited by `René Descartes` | + +> [!NOTE] +> Interactions with issues include opening the bug, adding comments, adding or +> removing labels, etc. + +### Filtering by label<a name="filtering-by-label"></a> + +You can filter based on the bug's label. + +| Qualifier | Example | +| ------------- | ------------------------------------------------------------------------- | +| `label:LABEL` | `label:prod` matches bugs with the label `prod` | +| | `label:"Good first issue"` matches bugs with the label `Good first issue` | + +### Filtering by title<a name="filtering-by-title"></a> + +You can filter based on the bug's title. + +| Qualifier | Example | +| ------------- | ------------------------------------------------------------------------------ | +| `title:TITLE` | `title:Critical` matches bugs with a title containing `Critical` | +| | `title:"Typo in string"` matches bugs with a title containing `Typo in string` | + +### Filtering by missing feature<a name="filtering-by-missing-feature"></a> + +You can filter bugs based on the absence of something. + +| Qualifier | Example | +| ---------- | -------------------------------------- | +| `no:label` | `no:label` matches bugs with no labels | + +## Sorting<a name="sorting"></a> + +You can sort results by adding a `sort:` qualifier to your query. “Descending” +means most recent time or largest ID first, whereas “Ascending” means oldest +time or smallest ID first. + +Note: to deal with differently-set clocks on distributed computers, `git-bug` +uses a logical clock internally rather than timestamps to order bug changes over +time. That means that the timestamps recorded might not match the returned +ordering. To learn more, we encourage you to read about \[time \]\[data-model\]. + +### Sort by Id<a name="sort-by-id"></a> + +| Qualifier | Example | +| -------------------------- | ----------------------------------------------------- | +| `sort:id-desc` | `sort:id-desc` will sort bugs by their descending Ids | +| `sort:id` or `sort:id-asc` | `sort:id` will sort bugs by their ascending Ids | + +### Sort by Creation time<a name="sort-by-creation-time"></a> + +You can sort bugs by their creation time. + +| Qualifier | Example | +| --------------------------------------- | ------------------------------------------------------------------- | +| `sort:creation` or `sort:creation-desc` | `sort:creation` will sort bugs by their descending creation time | +| `sort:creation-asc` | `sort:creation-asc` will sort bugs by their ascending creation time | + +### Sort by Edit time<a name="sort-by-edit-time"></a> + +You can sort bugs by their edit time. + +| Qualifier | Example | +| ------------------------------- | ------------------------------------------------------------------- | +| `sort:edit` or `sort:edit-desc` | `sort:edit` will sort bugs by their descending last edition time | +| `sort:edit-asc` | `sort:edit-asc` will sort bugs by their ascending last edition time | + +______________________________________________________________________ + +##### See more + +- [A description of the data model][docs/design/model] +- [How to use bridges][docs/usage/bridges] +- [Learn about the native interfaces][docs/usage/interfaces] +- [Understanding the workflow models][docs/usage/workflows] +- :house: [Documentation home][docs/home] + +[docs/design/model]: ../design/data-model.md#you-cant-rely-on-the-time-provided-by-other-people-their-clock-might-by-off-for-anything-other-than-just-display +[docs/home]: ../README.md +[docs/usage/bridges]: ./bridges.md +[docs/usage/interfaces]: ./interfaces.md +[docs/usage/workflows]: ./workflows.md diff --git a/doc/usage/workflows.md b/doc/usage/workflows.md new file mode 100644 index 00000000..f2baeeec --- /dev/null +++ b/doc/usage/workflows.md @@ -0,0 +1,62 @@ +# Workflows + +This document provides an overview of different workflows that `git-bug` +supports. + +<!-- mdformat-start --slug=github --maxlevel=4 --minlevel=2 --> + +## Native workflow + +<p align="center"> + <img src="../assets/native-workflow.png" alt="Native workflow"> +</p> + +This is the pure `git-bug` experience. In a similar fashion as with code, use +`git bug push` and `git bug pull` to push and pull your bugs between git remotes +and collaborate with your teammate. + +_Recommended reading: [CLI documentation][docs/cli]_ + +## Bridge workflow + +<p align="center"> + <img src="../assets/bridge-workflow.png" alt="Bridge workflow"> +</p> + +`git-bug` supports syncing issues with third-party platforms, such as GitHub, +GitLab, and Jira. This lets you work on issues offline, editing issues in bulk +with your preferred editor, or to build an archive of any project's issues -- +it's up to you! + +_Recommended reading: [How to use bridges][docs/usage/bridges]_ + +## Web UI workflow + +<p align="center"> + <img src="../assets/webui-workflow.png" alt="Web UI workflow"> +</p> + +> [!NOTE] +> The web UI is a work in progress, and is not feature-complete. To utilize +> `git-bug` to its full potential, we recommend using the TUI or CLI. + +Often, projects needs to have their bug-tracker public and accept editions from +anyone facing a problem. To support this workflow, `git-bug` aims to have the +web UI accept external OAuth authentication and act as a public portal. However +the web UI is not up to speed for that yet. Contributions are very much welcome! + +______________________________________________________________________ + +##### See also<a name="see-also"></a> + +- [CLI documentation][docs/cli] +- [Filtering query results][docs/usage/filter] +- [How to use bridges][docs/usage/bridges] +- [Learn about the native interfaces][docs/usage/interfaces] +- :house: [Documentation home][docs/home] + +[docs/cli]: ../md/git-bug.md +[docs/home]: ../README.md +[docs/usage/bridges]: ./bridges.md +[docs/usage/filter]: ./query-language.md +[docs/usage/interfaces]: ./interfaces.md diff --git a/entity/dag/example_test.go b/entity/dag/example_test.go index c9e4f352..3ffdb4fc 100644 --- a/entity/dag/example_test.go +++ b/entity/dag/example_test.go @@ -13,7 +13,7 @@ import ( ) // Note: you can find explanations about the underlying data model here: -// https://github.com/git-bug/git-bug/blob/master/doc/model.md +// https://github.com/git-bug/git-bug/blob/master/doc/design/data-model.md // This file explains how to define a replicated data structure, stored in and using git as a medium for // synchronisation. To do this, we'll use the entity/dag package, which will do all the complex handling. diff --git a/flake-hook.bash b/flake-hook.bash new file mode 100644 index 00000000..dde009dd --- /dev/null +++ b/flake-hook.bash @@ -0,0 +1,16 @@ +#!/usr/bin/env bash + +# use //:.gitmessage as the commit message template +git config --local commit.template ".gitmessage" + +# use a common, shared file as the default for running git-blame with the +# `--ignore-revs` flag +git config --local blame.ignoreRevsFile ".git-blame-ignore-revs" + +# enable features.manyFiles, which improves repository performance by setting +# new values for several configuration options: +# - `core.untrackedCache = true` enables the untracked cache +# - `index.version = 4` enables path-prefix compression in the index +# - `index.skipHash = true` speeds up index writes by not computing a trailing +# checksum +git config --local features.manyFiles true @@ -1,15 +1,33 @@ { "nodes": { + "flake-parts": { + "inputs": { + "nixpkgs-lib": "nixpkgs-lib" + }, + "locked": { + "lastModified": 1743550720, + "narHash": "sha256-hIshGgKZCgWh6AYJpJmRgFdR3WUbkY04o82X05xqQiY=", + "owner": "hercules-ci", + "repo": "flake-parts", + "rev": "c621e8422220273271f52058f618c94e405bb0f5", + "type": "github" + }, + "original": { + "owner": "hercules-ci", + "repo": "flake-parts", + "type": "github" + } + }, "flake-utils": { "inputs": { "systems": "systems" }, "locked": { - "lastModified": 1710146030, - "narHash": "sha256-SZ5L6eA7HJ/nmkzGG7/ISclqe6oZdOZTNoesiInkXPQ=", + "lastModified": 1731533236, + "narHash": "sha256-l0KFg5HjrsfsO/JpG+r7fRrqm12kzFHyUHqHCVpMMbI=", "owner": "numtide", "repo": "flake-utils", - "rev": "b1d9ab70662946ef0850d488da1c9019f3a9752a", + "rev": "11707dc2f618dd54ca8739b309ec4fc024de578b", "type": "github" }, "original": { @@ -20,11 +38,11 @@ }, "nixpkgs": { "locked": { - "lastModified": 1721138476, - "narHash": "sha256-+W5eZOhhemLQxelojLxETfbFbc19NWawsXBlapYpqIA=", + "lastModified": 1744932701, + "narHash": "sha256-fusHbZCyv126cyArUwwKrLdCkgVAIaa/fQJYFlCEqiU=", "owner": "nixos", "repo": "nixpkgs", - "rev": "ad0b5eed1b6031efaed382844806550c3dcb4206", + "rev": "b024ced1aac25639f8ca8fdfc2f8c4fbd66c48ef", "type": "github" }, "original": { @@ -34,10 +52,27 @@ "type": "github" } }, + "nixpkgs-lib": { + "locked": { + "lastModified": 1743296961, + "narHash": "sha256-b1EdN3cULCqtorQ4QeWgLMrd5ZGOjLSLemfa00heasc=", + "owner": "nix-community", + "repo": "nixpkgs.lib", + "rev": "e4822aea2a6d1cdd36653c134cacfd64c97ff4fa", + "type": "github" + }, + "original": { + "owner": "nix-community", + "repo": "nixpkgs.lib", + "type": "github" + } + }, "root": { "inputs": { + "flake-parts": "flake-parts", "flake-utils": "flake-utils", - "nixpkgs": "nixpkgs" + "nixpkgs": "nixpkgs", + "treefmt-nix": "treefmt-nix" } }, "systems": { @@ -54,6 +89,26 @@ "repo": "default", "type": "github" } + }, + "treefmt-nix": { + "inputs": { + "nixpkgs": [ + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1744961264, + "narHash": "sha256-aRmUh0AMwcbdjJHnytg1e5h5ECcaWtIFQa6d9gI85AI=", + "owner": "numtide", + "repo": "treefmt-nix", + "rev": "8d404a69efe76146368885110f29a2ca3700bee6", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "treefmt-nix", + "type": "github" + } } }, "root": "root", @@ -4,41 +4,41 @@ inputs = { nixpkgs.url = "github:nixos/nixpkgs/nixos-unstable"; flake-utils.url = "github:numtide/flake-utils"; + flake-parts.url = "github:hercules-ci/flake-parts"; + + treefmt-nix = { + url = "github:numtide/treefmt-nix"; + inputs.nixpkgs.follows = "nixpkgs"; + }; }; outputs = - { - self, - flake-utils, - nixpkgs, - }: - flake-utils.lib.eachDefaultSystem ( - system: - let - pkgs = nixpkgs.legacyPackages.${system}; - in - { - devShell = pkgs.mkShell { - packages = with pkgs; [ - codespell - delve - gh - git - go - golangci-lint - nixfmt-rfc-style - nodePackages.prettier - ]; + { nixpkgs, ... }@inputs: + let + systems = inputs.flake-utils.lib.defaultSystems; + in + inputs.flake-parts.lib.mkFlake { inherit inputs; } { + inherit systems; + + imports = [ inputs.treefmt-nix.flakeModule ]; + + perSystem = + { pkgs, system, ... }: + { + treefmt = import ./treefmt.nix { inherit pkgs; }; - shellHook = '' - # Use //:.gitmessage as the commit message template - ${pkgs.git}/bin/git config --local commit.template ".gitmessage" + devShells.default = pkgs.mkShell { + packages = with pkgs; [ + codespell + delve + gh + git + go + golangci-lint + ]; - # Use a common, shared file as the default for running - # git-blame with the `--ignore-revs` flag - ${pkgs.git}/bin/git config --local blame.ignoreRevsFile ".git-blame-ignore-revs" - ''; + shellHook = builtins.readFile ./flake-hook.bash; + }; }; - } - ); + }; } @@ -1,5 +1,5 @@ -//go:generate go run doc/gen_docs.go -//go:generate go run misc/completion/gen_completion.go +//go:generate go run doc/generate.go +//go:generate go run misc/completion/generate.go package main diff --git a/misc/completion/gen_completion.go b/misc/completion/generate.go index e2a8cc1b..245c561c 100644 --- a/misc/completion/gen_completion.go +++ b/misc/completion/generate.go @@ -67,7 +67,7 @@ _git_bug() { fi # START PATCH - # replace in the array ("git","bug", ...) to ("git-bug", ...) and adjust the index in cword + # replace in the array ("git","bug", ...) to ("git-bug", ...) and adjust the index in cword words=("git-bug" "${words[@]:2}") cword=$(($cword-1)) # END PATCH diff --git a/misc/diagrams/Readme.md b/misc/diagrams/Readme.md deleted file mode 100644 index 837a3212..00000000 --- a/misc/diagrams/Readme.md +++ /dev/null @@ -1 +0,0 @@ -The source of those diagrams is on draw.io. Couldn't find a good way to export :( diff --git a/misc/termui_recording.svg b/misc/termui_recording.svg deleted file mode 100644 index e1cff4a7..00000000 --- a/misc/termui_recording.svg +++ /dev/null @@ -1,43 +0,0 @@ -<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" id="terminal" baseProfile="full" viewBox="0 0 936 461" width="936" version="1.1"> - <defs> - <termtosvg:template_settings xmlns:termtosvg="https://github.com/nbedos/termtosvg"> - <termtosvg:screen_geometry columns="117" rows="27"/> - </termtosvg:template_settings> - <style type="text/css" id="generated-style"><![CDATA[:root { - --animation-duration: 114961ms; - } - - #screen { - font-family: 'DejaVu Sans Mono', monospace; - font-style: normal; - font-size: 14px; - } - - text { - dominant-baseline: text-before-edge; - }]]></style> - <style type="text/css" id="user-style"> - /* gjm8 color theme (source: https://terminal.sexy/) */ - .foreground {fill: #c5c5c5;} - .background {fill: #1c1c1c;} - .color0 {fill: #1c1c1c;} - .color1 {fill: #ff005b;} - .color2 {fill: #cee318;} - .color3 {fill: #ffe755;} - .color4 {fill: #048ac7;} - .color5 {fill: #833c9f;} - .color6 {fill: #0ac1cd;} - .color7 {fill: #e5e5e5;} - .color8 {fill: #1c1c1c;} - .color9 {fill: #ff005b;} - .color10 {fill: #cee318;} - .color11 {fill: #ffe755;} - .color12 {fill: #048ac7;} - .color13 {fill: #833c9f;} - .color14 {fill: #0ac1cd;} - .color15 {fill: #e5e5e5;} - </style> - </defs> - <svg id="screen" width="936" viewBox="0 0 936 459" preserveAspectRatio="xMidYMin meet"> - <defs><g id="g1"><text class="background" lengthAdjust="spacingAndGlyphs" textLength="8" x="0"> </text></g><g id="g2"><text class="color10" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="112" x="0">michael@debian</text><text class="color12" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="328" x="112"> ~/go/src/github.com/MichaelMure/git-bug </text><text class="color9" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="56" x="440">master </text><text class="color12" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="8" x="496">$</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="8" x="504"> </text><text class="background" lengthAdjust="spacingAndGlyphs" textLength="8" x="512"> </text></g><g id="g3"><text class="color10" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="112" x="0">michael@debian</text><text class="color12" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="328" x="112"> ~/go/src/github.com/MichaelMure/git-bug </text><text class="color9" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="56" x="440">master </text><text class="color12" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="8" x="496">$</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="16" x="504"> g</text><text class="background" lengthAdjust="spacingAndGlyphs" textLength="8" x="520"> </text></g><g id="g4"><text class="color10" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="112" x="0">michael@debian</text><text class="color12" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="328" x="112"> ~/go/src/github.com/MichaelMure/git-bug </text><text class="color9" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="56" x="440">master </text><text class="color12" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="8" x="496">$</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="504"> gi</text><text class="background" lengthAdjust="spacingAndGlyphs" textLength="8" x="528"> </text></g><g id="g5"><text class="color10" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="112" x="0">michael@debian</text><text class="color12" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="328" x="112"> ~/go/src/github.com/MichaelMure/git-bug </text><text class="color9" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="56" x="440">master </text><text class="color12" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="8" x="496">$</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="32" x="504"> git</text><text class="background" lengthAdjust="spacingAndGlyphs" textLength="8" x="536"> </text></g><g id="g6"><text class="color10" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="112" x="0">michael@debian</text><text class="color12" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="328" x="112"> ~/go/src/github.com/MichaelMure/git-bug </text><text class="color9" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="56" x="440">master </text><text class="color12" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="8" x="496">$</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="40" x="504"> git </text><text class="background" lengthAdjust="spacingAndGlyphs" textLength="8" x="544"> </text></g><g id="g7"><text class="color10" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="112" x="0">michael@debian</text><text class="color12" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="328" x="112"> ~/go/src/github.com/MichaelMure/git-bug </text><text class="color9" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="56" x="440">master </text><text class="color12" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="8" x="496">$</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="48" x="504"> git b</text><text class="background" lengthAdjust="spacingAndGlyphs" textLength="8" x="552"> </text></g><g id="g8"><text class="color10" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="112" x="0">michael@debian</text><text class="color12" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="328" x="112"> ~/go/src/github.com/MichaelMure/git-bug </text><text class="color9" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="56" x="440">master </text><text class="color12" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="8" x="496">$</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="56" x="504"> git bu</text><text class="background" lengthAdjust="spacingAndGlyphs" textLength="8" x="560"> </text></g><g id="g9"><text class="color10" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="112" x="0">michael@debian</text><text class="color12" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="328" x="112"> ~/go/src/github.com/MichaelMure/git-bug </text><text class="color9" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="56" x="440">master </text><text class="color12" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="8" x="496">$</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="64" x="504"> git bug</text><text class="background" lengthAdjust="spacingAndGlyphs" textLength="8" x="568"> </text></g><g id="g10"><text class="color10" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="112" x="0">michael@debian</text><text class="color12" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="328" x="112"> ~/go/src/github.com/MichaelMure/git-bug </text><text class="color9" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="56" x="440">master </text><text class="color12" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="8" x="496">$</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="72" x="504"> git bug </text><text class="background" lengthAdjust="spacingAndGlyphs" textLength="8" x="576"> </text></g><g id="g11"><text class="color10" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="112" x="0">michael@debian</text><text class="color12" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="328" x="112"> ~/go/src/github.com/MichaelMure/git-bug </text><text class="color9" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="56" x="440">master </text><text class="color12" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="8" x="496">$</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="80" x="504"> git bug t</text><text class="background" lengthAdjust="spacingAndGlyphs" textLength="8" x="584"> </text></g><g id="g12"><text class="color10" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="112" x="0">michael@debian</text><text class="color12" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="328" x="112"> ~/go/src/github.com/MichaelMure/git-bug </text><text class="color9" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="56" x="440">master </text><text class="color12" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="8" x="496">$</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="88" x="504"> git bug te</text><text class="background" lengthAdjust="spacingAndGlyphs" textLength="8" x="592"> </text></g><g id="g13"><text class="color10" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="112" x="0">michael@debian</text><text class="color12" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="328" x="112"> ~/go/src/github.com/MichaelMure/git-bug </text><text class="color9" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="56" x="440">master </text><text class="color12" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="8" x="496">$</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="96" x="504"> git bug ter</text><text class="background" lengthAdjust="spacingAndGlyphs" textLength="8" x="600"> </text></g><g id="g14"><text class="color10" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="112" x="0">michael@debian</text><text class="color12" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="328" x="112"> ~/go/src/github.com/MichaelMure/git-bug </text><text class="color9" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="56" x="440">master </text><text class="color12" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="8" x="496">$</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="104" x="504"> git bug term</text><text class="background" lengthAdjust="spacingAndGlyphs" textLength="8" x="608"> </text></g><g id="g15"><text class="color10" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="112" x="0">michael@debian</text><text class="color12" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="328" x="112"> ~/go/src/github.com/MichaelMure/git-bug </text><text class="color9" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="56" x="440">master </text><text class="color12" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="8" x="496">$</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="112" x="504"> git bug termu</text><text class="background" lengthAdjust="spacingAndGlyphs" textLength="8" x="616"> </text></g><g id="g16"><text class="color10" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="112" x="0">michael@debian</text><text class="color12" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="328" x="112"> ~/go/src/github.com/MichaelMure/git-bug </text><text class="color9" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="56" x="440">master </text><text class="color12" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="8" x="496">$</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="120" x="504"> git bug termui</text><text class="background" lengthAdjust="spacingAndGlyphs" textLength="8" x="624"> </text></g><g id="g17"><text class="color10" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="112" x="0">michael@debian</text><text class="color12" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="328" x="112"> ~/go/src/github.com/MichaelMure/git-bug </text><text class="color9" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="56" x="440">master </text><text class="color12" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="8" x="496">$</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="120" x="504"> git bug termui</text></g><g id="g18"><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="624" x="0">                                                                              </text></g><g id="g19"><text class="color0" lengthAdjust="spacingAndGlyphs" textLength="936" x="0"> 1be2ac3f  open    Rename git-bug => git-issue                       Martin Delille (…  C:6  L:0   2 weeks ago       </text></g><g id="g20"><text class="color6" lengthAdjust="spacingAndGlyphs" textLength="72" x="0"> 8f8bd854</text><text class="color3" lengthAdjust="spacingAndGlyphs" textLength="56" x="80"> open  </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="40" x="152">feat:</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="200">add</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="64" x="232">priority</text><text class="color5" lengthAdjust="spacingAndGlyphs" textLength="144" x="544"> Tobias Mersmann …</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="704">C:4</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="744">L:0</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="8" x="792">1</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="32" x="808">week</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="848">ago</text></g><g id="g21"><text class="color0" lengthAdjust="spacingAndGlyphs" textLength="936" x="0"> 8f8bd854  open    feat: add priority                                Tobias Mersmann …  C:4  L:0   1 week ago        </text></g><g id="g22"><text class="color6" lengthAdjust="spacingAndGlyphs" textLength="72" x="0"> a6ef83c6</text><text class="color3" lengthAdjust="spacingAndGlyphs" textLength="56" x="80"> open  </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="40" x="152">feat:</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="48" x="200">delete</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="8" x="256">a</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="272">bug</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="56" x="304">locally</text><text class="color5" lengthAdjust="spacingAndGlyphs" textLength="144" x="544"> Michael Muré (Mi…</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="704">C:0</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="744">L:1</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="8" x="792">1</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="40" x="808">month</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="856">ago</text></g><g id="g23"><text class="color0" lengthAdjust="spacingAndGlyphs" textLength="936" x="0"> a6ef83c6  open    feat: delete a bug locally                        Michael Muré (Mi…  C:0  L:1   1 month ago       </text></g><g id="g24"><text class="color6" lengthAdjust="spacingAndGlyphs" textLength="72" x="0"> d98af8ac</text><text class="color3" lengthAdjust="spacingAndGlyphs" textLength="56" x="80"> open  </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="40" x="152">feat:</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="40" x="200">clear</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="248">the</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="56" x="280">changes</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="344">not</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="48" x="376">pushed</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="432">yet</text><text class="color5" lengthAdjust="spacingAndGlyphs" textLength="144" x="544"> Michael Muré (Mi…</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="704">C:0</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="744">L:1</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="8" x="792">1</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="40" x="808">month</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="856">ago</text></g><g id="g25"><text class="color0" lengthAdjust="spacingAndGlyphs" textLength="936" x="0"> d98af8ac  open    feat: clear the changes not pushed yet            Michael Muré (Mi…  C:0  L:1   1 month ago       </text></g><g id="g26"><text class="color6" lengthAdjust="spacingAndGlyphs" textLength="72" x="0"> 1a716a62</text><text class="color3" lengthAdjust="spacingAndGlyphs" textLength="56" x="80"> open  </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="40" x="152">feat:</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="32" x="200">show</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="240">the</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="56" x="272">changes</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="336">not</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="48" x="368">pushed</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="424">yet</text><text class="color5" lengthAdjust="spacingAndGlyphs" textLength="144" x="544"> Michael Muré (Mi…</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="704">C:0</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="744">L:1</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="8" x="792">1</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="40" x="808">month</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="856">ago</text></g><g id="g27"><text class="color0" lengthAdjust="spacingAndGlyphs" textLength="936" x="0"> 1a716a62  open    feat: show the changes not pushed yet             Michael Muré (Mi…  C:0  L:1   1 month ago       </text></g><g id="g28"><text class="color6" lengthAdjust="spacingAndGlyphs" textLength="72" x="0"> 34083737</text><text class="color3" lengthAdjust="spacingAndGlyphs" textLength="56" x="80"> open  </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="40" x="152">feat:</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="56" x="200">git-bug</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="104" x="264">configuration</text><text class="color5" lengthAdjust="spacingAndGlyphs" textLength="144" x="544"> Michael Muré (Mi…</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="704">C:6</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="744">L:1</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="8" x="792">1</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="40" x="808">month</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="856">ago</text></g><g id="g29"><text class="color0" lengthAdjust="spacingAndGlyphs" textLength="936" x="0"> 34083737  open    feat: git-bug configuration                       Michael Muré (Mi…  C:6  L:1   1 month ago       </text></g><g id="g30"><text class="color6" lengthAdjust="spacingAndGlyphs" textLength="72" x="0"> 59b9f311</text><text class="color3" lengthAdjust="spacingAndGlyphs" textLength="56" x="80"> open  </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="40" x="152">feat:</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="48" x="200">Assign</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="48" x="256">labels</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="8" x="312">a</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="40" x="328">color</text><text class="color5" lengthAdjust="spacingAndGlyphs" textLength="144" x="544"> Luke Adams (adam…</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="704">C:5</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="744">L:1</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="8" x="792">1</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="40" x="808">month</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="856">ago</text></g><g id="g31"><text class="color0" lengthAdjust="spacingAndGlyphs" textLength="936" x="0"> 59b9f311  open    feat: Assign labels a color                       Luke Adams (adam…  C:5  L:1   1 month ago       </text></g><g id="g32"><text class="color6" lengthAdjust="spacingAndGlyphs" textLength="72" x="0"> dcd57c3e</text><text class="color3" lengthAdjust="spacingAndGlyphs" textLength="56" x="80"> open  </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="40" x="152">feat:</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="48" x="200">Github</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="64" x="256">exporter</text><text class="color5" lengthAdjust="spacingAndGlyphs" textLength="144" x="544"> Michael Muré (Mi…</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="704">C:5</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="744">L:1</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="8" x="792">1</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="40" x="808">month</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="856">ago</text></g><g id="g33"><text class="color0" lengthAdjust="spacingAndGlyphs" textLength="936" x="0"> dcd57c3e  open    feat: Github exporter                             Michael Muré (Mi…  C:5  L:1   1 month ago       </text></g><g id="g34"><text class="color6" lengthAdjust="spacingAndGlyphs" textLength="72" x="0"> e5d4ec2b</text><text class="color3" lengthAdjust="spacingAndGlyphs" textLength="56" x="80"> open  </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="64" x="152">Identity</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="80" x="224">management</text><text class="color5" lengthAdjust="spacingAndGlyphs" textLength="144" x="544"> Michael Muré (Mi…</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="704">C:0</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="744">L:2</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="8" x="792">2</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="48" x="808">months</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="864">ago</text></g><g id="g35"><text class="color0" lengthAdjust="spacingAndGlyphs" textLength="936" x="0"> e5d4ec2b  open    Identity management                               Michael Muré (Mi…  C:0  L:2   2 months ago      </text></g><g id="g36"><text class="color6" lengthAdjust="spacingAndGlyphs" textLength="72" x="0"> b54d5c94</text><text class="color3" lengthAdjust="spacingAndGlyphs" textLength="56" x="80"> open  </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="64" x="152">[feature</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="64" x="224">request]</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="56" x="296">Support</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="40" x="360">hooks</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="32" x="408">that</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="40" x="448">audit</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="40" x="496">`BUG…</text><text class="color5" lengthAdjust="spacingAndGlyphs" textLength="144" x="544"> Zhongming Qu (qz…</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="704">C:3</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="744">L:0</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="8" x="792">1</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="40" x="808">month</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="856">ago</text></g><g id="g37"><text class="color6" lengthAdjust="spacingAndGlyphs" textLength="72" x="0"> 1be2ac3f</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="8" x="72"> </text><text class="color3" lengthAdjust="spacingAndGlyphs" textLength="56" x="80"> open  </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="408" x="136">  Rename git-bug => git-issue                      </text><text class="color5" lengthAdjust="spacingAndGlyphs" textLength="144" x="544"> Martin Delille (…</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="248" x="688">  C:6  L:0   2 weeks ago       </text></g><g id="g38"><text class="color6" lengthAdjust="spacingAndGlyphs" textLength="72" x="0"> 8f8bd854</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="8" x="72"> </text><text class="color3" lengthAdjust="spacingAndGlyphs" textLength="56" x="80"> open  </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="408" x="136">  feat: add priority                               </text><text class="color5" lengthAdjust="spacingAndGlyphs" textLength="144" x="544"> Tobias Mersmann …</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="248" x="688">  C:4  L:0   1 week ago        </text></g><g id="g39"><text class="color6" lengthAdjust="spacingAndGlyphs" textLength="72" x="0"> a6ef83c6</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="8" x="72"> </text><text class="color3" lengthAdjust="spacingAndGlyphs" textLength="56" x="80"> open  </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="408" x="136">  feat: delete a bug locally                       </text><text class="color5" lengthAdjust="spacingAndGlyphs" textLength="144" x="544"> Michael Muré (Mi…</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="248" x="688">  C:0  L:1   1 month ago       </text></g><g id="g40"><text class="color6" lengthAdjust="spacingAndGlyphs" textLength="72" x="0"> d98af8ac</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="8" x="72"> </text><text class="color3" lengthAdjust="spacingAndGlyphs" textLength="56" x="80"> open  </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="408" x="136">  feat: clear the changes not pushed yet           </text><text class="color5" lengthAdjust="spacingAndGlyphs" textLength="144" x="544"> Michael Muré (Mi…</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="248" x="688">  C:0  L:1   1 month ago       </text></g><g id="g41"><text class="color6" lengthAdjust="spacingAndGlyphs" textLength="72" x="0"> 1a716a62</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="8" x="72"> </text><text class="color3" lengthAdjust="spacingAndGlyphs" textLength="56" x="80"> open  </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="408" x="136">  feat: show the changes not pushed yet            </text><text class="color5" lengthAdjust="spacingAndGlyphs" textLength="144" x="544"> Michael Muré (Mi…</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="248" x="688">  C:0  L:1   1 month ago       </text></g><g id="g42"><text class="color6" lengthAdjust="spacingAndGlyphs" textLength="72" x="0"> 34083737</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="8" x="72"> </text><text class="color3" lengthAdjust="spacingAndGlyphs" textLength="56" x="80"> open  </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="408" x="136">  feat: git-bug configuration                      </text><text class="color5" lengthAdjust="spacingAndGlyphs" textLength="144" x="544"> Michael Muré (Mi…</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="248" x="688">  C:6  L:1   1 month ago       </text></g><g id="g43"><text class="color6" lengthAdjust="spacingAndGlyphs" textLength="72" x="0"> 59b9f311</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="8" x="72"> </text><text class="color3" lengthAdjust="spacingAndGlyphs" textLength="56" x="80"> open  </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="408" x="136">  feat: Assign labels a color                      </text><text class="color5" lengthAdjust="spacingAndGlyphs" textLength="144" x="544"> Luke Adams (adam…</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="248" x="688">  C:5  L:1   1 month ago       </text></g><g id="g44"><text class="color6" lengthAdjust="spacingAndGlyphs" textLength="72" x="0"> dcd57c3e</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="8" x="72"> </text><text class="color3" lengthAdjust="spacingAndGlyphs" textLength="56" x="80"> open  </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="408" x="136">  feat: Github exporter                            </text><text class="color5" lengthAdjust="spacingAndGlyphs" textLength="144" x="544"> Michael Muré (Mi…</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="248" x="688">  C:5  L:1   1 month ago       </text></g><g id="g45"><text class="color6" lengthAdjust="spacingAndGlyphs" textLength="72" x="0"> e5d4ec2b</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="8" x="72"> </text><text class="color3" lengthAdjust="spacingAndGlyphs" textLength="56" x="80"> open  </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="408" x="136">  Identity management                              </text><text class="color5" lengthAdjust="spacingAndGlyphs" textLength="144" x="544"> Michael Muré (Mi…</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="248" x="688">  C:0  L:2   2 months ago      </text></g><g id="g46"><text class="color0" lengthAdjust="spacingAndGlyphs" textLength="936" x="0"> b54d5c94  open    [feature request] Support hooks that audit `BUG…  Zhongming Qu (qz…  C:3  L:0   1 month ago       </text></g><g id="g47"><text class="color6" lengthAdjust="spacingAndGlyphs" textLength="72" x="0"> 7d15d473</text><text class="color3" lengthAdjust="spacingAndGlyphs" textLength="56" x="80"> open  </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="40" x="152">feat:</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="56" x="200">comment</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="120" x="264">edition/removal</text><text class="color5" lengthAdjust="spacingAndGlyphs" textLength="144" x="544"> Michael Muré (Mi…</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="704">C:2</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="744">L:2</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="8" x="792">1</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="40" x="808">month</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="856">ago</text></g><g id="g48"><text class="color6" lengthAdjust="spacingAndGlyphs" textLength="72" x="0"> c318768f</text><text class="color3" lengthAdjust="spacingAndGlyphs" textLength="56" x="80"> open  </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="40" x="152">feat:</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="64" x="200">favorite</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="272">bug</text><text class="color5" lengthAdjust="spacingAndGlyphs" textLength="144" x="544"> Michael Muré (Mi…</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="704">C:0</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="744">L:1</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="8" x="792">2</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="48" x="808">months</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="864">ago</text></g><g id="g49"><text class="color6" lengthAdjust="spacingAndGlyphs" textLength="72" x="0"> 76559d04</text><text class="color3" lengthAdjust="spacingAndGlyphs" textLength="56" x="80"> open  </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="40" x="152">feat:</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="8" x="200">a</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="56" x="216">command</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="16" x="280">to</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="32" x="304">list</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="64" x="344">matching</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="416">bug</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="16" x="448">id</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="32" x="472">from</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="8" x="512">a</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="8" x="528">…</text><text class="color5" lengthAdjust="spacingAndGlyphs" textLength="144" x="544"> Michael Muré (Mi…</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="704">C:0</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="744">L:3</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="8" x="792">2</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="48" x="808">months</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="864">ago</text></g><g id="g50"><text class="color6" lengthAdjust="spacingAndGlyphs" textLength="72" x="0"> 56787b1b</text><text class="color3" lengthAdjust="spacingAndGlyphs" textLength="56" x="80"> open  </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="40" x="152">feat:</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="160" x="200">internationalization</text><text class="color5" lengthAdjust="spacingAndGlyphs" textLength="144" x="544"> Michael Muré (Mi…</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="704">C:2</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="744">L:2</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="8" x="792">2</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="48" x="808">months</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="864">ago</text></g><g id="g51"><text class="color6" lengthAdjust="spacingAndGlyphs" textLength="72" x="0"> 56ec0788</text><text class="color3" lengthAdjust="spacingAndGlyphs" textLength="56" x="80"> open  </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="152">CLI</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="48" x="184">Export</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="56" x="240">Command</text><text class="color5" lengthAdjust="spacingAndGlyphs" textLength="144" x="544"> andyl            </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="704">C:5</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="744">L:0</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="8" x="792">2</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="48" x="808">months</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="864">ago</text></g><g id="g52"><text class="color6" lengthAdjust="spacingAndGlyphs" textLength="72" x="0"> c7c71b5e</text><text class="color3" lengthAdjust="spacingAndGlyphs" textLength="56" x="80"> open  </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="40" x="152">feat:</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="48" x="200">Better</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="256">ZSH</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="40" x="288">shell</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="80" x="336">completion</text><text class="color5" lengthAdjust="spacingAndGlyphs" textLength="144" x="544"> Jonas Rylund Gle…</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="704">C:2</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="744">L:0</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="8" x="792">2</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="48" x="808">months</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="864">ago</text></g><g id="g53"><text class="color6" lengthAdjust="spacingAndGlyphs" textLength="72" x="0"> 009592b9</text><text class="color3" lengthAdjust="spacingAndGlyphs" textLength="56" x="80"> open  </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="152">Can</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="176" x="184">github/gitlab/gogs/etc</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="64" x="368">directly</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="56" x="440">support</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="32" x="504">git…</text><text class="color5" lengthAdjust="spacingAndGlyphs" textLength="144" x="544"> udhos            </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="704">C:5</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="744">L:1</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="8" x="792">2</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="48" x="808">months</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="864">ago</text></g><g id="g54"><text class="color6" lengthAdjust="spacingAndGlyphs" textLength="72" x="0"> 9dd20090</text><text class="color3" lengthAdjust="spacingAndGlyphs" textLength="56" x="80"> open  </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="32" x="152">Make</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="16" x="192">an</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="64" x="216">overview</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="16" x="288">of</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="312">the</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="56" x="344">various</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="96" x="408">bug-trackers</text><text class="color5" lengthAdjust="spacingAndGlyphs" textLength="144" x="544"> Michael Muré (Mi…</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="704">C:7</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="744">L:1</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="8" x="792">2</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="48" x="808">months</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="864">ago</text></g><g id="g55"><text class="color6" lengthAdjust="spacingAndGlyphs" textLength="72" x="0"> 44c354dc</text><text class="color3" lengthAdjust="spacingAndGlyphs" textLength="56" x="80"> open  </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="64" x="152">Terminal</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="40" x="224">shell</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="80" x="272">completion</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="360">for</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="56" x="392">Windows</text><text class="color5" lengthAdjust="spacingAndGlyphs" textLength="144" x="544"> gedw99 (gedw99)  </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="704">C:1</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="744">L:1</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="8" x="792">3</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="48" x="808">months</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="864">ago</text></g><g id="g56"><text class="color6" lengthAdjust="spacingAndGlyphs" textLength="72" x="0"> dfb1dded</text><text class="color3" lengthAdjust="spacingAndGlyphs" textLength="56" x="80"> open  </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="72" x="152">Reference</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="32" x="232">bugs</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="16" x="272">in</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="48" x="296">commit</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="64" x="352">messages</text><text class="color5" lengthAdjust="spacingAndGlyphs" textLength="144" x="544"> Ian Walter (ianw…</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="704">C:3</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="744">L:0</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="8" x="792">3</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="48" x="808">months</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="864">ago</text></g><g id="g57"><text class="color6" lengthAdjust="spacingAndGlyphs" textLength="72" x="0"> f2b2d83f</text><text class="color3" lengthAdjust="spacingAndGlyphs" textLength="56" x="80"> open  </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="40" x="152">feat:</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="48" x="200">Branch</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="56" x="256">reviews</text><text class="color5" lengthAdjust="spacingAndGlyphs" textLength="144" x="544"> theduke (theduke)</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="704">C:2</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="744">L:0</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="8" x="792">3</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="48" x="808">months</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="864">ago</text></g><g id="g58"><text class="color6" lengthAdjust="spacingAndGlyphs" textLength="72" x="0"> 5c16913b</text><text class="color3" lengthAdjust="spacingAndGlyphs" textLength="56" x="80"> open  </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="72" x="152">Question:</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="232">can</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="56" x="264">git-bug</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="16" x="328">be</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="40" x="352">aware</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="16" x="400">of</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="64" x="424">branches</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="496">and</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="8" x="528">…</text><text class="color5" lengthAdjust="spacingAndGlyphs" textLength="144" x="544"> johnnyutahh      </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="32" x="704">C:13</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="744">L:1</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="8" x="792">3</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="48" x="808">months</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="864">ago</text></g><g id="g59"><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="56" x="0">Showing</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="16" x="64">22</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="16" x="88">of</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="16" x="112">29</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="32" x="136">bugs</text></g><g id="g60"><text class="color6" lengthAdjust="spacingAndGlyphs" textLength="72" x="0"> abf8bb60</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="8" x="72"> </text><text class="color3" lengthAdjust="spacingAndGlyphs" textLength="56" x="80"> open  </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="408" x="136">  feat: git-bug should store metadata for comment… </text><text class="color5" lengthAdjust="spacingAndGlyphs" textLength="144" x="544"> Michael Muré (Mi…</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="248" x="688">  C:1  L:3   3 months ago      </text></g><g id="g61"><text class="color0" lengthAdjust="spacingAndGlyphs" textLength="936" x="0"> 6767e5f4  open    feat: Github import                               Michael Muré (Mi…  C:34 L:3   1 month ago       </text></g><g id="g62"><text class="color6" lengthAdjust="spacingAndGlyphs" textLength="72" x="0"> 0d786f28</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="8" x="72"> </text><text class="color3" lengthAdjust="spacingAndGlyphs" textLength="56" x="80"> open  </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="408" x="136">  Support for forking and then PR ?                </text><text class="color5" lengthAdjust="spacingAndGlyphs" textLength="144" x="544"> gedw99 (gedw99)  </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="248" x="688">  C:7  L:1   3 months ago      </text></g><g id="g63"><text class="color0" lengthAdjust="spacingAndGlyphs" textLength="936" x="0"> abf8bb60  open    feat: git-bug should store metadata for comment…  Michael Muré (Mi…  C:1  L:3   3 months ago      </text></g><g id="g64"><text class="color6" lengthAdjust="spacingAndGlyphs" textLength="72" x="0"> c5bc44f3</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="8" x="72"> </text><text class="color3" lengthAdjust="spacingAndGlyphs" textLength="56" x="80"> open  </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="408" x="136">  feat: media-embedding in messages                </text><text class="color5" lengthAdjust="spacingAndGlyphs" textLength="144" x="544"> Michael Muré (Mi…</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="248" x="688">  C:2  L:3   3 weeks ago       </text></g><g id="g65"><text class="color0" lengthAdjust="spacingAndGlyphs" textLength="936" x="0"> 0d786f28  open    Support for forking and then PR ?                 gedw99 (gedw99)    C:7  L:1   3 months ago      </text></g><g id="g66"><text class="color6" lengthAdjust="spacingAndGlyphs" textLength="72" x="0"> cf54e668</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="8" x="72"> </text><text class="color3" lengthAdjust="spacingAndGlyphs" textLength="56" x="80"> open  </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="408" x="136">  feat: replace the manual rebase code with built… </text><text class="color5" lengthAdjust="spacingAndGlyphs" textLength="144" x="544"> Ben Boeckel (mat…</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="248" x="688">  C:1  L:1   3 months ago      </text></g><g id="g67"><text class="color6" lengthAdjust="spacingAndGlyphs" textLength="72" x="0"> adbca8cd</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="8" x="72"> </text><text class="color3" lengthAdjust="spacingAndGlyphs" textLength="56" x="80"> open  </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="408" x="136">  feat: render comments as Markdown                </text><text class="color5" lengthAdjust="spacingAndGlyphs" textLength="144" x="544"> Michael Muré (Mi…</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="248" x="688">  C:3  L:2   2 months ago      </text></g><g id="g68"><text class="color6" lengthAdjust="spacingAndGlyphs" textLength="72" x="0"> c508298a</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="8" x="72"> </text><text class="color3" lengthAdjust="spacingAndGlyphs" textLength="56" x="80"> open  </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="408" x="136">  feat: configuration for the default remote       </text><text class="color5" lengthAdjust="spacingAndGlyphs" textLength="144" x="544"> Michael Muré (Mi…</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="248" x="688">  C:0  L:4   2 months ago      </text></g><g id="g69"><text class="color0" lengthAdjust="spacingAndGlyphs" textLength="936" x="0"> c5bc44f3  open    feat: media-embedding in messages                 Michael Muré (Mi…  C:2  L:3   3 weeks ago       </text></g><g id="g70"><text class="color6" lengthAdjust="spacingAndGlyphs" textLength="72" x="0"> 6767e5f4</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="8" x="72"> </text><text class="color3" lengthAdjust="spacingAndGlyphs" textLength="56" x="80"> open  </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="408" x="136">  feat: Github import                              </text><text class="color5" lengthAdjust="spacingAndGlyphs" textLength="144" x="544"> Michael Muré (Mi…</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="248" x="688">  C:34 L:3   1 month ago       </text></g><g id="g71"><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="936" x="0">                                                                                                                     </text></g><g id="g72"><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="72" x="0">         </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="56" x="80">       </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="40" x="152">     </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="56" x="200">       </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="120" x="264">               </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="144" x="544">                  </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="704">   </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="744">   </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="8" x="792"> </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="40" x="808">     </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="856">   </text></g><g id="g73"><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="72" x="0">         </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="56" x="80">       </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="40" x="152">     </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="64" x="200">        </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="272">   </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="144" x="544">                  </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="704">   </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="744">   </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="8" x="792"> </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="48" x="808">      </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="864">   </text></g><g id="g74"><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="72" x="0">         </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="56" x="80">       </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="40" x="152">     </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="8" x="200"> </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="56" x="216">       </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="16" x="280">  </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="32" x="304">    </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="64" x="344">        </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="416">   </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="16" x="448">  </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="32" x="472">    </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="8" x="512"> </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="8" x="528"> </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="144" x="544">                  </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="704">   </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="744">   </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="8" x="792"> </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="48" x="808">      </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="864">   </text></g><g id="g75"><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="72" x="0">         </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="56" x="80">       </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="40" x="152">     </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="160" x="200">                    </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="144" x="544">                  </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="704">   </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="744">   </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="8" x="792"> </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="48" x="808">      </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="864">   </text></g><g id="g76"><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="72" x="0">         </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="56" x="80">       </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="152">   </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="48" x="184">      </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="56" x="240">       </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="144" x="544">                  </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="704">   </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="744">   </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="8" x="792"> </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="48" x="808">      </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="864">   </text></g><g id="g77"><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="72" x="0">         </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="56" x="80">       </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="40" x="152">     </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="48" x="200">      </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="256">   </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="40" x="288">     </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="80" x="336">          </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="144" x="544">                  </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="704">   </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="744">   </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="8" x="792"> </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="48" x="808">      </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="864">   </text></g><g id="g78"><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="72" x="0">         </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="56" x="80">       </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="152">   </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="176" x="184">                      </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="64" x="368">        </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="56" x="440">       </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="32" x="504">    </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="144" x="544">                  </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="704">   </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="744">   </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="8" x="792"> </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="48" x="808">      </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="864">   </text></g><g id="g79"><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="72" x="0">         </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="56" x="80">       </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="32" x="152">    </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="16" x="192">  </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="64" x="216">        </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="16" x="288">  </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="312">   </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="56" x="344">       </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="96" x="408">            </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="144" x="544">                  </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="704">   </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="744">   </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="8" x="792"> </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="48" x="808">      </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="864">   </text></g><g id="g80"><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="72" x="0">         </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="56" x="80">       </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="64" x="152">        </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="40" x="224">     </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="80" x="272">          </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="360">   </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="56" x="392">       </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="144" x="544">                  </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="704">   </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="744">   </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="8" x="792"> </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="48" x="808">      </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="864">   </text></g><g id="g81"><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="72" x="0">         </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="56" x="80">       </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="72" x="152">         </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="32" x="232">    </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="16" x="272">  </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="48" x="296">      </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="64" x="352">        </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="144" x="544">                  </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="704">   </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="744">   </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="8" x="792"> </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="48" x="808">      </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="864">   </text></g><g id="g82"><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="72" x="0">         </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="56" x="80">       </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="40" x="152">     </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="48" x="200">      </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="56" x="256">       </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="144" x="544">                  </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="704">   </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="744">   </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="8" x="792"> </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="48" x="808">      </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="864">   </text></g><g id="g83"><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="72" x="0">         </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="56" x="80">       </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="72" x="152">         </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="232">   </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="56" x="264">       </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="16" x="328">  </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="40" x="352">     </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="16" x="400">  </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="64" x="424">        </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="496">   </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="8" x="528"> </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="144" x="544">                  </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="32" x="704">    </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="744">   </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="8" x="792"> </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="48" x="808">      </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="864">   </text></g><g id="g84"><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="56" x="0">Showing</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="104" x="64">7 of 29 bugs </text></g><g id="g85"><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="624" x="0"> ID        STATUS  TITLE                                             AUTHOR   </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="56" x="704">SUMMARY</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="32" x="792">LAST</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="32" x="832">EDIT</text></g><g id="g86"><text class="color6" lengthAdjust="spacingAndGlyphs" textLength="72" x="0"> b54d5c94</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="8" x="72"> </text><text class="color3" lengthAdjust="spacingAndGlyphs" textLength="56" x="80"> open  </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="408" x="136">  [feature request] Support hooks that audit `BUG… </text><text class="color5" lengthAdjust="spacingAndGlyphs" textLength="144" x="544"> Zhongming Qu (qz…</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="248" x="688">  C:3  L:0   1 month ago       </text></g><g id="g87"><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="56" x="0">Showing</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="104" x="64">22 of 29 bugs</text></g><g id="g88"><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="936" x="0">[q] Quit [s] Search [←↓↑→,hjkl] Navigation [↵] Open bug [n] New bug [i] Pull [o] Push                                </text></g><g id="g89"><text class="background" lengthAdjust="spacingAndGlyphs" textLength="8" x="0"> </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="616" x="8">                                                                             </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="56" x="704">       </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="32" x="792">    </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="32" x="832">    </text></g><g id="g90"><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="56" x="0">       </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="104" x="64">             </text></g><g id="g91"><text class="background" lengthAdjust="spacingAndGlyphs" textLength="16" x="0">^X</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="920" x="16"> Quitter                                                                                                           </text></g><g id="g92"><text class="background" lengthAdjust="spacingAndGlyphs" textLength="8" x="0">s</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="928" x="8">tatus:open                                                                                                          </text></g><g id="g93"><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="936" x="0">status:open                                                                                                          </text></g><g id="g94"><text class="background" lengthAdjust="spacingAndGlyphs" textLength="8" x="0"> </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="928" x="8">                                                                                                                    </text></g><g id="g95"><text class="background" lengthAdjust="spacingAndGlyphs" textLength="936" x="0">  GNU nano 3.1         /home/michael/go/src/github.com/MichaelMure/git-bug/.git/BUG_MESSAGE_EDITMSG                  </text></g><g id="g96"><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="88" x="0">status:open</text><text class="background" lengthAdjust="spacingAndGlyphs" textLength="8" x="88"> </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="840" x="96">                                                                                                         </text></g><g id="g97"><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="96" x="0">status:open </text><text class="background" lengthAdjust="spacingAndGlyphs" textLength="8" x="96"> </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="832" x="104">                                                                                                        </text></g><g id="g98"><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="104" x="0">status:open l</text><text class="background" lengthAdjust="spacingAndGlyphs" textLength="8" x="104"> </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="824" x="112">                                                                                                       </text></g><g id="g99"><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="112" x="0">status:open la</text><text class="background" lengthAdjust="spacingAndGlyphs" textLength="8" x="112"> </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="816" x="120">                                                                                                      </text></g><g id="g100"><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="120" x="0">status:open lab</text><text class="background" lengthAdjust="spacingAndGlyphs" textLength="8" x="120"> </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="808" x="128">                                                                                                     </text></g><g id="g101"><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="128" x="0">status:open labe</text><text class="background" lengthAdjust="spacingAndGlyphs" textLength="8" x="128"> </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="800" x="136">                                                                                                    </text></g><g id="g102"><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="136" x="0">status:open label</text><text class="background" lengthAdjust="spacingAndGlyphs" textLength="8" x="136"> </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="792" x="144">                                                                                                   </text></g><g id="g103"><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="144" x="0">status:open label:</text><text class="background" lengthAdjust="spacingAndGlyphs" textLength="8" x="144"> </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="784" x="152">                                                                                                  </text></g><g id="g104"><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="152" x="0">status:open label:C</text><text class="background" lengthAdjust="spacingAndGlyphs" textLength="8" x="152"> </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="776" x="160">                                                                                                 </text></g><g id="g105"><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="160" x="0">status:open label:Co</text><text class="background" lengthAdjust="spacingAndGlyphs" textLength="8" x="160"> </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="768" x="168">                                                                                                </text></g><g id="g106"><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="168" x="0">status:open label:Cor</text><text class="background" lengthAdjust="spacingAndGlyphs" textLength="8" x="168"> </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="760" x="176">                                                                                               </text></g><g id="g107"><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="176" x="0">status:open label:Core</text><text class="background" lengthAdjust="spacingAndGlyphs" textLength="8" x="176"> </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="752" x="184">                                                                                              </text></g><g id="g108"><text class="background" lengthAdjust="spacingAndGlyphs" textLength="192" x="368">[ Lecture de 25 lignes ]</text></g><g id="g109"><text class="background" lengthAdjust="spacingAndGlyphs" textLength="16" x="0">^G</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="40" x="16"> Aide</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="64" x="64">        </text><text class="background" lengthAdjust="spacingAndGlyphs" textLength="16" x="128">^O</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="56" x="144"> Écrire</text><text class="background" lengthAdjust="spacingAndGlyphs" textLength="16" x="256">^W</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="112" x="272"> Chercher     </text><text class="background" lengthAdjust="spacingAndGlyphs" textLength="16" x="384">^K</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="56" x="400"> Couper</text><text class="background" lengthAdjust="spacingAndGlyphs" textLength="16" x="512">^J</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="112" x="528"> Justifier    </text><text class="background" lengthAdjust="spacingAndGlyphs" textLength="16" x="640">^C</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="112" x="656"> Pos. cur.    </text><text class="background" lengthAdjust="spacingAndGlyphs" textLength="24" x="768">M-U</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="64" x="792"> Annuler</text></g><g id="g110"><text class="background" lengthAdjust="spacingAndGlyphs" textLength="16" x="0">^X</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="112" x="16"> Quitter      </text><text class="background" lengthAdjust="spacingAndGlyphs" textLength="16" x="128">^R</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="112" x="144"> Lire fich.   </text><text class="background" lengthAdjust="spacingAndGlyphs" textLength="16" x="256">^\</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="112" x="272"> Remplacer    </text><text class="background" lengthAdjust="spacingAndGlyphs" textLength="16" x="384">^U</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="112" x="400"> Coller       </text><text class="background" lengthAdjust="spacingAndGlyphs" textLength="16" x="512">^T</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="112" x="528"> Orthograp.   </text><text class="background" lengthAdjust="spacingAndGlyphs" textLength="16" x="640">^_</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="112" x="656"> Aller lig.   </text><text class="background" lengthAdjust="spacingAndGlyphs" textLength="24" x="768">M-E</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="144" x="792"> Refaire          </text></g><g id="g111"><text class="background" lengthAdjust="spacingAndGlyphs" textLength="936" x="0">Écrire l'espace modifié ? (Répondre « Non » ABANDONNE les modifications.)                                            </text></g><g id="g112"><text class="background" lengthAdjust="spacingAndGlyphs" textLength="16" x="0"> O</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="920" x="16"> Oui                                                                                                               </text></g><g id="g113"><text class="background" lengthAdjust="spacingAndGlyphs" textLength="16" x="0"> N</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="112" x="16"> Non          </text><text class="background" lengthAdjust="spacingAndGlyphs" textLength="16" x="128">^C</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="792" x="144"> Annuler                                                                                           </text></g><g id="g114"><text class="background" lengthAdjust="spacingAndGlyphs" textLength="936" x="0">Nom du fichier à écrire: /home/michael/go/src/github.com/MichaelMure/git-bug/.git/BUG_MESSAGE_EDITMSG                </text></g><g id="g115"><text class="background" lengthAdjust="spacingAndGlyphs" textLength="936" x="0">  GNU nano 3.1         /home/michael/go/src/github.com/MichaelMure/git-bug/.git/BUG_MESSAGE_EDITMSG         Modifié  </text></g><g id="g116"><text class="background" lengthAdjust="spacingAndGlyphs" textLength="16" x="0">^G</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="216" x="16"> Aide                      </text><text class="background" lengthAdjust="spacingAndGlyphs" textLength="24" x="232">M-D</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="208" x="256"> Format DOS               </text><text class="background" lengthAdjust="spacingAndGlyphs" textLength="24" x="464">M-A</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="208" x="488"> Ajout (à la fin)         </text><text class="background" lengthAdjust="spacingAndGlyphs" textLength="24" x="696">M-B</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="216" x="720"> Copie de sécu.            </text></g><g id="g117"><text class="background" lengthAdjust="spacingAndGlyphs" textLength="16" x="0">^C</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="216" x="16"> Annuler                   </text><text class="background" lengthAdjust="spacingAndGlyphs" textLength="24" x="232">M-M</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="208" x="256"> Format Mac               </text><text class="background" lengthAdjust="spacingAndGlyphs" textLength="24" x="464">M-P</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="208" x="488"> Ajout (au début)         </text><text class="background" lengthAdjust="spacingAndGlyphs" textLength="16" x="696">^T</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="224" x="712"> Parcourir                  </text></g><g id="g118"><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="936" x="0">status:open label:Core                                                                                               </text></g><g id="g119"><text class="color6" lengthAdjust="spacingAndGlyphs" textLength="224" x="0"># Please edit the bug query.</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="712" x="224">                                                                                         </text></g><g id="g120"><text class="color6" lengthAdjust="spacingAndGlyphs" textLength="664" x="0"># Lines starting with '#' will be ignored, and an empty query aborts the operation.</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="272" x="664">                                  </text></g><g id="g121"><text class="color6" lengthAdjust="spacingAndGlyphs" textLength="8" x="0">#</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="928" x="8">                                                                                                                    </text></g><g id="g122"><text class="color6" lengthAdjust="spacingAndGlyphs" textLength="448" x="0"># Example: status:open author:"rené descartes" sort:edit</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="488" x="448">                                                             </text></g><g id="g123"><text class="color6" lengthAdjust="spacingAndGlyphs" textLength="160" x="0"># Valid filters are:</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="776" x="160">                                                                                                 </text></g><g id="g124"><text class="color6" lengthAdjust="spacingAndGlyphs" textLength="240" x="0"># - status:open, status:closed</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="696" x="240">                                                                                       </text></g><g id="g125"><text class="color6" lengthAdjust="spacingAndGlyphs" textLength="144" x="0"># - author:<query></text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="40" x="152">     </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="56" x="200">       </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="120" x="264">               </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="144" x="544">                  </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="704">   </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="744">   </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="8" x="792"> </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="40" x="808">     </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="856">   </text></g><g id="g126"><text class="color6" lengthAdjust="spacingAndGlyphs" textLength="136" x="0"># - label:<label></text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="40" x="152">     </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="64" x="200">        </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="272">   </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="144" x="544">                  </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="704">   </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="744">   </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="8" x="792"> </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="48" x="808">      </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="864">   </text></g><g id="g127"><text class="color6" lengthAdjust="spacingAndGlyphs" textLength="96" x="0"># - no:label</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="40" x="96">     </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="40" x="152">     </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="8" x="200"> </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="56" x="216">       </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="16" x="280">  </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="32" x="304">    </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="64" x="344">        </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="416">   </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="16" x="448">  </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="32" x="472">    </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="8" x="512"> </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="8" x="528"> </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="144" x="544">                  </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="704">   </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="744">   </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="8" x="792"> </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="48" x="808">      </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="864">   </text></g><g id="g128"><text class="color6" lengthAdjust="spacingAndGlyphs" textLength="8" x="0">#</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="64" x="8">        </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="56" x="80">       </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="40" x="152">     </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="160" x="200">                    </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="144" x="544">                  </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="704">   </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="744">   </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="8" x="792"> </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="48" x="808">      </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="864">   </text></g><g id="g129"><text class="color6" lengthAdjust="spacingAndGlyphs" textLength="72" x="0"># Sorting</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="56" x="80">       </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="152">   </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="48" x="184">      </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="56" x="240">       </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="144" x="544">                  </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="704">   </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="744">   </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="8" x="792"> </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="48" x="808">      </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="864">   </text></g><g id="g130"><text class="color6" lengthAdjust="spacingAndGlyphs" textLength="8" x="0">#</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="64" x="8">        </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="56" x="80">       </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="40" x="152">     </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="48" x="200">      </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="256">   </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="40" x="288">     </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="80" x="336">          </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="144" x="544">                  </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="704">   </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="744">   </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="8" x="792"> </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="48" x="808">      </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="864">   </text></g><g id="g131"><text class="color6" lengthAdjust="spacingAndGlyphs" textLength="304" x="0"># - sort:id, sort:id-desc, sort:id-asc</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="56" x="304">       </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="64" x="368">        </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="56" x="440">       </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="32" x="504">    </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="144" x="544">                  </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="704">   </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="744">   </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="8" x="792"> </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="48" x="808">      </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="864">   </text></g><g id="g132"><text class="color6" lengthAdjust="spacingAndGlyphs" textLength="448" x="0"># - sort:creation, sort:creation-desc, sort:creation-asc</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="56" x="448">       </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="144" x="544">                  </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="704">   </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="744">   </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="8" x="792"> </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="48" x="808">      </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="864">   </text></g><g id="g133"><text class="color6" lengthAdjust="spacingAndGlyphs" textLength="352" x="0"># - sort:edit, sort:edit-desc, sort:edit-asc</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="360">   </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="56" x="392">       </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="144" x="544">                  </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="704">   </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="744">   </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="8" x="792"> </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="48" x="808">      </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="864">   </text></g><g id="g134"><text class="color6" lengthAdjust="spacingAndGlyphs" textLength="8" x="0">#</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="64" x="8">        </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="56" x="80">       </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="72" x="152">         </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="32" x="232">    </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="16" x="272">  </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="48" x="296">      </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="64" x="352">        </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="144" x="544">                  </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="704">   </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="744">   </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="8" x="792"> </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="48" x="808">      </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="864">   </text></g><g id="g135"><text class="color6" lengthAdjust="spacingAndGlyphs" textLength="56" x="0"># Notes</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="16" x="56">  </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="56" x="80">       </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="40" x="152">     </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="48" x="200">      </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="56" x="256">       </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="144" x="544">                  </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="704">   </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="744">   </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="8" x="792"> </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="48" x="808">      </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="864">   </text></g><g id="g136"><text class="color6" lengthAdjust="spacingAndGlyphs" textLength="16" x="0"># </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="56" x="16">       </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="56" x="80">       </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="72" x="152">         </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="232">   </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="56" x="264">       </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="16" x="328">  </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="40" x="352">     </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="16" x="400">  </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="64" x="424">        </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="496">   </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="8" x="528"> </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="144" x="544">                  </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="32" x="704">    </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="744">   </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="8" x="792"> </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="48" x="808">      </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="864">   </text></g><g id="g137"><text class="color0" lengthAdjust="spacingAndGlyphs" textLength="936" x="0"> 44c354dc  open    Terminal shell completion for Windows             gedw99 (gedw99)    C:1  L:1   3 months ago      </text></g><g id="g138"><text class="color6" lengthAdjust="spacingAndGlyphs" textLength="72" x="0"> 5c16913b</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="8" x="72"> </text><text class="color3" lengthAdjust="spacingAndGlyphs" textLength="56" x="80"> open  </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="408" x="136">  Question: can git-bug be aware of branches and … </text><text class="color5" lengthAdjust="spacingAndGlyphs" textLength="144" x="544"> johnnyutahh      </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="248" x="688">  C:13 L:1   3 months ago      </text></g><g id="g139"><text class="color0" lengthAdjust="spacingAndGlyphs" textLength="936" x="0"> 5c16913b  open    Question: can git-bug be aware of branches and …  johnnyutahh        C:13 L:1   3 months ago      </text></g><g id="g140"><text class="color0" lengthAdjust="spacingAndGlyphs" textLength="936" x="0"> cf54e668  open    feat: replace the manual rebase code with built…  Ben Boeckel (mat…  C:1  L:1   3 months ago      </text></g><g id="g141"><text class="color6" lengthAdjust="spacingAndGlyphs" textLength="72" x="0"> 44c354dc</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="8" x="72"> </text><text class="color3" lengthAdjust="spacingAndGlyphs" textLength="56" x="80"> open  </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="408" x="136">  Terminal shell completion for Windows            </text><text class="color5" lengthAdjust="spacingAndGlyphs" textLength="144" x="544"> gedw99 (gedw99)  </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="248" x="688">  C:1  L:1   3 months ago      </text></g><g id="g142"><text class="color6" lengthAdjust="spacingAndGlyphs" textLength="72" x="0"> 76559d04</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="8" x="72"> </text><text class="color3" lengthAdjust="spacingAndGlyphs" textLength="56" x="80"> open  </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="408" x="136">  feat: a command to list matching bug id from a … </text><text class="color5" lengthAdjust="spacingAndGlyphs" textLength="144" x="544"> Michael Muré (Mi…</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="248" x="688">  C:0  L:3   2 months ago      </text></g><g id="g143"><text class="color6" lengthAdjust="spacingAndGlyphs" textLength="72" x="0"> 7d15d473</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="8" x="72"> </text><text class="color3" lengthAdjust="spacingAndGlyphs" textLength="56" x="80"> open  </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="408" x="136">  feat: comment edition/removal                    </text><text class="color5" lengthAdjust="spacingAndGlyphs" textLength="144" x="544"> Michael Muré (Mi…</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="248" x="688">  C:2  L:2   1 month ago       </text></g><g id="g144"><text class="color0" lengthAdjust="spacingAndGlyphs" textLength="936" x="0"> 76559d04  open    feat: a command to list matching bug id from a …  Michael Muré (Mi…  C:0  L:3   2 months ago      </text></g><g id="g145"><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="936" x="0"> ID        STATUS  TITLE                                             AUTHOR             SUMMARY    LAST EDIT         </text></g><g id="g146"><text class="color0" lengthAdjust="spacingAndGlyphs" textLength="936" x="0"> 7d15d473  open    feat: comment edition/removal                     Michael Muré (Mi…  C:2  L:2   1 month ago       </text></g><g id="g147"><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="144" x="0">                  </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="40" x="152">     </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="56" x="200">       </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="120" x="264">               </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="144" x="544">                  </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="704">   </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="744">   </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="8" x="792"> </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="40" x="808">     </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="856">   </text></g><g id="g148"><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="136" x="0">                 </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="40" x="152">     </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="64" x="200">        </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="272">   </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="144" x="544">                  </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="704">   </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="744">   </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="8" x="792"> </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="48" x="808">      </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="864">   </text></g><g id="g149"><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="136" x="0">                 </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="40" x="152">     </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="8" x="200"> </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="56" x="216">       </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="16" x="280">  </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="32" x="304">    </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="64" x="344">        </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="416">   </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="16" x="448">  </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="32" x="472">    </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="8" x="512"> </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="8" x="528"> </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="144" x="544">                  </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="704">   </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="744">   </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="8" x="792"> </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="48" x="808">      </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="864">   </text></g><g id="g150"><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="352" x="0">                                            </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="360">   </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="56" x="392">       </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="144" x="544">                  </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="704">   </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="744">   </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="8" x="792"> </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="48" x="808">      </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="864">   </text></g><g id="g151"><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="936" x="0">Showing 10 of 10 bugs                                                                                                </text></g><g id="g152"><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="936" x="0">                                                                                  enhancement                        </text></g><g id="g153"><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="936" x="0">     It would be neat to support comment edition or removal. A few notes:                                            </text></g><g id="g154"><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="936" x="0">     - require two new Operations                                                                                    </text></g><g id="g155"><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="936" x="0">     - as the data model is immutable, it would not fully erase the previous                                         </text></g><g id="g156"><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="936" x="0">     comment version. While it would not be visible in the UI anymore, it woul                                       </text></g><g id="g157"><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="936" x="0">     still be readable through the bug history.                                                                      </text></g><g id="g158"><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="936" x="0">     - in bug.Snapshot, a proper `Timeline` needs to be implemented and would                                        </text></g><g id="g159"><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="192" x="0">     replace the current</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="216" x="200">usage of `Operations`. This</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="80" x="424">`Timeline`</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="176" x="512">would hold the        </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="704">   </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="744">   </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="8" x="792"> </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="40" x="808">     </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="856">   </text></g><g id="g160"><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="136" x="0">     data that is</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="192" x="144">expected to be displayed</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="16" x="344">in</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="8" x="368">a</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="384">UI,</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="56" x="416">instead</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="16" x="480">of</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="504">the</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="152" x="536">raw stream         </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="704">   </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="744">   </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="8" x="792"> </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="48" x="808">      </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="864">   </text></g><g id="g161"><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="136" x="0">     of events   </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="40" x="152">     </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="8" x="200"> </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="56" x="216">       </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="16" x="280">  </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="32" x="304">    </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="64" x="344">        </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="416">   </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="16" x="448">  </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="32" x="472">    </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="8" x="512"> </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="8" x="528"> </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="144" x="544">                  </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="704">   </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="744">   </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="8" x="792"> </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="48" x="808">      </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="864">   </text></g><g id="g162"><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="936" x="0">┌─────────────────────────────────────────────────────────────────────────────┐   enhancement                        </text></g><g id="g163"><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="936" x="0">│    It would be neat to support comment edition or removal. A few notes:     │                                      </text></g><g id="g164"><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="936" x="0">│                                                                             │                                      </text></g><g id="g165"><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="936" x="0">│    - require two new Operations                                             │                                      </text></g><g id="g166"><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="936" x="0">│    - as the data model is immutable, it would not fully erase the previous  │                                      </text></g><g id="g167"><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="936" x="0">│    comment version. While it would not be visible in the UI anymore, it woul│                                      </text></g><g id="g168"><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="936" x="0">│    still be readable through the bug history.                               │                                      </text></g><g id="g169"><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="936" x="0">│    - in bug.Snapshot, a proper `Timeline` needs to be implemented and would │                                      </text></g><g id="g170"><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="192" x="0">│    replace the current</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="216" x="200">usage of `Operations`. This</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="80" x="424">`Timeline`</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="176" x="512">would hold the│       </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="704">   </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="744">   </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="8" x="792"> </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="40" x="808">     </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="856">   </text></g><g id="g171"><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="136" x="0">│    data that is</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="192" x="144">expected to be displayed</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="16" x="344">in</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="8" x="368">a</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="384">UI,</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="56" x="416">instead</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="16" x="480">of</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="504">the</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="152" x="536">raw stream │       </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="704">   </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="744">   </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="8" x="792"> </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="48" x="808">      </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="864">   </text></g><g id="g172"><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="136" x="0">│    of events   </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="40" x="152">     </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="8" x="200"> </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="56" x="216">       </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="16" x="280">  </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="32" x="304">    </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="64" x="344">        </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="416">   </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="16" x="448">  </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="32" x="472">    </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="8" x="512"> </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="8" x="528"> </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="144" x="544">          │       </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="704">   </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="744">   </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="8" x="792"> </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="48" x="808">      </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="864">   </text></g><g id="g173"><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="688" x="0">└─────────────────────────────────────────────────────────────────────────────┘       </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="704">   </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="744">   </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="8" x="792"> </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="48" x="808">      </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="864">   </text></g><g id="g174"><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="8" x="0"> </text><text class="color5" lengthAdjust="spacingAndGlyphs" textLength="208" x="8">Michael Muré (MichaelMure)</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="56" x="216"> added </text><text class="foreground" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="104" x="272">"enhancement"</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="48" x="376"> label</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="16" x="432">on</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="456">Sep</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="16" x="488">21</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="176" x="512">2018                  </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="704">   </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="744">   </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="8" x="792"> </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="48" x="808">      </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="864">   </text></g><g id="g175"><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="360" x="0">                                             </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="64" x="368">        </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="56" x="440">       </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="32" x="504">    </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="144" x="544">                  </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="704">   </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="744">   </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="8" x="792"> </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="48" x="808">      </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="864">   </text></g><g id="g176"><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="688" x="0">┌─────────────────────────────────────────────────────────────────────────────┐       </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="704">   </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="744">   </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="8" x="792"> </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="48" x="808">      </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="864">   </text></g><g id="g177"><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="8" x="0">│</text><text class="color5" lengthAdjust="spacingAndGlyphs" textLength="208" x="8">Michael Muré (MichaelMure)</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="56" x="216"> added </text><text class="foreground" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="104" x="272">"enhancement"</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="48" x="376"> label</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="16" x="432">on</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="456">Sep</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="16" x="488">21</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="176" x="512">2018          │       </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="704">   </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="744">   </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="8" x="792"> </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="48" x="808">      </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="864">   </text></g><g id="g178"><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="504" x="0">                                                               </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="144" x="544">                  </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="704">   </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="744">   </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="8" x="792"> </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="48" x="808">      </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="864">   </text></g><g id="g179"><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="8" x="0"> </text><text class="color5" lengthAdjust="spacingAndGlyphs" textLength="208" x="8">Michael Muré (MichaelMure)</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="56" x="216"> added </text><text class="foreground" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="48" x="272">"Core"</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="128" x="320"> label on Sep 21</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="32" x="456">2018</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="144" x="544">                  </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="704">   </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="744">   </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="8" x="792"> </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="48" x="808">      </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="864">   </text></g><g id="g180"><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="8" x="8">[</text><text class="color6" lengthAdjust="spacingAndGlyphs" textLength="64" x="16">7d15d473</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="8" x="80">]</text><text class="foreground" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="232" x="96">feat: comment edition/removal</text><text class="foreground" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="48" x="640">Labels</text></g><g id="g181"><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="16" x="0"> [</text><text class="color3" lengthAdjust="spacingAndGlyphs" textLength="32" x="16">open</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="16" x="48">] </text><text class="color5" lengthAdjust="spacingAndGlyphs" textLength="208" x="64">Michael Muré (MichaelMure)</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="664" x="272"> opened this bug on Sep 21 2018                 Core                               </text></g><g id="g182"><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="688" x="0">                                                                                      </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="704">   </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="744">   </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="8" x="792"> </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="48" x="808">      </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="864">   </text></g><g id="g183"><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="8" x="0">│</text><text class="color5" lengthAdjust="spacingAndGlyphs" textLength="208" x="8">Michael Muré (MichaelMure)</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="56" x="216"> added </text><text class="foreground" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="48" x="272">"Core"</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="128" x="320"> label on Sep 21</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="32" x="456">2018</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="144" x="544">          │       </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="704">   </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="744">   </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="8" x="792"> </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="48" x="808">      </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="864">   </text></g><g id="g184"><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="8" x="0"> </text><text class="color5" lengthAdjust="spacingAndGlyphs" textLength="208" x="8">Michael Muré (MichaelMure)</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="104" x="216"> commented on</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="88" x="328">Sep 29 2018</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="64" x="424">        </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="496">   </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="8" x="528"> </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="144" x="544">                  </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="32" x="704">    </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="744">   </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="8" x="792"> </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="48" x="808">      </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="864">   </text></g><g id="g185"><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="936" x="0">     Alright, with https://github.com/MichaelMure/git-bug/pull/54 the core is                                        </text></g><g id="g186"><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="936" x="0">     data that is expected to be displayed in a UI, instead of the raw stream                                        </text></g><g id="g187"><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="320" x="8">    of events                           </text><text class="foreground" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="48" x="640">Labels</text></g><g id="g188"><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="8" x="0"> </text><text class="color5" lengthAdjust="spacingAndGlyphs" textLength="208" x="8">Michael Muré (MichaelMure)</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="56" x="216"> added </text><text class="foreground" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="104" x="272">"enhancement"</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="560" x="376"> label on Sep 21 2018              enhancement                        </text></g><g id="g189"><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="8" x="0"> </text><text class="color5" lengthAdjust="spacingAndGlyphs" textLength="208" x="8">Michael Muré (MichaelMure)</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="56" x="216"> added </text><text class="foreground" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="48" x="272">"Core"</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="616" x="320"> label on Sep 21 2018                                                        </text></g><g id="g190"><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="936" x="0">┌─────────────────────────────────────────────────────────────────────────────┐                                      </text></g><g id="g191"><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="8" x="0">│</text><text class="color5" lengthAdjust="spacingAndGlyphs" textLength="208" x="8">Michael Muré (MichaelMure)</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="720" x="216"> commented on Sep 29 2018                          │                                      </text></g><g id="g192"><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="688" x="0">│    Alright, with https://github.com/MichaelMure/git-bug/pull/54 the core is │       </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="704">   </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="744">   </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="8" x="792"> </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="40" x="808">     </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="856">   </text></g><g id="g193"><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="136" x="0">│    mostly ready</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="192" x="144">for comment edition.    </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="16" x="344">  </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="8" x="368"> </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="384">   </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="56" x="416">       </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="16" x="480">  </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="504">   </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="152" x="536">           │       </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="704">   </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="744">   </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="8" x="792"> </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="48" x="808">      </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="864">   </text></g><g id="g194"><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="136" x="0">│                </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="40" x="152">     </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="8" x="200"> </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="56" x="216">       </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="16" x="280">  </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="32" x="304">    </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="64" x="344">        </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="416">   </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="16" x="448">  </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="32" x="472">    </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="8" x="512"> </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="8" x="528"> </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="144" x="544">          │       </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="704">   </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="744">   </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="8" x="792"> </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="48" x="808">      </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="864">   </text></g><g id="g195"><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="688" x="0">│    - each operations can now be back referenced with their hash             │       </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="704">   </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="744">   </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="8" x="792"> </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="48" x="808">      </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="864">   </text></g><g id="g196"><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="688" x="0">│    - add a new `EditCommentOperation` that edit a previous comment          │       </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="704">   </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="744">   </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="8" x="792"> </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="48" x="808">      </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="864">   </text></g><g id="g197"><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="688" x="0">│    (including the initial comment yield by the CreateOperation)             │       </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="704">   </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="744">   </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="8" x="792"> </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="48" x="808">      </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="864">   </text></g><g id="g198"><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="688" x="0">│    - the Snapshot now hold a `Timeline` in addition the the raw array of    │       </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="704">   </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="744">   </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="8" x="792"> </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="48" x="808">      </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="864">   </text></g><g id="g199"><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="688" x="0">│    `Operation`, providing a processed view of the history, ready for each UI│       </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="704">   </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="744">   </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="8" x="792"> </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="48" x="808">      </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="864">   </text></g><g id="g200"><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="448" x="0">│to                                                     </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="32" x="456">    </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="144" x="544">          │       </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="704">   </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="744">   </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="8" x="792"> </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="48" x="808">      </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="864">   </text></g><g id="g201"><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="688" x="0">│    use. In particular, comments now hold their edit history                 │       </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="704">   </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="744">   </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="8" x="792"> </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="48" x="808">      </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="864">   </text></g><g id="g202"><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="520" x="0">│    Left for later: there is no check that the author is allowed</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="160" x="528">to edit the │       </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="32" x="704">    </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="744">   </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="8" x="792"> </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="48" x="808">      </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="864">   </text></g><g id="g203"><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="936" x="0">│    comment. We need crypto signature for that ...                           │                                      </text></g><g id="g204"><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="936" x="0">                                                                                  Core                               </text></g><g id="g205"><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="8" x="0"> </text><text class="color5" lengthAdjust="spacingAndGlyphs" textLength="208" x="8">Michael Muré (MichaelMure)</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="720" x="216"> commented on Sep 29 2018                              enhancement                        </text></g><g id="g206"><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="936" x="0">     mostly ready for comment edition.                                                                               </text></g><g id="g207"><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="936" x="0">     - each operations can now be back referenced with their hash                                                    </text></g><g id="g208"><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="936" x="0">     - add a new `EditCommentOperation` that edit a previous comment                                                 </text></g><g id="g209"><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="936" x="0">     (including the initial comment yield by the CreateOperation)                                                    </text></g><g id="g210"><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="688" x="0">     - the Snapshot now hold a `Timeline` in addition the the raw array of            </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="704">   </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="744">   </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="8" x="792"> </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="40" x="808">     </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="856">   </text></g><g id="g211"><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="136" x="0">     `Operation`,</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="232" x="144">providing a processed view of</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="384">the</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="112" x="416">history, ready</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="152" x="536">for each UI        </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="704">   </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="744">   </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="8" x="792"> </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="48" x="808">      </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="864">   </text></g><g id="g212"><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="136" x="0"> to              </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="40" x="152">     </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="8" x="200"> </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="56" x="216">       </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="16" x="280">  </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="32" x="304">    </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="64" x="344">        </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="416">   </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="16" x="448">  </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="32" x="472">    </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="8" x="512"> </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="8" x="528"> </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="144" x="544">                  </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="704">   </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="744">   </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="8" x="792"> </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="48" x="808">      </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="864">   </text></g><g id="g213"><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="688" x="0">     use. In particular, comments now hold their edit history                         </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="704">   </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="744">   </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="8" x="792"> </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="48" x="808">      </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="864">   </text></g><g id="g214"><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="688" x="0">     Left for later: there is no check that the author is allowed to edit the         </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="704">   </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="744">   </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="8" x="792"> </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="48" x="808">      </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="864">   </text></g><g id="g215"><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="688" x="0">     comment. We need crypto signature for that ...                                   </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="704">   </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="744">   </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="8" x="792"> </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="48" x="808">      </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="864">   </text></g><g id="g216"><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="8" x="0">│</text><text class="color5" lengthAdjust="spacingAndGlyphs" textLength="208" x="8">Michael Muré (MichaelMure)</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="472" x="216"> commented on Oct 19 2018                          │       </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="704">   </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="744">   </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="8" x="792"> </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="48" x="808">      </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="864">   </text></g><g id="g217"><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="72" x="0">│        </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="56" x="80">       </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="40" x="152">     </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="48" x="200">      </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="56" x="256">       </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="144" x="544">          │       </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="704">   </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="744">   </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="8" x="792"> </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="48" x="808">      </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="864">   </text></g><g id="g218"><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="688" x="0">│    With https://github.com/MichaelMure/git-bug/pull/60, @adamslc made the   │       </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="32" x="704">    </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="744">   </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="8" x="792"> </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="48" x="808">      </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="864">   </text></g><g id="g219"><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="936" x="0">│    comments editable in the termUI.                                         │                                      </text></g><g id="g220"><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="936" x="0">└─────────────────────────────────────────────────────────────────────────────┘                                      </text></g><g id="g221"><text class="color5" lengthAdjust="spacingAndGlyphs" textLength="208" x="8">Michael Muré (MichaelMure)</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="56" x="216"> added </text><text class="foreground" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="48" x="272">"Core"</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="48" x="320"> label</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="16" x="376">on</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="400">Sep</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="16" x="432">21</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="32" x="456">2018</text><text class="foreground" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="48" x="640">Labels</text></g><g id="g222"><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="936" x="0">┌─────────────────────────────────────────────────────────────────────────────┐   Core                               </text></g><g id="g223"><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="8" x="0">│</text><text class="color5" lengthAdjust="spacingAndGlyphs" textLength="208" x="8">Michael Muré (MichaelMure)</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="720" x="216"> commented on Sep 29 2018                          │   enhancement                        </text></g><g id="g224"><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="936" x="0">│    Alright, with https://github.com/MichaelMure/git-bug/pull/54 the core is │                                      </text></g><g id="g225"><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="936" x="0">│    mostly ready for comment edition.                                        │                                      </text></g><g id="g226"><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="936" x="0">│    - each operations can now be back referenced with their hash             │                                      </text></g><g id="g227"><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="936" x="0">│    - add a new `EditCommentOperation` that edit a previous comment          │                                      </text></g><g id="g228"><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="936" x="0">│    (including the initial comment yield by the CreateOperation)             │                                      </text></g><g id="g229"><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="688" x="0">│    - the Snapshot now hold a `Timeline` in addition the the raw array of    │       </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="704">   </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="744">   </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="8" x="792"> </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="40" x="808">     </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="856">   </text></g><g id="g230"><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="136" x="0">│    `Operation`,</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="232" x="144">providing a processed view of</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="384">the</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="112" x="416">history, ready</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="152" x="536">for each UI│       </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="704">   </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="744">   </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="8" x="792"> </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="48" x="808">      </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="864">   </text></g><g id="g231"><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="136" x="0">│to              </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="40" x="152">     </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="8" x="200"> </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="56" x="216">       </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="16" x="280">  </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="32" x="304">    </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="64" x="344">        </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="416">   </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="16" x="448">  </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="32" x="472">    </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="8" x="512"> </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="8" x="528"> </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="144" x="544">          │       </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="704">   </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="744">   </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="8" x="792"> </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="48" x="808">      </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="864">   </text></g><g id="g232"><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="688" x="0">│                                                                             │       </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="704">   </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="744">   </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="8" x="792"> </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="48" x="808">      </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="864">   </text></g><g id="g233"><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="688" x="0">│    Left for later: there is no check that the author is allowed to edit the │       </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="704">   </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="744">   </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="8" x="792"> </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="48" x="808">      </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="864">   </text></g><g id="g234"><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="688" x="0">│    comment. We need crypto signature for that ...                           │       </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="704">   </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="744">   </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="8" x="792"> </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="48" x="808">      </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="864">   </text></g><g id="g235"><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="8" x="0">│</text><text class="color5" lengthAdjust="spacingAndGlyphs" textLength="208" x="8">Michael Muré (MichaelMure)</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="56" x="216"> added </text><text class="foreground" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="48" x="272">"Core"</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="48" x="320"> label</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="16" x="376">on</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="400">Sep</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="16" x="432">21</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="32" x="456">2018</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="8" x="624">│</text><text class="foreground" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="48" x="640">Labels</text></g><g id="g236"><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="8" x="0"> </text><text class="color5" lengthAdjust="spacingAndGlyphs" textLength="208" x="8">Michael Muré (MichaelMure)</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="472" x="216"> commented on Oct 19 2018                                  </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="704">   </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="744">   </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="8" x="792"> </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="48" x="808">      </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="864">   </text></g><g id="g237"><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="688" x="0">     With https://github.com/MichaelMure/git-bug/pull/60, @adamslc made the           </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="32" x="704">    </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="744">   </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="8" x="792"> </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="48" x="808">      </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="864">   </text></g><g id="g238"><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="936" x="0">     comments editable in the termUI.                                                                                </text></g><g id="g239"><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="8" x="0">│</text><text class="color5" lengthAdjust="spacingAndGlyphs" textLength="208" x="8">Michael Muré (MichaelMure)</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="56" x="216"> added </text><text class="foreground" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="104" x="272">"enhancement"</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="48" x="376"> label</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="16" x="432">on</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="48" x="456">Sep 21</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="32" x="512">2018</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="8" x="624">│</text><text class="foreground" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="48" x="640">Labels</text></g><g id="g240"><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="8" x="0"> </text><text class="color5" lengthAdjust="spacingAndGlyphs" textLength="208" x="8">Michael Muré (MichaelMure)</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="56" x="216"> added </text><text class="foreground" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="48" x="272">"Core"</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="616" x="320"> label on Sep 21 2018                     enhancement                        </text></g><g id="g241"><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="8" x="0"> </text><text class="color5" lengthAdjust="spacingAndGlyphs" textLength="208" x="8">Michael Muré (MichaelMure)</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="720" x="216"> commented on Sep 29 2018                                                                 </text></g><g id="g242"><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="688" x="0">     - each operations can now be back referenced with their hash                     </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="704">   </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="744">   </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="8" x="792"> </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="40" x="808">     </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="856">   </text></g><g id="g243"><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="408" x="0">     - add a new `EditCommentOperation` that edit a</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="272" x="416">previous comment                  </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="704">   </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="744">   </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="8" x="792"> </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="48" x="808">      </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="864">   </text></g><g id="g244"><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="520" x="0">     (including the initial comment yield by the CreateOperation)</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="8" x="528"> </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="144" x="544">                  </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="704">   </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="744">   </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="8" x="792"> </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="48" x="808">      </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="864">   </text></g><g id="g245"><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="688" x="0">     - the Snapshot now hold a `Timeline` in addition the the raw array of            </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="704">   </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="744">   </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="8" x="792"> </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="48" x="808">      </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="864">   </text></g><g id="g246"><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="688" x="0">     `Operation`, providing a processed view of the history, ready for each UI        </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="704">   </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="744">   </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="8" x="792"> </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="48" x="808">      </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="864">   </text></g><g id="g247"><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="688" x="0"> to                                                                                   </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="704">   </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="744">   </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="8" x="792"> </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="48" x="808">      </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="864">   </text></g><g id="g248"><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="8" x="0"> </text><text class="color5" lengthAdjust="spacingAndGlyphs" textLength="208" x="8">Michael Muré (MichaelMure)</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="720" x="216"> commented on Oct 19 2018                                                                 </text></g><g id="g249"><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="584" x="0">│    It would be neat to support comment edition or removal. A few notes:</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="8" x="624">│</text><text class="foreground" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="48" x="640">Labels</text></g><g id="g250"><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="936" x="0">│    - require two new Operations                                             │   Core                               </text></g><g id="g251"><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="936" x="0">│    - as the data model is immutable, it would not fully erase the previous  │   enhancement                        </text></g><g id="g252"><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="936" x="0">│    replace the current usage of `Operations`. This `Timeline` would hold the│                                      </text></g><g id="g253"><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="936" x="0">│    data that is expected to be displayed in a UI, instead of the raw stream │                                      </text></g><g id="g254"><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="936" x="0">│    of events                                                                │                                      </text></g><g id="g255"><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="688" x="0">                                                                                      </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="704">   </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="744">   </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="8" x="792"> </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="40" x="808">     </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="856">   </text></g><g id="g256"><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="8" x="0"> </text><text class="color5" lengthAdjust="spacingAndGlyphs" textLength="208" x="8">Michael Muré (MichaelMure)</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="56" x="216"> added </text><text class="foreground" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="104" x="272">"enhancement"</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="312" x="376"> label on Sep 21 2018                  </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="704">   </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="744">   </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="8" x="792"> </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="48" x="808">      </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="864">   </text></g><g id="g257"><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="520" x="0">                                                                 </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="8" x="528"> </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="144" x="544">                  </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="704">   </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="744">   </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="8" x="792"> </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="48" x="808">      </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="864">   </text></g><g id="g258"><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="8" x="0"> </text><text class="color5" lengthAdjust="spacingAndGlyphs" textLength="208" x="8">Michael Muré (MichaelMure)</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="56" x="216"> added </text><text class="foreground" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="48" x="272">"Core"</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="368" x="320"> label on Sep 21 2018                         </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="704">   </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="744">   </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="8" x="792"> </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="48" x="808">      </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="864">   </text></g><g id="g259"><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="8" x="0"> </text><text class="color5" lengthAdjust="spacingAndGlyphs" textLength="208" x="8">Michael Muré (MichaelMure)</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="472" x="216"> commented on Sep 29 2018                                  </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="704">   </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="744">   </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="8" x="792"> </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="48" x="808">      </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="864">   </text></g><g id="g260"><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="688" x="0">     Alright, with https://github.com/MichaelMure/git-bug/pull/54 the core is         </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="704">   </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="744">   </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="8" x="792"> </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="48" x="808">      </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="864">   </text></g><g id="g261"><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="136" x="0">     mostly ready</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="168" x="144">for comment edition. </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="144" x="544">                  </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="704">   </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="744">   </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="8" x="792"> </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="48" x="808">      </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="864">   </text></g><g id="g262"><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="688" x="0">                                                                                      </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="32" x="704">    </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="744">   </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="8" x="792"> </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="48" x="808">      </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="864">   </text></g><g id="g263"><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="16" x="0"> [</text><text class="color6" lengthAdjust="spacingAndGlyphs" textLength="64" x="16">7d15d473</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="16" x="80">] </text><text class="foreground" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="232" x="96">feat: comment edition/removal</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="256" x="328">                                </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="8" x="624"> </text><text class="foreground" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="48" x="640">Labels</text></g><g id="g264"><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="688" x="0">│    replace the current usage of `Operations`. This `Timeline` would hold the│       </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="704">   </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="744">   </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="8" x="792"> </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="40" x="808">     </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="856">   </text></g><g id="g265"><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="688" x="0">│    data that is expected to be displayed in a UI, instead of the raw stream │       </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="704">   </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="744">   </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="8" x="792"> </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="48" x="808">      </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="864">   </text></g><g id="g266"><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="520" x="0">│    of events                                                   </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="8" x="528"> </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="144" x="544">          │       </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="704">   </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="744">   </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="8" x="792"> </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="48" x="808">      </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="864">   </text></g><g id="g267"><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="936" x="0">                                                                               ┌───────────────────────────────────┐ </text></g><g id="g268"><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="16" x="0"> [</text><text class="color6" lengthAdjust="spacingAndGlyphs" textLength="64" x="16">7d15d473</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="16" x="80">] </text><text class="foreground" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="232" x="96">feat: comment edition/removal</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="256" x="328">                                </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="16" x="624"> │</text><text class="foreground" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="48" x="640">Labels</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="8" x="920">│</text></g><g id="g269"><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="936" x="0">                                                                               │                                   │ </text></g><g id="g270"><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="16" x="0"> [</text><text class="color3" lengthAdjust="spacingAndGlyphs" textLength="32" x="16">open</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="16" x="48">] </text><text class="color5" lengthAdjust="spacingAndGlyphs" textLength="208" x="64">Michael Muré (MichaelMure)</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="664" x="272"> opened this bug on Sep 21 2018              │  Core                             │ </text></g><g id="g271"><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="936" x="0">                                                                               │  enhancement                      │ </text></g><g id="g272"><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="936" x="0">     It would be neat to support comment edition or removal. A few notes:      └───────────────────────────────────┘ </text></g><g id="g273"><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="688" x="0">     replace the current usage of `Operations`. This `Timeline` would hold the        </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="704">   </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="744">   </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="8" x="792"> </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="40" x="808">     </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="856">   </text></g><g id="g274"><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="688" x="0">     data that is expected to be displayed in a UI, instead of the raw stream         </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="704">   </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="744">   </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="8" x="792"> </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="48" x="808">      </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="864">   </text></g><g id="g275"><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="520" x="0">     of events                                                   </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="8" x="528"> </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="144" x="544">                  </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="704">   </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="744">   </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="8" x="792"> </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="48" x="808">      </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="864">   </text></g><g id="g276"><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="16" x="0"> [</text><text class="color6" lengthAdjust="spacingAndGlyphs" textLength="64" x="16">7d15d473</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="16" x="80">] </text><text class="foreground" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="232" x="96">feat: comment edition/removal</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="256" x="328">                                </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="16" x="624">  </text><text class="foreground" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="48" x="640">Labels</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="8" x="920"> </text></g><g id="g277"><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="8" x="0">│</text><text class="color5" lengthAdjust="spacingAndGlyphs" textLength="208" x="8">Michael Muré (MichaelMure)</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="56" x="216"> added </text><text class="foreground" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="104" x="272">"enhancement"</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="312" x="376"> label on Sep 21 2018          │       </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="704">   </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="744">   </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="8" x="792"> </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="48" x="808">      </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="864">   </text></g><g id="g278"><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="8" x="0"> </text><text class="color5" lengthAdjust="spacingAndGlyphs" textLength="208" x="8">Michael Muré (MichaelMure)</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="472" x="216"> commented on Sep 29 2018                                  </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="32" x="704">    </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="744">   </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="8" x="792"> </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="48" x="808">      </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="864">   </text></g><g id="g279"><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="936" x="0">[q] Save and return [←↓↑→,hjkl] Navigation [o] Toggle open/close [e] Edit [c] Comment [t] Change title               </text></g><g id="g280"><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="584" x="0">                                                                         </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="64" x="624">        </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="8" x="920"> </text></g><g id="g281"><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="136" x="0">                 </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="168" x="144">                     </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="144" x="544">                  </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="704">   </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="744">   </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="8" x="792"> </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="48" x="808">      </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="864">   </text></g><g id="g282"><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="8" x="0">a</text><text class="background" lengthAdjust="spacingAndGlyphs" textLength="8" x="8"> </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="920" x="16">                                                                                                                   </text></g><g id="g283"><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="16" x="0">a </text><text class="background" lengthAdjust="spacingAndGlyphs" textLength="8" x="16"> </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="912" x="24">                                                                                                                  </text></g><g id="g284"><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="0">a n</text><text class="background" lengthAdjust="spacingAndGlyphs" textLength="8" x="24"> </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="904" x="32">                                                                                                                 </text></g><g id="g285"><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="32" x="0">a ne</text><text class="background" lengthAdjust="spacingAndGlyphs" textLength="8" x="32"> </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="896" x="40">                                                                                                                </text></g><g id="g286"><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="40" x="0">a new</text><text class="background" lengthAdjust="spacingAndGlyphs" textLength="8" x="40"> </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="888" x="48">                                                                                                               </text></g><g id="g287"><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="48" x="0">a new </text><text class="background" lengthAdjust="spacingAndGlyphs" textLength="8" x="48"> </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="880" x="56">                                                                                                              </text></g><g id="g288"><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="56" x="0">a new b</text><text class="background" lengthAdjust="spacingAndGlyphs" textLength="8" x="56"> </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="872" x="64">                                                                                                             </text></g><g id="g289"><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="64" x="0">a new bu</text><text class="background" lengthAdjust="spacingAndGlyphs" textLength="8" x="64"> </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="864" x="72">                                                                                                            </text></g><g id="g290"><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="72" x="0">a new bug</text><text class="background" lengthAdjust="spacingAndGlyphs" textLength="8" x="72"> </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="856" x="80">                                                                                                           </text></g><g id="g291"><text class="color6" lengthAdjust="spacingAndGlyphs" textLength="624" x="0"># Please enter the title and comment message. The first non-empty line will be</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="312" x="624">                                       </text></g><g id="g292"><text class="color6" lengthAdjust="spacingAndGlyphs" textLength="488" x="0"># used as the title. Lines starting with '#' will be ignored.</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="448" x="488">                                                        </text></g><g id="g293"><text class="color6" lengthAdjust="spacingAndGlyphs" textLength="304" x="0"># An empty title aborts the operation.</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="632" x="304">                                                                               </text></g><g id="g294"><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="376" x="0">                                               </text><text class="background" lengthAdjust="spacingAndGlyphs" textLength="184" x="376">[ Lecture de 5 lignes ]</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="376" x="560">                                               </text></g><g id="g295"><text class="background" lengthAdjust="spacingAndGlyphs" textLength="16" x="0">^G</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="112" x="16"> Aide         </text><text class="background" lengthAdjust="spacingAndGlyphs" textLength="16" x="128">^O</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="112" x="144"> Écrire       </text><text class="background" lengthAdjust="spacingAndGlyphs" textLength="16" x="256">^W</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="112" x="272"> Chercher     </text><text class="background" lengthAdjust="spacingAndGlyphs" textLength="16" x="384">^K</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="112" x="400"> Couper       </text><text class="background" lengthAdjust="spacingAndGlyphs" textLength="16" x="512">^J</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="112" x="528"> Justifier    </text><text class="background" lengthAdjust="spacingAndGlyphs" textLength="16" x="640">^C</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="112" x="656"> Pos. cur.    </text><text class="background" lengthAdjust="spacingAndGlyphs" textLength="24" x="768">M-U</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="144" x="792"> Annuler          </text></g><g id="g296"><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="936" x="0">a new bug                                                                                                            </text></g><g id="g297"><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="8" x="0">w</text><text class="background" lengthAdjust="spacingAndGlyphs" textLength="8" x="8"> </text></g><g id="g298"><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="16" x="0">wi</text><text class="background" lengthAdjust="spacingAndGlyphs" textLength="8" x="16"> </text></g><g id="g299"><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="0">wit</text><text class="background" lengthAdjust="spacingAndGlyphs" textLength="8" x="24"> </text></g><g id="g300"><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="32" x="0">with</text><text class="background" lengthAdjust="spacingAndGlyphs" textLength="8" x="32"> </text></g><g id="g301"><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="40" x="0">with </text><text class="background" lengthAdjust="spacingAndGlyphs" textLength="8" x="40"> </text></g><g id="g302"><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="48" x="0">with a</text><text class="background" lengthAdjust="spacingAndGlyphs" textLength="8" x="48"> </text></g><g id="g303"><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="56" x="0">with a </text><text class="background" lengthAdjust="spacingAndGlyphs" textLength="8" x="56"> </text></g><g id="g304"><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="64" x="0">with a c</text><text class="background" lengthAdjust="spacingAndGlyphs" textLength="8" x="64"> </text></g><g id="g305"><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="72" x="0">with a co</text><text class="background" lengthAdjust="spacingAndGlyphs" textLength="8" x="72"> </text></g><g id="g306"><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="80" x="0">with a com</text><text class="background" lengthAdjust="spacingAndGlyphs" textLength="8" x="80"> </text></g><g id="g307"><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="88" x="0">with a comm</text><text class="background" lengthAdjust="spacingAndGlyphs" textLength="8" x="88"> </text></g><g id="g308"><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="96" x="0">with a comme</text><text class="background" lengthAdjust="spacingAndGlyphs" textLength="8" x="96"> </text></g><g id="g309"><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="104" x="0">with a commen</text><text class="background" lengthAdjust="spacingAndGlyphs" textLength="8" x="104"> </text></g><g id="g310"><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="112" x="0">with a comment</text><text class="background" lengthAdjust="spacingAndGlyphs" textLength="8" x="112"> </text></g><g id="g311"><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="112" x="0">with a comment</text></g><g id="g312"><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="112" x="0">              </text></g><g id="g313"><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="936" x="0">     with a comment                                                                                                  </text></g><g id="g314"><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="16" x="0"> [</text><text class="color6" lengthAdjust="spacingAndGlyphs" textLength="64" x="16">23dc77dd</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="16" x="80">] </text><text class="foreground" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="72" x="96">a new bug</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="416" x="168">                                                    </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="16" x="624">  </text><text class="foreground" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="48" x="640">Labels</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="8" x="920"> </text></g><g id="g315"><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="8" x="8">[</text><text class="color3" lengthAdjust="spacingAndGlyphs" textLength="32" x="16">open</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="8" x="48">]</text><text class="color5" lengthAdjust="spacingAndGlyphs" textLength="96" x="64">Michael Muré</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="48" x="168">opened</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="32" x="224">this</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="264">bug</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="16" x="296">on</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="320">Dec</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="8" x="352">2</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="32" x="368">2018</text></g><g id="g316"><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="632" x="0">┌─────────────────────────────────────────────────────────────────────────────┐</text></g><g id="g317"><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="936" x="0">│    with a comment                                                           │                                      </text></g><g id="g318"><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="48" x="8">      </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="96" x="64">            </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="48" x="168">      </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="32" x="224">    </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="264">   </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="16" x="296">  </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="320">   </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="8" x="352"> </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="32" x="368">    </text></g><g id="g319"><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="632" x="0">                                                                               </text></g><g id="g320"><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="16" x="0">an</text><text class="background" lengthAdjust="spacingAndGlyphs" textLength="8" x="16"> </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="912" x="24">                                                                                                                  </text></g><g id="g321"><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="0">ano</text><text class="background" lengthAdjust="spacingAndGlyphs" textLength="8" x="24"> </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="904" x="32">                                                                                                                 </text></g><g id="g322"><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="32" x="0">anot</text><text class="background" lengthAdjust="spacingAndGlyphs" textLength="8" x="32"> </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="896" x="40">                                                                                                                </text></g><g id="g323"><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="40" x="0">anote</text><text class="background" lengthAdjust="spacingAndGlyphs" textLength="8" x="40"> </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="888" x="48">                                                                                                               </text></g><g id="g324"><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="48" x="0">anoteh</text><text class="background" lengthAdjust="spacingAndGlyphs" textLength="8" x="48"> </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="880" x="56">                                                                                                              </text></g><g id="g325"><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="56" x="0">anotehr</text><text class="background" lengthAdjust="spacingAndGlyphs" textLength="8" x="56"> </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="872" x="64">                                                                                                             </text></g><g id="g326"><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="64" x="0">anotehr </text><text class="background" lengthAdjust="spacingAndGlyphs" textLength="8" x="64"> </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="864" x="72">                                                                                                            </text></g><g id="g327"><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="40" x="0">anoth</text><text class="background" lengthAdjust="spacingAndGlyphs" textLength="8" x="40"> </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="888" x="48">                                                                                                               </text></g><g id="g328"><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="48" x="0">anothe</text><text class="background" lengthAdjust="spacingAndGlyphs" textLength="8" x="48"> </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="880" x="56">                                                                                                              </text></g><g id="g329"><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="56" x="0">another</text><text class="background" lengthAdjust="spacingAndGlyphs" textLength="8" x="56"> </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="872" x="64">                                                                                                             </text></g><g id="g330"><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="64" x="0">another </text><text class="background" lengthAdjust="spacingAndGlyphs" textLength="8" x="64"> </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="864" x="72">                                                                                                            </text></g><g id="g331"><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="72" x="0">another c</text><text class="background" lengthAdjust="spacingAndGlyphs" textLength="8" x="72"> </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="856" x="80">                                                                                                           </text></g><g id="g332"><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="80" x="0">another co</text><text class="background" lengthAdjust="spacingAndGlyphs" textLength="8" x="80"> </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="848" x="88">                                                                                                          </text></g><g id="g333"><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="88" x="0">another com</text><text class="background" lengthAdjust="spacingAndGlyphs" textLength="8" x="88"> </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="840" x="96">                                                                                                         </text></g><g id="g334"><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="96" x="0">another comm</text><text class="background" lengthAdjust="spacingAndGlyphs" textLength="8" x="96"> </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="832" x="104">                                                                                                        </text></g><g id="g335"><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="104" x="0">another comme</text><text class="background" lengthAdjust="spacingAndGlyphs" textLength="8" x="104"> </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="824" x="112">                                                                                                       </text></g><g id="g336"><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="112" x="0">another commen</text><text class="background" lengthAdjust="spacingAndGlyphs" textLength="8" x="112"> </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="816" x="120">                                                                                                      </text></g><g id="g337"><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="120" x="0">another comment</text><text class="background" lengthAdjust="spacingAndGlyphs" textLength="8" x="120"> </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="808" x="128">                                                                                                     </text></g><g id="g338"><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="376" x="0">                                               </text><text class="background" lengthAdjust="spacingAndGlyphs" textLength="184" x="376">[ Lecture de 4 lignes ]</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="376" x="560">                                               </text></g><g id="g339"><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="936" x="0">another comment                                                                                                      </text></g><g id="g340"><text class="color6" lengthAdjust="spacingAndGlyphs" textLength="608" x="0"># Please enter the comment message. Lines starting with '#' will be ignored,</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="608">   </text></g><g id="g341"><text class="color6" lengthAdjust="spacingAndGlyphs" textLength="352" x="0"># and an empty message aborts the operation.</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="584" x="352">                                                                         </text></g><g id="g342"><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="8" x="0"> </text><text class="color5" lengthAdjust="spacingAndGlyphs" textLength="96" x="8">Michael Muré</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="832" x="104"> commented on Dec 2 2018                                                                                </text></g><g id="g343"><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="936" x="0">     another comment                                                                                                 </text></g><g id="g344"><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="8" x="0">│</text><text class="color5" lengthAdjust="spacingAndGlyphs" textLength="96" x="8">Michael Muré</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="832" x="104"> commented on Dec 2 2018                                         │                                      </text></g><g id="g345"><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="936" x="0">│    another comment                                                          │                                      </text></g><g id="g346"><text class="background" lengthAdjust="spacingAndGlyphs" textLength="16" x="0">^G</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="920" x="16"> Aide                                                                                                              </text></g><g id="g347"><text class="background" lengthAdjust="spacingAndGlyphs" textLength="8" x="0">a</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="928" x="8">nother comment                                                                                                      </text></g><g id="g348"><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="8" x="0">a</text><text class="background" lengthAdjust="spacingAndGlyphs" textLength="8" x="8">n</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="920" x="16">other comment                                                                                                      </text></g><g id="g349"><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="16" x="0">an</text><text class="background" lengthAdjust="spacingAndGlyphs" textLength="8" x="16">o</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="912" x="24">ther comment                                                                                                      </text></g><g id="g350"><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="16" x="0">an</text><text class="background" lengthAdjust="spacingAndGlyphs" textLength="8" x="16">t</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="912" x="24">her comment                                                                                                       </text></g><g id="g351"><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="16" x="0">an</text><text class="background" lengthAdjust="spacingAndGlyphs" textLength="8" x="16">h</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="912" x="24">er comment                                                                                                        </text></g><g id="g352"><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="16" x="0">an</text><text class="background" lengthAdjust="spacingAndGlyphs" textLength="8" x="16">e</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="912" x="24">r comment                                                                                                         </text></g><g id="g353"><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="16" x="0">an</text><text class="background" lengthAdjust="spacingAndGlyphs" textLength="8" x="16">r</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="912" x="24"> comment                                                                                                          </text></g><g id="g354"><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="16" x="0">an</text><text class="background" lengthAdjust="spacingAndGlyphs" textLength="8" x="16"> </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="912" x="24">comment                                                                                                           </text></g><g id="g355"><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="0">an </text><text class="background" lengthAdjust="spacingAndGlyphs" textLength="8" x="24"> </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="904" x="32">comment                                                                                                          </text></g><g id="g356"><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="32" x="0">an e</text><text class="background" lengthAdjust="spacingAndGlyphs" textLength="8" x="32"> </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="896" x="40">comment                                                                                                         </text></g><g id="g357"><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="40" x="0">an ed</text><text class="background" lengthAdjust="spacingAndGlyphs" textLength="8" x="40"> </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="888" x="48">comment                                                                                                        </text></g><g id="g358"><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="48" x="0">an edi</text><text class="background" lengthAdjust="spacingAndGlyphs" textLength="8" x="48"> </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="880" x="56">comment                                                                                                       </text></g><g id="g359"><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="56" x="0">an edit</text><text class="background" lengthAdjust="spacingAndGlyphs" textLength="8" x="56"> </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="872" x="64">comment                                                                                                      </text></g><g id="g360"><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="64" x="0">an edite</text><text class="background" lengthAdjust="spacingAndGlyphs" textLength="8" x="64"> </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="864" x="72">comment                                                                                                     </text></g><g id="g361"><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="72" x="0">an edited</text><text class="background" lengthAdjust="spacingAndGlyphs" textLength="8" x="72"> </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="856" x="80">comment                                                                                                    </text></g><g id="g362"><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="136" x="0">an edited comment</text><text class="background" lengthAdjust="spacingAndGlyphs" textLength="8" x="136"> </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="792" x="144">                                                                                                   </text></g><g id="g363"><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="144" x="0">an edited comment </text><text class="background" lengthAdjust="spacingAndGlyphs" textLength="8" x="144"> </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="784" x="152">                                                                                                  </text></g><g id="g364"><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="152" x="0">an edited comment !</text><text class="background" lengthAdjust="spacingAndGlyphs" textLength="8" x="152"> </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="776" x="160">                                                                                                 </text></g><g id="g365"><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="936" x="0">an edited comment !                                                                                                  </text></g><g id="g366"><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="8" x="0">│</text><text class="color5" lengthAdjust="spacingAndGlyphs" textLength="96" x="8">Michael Muré</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="832" x="104"> commented on Dec 2 2018 (edited)                                │                                      </text></g><g id="g367"><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="936" x="0">│    an edited comment !                                                      │                                      </text></g><g id="g368"><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="16" x="0"> [</text><text class="color6" lengthAdjust="spacingAndGlyphs" textLength="64" x="16">23dc77dd</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="16" x="80">] </text><text class="foreground" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="72" x="96">a new bug</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="416" x="168">                                                    </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="16" x="624"> │</text><text class="foreground" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="48" x="640">Labels</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="8" x="920">│</text></g><g id="g369"><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="8" x="8">[</text><text class="color3" lengthAdjust="spacingAndGlyphs" textLength="32" x="16">open</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="8" x="48">]</text><text class="color5" lengthAdjust="spacingAndGlyphs" textLength="96" x="64">Michael Muré</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="48" x="168">opened</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="32" x="224">this</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="264">bug</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="16" x="296">on</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="320">Dec</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="8" x="352">2</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="32" x="368">2018</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="8" x="632">│</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="8" x="920">│</text></g><g id="g370"><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="928" x="0">                                                                               └───────────────────────────────────┘</text></g><g id="g371"><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="8" x="0"> </text><text class="color5" lengthAdjust="spacingAndGlyphs" textLength="96" x="8">Michael Muré</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="832" x="104"> commented on Dec 2 2018 (edited)                                                                       </text></g><g id="g372"><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="936" x="0">     an edited comment !                                                                                             </text></g><g id="g373"><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="936" x="0">   ┌───────────────────┐                                                                                             </text></g><g id="g374"><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="584" x="0">   │ [ ] CLI           │                                                 </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="64" x="624">        </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="8" x="920"> </text></g><g id="g375"><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="936" x="0">   └───────────────────┘                                                                                             </text></g><g id="g376"><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="152" x="8">    [ ] Core       </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="48" x="168">      </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="32" x="224">    </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="264">   </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="16" x="296">  </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="320">   </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="8" x="352"> </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="32" x="368">    </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="8" x="632"> </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="8" x="920"> </text></g><g id="g377"><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="928" x="0">                                                                                                                    </text></g><g id="g378"><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="152" x="8">  │ [ ] Core       </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="48" x="168">  │   </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="32" x="224">    </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="264">   </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="16" x="296">  </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="320">   </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="8" x="352"> </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="32" x="368">    </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="8" x="632"> </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="8" x="920"> </text></g><g id="g379"><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="152" x="8">  │ [x] Core       </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="48" x="168">  │   </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="32" x="224">    </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="264">   </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="16" x="296">  </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="320">   </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="8" x="352"> </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="32" x="368">    </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="8" x="632"> </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="8" x="920"> </text></g><g id="g380"><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="928" x="0">   └───────────────────┘                                                                                            </text></g><g id="g381"><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="936" x="0">     [ ] Easy pick                                                                                                   </text></g><g id="g382"><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="928" x="0">   ┌───────────────────┐                                                                                            </text></g><g id="g383"><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="936" x="0">   │ [ ] Easy pick     │                                                                                             </text></g><g id="g384"><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="936" x="0">     [ ] Non-actionable                                                                                              </text></g><g id="g385"><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="936" x="0">   │ [ ] Non-actionable│                                                                                             </text></g><g id="g386"><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="936" x="0">     [ ] RFC                                                                                                         </text></g><g id="g387"><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="936" x="0">   │ [ ] RFC           │                                                                                             </text></g><g id="g388"><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="584" x="0">     [ ] CLI                                                             </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="64" x="624">        </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="8" x="920"> </text></g><g id="g389"><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="152" x="8">    [x] Core       </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="48" x="168">      </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="32" x="224">    </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="264">   </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="16" x="296">  </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="320">   </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="8" x="352"> </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="32" x="368">    </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="8" x="632"> </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="8" x="920"> </text></g><g id="g390"><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="936" x="0">   │ [x] RFC           │                                                                                             </text></g><g id="g391"><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="936" x="0">     [ ] TermUI                                                                                                      </text></g><g id="g392"><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="936" x="0">     [ ] WebUI                                                                                                       </text></g><g id="g393"><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="688" x="0">     [ ] bug                                                                          </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="704">   </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="744">   </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="8" x="792"> </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="48" x="808">      </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="864">   </text></g><g id="g394"><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="688" x="0">     [ ] enhancement                                                                  </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="704">   </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="744">   </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="8" x="792"> </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="48" x="808">      </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="864">   </text></g><g id="g395"><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="688" x="0">     [ ] help wanted                                                                  </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="704">   </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="744">   </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="8" x="792"> </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="48" x="808">      </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="864">   </text></g><g id="g396"><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="936" x="0">[q] Save and close [↓↑,jk] Nav [a] Add item                                                                          </text></g><g id="g397"><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="8" x="8">[</text><text class="color3" lengthAdjust="spacingAndGlyphs" textLength="32" x="16">open</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="16" x="48">] </text><text class="color5" lengthAdjust="spacingAndGlyphs" textLength="96" x="64">Michael Muré</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="48" x="168">opened</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="32" x="224">this</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="264">bug</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="16" x="296">on</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="320">Dec</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="8" x="352">2</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="32" x="368">2018</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="8" x="632">│</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="32" x="656">Core</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="8" x="920">│</text></g><g id="g398"><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="928" x="0">                                                                               │  RFC                              │</text></g><g id="g399"><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="936" x="0">     with a comment                                                            └───────────────────────────────────┘ </text></g><g id="g400"><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="928" x="0">┌─────────────────────────────────────────────────────────────────────────────┐   RFC                               </text></g><g id="g401"><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="8" x="0"> </text><text class="color5" lengthAdjust="spacingAndGlyphs" textLength="96" x="8">Michael Muré</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="56" x="104"> added </text><text class="foreground" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="48" x="160">"Core"</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="16" x="208">, </text><text class="foreground" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="40" x="224">"RFC"</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="672" x="264"> labels on Dec 2 2018                                                               </text></g><g id="g402"><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="8" x="8">[</text><text class="color3" lengthAdjust="spacingAndGlyphs" textLength="32" x="16">open</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="16" x="48">] </text><text class="color5" lengthAdjust="spacingAndGlyphs" textLength="96" x="64">Michael Muré</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="48" x="168">opened</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="32" x="224">this</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="264">bug</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="16" x="296">on</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="320">Dec</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="8" x="352">2</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="32" x="368">2018</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="8" x="632"> </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="32" x="656">Core</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="8" x="920"> </text></g><g id="g403"><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="928" x="0">                                                                                  RFC                               </text></g><g id="g404"><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="8" x="0">│</text><text class="color5" lengthAdjust="spacingAndGlyphs" textLength="96" x="8">Michael Muré</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="56" x="104"> added </text><text class="foreground" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="48" x="160">"Core"</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="16" x="208">, </text><text class="foreground" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="40" x="224">"RFC"</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="672" x="264"> labels on Dec 2 2018                        │                                      </text></g><g id="g405"><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="688" x="0">└─────────────────────────────────────────────────────────────────────────────┘       </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="704">   </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="744">   </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="8" x="792"> </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="40" x="808">     </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="856">   </text></g><g id="g406"><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="152" x="8">                   </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="48" x="168">      </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="32" x="224">    </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="264">   </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="16" x="296">  </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="320">   </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="8" x="352"> </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="32" x="368">    </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="8" x="632"> </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="32" x="656">    </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="8" x="920"> </text></g><g id="g407"><text class="background" lengthAdjust="spacingAndGlyphs" textLength="8" x="0">a</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="928" x="8"> new bug                                                                                                            </text></g><g id="g408"><text class="background" lengthAdjust="spacingAndGlyphs" textLength="8" x="0"> </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="152" x="8">                   </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="48" x="168">      </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="32" x="224">    </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="264">   </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="16" x="296">  </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="320">   </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="8" x="352"> </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="32" x="368">    </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="8" x="632"> </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="32" x="656">    </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="8" x="920"> </text></g><g id="g409"><text class="color6" lengthAdjust="spacingAndGlyphs" textLength="432" x="0"># Please enter the new title. Only one line will used.</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="496" x="432">                                                              </text></g><g id="g410"><text class="color6" lengthAdjust="spacingAndGlyphs" textLength="664" x="0"># Lines starting with '#' will be ignored, and an empty title aborts the operation.</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="272" x="664">                                  </text></g><g id="g411"><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="8" x="0">a</text><text class="background" lengthAdjust="spacingAndGlyphs" textLength="8" x="8"> </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="144" x="16">                  </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="48" x="168">      </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="32" x="224">    </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="264">   </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="16" x="296">  </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="320">   </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="8" x="352"> </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="32" x="368">    </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="8" x="632"> </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="32" x="656">    </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="8" x="920"> </text></g><g id="g412"><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="16" x="0">a </text><text class="background" lengthAdjust="spacingAndGlyphs" textLength="8" x="16"> </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="136" x="24">                 </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="48" x="168">      </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="32" x="224">    </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="264">   </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="16" x="296">  </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="320">   </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="8" x="352"> </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="32" x="368">    </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="8" x="632"> </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="32" x="656">    </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="8" x="920"> </text></g><g id="g413"><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="0">a b</text><text class="background" lengthAdjust="spacingAndGlyphs" textLength="8" x="24"> </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="128" x="32">                </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="48" x="168">      </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="32" x="224">    </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="264">   </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="16" x="296">  </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="320">   </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="8" x="352"> </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="32" x="368">    </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="8" x="632"> </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="32" x="656">    </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="8" x="920"> </text></g><g id="g414"><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="32" x="0">a be</text><text class="background" lengthAdjust="spacingAndGlyphs" textLength="8" x="32"> </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="120" x="40">               </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="48" x="168">      </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="32" x="224">    </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="264">   </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="16" x="296">  </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="320">   </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="8" x="352"> </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="32" x="368">    </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="8" x="632"> </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="32" x="656">    </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="8" x="920"> </text></g><g id="g415"><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="40" x="0">a bet</text><text class="background" lengthAdjust="spacingAndGlyphs" textLength="8" x="40"> </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="112" x="48">              </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="48" x="168">      </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="32" x="224">    </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="264">   </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="16" x="296">  </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="320">   </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="8" x="352"> </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="32" x="368">    </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="8" x="632"> </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="32" x="656">    </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="8" x="920"> </text></g><g id="g416"><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="48" x="0">a bett</text><text class="background" lengthAdjust="spacingAndGlyphs" textLength="8" x="48"> </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="104" x="56">             </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="48" x="168">      </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="32" x="224">    </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="264">   </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="16" x="296">  </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="320">   </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="8" x="352"> </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="32" x="368">    </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="8" x="632"> </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="32" x="656">    </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="8" x="920"> </text></g><g id="g417"><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="56" x="0">a bette</text><text class="background" lengthAdjust="spacingAndGlyphs" textLength="8" x="56"> </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="96" x="64">            </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="48" x="168">      </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="32" x="224">    </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="264">   </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="16" x="296">  </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="320">   </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="8" x="352"> </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="32" x="368">    </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="8" x="632"> </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="32" x="656">    </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="8" x="920"> </text></g><g id="g418"><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="64" x="0">a better</text><text class="background" lengthAdjust="spacingAndGlyphs" textLength="8" x="64"> </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="88" x="72">           </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="48" x="168">      </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="32" x="224">    </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="264">   </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="16" x="296">  </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="320">   </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="8" x="352"> </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="32" x="368">    </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="8" x="632"> </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="32" x="656">    </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="8" x="920"> </text></g><g id="g419"><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="72" x="0">a better </text><text class="background" lengthAdjust="spacingAndGlyphs" textLength="8" x="72"> </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="80" x="80">          </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="48" x="168">      </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="32" x="224">    </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="264">   </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="16" x="296">  </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="320">   </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="8" x="352"> </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="32" x="368">    </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="8" x="632"> </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="32" x="656">    </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="8" x="920"> </text></g><g id="g420"><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="80" x="0">a better t</text><text class="background" lengthAdjust="spacingAndGlyphs" textLength="8" x="80"> </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="72" x="88">         </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="48" x="168">      </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="32" x="224">    </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="264">   </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="16" x="296">  </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="320">   </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="8" x="352"> </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="32" x="368">    </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="8" x="632"> </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="32" x="656">    </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="8" x="920"> </text></g><g id="g421"><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="88" x="0">a better ti</text><text class="background" lengthAdjust="spacingAndGlyphs" textLength="8" x="88"> </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="64" x="96">        </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="48" x="168">      </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="32" x="224">    </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="264">   </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="16" x="296">  </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="320">   </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="8" x="352"> </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="32" x="368">    </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="8" x="632"> </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="32" x="656">    </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="8" x="920"> </text></g><g id="g422"><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="96" x="0">a better tit</text><text class="background" lengthAdjust="spacingAndGlyphs" textLength="8" x="96"> </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="56" x="104">       </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="48" x="168">      </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="32" x="224">    </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="264">   </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="16" x="296">  </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="320">   </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="8" x="352"> </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="32" x="368">    </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="8" x="632"> </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="32" x="656">    </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="8" x="920"> </text></g><g id="g423"><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="104" x="0">a better titl</text><text class="background" lengthAdjust="spacingAndGlyphs" textLength="8" x="104"> </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="48" x="112">      </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="48" x="168">      </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="32" x="224">    </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="264">   </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="16" x="296">  </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="320">   </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="8" x="352"> </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="32" x="368">    </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="8" x="632"> </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="32" x="656">    </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="8" x="920"> </text></g><g id="g424"><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="112" x="0">a better title</text><text class="background" lengthAdjust="spacingAndGlyphs" textLength="8" x="112"> </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="40" x="120">     </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="48" x="168">      </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="32" x="224">    </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="264">   </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="16" x="296">  </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="320">   </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="8" x="352"> </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="32" x="368">    </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="8" x="632"> </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="32" x="656">    </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="8" x="920"> </text></g><g id="g425"><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="160" x="0">a better title      </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="48" x="168">      </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="32" x="224">    </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="264">   </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="16" x="296">  </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="320">   </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="8" x="352"> </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="32" x="368">    </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="8" x="632"> </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="32" x="656">    </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="8" x="920"> </text></g><g id="g426"><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="8" x="0">│</text><text class="color5" lengthAdjust="spacingAndGlyphs" textLength="96" x="8">Michael Muré</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="56" x="104"> added </text><text class="foreground" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="48" x="160">"Core"</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="16" x="208">, </text><text class="foreground" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="40" x="224">"RFC"</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="424" x="264"> labels on Dec 2 2018                        │       </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="704">   </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="744">   </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="8" x="792"> </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="40" x="808">     </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="856">   </text></g><g id="g427"><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="936" x="0">                                                                                  RFC                                </text></g><g id="g428"><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="16" x="0"> [</text><text class="color6" lengthAdjust="spacingAndGlyphs" textLength="64" x="16">23dc77dd</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="16" x="80">] </text><text class="foreground" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="112" x="96">a better title</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="376" x="208">                                               </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="16" x="624">  </text><text class="foreground" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="48" x="640">Labels</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="8" x="920"> </text></g><g id="g429"><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="160" x="0">                    </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="48" x="168">      </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="32" x="224">    </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="264">   </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="16" x="296">  </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="320">   </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="8" x="352"> </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="32" x="368">    </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="8" x="632"> </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="32" x="656">    </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="8" x="920"> </text></g><g id="g430"><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="16" x="0"> [</text><text class="color3" lengthAdjust="spacingAndGlyphs" textLength="32" x="16">open</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="16" x="48">] </text><text class="color5" lengthAdjust="spacingAndGlyphs" textLength="96" x="64">Michael Muré</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="768" x="160"> opened this bug on Dec 2 2018                                Core                              </text></g><g id="g431"><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="936" x="0">┌─────────────────────────────────────────────────────────────────────────────┐   RFC                                </text></g><g id="g432"><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="8" x="0"> </text><text class="color5" lengthAdjust="spacingAndGlyphs" textLength="96" x="8">Michael Muré</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="56" x="104"> added </text><text class="foreground" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="48" x="160">"Core"</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="16" x="208">, </text><text class="foreground" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="40" x="224">"RFC"</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="424" x="264"> labels on Dec 2 2018                                </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="704">   </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="744">   </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="8" x="792"> </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="40" x="808">     </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="856">   </text></g><g id="g433"><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="8" x="0"> </text><text class="color5" lengthAdjust="spacingAndGlyphs" textLength="96" x="8">Michael Muré</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="176" x="104"> changed the title to </text><text class="foreground" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="112" x="280">a better title</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="296" x="392"> on Dec 2 2018                       </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="704">   </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="744">   </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="8" x="792"> </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="48" x="808">      </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="864">   </text></g><g id="g434"><text class="color6" lengthAdjust="spacingAndGlyphs" textLength="72" x="0"> 23dc77dd</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="8" x="72"> </text><text class="color3" lengthAdjust="spacingAndGlyphs" textLength="56" x="80"> open  </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="136">  a</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="48" x="168">better</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="64" x="224">title   </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="16" x="296">  </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="320">   </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="8" x="352"> </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="32" x="368">    </text><text class="color5" lengthAdjust="spacingAndGlyphs" textLength="144" x="544"> Michael Muré     </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="704">C:1</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="744">L:2</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="8" x="792">4</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="56" x="808">seconds</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="872">ago</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="8" x="920"> </text></g><g id="g435"><text class="color0" lengthAdjust="spacingAndGlyphs" textLength="936" x="0"> 23dc77dd  open    a better title                                    Michael Muré       C:1  L:2   5 seconds ago     </text></g><g id="g436"><text class="color6" lengthAdjust="spacingAndGlyphs" textLength="72" x="0"> 23dc77dd</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="8" x="72"> </text><text class="color3" lengthAdjust="spacingAndGlyphs" textLength="56" x="80"> open  </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="408" x="136">  a better title                                   </text><text class="color5" lengthAdjust="spacingAndGlyphs" textLength="144" x="544"> Michael Muré     </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="248" x="688">  C:1  L:2   10 seconds ago    </text></g><g id="g437"><text class="color6" lengthAdjust="spacingAndGlyphs" textLength="72" x="0"> 23dc77dd</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="8" x="72"> </text><text class="color3" lengthAdjust="spacingAndGlyphs" textLength="56" x="80"> open  </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="408" x="136">  a better title                                   </text><text class="color5" lengthAdjust="spacingAndGlyphs" textLength="144" x="544"> Michael Muré     </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="248" x="688">  C:1  L:2   11 seconds ago    </text></g><g id="g438"><text class="color6" lengthAdjust="spacingAndGlyphs" textLength="72" x="0"> 6767e5f4</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="8" x="72"> </text><text class="color3" lengthAdjust="spacingAndGlyphs" textLength="56" x="80"> open  </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="800" x="136">  feat: Git┌─Push to remote origin─────────────────────────────────────┐:34 L:3   1 month ago       </text></g><g id="g439"><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="688" x="0">                            │...                                                      </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="704">│  </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="744">   </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="8" x="792"> </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="40" x="808">     </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="856">   </text></g><g id="g440"><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="728" x="0">                            └───────────────────────────────────────────────────────────┘  </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="744">   </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="8" x="792"> </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="48" x="808">      </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="864">   </text></g><g id="g441"><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="936" x="0">Showing 11 of 11 bugs                                                                                                </text></g><g id="g442"><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="712" x="0">                            ┌─Push to remote origin─────────────────────────────────────┐</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="8" x="920"> </text></g><g id="g443"><text class="color6" lengthAdjust="spacingAndGlyphs" textLength="72" x="0"> 23dc77dd</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="8" x="72"> </text><text class="color3" lengthAdjust="spacingAndGlyphs" textLength="56" x="80"> open  </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="800" x="136">  a better │refs/bugs/c7c71b5e94c3df8b9cbedcf53b773e3012f02afe ->      │:1  L:2   16 seconds ago    </text></g><g id="g444"><text class="color6" lengthAdjust="spacingAndGlyphs" textLength="72" x="0"> e5d4ec2b</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="8" x="72"> </text><text class="color3" lengthAdjust="spacingAndGlyphs" textLength="56" x="80"> open  </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="800" x="136">  Identity │refs/bugs/c7c71b5e94c3df8b9cbedcf53b773e3012f02afe         │:0  L:2   2 months ago      </text></g><g id="g445"><text class="color0" lengthAdjust="spacingAndGlyphs" textLength="224" x="0"> 7d15d473  open    feat: com</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="488" x="224">│ * [new branch]                                            │</text><text class="color0" lengthAdjust="spacingAndGlyphs" textLength="224" x="712">:2  L:2   1 month ago       </text></g><g id="g446"><text class="color6" lengthAdjust="spacingAndGlyphs" textLength="72" x="0"> 76559d04</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="8" x="72"> </text><text class="color3" lengthAdjust="spacingAndGlyphs" textLength="56" x="80"> open  </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="800" x="136">  feat: a c│refs/bugs/cf54e668a8bb81d1f14418fde72ccb9315aed717 ->      │:0  L:3   2 months ago      </text></g><g id="g447"><text class="color6" lengthAdjust="spacingAndGlyphs" textLength="72" x="0"> 44c354dc</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="8" x="72"> </text><text class="color3" lengthAdjust="spacingAndGlyphs" textLength="56" x="80"> open  </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="800" x="136">  Terminal │refs/bugs/cf54e668a8bb81d1f14418fde72ccb9315aed717         │:1  L:1   3 months ago      </text></g><g id="g448"><text class="color6" lengthAdjust="spacingAndGlyphs" textLength="72" x="0"> 5c16913b</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="8" x="72"> </text><text class="color3" lengthAdjust="spacingAndGlyphs" textLength="56" x="80"> open  </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="800" x="136">  Question:│ * [new branch]                                            │:13 L:1   3 months ago      </text></g><g id="g449"><text class="color6" lengthAdjust="spacingAndGlyphs" textLength="72" x="0"> cf54e668</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="8" x="72"> </text><text class="color3" lengthAdjust="spacingAndGlyphs" textLength="56" x="80"> open  </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="800" x="136">  feat: rep│refs/bugs/d98af8ac83ab2b484ac15d28762dd9159f2f0def ->      │:1  L:1   3 months ago      </text></g><g id="g450"><text class="color6" lengthAdjust="spacingAndGlyphs" textLength="72" x="0"> c508298a</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="8" x="72"> </text><text class="color3" lengthAdjust="spacingAndGlyphs" textLength="56" x="80"> open  </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="800" x="136">  feat: con│refs/bugs/d98af8ac83ab2b484ac15d28762dd9159f2f0def         │:0  L:4   2 months ago      </text></g><g id="g451"><text class="color6" lengthAdjust="spacingAndGlyphs" textLength="72" x="0"> c5bc44f3</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="8" x="72"> </text><text class="color3" lengthAdjust="spacingAndGlyphs" textLength="56" x="80"> open  </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="800" x="136">  feat: med│ * [new branch]                                            │:2  L:3   3 weeks ago       </text></g><g id="g452"><text class="color6" lengthAdjust="spacingAndGlyphs" textLength="72" x="0"> abf8bb60</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="8" x="72"> </text><text class="color3" lengthAdjust="spacingAndGlyphs" textLength="56" x="80"> open  </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="800" x="136">  feat: git│refs/bugs/dcd57c3e688fdde3be86e7678dc3dc720dcdc6d4 ->      │:1  L:3   3 months ago      </text></g><g id="g453"><text class="color6" lengthAdjust="spacingAndGlyphs" textLength="72" x="0"> 6767e5f4</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="8" x="72"> </text><text class="color3" lengthAdjust="spacingAndGlyphs" textLength="56" x="80"> open  </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="800" x="136">  feat: Git│refs/bugs/dcd57c3e688fdde3be86e7678dc3dc720dcdc6d4         │:34 L:3   1 month ago       </text></g><g id="g454"><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="688" x="0">                            │ * [new branch]                                          </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="704">│  </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="744">   </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="8" x="792"> </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="40" x="808">     </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="856">   </text></g><g id="g455"><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="728" x="0">                            │refs/bugs/dfb1dded0a6e45363613a711cdfa3621abfc116c ->      │  </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="744">   </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="8" x="792"> </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="48" x="808">      </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="864">   </text></g><g id="g456"><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="688" x="0">                            │refs/bugs/dfb1dded0a6e45363613a711cdfa3621abfc116c       </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="704">│  </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="744">   </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="8" x="792"> </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="48" x="808">      </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="864">   </text></g><g id="g457"><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="688" x="0">                            │ * [new branch]                                          </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="704">│  </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="744">   </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="8" x="792"> </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="48" x="808">      </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="864">   </text></g><g id="g458"><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="688" x="0">                            │refs/bugs/e5d4ec2b0e588c42784480218139c0ed97acd854 ->    </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="704">│  </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="744">   </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="8" x="792"> </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="48" x="808">      </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="864">   </text></g><g id="g459"><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="688" x="0">                            │refs/bugs/e5d4ec2b0e588c42784480218139c0ed97acd854       </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="704">│  </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="744">   </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="8" x="792"> </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="48" x="808">      </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="864">   </text></g><g id="g460"><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="688" x="0">                            │refs/bugs/f2b2d83f42a6abeeb3a4fe26fc0b8ff0996c5315 ->    </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="704">│  </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="744">   </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="8" x="792"> </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="48" x="808">      </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="864">   </text></g><g id="g461"><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="688" x="0">                            │refs/bugs/f2b2d83f42a6abeeb3a4fe26fc0b8ff0996c5315       </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="704">│  </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="744">   </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="8" x="792"> </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="48" x="808">      </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="864">   </text></g><g id="g462"><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="408" x="224">│refs/bugs/f43890e66a2bed880b962086242327dd41c63a49</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="16" x="640">-></text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="8" x="704">│</text></g><g id="g463"><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="936" x="0">                            │refs/bugs/f43890e66a2bed880b962086242327dd41c63a49         │                            </text></g><g id="g464"><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="936" x="0">Showing 11 of 11 bugs       └───────────────────────────────────────────────────────────┘                            </text></g><g id="g465"><text class="color6" lengthAdjust="spacingAndGlyphs" textLength="72" x="0"> 23dc77dd</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="8" x="72"> </text><text class="color3" lengthAdjust="spacingAndGlyphs" textLength="56" x="80"> open  </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="408" x="136">  a better title                                   </text><text class="color5" lengthAdjust="spacingAndGlyphs" textLength="144" x="544"> Michael Muré     </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="248" x="688">  C:1  L:2   18 seconds ago    </text></g><g id="g466"><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="728" x="0">                                                                                           </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="744">   </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="8" x="792"> </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="48" x="808">      </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="864">   </text></g><g id="g467"><text class="color6" lengthAdjust="spacingAndGlyphs" textLength="72" x="0"> 23dc77dd</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="8" x="72"> </text><text class="color3" lengthAdjust="spacingAndGlyphs" textLength="56" x="80"> open  </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="408" x="136">  a better title                                   </text><text class="color5" lengthAdjust="spacingAndGlyphs" textLength="144" x="544"> Michael Muré     </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="248" x="688">  C:1  L:2   19 seconds ago    </text></g><g id="g468"><text class="color6" lengthAdjust="spacingAndGlyphs" textLength="72" x="0"> 23dc77dd</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="8" x="72"> </text><text class="color3" lengthAdjust="spacingAndGlyphs" textLength="56" x="80"> open  </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="408" x="136">  a better title                                   </text><text class="color5" lengthAdjust="spacingAndGlyphs" textLength="144" x="544"> Michael Muré     </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="248" x="688">  C:1  L:2   21 seconds ago    </text></g><g id="g469"><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="688" x="0">                            │                                                         </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="704">│  </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="744">   </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="8" x="792"> </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="40" x="808">     </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="856">   </text></g><g id="g470"><text class="color6" lengthAdjust="spacingAndGlyphs" textLength="72" x="0"> 23dc77dd</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="8" x="72"> </text><text class="color3" lengthAdjust="spacingAndGlyphs" textLength="56" x="80"> open  </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="408" x="136">  a better title                                   </text><text class="color5" lengthAdjust="spacingAndGlyphs" textLength="144" x="544"> Michael Muré     </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="248" x="688">  C:1  L:2   22 seconds ago    </text></g><g id="g471"><text class="color6" lengthAdjust="spacingAndGlyphs" textLength="72" x="0"> 6767e5f4</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="8" x="72"> </text><text class="color3" lengthAdjust="spacingAndGlyphs" textLength="56" x="80"> open  </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="800" x="136">  feat: Git┌─Pull from remote origin───────────────────────────────────┐:34 L:3   1 month ago       </text></g><g id="g472"><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="688" x="0">                            │done                                                     </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="704">│  </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="744">   </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="8" x="792"> </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="40" x="808">     </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="24" x="856">   </text></g><g id="g473"><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="712" x="0">                                                                                         </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="8" x="920"> </text></g><g id="g474"><text class="color6" lengthAdjust="spacingAndGlyphs" textLength="72" x="0"> 23dc77dd</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="8" x="72"> </text><text class="color3" lengthAdjust="spacingAndGlyphs" textLength="56" x="80"> open  </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="408" x="136">  a better title                                   </text><text class="color5" lengthAdjust="spacingAndGlyphs" textLength="144" x="544"> Michael Muré     </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="248" x="688">  C:1  L:2   23 seconds ago    </text></g><g id="g475"><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="408" x="224">                                                   </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="16" x="640">  </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="8" x="704"> </text></g><g id="g476"><text class="color10" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="112" x="0">michael@debian</text><text class="color12" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="328" x="112"> ~/go/src/github.com/MichaelMure/git-bug </text><text class="color9" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="56" x="440">master </text><text class="color12" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="8" x="496">$</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="8" x="504"> </text><text class="background" lengthAdjust="spacingAndGlyphs" textLength="8" x="512"> </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="416" x="520">                                                    </text></g><g id="g477"><text class="color10" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="112" x="0">michael@debian</text><text class="color12" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="328" x="112"> ~/go/src/github.com/MichaelMure/git-bug </text><text class="color9" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="56" x="440">master </text><text class="color12" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="8" x="496">$</text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="432" x="504"> exit                                                 </text></g><g id="g478"><text class="background" lengthAdjust="spacingAndGlyphs" textLength="8" x="0"> </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="704" x="8">                                                                                        </text><text class="foreground" lengthAdjust="spacingAndGlyphs" textLength="8" x="920"> </text></g></defs><rect class="background" height="100%" width="100%" x="0" y="0"/><g display="none"><rect class="foreground" height="17" width="8" x="0" y="0"/><use y="0" xlink:href="#g1"/><animate attributeName="display" begin="0ms; anim_last.end" dur="8ms" from="inline" to="inline"/></g><g display="none"><rect class="foreground" height="17" width="8" x="512" y="0"/><use y="0" xlink:href="#g2"/><animate attributeName="display" begin="8ms; anim_last.end+8ms" dur="370ms" from="inline" to="inline"/></g><g display="none"><rect class="foreground" height="17" width="8" x="520" y="0"/><use y="0" xlink:href="#g3"/><animate attributeName="display" begin="378ms; anim_last.end+378ms" dur="166ms" from="inline" to="inline"/></g><g display="none"><rect class="foreground" height="17" width="8" x="528" y="0"/><use y="0" xlink:href="#g4"/><animate attributeName="display" begin="544ms; anim_last.end+544ms" dur="134ms" from="inline" to="inline"/></g><g display="none"><rect class="foreground" height="17" width="8" x="536" y="0"/><use y="0" xlink:href="#g5"/><animate attributeName="display" begin="678ms; anim_last.end+678ms" dur="147ms" from="inline" to="inline"/></g><g display="none"><rect class="foreground" height="17" width="8" x="544" y="0"/><use y="0" xlink:href="#g6"/><animate attributeName="display" begin="825ms; anim_last.end+825ms" dur="221ms" from="inline" to="inline"/></g><g display="none"><rect class="foreground" height="17" width="8" x="552" y="0"/><use y="0" xlink:href="#g7"/><animate attributeName="display" begin="1046ms; anim_last.end+1046ms" dur="77ms" from="inline" to="inline"/></g><g display="none"><rect class="foreground" height="17" width="8" x="560" y="0"/><use y="0" xlink:href="#g8"/><animate attributeName="display" begin="1123ms; anim_last.end+1123ms" dur="185ms" from="inline" to="inline"/></g><g display="none"><rect class="foreground" height="17" width="8" x="568" y="0"/><use y="0" xlink:href="#g9"/><animate attributeName="display" begin="1308ms; anim_last.end+1308ms" dur="144ms" from="inline" to="inline"/></g><g display="none"><rect class="foreground" height="17" width="8" x="576" y="0"/><use y="0" xlink:href="#g10"/><animate attributeName="display" begin="1452ms; anim_last.end+1452ms" dur="166ms" from="inline" to="inline"/></g><g display="none"><rect class="foreground" height="17" width="8" x="584" y="0"/><use y="0" xlink:href="#g11"/><animate attributeName="display" begin="1618ms; anim_last.end+1618ms" dur="453ms" from="inline" to="inline"/></g><g display="none"><rect class="foreground" height="17" width="8" x="592" y="0"/><use y="0" xlink:href="#g12"/><animate attributeName="display" begin="2071ms; anim_last.end+2071ms" dur="182ms" from="inline" to="inline"/></g><g display="none"><rect class="foreground" height="17" width="8" x="600" y="0"/><use y="0" xlink:href="#g13"/><animate attributeName="display" begin="2253ms; anim_last.end+2253ms" dur="514ms" from="inline" to="inline"/></g><g display="none"><rect class="foreground" height="17" width="8" x="608" y="0"/><use y="0" xlink:href="#g14"/><animate attributeName="display" begin="2767ms; anim_last.end+2767ms" dur="321ms" from="inline" to="inline"/></g><g display="none"><rect class="foreground" height="17" width="8" x="616" y="0"/><use y="0" xlink:href="#g15"/><animate attributeName="display" begin="3088ms; anim_last.end+3088ms" dur="103ms" from="inline" to="inline"/></g><g display="none"><rect class="foreground" height="17" width="8" x="624" y="0"/><use y="0" xlink:href="#g16"/><animate attributeName="display" begin="3191ms; anim_last.end+3191ms" dur="751ms" from="inline" to="inline"/></g><g display="none"><use y="0" xlink:href="#g17"/><rect class="foreground" height="17" width="8" x="0" y="17"/><use y="17" xlink:href="#g1"/><animate attributeName="display" begin="3942ms; anim_last.end+3942ms" dur="7ms" from="inline" to="inline"/></g><g display="none"><use y="0" xlink:href="#g18"/><animate attributeName="display" begin="3949ms; anim_last.end+3949ms" dur="200ms" from="inline" to="inline"/></g><g display="none"><rect class="color7" height="17" width="936" x="0" y="34"/><use y="34" xlink:href="#g19"/><use y="51" xlink:href="#g20"/><animate attributeName="display" begin="4149ms; anim_last.end+4149ms" dur="1012ms" from="inline" to="inline"/></g><g display="none"><rect class="color7" height="17" width="936" x="0" y="51"/><use y="51" xlink:href="#g21"/><animate attributeName="display" begin="5161ms; anim_last.end+5161ms" dur="191ms" from="inline" to="inline"/></g><g display="none"><use y="68" xlink:href="#g22"/><animate attributeName="display" begin="4149ms; anim_last.end+4149ms" dur="1203ms" from="inline" to="inline"/></g><g display="none"><rect class="color7" height="17" width="936" x="0" y="68"/><use y="68" xlink:href="#g23"/><animate attributeName="display" begin="5352ms; anim_last.end+5352ms" dur="395ms" from="inline" to="inline"/></g><g display="none"><use y="85" xlink:href="#g24"/><animate attributeName="display" begin="4149ms; anim_last.end+4149ms" dur="1598ms" from="inline" to="inline"/></g><g display="none"><rect class="color7" height="17" width="936" x="0" y="85"/><use y="85" xlink:href="#g25"/><animate attributeName="display" begin="5747ms; anim_last.end+5747ms" dur="180ms" from="inline" to="inline"/></g><g display="none"><use y="102" xlink:href="#g26"/><animate attributeName="display" begin="4149ms; anim_last.end+4149ms" dur="1778ms" from="inline" to="inline"/></g><g display="none"><rect class="color7" height="17" width="936" x="0" y="102"/><use y="102" xlink:href="#g27"/><animate attributeName="display" begin="5927ms; anim_last.end+5927ms" dur="152ms" from="inline" to="inline"/></g><g display="none"><use y="119" xlink:href="#g28"/><animate attributeName="display" begin="4149ms; anim_last.end+4149ms" dur="1930ms" from="inline" to="inline"/></g><g display="none"><rect class="color7" height="17" width="936" x="0" y="119"/><use y="119" xlink:href="#g29"/><animate attributeName="display" begin="6079ms; anim_last.end+6079ms" dur="145ms" from="inline" to="inline"/></g><g display="none"><use y="136" xlink:href="#g30"/><animate attributeName="display" begin="4149ms; anim_last.end+4149ms" dur="2075ms" from="inline" to="inline"/></g><g display="none"><rect class="color7" height="17" width="936" x="0" y="136"/><use y="136" xlink:href="#g31"/><animate attributeName="display" begin="6224ms; anim_last.end+6224ms" dur="160ms" from="inline" to="inline"/></g><g display="none"><use y="153" xlink:href="#g32"/><animate attributeName="display" begin="4149ms; anim_last.end+4149ms" dur="2235ms" from="inline" to="inline"/></g><g display="none"><rect class="color7" height="17" width="936" x="0" y="153"/><use y="153" xlink:href="#g33"/><animate attributeName="display" begin="6384ms; anim_last.end+6384ms" dur="160ms" from="inline" to="inline"/></g><g display="none"><use y="170" xlink:href="#g34"/><animate attributeName="display" begin="4149ms; anim_last.end+4149ms" dur="2395ms" from="inline" to="inline"/></g><g display="none"><rect class="color7" height="17" width="936" x="0" y="170"/><use y="170" xlink:href="#g35"/><animate attributeName="display" begin="6544ms; anim_last.end+6544ms" dur="170ms" from="inline" to="inline"/></g><g display="none"><use y="187" xlink:href="#g36"/><animate attributeName="display" begin="4149ms; anim_last.end+4149ms" dur="2565ms" from="inline" to="inline"/></g><g display="none"><use y="34" xlink:href="#g37"/><animate attributeName="display" begin="5161ms; anim_last.end+5161ms" dur="2118ms" from="inline" to="inline"/></g><g display="none"><use y="51" xlink:href="#g38"/><animate attributeName="display" begin="5352ms; anim_last.end+5352ms" dur="1927ms" from="inline" to="inline"/></g><g display="none"><use y="68" xlink:href="#g39"/><animate attributeName="display" begin="5747ms; anim_last.end+5747ms" dur="1532ms" from="inline" to="inline"/></g><g display="none"><use y="85" xlink:href="#g40"/><animate attributeName="display" begin="5927ms; anim_last.end+5927ms" dur="1352ms" from="inline" to="inline"/></g><g display="none"><use y="102" xlink:href="#g41"/><animate attributeName="display" begin="6079ms; anim_last.end+6079ms" dur="1200ms" from="inline" to="inline"/></g><g display="none"><use y="119" xlink:href="#g42"/><animate attributeName="display" begin="6224ms; anim_last.end+6224ms" dur="1055ms" from="inline" to="inline"/></g><g display="none"><use y="136" xlink:href="#g43"/><animate attributeName="display" begin="6384ms; anim_last.end+6384ms" dur="895ms" from="inline" to="inline"/></g><g display="none"><use y="153" xlink:href="#g44"/><animate attributeName="display" begin="6544ms; anim_last.end+6544ms" dur="735ms" from="inline" to="inline"/></g><g display="none"><use y="170" xlink:href="#g45"/><rect class="color7" height="17" width="936" x="0" y="187"/><use y="187" xlink:href="#g46"/><animate attributeName="display" begin="6714ms; anim_last.end+6714ms" dur="565ms" from="inline" to="inline"/></g><g display="none"><use y="204" xlink:href="#g47"/><use y="221" xlink:href="#g48"/><use y="238" xlink:href="#g49"/><use y="255" xlink:href="#g50"/><use y="272" xlink:href="#g51"/><use y="289" xlink:href="#g52"/><use y="306" xlink:href="#g53"/><use y="323" xlink:href="#g54"/><use y="340" xlink:href="#g55"/><use y="357" xlink:href="#g56"/><use y="374" xlink:href="#g57"/><use y="391" xlink:href="#g58"/><use y="425" xlink:href="#g59"/><animate attributeName="display" begin="4149ms; anim_last.end+4149ms" dur="3130ms" from="inline" to="inline"/></g><g display="none"><use y="119" xlink:href="#g60"/><rect class="color7" height="17" width="936" x="0" y="136"/><use y="136" xlink:href="#g61"/><animate attributeName="display" begin="7279ms; anim_last.end+7279ms" dur="702ms" from="inline" to="inline"/></g><g display="none"><use y="102" xlink:href="#g62"/><animate attributeName="display" begin="7279ms; anim_last.end+7279ms" dur="873ms" from="inline" to="inline"/></g><g display="none"><rect class="color7" height="17" width="936" x="0" y="119"/><use y="119" xlink:href="#g63"/><animate attributeName="display" begin="7981ms; anim_last.end+7981ms" dur="171ms" from="inline" to="inline"/></g><g display="none"><use y="85" xlink:href="#g64"/><animate attributeName="display" begin="7279ms; anim_last.end+7279ms" dur="1018ms" from="inline" to="inline"/></g><g display="none"><rect class="color7" height="17" width="936" x="0" y="102"/><use y="102" xlink:href="#g65"/><animate attributeName="display" begin="8152ms; anim_last.end+8152ms" dur="145ms" from="inline" to="inline"/></g><g display="none"><use y="34" xlink:href="#g66"/><use y="51" xlink:href="#g67"/><use y="68" xlink:href="#g68"/><animate attributeName="display" begin="7279ms; anim_last.end+7279ms" dur="1489ms" from="inline" to="inline"/></g><g display="none"><rect class="color7" height="17" width="936" x="0" y="85"/><use y="85" xlink:href="#g69"/><use y="102" xlink:href="#g62"/><animate attributeName="display" begin="8297ms; anim_last.end+8297ms" dur="471ms" from="inline" to="inline"/></g><g display="none"><use y="119" xlink:href="#g60"/><animate attributeName="display" begin="8152ms; anim_last.end+8152ms" dur="616ms" from="inline" to="inline"/></g><g display="none"><use y="136" xlink:href="#g70"/><animate attributeName="display" begin="7981ms; anim_last.end+7981ms" dur="787ms" from="inline" to="inline"/></g><g display="none"><use y="153" xlink:href="#g71"/><use y="170" xlink:href="#g71"/><use y="187" xlink:href="#g71"/><use y="204" xlink:href="#g72"/><use y="221" xlink:href="#g73"/><use y="238" xlink:href="#g74"/><use y="255" xlink:href="#g75"/><use y="272" xlink:href="#g76"/><use y="289" xlink:href="#g77"/><use y="306" xlink:href="#g78"/><use y="323" xlink:href="#g79"/><use y="340" xlink:href="#g80"/><use y="357" xlink:href="#g81"/><use y="374" xlink:href="#g82"/><use y="391" xlink:href="#g83"/><use y="425" xlink:href="#g84"/><animate attributeName="display" begin="7279ms; anim_last.end+7279ms" dur="1489ms" from="inline" to="inline"/></g><g display="none"><rect class="color7" height="17" width="936" x="0" y="85"/><use y="85" xlink:href="#g25"/><use y="102" xlink:href="#g41"/><animate attributeName="display" begin="8768ms; anim_last.end+8768ms" dur="526ms" from="inline" to="inline"/></g><g display="none"><rect class="color7" height="17" width="936" x="0" y="102"/><use y="102" xlink:href="#g27"/><animate attributeName="display" begin="9294ms; anim_last.end+9294ms" dur="168ms" from="inline" to="inline"/></g><g display="none"><use y="119" xlink:href="#g42"/><animate attributeName="display" begin="8768ms; anim_last.end+8768ms" dur="694ms" from="inline" to="inline"/></g><g display="none"><use y="102" xlink:href="#g41"/><rect class="color7" height="17" width="936" x="0" y="119"/><use y="119" xlink:href="#g29"/><animate attributeName="display" begin="9462ms; anim_last.end+9462ms" dur="255ms" from="inline" to="inline"/></g><g display="none"><use y="85" xlink:href="#g40"/><animate attributeName="display" begin="9294ms; anim_last.end+9294ms" dur="598ms" from="inline" to="inline"/></g><g display="none"><rect class="color7" height="17" width="936" x="0" y="102"/><use y="102" xlink:href="#g27"/><animate attributeName="display" begin="9717ms; anim_last.end+9717ms" dur="175ms" from="inline" to="inline"/></g><g display="none"><use y="0" xlink:href="#g85"/><animate attributeName="display" begin="4149ms; anim_last.end+4149ms" dur="7129ms" from="inline" to="inline"/></g><g display="none"><use y="34" xlink:href="#g37"/><use y="51" xlink:href="#g38"/><use y="68" xlink:href="#g39"/><animate attributeName="display" begin="8768ms; anim_last.end+8768ms" dur="2510ms" from="inline" to="inline"/></g><g display="none"><rect class="color7" height="17" width="936" x="0" y="85"/><use y="85" xlink:href="#g25"/><use y="102" xlink:href="#g41"/><animate attributeName="display" begin="9892ms; anim_last.end+9892ms" dur="1386ms" from="inline" to="inline"/></g><g display="none"><use y="119" xlink:href="#g42"/><animate attributeName="display" begin="9717ms; anim_last.end+9717ms" dur="1561ms" from="inline" to="inline"/></g><g display="none"><use y="136" xlink:href="#g43"/><use y="153" xlink:href="#g44"/><use y="170" xlink:href="#g45"/><use y="187" xlink:href="#g86"/><use y="204" xlink:href="#g47"/><use y="221" xlink:href="#g48"/><use y="238" xlink:href="#g49"/><use y="255" xlink:href="#g50"/><use y="272" xlink:href="#g51"/><use y="289" xlink:href="#g52"/><use y="306" xlink:href="#g53"/><use y="323" xlink:href="#g54"/><use y="340" xlink:href="#g55"/><use y="357" xlink:href="#g56"/><use y="374" xlink:href="#g57"/><use y="391" xlink:href="#g58"/><use y="425" xlink:href="#g87"/><animate attributeName="display" begin="8768ms; anim_last.end+8768ms" dur="2510ms" from="inline" to="inline"/></g><g display="none"><rect class="color4" height="17" width="936" x="0" y="442"/><use y="442" xlink:href="#g88"/><animate attributeName="display" begin="4149ms; anim_last.end+4149ms" dur="7129ms" from="inline" to="inline"/></g><g display="none"><rect class="foreground" height="17" width="8" x="0" y="0"/><use y="0" xlink:href="#g89"/><use y="34" xlink:href="#g71"/><use y="51" xlink:href="#g71"/><use y="68" xlink:href="#g71"/><use y="85" xlink:href="#g71"/><use y="102" xlink:href="#g71"/><use y="119" xlink:href="#g71"/><use y="136" xlink:href="#g71"/><use y="153" xlink:href="#g71"/><use y="170" xlink:href="#g71"/><use y="187" xlink:href="#g71"/><use y="204" xlink:href="#g72"/><use y="221" xlink:href="#g73"/><use y="238" xlink:href="#g74"/><use y="255" xlink:href="#g75"/><use y="272" xlink:href="#g76"/><use y="289" xlink:href="#g77"/><use y="306" xlink:href="#g78"/><use y="323" xlink:href="#g79"/><use y="340" xlink:href="#g80"/><use y="357" xlink:href="#g81"/><use y="374" xlink:href="#g82"/><use y="391" xlink:href="#g83"/><use y="425" xlink:href="#g90"/><use y="442" xlink:href="#g71"/><animate attributeName="display" begin="11278ms; anim_last.end+11278ms" dur="17ms" from="inline" to="inline"/></g><g display="none"><use y="34" xlink:href="#g71"/><use y="68" xlink:href="#g71"/><use y="85" xlink:href="#g71"/><use y="102" xlink:href="#g71"/><use y="119" xlink:href="#g71"/><use y="136" xlink:href="#g71"/><use y="153" xlink:href="#g71"/><use y="170" xlink:href="#g71"/><use y="187" xlink:href="#g71"/><use y="204" xlink:href="#g72"/><use y="221" xlink:href="#g73"/><use y="238" xlink:href="#g74"/><use y="255" xlink:href="#g75"/><use y="272" xlink:href="#g76"/><use y="289" xlink:href="#g77"/><use y="306" xlink:href="#g78"/><use y="323" xlink:href="#g79"/><use y="340" xlink:href="#g80"/><use y="357" xlink:href="#g81"/><use y="374" xlink:href="#g82"/><use y="391" xlink:href="#g83"/><rect class="foreground" height="17" width="16" x="0" y="442"/><use y="442" xlink:href="#g91"/><animate attributeName="display" begin="11295ms; anim_last.end+11295ms" dur="1ms" from="inline" to="inline"/></g><g display="none"><rect class="foreground" height="17" width="8" x="0" y="34"/><use y="34" xlink:href="#g92"/><animate attributeName="display" begin="11296ms; anim_last.end+11296ms" dur="862ms" from="inline" to="inline"/></g><g display="none"><use y="51" xlink:href="#g71"/><animate attributeName="display" begin="11295ms; anim_last.end+11295ms" dur="863ms" from="inline" to="inline"/></g><g display="none"><use y="34" xlink:href="#g93"/><rect class="foreground" height="17" width="8" x="0" y="51"/><use y="51" xlink:href="#g94"/><animate attributeName="display" begin="12158ms; anim_last.end+12158ms" dur="126ms" from="inline" to="inline"/></g><g display="none"><rect class="foreground" height="17" width="936" x="0" y="0"/><use y="0" xlink:href="#g95"/><animate attributeName="display" begin="11295ms; anim_last.end+11295ms" dur="1598ms" from="inline" to="inline"/></g><g display="none"><rect class="foreground" height="17" width="8" x="88" y="34"/><use y="34" xlink:href="#g96"/><animate attributeName="display" begin="12284ms; anim_last.end+12284ms" dur="609ms" from="inline" to="inline"/></g><g display="none"><rect class="foreground" height="17" width="8" x="96" y="34"/><use y="34" xlink:href="#g97"/><animate attributeName="display" begin="12893ms; anim_last.end+12893ms" dur="575ms" from="inline" to="inline"/></g><g display="none"><rect class="foreground" height="17" width="8" x="104" y="34"/><use y="34" xlink:href="#g98"/><animate attributeName="display" begin="13468ms; anim_last.end+13468ms" dur="115ms" from="inline" to="inline"/></g><g display="none"><rect class="foreground" height="17" width="8" x="112" y="34"/><use y="34" xlink:href="#g99"/><animate attributeName="display" begin="13583ms; anim_last.end+13583ms" dur="134ms" from="inline" to="inline"/></g><g display="none"><rect class="foreground" height="17" width="8" x="120" y="34"/><use y="34" xlink:href="#g100"/><animate attributeName="display" begin="13717ms; anim_last.end+13717ms" dur="118ms" from="inline" to="inline"/></g><g display="none"><rect class="foreground" height="17" width="8" x="128" y="34"/><use y="34" xlink:href="#g101"/><animate attributeName="display" begin="13835ms; anim_last.end+13835ms" dur="179ms" from="inline" to="inline"/></g><g display="none"><rect class="foreground" height="17" width="8" x="136" y="34"/><use y="34" xlink:href="#g102"/><animate attributeName="display" begin="14014ms; anim_last.end+14014ms" dur="653ms" from="inline" to="inline"/></g><g display="none"><rect class="foreground" height="17" width="8" x="144" y="34"/><use y="34" xlink:href="#g103"/><animate attributeName="display" begin="14667ms; anim_last.end+14667ms" dur="320ms" from="inline" to="inline"/></g><g display="none"><rect class="foreground" height="17" width="8" x="152" y="34"/><use y="34" xlink:href="#g104"/><animate attributeName="display" begin="14987ms; anim_last.end+14987ms" dur="244ms" from="inline" to="inline"/></g><g display="none"><rect class="foreground" height="17" width="8" x="160" y="34"/><use y="34" xlink:href="#g105"/><animate attributeName="display" begin="15231ms; anim_last.end+15231ms" dur="101ms" from="inline" to="inline"/></g><g display="none"><rect class="foreground" height="17" width="8" x="168" y="34"/><use y="34" xlink:href="#g106"/><animate attributeName="display" begin="15332ms; anim_last.end+15332ms" dur="179ms" from="inline" to="inline"/></g><g display="none"><rect class="foreground" height="17" width="8" x="176" y="34"/><use y="34" xlink:href="#g107"/><animate attributeName="display" begin="15511ms; anim_last.end+15511ms" dur="1033ms" from="inline" to="inline"/></g><g display="none"><rect class="foreground" height="17" width="192" x="368" y="408"/><use y="408" xlink:href="#g108"/><rect class="foreground" height="17" width="16" x="0" y="425"/><rect class="foreground" height="17" width="16" x="128" y="425"/><rect class="foreground" height="17" width="16" x="256" y="425"/><rect class="foreground" height="17" width="16" x="384" y="425"/><rect class="foreground" height="17" width="16" x="512" y="425"/><rect class="foreground" height="17" width="16" x="640" y="425"/><rect class="foreground" height="17" width="24" x="768" y="425"/><use y="425" xlink:href="#g109"/><animate attributeName="display" begin="11295ms; anim_last.end+11295ms" dur="5249ms" from="inline" to="inline"/></g><g display="none"><rect class="foreground" height="17" width="16" x="0" y="442"/><rect class="foreground" height="17" width="16" x="128" y="442"/><rect class="foreground" height="17" width="16" x="256" y="442"/><rect class="foreground" height="17" width="16" x="384" y="442"/><rect class="foreground" height="17" width="16" x="512" y="442"/><rect class="foreground" height="17" width="16" x="640" y="442"/><rect class="foreground" height="17" width="24" x="768" y="442"/><use y="442" xlink:href="#g110"/><animate attributeName="display" begin="11296ms; anim_last.end+11296ms" dur="5248ms" from="inline" to="inline"/></g><g display="none"><rect class="foreground" height="17" width="936" x="0" y="408"/><use y="408" xlink:href="#g111"/><rect class="foreground" height="17" width="16" x="0" y="425"/><use y="425" xlink:href="#g112"/><rect class="foreground" height="17" width="16" x="0" y="442"/><rect class="foreground" height="17" width="16" x="128" y="442"/><use y="442" xlink:href="#g113"/><animate attributeName="display" begin="16544ms; anim_last.end+16544ms" dur="448ms" from="inline" to="inline"/></g><g display="none"><rect class="foreground" height="17" width="936" x="0" y="408"/><use y="408" xlink:href="#g114"/><animate attributeName="display" begin="16992ms; anim_last.end+16992ms" dur="136ms" from="inline" to="inline"/></g><g display="none"><rect class="foreground" height="17" width="936" x="0" y="0"/><use y="0" xlink:href="#g115"/><animate attributeName="display" begin="12893ms; anim_last.end+12893ms" dur="4281ms" from="inline" to="inline"/></g><g display="none"><use y="408" xlink:href="#g71"/><animate attributeName="display" begin="17128ms; anim_last.end+17128ms" dur="46ms" from="inline" to="inline"/></g><g display="none"><rect class="foreground" height="17" width="16" x="0" y="425"/><rect class="foreground" height="17" width="24" x="232" y="425"/><rect class="foreground" height="17" width="24" x="464" y="425"/><rect class="foreground" height="17" width="24" x="696" y="425"/><use y="425" xlink:href="#g116"/><rect class="foreground" height="17" width="16" x="0" y="442"/><rect class="foreground" height="17" width="24" x="232" y="442"/><rect class="foreground" height="17" width="24" x="464" y="442"/><rect class="foreground" height="17" width="16" x="696" y="442"/><use y="442" xlink:href="#g117"/><animate attributeName="display" begin="16992ms; anim_last.end+16992ms" dur="182ms" from="inline" to="inline"/></g><g display="none"><rect class="foreground" height="17" width="936" x="0" y="0"/><use y="0" xlink:href="#g95"/><animate attributeName="display" begin="17174ms; anim_last.end+17174ms" dur="2ms" from="inline" to="inline"/></g><g display="none"><use y="34" xlink:href="#g118"/><animate attributeName="display" begin="16544ms; anim_last.end+16544ms" dur="632ms" from="inline" to="inline"/></g><g display="none"><use y="51" xlink:href="#g71"/><animate attributeName="display" begin="12284ms; anim_last.end+12284ms" dur="4892ms" from="inline" to="inline"/></g><g display="none"><use y="68" xlink:href="#g119"/><use y="85" xlink:href="#g120"/><use y="102" xlink:href="#g121"/><use y="119" xlink:href="#g122"/><use y="136" xlink:href="#g121"/><use y="153" xlink:href="#g123"/><use y="170" xlink:href="#g121"/><use y="187" xlink:href="#g124"/><use y="204" xlink:href="#g125"/><use y="221" xlink:href="#g126"/><use y="238" xlink:href="#g127"/><use y="255" xlink:href="#g128"/><use y="272" xlink:href="#g129"/><use y="289" xlink:href="#g130"/><use y="306" xlink:href="#g131"/><use y="323" xlink:href="#g132"/><use y="340" xlink:href="#g133"/><use y="357" xlink:href="#g134"/><use y="374" xlink:href="#g135"/><use y="391" xlink:href="#g136"/><animate attributeName="display" begin="11296ms; anim_last.end+11296ms" dur="5880ms" from="inline" to="inline"/></g><g display="none"><use y="408" xlink:href="#g71"/><use y="425" xlink:href="#g71"/><rect class="foreground" height="17" width="8" x="0" y="442"/><use y="442" xlink:href="#g94"/><animate attributeName="display" begin="17174ms; anim_last.end+17174ms" dur="2ms" from="inline" to="inline"/></g><g display="none"><rect class="color7" height="17" width="936" x="0" y="85"/><use y="85" xlink:href="#g137"/><use y="102" xlink:href="#g138"/><animate attributeName="display" begin="17176ms; anim_last.end+17176ms" dur="1368ms" from="inline" to="inline"/></g><g display="none"><rect class="color7" height="17" width="936" x="0" y="102"/><use y="102" xlink:href="#g139"/><animate attributeName="display" begin="18544ms; anim_last.end+18544ms" dur="177ms" from="inline" to="inline"/></g><g display="none"><use y="119" xlink:href="#g66"/><animate attributeName="display" begin="17176ms; anim_last.end+17176ms" dur="1545ms" from="inline" to="inline"/></g><g display="none"><use y="102" xlink:href="#g138"/><rect class="color7" height="17" width="936" x="0" y="119"/><use y="119" xlink:href="#g140"/><animate attributeName="display" begin="18721ms; anim_last.end+18721ms" dur="625ms" from="inline" to="inline"/></g><g display="none"><use y="85" xlink:href="#g141"/><animate attributeName="display" begin="18544ms; anim_last.end+18544ms" dur="965ms" from="inline" to="inline"/></g><g display="none"><rect class="color7" height="17" width="936" x="0" y="102"/><use y="102" xlink:href="#g139"/><animate attributeName="display" begin="19346ms; anim_last.end+19346ms" dur="163ms" from="inline" to="inline"/></g><g display="none"><use y="68" xlink:href="#g142"/><animate attributeName="display" begin="17176ms; anim_last.end+17176ms" dur="2490ms" from="inline" to="inline"/></g><g display="none"><rect class="color7" height="17" width="936" x="0" y="85"/><use y="85" xlink:href="#g137"/><animate attributeName="display" begin="19509ms; anim_last.end+19509ms" dur="157ms" from="inline" to="inline"/></g><g display="none"><use y="51" xlink:href="#g143"/><animate attributeName="display" begin="17176ms; anim_last.end+17176ms" dur="2667ms" from="inline" to="inline"/></g><g display="none"><rect class="color7" height="17" width="936" x="0" y="68"/><use y="68" xlink:href="#g144"/><animate attributeName="display" begin="19666ms; anim_last.end+19666ms" dur="177ms" from="inline" to="inline"/></g><g display="none"><use y="0" xlink:href="#g145"/><use y="34" xlink:href="#g45"/><animate attributeName="display" begin="17176ms; anim_last.end+17176ms" dur="3377ms" from="inline" to="inline"/></g><g display="none"><rect class="color7" height="17" width="936" x="0" y="51"/><use y="51" xlink:href="#g146"/><use y="68" xlink:href="#g142"/><animate attributeName="display" begin="19843ms; anim_last.end+19843ms" dur="710ms" from="inline" to="inline"/></g><g display="none"><use y="85" xlink:href="#g141"/><animate attributeName="display" begin="19666ms; anim_last.end+19666ms" dur="887ms" from="inline" to="inline"/></g><g display="none"><use y="102" xlink:href="#g138"/><animate attributeName="display" begin="19509ms; anim_last.end+19509ms" dur="1044ms" from="inline" to="inline"/></g><g display="none"><use y="119" xlink:href="#g66"/><animate attributeName="display" begin="19346ms; anim_last.end+19346ms" dur="1207ms" from="inline" to="inline"/></g><g display="none"><use y="136" xlink:href="#g68"/><use y="153" xlink:href="#g64"/><use y="170" xlink:href="#g60"/><use y="187" xlink:href="#g70"/><use y="204" xlink:href="#g147"/><use y="221" xlink:href="#g148"/><use y="238" xlink:href="#g149"/><use y="289" xlink:href="#g77"/><use y="340" xlink:href="#g150"/><use y="391" xlink:href="#g83"/><use y="425" xlink:href="#g151"/><rect class="color4" height="17" width="936" x="0" y="442"/><use y="442" xlink:href="#g88"/><animate attributeName="display" begin="17176ms; anim_last.end+17176ms" dur="3377ms" from="inline" to="inline"/></g><g display="none"><use y="68" xlink:href="#g152"/><use y="85" xlink:href="#g153"/><use y="102" xlink:href="#g71"/><use y="119" xlink:href="#g154"/><use y="136" xlink:href="#g155"/><use y="153" xlink:href="#g156"/><use y="170" xlink:href="#g157"/><use y="187" xlink:href="#g158"/><use y="204" xlink:href="#g159"/><use y="221" xlink:href="#g160"/><use y="238" xlink:href="#g161"/><animate attributeName="display" begin="20553ms; anim_last.end+20553ms" dur="819ms" from="inline" to="inline"/></g><g display="none"><use y="255" xlink:href="#g75"/><animate attributeName="display" begin="17176ms; anim_last.end+17176ms" dur="4196ms" from="inline" to="inline"/></g><g display="none"><use y="68" xlink:href="#g162"/><use y="85" xlink:href="#g163"/><use y="102" xlink:href="#g164"/><use y="119" xlink:href="#g165"/><use y="136" xlink:href="#g166"/><use y="153" xlink:href="#g167"/><use y="170" xlink:href="#g168"/><use y="187" xlink:href="#g169"/><use y="204" xlink:href="#g170"/><use y="221" xlink:href="#g171"/><use y="238" xlink:href="#g172"/><use y="255" xlink:href="#g173"/><animate attributeName="display" begin="21372ms; anim_last.end+21372ms" dur="735ms" from="inline" to="inline"/></g><g display="none"><use y="272" xlink:href="#g76"/><animate attributeName="display" begin="17176ms; anim_last.end+17176ms" dur="4931ms" from="inline" to="inline"/></g><g display="none"><use y="289" xlink:href="#g174"/><animate attributeName="display" begin="20553ms; anim_last.end+20553ms" dur="1554ms" from="inline" to="inline"/></g><g display="none"><use y="306" xlink:href="#g175"/><animate attributeName="display" begin="17176ms; anim_last.end+17176ms" dur="4931ms" from="inline" to="inline"/></g><g display="none"><use y="272" xlink:href="#g176"/><use y="289" xlink:href="#g177"/><use y="306" xlink:href="#g173"/><animate attributeName="display" begin="22107ms; anim_last.end+22107ms" dur="384ms" from="inline" to="inline"/></g><g display="none"><use y="323" xlink:href="#g178"/><animate attributeName="display" begin="17176ms; anim_last.end+17176ms" dur="5315ms" from="inline" to="inline"/></g><g display="none"><use y="340" xlink:href="#g179"/><animate attributeName="display" begin="20553ms; anim_last.end+20553ms" dur="1938ms" from="inline" to="inline"/></g><g display="none"><use y="357" xlink:href="#g81"/><animate attributeName="display" begin="17176ms; anim_last.end+17176ms" dur="5315ms" from="inline" to="inline"/></g><g display="none"><use y="0" xlink:href="#g71"/><use y="17" xlink:href="#g180"/><use y="51" xlink:href="#g181"/><animate attributeName="display" begin="20553ms; anim_last.end+20553ms" dur="2145ms" from="inline" to="inline"/></g><g display="none"><use y="68" xlink:href="#g152"/><use y="85" xlink:href="#g153"/><use y="119" xlink:href="#g154"/><use y="136" xlink:href="#g155"/><use y="153" xlink:href="#g156"/><use y="170" xlink:href="#g157"/><use y="187" xlink:href="#g158"/><use y="204" xlink:href="#g159"/><use y="221" xlink:href="#g160"/><use y="238" xlink:href="#g161"/><use y="255" xlink:href="#g182"/><animate attributeName="display" begin="22107ms; anim_last.end+22107ms" dur="591ms" from="inline" to="inline"/></g><g display="none"><use y="272" xlink:href="#g182"/><use y="289" xlink:href="#g174"/><use y="306" xlink:href="#g182"/><use y="323" xlink:href="#g176"/><use y="340" xlink:href="#g183"/><use y="357" xlink:href="#g173"/><animate attributeName="display" begin="22491ms; anim_last.end+22491ms" dur="207ms" from="inline" to="inline"/></g><g display="none"><use y="374" xlink:href="#g82"/><animate attributeName="display" begin="17176ms; anim_last.end+17176ms" dur="5522ms" from="inline" to="inline"/></g><g display="none"><use y="391" xlink:href="#g184"/><animate attributeName="display" begin="20553ms; anim_last.end+20553ms" dur="2145ms" from="inline" to="inline"/></g><g display="none"><use y="408" xlink:href="#g71"/><animate attributeName="display" begin="17176ms; anim_last.end+17176ms" dur="5522ms" from="inline" to="inline"/></g><g display="none"><use y="425" xlink:href="#g185"/><animate attributeName="display" begin="20553ms; anim_last.end+20553ms" dur="2145ms" from="inline" to="inline"/></g><g display="none"><use y="0" xlink:href="#g186"/><use y="17" xlink:href="#g187"/><use y="68" xlink:href="#g188"/><animate attributeName="display" begin="22698ms; anim_last.end+22698ms" dur="196ms" from="inline" to="inline"/></g><g display="none"><use y="102" xlink:href="#g71"/><animate attributeName="display" begin="22107ms; anim_last.end+22107ms" dur="787ms" from="inline" to="inline"/></g><g display="none"><use y="119" xlink:href="#g189"/><use y="153" xlink:href="#g190"/><use y="170" xlink:href="#g191"/><use y="187" xlink:href="#g164"/><use y="204" xlink:href="#g192"/><use y="221" xlink:href="#g193"/><use y="238" xlink:href="#g194"/><use y="255" xlink:href="#g195"/><use y="272" xlink:href="#g196"/><use y="289" xlink:href="#g197"/><use y="306" xlink:href="#g198"/><use y="323" xlink:href="#g199"/><use y="340" xlink:href="#g200"/><use y="357" xlink:href="#g201"/><use y="391" xlink:href="#g202"/><use y="408" xlink:href="#g203"/><animate attributeName="display" begin="22698ms; anim_last.end+22698ms" dur="196ms" from="inline" to="inline"/></g><g display="none"><use y="51" xlink:href="#g204"/><animate attributeName="display" begin="22698ms; anim_last.end+22698ms" dur="1244ms" from="inline" to="inline"/></g><g display="none"><use y="68" xlink:href="#g205"/><animate attributeName="display" begin="22894ms; anim_last.end+22894ms" dur="1048ms" from="inline" to="inline"/></g><g display="none"><use y="85" xlink:href="#g71"/><animate attributeName="display" begin="22698ms; anim_last.end+22698ms" dur="1244ms" from="inline" to="inline"/></g><g display="none"><use y="102" xlink:href="#g185"/><use y="119" xlink:href="#g206"/><animate attributeName="display" begin="22894ms; anim_last.end+22894ms" dur="1048ms" from="inline" to="inline"/></g><g display="none"><use y="136" xlink:href="#g71"/><animate attributeName="display" begin="22698ms; anim_last.end+22698ms" dur="1244ms" from="inline" to="inline"/></g><g display="none"><use y="153" xlink:href="#g207"/><use y="170" xlink:href="#g208"/><use y="187" xlink:href="#g209"/><use y="204" xlink:href="#g210"/><use y="221" xlink:href="#g211"/><use y="238" xlink:href="#g212"/><use y="255" xlink:href="#g213"/><use y="272" xlink:href="#g182"/><use y="289" xlink:href="#g214"/><use y="306" xlink:href="#g215"/><use y="323" xlink:href="#g182"/><use y="340" xlink:href="#g176"/><use y="357" xlink:href="#g216"/><animate attributeName="display" begin="22894ms; anim_last.end+22894ms" dur="1048ms" from="inline" to="inline"/></g><g display="none"><use y="374" xlink:href="#g217"/><animate attributeName="display" begin="22698ms; anim_last.end+22698ms" dur="1244ms" from="inline" to="inline"/></g><g display="none"><use y="391" xlink:href="#g218"/><use y="408" xlink:href="#g219"/><animate attributeName="display" begin="22894ms; anim_last.end+22894ms" dur="1048ms" from="inline" to="inline"/></g><g display="none"><use y="425" xlink:href="#g220"/><animate attributeName="display" begin="22698ms; anim_last.end+22698ms" dur="1244ms" from="inline" to="inline"/></g><g display="none"><use y="0" xlink:href="#g71"/><use y="17" xlink:href="#g221"/><animate attributeName="display" begin="22894ms; anim_last.end+22894ms" dur="1134ms" from="inline" to="inline"/></g><g display="none"><use y="34" xlink:href="#g71"/><animate attributeName="display" begin="20553ms; anim_last.end+20553ms" dur="3475ms" from="inline" to="inline"/></g><g display="none"><use y="51" xlink:href="#g222"/><use y="68" xlink:href="#g223"/><use y="85" xlink:href="#g164"/><use y="102" xlink:href="#g224"/><use y="119" xlink:href="#g225"/><use y="136" xlink:href="#g164"/><use y="153" xlink:href="#g226"/><use y="170" xlink:href="#g227"/><use y="187" xlink:href="#g228"/><use y="204" xlink:href="#g229"/><use y="221" xlink:href="#g230"/><use y="238" xlink:href="#g231"/><use y="255" xlink:href="#g201"/><use y="272" xlink:href="#g232"/><use y="289" xlink:href="#g233"/><use y="306" xlink:href="#g234"/><use y="323" xlink:href="#g173"/><animate attributeName="display" begin="23942ms; anim_last.end+23942ms" dur="86ms" from="inline" to="inline"/></g><g display="none"><use y="17" xlink:href="#g235"/><use y="68" xlink:href="#g205"/><use y="102" xlink:href="#g185"/><use y="119" xlink:href="#g206"/><use y="153" xlink:href="#g207"/><use y="170" xlink:href="#g208"/><use y="187" xlink:href="#g209"/><use y="204" xlink:href="#g210"/><use y="221" xlink:href="#g211"/><use y="238" xlink:href="#g212"/><use y="255" xlink:href="#g213"/><use y="272" xlink:href="#g182"/><use y="289" xlink:href="#g214"/><use y="306" xlink:href="#g215"/><animate attributeName="display" begin="24028ms; anim_last.end+24028ms" dur="175ms" from="inline" to="inline"/></g><g display="none"><use y="340" xlink:href="#g182"/><use y="357" xlink:href="#g236"/><use y="391" xlink:href="#g237"/><use y="408" xlink:href="#g238"/><animate attributeName="display" begin="23942ms; anim_last.end+23942ms" dur="261ms" from="inline" to="inline"/></g><g display="none"><use y="17" xlink:href="#g239"/><animate attributeName="display" begin="24203ms; anim_last.end+24203ms" dur="1166ms" from="inline" to="inline"/></g><g display="none"><use y="34" xlink:href="#g220"/><use y="51" xlink:href="#g204"/><animate attributeName="display" begin="24028ms; anim_last.end+24028ms" dur="1341ms" from="inline" to="inline"/></g><g display="none"><use y="68" xlink:href="#g240"/><animate attributeName="display" begin="24203ms; anim_last.end+24203ms" dur="1166ms" from="inline" to="inline"/></g><g display="none"><use y="85" xlink:href="#g71"/><animate attributeName="display" begin="24028ms; anim_last.end+24028ms" dur="1341ms" from="inline" to="inline"/></g><g display="none"><use y="102" xlink:href="#g71"/><use y="119" xlink:href="#g241"/><animate attributeName="display" begin="24203ms; anim_last.end+24203ms" dur="1166ms" from="inline" to="inline"/></g><g display="none"><use y="136" xlink:href="#g71"/><animate attributeName="display" begin="24028ms; anim_last.end+24028ms" dur="1341ms" from="inline" to="inline"/></g><g display="none"><use y="153" xlink:href="#g185"/><use y="170" xlink:href="#g206"/><use y="187" xlink:href="#g71"/><use y="204" xlink:href="#g242"/><use y="221" xlink:href="#g243"/><use y="238" xlink:href="#g244"/><use y="255" xlink:href="#g245"/><use y="272" xlink:href="#g246"/><use y="289" xlink:href="#g247"/><use y="306" xlink:href="#g213"/><animate attributeName="display" begin="24203ms; anim_last.end+24203ms" dur="1166ms" from="inline" to="inline"/></g><g display="none"><use y="323" xlink:href="#g182"/><animate attributeName="display" begin="24028ms; anim_last.end+24028ms" dur="1341ms" from="inline" to="inline"/></g><g display="none"><use y="340" xlink:href="#g214"/><use y="357" xlink:href="#g215"/><animate attributeName="display" begin="24203ms; anim_last.end+24203ms" dur="1166ms" from="inline" to="inline"/></g><g display="none"><use y="374" xlink:href="#g82"/><animate attributeName="display" begin="23942ms; anim_last.end+23942ms" dur="1427ms" from="inline" to="inline"/></g><g display="none"><use y="408" xlink:href="#g248"/><animate attributeName="display" begin="24203ms; anim_last.end+24203ms" dur="1166ms" from="inline" to="inline"/></g><g display="none"><use y="425" xlink:href="#g71"/><animate attributeName="display" begin="23942ms; anim_last.end+23942ms" dur="1427ms" from="inline" to="inline"/></g><g display="none"><use y="0" xlink:href="#g190"/><animate attributeName="display" begin="24028ms; anim_last.end+24028ms" dur="1550ms" from="inline" to="inline"/></g><g display="none"><use y="17" xlink:href="#g249"/><use y="34" xlink:href="#g164"/><use y="51" xlink:href="#g250"/><use y="68" xlink:href="#g251"/><use y="85" xlink:href="#g167"/><use y="102" xlink:href="#g168"/><use y="119" xlink:href="#g169"/><use y="136" xlink:href="#g252"/><use y="153" xlink:href="#g253"/><use y="170" xlink:href="#g254"/><use y="187" xlink:href="#g220"/><use y="204" xlink:href="#g255"/><use y="221" xlink:href="#g256"/><use y="238" xlink:href="#g257"/><use y="255" xlink:href="#g182"/><use y="272" xlink:href="#g258"/><use y="289" xlink:href="#g182"/><use y="323" xlink:href="#g259"/><use y="340" xlink:href="#g182"/><use y="357" xlink:href="#g260"/><use y="374" xlink:href="#g261"/><animate attributeName="display" begin="25369ms; anim_last.end+25369ms" dur="209ms" from="inline" to="inline"/></g><g display="none"><use y="391" xlink:href="#g262"/><animate attributeName="display" begin="24203ms; anim_last.end+24203ms" dur="1375ms" from="inline" to="inline"/></g><g display="none"><use y="408" xlink:href="#g207"/><use y="425" xlink:href="#g208"/><animate attributeName="display" begin="25369ms; anim_last.end+25369ms" dur="209ms" from="inline" to="inline"/></g><g display="none"><use y="0" xlink:href="#g71"/><use y="17" xlink:href="#g263"/><use y="34" xlink:href="#g71"/><use y="51" xlink:href="#g181"/><use y="68" xlink:href="#g162"/><use y="85" xlink:href="#g163"/><use y="102" xlink:href="#g164"/><use y="119" xlink:href="#g165"/><use y="136" xlink:href="#g166"/><use y="153" xlink:href="#g167"/><use y="170" xlink:href="#g168"/><use y="187" xlink:href="#g169"/><use y="204" xlink:href="#g264"/><use y="221" xlink:href="#g265"/><use y="238" xlink:href="#g266"/><use y="255" xlink:href="#g173"/><animate attributeName="display" begin="25578ms; anim_last.end+25578ms" dur="967ms" from="inline" to="inline"/></g><g display="none"><use y="0" xlink:href="#g267"/><use y="17" xlink:href="#g268"/><use y="34" xlink:href="#g269"/><use y="51" xlink:href="#g270"/><use y="68" xlink:href="#g271"/><use y="85" xlink:href="#g272"/><use y="102" xlink:href="#g71"/><use y="119" xlink:href="#g154"/><use y="136" xlink:href="#g155"/><use y="153" xlink:href="#g156"/><use y="170" xlink:href="#g157"/><use y="187" xlink:href="#g158"/><use y="204" xlink:href="#g273"/><use y="221" xlink:href="#g274"/><use y="238" xlink:href="#g275"/><use y="255" xlink:href="#g182"/><animate attributeName="display" begin="26545ms; anim_last.end+26545ms" dur="1386ms" from="inline" to="inline"/></g><g display="none"><use y="68" xlink:href="#g162"/><use y="85" xlink:href="#g163"/><use y="102" xlink:href="#g164"/><use y="119" xlink:href="#g165"/><use y="136" xlink:href="#g166"/><use y="153" xlink:href="#g167"/><use y="170" xlink:href="#g168"/><use y="187" xlink:href="#g169"/><use y="204" xlink:href="#g264"/><use y="221" xlink:href="#g265"/><use y="238" xlink:href="#g266"/><use y="255" xlink:href="#g173"/><animate attributeName="display" begin="27931ms; anim_last.end+27931ms" dur="413ms" from="inline" to="inline"/></g><g display="none"><use y="272" xlink:href="#g182"/><use y="289" xlink:href="#g256"/><animate attributeName="display" begin="25578ms; anim_last.end+25578ms" dur="2766ms" from="inline" to="inline"/></g><g display="none"><use y="306" xlink:href="#g182"/><animate attributeName="display" begin="25369ms; anim_last.end+25369ms" dur="2975ms" from="inline" to="inline"/></g><g display="none"><use y="0" xlink:href="#g71"/><use y="17" xlink:href="#g276"/><use y="34" xlink:href="#g71"/><use y="51" xlink:href="#g181"/><animate attributeName="display" begin="27931ms; anim_last.end+27931ms" dur="1701ms" from="inline" to="inline"/></g><g display="none"><use y="68" xlink:href="#g152"/><use y="85" xlink:href="#g153"/><use y="102" xlink:href="#g71"/><use y="119" xlink:href="#g154"/><use y="136" xlink:href="#g155"/><use y="153" xlink:href="#g156"/><use y="170" xlink:href="#g157"/><use y="187" xlink:href="#g158"/><use y="204" xlink:href="#g273"/><use y="221" xlink:href="#g274"/><use y="238" xlink:href="#g275"/><use y="272" xlink:href="#g176"/><use y="289" xlink:href="#g277"/><use y="306" xlink:href="#g173"/><animate attributeName="display" begin="28344ms; anim_last.end+28344ms" dur="1288ms" from="inline" to="inline"/></g><g display="none"><use y="340" xlink:href="#g258"/><use y="391" xlink:href="#g278"/><use y="425" xlink:href="#g185"/><animate attributeName="display" begin="25578ms; anim_last.end+25578ms" dur="4054ms" from="inline" to="inline"/></g><g display="none"><rect class="color4" height="17" width="936" x="0" y="442"/><use y="442" xlink:href="#g279"/><animate attributeName="display" begin="20553ms; anim_last.end+20553ms" dur="9079ms" from="inline" to="inline"/></g><g display="none"><use y="0" xlink:href="#g145"/><use y="17" xlink:href="#g280"/><use y="34" xlink:href="#g45"/><rect class="color7" height="17" width="936" x="0" y="51"/><use y="51" xlink:href="#g146"/><use y="68" xlink:href="#g142"/><use y="85" xlink:href="#g141"/><use y="102" xlink:href="#g138"/><use y="119" xlink:href="#g66"/><use y="136" xlink:href="#g68"/><use y="153" xlink:href="#g64"/><use y="170" xlink:href="#g60"/><use y="187" xlink:href="#g70"/><use y="204" xlink:href="#g255"/><use y="221" xlink:href="#g182"/><use y="238" xlink:href="#g257"/><animate attributeName="display" begin="29632ms; anim_last.end+29632ms" dur="3321ms" from="inline" to="inline"/></g><g display="none"><use y="255" xlink:href="#g182"/><animate attributeName="display" begin="28344ms; anim_last.end+28344ms" dur="4609ms" from="inline" to="inline"/></g><g display="none"><use y="272" xlink:href="#g182"/><use y="289" xlink:href="#g182"/><use y="306" xlink:href="#g182"/><animate attributeName="display" begin="29632ms; anim_last.end+29632ms" dur="3321ms" from="inline" to="inline"/></g><g display="none"><use y="323" xlink:href="#g182"/><animate attributeName="display" begin="25578ms; anim_last.end+25578ms" dur="7375ms" from="inline" to="inline"/></g><g display="none"><use y="340" xlink:href="#g182"/><animate attributeName="display" begin="29632ms; anim_last.end+29632ms" dur="3321ms" from="inline" to="inline"/></g><g display="none"><use y="357" xlink:href="#g182"/><use y="374" xlink:href="#g281"/><animate attributeName="display" begin="25578ms; anim_last.end+25578ms" dur="7375ms" from="inline" to="inline"/></g><g display="none"><use y="391" xlink:href="#g262"/><animate attributeName="display" begin="29632ms; anim_last.end+29632ms" dur="3321ms" from="inline" to="inline"/></g><g display="none"><use y="408" xlink:href="#g71"/><animate attributeName="display" begin="25578ms; anim_last.end+25578ms" dur="7375ms" from="inline" to="inline"/></g><g display="none"><use y="425" xlink:href="#g151"/><rect class="color4" height="17" width="936" x="0" y="442"/><use y="442" xlink:href="#g88"/><animate attributeName="display" begin="29632ms; anim_last.end+29632ms" dur="3321ms" from="inline" to="inline"/></g><g display="none"><rect class="foreground" height="17" width="8" x="0" y="0"/><use y="0" xlink:href="#g94"/><use y="17" xlink:href="#g280"/><use y="34" xlink:href="#g71"/><use y="51" xlink:href="#g71"/><use y="68" xlink:href="#g71"/><use y="85" xlink:href="#g71"/><use y="102" xlink:href="#g71"/><use y="119" xlink:href="#g71"/><use y="136" xlink:href="#g71"/><use y="153" xlink:href="#g71"/><use y="170" xlink:href="#g71"/><use y="187" xlink:href="#g71"/><use y="204" xlink:href="#g255"/><use y="221" xlink:href="#g182"/><use y="238" xlink:href="#g257"/><use y="255" xlink:href="#g182"/><use y="272" xlink:href="#g182"/><use y="289" xlink:href="#g182"/><use y="306" xlink:href="#g182"/><use y="323" xlink:href="#g182"/><use y="340" xlink:href="#g182"/><use y="357" xlink:href="#g182"/><use y="374" xlink:href="#g281"/><use y="391" xlink:href="#g262"/><use y="408" xlink:href="#g71"/><use y="425" xlink:href="#g71"/><use y="442" xlink:href="#g71"/><animate attributeName="display" begin="32953ms; anim_last.end+32953ms" dur="16ms" from="inline" to="inline"/></g><g display="none"><use y="0" xlink:href="#g71"/><use y="34" xlink:href="#g71"/><use y="68" xlink:href="#g71"/><use y="85" xlink:href="#g71"/><use y="102" xlink:href="#g71"/><use y="425" xlink:href="#g71"/><use y="442" xlink:href="#g71"/><animate attributeName="display" begin="32969ms; anim_last.end+32969ms" dur="1ms" from="inline" to="inline"/></g><g display="none"><rect class="foreground" height="17" width="936" x="0" y="0"/><use y="0" xlink:href="#g95"/><rect class="foreground" height="17" width="8" x="0" y="34"/><use y="34" xlink:href="#g94"/><animate attributeName="display" begin="32970ms; anim_last.end+32970ms" dur="3109ms" from="inline" to="inline"/></g><g display="none"><rect class="foreground" height="17" width="8" x="8" y="34"/><use y="34" xlink:href="#g282"/><animate attributeName="display" begin="36079ms; anim_last.end+36079ms" dur="231ms" from="inline" to="inline"/></g><g display="none"><rect class="foreground" height="17" width="8" x="16" y="34"/><use y="34" xlink:href="#g283"/><animate attributeName="display" begin="36310ms; anim_last.end+36310ms" dur="176ms" from="inline" to="inline"/></g><g display="none"><rect class="foreground" height="17" width="8" x="24" y="34"/><use y="34" xlink:href="#g284"/><animate attributeName="display" begin="36486ms; anim_last.end+36486ms" dur="209ms" from="inline" to="inline"/></g><g display="none"><rect class="foreground" height="17" width="8" x="32" y="34"/><use y="34" xlink:href="#g285"/><animate attributeName="display" begin="36695ms; anim_last.end+36695ms" dur="240ms" from="inline" to="inline"/></g><g display="none"><rect class="foreground" height="17" width="8" x="40" y="34"/><use y="34" xlink:href="#g286"/><animate attributeName="display" begin="36935ms; anim_last.end+36935ms" dur="167ms" from="inline" to="inline"/></g><g display="none"><rect class="foreground" height="17" width="8" x="48" y="34"/><use y="34" xlink:href="#g287"/><animate attributeName="display" begin="37102ms; anim_last.end+37102ms" dur="269ms" from="inline" to="inline"/></g><g display="none"><rect class="foreground" height="17" width="8" x="56" y="34"/><use y="34" xlink:href="#g288"/><animate attributeName="display" begin="37371ms; anim_last.end+37371ms" dur="151ms" from="inline" to="inline"/></g><g display="none"><rect class="foreground" height="17" width="8" x="64" y="34"/><use y="34" xlink:href="#g289"/><animate attributeName="display" begin="37522ms; anim_last.end+37522ms" dur="150ms" from="inline" to="inline"/></g><g display="none"><rect class="foreground" height="17" width="936" x="0" y="0"/><use y="0" xlink:href="#g115"/><animate attributeName="display" begin="36079ms; anim_last.end+36079ms" dur="2774ms" from="inline" to="inline"/></g><g display="none"><use y="17" xlink:href="#g280"/><animate attributeName="display" begin="32969ms; anim_last.end+32969ms" dur="5884ms" from="inline" to="inline"/></g><g display="none"><rect class="foreground" height="17" width="8" x="72" y="34"/><use y="34" xlink:href="#g290"/><animate attributeName="display" begin="37672ms; anim_last.end+37672ms" dur="1181ms" from="inline" to="inline"/></g><g display="none"><use y="51" xlink:href="#g71"/><animate attributeName="display" begin="32969ms; anim_last.end+32969ms" dur="5884ms" from="inline" to="inline"/></g><g display="none"><use y="68" xlink:href="#g291"/><use y="85" xlink:href="#g292"/><use y="102" xlink:href="#g293"/><animate attributeName="display" begin="32970ms; anim_last.end+32970ms" dur="5883ms" from="inline" to="inline"/></g><g display="none"><use y="119" xlink:href="#g71"/><use y="136" xlink:href="#g71"/><use y="153" xlink:href="#g71"/><use y="170" xlink:href="#g71"/><use y="187" xlink:href="#g71"/><use y="204" xlink:href="#g255"/><use y="221" xlink:href="#g182"/><use y="238" xlink:href="#g257"/><use y="255" xlink:href="#g182"/><use y="272" xlink:href="#g182"/><use y="289" xlink:href="#g182"/><use y="306" xlink:href="#g182"/><use y="323" xlink:href="#g182"/><use y="340" xlink:href="#g182"/><use y="357" xlink:href="#g182"/><use y="374" xlink:href="#g281"/><use y="391" xlink:href="#g262"/><rect class="foreground" height="17" width="184" x="376" y="408"/><use y="408" xlink:href="#g294"/><animate attributeName="display" begin="32969ms; anim_last.end+32969ms" dur="5884ms" from="inline" to="inline"/></g><g display="none"><rect class="foreground" height="17" width="16" x="0" y="425"/><rect class="foreground" height="17" width="16" x="128" y="425"/><rect class="foreground" height="17" width="16" x="256" y="425"/><rect class="foreground" height="17" width="16" x="384" y="425"/><rect class="foreground" height="17" width="16" x="512" y="425"/><rect class="foreground" height="17" width="16" x="640" y="425"/><rect class="foreground" height="17" width="24" x="768" y="425"/><use y="425" xlink:href="#g295"/><rect class="foreground" height="17" width="16" x="0" y="442"/><rect class="foreground" height="17" width="16" x="128" y="442"/><rect class="foreground" height="17" width="16" x="256" y="442"/><rect class="foreground" height="17" width="16" x="384" y="442"/><rect class="foreground" height="17" width="16" x="512" y="442"/><rect class="foreground" height="17" width="16" x="640" y="442"/><rect class="foreground" height="17" width="24" x="768" y="442"/><use y="442" xlink:href="#g110"/><animate attributeName="display" begin="32970ms; anim_last.end+32970ms" dur="5883ms" from="inline" to="inline"/></g><g display="none"><rect class="foreground" height="17" width="936" x="0" y="0"/><use y="0" xlink:href="#g115"/><use y="17" xlink:href="#g280"/><use y="34" xlink:href="#g296"/><rect class="foreground" height="17" width="8" x="0" y="51"/><use y="51" xlink:href="#g1"/><use y="68" xlink:href="#g71"/><use y="85" xlink:href="#g291"/><use y="102" xlink:href="#g292"/><use y="119" xlink:href="#g293"/><use y="136" xlink:href="#g71"/><use y="153" xlink:href="#g71"/><use y="170" xlink:href="#g71"/><use y="187" xlink:href="#g71"/><use y="204" xlink:href="#g71"/><use y="221" xlink:href="#g255"/><use y="238" xlink:href="#g182"/><use y="255" xlink:href="#g257"/><use y="272" xlink:href="#g182"/><use y="289" xlink:href="#g182"/><use y="306" xlink:href="#g182"/><use y="323" xlink:href="#g182"/><use y="340" xlink:href="#g182"/><use y="357" xlink:href="#g182"/><use y="374" xlink:href="#g182"/><use y="391" xlink:href="#g281"/><rect class="foreground" height="17" width="184" x="376" y="408"/><use y="408" xlink:href="#g294"/><rect class="foreground" height="17" width="16" x="0" y="425"/><rect class="foreground" height="17" width="16" x="128" y="425"/><rect class="foreground" height="17" width="16" x="256" y="425"/><rect class="foreground" height="17" width="16" x="384" y="425"/><rect class="foreground" height="17" width="16" x="512" y="425"/><rect class="foreground" height="17" width="16" x="640" y="425"/><rect class="foreground" height="17" width="24" x="768" y="425"/><use y="425" xlink:href="#g295"/><rect class="foreground" height="17" width="16" x="0" y="442"/><rect class="foreground" height="17" width="16" x="128" y="442"/><rect class="foreground" height="17" width="16" x="256" y="442"/><rect class="foreground" height="17" width="16" x="384" y="442"/><rect class="foreground" height="17" width="16" x="512" y="442"/><rect class="foreground" height="17" width="16" x="640" y="442"/><rect class="foreground" height="17" width="24" x="768" y="442"/><use y="442" xlink:href="#g110"/><animate attributeName="display" begin="38853ms; anim_last.end+38853ms" dur="156ms" from="inline" to="inline"/></g><g display="none"><rect class="foreground" height="17" width="8" x="0" y="68"/><use y="68" xlink:href="#g1"/><animate attributeName="display" begin="39009ms; anim_last.end+39009ms" dur="270ms" from="inline" to="inline"/></g><g display="none"><rect class="foreground" height="17" width="8" x="8" y="68"/><use y="68" xlink:href="#g297"/><animate attributeName="display" begin="39279ms; anim_last.end+39279ms" dur="153ms" from="inline" to="inline"/></g><g display="none"><rect class="foreground" height="17" width="8" x="16" y="68"/><use y="68" xlink:href="#g298"/><animate attributeName="display" begin="39432ms; anim_last.end+39432ms" dur="122ms" from="inline" to="inline"/></g><g display="none"><rect class="foreground" height="17" width="8" x="24" y="68"/><use y="68" xlink:href="#g299"/><animate attributeName="display" begin="39554ms; anim_last.end+39554ms" dur="130ms" from="inline" to="inline"/></g><g display="none"><rect class="foreground" height="17" width="8" x="32" y="68"/><use y="68" xlink:href="#g300"/><animate attributeName="display" begin="39684ms; anim_last.end+39684ms" dur="144ms" from="inline" to="inline"/></g><g display="none"><rect class="foreground" height="17" width="8" x="40" y="68"/><use y="68" xlink:href="#g301"/><animate attributeName="display" begin="39828ms; anim_last.end+39828ms" dur="86ms" from="inline" to="inline"/></g><g display="none"><rect class="foreground" height="17" width="8" x="48" y="68"/><use y="68" xlink:href="#g302"/><animate attributeName="display" begin="39914ms; anim_last.end+39914ms" dur="118ms" from="inline" to="inline"/></g><g display="none"><rect class="foreground" height="17" width="8" x="56" y="68"/><use y="68" xlink:href="#g303"/><animate attributeName="display" begin="40032ms; anim_last.end+40032ms" dur="236ms" from="inline" to="inline"/></g><g display="none"><rect class="foreground" height="17" width="8" x="64" y="68"/><use y="68" xlink:href="#g304"/><animate attributeName="display" begin="40268ms; anim_last.end+40268ms" dur="202ms" from="inline" to="inline"/></g><g display="none"><rect class="foreground" height="17" width="8" x="72" y="68"/><use y="68" xlink:href="#g305"/><animate attributeName="display" begin="40470ms; anim_last.end+40470ms" dur="195ms" from="inline" to="inline"/></g><g display="none"><rect class="foreground" height="17" width="8" x="80" y="68"/><use y="68" xlink:href="#g306"/><animate attributeName="display" begin="40665ms; anim_last.end+40665ms" dur="150ms" from="inline" to="inline"/></g><g display="none"><rect class="foreground" height="17" width="8" x="88" y="68"/><use y="68" xlink:href="#g307"/><animate attributeName="display" begin="40815ms; anim_last.end+40815ms" dur="102ms" from="inline" to="inline"/></g><g display="none"><rect class="foreground" height="17" width="8" x="96" y="68"/><use y="68" xlink:href="#g308"/><animate attributeName="display" begin="40917ms; anim_last.end+40917ms" dur="117ms" from="inline" to="inline"/></g><g display="none"><rect class="foreground" height="17" width="8" x="104" y="68"/><use y="68" xlink:href="#g309"/><animate attributeName="display" begin="41034ms; anim_last.end+41034ms" dur="144ms" from="inline" to="inline"/></g><g display="none"><rect class="foreground" height="17" width="8" x="112" y="68"/><use y="68" xlink:href="#g310"/><animate attributeName="display" begin="41178ms; anim_last.end+41178ms" dur="442ms" from="inline" to="inline"/></g><g display="none"><rect class="foreground" height="17" width="184" x="376" y="408"/><use y="408" xlink:href="#g294"/><rect class="foreground" height="17" width="16" x="0" y="425"/><rect class="foreground" height="17" width="16" x="128" y="425"/><rect class="foreground" height="17" width="16" x="256" y="425"/><rect class="foreground" height="17" width="16" x="384" y="425"/><rect class="foreground" height="17" width="16" x="512" y="425"/><rect class="foreground" height="17" width="16" x="640" y="425"/><rect class="foreground" height="17" width="24" x="768" y="425"/><use y="425" xlink:href="#g295"/><rect class="foreground" height="17" width="16" x="0" y="442"/><rect class="foreground" height="17" width="16" x="128" y="442"/><rect class="foreground" height="17" width="16" x="256" y="442"/><rect class="foreground" height="17" width="16" x="384" y="442"/><rect class="foreground" height="17" width="16" x="512" y="442"/><rect class="foreground" height="17" width="16" x="640" y="442"/><rect class="foreground" height="17" width="24" x="768" y="442"/><use y="442" xlink:href="#g110"/><animate attributeName="display" begin="39009ms; anim_last.end+39009ms" dur="2611ms" from="inline" to="inline"/></g><g display="none"><rect class="foreground" height="17" width="936" x="0" y="408"/><use y="408" xlink:href="#g111"/><rect class="foreground" height="17" width="16" x="0" y="425"/><use y="425" xlink:href="#g112"/><rect class="foreground" height="17" width="16" x="0" y="442"/><rect class="foreground" height="17" width="16" x="128" y="442"/><use y="442" xlink:href="#g113"/><animate attributeName="display" begin="41620ms; anim_last.end+41620ms" dur="789ms" from="inline" to="inline"/></g><g display="none"><rect class="foreground" height="17" width="936" x="0" y="408"/><use y="408" xlink:href="#g114"/><animate attributeName="display" begin="42409ms; anim_last.end+42409ms" dur="60ms" from="inline" to="inline"/></g><g display="none"><rect class="foreground" height="17" width="936" x="0" y="0"/><use y="0" xlink:href="#g115"/><animate attributeName="display" begin="39009ms; anim_last.end+39009ms" dur="3501ms" from="inline" to="inline"/></g><g display="none"><use y="408" xlink:href="#g71"/><animate attributeName="display" begin="42469ms; anim_last.end+42469ms" dur="41ms" from="inline" to="inline"/></g><g display="none"><rect class="foreground" height="17" width="16" x="0" y="425"/><rect class="foreground" height="17" width="24" x="232" y="425"/><rect class="foreground" height="17" width="24" x="464" y="425"/><rect class="foreground" height="17" width="24" x="696" y="425"/><use y="425" xlink:href="#g116"/><rect class="foreground" height="17" width="16" x="0" y="442"/><rect class="foreground" height="17" width="24" x="232" y="442"/><rect class="foreground" height="17" width="24" x="464" y="442"/><rect class="foreground" height="17" width="16" x="696" y="442"/><use y="442" xlink:href="#g117"/><animate attributeName="display" begin="42409ms; anim_last.end+42409ms" dur="101ms" from="inline" to="inline"/></g><g display="none"><rect class="foreground" height="17" width="936" x="0" y="0"/><use y="0" xlink:href="#g95"/><animate attributeName="display" begin="42510ms; anim_last.end+42510ms" dur="165ms" from="inline" to="inline"/></g><g display="none"><use y="17" xlink:href="#g280"/><use y="34" xlink:href="#g296"/><animate attributeName="display" begin="39009ms; anim_last.end+39009ms" dur="3666ms" from="inline" to="inline"/></g><g display="none"><use y="68" xlink:href="#g311"/><animate attributeName="display" begin="41620ms; anim_last.end+41620ms" dur="1055ms" from="inline" to="inline"/></g><g display="none"><use y="85" xlink:href="#g71"/><use y="102" xlink:href="#g291"/><use y="119" xlink:href="#g292"/><use y="136" xlink:href="#g293"/><use y="153" xlink:href="#g71"/><use y="170" xlink:href="#g71"/><use y="187" xlink:href="#g71"/><use y="204" xlink:href="#g71"/><use y="221" xlink:href="#g71"/><use y="238" xlink:href="#g255"/><use y="255" xlink:href="#g182"/><use y="272" xlink:href="#g257"/><use y="289" xlink:href="#g182"/><use y="306" xlink:href="#g182"/><use y="323" xlink:href="#g182"/><use y="340" xlink:href="#g182"/><use y="357" xlink:href="#g182"/><use y="374" xlink:href="#g182"/><use y="391" xlink:href="#g182"/><animate attributeName="display" begin="39009ms; anim_last.end+39009ms" dur="3666ms" from="inline" to="inline"/></g><g display="none"><use y="408" xlink:href="#g71"/><use y="425" xlink:href="#g71"/><rect class="foreground" height="17" width="8" x="0" y="442"/><use y="442" xlink:href="#g94"/><animate attributeName="display" begin="42510ms; anim_last.end+42510ms" dur="165ms" from="inline" to="inline"/></g><g display="none"><use y="68" xlink:href="#g312"/><use y="85" xlink:href="#g313"/><use y="102" xlink:href="#g71"/><animate attributeName="display" begin="42675ms; anim_last.end+42675ms" dur="1350ms" from="inline" to="inline"/></g><g display="none"><use y="0" xlink:href="#g71"/><use y="17" xlink:href="#g314"/><use y="34" xlink:href="#g71"/><use y="51" xlink:href="#g315"/><animate attributeName="display" begin="42675ms; anim_last.end+42675ms" dur="5423ms" from="inline" to="inline"/></g><g display="none"><use y="68" xlink:href="#g316"/><use y="85" xlink:href="#g317"/><use y="102" xlink:href="#g220"/><animate attributeName="display" begin="44025ms; anim_last.end+44025ms" dur="4073ms" from="inline" to="inline"/></g><g display="none"><use y="119" xlink:href="#g71"/><use y="136" xlink:href="#g71"/><use y="153" xlink:href="#g71"/><use y="170" xlink:href="#g71"/><use y="187" xlink:href="#g71"/><use y="204" xlink:href="#g71"/><use y="221" xlink:href="#g71"/><use y="238" xlink:href="#g255"/><use y="255" xlink:href="#g182"/><use y="272" xlink:href="#g257"/><use y="289" xlink:href="#g182"/><use y="306" xlink:href="#g182"/><use y="323" xlink:href="#g182"/><use y="340" xlink:href="#g182"/><use y="357" xlink:href="#g182"/><use y="374" xlink:href="#g182"/><use y="391" xlink:href="#g182"/><use y="408" xlink:href="#g71"/><use y="425" xlink:href="#g71"/><rect class="color4" height="17" width="936" x="0" y="442"/><use y="442" xlink:href="#g279"/><animate attributeName="display" begin="42675ms; anim_last.end+42675ms" dur="5423ms" from="inline" to="inline"/></g><g display="none"><rect class="foreground" height="17" width="8" x="0" y="0"/><use y="0" xlink:href="#g94"/><use y="17" xlink:href="#g280"/><use y="34" xlink:href="#g71"/><use y="51" xlink:href="#g318"/><use y="68" xlink:href="#g319"/><use y="85" xlink:href="#g71"/><use y="102" xlink:href="#g71"/><use y="119" xlink:href="#g71"/><use y="136" xlink:href="#g71"/><use y="153" xlink:href="#g71"/><use y="170" xlink:href="#g71"/><use y="187" xlink:href="#g71"/><use y="204" xlink:href="#g71"/><use y="221" xlink:href="#g71"/><use y="238" xlink:href="#g255"/><use y="255" xlink:href="#g182"/><use y="272" xlink:href="#g257"/><use y="289" xlink:href="#g182"/><use y="306" xlink:href="#g182"/><use y="323" xlink:href="#g182"/><use y="340" xlink:href="#g182"/><use y="357" xlink:href="#g182"/><use y="374" xlink:href="#g182"/><use y="391" xlink:href="#g182"/><use y="408" xlink:href="#g71"/><use y="425" xlink:href="#g71"/><use y="442" xlink:href="#g71"/><animate attributeName="display" begin="48098ms; anim_last.end+48098ms" dur="17ms" from="inline" to="inline"/></g><g display="none"><use y="34" xlink:href="#g71"/><use y="68" xlink:href="#g319"/><use y="85" xlink:href="#g71"/><use y="442" xlink:href="#g71"/><animate attributeName="display" begin="48115ms; anim_last.end+48115ms" dur="1ms" from="inline" to="inline"/></g><g display="none"><rect class="foreground" height="17" width="936" x="0" y="0"/><use y="0" xlink:href="#g95"/><animate attributeName="display" begin="48115ms; anim_last.end+48115ms" dur="1401ms" from="inline" to="inline"/></g><g display="none"><rect class="foreground" height="17" width="8" x="0" y="34"/><use y="34" xlink:href="#g94"/><animate attributeName="display" begin="48116ms; anim_last.end+48116ms" dur="1400ms" from="inline" to="inline"/></g><g display="none"><rect class="foreground" height="17" width="8" x="8" y="34"/><use y="34" xlink:href="#g282"/><animate attributeName="display" begin="49516ms; anim_last.end+49516ms" dur="183ms" from="inline" to="inline"/></g><g display="none"><rect class="foreground" height="17" width="8" x="16" y="34"/><use y="34" xlink:href="#g320"/><animate attributeName="display" begin="49699ms; anim_last.end+49699ms" dur="82ms" from="inline" to="inline"/></g><g display="none"><rect class="foreground" height="17" width="8" x="24" y="34"/><use y="34" xlink:href="#g321"/><animate attributeName="display" begin="49781ms; anim_last.end+49781ms" dur="121ms" from="inline" to="inline"/></g><g display="none"><rect class="foreground" height="17" width="8" x="32" y="34"/><use y="34" xlink:href="#g322"/><animate attributeName="display" begin="49902ms; anim_last.end+49902ms" dur="263ms" from="inline" to="inline"/></g><g display="none"><rect class="foreground" height="17" width="8" x="40" y="34"/><use y="34" xlink:href="#g323"/><animate attributeName="display" begin="50165ms; anim_last.end+50165ms" dur="148ms" from="inline" to="inline"/></g><g display="none"><rect class="foreground" height="17" width="8" x="48" y="34"/><use y="34" xlink:href="#g324"/><animate attributeName="display" begin="50313ms; anim_last.end+50313ms" dur="140ms" from="inline" to="inline"/></g><g display="none"><rect class="foreground" height="17" width="8" x="56" y="34"/><use y="34" xlink:href="#g325"/><animate attributeName="display" begin="50453ms; anim_last.end+50453ms" dur="154ms" from="inline" to="inline"/></g><g display="none"><rect class="foreground" height="17" width="8" x="64" y="34"/><use y="34" xlink:href="#g326"/><animate attributeName="display" begin="50607ms; anim_last.end+50607ms" dur="604ms" from="inline" to="inline"/></g><g display="none"><rect class="foreground" height="17" width="8" x="56" y="34"/><use y="34" xlink:href="#g325"/><animate attributeName="display" begin="51211ms; anim_last.end+51211ms" dur="147ms" from="inline" to="inline"/></g><g display="none"><rect class="foreground" height="17" width="8" x="48" y="34"/><use y="34" xlink:href="#g324"/><animate attributeName="display" begin="51358ms; anim_last.end+51358ms" dur="127ms" from="inline" to="inline"/></g><g display="none"><rect class="foreground" height="17" width="8" x="40" y="34"/><use y="34" xlink:href="#g323"/><animate attributeName="display" begin="51485ms; anim_last.end+51485ms" dur="144ms" from="inline" to="inline"/></g><g display="none"><rect class="foreground" height="17" width="8" x="32" y="34"/><use y="34" xlink:href="#g322"/><animate attributeName="display" begin="51629ms; anim_last.end+51629ms" dur="694ms" from="inline" to="inline"/></g><g display="none"><rect class="foreground" height="17" width="8" x="40" y="34"/><use y="34" xlink:href="#g327"/><animate attributeName="display" begin="52323ms; anim_last.end+52323ms" dur="73ms" from="inline" to="inline"/></g><g display="none"><rect class="foreground" height="17" width="8" x="48" y="34"/><use y="34" xlink:href="#g328"/><animate attributeName="display" begin="52396ms; anim_last.end+52396ms" dur="179ms" from="inline" to="inline"/></g><g display="none"><rect class="foreground" height="17" width="8" x="56" y="34"/><use y="34" xlink:href="#g329"/><animate attributeName="display" begin="52575ms; anim_last.end+52575ms" dur="89ms" from="inline" to="inline"/></g><g display="none"><rect class="foreground" height="17" width="8" x="64" y="34"/><use y="34" xlink:href="#g330"/><animate attributeName="display" begin="52664ms; anim_last.end+52664ms" dur="189ms" from="inline" to="inline"/></g><g display="none"><rect class="foreground" height="17" width="8" x="72" y="34"/><use y="34" xlink:href="#g331"/><animate attributeName="display" begin="52853ms; anim_last.end+52853ms" dur="60ms" from="inline" to="inline"/></g><g display="none"><rect class="foreground" height="17" width="8" x="80" y="34"/><use y="34" xlink:href="#g332"/><animate attributeName="display" begin="52913ms; anim_last.end+52913ms" dur="205ms" from="inline" to="inline"/></g><g display="none"><rect class="foreground" height="17" width="8" x="88" y="34"/><use y="34" xlink:href="#g333"/><animate attributeName="display" begin="53118ms; anim_last.end+53118ms" dur="162ms" from="inline" to="inline"/></g><g display="none"><rect class="foreground" height="17" width="8" x="96" y="34"/><use y="34" xlink:href="#g334"/><animate attributeName="display" begin="53280ms; anim_last.end+53280ms" dur="70ms" from="inline" to="inline"/></g><g display="none"><rect class="foreground" height="17" width="8" x="104" y="34"/><use y="34" xlink:href="#g335"/><animate attributeName="display" begin="53350ms; anim_last.end+53350ms" dur="147ms" from="inline" to="inline"/></g><g display="none"><rect class="foreground" height="17" width="8" x="112" y="34"/><use y="34" xlink:href="#g336"/><animate attributeName="display" begin="53497ms; anim_last.end+53497ms" dur="93ms" from="inline" to="inline"/></g><g display="none"><rect class="foreground" height="17" width="8" x="120" y="34"/><use y="34" xlink:href="#g337"/><animate attributeName="display" begin="53590ms; anim_last.end+53590ms" dur="1029ms" from="inline" to="inline"/></g><g display="none"><rect class="foreground" height="17" width="184" x="376" y="408"/><use y="408" xlink:href="#g338"/><rect class="foreground" height="17" width="16" x="0" y="425"/><rect class="foreground" height="17" width="16" x="128" y="425"/><rect class="foreground" height="17" width="16" x="256" y="425"/><rect class="foreground" height="17" width="16" x="384" y="425"/><rect class="foreground" height="17" width="16" x="512" y="425"/><rect class="foreground" height="17" width="16" x="640" y="425"/><rect class="foreground" height="17" width="24" x="768" y="425"/><use y="425" xlink:href="#g295"/><animate attributeName="display" begin="48115ms; anim_last.end+48115ms" dur="6504ms" from="inline" to="inline"/></g><g display="none"><rect class="foreground" height="17" width="16" x="0" y="442"/><rect class="foreground" height="17" width="16" x="128" y="442"/><rect class="foreground" height="17" width="16" x="256" y="442"/><rect class="foreground" height="17" width="16" x="384" y="442"/><rect class="foreground" height="17" width="16" x="512" y="442"/><rect class="foreground" height="17" width="16" x="640" y="442"/><rect class="foreground" height="17" width="24" x="768" y="442"/><use y="442" xlink:href="#g110"/><animate attributeName="display" begin="48116ms; anim_last.end+48116ms" dur="6503ms" from="inline" to="inline"/></g><g display="none"><rect class="foreground" height="17" width="936" x="0" y="408"/><use y="408" xlink:href="#g111"/><rect class="foreground" height="17" width="16" x="0" y="425"/><use y="425" xlink:href="#g112"/><rect class="foreground" height="17" width="16" x="0" y="442"/><rect class="foreground" height="17" width="16" x="128" y="442"/><use y="442" xlink:href="#g113"/><animate attributeName="display" begin="54619ms; anim_last.end+54619ms" dur="312ms" from="inline" to="inline"/></g><g display="none"><rect class="foreground" height="17" width="936" x="0" y="408"/><use y="408" xlink:href="#g114"/><animate attributeName="display" begin="54931ms; anim_last.end+54931ms" dur="80ms" from="inline" to="inline"/></g><g display="none"><rect class="foreground" height="17" width="936" x="0" y="0"/><use y="0" xlink:href="#g115"/><animate attributeName="display" begin="49516ms; anim_last.end+49516ms" dur="5526ms" from="inline" to="inline"/></g><g display="none"><use y="408" xlink:href="#g71"/><animate attributeName="display" begin="55011ms; anim_last.end+55011ms" dur="31ms" from="inline" to="inline"/></g><g display="none"><rect class="foreground" height="17" width="16" x="0" y="425"/><rect class="foreground" height="17" width="24" x="232" y="425"/><rect class="foreground" height="17" width="24" x="464" y="425"/><rect class="foreground" height="17" width="24" x="696" y="425"/><use y="425" xlink:href="#g116"/><rect class="foreground" height="17" width="16" x="0" y="442"/><rect class="foreground" height="17" width="24" x="232" y="442"/><rect class="foreground" height="17" width="24" x="464" y="442"/><rect class="foreground" height="17" width="16" x="696" y="442"/><use y="442" xlink:href="#g117"/><animate attributeName="display" begin="54931ms; anim_last.end+54931ms" dur="111ms" from="inline" to="inline"/></g><g display="none"><rect class="foreground" height="17" width="936" x="0" y="0"/><use y="0" xlink:href="#g95"/><animate attributeName="display" begin="55042ms; anim_last.end+55042ms" dur="5ms" from="inline" to="inline"/></g><g display="none"><use y="17" xlink:href="#g280"/><animate attributeName="display" begin="48115ms; anim_last.end+48115ms" dur="6932ms" from="inline" to="inline"/></g><g display="none"><use y="34" xlink:href="#g339"/><animate attributeName="display" begin="54619ms; anim_last.end+54619ms" dur="428ms" from="inline" to="inline"/></g><g display="none"><use y="51" xlink:href="#g318"/><animate attributeName="display" begin="48115ms; anim_last.end+48115ms" dur="6932ms" from="inline" to="inline"/></g><g display="none"><use y="68" xlink:href="#g340"/><use y="85" xlink:href="#g341"/><animate attributeName="display" begin="48116ms; anim_last.end+48116ms" dur="6931ms" from="inline" to="inline"/></g><g display="none"><use y="102" xlink:href="#g71"/><use y="119" xlink:href="#g71"/><use y="136" xlink:href="#g71"/><use y="153" xlink:href="#g71"/><use y="170" xlink:href="#g71"/><use y="187" xlink:href="#g71"/><use y="204" xlink:href="#g71"/><use y="221" xlink:href="#g71"/><use y="238" xlink:href="#g255"/><use y="255" xlink:href="#g182"/><use y="272" xlink:href="#g257"/><use y="289" xlink:href="#g182"/><use y="306" xlink:href="#g182"/><use y="323" xlink:href="#g182"/><use y="340" xlink:href="#g182"/><use y="357" xlink:href="#g182"/><use y="374" xlink:href="#g182"/><use y="391" xlink:href="#g182"/><animate attributeName="display" begin="48115ms; anim_last.end+48115ms" dur="6932ms" from="inline" to="inline"/></g><g display="none"><use y="408" xlink:href="#g71"/><use y="425" xlink:href="#g71"/><rect class="foreground" height="17" width="8" x="0" y="442"/><use y="442" xlink:href="#g94"/><animate attributeName="display" begin="55042ms; anim_last.end+55042ms" dur="5ms" from="inline" to="inline"/></g><g display="none"><use y="68" xlink:href="#g316"/><use y="85" xlink:href="#g317"/><use y="102" xlink:href="#g220"/><use y="119" xlink:href="#g71"/><use y="136" xlink:href="#g342"/><use y="153" xlink:href="#g71"/><use y="170" xlink:href="#g343"/><use y="187" xlink:href="#g71"/><animate attributeName="display" begin="55047ms; anim_last.end+55047ms" dur="1265ms" from="inline" to="inline"/></g><g display="none"><use y="0" xlink:href="#g71"/><use y="17" xlink:href="#g314"/><use y="34" xlink:href="#g71"/><use y="51" xlink:href="#g315"/><animate attributeName="display" begin="55047ms; anim_last.end+55047ms" dur="2958ms" from="inline" to="inline"/></g><g display="none"><use y="68" xlink:href="#g319"/><use y="85" xlink:href="#g313"/><use y="102" xlink:href="#g71"/><use y="119" xlink:href="#g190"/><use y="136" xlink:href="#g344"/><use y="153" xlink:href="#g164"/><use y="170" xlink:href="#g345"/><use y="187" xlink:href="#g220"/><animate attributeName="display" begin="56312ms; anim_last.end+56312ms" dur="1693ms" from="inline" to="inline"/></g><g display="none"><use y="204" xlink:href="#g71"/><use y="221" xlink:href="#g71"/><use y="238" xlink:href="#g255"/><use y="255" xlink:href="#g182"/><use y="272" xlink:href="#g257"/><use y="289" xlink:href="#g182"/><use y="306" xlink:href="#g182"/><use y="323" xlink:href="#g182"/><use y="340" xlink:href="#g182"/><use y="357" xlink:href="#g182"/><use y="374" xlink:href="#g182"/><use y="391" xlink:href="#g182"/><use y="408" xlink:href="#g71"/><use y="425" xlink:href="#g71"/><rect class="color4" height="17" width="936" x="0" y="442"/><use y="442" xlink:href="#g279"/><animate attributeName="display" begin="55047ms; anim_last.end+55047ms" dur="2958ms" from="inline" to="inline"/></g><g display="none"><rect class="foreground" height="17" width="8" x="0" y="0"/><use y="0" xlink:href="#g94"/><use y="17" xlink:href="#g280"/><use y="34" xlink:href="#g71"/><use y="51" xlink:href="#g318"/><use y="68" xlink:href="#g319"/><use y="85" xlink:href="#g71"/><use y="102" xlink:href="#g71"/><use y="119" xlink:href="#g71"/><use y="136" xlink:href="#g71"/><use y="153" xlink:href="#g71"/><use y="170" xlink:href="#g71"/><use y="187" xlink:href="#g71"/><use y="204" xlink:href="#g71"/><use y="221" xlink:href="#g71"/><use y="238" xlink:href="#g255"/><use y="255" xlink:href="#g182"/><use y="272" xlink:href="#g257"/><use y="289" xlink:href="#g182"/><use y="306" xlink:href="#g182"/><use y="323" xlink:href="#g182"/><use y="340" xlink:href="#g182"/><use y="357" xlink:href="#g182"/><use y="374" xlink:href="#g182"/><use y="391" xlink:href="#g182"/><use y="408" xlink:href="#g71"/><use y="425" xlink:href="#g71"/><use y="442" xlink:href="#g71"/><animate attributeName="display" begin="58005ms; anim_last.end+58005ms" dur="16ms" from="inline" to="inline"/></g><g display="none"><use y="34" xlink:href="#g71"/><use y="68" xlink:href="#g319"/><use y="85" xlink:href="#g71"/><rect class="foreground" height="17" width="16" x="0" y="425"/><use y="425" xlink:href="#g346"/><use y="442" xlink:href="#g71"/><animate attributeName="display" begin="58021ms; anim_last.end+58021ms" dur="1ms" from="inline" to="inline"/></g><g display="none"><rect class="foreground" height="17" width="8" x="0" y="34"/><use y="34" xlink:href="#g347"/><animate attributeName="display" begin="58022ms; anim_last.end+58022ms" dur="2266ms" from="inline" to="inline"/></g><g display="none"><rect class="foreground" height="17" width="8" x="8" y="34"/><use y="34" xlink:href="#g348"/><animate attributeName="display" begin="60288ms; anim_last.end+60288ms" dur="194ms" from="inline" to="inline"/></g><g display="none"><rect class="foreground" height="17" width="936" x="0" y="0"/><use y="0" xlink:href="#g95"/><animate attributeName="display" begin="58021ms; anim_last.end+58021ms" dur="2770ms" from="inline" to="inline"/></g><g display="none"><rect class="foreground" height="17" width="8" x="16" y="34"/><use y="34" xlink:href="#g349"/><animate attributeName="display" begin="60482ms; anim_last.end+60482ms" dur="309ms" from="inline" to="inline"/></g><g display="none"><rect class="foreground" height="17" width="8" x="16" y="34"/><use y="34" xlink:href="#g350"/><animate attributeName="display" begin="60791ms; anim_last.end+60791ms" dur="158ms" from="inline" to="inline"/></g><g display="none"><rect class="foreground" height="17" width="8" x="16" y="34"/><use y="34" xlink:href="#g351"/><animate attributeName="display" begin="60949ms; anim_last.end+60949ms" dur="145ms" from="inline" to="inline"/></g><g display="none"><rect class="foreground" height="17" width="8" x="16" y="34"/><use y="34" xlink:href="#g352"/><animate attributeName="display" begin="61094ms; anim_last.end+61094ms" dur="143ms" from="inline" to="inline"/></g><g display="none"><rect class="foreground" height="17" width="8" x="16" y="34"/><use y="34" xlink:href="#g353"/><animate attributeName="display" begin="61237ms; anim_last.end+61237ms" dur="158ms" from="inline" to="inline"/></g><g display="none"><rect class="foreground" height="17" width="8" x="16" y="34"/><use y="34" xlink:href="#g354"/><animate attributeName="display" begin="61395ms; anim_last.end+61395ms" dur="282ms" from="inline" to="inline"/></g><g display="none"><rect class="foreground" height="17" width="8" x="24" y="34"/><use y="34" xlink:href="#g355"/><animate attributeName="display" begin="61677ms; anim_last.end+61677ms" dur="459ms" from="inline" to="inline"/></g><g display="none"><rect class="foreground" height="17" width="8" x="32" y="34"/><use y="34" xlink:href="#g356"/><animate attributeName="display" begin="62136ms; anim_last.end+62136ms" dur="218ms" from="inline" to="inline"/></g><g display="none"><rect class="foreground" height="17" width="8" x="40" y="34"/><use y="34" xlink:href="#g357"/><animate attributeName="display" begin="62354ms; anim_last.end+62354ms" dur="234ms" from="inline" to="inline"/></g><g display="none"><rect class="foreground" height="17" width="8" x="48" y="34"/><use y="34" xlink:href="#g358"/><animate attributeName="display" begin="62588ms; anim_last.end+62588ms" dur="86ms" from="inline" to="inline"/></g><g display="none"><rect class="foreground" height="17" width="8" x="56" y="34"/><use y="34" xlink:href="#g359"/><animate attributeName="display" begin="62674ms; anim_last.end+62674ms" dur="235ms" from="inline" to="inline"/></g><g display="none"><rect class="foreground" height="17" width="8" x="64" y="34"/><use y="34" xlink:href="#g360"/><animate attributeName="display" begin="62909ms; anim_last.end+62909ms" dur="307ms" from="inline" to="inline"/></g><g display="none"><rect class="foreground" height="17" width="8" x="72" y="34"/><use y="34" xlink:href="#g361"/><animate attributeName="display" begin="63216ms; anim_last.end+63216ms" dur="2232ms" from="inline" to="inline"/></g><g display="none"><rect class="foreground" height="17" width="8" x="136" y="34"/><use y="34" xlink:href="#g362"/><animate attributeName="display" begin="65448ms; anim_last.end+65448ms" dur="724ms" from="inline" to="inline"/></g><g display="none"><rect class="foreground" height="17" width="8" x="144" y="34"/><use y="34" xlink:href="#g363"/><animate attributeName="display" begin="66172ms; anim_last.end+66172ms" dur="235ms" from="inline" to="inline"/></g><g display="none"><rect class="foreground" height="17" width="8" x="152" y="34"/><use y="34" xlink:href="#g364"/><animate attributeName="display" begin="66407ms; anim_last.end+66407ms" dur="949ms" from="inline" to="inline"/></g><g display="none"><rect class="foreground" height="17" width="184" x="376" y="408"/><use y="408" xlink:href="#g338"/><animate attributeName="display" begin="58021ms; anim_last.end+58021ms" dur="9335ms" from="inline" to="inline"/></g><g display="none"><rect class="foreground" height="17" width="16" x="0" y="425"/><rect class="foreground" height="17" width="16" x="128" y="425"/><rect class="foreground" height="17" width="16" x="256" y="425"/><rect class="foreground" height="17" width="16" x="384" y="425"/><rect class="foreground" height="17" width="16" x="512" y="425"/><rect class="foreground" height="17" width="16" x="640" y="425"/><rect class="foreground" height="17" width="24" x="768" y="425"/><use y="425" xlink:href="#g295"/><rect class="foreground" height="17" width="16" x="0" y="442"/><rect class="foreground" height="17" width="16" x="128" y="442"/><rect class="foreground" height="17" width="16" x="256" y="442"/><rect class="foreground" height="17" width="16" x="384" y="442"/><rect class="foreground" height="17" width="16" x="512" y="442"/><rect class="foreground" height="17" width="16" x="640" y="442"/><rect class="foreground" height="17" width="24" x="768" y="442"/><use y="442" xlink:href="#g110"/><animate attributeName="display" begin="58022ms; anim_last.end+58022ms" dur="9334ms" from="inline" to="inline"/></g><g display="none"><rect class="foreground" height="17" width="936" x="0" y="408"/><use y="408" xlink:href="#g111"/><rect class="foreground" height="17" width="16" x="0" y="425"/><use y="425" xlink:href="#g112"/><rect class="foreground" height="17" width="16" x="0" y="442"/><rect class="foreground" height="17" width="16" x="128" y="442"/><use y="442" xlink:href="#g113"/><animate attributeName="display" begin="67356ms; anim_last.end+67356ms" dur="392ms" from="inline" to="inline"/></g><g display="none"><rect class="foreground" height="17" width="936" x="0" y="408"/><use y="408" xlink:href="#g114"/><animate attributeName="display" begin="67748ms; anim_last.end+67748ms" dur="94ms" from="inline" to="inline"/></g><g display="none"><rect class="foreground" height="17" width="936" x="0" y="0"/><use y="0" xlink:href="#g115"/><animate attributeName="display" begin="60791ms; anim_last.end+60791ms" dur="7090ms" from="inline" to="inline"/></g><g display="none"><use y="408" xlink:href="#g71"/><animate attributeName="display" begin="67842ms; anim_last.end+67842ms" dur="39ms" from="inline" to="inline"/></g><g display="none"><rect class="foreground" height="17" width="16" x="0" y="425"/><rect class="foreground" height="17" width="24" x="232" y="425"/><rect class="foreground" height="17" width="24" x="464" y="425"/><rect class="foreground" height="17" width="24" x="696" y="425"/><use y="425" xlink:href="#g116"/><rect class="foreground" height="17" width="16" x="0" y="442"/><rect class="foreground" height="17" width="24" x="232" y="442"/><rect class="foreground" height="17" width="24" x="464" y="442"/><rect class="foreground" height="17" width="16" x="696" y="442"/><use y="442" xlink:href="#g117"/><animate attributeName="display" begin="67748ms; anim_last.end+67748ms" dur="133ms" from="inline" to="inline"/></g><g display="none"><rect class="foreground" height="17" width="936" x="0" y="0"/><use y="0" xlink:href="#g95"/><animate attributeName="display" begin="67881ms; anim_last.end+67881ms" dur="41ms" from="inline" to="inline"/></g><g display="none"><use y="17" xlink:href="#g280"/><animate attributeName="display" begin="58021ms; anim_last.end+58021ms" dur="9901ms" from="inline" to="inline"/></g><g display="none"><use y="34" xlink:href="#g365"/><animate attributeName="display" begin="67356ms; anim_last.end+67356ms" dur="566ms" from="inline" to="inline"/></g><g display="none"><use y="51" xlink:href="#g318"/><animate attributeName="display" begin="58021ms; anim_last.end+58021ms" dur="9901ms" from="inline" to="inline"/></g><g display="none"><use y="68" xlink:href="#g340"/><use y="85" xlink:href="#g341"/><animate attributeName="display" begin="58022ms; anim_last.end+58022ms" dur="9900ms" from="inline" to="inline"/></g><g display="none"><use y="102" xlink:href="#g71"/><use y="119" xlink:href="#g71"/><use y="136" xlink:href="#g71"/><use y="153" xlink:href="#g71"/><use y="170" xlink:href="#g71"/><use y="187" xlink:href="#g71"/><use y="204" xlink:href="#g71"/><use y="221" xlink:href="#g71"/><use y="238" xlink:href="#g255"/><use y="255" xlink:href="#g182"/><use y="272" xlink:href="#g257"/><use y="289" xlink:href="#g182"/><use y="306" xlink:href="#g182"/><use y="323" xlink:href="#g182"/><use y="340" xlink:href="#g182"/><use y="357" xlink:href="#g182"/><use y="374" xlink:href="#g182"/><use y="391" xlink:href="#g182"/><animate attributeName="display" begin="58021ms; anim_last.end+58021ms" dur="9901ms" from="inline" to="inline"/></g><g display="none"><use y="408" xlink:href="#g71"/><use y="425" xlink:href="#g71"/><rect class="foreground" height="17" width="8" x="0" y="442"/><use y="442" xlink:href="#g94"/><animate attributeName="display" begin="67881ms; anim_last.end+67881ms" dur="41ms" from="inline" to="inline"/></g><g display="none"><use y="0" xlink:href="#g71"/><use y="17" xlink:href="#g314"/><use y="34" xlink:href="#g71"/><use y="51" xlink:href="#g315"/><use y="68" xlink:href="#g319"/><use y="119" xlink:href="#g190"/><use y="136" xlink:href="#g366"/><use y="153" xlink:href="#g164"/><use y="170" xlink:href="#g367"/><use y="187" xlink:href="#g220"/><animate attributeName="display" begin="67922ms; anim_last.end+67922ms" dur="2373ms" from="inline" to="inline"/></g><g display="none"><use y="0" xlink:href="#g267"/><use y="17" xlink:href="#g368"/><use y="34" xlink:href="#g269"/><use y="51" xlink:href="#g369"/><use y="68" xlink:href="#g370"/><animate attributeName="display" begin="70295ms; anim_last.end+70295ms" dur="1748ms" from="inline" to="inline"/></g><g display="none"><use y="85" xlink:href="#g313"/><animate attributeName="display" begin="67922ms; anim_last.end+67922ms" dur="4121ms" from="inline" to="inline"/></g><g display="none"><use y="119" xlink:href="#g71"/><use y="136" xlink:href="#g371"/><use y="153" xlink:href="#g71"/><use y="170" xlink:href="#g372"/><use y="187" xlink:href="#g71"/><animate attributeName="display" begin="70295ms; anim_last.end+70295ms" dur="1748ms" from="inline" to="inline"/></g><g display="none"><use y="221" xlink:href="#g71"/><use y="255" xlink:href="#g182"/><use y="289" xlink:href="#g182"/><use y="323" xlink:href="#g182"/><rect class="color4" height="17" width="936" x="0" y="442"/><use y="442" xlink:href="#g279"/><animate attributeName="display" begin="67922ms; anim_last.end+67922ms" dur="4121ms" from="inline" to="inline"/></g><g display="none"><use y="0" xlink:href="#g373"/><use y="17" xlink:href="#g374"/><use y="34" xlink:href="#g375"/><use y="51" xlink:href="#g376"/><use y="68" xlink:href="#g377"/><animate attributeName="display" begin="72043ms; anim_last.end+72043ms" dur="1012ms" from="inline" to="inline"/></g><g display="none"><use y="51" xlink:href="#g378"/><animate attributeName="display" begin="73055ms; anim_last.end+73055ms" dur="259ms" from="inline" to="inline"/></g><g display="none"><use y="34" xlink:href="#g373"/><animate attributeName="display" begin="73055ms; anim_last.end+73055ms" dur="668ms" from="inline" to="inline"/></g><g display="none"><use y="51" xlink:href="#g379"/><animate attributeName="display" begin="73314ms; anim_last.end+73314ms" dur="409ms" from="inline" to="inline"/></g><g display="none"><use y="68" xlink:href="#g380"/><animate attributeName="display" begin="73055ms; anim_last.end+73055ms" dur="668ms" from="inline" to="inline"/></g><g display="none"><use y="85" xlink:href="#g381"/><animate attributeName="display" begin="72043ms; anim_last.end+72043ms" dur="1680ms" from="inline" to="inline"/></g><g display="none"><use y="102" xlink:href="#g71"/><animate attributeName="display" begin="67922ms; anim_last.end+67922ms" dur="5801ms" from="inline" to="inline"/></g><g display="none"><use y="68" xlink:href="#g382"/><use y="85" xlink:href="#g383"/><use y="102" xlink:href="#g375"/><animate attributeName="display" begin="73723ms; anim_last.end+73723ms" dur="177ms" from="inline" to="inline"/></g><g display="none"><use y="119" xlink:href="#g384"/><use y="136" xlink:href="#g71"/><animate attributeName="display" begin="72043ms; anim_last.end+72043ms" dur="1857ms" from="inline" to="inline"/></g><g display="none"><use y="102" xlink:href="#g373"/><use y="119" xlink:href="#g385"/><use y="136" xlink:href="#g375"/><animate attributeName="display" begin="73900ms; anim_last.end+73900ms" dur="140ms" from="inline" to="inline"/></g><g display="none"><use y="153" xlink:href="#g386"/><use y="170" xlink:href="#g71"/><animate attributeName="display" begin="72043ms; anim_last.end+72043ms" dur="1997ms" from="inline" to="inline"/></g><g display="none"><use y="153" xlink:href="#g387"/><animate attributeName="display" begin="74040ms; anim_last.end+74040ms" dur="990ms" from="inline" to="inline"/></g><g display="none"><use y="0" xlink:href="#g71"/><use y="17" xlink:href="#g388"/><animate attributeName="display" begin="73055ms; anim_last.end+73055ms" dur="4113ms" from="inline" to="inline"/></g><g display="none"><use y="34" xlink:href="#g71"/><use y="51" xlink:href="#g389"/><animate attributeName="display" begin="73723ms; anim_last.end+73723ms" dur="3445ms" from="inline" to="inline"/></g><g display="none"><use y="68" xlink:href="#g377"/><use y="85" xlink:href="#g381"/><animate attributeName="display" begin="73900ms; anim_last.end+73900ms" dur="3268ms" from="inline" to="inline"/></g><g display="none"><use y="119" xlink:href="#g384"/><use y="136" xlink:href="#g373"/><animate attributeName="display" begin="74040ms; anim_last.end+74040ms" dur="3128ms" from="inline" to="inline"/></g><g display="none"><use y="153" xlink:href="#g390"/><animate attributeName="display" begin="75030ms; anim_last.end+75030ms" dur="2138ms" from="inline" to="inline"/></g><g display="none"><use y="170" xlink:href="#g375"/><animate attributeName="display" begin="74040ms; anim_last.end+74040ms" dur="3128ms" from="inline" to="inline"/></g><g display="none"><use y="187" xlink:href="#g391"/><use y="221" xlink:href="#g392"/><use y="255" xlink:href="#g393"/><use y="289" xlink:href="#g394"/><use y="323" xlink:href="#g395"/><rect class="color4" height="17" width="936" x="0" y="442"/><use y="442" xlink:href="#g396"/><animate attributeName="display" begin="72043ms; anim_last.end+72043ms" dur="5125ms" from="inline" to="inline"/></g><g display="none"><use y="0" xlink:href="#g267"/><use y="17" xlink:href="#g368"/><use y="34" xlink:href="#g269"/><use y="51" xlink:href="#g397"/><use y="68" xlink:href="#g398"/><use y="85" xlink:href="#g399"/><animate attributeName="display" begin="77168ms; anim_last.end+77168ms" dur="976ms" from="inline" to="inline"/></g><g display="none"><use y="102" xlink:href="#g71"/><animate attributeName="display" begin="74040ms; anim_last.end+74040ms" dur="4104ms" from="inline" to="inline"/></g><g display="none"><use y="68" xlink:href="#g400"/><use y="85" xlink:href="#g317"/><use y="102" xlink:href="#g220"/><animate attributeName="display" begin="78144ms; anim_last.end+78144ms" dur="274ms" from="inline" to="inline"/></g><g display="none"><use y="119" xlink:href="#g71"/><use y="136" xlink:href="#g371"/><use y="153" xlink:href="#g71"/><use y="170" xlink:href="#g372"/><use y="187" xlink:href="#g71"/><animate attributeName="display" begin="77168ms; anim_last.end+77168ms" dur="1250ms" from="inline" to="inline"/></g><g display="none"><use y="119" xlink:href="#g190"/><use y="136" xlink:href="#g366"/><use y="153" xlink:href="#g164"/><use y="170" xlink:href="#g367"/><use y="187" xlink:href="#g220"/><animate attributeName="display" begin="78418ms; anim_last.end+78418ms" dur="155ms" from="inline" to="inline"/></g><g display="none"><use y="204" xlink:href="#g71"/><animate attributeName="display" begin="67922ms; anim_last.end+67922ms" dur="10651ms" from="inline" to="inline"/></g><g display="none"><use y="221" xlink:href="#g401"/><animate attributeName="display" begin="77168ms; anim_last.end+77168ms" dur="1405ms" from="inline" to="inline"/></g><g display="none"><use y="238" xlink:href="#g255"/><animate attributeName="display" begin="67922ms; anim_last.end+67922ms" dur="10651ms" from="inline" to="inline"/></g><g display="none"><use y="0" xlink:href="#g71"/><use y="17" xlink:href="#g314"/><use y="34" xlink:href="#g71"/><use y="51" xlink:href="#g402"/><animate attributeName="display" begin="78144ms; anim_last.end+78144ms" dur="3439ms" from="inline" to="inline"/></g><g display="none"><use y="68" xlink:href="#g403"/><use y="85" xlink:href="#g313"/><use y="102" xlink:href="#g71"/><animate attributeName="display" begin="78418ms; anim_last.end+78418ms" dur="3165ms" from="inline" to="inline"/></g><g display="none"><use y="119" xlink:href="#g71"/><use y="136" xlink:href="#g371"/><use y="153" xlink:href="#g71"/><use y="170" xlink:href="#g372"/><use y="187" xlink:href="#g71"/><use y="204" xlink:href="#g190"/><use y="221" xlink:href="#g404"/><use y="238" xlink:href="#g405"/><animate attributeName="display" begin="78573ms; anim_last.end+78573ms" dur="3010ms" from="inline" to="inline"/></g><g display="none"><use y="255" xlink:href="#g182"/><animate attributeName="display" begin="77168ms; anim_last.end+77168ms" dur="4415ms" from="inline" to="inline"/></g><g display="none"><use y="272" xlink:href="#g257"/><animate attributeName="display" begin="67922ms; anim_last.end+67922ms" dur="13661ms" from="inline" to="inline"/></g><g display="none"><use y="289" xlink:href="#g182"/><animate attributeName="display" begin="77168ms; anim_last.end+77168ms" dur="4415ms" from="inline" to="inline"/></g><g display="none"><use y="306" xlink:href="#g182"/><animate attributeName="display" begin="67922ms; anim_last.end+67922ms" dur="13661ms" from="inline" to="inline"/></g><g display="none"><use y="323" xlink:href="#g182"/><animate attributeName="display" begin="77168ms; anim_last.end+77168ms" dur="4415ms" from="inline" to="inline"/></g><g display="none"><use y="340" xlink:href="#g182"/><use y="357" xlink:href="#g182"/><use y="374" xlink:href="#g182"/><use y="391" xlink:href="#g182"/><use y="408" xlink:href="#g71"/><use y="425" xlink:href="#g71"/><animate attributeName="display" begin="67922ms; anim_last.end+67922ms" dur="13661ms" from="inline" to="inline"/></g><g display="none"><rect class="color4" height="17" width="936" x="0" y="442"/><use y="442" xlink:href="#g279"/><animate attributeName="display" begin="77168ms; anim_last.end+77168ms" dur="4415ms" from="inline" to="inline"/></g><g display="none"><rect class="foreground" height="17" width="8" x="0" y="0"/><use y="0" xlink:href="#g94"/><use y="17" xlink:href="#g280"/><use y="34" xlink:href="#g71"/><use y="51" xlink:href="#g406"/><use y="68" xlink:href="#g377"/><use y="85" xlink:href="#g71"/><use y="102" xlink:href="#g71"/><use y="119" xlink:href="#g71"/><use y="136" xlink:href="#g71"/><use y="153" xlink:href="#g71"/><use y="170" xlink:href="#g71"/><use y="187" xlink:href="#g71"/><use y="204" xlink:href="#g71"/><use y="221" xlink:href="#g71"/><use y="238" xlink:href="#g255"/><use y="255" xlink:href="#g182"/><use y="272" xlink:href="#g257"/><use y="289" xlink:href="#g182"/><use y="306" xlink:href="#g182"/><use y="323" xlink:href="#g182"/><use y="340" xlink:href="#g182"/><use y="357" xlink:href="#g182"/><use y="374" xlink:href="#g182"/><use y="391" xlink:href="#g182"/><use y="408" xlink:href="#g71"/><use y="425" xlink:href="#g71"/><use y="442" xlink:href="#g71"/><animate attributeName="display" begin="81583ms; anim_last.end+81583ms" dur="16ms" from="inline" to="inline"/></g><g display="none"><use y="0" xlink:href="#g71"/><use y="34" xlink:href="#g71"/><use y="68" xlink:href="#g377"/><use y="85" xlink:href="#g71"/><use y="425" xlink:href="#g71"/><use y="442" xlink:href="#g71"/><animate attributeName="display" begin="81599ms; anim_last.end+81599ms" dur="1ms" from="inline" to="inline"/></g><g display="none"><rect class="foreground" height="17" width="8" x="0" y="34"/><use y="34" xlink:href="#g407"/><animate attributeName="display" begin="81600ms; anim_last.end+81600ms" dur="1842ms" from="inline" to="inline"/></g><g display="none"><use y="51" xlink:href="#g406"/><animate attributeName="display" begin="81599ms; anim_last.end+81599ms" dur="1843ms" from="inline" to="inline"/></g><g display="none"><use y="34" xlink:href="#g296"/><rect class="foreground" height="17" width="8" x="0" y="51"/><use y="51" xlink:href="#g408"/><animate attributeName="display" begin="83442ms; anim_last.end+83442ms" dur="233ms" from="inline" to="inline"/></g><g display="none"><rect class="foreground" height="17" width="936" x="0" y="0"/><use y="0" xlink:href="#g95"/><animate attributeName="display" begin="81600ms; anim_last.end+81600ms" dur="3124ms" from="inline" to="inline"/></g><g display="none"><use y="17" xlink:href="#g280"/><animate attributeName="display" begin="81599ms; anim_last.end+81599ms" dur="3125ms" from="inline" to="inline"/></g><g display="none"><rect class="foreground" height="17" width="8" x="72" y="34"/><use y="34" xlink:href="#g290"/><use y="51" xlink:href="#g406"/><animate attributeName="display" begin="83675ms; anim_last.end+83675ms" dur="1049ms" from="inline" to="inline"/></g><g display="none"><use y="68" xlink:href="#g409"/><use y="85" xlink:href="#g410"/><animate attributeName="display" begin="81600ms; anim_last.end+81600ms" dur="3124ms" from="inline" to="inline"/></g><g display="none"><use y="102" xlink:href="#g71"/><use y="119" xlink:href="#g71"/><use y="136" xlink:href="#g71"/><use y="153" xlink:href="#g71"/><use y="170" xlink:href="#g71"/><use y="187" xlink:href="#g71"/><use y="204" xlink:href="#g71"/><use y="221" xlink:href="#g71"/><use y="238" xlink:href="#g255"/><use y="255" xlink:href="#g182"/><use y="272" xlink:href="#g257"/><use y="289" xlink:href="#g182"/><use y="306" xlink:href="#g182"/><use y="323" xlink:href="#g182"/><use y="340" xlink:href="#g182"/><use y="357" xlink:href="#g182"/><use y="374" xlink:href="#g182"/><use y="391" xlink:href="#g182"/><rect class="foreground" height="17" width="184" x="376" y="408"/><use y="408" xlink:href="#g338"/><animate attributeName="display" begin="81599ms; anim_last.end+81599ms" dur="3125ms" from="inline" to="inline"/></g><g display="none"><rect class="foreground" height="17" width="16" x="0" y="425"/><rect class="foreground" height="17" width="16" x="128" y="425"/><rect class="foreground" height="17" width="16" x="256" y="425"/><rect class="foreground" height="17" width="16" x="384" y="425"/><rect class="foreground" height="17" width="16" x="512" y="425"/><rect class="foreground" height="17" width="16" x="640" y="425"/><rect class="foreground" height="17" width="24" x="768" y="425"/><use y="425" xlink:href="#g295"/><rect class="foreground" height="17" width="16" x="0" y="442"/><rect class="foreground" height="17" width="16" x="128" y="442"/><rect class="foreground" height="17" width="16" x="256" y="442"/><rect class="foreground" height="17" width="16" x="384" y="442"/><rect class="foreground" height="17" width="16" x="512" y="442"/><rect class="foreground" height="17" width="16" x="640" y="442"/><rect class="foreground" height="17" width="24" x="768" y="442"/><use y="442" xlink:href="#g110"/><animate attributeName="display" begin="81600ms; anim_last.end+81600ms" dur="3124ms" from="inline" to="inline"/></g><g display="none"><rect class="foreground" height="17" width="8" x="0" y="34"/><use y="34" xlink:href="#g408"/><animate attributeName="display" begin="84724ms; anim_last.end+84724ms" dur="726ms" from="inline" to="inline"/></g><g display="none"><rect class="foreground" height="17" width="8" x="8" y="34"/><use y="34" xlink:href="#g411"/><animate attributeName="display" begin="85450ms; anim_last.end+85450ms" dur="185ms" from="inline" to="inline"/></g><g display="none"><rect class="foreground" height="17" width="8" x="16" y="34"/><use y="34" xlink:href="#g412"/><animate attributeName="display" begin="85635ms; anim_last.end+85635ms" dur="163ms" from="inline" to="inline"/></g><g display="none"><rect class="foreground" height="17" width="8" x="24" y="34"/><use y="34" xlink:href="#g413"/><animate attributeName="display" begin="85798ms; anim_last.end+85798ms" dur="116ms" from="inline" to="inline"/></g><g display="none"><rect class="foreground" height="17" width="8" x="32" y="34"/><use y="34" xlink:href="#g414"/><animate attributeName="display" begin="85914ms; anim_last.end+85914ms" dur="127ms" from="inline" to="inline"/></g><g display="none"><rect class="foreground" height="17" width="8" x="40" y="34"/><use y="34" xlink:href="#g415"/><animate attributeName="display" begin="86041ms; anim_last.end+86041ms" dur="137ms" from="inline" to="inline"/></g><g display="none"><rect class="foreground" height="17" width="8" x="48" y="34"/><use y="34" xlink:href="#g416"/><animate attributeName="display" begin="86178ms; anim_last.end+86178ms" dur="134ms" from="inline" to="inline"/></g><g display="none"><rect class="foreground" height="17" width="8" x="56" y="34"/><use y="34" xlink:href="#g417"/><animate attributeName="display" begin="86312ms; anim_last.end+86312ms" dur="127ms" from="inline" to="inline"/></g><g display="none"><rect class="foreground" height="17" width="8" x="64" y="34"/><use y="34" xlink:href="#g418"/><animate attributeName="display" begin="86439ms; anim_last.end+86439ms" dur="192ms" from="inline" to="inline"/></g><g display="none"><rect class="foreground" height="17" width="8" x="72" y="34"/><use y="34" xlink:href="#g419"/><animate attributeName="display" begin="86631ms; anim_last.end+86631ms" dur="352ms" from="inline" to="inline"/></g><g display="none"><rect class="foreground" height="17" width="8" x="80" y="34"/><use y="34" xlink:href="#g420"/><animate attributeName="display" begin="86983ms; anim_last.end+86983ms" dur="215ms" from="inline" to="inline"/></g><g display="none"><rect class="foreground" height="17" width="8" x="88" y="34"/><use y="34" xlink:href="#g421"/><animate attributeName="display" begin="87198ms; anim_last.end+87198ms" dur="125ms" from="inline" to="inline"/></g><g display="none"><rect class="foreground" height="17" width="8" x="96" y="34"/><use y="34" xlink:href="#g422"/><animate attributeName="display" begin="87323ms; anim_last.end+87323ms" dur="102ms" from="inline" to="inline"/></g><g display="none"><rect class="foreground" height="17" width="8" x="104" y="34"/><use y="34" xlink:href="#g423"/><animate attributeName="display" begin="87425ms; anim_last.end+87425ms" dur="140ms" from="inline" to="inline"/></g><g display="none"><rect class="foreground" height="17" width="8" x="112" y="34"/><use y="34" xlink:href="#g424"/><animate attributeName="display" begin="87565ms; anim_last.end+87565ms" dur="568ms" from="inline" to="inline"/></g><g display="none"><rect class="foreground" height="17" width="184" x="376" y="408"/><use y="408" xlink:href="#g338"/><rect class="foreground" height="17" width="16" x="0" y="425"/><rect class="foreground" height="17" width="16" x="128" y="425"/><rect class="foreground" height="17" width="16" x="256" y="425"/><rect class="foreground" height="17" width="16" x="384" y="425"/><rect class="foreground" height="17" width="16" x="512" y="425"/><rect class="foreground" height="17" width="16" x="640" y="425"/><rect class="foreground" height="17" width="24" x="768" y="425"/><use y="425" xlink:href="#g295"/><rect class="foreground" height="17" width="16" x="0" y="442"/><rect class="foreground" height="17" width="16" x="128" y="442"/><rect class="foreground" height="17" width="16" x="256" y="442"/><rect class="foreground" height="17" width="16" x="384" y="442"/><rect class="foreground" height="17" width="16" x="512" y="442"/><rect class="foreground" height="17" width="16" x="640" y="442"/><rect class="foreground" height="17" width="24" x="768" y="442"/><use y="442" xlink:href="#g110"/><animate attributeName="display" begin="84724ms; anim_last.end+84724ms" dur="3409ms" from="inline" to="inline"/></g><g display="none"><rect class="foreground" height="17" width="936" x="0" y="408"/><use y="408" xlink:href="#g111"/><rect class="foreground" height="17" width="16" x="0" y="425"/><use y="425" xlink:href="#g112"/><rect class="foreground" height="17" width="16" x="0" y="442"/><rect class="foreground" height="17" width="16" x="128" y="442"/><use y="442" xlink:href="#g113"/><animate attributeName="display" begin="88133ms; anim_last.end+88133ms" dur="747ms" from="inline" to="inline"/></g><g display="none"><rect class="foreground" height="17" width="936" x="0" y="408"/><use y="408" xlink:href="#g114"/><animate attributeName="display" begin="88880ms; anim_last.end+88880ms" dur="77ms" from="inline" to="inline"/></g><g display="none"><rect class="foreground" height="17" width="936" x="0" y="0"/><use y="0" xlink:href="#g115"/><animate attributeName="display" begin="84724ms; anim_last.end+84724ms" dur="4277ms" from="inline" to="inline"/></g><g display="none"><use y="408" xlink:href="#g71"/><animate attributeName="display" begin="88957ms; anim_last.end+88957ms" dur="44ms" from="inline" to="inline"/></g><g display="none"><rect class="foreground" height="17" width="16" x="0" y="425"/><rect class="foreground" height="17" width="24" x="232" y="425"/><rect class="foreground" height="17" width="24" x="464" y="425"/><rect class="foreground" height="17" width="24" x="696" y="425"/><use y="425" xlink:href="#g116"/><rect class="foreground" height="17" width="16" x="0" y="442"/><rect class="foreground" height="17" width="24" x="232" y="442"/><rect class="foreground" height="17" width="24" x="464" y="442"/><rect class="foreground" height="17" width="16" x="696" y="442"/><use y="442" xlink:href="#g117"/><animate attributeName="display" begin="88880ms; anim_last.end+88880ms" dur="121ms" from="inline" to="inline"/></g><g display="none"><rect class="foreground" height="17" width="936" x="0" y="0"/><use y="0" xlink:href="#g95"/><animate attributeName="display" begin="89001ms; anim_last.end+89001ms" dur="12ms" from="inline" to="inline"/></g><g display="none"><use y="17" xlink:href="#g280"/><animate attributeName="display" begin="84724ms; anim_last.end+84724ms" dur="4289ms" from="inline" to="inline"/></g><g display="none"><use y="34" xlink:href="#g425"/><animate attributeName="display" begin="88133ms; anim_last.end+88133ms" dur="880ms" from="inline" to="inline"/></g><g display="none"><use y="51" xlink:href="#g409"/><use y="68" xlink:href="#g410"/><use y="85" xlink:href="#g71"/><use y="102" xlink:href="#g71"/><use y="119" xlink:href="#g71"/><use y="136" xlink:href="#g71"/><use y="153" xlink:href="#g71"/><use y="170" xlink:href="#g71"/><use y="187" xlink:href="#g71"/><use y="204" xlink:href="#g71"/><use y="221" xlink:href="#g255"/><use y="238" xlink:href="#g182"/><use y="255" xlink:href="#g257"/><use y="272" xlink:href="#g182"/><use y="289" xlink:href="#g182"/><use y="306" xlink:href="#g182"/><use y="323" xlink:href="#g182"/><use y="340" xlink:href="#g182"/><use y="357" xlink:href="#g182"/><use y="374" xlink:href="#g182"/><animate attributeName="display" begin="84724ms; anim_last.end+84724ms" dur="4289ms" from="inline" to="inline"/></g><g display="none"><use y="408" xlink:href="#g71"/><use y="425" xlink:href="#g71"/><rect class="foreground" height="17" width="8" x="0" y="442"/><use y="442" xlink:href="#g94"/><animate attributeName="display" begin="89001ms; anim_last.end+89001ms" dur="12ms" from="inline" to="inline"/></g><g display="none"><use y="119" xlink:href="#g71"/><use y="136" xlink:href="#g371"/><use y="153" xlink:href="#g71"/><use y="170" xlink:href="#g372"/><use y="187" xlink:href="#g71"/><use y="204" xlink:href="#g190"/><use y="221" xlink:href="#g426"/><use y="238" xlink:href="#g173"/><animate attributeName="display" begin="89013ms; anim_last.end+89013ms" dur="1364ms" from="inline" to="inline"/></g><g display="none"><use y="68" xlink:href="#g427"/><use y="85" xlink:href="#g313"/><use y="102" xlink:href="#g71"/><animate attributeName="display" begin="89013ms; anim_last.end+89013ms" dur="1562ms" from="inline" to="inline"/></g><g display="none"><use y="119" xlink:href="#g190"/><use y="136" xlink:href="#g366"/><use y="153" xlink:href="#g164"/><use y="170" xlink:href="#g367"/><use y="187" xlink:href="#g220"/><animate attributeName="display" begin="90377ms; anim_last.end+90377ms" dur="198ms" from="inline" to="inline"/></g><g display="none"><use y="0" xlink:href="#g71"/><use y="17" xlink:href="#g428"/><use y="34" xlink:href="#g429"/><use y="51" xlink:href="#g430"/><animate attributeName="display" begin="89013ms; anim_last.end+89013ms" dur="4285ms" from="inline" to="inline"/></g><g display="none"><use y="68" xlink:href="#g431"/><use y="85" xlink:href="#g317"/><use y="102" xlink:href="#g220"/><use y="119" xlink:href="#g71"/><use y="136" xlink:href="#g371"/><use y="153" xlink:href="#g71"/><use y="170" xlink:href="#g372"/><use y="187" xlink:href="#g71"/><animate attributeName="display" begin="90575ms; anim_last.end+90575ms" dur="2723ms" from="inline" to="inline"/></g><g display="none"><use y="204" xlink:href="#g71"/><use y="221" xlink:href="#g432"/><animate attributeName="display" begin="90377ms; anim_last.end+90377ms" dur="2921ms" from="inline" to="inline"/></g><g display="none"><use y="272" xlink:href="#g433"/><use y="425" xlink:href="#g71"/><rect class="color4" height="17" width="936" x="0" y="442"/><use y="442" xlink:href="#g279"/><animate attributeName="display" begin="89013ms; anim_last.end+89013ms" dur="4285ms" from="inline" to="inline"/></g><g display="none"><use y="34" xlink:href="#g434"/><rect class="color7" height="17" width="936" x="0" y="51"/><use y="51" xlink:href="#g35"/><animate attributeName="display" begin="93298ms; anim_last.end+93298ms" dur="1041ms" from="inline" to="inline"/></g><g display="none"><rect class="color7" height="17" width="936" x="0" y="34"/><use y="34" xlink:href="#g435"/><use y="51" xlink:href="#g45"/><animate attributeName="display" begin="94339ms; anim_last.end+94339ms" dur="4622ms" from="inline" to="inline"/></g><g display="none"><rect class="color7" height="17" width="936" x="0" y="51"/><use y="51" xlink:href="#g35"/><animate attributeName="display" begin="98961ms; anim_last.end+98961ms" dur="188ms" from="inline" to="inline"/></g><g display="none"><use y="68" xlink:href="#g143"/><animate attributeName="display" begin="93298ms; anim_last.end+93298ms" dur="5851ms" from="inline" to="inline"/></g><g display="none"><use y="34" xlink:href="#g436"/><animate attributeName="display" begin="98961ms; anim_last.end+98961ms" dur="1014ms" from="inline" to="inline"/></g><g display="none"><use y="204" xlink:href="#g70"/><use y="221" xlink:href="#g255"/><animate attributeName="display" begin="93298ms; anim_last.end+93298ms" dur="6677ms" from="inline" to="inline"/></g><g display="none"><use y="238" xlink:href="#g182"/><animate attributeName="display" begin="90377ms; anim_last.end+90377ms" dur="9598ms" from="inline" to="inline"/></g><g display="none"><use y="17" xlink:href="#g280"/><animate attributeName="display" begin="93298ms; anim_last.end+93298ms" dur="11955ms" from="inline" to="inline"/></g><g display="none"><use y="34" xlink:href="#g437"/><animate attributeName="display" begin="99975ms; anim_last.end+99975ms" dur="5278ms" from="inline" to="inline"/></g><g display="none"><use y="51" xlink:href="#g45"/><rect class="color7" height="17" width="936" x="0" y="68"/><use y="68" xlink:href="#g146"/><animate attributeName="display" begin="99149ms; anim_last.end+99149ms" dur="6104ms" from="inline" to="inline"/></g><g display="none"><use y="85" xlink:href="#g142"/><use y="102" xlink:href="#g141"/><use y="119" xlink:href="#g138"/><use y="136" xlink:href="#g66"/><use y="153" xlink:href="#g68"/><use y="170" xlink:href="#g64"/><use y="187" xlink:href="#g60"/><animate attributeName="display" begin="93298ms; anim_last.end+93298ms" dur="11955ms" from="inline" to="inline"/></g><g display="none"><use y="204" xlink:href="#g438"/><use y="221" xlink:href="#g439"/><use y="238" xlink:href="#g440"/><animate attributeName="display" begin="99975ms; anim_last.end+99975ms" dur="5278ms" from="inline" to="inline"/></g><g display="none"><use y="255" xlink:href="#g257"/><animate attributeName="display" begin="89013ms; anim_last.end+89013ms" dur="16240ms" from="inline" to="inline"/></g><g display="none"><use y="272" xlink:href="#g182"/><animate attributeName="display" begin="93298ms; anim_last.end+93298ms" dur="11955ms" from="inline" to="inline"/></g><g display="none"><use y="289" xlink:href="#g182"/><use y="306" xlink:href="#g182"/><use y="323" xlink:href="#g182"/><use y="340" xlink:href="#g182"/><use y="357" xlink:href="#g182"/><use y="374" xlink:href="#g182"/><use y="408" xlink:href="#g71"/><animate attributeName="display" begin="89013ms; anim_last.end+89013ms" dur="16240ms" from="inline" to="inline"/></g><g display="none"><use y="425" xlink:href="#g441"/><animate attributeName="display" begin="93298ms; anim_last.end+93298ms" dur="11955ms" from="inline" to="inline"/></g><g display="none"><use y="17" xlink:href="#g442"/><use y="34" xlink:href="#g443"/><use y="51" xlink:href="#g444"/><rect class="color7" height="17" width="224" x="0" y="68"/><rect class="color7" height="17" width="224" x="712" y="68"/><use y="68" xlink:href="#g445"/><use y="85" xlink:href="#g446"/><use y="102" xlink:href="#g447"/><use y="119" xlink:href="#g448"/><use y="136" xlink:href="#g449"/><use y="153" xlink:href="#g450"/><use y="170" xlink:href="#g451"/><use y="187" xlink:href="#g452"/><use y="204" xlink:href="#g453"/><use y="221" xlink:href="#g454"/><use y="238" xlink:href="#g455"/><use y="255" xlink:href="#g456"/><use y="272" xlink:href="#g457"/><use y="289" xlink:href="#g458"/><use y="306" xlink:href="#g459"/><use y="323" xlink:href="#g457"/><use y="340" xlink:href="#g460"/><use y="357" xlink:href="#g461"/><use y="374" xlink:href="#g457"/><use y="391" xlink:href="#g462"/><use y="408" xlink:href="#g463"/><use y="425" xlink:href="#g464"/><animate attributeName="display" begin="105253ms; anim_last.end+105253ms" dur="1585ms" from="inline" to="inline"/></g><g display="none"><use y="34" xlink:href="#g465"/><use y="204" xlink:href="#g70"/><use y="221" xlink:href="#g255"/><use y="238" xlink:href="#g466"/><animate attributeName="display" begin="106838ms; anim_last.end+106838ms" dur="1245ms" from="inline" to="inline"/></g><g display="none"><use y="34" xlink:href="#g467"/><use y="221" xlink:href="#g439"/><animate attributeName="display" begin="108083ms; anim_last.end+108083ms" dur="1531ms" from="inline" to="inline"/></g><g display="none"><use y="34" xlink:href="#g468"/><use y="221" xlink:href="#g469"/><animate attributeName="display" begin="109614ms; anim_last.end+109614ms" dur="940ms" from="inline" to="inline"/></g><g display="none"><use y="34" xlink:href="#g470"/><animate attributeName="display" begin="110554ms; anim_last.end+110554ms" dur="1229ms" from="inline" to="inline"/></g><g display="none"><use y="204" xlink:href="#g471"/><animate attributeName="display" begin="108083ms; anim_last.end+108083ms" dur="3700ms" from="inline" to="inline"/></g><g display="none"><use y="221" xlink:href="#g472"/><animate attributeName="display" begin="110554ms; anim_last.end+110554ms" dur="1229ms" from="inline" to="inline"/></g><g display="none"><use y="238" xlink:href="#g440"/><animate attributeName="display" begin="108083ms; anim_last.end+108083ms" dur="3700ms" from="inline" to="inline"/></g><g display="none"><use y="0" xlink:href="#g145"/><animate attributeName="display" begin="93298ms; anim_last.end+93298ms" dur="19436ms" from="inline" to="inline"/></g><g display="none"><use y="17" xlink:href="#g473"/><animate attributeName="display" begin="106838ms; anim_last.end+106838ms" dur="5896ms" from="inline" to="inline"/></g><g display="none"><use y="34" xlink:href="#g474"/><animate attributeName="display" begin="111783ms; anim_last.end+111783ms" dur="951ms" from="inline" to="inline"/></g><g display="none"><use y="51" xlink:href="#g45"/><rect class="color7" height="17" width="936" x="0" y="68"/><use y="68" xlink:href="#g146"/><use y="85" xlink:href="#g142"/><use y="102" xlink:href="#g141"/><use y="119" xlink:href="#g138"/><use y="136" xlink:href="#g66"/><use y="153" xlink:href="#g68"/><use y="170" xlink:href="#g64"/><use y="187" xlink:href="#g60"/><animate attributeName="display" begin="106838ms; anim_last.end+106838ms" dur="5896ms" from="inline" to="inline"/></g><g display="none"><use y="204" xlink:href="#g70"/><use y="221" xlink:href="#g255"/><use y="238" xlink:href="#g466"/><animate attributeName="display" begin="111783ms; anim_last.end+111783ms" dur="951ms" from="inline" to="inline"/></g><g display="none"><use y="255" xlink:href="#g182"/><use y="272" xlink:href="#g182"/><use y="289" xlink:href="#g182"/><use y="306" xlink:href="#g182"/><use y="323" xlink:href="#g182"/><use y="340" xlink:href="#g182"/><use y="357" xlink:href="#g182"/><use y="374" xlink:href="#g182"/><use y="391" xlink:href="#g475"/><use y="408" xlink:href="#g71"/><use y="425" xlink:href="#g441"/><animate attributeName="display" begin="106838ms; anim_last.end+106838ms" dur="5896ms" from="inline" to="inline"/></g><g display="none"><rect class="color4" height="17" width="936" x="0" y="442"/><use y="442" xlink:href="#g88"/><animate attributeName="display" begin="93298ms; anim_last.end+93298ms" dur="19436ms" from="inline" to="inline"/></g><g display="none"><rect class="foreground" height="17" width="8" x="0" y="0"/><use y="0" xlink:href="#g94"/><animate attributeName="display" begin="112734ms; anim_last.end+112734ms" dur="3ms" from="inline" to="inline"/></g><g display="none"><rect class="foreground" height="17" width="8" x="512" y="0"/><use y="0" xlink:href="#g476"/><animate attributeName="display" begin="112737ms; anim_last.end+112737ms" dur="1224ms" from="inline" to="inline"/></g><g display="none"><use y="17" xlink:href="#g473"/><animate attributeName="display" begin="112734ms; anim_last.end+112734ms" dur="1227ms" from="inline" to="inline"/></g><g display="none"><use y="0" xlink:href="#g477"/><rect class="foreground" height="17" width="8" x="0" y="17"/><use y="17" xlink:href="#g478"/><animate attributeName="display" begin="113961ms; anim_last.end+113961ms" dur="1000ms" from="inline" to="inline"/></g><g display="none"><use y="34" xlink:href="#g71"/><use y="51" xlink:href="#g71"/><use y="68" xlink:href="#g71"/><use y="85" xlink:href="#g71"/><use y="102" xlink:href="#g71"/><use y="119" xlink:href="#g71"/><use y="136" xlink:href="#g71"/><use y="153" xlink:href="#g71"/><use y="170" xlink:href="#g71"/><use y="187" xlink:href="#g71"/><use y="204" xlink:href="#g71"/><use y="221" xlink:href="#g255"/><use y="238" xlink:href="#g466"/><use y="255" xlink:href="#g182"/><use y="272" xlink:href="#g182"/><use y="289" xlink:href="#g182"/><use y="306" xlink:href="#g182"/><use y="323" xlink:href="#g182"/><use y="340" xlink:href="#g182"/><use y="357" xlink:href="#g182"/><use y="374" xlink:href="#g182"/><use y="391" xlink:href="#g475"/><use y="408" xlink:href="#g71"/><use y="425" xlink:href="#g71"/><use y="442" xlink:href="#g71"/><animate attributeName="display" begin="112734ms; anim_last.end+112734ms" dur="2227ms" from="inline" to="inline" id="anim_last"/></g></svg> -</svg>
\ No newline at end of file diff --git a/treefmt.nix b/treefmt.nix new file mode 100644 index 00000000..1716d457 --- /dev/null +++ b/treefmt.nix @@ -0,0 +1,86 @@ +{ + pkgs, + excludes ? [ ], + ... +}: +{ + projectRootFile = "flake.nix"; + + programs = { + gofmt = { + enable = true; + }; + + mdformat = { + enable = true; + + package = pkgs.mdformat.withPlugins ( + p: with p; [ + # add support for github flavored markdown + mdformat-gfm + mdformat-gfm-alerts + + # add support for markdown tables + mdformat-tables + + # add the following comment before running `nix fmt` to generate a + # table of contents in markdown files: + # <!-- mdformat-toc start --> + mdformat-toc + ] + ); + + settings = { + end-of-line = "lf"; + number = true; + wrap = 80; + }; + }; + + nixfmt = { + enable = true; + strict = true; + }; + + # this is disabled due to `//webui` not yet being integrated with the flake. + # the entire package directory is ignored below in + # `settings.global.excludes`. + prettier = { + enable = false; + + settings = { + singleQuote = true; + trailingComma = "es5"; + }; + }; + + shfmt = { + enable = true; + }; + + yamlfmt = { + enable = true; + + settings.formatter = { + eof_newline = true; + include_document_start = true; + retain_line_breaks_single = true; + trim_trailing_whitespace = true; + }; + }; + }; + + settings.global.excludes = + pkgs.lib.lists.unique [ + "*.graphql" + "*.png" + "*.svg" + "*.txt" + "doc/man/*.1" # generated via //doc:generate.go + "doc/md/*" # generated via //doc:generate.go + "misc/completion/*/*" + "webui/*" # not currently supported, //webui is not yet flakeified + "Makefile" + ] + ++ excludes; +} diff --git a/webui/Readme.md b/webui/README.md index 45df1705..45df1705 100644 --- a/webui/Readme.md +++ b/webui/README.md |