Compare commits

..
202 Commits
Author SHA1 Message Date
Weston Blieden 0cbe14b8cf Trim redundant comments and correct stale ones 2026-09-25 09:59:40 +02:00
Weston Blieden 230a9f4861 Stop executing Tailscale settings as shell code
param_bridge wrote params.conf unquoted and the run script sourced it and ran tailscale up through eval, so a setting containing $(...) executed (as root in the ROOT variant). Values are now single-quoted shell literals and the up command is built as an argument list. AdvertiseRoutes also tolerates spaces after commas, which previously dropped every route. Verified on a P3288-LV (OS 12.11).
2026-09-25 08:49:21 +02:00
Weston Blieden 1997941965 ci: match the SDK approval rule regardless of registry prefix
matchPackageNames listed only axisecp/acap-native-sdk, but repos with ARG REPO=docker.io/axisecp resolve the dep as docker.io/axisecp/acap-native-sdk, which never matched. The approval gate was silently bypassed in Axis_Cam_OpenVPN and Axis_Cam_WireGuard, where SDK 12.11.0 was queued for automatic PR creation.
2026-09-21 10:27:19 +02:00
renovate[bot]GitHubrenovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
8b70caaf70 Update actions/checkout action to v7 (#38)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-09-21 08:32:00 +02:00
Weston Blieden 08f791ed24 ci: maintain build.yml in this repo instead of generating it
acap-ci.sh rendered this workflow from a shared template and renovate.json excluded it from updates. The generator was only ever run by hand, so the file is owned here now and Renovate maintains its action pins.
2026-09-21 08:28:08 +02:00
Weston Blieden 7d8d3a04cb ci: align Renovate config with the Go repos 2026-09-18 10:12:07 +02:00
Weston Blieden ccd670591e ci: scan UI JavaScript with CodeQL advanced setup 2026-09-18 09:07:56 +02:00
Weston Blieden 7dffcd1f58 ci: require approval for ACAP SDK bumps 2026-09-18 08:40:41 +02:00
Weston Blieden e23272fedd ci: adopt Renovate for dependency updates 2026-09-17 08:38:24 +02:00
Weston Blieden 559fe42294 Run tests/run.sh in CI when a repo has one
Regenerated from Axis_Cam_Template/ci/build.yml.tmpl via acap-ci.sh.
Repos without a tests/run.sh skip the step.
2026-09-15 12:46:05 +02:00
github-actions[bot] 3413d3a992 Update to 1.102.4 2026-09-11 09:27:07 +00:00
Weston Blieden f526196d99 Sync apply-version.sh: apply go.mod pins declared in .acap.json 2026-08-22 13:32:27 +02:00
Weston Blieden 14518ffe16 Strip inside the SDK container so every build matches CI
Stripping relied on host cross-binutils and was best-effort, so a machine without
them silently shipped a 68 MB package instead of 45 MB under the same version
number. Running the SDK's $STRIP in a container removes the host dependency.
Uses create/cp rather than a bind mount because podman machine on macOS only
mounts $HOME.
2026-08-22 13:22:01 +02:00
Weston Blieden d615191fc2 Count packages a build writes straight into releases/ 2026-08-22 08:27:52 +02:00
Weston Blieden d2f2cd13a4 Keep the UI update check in sync with the packaged version 2026-08-21 15:48:39 +02:00
Weston Blieden 96f5a7c909 Group Dependabot action updates into a single PR 2026-08-21 15:27:23 +02:00
Weston Blieden 86309e1291 Bump GitHub Actions to checkout v7, upload-artifact v7, download-artifact v8 2026-08-21 15:18:29 +02:00
Weston Blieden ed0f6d23fe Add Dependabot; never target an already-published version 2026-08-21 14:50:11 +02:00
Weston Blieden 474d783f48 Add Dependabot for GitHub Actions 2026-08-21 14:47:47 +02:00
Weston Blieden 9c1bec5043 Mirror upstream only when it is ahead of our version line 2026-08-21 14:37:23 +02:00
Weston Blieden 15ac2c3395 Only mention unsigned variants a release actually ships 2026-08-21 13:58:25 +02:00
Weston Blieden 437f7f9e40 Keep build output out of the version bump commit 2026-08-21 13:24:33 +02:00
Weston Blieden 53240ed2ec Add upstream-tracking release pipeline; extract build.sh 2026-08-21 13:07:28 +02:00
github-actions[bot] 492392d175 Update Tailscale to v1.102.3 2026-08-21 01:59:18 +00:00
github-actions[bot] e17549fef0 Update Tailscale to v1.102.2 2026-08-05 03:36:20 +00:00
github-actions[bot] 3a71aba342 Update Tailscale to v1.102.1 2026-08-04 03:35:42 +00:00
github-actions[bot] dce8beaa1b Update Tailscale to v1.98.10 2026-07-29 06:32:18 +00:00
Weston Blieden b70d664f91 fix: use Mo3he vendor name in ROOT manifests to pass schema validation 2026-07-29 08:15:03 +02:00
Weston Blieden 9ea88ccd0d docs: extend verified OS range to 13 (intro + roadmap) 2026-07-24 13:06:32 +02:00
Weston Blieden f79f631d95 docs: note verified on AXIS OS 13 (13.0.0, aarch64) 2026-07-24 13:03:13 +02:00
Weston Blieden 835ccff82f docs: add Advertise Routes (Subnet Router) to README config table 2026-07-21 19:44:51 +02:00
Weston Blieden 92262bd16c Update vendor to moshe@mohome.net and vendorId for ACAP signing
Packages are now signed with the Axis ACAP signing service. Document the
signing change and the upgrade steps (back up config and uninstall the old
version to avoid the "Vendor ID in manifest does not match" install error)
in the README and changelog.
2026-07-21 19:35:05 +02:00
github-actions[bot] 948c201ea3 Update Tailscale to v1.98.9 2026-07-21 03:39:55 +00:00
Weston Blieden 3730609abe docs: standardize README (badges, disclaimer, compatibility, sections, links, AXIS OS naming) 2026-07-17 10:11:52 +02:00
Weston BliedenandGitHub b06dbc0059 Update sponsorship links and badge styles in README 2026-07-16 13:32:38 +02:00
Weston Blieden 7d32827567 Fix invalid MD060 config value (disable rule) 2026-07-08 10:04:45 +02:00
Weston Blieden 970055051d Point super-linter at repo .markdownlint.yaml (honor shared config) 2026-07-08 09:47:50 +02:00
Weston Blieden 216ae1ebf9 Add super-linter (markdown/yaml/json/dockerfile/shell); fix lint findings 2026-07-08 09:40:14 +02:00
Weston Blieden e2daee6519 Add CHANGELOG.md generated from release history
Keep a Changelog-style summary of every released version with its date and a
link to the full GitHub release notes.
2026-07-07 20:56:09 +02:00
Weston Blieden 2a8dccfc05 Add CONTRIBUTING.md and shared lint configs
Add a contributor guide, and copy the shared .clang-format and .markdownlint.yaml
so linting is consistent across the ACAP repos.
2026-07-07 20:44:46 +02:00
Weston Blieden 02dda93272 Fix markdownlint MD034/MD040 in notices and security docs
Wrap bare URLs and the contact email in angle brackets, and add a language to
the license-text code fences, so the shared markdown lint passes.
2026-07-07 20:35:24 +02:00
Weston Blieden 0331f8d8c5 Keep LICENSE as pure BSD 3-Clause text for license detection
Move the third-party pointer out of LICENSE (it lives in THIRD_PARTY_NOTICES.md)
so GitHub's license detection recognizes the BSD 3-Clause license.
2026-07-07 20:02:57 +02:00
Weston Blieden f3d649aa92 Update security contact email to moshe@mohome.net 2026-07-07 19:53:15 +02:00
Weston Blieden bddcdf7de8 Standardize licensing and repo hygiene
- Relicense wrapper code to BSD 3-Clause (SPDX-detectable); the previous
  LICENSE combined the wrapper license with third-party notices.
- Move upstream attributions into THIRD_PARTY_NOTICES.md (nothing dropped).
- Add SECURITY.md with a private disclosure process.
2026-07-07 19:47:25 +02:00
Weston Blieden 47c3894002 Consolidate variants into common/app and prepare for AXIS OS 13
Much of this work is AXIS OS 13 preparation. Of the OS 13 breaking
changes, all are now addressed except one: recompiled against the
updated SDK for 64-bit time (Y2038), migrated to Manifest Schema v2
with declared OS compatibility, audited all binaries for executable
stack (all clean, GNU_STACK rw-), and verified the web UI end to end
over HTTPS. The only outstanding item is signing through the Axis
ACAP Portal, pending a registered vendorId.

The four ACAP 4 variants (aarch64, armv7hf, and their ROOT versions)
carried byte-identical copies of the C bridge, run script, web UI, and
Makefile per architecture, diverging only between standard and ROOT.
Merge them into a single common/app/ tree:

- param_bridge.c: proxy-port parameters gated behind -DHAS_PROXY_PORTS
  (set via EXTRA_CFLAGS in the standard Dockerfiles); ROOT builds omit
  them as before
- Tailscale_VPN_run: variant passed as $1 ("standard"/"root") selects
  userspace vs kernel networking, port-collision checks, and IP
  forwarding for advertised routes
- index.html: detects proxy support at runtime from the settings
  response, hiding the proxy card and keeping the params out of save
  requests on ROOT builds (fixes ROOT UI always showing proxy fields
  and falsely reporting save errors)

Standard variants move to ACAP Native SDK 12.10.0 and Manifest Schema
v2 (vendorId, compatibleOsVersions); verified installable and working
on OS 10.12, 11.11, and 12.10, so OS 13 readiness costs no backward
compatibility. ROOT variants intentionally stay on SDK 1.15.1 since
OS 12+ never runs root apps.

All builds (including arm_acap3) now use the repository root as build
context with -f <variant>/Dockerfile; CI updated accordingly and a
.dockerignore added to keep the context lean. Tailscale binaries are
no longer tracked in git; *.eap outputs are now gitignored.

README: correct the standard variant's floor to OS 10.12+ and ROOT to
10.12-11.x (both live-verified), update build/update instructions for
the shared tree, and check off completed OS 13 readiness items.
2026-07-03 10:38:14 +02:00
Weston Blieden 3ed71ccae3 Add subnet routing and param.cgi-less settings fallback
- Advertise routes (subnet router) support wired through run scripts and params
- Settings UI tries param.cgi first, then falls back to an app-hosted endpoint
  exposed via manifest reverseProxy, so devices without param.cgi (recorder/NVR
  class) can load and save settings without a reinstall
- Embedded GSocketService HTTP server in param_bridge serves the fallback
- Adds gio-2.0 dependency; correct aarch64 tailscale binaries
2026-07-01 09:02:28 +02:00
github-actions[bot] c0ef4852ae Update Tailscale to v1.98.8 2026-06-30 04:23:01 +00:00
Weston Blieden 741062bcef fix: status.json connection detection, auth-key auto-clear, IP display
Replace process-liveness/log-scraping heuristics with Tailscale's
authoritative backend state published as status.json.

- UI now uses BackendState + Self.Online so "no Internet" no longer
  shows Connected; surfaces the real Tailscale IP, node and tailnet.
- Auth key is auto-cleared from the UI after a successful keyed login
  via a sentinel file picked up by param_bridge (non-acap3 variants).
- Run scripts background `tailscale up` and publish status every 5s so
  re-auth (NeedsLogin + AuthURL) surfaces without starving the loop.
- Ported across aarch64, aarch64_ROOT, arm, arm_ROOT, and arm_acap3
  (acap3 uses the status.json detection; it has no auth-key param).
- Bump bundled Tailscale binaries to 1.98.4 for all variants.
- Fix CONTRIBUTING.md issue/discussion links to this repo.
- Add packaging/wrapper copyright to LICENSE.
2026-06-16 08:59:00 +02:00
Weston BliedenandGitHub c4ac8ab601 Clarify reverse-SSH tunnel requirements in README
Updated the section on reverse-SSH tunnel to clarify root requirements and added details about using a non-root SSH user.
2026-06-10 13:12:21 +02:00
Weston Blieden fd5cec50bb feat: add Accept DNS and Accept Routes toggles to all ACAP 4 variants
Restores the toggle implementation that shipped in the v1.96.4-dns-routes
release but was never committed to main, so weekly auto-builds (v1.98.x)
regressed and dropped the feature.

- manifest.json: register AcceptDNS / AcceptRoutes parameters
- param_bridge.c: cache, load, persist and live-reload the new params
- Tailscale_VPN_run: append --accept-dns / --accept-routes when enabled; add --reset
- html/index.html: add the Settings toggles
2026-06-10 12:24:09 +02:00
Weston Blieden 9a35f4e584 docs: add section on accessing tailnet services from the camera 2026-06-10 12:23:17 +02:00
github-actions[bot] 896fe380ff Update Tailscale to v1.98.4 2026-06-02 05:00:37 +00:00
github-actions[bot] b398b5498c Update Tailscale to v1.98.3 2026-05-22 04:30:26 +00:00
github-actions[bot] 08a2140d68 Update Tailscale to v1.98.2 2026-05-19 04:28:36 +00:00
Weston Blieden 1a5d2c1a24 docs: update README with Accept DNS and Accept Routes settings 2026-05-12 14:11:18 +02:00
Weston Blieden 4066273b3f Add accept-routes toggle to roadmap 2026-05-05 09:53:10 +02:00
Weston Blieden 924f04c44a Add DNS toggle and tiny-tailscale to roadmap 2026-05-05 08:32:08 +02:00
Weston Blieden 674f1c4853 Add Roadmap section with AXIS OS 13 preparation items 2026-05-05 08:00:09 +02:00
Weston BliedenandGitHub 93855e5762 Update README.md to remove oosmetrics badge
Removed outdated oosmetrics badge and adjusted spacing.
2026-05-02 21:07:29 +02:00
Weston BliedenandGitHub 889db273ec Update README with additional badges 2026-05-02 14:35:40 +02:00
Weston Blieden 52572fc61c Update homepage: remove custom variant, add ACAP3 card, rotating hero word, device language 2026-04-21 08:57:56 +02:00
Weston BliedenandGitHub 76138394e1 Update Buy Me A Coffee badge in README 2026-04-19 14:59:22 +02:00
Weston BliedenandGitHub db24028d61 Simplify description of Headscale compatibility 2026-04-17 22:01:28 +02:00
Weston Blieden f5a30122a3 Fix password manager prompt: change auth key input from type=password to type=text 2026-04-17 19:56:04 +02:00
Weston Blieden 768a859c1f Fix password manager prompt on auth key input: use autocomplete=new-password 2026-04-17 19:51:12 +02:00
Weston Blieden f395d91de8 Fix auto-focus on settings inputs: add autocomplete=off 2026-04-17 19:42:25 +02:00
Weston Blieden 41e2a508c0 v1.96.4-r3 - Remove icon from header, change accent color to #2e2d2d 2026-04-17 19:25:04 +02:00
Weston Blieden 256aaa9d23 Fix param_bridge.c build errors: move g_ax_handle declaration before watchdog_cb, add missing TRUE arg to ax_parameter_set 2026-04-17 18:31:19 +02:00
Mo3heandClaude Sonnet 4.6 3cc3cd4804 Add Buy Me a Coffee link to homepage nav and footer
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-17 16:26:08 +02:00
Weston BliedenandGitHub 2c7ce1dc52 Add 'Buy Me A Coffee' badge to README
Added a 'Buy Me A Coffee' badge to the README.
2026-04-17 16:20:58 +02:00
Weston BliedenandGitHub 6bacc9e92b Remove BuyMeACoffee entry from FUNDING.yml
Removed BuyMeACoffee funding option.
2026-04-17 16:20:44 +02:00
Weston BliedenandGitHub 281fed0aa0 Fix Buy Me a Coffee username case
Updated Buy Me a Coffee username to match GitHub format.
2026-04-17 16:18:51 +02:00
Weston BliedenandGitHub 988adfc83a Change Buy Me a Coffee username to lowercase
Updated Buy Me a Coffee username to lowercase.
2026-04-17 16:16:19 +02:00
Weston BliedenandGitHub 0761b6e959 Add Buy Me a Coffee funding option 2026-04-17 16:12:37 +02:00
Weston Blieden ab2f4c050e docs: ROOT variants only supported on 11.11-11.x, OS 12 removed root access 2026-04-17 14:29:25 +02:00
Weston Blieden c396f00d0b docs: fix min Axis OS to 11.11+ for all variants including ROOT 2026-04-17 14:28:21 +02:00
Weston Blieden ced340453c v1.96.4-r2: C param bridge, configurable proxy ports, SDK 1.15.1, custom variants folded in, UI fixes 2026-04-17 14:05:09 +02:00
Weston BliedenandGitHub 4afd79167e Remove redundant phrase in disclaimer section 2026-04-15 10:00:55 +02:00
Weston BliedenandGitHub e9919e069d Refine disclaimer wording in README.md
Updated disclaimer to remove redundant wording.
2026-04-15 09:56:24 +02:00
Weston Blieden 732dacc5ba ci: add acap3 variant support to build workflow 2026-04-15 08:36:03 +02:00
Weston Blieden 27e26c65e3 docs: remove emoji from README 2026-04-15 08:35:19 +02:00
Weston Blieden 8a070bf5bf docs: add arm_acap3 legacy variant to README compatibility table and feature list 2026-04-14 21:07:22 +02:00
Weston Blieden de58375eb3 chore(acap3): add remaining app source files (Makefile, launcher.c, package.conf) 2026-04-14 21:04:24 +02:00
Weston Blieden 86c6ecb385 fix(acap3): fetch tailscaled.log for status details, fix connecting→connected for all variants
- arm_acap3 start.sh: log IP, version and auth URL to syslog via 'tailscale ip/version'
- arm_acap3 index.html: fetch tailscaled.log (symlinked into html/) in addition to
  syslog so IP, version, tailnet and -> Running state are always available
- arm_acap3 Dockerfile: bake html/tailscaled.log symlink into .eap
- all variants index.html: upgrade 'connecting' (without auth URL) to 'connected'
  when VAPIX list.cgi confirms Status=Running (was only upgrading from 'disconnected')
2026-04-14 21:04:16 +02:00
Weston BliedenandGitHub 7bb541fa2a Format disclaimer section in README.md 2026-04-14 19:18:24 +02:00
Weston Blieden 3e87803625 fix: always check app status API so UI shows Stopped when ACAP is not running 2026-04-14 15:43:18 +02:00
Weston Blieden 8bd18ffc63 fix: use syslog header as primary node name source (prevents stale acap-tailscale_vpn) 2026-04-14 15:36:13 +02:00
Weston Blieden c2b15fb7ec fix: pass --hostname=$(hostname) to tailscale up so node name matches camera hostname 2026-04-14 15:29:20 +02:00
Weston Blieden b07e4f1f61 fix: use cross-strip in Dockerfiles to reduce .eap size (32M -> 16M) 2026-04-14 15:22:11 +02:00
Weston Blieden 75f9cfd4b7 fix: show auth URL even when stale Running entry exists in syslog (reinstall/re-login) 2026-04-14 15:12:19 +02:00
Weston Blieden 96e8a8fd97 fix: correct flag name --outbound-http-proxy-listen (remove trailing 'er') 2026-04-14 15:02:06 +02:00
Weston Blieden 8c9072b876 Fix README: proxy available on all non-ROOT variants, not just custom 2026-04-14 13:53:03 +02:00
Weston Blieden cf84c3cdb6 Add HTTP CONNECT proxy (8080) to standard aarch64 and arm variants 2026-04-14 13:49:24 +02:00
Weston Blieden db05725432 Add HTTP CONNECT proxy (8080) and SOCKS5 (1055) to custom variants 2026-04-14 13:44:31 +02:00
Weston Blieden ef7d73ca0f Remove --verbose=1 from tailscaled to reduce syslog noise 2026-04-14 08:13:51 +02:00
Mo3heandClaude Sonnet 4.6 5080ec39fb Fix BSD 3-Clause license compliance across all variants
- Set vendor to "Mo3he" and vendorUrl to GitHub repo in all manifest.json
  files to avoid implying Tailscale Inc. endorsement (Clause 3)
- Add Tailscale third-party notice to README.md
- Add attribution/disclaimer footer to docs/index.html

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-13 21:19:20 +02:00
Weston BliedenandGitHub 219ff70c84 Update disclaimer text in index.html 2026-04-13 16:59:13 +02:00
Weston BliedenandGitHub 7a7ecec47c Update README.md 2026-04-13 16:57:22 +02:00
Weston Blieden 3ab196b7b5 docs: add disclaimer to homepage hero 2026-04-13 16:34:16 +02:00
Weston BliedenandGitHub 6be4d7d8ad Format disclaimer section in README 2026-04-13 16:25:46 +02:00
Weston BliedenandGitHub 64ee3e49ab Add disclaimer to README
Added a disclaimer about the project's independence from Axis Communications.
2026-04-13 16:22:51 +02:00
Weston Blieden 4df48e8ae6 fix: node name, account, version and IP persist after syslog rotation 2026-04-13 14:33:16 +02:00
Weston Blieden 806c3309b6 CI: strip debug info from Tailscale binaries to reduce .eap size ~30% 2026-04-11 21:17:55 +02:00
Weston Blieden a4deaeacae Fix empty syslog: pipe tailscaled output via --verbose=1 to logger, add app list API fallback to all variants 2026-04-11 20:59:35 +02:00
Weston Blieden 6ba1c1a1a1 Fix UI: cache connection details in localStorage to survive syslog rotation, detect running state from health/derp/c2n patterns 2026-04-11 18:04:22 +02:00
Weston BliedenandGitHub 25df94e489 Fix README formatting and remove duplicate link
Removed duplicate homepage link and updated formatting.
2026-04-11 12:45:05 +02:00
Weston Blieden a72987391c Update Tailscale binaries to v1.96.4, fix UI parsing (last-match), add Check for Updates button, direct download links on homepage 2026-04-11 12:41:40 +02:00
Weston Blieden 04907d55bf Redesign ACAP UI: dark/light theme, version check, better log viewer 2026-04-11 09:39:17 +02:00
Weston Blieden 54a1859f14 Fix mobile layout for nav, hero, downloads, and footer 2026-04-11 07:05:55 +02:00
Weston Blieden 81e38c28b6 Add sponsor link to nav bar 2026-04-11 06:28:45 +02:00
Weston Blieden 8643e99833 Add Open Graph meta tags and social sharing image 2026-04-11 05:43:41 +02:00
Weston Blieden 95e4a9aec2 Add homepage link to README 2026-04-11 05:40:27 +02:00
Weston Blieden fb67b6dff3 Add GitHub Pages homepage with light/dark theme 2026-04-11 05:37:53 +02:00
Weston BliedenandGitHub 77fc186d0f Update sponsorship wording in README 2026-04-05 20:53:18 +02:00
Weston BliedenandGitHub b789d2e78e Update README to improve wording 2026-04-05 20:51:09 +02:00
Weston BliedenandGitHub 937b8ede3e Update project title in README.md 2026-04-05 20:49:44 +02:00
Weston BliedenandGitHub 49898008f6 Update installation instructions for clarity 2026-04-05 20:48:39 +02:00
github-actions[bot] 5b09a40231 Update Tailscale to v1.96.4 2026-03-28 02:52:43 +00:00
Weston BliedenandGitHub 98918ca6f5 Update README.md 2026-03-26 10:18:16 +01:00
Weston Blieden 08b0fdc081 Create LICENSE 2026-03-19 16:39:22 +01:00
Weston Blieden f3c6dd54f3 Update build.yml 2026-03-19 16:26:26 +01:00
Weston Blieden c3cbf8d433 Improve all variants: new UI, respawn mode, arm_custom, binary gitignore 2026-03-19 16:23:44 +01:00
github-actions[bot] 39a5a42def Update Tailscale to v1.96.2 2026-03-19 02:55:58 +00:00
github-actions[bot] 713550d1c0 Update Tailscale to v1.94.2 2026-02-26 02:46:36 +00:00
github-actions[bot] 14db783425 Update Tailscale to v1.94.1 2026-01-28 02:26:05 +00:00
github-actions[bot] c02f0aa498 Update Tailscale to v1.92.5 2026-01-07 02:22:01 +00:00
github-actions[bot] 96477cdb0d Update Tailscale to v1.92.3 2025-12-17 08:38:44 +00:00
Weston BliedenandGitHub 4e0eabeec3 Update version in manifest.json to 1.92.1 2025-12-17 09:36:08 +01:00
Weston BliedenandGitHub 59161ccd91 Downgrade version from 1.92.3 to 1.92.1 2025-12-17 09:35:26 +01:00
Weston BliedenandGitHub e1b2ac3490 Downgrade version from 1.92.3 to 1.92.1 2025-12-17 09:35:04 +01:00
Weston BliedenandGitHub 5f03ac918f Update version in manifest.json to 1.92.1 2025-12-17 09:34:45 +01:00
Weston BliedenandGitHub 2db9f27181 Update version in manifest.json to 1.92.1 2025-12-17 09:34:26 +01:00
Weston Blieden 396b450415 Store state in localdata
The tailscaled.state file in localdata will now persist across updates, so your camera stays connected to Tailscale without re-authentication
2025-12-17 09:31:34 +01:00
github-actions[bot] 2d1ff5e8a6 Update Tailscale to v1.92.3 2025-12-17 07:36:38 +00:00
Weston BliedenandGitHub 7655028477 Update cron schedule for build workflow 2025-12-17 08:33:36 +01:00
Mo3he f890d8df1a Re add lib folders after housekeeping 2025-12-15 15:48:21 +01:00
Weston BliedenandGitHub df0756a64d Update .gitignore to exclude release and Tailscale files
Added entries to ignore release artifacts and Tailscale files.
2025-12-15 12:25:06 +01:00
Weston BliedenandGitHub df2cf84c6c Modify build.yml to limit git add to manifest files
Only commit manifest files and ignore release artifacts.
2025-12-15 12:23:57 +01:00
github-actions[bot] f420e7d24c Update Tailscale to v1.92.1 2025-12-15 11:02:54 +00:00
Weston BliedenandGitHub 3dc49f1254 Enhance Tailscale version retrieval logic
Updated the workflow to check for ARM build availability and fallback to the latest version if not found.
2025-12-15 11:58:09 +01:00
github-actions[bot] 2005ba32db Update Tailscale to v1.90.9 2025-11-26 15:08:35 +00:00
github-actions[bot] 1f9c6a9e45 Update Tailscale to v1.90.8 2025-11-20 14:26:56 +00:00
github-actions[bot] 6148fc3298 Update Tailscale to v1.90.6 2025-11-03 03:52:08 +00:00
github-actions[bot] bd60c24b5b Update Tailscale to v1.90.3 2025-10-28 07:40:27 +00:00
github-actions[bot] 7926c58b3d Update Tailscale to v1.90.2 2025-10-27 03:53:33 +00:00
github-actions[bot] 6bdca7eadd Update Tailscale to v1.90.1 2025-10-23 20:07:52 +00:00
Weston BliedenandGitHub 8b941b08a5 Update README for Tailscale ACAP user space mode
Removed limitation note for Tailscale ACAP user space mode.
2025-10-22 21:36:54 +02:00
Weston BliedenandGitHub d157a91bae Fix build_needed flag logic in workflow 2025-10-22 21:31:29 +02:00
Weston BliedenandGitHub b35ed437b5 Fix build_needed condition in build workflow 2025-10-22 21:25:51 +02:00
Weston BliedenandGitHub cb390384a1 Update tailscaled command to include SOCKS5 server 2025-10-22 21:18:43 +02:00
Weston BliedenandGitHub 533fc53040 Update Tailscaled command to include SOCKS5 server 2025-10-22 21:17:11 +02:00
Weston BliedenandGitHub 0a85c286b4 Merge pull request #26 from kaleaht/SOCKS5-proxy
feat: ability to route traffic to other tailnet nodes using SOCKS5 proxy
2025-10-22 21:13:05 +02:00
Ahti Kalervo d7e7b63952 feat: ability to route traffic to other tailnet nodes using SOCKS5 proxy 2025-10-22 21:55:10 +03:00
Weston BliedenandGitHub ed7643b2eb Update README.md 2025-09-29 10:53:27 +02:00
Weston BliedenandGitHub c4b24aee40 Update README.md 2025-09-29 10:51:24 +02:00
Weston BliedenandGitHub bec473f0a8 Update README.md 2025-09-29 09:35:34 +02:00
Weston BliedenandGitHub 5278677098 Update README.md 2025-09-29 09:33:20 +02:00
github-actions[bot] c21f640622 Update Tailscale to v1.88.3 2025-09-29 03:38:36 +00:00
Weston BliedenandGitHub 83e108bb05 Update README.md 2025-09-15 13:49:03 +02:00
Weston BliedenandGitHub 38d7af6c86 Update build.yml 2025-09-15 07:58:02 +02:00
github-actions[bot] 51ead4a708 Update Tailscale to v1.88.1 2025-09-15 03:41:03 +00:00
Weston BliedenandGitHub 123906c98b Update README.md 2025-08-28 12:15:15 +02:00
Weston BliedenandGitHub f6999311b7 Update build.yml 2025-08-28 12:09:50 +02:00
Weston BliedenandGitHub a95415d687 Update build.yml 2025-08-28 12:04:18 +02:00
Weston BliedenandGitHub 7d584d1a22 Update build.yml 2025-08-28 11:50:02 +02:00
Weston BliedenandGitHub e27f0cdb34 Update build.yml 2025-08-28 11:45:27 +02:00
Weston BliedenandGitHub e5954eac52 Update build.yml 2025-08-28 11:41:17 +02:00
Weston BliedenandGitHub 91a45be400 Update build.yml 2025-08-28 11:35:04 +02:00
Weston BliedenandGitHub 9b06b49fef Update build.yml 2025-08-28 11:26:37 +02:00
Weston BliedenandGitHub 811aa9e2f5 Update README.md 2025-08-27 17:14:07 +02:00
Weston BliedenandGitHub f69a1971a2 Update README.md 2025-08-27 17:12:09 +02:00
github-actions[bot] e01a2ab95f Update Tailscale to v1.86.2 2025-08-27 15:08:38 +00:00
Weston BliedenandGitHub 5b87555295 Delete all directory 2025-08-27 17:04:51 +02:00
Weston BliedenandGitHub 4a4618344a Create build.yml 2025-08-27 17:04:08 +02:00
Weston BliedenandGitHub de739dec13 Update README.md 2025-05-26 18:25:20 +02:00
Weston BliedenandGitHub ef0cb156be Update README.md 2025-05-26 18:24:37 +02:00
Weston Blieden f3556d3e76 Merge branch 'main' of https://github.com/Mo3he/Axis_Cam_Tailscale 2025-05-26 15:18:51 +02:00
Weston Blieden d5e2be837f Update To Version 1.84.0
Updated Tailscale Binaries to version 1.84.0
2025-05-26 15:18:47 +02:00
Weston BliedenandGitHub 10f5cec1dd Update README.md 2025-04-30 08:59:39 +02:00
Weston BliedenandGitHub eb46f0f201 Update README.md 2025-04-30 08:56:54 +02:00
Weston BliedenandGitHub 5a6aada216 Update README.md 2025-04-30 08:54:08 +02:00
Weston BliedenandGitHub 65509f037e Update README.md 2025-04-30 08:40:22 +02:00
Weston BliedenandGitHub 5e27f2f6ca Update README.md 2025-04-30 08:20:02 +02:00
Weston Blieden f27769f415 Added "ROOT" versions 2025-04-25 13:34:46 +02:00
Weston BliedenandGitHub b8038797f3 Update README.md 2025-04-16 19:59:46 +02:00
Weston BliedenandGitHub 07f73648bf Update README.md 2025-04-16 18:41:39 +02:00
Weston BliedenandGitHub 108ea203b4 Update README.md 2025-04-16 18:40:32 +02:00
Weston BliedenandGitHub 4b282e81e6 Update README.md 2025-04-16 18:38:50 +02:00
Weston Blieden 34943f62b9 Added custom version 2025-04-16 18:35:38 +02:00
Weston Blieden 3d12e28a1f Update binaries to 1.82.0 2025-04-11 09:51:39 +02:00
Weston BliedenandGitHub b453bcb6f2 Update README.md 2025-03-24 10:02:25 +01:00
Weston Blieden 616d270350 Update Tailscale binaries to v1.80.3 2025-03-24 10:01:38 +01:00
Weston Blieden 17c2ae705c Update Tailscale binaries to v1.78.1 2025-01-13 08:19:57 +01:00
Weston Blieden 54be4dd84f V 1.76.1
Updated Tailscale binaries to version 1.76.1
2024-10-24 08:03:20 +02:00
Weston Blieden 452f7d54d8 V1.72.1
Updated tailscale binaries to v1.72.1
2024-08-26 08:33:38 +02:00
Weston BliedenandGitHub b444c964f6 Update README.md 2024-08-08 18:34:06 +02:00
Weston BliedenandGitHub e0178b531e Update README.md 2024-08-08 18:27:54 +02:00
Weston BliedenandGitHub 46f7a524c0 Merge pull request #15 from MicroTechnology-Services/allarch
Add all arch build
2024-08-08 18:25:38 +02:00
Wes Malone f5ab42fd3f Add all arch 2024-08-07 10:32:02 -05:00
Weston BliedenandGitHub 019beb3c73 Update README.md 2024-06-27 10:10:42 +02:00
Weston BliedenandGitHub db343b4447 Update README.md 2024-06-27 07:08:30 +02:00
Weston Blieden f3163cae45 Updated to V1.68.1
Updated tailscale binaries and removed need for root to run
2024-06-27 07:04:56 +02:00
252 changed files with 5043 additions and 80987 deletions
+22
View File
@@ -0,0 +1,22 @@
{
"app": "Tailscale_VPN",
"friendlyName": "Tailscale VPN",
"versionPolicy": "mirror",
"upstream": {
"type": "script",
"script": "ci/upstream-version.sh",
"name": "Tailscale",
"changesUrl": "https://tailscale.com/changelog"
},
"build": {
"command": "./build.sh",
"env": {}
},
"pins": [],
"signing": {
"skip": [
"*_acap3.eap",
"*_root.eap"
]
}
}
+102
View File
@@ -0,0 +1,102 @@
---
Language: Cpp
# BasedOnStyle: LLVM
AccessModifierOffset: -2
AlignAfterOpenBracket: AlwaysBreak
AlignConsecutiveAssignments: false
AlignConsecutiveDeclarations: false
AlignEscapedNewlines: Right
AlignOperands: true
AlignTrailingComments: true
AllowAllParametersOfDeclarationOnNextLine: false
AllowShortBlocksOnASingleLine: false
AllowShortCaseLabelsOnASingleLine: false
AllowShortFunctionsOnASingleLine: None
AllowShortIfStatementsOnASingleLine: false
AllowShortLoopsOnASingleLine: false
AlwaysBreakAfterDefinitionReturnType: None
AlwaysBreakAfterReturnType: None
AlwaysBreakBeforeMultilineStrings: false
AlwaysBreakTemplateDeclarations: MultiLine
BinPackArguments: false
BinPackParameters: false
BreakBeforeBinaryOperators: None
BreakBeforeBraces: Attach
BreakBeforeInheritanceComma: false
BreakInheritanceList: BeforeColon
BreakBeforeTernaryOperators: true
BreakConstructorInitializersBeforeComma: false
BreakConstructorInitializers: BeforeColon
BreakAfterJavaFieldAnnotations: false
BreakStringLiterals: true
ColumnLimit: 120
CommentPragmas: '^ IWYU pragma:'
CompactNamespaces: false
ConstructorInitializerAllOnOneLineOrOnePerLine: false
ConstructorInitializerIndentWidth: 4
ContinuationIndentWidth: 4
Cpp11BracedListStyle: true
DerivePointerAlignment: false
DisableFormat: false
ExperimentalAutoDetectBinPacking: false
FixNamespaceComments: true
ForEachMacros:
- foreach
- Q_FOREACH
- BOOST_FOREACH
IncludeBlocks: Preserve
IncludeCategories:
- Regex: '^"(llvm|llvm-c|clang|clang-c)/'
Priority: 2
- Regex: '^(<|"(gtest|gmock|isl|json)/)'
Priority: 3
- Regex: '.*'
Priority: 1
IncludeIsMainRegex: '(Test)?$'
IndentCaseLabels: false
IndentPPDirectives: None
IndentWidth: 4
IndentWrappedFunctionNames: false
JavaScriptQuotes: Leave
JavaScriptWrapImports: true
KeepEmptyLinesAtTheStartOfBlocks: true
MacroBlockBegin: ''
MacroBlockEnd: ''
MaxEmptyLinesToKeep: 1
NamespaceIndentation: None
ObjCBinPackProtocolList: Auto
ObjCBlockIndentWidth: 2
ObjCSpaceAfterProperty: false
ObjCSpaceBeforeProtocolList: true
PenaltyBreakAssignment: 2
PenaltyBreakBeforeFirstCallParameter: 19
PenaltyBreakComment: 300
PenaltyBreakFirstLessLess: 120
PenaltyBreakString: 1000
PenaltyBreakTemplateDeclaration: 10
PenaltyExcessCharacter: 1000000
PenaltyReturnTypeOnItsOwnLine: 60
PointerAlignment: Right
ReflowComments: true
SortIncludes: true
SortUsingDeclarations: true
SpaceAfterCStyleCast: false
SpaceAfterTemplateKeyword: true
SpaceBeforeAssignmentOperators: true
SpaceBeforeCpp11BracedList: false
SpaceBeforeCtorInitializerColon: true
SpaceBeforeInheritanceColon: true
SpaceBeforeParens: ControlStatements
SpaceBeforeRangeBasedForLoopColon: true
SpaceInEmptyParentheses: false
SpacesBeforeTrailingComments: 1
SpacesInAngles: false
SpacesInContainerLiterals: true
SpacesInCStyleCastParentheses: false
SpacesInParentheses: false
SpacesInSquareBrackets: false
Standard: Cpp11
TabWidth: 8
UseTab: Never
...
+12
View File
@@ -0,0 +1,12 @@
# All variants build from the repository root (docker build -f <variant>/Dockerfile .)
# so keep the context lean. Do NOT exclude common/app/ or <variant>/app/ — the
# Dockerfiles COPY those, including the Tailscale binaries placed in app/lib/.
.git
.github
.DS_Store
*.eap
*.tgz
build
releases
tailscale_bins
README.md
+11
View File
@@ -0,0 +1,11 @@
DEFAULT_BRANCH=origin/main
LINTER_RULES_PATH=/
VALIDATE_ALL_CODEBASE=true
IGNORE_GITIGNORED_FILES=true
YAML_CONFIG_FILE=.yamllint.yaml
MARKDOWN_CONFIG_FILE=.markdownlint.yaml
VALIDATE_DOCKERFILE_HADOLINT=true
VALIDATE_JSON=true
VALIDATE_MARKDOWN=true
VALIDATE_SHELL_SHFMT=true
VALIDATE_YAML=true
+168
View File
@@ -0,0 +1,168 @@
---
# Upstream release -> build -> DRAFT release holding unsigned .eap files.
# Signing is manual (Axis has no signing API); ../acap-sign.sh uploads the
# signed packages and publishes the release. The acap-ops repo notifies.
name: Build
on:
push:
branches: [main]
pull_request:
schedule:
- cron: "0 3 * * *"
workflow_dispatch:
inputs:
version:
description: "Version to build. Empty resolves from upstream."
required: false
force:
description: "Rebuild and re-cut the draft even if unchanged."
type: boolean
default: false
permissions:
contents: write
concurrency:
group: acap-release-${{ github.ref }}
cancel-in-progress: false
jobs:
check:
runs-on: ubuntu-latest
outputs:
build: ${{ steps.decide.outputs.build }}
release: ${{ steps.decide.outputs.release }}
version: ${{ steps.decide.outputs.version }}
upstream: ${{ steps.decide.outputs.upstream }}
steps:
- uses: actions/checkout@v7
- id: decide
env:
GH_TOKEN: ${{ github.token }}
INPUT_VERSION: ${{ github.event.inputs.version }}
INPUT_FORCE: ${{ github.event.inputs.force }}
EVENT_NAME: ${{ github.event_name }}
run: ./ci/resolve-version.sh
build:
needs: check
if: needs.check.outputs.build == 'true'
runs-on: ubuntu-latest
env:
VERSION: ${{ needs.check.outputs.version }}
UPSTREAM_VERSION: ${{ needs.check.outputs.upstream }}
steps:
- uses: actions/checkout@v7
- name: Apply version and upstream pins
run: ./ci/apply-version.sh "$VERSION" "$UPSTREAM_VERSION"
# Repos without a tests/run.sh simply skip this.
- name: Run unit tests
run: |
set -euo pipefail
if [ -x tests/run.sh ] || [ -f tests/run.sh ]; then
sudo apt-get update
sudo apt-get install -y --no-install-recommends pkg-config libglib2.0-dev
sh tests/run.sh
else
echo "no tests/run.sh, skipping"
fi
- name: Build packages
run: ./ci/build-packages.sh
- name: Verify packages
run: |
set -euo pipefail
shopt -s nullglob
packages=(releases/*.eap)
if [ ${#packages[@]} -eq 0 ]; then
echo "no .eap produced" >&2
exit 1
fi
for package in "${packages[@]}"; do
echo "== $package"
tar tzf "$package" >/dev/null
done
- uses: actions/upload-artifact@v7
with:
name: packages
path: releases/*.eap
if-no-files-found: error
# Unstripped binaries for symbolising a crash from a shipped (stripped)
# package. Not a release asset: they are only useful while debugging.
- uses: actions/upload-artifact@v7
with:
name: debug-symbols
path: debug/
if-no-files-found: ignore
# Only after a successful build, so a failed upstream jump leaves main clean.
- name: Commit version bump
if: needs.check.outputs.release == 'true' && github.event_name != 'pull_request'
run: |
set -euo pipefail
git config user.name "github-actions[bot]"
git config user.email "github-actions[bot]@users.noreply.github.com"
# Packages are already uploaded as an artifact; removing them here
# keeps build output out of the commit regardless of .gitignore.
rm -rf releases
git add -A
if git diff --cached --quiet; then
echo "nothing to commit"
exit 0
fi
git commit -m "Update to $VERSION"
# The remote can move while a long build runs, so rebase and retry.
for attempt in 1 2 3; do
if git push; then
exit 0
fi
echo "push rejected, rebasing (attempt $attempt)"
git pull --rebase --autostash origin main
done
echo "could not push the version bump" >&2
exit 1
release:
needs: [check, build]
if: needs.check.outputs.release == 'true' && github.event_name != 'pull_request'
runs-on: ubuntu-latest
env:
VERSION: ${{ needs.check.outputs.version }}
GH_TOKEN: ${{ github.token }}
steps:
- uses: actions/checkout@v7
with:
ref: main
fetch-depth: 0
- uses: actions/download-artifact@v8
with:
name: packages
path: releases
# Stays a DRAFT: unsigned packages must never reach users, and an
# already-published release must never be overwritten with unsigned ones.
- name: Create or refresh draft release
run: |
set -euo pipefail
tag="v$VERSION"
./ci/release-notes.sh "$VERSION" "${{ needs.check.outputs.upstream }}" > /tmp/notes.md
cat /tmp/notes.md
if gh release view "$tag" --json isDraft --jq '.isDraft' 2>/dev/null | grep -qx true; then
gh release upload "$tag" releases/*.eap --clobber
gh release edit "$tag" --notes-file /tmp/notes.md
elif gh release view "$tag" >/dev/null 2>&1; then
echo "release $tag is already published; refusing to touch it" >&2
exit 1
else
gh release create "$tag" releases/*.eap \
--draft \
--title "Tailscale VPN $VERSION" \
--notes-file /tmp/notes.md
fi
+41
View File
@@ -0,0 +1,41 @@
---
# Advanced setup: default setup cannot select javascript-typescript here
# because the UI scripts live inside index.html rather than a .js file.
name: CodeQL
on:
push:
branches: [main]
pull_request:
schedule:
- cron: "24 4 * * 1"
permissions:
contents: read
jobs:
analyze:
name: Analyze ${{ matrix.language }}
runs-on: ubuntu-latest
permissions:
security-events: write
actions: read
contents: read
strategy:
fail-fast: false
matrix:
language: [c-cpp, javascript-typescript]
steps:
- name: Checkout
uses: actions/checkout@v7
- name: Initialize CodeQL
uses: github/codeql-action/init@v4
with:
languages: ${{ matrix.language }}
build-mode: none
- name: Perform CodeQL analysis
uses: github/codeql-action/analyze@v4
with:
category: "/language:${{ matrix.language }}"
+22
View File
@@ -0,0 +1,22 @@
---
name: Lint
on: push
jobs:
Build:
name: Lint code base
runs-on: ubuntu-latest
steps:
- name: Checkout Code
uses: actions/checkout@v7
with:
fetch-depth: 0
- name: Setup Environment
run: cat .github/super-linter.env >> "$GITHUB_ENV"
- name: Lint code base
uses: super-linter/super-linter/slim@v8
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
+16
View File
@@ -1,2 +1,18 @@
**/.DS_Store
**/build
# Do not track release artifacts (local .eap build outputs stay untracked anywhere in the tree)
releases/
build/
*.eap
# Unstripped binaries kept for crash symbolisation, uploaded as a CI artifact
debug/
# Do not track downloaded Tailscale tarballs and temp bins
tailscale_bins/
*.tgz
# Tailscale binaries - downloaded fresh by CI at build time, not stored in git
*/app/lib/tailscale
*/app/lib/tailscaled
+8
View File
@@ -0,0 +1,8 @@
---
# Enforce error-level Dockerfile correctness. Warnings/info are advisory: the
# ACAP cross-compile Dockerfiles use accepted patterns (cd in RUN, ARG-templated
# FROM tags hadolint cannot resolve, optional pipefail).
failure-threshold: error
ignored:
# Pin versions in 'apt-get install' - the SDK base image is already pinned.
- DL3008
+11
View File
@@ -0,0 +1,11 @@
---
# Line length (disabled: long lines in tables, URLs and prose are acceptable)
MD013: false
# Allow inline HTML (e.g. <img> logos and badges in READMEs)
MD033: false
# Allow blank lines inside blockquotes
MD028: false
# First line in a file should be a top-level heading
MD041: false
# Table column style (disabled; the previous "padded" value was invalid)
MD060: false
-6
View File
@@ -1,6 +0,0 @@
{
"files.associations": {
"axlicense.h": "c"
},
"C_Cpp.errorSquiggles": "disabled"
}
+2
View File
@@ -0,0 +1,2 @@
rules:
line-length: disable
+157
View File
@@ -0,0 +1,157 @@
# Changelog
All notable changes to this project are documented here. Each version
links to its full release notes on GitHub.
The format is based on [Keep a Changelog](https://keepachangelog.com/).
## 1.102.4 - 2026-09-11
- Update to upstream 1.102.4.
## [1.98.9-Signed] - 2026-07-21 - Tailscale VPN 1.98.9 (Signed)
- Packages are now signed with the Axis ACAP signing service and install
normally on AXIS OS 12.10 and later.
- Vendor updated to `moshe@mohome.net` with the registered vendor ID.
- `root` and `acap3` variants remain unsigned (manifest schema v1.x).
- Upgrading from an earlier unsigned version can fail with "Couldn't
install: app" (device log: "Vendor ID in manifest does not match the
vendor ID of the previous version"). Back up your config, uninstall the
old version, then install this one.
## [1.98.8-2] - 2026-07-03 - Tailscale VPN 1.98.8-2
## [1.98.8-subnet-routing] - 2026-07-01 - Tailscale VPN 1.98.8 - Subnet Routing
## [1.98.8] - 2026-06-30 - Tailscale VPN 1.98.8
## [1.98.4-statusfix] - 2026-06-16
## [1.98.4-dns-routes] - 2026-06-10 - Tailscale VPN v1.98.4 - Accept DNS & Routes toggles
## [1.98.4] - 2026-06-02 - Tailscale VPN 1.98.4
## [1.98.3] - 2026-05-22 - Tailscale VPN 1.98.3
## [1.98.2] - 2026-05-19 - Tailscale VPN 1.98.2
## [1.96.4-dns-routes] - 2026-05-12 - Tailscale VPN v1.96.4 - Accept DNS & Routes toggles
## [1.96.4-r3] - 2026-04-17 - Tailscale VPN v1.96.4-r3
## [1.96.4-r2] - 2026-04-17
## [1.96.4-proxy] - 2026-04-14 - Tailscale VPN 1.96.4 - Proxy Support
## [1.96.4] - 2026-03-28 - Tailscale VPN 1.96.4
## [1.96.2] - 2026-03-19 - Tailscale VPN 1.96.2
## [1.94.2] - 2026-02-26 - Tailscale VPN 1.94.2
## [1.94.1] - 2026-01-28 - Tailscale VPN 1.94.1
## [1.92.5] - 2026-01-07 - Tailscale VPN 1.92.5
## [1.92.3] - 2025-12-17 - Tailscale VPN 1.92.3
## [1.92.1] - 2025-12-15 - Tailscale VPN 1.92.1
## [1.90.9] - 2025-11-26 - Tailscale VPN 1.90.9
## [1.90.8] - 2025-11-20 - Tailscale VPN 1.90.8
## [1.90.6] - 2025-11-03 - Tailscale VPN 1.90.6
## [1.90.3] - 2025-10-28 - Tailscale VPN 1.90.3
## [1.90.2] - 2025-10-27 - Tailscale VPN 1.90.2
## [1.90.1] - 2025-10-23 - Tailscale VPN 1.90.1
## [1.88.3] - 2025-09-29 - Tailscale VPN 1.88.3
## [1.88.1] - 2025-09-15 - Tailscale VPN 1.88.1
## [1.86.2] - 2025-08-27 - Tailscale VPN 1.86.2
## [1.84.0] - 2025-05-26
## [1.82.0] - 2025-04-11
## [1.80.3] - 2025-03-24
## [1.78.1] - 2025-01-13
## [1.76.1] - 2024-10-24
## [1.72.1] - 2024-08-26
## [1.68.1] - 2024-06-27
## [1.62.0] - 2024-03-23
## [1.60.0] - 2024-02-21
## [1.56.1] - 2024-01-17
## [1.54.0] - 2023-11-28
## [1.52.0] - 2023-11-01
## [1.50.1] - 2023-10-16
## [148.2] - 2023-09-13 - Version 1.48.2
## [1.44.0] - 2023-07-04
## [138.4] - 2023-04-17 - V1.38.4
## [1.34.0] - 2022-12-19
[1.98.8-2]: https://github.com/Mo3he/Axis_Cam_Tailscale/releases/tag/v1.98.8-2
[1.98.8-subnet-routing]: https://github.com/Mo3he/Axis_Cam_Tailscale/releases/tag/v1.98.8-subnet-routing
[1.98.8]: https://github.com/Mo3he/Axis_Cam_Tailscale/releases/tag/v1.98.8
[1.98.4-statusfix]: https://github.com/Mo3he/Axis_Cam_Tailscale/releases/tag/v1.98.4-statusfix
[1.98.4-dns-routes]: https://github.com/Mo3he/Axis_Cam_Tailscale/releases/tag/v1.98.4-dns-routes
[1.98.4]: https://github.com/Mo3he/Axis_Cam_Tailscale/releases/tag/v1.98.4
[1.98.3]: https://github.com/Mo3he/Axis_Cam_Tailscale/releases/tag/v1.98.3
[1.98.2]: https://github.com/Mo3he/Axis_Cam_Tailscale/releases/tag/v1.98.2
[1.96.4-dns-routes]: https://github.com/Mo3he/Axis_Cam_Tailscale/releases/tag/v1.96.4-dns-routes
[1.96.4-r3]: https://github.com/Mo3he/Axis_Cam_Tailscale/releases/tag/v1.96.4-r3
[1.96.4-r2]: https://github.com/Mo3he/Axis_Cam_Tailscale/releases/tag/v1.96.4-r2
[1.96.4-proxy]: https://github.com/Mo3he/Axis_Cam_Tailscale/releases/tag/v1.96.4-proxy
[1.96.4]: https://github.com/Mo3he/Axis_Cam_Tailscale/releases/tag/v1.96.4
[1.96.2]: https://github.com/Mo3he/Axis_Cam_Tailscale/releases/tag/v1.96.2
[1.94.2]: https://github.com/Mo3he/Axis_Cam_Tailscale/releases/tag/v1.94.2
[1.94.1]: https://github.com/Mo3he/Axis_Cam_Tailscale/releases/tag/v1.94.1
[1.92.5]: https://github.com/Mo3he/Axis_Cam_Tailscale/releases/tag/v1.92.5
[1.92.3]: https://github.com/Mo3he/Axis_Cam_Tailscale/releases/tag/v1.92.3
[1.92.1]: https://github.com/Mo3he/Axis_Cam_Tailscale/releases/tag/v1.92.1
[1.90.9]: https://github.com/Mo3he/Axis_Cam_Tailscale/releases/tag/v1.90.9
[1.90.8]: https://github.com/Mo3he/Axis_Cam_Tailscale/releases/tag/v1.90.8
[1.90.6]: https://github.com/Mo3he/Axis_Cam_Tailscale/releases/tag/v1.90.6
[1.90.3]: https://github.com/Mo3he/Axis_Cam_Tailscale/releases/tag/v1.90.3
[1.90.2]: https://github.com/Mo3he/Axis_Cam_Tailscale/releases/tag/v1.90.2
[1.90.1]: https://github.com/Mo3he/Axis_Cam_Tailscale/releases/tag/v1.90.1
[1.88.3]: https://github.com/Mo3he/Axis_Cam_Tailscale/releases/tag/v1.88.3
[1.88.1]: https://github.com/Mo3he/Axis_Cam_Tailscale/releases/tag/v1.88.1
[1.86.2]: https://github.com/Mo3he/Axis_Cam_Tailscale/releases/tag/v1.86.2
[1.84.0]: https://github.com/Mo3he/Axis_Cam_Tailscale/releases/tag/v.1.84.0
[1.82.0]: https://github.com/Mo3he/Axis_Cam_Tailscale/releases/tag/v.1.82.0
[1.80.3]: https://github.com/Mo3he/Axis_Cam_Tailscale/releases/tag/v.1.80.3
[1.78.1]: https://github.com/Mo3he/Axis_Cam_Tailscale/releases/tag/v.1.78.1
[1.76.1]: https://github.com/Mo3he/Axis_Cam_Tailscale/releases/tag/v.1.76.1
[1.72.1]: https://github.com/Mo3he/Axis_Cam_Tailscale/releases/tag/v.1.72.1
[1.68.1]: https://github.com/Mo3he/Axis_Cam_Tailscale/releases/tag/v1.68.1
[1.62.0]: https://github.com/Mo3he/Axis_Cam_Tailscale/releases/tag/v.1.62.0
[1.60.0]: https://github.com/Mo3he/Axis_Cam_Tailscale/releases/tag/v.1.60.0
[1.56.1]: https://github.com/Mo3he/Axis_Cam_Tailscale/releases/tag/v1.56.1
[1.54.0]: https://github.com/Mo3he/Axis_Cam_Tailscale/releases/tag/v.1.54.0
[1.52.0]: https://github.com/Mo3he/Axis_Cam_Tailscale/releases/tag/v.1.52.0
[1.50.1]: https://github.com/Mo3he/Axis_Cam_Tailscale/releases/tag/v1.50.1
[148.2]: https://github.com/Mo3he/Axis_Cam_Tailscale/releases/tag/v.148.2
[1.44.0]: https://github.com/Mo3he/Axis_Cam_Tailscale/releases/tag/v.1.44.0
[138.4]: https://github.com/Mo3he/Axis_Cam_Tailscale/releases/tag/v.138.4
[1.34.0]: https://github.com/Mo3he/Axis_Cam_Tailscale/releases/tag/v1.34.0
+19 -19
View File
@@ -13,13 +13,13 @@ All types of contributions are encouraged and valued. See the [Table of contents
- [I have a question](#i-have-a-question)
- [I want to contribute](#i-want-to-contribute)
- [Reporting bugs](#reporting-bugs)
- [Before submitting a bug report](#before-submitting-a-bug-report)
- [How do I submit a good bug report?](#how-do-i-submit-a-good-bug-report)
- [Suggesting enhancements](#suggesting-enhancements)
- [Before Submitting an Enhancement](#before-submitting-an-enhancement)
- [How do I submit a good enhancement suggestion?](#how-do-i-submit-a-good-enhancement-suggestion)
- [Your first code contribution](#your-first-code-contribution)
- [Reporting bugs](#reporting-bugs)
- [Before submitting a bug report](#before-submitting-a-bug-report)
- [How do I submit a good bug report?](#how-do-i-submit-a-good-bug-report)
- [Suggesting enhancements](#suggesting-enhancements)
- [Before Submitting an Enhancement](#before-submitting-an-enhancement)
- [How do I submit a good enhancement suggestion?](#how-do-i-submit-a-good-enhancement-suggestion)
- [Your first code contribution](#your-first-code-contribution)
## I have a question
@@ -46,13 +46,13 @@ A good bug report shouldn't leave others needing to chase you up for more inform
- To see if other users have experienced (and potentially already solved) the same issue you are having, check if there is not already a bug report existing for your bug or error in the [bug tracker][issues_bugs].
- Also make sure to search the internet to see if users outside of the GitHub community have discussed the issue.
- Collect information about the bug:
- Axis device model
- Axis device firmware version
- Stack trace
- OS and version (Windows, Linux, macOS, x86, ARM)
- Version of the interpreter, compiler, SDK, runtime environment, package manager, depending on what seems relevant
- Possibly your input and the output
- Can you reliably reproduce the issue? And can you also reproduce it with older versions?
- Axis device model
- Axis device firmware version
- Stack trace
- OS and version (Windows, Linux, macOS, x86, ARM)
- Version of the interpreter, compiler, SDK, runtime environment, package manager, depending on what seems relevant
- Possibly your input and the output
- Can you reliably reproduce the issue? And can you also reproduce it with older versions?
#### How do I submit a good bug report?
@@ -126,9 +126,9 @@ Before opening a Pull Request (PR), please consider the following guidelines:
And finally when you are satisfied with your changes, open a new PR.
<!-- markdownlint-disable MD034 -->
[issues]: https://github.com/AxisCommunications/tailscale-acap/issues
[issues_new]: https://github.com/AxisCommunications/tailscale-acap/issues/new
[issues_bugs]: https://github.com/AxisCommunications/tailscale-acap/issues?q=label%3Abug
[discussions]: https://github.com/AxisCommunications/tailscale-acap/discussions
[discussions_new]: https://github.com/AxisCommunications/tailscale-acap/discussions/new
[issues]: https://github.com/Mo3he/Axis_Cam_Tailscale/issues
[issues_new]: https://github.com/Mo3he/Axis_Cam_Tailscale/issues/new
[issues_bugs]: https://github.com/Mo3he/Axis_Cam_Tailscale/issues?q=label%3Abug
[discussions]: https://github.com/Mo3he/Axis_Cam_Tailscale/discussions
[discussions_new]: https://github.com/Mo3he/Axis_Cam_Tailscale/discussions/new
<!-- markdownlint-enable MD034 -->
+2 -3
View File
@@ -1,7 +1,6 @@
BSD 3-Clause License
Copyright (c) 2020 Tailscale & AUTHORS.
All rights reserved.
Copyright (c) 2022, Weston Blieden
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met:
@@ -26,4 +25,4 @@ DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+222 -53
View File
@@ -1,86 +1,255 @@
# The Tailscale installer ACAP
# Tailscale ACAP for Axis Cameras
This ACAP packages the scripts and files required to install the Tailscale VPN client on Axis Cameras.
[![Release](https://img.shields.io/github/v/release/Mo3he/Axis_Cam_Tailscale?style=flat)](https://github.com/Mo3he/Axis_Cam_Tailscale/releases)
[![License](https://img.shields.io/github/license/Mo3he/Axis_Cam_Tailscale?style=flat)](LICENSE)
[![Downloads](https://img.shields.io/github/downloads/Mo3he/Axis_Cam_Tailscale/total?label=Downloads&color=blue&style=flat)](https://github.com/Mo3he/Axis_Cam_Tailscale/releases)
[![Build](https://github.com/Mo3he/Axis_Cam_Tailscale/actions/workflows/build.yml/badge.svg)](https://github.com/Mo3he/Axis_Cam_Tailscale/actions/workflows/build.yml)
[![Super-Linter](https://github.com/Mo3he/Axis_Cam_Tailscale/actions/workflows/super-linter.yml/badge.svg)](https://github.com/Mo3he/Axis_Cam_Tailscale/actions/workflows/super-linter.yml)
[![Sponsor](https://img.shields.io/badge/Sponsor%20My%20Work-EA4AAA?style=flat&logo=github&logoColor=white)](https://github.com/sponsors/Mo3he)
[![Buy Me A Coffee](https://img.shields.io/badge/Buy%20Me%20A%20Coffee-FFDD00?style=flat&logo=buy-me-a-coffee&logoColor=black)](https://www.buymeacoffee.com/mo3he)
Current version 1.63.0,
This repository provides an **ACAP package** that installs the
[Tailscale VPN client](https://tailscale.com/) on Axis cameras, for secure remote
access without extra hardware or complex network configuration.
The "Auto Update" version has been removed since it no longer works given the files are not stored in the default location.
**[Visit the Homepage](https://mo3he.github.io/Axis_Cam_Tailscale/)**
https://tailscale.com/changelog/
> **Disclaimer:** Independent, community-developed ACAP package. Not an official
> Axis product and not affiliated with, endorsed by, or supported by Axis
> Communications AB or Tailscale Inc. Use at your own risk.
## Axis OS Support
> **Tailscale Notice:** Tailscale is a product of Tailscale Inc. This package
> independently redistributes the Tailscale binaries under the
> [BSD 3-Clause License](LICENSE) and is not affiliated with, endorsed by, or
> supported by Tailscale Inc. For the official Tailscale client, visit
> [tailscale.com](https://tailscale.com).
Support for Axis OS 12.
## Table of Contents
## Purpose
- [Overview](#overview)
- [Compatibility](#compatibility)
- [Installation](#installation)
- [Configuration](#configuration)
- [Ports & security](#ports--security)
- [Accessing Tailnet services from the camera](#accessing-tailnet-services-from-the-camera)
- [Updating Tailscale](#updating-tailscale)
- [Build from source](#build-from-source)
- [Roadmap](#roadmap)
- [Links](#links)
- [License](#license)
Adding a VPN client directly to the camera allows secure remote access to the device without requiring any other equipment or network configuration.
Tailscale achieves this in a secure, simple to setup and easy to use way.
Tailscale is based on WireGuard VPN tunneling technology.
## Overview
https://tailscale.com/blog/how-tailscale-works/
Adding a VPN client directly to the camera enables secure remote access without
additional hardware or complex network configuration, through Tailscale's
lightweight WireGuard-based tunnel.
## Links
- Secure remote access to cameras.
- Easy to install via EAP package.
- Works on **AXIS OS 10.12+** (non-root version, verified across 10.12–13).
- Works on **legacy AXIS OS 9.x / 10.x** via the ACAP 3 variant.
- Based on **WireGuard VPN** technology.
https://tailscale.com/
https://github.com/tailscale/tailscale
https://www.wireguard.com/
https://www.axis.com/
Tailscale ACAP runs **without root privileges** in userspace networking mode,
making it compatible with AXIS OS 10.12+. For **full kernel networking**, use the
**ROOT** version (AXIS OS 10.12–11.x only; AXIS OS 12 and later removed root
access for third-party applications). Learn more:
[How Tailscale Works](https://tailscale.com/blog/how-tailscale-works/).
## Compatibility
The Tailscale ACAP is compatable with Axis cameras with arm and aarch64 based Soc's.
| Build | AXIS OS | Architecture | Notes |
|---|---|---|---|
| ACAP 4 (native SDK) | 10.12 – 13 | aarch64 | Standard, userspace networking |
| ACAP 4 (native SDK) | 10.12 – 13 | armv7hf | Standard, userspace networking |
| ACAP 4 root | 10.12 – 11.x | aarch64 | Full kernel networking (not on OS 12+) |
| ACAP 4 root | 10.12 – 11.x | armv7hf | Full kernel networking (not on OS 12+) |
| ACAP 3 (legacy SDK) | 9.x – 10.x | armv7hf | Legacy cameras |
```
curl --anyauth "*" -u <username>:<password> <device ip>/axis-cgi/basicdeviceinfo.cgi --data "{\"apiVersion\":\"1.0\",\"context\":\"Client defined request ID\",\"method\":\"getAllProperties\"}"
> Most cameras use the standard **ACAP 4** build. The **root** builds add
> kernel-level networking but only run on AXIS OS 10.12–11.x (AXIS OS 12+ removed
> root access for ACAPs). Use the **ACAP 3** build only on legacy cameras that
> don't support ACAP 4 (AXIS OS 9–10).
**Verified on AXIS OS 13** (13.0.0, aarch64).
## Installation
> **Signed packages:** Release `.eap` files are signed with the Axis ACAP
> signing service and install normally on AXIS OS 12.10 and later.
>
> **Upgrading from an earlier version?** The signing vendor changed, so
> installing over a previously installed unsigned build can fail with
> **"Couldn't install: app"** (device log: *"Vendor ID in manifest does not
> match the vendor ID of the previous version"*). To upgrade: back up your app
> configuration, **uninstall** the old version, then install the signed one.
Get the **prebuilt `.eap` file** from the
[Releases page](https://github.com/Mo3he/Axis_Cam_Tailscale/releases).
1. Log into your Axis camera.
2. Go to **Apps -> Add App**.
3. Upload the `.eap` file.
Once installed:
- Start the app.
- Click **Open** to view logs and get your Tailscale authentication URL.
- On uninstall, all changes/files are removed.
> You'll need a [Tailscale account](https://tailscale.com/) to authenticate.
## Configuration
The app runs a C-based parameter bridge that reads settings from the ACAP
parameter store and launches Tailscale. View logs and connection status via the
**Open** button in the app, and authenticate using the provided URL or by
pre-entering an auth key in **Settings**. Parameter changes (ports, server URL,
auth key) are applied automatically without reinstalling the app.
All parameters are configurable via the web UI (**Open -> Settings** card) and
take effect immediately:
| Parameter | Default | Description |
|---|---|---|
| Custom Server URL | *(empty)* | Control server URL for [Headscale](https://headscale.net/) or other self-hosted servers. Leave blank to use Tailscale's official servers. |
| Auth Key | *(empty)* | Pre-authentication key (`tskey-auth-...`). Cleared automatically after first successful connection. Leave blank to authenticate via browser. |
| HTTP Proxy Port | `8080` | Port for the outbound HTTP/HTTPS proxy. |
| SOCKS5 Proxy Port | `1080` | Port for the outbound SOCKS5 proxy. |
| Accept DNS | `off` | Passes `--accept-dns=true` to `tailscale up`. Allows the tailnet to push DNS settings to the camera. Not available on `armv7hf_acap3`. |
| Accept Routes | `off` | Passes `--accept-routes=true` to `tailscale up`. Allows the camera to use subnet routes advertised by other nodes. Not available on `armv7hf_acap3`. |
| Advertise Routes (Subnet Router) | *(empty)* | Comma-separated CIDRs (e.g. `192.168.1.0/24,10.0.0.0/8`) this camera will route for the tailnet, turning it into a subnet router. Approve the routes in the Tailscale admin console after saving. Leave blank to disable. |
## Ports & security
All non-ROOT variants expose two local proxy endpoints that route outbound
traffic through the Tailscale tunnel. The ports are configurable via **Settings
-> HTTP Proxy Port / SOCKS5 Proxy Port**.
| Proxy | Default address | Routes |
|---|---|---|
| HTTP CONNECT | `http://127.0.0.1:8080` | HTTP and HTTPS traffic |
| SOCKS5 | `127.0.0.1:1080` | Any SOCKS5-aware app or service |
Set the HTTP CONNECT proxy wherever an HTTP/HTTPS proxy field is available on the
camera (System -> Network -> Global proxies; System -> MQTT -> Broker). For
SOCKS5-aware apps, set their proxy to `127.0.0.1:<port>`.
> **Security:** the proxies bind to **loopback only** (`127.0.0.1`), so they are
> not exposed on the camera's network interface, the least-exposed of the VPN
> ACAPs. The active proxy addresses are shown in the **Proxy Configuration** card
> of the web UI. If you change a port that is already in use, the app logs an
> error and exits rather than silently falling back.
## Accessing Tailnet services from the camera
There is an important asymmetry. Making the camera **reachable from** the tailnet
(browsing to it, VAPIX, SSH from another tailnet node) works on every build. The
harder direction is the camera **reaching out to** a tailnet peer, for example
mounting an SMB/CIFS share hosted on another node. How well this works depends on
the build:
| Build | Networking mode | Camera-initiated access to tailnet peers |
|---|---|---|
| Non-root (`aarch64`, `armv7hf`) and `armv7hf_acap3` | `--tun=userspace-networking` (no kernel `tailscale0`) | Only through the local **SOCKS5 / HTTP proxies**, and only for **proxy-aware** apps. Firmware system services (SMB client, NTP, etc.) are proxy-unaware and **cannot** reach a peer's `100.x` IP directly. |
| **ROOT** (`aarch64_root`, `armv7hf_root`) | Kernel networking with a real `tailscale0` interface | Peer `100.x` IPs are routable at the OS level, so firmware services **can** connect directly. Enable **Accept Routes** to also reach subnets behind other nodes. |
### Plan B: reverse-SSH tunnel
> **Requires root on the camera.** Port 445 is privileged, so binding it needs a
> root-capable build (e.g. developer certificates installed).
If you cannot use the ROOT build but still need the camera to mount a share on a
machine that is on your tailnet, make the remote share appear **local** to the
camera with a reverse SSH tunnel. Because the destination becomes `127.0.0.1`, the
proxy-unaware SMB client never has to route over the tailnet.
```bash
# Forward the camera's local port 445 back to the SMB share on this machine
ssh -R 445:localhost:445 root@<camera-tailscale-ip>
```
where `<device ip>` is the IP address of the Axis device, `<username>` is the root username and `<password>` is the root password. Please
note that you need to enclose your password with quotes (`'`) if it contains special characters.
Then, in **System -> Storage -> Add network share**, use `127.0.0.1` as the share
host and connect.
## Installing
## Updating Tailscale
The recommended way to install this ACAP is to use the pre built eap file.
Go to "Apps" on the camera and click "Add app".
- New `.eap` files are auto-built and released **weekly** (if a new Tailscale
version is available).
- To update, simply install the new `.eap` over the existing one.
### Manual update (advanced)
## Using the Tailscale ACAP
Replace the binaries in `common/app/lib/` (shared by `aarch64`, `armv7hf`, and
their ROOT variants) or `arm_acap3/app/lib/` (legacy variant, kept separate):
The Tailscale ACAP will run a script on startup that sets the required permissions and starts the service and app.
Once started click "Open" to see the output of the logs for further instructions and obtain the authetication URL.
- `tailscale`
- `tailscaled`
When uninstalling the ACAP, all changes and files are removed from the camera.
Download the latest versions:
[Tailscale static builds](https://pkgs.tailscale.com/stable/#static).
You will need a tailscale.com account to use the ACAP
## Build from source
## Updating Tailscale version
The Tailscale binaries are not stored in git, so first download them (see
[Manual update](#manual-update-advanced)) and place them in `common/app/lib/`, or
`arm_acap3/app/lib/` for the legacy variant.
The eap files will be updated from time to time and simply installing the new version over the old will update all files.
All variants build from the **repository root**, pointing at the variant's own
`Dockerfile`:
It's also possible to build and use a locally built image as all necesary files are provided.
Replace binaries "tailscale" and "tailscaled" in lib folder with new versions.
Make sure you use the files for the correct Soc.
Latest versions can be found at
https://pkgs.tailscale.com/stable/#static
To build,
From main directory of the version you want (arm/aarch64)
```
docker build --tag <package name> .
```
```
docker cp $(docker create <package name>):/opt/app ./build
```bash
docker build -f aarch64/Dockerfile --tag <package_name> .
docker cp $(docker create <package_name>):/opt/app ./build
```
(Same for the others: just swap in `arm/Dockerfile`, `aarch64_ROOT/Dockerfile`,
`arm_ROOT/Dockerfile`, or `arm_acap3/Dockerfile`.)
## Roadmap
### AXIS OS 13 Preparation
AXIS OS 13 (scheduled for September 2026) introduces several breaking changes that
affect all ACAP applications. See the full
[AXIS OS 13 breaking changes](https://www.axis.com/for-developers/news/AXIS-OS-13-breaking-changes)
announcement for details.
- [x] **Recompile for 64-bit time (Y2038)** - Done for the standard
`aarch64`/`armv7hf` builds (now built against ACAP Native SDK 12.10.0); the
ROOT variants intentionally stay on the older SDK since AXIS OS 12+ never
supports root third-party apps.
- [x] **Migrate to Manifest Schema v2** - Done for `aarch64`/`armv7hf` (schema
2.0.0, `compatibleOsVersions` declared); verified installability on OS
10.12–13.
- [x] **Audit for executable stack usage** - All compiled binaries report
`flags rw-` (no executable stack) on every architecture and variant.
- [x] **Verify web UI works over HTTPS** - Verified live; the UI only issues
relative-path requests, so it inherits the page's protocol with no
mixed-content risk.
- [x] **Sign the ACAP via the Axis ACAP Portal** - Done; `aarch64`/`armv7hf`
packages are signed with the Axis ACAP signing service. The `root` and
`acap3` variants use manifest schema v1.x and are distributed unsigned.
### General Improvements
- [x] **Accept DNS from tailnet toggle** - Opt-in setting passing
`--accept-dns=true` to `tailscale up` (defaults off).
- [x] **Accept routes toggle** - Opt-in setting passing `--accept-routes=true`.
- [ ] **Switch to tiny-tailscale binaries** - Evaluate replacing the bundled
`tailscale`/`tailscaled` with [tiny-tailscale](https://github.com/iamromulan/tiny-tailscale)
builds (single binary, ~43% smaller).
## Links
- [Tailscale](https://tailscale.com/)
- [Tailscale GitHub](https://github.com/tailscale/tailscale)
- [WireGuard](https://www.wireguard.com/)
- [Axis Communications](https://www.axis.com/)
## License
The packaging code in this repository is licensed under BSD 3-Clause (see
[LICENSE](LICENSE)); this also covers the redistributed Tailscale binaries
(upstream Tailscale is BSD 3-Clause). Bundled upstream components are listed in
[THIRD_PARTY_NOTICES.md](THIRD_PARTY_NOTICES.md).
+23
View File
@@ -0,0 +1,23 @@
# Security Policy
This is an independent, community-developed ACAP package, provided on a
best-effort basis. It is not an official Axis Communications product.
## Reporting a vulnerability
Please report security issues privately rather than in a public issue:
- Use GitHub's "Report a vulnerability" (Security > Advisories) to open a
private advisory, or
- email <moshe@mohome.net>.
Include the affected version (or `.eap` filename), camera model / Axis OS
version, a description and its impact, and reproduction steps if available. You
can expect an acknowledgement within a reasonable time; please avoid public
disclosure until a fix is released.
## Scope
Reports about this ACAP's own wrapper code, configuration handling, and default
settings are in scope. Vulnerabilities in bundled upstream projects should also
be reported to their respective upstream projects.
@@ -1,8 +1,20 @@
BSD 3-Clause License
# Third-Party Notices
Copyright (c) 2020 Tailscale & AUTHORS.
All rights reserved.
This ACAP package redistributes the Tailscale client. The ACAP's own wrapper
code is licensed separately (see `LICENSE`, BSD 3-Clause).
## Tailscale
- Copyright (c) 2020 Tailscale & AUTHORS
- Project: <https://github.com/tailscale/tailscale>
- License: BSD 3-Clause
Tailscale is a product of Tailscale Inc. This package independently
redistributes the Tailscale binaries and is not affiliated with, endorsed by, or
supported by Tailscale Inc. For the official Tailscale client, visit
<https://tailscale.com>.
```text
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met:
@@ -13,9 +25,9 @@ modification, are permitted provided that the following conditions are met:
this list of conditions and the following disclaimer in the documentation
and/or other materials provided with the distribution.
3. Neither the name of the copyright holder nor the names of its
contributors may be used to endorse or promote products derived from
this software without specific prior written permission.
3. Neither the name of the copyright holder nor the names of its contributors
may be used to endorse or promote products derived from this software
without specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
@@ -26,4 +38,5 @@ DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
```
+7 -5
View File
@@ -1,12 +1,14 @@
ARG ARCH=aarch64
ARG VERSION=1.14
ARG UBUNTU_VERSION=22.04
ARG VERSION=12.10.0
ARG UBUNTU_VERSION=24.04
ARG REPO=axisecp
ARG SDK=acap-native-sdk
FROM ${REPO}/${SDK}:${VERSION}-${ARCH}-ubuntu${UBUNTU_VERSION}
# Building the ACAP application
COPY ./app /opt/app/
COPY common/app /opt/app/
COPY aarch64/app/manifest.json /opt/app/manifest.json
WORKDIR /opt/app
RUN . /opt/axis/acapsdk/environment-setup* && acap-build ./
ENV EXTRA_CFLAGS=-DHAS_PROXY_PORTS
RUN aarch64-linux-gnu-strip -s lib/tailscale lib/tailscaled
RUN . /opt/axis/acapsdk/environment-setup* && acap-build -a Tailscale_VPN_run ./
+2 -2
View File
@@ -1,5 +1,5 @@
To build, from main directory
docker build --tag aarch64 .
docker build --tag aarch64 .
docker cp $(docker create aarch64):/opt/app ./build
docker cp $(docker create aarch64):/opt/app ./build
-24
View File
@@ -1,24 +0,0 @@
#//Version=Native
AXIS_USABLE_LIBS = UCLIBC GLIBC
include libs/*/makefile.info
PROG = tailscale_vpn
CFLAGS += -Wall
PKGS += glib-2.0 gio-2.0
CFLAGS += $(shell PKG_CONFIG_PATH=$(PKG_CONFIG_PATH) pkg-config --cflags $(PKGS))
LDLIBS += $(shell PKG_CONFIG_PATH=$(PKG_CONFIG_PATH) pkg-config --libs $(PKGS))
SRCS += main.c
OBJS += $(SRCS:.c=.o)
all: $(PROG) $(OBJS)
$(PROG): $(OBJS)
$(CC) $^ $(CFLAGS) $(LIBS) $(LDFLAGS) -lm $(LDLIBS) -o $@
$(STRIP) $@
clean:
#rm -f $(PROG) $(OBJS)
-23
View File
@@ -1,23 +0,0 @@
# See https://help.github.com/articles/ignoring-files/ for more about ignoring files.
# dependencies
/node_modules
/.pnp
.pnp.js
# testing
/coverage
# production
/build
# misc
.DS_Store
.env.local
.env.development.local
.env.test.local
.env.production.local
npm-debug.log*
yarn-debug.log*
yarn-error.log*
-68
View File
@@ -1,68 +0,0 @@
This project was bootstrapped with [Create React App](https://github.com/facebook/create-react-app).
## Available Scripts
In the project directory, you can run:
### `npm start`
Runs the app in the development mode.<br />
Open [http://localhost:3000](http://localhost:3000) to view it in the browser.
The page will reload if you make edits.<br />
You will also see any lint errors in the console.
### `npm test`
Launches the test runner in the interactive watch mode.<br />
See the section about [running tests](https://facebook.github.io/create-react-app/docs/running-tests) for more information.
### `npm run build`
Builds the app for production to the `build` folder.<br />
It correctly bundles React in production mode and optimizes the build for the best performance.
The build is minified and the filenames include the hashes.<br />
Your app is ready to be deployed!
See the section about [deployment](https://facebook.github.io/create-react-app/docs/deployment) for more information.
### `npm run eject`
**Note: this is a one-way operation. Once you `eject`, you can’t go back!**
If you aren’t satisfied with the build tool and configuration choices, you can `eject` at any time. This command will remove the single build dependency from your project.
Instead, it will copy all the configuration files and the transitive dependencies (webpack, Babel, ESLint, etc) right into your project so you have full control over them. All of the commands except `eject` will still work, but they will point to the copied scripts so you can tweak them. At this point you’re on your own.
You don’t have to ever use `eject`. The curated feature set is suitable for small and middle deployments, and you shouldn’t feel obligated to use this feature. However we understand that this tool wouldn’t be useful if you couldn’t customize it when you are ready for it.
## Learn More
You can learn more in the [Create React App documentation](https://facebook.github.io/create-react-app/docs/getting-started).
To learn React, check out the [React documentation](https://reactjs.org/).
### Code Splitting
This section has moved here: https://facebook.github.io/create-react-app/docs/code-splitting
### Analyzing the Bundle Size
This section has moved here: https://facebook.github.io/create-react-app/docs/analyzing-the-bundle-size
### Making a Progressive Web App
This section has moved here: https://facebook.github.io/create-react-app/docs/making-a-progressive-web-app
### Advanced Configuration
This section has moved here: https://facebook.github.io/create-react-app/docs/advanced-configuration
### Deployment
This section has moved here: https://facebook.github.io/create-react-app/docs/deployment
### `npm run build` fails to minify
This section has moved here: https://facebook.github.io/create-react-app/docs/troubleshooting#npm-run-build-fails-to-minify
-14500
View File
File diff suppressed because it is too large Load Diff
-48
View File
@@ -1,48 +0,0 @@
{
"name": "license",
"version": "0.1.0",
"private": true,
"homepage": ".",
"dependencies": {
"@testing-library/jest-dom": "^4.2.4",
"@testing-library/react": "^9.5.0",
"@testing-library/user-event": "^7.2.1",
"@types/styled-components": "^5.1.25",
"axios": "^0.19.2",
"bootstrap": "^4.5.0",
"pepjs": "^0.5.3",
"practical-react-components-core": "^1.3.0",
"practical-react-components-icons": "^1.3.0",
"react": "^18.1.0",
"react-bootstrap": "^1.2.2",
"react-dom": "^18.1.0",
"react-native-web": "^0.17.7",
"react-router-dom": "^5.2.0",
"react-scripts": "3.4.1",
"react-transition-group": "^4.4.2",
"react-xml-parser": "^1.1.6",
"semantic-ui-react": "^1.0.0",
"styled-components": "^5.3.5"
},
"scripts": {
"start": "react-scripts start",
"build": "react-scripts build",
"test": "react-scripts test",
"eject": "react-scripts eject"
},
"eslintConfig": {
"extends": "react-app"
},
"browserslist": {
"production": [
">0.2%",
"not dead",
"not op_mini all"
],
"development": [
"last 1 chrome version",
"last 1 firefox version",
"last 1 safari version"
]
}
}
@@ -1,91 +0,0 @@
import React from 'react';
import { Nav, Navbar, Form, FormControl } from 'react-bootstrap';
import styled from 'styled-components';
const Styles = styled.div`
.navbar {
background-color: white;
min-width:100px
}
a, .navbar-light {
height: 34px;
width: 100%;
color: black;
&:hover { color: white; }
}
.nav-link {
color: black;
&:hover { color: black; }
}
.navbar-brand {
padding-top: 12px
font-size: 1.4em;
color: black;
margin-left: 100px;
&:hover { color: black; }
}
.navbar-collapse {
position: fixed; /* Fixed Sidebar (stay in place on scroll and position relative to viewport) */
top:0px;
left: 85%
width:100%;
height:47px;
background-color: #FFCC33; /* Axis yeallow */
font-size: 1.4em;
color: black;
&:hover { color: white; }
}
.form-center {
position: absolute !important;
left: 25%;
right: 25%;
}
#conertext {
padding: 20px;
color:grey;
padding-top: 27px;
}
#line {
top:0px;
height: 6px;
background-color: #e6e6e6;
}
#conerimage {
top: 0px;
height: 62px;
}
#conerinfo{
position: fixed;
height:62px;
width:100%;
background-color: #FFCC33; /* Axis yeallow */
left: 85%;
font-size: 1.4em;
}
#logomage{
position: fixed;
top:5px;
font-size: 1.4em;
}
`;
export const NavigationBar = () => (
<Styles>
<Navbar >
<img id="logomage" src="./img/logo.svg" ></img>
<Navbar.Brand href="/">{window.acapName}</Navbar.Brand>
<Nav className="ml-auto" id="conerinfo">
<img id="conerimage" src="./img/topcorner62.png" alt="Axis" ></img>
<span id="conertext">{window.cornertext}{window.ver}</span>
</Nav>
</Navbar>
<hr id="line"></hr>
</Styles>
)
/*
<Form className="form-center">
<FormControl type="text" placeholder="Search" className="" />
</Form>
*/
@@ -1,74 +0,0 @@
import React from 'react';
import styled from 'styled-components';
import { Menu } from 'semantic-ui-react';
import { Link } from 'react-router-dom'
const StyledSideNav = styled.div`
/* position: fixed; /* Fixed Sidebar (stay in place on scroll and position relative to viewport) */
/* height: 100%;
/* width: 250px; /* Set the width of the sidebar */
/* z-index: 1; /* Stay on top of everything */
/* top: 54px; /* Stay at the top */
/* background-color: #e6e6e6; /* Axis grey */
/* overflow-x: hidden; /* Disable horizontal scroll */
/* padding-top: 10px;
/* padding-left: 10px; */
.menu {
position: fixed;
top: 50px;
height: 100%;
background-color: #e6e6e6;
border: 0px;
}
`;
class SidebarPage extends React.Component {
constructor(props) {
super(props);
this.state = {
activeItem: 'About',
}
}
// ** EDIT ** itens lists
render() {
const { activeItem } = this.state
return(
<StyledSideNav>
<Menu vertical>
<Menu.Item
name='home'
onClick={this.handleItemClick}
as={Link}
to="/"
/>
<Menu.Item
name='Hardware'
onClick={this.handleItemClick}
as={Link}
to="/About"
/>
<Menu.Item
name='Status'
onClick={this.handleItemClick}
as={Link}
to="/NoMatch"
/>
</Menu>
</StyledSideNav>
);
}
}
export default SidebarPage;
-587
View File
@@ -1,587 +0,0 @@
/*!
* Bootstrap v3.3.7 (http://getbootstrap.com)
* Copyright 2011-2016 Twitter, Inc.
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
*/
.btn-default,
.btn-primary,
.btn-success,
.btn-info,
.btn-warning,
.btn-danger {
text-shadow: 0 -1px 0 rgba(0, 0, 0, .2);
-webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .15), 0 1px 1px rgba(0, 0, 0, .075);
box-shadow: inset 0 1px 0 rgba(255, 255, 255, .15), 0 1px 1px rgba(0, 0, 0, .075);
}
.btn-default:active,
.btn-primary:active,
.btn-success:active,
.btn-info:active,
.btn-warning:active,
.btn-danger:active,
.btn-default.active,
.btn-primary.active,
.btn-success.active,
.btn-info.active,
.btn-warning.active,
.btn-danger.active {
-webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);
box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);
}
.btn-default.disabled,
.btn-primary.disabled,
.btn-success.disabled,
.btn-info.disabled,
.btn-warning.disabled,
.btn-danger.disabled,
.btn-default[disabled],
.btn-primary[disabled],
.btn-success[disabled],
.btn-info[disabled],
.btn-warning[disabled],
.btn-danger[disabled],
fieldset[disabled] .btn-default,
fieldset[disabled] .btn-primary,
fieldset[disabled] .btn-success,
fieldset[disabled] .btn-info,
fieldset[disabled] .btn-warning,
fieldset[disabled] .btn-danger {
-webkit-box-shadow: none;
box-shadow: none;
}
.btn-default .badge,
.btn-primary .badge,
.btn-success .badge,
.btn-info .badge,
.btn-warning .badge,
.btn-danger .badge {
text-shadow: none;
}
.btn:active,
.btn.active {
background-image: none;
}
.btn-default {
text-shadow: 0 1px 0 #fff;
background-image: -webkit-linear-gradient(top, #fff 0%, #e0e0e0 100%);
background-image: -o-linear-gradient(top, #fff 0%, #e0e0e0 100%);
background-image: -webkit-gradient(linear, left top, left bottom, from(#fff), to(#e0e0e0));
background-image: linear-gradient(to bottom, #fff 0%, #e0e0e0 100%);
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#ffe0e0e0', GradientType=0);
filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
background-repeat: repeat-x;
border-color: #dbdbdb;
border-color: #ccc;
}
.btn-default:hover,
.btn-default:focus {
background-color: #e0e0e0;
background-position: 0 -15px;
}
.btn-default:active,
.btn-default.active {
background-color: #e0e0e0;
border-color: #dbdbdb;
}
.btn-default.disabled,
.btn-default[disabled],
fieldset[disabled] .btn-default,
.btn-default.disabled:hover,
.btn-default[disabled]:hover,
fieldset[disabled] .btn-default:hover,
.btn-default.disabled:focus,
.btn-default[disabled]:focus,
fieldset[disabled] .btn-default:focus,
.btn-default.disabled.focus,
.btn-default[disabled].focus,
fieldset[disabled] .btn-default.focus,
.btn-default.disabled:active,
.btn-default[disabled]:active,
fieldset[disabled] .btn-default:active,
.btn-default.disabled.active,
.btn-default[disabled].active,
fieldset[disabled] .btn-default.active {
background-color: #e0e0e0;
background-image: none;
}
.btn-primary {
background-image: -webkit-linear-gradient(top, #337ab7 0%, #265a88 100%);
background-image: -o-linear-gradient(top, #337ab7 0%, #265a88 100%);
background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#265a88));
background-image: linear-gradient(to bottom, #337ab7 0%, #265a88 100%);
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff265a88', GradientType=0);
filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
background-repeat: repeat-x;
border-color: #245580;
}
.btn-primary:hover,
.btn-primary:focus {
background-color: #265a88;
background-position: 0 -15px;
}
.btn-primary:active,
.btn-primary.active {
background-color: #265a88;
border-color: #245580;
}
.btn-primary.disabled,
.btn-primary[disabled],
fieldset[disabled] .btn-primary,
.btn-primary.disabled:hover,
.btn-primary[disabled]:hover,
fieldset[disabled] .btn-primary:hover,
.btn-primary.disabled:focus,
.btn-primary[disabled]:focus,
fieldset[disabled] .btn-primary:focus,
.btn-primary.disabled.focus,
.btn-primary[disabled].focus,
fieldset[disabled] .btn-primary.focus,
.btn-primary.disabled:active,
.btn-primary[disabled]:active,
fieldset[disabled] .btn-primary:active,
.btn-primary.disabled.active,
.btn-primary[disabled].active,
fieldset[disabled] .btn-primary.active {
background-color: #265a88;
background-image: none;
}
.btn-success {
background-image: -webkit-linear-gradient(top, #5cb85c 0%, #419641 100%);
background-image: -o-linear-gradient(top, #5cb85c 0%, #419641 100%);
background-image: -webkit-gradient(linear, left top, left bottom, from(#5cb85c), to(#419641));
background-image: linear-gradient(to bottom, #5cb85c 0%, #419641 100%);
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff419641', GradientType=0);
filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
background-repeat: repeat-x;
border-color: #3e8f3e;
}
.btn-success:hover,
.btn-success:focus {
background-color: #419641;
background-position: 0 -15px;
}
.btn-success:active,
.btn-success.active {
background-color: #419641;
border-color: #3e8f3e;
}
.btn-success.disabled,
.btn-success[disabled],
fieldset[disabled] .btn-success,
.btn-success.disabled:hover,
.btn-success[disabled]:hover,
fieldset[disabled] .btn-success:hover,
.btn-success.disabled:focus,
.btn-success[disabled]:focus,
fieldset[disabled] .btn-success:focus,
.btn-success.disabled.focus,
.btn-success[disabled].focus,
fieldset[disabled] .btn-success.focus,
.btn-success.disabled:active,
.btn-success[disabled]:active,
fieldset[disabled] .btn-success:active,
.btn-success.disabled.active,
.btn-success[disabled].active,
fieldset[disabled] .btn-success.active {
background-color: #419641;
background-image: none;
}
.btn-info {
background-image: -webkit-linear-gradient(top, #5bc0de 0%, #2aabd2 100%);
background-image: -o-linear-gradient(top, #5bc0de 0%, #2aabd2 100%);
background-image: -webkit-gradient(linear, left top, left bottom, from(#5bc0de), to(#2aabd2));
background-image: linear-gradient(to bottom, #5bc0de 0%, #2aabd2 100%);
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff2aabd2', GradientType=0);
filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
background-repeat: repeat-x;
border-color: #28a4c9;
}
.btn-info:hover,
.btn-info:focus {
background-color: #2aabd2;
background-position: 0 -15px;
}
.btn-info:active,
.btn-info.active {
background-color: #2aabd2;
border-color: #28a4c9;
}
.btn-info.disabled,
.btn-info[disabled],
fieldset[disabled] .btn-info,
.btn-info.disabled:hover,
.btn-info[disabled]:hover,
fieldset[disabled] .btn-info:hover,
.btn-info.disabled:focus,
.btn-info[disabled]:focus,
fieldset[disabled] .btn-info:focus,
.btn-info.disabled.focus,
.btn-info[disabled].focus,
fieldset[disabled] .btn-info.focus,
.btn-info.disabled:active,
.btn-info[disabled]:active,
fieldset[disabled] .btn-info:active,
.btn-info.disabled.active,
.btn-info[disabled].active,
fieldset[disabled] .btn-info.active {
background-color: #2aabd2;
background-image: none;
}
.btn-warning {
background-image: -webkit-linear-gradient(top, #f0ad4e 0%, #eb9316 100%);
background-image: -o-linear-gradient(top, #f0ad4e 0%, #eb9316 100%);
background-image: -webkit-gradient(linear, left top, left bottom, from(#f0ad4e), to(#eb9316));
background-image: linear-gradient(to bottom, #f0ad4e 0%, #eb9316 100%);
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffeb9316', GradientType=0);
filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
background-repeat: repeat-x;
border-color: #e38d13;
}
.btn-warning:hover,
.btn-warning:focus {
background-color: #eb9316;
background-position: 0 -15px;
}
.btn-warning:active,
.btn-warning.active {
background-color: #eb9316;
border-color: #e38d13;
}
.btn-warning.disabled,
.btn-warning[disabled],
fieldset[disabled] .btn-warning,
.btn-warning.disabled:hover,
.btn-warning[disabled]:hover,
fieldset[disabled] .btn-warning:hover,
.btn-warning.disabled:focus,
.btn-warning[disabled]:focus,
fieldset[disabled] .btn-warning:focus,
.btn-warning.disabled.focus,
.btn-warning[disabled].focus,
fieldset[disabled] .btn-warning.focus,
.btn-warning.disabled:active,
.btn-warning[disabled]:active,
fieldset[disabled] .btn-warning:active,
.btn-warning.disabled.active,
.btn-warning[disabled].active,
fieldset[disabled] .btn-warning.active {
background-color: #eb9316;
background-image: none;
}
.btn-danger {
background-image: -webkit-linear-gradient(top, #d9534f 0%, #c12e2a 100%);
background-image: -o-linear-gradient(top, #d9534f 0%, #c12e2a 100%);
background-image: -webkit-gradient(linear, left top, left bottom, from(#d9534f), to(#c12e2a));
background-image: linear-gradient(to bottom, #d9534f 0%, #c12e2a 100%);
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc12e2a', GradientType=0);
filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
background-repeat: repeat-x;
border-color: #b92c28;
}
.btn-danger:hover,
.btn-danger:focus {
background-color: #c12e2a;
background-position: 0 -15px;
}
.btn-danger:active,
.btn-danger.active {
background-color: #c12e2a;
border-color: #b92c28;
}
.btn-danger.disabled,
.btn-danger[disabled],
fieldset[disabled] .btn-danger,
.btn-danger.disabled:hover,
.btn-danger[disabled]:hover,
fieldset[disabled] .btn-danger:hover,
.btn-danger.disabled:focus,
.btn-danger[disabled]:focus,
fieldset[disabled] .btn-danger:focus,
.btn-danger.disabled.focus,
.btn-danger[disabled].focus,
fieldset[disabled] .btn-danger.focus,
.btn-danger.disabled:active,
.btn-danger[disabled]:active,
fieldset[disabled] .btn-danger:active,
.btn-danger.disabled.active,
.btn-danger[disabled].active,
fieldset[disabled] .btn-danger.active {
background-color: #c12e2a;
background-image: none;
}
.thumbnail,
.img-thumbnail {
-webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, .075);
box-shadow: 0 1px 2px rgba(0, 0, 0, .075);
}
.dropdown-menu > li > a:hover,
.dropdown-menu > li > a:focus {
background-color: #e8e8e8;
background-image: -webkit-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%);
background-image: -o-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%);
background-image: -webkit-gradient(linear, left top, left bottom, from(#f5f5f5), to(#e8e8e8));
background-image: linear-gradient(to bottom, #f5f5f5 0%, #e8e8e8 100%);
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0);
background-repeat: repeat-x;
}
.dropdown-menu > .active > a,
.dropdown-menu > .active > a:hover,
.dropdown-menu > .active > a:focus {
background-color: #2e6da4;
background-image: -webkit-linear-gradient(top, #337ab7 0%, #2e6da4 100%);
background-image: -o-linear-gradient(top, #337ab7 0%, #2e6da4 100%);
background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#2e6da4));
background-image: linear-gradient(to bottom, #337ab7 0%, #2e6da4 100%);
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0);
background-repeat: repeat-x;
}
.navbar-default {
background-image: -webkit-linear-gradient(top, #fff 0%, #f8f8f8 100%);
background-image: -o-linear-gradient(top, #fff 0%, #f8f8f8 100%);
background-image: -webkit-gradient(linear, left top, left bottom, from(#fff), to(#f8f8f8));
background-image: linear-gradient(to bottom, #fff 0%, #f8f8f8 100%);
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#fff8f8f8', GradientType=0);
filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
background-repeat: repeat-x;
border-radius: 4px;
-webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .15), 0 1px 5px rgba(0, 0, 0, .075);
box-shadow: inset 0 1px 0 rgba(255, 255, 255, .15), 0 1px 5px rgba(0, 0, 0, .075);
}
.navbar-default .navbar-nav > .open > a,
.navbar-default .navbar-nav > .active > a {
background-image: -webkit-linear-gradient(top, #dbdbdb 0%, #e2e2e2 100%);
background-image: -o-linear-gradient(top, #dbdbdb 0%, #e2e2e2 100%);
background-image: -webkit-gradient(linear, left top, left bottom, from(#dbdbdb), to(#e2e2e2));
background-image: linear-gradient(to bottom, #dbdbdb 0%, #e2e2e2 100%);
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdbdbdb', endColorstr='#ffe2e2e2', GradientType=0);
background-repeat: repeat-x;
-webkit-box-shadow: inset 0 3px 9px rgba(0, 0, 0, .075);
box-shadow: inset 0 3px 9px rgba(0, 0, 0, .075);
}
.navbar-brand,
.navbar-nav > li > a {
text-shadow: 0 1px 0 rgba(255, 255, 255, .25);
}
.navbar-inverse {
background-image: -webkit-linear-gradient(top, #3c3c3c 0%, #222 100%);
background-image: -o-linear-gradient(top, #3c3c3c 0%, #222 100%);
background-image: -webkit-gradient(linear, left top, left bottom, from(#3c3c3c), to(#222));
background-image: linear-gradient(to bottom, #3c3c3c 0%, #222 100%);
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff3c3c3c', endColorstr='#ff222222', GradientType=0);
filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
background-repeat: repeat-x;
border-radius: 4px;
}
.navbar-inverse .navbar-nav > .open > a,
.navbar-inverse .navbar-nav > .active > a {
background-image: -webkit-linear-gradient(top, #080808 0%, #0f0f0f 100%);
background-image: -o-linear-gradient(top, #080808 0%, #0f0f0f 100%);
background-image: -webkit-gradient(linear, left top, left bottom, from(#080808), to(#0f0f0f));
background-image: linear-gradient(to bottom, #080808 0%, #0f0f0f 100%);
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff080808', endColorstr='#ff0f0f0f', GradientType=0);
background-repeat: repeat-x;
-webkit-box-shadow: inset 0 3px 9px rgba(0, 0, 0, .25);
box-shadow: inset 0 3px 9px rgba(0, 0, 0, .25);
}
.navbar-inverse .navbar-brand,
.navbar-inverse .navbar-nav > li > a {
text-shadow: 0 -1px 0 rgba(0, 0, 0, .25);
}
.navbar-static-top,
.navbar-fixed-top,
.navbar-fixed-bottom {
border-radius: 0;
}
@media (max-width: 767px) {
.navbar .navbar-nav .open .dropdown-menu > .active > a,
.navbar .navbar-nav .open .dropdown-menu > .active > a:hover,
.navbar .navbar-nav .open .dropdown-menu > .active > a:focus {
color: #fff;
background-image: -webkit-linear-gradient(top, #337ab7 0%, #2e6da4 100%);
background-image: -o-linear-gradient(top, #337ab7 0%, #2e6da4 100%);
background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#2e6da4));
background-image: linear-gradient(to bottom, #337ab7 0%, #2e6da4 100%);
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0);
background-repeat: repeat-x;
}
}
.alert {
text-shadow: 0 1px 0 rgba(255, 255, 255, .2);
-webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .25), 0 1px 2px rgba(0, 0, 0, .05);
box-shadow: inset 0 1px 0 rgba(255, 255, 255, .25), 0 1px 2px rgba(0, 0, 0, .05);
}
.alert-success {
background-image: -webkit-linear-gradient(top, #dff0d8 0%, #c8e5bc 100%);
background-image: -o-linear-gradient(top, #dff0d8 0%, #c8e5bc 100%);
background-image: -webkit-gradient(linear, left top, left bottom, from(#dff0d8), to(#c8e5bc));
background-image: linear-gradient(to bottom, #dff0d8 0%, #c8e5bc 100%);
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffc8e5bc', GradientType=0);
background-repeat: repeat-x;
border-color: #b2dba1;
}
.alert-info {
background-image: -webkit-linear-gradient(top, #d9edf7 0%, #b9def0 100%);
background-image: -o-linear-gradient(top, #d9edf7 0%, #b9def0 100%);
background-image: -webkit-gradient(linear, left top, left bottom, from(#d9edf7), to(#b9def0));
background-image: linear-gradient(to bottom, #d9edf7 0%, #b9def0 100%);
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffb9def0', GradientType=0);
background-repeat: repeat-x;
border-color: #9acfea;
}
.alert-warning {
background-image: -webkit-linear-gradient(top, #fcf8e3 0%, #f8efc0 100%);
background-image: -o-linear-gradient(top, #fcf8e3 0%, #f8efc0 100%);
background-image: -webkit-gradient(linear, left top, left bottom, from(#fcf8e3), to(#f8efc0));
background-image: linear-gradient(to bottom, #fcf8e3 0%, #f8efc0 100%);
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fff8efc0', GradientType=0);
background-repeat: repeat-x;
border-color: #f5e79e;
}
.alert-danger {
background-image: -webkit-linear-gradient(top, #f2dede 0%, #e7c3c3 100%);
background-image: -o-linear-gradient(top, #f2dede 0%, #e7c3c3 100%);
background-image: -webkit-gradient(linear, left top, left bottom, from(#f2dede), to(#e7c3c3));
background-image: linear-gradient(to bottom, #f2dede 0%, #e7c3c3 100%);
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffe7c3c3', GradientType=0);
background-repeat: repeat-x;
border-color: #dca7a7;
}
.progress {
background-image: -webkit-linear-gradient(top, #ebebeb 0%, #f5f5f5 100%);
background-image: -o-linear-gradient(top, #ebebeb 0%, #f5f5f5 100%);
background-image: -webkit-gradient(linear, left top, left bottom, from(#ebebeb), to(#f5f5f5));
background-image: linear-gradient(to bottom, #ebebeb 0%, #f5f5f5 100%);
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffebebeb', endColorstr='#fff5f5f5', GradientType=0);
background-repeat: repeat-x;
}
.progress-bar {
background-image: -webkit-linear-gradient(top, #337ab7 0%, #286090 100%);
background-image: -o-linear-gradient(top, #337ab7 0%, #286090 100%);
background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#286090));
background-image: linear-gradient(to bottom, #337ab7 0%, #286090 100%);
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff286090', GradientType=0);
background-repeat: repeat-x;
}
.progress-bar-success {
background-image: -webkit-linear-gradient(top, #5cb85c 0%, #449d44 100%);
background-image: -o-linear-gradient(top, #5cb85c 0%, #449d44 100%);
background-image: -webkit-gradient(linear, left top, left bottom, from(#5cb85c), to(#449d44));
background-image: linear-gradient(to bottom, #5cb85c 0%, #449d44 100%);
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff449d44', GradientType=0);
background-repeat: repeat-x;
}
.progress-bar-info {
background-image: -webkit-linear-gradient(top, #5bc0de 0%, #31b0d5 100%);
background-image: -o-linear-gradient(top, #5bc0de 0%, #31b0d5 100%);
background-image: -webkit-gradient(linear, left top, left bottom, from(#5bc0de), to(#31b0d5));
background-image: linear-gradient(to bottom, #5bc0de 0%, #31b0d5 100%);
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff31b0d5', GradientType=0);
background-repeat: repeat-x;
}
.progress-bar-warning {
background-image: -webkit-linear-gradient(top, #f0ad4e 0%, #ec971f 100%);
background-image: -o-linear-gradient(top, #f0ad4e 0%, #ec971f 100%);
background-image: -webkit-gradient(linear, left top, left bottom, from(#f0ad4e), to(#ec971f));
background-image: linear-gradient(to bottom, #f0ad4e 0%, #ec971f 100%);
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffec971f', GradientType=0);
background-repeat: repeat-x;
}
.progress-bar-danger {
background-image: -webkit-linear-gradient(top, #d9534f 0%, #c9302c 100%);
background-image: -o-linear-gradient(top, #d9534f 0%, #c9302c 100%);
background-image: -webkit-gradient(linear, left top, left bottom, from(#d9534f), to(#c9302c));
background-image: linear-gradient(to bottom, #d9534f 0%, #c9302c 100%);
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc9302c', GradientType=0);
background-repeat: repeat-x;
}
.progress-bar-striped {
background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
background-image: linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
}
.list-group {
border-radius: 4px;
-webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, .075);
box-shadow: 0 1px 2px rgba(0, 0, 0, .075);
}
.list-group-item.active,
.list-group-item.active:hover,
.list-group-item.active:focus {
text-shadow: 0 -1px 0 #286090;
background-image: -webkit-linear-gradient(top, #337ab7 0%, #2b669a 100%);
background-image: -o-linear-gradient(top, #337ab7 0%, #2b669a 100%);
background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#2b669a));
background-image: linear-gradient(to bottom, #337ab7 0%, #2b669a 100%);
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2b669a', GradientType=0);
background-repeat: repeat-x;
border-color: #2b669a;
}
.list-group-item.active .badge,
.list-group-item.active:hover .badge,
.list-group-item.active:focus .badge {
text-shadow: none;
}
.panel {
-webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, .05);
box-shadow: 0 1px 2px rgba(0, 0, 0, .05);
}
.panel-default > .panel-heading {
background-image: -webkit-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%);
background-image: -o-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%);
background-image: -webkit-gradient(linear, left top, left bottom, from(#f5f5f5), to(#e8e8e8));
background-image: linear-gradient(to bottom, #f5f5f5 0%, #e8e8e8 100%);
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0);
background-repeat: repeat-x;
}
.panel-primary > .panel-heading {
background-image: -webkit-linear-gradient(top, #337ab7 0%, #2e6da4 100%);
background-image: -o-linear-gradient(top, #337ab7 0%, #2e6da4 100%);
background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#2e6da4));
background-image: linear-gradient(to bottom, #337ab7 0%, #2e6da4 100%);
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0);
background-repeat: repeat-x;
}
.panel-success > .panel-heading {
background-image: -webkit-linear-gradient(top, #dff0d8 0%, #d0e9c6 100%);
background-image: -o-linear-gradient(top, #dff0d8 0%, #d0e9c6 100%);
background-image: -webkit-gradient(linear, left top, left bottom, from(#dff0d8), to(#d0e9c6));
background-image: linear-gradient(to bottom, #dff0d8 0%, #d0e9c6 100%);
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffd0e9c6', GradientType=0);
background-repeat: repeat-x;
}
.panel-info > .panel-heading {
background-image: -webkit-linear-gradient(top, #d9edf7 0%, #c4e3f3 100%);
background-image: -o-linear-gradient(top, #d9edf7 0%, #c4e3f3 100%);
background-image: -webkit-gradient(linear, left top, left bottom, from(#d9edf7), to(#c4e3f3));
background-image: linear-gradient(to bottom, #d9edf7 0%, #c4e3f3 100%);
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffc4e3f3', GradientType=0);
background-repeat: repeat-x;
}
.panel-warning > .panel-heading {
background-image: -webkit-linear-gradient(top, #fcf8e3 0%, #faf2cc 100%);
background-image: -o-linear-gradient(top, #fcf8e3 0%, #faf2cc 100%);
background-image: -webkit-gradient(linear, left top, left bottom, from(#fcf8e3), to(#faf2cc));
background-image: linear-gradient(to bottom, #fcf8e3 0%, #faf2cc 100%);
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fffaf2cc', GradientType=0);
background-repeat: repeat-x;
}
.panel-danger > .panel-heading {
background-image: -webkit-linear-gradient(top, #f2dede 0%, #ebcccc 100%);
background-image: -o-linear-gradient(top, #f2dede 0%, #ebcccc 100%);
background-image: -webkit-gradient(linear, left top, left bottom, from(#f2dede), to(#ebcccc));
background-image: linear-gradient(to bottom, #f2dede 0%, #ebcccc 100%);
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffebcccc', GradientType=0);
background-repeat: repeat-x;
}
.well {
background-image: -webkit-linear-gradient(top, #e8e8e8 0%, #f5f5f5 100%);
background-image: -o-linear-gradient(top, #e8e8e8 0%, #f5f5f5 100%);
background-image: -webkit-gradient(linear, left top, left bottom, from(#e8e8e8), to(#f5f5f5));
background-image: linear-gradient(to bottom, #e8e8e8 0%, #f5f5f5 100%);
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffe8e8e8', endColorstr='#fff5f5f5', GradientType=0);
background-repeat: repeat-x;
border-color: #dcdcdc;
-webkit-box-shadow: inset 0 1px 3px rgba(0, 0, 0, .05), 0 1px 0 rgba(255, 255, 255, .1);
box-shadow: inset 0 1px 3px rgba(0, 0, 0, .05), 0 1px 0 rgba(255, 255, 255, .1);
}
/*# sourceMappingURL=bootstrap-theme.css.map */
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because it is too large Load Diff
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
-218
View File
@@ -1,218 +0,0 @@
body {
font-family: Helvetica, Arial, Verdanda, Tahoma, Geneva, sans-serif;
font-size: 12px;
}
/*h1 {
font-family: Helvetica, Arial, Verdanda, Tahoma, Geneva, sans-serif;
color: #484848;
font-size: 18px;
font-weight: bold;
}*/
button {
font-family: Helvetica, Arial, Verdanda, Tahoma, Geneva, sans-serif;
color: #ffffff;
font-size: 12px;
background: grey;
padding: 5px 15px 5px 15px;
text-decoration: none;
text-shadow: none;
border: none;
cursor: pointer;
border-radius: 25px;
}
#tables{
display: flex;
padding-left: 0px;
}
.SLInput {
font-size: 12px;
font-family: sans-serif;
border: 1px solid grey;
padding: 4px;
margin: 2px;
width: 250px;
float:initial;
}
.SLInput_res {
font-size: 12px;
font-family: sans-serif;
border: 1px solid grey;
padding: 4px;
margin: 2px;
width: 72px;
float:initial;
}
.SLInput_dropres {
font-size: 12px;
font-family: sans-serif;
border: 1px solid grey;
padding: 4px;
margin: 2px;
width: 100px;
float:initial;
}
.header {
height: 40px;
width: auto;
background-color: rgb(216,207,198);
margin: 0px;
border-bottom: 3px solid #ffcb31;
position: absolute;
left: 0px;
right: 0px;
top: 0px;
text-align: center;
padding: 0px;
margin: 0px;
}
.header .logo {
background-repeat: no-repeat;
width: 83px;
height: 30px;
left: 20px;
top: 5px;
position: absolute;
}
.header h1 {
position: absolute;
top: 10px;
}
.saving h1 {
color: grey;
font-size: 15px;
margin-top: 5px;
}
.settings-menu {
width: 100%;
background-color: #ffffff;
margin: 0px;
border-bottom: 3px solid rgb(0,157,220);
position: absolute;
left: 0px;
right: 0px;
top: 43px;
text-align: left;
padding: 0px;
margin: 0px;
z-index: 10;
}
.settings-menu {
overflow: visible;
}
.settings-item {
position: relative;
top: 0;
bottom: 0;
padding: 10px 40px 10px 10px;
margin: 10px;
#border-right: 1px solid rgb(0,157,220);
display: inline-block;
float: left;
overflow: visible;
max-width: 400px;
}
.settings-item h1 {
color: rgb(0,157,220);
font-size: 15px;
margin-top: 5px;
}
.settings-item span {
width: 100px;
display: inline-block;
}
#logo {
font-size:50px;
color:black;
top: 50px;
}
#ruleSpinner {
padding-top: 20px;
position: absolute;
left: 0px;
}
#main {
top: 50px;
position: relative;
color: grey;
font-size: 15px;
font-weight: bold;
}
#configpage{
top: 100px;
left:250px;
position: absolute;
color: grey;
font-size: 15px;
}
#homepage{
top: 100px;
left:250px;
position: absolute;
color: grey;
font-size: 15px;
}
#savebutton {
left:50px;
padding-top:20px;
}
li:hover{
background-color:#FFC106;
}
#licensepage {
padding-left:50px;
}
#licenseCode {
width:250px;
}
#savelayoutdiv {
position: absolute;
padding-left: 20px;
padding-right: 20px;
top: 60px;
left: 690px;
#background-color:grey;
#width:100px;
#border-radius:25px;
}
Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 15 KiB

-27
View File
@@ -1,27 +0,0 @@
<svg focusable="false" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" viewBox="0 0 238 90" xml:space="preserve">
<g>
<path d="m98.87496 15.58887 11.51463 0 .13725.13751 0 50.03436-.13725.13713-11.51463 0c-.13713 0-.13713-.13713-.13713-.13713l0-50.03436c0 0 0-.13751.13713-.13751"/>
<path d="m95.03658 15.58887c0 0 .13725.13751 0 .27376l-15.21574 24.67537c-.13725.13675-.13725.41113 0 .68513l15.353 24.40038c.13675.13724 0 .27437 0 .27437l-14.25637 0c-.13713 0-.27438-.13713-.41113-.13713l-9.1845-15.07912c-.13725-.13725-.13725-.13725-.2745 0l-8.63576 14.94188c-.13662.13724-.27387.27437-.41112.27437l-13.29638 0c-.27438 0-.27438-.13713-.13725-.13713l15.627-25.90875c.27438-.27312.27438-.54811 0-.82187l-13.708-23.1675c-.13725-.13625 0-.27376 0-.27376l13.84525 0c.13713 0 .27388.13751.27388.27376l8.36187 13.9825c.13712.1375.13712.1375.27388 0l8.63625-13.9825c0-.13625.13725-.27376.27438-.27376l12.88525 0"/>
<path d="m193.45934 1.33263 41.39876 64.56525-35.91498 0-13.57002-21.11024-1.64502 0-.95998-1.50838-16.175 0 26.86624-41.94663" fill="#f7e109"/>
<path d="m190.85559 41.22313 15.90125 24.67474-50.58249 0 15.90126-24.67474 18.78 0" fill="#231f20"/>
<path d="m186.74309 41.22313 15.90126 24.67474-50.5825 0 15.90123-24.67474 18.78001 0" fill="#c93437"/>
<path d="m44.1802 15.5889-10.6924 0c-.1372 0-.2745.1375-.2745.2737l-32.2133 49.8981c0 0 0 .13721.13721.13721l13.02249 0c.1366 0 .2739 0 .2739-.13721l4.3867-6.8544c.1372 0 .1372-.1368.2744-.1368l13.708 0c.1367 0 .1367.1368.1367.1368l0 6.7172c0 .1372 0 .27441.1373.27441l11.2406 0 .1373-.13721 0-49.8981c0-.1362-.1373-.2737-.2744-.2737l0 0zm-11.2407 33.311c0 .1372 0 .1372 0 .1372l-8.4985 0c-.1373 0-.1373 0-.1373-.1372l9.0469-14.3935 0 0-.4111 14.3935"/>
<path d="m117.24371 65.89787 15.21562 0c1.91875-.13713 3.83875-.41162 5.62126-.95987 6.98999-2.19289 10.69124-9.18464 10.69124-15.07863 0-9.4585-7.40251-12.748-16.175-16.44925-1.50874-.68625-3.42751-1.645-3.42751-3.70125 0-2.05626 2.05626-3.15375 4.25002-3.15375l11.92624 0c.13626 0 .13626 0 .13626-.13626l0-10.83c0-.13625 0-.13625-.13626-.13625l-12.47499 0c-10.41749 0-16.58638 6.16876-16.58638 14.80376 0 7.53999 4.79788 11.24112 11.78889 14.11963 4.935 1.91887 8.08748 2.74161 8.08748 6.71724 0 2.05612-1.23375 4.11224-3.83876 4.11224 0 0-14.94099 0-15.07813 0l0 0c0 0 0 10.41801 0 10.55525 0 .13713.13712.13713 0 .13713"/>
<path d="m155.21434 15.31512c-2.33 0-4.1125 1.91875-4.1125 4.25 0 2.19374 1.7825 4.1125 4.1125 4.1125 2.33 0 4.25-1.91876 4.25-4.1125 0-2.33125-1.92-4.25-4.25-4.25zm0 7.95c-2.05626 0-3.70126-1.64374-3.70126-3.7 0-2.19376 1.645-3.83875 3.70126-3.83875 2.19374 0 3.83875 1.64499 3.83875 3.83875 0 2.05626-1.64499 3.7-3.83875 3.7"/>
<path d="m157.27058 21.89513-.95877-2.19376c.54752-.13625.82251-.685.82251-1.23375 0-.41125-.1375-.82249-.54875-1.09625-.27373-.27374-.68498-.27374-1.09624-.27374l-1.7825 0 0 4.7975.54875 0 0-2.05626 1.37 0 .96001 2.05626.685 0zm-3.01501-2.60501 0-1.78123 1.23375 0c.27376 0 .54875 0 .68501.27374.27374.13625.41124.27374.41124.685 0 .13751-.1375.41125-.27376.54875-.27374.27374-.54874.27374-.82249.27374l-1.23375 0"/>
<path d="m11.14359 84.5405c-1.37063.68501-2.46683.9595-3.97513.9595-3.9751 0-5.89405-2.46774-5.89405-4.93463 0-2.605 2.19336-5.07225 6.03125-5.07225 1.50781 0 2.74117.27388 3.70118.82275l0 2.19337c-1.09663-.54887-2.19336-.9595-3.42676-.9595-2.19335 0-3.70165 1.23337-3.70165 3.01563 0 1.6445 1.5083 2.87851 3.56445 2.87851 1.3706 0 2.19334-.27451 3.70071-.9595l0 2.05611"/>
<path d="m25.53759 85.5c-3.70162 0-5.75775-2.46774-5.75775-4.93463 0-2.46774 2.05612-5.07225 5.75775-5.07225 3.83788 0 5.75688 2.74174 5.75688 5.07225 0 2.46689-2.05613 4.93463-5.75688 4.93463zm0-7.95026c-1.91937 0-3.15325 1.23337-3.15325 3.01563 0 1.78175 1.23388 2.87851 3.15325 2.87851 1.919 0 3.15288-1.09676 3.15288-2.87851 0-1.78226-1.23388-3.01563-3.15288-3.01563"/>
<path d="m48.70409 75.63037 2.05612 0 0 9.73238-2.46775 0 0-6.03125-2.74163 3.01563-.274 0-2.74162-3.01563 0 6.03125-2.46738 0 0-9.73238 2.05625 0 3.29 3.70113 3.29-3.70113"/>
<path d="m69.26559 75.63037 2.19337 0 0 9.73238-2.46775 0 0-6.03125-2.74125 3.01563-.41163 0-2.74112-3.01563 0 6.03125-2.46788 0 0-9.73238 2.19337 0 3.29013 3.70113 3.15275-3.70113"/>
<path d="m90.65033 75.63037 0 5.62012c0 3.15276-2.33049 4.24951-5.07224 4.24951-2.87888 0-4.93501-1.23387-4.93501-4.24951l0-5.62012 2.46776 0 0 5.62012c0 1.371 1.09662 2.19339 2.46725 2.19339 1.37062 0 2.60449-.54839 2.60449-2.33063l0-5.48288 2.46774 0"/>
<path d="m109.97846 85.36275-2.05663 0-5.61964-6.1685 0 6.1685-2.46774 0 0-9.73238 2.33064 0 5.34612 6.03175 0-6.03175 2.46725 0 0 9.73238"/>
<path d="m119.57371 85.36275 2.46778 0 0-9.73241-2.46778 0 0 9.73241z"/>
<path d="m140.13684 84.5405c-1.37126.68501-2.46875.9595-3.97626.9595-3.83876 0-5.89499-2.46774-5.89499-4.93463 0-2.605 2.19374-5.07225 6.03249-5.07225 1.50751 0 2.74126.27388 3.70125.82275l0 2.19337c-1.09749-.54887-2.19374-.9595-3.42749-.9595-2.19376 0-3.70125 1.23337-3.70125 3.01563 0 1.6445 1.50749 2.87851 3.56375 2.87851 1.37125 0 2.19374-.27451 3.7025-.9595l0 2.05611"/>
<path d="m158.09435 85.36275-2.60501 0-.82248-1.91887-4.52376 0-.82248 1.91887-2.60501 0 3.97623-9.73238 3.015 0 4.38751 9.73238zm-5.89499-7.40237-1.37126 3.83838 3.01625 0-1.64499-3.83838"/>
<path d="m172.76184 77.41263-3.56502 0 0 7.95012-2.60373 0 0-7.95012-3.56502 0 0-1.78226 9.73375 0 0 1.78226"/>
<path d="m180.4381 85.36275 2.4673 0 0-9.73241-2.4673 0 0 9.73241z"/>
<path d="m196.33934 85.5c-3.70125 0-5.75751-2.46774-5.75751-4.93463 0-2.46774 1.91875-5.07225 5.75751-5.07225 3.70125 0 5.75624 2.74174 5.75624 5.07225 0 2.46689-2.1925 4.93463-5.75624 4.93463zm0-7.95026c-1.92 0-3.15375 1.23337-3.15375 3.01563 0 1.78175 1.23375 2.87851 3.15375 2.87851 1.91875 0 3.1525-1.09676 3.1525-2.87851 0-1.78226-1.23375-3.01563-3.1525-3.01563"/>
<path d="m219.64183 85.36275-2.05623 0-5.62001-6.1685 0 6.1685-2.4675 0 0-9.73238 2.33 0 5.34624 6.03175 0-6.03175 2.4675 0 0 9.73238"/>
<path d="m234.30934 78.23486c-1.50751-.68512-2.33-.9595-3.28876-.9595-.82376 0-1.37123.41113-1.37123.82225 0 1.50824 5.07123 1.09662 5.07123 4.52386 0 1.78175-1.64499 2.87851-3.83748 2.87851-1.78252 0-2.60501-.41113-3.70128-.9595l0-2.05612c1.50752.9595 2.33002 1.23387 3.42751 1.23387.95876 0 1.50752-.27437 1.50752-.82275 0-1.645-5.07253-1.09674-5.07253-4.52351 0-1.78212 1.50876-2.87888 3.83878-2.87888 1.09624 0 2.05623.27388 3.42624.82275l0 1.91899"/>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 6.4 KiB

@@ -1,40 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- BUG: Firefox will not animate SVG embedded as background images. [https://bugzilla.mozilla.org/show_bug.cgi?id=908634] -->
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 234.7 235.6" enable-background="new 0 0 234.7 235.6" xml:space="preserve">
<style>
/* <![CDATA[ */
@-webkit-keyframes spinner-fade {0% {opacity: 1 } 80% {opacity: 0 } 100% {opacity: 0 } }
@keyframes spinner-fade {0% {opacity: 1 } 80% {opacity: 0 } 100% {opacity: 0 } }
g.spinner path {opacity: 0; -webkit-animation: spinner-fade 0.75s linear infinite; animation: spinner-fade 0.75s linear infinite;}
g.spinner path:nth-of-type(1) {-webkit-animation-delay: -0.25s; animation-delay: -0.25s; }
g.spinner path:nth-of-type(2) {-webkit-animation-delay: -0.1875s; animation-delay: -0.1875s; }
g.spinner path:nth-of-type(3) {-webkit-animation-delay: -0.125s; animation-delay: -0.125s; }
g.spinner path:nth-of-type(4) {-webkit-animation-delay: -0.0625s; animation-delay: -0.0625s; }
g.spinner path:nth-of-type(5) {-webkit-animation-delay: 0s; animation-delay: 0s; }
g.spinner path:nth-of-type(6) {-webkit-animation-delay: 0.0625s; animation-delay: 0.0625s; }
g.spinner path:nth-of-type(7) {-webkit-animation-delay: 0.125s; animation-delay: 0.125s; }
g.spinner path:nth-of-type(8) {-webkit-animation-delay: 0.1875s; animation-delay: 0.1875s; }
g.spinner path:nth-of-type(9) {-webkit-animation-delay: 0.25s; animation-delay: 0.25s; }
g.spinner path:nth-of-type(10) {-webkit-animation-delay: 0.3125s; animation-delay: 0.3125s; }
g.spinner path:nth-of-type(11) {-webkit-animation-delay: -0.375s; animation-delay: -0.375s; }
g.spinner path:nth-of-type(12) {-webkit-animation-delay: -0.3125s; animation-delay: -0.3125s; }
/* ]]> */
</style>
<g class="spinner">
<path d="M128.3,10.7c0,0-0.3-10.7-11-10.7s-11,10.7-11,10.7l0,0v0v42.7v0l0,0c0,0,0.3,10.7,11,10.7s11-10.7,11-10.7 l0,0v0V10.7L128.3,10.7L128.3,10.7z" />
<path d="M140.3,56.5c0,0-5.6,9.2,3.7,14.6c9.2,5.3,14.3-3.9,14.3-3.9l0,0v0l21.4-37l0,0l0,0c0,0,5.3-9.2-3.9-14.6 s-14.5,3.9-14.6,3.9l0,0l0.2,0L140.3,56.5L140.3,56.5L140.3,56.5z" />
<path d="M167.4,76.3c0,0-9.2,5.1-3.9,14.3c5.3,9.2,14.6,3.7,14.6,3.7l0,0h0L215,73.1l0,0.1l0,0c0,0,9.2-5.3,3.9-14.5 s-14.6-3.9-14.6-3.9l0,0l0,0.1L167.4,76.3L167.4,76.3L167.4,76.3z" />
<path d="M224,128.3c0,0,10.7-0.3,10.7-11s-10.7-11-10.7-11l0,0h0h-42.7h0l0,0c0,0-10.7,0.3-10.7,11s10.7,11,10.7,11 l0,0h0H224L224,128.3L224,128.3z" />
<path d="M203.8,180.3c0,0,9.2,5.6,14.6-3.6c5.4-9.2-3.8-14.4-3.8-14.4l0,0h0l-36.8-21.7l0,0l0,0 c0,0-9.2-5.4-14.6,3.8c-5.4,9.2,3.8,14.6,3.8,14.6l0,0l0-0.2L203.8,180.3L203.8,180.3L203.8,180.3z" />
<path d="M160.3,215.5c0,0,5.4,9.3,14.7,4.1c9.3-5.2,4.3-14.5,4.3-14.5l0,0v0l-21.1-37.2l-0.1,0l0,0 c0,0-5.3-9.3-14.6-4.1c-9.3,5.2-4.1,14.5-4.1,14.5l0,0l0,0L160.3,215.5L160.3,215.5L160.3,215.5z"/>
<path d="M128.3,181.3c0,0-0.3-10.7-11-10.7s-11,10.7-11,10.7l0,0v0V224v0l0,0c0,0,0.3,10.7,11,10.7s11-10.7,11-10.7 l0,0v0V181.3L128.3,181.3L128.3,181.3z"/>
<path d="M55.3,204.5c0,0-5.6,9.2,3.7,14.6c9.2,5.3,14.3-3.9,14.3-3.9l0,0v0l21.3-37l0,0l0,0c0,0,5.3-9.2-3.9-14.6 s-14.6,3.9-14.6,3.9l0,0l0.2,0L55.3,204.5L55.3,204.5L55.3,204.5z"/>
<path d="M19.6,161.3c0,0-9.2,5.6-3.9,14.8s14.6,4.2,14.6,4.2l0,0h0l36.9-21.5l0-0.1l0,0c0,0,9.2-5.4,3.9-14.6 c-5.3-9.2-14.6-3.9-14.6-3.9l0,0l0-0.1L19.6,161.3L19.6,161.3L19.6,161.3z"/>
<path d="M53.3,128.3c0,0,10.7-0.3,10.7-11s-10.7-11-10.7-11l0,0h0H10.7h0l0,0c0,0-10.7,0.3-10.7,11s10.7,11,10.7,11 l0,0h0H53.3L53.3,128.3L53.3,128.3z"/>
<path d="M56.8,94.3c0,0,9.2,5.1,14.6-4.1c5.4-9.2-3.8-14.9-3.8-14.9l0,0h0L30.8,53.8l0,0.1l0,0c0,0-9.2-5.4-14.6,3.8 S20,72.4,20,72.4l0,0l0,0.2L56.8,94.3L56.8,94.3L56.8,94.3z"/>
<path d="M76.3,66.8c0,0,5.4,9.3,14.7,4.1s4.3-14.5,4.3-14.5l0,0v0l-21-37.2l0,0l0,0c0,0-5.3-9.3-14.5-4.1 s-4.1,14.5-4.1,14.5l0,0l-0.2,0L76.3,66.8L76.3,66.8L76.3,66.8z"/>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 4.0 KiB

-91
View File
@@ -1,91 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg version="1.2" width="20.64mm" height="9mm" viewBox="0 0 2064 900" preserveAspectRatio="xMidYMid" fill-rule="evenodd" stroke-width="28.222" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" xmlns:ooo="http://xml.openoffice.org/svg/export" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:presentation="http://sun.com/xmlns/staroffice/presentation" xmlns:smil="http://www.w3.org/2001/SMIL20/" xmlns:anim="urn:oasis:names:tc:opendocument:xmlns:animation:1.0" xml:space="preserve">
<defs class="ClipPathGroup">
<clipPath id="presentation_clip_path" clipPathUnits="userSpaceOnUse">
<rect x="0" y="0" width="2064" height="900"/>
</clipPath>
<clipPath id="presentation_clip_path_shrink" clipPathUnits="userSpaceOnUse">
<rect x="2" y="0" width="2060" height="899"/>
</clipPath>
</defs>
<defs class="TextShapeIndex">
<g ooo:slide="id1" ooo:id-list="id3"/>
</defs>
<defs class="EmbeddedBulletChars">
<g id="bullet-char-template-57356" transform="scale(0.00048828125,-0.00048828125)">
<path d="M 580,1141 L 1163,571 580,0 -4,571 580,1141 Z"/>
</g>
<g id="bullet-char-template-57354" transform="scale(0.00048828125,-0.00048828125)">
<path d="M 8,1128 L 1137,1128 1137,0 8,0 8,1128 Z"/>
</g>
<g id="bullet-char-template-10146" transform="scale(0.00048828125,-0.00048828125)">
<path d="M 174,0 L 602,739 174,1481 1456,739 174,0 Z M 1358,739 L 309,1346 659,739 1358,739 Z"/>
</g>
<g id="bullet-char-template-10132" transform="scale(0.00048828125,-0.00048828125)">
<path d="M 2015,739 L 1276,0 717,0 1260,543 174,543 174,936 1260,936 717,1481 1274,1481 2015,739 Z"/>
</g>
<g id="bullet-char-template-10007" transform="scale(0.00048828125,-0.00048828125)">
<path d="M 0,-2 C -7,14 -16,27 -25,37 L 356,567 C 262,823 215,952 215,954 215,979 228,992 255,992 264,992 276,990 289,987 310,991 331,999 354,1012 L 381,999 492,748 772,1049 836,1024 860,1049 C 881,1039 901,1025 922,1006 886,937 835,863 770,784 769,783 710,716 594,584 L 774,223 C 774,196 753,168 711,139 L 727,119 C 717,90 699,76 672,76 641,76 570,178 457,381 L 164,-76 C 142,-110 111,-127 72,-127 30,-127 9,-110 8,-76 1,-67 -2,-52 -2,-32 -2,-23 -1,-13 0,-2 Z"/>
</g>
<g id="bullet-char-template-10004" transform="scale(0.00048828125,-0.00048828125)">
<path d="M 285,-33 C 182,-33 111,30 74,156 52,228 41,333 41,471 41,549 55,616 82,672 116,743 169,778 240,778 293,778 328,747 346,684 L 369,508 C 377,444 397,411 428,410 L 1163,1116 C 1174,1127 1196,1133 1229,1133 1271,1133 1292,1118 1292,1087 L 1292,965 C 1292,929 1282,901 1262,881 L 442,47 C 390,-6 338,-33 285,-33 Z"/>
</g>
<g id="bullet-char-template-9679" transform="scale(0.00048828125,-0.00048828125)">
<path d="M 813,0 C 632,0 489,54 383,161 276,268 223,411 223,592 223,773 276,916 383,1023 489,1130 632,1184 813,1184 992,1184 1136,1130 1245,1023 1353,916 1407,772 1407,592 1407,412 1353,268 1245,161 1136,54 992,0 813,0 Z"/>
</g>
<g id="bullet-char-template-8226" transform="scale(0.00048828125,-0.00048828125)">
<path d="M 346,457 C 273,457 209,483 155,535 101,586 74,649 74,723 74,796 101,859 155,911 209,963 273,989 346,989 419,989 480,963 531,910 582,859 608,796 608,723 608,648 583,586 532,535 482,483 420,457 346,457 Z"/>
</g>
<g id="bullet-char-template-8211" transform="scale(0.00048828125,-0.00048828125)">
<path d="M -4,459 L 1135,459 1135,606 -4,606 -4,459 Z"/>
</g>
<g id="bullet-char-template-61548" transform="scale(0.00048828125,-0.00048828125)">
<path d="M 173,740 C 173,903 231,1043 346,1159 462,1274 601,1332 765,1332 928,1332 1067,1274 1183,1159 1299,1043 1357,903 1357,740 1357,577 1299,437 1183,322 1067,206 928,148 765,148 601,148 462,206 346,322 231,437 173,577 173,740 Z"/>
</g>
</defs>
<g>
<g id="id2" class="Master_Slide">
<g id="bg-id2" class="Background"/>
<g id="bo-id2" class="BackgroundObjects"/>
</g>
</g>
<g class="SlideGroup">
<g>
<g id="container-id1">
<g id="id1" class="Slide" clip-path="url(#presentation_clip_path)">
<g class="Page">
<g class="Graphic">
<g id="id3">
<rect class="BoundingBox" stroke="none" fill="none" x="0" y="0" width="2064" height="900"/>
<path fill="rgb(0,0,0)" stroke="none" d="M 958,198 L 959,199 959,627 958,628 859,628 C 858,628 858,627 858,627 L 858,199 C 858,199 858,198 859,198 L 958,198 Z"/>
<path fill="rgb(0,0,0)" stroke="none" d="M 826,200 L 696,411 C 695,412 695,415 696,417 L 828,626 C 829,627 828,628 828,628 L 706,628 C 704,628 703,627 702,627 L 624,498 C 622,497 622,497 621,498 L 547,626 C 546,627 545,628 544,628 L 430,628 C 428,628 428,627 429,627 L 563,405 C 565,403 565,401 563,398 L 445,200 C 444,199 445,198 445,198 L 564,198 C 565,198 566,199 566,200 L 638,320 C 639,321 639,321 640,320 L 714,200 C 714,199 715,198 716,198 L 826,198 C 826,198 828,199 826,200 Z"/>
<path fill="rgb(247,225,9)" stroke="none" d="M 2023,628 L 1716,628 1599,448 1585,448 1577,435 1439,435 1669,76 2023,628 Z"/>
<path fill="rgb(35,31,32)" stroke="none" d="M 1782,628 L 1350,628 1486,417 1646,417 1782,628 Z"/>
<path fill="rgb(201,52,55)" stroke="none" d="M 1747,628 L 1314,628 1450,417 1611,417 1747,628 Z"/>
<path fill="rgb(0,0,0)" stroke="none" d="M 300,198 C 299,198 297,199 297,200 L 22,627 C 22,627 22,628 23,628 L 134,628 C 136,628 137,628 137,627 L 174,568 C 175,568 175,567 177,567 L 294,567 C 295,567 295,568 295,568 L 295,626 C 295,627 295,628 296,628 L 392,628 394,627 394,200 C 394,199 392,198 391,198 L 300,198 Z M 295,484 L 222,484 C 221,484 221,484 221,483 L 299,360 295,483 295,484 Z"/>
<path fill="rgb(0,0,0)" stroke="none" d="M 1016,628 L 1147,628 C 1163,627 1180,625 1195,620 1255,601 1286,541 1286,491 1286,410 1223,382 1148,350 1135,344 1119,336 1119,319 1119,301 1136,292 1155,292 L 1257,292 C 1258,292 1258,292 1258,291 L 1258,198 C 1258,197 1258,197 1257,197 L 1150,197 C 1061,197 1008,250 1008,323 1008,388 1049,420 1109,444 1151,461 1178,468 1178,502 1178,519 1168,537 1145,537 1145,537 1018,537 1016,537 L 1016,537 C 1016,537 1016,626 1016,627 1016,628 1018,628 1016,628 Z"/>
<path fill="rgb(0,0,0)" stroke="none" d="M 1341,196 C 1321,196 1306,212 1306,232 1306,251 1321,267 1341,267 1361,267 1378,251 1378,232 1378,212 1361,196 1341,196 Z M 1310,232 C 1310,213 1324,199 1341,199 1360,199 1374,213 1374,232 1374,250 1360,264 1341,264 1324,264 1310,250 1310,232 Z"/>
<path fill="rgb(0,0,0)" stroke="none" d="M 1351,233 C 1355,232 1358,227 1358,223 1358,219 1357,215 1353,213 1351,211 1347,211 1344,211 L 1328,211 1328,252 1333,252 1333,234 1345,234 1353,252 1359,252 1351,233 Z M 1333,214 L 1344,214 C 1346,214 1348,214 1350,217 1352,218 1353,219 1353,223 1353,224 1352,226 1351,227 1348,230 1346,230 1344,230 L 1333,230 1333,214 Z"/>
<path fill="rgb(0,0,0)" stroke="none" d="M 109,788 C 97,794 87,796 75,796 41,796 24,775 24,754 24,731 43,710 76,710 89,710 99,713 107,717 L 107,736 C 98,731 89,728 78,728 59,728 46,738 46,754 46,768 59,778 77,778 89,778 96,776 109,770 L 109,788 Z"/>
<path fill="rgb(0,0,0)" stroke="none" d="M 232,796 C 200,796 182,775 182,754 182,733 200,710 232,710 265,710 281,734 281,754 281,775 263,796 232,796 Z M 205,754 C 205,769 215,778 232,778 248,778 259,769 259,754 259,738 248,728 232,728 215,728 205,738 205,754 Z"/>
<path fill="rgb(0,0,0)" stroke="none" d="M 430,712 L 448,712 448,795 426,795 426,743 403,769 401,769 377,743 377,795 356,795 356,712 374,712 402,743 430,712 Z"/>
<path fill="rgb(0,0,0)" stroke="none" d="M 606,712 L 625,712 625,795 604,795 604,743 580,769 577,769 553,743 553,795 532,795 532,712 551,712 579,743 606,712 Z"/>
<path fill="rgb(0,0,0)" stroke="none" d="M 789,712 L 789,760 C 789,787 769,796 746,796 721,796 703,785 703,760 L 703,712 724,712 724,760 C 724,771 734,778 746,778 757,778 768,774 768,758 L 768,712 789,712 Z"/>
<path fill="rgb(0,0,0)" stroke="none" d="M 937,795 L 889,742 889,795 868,795 868,712 887,712 933,763 933,712 954,712 954,795 937,795 Z"/>
<path fill="rgb(0,0,0)" stroke="none" d="M 1036,795 L 1058,795 1058,712 1036,712 1036,795 1036,795 Z"/>
<path fill="rgb(0,0,0)" stroke="none" d="M 1212,788 C 1201,794 1191,796 1178,796 1145,796 1128,775 1128,754 1128,731 1147,710 1180,710 1192,710 1203,713 1211,717 L 1211,736 C 1202,731 1192,728 1182,728 1163,728 1150,738 1150,754 1150,768 1163,778 1181,778 1192,778 1199,776 1212,770 L 1212,788 Z"/>
<path fill="rgb(0,0,0)" stroke="none" d="M 1344,795 L 1337,778 1298,778 1291,795 1269,795 1303,712 1328,712 1366,795 1344,795 Z M 1304,764 L 1330,764 1316,731 1304,764 Z"/>
<path fill="rgb(0,0,0)" stroke="none" d="M 1461,727 L 1461,795 1439,795 1439,727 1408,727 1408,712 1492,712 1492,727 1461,727 Z"/>
<path fill="rgb(0,0,0)" stroke="none" d="M 1557,795 L 1578,795 1578,712 1557,712 1557,795 1557,795 Z"/>
<path fill="rgb(0,0,0)" stroke="none" d="M 1693,796 C 1662,796 1644,775 1644,754 1644,733 1660,710 1693,710 1725,710 1743,734 1743,754 1743,775 1724,796 1693,796 Z M 1666,754 C 1666,769 1677,778 1693,778 1710,778 1720,769 1720,754 1720,738 1710,728 1693,728 1677,728 1666,738 1666,754 Z"/>
<path fill="rgb(0,0,0)" stroke="none" d="M 1875,795 L 1827,742 1827,795 1806,795 1806,712 1826,712 1872,763 1872,712 1893,712 1893,795 1875,795 Z"/>
<path fill="rgb(0,0,0)" stroke="none" d="M 2018,734 C 2005,728 1998,726 1990,726 1983,726 1978,729 1978,733 1978,746 2022,742 2022,771 2022,787 2008,796 1989,796 1974,796 1967,792 1957,788 L 1957,770 C 1970,778 1977,781 1987,781 1995,781 1999,778 1999,774 1999,760 1956,764 1956,735 1956,720 1969,710 1989,710 1998,710 2006,713 2018,717 L 2018,734 Z"/>
</g>
</g>
</g>
</g>
</g>
</g>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 9.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 422 B

-43
View File
@@ -1,43 +0,0 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8" />
<link rel="icon" href="%PUBLIC_URL%/favicon.ico" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<meta name="theme-color" content="#000000" />
<meta
name="description"
content="Web site created using create-react-app"
/>
<!--<link rel="apple-touch-icon" href="%PUBLIC_URL%/logo192.png" />-->
<!--
manifest.json provides metadata used when your web app is installed on a
user's mobile device or desktop. See https://developers.google.com/web/fundamentals/web-app-manifest/
-->
<link rel="manifest" href="%PUBLIC_URL%/manifest.json" />
<!--
Notice the use of %PUBLIC_URL% in the tags above.
It will be replaced with the URL of the `public` folder during the build.
Only files inside the `public` folder can be referenced from the HTML.
Unlike "/favicon.ico" or "favicon.ico", "%PUBLIC_URL%/favicon.ico" will
work correctly both with client-side routing and a non-root public URL.
Learn how to configure a non-root public URL by running `npm run build`.
-->
<title>Tailscale VPN</title>
</head>
<body>
<noscript>You need to enable JavaScript to run this app.</noscript>
<div id="root"></div>
<!--
This HTML file is a template.
If you open it directly in the browser, you will see an empty page.
You can add webfonts, meta tags, or analytics to this file.
The build step will place the bundled scripts into the <body> tag.
To begin the development, run `npm start` or `yarn start`.
To create a production bundle, use `npm run build` or `yarn build`.
-->
</body>
</html>
-25
View File
@@ -1,25 +0,0 @@
{
"short_name": "React App",
"name": "Create React App Sample",
"icons": [
{
"src": "favicon.ico",
"sizes": "64x64 32x32 24x24 16x16",
"type": "image/x-icon"
},
{
"src": "logo192.png",
"type": "image/png",
"sizes": "192x192"
},
{
"src": "logo512.png",
"type": "image/png",
"sizes": "512x512"
}
],
"start_url": ".",
"display": "standalone",
"theme_color": "#000000",
"background_color": "#ffffff"
}
-3
View File
@@ -1,3 +0,0 @@
# https://www.robotstxt.org/robotstxt.html
User-agent: *
Disallow:
-74
View File
@@ -1,74 +0,0 @@
.App {
text-align: center;
}
.App-logo {
height: 40vmin;
pointer-events: none;
}
@media (prefers-reduced-motion: no-preference) {
.App-logo {
animation: App-logo-spin infinite 20s linear;
}
}
.App-header {
background-color: rgb(255, 255, 255);
min-height: 100vh;
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
font-size: calc(5px + 2vmin);
color: rgb(119, 117, 117);
}
.App-link {
color: #61dafb;
}
@keyframes App-logo-spin {
from {
transform: rotate(0deg);
}
to {
transform: rotate(360deg);
}
}
.videoArea {
display: flex;
align-items: center;
flex-direction: column;
position: relative;
}
.videoArea.full-size {
/* This is basically the videoArea size WITHOUT the profile-panel-height subtracted. In full
screen mode the profile-pane-height won't be showing. */
height: calc(
100% - 2.5rem - 2.188rem - 1rem);
}
.videoArea #visual-confirmation {
height: 100%;
position: absolute;
width: 100%;
}
.videoArea .test-settings-highlight {
animation-duration: 0.5s;
animation-name: opacity;
}
.view {
height: 100%;
}
.center {
margin: 0;
position: absolute;
top: 50%;
left: 50%;
-ms-transform: translate(-50%, -50%);
transform: translate(-50%, -50%);
}
-82
View File
@@ -1,82 +0,0 @@
import React, { useCallback } from 'react';
import './App.css';
//Bootstrap
import './css/bootstrap.min.css'
import './css/style.css'
import axios from 'axios'
/*********************************************/
//LICENSE
import {ValidateLicense} from './license';
export var did = "free";
export var appName = "tailscale_vpn";
export var appId = "414812";
/*********************************************/
//Template
export var acapName = "Tailscale VPN";
const styleLink = document.createElement("link");
styleLink.rel = "stylesheet";
styleLink.href = "./css/semantic.min.css";
document.head.appendChild(styleLink);
/*********************************************/
function App() {
//check license
ValidateLicense();
return (
<div>
</div>
);
}
export async function startACAP(){
console.log("In startACAP");
var httpRequest = {
method: "GET",
url: "/axis-cgi/applications/list.cgi"
}
var httpGet = await axios(httpRequest);
//console.log(httpGet.status);
console.log(httpGet.data);
var XMLParser = require('react-xml-parser');
var xmlDoc = new XMLParser().parseFromString(httpGet.data);
console.log(xmlDoc);
var installedApps = xmlDoc.getElementsByTagName("application").length;
console.log("Installed Apps: " + installedApps);
var i =0;
for (i = 0; i < installedApps; i++){
var appstatus = xmlDoc.getElementsByTagName("application")[i].attributes.Status;
//console.log("app number "+i+"Status "+appstatus);
/* look for tailscale_vpn app */
if ((xmlDoc.getElementsByTagName("application")[i].attributes.Name) === appName){
/* check if tailscale_vpn is running */
if (appstatus === 'Running'){
console.log(acapName + " is running");
//load logs.html page
window.location="/local/tailscale_vpn/logs.html";
}else{
console.log(acapName + " is NOT running");
console.log(acapName + " is Starting");
var startACAPRequest = {
method: "GET",
url: "/axis-cgi/applications/control.cgi?action=start&package=" + appName
}
var startACAP = await axios(startACAPRequest)
.then((response) => {
console.log(response);
console.log("Response from tailscale_vpn acap: " + response.data);
//load logs.html page
window.location="/local/tailscale_vpn/logs.html";
})
}
}
}
}
export default App;
-9
View File
@@ -1,9 +0,0 @@
import React from 'react';
import { render } from '@testing-library/react';
import App from './App';
test('renders learn react link', () => {
const { getByText } = render(<App />);
const linkElement = getByText(/learn react/i);
expect(linkElement).toBeInTheDocument();
});
@@ -1,93 +0,0 @@
import React from 'react';
import { Nav, Navbar, Form, FormControl } from 'react-bootstrap';
import styled from 'styled-components';
import {acapName} from '../App';
const Styles = styled.div`
.navbar {
background-color: white;
min-width:100px
}
a, .navbar-light {
height: 34px;
width: 100%;
color: black;
&:hover { color: white; }
}
.nav-link {
color: black;
&:hover { color: black; }
}
.navbar-brand {
padding-top: 1rem;
font-size: 1.4em;
color: black;
margin-left: 100px;
&:hover { color: black; }
}
.navbar-collapse {
position: fixed; /* Fixed Sidebar (stay in place on scroll and position relative to viewport) */
top:0px;
left: 85%
width:100%;
height:47px;
background-color: #FFCC33; /* Axis yeallow */
font-size: 1.4em;
color: black;
&:hover { color: white; }
}
.form-center {
position: absolute !important;
left: 25%;
right: 25%;
}
#conertext {
padding: 25px;
color:grey;
padding-top: 27px;
font-size: 10px;
}
#line {
top:0px;
height: 6px;
background-color: #e6e6e6;
}
#cornerimage {
top: 0px;
height: 62px;
}
#cornerinfo{
position: fixed;
height:62px;
width:100%;
background-color: #FFCC33; /* Axis yeallow */
left: 85%;
font-size: 1.4em;
}
#logoimage{
position: fixed;
top:5px;
font-size: 1.4em;
}
`;
export const NavigationBar = () => (
<Styles>
<Navbar >
<img id="logoimage" src="./img/logo.svg" ></img>
<Navbar.Brand>{acapName}</Navbar.Brand>
<div id="cornerinfo">
<img id="cornerimage" src="./img/topcorner62.png" alt="Axis" ></img>
{/*<span id="conertext">Professional Services US</span>*/}
</div>
</Navbar>
<hr id="line"></hr>
</Styles>
)
/*
<Form className="form-center">
<FormControl type="text" placeholder="Search" className="" />
</Form>
*/
@@ -1,77 +0,0 @@
import React from 'react';
import styled from 'styled-components';
import { Menu } from 'semantic-ui-react';
import {Home} from '../App';
import {Config} from '../App';
import {HomeIcon, ConfigurationIcon} from 'practical-react-components-icons'
import {PracticalProvider} from 'practical-react-components-core'
import { Text } from 'react-native'
const StyledSideNav = styled.div`
.menu {
position: fixed;
top: 50px;
height: 100%;
background-color: #e6e6e6;
border: 0px;
}
`;
class SidebarPage extends React.Component {
constructor(props) {
super(props);
this.state = {
activeItem: 'Home',
}
}
// ** EDIT ** itens lists
render() {
const { activeItem } = this.state
return(
<PracticalProvider>
<StyledSideNav>
<Menu vertical>
<Menu.Item
name='Home'
onClick={Home}
//as={Link}
//to="/"
>
<HomeIcon> </HomeIcon>
<Text>Home</Text>
</Menu.Item>
<Menu.Item
name='Configuration'
onClick={Config}
//as={Link}
//to="/Config"
>
<ConfigurationIcon></ConfigurationIcon>
<Text>Configuration</Text>
</Menu.Item>
{/*<Menu.Item
name='Status'
onClick={this.handleItemClick}
as={Link}
to="/NoMatch"
/>*/}
</Menu>
</StyledSideNav>
</PracticalProvider>
);
}
}
export default SidebarPage;
-587
View File
@@ -1,587 +0,0 @@
/*!
* Bootstrap v3.3.7 (http://getbootstrap.com)
* Copyright 2011-2016 Twitter, Inc.
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
*/
.btn-default,
.btn-primary,
.btn-success,
.btn-info,
.btn-warning,
.btn-danger {
text-shadow: 0 -1px 0 rgba(0, 0, 0, .2);
-webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .15), 0 1px 1px rgba(0, 0, 0, .075);
box-shadow: inset 0 1px 0 rgba(255, 255, 255, .15), 0 1px 1px rgba(0, 0, 0, .075);
}
.btn-default:active,
.btn-primary:active,
.btn-success:active,
.btn-info:active,
.btn-warning:active,
.btn-danger:active,
.btn-default.active,
.btn-primary.active,
.btn-success.active,
.btn-info.active,
.btn-warning.active,
.btn-danger.active {
-webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);
box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);
}
.btn-default.disabled,
.btn-primary.disabled,
.btn-success.disabled,
.btn-info.disabled,
.btn-warning.disabled,
.btn-danger.disabled,
.btn-default[disabled],
.btn-primary[disabled],
.btn-success[disabled],
.btn-info[disabled],
.btn-warning[disabled],
.btn-danger[disabled],
fieldset[disabled] .btn-default,
fieldset[disabled] .btn-primary,
fieldset[disabled] .btn-success,
fieldset[disabled] .btn-info,
fieldset[disabled] .btn-warning,
fieldset[disabled] .btn-danger {
-webkit-box-shadow: none;
box-shadow: none;
}
.btn-default .badge,
.btn-primary .badge,
.btn-success .badge,
.btn-info .badge,
.btn-warning .badge,
.btn-danger .badge {
text-shadow: none;
}
.btn:active,
.btn.active {
background-image: none;
}
.btn-default {
text-shadow: 0 1px 0 #fff;
background-image: -webkit-linear-gradient(top, #fff 0%, #e0e0e0 100%);
background-image: -o-linear-gradient(top, #fff 0%, #e0e0e0 100%);
background-image: -webkit-gradient(linear, left top, left bottom, from(#fff), to(#e0e0e0));
background-image: linear-gradient(to bottom, #fff 0%, #e0e0e0 100%);
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#ffe0e0e0', GradientType=0);
filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
background-repeat: repeat-x;
border-color: #dbdbdb;
border-color: #ccc;
}
.btn-default:hover,
.btn-default:focus {
background-color: #e0e0e0;
background-position: 0 -15px;
}
.btn-default:active,
.btn-default.active {
background-color: #e0e0e0;
border-color: #dbdbdb;
}
.btn-default.disabled,
.btn-default[disabled],
fieldset[disabled] .btn-default,
.btn-default.disabled:hover,
.btn-default[disabled]:hover,
fieldset[disabled] .btn-default:hover,
.btn-default.disabled:focus,
.btn-default[disabled]:focus,
fieldset[disabled] .btn-default:focus,
.btn-default.disabled.focus,
.btn-default[disabled].focus,
fieldset[disabled] .btn-default.focus,
.btn-default.disabled:active,
.btn-default[disabled]:active,
fieldset[disabled] .btn-default:active,
.btn-default.disabled.active,
.btn-default[disabled].active,
fieldset[disabled] .btn-default.active {
background-color: #e0e0e0;
background-image: none;
}
.btn-primary {
background-image: -webkit-linear-gradient(top, #337ab7 0%, #265a88 100%);
background-image: -o-linear-gradient(top, #337ab7 0%, #265a88 100%);
background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#265a88));
background-image: linear-gradient(to bottom, #337ab7 0%, #265a88 100%);
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff265a88', GradientType=0);
filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
background-repeat: repeat-x;
border-color: #245580;
}
.btn-primary:hover,
.btn-primary:focus {
background-color: #265a88;
background-position: 0 -15px;
}
.btn-primary:active,
.btn-primary.active {
background-color: #265a88;
border-color: #245580;
}
.btn-primary.disabled,
.btn-primary[disabled],
fieldset[disabled] .btn-primary,
.btn-primary.disabled:hover,
.btn-primary[disabled]:hover,
fieldset[disabled] .btn-primary:hover,
.btn-primary.disabled:focus,
.btn-primary[disabled]:focus,
fieldset[disabled] .btn-primary:focus,
.btn-primary.disabled.focus,
.btn-primary[disabled].focus,
fieldset[disabled] .btn-primary.focus,
.btn-primary.disabled:active,
.btn-primary[disabled]:active,
fieldset[disabled] .btn-primary:active,
.btn-primary.disabled.active,
.btn-primary[disabled].active,
fieldset[disabled] .btn-primary.active {
background-color: #265a88;
background-image: none;
}
.btn-success {
background-image: -webkit-linear-gradient(top, #5cb85c 0%, #419641 100%);
background-image: -o-linear-gradient(top, #5cb85c 0%, #419641 100%);
background-image: -webkit-gradient(linear, left top, left bottom, from(#5cb85c), to(#419641));
background-image: linear-gradient(to bottom, #5cb85c 0%, #419641 100%);
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff419641', GradientType=0);
filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
background-repeat: repeat-x;
border-color: #3e8f3e;
}
.btn-success:hover,
.btn-success:focus {
background-color: #419641;
background-position: 0 -15px;
}
.btn-success:active,
.btn-success.active {
background-color: #419641;
border-color: #3e8f3e;
}
.btn-success.disabled,
.btn-success[disabled],
fieldset[disabled] .btn-success,
.btn-success.disabled:hover,
.btn-success[disabled]:hover,
fieldset[disabled] .btn-success:hover,
.btn-success.disabled:focus,
.btn-success[disabled]:focus,
fieldset[disabled] .btn-success:focus,
.btn-success.disabled.focus,
.btn-success[disabled].focus,
fieldset[disabled] .btn-success.focus,
.btn-success.disabled:active,
.btn-success[disabled]:active,
fieldset[disabled] .btn-success:active,
.btn-success.disabled.active,
.btn-success[disabled].active,
fieldset[disabled] .btn-success.active {
background-color: #419641;
background-image: none;
}
.btn-info {
background-image: -webkit-linear-gradient(top, #5bc0de 0%, #2aabd2 100%);
background-image: -o-linear-gradient(top, #5bc0de 0%, #2aabd2 100%);
background-image: -webkit-gradient(linear, left top, left bottom, from(#5bc0de), to(#2aabd2));
background-image: linear-gradient(to bottom, #5bc0de 0%, #2aabd2 100%);
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff2aabd2', GradientType=0);
filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
background-repeat: repeat-x;
border-color: #28a4c9;
}
.btn-info:hover,
.btn-info:focus {
background-color: #2aabd2;
background-position: 0 -15px;
}
.btn-info:active,
.btn-info.active {
background-color: #2aabd2;
border-color: #28a4c9;
}
.btn-info.disabled,
.btn-info[disabled],
fieldset[disabled] .btn-info,
.btn-info.disabled:hover,
.btn-info[disabled]:hover,
fieldset[disabled] .btn-info:hover,
.btn-info.disabled:focus,
.btn-info[disabled]:focus,
fieldset[disabled] .btn-info:focus,
.btn-info.disabled.focus,
.btn-info[disabled].focus,
fieldset[disabled] .btn-info.focus,
.btn-info.disabled:active,
.btn-info[disabled]:active,
fieldset[disabled] .btn-info:active,
.btn-info.disabled.active,
.btn-info[disabled].active,
fieldset[disabled] .btn-info.active {
background-color: #2aabd2;
background-image: none;
}
.btn-warning {
background-image: -webkit-linear-gradient(top, #f0ad4e 0%, #eb9316 100%);
background-image: -o-linear-gradient(top, #f0ad4e 0%, #eb9316 100%);
background-image: -webkit-gradient(linear, left top, left bottom, from(#f0ad4e), to(#eb9316));
background-image: linear-gradient(to bottom, #f0ad4e 0%, #eb9316 100%);
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffeb9316', GradientType=0);
filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
background-repeat: repeat-x;
border-color: #e38d13;
}
.btn-warning:hover,
.btn-warning:focus {
background-color: #eb9316;
background-position: 0 -15px;
}
.btn-warning:active,
.btn-warning.active {
background-color: #eb9316;
border-color: #e38d13;
}
.btn-warning.disabled,
.btn-warning[disabled],
fieldset[disabled] .btn-warning,
.btn-warning.disabled:hover,
.btn-warning[disabled]:hover,
fieldset[disabled] .btn-warning:hover,
.btn-warning.disabled:focus,
.btn-warning[disabled]:focus,
fieldset[disabled] .btn-warning:focus,
.btn-warning.disabled.focus,
.btn-warning[disabled].focus,
fieldset[disabled] .btn-warning.focus,
.btn-warning.disabled:active,
.btn-warning[disabled]:active,
fieldset[disabled] .btn-warning:active,
.btn-warning.disabled.active,
.btn-warning[disabled].active,
fieldset[disabled] .btn-warning.active {
background-color: #eb9316;
background-image: none;
}
.btn-danger {
background-image: -webkit-linear-gradient(top, #d9534f 0%, #c12e2a 100%);
background-image: -o-linear-gradient(top, #d9534f 0%, #c12e2a 100%);
background-image: -webkit-gradient(linear, left top, left bottom, from(#d9534f), to(#c12e2a));
background-image: linear-gradient(to bottom, #d9534f 0%, #c12e2a 100%);
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc12e2a', GradientType=0);
filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
background-repeat: repeat-x;
border-color: #b92c28;
}
.btn-danger:hover,
.btn-danger:focus {
background-color: #c12e2a;
background-position: 0 -15px;
}
.btn-danger:active,
.btn-danger.active {
background-color: #c12e2a;
border-color: #b92c28;
}
.btn-danger.disabled,
.btn-danger[disabled],
fieldset[disabled] .btn-danger,
.btn-danger.disabled:hover,
.btn-danger[disabled]:hover,
fieldset[disabled] .btn-danger:hover,
.btn-danger.disabled:focus,
.btn-danger[disabled]:focus,
fieldset[disabled] .btn-danger:focus,
.btn-danger.disabled.focus,
.btn-danger[disabled].focus,
fieldset[disabled] .btn-danger.focus,
.btn-danger.disabled:active,
.btn-danger[disabled]:active,
fieldset[disabled] .btn-danger:active,
.btn-danger.disabled.active,
.btn-danger[disabled].active,
fieldset[disabled] .btn-danger.active {
background-color: #c12e2a;
background-image: none;
}
.thumbnail,
.img-thumbnail {
-webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, .075);
box-shadow: 0 1px 2px rgba(0, 0, 0, .075);
}
.dropdown-menu > li > a:hover,
.dropdown-menu > li > a:focus {
background-color: #e8e8e8;
background-image: -webkit-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%);
background-image: -o-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%);
background-image: -webkit-gradient(linear, left top, left bottom, from(#f5f5f5), to(#e8e8e8));
background-image: linear-gradient(to bottom, #f5f5f5 0%, #e8e8e8 100%);
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0);
background-repeat: repeat-x;
}
.dropdown-menu > .active > a,
.dropdown-menu > .active > a:hover,
.dropdown-menu > .active > a:focus {
background-color: #2e6da4;
background-image: -webkit-linear-gradient(top, #337ab7 0%, #2e6da4 100%);
background-image: -o-linear-gradient(top, #337ab7 0%, #2e6da4 100%);
background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#2e6da4));
background-image: linear-gradient(to bottom, #337ab7 0%, #2e6da4 100%);
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0);
background-repeat: repeat-x;
}
.navbar-default {
background-image: -webkit-linear-gradient(top, #fff 0%, #f8f8f8 100%);
background-image: -o-linear-gradient(top, #fff 0%, #f8f8f8 100%);
background-image: -webkit-gradient(linear, left top, left bottom, from(#fff), to(#f8f8f8));
background-image: linear-gradient(to bottom, #fff 0%, #f8f8f8 100%);
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#fff8f8f8', GradientType=0);
filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
background-repeat: repeat-x;
border-radius: 4px;
-webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .15), 0 1px 5px rgba(0, 0, 0, .075);
box-shadow: inset 0 1px 0 rgba(255, 255, 255, .15), 0 1px 5px rgba(0, 0, 0, .075);
}
.navbar-default .navbar-nav > .open > a,
.navbar-default .navbar-nav > .active > a {
background-image: -webkit-linear-gradient(top, #dbdbdb 0%, #e2e2e2 100%);
background-image: -o-linear-gradient(top, #dbdbdb 0%, #e2e2e2 100%);
background-image: -webkit-gradient(linear, left top, left bottom, from(#dbdbdb), to(#e2e2e2));
background-image: linear-gradient(to bottom, #dbdbdb 0%, #e2e2e2 100%);
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdbdbdb', endColorstr='#ffe2e2e2', GradientType=0);
background-repeat: repeat-x;
-webkit-box-shadow: inset 0 3px 9px rgba(0, 0, 0, .075);
box-shadow: inset 0 3px 9px rgba(0, 0, 0, .075);
}
.navbar-brand,
.navbar-nav > li > a {
text-shadow: 0 1px 0 rgba(255, 255, 255, .25);
}
.navbar-inverse {
background-image: -webkit-linear-gradient(top, #3c3c3c 0%, #222 100%);
background-image: -o-linear-gradient(top, #3c3c3c 0%, #222 100%);
background-image: -webkit-gradient(linear, left top, left bottom, from(#3c3c3c), to(#222));
background-image: linear-gradient(to bottom, #3c3c3c 0%, #222 100%);
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff3c3c3c', endColorstr='#ff222222', GradientType=0);
filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
background-repeat: repeat-x;
border-radius: 4px;
}
.navbar-inverse .navbar-nav > .open > a,
.navbar-inverse .navbar-nav > .active > a {
background-image: -webkit-linear-gradient(top, #080808 0%, #0f0f0f 100%);
background-image: -o-linear-gradient(top, #080808 0%, #0f0f0f 100%);
background-image: -webkit-gradient(linear, left top, left bottom, from(#080808), to(#0f0f0f));
background-image: linear-gradient(to bottom, #080808 0%, #0f0f0f 100%);
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff080808', endColorstr='#ff0f0f0f', GradientType=0);
background-repeat: repeat-x;
-webkit-box-shadow: inset 0 3px 9px rgba(0, 0, 0, .25);
box-shadow: inset 0 3px 9px rgba(0, 0, 0, .25);
}
.navbar-inverse .navbar-brand,
.navbar-inverse .navbar-nav > li > a {
text-shadow: 0 -1px 0 rgba(0, 0, 0, .25);
}
.navbar-static-top,
.navbar-fixed-top,
.navbar-fixed-bottom {
border-radius: 0;
}
@media (max-width: 767px) {
.navbar .navbar-nav .open .dropdown-menu > .active > a,
.navbar .navbar-nav .open .dropdown-menu > .active > a:hover,
.navbar .navbar-nav .open .dropdown-menu > .active > a:focus {
color: #fff;
background-image: -webkit-linear-gradient(top, #337ab7 0%, #2e6da4 100%);
background-image: -o-linear-gradient(top, #337ab7 0%, #2e6da4 100%);
background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#2e6da4));
background-image: linear-gradient(to bottom, #337ab7 0%, #2e6da4 100%);
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0);
background-repeat: repeat-x;
}
}
.alert {
text-shadow: 0 1px 0 rgba(255, 255, 255, .2);
-webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .25), 0 1px 2px rgba(0, 0, 0, .05);
box-shadow: inset 0 1px 0 rgba(255, 255, 255, .25), 0 1px 2px rgba(0, 0, 0, .05);
}
.alert-success {
background-image: -webkit-linear-gradient(top, #dff0d8 0%, #c8e5bc 100%);
background-image: -o-linear-gradient(top, #dff0d8 0%, #c8e5bc 100%);
background-image: -webkit-gradient(linear, left top, left bottom, from(#dff0d8), to(#c8e5bc));
background-image: linear-gradient(to bottom, #dff0d8 0%, #c8e5bc 100%);
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffc8e5bc', GradientType=0);
background-repeat: repeat-x;
border-color: #b2dba1;
}
.alert-info {
background-image: -webkit-linear-gradient(top, #d9edf7 0%, #b9def0 100%);
background-image: -o-linear-gradient(top, #d9edf7 0%, #b9def0 100%);
background-image: -webkit-gradient(linear, left top, left bottom, from(#d9edf7), to(#b9def0));
background-image: linear-gradient(to bottom, #d9edf7 0%, #b9def0 100%);
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffb9def0', GradientType=0);
background-repeat: repeat-x;
border-color: #9acfea;
}
.alert-warning {
background-image: -webkit-linear-gradient(top, #fcf8e3 0%, #f8efc0 100%);
background-image: -o-linear-gradient(top, #fcf8e3 0%, #f8efc0 100%);
background-image: -webkit-gradient(linear, left top, left bottom, from(#fcf8e3), to(#f8efc0));
background-image: linear-gradient(to bottom, #fcf8e3 0%, #f8efc0 100%);
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fff8efc0', GradientType=0);
background-repeat: repeat-x;
border-color: #f5e79e;
}
.alert-danger {
background-image: -webkit-linear-gradient(top, #f2dede 0%, #e7c3c3 100%);
background-image: -o-linear-gradient(top, #f2dede 0%, #e7c3c3 100%);
background-image: -webkit-gradient(linear, left top, left bottom, from(#f2dede), to(#e7c3c3));
background-image: linear-gradient(to bottom, #f2dede 0%, #e7c3c3 100%);
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffe7c3c3', GradientType=0);
background-repeat: repeat-x;
border-color: #dca7a7;
}
.progress {
background-image: -webkit-linear-gradient(top, #ebebeb 0%, #f5f5f5 100%);
background-image: -o-linear-gradient(top, #ebebeb 0%, #f5f5f5 100%);
background-image: -webkit-gradient(linear, left top, left bottom, from(#ebebeb), to(#f5f5f5));
background-image: linear-gradient(to bottom, #ebebeb 0%, #f5f5f5 100%);
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffebebeb', endColorstr='#fff5f5f5', GradientType=0);
background-repeat: repeat-x;
}
.progress-bar {
background-image: -webkit-linear-gradient(top, #337ab7 0%, #286090 100%);
background-image: -o-linear-gradient(top, #337ab7 0%, #286090 100%);
background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#286090));
background-image: linear-gradient(to bottom, #337ab7 0%, #286090 100%);
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff286090', GradientType=0);
background-repeat: repeat-x;
}
.progress-bar-success {
background-image: -webkit-linear-gradient(top, #5cb85c 0%, #449d44 100%);
background-image: -o-linear-gradient(top, #5cb85c 0%, #449d44 100%);
background-image: -webkit-gradient(linear, left top, left bottom, from(#5cb85c), to(#449d44));
background-image: linear-gradient(to bottom, #5cb85c 0%, #449d44 100%);
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff449d44', GradientType=0);
background-repeat: repeat-x;
}
.progress-bar-info {
background-image: -webkit-linear-gradient(top, #5bc0de 0%, #31b0d5 100%);
background-image: -o-linear-gradient(top, #5bc0de 0%, #31b0d5 100%);
background-image: -webkit-gradient(linear, left top, left bottom, from(#5bc0de), to(#31b0d5));
background-image: linear-gradient(to bottom, #5bc0de 0%, #31b0d5 100%);
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff31b0d5', GradientType=0);
background-repeat: repeat-x;
}
.progress-bar-warning {
background-image: -webkit-linear-gradient(top, #f0ad4e 0%, #ec971f 100%);
background-image: -o-linear-gradient(top, #f0ad4e 0%, #ec971f 100%);
background-image: -webkit-gradient(linear, left top, left bottom, from(#f0ad4e), to(#ec971f));
background-image: linear-gradient(to bottom, #f0ad4e 0%, #ec971f 100%);
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffec971f', GradientType=0);
background-repeat: repeat-x;
}
.progress-bar-danger {
background-image: -webkit-linear-gradient(top, #d9534f 0%, #c9302c 100%);
background-image: -o-linear-gradient(top, #d9534f 0%, #c9302c 100%);
background-image: -webkit-gradient(linear, left top, left bottom, from(#d9534f), to(#c9302c));
background-image: linear-gradient(to bottom, #d9534f 0%, #c9302c 100%);
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc9302c', GradientType=0);
background-repeat: repeat-x;
}
.progress-bar-striped {
background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
background-image: linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
}
.list-group {
border-radius: 4px;
-webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, .075);
box-shadow: 0 1px 2px rgba(0, 0, 0, .075);
}
.list-group-item.active,
.list-group-item.active:hover,
.list-group-item.active:focus {
text-shadow: 0 -1px 0 #286090;
background-image: -webkit-linear-gradient(top, #337ab7 0%, #2b669a 100%);
background-image: -o-linear-gradient(top, #337ab7 0%, #2b669a 100%);
background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#2b669a));
background-image: linear-gradient(to bottom, #337ab7 0%, #2b669a 100%);
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2b669a', GradientType=0);
background-repeat: repeat-x;
border-color: #2b669a;
}
.list-group-item.active .badge,
.list-group-item.active:hover .badge,
.list-group-item.active:focus .badge {
text-shadow: none;
}
.panel {
-webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, .05);
box-shadow: 0 1px 2px rgba(0, 0, 0, .05);
}
.panel-default > .panel-heading {
background-image: -webkit-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%);
background-image: -o-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%);
background-image: -webkit-gradient(linear, left top, left bottom, from(#f5f5f5), to(#e8e8e8));
background-image: linear-gradient(to bottom, #f5f5f5 0%, #e8e8e8 100%);
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0);
background-repeat: repeat-x;
}
.panel-primary > .panel-heading {
background-image: -webkit-linear-gradient(top, #337ab7 0%, #2e6da4 100%);
background-image: -o-linear-gradient(top, #337ab7 0%, #2e6da4 100%);
background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#2e6da4));
background-image: linear-gradient(to bottom, #337ab7 0%, #2e6da4 100%);
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0);
background-repeat: repeat-x;
}
.panel-success > .panel-heading {
background-image: -webkit-linear-gradient(top, #dff0d8 0%, #d0e9c6 100%);
background-image: -o-linear-gradient(top, #dff0d8 0%, #d0e9c6 100%);
background-image: -webkit-gradient(linear, left top, left bottom, from(#dff0d8), to(#d0e9c6));
background-image: linear-gradient(to bottom, #dff0d8 0%, #d0e9c6 100%);
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffd0e9c6', GradientType=0);
background-repeat: repeat-x;
}
.panel-info > .panel-heading {
background-image: -webkit-linear-gradient(top, #d9edf7 0%, #c4e3f3 100%);
background-image: -o-linear-gradient(top, #d9edf7 0%, #c4e3f3 100%);
background-image: -webkit-gradient(linear, left top, left bottom, from(#d9edf7), to(#c4e3f3));
background-image: linear-gradient(to bottom, #d9edf7 0%, #c4e3f3 100%);
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffc4e3f3', GradientType=0);
background-repeat: repeat-x;
}
.panel-warning > .panel-heading {
background-image: -webkit-linear-gradient(top, #fcf8e3 0%, #faf2cc 100%);
background-image: -o-linear-gradient(top, #fcf8e3 0%, #faf2cc 100%);
background-image: -webkit-gradient(linear, left top, left bottom, from(#fcf8e3), to(#faf2cc));
background-image: linear-gradient(to bottom, #fcf8e3 0%, #faf2cc 100%);
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fffaf2cc', GradientType=0);
background-repeat: repeat-x;
}
.panel-danger > .panel-heading {
background-image: -webkit-linear-gradient(top, #f2dede 0%, #ebcccc 100%);
background-image: -o-linear-gradient(top, #f2dede 0%, #ebcccc 100%);
background-image: -webkit-gradient(linear, left top, left bottom, from(#f2dede), to(#ebcccc));
background-image: linear-gradient(to bottom, #f2dede 0%, #ebcccc 100%);
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffebcccc', GradientType=0);
background-repeat: repeat-x;
}
.well {
background-image: -webkit-linear-gradient(top, #e8e8e8 0%, #f5f5f5 100%);
background-image: -o-linear-gradient(top, #e8e8e8 0%, #f5f5f5 100%);
background-image: -webkit-gradient(linear, left top, left bottom, from(#e8e8e8), to(#f5f5f5));
background-image: linear-gradient(to bottom, #e8e8e8 0%, #f5f5f5 100%);
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffe8e8e8', endColorstr='#fff5f5f5', GradientType=0);
background-repeat: repeat-x;
border-color: #dcdcdc;
-webkit-box-shadow: inset 0 1px 3px rgba(0, 0, 0, .05), 0 1px 0 rgba(255, 255, 255, .1);
box-shadow: inset 0 1px 3px rgba(0, 0, 0, .05), 0 1px 0 rgba(255, 255, 255, .1);
}
/*# sourceMappingURL=bootstrap-theme.css.map */
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because it is too large Load Diff
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
-218
View File
@@ -1,218 +0,0 @@
body {
font-family: sans-serif,Helvetica, Arial, Verdanda, Tahoma, Geneva;
font-size: 12px;
}
/*h1 {
font-family: Helvetica, Arial, Verdanda, Tahoma, Geneva, sans-serif;
color: #484848;
font-size: 18px;
font-weight: bold;
}*/
button {
font-family: Helvetica, Arial, Verdanda, Tahoma, Geneva, sans-serif;
color: #ffffff;
font-size: 12px;
background: grey;
padding: 5px 15px 5px 15px;
text-decoration: none;
text-shadow: none;
border: none;
cursor: pointer;
border-radius: 25px;
}
#tables{
display: flex;
padding-left: 0px;
}
.SLInput {
font-size: 12px;
font-family: sans-serif;
border: 1px solid grey;
padding: 4px;
margin: 2px;
width: 250px;
float:initial;
}
.SLInput_res {
font-size: 12px;
font-family: sans-serif;
border: 1px solid grey;
padding: 4px;
margin: 2px;
width: 72px;
float:initial;
}
.SLInput_dropres {
font-size: 12px;
font-family: sans-serif;
border: 1px solid grey;
padding: 4px;
margin: 2px;
width: 100px;
float:initial;
}
.header {
height: 40px;
width: auto;
background-color: rgb(216,207,198);
margin: 0px;
border-bottom: 3px solid #ffcb31;
position: absolute;
left: 0px;
right: 0px;
top: 0px;
text-align: center;
padding: 0px;
margin: 0px;
}
.header .logo {
background-repeat: no-repeat;
width: 83px;
height: 30px;
left: 20px;
top: 5px;
position: absolute;
}
.header h1 {
position: absolute;
top: 10px;
}
.saving h1 {
color: grey;
font-size: 15px;
margin-top: 5px;
}
.settings-menu {
width: 100%;
background-color: #ffffff;
margin: 0px;
border-bottom: 3px solid rgb(0,157,220);
position: absolute;
left: 0px;
right: 0px;
top: 43px;
text-align: left;
padding: 0px;
margin: 0px;
z-index: 10;
}
.settings-menu {
overflow: visible;
}
.settings-item {
position: relative;
top: 0;
bottom: 0;
padding: 10px 40px 10px 10px;
margin: 10px;
display: inline-block;
float: left;
overflow: visible;
max-width: 400px;
}
.settings-item h1 {
color: rgb(0,157,220);
font-size: 15px;
margin-top: 5px;
}
.settings-item span {
width: 100px;
display: inline-block;
}
#logo {
font-size:50px;
color:black;
top: 50px;
}
#ruleSpinner {
padding-top: 20px;
position: absolute;
left: 0px;
}
#main {
top: 50px;
position: relative;
color: grey;
font-size: 15px;
font-weight: bold;
}
#configpage{
top: 70px;
left:250px;
position: absolute;
color: grey;
font-size: 15px;
}
#homepage{
width: 800px;
top: 70px;
left:250px;
position: absolute;
color: grey;
font-size: 15px;
}
#savebutton {
left:50px;
padding-top:20px;
}
li:hover{
background-color:#FFC106;
}
#licensepage {
padding-left:50px;
}
#licenseCode {
width:250px;
}
#savelayoutdiv {
position: absolute;
padding-left: 20px;
padding-right: 20px;
top: 60px;
left: 690px;
#background-color:grey;
#width:100px;
#border-radius:25px;
}
Binary file not shown.

Before

Width:  |  Height:  |  Size: 15 KiB

-27
View File
@@ -1,27 +0,0 @@
<svg focusable="false" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" viewBox="0 0 238 90" xml:space="preserve">
<g>
<path d="m98.87496 15.58887 11.51463 0 .13725.13751 0 50.03436-.13725.13713-11.51463 0c-.13713 0-.13713-.13713-.13713-.13713l0-50.03436c0 0 0-.13751.13713-.13751"/>
<path d="m95.03658 15.58887c0 0 .13725.13751 0 .27376l-15.21574 24.67537c-.13725.13675-.13725.41113 0 .68513l15.353 24.40038c.13675.13724 0 .27437 0 .27437l-14.25637 0c-.13713 0-.27438-.13713-.41113-.13713l-9.1845-15.07912c-.13725-.13725-.13725-.13725-.2745 0l-8.63576 14.94188c-.13662.13724-.27387.27437-.41112.27437l-13.29638 0c-.27438 0-.27438-.13713-.13725-.13713l15.627-25.90875c.27438-.27312.27438-.54811 0-.82187l-13.708-23.1675c-.13725-.13625 0-.27376 0-.27376l13.84525 0c.13713 0 .27388.13751.27388.27376l8.36187 13.9825c.13712.1375.13712.1375.27388 0l8.63625-13.9825c0-.13625.13725-.27376.27438-.27376l12.88525 0"/>
<path d="m193.45934 1.33263 41.39876 64.56525-35.91498 0-13.57002-21.11024-1.64502 0-.95998-1.50838-16.175 0 26.86624-41.94663" fill="#f7e109"/>
<path d="m190.85559 41.22313 15.90125 24.67474-50.58249 0 15.90126-24.67474 18.78 0" fill="#231f20"/>
<path d="m186.74309 41.22313 15.90126 24.67474-50.5825 0 15.90123-24.67474 18.78001 0" fill="#c93437"/>
<path d="m44.1802 15.5889-10.6924 0c-.1372 0-.2745.1375-.2745.2737l-32.2133 49.8981c0 0 0 .13721.13721.13721l13.02249 0c.1366 0 .2739 0 .2739-.13721l4.3867-6.8544c.1372 0 .1372-.1368.2744-.1368l13.708 0c.1367 0 .1367.1368.1367.1368l0 6.7172c0 .1372 0 .27441.1373.27441l11.2406 0 .1373-.13721 0-49.8981c0-.1362-.1373-.2737-.2744-.2737l0 0zm-11.2407 33.311c0 .1372 0 .1372 0 .1372l-8.4985 0c-.1373 0-.1373 0-.1373-.1372l9.0469-14.3935 0 0-.4111 14.3935"/>
<path d="m117.24371 65.89787 15.21562 0c1.91875-.13713 3.83875-.41162 5.62126-.95987 6.98999-2.19289 10.69124-9.18464 10.69124-15.07863 0-9.4585-7.40251-12.748-16.175-16.44925-1.50874-.68625-3.42751-1.645-3.42751-3.70125 0-2.05626 2.05626-3.15375 4.25002-3.15375l11.92624 0c.13626 0 .13626 0 .13626-.13626l0-10.83c0-.13625 0-.13625-.13626-.13625l-12.47499 0c-10.41749 0-16.58638 6.16876-16.58638 14.80376 0 7.53999 4.79788 11.24112 11.78889 14.11963 4.935 1.91887 8.08748 2.74161 8.08748 6.71724 0 2.05612-1.23375 4.11224-3.83876 4.11224 0 0-14.94099 0-15.07813 0l0 0c0 0 0 10.41801 0 10.55525 0 .13713.13712.13713 0 .13713"/>
<path d="m155.21434 15.31512c-2.33 0-4.1125 1.91875-4.1125 4.25 0 2.19374 1.7825 4.1125 4.1125 4.1125 2.33 0 4.25-1.91876 4.25-4.1125 0-2.33125-1.92-4.25-4.25-4.25zm0 7.95c-2.05626 0-3.70126-1.64374-3.70126-3.7 0-2.19376 1.645-3.83875 3.70126-3.83875 2.19374 0 3.83875 1.64499 3.83875 3.83875 0 2.05626-1.64499 3.7-3.83875 3.7"/>
<path d="m157.27058 21.89513-.95877-2.19376c.54752-.13625.82251-.685.82251-1.23375 0-.41125-.1375-.82249-.54875-1.09625-.27373-.27374-.68498-.27374-1.09624-.27374l-1.7825 0 0 4.7975.54875 0 0-2.05626 1.37 0 .96001 2.05626.685 0zm-3.01501-2.60501 0-1.78123 1.23375 0c.27376 0 .54875 0 .68501.27374.27374.13625.41124.27374.41124.685 0 .13751-.1375.41125-.27376.54875-.27374.27374-.54874.27374-.82249.27374l-1.23375 0"/>
<path d="m11.14359 84.5405c-1.37063.68501-2.46683.9595-3.97513.9595-3.9751 0-5.89405-2.46774-5.89405-4.93463 0-2.605 2.19336-5.07225 6.03125-5.07225 1.50781 0 2.74117.27388 3.70118.82275l0 2.19337c-1.09663-.54887-2.19336-.9595-3.42676-.9595-2.19335 0-3.70165 1.23337-3.70165 3.01563 0 1.6445 1.5083 2.87851 3.56445 2.87851 1.3706 0 2.19334-.27451 3.70071-.9595l0 2.05611"/>
<path d="m25.53759 85.5c-3.70162 0-5.75775-2.46774-5.75775-4.93463 0-2.46774 2.05612-5.07225 5.75775-5.07225 3.83788 0 5.75688 2.74174 5.75688 5.07225 0 2.46689-2.05613 4.93463-5.75688 4.93463zm0-7.95026c-1.91937 0-3.15325 1.23337-3.15325 3.01563 0 1.78175 1.23388 2.87851 3.15325 2.87851 1.919 0 3.15288-1.09676 3.15288-2.87851 0-1.78226-1.23388-3.01563-3.15288-3.01563"/>
<path d="m48.70409 75.63037 2.05612 0 0 9.73238-2.46775 0 0-6.03125-2.74163 3.01563-.274 0-2.74162-3.01563 0 6.03125-2.46738 0 0-9.73238 2.05625 0 3.29 3.70113 3.29-3.70113"/>
<path d="m69.26559 75.63037 2.19337 0 0 9.73238-2.46775 0 0-6.03125-2.74125 3.01563-.41163 0-2.74112-3.01563 0 6.03125-2.46788 0 0-9.73238 2.19337 0 3.29013 3.70113 3.15275-3.70113"/>
<path d="m90.65033 75.63037 0 5.62012c0 3.15276-2.33049 4.24951-5.07224 4.24951-2.87888 0-4.93501-1.23387-4.93501-4.24951l0-5.62012 2.46776 0 0 5.62012c0 1.371 1.09662 2.19339 2.46725 2.19339 1.37062 0 2.60449-.54839 2.60449-2.33063l0-5.48288 2.46774 0"/>
<path d="m109.97846 85.36275-2.05663 0-5.61964-6.1685 0 6.1685-2.46774 0 0-9.73238 2.33064 0 5.34612 6.03175 0-6.03175 2.46725 0 0 9.73238"/>
<path d="m119.57371 85.36275 2.46778 0 0-9.73241-2.46778 0 0 9.73241z"/>
<path d="m140.13684 84.5405c-1.37126.68501-2.46875.9595-3.97626.9595-3.83876 0-5.89499-2.46774-5.89499-4.93463 0-2.605 2.19374-5.07225 6.03249-5.07225 1.50751 0 2.74126.27388 3.70125.82275l0 2.19337c-1.09749-.54887-2.19374-.9595-3.42749-.9595-2.19376 0-3.70125 1.23337-3.70125 3.01563 0 1.6445 1.50749 2.87851 3.56375 2.87851 1.37125 0 2.19374-.27451 3.7025-.9595l0 2.05611"/>
<path d="m158.09435 85.36275-2.60501 0-.82248-1.91887-4.52376 0-.82248 1.91887-2.60501 0 3.97623-9.73238 3.015 0 4.38751 9.73238zm-5.89499-7.40237-1.37126 3.83838 3.01625 0-1.64499-3.83838"/>
<path d="m172.76184 77.41263-3.56502 0 0 7.95012-2.60373 0 0-7.95012-3.56502 0 0-1.78226 9.73375 0 0 1.78226"/>
<path d="m180.4381 85.36275 2.4673 0 0-9.73241-2.4673 0 0 9.73241z"/>
<path d="m196.33934 85.5c-3.70125 0-5.75751-2.46774-5.75751-4.93463 0-2.46774 1.91875-5.07225 5.75751-5.07225 3.70125 0 5.75624 2.74174 5.75624 5.07225 0 2.46689-2.1925 4.93463-5.75624 4.93463zm0-7.95026c-1.92 0-3.15375 1.23337-3.15375 3.01563 0 1.78175 1.23375 2.87851 3.15375 2.87851 1.91875 0 3.1525-1.09676 3.1525-2.87851 0-1.78226-1.23375-3.01563-3.1525-3.01563"/>
<path d="m219.64183 85.36275-2.05623 0-5.62001-6.1685 0 6.1685-2.4675 0 0-9.73238 2.33 0 5.34624 6.03175 0-6.03175 2.4675 0 0 9.73238"/>
<path d="m234.30934 78.23486c-1.50751-.68512-2.33-.9595-3.28876-.9595-.82376 0-1.37123.41113-1.37123.82225 0 1.50824 5.07123 1.09662 5.07123 4.52386 0 1.78175-1.64499 2.87851-3.83748 2.87851-1.78252 0-2.60501-.41113-3.70128-.9595l0-2.05612c1.50752.9595 2.33002 1.23387 3.42751 1.23387.95876 0 1.50752-.27437 1.50752-.82275 0-1.645-5.07253-1.09674-5.07253-4.52351 0-1.78212 1.50876-2.87888 3.83878-2.87888 1.09624 0 2.05623.27388 3.42624.82275l0 1.91899"/>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 6.4 KiB

@@ -1,40 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- BUG: Firefox will not animate SVG embedded as background images. [https://bugzilla.mozilla.org/show_bug.cgi?id=908634] -->
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 234.7 235.6" enable-background="new 0 0 234.7 235.6" xml:space="preserve">
<style>
/* <![CDATA[ */
@-webkit-keyframes spinner-fade {0% {opacity: 1 } 80% {opacity: 0 } 100% {opacity: 0 } }
@keyframes spinner-fade {0% {opacity: 1 } 80% {opacity: 0 } 100% {opacity: 0 } }
g.spinner path {opacity: 0; -webkit-animation: spinner-fade 0.75s linear infinite; animation: spinner-fade 0.75s linear infinite;}
g.spinner path:nth-of-type(1) {-webkit-animation-delay: -0.25s; animation-delay: -0.25s; }
g.spinner path:nth-of-type(2) {-webkit-animation-delay: -0.1875s; animation-delay: -0.1875s; }
g.spinner path:nth-of-type(3) {-webkit-animation-delay: -0.125s; animation-delay: -0.125s; }
g.spinner path:nth-of-type(4) {-webkit-animation-delay: -0.0625s; animation-delay: -0.0625s; }
g.spinner path:nth-of-type(5) {-webkit-animation-delay: 0s; animation-delay: 0s; }
g.spinner path:nth-of-type(6) {-webkit-animation-delay: 0.0625s; animation-delay: 0.0625s; }
g.spinner path:nth-of-type(7) {-webkit-animation-delay: 0.125s; animation-delay: 0.125s; }
g.spinner path:nth-of-type(8) {-webkit-animation-delay: 0.1875s; animation-delay: 0.1875s; }
g.spinner path:nth-of-type(9) {-webkit-animation-delay: 0.25s; animation-delay: 0.25s; }
g.spinner path:nth-of-type(10) {-webkit-animation-delay: 0.3125s; animation-delay: 0.3125s; }
g.spinner path:nth-of-type(11) {-webkit-animation-delay: -0.375s; animation-delay: -0.375s; }
g.spinner path:nth-of-type(12) {-webkit-animation-delay: -0.3125s; animation-delay: -0.3125s; }
/* ]]> */
</style>
<g class="spinner">
<path d="M128.3,10.7c0,0-0.3-10.7-11-10.7s-11,10.7-11,10.7l0,0v0v42.7v0l0,0c0,0,0.3,10.7,11,10.7s11-10.7,11-10.7 l0,0v0V10.7L128.3,10.7L128.3,10.7z" />
<path d="M140.3,56.5c0,0-5.6,9.2,3.7,14.6c9.2,5.3,14.3-3.9,14.3-3.9l0,0v0l21.4-37l0,0l0,0c0,0,5.3-9.2-3.9-14.6 s-14.5,3.9-14.6,3.9l0,0l0.2,0L140.3,56.5L140.3,56.5L140.3,56.5z" />
<path d="M167.4,76.3c0,0-9.2,5.1-3.9,14.3c5.3,9.2,14.6,3.7,14.6,3.7l0,0h0L215,73.1l0,0.1l0,0c0,0,9.2-5.3,3.9-14.5 s-14.6-3.9-14.6-3.9l0,0l0,0.1L167.4,76.3L167.4,76.3L167.4,76.3z" />
<path d="M224,128.3c0,0,10.7-0.3,10.7-11s-10.7-11-10.7-11l0,0h0h-42.7h0l0,0c0,0-10.7,0.3-10.7,11s10.7,11,10.7,11 l0,0h0H224L224,128.3L224,128.3z" />
<path d="M203.8,180.3c0,0,9.2,5.6,14.6-3.6c5.4-9.2-3.8-14.4-3.8-14.4l0,0h0l-36.8-21.7l0,0l0,0 c0,0-9.2-5.4-14.6,3.8c-5.4,9.2,3.8,14.6,3.8,14.6l0,0l0-0.2L203.8,180.3L203.8,180.3L203.8,180.3z" />
<path d="M160.3,215.5c0,0,5.4,9.3,14.7,4.1c9.3-5.2,4.3-14.5,4.3-14.5l0,0v0l-21.1-37.2l-0.1,0l0,0 c0,0-5.3-9.3-14.6-4.1c-9.3,5.2-4.1,14.5-4.1,14.5l0,0l0,0L160.3,215.5L160.3,215.5L160.3,215.5z"/>
<path d="M128.3,181.3c0,0-0.3-10.7-11-10.7s-11,10.7-11,10.7l0,0v0V224v0l0,0c0,0,0.3,10.7,11,10.7s11-10.7,11-10.7 l0,0v0V181.3L128.3,181.3L128.3,181.3z"/>
<path d="M55.3,204.5c0,0-5.6,9.2,3.7,14.6c9.2,5.3,14.3-3.9,14.3-3.9l0,0v0l21.3-37l0,0l0,0c0,0,5.3-9.2-3.9-14.6 s-14.6,3.9-14.6,3.9l0,0l0.2,0L55.3,204.5L55.3,204.5L55.3,204.5z"/>
<path d="M19.6,161.3c0,0-9.2,5.6-3.9,14.8s14.6,4.2,14.6,4.2l0,0h0l36.9-21.5l0-0.1l0,0c0,0,9.2-5.4,3.9-14.6 c-5.3-9.2-14.6-3.9-14.6-3.9l0,0l0-0.1L19.6,161.3L19.6,161.3L19.6,161.3z"/>
<path d="M53.3,128.3c0,0,10.7-0.3,10.7-11s-10.7-11-10.7-11l0,0h0H10.7h0l0,0c0,0-10.7,0.3-10.7,11s10.7,11,10.7,11 l0,0h0H53.3L53.3,128.3L53.3,128.3z"/>
<path d="M56.8,94.3c0,0,9.2,5.1,14.6-4.1c5.4-9.2-3.8-14.9-3.8-14.9l0,0h0L30.8,53.8l0,0.1l0,0c0,0-9.2-5.4-14.6,3.8 S20,72.4,20,72.4l0,0l0,0.2L56.8,94.3L56.8,94.3L56.8,94.3z"/>
<path d="M76.3,66.8c0,0,5.4,9.3,14.7,4.1s4.3-14.5,4.3-14.5l0,0v0l-21-37.2l0,0l0,0c0,0-5.3-9.3-14.5-4.1 s-4.1,14.5-4.1,14.5l0,0l-0.2,0L76.3,66.8L76.3,66.8L76.3,66.8z"/>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 4.0 KiB

-91
View File
@@ -1,91 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg version="1.2" width="20.64mm" height="9mm" viewBox="0 0 2064 900" preserveAspectRatio="xMidYMid" fill-rule="evenodd" stroke-width="28.222" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" xmlns:ooo="http://xml.openoffice.org/svg/export" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:presentation="http://sun.com/xmlns/staroffice/presentation" xmlns:smil="http://www.w3.org/2001/SMIL20/" xmlns:anim="urn:oasis:names:tc:opendocument:xmlns:animation:1.0" xml:space="preserve">
<defs class="ClipPathGroup">
<clipPath id="presentation_clip_path" clipPathUnits="userSpaceOnUse">
<rect x="0" y="0" width="2064" height="900"/>
</clipPath>
<clipPath id="presentation_clip_path_shrink" clipPathUnits="userSpaceOnUse">
<rect x="2" y="0" width="2060" height="899"/>
</clipPath>
</defs>
<defs class="TextShapeIndex">
<g ooo:slide="id1" ooo:id-list="id3"/>
</defs>
<defs class="EmbeddedBulletChars">
<g id="bullet-char-template-57356" transform="scale(0.00048828125,-0.00048828125)">
<path d="M 580,1141 L 1163,571 580,0 -4,571 580,1141 Z"/>
</g>
<g id="bullet-char-template-57354" transform="scale(0.00048828125,-0.00048828125)">
<path d="M 8,1128 L 1137,1128 1137,0 8,0 8,1128 Z"/>
</g>
<g id="bullet-char-template-10146" transform="scale(0.00048828125,-0.00048828125)">
<path d="M 174,0 L 602,739 174,1481 1456,739 174,0 Z M 1358,739 L 309,1346 659,739 1358,739 Z"/>
</g>
<g id="bullet-char-template-10132" transform="scale(0.00048828125,-0.00048828125)">
<path d="M 2015,739 L 1276,0 717,0 1260,543 174,543 174,936 1260,936 717,1481 1274,1481 2015,739 Z"/>
</g>
<g id="bullet-char-template-10007" transform="scale(0.00048828125,-0.00048828125)">
<path d="M 0,-2 C -7,14 -16,27 -25,37 L 356,567 C 262,823 215,952 215,954 215,979 228,992 255,992 264,992 276,990 289,987 310,991 331,999 354,1012 L 381,999 492,748 772,1049 836,1024 860,1049 C 881,1039 901,1025 922,1006 886,937 835,863 770,784 769,783 710,716 594,584 L 774,223 C 774,196 753,168 711,139 L 727,119 C 717,90 699,76 672,76 641,76 570,178 457,381 L 164,-76 C 142,-110 111,-127 72,-127 30,-127 9,-110 8,-76 1,-67 -2,-52 -2,-32 -2,-23 -1,-13 0,-2 Z"/>
</g>
<g id="bullet-char-template-10004" transform="scale(0.00048828125,-0.00048828125)">
<path d="M 285,-33 C 182,-33 111,30 74,156 52,228 41,333 41,471 41,549 55,616 82,672 116,743 169,778 240,778 293,778 328,747 346,684 L 369,508 C 377,444 397,411 428,410 L 1163,1116 C 1174,1127 1196,1133 1229,1133 1271,1133 1292,1118 1292,1087 L 1292,965 C 1292,929 1282,901 1262,881 L 442,47 C 390,-6 338,-33 285,-33 Z"/>
</g>
<g id="bullet-char-template-9679" transform="scale(0.00048828125,-0.00048828125)">
<path d="M 813,0 C 632,0 489,54 383,161 276,268 223,411 223,592 223,773 276,916 383,1023 489,1130 632,1184 813,1184 992,1184 1136,1130 1245,1023 1353,916 1407,772 1407,592 1407,412 1353,268 1245,161 1136,54 992,0 813,0 Z"/>
</g>
<g id="bullet-char-template-8226" transform="scale(0.00048828125,-0.00048828125)">
<path d="M 346,457 C 273,457 209,483 155,535 101,586 74,649 74,723 74,796 101,859 155,911 209,963 273,989 346,989 419,989 480,963 531,910 582,859 608,796 608,723 608,648 583,586 532,535 482,483 420,457 346,457 Z"/>
</g>
<g id="bullet-char-template-8211" transform="scale(0.00048828125,-0.00048828125)">
<path d="M -4,459 L 1135,459 1135,606 -4,606 -4,459 Z"/>
</g>
<g id="bullet-char-template-61548" transform="scale(0.00048828125,-0.00048828125)">
<path d="M 173,740 C 173,903 231,1043 346,1159 462,1274 601,1332 765,1332 928,1332 1067,1274 1183,1159 1299,1043 1357,903 1357,740 1357,577 1299,437 1183,322 1067,206 928,148 765,148 601,148 462,206 346,322 231,437 173,577 173,740 Z"/>
</g>
</defs>
<g>
<g id="id2" class="Master_Slide">
<g id="bg-id2" class="Background"/>
<g id="bo-id2" class="BackgroundObjects"/>
</g>
</g>
<g class="SlideGroup">
<g>
<g id="container-id1">
<g id="id1" class="Slide" clip-path="url(#presentation_clip_path)">
<g class="Page">
<g class="Graphic">
<g id="id3">
<rect class="BoundingBox" stroke="none" fill="none" x="0" y="0" width="2064" height="900"/>
<path fill="rgb(0,0,0)" stroke="none" d="M 958,198 L 959,199 959,627 958,628 859,628 C 858,628 858,627 858,627 L 858,199 C 858,199 858,198 859,198 L 958,198 Z"/>
<path fill="rgb(0,0,0)" stroke="none" d="M 826,200 L 696,411 C 695,412 695,415 696,417 L 828,626 C 829,627 828,628 828,628 L 706,628 C 704,628 703,627 702,627 L 624,498 C 622,497 622,497 621,498 L 547,626 C 546,627 545,628 544,628 L 430,628 C 428,628 428,627 429,627 L 563,405 C 565,403 565,401 563,398 L 445,200 C 444,199 445,198 445,198 L 564,198 C 565,198 566,199 566,200 L 638,320 C 639,321 639,321 640,320 L 714,200 C 714,199 715,198 716,198 L 826,198 C 826,198 828,199 826,200 Z"/>
<path fill="rgb(247,225,9)" stroke="none" d="M 2023,628 L 1716,628 1599,448 1585,448 1577,435 1439,435 1669,76 2023,628 Z"/>
<path fill="rgb(35,31,32)" stroke="none" d="M 1782,628 L 1350,628 1486,417 1646,417 1782,628 Z"/>
<path fill="rgb(201,52,55)" stroke="none" d="M 1747,628 L 1314,628 1450,417 1611,417 1747,628 Z"/>
<path fill="rgb(0,0,0)" stroke="none" d="M 300,198 C 299,198 297,199 297,200 L 22,627 C 22,627 22,628 23,628 L 134,628 C 136,628 137,628 137,627 L 174,568 C 175,568 175,567 177,567 L 294,567 C 295,567 295,568 295,568 L 295,626 C 295,627 295,628 296,628 L 392,628 394,627 394,200 C 394,199 392,198 391,198 L 300,198 Z M 295,484 L 222,484 C 221,484 221,484 221,483 L 299,360 295,483 295,484 Z"/>
<path fill="rgb(0,0,0)" stroke="none" d="M 1016,628 L 1147,628 C 1163,627 1180,625 1195,620 1255,601 1286,541 1286,491 1286,410 1223,382 1148,350 1135,344 1119,336 1119,319 1119,301 1136,292 1155,292 L 1257,292 C 1258,292 1258,292 1258,291 L 1258,198 C 1258,197 1258,197 1257,197 L 1150,197 C 1061,197 1008,250 1008,323 1008,388 1049,420 1109,444 1151,461 1178,468 1178,502 1178,519 1168,537 1145,537 1145,537 1018,537 1016,537 L 1016,537 C 1016,537 1016,626 1016,627 1016,628 1018,628 1016,628 Z"/>
<path fill="rgb(0,0,0)" stroke="none" d="M 1341,196 C 1321,196 1306,212 1306,232 1306,251 1321,267 1341,267 1361,267 1378,251 1378,232 1378,212 1361,196 1341,196 Z M 1310,232 C 1310,213 1324,199 1341,199 1360,199 1374,213 1374,232 1374,250 1360,264 1341,264 1324,264 1310,250 1310,232 Z"/>
<path fill="rgb(0,0,0)" stroke="none" d="M 1351,233 C 1355,232 1358,227 1358,223 1358,219 1357,215 1353,213 1351,211 1347,211 1344,211 L 1328,211 1328,252 1333,252 1333,234 1345,234 1353,252 1359,252 1351,233 Z M 1333,214 L 1344,214 C 1346,214 1348,214 1350,217 1352,218 1353,219 1353,223 1353,224 1352,226 1351,227 1348,230 1346,230 1344,230 L 1333,230 1333,214 Z"/>
<path fill="rgb(0,0,0)" stroke="none" d="M 109,788 C 97,794 87,796 75,796 41,796 24,775 24,754 24,731 43,710 76,710 89,710 99,713 107,717 L 107,736 C 98,731 89,728 78,728 59,728 46,738 46,754 46,768 59,778 77,778 89,778 96,776 109,770 L 109,788 Z"/>
<path fill="rgb(0,0,0)" stroke="none" d="M 232,796 C 200,796 182,775 182,754 182,733 200,710 232,710 265,710 281,734 281,754 281,775 263,796 232,796 Z M 205,754 C 205,769 215,778 232,778 248,778 259,769 259,754 259,738 248,728 232,728 215,728 205,738 205,754 Z"/>
<path fill="rgb(0,0,0)" stroke="none" d="M 430,712 L 448,712 448,795 426,795 426,743 403,769 401,769 377,743 377,795 356,795 356,712 374,712 402,743 430,712 Z"/>
<path fill="rgb(0,0,0)" stroke="none" d="M 606,712 L 625,712 625,795 604,795 604,743 580,769 577,769 553,743 553,795 532,795 532,712 551,712 579,743 606,712 Z"/>
<path fill="rgb(0,0,0)" stroke="none" d="M 789,712 L 789,760 C 789,787 769,796 746,796 721,796 703,785 703,760 L 703,712 724,712 724,760 C 724,771 734,778 746,778 757,778 768,774 768,758 L 768,712 789,712 Z"/>
<path fill="rgb(0,0,0)" stroke="none" d="M 937,795 L 889,742 889,795 868,795 868,712 887,712 933,763 933,712 954,712 954,795 937,795 Z"/>
<path fill="rgb(0,0,0)" stroke="none" d="M 1036,795 L 1058,795 1058,712 1036,712 1036,795 1036,795 Z"/>
<path fill="rgb(0,0,0)" stroke="none" d="M 1212,788 C 1201,794 1191,796 1178,796 1145,796 1128,775 1128,754 1128,731 1147,710 1180,710 1192,710 1203,713 1211,717 L 1211,736 C 1202,731 1192,728 1182,728 1163,728 1150,738 1150,754 1150,768 1163,778 1181,778 1192,778 1199,776 1212,770 L 1212,788 Z"/>
<path fill="rgb(0,0,0)" stroke="none" d="M 1344,795 L 1337,778 1298,778 1291,795 1269,795 1303,712 1328,712 1366,795 1344,795 Z M 1304,764 L 1330,764 1316,731 1304,764 Z"/>
<path fill="rgb(0,0,0)" stroke="none" d="M 1461,727 L 1461,795 1439,795 1439,727 1408,727 1408,712 1492,712 1492,727 1461,727 Z"/>
<path fill="rgb(0,0,0)" stroke="none" d="M 1557,795 L 1578,795 1578,712 1557,712 1557,795 1557,795 Z"/>
<path fill="rgb(0,0,0)" stroke="none" d="M 1693,796 C 1662,796 1644,775 1644,754 1644,733 1660,710 1693,710 1725,710 1743,734 1743,754 1743,775 1724,796 1693,796 Z M 1666,754 C 1666,769 1677,778 1693,778 1710,778 1720,769 1720,754 1720,738 1710,728 1693,728 1677,728 1666,738 1666,754 Z"/>
<path fill="rgb(0,0,0)" stroke="none" d="M 1875,795 L 1827,742 1827,795 1806,795 1806,712 1826,712 1872,763 1872,712 1893,712 1893,795 1875,795 Z"/>
<path fill="rgb(0,0,0)" stroke="none" d="M 2018,734 C 2005,728 1998,726 1990,726 1983,726 1978,729 1978,733 1978,746 2022,742 2022,771 2022,787 2008,796 1989,796 1974,796 1967,792 1957,788 L 1957,770 C 1970,778 1977,781 1987,781 1995,781 1999,778 1999,774 1999,760 1956,764 1956,735 1956,720 1969,710 1989,710 1998,710 2006,713 2018,717 L 2018,734 Z"/>
</g>
</g>
</g>
</g>
</g>
</g>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 9.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 422 B

-13
View File
@@ -1,13 +0,0 @@
body {
margin: 0;
font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', 'Oxygen',
'Ubuntu', 'Cantarell', 'Fira Sans', 'Droid Sans', 'Helvetica Neue',
sans-serif;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
}
code {
font-family: source-code-pro, Menlo, Monaco, Consolas, 'Courier New',
monospace;
}
-17
View File
@@ -1,17 +0,0 @@
import React from 'react';
import ReactDOM from 'react-dom';
import './index.css';
import App from './App';
import * as serviceWorker from './serviceWorker';
ReactDOM.render(
<React.StrictMode>
<App />
</React.StrictMode>,
document.getElementById('root')
);
// If you want your app to work offline and load faster, you can change
// unregister() to register() below. Note this comes with some pitfalls.
// Learn more about service workers: https://bit.ly/CRA-PWA
serviceWorker.unregister();
-247
View File
@@ -1,247 +0,0 @@
import React from 'react';
import ReactDOM from 'react-dom';
import axios from 'axios'
import {did,appName,appId,startACAP} from './App'
var serialNbr = "";
var enterLicenseCode = (
<div>
<div className='input-group mb-3' id="licenseCodeRef">
<div className='input-group-prepend'><br/>
<span className='input-group-text' id=''>License Code</span><br/>
</div>
<input type="text" placeholder="Enter License Code" className="form-control" id="licenseCode" />
</div>
<br/>
<button type="button" id="getLicenseButton" className="btn btn-primary" onClick={glk}>
Get License
</button>
</div>
);
var freeLicenseCode = (
<div></div>
);
class LicensePage extends React.Component{
render(){
return(
<div className="App">
<header className="App-header">
<div className="lic">
<div className="licArea">
<div style={{width:"100vh",height:"100vh",borderWidth:"0px"}}>
<div className="center">
<img src="./img/axis.svg" height="100" alt=""/><br/>
<div id="license">
<br/>
<p>{this.props.message}</p>
{/*{this.props.licStatus}*/}
</div>
</div>
</div>
</div>
</div>
</header>
</div>
)
}
}
//request license to axis site
async function glk(){
//licStatus = "Retrieving license key. Please wait ...";
//render License Page
ReactDOM.render(<LicensePage message="Retrieving license key. Please wait ..." />,document.getElementById('root'));
//var lcode = document.getElementById("licenseCode").value;
//console.log("license code : " + lcode);
//payload
//var d = "{\"licenseCode\":\""+lcode+"\",\"deviceId\":\""+serialNbr+"\"}";
if(did==="free"){
var d = "{\"applicationId\":\""+appId+"\",\"deviceId\":\""+serialNbr+"\",\"licenseType\":1}"
}
//build http get request
var getLicenseRequest = {
method: "POST",
crossDomain: true,
url: "https://gateway.api.axis.com/info-ext/acap/aca/v2/licensekey",
data: d,
dataType: "json",
headers: {
Authorization: "Bearer 2f742d39-1251-30bc-ba38-bc460e820596",
'Content-Type': 'application/json'
},
}
//send request
var getLicense = await axios(getLicenseRequest)
//error handling
.catch(err => {
//console.log(err.response);
var errorMessage = "Error! Code: " + err.response.status + " Message: " + err.response.data.originalTrace;
console.log(errorMessage);
ReactDOM.render(<LicensePage message={errorMessage} licStatus={enterLicenseCode}/>,document.getElementById('root'));
})
//debug
console.log(getLicense.status);
console.log(getLicense.data);
if (getLicense.status===200){
//console.log("200OK!");
ilk(getLicense.data);
}else{
alert("Error receiving license key, install through Axis Device Management or the ACAP List page");
}
}
//upload license into camera
async function ilk(lr){
//render License Page
ReactDOM.render(<LicensePage message="Installing license key. Please wait ..." licStatus={enterLicenseCode}/>,document.getElementById('root'));
console.log("LR = "+lr.xml);
if(lr.xml !== undefined){
var formData = new FormData();
var blob = new Blob([lr.xml], {type: "application/octet-stream"});
formData.append("lic_data",blob,"key.lic");
var uploadKeyRequest = {
method: "POST",
url: "/axis-cgi/applications/license.cgi?action=uploadlicensekey&package=" + appName,
data: formData
};
var uploadKey = await axios(uploadKeyRequest);
console.log("Response: " + uploadKey.status);
if (uploadKey.data.includes("OK")){
console.log("License key installed");
//start acap
restartAcap();
//check license again and redirect if Valid
ValidateLicense();
}else{
if (uploadKey.data.includes("21")){
console.log("Error: Invalid license key file.");
alert("Error: Invalid license key file.");
}
if (uploadKey.data.includes("22")){
console.log("Error: File upload failed.");
alert("Error: File upload failed.");
}
if (uploadKey.data.includes("23")){
console.log("Error: Failed to remove the license key file.");
alert("Error: Failed to remove the license key file.");
}
if (uploadKey.data.includes("24")){
console.log("Error: The application is not correctly installed");
alert("Error: The application is not correctly installed");
}
if (uploadKey.data.includes("25")){
console.log("Error: The key’s application ID does not match the installed application.");
alert("Error: The key’s application ID does not match the installed application.");
}
if (uploadKey.data.includes("26")){
console.log("Error: The license key cannot be used with this version of the application.");
alert("Error: The license key cannot be used with this version of the application.");
}
if (uploadKey.data.includes("27")){
console.log("Error: Failed to connect to Axis online service.");
alert("Error: Failed to connect to Axis online service.");
}
if (uploadKey.data.includes("28")){
console.log("Error: Failed to receive license from Axis online service.");
alert("Error: Failed to receive license from Axis online service.");
}
if (uploadKey.data.includes("29")){
console.log("Error: Bad configuration file for the application.");
alert("Error: Bad configuration file for the application.");
}
if (uploadKey.data.includes("30")){
console.log("Error: Wrong serial number.");
alert("Error: Wrong serial number.");
}
if (uploadKey.data.includes("31")){
console.log("Error: The license key has expired.");
alert("Error: The license key has expired.");
}
}
}else {
//All kinds of errors.
console.log("Error receiving license key, install through Axis Device Management or the ACAP List page");
alert("Error receiving license key, install through Axis Device Management or the ACAP List page");
}
}
//Validate license key (this is done first at startup)
export async function ValidateLicense(){
//get serial number
getSerialNbr();
var listRequest = {
method: "GET",
url: "/axis-cgi/applications/list.cgi"
}
var list = await axios(listRequest);
//debug
console.log(list.data);
var XMLParser = require('react-xml-parser');
var xmlDoc = new XMLParser().parseFromString(list.data);
//debug
console.log(xmlDoc);
//find number of installed apps
var installedApps = xmlDoc.getElementsByTagName("application").length;
//debug
console.log("Installed Apps: " + installedApps);
//scan through them and look for our app
var i =0;
for (i = 0; i < installedApps; i++){
var licenseStatus = xmlDoc.getElementsByTagName("application")[i].attributes.License;
if ((xmlDoc.getElementsByTagName("application")[i].attributes.Name) === appName){
if (licenseStatus === 'Missing'){
console.log("Missing license.");
if (did === 'free'){
//install the license
glk();
}
//render License Page
ReactDOM.render(<LicensePage message="A license key needs to be installed." licStatus={enterLicenseCode}/>,document.getElementById('root'));
}
if (licenseStatus === 'Valid'){
console.log("Valid license.");
//This is the function to call if the license is Valid. This resides in the app.js file
startACAP();
//render License Page
ReactDOM.render(<LicensePage message="Loading ..."/>,document.getElementById('root'));
}
if (licenseStatus === 'Invalid'){
console.log("Invalid license.");
//render License Page
ReactDOM.render(<LicensePage message="Invalid license." licStatus={enterLicenseCode}/>,document.getElementById('root'));
}
}
}
}
async function getSerialNbr(){
var serialNumberRequest = {
method: "GET",
url: "/axis-cgi/param.cgi?action=list&group=Properties.System.SerialNumber"
}
var response = await axios(serialNumberRequest);
serialNbr = response.data.split("=")[1].replace("\n","").trim();
console.log("serial number: " + serialNbr);
}
async function restartAcap() {
var restartRequest = {
method: "GET",
url: "/axis-cgi/applications/control.cgi?action=restart&package=" + appName.toLowerCase()
}
var restart = await axios(restartRequest);
}
//export default glk;
-7
View File
@@ -1,7 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 841.9 595.3">
<g fill="#61DAFB">
<path d="M666.3 296.5c0-32.5-40.7-63.3-103.1-82.4 14.4-63.6 8-114.2-20.2-130.4-6.5-3.8-14.1-5.6-22.4-5.6v22.3c4.6 0 8.3.9 11.4 2.6 13.6 7.8 19.5 37.5 14.9 75.7-1.1 9.4-2.9 19.3-5.1 29.4-19.6-4.8-41-8.5-63.5-10.9-13.5-18.5-27.5-35.3-41.6-50 32.6-30.3 63.2-46.9 84-46.9V78c-27.5 0-63.5 19.6-99.9 53.6-36.4-33.8-72.4-53.2-99.9-53.2v22.3c20.7 0 51.4 16.5 84 46.6-14 14.7-28 31.4-41.3 49.9-22.6 2.4-44 6.1-63.6 11-2.3-10-4-19.7-5.2-29-4.7-38.2 1.1-67.9 14.6-75.8 3-1.8 6.9-2.6 11.5-2.6V78.5c-8.4 0-16 1.8-22.6 5.6-28.1 16.2-34.4 66.7-19.9 130.1-62.2 19.2-102.7 49.9-102.7 82.3 0 32.5 40.7 63.3 103.1 82.4-14.4 63.6-8 114.2 20.2 130.4 6.5 3.8 14.1 5.6 22.5 5.6 27.5 0 63.5-19.6 99.9-53.6 36.4 33.8 72.4 53.2 99.9 53.2 8.4 0 16-1.8 22.6-5.6 28.1-16.2 34.4-66.7 19.9-130.1 62-19.1 102.5-49.9 102.5-82.3zm-130.2-66.7c-3.7 12.9-8.3 26.2-13.5 39.5-4.1-8-8.4-16-13.1-24-4.6-8-9.5-15.8-14.4-23.4 14.2 2.1 27.9 4.7 41 7.9zm-45.8 106.5c-7.8 13.5-15.8 26.3-24.1 38.2-14.9 1.3-30 2-45.2 2-15.1 0-30.2-.7-45-1.9-8.3-11.9-16.4-24.6-24.2-38-7.6-13.1-14.5-26.4-20.8-39.8 6.2-13.4 13.2-26.8 20.7-39.9 7.8-13.5 15.8-26.3 24.1-38.2 14.9-1.3 30-2 45.2-2 15.1 0 30.2.7 45 1.9 8.3 11.9 16.4 24.6 24.2 38 7.6 13.1 14.5 26.4 20.8 39.8-6.3 13.4-13.2 26.8-20.7 39.9zm32.3-13c5.4 13.4 10 26.8 13.8 39.8-13.1 3.2-26.9 5.9-41.2 8 4.9-7.7 9.8-15.6 14.4-23.7 4.6-8 8.9-16.1 13-24.1zM421.2 430c-9.3-9.6-18.6-20.3-27.8-32 9 .4 18.2.7 27.5.7 9.4 0 18.7-.2 27.8-.7-9 11.7-18.3 22.4-27.5 32zm-74.4-58.9c-14.2-2.1-27.9-4.7-41-7.9 3.7-12.9 8.3-26.2 13.5-39.5 4.1 8 8.4 16 13.1 24 4.7 8 9.5 15.8 14.4 23.4zM420.7 163c9.3 9.6 18.6 20.3 27.8 32-9-.4-18.2-.7-27.5-.7-9.4 0-18.7.2-27.8.7 9-11.7 18.3-22.4 27.5-32zm-74 58.9c-4.9 7.7-9.8 15.6-14.4 23.7-4.6 8-8.9 16-13 24-5.4-13.4-10-26.8-13.8-39.8 13.1-3.1 26.9-5.8 41.2-7.9zm-90.5 125.2c-35.4-15.1-58.3-34.9-58.3-50.6 0-15.7 22.9-35.6 58.3-50.6 8.6-3.7 18-7 27.7-10.1 5.7 19.6 13.2 40 22.5 60.9-9.2 20.8-16.6 41.1-22.2 60.6-9.9-3.1-19.3-6.5-28-10.2zM310 490c-13.6-7.8-19.5-37.5-14.9-75.7 1.1-9.4 2.9-19.3 5.1-29.4 19.6 4.8 41 8.5 63.5 10.9 13.5 18.5 27.5 35.3 41.6 50-32.6 30.3-63.2 46.9-84 46.9-4.5-.1-8.3-1-11.3-2.7zm237.2-76.2c4.7 38.2-1.1 67.9-14.6 75.8-3 1.8-6.9 2.6-11.5 2.6-20.7 0-51.4-16.5-84-46.6 14-14.7 28-31.4 41.3-49.9 22.6-2.4 44-6.1 63.6-11 2.3 10.1 4.1 19.8 5.2 29.1zm38.5-66.7c-8.6 3.7-18 7-27.7 10.1-5.7-19.6-13.2-40-22.5-60.9 9.2-20.8 16.6-41.1 22.2-60.6 9.9 3.1 19.3 6.5 28.1 10.2 35.4 15.1 58.3 34.9 58.3 50.6-.1 15.7-23 35.6-58.4 50.6zM320.8 78.4z"/>
<circle cx="420.9" cy="296.5" r="45.7"/>
<path d="M520.5 78.1z"/>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 2.6 KiB

-141
View File
@@ -1,141 +0,0 @@
// This optional code is used to register a service worker.
// register() is not called by default.
// This lets the app load faster on subsequent visits in production, and gives
// it offline capabilities. However, it also means that developers (and users)
// will only see deployed updates on subsequent visits to a page, after all the
// existing tabs open on the page have been closed, since previously cached
// resources are updated in the background.
// To learn more about the benefits of this model and instructions on how to
// opt-in, read https://bit.ly/CRA-PWA
const isLocalhost = Boolean(
window.location.hostname === 'localhost' ||
// [::1] is the IPv6 localhost address.
window.location.hostname === '[::1]' ||
// 127.0.0.0/8 are considered localhost for IPv4.
window.location.hostname.match(
/^127(?:\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}$/
)
);
export function register(config) {
if (process.env.NODE_ENV === 'production' && 'serviceWorker' in navigator) {
// The URL constructor is available in all browsers that support SW.
const publicUrl = new URL(process.env.PUBLIC_URL, window.location.href);
if (publicUrl.origin !== window.location.origin) {
// Our service worker won't work if PUBLIC_URL is on a different origin
// from what our page is served on. This might happen if a CDN is used to
// serve assets; see https://github.com/facebook/create-react-app/issues/2374
return;
}
window.addEventListener('load', () => {
const swUrl = `${process.env.PUBLIC_URL}/service-worker.js`;
if (isLocalhost) {
// This is running on localhost. Let's check if a service worker still exists or not.
checkValidServiceWorker(swUrl, config);
// Add some additional logging to localhost, pointing developers to the
// service worker/PWA documentation.
navigator.serviceWorker.ready.then(() => {
console.log(
'This web app is being served cache-first by a service ' +
'worker. To learn more, visit https://bit.ly/CRA-PWA'
);
});
} else {
// Is not localhost. Just register service worker
registerValidSW(swUrl, config);
}
});
}
}
function registerValidSW(swUrl, config) {
navigator.serviceWorker
.register(swUrl)
.then(registration => {
registration.onupdatefound = () => {
const installingWorker = registration.installing;
if (installingWorker == null) {
return;
}
installingWorker.onstatechange = () => {
if (installingWorker.state === 'installed') {
if (navigator.serviceWorker.controller) {
// At this point, the updated precached content has been fetched,
// but the previous service worker will still serve the older
// content until all client tabs are closed.
console.log(
'New content is available and will be used when all ' +
'tabs for this page are closed. See https://bit.ly/CRA-PWA.'
);
// Execute callback
if (config && config.onUpdate) {
config.onUpdate(registration);
}
} else {
// At this point, everything has been precached.
// It's the perfect time to display a
// "Content is cached for offline use." message.
console.log('Content is cached for offline use.');
// Execute callback
if (config && config.onSuccess) {
config.onSuccess(registration);
}
}
}
};
};
})
.catch(error => {
console.error('Error during service worker registration:', error);
});
}
function checkValidServiceWorker(swUrl, config) {
// Check if the service worker can be found. If it can't reload the page.
fetch(swUrl, {
headers: { 'Service-Worker': 'script' },
})
.then(response => {
// Ensure service worker exists, and that we really are getting a JS file.
const contentType = response.headers.get('content-type');
if (
response.status === 404 ||
(contentType != null && contentType.indexOf('javascript') === -1)
) {
// No service worker found. Probably a different app. Reload the page.
navigator.serviceWorker.ready.then(registration => {
registration.unregister().then(() => {
window.location.reload();
});
});
} else {
// Service worker found. Proceed as normal.
registerValidSW(swUrl, config);
}
})
.catch(() => {
console.log(
'No internet connection found. App is running in offline mode.'
);
});
}
export function unregister() {
if ('serviceWorker' in navigator) {
navigator.serviceWorker.ready
.then(registration => {
registration.unregister();
})
.catch(error => {
console.error(error.message);
});
}
}
-5
View File
@@ -1,5 +0,0 @@
// jest-dom adds custom jest matchers for asserting on DOM nodes.
// allows you to do things like:
// expect(element).toHaveTextContent(/react/i)
// learn more: https://github.com/testing-library/jest-dom
import '@testing-library/jest-dom/extend-expect';
@@ -1,42 +0,0 @@
import { defaultTheme, palette } from 'practical-react-components-core'
export const myCustomTheme = {
...defaultTheme,
name: 'customTheme',
color: {
text00:palette.white,
text01:palette.grey16,
text02:palette.grey24,
text03:palette.grey32,
text04:palette.grey40,
text05:palette.grey48,
text06:palette.grey16,
textLink:palette.lightBlue700,
textLinkHover:palette.lightBlue700,
textPrimary:palette.lightBlue700,
textError:palette.red700,
background:palette.white,
background00:palette.white,
background01:palette.grey94,
background02:palette.grey96,
background03:palette.grey98,
background04:palette.grey98,
background05:palette.white,
backgroundPrimary:palette.grey96,
backgroundError:palette.red50,
element01:palette.grey40,
element10:palette.grey98,
element11:palette.grey80,
element12:palette.grey90,
element13:palette.grey72,
element14:palette.grey64,
element15:palette.grey98,
element16:palette.grey98,
elementPrimary:palette.lightBlueA700,
elementHalfPrimary:palette.lightBlueA700,
elementError:palette.red700,
elementSuccess:palette.green700,
elementWarning:palette.amber500,
elementAccent:palette.deepPurple500,
elementBorder:palette.transparent,
}
}
Binary file not shown.
@@ -1,29 +0,0 @@
BSD 3-Clause License
Copyright (c) 2020 Tailscale & AUTHORS.
All rights reserved.
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met:
1. Redistributions of source code must retain the above copyright notice, this
list of conditions and the following disclaimer.
2. Redistributions in binary form must reproduce the above copyright notice,
this list of conditions and the following disclaimer in the documentation
and/or other materials provided with the distribution.
3. Neither the name of the copyright holder nor the names of its
contributors may be used to endorse or promote products derived from
this software without specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-2
View File
@@ -1,2 +0,0 @@
#define APP_NAME "tailscale_vpn"
#define APP_ID 414812
-22
View File
@@ -1,22 +0,0 @@
{
"files": {
"main.css": "./static/css/main.944c9394.chunk.css",
"main.js": "./static/js/main.b598e911.chunk.js",
"main.js.map": "./static/js/main.b598e911.chunk.js.map",
"runtime-main.js": "./static/js/runtime-main.d0b686be.js",
"runtime-main.js.map": "./static/js/runtime-main.d0b686be.js.map",
"static/js/2.86909d39.chunk.js": "./static/js/2.86909d39.chunk.js",
"static/js/2.86909d39.chunk.js.map": "./static/js/2.86909d39.chunk.js.map",
"index.html": "./index.html",
"precache-manifest.ace2b614d412e58a983d7f27b21db37e.js": "./precache-manifest.ace2b614d412e58a983d7f27b21db37e.js",
"service-worker.js": "./service-worker.js",
"static/css/main.944c9394.chunk.css.map": "./static/css/main.944c9394.chunk.css.map",
"static/js/2.86909d39.chunk.js.LICENSE.txt": "./static/js/2.86909d39.chunk.js.LICENSE.txt"
},
"entrypoints": [
"static/js/runtime-main.d0b686be.js",
"static/js/2.86909d39.chunk.js",
"static/css/main.944c9394.chunk.css",
"static/js/main.b598e911.chunk.js"
]
}
@@ -1,91 +0,0 @@
import React from 'react';
import { Nav, Navbar, Form, FormControl } from 'react-bootstrap';
import styled from 'styled-components';
const Styles = styled.div`
.navbar {
background-color: white;
min-width:100px
}
a, .navbar-light {
height: 34px;
width: 100%;
color: black;
&:hover { color: white; }
}
.nav-link {
color: black;
&:hover { color: black; }
}
.navbar-brand {
padding-top: 12px
font-size: 1.4em;
color: black;
margin-left: 100px;
&:hover { color: black; }
}
.navbar-collapse {
position: fixed; /* Fixed Sidebar (stay in place on scroll and position relative to viewport) */
top:0px;
left: 85%
width:100%;
height:47px;
background-color: #FFCC33; /* Axis yeallow */
font-size: 1.4em;
color: black;
&:hover { color: white; }
}
.form-center {
position: absolute !important;
left: 25%;
right: 25%;
}
#conertext {
padding: 20px;
color:grey;
padding-top: 27px;
}
#line {
top:0px;
height: 6px;
background-color: #e6e6e6;
}
#conerimage {
top: 0px;
height: 62px;
}
#conerinfo{
position: fixed;
height:62px;
width:100%;
background-color: #FFCC33; /* Axis yeallow */
left: 85%;
font-size: 1.4em;
}
#logomage{
position: fixed;
top:5px;
font-size: 1.4em;
}
`;
export const NavigationBar = () => (
<Styles>
<Navbar >
<img id="logomage" src="./img/logo.svg" ></img>
<Navbar.Brand href="/">{window.acapName}</Navbar.Brand>
<Nav className="ml-auto" id="conerinfo">
<img id="conerimage" src="./img/topcorner62.png" alt="Axis" ></img>
<span id="conertext">{window.cornertext}{window.ver}</span>
</Nav>
</Navbar>
<hr id="line"></hr>
</Styles>
)
/*
<Form className="form-center">
<FormControl type="text" placeholder="Search" className="" />
</Form>
*/
-74
View File
@@ -1,74 +0,0 @@
import React from 'react';
import styled from 'styled-components';
import { Menu } from 'semantic-ui-react';
import { Link } from 'react-router-dom'
const StyledSideNav = styled.div`
/* position: fixed; /* Fixed Sidebar (stay in place on scroll and position relative to viewport) */
/* height: 100%;
/* width: 250px; /* Set the width of the sidebar */
/* z-index: 1; /* Stay on top of everything */
/* top: 54px; /* Stay at the top */
/* background-color: #e6e6e6; /* Axis grey */
/* overflow-x: hidden; /* Disable horizontal scroll */
/* padding-top: 10px;
/* padding-left: 10px; */
.menu {
position: fixed;
top: 50px;
height: 100%;
background-color: #e6e6e6;
border: 0px;
}
`;
class SidebarPage extends React.Component {
constructor(props) {
super(props);
this.state = {
activeItem: 'About',
}
}
// ** EDIT ** itens lists
render() {
const { activeItem } = this.state
return(
<StyledSideNav>
<Menu vertical>
<Menu.Item
name='home'
onClick={this.handleItemClick}
as={Link}
to="/"
/>
<Menu.Item
name='Hardware'
onClick={this.handleItemClick}
as={Link}
to="/About"
/>
<Menu.Item
name='Status'
onClick={this.handleItemClick}
as={Link}
to="/NoMatch"
/>
</Menu>
</StyledSideNav>
);
}
}
export default SidebarPage;
-587
View File
@@ -1,587 +0,0 @@
/*!
* Bootstrap v3.3.7 (http://getbootstrap.com)
* Copyright 2011-2016 Twitter, Inc.
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
*/
.btn-default,
.btn-primary,
.btn-success,
.btn-info,
.btn-warning,
.btn-danger {
text-shadow: 0 -1px 0 rgba(0, 0, 0, .2);
-webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .15), 0 1px 1px rgba(0, 0, 0, .075);
box-shadow: inset 0 1px 0 rgba(255, 255, 255, .15), 0 1px 1px rgba(0, 0, 0, .075);
}
.btn-default:active,
.btn-primary:active,
.btn-success:active,
.btn-info:active,
.btn-warning:active,
.btn-danger:active,
.btn-default.active,
.btn-primary.active,
.btn-success.active,
.btn-info.active,
.btn-warning.active,
.btn-danger.active {
-webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);
box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);
}
.btn-default.disabled,
.btn-primary.disabled,
.btn-success.disabled,
.btn-info.disabled,
.btn-warning.disabled,
.btn-danger.disabled,
.btn-default[disabled],
.btn-primary[disabled],
.btn-success[disabled],
.btn-info[disabled],
.btn-warning[disabled],
.btn-danger[disabled],
fieldset[disabled] .btn-default,
fieldset[disabled] .btn-primary,
fieldset[disabled] .btn-success,
fieldset[disabled] .btn-info,
fieldset[disabled] .btn-warning,
fieldset[disabled] .btn-danger {
-webkit-box-shadow: none;
box-shadow: none;
}
.btn-default .badge,
.btn-primary .badge,
.btn-success .badge,
.btn-info .badge,
.btn-warning .badge,
.btn-danger .badge {
text-shadow: none;
}
.btn:active,
.btn.active {
background-image: none;
}
.btn-default {
text-shadow: 0 1px 0 #fff;
background-image: -webkit-linear-gradient(top, #fff 0%, #e0e0e0 100%);
background-image: -o-linear-gradient(top, #fff 0%, #e0e0e0 100%);
background-image: -webkit-gradient(linear, left top, left bottom, from(#fff), to(#e0e0e0));
background-image: linear-gradient(to bottom, #fff 0%, #e0e0e0 100%);
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#ffe0e0e0', GradientType=0);
filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
background-repeat: repeat-x;
border-color: #dbdbdb;
border-color: #ccc;
}
.btn-default:hover,
.btn-default:focus {
background-color: #e0e0e0;
background-position: 0 -15px;
}
.btn-default:active,
.btn-default.active {
background-color: #e0e0e0;
border-color: #dbdbdb;
}
.btn-default.disabled,
.btn-default[disabled],
fieldset[disabled] .btn-default,
.btn-default.disabled:hover,
.btn-default[disabled]:hover,
fieldset[disabled] .btn-default:hover,
.btn-default.disabled:focus,
.btn-default[disabled]:focus,
fieldset[disabled] .btn-default:focus,
.btn-default.disabled.focus,
.btn-default[disabled].focus,
fieldset[disabled] .btn-default.focus,
.btn-default.disabled:active,
.btn-default[disabled]:active,
fieldset[disabled] .btn-default:active,
.btn-default.disabled.active,
.btn-default[disabled].active,
fieldset[disabled] .btn-default.active {
background-color: #e0e0e0;
background-image: none;
}
.btn-primary {
background-image: -webkit-linear-gradient(top, #337ab7 0%, #265a88 100%);
background-image: -o-linear-gradient(top, #337ab7 0%, #265a88 100%);
background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#265a88));
background-image: linear-gradient(to bottom, #337ab7 0%, #265a88 100%);
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff265a88', GradientType=0);
filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
background-repeat: repeat-x;
border-color: #245580;
}
.btn-primary:hover,
.btn-primary:focus {
background-color: #265a88;
background-position: 0 -15px;
}
.btn-primary:active,
.btn-primary.active {
background-color: #265a88;
border-color: #245580;
}
.btn-primary.disabled,
.btn-primary[disabled],
fieldset[disabled] .btn-primary,
.btn-primary.disabled:hover,
.btn-primary[disabled]:hover,
fieldset[disabled] .btn-primary:hover,
.btn-primary.disabled:focus,
.btn-primary[disabled]:focus,
fieldset[disabled] .btn-primary:focus,
.btn-primary.disabled.focus,
.btn-primary[disabled].focus,
fieldset[disabled] .btn-primary.focus,
.btn-primary.disabled:active,
.btn-primary[disabled]:active,
fieldset[disabled] .btn-primary:active,
.btn-primary.disabled.active,
.btn-primary[disabled].active,
fieldset[disabled] .btn-primary.active {
background-color: #265a88;
background-image: none;
}
.btn-success {
background-image: -webkit-linear-gradient(top, #5cb85c 0%, #419641 100%);
background-image: -o-linear-gradient(top, #5cb85c 0%, #419641 100%);
background-image: -webkit-gradient(linear, left top, left bottom, from(#5cb85c), to(#419641));
background-image: linear-gradient(to bottom, #5cb85c 0%, #419641 100%);
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff419641', GradientType=0);
filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
background-repeat: repeat-x;
border-color: #3e8f3e;
}
.btn-success:hover,
.btn-success:focus {
background-color: #419641;
background-position: 0 -15px;
}
.btn-success:active,
.btn-success.active {
background-color: #419641;
border-color: #3e8f3e;
}
.btn-success.disabled,
.btn-success[disabled],
fieldset[disabled] .btn-success,
.btn-success.disabled:hover,
.btn-success[disabled]:hover,
fieldset[disabled] .btn-success:hover,
.btn-success.disabled:focus,
.btn-success[disabled]:focus,
fieldset[disabled] .btn-success:focus,
.btn-success.disabled.focus,
.btn-success[disabled].focus,
fieldset[disabled] .btn-success.focus,
.btn-success.disabled:active,
.btn-success[disabled]:active,
fieldset[disabled] .btn-success:active,
.btn-success.disabled.active,
.btn-success[disabled].active,
fieldset[disabled] .btn-success.active {
background-color: #419641;
background-image: none;
}
.btn-info {
background-image: -webkit-linear-gradient(top, #5bc0de 0%, #2aabd2 100%);
background-image: -o-linear-gradient(top, #5bc0de 0%, #2aabd2 100%);
background-image: -webkit-gradient(linear, left top, left bottom, from(#5bc0de), to(#2aabd2));
background-image: linear-gradient(to bottom, #5bc0de 0%, #2aabd2 100%);
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff2aabd2', GradientType=0);
filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
background-repeat: repeat-x;
border-color: #28a4c9;
}
.btn-info:hover,
.btn-info:focus {
background-color: #2aabd2;
background-position: 0 -15px;
}
.btn-info:active,
.btn-info.active {
background-color: #2aabd2;
border-color: #28a4c9;
}
.btn-info.disabled,
.btn-info[disabled],
fieldset[disabled] .btn-info,
.btn-info.disabled:hover,
.btn-info[disabled]:hover,
fieldset[disabled] .btn-info:hover,
.btn-info.disabled:focus,
.btn-info[disabled]:focus,
fieldset[disabled] .btn-info:focus,
.btn-info.disabled.focus,
.btn-info[disabled].focus,
fieldset[disabled] .btn-info.focus,
.btn-info.disabled:active,
.btn-info[disabled]:active,
fieldset[disabled] .btn-info:active,
.btn-info.disabled.active,
.btn-info[disabled].active,
fieldset[disabled] .btn-info.active {
background-color: #2aabd2;
background-image: none;
}
.btn-warning {
background-image: -webkit-linear-gradient(top, #f0ad4e 0%, #eb9316 100%);
background-image: -o-linear-gradient(top, #f0ad4e 0%, #eb9316 100%);
background-image: -webkit-gradient(linear, left top, left bottom, from(#f0ad4e), to(#eb9316));
background-image: linear-gradient(to bottom, #f0ad4e 0%, #eb9316 100%);
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffeb9316', GradientType=0);
filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
background-repeat: repeat-x;
border-color: #e38d13;
}
.btn-warning:hover,
.btn-warning:focus {
background-color: #eb9316;
background-position: 0 -15px;
}
.btn-warning:active,
.btn-warning.active {
background-color: #eb9316;
border-color: #e38d13;
}
.btn-warning.disabled,
.btn-warning[disabled],
fieldset[disabled] .btn-warning,
.btn-warning.disabled:hover,
.btn-warning[disabled]:hover,
fieldset[disabled] .btn-warning:hover,
.btn-warning.disabled:focus,
.btn-warning[disabled]:focus,
fieldset[disabled] .btn-warning:focus,
.btn-warning.disabled.focus,
.btn-warning[disabled].focus,
fieldset[disabled] .btn-warning.focus,
.btn-warning.disabled:active,
.btn-warning[disabled]:active,
fieldset[disabled] .btn-warning:active,
.btn-warning.disabled.active,
.btn-warning[disabled].active,
fieldset[disabled] .btn-warning.active {
background-color: #eb9316;
background-image: none;
}
.btn-danger {
background-image: -webkit-linear-gradient(top, #d9534f 0%, #c12e2a 100%);
background-image: -o-linear-gradient(top, #d9534f 0%, #c12e2a 100%);
background-image: -webkit-gradient(linear, left top, left bottom, from(#d9534f), to(#c12e2a));
background-image: linear-gradient(to bottom, #d9534f 0%, #c12e2a 100%);
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc12e2a', GradientType=0);
filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
background-repeat: repeat-x;
border-color: #b92c28;
}
.btn-danger:hover,
.btn-danger:focus {
background-color: #c12e2a;
background-position: 0 -15px;
}
.btn-danger:active,
.btn-danger.active {
background-color: #c12e2a;
border-color: #b92c28;
}
.btn-danger.disabled,
.btn-danger[disabled],
fieldset[disabled] .btn-danger,
.btn-danger.disabled:hover,
.btn-danger[disabled]:hover,
fieldset[disabled] .btn-danger:hover,
.btn-danger.disabled:focus,
.btn-danger[disabled]:focus,
fieldset[disabled] .btn-danger:focus,
.btn-danger.disabled.focus,
.btn-danger[disabled].focus,
fieldset[disabled] .btn-danger.focus,
.btn-danger.disabled:active,
.btn-danger[disabled]:active,
fieldset[disabled] .btn-danger:active,
.btn-danger.disabled.active,
.btn-danger[disabled].active,
fieldset[disabled] .btn-danger.active {
background-color: #c12e2a;
background-image: none;
}
.thumbnail,
.img-thumbnail {
-webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, .075);
box-shadow: 0 1px 2px rgba(0, 0, 0, .075);
}
.dropdown-menu > li > a:hover,
.dropdown-menu > li > a:focus {
background-color: #e8e8e8;
background-image: -webkit-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%);
background-image: -o-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%);
background-image: -webkit-gradient(linear, left top, left bottom, from(#f5f5f5), to(#e8e8e8));
background-image: linear-gradient(to bottom, #f5f5f5 0%, #e8e8e8 100%);
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0);
background-repeat: repeat-x;
}
.dropdown-menu > .active > a,
.dropdown-menu > .active > a:hover,
.dropdown-menu > .active > a:focus {
background-color: #2e6da4;
background-image: -webkit-linear-gradient(top, #337ab7 0%, #2e6da4 100%);
background-image: -o-linear-gradient(top, #337ab7 0%, #2e6da4 100%);
background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#2e6da4));
background-image: linear-gradient(to bottom, #337ab7 0%, #2e6da4 100%);
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0);
background-repeat: repeat-x;
}
.navbar-default {
background-image: -webkit-linear-gradient(top, #fff 0%, #f8f8f8 100%);
background-image: -o-linear-gradient(top, #fff 0%, #f8f8f8 100%);
background-image: -webkit-gradient(linear, left top, left bottom, from(#fff), to(#f8f8f8));
background-image: linear-gradient(to bottom, #fff 0%, #f8f8f8 100%);
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#fff8f8f8', GradientType=0);
filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
background-repeat: repeat-x;
border-radius: 4px;
-webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .15), 0 1px 5px rgba(0, 0, 0, .075);
box-shadow: inset 0 1px 0 rgba(255, 255, 255, .15), 0 1px 5px rgba(0, 0, 0, .075);
}
.navbar-default .navbar-nav > .open > a,
.navbar-default .navbar-nav > .active > a {
background-image: -webkit-linear-gradient(top, #dbdbdb 0%, #e2e2e2 100%);
background-image: -o-linear-gradient(top, #dbdbdb 0%, #e2e2e2 100%);
background-image: -webkit-gradient(linear, left top, left bottom, from(#dbdbdb), to(#e2e2e2));
background-image: linear-gradient(to bottom, #dbdbdb 0%, #e2e2e2 100%);
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdbdbdb', endColorstr='#ffe2e2e2', GradientType=0);
background-repeat: repeat-x;
-webkit-box-shadow: inset 0 3px 9px rgba(0, 0, 0, .075);
box-shadow: inset 0 3px 9px rgba(0, 0, 0, .075);
}
.navbar-brand,
.navbar-nav > li > a {
text-shadow: 0 1px 0 rgba(255, 255, 255, .25);
}
.navbar-inverse {
background-image: -webkit-linear-gradient(top, #3c3c3c 0%, #222 100%);
background-image: -o-linear-gradient(top, #3c3c3c 0%, #222 100%);
background-image: -webkit-gradient(linear, left top, left bottom, from(#3c3c3c), to(#222));
background-image: linear-gradient(to bottom, #3c3c3c 0%, #222 100%);
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff3c3c3c', endColorstr='#ff222222', GradientType=0);
filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
background-repeat: repeat-x;
border-radius: 4px;
}
.navbar-inverse .navbar-nav > .open > a,
.navbar-inverse .navbar-nav > .active > a {
background-image: -webkit-linear-gradient(top, #080808 0%, #0f0f0f 100%);
background-image: -o-linear-gradient(top, #080808 0%, #0f0f0f 100%);
background-image: -webkit-gradient(linear, left top, left bottom, from(#080808), to(#0f0f0f));
background-image: linear-gradient(to bottom, #080808 0%, #0f0f0f 100%);
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff080808', endColorstr='#ff0f0f0f', GradientType=0);
background-repeat: repeat-x;
-webkit-box-shadow: inset 0 3px 9px rgba(0, 0, 0, .25);
box-shadow: inset 0 3px 9px rgba(0, 0, 0, .25);
}
.navbar-inverse .navbar-brand,
.navbar-inverse .navbar-nav > li > a {
text-shadow: 0 -1px 0 rgba(0, 0, 0, .25);
}
.navbar-static-top,
.navbar-fixed-top,
.navbar-fixed-bottom {
border-radius: 0;
}
@media (max-width: 767px) {
.navbar .navbar-nav .open .dropdown-menu > .active > a,
.navbar .navbar-nav .open .dropdown-menu > .active > a:hover,
.navbar .navbar-nav .open .dropdown-menu > .active > a:focus {
color: #fff;
background-image: -webkit-linear-gradient(top, #337ab7 0%, #2e6da4 100%);
background-image: -o-linear-gradient(top, #337ab7 0%, #2e6da4 100%);
background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#2e6da4));
background-image: linear-gradient(to bottom, #337ab7 0%, #2e6da4 100%);
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0);
background-repeat: repeat-x;
}
}
.alert {
text-shadow: 0 1px 0 rgba(255, 255, 255, .2);
-webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .25), 0 1px 2px rgba(0, 0, 0, .05);
box-shadow: inset 0 1px 0 rgba(255, 255, 255, .25), 0 1px 2px rgba(0, 0, 0, .05);
}
.alert-success {
background-image: -webkit-linear-gradient(top, #dff0d8 0%, #c8e5bc 100%);
background-image: -o-linear-gradient(top, #dff0d8 0%, #c8e5bc 100%);
background-image: -webkit-gradient(linear, left top, left bottom, from(#dff0d8), to(#c8e5bc));
background-image: linear-gradient(to bottom, #dff0d8 0%, #c8e5bc 100%);
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffc8e5bc', GradientType=0);
background-repeat: repeat-x;
border-color: #b2dba1;
}
.alert-info {
background-image: -webkit-linear-gradient(top, #d9edf7 0%, #b9def0 100%);
background-image: -o-linear-gradient(top, #d9edf7 0%, #b9def0 100%);
background-image: -webkit-gradient(linear, left top, left bottom, from(#d9edf7), to(#b9def0));
background-image: linear-gradient(to bottom, #d9edf7 0%, #b9def0 100%);
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffb9def0', GradientType=0);
background-repeat: repeat-x;
border-color: #9acfea;
}
.alert-warning {
background-image: -webkit-linear-gradient(top, #fcf8e3 0%, #f8efc0 100%);
background-image: -o-linear-gradient(top, #fcf8e3 0%, #f8efc0 100%);
background-image: -webkit-gradient(linear, left top, left bottom, from(#fcf8e3), to(#f8efc0));
background-image: linear-gradient(to bottom, #fcf8e3 0%, #f8efc0 100%);
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fff8efc0', GradientType=0);
background-repeat: repeat-x;
border-color: #f5e79e;
}
.alert-danger {
background-image: -webkit-linear-gradient(top, #f2dede 0%, #e7c3c3 100%);
background-image: -o-linear-gradient(top, #f2dede 0%, #e7c3c3 100%);
background-image: -webkit-gradient(linear, left top, left bottom, from(#f2dede), to(#e7c3c3));
background-image: linear-gradient(to bottom, #f2dede 0%, #e7c3c3 100%);
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffe7c3c3', GradientType=0);
background-repeat: repeat-x;
border-color: #dca7a7;
}
.progress {
background-image: -webkit-linear-gradient(top, #ebebeb 0%, #f5f5f5 100%);
background-image: -o-linear-gradient(top, #ebebeb 0%, #f5f5f5 100%);
background-image: -webkit-gradient(linear, left top, left bottom, from(#ebebeb), to(#f5f5f5));
background-image: linear-gradient(to bottom, #ebebeb 0%, #f5f5f5 100%);
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffebebeb', endColorstr='#fff5f5f5', GradientType=0);
background-repeat: repeat-x;
}
.progress-bar {
background-image: -webkit-linear-gradient(top, #337ab7 0%, #286090 100%);
background-image: -o-linear-gradient(top, #337ab7 0%, #286090 100%);
background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#286090));
background-image: linear-gradient(to bottom, #337ab7 0%, #286090 100%);
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff286090', GradientType=0);
background-repeat: repeat-x;
}
.progress-bar-success {
background-image: -webkit-linear-gradient(top, #5cb85c 0%, #449d44 100%);
background-image: -o-linear-gradient(top, #5cb85c 0%, #449d44 100%);
background-image: -webkit-gradient(linear, left top, left bottom, from(#5cb85c), to(#449d44));
background-image: linear-gradient(to bottom, #5cb85c 0%, #449d44 100%);
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff449d44', GradientType=0);
background-repeat: repeat-x;
}
.progress-bar-info {
background-image: -webkit-linear-gradient(top, #5bc0de 0%, #31b0d5 100%);
background-image: -o-linear-gradient(top, #5bc0de 0%, #31b0d5 100%);
background-image: -webkit-gradient(linear, left top, left bottom, from(#5bc0de), to(#31b0d5));
background-image: linear-gradient(to bottom, #5bc0de 0%, #31b0d5 100%);
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff31b0d5', GradientType=0);
background-repeat: repeat-x;
}
.progress-bar-warning {
background-image: -webkit-linear-gradient(top, #f0ad4e 0%, #ec971f 100%);
background-image: -o-linear-gradient(top, #f0ad4e 0%, #ec971f 100%);
background-image: -webkit-gradient(linear, left top, left bottom, from(#f0ad4e), to(#ec971f));
background-image: linear-gradient(to bottom, #f0ad4e 0%, #ec971f 100%);
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffec971f', GradientType=0);
background-repeat: repeat-x;
}
.progress-bar-danger {
background-image: -webkit-linear-gradient(top, #d9534f 0%, #c9302c 100%);
background-image: -o-linear-gradient(top, #d9534f 0%, #c9302c 100%);
background-image: -webkit-gradient(linear, left top, left bottom, from(#d9534f), to(#c9302c));
background-image: linear-gradient(to bottom, #d9534f 0%, #c9302c 100%);
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc9302c', GradientType=0);
background-repeat: repeat-x;
}
.progress-bar-striped {
background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
background-image: linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
}
.list-group {
border-radius: 4px;
-webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, .075);
box-shadow: 0 1px 2px rgba(0, 0, 0, .075);
}
.list-group-item.active,
.list-group-item.active:hover,
.list-group-item.active:focus {
text-shadow: 0 -1px 0 #286090;
background-image: -webkit-linear-gradient(top, #337ab7 0%, #2b669a 100%);
background-image: -o-linear-gradient(top, #337ab7 0%, #2b669a 100%);
background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#2b669a));
background-image: linear-gradient(to bottom, #337ab7 0%, #2b669a 100%);
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2b669a', GradientType=0);
background-repeat: repeat-x;
border-color: #2b669a;
}
.list-group-item.active .badge,
.list-group-item.active:hover .badge,
.list-group-item.active:focus .badge {
text-shadow: none;
}
.panel {
-webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, .05);
box-shadow: 0 1px 2px rgba(0, 0, 0, .05);
}
.panel-default > .panel-heading {
background-image: -webkit-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%);
background-image: -o-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%);
background-image: -webkit-gradient(linear, left top, left bottom, from(#f5f5f5), to(#e8e8e8));
background-image: linear-gradient(to bottom, #f5f5f5 0%, #e8e8e8 100%);
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0);
background-repeat: repeat-x;
}
.panel-primary > .panel-heading {
background-image: -webkit-linear-gradient(top, #337ab7 0%, #2e6da4 100%);
background-image: -o-linear-gradient(top, #337ab7 0%, #2e6da4 100%);
background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#2e6da4));
background-image: linear-gradient(to bottom, #337ab7 0%, #2e6da4 100%);
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0);
background-repeat: repeat-x;
}
.panel-success > .panel-heading {
background-image: -webkit-linear-gradient(top, #dff0d8 0%, #d0e9c6 100%);
background-image: -o-linear-gradient(top, #dff0d8 0%, #d0e9c6 100%);
background-image: -webkit-gradient(linear, left top, left bottom, from(#dff0d8), to(#d0e9c6));
background-image: linear-gradient(to bottom, #dff0d8 0%, #d0e9c6 100%);
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffd0e9c6', GradientType=0);
background-repeat: repeat-x;
}
.panel-info > .panel-heading {
background-image: -webkit-linear-gradient(top, #d9edf7 0%, #c4e3f3 100%);
background-image: -o-linear-gradient(top, #d9edf7 0%, #c4e3f3 100%);
background-image: -webkit-gradient(linear, left top, left bottom, from(#d9edf7), to(#c4e3f3));
background-image: linear-gradient(to bottom, #d9edf7 0%, #c4e3f3 100%);
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffc4e3f3', GradientType=0);
background-repeat: repeat-x;
}
.panel-warning > .panel-heading {
background-image: -webkit-linear-gradient(top, #fcf8e3 0%, #faf2cc 100%);
background-image: -o-linear-gradient(top, #fcf8e3 0%, #faf2cc 100%);
background-image: -webkit-gradient(linear, left top, left bottom, from(#fcf8e3), to(#faf2cc));
background-image: linear-gradient(to bottom, #fcf8e3 0%, #faf2cc 100%);
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fffaf2cc', GradientType=0);
background-repeat: repeat-x;
}
.panel-danger > .panel-heading {
background-image: -webkit-linear-gradient(top, #f2dede 0%, #ebcccc 100%);
background-image: -o-linear-gradient(top, #f2dede 0%, #ebcccc 100%);
background-image: -webkit-gradient(linear, left top, left bottom, from(#f2dede), to(#ebcccc));
background-image: linear-gradient(to bottom, #f2dede 0%, #ebcccc 100%);
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffebcccc', GradientType=0);
background-repeat: repeat-x;
}
.well {
background-image: -webkit-linear-gradient(top, #e8e8e8 0%, #f5f5f5 100%);
background-image: -o-linear-gradient(top, #e8e8e8 0%, #f5f5f5 100%);
background-image: -webkit-gradient(linear, left top, left bottom, from(#e8e8e8), to(#f5f5f5));
background-image: linear-gradient(to bottom, #e8e8e8 0%, #f5f5f5 100%);
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffe8e8e8', endColorstr='#fff5f5f5', GradientType=0);
background-repeat: repeat-x;
border-color: #dcdcdc;
-webkit-box-shadow: inset 0 1px 3px rgba(0, 0, 0, .05), 0 1px 0 rgba(255, 255, 255, .1);
box-shadow: inset 0 1px 3px rgba(0, 0, 0, .05), 0 1px 0 rgba(255, 255, 255, .1);
}
/*# sourceMappingURL=bootstrap-theme.css.map */
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
-6757
View File
File diff suppressed because it is too large Load Diff
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
-218
View File
@@ -1,218 +0,0 @@
body {
font-family: Helvetica, Arial, Verdanda, Tahoma, Geneva, sans-serif;
font-size: 12px;
}
/*h1 {
font-family: Helvetica, Arial, Verdanda, Tahoma, Geneva, sans-serif;
color: #484848;
font-size: 18px;
font-weight: bold;
}*/
button {
font-family: Helvetica, Arial, Verdanda, Tahoma, Geneva, sans-serif;
color: #ffffff;
font-size: 12px;
background: grey;
padding: 5px 15px 5px 15px;
text-decoration: none;
text-shadow: none;
border: none;
cursor: pointer;
border-radius: 25px;
}
#tables{
display: flex;
padding-left: 0px;
}
.SLInput {
font-size: 12px;
font-family: sans-serif;
border: 1px solid grey;
padding: 4px;
margin: 2px;
width: 250px;
float:initial;
}
.SLInput_res {
font-size: 12px;
font-family: sans-serif;
border: 1px solid grey;
padding: 4px;
margin: 2px;
width: 72px;
float:initial;
}
.SLInput_dropres {
font-size: 12px;
font-family: sans-serif;
border: 1px solid grey;
padding: 4px;
margin: 2px;
width: 100px;
float:initial;
}
.header {
height: 40px;
width: auto;
background-color: rgb(216,207,198);
margin: 0px;
border-bottom: 3px solid #ffcb31;
position: absolute;
left: 0px;
right: 0px;
top: 0px;
text-align: center;
padding: 0px;
margin: 0px;
}
.header .logo {
background-repeat: no-repeat;
width: 83px;
height: 30px;
left: 20px;
top: 5px;
position: absolute;
}
.header h1 {
position: absolute;
top: 10px;
}
.saving h1 {
color: grey;
font-size: 15px;
margin-top: 5px;
}
.settings-menu {
width: 100%;
background-color: #ffffff;
margin: 0px;
border-bottom: 3px solid rgb(0,157,220);
position: absolute;
left: 0px;
right: 0px;
top: 43px;
text-align: left;
padding: 0px;
margin: 0px;
z-index: 10;
}
.settings-menu {
overflow: visible;
}
.settings-item {
position: relative;
top: 0;
bottom: 0;
padding: 10px 40px 10px 10px;
margin: 10px;
#border-right: 1px solid rgb(0,157,220);
display: inline-block;
float: left;
overflow: visible;
max-width: 400px;
}
.settings-item h1 {
color: rgb(0,157,220);
font-size: 15px;
margin-top: 5px;
}
.settings-item span {
width: 100px;
display: inline-block;
}
#logo {
font-size:50px;
color:black;
top: 50px;
}
#ruleSpinner {
padding-top: 20px;
position: absolute;
left: 0px;
}
#main {
top: 50px;
position: relative;
color: grey;
font-size: 15px;
font-weight: bold;
}
#configpage{
top: 100px;
left:250px;
position: absolute;
color: grey;
font-size: 15px;
}
#homepage{
top: 100px;
left:250px;
position: absolute;
color: grey;
font-size: 15px;
}
#savebutton {
left:50px;
padding-top:20px;
}
li:hover{
background-color:#FFC106;
}
#licensepage {
padding-left:50px;
}
#licenseCode {
width:250px;
}
#savelayoutdiv {
position: absolute;
padding-left: 20px;
padding-right: 20px;
top: 60px;
left: 690px;
#background-color:grey;
#width:100px;
#border-radius:25px;
}
Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 15 KiB

-27
View File
@@ -1,27 +0,0 @@
<svg focusable="false" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" viewBox="0 0 238 90" xml:space="preserve">
<g>
<path d="m98.87496 15.58887 11.51463 0 .13725.13751 0 50.03436-.13725.13713-11.51463 0c-.13713 0-.13713-.13713-.13713-.13713l0-50.03436c0 0 0-.13751.13713-.13751"/>
<path d="m95.03658 15.58887c0 0 .13725.13751 0 .27376l-15.21574 24.67537c-.13725.13675-.13725.41113 0 .68513l15.353 24.40038c.13675.13724 0 .27437 0 .27437l-14.25637 0c-.13713 0-.27438-.13713-.41113-.13713l-9.1845-15.07912c-.13725-.13725-.13725-.13725-.2745 0l-8.63576 14.94188c-.13662.13724-.27387.27437-.41112.27437l-13.29638 0c-.27438 0-.27438-.13713-.13725-.13713l15.627-25.90875c.27438-.27312.27438-.54811 0-.82187l-13.708-23.1675c-.13725-.13625 0-.27376 0-.27376l13.84525 0c.13713 0 .27388.13751.27388.27376l8.36187 13.9825c.13712.1375.13712.1375.27388 0l8.63625-13.9825c0-.13625.13725-.27376.27438-.27376l12.88525 0"/>
<path d="m193.45934 1.33263 41.39876 64.56525-35.91498 0-13.57002-21.11024-1.64502 0-.95998-1.50838-16.175 0 26.86624-41.94663" fill="#f7e109"/>
<path d="m190.85559 41.22313 15.90125 24.67474-50.58249 0 15.90126-24.67474 18.78 0" fill="#231f20"/>
<path d="m186.74309 41.22313 15.90126 24.67474-50.5825 0 15.90123-24.67474 18.78001 0" fill="#c93437"/>
<path d="m44.1802 15.5889-10.6924 0c-.1372 0-.2745.1375-.2745.2737l-32.2133 49.8981c0 0 0 .13721.13721.13721l13.02249 0c.1366 0 .2739 0 .2739-.13721l4.3867-6.8544c.1372 0 .1372-.1368.2744-.1368l13.708 0c.1367 0 .1367.1368.1367.1368l0 6.7172c0 .1372 0 .27441.1373.27441l11.2406 0 .1373-.13721 0-49.8981c0-.1362-.1373-.2737-.2744-.2737l0 0zm-11.2407 33.311c0 .1372 0 .1372 0 .1372l-8.4985 0c-.1373 0-.1373 0-.1373-.1372l9.0469-14.3935 0 0-.4111 14.3935"/>
<path d="m117.24371 65.89787 15.21562 0c1.91875-.13713 3.83875-.41162 5.62126-.95987 6.98999-2.19289 10.69124-9.18464 10.69124-15.07863 0-9.4585-7.40251-12.748-16.175-16.44925-1.50874-.68625-3.42751-1.645-3.42751-3.70125 0-2.05626 2.05626-3.15375 4.25002-3.15375l11.92624 0c.13626 0 .13626 0 .13626-.13626l0-10.83c0-.13625 0-.13625-.13626-.13625l-12.47499 0c-10.41749 0-16.58638 6.16876-16.58638 14.80376 0 7.53999 4.79788 11.24112 11.78889 14.11963 4.935 1.91887 8.08748 2.74161 8.08748 6.71724 0 2.05612-1.23375 4.11224-3.83876 4.11224 0 0-14.94099 0-15.07813 0l0 0c0 0 0 10.41801 0 10.55525 0 .13713.13712.13713 0 .13713"/>
<path d="m155.21434 15.31512c-2.33 0-4.1125 1.91875-4.1125 4.25 0 2.19374 1.7825 4.1125 4.1125 4.1125 2.33 0 4.25-1.91876 4.25-4.1125 0-2.33125-1.92-4.25-4.25-4.25zm0 7.95c-2.05626 0-3.70126-1.64374-3.70126-3.7 0-2.19376 1.645-3.83875 3.70126-3.83875 2.19374 0 3.83875 1.64499 3.83875 3.83875 0 2.05626-1.64499 3.7-3.83875 3.7"/>
<path d="m157.27058 21.89513-.95877-2.19376c.54752-.13625.82251-.685.82251-1.23375 0-.41125-.1375-.82249-.54875-1.09625-.27373-.27374-.68498-.27374-1.09624-.27374l-1.7825 0 0 4.7975.54875 0 0-2.05626 1.37 0 .96001 2.05626.685 0zm-3.01501-2.60501 0-1.78123 1.23375 0c.27376 0 .54875 0 .68501.27374.27374.13625.41124.27374.41124.685 0 .13751-.1375.41125-.27376.54875-.27374.27374-.54874.27374-.82249.27374l-1.23375 0"/>
<path d="m11.14359 84.5405c-1.37063.68501-2.46683.9595-3.97513.9595-3.9751 0-5.89405-2.46774-5.89405-4.93463 0-2.605 2.19336-5.07225 6.03125-5.07225 1.50781 0 2.74117.27388 3.70118.82275l0 2.19337c-1.09663-.54887-2.19336-.9595-3.42676-.9595-2.19335 0-3.70165 1.23337-3.70165 3.01563 0 1.6445 1.5083 2.87851 3.56445 2.87851 1.3706 0 2.19334-.27451 3.70071-.9595l0 2.05611"/>
<path d="m25.53759 85.5c-3.70162 0-5.75775-2.46774-5.75775-4.93463 0-2.46774 2.05612-5.07225 5.75775-5.07225 3.83788 0 5.75688 2.74174 5.75688 5.07225 0 2.46689-2.05613 4.93463-5.75688 4.93463zm0-7.95026c-1.91937 0-3.15325 1.23337-3.15325 3.01563 0 1.78175 1.23388 2.87851 3.15325 2.87851 1.919 0 3.15288-1.09676 3.15288-2.87851 0-1.78226-1.23388-3.01563-3.15288-3.01563"/>
<path d="m48.70409 75.63037 2.05612 0 0 9.73238-2.46775 0 0-6.03125-2.74163 3.01563-.274 0-2.74162-3.01563 0 6.03125-2.46738 0 0-9.73238 2.05625 0 3.29 3.70113 3.29-3.70113"/>
<path d="m69.26559 75.63037 2.19337 0 0 9.73238-2.46775 0 0-6.03125-2.74125 3.01563-.41163 0-2.74112-3.01563 0 6.03125-2.46788 0 0-9.73238 2.19337 0 3.29013 3.70113 3.15275-3.70113"/>
<path d="m90.65033 75.63037 0 5.62012c0 3.15276-2.33049 4.24951-5.07224 4.24951-2.87888 0-4.93501-1.23387-4.93501-4.24951l0-5.62012 2.46776 0 0 5.62012c0 1.371 1.09662 2.19339 2.46725 2.19339 1.37062 0 2.60449-.54839 2.60449-2.33063l0-5.48288 2.46774 0"/>
<path d="m109.97846 85.36275-2.05663 0-5.61964-6.1685 0 6.1685-2.46774 0 0-9.73238 2.33064 0 5.34612 6.03175 0-6.03175 2.46725 0 0 9.73238"/>
<path d="m119.57371 85.36275 2.46778 0 0-9.73241-2.46778 0 0 9.73241z"/>
<path d="m140.13684 84.5405c-1.37126.68501-2.46875.9595-3.97626.9595-3.83876 0-5.89499-2.46774-5.89499-4.93463 0-2.605 2.19374-5.07225 6.03249-5.07225 1.50751 0 2.74126.27388 3.70125.82275l0 2.19337c-1.09749-.54887-2.19374-.9595-3.42749-.9595-2.19376 0-3.70125 1.23337-3.70125 3.01563 0 1.6445 1.50749 2.87851 3.56375 2.87851 1.37125 0 2.19374-.27451 3.7025-.9595l0 2.05611"/>
<path d="m158.09435 85.36275-2.60501 0-.82248-1.91887-4.52376 0-.82248 1.91887-2.60501 0 3.97623-9.73238 3.015 0 4.38751 9.73238zm-5.89499-7.40237-1.37126 3.83838 3.01625 0-1.64499-3.83838"/>
<path d="m172.76184 77.41263-3.56502 0 0 7.95012-2.60373 0 0-7.95012-3.56502 0 0-1.78226 9.73375 0 0 1.78226"/>
<path d="m180.4381 85.36275 2.4673 0 0-9.73241-2.4673 0 0 9.73241z"/>
<path d="m196.33934 85.5c-3.70125 0-5.75751-2.46774-5.75751-4.93463 0-2.46774 1.91875-5.07225 5.75751-5.07225 3.70125 0 5.75624 2.74174 5.75624 5.07225 0 2.46689-2.1925 4.93463-5.75624 4.93463zm0-7.95026c-1.92 0-3.15375 1.23337-3.15375 3.01563 0 1.78175 1.23375 2.87851 3.15375 2.87851 1.91875 0 3.1525-1.09676 3.1525-2.87851 0-1.78226-1.23375-3.01563-3.1525-3.01563"/>
<path d="m219.64183 85.36275-2.05623 0-5.62001-6.1685 0 6.1685-2.4675 0 0-9.73238 2.33 0 5.34624 6.03175 0-6.03175 2.4675 0 0 9.73238"/>
<path d="m234.30934 78.23486c-1.50751-.68512-2.33-.9595-3.28876-.9595-.82376 0-1.37123.41113-1.37123.82225 0 1.50824 5.07123 1.09662 5.07123 4.52386 0 1.78175-1.64499 2.87851-3.83748 2.87851-1.78252 0-2.60501-.41113-3.70128-.9595l0-2.05612c1.50752.9595 2.33002 1.23387 3.42751 1.23387.95876 0 1.50752-.27437 1.50752-.82275 0-1.645-5.07253-1.09674-5.07253-4.52351 0-1.78212 1.50876-2.87888 3.83878-2.87888 1.09624 0 2.05623.27388 3.42624.82275l0 1.91899"/>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 6.4 KiB

-40
View File
@@ -1,40 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- BUG: Firefox will not animate SVG embedded as background images. [https://bugzilla.mozilla.org/show_bug.cgi?id=908634] -->
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 234.7 235.6" enable-background="new 0 0 234.7 235.6" xml:space="preserve">
<style>
/* <![CDATA[ */
@-webkit-keyframes spinner-fade {0% {opacity: 1 } 80% {opacity: 0 } 100% {opacity: 0 } }
@keyframes spinner-fade {0% {opacity: 1 } 80% {opacity: 0 } 100% {opacity: 0 } }
g.spinner path {opacity: 0; -webkit-animation: spinner-fade 0.75s linear infinite; animation: spinner-fade 0.75s linear infinite;}
g.spinner path:nth-of-type(1) {-webkit-animation-delay: -0.25s; animation-delay: -0.25s; }
g.spinner path:nth-of-type(2) {-webkit-animation-delay: -0.1875s; animation-delay: -0.1875s; }
g.spinner path:nth-of-type(3) {-webkit-animation-delay: -0.125s; animation-delay: -0.125s; }
g.spinner path:nth-of-type(4) {-webkit-animation-delay: -0.0625s; animation-delay: -0.0625s; }
g.spinner path:nth-of-type(5) {-webkit-animation-delay: 0s; animation-delay: 0s; }
g.spinner path:nth-of-type(6) {-webkit-animation-delay: 0.0625s; animation-delay: 0.0625s; }
g.spinner path:nth-of-type(7) {-webkit-animation-delay: 0.125s; animation-delay: 0.125s; }
g.spinner path:nth-of-type(8) {-webkit-animation-delay: 0.1875s; animation-delay: 0.1875s; }
g.spinner path:nth-of-type(9) {-webkit-animation-delay: 0.25s; animation-delay: 0.25s; }
g.spinner path:nth-of-type(10) {-webkit-animation-delay: 0.3125s; animation-delay: 0.3125s; }
g.spinner path:nth-of-type(11) {-webkit-animation-delay: -0.375s; animation-delay: -0.375s; }
g.spinner path:nth-of-type(12) {-webkit-animation-delay: -0.3125s; animation-delay: -0.3125s; }
/* ]]> */
</style>
<g class="spinner">
<path d="M128.3,10.7c0,0-0.3-10.7-11-10.7s-11,10.7-11,10.7l0,0v0v42.7v0l0,0c0,0,0.3,10.7,11,10.7s11-10.7,11-10.7 l0,0v0V10.7L128.3,10.7L128.3,10.7z" />
<path d="M140.3,56.5c0,0-5.6,9.2,3.7,14.6c9.2,5.3,14.3-3.9,14.3-3.9l0,0v0l21.4-37l0,0l0,0c0,0,5.3-9.2-3.9-14.6 s-14.5,3.9-14.6,3.9l0,0l0.2,0L140.3,56.5L140.3,56.5L140.3,56.5z" />
<path d="M167.4,76.3c0,0-9.2,5.1-3.9,14.3c5.3,9.2,14.6,3.7,14.6,3.7l0,0h0L215,73.1l0,0.1l0,0c0,0,9.2-5.3,3.9-14.5 s-14.6-3.9-14.6-3.9l0,0l0,0.1L167.4,76.3L167.4,76.3L167.4,76.3z" />
<path d="M224,128.3c0,0,10.7-0.3,10.7-11s-10.7-11-10.7-11l0,0h0h-42.7h0l0,0c0,0-10.7,0.3-10.7,11s10.7,11,10.7,11 l0,0h0H224L224,128.3L224,128.3z" />
<path d="M203.8,180.3c0,0,9.2,5.6,14.6-3.6c5.4-9.2-3.8-14.4-3.8-14.4l0,0h0l-36.8-21.7l0,0l0,0 c0,0-9.2-5.4-14.6,3.8c-5.4,9.2,3.8,14.6,3.8,14.6l0,0l0-0.2L203.8,180.3L203.8,180.3L203.8,180.3z" />
<path d="M160.3,215.5c0,0,5.4,9.3,14.7,4.1c9.3-5.2,4.3-14.5,4.3-14.5l0,0v0l-21.1-37.2l-0.1,0l0,0 c0,0-5.3-9.3-14.6-4.1c-9.3,5.2-4.1,14.5-4.1,14.5l0,0l0,0L160.3,215.5L160.3,215.5L160.3,215.5z"/>
<path d="M128.3,181.3c0,0-0.3-10.7-11-10.7s-11,10.7-11,10.7l0,0v0V224v0l0,0c0,0,0.3,10.7,11,10.7s11-10.7,11-10.7 l0,0v0V181.3L128.3,181.3L128.3,181.3z"/>
<path d="M55.3,204.5c0,0-5.6,9.2,3.7,14.6c9.2,5.3,14.3-3.9,14.3-3.9l0,0v0l21.3-37l0,0l0,0c0,0,5.3-9.2-3.9-14.6 s-14.6,3.9-14.6,3.9l0,0l0.2,0L55.3,204.5L55.3,204.5L55.3,204.5z"/>
<path d="M19.6,161.3c0,0-9.2,5.6-3.9,14.8s14.6,4.2,14.6,4.2l0,0h0l36.9-21.5l0-0.1l0,0c0,0,9.2-5.4,3.9-14.6 c-5.3-9.2-14.6-3.9-14.6-3.9l0,0l0-0.1L19.6,161.3L19.6,161.3L19.6,161.3z"/>
<path d="M53.3,128.3c0,0,10.7-0.3,10.7-11s-10.7-11-10.7-11l0,0h0H10.7h0l0,0c0,0-10.7,0.3-10.7,11s10.7,11,10.7,11 l0,0h0H53.3L53.3,128.3L53.3,128.3z"/>
<path d="M56.8,94.3c0,0,9.2,5.1,14.6-4.1c5.4-9.2-3.8-14.9-3.8-14.9l0,0h0L30.8,53.8l0,0.1l0,0c0,0-9.2-5.4-14.6,3.8 S20,72.4,20,72.4l0,0l0,0.2L56.8,94.3L56.8,94.3L56.8,94.3z"/>
<path d="M76.3,66.8c0,0,5.4,9.3,14.7,4.1s4.3-14.5,4.3-14.5l0,0v0l-21-37.2l0,0l0,0c0,0-5.3-9.3-14.5-4.1 s-4.1,14.5-4.1,14.5l0,0l-0.2,0L76.3,66.8L76.3,66.8L76.3,66.8z"/>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 4.0 KiB

-91
View File
@@ -1,91 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg version="1.2" width="20.64mm" height="9mm" viewBox="0 0 2064 900" preserveAspectRatio="xMidYMid" fill-rule="evenodd" stroke-width="28.222" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" xmlns:ooo="http://xml.openoffice.org/svg/export" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:presentation="http://sun.com/xmlns/staroffice/presentation" xmlns:smil="http://www.w3.org/2001/SMIL20/" xmlns:anim="urn:oasis:names:tc:opendocument:xmlns:animation:1.0" xml:space="preserve">
<defs class="ClipPathGroup">
<clipPath id="presentation_clip_path" clipPathUnits="userSpaceOnUse">
<rect x="0" y="0" width="2064" height="900"/>
</clipPath>
<clipPath id="presentation_clip_path_shrink" clipPathUnits="userSpaceOnUse">
<rect x="2" y="0" width="2060" height="899"/>
</clipPath>
</defs>
<defs class="TextShapeIndex">
<g ooo:slide="id1" ooo:id-list="id3"/>
</defs>
<defs class="EmbeddedBulletChars">
<g id="bullet-char-template-57356" transform="scale(0.00048828125,-0.00048828125)">
<path d="M 580,1141 L 1163,571 580,0 -4,571 580,1141 Z"/>
</g>
<g id="bullet-char-template-57354" transform="scale(0.00048828125,-0.00048828125)">
<path d="M 8,1128 L 1137,1128 1137,0 8,0 8,1128 Z"/>
</g>
<g id="bullet-char-template-10146" transform="scale(0.00048828125,-0.00048828125)">
<path d="M 174,0 L 602,739 174,1481 1456,739 174,0 Z M 1358,739 L 309,1346 659,739 1358,739 Z"/>
</g>
<g id="bullet-char-template-10132" transform="scale(0.00048828125,-0.00048828125)">
<path d="M 2015,739 L 1276,0 717,0 1260,543 174,543 174,936 1260,936 717,1481 1274,1481 2015,739 Z"/>
</g>
<g id="bullet-char-template-10007" transform="scale(0.00048828125,-0.00048828125)">
<path d="M 0,-2 C -7,14 -16,27 -25,37 L 356,567 C 262,823 215,952 215,954 215,979 228,992 255,992 264,992 276,990 289,987 310,991 331,999 354,1012 L 381,999 492,748 772,1049 836,1024 860,1049 C 881,1039 901,1025 922,1006 886,937 835,863 770,784 769,783 710,716 594,584 L 774,223 C 774,196 753,168 711,139 L 727,119 C 717,90 699,76 672,76 641,76 570,178 457,381 L 164,-76 C 142,-110 111,-127 72,-127 30,-127 9,-110 8,-76 1,-67 -2,-52 -2,-32 -2,-23 -1,-13 0,-2 Z"/>
</g>
<g id="bullet-char-template-10004" transform="scale(0.00048828125,-0.00048828125)">
<path d="M 285,-33 C 182,-33 111,30 74,156 52,228 41,333 41,471 41,549 55,616 82,672 116,743 169,778 240,778 293,778 328,747 346,684 L 369,508 C 377,444 397,411 428,410 L 1163,1116 C 1174,1127 1196,1133 1229,1133 1271,1133 1292,1118 1292,1087 L 1292,965 C 1292,929 1282,901 1262,881 L 442,47 C 390,-6 338,-33 285,-33 Z"/>
</g>
<g id="bullet-char-template-9679" transform="scale(0.00048828125,-0.00048828125)">
<path d="M 813,0 C 632,0 489,54 383,161 276,268 223,411 223,592 223,773 276,916 383,1023 489,1130 632,1184 813,1184 992,1184 1136,1130 1245,1023 1353,916 1407,772 1407,592 1407,412 1353,268 1245,161 1136,54 992,0 813,0 Z"/>
</g>
<g id="bullet-char-template-8226" transform="scale(0.00048828125,-0.00048828125)">
<path d="M 346,457 C 273,457 209,483 155,535 101,586 74,649 74,723 74,796 101,859 155,911 209,963 273,989 346,989 419,989 480,963 531,910 582,859 608,796 608,723 608,648 583,586 532,535 482,483 420,457 346,457 Z"/>
</g>
<g id="bullet-char-template-8211" transform="scale(0.00048828125,-0.00048828125)">
<path d="M -4,459 L 1135,459 1135,606 -4,606 -4,459 Z"/>
</g>
<g id="bullet-char-template-61548" transform="scale(0.00048828125,-0.00048828125)">
<path d="M 173,740 C 173,903 231,1043 346,1159 462,1274 601,1332 765,1332 928,1332 1067,1274 1183,1159 1299,1043 1357,903 1357,740 1357,577 1299,437 1183,322 1067,206 928,148 765,148 601,148 462,206 346,322 231,437 173,577 173,740 Z"/>
</g>
</defs>
<g>
<g id="id2" class="Master_Slide">
<g id="bg-id2" class="Background"/>
<g id="bo-id2" class="BackgroundObjects"/>
</g>
</g>
<g class="SlideGroup">
<g>
<g id="container-id1">
<g id="id1" class="Slide" clip-path="url(#presentation_clip_path)">
<g class="Page">
<g class="Graphic">
<g id="id3">
<rect class="BoundingBox" stroke="none" fill="none" x="0" y="0" width="2064" height="900"/>
<path fill="rgb(0,0,0)" stroke="none" d="M 958,198 L 959,199 959,627 958,628 859,628 C 858,628 858,627 858,627 L 858,199 C 858,199 858,198 859,198 L 958,198 Z"/>
<path fill="rgb(0,0,0)" stroke="none" d="M 826,200 L 696,411 C 695,412 695,415 696,417 L 828,626 C 829,627 828,628 828,628 L 706,628 C 704,628 703,627 702,627 L 624,498 C 622,497 622,497 621,498 L 547,626 C 546,627 545,628 544,628 L 430,628 C 428,628 428,627 429,627 L 563,405 C 565,403 565,401 563,398 L 445,200 C 444,199 445,198 445,198 L 564,198 C 565,198 566,199 566,200 L 638,320 C 639,321 639,321 640,320 L 714,200 C 714,199 715,198 716,198 L 826,198 C 826,198 828,199 826,200 Z"/>
<path fill="rgb(247,225,9)" stroke="none" d="M 2023,628 L 1716,628 1599,448 1585,448 1577,435 1439,435 1669,76 2023,628 Z"/>
<path fill="rgb(35,31,32)" stroke="none" d="M 1782,628 L 1350,628 1486,417 1646,417 1782,628 Z"/>
<path fill="rgb(201,52,55)" stroke="none" d="M 1747,628 L 1314,628 1450,417 1611,417 1747,628 Z"/>
<path fill="rgb(0,0,0)" stroke="none" d="M 300,198 C 299,198 297,199 297,200 L 22,627 C 22,627 22,628 23,628 L 134,628 C 136,628 137,628 137,627 L 174,568 C 175,568 175,567 177,567 L 294,567 C 295,567 295,568 295,568 L 295,626 C 295,627 295,628 296,628 L 392,628 394,627 394,200 C 394,199 392,198 391,198 L 300,198 Z M 295,484 L 222,484 C 221,484 221,484 221,483 L 299,360 295,483 295,484 Z"/>
<path fill="rgb(0,0,0)" stroke="none" d="M 1016,628 L 1147,628 C 1163,627 1180,625 1195,620 1255,601 1286,541 1286,491 1286,410 1223,382 1148,350 1135,344 1119,336 1119,319 1119,301 1136,292 1155,292 L 1257,292 C 1258,292 1258,292 1258,291 L 1258,198 C 1258,197 1258,197 1257,197 L 1150,197 C 1061,197 1008,250 1008,323 1008,388 1049,420 1109,444 1151,461 1178,468 1178,502 1178,519 1168,537 1145,537 1145,537 1018,537 1016,537 L 1016,537 C 1016,537 1016,626 1016,627 1016,628 1018,628 1016,628 Z"/>
<path fill="rgb(0,0,0)" stroke="none" d="M 1341,196 C 1321,196 1306,212 1306,232 1306,251 1321,267 1341,267 1361,267 1378,251 1378,232 1378,212 1361,196 1341,196 Z M 1310,232 C 1310,213 1324,199 1341,199 1360,199 1374,213 1374,232 1374,250 1360,264 1341,264 1324,264 1310,250 1310,232 Z"/>
<path fill="rgb(0,0,0)" stroke="none" d="M 1351,233 C 1355,232 1358,227 1358,223 1358,219 1357,215 1353,213 1351,211 1347,211 1344,211 L 1328,211 1328,252 1333,252 1333,234 1345,234 1353,252 1359,252 1351,233 Z M 1333,214 L 1344,214 C 1346,214 1348,214 1350,217 1352,218 1353,219 1353,223 1353,224 1352,226 1351,227 1348,230 1346,230 1344,230 L 1333,230 1333,214 Z"/>
<path fill="rgb(0,0,0)" stroke="none" d="M 109,788 C 97,794 87,796 75,796 41,796 24,775 24,754 24,731 43,710 76,710 89,710 99,713 107,717 L 107,736 C 98,731 89,728 78,728 59,728 46,738 46,754 46,768 59,778 77,778 89,778 96,776 109,770 L 109,788 Z"/>
<path fill="rgb(0,0,0)" stroke="none" d="M 232,796 C 200,796 182,775 182,754 182,733 200,710 232,710 265,710 281,734 281,754 281,775 263,796 232,796 Z M 205,754 C 205,769 215,778 232,778 248,778 259,769 259,754 259,738 248,728 232,728 215,728 205,738 205,754 Z"/>
<path fill="rgb(0,0,0)" stroke="none" d="M 430,712 L 448,712 448,795 426,795 426,743 403,769 401,769 377,743 377,795 356,795 356,712 374,712 402,743 430,712 Z"/>
<path fill="rgb(0,0,0)" stroke="none" d="M 606,712 L 625,712 625,795 604,795 604,743 580,769 577,769 553,743 553,795 532,795 532,712 551,712 579,743 606,712 Z"/>
<path fill="rgb(0,0,0)" stroke="none" d="M 789,712 L 789,760 C 789,787 769,796 746,796 721,796 703,785 703,760 L 703,712 724,712 724,760 C 724,771 734,778 746,778 757,778 768,774 768,758 L 768,712 789,712 Z"/>
<path fill="rgb(0,0,0)" stroke="none" d="M 937,795 L 889,742 889,795 868,795 868,712 887,712 933,763 933,712 954,712 954,795 937,795 Z"/>
<path fill="rgb(0,0,0)" stroke="none" d="M 1036,795 L 1058,795 1058,712 1036,712 1036,795 1036,795 Z"/>
<path fill="rgb(0,0,0)" stroke="none" d="M 1212,788 C 1201,794 1191,796 1178,796 1145,796 1128,775 1128,754 1128,731 1147,710 1180,710 1192,710 1203,713 1211,717 L 1211,736 C 1202,731 1192,728 1182,728 1163,728 1150,738 1150,754 1150,768 1163,778 1181,778 1192,778 1199,776 1212,770 L 1212,788 Z"/>
<path fill="rgb(0,0,0)" stroke="none" d="M 1344,795 L 1337,778 1298,778 1291,795 1269,795 1303,712 1328,712 1366,795 1344,795 Z M 1304,764 L 1330,764 1316,731 1304,764 Z"/>
<path fill="rgb(0,0,0)" stroke="none" d="M 1461,727 L 1461,795 1439,795 1439,727 1408,727 1408,712 1492,712 1492,727 1461,727 Z"/>
<path fill="rgb(0,0,0)" stroke="none" d="M 1557,795 L 1578,795 1578,712 1557,712 1557,795 1557,795 Z"/>
<path fill="rgb(0,0,0)" stroke="none" d="M 1693,796 C 1662,796 1644,775 1644,754 1644,733 1660,710 1693,710 1725,710 1743,734 1743,754 1743,775 1724,796 1693,796 Z M 1666,754 C 1666,769 1677,778 1693,778 1710,778 1720,769 1720,754 1720,738 1710,728 1693,728 1677,728 1666,738 1666,754 Z"/>
<path fill="rgb(0,0,0)" stroke="none" d="M 1875,795 L 1827,742 1827,795 1806,795 1806,712 1826,712 1872,763 1872,712 1893,712 1893,795 1875,795 Z"/>
<path fill="rgb(0,0,0)" stroke="none" d="M 2018,734 C 2005,728 1998,726 1990,726 1983,726 1978,729 1978,733 1978,746 2022,742 2022,771 2022,787 2008,796 1989,796 1974,796 1967,792 1957,788 L 1957,770 C 1970,778 1977,781 1987,781 1995,781 1999,778 1999,774 1999,760 1956,764 1956,735 1956,720 1969,710 1989,710 1998,710 2006,713 2018,717 L 2018,734 Z"/>
</g>
</g>
</g>
</g>
</g>
</g>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 9.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 422 B

-1
View File
@@ -1 +0,0 @@
<!doctype html><html lang="en"><head><meta charset="utf-8"/><link rel="icon" href="./favicon.ico"/><meta name="viewport" content="width=device-width,initial-scale=1"/><meta name="theme-color" content="#000000"/><meta name="description" content="Web site created using create-react-app"/><link rel="manifest" href="./manifest.json"/><title>Tailscale VPN</title><link href="./static/css/main.944c9394.chunk.css" rel="stylesheet"></head><body><noscript>You need to enable JavaScript to run this app.</noscript><div id="root"></div><script>!function(e){function r(r){for(var n,l,i=r[0],f=r[1],a=r[2],p=0,s=[];p<i.length;p++)l=i[p],Object.prototype.hasOwnProperty.call(o,l)&&o[l]&&s.push(o[l][0]),o[l]=0;for(n in f)Object.prototype.hasOwnProperty.call(f,n)&&(e[n]=f[n]);for(c&&c(r);s.length;)s.shift()();return u.push.apply(u,a||[]),t()}function t(){for(var e,r=0;r<u.length;r++){for(var t=u[r],n=!0,i=1;i<t.length;i++){var f=t[i];0!==o[f]&&(n=!1)}n&&(u.splice(r--,1),e=l(l.s=t[0]))}return e}var n={},o={1:0},u=[];function l(r){if(n[r])return n[r].exports;var t=n[r]={i:r,l:!1,exports:{}};return e[r].call(t.exports,t,t.exports,l),t.l=!0,t.exports}l.m=e,l.c=n,l.d=function(e,r,t){l.o(e,r)||Object.defineProperty(e,r,{enumerable:!0,get:t})},l.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},l.t=function(e,r){if(1&r&&(e=l(e)),8&r)return e;if(4&r&&"object"==typeof e&&e&&e.__esModule)return e;var t=Object.create(null);if(l.r(t),Object.defineProperty(t,"default",{enumerable:!0,value:e}),2&r&&"string"!=typeof e)for(var n in e)l.d(t,n,function(r){return e[r]}.bind(null,n));return t},l.n=function(e){var r=e&&e.__esModule?function(){return e.default}:function(){return e};return l.d(r,"a",r),r},l.o=function(e,r){return Object.prototype.hasOwnProperty.call(e,r)},l.p="./";var i=this.webpackJsonplicense=this.webpackJsonplicense||[],f=i.push.bind(i);i.push=r,i=i.slice();for(var a=0;a<i.length;a++)r(i[a]);var c=f;t()}([])</script><script src="./static/js/2.86909d39.chunk.js"></script><script src="./static/js/main.b598e911.chunk.js"></script></body></html>
-19
View File
@@ -1,19 +0,0 @@
<!DOCTYPE html>
<html>
<body>
<head>
<h1 style="color:red;">Scroll to the bottom to find authentication URL</h1>
<script>
function refreshIFrame() {
var x = document.getElementById("*Your_iframe_id*");
x.contentWindow.location.reload();
var t = setTimeout(refreshIFrame, 5000);
}
</script>
</head>
<body onload="refreshIFrame()">
<iframe id="*Your_iframe_id*" src= "/axis-cgi/admin/systemlog.cgi?appname=tailscale_vpn" style="height:600px;width:100%;border: none;" ></iframe>
</body>
</body>
</html>
-25
View File
@@ -1,25 +0,0 @@
{
"short_name": "React App",
"name": "Create React App Sample",
"icons": [
{
"src": "favicon.ico",
"sizes": "64x64 32x32 24x24 16x16",
"type": "image/x-icon"
},
{
"src": "logo192.png",
"type": "image/png",
"sizes": "192x192"
},
{
"src": "logo512.png",
"type": "image/png",
"sizes": "512x512"
}
],
"start_url": ".",
"display": "standalone",
"theme_color": "#000000",
"background_color": "#ffffff"
}

Some files were not shown because too many files have changed in this diff Show More