diff --git a/.github/actions/spelling/README.md b/.github/actions/spelling/README.md
new file mode 100644
index 0000000..ec59bd7
--- /dev/null
+++ b/.github/actions/spelling/README.md
@@ -0,0 +1,15 @@
+# check-spelling/check-spelling configuration
+
+File | Purpose | Format | Info
+-|-|-|-
+[dictionary.txt](dictionary.txt) | Replacement dictionary (creating this file will override the default dictionary) | one word per line | [dictionary](https://github.com/check-spelling/check-spelling/wiki/Configuration#dictionary)
+[allow.txt](allow.txt) | Add words to the dictionary | one word per line (only letters and `'`s allowed) | [allow](https://github.com/check-spelling/check-spelling/wiki/Configuration#allow)
+[reject.txt](reject.txt) | Remove words from the dictionary (after allow) | grep pattern matching whole dictionary words | [reject](https://github.com/check-spelling/check-spelling/wiki/Configuration-Examples%3A-reject)
+[excludes.txt](excludes.txt) | Files to ignore entirely | perl regular expression | [excludes](https://github.com/check-spelling/check-spelling/wiki/Configuration-Examples%3A-excludes)
+[only.txt](only.txt) | Only check matching files (applied after excludes) | perl regular expression | [only](https://github.com/check-spelling/check-spelling/wiki/Configuration-Examples%3A-only)
+[patterns.txt](patterns.txt) | Patterns to ignore from checked lines | perl regular expression (order matters, first match wins) | [patterns](https://github.com/check-spelling/check-spelling/wiki/Configuration-Examples%3A-patterns)
+[expect.txt](expect.txt) | Expected words that aren't in the dictionary | one word per line (sorted, alphabetically) | [expect](https://github.com/check-spelling/check-spelling/wiki/Configuration#expect)
+[advice.txt](advice.txt) | Supplement for GitHub comment when unrecognized words are found | GitHub Markdown | [advice](https://github.com/check-spelling/check-spelling/wiki/Configuration-Examples%3A-advice)
+
+Note: you can replace any of these files with a directory by the same name (minus the suffix)
+and then include multiple files inside that directory (with that suffix) to merge multiple files together.
diff --git a/.github/actions/spelling/advice.md b/.github/actions/spelling/advice.md
new file mode 100644
index 0000000..2a32b65
--- /dev/null
+++ b/.github/actions/spelling/advice.md
@@ -0,0 +1,27 @@
+
+If you see a bunch of garbage
+
+If it relates to a ...
+well-formed pattern
+
+See if there's a [pattern](https://github.com/check-spelling/check-spelling/wiki/Configuration-Examples:-patterns) that would match it.
+
+If not, try writing one and adding it to the `patterns.txt` file.
+
+Patterns are Perl 5 Regular Expressions - you can [test](
+https://www.regexplanet.com/advanced/perl/) yours before committing to verify it will match your lines.
+
+Note that patterns can't match multiline strings.
+
+binary-ish string
+
+Please add a file path to the `excludes.txt` file instead of just accepting the garbage.
+
+File paths are Perl 5 Regular Expressions - you can [test](
+https://www.regexplanet.com/advanced/perl/) yours before committing to verify it will match your files.
+
+`^` refers to the file's path from the root of the repository, so `^README\.md$` would exclude [README.md](
+../tree/HEAD/README.md) (on whichever branch you're using).
+
+
+
diff --git a/.github/actions/spelling/allow.txt b/.github/actions/spelling/allow.txt
new file mode 100644
index 0000000..e69de29
diff --git a/.github/actions/spelling/excludes.txt b/.github/actions/spelling/excludes.txt
new file mode 100644
index 0000000..a2bb4bc
--- /dev/null
+++ b/.github/actions/spelling/excludes.txt
@@ -0,0 +1,10 @@
+# See https://github.com/check-spelling/check-spelling/wiki/Configuration-Examples:-excludes
+(?:^|/)(?i)COPYRIGHT
+(?:^|/)(?i)LICEN[CS]E
+(?:^|/)package(?:-lock)\.json$
+(?:^|/)vendor/
+ignore$
+\.lock$
+\.min\.
+\.mod$
+^\.github/
diff --git a/.github/actions/spelling/expect.txt b/.github/actions/spelling/expect.txt
new file mode 100644
index 0000000..5d5f2d1
--- /dev/null
+++ b/.github/actions/spelling/expect.txt
@@ -0,0 +1,129 @@
+accepteula
+ada
+ADFS
+applocker
+askds
+askhost
+aspx
+AUTODELAYED
+autorun
+autorunsc
+blog
+BSJB
+Cbs
+cctor
+CDATA
+CHV
+computersystem
+config
+Cred
+css
+csv
+ctor
+DCOM
+DCs
+dll
+DPAPI
+ecmangen
+EMET
+EULA
+Eventing
+Eventlog
+eventman
+eventvwr
+EVNT
+EVTX
+exe
+foreach
+github
+GPOs
+hotpatching
+http
+iad
+iadgov
+Interop
+isssource
+jepayne
+JSON
+Kerberos
+KEYW
+LEVL
+logdisplayname
+logfile
+logon
+malware
+microsoft
+MPSSVC
+mscoree
+mscorlib
+msdn
+Msi
+namespace
+nobanner
+NONINFRINGEMENT
+Noteproperty
+NSD
+NSG
+NTLM
+OAlerts
+OPCO
+OUs
+palantir
+Passthru
+PDevices
+pdf
+plugin
+powershell
+principalname
+PROGRA
+pslogs
+Ptr
+reloc
+rsrc
+russellt
+sacl
+sdk
+serverlevelplugindll
+SERVERNAME
+SIDs
+siem
+Smartcard
+SPN
+squarespace
+SSL
+subscriptionid
+sysinternals
+Sysmon
+taskhost
+technet
+tls
+Todo
+Toolset
+TSG
+TTBLh
+UInt
+Unicode
+unregister
+USBHUB
+usbstor
+virtualized
+Virustotal
+wald
+wbem
+WEC
+Wecsvc
+wecutil
+WEVT
+WEVTp
+wevtutil
+WHC
+Whitelisting
+Wineventlog
+wmi
+wsman
+www
+xml
+xmlns
+xpath
+xsd
+xsi
diff --git a/.github/actions/spelling/patterns.txt b/.github/actions/spelling/patterns.txt
new file mode 100644
index 0000000..e92746a
--- /dev/null
+++ b/.github/actions/spelling/patterns.txt
@@ -0,0 +1,40 @@
+# See https://github.com/check-spelling/check-spelling/wiki/Configuration-Examples:-patterns
+
+# YouTube
+https?://(?:(?:www\.|)youtube\.com|youtu.be)/(?:channel/|embed/|playlist\?list=|watch\?v=|v/|)[-a-zA-Z0-9?&=_]*
+<\s*youtube\s+id=['"][-a-zA-Z0-9?_]*['"]
+\bimg\.youtube\.com/vi/[-a-zA-Z0-9?&=_]*
+# Google Analytics
+\bgoogle-analytics\.com/collect.[-0-9a-zA-Z?%=&_.~]*
+# Google APIs
+\bgoogleapis\.com/[a-z]+/v\d+/[a-z]+/[@./?=\w]+
+\b[-a-zA-Z0-9.]*\bstorage\d*\.googleapis\.com(?:/\S*|)
+# Google Calendar
+\bcalendar\.google\.com/calendar(?:/u/\d+|)/embed\?src=[@./?=\w&%]+
+\w+\@group\.calendar\.google\.com\b
+# Google DataStudio
+\bdatastudio\.google\.com/(?:(?:c/|)u/\d+/|)(?:embed/|)(?:open|reporting|datasources|s)/[-0-9a-zA-Z]+(?:/page/[-0-9a-zA-Z]+|)
+# The leading `/` here is as opposed to the `\b` above
+# ... a short way to match `https://` or `http://` since most urls have one of those prefixes
+# Google Docs
+/docs\.google\.com/[a-z]+/d/(?:e/|)[0-9a-zA-Z_-]+/?
+# Google Groups
+https://groups\.google\.com/d/topic/[^/]+/[a-zA-Z0-9]+/discussion
+https://groups\.google\.com/d/msg/[^/]+/[a-zA-Z0-9]+/[a-zA-Z0-9]+
+# Google themes
+themes\.googleusercontent\.com/static/fonts/[^/]+/v\d+/[^.]+.
+# Google CDN
+\bclients2\.google(?:usercontent|)\.com[-0-9a-zA-Z/.]*
+# Goo.gl
+/goo\.gl/[a-zA-Z0-9]+
+# Google Chrome Store
+\bchrome\.google\.com/webstore/detail/\w*(?:/\w*|)
+
+# uuid:
+[<({"'>][0-9a-fA-F]{8}-(?:[0-9a-fA-F]{4}-){3}[0-9a-fA-F]{12}[<'"})>]
+
+# ignore long runs of a single character:
+\b([A-Za-z])\g{-1}{3,}\b
+
+# v#
+[Vv]\d+(?:\b|(?=[a-zA-Z_]))
diff --git a/.github/actions/spelling/reject.txt b/.github/actions/spelling/reject.txt
new file mode 100644
index 0000000..a5ba6f6
--- /dev/null
+++ b/.github/actions/spelling/reject.txt
@@ -0,0 +1,7 @@
+^attache$
+benefitting
+occurence
+Sorce
+^[Ss]pae
+^untill
+^wether
diff --git a/.github/workflows/spelling.yml b/.github/workflows/spelling.yml
new file mode 100644
index 0000000..c71cf1f
--- /dev/null
+++ b/.github/workflows/spelling.yml
@@ -0,0 +1,25 @@
+name: Spell checking
+on:
+ pull_request_target:
+ push:
+ issue_comment:
+
+jobs:
+ build:
+ name: Spell checking
+ runs-on: ubuntu-latest
+ steps:
+ - name: checkout-merge
+ if: "contains(github.event_name, 'pull_request')"
+ uses: actions/checkout@v2.0.0
+ with:
+ ref: refs/pull/${{github.event.pull_request.number}}/merge
+ fetch-depth: 5
+ - name: checkout
+ if: "!contains(github.event_name, 'pull_request')"
+ uses: actions/checkout@v2.0.0
+ with:
+ fetch-depth: 5
+ - uses: check-spelling/check-spelling@prerelease
+ with:
+ experimental_apply_changes_via_bot: 1