From 5db6ee4eb6b9ccd687051cc7397fdbcfdc298bc7 Mon Sep 17 00:00:00 2001 From: Brendan Forster Date: Tue, 20 Nov 2018 15:35:16 -0400 Subject: [PATCH 01/48] update documentation and README for Linux support --- .../--submit-a-feature-request.md | 2 +- .github/ISSUE_TEMPLATE/installation-issue.md | 21 +++ README.md | 106 ++++++------ docs/installation.md | 27 +++ docs/process/publishing-linux-releases.md | 154 ++++++++++++++++++ 5 files changed, 250 insertions(+), 60 deletions(-) create mode 100644 .github/ISSUE_TEMPLATE/installation-issue.md create mode 100644 docs/process/publishing-linux-releases.md diff --git a/.github/ISSUE_TEMPLATE/--submit-a-feature-request.md b/.github/ISSUE_TEMPLATE/--submit-a-feature-request.md index ece837861e1..eca720b17d1 100644 --- a/.github/ISSUE_TEMPLATE/--submit-a-feature-request.md +++ b/.github/ISSUE_TEMPLATE/--submit-a-feature-request.md @@ -1,6 +1,6 @@ --- name: "⭐ Submit a feature request" -about: 'Feature requests are considered based on team''s capacity ' +about: Feature requests are considered based on team''s capacity title: '' labels: '' assignees: '' diff --git a/.github/ISSUE_TEMPLATE/installation-issue.md b/.github/ISSUE_TEMPLATE/installation-issue.md new file mode 100644 index 00000000000..0d2175f7faa --- /dev/null +++ b/.github/ISSUE_TEMPLATE/installation-issue.md @@ -0,0 +1,21 @@ +--- +name: "\U0001F4BB Installation issue" +about: Report a problem when installing the application +title: '' +labels: '' +assignees: '' + +--- + +### Operating System/Distribution + +Which distribution of Linux are you using? + +### Installer + +Which version of the app? +Which installer type? + +### What happened? + +Provide as much detail as possible. Error messages or output are extremely useful. diff --git a/README.md b/README.md index 3e8505e79d5..2dc7b116118 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,6 @@ -# [GitHub Desktop](https://desktop.github.com) +# [GitHub Desktop](https://desktop.github.com) - The Linux Fork + +[![Build Status](https://brendanforster.visualstudio.com/desktop-linux/_apis/build/status/Azure%20Pipelines%20Build?branchName=linux)](https://brendanforster.visualstudio.com/desktop-linux/_build/latest?definitionId=10&branchName=linux) GitHub Desktop is an open source [Electron](https://www.electronjs.org/)-based GitHub app. It is written in [TypeScript](http://www.typescriptlang.org) and @@ -6,85 +8,71 @@ uses [React](https://reactjs.org/). ![GitHub Desktop screenshot - Windows](https://cloud.githubusercontent.com/assets/359239/26094502/a1f56d02-3a5d-11e7-8799-23c7ba5e5106.png) -## Where can I get it? - -Download the official installer for your operating system: - - - [macOS](https://central.github.com/deployments/desktop/desktop/latest/darwin) - - [macOS (Apple Silicon)](https://central.github.com/deployments/desktop/desktop/latest/darwin-arm64) - - [Windows](https://central.github.com/deployments/desktop/desktop/latest/win32) - - [Windows machine-wide install](https://central.github.com/deployments/desktop/desktop/latest/win32?format=msi) - -You can install this alongside your existing GitHub Desktop for Mac or GitHub -Desktop for Windows application. +## What is this repository for? -**NOTE**: there is no current migration path to import your existing -repositories into the new application - you can drag-and-drop your repositories -from disk onto the application to get started. +This repository contains specific patches on top of the upstream +`desktop/desktop` repository to support Linux usage. -### Beta Channel +It also hosts preview packages for various Linux distributions: -Want to test out new features and get fixes before everyone else? Install the -beta channel to get access to early builds of Desktop: + - AppImage (`.AppImage`) + - Debian (`.deb`) + - RPM (`.rpm`) - - [macOS](https://central.github.com/deployments/desktop/desktop/latest/darwin?env=beta) - - [macOS (Apple Silicon)](https://central.github.com/deployments/desktop/desktop/latest/darwin-arm64?env=beta) - - [Windows](https://central.github.com/deployments/desktop/desktop/latest/win32?env=beta) - - [Windows (ARM64)](https://central.github.com/deployments/desktop/desktop/latest/win32-arm64?env=beta) - -The release notes for the latest beta versions are available [here](https://desktop.github.com/release-notes/?env=beta). +Check out the [latest releases](https://github.com/shiftkey/desktop/releases) to +help out with testing on your distribution. -### Community Releases +## packagecloud -There are several community-supported package managers that can be used to -install GitHub Desktop: - - Windows users can install using [Chocolatey](https://chocolatey.org/) package manager: - `c:\> choco install github-desktop` - - macOS users can install using [Homebrew](https://brew.sh/) package manager: - `$ brew install --cask github` +We are trialing using [PackageCloud](https://packagecloud.io/) for distributing +the installers for Debian and RPM-based distributions. -Installers for various Linux distributions can be found on the -[`shiftkey/desktop`](https://github.com/shiftkey/desktop) fork. +### Debian/Ubuntu distributions -Arch Linux users can install the latest version from the -[AUR](https://aur.archlinux.org/packages/github-desktop-bin/). - -## Is GitHub Desktop right for me? What are the primary areas of focus? +To setup the package repository, run these commands: -[This document](https://github.com/desktop/desktop/blob/development/docs/process/what-is-desktop.md) describes the focus of GitHub Desktop and who the product is most useful for. +``` +$ wget -qO - https://packagecloud.io/shiftkey/desktop/gpgkey | sudo apt-key add - +$ sudo sh -c 'echo "deb [arch=amd64] https://packagecloud.io/shiftkey/desktop/any/ any main" > /etc/apt/sources.list.d/packagecloud-shiftky-desktop.list' +$ sudo apt-get update +``` -And to see what the team is working on currently and in the near future, check out the [GitHub Desktop roadmap](https://github.com/desktop/desktop/blob/development/docs/process/roadmap.md). +Then install GitHub Desktop: -## I have a problem with GitHub Desktop +``` +$ sudo apt install github-desktop +``` -Note: The [GitHub Desktop Code of Conduct](https://github.com/desktop/desktop/blob/development/CODE_OF_CONDUCT.md) applies in all interactions relating to the GitHub Desktop project. +### Red Hat/CentOS/Fedora distributions -First, please search the [open issues](https://github.com/desktop/desktop/issues?q=is%3Aopen) -and [closed issues](https://github.com/desktop/desktop/issues?q=is%3Aclosed) -to see if your issue hasn't already been reported (it may also be fixed). +To setup the package repository, run these commands: -There is also a list of [known issues](https://github.com/desktop/desktop/blob/development/docs/known-issues.md) -that are being tracked against Desktop, and some of these issues have workarounds. +``` +$ sudo rpm --import https://packagecloud.io/shiftkey/desktop/gpgkey +$ sudo sh -c 'echo -e "[shiftkey]\nname=GitHub Desktop\nbaseurl=https://packagecloud.io/shiftkey/desktop/el/7/\$basearch\nenabled=1\ngpgcheck=0\nrepo_gpgcheck=1\ngpgkey=https://packagecloud.io/shiftkey/desktop/gpgkey" > /etc/yum.repos.d/shiftkey-desktop.repo' +``` -If you can't find an issue that matches what you're seeing, open a [new issue](https://github.com/desktop/desktop/issues/new/choose), -choose the right template and provide us with enough information to investigate -further. +Then install GitHub Desktop: -## The issue I reported isn't fixed yet. What can I do? +``` +# if yum is your package manager +$ sudo yum install github-desktop +# if dnf is your package manager +$ sudo dnf install github-desktop +``` -If nobody has responded to your issue in a few days, you're welcome to respond to it with a friendly ping in the issue. Please do not respond more than a second time if nobody has responded. The GitHub Desktop maintainers are constrained in time and resources, and diagnosing individual configurations can be difficult and time consuming. While we'll try to at least get you pointed in the right direction, we can't guarantee we'll be able to dig too deeply into any one person's issue. +## Other Distributions -## How can I contribute to GitHub Desktop? - -The [CONTRIBUTING.md](./.github/CONTRIBUTING.md) document will help you get setup and -familiar with the source. The [documentation](docs/) folder also contains more -resources relevant to the project. +Arch Linux users can install GitHub Desktop from the +[AUR](https://aur.archlinux.org/packages/github-desktop-bin/). -If you're looking for something to work on, check out the [help wanted](https://github.com/desktop/desktop/issues?q=is%3Aissue+is%3Aopen+label%3A%22help%20wanted%22) label. +`gnome-keyring` is required and the daemon must be launched either at login or when the X server is started. Normally this is handled by a display manager, but in other cases following the instructions found on the [Arch Wiki](https://wiki.archlinux.org/index.php/GNOME/Keyring#Using_the_keyring_outside_GNOME) will fix the issue of not being able to save login credentials. -## More Resources +## More information -See [desktop.github.com](https://desktop.github.com) for more product-oriented +Please check out the [README](https://github.com/desktop/desktop#github-desktop) +on the upstream [GitHub Desktop project](https://github.com/desktop/desktop) and +[desktop.github.com](https://desktop.github.com) for more product-oriented information about GitHub Desktop. ## License diff --git a/docs/installation.md b/docs/installation.md index 6681d22a00b..af08c517d13 100644 --- a/docs/installation.md +++ b/docs/installation.md @@ -13,6 +13,26 @@ On Windows you have two options: - Download the `GitHubDesktopSetup.exe` and run it to install it for the current user. - Download the `GitHubDesktopSetup.msi` and run it to install a machine-wide version of GitHub Desktop - each logged-in user will then be able to run GitHub Desktop from the program at `%PROGRAMFILES(x86)\GitHub Desktop Installer\desktop.exe`. +### Linux + +On Linux there are four different package formats available, depending on your +distribution: + + - AppImage (`.AppImage`) + - Debian (`.deb`) + - RPM (`.rpm`) + - Snap (`.snap`) - also available from [snapcraft.io](https://snapcraft.io/github-desktop) + +If you install the Snap package, ensure you also connect it to your password +manager: + +```shellsession +$ sudo snap connect github-desktop:password-manager-service +``` + +Without this, GitHub Desktop cannot store or retrieve account details it +requires in the user's keychain. + ## Data Directories GitHub Desktop will create directories to manage the files and data it needs to function. If you manage a network of computers and want to install GitHub Desktop, here is more information about how things work. @@ -25,6 +45,13 @@ GitHub Desktop will create directories to manage the files and data it needs to - `%LOCALAPPDATA%\GitHubDesktop\` - contains the latest versions of the app, and some older versions if the user has updated from a previous version. - `%APPDATA%\GitHub Desktop\` - this directory contains user-specific data which the application requires to run, and is created on launch if it doesn't exist. Log files are also stored in this location. +### Linux + +This varies based on the installer chosen: + + - AppImage, Debian and RPM: `~/.config/GitHub Desktop/` + - Snap: `~/snap/github-desktop/current/.config/GitHub Desktop/` + ## Log Files GitHub Desktop will generate logs as part of its normal usage, to assist with troubleshooting. They are located in the data directory that GitHub Desktop uses (see above) under a `logs` subdirectory, organized by date using the format `YYYY-MM-DD.desktop.production.log`, where `YYYY-MM-DD` is the day the log was created. diff --git a/docs/process/publishing-linux-releases.md b/docs/process/publishing-linux-releases.md new file mode 100644 index 00000000000..76a5648b68a --- /dev/null +++ b/docs/process/publishing-linux-releases.md @@ -0,0 +1,154 @@ +# Publishing Linux Releases + +This document outlines the steps I take once a release has been published from +the main GitHub Desktop project. + +This document assumes you have these remotes configured: + +``` +$ git remote -v +origin https://github.com/shiftkey/desktop (fetch) +origin https://github.com/shiftkey/desktop (push) +upstream https://github.com/desktop/desktop (fetch) +upstream https://github.com/desktop/desktop (push) +``` + +Ensure that `development` and `linux` are up-to-date: + +``` +$ git fetch --all +$ git checkout development +$ git reset upstream/development --hard +$ git push origin development +$ git checkout linux +$ git reset origin/linux --hard +$ git rebase development linux +``` + +We want to ensure our changes work against the current branch, so take some time +to rebase the changes and force push `linux` once you're done. + +``` +$ git push origin linux --force-with-lease +``` + +Wait for the continuous integration tests to pass. If `linux` is not passing the +continuous integration tests we need to investigate and identify why things are +no longer working. + +### 1. Create a branch from the release tag + +Each release tag from the upstream project matches the format `release-X.Y.Z` +where `X.Y.Z` are version numbers. We should create a corresponding branch in +this repository named `linux-release-X.Y.Z` as a starting point for the next +Linux release. + +On the command line, this looks like this (using the `2.1.3` release as an +example): + +``` +$ git checkout -b linux-release-2.1.3 release-2.1.3 +$ git push origin linux-release-2.1.3 -u +``` + +### 2. Open pull request to apply the necessary patches to the new branch + +The first step to cutting a release is to backport the latest fixes to the +release branch: + +``` +$ git checkout -b apply-changes-2.1.3 linux +$ git submodule update +$ git rebase --onto linux-release-2.1.3 development apply-changes-2.1.3 +``` + +Work through the conflicts reported until the branch is cleanly applied to the +previous release. + +When the branch is ready to go, push the branch to the remote: + +``` +$ git push origin apply-changes-2.1.3 -u +``` + +Open a pull request that targets `linux-release-2.1.3`. Review the changes and +ensure the tests pass. + +### 3. Approve and merge PR + +If we're satisifed with the pull request, we can merge the pull request to +update the release branch. + +Ensure **rebase and merge** is used here, as we want to preserve the commit +history as-is without introducing merge commits. + +If there are additional changes that need to go into the release, make sure to +include them + +### 4. Tag the release + +Ensure you are on the latest version that passes all tests: + +``` +$ git checkout linux-release-2.1.3 +$ git pull +``` + +We need to bump the version here to indicate this is not the exact same version +as the original release. The convention we follow is `release-X.Y.Z-linuxA` +where `A` is an auto-incrementing number (starting from 1). + +Update the `version` field in `app/package.json` to this new version. For +example, updating to the first release of `2.1.3` would look like this: + +```diff +diff --git a/app/package.json b/app/package.json +index fbbbb976f..3baaf9e33 100644 +--- a/app/package.json ++++ b/app/package.json +@@ -3,7 +3,7 @@ + "productName": "GitHub Desktop", + "bundleID": "com.github.GitHubClient", + "companyName": "GitHub, Inc.", +- "version": "2.1.0", ++ "version": "2.1.3-linux1", + "main": "./main.js", + "repository": { + "type": "git", +``` + +Commit and push this change to ensure we still pass the CI suite: + +``` +$ git commit -am "bump version for release" +$ git push +``` + +With this passing CI, we can tag this version to indicate this is what we are +releasing: + +``` +$ git tag release-2.1.3-linux1 +``` + +With those things in place, push the changes to the branch as well as the new +tag: + +``` +$ git push --follow-tags +``` + +### 5. Publish to GitHub + +After the tagged build completes, it will have the installers available as +artifacts. Over on Azure Pipelines - switch to the Releases tab and run "Publish +to Beta Channel" with the Snap release disabled +([**#204**](https://github.com/shiftkey/desktop/issues/202) is the tracking +issue for re-enabling that). + +When that is done, there should be a draft release available assigned to the tag +from earlier. Edit the release to add the release notes and checksums. + +**TODO:** it'd be great to have some sort of script to generate the release +notes from the changelog in this "markdown + sections" format, which would save +a lot of manual effort. From 17fe7ca2673232bdc05e4bbf4752ac162fc0d2a9 Mon Sep 17 00:00:00 2001 From: Brendan Forster Date: Thu, 1 Nov 2018 18:06:04 -0300 Subject: [PATCH 02/48] improvements to electron-builder config --- app/package.json | 2 +- package.json | 3 +- script/dist-info.ts | 2 +- script/electron-builder-linux.yml | 15 +++++--- script/package.ts | 63 ++++++++++++++++++++++++++++++- yarn.lock | 55 ++++++++++++++++++++++----- 6 files changed, 119 insertions(+), 21 deletions(-) diff --git a/app/package.json b/app/package.json index 7cd6fb22473..58c50c81efd 100644 --- a/app/package.json +++ b/app/package.json @@ -1,5 +1,5 @@ { - "name": "desktop", + "name": "github-desktop", "productName": "GitHub Desktop", "bundleID": "com.github.GitHubClient", "companyName": "GitHub, Inc.", diff --git a/package.json b/package.json index ef4089f48c3..1127393d8ff 100644 --- a/package.json +++ b/package.json @@ -118,7 +118,8 @@ "webpack-hot-middleware": "^2.22.2", "webpack-merge": "^4.1.2", "xml2js": "^0.4.16", - "xvfb-maybe": "^0.2.1" + "xvfb-maybe": "^0.2.1", + "yaml": "^1.4.0" }, "devDependencies": { "@types/byline": "^4.2.31", diff --git a/script/dist-info.ts b/script/dist-info.ts index ee9de2328c8..153bed7caae 100644 --- a/script/dist-info.ts +++ b/script/dist-info.ts @@ -28,7 +28,7 @@ export function getExecutableName() { if (process.platform === 'win32') { return `${getWindowsIdentifierName()}${suffix}` } else if (process.platform === 'linux') { - return 'desktop' + return `github-desktop${suffix}` } else { return productName } diff --git a/script/electron-builder-linux.yml b/script/electron-builder-linux.yml index b096a6da00f..7145ed5050e 100644 --- a/script/electron-builder-linux.yml +++ b/script/electron-builder-linux.yml @@ -1,13 +1,14 @@ -productName: 'GitHubDesktop' -artifactName: '${productName}-${os}-${arch}-${version}.${ext}' +artifactName: 'GitHubDesktop-${os}-${version}.${ext}' linux: category: 'GNOME;GTK;Development' packageCategory: 'GNOME;GTK;Development' icon: 'app/static/logos' + mimeTypes: + - x-scheme-handler/x-github-client + - x-scheme-handler/x-github-desktop-auth target: - deb - rpm - - snap - AppImage maintainer: 'GitHub, Inc ' deb: @@ -25,6 +26,7 @@ deb: - libcurl3 | libcurl4 # keytar dependencies - libsecret-1-0 + - gnome-keyring rpm: depends: # default Electron dependencies @@ -35,12 +37,13 @@ rpm: - libcurl # keytar dependencies - libsecret + - gnome-keyring snap: confinement: 'classic' stagePackages: - default - libcurl3 - - libsecret-1-0 - openssh-client - plugs: - - password-manager-service + - gettext + environment: + DISABLE_WAYLAND: 1 diff --git a/script/package.ts b/script/package.ts index a39b1b48020..3c8737c9088 100644 --- a/script/package.ts +++ b/script/package.ts @@ -4,6 +4,10 @@ import * as fs from 'fs-extra' import * as cp from 'child_process' import * as path from 'path' import * as electronInstaller from 'electron-winstaller' +import * as crypto from 'crypto' + +import glob = require('glob') + import { getProductName, getCompanyName } from '../app/package-info' import { getDistPath, @@ -14,6 +18,7 @@ import { shouldMakeDelta, getUpdatesURL, getIconFileName, + getDistRoot, } from './dist-info' import { isAppveyor, isGitHubActions } from './build-platforms' @@ -123,6 +128,55 @@ function packageWindows() { }) } +function getSha256Checksum(fullPath: string): Promise { + return new Promise((resolve, reject) => { + const algo = 'sha256' + const shasum = crypto.createHash(algo) + + const s = fs.createReadStream(fullPath) + s.on('data', function (d) { + shasum.update(d) + }) + s.on('error', err => { + reject(err) + }) + s.on('end', function () { + const d = shasum.digest('hex') + resolve(d) + }) + }) +} + +function generateChecksums() { + const distRoot = getDistRoot() + + const installersPath = `${distRoot}/GitHubDesktop-linux-*` + + glob(installersPath, async (error, files) => { + if (error != null) { + throw error + } + + const checksums = new Map() + + for (const f of files) { + const checksum = await getSha256Checksum(f) + checksums.set(f, checksum) + } + + let checksumsText = `Checksums: \n` + + for (const [fullPath, checksum] of checksums) { + const fileName = path.basename(fullPath) + checksumsText += `${checksum} - ${fileName}\n` + } + + const checksumFile = path.join(distRoot, 'checksums.txt') + + fs.writeFile(checksumFile, checksumsText) + }) +} + function packageLinux() { const electronBuilder = path.resolve( __dirname, @@ -143,6 +197,11 @@ function packageLinux() { configPath, ] - console.log('Packaging for Linux…') - cp.spawnSync(electronBuilder, args, { stdio: 'inherit' }) + const { error } = cp.spawnSync(electronBuilder, args, { stdio: 'inherit' }) + + if (error != null) { + throw error + } + + generateChecksums() } diff --git a/yarn.lock b/yarn.lock index 3b0e3a0868a..912416a2c66 100644 --- a/yarn.lock +++ b/yarn.lock @@ -254,6 +254,13 @@ dependencies: "@babel/helper-plugin-utils" "^7.10.4" +"@babel/runtime@^7.3.4": + version "7.4.2" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.4.2.tgz#f5ab6897320f16decd855eed70b705908a313fe8" + integrity sha512-7Bl2rALb7HpvXFL7TETNzKSAeBVCPHELzc0C//9FCxN8nsiueWSJBqaF+2oIJScyILStASR/Cx5WMkXGYTiJFA== + dependencies: + regenerator-runtime "^0.13.2" + "@babel/template@^7.10.4", "@babel/template@^7.12.7", "@babel/template@^7.3.3": version "7.12.7" resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.12.7.tgz#c817233696018e39fbb6c491d2fb684e05ed43bc" @@ -2896,9 +2903,9 @@ camel-case@3.0.x: upper-case "^1.1.1" camelcase@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.0.0.tgz#03295527d58bd3cd4aa75363f35b2e8d97be2f42" - integrity sha512-faqwZqnWxbxn+F1d399ygeamQNy3lPp/H9H6rNrqYh4FSVCtcY+3cub1MxA8o9mDd55mM8Aghuu/kuyYA6VTsA== + version "5.2.0" + resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.2.0.tgz#e7522abda5ed94cc0489e1b8466610e88404cf45" + integrity sha512-IXFsBS2pC+X0j0N/GE7Dm7j3bsEBp+oTpb7F50dwEVX7rf3IgwO9XatnegTsDtniKCUtEJH4fSU6Asw7uoVLfQ== camelcase@^5.3.1: version "5.3.1" @@ -6771,7 +6778,7 @@ js-tokens@^3.0.0, js-tokens@^3.0.2: resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== -js-yaml@3.13.1, js-yaml@^3.10.0, js-yaml@^3.13.1, js-yaml@^3.7.0: +js-yaml@3.13.1, js-yaml@^3.13.1: version "3.13.1" resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.13.1.tgz#aff151b30bfdfa8e49e05da22e7415e9dfa37847" integrity sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw== @@ -6779,6 +6786,14 @@ js-yaml@3.13.1, js-yaml@^3.10.0, js-yaml@^3.13.1, js-yaml@^3.7.0: argparse "^1.0.7" esprima "^4.0.0" +js-yaml@^3.10.0: + version "3.10.0" + resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.10.0.tgz#2e78441646bd4682e963f22b6e92823c309c62dc" + integrity sha512-O2v52ffjLa9VeM43J4XocZE//WT9N0IiwDa3KSHH7Tu8CtH+1qM8SIZvnsTh6v+4yFy5KUY3BHUVwjpfAWsjIA== + dependencies: + argparse "^1.0.7" + esprima "^4.0.0" + js-yaml@^3.14.0: version "3.14.0" resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.14.0.tgz#a7a34170f26a21bb162424d8adacb4113a69e482" @@ -6787,6 +6802,14 @@ js-yaml@^3.14.0: argparse "^1.0.7" esprima "^4.0.0" +js-yaml@^3.7.0: + version "3.11.0" + resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.11.0.tgz#597c1a8bd57152f26d622ce4117851a51f5ebaef" + integrity sha512-saJstZWv7oNeOyBh3+Dx1qWzhW0+e6/8eDzo7p5rDFqxntSztloLtuKu+Ejhtq82jsilwOIZYsCz+lIjthg1Hw== + dependencies: + argparse "^1.0.7" + esprima "^4.0.0" + jsbn@~0.1.0: version "0.1.1" resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513" @@ -9080,6 +9103,11 @@ regenerator-runtime@^0.11.0: resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.11.0.tgz#7e54fe5b5ccd5d6624ea6255c3473be090b802e1" integrity sha512-/aA0kLeRb5N9K0d4fw7ooEbI+xDe+DKD499EQqygGqeS8N3xto15p09uY2xj7ixP81sNPXvRLnAQIqdVStgb1A== +regenerator-runtime@^0.13.2: + version "0.13.2" + resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.2.tgz#32e59c9a6fb9b1a4aff09b4930ca2d4477343447" + integrity sha512-S/TQAZJO+D3m9xeN1WTI8dLKBBiRgXBlTJvbWjCThHWZj9EvHK70Ff50/tYj2J/fvBY6JtFVwRuazHN2E7M9BA== + regex-not@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/regex-not/-/regex-not-1.0.0.tgz#42f83e39771622df826b02af176525d6a5f157f9" @@ -9313,9 +9341,9 @@ resolve@^1.1.6, resolve@^1.3.2: path-parse "^1.0.5" resolve@^1.10.0: - version "1.15.1" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.15.1.tgz#27bdcdeffeaf2d6244b95bb0f9f4b4653451f3e8" - integrity sha512-84oo6ZTtoTUpjgNEr5SJyzQhzL72gaRodsSfyxC/AXRvwu0Yse9H8eF9IpGo7b8YetZhlI6v7ZQ6bKBFV/6S7w== + version "1.10.0" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.10.0.tgz#3bdaaeaf45cc07f375656dfd2e54ed0810b101ba" + integrity sha512-3sUr9aq5OfSg2S9pNtPA9hL1FVEAjvfOC4leW0SNf/mpnaakz2a9femSd6LqAww2RaFctwyf1lCqnTHuF1rxDg== dependencies: path-parse "^1.0.6" @@ -10147,9 +10175,9 @@ strip-ansi@^3.0.0: ansi-regex "^2.0.0" strip-ansi@^5.1.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-5.2.0.tgz#8c9a536feb6afc962bdfa5b104a5091c1ad9c0ae" - integrity sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA== + version "5.1.0" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-5.1.0.tgz#55aaa54e33b4c0649a7338a43437b1887d153ec4" + integrity sha512-TjxrkPONqO2Z8QDCpeE2j6n0M6EwxzyDgzEeGp+FbdvaJAt//ClYi6W5my+3ROlC/hZX2KACUwDfK49Ka5eDvg== dependencies: ansi-regex "^4.1.0" @@ -11605,6 +11633,13 @@ yallist@^4.0.0: resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== +yaml@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/yaml/-/yaml-1.4.0.tgz#b729a3ef7e35bdc5ece8f28900e20a9b41510fc3" + integrity sha512-rzU83hGJrNgyT7OE2mP/SILeZxEMRJ0mza0n4KFtkNL1aXUZ79ZgZ5pIH56yT6LiqujcAs/Rqzp0ApvvNYfUfw== + dependencies: + "@babel/runtime" "^7.3.4" + yargs-parser@20.x: version "20.2.4" resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.4.tgz#b42890f14566796f85ae8e3a25290d205f154a54" From 545f27edaa7b7f65cc6397f19504af2739745f2a Mon Sep 17 00:00:00 2001 From: Brendan Forster Date: Fri, 19 Apr 2019 10:05:03 -0300 Subject: [PATCH 03/48] redirect in-app menu for reporting an issue to the fork (#141) --- app/src/main-process/menu/build-default-menu.ts | 16 ++-------------- 1 file changed, 2 insertions(+), 14 deletions(-) diff --git a/app/src/main-process/menu/build-default-menu.ts b/app/src/main-process/menu/build-default-menu.ts index 4181079f1a7..0d267d56120 100644 --- a/app/src/main-process/menu/build-default-menu.ts +++ b/app/src/main-process/menu/build-default-menu.ts @@ -1,4 +1,4 @@ -import { Menu, ipcMain, shell, app } from 'electron' +import { Menu, ipcMain, shell } from 'electron' import { ensureItemIds } from './ensure-item-ids' import { MenuEvent } from './menu-event' import { truncateWithEllipsis } from '../../lib/truncate-with-ellipsis' @@ -453,22 +453,11 @@ export function buildDefaultMenu({ label: __DARWIN__ ? 'Report Issue…' : 'Report issue…', click() { shell - .openExternal('https://github.com/desktop/desktop/issues/new/choose') + .openExternal('https://github.com/shiftkey/desktop/issues/new/choose') .catch(err => log.error('Failed opening issue creation page', err)) }, } - const contactSupportItem: Electron.MenuItemConstructorOptions = { - label: __DARWIN__ ? 'Contact GitHub Support…' : '&Contact GitHub support…', - click() { - shell - .openExternal( - `https://github.com/contact?from_desktop_app=1&app_version=${app.getVersion()}` - ) - .catch(err => log.error('Failed opening contact support page', err)) - }, - } - const showUserGuides: Electron.MenuItemConstructorOptions = { label: 'Show User Guides', click() { @@ -511,7 +500,6 @@ export function buildDefaultMenu({ const helpItems = [ submitIssueItem, - contactSupportItem, showUserGuides, showKeyboardShortcuts, showLogsItem, From af6c85b8b4c1080739bd1cff47c104f97484594d Mon Sep 17 00:00:00 2001 From: Brendan Forster Date: Thu, 30 May 2019 16:47:05 -0300 Subject: [PATCH 04/48] workaround for Linux users of the app to use it on very low resolution screens --- app/src/main-process/app-window.ts | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/app/src/main-process/app-window.ts b/app/src/main-process/app-window.ts index faf034cb2bf..4f7d8714a5d 100644 --- a/app/src/main-process/app-window.ts +++ b/app/src/main-process/app-window.ts @@ -58,6 +58,12 @@ export class AppWindow { windowOptions.frame = false } else if (__LINUX__) { windowOptions.icon = path.join(__dirname, 'static', 'icon-logo.png') + + // relax restriction here for users trying to run app at a small + // resolution and any other side-effects of dropping this restriction are + // currently unsupported + delete windowOptions.minHeight + delete windowOptions.minWidth } this.window = new BrowserWindow(windowOptions) From 455ba3751938591e7f70833c53782ac597ad685a Mon Sep 17 00:00:00 2001 From: jfgordon2 <55799997+jfgordon2@users.noreply.github.com> Date: Sun, 29 Mar 2020 16:01:51 -0500 Subject: [PATCH 05/48] add CLI support to Debian package, add Elementary OS shell and editor support (#231) --- app/src/cli/open-desktop.ts | 2 ++ app/static/linux/github | 28 ++++++++++++++++++++++++++++ script/linux-after-install.sh | 18 +++++++++++++----- script/linux-after-remove.sh | 4 ++++ 4 files changed, 47 insertions(+), 5 deletions(-) create mode 100644 app/static/linux/github diff --git a/app/src/cli/open-desktop.ts b/app/src/cli/open-desktop.ts index f1cf81a35b8..8223a68edd1 100644 --- a/app/src/cli/open-desktop.ts +++ b/app/src/cli/open-desktop.ts @@ -12,6 +12,8 @@ export function openDesktop(url: string = '') { return ChildProcess.spawn('open', [url], { env }) } else if (__WIN32__) { return ChildProcess.spawn('cmd', ['/c', 'start', url], { env }) + } else if (__LINUX__) { + return ChildProcess.spawn('xdg-open', [url], { env }) } else { throw new Error( `Desktop command line interface not currently supported on platform ${process.platform}` diff --git a/app/static/linux/github b/app/static/linux/github new file mode 100644 index 00000000000..dfb32bf6ea4 --- /dev/null +++ b/app/static/linux/github @@ -0,0 +1,28 @@ +#!/bin/sh + +if [ ! -L "$0" ]; then + # if path is not a symlink, find relatively + GITHUB_PATH=$(dirname "$(dirname "$(dirname "$(dirname "$0")")")") +else + if command -v readlink >/dev/null; then + # if readlink exists, follow the symlink and then find relatively + SYMLINK=$(readlink -f "$0") + GITHUB_PATH=$(dirname "$(dirname "$(dirname "$(dirname "$SYMLINK")")")") + else + # else use the standard install location + GITHUB_PATH="/opt/GitHub Desktop" + fi +fi +# check if this is a dev install or standard +if [ -f "$GITHUB_PATH/github-desktop-dev" ]; then + BINARY_NAME="github-desktop-dev" +else + BINARY_NAME="github-desktop" +fi + +ELECTRON="$GITHUB_PATH/$BINARY_NAME" +CLI="$GITHUB_PATH/resources/app/cli.js" + +ELECTRON_RUN_AS_NODE=1 "$ELECTRON" "$CLI" "$@" + +exit $? diff --git a/script/linux-after-install.sh b/script/linux-after-install.sh index b6f0a7d1f0c..204b930b83d 100644 --- a/script/linux-after-install.sh +++ b/script/linux-after-install.sh @@ -4,13 +4,21 @@ set -e PROFILE_D_FILE="/etc/profile.d/github-desktop.sh" INSTALL_DIR="/opt/${productFilename}" -SCRIPT=$"#!/bin/sh -export PATH=\"$INSTALL_DIR:\$PATH\"" +CLI_DIR="$INSTALL_DIR/resources/app/static" case "$1" in configure) - echo "$SCRIPT" > "${PROFILE_D_FILE}"; - . "${PROFILE_D_FILE}"; + # add executable permissions for CLI interface + chmod +x "$CLI_DIR"/github || : + # check if this is a dev install or standard + if [ -f "$INSTALL_DIR/github-desktop-dev" ]; then + BINARY_NAME="github-desktop-dev" + else + BINARY_NAME="github-desktop" + fi + # create symbolic links to /usr/bin directory + ln -f -s "$INSTALL_DIR"/$BINARY_NAME /usr/bin || : + ln -f -s "$CLI_DIR"/github /usr/bin || : ;; abort-upgrade|abort-remove|abort-deconfigure) @@ -22,4 +30,4 @@ case "$1" in ;; esac -exit 0 +exit 0 \ No newline at end of file diff --git a/script/linux-after-remove.sh b/script/linux-after-remove.sh index 9a73886e2a5..64c0803dec3 100644 --- a/script/linux-after-remove.sh +++ b/script/linux-after-remove.sh @@ -8,6 +8,10 @@ case "$1" in echo "#!/bin/sh" > "${PROFILE_D_FILE}"; . "${PROFILE_D_FILE}"; rm "${PROFILE_D_FILE}"; + # remove symbolic links in /usr/bin directory + unlink /usr/bin/github-desktop || : + unlink /usr/bin/github-desktop-dev || : + unlink /usr/bin/github || : ;; *) From 45c3b7ffdfcfa44631bf4582d11ecb8d3f8f1ac8 Mon Sep 17 00:00:00 2001 From: jfgordon2 <55799997+jfgordon2@users.noreply.github.com> Date: Mon, 30 Mar 2020 12:06:52 -0500 Subject: [PATCH 06/48] polish About modal for Linux build (#241) Updated the "About GitHub Desktop" model to remove the button to check for updates (since it didn't do anything on Linux) and replace with a link to the linux releases page --- app/src/ui/about/about.tsx | 20 ++++++++++++++++++-- app/src/ui/lib/releases.ts | 2 ++ 2 files changed, 20 insertions(+), 2 deletions(-) diff --git a/app/src/ui/about/about.tsx b/app/src/ui/about/about.tsx index faa7e42c7ff..81a58103a26 100644 --- a/app/src/ui/about/about.tsx +++ b/app/src/ui/about/about.tsx @@ -14,7 +14,7 @@ import { Disposable } from 'event-kit' import { Loading } from '../lib/loading' import { RelativeTime } from '../relative-time' import { assertNever } from '../../lib/fatal-error' -import { ReleaseNotesUri } from '../lib/releases' +import { ReleaseNotesUri, LinuxReleasesUri } from '../lib/releases' import { encodePathAsUrl } from '../../lib/path' const logoPath = __DARWIN__ @@ -102,6 +102,17 @@ export class About extends React.Component { return null } + if (__LINUX__) { + const linuxReleaseLink = ( + View Releases + ) + return ( + +

{linuxReleaseLink}

+
+ ) + } + const updateStatus = this.state.updateState.status switch (updateStatus) { @@ -177,7 +188,12 @@ export class About extends React.Component { private renderUpdateDetails() { if (__LINUX__) { - return null + return ( +

+ Please visit the GitHub Desktop for Linux release page for + Linux-specific release notes and to download the latest version. +

+ ) } if ( diff --git a/app/src/ui/lib/releases.ts b/app/src/ui/lib/releases.ts index 958ccad3722..ba088f73374 100644 --- a/app/src/ui/lib/releases.ts +++ b/app/src/ui/lib/releases.ts @@ -2,3 +2,5 @@ export const ReleaseNotesUri = __RELEASE_CHANNEL__ === 'beta' ? 'https://desktop.github.com/release-notes/?env=beta' : 'https://desktop.github.com/release-notes/' + +export const LinuxReleasesUri = 'https://github.com/shiftkey/desktop/releases/' From cd12c6b0579f55497ddf1c51032802605a90735c Mon Sep 17 00:00:00 2001 From: jfgordon2 <55799997+jfgordon2@users.noreply.github.com> Date: Mon, 30 Mar 2020 12:23:37 -0500 Subject: [PATCH 07/48] Detach CLI process from terminal (#239) --- app/static/linux/github | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/app/static/linux/github b/app/static/linux/github index dfb32bf6ea4..0f7513eb244 100644 --- a/app/static/linux/github +++ b/app/static/linux/github @@ -23,6 +23,13 @@ fi ELECTRON="$GITHUB_PATH/$BINARY_NAME" CLI="$GITHUB_PATH/resources/app/cli.js" -ELECTRON_RUN_AS_NODE=1 "$ELECTRON" "$CLI" "$@" +case $1 in + # if help in the first variable, return contents to shell + *help*|*--help*) + ELECTRON_RUN_AS_NODE=1 "$ELECTRON" "$CLI" "$@";; + # any other, redirect to /dev/null to detach from controlling terminal + *) + ELECTRON_RUN_AS_NODE=1 "$ELECTRON" "$CLI" "$@" < /dev/null > /dev/null &;; +esac exit $? From 1dee5a28c0c09b54ef6c17d9bd70e6381418efb0 Mon Sep 17 00:00:00 2001 From: Brendan Forster Date: Mon, 6 Apr 2020 12:07:26 -0300 Subject: [PATCH 08/48] restore mixins to enable Linux-specific stylings (#247) --- app/styles/mixins/_platform.scss | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/app/styles/mixins/_platform.scss b/app/styles/mixins/_platform.scss index 0191bdd2dcc..b3c7bd55584 100644 --- a/app/styles/mixins/_platform.scss +++ b/app/styles/mixins/_platform.scss @@ -41,3 +41,25 @@ @content; } } + +// A mixin which takes a content block that should only +// be applied when the current (real or emulated) operating +// system is Linux. +// +// This helper mixin is useful in so far that it allows us +// to keep platform specific styles next to cross-platform +// styles instead of splitting them out and possibly forgetting +// about them. +@mixin linux { + body.platform-linux & { + @content; + } +} + +// An exact copy of the linux mixin except that it allows for +// writing base-level rules +@mixin linux-context { + body.platform-linux { + @content; + } +} From aed255c1bfd4a660db87c7db9528495914c7903f Mon Sep 17 00:00:00 2001 From: jfgordon2 <55799997+jfgordon2@users.noreply.github.com> Date: Thu, 2 Apr 2020 07:54:48 -0500 Subject: [PATCH 09/48] improve scrollbars when using dark theme (#240) * Theme Scrollbars Updated scrollbars to match windows webkit styling for both light and dark mode * Update _scroll.scss Separating linux from win32 reference, in case we want to adjust for the future and not impact the other * Updated Scroll Color and Docs Adding color change to dark theme scroll bars merged upstream, and updating documentation related to editor and shell updates --- app/styles/_variables.scss | 7 +++--- app/styles/themes/_dark.scss | 12 ++++----- app/styles/ui/_scroll.scss | 37 ++++++++++++++++++++++++++++ docs/technical/editor-integration.md | 7 +++--- docs/technical/shell-integration.md | 12 +++++++++ 5 files changed, 63 insertions(+), 12 deletions(-) diff --git a/app/styles/_variables.scss b/app/styles/_variables.scss index ad3db282b2b..e1e0d0b69d1 100644 --- a/app/styles/_variables.scss +++ b/app/styles/_variables.scss @@ -78,7 +78,7 @@ $overlay-background-color: rgba(0, 0, 0, 0.4); * Background color for custom scroll bars. * The color is applied to the thumb part of the scrollbar. * - * Note: Only applies to win32 platforms + * Note: Only applies to win32 and linux platforms */ --scroll-bar-thumb-background-color: rgba(0, 0, 0, 0.2); @@ -86,7 +86,7 @@ $overlay-background-color: rgba(0, 0, 0, 0.4); * Background color for custom scroll bars in their active state. * The color is applied to the thumb part of the scrollbar. * - * Note: Only applies to win32 platforms + * Note: Only applies to win32 and linux platforms */ --scroll-bar-thumb-background-color-active: rgba(0, 0, 0, 0.5); @@ -277,8 +277,9 @@ $overlay-background-color: rgba(0, 0, 0, 0.4); --list-item-selected-active-badge-background-color: #{$white}; --list-item-hover-background-color: #{$gray-100}; - /** Win32 has custom scrol bars, see _scroll.scss */ + /** Windows/Linux have custom scrollbars, see _scroll.scss */ --win32-scroll-bar-size: 10px; + --linux-scroll-bar-size: 10px; /** * The z-index for popups. Nothing should be higher, but other z-indexes can diff --git a/app/styles/themes/_dark.scss b/app/styles/themes/_dark.scss index 391b652585e..503883dfb4a 100644 --- a/app/styles/themes/_dark.scss +++ b/app/styles/themes/_dark.scss @@ -45,16 +45,16 @@ body.theme-dark { * Background color for custom scroll bars. * The color is applied to the thumb part of the scrollbar. * - * Note: Only applies to win32 platforms + * Note: Only applies to win32 and linux platforms */ --scroll-bar-thumb-background-color: rgba(255, 255, 255, 0.2); /** - * Background color for custom scroll bars in their active state. - * The color is applied to the thumb part of the scrollbar. - * - * Note: Only applies to win32 platforms - */ + * Background color for custom scroll bars in their active state. + * The color is applied to the thumb part of the scrollbar. + * + * Note: Only applies to win32 and linux platforms + */ --scroll-bar-thumb-background-color-active: rgba(255, 255, 255, 0.5); // Box diff --git a/app/styles/ui/_scroll.scss b/app/styles/ui/_scroll.scss index 30f477b7296..6d7f5152e77 100644 --- a/app/styles/ui/_scroll.scss +++ b/app/styles/ui/_scroll.scss @@ -59,3 +59,40 @@ } } } + +@include linux-context { + // Linux scrollbars need styled, too + ::-webkit-scrollbar { + width: var(--linux-scroll-bar-size); + height: var(--linux-scroll-bar-size); + background: transparent; + cursor: pointer; + + &-thumb { + background-color: var(--scroll-bar-thumb-background-color); + border-radius: var(--linux-scroll-bar-size); + + // This little hack allows us to have a slim scroll bar + // with a bigger hit area. The scroll bar width/height + // is 10px but we're cutting off 6px using clipping so + // that it appears as if it's actually only 4px. + border-color: transparent; + border-style: solid; + border-width: 3px; + background-clip: padding-box; + + // ...and when it's pressed we'll up the contrast + &:active { + background-color: var(--scroll-bar-thumb-background-color-active); + } + + // When someone hovers over, or presses the bar we'll expand it to 8px + &:hover, + &:active { + border-width: 1px; + background-color: var(--scroll-bar-thumb-background-color-active); + cursor: pointer; + } + } + } +} diff --git a/docs/technical/editor-integration.md b/docs/technical/editor-integration.md index a933259d919..ec8aa368710 100644 --- a/docs/technical/editor-integration.md +++ b/docs/technical/editor-integration.md @@ -75,7 +75,7 @@ wishes to uninstall. These entries are used by GitHub Desktop to identify relevant programs and where they can be located. The registry locations for each editor are listed in the `registryKeys` -property. Some editors support multiple install locations, but are structurally +property. Some editors support multiple install locations, but are structurally the same (for example 64-bit or 32-bit application, or stable and developer channels). @@ -116,7 +116,7 @@ is the key that Desktop needs to read the registry and find the installation for As seen in the example above, you can use the following helper functions to enumerate the uninstall keys: - - `LocalMachineUninstallKey` for keys in + - `LocalMachineUninstallKey` for keys in `HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall` - `Wow64LocalMachineUninstallKey` for keys in `HKEY_LOCAL_MACHINE\\SOFTWARE\\WOW6432Node\\Microsoft\\Windows\\CurrentVersion\\Uninstall` @@ -258,7 +258,7 @@ The `CFBundleIdentifier` value in the plist is what applications use to uniquely identify themselves, for example `com.github.GitHubClient` is the identifier for GitHub Desktop. -To find the bundle identifier for an application, using `PhpStorm` as an example, +To find the bundle identifier for an application, using `PhpStorm` as an example, run `defaults read /Applications/PhpStorm.app/Contents/Info CFBundleIdentifier`. With this bundle identifier, GitHub Desktop can obtain the install location of @@ -292,6 +292,7 @@ These editors are currently supported: - [Sublime Text](https://www.sublimetext.com/) - [Typora](https://typora.io/) - [SlickEdit](https://www.slickedit.com) + - [Code](https://github.com/elementary/code) These are defined in a list at the top of the file: diff --git a/docs/technical/shell-integration.md b/docs/technical/shell-integration.md index ae8b2dde33f..b3f85d87a51 100644 --- a/docs/technical/shell-integration.md +++ b/docs/technical/shell-integration.md @@ -252,6 +252,8 @@ These shells are currently supported: - [Konsole](https://konsole.kde.org/) - [XTerm](http://invisible-island.net/xterm/) - [Terminology](https://www.enlightenment.org/docs/apps/terminology.md) + - [Deepin Terminal](https://www.deepin.org/en/original/deepin-terminal/) + - [Elementary Terminal](https://github.com/elementary/terminal) These are defined in an enum at the top of the file: @@ -265,6 +267,8 @@ export enum Shell { Konsole = 'Konsole', Xterm = 'XTerm', Terminology = 'Terminology', + Deepin = 'Deepin Terminal', + Elementary = 'Elementary Terminal', } ``` @@ -299,6 +303,8 @@ export async function getAvailableShells(): Promise< konsolePath, xtermPath, terminologyPath, + deepinPath, + elementaryPath, ] = await Promise.all([ getShellPath(Shell.Gnome), getShellPath(Shell.Mate), @@ -308,6 +314,8 @@ export async function getAvailableShells(): Promise< getShellPath(Shell.Konsole), getShellPath(Shell.Xterm), getShellPath(Shell.Terminology), + getShellPath(Shell.Deepin), + getShellPath(Shell.Elementary), ]) ... @@ -344,6 +352,10 @@ export function launch( return spawn(foundShell.path, ['-e', '/bin/bash'], { cwd: path }) case Shell.Terminology: return spawn(foundShell.path, ['-d', path]) + case Shell.Deepin: + return spawn(foundShell.path, ['-w', path]) + case Shell.Elementary: + return spawn(foundShell.path, ['-w', path]) default: return assertNever(shell, `Unknown shell: ${shell}`) } From 9e33fb4bbb20df11eb418646c7329d51ca833c74 Mon Sep 17 00:00:00 2001 From: Jeff Gordon Date: Tue, 14 Apr 2020 05:02:06 -0500 Subject: [PATCH 10/48] Added test for symlinks Reduce errors produced in terminal from debian package installations by testing for existence of symlink prior to executing unlink --- script/linux-after-remove.sh | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/script/linux-after-remove.sh b/script/linux-after-remove.sh index 64c0803dec3..d85b3eb28e8 100644 --- a/script/linux-after-remove.sh +++ b/script/linux-after-remove.sh @@ -2,6 +2,7 @@ set -e PROFILE_D_FILE="/etc/profile.d/github-desktop.sh" +BASE_FILE="/usr/bin/github" case "$1" in purge|remove|upgrade|failed-upgrade|abort-install|abort-upgrade|disappear) @@ -9,9 +10,9 @@ case "$1" in . "${PROFILE_D_FILE}"; rm "${PROFILE_D_FILE}"; # remove symbolic links in /usr/bin directory - unlink /usr/bin/github-desktop || : - unlink /usr/bin/github-desktop-dev || : - unlink /usr/bin/github || : + test -f ${BASE_FILE} && unlink ${BASE_FILE} + test -f ${BASE_FILE}-desktop && unlink ${BASE_FILE}-desktop + test -f ${BASE_FILE}-desktop-dev && unlink ${BASE_FILE}-desktop-dev ;; *) From 3e9c53f02908991b7e5f22f4afd859bf10e598a4 Mon Sep 17 00:00:00 2001 From: Brendan Forster Date: Thu, 16 Apr 2020 13:43:46 -0300 Subject: [PATCH 11/48] set filemode for chrome-sandbox to reflect the permissions it needs (#254) --- script/package.ts | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/script/package.ts b/script/package.ts index 3c8737c9088..8388eb9b7dc 100644 --- a/script/package.ts +++ b/script/package.ts @@ -178,6 +178,14 @@ function generateChecksums() { } function packageLinux() { + const helperPath = path.join(getDistPath(), 'chrome-sandbox') + const exists = fs.pathExistsSync(helperPath) + + if (exists) { + console.log('Updating file mode for chrome-sandbox…') + fs.chmodSync(helperPath, 0o4755) + } + const electronBuilder = path.resolve( __dirname, '..', From b8a9f0510ba8b54bcb98ad353dd7d7a5a22188ac Mon Sep 17 00:00:00 2001 From: Brendan Forster Date: Thu, 23 Apr 2020 14:05:20 -0300 Subject: [PATCH 12/48] move debian packaging out to dedicated step (#263) --- package.json | 3 + script/electron-builder-linux.yml | 17 --- script/package-debian.ts | 105 +++++++++++++++++ script/package-electron-builder.ts | 68 +++++++++++ script/package.ts | 70 ++++-------- .../deb/postinst.sh} | 4 +- .../deb/postrm.sh} | 0 yarn.lock | 108 +++++++++++++++++- 8 files changed, 309 insertions(+), 66 deletions(-) create mode 100644 script/package-debian.ts create mode 100644 script/package-electron-builder.ts rename script/{linux-after-install.sh => resources/deb/postinst.sh} (94%) mode change 100644 => 100755 rename script/{linux-after-remove.sh => resources/deb/postrm.sh} (100%) mode change 100644 => 100755 diff --git a/package.json b/package.json index 1127393d8ff..3e37fe0757c 100644 --- a/package.json +++ b/package.json @@ -174,5 +174,8 @@ "electron-builder": "^22.7.0", "electron-packager": "^15.1.0", "electron-winstaller": "^5.0.0" + }, + "optionalDependencies": { + "electron-installer-debian": "3.0.0" } } diff --git a/script/electron-builder-linux.yml b/script/electron-builder-linux.yml index 7145ed5050e..13c6eacff7a 100644 --- a/script/electron-builder-linux.yml +++ b/script/electron-builder-linux.yml @@ -7,26 +7,9 @@ linux: - x-scheme-handler/x-github-client - x-scheme-handler/x-github-desktop-auth target: - - deb - rpm - AppImage maintainer: 'GitHub, Inc ' -deb: - afterInstall: './script/linux-after-install.sh' - afterRemove: './script/linux-after-remove.sh' - depends: - # default Electron dependencies - - gconf2 - - gconf-service - - libnotify4 - - libappindicator1 - - libxtst6 - - libnss3 - # dugite-native dependencies - - libcurl3 | libcurl4 - # keytar dependencies - - libsecret-1-0 - - gnome-keyring rpm: depends: # default Electron dependencies diff --git a/script/package-debian.ts b/script/package-debian.ts new file mode 100644 index 00000000000..b6df4eb96f3 --- /dev/null +++ b/script/package-debian.ts @@ -0,0 +1,105 @@ +import { promisify } from 'util' +import { join } from 'path' + +import glob = require('glob') +const globPromise = promisify(glob) + +import { rename } from 'fs-extra' + +import { getVersion } from '../app/package-info' +import { getDistPath, getDistRoot } from './dist-info' + +const distRoot = getDistRoot() + +// best guess based on documentation +type DebianOptions = { + // required + src: string + dest: string + arch: 'amd64' | 'i386' | 'arm64' + // optional + description?: string + productDescription?: string + categories?: Array + section?: string + priority?: 'required' | 'important' | 'standard' | 'optional' | 'extra' + homepage?: string + icon?: any + scripts?: { + preinst?: string + postinst?: string + prerm?: string + postrm?: string + } + mimeType?: Array + maintainer?: string + depends?: Array +} + +const options: DebianOptions = { + src: getDistPath(), + dest: distRoot, + arch: 'amd64', + description: 'Simple collaboration from your desktop', + productDescription: + 'This is the unofficial port of GitHub Desktop for Linux distributions', + section: 'GNOME;GTK;Development', + priority: 'extra', + homepage: 'https://github.com/shiftkey/desktop', + depends: [ + // additional core dependencies - are these still needed? + 'gconf2', + 'gconf-service', + 'libappindicator1', + // Desktop-specific dependencies + 'libcurl3 | libcurl4', + 'libsecret-1-0', + 'gnome-keyring', + ], + icon: { + '256x256': 'app/static/logos/256x256.png', + '512x512': 'app/static/logos/512x512.png', + '1024x1024': 'app/static/logos/1024x1024.png', + }, + scripts: { + postinst: 'script/resources/deb/postinst.sh', + postrm: 'script/resources/deb/postrm.sh', + }, + mimeType: [ + 'x-scheme-handler/x-github-client', + 'x-scheme-handler/x-github-desktop-auth', + // workaround for handling OAuth flow until we figure out what we're doing + // with the development OAuth details + // + // see https://github.com/shiftkey/desktop/issues/72 for more details + 'x-scheme-handler/x-github-desktop-dev-auth', + ], + maintainer: 'Brendan Forster ', +} + +export async function packageDebian(): Promise { + if (process.platform === 'win32') { + return Promise.reject('Windows is not supported') + } + + const installer = require('electron-installer-debian') + + await installer(options) + const installersPath = `${distRoot}/github-desktop*.deb` + + const files = await globPromise(installersPath) + + if (files.length !== 1) { + return Promise.reject( + `Expected one file but instead found '${files.join(', ')}' - exiting...` + ) + } + + const oldPath = files[0] + + const newFileName = `GitHubDesktop-linux-${getVersion()}.deb` + const newPath = join(distRoot, newFileName) + await rename(oldPath, newPath) + + return Promise.resolve(newPath) +} diff --git a/script/package-electron-builder.ts b/script/package-electron-builder.ts new file mode 100644 index 00000000000..daba1973377 --- /dev/null +++ b/script/package-electron-builder.ts @@ -0,0 +1,68 @@ +/* eslint-disable no-sync */ + +import * as path from 'path' +import * as cp from 'child_process' +import { promisify } from 'util' + +import glob = require('glob') +const globPromise = promisify(glob) + +import { getDistPath, getDistRoot } from './dist-info' + +export async function packageElectronBuilder(): Promise> { + const distPath = getDistPath() + const distRoot = getDistRoot() + + const electronBuilder = path.resolve( + __dirname, + '..', + 'node_modules', + '.bin', + 'electron-builder' + ) + + const configPath = path.resolve(__dirname, 'electron-builder-linux.yml') + + const args = [ + 'build', + '--prepackaged', + distPath, + '--x64', + '--config', + configPath, + ] + + const { error } = cp.spawnSync(electronBuilder, args, { stdio: 'inherit' }) + + if (error != null) { + return Promise.reject(error) + } + + const appImageInstaller = `${distRoot}/GitHubDesktop-linux-*.AppImage` + + let files = await globPromise(appImageInstaller) + if (files.length !== 1) { + return Promise.reject( + `Expected one AppImage installer but instead found '${files.join( + ', ' + )}' - exiting...` + ) + } + + const appImageInstallerPath = files[0] + + const rpmInstaller = `${distRoot}/GitHubDesktop-linux-*.rpm` + + files = await globPromise(rpmInstaller) + if (files.length !== 1) { + return Promise.reject( + `Expected one RPM installer but instead found '${files.join( + ', ' + )}' - exiting...` + ) + } + + const rpmInstallerPath = files[0] + + return Promise.resolve([appImageInstallerPath, rpmInstallerPath]) +} diff --git a/script/package.ts b/script/package.ts index 8388eb9b7dc..e4b7247d5ce 100644 --- a/script/package.ts +++ b/script/package.ts @@ -6,8 +6,6 @@ import * as path from 'path' import * as electronInstaller from 'electron-winstaller' import * as crypto from 'crypto' -import glob = require('glob') - import { getProductName, getCompanyName } from '../app/package-info' import { getDistPath, @@ -22,6 +20,9 @@ import { } from './dist-info' import { isAppveyor, isGitHubActions } from './build-platforms' +import { packageElectronBuilder } from './package-electron-builder' +import { packageDebian } from './package-debian' + const distPath = getDistPath() const productName = getProductName() const outputDir = path.join(distPath, '..', 'installer') @@ -147,37 +148,29 @@ function getSha256Checksum(fullPath: string): Promise { }) } -function generateChecksums() { +async function generateChecksums(files: Array) { const distRoot = getDistRoot() - const installersPath = `${distRoot}/GitHubDesktop-linux-*` - - glob(installersPath, async (error, files) => { - if (error != null) { - throw error - } + const checksums = new Map() - const checksums = new Map() - - for (const f of files) { - const checksum = await getSha256Checksum(f) - checksums.set(f, checksum) - } + for (const f of files) { + const checksum = await getSha256Checksum(f) + checksums.set(f, checksum) + } - let checksumsText = `Checksums: \n` + let checksumsText = `Checksums: \n` - for (const [fullPath, checksum] of checksums) { - const fileName = path.basename(fullPath) - checksumsText += `${checksum} - ${fileName}\n` - } + for (const [fullPath, checksum] of checksums) { + const fileName = path.basename(fullPath) + checksumsText += `${checksum} - ${fileName}\n` + } - const checksumFile = path.join(distRoot, 'checksums.txt') + const checksumFile = path.join(distRoot, 'checksums.txt') - fs.writeFile(checksumFile, checksumsText) - }) + await fs.writeFile(checksumFile, checksumsText) } -function packageLinux() { +async function packageLinux() { const helperPath = path.join(getDistPath(), 'chrome-sandbox') const exists = fs.pathExistsSync(helperPath) @@ -186,30 +179,15 @@ function packageLinux() { fs.chmodSync(helperPath, 0o4755) } - const electronBuilder = path.resolve( - __dirname, - '..', - 'node_modules', - '.bin', - 'electron-builder' - ) - - const configPath = path.resolve(__dirname, 'electron-builder-linux.yml') - - const args = [ - 'build', - '--prepackaged', - distPath, - '--x64', - '--config', - configPath, - ] + const files = await packageElectronBuilder() + const debianPackage = await packageDebian() - const { error } = cp.spawnSync(electronBuilder, args, { stdio: 'inherit' }) + const installers = [...files, debianPackage] - if (error != null) { - throw error + console.log(`Installers created:`) + for (const installer of installers) { + console.log(` - ${installer}`) } - generateChecksums() + generateChecksums(installers) } diff --git a/script/linux-after-install.sh b/script/resources/deb/postinst.sh old mode 100644 new mode 100755 similarity index 94% rename from script/linux-after-install.sh rename to script/resources/deb/postinst.sh index 204b930b83d..79081967042 --- a/script/linux-after-install.sh +++ b/script/resources/deb/postinst.sh @@ -3,7 +3,7 @@ set -e PROFILE_D_FILE="/etc/profile.d/github-desktop.sh" -INSTALL_DIR="/opt/${productFilename}" +INSTALL_DIR="/usr/lib/github-desktop" CLI_DIR="$INSTALL_DIR/resources/app/static" case "$1" in @@ -30,4 +30,4 @@ case "$1" in ;; esac -exit 0 \ No newline at end of file +exit 0 diff --git a/script/linux-after-remove.sh b/script/resources/deb/postrm.sh old mode 100644 new mode 100755 similarity index 100% rename from script/linux-after-remove.sh rename to script/resources/deb/postrm.sh diff --git a/yarn.lock b/yarn.lock index 912416a2c66..a43c89d541a 100644 --- a/yarn.lock +++ b/yarn.lock @@ -579,6 +579,13 @@ "@types/yargs" "^15.0.0" chalk "^4.0.0" +"@malept/cross-spawn-promise@^1.0.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@malept/cross-spawn-promise/-/cross-spawn-promise-1.1.0.tgz#258fde4098f5004a56db67c35f33033af64810f6" + integrity sha512-GeIK5rfU1Yd7BZJQPTGZMMmcZy5nhRToPXZcjaDwQDRSewdhp648GT2E4dh+L7+Io7AOW6WQ+GR44QSzja4qxg== + dependencies: + cross-spawn "^7.0.1" + "@primer/octicons@^10.0.0": version "10.0.0" resolved "https://registry.yarnpkg.com/@primer/octicons/-/octicons-10.0.0.tgz#81e94ed32545dfd3472c8625a5b345f3ea4c153d" @@ -3495,6 +3502,15 @@ cross-spawn@^7.0.0, cross-spawn@^7.0.2: shebang-command "^2.0.0" which "^2.0.1" +cross-spawn@^7.0.1: + version "7.0.2" + resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.2.tgz#d0d7dcfa74e89115c7619f4f721a94e1fdb716d6" + integrity sha512-PD6G8QG3S4FK/XCGFbEQrDqO2AnMMsy0meR7lerlIOHAAbkuavGU/pOqprrlvfTNjvowivTeBsjebAL0NSoMxw== + dependencies: + path-key "^3.1.0" + shebang-command "^2.0.0" + which "^2.0.1" + cryptiles@3.x.x: version "3.1.2" resolved "https://registry.yarnpkg.com/cryptiles/-/cryptiles-3.1.2.tgz#a89fbb220f5ce25ec56e8c4aa8a4fd7b5b0d29fe" @@ -4075,6 +4091,34 @@ electron-chromedriver@^11.0.0: "@electron/get" "^1.12.2" extract-zip "^2.0.0" +electron-installer-common@^0.10.0: + version "0.10.1" + resolved "https://registry.yarnpkg.com/electron-installer-common/-/electron-installer-common-0.10.1.tgz#42738f140c15270758681ac3f32039430b9fc023" + integrity sha512-d9gEXhfSSyMn8mkFNdbUdkqdLkxVZ8nO3NDso3nuSnG1+wy7cJuuCjutwR4+zsXdQuNFC1n/DxpTk4pBLZSCTQ== + dependencies: + "@malept/cross-spawn-promise" "^1.0.0" + asar "^2.0.1" + debug "^4.1.1" + fs-extra "^8.0.1" + glob "^7.1.4" + lodash "^4.17.15" + parse-author "^2.0.0" + semver "^7.1.1" + tmp-promise "^2.0.1" + +electron-installer-debian@3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/electron-installer-debian/-/electron-installer-debian-3.0.0.tgz#abd76db8e89bc1ba1e5366975a941461dda06e6d" + integrity sha512-91iiicfK5hq6D6Xit7SFCN2GpccFBQbZB1JpYaxFdaueEjM/1hSULtCPf4e5w/2vQKZ73AfBZrxxIJqO3DhGPw== + dependencies: + debug "^4.1.1" + electron-installer-common "^0.10.0" + fs-extra "^8.0.1" + get-folder-size "^2.0.1" + lodash "^4.17.4" + word-wrap "^1.2.3" + yargs "^15.0.1" + electron-notarize@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/electron-notarize/-/electron-notarize-1.0.0.tgz#bc925b1ccc3f79e58e029e8c4706572b01a9fd8f" @@ -5069,7 +5113,7 @@ fs-extra@^7.0.1: jsonfile "^4.0.0" universalify "^0.1.0" -fs-extra@^8.1.0: +fs-extra@^8.0.1, fs-extra@^8.1.0: version "8.1.0" resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-8.1.0.tgz#49d43c45a88cd9677668cb7be1b46efdb8d2e1c0" integrity sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g== @@ -5149,6 +5193,11 @@ galactus@^0.2.1: flora-colossus "^1.0.0" fs-extra "^4.0.0" +gar@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/gar/-/gar-1.0.4.tgz#f777bc7db425c0572fdeb52676172ca1ae9888b8" + integrity sha512-w4n9cPWyP7aHxKxYHFQMegj7WIAsL/YX/C4Bs5Rr8s1H9M1rNtRWRsw+ovYMkXDQ5S4ZbYHsHAPmevPjPgw44w== + gensync@^1.0.0-beta.1: version "1.0.0-beta.2" resolved "https://registry.yarnpkg.com/gensync/-/gensync-1.0.0-beta.2.tgz#32a6ee76c3d7f52d46b2b1ae5d93fea8580a25e0" @@ -5159,6 +5208,14 @@ get-caller-file@^2.0.1: resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== +get-folder-size@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/get-folder-size/-/get-folder-size-2.0.1.tgz#3fe0524dd3bad05257ef1311331417bcd020a497" + integrity sha512-+CEb+GDCM7tkOS2wdMKTn9vU7DgnKUTuDlehkNJKNSovdCOVxs14OfKCk4cvSaR3za4gj+OBdl9opPN9xrJ0zA== + dependencies: + gar "^1.0.4" + tiny-each-async "2.0.3" + get-package-info@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/get-package-info/-/get-package-info-1.0.0.tgz#6432796563e28113cd9474dbbd00052985a4999c" @@ -9597,6 +9654,11 @@ semver@^6.0.0, semver@^6.2.0, semver@^6.3.0: resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== +semver@^7.1.1: + version "7.1.3" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.1.3.tgz#e4345ce73071c53f336445cfc19efb1c311df2a6" + integrity sha512-ekM0zfiA9SCBlsKa2X1hxyxiI4L3B6EbVJkkdgQXnSEEaHlGdvyodMruTiulSRWMMB4NeIuYNMC9rTKTz97GxA== + send@0.17.1: version "0.17.1" resolved "https://registry.yarnpkg.com/send/-/send-0.17.1.tgz#c1d8b059f7900f7466dd4938bdc44e11ddb376c8" @@ -10470,6 +10532,11 @@ timers-browserify@^2.0.4: dependencies: setimmediate "^1.0.4" +tiny-each-async@2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/tiny-each-async/-/tiny-each-async-2.0.3.tgz#8ebbbfd6d6295f1370003fbb37162afe5a0a51d1" + integrity sha1-jru/1tYpXxNwAD+7NxYq/loKUdE= + tmp-promise@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/tmp-promise/-/tmp-promise-1.0.5.tgz#3208d7fa44758f86a2a4c4060f3c33fea30e8038" @@ -10478,6 +10545,13 @@ tmp-promise@^1.0.5: bluebird "^3.5.0" tmp "0.0.33" +tmp-promise@^2.0.1: + version "2.0.2" + resolved "https://registry.yarnpkg.com/tmp-promise/-/tmp-promise-2.0.2.tgz#ee605edb10f100954be5dd8b9dbe1bfd56194202" + integrity sha512-zl71nFWjPKW2KXs+73gEk8RmqvtAeXPxhWDkTUoa3MSMkjq3I+9OeknjF178MQoMYsdqL730hfzvNfEkePxq9Q== + dependencies: + tmp "0.1.0" + tmp@0.0.33: version "0.0.33" resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.33.tgz#6d34335889768d21b2bcda0aa277ced3b1bfadf9" @@ -10485,6 +10559,13 @@ tmp@0.0.33: dependencies: os-tmpdir "~1.0.2" +tmp@0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.1.0.tgz#ee434a4e22543082e294ba6201dcc6eafefa2877" + integrity sha512-J7Z2K08jbGcdA1kkQpJSqLF6T0tdQqpR2pnSUXsIchbPdTI9v3e85cLW0d6WDhwuAleOV71j2xWs8qMPfK7nKw== + dependencies: + rimraf "^2.6.3" + tmpl@1.0.x: version "1.0.4" resolved "https://registry.yarnpkg.com/tmpl/-/tmpl-1.0.4.tgz#23640dd7b42d00433911140820e5cf440e521dd1" @@ -11645,6 +11726,14 @@ yargs-parser@20.x: resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.4.tgz#b42890f14566796f85ae8e3a25290d205f154a54" integrity sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA== +yargs-parser@^18.1.1: + version "18.1.2" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-18.1.2.tgz#2f482bea2136dbde0861683abea7756d30b504f1" + integrity sha512-hlIPNR3IzC1YuL1c2UwwDKpXlNFBqD1Fswwh1khz5+d8Cq/8yc/Mn0i+rQXduu8hcrFKvO7Eryk+09NecTQAAQ== + dependencies: + camelcase "^5.0.0" + decamelize "^1.2.0" + yargs-parser@^18.1.2: version "18.1.3" resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-18.1.3.tgz#be68c4975c6b2abf469236b0c870362fab09a7b0" @@ -11658,6 +11747,23 @@ yargs-parser@^19.0.1: resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-19.0.4.tgz#99183a3a59268b205c6b04177f2a5bfb46e79ba7" integrity sha512-eXeQm7yXRjPFFyf1voPkZgXQZJjYfjgQUmGPbD2TLtZeIYzvacgWX7sQ5a1HsRgVP+pfKAkRZDNtTGev4h9vhw== +yargs@^15.0.1: + version "15.3.1" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-15.3.1.tgz#9505b472763963e54afe60148ad27a330818e98b" + integrity sha512-92O1HWEjw27sBfgmXiixJWT5hRBp2eobqXicLtPBIDBhYB+1HpwZlXmbW2luivBJHBzki+7VyCLRtAkScbTBQA== + dependencies: + cliui "^6.0.0" + decamelize "^1.2.0" + find-up "^4.1.0" + get-caller-file "^2.0.1" + require-directory "^2.1.1" + require-main-filename "^2.0.0" + set-blocking "^2.0.0" + string-width "^4.2.0" + which-module "^2.0.0" + y18n "^4.0.0" + yargs-parser "^18.1.1" + yargs@^15.3.1, yargs@^15.4.1: version "15.4.1" resolved "https://registry.yarnpkg.com/yargs/-/yargs-15.4.1.tgz#0d87a16de01aee9d8bec2bfbf74f67851730f4f8" From 22552e252d35eb0fa7586e88b5da03b20885a962 Mon Sep 17 00:00:00 2001 From: Brendan Forster Date: Sun, 17 May 2020 14:42:40 -0300 Subject: [PATCH 13/48] move redhat packaging out to own step (#273) --- package.json | 3 +- script/electron-builder-linux.yml | 1 - script/package-electron-builder.ts | 17 +---- script/package-redhat.ts | 102 +++++++++++++++++++++++++++++ script/package.ts | 22 ++++--- script/resources/rpm/post.sh | 12 ++++ script/resources/rpm/preun.sh | 8 +++ yarn.lock | 14 +++- 8 files changed, 153 insertions(+), 26 deletions(-) create mode 100644 script/package-redhat.ts create mode 100755 script/resources/rpm/post.sh create mode 100755 script/resources/rpm/preun.sh diff --git a/package.json b/package.json index 3e37fe0757c..4f04540dafa 100644 --- a/package.json +++ b/package.json @@ -176,6 +176,7 @@ "electron-winstaller": "^5.0.0" }, "optionalDependencies": { - "electron-installer-debian": "3.0.0" + "electron-installer-debian": "3.0.0", + "electron-installer-redhat": "3.0.0" } } diff --git a/script/electron-builder-linux.yml b/script/electron-builder-linux.yml index 13c6eacff7a..96e2de74ad2 100644 --- a/script/electron-builder-linux.yml +++ b/script/electron-builder-linux.yml @@ -7,7 +7,6 @@ linux: - x-scheme-handler/x-github-client - x-scheme-handler/x-github-desktop-auth target: - - rpm - AppImage maintainer: 'GitHub, Inc ' rpm: diff --git a/script/package-electron-builder.ts b/script/package-electron-builder.ts index daba1973377..7b26f48b2b5 100644 --- a/script/package-electron-builder.ts +++ b/script/package-electron-builder.ts @@ -40,7 +40,7 @@ export async function packageElectronBuilder(): Promise> { const appImageInstaller = `${distRoot}/GitHubDesktop-linux-*.AppImage` - let files = await globPromise(appImageInstaller) + const files = await globPromise(appImageInstaller) if (files.length !== 1) { return Promise.reject( `Expected one AppImage installer but instead found '${files.join( @@ -51,18 +51,5 @@ export async function packageElectronBuilder(): Promise> { const appImageInstallerPath = files[0] - const rpmInstaller = `${distRoot}/GitHubDesktop-linux-*.rpm` - - files = await globPromise(rpmInstaller) - if (files.length !== 1) { - return Promise.reject( - `Expected one RPM installer but instead found '${files.join( - ', ' - )}' - exiting...` - ) - } - - const rpmInstallerPath = files[0] - - return Promise.resolve([appImageInstallerPath, rpmInstallerPath]) + return Promise.resolve([appImageInstallerPath]) } diff --git a/script/package-redhat.ts b/script/package-redhat.ts new file mode 100644 index 00000000000..4903be3811d --- /dev/null +++ b/script/package-redhat.ts @@ -0,0 +1,102 @@ +import { promisify } from 'util' +import { join } from 'path' + +import glob = require('glob') +const globPromise = promisify(glob) + +import { rename } from 'fs-extra' + +import { getVersion } from '../app/package-info' +import { getDistPath, getDistRoot } from './dist-info' + +const distRoot = getDistRoot() + +// best guess based on documentation +type RedhatOptions = { + // required + src: string + dest: string + arch: 'x86_64' + // optional + description?: string + productDescription?: string + categories?: Array + icon?: any + scripts?: { + pre?: string + post?: string + preun?: string + postun?: string + } + homepage?: string + mimeType?: Array + requires?: Array +} + +const options: RedhatOptions = { + src: getDistPath(), + dest: distRoot, + arch: 'x86_64', + description: 'Simple collaboration from your desktop', + productDescription: + 'This is the unofficial port of GitHub Desktop for Linux distributions', + categories: ['GNOME', 'GTK', 'Development'], + requires: [ + // default Electron dependencies + 'libXScrnSaver', + 'libappindicator', + 'libX11-xcb', + 'alsa-lib', + // dugite-native dependencies + 'libcurl', + // keytar dependencies + 'libsecret', + 'gnome-keyring', + ], + icon: { + '256x256': 'app/static/logos/256x256.png', + '512x512': 'app/static/logos/512x512.png', + '1024x1024': 'app/static/logos/1024x1024.png', + }, + scripts: { + post: 'script/resources/rpm/post.sh', + preun: 'script/resources/rpm/preun.sh', + }, + homepage: 'https://github.com/shiftkey/desktop', + mimeType: [ + 'x-scheme-handler/x-github-client', + 'x-scheme-handler/x-github-desktop-auth', + // workaround for handling OAuth flow until we figure out what we're doing + // with the development OAuth details + // + // see https://github.com/shiftkey/desktop/issues/72 for more details + 'x-scheme-handler/x-github-desktop-dev-auth', + ], +} + +export async function packageRedhat(): Promise { + if (process.platform === 'win32') { + return Promise.reject('Windows is not supported') + } + + const installer = require('electron-installer-redhat') + + await installer(options) + const installersPath = `${distRoot}/github-desktop*.rpm` + + const files = await globPromise(installersPath) + + if (files.length !== 1) { + return Promise.reject( + `Expected one file but instead found '${files.join(', ')}' - exiting...` + ) + } + + const oldPath = files[0] + + const newFileName = `GitHubDesktop-linux-${getVersion()}.rpm` + const newPath = join(distRoot, newFileName) + await rename(oldPath, newPath) + + return Promise.resolve(newPath) +} diff --git a/script/package.ts b/script/package.ts index e4b7247d5ce..0befa105b58 100644 --- a/script/package.ts +++ b/script/package.ts @@ -22,6 +22,7 @@ import { isAppveyor, isGitHubActions } from './build-platforms' import { packageElectronBuilder } from './package-electron-builder' import { packageDebian } from './package-debian' +import { packageRedhat } from './package-redhat' const distPath = getDistPath() const productName = getProductName() @@ -178,16 +179,21 @@ async function packageLinux() { console.log('Updating file mode for chrome-sandbox…') fs.chmodSync(helperPath, 0o4755) } + try { + const files = await packageElectronBuilder() + const debianPackage = await packageDebian() + const redhatPackage = await packageRedhat() - const files = await packageElectronBuilder() - const debianPackage = await packageDebian() + const installers = [...files, debianPackage, redhatPackage] - const installers = [...files, debianPackage] + console.log(`Installers created:`) + for (const installer of installers) { + console.log(` - ${installer}`) + } - console.log(`Installers created:`) - for (const installer of installers) { - console.log(` - ${installer}`) + generateChecksums(installers) + } catch (err) { + console.error('A problem occurred with the packaging step', err) + process.exit(1) } - - generateChecksums(installers) } diff --git a/script/resources/rpm/post.sh b/script/resources/rpm/post.sh new file mode 100755 index 00000000000..092c75b9d26 --- /dev/null +++ b/script/resources/rpm/post.sh @@ -0,0 +1,12 @@ +#!/bin/bash + +INSTALL_DIR="/usr/lib/github-desktop" +CLI_DIR="$INSTALL_DIR/resources/app/static" + +# add executable permissions for CLI interface +chmod +x "$CLI_DIR"/github || : + +# create symbolic links to /usr/bin directory +ln -f -s "$CLI_DIR"/github /usr/bin || : + +exit 0 diff --git a/script/resources/rpm/preun.sh b/script/resources/rpm/preun.sh new file mode 100755 index 00000000000..fdb0a748a34 --- /dev/null +++ b/script/resources/rpm/preun.sh @@ -0,0 +1,8 @@ +#!/bin/bash + +BASE_FILE="/usr/bin/github" + +# remove symbolic links in /usr/bin directory +test -f ${BASE_FILE} && unlink ${BASE_FILE} + +exit 0 diff --git a/yarn.lock b/yarn.lock index a43c89d541a..b8c28fcfb34 100644 --- a/yarn.lock +++ b/yarn.lock @@ -4119,6 +4119,18 @@ electron-installer-debian@3.0.0: word-wrap "^1.2.3" yargs "^15.0.1" +electron-installer-redhat@3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/electron-installer-redhat/-/electron-installer-redhat-3.0.0.tgz#0a066eb9f9b3e691d58c2b41eea1055e8d5ffa92" + integrity sha512-BtYh174AOIGq0iDges4/fihqJYw8WsWXRKuRpKvUlkqrwfeGMWqln28+kKV5IW6GPfHjRFeCO5dcMUioUDBo1A== + dependencies: + debug "^4.1.1" + electron-installer-common "^0.10.0" + fs-extra "^8.1.0" + lodash "^4.17.15" + word-wrap "^1.2.3" + yargs "^15.1.0" + electron-notarize@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/electron-notarize/-/electron-notarize-1.0.0.tgz#bc925b1ccc3f79e58e029e8c4706572b01a9fd8f" @@ -11764,7 +11776,7 @@ yargs@^15.0.1: y18n "^4.0.0" yargs-parser "^18.1.1" -yargs@^15.3.1, yargs@^15.4.1: +yargs@^15.1.0, yargs@^15.3.1, yargs@^15.4.1: version "15.4.1" resolved "https://registry.yarnpkg.com/yargs/-/yargs-15.4.1.tgz#0d87a16de01aee9d8bec2bfbf74f67851730f4f8" integrity sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A== From 951d6992fdf2cf03bec6d32105c7e7663893c9f2 Mon Sep 17 00:00:00 2001 From: Lukas Neubert <40118727+Serkonda@users.noreply.github.com> Date: Sat, 30 May 2020 22:14:50 +0200 Subject: [PATCH 14/48] readme: add language property to code blocks (#287) --- README.md | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index 2dc7b116118..ac2feb113fd 100644 --- a/README.md +++ b/README.md @@ -31,7 +31,7 @@ the installers for Debian and RPM-based distributions. To setup the package repository, run these commands: -``` +```sh $ wget -qO - https://packagecloud.io/shiftkey/desktop/gpgkey | sudo apt-key add - $ sudo sh -c 'echo "deb [arch=amd64] https://packagecloud.io/shiftkey/desktop/any/ any main" > /etc/apt/sources.list.d/packagecloud-shiftky-desktop.list' $ sudo apt-get update @@ -39,7 +39,7 @@ $ sudo apt-get update Then install GitHub Desktop: -``` +```sh $ sudo apt install github-desktop ``` @@ -47,16 +47,17 @@ $ sudo apt install github-desktop To setup the package repository, run these commands: -``` +```sh $ sudo rpm --import https://packagecloud.io/shiftkey/desktop/gpgkey $ sudo sh -c 'echo -e "[shiftkey]\nname=GitHub Desktop\nbaseurl=https://packagecloud.io/shiftkey/desktop/el/7/\$basearch\nenabled=1\ngpgcheck=0\nrepo_gpgcheck=1\ngpgkey=https://packagecloud.io/shiftkey/desktop/gpgkey" > /etc/yum.repos.d/shiftkey-desktop.repo' ``` Then install GitHub Desktop: -``` +```sh # if yum is your package manager $ sudo yum install github-desktop + # if dnf is your package manager $ sudo dnf install github-desktop ``` From 347a265c54e0f89c4339ae2a52a0195a2554c65d Mon Sep 17 00:00:00 2001 From: Brendan Forster Date: Sun, 31 May 2020 10:10:54 -0300 Subject: [PATCH 15/48] wire up sponsorship details for the repository --- .github/FUNDING.yml | 1 + README.md | 6 ++++-- 2 files changed, 5 insertions(+), 2 deletions(-) create mode 100644 .github/FUNDING.yml diff --git a/.github/FUNDING.yml b/.github/FUNDING.yml new file mode 100644 index 00000000000..6905d384f6a --- /dev/null +++ b/.github/FUNDING.yml @@ -0,0 +1 @@ +github: shiftkey diff --git a/README.md b/README.md index ac2feb113fd..e499b480a1e 100644 --- a/README.md +++ b/README.md @@ -24,8 +24,10 @@ help out with testing on your distribution. ## packagecloud -We are trialing using [PackageCloud](https://packagecloud.io/) for distributing -the installers for Debian and RPM-based distributions. +We use [PackageCloud](https://packagecloud.io/) for distributing +the installers for Debian and RPM-based distributions. These are not free services, +so if you can afford to help with these costs please [**Sponsor**](https://github.com/sponsors/shiftkey) +the project using the link in the header. ### Debian/Ubuntu distributions From eb0409377c24fe56c55a96494e8a039ae6dc4db0 Mon Sep 17 00:00:00 2001 From: Brendan Forster Date: Wed, 24 Jun 2020 13:32:28 -0300 Subject: [PATCH 16/48] drop unnecessary libappindicator dependency for RPM package (#300) --- script/package-redhat.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/script/package-redhat.ts b/script/package-redhat.ts index 4903be3811d..fdf617d0a92 100644 --- a/script/package-redhat.ts +++ b/script/package-redhat.ts @@ -44,7 +44,6 @@ const options: RedhatOptions = { requires: [ // default Electron dependencies 'libXScrnSaver', - 'libappindicator', 'libX11-xcb', 'alsa-lib', // dugite-native dependencies From 3b57b45aadcaaf2bbba368ee2326cda0d33d1ee5 Mon Sep 17 00:00:00 2001 From: Brendan Forster Date: Wed, 24 Jun 2020 13:51:38 -0300 Subject: [PATCH 17/48] run codeql on linux branch (#302) --- .github/workflows/codeql.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/codeql.yml b/.github/workflows/codeql.yml index 72129ee3699..a9db5ef1536 100644 --- a/.github/workflows/codeql.yml +++ b/.github/workflows/codeql.yml @@ -4,6 +4,7 @@ on: push: branches: - development + - linux pull_request: schedule: - cron: '0 19 * * 0' From 64e788db0120f250d4522b2f127727f64bee9542 Mon Sep 17 00:00:00 2001 From: Brendan Forster Date: Mon, 27 Jul 2020 14:42:15 -0300 Subject: [PATCH 18/48] add in libcurl4 as optional dependency for RPM (#315) --- script/package-redhat.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/script/package-redhat.ts b/script/package-redhat.ts index fdf617d0a92..939e576acdf 100644 --- a/script/package-redhat.ts +++ b/script/package-redhat.ts @@ -47,7 +47,7 @@ const options: RedhatOptions = { 'libX11-xcb', 'alsa-lib', // dugite-native dependencies - 'libcurl', + '(libcurl or libcurl4)', // keytar dependencies 'libsecret', 'gnome-keyring', From 3c28748bf3055b50f23c5160fd4193e91cc03be9 Mon Sep 17 00:00:00 2001 From: Dan McCarthy Date: Tue, 4 Aug 2020 07:00:32 -0500 Subject: [PATCH 19/48] allow tilde character when specifying a local repository (#317) There already exists a function that will convert a tilde path to an absolute path. It was originally used for this purpose, but the functionality was removed during a commit that changed which function was used to validate git repositories. This reinstates that functionality and allows us to type a ~/ tilde path to get our home directories when typing in a path. --- app/src/ui/add-repository/add-existing-repository.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/ui/add-repository/add-existing-repository.tsx b/app/src/ui/add-repository/add-existing-repository.tsx index 4dca558d29f..23383bfd0b2 100644 --- a/app/src/ui/add-repository/add-existing-repository.tsx +++ b/app/src/ui/add-repository/add-existing-repository.tsx @@ -165,7 +165,7 @@ export class AddExistingRepository extends React.Component< } private onPathChanged = async (path: string) => { - const isRepository = await isGitRepository(path) + const isRepository = await isGitRepository(this.resolvedPath(path)) this.setState({ path, isRepository }) } From 74db20b57c0516e1cb3099c00a7a0e8237d3d8d9 Mon Sep 17 00:00:00 2001 From: KrisAphalon Date: Sat, 24 Oct 2020 22:48:15 +0200 Subject: [PATCH 20/48] remove deprecated apt-key from installation setup (#354) --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index e499b480a1e..354d3b97c2d 100644 --- a/README.md +++ b/README.md @@ -34,7 +34,7 @@ the project using the link in the header. To setup the package repository, run these commands: ```sh -$ wget -qO - https://packagecloud.io/shiftkey/desktop/gpgkey | sudo apt-key add - +$ wget -qO - https://packagecloud.io/shiftkey/desktop/gpgkey | sudo tee /etc/apt/trusted.gpg.d/shiftkey-desktop.asc > /dev/null $ sudo sh -c 'echo "deb [arch=amd64] https://packagecloud.io/shiftkey/desktop/any/ any main" > /etc/apt/sources.list.d/packagecloud-shiftky-desktop.list' $ sudo apt-get update ``` From 76c5e4f61685f890395cf13eb8f7d78580018115 Mon Sep 17 00:00:00 2001 From: Brendan Forster Date: Thu, 5 Nov 2020 23:23:08 -0400 Subject: [PATCH 21/48] add optional x11 dependency for SUSE-based distributions (#369) --- script/package-redhat.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/script/package-redhat.ts b/script/package-redhat.ts index 939e576acdf..6afc79c6fec 100644 --- a/script/package-redhat.ts +++ b/script/package-redhat.ts @@ -44,7 +44,7 @@ const options: RedhatOptions = { requires: [ // default Electron dependencies 'libXScrnSaver', - 'libX11-xcb', + '(libX11-xcb or libX11-xcb1)', 'alsa-lib', // dugite-native dependencies '(libcurl or libcurl4)', From ad849d592e828170911373a331e6d4ac223f7f38 Mon Sep 17 00:00:00 2001 From: Brendan Forster Date: Thu, 17 Dec 2020 15:03:36 -0400 Subject: [PATCH 22/48] align CI with the upstream settings for Actions (#393) --- .github/workflows/ci.yml | 38 ++++++++++---------------------------- 1 file changed, 10 insertions(+), 28 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index c2b3adfad39..f53fc2b6217 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -4,8 +4,14 @@ on: push: branches: - development - - __release-* + - linux + - 'linux-release-*' + tags: + - 'release-*.*.*-linux*' pull_request: + branches: + - linux + - 'linux-release-*' jobs: build: @@ -15,13 +21,15 @@ jobs: fail-fast: false matrix: node: [14.15.4] - os: [macos-10.15, windows-2019] + os: [macos-10.15, windows-2019, ubuntu-20.04] arch: [x64, arm64] include: - os: macos-10.15 friendlyName: macOS - os: windows-2019 friendlyName: Windows + - os: ubuntu-20.04 + friendlyName: Ubuntu timeout-minutes: 60 env: # Needed for macOS arm64 until hosted macos-11.0 runners become available @@ -56,27 +64,12 @@ jobs: - name: Install and build dependencies run: yarn - env: - npm_config_arch: ${{ matrix.arch }} - TARGET_ARCH: ${{ matrix.arch }} - - name: Lint - run: yarn lint - name: Validate changelog run: yarn validate-changelog - name: Ensure a clean working directory run: yarn check-modified - name: Build production app run: yarn build:prod - env: - DESKTOP_OAUTH_CLIENT_ID: ${{ secrets.DESKTOP_OAUTH_CLIENT_ID }} - DESKTOP_OAUTH_CLIENT_SECRET: - ${{ secrets.DESKTOP_OAUTH_CLIENT_SECRET }} - APPLE_ID: ${{ secrets.APPLE_ID }} - APPLE_ID_PASSWORD: ${{ secrets.APPLE_ID_PASSWORD }} - DESKTOPBOT_TOKEN: ${{ secrets.DESKTOPBOT_TOKEN }} - KEY_PASSWORD: ${{ secrets.KEY_PASSWORD }} - npm_config_arch: ${{ matrix.arch }} - TARGET_ARCH: ${{ matrix.arch }} - name: Prepare testing environment if: matrix.arch == 'x64' run: yarn test:setup @@ -90,14 +83,3 @@ jobs: if: matrix.arch == 'x64' timeout-minutes: 5 run: yarn test:integration - - name: Publish production app - run: yarn run publish - env: - npm_config_arch: ${{ matrix.arch }} - DESKTOPBOT_TOKEN: ${{ secrets.DESKTOPBOT_TOKEN }} - WINDOWS_CERT_PASSWORD: ${{ secrets.WINDOWS_CERT_PASSWORD }} - KEY_PASSWORD: ${{ secrets.KEY_PASSWORD }} - DEPLOYMENT_SECRET: ${{ secrets.DEPLOYMENT_SECRET }} - S3_KEY: ${{ secrets.S3_KEY }} - S3_SECRET: ${{ secrets.S3_SECRET }} - S3_BUCKET: github-desktop From b418ef228c5ed362c0193a1dfa49f75c5c125eb9 Mon Sep 17 00:00:00 2001 From: Brendan Forster Date: Fri, 18 Dec 2020 10:37:45 -0400 Subject: [PATCH 23/48] opt out of custom title bar on Linux --- app/src/ui/app.tsx | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/app/src/ui/app.tsx b/app/src/ui/app.tsx index ef4896e0d95..09519957fee 100644 --- a/app/src/ui/app.tsx +++ b/app/src/ui/app.tsx @@ -1247,6 +1247,12 @@ export class App extends React.Component { this.state.currentFoldout && this.state.currentFoldout.type === FoldoutType.AppMenu + // As Linux still uses the classic Electron menu, we are opting out of the + // custom menu that is shown as part of the title bar below + if (__LINUX__) { + return null + } + // When we're in full-screen mode on Windows we only need to render // the title bar when the menu bar is active. On other platforms we // never render the title bar while in full-screen mode. From 2b5f596aab63b548e155502c80e31134edd452d0 Mon Sep 17 00:00:00 2001 From: Kevin Evans Date: Sun, 27 Dec 2020 07:23:30 -0800 Subject: [PATCH 24/48] Add smaller icons (#395) --- app/static/logos/128x128.png | Bin 0 -> 25377 bytes app/static/logos/32x32.png | Bin 0 -> 5333 bytes app/static/logos/64x64.png | Bin 0 -> 13966 bytes script/package-debian.ts | 3 +++ script/package-redhat.ts | 3 +++ 5 files changed, 6 insertions(+) create mode 100644 app/static/logos/128x128.png create mode 100644 app/static/logos/32x32.png create mode 100644 app/static/logos/64x64.png diff --git a/app/static/logos/128x128.png b/app/static/logos/128x128.png new file mode 100644 index 0000000000000000000000000000000000000000..97432b294a45b95a47ef38219a850bbf4ef01da9 GIT binary patch literal 25377 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 literal 0 HcmV?d00001 diff --git a/app/static/logos/64x64.png b/app/static/logos/64x64.png new file mode 100644 index 0000000000000000000000000000000000000000..2d8d61b8efc7b6ece2b8333ef18cd631e75ef80f GIT binary patch literal 13966 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 literal 0 HcmV?d00001 diff --git a/script/package-debian.ts b/script/package-debian.ts index b6df4eb96f3..82f1bb775a8 100644 --- a/script/package-debian.ts +++ b/script/package-debian.ts @@ -57,6 +57,9 @@ const options: DebianOptions = { 'gnome-keyring', ], icon: { + '32x32': 'app/static/logos/32x32.png', + '64x64': 'app/static/logos/64x64.png', + '128x128': 'app/static/logos/128x128.png', '256x256': 'app/static/logos/256x256.png', '512x512': 'app/static/logos/512x512.png', '1024x1024': 'app/static/logos/1024x1024.png', diff --git a/script/package-redhat.ts b/script/package-redhat.ts index 6afc79c6fec..405c435f924 100644 --- a/script/package-redhat.ts +++ b/script/package-redhat.ts @@ -53,6 +53,9 @@ const options: RedhatOptions = { 'gnome-keyring', ], icon: { + '32x32': 'app/static/logos/32x32.png', + '64x64': 'app/static/logos/64x64.png', + '128x128': 'app/static/logos/128x128.png', '256x256': 'app/static/logos/256x256.png', '512x512': 'app/static/logos/512x512.png', '1024x1024': 'app/static/logos/1024x1024.png', From 5b0ebd7a124e0f9facde74944964377fc4a59e07 Mon Sep 17 00:00:00 2001 From: Brendan Forster Date: Sun, 24 Jan 2021 12:54:38 -0400 Subject: [PATCH 25/48] update codemirror to latest version (#422) --- app/package.json | 2 +- app/yarn.lock | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/app/package.json b/app/package.json index 58c50c81efd..1a2eff7abad 100644 --- a/app/package.json +++ b/app/package.json @@ -21,7 +21,7 @@ "byline": "^5.0.0", "chalk": "^2.3.0", "classnames": "^2.2.5", - "codemirror": "^5.49.2", + "codemirror": "^5.59.2", "codemirror-mode-elixir": "^1.1.2", "compare-versions": "^3.6.0", "deep-equal": "^1.0.1", diff --git a/app/yarn.lock b/app/yarn.lock index 5d5479389bd..d223003c649 100644 --- a/app/yarn.lock +++ b/app/yarn.lock @@ -189,10 +189,10 @@ codemirror-mode-elixir@^1.1.2: resolved "https://registry.yarnpkg.com/codemirror-mode-elixir/-/codemirror-mode-elixir-1.1.2.tgz#61227208d2684d928500af6934e4b9c995fb0960" integrity sha512-1oIuRVHyUhLv0Za9sEIsI7urAj06EohwO/yVj10bg7aHnimHQ964Wk3uuoPH0Yn8L38EkOd+SwULYpDiCQtoTA== -codemirror@^5.49.2: - version "5.49.2" - resolved "https://registry.yarnpkg.com/codemirror/-/codemirror-5.49.2.tgz#c84fdaf11b19803f828b0c67060c7bc6d154ccad" - integrity sha512-dwJ2HRPHm8w51WB5YTF9J7m6Z5dtkqbU9ntMZ1dqXyFB9IpjoUFDj80ahRVEoVanfIp6pfASJbOlbWdEf8FOzQ== +codemirror@^5.59.2: + version "5.59.2" + resolved "https://registry.yarnpkg.com/codemirror/-/codemirror-5.59.2.tgz#ee674d3a4a8d241af38d52afc482625ba7393922" + integrity sha512-/D5PcsKyzthtSy2NNKCyJi3b+htRkoKv3idswR/tR6UAvMNKA7SrmyZy6fOONJxSRs1JlUWEDAbxqfdArbK8iA== color-convert@^1.9.0: version "1.9.0" From 5c2f9f78b23ac897199410176c8c6b3ea40d2aaf Mon Sep 17 00:00:00 2001 From: Brendan Forster Date: Sun, 24 Jan 2021 13:09:15 -0400 Subject: [PATCH 26/48] pin electron's version of @electron/get to latest version to get fixes (#423) --- package.json | 3 +++ yarn.lock | 2 +- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/package.json b/package.json index 4f04540dafa..8f39b59fd1f 100644 --- a/package.json +++ b/package.json @@ -178,5 +178,8 @@ "optionalDependencies": { "electron-installer-debian": "3.0.0", "electron-installer-redhat": "3.0.0" + }, + "resolutions": { + "electron/@electron/get": "1.12.2" } } diff --git a/yarn.lock b/yarn.lock index b8c28fcfb34..dae6fcac696 100644 --- a/yarn.lock +++ b/yarn.lock @@ -315,7 +315,7 @@ ajv "^6.12.0" ajv-keywords "^3.4.1" -"@electron/get@^1.0.1", "@electron/get@^1.12.2": +"@electron/get@1.12.2", "@electron/get@^1.0.1", "@electron/get@^1.12.2": version "1.12.2" resolved "https://registry.yarnpkg.com/@electron/get/-/get-1.12.2.tgz#6442066afb99be08cefb9a281e4b4692b33764f3" integrity sha512-vAuHUbfvBQpYTJ5wB7uVIDq5c/Ry0fiTBMs7lnEYAo/qXXppIVcWdfBr57u6eRnKdVso7KSiH6p/LbQAG6Izrg== From 5e4d44cf44789d86de1120bd974ce6c0a0b95e35 Mon Sep 17 00:00:00 2001 From: Brendan Forster Date: Sun, 24 Jan 2021 21:37:38 -0400 Subject: [PATCH 27/48] update tooling dependencies (#424) --- package.json | 8 +- script/build.ts | 6 +- script/electron-builder-linux.yml | 4 - script/package-debian.ts | 4 - script/package-redhat.ts | 4 - yarn.lock | 348 ++++++++++++++++++------------ 6 files changed, 213 insertions(+), 161 deletions(-) diff --git a/package.json b/package.json index 8f39b59fd1f..cdfb5e7bdea 100644 --- a/package.json +++ b/package.json @@ -171,13 +171,13 @@ "@types/winston": "^2.2.0", "@types/xml2js": "^0.4.0", "electron": "=11.1.1", - "electron-builder": "^22.7.0", - "electron-packager": "^15.1.0", + "electron-builder": "^22.9.1", + "electron-packager": "^15.2.0", "electron-winstaller": "^5.0.0" }, "optionalDependencies": { - "electron-installer-debian": "3.0.0", - "electron-installer-redhat": "3.0.0" + "electron-installer-debian": "3.1.0", + "electron-installer-redhat": "3.2.0" }, "resolutions": { "electron/@electron/get": "1.12.2" diff --git a/script/build.ts b/script/build.ts index d6aef303b9e..5d56a675180 100755 --- a/script/build.ts +++ b/script/build.ts @@ -305,13 +305,9 @@ function copyDependencies() { const updatedPackage = Object.assign({}, originalPackage, { productName: getProductName(), dependencies: newDependencies, - devDependencies: newDevDependencies, + devDependencies: isDevelopmentBuild ? newDevDependencies : undefined, }) - if (!isDevelopmentBuild) { - delete updatedPackage.devDependencies - } - fs.writeFileSync( path.join(outRoot, 'package.json'), JSON.stringify(updatedPackage) diff --git a/script/electron-builder-linux.yml b/script/electron-builder-linux.yml index 96e2de74ad2..768783bc667 100644 --- a/script/electron-builder-linux.yml +++ b/script/electron-builder-linux.yml @@ -11,10 +11,6 @@ linux: maintainer: 'GitHub, Inc ' rpm: depends: - # default Electron dependencies - - libXScrnSaver - - libappindicator - - libnotify # dugite-native dependencies - libcurl # keytar dependencies diff --git a/script/package-debian.ts b/script/package-debian.ts index 82f1bb775a8..35402cafaf2 100644 --- a/script/package-debian.ts +++ b/script/package-debian.ts @@ -47,10 +47,6 @@ const options: DebianOptions = { priority: 'extra', homepage: 'https://github.com/shiftkey/desktop', depends: [ - // additional core dependencies - are these still needed? - 'gconf2', - 'gconf-service', - 'libappindicator1', // Desktop-specific dependencies 'libcurl3 | libcurl4', 'libsecret-1-0', diff --git a/script/package-redhat.ts b/script/package-redhat.ts index 405c435f924..3b5a55b8a25 100644 --- a/script/package-redhat.ts +++ b/script/package-redhat.ts @@ -42,10 +42,6 @@ const options: RedhatOptions = { 'This is the unofficial port of GitHub Desktop for Linux distributions', categories: ['GNOME', 'GTK', 'Development'], requires: [ - // default Electron dependencies - 'libXScrnSaver', - '(libX11-xcb or libX11-xcb1)', - 'alsa-lib', // dugite-native dependencies '(libcurl or libcurl4)', // keytar dependencies diff --git a/yarn.lock b/yarn.lock index dae6fcac696..745d65d36ce 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1885,28 +1885,28 @@ anymatch@^3.0.3, anymatch@~3.1.1: normalize-path "^3.0.0" picomatch "^2.0.4" -app-builder-bin@3.5.9: - version "3.5.9" - resolved "https://registry.yarnpkg.com/app-builder-bin/-/app-builder-bin-3.5.9.tgz#a3ac0c25286bac68357321cb2eaf7128b0bc0a4f" - integrity sha512-NSjtqZ3x2kYiDp3Qezsgukx/AUzKPr3Xgf9by4cYt05ILWGAptepeeu0Uv+7MO+41o6ujhLixTou8979JGg2Kg== +app-builder-bin@3.5.10: + version "3.5.10" + resolved "https://registry.yarnpkg.com/app-builder-bin/-/app-builder-bin-3.5.10.tgz#4a7f9999fccc0c435b6284ae1366bc76a17c4a7d" + integrity sha512-Jd+GW68lR0NeetgZDo47PdWBEPdnD+p0jEa7XaxjRC8u6Oo/wgJsfKUkORRgr2NpkD19IFKN50P6JYy04XHFLQ== -app-builder-lib@22.7.0: - version "22.7.0" - resolved "https://registry.yarnpkg.com/app-builder-lib/-/app-builder-lib-22.7.0.tgz#ccd3e7ece2d46bc209423a77aa142f74aaf65db0" - integrity sha512-blRKwV8h0ztualXS50ciCTo39tbuDGNS+ldcy8+KLvKXuT6OpYnSJ7M6MSfPT+xWatshMHJV1rJx3Tl+k/Sn/g== +app-builder-lib@22.9.1: + version "22.9.1" + resolved "https://registry.yarnpkg.com/app-builder-lib/-/app-builder-lib-22.9.1.tgz#ccb8f1a02b628514a5dfab9401fa2a976689415c" + integrity sha512-KfXim/fiNwFW2SKffsjEMdAU7RbbEXn62x5YyXle1b4j9X/wEHW9iwox8De6y0hJdR+/kCC/49lI+VgNwLhV7A== dependencies: "7zip-bin" "~5.0.3" "@develar/schema-utils" "~2.6.5" async-exit-hook "^2.0.1" bluebird-lst "^1.0.9" - builder-util "22.7.0" - builder-util-runtime "8.7.1" + builder-util "22.9.1" + builder-util-runtime "8.7.2" chromium-pickle-js "^0.2.0" - debug "^4.2.0" - ejs "^3.1.3" - electron-publish "22.7.0" - fs-extra "^9.0.0" - hosted-git-info "^3.0.4" + debug "^4.3.0" + ejs "^3.1.5" + electron-publish "22.9.1" + fs-extra "^9.0.1" + hosted-git-info "^3.0.5" is-ci "^2.0.0" isbinaryfile "^4.0.6" js-yaml "^3.14.0" @@ -2786,28 +2786,28 @@ buffer@^5.2.1, buffer@^5.5.0: base64-js "^1.0.2" ieee754 "^1.1.4" -builder-util-runtime@8.7.1: - version "8.7.1" - resolved "https://registry.yarnpkg.com/builder-util-runtime/-/builder-util-runtime-8.7.1.tgz#23c808cddd650d4376a7a1518ec1e80e85c10f00" - integrity sha512-uEBH1nAnTvzjcsrh2XI3qOzJ39h0+9kuIuwj+kCc3a07TZNGShfJcai8fFzL3mNgGjEFxoq+XMssR11r+FOFSg== +builder-util-runtime@8.7.2: + version "8.7.2" + resolved "https://registry.yarnpkg.com/builder-util-runtime/-/builder-util-runtime-8.7.2.tgz#d93afc71428a12789b437e13850e1fa7da956d72" + integrity sha512-xBqv+8bg6cfnzAQK1k3OGpfaHg+QkPgIgpEkXNhouZ0WiUkyZCftuRc2LYzQrLucFywpa14Xbc6+hTbpq83yRA== dependencies: - debug "^4.2.0" + debug "^4.1.1" sax "^1.2.4" -builder-util@22.7.0: - version "22.7.0" - resolved "https://registry.yarnpkg.com/builder-util/-/builder-util-22.7.0.tgz#0776a66e6d6e408a78bed7f17a7ad22516d9e7f0" - integrity sha512-UV3MKL0mwjMq2y9JlBf28Cegpj0CrIXcjGkO0TXn+QZ6Yy9rY6lHOuUvpQ19ct2Qh1o+QSwH3Q1nKUf5viJBBg== +builder-util@22.9.1: + version "22.9.1" + resolved "https://registry.yarnpkg.com/builder-util/-/builder-util-22.9.1.tgz#b7087a5cde477f90d718ca5d7fafb6ae261b16af" + integrity sha512-5hN/XOaYu4ZQUS6F+5CXE6jTo+NAnVqAxDuKGSaHWb9bejfv/rluChTLoY3/nJh7RFjkoyVjvFJv7zQDB1QmHw== dependencies: "7zip-bin" "~5.0.3" "@types/debug" "^4.1.5" "@types/fs-extra" "^9.0.1" - app-builder-bin "3.5.9" + app-builder-bin "3.5.10" bluebird-lst "^1.0.9" - builder-util-runtime "8.7.1" - chalk "^4.0.0" - debug "^4.2.0" - fs-extra "^9.0.0" + builder-util-runtime "8.7.2" + chalk "^4.1.0" + debug "^4.3.0" + fs-extra "^9.0.1" is-ci "^2.0.0" js-yaml "^3.14.0" source-map-support "^0.5.19" @@ -2964,7 +2964,7 @@ chalk@^3.0.0: ansi-styles "^4.1.0" supports-color "^7.1.0" -chalk@^4.0.0: +chalk@^4.0.0, chalk@^4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.0.tgz#4e14870a618d9e2edd97dd8345fd9d9dc315646a" integrity sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A== @@ -3150,6 +3150,15 @@ cliui@^6.0.0: strip-ansi "^6.0.0" wrap-ansi "^6.2.0" +cliui@^7.0.2: + version "7.0.4" + resolved "https://registry.yarnpkg.com/cliui/-/cliui-7.0.4.tgz#a0265ee655476fc807aea9df3df8df7783808b4f" + integrity sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ== + dependencies: + string-width "^4.2.0" + strip-ansi "^6.0.0" + wrap-ansi "^7.0.0" + clone-response@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/clone-response/-/clone-response-1.0.2.tgz#d1dc973920314df67fbeb94223b4ee350239e96b" @@ -3692,20 +3701,13 @@ debug@^4.0.1: dependencies: ms "^2.1.1" -debug@^4.1.0, debug@^4.1.1: +debug@^4.1.0, debug@^4.1.1, debug@^4.3.0: version "4.3.1" resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.1.tgz#f0d229c505e0c6d8c49ac553d1b13dc183f6b2ee" integrity sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ== dependencies: ms "2.1.2" -debug@^4.2.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/debug/-/debug-4.2.0.tgz#7f150f93920e94c58f5574c2fd01a3110effe7f1" - integrity sha512-IX2ncY78vDTjZMFUdmsvIRFY2Cf4FnD0wRs+nQwJU8Lu99/tPFdb0VybiiMTPe3I6rQmwsqQqRBvxU+bZ/I8sg== - dependencies: - ms "2.1.2" - debuglog@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/debuglog/-/debuglog-1.0.1.tgz#aa24ffb9ac3df9a2351837cfb2d279360cd78492" @@ -3899,15 +3901,15 @@ diffie-hellman@^5.0.0: miller-rabin "^4.0.0" randombytes "^2.0.0" -dmg-builder@22.7.0: - version "22.7.0" - resolved "https://registry.yarnpkg.com/dmg-builder/-/dmg-builder-22.7.0.tgz#ead7e7c046cbdc52d29d302a4455f6668cdf7d45" - integrity sha512-5Ea2YEz6zSNbyGzZD+O9/MzmaXb6oa15cSKWo4JQ1xP4rorOpte7IOj2jcwYjtc+Los2gu1lvT314OC1OZIWgg== +dmg-builder@22.9.1: + version "22.9.1" + resolved "https://registry.yarnpkg.com/dmg-builder/-/dmg-builder-22.9.1.tgz#64647224f37ee47fc9bd01947c21cc010a30511f" + integrity sha512-jc+DAirqmQrNT6KbDHdfEp8D1kD0DBTnsLhwUR3MX+hMBun5bT134LQzpdK0GKvd22GqF8L1Cz/NOgaVjscAXQ== dependencies: - app-builder-lib "22.7.0" - builder-util "22.7.0" - fs-extra "^9.0.0" - iconv-lite "^0.5.1" + app-builder-lib "22.9.1" + builder-util "22.9.1" + fs-extra "^9.0.1" + iconv-lite "^0.6.2" js-yaml "^3.14.0" sanitize-filename "^1.6.3" @@ -4056,32 +4058,32 @@ ejs@^2.6.1: resolved "https://registry.yarnpkg.com/ejs/-/ejs-2.6.1.tgz#498ec0d495655abc6f23cd61868d926464071aa0" integrity sha512-0xy4A/twfrRCnkhfk8ErDi5DqdAsAqeGxht4xkCUrsvhhbQNs7E+4jV0CN7+NKIY0aHE72+XvqtBIXzD31ZbXQ== -ejs@^3.1.3: - version "3.1.3" - resolved "https://registry.yarnpkg.com/ejs/-/ejs-3.1.3.tgz#514d967a8894084d18d3d47bd169a1c0560f093d" - integrity sha512-wmtrUGyfSC23GC/B1SMv2ogAUgbQEtDmTIhfqielrG5ExIM9TP4UoYdi90jLF1aTcsWCJNEO0UrgKzP0y3nTSg== +ejs@^3.1.5: + version "3.1.5" + resolved "https://registry.yarnpkg.com/ejs/-/ejs-3.1.5.tgz#aed723844dc20acb4b170cd9ab1017e476a0d93b" + integrity sha512-dldq3ZfFtgVTJMLjOe+/3sROTzALlL9E34V4/sDtUd/KlBSS0s6U1/+WPE1B4sj9CXHJpL1M6rhNJnc9Wbal9w== dependencies: jake "^10.6.1" -electron-builder@^22.7.0: - version "22.7.0" - resolved "https://registry.yarnpkg.com/electron-builder/-/electron-builder-22.7.0.tgz#a42d08a1654ffc2f7d9e2860829d3cc55d4a0c81" - integrity sha512-t6E3oMutpST64YWbZCg7HodEwJOsnjUF1vnDIHm2MW6CFZPX8tlCK6efqaV66LU0E0Nkp/JH6TE5bCqQ1+VdPQ== +electron-builder@^22.9.1: + version "22.9.1" + resolved "https://registry.yarnpkg.com/electron-builder/-/electron-builder-22.9.1.tgz#a2962db6f2757bc01d02489f38fafe0809f68f60" + integrity sha512-GXPt8l5Mxwm1QKYopUM6/Tdh9W3695G6Ax+IFyj5pQ51G4SD5L1uq4/RkPSsOgs3rP7jNSV6g6OfDzdtVufPdA== dependencies: "@types/yargs" "^15.0.5" - app-builder-lib "22.7.0" + app-builder-lib "22.9.1" bluebird-lst "^1.0.9" - builder-util "22.7.0" - builder-util-runtime "8.7.1" - chalk "^4.0.0" - dmg-builder "22.7.0" - fs-extra "^9.0.0" + builder-util "22.9.1" + builder-util-runtime "8.7.2" + chalk "^4.1.0" + dmg-builder "22.9.1" + fs-extra "^9.0.1" is-ci "^2.0.0" lazy-val "^1.0.4" read-config-file "6.0.0" sanitize-filename "^1.6.3" - update-notifier "^4.1.0" - yargs "^15.3.1" + update-notifier "^4.1.1" + yargs "^16.0.3" electron-chromedriver@^11.0.0: version "11.0.0" @@ -4091,42 +4093,46 @@ electron-chromedriver@^11.0.0: "@electron/get" "^1.12.2" extract-zip "^2.0.0" -electron-installer-common@^0.10.0: - version "0.10.1" - resolved "https://registry.yarnpkg.com/electron-installer-common/-/electron-installer-common-0.10.1.tgz#42738f140c15270758681ac3f32039430b9fc023" - integrity sha512-d9gEXhfSSyMn8mkFNdbUdkqdLkxVZ8nO3NDso3nuSnG1+wy7cJuuCjutwR4+zsXdQuNFC1n/DxpTk4pBLZSCTQ== +electron-installer-common@^0.10.2: + version "0.10.3" + resolved "https://registry.yarnpkg.com/electron-installer-common/-/electron-installer-common-0.10.3.tgz#40f9db644ca60eb28673d545b67ee0113aef4444" + integrity sha512-mYbP+6i+nHMIm0WZHXgGdmmXMe+KXncl6jZYQNcCF9C1WsNA9C5SZ2VP4TLQMSIoFO+X4ugkMEA5uld1bmyEvA== dependencies: "@malept/cross-spawn-promise" "^1.0.0" - asar "^2.0.1" + asar "^3.0.0" debug "^4.1.1" - fs-extra "^8.0.1" + fs-extra "^9.0.0" glob "^7.1.4" lodash "^4.17.15" parse-author "^2.0.0" semver "^7.1.1" - tmp-promise "^2.0.1" + tmp-promise "^3.0.2" + optionalDependencies: + "@types/fs-extra" "^9.0.1" -electron-installer-debian@3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/electron-installer-debian/-/electron-installer-debian-3.0.0.tgz#abd76db8e89bc1ba1e5366975a941461dda06e6d" - integrity sha512-91iiicfK5hq6D6Xit7SFCN2GpccFBQbZB1JpYaxFdaueEjM/1hSULtCPf4e5w/2vQKZ73AfBZrxxIJqO3DhGPw== +electron-installer-debian@3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/electron-installer-debian/-/electron-installer-debian-3.1.0.tgz#2f6107f559f6564c44e3832fb2942dd8de4d40cc" + integrity sha512-k6KChvx0Fw8XTlCqwwbBfh19yGQaKjGdbugokmr1IpzINOm4QFyACKMTHAYFHW5LCBUZQShZD96hwxUZ+8Kx+w== dependencies: + "@malept/cross-spawn-promise" "^1.0.0" debug "^4.1.1" - electron-installer-common "^0.10.0" - fs-extra "^8.0.1" + electron-installer-common "^0.10.2" + fs-extra "^9.0.0" get-folder-size "^2.0.1" lodash "^4.17.4" word-wrap "^1.2.3" yargs "^15.0.1" -electron-installer-redhat@3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/electron-installer-redhat/-/electron-installer-redhat-3.0.0.tgz#0a066eb9f9b3e691d58c2b41eea1055e8d5ffa92" - integrity sha512-BtYh174AOIGq0iDges4/fihqJYw8WsWXRKuRpKvUlkqrwfeGMWqln28+kKV5IW6GPfHjRFeCO5dcMUioUDBo1A== +electron-installer-redhat@3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/electron-installer-redhat/-/electron-installer-redhat-3.2.0.tgz#2c0f5da6f4a244453e4675ab1eca0877a66788c5" + integrity sha512-XMA+fQj3ULNVMl4eG+hIvrYITEqP1pfpERvx6kRwuPd06vdtB4KucL9241DAHT0NR5E9gnyJHM9Y6N24kk0mcA== dependencies: + "@malept/cross-spawn-promise" "^1.0.0" debug "^4.1.1" - electron-installer-common "^0.10.0" - fs-extra "^8.1.0" + electron-installer-common "^0.10.2" + fs-extra "^9.0.0" lodash "^4.17.15" word-wrap "^1.2.3" yargs "^15.1.0" @@ -4139,10 +4145,10 @@ electron-notarize@^1.0.0: debug "^4.1.1" fs-extra "^9.0.1" -electron-osx-sign@^0.4.11: - version "0.4.17" - resolved "https://registry.yarnpkg.com/electron-osx-sign/-/electron-osx-sign-0.4.17.tgz#2727ca0c79e1e4e5ccd3861fb3da9c3c913b006c" - integrity sha512-wUJPmZJQCs1zgdlQgeIpRcvrf7M5/COQaOV68Va1J/SgmWx5KL2otgg+fAae7luw6qz9R8Gvu/Qpe9tAOu/3xQ== +electron-osx-sign@^0.5.0: + version "0.5.0" + resolved "https://registry.yarnpkg.com/electron-osx-sign/-/electron-osx-sign-0.5.0.tgz#fc258c5e896859904bbe3d01da06902c04b51c3a" + integrity sha512-icoRLHzFz/qxzDh/N4Pi2z4yVHurlsCAYQvsCSG7fCedJ4UJXBS6PoQyGH71IfcqKupcKeK7HX/NkyfG+v6vlQ== dependencies: bluebird "^3.5.0" compare-version "^0.1.2" @@ -4151,16 +4157,16 @@ electron-osx-sign@^0.4.11: minimist "^1.2.0" plist "^3.0.1" -electron-packager@^15.1.0: - version "15.1.0" - resolved "https://registry.yarnpkg.com/electron-packager/-/electron-packager-15.1.0.tgz#16a3733e4cad26112a2ac36f0b0f35c3b0170eff" - integrity sha512-THNm4bz1DfvR9f0g51+NjuAYELflM8+1vhQ/iv/G8vyZNKzSMuFd5doobngQKq3rRsLdPNZVnGqDdgS884d7Og== +electron-packager@^15.2.0: + version "15.2.0" + resolved "https://registry.yarnpkg.com/electron-packager/-/electron-packager-15.2.0.tgz#c93de19d75e7c03d159a56295384d371cb625ad4" + integrity sha512-BaklTBRQy1JTijR3hi8XxHf/uo76rHbDCNM/eQHSblzE9C0NoNfOe86nPxB7y1u2jwlqoEJ4zFiHpTFioKGGRA== dependencies: "@electron/get" "^1.6.0" asar "^3.0.0" debug "^4.0.1" electron-notarize "^1.0.0" - electron-osx-sign "^0.4.11" + electron-osx-sign "^0.5.0" extract-zip "^2.0.0" filenamify "^4.1.0" fs-extra "^9.0.0" @@ -4172,21 +4178,21 @@ electron-packager@^15.1.0: rcedit "^2.0.0" resolve "^1.1.6" semver "^7.1.3" - yargs-parser "^19.0.1" + yargs-parser "^20.0.0" -electron-publish@22.7.0: - version "22.7.0" - resolved "https://registry.yarnpkg.com/electron-publish/-/electron-publish-22.7.0.tgz#d92ba7c4007c9ac1dd070593e48028184fb2dc19" - integrity sha512-hmU69xlb6vvAV3QfpHYDlkdZMFdBAgDbptoxbLFrnTq5bOkcL8AaDbvxeoZ4+lvqgs29NwqGpkHo2oN+p/hCfg== +electron-publish@22.9.1: + version "22.9.1" + resolved "https://registry.yarnpkg.com/electron-publish/-/electron-publish-22.9.1.tgz#7cc76ac4cc53efd29ee31c1e5facb9724329068e" + integrity sha512-ducLjRJLEeU87FaTCWaUyDjCoLXHkawkltP2zqS/n2PyGke54ZIql0tBuUheht4EpR8AhFbVJ11spSn1gy8r6w== dependencies: "@types/fs-extra" "^9.0.1" bluebird-lst "^1.0.9" - builder-util "22.7.0" - builder-util-runtime "8.7.1" - chalk "^4.0.0" - fs-extra "^9.0.0" + builder-util "22.9.1" + builder-util-runtime "8.7.2" + chalk "^4.1.0" + fs-extra "^9.0.1" lazy-val "^1.0.4" - mime "^2.4.5" + mime "^2.4.6" electron-winstaller@*, electron-winstaller@^5.0.0: version "5.0.0" @@ -4405,6 +4411,11 @@ es6-shim@^0.35.3: resolved "https://registry.yarnpkg.com/es6-shim/-/es6-shim-0.35.3.tgz#9bfb7363feffff87a6cdb6cd93e405ec3c4b6f26" integrity sha1-m/tzY/7//4emzbbNk+QF7DxLbyY= +escalade@^3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40" + integrity sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw== + escape-goat@^2.0.0: version "2.1.1" resolved "https://registry.yarnpkg.com/escape-goat/-/escape-goat-2.1.1.tgz#1b2dc77003676c457ec760b2dc68edb648188675" @@ -5125,7 +5136,7 @@ fs-extra@^7.0.1: jsonfile "^4.0.0" universalify "^0.1.0" -fs-extra@^8.0.1, fs-extra@^8.1.0: +fs-extra@^8.1.0: version "8.1.0" resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-8.1.0.tgz#49d43c45a88cd9677668cb7be1b46efdb8d2e1c0" integrity sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g== @@ -5134,7 +5145,7 @@ fs-extra@^8.0.1, fs-extra@^8.1.0: jsonfile "^4.0.0" universalify "^0.1.0" -fs-extra@^9.0.0, fs-extra@^9.0.1: +fs-extra@^9.0.0: version "9.0.1" resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-9.0.1.tgz#910da0062437ba4c39fedd863f1675ccfefcb9fc" integrity sha512-h2iAoN838FqAFJY2/qVpzFXy+EBxfVE220PalAqQLDVsFOHLJrZvut5puAbCdNv6WJk+B8ihI+k0c7JK5erwqQ== @@ -5144,6 +5155,16 @@ fs-extra@^9.0.0, fs-extra@^9.0.1: jsonfile "^6.0.1" universalify "^1.0.0" +fs-extra@^9.0.1: + version "9.1.0" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-9.1.0.tgz#5954460c764a8da2094ba3554bf839e6b9a7c86d" + integrity sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ== + dependencies: + at-least-node "^1.0.0" + graceful-fs "^4.2.0" + jsonfile "^6.0.1" + universalify "^2.0.0" + fs-write-stream-atomic@^1.0.8: version "1.0.10" resolved "https://registry.yarnpkg.com/fs-write-stream-atomic/-/fs-write-stream-atomic-1.0.10.tgz#b47df53493ef911df75731e70a9ded0189db40c9" @@ -5215,7 +5236,7 @@ gensync@^1.0.0-beta.1: resolved "https://registry.yarnpkg.com/gensync/-/gensync-1.0.0-beta.2.tgz#32a6ee76c3d7f52d46b2b1ae5d93fea8580a25e0" integrity sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg== -get-caller-file@^2.0.1: +get-caller-file@^2.0.1, get-caller-file@^2.0.5: version "2.0.5" resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== @@ -5663,12 +5684,12 @@ hosted-git-info@^2.1.4: resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.8.9.tgz#dffc0bf9a21c02209090f2aa69429e1414daf3f9" integrity sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw== -hosted-git-info@^3.0.4: - version "3.0.4" - resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-3.0.4.tgz#be4973eb1fd2737b11c9c7c19380739bb249f60d" - integrity sha512-4oT62d2jwSDBbLLFLZE+1vPuQ1h8p9wjrJ8Mqx5TjsyWmBMV5B13eJqn8pvluqubLf3cJPTfiYCIwNwDNmzScQ== +hosted-git-info@^3.0.5: + version "3.0.7" + resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-3.0.7.tgz#a30727385ea85acfcee94e0aad9e368c792e036c" + integrity sha512-fWqc0IcuXs+BmE9orLDyVykAG9GJtGLGuZAAqgcckPgv5xad4AcXGIv8galtQvlwutxSlaMcdw7BUtq2EIvqCQ== dependencies: - lru-cache "^5.1.1" + lru-cache "^6.0.0" html-encoding-sniffer@^2.0.1: version "2.0.1" @@ -5791,12 +5812,12 @@ iconv-lite@0.4.24: dependencies: safer-buffer ">= 2.1.2 < 3" -iconv-lite@^0.5.1: - version "0.5.1" - resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.5.1.tgz#b2425d3c7b18f7219f2ca663d103bddb91718d64" - integrity sha512-ONHr16SQvKZNSqjQT9gy5z24Jw+uqfO02/ngBSBoqChZ+W8qXX7GPRa1RoUnzGADw8K63R1BXUMzarCVQBpY8Q== +iconv-lite@^0.6.2: + version "0.6.2" + resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.6.2.tgz#ce13d1875b0c3a674bd6a04b7f76b01b1b6ded01" + integrity sha512-2y91h5OpQlolefMPmUlivelittSWy0rP+oYVpn6A7GwVHNE8AWzoYOBNmlwks3LobaJxgHCYZAnyNo2GgpNRNQ== dependencies: - safer-buffer ">= 2.1.2 < 3" + safer-buffer ">= 2.1.2 < 3.0.0" icss-replace-symbols@^1.1.0: version "1.1.0" @@ -7653,7 +7674,7 @@ mime@1.6.0: resolved "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1" integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg== -mime@^2.0.3, mime@^2.4.5: +mime@^2.0.3: version "2.4.6" resolved "https://registry.yarnpkg.com/mime/-/mime-2.4.6.tgz#e5b407c90db442f2beb5b162373d07b69affa4d1" integrity sha512-RZKhC3EmpBchfTGBVb8fb+RL2cWyw/32lshnsETttkBAyAUXSGHxbEJWWRXc751DrIxG1q04b8QwMbAwkRPpUA== @@ -7663,6 +7684,11 @@ mime@^2.4.4: resolved "https://registry.yarnpkg.com/mime/-/mime-2.4.4.tgz#bd7b91135fc6b01cde3e9bae33d659b63d8857e5" integrity sha512-LRxmNwziLPT828z+4YkNzloCFC2YM4wrB99k+AV5ZbEyfGNWfG8SO1FUXLmLDBSo89NrJZ4DIWeLjy1CHGhMGA== +mime@^2.4.6: + version "2.5.0" + resolved "https://registry.yarnpkg.com/mime/-/mime-2.5.0.tgz#2b4af934401779806ee98026bb42e8c1ae1876b1" + integrity sha512-ft3WayFSFUVBuJj7BMLKAQcSlItKtfjsKDDsii3rqFDAZ7t11zRe8ASw/GlmivGwVUYtwkQrxiGGpL6gFvB0ag== + mimic-fn@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" @@ -9549,7 +9575,7 @@ safe-regex@^1.1.0: dependencies: ret "~0.1.10" -"safer-buffer@>= 2.1.2 < 3", safer-buffer@^2.0.2, safer-buffer@^2.1.0, safer-buffer@~2.1.0: +"safer-buffer@>= 2.1.2 < 3", "safer-buffer@>= 2.1.2 < 3.0.0", safer-buffer@^2.0.2, safer-buffer@^2.1.0, safer-buffer@~2.1.0: version "2.1.2" resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== @@ -9649,10 +9675,10 @@ semver-diff@^3.1.1: dependencies: semver "^6.3.0" -"semver@2 || 3 || 4 || 5", semver@^5.3.0, semver@^5.4.1, semver@^5.5.0, semver@^5.6.0: - version "5.7.1" - resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" - integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== +"semver@2 || 3 || 4 || 5", semver@^5.3.0: + version "5.4.1" + resolved "https://registry.yarnpkg.com/semver/-/semver-5.4.1.tgz#e059c09d8571f0540823733433505d3a2f00b18e" + integrity sha512-WfG/X9+oATh81XtllIo/I8gOiY9EXRdv1cQdyykeXK17YcUW3EXUAi2To4pcH6nZtJPr7ZOpM5OMyWJZm+8Rsg== semver@7.x, semver@^7.1.3, semver@^7.2.1, semver@^7.3.2: version "7.3.4" @@ -9661,6 +9687,21 @@ semver@7.x, semver@^7.1.3, semver@^7.2.1, semver@^7.3.2: dependencies: lru-cache "^6.0.0" +semver@^5.4.1: + version "5.5.1" + resolved "https://registry.yarnpkg.com/semver/-/semver-5.5.1.tgz#7dfdd8814bdb7cabc7be0fb1d734cfb66c940477" + integrity sha512-PqpAxfrEhlSUWge8dwIp4tZnQ25DIOthpiaHNIthsjEFQD6EvqUKUDM7L8O2rShkFccYo1VjJR0coWfNkCubRw== + +semver@^5.5.0: + version "5.5.0" + resolved "https://registry.yarnpkg.com/semver/-/semver-5.5.0.tgz#dc4bbc7a6ca9d916dee5d43516f0092b58f7b8ab" + integrity sha512-4SJ3dm0WAwWy/NVeioZh5AntkdJoWKxHxcmyP622fOkgHa4z3R0TdBJICINyaSDE6uNwVc8gZr+ZinwZAH4xIA== + +semver@^5.6.0: + version "5.7.1" + resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" + integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== + semver@^6.0.0, semver@^6.2.0, semver@^6.3.0: version "6.3.0" resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" @@ -10557,12 +10598,12 @@ tmp-promise@^1.0.5: bluebird "^3.5.0" tmp "0.0.33" -tmp-promise@^2.0.1: - version "2.0.2" - resolved "https://registry.yarnpkg.com/tmp-promise/-/tmp-promise-2.0.2.tgz#ee605edb10f100954be5dd8b9dbe1bfd56194202" - integrity sha512-zl71nFWjPKW2KXs+73gEk8RmqvtAeXPxhWDkTUoa3MSMkjq3I+9OeknjF178MQoMYsdqL730hfzvNfEkePxq9Q== +tmp-promise@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/tmp-promise/-/tmp-promise-3.0.2.tgz#6e933782abff8b00c3119d63589ca1fb9caaa62a" + integrity sha512-OyCLAKU1HzBjL6Ev3gxUeraJNlbNingmi8IrHHEsYH8LTmEuhvYfqvhn2F/je+mjf4N58UmZ96OMEy1JanSCpA== dependencies: - tmp "0.1.0" + tmp "^0.2.0" tmp@0.0.33: version "0.0.33" @@ -10571,12 +10612,12 @@ tmp@0.0.33: dependencies: os-tmpdir "~1.0.2" -tmp@0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.1.0.tgz#ee434a4e22543082e294ba6201dcc6eafefa2877" - integrity sha512-J7Z2K08jbGcdA1kkQpJSqLF6T0tdQqpR2pnSUXsIchbPdTI9v3e85cLW0d6WDhwuAleOV71j2xWs8qMPfK7nKw== +tmp@^0.2.0: + version "0.2.1" + resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.2.1.tgz#8457fc3037dcf4719c251367a1af6500ee1ccf14" + integrity sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ== dependencies: - rimraf "^2.6.3" + rimraf "^3.0.0" tmpl@1.0.x: version "1.0.4" @@ -11003,6 +11044,11 @@ universalify@^1.0.0: resolved "https://registry.yarnpkg.com/universalify/-/universalify-1.0.0.tgz#b61a1da173e8435b2fe3c67d29b9adf8594bd16d" integrity sha512-rb6X1W158d7pRQBg5gkR8uPaSfiids68LTJQYOtEUhoJUWBdaQHsuT/EUduxXYxcrt4r5PJ4fuHW1MHT6p0qug== +universalify@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/universalify/-/universalify-2.0.0.tgz#75a4984efedc4b08975c5aeb73f530d02df25717" + integrity sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ== + unpipe@1.0.0, unpipe@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" @@ -11021,10 +11067,10 @@ upath@^1.1.1: resolved "https://registry.yarnpkg.com/upath/-/upath-1.2.0.tgz#8f66dbcd55a883acdae4408af8b035a5044c1894" integrity sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg== -update-notifier@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/update-notifier/-/update-notifier-4.1.0.tgz#4866b98c3bc5b5473c020b1250583628f9a328f3" - integrity sha512-w3doE1qtI0/ZmgeoDoARmI5fjDoT93IfKgEGqm26dGUOh8oNpaSTsGNdYRN/SjOuo10jcJGwkEL3mroKzktkew== +update-notifier@^4.1.1: + version "4.1.3" + resolved "https://registry.yarnpkg.com/update-notifier/-/update-notifier-4.1.3.tgz#be86ee13e8ce48fb50043ff72057b5bd598e1ea3" + integrity sha512-Yld6Z0RyCYGB6ckIjffGOSOmHXj1gMeE7aROz4MG+XMkmixBX4jUngrGXNYz7wPKBmtoD4MnBa2Anu7RSKht/A== dependencies: boxen "^4.2.0" chalk "^3.0.0" @@ -11596,6 +11642,15 @@ wrap-ansi@^6.2.0: string-width "^4.1.0" strip-ansi "^6.0.0" +wrap-ansi@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" + integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== + dependencies: + ansi-styles "^4.0.0" + string-width "^4.1.0" + strip-ansi "^6.0.0" + wrappy@1: version "1.0.2" resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" @@ -11711,6 +11766,11 @@ y18n@^4.0.0: resolved "https://registry.yarnpkg.com/y18n/-/y18n-4.0.1.tgz#8db2b83c31c5d75099bb890b23f3094891e247d4" integrity sha512-wNcy4NvjMYL8gogWWYAO7ZFWFfHcbdbE57tZO8e4cbpj8tfUcwrwqSl3ad8HxpYWCdXcJUCeKKZS62Av1affwQ== +y18n@^5.0.5: + version "5.0.5" + resolved "https://registry.yarnpkg.com/y18n/-/y18n-5.0.5.tgz#8769ec08d03b1ea2df2500acef561743bbb9ab18" + integrity sha512-hsRUr4FFrvhhRH12wOdfs38Gy7k2FFzB9qgN9v3aLykRq0dRcdcpz5C9FxdS2NuhOrI/628b/KSTJ3rwHysYSg== + yallist@^2.1.2: version "2.1.2" resolved "https://registry.yarnpkg.com/yallist/-/yallist-2.1.2.tgz#1c11f9218f076089a47dd512f93c6699a6a81d52" @@ -11733,7 +11793,7 @@ yaml@^1.4.0: dependencies: "@babel/runtime" "^7.3.4" -yargs-parser@20.x: +yargs-parser@20.x, yargs-parser@^20.0.0, yargs-parser@^20.2.2: version "20.2.4" resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.4.tgz#b42890f14566796f85ae8e3a25290d205f154a54" integrity sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA== @@ -11754,11 +11814,6 @@ yargs-parser@^18.1.2: camelcase "^5.0.0" decamelize "^1.2.0" -yargs-parser@^19.0.1: - version "19.0.4" - resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-19.0.4.tgz#99183a3a59268b205c6b04177f2a5bfb46e79ba7" - integrity sha512-eXeQm7yXRjPFFyf1voPkZgXQZJjYfjgQUmGPbD2TLtZeIYzvacgWX7sQ5a1HsRgVP+pfKAkRZDNtTGev4h9vhw== - yargs@^15.0.1: version "15.3.1" resolved "https://registry.yarnpkg.com/yargs/-/yargs-15.3.1.tgz#9505b472763963e54afe60148ad27a330818e98b" @@ -11776,7 +11831,7 @@ yargs@^15.0.1: y18n "^4.0.0" yargs-parser "^18.1.1" -yargs@^15.1.0, yargs@^15.3.1, yargs@^15.4.1: +yargs@^15.1.0, yargs@^15.4.1: version "15.4.1" resolved "https://registry.yarnpkg.com/yargs/-/yargs-15.4.1.tgz#0d87a16de01aee9d8bec2bfbf74f67851730f4f8" integrity sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A== @@ -11793,6 +11848,19 @@ yargs@^15.1.0, yargs@^15.3.1, yargs@^15.4.1: y18n "^4.0.0" yargs-parser "^18.1.2" +yargs@^16.0.3: + version "16.2.0" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-16.2.0.tgz#1c82bf0f6b6a66eafce7ef30e376f49a12477f66" + integrity sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw== + dependencies: + cliui "^7.0.2" + escalade "^3.1.1" + get-caller-file "^2.0.5" + require-directory "^2.1.1" + string-width "^4.2.0" + y18n "^5.0.5" + yargs-parser "^20.2.2" + yauzl@^2.10.0: version "2.10.0" resolved "https://registry.yarnpkg.com/yauzl/-/yauzl-2.10.0.tgz#c7eb17c93e112cb1086fa6d8e51fb0667b79a5f9" From 97ecf8b242f78138807baffc326075eb96a715f3 Mon Sep 17 00:00:00 2001 From: Brendan Forster Date: Mon, 15 Feb 2021 10:46:08 -0400 Subject: [PATCH 28/48] run packaging step on Linux builds if all other CI steps pass (#435) --- .github/workflows/ci.yml | 22 ++++++++++++++++++++-- 1 file changed, 20 insertions(+), 2 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index f53fc2b6217..bec4a7fb608 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -21,14 +21,14 @@ jobs: fail-fast: false matrix: node: [14.15.4] - os: [macos-10.15, windows-2019, ubuntu-20.04] + os: [macos-10.15, windows-2019, ubuntu-18.04] arch: [x64, arm64] include: - os: macos-10.15 friendlyName: macOS - os: windows-2019 friendlyName: Windows - - os: ubuntu-20.04 + - os: ubuntu-18.04 friendlyName: Ubuntu timeout-minutes: 60 env: @@ -83,3 +83,21 @@ jobs: if: matrix.arch == 'x64' timeout-minutes: 5 run: yarn test:integration + - name: Package application + run: yarn run package + if: ${{ matrix.os == 'ubuntu-18.04' && matrix.arch == 'x64' }} + - name: Create Release + uses: softprops/action-gh-release@v1 + if: + ${{ matrix.os == 'ubuntu-18.04' && startsWith(github.ref, + 'refs/tags/') }} + with: + files: | + dist/*.AppImage + dist/*.deb + dist/*.rpm + dist/*.txt + draft: true + prerelease: true + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} From b2123c713b13046f6793e2ce0de8559ab9cda650 Mon Sep 17 00:00:00 2001 From: Brendan Forster Date: Mon, 15 Feb 2021 15:11:16 -0400 Subject: [PATCH 29/48] enable dependabot monitoring for specific dependencies in project (#440) --- .github/dependabot.yml | 11 +++++++++++ 1 file changed, 11 insertions(+) create mode 100644 .github/dependabot.yml diff --git a/.github/dependabot.yml b/.github/dependabot.yml new file mode 100644 index 00000000000..ffe6d27daf4 --- /dev/null +++ b/.github/dependabot.yml @@ -0,0 +1,11 @@ +version: 2 +updates: + - package-ecosystem: 'npm' + directory: '/' + open-pull-requests-limit: 5 + schedule: + interval: 'weekly' + allow: + - dependency-name: 'electron-builder' + - dependency-name: 'electron-packager' + - dependency-name: 'electron-installer-*' From 446f51748201a57bde0ff97e5666d7cab13e1ab5 Mon Sep 17 00:00:00 2001 From: Brendan Forster Date: Mon, 15 Feb 2021 15:22:09 -0400 Subject: [PATCH 30/48] bump electron-installer-redhat to latest version (#438) --- package.json | 2 +- yarn.lock | 14 +++++++------- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/package.json b/package.json index cdfb5e7bdea..c788822f163 100644 --- a/package.json +++ b/package.json @@ -177,7 +177,7 @@ }, "optionalDependencies": { "electron-installer-debian": "3.1.0", - "electron-installer-redhat": "3.2.0" + "electron-installer-redhat": "3.3.0" }, "resolutions": { "electron/@electron/get": "1.12.2" diff --git a/yarn.lock b/yarn.lock index 745d65d36ce..1bae2875bd4 100644 --- a/yarn.lock +++ b/yarn.lock @@ -4124,10 +4124,10 @@ electron-installer-debian@3.1.0: word-wrap "^1.2.3" yargs "^15.0.1" -electron-installer-redhat@3.2.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/electron-installer-redhat/-/electron-installer-redhat-3.2.0.tgz#2c0f5da6f4a244453e4675ab1eca0877a66788c5" - integrity sha512-XMA+fQj3ULNVMl4eG+hIvrYITEqP1pfpERvx6kRwuPd06vdtB4KucL9241DAHT0NR5E9gnyJHM9Y6N24kk0mcA== +electron-installer-redhat@3.3.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/electron-installer-redhat/-/electron-installer-redhat-3.3.0.tgz#acdb59d13d738c55debc5214114d36096eda1aed" + integrity sha512-hXIXB3uQXmXZy/v3MpbwWN4Of28ALpPt9ZyUDNEoSe0w7QZceL9IqI2K6Q6imiBJCLRC0hmT94WhlKj1RyGOWg== dependencies: "@malept/cross-spawn-promise" "^1.0.0" debug "^4.1.1" @@ -4135,7 +4135,7 @@ electron-installer-redhat@3.2.0: fs-extra "^9.0.0" lodash "^4.17.15" word-wrap "^1.2.3" - yargs "^15.1.0" + yargs "^16.0.2" electron-notarize@^1.0.0: version "1.0.0" @@ -11831,7 +11831,7 @@ yargs@^15.0.1: y18n "^4.0.0" yargs-parser "^18.1.1" -yargs@^15.1.0, yargs@^15.4.1: +yargs@^15.4.1: version "15.4.1" resolved "https://registry.yarnpkg.com/yargs/-/yargs-15.4.1.tgz#0d87a16de01aee9d8bec2bfbf74f67851730f4f8" integrity sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A== @@ -11848,7 +11848,7 @@ yargs@^15.1.0, yargs@^15.4.1: y18n "^4.0.0" yargs-parser "^18.1.2" -yargs@^16.0.3: +yargs@^16.0.2, yargs@^16.0.3: version "16.2.0" resolved "https://registry.yarnpkg.com/yargs/-/yargs-16.2.0.tgz#1c82bf0f6b6a66eafce7ef30e376f49a12477f66" integrity sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw== From c9bb0c3b9f1fa954d984256c6facba1d1c7eb491 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 8 Mar 2021 08:34:46 -0400 Subject: [PATCH 31/48] Bump electron-builder from 22.9.1 to 22.10.5 (#454) Bumps [electron-builder](https://github.com/electron-userland/electron-builder) from 22.9.1 to 22.10.5. - [Release notes](https://github.com/electron-userland/electron-builder/releases) - [Changelog](https://github.com/electron-userland/electron-builder/blob/master/CHANGELOG.md) - [Commits](https://github.com/electron-userland/electron-builder/compare/v22.9.1...v22.10.5) Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package.json | 2 +- yarn.lock | 556 +++++++++++++++++++++++++++++++++------------------ 2 files changed, 359 insertions(+), 199 deletions(-) diff --git a/package.json b/package.json index c788822f163..5f3bbf29be4 100644 --- a/package.json +++ b/package.json @@ -171,7 +171,7 @@ "@types/winston": "^2.2.0", "@types/xml2js": "^0.4.0", "electron": "=11.1.1", - "electron-builder": "^22.9.1", + "electron-builder": "^22.10.5", "electron-packager": "^15.2.0", "electron-winstaller": "^5.0.0" }, diff --git a/yarn.lock b/yarn.lock index 1bae2875bd4..c07789e3c04 100644 --- a/yarn.lock +++ b/yarn.lock @@ -346,6 +346,17 @@ global-agent "^2.0.2" global-tunnel-ng "^2.7.1" +"@electron/universal@1.0.4": + version "1.0.4" + resolved "https://registry.yarnpkg.com/@electron/universal/-/universal-1.0.4.tgz#231ac246c39d45b80e159bd21c3f9027dcaa10f5" + integrity sha512-ajZoumi4XwqwmZe8YVhu4XGkZBCPyWZsVCQONPTIe9TUlleSN+dic3YpXlaWcilx/HOzTdldTKtabNTeI0gDoA== + dependencies: + "@malept/cross-spawn-promise" "^1.1.0" + asar "^3.0.3" + debug "^4.3.1" + dir-compare "^2.4.0" + fs-extra "^9.0.1" + "@istanbuljs/load-nyc-config@^1.0.0": version "1.1.0" resolved "https://registry.yarnpkg.com/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz#fd3db1d59ecf7cf121e80650bb86712f9b55eced" @@ -586,6 +597,13 @@ dependencies: cross-spawn "^7.0.1" +"@malept/cross-spawn-promise@^1.1.0": + version "1.1.1" + resolved "https://registry.yarnpkg.com/@malept/cross-spawn-promise/-/cross-spawn-promise-1.1.1.tgz#504af200af6b98e198bce768bc1730c6936ae01d" + integrity sha512-RTBGWL5FWQcg9orDOCcp4LvItNzUPcyEU9bwaeJX0rJ1IQxzucC48Y0/sQLp/g6t99IQgAlGIaesJS+gTn7tVQ== + dependencies: + cross-spawn "^7.0.1" + "@primer/octicons@^10.0.0": version "10.0.0" resolved "https://registry.yarnpkg.com/@primer/octicons/-/octicons-10.0.0.tgz#81e94ed32545dfd3472c8625a5b345f3ea4c153d" @@ -840,6 +858,13 @@ dependencies: "@types/node" "*" +"@types/fs-extra@^9.0.7": + version "9.0.8" + resolved "https://registry.yarnpkg.com/@types/fs-extra/-/fs-extra-9.0.8.tgz#32c3c07ddf8caa5020f84b5f65a48470519f78ba" + integrity sha512-bnlTVTwq03Na7DpWxFJ1dvnORob+Otb8xHyUqUWhqvz/Ksg8+JXPlR52oeMSZ37YEOa5PyccbgUNutiQdi13TA== + dependencies: + "@types/node" "*" + "@types/fuzzaldrin-plus@^0.0.1": version "0.0.1" resolved "https://registry.yarnpkg.com/@types/fuzzaldrin-plus/-/fuzzaldrin-plus-0.0.1.tgz#bfe5e25bc5b4066848171baf7a8aaf30e267d30a" @@ -1052,7 +1077,7 @@ resolved "https://registry.yarnpkg.com/@types/normalize-package-data/-/normalize-package-data-2.4.0.tgz#e486d0d97396d79beedd0a6e33f4534ff6b4973e" integrity sha512-f5j5b/Gf71L+dbqxIpQ4Z2WlmI/mPJ0fOkGGmFgtb6sAu97EPczzbS3/tJKxmcYDj55OX6ssqwDAWOHIYDRDGA== -"@types/plist@^3.0.2": +"@types/plist@^3.0.1", "@types/plist@^3.0.2": version "3.0.2" resolved "https://registry.yarnpkg.com/@types/plist/-/plist-3.0.2.tgz#61b3727bba0f5c462fe333542534a0c3e19ccb01" integrity sha512-ULqvZNGMv0zRFvqn8/4LSPtnmN4MfhlPNtJCTpKuIIxGVGZ2rYWzFXrvEBoh9CVyqSE7D6YFRJ1hydLHI6kbWw== @@ -1276,6 +1301,11 @@ resolved "https://registry.yarnpkg.com/@types/uuid/-/uuid-8.3.0.tgz#215c231dff736d5ba92410e6d602050cce7e273f" integrity sha512-eQ9qFW/fhfGJF8WKHGEHZEyVWfZxrT+6CLIJGBcZPfxUh/+BnEj+UCGYMlr9qZuX/2AltsvwrGqp0LhEW8D0zQ== +"@types/verror@^1.10.3": + version "1.10.4" + resolved "https://registry.yarnpkg.com/@types/verror/-/verror-1.10.4.tgz#805c0612b3a0c124cf99f517364142946b74ba3b" + integrity sha512-OjJdqx6QlbyZw9LShPwRW+Kmiegeg3eWNI41MQQKaG3vjdU2L9SRElntM51HmHBY1cu7izxQJ1lMYioQh3XMBg== + "@types/webpack-bundle-analyzer@^2.9.2": version "2.9.2" resolved "https://registry.yarnpkg.com/@types/webpack-bundle-analyzer/-/webpack-bundle-analyzer-2.9.2.tgz#a3f9f4dd8bc3025550001a1704cfd31125773f40" @@ -1342,17 +1372,10 @@ resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-12.0.12.tgz#45dd1d0638e8c8f153e87d296907659296873916" integrity sha512-SOhuU4wNBxhhTHxYaiG5NY4HBhDIDnJF60GU+2LqHAdKKer86//e4yg69aENCtQ04n0ovz+tq2YPME5t5yp4pw== -"@types/yargs@^15.0.0": - version "15.0.4" - resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-15.0.4.tgz#7e5d0f8ca25e9d5849f2ea443cf7c402decd8299" - integrity sha512-9T1auFmbPZoxHz0enUFlUuKRy3it01R+hlggyVUMtnCTQRunsQYifnSGb8hET4Xo8yiC0o0r1paW3ud5+rbURg== - dependencies: - "@types/yargs-parser" "*" - -"@types/yargs@^15.0.5": - version "15.0.5" - resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-15.0.5.tgz#947e9a6561483bdee9adffc983e91a6902af8b79" - integrity sha512-Dk/IDOPtOgubt/IaevIUbTgV7doaKkoorvOyYM2CMwuDyP89bekI7H4xLIwunNYiK9jhCkmc6pUrJk3cj2AB9w== +"@types/yargs@^15.0.0", "@types/yargs@^15.0.13": + version "15.0.13" + resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-15.0.13.tgz#34f7fec8b389d7f3c1fd08026a5763e072d3c6dc" + integrity sha512-kQ5JNTrbDv3Rp5X2n/iUu37IJBDU2gsZ5R/g1/KHOOEc5IKfUFjXT6DENPGduh08I/pamwtEq4oul7gUqKTQDQ== dependencies: "@types/yargs-parser" "*" @@ -1885,37 +1908,38 @@ anymatch@^3.0.3, anymatch@~3.1.1: normalize-path "^3.0.0" picomatch "^2.0.4" -app-builder-bin@3.5.10: - version "3.5.10" - resolved "https://registry.yarnpkg.com/app-builder-bin/-/app-builder-bin-3.5.10.tgz#4a7f9999fccc0c435b6284ae1366bc76a17c4a7d" - integrity sha512-Jd+GW68lR0NeetgZDo47PdWBEPdnD+p0jEa7XaxjRC8u6Oo/wgJsfKUkORRgr2NpkD19IFKN50P6JYy04XHFLQ== +app-builder-bin@3.5.12: + version "3.5.12" + resolved "https://registry.yarnpkg.com/app-builder-bin/-/app-builder-bin-3.5.12.tgz#bbe174972cc1f481f73d6d92ad47a8b4c7eb4530" + integrity sha512-lQARM2AielmFoBeIo6LZigAe+58Wwe07ZWkt+wVeDxzyieNmeWjlvz/V5dKzinydwdHd+CNswN86sww46yijjA== -app-builder-lib@22.9.1: - version "22.9.1" - resolved "https://registry.yarnpkg.com/app-builder-lib/-/app-builder-lib-22.9.1.tgz#ccb8f1a02b628514a5dfab9401fa2a976689415c" - integrity sha512-KfXim/fiNwFW2SKffsjEMdAU7RbbEXn62x5YyXle1b4j9X/wEHW9iwox8De6y0hJdR+/kCC/49lI+VgNwLhV7A== +app-builder-lib@22.10.5: + version "22.10.5" + resolved "https://registry.yarnpkg.com/app-builder-lib/-/app-builder-lib-22.10.5.tgz#24a88581c891e5b187a0d569aa44e7c4a0dc8de2" + integrity sha512-/W8nlGamJCtKlQtsMWwU9vb+cX4pTNY+rJWCuc7oXUykVSMS50W7LhQusIjCelNfymUQ1XCu6cXEY/ylqhX12A== dependencies: "7zip-bin" "~5.0.3" "@develar/schema-utils" "~2.6.5" + "@electron/universal" "1.0.4" async-exit-hook "^2.0.1" bluebird-lst "^1.0.9" - builder-util "22.9.1" - builder-util-runtime "8.7.2" + builder-util "22.10.5" + builder-util-runtime "8.7.3" chromium-pickle-js "^0.2.0" - debug "^4.3.0" - ejs "^3.1.5" - electron-publish "22.9.1" - fs-extra "^9.0.1" - hosted-git-info "^3.0.5" + debug "^4.3.2" + ejs "^3.1.6" + electron-publish "22.10.5" + fs-extra "^9.1.0" + hosted-git-info "^3.0.8" is-ci "^2.0.0" - isbinaryfile "^4.0.6" - js-yaml "^3.14.0" + istextorbinary "^5.12.0" + js-yaml "^4.0.0" lazy-val "^1.0.4" minimatch "^3.0.4" - normalize-package-data "^2.5.0" + normalize-package-data "^3.0.0" read-config-file "6.0.0" sanitize-filename "^1.6.3" - semver "^7.3.2" + semver "^7.3.4" temp-file "^3.3.7" aproba@^1.1.1: @@ -1959,6 +1983,11 @@ argparse@^1.0.7: dependencies: sprintf-js "~1.0.2" +argparse@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38" + integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== + argv@0.0.2: version "0.0.2" resolved "https://registry.yarnpkg.com/argv/-/argv-0.0.2.tgz#ecbd16f8949b157183711b1bda334f37840185ab" @@ -2056,7 +2085,7 @@ asar@^2.0.1: mkdirp "^0.5.1" tmp-promise "^1.0.5" -asar@^3.0.0: +asar@^3.0.0, asar@^3.0.3: version "3.0.3" resolved "https://registry.yarnpkg.com/asar/-/asar-3.0.3.tgz#1fef03c2d6d2de0cbad138788e4f7ae03b129c7b" integrity sha512-k7zd+KoR+n8pl71PvgElcoKHrVNiSXtw7odKbyNpmgKe7EGRF9Pnu3uLOukD37EvavKwVFxOUpqXTIZC5B5Pmw== @@ -2489,6 +2518,11 @@ base64-js@^1.2.3: resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.3.0.tgz#cab1e6118f051095e58b5281aea8c1cd22bfc0e3" integrity sha512-ccav/yGvoa80BQDljCxsmmQ3Xvx60/UpBIij5QN21W3wBi/hhIC9OoO+KLpu9IJTS9j4DRVJ3aDDF9cMSoa2lw== +base64-js@^1.3.1: + version "1.5.1" + resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a" + integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== + base@^0.11.1: version "0.11.2" resolved "https://registry.yarnpkg.com/base/-/base-0.11.2.tgz#7bde5ced145b6d551a90db87f83c558b4eb48a8f" @@ -2539,6 +2573,11 @@ binary-extensions@^2.0.0: resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.1.0.tgz#30fa40c9e7fe07dbc895678cd287024dea241dd9" integrity sha512-1Yj8h9Q+QDF5FzhMs/c9+6UntbD5MkRfRwac8DoEm9ZfUBZ7tZ55YcGVAzEe4bXsdQHEk+s9S5wsOKVdZrw0tQ== +binaryextensions@^4.15.0: + version "4.15.0" + resolved "https://registry.yarnpkg.com/binaryextensions/-/binaryextensions-4.15.0.tgz#c63a502e0078ff1b0e9b00a9f74d3c2b0f8bd32e" + integrity sha512-MkUl3szxXolQ2scI1PM14WOT951KnaTNJ0eMKg7WzOI4kvSxyNo/Cygx4LOBNhwyINhAuSQpJW1rYD9aBSxGaw== + bindings@^1.5.0: version "1.5.0" resolved "https://registry.yarnpkg.com/bindings/-/bindings-1.5.0.tgz#10353c9e945334bc0511a6d90b38fbc7c9c504df" @@ -2622,19 +2661,19 @@ boom@5.x.x: dependencies: hoek "4.x.x" -boxen@^4.2.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/boxen/-/boxen-4.2.0.tgz#e411b62357d6d6d36587c8ac3d5d974daa070e64" - integrity sha512-eB4uT9RGzg2odpER62bBwSLvUeGC+WbRjjyyFhGsKnc8wp/m0+hQsMUvUe3H2V0D5vw0nBdO1hCJoZo5mKeuIQ== +boxen@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/boxen/-/boxen-5.0.0.tgz#64fe9b16066af815f51057adcc800c3730120854" + integrity sha512-5bvsqw+hhgUi3oYGK0Vf4WpIkyemp60WBInn7+WNfoISzAqk/HX4L7WNROq38E6UR/y3YADpv6pEm4BfkeEAdA== dependencies: ansi-align "^3.0.0" - camelcase "^5.3.1" - chalk "^3.0.0" - cli-boxes "^2.2.0" - string-width "^4.1.0" - term-size "^2.1.0" - type-fest "^0.8.1" + camelcase "^6.2.0" + chalk "^4.1.0" + cli-boxes "^2.2.1" + string-width "^4.2.0" + type-fest "^0.20.2" widest-line "^3.1.0" + wrap-ansi "^7.0.0" brace-expansion@^1.1.7: version "1.1.8" @@ -2754,6 +2793,11 @@ buffer-crc32@^0.2.1, buffer-crc32@^0.2.13, buffer-crc32@~0.2.3: resolved "https://registry.yarnpkg.com/buffer-crc32/-/buffer-crc32-0.2.13.tgz#0d333e3f00eac50aa1454abd30ef8c2a5d9a7242" integrity sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI= +buffer-equal@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/buffer-equal/-/buffer-equal-1.0.0.tgz#59616b498304d556abd466966b22eeda3eca5fbe" + integrity sha1-WWFrSYME1Var1GaWayLu2j7KX74= + buffer-from@1.x, buffer-from@^1.1.0: version "1.1.1" resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.1.tgz#32713bc028f75c02fdb710d7c7bcec1f2c6070ef" @@ -2778,6 +2822,14 @@ buffer@4.9.1, buffer@^4.3.0: ieee754 "^1.1.4" isarray "^1.0.0" +buffer@^5.1.0: + version "5.7.1" + resolved "https://registry.yarnpkg.com/buffer/-/buffer-5.7.1.tgz#ba62e7c13133053582197160851a8f648e99eed0" + integrity sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ== + dependencies: + base64-js "^1.3.1" + ieee754 "^1.1.13" + buffer@^5.2.1, buffer@^5.5.0: version "5.6.0" resolved "https://registry.yarnpkg.com/buffer/-/buffer-5.6.0.tgz#a31749dc7d81d84db08abf937b6b8c4033f62786" @@ -2786,30 +2838,30 @@ buffer@^5.2.1, buffer@^5.5.0: base64-js "^1.0.2" ieee754 "^1.1.4" -builder-util-runtime@8.7.2: - version "8.7.2" - resolved "https://registry.yarnpkg.com/builder-util-runtime/-/builder-util-runtime-8.7.2.tgz#d93afc71428a12789b437e13850e1fa7da956d72" - integrity sha512-xBqv+8bg6cfnzAQK1k3OGpfaHg+QkPgIgpEkXNhouZ0WiUkyZCftuRc2LYzQrLucFywpa14Xbc6+hTbpq83yRA== +builder-util-runtime@8.7.3: + version "8.7.3" + resolved "https://registry.yarnpkg.com/builder-util-runtime/-/builder-util-runtime-8.7.3.tgz#0aaafa52d25295c939496f62231ca9ff06c30e40" + integrity sha512-1Q2ReBqFblimF5g/TLg2+0M5Xzv0Ih5LxJ/BMWXvEy/e6pQKeeEpbkPMGsN6OiQgkygaZo5VXCXIjOkOQG5EoQ== dependencies: - debug "^4.1.1" + debug "^4.3.2" sax "^1.2.4" -builder-util@22.9.1: - version "22.9.1" - resolved "https://registry.yarnpkg.com/builder-util/-/builder-util-22.9.1.tgz#b7087a5cde477f90d718ca5d7fafb6ae261b16af" - integrity sha512-5hN/XOaYu4ZQUS6F+5CXE6jTo+NAnVqAxDuKGSaHWb9bejfv/rluChTLoY3/nJh7RFjkoyVjvFJv7zQDB1QmHw== +builder-util@22.10.5: + version "22.10.5" + resolved "https://registry.yarnpkg.com/builder-util/-/builder-util-22.10.5.tgz#8d0b04a3be6acc74938679aa90dcb3181b1ae86b" + integrity sha512-/MkLhmyo1gU3xMwXJxccQaRj/9tm5eTd6ZyebTf8SYouY4r3hRser+LxhOm/f8Z9W6oJvfPe0jc9TFsxYfMcsg== dependencies: "7zip-bin" "~5.0.3" "@types/debug" "^4.1.5" - "@types/fs-extra" "^9.0.1" - app-builder-bin "3.5.10" + "@types/fs-extra" "^9.0.7" + app-builder-bin "3.5.12" bluebird-lst "^1.0.9" - builder-util-runtime "8.7.2" + builder-util-runtime "8.7.3" chalk "^4.1.0" - debug "^4.3.0" - fs-extra "^9.0.1" + debug "^4.3.2" + fs-extra "^9.1.0" is-ci "^2.0.0" - js-yaml "^3.14.0" + js-yaml "^4.0.0" source-map-support "^0.5.19" stat-mode "^1.0.0" temp-file "^3.3.7" @@ -2919,7 +2971,7 @@ camelcase@^5.3.1: resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320" integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg== -camelcase@^6.0.0: +camelcase@^6.0.0, camelcase@^6.2.0: version "6.2.0" resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-6.2.0.tgz#924af881c9d525ac9d87f40d964e5cea982a1809" integrity sha512-c7wVvbw3f37nuobQNtgsgG9POC9qMbNuMQmTCqZv23b6MIz0fcYpBiOlv9gEN/hdLdnZTDQhg6e9Dq5M1vKvfg== @@ -3129,10 +3181,10 @@ clean-webpack-plugin@^0.1.19: dependencies: rimraf "^2.6.1" -cli-boxes@^2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/cli-boxes/-/cli-boxes-2.2.0.tgz#538ecae8f9c6ca508e3c3c95b453fe93cb4c168d" - integrity sha512-gpaBrMAizVEANOpfZp/EEUixTXDyGt7DFzdK5hU+UbWt/J0lB0w20ncZj59Z9a93xHb9u12zF5BS6i9RKbtg4w== +cli-boxes@^2.2.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/cli-boxes/-/cli-boxes-2.2.1.tgz#ddd5035d25094fce220e9cab40a45840a440318f" + integrity sha512-y4coMcylgSCdVinjiDBuR8PCC2bLjyGTwEmPb9NHR/QaNU6EUOXcTY/s6VjGMD6ENSEaeQYHCY0GNGS5jfMwPw== cli-table@0.3.1: version "0.3.1" @@ -3141,6 +3193,14 @@ cli-table@0.3.1: dependencies: colors "1.0.3" +cli-truncate@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/cli-truncate/-/cli-truncate-1.1.0.tgz#2b2dfd83c53cfd3572b87fc4d430a808afb04086" + integrity sha512-bAtZo0u82gCfaAGfSNxUdTI9mNyza7D8w4CVCcaOsy7sgwDzvx6ekr6cuWJqY3UGzgnQ1+4wgENup5eIhgxEYA== + dependencies: + slice-ansi "^1.0.0" + string-width "^2.0.0" + cliui@^6.0.0: version "6.0.0" resolved "https://registry.yarnpkg.com/cliui/-/cliui-6.0.0.tgz#511d702c0c4e41ca156d7d0e96021f23e13225b1" @@ -3444,6 +3504,13 @@ crc32-stream@^4.0.1: crc-32 "^1.2.0" readable-stream "^3.4.0" +crc@^3.8.0: + version "3.8.0" + resolved "https://registry.yarnpkg.com/crc/-/crc-3.8.0.tgz#ad60269c2c856f8c299e2c4cc0de4556914056c6" + integrity sha512-iX3mfgcTMIq3ZKLIsVFAbv7+Mc10kxabAGQb8HvjA1o3T1PIYprbakQ65d3I+2HGHt6nSKkM9PYjgoJO2KcFBQ== + dependencies: + buffer "^5.1.0" + create-ecdh@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/create-ecdh/-/create-ecdh-4.0.0.tgz#888c723596cdf7612f6498233eebd7a35301737d" @@ -3701,13 +3768,20 @@ debug@^4.0.1: dependencies: ms "^2.1.1" -debug@^4.1.0, debug@^4.1.1, debug@^4.3.0: +debug@^4.1.0, debug@^4.1.1, debug@^4.3.1: version "4.3.1" resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.1.tgz#f0d229c505e0c6d8c49ac553d1b13dc183f6b2ee" integrity sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ== dependencies: ms "2.1.2" +debug@^4.3.2: + version "4.3.2" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.2.tgz#f0a49c18ac8779e31d4a0c6029dfb76873c7428b" + integrity sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw== + dependencies: + ms "2.1.2" + debuglog@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/debuglog/-/debuglog-1.0.1.tgz#aa24ffb9ac3df9a2351837cfb2d279360cd78492" @@ -3901,17 +3975,44 @@ diffie-hellman@^5.0.0: miller-rabin "^4.0.0" randombytes "^2.0.0" -dmg-builder@22.9.1: - version "22.9.1" - resolved "https://registry.yarnpkg.com/dmg-builder/-/dmg-builder-22.9.1.tgz#64647224f37ee47fc9bd01947c21cc010a30511f" - integrity sha512-jc+DAirqmQrNT6KbDHdfEp8D1kD0DBTnsLhwUR3MX+hMBun5bT134LQzpdK0GKvd22GqF8L1Cz/NOgaVjscAXQ== +dir-compare@^2.4.0: + version "2.4.0" + resolved "https://registry.yarnpkg.com/dir-compare/-/dir-compare-2.4.0.tgz#785c41dc5f645b34343a4eafc50b79bac7f11631" + integrity sha512-l9hmu8x/rjVC9Z2zmGzkhOEowZvW7pmYws5CWHutg8u1JgvsKWMx7Q/UODeu4djLZ4FgW5besw5yvMQnBHzuCA== dependencies: - app-builder-lib "22.9.1" - builder-util "22.9.1" - fs-extra "^9.0.1" + buffer-equal "1.0.0" + colors "1.0.3" + commander "2.9.0" + minimatch "3.0.4" + +dmg-builder@22.10.5: + version "22.10.5" + resolved "https://registry.yarnpkg.com/dmg-builder/-/dmg-builder-22.10.5.tgz#65a33c106ead5a350c7de8997c546559bd6e0e7c" + integrity sha512-58FEpfH8PEFqjbUNka4bYr52snRT8+LSXrP4gy6EZWOVICbOlmTOYj988pfoLam5C5iXb3odmyUQqwWOxlsEUw== + dependencies: + app-builder-lib "22.10.5" + builder-util "22.10.5" + fs-extra "^9.1.0" iconv-lite "^0.6.2" - js-yaml "^3.14.0" + js-yaml "^4.0.0" sanitize-filename "^1.6.3" + optionalDependencies: + dmg-license "^1.0.8" + +dmg-license@^1.0.8: + version "1.0.8" + resolved "https://registry.yarnpkg.com/dmg-license/-/dmg-license-1.0.8.tgz#d52e234815f1a07a59706e5f2a2fea71991cf784" + integrity sha512-47GOb6b4yVzpovXC34heXElpH++ICg9GuWBeOTaokUNLAoAdWpE4VehudYEEtu96j2jXsgQWYf78nW7r+0Y3eg== + dependencies: + "@types/plist" "^3.0.1" + "@types/verror" "^1.10.3" + ajv "^6.10.0" + cli-truncate "^1.1.0" + crc "^3.8.0" + iconv-corefoundation "^1.1.5" + plist "^3.0.1" + smart-buffer "^4.0.2" + verror "^1.10.0" doctrine@^2.1.0: version "2.1.0" @@ -4048,6 +4149,14 @@ edge-paths@^2.1.0: resolved "https://registry.yarnpkg.com/edge-paths/-/edge-paths-2.1.0.tgz#f273f3a0fe022422048bb78f83eb61aca29977ef" integrity sha512-ZpIN1Vm5hlo9dkkST/1s8QqPNne2uwk3Plf6HcVUhnpfal0WnDRLdNj/wdQo3xRc+wnN3C25wPpPlV2E6aOunQ== +editions@^6.1.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/editions/-/editions-6.1.0.tgz#ba6c6cf9f4bb571d9e53ea34e771a602e5a66549" + integrity sha512-h6nWEyIocfgho9J3sTSuhU/WoFOu1hTX75rPBebNrbF38Y9QFDjCDizYXdikHTySW7Y3mSxli8bpDz9RAtc7rA== + dependencies: + errlop "^4.0.0" + version-range "^1.0.0" + ee-first@1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" @@ -4058,32 +4167,32 @@ ejs@^2.6.1: resolved "https://registry.yarnpkg.com/ejs/-/ejs-2.6.1.tgz#498ec0d495655abc6f23cd61868d926464071aa0" integrity sha512-0xy4A/twfrRCnkhfk8ErDi5DqdAsAqeGxht4xkCUrsvhhbQNs7E+4jV0CN7+NKIY0aHE72+XvqtBIXzD31ZbXQ== -ejs@^3.1.5: - version "3.1.5" - resolved "https://registry.yarnpkg.com/ejs/-/ejs-3.1.5.tgz#aed723844dc20acb4b170cd9ab1017e476a0d93b" - integrity sha512-dldq3ZfFtgVTJMLjOe+/3sROTzALlL9E34V4/sDtUd/KlBSS0s6U1/+WPE1B4sj9CXHJpL1M6rhNJnc9Wbal9w== +ejs@^3.1.6: + version "3.1.6" + resolved "https://registry.yarnpkg.com/ejs/-/ejs-3.1.6.tgz#5bfd0a0689743bb5268b3550cceeebbc1702822a" + integrity sha512-9lt9Zse4hPucPkoP7FHDF0LQAlGyF9JVpnClFLFH3aSSbxmyoqINRpp/9wePWJTUl4KOQwRL72Iw3InHPDkoGw== dependencies: jake "^10.6.1" -electron-builder@^22.9.1: - version "22.9.1" - resolved "https://registry.yarnpkg.com/electron-builder/-/electron-builder-22.9.1.tgz#a2962db6f2757bc01d02489f38fafe0809f68f60" - integrity sha512-GXPt8l5Mxwm1QKYopUM6/Tdh9W3695G6Ax+IFyj5pQ51G4SD5L1uq4/RkPSsOgs3rP7jNSV6g6OfDzdtVufPdA== +electron-builder@^22.10.5: + version "22.10.5" + resolved "https://registry.yarnpkg.com/electron-builder/-/electron-builder-22.10.5.tgz#03b156b93e6012609027c3aaa69201a3ad21e454" + integrity sha512-0q/289UUJUhRou6lZKDz/wzK6WprIQ6VXMTmaI+w9qXvSNugPC9UA5s2zXInOkjZOvO/xKnjeyiavrVSHYF3tA== dependencies: - "@types/yargs" "^15.0.5" - app-builder-lib "22.9.1" + "@types/yargs" "^15.0.13" + app-builder-lib "22.10.5" bluebird-lst "^1.0.9" - builder-util "22.9.1" - builder-util-runtime "8.7.2" + builder-util "22.10.5" + builder-util-runtime "8.7.3" chalk "^4.1.0" - dmg-builder "22.9.1" - fs-extra "^9.0.1" + dmg-builder "22.10.5" + fs-extra "^9.1.0" is-ci "^2.0.0" lazy-val "^1.0.4" read-config-file "6.0.0" sanitize-filename "^1.6.3" - update-notifier "^4.1.1" - yargs "^16.0.3" + update-notifier "^5.1.0" + yargs "^16.2.0" electron-chromedriver@^11.0.0: version "11.0.0" @@ -4180,19 +4289,19 @@ electron-packager@^15.2.0: semver "^7.1.3" yargs-parser "^20.0.0" -electron-publish@22.9.1: - version "22.9.1" - resolved "https://registry.yarnpkg.com/electron-publish/-/electron-publish-22.9.1.tgz#7cc76ac4cc53efd29ee31c1e5facb9724329068e" - integrity sha512-ducLjRJLEeU87FaTCWaUyDjCoLXHkawkltP2zqS/n2PyGke54ZIql0tBuUheht4EpR8AhFbVJ11spSn1gy8r6w== +electron-publish@22.10.5: + version "22.10.5" + resolved "https://registry.yarnpkg.com/electron-publish/-/electron-publish-22.10.5.tgz#9cbe46266b6c79d8c6e99840755682e2262d3543" + integrity sha512-dHyuazv3P3j1Xyv7pdwTwAvxWab2pCb0G0Oa6qWQoCc4b1/mRGY00M7AvYW1cPuUijj9zYAf1HmXfM6MifaMlA== dependencies: - "@types/fs-extra" "^9.0.1" + "@types/fs-extra" "^9.0.7" bluebird-lst "^1.0.9" - builder-util "22.9.1" - builder-util-runtime "8.7.2" + builder-util "22.10.5" + builder-util-runtime "8.7.3" chalk "^4.1.0" - fs-extra "^9.0.1" + fs-extra "^9.1.0" lazy-val "^1.0.4" - mime "^2.4.6" + mime "^2.5.0" electron-winstaller@*, electron-winstaller@^5.0.0: version "5.0.0" @@ -4311,6 +4420,11 @@ env-paths@^2.2.0: resolved "https://registry.yarnpkg.com/env-paths/-/env-paths-2.2.0.tgz#cdca557dc009152917d6166e2febe1f039685e43" integrity sha512-6u0VYSCo/OW6IoD5WCLLy9JUGARbamfSavcNXry/eu8aHVFei6CD3Sw+VGX5alea1i9pgPHW0mbu6Xj0uBh7gA== +errlop@^4.0.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/errlop/-/errlop-4.1.0.tgz#8e7b8f4f1bf0a6feafce4d14f0c0cf4bf5ef036b" + integrity sha512-vul6gGBuVt0M2TPi1/WrcL86+Hb3Q2Tpu3TME3sbVhZrYf7J1ZMHCodI25RQKCVurh56qTfvgM0p3w5cT4reSQ== + errno@^0.1.3, errno@^0.1.4: version "0.1.4" resolved "https://registry.yarnpkg.com/errno/-/errno-0.1.4.tgz#b896e23a9e5e8ba33871fc996abd3635fc9a1c7d" @@ -5145,17 +5259,7 @@ fs-extra@^8.1.0: jsonfile "^4.0.0" universalify "^0.1.0" -fs-extra@^9.0.0: - version "9.0.1" - resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-9.0.1.tgz#910da0062437ba4c39fedd863f1675ccfefcb9fc" - integrity sha512-h2iAoN838FqAFJY2/qVpzFXy+EBxfVE220PalAqQLDVsFOHLJrZvut5puAbCdNv6WJk+B8ihI+k0c7JK5erwqQ== - dependencies: - at-least-node "^1.0.0" - graceful-fs "^4.2.0" - jsonfile "^6.0.1" - universalify "^1.0.0" - -fs-extra@^9.0.1: +fs-extra@^9.0.0, fs-extra@^9.0.1, fs-extra@^9.1.0: version "9.1.0" resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-9.1.0.tgz#5954460c764a8da2094ba3554bf839e6b9a7c86d" integrity sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ== @@ -5398,12 +5502,12 @@ global-agent@^2.0.2: semver "^7.3.2" serialize-error "^7.0.1" -global-dirs@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/global-dirs/-/global-dirs-2.0.1.tgz#acdf3bb6685bcd55cb35e8a052266569e9469201" - integrity sha512-5HqUqdhkEovj2Of/ms3IeS/EekcO54ytHRLV4PEY2rhRwrHXLQjeVEES0Lhka0xwNDtGYn58wyC4s5+MHsOO6A== +global-dirs@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/global-dirs/-/global-dirs-3.0.0.tgz#70a76fe84ea315ab37b1f5576cbde7d48ef72686" + integrity sha512-v8ho2DS5RiCjftj1nD9NmnfaOzTdud7RRnVd9kFNOjqZbISlx5DQ+OrTkywgd0dIt7oFCvKetZSHoHcP3sDdiA== dependencies: - ini "^1.3.5" + ini "2.0.0" global-tunnel-ng@^2.7.1: version "2.7.1" @@ -5684,10 +5788,10 @@ hosted-git-info@^2.1.4: resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.8.9.tgz#dffc0bf9a21c02209090f2aa69429e1414daf3f9" integrity sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw== -hosted-git-info@^3.0.5: - version "3.0.7" - resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-3.0.7.tgz#a30727385ea85acfcee94e0aad9e368c792e036c" - integrity sha512-fWqc0IcuXs+BmE9orLDyVykAG9GJtGLGuZAAqgcckPgv5xad4AcXGIv8galtQvlwutxSlaMcdw7BUtq2EIvqCQ== +hosted-git-info@^3.0.6, hosted-git-info@^3.0.8: + version "3.0.8" + resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-3.0.8.tgz#6e35d4cc87af2c5f816e4cb9ce350ba87a3f370d" + integrity sha512-aXpmwoOhRBrw6X3j0h5RloK4x1OzsxMPyxqIHyNfSe2pypkVTZFpEiRoSipPEPlMrh0HW/XsjkJ5WgnCirpNUw== dependencies: lru-cache "^6.0.0" @@ -5805,6 +5909,14 @@ human-signals@^1.1.1: resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-1.1.1.tgz#c5b1cd14f50aeae09ab6c59fe63ba3395fe4dfa3" integrity sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw== +iconv-corefoundation@^1.1.5: + version "1.1.5" + resolved "https://registry.yarnpkg.com/iconv-corefoundation/-/iconv-corefoundation-1.1.5.tgz#90596d444a579aeb109f5ca113f6bb665a41be2b" + integrity sha512-hI4m7udfV04OcjleOmDaR4gwXnH4xumxN+ZmywHDiKf2CmAzsT9SVYe7Y4pdnQbyZfXwAQyrElykbE5PrPRfmQ== + dependencies: + cli-truncate "^1.1.0" + node-addon-api "^1.6.3" + iconv-lite@0.4.24: version "0.4.24" resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" @@ -5831,6 +5943,11 @@ icss-utils@^4.0.0: dependencies: postcss "^7.0.14" +ieee754@^1.1.13: + version "1.2.1" + resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352" + integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== + ieee754@^1.1.4: version "1.1.13" resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.1.13.tgz#ec168558e95aa181fd87d37f55c32bbcb6708b84" @@ -5912,12 +6029,17 @@ inherits@2.0.3: resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" integrity sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4= +ini@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/ini/-/ini-2.0.0.tgz#e5fd556ecdd5726be978fa1001862eacb0a94bc5" + integrity sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA== + ini@^1.3.4: version "1.3.8" resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.8.tgz#a29da425b48806f34767a4efce397269af28432c" integrity sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew== -ini@^1.3.5, ini@~1.3.0: +ini@~1.3.0: version "1.3.7" resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.7.tgz#a09363e1911972ea16d7a8851005d84cf09a9a84" integrity sha512-iKpRpXP+CrP2jyrxvg1kMUpXDyRUFDWurxbnVT1vQPx+Wz9uCYsMIqYuSBLV+PAaZG/d7kRLKRFc9oDMsH+mFQ== @@ -6133,18 +6255,18 @@ is-glob@^4.0.1, is-glob@~4.0.1: dependencies: is-extglob "^2.1.1" -is-installed-globally@^0.3.1: - version "0.3.1" - resolved "https://registry.yarnpkg.com/is-installed-globally/-/is-installed-globally-0.3.1.tgz#679afef819347a72584617fd19497f010b8ed35f" - integrity sha512-oiEcGoQbGc+3/iijAijrK2qFpkNoNjsHOm/5V5iaeydyrS/hnwaRCEgH5cpW0P3T1lSjV5piB7S5b5lEugNLhg== +is-installed-globally@^0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/is-installed-globally/-/is-installed-globally-0.4.0.tgz#9a0fd407949c30f86eb6959ef1b7994ed0b7b520" + integrity sha512-iwGqO3J21aaSkC7jWnHP/difazwS7SFeIqxv6wEtLU8Y5KlzFTjyqcSIT0d8s4+dDhKytsk9PJZ2BkS5eZwQRQ== dependencies: - global-dirs "^2.0.1" - is-path-inside "^3.0.1" + global-dirs "^3.0.0" + is-path-inside "^3.0.2" -is-npm@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/is-npm/-/is-npm-4.0.0.tgz#c90dd8380696df87a7a6d823c20d0b12bbe3c84d" - integrity sha512-96ECIfh9xtDDlPylNPXhzjsykHsMJZ18ASpaWzQyBr4YRTcVjUvzaHayDAES2oU/3KpljhHUjtSRNiDwi0F0ig== +is-npm@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/is-npm/-/is-npm-5.0.0.tgz#43e8d65cc56e1b67f8d47262cf667099193f45a8" + integrity sha512-WW/rQLOazUq+ST/bCAVBp/2oMERWLsR7OrKyt052dNDk4DHcDE0/7QSXITlmi+VBcV13DfIbysG3tZJm5RfdBA== is-number@^3.0.0: version "3.0.0" @@ -6175,10 +6297,10 @@ is-odd@^2.0.0: dependencies: is-number "^4.0.0" -is-path-inside@^3.0.1: - version "3.0.2" - resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-3.0.2.tgz#f5220fc82a3e233757291dddc9c5877f2a1f3017" - integrity sha512-/2UGPSgmtqwo1ktx8NDHjuPwZWmHhO+gj0f93EkhLB5RgW9RZevWYYlIkS6zePc6U2WpOdQYIwHe9YC4DWEBVg== +is-path-inside@^3.0.2: + version "3.0.3" + resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-3.0.3.tgz#d231362e53a07ff2b0e0ea7fed049161ffd16283" + integrity sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ== is-plain-object@^2.0.1, is-plain-object@^2.0.3, is-plain-object@^2.0.4: version "2.0.4" @@ -6285,11 +6407,6 @@ isbinaryfile@^3.0.2: resolved "https://registry.yarnpkg.com/isbinaryfile/-/isbinaryfile-3.0.2.tgz#4a3e974ec0cba9004d3fc6cde7209ea69368a621" integrity sha1-Sj6XTsDLqQBNP8bN5yCeppNopiE= -isbinaryfile@^4.0.6: - version "4.0.6" - resolved "https://registry.yarnpkg.com/isbinaryfile/-/isbinaryfile-4.0.6.tgz#edcb62b224e2b4710830b67498c8e4e5a4d2610b" - integrity sha512-ORrEy+SNVqUhrCaal4hA4fBzhggQQ+BaLntyPOdoEiwlKZW9BZiJXjg3RMiruE4tPEI3pyVPpySHQF/dKWperg== - isexe@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" @@ -6371,6 +6488,15 @@ istanbul-reports@^3.0.2: html-escaper "^2.0.0" istanbul-lib-report "^3.0.0" +istextorbinary@^5.12.0: + version "5.12.0" + resolved "https://registry.yarnpkg.com/istextorbinary/-/istextorbinary-5.12.0.tgz#2f84777838668fdf524c305a2363d6057aaeec84" + integrity sha512-wLDRWD7qpNTYubk04+q3en1+XZGS4vYWK0+SxNSXJLaITMMEK+J3o/TlOMyULeH1qozVZ9uUkKcyMA8odyxz8w== + dependencies: + binaryextensions "^4.15.0" + editions "^6.1.0" + textextensions "^5.11.0" + jake@^10.6.1: version "10.8.2" resolved "https://registry.yarnpkg.com/jake/-/jake-10.8.2.tgz#ebc9de8558160a66d82d0eadc6a2e58fbc500a7b" @@ -6884,14 +7010,6 @@ js-yaml@^3.10.0: argparse "^1.0.7" esprima "^4.0.0" -js-yaml@^3.14.0: - version "3.14.0" - resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.14.0.tgz#a7a34170f26a21bb162424d8adacb4113a69e482" - integrity sha512-/4IbIeHcD9VMHFqDR/gQ7EdZdLimOvW2DdcxFjdyyZ9NsbS+ccrXqVWDtab/lRl5AlUqmpBx8EhPaWR+OtY17A== - dependencies: - argparse "^1.0.7" - esprima "^4.0.0" - js-yaml@^3.7.0: version "3.11.0" resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.11.0.tgz#597c1a8bd57152f26d622ce4117851a51f5ebaef" @@ -6900,6 +7018,13 @@ js-yaml@^3.7.0: argparse "^1.0.7" esprima "^4.0.0" +js-yaml@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-4.0.0.tgz#f426bc0ff4b4051926cd588c71113183409a121f" + integrity sha512-pqon0s+4ScYUvX30wxQi3PogGFAlUyH0awepWvwkj4jD4v+ova3RiYw8bmA6x2rDrEaj8i/oWKoRxpVNW+Re8Q== + dependencies: + argparse "^2.0.1" + jsbn@~0.1.0: version "0.1.1" resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513" @@ -7132,7 +7257,7 @@ klona@^2.0.4: resolved "https://registry.yarnpkg.com/klona/-/klona-2.0.4.tgz#7bb1e3affb0cb8624547ef7e8f6708ea2e39dfc0" integrity sha512-ZRbnvdg/NxqzC7L9Uyqzf4psi1OM4Cuc+sJAkQPjO6XkQIJTNbfK2Rsmbw8fx1p2mkZdp2FZYo2+LwXYY/uwIA== -latest-version@^5.0.0: +latest-version@^5.1.0: version "5.1.0" resolved "https://registry.yarnpkg.com/latest-version/-/latest-version-5.1.0.tgz#119dfe908fe38d15dfa43ecd13fa12ec8832face" integrity sha512-weT+r0kTkRQdCdYCNtkMwWXQTMEswKrFBkm4ckQOMVhhqhIMI1UT2hMj+1iigIhgSZm5gTmrRXBNoGUgaTY1xA== @@ -7684,10 +7809,10 @@ mime@^2.4.4: resolved "https://registry.yarnpkg.com/mime/-/mime-2.4.4.tgz#bd7b91135fc6b01cde3e9bae33d659b63d8857e5" integrity sha512-LRxmNwziLPT828z+4YkNzloCFC2YM4wrB99k+AV5ZbEyfGNWfG8SO1FUXLmLDBSo89NrJZ4DIWeLjy1CHGhMGA== -mime@^2.4.6: - version "2.5.0" - resolved "https://registry.yarnpkg.com/mime/-/mime-2.5.0.tgz#2b4af934401779806ee98026bb42e8c1ae1876b1" - integrity sha512-ft3WayFSFUVBuJj7BMLKAQcSlItKtfjsKDDsii3rqFDAZ7t11zRe8ASw/GlmivGwVUYtwkQrxiGGpL6gFvB0ag== +mime@^2.5.0: + version "2.5.2" + resolved "https://registry.yarnpkg.com/mime/-/mime-2.5.2.tgz#6e3dc6cc2b9510643830e5f19d5cb753da5eeabe" + integrity sha512-tqkh47FzKeCPD2PUiPB6pkbMzsCasjxAfC62/Wap5qrUWcb+sFasXUC5I3gYM5iBM8v/Qpn4UK0x+j0iHyFPDg== mimic-fn@^2.1.0: version "2.1.0" @@ -7722,7 +7847,7 @@ minimalistic-crypto-utils@^1.0.1: resolved "https://registry.yarnpkg.com/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz#f6c00c1c0b082246e5c4d99dfb8c7c083b2b582a" integrity sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo= -minimatch@^3.0.2, minimatch@^3.0.4: +minimatch@3.0.4, minimatch@^3.0.2, minimatch@^3.0.4: version "3.0.4" resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA== @@ -7906,6 +8031,11 @@ no-case@^2.2.0: dependencies: lower-case "^1.1.1" +node-addon-api@^1.6.3: + version "1.7.2" + resolved "https://registry.yarnpkg.com/node-addon-api/-/node-addon-api-1.7.2.tgz#3df30b95720b53c24e59948b49532b662444f54d" + integrity sha512-ibPK3iA+vaY1eEjESkQkM0BbCqFOaZMiXRTtdB0u7b4djtY6JnsjvPdUHVMg6xQt3B8fpTTWHI9A+ADjM9frzg== + node-fetch@^2.2.0: version "2.6.1" resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.1.tgz#045bd323631f76ed2e2b55573394416b639a0052" @@ -7991,6 +8121,16 @@ normalize-package-data@^2.5.0: semver "2 || 3 || 4 || 5" validate-npm-package-license "^3.0.1" +normalize-package-data@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-3.0.0.tgz#1f8a7c423b3d2e85eb36985eaf81de381d01301a" + integrity sha512-6lUjEI0d3v6kFrtgA/lOx4zHCWULXsFNIjHolnZCKCTLA6m/G625cdn3O7eNmT0iD3jfo6HZ9cdImGZwf21prw== + dependencies: + hosted-git-info "^3.0.6" + resolve "^1.17.0" + semver "^7.3.2" + validate-npm-package-license "^3.0.1" + normalize-path@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-2.1.1.tgz#1ab28b556e198363a8c1a6f7e6fa20137fe6aed9" @@ -8871,10 +9011,10 @@ punycode@^2.1.1: resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== -pupa@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/pupa/-/pupa-2.0.1.tgz#dbdc9ff48ffbea4a26a069b6f9f7abb051008726" - integrity sha512-hEJH0s8PXLY/cdXh66tNEQGndDrIKNqNC5xmrysZy3i5C3oEoLna7YAOad+7u125+zH1HNXUmGEkrhb3c2VriA== +pupa@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/pupa/-/pupa-2.1.1.tgz#f5e8fd4afc2c5d97828faa523549ed8744a20d62" + integrity sha512-l1jNAspIBSFqbT+y+5FosojNpVpF94nlI+wDUpqP9enwOTfHx9f0gh5nB96vl+6yTpsJsypeNrwfzPrKuHB41A== dependencies: escape-goat "^2.0.0" @@ -9680,7 +9820,7 @@ semver-diff@^3.1.1: resolved "https://registry.yarnpkg.com/semver/-/semver-5.4.1.tgz#e059c09d8571f0540823733433505d3a2f00b18e" integrity sha512-WfG/X9+oATh81XtllIo/I8gOiY9EXRdv1cQdyykeXK17YcUW3EXUAi2To4pcH6nZtJPr7ZOpM5OMyWJZm+8Rsg== -semver@7.x, semver@^7.1.3, semver@^7.2.1, semver@^7.3.2: +semver@7.x, semver@^7.1.3, semver@^7.2.1, semver@^7.3.2, semver@^7.3.4: version "7.3.4" resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.4.tgz#27aaa7d2e4ca76452f98d3add093a72c943edc97" integrity sha512-tCfb2WLjqFAtXn4KEdxIhalnRtoKFN7nAwj0B3ZXCbQloV2tq5eDbcTmT68JJD3nRJq24/XgxtQKFIpQdtvmVw== @@ -9867,6 +10007,13 @@ slash@^3.0.0: resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== +slice-ansi@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-1.0.0.tgz#044f1a49d8842ff307aad6b505ed178bd950134d" + integrity sha512-POqxBK6Lb3q6s047D/XsDVNPnF9Dl8JSaqe9h9lURl0OdNqy/ujDrOiIHtsqXMGbWWTIomRzAMaTyawAU//Reg== + dependencies: + is-fullwidth-code-point "^2.0.0" + slice-ansi@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-2.1.0.tgz#cacd7693461a637a5788d92a7dd4fba068e81636" @@ -9881,6 +10028,11 @@ slide@~1.1.3: resolved "https://registry.yarnpkg.com/slide/-/slide-1.1.6.tgz#56eb027d65b4d2dce6cb2e2d32c4d4afc9e1d707" integrity sha1-VusCfWW00tzmyy4tMsTUr8nh1wc= +smart-buffer@^4.0.2: + version "4.1.0" + resolved "https://registry.yarnpkg.com/smart-buffer/-/smart-buffer-4.1.0.tgz#91605c25d91652f4661ea69ccf45f1b331ca21ba" + integrity sha512-iVICrxOzCynf/SNaBQCw34eM9jROU/s5rzIhpOvzhzuYHfJR/DhZfDkXiZSgKXfgv26HT3Yni3AV/DGw0cGnnw== + smoothscroll-polyfill@^0.3.6: version "0.3.6" resolved "https://registry.yarnpkg.com/smoothscroll-polyfill/-/smoothscroll-polyfill-0.3.6.tgz#492be845195157cdc2fc529a95d89e7a71509172" @@ -10183,6 +10335,14 @@ string-length@^4.0.1: char-regex "^1.0.2" strip-ansi "^6.0.0" +string-width@^2.0.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e" + integrity sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw== + dependencies: + is-fullwidth-code-point "^2.0.0" + strip-ansi "^4.0.0" + string-width@^3.0.0: version "3.1.0" resolved "https://registry.yarnpkg.com/string-width/-/string-width-3.1.0.tgz#22767be21b62af1081574306f69ac51b62203961" @@ -10289,6 +10449,13 @@ strip-ansi@^3.0.0: dependencies: ansi-regex "^2.0.0" +strip-ansi@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-4.0.0.tgz#a8479022eb1ac368a871389b635262c505ee368f" + integrity sha1-qEeQIusaw2iocTibY1JixQXuNo8= + dependencies: + ansi-regex "^3.0.0" + strip-ansi@^5.1.0: version "5.1.0" resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-5.1.0.tgz#55aaa54e33b4c0649a7338a43437b1887d153ec4" @@ -10498,11 +10665,6 @@ temp@^0.9.0: dependencies: rimraf "~2.6.2" -term-size@^2.1.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/term-size/-/term-size-2.2.0.tgz#1f16adedfe9bdc18800e1776821734086fcc6753" - integrity sha512-a6sumDlzyHVJWb8+YofY4TW112G6p2FCPEAFk+59gIYHv3XHRhm9ltVQ9kli4hNWeQBwSpe8cRN25x0ROunMOw== - terminal-link@^2.0.0: version "2.1.1" resolved "https://registry.yarnpkg.com/terminal-link/-/terminal-link-2.1.1.tgz#14a64a27ab3c0df933ea546fba55f2d078edc994" @@ -10560,6 +10722,11 @@ text-table@^0.2.0: resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" integrity sha1-f17oI66AUgfACvLfSoTsP8+lcLQ= +textextensions@^5.11.0: + version "5.12.0" + resolved "https://registry.yarnpkg.com/textextensions/-/textextensions-5.12.0.tgz#b908120b5c1bd4bb9eba41423d75b176011ab68a" + integrity sha512-IYogUDaP65IXboCiPPC0jTLLBzYlhhw2Y4b0a2trPgbHNGGGEfuHE6tds+yDcCf4mpNDaGISFzwSSezcXt+d6w== + throat@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/throat/-/throat-5.0.0.tgz#c5199235803aad18754a667d659b5e72ce16764b" @@ -10919,6 +11086,11 @@ type-fest@^0.13.1: resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.13.1.tgz#0172cb5bce80b0bd542ea348db50c7e21834d934" integrity sha512-34R7HTnG0XIJcBSn5XhDd7nNFPRcXYRZrBB2O2jdKqYODldSzBAqzsWoZYYvduky73toYS/ESqxPvkDf/F0XMg== +type-fest@^0.20.2: + version "0.20.2" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.20.2.tgz#1bf207f4b28f91583666cb5fbd327887301cd5f4" + integrity sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ== + type-fest@^0.6.0: version "0.6.0" resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.6.0.tgz#8d2a2370d3df886eb5c90ada1c5bf6188acf838b" @@ -11067,22 +11239,23 @@ upath@^1.1.1: resolved "https://registry.yarnpkg.com/upath/-/upath-1.2.0.tgz#8f66dbcd55a883acdae4408af8b035a5044c1894" integrity sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg== -update-notifier@^4.1.1: - version "4.1.3" - resolved "https://registry.yarnpkg.com/update-notifier/-/update-notifier-4.1.3.tgz#be86ee13e8ce48fb50043ff72057b5bd598e1ea3" - integrity sha512-Yld6Z0RyCYGB6ckIjffGOSOmHXj1gMeE7aROz4MG+XMkmixBX4jUngrGXNYz7wPKBmtoD4MnBa2Anu7RSKht/A== +update-notifier@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/update-notifier/-/update-notifier-5.1.0.tgz#4ab0d7c7f36a231dd7316cf7729313f0214d9ad9" + integrity sha512-ItnICHbeMh9GqUy31hFPrD1kcuZ3rpxDZbf4KUDavXwS0bW5m7SLbDQpGX3UYr072cbrF5hFUs3r5tUsPwjfHw== dependencies: - boxen "^4.2.0" - chalk "^3.0.0" + boxen "^5.0.0" + chalk "^4.1.0" configstore "^5.0.1" has-yarn "^2.1.0" import-lazy "^2.1.0" is-ci "^2.0.0" - is-installed-globally "^0.3.1" - is-npm "^4.0.0" + is-installed-globally "^0.4.0" + is-npm "^5.0.0" is-yarn-global "^0.3.0" - latest-version "^5.0.0" - pupa "^2.0.1" + latest-version "^5.1.0" + pupa "^2.1.1" + semver "^7.3.4" semver-diff "^3.1.1" xdg-basedir "^4.0.0" @@ -11253,7 +11426,7 @@ vary@~1.1.2: resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc" integrity sha1-IpnwLG3tMNSllhsLn3RSShj2NPw= -verror@1.10.0: +verror@1.10.0, verror@^1.10.0: version "1.10.0" resolved "https://registry.yarnpkg.com/verror/-/verror-1.10.0.tgz#3a105ca17053af55d6e270c1f8288682e18da400" integrity sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA= @@ -11262,6 +11435,18 @@ verror@1.10.0: core-util-is "1.0.2" extsprintf "^1.2.0" +version-compare@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/version-compare/-/version-compare-1.1.0.tgz#7b3e67e7e6cec5c72d9c9e586f8854e419ade17c" + integrity sha512-zVKtPOJTC9x23lzS4+4D7J+drq80BXVYAmObnr5zqxxFVH7OffJ1lJlAS7LYsQNV56jx/wtbw0UV7XHLrvd6kQ== + +version-range@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/version-range/-/version-range-1.1.0.tgz#1c233064202ee742afc9d56e21da3b2e15260acf" + integrity sha512-R1Ggfg2EXamrnrV3TkZ6yBNgITDbclB3viwSjbZ3+eK0VVNK4ajkYJTnDz5N0bIMYDtK9MUBvXJUnKO5RWWJ6w== + dependencies: + version-compare "^1.0.0" + vm-browserify@^1.0.1: version "1.1.2" resolved "https://registry.yarnpkg.com/vm-browserify/-/vm-browserify-1.1.2.tgz#78641c488b8e6ca91a75f511e7a3b32a86e5dda0" @@ -11798,14 +11983,6 @@ yargs-parser@20.x, yargs-parser@^20.0.0, yargs-parser@^20.2.2: resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.4.tgz#b42890f14566796f85ae8e3a25290d205f154a54" integrity sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA== -yargs-parser@^18.1.1: - version "18.1.2" - resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-18.1.2.tgz#2f482bea2136dbde0861683abea7756d30b504f1" - integrity sha512-hlIPNR3IzC1YuL1c2UwwDKpXlNFBqD1Fswwh1khz5+d8Cq/8yc/Mn0i+rQXduu8hcrFKvO7Eryk+09NecTQAAQ== - dependencies: - camelcase "^5.0.0" - decamelize "^1.2.0" - yargs-parser@^18.1.2: version "18.1.3" resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-18.1.3.tgz#be68c4975c6b2abf469236b0c870362fab09a7b0" @@ -11814,24 +11991,7 @@ yargs-parser@^18.1.2: camelcase "^5.0.0" decamelize "^1.2.0" -yargs@^15.0.1: - version "15.3.1" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-15.3.1.tgz#9505b472763963e54afe60148ad27a330818e98b" - integrity sha512-92O1HWEjw27sBfgmXiixJWT5hRBp2eobqXicLtPBIDBhYB+1HpwZlXmbW2luivBJHBzki+7VyCLRtAkScbTBQA== - dependencies: - cliui "^6.0.0" - decamelize "^1.2.0" - find-up "^4.1.0" - get-caller-file "^2.0.1" - require-directory "^2.1.1" - require-main-filename "^2.0.0" - set-blocking "^2.0.0" - string-width "^4.2.0" - which-module "^2.0.0" - y18n "^4.0.0" - yargs-parser "^18.1.1" - -yargs@^15.4.1: +yargs@^15.0.1, yargs@^15.4.1: version "15.4.1" resolved "https://registry.yarnpkg.com/yargs/-/yargs-15.4.1.tgz#0d87a16de01aee9d8bec2bfbf74f67851730f4f8" integrity sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A== @@ -11848,7 +12008,7 @@ yargs@^15.4.1: y18n "^4.0.0" yargs-parser "^18.1.2" -yargs@^16.0.2, yargs@^16.0.3: +yargs@^16.0.2, yargs@^16.2.0: version "16.2.0" resolved "https://registry.yarnpkg.com/yargs/-/yargs-16.2.0.tgz#1c82bf0f6b6a66eafce7ef30e376f49a12477f66" integrity sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw== From e70f997422e9c12368610125fe12bfe97f5b0333 Mon Sep 17 00:00:00 2001 From: Mrlinkwii Date: Thu, 6 May 2021 18:30:55 +0100 Subject: [PATCH 32/48] adds reminder to user when submitting an issue (#489) --- .github/ISSUE_TEMPLATE/bug_report.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/bug_report.md index 38ece480aed..c44a7e6ea4d 100644 --- a/.github/ISSUE_TEMPLATE/bug_report.md +++ b/.github/ISSUE_TEMPLATE/bug_report.md @@ -11,6 +11,12 @@ assignees: '' A clear and concise description of what the bug is. + + + + + + ### Version & OS Open 'About GitHub Desktop' menu to see the Desktop version. Also include what operating system you are using. From 8515c90d6a8ed082b394e2021e9443f491b5be9c Mon Sep 17 00:00:00 2001 From: Mrlinkwii Date: Sat, 8 May 2021 22:41:34 +0100 Subject: [PATCH 33/48] add missing MIME type to AppImage package (#496) --- script/electron-builder-linux.yml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/script/electron-builder-linux.yml b/script/electron-builder-linux.yml index 768783bc667..7d5d6f5dfde 100644 --- a/script/electron-builder-linux.yml +++ b/script/electron-builder-linux.yml @@ -6,6 +6,10 @@ linux: mimeTypes: - x-scheme-handler/x-github-client - x-scheme-handler/x-github-desktop-auth + # workaround for handling OAuth flow until we figure out what we're doing + # With the development OAuth details + # see https://github.com/shiftkey/desktop/issues/72 for more details + - x-scheme-handler/x-github-desktop-dev-auth target: - AppImage maintainer: 'GitHub, Inc ' From ab9c3a0c61846943b2bd8872ecfd3349dcb9fbc2 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 19 May 2021 09:32:04 -0300 Subject: [PATCH 34/48] Bump electron-builder from 22.10.5 to 22.11.1 (#500) Bumps [electron-builder](https://github.com/electron-userland/electron-builder) from 22.10.5 to 22.11.1. - [Release notes](https://github.com/electron-userland/electron-builder/releases) - [Changelog](https://github.com/electron-userland/electron-builder/blob/master/CHANGELOG.md) - [Commits](https://github.com/electron-userland/electron-builder/compare/v22.10.5...v22.11.1) Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package.json | 2 +- yarn.lock | 183 +++++++++++++++++++++++++++++---------------------- 2 files changed, 104 insertions(+), 81 deletions(-) diff --git a/package.json b/package.json index 5f3bbf29be4..6ba6a78d331 100644 --- a/package.json +++ b/package.json @@ -171,7 +171,7 @@ "@types/winston": "^2.2.0", "@types/xml2js": "^0.4.0", "electron": "=11.1.1", - "electron-builder": "^22.10.5", + "electron-builder": "^22.11.1", "electron-packager": "^15.2.0", "electron-winstaller": "^5.0.0" }, diff --git a/yarn.lock b/yarn.lock index c07789e3c04..a990fced260 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2,10 +2,10 @@ # yarn lockfile v1 -"7zip-bin@~5.0.3": - version "5.0.3" - resolved "https://registry.yarnpkg.com/7zip-bin/-/7zip-bin-5.0.3.tgz#bc5b5532ecafd923a61f2fb097e3b108c0106a3f" - integrity sha512-GLyWIFBbGvpKPGo55JyRZAo4lVbnBiD52cKlw/0Vt+wnmKvWJkpZvsjVoaIolyBXDeAQKSicRtqFNPem9w0WYA== +"7zip-bin@~5.1.1": + version "5.1.1" + resolved "https://registry.yarnpkg.com/7zip-bin/-/7zip-bin-5.1.1.tgz#9274ec7460652f9c632c59addf24efb1684ef876" + integrity sha512-sAP4LldeWNz0lNzmTird3uWfFDWWTeg6V/MsmyyLR9X1idwKBWIgt/ZvinqQldJm3LecKEs1emkbquO6PCiLVQ== "@babel/code-frame@^7.0.0": version "7.0.0" @@ -604,6 +604,16 @@ dependencies: cross-spawn "^7.0.1" +"@malept/flatpak-bundler@^0.4.0": + version "0.4.0" + resolved "https://registry.yarnpkg.com/@malept/flatpak-bundler/-/flatpak-bundler-0.4.0.tgz#e8a32c30a95d20c2b1bb635cc580981a06389858" + integrity sha512-9QOtNffcOF/c1seMCDnjckb3R9WHcG34tky+FHpNKKCW0wc/scYLwMtO+ptyGUfMW0/b/n4qRiALlaFHc9Oj7Q== + dependencies: + debug "^4.1.1" + fs-extra "^9.0.0" + lodash "^4.17.15" + tmp-promise "^3.0.2" + "@primer/octicons@^10.0.0": version "10.0.0" resolved "https://registry.yarnpkg.com/@primer/octicons/-/octicons-10.0.0.tgz#81e94ed32545dfd3472c8625a5b345f3ea4c153d" @@ -1372,13 +1382,20 @@ resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-12.0.12.tgz#45dd1d0638e8c8f153e87d296907659296873916" integrity sha512-SOhuU4wNBxhhTHxYaiG5NY4HBhDIDnJF60GU+2LqHAdKKer86//e4yg69aENCtQ04n0ovz+tq2YPME5t5yp4pw== -"@types/yargs@^15.0.0", "@types/yargs@^15.0.13": +"@types/yargs@^15.0.0": version "15.0.13" resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-15.0.13.tgz#34f7fec8b389d7f3c1fd08026a5763e072d3c6dc" integrity sha512-kQ5JNTrbDv3Rp5X2n/iUu37IJBDU2gsZ5R/g1/KHOOEc5IKfUFjXT6DENPGduh08I/pamwtEq4oul7gUqKTQDQ== dependencies: "@types/yargs-parser" "*" +"@types/yargs@^16.0.0": + version "16.0.1" + resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-16.0.1.tgz#5fc5d41f69762e00fbecbc8d4bf9dea47d8726f4" + integrity sha512-x4HABGLyzr5hKUzBC9dvjciOTm11WVH1NWonNjGgxapnTHu5SWUqyqn0zQ6Re0yQU0lsQ6ztLCoMAKDGZflyxA== + dependencies: + "@types/yargs-parser" "*" + "@types/yauzl@^2.9.1": version "2.9.1" resolved "https://registry.yarnpkg.com/@types/yauzl/-/yauzl-2.9.1.tgz#d10f69f9f522eef3cf98e30afb684a1e1ec923af" @@ -1908,36 +1925,36 @@ anymatch@^3.0.3, anymatch@~3.1.1: normalize-path "^3.0.0" picomatch "^2.0.4" -app-builder-bin@3.5.12: - version "3.5.12" - resolved "https://registry.yarnpkg.com/app-builder-bin/-/app-builder-bin-3.5.12.tgz#bbe174972cc1f481f73d6d92ad47a8b4c7eb4530" - integrity sha512-lQARM2AielmFoBeIo6LZigAe+58Wwe07ZWkt+wVeDxzyieNmeWjlvz/V5dKzinydwdHd+CNswN86sww46yijjA== +app-builder-bin@3.5.13: + version "3.5.13" + resolved "https://registry.yarnpkg.com/app-builder-bin/-/app-builder-bin-3.5.13.tgz#6dd7f4de34a4e408806f99b8c7d6ef1601305b7e" + integrity sha512-ighVe9G+bT1ENGdp9ecO1P+94vv/f+FUwaI+XkNzeg9bYF8Oi3BQ+mJuxS00UgyHs8luuOzjzC+qnAtdb43Mpg== -app-builder-lib@22.10.5: - version "22.10.5" - resolved "https://registry.yarnpkg.com/app-builder-lib/-/app-builder-lib-22.10.5.tgz#24a88581c891e5b187a0d569aa44e7c4a0dc8de2" - integrity sha512-/W8nlGamJCtKlQtsMWwU9vb+cX4pTNY+rJWCuc7oXUykVSMS50W7LhQusIjCelNfymUQ1XCu6cXEY/ylqhX12A== +app-builder-lib@22.11.1: + version "22.11.1" + resolved "https://registry.yarnpkg.com/app-builder-lib/-/app-builder-lib-22.11.1.tgz#a19c90f9bbe22309db53768434e744095ddf6c85" + integrity sha512-oHpXomred4MeDzdLBMNuBtyEMiskX4wwQE+23CKFMqVfLEzpRwErZW+xegFi8aa/rhAOdED0THSHTcIr5rylIQ== dependencies: - "7zip-bin" "~5.0.3" + "7zip-bin" "~5.1.1" "@develar/schema-utils" "~2.6.5" "@electron/universal" "1.0.4" + "@malept/flatpak-bundler" "^0.4.0" async-exit-hook "^2.0.1" bluebird-lst "^1.0.9" - builder-util "22.10.5" - builder-util-runtime "8.7.3" + builder-util "22.11.1" + builder-util-runtime "8.7.4" chromium-pickle-js "^0.2.0" debug "^4.3.2" ejs "^3.1.6" - electron-publish "22.10.5" + electron-publish "22.11.1" fs-extra "^9.1.0" - hosted-git-info "^3.0.8" - is-ci "^2.0.0" + hosted-git-info "^4.0.0" + is-ci "^3.0.0" istextorbinary "^5.12.0" js-yaml "^4.0.0" lazy-val "^1.0.4" minimatch "^3.0.4" - normalize-package-data "^3.0.0" - read-config-file "6.0.0" + read-config-file "6.1.0" sanitize-filename "^1.6.3" semver "^7.3.4" temp-file "^3.3.7" @@ -2838,29 +2855,29 @@ buffer@^5.2.1, buffer@^5.5.0: base64-js "^1.0.2" ieee754 "^1.1.4" -builder-util-runtime@8.7.3: - version "8.7.3" - resolved "https://registry.yarnpkg.com/builder-util-runtime/-/builder-util-runtime-8.7.3.tgz#0aaafa52d25295c939496f62231ca9ff06c30e40" - integrity sha512-1Q2ReBqFblimF5g/TLg2+0M5Xzv0Ih5LxJ/BMWXvEy/e6pQKeeEpbkPMGsN6OiQgkygaZo5VXCXIjOkOQG5EoQ== +builder-util-runtime@8.7.4: + version "8.7.4" + resolved "https://registry.yarnpkg.com/builder-util-runtime/-/builder-util-runtime-8.7.4.tgz#83f9f00bdf496cb3636d551cb5f5db56cdf25c96" + integrity sha512-2vDOwH0cyyCLQwW0Tsrg3RKKQpEcrV70KFun39E8RPzNFBOv9ds9juK8WUnO6ml+xJWKkKTjWLFdF3y+8GbPOw== dependencies: debug "^4.3.2" sax "^1.2.4" -builder-util@22.10.5: - version "22.10.5" - resolved "https://registry.yarnpkg.com/builder-util/-/builder-util-22.10.5.tgz#8d0b04a3be6acc74938679aa90dcb3181b1ae86b" - integrity sha512-/MkLhmyo1gU3xMwXJxccQaRj/9tm5eTd6ZyebTf8SYouY4r3hRser+LxhOm/f8Z9W6oJvfPe0jc9TFsxYfMcsg== +builder-util@22.11.1: + version "22.11.1" + resolved "https://registry.yarnpkg.com/builder-util/-/builder-util-22.11.1.tgz#d0683d192294a8ebf3db413e995f9abdfba59e35" + integrity sha512-3U/ALRUA/neNxGIP/G06sqAiMmCjAgIrRN2wWdAop6s/WKpzYRh+8alFUCLyfSanmxXjnzfJt9dy4TL+HHh6Rw== dependencies: - "7zip-bin" "~5.0.3" + "7zip-bin" "~5.1.1" "@types/debug" "^4.1.5" "@types/fs-extra" "^9.0.7" - app-builder-bin "3.5.12" + app-builder-bin "3.5.13" bluebird-lst "^1.0.9" - builder-util-runtime "8.7.3" + builder-util-runtime "8.7.4" chalk "^4.1.0" debug "^4.3.2" fs-extra "^9.1.0" - is-ci "^2.0.0" + is-ci "^3.0.0" js-yaml "^4.0.0" source-map-support "^0.5.19" stat-mode "^1.0.0" @@ -3138,6 +3155,11 @@ ci-info@^2.0.0: resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-2.0.0.tgz#67a9e964be31a51e15e5010d58e6f12834002f46" integrity sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ== +ci-info@^3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-3.1.1.tgz#9a32fcefdf7bcdb6f0a7e1c0f8098ec57897b80a" + integrity sha512-kdRWLBIJwdsYJWYJFtAFFYxybguqeF91qpZaggjG5Nf8QKdizFG2hjqvaTXbxFIcYbSaD74KpAXv6BSm17DHEQ== + cipher-base@^1.0.0, cipher-base@^1.0.1, cipher-base@^1.0.3: version "1.0.4" resolved "https://registry.yarnpkg.com/cipher-base/-/cipher-base-1.0.4.tgz#8760e4ecc272f4c363532f926d874aae2c1397de" @@ -3985,17 +4007,17 @@ dir-compare@^2.4.0: commander "2.9.0" minimatch "3.0.4" -dmg-builder@22.10.5: - version "22.10.5" - resolved "https://registry.yarnpkg.com/dmg-builder/-/dmg-builder-22.10.5.tgz#65a33c106ead5a350c7de8997c546559bd6e0e7c" - integrity sha512-58FEpfH8PEFqjbUNka4bYr52snRT8+LSXrP4gy6EZWOVICbOlmTOYj988pfoLam5C5iXb3odmyUQqwWOxlsEUw== +dmg-builder@22.11.1: + version "22.11.1" + resolved "https://registry.yarnpkg.com/dmg-builder/-/dmg-builder-22.11.1.tgz#87a8d7c4fd56166aab805425401b96481f656b83" + integrity sha512-FZIIYpEs/ZfKJbRKjTjpQAHJKjRBlgd6QDUEAuC6OuyHUwwrflQay1rNTwp7spqbu9HDHipiQevX/e8dFmkQmw== dependencies: - app-builder-lib "22.10.5" - builder-util "22.10.5" + app-builder-lib "22.11.1" + builder-util "22.11.1" + builder-util-runtime "8.7.4" fs-extra "^9.1.0" iconv-lite "^0.6.2" js-yaml "^4.0.0" - sanitize-filename "^1.6.3" optionalDependencies: dmg-license "^1.0.8" @@ -4174,23 +4196,21 @@ ejs@^3.1.6: dependencies: jake "^10.6.1" -electron-builder@^22.10.5: - version "22.10.5" - resolved "https://registry.yarnpkg.com/electron-builder/-/electron-builder-22.10.5.tgz#03b156b93e6012609027c3aaa69201a3ad21e454" - integrity sha512-0q/289UUJUhRou6lZKDz/wzK6WprIQ6VXMTmaI+w9qXvSNugPC9UA5s2zXInOkjZOvO/xKnjeyiavrVSHYF3tA== +electron-builder@^22.11.1: + version "22.11.1" + resolved "https://registry.yarnpkg.com/electron-builder/-/electron-builder-22.11.1.tgz#8d443f6599e718ef96837573a6d07754dde64310" + integrity sha512-IbAhv31idKzTR8KNQ+AIRf9J5vfU+9PzpG2STKHjYYWwGhfhZ5H4YfR0xH8xiwI4gaL1uTrfiq7fnpQxafhF2A== dependencies: - "@types/yargs" "^15.0.13" - app-builder-lib "22.10.5" - bluebird-lst "^1.0.9" - builder-util "22.10.5" - builder-util-runtime "8.7.3" + "@types/yargs" "^16.0.0" + app-builder-lib "22.11.1" + builder-util "22.11.1" + builder-util-runtime "8.7.4" chalk "^4.1.0" - dmg-builder "22.10.5" + dmg-builder "22.11.1" fs-extra "^9.1.0" - is-ci "^2.0.0" + is-ci "^3.0.0" lazy-val "^1.0.4" - read-config-file "6.0.0" - sanitize-filename "^1.6.3" + read-config-file "6.1.0" update-notifier "^5.1.0" yargs "^16.2.0" @@ -4289,15 +4309,14 @@ electron-packager@^15.2.0: semver "^7.1.3" yargs-parser "^20.0.0" -electron-publish@22.10.5: - version "22.10.5" - resolved "https://registry.yarnpkg.com/electron-publish/-/electron-publish-22.10.5.tgz#9cbe46266b6c79d8c6e99840755682e2262d3543" - integrity sha512-dHyuazv3P3j1Xyv7pdwTwAvxWab2pCb0G0Oa6qWQoCc4b1/mRGY00M7AvYW1cPuUijj9zYAf1HmXfM6MifaMlA== +electron-publish@22.11.1: + version "22.11.1" + resolved "https://registry.yarnpkg.com/electron-publish/-/electron-publish-22.11.1.tgz#23f3e96772b2de82c32b75e6070053ed246dfa6a" + integrity sha512-M8aXlIuP0QcGCdSzMvv67m8sZYdRpXFfiGpFbZOXJlO3Io/3jkNvbnUMVfhbamlmYrQKNSRJzB7te/pn+qYneA== dependencies: "@types/fs-extra" "^9.0.7" - bluebird-lst "^1.0.9" - builder-util "22.10.5" - builder-util-runtime "8.7.3" + builder-util "22.11.1" + builder-util-runtime "8.7.4" chalk "^4.1.0" fs-extra "^9.1.0" lazy-val "^1.0.4" @@ -5788,10 +5807,10 @@ hosted-git-info@^2.1.4: resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.8.9.tgz#dffc0bf9a21c02209090f2aa69429e1414daf3f9" integrity sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw== -hosted-git-info@^3.0.6, hosted-git-info@^3.0.8: - version "3.0.8" - resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-3.0.8.tgz#6e35d4cc87af2c5f816e4cb9ce350ba87a3f370d" - integrity sha512-aXpmwoOhRBrw6X3j0h5RloK4x1OzsxMPyxqIHyNfSe2pypkVTZFpEiRoSipPEPlMrh0HW/XsjkJ5WgnCirpNUw== +hosted-git-info@^4.0.0: + version "4.0.2" + resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-4.0.2.tgz#5e425507eede4fea846b7262f0838456c4209961" + integrity sha512-c9OGXbZ3guC/xOlCg1Ci/VgWlwsqDv1yMQL1CWqXDL0hDjXuNcq0zuR4xqPSuasI3kqFDhqSyTjREz5gzq0fXg== dependencies: lru-cache "^6.0.0" @@ -6137,6 +6156,13 @@ is-ci@^2.0.0: dependencies: ci-info "^2.0.0" +is-ci@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/is-ci/-/is-ci-3.0.0.tgz#c7e7be3c9d8eef7d0fa144390bd1e4b88dc4c994" + integrity sha512-kDXyttuLeslKAHYL/K28F2YkM3x5jvFPEw3yXbRptXydjD9rpLEz+C5K5iutY9ZiUu6AP41JdvRQwF4Iqs4ZCQ== + dependencies: + ci-info "^3.1.1" + is-core-module@^2.1.0: version "2.2.0" resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.2.0.tgz#97037ef3d52224d85163f5597b2b63d9afed981a" @@ -7153,6 +7179,13 @@ json5@^1.0.1: dependencies: minimist "^1.2.0" +json5@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.0.tgz#2dfefe720c6ba525d9ebd909950f0515316c89a3" + integrity sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA== + dependencies: + minimist "^1.2.5" + jsonc-parser@^2.2.1: version "2.3.0" resolved "https://registry.yarnpkg.com/jsonc-parser/-/jsonc-parser-2.3.0.tgz#7c7fc988ee1486d35734faaaa866fadb00fa91ee" @@ -8121,16 +8154,6 @@ normalize-package-data@^2.5.0: semver "2 || 3 || 4 || 5" validate-npm-package-license "^3.0.1" -normalize-package-data@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-3.0.0.tgz#1f8a7c423b3d2e85eb36985eaf81de381d01301a" - integrity sha512-6lUjEI0d3v6kFrtgA/lOx4zHCWULXsFNIjHolnZCKCTLA6m/G625cdn3O7eNmT0iD3jfo6HZ9cdImGZwf21prw== - dependencies: - hosted-git-info "^3.0.6" - resolve "^1.17.0" - semver "^7.3.2" - validate-npm-package-license "^3.0.1" - normalize-path@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-2.1.1.tgz#1ab28b556e198363a8c1a6f7e6fa20137fe6aed9" @@ -9156,15 +9179,15 @@ react-is@^17.0.1: resolved "https://registry.yarnpkg.com/react-is/-/react-is-17.0.1.tgz#5b3531bd76a645a4c9fb6e693ed36419e3301339" integrity sha512-NAnt2iGDXohE5LI7uBnLnqvLQMtzhkiAOLXTmv+qnF9Ky7xAPcX8Up/xWIhxvLVGJvuLiNc4xQLtuqDRzb4fSA== -read-config-file@6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/read-config-file/-/read-config-file-6.0.0.tgz#224b5dca6a5bdc1fb19e63f89f342680efdb9299" - integrity sha512-PHjROSdpceKUmqS06wqwP92VrM46PZSTubmNIMJ5DrMwg1OgenSTSEHIkCa6TiOJ+y/J0xnG1fFwG3M+Oi1aNA== +read-config-file@6.1.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/read-config-file/-/read-config-file-6.1.0.tgz#204256f18eedf4dc82dd5f7886dfd7b931d03b08" + integrity sha512-Z3ua8JTbQgrDNDWD0zMtwE2Np+RGeL+Jew5T7bSRfJGcq+t883wExEXNWLQqMaStfRp9Xz6RPsx01/jruhn+tg== dependencies: dotenv "^8.2.0" dotenv-expand "^5.1.0" - js-yaml "^3.13.1" - json5 "^2.1.2" + js-yaml "^4.0.0" + json5 "^2.2.0" lazy-val "^1.0.4" read-installed@4.0.3: From d787aff6fb4eed5336dd440bfe57d854441f5749 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 24 May 2021 09:46:04 -0300 Subject: [PATCH 35/48] Bump electron-builder from 22.11.1 to 22.11.5 (#505) Bumps [electron-builder](https://github.com/electron-userland/electron-builder) from 22.11.1 to 22.11.5. - [Release notes](https://github.com/electron-userland/electron-builder/releases) - [Changelog](https://github.com/electron-userland/electron-builder/blob/master/CHANGELOG.md) - [Commits](https://github.com/electron-userland/electron-builder/compare/v22.11.1...v22.11.5) Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package.json | 2 +- yarn.lock | 320 +++++++++++++++++++++++++-------------------------- 2 files changed, 156 insertions(+), 166 deletions(-) diff --git a/package.json b/package.json index 6ba6a78d331..020b82714f4 100644 --- a/package.json +++ b/package.json @@ -171,7 +171,7 @@ "@types/winston": "^2.2.0", "@types/xml2js": "^0.4.0", "electron": "=11.1.1", - "electron-builder": "^22.11.1", + "electron-builder": "^22.11.5", "electron-packager": "^15.2.0", "electron-winstaller": "^5.0.0" }, diff --git a/yarn.lock b/yarn.lock index a990fced260..773cff8c819 100644 --- a/yarn.lock +++ b/yarn.lock @@ -346,10 +346,10 @@ global-agent "^2.0.2" global-tunnel-ng "^2.7.1" -"@electron/universal@1.0.4": - version "1.0.4" - resolved "https://registry.yarnpkg.com/@electron/universal/-/universal-1.0.4.tgz#231ac246c39d45b80e159bd21c3f9027dcaa10f5" - integrity sha512-ajZoumi4XwqwmZe8YVhu4XGkZBCPyWZsVCQONPTIe9TUlleSN+dic3YpXlaWcilx/HOzTdldTKtabNTeI0gDoA== +"@electron/universal@1.0.5": + version "1.0.5" + resolved "https://registry.yarnpkg.com/@electron/universal/-/universal-1.0.5.tgz#b812340e4ef21da2b3ee77b2b4d35c9b86defe37" + integrity sha512-zX9O6+jr2NMyAdSkwEUlyltiI4/EBLu2Ls/VD3pUQdi3cAYeYfdQnT2AJJ38HE4QxLccbU13LSpccw1IWlkyag== dependencies: "@malept/cross-spawn-promise" "^1.1.0" asar "^3.0.3" @@ -861,6 +861,13 @@ dependencies: "@types/node" "*" +"@types/fs-extra@^9.0.11": + version "9.0.11" + resolved "https://registry.yarnpkg.com/@types/fs-extra/-/fs-extra-9.0.11.tgz#8cc99e103499eab9f347dbc6ca4e99fb8d2c2b87" + integrity sha512-mZsifGG4QeQ7hlkhO56u7zt/ycBgGxSVsFI/6lGTU34VtwkiqrrSDgw0+ygs8kFGWcXnFQWMrzF2h7TtDFNixA== + dependencies: + "@types/node" "*" + "@types/fs-extra@^9.0.2": version "9.0.4" resolved "https://registry.yarnpkg.com/@types/fs-extra/-/fs-extra-9.0.4.tgz#12553138cf0438db9a31cdc8b0a3aa9332eb67aa" @@ -868,13 +875,6 @@ dependencies: "@types/node" "*" -"@types/fs-extra@^9.0.7": - version "9.0.8" - resolved "https://registry.yarnpkg.com/@types/fs-extra/-/fs-extra-9.0.8.tgz#32c3c07ddf8caa5020f84b5f65a48470519f78ba" - integrity sha512-bnlTVTwq03Na7DpWxFJ1dvnORob+Otb8xHyUqUWhqvz/Ksg8+JXPlR52oeMSZ37YEOa5PyccbgUNutiQdi13TA== - dependencies: - "@types/node" "*" - "@types/fuzzaldrin-plus@^0.0.1": version "0.0.1" resolved "https://registry.yarnpkg.com/@types/fuzzaldrin-plus/-/fuzzaldrin-plus-0.0.1.tgz#bfe5e25bc5b4066848171baf7a8aaf30e267d30a" @@ -1389,10 +1389,10 @@ dependencies: "@types/yargs-parser" "*" -"@types/yargs@^16.0.0": - version "16.0.1" - resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-16.0.1.tgz#5fc5d41f69762e00fbecbc8d4bf9dea47d8726f4" - integrity sha512-x4HABGLyzr5hKUzBC9dvjciOTm11WVH1NWonNjGgxapnTHu5SWUqyqn0zQ6Re0yQU0lsQ6ztLCoMAKDGZflyxA== +"@types/yargs@^16.0.1": + version "16.0.3" + resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-16.0.3.tgz#4b6d35bb8e680510a7dc2308518a80ee1ef27e01" + integrity sha512-YlFfTGS+zqCgXuXNV26rOIeETOkXnGQXP/pjjL9P0gO/EP9jTmc7pUBhx+jVEIxpq41RX33GQ7N3DzOSfZoglQ== dependencies: "@types/yargs-parser" "*" @@ -1930,34 +1930,34 @@ app-builder-bin@3.5.13: resolved "https://registry.yarnpkg.com/app-builder-bin/-/app-builder-bin-3.5.13.tgz#6dd7f4de34a4e408806f99b8c7d6ef1601305b7e" integrity sha512-ighVe9G+bT1ENGdp9ecO1P+94vv/f+FUwaI+XkNzeg9bYF8Oi3BQ+mJuxS00UgyHs8luuOzjzC+qnAtdb43Mpg== -app-builder-lib@22.11.1: - version "22.11.1" - resolved "https://registry.yarnpkg.com/app-builder-lib/-/app-builder-lib-22.11.1.tgz#a19c90f9bbe22309db53768434e744095ddf6c85" - integrity sha512-oHpXomred4MeDzdLBMNuBtyEMiskX4wwQE+23CKFMqVfLEzpRwErZW+xegFi8aa/rhAOdED0THSHTcIr5rylIQ== +app-builder-lib@22.11.5: + version "22.11.5" + resolved "https://registry.yarnpkg.com/app-builder-lib/-/app-builder-lib-22.11.5.tgz#d49f49dc2d9fd225249e4ae7e30add2996e7062f" + integrity sha512-lLEDvJuLdc4IVyADJK6t4qEIjRhOUj4p19B1RS/8pN/oAb8X5Qe1t3Einbsi4oFBJBweH2LIygnSAwumjQh9iA== dependencies: "7zip-bin" "~5.1.1" "@develar/schema-utils" "~2.6.5" - "@electron/universal" "1.0.4" + "@electron/universal" "1.0.5" "@malept/flatpak-bundler" "^0.4.0" async-exit-hook "^2.0.1" bluebird-lst "^1.0.9" - builder-util "22.11.1" - builder-util-runtime "8.7.4" + builder-util "22.11.5" + builder-util-runtime "8.7.6" chromium-pickle-js "^0.2.0" debug "^4.3.2" ejs "^3.1.6" - electron-publish "22.11.1" - fs-extra "^9.1.0" - hosted-git-info "^4.0.0" + electron-publish "22.11.5" + fs-extra "^10.0.0" + hosted-git-info "^4.0.2" is-ci "^3.0.0" - istextorbinary "^5.12.0" - js-yaml "^4.0.0" - lazy-val "^1.0.4" + isbinaryfile "^4.0.8" + js-yaml "^4.1.0" + lazy-val "^1.0.5" minimatch "^3.0.4" - read-config-file "6.1.0" + read-config-file "6.2.0" sanitize-filename "^1.6.3" - semver "^7.3.4" - temp-file "^3.3.7" + semver "^7.3.5" + temp-file "^3.4.0" aproba@^1.1.1: version "1.2.0" @@ -2590,11 +2590,6 @@ binary-extensions@^2.0.0: resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.1.0.tgz#30fa40c9e7fe07dbc895678cd287024dea241dd9" integrity sha512-1Yj8h9Q+QDF5FzhMs/c9+6UntbD5MkRfRwac8DoEm9ZfUBZ7tZ55YcGVAzEe4bXsdQHEk+s9S5wsOKVdZrw0tQ== -binaryextensions@^4.15.0: - version "4.15.0" - resolved "https://registry.yarnpkg.com/binaryextensions/-/binaryextensions-4.15.0.tgz#c63a502e0078ff1b0e9b00a9f74d3c2b0f8bd32e" - integrity sha512-MkUl3szxXolQ2scI1PM14WOT951KnaTNJ0eMKg7WzOI4kvSxyNo/Cygx4LOBNhwyINhAuSQpJW1rYD9aBSxGaw== - bindings@^1.5.0: version "1.5.0" resolved "https://registry.yarnpkg.com/bindings/-/bindings-1.5.0.tgz#10353c9e945334bc0511a6d90b38fbc7c9c504df" @@ -2855,33 +2850,33 @@ buffer@^5.2.1, buffer@^5.5.0: base64-js "^1.0.2" ieee754 "^1.1.4" -builder-util-runtime@8.7.4: - version "8.7.4" - resolved "https://registry.yarnpkg.com/builder-util-runtime/-/builder-util-runtime-8.7.4.tgz#83f9f00bdf496cb3636d551cb5f5db56cdf25c96" - integrity sha512-2vDOwH0cyyCLQwW0Tsrg3RKKQpEcrV70KFun39E8RPzNFBOv9ds9juK8WUnO6ml+xJWKkKTjWLFdF3y+8GbPOw== +builder-util-runtime@8.7.6: + version "8.7.6" + resolved "https://registry.yarnpkg.com/builder-util-runtime/-/builder-util-runtime-8.7.6.tgz#4b43c96db2bd494ced7694bcd7674934655e8324" + integrity sha512-rj9AIY7CzLSuTOXpToiaQkruYh6UEQ+kYnd5UET22ch8MGClEtIZKXHG14qEiXEr2x4EOKDMxkcTa+9TYaE+ug== dependencies: debug "^4.3.2" sax "^1.2.4" -builder-util@22.11.1: - version "22.11.1" - resolved "https://registry.yarnpkg.com/builder-util/-/builder-util-22.11.1.tgz#d0683d192294a8ebf3db413e995f9abdfba59e35" - integrity sha512-3U/ALRUA/neNxGIP/G06sqAiMmCjAgIrRN2wWdAop6s/WKpzYRh+8alFUCLyfSanmxXjnzfJt9dy4TL+HHh6Rw== +builder-util@22.11.5: + version "22.11.5" + resolved "https://registry.yarnpkg.com/builder-util/-/builder-util-22.11.5.tgz#08836d00e6bef39bdffd8a66fb07d2d5021b9c3c" + integrity sha512-ur9ksncYOnJg/VuJz3PdsBQHeg9tjdOC2HVj8mQ0WNcn/H3MO4tnwKBOWWikPDiWEjeBSvFUmYBnGFkRiUNkww== dependencies: "7zip-bin" "~5.1.1" "@types/debug" "^4.1.5" - "@types/fs-extra" "^9.0.7" + "@types/fs-extra" "^9.0.11" app-builder-bin "3.5.13" bluebird-lst "^1.0.9" - builder-util-runtime "8.7.4" - chalk "^4.1.0" + builder-util-runtime "8.7.6" + chalk "^4.1.1" debug "^4.3.2" - fs-extra "^9.1.0" + fs-extra "^10.0.0" is-ci "^3.0.0" - js-yaml "^4.0.0" + js-yaml "^4.1.0" source-map-support "^0.5.19" stat-mode "^1.0.0" - temp-file "^3.3.7" + temp-file "^3.4.0" builtin-modules@^1.0.0, builtin-modules@^1.1.1: version "1.1.1" @@ -3033,10 +3028,10 @@ chalk@^3.0.0: ansi-styles "^4.1.0" supports-color "^7.1.0" -chalk@^4.0.0, chalk@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.0.tgz#4e14870a618d9e2edd97dd8345fd9d9dc315646a" - integrity sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A== +chalk@^4.0.0, chalk@^4.1.0, chalk@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.1.tgz#c80b3fab28bf6371e6863325eee67e618b77e6ad" + integrity sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg== dependencies: ansi-styles "^4.1.0" supports-color "^7.1.0" @@ -4007,31 +4002,31 @@ dir-compare@^2.4.0: commander "2.9.0" minimatch "3.0.4" -dmg-builder@22.11.1: - version "22.11.1" - resolved "https://registry.yarnpkg.com/dmg-builder/-/dmg-builder-22.11.1.tgz#87a8d7c4fd56166aab805425401b96481f656b83" - integrity sha512-FZIIYpEs/ZfKJbRKjTjpQAHJKjRBlgd6QDUEAuC6OuyHUwwrflQay1rNTwp7spqbu9HDHipiQevX/e8dFmkQmw== +dmg-builder@22.11.5: + version "22.11.5" + resolved "https://registry.yarnpkg.com/dmg-builder/-/dmg-builder-22.11.5.tgz#0df9843def73a217097956982fa21bb4d6a5836e" + integrity sha512-91Shh9+OK9RwBlBURxvhSnQNibEh/JYNAnMOfFguyNbasSfF50Jme4b3dgsQrHTTTfkFijcvzykPPFAZofQs6g== dependencies: - app-builder-lib "22.11.1" - builder-util "22.11.1" - builder-util-runtime "8.7.4" - fs-extra "^9.1.0" + app-builder-lib "22.11.5" + builder-util "22.11.5" + builder-util-runtime "8.7.6" + fs-extra "^10.0.0" iconv-lite "^0.6.2" - js-yaml "^4.0.0" + js-yaml "^4.1.0" optionalDependencies: - dmg-license "^1.0.8" + dmg-license "^1.0.9" -dmg-license@^1.0.8: - version "1.0.8" - resolved "https://registry.yarnpkg.com/dmg-license/-/dmg-license-1.0.8.tgz#d52e234815f1a07a59706e5f2a2fea71991cf784" - integrity sha512-47GOb6b4yVzpovXC34heXElpH++ICg9GuWBeOTaokUNLAoAdWpE4VehudYEEtu96j2jXsgQWYf78nW7r+0Y3eg== +dmg-license@^1.0.9: + version "1.0.9" + resolved "https://registry.yarnpkg.com/dmg-license/-/dmg-license-1.0.9.tgz#a2fb8d692af0e30b0730b5afc91ed9edc2d9cb4f" + integrity sha512-Rq6qMDaDou2+aPN2SYy0x7LDznoJ/XaG6oDcH5wXUp+WRWQMUYE6eM+F+nex+/LSXOp1uw4HLFoed0YbfU8R/Q== dependencies: "@types/plist" "^3.0.1" "@types/verror" "^1.10.3" ajv "^6.10.0" cli-truncate "^1.1.0" crc "^3.8.0" - iconv-corefoundation "^1.1.5" + iconv-corefoundation "^1.1.6" plist "^3.0.1" smart-buffer "^4.0.2" verror "^1.10.0" @@ -4128,10 +4123,10 @@ dotenv-expand@^5.1.0: resolved "https://registry.yarnpkg.com/dotenv-expand/-/dotenv-expand-5.1.0.tgz#3fbaf020bfd794884072ea26b1e9791d45a629f0" integrity sha512-YXQl1DSa4/PQyRfgrv6aoNjhasp/p4qs9FjJ4q4cQk+8m4r6k4ZSiEyytKG8f8W9gi8WsQtIObNmKd+tMzNTmA== -dotenv@^8.2.0: - version "8.2.0" - resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-8.2.0.tgz#97e619259ada750eea3e4ea3e26bceea5424b16a" - integrity sha512-8sJ78ElpbDJBHNeBzUbUVLsqKdccaa/BXF1uPTw3GrvQTBgrQrtObr2mUrE38vzYd8cEv+m/JBfDLioYcfXoaw== +dotenv@^9.0.2: + version "9.0.2" + resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-9.0.2.tgz#dacc20160935a37dea6364aa1bef819fb9b6ab05" + integrity sha512-I9OvvrHp4pIARv4+x9iuewrWycX6CcZtoAu1XrzPxc5UygMJXJZYmBsynku8IkrJwgypE5DGNjDPmPRhDCptUg== duplexer3@^0.1.4: version "0.1.4" @@ -4171,14 +4166,6 @@ edge-paths@^2.1.0: resolved "https://registry.yarnpkg.com/edge-paths/-/edge-paths-2.1.0.tgz#f273f3a0fe022422048bb78f83eb61aca29977ef" integrity sha512-ZpIN1Vm5hlo9dkkST/1s8QqPNne2uwk3Plf6HcVUhnpfal0WnDRLdNj/wdQo3xRc+wnN3C25wPpPlV2E6aOunQ== -editions@^6.1.0: - version "6.1.0" - resolved "https://registry.yarnpkg.com/editions/-/editions-6.1.0.tgz#ba6c6cf9f4bb571d9e53ea34e771a602e5a66549" - integrity sha512-h6nWEyIocfgho9J3sTSuhU/WoFOu1hTX75rPBebNrbF38Y9QFDjCDizYXdikHTySW7Y3mSxli8bpDz9RAtc7rA== - dependencies: - errlop "^4.0.0" - version-range "^1.0.0" - ee-first@1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" @@ -4196,23 +4183,23 @@ ejs@^3.1.6: dependencies: jake "^10.6.1" -electron-builder@^22.11.1: - version "22.11.1" - resolved "https://registry.yarnpkg.com/electron-builder/-/electron-builder-22.11.1.tgz#8d443f6599e718ef96837573a6d07754dde64310" - integrity sha512-IbAhv31idKzTR8KNQ+AIRf9J5vfU+9PzpG2STKHjYYWwGhfhZ5H4YfR0xH8xiwI4gaL1uTrfiq7fnpQxafhF2A== - dependencies: - "@types/yargs" "^16.0.0" - app-builder-lib "22.11.1" - builder-util "22.11.1" - builder-util-runtime "8.7.4" - chalk "^4.1.0" - dmg-builder "22.11.1" - fs-extra "^9.1.0" +electron-builder@^22.11.5: + version "22.11.5" + resolved "https://registry.yarnpkg.com/electron-builder/-/electron-builder-22.11.5.tgz#914d8183e1bab7cda43ef1d67fc3d17314c7e242" + integrity sha512-QIhzrmSLNteItRvmAjwNpsya08oZeOJIrxFww/Alkjcwnrn5Xgog2qf3Xfa3ocuNUQIwb+mMzZrzqnPu0Mamyg== + dependencies: + "@types/yargs" "^16.0.1" + app-builder-lib "22.11.5" + builder-util "22.11.5" + builder-util-runtime "8.7.6" + chalk "^4.1.1" + dmg-builder "22.11.5" + fs-extra "^10.0.0" is-ci "^3.0.0" - lazy-val "^1.0.4" - read-config-file "6.1.0" + lazy-val "^1.0.5" + read-config-file "6.2.0" update-notifier "^5.1.0" - yargs "^16.2.0" + yargs "^17.0.1" electron-chromedriver@^11.0.0: version "11.0.0" @@ -4309,18 +4296,18 @@ electron-packager@^15.2.0: semver "^7.1.3" yargs-parser "^20.0.0" -electron-publish@22.11.1: - version "22.11.1" - resolved "https://registry.yarnpkg.com/electron-publish/-/electron-publish-22.11.1.tgz#23f3e96772b2de82c32b75e6070053ed246dfa6a" - integrity sha512-M8aXlIuP0QcGCdSzMvv67m8sZYdRpXFfiGpFbZOXJlO3Io/3jkNvbnUMVfhbamlmYrQKNSRJzB7te/pn+qYneA== +electron-publish@22.11.5: + version "22.11.5" + resolved "https://registry.yarnpkg.com/electron-publish/-/electron-publish-22.11.5.tgz#2fcd3280c4267e70e4aa15003c9b7dc34923320e" + integrity sha512-peN4tEP80Kb6reuwKKvSu9p/XUWpx/7x747u5NSg7Kg2axBjzdMtX5ZqBThfPtJWJhSWZ7PEYWmNyUCfdQl2Ag== dependencies: - "@types/fs-extra" "^9.0.7" - builder-util "22.11.1" - builder-util-runtime "8.7.4" - chalk "^4.1.0" - fs-extra "^9.1.0" - lazy-val "^1.0.4" - mime "^2.5.0" + "@types/fs-extra" "^9.0.11" + builder-util "22.11.5" + builder-util-runtime "8.7.6" + chalk "^4.1.1" + fs-extra "^10.0.0" + lazy-val "^1.0.5" + mime "^2.5.2" electron-winstaller@*, electron-winstaller@^5.0.0: version "5.0.0" @@ -4439,11 +4426,6 @@ env-paths@^2.2.0: resolved "https://registry.yarnpkg.com/env-paths/-/env-paths-2.2.0.tgz#cdca557dc009152917d6166e2febe1f039685e43" integrity sha512-6u0VYSCo/OW6IoD5WCLLy9JUGARbamfSavcNXry/eu8aHVFei6CD3Sw+VGX5alea1i9pgPHW0mbu6Xj0uBh7gA== -errlop@^4.0.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/errlop/-/errlop-4.1.0.tgz#8e7b8f4f1bf0a6feafce4d14f0c0cf4bf5ef036b" - integrity sha512-vul6gGBuVt0M2TPi1/WrcL86+Hb3Q2Tpu3TME3sbVhZrYf7J1ZMHCodI25RQKCVurh56qTfvgM0p3w5cT4reSQ== - errno@^0.1.3, errno@^0.1.4: version "0.1.4" resolved "https://registry.yarnpkg.com/errno/-/errno-0.1.4.tgz#b896e23a9e5e8ba33871fc996abd3635fc9a1c7d" @@ -5251,6 +5233,15 @@ fs-constants@^1.0.0: resolved "https://registry.yarnpkg.com/fs-constants/-/fs-constants-1.0.0.tgz#6be0de9be998ce16af8afc24497b9ee9b7ccd9ad" integrity sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow== +fs-extra@^10.0.0: + version "10.0.0" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-10.0.0.tgz#9ff61b655dde53fb34a82df84bb214ce802e17c1" + integrity sha512-C5owb14u9eJwizKGdchcDUQeFtlSHHthBk8pbX9Vc1PFZrLombudjDnNns88aYslCyF6IY5SUw3Roz6xShcEIQ== + dependencies: + graceful-fs "^4.2.0" + jsonfile "^6.0.1" + universalify "^2.0.0" + fs-extra@^4.0.0: version "4.0.3" resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-4.0.3.tgz#0d852122e5bc5beb453fb028e9c0c9bf36340c94" @@ -5278,7 +5269,7 @@ fs-extra@^8.1.0: jsonfile "^4.0.0" universalify "^0.1.0" -fs-extra@^9.0.0, fs-extra@^9.0.1, fs-extra@^9.1.0: +fs-extra@^9.0.0, fs-extra@^9.0.1: version "9.1.0" resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-9.1.0.tgz#5954460c764a8da2094ba3554bf839e6b9a7c86d" integrity sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ== @@ -5807,7 +5798,7 @@ hosted-git-info@^2.1.4: resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.8.9.tgz#dffc0bf9a21c02209090f2aa69429e1414daf3f9" integrity sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw== -hosted-git-info@^4.0.0: +hosted-git-info@^4.0.2: version "4.0.2" resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-4.0.2.tgz#5e425507eede4fea846b7262f0838456c4209961" integrity sha512-c9OGXbZ3guC/xOlCg1Ci/VgWlwsqDv1yMQL1CWqXDL0hDjXuNcq0zuR4xqPSuasI3kqFDhqSyTjREz5gzq0fXg== @@ -5928,10 +5919,10 @@ human-signals@^1.1.1: resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-1.1.1.tgz#c5b1cd14f50aeae09ab6c59fe63ba3395fe4dfa3" integrity sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw== -iconv-corefoundation@^1.1.5: - version "1.1.5" - resolved "https://registry.yarnpkg.com/iconv-corefoundation/-/iconv-corefoundation-1.1.5.tgz#90596d444a579aeb109f5ca113f6bb665a41be2b" - integrity sha512-hI4m7udfV04OcjleOmDaR4gwXnH4xumxN+ZmywHDiKf2CmAzsT9SVYe7Y4pdnQbyZfXwAQyrElykbE5PrPRfmQ== +iconv-corefoundation@^1.1.6: + version "1.1.6" + resolved "https://registry.yarnpkg.com/iconv-corefoundation/-/iconv-corefoundation-1.1.6.tgz#27c135470237f6f8d13462fa1f5eaf250523c29a" + integrity sha512-1NBe55C75bKGZaY9UHxvXG3G0gEp0ziht7quhuFrW3SPgZDw9HI6qvYXRSV5M/Eupyu8ljuJ6Cba+ec15PZ4Xw== dependencies: cli-truncate "^1.1.0" node-addon-api "^1.6.3" @@ -6433,6 +6424,11 @@ isbinaryfile@^3.0.2: resolved "https://registry.yarnpkg.com/isbinaryfile/-/isbinaryfile-3.0.2.tgz#4a3e974ec0cba9004d3fc6cde7209ea69368a621" integrity sha1-Sj6XTsDLqQBNP8bN5yCeppNopiE= +isbinaryfile@^4.0.8: + version "4.0.8" + resolved "https://registry.yarnpkg.com/isbinaryfile/-/isbinaryfile-4.0.8.tgz#5d34b94865bd4946633ecc78a026fc76c5b11fcf" + integrity sha512-53h6XFniq77YdW+spoRrebh0mnmTxRPTlcuIArO57lmMdq4uBKFKaeTjnb92oYWrSn/LVL+LT+Hap2tFQj8V+w== + isexe@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" @@ -6514,15 +6510,6 @@ istanbul-reports@^3.0.2: html-escaper "^2.0.0" istanbul-lib-report "^3.0.0" -istextorbinary@^5.12.0: - version "5.12.0" - resolved "https://registry.yarnpkg.com/istextorbinary/-/istextorbinary-5.12.0.tgz#2f84777838668fdf524c305a2363d6057aaeec84" - integrity sha512-wLDRWD7qpNTYubk04+q3en1+XZGS4vYWK0+SxNSXJLaITMMEK+J3o/TlOMyULeH1qozVZ9uUkKcyMA8odyxz8w== - dependencies: - binaryextensions "^4.15.0" - editions "^6.1.0" - textextensions "^5.11.0" - jake@^10.6.1: version "10.8.2" resolved "https://registry.yarnpkg.com/jake/-/jake-10.8.2.tgz#ebc9de8558160a66d82d0eadc6a2e58fbc500a7b" @@ -7044,10 +7031,10 @@ js-yaml@^3.7.0: argparse "^1.0.7" esprima "^4.0.0" -js-yaml@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-4.0.0.tgz#f426bc0ff4b4051926cd588c71113183409a121f" - integrity sha512-pqon0s+4ScYUvX30wxQi3PogGFAlUyH0awepWvwkj4jD4v+ova3RiYw8bmA6x2rDrEaj8i/oWKoRxpVNW+Re8Q== +js-yaml@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-4.1.0.tgz#c1fb65f8f5017901cdd2c951864ba18458a10602" + integrity sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA== dependencies: argparse "^2.0.1" @@ -7314,10 +7301,10 @@ lazy-cache@^2.0.2: dependencies: set-getter "^0.1.0" -lazy-val@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/lazy-val/-/lazy-val-1.0.4.tgz#882636a7245c2cfe6e0a4e3ba6c5d68a137e5c65" - integrity sha512-u93kb2fPbIrfzBuLjZE+w+fJbUUMhNDXxNmMfaqNgpfQf1CO5ZSe2LfsnBqVAk7i/2NF48OSoRj+Xe2VT+lE8Q== +lazy-val@^1.0.4, lazy-val@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/lazy-val/-/lazy-val-1.0.5.tgz#6cf3b9f5bc31cee7ee3e369c0832b7583dcd923d" + integrity sha512-0/BnGCCfyUMkBpeDgWihanIAF9JmZhHBgUhEqzvf+adhNGLoP6TaiI5oF8oyb3I45P+PcnrqihSf01M0l0G5+Q== lazystream@^1.0.0: version "1.0.0" @@ -7842,7 +7829,7 @@ mime@^2.4.4: resolved "https://registry.yarnpkg.com/mime/-/mime-2.4.4.tgz#bd7b91135fc6b01cde3e9bae33d659b63d8857e5" integrity sha512-LRxmNwziLPT828z+4YkNzloCFC2YM4wrB99k+AV5ZbEyfGNWfG8SO1FUXLmLDBSo89NrJZ4DIWeLjy1CHGhMGA== -mime@^2.5.0: +mime@^2.5.2: version "2.5.2" resolved "https://registry.yarnpkg.com/mime/-/mime-2.5.2.tgz#6e3dc6cc2b9510643830e5f19d5cb753da5eeabe" integrity sha512-tqkh47FzKeCPD2PUiPB6pkbMzsCasjxAfC62/Wap5qrUWcb+sFasXUC5I3gYM5iBM8v/Qpn4UK0x+j0iHyFPDg== @@ -9179,14 +9166,14 @@ react-is@^17.0.1: resolved "https://registry.yarnpkg.com/react-is/-/react-is-17.0.1.tgz#5b3531bd76a645a4c9fb6e693ed36419e3301339" integrity sha512-NAnt2iGDXohE5LI7uBnLnqvLQMtzhkiAOLXTmv+qnF9Ky7xAPcX8Up/xWIhxvLVGJvuLiNc4xQLtuqDRzb4fSA== -read-config-file@6.1.0: - version "6.1.0" - resolved "https://registry.yarnpkg.com/read-config-file/-/read-config-file-6.1.0.tgz#204256f18eedf4dc82dd5f7886dfd7b931d03b08" - integrity sha512-Z3ua8JTbQgrDNDWD0zMtwE2Np+RGeL+Jew5T7bSRfJGcq+t883wExEXNWLQqMaStfRp9Xz6RPsx01/jruhn+tg== +read-config-file@6.2.0: + version "6.2.0" + resolved "https://registry.yarnpkg.com/read-config-file/-/read-config-file-6.2.0.tgz#71536072330bcd62ba814f91458b12add9fc7ade" + integrity sha512-gx7Pgr5I56JtYz+WuqEbQHj/xWo+5Vwua2jhb1VwM4Wid5PqYmZ4i00ZB0YEGIfkVBsCv9UrjgyqCiQfS/Oosg== dependencies: - dotenv "^8.2.0" + dotenv "^9.0.2" dotenv-expand "^5.1.0" - js-yaml "^4.0.0" + js-yaml "^4.1.0" json5 "^2.2.0" lazy-val "^1.0.4" @@ -9875,6 +9862,13 @@ semver@^7.1.1: resolved "https://registry.yarnpkg.com/semver/-/semver-7.1.3.tgz#e4345ce73071c53f336445cfc19efb1c311df2a6" integrity sha512-ekM0zfiA9SCBlsKa2X1hxyxiI4L3B6EbVJkkdgQXnSEEaHlGdvyodMruTiulSRWMMB4NeIuYNMC9rTKTz97GxA== +semver@^7.3.5: + version "7.3.5" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.5.tgz#0b621c879348d8998e4b0e4be94b3f12e6018ef7" + integrity sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ== + dependencies: + lru-cache "^6.0.0" + send@0.17.1: version "0.17.1" resolved "https://registry.yarnpkg.com/send/-/send-0.17.1.tgz#c1d8b059f7900f7466dd4938bdc44e11ddb376c8" @@ -10673,13 +10667,13 @@ teeny-request@6.0.1: stream-events "^1.0.5" uuid "^3.3.2" -temp-file@^3.3.7: - version "3.3.7" - resolved "https://registry.yarnpkg.com/temp-file/-/temp-file-3.3.7.tgz#686885d635f872748e384e871855958470aeb18a" - integrity sha512-9tBJKt7GZAQt/Rg0QzVWA8Am8c1EFl+CAv04/aBVqlx5oyfQ508sFIABshQ0xbZu6mBrFLWIUXO/bbLYghW70g== +temp-file@^3.4.0: + version "3.4.0" + resolved "https://registry.yarnpkg.com/temp-file/-/temp-file-3.4.0.tgz#766ea28911c683996c248ef1a20eea04d51652c7" + integrity sha512-C5tjlC/HCtVUOi3KWVokd4vHVViOmGjtLwIh4MuzPo/nMYTV/p1urt3RnMz2IWXDdKEGJH3k5+KPxtqRsUYGtg== dependencies: async-exit-hook "^2.0.1" - fs-extra "^8.1.0" + fs-extra "^10.0.0" temp@^0.9.0: version "0.9.1" @@ -10745,11 +10739,6 @@ text-table@^0.2.0: resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" integrity sha1-f17oI66AUgfACvLfSoTsP8+lcLQ= -textextensions@^5.11.0: - version "5.12.0" - resolved "https://registry.yarnpkg.com/textextensions/-/textextensions-5.12.0.tgz#b908120b5c1bd4bb9eba41423d75b176011ab68a" - integrity sha512-IYogUDaP65IXboCiPPC0jTLLBzYlhhw2Y4b0a2trPgbHNGGGEfuHE6tds+yDcCf4mpNDaGISFzwSSezcXt+d6w== - throat@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/throat/-/throat-5.0.0.tgz#c5199235803aad18754a667d659b5e72ce16764b" @@ -11458,18 +11447,6 @@ verror@1.10.0, verror@^1.10.0: core-util-is "1.0.2" extsprintf "^1.2.0" -version-compare@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/version-compare/-/version-compare-1.1.0.tgz#7b3e67e7e6cec5c72d9c9e586f8854e419ade17c" - integrity sha512-zVKtPOJTC9x23lzS4+4D7J+drq80BXVYAmObnr5zqxxFVH7OffJ1lJlAS7LYsQNV56jx/wtbw0UV7XHLrvd6kQ== - -version-range@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/version-range/-/version-range-1.1.0.tgz#1c233064202ee742afc9d56e21da3b2e15260acf" - integrity sha512-R1Ggfg2EXamrnrV3TkZ6yBNgITDbclB3viwSjbZ3+eK0VVNK4ajkYJTnDz5N0bIMYDtK9MUBvXJUnKO5RWWJ6w== - dependencies: - version-compare "^1.0.0" - vm-browserify@^1.0.1: version "1.1.2" resolved "https://registry.yarnpkg.com/vm-browserify/-/vm-browserify-1.1.2.tgz#78641c488b8e6ca91a75f511e7a3b32a86e5dda0" @@ -12031,7 +12008,7 @@ yargs@^15.0.1, yargs@^15.4.1: y18n "^4.0.0" yargs-parser "^18.1.2" -yargs@^16.0.2, yargs@^16.2.0: +yargs@^16.0.2: version "16.2.0" resolved "https://registry.yarnpkg.com/yargs/-/yargs-16.2.0.tgz#1c82bf0f6b6a66eafce7ef30e376f49a12477f66" integrity sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw== @@ -12044,6 +12021,19 @@ yargs@^16.0.2, yargs@^16.2.0: y18n "^5.0.5" yargs-parser "^20.2.2" +yargs@^17.0.1: + version "17.0.1" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-17.0.1.tgz#6a1ced4ed5ee0b388010ba9fd67af83b9362e0bb" + integrity sha512-xBBulfCc8Y6gLFcrPvtqKz9hz8SO0l1Ni8GgDekvBX2ro0HRQImDGnikfc33cgzcYUSncapnNcZDjVFIH3f6KQ== + dependencies: + cliui "^7.0.2" + escalade "^3.1.1" + get-caller-file "^2.0.5" + require-directory "^2.1.1" + string-width "^4.2.0" + y18n "^5.0.5" + yargs-parser "^20.2.2" + yauzl@^2.10.0: version "2.10.0" resolved "https://registry.yarnpkg.com/yauzl/-/yauzl-2.10.0.tgz#c7eb17c93e112cb1086fa6d8e51fb0667b79a5f9" From 799529d0b735de96d36562af2f112c8915cad934 Mon Sep 17 00:00:00 2001 From: Brendan Forster Date: Tue, 25 May 2021 17:05:55 -0300 Subject: [PATCH 36/48] [experiment] slipstream forked dugite with patch into Linux release (#506) * bump package * rename all dugite usages to @shiftkey/dugite * update build script to use new package --- app/package.json | 2 +- app/src/lib/git/apply.ts | 2 +- app/src/lib/git/authentication.ts | 2 +- app/src/lib/git/branch.ts | 2 +- app/src/lib/git/cherry-pick.ts | 2 +- app/src/lib/git/core.ts | 2 +- app/src/lib/git/for-each-ref.ts | 2 +- app/src/lib/git/merge.ts | 2 +- app/src/lib/git/push.ts | 2 +- app/src/lib/git/rebase.ts | 2 +- app/src/lib/git/remote.ts | 2 +- app/src/lib/git/rev-list.ts | 2 +- app/src/lib/git/rev-parse.ts | 2 +- app/src/lib/git/spawn.ts | 2 +- app/src/lib/git/stash.ts | 2 +- app/src/lib/stores/app-store.ts | 2 +- app/src/lib/stores/git-store.ts | 2 +- app/src/ui/dispatcher/error-handlers.ts | 2 +- app/test/helpers/local-config.ts | 2 +- app/test/helpers/repositories.ts | 2 +- .../repository-builder-branch-pruner.ts | 2 +- app/test/helpers/repository-scaffolding.ts | 2 +- app/test/unit/app-store-test.ts | 2 +- app/test/unit/branch-pruner-test.ts | 2 +- app/test/unit/git-store-test.ts | 2 +- app/test/unit/git/apply-test.ts | 2 +- app/test/unit/git/branch-test.ts | 2 +- app/test/unit/git/checkout-test.ts | 2 +- app/test/unit/git/cherry-pick-test.ts | 2 +- app/test/unit/git/commit-test.ts | 2 +- app/test/unit/git/config-test.ts | 2 +- app/test/unit/git/core-test.ts | 2 +- app/test/unit/git/diff-test.ts | 2 +- app/test/unit/git/format-patch-test.ts | 2 +- app/test/unit/git/gitignore-test.ts | 2 +- app/test/unit/git/lfs-test.ts | 2 +- app/test/unit/git/merge-test.ts | 2 +- .../unit/git/rebase/detect-conflict-test.ts | 2 +- app/test/unit/git/reflog-test.ts | 2 +- app/test/unit/git/remote-test.ts | 2 +- app/test/unit/git/reorder-test.ts | 2 +- app/test/unit/git/reset-test.ts | 2 +- app/test/unit/git/rev-parse-test.ts | 2 +- app/test/unit/git/squash-test.ts | 2 +- app/test/unit/git/stash-test.ts | 2 +- app/test/unit/git/status-test.ts | 2 +- app/test/unit/git/worktree-test.ts | 2 +- .../parse-files-to-be-overwritten-test.ts | 2 +- app/test/unit/text-diff-expansion-test.ts | 2 +- app/yarn.lock | 24 +++++++++---------- script/build.ts | 5 +++- 51 files changed, 65 insertions(+), 62 deletions(-) diff --git a/app/package.json b/app/package.json index 1a2eff7abad..cf35d2a3197 100644 --- a/app/package.json +++ b/app/package.json @@ -29,7 +29,7 @@ "detect-arm64-translation": "https://github.com/desktop/node-detect-arm64-translation#v1.0.4", "dexie": "^2.0.0", "double-ended-queue": "^2.1.0-0", - "dugite": "^1.103.0", + "@shiftkey/dugite": "^1.103.99", "electron-window-state": "^5.0.3", "event-kit": "^2.0.0", "file-metadata": "^1.0.0", diff --git a/app/src/lib/git/apply.ts b/app/src/lib/git/apply.ts index 85467312822..eec87e4c72c 100644 --- a/app/src/lib/git/apply.ts +++ b/app/src/lib/git/apply.ts @@ -1,4 +1,4 @@ -import { GitError as DugiteError } from 'dugite' +import { GitError as DugiteError } from '@shiftkey/dugite' import { git } from './core' import { WorkingDirectoryFileChange, diff --git a/app/src/lib/git/authentication.ts b/app/src/lib/git/authentication.ts index 6a925a72491..9c484bebda9 100644 --- a/app/src/lib/git/authentication.ts +++ b/app/src/lib/git/authentication.ts @@ -1,6 +1,6 @@ import * as Path from 'path' -import { GitError as DugiteError } from 'dugite' +import { GitError as DugiteError } from '@shiftkey/dugite' import { IGitAccount } from '../../models/git-account' import { enableDesktopTrampoline } from '../feature-flag' import { getDesktopTrampolineFilename } from 'desktop-trampoline' diff --git a/app/src/lib/git/branch.ts b/app/src/lib/git/branch.ts index 7f4df2d6cea..982e608496f 100644 --- a/app/src/lib/git/branch.ts +++ b/app/src/lib/git/branch.ts @@ -4,7 +4,7 @@ import { Branch } from '../../models/branch' import { IGitAccount } from '../../models/git-account' import { formatAsLocalRef } from './refs' import { deleteRef } from './update-ref' -import { GitError as DugiteError } from 'dugite' +import { GitError as DugiteError } from '@shiftkey/dugite' import { getRemoteURL } from './remote' import { getFallbackUrlForProxyResolve } from './environment' import { withTrampolineEnvForRemoteOperation } from '../trampoline/trampoline-environment' diff --git a/app/src/lib/git/cherry-pick.ts b/app/src/lib/git/cherry-pick.ts index ec8d235223a..e203b892f0c 100644 --- a/app/src/lib/git/cherry-pick.ts +++ b/app/src/lib/git/cherry-pick.ts @@ -1,6 +1,6 @@ import * as Path from 'path' import * as FSE from 'fs-extra' -import { GitError } from 'dugite' +import { GitError } from '@shiftkey/dugite' import { Repository } from '../../models/repository' import { AppFileStatusKind, diff --git a/app/src/lib/git/core.ts b/app/src/lib/git/core.ts index dbe06f9b752..0b416ba4198 100644 --- a/app/src/lib/git/core.ts +++ b/app/src/lib/git/core.ts @@ -3,7 +3,7 @@ import { IGitResult as DugiteResult, GitError as DugiteError, IGitExecutionOptions as DugiteExecutionOptions, -} from 'dugite' +} from '@shiftkey/dugite' import { assertNever } from '../fatal-error' import { getDotComAPIEndpoint } from '../api' diff --git a/app/src/lib/git/for-each-ref.ts b/app/src/lib/git/for-each-ref.ts index 5f477a07581..bcfe8d4b0a0 100644 --- a/app/src/lib/git/for-each-ref.ts +++ b/app/src/lib/git/for-each-ref.ts @@ -1,5 +1,5 @@ import { git } from './core' -import { GitError } from 'dugite' +import { GitError } from '@shiftkey/dugite' import { Repository } from '../../models/repository' import { Branch, diff --git a/app/src/lib/git/merge.ts b/app/src/lib/git/merge.ts index 5efae36c6fe..9e5554b97ca 100644 --- a/app/src/lib/git/merge.ts +++ b/app/src/lib/git/merge.ts @@ -2,7 +2,7 @@ import * as FSE from 'fs-extra' import * as Path from 'path' import { git } from './core' -import { GitError } from 'dugite' +import { GitError } from '@shiftkey/dugite' import { Repository } from '../../models/repository' import { Branch } from '../../models/branch' import { MergeTreeResult } from '../../models/merge' diff --git a/app/src/lib/git/push.ts b/app/src/lib/git/push.ts index 3e845134ccf..22e4abfbd5c 100644 --- a/app/src/lib/git/push.ts +++ b/app/src/lib/git/push.ts @@ -1,4 +1,4 @@ -import { GitError as DugiteError } from 'dugite' +import { GitError as DugiteError } from '@shiftkey/dugite' import { git, diff --git a/app/src/lib/git/rebase.ts b/app/src/lib/git/rebase.ts index c3e2e5962ab..1d7913b2b15 100644 --- a/app/src/lib/git/rebase.ts +++ b/app/src/lib/git/rebase.ts @@ -1,7 +1,7 @@ import * as Path from 'path' import { ChildProcess } from 'child_process' import * as FSE from 'fs-extra' -import { GitError } from 'dugite' +import { GitError } from '@shiftkey/dugite' import byline from 'byline' import { Repository } from '../../models/repository' diff --git a/app/src/lib/git/remote.ts b/app/src/lib/git/remote.ts index df807c16005..15b8d8fcada 100644 --- a/app/src/lib/git/remote.ts +++ b/app/src/lib/git/remote.ts @@ -1,5 +1,5 @@ import { git } from './core' -import { GitError } from 'dugite' +import { GitError } from '@shiftkey/dugite' import { Repository } from '../../models/repository' import { IRemote } from '../../models/remote' diff --git a/app/src/lib/git/rev-list.ts b/app/src/lib/git/rev-list.ts index 6e87fe31c2a..b4b3f11a203 100644 --- a/app/src/lib/git/rev-list.ts +++ b/app/src/lib/git/rev-list.ts @@ -1,4 +1,4 @@ -import { GitError } from 'dugite' +import { GitError } from '@shiftkey/dugite' import { git } from './core' import { Repository } from '../../models/repository' import { Branch, BranchType, IAheadBehind } from '../../models/branch' diff --git a/app/src/lib/git/rev-parse.ts b/app/src/lib/git/rev-parse.ts index 0e1bb4eeff9..609afe2bfa8 100644 --- a/app/src/lib/git/rev-parse.ts +++ b/app/src/lib/git/rev-parse.ts @@ -1,7 +1,7 @@ import * as Path from 'path' import { git } from './core' -import { RepositoryDoesNotExistErrorCode } from 'dugite' +import { RepositoryDoesNotExistErrorCode } from '@shiftkey/dugite' /** * Get the absolute path to the top level working directory. diff --git a/app/src/lib/git/spawn.ts b/app/src/lib/git/spawn.ts index f773cb6e124..113a7295f66 100644 --- a/app/src/lib/git/spawn.ts +++ b/app/src/lib/git/spawn.ts @@ -1,4 +1,4 @@ -import { GitProcess } from 'dugite' +import { GitProcess } from '@shiftkey/dugite' import * as GitPerf from '../../ui/lib/git-perf' import { isErrnoException } from '../errno-exception' diff --git a/app/src/lib/git/stash.ts b/app/src/lib/git/stash.ts index d7bc81131c6..869ca242bd7 100644 --- a/app/src/lib/git/stash.ts +++ b/app/src/lib/git/stash.ts @@ -1,4 +1,4 @@ -import { GitError as DugiteError } from 'dugite' +import { GitError as DugiteError } from '@shiftkey/dugite' import { git, GitError } from './core' import { Repository } from '../../models/repository' import { diff --git a/app/src/lib/stores/app-store.ts b/app/src/lib/stores/app-store.ts index fdf47ed58b5..68dedca3afe 100644 --- a/app/src/lib/stores/app-store.ts +++ b/app/src/lib/stores/app-store.ts @@ -262,7 +262,7 @@ import { WorkflowPreferences } from '../../models/workflow-preferences' import { RepositoryIndicatorUpdater } from './helpers/repository-indicator-updater' import { getAttributableEmailsFor } from '../email' import { TrashNameLabel } from '../../ui/lib/context-menu' -import { GitError as DugiteError } from 'dugite' +import { GitError as DugiteError } from '@shiftkey/dugite' import { ErrorWithMetadata, CheckoutError } from '../error-with-metadata' import { ShowSideBySideDiffDefault, diff --git a/app/src/lib/stores/git-store.ts b/app/src/lib/stores/git-store.ts index d9c5ae7dfc6..8e4ddee3b6d 100644 --- a/app/src/lib/stores/git-store.ts +++ b/app/src/lib/stores/git-store.ts @@ -69,7 +69,7 @@ import { createBranch, } from '../git' import { GitError as DugiteError } from '../../lib/git' -import { GitError } from 'dugite' +import { GitError } from '@shiftkey/dugite' import { RetryAction, RetryActionType } from '../../models/retry-actions' import { UpstreamAlreadyExistsError } from './upstream-already-exists-error' import { forceUnwrap } from '../fatal-error' diff --git a/app/src/ui/dispatcher/error-handlers.ts b/app/src/ui/dispatcher/error-handlers.ts index 3cbcb8b3a1c..ed7f737939b 100644 --- a/app/src/ui/dispatcher/error-handlers.ts +++ b/app/src/ui/dispatcher/error-handlers.ts @@ -1,7 +1,7 @@ import { GitError as DugiteError, RepositoryDoesNotExistErrorCode, -} from 'dugite' +} from '@shiftkey/dugite' import { Dispatcher } from '.' import { ExternalEditorError } from '../../lib/editors/shared' diff --git a/app/test/helpers/local-config.ts b/app/test/helpers/local-config.ts index 945f12fa578..42ab21afb6b 100644 --- a/app/test/helpers/local-config.ts +++ b/app/test/helpers/local-config.ts @@ -1,5 +1,5 @@ import { Repository } from '../../src/models/repository' -import { GitProcess } from 'dugite' +import { GitProcess } from '@shiftkey/dugite' export async function setupLocalConfig( repository: Repository, diff --git a/app/test/helpers/repositories.ts b/app/test/helpers/repositories.ts index 36c69e9e395..4a773d61e92 100644 --- a/app/test/helpers/repositories.ts +++ b/app/test/helpers/repositories.ts @@ -3,7 +3,7 @@ import * as FSE from 'fs-extra' import { mkdirSync } from './temp' import klawSync, { Item } from 'klaw-sync' import { Repository } from '../../src/models/repository' -import { GitProcess } from 'dugite' +import { GitProcess } from '@shiftkey/dugite' import { makeCommit, switchTo } from './repository-scaffolding' import { writeFile } from 'fs-extra' import { git } from '../../src/lib/git' diff --git a/app/test/helpers/repository-builder-branch-pruner.ts b/app/test/helpers/repository-builder-branch-pruner.ts index 7f3aed9f8cd..7c7e9d25555 100644 --- a/app/test/helpers/repository-builder-branch-pruner.ts +++ b/app/test/helpers/repository-builder-branch-pruner.ts @@ -1,6 +1,6 @@ import { setupEmptyRepository } from './repositories' import { makeCommit, switchTo } from './repository-scaffolding' -import { GitProcess } from 'dugite' +import { GitProcess } from '@shiftkey/dugite' import { RepositoriesStore, GitStore } from '../../src/lib/stores' import { RepositoryStateCache } from '../../src/lib/stores/repository-state-cache' import { diff --git a/app/test/helpers/repository-scaffolding.ts b/app/test/helpers/repository-scaffolding.ts index ad53ea8c82a..a5e9feabb99 100644 --- a/app/test/helpers/repository-scaffolding.ts +++ b/app/test/helpers/repository-scaffolding.ts @@ -1,4 +1,4 @@ -import { GitProcess } from 'dugite' +import { GitProcess } from '@shiftkey/dugite' import * as FSE from 'fs-extra' import * as Path from 'path' diff --git a/app/test/unit/app-store-test.ts b/app/test/unit/app-store-test.ts index a9cf9c3b09d..5cbbde0618e 100644 --- a/app/test/unit/app-store-test.ts +++ b/app/test/unit/app-store-test.ts @@ -1,6 +1,6 @@ import * as Path from 'path' import * as FSE from 'fs-extra' -import { GitProcess } from 'dugite' +import { GitProcess } from '@shiftkey/dugite' import { AppStore, diff --git a/app/test/unit/branch-pruner-test.ts b/app/test/unit/branch-pruner-test.ts index 9beca4862d0..fac67ec0ad6 100644 --- a/app/test/unit/branch-pruner-test.ts +++ b/app/test/unit/branch-pruner-test.ts @@ -7,7 +7,7 @@ import { RepositoryStateCache } from '../../src/lib/stores/repository-state-cach import { setupFixtureRepository } from '../helpers/repositories' import { shell } from '../helpers/test-app-shell' import { TestRepositoriesDatabase } from '../helpers/databases' -import { GitProcess } from 'dugite' +import { GitProcess } from '@shiftkey/dugite' import { createRepository as createPrunedRepository, setupRepository, diff --git a/app/test/unit/git-store-test.ts b/app/test/unit/git-store-test.ts index 391b5a56f0e..a9200f1a109 100644 --- a/app/test/unit/git-store-test.ts +++ b/app/test/unit/git-store-test.ts @@ -1,6 +1,6 @@ import * as FSE from 'fs-extra' import * as Path from 'path' -import { GitProcess } from 'dugite' +import { GitProcess } from '@shiftkey/dugite' import { shell } from '../helpers/test-app-shell' import { diff --git a/app/test/unit/git/apply-test.ts b/app/test/unit/git/apply-test.ts index 34450ded8f1..1eaf05593b6 100644 --- a/app/test/unit/git/apply-test.ts +++ b/app/test/unit/git/apply-test.ts @@ -1,4 +1,4 @@ -import { GitProcess } from 'dugite' +import { GitProcess } from '@shiftkey/dugite' import { setupTwoCommitRepo, setupFixtureRepository, diff --git a/app/test/unit/git/branch-test.ts b/app/test/unit/git/branch-test.ts index 542c828aa3f..91d5c57c9cf 100644 --- a/app/test/unit/git/branch-test.ts +++ b/app/test/unit/git/branch-test.ts @@ -13,7 +13,7 @@ import { IUnbornRepository, } from '../../../src/models/tip' import { GitStore } from '../../../src/lib/stores' -import { GitProcess } from 'dugite' +import { GitProcess } from '@shiftkey/dugite' import { getBranchesPointedAt, createBranch, diff --git a/app/test/unit/git/checkout-test.ts b/app/test/unit/git/checkout-test.ts index de1c5ab0967..b49c94f9351 100644 --- a/app/test/unit/git/checkout-test.ts +++ b/app/test/unit/git/checkout-test.ts @@ -10,7 +10,7 @@ import { TipState, IValidBranch } from '../../../src/models/tip' import { GitStore } from '../../../src/lib/stores' import { Branch, BranchType } from '../../../src/models/branch' import { getStatusOrThrow } from '../../helpers/status' -import { GitProcess } from 'dugite' +import { GitProcess } from '@shiftkey/dugite' import { StatsStore, StatsDatabase } from '../../../src/lib/stats' import { UiActivityMonitor } from '../../../src/ui/lib/ui-activity-monitor' diff --git a/app/test/unit/git/cherry-pick-test.ts b/app/test/unit/git/cherry-pick-test.ts index 5b60aea8cca..dd56ce6fd0f 100644 --- a/app/test/unit/git/cherry-pick-test.ts +++ b/app/test/unit/git/cherry-pick-test.ts @@ -1,4 +1,4 @@ -import { GitProcess } from 'dugite' +import { GitProcess } from '@shiftkey/dugite' import * as FSE from 'fs-extra' import * as Path from 'path' import { diff --git a/app/test/unit/git/commit-test.ts b/app/test/unit/git/commit-test.ts index a68097db33f..fb42ba710ee 100644 --- a/app/test/unit/git/commit-test.ts +++ b/app/test/unit/git/commit-test.ts @@ -18,7 +18,7 @@ import { setupConflictedRepoWithMultipleFiles, } from '../../helpers/repositories' -import { GitProcess } from 'dugite' +import { GitProcess } from '@shiftkey/dugite' import { WorkingDirectoryFileChange, AppFileStatusKind, diff --git a/app/test/unit/git/config-test.ts b/app/test/unit/git/config-test.ts index 376d8d0297a..f52ab103513 100644 --- a/app/test/unit/git/config-test.ts +++ b/app/test/unit/git/config-test.ts @@ -1,4 +1,4 @@ -import { GitProcess } from 'dugite' +import { GitProcess } from '@shiftkey/dugite' import * as Path from 'path' import { Repository } from '../../../src/models/repository' diff --git a/app/test/unit/git/core-test.ts b/app/test/unit/git/core-test.ts index b61c94a0c75..60827b82201 100644 --- a/app/test/unit/git/core-test.ts +++ b/app/test/unit/git/core-test.ts @@ -1,4 +1,4 @@ -import { GitError } from 'dugite' +import { GitError } from '@shiftkey/dugite' import { Repository } from '../../../src/models/repository' import { git, diff --git a/app/test/unit/git/diff-test.ts b/app/test/unit/git/diff-test.ts index e168655734e..9664b76a6c5 100644 --- a/app/test/unit/git/diff-test.ts +++ b/app/test/unit/git/diff-test.ts @@ -26,7 +26,7 @@ import { } from '../../../src/lib/git' import { getStatusOrThrow } from '../../helpers/status' -import { GitProcess } from 'dugite' +import { GitProcess } from '@shiftkey/dugite' async function getTextDiff( repo: Repository, diff --git a/app/test/unit/git/format-patch-test.ts b/app/test/unit/git/format-patch-test.ts index d5092f4181e..724cb5c1695 100644 --- a/app/test/unit/git/format-patch-test.ts +++ b/app/test/unit/git/format-patch-test.ts @@ -8,7 +8,7 @@ import { cloneLocalRepository, makeCommit, } from '../../helpers/repository-scaffolding' -import { GitProcess } from 'dugite' +import { GitProcess } from '@shiftkey/dugite' describe('formatPatch', () => { describe('in a repo with commits', () => { diff --git a/app/test/unit/git/gitignore-test.ts b/app/test/unit/git/gitignore-test.ts index 4f495260ee9..734abececb5 100644 --- a/app/test/unit/git/gitignore-test.ts +++ b/app/test/unit/git/gitignore-test.ts @@ -1,6 +1,6 @@ import * as FSE from 'fs-extra' import * as Path from 'path' -import { GitProcess } from 'dugite' +import { GitProcess } from '@shiftkey/dugite' import { setupEmptyRepository } from '../../helpers/repositories' import { getStatusOrThrow } from '../../helpers/status' diff --git a/app/test/unit/git/lfs-test.ts b/app/test/unit/git/lfs-test.ts index 0ae47412a9b..adb69cb4889 100644 --- a/app/test/unit/git/lfs-test.ts +++ b/app/test/unit/git/lfs-test.ts @@ -6,7 +6,7 @@ import { setupEmptyRepository, } from '../../helpers/repositories' import { Repository } from '../../../src/models/repository' -import { GitProcess } from 'dugite' +import { GitProcess } from '@shiftkey/dugite' import { isUsingLFS, isTrackedByLFS, diff --git a/app/test/unit/git/merge-test.ts b/app/test/unit/git/merge-test.ts index 2b45457fbf0..f03a322f58c 100644 --- a/app/test/unit/git/merge-test.ts +++ b/app/test/unit/git/merge-test.ts @@ -10,7 +10,7 @@ import { setupFixtureRepository, setupConflictedRepo, } from '../../helpers/repositories' -import { GitProcess } from 'dugite' +import { GitProcess } from '@shiftkey/dugite' import { Repository } from '../../../src/models/repository' describe('git/merge', () => { diff --git a/app/test/unit/git/rebase/detect-conflict-test.ts b/app/test/unit/git/rebase/detect-conflict-test.ts index 49434495c5c..9f33500f80c 100644 --- a/app/test/unit/git/rebase/detect-conflict-test.ts +++ b/app/test/unit/git/rebase/detect-conflict-test.ts @@ -1,4 +1,4 @@ -import { GitProcess } from 'dugite' +import { GitProcess } from '@shiftkey/dugite' import * as FSE from 'fs-extra' import * as Path from 'path' diff --git a/app/test/unit/git/reflog-test.ts b/app/test/unit/git/reflog-test.ts index c60c64b489a..4b11b326481 100644 --- a/app/test/unit/git/reflog-test.ts +++ b/app/test/unit/git/reflog-test.ts @@ -9,7 +9,7 @@ import { } from '../../../src/lib/git' import { setupFixtureRepository } from '../../helpers/repositories' import moment from 'moment' -import { GitProcess } from 'dugite' +import { GitProcess } from '@shiftkey/dugite' async function createAndCheckout( repository: Repository, diff --git a/app/test/unit/git/remote-test.ts b/app/test/unit/git/remote-test.ts index 4ccfe6572d4..dff8c8665b6 100644 --- a/app/test/unit/git/remote-test.ts +++ b/app/test/unit/git/remote-test.ts @@ -11,7 +11,7 @@ import { setupEmptyDirectory, } from '../../helpers/repositories' import { findDefaultRemote } from '../../../src/lib/stores/helpers/find-default-remote' -import { GitProcess } from 'dugite' +import { GitProcess } from '@shiftkey/dugite' describe('git/remote', () => { describe('getRemotes', () => { diff --git a/app/test/unit/git/reorder-test.ts b/app/test/unit/git/reorder-test.ts index f8a06c87c42..f3c8570929e 100644 --- a/app/test/unit/git/reorder-test.ts +++ b/app/test/unit/git/reorder-test.ts @@ -11,7 +11,7 @@ import { Commit } from '../../../src/models/commit' import { Repository } from '../../../src/models/repository' import { setupEmptyRepositoryDefaultMain } from '../../helpers/repositories' import { makeCommit } from '../../helpers/repository-scaffolding' -import { GitProcess } from 'dugite' +import { GitProcess } from '@shiftkey/dugite' import { getStatusOrThrow } from '../../helpers/status' import { getTempFilePath } from '../../../src/lib/file-system' import { reorder } from '../../../src/lib/git/reorder' diff --git a/app/test/unit/git/reset-test.ts b/app/test/unit/git/reset-test.ts index 32ef18d37cb..b63b5650c60 100644 --- a/app/test/unit/git/reset-test.ts +++ b/app/test/unit/git/reset-test.ts @@ -4,7 +4,7 @@ import { Repository } from '../../../src/models/repository' import { reset, resetPaths, GitResetMode } from '../../../src/lib/git/reset' import { getStatusOrThrow } from '../../helpers/status' import { setupFixtureRepository } from '../../helpers/repositories' -import { GitProcess } from 'dugite' +import { GitProcess } from '@shiftkey/dugite' import * as FSE from 'fs-extra' diff --git a/app/test/unit/git/rev-parse-test.ts b/app/test/unit/git/rev-parse-test.ts index 1dec7a68387..aaa35564b86 100644 --- a/app/test/unit/git/rev-parse-test.ts +++ b/app/test/unit/git/rev-parse-test.ts @@ -13,7 +13,7 @@ import { setupFixtureRepository, setupEmptyRepository, } from '../../helpers/repositories' -import { GitProcess } from 'dugite' +import { GitProcess } from '@shiftkey/dugite' import { mkdirSync } from '../../helpers/temp' describe('git/rev-parse', () => { diff --git a/app/test/unit/git/squash-test.ts b/app/test/unit/git/squash-test.ts index 8f2093e3331..923ca4eb9c8 100644 --- a/app/test/unit/git/squash-test.ts +++ b/app/test/unit/git/squash-test.ts @@ -13,7 +13,7 @@ import { Repository } from '../../../src/models/repository' import { setupEmptyRepositoryDefaultMain } from '../../helpers/repositories' import { makeCommit } from '../../helpers/repository-scaffolding' import { squash } from '../../../src/lib/git/squash' -import { GitProcess } from 'dugite' +import { GitProcess } from '@shiftkey/dugite' import { getStatusOrThrow } from '../../helpers/status' import { getTempFilePath } from '../../../src/lib/file-system' diff --git a/app/test/unit/git/stash-test.ts b/app/test/unit/git/stash-test.ts index 3dfbfb8f84d..544923a251e 100644 --- a/app/test/unit/git/stash-test.ts +++ b/app/test/unit/git/stash-test.ts @@ -2,7 +2,7 @@ import * as FSE from 'fs-extra' import * as path from 'path' import { Repository } from '../../../src/models/repository' import { setupEmptyRepository } from '../../helpers/repositories' -import { GitProcess } from 'dugite' +import { GitProcess } from '@shiftkey/dugite' import { createDesktopStashMessage, createDesktopStashEntry, diff --git a/app/test/unit/git/status-test.ts b/app/test/unit/git/status-test.ts index 7e4d4332f2c..cde78b7cbae 100644 --- a/app/test/unit/git/status-test.ts +++ b/app/test/unit/git/status-test.ts @@ -1,6 +1,6 @@ import * as path from 'path' import * as FSE from 'fs-extra' -import { GitProcess } from 'dugite' +import { GitProcess } from '@shiftkey/dugite' import { Repository } from '../../../src/models/repository' diff --git a/app/test/unit/git/worktree-test.ts b/app/test/unit/git/worktree-test.ts index 01d304c1acf..560184c513b 100644 --- a/app/test/unit/git/worktree-test.ts +++ b/app/test/unit/git/worktree-test.ts @@ -1,7 +1,7 @@ import * as Os from 'os' import * as Path from 'path' import * as FSE from 'fs-extra' -import { GitProcess } from 'dugite' +import { GitProcess } from '@shiftkey/dugite' import { setupEmptyRepository } from '../../helpers/repositories' import { diff --git a/app/test/unit/parse-files-to-be-overwritten-test.ts b/app/test/unit/parse-files-to-be-overwritten-test.ts index f5ab0a1077a..64f7331d925 100644 --- a/app/test/unit/parse-files-to-be-overwritten-test.ts +++ b/app/test/unit/parse-files-to-be-overwritten-test.ts @@ -3,7 +3,7 @@ import { writeFile } from 'fs-extra' import { join } from 'path' import { git } from '../../src/lib/git' import { cloneLocalRepository } from '../helpers/repository-scaffolding' -import { GitError as DugiteError } from 'dugite' +import { GitError as DugiteError } from '@shiftkey/dugite' import { parseFilesToBeOverwritten } from '../../src/ui/lib/parse-files-to-be-overwritten' describe('parseFilesToBeOverwritten', () => { diff --git a/app/test/unit/text-diff-expansion-test.ts b/app/test/unit/text-diff-expansion-test.ts index b1e811f3493..c33240b9a1e 100644 --- a/app/test/unit/text-diff-expansion-test.ts +++ b/app/test/unit/text-diff-expansion-test.ts @@ -1,7 +1,7 @@ import * as path from 'path' import * as os from 'os' import * as FSE from 'fs-extra' -import { GitProcess } from 'dugite' +import { GitProcess } from '@shiftkey/dugite' import { DiffParser } from '../../src/lib/diff-parser' import { expandTextDiffHunk, diff --git a/app/yarn.lock b/app/yarn.lock index d223003c649..524f8a505eb 100644 --- a/app/yarn.lock +++ b/app/yarn.lock @@ -16,6 +16,18 @@ dependencies: regenerator-runtime "^0.13.4" +"@shiftkey/dugite@^1.103.99": + version "1.103.99" + resolved "https://registry.yarnpkg.com/@shiftkey/dugite/-/dugite-1.103.99.tgz#1b5ffe19eaee55ae6be8f053895a7bd5e9aad847" + integrity sha512-1XA1Tv3G3u5IcYjXSisB6AaQ2vcKdfGnxH0qPHphjpYWtDJJFgtfUh6paPgr2fqhbdljF6/xATDaWcPnZfpuvQ== + dependencies: + checksum "^0.1.1" + got "^9.6.0" + mkdirp "^0.5.1" + progress "^2.0.3" + rimraf "^2.5.4" + tar "^4.4.7" + "@sindresorhus/is@^0.14.0": version "0.14.0" resolved "https://registry.yarnpkg.com/@sindresorhus/is/-/is-0.14.0.tgz#9fb3a3cf3132328151f353de4632e01e52102bea" @@ -374,18 +386,6 @@ double-ended-queue@^2.1.0-0: resolved "https://registry.yarnpkg.com/double-ended-queue/-/double-ended-queue-2.1.0-0.tgz#103d3527fd31528f40188130c841efdd78264e5c" integrity sha1-ED01J/0xUo9AGIEwyEHv3XgmTlw= -dugite@^1.103.0: - version "1.103.0" - resolved "https://registry.yarnpkg.com/dugite/-/dugite-1.103.0.tgz#2229c83790782116f96b87763d9ea1a0f2a55842" - integrity sha512-8rKO/jQX2HKfSd5wNG/l3HnUfQPKqyC3+D+3CR5Go4+BJOyCPScQwiAVW+eeKLqHFOvjq/w67+ymMyPGxUqhIA== - dependencies: - checksum "^0.1.1" - got "^9.6.0" - mkdirp "^0.5.1" - progress "^2.0.3" - rimraf "^2.5.4" - tar "^4.4.7" - duplexer3@^0.1.4: version "0.1.4" resolved "https://registry.yarnpkg.com/duplexer3/-/duplexer3-0.1.4.tgz#ee01dd1cac0ed3cbc7fdbea37dc0a8f1ce002ce2" diff --git a/script/build.ts b/script/build.ts index 5d56a675180..55e71a949bf 100755 --- a/script/build.ts +++ b/script/build.ts @@ -344,7 +344,10 @@ function copyDependencies() { const gitDir = path.resolve(outRoot, 'git') fs.removeSync(gitDir) fs.mkdirpSync(gitDir) - fs.copySync(path.resolve(projectRoot, 'app/node_modules/dugite/git'), gitDir) + fs.copySync( + path.resolve(projectRoot, 'app/node_modules/@shiftkey/dugite/git'), + gitDir + ) if (process.platform === 'win32') { console.log(' Cleaning unneeded Git components…') From c30d6f820e5c0eb3d42e9b86d99d2439ef05844a Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 14 Jun 2021 09:51:57 -0300 Subject: [PATCH 37/48] Bump electron-builder from 22.11.5 to 22.11.7 (#526) Bumps [electron-builder](https://github.com/electron-userland/electron-builder) from 22.11.5 to 22.11.7. - [Release notes](https://github.com/electron-userland/electron-builder/releases) - [Changelog](https://github.com/electron-userland/electron-builder/blob/master/CHANGELOG.md) - [Commits](https://github.com/electron-userland/electron-builder/compare/v22.11.5...v22.11.7) --- updated-dependencies: - dependency-name: electron-builder dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package.json | 2 +- yarn.lock | 76 +++++++++++++++++++++++++++++----------------------- 2 files changed, 43 insertions(+), 35 deletions(-) diff --git a/package.json b/package.json index 020b82714f4..7769bd7fda7 100644 --- a/package.json +++ b/package.json @@ -171,7 +171,7 @@ "@types/winston": "^2.2.0", "@types/xml2js": "^0.4.0", "electron": "=11.1.1", - "electron-builder": "^22.11.5", + "electron-builder": "^22.11.7", "electron-packager": "^15.2.0", "electron-winstaller": "^5.0.0" }, diff --git a/yarn.lock b/yarn.lock index 773cff8c819..8bcc318f3bf 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1389,7 +1389,7 @@ dependencies: "@types/yargs-parser" "*" -"@types/yargs@^16.0.1": +"@types/yargs@^16.0.2": version "16.0.3" resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-16.0.3.tgz#4b6d35bb8e680510a7dc2308518a80ee1ef27e01" integrity sha512-YlFfTGS+zqCgXuXNV26rOIeETOkXnGQXP/pjjL9P0gO/EP9jTmc7pUBhx+jVEIxpq41RX33GQ7N3DzOSfZoglQ== @@ -1930,10 +1930,10 @@ app-builder-bin@3.5.13: resolved "https://registry.yarnpkg.com/app-builder-bin/-/app-builder-bin-3.5.13.tgz#6dd7f4de34a4e408806f99b8c7d6ef1601305b7e" integrity sha512-ighVe9G+bT1ENGdp9ecO1P+94vv/f+FUwaI+XkNzeg9bYF8Oi3BQ+mJuxS00UgyHs8luuOzjzC+qnAtdb43Mpg== -app-builder-lib@22.11.5: - version "22.11.5" - resolved "https://registry.yarnpkg.com/app-builder-lib/-/app-builder-lib-22.11.5.tgz#d49f49dc2d9fd225249e4ae7e30add2996e7062f" - integrity sha512-lLEDvJuLdc4IVyADJK6t4qEIjRhOUj4p19B1RS/8pN/oAb8X5Qe1t3Einbsi4oFBJBweH2LIygnSAwumjQh9iA== +app-builder-lib@22.11.7: + version "22.11.7" + resolved "https://registry.yarnpkg.com/app-builder-lib/-/app-builder-lib-22.11.7.tgz#c0ad1119ebfbf4189a8280ad693625f5e684dca6" + integrity sha512-pS9/cR4/TnNZVAHZECiSvvwTBzbwblj7KBBZkMKDG57nibq0I1XY8zAaYeHFdlYTyrRcz9JUXbAqJKezya7UFQ== dependencies: "7zip-bin" "~5.1.1" "@develar/schema-utils" "~2.6.5" @@ -1941,12 +1941,12 @@ app-builder-lib@22.11.5: "@malept/flatpak-bundler" "^0.4.0" async-exit-hook "^2.0.1" bluebird-lst "^1.0.9" - builder-util "22.11.5" - builder-util-runtime "8.7.6" + builder-util "22.11.7" + builder-util-runtime "8.7.7" chromium-pickle-js "^0.2.0" debug "^4.3.2" ejs "^3.1.6" - electron-publish "22.11.5" + electron-publish "22.11.7" fs-extra "^10.0.0" hosted-git-info "^4.0.2" is-ci "^3.0.0" @@ -2858,17 +2858,25 @@ builder-util-runtime@8.7.6: debug "^4.3.2" sax "^1.2.4" -builder-util@22.11.5: - version "22.11.5" - resolved "https://registry.yarnpkg.com/builder-util/-/builder-util-22.11.5.tgz#08836d00e6bef39bdffd8a66fb07d2d5021b9c3c" - integrity sha512-ur9ksncYOnJg/VuJz3PdsBQHeg9tjdOC2HVj8mQ0WNcn/H3MO4tnwKBOWWikPDiWEjeBSvFUmYBnGFkRiUNkww== +builder-util-runtime@8.7.7: + version "8.7.7" + resolved "https://registry.yarnpkg.com/builder-util-runtime/-/builder-util-runtime-8.7.7.tgz#6c83cc3abe7a7a5c8b4ec8878f68adc828c07f0d" + integrity sha512-RUfoXzVrmFFI0K/Oft0CtP1LpTIOlBeLJatt5DePTI0KlxE156am4SGUpqtbbdqZNm++LkV9mX4olBDcXyGPow== + dependencies: + debug "^4.3.2" + sax "^1.2.4" + +builder-util@22.11.7: + version "22.11.7" + resolved "https://registry.yarnpkg.com/builder-util/-/builder-util-22.11.7.tgz#ae9707afa6a31feafa13c274ac83b4fe28ef1467" + integrity sha512-ihqUe5ey82LM9qqQe0/oIcaSm9w+B9UjcsWJZxJliTBsbU+sErOpDFpHW+sim0veiTF/EIcGUh9HoduWw+l9FA== dependencies: "7zip-bin" "~5.1.1" "@types/debug" "^4.1.5" "@types/fs-extra" "^9.0.11" app-builder-bin "3.5.13" bluebird-lst "^1.0.9" - builder-util-runtime "8.7.6" + builder-util-runtime "8.7.7" chalk "^4.1.1" debug "^4.3.2" fs-extra "^10.0.0" @@ -4002,13 +4010,13 @@ dir-compare@^2.4.0: commander "2.9.0" minimatch "3.0.4" -dmg-builder@22.11.5: - version "22.11.5" - resolved "https://registry.yarnpkg.com/dmg-builder/-/dmg-builder-22.11.5.tgz#0df9843def73a217097956982fa21bb4d6a5836e" - integrity sha512-91Shh9+OK9RwBlBURxvhSnQNibEh/JYNAnMOfFguyNbasSfF50Jme4b3dgsQrHTTTfkFijcvzykPPFAZofQs6g== +dmg-builder@22.11.7: + version "22.11.7" + resolved "https://registry.yarnpkg.com/dmg-builder/-/dmg-builder-22.11.7.tgz#5956008c18d40ee72c0ea01ffea9590dbf51df89" + integrity sha512-+I+XfP2DODHB6PwFANgpH/WMzzCA5r5XoMvbFCIYjQjJpXlO0XnqQaamzFl2vh/Wz/Qt0d0lJMgRy8gKR3MGdQ== dependencies: - app-builder-lib "22.11.5" - builder-util "22.11.5" + app-builder-lib "22.11.7" + builder-util "22.11.7" builder-util-runtime "8.7.6" fs-extra "^10.0.0" iconv-lite "^0.6.2" @@ -4183,17 +4191,17 @@ ejs@^3.1.6: dependencies: jake "^10.6.1" -electron-builder@^22.11.5: - version "22.11.5" - resolved "https://registry.yarnpkg.com/electron-builder/-/electron-builder-22.11.5.tgz#914d8183e1bab7cda43ef1d67fc3d17314c7e242" - integrity sha512-QIhzrmSLNteItRvmAjwNpsya08oZeOJIrxFww/Alkjcwnrn5Xgog2qf3Xfa3ocuNUQIwb+mMzZrzqnPu0Mamyg== +electron-builder@^22.11.7: + version "22.11.7" + resolved "https://registry.yarnpkg.com/electron-builder/-/electron-builder-22.11.7.tgz#cd97a0d9f6e6d388112e66b4376de431cca4d596" + integrity sha512-yQExSLt7Hbz/P8lLkZDdE/OnJJ7NCX+uiQcV+XIH0TeEZcD87ZnSqBBzGUN5akySU4BXXlrVZKeUsXACWrm5Kw== dependencies: - "@types/yargs" "^16.0.1" - app-builder-lib "22.11.5" - builder-util "22.11.5" - builder-util-runtime "8.7.6" + "@types/yargs" "^16.0.2" + app-builder-lib "22.11.7" + builder-util "22.11.7" + builder-util-runtime "8.7.7" chalk "^4.1.1" - dmg-builder "22.11.5" + dmg-builder "22.11.7" fs-extra "^10.0.0" is-ci "^3.0.0" lazy-val "^1.0.5" @@ -4296,14 +4304,14 @@ electron-packager@^15.2.0: semver "^7.1.3" yargs-parser "^20.0.0" -electron-publish@22.11.5: - version "22.11.5" - resolved "https://registry.yarnpkg.com/electron-publish/-/electron-publish-22.11.5.tgz#2fcd3280c4267e70e4aa15003c9b7dc34923320e" - integrity sha512-peN4tEP80Kb6reuwKKvSu9p/XUWpx/7x747u5NSg7Kg2axBjzdMtX5ZqBThfPtJWJhSWZ7PEYWmNyUCfdQl2Ag== +electron-publish@22.11.7: + version "22.11.7" + resolved "https://registry.yarnpkg.com/electron-publish/-/electron-publish-22.11.7.tgz#4126cbb08ccf082a2aa7fef89ee629b3a4b8ae9a" + integrity sha512-A4EhRRNBVz4SPzUlBrPO6BmuyDeI0pyprggPAV9rQ+SDVSnSB/WKPot9JwWMyArkGj3AUUTMNVT6hwZhMvhfqw== dependencies: "@types/fs-extra" "^9.0.11" - builder-util "22.11.5" - builder-util-runtime "8.7.6" + builder-util "22.11.7" + builder-util-runtime "8.7.7" chalk "^4.1.1" fs-extra "^10.0.0" lazy-val "^1.0.5" From 3517ed908f7d8df5bfd2e5bc612143430fd541cd Mon Sep 17 00:00:00 2001 From: Brendan Forster Date: Tue, 22 Jun 2021 14:26:24 -0300 Subject: [PATCH 38/48] add section about known issues and add to Linux section (#537) --- README.md | 5 +++++ docs/known-issues.md | 10 ++++++++++ 2 files changed, 15 insertions(+) diff --git a/README.md b/README.md index 354d3b97c2d..dcc33eb7f26 100644 --- a/README.md +++ b/README.md @@ -71,6 +71,11 @@ Arch Linux users can install GitHub Desktop from the `gnome-keyring` is required and the daemon must be launched either at login or when the X server is started. Normally this is handled by a display manager, but in other cases following the instructions found on the [Arch Wiki](https://wiki.archlinux.org/index.php/GNOME/Keyring#Using_the_keyring_outside_GNOME) will fix the issue of not being able to save login credentials. +## Known issues + +If you're having troubles with Desktop, please refer to the [Known issues](docs/known-issues.md#linux) +document for guidance and workarounds for common limitations. + ## More information Please check out the [README](https://github.com/desktop/desktop#github-desktop) diff --git a/docs/known-issues.md b/docs/known-issues.md index 77641511209..9ef17a73c19 100644 --- a/docs/known-issues.md +++ b/docs/known-issues.md @@ -12,6 +12,8 @@ - [Failed to open CA file after an update](#failed-to-open-ca-file-after-an-update) - [`ask-pass-trampoline.bat` errors](#ask-pass-trampolinebat-errors) - [Authentication errors due to modified registry entries](#authentication-errors-due-to-modified-registry-entries) +- [Linux](#linux) + - [I get a white screen when launching Desktop](#i-get-a-white-screen-when-launching-desktop) # Known Issues @@ -234,3 +236,11 @@ If either the user or an application has modified the `Command Processor` regist `HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Command Processor\` Check to see if there is an `Autorun` value in either of those location. If there is, deleting that value should resolve the `Authentication failed` error. + +## Linux + +### I get a white screen when launching Desktop + +Electron enables hardware accelerated graphics by default, but some graphics cards have issues with hardware acceleration which means the application will launch successfully but it will be a white screen. If you are running GitHub Desktop within virtualization software like Parallels Desktop, hardware accelerated graphics may not be available. + +**Workaround:** if you set the `GITHUB_DESKTOP_DISABLE_HARDWARE_ACCELERATION` environment variable to any value and launch Desktop again it will disable hardware acceleration on launch, so the application is usable. From 00dcccf2907d85ac382323a81e8d3efa9e5251db Mon Sep 17 00:00:00 2001 From: Brendan Forster Date: Tue, 6 Jul 2021 16:06:28 -0300 Subject: [PATCH 39/48] drop prerelease: true from release step in workflow (#551) --- .github/workflows/ci.yml | 1 - 1 file changed, 1 deletion(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index bec4a7fb608..cf2e80af2ba 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -98,6 +98,5 @@ jobs: dist/*.rpm dist/*.txt draft: true - prerelease: true env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} From 1bb90b228976d8c9599c968ae943dff609f72fa6 Mon Sep 17 00:00:00 2001 From: Brendan Forster Date: Tue, 6 Jul 2021 16:24:46 -0300 Subject: [PATCH 40/48] refresh smaller icons to use new theme (#530) * drop explicit window icon on Linux * drop old icon used in app window * regenerate smaller icons from new 256px source --- app/src/main-process/app-window.ts | 3 --- app/static/linux/icon-logo.png | Bin 118370 -> 0 bytes app/static/logos/128x128.png | Bin 25377 -> 12473 bytes app/static/logos/32x32.png | Bin 5333 -> 1851 bytes app/static/logos/64x64.png | Bin 13966 -> 4779 bytes 5 files changed, 3 deletions(-) delete mode 100644 app/static/linux/icon-logo.png diff --git a/app/src/main-process/app-window.ts b/app/src/main-process/app-window.ts index 4f7d8714a5d..c0fc14fd941 100644 --- a/app/src/main-process/app-window.ts +++ b/app/src/main-process/app-window.ts @@ -7,7 +7,6 @@ import { URLActionType } from '../lib/parse-app-url' import { ILaunchStats } from '../lib/stats' import { menuFromElectronMenu } from '../models/app-menu' import { now } from './now' -import * as path from 'path' import windowStateKeeper from 'electron-window-state' export class AppWindow { @@ -57,8 +56,6 @@ export class AppWindow { } else if (__WIN32__) { windowOptions.frame = false } else if (__LINUX__) { - windowOptions.icon = path.join(__dirname, 'static', 'icon-logo.png') - // relax restriction here for users trying to run app at a small // resolution and any other side-effects of dropping this restriction are // currently unsupported diff --git a/app/static/linux/icon-logo.png b/app/static/linux/icon-logo.png deleted file mode 100644 index 7e598fe01189e9dc3d1c34bee0d850c54eb71c1e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 118370 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

dd`1+QBLhMR9?LkaCHw)NK&N^%gW$tI% z9QPWSoqno~eAU8v&EsP2CH4lb>j+^*gFJ=QX-M(uo#POz4fHq?&`4z`=M4M^q)MNZ z22*r1m-F8nzaGXg$3U@vojjF>X8_74to!&A&#T|h3&?+O>0;%{N#1-3xs~_97QWNG zquFY4zu}(x28x`MXQTfPvxABp#>{SGsAsd!kEa91Xy*w<=L{cSz*Rey=7i1Y1bn|8 zbIUon^Rf1CoK*K;iVg+hQXm!i8S_>GV5z@N!x59wFvq>__*R{V--RtjQhw1(eHF#` z%zh`UxZQjurxPX4*j-D?pYZNJddr*hWTAKeWVbfj!hmI?eL+1%;`y`P%IVyApC|1v zzRh3Y?s{~`LY5GXSB}E+{^jGf&F3fj>fuMhOmgQ;au~DVJ;L(PCz^B>#v=s);~?a9TDVqzT;zrmd7|lg&+{E6qFtyU6>}6Kl)cyU%g9X#b$H;_U#B{n9IG|e z`c7)$&{b52GK2C_r_kMVdeC8(gd2#-Kk2^K@!G|n_6X+XKN7QQ^=dM^Ip^~i&n4CU z{2VgRUF*^9y}hd2&sRAE!;ykyaW_veGqcAnIZ6i-(ocls*PCmkIzF@h1jY*xq8xA@ z@@|l)hfX6@bkAo~aogueewpl~k<%zcg1kHS*#To`fN^iny7Rmp6~J{mTbY|(>JRp- z$QsYMoGgFTxpZf4`>g-@yiSl&>nr^{r>OQ>lG}Gh^~mCAkM`I`jpe78a?8!L{#7zk zr%=Zh6ML$oteW4g8p$=Bmt>+Tzt4Pl3*J$~TlR22QDB4(>6D}9?O$d*+ zuy`*d%n5TRURqIn7Q#Up^TL!&(U|;8ryFVk!RrtfKW|cl66NBzPr`(3E; zURC9qpWg~f-?z*clDbx2B?Dapiww_4181LAL<=!7IbY~Ozm-Ng>7^Mk z{ql(JVaZ#0zZ{L$V)53?#(0j=#|W$}tOWFmQ7O;Pi>QY%JY}ucYI!cw zck{MCd6$wreekW(sEwd^Hon&PM|YF8zyhlSE#?5kj=#YtdK})S!^V}9@qcQ1YV@x= z8UE0rp4xWptA5J_@b)je>8oYYmY|rg5}slA&ybnNQnu#zw@~cfzT9A8Bf5jNRaW1X z87dAT$o+!ioc}Md(YRLk0x>e|T~w&OLwy(7?MtrUVg2RXF`Pn$k!kGYzOYgJ8FFQx zBJ@^T$N8h%_uGIG6mW|b1zmjA1jFM0gJv#o(`jeRC~#oAZ;4_yiQN&da|n8I)xbdH zk9MSW-#IZ6!tp}Y0{>G#lBITmj_^mxFCPG#x9L+m#;S7~en#v@B4!Z!Kifi5+$?PF z@;a4?#q>AM(|e8Kr6r&WOV}^oJbDFne^58|(e|)nai|H*7l{xA<5LV69?bW1$`NQs z%%s2^^Ty7poK<#``4&Z7bADwR`4>Xq&H0I0BBIpi{gc|(>f{Qe*_Q1U6)}o5$F9v| z2f}W^b&}jGr^vtf*Py$dMr3?cAqM#Z5bVAc;5dPBQ0ry zPb1m2)VNA)jskV4*H8-)(Ip?L_Wu9(SjKQKD3h8e2rw*(k_^SQ1) ztm9+$x-Z9GE+e+sZFomy8)NQ1i({u&&pw|T`#b%8VA46>q>6X`aYYw#xhcnU8k@|t zG1bziN&dNPcb3K6iNC_dYEiKvS?Gl|fYRr{-QuFKM;!Qq^2ZK<&OF1ezY!;&h@;yO zGbqKX1f%|PSm00a&YKnT#T)mB{KuI@JpOvSylZkQewixk*b zh1b4G3Hv>U+`hh@ROV{GaOssY?d~k_S1`uS@h6-cuwsV4IApbT)uF~+ik)?w!LBvo-ps+Mi=6y$xN=u z$1WoB(MRFES2sc#VE1n+6Q{)F>-m;#moIHP={V|%KqYu|3jX*Yl|>3zqd%~tVRw{i z{R4Cz5E97JGcSyFuzvMOo`+jOyhC%-cyDG3(!9k9x87Cf;mQm$@0VB5Z}t08qmy4f zc5ukDK|Z-QF(hPPI^WhMZARL}_c&lw4NvhcICld|m9P=5WoR=oR?f!chmzo!J5$zC zr^c&gEs3}HjSn`scg2nOxpIE%$KZ6pm6X$k|HspJhBeg%-JXO5Lg>8+B!JSJuOLWE z=!jB85b1~okQV9E5}G1NM^O=ifYOwrQlupyRaCGbAiXFENQY38oEyLI-uukI{K`Ii z&+Iibd)9h0sWb1jcK53^(QrJA_S2%9knmy!;#M$<3RQT$fO5NLT)YbQqj>^uq!MQ&kT9`y?E?;Wt8R|H6R@jkk;EJ*;WG8mqjM;c2(4 z#nAZBT95;l5HMiomOheP4BX~n$ROQ7>a}PYG*M9NBnSk}R@hMT_D`G3R-BMU*~{nQ z%4OQbx|A;kn>7nyY6|;* z0awBO+vgQpWBZ8p429lDn2#m5q?GhFPYpf_L=15zgZ&QIV%rB>zu$h6xUcvaB#rDg z27>yO<*nhhIsM(&^SxgIW2Tk6m#qOmlk;@{+gmKZ`cb*EjI3iIheV;qWszP$I@^IT zPc%F((oYQ@w~8e2%`l6??5|S~)@D_-*j3nUA^0gi_|oAX5#GCu-t`*#M|7GHTy6L( z-<=ylc=tXat9B3(e(y9@z7=eLo2M|EJ+Azm_x=y1dv4!@l7(6za?C2LhSFi@{#yH; zTm893uUHH;CT>#aYw@CoEG|{j_EvzpfZ7(<7vbm7==_-rKV^hDn~X0)f@@k$R*BJG zEtRL}6EkW80PVqex^h$X;zPfqBer!~LUVI7*mAWu{jXB#P40eu)^*)bFnFzXaKv0- zwaF8+q~^Xq!nKaCoZd!-(DEzz5cFg}*0eFmT;T`vh zNmf%C^!Y@_Bb$i`%>&}^oW|o^Km4tqAJ$T?>t8<5*4$A&$H6a0hE2JM zWk8!LxsFLzF2(m`tSn#@<5)_%3KD6cCAOM&G`_fbRdHK$pX&DVyxr3DOQ@HGTHH*> zXq-xK-nu-m&&fZ>?9L~4xku2p9MQ2l1sR66zgf4FOzlcSP?+s|w>4&U9Nv|!M-|%T z^5S2I);w7$Ia~=8I>Tt&Kj8`Y7A<-VHT@b_3P0xqtY-g!=1PM6?PS$G`c;M^;yURd zvlZ+UIrbg?@?@rj$SNDO>>sB6$!KuTByJ}id#LPWkXx!SKj=bWa7$=eeqpIz854XI zaHNyoapAeT_i&{>m-b?1otp9PT2Q{GU+C3#{qBPB@809vs@>>BdhgCiI{w0dyU9q7 zq9uGm8gc>d`*i#R8^MbE1=E&fWAt&tNd4dSyH(&Ab0VY(%if`ENx3pq>G!BILtW3q zkT9Me9^OoJZTX%Cy8jjSqw9+z&+dn1F9a$p6P|IkAR8RBiX>AIT?^HeXPT^NLFsTj z`%7%_fW_J!!M^P1VDn{efAg-LY)pG%v+8F#8@6-=5exHckTa0ZhD-j8;hfx{4RHp3U)sjvhjtS99p(-r=X#5m;X zBhH<=&N91&+uYG+@!3lVg(J2a)Eu#U-+-Eg6Vos99vRS&wVKK~-FEJ=`{Z#trd7@3 zE{F16{Qf~*DQM1Qp`E!6d6AdCEa4eerktj5XJP$fDs%AV+N*cecZj2yH)%I8kPL&> zP3NWQuWv2y4BaWa0QmDMiD4B0EA9YcxEWc%*rM`3`oyIgHyZk>jPT4jjN->e#gV`g zVPT@;W6i*+6R(T*d=Rh3J&p#_I4Dhc`gdHXn_PS8Mqq0u11jYlS<7BvLC8FjF!H$o ztOc;-Sx} z#>gQNxbfy$@$iuamdRRGt0Ja+L8KH+<|3--Z<1GqY$`%+(2l{uCCrVe?bThkj=7k< z=yo<0WD~A42t%GY_E(JM409K!MQQZ{^1zDeMD{~n^>Pv2=j0^=ET=BSu9VH^_I=^e z7a8LV>&!t*_aPUI&7C{0M)@bQkTki^D;R+57bFg+qB+6GJ^YVu&Kba&@To!yp~)hA z$mEl$3PTnnJuB}!XO8p1;Z_DNKHq1q2{4=PxZXL8DebO2(s{(fpZ=ffBNTP=qtIi` zw=4dk;SI_vzxgzOJKWjFoc0(PuN3-W!-D=pG7W=dappdp`D@Hl=c)i?&&{_|0vqHj zz2Bqr%{OLOtP z-SwBVYEA4`Y>`YmaodrfS>-0_zTAiFV839!+9t=DbhBid&Z6I72wcASj4S18%A#AWBHVc)KvLH{t5s#e zxX>X9>t%~l>o1aMW4RVMJZG^Nv6(XVyIZkCxZh}Fxxy$@^4&L0{o|q5GtlJ6gR##g zgcLi|6mE!qu7z8!!Ly0Kk6^-k1BZQsJN`kKWm$>@Er0R>lhee51gGcYb1=!KdlSLR zgPPmgn3@?1JZ1sRjz0p!7JI(vw;KdT?m4J2u?`JN2l77-rY{SRC zkY_+3rlv-f+bwS4o79TgmGWdo$v294o9V zj+JS8^NSR-0#Y~%QB_#p2dA?nM`4 z?jrtx48DS#`S!T}7W|!V9Kw*@ z;*x}fiZ$~I8kJ! zTI6=iFOZ9AUmq%A=evhu->s%d!+eZ?6pv-!& zaBwWlvb5o4)VRM(o1>KK3UYR1dnNB(OPTI!bKDL}LJB*-+q$1KD(yXV0{esi!M2LuX)-I$ZsH0i&}^{p5BhF;H!5 zgd0O)e)Hu|@V_c}tvDnEksDGTz?LX2htPHY2?Jdi?5Gtz5%2#AA_yS}Q@EmAb6F<< zdcw@MHaAm~`|E4{xwNB}iMv)BCz1;X!3h<4YLxG!pypPM%!U2MM%ulvIl8z7+9?s6 zJKAS?d4>Sahe+Vd@lULAzng@)aesNrAOK9lpGzGAT)zLf8E~f&e}kJ5NG6>7A}@6T zM{U-j>sIp*$Kd&({poS_s)4xe6Ux{}LR`av#}aGX7Fpk+nF+E7k%c-oIInB#+ndrX z277|lW*!DRnQX>)&2*_)yT6ng zurePLIsCzqs@XKm(n&jA-J#DY08$4NVu7g1QxuY15@DX(Ey#Go_-lMAOUYjX&ump& z#~Ls|ySrC$N)U4P?J3lubsN~DzRDG}5QylXE^2|yIRPkm5xTZ|=Kh6FaU4QE=jMIP z1aoiF(|_KGo6Gu512c*?0?B{Mi1g4iXYakh*gIZ6zu_#a5`@VtPJiaK??t1REyZCL z=#SaM=G=`G7*1z`1{SmnizJNLF9~s5(M#oQxLFBuNOWzcb1vsl??Vt}xJ^_8F^+=K zKEB_QctsrPLl#@E4=h)gOP1GbFhonX+JdUJoyTuYeks8c36X_47D@h3%9yXho|Fj9 zj2#=>j>^o%d=TD}%5#hQ8KOxe)&y$~gKx{5V-G6q1HL^`UYk@NpKNbCx<7YdY_SHZ zLj|Zk%S6K3xw@=*W+N~ zMn6eJmQ>LWLntM5%lnw=V}-hZn3S|2mykPhNJPs%RRLB^TUMEM+ znx%n`wI_dg#K7vxQmA9CJj>Na}{oInQhPGPQ~+V{~^ z%tf`-qx%Tp7YtB?c<^bWSk=0Y+zsk*gbMGP>Nw?gh6G-DwH-~>!{ANrE1>qdaDJV; zuMlr^uMlwQDzznU8a#@6jSOeQe&Qd{z4p`@gcT%~ zNPRvxKY4u&V_R5Fyj!}o_RH&%z~!t> z%zLE_O)nVvqaAw}xu@zC#Rm}UsH2rRGH@Warc;t&lz1-SIET%HO|SHhP@Kesmw)`M z@vlDV&Ld6u_kSPUv9GgwVyJYq1)p&={9d&=7=w9YD&+T9ZcF=p8zt}^UKI#2Tw18* zw&lDME8p#r!C7@#Srv$IHM)BCIM(9=0dPeUZp5)d2EaE(y+Smwtaiw8qq~!Mm;m=g zr1VeHHXDgGoX_k)+M8WS=3ZF8^|byUh~``O0-eQE(v$Cq;>wd9J^Wdvhk>6$*vuyX zNVFXIY?^9ry(!H6_~!0vmBH5DyMeR;)b_p?hE%M03zuB%QIi5q<+n*R&stD@PV7#r zr!-yS3C`p24p~I$nYQ;{*osLHTBL~13;vk+)9@0XKP|n?%?I+F1mjd;tyVqr)RLZD zB;?4dOJ53j$%#$|)XSjcr@ThO9Ul<{_JfsrUeeg0(Kh|f7v}`+NTe!2Zi>xTQ78s- zD)WcTkD;DkN zYL0vojcjw)1#kI0*^)W%aoe71(@5->w%+=)sQJmx=yVmi{XFJCjWBrEvtmRV8`IpGPO(-ybjd~*(CJt;YIcf z*ZNS$dh4N!rLBuxAA5fL;Uu0=Sax}Cav4M7#UX9?ps-JI`g(?1&)>JT`0F^!wdm15 z`e?1ceDhgbx*Wd5rYY(mL7xJ##^kME12vMWyd0N)6{ZW)^`dEfYb-gzly4^u`61AV^ypQ39Oymhb67z$k(CIL_4`tAuPyyf!BML)+Y;#~^7Ow+%BjJSZ zcno+-W37ReOY7O2HTx3|R(_kis5RO*h9c467}P?J)0!{7B5_rbc9b!(ImmZKX{|%j zjBU^7CwaYOwEn8*wC~*RN|Z#_Jjr48S9bnGo?pec_`{yna?N*H*{CK?dh52A*sA44>{4NAvSPmxfhy$jNCSAhfZ&H2H8;vh!B z)iy)q9M6dY16n^Jsjb`$V3&ts;e~kb#w}R_D0t}<{vAZw7j1JR z{8PkG!EXN*by`-;$ipMAjK#|r!sfXdikLwbw#D4GKJNP02#Abr*NMlr(F-?)Y(^V?H?B+!>4&Z&wv^+}$emy9zKevUQ3vkQbLMWGz@MOv zZZq)Q9kq4Tn4L8EU2w#!73^xbE9?OU0?FlvzGJ0QXdVFlie+OYj3ES{@Eha-=rA(m zxio?Gz;)EO^=*`^va?HAxEEECE9S+1NhDqX+OLo6UZ1B$^^gwNQEX5N%6-g;!S|4a z(N9-oUq=XxZ71YhUBJ zL({9JAppozK=Z!NkdQ~p8p8XziP}?WBck_h({7;O@qcUgvg(Y(Nj~+y0Iaa#w05Z& z?F~AM?!iJ%unl(76_`3A`G26Ty|i|fPxJ5jrgy&~U2F?$FB_%X24MeeCgl~)qSg#9 z$#Ys5WB>c|)y2+?(K>1cHj=r><|P0*(Le?XbV9KL0Ar&gD}2)AKuvsO`h0fFNxHqk z;1Q)2KX?Qxk}%MjSM|;lOEu@S{=O0`uv8^{y@XW-MAfw)3jmL6Ndl*%zG^=D#uq_D z^8y@Lf1j9T@5i)yU#8RAe21Ddi1^0<1Tf>4zjG?YjDS&TihJRMV|Ov48QZrrX>qIE zF9yuUMId+YQo!l>y}JokI)C2=nwyo@CoVMWe0kjE>)?;WXxCLN&`_!WZq5rqKlaUR zyr9@3B+f$$O3-7OV->tp@cNzH#p=@)7oS%dqD?}|GbK@QH8ejGLN@%NO!(Fc$nk@} zjGjz3kDUJR&M?Q7OY|eX_33RoNNhXB_4>8N;6DDbUGd}dTV}Z;cGp6#l^w<3sJ#Eg z?!$-E7v;0h+PfI=XZiCtKl{`6OaQ^&MtCCf^x8+i&$+*hOMda2NPfBYvfuN<$0j)Q z1AA@*K_S!1_Eu8V^tbiRr}{2GqkNW@2P?}0@RZYHt&2}7x2Jx!%A)X@yY2cIz)fF^FM#A9t&{R`bmlf1jgL`b z1%{Nk*M^)3_6#Ko!$gtlxZp}bIDu`}coD7WkbXyJcIep}4gX_+Hj;i!bIqE;*430y zIblK43IbcgR|kGuyS|vh>sWkRKkPm3w1!gq!t4ytp{zHVekRyq4Y^AdY%O8@go>$L zgh$Ef@47)-9>A#e>|cb3!yjI>KUCdJFz6dG?E3mD-T_8tc|RrmyYJ+Ek9sB9slgu; zhkyMZs<*xy5dt(6fLaGnqo8e(MoqYoDJcAoFv&R)CC!(})9xM|Gv&edYsG%a>JOy5#a_sH@ zr=0L#AIWJ7q~u}lNhvCf9z;$CemOD&&VTR0{HC?^aG~8`G62B@5;4dMB&hUU7Vhen z!w&nyrmRb$)MAku8Fc$aawpBr5+Ef2L;QqEXrC!jS(4O1TKY7lhcniVa{(6mPEujm z3Xw~cf{fT=k)f~pkf9Yez%SLBUdL1%HsJR-i)4D*;KSa*6vjM<^z8m3NgoZm73t38 z;JFCLQoMIXnK~q6`8^78A156e5Q|D5+NTe$4HpBrxr^3%!?VNC^YJ=&Bl%|<;qy-^ z7|*U`U&{J4>6IvyAgvVG)~=cFu!Nf;?NHZ^E3z8v&fysv8HNC?f*@*S$3;G>Z+kWe zGuUKZQvHvc2ZOMy^?!K%f&zBRnx9#PLJWPQ;s7CJ%a$%m0c_9N(7jGSO#m_dM{ESK zGj~qt%MC+z_~FT5;lsv{aBw|n9e(e4Qb%%bSL*4P}r9GFf6_Nzke zg#cNrrvMWz_+bB^CFtryfvx3&6HpJkv%vRVR=}S*QMvO4Lk|5b%bs8QNB;N!MOm6+ zV!EJc&cFGeevKWCwbHmxr@7>;Z9CUBaI;B63}Vsv)&>|J_{Lo z8X9c^BkQdH;`z5{;^%>v`7~AA$!d9k4^ZcNA8;k(V^8AeJ5rnn`HO?T=l2Eo))A@n zuM1osA#7rA=zgL38FG}s=ovO(s2EB>1eKUVW(3#Mfo7&ogHDr{0|`aJ0Ni}KxK3e$ zA{_qf^GVzvn;kkx-lqEssk%j1l|Q9aeYv0TIdp-3!6V}J_Cy-~s>6d$@bghP6fp5B ztx1(kfo&k?%n2q;*`4T16)7`a*yB)74L^apfbA|>rk(IkI)u3qB9iba4)D%RquoPb zF97_~z`L>s8N>_>dv6(w`QT(baCs~b>RqMbCA&v8up^5h0q)y0q+brY_8t%7=<3CJ z^D18ahwY3$40G#DDsUvyj)NBUr$8nx<8Yj(`5ButQ<|~}Wo*u@h1NHQe^msnaNnc` zKUa7ZU$n>Ibd9|Kf<@^kM9D8|Z;-Ygt>cW_4T_|<9MR?J^MbOuqA8zR@#IA4^vVbW z5#4hytBIcCGloVA?7dNLSD(v)ayCN<{z!KOBP7~5*_h`DLUgxpM_ti7_Lzeqi~bO^ z@`1B0Mi^qVc7z#cmPcV2hOg}fixTTk(cf7E-|qq5+&W)ezPUCF)S5~IHyqfrq>IC3 z4d_>%yfJ!Kh%YWzO?fMm?1r(9piBO=1j=(3b4cw!v#_a9#Q)P9>M)7I*Au_l2@L9q zy$fCW(K~Zq6^VPU!7M5|1+GUf(tXP;^G(O66V&z0mA;>f1+QLkvJMIS7$70}0CZ6I z+TK}mpB#M+n(u4r5-LsRt*Dby}JZ>c>!@Aa=XRs~HBx~L^=+{q& zjjo&e#9s#b?(EqD^E#=}qS*{m2i&4q7b8q=weui<#k=drGK`MS;5tBI!layUe{0l& z4>>RmsrjVwvorXfYfrcH955Af+^G8auzLx(m4r{B3T#ICb6#3l)Co8{=lV_c&bf~-1Y2>a9=t-?JGVaZY1rP z=GXnQxuoI`!(U@f%VA^x6W^^?mEP%E zKy47RNSkr2Ku4E~mWdA2vVDgroRDzC<)_U;X~NO>$CVy*hzqM%q?qWeNdHC>+Exia%QHTqsNLE?s_OfOBL))zZw-hCy0Ii@ zO&*i!B=(R~Z8ZKA1XwuONs@m^+Dd`l{;e^JF5`pNHKNLpcIS0=a;yaqZ25rzN71(|cNk+{`52N~)TO3-P6UfZ z6k`h+_~*8`Sfz`$M1VMQ7UWr*z+5K9(x7^W;W8gIXx&AZGQ>VP(O)aJ(6SHx!s_+| z9Z&LKbZFjkcn`YLH%Yk&8|>;-l~XYRa|2I2NA^!$19f2k z50g8B~*W1DW*v|A|_41;r|I9#wn5;k2gur*n6pGD&9?Dysh}k}j>FNSK%;_n8GEZJ9?OQ!aICIIrh&h+hE@{XIY@7>a zK*6|qE?MA-I&#KcfSqMhd0Lz?qam&r&40!I3)R%UgZ(>m2E`-?Q^wo+JBS@koFJbapnwdm5B*?7uWA93DJ)(XR6!@ClPnyp4hQ=+T1P{jEEDlqc zm(CjA!z{4ObMgVWRQ&PG9&D#U zw$B5E3xyQ-mfPFES%!~l5GdN=`_%{F&%#es+pDLygXHPk>Ga`@`Z_4-m<08%OXRZNU|}O-5thQ>prx|Q5raB2YfUF%#Q|%u}2513l-KU zfXaLS?oby=B|=M3oCj!G|h&ELY9V>7(LCj$2$Mg;YOtK2pNZ z;nAsvW(O8hI$NS!j3qwZgUr!`!WQ&r1HgCaOvn!&xNu1~;VnyhbOr9aZE@w+WToXR zfI&l<0&LubsA#t9k?2Rt9TD~l7gd{=ijVEBO&%#|irY62ZQ7uG_Urhals??3yWHjs zBD&RWsAXrK2wDT`iaR2s$MX@%!|qOqM;{ghU^jDudR#YF!ygV82$gQo($K?ok{THjr4#nNi4uE zX$Kj41ufF#2C^pW1`W)q=;{rW+Cf4?BB17d!Tkx<;3H&Dj1`#Ys$$}X0E=Wj95+L3 zid9qN{RNzW{7Ooa1mo}`^W3<~6dJ7vzJt9Rpvl@ObZL3{iRv>jqkez=;=Iw89qDJ@ zr<@g`vJ9urn2!^OvU-nEXqb^)k3E>T1)hIsV1m_5E(SiGU;y^lQUC*G8)L;-htj&D zHl;K*#HKZX(eu|${{1uaL7@#6IfnNt@@v$h+09EnyN*E6d}2)1n4zKI1jy1U9w?7=vx1 zvtUlp%eluKgV#0FF3a^QKap$7d;^No%NS&K8Zv-PNQ`Zr2$kaBDShIR3c`;y_qhqg zb6={+GAkYS2w`rDK(1gNc{~i!u1vMYFtQX6z}6FLfh>}50e!i=%reA+d!+v*!Z0z% zqu!%fxy4Z)V88@;i3L1lTM=aK=@$`QC^o{L@H5wQQ8evKh^a;!P`hZ5SvuM;Lh8Bm zkChBPyoc`B=Z#EZ6jlOr8;anG)$&OYs;;^XxgSRdMDq;8MhE33hxAS8F9R;SGv0B+ z2@BOJP>(ayUUecv<1L&Pvlc2q(1I|t+PFe*r4G0!c{45rS`bU1BCwwfC3VD>Za8b5xWxeUwBQLR7;Fq+d{>| zhn=7;?pBRlb!0zD>2d9ov$$^j)bU*y6nz597= z^sVu8QV{x`d6DBKkY>pvDZn-4pm@@2vu{w(_CV*H0--T5CIL5GtC?~ph+W90qJ8}n z(^#h}h9FJQlVc^^I{_Io+;{(bE|*cawuXJ8l&uulxojZsQz3)>HhAjlYM9jepzkUz zJj!OyI*SxZC+|M?34(fbV)`fzNUQjKIp)Nw#5aQPU2&JYgW(JsT!WJ{Cl*tIeU1)c zdl?6|c52VDz}Cykkd2x6^)J4U=P;~w-1Nm&5XlBw=WdW#0U2|0=>sEk`V*no(Kfaw zJ&eA~A0*83O9S*A+vuFC@Sp9<4NYzmQ@lCBZ|FZL0rUP&fC3Wu!z`EjP#R-LpOQ=s z9mt5a8eaatt3>a+9}&gJT-|TJkbl$w3F9HC@Bue2ez-#&$4Ygnt~(!p>ye(pgI}Ui zE~{%?aZaOJ=TjI*SDLP7_;e0AF9?6iL{Z{lWG{kWg_kO=-pM@jB-@I5wBZ~yRux>D zgBL#w&0hL7`j1RgFC0o{raui|1iw4JxiJ~C(3dsO585|lrz2h0s5Sn1ohc`N9@M;N z18ZLJUX*zzoc?8qRH0sI5S%EHa4{lBJaVoxQ>Y`#b|b)hc}!)-|n8<@c>8>N)(_^}5IuwW^mVi)SJxwR)Vv z8!XYbB_=$ffGodCkPz(Ch;RJt%P8dEF=w!`Y;H-x1zFbl3ioo73m2e@@U+2+q;!QU z{e0_lG5mQqzBeiPa?zmQXf~})u0rQ|ZT!%OXhtS;Fwi|ef(9%WxE{$BFv|70Gcw;| z1kX3{U>KS8dB!_u3(d@AA#br}!{IwpypK*IDtGQ(~Fok_0T;ku3 zJ!PhGqbgvG9IkS^1M-Qd{PmR&|BD&!Z~mce_GP1lR9`>73)D&g2!b3uQwIOW>?ZN+ zLd_NY;FQS%SML5dD|@jYs^{o+X&36o08hCie6`Z4e z3WON5Hzu*@t+?pM%tAZ|*%0Z_qV>82&n5}czpPERG+yGRho>Iy*UdZjz6~8ymS$W^ z0>PVfADT`>#2(R0kmg(C+(1&H=N0R#X*#Uv2USwQen3CdTGY0Gv$E+O6C%q1`ZwdU zS)3>S+LQ-$gO=J}&ex0t^Og&1aqtL1t`$oZ@~-B)6rT613TfXGU6E`eqiv*htc~R=E)HKDi-c{++2@u6B_3 zSpQ%}5<^mtMYk$)@v$5MNvNJXOEBSc*b{($rg~o8`}*5GNERE)F-~6mm%L+8pi;)* zJtCu?Q}F4r9Ayk&@j$vmj6;Q$AgTu`dKOtHed8kk?}Pk2l*3MqgGbcI&wm!iM^Ko)lRJ9)7hmiK8VK}%UnJsVnVzNW#4Cdsq?N^NSGW^#=nW`HFZ-Hp zGvEnQNt$QUkTIMvf+`dn&VKPO%?x@I*3X@z- zr2yXFRl$u=i~YdE=jUFdsw19g1MMJ^-D!vF!|wXOh{{onn7Q*C)%xgD(W}EpVRcLe zS};$cOIJ};2_OzIkEHwL+vBX#o(&5D=nbmDxobvD`OYuM)} z!6g=eF|8ge3UD4-jq^n>3Vgy4J6_?GT&kWr|D(JMmIPui8gaur!Jmhe2RX9VdyVM9 zh-X0oTQluOW1TCPt~I(!d4U>K5*Ddc{&ry>CH`pt>oI!(Fr(KYfb*ALZt%y>nl)WM zw z@3*1-g9s&okC?vyadS-m{Je*r5(gnbXckju4ZP%q)b{)WKQWtJ!E+l+O3yh2$);q! z4K$@Xc?pbKV6sKS1C`wugh(T>uWpziZsovg)?v>Of`Z>w zZjFUMWp1=r2TK{bL6hKT`!#Vc2Jh&i6xDsD6HH4>3%5v~GwJ{YZ&1&dCn^dAO1w)( z+P^Dnwlq{2V11PfBUI7vQXx4(+B`G*r!*EVPcNDAynq8X8lvhs=4Mc8l3xu29f&3+ zju5#S+$g{g_Hsu!RuAf7_~$rT>78K2Ug8hGMb+uKXj~+n{Xvq}w?Xv(J?3d#tm30b zR+qxxSFWb3s(ku=|1X(`EXmzcdx!to&l8sRPxxj#L=WYj^)|@Yy1qJ_81}VqIui{h z<`FljSDkCrRBQ&PHj}`1h{PtGP{l;ZXUGX6Kl85L{B#3(x8pj7&njVD;W7U2k3&h9 zmFJL~GeY%hqK(GSNXXgM?z;6pK+!M&8 zRJbFC_G+=IOX?(EK%`vw&-B0aZ?G40Zr;ccY`f(gwzAZ{17LwBK0pj&42pJ@h~(*ru3Ev-Usy4g@Bb6i zC!hNOj5*G#5c=%sKVIhiMKunOVXzWQ--u^ZX$lyrb{$86cx@Bk<&gDbM{f>Blm-LZ zLh9^nPkRN|WNv`=f^=0Rp`8l;F#*=c79tV0kb83EKPK2TeZ{YA8YiHuV}=1fT}kTq zEQN(u_hW$38R9Bjt)b*Npi(igMmm`NN^K>o>kjXFf9>l9@q3^3%m1^_M%8Y7dXzcat4UCv`D*mk&;dIb)@~#?(=F};M#9b zVvNf!pn}Z%xWXi4hrKi3@c@_Q?t`o4d*8sMmkq-^4KcrOn?w&$#k0QSf3 zbqE=a2F6pHs4O+?$>&aD*TH|rG=X9M;d^Wf_svWtXgDuc!8RBkxW9e8-g;8F7^o+q0z!@mN6J;`IM(i6Efahaw*QWfpG5Hog4k zBpYOYQGD1agK4&!(yl0kx*^sEPJ(7f3z&BD&wAgQ4vh;t-9?_ZgK+S}d*lQ-ypQ)S zxeOXbMGUn=(Oe{b2Ht^{&JvEZXMSQ$9=C+E09?3N|} zgb6}cQ=;Z2l)w`~sr4|2V7%PDdzAi@K@R5txN z#U6jQkd1|~^Q+wCr=9UQrGOJ_jy^lw{nzb#9O*MEP-So$=Ux z)cv8&7@lDuKp7l7 zplIyJv+oG#%X>xBp&{5l(wmfIs&s@eN-l$Za>7i^sAV%#^hNNUOJPi8N1TwP9|x1& zIi|qqHT$OOq5b#u$4>i2@UL-n0%^EYVzldGwDHy9-b7Zup4Owa7UyA&xfzr+z-cv#MJL3sxg7q_|+}}()icnk08QFW!PVqvb6%GnFEJNX2eoUp9VfYn`JXr4MaasvTrX?gYf=#scEznUAvri=Ay#Y&B1# zm+0HjQA~8HLi+4X!+3zR@t^79rqwiKd$Fu>Pdr?k^S# zY+RHB=F|Yj`)bw^0nOJlE=>-%_t}3fNK+bt{TPFUa4?~aK^iF={n)c|$Efk(`N-tk zQ_YNpCM;GQF$#N)^otPkdoMJB(?b37M6VQj4|!P&ZEQjRSv^J2ed6zFYKXr1Ef3Ag zGFmSL-81Yigmn85g&=g3_sfeXWa?N(3d3nfqnHzfGWPuS!iWvW#R;!;SF!BA+e50E zCoIGWwT4(7Om#9XP3q9u)NNMgtO+^wnjRMR)>{s+zS1kd%vx)MHKwMV&*zCz0uEsn zz|w!$Ud9d$l+|}HaNXY#XyZA&=}1S{@5D`x4~{V>vyf$>ob`VRxX}}SEZ--AZ+F7q zhemiJ*?=a8421s0Hh=@C?$Sn@0P*Pk(*T~beEOJMm%hj@}i#giUQ@J)p z8C)Q_gRAnIx0iIoJ7!ewL(iaBw?1fp`E5dwbum9?ykc{cR-=A=#fca=aG8D~sJ`CB z92S>N5(%sT`l4cW47W6oF9hl``LPfnkfQ5xZ9)WHf@Er+Pr~?&R#P=jm{9N36n;uf z3_-}5^`2ji3kUH`EAFnG?;T!V{vzdmE&M{`NjNY4-Ww3J_w{GWq9dA=_S-GkE<6H9`$Ux{wRSAqp=lbl?7J3~*3*YN*+Zfrel z@Xd#zAms}`t|eHW);D_1QXo<mO*`d)S- z_o?qSns011)<1uUH?thTpYd;^whad^tiuVw=lGUrdvdD6ZD4ywYqnWYu9ux6u=ShF zU_f?x`7~Nvtc?UCkHFK)Ika<>5qL>wo^tvkiF>A5C6jw|bPzw^gZidWSI+5j;=y)q z8PQG|Jg0QxJYe_WR}IG(Z0M+$0>W?Od4YAlaCCehAGZP6<691rPZj2}>~$Rw^Z!DCNrKb55BW!lCgsBb$C0 zdbARW`aev4c|26@`~Q7r#=h@DOtK|~B$Al27L|R=8b!*M3R&h9l3n%?qt#BfY%$1^ z2qk14*|YEa%=h#>&*%60&H2wi&UNnVzVG+@THaUT$^f;rLq26wAmxS>4J}}uhKM(j z4ld1FDodK_djH^Np+*161k>KeriL#^<5NQ#e!6esu2b$(&KaLOyEf$6dHBvCpI~@g?2w#t6e05Vrcb+0X$Y&H=|`_@Pyu+I6_`l;shzmyyDdF%rke- z5jq20Ib^SDe(|O$zJare^1ETn({;yiD05C|l|_!6RLT9|;Ps#P&%)haRqO^lTvPj2 zIh?qjljmEL^0Jr{Ke+#cWKfe7(V^x6-RUDF?N`*RjGmP_kz9z zu~&!#SRInSm2`w-FuJww?A2wte*aQ2h6vVR6r#LIbO1JlzAfkEx zmHJt@>M$!Z&)JpxTi{+;MBON}qU%t_2SjH)PvD@Xc@QlQqL#nlZ97ur89WZJXq@86 z+YH*rEl$!76x7YWJyYiJ*2~yZG|72?lpXlO$MW=C9_#U{qZ2PE>azkdl&(lnTtmSX ztEa+1q>b~wDB-+5F)V0ijT9`GHF<6H=Nfsif2r>MkaPk5H`#NjOwP4_QhYm^&gk>^ zEPtE5rLPF;{z}GwJvfSzp=O0Bl{fP9IPy7Zzv~g%*&x&BEP8ZQ_eF$l6WH*H`#bFw z+ZQTK&WKkU?@K+&FG23HSNVP`N`gbVY`ne^h9_r(_wAW~E7hlwyh$=F0I|D@T+Xu? zh-QdHj)^}%b9rLX1jWMzf=Dd2~-`4GB zG~p|jPIz9&1MUvLFg${P;rDyDB_Sk5^_nF`PRnv^#C!6D$IgN<+0_0!SFzb2^NPQ; z1Ni{e2lkBGy5@{kE<#lrqtzz8&M@5WJ9++;bE#@BZeyE2-Al0HeC_uZv%TEUTw3Y_W`{(OuZtRz1n_w@u&T ztlgy;(Ezpis4w9_?G)SHdozxF{FjGy?G&+^X)G}-tPbVX>e8k{&xV~@RkNB8w&Hi+ z_SU6oHzn4!*{OOCqd%%%?3MPYOPdyx3;316bLbzGUQ8)erzCP}TX)Gt*J%5*dYFb7 zqmrmMpqw3GaZ2$Br3daVlUia!AenP(Pt@ijC;c%D}OF(6J%yAwImSU|mc$wYtZ#DEw>HG<0ve`R&M_|Ka~xc@?oT zD-#|}8r5m83PN$~ow8JeOxt#gBlchAhy#cq8fds`gB;{yQyGu6=dgISsQn8bt0CuJ zrOBz8uo8_^Xb5(o9DO6=#FKGJO9jo#BU|)a^^Y|WL;Vo7rE?^QinIO9-ZMCQ_=4R& zCGoneIqC(ceyNb(cCD}H8n?n)XHtd7Xlz_|RMIwu^oLA26lp@KV_Gd#He$_|s=lUw zjx**G=e+S}6hT@V_1zEHqOj`1D3fMk;-cJNJ-!+C@!-5FviwRkM{U-k#`iC!stXVK z)BS%gjC^7+6&n9g$SV>4ZoUqAD98I%gDy(g&Q%XuP21$hys^6oF_>SI;#^)x52Kxt z>GPX-uG?G6xU&~j*U7JOnD}gT^!=UuBTUoHTfNk^T@q=>{h)d4FQ2$0-Wvfu7TXt3 zp#pfY6%Egkl*d%+4lf`03*Z^hLyzY2b(B@#`+%l#ium@ns@X@^VJli#m?KrqQ4qg; zOkr``BusCHOmRI=Hl@PFiGe?AF8s~%MIkSFASL$-S0mc?{NtS9)k~EAW>(qOTVeQG z$u}3_R9fxx7@wG7p<3HNCMC5Ed6Yv}UY+63EueV3`n_bfVQBQJk{r$e3o~5*mw1_$ z;)UpKKY4GbKX8pTDoh>1-jSnv!Y9uuGw&S1WFw+&n+amX4>+x|TZ~inf?197&%x8)lGH)wV>36X$h4M-UiV5NQOu2$l|C~V+_$tso z=cMZPVY_ohU*d9_KYgXseqL3+t`dDR@Yr4Hlchaw*Ms+S%_$;_?p-W#d2@xn`fCQu zyr^a}FH~_2D98IWD123| zV@|1mQ&c9O+M4vMIb?-q^>aq7sxlO>P@EVbjA0+=Tug}sPK@jjjr4bAn0c)B#iD8u zI-5q%VgJx^#hv9w7FGTzlLA-C6dKz-%EEF6o8dd%7b3naqb6#D~~j^^j5X&mlI#vSi#`|IhfUw+3vs6CGt*C6#qb za&2cB4*{Vqt;mng`FM7U-dxs0c1pm`X!Pr;aAZVF^oe&8d(y~5IXs)O@e*}G`ruYv z>Z5xPD7#JK23RK#Gf^2@DxjROvyqE_lZfvZ~PH^qH& zW)z9ffdR6|^q!wtJtIKu2m()(;c?Qk zFp6~NN#-8|-edA1lvSiG(?Y8~vo&dwG9SI$Tcuyj6MISi=Ca=vpbki6Ens_qlvt?? zW4UN9Z|X;g9Yvk8hUX`~ctZwnUcA@+qrCgu9Vfzk(R+)h7az0zo{N%2(r9;`Y@#&3 ziNVB0Gw%lHsfV)fVJ?R7vK3oXFw!8jDU*kg!s;Z9T}L@ErnU1Wm+jxNICy$`%EsP* zDP;db`u?4@XpaQtR5Rct2)hqY)UO5aDUom$MMVIPvkBOle2~V#Isp-fLx_`m$TgsL zp@auar+I#pI2*WqMNC7Vh4|gG(Cc-yQ#T67pbg?fN`gX4r)f!NHUK0uLlRZ&Np2FDMa!#{42PXyAzKYmq%o^xVCYgRbxO8}F?dkoB_d)?9 z3%hrDB*_Gu&zIvRJ}jN35n*-vwO^hpdm}Ve;>#To-fKVTA6tke%l}XZb7psU6c}EW zoz!3->@?rWrolRHIG(`ASdgElOBe56_=YuhIsvN#smI8LunHsvD(?S&;C{m{lNxbB z_p*Brafpo+5Y2R{-8heFmzb=jgKF3EB-+vtY1&b$ zIedRH;rFQUjr&}4_??NLi*eCs$MG!}>fi(k{a4->vDWZl;&5Y1BoF+=<Kb086af=9JA#?P(Tdb++dl1BK60tCzGjeKGCAEGwBeZZ%K3Hm`QpKb7P z9}bSC0b3p?iR&fY)qQ7bk2PClS{;1`Te;si;@&PoyfRCMjPJAZ%6~P3d;UfJfU-f^ zir~ll@ykDdD{)bjY;yukaDY%s3kr!enzz%@(5a6A4r-;MF_G3F^i+RP+mfJ+gLvMN z42~|rFjz(a>!gKQ-rDuQJ1Ep!_c=jCZ432*EG}PK-LixqSRmg`(hd8*D~)V7{i4WZ zOITsJbS!*Gqz0&QFaF|I%$=3I_&k6~UK&?bJ4uD(Q;K|kC;A4td%&f&`QV58s%3=D zlKtmbgkwRf9K<9{?-N`gQb`$zek+LMPc!Rhz_o5IRxer4?pRdrNsO=Uasd9G1b6Pg z^GX9!bih!#3x9v^Hs#YDLHE(P{+7?<1M*N&>cle{NRQ|dhR|s~(+@Om+8XfiR;oJf zY$_`&)g6w8+=e_E?emc5cxVcXP`^oIyAIpOouETYQ^G6F*C}#kBXu9iNl|s*7WSPS z&-da31Qu#X>d^m2%xSbKLF_B2yjikG6N8LT>%OxG_WUXD@@uqtF{-qECAIhSOZJ{^ z-&q*6VP01eL)y}S{4%HJe%`_DR>cRigXhhtFOt8oB1Ie(?F>LM%E3#K1u=N+qM}EL zyZ!T(kkr3&^LxrR$GsGKl4zZr$L5}hJrGS3rGjf;Q^E9CBqV{g+}bS#=Pun??8Ff% z?6HgGT1Fh;Cz^mFh)3t4ez*gtuuo7n&dHu#WCRomU+gXW{3g=)Rsc%;vH~}-=3Rfg z;1_+lsZP*m?DX2`bqZ5){>03gEmbe&w(u~WtaK_-7wM>fxhR@|AN>{u^Q8CBoOFs; ze$A0n3A}|?P(?@K2e+esnqLY{mzTP>@6(t)x?wzMz}qeELU_NMjl%gHxw0(hl)9ob zv+2gv?cl`FwR;xA3SQ5km1tTLqyH=3AUtH|kT*7k)IO`wm@+t0UflEIuw3-{BnT~Q zJ^8UNbm**ePu7Q}R?0IP*(00AA6y5kh9CHORr34yNX25G1#3SL(E+7=Knzrrhg1z= zaFVFIFxYyk*v!G?E_0#b68qKkyH|0FmjX8<_`f2h=v==Pqq+WnL5|HP9&B_DL?>K|dOpeq^Vsg{nODm*vQDBz^e)&s z2tCp>oQTZl%wD-gZS|~&Lts^-mEXj_*Y@+0YKPncood6p*m)MPt&SV3IhI1Js98~D zrRXu(dt##&bdngLz>acv0zeGs@2#e8pry>5cr4WS@~H?x_8xg@x_EA(x~BA=`tJ zk{Q#j0WyOG zp#DCL3PR-#i(R>OO5+F=qoWAP4_SD)JYH|oUmf)%u{g*2Q%;3`W>UB`^A^Id8y59GWtd%ROGCq=FALSFiq_Kp8Wkoayw8xY202s=(Xw zW`ad|bvg@0ph2P-BxNp8_5{}uTGG%-zRBbYzgtxOXGCF`9O<6oCw)jp{R*u;Jbz}L zBaCVN!s99&P+tCcyiud&8|!Gx278%`4TgBJl2=CxO(-khEmZ3ee<|>T;VufxhWe;D zkr5XBi%9*LDMk_^cDLF@m-1Kgr)eAaU0g<@#pq88<_Fhu-;z6$e%8GqTlu&tt}h;W z@*wIyOUg^V-Fp;IN+o58;#fraZT1FZ{m?IDk<lgmdU>EX^K6zGiqbJ5WaDXuzv0U7g<1s-?~uKSA4*ooD%lnLP< zd~J}idLlgFj3P}{Q4zQx+o^cwU^-NAD9m{^#delj^A@4?GOIacxfaW;{x~k+cXFYn z7tH+7->D5nD2d-yu)617_?=X@5~$Q@$g*$Q?isSGp0L+>Filo1CfC=i(KPJZxY8S1 zOo#FJ(W5(Jd_s3ZeRAebPj!?&a{hR3`j^L;-9J`APa9|5eQgdXb)vl4 zHiAbfCr4`i_vVcF{}g7^vrcp!Bz>~Wn}2e;vK&qFtE3GVp>n^S{Fq{c2InsGFqQU6 z-wLj5;sGxo$}xSQB_%%tUAgW*MFUT1aF*W4@Cw4ketU%$>S?EZ>e=sWP<@4!rRbbo zd=ppI*xs$vn0nnSX4h2KHbwL2!C$jIDH*@WCq!eeG$&r&F2C#a!#JMiWFBZYys3cO z_}yZ)<5?gfUE~MprI&JDg+Y^P^uq3cZs`sG9wD5Xd(U(u_kXdQP?Hz9~WTSyJ;EiDAGZQ{jH+ zyX8I`Yu4tBu1f%W2+)F@qaON2Am*gq@qlXY-djAs*dRd@P+ed9l}N3bDR4;dOqSmp zVW7xG?f+)<14&iVt&HnBxqL`ZuF=1GF62hMZ{gzv9LI4$Swp-Szlev|JN?$WMpZ>U zeYBD<%V3W^HsB!ii)8(n`g-5mb9G}U@70iNF1dd?t=>K#mHM%P$nE1_RL4X~ zD@n`OqpP4S+ANf<#0w+*5LQb7?TIBDP;47B69v$(<2)yVra7ak+>y?pN<#ATMMC z7>Pqv6g7vA2l0<-=S=?Hjn0bIX2j!3c*u1r7bs>*0E|h2rB4z)9AIC!O%bZyx`YC< z*EtR(^kWp*nGkG1&CCtBKoqS^y!6AsMEIm0mx3*d=tZYKgW^gAQIXHUZgGRELP&Ya zPM!4@rEo&2{NT&)<>ti0H+Hj`QX-IFv_RhJt))RB?#NGSL%@jI5~o*e1|_C&5l^9p ze4@5;zS!`XlG9RIRcA2FJNyybTtXvlHl2eEL>E3<2}Eb4{%@JLo|`kCi9+n5EwkW1EmOz3ma;Y5*10NCCc5 z3|tJlwqEh`jZWMzD|GoHd+07vC_Xq_k_)w4we{>GL7=_Ct!oDVr7~d%-%e4R4&SMh z8&WygGn%=0z_fko*wLfoW!YAAFYs#x(k1$MtzE}^`|rBd7-D~#F%k?P6r{q5Pt#I`20 zr{+Q7M|twaYu&lk^+P<-j|9Bnnxr91m)uf}gr66Dgs;^~^a#?s7AXz~3pW@fg{;7PuFKLMiJx6?ErFhLQ5%{|ZW5cW?2RPR1T=slLr|^|e zlUOo%&U~uS;IuzOaddF-tFhf1_&7Smr9{aKd4;=?V5ES{{fUv7(n|dScZ8PzQCMA) zWHmRozpr_VB4O1j8W4DbHIj$%CE>I5LKJwmb8PY?aqb=?@zj_~E)@`Oh%7;xJlk$b zRi)4^^9>=>){~-x2FJD~q2=l)KNu+W@y86`)o%1&_dS6oc(DH5{w}Q$l>Ppj{m;t- z=vkH?U~7;05}xM>oVekmD9*;mpJ)u&x)42`$BztOr{<%u!ajQuG}N|87c1Uqf>~w; z>lJ9xgSmxIrMaX)eokbQrAyEgnp0>6W(S3L z8sD~j)aiMYL<{?jUG4xCCQ``syo!PZhSCNu@UB$2%ld84{M70Ii3Y!|oe!Onuqw+z z^NZX7Txq*i_csdP;%^e2Rx*yQ5>|-*ULyyblrJ3mnwrhxPXd<3mdwl zIW-=iW+uGcDaX!b-IZPwbRkYP^|WWiQs|>_p>?tQhr?xx`pTDeo{cJMMt^x#dTqj{ z6NAWOm4Q}FGS(#igLr9Ug8Qu>Wqc%8q>D;v$od3`I-Ue-mumN17j*y$X-9$i!FIo@ z^5K)p?@s6{U)tAj0NW^>1};IAAkGd#X+btG5~5@TTjExRv@5Bk^|`o@sBt0bdZqqLJR+~>D7)_NB&4B1YnbK%Aqz|luuSP7|coc?V(J;+wE29VBk zp^mvy`9;;;>83R1Z>k!9%sTAvGiSL^nJ?-m61TO*!jQ{WbxRey*D@rvVm0{i>1K(W zSkmDw5%bGt$MeO&2k@k|B?J3Xq3ne921AbN0X2ToZTe}L#+$N@(CvgD^JOMzDNEo^ zc#E>WmZEIAlZl)d!b0j|k(VvCpxCsj@(gLaHE<=~n%5j0^dr&720iW8ukUQ`X@@ZhRL9)GkNtyH8uT@WDDU( z_eUv@7AUzoWXj23d-xXqbB*brd{g|1sro53-~K^K=rYQ1wFAxfK)a@d(VI5D9%xpY zqGk7AfNgB9Qb>#Id0jL6Y21GMT5m1V#4Z>qbYn!1_r1h4@dDkf)^ztP6DrsoB=%Ie z|KVW+cj-@aAbqE)Rg{KbZ%_r2-j-)Sy(Rg$ZBWkE({3E{yRy8IWE0?HB@7t-`LumU ze{oD%yI-%EpimL_4cG{&@J-15gRuHV;zx{`FUm!MYU{1_c}ZQafjQpZMQWOdZ^F2e zMX}D|7~IQ!{l@aOj2D#aNLcX0Dq&b@!TMMHIF^NgKS<3`%p0!zi}4Y31hy!Pdo+!z zo67AqZ)V|*6Hf+Psk53OiN|xwEzfsO(ErgfIXIK_PXFLol)&^&q^>@mgj5L03gh+4 zR!x5^tkO)O6g56lX@VXDXqr~*+mqwLa$9E}P{!sFjpV|>#)Pk0$3Nn~<$>(K-7&X= z0k5+6@(xlxIfAoz{KI4N?D3xbLRW^qDD(EGH2d1a)VxqpP`KVlFw-QPz}bQpIrik? zhlQtb{QTpxW0ndq6SLl=^yTlm@e@qknDG}Mv3`b4s}={8@1|pv>BkLq&FH7!$=xo; z>4>)%FBFh1e-gj`yO1^b{hzA76O|U0-zPFX-3^@ukd;a9Y%>8|5Xn6^;6Pa~Gv?i@ zPxxuuDRS~WSK6F@Xoh{&v!1QCH_R<&sdcN;ajMUxz*qC_u5g9-yh z&vQe+miAa28;9K$Eep~D_ym^d!1CaeLZ>dGY3I468alUDRbhI5Lo9WCdpPBjiY57N zrBOjH0~}|J+$yh`Alp6Aud#XpnnForwD6>qYyWB*?W?yBH9(1(r zJk3!Sg#qYaij%07eYLk3n41NFqXDXRXQLtc33TQEC&W3cRopBlXdG6tS|26$5 zWafDPQ;GpAZgUM47Z&XHLtpM|?|fj8fQiwj3@{ytdb)kFIT74OXVYdqq)BeDm)Ty{ zy?nb`oKdfY-iC3;w`!MWW4-QBJmn`K9)HRX`VWgSEie}<*S&yZ#dH2SY$&0dotGaB z=DGzPvUjEDpy^~byiSYB>q95&7t#<+;PhwvKhAbdwcTK&+CO`S3lQ#IEhGi=c3tJx0*%5D>rpP$Gr&6hjBDhIyX*bRPdxF| z+S1Q7fXh|A&}-zIafz8c>TNt-%%^wj#K32YYKec-6T$@Yv zTciJSv`R{m`YJ zqHwCQ)^Dc9;#2JH{NL2PcCO%s>dT#z);n{)k@R3{=Cb1FjPkcZ>F$vyG#xc=;WMgr z0ny(bYpE@Ztzd)P>p!?OyvQYedl$ry+;Z0?u|v!)dlz7FRw;tb_P|jjQ*{^_Pa$ZQ zEW2pE4Y+~%r^{@Fi=Z?MD84lS$zhk>o*qRFZ9k@G>&lh+X?BeI)lsKD`+JLw+x;}X z$gI8BQ7Kad2wOel5N7Y|ufbF8WK0w%b`c~G{uMF3-h2>_R>65-PX zJ=MNaQDRJv{vA29>%m`gofIHFPGA7ZC|FAJYYtT}wp|B3cbiPq+_A4iV|yRusQpXxDkPxMqI51xc8N zx*rvwGu^ye&A)i}Px@cysh@6J5Em^2>k|?e!l@b3sCx6vOLERaFqN&FnfvUh6Bn)x zq=E`f43Gs;z+DPDf2^G`j`)#p{U+`-7L~T?#CpA&d3(-b8U2kbk*sjz5KGKWpdHrH zKVHbd5}?zrMze)5D{+K<{D4rgriB(dAk_h-{f-BP`<+OO5s5UXg1|4jJB{$c%m7dcDT^@@a8ac^dv*fQS1&*ZRv!Dt%E13U^0>mW+s8%2q1at|1xKzwjH&dL5%F zv@28>Nb}wVWhN+Ma7V8kgjw8&jfhw39-Xi}d+#yAGPF>( z=I5CS+BBsJ_{-a~0@?1eO)-RF&&Iy8=Y>9hIPsr`S4^*$C#GE z_e850BS2y}W{yOh_}d*(e4G$AlCEpXth!zuZsOWTq*cT*0(WqC$>O_p%ak~X$W43$ zdVh|+Np!7zm#R1PpAGA@@Cp8pPs?R>8n!Q3IY?a^ifv!ZFCGnVx96tqH;lnwoDXaB z`Kc9s*naNhvw@+~m1nB+dj-Gh_?q4R5+l-S3@+S-7K2f+B)hDa9%qPm9KaJIsLtLSvna zv`lga%WK$_I%l895??w>s8u@SWkWJ0aukhXShZA*&IfwcL_&(!KX{C`Y09T8Dy{A(i{| zx0fqI@0q-(Qy}c)BiHhok{GM5K2cM;Nfi#vh|wo7;HK-b@K!3rOJWoZt9SHa$_ytzUDR>hP0*FnZVkWo8K2z{Inw=j`?SYXTTFV95gf_YvNl|0ogC z3US-1_}pxi%u<6Ja$q^2I8g*^b~8EXe(m~+S4@Ru$FoiTmaAU6WWibfU3D_fN2=I4 zse^(WK(hQ@wj-n-_WKDkQ7Ab^#Ay`G6Nw4yNadKB3?5EqF z7Qze<4==3Jka-{yV^*6dc`Y|!eQ9jpzJO~r#fk^06#*&En-!lQq7h+xMFkyD$o25? zg}0&vSqNwV1T{m%!(D?%xCgq-+hS!zZ>Tlig$QMPmH=fdA6SMH88Pu<+dPRT}}t6@5nj+XPH zUgk*cy=wWY%7}Ks|Cy{{oS6iW?eSQFp42fZ&1rCQfJu_vRx2wUwi}jeFl7Fb&uo&X>18 zNIQAn`{rivcJ(kFp8c)sjQOz}9jbR^IhX%=qbuuCpexYntTM+)sKleUt05tcUw_`h zEk8m78^qP*kpbHCaaZ7>hy%|ND)+5VolWk|0@SdZEGWG;)7a4x%DPI@KE;VMVCjqL zA!tWe$6sSSJ$_DVdSF4)zv7-O5IM^=^djrkQAmdikc6D-gRTG&k>4a+9w&a44V+$y zwj5Kc`)d&;4gbyN8)XlV=MbFPwZ_2biui56KCO6i48kd-7L1;`$1gccO^a2Lo+YeI zkIeh;vUqB;d4aoEhk=8S-_h4 znxh*r+rHeB+$=Z1Av#k?n;s%mT74D;PafePco_8K z{nZ~ODs!rM8!kT1wNHp)s)+BYildghV#UWb&v@A?5NSbbca$t>HNeHnWp{3FPRhBu zy}uk?XLMuxd%@tQ%|!krk6X89;T4+~_;_y)-@|C2%xbNjuB`^fk(@q(dg-$W@$w`K z%V^o1z5{0k;@8hxH+hKqw^_i~R3@oW}4Fgl1NM+m91K4-W zvmrkh+BoUIz4S;a4t>070YT4MPy;jhF^h%lq|rOTR*f;cgTUi*H)TV6;7HCzweHW; z0slH4vP??RgK0ik@F~2woe@oBUcKt=l<<#-#TAyc*g&0qK!#7~9W8OKQfVgRXZk>t&XP8C!w7tG+USj#5!ohs?!o0YJi{s zxu)%CD;@=1ceAb~|XH+{bjJ zKb7V};Iy&qa?956j#I^s&M<*5f?-VTw(fNRJi&ZmAQa{;pm9H4A3T3~Iyu6GapZFC zdzCfG%wWKPrU&=cvE(Z&wR5*<0UNv__nnm}ekI24?VR%De|y5{(NR($FG>OsFQVYh zUX?tj%K+<=A&<{$-~T#r<91>G${j#DOwR<|`SYgUYJ`q@pQoIhE#g-CU}A*`hip6- zPiFu>>Wl)t8q|&_{M`wH{#L;D?oq&-1i(PG*OHtl8~lC!n(Cf$zv46-3Kq3Hi3Xhz z@yhtrg$t`Vi-c|+sH;;HVEa5TRLWq3(kF=X5lr5A_gZWUHixRJ9o6+o&{S!M2Hx$cKzwVF7pU;vMDOLylZoRhc9if z+0EgctHx`dFO@H)dly3X84epLOh|*6+T8Ch7&rtxg$N-Kfq#UKCEtj=yo|)Xc4jB$ z=2yn~AfoY`!uJd|{u@81d4Zxz}r0XW#Wd|%^=|mPuCXtiyO6dd+Cc?4SYhP|h z%~pG&+Y(w!!$SZ!GaAQY0)38zqlC^shp@+w&l#|9`qyhBwVN?V05$9y1r%3xNADP3 zscye9-p9x3BZ#ei{5tDroOisR*7qH!^H&Q|PTipEu!+CtIi>Cd2p|V&NdLI_X%uYo z{pV~$pAG&%%bUwRL9cuEhhxL4s*rkc%uV=y-0efQ=UAXDn$OdcR#;s9V{xlzt0gR` zlVE0ygbFl!1V#>> zUvC#bD$U`oSYrv{a;ahI7%?6|>KySNkMuW&K;|FOzP>|X@e+Vjo340b2nFpUzHk+M z`3O;3j|XsyDq*oxHv8$-CGm2Xy1HdR&$#Nhi;u3Z9RjS7*~5cg_w~T&#$W%w>N8sd zZ_(w%L5f(ZEFg>*!@$;Kj=R+H)M!p#pBsdGQTK!Vdq|dS5i4h2)3g26m!g=MS_i=@ zOduKAWkJZU9D9oZjKBAjRfjc&iU}BM_q|~l^;_#O%|Q`cw4y@>%KR%3C=>&1iB=wKDJvN1H4r) zEe*X~u>xxrkFv&#(*ZmM5Yv=FQFC;8&!vzw!MeUVuZTJ^13`V~-B-dgY1ax>50pb8 z+Z(D+8^=PMXn}HEO^HzBr@zjS?)UP1z~y5=KWEW zM#D5velQO_j3RJvQKRd%+e!nwz(up^HamY7;u;oSQ%2=HmC2To+;)p{uEH%mYX*neP`WE zc|4@8d2zC&VGGgkc&T@qGULSv9;{x3;0neVh!9@0#_Jo+REnzOjQo9NEKW@mTYHs~BL_`}+XUOqzb(egq7%5_cN}U@|R`hrrL1yFl-*x9HcMUA>76FqG_~0OVNhDNSP!RrbWHl+ z2$`1wE&}L=0hq4iwkZ5(r~0|!ZPm!G>8n*+e6NtN_ zYjykh*CR%1*>^YJeb*5Ibqshd8Z@!N4w&)ZvZ<78zirMnqO|=`ac}n5E$yO5YIcQR z{{z|*nj)jVdx2f#mQQw5Gn2{~oXf!*MYnTq1GJX!&VrYQAQGHY#IvM4O*3fW9KXY4Gl@>8tW?A=0>{J>1d z*`A0UwKksk=i$*ag7{T2+3l1A>+bE!*Quw$QXowO0|b^eS6eYahZi6s))5u^V`Iy! zC}7!Wy~G0Hlrb_lE~@vV#(8*Kh#l=yv^Wf?`W4(ygDXdyuwuoeS=RbyOKCjY3c?vW7GfJ zYbAf$?U|PU`2$;0&aQc!LL;4>ubox33NjsC3c9j3~xDbd$s#UNLy0=+D z3yL`i06w+ha?j_?rVpr^r%XTu3^c6jibR;}lMw#@6{5=vur$=>{Mr$NT-&bY`7*OhKu$w{EeZ ziH}Z|UQt7YXFFg;RE&rkH2nm3oHC?Dn~lm=pbq+S(ZfI{ZHkG>jFsf{B+*Ej8j3|h zXT5N6Cl^&NBKUN8xk@Gp*zRVD+HLt$_yP`6ujR)0|D;C$??gln3;cGVkYUihV@i@U zMc8{^0DK8P_;9}9Qjg&lX~*$4L(}%#Mo~U(mokC;yS^iTw0%NK4`O>EQ5O9_GGk<= zO8_S#NV9ZZ-2(TQ?SZ0n$o9c{yQl(V5W<)<1vD+m%kJJjs}G_;1#mxXb2@U9Wn>!Q z47u+8vboEo&|TYH(p=E68B=jd7Zs7Y5Zq7wp)5lvOj(h3O6aW+R<$LZwq}?+ z+sm7s$FgAc_77V9^(qAt587?6&JH>DuZvrra_qHfZ5?%p;JF0Xj=Qu8`~JWX@6$0A9vZheLeEKlDc-wztf zM5eUCRN%Q05_4JK(`K$z>N)-#6cj0Az{R0hq{|b)>64pL2r81yy3rW>zjGr(JD`xV zclzP*m4%-38sOPNvJ|@K9g9bbJh|blR~v>K`NwA>dhdl?yT;wuEUj;^&0iNI_#U&t_-r)wyKAptMJq|&?EVVYcpEcT<)PLq%YZ|`D>*fVCaj$Jb1Zkv9gF{yBz7?{Tgh(;yWVPM#krFt8 zJ7e#uIAVoxI3vC0PgRPnx0bu*$wm8e6_c1vvO2oDLiKtMMz%g95eZ z$Dyhh7Ri?szc*JdGlL z#()P9Tx?wzwEr?Hv2QcyOqFrZ1!t%I722~?i-%ObjLdI;SITv*x$|LruoB2zK$y(4 zGXY{~TxSH$Sms}>T>uDg*+2yH;TWWAmZN!Y(Axf3IM;{_^T`EZ&dGm9bLjL_NQNO+ zC|NnJiC0LLrT+=6&hSRB)Q{Ho80~VRZ)*%}r2D$~88G5w>tX{Ch+r8D#(nI*#jm>8 z>DBNrmEke>W@CMrH&;`oT59z{83JO`JP>%vcY9jk$Fy~w{NAc{UEgERr@?Qhg+f5y zwbrdXqr!}i(TFYa(AjWrIxG^QVjKCJloVOopJQN${vtSDaeysE3;vBXlsI;d+R%dj z0rJO{Tds%YkU)SGVC;VW>og=HTZ7Onnruh$V>egze;#~334H!c$Zf0L)> z++xyG11rDoo}~e|y2bci>=W%ePRuNOj&3{LylG`=$4~mmQpdlzdr;Q%t&o&y4Txev zh&~#@>NvxeTEWhILO9Du(Qfuw})h{m%)57eP-p<&YQ)5;GhT zK~+23B}vQ|%O9*RF1u9+1huVHy7?6s7oRMUF+A8XWezF-@HHz?`0FPsusi;>L+Lzl zYS=y(zoYi{JpRWlqA)Pdv!NM~>ATXq-$eSgo!PAN)YDsN6TmzT9AlB5$SWzA996FQ zKbpS7pUVIJ|2~6r>^-t)RyNtrv7+os$V^0pgEBJCu}6teD61r*kgOu-5ZR*=Wgffi zJ&$w$PVdk6cmD_1<8|HFd|uDzvQ(&-2Y}12@W9=q{KRE#(zx6IlxPfc^g@@1rOH%9 zTLu8a+~+|B;H}W787?TxnyVUmLYqP;f^ZXL9ljn~h}x z7iFii%iLC0P!OlNeR0d5`#RMoxat&{{`BX)LPp=QzwTqTnM7mwgPc>`FIr{aa@BYF zueN8TV`6YTH}Jm}c!Q6~cCNq0&9jJtXIeSM-=vz0(E6q(7Yq5`L%)2KEJ;x_YJHi7 z>>VaQDP0OVa2)uekrx(m;PjV196UT~8RQy0_!zRW5i+2&G$G6_W(^cs?6z5nxtT7_ znS9=w#_PCfrW9JPmF{0TiENJS+p*Ny7W}QQWae5#u!`UyC*tpA$Q zw#Cz*AaPUHp?;!N8-UdUe~cSdHX#4hV?Ir70wkiAWfG9Y3uVduX)_PUHM3JDzentc z`sjgV;7``T9u<&@Dk|5#xCRjg?5v^Q1WoUsv=9!lq@d8JJBEq14*=pRkZu#O(U(~B zLoj47Y(-R9cn0KBFl+()*A&bQfvc7DJJ;sYt+qHQM_4+05t61A!2(VQ^{4o)zUxri zgnV%tZJtXDFT6;(>4SsO#7`*R8KwK(;}86%Bt<^5rAVQoFGn&kOhvH zs0b9c3|q9$;ick3Zm8?YqG!!FF7w2476{=4qHiV!Nl*wth+-trQ5 z;F8`9Q{6mD(@O?Ottt%h08uvjBPa0G+Um~Dzwda?wp}Ca{bUAwX1d!mUc--Qj(&uA{A}8JZ81~7Q&o4^ zv20rzRmemye;DA&(q^ggYh{TOctUx6WI7VSETT}2Flf*Miw8Z6TZYV@8>S;%heSvwcaVlKu~*Pp@i^Bc?JdjV z4fK^Qx?7F;?#QW(s8S&mbAoglj?3yLdzlRM?aR9Lb4M^5Xi@HvEZ~(|cAX;XavtM6 z5;6H~b+TdlN*yo(*}84P{^oQz${X)rKSK3_zK&cuyl!g_Cin<^;{APpmTsWILAN?+WNr-)MUBp zKt>o!I4YcYtg!Gcb>jtDLOm0!`d+1Y0MG7|h34keIpFy=y?kBMkqv zN?=?U4Ja9F$RpP;9uFkw3^r$^e!O#@;gJv^Y2+@&1@n#tk|;`{Zrg@TzdRse ze{o#yH{x;HSBAFu2(9|)R(CEtmZ5Vn>o*RZoR^T2T{yw9R$l1i=Vd9>7sY9C^40}^ zINtsK6&)m0nNE9n(NVvoprJDg{1;u`oa&D0(x-!@4u{{bmZ^Rp>d9V)Q;szr$_u;u z?s|1a>XQQm9tBm51>0s~gK+tCJ3E@#@(l`l0L3Q&wWTSwn+?$(kCOzJWxAT^AeehAJfIA^C-Ip@3%d&RlpzopXnOv`5#X;7w?M#QE3?2X_e*Um8!zP-9O)$EDE&k zRd5q4T}+WjA4hApYzLUe4W}$n>y-10I@`*&G*3wNh!YfP)fwo*P9JEYX=R98)(*Ld z8}xaMYi%clu<^QHVW5)kPrpI^nS++n#mP}${mqY5XNktm`<--#gH&=azjL${?Vhae zQG6OzH*GwQ&|90R*J_GK((QcD=P-Q;5E-W3D}yc;;w$b&DK@t+t5t@F6||V@Y2*&} zH~Ux7VTnI7@C$;A(lY`xG6}QFe7$GUA{5||!XsgT@T4K?jrj0=jo&|m$W$S*Us@N4 zcNh14a#v3Nst^WQ$=bBIl$4ZY1d~8SLq$c!U8-*6^5&C34%J}JcVwbVxnd71La!%>2F@GDpg4+l+wL_H`3y$+U$ z0oM#6%!^fL3)Jc$!}Q$3Lew0Yx>(J2!5dDe!M;;(_l%LPbX!_-rzWJB4;tN}HM06N zL}duhhY%mlw$bP&RSv|+Br9jfXjyx_?>xmW55J-3b9Qplv4#Wc0*?MG0EuzN^62%q z)8oCS1wu5;KTkJu%)iUnFY=GqNa$Mm>Y}Mh9Q0b}^V|p6W=G#&o6$90 zPdPlg(x2}=b?qrWBsJNgxkI1yhz@_n^@s*D_#s;6IR((2)Alc7DP(k7X)e^_?Vj-K z-eu<-nY3p)X}GxE3?UH>TsW3JXmXPt{hG>gIy`NlHc&|<(? z7i@^)%H*^~&k(0NvGAa2J?rEph{gZ^e@Arb(?mB~3j2?*OHjlD5eYQfS*=!YJRtw~!wI{IuV;`NijJ8+!8-%K*kPj3&8Bx`vmYqAZh@+uh1gZtbsz) zJeqZQ;(je9Tv58EaE)z^pcBmE@ihI!Ao$n#P`1q`3{oAkF_nLga@}jFC|7*C;v=^_ z#pHUK8R&fp;Gne7BE_uFYgt_4^52c4%#B>xpRN75hm(Nr3T0R_cnU#3M$$MEKT)cQ zJ1K>pG&oh0{CP7RH&R_Ioa`z8_1?=k%C|$sEx-szwgJvPU;Iu~3Sj)_H^(Pfl2T5G5NC*SJw&Z+17gSSy=qo$D;uHn%bI#om zh;wCO1!_I!xjZ}21YOh_aWSzxTN6OYBh0+$2$?{$DA9Li&&KCfU(=-u#%YiBE4@`L z`O;nT@*=wf@6U?3RQez#Ooj@$Gg=g-^stPMk6359-~$y8Ah`B;q9I09Jy0cJq2ZP` za{XKdmM}S}d$M}-@nG(FMJh!b35v~EU}d^9UcdH&(mq~>sJ$auhsXjwE`>-Y0&!u+ z*wTm(?ZFI$N>MknpQu6iXgMnL}_)wWr7}Ck2x>IoyrYLO8G} z(>H#D%kW?dw3Ia2GOTK3Qg!@Oz2K4S&j@w=&w+Y}}j}z1kz}&(jJm zVua$9A!h@GT<7X4tXa}yj4XD;9*9wDR1ys$OT;B`Jb}6PJdG4i7{G|rKam7-vOIKQ zwH?#*!#AuGm?J;!$WzX?eR!)qFHW;+q2?Sz=r0e9K{dDKu!}08fh?zkP(U2l0b^dC ze<=D0ZmWAAyz-e6D`w2dqPgRU>ky$_fXkQ(sCMtpSTGTnv;|g+G7>~j)I8?o3b}kB zL(dS}fG{;cSrN)36hw-w!ywv+`NL-(3)1V8IK3IV_TZb5``QnHm=Er*Kdj-TM5WVn zkm{#!0uL+T`{MhEI~?l#O&@m4Z-2)LAIDWRXnBc-hGxnC6eO%9rdM9rIgVfj9^A+o zB8fqT8h>lh;Zk{ou}626s%Dk-Nr!ohydKy1>|zIL0W=GW7?hHBTLb{+zWD*=>ZkJA z&``AiVRe=XB*nD#iTctz5MbT8Idm(fYpHLI%aj_&0TfD*?m0qplstO!m~;<`H_JW; zjwJ6}85KX5dwvn+=NEF8KwQ5LT=~<<3n38bK2+-y66L86^8~MQqw2J}tg|mXPC+U- zLwN0yf;dUWY_Wg_M>@6Hf;8pw-UK*Dv*M@bbSVH>0aZI7Vw9guEpPQ$a{ObYn)JwH z;qNK`{xv8Nb}9%(rvR$qL3~7R%buV9GwFD>DrMTY#}>VUj6A~ukS)5Ljb%!xa70?b z)gJMyt6>)Cv|OZQ8hOvaiGH)2A7>#zL+o56MS!!-_Gs~&+62a6^0BC~?tCBthZyFg z9(coka7s#D-S?Kppx=lHGbXP-SyF3vm7QsG9%sP;v%`{N_a z@;q>CSu!bZ=sibzBoucABFI?`+SRz$8X&@JFDjKdGNhRF!O{@xwwXXcA-|EDP zdBC)VOE6`~1)3#*Z1|!&F2U!T$42v>z*U#R1~XPxR$ZsOBHSDkO1nUor=dXUaU)!T z4%bLm#O+ewaw#)GkZ7CI`b5Id{Ft-DQK&hlJhEec5I)GaxWoMxixFr{qr$lZgyL}% zBixkMu5ROpa|ftKUOq-SPYXOXUlkRulKRjyj)gSTe{!&aWjKm^^j%VOQ3qmiOI8i5 zRq-*DnhIKQ1A}NVx~?t+)hrd>rwIU-PY;w*PP8appyiqiaqTAEb~R)uo2AZT1#|?E zJC~hIAaM;DR6y6Xcofy>ON8d?p1>y(uTIX2E)QQe-k7xY3`yZlC0=$1C?f7Oe7`jp z1w=M8J@!!Q6u3X5r<@?fZ`1~;0}knDmL&n4PWb++8)WEa-s>1@eg>wv-GqQV+R#p- zhl3Ngx<;dDM)2m%g&%o#CYe zX^bneErQn7b8cGrHQmOi2@!OYNSbn~3&W#PD4Gja-b06zD2&)AygGU`&KTnYHE?-?djP3Vri z9{1T`O6ZKEl(p`C-qSz zi$ZL~0a;TWW+Bc-eIqaoxj{qmYV@ zW`#3D&r9^eX_i67op;PhcE&@_IBrBb1zMjK!aEDZ@UGXl?s%;%L?WqI`)LSMwh`F> z1`~Mnxbf%54F~v4^D`~lO4^f@8D7a+2uk+{e0k1ff>XEI^%JX8cINiTPy!{-9x;s449qBegs|yYk-@0)+Ys z1|1DX9Xevb>GNezcEIeLx-lNTQn+(K&gQ}g+-@Bp>03ZG9IJ+;^s_UC>Hj``Vj!CY9qIJm_d6z{r*B z^R%-aCIrC|(HLPU(3*O0wAN$e^A{(3-J|7H__wT;Iq9)gTFLLDPy>iOn&o=f$>m;Q{ z{7c+-gKUn+-H3Y}%Khte_o=cmbbA2RM%Cu6Fty#$IG-!#LZMW)+hP^EuTwUcXDqpp?BZK9(Az+Lu291v2Auuj{nL@KxuMudS&Ci03U5_Fd?Q$x^Y?_Nj4Stxiz zVP4lh!tdXBo%d=de}=0vs51Y1w(#P}6mqG0Ww!psgLU&s>LrShM+NiEf2V8v*q#v2bWHUs>_zwrY5f7eT4jIrg^iPZQ zd*43L>=q^^;BbR^0(68h=ONZ%h&FC&iIJi2J zk@LBEKAJKt>{)I96GEl^Z8QypM8sfOad z`Q30L@BcPA9=o~O&Hf@yn1$a+PyA6u&l_7JC89KIFkjV(32M>P_~gHaGW=E~aooJ3 zMDaCkSBSK+*s zrsJ;-A7K;PbJ$+TVg%Kh9qkM@?rjUo4@^xQFgDhl(?e8JdnzBL-IBwXu|qZyaroIp ze;(b4!{IN9OnC5{v4>@BAX*Sar#3cSHh zeojBUE@P8mPB{?1C~Cu77p$x?ha4BawjQiJ!|x6vhL8Ld*C0 zX6K_x;vI}y&|yf<4`nJs;ieH*@9_Ne1p0T}oZ2_6(H9_*QSk0$?Y%XVOTp;hJlEiN zUaM!!LvVecKJuU;uksz>UScb%U*4ZnK$zLbBWeRx^{E5XUf`&X!yPCx9gs(H5KSq1 zA{W)m(^pbwForHluKs4!50jGqNbIvJB%W*94d&*I>K*I0nI-#In74y8XOAixBX1qm z1&+>@eWrf$81z`qD;N5pA+{IEJFoy>hcuXbLVy9-K{V_!8^U5WHvmy@|2m&@T7I4q zUV|v3)u6+M+#leu2}KhZazW1splqhwu808an`r~2MA45k>l>(t?g$Hb^HXmjt%<9g zzz=(%b|gzWvP|Pi4%rzV%?hFJIU@k+mdLpcO!GQJ43KsLIM(41Y5MA%tCXG^5;T#C ziV|3+OrvI_WbZrOLDdV6qo~IdwT^!-jW)e5Kk{3>9Ta=w;t4WkO3UybI(y96vR?Q( zU#PcFf0KNxp*f+OO}VDq<>@iiWo;@8Hpr0CU^UxB;vtF^hzum@phDUC?90H`Z^UK7 zc;AdC4~2CE;6|67eK;?8CUWER0hzak?!m}o-Ge_oq(L_YVHT@k>h_i{JN`Fgbif_} zF$I1NmCN$o>%PFP;*r2(Wq$+W(LZSNHD8(y8W`!MZzZWn2m@}|5SXbqopIt;f1|9E zA0?{=IZ9qvVqsx9igurU&N%_&QjO>8J{|1F{_vLcH=O{1!7%DAx)<1bpt`&U!w**a zZe=sDxZ0hJnY3F6T#}BK|H8axy~Hg7lsEl8ou(R?qr!1sp1RgFE#dida5P4g&KAH` zwEm`nSTR_r!Ew0=jJG5eJk%0r88bFSEAH?#*;|esJ6BU0 zIbO)z?1Wc#H_L@bS+HsvoJqvpM(<~0<4C1T8{Cwwa)#t7yH(af;|tgZO5HGScP-?+kzQs zpJ%?Er_g&UUX9xgV7Dx_BmGvq&%%T=I(#zNKQ@~k<`Sx(8Ko{=cA`pf(KVJq;xd-b zCxaollXN;`$52)A&I7BAi1+2P7-e-HM}~o0>n&FMK$iqS&cMilCUZr4v1ciCM|sbzIjBJkMqy954(wJ*Y&3CZ(G13|Lq^gw;JvhBw%C|&ku0nal zs5_vYm*9mji_^ZMEBILN;qlXm?-A|Cr5S6Y&>}uKE}`$HJ}IL11}k0_F+MaBkpWXF zEGzc48k?r`f6u}@0TRy#gC~cmMy3nZOKsSeWn~cbRnO9QIA&`3_gQF(?%s9#t-kp`jP`tyxL>E-h=q3 zKjq8X(X}Qzu~+6b-ygG;F*bp%$JxhNjEiW1P~)a&$SJKUz(r~8cAlyF6wpQVLy6}w zAFUzj_B0CT>}fF5kq49A$+%@fs~NOd!*|HRa`~R$F7bEe4UCpfT>LA!>GG8mN)jMLh>K8SwEB`FLbW$V~)ZaV`mtVyb` zyXh3t;;uD?lauRqFK_f}>2aTqZ;<~v>&+9F?fu6`_^rKnQQzvn3I|zVUo{0^AJ60E z8bL*{=Az~t`*M{_GiT|+n@nY^JHHk& zqx&I~C7$=b*APBDhU>jg?;yW83?!6ar zevd#`8lp*dUo@8Tlw+@*xnIcheYu^SD9xvRcgSh{E?Y3Q*vehq4*g1_FdC2Qa0r@d zC4orAEH2)2sU5dW$&EDKJ}<1wg>ntX(tYlB318gw^~P;a2c`zw|D-xNV-U{z&^=cO zZkP26P8b%YgN4cCY;*CA*n4(dXyK(e){V4-&J$2@3ZGUpG+KFmNv_fvz5X}2o~*?> zg8%onQnq;Jdj2M+3u(r`s}GF;$=M~JUxXUjFm$MXey;+L`E2&!ourYn96a$#H`WmZ zQyKrw1=TT6S8{5h59T?RQ5dCnBTWdt{&n!%1*oeWL?H>o*va~p^=p+2J_?q>@M?=h z09X0dwEu9yz0DRNW_wWAGs0_B%-c*}5W{HkZoz7;p=+Vt)8F*bi437uH44Z=BYNN~ zVDYhId42(Sn;ydnI5H6AG|F~vJF-w%v*V+{c$op2kNN(eVI{ZeUpclFA>IDVDA{i# z=aDm^PCK%G>^97;$AwA1P;DQ6=I7YDx>i$e2Rlf`nJ+nJBwje3#+;9Srd9_4?FK#> zjUL^~0S|ZuhYlKgLZq??deFr(4EqY6qBpL?3T~tyq5_C%_oGrK8ud?^ET$;1o%n{=dJtWX3_djMX@t+Lar1Ism3!_@^s{pl8Jb9(4V@w zp8=EkGZzK2o9+w5a0$`Bq|~2CLK7JqHTYq@skHCHB=-C90d;&jN`Cn3PMSwqT#(z} z1BH1_Bl7(z_~p@nljy@Ug?dA`{i~I>?*umBeJRMn(c#(Vwr`Ve3eBoAJQ=h--$~&;U+QSyXEGjU7FcT?X>jXxdrRaid-Ns4?^z@X7WP~D za&A>@q#jM{B4)V;E}nVWcCpQ&wnml?SIG<_Mx%GM56sEq9eyXT^G%x1QO=nAUqEph z;a-p6=%9YHFad%yJLFz#U#}dLOLFJ(IEB#EWq61|hyA zdaL>Cmj_B%wsTOV-96QLqaAy7_2O0EdcfpktsPJ;ls*{fOtzp1cASH5 z(w}Y<46OfobLHQL#AG3hr2jI`^qRy9xIciH=)%9=v$rTjR0#(rrJKfu!ADTSNZ?DX zeW^~)ol}_rR~9^jO^s*YoDx=sB4-xb%87V(2njfnI5II2T>7%4z!cJYe88txFb5J_ zjJV{DEgWCy!ntBITl-tBJO^}t+d&&=wSfr|M_U-*6>if9^k!2v9=+$!A+OF0MjjR$ ztPgxQ@H6a!spt1XSg46>(MCWPh4*Gs1P+ZOQPrUvmN(5hJeOF0>9<`Hqfg-|Gu&E! zr56^q4E+<1mRUAbrEDb1tq3BG`&}I&b>V-eZQB+?CYp3aMIME?KCb?Ww_EvotuE8y z(_}cEgs{{}(h4>=9p(BiLpnJUz5T3b5fz#5u|;=>$uFwH#o>fU6*?ohC@GA^br;To z1|6qNm2=0~JC7tNRW@6D2Sv_+H(*C>_D?|H&n3l>3US=dB7|Oybdwo~`$_?+p=?xG zn41JX?+*Jrop#%{s;1^3S*|M450$_H)K#cJ{rbbF?3X`6ZdIb`9*x{nJ(@MR&zv$| z&H){2wN+w^Mx`{EN10lq=IUOj8xO1XlcC_f$K>jI<(cwQ}b2V(=q7{RS zDu#|E2}oaT;@N?*f?ckSkKTcDeWH#h8%DVF`~2y(`%fgUJW^_qYV)_*agmZb?@qp2 zP4hWE?Y^_T1GOtB1$~{3O{s_=O()itGM9!OpgO@$t5dM+N@butxSd+e3cA#J|GYw6 z6asQSAb7UGi7=q<1v_)&TK)L7B1&Pqzl&lbR3WOzowk`q_r&w9%-XYIm$-4C0TE!n z6)IIlS+pKXRy%4hqKWt&=}Xa#i}rA@whc&4JiuJJ^OAs+A{sG3(LKuwNYFW7v7r`f_*g81E4i-Sb|jT^ps zZBQU@^~hct@LoN{lC^PHkj472%(Ldtz^U*J{tK%w?6`^54w`${#soq+KN>C;t3a8O zzW`2=3v6G%bZF>~iJ%kVhh>`A8Gtn!BK`xSn33sKJiv69{=Qzk{KLyXHC2Y5?L!aa z&{A}F^d)g4)ZBY@6%()qT{$0^7kb`u=`Q4HR$A0ucxV&{83!MOyz}{_q z5*WMlN$&Gx}aVS<$oH&|DNpNUcj1-@6+n(sM62JX;f`RBp359jSlS{j*xuA;bu9N zQAXrT0QVLa!_&wBEsCB6xe7w5_S-eCZ-EU-nWfbL_ZP=g8xBxj2q5QSf+;`Zg%l0# zWNpA&@`yubpDJ`M-h92uV6pL=;RQ@8QP^B0Bf}fur>>62-L-nkEXgQf$iXC@|| z)!+xu{kAERO!LS7$6rN45i{buBNR-bn!}O@>@=_8a(f{zu$%6o&ja4zGbEA9D0K7p z^RLA}fCfj?XQn9eMYO6{bv@O^pBnKJe>@2iT``L48p6N;wI_vl@xGo=H_Qv}_X;f1 zO`)Io{8_M3XCsPu{muSeF&1k{M4sdgfahU3Pf?(->%`3k#4kzMeuzdqQ1rpl$itT2 z6fjX@z-6nyWj3L7y+2+6(nqah8bYqnDK<*2q?>c&~#t= z$iRkqF*;dAuxJrmE&<9x9msV8DVs+*Y$alMMS{<7^*TC=1_cTaUj>qPc(vWz$ra)! zf-jz&4F+RZZhbF*E4cdiUO3&NiynY`0FzfX9=%Qna9o6wu8T0auKxK}?0IEvhCDSj zr44h+H>RI=S)5qAFqC4#K+z{R>t?1#Q71Ou!nVTRVEre2r zH<7i(9EdDD1|ZfD#ymnlZe`4Qbm|M*o#oC17<%m2D>qIJ6QOreoP~dC2LH7k?@x=T zbr()ngP5jIds`;$EPW0(K)Cy9__joqOjn^S$VqdBv-;39@NIwfafkjWvq6Q(P1zGo z{<*@}$tb=LNz)eO*ptE#kRl))*PJcim^}xE|9dKDj6$P23n)lcNx^8iK>>9LigN@; zyzrHYvT%p4(N(iJ<4AH+8rY-}H2LQjc>};ogE(=O8{GqmPSGNKVF&6ZgdE`WR{2Mt zA%XA8JkDZ;@SbRA?JX$tW`^aP^;g*i29PYKA%%G!wc}cibx&}MJ|i~8{(Of7;Xg0L zs*Fn%O$m<2SeC`|j&+`Hk%LCCo`nl8y_I0gTkIDZ`yOLb{ZD^x^Tm78xmqx)S<GpKXY<*#5rpWC&4fZgBt`rk{=uFd_)CP$sB@lJ?OFQY%Brb3zzE=-^( z944e_&gf@Y;QgVmlE00@+atc9YE`UdaS%HAt;;Ow2N3HspZAvn#g6U`-4T?=zuv~* z_LRN1v3@9eX@-u{JaX~T%iXdN_`;_%lmv1Oz{)NyLe4oiH$I$w^O3 zPlZ2Ta1S9Qvr?N-dcYE8X;vt1!z`K;vi)32ks!$|H#9@d0!RxRNx6kR{`EvYg{P3? zI@R+1+FlX#C76%?ZCAtt995Kg!lJ)iK$R}26$g7u?h9|hv$_BGE6QU8{!HRWeJ2|y zouZ?3GkWXpJJ1M)$z&aHo93r#@N^6l_w3&!vZAKHn4rjh3 zHuz1qL>{z6b|lSib|y{~A80Shkt%xMOBXT0RK&|6uP<>6?Ga^PX;nJVK-MuQ4c;^f zK-W982Lt3s#gKO*kD*TK+Y?R$-%K<+~=Ub_*%lI>G-Gi^`u>&Fmk7-hh(tN_5t&N6;vn|+kVV-fMxRpW5?xQ@nZ@} zTMuff2U;m@)Bx4N$nbD&f-Elgxn<2P_|K6yr`nbhw1KupE|-V^8wzQQvCt@h!nop3 zbk-O{1NiNWVo@^m7##uW8S3?{%epyJxLRY};6-B@s^69z<#9mkCjDle{YClh?}|Ot z8KZFufHTrwsOtf6k+xlICflop6q7N2_;o|dEc1trM=^f%e^DrJEtd4YZ(}xDEo|Fg zJF-&jG~hF;8D~ZYn!qdV{(Xu{;QYn*m1~7R>o{L5aRJ_B+n~sMv@>~(Qnp?4B0%%r z;B!!gwN$uW=fdYZO7D%H?Q{#K}AGF9zl>t(|z+O z`Nvz+t(Dkx{EgGnB$vX>qt3jFl%_Qq7P$WYMX__(wR%g|NCDj&e^%m2H0?ITbI$iC zo4~N0LVLf9JF<2V+vK`tU@0aX#`FQ;mRrZlP<)ggBRx~t_-$)%Z|_6M+Son7l$F!E zMKU>*I3h7YB_TquphgKd-8j-F-QB!5WJBbi6A#Q5u2&Sk9nM-42g6OD@4)?KAZ8oE zfoy7v8KamiBzLO_x((v;c0u%i1=vHgUhMaNcPrs4+NUTb^5fm5?!u{i+vUe^v6Rdw zHHuda*;Hhj2~oa$z^+i1RU&^e>OPt4yTmIK{3o|BigTX^FOlii!FZy|Y<=#!M2I$j z4|vRgSsTdLV#0<0J{IiFi}0>L!8Zbjv@;QpG#n$^Xe3nLIW(*@NM?x0F}zKxoq3`* znNuE23+oF=Wu+#%qtn?RKamCQ{8_1GPLCE25Wa0(d@YGRcI$zjnrN@bQ(W*2<<>D% zUs;06;?QNkQsq;*n<*IS)quV3YgD2q^zGX8@=sqaojoZx?q`PjtX=cNB1nk75L_YM zu%on>#hOq$_&brvRw$YRvp|;NlIVNf(TjRlFGN<_e8%_41uta%Of(RO>@|)w$Q?|C z>wG-8y0$SsJ!MmBt>KFE6FOck_7H(WnYo#N?36B94sNunQBah&mJ^-=xmb%h5?wCI z)T<@C;MQAgH|g~K7m=+Wxr9tl(!fd7`An3ZEusJL<}4~!L+nK+pA2w!e-KKj2gBRQ z5*8~LW!|>f)h0Z($8z00ZLKT(hHd{$_0PRcTl;C?=%GLY*mg1X_#X;!&Mt%bI`yy5 zJ`LrKvlc&ddw}2Wx%2hBFJ!ZHcW-k3RYIpaQ6qza`5ZwJX#3?^W8O-Ry`WwzAVf&w zPw5wjz2x#a58NRgH`=3D`IIOVafW)BB z&vF~#HIrHr1&GLS94HBU>sWJbp+J}KDNQz{i^@wr9Ev%Emh%Qk{e0gZ$Sq}1XljrU z(3PW|;cl1{aYZ7@c6@z_FJ2z&z<)=tiBHG^IDp^PdSmAF?MB(N^GB)^z0uU}($LGV z)cJnZc+eR(PF3Ap{2++VTe(L*yE8gJt>|`Q+$E@VEWCw{-Zx5qEQzaNd?= zDT$0DwVD$pk+>MI12Ff=A9CsXX>~#v=3FCZp6SH%LB5GId3gjflQUx|`wU+NeY%$K zSZ(R^m-INs?r$Az)vDD}Fv6wi5~xpnIHa9Q{UzpDPe`-6M1`myhn|3&)muMarEw*% zCE-{_p{}0y<_mE9*WrKoVNC_vR+CqbUX5+;T~OgaU5pJ#VV7kz z{8+2X*YZ8_ynHlVclvG>wRO2EboQXLHs=>tTIg&Q?D|7NLtvQaq%bOElGM2mTFusw z%NL(roX2eVvz`b#(hbxtgG;!~OnH!QnnPjyt-(+;`lB7b6Y@lif?&OYE4J^hsO?2sdE~3(+!kEZQHGj}Qj0Q+vU)sZ zI{*k+f6<<1H>#-dcc)mMOvQ?F<7yNZB1?#1e~=`!z~~Bs{T=Y;j$ojdF1(?&j>emt zsx!vNe3pTc@z<$*89gS?hPq3_^kwMp8V{Kp)^QOR@1$4z{iOc6gt|~J=dQN2IYKzv zEq->3F#E781^3kOLNk&%R06I3@-w_8nJ3J@8CiCdtLQyaa@c~9%I$nVWm z=+Cg9%kQ`ry;!P!n*?6<-wua@(<^_Ee(ZpngLo=2^m&DT<>3?m#t1&Gk_G04oa~&! zoKhidpF^KZP$G&qxGyQA5$(LAy7IAo<7@NgA(vn#!}Vuu?Z<=F&%m+Xe6YI0TX7P5 z!{GE*mUqlo>c)G2zn93g);&Efq>{7n0~4qDH@(`9UNZqH^G8dCSZXcycr*GkK09%> zgK!g>(mNu#1#8kJXB55!LXe4fzu~G!eV=!WQoEhN+h#1r)Pu=9_y~>>`@gTW5^n8e6As@krHpQi;inXhjvmYfA72E3{CTd>zjFTU$=;Wc2j& zz5ayxT-Y8ON9z2=K+$i+=oIFA1T#L?GVg7S{w)tD) zU`rX6*eN*OfKB^oq+l;;Fl6$Arj!r}xx^StXXTxKL-5PdTn}sjV5;tMo04HuzJ^3j zG~LD%hUs8o0my}o zYQNIxW6BwI@zna@&4ByS%_{ajtt5<-i0Ztc@8Jh3TzVsRs*Y z*}~4n+ps7>Fwfg5e7zMFaz)~@Rv%xz8nS};P%&_>LQUk+6Y(iRTk*HlJNY?!lA@lz zlS+zbO_zcV_7_|K32hJ3cuLUi-L<%?)f57{L}@X#!m4c%lySV0-d{Sxy|yUGaRFo6 z^ij-Mqktd41OKb(PlK$5Kx_;CWn!>b3sn=Pja{F~J%0N4>oz_{79{P9@}56b%*CFa zowYj)YDSyR>hBk|?8e>Rw=J%;P_duVNNNn{B2@qKnBr*Q_#}(*btnORfrxGbbN% zPagd)37DpOzzYOyJkXI7lPBWo(pcD)@BT=dipfsDZ50lbJhD<~(>Kv(Bwrld)I>sc z1?d2i@2zp7;&;9-afsdHu1gpLi8<=N0u7fnF_!Ac&U&#?)ZY`vv&{b)`#=MA|F+eN zi^55eYB@%G&w$}o$+uy)k`GZgkJ7SK$#8Sh8P&(H+5)I27ecq*6NJ|=N&POgq1_)X zl2BhBeNaE^HFGFmhlSQ)KkQTR8xy3EzwbwX(57+`JX)bFd9;41zrdxjee7ijbBj#T z9onp$*#eEsH4L4}g4W80wajxM^#J(6 zm5wd{E$_-L<2si5us&D-b$olQU{?mNVrSnCdj%f8aKH60BniG>n*QV~vl{g|8~oBh zHs3owxWW9xBxbjHnId^#dEm3X0zt$B1H z4OQF}9haOV?lfgiB3-a?rgiFb_|LAklVOkh&_B1(_N>Tl7A~Q{_sbEn?FTJ@*DNB` z%FcZn!d?8rcZc!ezTva;O7M7u!dI0Yg*y#JPiNRDybMCY8BK+c4~)->(XmkweD-jw zYa$i!w^KNo+q^SxGH;bJtf;xsWct&K^>@L$VWIcQyCmbjBkQxVlla_cBC4_C$xO9nD@6Htr|cS#K& zuqoqtr$IY{jkFA_H>(QD_BW=D*Owj@Z6W0HQCKn*Q{e%+3{0FfVNOsHs)XOKS(tMa zZnVM5?8OR%pmMO)D^-@y-)VkJqY?Qg2bcpN#Hy|6fB*=qlb6OiRscKke*XbaSE0=e zx4x>T0gd|;wnG-2+a3CexXyp)Z9p4A6zS**lsza+7ig0IIvZq&PPSnkf+DaR(M>el zk#Hh)txRcZY|q`D%k~YZ8!|W4AtG?noT#=!XBvK&^!JGA#}VXGaIjx#oM+R0?AK0j zyD2C4112k{>rBIPV;n5K(*wuiQf1-_xyMU*%U>UQjZM&hXmH{kQ{3K}cv)Amxe(nI zgWh&Z0HDb_T^U1pf~AiDW4+qjTl?o#Yc?bp>G-k4%b0Qxa49AT_6d9*p^A3UKMzJ9 zQ3zgxK~H!e(8{gQG#>{qLhdt4N{WZ014?36_8d0q@`;J5|SdF6BLkc1}vWap1)w% zb@sW>eeQG4`}Hm;of-H;KgC(g&>O7ajqv2o@>oJN{cRJQs4{-fd0)<lmL*f)$4fYh&au1x(q@$d`XGeV?GQ{OH|~h&g$Td@ z5_=trg)tn9u+;Og@I`8|l9A)~-k1^VD79qINI|E66rkjQ-lIq=;EmavyDYU(25Fc} z;(;VclekZ>0H7&vXFh;vM{yQngB}9UYbm0*(C1`MAAuS19iVJ)v?+S(^V-q2y*Q*v zh#CC*eF6Rd@`J+aCEv@|TR~%s)Lil1I0n8*`|X%tLw2P4QTSq1 zKeZx@9hJ#b@6k7p2v@s=Y)KMsUBzJu5-TgKC7n@f0_rX8dsx`{zO|vcE%F|i>%BdK z@jL@&MdyJ6w@a@h`(ML;PxMR^VREj#RrvWF$Om>v9_8bHkfJF zZ>Xk)gQ{i=2g9N0pbp6`{E335CqoQ&uLt$VG&5%(GMzJpJ0fYs+51|*Y1^Qecb_0E zRo^{tP0i5}E?@8v$>dSjq#f>jM7w(>a$jrl?)eD&>!%vNYWkuyI(oO3=xLLG&==+Ur^d1chkrIql$^X|NdNs#2ni zW}>^N0Ul`_(daI2O|M~>j^WY{hN52R*s1vP$?S%ZHLAnpY#$UuUkYlg%ug3 zguNxb$^Q8roAKj{++U7|O-+$I*qp39{IYH1U6?Zw9BMc~oY+?qhoAsPfk$BC$m>zi z=a1CZ*E?;-f(dfI+)O9&TXVK?Y0DCRKm9cj) z;c>|ZueVbR*jfE7Y?tU~%ntMnTN8XA4RWmo*GK+4D)(!MM9MmXaxu%Zm_RQ4g@U^G zAYLw(RnkzXvbm?vagzaFjNyWJT&{J?g*E^!j7K+96%`jRzf{he=-UL51{?t3ge)@Av^mWfIGfAgH8PA< z1h%jF_pppFogPI}<9DWA<0*yT6!8pc&oq}D5!sWc0xDH@Z^<1(-EY`|Al6G{@?M-q zembDWh$O>^w_Wl(Q%U6q<=d6QPU4E$F-4WU>zwOcQM3G!5}QXA1^q!9ncXh z*Hlz+>bY-}O(c2E?jKBls%ie5;qUFjRTX8ANPl*(Q22=e*z=7o4TJ`IaZ=406A{<_ zF>I%(qRoZr4noSd>*>jXmW_yn#7xivO1dNV0&tK9f`Lbd)ec=IH7SE?Raz?G<#^Gs zuTS|9&|ZF25DArLml$}?IsmNsr*-OlX&v$F?2&VdVP@ffU?8j!=sBf0b)OP@kZ=&a zLcSLifcy`*C^3G&BKj9!XBi-J)^>IFoV%~S!iuK!c~BVd&bjmoRBN-dA>QD=<^Aqq z@BWrPOrPT4d>&ce@7o8{n(o+VLa7YhSvxLDHLhLK&bn)*m{sa)6*R&e3A(wIdK z$Wd)0p13FKd}U-LuIi{WqLm!L7;s#!SG<}i=o>5ey%?mAF-<5-l%C;5sSS`_LD#gr zkX^nbQEnN0U%h%I^l|mWhWeYf9ALTZhw_b3R3BMJM?Ue59v+#*n^f{)_fC~)I{9che8Y)odHJOKaX9H8mUhcZ9!{jr{j3eLr%3Y9RB2YyXHw!K(wR zm#z|Txf!k-Q@$UNND?V{j)f*^lycfwQYLPCWetUJHotGK?Va&8O0@GDein{refE;b z5{CBZerO9*-q0w#^Sxmh;t|O%;f6O^mJAI4KR>SL&pCiOZH}`aAJ1-IB>lckeS0ww zM6p1MZfgz(TJ@z+o}dZ6;Fd&^wB={-+K#(DrWWpVnbBtz_USYIVgDrj=QSt@az1f8 zL7{B?{>M#g%Y@Q`n`vsrouGP`G+n@KJsyzkS)7j$bi&Ax2iw;gNvKP{73$~Y1K9b{ z=agSvZGek~nND!1DTpULa3j!wLrG`4qUk{JjK)i)V{84XJ8qV1jt6ErGvlktU}E?0 zG8KJtlKfK2LCV`{?+N$Mm!Zbf_8J`iN&WM%>4baTD#;p2+DUpN3KaK;&h?I!BP&}a ze?6@Cc=OlJIWRPUGqVwOF!vobc4!Ex)A_;CCCJEucz`>;d=}qbH=cWnec5-h_CRAM zb5IYM$gZ!?j|ZlN2JBPOynCc*8H5|fDGkjkU_c~p$cVn|<^5qoo@pul0Zaiw zMEve0VF$CY6pKTkNrkGj)hnO9_X!M2AW!XMcVs?yT8pNc4s41R2E^-G0Tin8gLe;} z7|J?x{J5*Nfd`*I(~1F86)&*X=8}~-17oP6r!09s6Fjr?Q&J(?Z~c79Px0G^>NtxC zV-QbrOsMP)s?*wlW^Y=7G~Z&w@zu#qg@gHi4)tV8uqTc-U==6%ztBoWN~Jg*IoolB z72GRmh_GDLYf2prqd8i<)BWLSIIp20^52(Wnb2`;!*Bn6=Z$)8Y$ON@uLN!$C9BPj_1{9u4=63uw+~WnCsZ3s2tLZip4tIGA$Zeuz1;PlyG!L#C@ZJqclO$;(to&QX0Mi{qy z6>dOl`@+ZnfJP`lSrkx6saS35xzSw7C*x2aE|JF#e31X*0XGI0Mrb#44}&D=yx{F& zCLjL98}V4@2MIr!YBd0g0#s;UoIsVU+kfBHsp6_{9JAu@A>&bSSvCM4GcI_b0~^u3 z<|azRG!18(ZW@UsK~?UPD|pePA4RC?B|( zrdK;ju?|@$T_@`s$H{;CupSu8Ld_mLP<-+0lW`d1gG>VKn7cHt8dEoGV(}KW zA7lrV2l{Kkuqb_qd2FcD92oJ2uYU5&O!SmI+cf_Uq;4)da`1v+s|OgztdZ^hGzb{u zO0<%eH#$zvs)vgt{xc=}S=HA9aAY2l8c zk*k*>>gb2*Y3olzjLviKcw1C%WlvFWMpiq##CpjWUDdej6ods@`ZWhdEA}3w9u>{{ z2M0HVr>Q4Pj-CGee((@0X8r#3sR`wgYy9F&9z%W28~9>;Y68C%=I0QGgy9A}_Y&)! zw7CG67YWJ0^(J&ZMfHk)kIH?SB+NV8u|V65Tc)mtxXK*AGfbuPzlKZ;z>^#UN`WVr{}S>79fOVHQc^W7+a@1C3Q)pkjfPu@*#D3X!|--{40wN z4GV|~b`-|N=ah%+cPb6>P~+k}Xg=jXB)t&h{b0ihNTF;wWruySgLhLoviXLjTG*u%ade)dF-Z z-E9XRmYA}<}E2sjN2n@*oMhk(oqtZ{d3MqB9`)H-m;_s4u{k{ViG_^!~asausD~kYpAV@~i z!7HZ=cXQY*?P4gu?1*wm;g2y<8=J}f7}k*B&wfwo%M${}KbL2^ezvU{u`IA0efj-Z zer})j_DwJ-+aC;K3&*XGpHQoJ*Bu_U^AA?zwmll1=iSfdu}_KPmd($%m>s7LwR~?|A9#vBE8dYzD%V0%68t(7JoVix%~gBu83A9i`A8>?3f>i%#=*!HaR z5-~SA8$R-c4d-nc^yR2C| z@Jtt0O@t4tzahuu5AY5^{p^4)c|o$*Lg3@E3M)y%nY|)t(18g~z@WqkcN;$bqeVQb z5BxFp1xdtKJcv}_Vc7h ziuKcw^(n76^gZH*J9&p!SB~^V>k#~VPDsE?S+s|f$}kL8ICUzn8l1u^6id&i8bLhaG#6Ki_9A%4xgTg zy=|fo!A3LpB%}3xh5Vn<`EQwn<_V9z$W&u}(>rC+n4@)(Vrza!b?H9R!oNNxh9b4p zW|4yuFvhe~#WY4g5Cv%p1$!(gdZAdt7RwuEbJPB5`d`9fYF%7UovYc>Q|V$l6T2&; zU|v43%;R)%K0eBpA}tC?ln#I4;iOEpKw^MEOXJ?;gtz#dMAh?O;oHHt3iRjDrk%KsiKm#9<8H+zP8P3Wew-|0@QGh^N+q zXe)yeXi-Rz87!?3B}&>>mv%)a%+P985xzh*bA9?^`XtNz_Caa-cG+Hy1sjio5$;jD z%-L3lP*&Yc?oO^QR4VmR`RQ@u`^2g518*4&&cZi8s9KyU2WD+YEU??r+p*d4+KH$% z%=!+k@P!M9@rBPNi$1XsmK7xt^hjxb!WRbR=(&Cx;Xp(J3T+k<+b4Ws+Ss+#7zz^X zQ>SO}sr~`Gc+5SOX$dkhYL6>V(RD2E`pZT)|Hjxl@%BtH0nqbI4~#^; zR=aSGJ2O>_F=FyAlMH^Eq%XtfcQQ^6bG4>A z;`(-xspd3zv)0qO%@D(XKvHihv|@tOpk|tfzc;?3vmjf|UmgzoG~$}24s9hg{Klzi zwh)X77%e>F-d5>3eacYTZZ|y-?0ki*;IlSicpi?xMPqvs(09|i16K(RyH#*;Apl6J zvqJDPh1!lHdT$oNx#eGFf#a9X3wL;qo6JEBMYgw5a*s%X(v-jK4quQMnll1DxKsp) zN!((*P6*sQ+GDL^Ug#$(wzR2NTE5@1V?=^6H_MQ_tDH9DK+?$C&43h=@gXK_#1o!B;Gk#VHu_~;(styUe8uLFGBBZcNLRS?xM_=ZE~ATbHz%#r5K~Ku zoJ*Wbo#y5$vG{(`Uz#`huHcZ?BHhAn3jVP}KEkc|>0le}8T?p@W88GAnt)kJcH|tw z+l~gh6PnEk^EN&6-KSniW`TLQq;HuEf$x~`bCv03N~2J%oPt8|NGvT^(@_y6X3brMWc-vhx9^_qTuQ>$ z`er_w4R9=S$6sDyyA_Ivb07+G;4D(^UtO^H}F2hGCpn*b^cm`}O9s{*mpL)1uXC}(tOpAUIT-Ej)^(#St$ zc4L?Y z_=qq@Id^r@=|P5d)gsz4Q}pH+!+o>g#Sj(V(e9kOE)N&(*ov!wb$q`w%J|dtMC`vJ z_q`s56zlipS0UH8bcNWq(e>J+Hu3hVAVYg+ZVrrX== zMj~rIGCwHs4s_s89$9}LoIEp3sH2{srT8OlE$&phJMb*3gietPlnJ3A5&R}ocp7-B z$ALcen|c`}9z&7F%mB>kA5q#=$sb)bJ488Fa1w2JYIC$BQSP+55;rv8-; zAUcKkL{wY_Rp>k$Z62t)J0pG@2yP)M2A8VFCksX}P~KW#e2R>0 zj%a&$Hb6hg3prE*b%(8)&N0*e)!9h82ANUSf<-97bLE3KALplHa&i?Fe|>c!!iQv3C2Z^eG>b{la0+EhxLm7~k-p?DlweiAZUXuuu|x=qfZ2JaN~rj{b%Mi zJ;?OkZpoJVr_TsSE|sI)Zp6xsnZCY{j~#2)8F2Y7t&G4OrE(ZZ!514UFw5Ql5?FN2M?=Fr&@4$$#Kg1 zMfiU3?KHyi&ZeU@;n*{_V)Bub7Bq@}PUf1k+wrI-`JuL%$>AR6BYW{l67L4#;V~wq zrir<+JV%A>#W}snt*wW~I7@gB?s<;*H92_{wrZbXx7wp2E)Ue+N1PM&^>yZ;{1P~2 zC^hy4dmN06nRxZ%kC0ruUfn20Uk)fp(*}P-idQX(n-zc^vvD<G3j9>Yq6m z{@jW`V5O-r^zagYz1Mp^>9k$PQrHl_XwIm#E162Zesg@wlQhDSihC{H6K@~00Kc1( zDxV5Co%DM>cb_&{um-(;Ksw=(ZwS zkYpV6X>P47Pjj6)ZYBJX~3<|2)|L6bvm{{#s;0+rA~dS9<+DjpHqNl77&z7(#Rq zGhr|b_e*|waz5bpj}nod6MFj!lppqoo}Jm1Rq-R>g0en@^hG-2$4s1{@ir6~S#Kwl z#$rutk7ju6rq(v0H{cvDdjLQ`#?~8Td0hQ$Y~7ub-u}4Skr2|W6q<|cSy$NUmO1Iouk{3K!RyUv_`_1{fd;$274VN# zv8Hx z{aekKKCjDhB{tf;@{jCQbHO4J-K2hGk2!p|0!Igrj=0BIaAILW2lv;>mdc|M_);)B z^mm(|Bv4((1N04^rz|VFvoIV8U=M3Dr3lO^M(mE91jTEgiXYqk-9yQ7&3@JprM}dcqC!(2_4?;=r)SJ%a|0#Ca9}J`(Q*BnZOf0L}A9Z*Tle3NSm$;xMR67PvFBZce93wp3tLk2 z)t`0ml!aZ81boR3d2-gbT>@l8!fhsZnL@tG!e`yu{z$I3|3FatZQog1&`^Q+8$)pl z2FM6yt4TFc^}GKdW6%J+Hl>`3I(eNL$RXm~t7`1@FApfX^ET{<=_ySr?xjq4lc~nh zz!ws);A2%3Ax6NzpY6E7)K+=s?F1f(xt_1NTaP@_ZQzC~Oq3ofvzjTXCZo zn7pN;3kKOxB0xFNLJPe@|4(WrWrcf(5roo{zi%wyYJ{hpJ}f*z()rh*!u-RIqZ!m1 z0$tvBE4h^B=-9u%`7Rc*6|8*+T2&6W(z(H!r~b9N>squJdxW1^8jBEg~KWdc3loRiWxR(8ci z45XiFaHvL>D_lDN>(0!^H{$-JUxl8?pL{@QwBiy|Ne7TSsF3sp_~Ohv-1U7xiLJ2D zsK1w911q|XiTiEFEpweiM}FlytvpTmLfIj1X1I_s`i<|8T>951G~)P>OV5)8D zpDDpt#|cQ%O`A&k6wyqs(qz|vYSg`G?s0eBk@(lUj?Etlj3-moHblN{QO@4-~3x(`>C z7!a9c?{VQ*&dNmd3GnX;q1?cP5g*u)V>1smx=Vu0)^oNv2LcKwxcz|fjhc$J>3PlD zk$;TNLOjqmLbrTmL4<_4%vfaI{LEsOU;$i^Og)HTk@2BX>?~bf#dpBf{|3+ZER4-W z8msTnQ@GRa*4f1sdJyt(>l9`ggo2Pm`Li>HxG(+P&pyDRL)XM89B9Akk)EYr?Szbe zDFz2LSs}RHTv$~qpAL@G&8u*P#~dO*SH;f5TL?ob2Pu;HANN`c1I{=5HGKP{-kW-a zt$A$|`BWw(&B%3Bp!GRC(r&L?z7h~&xN?#iDINKs5)3L9e?L;naF4+?)(1aqEsrfz z*lBZeG}U%W55mUwSrqxw%G~G|6{28Zl9As^$Vocc>H^WPoF%FAI_=yUzo5@kkZXtj z`XJ|d$3;qvLX3u}%GLxfEC!cAl-=-&&F}x}1yU*?2-&;hJt0Yh$PC<*m9Sss@K*$7 zTd%8PI)#!R)u%^l-|-~Z(^rjL((Z%dsPq3~5=jn;c z+=eYSdDUEQm87b_q4Ut3H0t4|`+8dU_c;XwnUOa4)e!_J~{f3V$@7 z+52N;iSrAO;M9+$#gmng+b&P$C=H-l#@Uq%<`?S|yaODNarg_DfeSo*a#-f?>yQ?2 zYk?i(PoM{$Z}z^u*`5zl<%q2Hp=c)TVutuMyF{xFpX5;Q_IKYDNwt=ga6slW4W9R$ z(@2n%As63a4d0)PB@W|dHAyidT0ZR(GH#QlD)*k@$T9-rdr=3xinYAUJz1k;lT4w! z!u7}x!iknntSCxw2B&um(tzh79aV+}F#J>TJirQH<-Q(kJjXe=OUKQmU;s*McXYg> z8+)jyfl%Uwx%NlrLO{)mnpWrzxmj#`fyN@#f_~&Z<2;pB^a0hG_ACKTn0mBbsZHKX z@t@uHSPCyal|#3M;Z6G#doHW1=+T9W0@m7%cpSy=_MqPJ-Wj-J{W^Kls^FlA{`>o! z1f%zXFXruz;nzJp=rrhc|3UO{MP=myaP+8=u!8Oy8N{!flB*_4Wr;lRlOEufT^m(c z4d?o4^Z5yEk5qn7-Y2r+>ccC`C70A|X!|Ge7fs8zxV=9g)r5Kc49a?)#M0+s09r0r z*N|+aXa^sv{j#J|^o5Nt*F4imJ$kP2O>x9tkRom2_FD_V-eaYoe@@u;MKR`4%nJXZ zTQ{m;Q`iAl#9Qq1ii$-$)7OUD?9#CUD)?acXUiY&RIe735rze`e7;f@?lm^dkGXqJ zi(1q05lX(|8`jI*!ujCPffX+y1KyS*_!vYkRU1Sa3|Z8evhwBdTVO@s*=Q+3cg*;0 zJ7Uzp3k)eDf8JA2ii(SWXnH!F9lhimsOZZHW*Z47(}`8v55I#5qB545clM+4BcqHW z!PbZ|3!B^Q;piFd#Pijqmm{j{?>rQ02EW75H|9CZMTe zt!I4itJCr&bpf2v7|#vS0s%urFjMjC-KSY?jcb~xnW$`;uKpD!)FWga?Ymr1Wy=M* zhgvaMAIAO+{(DD5B{HYK*|73e%IWGmtFzyw+ePj94P1n%JqB(v;)iMbKPi9%*Xnx$ zMwW_8=-CBx|XNMW4ji$VHPtdwf;e1m8!?X8==!$AW@(Xmb`YfYPFo zTXEv>)-KEff2EqZH++Ag^*(LqqiL^l%f%)iL&NM>769ktAo*Qu%j%pm2{#cumxD%g^Rx?gXV*t2xyhu^Sp=784Iv3TtCPD1kPW1Lsh@^A!I~hb* zwe}w);7P9DFFaxw^N-tckau<|17C&;ey>KjTFN}eH~+jdNhYX_IyV5Dg$(Et)*i z@S6yNzhC!3`j=7`shE-((1(hjBl?Y(2K=AR-G4^0{j#D;iv&J^e9CRsLl1M56oD0=5@Al;G{> z_$?T}1bLEW1m|Yjbk@+PQY|NWlth)Hf6nWIn#0S$XgWVS;g%N$Vv017PI_{>{Q+*s zoTF6zx(IKn5Sn^np^Xc?5 z1^6@)6Z)gtqJ)h?DkGxkJ`}9|Oiy5pG#mH?^t7u4{=7X5~G=hm%+5)z-@4U*DGpfD~-Dky#L=2oN zS*cLKzIFtUtIPXb@pI>aTDcpo#l%X;oa%lb^o1)UVUIImDB;b*%NLZZLJ{eZ_t@pj zJOmdZ&0o~!K#cHUZ>jNDU8O)C$aO#?=_q*5+YBD+mfW^`O7+EWpTrjo%;}qLaHLoT zg%^h4K7R36L8a;wf=$99l(gZTgIrC_F7U%t^ljhlH#j!ruU#&@O9Q-{Y9jVfTT8)^ zl-=*>J6q~%?PG1Voc~nWgwK_3ChJ54=wZpG3Pvk|sb<=23xqhc@}tFXAFE%o$l9^O zn9HibzWonBe#G1i*!i)^hC@<#=q3FYj<8>m4SQ7QG$Ee20po6aaoNf|Y76>8#(rNn zl%yDm7^x|tk$OgXVC9zj4UMP%&0RPpoxg>K5@O!I=LPpiVU(18TJY@^%y z+q9zH1K!=jz3)iEA_Sx;PJI%e;^A4M=?JT_NC|h zgC@s&TH4+-2~lO^d{}JL@cRx~(m@{Zs2%JEnN$!11WbJh|EW zO!X21@4Na<6e!!gRp(;CmysaTvns; zVL!)JwfdIIH|HpDr6sE3~K1=vPT45S=k|yozo_ zdYuQ#9DUnkarG6t-e~pw0#3B)^v#}rL+G9VXH*t%QDIS*D8cgDdnf395JZsmUM2(Q z@nhu@n2x#wvwA&35XA4t0*Ns(FMnDWbw;9V+vMCM-YB{Q4$>>KCWioyeM#d^wc(R z+bM$N@7I)1?Gg?t^GOe58Q*82l=#6a&3o3ee&^rhDHR=zAurxhpcgixDSVRw$gFK9 z$b@;W6e!lr(xHS(3h9*XB)=Xqa`c8;-tXA}bg={@;h=e(!a+i#U` zC7gfsOnVV9V5Mbz>%kY3@JY`Kd}qQfcXGr%l(5Rh_}sMYSDd}RX5m-T^S}JBf5zHY z5lzQ~52Eu{gBj#23&b)-Q)(MLEmBETO)UYmYw}BH zRJ$0>5qJET&c~lUNaLYJofvx%42{|GQ2b2>5LKr%BbpN#&PNhY^G*(QFPV>2%>Uud zYj$O=D1K)Ck3SWDJP69gukU1tw}{cx2o#6>S;$5q~lrESmf?shdl;_>=hHMd+mi zp>TEmL^OW+aLGE2XcuMWmV3+F7>Ejx^271Zq_hrOHUPJHK2m||f?I!JeQBf}l2FsA z)nV4!fs1dLgaD(vefLzUoQW6-?q0mzQ8S@XBR_JMP1()-56;-jN+@1^Oa|!_ zRTDRU;Sh$p>BLYwm|`YtZO=?aka@(Q2>i;zXuUUPj}nQkJRbvFb`nJqG3^Y;V&iaqpAeD`s}KW~I2|u13Xcg4>N(E6nbPvm%J1UxAXdPHK5DE;_FEJKA(fb3g$JLgaCw zUJl5OJDff#zbm){j|cPfuxi+rT8}uEHBFjm%=@}5=r@T6 zi8m@$p#iTpQ^2B05-n!LIm#{%Wx+q~g4U7`nNpY!@fJYP6r!L2Z7@g83>@-EYT(1kh7dWBzB&yX>>e>)9w}keJSH6t1i$_$)joU1 zf8BOVxidILo3O;cCxqg5qJM1m%~PKvHx^u}_1ken1QKO#Zz%JFsyV6p^XHeM?~U-{ z%nGd0+yEGezi;ShtzE6nboo+%1SE&v<7+5rqs(I3WMW(7Er;>$&m= z5*@&=dAhSsl3Wph_Cz4nsDV2qi+&U^&g;ahyc!%i&e4Q$8H~@ka6OzYH|xCj0M|f! zNKzY!!6e1tkxHnWT#5Qr>?IQP%mkTSD$MIZm&4>GN2UH4`_EwiPB;tfoAMxIguxlm z;D_&gPk*SZ29tkbw5#gQ5wr6(OKa(s_;?8oNzHc!shOQ7$c8@)Kv%OB)-aWSp^=ph zlRQ%3wsS0J^d&6^j}2JXjVY;4`hQTKK;Sv3LCSYuuBnyYFq`Ww!2P#Uc94LLR4oRx z!>I=;_rumr-&lU8F7(DFf4lqu@7&yxCtJyk~Y4h$*nXH2Q3TBA^BPPtP&k z8I>q5bB8%L#>0!m|Cw$VTPaDaM$84tRxn>rgtzLP4zmoKnSDG10&EP>B*gK2|Eh7( zII1pT=<)w4p63?S3!*H2;2 z4E^k-LJZNSW;Ai(FM9{#B!nh<)uIkZ&ewrwfE*3$tU4V^+p};W82T4@LW>~0g#mQ( z!uK!ZU)7S~>$xikM(JFEcTM|v*`x7ttDD|06}N}b1#wd%SGb?gjDG0{V}ILU zClQiLWwKqZmQa;=)U-?4c8`!t=}M2DI0IC9(Ki_!Qv9R)Q*TmsJ8wfG0uIVl5*L?G z2r?u+L_lwSYuTwEmf&h8Hro{begO!+sq?mD1y_OeWHm0Fq{Zi!JRzi`3va)Ch+{ZEIAOv?dyDFFj zI@BK7hcncQ#^4u&@1Sg2Cy(7TR4u82)_zX790>8huTBwpSHPjbcLmhO=(iI@ZJHxOhbY8RNhufc^vhqbF?!vud#_{8eW z)hj@dzVb&#fiwvANODoU>~PLnas(faG|wl;?YoY4*7@U?j^y<2D9!L`u#zTDNgq!i z&L1v!2zQk9pjey|dpP>@RQn5uk@t!=32UX`tF)yQF6VDDvd=~yXer>hzx6Pt2;g?G z4dvu8z9FOl^F)%F1de2-8aZIilS8cxWfxnd=@OO-u#(00fFhGNE@)20g9oB`nG_#|d;1`-0_sok62Y3?S=6>hJiqM^Ysf|<0B0{1D zbc-qj-qa6C?One*+mRNU2onKGpMWO3&u6kVDm#2^m{!#|H3y)g}35#DZn@ z$dzB0hS+V-!^CKKdP@PG*B%E8IQ+`aI1Lt*JvRsb@_3|`p9b41M+P|)Y#lWqU79Y@ zOYN(+Z$C#sFp4ZEvRwl#r1*`0v-fWpS8(0U1UE=G=O==xU)msfUZ!h-fOvxjiu19}=zHemT>f*|E&!jAEm zrhuK=f>!x&ImcSZ4rF9xEcEyHKl7%|;=0-JZbVhjkB@8w+INbHmMlW+L{}`|e1H&e zTh>P?zPrQ1$JPIQ&`FN+xm)^>FjJbYD|gn@>2msuh@?y~j=SMnb^rh48GFTN1iUVx zgw-)1plr5%sjZeK)GqxR;ng>T)we1rx9i#(L(S%Fk4No*ePS)lfueJYza_Idpygz| z{e@6_-7QD7)y-IX9OtnyUO=G!K^l=_my#MCg;p_p5Vbw|t4!m&{=;PsDQ>+*2N6No zaiWZP+D9+ixKj4JPl6$Z56Hf7T-HlkfGE#USt5r7sLuB9!pqkG{312Bh^ff{-p+(z z8hk~FoH#&e+>u_0qr{YaO85`|J50KYRV4YF$Vn~l>KS=A#U=L~lBc_esXv=bYwQ0= zx(bJ;-{=2c!01%E8w4pyg^dyrDN#Z?6s1uRscnFC3raT%2$F*IhLS2NDX~ci0@BT3 zzkR;He_*@2_jC8$J$Ltd5%1k4>rcn>H$PRR#Kszm+k#}d-x`2T9t8;n-hGp7Q%b(y z>>znp(j<*e>?_$vwOL23n#7D3 z?he&&sMw}Rn02wUpS@8qrMIkM8DBMC_WP0JpUlc?tyb_`7>`lQXXpbg9vb%IG@tYl zbuSbdqE*_4m*jma$ez5RDzCc-dQ)ycQs&aJN8scG5isA0+rM9`y+D$jqQL5+9Q4HP z&OIppw=@NUhXUO+JR{Zf$Rj7K9&=ETqr14aF?JT;qqKS9Jb+!WPe?-nMs#!@1p>5rPXJIqV&!F2#*y->7L<2(VO!82!nyUXUf*d0rqO?rWNhARJD zcqe@pQbD$2EKy@Gthw>{Ho$WIX7)^w2CIGm+OgdUno7eiNB^b3z&+)K6xtBnUD(V6 z49Ud5hmyD@Jul`_5zrHr7pVWDVL}<#fe^M>c%9`M*nt@>(4^~q-p~WlBMHm2Yj*2v zY17q{RqKw+*2C8A8@d1J3o1ivCRSF2u}}vsfmBO}$jk3+TI8?VQGJ!L=GV(Gb9elF zbKQ;afeP~;xvcn>C#CXOF0O<1R?qdOg{$k6?$-{&2a6)9YghCDDX-5uCd{C|=BlZ= zRr@`ESxFJl^~yiR2tV>GAps(dFt4e<=&!9Je0nKK(zT=SwfF#fT?TYZ6!3Dopl?IK z)(GXhK2#7oZk(HkdUsUu8Chx5QUCZ_$VZiVc|knABp?ECvJtiwrAT4hB8nuV8!bU1 z+Pzal?#B;uY+}z+Zz8ACb2Y>tJ?xCUs!-#LmB$JPImaVTc^<~p9+a33Jv2XvBa>F| zb0mL*ufCn(w11+kOe~b4?KX7j-GiK`x3RK*Fu%YZim^ZnYe*Vuiwe{I(kiyz}tXn2OXlgbU$bssem>Osc zVI#UeCxH(lirC*8ehd?%BEYo3nU9E}kq1+>24;VPKlSkiF#@^sqV*+huNFHa35WV@lxC8nC`$>0A@6;`5H>dx$i3fHf~oB zi<>zFCIdl_{*b%6x?1p(yoQaHEGX_1%!!SR<*(qeS~CAtMM``&T0+uK@?|s>&nSeY zd~?Y9jKRKpnlJK86D=iP59_C_dvQ$1-=wymR8V;w@Na?{LS(uJ)==dJmAmmTIiYIn ze$4VB3xo%cUr=6vFSmwpWW=``a8i|H?y9a9!SAtCH@3CPKj3nY_1VpMdf)c-&5uFo`Uv2|BVj>~2l0seJ9!;GjH~m9-P4Ju^kcR#h zqlb2mNhKdBh=0jl;QEX|YE_#w(X{&s`@5rTy{Y&0wne4C@r50?O3pd`Q~i>O z{UGp=@* z!N$VXDp|L*i1k#|R?<&w*~EnS42Af{cE;3_U*>h;lAzd=8oyi4x!vPO3 zHiK=5f;WjDCU2t1iGi_KKb$U$AF^W$f-l(TI?S4OPIoS_z_o2S3tN|^Z(#pd0;i1|J8J9*Qz{S z0*s~BMgF#*((_BL1}G51r~q&Or=S)Jsjjl{-$B8Kx0KZX)az$q{n(9T~ZK<<|FCmA&&C<-LW3AsQ1b37w6Gn^fPShCJXU4|ropqZ(V>B$$E#!8Udr9WJ5gWJ zC?l$q;dbXNRph~|vxMG{1#dLq&+M0~;VfncFnjNFWG}dFZQH$QZJRjV#)AJ4cf(fU zt(lp%`eREn5O=BGoImfoEt%q1u4sfMl%1?=hazw{PMeaS|C%)n`j+Rn=qvK-~ zasNh7F(RMdr=;7#4BBt4{)e>16ADw*)7FkkjHi`U+I#9tSVP5$TkS8C^F}0AdkM}> zv49Q*Wjq-fRJIh`AU{|%w!V6@(IPy7SBTlVI}|jnjg~*Ie`LDZWO405D3=qy-%%+% zfRzauia|yk)29MrY&$Rcz$Q!#fHEu3D8JCM_k;6>-ROw>Ck-=;J6+B)mp+9KwZ7c* z$L#DVpIgm5`4~q6?5oHc5@mldb!D5?ft74QNVdBi#x~y>dLBD5F`*zc_bG7Et9EC* zVX^ymZGGxM@PE`j2w4W)$Gpnib96~c?L<=- zh!+*h#i5F=Jg7C>H0p=V%_Be1H$TbgTDJkcjhc{d*L@X!W-t6$an7Zro9*ekq2 zVJJ5=Rm;p|{?~@p;Wk9*&dbLL1jPYj)}b;aHHv-y^Og9q&9XOaCqK_oU6P=?EZVTJ z5A4b=)Zr(uwnB15MRK}cI;<>W7E(m~?E-mt zQjGa?|4M%v*!16wsne?pD%~Wm(=`(Mo3Y7v%9KJ^=LkViS&wVIh(l19K)GEuo28zB zLp=*fl>>OT2+@g2VK_N=qYZue9Yi-XU+M-)5YSj>8BqX>v3NuuV3kz>apOV8wSavg zS#uUUHLD}*I>(9ao`QvQz45JI@oNB$RQ{t+z!$v9#dw$2kji6Z=nne&N!PIM4Y0dL zjDu|q(_wpnabCj1@tEU<3YHCvPN_dbmi%{m33q6=twbgzQOw2I!!yyNz#Kf`ENLSL z%=eG9X*Ja4$M-BENQvS2LdYK1m4()F4!rarFkaR1yYY5)JLID4H-4|Gs!G>TH(41Y z=z-2ZSdG8TUM!RA?v}`4pS3(`W~O{{efOO2H-?RH27p zj75t}g2jZ4HPQ50Up44YJKr#|#XvkHUWTTa-SKlni&CzaV-x9pT=1>nHzIoOdD3U! zWWSb-xyHO6-S4j9vErxQv|h}ULS31VyJxbWVO#9AjeNPdgXL!sN=h{uQD%aol5YjD zy@*pT?6cUs^h-V|Z@nGTyd>B%2_rQxwBM?=n3Et`ax-r&ip#bR)5z{LIgS47J6$|7 zFX=X}9$@-R*iqk2wxDHvfLTBjA=PWw7H2{!Q+~%)Dm`AjMWI?JM z?gy3sMX)K9Pu>Q|-EN6HBPc8!W?h@!fJrXdLv>*`Kp)K1WM=(XrMS2*0rT^)%#K*| zcrd&1N;{9(nStmKF}3Ezdm#;sa)?1IGGztvd@_%xW|6eKt~55qM9G+T(aBAz9D4RC zm+R#nj+(1uVx~f9ZQ%W0*H^`ONNkldhUGeVkr#gggY$v?w9%1Rz>K1lMB<09h44Kz zV-P!#)7BV%!92b_*EndIRS>Dnw=~Bj5az=Tbnz8XK82p;UrKTwz17pwD_Lj-dgA!F z60Y`SztY?%lGelnIMTv}?B`}4C#+3Bd-W1YB2o0>sch@o-?&*d40gZ>1Il2B@n1qn zWbrLj;`7kilZFUHF3<<$z88$3IESnHiqoGuE|DB=;NaGqz{$SH*%{H!+Yt)x}`J+BYmDP~D=(|lkVJlHv6x4m$2C8(zPpQXP^ z(0520zYYQ}1x{g-(E+dmXnL0eirWw|0U5(YI@@GS z7}2?%^23y9nwwyB2WcQ=ex!d=N$av{7v>t)hIQ;1W+(be{IXJMypwxEp!WSGceypi z%SB5fH|ESoDLOJJt50u{f=WAu%q(QqfJQM6{Cvm%!Gj5oIr(fI^v#iM@KQ1-MUkOT zk9-b3cJaj*nI|$2l@T(9O%!^KIsl~RZ^y}Y!S<>pkg18rl112D!-k{H$QYmqO!~mw z10N%-I-{hL7u3jLc1kbrdk%z#%rt^Sc6I^f3zTqmD{^dXf3J3uOL|sMTt%r=n4fDgCC~0uBT8a*WI`&Fz@F$89iD!rF6Pz+~%1(^v2);u1Tla-G}m_Q)St84SIfe4rYU(={sM%DlyI)>!gKCXkjz__GkO45#Y3M=J^=?i>g{sb;vCl>9L-CS- zo$xfO1`OlnJ%0snq7^#`HH%ftipr{Z6=ii(J7=G@R{xC!KsTos$9C}Z%jfe`-C}w0 zrTL<|6d3(o8gnavgw{c1YNS91O$Y$6cR_uki=CgI-T$r$EoboeW&!=eraC5ygFUno zYnFm3ilWrjt)P(rHXM-_wZ{Se;s69PCfwWKcx6|zZAnRcc}i2|Jt@WDTOkHOvB~_v zUUyt1Ney<8Nt>CTaEaIfKw`W9Lhlv3G z$BcAO8Sgf;%EdKpQ7eVn2yNhtTfg;j$%ta$=Z8?h#V_{87q!@zHJ*zx1snjFm>&tO z(l~2Vo>&Py`ScxNK|^wqKrj%A-~&vj|I@kV4^rK*14qbC{9l;!k1-RvNJ zIxj8`W9(Mll^U3JjF~2K911|@40S+ZgU~@tA_F;BWwYw@M8rcLio1DY9+%=i1 zdB5(!;xAMSzv@nnU{8`E78T-!ZKV*1F1Zc4QOUrE)Jfy8h^`(Hr42^R!pXUAx&WRf z_I%I}J7Hn3#=4-GCL?n9LTpXgrbi}I8Vi>D|Vg%@M{D zOxG}n;%c@f06HF%<3hI4{Z%1=N*rwBL5UWcChFHBzxHz|cWNp$2X2D7cF5Z{14aWT64Elqw8xRhhtIpl>+ z-00}!9N0&cq0U`lBj{yIxD9aEWm%UWpXn6j@G@{(cd}iuCK#jX+%a>XV1`%dkSDSdu)I8|i~&L{w663V z!U$&vzjOdTun!!H$WaCtwrrw;)!MA1JCJU>U)g0{A72R%zTb(`TYc)(*MwSfg6D6s z4j#HL5owjppLtgQK27Goepyzyx(&NH(H$3zFl6+(wvyAEnZsyS?$WtItaY5%DkN}> zk~Jvr>~xhZ{w72&9=&yzd1MgzJIK@)@F(>dX2n6bZ3NgUgm!)f!RZ`rKO9cD|C=wb z{c}a%i(Y{Nz+`;}fw6<6xo%R))pwW*p6+l@ZpPfCMlT2fFiGvk5;Q}Fxpnw z6HX~)`nIly99PP2glp`)!g1*-IZTch2Ae!py;UpT zz$*3d(;cs0HNwRL+5i=s0Jb>?uV3de6g0Zj>swBZxa3G1a_ILXVJ0%wMgnTl%u%PR z31}u^k@LeITevph;zNr*vsPCM=wJuw{b+d9Y=`>qATR*UQU^O;^l5+?4I@CBQJkHZ zS#=1yU`pQ}E)0QpGjq`rxcOhB#9hyLZ)zUz!Ykq~{BjD;N%o}=p*14=oZV}0aUQ(1 z&6{x#N>HQCWz*{Kx!sdj?n1GNY5_#9oA#dPJ|Ly0MiZ)nW?&5Npz~zrpPBz11kae} z784)8Lp)Gu^Hqc^KxVYNPsg5EtqjJ`luc%V`NB4?{#_-U8EufrfhMnl3;B$og@3nE zXQwZ!3libM7vicoV}8`~`HD|LryLH`wC;IDWa;ta)@gdXpwcPcIZ8URj9!_`uh@?N zLYQ0(I!8EaT@U@ga^(Bbzu5p5n4qr{b+j$l$-C(XW}>x%9MJECHTbbZOm4BhL zJF^ciX{j$92;$4|J9PKYcIb(8L;RP&oiJiGaOH;T>Mcp-^aND3BOyBc`F~F1!URGI z$_j~rzkU0bU;Xjp1-M8y;EVH`23zYeiyPPRR6cxPcqS==!B#yXOQ7AZIf7>^E<^Jv zhyug{GQUxHN{MEo01gB0*$w%(I1Qw^GlG2fE$3Fu&@04fSU^*ufi5-jyX}MARvo z{u@Q*E#**mxt?U<@A!x`|2!bXTATf6r)3gEa4z~vY*&{a;&^Mm%-q6a${|A6FslCz zKTWjO(zZMN&|(bI#d0 zq4~jkJO0sh+#;T{P5(O9-pH3hKdD*>zJlN6e|x{0S?y**v}uH|**Ck-)Q>Y8LCtDj zU!MT^EhL_j!jne9-4@gk3y>uX#eNaB+XEL4P@v}*7jAwb1K9PVL*MwF7tkUL`)e>q zXO4u5k>qwH!LyvUsq-7Ac+JYUaI2Q)l=%72)o~uvPI%A~#(!h-xGNR^4ZTYu%5h6P zKJ3N8Uq67(@uf1xK$mTNd#*Z9)z}k7uH0A|x^8&~5kT4A_U>WArka+Yb{L-aa1@8v9-CjmWWOgaRY3#;vyXC(g2tn1p{JJr^_Of}WN;;2x7jnmPw zZb&HIhbLfV#_jxS%aez7uYGM?l`)UPk=y8Mzuqhxz zJa*$FL;rm&2bRG&HIii30}2flKYDV3@U_I(PQ->OZ_dm6Y{;8a^ty$*ZImao8qYNDWso3AiUtyUJ&0a-lYQhRvb_c+R7r7S7enzxcvRo1 zl=L_zEJH#l6s|Yixj|ew0XMD+NBFja;zYPioIVQ0hQ>twzxa=}uQD@6=~f zjnx)|?n<(Vt1!HyE)wZfr$*P4Qq<;>nV<3&8i3HzaWc<;_YObcroJFdPW&Vk1&EE3 zhSr`DRj~RaV2=}FIkN~mIQ?PQ%r<$~HCj~AI&?Rur6!KK00qjg)x0#dN0A8FYl@4V zWCPCvqjq_9a%UvEPf(0;vub!FBxayqzWSQ=SYJ>3$=lH`o)-*#4%FJ=AezBx z&q}ubJqq_POp2@s^DHl)r-fHj-*Iws%trB*_*G8Rs>T!xoF}nqL&|?pEas}Xx^2}o z`+J=}=-eO5k=_RBPpBNP02k_do;&pJ^aiZCcLHnjgZlv}ySex{&C>f^VYfMu*glv|1Kz7Zc? z%&^c9J{sbqy`N7GHzHH!7CdiP;D*kbxmSbfW}|7<3qvRZ)fe~ay^kQ1p#9As1^-qP zQWL|n67r_b@!Ne0vYPtn+^Zv*pX+Hpv3bkd{rve;*HrKar_kpMX{$sgAk%T-aVlv6 z1(Cd@D>0EUYT)mU2na2}#(Z}})Jl&0VgP+4SAGX-@&Ot^X;O5xw}G*d(;haN-N0ub z_yOwo7wW1YADrl!KOA)*>=Q?U?G#*JFj_I9#PS297t(((r8}>wCrsIBJ%+%}?oa*3 zMG}Hfu%Z(~0Y^^3yhHT9^_SU~MA&=Ktb~NbB~?{JU2>fdpR=>`%#w5$PU-yASE}Hu zPbeN+_{XKCi3w}|$)PL!YI$N&4(1P9rd?y_i;mx!ok`9VG5Sm=S@#o1iobL0TMADF zzP2|aU_OwG4U11K+LCZL7Q@3TrWGcCIrSB{6!2rh5S?}d)c=PGP*+kdLLE*^2mqAn zz-wkafxx)hr-6VSalenK6JY?wbd@Ex_Jm&71YWPBMlbBcJ4pyYyE#>;*XEn`R$H*J z?SaNi9wk~`{M7N0G%Bd%Y<+I3|IAR1FA=GKLWI2q{X~0ev^&%Mcy!mp1%|@(;gWy7 zaKqD1hG}F?(uD~$vCWKFN-74B+BI(+mfADj5@Nq@%0oVxewH3b-}$wF6SXHXQ4&b$ z|Akdk0{W6o0V_^@uu_ly$;&5%ZG=Mnl@W0*=u@#-!QZ`BX@{zSljQr=0k2tes?Jd_2Ww$e?nN+BnYl_^7DdF{!ge7bTfp* z%C#N_5h|=DEp{BGW-0)_dyIFaWNeAySue?&~Qn9%%XX_(gul~X!7x{FMEe6 zq*MtpM5`S9C--6FleG0IM=r3y8?q=39#Nmv1_+=!$IDPn5ko1{3%d*Ir9kJ#fYD6R zhQJ>~JEP%u-;j2r1*pZb<^uR4AqpUo7go}M*5>PJkQ)r>^s@qYxzC1$zsrp9(ZfbA zEjU_2$~lQ3~#2;;K5E3p0WH2 z*yct*o4^RCcA)|@$bu0aDF)UDCS#z8JAl^2oWAsjhSgVq(2kA!-uZuDK$p^in6I^- zk7}aCPLndb_Usin|Aw7>{=4v3Qf)rJZ)NuyEgU1NyNyUeRC8r&VuAD+j&=0VZ ziI2QG;4n*9e^LrMOCXeg|4-z>Fm{)Kloe|s2R17WJG+G&ztkJ(XH+wTyMJ6;4qg#+ ze9F{bNKZa<)*CJHV%z2h6UgN*3Qb;MCr15>0W_oFFpybHVZ*;fj&%zLZo7eH+Cs9l z00Gy|SV$$w+QVNJv7w|_i*NwZ<3z^CDJ&TcluplKw_ONc_zcfbHPo%!sQjBB)h+^U zzfU}TeeSDpBJ8!-aFf7((~WSd^%V31APL{zBmFoW?);ENX2|WRa{Ke?>F;y!-RFe| zWS>?cvT^@jBfdt_>UJKC8E_is-#R6&re`!T2+9VULiiX}AA$Vnh`&##6#D(VZfMWv zvp2*7LVo<<<|nTLXb#9yx-u!SXYsai(;~RAz@~p9?L)0vTISrQh6Mv<#svzW;Vx=zbGq zy)E3*LSNH5411YcwVGT&dl#$-B54!$7-KK@{@v+gIDGw#qV3*E6v7_CS%0gI3tK}* zYI9MOxRFp)ZU`=)L~y(1G(f-lj352O>?g5s%j+gNz9j6>Xp0_UK6bP827q7|U>Flj z5sDMoCqrfsdXK;{VXB*wqv&=t)w#5Q-4<)D&Xkht$CQys%`+idQLTG6fi%Z)e zSPh!2N{_Dw-0ep_?7;XZx2}D==>InO+eyJoWCO+mO4HuUzz?%cikNI;y6jgrqD4Uy z3a~r+g|fKt2?L`auU}(7eqK;Tl3q7weVWNRplOi8F(C?>x&Z3JiYK^gLATp~@8yO1 z>2t<;yuuDJgx$MN+bs+hw}5JcC`1AIZ}|{VjCo~}7xFS@KLXgiSmsNe82g@B6()l1 ztPlcTU^5a5B06(+XTxxM7i(RA^X*Do-?4sJ1U(Rdsz3897`HK#N=js4efVn49JnJ$`%Ak z@#i~dD<(MJ3srboD5;23u_zWM|c*JKj;u z^nE_K{AjpcVrt?lI&UL@-{e>m)aL8?fM!5*Wlu4n^I1SILk^f8`2UGla+b|$uXfYAUpIfi$exkN+ciWsMSEP0?LA{MZS_BTrwiar;QHxYGMEZ_2poiw=Eu{ zh==K~PM{92M1bT(n@viDlnhjg0ln}!!3ivLhXUcQ1-$>#ZT#gzH0k%MvWNz*dOPir zbr>dtj&OUOw}%~0cG;_S|9W1}?q(G{n;fpvhI?~fr=GUQ6(){laiFOc;XCa^>n9jy zJ&rHH;kKiB73`VxmN*;8XZAR)`KzZ1Crio6JCx!2{D22wkwLK|tTipWv(EeZL-A$9 zxThg?r8w={zX%pawq(Rzasfmy$<|>N)u41i2_RF;)!}3BVgN~0ZA0!$&cjC&td0fn z2cRFryibuLKwAtj#}y4|n*o{)7oA3UX{9jU&fzfB-NrBsFSk7*XU2VERI9+zu;{qg z&RuMvh_1j79H~He7u1wVM?^2fV`Rk#4K7JXHxJq@3<}6V>?0x^64(PxZ{O~H;xWMA zi;SH>mmb4*=E2t)Pe}OAe@PUP_zaHi@7`d;{*g*e&cpDWg-5 z6o<=^D+II=boP$BNGIoYg8^S&m7vmmceon@iM(tl;ob0j(R{4H_bxH~9!GPz0i>p5 zFDY(i@WJOt42(~}0x~r0N?C@`PZD?rkSQ4g>R>hvMYDH%YBFFzwTW+?G!Sb60En%c z66;*zM~QV^n>rwjK}OCCZvUR6;`Z=&mdGghWPBl53HXB52~;9h>OU6Rq&0Xif9W>u zIjYkU-ia)U+H+Dqpy{@(G`hHHXcE8LS(U{7HUVd6Fo%z3;!=0Mmk+=EsM5zf4Wdb{ zvKK=2=F(yLa4V#fRB@fMnKnH1QBfQRy6v;Y$A^dCQU!Id`=psDoAghWplhC|Ft`|K zL4EiK>?N8i$6zewJW_X3c7aU((Cj@R>wt241(ZorPd^r@0e>r|Q3kwRpSG`1bwg(O z$0-GXQ@4e5);emwhrqM{PvyH$uf+m*Rs3aMU&Kqz-(e_?T@Xkn5v?iIV=RgBeHW^j z0=qezQAjVZVb5`nccvih$RG5t{cAXWWcXm1csBeEdg(onmF_zh`FCm%4X<_TiMv_@ z+yq;pWHH;E9tZocF}%pqdLg_b#p4uz;b5#6gUdB8(o`Z%Yu1L~0w!luQgT^aV@3hZ z)RpwHZQ@|mz_*aWEkB*|>PA9&v@H*I;{6%)ldsp$!UHM_Mg|``&wi#;`v`>#4==z& zLr%7WDeq@g`6}{IbRDFJR}mJ)o}LO0B^SQfT%%Mt*?Ouv{aAt5Ya8ltPi4S7eVVJF z&QLBC8hVnti3@5Vmwh@KFjR-w1 zv`LMN06td`kgG)xX*y-?)Y{qf=LcH1oNZ@w;5|$1`h-7h7DcWnCeHeo zY#!q_s*&X`{9*9GVVu`88EFugLhugy>Wh!K*6y;a&Iv!)R)tY;Li20d@M?|`t00I& zF}dH`h~wgaNWKh!!}mf^gkGcV<+%(#EK&lj+<9eeb%42`G9w>ls1|bU*Wbto;ZSa% zKq#;y0~4s+KE!!jFW$o-lIwhC07bt{0u7!}Rd#1#%5* z+9&#N2m7AUHE;$x)LD9{&o4A)tYA)FJD!|F(Rwdvr}5En)b{||T($i-LC;Aj@Cr?A zy3JsO)C24d+N9ff7CAJ{-4~3te?23e$eZ7B<_P~XO^FgePp&vh% zj7yN00?+Ww;Y@)rxJM{>U?#-^g zS3hCwzoxgTHS=@4zD#1gtD{f<-{tOd;8?8wEM8qp_KdP{ONR`QXusv2P zoB1yTT^e4sp8r<7PRCE~4_%5?06k`NNjFeZXV`ujS><09SQW}mn6E-HIN$!cUXR4B ztw!@&a8kz9kl$E6Z{}^vQnz+&d-3nve|rpBM;CU>^I%F)Vux_H8=*>W9G% z+yh)_0HZ@z_AoCgW6aLt6`lUAdF@x&ULr>*5mWI39+aX790sxJRP@lF-JPDcpLYE~ zfA-aX>BE-wfY^QdgP`2j)2Ye}?T6B9mv5pwDF2fNfZKf}{cTXq#672xLP!x|G54CgQ8 zrCKoE=3sVaug3{bnC@*%Sz$5=7duP8Od&31=v>Z}0T{(Rs|ondkE5>o`uei9v1Ca3 zRRJ-G$-Sq5hl}U?TYOgOH)t2P)n5ik=cRR;yV}oJL|_EZ$g=6=eOwum zM?+v}JL~oE_G-=VQ;ju*%WtJM7zMI117v%D~eAw!=G2kz=`{ecB4$YJ=?#7_y9B`N21k6nlJJGk7HEmv2k zy57ze{2@)n?vxz829B?2h*OuQHS%w0nVZluin)yz>&(0sHkcf-`z^siK3&c60C-$* z%_MM-dYyH;`t8_XH{%4`_aZFnmGVt{;jZI9e7}!>)2aCouyCfAciB$0+_m{N$}vf` zKx*o71aTU6&r$j^$+K-D&Q<9{pWZj#Kw`*)bR}zA&Knkq!Ub8joi-nlTMCWO&(%+0 z1Tw1he*v}EGXH)5h5gmd(etn;dj)F`Zg3$MS#Grd`I$J!duwpm^#XZf$~ggi*01Gv z1=wBS{G9j$m``3Usr|z2!@c(VYcz&@+DA=(f*h@*82wlxC9H6hN}T1jq<5P@n^><9 zsHVv!z93?=VhGl+YC`3pFd&??d5vPHmiLUhLo~8~SE2f!z3k$Xt+l@FZju~t4mZY6 zVLKedcmlaj(+9P4^bFP|Su$DQLX-1^tX3dn+tt5+~bOxAe&4!}Sq_*ws%$7a9gd zWN|c+AJB!4l-3M6mOXYtilApRt#=ruG!1`(;Y^1iW9;*l0e-9gnJ;56xc@TeJ8qu; znSZ_=&=kxQ`Q;PZfO`52?bLN2&H)Hf$Hm3R<9@XV?w{}Nq(pyoq2Mc^D*bik_nWLB z5WR>?yy2~qU3pla_r?MQ<-JWK3hULV34$g1>EB4>G^tHJVvu!wSjWYCyf4#UuMH_Zq_7F7u zVRgjXI=oX-%=isQiZ1=e6;_>RVV^x9+YKWlsaK0bn} zp7^`w7ibo_xItghhV6`Yc}O87SnkT6-XT=^gSDdR^4da9_Xe5P+XZue_q~tEo_?0`~NwBOj z*j2J&YLP%5LtB@K%D*HCiz;n_IuGLIg==ZW0EU5Tq8vSM^0hxi@G~lzBsNW7zyh*f z7w$*EhC#}T_D4dQ{{+A-Hhu;2xDSXT;p4{t8RXv}!%i~&AIkineTn8A^e~fc*YR>w z>d7jrhJTAa@d1oiM;?X|gG(Ni9-qGS2}vT}M@i4TV`>fg{UtJZ#B=Rsy_UU$)P0AK zYuN+)$@{4%Bx!>cp{?&^pwGx6AGY6^#~oaWbqNCUO-T*)F%qjRSK9tCQM>vI;^b4L zT1zu-^@Iz)axyTd4$Mc=Sy)&|M;Zk?UcNFWq<-nt)bOHO+`j!kLB|+mLZKe6U0fRQ zEbyId8(oH4vs0IBd;Z-3~N1HQ$ z+5)!KkBk^gmj)iuod>8OSJ`pPheh!t`fDP7;|A^%fxRD-pRKj8Bkc-njc*>eEQJV> zTzzjw9%>W+J3s6Ik(B@Rx@mIxH#X8xVxHpNT;*NvTbK8rRR(O&wd`vrfNqn=u%LxQ z*Esy>T4CI;u4{^V#^5ykgI=${M6HGJ{lLl3)Ms=X7n!K)Y4KajJQ;&rmyprhc~nz| z&~!`)BP~b|W#0(3pT6#7|8BY(#2}&5u@9v~{Yy z)Z2gjUETYN>-5hSIw|*azNjni6q$%|4>F9Xf^v8$w8{3!zLMFq{)q9Y?qypWduI@F zgX3X)(BXQ3ae;a$M7KI6=P>`zK#A)h@~rLOLV5 zCWS5I7G!V23}>YIss@LL3v4YcK70H}efQ2`BUym=Lq@dg$A%Y$X^iTBYzmsA&D(i3 zMGHAc7}w%l^)#b7z@_#Ts+Ps7Gonn30Sleq{{>J-p6U~>P(_-8q$ThLd=zYu$neF? zegp)0qEUv&mR-#ZCN|rl58NMQ z^j3J$#-t$4UmqC8*gro%I1;}?CH$`(p{&E;OtZXhT3Hl68eUQT+oW9sokm6qcDDa@ z5*0{0&+r)eg|&4NGN%GQ<0?}ygW>A~P3`H2(3yeWso-jt0-9B4FBx4q3nDi6zp)O! zKMc=fRcM(ybsE=yJXuRwzvo5sH-`b<5lR)QssEFqzn`u4X*idLy;{_vPS-0vze4_A zK42Y2&vWZ@aq;5n%b=WF&1+RJ(@}1ud$K$-azIaG?^Bpy>p_fk2adYrYhppw(6L(Z zT<{OjAMo?=mM$*GY8ltvS2Zi%vU7}u*>V6M6gbA zdHI^5UsMh$3a-C@|Nh@%R=#?`)?8ktMGX?IzDr?s)9JY>q@7+`DGIS<=X!>WPfp%0 zcMR6rd&zrDaZGhgb4+*aGnA`>c^iDDxb<=2SZqdA(}h3->*lYi8pS z^=VbvFayb3iauR)#&i}l(zFRCHsBl~081wIyvf5^bpZV@2IQ%a5&d0LvfI{T z6-(JZp3S{3MhgHj`X`H$_d*DIJ7N3!a4$SLI4pVnVL?lE>!{?ny8)jK1(#vXeWyG#W*kxttk1}4|w{r5-FWGCDqAu8!RnYSfV z{qmJKHnH`F`ufhB9@Dj_OMS^GYds$ojuGtsJZTWTDD?a&k2IDrZMYk=ZQB`gx-E7) zz5N*DC|QV?auX}vR}G!U^(pk%we~fO*l<=eP6h2P4{$ztAF++zuJ`%<#s9?XBuVgg zLT2*z=H7uuv3G)Ca9+gU_4(vc6^`=flcI=|RGZGA)6^05=l{t&=9mEDeQ}SNZF>V@x4AR)K~ibP20NCs|77>HOlw(Qz~l``%l>GHWsIGb1aj znPE3~ca)0vLi>ARgSP}P5_;fvwe{z%4$@+GXEN2xTk$-Oq`7XJTOlVq?*w&|Y*?HZ zvs3mDNs8lc`LExXM;DO&@2)cRVK3;}-Xul+AOB6NM0D>ek;2D0PcPPz%`E#5focl9 zbE}$iN@VIpEktymTe3^kNq^zbKUb=62X-i(?F+uV_**{=tDdAwo}(9B{L?f zRk98x5LxoDNroq;Mee4X31C)nF(w+uE0wyc`m_;L8iq6jJq$&G{}=B85dO+sZ5yCQ zVMtxk@YHZ&{|dcllk^@I>pd-Up1mV`MV2et(;R+)@IzicNuNTYP-qZ1gTST?w5ZTU z2|S~qcM8LxK=7PkgyyARQG%PQ>4cdn41`AWI#lIuKL<3#BK_Y@0I}C-KVPHYwOsH` zy$7%8JsF|*s2~N=_jY9Oyn9!)=R*1>|%V zcu_;#U)8p=Q098@6VqBY0ocbht=2BBe0#`ts3~= zSI;!|1l$B4RbU7{ZQOq1G>7>L=(q{4BjC%B*P!1vd$)VbvMlTWfq+nu zf`Qx?f7g>dnR1*t0XEC5fT6ZK$VsfQ~rp4|1}`|$Gs11IQ9|XjbtUo0Pi0?00*7d z^+!Oom(p?s0Fbf&YfylnnFIg;1wdL%MAdEO)Z0Bxcfk3)>WF1sNGQ^D#(WcFB@RP0 z&6`b@Vu{TyJe9Wwn{H~#VFzQU{}HQe@3K?yg!(R(H|A7O;L+P+A~MWG zwU3PM$z{PnTHNrN@kNJTx(TlE+d5v4dU0lDVsUlc;Gc>=@F47IZ}+pOE|jDYp^&yz zEgcX3bpwPcM)q&TUS|MtHc2cUOqY{94z1zaz|f?fFds)kD^}&u4OIF>%D0Y$`)um0n?~tK3M`^RQU_mSF z$zsh*yQnupvua{_PF7p{IY+Ebg+}f7=RpPi+3R9Tzt8$Bk=yp@YHjDYO^;_TWBKL^10c3CEf9pA@JB7ULue{T- z;o@>fk%ixXlOa2m9d{u0Z$n~{T%JGshxBz6}i#=gU^>YVDW67Fm=;wZmv zyxr$848%2%Hxx?VcRcylr|dLQP7k<9Wj=#gJnzjai3Oiwt6`fDY+~Qt%w}2T+kgzVp^j%+}(y40(bPbKaJWLQxJOFJe$ILlV<%b^ru2NKDN-pZ#BK*z0g3 z?XuTH51(7RxdaoIjz7HTf%?rY$5GhbLy$KI-NVk~&5(Q3cTJoy2;(G zuAc{Hk@0eEY>^AWTg+~vc=vz51_J2qY4BSL_>2k8NWUyH2`$~$Q4OE4(i;JRJ17yr zzMZrNTIZ?z*7w6e1#6F;ajfnp$YtH*q|&whU(HVrrhEJ%Pt1B!{@>3t18?mF@R8NW zmGbiKdmBbf<8>DUcxH?_yc>7dXfkhvL*w4`vnZ&yAN+kzUZw(huj;@AAyDvWlMjS* z_(Xq~*;{a|z*lxnXAlNT{`5rf(@d<9gU@LRZCe&`VXle^Sha^EAk7*-4x_hkbTd1a z`2EO8*M5$Xv$3S-MbnVLI{bBiORmFA&eLJv05QO8obKm8-&;|)$|`zxJSs*bl!?=5 zP4{IZ<}L>^By}S{xK{5DM*9Mr>lM}dD_|IC8{=;Q+{I-zxQWPA0PYLF)eis zbp=>NL}_SbTkF1La_!jV$d#lkGKnQcb~XnWeN)n}RP<6$zJ-x+ka4+qE)nI90|0zX z^j1roUeD!FNKZPHUOs2`TZ*1FdS}D|{>$;}`&K3<^ur4InrHmn_s)M&5gzg#+PBmO zQwPmwiTFm3!I6JPk<@8o)on9R@lkIruC7&d`7XZ9ccv3k!9r7QO~(|tT_Fo>-2e&3 zr^B{xumk2zC>kNMm2BSh(8;=m#z zT+0@&w#Y0o6%LMa-4}&6EjfI158%>my}YtxURz>QkK|IshN^F9Ff`t6D1X$viZ$7G zlIzrd3=m}QaOU2)ELrTft?t8};!~m3<2xlYizlEz3(A&hXRxG5O9@X-Wf|P+#|XKX z|A&x?7h}Rzm%~e1AlYQQu1yXdr@Zr$GNxYV@JzLr)mltm{fc{@5t#vTp=q|EUl`$f z&KUUq4TWCj=k8yWP;wdCociZETi!dA&NR&$2TTd10)iC*vLF5`T-byN^rwOk9?{KN+H zUZ2xwk)q_;4tqQq1EpBD0hT*`v0=M|n_VQfZ-h=lya1S#-pU+kOerXW>c4-lAAcID za512UqLD(INidBZRo+;d+j?IKR9UDqZSJwL>X{Q_Bzb=ZDq|GJ#bvAd!ihZO#8XQV zF7JrF$tu5eyhAfI)uK!yZ>Xd@-da6)!ydrhE1hiw7&|jl8^3W7p{(sRKN@S~UjH-= z6K0EQ%PCF}zMT4_*y*pfoKiWOy zL0PuOBXwK_y|3{}6{gSH(eK#$gS(-Cl=V|~1E{_on6c}ZSi+2{(To2^Z}{Q|_^NV% z22uXNcJ&E?=?6G>-g}|z>c0v5fVopoJdH-L_f{NO)`RVEgq+^0&Mq}lIzPuM-2i9& zoX~kIja+vZ?2~#pCd2M(-sYZN8IyQQ!s_GN(Of(gphlTbwD4V91Ssow>I|gcR7k zjW!rncHYok)#O7(O}b&Sm7T!T>(w}^3=lSL^N5!b>h}UldcxR^0d;p~)!!qwAs5=z zz-+256QL+nxvl*Pfr}Fuo$VMP!J62pIV?eWzP8wDAkGX|K&(@ZKH?Z4*1Y~5&wJFKxsUPPj$+F?{Oe4ij zL+NTuaZiZr;3xHXd`=2WD_2;7BWLRmb>uM{%%p4me8?i`yXm6)s)N5<+oTszd{>{) z;S(q379pP~d7K5{lY1|>}#TN&OTyM!QuTsgrvYQ~&!Ja^h zE(2F|7{MY5i^pFs{Dci(GUje)+HnYXR1-@(wcemz0A{Q@zVT-~D52UNnzqUC2R4bs z@Eako;1y_1pfWuSmJ%;yKsHko91z~z&qdyj0eP6;?Ii2&Hom+;PG;ZCe9kr z%9-|^p|KOOo{iK zu+bFETLN?Z*?U%CXGI1>ofc`hQgs ze|p}e!3uxE6sAp7!p8P3t6h^WGYn$-rt32HNFf38LKR}4%U>Z40$LU+MBMx`-@%ck z_N8&8pV-`@m9zK~hb$smqoJSiH%tLs&lzjvEgqT=*TWcaqd^%u!c4Fh1T`o5)IZam zfJso=*&g)=nDrvScrbcNs+HM|3jc|k#r>K82*kR z+SkPZ4f7Fv@2hJ`LsLbM+^_` zqrotW`@+M`txg=1n-T~Esmr#|c!~gIg+J2bRb`U*G%^|9Mwpm@6k$b&*0`hp-E{80 zQpv5dd!<+DMKSz-yYUMk8UoxS%C?c^Td7I#ifhRtYfMHDaE)dw_G5}_5}IkY{{UlM zqXMx$;g`O=99<2rG-v^B=eZ1ZQVA z|A`|&_a?__Ry(l-(Tz#c+#VXMs#DuX8utlI1yd*-Qpc&lhg#mkE;!vxPb)IdHLk^? zkU(bpuCDPVA6_XJh=q{ncp4T>PthTMlw6Gn4_RNLKq}K3aWzv+Gcl=)MVog!mhO zxwz^b0#fu-slqG35=xKqOt<8cqDKA(N@;ID!pvG(S(TGRec+lhBW9C#3{A&ZqltOs z&11EZHiCIr>e96)+sVGV*bYB`jiK%|C9I9lo4$wl^Imkxlcl$6GBTsu7=*oFTp=;N zg)rOni;gw)zwlB`86j@(WSH=hKI2d?Ndy^eSh?rEg zeKA|i%Rfa_$-2de>AOO*U*BBzP4`XXuWlt?5t-4@0@JITqYGA_YFvlF&2U{TMl}S& zHMU=r-uxjh$Qt9(H-Iu)4?p+ozw@zxh-J&t#{(FlqEJ3$0V8f-zDM+L=y9XY%t8V5 zKDOD4&Q z-An{Q@UZkHoR_*~FC_@$mddZDriPK30}Ft9{h4#Z62;*vN=YjZx7OQN82SzZ7W6-b zY?42|b0x{m2O+)=FjAK&ro-Zu*~>FJvZ$Ryu4DWyw@j=T%!b6G%VjyL_KEXqL9qw&Tbq{+?%-6Uc%6k*Em~+go=5g;P+%-Wu!6*i`IFEvGIgA)db0L^v^-(@?eeOr8yLJJkAGWG(mIShL}|T7_|$neoo$Qz z{W=gbzDQdl!j6%zTjjA~lzH5Zkx6vKJ`-rFafUg0R?4q2!mMV!SYV zvmaETj(rHtpybdOCk~~V8~N>BOKY1jUg2~;AlS~vrh*&__^G}4T z^ObLX2@r0CrfA~-M+b4-g#D9kwhW1|Qmcls?3Z9?=>e^8;?A#0X>84hL$56%c#Pkw z<`=w*ZWUA>;L1oftlp=`MJG{AI9lBN5mgoC#vJ@oLWa?W_u=5@1qceaB#Mri&fuuY zc|VZv@%F-w5>0;dEWV1vXlU^0rpn`O4AL=KO@j{KiL%anyw)&5D8>(@R2((x&vTrw z<1~aBPdjfg;vFp829tcFI-f7ig%$m3NaTK#R4bVU8-D-#`Ay!An(Dpq>3%mdYG8N8 z!^;y%sT-9n-S1N=-n~kBXN;x0l(s*2iqAE5Zr1xF+v!pTv<2NP8ygLUR)SX(~-p9aM?88=;bdh z)VDC|1Q%(|b`xD-k%w}8snmA~+AV-Hjh`1-f4&(BSLD;}PfMtpte|nBe@NqKsC)e^TIVk#gx%IDqkrU#-?iP@{i>)LWw}Kk-IRZxFy? zXfPR~MYD32afy2$FI6}@Qa!3UkXA`XCK*J0p_}IbEHkLUprxffIz}pH|7pdX2ZLhU z6AeWs18gPPey~-5Hhdes8{Q}y%`Ml~pBGW1bImG^K_<~H8e%X&AJeK<2fesn*4yHs3W)WXs_>%U#+E^`=esFcQUU@%eDR-ee_M|F>EjiclIGGvS2H7v z^{B_Ha)(R+qEO|7Xq0=CegO#dD`7)BDS7)cgX`imZA8%|jdDpaein0%m1Y)eKem-! zLYK9?gLssYn6+vs7>$&yDU}J)asy4M4NdF?8M$=igx{)_JNkOWaHs^c=Ec1-cOT;4 ze%Ydn1PUkDR=A<89YE9eeeY_4uSG&RijsV^JWK3_PLr)X5nj#InmJ-MdM`4fC929j zlCsn2ngTmTmOGJfq|1Gr136Px)0I1C1%jDy6 z#I3z}4^#c#e4-2Pk?QRBVsGFMy0beTa_8k=1tcxh-vMBvtiY=^d}3?(0)2H6>k77VXjXJk~L&2L!ZFqraKjzf1i>W%;1V3$fow7et|r zYi2pv6mtHuhL8A){5w30gfcEmk8jY1;==skhd?Heq@KPIdV)dT);sc83=lt=p06TK zp7Dzv46|-6L-76E?L3B$5v-bgw43qEa4uTDlfwjgIaVeY$a z$|A?|4~fj8Rrft=1}k6mD;KKNtz7IU(uAdzRn_;C@P^X;U*bZu&#*Bn|6oxnUd1Idy2A@Ki*A)Q z+4Vd7)=n-W^w;H5-y|3%3bS!c9V(~{N4GT%;$QSNBGATwsBzLR6gZ9&Qy3% zHW8hgO~J=#!{~5V5O%6jNt4pfTPWpHoNiHiNiF$o%xedGTD?_w4CJZwk_bTpz$N7n z5^k#NXFJ(8(XAs_Yq6nrt%v1JyO3cqajHq5j)z~lK^QEy&E7(l9?!uTiqBBL_R#Q* zUsXl?jz?-{sel?g4Os}HL8^-Lh3yCu-wG;8x-ZJrQ zDnb7`K;q>?50=LNI;b|16r(s~#UHrqq1oU-X!|_aR`WOOIzLFdYw#>x4TC`)Fh+&% z$YR+))b&W*{FD-nfw8@pTJE98a#t1EYj7(-h%g0dUkn{2R_h^yN-e|1QpZNP5M;&6 zE)`Sxpggve5L$vF2=*sgJSnw>Se zsq5Usy8Q*3TIZx1hk3V*C5}40{W#ZHglXeia&h%MT&W$gZ-t-lJ;}_QjUef!gt}GTO>JS_MezR1#)Nd~1+0Nn z=|?Xmcs(2mYN_A_@RprA;$Mumsw0t-kiZIrsyTOYKnn4y9JBD@U&YddJP%E8as+H+@BZ`jh7ILL&jnG-jLv)=06^bQ9W_l2oQQw^m$n&o z*HSmlW`>7_$}RYbB0SDD%Y4T;LkcR*NP$X-O56Qa)iP5f?jP6*Wk`=uV#O8-bJmdN zhW(zzT)kld;g`iw+})i^r|o3&qFdsNwko~1`bjbtHRvb#;3Iw|Ji3+#4&NU9(13=n z-@q~d<;sFBNFiD8_~VO)o@0zoAIlB@34{lcNzO;!%&=E7Q3M5L)q~0_2p#dAa`PDc zPrG<=7=GcdP4UODUG+0U-UgZ~yMr|vZiMKNu4gv6yVmOH4^@bX(!ird3y;_r1YaKCNaE}Y0fRt_IjB^WsCB~)$e-)z zuHgL~Y2eYU&wAot*FSg)4>ChPvQ&b7Q0Q&y@4k}Gt2T3UOW|H?;aThMyb5o(n;yFD z?`kb>hliE>JN1GA7+96NpHh|Dyf<&tCDjB)B3?IDF}9+Mlh`a{AfMNX;I;oLF)^Y6{Xi!12R`;M3|Q}?}Fc)UDR?+{!ywV9z! z-_F(r1dx1U1k|T}N^MKwBm!Up75U?3)s|fAMJ9y;7>rSQkngx{{c`r+Liho;i5aM) zaI#-Vn0RZ?otw3$=mN|`V}y+tUJ*sO&PjFd4SsNz(=w}Wlv&$^UM)`s2ns$gMN;HB zL})&=HrMhF;01Mpq*N&K9z}Y+F_Ew)3j;%aUzpM)D0LslH~*ytXry1Fzm>as18Bnw z$@&=(lR-kCM=z2^i0Sl5`(kX`w)TTe@dm}DhHwA?4Eg`O00XsjunX3j{<520Nbo#{ z#L`QqNRX$eK7v!?&_suA+?VSPgUA%~I(UXZd$Oq)Ypi;R!3Afg*;i_rjzfMLWCB4W zH7GY&BYx`FuC0|o#+2t)KIZLxLF>&{oD{GBEQ~8H>UUP;hMDiMiGft4u4a`v>M zz&6Vf^U@4MchEb5+#KU)AGD%WNU^mKx7OZmu!&LISD9mo1E*-&0~aJVu1YhzE9ps< zro+}~(wayfmTIv13Df-5@+#Cr@?zRG+aI^m$8qKU%roFf76AUMD;K%L@CWvf*cB|j z-Ht!G5R%z!paw>~TxB{n80CFyf|X#IC97M z9Q%(ej@U7dlz~DZX{hsCsOZ6n^yxT3rS)c^34F+tWJImUu8chjt0tZTL7r#f*~KMw zd;5T` z=r2QaX*|AYDV18kg|Qk}G^Kgwu?}H3p5mR|o&>6Tx70NsmJQ(H(M&Hc-poEFVW4U` zcUxF<6rt{noHCMrzh^|-!dbJ=INw>HUUpjY2_A7}C;I?912Fo&M5r#<%-McD%oVK` zpYLUZCnvu~MMeFQgx&kW*PIX1MwXJ9D7V7|5vRn9^?u#<)NdjGB1C1+P8L+P9xC#w z*k!%>@2Q=LM>Z;a_ZFTtRdC^QSkiJ((tH%W?5n(mZ=yPXZ59{YQDFkVCafb>gn%7L zyp?Lel3aXLuO9nnP~s)X$qRP#{c0+{n#h1~RzFDr1e4<^QQ|G3wXw07aiisl#oRWP;(z+ z$Lh?<#bhW)L{;Y?`fXbHTY_4i>oMgouLvO!u55!9*JkTqBH(~ctVWM6{1^SNg7oGY z+Qhf7#w&ZV=yE$}@6G6E1O~)D;+*o<@>#`|>#S6~dYxUBxT5M6+Hj#)#;vfq7X6F6 zrg^g`HdMj>Fo_S_P3J@X!g#jbh_Jz8TZrL}e03N2`j4Njy{53F5;}P=Uy*fj6O^?b zp+lW%I4bsxx>h`|G@XQ;>cTh4`ulSj#aA`wu*G^^OQx$1#6JXB*VAKkxCl1 z>fz|IT<9->Ly``^tB9G@SwbxcYk=BYM_kyn3;M0l#CBl(ta2hlPM88AK3>ASGIMv> zKnLcQb{M9rGz1PCgLXRd$bKcQ5(uvQtd?{p#2$VE+=O{xqYGtQrt2-VG6YSd654dA zv;4Gw9z?ZmA|!`qVt;;5*1etj91oh4B4E%AAypTPv?)+8{Uti%mLY8*<>Xyy;m`K4 zVpTOSiP(NKD|`8)-@`w{ zfQO*-T|bLP&_6RtYRa-(-0oYXY?VIxH7hEwd&4vS0g213@+6Mr){JM47}KxAi{EbNpw60i(d;LMdNNOG1}IBKuNE;w!J%}>lvJL1pG+@ z8gFl&y!CC!k8Jq1jZwiEorST(@nGIBvFqg?10q@twF9J)=c%}_pOx`jy5`JkVj=eb z=-0&)Z^1l2YFUts(PBrEy+-_#ara-K~*7iUK&a-`wCfotbZ( zI8=XW!1^VkQ^lSOb60p4&R&%(h4IE6|76l|J@kOxW)u$1z^9jM9!ABjcAr!Cx}Egg zigu));KVXT!c!Q`)eD*xf-SazCJGXahAghFoy=zeh=_>?gjl@{1+?_+D(D3nFTb(* zM&i%8ZgEmr6vx-kx$T`zJWMX0iEPG;>`8q4&Io^IEVL`-`xt0O5Vnt@T0dXn&?WLF zx`hm+ip!Hf@6s*Z!Gc5oI{3xskI4IR-^1IYZxlk;GfIMsw$9^7bAu>K3ABYt3W4Wc zH_TLeF~iYUfW|jxT$;p@sK9ZU23pHp8FpzY*boI+b*feul&zfiyNsn;3ntoU$KhB$ z`&z~rjI<~bcdaap<{mXZuKfHRTe_~CFr)^tS|R&?QVOEYZ~bOMdxN?r@IRKG%2O|b z1v>o$S+fQyT^K;CXtyM^0q(VD9HsX?LtLiFx zQ>H+AfTQ?9TENqKpl@;$!oA%_dy6TWLH2m}Z{3zzZ_DdgbT9k9vQXyw_6&I|zw!b* ztvJ=6WNu+_=B8sp8(aUz9U&I+?o@faAXZ|BL)Z-FM641q%*6ze3p783j=4D7p zYP}rn8E=k@u6iwp#Tjdrl`Ma!` z4+Y==UgC-Na`x}~((_TdR2uDUxI~=aY%4O>9!9qN$@i#Ryq5}71+Y7HfG_f%I2tjF zHry0$-WNK7gdr<|`&~MS7ck>&Gvu-p8p~9s!i{79`OZ6KN&yT~E0ykZjybsV`H^eC z*C6D1$4loJooKpA%wwB0b-s}#P~zBOq12arLcMGar-xxm#FXQY=>Ss+@A!i^cAb^1 zdoH%iuRYO!ST+hRYB%`6#o(M{$ZN4$OWCE-6zgKHeF%Y$jhzn|h=Ov5wq1npvW1}U z3lQKwmvmVQv?(;mKpHe9E(H~nZ=P>)egzBeMdjJO8BHzvIQ78cN0C5$GQTQ6WP1r5 zWIAGnqLYIU0*TKaLQc8$dt`e1=XD1L&Ww_r=Z{+MM0SeeK9ra4M3x|@7t#j6q#FTq zZ8Q#wEt8;#RA$3n)zfVuvgDrPMXkL!RDvMx>K445ZK-@=%c&i$jYWn!d-alSP6NcZ z)GW?ls+)_>1?;|8xjAu}=iRjKqVqN>aNbY24**XMt8dRw8B@e5*w;+1E zy9B#T86b7qJPfHO-#T4+rAqbgFK-tlw%KmFoZ#!Qc0TNE+pIQ@sHFF)aBp`$46x3Q zv3BV$&2=~nT9oKp$TWVN9Jb!>bdAI%WW~|;jz=BmT*78zcal+TmRm*D-35l6t8q5x ziIgrg+>vKhBX&7X|{w>?#7F35~1`#R@UCSoeYZkx%+na=}&U$Y;M&h%ctu|Pt zx|UtLj>29PkiP;yW;x^J^mO7>u-$z;Iry_pw4(-F8nUREE!(^Tu1L1!esvhY>9U&> z$3E&Z$MPNO)8nY_68^zTCGBt3B#nr_3$qZY0NuUir8Doosn_MZ4Sm}Th_8>Gt80@d zzgUC=Kg-o06@~4NbMLAT{eKx|$W^{`<^3cDu7U}fwr-JQ$5fL%mC=n;6K+1qNN*SE z(~JF>O$8b&QJYobjRp_7cd z#jXeluz6TXJw|YytMfIcr0vW{ktn!tEafw?*J9ho{<`=5dWn3gpbacWeJGhn7#f*i z+LUSCuH@5w)Cuw0OMpe10^JD?0Voz&`T)o}MItwAQ_|EKrb1x(PRst|Urhma8{~d3 z{`{qy)$!l_-Q8V5(}u_KgNlL>O^)YT%bfN1`BLwz#GL*>bg=o&-5vMdj}{k7%Y&#U z-Nt_%_?)YCthMfa+JURGC}|b`eI@nXeZFwe3@o5LNk$s#HN@D=Mbh|HjzhH0_PT?S zRJ!&zHcBEHYOF8F_$--TtE(HdoiF>Wi~DCs;8xjG7V(eLN9v~0pa{ipvj${I9*Syb>U{jtEQ+_oX(P+n;OHT=#YsR(XC z^>3%#=EW6=aDtS7AK(hu8&6#e$11Ql+Ph@_*1y&1|2Z& z__0P|@)_Lo&OVb%S1S!x_~4gq^tzD|X{wBgpD-{mh?Fu|@$zEafH8dO%&_L#b^@w= zc8k~Fg_Ne6IR+6y9X}3^a*j6@oKHBPW9=-)(?0C?Zc%KZZ0Z#Gy)Tc~$c;8__`3G~ z4<}|2S*wNLd{oyz)E|yv&;|V(tQL3fR_)BP54Qi!6#TBLifyYL!wQGxKnav)*v19~ zVF2HVLZIe2dkDU8XNXhAe-!AdZ3Hp_W3?ZJ;ZpYWAatSz8@FtPscVX&Ae+@U7IVv4 zp(z++l$hP_TIT&*jwF=>)n_|v>p~Ou@Qn>UOACunLk_>{>JkSB2hG=8ot;)~nr3h{ qbp0C}xyS!sv;P0t_z&&g$;t7uPtd>gn*a9)g0%Qou}V>cfd2tfLaIan literal 25377 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 diff --git a/app/static/logos/64x64.png b/app/static/logos/64x64.png index 2d8d61b8efc7b6ece2b8333ef18cd631e75ef80f..77fe2a72c18be8ac2d1de0140ae665f1e82346dc 100644 GIT binary patch literal 4779 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 FV1jxK_(=c& literal 13966 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 From a1f0bfc6f609ac287c8b99b4746f1581e483495e Mon Sep 17 00:00:00 2001 From: Brendan Forster Date: Tue, 6 Jul 2021 17:57:09 -0300 Subject: [PATCH 41/48] [docs] add new section for org repos (#552) --- docs/known-issues.md | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/docs/known-issues.md b/docs/known-issues.md index 9ef17a73c19..610d5001f7d 100644 --- a/docs/known-issues.md +++ b/docs/known-issues.md @@ -14,6 +14,7 @@ - [Authentication errors due to modified registry entries](#authentication-errors-due-to-modified-registry-entries) - [Linux](#linux) - [I get a white screen when launching Desktop](#i-get-a-white-screen-when-launching-desktop) + - [I cannot access repositories under my organization](#i-cannot-access-repositories-under-my-organization) # Known Issues @@ -244,3 +245,20 @@ Check to see if there is an `Autorun` value in either of those location. If ther Electron enables hardware accelerated graphics by default, but some graphics cards have issues with hardware acceleration which means the application will launch successfully but it will be a white screen. If you are running GitHub Desktop within virtualization software like Parallels Desktop, hardware accelerated graphics may not be available. **Workaround:** if you set the `GITHUB_DESKTOP_DISABLE_HARDWARE_ACCELERATION` environment variable to any value and launch Desktop again it will disable hardware acceleration on launch, so the application is usable. + +### I cannot access repositories under my organization + +The GitHub Desktop application is an OAuth application, but this fork does not +have the same permissions as the app does on Windows and macOS, which manifests +in a couple of different ways: + + - the "Clone a Repository" view does not show all organization repositories + - pushes to a repository owned by an organization may be rejected with a + generic error message + +The root cause of this is organizations by default will have "OAuth App access +restrictions" enabled, which blocks the GitHub Desktop development app that is +used by this fork. + +**Workaround:** ask your organization admin to [approve access](https://docs.github.com/en/organizations/restricting-access-to-your-organizations-data/approving-oauth-apps-for-your-organization) +to the GitHub Desktop development app. From 24f7c776ab5f8e38308bb4384e22740bc7b5dc91 Mon Sep 17 00:00:00 2001 From: Brendan Forster Date: Wed, 14 Jul 2021 11:53:03 -0300 Subject: [PATCH 42/48] introduce abstractions to make Flatpak integration easier (#555) Co-Authored-By: nullrequest <30698906+advaithm@users.noreply.github.com> --- app/src/lib/editors/found-editor.ts | 6 ++ app/src/lib/editors/launch.ts | 22 ++++++- app/src/lib/editors/linux.ts | 8 ++- app/src/lib/helpers/linux.ts | 93 +++++++++++++++++++++++++++++ app/src/lib/shells/linux.ts | 26 ++++---- app/src/lib/shells/shared.ts | 20 ++++++- app/test/unit/helpers/linux-test.ts | 30 ++++++++++ 7 files changed, 190 insertions(+), 15 deletions(-) create mode 100644 app/src/lib/helpers/linux.ts create mode 100644 app/test/unit/helpers/linux-test.ts diff --git a/app/src/lib/editors/found-editor.ts b/app/src/lib/editors/found-editor.ts index a2c7f2bb5ad..c6a54597cc5 100644 --- a/app/src/lib/editors/found-editor.ts +++ b/app/src/lib/editors/found-editor.ts @@ -1,5 +1,11 @@ export interface IFoundEditor { readonly editor: T readonly path: string + /** + * Indicate to Desktop to launch the editor with the `shell: true` option included. + * + * This is available to all platforms, but is only currently used by some Windows + * editors as their launch programs end in `.cmd` + */ readonly usesShell?: boolean } diff --git a/app/src/lib/editors/launch.ts b/app/src/lib/editors/launch.ts index 1d098f3843f..d20be766e48 100644 --- a/app/src/lib/editors/launch.ts +++ b/app/src/lib/editors/launch.ts @@ -1,7 +1,25 @@ import { spawn, SpawnOptions } from 'child_process' -import { pathExists } from 'fs-extra' +import { pathExists as pathExistsDefault } from 'fs-extra' +import { pathExists as pathExistsLinux, spawnEditor } from '../helpers/linux' import { ExternalEditorError, FoundEditor } from './shared' +/** + * Use a platform-specific pathExists based on the platform, to simplify changes + * to the application logic + * + * @param path the location of some program on disk + * + * @returns `true` if the path exists on disk, or `false` otherwise + * + */ +function pathExists(path: string) { + if (__LINUX__) { + return pathExistsLinux(path) + } else { + return pathExistsDefault(path) + } +} + /** * Open a given file or folder in the desired external editor. * @@ -35,6 +53,8 @@ export async function launchExternalEditor( // In macOS we can use `open`, which will open the right executable file // for us, we only need the path to the editor .app folder. spawn('open', ['-a', editorPath, fullPath], opts) + } else if (__LINUX__) { + spawnEditor(editorPath, fullPath, opts) } else { spawn(editorPath, [fullPath], opts) } diff --git a/app/src/lib/editors/linux.ts b/app/src/lib/editors/linux.ts index 91fd4ecbe14..04c9fb4e45a 100644 --- a/app/src/lib/editors/linux.ts +++ b/app/src/lib/editors/linux.ts @@ -1,4 +1,4 @@ -import { pathExists } from 'fs-extra' +import { pathExists } from '../helpers/linux' import { IFoundEditor } from './found-editor' @@ -34,7 +34,11 @@ const editors: ILinuxExternalEditor[] = [ }, { name: 'VSCodium', - paths: ['/usr/bin/codium', '/var/lib/flatpak/app/com.vscodium.codium'], + paths: [ + '/usr/bin/codium', + '/var/lib/flatpak/app/com.vscodium.codium', + '/usr/share/vscodium-bin/bin/codium', + ], }, { name: 'Sublime Text', diff --git a/app/src/lib/helpers/linux.ts b/app/src/lib/helpers/linux.ts new file mode 100644 index 00000000000..73fe58887fe --- /dev/null +++ b/app/src/lib/helpers/linux.ts @@ -0,0 +1,93 @@ +import { join } from 'path' +import { pathExists as pathExistsInternal } from 'fs-extra' +import { + ChildProcess, + spawn, + SpawnOptionsWithoutStdio, + SpawnOptions, +} from 'child_process' + +export function isFlatpakBuild() { + return __LINUX__ && process.env.FLATPAK_HOST === '1' +} + +/** + * Convert an executable path to be relative to the flatpak host + * + * @param path a path to an executable relative to the root of the filesystem + * + */ +export function convertToFlatpakPath(path: string) { + if (!__LINUX__) { + return path + } + + if (path.startsWith('/opt/')) { + return path + } + + return join('/var/run/host', path) +} + +/** + * Checks the file path on disk exists before attempting to launch a specific shell + * + * @param path + * + * @returns `true` if the path can be resolved, or `false` otherwise + */ +export async function pathExists(path: string): Promise { + if (isFlatpakBuild()) { + path = convertToFlatpakPath(path) + } + + try { + return await pathExistsInternal(path) + } catch { + return false + } +} + +/** + * Spawn a particular shell in a way that works for Flatpak-based usage + * + * @param path path to shell, relative to the root of the filesystem + * @param args arguments to provide to the shell + * @param options additional options to provide to spawn function + * + * @returns a child process to observe and monitor + */ +export function spawnShell( + path: string, + args: string[], + options?: SpawnOptionsWithoutStdio +): ChildProcess { + if (isFlatpakBuild()) { + return spawn('flatpak-spawn', ['--host', path, ...args], options) + } + + return spawn(path, args, options) +} + +/** + * Spawn a given editor in a way that works for Flatpak-based usage + * + * @param path path to editor, relative to the root of the filesystem + * @param workingDirectory working directory to open initially in editor + * @param options additional options to provide to spawn function + */ +export function spawnEditor( + path: string, + workingDirectory: string, + options: SpawnOptions +): ChildProcess { + if (isFlatpakBuild()) { + return spawn( + 'flatpak-spawn', + ['--host', path, `"${workingDirectory}"`], + options + ) + } else { + return spawn(path, [workingDirectory], options) + } +} diff --git a/app/src/lib/shells/linux.ts b/app/src/lib/shells/linux.ts index 47a5c7f038c..393e0bb7e30 100644 --- a/app/src/lib/shells/linux.ts +++ b/app/src/lib/shells/linux.ts @@ -1,8 +1,8 @@ -import { spawn, ChildProcess } from 'child_process' -import { pathExists } from 'fs-extra' +import { ChildProcess } from 'child_process' import { assertNever } from '../fatal-error' import { IFoundShell } from './found-shell' import { parseEnumValue } from '../enum' +import { pathExists as pathExistsLinux, spawnShell } from '../helpers/linux' export enum Shell { Gnome = 'GNOME Terminal', @@ -27,7 +27,7 @@ export function parse(label: string): Shell { } async function getPathIfAvailable(path: string): Promise { - return (await pathExists(path)) ? path : null + return (await pathExistsLinux(path)) ? path : null } function getShellPath(shell: Shell): Promise { @@ -164,21 +164,25 @@ export function launch( case Shell.Terminator: case Shell.XFCE: case Shell.Alacritty: - return spawn(foundShell.path, ['--working-directory', path]) + return spawnShell(foundShell.path, ['--working-directory', path]) case Shell.Urxvt: - return spawn(foundShell.path, ['-cd', path]) + return spawnShell(foundShell.path, ['-cd', path]) case Shell.Konsole: - return spawn(foundShell.path, ['--workdir', path]) + return spawnShell(foundShell.path, ['--workdir', path]) case Shell.Xterm: - return spawn(foundShell.path, ['-e', '/bin/bash'], { cwd: path }) + return spawnShell(foundShell.path, ['-e', '/bin/bash'], { cwd: path }) case Shell.Terminology: - return spawn(foundShell.path, ['-d', path]) + return spawnShell(foundShell.path, ['-d', path]) case Shell.Deepin: - return spawn(foundShell.path, ['-w', path]) + return spawnShell(foundShell.path, ['-w', path]) case Shell.Elementary: - return spawn(foundShell.path, ['-w', path]) + return spawnShell(foundShell.path, ['-w', path]) case Shell.Kitty: - return spawn(foundShell.path, ['--single-instance', '--directory', path]) + return spawnShell(foundShell.path, [ + '--single-instance', + '--directory', + path, + ]) default: return assertNever(shell, `Unknown shell: ${shell}`) } diff --git a/app/src/lib/shells/shared.ts b/app/src/lib/shells/shared.ts index f09bfdfa774..4ec05019ac8 100644 --- a/app/src/lib/shells/shared.ts +++ b/app/src/lib/shells/shared.ts @@ -1,9 +1,10 @@ import { ChildProcess } from 'child_process' -import { pathExists } from 'fs-extra' +import { pathExists as pathExistsDefault } from 'fs-extra' import * as Darwin from './darwin' import * as Win32 from './win32' import * as Linux from './linux' +import { pathExists as pathExistsLinux } from '../helpers/linux' import { IFoundShell } from './found-shell' import { ShellError } from './error' @@ -72,6 +73,23 @@ export async function findShellOrDefault(shell: Shell): Promise { } } +/** + * Use a platform-specific pathExists based on the platform, to simplify changes + * to the application logic + * + * @param path the location of some program on disk + * + * @returns `true` if the path exists on disk, or `false` otherwise + * + */ +function pathExists(path: string) { + if (__LINUX__) { + return pathExistsLinux(path) + } else { + return pathExistsDefault(path) + } +} + /** Launch the given shell at the path. */ export async function launchShell( shell: FoundShell, diff --git a/app/test/unit/helpers/linux-test.ts b/app/test/unit/helpers/linux-test.ts new file mode 100644 index 00000000000..df18564e441 --- /dev/null +++ b/app/test/unit/helpers/linux-test.ts @@ -0,0 +1,30 @@ +import { convertToFlatpakPath } from '../../../src/lib/helpers/linux' + +describe('convertToFlatpakPath()', () => { + if (__LINUX__) { + it('converts /usr paths', () => { + const path = '/usr/bin/subl' + const expectedPath = '/var/run/host/usr/bin/subl' + expect(convertToFlatpakPath(path)).toEqual(expectedPath) + }) + + it('preserves /opt paths', () => { + const path = '/opt/slickedit-pro2018/bin/vs' + expect(convertToFlatpakPath(path)).toEqual(path) + }) + } + + if (__WIN32__) { + it('returns same path', () => { + const path = 'C:\\Windows\\System32\\Notepad.exe' + expect(convertToFlatpakPath(path)).toEqual(path) + }) + } + + if (__DARWIN__) { + it('returns same path', () => { + const path = '/usr/local/bin/code' + expect(convertToFlatpakPath(path)).toEqual(path) + }) + } +}) From 1a0dbf17dc8d608105d41ce858202eef4f31278f Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 19 Jul 2021 09:15:17 -0300 Subject: [PATCH 43/48] Bump electron-packager from 15.2.0 to 15.3.0 (#560) Bumps [electron-packager](https://github.com/electron/electron-packager) from 15.2.0 to 15.3.0. - [Release notes](https://github.com/electron/electron-packager/releases) - [Changelog](https://github.com/electron/electron-packager/blob/main/NEWS.md) - [Commits](https://github.com/electron/electron-packager/compare/v15.2.0...v15.3.0) --- updated-dependencies: - dependency-name: electron-packager dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package.json | 2 +- yarn.lock | 154 ++++++++++++--------------------------------------- 2 files changed, 37 insertions(+), 119 deletions(-) diff --git a/package.json b/package.json index 7769bd7fda7..df3d71da658 100644 --- a/package.json +++ b/package.json @@ -172,7 +172,7 @@ "@types/xml2js": "^0.4.0", "electron": "=11.1.1", "electron-builder": "^22.11.7", - "electron-packager": "^15.2.0", + "electron-packager": "^15.3.0", "electron-winstaller": "^5.0.0" }, "optionalDependencies": { diff --git a/yarn.lock b/yarn.lock index 8bcc318f3bf..c1e0232f399 100644 --- a/yarn.lock +++ b/yarn.lock @@ -315,7 +315,7 @@ ajv "^6.12.0" ajv-keywords "^3.4.1" -"@electron/get@1.12.2", "@electron/get@^1.0.1", "@electron/get@^1.12.2": +"@electron/get@1.12.2", "@electron/get@^1.0.1", "@electron/get@^1.12.2", "@electron/get@^1.6.0": version "1.12.2" resolved "https://registry.yarnpkg.com/@electron/get/-/get-1.12.2.tgz#6442066afb99be08cefb9a281e4b4692b33764f3" integrity sha512-vAuHUbfvBQpYTJ5wB7uVIDq5c/Ry0fiTBMs7lnEYAo/qXXppIVcWdfBr57u6eRnKdVso7KSiH6p/LbQAG6Izrg== @@ -331,21 +331,6 @@ global-agent "^2.0.2" global-tunnel-ng "^2.7.1" -"@electron/get@^1.6.0": - version "1.7.1" - resolved "https://registry.yarnpkg.com/@electron/get/-/get-1.7.1.tgz#41aa60871b9d7e225bbe68135012f88a9ef87012" - integrity sha512-+BOIzkmYbe+oOBGqSByq8zXYXCFztccoymR3uNkvX5ckJ/5xU+4peVyEvFyH6+zfv58hCo99RxgIpwuaMfRtRg== - dependencies: - debug "^4.1.1" - env-paths "^2.2.0" - fs-extra "^8.1.0" - got "^9.6.0" - sanitize-filename "^1.6.2" - sumchecker "^3.0.0" - optionalDependencies: - global-agent "^2.0.2" - global-tunnel-ng "^2.7.1" - "@electron/universal@1.0.5": version "1.0.5" resolved "https://registry.yarnpkg.com/@electron/universal/-/universal-1.0.5.tgz#b812340e4ef21da2b3ee77b2b4d35c9b86defe37" @@ -3574,6 +3559,15 @@ cross-env@^5.0.5: cross-spawn "^5.1.0" is-windows "^1.0.0" +cross-spawn-windows-exe@^1.1.0, cross-spawn-windows-exe@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/cross-spawn-windows-exe/-/cross-spawn-windows-exe-1.2.0.tgz#46253b0f497676e766faf4a7061004618b5ac5ec" + integrity sha512-mkLtJJcYbDCxEG7Js6eUnUNndWjyUZwJ3H7bErmmtOYU/Zb99DyUkpamuIZE0b3bhmJyZ7D90uS6f+CGxRRjOw== + dependencies: + "@malept/cross-spawn-promise" "^1.1.0" + is-wsl "^2.2.0" + which "^2.0.2" + cross-spawn@^5.1.0: version "5.1.0" resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-5.1.0.tgz#e8bd0efee58fcff6f8f94510a0a554bbfa235449" @@ -3772,12 +3766,12 @@ debug@2.6.9, debug@^2.2.0, debug@^2.3.3, debug@^2.6.8, debug@^2.6.9: dependencies: ms "2.0.0" -debug@4: - version "4.1.1" - resolved "https://registry.yarnpkg.com/debug/-/debug-4.1.1.tgz#3b72260255109c6b589cee050f1d516139664791" - integrity sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw== +debug@4, debug@^4.0.1, debug@^4.1.0, debug@^4.1.1, debug@^4.3.1, debug@^4.3.2: + version "4.3.2" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.2.tgz#f0a49c18ac8779e31d4a0c6029dfb76873c7428b" + integrity sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw== dependencies: - ms "^2.1.1" + ms "2.1.2" debug@^3.1.0: version "3.1.0" @@ -3786,27 +3780,6 @@ debug@^3.1.0: dependencies: ms "2.0.0" -debug@^4.0.1: - version "4.1.0" - resolved "https://registry.yarnpkg.com/debug/-/debug-4.1.0.tgz#373687bffa678b38b1cd91f861b63850035ddc87" - integrity sha512-heNPJUJIqC+xB6ayLAMHaIrmN9HKa7aQO8MGqKpvCA+uJYVcvR6l5kgdrhRuwPFHU7P5/A1w0BjByPHwpfTDKg== - dependencies: - ms "^2.1.1" - -debug@^4.1.0, debug@^4.1.1, debug@^4.3.1: - version "4.3.1" - resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.1.tgz#f0d229c505e0c6d8c49ac553d1b13dc183f6b2ee" - integrity sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ== - dependencies: - ms "2.1.2" - -debug@^4.3.2: - version "4.3.2" - resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.2.tgz#f0a49c18ac8779e31d4a0c6029dfb76873c7428b" - integrity sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw== - dependencies: - ms "2.1.2" - debuglog@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/debuglog/-/debuglog-1.0.1.tgz#aa24ffb9ac3df9a2351837cfb2d279360cd78492" @@ -4281,13 +4254,14 @@ electron-osx-sign@^0.5.0: minimist "^1.2.0" plist "^3.0.1" -electron-packager@^15.2.0: - version "15.2.0" - resolved "https://registry.yarnpkg.com/electron-packager/-/electron-packager-15.2.0.tgz#c93de19d75e7c03d159a56295384d371cb625ad4" - integrity sha512-BaklTBRQy1JTijR3hi8XxHf/uo76rHbDCNM/eQHSblzE9C0NoNfOe86nPxB7y1u2jwlqoEJ4zFiHpTFioKGGRA== +electron-packager@^15.3.0: + version "15.3.0" + resolved "https://registry.yarnpkg.com/electron-packager/-/electron-packager-15.3.0.tgz#10f51960d518e4c35b760c10d1392c7ebea24c8b" + integrity sha512-PHcykXinmjPyJcYoNGbOWNsOU25nIbMLHBAfg4caazWzYELFL14FshDZEqqrvVOMEUnqjx/Ktc1NmMIN5ZRomQ== dependencies: "@electron/get" "^1.6.0" asar "^3.0.0" + cross-spawn-windows-exe "^1.2.0" debug "^4.0.1" electron-notarize "^1.0.0" electron-osx-sign "^0.5.0" @@ -4299,7 +4273,7 @@ electron-packager@^15.2.0: junk "^3.1.0" parse-author "^2.0.0" plist "^3.0.0" - rcedit "^2.0.0" + rcedit "^3.0.1" resolve "^1.1.6" semver "^7.1.3" yargs-parser "^20.0.0" @@ -7992,11 +7966,6 @@ ms@2.1.2: resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== -ms@^2.1.1: - version "2.1.3" - resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" - integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== - nan@^2.12.1: version "2.14.1" resolved "https://registry.yarnpkg.com/nan/-/nan-2.14.1.tgz#d7be34dfa3105b91494c3147089315eff8874b01" @@ -8616,11 +8585,6 @@ path-key@^3.0.0, path-key@^3.1.0: resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== -path-parse@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.5.tgz#3c1adf871ea9cd6c9431b6ea2bd74a0ff055c4c1" - integrity sha1-PBrfhx6pzWyUMbbqK9dKD/BVxME= - path-parse@^1.0.6: version "1.0.6" resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.6.tgz#d62dbb5679405d72c4737ec58600e9ddcf06d24c" @@ -9154,10 +9118,12 @@ rc@^1.2.8: minimist "^1.2.0" strip-json-comments "~2.0.1" -rcedit@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/rcedit/-/rcedit-2.1.0.tgz#37ae6ad1fc8d7734b2e445ec3d378ace89d4076d" - integrity sha512-Nrd/65LzMjFmKpS9d2fqIxVYdW0M8ovsN0PgZhCrPMQss2yznkp6/zjEQ1a9DzzoGv2uuN3yDJAeHybOD5ZNKA== +rcedit@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/rcedit/-/rcedit-3.0.1.tgz#ae21b43e49c075f4d84df1929832a12c302f3c90" + integrity sha512-XM0Jv40/y4hVAqj/MO70o/IWs4uOsaSoo2mLyk3klFDW+SStLnCtzuQu+1OBTIMGlM8CvaK9ftlYCp6DJ+cMsw== + dependencies: + cross-spawn-windows-exe "^1.1.0" react-is@^16.12.0: version "16.13.1" @@ -9586,28 +9552,7 @@ resolve-url@^0.2.1: resolved "https://registry.yarnpkg.com/resolve-url/-/resolve-url-0.2.1.tgz#2c637fe77c893afd2a663fe21aa9080068e2052a" integrity sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo= -resolve@^1.1.6, resolve@^1.3.2: - version "1.5.0" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.5.0.tgz#1f09acce796c9a762579f31b2c1cc4c3cddf9f36" - integrity sha512-hgoSGrc3pjzAPHNBg+KnFcK2HwlHTs/YrAGUr6qgTVUZmXv1UEXXl0bZNBKMA9fud6lRYFdPGz0xXxycPzmmiw== - dependencies: - path-parse "^1.0.5" - -resolve@^1.10.0: - version "1.10.0" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.10.0.tgz#3bdaaeaf45cc07f375656dfd2e54ed0810b101ba" - integrity sha512-3sUr9aq5OfSg2S9pNtPA9hL1FVEAjvfOC4leW0SNf/mpnaakz2a9femSd6LqAww2RaFctwyf1lCqnTHuF1rxDg== - dependencies: - path-parse "^1.0.6" - -resolve@^1.17.0: - version "1.17.0" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.17.0.tgz#b25941b54968231cc2d1bb76a79cb7f2c0bf8444" - integrity sha512-ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w== - dependencies: - path-parse "^1.0.6" - -resolve@^1.18.1: +resolve@^1.1.6, resolve@^1.10.0, resolve@^1.17.0, resolve@^1.18.1, resolve@^1.3.2: version "1.19.0" resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.19.0.tgz#1af5bf630409734a067cae29318aac7fa29a267c" integrity sha512-rArEXAgsBG4UgRGcynxWIWKFvh/XZCcS8UJdHhwy91zwAvCZIbcs+vAbflgBnNjYMs/i/i+/Ux6IZhML1yPvxg== @@ -9833,50 +9778,23 @@ semver-diff@^3.1.1: dependencies: semver "^6.3.0" -"semver@2 || 3 || 4 || 5", semver@^5.3.0: - version "5.4.1" - resolved "https://registry.yarnpkg.com/semver/-/semver-5.4.1.tgz#e059c09d8571f0540823733433505d3a2f00b18e" - integrity sha512-WfG/X9+oATh81XtllIo/I8gOiY9EXRdv1cQdyykeXK17YcUW3EXUAi2To4pcH6nZtJPr7ZOpM5OMyWJZm+8Rsg== - -semver@7.x, semver@^7.1.3, semver@^7.2.1, semver@^7.3.2, semver@^7.3.4: - version "7.3.4" - resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.4.tgz#27aaa7d2e4ca76452f98d3add093a72c943edc97" - integrity sha512-tCfb2WLjqFAtXn4KEdxIhalnRtoKFN7nAwj0B3ZXCbQloV2tq5eDbcTmT68JJD3nRJq24/XgxtQKFIpQdtvmVw== - dependencies: - lru-cache "^6.0.0" - -semver@^5.4.1: - version "5.5.1" - resolved "https://registry.yarnpkg.com/semver/-/semver-5.5.1.tgz#7dfdd8814bdb7cabc7be0fb1d734cfb66c940477" - integrity sha512-PqpAxfrEhlSUWge8dwIp4tZnQ25DIOthpiaHNIthsjEFQD6EvqUKUDM7L8O2rShkFccYo1VjJR0coWfNkCubRw== - -semver@^5.5.0: - version "5.5.0" - resolved "https://registry.yarnpkg.com/semver/-/semver-5.5.0.tgz#dc4bbc7a6ca9d916dee5d43516f0092b58f7b8ab" - integrity sha512-4SJ3dm0WAwWy/NVeioZh5AntkdJoWKxHxcmyP622fOkgHa4z3R0TdBJICINyaSDE6uNwVc8gZr+ZinwZAH4xIA== - -semver@^5.6.0: +"semver@2 || 3 || 4 || 5", semver@^5.3.0, semver@^5.4.1, semver@^5.5.0, semver@^5.6.0: version "5.7.1" resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== -semver@^6.0.0, semver@^6.2.0, semver@^6.3.0: - version "6.3.0" - resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" - integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== - -semver@^7.1.1: - version "7.1.3" - resolved "https://registry.yarnpkg.com/semver/-/semver-7.1.3.tgz#e4345ce73071c53f336445cfc19efb1c311df2a6" - integrity sha512-ekM0zfiA9SCBlsKa2X1hxyxiI4L3B6EbVJkkdgQXnSEEaHlGdvyodMruTiulSRWMMB4NeIuYNMC9rTKTz97GxA== - -semver@^7.3.5: +semver@7.x, semver@^7.1.1, semver@^7.1.3, semver@^7.2.1, semver@^7.3.2, semver@^7.3.4, semver@^7.3.5: version "7.3.5" resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.5.tgz#0b621c879348d8998e4b0e4be94b3f12e6018ef7" integrity sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ== dependencies: lru-cache "^6.0.0" +semver@^6.0.0, semver@^6.2.0, semver@^6.3.0: + version "6.3.0" + resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" + integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== + send@0.17.1: version "0.17.1" resolved "https://registry.yarnpkg.com/send/-/send-0.17.1.tgz#c1d8b059f7900f7466dd4938bdc44e11ddb376c8" @@ -10552,7 +10470,7 @@ style-loader@^0.21.0: loader-utils "^1.1.0" schema-utils "^0.4.5" -sumchecker@^3.0.0, sumchecker@^3.0.1: +sumchecker@^3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/sumchecker/-/sumchecker-3.0.1.tgz#6377e996795abb0b6d348e9b3e1dfb24345a8e42" integrity sha512-MvjXzkz/BOfyVDkG0oFOtBxHX2u3gKbMHIF/dXblZsgD3BWOFLmHovIpZY7BykJdAjcqRCBi1WYBNdEC9yI7vg== From d8d864877cefeae8a27a1f63c69bbe61504158c1 Mon Sep 17 00:00:00 2001 From: nullrequest <30698906+advaithm@users.noreply.github.com> Date: Mon, 19 Jul 2021 17:49:26 +0530 Subject: [PATCH 44/48] escape paths with regex over quotes in flatpaks (#558) --- app/src/lib/helpers/linux.ts | 7 +++++-- app/test/unit/helpers/linux-test.ts | 16 +++++++++++++++- 2 files changed, 20 insertions(+), 3 deletions(-) diff --git a/app/src/lib/helpers/linux.ts b/app/src/lib/helpers/linux.ts index 73fe58887fe..e6e021808b0 100644 --- a/app/src/lib/helpers/linux.ts +++ b/app/src/lib/helpers/linux.ts @@ -28,7 +28,9 @@ export function convertToFlatpakPath(path: string) { return join('/var/run/host', path) } - +export function formatWorkingDirectoryForFlatpak(path: string): string { + return path.replace(/(\s)/, "\ ") +} /** * Checks the file path on disk exists before attempting to launch a specific shell * @@ -82,9 +84,10 @@ export function spawnEditor( options: SpawnOptions ): ChildProcess { if (isFlatpakBuild()) { + let EscapedworkingDirectory = formatWorkingDirectoryForFlatpak(workingDirectory) return spawn( 'flatpak-spawn', - ['--host', path, `"${workingDirectory}"`], + ['--host', path, EscapedworkingDirectory], options ) } else { diff --git a/app/test/unit/helpers/linux-test.ts b/app/test/unit/helpers/linux-test.ts index df18564e441..0f6895c8835 100644 --- a/app/test/unit/helpers/linux-test.ts +++ b/app/test/unit/helpers/linux-test.ts @@ -1,4 +1,4 @@ -import { convertToFlatpakPath } from '../../../src/lib/helpers/linux' +import { convertToFlatpakPath, formatWorkingDirectoryForFlatpak } from '../../../src/lib/helpers/linux' describe('convertToFlatpakPath()', () => { if (__LINUX__) { @@ -28,3 +28,17 @@ describe('convertToFlatpakPath()', () => { }) } }) + +describe('formatWorkingDirectoryForFlatpak()', () => { + if (__LINUX__) { + it('escapes string', () => { + const path = "/home/test/path with space" + const expectedPath = "/home/test/path\ with\ space" + expect(formatWorkingDirectoryForFlatpak(path)).toEqual(expectedPath) + }) + it('returns same path', () => { + const path = "/home/test/path_wthout_spaces" + expect(formatWorkingDirectoryForFlatpak(path)).toEqual(path) + }) + } +}) From b055ca70c80179ecec5c4e92b548ca353a872e44 Mon Sep 17 00:00:00 2001 From: Brendan Forster Date: Mon, 19 Jul 2021 10:31:32 -0300 Subject: [PATCH 45/48] point window icon to new version (#561) --- app/src/main-process/app-window.ts | 3 +++ 1 file changed, 3 insertions(+) diff --git a/app/src/main-process/app-window.ts b/app/src/main-process/app-window.ts index c0fc14fd941..5ab5832c5e1 100644 --- a/app/src/main-process/app-window.ts +++ b/app/src/main-process/app-window.ts @@ -1,5 +1,6 @@ import { BrowserWindow, ipcMain, Menu, app, dialog } from 'electron' import { Emitter, Disposable } from 'event-kit' +import { join } from 'path' import { encodePathAsUrl } from '../lib/path' import { registerWindowStateChangedEvents } from '../lib/window-state' import { MenuEvent } from './menu' @@ -56,6 +57,8 @@ export class AppWindow { } else if (__WIN32__) { windowOptions.frame = false } else if (__LINUX__) { + windowOptions.icon = join(__dirname, 'static', 'logos', '512x512.png') + // relax restriction here for users trying to run app at a small // resolution and any other side-effects of dropping this restriction are // currently unsupported From f54cb086825db69b5c010d117074c24a472e9a9e Mon Sep 17 00:00:00 2001 From: advaithm Date: Mon, 19 Jul 2021 20:53:02 +0530 Subject: [PATCH 46/48] offline build support --- script/post-install.ts | 51 ++++++++++++++++++++++++++++-------------- 1 file changed, 34 insertions(+), 17 deletions(-) diff --git a/script/post-install.ts b/script/post-install.ts index dac221dc8d2..f2eaa824694 100644 --- a/script/post-install.ts +++ b/script/post-install.ts @@ -27,36 +27,53 @@ function findYarnVersion(callback: (path: string) => void) { callback(latestVersion) }) } +function isOffline() { + return process.env.OFFLINE === 1 +} findYarnVersion(path => { - let result = spawnSync( - 'node', - [path, '--cwd', 'app', 'install', '--force'], - options - ) + let result + if (isOffline()) { + result = spawnSync( + 'node', + [path, '--offline', '--cwd', 'app', 'install', '--force'], + options + ) + } else { + result = spawnSync( + 'node', + [path, '--cwd', 'app', 'install', '--force'], + options + ) + } if (result.status !== 0) { process.exit(result.status || 1) } - - result = spawnSync( - 'git', - ['submodule', 'update', '--recursive', '--init'], - options - ) + if (!isOffline()) { + result = spawnSync( + 'git', + ['submodule', 'update', '--recursive', '--init'], + options + ) + } if (result.status !== 0) { process.exit(result.status || 1) } - - result = spawnSync('node', [path, 'compile:tslint'], options) - + if (isOffline()) { + result = spawnSync('node', [path, '--offline', 'compile:tslint'], options) + } else { + result = spawnSync('node', [path, '--offline', 'compile:tslint'], options) + } if (result.status !== 0) { process.exit(result.status || 1) } - - result = spawnSync('node', [path, 'compile:script'], options) - + if (isOffline()) { + result = spawnSync('node', [path, '--offline', 'compile:script'], options) + } else { + result = spawnSync('node', [path, 'compile:script'], options) + } if (result.status !== 0) { process.exit(result.status || 1) } From 719915329b8320abc541d7b7040c5ede7dc468ce Mon Sep 17 00:00:00 2001 From: advaithm Date: Mon, 19 Jul 2021 20:59:53 +0530 Subject: [PATCH 47/48] changed 1 from int to string --- script/post-install.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/script/post-install.ts b/script/post-install.ts index f2eaa824694..ec8f08cf32e 100644 --- a/script/post-install.ts +++ b/script/post-install.ts @@ -28,7 +28,7 @@ function findYarnVersion(callback: (path: string) => void) { }) } function isOffline() { - return process.env.OFFLINE === 1 + return process.env.OFFLINE === '1' } findYarnVersion(path => { From c4f320d0fcd23d108066e1894e83115bc28ec6cf Mon Sep 17 00:00:00 2001 From: nullrequest <30698906+advaithm@users.noreply.github.com> Date: Mon, 19 Jul 2021 21:08:41 +0530 Subject: [PATCH 48/48] Update script/post-install.ts Co-authored-by: Brendan Forster --- script/post-install.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/script/post-install.ts b/script/post-install.ts index ec8f08cf32e..8e2b33aa2d3 100644 --- a/script/post-install.ts +++ b/script/post-install.ts @@ -64,7 +64,7 @@ findYarnVersion(path => { if (isOffline()) { result = spawnSync('node', [path, '--offline', 'compile:tslint'], options) } else { - result = spawnSync('node', [path, '--offline', 'compile:tslint'], options) + result = spawnSync('node', [path, 'compile:tslint'], options) } if (result.status !== 0) { process.exit(result.status || 1)