From bbdad8556861c60ae1f526f63de9c5857c4ad547 Mon Sep 17 00:00:00 2001 From: Ivan Tashkinov Date: Fri, 8 May 2020 23:06:47 +0300 Subject: [PATCH 001/102] Initial implementation of image preview proxy. Media proxy tests refactoring. --- config/config.exs | 5 + lib/pleroma/helpers/mogrify_helper.ex | 25 ++++ .../web/mastodon_api/views/status_view.ex | 3 +- lib/pleroma/web/media_proxy/media_proxy.ex | 53 ++++++- .../web/media_proxy/media_proxy_controller.ex | 78 ++++++++-- lib/pleroma/web/router.ex | 2 + test/web/media_proxy/media_proxy_test.exs | 133 +++++++----------- 7 files changed, 198 insertions(+), 101 deletions(-) create mode 100644 lib/pleroma/helpers/mogrify_helper.ex diff --git a/config/config.exs b/config/config.exs index e703c1632..526901f83 100644 --- a/config/config.exs +++ b/config/config.exs @@ -388,6 +388,11 @@ config :pleroma, :media_proxy, ], whitelist: [] +config :pleroma, :media_preview_proxy, + enabled: false, + limit_dimensions: "400x200", + max_body_length: 25 * 1_048_576 + config :pleroma, :chat, enabled: true config :phoenix, :format_encoders, json: Jason diff --git a/lib/pleroma/helpers/mogrify_helper.ex b/lib/pleroma/helpers/mogrify_helper.ex new file mode 100644 index 000000000..67edb35c3 --- /dev/null +++ b/lib/pleroma/helpers/mogrify_helper.ex @@ -0,0 +1,25 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2020 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + +defmodule Pleroma.Helpers.MogrifyHelper do + @moduledoc """ + Handles common Mogrify operations. + """ + + @spec store_as_temporary_file(String.t(), binary()) :: {:ok, String.t()} | {:error, atom()} + @doc "Stores binary content fetched from specified URL as a temporary file." + def store_as_temporary_file(url, body) do + path = Mogrify.temporary_path_for(%{path: url}) + with :ok <- File.write(path, body), do: {:ok, path} + end + + @spec store_as_temporary_file(String.t(), String.t()) :: Mogrify.Image.t() | any() + @doc "Modifies file at specified path by resizing to specified limit dimensions." + def in_place_resize_to_limit(path, resize_dimensions) do + path + |> Mogrify.open() + |> Mogrify.resize_to_limit(resize_dimensions) + |> Mogrify.save(in_place: true) + end +end diff --git a/lib/pleroma/web/mastodon_api/views/status_view.ex b/lib/pleroma/web/mastodon_api/views/status_view.ex index 24167f66f..2a206f743 100644 --- a/lib/pleroma/web/mastodon_api/views/status_view.ex +++ b/lib/pleroma/web/mastodon_api/views/status_view.ex @@ -419,6 +419,7 @@ defmodule Pleroma.Web.MastodonAPI.StatusView do [attachment_url | _] = attachment["url"] media_type = attachment_url["mediaType"] || attachment_url["mimeType"] || "image" href = attachment_url["href"] |> MediaProxy.url() + href_preview = attachment_url["href"] |> MediaProxy.preview_url() type = cond do @@ -434,7 +435,7 @@ defmodule Pleroma.Web.MastodonAPI.StatusView do id: to_string(attachment["id"] || hash_id), url: href, remote_url: href, - preview_url: href, + preview_url: href_preview, text_url: href, type: type, description: attachment["name"], diff --git a/lib/pleroma/web/media_proxy/media_proxy.ex b/lib/pleroma/web/media_proxy/media_proxy.ex index b2b524524..f4791c758 100644 --- a/lib/pleroma/web/media_proxy/media_proxy.ex +++ b/lib/pleroma/web/media_proxy/media_proxy.ex @@ -20,6 +20,14 @@ defmodule Pleroma.Web.MediaProxy do end end + def preview_url(url) do + if disabled?() or whitelisted?(url) do + url + else + encode_preview_url(url) + end + end + defp disabled?, do: !Config.get([:media_proxy, :enabled], false) defp local?(url), do: String.starts_with?(url, Pleroma.Web.base_url()) @@ -43,17 +51,29 @@ defmodule Pleroma.Web.MediaProxy do end) end - def encode_url(url) do + defp base64_sig64(url) do base64 = Base.url_encode64(url, @base64_opts) sig64 = base64 - |> signed_url + |> signed_url() |> Base.url_encode64(@base64_opts) + {base64, sig64} + end + + def encode_url(url) do + {base64, sig64} = base64_sig64(url) + build_url(sig64, base64, filename(url)) end + def encode_preview_url(url) do + {base64, sig64} = base64_sig64(url) + + build_preview_url(sig64, base64, filename(url)) + end + def decode_url(sig, url) do with {:ok, sig} <- Base.url_decode64(sig, @base64_opts), signature when signature == sig <- signed_url(url) do @@ -71,10 +91,10 @@ defmodule Pleroma.Web.MediaProxy do if path = URI.parse(url_or_path).path, do: Path.basename(path) end - def build_url(sig_base64, url_base64, filename \\ nil) do + defp proxy_url(path, sig_base64, url_base64, filename) do [ Pleroma.Config.get([:media_proxy, :base_url], Web.base_url()), - "proxy", + path, sig_base64, url_base64, filename @@ -82,4 +102,29 @@ defmodule Pleroma.Web.MediaProxy do |> Enum.filter(& &1) |> Path.join() end + + def build_url(sig_base64, url_base64, filename \\ nil) do + proxy_url("proxy", sig_base64, url_base64, filename) + end + + def build_preview_url(sig_base64, url_base64, filename \\ nil) do + proxy_url("proxy/preview", sig_base64, url_base64, filename) + end + + def filename_matches(%{"filename" => _} = _, path, url) do + filename = filename(url) + + if filename && not basename_matches?(path, filename) do + {:wrong_filename, filename} + else + :ok + end + end + + def filename_matches(_, _, _), do: :ok + + defp basename_matches?(path, filename) do + basename = Path.basename(path) + basename == filename or URI.decode(basename) == filename or URI.encode(basename) == filename + end end diff --git a/lib/pleroma/web/media_proxy/media_proxy_controller.ex b/lib/pleroma/web/media_proxy/media_proxy_controller.ex index 4657a4383..fe3f61c18 100644 --- a/lib/pleroma/web/media_proxy/media_proxy_controller.ex +++ b/lib/pleroma/web/media_proxy/media_proxy_controller.ex @@ -5,19 +5,21 @@ defmodule Pleroma.Web.MediaProxy.MediaProxyController do use Pleroma.Web, :controller + alias Pleroma.Config + alias Pleroma.Helpers.MogrifyHelper alias Pleroma.ReverseProxy alias Pleroma.Web.MediaProxy @default_proxy_opts [max_body_length: 25 * 1_048_576, http: [follow_redirect: true]] def remote(conn, %{"sig" => sig64, "url" => url64} = params) do - with config <- Pleroma.Config.get([:media_proxy], []), - true <- Keyword.get(config, :enabled, false), + with config <- Config.get([:media_proxy], []), + {_, true} <- {:enabled, Keyword.get(config, :enabled, false)}, {:ok, url} <- MediaProxy.decode_url(sig64, url64), - :ok <- filename_matches(params, conn.request_path, url) do + :ok <- MediaProxy.filename_matches(params, conn.request_path, url) do ReverseProxy.call(conn, url, Keyword.get(config, :proxy_opts, @default_proxy_opts)) else - false -> + {:enabled, false} -> send_resp(conn, 404, Plug.Conn.Status.reason_phrase(404)) {:error, :invalid_signature} -> @@ -28,20 +30,68 @@ defmodule Pleroma.Web.MediaProxy.MediaProxyController do end end - def filename_matches(%{"filename" => _} = _, path, url) do - filename = MediaProxy.filename(url) - - if filename && does_not_match(path, filename) do - {:wrong_filename, filename} + def preview(conn, %{"sig" => sig64, "url" => url64} = params) do + with {_, true} <- {:enabled, Config.get([:media_preview_proxy, :enabled], false)}, + {:ok, url} <- MediaProxy.decode_url(sig64, url64), + :ok <- MediaProxy.filename_matches(params, conn.request_path, url) do + handle_preview(conn, url) else - :ok + {:enabled, false} -> + send_resp(conn, 404, Plug.Conn.Status.reason_phrase(404)) + + {:error, :invalid_signature} -> + send_resp(conn, 403, Plug.Conn.Status.reason_phrase(403)) + + {:wrong_filename, filename} -> + redirect(conn, external: MediaProxy.build_preview_url(sig64, url64, filename)) end end - def filename_matches(_, _, _), do: :ok + defp handle_preview(conn, url) do + with {:ok, %{status: status} = head_response} when status in 200..299 <- Tesla.head(url), + {_, true} <- {:acceptable_content_length, acceptable_body_length?(head_response)} do + content_type = Tesla.get_header(head_response, "content-type") + handle_preview(content_type, conn, url) + else + {_, %{status: status}} -> + send_resp(conn, :failed_dependency, "Can't fetch HTTP headers (HTTP #{status}).") - defp does_not_match(path, filename) do - basename = Path.basename(path) - basename != filename and URI.decode(basename) != filename and URI.encode(basename) != filename + {:acceptable_content_length, false} -> + send_resp(conn, :unprocessable_entity, "Source file size exceeds limit.") + end + end + + defp handle_preview("image/" <> _, %{params: params} = conn, url) do + with {:ok, %{status: status, body: body}} when status in 200..299 <- Tesla.get(url), + {:ok, path} <- MogrifyHelper.store_as_temporary_file(url, body), + resize_dimensions <- + Map.get( + params, + "limit_dimensions", + Config.get([:media_preview_proxy, :limit_dimensions]) + ), + %Mogrify.Image{} <- MogrifyHelper.in_place_resize_to_limit(path, resize_dimensions) do + send_file(conn, 200, path) + else + {_, %{status: _}} -> + send_resp(conn, :failed_dependency, "Can't fetch the image.") + + _ -> + send_resp(conn, :failed_dependency, "Can't handle image preview.") + end + end + + defp handle_preview(content_type, conn, _url) do + send_resp(conn, :unprocessable_entity, "Unsupported content type: #{content_type}.") + end + + defp acceptable_body_length?(head_response) do + max_body_length = Config.get([:media_preview_proxy, :max_body_length], nil) + content_length = Tesla.get_header(head_response, "content-length") + content_length = with {int, _} <- Integer.parse(content_length), do: int + + content_length == :error or + max_body_length in [nil, :infinity] or + content_length <= max_body_length end end diff --git a/lib/pleroma/web/router.ex b/lib/pleroma/web/router.ex index 7a171f9fb..6fb47029a 100644 --- a/lib/pleroma/web/router.ex +++ b/lib/pleroma/web/router.ex @@ -663,6 +663,8 @@ defmodule Pleroma.Web.Router do end scope "/proxy/", Pleroma.Web.MediaProxy do + get("/preview/:sig/:url", MediaProxyController, :preview) + get("/preview/:sig/:url/:filename", MediaProxyController, :preview) get("/:sig/:url", MediaProxyController, :remote) get("/:sig/:url/:filename", MediaProxyController, :remote) end diff --git a/test/web/media_proxy/media_proxy_test.exs b/test/web/media_proxy/media_proxy_test.exs index 69c2d5dae..cad0acd30 100644 --- a/test/web/media_proxy/media_proxy_test.exs +++ b/test/web/media_proxy/media_proxy_test.exs @@ -5,42 +5,44 @@ defmodule Pleroma.Web.MediaProxyTest do use ExUnit.Case use Pleroma.Tests.Helpers - import Pleroma.Web.MediaProxy - alias Pleroma.Web.MediaProxy.MediaProxyController - setup do: clear_config([:media_proxy, :enabled]) - setup do: clear_config(Pleroma.Upload) + alias Pleroma.Config + alias Pleroma.Web.Endpoint + alias Pleroma.Web.MediaProxy + + defp decode_result(encoded) do + [_, "proxy", sig, base64 | _] = URI.parse(encoded).path |> String.split("/") + {:ok, decoded} = MediaProxy.decode_url(sig, base64) + decoded + end describe "when enabled" do - setup do - Pleroma.Config.put([:media_proxy, :enabled], true) - :ok - end + setup do: clear_config([:media_proxy, :enabled], true) test "ignores invalid url" do - assert url(nil) == nil - assert url("") == nil + assert MediaProxy.url(nil) == nil + assert MediaProxy.url("") == nil end test "ignores relative url" do - assert url("/local") == "/local" - assert url("/") == "/" + assert MediaProxy.url("/local") == "/local" + assert MediaProxy.url("/") == "/" end test "ignores local url" do - local_url = Pleroma.Web.Endpoint.url() <> "/hello" - local_root = Pleroma.Web.Endpoint.url() - assert url(local_url) == local_url - assert url(local_root) == local_root + local_url = Endpoint.url() <> "/hello" + local_root = Endpoint.url() + assert MediaProxy.url(local_url) == local_url + assert MediaProxy.url(local_root) == local_root end test "encodes and decodes URL" do url = "https://pleroma.soykaf.com/static/logo.png" - encoded = url(url) + encoded = MediaProxy.url(url) assert String.starts_with?( encoded, - Pleroma.Config.get([:media_proxy, :base_url], Pleroma.Web.base_url()) + Config.get([:media_proxy, :base_url], Pleroma.Web.base_url()) ) assert String.ends_with?(encoded, "/logo.png") @@ -50,62 +52,59 @@ defmodule Pleroma.Web.MediaProxyTest do test "encodes and decodes URL without a path" do url = "https://pleroma.soykaf.com" - encoded = url(url) + encoded = MediaProxy.url(url) assert decode_result(encoded) == url end test "encodes and decodes URL without an extension" do url = "https://pleroma.soykaf.com/path/" - encoded = url(url) + encoded = MediaProxy.url(url) assert String.ends_with?(encoded, "/path") assert decode_result(encoded) == url end test "encodes and decodes URL and ignores query params for the path" do url = "https://pleroma.soykaf.com/static/logo.png?93939393939&bunny=true" - encoded = url(url) + encoded = MediaProxy.url(url) assert String.ends_with?(encoded, "/logo.png") assert decode_result(encoded) == url end test "validates signature" do - secret_key_base = Pleroma.Config.get([Pleroma.Web.Endpoint, :secret_key_base]) + secret_key_base = Config.get([Endpoint, :secret_key_base]) + clear_config([Endpoint, :secret_key_base], secret_key_base) - on_exit(fn -> - Pleroma.Config.put([Pleroma.Web.Endpoint, :secret_key_base], secret_key_base) - end) + encoded = MediaProxy.url("https://pleroma.social") - encoded = url("https://pleroma.social") - - Pleroma.Config.put( - [Pleroma.Web.Endpoint, :secret_key_base], + Config.put( + [Endpoint, :secret_key_base], "00000000000000000000000000000000000000000000000" ) [_, "proxy", sig, base64 | _] = URI.parse(encoded).path |> String.split("/") - assert decode_url(sig, base64) == {:error, :invalid_signature} + assert MediaProxy.decode_url(sig, base64) == {:error, :invalid_signature} end - test "filename_matches preserves the encoded or decoded path" do - assert MediaProxyController.filename_matches( + test "`filename_matches/_` preserves the encoded or decoded path" do + assert MediaProxy.filename_matches( %{"filename" => "/Hello world.jpg"}, "/Hello world.jpg", "http://pleroma.social/Hello world.jpg" ) == :ok - assert MediaProxyController.filename_matches( + assert MediaProxy.filename_matches( %{"filename" => "/Hello%20world.jpg"}, "/Hello%20world.jpg", "http://pleroma.social/Hello%20world.jpg" ) == :ok - assert MediaProxyController.filename_matches( + assert MediaProxy.filename_matches( %{"filename" => "/my%2Flong%2Furl%2F2019%2F07%2FS.jpg"}, "/my%2Flong%2Furl%2F2019%2F07%2FS.jpg", "http://pleroma.social/my%2Flong%2Furl%2F2019%2F07%2FS.jpg" ) == :ok - assert MediaProxyController.filename_matches( + assert MediaProxy.filename_matches( %{"filename" => "/my%2Flong%2Furl%2F2019%2F07%2FS.jp"}, "/my%2Flong%2Furl%2F2019%2F07%2FS.jp", "http://pleroma.social/my%2Flong%2Furl%2F2019%2F07%2FS.jpg" @@ -116,7 +115,7 @@ defmodule Pleroma.Web.MediaProxyTest do # conn.request_path will return encoded url request_path = "/ANALYSE-DAI-_-LE-STABLECOIN-100-D%C3%89CENTRALIS%C3%89-BQ.jpg" - assert MediaProxyController.filename_matches( + assert MediaProxy.filename_matches( true, request_path, "https://mydomain.com/uploads/2019/07/ANALYSE-DAI-_-LE-STABLECOIN-100-DÉCENTRALISÉ-BQ.jpg" @@ -124,20 +123,12 @@ defmodule Pleroma.Web.MediaProxyTest do end test "uses the configured base_url" do - base_url = Pleroma.Config.get([:media_proxy, :base_url]) - - if base_url do - on_exit(fn -> - Pleroma.Config.put([:media_proxy, :base_url], base_url) - end) - end - - Pleroma.Config.put([:media_proxy, :base_url], "https://cache.pleroma.social") + clear_config([:media_proxy, :base_url], "https://cache.pleroma.social") url = "https://pleroma.soykaf.com/static/logo.png" - encoded = url(url) + encoded = MediaProxy.url(url) - assert String.starts_with?(encoded, Pleroma.Config.get([:media_proxy, :base_url])) + assert String.starts_with?(encoded, Config.get([:media_proxy, :base_url])) end # Some sites expect ASCII encoded characters in the URL to be preserved even if @@ -148,7 +139,7 @@ defmodule Pleroma.Web.MediaProxyTest do url = "https://pleroma.com/%20/%21/%22/%23/%24/%25/%26/%27/%28/%29/%2A/%2B/%2C/%2D/%2E/%2F/%30/%31/%32/%33/%34/%35/%36/%37/%38/%39/%3A/%3B/%3C/%3D/%3E/%3F/%40/%41/%42/%43/%44/%45/%46/%47/%48/%49/%4A/%4B/%4C/%4D/%4E/%4F/%50/%51/%52/%53/%54/%55/%56/%57/%58/%59/%5A/%5B/%5C/%5D/%5E/%5F/%60/%61/%62/%63/%64/%65/%66/%67/%68/%69/%6A/%6B/%6C/%6D/%6E/%6F/%70/%71/%72/%73/%74/%75/%76/%77/%78/%79/%7A/%7B/%7C/%7D/%7E/%7F/%80/%81/%82/%83/%84/%85/%86/%87/%88/%89/%8A/%8B/%8C/%8D/%8E/%8F/%90/%91/%92/%93/%94/%95/%96/%97/%98/%99/%9A/%9B/%9C/%9D/%9E/%9F/%C2%A0/%A1/%A2/%A3/%A4/%A5/%A6/%A7/%A8/%A9/%AA/%AB/%AC/%C2%AD/%AE/%AF/%B0/%B1/%B2/%B3/%B4/%B5/%B6/%B7/%B8/%B9/%BA/%BB/%BC/%BD/%BE/%BF/%C0/%C1/%C2/%C3/%C4/%C5/%C6/%C7/%C8/%C9/%CA/%CB/%CC/%CD/%CE/%CF/%D0/%D1/%D2/%D3/%D4/%D5/%D6/%D7/%D8/%D9/%DA/%DB/%DC/%DD/%DE/%DF/%E0/%E1/%E2/%E3/%E4/%E5/%E6/%E7/%E8/%E9/%EA/%EB/%EC/%ED/%EE/%EF/%F0/%F1/%F2/%F3/%F4/%F5/%F6/%F7/%F8/%F9/%FA/%FB/%FC/%FD/%FE/%FF" - encoded = url(url) + encoded = MediaProxy.url(url) assert decode_result(encoded) == url end @@ -159,77 +150,55 @@ defmodule Pleroma.Web.MediaProxyTest do url = "https://pleroma.com/ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890-._~:/?#[]@!$&'()*+,;=|^`{}" - encoded = url(url) + encoded = MediaProxy.url(url) assert decode_result(encoded) == url end test "preserve unicode characters" do url = "https://ko.wikipedia.org/wiki/위키백과:대문" - encoded = url(url) + encoded = MediaProxy.url(url) assert decode_result(encoded) == url end end describe "when disabled" do - setup do - enabled = Pleroma.Config.get([:media_proxy, :enabled]) - - if enabled do - Pleroma.Config.put([:media_proxy, :enabled], false) - - on_exit(fn -> - Pleroma.Config.put([:media_proxy, :enabled], enabled) - :ok - end) - end - - :ok - end + setup do: clear_config([:media_proxy, :enabled], false) test "does not encode remote urls" do - assert url("https://google.fr") == "https://google.fr" + assert MediaProxy.url("https://google.fr") == "https://google.fr" end end - defp decode_result(encoded) do - [_, "proxy", sig, base64 | _] = URI.parse(encoded).path |> String.split("/") - {:ok, decoded} = decode_url(sig, base64) - decoded - end - describe "whitelist" do - setup do - Pleroma.Config.put([:media_proxy, :enabled], true) - :ok - end + setup do: clear_config([:media_proxy, :enabled], true) test "mediaproxy whitelist" do - Pleroma.Config.put([:media_proxy, :whitelist], ["google.com", "feld.me"]) + clear_config([:media_proxy, :whitelist], ["google.com", "feld.me"]) url = "https://feld.me/foo.png" - unencoded = url(url) + unencoded = MediaProxy.url(url) assert unencoded == url end test "does not change whitelisted urls" do - Pleroma.Config.put([:media_proxy, :whitelist], ["mycdn.akamai.com"]) - Pleroma.Config.put([:media_proxy, :base_url], "https://cache.pleroma.social") + clear_config([:media_proxy, :whitelist], ["mycdn.akamai.com"]) + clear_config([:media_proxy, :base_url], "https://cache.pleroma.social") media_url = "https://mycdn.akamai.com" url = "#{media_url}/static/logo.png" - encoded = url(url) + encoded = MediaProxy.url(url) assert String.starts_with?(encoded, media_url) end test "ensure Pleroma.Upload base_url is always whitelisted" do media_url = "https://media.pleroma.social" - Pleroma.Config.put([Pleroma.Upload, :base_url], media_url) + clear_config([Pleroma.Upload, :base_url], media_url) url = "#{media_url}/static/logo.png" - encoded = url(url) + encoded = MediaProxy.url(url) assert String.starts_with?(encoded, media_url) end From 1b23acf164ebc4fde3fe1e4fdca6e11b7caa90ef Mon Sep 17 00:00:00 2001 From: Ivan Tashkinov Date: Mon, 11 May 2020 23:21:53 +0300 Subject: [PATCH 002/102] [#2497] Media preview proxy for images: fixes, tweaks, refactoring, tests adjustments. --- config/config.exs | 8 ++- lib/pleroma/reverse_proxy/reverse_proxy.ex | 4 ++ lib/pleroma/web/media_proxy/media_proxy.ex | 33 +++++++--- .../web/media_proxy/media_proxy_controller.ex | 62 ++++++++++------- mix.exs | 1 + mix.lock | 2 + test/web/media_proxy/media_proxy_test.exs | 66 +++++++++++++------ 7 files changed, 119 insertions(+), 57 deletions(-) diff --git a/config/config.exs b/config/config.exs index 526901f83..0f92b1ef9 100644 --- a/config/config.exs +++ b/config/config.exs @@ -381,6 +381,8 @@ config :pleroma, :media_proxy, proxy_opts: [ redirect_on_failure: false, max_body_length: 25 * 1_048_576, + # Note: max_read_duration defaults to Pleroma.ReverseProxy.max_read_duration_default/1 + max_read_duration: 30_000, http: [ follow_redirect: true, pool: :media @@ -388,10 +390,14 @@ config :pleroma, :media_proxy, ], whitelist: [] +# Note: media preview proxy depends on media proxy to be enabled config :pleroma, :media_preview_proxy, enabled: false, limit_dimensions: "400x200", - max_body_length: 25 * 1_048_576 + proxy_opts: [ + head_request_max_read_duration: 5_000, + max_read_duration: 10_000 + ] config :pleroma, :chat, enabled: true diff --git a/lib/pleroma/reverse_proxy/reverse_proxy.ex b/lib/pleroma/reverse_proxy/reverse_proxy.ex index 4bbeb493c..aeaf9bd39 100644 --- a/lib/pleroma/reverse_proxy/reverse_proxy.ex +++ b/lib/pleroma/reverse_proxy/reverse_proxy.ex @@ -16,6 +16,8 @@ defmodule Pleroma.ReverseProxy do @failed_request_ttl :timer.seconds(60) @methods ~w(GET HEAD) + def max_read_duration_default, do: @max_read_duration + @moduledoc """ A reverse proxy. @@ -370,6 +372,8 @@ defmodule Pleroma.ReverseProxy do defp body_size_constraint(_, _), do: :ok + defp check_read_duration(nil = _duration, max), do: check_read_duration(@max_read_duration, max) + defp check_read_duration(duration, max) when is_integer(duration) and is_integer(max) and max > 0 do if duration > max do diff --git a/lib/pleroma/web/media_proxy/media_proxy.ex b/lib/pleroma/web/media_proxy/media_proxy.ex index f4791c758..4e01c14e4 100644 --- a/lib/pleroma/web/media_proxy/media_proxy.ex +++ b/lib/pleroma/web/media_proxy/media_proxy.ex @@ -13,26 +13,32 @@ defmodule Pleroma.Web.MediaProxy do def url("/" <> _ = url), do: url def url(url) do - if disabled?() or local?(url) or whitelisted?(url) do + if not enabled?() or local?(url) or whitelisted?(url) do url else encode_url(url) end end + # Note: routing all URLs to preview handler (even local and whitelisted). + # Preview handler will call url/1 on decoded URLs, and applicable ones will detour media proxy. def preview_url(url) do - if disabled?() or whitelisted?(url) do - url - else + if preview_enabled?() do encode_preview_url(url) + else + url end end - defp disabled?, do: !Config.get([:media_proxy, :enabled], false) + def enabled?, do: Config.get([:media_proxy, :enabled], false) - defp local?(url), do: String.starts_with?(url, Pleroma.Web.base_url()) + # Note: media proxy must be enabled for media preview proxy in order to load all + # non-local non-whitelisted URLs through it and be sure that body size constraint is preserved. + def preview_enabled?, do: enabled?() and Config.get([:media_preview_proxy, :enabled], false) - defp whitelisted?(url) do + def local?(url), do: String.starts_with?(url, Pleroma.Web.base_url()) + + def whitelisted?(url) do %{host: domain} = URI.parse(url) mediaproxy_whitelist = Config.get([:media_proxy, :whitelist]) @@ -111,17 +117,24 @@ defmodule Pleroma.Web.MediaProxy do proxy_url("proxy/preview", sig_base64, url_base64, filename) end - def filename_matches(%{"filename" => _} = _, path, url) do + def verify_request_path_and_url( + %Plug.Conn{params: %{"filename" => _}, request_path: request_path}, + url + ) do + verify_request_path_and_url(request_path, url) + end + + def verify_request_path_and_url(request_path, url) when is_binary(request_path) do filename = filename(url) - if filename && not basename_matches?(path, filename) do + if filename && not basename_matches?(request_path, filename) do {:wrong_filename, filename} else :ok end end - def filename_matches(_, _, _), do: :ok + def verify_request_path_and_url(_, _), do: :ok defp basename_matches?(path, filename) do basename = Path.basename(path) diff --git a/lib/pleroma/web/media_proxy/media_proxy_controller.ex b/lib/pleroma/web/media_proxy/media_proxy_controller.ex index fe3f61c18..157365e08 100644 --- a/lib/pleroma/web/media_proxy/media_proxy_controller.ex +++ b/lib/pleroma/web/media_proxy/media_proxy_controller.ex @@ -10,14 +10,12 @@ defmodule Pleroma.Web.MediaProxy.MediaProxyController do alias Pleroma.ReverseProxy alias Pleroma.Web.MediaProxy - @default_proxy_opts [max_body_length: 25 * 1_048_576, http: [follow_redirect: true]] - - def remote(conn, %{"sig" => sig64, "url" => url64} = params) do - with config <- Config.get([:media_proxy], []), - {_, true} <- {:enabled, Keyword.get(config, :enabled, false)}, + def remote(conn, %{"sig" => sig64, "url" => url64}) do + with {_, true} <- {:enabled, MediaProxy.enabled?()}, {:ok, url} <- MediaProxy.decode_url(sig64, url64), - :ok <- MediaProxy.filename_matches(params, conn.request_path, url) do - ReverseProxy.call(conn, url, Keyword.get(config, :proxy_opts, @default_proxy_opts)) + :ok <- MediaProxy.verify_request_path_and_url(conn, url) do + proxy_opts = Config.get([:media_proxy, :proxy_opts], []) + ReverseProxy.call(conn, url, proxy_opts) else {:enabled, false} -> send_resp(conn, 404, Plug.Conn.Status.reason_phrase(404)) @@ -30,10 +28,10 @@ defmodule Pleroma.Web.MediaProxy.MediaProxyController do end end - def preview(conn, %{"sig" => sig64, "url" => url64} = params) do - with {_, true} <- {:enabled, Config.get([:media_preview_proxy, :enabled], false)}, + def preview(conn, %{"sig" => sig64, "url" => url64}) do + with {_, true} <- {:enabled, MediaProxy.preview_enabled?()}, {:ok, url} <- MediaProxy.decode_url(sig64, url64), - :ok <- MediaProxy.filename_matches(params, conn.request_path, url) do + :ok <- MediaProxy.verify_request_path_and_url(conn, url) do handle_preview(conn, url) else {:enabled, false} -> @@ -48,21 +46,27 @@ defmodule Pleroma.Web.MediaProxy.MediaProxyController do end defp handle_preview(conn, url) do - with {:ok, %{status: status} = head_response} when status in 200..299 <- Tesla.head(url), - {_, true} <- {:acceptable_content_length, acceptable_body_length?(head_response)} do + with {:ok, %{status: status} = head_response} when status in 200..299 <- + Tesla.head(url, opts: [adapter: [timeout: preview_head_request_timeout()]]) do content_type = Tesla.get_header(head_response, "content-type") handle_preview(content_type, conn, url) else {_, %{status: status}} -> send_resp(conn, :failed_dependency, "Can't fetch HTTP headers (HTTP #{status}).") - {:acceptable_content_length, false} -> - send_resp(conn, :unprocessable_entity, "Source file size exceeds limit.") + {:error, :recv_response_timeout} -> + send_resp(conn, :failed_dependency, "HEAD request timeout.") + + _ -> + send_resp(conn, :failed_dependency, "Can't fetch HTTP headers.") end end - defp handle_preview("image/" <> _, %{params: params} = conn, url) do - with {:ok, %{status: status, body: body}} when status in 200..299 <- Tesla.get(url), + defp handle_preview("image/" <> _ = content_type, %{params: params} = conn, url) do + with {:ok, %{status: status, body: body}} when status in 200..299 <- + url + |> MediaProxy.url() + |> Tesla.get(opts: [adapter: [timeout: preview_timeout()]]), {:ok, path} <- MogrifyHelper.store_as_temporary_file(url, body), resize_dimensions <- Map.get( @@ -70,12 +74,19 @@ defmodule Pleroma.Web.MediaProxy.MediaProxyController do "limit_dimensions", Config.get([:media_preview_proxy, :limit_dimensions]) ), - %Mogrify.Image{} <- MogrifyHelper.in_place_resize_to_limit(path, resize_dimensions) do - send_file(conn, 200, path) + %Mogrify.Image{} <- MogrifyHelper.in_place_resize_to_limit(path, resize_dimensions), + {:ok, image_binary} <- File.read(path), + _ <- File.rm(path) do + conn + |> put_resp_header("content-type", content_type) + |> send_resp(200, image_binary) else {_, %{status: _}} -> send_resp(conn, :failed_dependency, "Can't fetch the image.") + {:error, :recv_response_timeout} -> + send_resp(conn, :failed_dependency, "Downstream timeout.") + _ -> send_resp(conn, :failed_dependency, "Can't handle image preview.") end @@ -85,13 +96,14 @@ defmodule Pleroma.Web.MediaProxy.MediaProxyController do send_resp(conn, :unprocessable_entity, "Unsupported content type: #{content_type}.") end - defp acceptable_body_length?(head_response) do - max_body_length = Config.get([:media_preview_proxy, :max_body_length], nil) - content_length = Tesla.get_header(head_response, "content-length") - content_length = with {int, _} <- Integer.parse(content_length), do: int + defp preview_head_request_timeout do + Config.get([:media_preview_proxy, :proxy_opts, :head_request_max_read_duration]) || + preview_timeout() + end - content_length == :error or - max_body_length in [nil, :infinity] or - content_length <= max_body_length + defp preview_timeout do + Config.get([:media_preview_proxy, :proxy_opts, :max_read_duration]) || + Config.get([:media_proxy, :proxy_opts, :max_read_duration]) || + ReverseProxy.max_read_duration_default() end end diff --git a/mix.exs b/mix.exs index 6d65e18d4..a9c4ad2e3 100644 --- a/mix.exs +++ b/mix.exs @@ -139,6 +139,7 @@ defmodule Pleroma.Mixfile do github: "ninenines/gun", ref: "e1a69b36b180a574c0ac314ced9613fdd52312cc", override: true}, {:jason, "~> 1.0"}, {:mogrify, "~> 0.6.1"}, + {:eimp, ">= 0.0.0"}, {:ex_aws, "~> 2.1"}, {:ex_aws_s3, "~> 2.0"}, {:sweet_xml, "~> 0.6.6"}, diff --git a/mix.lock b/mix.lock index c400202b7..ede7b0ada 100644 --- a/mix.lock +++ b/mix.lock @@ -29,6 +29,7 @@ "ecto": {:hex, :ecto, "3.4.0", "a7a83ab8359bf816ce729e5e65981ce25b9fc5adfc89c2ea3980f4fed0bfd7c1", [:mix], [{:decimal, "~> 1.6 or ~> 2.0", [hex: :decimal, repo: "hexpm", optional: false]}, {:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: true]}], "hexpm", "5eed18252f5b5bbadec56a24112b531343507dbe046273133176b12190ce19cc"}, "ecto_enum": {:hex, :ecto_enum, "1.4.0", "d14b00e04b974afc69c251632d1e49594d899067ee2b376277efd8233027aec8", [:mix], [{:ecto, ">= 3.0.0", [hex: :ecto, repo: "hexpm", optional: false]}, {:ecto_sql, "> 3.0.0", [hex: :ecto_sql, repo: "hexpm", optional: false]}, {:mariaex, ">= 0.0.0", [hex: :mariaex, repo: "hexpm", optional: true]}, {:postgrex, ">= 0.0.0", [hex: :postgrex, repo: "hexpm", optional: true]}], "hexpm", "8fb55c087181c2b15eee406519dc22578fa60dd82c088be376d0010172764ee4"}, "ecto_sql": {:hex, :ecto_sql, "3.3.4", "aa18af12eb875fbcda2f75e608b3bd534ebf020fc4f6448e4672fcdcbb081244", [:mix], [{:db_connection, "~> 2.2", [hex: :db_connection, repo: "hexpm", optional: false]}, {:ecto, "~> 3.4 or ~> 3.3.3", [hex: :ecto, repo: "hexpm", optional: false]}, {:myxql, "~> 0.3.0", [hex: :myxql, repo: "hexpm", optional: true]}, {:postgrex, "~> 0.15.0", [hex: :postgrex, repo: "hexpm", optional: true]}, {:telemetry, "~> 0.4.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "5eccbdbf92e3c6f213007a82d5dbba4cd9bb659d1a21331f89f408e4c0efd7a8"}, + "eimp": {:hex, :eimp, "1.0.14", "fc297f0c7e2700457a95a60c7010a5f1dcb768a083b6d53f49cd94ab95a28f22", [:rebar3], [{:p1_utils, "1.0.18", [hex: :p1_utils, repo: "hexpm", optional: false]}], "hexpm", "501133f3112079b92d9e22da8b88bf4f0e13d4d67ae9c15c42c30bd25ceb83b6"}, "esshd": {:hex, :esshd, "0.1.1", "d4dd4c46698093a40a56afecce8a46e246eb35463c457c246dacba2e056f31b5", [:mix], [], "hexpm", "d73e341e3009d390aa36387dc8862860bf9f874c94d9fd92ade2926376f49981"}, "eternal": {:hex, :eternal, "1.2.1", "d5b6b2499ba876c57be2581b5b999ee9bdf861c647401066d3eeed111d096bc4", [:mix], [], "hexpm", "b14f1dc204321429479c569cfbe8fb287541184ed040956c8862cb7a677b8406"}, "ex2ms": {:hex, :ex2ms, "1.5.0", "19e27f9212be9a96093fed8cdfbef0a2b56c21237196d26760f11dfcfae58e97", [:mix], [], "hexpm"}, @@ -75,6 +76,7 @@ "nodex": {:git, "https://git.pleroma.social/pleroma/nodex", "cb6730f943cfc6aad674c92161be23a8411f15d1", [ref: "cb6730f943cfc6aad674c92161be23a8411f15d1"]}, "oban": {:hex, :oban, "1.2.0", "7cca94d341be43d220571e28f69131c4afc21095b25257397f50973d3fc59b07", [:mix], [{:ecto_sql, "~> 3.1", [hex: :ecto_sql, repo: "hexpm", optional: false]}, {:jason, "~> 1.1", [hex: :jason, repo: "hexpm", optional: false]}, {:postgrex, "~> 0.14", [hex: :postgrex, repo: "hexpm", optional: false]}, {:telemetry, "~> 0.4", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "ba5f8b3f7d76967b3e23cf8014f6a13e4ccb33431e4808f036709a7f822362ee"}, "open_api_spex": {:git, "https://git.pleroma.social/pleroma/elixir-libraries/open_api_spex.git", "b862ebd78de0df95875cf46feb6e9607130dc2a8", [ref: "b862ebd78de0df95875cf46feb6e9607130dc2a8"]}, + "p1_utils": {:hex, :p1_utils, "1.0.18", "3fe224de5b2e190d730a3c5da9d6e8540c96484cf4b4692921d1e28f0c32b01c", [:rebar3], [], "hexpm", "1fc8773a71a15553b179c986b22fbeead19b28fe486c332d4929700ffeb71f88"}, "parse_trans": {:hex, :parse_trans, "3.3.0", "09765507a3c7590a784615cfd421d101aec25098d50b89d7aa1d66646bc571c1", [:rebar3], [], "hexpm", "17ef63abde837ad30680ea7f857dd9e7ced9476cdd7b0394432af4bfc241b960"}, "pbkdf2_elixir": {:hex, :pbkdf2_elixir, "0.12.4", "8dd29ed783f2e12195d7e0a4640effc0a7c37e6537da491f1db01839eee6d053", [:mix], [], "hexpm", "595d09db74cb093b1903381c9de423276a931a2480a46a1a5dc7f932a2a6375b"}, "phoenix": {:hex, :phoenix, "1.4.13", "67271ad69b51f3719354604f4a3f968f83aa61c19199343656c9caee057ff3b8", [:mix], [{:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: true]}, {:phoenix_pubsub, "~> 1.1", [hex: :phoenix_pubsub, repo: "hexpm", optional: false]}, {:plug, "~> 1.8.1 or ~> 1.9", [hex: :plug, repo: "hexpm", optional: false]}, {:plug_cowboy, "~> 1.0 or ~> 2.0", [hex: :plug_cowboy, repo: "hexpm", optional: true]}, {:telemetry, "~> 0.4", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "ab765a0feddb81fc62e2116c827b5f068df85159c162bee760745276ad7ddc1b"}, diff --git a/test/web/media_proxy/media_proxy_test.exs b/test/web/media_proxy/media_proxy_test.exs index cad0acd30..ac5d8fd32 100644 --- a/test/web/media_proxy/media_proxy_test.exs +++ b/test/web/media_proxy/media_proxy_test.exs @@ -85,38 +85,62 @@ defmodule Pleroma.Web.MediaProxyTest do assert MediaProxy.decode_url(sig, base64) == {:error, :invalid_signature} end - test "`filename_matches/_` preserves the encoded or decoded path" do - assert MediaProxy.filename_matches( - %{"filename" => "/Hello world.jpg"}, - "/Hello world.jpg", - "http://pleroma.social/Hello world.jpg" + def test_verify_request_path_and_url(request_path, url, expected_result) do + assert MediaProxy.verify_request_path_and_url(request_path, url) == expected_result + + assert MediaProxy.verify_request_path_and_url( + %Plug.Conn{ + params: %{"filename" => Path.basename(request_path)}, + request_path: request_path + }, + url + ) == expected_result + end + + test "if first arg of `verify_request_path_and_url/2` is a Plug.Conn without \"filename\" " <> + "parameter, `verify_request_path_and_url/2` returns :ok " do + assert MediaProxy.verify_request_path_and_url( + %Plug.Conn{params: %{}, request_path: "/some/path"}, + "https://instance.com/file.jpg" ) == :ok - assert MediaProxy.filename_matches( - %{"filename" => "/Hello%20world.jpg"}, - "/Hello%20world.jpg", - "http://pleroma.social/Hello%20world.jpg" + assert MediaProxy.verify_request_path_and_url( + %Plug.Conn{params: %{}, request_path: "/path/to/file.jpg"}, + "https://instance.com/file.jpg" ) == :ok + end - assert MediaProxy.filename_matches( - %{"filename" => "/my%2Flong%2Furl%2F2019%2F07%2FS.jpg"}, - "/my%2Flong%2Furl%2F2019%2F07%2FS.jpg", - "http://pleroma.social/my%2Flong%2Furl%2F2019%2F07%2FS.jpg" - ) == :ok + test "`verify_request_path_and_url/2` preserves the encoded or decoded path" do + test_verify_request_path_and_url( + "/Hello world.jpg", + "http://pleroma.social/Hello world.jpg", + :ok + ) - assert MediaProxy.filename_matches( - %{"filename" => "/my%2Flong%2Furl%2F2019%2F07%2FS.jp"}, - "/my%2Flong%2Furl%2F2019%2F07%2FS.jp", - "http://pleroma.social/my%2Flong%2Furl%2F2019%2F07%2FS.jpg" - ) == {:wrong_filename, "my%2Flong%2Furl%2F2019%2F07%2FS.jpg"} + test_verify_request_path_and_url( + "/Hello%20world.jpg", + "http://pleroma.social/Hello%20world.jpg", + :ok + ) + + test_verify_request_path_and_url( + "/my%2Flong%2Furl%2F2019%2F07%2FS.jpg", + "http://pleroma.social/my%2Flong%2Furl%2F2019%2F07%2FS.jpg", + :ok + ) + + test_verify_request_path_and_url( + "/my%2Flong%2Furl%2F2019%2F07%2FS", + "http://pleroma.social/my%2Flong%2Furl%2F2019%2F07%2FS.jpg", + {:wrong_filename, "my%2Flong%2Furl%2F2019%2F07%2FS.jpg"} + ) end test "encoded url are tried to match for proxy as `conn.request_path` encodes the url" do # conn.request_path will return encoded url request_path = "/ANALYSE-DAI-_-LE-STABLECOIN-100-D%C3%89CENTRALIS%C3%89-BQ.jpg" - assert MediaProxy.filename_matches( - true, + assert MediaProxy.verify_request_path_and_url( request_path, "https://mydomain.com/uploads/2019/07/ANALYSE-DAI-_-LE-STABLECOIN-100-DÉCENTRALISÉ-BQ.jpg" ) == :ok From f1f588fd5271c0b3bf09df002a83dbb57c42bae0 Mon Sep 17 00:00:00 2001 From: Ivan Tashkinov Date: Thu, 14 May 2020 20:18:31 +0300 Subject: [PATCH 003/102] [#2497] Added support for :eimp for image resizing. --- config/config.exs | 4 +- .../web/media_proxy/media_proxy_controller.ex | 64 +++++++++++++++---- mix.exs | 2 +- 3 files changed, 56 insertions(+), 14 deletions(-) diff --git a/config/config.exs b/config/config.exs index 0f92b1ef9..e9403c7c8 100644 --- a/config/config.exs +++ b/config/config.exs @@ -393,7 +393,9 @@ config :pleroma, :media_proxy, # Note: media preview proxy depends on media proxy to be enabled config :pleroma, :media_preview_proxy, enabled: false, - limit_dimensions: "400x200", + enable_eimp: true, + thumbnail_max_width: 400, + thumbnail_max_height: 200, proxy_opts: [ head_request_max_read_duration: 5_000, max_read_duration: 10_000 diff --git a/lib/pleroma/web/media_proxy/media_proxy_controller.ex b/lib/pleroma/web/media_proxy/media_proxy_controller.ex index 157365e08..8d8d073e9 100644 --- a/lib/pleroma/web/media_proxy/media_proxy_controller.ex +++ b/lib/pleroma/web/media_proxy/media_proxy_controller.ex @@ -62,24 +62,64 @@ defmodule Pleroma.Web.MediaProxy.MediaProxyController do end end + defp thumbnail_max_dimensions(params) do + config = Config.get([:media_preview_proxy], []) + + thumbnail_max_width = + if w = params["thumbnail_max_width"] do + String.to_integer(w) + else + Keyword.fetch!(config, :thumbnail_max_width) + end + + thumbnail_max_height = + if h = params["thumbnail_max_height"] do + String.to_integer(h) + else + Keyword.fetch!(config, :thumbnail_max_height) + end + + {thumbnail_max_width, thumbnail_max_height} + end + + defp thumbnail_binary(url, body, params) do + {thumbnail_max_width, thumbnail_max_height} = thumbnail_max_dimensions(params) + + with true <- Config.get([:media_preview_proxy, :enable_eimp]), + {:ok, [type: image_type, width: source_width, height: source_height]} <- + :eimp.identify(body), + scale_factor <- + Enum.max([source_width / thumbnail_max_width, source_height / thumbnail_max_height]), + {:ok, thumbnail_binary} = + :eimp.convert(body, image_type, [ + {:scale, {round(source_width / scale_factor), round(source_height / scale_factor)}} + ]) do + {:ok, thumbnail_binary} + else + _ -> + mogrify_dimensions = "#{thumbnail_max_width}x#{thumbnail_max_height}" + + with {:ok, path} <- MogrifyHelper.store_as_temporary_file(url, body), + %Mogrify.Image{} <- + MogrifyHelper.in_place_resize_to_limit(path, mogrify_dimensions), + {:ok, thumbnail_binary} <- File.read(path), + _ <- File.rm(path) do + {:ok, thumbnail_binary} + else + _ -> :error + end + end + end + defp handle_preview("image/" <> _ = content_type, %{params: params} = conn, url) do - with {:ok, %{status: status, body: body}} when status in 200..299 <- + with {:ok, %{status: status, body: image_contents}} when status in 200..299 <- url |> MediaProxy.url() |> Tesla.get(opts: [adapter: [timeout: preview_timeout()]]), - {:ok, path} <- MogrifyHelper.store_as_temporary_file(url, body), - resize_dimensions <- - Map.get( - params, - "limit_dimensions", - Config.get([:media_preview_proxy, :limit_dimensions]) - ), - %Mogrify.Image{} <- MogrifyHelper.in_place_resize_to_limit(path, resize_dimensions), - {:ok, image_binary} <- File.read(path), - _ <- File.rm(path) do + {:ok, thumbnail_binary} <- thumbnail_binary(url, image_contents, params) do conn |> put_resp_header("content-type", content_type) - |> send_resp(200, image_binary) + |> send_resp(200, thumbnail_binary) else {_, %{status: _}} -> send_resp(conn, :failed_dependency, "Can't fetch the image.") diff --git a/mix.exs b/mix.exs index a9c4ad2e3..332febe48 100644 --- a/mix.exs +++ b/mix.exs @@ -139,7 +139,7 @@ defmodule Pleroma.Mixfile do github: "ninenines/gun", ref: "e1a69b36b180a574c0ac314ced9613fdd52312cc", override: true}, {:jason, "~> 1.0"}, {:mogrify, "~> 0.6.1"}, - {:eimp, ">= 0.0.0"}, + {:eimp, "~> 1.0.14"}, {:ex_aws, "~> 2.1"}, {:ex_aws_s3, "~> 2.0"}, {:sweet_xml, "~> 0.6.6"}, From 1871a5ddb4a803ebe4fae6943a9b9c94f1f9c1a8 Mon Sep 17 00:00:00 2001 From: Ivan Tashkinov Date: Wed, 20 May 2020 20:26:43 +0300 Subject: [PATCH 004/102] [#2497] Image preview proxy: implemented ffmpeg-based resizing, removed eimp & mogrify-based resizing. --- config/config.exs | 1 - lib/pleroma/helpers/media_helper.ex | 62 +++++++++++++++++++ lib/pleroma/helpers/mogrify_helper.ex | 25 -------- .../web/media_proxy/media_proxy_controller.ex | 50 +++------------ mix.exs | 2 +- mix.lock | 2 + 6 files changed, 74 insertions(+), 68 deletions(-) create mode 100644 lib/pleroma/helpers/media_helper.ex delete mode 100644 lib/pleroma/helpers/mogrify_helper.ex diff --git a/config/config.exs b/config/config.exs index e9403c7c8..7de93511d 100644 --- a/config/config.exs +++ b/config/config.exs @@ -393,7 +393,6 @@ config :pleroma, :media_proxy, # Note: media preview proxy depends on media proxy to be enabled config :pleroma, :media_preview_proxy, enabled: false, - enable_eimp: true, thumbnail_max_width: 400, thumbnail_max_height: 200, proxy_opts: [ diff --git a/lib/pleroma/helpers/media_helper.ex b/lib/pleroma/helpers/media_helper.ex new file mode 100644 index 000000000..6d1f8ab22 --- /dev/null +++ b/lib/pleroma/helpers/media_helper.ex @@ -0,0 +1,62 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2020 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + +defmodule Pleroma.Helpers.MediaHelper do + @moduledoc """ + Handles common media-related operations. + """ + + @ffmpeg_opts [{:sync, true}, {:stdout, true}] + + def ffmpeg_resize_remote(uri, max_width, max_height) do + cmd = ~s""" + curl -L "#{uri}" | + ffmpeg -i pipe:0 -vf \ + "scale='min(#{max_width},iw)':min'(#{max_height},ih)':force_original_aspect_ratio=decrease" \ + -f image2 pipe:1 | \ + cat + """ + + with {:ok, [stdout: stdout_list]} <- Exexec.run(cmd, @ffmpeg_opts) do + {:ok, Enum.join(stdout_list)} + end + end + + @doc "Returns a temporary path for an URI" + def temporary_path_for(uri) do + name = Path.basename(uri) + random = rand_uniform(999_999) + Path.join(System.tmp_dir(), "#{random}-#{name}") + end + + @doc "Stores binary content fetched from specified URL as a temporary file." + @spec store_as_temporary_file(String.t(), binary()) :: {:ok, String.t()} | {:error, atom()} + def store_as_temporary_file(url, body) do + path = temporary_path_for(url) + with :ok <- File.write(path, body), do: {:ok, path} + end + + @doc "Modifies image file at specified path by resizing to specified limit dimensions." + @spec mogrify_resize_to_limit(String.t(), String.t()) :: :ok | any() + def mogrify_resize_to_limit(path, resize_dimensions) do + with %Mogrify.Image{} <- + path + |> Mogrify.open() + |> Mogrify.resize_to_limit(resize_dimensions) + |> Mogrify.save(in_place: true) do + :ok + end + end + + defp rand_uniform(high) do + Code.ensure_loaded(:rand) + + if function_exported?(:rand, :uniform, 1) do + :rand.uniform(high) + else + # Erlang/OTP < 19 + apply(:crypto, :rand_uniform, [1, high]) + end + end +end diff --git a/lib/pleroma/helpers/mogrify_helper.ex b/lib/pleroma/helpers/mogrify_helper.ex deleted file mode 100644 index 67edb35c3..000000000 --- a/lib/pleroma/helpers/mogrify_helper.ex +++ /dev/null @@ -1,25 +0,0 @@ -# Pleroma: A lightweight social networking server -# Copyright © 2017-2020 Pleroma Authors -# SPDX-License-Identifier: AGPL-3.0-only - -defmodule Pleroma.Helpers.MogrifyHelper do - @moduledoc """ - Handles common Mogrify operations. - """ - - @spec store_as_temporary_file(String.t(), binary()) :: {:ok, String.t()} | {:error, atom()} - @doc "Stores binary content fetched from specified URL as a temporary file." - def store_as_temporary_file(url, body) do - path = Mogrify.temporary_path_for(%{path: url}) - with :ok <- File.write(path, body), do: {:ok, path} - end - - @spec store_as_temporary_file(String.t(), String.t()) :: Mogrify.Image.t() | any() - @doc "Modifies file at specified path by resizing to specified limit dimensions." - def in_place_resize_to_limit(path, resize_dimensions) do - path - |> Mogrify.open() - |> Mogrify.resize_to_limit(resize_dimensions) - |> Mogrify.save(in_place: true) - end -end diff --git a/lib/pleroma/web/media_proxy/media_proxy_controller.ex b/lib/pleroma/web/media_proxy/media_proxy_controller.ex index 8d8d073e9..fb4b80379 100644 --- a/lib/pleroma/web/media_proxy/media_proxy_controller.ex +++ b/lib/pleroma/web/media_proxy/media_proxy_controller.ex @@ -6,7 +6,7 @@ defmodule Pleroma.Web.MediaProxy.MediaProxyController do use Pleroma.Web, :controller alias Pleroma.Config - alias Pleroma.Helpers.MogrifyHelper + alias Pleroma.Helpers.MediaHelper alias Pleroma.ReverseProxy alias Pleroma.Web.MediaProxy @@ -82,51 +82,19 @@ defmodule Pleroma.Web.MediaProxy.MediaProxyController do {thumbnail_max_width, thumbnail_max_height} end - defp thumbnail_binary(url, body, params) do - {thumbnail_max_width, thumbnail_max_height} = thumbnail_max_dimensions(params) - - with true <- Config.get([:media_preview_proxy, :enable_eimp]), - {:ok, [type: image_type, width: source_width, height: source_height]} <- - :eimp.identify(body), - scale_factor <- - Enum.max([source_width / thumbnail_max_width, source_height / thumbnail_max_height]), - {:ok, thumbnail_binary} = - :eimp.convert(body, image_type, [ - {:scale, {round(source_width / scale_factor), round(source_height / scale_factor)}} - ]) do - {:ok, thumbnail_binary} - else - _ -> - mogrify_dimensions = "#{thumbnail_max_width}x#{thumbnail_max_height}" - - with {:ok, path} <- MogrifyHelper.store_as_temporary_file(url, body), - %Mogrify.Image{} <- - MogrifyHelper.in_place_resize_to_limit(path, mogrify_dimensions), - {:ok, thumbnail_binary} <- File.read(path), - _ <- File.rm(path) do - {:ok, thumbnail_binary} - else - _ -> :error - end - end - end - defp handle_preview("image/" <> _ = content_type, %{params: params} = conn, url) do - with {:ok, %{status: status, body: image_contents}} when status in 200..299 <- - url - |> MediaProxy.url() - |> Tesla.get(opts: [adapter: [timeout: preview_timeout()]]), - {:ok, thumbnail_binary} <- thumbnail_binary(url, image_contents, params) do + with {thumbnail_max_width, thumbnail_max_height} <- thumbnail_max_dimensions(params), + media_proxy_url <- MediaProxy.url(url), + {:ok, thumbnail_binary} <- + MediaHelper.ffmpeg_resize_remote( + media_proxy_url, + thumbnail_max_width, + thumbnail_max_height + ) do conn |> put_resp_header("content-type", content_type) |> send_resp(200, thumbnail_binary) else - {_, %{status: _}} -> - send_resp(conn, :failed_dependency, "Can't fetch the image.") - - {:error, :recv_response_timeout} -> - send_resp(conn, :failed_dependency, "Downstream timeout.") - _ -> send_resp(conn, :failed_dependency, "Can't handle image preview.") end diff --git a/mix.exs b/mix.exs index 9ace55eff..68de270f0 100644 --- a/mix.exs +++ b/mix.exs @@ -146,7 +146,6 @@ defmodule Pleroma.Mixfile do github: "ninenines/gun", ref: "e1a69b36b180a574c0ac314ced9613fdd52312cc", override: true}, {:jason, "~> 1.0"}, {:mogrify, "~> 0.6.1"}, - {:eimp, "~> 1.0.14"}, {:ex_aws, "~> 2.1"}, {:ex_aws_s3, "~> 2.0"}, {:sweet_xml, "~> 0.6.6"}, @@ -198,6 +197,7 @@ defmodule Pleroma.Mixfile do ref: "e0f16822d578866e186a0974d65ad58cddc1e2ab"}, {:mox, "~> 0.5", only: :test}, {:restarter, path: "./restarter"}, + {:exexec, "~> 0.2"}, {:open_api_spex, git: "https://git.pleroma.social/pleroma/elixir-libraries/open_api_spex.git", ref: "f296ac0924ba3cf79c7a588c4c252889df4c2edd"} diff --git a/mix.lock b/mix.lock index ebd0cbdf5..964b72127 100644 --- a/mix.lock +++ b/mix.lock @@ -32,6 +32,7 @@ "ecto_sql": {:hex, :ecto_sql, "3.3.4", "aa18af12eb875fbcda2f75e608b3bd534ebf020fc4f6448e4672fcdcbb081244", [:mix], [{:db_connection, "~> 2.2", [hex: :db_connection, repo: "hexpm", optional: false]}, {:ecto, "~> 3.4 or ~> 3.3.3", [hex: :ecto, repo: "hexpm", optional: false]}, {:myxql, "~> 0.3.0", [hex: :myxql, repo: "hexpm", optional: true]}, {:postgrex, "~> 0.15.0", [hex: :postgrex, repo: "hexpm", optional: true]}, {:telemetry, "~> 0.4.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "5eccbdbf92e3c6f213007a82d5dbba4cd9bb659d1a21331f89f408e4c0efd7a8"}, "eimp": {:hex, :eimp, "1.0.14", "fc297f0c7e2700457a95a60c7010a5f1dcb768a083b6d53f49cd94ab95a28f22", [:rebar3], [{:p1_utils, "1.0.18", [hex: :p1_utils, repo: "hexpm", optional: false]}], "hexpm", "501133f3112079b92d9e22da8b88bf4f0e13d4d67ae9c15c42c30bd25ceb83b6"}, "elixir_make": {:hex, :elixir_make, "0.6.0", "38349f3e29aff4864352084fc736fa7fa0f2995a819a737554f7ebd28b85aaab", [:mix], [], "hexpm", "d522695b93b7f0b4c0fcb2dfe73a6b905b1c301226a5a55cb42e5b14d509e050"}, + "erlexec": {:hex, :erlexec, "1.10.9", "3cbb3476f942bfb8b68b85721c21c1835061cf6dd35f5285c2362e85b100ddc7", [:rebar3], [], "hexpm", "271e5b5f2d91cdb9887efe74d89026c199bfc69f074cade0d08dab60993fa14e"}, "esshd": {:hex, :esshd, "0.1.1", "d4dd4c46698093a40a56afecce8a46e246eb35463c457c246dacba2e056f31b5", [:mix], [], "hexpm", "d73e341e3009d390aa36387dc8862860bf9f874c94d9fd92ade2926376f49981"}, "eternal": {:hex, :eternal, "1.2.1", "d5b6b2499ba876c57be2581b5b999ee9bdf861c647401066d3eeed111d096bc4", [:mix], [], "hexpm", "b14f1dc204321429479c569cfbe8fb287541184ed040956c8862cb7a677b8406"}, "ex2ms": {:hex, :ex2ms, "1.5.0", "19e27f9212be9a96093fed8cdfbef0a2b56c21237196d26760f11dfcfae58e97", [:mix], [], "hexpm"}, @@ -42,6 +43,7 @@ "ex_machina": {:hex, :ex_machina, "2.3.0", "92a5ad0a8b10ea6314b876a99c8c9e3f25f4dde71a2a835845b136b9adaf199a", [:mix], [{:ecto, "~> 2.2 or ~> 3.0", [hex: :ecto, repo: "hexpm", optional: true]}, {:ecto_sql, "~> 3.0", [hex: :ecto_sql, repo: "hexpm", optional: true]}], "hexpm", "b84f6af156264530b312a8ab98ac6088f6b77ae5fe2058305c81434aa01fbaf9"}, "ex_syslogger": {:hex, :ex_syslogger, "1.5.2", "72b6aa2d47a236e999171f2e1ec18698740f40af0bd02c8c650bf5f1fd1bac79", [:mix], [{:poison, ">= 1.5.0", [hex: :poison, repo: "hexpm", optional: true]}, {:syslog, "~> 1.1.0", [hex: :syslog, repo: "hexpm", optional: false]}], "hexpm", "ab9fab4136dbc62651ec6f16fa4842f10cf02ab4433fa3d0976c01be99398399"}, "excoveralls": {:hex, :excoveralls, "0.12.2", "a513defac45c59e310ac42fcf2b8ae96f1f85746410f30b1ff2b710a4b6cd44b", [:mix], [{:hackney, "~> 1.0", [hex: :hackney, repo: "hexpm", optional: false]}, {:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: false]}], "hexpm", "151c476331d49b45601ffc45f43cb3a8beb396b02a34e3777fea0ad34ae57d89"}, + "exexec": {:hex, :exexec, "0.2.0", "a6ffc48cba3ac9420891b847e4dc7120692fb8c08c9e82220ebddc0bb8d96103", [:mix], [{:erlexec, "~> 1.10", [hex: :erlexec, repo: "hexpm", optional: false]}], "hexpm", "312cd1c9befba9e078e57f3541e4f4257eabda6eb9c348154fe899d6ac633299"}, "fast_html": {:hex, :fast_html, "1.0.3", "2cc0d4b68496266a1530e0c852cafeaede0bd10cfdee26fda50dc696c203162f", [:make, :mix], [], "hexpm", "ab3d782b639d3c4655fbaec0f9d032c91f8cab8dd791ac7469c2381bc7c32f85"}, "fast_sanitize": {:hex, :fast_sanitize, "0.1.7", "2a7cd8734c88a2de6de55022104f8a3b87f1fdbe8bbf131d9049764b53d50d0d", [:mix], [{:fast_html, "~> 1.0", [hex: :fast_html, repo: "hexpm", optional: false]}, {:plug, "~> 1.8", [hex: :plug, repo: "hexpm", optional: false]}], "hexpm", "f39fe8ea08fbac17487c30bf09b7d9f3e12472e51fb07a88ffeb8fd17da8ab67"}, "flake_id": {:hex, :flake_id, "0.1.0", "7716b086d2e405d09b647121a166498a0d93d1a623bead243e1f74216079ccb3", [:mix], [{:base62, "~> 1.2", [hex: :base62, repo: "hexpm", optional: false]}, {:ecto, ">= 2.0.0", [hex: :ecto, repo: "hexpm", optional: true]}], "hexpm", "31fc8090fde1acd267c07c36ea7365b8604055f897d3a53dd967658c691bd827"}, From 610343edb318654126d9539775ba4b9ff30c8831 Mon Sep 17 00:00:00 2001 From: Ivan Tashkinov Date: Thu, 21 May 2020 17:35:42 +0300 Subject: [PATCH 005/102] [#2497] Image preview proxy: image resize & background color fix with ffmpeg -filter_complex. --- lib/pleroma/helpers/media_helper.ex | 47 +++---------------- .../web/media_proxy/media_proxy_controller.ex | 7 ++- 2 files changed, 9 insertions(+), 45 deletions(-) diff --git a/lib/pleroma/helpers/media_helper.ex b/lib/pleroma/helpers/media_helper.ex index 6d1f8ab22..ee6b76c41 100644 --- a/lib/pleroma/helpers/media_helper.ex +++ b/lib/pleroma/helpers/media_helper.ex @@ -9,12 +9,14 @@ defmodule Pleroma.Helpers.MediaHelper do @ffmpeg_opts [{:sync, true}, {:stdout, true}] - def ffmpeg_resize_remote(uri, max_width, max_height) do + def ffmpeg_resize_remote(uri, %{max_width: max_width, max_height: max_height}) do cmd = ~s""" curl -L "#{uri}" | - ffmpeg -i pipe:0 -vf \ - "scale='min(#{max_width},iw)':min'(#{max_height},ih)':force_original_aspect_ratio=decrease" \ - -f image2 pipe:1 | \ + ffmpeg -i pipe:0 -f lavfi -i color=c=white \ + -filter_complex "[0:v] scale='min(#{max_width},iw)':'min(#{max_height},ih)': \ + force_original_aspect_ratio=decrease [scaled]; \ + [1][scaled] scale2ref [bg][img]; [bg] setsar=1 [bg]; [bg][img] overlay=shortest=1" \ + -f image2 -vcodec mjpeg -frames:v 1 pipe:1 | \ cat """ @@ -22,41 +24,4 @@ defmodule Pleroma.Helpers.MediaHelper do {:ok, Enum.join(stdout_list)} end end - - @doc "Returns a temporary path for an URI" - def temporary_path_for(uri) do - name = Path.basename(uri) - random = rand_uniform(999_999) - Path.join(System.tmp_dir(), "#{random}-#{name}") - end - - @doc "Stores binary content fetched from specified URL as a temporary file." - @spec store_as_temporary_file(String.t(), binary()) :: {:ok, String.t()} | {:error, atom()} - def store_as_temporary_file(url, body) do - path = temporary_path_for(url) - with :ok <- File.write(path, body), do: {:ok, path} - end - - @doc "Modifies image file at specified path by resizing to specified limit dimensions." - @spec mogrify_resize_to_limit(String.t(), String.t()) :: :ok | any() - def mogrify_resize_to_limit(path, resize_dimensions) do - with %Mogrify.Image{} <- - path - |> Mogrify.open() - |> Mogrify.resize_to_limit(resize_dimensions) - |> Mogrify.save(in_place: true) do - :ok - end - end - - defp rand_uniform(high) do - Code.ensure_loaded(:rand) - - if function_exported?(:rand, :uniform, 1) do - :rand.uniform(high) - else - # Erlang/OTP < 19 - apply(:crypto, :rand_uniform, [1, high]) - end - end end diff --git a/lib/pleroma/web/media_proxy/media_proxy_controller.ex b/lib/pleroma/web/media_proxy/media_proxy_controller.ex index fb4b80379..12d4401fa 100644 --- a/lib/pleroma/web/media_proxy/media_proxy_controller.ex +++ b/lib/pleroma/web/media_proxy/media_proxy_controller.ex @@ -82,17 +82,16 @@ defmodule Pleroma.Web.MediaProxy.MediaProxyController do {thumbnail_max_width, thumbnail_max_height} end - defp handle_preview("image/" <> _ = content_type, %{params: params} = conn, url) do + defp handle_preview("image/" <> _ = _content_type, %{params: params} = conn, url) do with {thumbnail_max_width, thumbnail_max_height} <- thumbnail_max_dimensions(params), media_proxy_url <- MediaProxy.url(url), {:ok, thumbnail_binary} <- MediaHelper.ffmpeg_resize_remote( media_proxy_url, - thumbnail_max_width, - thumbnail_max_height + %{max_width: thumbnail_max_width, max_height: thumbnail_max_height} ) do conn - |> put_resp_header("content-type", content_type) + |> put_resp_header("content-type", "image/jpeg") |> send_resp(200, thumbnail_binary) else _ -> From 3a1e810aaaea3e44c4dfc82a014485cf886d6b88 Mon Sep 17 00:00:00 2001 From: Ivan Tashkinov Date: Thu, 21 May 2020 21:47:32 +0300 Subject: [PATCH 006/102] [#2497] Customized `exexec` launch to support root operation (currently required by Gitlab CI). --- .gitlab-ci.yml | 1 + config/config.exs | 4 +++ lib/pleroma/exec.ex | 38 +++++++++++++++++++++++++++++ lib/pleroma/helpers/media_helper.ex | 4 +-- mix.exs | 3 ++- test/exec_test.exs | 13 ++++++++++ 6 files changed, 59 insertions(+), 4 deletions(-) create mode 100644 lib/pleroma/exec.ex create mode 100644 test/exec_test.exs diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index aad28a2d8..14300f3bf 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -6,6 +6,7 @@ variables: &global_variables POSTGRES_PASSWORD: postgres DB_HOST: postgres MIX_ENV: test + USER: root cache: &global_cache_policy key: ${CI_COMMIT_REF_SLUG} diff --git a/config/config.exs b/config/config.exs index 838508c1b..d1440b7bf 100644 --- a/config/config.exs +++ b/config/config.exs @@ -681,6 +681,10 @@ config :pleroma, :restrict_unauthenticated, config :pleroma, Pleroma.Web.ApiSpec.CastAndValidate, strict: false +config :pleroma, :exexec, + root_mode: false, + options: %{} + # Import environment specific config. This must remain at the bottom # of this file so it overrides the configuration defined above. import_config "#{Mix.env()}.exs" diff --git a/lib/pleroma/exec.ex b/lib/pleroma/exec.ex new file mode 100644 index 000000000..1b088d322 --- /dev/null +++ b/lib/pleroma/exec.ex @@ -0,0 +1,38 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2020 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + +defmodule Pleroma.Exec do + @moduledoc "Pleroma wrapper around Exexec commands." + + alias Pleroma.Config + + def ensure_started(options_overrides \\ %{}) do + options = + if Config.get([:exexec, :root_mode]) || System.get_env("USER") == "root" do + # Note: running as `root` is discouraged (yet Gitlab CI does that by default) + %{root: true, user: "root", limit_users: ["root"]} + else + %{} + end + + options = + options + |> Map.merge(Config.get([:exexec, :options], %{})) + |> Map.merge(options_overrides) + + with {:error, {:already_started, pid}} <- Exexec.start(options) do + {:ok, pid} + end + end + + def run(cmd, options \\ %{}) do + ensure_started() + Exexec.run(cmd, options) + end + + def cmd(cmd, options \\ %{}) do + options = Map.merge(%{sync: true, stdout: true}, options) + run(cmd, options) + end +end diff --git a/lib/pleroma/helpers/media_helper.ex b/lib/pleroma/helpers/media_helper.ex index ee6b76c41..ecd234558 100644 --- a/lib/pleroma/helpers/media_helper.ex +++ b/lib/pleroma/helpers/media_helper.ex @@ -7,8 +7,6 @@ defmodule Pleroma.Helpers.MediaHelper do Handles common media-related operations. """ - @ffmpeg_opts [{:sync, true}, {:stdout, true}] - def ffmpeg_resize_remote(uri, %{max_width: max_width, max_height: max_height}) do cmd = ~s""" curl -L "#{uri}" | @@ -20,7 +18,7 @@ defmodule Pleroma.Helpers.MediaHelper do cat """ - with {:ok, [stdout: stdout_list]} <- Exexec.run(cmd, @ffmpeg_opts) do + with {:ok, [stdout: stdout_list]} <- Pleroma.Exec.cmd(cmd) do {:ok, Enum.join(stdout_list)} end end diff --git a/mix.exs b/mix.exs index 4c9bbc0ab..3215086ca 100644 --- a/mix.exs +++ b/mix.exs @@ -197,7 +197,8 @@ defmodule Pleroma.Mixfile do ref: "e0f16822d578866e186a0974d65ad58cddc1e2ab"}, {:mox, "~> 0.5", only: :test}, {:restarter, path: "./restarter"}, - {:exexec, "~> 0.2"}, + # Note: `runtime: true` for :exexec makes CI fail due to `root` user (see Pleroma.Exec) + {:exexec, "~> 0.2", runtime: false}, {:open_api_spex, git: "https://git.pleroma.social/pleroma/elixir-libraries/open_api_spex.git", ref: "f296ac0924ba3cf79c7a588c4c252889df4c2edd"} diff --git a/test/exec_test.exs b/test/exec_test.exs new file mode 100644 index 000000000..45d3f778f --- /dev/null +++ b/test/exec_test.exs @@ -0,0 +1,13 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2020 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + +defmodule Pleroma.ExecTest do + alias Pleroma.Exec + + use Pleroma.DataCase + + test "it starts" do + assert {:ok, _} = Exec.ensure_started() + end +end From 0e23138b50f1fdd9ea78df31eec1b3caac905e2c Mon Sep 17 00:00:00 2001 From: Ivan Tashkinov Date: Fri, 22 May 2020 10:35:48 +0300 Subject: [PATCH 007/102] [#2497] Specified SHELL in .gitlab-ci.yml as required for `exexec`. --- .gitlab-ci.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 14300f3bf..e596aa0ec 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -6,6 +6,7 @@ variables: &global_variables POSTGRES_PASSWORD: postgres DB_HOST: postgres MIX_ENV: test + SHELL: /bin/sh USER: root cache: &global_cache_policy From 9faa63203717e71d666afb6755ff0b781b491823 Mon Sep 17 00:00:00 2001 From: Ivan Tashkinov Date: Sun, 5 Jul 2020 19:02:43 +0300 Subject: [PATCH 008/102] [#2497] Fixed merge issue. --- lib/pleroma/web/media_proxy/media_proxy_controller.ex | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/pleroma/web/media_proxy/media_proxy_controller.ex b/lib/pleroma/web/media_proxy/media_proxy_controller.ex index 0f4575e2f..583c177f2 100644 --- a/lib/pleroma/web/media_proxy/media_proxy_controller.ex +++ b/lib/pleroma/web/media_proxy/media_proxy_controller.ex @@ -12,8 +12,8 @@ defmodule Pleroma.Web.MediaProxy.MediaProxyController do def remote(conn, %{"sig" => sig64, "url" => url64}) do with {_, true} <- {:enabled, MediaProxy.enabled?()}, - {_, false} <- {:in_banned_urls, MediaProxy.in_banned_urls(url)}, {:ok, url} <- MediaProxy.decode_url(sig64, url64), + {_, false} <- {:in_banned_urls, MediaProxy.in_banned_urls(url)}, :ok <- MediaProxy.verify_request_path_and_url(conn, url) do proxy_opts = Config.get([:media_proxy, :proxy_opts], []) ReverseProxy.call(conn, url, proxy_opts) From b8021016ebef23903c59e5140d4efb456a84a347 Mon Sep 17 00:00:00 2001 From: Ivan Tashkinov Date: Tue, 21 Jul 2020 20:03:14 +0300 Subject: [PATCH 009/102] [#2497] Resolved merge conflicts. --- .../media_proxy_controller_test.exs | 39 ------------------- test/web/media_proxy/media_proxy_test.exs | 24 ++++-------- 2 files changed, 7 insertions(+), 56 deletions(-) diff --git a/test/web/media_proxy/media_proxy_controller_test.exs b/test/web/media_proxy/media_proxy_controller_test.exs index d4db44c63..0cda1e0b0 100644 --- a/test/web/media_proxy/media_proxy_controller_test.exs +++ b/test/web/media_proxy/media_proxy_controller_test.exs @@ -79,43 +79,4 @@ defmodule Pleroma.Web.MediaProxy.MediaProxyControllerTest do end end end - - describe "filename_matches/3" do - test "preserves the encoded or decoded path" do - assert MediaProxyController.filename_matches( - %{"filename" => "/Hello world.jpg"}, - "/Hello world.jpg", - "http://pleroma.social/Hello world.jpg" - ) == :ok - - assert MediaProxyController.filename_matches( - %{"filename" => "/Hello%20world.jpg"}, - "/Hello%20world.jpg", - "http://pleroma.social/Hello%20world.jpg" - ) == :ok - - assert MediaProxyController.filename_matches( - %{"filename" => "/my%2Flong%2Furl%2F2019%2F07%2FS.jpg"}, - "/my%2Flong%2Furl%2F2019%2F07%2FS.jpg", - "http://pleroma.social/my%2Flong%2Furl%2F2019%2F07%2FS.jpg" - ) == :ok - - assert MediaProxyController.filename_matches( - %{"filename" => "/my%2Flong%2Furl%2F2019%2F07%2FS.jp"}, - "/my%2Flong%2Furl%2F2019%2F07%2FS.jp", - "http://pleroma.social/my%2Flong%2Furl%2F2019%2F07%2FS.jpg" - ) == {:wrong_filename, "my%2Flong%2Furl%2F2019%2F07%2FS.jpg"} - end - - test "encoded url are tried to match for proxy as `conn.request_path` encodes the url" do - # conn.request_path will return encoded url - request_path = "/ANALYSE-DAI-_-LE-STABLECOIN-100-D%C3%89CENTRALIS%C3%89-BQ.jpg" - - assert MediaProxyController.filename_matches( - true, - request_path, - "https://mydomain.com/uploads/2019/07/ANALYSE-DAI-_-LE-STABLECOIN-100-DÉCENTRALISÉ-BQ.jpg" - ) == :ok - end - end end diff --git a/test/web/media_proxy/media_proxy_test.exs b/test/web/media_proxy/media_proxy_test.exs index 06990464f..0e6df826c 100644 --- a/test/web/media_proxy/media_proxy_test.exs +++ b/test/web/media_proxy/media_proxy_test.exs @@ -126,6 +126,13 @@ defmodule Pleroma.Web.MediaProxyTest do :ok ) + test_verify_request_path_and_url( + # Note: `conn.request_path` returns encoded url + "/ANALYSE-DAI-_-LE-STABLECOIN-100-D%C3%89CENTRALIS%C3%89-BQ.jpg", + "https://mydomain.com/uploads/2019/07/ANALYSE-DAI-_-LE-STABLECOIN-100-DÉCENTRALISÉ-BQ.jpg", + :ok + ) + test_verify_request_path_and_url( "/my%2Flong%2Furl%2F2019%2F07%2FS", "http://pleroma.social/my%2Flong%2Furl%2F2019%2F07%2FS.jpg", @@ -133,17 +140,6 @@ defmodule Pleroma.Web.MediaProxyTest do ) end - test "encoded url are tried to match for proxy as `conn.request_path` encodes the url" do - # conn.request_path will return encoded url - request_path = "/ANALYSE-DAI-_-LE-STABLECOIN-100-D%C3%89CENTRALIS%C3%89-BQ.jpg" - - assert MediaProxy.verify_request_path_and_url( - request_path, - "https://mydomain.com/uploads/2019/07/ANALYSE-DAI-_-LE-STABLECOIN-100-DÉCENTRALISÉ-BQ.jpg" - ) == :ok - assert MediaProxy.decode_url(sig, base64) == {:error, :invalid_signature} - end - test "uses the configured base_url" do base_url = "https://cache.pleroma.social" clear_config([:media_proxy, :base_url], base_url) @@ -193,12 +189,6 @@ defmodule Pleroma.Web.MediaProxyTest do end end - defp decode_result(encoded) do - [_, "proxy", sig, base64 | _] = URI.parse(encoded).path |> String.split("/") - {:ok, decoded} = MediaProxy.decode_url(sig, base64) - decoded - end - describe "whitelist" do setup do: clear_config([:media_proxy, :enabled], true) From 56ddf20208657487bf0298409cf91b11dac346ff Mon Sep 17 00:00:00 2001 From: Ivan Tashkinov Date: Fri, 7 Aug 2020 09:43:49 +0300 Subject: [PATCH 010/102] Removed unused alias. --- test/web/media_proxy/media_proxy_controller_test.exs | 1 - 1 file changed, 1 deletion(-) diff --git a/test/web/media_proxy/media_proxy_controller_test.exs b/test/web/media_proxy/media_proxy_controller_test.exs index 0cda1e0b0..0dd2fd10c 100644 --- a/test/web/media_proxy/media_proxy_controller_test.exs +++ b/test/web/media_proxy/media_proxy_controller_test.exs @@ -8,7 +8,6 @@ defmodule Pleroma.Web.MediaProxy.MediaProxyControllerTest do import Mock alias Pleroma.Web.MediaProxy - alias Pleroma.Web.MediaProxy.MediaProxyController alias Plug.Conn setup do From da116d81fb0028913c2a0f30ac35532fb500e8fc Mon Sep 17 00:00:00 2001 From: Ivan Tashkinov Date: Tue, 18 Aug 2020 18:23:27 +0300 Subject: [PATCH 011/102] [#2497] Added video preview proxy. Switched from exexec to Port. --- .gitlab-ci.yml | 2 - config/config.exs | 4 -- lib/pleroma/exec.ex | 38 -------------- lib/pleroma/helpers/media_helper.ex | 19 ++++--- .../web/media_proxy/media_proxy_controller.ex | 50 +++++++++++-------- mix.exs | 2 - mix.lock | 2 - test/exec_test.exs | 13 ----- 8 files changed, 41 insertions(+), 89 deletions(-) delete mode 100644 lib/pleroma/exec.ex delete mode 100644 test/exec_test.exs diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 3b6877039..9e9107ce3 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -6,8 +6,6 @@ variables: &global_variables POSTGRES_PASSWORD: postgres DB_HOST: postgres MIX_ENV: test - SHELL: /bin/sh - USER: root cache: &global_cache_policy key: ${CI_COMMIT_REF_SLUG} diff --git a/config/config.exs b/config/config.exs index ab4508ccf..029f8ec20 100644 --- a/config/config.exs +++ b/config/config.exs @@ -761,10 +761,6 @@ config :floki, :html_parser, Floki.HTMLParser.FastHtml config :pleroma, Pleroma.Web.Auth.Authenticator, Pleroma.Web.Auth.PleromaAuthenticator -config :pleroma, :exexec, - root_mode: false, - options: %{} - # Import environment specific config. This must remain at the bottom # of this file so it overrides the configuration defined above. import_config "#{Mix.env()}.exs" diff --git a/lib/pleroma/exec.ex b/lib/pleroma/exec.ex deleted file mode 100644 index 1b088d322..000000000 --- a/lib/pleroma/exec.ex +++ /dev/null @@ -1,38 +0,0 @@ -# Pleroma: A lightweight social networking server -# Copyright © 2017-2020 Pleroma Authors -# SPDX-License-Identifier: AGPL-3.0-only - -defmodule Pleroma.Exec do - @moduledoc "Pleroma wrapper around Exexec commands." - - alias Pleroma.Config - - def ensure_started(options_overrides \\ %{}) do - options = - if Config.get([:exexec, :root_mode]) || System.get_env("USER") == "root" do - # Note: running as `root` is discouraged (yet Gitlab CI does that by default) - %{root: true, user: "root", limit_users: ["root"]} - else - %{} - end - - options = - options - |> Map.merge(Config.get([:exexec, :options], %{})) - |> Map.merge(options_overrides) - - with {:error, {:already_started, pid}} <- Exexec.start(options) do - {:ok, pid} - end - end - - def run(cmd, options \\ %{}) do - ensure_started() - Exexec.run(cmd, options) - end - - def cmd(cmd, options \\ %{}) do - options = Map.merge(%{sync: true, stdout: true}, options) - run(cmd, options) - end -end diff --git a/lib/pleroma/helpers/media_helper.ex b/lib/pleroma/helpers/media_helper.ex index ecd234558..ca46698cc 100644 --- a/lib/pleroma/helpers/media_helper.ex +++ b/lib/pleroma/helpers/media_helper.ex @@ -7,19 +7,24 @@ defmodule Pleroma.Helpers.MediaHelper do Handles common media-related operations. """ - def ffmpeg_resize_remote(uri, %{max_width: max_width, max_height: max_height}) do + def ffmpeg_resize(uri_or_path, %{max_width: max_width, max_height: max_height}) do cmd = ~s""" - curl -L "#{uri}" | - ffmpeg -i pipe:0 -f lavfi -i color=c=white \ + ffmpeg -i #{uri_or_path} -f lavfi -i color=c=white \ -filter_complex "[0:v] scale='min(#{max_width},iw)':'min(#{max_height},ih)': \ force_original_aspect_ratio=decrease [scaled]; \ [1][scaled] scale2ref [bg][img]; [bg] setsar=1 [bg]; [bg][img] overlay=shortest=1" \ - -f image2 -vcodec mjpeg -frames:v 1 pipe:1 | \ - cat + -loglevel quiet -f image2 -vcodec mjpeg -frames:v 1 pipe:1 """ - with {:ok, [stdout: stdout_list]} <- Pleroma.Exec.cmd(cmd) do - {:ok, Enum.join(stdout_list)} + pid = Port.open({:spawn, cmd}, [:use_stdio, :in, :stream, :exit_status, :binary]) + + receive do + {^pid, {:data, data}} -> + send(pid, {self(), :close}) + {:ok, data} + + {^pid, {:exit_status, status}} when status > 0 -> + {:error, status} end end end diff --git a/lib/pleroma/web/media_proxy/media_proxy_controller.ex b/lib/pleroma/web/media_proxy/media_proxy_controller.ex index 583c177f2..8861398dd 100644 --- a/lib/pleroma/web/media_proxy/media_proxy_controller.ex +++ b/lib/pleroma/web/media_proxy/media_proxy_controller.ex @@ -66,6 +66,35 @@ defmodule Pleroma.Web.MediaProxy.MediaProxyController do end end + defp handle_preview("image/" <> _ = _content_type, conn, url) do + handle_image_or_video_preview(conn, url) + end + + defp handle_preview("video/" <> _ = _content_type, conn, url) do + handle_image_or_video_preview(conn, url) + end + + defp handle_preview(content_type, conn, _url) do + send_resp(conn, :unprocessable_entity, "Unsupported content type: #{content_type}.") + end + + defp handle_image_or_video_preview(%{params: params} = conn, url) do + with {thumbnail_max_width, thumbnail_max_height} <- thumbnail_max_dimensions(params), + media_proxy_url <- MediaProxy.url(url), + {:ok, thumbnail_binary} <- + MediaHelper.ffmpeg_resize( + media_proxy_url, + %{max_width: thumbnail_max_width, max_height: thumbnail_max_height} + ) do + conn + |> put_resp_header("content-type", "image/jpeg") + |> send_resp(200, thumbnail_binary) + else + _ -> + send_resp(conn, :failed_dependency, "Can't handle preview.") + end + end + defp thumbnail_max_dimensions(params) do config = Config.get([:media_preview_proxy], []) @@ -86,27 +115,6 @@ defmodule Pleroma.Web.MediaProxy.MediaProxyController do {thumbnail_max_width, thumbnail_max_height} end - defp handle_preview("image/" <> _ = _content_type, %{params: params} = conn, url) do - with {thumbnail_max_width, thumbnail_max_height} <- thumbnail_max_dimensions(params), - media_proxy_url <- MediaProxy.url(url), - {:ok, thumbnail_binary} <- - MediaHelper.ffmpeg_resize_remote( - media_proxy_url, - %{max_width: thumbnail_max_width, max_height: thumbnail_max_height} - ) do - conn - |> put_resp_header("content-type", "image/jpeg") - |> send_resp(200, thumbnail_binary) - else - _ -> - send_resp(conn, :failed_dependency, "Can't handle image preview.") - end - end - - defp handle_preview(content_type, conn, _url) do - send_resp(conn, :unprocessable_entity, "Unsupported content type: #{content_type}.") - end - defp preview_head_request_timeout do Config.get([:media_preview_proxy, :proxy_opts, :head_request_max_read_duration]) || preview_timeout() diff --git a/mix.exs b/mix.exs index 33c4411c4..11fdb1670 100644 --- a/mix.exs +++ b/mix.exs @@ -186,8 +186,6 @@ defmodule Pleroma.Mixfile do git: "https://git.pleroma.social/pleroma/elixir-libraries/elixir-captcha.git", ref: "e0f16822d578866e186a0974d65ad58cddc1e2ab"}, {:restarter, path: "./restarter"}, - # Note: `runtime: true` for :exexec makes CI fail due to `root` user (see Pleroma.Exec) - {:exexec, "~> 0.2", runtime: false}, {:open_api_spex, git: "https://git.pleroma.social/pleroma/elixir-libraries/open_api_spex.git", ref: "f296ac0924ba3cf79c7a588c4c252889df4c2edd"}, diff --git a/mix.lock b/mix.lock index f5acc89eb..553ac304a 100644 --- a/mix.lock +++ b/mix.lock @@ -33,7 +33,6 @@ "ecto_sql": {:hex, :ecto_sql, "3.4.5", "30161f81b167d561a9a2df4329c10ae05ff36eca7ccc84628f2c8b9fa1e43323", [:mix], [{:db_connection, "~> 2.2", [hex: :db_connection, repo: "hexpm", optional: false]}, {:ecto, "~> 3.4.3", [hex: :ecto, repo: "hexpm", optional: false]}, {:myxql, "~> 0.3.0 or ~> 0.4.0", [hex: :myxql, repo: "hexpm", optional: true]}, {:postgrex, "~> 0.15.0", [hex: :postgrex, repo: "hexpm", optional: true]}, {:tds, "~> 2.1.0", [hex: :tds, repo: "hexpm", optional: true]}, {:telemetry, "~> 0.4.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "31990c6a3579b36a3c0841d34a94c275e727de8b84f58509da5f1b2032c98ac2"}, "eimp": {:hex, :eimp, "1.0.14", "fc297f0c7e2700457a95a60c7010a5f1dcb768a083b6d53f49cd94ab95a28f22", [:rebar3], [{:p1_utils, "1.0.18", [hex: :p1_utils, repo: "hexpm", optional: false]}], "hexpm", "501133f3112079b92d9e22da8b88bf4f0e13d4d67ae9c15c42c30bd25ceb83b6"}, "elixir_make": {:hex, :elixir_make, "0.6.0", "38349f3e29aff4864352084fc736fa7fa0f2995a819a737554f7ebd28b85aaab", [:mix], [], "hexpm", "d522695b93b7f0b4c0fcb2dfe73a6b905b1c301226a5a55cb42e5b14d509e050"}, - "erlexec": {:hex, :erlexec, "1.10.9", "3cbb3476f942bfb8b68b85721c21c1835061cf6dd35f5285c2362e85b100ddc7", [:rebar3], [], "hexpm", "271e5b5f2d91cdb9887efe74d89026c199bfc69f074cade0d08dab60993fa14e"}, "esshd": {:hex, :esshd, "0.1.1", "d4dd4c46698093a40a56afecce8a46e246eb35463c457c246dacba2e056f31b5", [:mix], [], "hexpm", "d73e341e3009d390aa36387dc8862860bf9f874c94d9fd92ade2926376f49981"}, "eternal": {:hex, :eternal, "1.2.1", "d5b6b2499ba876c57be2581b5b999ee9bdf861c647401066d3eeed111d096bc4", [:mix], [], "hexpm", "b14f1dc204321429479c569cfbe8fb287541184ed040956c8862cb7a677b8406"}, "ex2ms": {:hex, :ex2ms, "1.5.0", "19e27f9212be9a96093fed8cdfbef0a2b56c21237196d26760f11dfcfae58e97", [:mix], [], "hexpm"}, @@ -44,7 +43,6 @@ "ex_machina": {:hex, :ex_machina, "2.4.0", "09a34c5d371bfb5f78399029194a8ff67aff340ebe8ba19040181af35315eabb", [:mix], [{:ecto, "~> 2.2 or ~> 3.0", [hex: :ecto, repo: "hexpm", optional: true]}, {:ecto_sql, "~> 3.0", [hex: :ecto_sql, repo: "hexpm", optional: true]}], "hexpm", "a20bc9ddc721b33ea913b93666c5d0bdca5cbad7a67540784ae277228832d72c"}, "ex_syslogger": {:hex, :ex_syslogger, "1.5.2", "72b6aa2d47a236e999171f2e1ec18698740f40af0bd02c8c650bf5f1fd1bac79", [:mix], [{:poison, ">= 1.5.0", [hex: :poison, repo: "hexpm", optional: true]}, {:syslog, "~> 1.1.0", [hex: :syslog, repo: "hexpm", optional: false]}], "hexpm", "ab9fab4136dbc62651ec6f16fa4842f10cf02ab4433fa3d0976c01be99398399"}, "excoveralls": {:hex, :excoveralls, "0.13.1", "b9f1697f7c9e0cfe15d1a1d737fb169c398803ffcbc57e672aa007e9fd42864c", [:mix], [{:hackney, "~> 1.16", [hex: :hackney, repo: "hexpm", optional: false]}, {:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: false]}], "hexpm", "b4bb550e045def1b4d531a37fb766cbbe1307f7628bf8f0414168b3f52021cce"}, - "exexec": {:hex, :exexec, "0.2.0", "a6ffc48cba3ac9420891b847e4dc7120692fb8c08c9e82220ebddc0bb8d96103", [:mix], [{:erlexec, "~> 1.10", [hex: :erlexec, repo: "hexpm", optional: false]}], "hexpm", "312cd1c9befba9e078e57f3541e4f4257eabda6eb9c348154fe899d6ac633299"}, "fast_html": {:hex, :fast_html, "2.0.1", "e126c74d287768ae78c48938da6711164517300d108a78f8a38993df8d588335", [:make, :mix], [{:elixir_make, "~> 0.4", [hex: :elixir_make, repo: "hexpm", optional: false]}, {:nimble_pool, "~> 0.1.0", [hex: :nimble_pool, repo: "hexpm", optional: false]}], "hexpm", "bdd6f8525c95ad391a4f10d9a1b3da4cea94078ec8638487aa8c24015ad9393a"}, "fast_sanitize": {:hex, :fast_sanitize, "0.2.0", "004b40d5bbecda182b6fdba762a51fffd3501e689e8eafe196e1a97eb0caf733", [:mix], [{:fast_html, "~> 2.0", [hex: :fast_html, repo: "hexpm", optional: false]}, {:plug, "~> 1.8", [hex: :plug, repo: "hexpm", optional: false]}], "hexpm", "11fcb37f26d272a3a2aff861872bf100be4eeacea69505908b8cdbcea5b0813a"}, "flake_id": {:hex, :flake_id, "0.1.0", "7716b086d2e405d09b647121a166498a0d93d1a623bead243e1f74216079ccb3", [:mix], [{:base62, "~> 1.2", [hex: :base62, repo: "hexpm", optional: false]}, {:ecto, ">= 2.0.0", [hex: :ecto, repo: "hexpm", optional: true]}], "hexpm", "31fc8090fde1acd267c07c36ea7365b8604055f897d3a53dd967658c691bd827"}, diff --git a/test/exec_test.exs b/test/exec_test.exs deleted file mode 100644 index 45d3f778f..000000000 --- a/test/exec_test.exs +++ /dev/null @@ -1,13 +0,0 @@ -# Pleroma: A lightweight social networking server -# Copyright © 2017-2020 Pleroma Authors -# SPDX-License-Identifier: AGPL-3.0-only - -defmodule Pleroma.ExecTest do - alias Pleroma.Exec - - use Pleroma.DataCase - - test "it starts" do - assert {:ok, _} = Exec.ensure_started() - end -end From 4ee15e991efb5bd5bf69d84d27dbbee81443d1dc Mon Sep 17 00:00:00 2001 From: Ivan Tashkinov Date: Wed, 19 Aug 2020 21:36:26 +0300 Subject: [PATCH 012/102] [#2497] Media preview proxy config refactoring & documentation. --- config/config.exs | 3 +- config/description.exs | 51 +++++++++++++++++++ .../web/media_proxy/media_proxy_controller.ex | 20 ++++---- 3 files changed, 63 insertions(+), 11 deletions(-) diff --git a/config/config.exs b/config/config.exs index 029f8ec20..6e6231cf8 100644 --- a/config/config.exs +++ b/config/config.exs @@ -444,8 +444,7 @@ config :pleroma, :media_preview_proxy, thumbnail_max_width: 400, thumbnail_max_height: 200, proxy_opts: [ - head_request_max_read_duration: 5_000, - max_read_duration: 10_000 + head_request_max_read_duration: 5_000 ] config :pleroma, :chat, enabled: true diff --git a/config/description.exs b/config/description.exs index e27abf40f..90d8eca65 100644 --- a/config/description.exs +++ b/config/description.exs @@ -1831,6 +1831,7 @@ config :pleroma, :config_description, [ suggestions: [ redirect_on_failure: false, max_body_length: 25 * 1_048_576, + max_read_duration: 30_000, http: [ follow_redirect: true, pool: :media @@ -1851,6 +1852,11 @@ config :pleroma, :config_description, [ "Limits the content length to be approximately the " <> "specified length. It is validated with the `content-length` header and also verified when proxying." }, + %{ + key: :max_read_duration, + type: :integer, + description: "Timeout (in milliseconds) of GET request to remote URI." + }, %{ key: :http, label: "HTTP", @@ -1897,6 +1903,51 @@ config :pleroma, :config_description, [ } ] }, + %{ + group: :pleroma, + key: :media_preview_proxy, + type: :group, + description: "Media preview proxy", + children: [ + %{ + key: :enabled, + type: :boolean, + description: + "Enables proxying of remote media preview to the instance's proxy. Requires enabled media proxy." + }, + %{ + key: :thumbnail_max_width, + type: :integer, + description: "Max width of preview thumbnail." + }, + %{ + key: :thumbnail_max_height, + type: :integer, + description: "Max height of preview thumbnail." + }, + %{ + key: :proxy_opts, + type: :keyword, + description: "Media proxy options", + suggestions: [ + head_request_max_read_duration: 5_000 + ], + children: [ + %{ + key: :head_request_max_read_duration, + type: :integer, + description: "Timeout (in milliseconds) of HEAD request to remote URI." + } + ] + }, + %{ + key: :whitelist, + type: {:list, :string}, + description: "List of hosts with scheme to bypass the mediaproxy", + suggestions: ["http://example.com"] + } + ] + }, %{ group: :pleroma, key: Pleroma.Web.MediaProxy.Invalidation.Http, diff --git a/lib/pleroma/web/media_proxy/media_proxy_controller.ex b/lib/pleroma/web/media_proxy/media_proxy_controller.ex index 8861398dd..31d18c119 100644 --- a/lib/pleroma/web/media_proxy/media_proxy_controller.ex +++ b/lib/pleroma/web/media_proxy/media_proxy_controller.ex @@ -15,8 +15,7 @@ defmodule Pleroma.Web.MediaProxy.MediaProxyController do {:ok, url} <- MediaProxy.decode_url(sig64, url64), {_, false} <- {:in_banned_urls, MediaProxy.in_banned_urls(url)}, :ok <- MediaProxy.verify_request_path_and_url(conn, url) do - proxy_opts = Config.get([:media_proxy, :proxy_opts], []) - ReverseProxy.call(conn, url, proxy_opts) + ReverseProxy.call(conn, url, media_proxy_opts()) else {:enabled, false} -> send_resp(conn, 404, Plug.Conn.Status.reason_phrase(404)) @@ -116,13 +115,16 @@ defmodule Pleroma.Web.MediaProxy.MediaProxyController do end defp preview_head_request_timeout do - Config.get([:media_preview_proxy, :proxy_opts, :head_request_max_read_duration]) || - preview_timeout() - end - - defp preview_timeout do - Config.get([:media_preview_proxy, :proxy_opts, :max_read_duration]) || - Config.get([:media_proxy, :proxy_opts, :max_read_duration]) || + Keyword.get(media_preview_proxy_opts(), :head_request_max_read_duration) || + Keyword.get(media_proxy_opts(), :max_read_duration) || ReverseProxy.max_read_duration_default() end + + defp media_proxy_opts do + Config.get([:media_proxy, :proxy_opts], []) + end + + defp media_preview_proxy_opts do + Config.get([:media_preview_proxy, :proxy_opts], []) + end end From 02ad1cd8e97c44824b92b53ea1879a965bbd8358 Mon Sep 17 00:00:00 2001 From: Ivan Tashkinov Date: Thu, 20 Aug 2020 09:58:50 +0300 Subject: [PATCH 013/102] [#2497] Media preview proxy: added Content-Disposition header with filename to response. --- lib/pleroma/web/media_proxy/media_proxy_controller.ex | 1 + 1 file changed, 1 insertion(+) diff --git a/lib/pleroma/web/media_proxy/media_proxy_controller.ex b/lib/pleroma/web/media_proxy/media_proxy_controller.ex index 31d18c119..5513432f0 100644 --- a/lib/pleroma/web/media_proxy/media_proxy_controller.ex +++ b/lib/pleroma/web/media_proxy/media_proxy_controller.ex @@ -87,6 +87,7 @@ defmodule Pleroma.Web.MediaProxy.MediaProxyController do ) do conn |> put_resp_header("content-type", "image/jpeg") + |> put_resp_header("content-disposition", "inline; filename=\"preview.jpg\"") |> send_resp(200, thumbnail_binary) else _ -> From aa0a5ffb4849880b5adbcc9188de01ef778381e3 Mon Sep 17 00:00:00 2001 From: Ivan Tashkinov Date: Fri, 21 Aug 2020 08:59:08 +0300 Subject: [PATCH 014/102] [#2497] Media preview proxy: added `quality` config setting, adjusted width/height defaults. --- config/config.exs | 5 +++-- config/description.exs | 5 +++++ lib/pleroma/helpers/media_helper.ex | 6 ++++-- lib/pleroma/web/media_proxy/media_proxy_controller.ex | 4 +++- 4 files changed, 15 insertions(+), 5 deletions(-) diff --git a/config/config.exs b/config/config.exs index 6e6231cf8..b399ce6d7 100644 --- a/config/config.exs +++ b/config/config.exs @@ -441,8 +441,9 @@ config :pleroma, Pleroma.Web.MediaProxy.Invalidation.Script, script_path: nil # Note: media preview proxy depends on media proxy to be enabled config :pleroma, :media_preview_proxy, enabled: false, - thumbnail_max_width: 400, - thumbnail_max_height: 200, + thumbnail_max_width: 600, + thumbnail_max_height: 600, + quality: 2, proxy_opts: [ head_request_max_read_duration: 5_000 ] diff --git a/config/description.exs b/config/description.exs index 90d8eca65..22da60900 100644 --- a/config/description.exs +++ b/config/description.exs @@ -1925,6 +1925,11 @@ config :pleroma, :config_description, [ type: :integer, description: "Max height of preview thumbnail." }, + %{ + key: :quality, + type: :integer, + description: "Quality of the output. Ranges from 1 (max quality) to 31 (lowest quality)." + }, %{ key: :proxy_opts, type: :keyword, diff --git a/lib/pleroma/helpers/media_helper.ex b/lib/pleroma/helpers/media_helper.ex index ca46698cc..e11038052 100644 --- a/lib/pleroma/helpers/media_helper.ex +++ b/lib/pleroma/helpers/media_helper.ex @@ -7,13 +7,15 @@ defmodule Pleroma.Helpers.MediaHelper do Handles common media-related operations. """ - def ffmpeg_resize(uri_or_path, %{max_width: max_width, max_height: max_height}) do + def ffmpeg_resize(uri_or_path, %{max_width: max_width, max_height: max_height} = options) do + quality = options[:quality] || 1 + cmd = ~s""" ffmpeg -i #{uri_or_path} -f lavfi -i color=c=white \ -filter_complex "[0:v] scale='min(#{max_width},iw)':'min(#{max_height},ih)': \ force_original_aspect_ratio=decrease [scaled]; \ [1][scaled] scale2ref [bg][img]; [bg] setsar=1 [bg]; [bg][img] overlay=shortest=1" \ - -loglevel quiet -f image2 -vcodec mjpeg -frames:v 1 pipe:1 + -loglevel quiet -f image2 -vcodec mjpeg -frames:v 1 -q:v #{quality} pipe:1 """ pid = Port.open({:spawn, cmd}, [:use_stdio, :in, :stream, :exit_status, :binary]) diff --git a/lib/pleroma/web/media_proxy/media_proxy_controller.ex b/lib/pleroma/web/media_proxy/media_proxy_controller.ex index 5513432f0..1c51aa5e3 100644 --- a/lib/pleroma/web/media_proxy/media_proxy_controller.ex +++ b/lib/pleroma/web/media_proxy/media_proxy_controller.ex @@ -78,12 +78,14 @@ defmodule Pleroma.Web.MediaProxy.MediaProxyController do end defp handle_image_or_video_preview(%{params: params} = conn, url) do + quality = Config.get!([:media_preview_proxy, :quality]) + with {thumbnail_max_width, thumbnail_max_height} <- thumbnail_max_dimensions(params), media_proxy_url <- MediaProxy.url(url), {:ok, thumbnail_binary} <- MediaHelper.ffmpeg_resize( media_proxy_url, - %{max_width: thumbnail_max_width, max_height: thumbnail_max_height} + %{max_width: thumbnail_max_width, max_height: thumbnail_max_height, quality: quality} ) do conn |> put_resp_header("content-type", "image/jpeg") From 967afa064bb0dc85c054495b795a57a13cdf3b3c Mon Sep 17 00:00:00 2001 From: href Date: Fri, 21 Aug 2020 17:02:57 +0000 Subject: [PATCH 015/102] Fix truncated images --- lib/pleroma/helpers/media_helper.ex | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/lib/pleroma/helpers/media_helper.ex b/lib/pleroma/helpers/media_helper.ex index e11038052..f87be8874 100644 --- a/lib/pleroma/helpers/media_helper.ex +++ b/lib/pleroma/helpers/media_helper.ex @@ -19,14 +19,24 @@ defmodule Pleroma.Helpers.MediaHelper do """ pid = Port.open({:spawn, cmd}, [:use_stdio, :in, :stream, :exit_status, :binary]) + loop_recv(pid) + end + defp loop_recv(pid) do + loop_recv(pid, <<>>) + end + + defp loop_recv(pid, acc) do receive do {^pid, {:data, data}} -> - send(pid, {self(), :close}) - {:ok, data} + loop_recv(pid, acc <> data) - {^pid, {:exit_status, status}} when status > 0 -> + {^pid, {:exit_status, 0}} -> + {:ok, acc} + + {^pid, {:exit_status, status}} -> {:error, status} end end + end From 4e6eb22b4af70e611cc61f94ba3d81758036a392 Mon Sep 17 00:00:00 2001 From: Mark Felder Date: Fri, 21 Aug 2020 12:19:35 -0500 Subject: [PATCH 016/102] Try to warm the cache with the preview image if preview proxy enabled --- lib/pleroma/web/activity_pub/mrf/media_proxy_warming_policy.ex | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/pleroma/web/activity_pub/mrf/media_proxy_warming_policy.ex b/lib/pleroma/web/activity_pub/mrf/media_proxy_warming_policy.ex index dfab105a3..5d8bb72aa 100644 --- a/lib/pleroma/web/activity_pub/mrf/media_proxy_warming_policy.ex +++ b/lib/pleroma/web/activity_pub/mrf/media_proxy_warming_policy.ex @@ -27,7 +27,7 @@ defmodule Pleroma.Web.ActivityPub.MRF.MediaProxyWarmingPolicy do end url - |> MediaProxy.url() + |> MediaProxy.preview_url() |> HTTP.get([], adapter: opts) end From edde0d9b54b45a366ecdec01e9826f1ee8d1dc3a Mon Sep 17 00:00:00 2001 From: href Date: Fri, 21 Aug 2020 17:40:49 +0000 Subject: [PATCH 017/102] Remove newline for linter --- lib/pleroma/helpers/media_helper.ex | 1 - 1 file changed, 1 deletion(-) diff --git a/lib/pleroma/helpers/media_helper.ex b/lib/pleroma/helpers/media_helper.ex index f87be8874..89dd4204b 100644 --- a/lib/pleroma/helpers/media_helper.ex +++ b/lib/pleroma/helpers/media_helper.ex @@ -38,5 +38,4 @@ defmodule Pleroma.Helpers.MediaHelper do {:error, status} end end - end From 98f8851f29f940051656caa1715820bce70f8c29 Mon Sep 17 00:00:00 2001 From: Mark Felder Date: Sat, 22 Aug 2020 15:12:11 -0500 Subject: [PATCH 018/102] Use the image thumbnail for rich metadata (OGP/Twittercards) --- lib/pleroma/web/metadata/utils.ex | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/pleroma/web/metadata/utils.ex b/lib/pleroma/web/metadata/utils.ex index 2f0dfb474..8a206e019 100644 --- a/lib/pleroma/web/metadata/utils.ex +++ b/lib/pleroma/web/metadata/utils.ex @@ -38,7 +38,7 @@ defmodule Pleroma.Web.Metadata.Utils do def scrub_html(content), do: content def attachment_url(url) do - MediaProxy.url(url) + MediaProxy.preview_url(url) end def user_name_string(user) do From 899ea2da3e77ca64598e45eba986d5315b523120 Mon Sep 17 00:00:00 2001 From: Mark Felder Date: Tue, 25 Aug 2020 17:18:22 -0500 Subject: [PATCH 019/102] Switch to imagemagick, only support videos --- config/config.exs | 2 +- config/description.exs | 4 ++-- lib/pleroma/helpers/media_helper.ex | 13 ++++++------- .../web/media_proxy/media_proxy_controller.ex | 15 +++++---------- 4 files changed, 14 insertions(+), 20 deletions(-) diff --git a/config/config.exs b/config/config.exs index e1558e29e..972b96d2d 100644 --- a/config/config.exs +++ b/config/config.exs @@ -444,7 +444,7 @@ config :pleroma, :media_preview_proxy, enabled: false, thumbnail_max_width: 600, thumbnail_max_height: 600, - quality: 2, + image_quality: 85, proxy_opts: [ head_request_max_read_duration: 5_000 ] diff --git a/config/description.exs b/config/description.exs index 0082cc84f..60f76be45 100644 --- a/config/description.exs +++ b/config/description.exs @@ -1975,9 +1975,9 @@ config :pleroma, :config_description, [ description: "Max height of preview thumbnail." }, %{ - key: :quality, + key: :image_quality, type: :integer, - description: "Quality of the output. Ranges from 1 (max quality) to 31 (lowest quality)." + description: "Quality of the output. Ranges from 0 (min quality) to 100 (max quality)." }, %{ key: :proxy_opts, diff --git a/lib/pleroma/helpers/media_helper.ex b/lib/pleroma/helpers/media_helper.ex index 89dd4204b..07e6dba5e 100644 --- a/lib/pleroma/helpers/media_helper.ex +++ b/lib/pleroma/helpers/media_helper.ex @@ -7,18 +7,17 @@ defmodule Pleroma.Helpers.MediaHelper do Handles common media-related operations. """ - def ffmpeg_resize(uri_or_path, %{max_width: max_width, max_height: max_height} = options) do - quality = options[:quality] || 1 + def image_resize(url, %{max_width: max_width, max_height: max_height} = options) do + quality = options[:quality] || 85 cmd = ~s""" - ffmpeg -i #{uri_or_path} -f lavfi -i color=c=white \ - -filter_complex "[0:v] scale='min(#{max_width},iw)':'min(#{max_height},ih)': \ - force_original_aspect_ratio=decrease [scaled]; \ - [1][scaled] scale2ref [bg][img]; [bg] setsar=1 [bg]; [bg][img] overlay=shortest=1" \ - -loglevel quiet -f image2 -vcodec mjpeg -frames:v 1 -q:v #{quality} pipe:1 + convert - -resize '#{max_width}x#{max_height}>' -quality #{quality} - """ pid = Port.open({:spawn, cmd}, [:use_stdio, :in, :stream, :exit_status, :binary]) + {:ok, env} = url |> Pleroma.Web.MediaProxy.url() |> Pleroma.HTTP.get() + image = env.body + Port.command(pid, image) loop_recv(pid) end diff --git a/lib/pleroma/web/media_proxy/media_proxy_controller.ex b/lib/pleroma/web/media_proxy/media_proxy_controller.ex index 1c51aa5e3..b925973ba 100644 --- a/lib/pleroma/web/media_proxy/media_proxy_controller.ex +++ b/lib/pleroma/web/media_proxy/media_proxy_controller.ex @@ -66,25 +66,20 @@ defmodule Pleroma.Web.MediaProxy.MediaProxyController do end defp handle_preview("image/" <> _ = _content_type, conn, url) do - handle_image_or_video_preview(conn, url) - end - - defp handle_preview("video/" <> _ = _content_type, conn, url) do - handle_image_or_video_preview(conn, url) + handle_image_preview(conn, url) end defp handle_preview(content_type, conn, _url) do send_resp(conn, :unprocessable_entity, "Unsupported content type: #{content_type}.") end - defp handle_image_or_video_preview(%{params: params} = conn, url) do - quality = Config.get!([:media_preview_proxy, :quality]) + defp handle_image_preview(%{params: params} = conn, url) do + quality = Config.get!([:media_preview_proxy, :image_quality]) with {thumbnail_max_width, thumbnail_max_height} <- thumbnail_max_dimensions(params), - media_proxy_url <- MediaProxy.url(url), {:ok, thumbnail_binary} <- - MediaHelper.ffmpeg_resize( - media_proxy_url, + MediaHelper.image_resize( + url, %{max_width: thumbnail_max_width, max_height: thumbnail_max_height, quality: quality} ) do conn From ddbddc08fc9fe5458edc983c81a77671da34a71f Mon Sep 17 00:00:00 2001 From: Mark Felder Date: Tue, 25 Aug 2020 17:31:55 -0500 Subject: [PATCH 020/102] Redirects for videos right now --- lib/pleroma/web/media_proxy/media_proxy_controller.ex | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/lib/pleroma/web/media_proxy/media_proxy_controller.ex b/lib/pleroma/web/media_proxy/media_proxy_controller.ex index b925973ba..6abbf9e23 100644 --- a/lib/pleroma/web/media_proxy/media_proxy_controller.ex +++ b/lib/pleroma/web/media_proxy/media_proxy_controller.ex @@ -69,6 +69,12 @@ defmodule Pleroma.Web.MediaProxy.MediaProxyController do handle_image_preview(conn, url) end + defp handle_preview("video/" <> _ = _content_type, conn, url) do + mediaproxy_url = url |> MediaProxy.url() + + redirect(conn, external: mediaproxy_url) + end + defp handle_preview(content_type, conn, _url) do send_resp(conn, :unprocessable_entity, "Unsupported content type: #{content_type}.") end From afa03ca8e2cffc85628beb5f9a70401d984ab216 Mon Sep 17 00:00:00 2001 From: Mark Felder Date: Tue, 25 Aug 2020 17:36:53 -0500 Subject: [PATCH 021/102] Allow both stdin and stdout --- lib/pleroma/helpers/media_helper.ex | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/pleroma/helpers/media_helper.ex b/lib/pleroma/helpers/media_helper.ex index 07e6dba5e..5fe135584 100644 --- a/lib/pleroma/helpers/media_helper.ex +++ b/lib/pleroma/helpers/media_helper.ex @@ -14,7 +14,7 @@ defmodule Pleroma.Helpers.MediaHelper do convert - -resize '#{max_width}x#{max_height}>' -quality #{quality} - """ - pid = Port.open({:spawn, cmd}, [:use_stdio, :in, :stream, :exit_status, :binary]) + pid = Port.open({:spawn, cmd}, [:use_stdio, :stream, :exit_status, :binary]) {:ok, env} = url |> Pleroma.Web.MediaProxy.url() |> Pleroma.HTTP.get() image = env.body Port.command(pid, image) From a136e7e9b590e3f23e472bf27c7c6a81d8d7792b Mon Sep 17 00:00:00 2001 From: Mark Felder Date: Tue, 25 Aug 2020 18:10:27 -0500 Subject: [PATCH 022/102] Try specifying fd0, force jpg out --- lib/pleroma/helpers/media_helper.ex | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/pleroma/helpers/media_helper.ex b/lib/pleroma/helpers/media_helper.ex index 5fe135584..01f42d9b0 100644 --- a/lib/pleroma/helpers/media_helper.ex +++ b/lib/pleroma/helpers/media_helper.ex @@ -11,7 +11,7 @@ defmodule Pleroma.Helpers.MediaHelper do quality = options[:quality] || 85 cmd = ~s""" - convert - -resize '#{max_width}x#{max_height}>' -quality #{quality} - + convert fd:0 -resize '#{max_width}x#{max_height}>' -quality #{quality} jpg:- """ pid = Port.open({:spawn, cmd}, [:use_stdio, :stream, :exit_status, :binary]) From bc94f0c6da2405e2f1cdae89696970728b6e987f Mon Sep 17 00:00:00 2001 From: href Date: Wed, 26 Aug 2020 16:12:34 +0200 Subject: [PATCH 023/102] Use mkfifo to feed ImageMagick --- lib/pleroma/helpers/media_helper.ex | 70 ++++++++++++++++++++++++----- 1 file changed, 60 insertions(+), 10 deletions(-) diff --git a/lib/pleroma/helpers/media_helper.ex b/lib/pleroma/helpers/media_helper.ex index 01f42d9b0..a43352ae0 100644 --- a/lib/pleroma/helpers/media_helper.ex +++ b/lib/pleroma/helpers/media_helper.ex @@ -7,18 +7,66 @@ defmodule Pleroma.Helpers.MediaHelper do Handles common media-related operations. """ - def image_resize(url, %{max_width: max_width, max_height: max_height} = options) do + @tmp_base "/tmp/pleroma-media_preview-pipe" + + def image_resize(url, options) do + with executable when is_binary(executable) <- System.find_executable("convert"), + {:ok, args} <- prepare_resize_args(options), + url = Pleroma.Web.MediaProxy.url(url), + {:ok, env} <- Pleroma.HTTP.get(url), + {:ok, fifo_path} <- mkfifo() + do + run_fifo(fifo_path, env, executable, args) + else + nil -> {:error, {:convert, :command_not_found}} + {:error, _} = error -> error + end + end + + defp prepare_resize_args(%{max_width: max_width, max_height: max_height} = options) do quality = options[:quality] || 85 + resize = Enum.join([max_width, "x", max_height, ">"]) + args = [ + "-auto-orient", # Support for EXIF rotation + "-resize", resize, + "-quality", to_string(quality) + ] + {:ok, args} + end - cmd = ~s""" - convert fd:0 -resize '#{max_width}x#{max_height}>' -quality #{quality} jpg:- - """ + defp prepare_resize_args(_), do: {:error, :missing_options} - pid = Port.open({:spawn, cmd}, [:use_stdio, :stream, :exit_status, :binary]) - {:ok, env} = url |> Pleroma.Web.MediaProxy.url() |> Pleroma.HTTP.get() - image = env.body - Port.command(pid, image) + defp run_fifo(fifo_path, env, executable, args) do + args = List.flatten([fifo_path, args, "jpg:fd:1"]) + pid = Port.open({:spawn_executable, executable}, [:use_stdio, :stream, :exit_status, :binary, args: args]) + fifo = Port.open(to_charlist(fifo_path), [:eof, :binary, :stream, :out]) + true = Port.command(fifo, env.body) + :erlang.port_close(fifo) loop_recv(pid) + after + File.rm(fifo_path) + end + + defp mkfifo() do + path = "#{@tmp_base}#{to_charlist(:erlang.phash2(self()))}" + case System.cmd("mkfifo", [path]) do + {_, 0} -> + spawn(fifo_guard(path)) + {:ok, path} + {_, err} -> + {:error, {:fifo_failed, err}} + end + end + + defp fifo_guard(path) do + pid = self() + fn() -> + ref = Process.monitor(pid) + receive do + {:DOWN, ^ref, :process, ^pid, _} -> + File.rm(path) + end + end end defp loop_recv(pid) do @@ -29,12 +77,14 @@ defmodule Pleroma.Helpers.MediaHelper do receive do {^pid, {:data, data}} -> loop_recv(pid, acc <> data) - {^pid, {:exit_status, 0}} -> {:ok, acc} - {^pid, {:exit_status, status}} -> {:error, status} + after + 5000 -> + :erlang.port_close(pid) + {:error, :timeout} end end end From d4d1192341868d978e19777c17be85e331367264 Mon Sep 17 00:00:00 2001 From: Mark Felder Date: Wed, 26 Aug 2020 14:28:25 +0000 Subject: [PATCH 024/102] Remove auto-orient; don't use it on previews, only originals --- lib/pleroma/helpers/media_helper.ex | 1 - 1 file changed, 1 deletion(-) diff --git a/lib/pleroma/helpers/media_helper.ex b/lib/pleroma/helpers/media_helper.ex index a43352ae0..db0c4b0cf 100644 --- a/lib/pleroma/helpers/media_helper.ex +++ b/lib/pleroma/helpers/media_helper.ex @@ -27,7 +27,6 @@ defmodule Pleroma.Helpers.MediaHelper do quality = options[:quality] || 85 resize = Enum.join([max_width, "x", max_height, ">"]) args = [ - "-auto-orient", # Support for EXIF rotation "-resize", resize, "-quality", to_string(quality) ] From 2c95533ead56217ec27e09e0ead0050e110dff22 Mon Sep 17 00:00:00 2001 From: Mark Felder Date: Wed, 26 Aug 2020 15:37:45 +0000 Subject: [PATCH 025/102] Change method of convert using stdout, make progressive jpegs --- lib/pleroma/helpers/media_helper.ex | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/lib/pleroma/helpers/media_helper.ex b/lib/pleroma/helpers/media_helper.ex index db0c4b0cf..3256802a0 100644 --- a/lib/pleroma/helpers/media_helper.ex +++ b/lib/pleroma/helpers/media_helper.ex @@ -27,6 +27,7 @@ defmodule Pleroma.Helpers.MediaHelper do quality = options[:quality] || 85 resize = Enum.join([max_width, "x", max_height, ">"]) args = [ + "-interlace", "Plane", "-resize", resize, "-quality", to_string(quality) ] @@ -36,7 +37,7 @@ defmodule Pleroma.Helpers.MediaHelper do defp prepare_resize_args(_), do: {:error, :missing_options} defp run_fifo(fifo_path, env, executable, args) do - args = List.flatten([fifo_path, args, "jpg:fd:1"]) + args = List.flatten([fifo_path, args, "jpg:-"]) pid = Port.open({:spawn_executable, executable}, [:use_stdio, :stream, :exit_status, :binary, args: args]) fifo = Port.open(to_charlist(fifo_path), [:eof, :binary, :stream, :out]) true = Port.command(fifo, env.body) From eead2276e79f29c4d0e10d23eb7524a9ee5f5045 Mon Sep 17 00:00:00 2001 From: Mark Felder Date: Wed, 26 Aug 2020 16:18:11 -0500 Subject: [PATCH 026/102] Ensure GIFs are redirected to the original or they become static. --- lib/pleroma/web/media_proxy/media_proxy_controller.ex | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/lib/pleroma/web/media_proxy/media_proxy_controller.ex b/lib/pleroma/web/media_proxy/media_proxy_controller.ex index 6abbf9e23..d465ce8d1 100644 --- a/lib/pleroma/web/media_proxy/media_proxy_controller.ex +++ b/lib/pleroma/web/media_proxy/media_proxy_controller.ex @@ -65,6 +65,12 @@ defmodule Pleroma.Web.MediaProxy.MediaProxyController do end end + defp handle_preview("image/gif" = _content_type, conn, url) do + mediaproxy_url = url |> MediaProxy.url() + + redirect(conn, external: mediaproxy_url) + end + defp handle_preview("image/" <> _ = _content_type, conn, url) do handle_image_preview(conn, url) end From 9567b96c7927be433eac4f023051adc5cbd6610c Mon Sep 17 00:00:00 2001 From: Mark Felder Date: Wed, 26 Aug 2020 16:40:13 -0500 Subject: [PATCH 027/102] Rename to make it obvious this is for images not videos --- lib/pleroma/helpers/media_helper.ex | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/lib/pleroma/helpers/media_helper.ex b/lib/pleroma/helpers/media_helper.ex index 3256802a0..fe11dd460 100644 --- a/lib/pleroma/helpers/media_helper.ex +++ b/lib/pleroma/helpers/media_helper.ex @@ -11,7 +11,7 @@ defmodule Pleroma.Helpers.MediaHelper do def image_resize(url, options) do with executable when is_binary(executable) <- System.find_executable("convert"), - {:ok, args} <- prepare_resize_args(options), + {:ok, args} <- prepare_image_resize_args(options), url = Pleroma.Web.MediaProxy.url(url), {:ok, env} <- Pleroma.HTTP.get(url), {:ok, fifo_path} <- mkfifo() @@ -23,7 +23,7 @@ defmodule Pleroma.Helpers.MediaHelper do end end - defp prepare_resize_args(%{max_width: max_width, max_height: max_height} = options) do + defp prepare_image_resize_args(%{max_width: max_width, max_height: max_height} = options) do quality = options[:quality] || 85 resize = Enum.join([max_width, "x", max_height, ">"]) args = [ @@ -34,7 +34,7 @@ defmodule Pleroma.Helpers.MediaHelper do {:ok, args} end - defp prepare_resize_args(_), do: {:error, :missing_options} + defp prepare_image_resize_args(_), do: {:error, :missing_options} defp run_fifo(fifo_path, env, executable, args) do args = List.flatten([fifo_path, args, "jpg:-"]) From 697bea04731614bcd2e1e10f0564863dc49a49fa Mon Sep 17 00:00:00 2001 From: Mark Felder Date: Wed, 26 Aug 2020 17:43:25 -0500 Subject: [PATCH 028/102] Move arg for images to the list so we can reuse these fifo functions for videos --- lib/pleroma/helpers/media_helper.ex | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/lib/pleroma/helpers/media_helper.ex b/lib/pleroma/helpers/media_helper.ex index fe11dd460..0299b16ae 100644 --- a/lib/pleroma/helpers/media_helper.ex +++ b/lib/pleroma/helpers/media_helper.ex @@ -29,7 +29,8 @@ defmodule Pleroma.Helpers.MediaHelper do args = [ "-interlace", "Plane", "-resize", resize, - "-quality", to_string(quality) + "-quality", to_string(quality), + "jpg:-" ] {:ok, args} end @@ -37,7 +38,7 @@ defmodule Pleroma.Helpers.MediaHelper do defp prepare_image_resize_args(_), do: {:error, :missing_options} defp run_fifo(fifo_path, env, executable, args) do - args = List.flatten([fifo_path, args, "jpg:-"]) + args = List.flatten([fifo_path, args]) pid = Port.open({:spawn_executable, executable}, [:use_stdio, :stream, :exit_status, :binary, args: args]) fifo = Port.open(to_charlist(fifo_path), [:eof, :binary, :stream, :out]) true = Port.command(fifo, env.body) From 157ecf402230c0b786f5765dd8b709d45c45974a Mon Sep 17 00:00:00 2001 From: Mark Felder Date: Thu, 27 Aug 2020 11:46:56 -0500 Subject: [PATCH 029/102] Follow redirects. I think we should be using some global adapter options here, though. --- lib/pleroma/web/media_proxy/media_proxy_controller.ex | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/lib/pleroma/web/media_proxy/media_proxy_controller.ex b/lib/pleroma/web/media_proxy/media_proxy_controller.ex index d465ce8d1..736b7db56 100644 --- a/lib/pleroma/web/media_proxy/media_proxy_controller.ex +++ b/lib/pleroma/web/media_proxy/media_proxy_controller.ex @@ -50,7 +50,9 @@ defmodule Pleroma.Web.MediaProxy.MediaProxyController do defp handle_preview(conn, url) do with {:ok, %{status: status} = head_response} when status in 200..299 <- - Tesla.head(url, opts: [adapter: [timeout: preview_head_request_timeout()]]) do + Tesla.head(url, + opts: [adapter: [timeout: preview_head_request_timeout(), follow_redirect: true]] + ) do content_type = Tesla.get_header(head_response, "content-type") handle_preview(content_type, conn, url) else From ef9d12fcc500d7429bee0d6ccffe3596434aee52 Mon Sep 17 00:00:00 2001 From: Mark Felder Date: Thu, 27 Aug 2020 12:31:55 -0500 Subject: [PATCH 030/102] Attempt at supporting video thumbnails via ffmpeg --- lib/pleroma/helpers/media_helper.ex | 19 +++++++++++++++++++ .../web/media_proxy/media_proxy_controller.ex | 17 ++++++++++++++--- 2 files changed, 33 insertions(+), 3 deletions(-) diff --git a/lib/pleroma/helpers/media_helper.ex b/lib/pleroma/helpers/media_helper.ex index 0299b16ae..7e1af8bac 100644 --- a/lib/pleroma/helpers/media_helper.ex +++ b/lib/pleroma/helpers/media_helper.ex @@ -37,6 +37,25 @@ defmodule Pleroma.Helpers.MediaHelper do defp prepare_image_resize_args(_), do: {:error, :missing_options} + def video_framegrab(url) do + with executable when is_binary(executable) <- System.find_executable("ffmpeg"), + args = [ + "-i", "-", + "-vframes", "1", + "-f", "mjpeg", + "-loglevel", "error", + "-" + ], + url = Pleroma.Web.MediaProxy.url(url), + {:ok, env} <- Pleroma.HTTP.get(url), + {:ok, fifo_path} <- mkfifo() do + run_fifo(fifo_path, env, executable, args) + else + nil -> {:error, {:ffmpeg, :command_not_found}} + {:error, _} = error -> error + end + end + defp run_fifo(fifo_path, env, executable, args) do args = List.flatten([fifo_path, args]) pid = Port.open({:spawn_executable, executable}, [:use_stdio, :stream, :exit_status, :binary, args: args]) diff --git a/lib/pleroma/web/media_proxy/media_proxy_controller.ex b/lib/pleroma/web/media_proxy/media_proxy_controller.ex index 736b7db56..7ac1a97e2 100644 --- a/lib/pleroma/web/media_proxy/media_proxy_controller.ex +++ b/lib/pleroma/web/media_proxy/media_proxy_controller.ex @@ -78,9 +78,7 @@ defmodule Pleroma.Web.MediaProxy.MediaProxyController do end defp handle_preview("video/" <> _ = _content_type, conn, url) do - mediaproxy_url = url |> MediaProxy.url() - - redirect(conn, external: mediaproxy_url) + handle_video_preview(conn, url) end defp handle_preview(content_type, conn, _url) do @@ -106,6 +104,19 @@ defmodule Pleroma.Web.MediaProxy.MediaProxyController do end end + defp handle_video_preview(conn, url) do + with {:ok, thumbnail_binary} <- + MediaHelper.video_framegrab(url) do + conn + |> put_resp_header("content-type", "image/jpeg") + |> put_resp_header("content-disposition", "inline; filename=\"preview.jpg\"") + |> send_resp(200, thumbnail_binary) + else + _ -> + send_resp(conn, :failed_dependency, "Can't handle preview.") + end + end + defp thumbnail_max_dimensions(params) do config = Config.get([:media_preview_proxy], []) From f1218a2b4e16178c8c1285157f7cd995dc950e3e Mon Sep 17 00:00:00 2001 From: Mark Felder Date: Thu, 27 Aug 2020 12:47:29 -0500 Subject: [PATCH 031/102] ffmpeg needs input from fifo path, not stdin --- lib/pleroma/helpers/media_helper.ex | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) diff --git a/lib/pleroma/helpers/media_helper.ex b/lib/pleroma/helpers/media_helper.ex index 7e1af8bac..7c2bfbc53 100644 --- a/lib/pleroma/helpers/media_helper.ex +++ b/lib/pleroma/helpers/media_helper.ex @@ -39,16 +39,16 @@ defmodule Pleroma.Helpers.MediaHelper do def video_framegrab(url) do with executable when is_binary(executable) <- System.find_executable("ffmpeg"), + url = Pleroma.Web.MediaProxy.url(url), + {:ok, env} <- Pleroma.HTTP.get(url), + {:ok, fifo_path} <- mkfifo(), args = [ - "-i", "-", + "-i", fifo_path, "-vframes", "1", "-f", "mjpeg", "-loglevel", "error", "-" - ], - url = Pleroma.Web.MediaProxy.url(url), - {:ok, env} <- Pleroma.HTTP.get(url), - {:ok, fifo_path} <- mkfifo() do + ] do run_fifo(fifo_path, env, executable, args) else nil -> {:error, {:ffmpeg, :command_not_found}} @@ -57,7 +57,12 @@ defmodule Pleroma.Helpers.MediaHelper do end defp run_fifo(fifo_path, env, executable, args) do - args = List.flatten([fifo_path, args]) + args = + if _executable = System.find_executable("convert") do + List.flatten([fifo_path, args]) + else + args + end pid = Port.open({:spawn_executable, executable}, [:use_stdio, :stream, :exit_status, :binary, args: args]) fifo = Port.open(to_charlist(fifo_path), [:eof, :binary, :stream, :out]) true = Port.command(fifo, env.body) From dd1de994d57e3d9c99bb4e4c7019c696b5153f50 Mon Sep 17 00:00:00 2001 From: Mark Felder Date: Thu, 27 Aug 2020 13:10:40 -0500 Subject: [PATCH 032/102] Try to trick ffmpeg into working with this named pipe --- lib/pleroma/helpers/media_helper.ex | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/lib/pleroma/helpers/media_helper.ex b/lib/pleroma/helpers/media_helper.ex index 7c2bfbc53..385a4df81 100644 --- a/lib/pleroma/helpers/media_helper.ex +++ b/lib/pleroma/helpers/media_helper.ex @@ -43,11 +43,12 @@ defmodule Pleroma.Helpers.MediaHelper do {:ok, env} <- Pleroma.HTTP.get(url), {:ok, fifo_path} <- mkfifo(), args = [ + "-y", "-i", fifo_path, "-vframes", "1", "-f", "mjpeg", "-loglevel", "error", - "-" + "pipe:" ] do run_fifo(fifo_path, env, executable, args) else From 3a5231ec8fd0583d7f4bf05378d8bb81096c4f40 Mon Sep 17 00:00:00 2001 From: Mark Felder Date: Thu, 27 Aug 2020 16:33:37 -0500 Subject: [PATCH 033/102] Keep args construction within video/image scopes instead of mangling down in fifo town --- lib/pleroma/helpers/media_helper.ex | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/lib/pleroma/helpers/media_helper.ex b/lib/pleroma/helpers/media_helper.ex index 385a4df81..b42612ccb 100644 --- a/lib/pleroma/helpers/media_helper.ex +++ b/lib/pleroma/helpers/media_helper.ex @@ -16,6 +16,7 @@ defmodule Pleroma.Helpers.MediaHelper do {:ok, env} <- Pleroma.HTTP.get(url), {:ok, fifo_path} <- mkfifo() do + args = List.flatten([fifo_path, args]) run_fifo(fifo_path, env, executable, args) else nil -> {:error, {:convert, :command_not_found}} @@ -58,12 +59,6 @@ defmodule Pleroma.Helpers.MediaHelper do end defp run_fifo(fifo_path, env, executable, args) do - args = - if _executable = System.find_executable("convert") do - List.flatten([fifo_path, args]) - else - args - end pid = Port.open({:spawn_executable, executable}, [:use_stdio, :stream, :exit_status, :binary, args: args]) fifo = Port.open(to_charlist(fifo_path), [:eof, :binary, :stream, :out]) true = Port.command(fifo, env.body) From 67c79394e81cf9f5404afad29a397acf32dece33 Mon Sep 17 00:00:00 2001 From: Mark Felder Date: Thu, 27 Aug 2020 17:15:23 -0500 Subject: [PATCH 034/102] Support static avatars and header images with Mediaproxy Preview --- lib/pleroma/web/mastodon_api/views/account_view.ex | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/lib/pleroma/web/mastodon_api/views/account_view.ex b/lib/pleroma/web/mastodon_api/views/account_view.ex index 864c0417f..eef45b35d 100644 --- a/lib/pleroma/web/mastodon_api/views/account_view.ex +++ b/lib/pleroma/web/mastodon_api/views/account_view.ex @@ -181,8 +181,10 @@ defmodule Pleroma.Web.MastodonAPI.AccountView do user = User.sanitize_html(user, User.html_filter_policy(opts[:for])) display_name = user.name || user.nickname - image = User.avatar_url(user) |> MediaProxy.url() + avatar = User.avatar_url(user) |> MediaProxy.url() + avatar_static = User.avatar_url(user) |> MediaProxy.preview_url() header = User.banner_url(user) |> MediaProxy.url() + header_static = User.banner_url(user) |> MediaProxy.preview_url() following_count = if !user.hide_follows_count or !user.hide_follows or opts[:for] == user do @@ -247,10 +249,10 @@ defmodule Pleroma.Web.MastodonAPI.AccountView do statuses_count: user.note_count, note: user.bio || "", url: user.uri || user.ap_id, - avatar: image, - avatar_static: image, + avatar: avatar, + avatar_static: avatar_static, header: header, - header_static: header, + header_static: header_static, emojis: emojis, fields: user.fields, bot: bot, From 5b4d483f522f470b9d2cdb7f43d98dde427a1241 Mon Sep 17 00:00:00 2001 From: Mark Felder Date: Thu, 27 Aug 2020 17:28:21 -0500 Subject: [PATCH 035/102] Add a note about the avatars and banners situation --- lib/pleroma/web/media_proxy/media_proxy_controller.ex | 3 +++ 1 file changed, 3 insertions(+) diff --git a/lib/pleroma/web/media_proxy/media_proxy_controller.ex b/lib/pleroma/web/media_proxy/media_proxy_controller.ex index 7ac1a97e2..411dc95d0 100644 --- a/lib/pleroma/web/media_proxy/media_proxy_controller.ex +++ b/lib/pleroma/web/media_proxy/media_proxy_controller.ex @@ -67,6 +67,9 @@ defmodule Pleroma.Web.MediaProxy.MediaProxyController do end end + # TODO: find a workaround so avatar_static and banner_static can work. + # Those only permit GIFs for animation, so we have to permit a way to + # allow those to get real static variants. defp handle_preview("image/gif" = _content_type, conn, url) do mediaproxy_url = url |> MediaProxy.url() From dfceb03cf47374fdeab60784476b2e266208a4bb Mon Sep 17 00:00:00 2001 From: href Date: Fri, 28 Aug 2020 21:14:28 +0200 Subject: [PATCH 036/102] Rewrite MP4/MOV binaries to be faststart In some cases, MP4/MOV files can have the data _before_ the meta-data. Thus, ffmpeg (and all similar tools) cannot really process the input if it's given over stdin/streaming/pipes. BUT I REALLY DON'T WANT TO MAKE TEMPORARY FILES so here we go, an implementation of qtfaststart in elixir. --- lib/pleroma/helpers/media_helper.ex | 59 ++++++++---- lib/pleroma/helpers/qt_fast_start.ex | 131 +++++++++++++++++++++++++++ 2 files changed, 172 insertions(+), 18 deletions(-) create mode 100644 lib/pleroma/helpers/qt_fast_start.ex diff --git a/lib/pleroma/helpers/media_helper.ex b/lib/pleroma/helpers/media_helper.ex index b42612ccb..5ac75b326 100644 --- a/lib/pleroma/helpers/media_helper.ex +++ b/lib/pleroma/helpers/media_helper.ex @@ -14,8 +14,7 @@ defmodule Pleroma.Helpers.MediaHelper do {:ok, args} <- prepare_image_resize_args(options), url = Pleroma.Web.MediaProxy.url(url), {:ok, env} <- Pleroma.HTTP.get(url), - {:ok, fifo_path} <- mkfifo() - do + {:ok, fifo_path} <- mkfifo() do args = List.flatten([fifo_path, args]) run_fifo(fifo_path, env, executable, args) else @@ -27,12 +26,17 @@ defmodule Pleroma.Helpers.MediaHelper do defp prepare_image_resize_args(%{max_width: max_width, max_height: max_height} = options) do quality = options[:quality] || 85 resize = Enum.join([max_width, "x", max_height, ">"]) + args = [ - "-interlace", "Plane", - "-resize", resize, - "-quality", to_string(quality), - "jpg:-" + "-interlace", + "Plane", + "-resize", + resize, + "-quality", + to_string(quality), + "jpg:-" ] + {:ok, args} end @@ -45,11 +49,15 @@ defmodule Pleroma.Helpers.MediaHelper do {:ok, fifo_path} <- mkfifo(), args = [ "-y", - "-i", fifo_path, - "-vframes", "1", - "-f", "mjpeg", - "-loglevel", "error", - "pipe:" + "-i", + fifo_path, + "-vframes", + "1", + "-f", + "mjpeg", + "-loglevel", + "error", + "-" ] do run_fifo(fifo_path, env, executable, args) else @@ -59,9 +67,18 @@ defmodule Pleroma.Helpers.MediaHelper do end defp run_fifo(fifo_path, env, executable, args) do - pid = Port.open({:spawn_executable, executable}, [:use_stdio, :stream, :exit_status, :binary, args: args]) + pid = + Port.open({:spawn_executable, executable}, [ + :use_stdio, + :stream, + :exit_status, + :binary, + args: args + ]) + fifo = Port.open(to_charlist(fifo_path), [:eof, :binary, :stream, :out]) - true = Port.command(fifo, env.body) + fix = Pleroma.Helpers.QtFastStart.fix(env.body) + true = Port.command(fifo, fix) :erlang.port_close(fifo) loop_recv(pid) after @@ -70,10 +87,12 @@ defmodule Pleroma.Helpers.MediaHelper do defp mkfifo() do path = "#{@tmp_base}#{to_charlist(:erlang.phash2(self()))}" + case System.cmd("mkfifo", [path]) do {_, 0} -> spawn(fifo_guard(path)) {:ok, path} + {_, err} -> {:error, {:fifo_failed, err}} end @@ -81,8 +100,10 @@ defmodule Pleroma.Helpers.MediaHelper do defp fifo_guard(path) do pid = self() - fn() -> + + fn -> ref = Process.monitor(pid) + receive do {:DOWN, ^ref, :process, ^pid, _} -> File.rm(path) @@ -98,14 +119,16 @@ defmodule Pleroma.Helpers.MediaHelper do receive do {^pid, {:data, data}} -> loop_recv(pid, acc <> data) + {^pid, {:exit_status, 0}} -> {:ok, acc} + {^pid, {:exit_status, status}} -> {:error, status} - after - 5000 -> - :erlang.port_close(pid) - {:error, :timeout} + after + 5000 -> + :erlang.port_close(pid) + {:error, :timeout} end end end diff --git a/lib/pleroma/helpers/qt_fast_start.ex b/lib/pleroma/helpers/qt_fast_start.ex new file mode 100644 index 000000000..694b583b9 --- /dev/null +++ b/lib/pleroma/helpers/qt_fast_start.ex @@ -0,0 +1,131 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2020 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + +defmodule Pleroma.Helpers.QtFastStart do + @moduledoc """ + (WIP) Converts a "slow start" (data before metadatas) mov/mp4 file to a "fast start" one (metadatas before data). + """ + + # TODO: Cleanup and optimizations + # Inspirations: https://www.ffmpeg.org/doxygen/3.4/qt-faststart_8c_source.html + # https://github.com/danielgtaylor/qtfaststart/blob/master/qtfaststart/processor.py + # ISO/IEC 14496-12:2015, ISO/IEC 15444-12:2015 + # Paracetamol + + def fix(binary = <<0x00, 0x00, 0x00, _, 0x66, 0x74, 0x79, 0x70, _::binary>>) do + index = fix(binary, binary, 0, []) + + case index do + [{"ftyp", _, _, _, _}, {"mdat", _, _, _, _} | _] -> faststart(index) + [{"ftyp", _, _, _, _}, {"free", _, _, _, _}, {"mdat", _, _, _, _} | _] -> faststart(index) + _ -> binary + end + end + + def fix(binary) do + binary + end + + defp fix(<<>>, _bin, _pos, acc) do + :lists.reverse(acc) + end + + defp fix( + <>, + bin, + pos, + acc + ) do + if fourcc == "mdat" && size == 0 do + # mdat with 0 size means "seek to the end" -- also, in that case the file is probably OK. + acc = [ + {fourcc, pos, byte_size(bin) - pos, byte_size(bin) - pos, + <>} + | acc + ] + + fix(<<>>, bin, byte_size(bin), acc) + else + full_size = size - 8 + <> = rest + + acc = [ + {fourcc, pos, pos + size, size, + <>} + | acc + ] + + fix(rest, bin, pos + size, acc) + end + end + + defp faststart(index) do + {{_ftyp, _, _, _, ftyp}, index} = List.keytake(index, "ftyp", 0) + + # Skip re-writing the free fourcc as it's kind of useless. Why stream useless bytes when you can do without? + {free_size, index} = + case List.keytake(index, "free", 0) do + {{_, _, _, size, _}, index} -> {size, index} + _ -> {0, index} + end + + {{_moov, _, _, moov_size, moov}, index} = List.keytake(index, "moov", 0) + offset = -free_size + moov_size + rest = for {_, _, _, _, data} <- index, do: data, into: <<>> + <> = moov + new_moov = fix_moov(moov_data, offset) + <> + end + + defp fix_moov(moov, offset) do + fix_moov(moov, offset, <<>>) + end + + defp fix_moov(<<>>, _, acc), do: acc + + defp fix_moov( + <>, + offset, + acc + ) do + full_size = size - 8 + <> = rest + + data = + cond do + fourcc in ["trak", "mdia", "minf", "stbl"] -> + # Theses contains sto or co64 part + <>)::binary>> + + fourcc in ["stco", "co64"] -> + # fix the damn thing + <> = data + + entry_size = + case fourcc do + "stco" -> 4 + "co64" -> 8 + end + + {_, result} = + Enum.reduce(1..count, {rest, <<>>}, fn _, + {<>, acc} -> + {rest, <>} + end) + + <> + + true -> + <> + end + + acc = <> + fix_moov(rest, offset, acc) + end +end From 24d522c3b366b54b23bebaf07371145d50820d4a Mon Sep 17 00:00:00 2001 From: href Date: Sat, 29 Aug 2020 13:05:23 +0200 Subject: [PATCH 037/102] QtFastStart: optimize ~4-6x faster ~3~4x memory usage reduction (now mostly adds what we are rewriting in the metadatas) --- lib/pleroma/helpers/qt_fast_start.ex | 109 +++++++++++++-------------- 1 file changed, 54 insertions(+), 55 deletions(-) diff --git a/lib/pleroma/helpers/qt_fast_start.ex b/lib/pleroma/helpers/qt_fast_start.ex index 694b583b9..8cba06e54 100644 --- a/lib/pleroma/helpers/qt_fast_start.ex +++ b/lib/pleroma/helpers/qt_fast_start.ex @@ -13,10 +13,11 @@ defmodule Pleroma.Helpers.QtFastStart do # ISO/IEC 14496-12:2015, ISO/IEC 15444-12:2015 # Paracetamol - def fix(binary = <<0x00, 0x00, 0x00, _, 0x66, 0x74, 0x79, 0x70, _::binary>>) do - index = fix(binary, binary, 0, []) + def fix(binary = <<0x00, 0x00, 0x00, _, 0x66, 0x74, 0x79, 0x70, _::bits>>) do + index = fix(binary, 0, nil, nil, []) case index do + :abort -> binary [{"ftyp", _, _, _, _}, {"mdat", _, _, _, _} | _] -> faststart(index) [{"ftyp", _, _, _, _}, {"free", _, _, _, _}, {"mdat", _, _, _, _} | _] -> faststart(index) _ -> binary @@ -27,37 +28,32 @@ defmodule Pleroma.Helpers.QtFastStart do binary end - defp fix(<<>>, _bin, _pos, acc) do - :lists.reverse(acc) + # MOOV have been seen before MDAT- abort + defp fix(<<_::bits>>, _, true, false, _) do + :abort end defp fix( - <>, - bin, + <>, pos, + got_moov, + got_mdat, acc ) do - if fourcc == "mdat" && size == 0 do - # mdat with 0 size means "seek to the end" -- also, in that case the file is probably OK. - acc = [ - {fourcc, pos, byte_size(bin) - pos, byte_size(bin) - pos, - <>} - | acc - ] + full_size = (size - 8) * 8 + <> = rest - fix(<<>>, bin, byte_size(bin), acc) - else - full_size = size - 8 - <> = rest + acc = [ + {fourcc, pos, pos + size, size, + <>} + | acc + ] - acc = [ - {fourcc, pos, pos + size, size, - <>} - | acc - ] + fix(rest, pos + size, got_moov || fourcc == "moov", got_mdat || fourcc == "mdat", acc) + end - fix(rest, bin, pos + size, acc) - end + defp fix(<<>>, _pos, _, _, acc) do + :lists.reverse(acc) end defp faststart(index) do @@ -72,60 +68,63 @@ defmodule Pleroma.Helpers.QtFastStart do {{_moov, _, _, moov_size, moov}, index} = List.keytake(index, "moov", 0) offset = -free_size + moov_size - rest = for {_, _, _, _, data} <- index, do: data, into: <<>> - <> = moov - new_moov = fix_moov(moov_data, offset) - <> + rest = for {_, _, _, _, data} <- index, do: data, into: [] + <> = moov + [ftyp, moov_head, fix_moov(moov_data, offset, []), rest] end - defp fix_moov(moov, offset) do - fix_moov(moov, offset, <<>>) - end - - defp fix_moov(<<>>, _, acc), do: acc - defp fix_moov( - <>, + <>, offset, acc ) do - full_size = size - 8 - <> = rest + full_size = (size - 8) * 8 + <> = rest data = cond do fourcc in ["trak", "mdia", "minf", "stbl"] -> # Theses contains sto or co64 part - <>)::binary>> + [<>, fix_moov(data, offset, [])] fourcc in ["stco", "co64"] -> # fix the damn thing - <> = data + <> = data entry_size = case fourcc do - "stco" -> 4 - "co64" -> 8 + "stco" -> 32 + "co64" -> 64 end - {_, result} = - Enum.reduce(1..count, {rest, <<>>}, fn _, - {<>, acc} -> - {rest, <>} - end) - - <> + [ + <>, + rewrite_entries(entry_size, offset, rest, []) + ] true -> - <> + [<>, data] end - acc = <> + acc = [acc | data] fix_moov(rest, offset, acc) end + + defp fix_moov(<<>>, _, acc), do: acc + + for size <- [32, 64] do + defp rewrite_entries( + unquote(size), + offset, + <>, + acc + ) do + rewrite_entries(unquote(size), offset, rest, [ + acc | <> + ]) + end + end + + defp rewrite_entries(_, _, <<>>, acc), do: acc end From 2d2af75777ae468fb08a2b09dc5af4636106a04b Mon Sep 17 00:00:00 2001 From: Mark Felder Date: Sun, 30 Aug 2020 09:17:24 -0500 Subject: [PATCH 038/102] Support PNG previews to preserve alpha channels --- lib/pleroma/helpers/media_helper.ex | 17 ++++++++++ .../web/media_proxy/media_proxy_controller.ex | 32 +++++++++++++++++-- 2 files changed, 47 insertions(+), 2 deletions(-) diff --git a/lib/pleroma/helpers/media_helper.ex b/lib/pleroma/helpers/media_helper.ex index 5ac75b326..d8a6db4e1 100644 --- a/lib/pleroma/helpers/media_helper.ex +++ b/lib/pleroma/helpers/media_helper.ex @@ -23,6 +23,23 @@ defmodule Pleroma.Helpers.MediaHelper do end end + defp prepare_image_resize_args( + %{max_width: max_width, max_height: max_height, format: "png"} = options + ) do + quality = options[:quality] || 85 + resize = Enum.join([max_width, "x", max_height, ">"]) + + args = [ + "-resize", + resize, + "-quality", + to_string(quality), + "png:-" + ] + + {:ok, args} + end + defp prepare_image_resize_args(%{max_width: max_width, max_height: max_height} = options) do quality = options[:quality] || 85 resize = Enum.join([max_width, "x", max_height, ">"]) diff --git a/lib/pleroma/web/media_proxy/media_proxy_controller.ex b/lib/pleroma/web/media_proxy/media_proxy_controller.ex index 411dc95d0..94fae6cac 100644 --- a/lib/pleroma/web/media_proxy/media_proxy_controller.ex +++ b/lib/pleroma/web/media_proxy/media_proxy_controller.ex @@ -76,8 +76,12 @@ defmodule Pleroma.Web.MediaProxy.MediaProxyController do redirect(conn, external: mediaproxy_url) end + defp handle_preview("image/png" <> _ = _content_type, conn, url) do + handle_png_preview(conn, url) + end + defp handle_preview("image/" <> _ = _content_type, conn, url) do - handle_image_preview(conn, url) + handle_jpeg_preview(conn, url) end defp handle_preview("video/" <> _ = _content_type, conn, url) do @@ -88,7 +92,31 @@ defmodule Pleroma.Web.MediaProxy.MediaProxyController do send_resp(conn, :unprocessable_entity, "Unsupported content type: #{content_type}.") end - defp handle_image_preview(%{params: params} = conn, url) do + defp handle_png_preview(%{params: params} = conn, url) do + quality = Config.get!([:media_preview_proxy, :image_quality]) + + with {thumbnail_max_width, thumbnail_max_height} <- thumbnail_max_dimensions(params), + {:ok, thumbnail_binary} <- + MediaHelper.image_resize( + url, + %{ + max_width: thumbnail_max_width, + max_height: thumbnail_max_height, + quality: quality, + format: "png" + } + ) do + conn + |> put_resp_header("content-type", "image/png") + |> put_resp_header("content-disposition", "inline; filename=\"preview.png\"") + |> send_resp(200, thumbnail_binary) + else + _ -> + send_resp(conn, :failed_dependency, "Can't handle preview.") + end + end + + defp handle_jpeg_preview(%{params: params} = conn, url) do quality = Config.get!([:media_preview_proxy, :image_quality]) with {thumbnail_max_width, thumbnail_max_height} <- thumbnail_max_dimensions(params), From 4ef210a587113313cd6887b7499832d0c0798f7f Mon Sep 17 00:00:00 2001 From: Mark Felder Date: Sun, 30 Aug 2020 09:32:22 -0500 Subject: [PATCH 039/102] Credo --- lib/pleroma/helpers/media_helper.ex | 2 +- lib/pleroma/helpers/qt_fast_start.ex | 5 +++-- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/lib/pleroma/helpers/media_helper.ex b/lib/pleroma/helpers/media_helper.ex index d8a6db4e1..9bd815c26 100644 --- a/lib/pleroma/helpers/media_helper.ex +++ b/lib/pleroma/helpers/media_helper.ex @@ -102,7 +102,7 @@ defmodule Pleroma.Helpers.MediaHelper do File.rm(fifo_path) end - defp mkfifo() do + defp mkfifo do path = "#{@tmp_base}#{to_charlist(:erlang.phash2(self()))}" case System.cmd("mkfifo", [path]) do diff --git a/lib/pleroma/helpers/qt_fast_start.ex b/lib/pleroma/helpers/qt_fast_start.ex index 8cba06e54..bb93224b5 100644 --- a/lib/pleroma/helpers/qt_fast_start.ex +++ b/lib/pleroma/helpers/qt_fast_start.ex @@ -13,7 +13,7 @@ defmodule Pleroma.Helpers.QtFastStart do # ISO/IEC 14496-12:2015, ISO/IEC 15444-12:2015 # Paracetamol - def fix(binary = <<0x00, 0x00, 0x00, _, 0x66, 0x74, 0x79, 0x70, _::bits>>) do + def fix(<<0x00, 0x00, 0x00, _, 0x66, 0x74, 0x79, 0x70, _::bits>> = binary) do index = fix(binary, 0, nil, nil, []) case index do @@ -59,7 +59,8 @@ defmodule Pleroma.Helpers.QtFastStart do defp faststart(index) do {{_ftyp, _, _, _, ftyp}, index} = List.keytake(index, "ftyp", 0) - # Skip re-writing the free fourcc as it's kind of useless. Why stream useless bytes when you can do without? + # Skip re-writing the free fourcc as it's kind of useless. + # Why stream useless bytes when you can do without? {free_size, index} = case List.keytake(index, "free", 0) do {{_, _, _, size, _}, index} -> {size, index} From 0a839d51a7adb034d6514ea647d90546c829813d Mon Sep 17 00:00:00 2001 From: Ivan Tashkinov Date: Mon, 31 Aug 2020 13:08:50 +0300 Subject: [PATCH 040/102] [#2497] Added Cache-Control response header for media proxy preview endpoint. --- .../web/media_proxy/media_proxy_controller.ex | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/lib/pleroma/web/media_proxy/media_proxy_controller.ex b/lib/pleroma/web/media_proxy/media_proxy_controller.ex index 94fae6cac..2afcd861a 100644 --- a/lib/pleroma/web/media_proxy/media_proxy_controller.ex +++ b/lib/pleroma/web/media_proxy/media_proxy_controller.ex @@ -107,8 +107,7 @@ defmodule Pleroma.Web.MediaProxy.MediaProxyController do } ) do conn - |> put_resp_header("content-type", "image/png") - |> put_resp_header("content-disposition", "inline; filename=\"preview.png\"") + |> put_preview_response_headers() |> send_resp(200, thumbnail_binary) else _ -> @@ -126,8 +125,7 @@ defmodule Pleroma.Web.MediaProxy.MediaProxyController do %{max_width: thumbnail_max_width, max_height: thumbnail_max_height, quality: quality} ) do conn - |> put_resp_header("content-type", "image/jpeg") - |> put_resp_header("content-disposition", "inline; filename=\"preview.jpg\"") + |> put_preview_response_headers() |> send_resp(200, thumbnail_binary) else _ -> @@ -139,8 +137,7 @@ defmodule Pleroma.Web.MediaProxy.MediaProxyController do with {:ok, thumbnail_binary} <- MediaHelper.video_framegrab(url) do conn - |> put_resp_header("content-type", "image/jpeg") - |> put_resp_header("content-disposition", "inline; filename=\"preview.jpg\"") + |> put_preview_response_headers() |> send_resp(200, thumbnail_binary) else _ -> @@ -148,6 +145,13 @@ defmodule Pleroma.Web.MediaProxy.MediaProxyController do end end + defp put_preview_response_headers(conn) do + conn + |> put_resp_header("content-type", "image/jpeg") + |> put_resp_header("content-disposition", "inline; filename=\"preview.jpg\"") + |> put_resp_header("cache-control", "max-age=0, private, must-revalidate") + end + defp thumbnail_max_dimensions(params) do config = Config.get([:media_preview_proxy], []) From 6ce28c409137972ee9b105b9d7ab4a0fd2a0d08b Mon Sep 17 00:00:00 2001 From: Ivan Tashkinov Date: Tue, 1 Sep 2020 21:21:58 +0300 Subject: [PATCH 041/102] [#2497] Fix for png media proxy preview response headers (content-type & content-disposition). --- lib/pleroma/web/media_proxy/media_proxy_controller.ex | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/lib/pleroma/web/media_proxy/media_proxy_controller.ex b/lib/pleroma/web/media_proxy/media_proxy_controller.ex index 2afcd861a..961c73666 100644 --- a/lib/pleroma/web/media_proxy/media_proxy_controller.ex +++ b/lib/pleroma/web/media_proxy/media_proxy_controller.ex @@ -67,7 +67,7 @@ defmodule Pleroma.Web.MediaProxy.MediaProxyController do end end - # TODO: find a workaround so avatar_static and banner_static can work. + # TODO: find a workaround so avatar_static and header_static can work. # Those only permit GIFs for animation, so we have to permit a way to # allow those to get real static variants. defp handle_preview("image/gif" = _content_type, conn, url) do @@ -107,7 +107,7 @@ defmodule Pleroma.Web.MediaProxy.MediaProxyController do } ) do conn - |> put_preview_response_headers() + |> put_preview_response_headers("image/png", "preview.png") |> send_resp(200, thumbnail_binary) else _ -> @@ -145,10 +145,10 @@ defmodule Pleroma.Web.MediaProxy.MediaProxyController do end end - defp put_preview_response_headers(conn) do + defp put_preview_response_headers(conn, content_type \\ "image/jpeg", filename \\ "preview.jpg") do conn - |> put_resp_header("content-type", "image/jpeg") - |> put_resp_header("content-disposition", "inline; filename=\"preview.jpg\"") + |> put_resp_header("content-type", content_type) + |> put_resp_header("content-disposition", "inline; filename=\"#{filename}\"") |> put_resp_header("cache-control", "max-age=0, private, must-revalidate") end From 60c925380da644866836fa4a275f4d57eaaada04 Mon Sep 17 00:00:00 2001 From: Ivan Tashkinov Date: Thu, 3 Sep 2020 20:13:29 +0300 Subject: [PATCH 042/102] [#2497] Added support for enforcing output format for media proxy preview, used for avatar_static & header_static (AccountView). --- lib/pleroma/helpers/uri_helper.ex | 1 + .../web/mastodon_api/views/account_view.ex | 4 ++-- lib/pleroma/web/media_proxy/media_proxy.ex | 15 +++++++++------ .../web/media_proxy/media_proxy_controller.ex | 11 ++++++++--- 4 files changed, 20 insertions(+), 11 deletions(-) diff --git a/lib/pleroma/helpers/uri_helper.ex b/lib/pleroma/helpers/uri_helper.ex index 6d205a636..9c9e53447 100644 --- a/lib/pleroma/helpers/uri_helper.ex +++ b/lib/pleroma/helpers/uri_helper.ex @@ -15,6 +15,7 @@ defmodule Pleroma.Helpers.UriHelper do uri |> Map.put(:query, URI.encode_query(updated_params)) |> URI.to_string() + |> String.replace_suffix("?", "") end def maybe_add_base("/" <> uri, base), do: Path.join([base, uri]) diff --git a/lib/pleroma/web/mastodon_api/views/account_view.ex b/lib/pleroma/web/mastodon_api/views/account_view.ex index 7eb4e86fe..a811f81c2 100644 --- a/lib/pleroma/web/mastodon_api/views/account_view.ex +++ b/lib/pleroma/web/mastodon_api/views/account_view.ex @@ -182,9 +182,9 @@ defmodule Pleroma.Web.MastodonAPI.AccountView do display_name = user.name || user.nickname avatar = User.avatar_url(user) |> MediaProxy.url() - avatar_static = User.avatar_url(user) |> MediaProxy.preview_url() + avatar_static = User.avatar_url(user) |> MediaProxy.preview_url(output_format: "jpeg") header = User.banner_url(user) |> MediaProxy.url() - header_static = User.banner_url(user) |> MediaProxy.preview_url() + header_static = User.banner_url(user) |> MediaProxy.preview_url(output_format: "jpeg") following_count = if !user.hide_follows_count or !user.hide_follows or opts[:for] == user do diff --git a/lib/pleroma/web/media_proxy/media_proxy.ex b/lib/pleroma/web/media_proxy/media_proxy.ex index 6695d49ce..4cbe1cf89 100644 --- a/lib/pleroma/web/media_proxy/media_proxy.ex +++ b/lib/pleroma/web/media_proxy/media_proxy.ex @@ -4,6 +4,7 @@ defmodule Pleroma.Web.MediaProxy do alias Pleroma.Config + alias Pleroma.Helpers.UriHelper alias Pleroma.Upload alias Pleroma.Web alias Pleroma.Web.MediaProxy.Invalidation @@ -58,9 +59,9 @@ defmodule Pleroma.Web.MediaProxy do # Note: routing all URLs to preview handler (even local and whitelisted). # Preview handler will call url/1 on decoded URLs, and applicable ones will detour media proxy. - def preview_url(url) do + def preview_url(url, preview_params \\ []) do if preview_enabled?() do - encode_preview_url(url) + encode_preview_url(url, preview_params) else url end @@ -116,10 +117,10 @@ defmodule Pleroma.Web.MediaProxy do build_url(sig64, base64, filename(url)) end - def encode_preview_url(url) do + def encode_preview_url(url, preview_params \\ []) do {base64, sig64} = base64_sig64(url) - build_preview_url(sig64, base64, filename(url)) + build_preview_url(sig64, base64, filename(url), preview_params) end def decode_url(sig, url) do @@ -155,8 +156,10 @@ defmodule Pleroma.Web.MediaProxy do proxy_url("proxy", sig_base64, url_base64, filename) end - def build_preview_url(sig_base64, url_base64, filename \\ nil) do - proxy_url("proxy/preview", sig_base64, url_base64, filename) + def build_preview_url(sig_base64, url_base64, filename \\ nil, preview_params \\ []) do + uri = proxy_url("proxy/preview", sig_base64, url_base64, filename) + + UriHelper.append_uri_params(uri, preview_params) end def verify_request_path_and_url( diff --git a/lib/pleroma/web/media_proxy/media_proxy_controller.ex b/lib/pleroma/web/media_proxy/media_proxy_controller.ex index 961c73666..9dc76e928 100644 --- a/lib/pleroma/web/media_proxy/media_proxy_controller.ex +++ b/lib/pleroma/web/media_proxy/media_proxy_controller.ex @@ -67,9 +67,14 @@ defmodule Pleroma.Web.MediaProxy.MediaProxyController do end end - # TODO: find a workaround so avatar_static and header_static can work. - # Those only permit GIFs for animation, so we have to permit a way to - # allow those to get real static variants. + defp handle_preview( + "image/" <> _ = _content_type, + %{params: %{"output_format" => "jpeg"}} = conn, + url + ) do + handle_jpeg_preview(conn, url) + end + defp handle_preview("image/gif" = _content_type, conn, url) do mediaproxy_url = url |> MediaProxy.url() From 6141eb94ab034b5141a5c60b2814fb45b829c1ac Mon Sep 17 00:00:00 2001 From: Mark Felder Date: Thu, 3 Sep 2020 12:40:42 -0500 Subject: [PATCH 043/102] Fetch preview requests through the MediaProxy. Separate connection options are not needed. Use a separate pool for preview requests --- config/config.exs | 10 +++++---- config/description.exs | 21 ------------------- .../web/media_proxy/media_proxy_controller.ex | 17 ++------------- 3 files changed, 8 insertions(+), 40 deletions(-) diff --git a/config/config.exs b/config/config.exs index 317ef84a9..d691753bd 100644 --- a/config/config.exs +++ b/config/config.exs @@ -445,10 +445,7 @@ config :pleroma, :media_preview_proxy, enabled: false, thumbnail_max_width: 600, thumbnail_max_height: 600, - image_quality: 85, - proxy_opts: [ - head_request_max_read_duration: 5_000 - ] + image_quality: 85 config :pleroma, :chat, enabled: true @@ -761,6 +758,11 @@ config :pleroma, :pools, max_waiting: 10, timeout: 10_000 ], + preview: [ + size: 50, + max_waiting: 10, + timeout: 10_000 + ], upload: [ size: 25, max_waiting: 5, diff --git a/config/description.exs b/config/description.exs index 868b89d29..73333d6e6 100644 --- a/config/description.exs +++ b/config/description.exs @@ -1978,27 +1978,6 @@ config :pleroma, :config_description, [ key: :image_quality, type: :integer, description: "Quality of the output. Ranges from 0 (min quality) to 100 (max quality)." - }, - %{ - key: :proxy_opts, - type: :keyword, - description: "Media proxy options", - suggestions: [ - head_request_max_read_duration: 5_000 - ], - children: [ - %{ - key: :head_request_max_read_duration, - type: :integer, - description: "Timeout (in milliseconds) of HEAD request to remote URI." - } - ] - }, - %{ - key: :whitelist, - type: {:list, :string}, - description: "List of hosts with scheme to bypass the mediaproxy", - suggestions: ["http://example.com"] } ] }, diff --git a/lib/pleroma/web/media_proxy/media_proxy_controller.ex b/lib/pleroma/web/media_proxy/media_proxy_controller.ex index 961c73666..b1f00fa0c 100644 --- a/lib/pleroma/web/media_proxy/media_proxy_controller.ex +++ b/lib/pleroma/web/media_proxy/media_proxy_controller.ex @@ -33,8 +33,7 @@ defmodule Pleroma.Web.MediaProxy.MediaProxyController do def preview(conn, %{"sig" => sig64, "url" => url64}) do with {_, true} <- {:enabled, MediaProxy.preview_enabled?()}, - {:ok, url} <- MediaProxy.decode_url(sig64, url64), - :ok <- MediaProxy.verify_request_path_and_url(conn, url) do + {:ok, url} <- MediaProxy.decode_url(sig64, url64) do handle_preview(conn, url) else {:enabled, false} -> @@ -50,9 +49,7 @@ defmodule Pleroma.Web.MediaProxy.MediaProxyController do defp handle_preview(conn, url) do with {:ok, %{status: status} = head_response} when status in 200..299 <- - Tesla.head(url, - opts: [adapter: [timeout: preview_head_request_timeout(), follow_redirect: true]] - ) do + Pleroma.HTTP.request("head", MediaProxy.url(url), [], [], [adapter: [pool: :preview]]) do content_type = Tesla.get_header(head_response, "content-type") handle_preview(content_type, conn, url) else @@ -172,17 +169,7 @@ defmodule Pleroma.Web.MediaProxy.MediaProxyController do {thumbnail_max_width, thumbnail_max_height} end - defp preview_head_request_timeout do - Keyword.get(media_preview_proxy_opts(), :head_request_max_read_duration) || - Keyword.get(media_proxy_opts(), :max_read_duration) || - ReverseProxy.max_read_duration_default() - end - defp media_proxy_opts do Config.get([:media_proxy, :proxy_opts], []) end - - defp media_preview_proxy_opts do - Config.get([:media_preview_proxy, :proxy_opts], []) - end end From b529616e110b3d487f1f2c462791ceabe8f1baf3 Mon Sep 17 00:00:00 2001 From: Mark Felder Date: Thu, 3 Sep 2020 15:08:12 -0500 Subject: [PATCH 044/102] Increase pool and timeout for preview so it catches slow media pool responses --- config/config.exs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/config/config.exs b/config/config.exs index d691753bd..b92d3ccbb 100644 --- a/config/config.exs +++ b/config/config.exs @@ -760,8 +760,8 @@ config :pleroma, :pools, ], preview: [ size: 50, - max_waiting: 10, - timeout: 10_000 + max_waiting: 20, + timeout: 15_000 ], upload: [ size: 25, From f25b0e87f3dd73e02c954c5baab3c52becdd9c9e Mon Sep 17 00:00:00 2001 From: Mark Felder Date: Thu, 3 Sep 2020 15:28:57 -0500 Subject: [PATCH 045/102] URL passed to helper is already MediaProxy Set :preview pool on the request --- lib/pleroma/helpers/media_helper.ex | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/lib/pleroma/helpers/media_helper.ex b/lib/pleroma/helpers/media_helper.ex index 9bd815c26..cfb091f82 100644 --- a/lib/pleroma/helpers/media_helper.ex +++ b/lib/pleroma/helpers/media_helper.ex @@ -12,8 +12,7 @@ defmodule Pleroma.Helpers.MediaHelper do def image_resize(url, options) do with executable when is_binary(executable) <- System.find_executable("convert"), {:ok, args} <- prepare_image_resize_args(options), - url = Pleroma.Web.MediaProxy.url(url), - {:ok, env} <- Pleroma.HTTP.get(url), + {:ok, env} <- Pleroma.HTTP.get(url, [], [adapter: [pool: :preview]]), {:ok, fifo_path} <- mkfifo() do args = List.flatten([fifo_path, args]) run_fifo(fifo_path, env, executable, args) @@ -61,8 +60,7 @@ defmodule Pleroma.Helpers.MediaHelper do def video_framegrab(url) do with executable when is_binary(executable) <- System.find_executable("ffmpeg"), - url = Pleroma.Web.MediaProxy.url(url), - {:ok, env} <- Pleroma.HTTP.get(url), + {:ok, env} <- Pleroma.HTTP.get(url, [], [adapter: [pool: :preview]]), {:ok, fifo_path} <- mkfifo(), args = [ "-y", From c3b02341bf4ab610e9425d6811dca057e9f811a4 Mon Sep 17 00:00:00 2001 From: Ivan Tashkinov Date: Sat, 5 Sep 2020 16:16:35 +0300 Subject: [PATCH 046/102] [#2497] Made media preview proxy fall back to media proxy instead of to source url. Adjusted tests. Refactoring. --- lib/pleroma/helpers/media_helper.ex | 6 ++- lib/pleroma/web/media_proxy/media_proxy.ex | 4 +- .../web/media_proxy/media_proxy_controller.ex | 50 ++++++++++--------- .../mastodon_api/views/account_view_test.exs | 33 ++++++------ 4 files changed, 51 insertions(+), 42 deletions(-) diff --git a/lib/pleroma/helpers/media_helper.ex b/lib/pleroma/helpers/media_helper.ex index cfb091f82..bb93d4915 100644 --- a/lib/pleroma/helpers/media_helper.ex +++ b/lib/pleroma/helpers/media_helper.ex @@ -7,12 +7,14 @@ defmodule Pleroma.Helpers.MediaHelper do Handles common media-related operations. """ + alias Pleroma.HTTP + @tmp_base "/tmp/pleroma-media_preview-pipe" def image_resize(url, options) do with executable when is_binary(executable) <- System.find_executable("convert"), {:ok, args} <- prepare_image_resize_args(options), - {:ok, env} <- Pleroma.HTTP.get(url, [], [adapter: [pool: :preview]]), + {:ok, env} <- HTTP.get(url, [], adapter: [pool: :preview]), {:ok, fifo_path} <- mkfifo() do args = List.flatten([fifo_path, args]) run_fifo(fifo_path, env, executable, args) @@ -60,7 +62,7 @@ defmodule Pleroma.Helpers.MediaHelper do def video_framegrab(url) do with executable when is_binary(executable) <- System.find_executable("ffmpeg"), - {:ok, env} <- Pleroma.HTTP.get(url, [], [adapter: [pool: :preview]]), + {:ok, env} <- HTTP.get(url, [], adapter: [pool: :preview]), {:ok, fifo_path} <- mkfifo(), args = [ "-y", diff --git a/lib/pleroma/web/media_proxy/media_proxy.ex b/lib/pleroma/web/media_proxy/media_proxy.ex index 4cbe1cf89..80017cde1 100644 --- a/lib/pleroma/web/media_proxy/media_proxy.ex +++ b/lib/pleroma/web/media_proxy/media_proxy.ex @@ -57,13 +57,11 @@ defmodule Pleroma.Web.MediaProxy do end end - # Note: routing all URLs to preview handler (even local and whitelisted). - # Preview handler will call url/1 on decoded URLs, and applicable ones will detour media proxy. def preview_url(url, preview_params \\ []) do if preview_enabled?() do encode_preview_url(url, preview_params) else - url + url(url) end end diff --git a/lib/pleroma/web/media_proxy/media_proxy_controller.ex b/lib/pleroma/web/media_proxy/media_proxy_controller.ex index 33daa1e05..469fbae59 100644 --- a/lib/pleroma/web/media_proxy/media_proxy_controller.ex +++ b/lib/pleroma/web/media_proxy/media_proxy_controller.ex @@ -48,10 +48,12 @@ defmodule Pleroma.Web.MediaProxy.MediaProxyController do end defp handle_preview(conn, url) do + media_proxy_url = MediaProxy.url(url) + with {:ok, %{status: status} = head_response} when status in 200..299 <- - Pleroma.HTTP.request("head", MediaProxy.url(url), [], [], [adapter: [pool: :preview]]) do + Pleroma.HTTP.request("head", media_proxy_url, [], [], adapter: [pool: :preview]) do content_type = Tesla.get_header(head_response, "content-type") - handle_preview(content_type, conn, url) + handle_preview(content_type, conn, media_proxy_url) else {_, %{status: status}} -> send_resp(conn, :failed_dependency, "Can't fetch HTTP headers (HTTP #{status}).") @@ -67,40 +69,38 @@ defmodule Pleroma.Web.MediaProxy.MediaProxyController do defp handle_preview( "image/" <> _ = _content_type, %{params: %{"output_format" => "jpeg"}} = conn, - url + media_proxy_url ) do - handle_jpeg_preview(conn, url) + handle_jpeg_preview(conn, media_proxy_url) end - defp handle_preview("image/gif" = _content_type, conn, url) do - mediaproxy_url = url |> MediaProxy.url() - - redirect(conn, external: mediaproxy_url) + defp handle_preview("image/gif" = _content_type, conn, media_proxy_url) do + redirect(conn, external: media_proxy_url) end - defp handle_preview("image/png" <> _ = _content_type, conn, url) do - handle_png_preview(conn, url) + defp handle_preview("image/png" <> _ = _content_type, conn, media_proxy_url) do + handle_png_preview(conn, media_proxy_url) end - defp handle_preview("image/" <> _ = _content_type, conn, url) do - handle_jpeg_preview(conn, url) + defp handle_preview("image/" <> _ = _content_type, conn, media_proxy_url) do + handle_jpeg_preview(conn, media_proxy_url) end - defp handle_preview("video/" <> _ = _content_type, conn, url) do - handle_video_preview(conn, url) + defp handle_preview("video/" <> _ = _content_type, conn, media_proxy_url) do + handle_video_preview(conn, media_proxy_url) end - defp handle_preview(content_type, conn, _url) do + defp handle_preview(content_type, conn, _media_proxy_url) do send_resp(conn, :unprocessable_entity, "Unsupported content type: #{content_type}.") end - defp handle_png_preview(%{params: params} = conn, url) do + defp handle_png_preview(%{params: params} = conn, media_proxy_url) do quality = Config.get!([:media_preview_proxy, :image_quality]) with {thumbnail_max_width, thumbnail_max_height} <- thumbnail_max_dimensions(params), {:ok, thumbnail_binary} <- MediaHelper.image_resize( - url, + media_proxy_url, %{ max_width: thumbnail_max_width, max_height: thumbnail_max_height, @@ -109,7 +109,7 @@ defmodule Pleroma.Web.MediaProxy.MediaProxyController do } ) do conn - |> put_preview_response_headers("image/png", "preview.png") + |> put_preview_response_headers(["image/png", "preview.png"]) |> send_resp(200, thumbnail_binary) else _ -> @@ -117,13 +117,13 @@ defmodule Pleroma.Web.MediaProxy.MediaProxyController do end end - defp handle_jpeg_preview(%{params: params} = conn, url) do + defp handle_jpeg_preview(%{params: params} = conn, media_proxy_url) do quality = Config.get!([:media_preview_proxy, :image_quality]) with {thumbnail_max_width, thumbnail_max_height} <- thumbnail_max_dimensions(params), {:ok, thumbnail_binary} <- MediaHelper.image_resize( - url, + media_proxy_url, %{max_width: thumbnail_max_width, max_height: thumbnail_max_height, quality: quality} ) do conn @@ -135,9 +135,9 @@ defmodule Pleroma.Web.MediaProxy.MediaProxyController do end end - defp handle_video_preview(conn, url) do + defp handle_video_preview(conn, media_proxy_url) do with {:ok, thumbnail_binary} <- - MediaHelper.video_framegrab(url) do + MediaHelper.video_framegrab(media_proxy_url) do conn |> put_preview_response_headers() |> send_resp(200, thumbnail_binary) @@ -147,10 +147,14 @@ defmodule Pleroma.Web.MediaProxy.MediaProxyController do end end - defp put_preview_response_headers(conn, content_type \\ "image/jpeg", filename \\ "preview.jpg") do + defp put_preview_response_headers( + conn, + [content_type, filename] = _content_info \\ ["image/jpeg", "preview.jpg"] + ) do conn |> put_resp_header("content-type", content_type) |> put_resp_header("content-disposition", "inline; filename=\"#{filename}\"") + # TODO: enable caching |> put_resp_header("cache-control", "max-age=0, private, must-revalidate") end diff --git a/test/web/mastodon_api/views/account_view_test.exs b/test/web/mastodon_api/views/account_view_test.exs index 8f37efa3c..2f56d9c8f 100644 --- a/test/web/mastodon_api/views/account_view_test.exs +++ b/test/web/mastodon_api/views/account_view_test.exs @@ -541,8 +541,9 @@ defmodule Pleroma.Web.MastodonAPI.AccountViewTest do end end - test "uses mediaproxy urls when it's enabled" do + test "uses mediaproxy urls when it's enabled (regardless of media preview proxy state)" do clear_config([:media_proxy, :enabled], true) + clear_config([:media_preview_proxy, :enabled]) user = insert(:user, @@ -551,20 +552,24 @@ defmodule Pleroma.Web.MastodonAPI.AccountViewTest do emoji: %{"joker_smile" => "https://evil.website/society.png"} ) - AccountView.render("show.json", %{user: user, skip_visibility_check: true}) - |> Enum.all?(fn - {key, url} when key in [:avatar, :avatar_static, :header, :header_static] -> - String.starts_with?(url, Pleroma.Web.base_url()) + with media_preview_enabled <- [false, true] do + Config.put([:media_preview_proxy, :enabled], media_preview_enabled) - {:emojis, emojis} -> - Enum.all?(emojis, fn %{url: url, static_url: static_url} -> - String.starts_with?(url, Pleroma.Web.base_url()) && - String.starts_with?(static_url, Pleroma.Web.base_url()) - end) + AccountView.render("show.json", %{user: user, skip_visibility_check: true}) + |> Enum.all?(fn + {key, url} when key in [:avatar, :avatar_static, :header, :header_static] -> + String.starts_with?(url, Pleroma.Web.base_url()) - _ -> - true - end) - |> assert() + {:emojis, emojis} -> + Enum.all?(emojis, fn %{url: url, static_url: static_url} -> + String.starts_with?(url, Pleroma.Web.base_url()) && + String.starts_with?(static_url, Pleroma.Web.base_url()) + end) + + _ -> + true + end) + |> assert() + end end end From f170d471307ba0082b98351190b3d6b808bdfe1a Mon Sep 17 00:00:00 2001 From: Ivan Tashkinov Date: Sat, 5 Sep 2020 20:19:09 +0300 Subject: [PATCH 047/102] [#2497] Adjusted media proxy preview invalidation. Allowed client-side caching for media preview. Adjusted prewarmer to fetch only proxiable URIs. Removed :preview pool in favor of existing :media one. Misc. refactoring. --- config/config.exs | 5 ---- lib/pleroma/helpers/media_helper.ex | 4 +-- lib/pleroma/reverse_proxy/reverse_proxy.ex | 1 + .../mrf/media_proxy_warming_policy.ex | 27 +++++++++++-------- lib/pleroma/web/media_proxy/invalidation.ex | 4 ++- lib/pleroma/web/media_proxy/media_proxy.ex | 20 +++++++------- .../web/media_proxy/media_proxy_controller.ex | 5 ++-- 7 files changed, 34 insertions(+), 32 deletions(-) diff --git a/config/config.exs b/config/config.exs index b92d3ccbb..e5b7e18df 100644 --- a/config/config.exs +++ b/config/config.exs @@ -754,11 +754,6 @@ config :pleroma, :pools, timeout: 10_000 ], media: [ - size: 50, - max_waiting: 10, - timeout: 10_000 - ], - preview: [ size: 50, max_waiting: 20, timeout: 15_000 diff --git a/lib/pleroma/helpers/media_helper.ex b/lib/pleroma/helpers/media_helper.ex index bb93d4915..a1205e10d 100644 --- a/lib/pleroma/helpers/media_helper.ex +++ b/lib/pleroma/helpers/media_helper.ex @@ -14,7 +14,7 @@ defmodule Pleroma.Helpers.MediaHelper do def image_resize(url, options) do with executable when is_binary(executable) <- System.find_executable("convert"), {:ok, args} <- prepare_image_resize_args(options), - {:ok, env} <- HTTP.get(url, [], adapter: [pool: :preview]), + {:ok, env} <- HTTP.get(url, [], adapter: [pool: :media]), {:ok, fifo_path} <- mkfifo() do args = List.flatten([fifo_path, args]) run_fifo(fifo_path, env, executable, args) @@ -62,7 +62,7 @@ defmodule Pleroma.Helpers.MediaHelper do def video_framegrab(url) do with executable when is_binary(executable) <- System.find_executable("ffmpeg"), - {:ok, env} <- HTTP.get(url, [], adapter: [pool: :preview]), + {:ok, env} <- HTTP.get(url, [], adapter: [pool: :media]), {:ok, fifo_path} <- mkfifo(), args = [ "-y", diff --git a/lib/pleroma/reverse_proxy/reverse_proxy.ex b/lib/pleroma/reverse_proxy/reverse_proxy.ex index 35637e934..8ae1157df 100644 --- a/lib/pleroma/reverse_proxy/reverse_proxy.ex +++ b/lib/pleroma/reverse_proxy/reverse_proxy.ex @@ -18,6 +18,7 @@ defmodule Pleroma.ReverseProxy do @methods ~w(GET HEAD) def max_read_duration_default, do: @max_read_duration + def default_cache_control_header, do: @default_cache_control_header @moduledoc """ A reverse proxy. diff --git a/lib/pleroma/web/activity_pub/mrf/media_proxy_warming_policy.ex b/lib/pleroma/web/activity_pub/mrf/media_proxy_warming_policy.ex index 5d8bb72aa..1050b74ba 100644 --- a/lib/pleroma/web/activity_pub/mrf/media_proxy_warming_policy.ex +++ b/lib/pleroma/web/activity_pub/mrf/media_proxy_warming_policy.ex @@ -12,23 +12,28 @@ defmodule Pleroma.Web.ActivityPub.MRF.MediaProxyWarmingPolicy do require Logger - @options [ + @adapter_options [ pool: :media ] def perform(:prefetch, url) do - Logger.debug("Prefetching #{inspect(url)}") + # Fetching only proxiable resources + if MediaProxy.enabled?() and MediaProxy.url_proxiable?(url) do + # If preview proxy is enabled, it'll also hit media proxy (so we're caching both requests) + prefetch_url = MediaProxy.preview_url(url) - opts = - if Application.get_env(:tesla, :adapter) == Tesla.Adapter.Hackney do - Keyword.put(@options, :recv_timeout, 10_000) - else - @options - end + Logger.debug("Prefetching #{inspect(url)} as #{inspect(prefetch_url)}") - url - |> MediaProxy.preview_url() - |> HTTP.get([], adapter: opts) + HTTP.get(prefetch_url, [], adapter: adapter_options()) + end + end + + defp adapter_options do + if Application.get_env(:tesla, :adapter) == Tesla.Adapter.Hackney do + Keyword.put(@adapter_options, :recv_timeout, 10_000) + else + @adapter_options + end end def perform(:preload, %{"object" => %{"attachment" => attachments}} = _message) do diff --git a/lib/pleroma/web/media_proxy/invalidation.ex b/lib/pleroma/web/media_proxy/invalidation.ex index 5808861e6..4f4340478 100644 --- a/lib/pleroma/web/media_proxy/invalidation.ex +++ b/lib/pleroma/web/media_proxy/invalidation.ex @@ -33,6 +33,8 @@ defmodule Pleroma.Web.MediaProxy.Invalidation do def prepare_urls(urls) do urls |> List.wrap() - |> Enum.map(&MediaProxy.url/1) + |> Enum.map(fn url -> [MediaProxy.url(url), MediaProxy.preview_url(url)] end) + |> List.flatten() + |> Enum.uniq() end end diff --git a/lib/pleroma/web/media_proxy/media_proxy.ex b/lib/pleroma/web/media_proxy/media_proxy.ex index 80017cde1..ba553998b 100644 --- a/lib/pleroma/web/media_proxy/media_proxy.ex +++ b/lib/pleroma/web/media_proxy/media_proxy.ex @@ -41,20 +41,16 @@ defmodule Pleroma.Web.MediaProxy do def url("/" <> _ = url), do: url def url(url) do - if not enabled?() or not url_proxiable?(url) do - url - else + if enabled?() and url_proxiable?(url) do encode_url(url) + else + url end end @spec url_proxiable?(String.t()) :: boolean() def url_proxiable?(url) do - if local?(url) or whitelisted?(url) do - false - else - true - end + not local?(url) and not whitelisted?(url) end def preview_url(url, preview_params \\ []) do @@ -69,7 +65,7 @@ defmodule Pleroma.Web.MediaProxy do # Note: media proxy must be enabled for media preview proxy in order to load all # non-local non-whitelisted URLs through it and be sure that body size constraint is preserved. - def preview_enabled?, do: enabled?() and Config.get([:media_preview_proxy, :enabled], false) + def preview_enabled?, do: enabled?() and !!Config.get([:media_preview_proxy, :enabled]) def local?(url), do: String.starts_with?(url, Pleroma.Web.base_url()) @@ -138,9 +134,13 @@ defmodule Pleroma.Web.MediaProxy do if path = URI.parse(url_or_path).path, do: Path.basename(path) end + def base_url do + Config.get([:media_proxy, :base_url], Web.base_url()) + end + defp proxy_url(path, sig_base64, url_base64, filename) do [ - Config.get([:media_proxy, :base_url], Web.base_url()), + base_url(), path, sig_base64, url_base64, diff --git a/lib/pleroma/web/media_proxy/media_proxy_controller.ex b/lib/pleroma/web/media_proxy/media_proxy_controller.ex index 469fbae59..89f4a23bd 100644 --- a/lib/pleroma/web/media_proxy/media_proxy_controller.ex +++ b/lib/pleroma/web/media_proxy/media_proxy_controller.ex @@ -51,7 +51,7 @@ defmodule Pleroma.Web.MediaProxy.MediaProxyController do media_proxy_url = MediaProxy.url(url) with {:ok, %{status: status} = head_response} when status in 200..299 <- - Pleroma.HTTP.request("head", media_proxy_url, [], [], adapter: [pool: :preview]) do + Pleroma.HTTP.request("head", media_proxy_url, [], [], adapter: [pool: :media]) do content_type = Tesla.get_header(head_response, "content-type") handle_preview(content_type, conn, media_proxy_url) else @@ -154,8 +154,7 @@ defmodule Pleroma.Web.MediaProxy.MediaProxyController do conn |> put_resp_header("content-type", content_type) |> put_resp_header("content-disposition", "inline; filename=\"#{filename}\"") - # TODO: enable caching - |> put_resp_header("cache-control", "max-age=0, private, must-revalidate") + |> put_resp_header("cache-control", ReverseProxy.default_cache_control_header()) end defp thumbnail_max_dimensions(params) do From 88a6ee4a5989036de5c1e82c6111291887597d98 Mon Sep 17 00:00:00 2001 From: Ivan Tashkinov Date: Sat, 5 Sep 2020 20:23:18 +0300 Subject: [PATCH 048/102] [#2497] Func defs grouping fix. --- .../mrf/media_proxy_warming_policy.ex | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/lib/pleroma/web/activity_pub/mrf/media_proxy_warming_policy.ex b/lib/pleroma/web/activity_pub/mrf/media_proxy_warming_policy.ex index 1050b74ba..6c63fe15c 100644 --- a/lib/pleroma/web/activity_pub/mrf/media_proxy_warming_policy.ex +++ b/lib/pleroma/web/activity_pub/mrf/media_proxy_warming_policy.ex @@ -16,6 +16,14 @@ defmodule Pleroma.Web.ActivityPub.MRF.MediaProxyWarmingPolicy do pool: :media ] + defp adapter_options do + if Application.get_env(:tesla, :adapter) == Tesla.Adapter.Hackney do + Keyword.put(@adapter_options, :recv_timeout, 10_000) + else + @adapter_options + end + end + def perform(:prefetch, url) do # Fetching only proxiable resources if MediaProxy.enabled?() and MediaProxy.url_proxiable?(url) do @@ -28,14 +36,6 @@ defmodule Pleroma.Web.ActivityPub.MRF.MediaProxyWarmingPolicy do end end - defp adapter_options do - if Application.get_env(:tesla, :adapter) == Tesla.Adapter.Hackney do - Keyword.put(@adapter_options, :recv_timeout, 10_000) - else - @adapter_options - end - end - def perform(:preload, %{"object" => %{"attachment" => attachments}} = _message) do Enum.each(attachments, fn %{"url" => url} when is_list(url) -> From 759f8bc3ae49580319a4ecb12770e8581826c6d9 Mon Sep 17 00:00:00 2001 From: Ivan Tashkinov Date: Sun, 6 Sep 2020 15:30:11 +0300 Subject: [PATCH 049/102] [#2497] Fixed MediaProxyWarmingPolicyTest. --- test/web/activity_pub/mrf/mediaproxy_warming_policy_test.exs | 2 ++ 1 file changed, 2 insertions(+) diff --git a/test/web/activity_pub/mrf/mediaproxy_warming_policy_test.exs b/test/web/activity_pub/mrf/mediaproxy_warming_policy_test.exs index 313d59a66..1710c4d2a 100644 --- a/test/web/activity_pub/mrf/mediaproxy_warming_policy_test.exs +++ b/test/web/activity_pub/mrf/mediaproxy_warming_policy_test.exs @@ -22,6 +22,8 @@ defmodule Pleroma.Web.ActivityPub.MRF.MediaProxyWarmingPolicyTest do } } + setup do: clear_config([:media_proxy, :enabled], true) + test "it prefetches media proxy URIs" do with_mock HTTP, get: fn _, _, _ -> {:ok, []} end do MediaProxyWarmingPolicy.filter(@message) From 68a74d66596f0e35f0e080de25e4679d2c8b1b76 Mon Sep 17 00:00:00 2001 From: Ivan Tashkinov Date: Wed, 9 Sep 2020 19:30:42 +0300 Subject: [PATCH 050/102] [#2497] Added missing alias, removed legacy `:adapter` option specification for HTTP.get/_. --- lib/pleroma/helpers/media_helper.ex | 4 ++-- lib/pleroma/instances/instance.ex | 2 +- lib/pleroma/web/media_proxy/media_proxy_controller.ex | 2 +- test/web/mastodon_api/views/account_view_test.exs | 1 + 4 files changed, 5 insertions(+), 4 deletions(-) diff --git a/lib/pleroma/helpers/media_helper.ex b/lib/pleroma/helpers/media_helper.ex index a1205e10d..d834b4a07 100644 --- a/lib/pleroma/helpers/media_helper.ex +++ b/lib/pleroma/helpers/media_helper.ex @@ -14,7 +14,7 @@ defmodule Pleroma.Helpers.MediaHelper do def image_resize(url, options) do with executable when is_binary(executable) <- System.find_executable("convert"), {:ok, args} <- prepare_image_resize_args(options), - {:ok, env} <- HTTP.get(url, [], adapter: [pool: :media]), + {:ok, env} <- HTTP.get(url, [], pool: :media), {:ok, fifo_path} <- mkfifo() do args = List.flatten([fifo_path, args]) run_fifo(fifo_path, env, executable, args) @@ -62,7 +62,7 @@ defmodule Pleroma.Helpers.MediaHelper do def video_framegrab(url) do with executable when is_binary(executable) <- System.find_executable("ffmpeg"), - {:ok, env} <- HTTP.get(url, [], adapter: [pool: :media]), + {:ok, env} <- HTTP.get(url, [], pool: :media), {:ok, fifo_path} <- mkfifo(), args = [ "-y", diff --git a/lib/pleroma/instances/instance.ex b/lib/pleroma/instances/instance.ex index 8bf53c090..4fe4b198d 100644 --- a/lib/pleroma/instances/instance.ex +++ b/lib/pleroma/instances/instance.ex @@ -157,7 +157,7 @@ defmodule Pleroma.Instances.Instance do try do with {:ok, %Tesla.Env{body: html}} <- Pleroma.HTTP.get(to_string(instance_uri), [{"accept", "text/html"}], - adapter: [pool: :media] + pool: :media ), favicon_rel <- html diff --git a/lib/pleroma/web/media_proxy/media_proxy_controller.ex b/lib/pleroma/web/media_proxy/media_proxy_controller.ex index 89f4a23bd..acb581459 100644 --- a/lib/pleroma/web/media_proxy/media_proxy_controller.ex +++ b/lib/pleroma/web/media_proxy/media_proxy_controller.ex @@ -51,7 +51,7 @@ defmodule Pleroma.Web.MediaProxy.MediaProxyController do media_proxy_url = MediaProxy.url(url) with {:ok, %{status: status} = head_response} when status in 200..299 <- - Pleroma.HTTP.request("head", media_proxy_url, [], [], adapter: [pool: :media]) do + Pleroma.HTTP.request("head", media_proxy_url, [], [], pool: :media) do content_type = Tesla.get_header(head_response, "content-type") handle_preview(content_type, conn, media_proxy_url) else diff --git a/test/web/mastodon_api/views/account_view_test.exs b/test/web/mastodon_api/views/account_view_test.exs index 5c5aa6cee..793b44fca 100644 --- a/test/web/mastodon_api/views/account_view_test.exs +++ b/test/web/mastodon_api/views/account_view_test.exs @@ -5,6 +5,7 @@ defmodule Pleroma.Web.MastodonAPI.AccountViewTest do use Pleroma.DataCase + alias Pleroma.Config alias Pleroma.User alias Pleroma.UserRelationship alias Pleroma.Web.CommonAPI From b4860c57a63b48ded8eaa37b9f40cc0851c78882 Mon Sep 17 00:00:00 2001 From: Ivan Tashkinov Date: Wed, 9 Sep 2020 19:43:36 +0300 Subject: [PATCH 051/102] [#2497] Formatting fix. --- lib/pleroma/instances/instance.ex | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/lib/pleroma/instances/instance.ex b/lib/pleroma/instances/instance.ex index 4fe4b198d..ad7764f05 100644 --- a/lib/pleroma/instances/instance.ex +++ b/lib/pleroma/instances/instance.ex @@ -156,9 +156,7 @@ defmodule Pleroma.Instances.Instance do defp scrape_favicon(%URI{} = instance_uri) do try do with {:ok, %Tesla.Env{body: html}} <- - Pleroma.HTTP.get(to_string(instance_uri), [{"accept", "text/html"}], - pool: :media - ), + Pleroma.HTTP.get(to_string(instance_uri), [{"accept", "text/html"}], pool: :media), favicon_rel <- html |> Floki.parse_document!() From 148bc244359e70c87ec2812c65da83fe87efbc68 Mon Sep 17 00:00:00 2001 From: Ivan Tashkinov Date: Thu, 10 Sep 2020 11:54:10 +0300 Subject: [PATCH 052/102] [#2497] Removed Hackney-specific code (no longer needed due to adapter options unification). --- .../activity_pub/mrf/media_proxy_warming_policy.ex | 13 +++---------- 1 file changed, 3 insertions(+), 10 deletions(-) diff --git a/lib/pleroma/web/activity_pub/mrf/media_proxy_warming_policy.ex b/lib/pleroma/web/activity_pub/mrf/media_proxy_warming_policy.ex index 6c63fe15c..0fb05d3c4 100644 --- a/lib/pleroma/web/activity_pub/mrf/media_proxy_warming_policy.ex +++ b/lib/pleroma/web/activity_pub/mrf/media_proxy_warming_policy.ex @@ -13,17 +13,10 @@ defmodule Pleroma.Web.ActivityPub.MRF.MediaProxyWarmingPolicy do require Logger @adapter_options [ - pool: :media + pool: :media, + recv_timeout: 10_000 ] - defp adapter_options do - if Application.get_env(:tesla, :adapter) == Tesla.Adapter.Hackney do - Keyword.put(@adapter_options, :recv_timeout, 10_000) - else - @adapter_options - end - end - def perform(:prefetch, url) do # Fetching only proxiable resources if MediaProxy.enabled?() and MediaProxy.url_proxiable?(url) do @@ -32,7 +25,7 @@ defmodule Pleroma.Web.ActivityPub.MRF.MediaProxyWarmingPolicy do Logger.debug("Prefetching #{inspect(url)} as #{inspect(prefetch_url)}") - HTTP.get(prefetch_url, [], adapter: adapter_options()) + HTTP.get(prefetch_url, [], @adapter_options) end end From dc4e06e1991379f9f1b64774c5bdaacec96639b7 Mon Sep 17 00:00:00 2001 From: Ivan Tashkinov Date: Thu, 10 Sep 2020 21:28:07 +0300 Subject: [PATCH 053/102] [#2497] Removed support for thumbnail_max_* params for media preview proxy (per https://git.pleroma.social/pleroma/pleroma/-/merge_requests/2497#note_70771) --- .../web/media_proxy/media_proxy_controller.ex | 38 +++++++------------ 1 file changed, 14 insertions(+), 24 deletions(-) diff --git a/lib/pleroma/web/media_proxy/media_proxy_controller.ex b/lib/pleroma/web/media_proxy/media_proxy_controller.ex index acb581459..5621f72dc 100644 --- a/lib/pleroma/web/media_proxy/media_proxy_controller.ex +++ b/lib/pleroma/web/media_proxy/media_proxy_controller.ex @@ -9,6 +9,7 @@ defmodule Pleroma.Web.MediaProxy.MediaProxyController do alias Pleroma.Helpers.MediaHelper alias Pleroma.ReverseProxy alias Pleroma.Web.MediaProxy + alias Plug.Conn def remote(conn, %{"sig" => sig64, "url" => url64}) do with {_, true} <- {:enabled, MediaProxy.enabled?()}, @@ -18,29 +19,29 @@ defmodule Pleroma.Web.MediaProxy.MediaProxyController do ReverseProxy.call(conn, url, media_proxy_opts()) else {:enabled, false} -> - send_resp(conn, 404, Plug.Conn.Status.reason_phrase(404)) + send_resp(conn, 404, Conn.Status.reason_phrase(404)) {:in_banned_urls, true} -> - send_resp(conn, 404, Plug.Conn.Status.reason_phrase(404)) + send_resp(conn, 404, Conn.Status.reason_phrase(404)) {:error, :invalid_signature} -> - send_resp(conn, 403, Plug.Conn.Status.reason_phrase(403)) + send_resp(conn, 403, Conn.Status.reason_phrase(403)) {:wrong_filename, filename} -> redirect(conn, external: MediaProxy.build_url(sig64, url64, filename)) end end - def preview(conn, %{"sig" => sig64, "url" => url64}) do + def preview(%Conn{} = conn, %{"sig" => sig64, "url" => url64}) do with {_, true} <- {:enabled, MediaProxy.preview_enabled?()}, {:ok, url} <- MediaProxy.decode_url(sig64, url64) do handle_preview(conn, url) else {:enabled, false} -> - send_resp(conn, 404, Plug.Conn.Status.reason_phrase(404)) + send_resp(conn, 404, Conn.Status.reason_phrase(404)) {:error, :invalid_signature} -> - send_resp(conn, 403, Plug.Conn.Status.reason_phrase(403)) + send_resp(conn, 403, Conn.Status.reason_phrase(403)) {:wrong_filename, filename} -> redirect(conn, external: MediaProxy.build_preview_url(sig64, url64, filename)) @@ -94,10 +95,10 @@ defmodule Pleroma.Web.MediaProxy.MediaProxyController do send_resp(conn, :unprocessable_entity, "Unsupported content type: #{content_type}.") end - defp handle_png_preview(%{params: params} = conn, media_proxy_url) do + defp handle_png_preview(conn, media_proxy_url) do quality = Config.get!([:media_preview_proxy, :image_quality]) - with {thumbnail_max_width, thumbnail_max_height} <- thumbnail_max_dimensions(params), + with {thumbnail_max_width, thumbnail_max_height} <- thumbnail_max_dimensions(), {:ok, thumbnail_binary} <- MediaHelper.image_resize( media_proxy_url, @@ -117,10 +118,10 @@ defmodule Pleroma.Web.MediaProxy.MediaProxyController do end end - defp handle_jpeg_preview(%{params: params} = conn, media_proxy_url) do + defp handle_jpeg_preview(conn, media_proxy_url) do quality = Config.get!([:media_preview_proxy, :image_quality]) - with {thumbnail_max_width, thumbnail_max_height} <- thumbnail_max_dimensions(params), + with {thumbnail_max_width, thumbnail_max_height} <- thumbnail_max_dimensions(), {:ok, thumbnail_binary} <- MediaHelper.image_resize( media_proxy_url, @@ -157,22 +158,11 @@ defmodule Pleroma.Web.MediaProxy.MediaProxyController do |> put_resp_header("cache-control", ReverseProxy.default_cache_control_header()) end - defp thumbnail_max_dimensions(params) do + defp thumbnail_max_dimensions() do config = Config.get([:media_preview_proxy], []) - thumbnail_max_width = - if w = params["thumbnail_max_width"] do - String.to_integer(w) - else - Keyword.fetch!(config, :thumbnail_max_width) - end - - thumbnail_max_height = - if h = params["thumbnail_max_height"] do - String.to_integer(h) - else - Keyword.fetch!(config, :thumbnail_max_height) - end + thumbnail_max_width = Keyword.fetch!(config, :thumbnail_max_width) + thumbnail_max_height = Keyword.fetch!(config, :thumbnail_max_height) {thumbnail_max_width, thumbnail_max_height} end From 4d18a50f3c4b6654339a6a8df71160e23b45cac0 Mon Sep 17 00:00:00 2001 From: Ivan Tashkinov Date: Thu, 10 Sep 2020 21:54:26 +0300 Subject: [PATCH 054/102] [#2497] Formatting fix. --- lib/pleroma/web/media_proxy/media_proxy_controller.ex | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/pleroma/web/media_proxy/media_proxy_controller.ex b/lib/pleroma/web/media_proxy/media_proxy_controller.ex index 5621f72dc..ff7fd2409 100644 --- a/lib/pleroma/web/media_proxy/media_proxy_controller.ex +++ b/lib/pleroma/web/media_proxy/media_proxy_controller.ex @@ -158,7 +158,7 @@ defmodule Pleroma.Web.MediaProxy.MediaProxyController do |> put_resp_header("cache-control", ReverseProxy.default_cache_control_header()) end - defp thumbnail_max_dimensions() do + defp thumbnail_max_dimensions do config = Config.get([:media_preview_proxy], []) thumbnail_max_width = Keyword.fetch!(config, :thumbnail_max_width) From f88dc1937e5aa4208143fa68400a5c38a1b9eddf Mon Sep 17 00:00:00 2001 From: Alex Gleason Date: Mon, 31 Aug 2020 16:48:24 -0500 Subject: [PATCH 055/102] MastodonAPI.StatusView.get_user/1 --> CommonAPI.get_user/1 --- .../web/admin_api/views/status_view.ex | 3 ++- lib/pleroma/web/common_api/common_api.ex | 17 +++++++++++++ .../web/mastodon_api/views/status_view.ex | 25 +++---------------- .../web/pleroma_api/views/scrobble_view.ex | 4 +-- test/web/common_api/common_api_test.exs | 20 +++++++++++++++ 5 files changed, 45 insertions(+), 24 deletions(-) diff --git a/lib/pleroma/web/admin_api/views/status_view.ex b/lib/pleroma/web/admin_api/views/status_view.ex index 500800be2..6042a22b6 100644 --- a/lib/pleroma/web/admin_api/views/status_view.ex +++ b/lib/pleroma/web/admin_api/views/status_view.ex @@ -8,6 +8,7 @@ defmodule Pleroma.Web.AdminAPI.StatusView do require Pleroma.Constants alias Pleroma.Web.AdminAPI + alias Pleroma.Web.CommonAPI alias Pleroma.Web.MastodonAPI defdelegate merge_account_views(user), to: AdminAPI.AccountView @@ -17,7 +18,7 @@ defmodule Pleroma.Web.AdminAPI.StatusView do end def render("show.json", %{activity: %{data: %{"object" => _object}} = activity} = opts) do - user = MastodonAPI.StatusView.get_user(activity.data["actor"]) + user = CommonAPI.get_user(activity.data["actor"]) MastodonAPI.StatusView.render("show.json", opts) |> Map.merge(%{account: merge_account_views(user)}) diff --git a/lib/pleroma/web/common_api/common_api.ex b/lib/pleroma/web/common_api/common_api.ex index 5ad2b91c2..d6e9d3d67 100644 --- a/lib/pleroma/web/common_api/common_api.ex +++ b/lib/pleroma/web/common_api/common_api.ex @@ -550,4 +550,21 @@ defmodule Pleroma.Web.CommonAPI do def show_reblogs(%User{} = user, %User{} = target) do UserRelationship.delete_reblog_mute(user, target) end + + def get_user(ap_id, fake_record_fallback \\ true) do + cond do + user = User.get_cached_by_ap_id(ap_id) -> + user + + user = User.get_by_guessed_nickname(ap_id) -> + user + + fake_record_fallback -> + # TODO: refactor (fake records is never a good idea) + User.error_user(ap_id) + + true -> + nil + end + end end diff --git a/lib/pleroma/web/mastodon_api/views/status_view.ex b/lib/pleroma/web/mastodon_api/views/status_view.ex index 3fe1967be..66732d09e 100644 --- a/lib/pleroma/web/mastodon_api/views/status_view.ex +++ b/lib/pleroma/web/mastodon_api/views/status_view.ex @@ -56,23 +56,6 @@ defmodule Pleroma.Web.MastodonAPI.StatusView do end) end - def get_user(ap_id, fake_record_fallback \\ true) do - cond do - user = User.get_cached_by_ap_id(ap_id) -> - user - - user = User.get_by_guessed_nickname(ap_id) -> - user - - fake_record_fallback -> - # TODO: refactor (fake records is never a good idea) - User.error_user(ap_id) - - true -> - nil - end - end - defp get_context_id(%{data: %{"context_id" => context_id}}) when not is_nil(context_id), do: context_id @@ -120,7 +103,7 @@ defmodule Pleroma.Web.MastodonAPI.StatusView do # Note: unresolved users are filtered out actors = (activities ++ parent_activities) - |> Enum.map(&get_user(&1.data["actor"], false)) + |> Enum.map(&CommonAPI.get_user(&1.data["actor"], false)) |> Enum.filter(& &1) UserRelationship.view_relationships_option(reading_user, actors, subset: :source_mutes) @@ -139,7 +122,7 @@ defmodule Pleroma.Web.MastodonAPI.StatusView do "show.json", %{activity: %{data: %{"type" => "Announce", "object" => _object}} = activity} = opts ) do - user = get_user(activity.data["actor"]) + user = CommonAPI.get_user(activity.data["actor"]) created_at = Utils.to_masto_date(activity.data["published"]) activity_object = Object.normalize(activity) @@ -212,7 +195,7 @@ defmodule Pleroma.Web.MastodonAPI.StatusView do def render("show.json", %{activity: %{data: %{"object" => _object}} = activity} = opts) do object = Object.normalize(activity) - user = get_user(activity.data["actor"]) + user = CommonAPI.get_user(activity.data["actor"]) user_follower_address = user.follower_address like_count = object.data["like_count"] || 0 @@ -266,7 +249,7 @@ defmodule Pleroma.Web.MastodonAPI.StatusView do reply_to = get_reply_to(activity, opts) - reply_to_user = reply_to && get_user(reply_to.data["actor"]) + reply_to_user = reply_to && CommonAPI.get_user(reply_to.data["actor"]) content = object diff --git a/lib/pleroma/web/pleroma_api/views/scrobble_view.ex b/lib/pleroma/web/pleroma_api/views/scrobble_view.ex index bbff93abe..95bd4c368 100644 --- a/lib/pleroma/web/pleroma_api/views/scrobble_view.ex +++ b/lib/pleroma/web/pleroma_api/views/scrobble_view.ex @@ -10,14 +10,14 @@ defmodule Pleroma.Web.PleromaAPI.ScrobbleView do alias Pleroma.Activity alias Pleroma.HTML alias Pleroma.Object + alias Pleroma.Web.CommonAPI alias Pleroma.Web.CommonAPI.Utils alias Pleroma.Web.MastodonAPI.AccountView - alias Pleroma.Web.MastodonAPI.StatusView def render("show.json", %{activity: %Activity{data: %{"type" => "Listen"}} = activity} = opts) do object = Object.normalize(activity) - user = StatusView.get_user(activity.data["actor"]) + user = CommonAPI.get_user(activity.data["actor"]) created_at = Utils.to_masto_date(activity.data["published"]) %{ diff --git a/test/web/common_api/common_api_test.exs b/test/web/common_api/common_api_test.exs index 4ba6232dc..d171b344a 100644 --- a/test/web/common_api/common_api_test.exs +++ b/test/web/common_api/common_api_test.exs @@ -1126,4 +1126,24 @@ defmodule Pleroma.Web.CommonAPITest do assert Visibility.get_visibility(activity) == "private" end end + + describe "get_user/1" do + test "gets user by ap_id" do + user = insert(:user) + assert CommonAPI.get_user(user.ap_id) == user + end + + test "gets user by guessed nickname" do + user = insert(:user, ap_id: "", nickname: "mario@mushroom.kingdom") + assert CommonAPI.get_user("https://mushroom.kingdom/users/mario") == user + end + + test "fallback" do + assert %User{ + name: "", + ap_id: "", + nickname: "erroruser@example.com" + } = CommonAPI.get_user("") + end + end end From b40a627ab02f9f63eac42ce6fc65282fc6cb6b92 Mon Sep 17 00:00:00 2001 From: Alex Gleason Date: Mon, 31 Aug 2020 19:56:05 -0500 Subject: [PATCH 056/102] AdminAPI: delete a chat message --- lib/pleroma/moderation_log.ex | 24 +++++++++ .../admin_api/controllers/chat_controller.ex | 37 +++++++++++++ .../operations/admin/chat_operation.ex | 44 +++++++++++++++ lib/pleroma/web/router.ex | 2 + test/support/factory.ex | 54 +++++++++++++++++++ .../controllers/chat_controller_test.exs | 53 ++++++++++++++++++ 6 files changed, 214 insertions(+) create mode 100644 lib/pleroma/web/admin_api/controllers/chat_controller.ex create mode 100644 lib/pleroma/web/api_spec/operations/admin/chat_operation.ex create mode 100644 test/web/admin_api/controllers/chat_controller_test.exs diff --git a/lib/pleroma/moderation_log.ex b/lib/pleroma/moderation_log.ex index 31c9afe2a..47036a6f6 100644 --- a/lib/pleroma/moderation_log.ex +++ b/lib/pleroma/moderation_log.ex @@ -320,6 +320,19 @@ defmodule Pleroma.ModerationLog do |> insert_log_entry_with_message() end + @spec insert_log(%{actor: User, action: String.t(), subject_id: String.t()}) :: + {:ok, ModerationLog} | {:error, any} + def insert_log(%{actor: %User{} = actor, action: "chat_message_delete", subject_id: subject_id}) do + %ModerationLog{ + data: %{ + "actor" => %{"nickname" => actor.nickname}, + "action" => "chat_message_delete", + "subject_id" => subject_id + } + } + |> insert_log_entry_with_message() + end + @spec insert_log_entry_with_message(ModerationLog) :: {:ok, ModerationLog} | {:error, any} defp insert_log_entry_with_message(entry) do entry.data["message"] @@ -627,6 +640,17 @@ defmodule Pleroma.ModerationLog do "@#{actor_nickname} updated users: #{users_to_nicknames_string(subjects)}" end + @spec get_log_entry_message(ModerationLog) :: String.t() + def get_log_entry_message(%ModerationLog{ + data: %{ + "actor" => %{"nickname" => actor_nickname}, + "action" => "chat_message_delete", + "subject_id" => subject_id + } + }) do + "@#{actor_nickname} deleted chat message ##{subject_id}" + end + defp nicknames_to_string(nicknames) do nicknames |> Enum.map(&"@#{&1}") diff --git a/lib/pleroma/web/admin_api/controllers/chat_controller.ex b/lib/pleroma/web/admin_api/controllers/chat_controller.ex new file mode 100644 index 000000000..bcce824d2 --- /dev/null +++ b/lib/pleroma/web/admin_api/controllers/chat_controller.ex @@ -0,0 +1,37 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2020 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + +defmodule Pleroma.Web.AdminAPI.ChatController do + use Pleroma.Web, :controller + + alias Pleroma.Activity + alias Pleroma.ModerationLog + alias Pleroma.Plugs.OAuthScopesPlug + alias Pleroma.Web.CommonAPI + + require Logger + + plug(Pleroma.Web.ApiSpec.CastAndValidate) + + plug( + OAuthScopesPlug, + %{scopes: ["write:chats"], admin: true} when action in [:delete_message] + ) + + action_fallback(Pleroma.Web.AdminAPI.FallbackController) + + defdelegate open_api_operation(action), to: Pleroma.Web.ApiSpec.Admin.ChatOperation + + def delete_message(%{assigns: %{user: user}} = conn, %{message_id: id}) do + with {:ok, %Activity{}} <- CommonAPI.delete(id, user) do + ModerationLog.insert_log(%{ + action: "chat_message_delete", + actor: user, + subject_id: id + }) + + json(conn, %{}) + end + end +end diff --git a/lib/pleroma/web/api_spec/operations/admin/chat_operation.ex b/lib/pleroma/web/api_spec/operations/admin/chat_operation.ex new file mode 100644 index 000000000..7045fd7ce --- /dev/null +++ b/lib/pleroma/web/api_spec/operations/admin/chat_operation.ex @@ -0,0 +1,44 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2020 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + +defmodule Pleroma.Web.ApiSpec.Admin.ChatOperation do + alias OpenApiSpex.Operation + alias Pleroma.Web.ApiSpec.Schemas.ApiError + alias Pleroma.Web.ApiSpec.Schemas.FlakeID + + import Pleroma.Web.ApiSpec.Helpers + + def open_api_operation(action) do + operation = String.to_existing_atom("#{action}_operation") + apply(__MODULE__, operation, []) + end + + def delete_message_operation do + %Operation{ + tags: ["Admin", "Chats"], + summary: "Delete an individual chat message", + operationId: "AdminAPI.ChatController.delete", + parameters: [id_param(), message_id_param()] ++ admin_api_params(), + security: [%{"oAuth" => ["write:chats"]}], + responses: %{ + 200 => empty_object_response(), + 404 => Operation.response("Not Found", "application/json", ApiError) + } + } + end + + def id_param do + Operation.parameter(:id, :path, FlakeID, "Chat ID", + example: "9umDrYheeY451cQnEe", + required: true + ) + end + + def message_id_param do + Operation.parameter(:message_id, :path, FlakeID, "Chat message ID", + example: "9umDrYheeY451cQnEe", + required: true + ) + end +end diff --git a/lib/pleroma/web/router.ex b/lib/pleroma/web/router.ex index c6433cc53..e438768ed 100644 --- a/lib/pleroma/web/router.ex +++ b/lib/pleroma/web/router.ex @@ -214,6 +214,8 @@ defmodule Pleroma.Web.Router do get("/media_proxy_caches", MediaProxyCacheController, :index) post("/media_proxy_caches/delete", MediaProxyCacheController, :delete) post("/media_proxy_caches/purge", MediaProxyCacheController, :purge) + + delete("/chats/:id/messages/:message_id", ChatController, :delete_message) end scope "/api/pleroma/emoji", Pleroma.Web.PleromaAPI do diff --git a/test/support/factory.ex b/test/support/factory.ex index 486eda8da..61ca4587c 100644 --- a/test/support/factory.ex +++ b/test/support/factory.ex @@ -460,4 +460,58 @@ defmodule Pleroma.Factory do phrase: "cofe" } end + + def chat_factory(attrs \\ %{}) do + user = attrs[:user] || insert(:user) + recipient = attrs[:recipient] || insert(:user) + + %Pleroma.Chat{ + user_id: user.id, + recipient: recipient.ap_id + } + end + + def chat_message_factory(attrs \\ %{}) do + text = sequence(:text, &"This is :moominmamma: chat message #{&1}") + chat = attrs[:chat] || insert(:chat) + + data = %{ + "type" => "ChatMessage", + "content" => text, + "id" => Pleroma.Web.ActivityPub.Utils.generate_object_id(), + "actor" => User.get_by_id(chat.user_id).ap_id, + "to" => [chat.recipient], + "published" => DateTime.utc_now() |> DateTime.to_iso8601() + } + + %Pleroma.Object{ + data: merge_attributes(data, Map.get(attrs, :data, %{})) + } + end + + def chat_message_activity_factory(attrs \\ %{}) do + chat = attrs[:chat] || insert(:chat) + chat_message = attrs[:chat_message] || insert(:chat_message, chat: chat) + + data_attrs = attrs[:data_attrs] || %{} + attrs = Map.drop(attrs, [:chat, :chat_message, :data_attrs]) + + data = + %{ + "id" => Pleroma.Web.ActivityPub.Utils.generate_activity_id(), + "type" => "Create", + "actor" => chat_message.data["actor"], + "to" => chat_message.data["to"], + "object" => chat_message.data["id"], + "published" => DateTime.utc_now() |> DateTime.to_iso8601() + } + |> Map.merge(data_attrs) + + %Pleroma.Activity{ + data: data, + actor: data["actor"], + recipients: data["to"] + } + |> Map.merge(attrs) + end end diff --git a/test/web/admin_api/controllers/chat_controller_test.exs b/test/web/admin_api/controllers/chat_controller_test.exs new file mode 100644 index 000000000..4527437af --- /dev/null +++ b/test/web/admin_api/controllers/chat_controller_test.exs @@ -0,0 +1,53 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2020 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + +defmodule Pleroma.Web.AdminAPI.ChatControllerTest do + use Pleroma.Web.ConnCase + + import Pleroma.Factory + + alias Pleroma.Activity + alias Pleroma.Config + alias Pleroma.ModerationLog + alias Pleroma.Repo + + setup do + admin = insert(:user, is_admin: true) + token = insert(:oauth_admin_token, user: admin) + + conn = + build_conn() + |> assign(:user, admin) + |> assign(:token, token) + + {:ok, %{admin: admin, token: token, conn: conn}} + end + + describe "DELETE /api/pleroma/admin/chats/:id/messages/:message_id" do + setup do + chat = insert(:chat) + message = insert(:chat_message_activity, chat: chat) + %{chat: chat, message: message} + end + + test "deletes chat message", %{conn: conn, chat: chat, message: message, admin: admin} do + conn + |> delete("/api/pleroma/admin/chats/#{chat.id}/messages/#{message.id}") + |> json_response_and_validate_schema(:ok) + + refute Activity.get_by_id(message.id) + + log_entry = Repo.one(ModerationLog) + + assert ModerationLog.get_log_entry_message(log_entry) == + "@#{admin.nickname} deleted chat message ##{message.id}" + end + + test "returns 404 when the chat message does not exist", %{conn: conn} do + conn = delete(conn, "/api/pleroma/admin/chats/test/messages/test") + + assert json_response_and_validate_schema(conn, :not_found) == %{"error" => "Not found"} + end + end +end From fb0de073439b5e3be823e736b44608e80f1027f1 Mon Sep 17 00:00:00 2001 From: Alex Gleason Date: Mon, 31 Aug 2020 20:23:33 -0500 Subject: [PATCH 057/102] AdminAPI: list chats for a user --- .../controllers/admin_api_controller.ex | 27 +++++++++++++++++++ lib/pleroma/web/router.ex | 3 +++ .../controllers/admin_api_controller_test.exs | 18 +++++++++++++ 3 files changed, 48 insertions(+) diff --git a/lib/pleroma/web/admin_api/controllers/admin_api_controller.ex b/lib/pleroma/web/admin_api/controllers/admin_api_controller.ex index f5e4d49f9..9b66c2f10 100644 --- a/lib/pleroma/web/admin_api/controllers/admin_api_controller.ex +++ b/lib/pleroma/web/admin_api/controllers/admin_api_controller.ex @@ -5,6 +5,7 @@ defmodule Pleroma.Web.AdminAPI.AdminAPIController do use Pleroma.Web, :controller + import Ecto.Query import Pleroma.Web.ControllerHelper, only: [json_response: 3] alias Pleroma.Config @@ -21,6 +22,7 @@ defmodule Pleroma.Web.AdminAPI.AdminAPIController do alias Pleroma.Web.AdminAPI.ModerationLogView alias Pleroma.Web.AdminAPI.Search alias Pleroma.Web.Endpoint + alias Pleroma.Web.PleromaAPI alias Pleroma.Web.Router require Logger @@ -68,6 +70,12 @@ defmodule Pleroma.Web.AdminAPI.AdminAPIController do when action in [:list_user_statuses, :list_instance_statuses] ) + plug( + OAuthScopesPlug, + %{scopes: ["read:chats"], admin: true} + when action in [:list_user_chats] + ) + plug( OAuthScopesPlug, %{scopes: ["read"], admin: true} @@ -256,6 +264,25 @@ defmodule Pleroma.Web.AdminAPI.AdminAPIController do end end + def list_user_chats(%{assigns: %{user: admin}} = conn, %{"nickname" => nickname} = _params) do + with %User{id: user_id} <- User.get_cached_by_nickname_or_id(nickname, for: admin) do + chats = + from(c in Pleroma.Chat, + where: c.user_id == ^user_id, + order_by: [desc: c.updated_at], + inner_join: u in User, + on: u.ap_id == c.recipient + ) + |> Pleroma.Repo.all() + + conn + |> put_view(PleromaAPI.ChatView) + |> render("index.json", chats: chats) + else + _ -> {:error, :not_found} + end + end + def user_toggle_activation(%{assigns: %{user: admin}} = conn, %{"nickname" => nickname}) do user = User.get_cached_by_nickname(nickname) diff --git a/lib/pleroma/web/router.ex b/lib/pleroma/web/router.ex index e438768ed..ad3282df4 100644 --- a/lib/pleroma/web/router.ex +++ b/lib/pleroma/web/router.ex @@ -178,6 +178,7 @@ defmodule Pleroma.Web.Router do get("/users", AdminAPIController, :list_users) get("/users/:nickname", AdminAPIController, :user_show) get("/users/:nickname/statuses", AdminAPIController, :list_user_statuses) + get("/users/:nickname/chats", AdminAPIController, :list_user_chats) get("/instances/:instance/statuses", AdminAPIController, :list_instance_statuses) @@ -215,6 +216,8 @@ defmodule Pleroma.Web.Router do post("/media_proxy_caches/delete", MediaProxyCacheController, :delete) post("/media_proxy_caches/purge", MediaProxyCacheController, :purge) + # get("/chats/:id", ChatController, :show) + # get("/chats/:id/messages", ChatController, :messages) delete("/chats/:id/messages/:message_id", ChatController, :delete_message) end diff --git a/test/web/admin_api/controllers/admin_api_controller_test.exs b/test/web/admin_api/controllers/admin_api_controller_test.exs index dbf478edf..cf5637246 100644 --- a/test/web/admin_api/controllers/admin_api_controller_test.exs +++ b/test/web/admin_api/controllers/admin_api_controller_test.exs @@ -1510,6 +1510,24 @@ defmodule Pleroma.Web.AdminAPI.AdminAPIControllerTest do end end + describe "GET /api/pleroma/admin/users/:nickname/chats" do + setup do + user = insert(:user) + + insert(:chat, user: user) + insert(:chat, user: user) + insert(:chat, user: user) + + %{user: user} + end + + test "renders user's statuses", %{conn: conn, user: user} do + conn = get(conn, "/api/pleroma/admin/users/#{user.nickname}/chats") + + assert json_response(conn, 200) |> length() == 3 + end + end + describe "GET /api/pleroma/admin/moderation_log" do setup do moderator = insert(:user, is_moderator: true) From c41430b23eaf3fd15b227e66215aa2a4ff31dfdb Mon Sep 17 00:00:00 2001 From: Alex Gleason Date: Tue, 1 Sep 2020 19:05:24 -0500 Subject: [PATCH 058/102] Refactor with Chat.for_user_query/1 --- lib/pleroma/chat.ex | 12 ++++++++++++ .../admin_api/controllers/admin_api_controller.ex | 8 +------- .../web/pleroma_api/controllers/chat_controller.ex | 9 ++------- 3 files changed, 15 insertions(+), 14 deletions(-) diff --git a/lib/pleroma/chat.ex b/lib/pleroma/chat.ex index 24a86371e..b38c5c3dd 100644 --- a/lib/pleroma/chat.ex +++ b/lib/pleroma/chat.ex @@ -6,7 +6,9 @@ defmodule Pleroma.Chat do use Ecto.Schema import Ecto.Changeset + import Ecto.Query + alias Pleroma.Chat alias Pleroma.Repo alias Pleroma.User @@ -69,4 +71,14 @@ defmodule Pleroma.Chat do conflict_target: [:user_id, :recipient] ) end + + @spec for_user_query(FlakeId.Ecto.CompatType.t()) :: Ecto.Query.t() + def for_user_query(user_id) do + from(c in Chat, + where: c.user_id == ^user_id, + order_by: [desc: c.updated_at], + inner_join: u in User, + on: u.ap_id == c.recipient + ) + end end diff --git a/lib/pleroma/web/admin_api/controllers/admin_api_controller.ex b/lib/pleroma/web/admin_api/controllers/admin_api_controller.ex index 9b66c2f10..fccdbabb4 100644 --- a/lib/pleroma/web/admin_api/controllers/admin_api_controller.ex +++ b/lib/pleroma/web/admin_api/controllers/admin_api_controller.ex @@ -5,7 +5,6 @@ defmodule Pleroma.Web.AdminAPI.AdminAPIController do use Pleroma.Web, :controller - import Ecto.Query import Pleroma.Web.ControllerHelper, only: [json_response: 3] alias Pleroma.Config @@ -267,12 +266,7 @@ defmodule Pleroma.Web.AdminAPI.AdminAPIController do def list_user_chats(%{assigns: %{user: admin}} = conn, %{"nickname" => nickname} = _params) do with %User{id: user_id} <- User.get_cached_by_nickname_or_id(nickname, for: admin) do chats = - from(c in Pleroma.Chat, - where: c.user_id == ^user_id, - order_by: [desc: c.updated_at], - inner_join: u in User, - on: u.ap_id == c.recipient - ) + Pleroma.Chat.for_user_query(user_id) |> Pleroma.Repo.all() conn diff --git a/lib/pleroma/web/pleroma_api/controllers/chat_controller.ex b/lib/pleroma/web/pleroma_api/controllers/chat_controller.ex index 1f2e953f7..27c9a2e0f 100644 --- a/lib/pleroma/web/pleroma_api/controllers/chat_controller.ex +++ b/lib/pleroma/web/pleroma_api/controllers/chat_controller.ex @@ -146,13 +146,8 @@ defmodule Pleroma.Web.PleromaAPI.ChatController do blocked_ap_ids = User.blocked_users_ap_ids(user) chats = - from(c in Chat, - where: c.user_id == ^user_id, - where: c.recipient not in ^blocked_ap_ids, - order_by: [desc: c.updated_at], - inner_join: u in User, - on: u.ap_id == c.recipient - ) + Chat.for_user_query(user_id) + |> where([c], c.recipient not in ^blocked_ap_ids) |> Repo.all() conn From f13b52a703d5c60cf12b2fff69f458e5c467c783 Mon Sep 17 00:00:00 2001 From: Alex Gleason Date: Tue, 1 Sep 2020 19:39:34 -0500 Subject: [PATCH 059/102] AdminAPI: list messages in a chat --- .../admin_api/controllers/chat_controller.ex | 27 ++++++++++ .../operations/admin/chat_operation.ex | 26 ++++++++- lib/pleroma/web/router.ex | 2 +- .../controllers/chat_controller_test.exs | 54 +++++++++++++++++++ 4 files changed, 107 insertions(+), 2 deletions(-) diff --git a/lib/pleroma/web/admin_api/controllers/chat_controller.ex b/lib/pleroma/web/admin_api/controllers/chat_controller.ex index bcce824d2..b423188d7 100644 --- a/lib/pleroma/web/admin_api/controllers/chat_controller.ex +++ b/lib/pleroma/web/admin_api/controllers/chat_controller.ex @@ -6,14 +6,23 @@ defmodule Pleroma.Web.AdminAPI.ChatController do use Pleroma.Web, :controller alias Pleroma.Activity + alias Pleroma.Chat + alias Pleroma.Chat.MessageReference alias Pleroma.ModerationLog + alias Pleroma.Pagination alias Pleroma.Plugs.OAuthScopesPlug alias Pleroma.Web.CommonAPI + alias Pleroma.Web.PleromaAPI.Chat.MessageReferenceView require Logger plug(Pleroma.Web.ApiSpec.CastAndValidate) + plug( + OAuthScopesPlug, + %{scopes: ["read:chats"], admin: true} when action in [:messages] + ) + plug( OAuthScopesPlug, %{scopes: ["write:chats"], admin: true} when action in [:delete_message] @@ -34,4 +43,22 @@ defmodule Pleroma.Web.AdminAPI.ChatController do json(conn, %{}) end end + + def messages(conn, %{id: id} = params) do + with %Chat{} = chat <- Chat.get_by_id(id) do + cm_refs = + chat + |> MessageReference.for_chat_query() + |> Pagination.fetch_paginated(params) + + conn + |> put_view(MessageReferenceView) + |> render("index.json", chat_message_references: cm_refs) + else + _ -> + conn + |> put_status(:not_found) + |> json(%{error: "not found"}) + end + end end diff --git a/lib/pleroma/web/api_spec/operations/admin/chat_operation.ex b/lib/pleroma/web/api_spec/operations/admin/chat_operation.ex index 7045fd7ce..a382bd35a 100644 --- a/lib/pleroma/web/api_spec/operations/admin/chat_operation.ex +++ b/lib/pleroma/web/api_spec/operations/admin/chat_operation.ex @@ -16,7 +16,7 @@ defmodule Pleroma.Web.ApiSpec.Admin.ChatOperation do def delete_message_operation do %Operation{ - tags: ["Admin", "Chats"], + tags: ["admin", "chat"], summary: "Delete an individual chat message", operationId: "AdminAPI.ChatController.delete", parameters: [id_param(), message_id_param()] ++ admin_api_params(), @@ -28,6 +28,30 @@ defmodule Pleroma.Web.ApiSpec.Admin.ChatOperation do } end + def messages_operation do + %Operation{ + tags: ["admin", "chat"], + summary: "Get the most recent messages of the chat", + operationId: "AdminAPI.ChatController.messages", + parameters: + [Operation.parameter(:id, :path, :string, "The ID of the Chat")] ++ + pagination_params(), + responses: %{ + 200 => + Operation.response( + "The messages in the chat", + "application/json", + Pleroma.Web.ApiSpec.ChatOperation.chat_messages_response() + ) + }, + security: [ + %{ + "oAuth" => ["read:chats"] + } + ] + } + end + def id_param do Operation.parameter(:id, :path, FlakeID, "Chat ID", example: "9umDrYheeY451cQnEe", diff --git a/lib/pleroma/web/router.ex b/lib/pleroma/web/router.ex index ad3282df4..02836114a 100644 --- a/lib/pleroma/web/router.ex +++ b/lib/pleroma/web/router.ex @@ -217,7 +217,7 @@ defmodule Pleroma.Web.Router do post("/media_proxy_caches/purge", MediaProxyCacheController, :purge) # get("/chats/:id", ChatController, :show) - # get("/chats/:id/messages", ChatController, :messages) + get("/chats/:id/messages", ChatController, :messages) delete("/chats/:id/messages/:message_id", ChatController, :delete_message) end diff --git a/test/web/admin_api/controllers/chat_controller_test.exs b/test/web/admin_api/controllers/chat_controller_test.exs index 4527437af..f61e2a1fa 100644 --- a/test/web/admin_api/controllers/chat_controller_test.exs +++ b/test/web/admin_api/controllers/chat_controller_test.exs @@ -8,9 +8,11 @@ defmodule Pleroma.Web.AdminAPI.ChatControllerTest do import Pleroma.Factory alias Pleroma.Activity + alias Pleroma.Chat alias Pleroma.Config alias Pleroma.ModerationLog alias Pleroma.Repo + alias Pleroma.Web.CommonAPI setup do admin = insert(:user, is_admin: true) @@ -50,4 +52,56 @@ defmodule Pleroma.Web.AdminAPI.ChatControllerTest do assert json_response_and_validate_schema(conn, :not_found) == %{"error" => "Not found"} end end + + describe "GET /api/pleroma/admin/chats/:id/messages" do + test "it paginates", %{conn: conn} do + user = insert(:user) + recipient = insert(:user) + + Enum.each(1..30, fn _ -> + {:ok, _} = CommonAPI.post_chat_message(user, recipient, "hey") + end) + + chat = Chat.get(user.id, recipient.ap_id) + + result = + conn + |> get("/api/pleroma/admin/chats/#{chat.id}/messages") + |> json_response_and_validate_schema(200) + + assert length(result) == 20 + + result = + conn + |> get("/api/pleroma/admin/chats/#{chat.id}/messages?max_id=#{List.last(result)["id"]}") + |> json_response_and_validate_schema(200) + + assert length(result) == 10 + end + + test "it returns the messages for a given chat", %{conn: conn} do + user = insert(:user) + other_user = insert(:user) + third_user = insert(:user) + + {:ok, _} = CommonAPI.post_chat_message(user, other_user, "hey") + {:ok, _} = CommonAPI.post_chat_message(user, third_user, "hey") + {:ok, _} = CommonAPI.post_chat_message(user, other_user, "how are you?") + {:ok, _} = CommonAPI.post_chat_message(other_user, user, "fine, how about you?") + + chat = Chat.get(user.id, other_user.ap_id) + + result = + conn + |> get("/api/pleroma/admin/chats/#{chat.id}/messages") + |> json_response_and_validate_schema(200) + + result + |> Enum.each(fn message -> + assert message["chat_id"] == chat.id |> to_string() + end) + + assert length(result) == 3 + end + end end From 9dd0b23da424c380a37897d8bf69ab241efa6f91 Mon Sep 17 00:00:00 2001 From: Alex Gleason Date: Tue, 1 Sep 2020 19:49:46 -0500 Subject: [PATCH 060/102] AdminAPI: show chat --- .../admin_api/controllers/chat_controller.ex | 11 ++++++- .../operations/admin/chat_operation.ex | 32 +++++++++++++++++++ lib/pleroma/web/router.ex | 2 +- .../controllers/chat_controller_test.exs | 16 ++++++++++ 4 files changed, 59 insertions(+), 2 deletions(-) diff --git a/lib/pleroma/web/admin_api/controllers/chat_controller.ex b/lib/pleroma/web/admin_api/controllers/chat_controller.ex index b423188d7..ac362c430 100644 --- a/lib/pleroma/web/admin_api/controllers/chat_controller.ex +++ b/lib/pleroma/web/admin_api/controllers/chat_controller.ex @@ -13,6 +13,7 @@ defmodule Pleroma.Web.AdminAPI.ChatController do alias Pleroma.Plugs.OAuthScopesPlug alias Pleroma.Web.CommonAPI alias Pleroma.Web.PleromaAPI.Chat.MessageReferenceView + alias Pleroma.Web.PleromaAPI.ChatView require Logger @@ -20,7 +21,7 @@ defmodule Pleroma.Web.AdminAPI.ChatController do plug( OAuthScopesPlug, - %{scopes: ["read:chats"], admin: true} when action in [:messages] + %{scopes: ["read:chats"], admin: true} when action in [:show, :messages] ) plug( @@ -61,4 +62,12 @@ defmodule Pleroma.Web.AdminAPI.ChatController do |> json(%{error: "not found"}) end end + + def show(conn, %{id: id}) do + with %Chat{} = chat <- Chat.get_by_id(id) do + conn + |> put_view(ChatView) + |> render("show.json", chat: chat) + end + end end diff --git a/lib/pleroma/web/api_spec/operations/admin/chat_operation.ex b/lib/pleroma/web/api_spec/operations/admin/chat_operation.ex index a382bd35a..3550d531e 100644 --- a/lib/pleroma/web/api_spec/operations/admin/chat_operation.ex +++ b/lib/pleroma/web/api_spec/operations/admin/chat_operation.ex @@ -5,6 +5,7 @@ defmodule Pleroma.Web.ApiSpec.Admin.ChatOperation do alias OpenApiSpex.Operation alias Pleroma.Web.ApiSpec.Schemas.ApiError + alias Pleroma.Web.ApiSpec.Schemas.Chat alias Pleroma.Web.ApiSpec.Schemas.FlakeID import Pleroma.Web.ApiSpec.Helpers @@ -52,6 +53,37 @@ defmodule Pleroma.Web.ApiSpec.Admin.ChatOperation do } end + def show_operation do + %Operation{ + tags: ["chat"], + summary: "Create a chat", + operationId: "AdminAPI.ChatController.show", + parameters: [ + Operation.parameter( + :id, + :path, + :string, + "The id of the chat", + required: true, + example: "1234" + ) + ], + responses: %{ + 200 => + Operation.response( + "The existing chat", + "application/json", + Chat + ) + }, + security: [ + %{ + "oAuth" => ["read"] + } + ] + } + end + def id_param do Operation.parameter(:id, :path, FlakeID, "Chat ID", example: "9umDrYheeY451cQnEe", diff --git a/lib/pleroma/web/router.ex b/lib/pleroma/web/router.ex index 02836114a..e4440d442 100644 --- a/lib/pleroma/web/router.ex +++ b/lib/pleroma/web/router.ex @@ -216,7 +216,7 @@ defmodule Pleroma.Web.Router do post("/media_proxy_caches/delete", MediaProxyCacheController, :delete) post("/media_proxy_caches/purge", MediaProxyCacheController, :purge) - # get("/chats/:id", ChatController, :show) + get("/chats/:id", ChatController, :show) get("/chats/:id/messages", ChatController, :messages) delete("/chats/:id/messages/:message_id", ChatController, :delete_message) end diff --git a/test/web/admin_api/controllers/chat_controller_test.exs b/test/web/admin_api/controllers/chat_controller_test.exs index f61e2a1fa..63c195b99 100644 --- a/test/web/admin_api/controllers/chat_controller_test.exs +++ b/test/web/admin_api/controllers/chat_controller_test.exs @@ -104,4 +104,20 @@ defmodule Pleroma.Web.AdminAPI.ChatControllerTest do assert length(result) == 3 end end + + describe "GET /api/pleroma/admin/chats/:id" do + test "it returns a chat", %{conn: conn} do + user = insert(:user) + other_user = insert(:user) + + {:ok, chat} = Chat.get_or_create(user.id, other_user.ap_id) + + result = + conn + |> get("/api/pleroma/admin/chats/#{chat.id}") + |> json_response_and_validate_schema(200) + + assert result["id"] == to_string(chat.id) + end + end end From 02d70228b566d5de2cbdd6d1f9958caf2db173f1 Mon Sep 17 00:00:00 2001 From: Alex Gleason Date: Tue, 1 Sep 2020 20:40:36 -0500 Subject: [PATCH 061/102] AdminAPI: fix delete chat message --- .../admin_api/controllers/chat_controller.ex | 20 ++++++++-- .../operations/admin/chat_operation.ex | 40 +++++++++---------- .../controllers/chat_controller_test.exs | 39 ++++++++++-------- 3 files changed, 56 insertions(+), 43 deletions(-) diff --git a/lib/pleroma/web/admin_api/controllers/chat_controller.ex b/lib/pleroma/web/admin_api/controllers/chat_controller.ex index ac362c430..61d45b970 100644 --- a/lib/pleroma/web/admin_api/controllers/chat_controller.ex +++ b/lib/pleroma/web/admin_api/controllers/chat_controller.ex @@ -33,15 +33,27 @@ defmodule Pleroma.Web.AdminAPI.ChatController do defdelegate open_api_operation(action), to: Pleroma.Web.ApiSpec.Admin.ChatOperation - def delete_message(%{assigns: %{user: user}} = conn, %{message_id: id}) do - with {:ok, %Activity{}} <- CommonAPI.delete(id, user) do + def delete_message(%{assigns: %{user: user}} = conn, %{ + message_id: message_id, + id: chat_id + }) do + with %MessageReference{object: %{data: %{"id" => object_ap_id}}} = cm_ref <- + MessageReference.get_by_id(message_id), + ^chat_id <- to_string(cm_ref.chat_id), + %Activity{id: activity_id} <- Activity.get_create_by_object_ap_id(object_ap_id), + {:ok, _} <- CommonAPI.delete(activity_id, user) do ModerationLog.insert_log(%{ action: "chat_message_delete", actor: user, - subject_id: id + subject_id: message_id }) - json(conn, %{}) + conn + |> put_view(MessageReferenceView) + |> render("show.json", chat_message_reference: cm_ref) + else + _e -> + {:error, :could_not_delete} end end diff --git a/lib/pleroma/web/api_spec/operations/admin/chat_operation.ex b/lib/pleroma/web/api_spec/operations/admin/chat_operation.ex index 3550d531e..d3e5dfc1c 100644 --- a/lib/pleroma/web/api_spec/operations/admin/chat_operation.ex +++ b/lib/pleroma/web/api_spec/operations/admin/chat_operation.ex @@ -4,9 +4,8 @@ defmodule Pleroma.Web.ApiSpec.Admin.ChatOperation do alias OpenApiSpex.Operation - alias Pleroma.Web.ApiSpec.Schemas.ApiError alias Pleroma.Web.ApiSpec.Schemas.Chat - alias Pleroma.Web.ApiSpec.Schemas.FlakeID + alias Pleroma.Web.ApiSpec.Schemas.ChatMessage import Pleroma.Web.ApiSpec.Helpers @@ -19,13 +18,24 @@ defmodule Pleroma.Web.ApiSpec.Admin.ChatOperation do %Operation{ tags: ["admin", "chat"], summary: "Delete an individual chat message", - operationId: "AdminAPI.ChatController.delete", - parameters: [id_param(), message_id_param()] ++ admin_api_params(), - security: [%{"oAuth" => ["write:chats"]}], + operationId: "AdminAPI.ChatController.delete_message", + parameters: [ + Operation.parameter(:id, :path, :string, "The ID of the Chat"), + Operation.parameter(:message_id, :path, :string, "The ID of the message") + ], responses: %{ - 200 => empty_object_response(), - 404 => Operation.response("Not Found", "application/json", ApiError) - } + 200 => + Operation.response( + "The deleted ChatMessage", + "application/json", + ChatMessage + ) + }, + security: [ + %{ + "oAuth" => ["write:chats"] + } + ] } end @@ -83,18 +93,4 @@ defmodule Pleroma.Web.ApiSpec.Admin.ChatOperation do ] } end - - def id_param do - Operation.parameter(:id, :path, FlakeID, "Chat ID", - example: "9umDrYheeY451cQnEe", - required: true - ) - end - - def message_id_param do - Operation.parameter(:message_id, :path, FlakeID, "Chat message ID", - example: "9umDrYheeY451cQnEe", - required: true - ) - end end diff --git a/test/web/admin_api/controllers/chat_controller_test.exs b/test/web/admin_api/controllers/chat_controller_test.exs index 63c195b99..9393dd49b 100644 --- a/test/web/admin_api/controllers/chat_controller_test.exs +++ b/test/web/admin_api/controllers/chat_controller_test.exs @@ -7,9 +7,10 @@ defmodule Pleroma.Web.AdminAPI.ChatControllerTest do import Pleroma.Factory - alias Pleroma.Activity alias Pleroma.Chat + alias Pleroma.Chat.MessageReference alias Pleroma.Config + alias Pleroma.Object alias Pleroma.ModerationLog alias Pleroma.Repo alias Pleroma.Web.CommonAPI @@ -27,29 +28,33 @@ defmodule Pleroma.Web.AdminAPI.ChatControllerTest do end describe "DELETE /api/pleroma/admin/chats/:id/messages/:message_id" do - setup do - chat = insert(:chat) - message = insert(:chat_message_activity, chat: chat) - %{chat: chat, message: message} - end + test "it deletes a message from the chat", %{conn: conn, admin: admin} do + user = insert(:user) + recipient = insert(:user) - test "deletes chat message", %{conn: conn, chat: chat, message: message, admin: admin} do - conn - |> delete("/api/pleroma/admin/chats/#{chat.id}/messages/#{message.id}") - |> json_response_and_validate_schema(:ok) + {:ok, message} = + CommonAPI.post_chat_message(user, recipient, "Hello darkness my old friend") - refute Activity.get_by_id(message.id) + object = Object.normalize(message, false) + + chat = Chat.get(user.id, recipient.ap_id) + + cm_ref = MessageReference.for_chat_and_object(chat, object) + + result = + conn + |> put_req_header("content-type", "application/json") + |> delete("/api/pleroma/admin/chats/#{chat.id}/messages/#{cm_ref.id}") + |> json_response_and_validate_schema(200) log_entry = Repo.one(ModerationLog) assert ModerationLog.get_log_entry_message(log_entry) == - "@#{admin.nickname} deleted chat message ##{message.id}" - end + "@#{admin.nickname} deleted chat message ##{cm_ref.id}" - test "returns 404 when the chat message does not exist", %{conn: conn} do - conn = delete(conn, "/api/pleroma/admin/chats/test/messages/test") - - assert json_response_and_validate_schema(conn, :not_found) == %{"error" => "Not found"} + assert result["id"] == cm_ref.id + refute MessageReference.get_by_id(cm_ref.id) + assert %{data: %{"type" => "Tombstone"}} = Object.get_by_id(object.id) end end From c361df11b4e31bc6b369a4feebdbaa82987c2eec Mon Sep 17 00:00:00 2001 From: Alex Gleason Date: Tue, 1 Sep 2020 20:56:42 -0500 Subject: [PATCH 062/102] Docs: AdminAPI chat moderation --- docs/API/admin_api.md | 111 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 111 insertions(+) diff --git a/docs/API/admin_api.md b/docs/API/admin_api.md index c0ea074f0..7bdbd17aa 100644 --- a/docs/API/admin_api.md +++ b/docs/API/admin_api.md @@ -1334,3 +1334,114 @@ Loads json generated from `config/descriptions.exs`. { } ``` + +## GET /api/pleroma/admin/users/:nickname/chats + +### List a user's chats + +- Params: None + +- Response: + +```json +[ + { + "account": { + "id": "someflakeid", + "username": "somenick", + ... + }, + "id" : "1", + "unread" : 2, + "last_message" : {...}, // The last message in that chat + "updated_at": "2020-04-21T15:11:46.000Z" + } +] +``` + +## GET /api/pleroma/admin/chats/:chat_id + +### View a single chat + +- Params: None + +- Response: + +```json +{ + "account": { + "id": "someflakeid", + "username": "somenick", + ... + }, + "id" : "1", + "unread" : 2, + "last_message" : {...}, // The last message in that chat + "updated_at": "2020-04-21T15:11:46.000Z" +} +``` + +## GET /api/pleroma/admin/chats/:chat_id/messages + +### List the messages in a chat + +- Params: None + +- Response: + +```json +[ + { + "account_id": "someflakeid", + "chat_id": "1", + "content": "Check this out :firefox:", + "created_at": "2020-04-21T15:11:46.000Z", + "emojis": [ + { + "shortcode": "firefox", + "static_url": "https://dontbulling.me/emoji/Firefox.gif", + "url": "https://dontbulling.me/emoji/Firefox.gif", + "visible_in_picker": false + } + ], + "id": "13", + "unread": true + }, + { + "account_id": "someflakeid", + "chat_id": "1", + "content": "Whats' up?", + "created_at": "2020-04-21T15:06:45.000Z", + "emojis": [], + "id": "12", + "unread": false + } +] +``` + +## DELETE /api/pleroma/admin/chats/:chat_id/messages/:message_id + +### Delete a single message + +- Params: None + +- Response: + +```json +{ + "account_id": "someflakeid", + "chat_id": "1", + "content": "Check this out :firefox:", + "created_at": "2020-04-21T15:11:46.000Z", + "emojis": [ + { + "shortcode": "firefox", + "static_url": "https://dontbulling.me/emoji/Firefox.gif", + "url": "https://dontbulling.me/emoji/Firefox.gif", + "visible_in_picker": false + } + ], + "id": "13", + "unread": false +} +``` From 67726453f85eb5bb51bf82e7decf23a4f1d184af Mon Sep 17 00:00:00 2001 From: Alex Gleason Date: Tue, 1 Sep 2020 21:12:21 -0500 Subject: [PATCH 063/102] Credo fix --- test/web/admin_api/controllers/chat_controller_test.exs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/web/admin_api/controllers/chat_controller_test.exs b/test/web/admin_api/controllers/chat_controller_test.exs index 9393dd49b..bca9d440d 100644 --- a/test/web/admin_api/controllers/chat_controller_test.exs +++ b/test/web/admin_api/controllers/chat_controller_test.exs @@ -10,8 +10,8 @@ defmodule Pleroma.Web.AdminAPI.ChatControllerTest do alias Pleroma.Chat alias Pleroma.Chat.MessageReference alias Pleroma.Config - alias Pleroma.Object alias Pleroma.ModerationLog + alias Pleroma.Object alias Pleroma.Repo alias Pleroma.Web.CommonAPI From e229536e5cca65d811f85d25c86bf3c92b3d8c45 Mon Sep 17 00:00:00 2001 From: Alex Gleason Date: Thu, 10 Sep 2020 01:44:32 -0500 Subject: [PATCH 064/102] Chat Moderation: use explicit `sender` and `recipient` fields --- docs/API/admin_api.md | 14 +++++++-- .../controllers/admin_api_controller.ex | 5 +--- .../admin_api/controllers/chat_controller.ex | 4 +-- lib/pleroma/web/admin_api/views/chat_view.ex | 30 +++++++++++++++++++ .../controllers/chat_controller_test.exs | 3 ++ 5 files changed, 48 insertions(+), 8 deletions(-) create mode 100644 lib/pleroma/web/admin_api/views/chat_view.ex diff --git a/docs/API/admin_api.md b/docs/API/admin_api.md index 7bdbd17aa..eadb455ee 100644 --- a/docs/API/admin_api.md +++ b/docs/API/admin_api.md @@ -1346,7 +1346,12 @@ Loads json generated from `config/descriptions.exs`. ```json [ { - "account": { + "sender": { + "id": "someflakeid", + "username": "somenick", + ... + }, + "receiver": { "id": "someflakeid", "username": "somenick", ... @@ -1369,7 +1374,12 @@ Loads json generated from `config/descriptions.exs`. ```json { - "account": { + "sender": { + "id": "someflakeid", + "username": "somenick", + ... + }, + "receiver": { "id": "someflakeid", "username": "somenick", ... diff --git a/lib/pleroma/web/admin_api/controllers/admin_api_controller.ex b/lib/pleroma/web/admin_api/controllers/admin_api_controller.ex index fccdbabb4..d5713c3dd 100644 --- a/lib/pleroma/web/admin_api/controllers/admin_api_controller.ex +++ b/lib/pleroma/web/admin_api/controllers/admin_api_controller.ex @@ -21,11 +21,8 @@ defmodule Pleroma.Web.AdminAPI.AdminAPIController do alias Pleroma.Web.AdminAPI.ModerationLogView alias Pleroma.Web.AdminAPI.Search alias Pleroma.Web.Endpoint - alias Pleroma.Web.PleromaAPI alias Pleroma.Web.Router - require Logger - @users_page_size 50 plug( @@ -270,7 +267,7 @@ defmodule Pleroma.Web.AdminAPI.AdminAPIController do |> Pleroma.Repo.all() conn - |> put_view(PleromaAPI.ChatView) + |> put_view(AdminAPI.ChatView) |> render("index.json", chats: chats) else _ -> {:error, :not_found} diff --git a/lib/pleroma/web/admin_api/controllers/chat_controller.ex b/lib/pleroma/web/admin_api/controllers/chat_controller.ex index 61d45b970..967600d69 100644 --- a/lib/pleroma/web/admin_api/controllers/chat_controller.ex +++ b/lib/pleroma/web/admin_api/controllers/chat_controller.ex @@ -11,9 +11,9 @@ defmodule Pleroma.Web.AdminAPI.ChatController do alias Pleroma.ModerationLog alias Pleroma.Pagination alias Pleroma.Plugs.OAuthScopesPlug + alias Pleroma.Web.AdminAPI alias Pleroma.Web.CommonAPI alias Pleroma.Web.PleromaAPI.Chat.MessageReferenceView - alias Pleroma.Web.PleromaAPI.ChatView require Logger @@ -78,7 +78,7 @@ defmodule Pleroma.Web.AdminAPI.ChatController do def show(conn, %{id: id}) do with %Chat{} = chat <- Chat.get_by_id(id) do conn - |> put_view(ChatView) + |> put_view(AdminAPI.ChatView) |> render("show.json", chat: chat) end end diff --git a/lib/pleroma/web/admin_api/views/chat_view.ex b/lib/pleroma/web/admin_api/views/chat_view.ex new file mode 100644 index 000000000..847df1423 --- /dev/null +++ b/lib/pleroma/web/admin_api/views/chat_view.ex @@ -0,0 +1,30 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2020 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + +defmodule Pleroma.Web.AdminAPI.ChatView do + use Pleroma.Web, :view + + alias Pleroma.Chat + alias Pleroma.User + alias Pleroma.Web.MastodonAPI + alias Pleroma.Web.PleromaAPI + + def render("index.json", %{chats: chats} = opts) do + render_many(chats, __MODULE__, "show.json", Map.delete(opts, :chats)) + end + + def render("show.json", %{chat: %Chat{user_id: user_id}} = opts) do + user = User.get_by_id(user_id) + sender = MastodonAPI.AccountView.render("show.json", user: user, skip_visibility_check: true) + + serialized_chat = PleromaAPI.ChatView.render("show.json", opts) + + serialized_chat + |> Map.put(:sender, sender) + |> Map.put(:receiver, serialized_chat[:account]) + |> Map.delete(:account) + end + + def render(view, opts), do: PleromaAPI.ChatView.render(view, opts) +end diff --git a/test/web/admin_api/controllers/chat_controller_test.exs b/test/web/admin_api/controllers/chat_controller_test.exs index bca9d440d..840f18aa2 100644 --- a/test/web/admin_api/controllers/chat_controller_test.exs +++ b/test/web/admin_api/controllers/chat_controller_test.exs @@ -123,6 +123,9 @@ defmodule Pleroma.Web.AdminAPI.ChatControllerTest do |> json_response_and_validate_schema(200) assert result["id"] == to_string(chat.id) + assert %{} = result["sender"] + assert %{} = result["receiver"] + refute result["account"] end end end From dfb831ca39db3098d6d585448a6ff8e938e51e8c Mon Sep 17 00:00:00 2001 From: Alex Gleason Date: Fri, 11 Sep 2020 14:00:34 -0500 Subject: [PATCH 065/102] Chat moderation: add tests for unauthorized access --- docs/API/admin_api.md | 2 +- .../controllers/admin_api_controller_test.exs | 29 +++++++ .../controllers/chat_controller_test.exs | 80 ++++++++++++++++++- 3 files changed, 109 insertions(+), 2 deletions(-) diff --git a/docs/API/admin_api.md b/docs/API/admin_api.md index eadb455ee..bc96abbf0 100644 --- a/docs/API/admin_api.md +++ b/docs/API/admin_api.md @@ -1395,7 +1395,7 @@ Loads json generated from `config/descriptions.exs`. ### List the messages in a chat -- Params: None +- Params: `max_id`, `min_id` - Response: diff --git a/test/web/admin_api/controllers/admin_api_controller_test.exs b/test/web/admin_api/controllers/admin_api_controller_test.exs index cf5637246..dbeeb7f3d 100644 --- a/test/web/admin_api/controllers/admin_api_controller_test.exs +++ b/test/web/admin_api/controllers/admin_api_controller_test.exs @@ -1528,6 +1528,35 @@ defmodule Pleroma.Web.AdminAPI.AdminAPIControllerTest do end end + describe "GET /api/pleroma/admin/users/:nickname/chats unauthorized" do + setup do + user = insert(:user) + insert(:chat, user: user) + %{conn: conn} = oauth_access(["read:chats"]) + %{conn: conn, user: user} + end + + test "returns 403", %{conn: conn, user: user} do + conn + |> get("/api/pleroma/admin/users/#{user.nickname}/chats") + |> json_response(403) + end + end + + describe "GET /api/pleroma/admin/users/:nickname/chats unauthenticated" do + setup do + user = insert(:user) + insert(:chat, user: user) + %{conn: build_conn(), user: user} + end + + test "returns 403", %{conn: conn, user: user} do + conn + |> get("/api/pleroma/admin/users/#{user.nickname}/chats") + |> json_response(403) + end + end + describe "GET /api/pleroma/admin/moderation_log" do setup do moderator = insert(:user, is_moderator: true) diff --git a/test/web/admin_api/controllers/chat_controller_test.exs b/test/web/admin_api/controllers/chat_controller_test.exs index 840f18aa2..ccca3521a 100644 --- a/test/web/admin_api/controllers/chat_controller_test.exs +++ b/test/web/admin_api/controllers/chat_controller_test.exs @@ -15,7 +15,7 @@ defmodule Pleroma.Web.AdminAPI.ChatControllerTest do alias Pleroma.Repo alias Pleroma.Web.CommonAPI - setup do + defp admin_setup do admin = insert(:user, is_admin: true) token = insert(:oauth_admin_token, user: admin) @@ -28,6 +28,8 @@ defmodule Pleroma.Web.AdminAPI.ChatControllerTest do end describe "DELETE /api/pleroma/admin/chats/:id/messages/:message_id" do + setup do: admin_setup() + test "it deletes a message from the chat", %{conn: conn, admin: admin} do user = insert(:user) recipient = insert(:user) @@ -59,6 +61,8 @@ defmodule Pleroma.Web.AdminAPI.ChatControllerTest do end describe "GET /api/pleroma/admin/chats/:id/messages" do + setup do: admin_setup() + test "it paginates", %{conn: conn} do user = insert(:user) recipient = insert(:user) @@ -111,6 +115,8 @@ defmodule Pleroma.Web.AdminAPI.ChatControllerTest do end describe "GET /api/pleroma/admin/chats/:id" do + setup do: admin_setup() + test "it returns a chat", %{conn: conn} do user = insert(:user) other_user = insert(:user) @@ -128,4 +134,76 @@ defmodule Pleroma.Web.AdminAPI.ChatControllerTest do refute result["account"] end end + + describe "unauthorized chat moderation" do + setup do + user = insert(:user) + recipient = insert(:user) + + {:ok, message} = CommonAPI.post_chat_message(user, recipient, "Yo") + object = Object.normalize(message, false) + chat = Chat.get(user.id, recipient.ap_id) + cm_ref = MessageReference.for_chat_and_object(chat, object) + + %{conn: conn} = oauth_access(["read:chats", "write:chats"]) + %{conn: conn, chat: chat, cm_ref: cm_ref} + end + + test "DELETE /api/pleroma/admin/chats/:id/messages/:message_id", %{conn: conn, chat: chat, cm_ref: cm_ref} do + conn + |> put_req_header("content-type", "application/json") + |> delete("/api/pleroma/admin/chats/#{chat.id}/messages/#{cm_ref.id}") + |> json_response(403) + + assert MessageReference.get_by_id(cm_ref.id) == cm_ref + end + + test "GET /api/pleroma/admin/chats/:id/messages", %{conn: conn, chat: chat} do + conn + |> get("/api/pleroma/admin/chats/#{chat.id}/messages") + |> json_response(403) + end + + test "GET /api/pleroma/admin/chats/:id", %{conn: conn, chat: chat} do + conn + |> get("/api/pleroma/admin/chats/#{chat.id}") + |> json_response(403) + end + end + + describe "unauthenticated chat moderation" do + setup do + user = insert(:user) + recipient = insert(:user) + + {:ok, message} = CommonAPI.post_chat_message(user, recipient, "Yo") + object = Object.normalize(message, false) + chat = Chat.get(user.id, recipient.ap_id) + cm_ref = MessageReference.for_chat_and_object(chat, object) + + %{conn: build_conn(), chat: chat, cm_ref: cm_ref} + end + + test "DELETE /api/pleroma/admin/chats/:id/messages/:message_id", %{conn: conn, chat: chat, cm_ref: cm_ref} do + conn + |> put_req_header("content-type", "application/json") + |> delete("/api/pleroma/admin/chats/#{chat.id}/messages/#{cm_ref.id}") + |> json_response(403) + + assert MessageReference.get_by_id(cm_ref.id) == cm_ref + end + + test "GET /api/pleroma/admin/chats/:id/messages", %{conn: conn, chat: chat} do + conn + |> get("/api/pleroma/admin/chats/#{chat.id}/messages") + |> json_response(403) + end + + test "GET /api/pleroma/admin/chats/:id", %{conn: conn, chat: chat} do + conn + |> get("/api/pleroma/admin/chats/#{chat.id}") + |> json_response(403) + end + end + end From bc86d0a906e58becb94c5a73552f90abbe494c28 Mon Sep 17 00:00:00 2001 From: Alex Gleason Date: Fri, 11 Sep 2020 14:29:56 -0500 Subject: [PATCH 066/102] Chat moderation: fix formatting --- .../admin_api/controllers/chat_controller_test.exs | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/test/web/admin_api/controllers/chat_controller_test.exs b/test/web/admin_api/controllers/chat_controller_test.exs index ccca3521a..e81484ce6 100644 --- a/test/web/admin_api/controllers/chat_controller_test.exs +++ b/test/web/admin_api/controllers/chat_controller_test.exs @@ -149,7 +149,11 @@ defmodule Pleroma.Web.AdminAPI.ChatControllerTest do %{conn: conn, chat: chat, cm_ref: cm_ref} end - test "DELETE /api/pleroma/admin/chats/:id/messages/:message_id", %{conn: conn, chat: chat, cm_ref: cm_ref} do + test "DELETE /api/pleroma/admin/chats/:id/messages/:message_id", %{ + conn: conn, + chat: chat, + cm_ref: cm_ref + } do conn |> put_req_header("content-type", "application/json") |> delete("/api/pleroma/admin/chats/#{chat.id}/messages/#{cm_ref.id}") @@ -184,7 +188,11 @@ defmodule Pleroma.Web.AdminAPI.ChatControllerTest do %{conn: build_conn(), chat: chat, cm_ref: cm_ref} end - test "DELETE /api/pleroma/admin/chats/:id/messages/:message_id", %{conn: conn, chat: chat, cm_ref: cm_ref} do + test "DELETE /api/pleroma/admin/chats/:id/messages/:message_id", %{ + conn: conn, + chat: chat, + cm_ref: cm_ref + } do conn |> put_req_header("content-type", "application/json") |> delete("/api/pleroma/admin/chats/#{chat.id}/messages/#{cm_ref.id}") @@ -205,5 +213,4 @@ defmodule Pleroma.Web.AdminAPI.ChatControllerTest do |> json_response(403) end end - end From 32831f371ff426ac0c6f5d6c1381313f5f92af42 Mon Sep 17 00:00:00 2001 From: Ivan Tashkinov Date: Sat, 12 Sep 2020 10:33:42 +0300 Subject: [PATCH 067/102] [#2497] Media preview proxy: redirecting to media proxy url in case of preview error or unsupported content type. --- .../web/media_proxy/media_proxy_controller.ex | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/lib/pleroma/web/media_proxy/media_proxy_controller.ex b/lib/pleroma/web/media_proxy/media_proxy_controller.ex index ff7fd2409..08d62a51a 100644 --- a/lib/pleroma/web/media_proxy/media_proxy_controller.ex +++ b/lib/pleroma/web/media_proxy/media_proxy_controller.ex @@ -91,8 +91,8 @@ defmodule Pleroma.Web.MediaProxy.MediaProxyController do handle_video_preview(conn, media_proxy_url) end - defp handle_preview(content_type, conn, _media_proxy_url) do - send_resp(conn, :unprocessable_entity, "Unsupported content type: #{content_type}.") + defp handle_preview(_unsupported_content_type, conn, media_proxy_url) do + fallback_on_preview_error(conn, media_proxy_url) end defp handle_png_preview(conn, media_proxy_url) do @@ -114,7 +114,7 @@ defmodule Pleroma.Web.MediaProxy.MediaProxyController do |> send_resp(200, thumbnail_binary) else _ -> - send_resp(conn, :failed_dependency, "Can't handle preview.") + fallback_on_preview_error(conn, media_proxy_url) end end @@ -132,7 +132,7 @@ defmodule Pleroma.Web.MediaProxy.MediaProxyController do |> send_resp(200, thumbnail_binary) else _ -> - send_resp(conn, :failed_dependency, "Can't handle preview.") + fallback_on_preview_error(conn, media_proxy_url) end end @@ -144,10 +144,14 @@ defmodule Pleroma.Web.MediaProxy.MediaProxyController do |> send_resp(200, thumbnail_binary) else _ -> - send_resp(conn, :failed_dependency, "Can't handle preview.") + fallback_on_preview_error(conn, media_proxy_url) end end + defp fallback_on_preview_error(conn, media_proxy_url) do + redirect(conn, external: media_proxy_url) + end + defp put_preview_response_headers( conn, [content_type, filename] = _content_info \\ ["image/jpeg", "preview.jpg"] From cd234a5321b9d33146b90be95d84fa67aa4f7707 Mon Sep 17 00:00:00 2001 From: Ivan Tashkinov Date: Sat, 12 Sep 2020 11:20:41 +0300 Subject: [PATCH 068/102] [#2497] Media preview proxy: preview bypass for small images (basing on Content-Length and Content-Type). --- .../web/media_proxy/media_proxy_controller.ex | 25 ++++++++++++++----- 1 file changed, 19 insertions(+), 6 deletions(-) diff --git a/lib/pleroma/web/media_proxy/media_proxy_controller.ex b/lib/pleroma/web/media_proxy/media_proxy_controller.ex index 08d62a51a..78df7763e 100644 --- a/lib/pleroma/web/media_proxy/media_proxy_controller.ex +++ b/lib/pleroma/web/media_proxy/media_proxy_controller.ex @@ -11,6 +11,8 @@ defmodule Pleroma.Web.MediaProxy.MediaProxyController do alias Pleroma.Web.MediaProxy alias Plug.Conn + @min_content_length_for_preview 100 * 1024 + def remote(conn, %{"sig" => sig64, "url" => url64}) do with {_, true} <- {:enabled, MediaProxy.enabled?()}, {:ok, url} <- MediaProxy.decode_url(sig64, url64), @@ -54,8 +56,12 @@ defmodule Pleroma.Web.MediaProxy.MediaProxyController do with {:ok, %{status: status} = head_response} when status in 200..299 <- Pleroma.HTTP.request("head", media_proxy_url, [], [], pool: :media) do content_type = Tesla.get_header(head_response, "content-type") - handle_preview(content_type, conn, media_proxy_url) + content_length = Tesla.get_header(head_response, "content-length") + content_length = content_length && String.to_integer(content_length) + + handle_preview(content_type, content_length, conn, media_proxy_url) else + # If HEAD failed, redirecting to media proxy URI doesn't make much sense; returning an error {_, %{status: status}} -> send_resp(conn, :failed_dependency, "Can't fetch HTTP headers (HTTP #{status}).") @@ -69,29 +75,36 @@ defmodule Pleroma.Web.MediaProxy.MediaProxyController do defp handle_preview( "image/" <> _ = _content_type, + _content_length, %{params: %{"output_format" => "jpeg"}} = conn, media_proxy_url ) do handle_jpeg_preview(conn, media_proxy_url) end - defp handle_preview("image/gif" = _content_type, conn, media_proxy_url) do + defp handle_preview("image/gif" = _content_type, _content_length, conn, media_proxy_url) do redirect(conn, external: media_proxy_url) end - defp handle_preview("image/png" <> _ = _content_type, conn, media_proxy_url) do + defp handle_preview("image/" <> _ = _content_type, content_length, conn, media_proxy_url) + when is_integer(content_length) and content_length > 0 and + content_length < @min_content_length_for_preview do + redirect(conn, external: media_proxy_url) + end + + defp handle_preview("image/png" <> _ = _content_type, _content_length, conn, media_proxy_url) do handle_png_preview(conn, media_proxy_url) end - defp handle_preview("image/" <> _ = _content_type, conn, media_proxy_url) do + defp handle_preview("image/" <> _ = _content_type, _content_length, conn, media_proxy_url) do handle_jpeg_preview(conn, media_proxy_url) end - defp handle_preview("video/" <> _ = _content_type, conn, media_proxy_url) do + defp handle_preview("video/" <> _ = _content_type, _content_length, conn, media_proxy_url) do handle_video_preview(conn, media_proxy_url) end - defp handle_preview(_unsupported_content_type, conn, media_proxy_url) do + defp handle_preview(_unsupported_content_type, _content_length, conn, media_proxy_url) do fallback_on_preview_error(conn, media_proxy_url) end From 38b2db297b3207607072347b408dc7eacbac600e Mon Sep 17 00:00:00 2001 From: stwf Date: Mon, 14 Sep 2020 13:18:11 -0400 Subject: [PATCH 069/102] search indexing metadata respects discoverable flag --- lib/pleroma/web/metadata/restrict_indexing.ex | 7 +++---- test/web/metadata/metadata_test.exs | 19 +++++++++++++++++-- test/web/metadata/restrict_indexing_test.exs | 8 +++++++- 3 files changed, 27 insertions(+), 7 deletions(-) diff --git a/lib/pleroma/web/metadata/restrict_indexing.ex b/lib/pleroma/web/metadata/restrict_indexing.ex index f15607896..a1dcb6e15 100644 --- a/lib/pleroma/web/metadata/restrict_indexing.ex +++ b/lib/pleroma/web/metadata/restrict_indexing.ex @@ -10,7 +10,9 @@ defmodule Pleroma.Web.Metadata.Providers.RestrictIndexing do """ @impl true - def build_tags(%{user: %{local: false}}) do + def build_tags(%{user: %{local: true, discoverable: true}}), do: [] + + def build_tags(_) do [ {:meta, [ @@ -19,7 +21,4 @@ defmodule Pleroma.Web.Metadata.Providers.RestrictIndexing do ], []} ] end - - @impl true - def build_tags(%{user: %{local: true}}), do: [] end diff --git a/test/web/metadata/metadata_test.exs b/test/web/metadata/metadata_test.exs index 9d3121b7b..fe3009628 100644 --- a/test/web/metadata/metadata_test.exs +++ b/test/web/metadata/metadata_test.exs @@ -18,17 +18,32 @@ defmodule Pleroma.Web.MetadataTest do test "for local user" do user = insert(:user) + assert Pleroma.Web.Metadata.build_tags(%{user: user}) =~ + "" + end + + test "for local user set to discoverable" do + user = insert(:user, discoverable: true) + refute Pleroma.Web.Metadata.build_tags(%{user: user}) =~ "" end end describe "no metadata for private instances" do - test "for local user" do + test "for local user set to discoverable" do clear_config([:instance, :public], false) - user = insert(:user, bio: "This is my secret fedi account bio") + user = insert(:user, bio: "This is my secret fedi account bio", discoverable: true) assert "" = Pleroma.Web.Metadata.build_tags(%{user: user}) end + + test "search exclusion metadata is included" do + clear_config([:instance, :public], false) + user = insert(:user, bio: "This is my secret fedi account bio") + + assert "" == + Pleroma.Web.Metadata.build_tags(%{user: user}) + end end end diff --git a/test/web/metadata/restrict_indexing_test.exs b/test/web/metadata/restrict_indexing_test.exs index aad0bac42..6b3a65372 100644 --- a/test/web/metadata/restrict_indexing_test.exs +++ b/test/web/metadata/restrict_indexing_test.exs @@ -14,8 +14,14 @@ defmodule Pleroma.Web.Metadata.Providers.RestrictIndexingTest do test "for local user" do assert Pleroma.Web.Metadata.Providers.RestrictIndexing.build_tags(%{ - user: %Pleroma.User{local: true} + user: %Pleroma.User{local: true, discoverable: true} }) == [] end + + test "for local user when discoverable is false" do + assert Pleroma.Web.Metadata.Providers.RestrictIndexing.build_tags(%{ + user: %Pleroma.User{local: true, discoverable: false} + }) == [{:meta, [name: "robots", content: "noindex, noarchive"], []}] + end end end From f900a40d5dc4285977bd92f3792ad04a2f34ddcf Mon Sep 17 00:00:00 2001 From: stwf Date: Mon, 14 Sep 2020 13:55:49 -0400 Subject: [PATCH 070/102] fix credo warning --- test/web/metadata/metadata_test.exs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/web/metadata/metadata_test.exs b/test/web/metadata/metadata_test.exs index fe3009628..054844597 100644 --- a/test/web/metadata/metadata_test.exs +++ b/test/web/metadata/metadata_test.exs @@ -42,7 +42,7 @@ defmodule Pleroma.Web.MetadataTest do clear_config([:instance, :public], false) user = insert(:user, bio: "This is my secret fedi account bio") - assert "" == + assert ~s() == Pleroma.Web.Metadata.build_tags(%{user: user}) end end From a781f41f969bd1a929005b2b5006a40d42855ae8 Mon Sep 17 00:00:00 2001 From: Ivan Tashkinov Date: Wed, 16 Sep 2020 22:30:42 +0300 Subject: [PATCH 071/102] [#2497] Media preview proxy: misc. improvements (`static` param support, dynamic fifo pipe path), refactoring. --- CHANGELOG.md | 3 +++ lib/pleroma/helpers/media_helper.ex | 4 +--- lib/pleroma/helpers/uri_helper.ex | 13 ++++++++----- .../web/mastodon_api/views/account_view.ex | 4 ++-- lib/pleroma/web/media_proxy/media_proxy.ex | 2 +- .../web/media_proxy/media_proxy_controller.ex | 19 ++++++++++++++++--- lib/pleroma/web/oauth/oauth_controller.ex | 4 ++-- 7 files changed, 33 insertions(+), 16 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index f7a372e11..adea6d019 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -11,6 +11,9 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/). - Renamed `:timeout` in `pools` namespace to `:recv_timeout`, old name is deprecated. - Minimum lifetime for ephmeral activities changed to 10 minutes and made configurable (`:min_lifetime` option). +### Added +- Media preview proxy (requires media proxy be enabled; see `:media_preview_proxy` config for more details). + ### Removed - **Breaking:** `Pleroma.Workers.Cron.StatsWorker` setting from Oban `:crontab` (moved to a simpler implementation). diff --git a/lib/pleroma/helpers/media_helper.ex b/lib/pleroma/helpers/media_helper.ex index d834b4a07..9b7348ee2 100644 --- a/lib/pleroma/helpers/media_helper.ex +++ b/lib/pleroma/helpers/media_helper.ex @@ -9,8 +9,6 @@ defmodule Pleroma.Helpers.MediaHelper do alias Pleroma.HTTP - @tmp_base "/tmp/pleroma-media_preview-pipe" - def image_resize(url, options) do with executable when is_binary(executable) <- System.find_executable("convert"), {:ok, args} <- prepare_image_resize_args(options), @@ -103,7 +101,7 @@ defmodule Pleroma.Helpers.MediaHelper do end defp mkfifo do - path = "#{@tmp_base}#{to_charlist(:erlang.phash2(self()))}" + path = Path.join(System.tmp_dir!(), "pleroma-media-preview-pipe-#{Ecto.UUID.generate()}") case System.cmd("mkfifo", [path]) do {_, 0} -> diff --git a/lib/pleroma/helpers/uri_helper.ex b/lib/pleroma/helpers/uri_helper.ex index 9c9e53447..f1301f055 100644 --- a/lib/pleroma/helpers/uri_helper.ex +++ b/lib/pleroma/helpers/uri_helper.ex @@ -3,14 +3,17 @@ # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Helpers.UriHelper do - def append_uri_params(uri, appended_params) do + def modify_uri_params(uri, overridden_params, deleted_params \\ []) do uri = URI.parse(uri) - appended_params = for {k, v} <- appended_params, into: %{}, do: {to_string(k), v} - existing_params = URI.query_decoder(uri.query || "") |> Enum.into(%{}) - updated_params_keys = Enum.uniq(Map.keys(existing_params) ++ Map.keys(appended_params)) + + existing_params = URI.query_decoder(uri.query || "") |> Map.new() + overridden_params = Map.new(overridden_params, fn {k, v} -> {to_string(k), v} end) + deleted_params = Enum.map(deleted_params, &to_string/1) updated_params = - for k <- updated_params_keys, do: {k, appended_params[k] || existing_params[k]} + existing_params + |> Map.merge(overridden_params) + |> Map.drop(deleted_params) uri |> Map.put(:query, URI.encode_query(updated_params)) diff --git a/lib/pleroma/web/mastodon_api/views/account_view.ex b/lib/pleroma/web/mastodon_api/views/account_view.ex index a811f81c2..121ba1693 100644 --- a/lib/pleroma/web/mastodon_api/views/account_view.ex +++ b/lib/pleroma/web/mastodon_api/views/account_view.ex @@ -182,9 +182,9 @@ defmodule Pleroma.Web.MastodonAPI.AccountView do display_name = user.name || user.nickname avatar = User.avatar_url(user) |> MediaProxy.url() - avatar_static = User.avatar_url(user) |> MediaProxy.preview_url(output_format: "jpeg") + avatar_static = User.avatar_url(user) |> MediaProxy.preview_url(static: true) header = User.banner_url(user) |> MediaProxy.url() - header_static = User.banner_url(user) |> MediaProxy.preview_url(output_format: "jpeg") + header_static = User.banner_url(user) |> MediaProxy.preview_url(static: true) following_count = if !user.hide_follows_count or !user.hide_follows or opts[:for] == user do diff --git a/lib/pleroma/web/media_proxy/media_proxy.ex b/lib/pleroma/web/media_proxy/media_proxy.ex index ba553998b..8656b8cad 100644 --- a/lib/pleroma/web/media_proxy/media_proxy.ex +++ b/lib/pleroma/web/media_proxy/media_proxy.ex @@ -157,7 +157,7 @@ defmodule Pleroma.Web.MediaProxy do def build_preview_url(sig_base64, url_base64, filename \\ nil, preview_params \\ []) do uri = proxy_url("proxy/preview", sig_base64, url_base64, filename) - UriHelper.append_uri_params(uri, preview_params) + UriHelper.modify_uri_params(uri, preview_params) end def verify_request_path_and_url( diff --git a/lib/pleroma/web/media_proxy/media_proxy_controller.ex b/lib/pleroma/web/media_proxy/media_proxy_controller.ex index 78df7763e..fe279e964 100644 --- a/lib/pleroma/web/media_proxy/media_proxy_controller.ex +++ b/lib/pleroma/web/media_proxy/media_proxy_controller.ex @@ -7,6 +7,7 @@ defmodule Pleroma.Web.MediaProxy.MediaProxyController do alias Pleroma.Config alias Pleroma.Helpers.MediaHelper + alias Pleroma.Helpers.UriHelper alias Pleroma.ReverseProxy alias Pleroma.Web.MediaProxy alias Plug.Conn @@ -74,14 +75,26 @@ defmodule Pleroma.Web.MediaProxy.MediaProxyController do end defp handle_preview( - "image/" <> _ = _content_type, + "image/gif" = _content_type, _content_length, - %{params: %{"output_format" => "jpeg"}} = conn, + %{params: %{"static" => static}} = conn, media_proxy_url - ) do + ) + when static in ["true", true] do handle_jpeg_preview(conn, media_proxy_url) end + defp handle_preview( + _content_type, + _content_length, + %{params: %{"static" => static}} = conn, + _media_proxy_url + ) + when static in ["true", true] do + uri_without_static_param = UriHelper.modify_uri_params(current_url(conn), %{}, ["static"]) + redirect(conn, external: uri_without_static_param) + end + defp handle_preview("image/gif" = _content_type, _content_length, conn, media_proxy_url) do redirect(conn, external: media_proxy_url) end diff --git a/lib/pleroma/web/oauth/oauth_controller.ex b/lib/pleroma/web/oauth/oauth_controller.ex index 26e68be42..a4152e840 100644 --- a/lib/pleroma/web/oauth/oauth_controller.ex +++ b/lib/pleroma/web/oauth/oauth_controller.ex @@ -119,7 +119,7 @@ defmodule Pleroma.Web.OAuth.OAuthController do redirect_uri = redirect_uri(conn, redirect_uri) url_params = %{access_token: token.token} url_params = Maps.put_if_present(url_params, :state, params["state"]) - url = UriHelper.append_uri_params(redirect_uri, url_params) + url = UriHelper.modify_uri_params(redirect_uri, url_params) redirect(conn, external: url) else conn @@ -161,7 +161,7 @@ defmodule Pleroma.Web.OAuth.OAuthController do redirect_uri = redirect_uri(conn, redirect_uri) url_params = %{code: auth.token} url_params = Maps.put_if_present(url_params, :state, auth_attrs["state"]) - url = UriHelper.append_uri_params(redirect_uri, url_params) + url = UriHelper.modify_uri_params(redirect_uri, url_params) redirect(conn, external: url) else conn From e39ff2616b6694f97ab793bc60b5caa7b509f0b1 Mon Sep 17 00:00:00 2001 From: lain Date: Thu, 17 Sep 2020 13:29:26 +0200 Subject: [PATCH 072/102] Admin chat api tests: Small additions. --- test/web/admin_api/controllers/admin_api_controller_test.exs | 2 +- test/web/admin_api/controllers/chat_controller_test.exs | 3 +++ 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/test/web/admin_api/controllers/admin_api_controller_test.exs b/test/web/admin_api/controllers/admin_api_controller_test.exs index 3476fd0b4..e6ad210a2 100644 --- a/test/web/admin_api/controllers/admin_api_controller_test.exs +++ b/test/web/admin_api/controllers/admin_api_controller_test.exs @@ -1521,7 +1521,7 @@ defmodule Pleroma.Web.AdminAPI.AdminAPIControllerTest do %{user: user} end - test "renders user's statuses", %{conn: conn, user: user} do + test "renders user's chats", %{conn: conn, user: user} do conn = get(conn, "/api/pleroma/admin/users/#{user.nickname}/chats") assert json_response(conn, 200) |> length() == 3 diff --git a/test/web/admin_api/controllers/chat_controller_test.exs b/test/web/admin_api/controllers/chat_controller_test.exs index e81484ce6..bd4c9c9d1 100644 --- a/test/web/admin_api/controllers/chat_controller_test.exs +++ b/test/web/admin_api/controllers/chat_controller_test.exs @@ -40,8 +40,10 @@ defmodule Pleroma.Web.AdminAPI.ChatControllerTest do object = Object.normalize(message, false) chat = Chat.get(user.id, recipient.ap_id) + recipient_chat = Chat.get(recipient.id, user.ap_id) cm_ref = MessageReference.for_chat_and_object(chat, object) + recipient_cm_ref = MessageReference.for_chat_and_object(recipient_chat, object) result = conn @@ -56,6 +58,7 @@ defmodule Pleroma.Web.AdminAPI.ChatControllerTest do assert result["id"] == cm_ref.id refute MessageReference.get_by_id(cm_ref.id) + refute MessageReference.get_by_id(recipient_cm_ref.id) assert %{data: %{"type" => "Tombstone"}} = Object.get_by_id(object.id) end end From 5e3c70afa5c02926a5578628431487e92b2175e9 Mon Sep 17 00:00:00 2001 From: lain Date: Thu, 17 Sep 2020 13:37:25 +0200 Subject: [PATCH 073/102] AdminAPI Chat tests: Remove factory. The factory system doesn't work too well with how the chats are done. Instead of tempting people to use it, let's rather use the CommonAPI system for now. --- test/support/factory.ex | 54 ------------------- .../controllers/admin_api_controller_test.exs | 13 +++-- 2 files changed, 8 insertions(+), 59 deletions(-) diff --git a/test/support/factory.ex b/test/support/factory.ex index e59d83242..2fdfabbc5 100644 --- a/test/support/factory.ex +++ b/test/support/factory.ex @@ -441,58 +441,4 @@ defmodule Pleroma.Factory do phrase: "cofe" } end - - def chat_factory(attrs \\ %{}) do - user = attrs[:user] || insert(:user) - recipient = attrs[:recipient] || insert(:user) - - %Pleroma.Chat{ - user_id: user.id, - recipient: recipient.ap_id - } - end - - def chat_message_factory(attrs \\ %{}) do - text = sequence(:text, &"This is :moominmamma: chat message #{&1}") - chat = attrs[:chat] || insert(:chat) - - data = %{ - "type" => "ChatMessage", - "content" => text, - "id" => Pleroma.Web.ActivityPub.Utils.generate_object_id(), - "actor" => User.get_by_id(chat.user_id).ap_id, - "to" => [chat.recipient], - "published" => DateTime.utc_now() |> DateTime.to_iso8601() - } - - %Pleroma.Object{ - data: merge_attributes(data, Map.get(attrs, :data, %{})) - } - end - - def chat_message_activity_factory(attrs \\ %{}) do - chat = attrs[:chat] || insert(:chat) - chat_message = attrs[:chat_message] || insert(:chat_message, chat: chat) - - data_attrs = attrs[:data_attrs] || %{} - attrs = Map.drop(attrs, [:chat, :chat_message, :data_attrs]) - - data = - %{ - "id" => Pleroma.Web.ActivityPub.Utils.generate_activity_id(), - "type" => "Create", - "actor" => chat_message.data["actor"], - "to" => chat_message.data["to"], - "object" => chat_message.data["id"], - "published" => DateTime.utc_now() |> DateTime.to_iso8601() - } - |> Map.merge(data_attrs) - - %Pleroma.Activity{ - data: data, - actor: data["actor"], - recipients: data["to"] - } - |> Map.merge(attrs) - end end diff --git a/test/web/admin_api/controllers/admin_api_controller_test.exs b/test/web/admin_api/controllers/admin_api_controller_test.exs index e6ad210a2..e4d3512de 100644 --- a/test/web/admin_api/controllers/admin_api_controller_test.exs +++ b/test/web/admin_api/controllers/admin_api_controller_test.exs @@ -1513,10 +1513,11 @@ defmodule Pleroma.Web.AdminAPI.AdminAPIControllerTest do describe "GET /api/pleroma/admin/users/:nickname/chats" do setup do user = insert(:user) + recipients = insert_list(3, :user) - insert(:chat, user: user) - insert(:chat, user: user) - insert(:chat, user: user) + Enum.each(recipients, fn recipient -> + CommonAPI.post_chat_message(user, recipient, "yo") + end) %{user: user} end @@ -1531,7 +1532,8 @@ defmodule Pleroma.Web.AdminAPI.AdminAPIControllerTest do describe "GET /api/pleroma/admin/users/:nickname/chats unauthorized" do setup do user = insert(:user) - insert(:chat, user: user) + recipient = insert(:user) + CommonAPI.post_chat_message(user, recipient, "yo") %{conn: conn} = oauth_access(["read:chats"]) %{conn: conn, user: user} end @@ -1546,7 +1548,8 @@ defmodule Pleroma.Web.AdminAPI.AdminAPIControllerTest do describe "GET /api/pleroma/admin/users/:nickname/chats unauthenticated" do setup do user = insert(:user) - insert(:chat, user: user) + recipient = insert(:user) + CommonAPI.post_chat_message(user, recipient, "yo") %{conn: build_conn(), user: user} end From 582ad5d4e1587b3dba9d879bd68dd9a315c8446e Mon Sep 17 00:00:00 2001 From: eugenijm Date: Sun, 30 Aug 2020 15:15:14 +0300 Subject: [PATCH 074/102] AdminAPI: Allow to modify Terms of Service and Instance Panel via Admin API --- CHANGELOG.md | 6 + docs/API/admin_api.md | 42 +++++++ .../instance_document_controller.ex | 37 ++++++ .../admin/instance_document_operation.ex | 108 +++++++++++++++++ lib/pleroma/web/instance_document.ex | 62 ++++++++++ lib/pleroma/web/router.ex | 4 + test/fixtures/custom_instance_panel.html | 1 + .../instance_document_controller_test.exs | 112 ++++++++++++++++++ 8 files changed, 372 insertions(+) create mode 100644 lib/pleroma/web/admin_api/controllers/instance_document_controller.ex create mode 100644 lib/pleroma/web/api_spec/operations/admin/instance_document_operation.ex create mode 100644 lib/pleroma/web/instance_document.ex create mode 100644 test/fixtures/custom_instance_panel.html create mode 100644 test/web/admin_api/controllers/instance_document_controller_test.exs diff --git a/CHANGELOG.md b/CHANGELOG.md index f7a372e11..1ec6c11cc 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -41,6 +41,12 @@ switched to a new configuration mechanism, however it was not officially removed ### Added - Rich media failure tracking (along with `:failure_backoff` option). +
+ Admin API Changes + +- Add `PATCH /api/pleroma/admin/instance_document/:document_name` to modify the Terms of Service and Instance Panel HTML pages via Admin API +
+ ### Fixed - Default HTTP adapter not respecting pool setting, leading to possible OOM. - Fixed uploading webp images when the Exiftool Upload Filter is enabled by skipping them diff --git a/docs/API/admin_api.md b/docs/API/admin_api.md index bc96abbf0..eba92dd1f 100644 --- a/docs/API/admin_api.md +++ b/docs/API/admin_api.md @@ -1455,3 +1455,45 @@ Loads json generated from `config/descriptions.exs`. "unread": false } ``` + +## `GET /api/pleroma/admin/instance_document/:document_name` + +### Gets an instance document + +- Authentication: required + +- Response: + +``` json +{ + "url": "https://example.com/instance/panel.html" +} +``` + +## `PATCH /api/pleroma/admin/instance_document/:document_name` +- Params: + - `file` (the file to be uploaded, using multipart form data.) + +### Updates an instance document + +- Authentication: required + +- Response: + +``` json +{ + "url": "https://example.com/instance/panel.html" +} +``` + +## `DELETE /api/pleroma/admin/instance_document/:document_name` + +### Delete an instance document + +- Response: + +``` json +{ + "url": "https://example.com/instance/panel.html" +} +``` diff --git a/lib/pleroma/web/admin_api/controllers/instance_document_controller.ex b/lib/pleroma/web/admin_api/controllers/instance_document_controller.ex new file mode 100644 index 000000000..2144e44ac --- /dev/null +++ b/lib/pleroma/web/admin_api/controllers/instance_document_controller.ex @@ -0,0 +1,37 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2020 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + +defmodule Pleroma.Web.AdminAPI.InstanceDocumentController do + use Pleroma.Web, :controller + + alias Pleroma.Plugs.OAuthScopesPlug + alias Pleroma.Web.InstanceDocument + + plug(Pleroma.Web.ApiSpec.CastAndValidate) + + action_fallback(Pleroma.Web.AdminAPI.FallbackController) + + defdelegate open_api_operation(action), to: Pleroma.Web.ApiSpec.Admin.InstanceDocumentOperation + + plug(OAuthScopesPlug, %{scopes: ["read"], admin: true} when action == :show) + plug(OAuthScopesPlug, %{scopes: ["write"], admin: true} when action in [:update, :delete]) + + def show(conn, %{name: document_name}) do + with {:ok, url} <- InstanceDocument.get(document_name) do + json(conn, %{"url" => url}) + end + end + + def update(%{body_params: %{file: file}} = conn, %{name: document_name}) do + with {:ok, url} <- InstanceDocument.put(document_name, file.path) do + json(conn, %{"url" => url}) + end + end + + def delete(conn, %{name: document_name}) do + with :ok <- InstanceDocument.delete(document_name) do + json(conn, %{}) + end + end +end diff --git a/lib/pleroma/web/api_spec/operations/admin/instance_document_operation.ex b/lib/pleroma/web/api_spec/operations/admin/instance_document_operation.ex new file mode 100644 index 000000000..e0eb993fb --- /dev/null +++ b/lib/pleroma/web/api_spec/operations/admin/instance_document_operation.ex @@ -0,0 +1,108 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2020 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + +defmodule Pleroma.Web.ApiSpec.Admin.InstanceDocumentOperation do + alias OpenApiSpex.Operation + alias OpenApiSpex.Schema + alias Pleroma.Web.ApiSpec.Helpers + alias Pleroma.Web.ApiSpec.Schemas.ApiError + + def open_api_operation(action) do + operation = String.to_existing_atom("#{action}_operation") + apply(__MODULE__, operation, []) + end + + def show_operation do + %Operation{ + tags: ["Admin", "InstanceDocument"], + summary: "Get the instance document", + operationId: "AdminAPI.InstanceDocumentController.show", + security: [%{"oAuth" => ["read"]}], + parameters: [ + Operation.parameter(:name, :path, %Schema{type: :string}, "The document name", + required: true + ) + | Helpers.admin_api_params() + ], + responses: %{ + 200 => Operation.response("InstanceDocument", "application/json", instance_document()), + 400 => Operation.response("Bad Request", "application/json", ApiError), + 403 => Operation.response("Forbidden", "application/json", ApiError), + 404 => Operation.response("Not Found", "application/json", ApiError) + } + } + end + + def update_operation do + %Operation{ + tags: ["Admin", "InstanceDocument"], + summary: "Update the instance document", + operationId: "AdminAPI.InstanceDocumentController.update", + security: [%{"oAuth" => ["write"]}], + requestBody: Helpers.request_body("Parameters", update_request()), + parameters: [ + Operation.parameter(:name, :path, %Schema{type: :string}, "The document name", + required: true + ) + | Helpers.admin_api_params() + ], + responses: %{ + 200 => Operation.response("InstanceDocument", "application/json", instance_document()), + 400 => Operation.response("Bad Request", "application/json", ApiError), + 403 => Operation.response("Forbidden", "application/json", ApiError), + 404 => Operation.response("Not Found", "application/json", ApiError) + } + } + end + + defp update_request do + %Schema{ + title: "UpdateRequest", + description: "POST body for uploading the file", + type: :object, + required: [:file], + properties: %{ + file: %Schema{ + type: :string, + format: :binary, + description: "The file to be uploaded, using multipart form data." + } + } + } + end + + def delete_operation do + %Operation{ + tags: ["Admin", "InstanceDocument"], + summary: "Get the instance document", + operationId: "AdminAPI.InstanceDocumentController.delete", + security: [%{"oAuth" => ["write"]}], + parameters: [ + Operation.parameter(:name, :path, %Schema{type: :string}, "The document name", + required: true + ) + | Helpers.admin_api_params() + ], + responses: %{ + 200 => Operation.response("InstanceDocument", "application/json", instance_document()), + 400 => Operation.response("Bad Request", "application/json", ApiError), + 403 => Operation.response("Forbidden", "application/json", ApiError), + 404 => Operation.response("Not Found", "application/json", ApiError) + } + } + end + + defp instance_document do + %Schema{ + title: "InstanceDocument", + type: :object, + properties: %{ + url: %Schema{type: :string} + }, + example: %{ + "url" => "https://example.com/static/terms-of-service.html" + } + } + end +end diff --git a/lib/pleroma/web/instance_document.ex b/lib/pleroma/web/instance_document.ex new file mode 100644 index 000000000..969a44e41 --- /dev/null +++ b/lib/pleroma/web/instance_document.ex @@ -0,0 +1,62 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2020 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + +defmodule Pleroma.Web.InstanceDocument do + alias Pleroma.Config + alias Pleroma.Web.Endpoint + + @instance_documents %{ + "terms-of-service" => "/static/terms-of-service.html", + "instance-panel" => "/instance/panel.html" + } + + @spec get(String.t()) :: {:ok, String.t()} | {:error, atom()} + def get(document_name) do + case Map.fetch(@instance_documents, document_name) do + {:ok, path} -> {:ok, Path.join(Endpoint.url(), path)} + _ -> {:error, :not_found} + end + end + + @spec put(String.t(), String.t()) :: {:ok, String.t()} | {:error, atom()} + def put(document_name, origin_path) do + with {_, {:ok, destination_path}} <- + {:instance_document, Map.fetch(@instance_documents, document_name)}, + :ok <- put_file(origin_path, destination_path) do + {:ok, Path.join(Endpoint.url(), destination_path)} + else + {:instance_document, :error} -> {:error, :not_found} + error -> error + end + end + + @spec delete(String.t()) :: :ok | {:error, atom()} + def delete(document_name) do + with {_, {:ok, path}} <- {:instance_document, Map.fetch(@instance_documents, document_name)}, + instance_static_dir_path <- instance_static_dir(path), + :ok <- File.rm(instance_static_dir_path) do + :ok + else + {:instance_document, :error} -> {:error, :not_found} + {:error, :enoent} -> {:error, :not_found} + error -> error + end + end + + defp put_file(origin_path, destination_path) do + with destination <- instance_static_dir(destination_path), + {_, :ok} <- {:mkdir_p, File.mkdir_p(Path.dirname(destination))}, + {_, {:ok, _}} <- {:copy, File.copy(origin_path, destination)} do + :ok + else + {error, _} -> {:error, error} + end + end + + defp instance_static_dir(filename) do + [:instance, :static_dir] + |> Config.get!() + |> Path.join(filename) + end +end diff --git a/lib/pleroma/web/router.ex b/lib/pleroma/web/router.ex index e4440d442..a4a58c2c4 100644 --- a/lib/pleroma/web/router.ex +++ b/lib/pleroma/web/router.ex @@ -182,6 +182,10 @@ defmodule Pleroma.Web.Router do get("/instances/:instance/statuses", AdminAPIController, :list_instance_statuses) + get("/instance_document/:name", InstanceDocumentController, :show) + patch("/instance_document/:name", InstanceDocumentController, :update) + delete("/instance_document/:name", InstanceDocumentController, :delete) + patch("/users/confirm_email", AdminAPIController, :confirm_email) patch("/users/resend_confirmation_email", AdminAPIController, :resend_confirmation_email) diff --git a/test/fixtures/custom_instance_panel.html b/test/fixtures/custom_instance_panel.html new file mode 100644 index 000000000..6371a1e43 --- /dev/null +++ b/test/fixtures/custom_instance_panel.html @@ -0,0 +1 @@ +

Custom instance panel

\ No newline at end of file diff --git a/test/web/admin_api/controllers/instance_document_controller_test.exs b/test/web/admin_api/controllers/instance_document_controller_test.exs new file mode 100644 index 000000000..60dcc9dff --- /dev/null +++ b/test/web/admin_api/controllers/instance_document_controller_test.exs @@ -0,0 +1,112 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2020 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + +defmodule Pleroma.Web.AdminAPI.InstanceDocumentControllerTest do + use Pleroma.Web.ConnCase, async: true + import Pleroma.Factory + alias Pleroma.Config + + @dir "test/tmp/instance_static" + @default_instance_panel ~s(

Welcome to Pleroma!

) + + setup do + File.mkdir_p!(@dir) + on_exit(fn -> File.rm_rf(@dir) end) + end + + setup do: clear_config([:instance, :static_dir], @dir) + + setup do + admin = insert(:user, is_admin: true) + token = insert(:oauth_admin_token, user: admin) + + conn = + build_conn() + |> assign(:user, admin) + |> assign(:token, token) + + {:ok, %{admin: admin, token: token, conn: conn}} + end + + describe "GET /api/pleroma/admin/instance_document/:name" do + test "return the instance document url", %{conn: conn} do + conn = get(conn, "/api/pleroma/admin/instance_document/instance-panel") + + assert %{"url" => url} = json_response_and_validate_schema(conn, 200) + index = get(build_conn(), url) + response = html_response(index, 200) + assert String.contains?(response, @default_instance_panel) + end + + test "it returns 403 if requested by a non-admin" do + non_admin_user = insert(:user) + token = insert(:oauth_token, user: non_admin_user) + + conn = + build_conn() + |> assign(:user, non_admin_user) + |> assign(:token, token) + |> get("/api/pleroma/admin/instance_document/instance-panel") + + assert json_response(conn, :forbidden) + end + + test "it returns 404 if the instance document with the given name doesn't exist", %{ + conn: conn + } do + conn = get(conn, "/api/pleroma/admin/instance_document/1234") + + assert json_response_and_validate_schema(conn, 404) + end + end + + describe "PATCH /api/pleroma/admin/instance_document/:name" do + test "uploads the instance document", %{conn: conn} do + image = %Plug.Upload{ + content_type: "text/html", + path: Path.absname("test/fixtures/custom_instance_panel.html"), + filename: "custom_instance_panel.html" + } + + conn = + conn + |> put_req_header("content-type", "multipart/form-data") + |> patch("/api/pleroma/admin/instance_document/instance-panel", %{ + "file" => image + }) + + assert %{"url" => url} = json_response_and_validate_schema(conn, 200) + index = get(build_conn(), url) + assert html_response(index, 200) == "

Custom instance panel

" + end + end + + describe "DELETE /api/pleroma/admin/instance_document/:name" do + test "deletes the instance document", %{conn: conn} do + File.mkdir!(@dir <> "/instance/") + File.write!(@dir <> "/instance/panel.html", "Custom instance panel") + + conn_resp = + conn + |> get("/api/pleroma/admin/instance_document/instance-panel") + + assert %{"url" => url} = json_response_and_validate_schema(conn_resp, 200) + index = get(build_conn(), url) + assert html_response(index, 200) == "Custom instance panel" + + conn + |> delete("/api/pleroma/admin/instance_document/instance-panel") + |> json_response_and_validate_schema(200) + + conn_resp = + conn + |> get("/api/pleroma/admin/instance_document/instance-panel") + + assert %{"url" => url} = json_response_and_validate_schema(conn_resp, 200) + index = get(build_conn(), url) + response = html_response(index, 200) + assert String.contains?(response, @default_instance_panel) + end + end +end From f58262c673616661baf9750c216a07d239ae99c3 Mon Sep 17 00:00:00 2001 From: stwf Date: Thu, 17 Sep 2020 09:48:17 -0400 Subject: [PATCH 075/102] add description to changelog --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 75357f05e..a7a4f08ae 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -9,6 +9,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/). - Renamed `:await_up_timeout` in `:connections_pool` namespace to `:connect_timeout`, old name is deprecated. - Renamed `:timeout` in `pools` namespace to `:recv_timeout`, old name is deprecated. +- The `discoverable` field in the `User` struct will now add a NOINDEX metatag to profile pages when false. ### Removed From c711a2b15761db9d2d30035e9fee0783f0bf77b0 Mon Sep 17 00:00:00 2001 From: eugenijm Date: Thu, 17 Sep 2020 16:54:38 +0300 Subject: [PATCH 076/102] Return the file content for `GET /api/pleroma/admin/instance_document/:document_name` --- docs/API/admin_api.md | 12 ++++++------ .../controllers/instance_document_controller.ex | 8 ++++++-- .../admin/instance_document_operation.ex | 9 ++++++++- lib/pleroma/web/instance_document.ex | 2 +- .../instance_document_controller_test.exs | 16 +++++----------- 5 files changed, 26 insertions(+), 21 deletions(-) diff --git a/docs/API/admin_api.md b/docs/API/admin_api.md index eba92dd1f..7992db58f 100644 --- a/docs/API/admin_api.md +++ b/docs/API/admin_api.md @@ -1458,23 +1458,23 @@ Loads json generated from `config/descriptions.exs`. ## `GET /api/pleroma/admin/instance_document/:document_name` -### Gets an instance document +### Get an instance document - Authentication: required - Response: -``` json -{ - "url": "https://example.com/instance/panel.html" -} +Returns the content of the document + +```html +

Instance panel

``` ## `PATCH /api/pleroma/admin/instance_document/:document_name` - Params: - `file` (the file to be uploaded, using multipart form data.) -### Updates an instance document +### Update an instance document - Authentication: required diff --git a/lib/pleroma/web/admin_api/controllers/instance_document_controller.ex b/lib/pleroma/web/admin_api/controllers/instance_document_controller.ex index 2144e44ac..504d9b517 100644 --- a/lib/pleroma/web/admin_api/controllers/instance_document_controller.ex +++ b/lib/pleroma/web/admin_api/controllers/instance_document_controller.ex @@ -5,6 +5,7 @@ defmodule Pleroma.Web.AdminAPI.InstanceDocumentController do use Pleroma.Web, :controller + alias Pleroma.Plugs.InstanceStatic alias Pleroma.Plugs.OAuthScopesPlug alias Pleroma.Web.InstanceDocument @@ -18,8 +19,11 @@ defmodule Pleroma.Web.AdminAPI.InstanceDocumentController do plug(OAuthScopesPlug, %{scopes: ["write"], admin: true} when action in [:update, :delete]) def show(conn, %{name: document_name}) do - with {:ok, url} <- InstanceDocument.get(document_name) do - json(conn, %{"url" => url}) + with {:ok, url} <- InstanceDocument.get(document_name), + {:ok, content} <- File.read(InstanceStatic.file_path(url)) do + conn + |> put_resp_content_type("text/html") + |> send_resp(200, content) end end diff --git a/lib/pleroma/web/api_spec/operations/admin/instance_document_operation.ex b/lib/pleroma/web/api_spec/operations/admin/instance_document_operation.ex index e0eb993fb..a120ff4e8 100644 --- a/lib/pleroma/web/api_spec/operations/admin/instance_document_operation.ex +++ b/lib/pleroma/web/api_spec/operations/admin/instance_document_operation.ex @@ -26,7 +26,7 @@ defmodule Pleroma.Web.ApiSpec.Admin.InstanceDocumentOperation do | Helpers.admin_api_params() ], responses: %{ - 200 => Operation.response("InstanceDocument", "application/json", instance_document()), + 200 => document_content(), 400 => Operation.response("Bad Request", "application/json", ApiError), 403 => Operation.response("Forbidden", "application/json", ApiError), 404 => Operation.response("Not Found", "application/json", ApiError) @@ -105,4 +105,11 @@ defmodule Pleroma.Web.ApiSpec.Admin.InstanceDocumentOperation do } } end + + defp document_content do + Operation.response("InstanceDocumentContent", "text/html", %Schema{ + type: :string, + example: "

Instance panel

" + }) + end end diff --git a/lib/pleroma/web/instance_document.ex b/lib/pleroma/web/instance_document.ex index 969a44e41..df5caebf0 100644 --- a/lib/pleroma/web/instance_document.ex +++ b/lib/pleroma/web/instance_document.ex @@ -14,7 +14,7 @@ defmodule Pleroma.Web.InstanceDocument do @spec get(String.t()) :: {:ok, String.t()} | {:error, atom()} def get(document_name) do case Map.fetch(@instance_documents, document_name) do - {:ok, path} -> {:ok, Path.join(Endpoint.url(), path)} + {:ok, path} -> {:ok, path} _ -> {:error, :not_found} end end diff --git a/test/web/admin_api/controllers/instance_document_controller_test.exs b/test/web/admin_api/controllers/instance_document_controller_test.exs index 60dcc9dff..5f7b042f6 100644 --- a/test/web/admin_api/controllers/instance_document_controller_test.exs +++ b/test/web/admin_api/controllers/instance_document_controller_test.exs @@ -33,10 +33,8 @@ defmodule Pleroma.Web.AdminAPI.InstanceDocumentControllerTest do test "return the instance document url", %{conn: conn} do conn = get(conn, "/api/pleroma/admin/instance_document/instance-panel") - assert %{"url" => url} = json_response_and_validate_schema(conn, 200) - index = get(build_conn(), url) - response = html_response(index, 200) - assert String.contains?(response, @default_instance_panel) + assert content = html_response(conn, 200) + assert String.contains?(content, @default_instance_panel) end test "it returns 403 if requested by a non-admin" do @@ -91,9 +89,7 @@ defmodule Pleroma.Web.AdminAPI.InstanceDocumentControllerTest do conn |> get("/api/pleroma/admin/instance_document/instance-panel") - assert %{"url" => url} = json_response_and_validate_schema(conn_resp, 200) - index = get(build_conn(), url) - assert html_response(index, 200) == "Custom instance panel" + assert html_response(conn_resp, 200) == "Custom instance panel" conn |> delete("/api/pleroma/admin/instance_document/instance-panel") @@ -103,10 +99,8 @@ defmodule Pleroma.Web.AdminAPI.InstanceDocumentControllerTest do conn |> get("/api/pleroma/admin/instance_document/instance-panel") - assert %{"url" => url} = json_response_and_validate_schema(conn_resp, 200) - index = get(build_conn(), url) - response = html_response(index, 200) - assert String.contains?(response, @default_instance_panel) + assert content = html_response(conn_resp, 200) + assert String.contains?(content, @default_instance_panel) end end end From db80b9d630f9fc72ebc269cb24142501116c269a Mon Sep 17 00:00:00 2001 From: rinpatch Date: Thu, 17 Sep 2020 16:13:21 +0300 Subject: [PATCH 077/102] RichMedia: Fix log spam on failures and resetting TTL on cached errors --- lib/pleroma/web/rich_media/parser.ex | 67 +++++++++++++++++++--------- 1 file changed, 46 insertions(+), 21 deletions(-) diff --git a/lib/pleroma/web/rich_media/parser.ex b/lib/pleroma/web/rich_media/parser.ex index 33f6f1fa1..c70d2fdba 100644 --- a/lib/pleroma/web/rich_media/parser.ex +++ b/lib/pleroma/web/rich_media/parser.ex @@ -20,36 +20,61 @@ defmodule Pleroma.Web.RichMedia.Parser do with {:ok, data} <- get_cached_or_parse(url), {:ok, _} <- set_ttl_based_on_image(data, url) do {:ok, data} - else - {:error, {:invalid_metadata, data}} = e -> - Logger.debug(fn -> "Incomplete or invalid metadata for #{url}: #{inspect(data)}" end) - e - - error -> - Logger.error(fn -> "Rich media error for #{url}: #{inspect(error)}" end) - error end end defp get_cached_or_parse(url) do - case Cachex.fetch!(:rich_media_cache, url, fn _ -> {:commit, parse_url(url)} end) do - {:ok, _data} = res -> - res + case Cachex.fetch(:rich_media_cache, url, fn -> + case parse_url(url) do + {:ok, _} = res -> + {:commit, res} - {:error, :body_too_large} = e -> - e + {:error, reason} = e -> + # Unfortunately we have to log errors here, instead of doing that + # along with ttl setting at the bottom. Otherwise we can get log spam + # if more than one process was waiting for the rich media card + # while it was generated. Ideally we would set ttl here as well, + # so we don't override it number_of_waiters_on_generation + # times, but one, obviously, can't set ttl for not-yet-created entry + # and Cachex doesn't support returning ttl from the fetch callback. + log_error(url, reason) + {:commit, e} + end + end) do + {action, res} when action in [:commit, :ok] -> + case res do + {:ok, _data} = res -> + res - {:error, {:content_type, _}} = e -> - e + {:error, reason} = e -> + if action == :commit, do: set_error_ttl(url, reason) + e + end - # The TTL is not set for the errors above, since they are unlikely to change - # with time - {:error, _} = e -> - ttl = Pleroma.Config.get([:rich_media, :failure_backoff], 60_000) - Cachex.expire(:rich_media_cache, url, ttl) - e + {:error, e} -> + {:error, {:cachex_error, e}} end end + + defp set_error_ttl(_url, :body_too_large), do: :ok + defp set_error_ttl(_url, {:content_type, _}), do: :ok + + # The TTL is not set for the errors above, since they are unlikely to change + # with time + + defp set_error_ttl(url, _reason) do + ttl = Pleroma.Config.get([:rich_media, :failure_backoff], 60_000) + Cachex.expire(:rich_media_cache, url, ttl) + :ok + end + + defp log_error(url, {:invalid_metadata, data}) do + Logger.debug(fn -> "Incomplete or invalid metadata for #{url}: #{inspect(data)}" end) + end + + defp log_error(url, reason) do + Logger.warn(fn -> "Rich media error for #{url}: #{inspect(reason)}" end) + end end @doc """ From 7cdbd91d83c02a79c22783ca489ef82e82b31a51 Mon Sep 17 00:00:00 2001 From: Ivan Tashkinov Date: Thu, 17 Sep 2020 17:13:40 +0300 Subject: [PATCH 078/102] [#2497] Configurability of :min_content_length (preview proxy). Refactoring, documentation, tests. --- config/config.exs | 3 +- config/description.exs | 12 +- docs/configuration/cheatsheet.md | 8 + lib/pleroma/helpers/media_helper.ex | 1 + .../web/media_proxy/media_proxy_controller.ex | 90 +++--- test/fixtures/image.gif | Bin 0 -> 1001718 bytes test/fixtures/image.png | Bin 0 -> 104426 bytes .../media_proxy_controller_test.exs | 278 +++++++++++++++++- 8 files changed, 329 insertions(+), 63 deletions(-) create mode 100755 test/fixtures/image.gif create mode 100755 test/fixtures/image.png diff --git a/config/config.exs b/config/config.exs index 2ca2236a9..98c31ef86 100644 --- a/config/config.exs +++ b/config/config.exs @@ -444,7 +444,8 @@ config :pleroma, :media_preview_proxy, enabled: false, thumbnail_max_width: 600, thumbnail_max_height: 600, - image_quality: 85 + image_quality: 85, + min_content_length: 100 * 1024 config :pleroma, :chat, enabled: true diff --git a/config/description.exs b/config/description.exs index 79e3cc259..4a5d5f2ea 100644 --- a/config/description.exs +++ b/config/description.exs @@ -1961,17 +1961,25 @@ config :pleroma, :config_description, [ %{ key: :thumbnail_max_width, type: :integer, - description: "Max width of preview thumbnail." + description: + "Max width of preview thumbnail for images (video preview always has original dimensions)." }, %{ key: :thumbnail_max_height, type: :integer, - description: "Max height of preview thumbnail." + description: + "Max height of preview thumbnail for images (video preview always has original dimensions)." }, %{ key: :image_quality, type: :integer, description: "Quality of the output. Ranges from 0 (min quality) to 100 (max quality)." + }, + %{ + key: :min_content_length, + type: :integer, + description: + "Min content length to perform preview, in bytes. If greater than 0, media smaller in size will be served as is, without thumbnailing." } ] }, diff --git a/docs/configuration/cheatsheet.md b/docs/configuration/cheatsheet.md index 054b8fe43..d7c342383 100644 --- a/docs/configuration/cheatsheet.md +++ b/docs/configuration/cheatsheet.md @@ -314,6 +314,14 @@ This section describe PWA manifest instance-specific values. Currently this opti * `enabled`: Enables purge cache * `provider`: Which one of the [purge cache strategy](#purge-cache-strategy) to use. +## :media_preview_proxy + +* `enabled`: Enables proxying of remote media preview to the instance’s proxy. Requires enabled media proxy (`media_proxy/enabled`). +* `thumbnail_max_width`: Max width of preview thumbnail for images (video preview always has original dimensions). +* `thumbnail_max_height`: Max height of preview thumbnail for images (video preview always has original dimensions). +* `image_quality`: Quality of the output. Ranges from 0 (min quality) to 100 (max quality). +* `min_content_length`: Min content length to perform preview, in bytes. If greater than 0, media smaller in size will be served as is, without thumbnailing. + ### Purge cache strategy #### Pleroma.Web.MediaProxy.Invalidation.Script diff --git a/lib/pleroma/helpers/media_helper.ex b/lib/pleroma/helpers/media_helper.ex index 9b7348ee2..b6f35a24b 100644 --- a/lib/pleroma/helpers/media_helper.ex +++ b/lib/pleroma/helpers/media_helper.ex @@ -58,6 +58,7 @@ defmodule Pleroma.Helpers.MediaHelper do defp prepare_image_resize_args(_), do: {:error, :missing_options} + # Note: video thumbnail is intentionally not resized (always has original dimensions) def video_framegrab(url) do with executable when is_binary(executable) <- System.find_executable("ffmpeg"), {:ok, env} <- HTTP.get(url, [], pool: :media), diff --git a/lib/pleroma/web/media_proxy/media_proxy_controller.ex b/lib/pleroma/web/media_proxy/media_proxy_controller.ex index fe279e964..90651ed9b 100644 --- a/lib/pleroma/web/media_proxy/media_proxy_controller.ex +++ b/lib/pleroma/web/media_proxy/media_proxy_controller.ex @@ -12,8 +12,6 @@ defmodule Pleroma.Web.MediaProxy.MediaProxyController do alias Pleroma.Web.MediaProxy alias Plug.Conn - @min_content_length_for_preview 100 * 1024 - def remote(conn, %{"sig" => sig64, "url" => url64}) do with {_, true} <- {:enabled, MediaProxy.enabled?()}, {:ok, url} <- MediaProxy.decode_url(sig64, url64), @@ -37,7 +35,8 @@ defmodule Pleroma.Web.MediaProxy.MediaProxyController do def preview(%Conn{} = conn, %{"sig" => sig64, "url" => url64}) do with {_, true} <- {:enabled, MediaProxy.preview_enabled?()}, - {:ok, url} <- MediaProxy.decode_url(sig64, url64) do + {:ok, url} <- MediaProxy.decode_url(sig64, url64), + :ok <- MediaProxy.verify_request_path_and_url(conn, url) do handle_preview(conn, url) else {:enabled, false} -> @@ -59,8 +58,25 @@ defmodule Pleroma.Web.MediaProxy.MediaProxyController do content_type = Tesla.get_header(head_response, "content-type") content_length = Tesla.get_header(head_response, "content-length") content_length = content_length && String.to_integer(content_length) + static = conn.params["static"] in ["true", true] - handle_preview(content_type, content_length, conn, media_proxy_url) + cond do + static and content_type == "image/gif" -> + handle_jpeg_preview(conn, media_proxy_url) + + static -> + drop_static_param_and_redirect(conn) + + content_type == "image/gif" -> + redirect(conn, external: media_proxy_url) + + min_content_length_for_preview() > 0 and content_length > 0 and + content_length < min_content_length_for_preview() -> + redirect(conn, external: media_proxy_url) + + true -> + handle_preview(content_type, conn, media_proxy_url) + end else # If HEAD failed, redirecting to media proxy URI doesn't make much sense; returning an error {_, %{status: status}} -> @@ -74,58 +90,27 @@ defmodule Pleroma.Web.MediaProxy.MediaProxyController do end end - defp handle_preview( - "image/gif" = _content_type, - _content_length, - %{params: %{"static" => static}} = conn, - media_proxy_url - ) - when static in ["true", true] do - handle_jpeg_preview(conn, media_proxy_url) - end - - defp handle_preview( - _content_type, - _content_length, - %{params: %{"static" => static}} = conn, - _media_proxy_url - ) - when static in ["true", true] do - uri_without_static_param = UriHelper.modify_uri_params(current_url(conn), %{}, ["static"]) - redirect(conn, external: uri_without_static_param) - end - - defp handle_preview("image/gif" = _content_type, _content_length, conn, media_proxy_url) do - redirect(conn, external: media_proxy_url) - end - - defp handle_preview("image/" <> _ = _content_type, content_length, conn, media_proxy_url) - when is_integer(content_length) and content_length > 0 and - content_length < @min_content_length_for_preview do - redirect(conn, external: media_proxy_url) - end - - defp handle_preview("image/png" <> _ = _content_type, _content_length, conn, media_proxy_url) do + defp handle_preview("image/png" <> _ = _content_type, conn, media_proxy_url) do handle_png_preview(conn, media_proxy_url) end - defp handle_preview("image/" <> _ = _content_type, _content_length, conn, media_proxy_url) do + defp handle_preview("image/" <> _ = _content_type, conn, media_proxy_url) do handle_jpeg_preview(conn, media_proxy_url) end - defp handle_preview("video/" <> _ = _content_type, _content_length, conn, media_proxy_url) do + defp handle_preview("video/" <> _ = _content_type, conn, media_proxy_url) do handle_video_preview(conn, media_proxy_url) end - defp handle_preview(_unsupported_content_type, _content_length, conn, media_proxy_url) do + defp handle_preview(_unsupported_content_type, conn, media_proxy_url) do fallback_on_preview_error(conn, media_proxy_url) end defp handle_png_preview(conn, media_proxy_url) do quality = Config.get!([:media_preview_proxy, :image_quality]) + {thumbnail_max_width, thumbnail_max_height} = thumbnail_max_dimensions() - with {thumbnail_max_width, thumbnail_max_height} <- thumbnail_max_dimensions(), - {:ok, thumbnail_binary} <- + with {:ok, thumbnail_binary} <- MediaHelper.image_resize( media_proxy_url, %{ @@ -146,9 +131,9 @@ defmodule Pleroma.Web.MediaProxy.MediaProxyController do defp handle_jpeg_preview(conn, media_proxy_url) do quality = Config.get!([:media_preview_proxy, :image_quality]) + {thumbnail_max_width, thumbnail_max_height} = thumbnail_max_dimensions() - with {thumbnail_max_width, thumbnail_max_height} <- thumbnail_max_dimensions(), - {:ok, thumbnail_binary} <- + with {:ok, thumbnail_binary} <- MediaHelper.image_resize( media_proxy_url, %{max_width: thumbnail_max_width, max_height: thumbnail_max_height, quality: quality} @@ -174,6 +159,15 @@ defmodule Pleroma.Web.MediaProxy.MediaProxyController do end end + defp drop_static_param_and_redirect(conn) do + uri_without_static_param = + conn + |> current_url() + |> UriHelper.modify_uri_params(%{}, ["static"]) + + redirect(conn, external: uri_without_static_param) + end + defp fallback_on_preview_error(conn, media_proxy_url) do redirect(conn, external: media_proxy_url) end @@ -189,7 +183,7 @@ defmodule Pleroma.Web.MediaProxy.MediaProxyController do end defp thumbnail_max_dimensions do - config = Config.get([:media_preview_proxy], []) + config = media_preview_proxy_config() thumbnail_max_width = Keyword.fetch!(config, :thumbnail_max_width) thumbnail_max_height = Keyword.fetch!(config, :thumbnail_max_height) @@ -197,6 +191,14 @@ defmodule Pleroma.Web.MediaProxy.MediaProxyController do {thumbnail_max_width, thumbnail_max_height} end + defp min_content_length_for_preview do + Keyword.get(media_preview_proxy_config(), :min_content_length, 0) + end + + defp media_preview_proxy_config do + Config.get!([:media_preview_proxy]) + end + defp media_proxy_opts do Config.get([:media_proxy, :proxy_opts], []) end diff --git a/test/fixtures/image.gif b/test/fixtures/image.gif new file mode 100755 index 0000000000000000000000000000000000000000..9df64778b72095084f03e1dcb7b57273e58ce8db GIT binary patch literal 1001718 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%0D1hM&QC7wz5c%f38fi7Bwvmy8~`sEai0w+ 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௣v1hJBPF5c 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 z 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�QG&wD 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�ByV>e2S-`%F--51{ytKS&C zO`GlJ3N3ta{08oM|I|kLfb;vSJFzRjvOVn9TKz z%a?u1XfB-Nd4Qug44~2LWIei;Jd$UG0PzYx7<{+8%+6kADo9^qawkaC;Dfc4(y zYW-9g;P|Lo`5ee2=x{xkPs{BhanSc=`P!+Vs`T0Qc=hS`lch10XNcn8saaV=U6Or6 z2>yuO^46cwj=ksGY${}rA6>nx%J$vj#ACw0g`-x4 z?yy!lwD!Y+nfJEH2B?3>Drv`(nwgW=72KLgMHNqynznp$$Yi*`1~D};-PjqBys?IP zbHY?{B*t9d6lO`IS-?c$H40@}x%X%3?bj|xZfptHS$VW8h;6Zg!p|Nk^)~4O#_I`Y zump|)D*4F4_T(etpPAxIN-KU?V5zOm*cP%|=d#%s%nny_^oxf~&?bw?zdz0~`eGP1 z2w=;6#;28t^|ybm=qBed%+c|lhZwO{PTqcvyXvFWNKoQrc2xtAjZU4PbZ9p*K}bbA zG%;uG^F3M$^ur&{Kh@*7{B*gC(gIbs--vAlraIDJEHYXG1!|%}wg*4<$`~*0fh`qG zdABCxxIINR>H4F^RzV_(!`!^(eRPf@d9f@F>MWM(^t>2RUI28KyUp?jC~OuBaUK;1 zz1uQ3q4i2oR)tomLwBFQsb(&@^F=Fg)``ACm)#P`>^aQ8fr3WSJ+b6LIP(aE9xz#y z%0C^Ks!^9iffSRY1@Y0|x!F}XEpZ$W&W82i1sFxcRLg)2$9ZyzIXXSCpR!A#JFA-? zd7#T?bQan}%(muiB>awXaI>LsB#IgbB&&(06b1Zo<8EXxlk?7N3TFVs)afLAA`iH=eG?rJ@16ef8L_{=?dO>3s7@U<=AEp~zK05|8HP=kyLvm1 zoAYbi@$0y~cb|5n&lwU=99GEFkoO(&Oy7MJr73<0f~x>++v|)>0hE@*Cp$;dj*0e^ zwc2M3ODbdE&R8C$n+n>`p6@bB8HR? zOHYSQXHaL?TJMTNxhzLV86HPV9VeK)kFj=-b-t;4$9&s^AHaMF;#rN3ztnhw6}V3r zA}ZjAISomssP%z#&6=#J?-}S{)lZ_)AHP{-8kIOlk57sLn2|#uDl#1wp>eEJmd?t- zkwbQ!O`JDS0vRo7_R*UeOw^P?`Qg{RQ5Fy>3<*PUA?Sc! z*ixgOa^?Qz;+NcYk_`ghm9OkFvn;w;_bIRCKcOjePdl2X%61Jg0ypy>hKlY(7vQA2 zszE!J201Q}_J&P(b$XX5h7$_p3{&Y1MaXlSqEl@x=K!unj?HT9S;NAy;$E^qKp_jCbrUa8F(Lwiwt7o*=;bAu?QglFJT-F^6Z(FZVei~I8Zo|w(tr0K4`#zH} zc>9H)O>;T@4KGs>gk=%g7G^>pp2fzgN{KoCZ9f1BA`{n)G9U6iBDxK(WXvhB#eg{neBKXA9d7W?hJm{A*lj<;r;+vNFly%44)8cm?C z0Kvw^nO55XE(c#M^19>pPrsk`{Azot=0)!qy*ijzg$MrNc=RWk7xG|oNpMfO^z@%f z+$}n6qbZ8|bE27+1~vK};6xN0^C&3!>lMHMwQ)VLRgs0h% z&uIqffHBF}=4$dAw9ydZ^V4`LUaT<@Mfd-Ta1pUC`0`~K>7My)CXtbH6`!pp1SMc7 z-xji{4BaB}@r?SyrhhB)jm_-QkugVQ#WjYivyCJSz!ZhCGYfFFz#!y(f%SX9uOGR7 ze6*mzZVx`B?s;&_U6Yb9^!uOxpE7mo#eIwZZ?DqQv*sivSPDOd3iRqGP0`*&`I9=# ze9a0hgfCh`NH1 zHdvH<;uggXC+!$*L)&SW9P$e#64y>J<^@iY1~SyQ9_oA;ExQE>JO2thnR$Qst1L+A zcc5*Xv=Ks7jpLh2bz%mWw63Gk9d<$gR!HQ7pZfVnbqQmQZKP(# zH?jOgCLCt&pa1?{nb*_NRK%Gwb#Ck})7r`|6?jbFT4-E!3KCOl`lGSvpHa= zVb98&`rH2jnGMHIce+sJVt?JLPc43sx3W0?*J0Fj&diHtDFDLv01OxYEN^|P<>XW^ zA4%T4IF5>;{X0HjJ{nkol#o70{5M3arNQm2A-n+~dlt+^J1^%z=lD*|Ao3h$p$+&)uA?m!(WifIC34 zLl;3$2|;VgkURBU84Cszqkbler}C_>>X(s1YRO zrtS&HSY6;SDCZcEe`X@6$qVUBHjquxZ87*QJ0`~wEux_95iN?r-qO3~&G%GbY|Drg zi!{BxH-x4BZIhWYf;@d~PVB@W!;@TLUI~GjMKQwQo{@;JWK;f(F8pquKeH{u*l}31 zJ+VK_)fxFAL#7a6ODxqMfNh7n*SxySQ$h!=*597k+v2J-U;i?CabM`!=JD=qba}kO%vU6s>mJ0bJBe=)# zh>mhrc|iV@_m=<>(18&!|M_HezB+5_h;XoxHMD_M#RSF00L|ZrRrN)=koeRTMbimL zd}jdC-JigpzwhwrPgFhyBY(ntF(5$zA3t#UW=>nDYs9_7-0kJ`h(hzr7y0s+QkFo< zMO6DUY0dLcyv~~rk$!;L5Dbq(3XY&{{$!GY$>^{d!m?#PSO!7D+YL+;Kal*-9N#ZL zAX#tMZORwb3vN^&Qy+xUlMYE8YCqOhir98Nbc&`rRsdUKZ#hPD6y1!XrC21jqDd4! z0sg}>;88RinA0cf48DYqH}b%rk&P6CAYv>Fr@)O(+Nsy^lEyQcugdBTze;P1)}NM(o?Fbcv-!#+zgIifV;$e87V3-Bnd zBw8Vh8c%?W4$&!gRym_~)yw3j&XEcK&I|m1rx;FjiVJ|AFslD|ij`ZIfbBcmqt56rCu6?6#-KdfnQd^hm785aM1KhoSHxm_k0*6yfD zL+wCN>x_I*sXY+M6MFIcvFl!@AiOv@oawn?A=o=2B$Zb1URAaLnI#OohIBVVwzW9NO0gm0L}LXmKoGZ;LDMggtJ{yKBT(v0~my<-WvFv;RJ@-qD- z4BhJm^cLq?pQ_EsV1-R({*SBsZffHF1Ad=Q3MKSV4ZTb6#n3y_I~Wk8_bP~n-XT@W z_}bz4g*le@*V#yx;M58p%+M~XFl?GGq*MdUYW?V#SI85%T3F$|?*yQok~?2a>Hbp; zwdriQK42zT`e?&!){WZwcg*v1Hr-TgvIBP@*&|Wf-{#1@?_{(2ZSFs4>}uk@1U8S< zpwh8qY3DzdE?zS8H5vC7CFgHcc}gs#6?u0gGFxm|oLuv*}lFrB2R57k=Z5LUCPBT67cN7XP4%C_?O)kD@f9U$uh9X<`316V$2 z&V5nwwpH_hv-a^QFV|Z8r&q;^(M2m%1OrC&zi~ks#xypm!Ja=)C5Id-$^K6zHj+6` znyHeEyD~}G@k^flVUv9M8r11Yt(EYluoiHdtu-GQ_AF5iOv9Fhs5}4BmNS$u3LPbv$rxLy<-~Ut1+(>4mM6LEN zfx-kcFEu8yRgpp9xI%=49zSOJjsuTij4GC(k&(P!GSbJ>TAt{z~;Wj!Vontco- z%B8g@h7#%ka(p(TJqQZTzm-$NlE7~Cu_cB0WP=`Dda4*;QKFT5yq4{MX-VbAB&e*>2jq`O-!hveDVK~@hLFS7rP~|2z`$Re#_$ZF zl2NKmN@AuU%QkJzgYh2?-9V_jG%(p@T$b>J#lk;CM5WmdP&kWc&K1%}H|y z14E%5S`jIrvqgQ+F-nHuqF!|I%77+T53c}Zt==%hW&)VcYW1(QVo6d+DtJSH$m0=^V zk0p;Eq739NeNT*!gDRw!j7oS;+?urW$r>=d>RK?uGMXmXtX5z0-ul`>Zi5R4@bN z(ka_>%Pp~(jv2)amvWTzv?Y5KuWuvD=3MsKVKlql;8-e+xbPc>?Gzv{`9QX;z+JUL zxp^~ncxy}L?X#sfgE^zpMn6z*5{LDM=A%r!0{7RLGxP3^g%-s~B~rNj_Vs<{jybYq zJdiFb0~OS3F+MBC3?XKGrTT5oZ+;greRmjwmMzx>s$%_M$(W@vy%;GEWV&6V#UbO} zf>+(MKZJGZ{Vcx9I^uTeFRj`m5HAX4KP}#|3$vb;l67r_3hQajDK9=0E;WBZ7u0VI z7gQAYs_`^8{B(k08$2pk1kzqy^<}90+p4I$uIiWYvm#p^+O-=zHH`(pD7ZptDkH5K zi}Pc9fP5g01h&Buh@y~E6^pxP&(~|52D)F5$^K~K6$s#Lt+KCDs;rXKa4?>INZ-`> zcV_%_SsV4e_JhLJ(Ixv5383Z{q35J2;9RV9gq8jzi1`x|%@GsaILci^s^-o0-|wNA!L z|6;x?Jd$=g+M>cpAbDy}AS`s5Y`Gm8N|U{196}_b!uQQXelOO~>@-{p=3x1_@_bc{ z){DiRF~4fD+hWf&XpyS%}zgg5862l53;=9 ze)q?*$i2bV-b~QViO;&152V7 z0rj1Y0vo|W=q(}D(r)%5v?Bn=uH@h35R#Upl}4_>duo^~Z0Wbuf3_k2ap!z>g#XpT z0YUkHGqyX+njYQOVLP|j+m56w>oUJNm&X?Qg3xY;Y1+Ogmlw*9_sRjlZ>Bmh%>hR7 zx5NVgxT_!u)9EjJgED9n+)kJZdQD>v$pJPT6rd_mAYn(HWV{&Gh|mJCBLFe&Ch1=? zU@=lKXe(!_C&%v_Q7U=26!LLw*#9B(ktW(EfZuvowdJH^#7Pk3Jf8^(fYEW}MCy2A zVf5JBRpz@gUVplDZ2&F4@4ffh1J9AOOk0S5I|$fqAZ(GiH+cCp()UHF=W?eH{jkn& z7!J+geO;X7RXc0nK$Wb6!5>`pXR>0Ot%0!Y01rr@Epb(~|0@j70horrmi%~$tS^XF z+x_o6hlaL2_iy;oiLYM2|Hp^5>2Y-;6D#N)ibc1tM{^4W5}XrCx&hR}$7|ufA6ObD z9kcyPMz&Mnf&idC4zz{^u>lyFYak!z*b>QJ=mJJnPYymRqvi->Bl>IIJpU7-jfK=5 zOTBgf$4A_mKnf*dp%#e;q_^c&bTz}GP&=>4_qSS+q6AR;bzq=KJ*^=;Ar$l>&_6BA z4LKJbs!gw@4S{Qe;MROdEB0LKr6-TQqMx9%9|_O{Kx|l8Su)3U?2?3blBG(26{mqxkA@PbT-;Q_Q^!$7_cy1;a>LZZgvXJ#$Fmr6Luk_|}C z2HSvF^`xSjnCR*j7#XNqA84SKq?CTKKTNt8tS%M+fH>rgXZZmGO)$R9s4Rlqj!HJEL_)Rc*WNcYL+I$$p1YwZ1LPT3D`t^*t5tQ`apJw zgnm4GX}(B9QCoIaUR9N1xR?Xp!h=CfzYpXEy8P(p0H7Q^cAh{q`wlpjH?aZ$t&RRb zY}EnS>`*h5lPIbXi)pXX9!&2m#vE&qBvpew%1W7H7zMD7!pSOAnJ*Wi(c35zTHrlC>L?Ug zrI6~0GZ9EPY3_8cmHkTYRO}#|vinMIr_pjp{!9TC&e_7}mW)obp!^>j`3GUGgEt%uMV1CP|0N>h!A%7!JWS4!e zo?RB+D7q%JJsSZ@LMdz0w*%VMO5X94*~>eVS^QyT3rHQYGjf!sDh^poK&T|rmXW+h zOT5LNx?ZyfRTTeMh5|M$T{$np+wRaj2blKhn*R4+1FyhqBnrS9BldM@zraH6}RKA@DkY4M@O}OqCkp>wdEiiuzw=Nznmg1Eg$kpDf;1rQU2a5 zEE0#h>->#1OkGfEI*V4TRL>PcbyhUw&Inf>4xb*u;i;jo_MT{%1^NgCW)=Xokf`XA zmWs5fZe_$D>yZ6u>HPNS{K!hcJF8G7#i(v)C5UglgNR_FfE~Na! zyX~=e3=X6qmpYQ)=YHS4NH<(i>sUt+MZZ^`NrjJfw=`Z=JNTVFjS?_9-4>)q@>0-A zQQMhjN=~?rxP6!mJMW}q+?uAjAkf1*Chc|MO*kf&L)kzbrfM8&izMm018%1RP%8vz zhrc)>Ba7tkp9BnLWiP`sSFc1#J7!H|nYQ-4uh?CzG`H&I5^P3fjCxYs>PszDZfoKT ze%D8BjyD!lXhLyzDI_?B(BGeAv>T>$1d&R^O#3Dw*QnQ}zb3jaAw#vT_XyrmxU3?4 z9v+{_PIA@k;aGhgqUb5nDwyM)nR7{?=pU>=6_`d9X3Caij{o;1e=8em6L2tbwj-}3KFmZpN#s7Mn7Hy-_=qc4RvMobebMNvt> zxsa%H7HXU2a7F5{xk))}cg5A7W16Kv_{agLAWRJ4fQd(Fij^3u;_t@yKKdcVKL=o7 zOsvlC<@hVKzl98xyjgAozf-*`D+r|hmqts_Eo`nn6@tl4{=TfurrhF*Q146;V=V;goFf~JE7{*Hj=fCxe-qe<@ z-r#%LQIA%<{%}&fcwA?}vpB?J)7hT4Wk`aXOKFBkmp7MW%ub>ffYz4;SM%}m#RDbP z>wdfocM=JS)z28>=&g4!l( z=mIoj^AdJxedio^=ox=>gsM3k6e=M9tnB^0K4c{V&?3MfRh03X@(VrtT+1LNbhJm6 zZuLm#$^}mkmrH@FmkXGTmP;t9{R#I4(N^QfMs*4-{?L6BY`Aw8Q5iaTF9dQzEVD0E@yqd1&I?+p#DOKxyVH6{Zn35!}nS6foNA znX*jt*ZwiQx@2eH)Q8r7izaxizFi9rb(^v@O{D?YzkVnj!wJH$HbO7Zbiu!p&tp_S z)7Qu(%x*Z0s`IS&oFzgA;1F(_+XULu3&@)QCnnHDQ^&yd@6NgT0Xl!6UIWk#PdIty zrIcHPv&$RR?AWd~-&>obwj3ky7b^ukt0iu$HdrX}9xdjL*OwjpPAatNFVq?LR)Dfx z;QjRK>xrR(F>?qhZt|Z7c((2cNH5bBLzTKDO z`!W!%=P3;_47}SRNq%C#H!d7?&VSpNZX?!I=B(B)Qz&DV15DvsZ{taCk9$>HmW1>M z#|Af=*{61|Rs+2X+pZV-iII?L12FC_sJr{>YFXHelXC7IAPWgrvH3}!_X15{uCFw4 z)cJTnhg#2FkXOBHUQ18K&~)KZ7U z9=OFiTE6!={|g{PtM6sn;qki-KPue08h)gOd`^HEk!Y!auUDy%quU3K)the<5Wn3$ z&i|-s0%-iPP~;sN@dwZq?gaKbuei=X!m)?zgTBI-W+FU&yQyEUUN{~U+64-uEAB_- zwI8NKn{PFt?pn~(t)<6X|J|i*mT!Lg&I3=QfQbOaQVBBZ{tw>sH;1rOvA24qUG#Yb z+F~qH=k4iD>S^U2wyHZnGAWxt{#1&PsWnu+WJc;51vGe@zQuwaX z#{Tie=T8*~nidKY3ITv3Ntb805b||1 zo~iQVgV!y7TM%0HuD~iiA=Y1vLdYsnhpUS3w^!)w)q_79U7qgg*<~)2;G#i=P3Q4c zfy>8NbcWFkJi2T8n`-^1$NWHUjEwp~T(w>%eOuU0F~{4yoBeU)@7U~GW_Y+hTwxUh zvDMo-TK%QDhg&p{VT() z5EbbC^bhlv|MlGEY*AEKF1%)#P4&5qJ~UV(8b& z7w5-9N2;U1Y!zWf$fmAasJ3&d#ymNRW-zA+{#otk45#Y#gVitg-mE6RWLySY@{_Cl zrrsU@E}!| z+P0&QF&wH5)98=uUd7@UlbTYXu1hFhfo7p~Jm$-^d@~N5&^Ez!z3xXIUEkV!iD1k3 zpQ3DiAbQMvuDSmKr|nmxwmF{7c*N@(j~F&?6;`%|#~1Q1tTDb3@18$C$h_Q~tQnfa$Ue$ftt`>|>pXvK z#AxN_Bkf#xPN}U|zbb;r40igAO6%^&qWcGJU*`1K>Arf8-VKud_U!VNsmJQJ3BRZ3 z1;~p3om_L=4tVoZ5XWj?oY-cApo@98&hsk+*1zkAx>ZYtN;t|QtLIG;Uv%Vs*O5<> z`9l}5(08APfu`|q)D#}np!<$3ZP1n#ov0nob(GTGsh{D=+Dw2na~>hyDrx-+l7!3{OKB0}7O~ zj{^Dz3YIRP3c-2`l-1%qL5HIHGb-kMv}YVmoK_;*CW7cxja`r@9zd@aUc!OoV`_Xo zp*&(Gf#l}pVTJ3$mY=(ISx;ecHq!F|*-!}nk*sVAAn~PeA#DSgz8H;koAG3W%Avi3 zGfmyCt+I?pEA=j~fat`-3nnE+(%|Gr-qsfhz@tPaZrN-b79;HP()*F4j9K^n0!jB< z*H9IqP&nzEfRlW^_TwLt6hej`ws6;DOU%3(mvSFA>=P;aEji~ORg&JRTCc_+ZC@rt zJMQd*7{hs%^&KDp2(_%68T|2p>Gd#-iwHv1$e0>JOltM`?ez0YiJY-X3<{RRw0UY^ zR?#RRJYL)A8X;MLibJyZk_t#iFoYx?8BwNdoK?O+cK3Vq`}$QY48i_}78b?00`Lqy z$k>qFW)vJS5{f=TH$eHDu2NrtVStNW!!D5Ve-v~enJ^}-1VY9pv+#1ID5rP;ua%9m zi+^GqF1Ko_Qsj4fnYBEZ*7blPmcq_P0!R@(o_d`odQ_RfL~#$GDxpEPexa)iJ9=cW zC?VtyYU3>@wOh!Mz?c`m0WHSUqe+3{jO5ivjO{{4pXD5*}@1GLFFM>R9kem$YU?L$M~No;@#iX(#m9MmE_w?AuPJHf)C zSLr`*|Evoi6KXqt4yRoEp+OLo`f{AbVd;!LI|Tv>VL1tBuAJ+!(`nbOp-9U_KGWVw zt}mgX^6Emu0l#wc)d+^Sxc0;tdO*q0Kp-6XNUFKFiq&5}ubkyAGNrdOyfma}Ip+f> zGxple8&0_Yhx@+$|K+~_{{OjeFoJMIB^%JC8K%)5Q-=|78nkZK|I2;r83CY^A~N~3 z8|_Tn1p?gKOB>T2^|SYJ>`bTMpwl2hz3jNy_Ea+tl~99!m~z>M*UgR{?oa}bnuw7d ztkK>9rc>%A{B*|nY?{}*L*Mc1F`f|I`effXkbn_D8pcQ*t8Vpn ze|-y8=EAshKHZldRlQrb{p&k3Qz&Fqj9UmsfCA%cQ<_Wq-0Xq-OUKPC>%gG@h)?Y=nmwHYs}o8^a7w~ z&J$JP_3Wp66Kt_zB!UiitS2E6Ob6eukB!qI7~C?w{eC#rL|nC$=34B@IEeeEjNVF3`qwMtMtAjBx+6>Dnt@AY@N@gh zpx$w3iB`x4&a$m#?b80Ba2#rkzu&%W0 zXavP3--$_Tp_4qt5g7qKjxRWCc-AWIaDq}vk`}S_d43*lb=fs z1)dm1;;`RA2Au;qNa(2f+yl)VG;9NzKc|b)SwG*@!w}?Yk2`3tZjNypeb*ehD0Iwt zKh?zYjO-RixE)?{O`$?yu0KdtPvc@K`j2bh#z`Q%s#|~S0va?UXvn7c;m>T4+o2du zIOOLRN`UtCD;Rbes^*l~!_>=Zr2Fu1`YcK(zp7VEO`&Hjpx&=ni1e*mke5<;Y5I^4K{WC22Xz7=#`ell2}@wOZi5o zPqmNjKQBF!+D34f1Le!|mTK6T3*e~-MJe9>6pr&>S5bjfI++Avv$uqyM9=o@>12T& zxu2!!VIs=MXLjW#k(T9yiH}}zUw1kCwam_MK>)YB!?9sB zFCkx-EO3cHruN?mowqaJ6&0Z1Q2~xE0DMY*P>ac#(+tYUzI{S)|Au_?>dW>Yy@1Wn zT9*P|E)1gEYC4;7)}Pi^Zd}b6u;vQ-6>B8CW#8R>XcE%8@N66QbAY(SAHHh1@H?;c z*^57rNNowX8?f$Yu+)cycW}-AE!i$Zo%+W&)L-bjqoY3PKgI)b+enww5zH%cn)1vx zef;St7Iw_zRlj=m*2vK5y?b_cChCO?Kg*7S+MqxBu6^u^dL{=8wTPG+1WqzK13KR& zicCV$dZI8JoQSoougLJh$ux(X^i=>Z9rbzf(Rof-_LDWUnGxv;x4N)gZ7#Rsn%EBD zWqkg6{bKD);`syJYHm11$H(KrVy4B+VbM=Xk7DDSLbfL#ZeJ-dX3QYH_zL}$>qGON zDZh8(#mgsmvwO9gJ->IRo!yYgHS-~_aDZZ8eQ!CP`EccHijiaWzRv?Ov~J(pobZWs z*2^;DVI%QdCWEk&u7RsK6>dR3fr?yV4&?ed>#41gL_zHrlZ ztGr)^E2S(($q}n@(5`!P7J!S_7VSUj>br+9JNh;Iv^DctfD5OY@4#obS)h-R>kdEm zXLH2)N|F_5;Td zM8^#fU6Jl{&oFc~9j*5brXd1tEsWDPyxmHHw1y_KOhFon$R=_kbrKjtj@zmW61GSG zE{X4+jGWmuyX<{O8-M4t+sr@h77y-<&Cx9mCPDiQxh)j=DBLm%3V(==#U+TU8L2Lrc(lqM*12Ear zr%oXxgAhl9uL3~PVrkpC>;bq?tSC2(m|i`cd?(h&qrfzE1r0!h)F==yG{W=tq8Aym=$mUohHSu5 zCX@n>Ul)2WoGeqArBZlzC8fzSZ@(e)BZljfuK_%mV& z&i6oGKd8_{LtFPN@~EK4ze)t0Xnj@hH)WPyyIEL8h%3XycXh|Lq7k_tBhr*&G=E+l zYmA$0yvBqFJCUmxVq<21na$q}ATt;LNP{ms!EG(&ov>hgELiYjMGOT z(KXm7+48$LiIwvlmA%O_Kg$(4gX|jJ2U0=y7tg;W4ssb^tL=Y34-dN$ioEd03!QoV z8*AG#?^mrASU(5tmLb7$j~t&v9>&K1j{&C?@ihc(2q$re)?N7Ha#&DMOw4ATe+aU^ z@zgzA$gDgCK2f2|?+*b zjrEpodvUct_8VUVn|>JQTAQHCMH6>ViWpX%BfIXo>GcM4F#cx%NO|%sd%_~J;`MJYm?6NP1g<)I_|K#9u7CUg zm~j$J>=R5l9{JJaelcflGsmOy^Pa>CDlJvGOk+BT4IaaXiEO2&Tvknr{uv~Lzi^+y zQoAH*d`w6a`PrLCvyWn(SX|F&)cMzx`2D2^e2KF^pI)vHEM{jzSe5K^c>4Es1-f`R zk%0oA;C^^y0}&Q#tOjtNMwAL3Y6Y9$ku+jhcIHo(IBP)y9zsl3V{@q{c~dzcRyoogiUjjD=Hc56n;^Au9jx$7AC9JL7xx@jrTZymD?M?+vKfgV z0{0DRb`Pn(sR}mibrPi@n#mW7!ARCEHZDnqTTo+bqS-39b9eH+u;d|BKZjZ9xXZ+t z3ynPmVTDIzp+|%zM=tE~X3LSeGh}oNtdBUdQQ1gE4c#h1D1JmHwEP+Cn`mq3@krR<) zp_r{d*#Prh7-25#F2^p+j^55H*&QuRhPj zRJOl&ZtJk*xuD4(P)i<=Q1kumxqyKjQul4t)X8)sStj+ZayzFnOuIiggs{}q$ki2Z@lYT&Cl$vMxyNzDMR;8hJNE{gZFTL#1++o9g!G-U*Pn)q1_S}O7(dtvO@+%rK`OlyZgwf ze#_eIR+wPmNP@(w?plH1G$Li=p}Q)ni9OO7!*yg_`%~=xdHE`c@%4HaBI;+5+T?7r z+YP(DwMSw1+BaK`tFzDn8jCogW(jdqYx>jR4it=+HBkVH$A=--taxE`Z}0uxGZ0cH0B z%=f5BVLPqo$;FRaJ8X1BA5~O?A`#{(iAOvh30Hnx4-;|5mV$mjuhOXQ> zTU@KdlWp$c7v|(8Oe<8M2o}ntTd}0S^pfs9apUrN@S97UDA~)%a83FP!JdewQ@#w_ z{b^VC0qOCoL2%g8HcUoafE(4F| zP_?g+*%WZ)+QH@i1Mstwg{cFa$tU4}Pd_*iPek5B^DcY~@E^&vRN>E~dGE1NP~|f2 zK#Q6Im2z-cdBv0T7}-N_x5GE?{Y@74Rn9FT^GAo!sClnRTbJ4luLZ`V*phwuzM+;!7oXz>{dm71_9Zn|*k?+%gN z{#a&YS$*c-(86QtW}#cHc;yJg?CIM8*yWi?;mY0PMo2y}ZWESU5I-A{e@yvj*05}10{ow2?V zkuce4qlaoRYqhKyE0(@iXSQcDeozJW7|#>R#!7-NxbGUFx#dHbp0G_2$>q%#xBi>| zeHr*P^|jF{v?XIZ&3uz$P3*bIAGSF(S~CW%)`(gakEP{Czx>@5@TSqVPpfH~?}%eK z^ksExct)?BzI`*ly=~E_;&TD{hwNXrc$jL93ZzV{HMaRp%q$ue{GM_6O*7pqP&xi1 z_F-|3jyvzU@w08_#d=G2uL3@S>^DpiOLsp$kFua`KOV2q?2B%7{qqZPwDCy_WU7J9Lqpyac>yE&taT#1qjyJwu(K-uE zOt-PH8fCaM5|WSLwvLtZzHZw!G)T7$auBY%SjMalwIep1hptl~BhO zTwQ)-PIPFrWGM}K3a`EPS4V8cqtaFhIYcbU%(>CszaUCqModb6)F0`e2yIvNSVvyS z=|BOtvJvsNDV}rGX5E0uTp zly^Ff@jIC%2z~ba*r`W)%pw)V3wchOR!S2-QsZ7lmy%o9o{M$Qe{;s%H!5!5j2zo4 zn&~-Iapd>VcJg?LaTC6g_|3^wH7PhX`Kw?LE{VRj5V#)H+v*S0t9kB^+!@eew`f`1 ztO$7AM}Kw`P)aV)<;9adIU_Kx>N>$pXJw2jQRVu7LY~J!@}#CtbH&!}#&2MQwAwFlLvMvMQA- z#w0Vs-atNA|9<)F{hc8pS9biW`tOp(ZNE&9{VHuT9qq zd#_A$-d?z(Dq|$gDF@Rx6W}hmX>c7Qz$fQCrKhU0a(VDUPRK5nhR=UYug;_0p_TtG zU82>tyWPY@=8|H2d75m&^w274;<|;jXO<+ z#~F(1ZNGx4W*Eg7l(+~Tl`^WKH4tV@n!jl8I=Gi9w*F-%{bCfo^W!Kd$?Q2xO5?mI zx3io;aD#O@Q~KrT2M^r(llUL2y_ByzRtd()a;~0A?AqH16meM9<}6m3ajZLfdD5N} zl=TI?gHkx$AH9;^0n_2zZ`K+e?F!rM&|CFK@Pu=IYdkFWx0R5A)@r|m4+kXkcbi;3 zainYc&uPnX+Ie~4#{=vvF@tl0l$NgpYgHZ)L-!ri+GD>M`j_oojy=v*eh%kLNBvY)FN4zjyfqP?nAp)n`Uln&kTPQQxry`YvUEr9u}-BOPE?xQSV5>-B z{8eOaF{<~UYMYgkRK~gR5{iA%p`LYBPU-qL)nTZ(B^44XK`~=K48%9qu>#d4WC%na@ZwcHQfm6O#%iX8=lFM*AAxtR6_U9SPB(T#&HUf{OItGz+bV## zIHo8W2K5NT+ReXTAVSX{@jaXzpW`V}^7Mtk0T1=Ju~^`%nP z)P5f{12JFHoB6}{R5K3bu8l!9HkArKwAM$*u>(<8o?XhKGe>^Blz(6TfaY;ea|-aw7d)_q&fq z`3h=lVR;dfZrT!{_K5uc5R1N^!N$V(53$exE9-i~r%G+Ne0YwH?#$N|-tbC{oTI92RY&FN{!t0{W5tz;e7{b*@Y?$exlH_f zkAeF-$|+&GU$?}CZEwycSO558KyxrV{|;K-ov^9^4`ZHs(m4H042Hm@VCphM1;F1f zK0dW9ETI+{^_}ZjAz(+wI{m|*JZ(=c@8m)6=Ds?8aPU3WP!$K6q(sGOyYBa=u}G{hAun58Oo z;$R~neM<<&D5;t_s@geO;5!mmO zbs5c(TQH|D_yBrgm0mL&MX^kHNKRC%7^rDvozwXaUW+jJ_-?8$jCtsLpLCBws1x4} z7bR0`yMZN2$@Z|3Wx~msLYE8tL zA;5NA&k7x=q8Uq|f!>spTWhqwnK8*Vb8@{>%;jMUS@-~fSf6^R>Y3Q$HQFXP@pvq$ ziUPX$XFoFq=qma`d>VvvHPwtX=#G4G?!Q5L-(mXhvq*oSUbLU_U`mlQcG5bO*>-`q zDzJF{MOnsNj_YZzi(I;%Y(^5ir6yb9W_&|}UhyrB^cR1I!hN3zj?!8pSXsc*1ZML@ ztW9-2+PoJ7cunt3Al%-I+vN@pNuqlPMbt zv{zv-OT!2w=}x%sgr-Y`r{63yPF69D=;=&I=8i9twlzV&kWjO8&dnk>2r!mzkYOvOatF0!{8{#BOvm6RtI-8QPq;s{n#!z=4itsM#b~1N zX4r)pokL!2)2B6HBkrhYV}OF=#7oE9i3S8~5k=UQ=BgDLVGJwV>8h}!?@NbNJ15P# z_0DS7*RS1D6W^V^KBprhpK>oNyD>DWEw}sz?e=r_1ulcJ^TTHqAHov-%#)d#r?EOL zfkp#>NZET4XiO$72$z~dml~J>OQfdV>+7@)G=pC(C6#C?+L|iV(ub@iRrYfX|bTX~W*Dvkgv zLB}paGTNOo`Qtpq!@*_`W{Mr}Z^|Oa$S^rGnfqgE02QXRGE$>y^`A!i!|!(?+prwj zG`}gBHyUPZ3DeUpSmBZj_9j;KD_f3sKYH11(g#C`rTSvPY^Rl$qG_IRC~uE*guJ6YU6Hw#4V`XZYqRz{GB#OWJH`) zpTF&)({7~mu-fuGqP8fwIER|U;$FAtFo(09j=vKpG2 z8Uk;8Ii{RA`Xre!epbVM(Fb+A0lkhU0c#2}rqV372hfamhvCx6FW`Cb%;QyIN%IxS zNAJ|?1cEExt8#k4qFi8DC0w1-2V9cJ`b>1S8eB& zQv~ugBn96F;Mlz6Uz^jz!Qxn@Tyq}=MoU%0o%+H6l(aCH24QRIufkT6>^SS&ZIfIJ*6xRCr1yBX%a3)LH@=$x zdNWAG^i8g*w%|=Xzvr)@PzF*kc4lk^=m<)6z@a{}9bh|0=PP~vycX1FEcvH=5mk6e zGQJeDOI88uKmsqHzUq}1c=*oyA_R{SCruV7A+T9h z5AFI8i6rL3^3Gbt!id(dinUDci$1pGjO-p#pI5;|G$~;x z=pd=I{?*davV!tRg#+N8L(|QhKBd@cu=JxZq)l8>TR_VAw?7b%Yk#~h@^vei2+9pu zhCDnn)6Z~T`GR|dD2JiiuY1QiXhK`MSHI6F9Fh>JnXEKISkq!NcBj8nZ#qXs2|*{b zy#HkD_0<&{>Vi>fT~p;z#O>%;z+y^}h1`3x-%`(#oB(r&?8o(gil+d%SPWQ%X*qS3 zKD~?k#%p(1pVMD1_O9Vh0%{54ckzIZ)18ktWIT}B@FZhSzuGko4W&ZA07^}@!FQ)_ zN8Ua>6>CE~7?z~}vnSlur-@J_HcQ;wcg#lY$y;T7s1W+j@?V~<%U9N9n|?=m!rN9V zct`LFzx&FPdAP{r2v7u+EV7pIllEZ#lfzA1fm#(QQ6}OhfF}NP)Q$T#)*%rZcjq)9 zNsEJX7xJgR*Qj?TnXFVl0Hnl0RlfSTU@BT@0z?rsm&rvF7oys`r52?J+qy5a(tLSM z&=epG)7t)Gr;&9xG5=OLlia!rL`>zU>-HzMgSxls_xLtn7ZHE%4j&=8^Z4I`Jy*DU zcD}1GkGd6{yM-9u@*vkV+|-zHuy0yYPqKlVJNcP|*{jDJ2W`>}v?0|X1sUQ!Re~h) zkmZ}b6go!8hbrr7n=$I8C*5eO#-wDW>I5-0B2{Nh0?IS$r1$pW+3-e^ z4`$yL8Ed^l+HhoWh>?vO=#NM)iN03SH?!|F6-x6jD4{X-E=SV3=Sbs?9P5$4$)83q zk~aRzbt zMi-O}C%aA+AQB&+r8Ej!{;B#}E*ny&680?x#wKdo>Qg3}WNcHLD`}Nk`NVk6u%JLI zsowX*%fzujT4J|mBrR2v9(e`n_|*83oHgGS!6zp!7(>Dw{# zwuh~Dn59>l6?eFf<{qV~G^{8FEp=R#QX5A~8D`mwSpOOm5K3!#uKj12u3{KFq_O{R z`{jZmyR1#7@Z;y3rk_V2zAH)Pp`$NF<6*oS)|3RfTas5Iimn6cYX#YTwies)AHVPR z*4}*iulr+1#Miax$V?Zw{HOCP5)Trb+;Z{|4r)n-17>Oqxb=doTjD8ZYLj{o#ytxq z6f;z&bB7s{sjj|r)Tya~(E7bYgR%oY$Ll(&uy0nq)gSuCz8=;@o|!Qb=Z$g>>k)X) znKgE%Vr8h|>PljpDZ~+(=D2T4)C5H0j9iUAb) z)^>^()3p8+ErC*$#U4d0#%z_G%(eBa98R5Ncmx<8Q*&n(yfgOzvfF2>uNK^fSDq^U z!X@V2tQtob!XKDIe>S4zji7sX{pmiPL4gx?6H$$^e1_Ahhba@60uUqDl8O7fP%cDW@e=oGLUuUOS#eX}3QpmBJGj zwS{#0p+g_4%OGhlJrMV}IuHBP)4DFvY_*jUwTgPxyTZ=qO-%t8{^p9{bYt4ugPEvv2=-Xk2UX@*Kc&dW@(DapDGx$?|gqcM6i(R)j zq5}%+8T_QMbwhzO+qzJ>X+hIxJ#+PMy}E+h6(^;I2?00W$w(+!m?~cvDWFSfA}}v_ zy_MN_zxy(-XwTvA%lKGX*VpQY3+{|6PYRle3pqU6I-Ksv+RT^t!SyO0_lECq=_EUO z{Y2Bn>2uX&Er8U9vV{5W4JWIbI{JRwn(j|5V_=Ta) zQl1$`A*^uy_86zj#<~97ioX3T?_dL`-E%C?WDO zr0UaAv(u~J`84aS{n}q>Z%WvMVO9&7f%W}hw+9aa`JqXQtO5*QnhbhTU{3whL)~lN zu}pF#i6d}Ta+8JI3bL;!Wdp#1I9?uxzlQQzH(z*gOpmXJS6rV6v{2=zb>{-wBV5IG zZHJ6Voc=R8kM2-w7{L~EYTcDI7xx|8zq;@L>(Klh%B0m-%*fpZWNhnO=UEjWqNM3%M_zoxw|~?@y2g0rOX2n>G;K!S;cRis&mvqI;F|dyEHOF^FGiqh zJ=t`x*(wUE7x*vQJKmyq2Wd?j=77G>Kz?BIAf`G^?7|$rVxjmE8{$eUE zV4wG|(#X5If2!!ZcHt;%amTx=7a&?O9Tv+Qav?wstPf)(P?<&t(ZkkafH1?uC-TYw_e-k!r(yfmT;9sZQ8Cg{SlOFANvYU5oAQglkr0qk!Bjedof&dDr;|xFVMT^?au+ zFo)y(@5jLtA`Ew$UTdxhTyA|(@qNJ$aOz0ONiCRIf}VS8(X3sa4B+frFGwN|3241v zK54IG8&ll%O1pnOLAPmaSUP+)1-oHsD+q5+N%mMnOty)6G`Fcpa+`yMq6*w?WnM-U({7UQfB)-(u;@ zndqEVEz&0Ap0T-M-u;oca)#>O`nRfeo4`ypQ(sVq@J|StmDdP&Bhvg4u)EP#TGW@-uXw4fdDe1`Fo}=`3B8|J4n)P~)$DUkE8ygOV65LI#(${Lz%$sF&lg#yNJJ99au3F&ybON9`~xtb?2+$qO4Dc(7W}> zN1A09yRaaRe31HlT$Bs^q~L4N7oYQ&C7}CHyU68?+bJ(Jq+P+VtgdPurUYi8-tH=s zjNRtDpJy1i7P}nUPBveBd>yVIORxS)sAQF-rt&s-@8zGXc*|SyB>QX2vaArKE z!xF+xFKzO+v*b{j{U|l{i1$|3>5|hdNp^#xKBhZaqYF3XUw`xV)YZi&Bt<*-zF!C9 zyE7-TzgbKXHY6Y8Mo-xJY1+-uVRU>(W5D3=JM?nZ%PkIe>8XRMXAWlHIhphy8uCyn zW;ti@CYaCKvoT%PUGLol#e%83z{e7wkH?2p>vdd464W;UmkKpx)P$|_60U~-%IlYG z)&JQ!*;|P7V^}CAOnTv$=_N~&m&|@YaoJ7fY~030Y^Et#54floe~c+vJSt`CSzrc{ zjincjYd#$SZ?Qgp4^qHU*_N@TWjTjaBmlL&KmrH?4J_%=j zDzFSDT`ZwP%u)O0b1{4j`^FRaOf`z3GlNhT(mkAcAQi}!_JpV`{a#)`pj-eU1E30D zxw-7HuKd_Q#IgJ+)LnJvjWga|C>sDbtpF&QAldtnJ_E?`q{Jusej%kl)v_i3GU>cp z>y0t|S&i~a)KQLJe)7p|OM-_Xt?*B`v7v>X@f7S zzq=GePocMeCmdO+qP4=BfBg_c;QbEd*JC-Y@jzY*zEInwCbzS2w)ClC#zI$3KKl9^ z+#g?K?A?q4PuR|#$4jiDmOU`{FJp~~tfi?W9Y+xxb~jy1VUwx;><~}o*iE~%O?%r5 zH;1B4hqUX5-!L$0qHxK&deW+baH@#&W51Fce&Wn7Srsot4GSSq&oo;XH@OvZ3I&S6wRuH~3P&h~#g@fbe2SqHyaF1g0I3Nu^_|8(2P* zzv;=j_H-rs{$0Tm99&fH7$z4FrVG1CkgeL?qz7$|5*5Tt3z43~k8NPCkpdU5+m*SV z$5S{ipQB#YNye_eIbhYh+f4Czr+^hs%2wk&nD+G3x;;7uIuDNfXo4ZPm zSXJSc*&7mHh(xM_i>NqJ0>k{dVrx=b2bUm( zk_(#GEm6zKkTso_i6Jt+4-!BWwZHycOKKMT)jq3g;GEFr_O(i3nG>fCZyK&Hx&NZ4 z{9TPcZ8<9NkceCIebbXIk^+W@!TN>A=p09Q)=)c~o{xSMg&g}f{ekYNRVRvWm^EP{ zb=DrB@oaj;GE!efSIM}xf2*ZmoP(e0IGA7D771Tc_yrI;Gz+Yfl!RqU-ote`!oq(g z3PwK^DInU9p)}ha`<0#NC3NdVdHzhVqM=*=!F8Kf*yP3Emm0lK-3tuE>9E)nrr5_h z{^#fSi|S#X>y#zsJb7o#J{vaWT#soFlce?78#bp84B%X9y{LP~3}-bPLoz+1MH%IM zr@m1VXrING+RAk%@afa?+L#JYDADCv6RwnHVBGTIHiO%6C|uN9931i#fX374fkgjj z^kdd7ch#)lA4%+R8f=r7F6p#AEkKu@2H*E)L3)=8XM0Hg=;y!L>z-khh+ zkJpRJ+F|$;*Cy;)-KUu{E137vqRjGLJvyx~X2ROc)~_|dm}9T^kZQ__Mv#xn-uGCa z(@~N}oA;cKB`6^H<-Cqe6H!LmB5mfLcO~S^F$0+;gv8zg)uX3HFq*VL(N_{XzA5={ z*!f*X_dwO8dkH(9#!Y}!FKW*!z!Bplu8Q2>?s{?AV*rG+0;xj00R`>=Jdkth(p<*O zsK^dD`VK~7pSaXIrSN{s8vA`!@F9$O zjSR%!@JjhG_65x_A2k10PBO*Z3UJHm61o%)bEe<0A|P z6ygRENVs94P%yVyAJUGZa~WyuAWNW3m}mP&Z-yyDDD>ih^~e@6G1P|sA%{VOGm{N# z@v%n3p+e=cRDBE0PqQzl9<)yMocIfE*pWbn#=kDO6 z{zk7~!#K8igp=YS@4d*7+p2V*Rg+t&t@hQ5Z(B5kfTXEtH~KX`f~01NnD7CW@B!QA zNmV^Pt}Flpnj-shi<3er0-mf|&s{5CKJWH(V^K210kL%Xq$8q40i2%4gxctcWc>Xk zNM78D>(osNFooAIJ%N2zlxtEnx;CJ~I-(Lk0^JA6WdM0rC|H{|3tAw12kPPYBEQ@M zc1D0fatw{0%I=V(x9@*#529x!FqzKWO24NZC2AEXHV`Qv=lmTq4z{Ui1B86<-qHE_ zLq{&;)aa=aDUoPW_rU$yMZ0s*&7{M3Fvq$6LFJ{j2BrrA6_0?wVFb28^bON>gzgM3 z%G1@~qtaH%I{CS^s*0m-I}@2G`5ffQ5v6HvT6YNIg!TzVL>jCEL~(|lYv1L63hjUS z#!X8&XJG?hlKtCl-yZ?h->bwe|LE7M3%V!}fB3~2K)ijs^^!hUC5MLo)S-D0u6qwS z#jf2Qp)zelU_Vr9I8$^^XW@m>DOCCcwd8$7@KF!?!SUgejEf`{MyVpvT^T|)uRek)m8kiBasy@Q`v`rYXA2;s>W5v$Iix=s+BOQ zCMm4VKBgjUq{Ey=*u?cSS|27xd1tLh<_WfQaCgp8hWJ8$#WkWi{~(0FgK`aGv@sys zrl$N8g@-3kJ?m?Ii+>OpsU&@XNJoB7azC-Si7!73&AwBPCL z?l%p(?l)R73u_x*b_4imyt*W-sWHH6jIAN9m101*|GU^50;nlUkM3_6|0UB;m6{9k z47Rxp#Gk&29iV4^lk?by;rYW`!+qloUQKv5r5CT_2{e~e{62q%|8shMEwxYdGQ5y^ zV*K4z=*OFnCC(^-$cB1vV@SxrtF(!AM&fb8*hNRe?*>eh8KW_`@BhPneY8`|Oeg(yl-$^1`hZ=87W14kXEY^1u~+w@mRP+y!uqNzl^&2l zMa!;aIQ9RyZ>11`+a>ocCWu*~`M=zE*a`@A?!3)7-{wSdbxCGDJ8s)%4#80bblFiK6g}VO7v>zM4f{DN z>8r0mwc|N2TN$sTMc7`n`kK{L7}(loA~n#WT|1P<=82x{6k9nvq0e_+OF9Dmb@(oOYHQ>_ zkVelYIv0U^FP8oz9i$+g=xW^NN`OUkhu}Zcvzm9TrD@7`LNp!W_%9s@R9Ai)hV*dP zo{*^UR#Yzo2#Ynwamqw9zkU@^RBPOQ+R7{=`7_A^!s&6IUI{h&_Hp{6{&~+Y0@!-( zoxtS{t8}PJeQKGd2H}lo5rT@uKkLs=#1S6eL=vc3lqG*NHS_eE;E6(+qn1Nev*EkN zwF^RW5}s@B1bW8kjiY+bR?KxyPjrl~st}FdjH<|qTZ^1nSpZW%^wGG9wk;b~D z+@$}svPERuc9a@oRa>l2&wrVVg{tyd1_E3#;s z-DPNCv}U&?$gwvGU<>Ig&rrob`#H;RMNL#&7+j<85OH`$T2J*%8WzskD`CeI1(Ei? zPu`(!Oly3=RVkLdmHc?{vx62E(HdT0bqcl}D1*Fmh0Zp z4S(4Fi|2p#g7yA7(PBNCGXRphv~;(*!1>vf5r%P=0W^s{$(zNb2Tv@6tfnm;I%A_1}AXJ zH0(fvnC~Y?v;aL_*g@O~)J}N?43W*;l)iOQgJ)3F7B1-f7T;X4M0Y<|pHMH4W@p|M zH%bM7N?7u0te;4J-hNp+9x6hQ1&HP{r}2x!O)(Wyd71)z}z{{rpZ?kId;paavvd4BgJa z3edOjjF4Rm&78dey&pQp1Gx=#E|6<4ii6iYE9iE%4NN3vvZ@f7BG=zkEf|SPWfADl z!X=E=j%T*F6G3Wd5@Rh&@KK6!MArhz{H2&M`yUFGi~P2sn-B*}&jFDCmkvAYN{<{X z4ts;-XZ_T8&cgAu#6DtE%GIG;(7G?hX|L98sz{pMUK<*;s z-Ed6Pol`d!wK8yr%q#?r*G8^=u^!ToP>a6(&0XN7aeeLW$4$cJ(h6}i~JndqIYEM9j_Wh9TW{w-o1aDg^`oSO2^1&(BES$;_>i?~W2?!o} zh*>o?cR%ts{`>g2BV4@jJU1t1LUakF2J7Xt< zfcK(aG2KaEpZ`hCrcWt5MjX+bI8PuDs38a%clCu|{THo=p)!#Y$Pfy#!uc6q{t=I) z4gq!vYETnq>!JlD8x1o#uE7lZ&!?h3l86g09+w>J*9NR1o+1J1RLF-^-`sMgg&ZfY zrV7{MNE7q}G)l-iBL(?RRi`qj4y8VE=a0(Lii7N}DIkJ%g#gt3z%| z1}|#}b!sV0`PJ;@n2aT z0;kesngEh}KjC!@iCKcpKt@v@`L#O~8Uap@+&t8^n#&yBCMD6jat&GJqibdMFEHdm z%UzVK^?$C*{*0_;ZOnD8ftCZ7``aa3ZrLUPFC4YHFoFG9$dG8JHr*f0?{)z8(sF#5jCx5vBRE9XT-^^Wh+d0G%| z-@E4J(zW1$Dc#iX@lnXd`}=8gC9S7@P5R%g$^iYhAVvK4csA=>r8FL8FKTW-C`%B_#aC?S9x>ZX`R7Kh80rJP^H}twn)s;1D4K7dYLf z{sRVCIkuFuTdw?9*INwfC{t9M76Ozre3P+hGYu`<24tH`<2&e#EXmAgHs%8JnWg4 zDG{_x2MGakC<$=z%J1j_g0uk0ag!kG{*Ow=&^QwO>y!&7lrxS96fToOQXr<&D(Jq~ zrns=msl8U_-_d#i9)0S|CJ3$>fpKPJNieW~|7h`uW(&e6fxh+SXyu9y=fU(RB%aCv z5B33~*nlDz&8Qa^Vjwzc=}c)Pg-Q>=kt4v#(<1Od0P?vWs)hMR%-#nDBGf~Lva>BB zhxu;6grhDUUKFjd0y1mW&64G4gwd@)=2d)-bW;wH9ROL#YE_pz{QLu29M zbb8|MBPSXy+FHj^MgE-6QFO=CFz2$Li3DVoCA0nTwF}&etkoKNuz!sjBc4##m(L!enBoWEIzt5u%Dz3A=)x5>9AU4;C)ERHXTB$!5Havvz&BptPY3 zvl;$(&YskL0cn1O80WOKD;Xwzq9D%#r5ysKG%7xDH_l0Tu5&{57%#O;W~ECl{1qlC z2XVDA|Y>FBZqARkIVlYtITV6UE1=~EO7R^SNLM!PCpr2}lk zO=K6}UH#iHcwD7+&#Eq5T*-_GYys@W9w=S>MWD>Ixn+|e%oXr}ODmZy&f3S83FIhT z)gH2hj~*F3D7)e-S#zpx`rNf&V~5U^J-fIL4r zwWqMu>M-K~S%=fGL1u{UFbjTF`>nk6gFds{7KU~H^wZlky%gvth|$h|q*9I?7Jx0w zRn*P3>*+Uc{Lc4tn#!`(#EBVU+Q-TYY=zE>5yfc3z9TaQ1Qk!s0*^&kXPLPX<{#lZ z&OpeDe!DU5#@q>A7FqRh7WxT`AicXG0s^8|j6N`eKLs1V8OJi7zCXk^9iCj$+HAaR zoILccDrPu^GU#`fovH(*`Jvgx>l}jzaC5mvHcxEE1oo=U2o#%A)>K2yj-p=?oU=~Z z@Y|DRA)+SSELi*Hcu;U*5SRyNM{9$Iuh^YE{V(6*Hzl35t<9ohrcd~kUd7C(euV=a ze11Nua+S^8m1%#Zd9OAHVLAC`iu8&d1ro+k3zHcZQMLm%Bw^ggSa(?eDIK7JdJ4cm z?FMJ}gZt&9aFHl{5X>0Gx5s7|sEp-*J9YTXF6v(6ml>^1Mw0Ow=UEdjbrmO;ci$R< z#P?AznLB>YHE?BuD9#C=u^{xV8mnqN-p)fW_1+nkKt&7LQ5&0@Kp6XIUafv^KXChjhkn4qsZv#yraoe7mC|aH)zx zj}j#UVBA;n0{34I$HJ_u8H6!0BIF=V0P`~(uso^^_k*sAtScf2f3^ZUR#qQw@VTb~ z;1LefwcrP@(CK01612H~KbPbGMlY_+ob08oc{=kvWWf+Yf}~?|B#N5YHY8)&+>(1|NXzNS=Xpv+V=?vuc@x@eu*w( zAfz#ARt0p-s;KA&ah@kht^lu)R3xma*>P|f4u09O0M(9BrGPABVq^drs<@aVK>iT` zS;(JR!y+CHH6rG#~Q_p`9m!%Imd{kptxKa58F8 zVmQbNg&rOCl8OvMnt$8YB+aROscx6rA}e#mLNiU%031!t7B>`+9y=H)&awGmrF&5H zdMgNF#gzcc2+wF4Us{>cxZ|@xR?hA%*?T_V9d6(qA*Es{WFfY&%^sVrb943ap z(8y<`RPh0TUQv-cVOl8!Cr~7psx3Ky6~4N1zLJK3b~3)44SxVk`FmsAWqPf4T)>qH z@Ii&agv;ob3dzgt*QgE1jV8v4D_s>sV|$NYjX=Ar@oc@TN(T4zcG1%d5lrcSi!M;I z8nElu-?`ob<+JEUizn0L!l%Q6wf7}FsO=zh?A9rSRSr;RayA^OEh4S7Siw7!NDP*h z1XPU91q`&M9#N4@i(%zSyYxE?248{em`n{JW4s1LL0^wDv1fLB#cA3z%TjJNjMcoJX@k1hPI z{A5ToC;vM>M$UidxxS2Bq7F0>qhfLF@QPcc84otU@nVL_PZ9|KvF-X*_$fScQ2e0_(z@nHa!Ab@$BlR2aApI!>;l!=GK`q*{=TK zgDil_^Bb}}&1FIeC1(@~FHYUkYt;x1K=mj30dvUbpG1q*@h{ds8nDBLT`wnFaZQqd z*EF~Xo%e_QV=1cmD(|kudcYsUGdP^*%^goHw_cMOa+FT9^RXr^6^f2*fz(-jZm-}5 z3VjPa!Yf^&+r{v|K71a5VcVDasIuBEguZIQrF)M8t42LJdIe7d5qs4hJDoXHlGGJ171~sl0Bb%$q z3@$fiRUA|#qVs}p!ozrL;VX2lQTgitaANnu9;xZUanp|FKVgBF+A;>uu+yV!Kz7P@ zzzUV#b|5R}qsoD*)j6F9icUK8fzj6}DYYtxvrjbUE{rG$7W3w|==3_TanZ-l`x>;K zVN@X)U{&XPXLt3l=brj*Dgh{Z%gDJcB5aq;a>L+L110J@nIT{$K+GkB4Fidu?_p0Y z(OXzoE;sfbS$=TiTAw(}zkRFxz6L(<>wiPoue!gV`F>_k<9&a8Q%Hj5y3d33ewd*O zT{UL!>W?|m7-0C{wPIGS2g`~(-Fk8fz0*NV7wQ5TTBI;eiWOf~+u?%`rb(((Xyo-y zPg?k#BpL3tBpY})vTQ-N7xTWjWBcCY{j=*#Jb(8&l7W|f2-d(8dz|l}^EJ~_`j8dZ zGz!%favS}Bs!X@M(5$)c-L0V^Te3UhUhgZ*5`|R%v!L(8lKvAy>;9Gu{_|;{%0`=w zSc&|W25tgC%=uyr*UY_Kkj!7pLjF_5d2Pj(&Y4`UbDsNW!@pG57WV#~#OO3ly`F5t zGZe0zSpeC;@v|>yoVwnUn%n&9e<67AXX3@@NT{IhleE&w&x{+2e-+*Se!SS^16(`0 zT3(5JcJK5bC5<*9y=?aAi^vZBG{Vk@rsBff5gDfoVj#W}1kl1%PY_Sm-`%nUlw;xP`n(!Si%reAVIugJS3Iz$+yf6(bc9ErwRpZ| z5%p#j$KHmFJ-R}7_^0!vYN`xuENwpkz6YeDDbl#J%SxE7v3`2qnWkJf-{AZ*_AhL{ z4nt&mTXZ!&lDya!U{@r329_O0b1Ug%aYCEKbXUO))3YZYZz+=2(a4#fbW=kat}G&s zYbJ@z%stYiw9cB@rV`D#fAp~cht^6H-GKDiKk z#Wjg5Xv8&{?`}s~v|XWrV9a)d7{=+_6VV(7gO$TX*p&urZE8!yX&ujhsSszJ)_K8@ zi*OzeWv&b8!!hzj;}a8$0`1s<+AiX=b@K@@H;tJ)Bjxr0J9n9foHY3^nHih}c+J(z;aU5QjVg zw_HZC1x1ciSRY85 z@q&*Xz|=UP*~K+2;OVGr`l3nYJPoTq<81a2LapN*RNox*8w6L0CrE`WUa|1$-0_$a zZn|fDy4^I~qq&nGz(yV1?V*s~=%`t);aw~j!2Oj4FzKj=Th(d@z+3bEw;Kx^-tOn_ z&zm$y9Z#eO_-^y&20#6+|IzkIV1Jk18_j}OGMs827Gwe&Pjd*J9BUDfdKcmpI+5d& z5jy3F0Xu2Bpv!31URKvdpT7n;dTI+dD5 z9y90j67kTi)9wn@-buG#9fQ?J&6ZQgrR%H~2E00~N4oD~zg}*8F7cINnEB$51{vk7 ziE(4eg1bO2*E=#t8+nYqYykJblCv+Pj2kK+{r=h}wkgjx4KdrUV1`-r0(!5$YoHnX z2`5k=_cMNZ&*U$XWS0{`w*%-K;<)b*$tMkdp3Eb?7W!}J_@8QTJ`H(?M%fU^?92pK z6W6Bwc$+}i@sK!Qa}cMA)T_7UkQ!*4#4-rJSr`A#wz?XeXeaOT)Oe%!f>{Rd-T!z7 z9!*539bVuSOI)dYpLWgdggAZk=P%D?O&-xsOVk@ngZ8>f%v6S?{6t*cl_DDF!ba}V=^h0zr3RfkMc`4cJQm<{tSIhzju(x;84z6xK-Nr zDk&%;8pKJzfRVJFPD|Jj2#Vx{j-XJW1R<>ghq8Lc&<2Qd-MdnK_5AgIcng>8Tqdw@9LiD0u&9rJVBF8{C(=RH|(1 z-4P5(!MQoDmUV;PVh5zz5muNwTP!fpkx&Tiqf7DAL9jPHx|N0~=$GEA(o$7Lui&8; z7e3ySHonQxwJk|w8QyF!7Dj23ERx+?MVJ)uCO6A5n(NZyws5S(ZOL32#dBJxU0W&+ zCB>wtAqm&zG;Zh(->!f=^D5JI>i!3E1qqLD%D(rR%5@1UquaFe(+Wvs)jKIyYS_{D zR2#Wx{JdiRiig%i6)2s~F&3d_jd->K$gK*mff$OLl*S68>rvoH6v?JBHm|5l`>D-_ z16&+nsJnS8%!^S>YHTlm5l5ch^2iBD2MRs6O~}*N1U=GE7NL2W5$0oXsg`z86ih z;plUm|99HfJhy7+sqyYnCR_D7cde=}_Cw=Y;PUU~-qEO@ ztlHE^;c3wDop+*YQ2!D1cgs zeKiR|%{eGBwXz>h3p6N;enWG2H!WAhh9isEsPH({oZs2?(P&3r>;sX=n2T@g*Okh9 z_4ufN!dq@NHnmkV`?>>qTC& z;+^9eqL;2WkM}H^47F-`t?*Vi_^vDaj#qq_*5{5^6}*K5_3ThgcN;gc0Y zGCPv2gv-&9rtrFYU#Xw!y&icr<|g-Uy`5g_;|#eHsnuCWsP zEyFe4)unNweevd^{WTdamzzLv28&$Fx$6i2f@Ewl;;&@S*!v%qk2LQz!w(!)d zbV*QXpihtbZv+MN-d!Ye(o@4PTjat>KoGw$g;_Z>2%xsOUR0ZFQaA))L|%bqB87z% zorCGU5H#6WLHwCmaq+Qlv?)NHP9!Vj?CQi9wSz9(@MjKXZ1*03Qp}h~m`GT)erAPF z-gkYW!*ks$P(CcdG)0MOfZi2Khv`pP69m%gQRL)Ps9*~Fr-SZbfa`0HksYcKY4RphwPgkrQrUl=zJtlKBd3AodHTxO^99 z(#Casy>lQZuFu0mfZPh1a5ugGXX6&+=vlCqt;T-yF#5v8hC53~ICsT->6&0McKdE8 z)6W-T@vFd7fwbevTjx~h&u8CyM}fG{(&`aGKWfYAIG;^YM8;~ds{Pqzud+lXfHG5r zyQ5FcvZbr*pL7#+v5a7U@=t?9?Y$r4Vc^J`3S}%|a1$Q&T5{$Na zIdq7c1zgvlq!2`+)h})!nl!bBd~J}R`ZV$82q&i{aRPzS{>9~>P4Z4jvNu##JtF*A zCk5L}a}WWp;xblhNp>BCn9J*PsO$_){_mHRtd@m@&o+OoJ-`f@k{W%D8l9Z(1`q+H zW<{f(M5WMFr#w_M=OCuCA(#LHXVhR?00|(i4&VoH0y%*I=mmg|mdCJ(+?N1FNIH)+ zl?^150MUTeGC_WlCuGguzFBbaKI;Gb`HaKb#KD1VAvL#ulxC7?VKJxGWgSQ#VWJe1 z0OK`gbuE!IWS8FVz^!EStFBTcYLB4*^Yi_{X&^KDM*04<>+7pVW|v5Qt&LRPxOLJs z%$k}4_2B%==##bU>!{> z2G{Py_8hY`2NIk(760O_tOHQtPMqtU_AZ`Vu3q-n>4b-t$?gt@oRMRg`7Y~fLdi@9Ja8rQ z>H{o%b~T3yb9kNpb|SJo>{jmSAcp`K&N01Kd8>~}H=3YJM+ICJWl|Y7(&vKi=#w+R zIr8o?%*NY&9O4Q|c10BBRNlIN?`=@j?{K$(==G9J3F(P_8 zfy3i+fat!aK9JKXLq59DbHm|cUd&4u#Vih@R$H+ud-Wx+y4(&wwOA=Q(VSa3C@8PT zXxN%GTd2~bPAq4g=g!;7;K7F;1H;Mq{1Qc6QBrjj>fj| z@v#y6mZHAyQW)YtUzD7DMoGZ>LC(@yBnEwtve`8qDIV=gxgWR?>Kk!f%Jc99UdSAS z_tYsDIT;>_kWc-jOO38*P+118E|DNiD>A>oMSo2Lb(@2pY3ka2A^@xCkOJ}4g9v_o zB(u_L$n5Zad^~l|t>1@7v+n;6F^nc(V-RHt%Y8pTC-CXen00ivEp9i;#&LX8UHSL> zz<&z7hun@G*i-%X>_R)rdAh_>KZWvB76qh3PT`AhFL0M|011hGkQ^%v=qU$;j%P9! zGg9!q_DknJ2_DaD_<4RltEctvDq~$SKV;!`k7Oqk=+GYzv$5~(E?Y@D`&hb+Xp7{Q45^Uqx)HsRuXq_^U}Ru z0RMV(KZC2O^i|MP-6aV>U6no^=+X<-m^bMz;Y?4G0BEq4 zRN{p)9HiKRTx>L zi(xZcqu|H!Ri7)3N|554MN}U|`B=iQD0)el4Gg;R818es&DagS)|Z$g}XF=cUoV;7Uuuc)geE+Yb}5Kc15r8hi{)9LH=GGe5nes7Uy|*QkAv!jAVBJkCniy9k#{ z;jP}(+p-_*+0AS0X^{FAqB+R~%5MT06>A%(SUww_AaxN-pN*tRjoP-iE{s2meDQW^ zg3CJdRUUxPzRtWo=Y4+jlZM#9mq~igC}#F26&49E?N%T!@^xQfT<>$w8U8Dyb@_JF z*f#|TRa;4l_0L%r)^sQ`Yk$d<*_8Ow1P{i}KHcg*jK4o>ds_RmJLHM~&GDD3J^QCU z*8}%>&OQPK;335^9lDFh7990 zY;wv2;&tH<9-8NoZd2voA8ZBzQH<(5P1qwJ4`z7?@AGbMwMR2 zdplXR&Lcd-pKZmh>CtVxs^tkHv!x}w(L|%b&sZM(EBxZc{p&;Cy~t!Al`SIopB4dZ zTl?4F5O@gXV=2>%!GZ2AiPEAr+UWz#*c}%-oMy+NXmbg~hun$g`MEzRimH@cB# zNJuw00VzQ@U@*E;NQoff=#iqJ(vlJ)0wQAa?)?kSIiK@6=RD{6-uHE>y}ri} z6~8Roo83T;v`JH_x&1!gwYd94ZQyvIx8RM?r-p^QPt85HH+MMTEN&p7!qIU6^xx4r zYU21)g42y5+RIO~AJ@ZpTgxdceL)mkAwO;s`j2a6<3``4{OEI9_}cogS>-nUJ=UkW z>#hSxJ_9ZgywdIT!NJRuYhQ1gUlpHutMqDfRff^gjBEz~=ws2LkEvKG2bazzF5k@h z_5S|q?FygbLVq)0tGEs!=esH?)^B@u$MR5+h<7S0r)$3vn z;#Uk>Wzorz7yPUJ@cV~*vgbEw*t~uh#ZFQH{V8IClM~d8Fcf&q!gbn(7nDneag+qi z>IE!nFQ8T>WZN*rv@75f`-9FMtZlJg=Ys1IE6Tace4_*KuZl;CBh~}^khB2!@y*}U zFrw&1Qq?_*l{zrQC~jLD_U?r*4?}Y02dZXFa%B-!12JJWDVUBuTt_7`*5Cp6oNq%! zWSa`k?rI+kJBMjAKU)sDvzE zpp*9_b1w0Dm-sBdlq0<;;V9>k`IL&wlu826Hwup0#dvp>=%=XYmc>-w6IdHZ%r+xs z4w3Q#mGxwg#taF&Sj_r&nFTOT{~MKVhDcm|LHUS31HK;}>Y#UjG>kS zn<0%%S=`4icV`Ig`B||74G_?80-67;GSAuBWb;!SyE7plGK+qghmx|$#P+Nc`1w_F zUN{LzhQUK}^8TT+lqj=*_+>#jV{}Q7N65%F0{CNLz*|4l9RsXG5}dUmY}^Ky7nO0} zE+tyz{;4vOmtWHcnah8c;$xgCg$ImKgpC_U1jD=_-oR5aJ|#{{(@IEdYf)<@#FT+D zhD6zl&P#~SQxVUP^e=A36yF!mZ`?>;*h5#=Q^t2^nQi26bm3Xe#{qsUC~ z7cC&Ga3U)QU1qgWHq%pN;wCX-4AGk_Q%x!Uzf=HGHRD(&HJ4>lQvNPEj-fmFw-L;G zE}O0)jGOFtkMgxvE8ygSnY^i>O)g!pD?L$uER=lz<8~>l9kX$?6Pu zW4bDWKLjtah2IwmiMkF<@q}a*hwUzfuth$&IC#*AqaeQh@6MGMB=rpHeZZAD9+j00 zq7bdMnM}2laAzVyZUOR@e^zB~z4zW*3CN7v;;JAr`C=1)Lp=13>+gP z$AK^R$!vQ(H$QEp2~L$Azta`0+z3c!hN-uP>8KFCmiRt!h|&;gcDwL)z}WmODa6Rd z7I2BJr&ij$Y+#6hD#k-mmRUJ-MS5sZePv^PYGXYbbUnM#y|k|7u(7_eO0W?kHTO)a zlB%neDu2Q^f&{5K2#D(P)wm9|MAt{`htVIPTMJbkF9a2#_U>Vg3kePScih-O zf4}LT)fY+|HDv9D1{F4xO0+D!1E{-^;q)yzM9|??49JK7**BACR@sg9ZZPE2j)udQ zsg!4KhafkTGS!1;QYXpT4Ka(#gw>?hy6fq^Vo(M0rcF^8*&M(cm@_TWww_eV$$|S% zsd*`%aQi~*XLOB-WP^uTlK51i`=+PVO1q5dEq6C)D!S!wOqCU;0~rXbpKHUlYc?*bZM&}g-=6%0}n<8PM6mciLc`1vpp02*GR8eLn@WnI-vJS>L#HRRGdRT{9LU4Z&0;H z+zrj=f^!9Sf1a!<_tK6>Y@LE+V`5^Hh)oyOPGy8;y{O*L{|U-N`-L7p_G^d4jIpQp zO-zlI79e!o!0MG$;nUQGC(|f?ST=%`&<9U+CS{XB<*o3CG{dX+sd2p>x}V`kzewb{ z=JFOv}xalzj&}|=3;2S00S^o0(7#Wf<%ZE1GIi)dTyF}$(gjQ$v{>M z$Y{-^6K5X&q3XS|oKOAStuFcO^ssyDDMURezX3_D99Ty-hg`Sp_t}7>v#FmE!I>xU z3%??jhP1nv!$i_+3f||{l6B6IAU z*~Ioc(J#jO97(sJ`T%elL;q|Oybu9<>r5qMzKENKXIoOeMlL?JB*jjTD>V0Owo<>l zPqntvo%nl}oFA4#mSIi1C8qlq(}t}O#X=JK1F9vzjk311ON~`uTJq0D8$(?C!ChK> zf60vw`^bdJx%opIdY5JfWTu^99~k(;OaH@&S#4yTBcB^o#}aC9*@SJkX<2qy*&7hU&OMuT4`H1Hd}j{J5(* z+RfJeO(N~~$^I%?xWKS2H?aMbNL75iEjKgs{{N9R_)#+~znr?m^01y^z~Tn=aWkxM zW9KH{Zu$vT`pMh2W0+F|TYEi6{hUaZY`(4hZ|zqL z%!41c+)E9hKgn!@Nv97bO@Z5w$5ULsKINwh;Ai+=T1U~=XoASPmAWx{e5#(-$@Xzq zauNvTjhks1?f+h#(bdbjE-R$-MQ*OfNq$fc@oi3YtK_g9egd{akNjDD)(QZ}l!HHI zAAdp9?N!p{W}fe&f9;-}*D@Teu2H9HeaD$?Z@2!Up{M+_{=IJl?unrOh&;?hP)kUW z$i9I9%Wj|lcAw8te;=69ckS-jxTsj`NC@oKDzCx>9`W9sJv#((Urp{l`H_t#y$-1d zmpeb$E%8lyb=Lk~$hOft>!F}iMtx>!5 zg%itfsc&AFk{7&Qo%;n`N;sIqD=)Qgo}=WLG&ArLgd-D+guIMSi_a9Vg;UOxT;<)SzxBWoy@tl&Q&i@L~JVL zmW^@cc`&(QO`f#)O zA%ZF;qO&+$LBP(*Kx?En$aj^tBzaoaa&7{L4e22 zm!BWRe|xFl=n)`Mb2gnfQ$7?X^xr>_BDK`>e7v5vD4Cz1APp(PLxw2j^3P@IXf=*> zC7b-F>{%T1xyMCqL^$inWPoxRh&?{+9^AO=7mwWzP*f-Z;BF(+a?OB43x z_NM*qmtcaT!<6+!t`hNYi^Z$*XW3M@dzGeL_NTnrwW_g+J-%I(^_)rvW#61D2VA_@ z>^7#bGsV+{0|7N@|va7N!-s?~S5NT?;T=HujtVFy7L?*Cyi4E;nB+0!SejOC3@g((U-- zQDAOxyW<|JD#GIOt@L3{ez%>jX#M>dk>tl*%U5+JA+2Rags}R+*Fv8Pb&L9+JTQrI z?ObYVY-r_~n8el5h3B^z(hCnY^sxFA%O7s$jvI#j26_p9Y4yOu^6xWq~oTRKT3$`aq6e+W-yC;I`FfctgZmTZhBrkxX)5drpA_vA%TnSf$Q>eA( z3~nnnaPqAhsEoiw42}ea)h0)!2Tn7bV}%^dC~-1eDNnzk4LSQZDC5raTQY^e2v2+J z(Gf(;?*ZGA=YG3Os5H4?=s2)U|GMlNl{6bn zyDj`?tOYIp3rB^?H{Rx2+Bbk)4c+yISPn`C4dNYY5=AwM@swsrP;!1X&jXs8cDTRM z0f%&%_`#ag%X1@H{VEzSypG7L{E1^*Yg#q3TiK`my4vW0dXT!v2jZvURK+Qw=YG57 z?x{@bSi4YHu}J@dTapu3K+(-a4`Pj&*#N6eEfcdddxIs=C+RLwVHYJYYcrOkorHOx z?|d_EQeuIFNc(&rD#>J==Rg$566MHM|IMK&s$F1=)4TbNzYSm43~|UlDi@k;#mT1+ z=0+c`QT9|**Bot$7)3i&Onwqg`UG%s8%{arn{3G#k$jL zx^D;PE?EE&SayTx=@ni*5FsGFOVpq@wfWQew)26Z>NAg%>^qx1+-QfMXSgDDl6Gtp zDPvC<=6mvZHnRg%VH-_rCTYPss}IvcSRQ7n^dc$V^_JxsWO z?TOsumu&g`_Ur}jfpi@bT&C*Kh*qn+BT~ifdi6$k-J_SLSX0D-dQuzI-~L|nmJTeT zO84u?J#F$b*jaj=IbB-D8I1MBm9h#OJ2rTasLWTw^-=CzU&JU%o%d!dY10zAp{XZz zV>-r%phz)Fn{X|Uirjp03&ore^Gxm$+m_Gjk>%?zW<@-0lobocwomD!SDPgK{ey$U z^rDbl1Lval6g*dccjUO0m&Vfx?LS5r|0$A_H2Eg=!1Q#iP`x=9){RxiR9YDI2Cj;X zqB$nQ^t-j4XcQ(icg3M+i+Kra4|F*NWok{#oa-KK2%Ef-oInoOmDwu$4%dpYr4JU? z_DbZp)Lyn_mFRc!e}&Xsh_{yyB`@|#MHfpd4Q)`N1O8g|Ov2_+JeCY#8=z{vYu!CR zs}6Vqv4=e!lglMl1(!ls&#*>^**bmbP_Pn?sGT1C5;2&j_0(Of+osJNU*D9Qzh(9b zKCa(4Iv5h4iNgBfk^p7eg)t$HnMuE_rnkzc!@ zXr#Y9HGD(IEo6{7Pj2T9Wo*?3*zkE=L)l5`1K<=b#mVqHRA6T>l~P8fv|3$&Pv(vr zjc4VA!ppYJ;2o{6lgsx7G8%RCGaJmsj0pwu%L)qGdgYufrNOTkgca}Vo^e}TJc*MD z*Dw05sp?MGah`c=&(?TMZ}3CTaHyCCdW-QU7DrUoF6uP`$~>-&%d`6hji=W9(NJ+_ z%6vtK)!3-=^!yL-RO^wq4WsIpMi8K^fS+WB%E z>8(SbA$#RB5428Tbo{dwyh8h-#PBSVJx1b7Mcp)Y|M>lx`zn3hUIxV?aaCC&@wkOR zoc%`Psj=3JIhF3kwB;4dO$M5QH!qtdRTCbyPjWG?fd__+>adbGlE`6M#~aLwtPALb zV15d=pxlfpg1m7idj1BNaF3`Jo6-SZ&m@IM?1kQEytYPOAnHFsDV+<2@`*>92Lf3N zgPPUVo!2y8nu3v)b45=psT2Ukx>h)QqkM>2|3X@#Fp0XmRh^~;`6?R&Ee6vB>0Tvl zBNOJe6kf)sU@{VKBdaFkNXI!6xp0__tU$`d_L9xL2@-xHr zt<$PBQkOr2ve2|1-jBi}DEYregje1xQOFClkjhs<32{Zeg~^oV)08hgR2{0guZ&IL z%|u%xoZjgWBpo6}1aVyI%O_HkMP~3$hKq@pm@r)xVU45&fMz#9Z>~v0SQ{9aqos&g zAOItC@gbhLTl)jtLAg2}Y^vPs`aC+}m(_iexC{-dy*Bt`cRG79x*((Rm`+3UbiBnM zy}JuH6sumHA(=y`@YTQjbf!}-E>p@?p$YQfB+aywXoww2Kh=!IH4$;;M)SOn-+;14 zixHjxEyjA;jx~E4*oTq1d%6M66Toljfq&!y_#1f4t0xk;5HZ&On8vNEnkyYg0+AGz ziTIEeRcUc%{)H}IOyVa5ywc1tcG@s#ar{3f!w*0EDkl1-gp9(%uGRMJqEDvVFu4EbMMER5ESX^f8Ch>Y52#f z$m6sJZK`jlXmtI+%$@;Sjii#wAN^(>zu*aEv&1=>;TDELSNfOw-8Ix*HKs3x$E4b^ zlgp+9ipCk*iFEieqVV8g_(V}6>jDFA)XZ@HE?qC!JjiX3Ew=H!)ktn2Q#Ss75CqRa6r2oSJ&C6U@I#aH#{EvO-DUQbAx_=(;V`f+XU4t}jVG zFT5!SiG}*_sBr5`>!+B0#fhXx39=~6tMoC&Mhkr4#86_+@E>siiekCZ@Md3HiMKZKzkzQz#dqL~oO5rd zQblfAuJ4$e?(1(hS#I&nQhi|+Ac2_ib8-uoHckdt^xmor`iZ_Q159>8tZlPEYTDf? zi%Jm2zz@cuMG=Ic2o)H)(P;JIr|yK=h|VOwm-$g*0KI{YHJx>8GMpleU?>O?uBRHG zx2iYSq(DOTQwi2hhrFlzegDE{?pT}fzvL5GQLM*69e2%dEn2g+Cf>e3WmYw1#t6E- zMk|1v7n!&0mzo&x;!$LHLydYbS!^>~IUmqx0|I2QNN2DX@GR`(l99<_Q4}G4|9z0d z>v`8NZJFrzb%vH?Ms6}2ZNP+W-;RHVeHWUskQUCTCY!hLA1&ecSYD(NbB)TN&Bf5- zgbLb6*61zO%`P>!NuXhpz@NFd^$DEO<&9Fz@Y*HHbr}cYp z+?cG}#AjhMO?`lt3;BhF)ovV*Jb5n)H1tj}oAA0$qE=~gFARM%D1Dc!!q4HJ<@E(U zWf4xDQH7qL+XE+M+9I1DXh5TB@OG!A)U#!r@@BWKB1{d-#3iW3rz!aT43&>2q?yqFQk88~#i0t`EjYQ~(%R9p-;w6!kS5Hz z#$hI7yo?LM3h4kdnF$gyfdPks?r$RYF$aILe}X=qh-}RvJZkZd?qR(NsuXe$^ zdv6)xVfk|s-#p}0bL7ff^RDOW8xm0~C#eSg<;Z;uMIqmBSFZWz^) zKy+*B4CUgaR1Ewi4S@&z)B$5fcLx=BZR|^UF#r9x^*;0js0x3Lmb!T_fP$<HAt!qXg{t48}xShxcJA^J!<|;Kta)RNz7u62+ z6%-NQnxu3~;WPMF2`dU3>=Jl?BWZ4;cYaz!Oc@@XO%_8WM^^fMmrhQ#ESyM4BtwOd zkx&<;4BA*RuSJqiV{!E2KTp3qVr_IzQFkI(ob1tG+cNZ+)CC-;p*8!1WMq z(JPv10MZA&=8Q_Vw&%D@KBw6h8MJ(r;ah0)8e8dHdA*!G3hDJmM%Ivj?`r;Hrc-JC zR_(im`)C0?nzHB%uob;L3tDN(R&K>ANn@InK}Z!)wqm?8{#l#uz^27r)@DXU1bD~i z`h5(AoNBza+eipC`>!~74B`0W#`~~Vimzo72^-2uc$h0J2nELlxhbYwW^xL1Z3`GR z|9PE;fJxMcR&Npx2e&w$RLj!WI|7oAEnz42@gCi@@vNF6^0JN#=BWL8=MtP)>pP`q z7Yh+#a(#;uq(#mL81<_Nu2~Q_fx&zNq^gLKg@=4gZ$RTRMk?94A}Pr4(w&fGt{(bHb>sK9SFZb$sB4DdqtXfqiJ4cI zJki3g8#rfR^4Uuq&nDdpDw-_DVI81#iK0XozGFPDZ{9d_YTuTgi7r=J-_qJ~3dil< zo1$U`EmZ_(j6RmCTzRV84Lw=6{vCh$3#2$_^Yn#1R|)Wn?JF$Q&m?Li>AF!uGLlaB zZI{KGUdJ;-OMQy@9QdUqMdeY~w#TJA2h8L4_dCWe2470Je2-j-_r+IL_j@vrfIsVU zgwd!gUdlH0h*&ctC$?^KMNQ#ul?3nWJipZ60=?IfaeVIizEre||4B^&%X1 z*ff<>{dz-(RWjpHaVV)Z6_+}cLV09MtH$WHc+w@oR?HyNRT_=o2h0;#dLk^pOfcJwq}z0^zQjHK`2F*{ z(7ov{@cnl@7)NsjH^t>e9J^@M5tF(2n(C#QY^{;eqJ4_APr6*PJId5E$J}ShyBFW> z=v$73E&J8t;wM9t8+528tXQh4m`fMoPI}$Y>nqxQygTF(2PFj!8v^AudUukx)hk>i z|9ppsnv7=vg^|K*&DQ*vT%ug)l=!R_H;7k8DqiKD^qPn1+6i111-dAki)iS3hm*4T zYqtB&taQ$yjK$_Ikpc;nQhn#|%-Bw z1O`n|9z7zR8qsRfR&HGSAnw}Oce4-9i}PR{{)+16bgPPXnPrQs{yq;EiJtWpXiB3+ zXAB=<+W)1VZgFC5)6k@Xqt>nBn&%5|WfM8thwykz>g9<~Rnl@v`ly&ysegSNDIO`? z!j*#-m|A9#?m4bIO?|Q4C?QR+54swDHb^B231yXv{+0*jK#aEw##VK7z<3afZ}ho? z6+y<5{fhI(HorTc>mRh~T=VX-d9U%U*d|HXFdt~hxvN}jAGeFX|NW)K8*rA^MVZhY zVpgclSM2Zxw~6xnId{qJtX~?N3jdUqX(iQm7!aN`U(aaC&7vE3Q#edp+QxVkgylbV zl%`Woz7*>a+?D!8khpGq8S}E$csV`H*g=MP^jh1OQ~JxgmR9hB(#arxX>~~VwdSg( z040Y$>J%dU>6RT`oX^K-CDa}f{7&r-7)6IcYw7-QiAa_=TmNU#VM4^4?AOcX>VFat zrqa!w*?OERb|teETbbN176}VB3omY5XoGCBD^34!yrBMb8h`hP z5N(4|SYtXX#Gs4OVj@TvIsGLyjGzq-v^G$qsAFW7LaZH_RT^pu?!}u-$|+-?8@~I?nC;MRE#ONrB(2nLnl&=0uprVOJyOks z=GW%xZc7#7ai^K@&T{yqSKnFumglCLAz5B;(hA2HEMr8ZO5g+ocM=EI^tLBr6mKTC z#j0khE3<$Z4cfsV`OBduyxNU#;E>EoP1^B%K-wcOW>%?cA0?YX`HX`Aj8x!K3ku0? z#v+~-Q&VDq@|_J=4=kSxxE|HCi<8ghuUJbp)Ld{^z4i$Mb0cbV@w;b6khZ15+czCB z__;*U@Tw12{96~OB`v)CUF4ppnE|&@>V&0_e0DMHPib+2-<&*p2jnjkT9qb-0rTWe zaY%Ut*qFhqAJ$_>Z(_k^*=;mzT+I9=+tH=?{Ukxwws?j{en`!Y4WID~??S z%aI@hjSw?=}stIe+7=6T|ZY=$9iEF7X@Ek++RxgGg+ zG3kmkGi`Ne2*~u>Z^~f-OUvnSM=Pkdq9R1~g+D4>X6LVr-t7k3A=q?lNzAAq+n__% z*>2JIGy^&#ll36{0y={>DObWX+4Zw z)fTEU+ZTt&zRxj7vqoLf=9o?m{75w27jo-$<%I+S$kjLrc)U}mZ>Y+Eyj2*P=z6WCx)5ru? zp-4{q|AskJHxm4g_JS9*#%)^N>8!>@26#TMtC9lwamkUSruTf2VG|$3e8GAHie-%7 zE(ks6XDqKWby)0~CEhdyJzAcY;_}CBxX`N3DsK@p&^43}JF$DaM?YVe>#tlbEl1?& zJ}b1cK!+%Z{pC$99M_n`ibi$nuB)MdP{M!*l_fv3j-~EOj8Q)qg_tCS+tPhZ;Llgl zKQiwKNsa!5%ut5amb-Sc?vypOt~>FY_v@+uw3pq+h9{l$T6Hwr%Y= zlqmD{PEllL;NL%c(-h?zkFWo-`URjwbZh@NP(Yy-UaBRw>=-mGkxi5r#vEC#apJXK z{bcwqY)d~_UOmE_bctF9PUhFH_2V6s71^EhbE}D?m_K&n(;59zjLhE9{5Lo*c%D$U zfoTP-cn2eV zuC2B(dBDMwrv~yYPbAdG=RUn94%pQjPpWH`228KPuL&QJ3P)7$LL~A15{|wFyh+`1f+%OWJVDGPwkc z=Z+Has$V^i84yUEc-3p~in*Y5fqNB#YuAAMqY4D9@D5UqW+SXEL#uE24v=5dErA0* z$evWiVPD{6`{5OkbiqI~lv9-Tw-}qQ8+*4>wP{V^Mm`V7WE4n6tEH=a0+KC`XA%dK z^NP&0x0QF|Nn)L*wdBB>vk99{JMO|&Cy01WGZ^}f2Kr$RDU5sgB z5(45N7v{4OW-fhZO>j37q)fxF)y>`a28`CKDTM<$lH5TkEEk9E%HnW6)JTAhv%i>2 zpp;8Nxmve*4GVap9I&13?P)rYyJnl<$^n;M+}X38eON`syH=?o!zU8L#`P25xm$h1 zny;0|ohfw-dBarOWNMFhl-dl;Ge?xD1o!o)9RTU=XTX3=FrC+szKk0Pu6@JmLvK0w z!V9Xvl;ljpHT1hLzuAx8} zk>kx6B^4F0UPRJlFm33@e8D-z# z${lw*&8S*6)DS0}h?;Z-l>vFo64Y7?7HMhvM~a-C83jazcr(HM={s3UjFLD9C6X5t zt|&?_TRGK%zr`peQO7i9wjt_qF=c`fU9m+&iJ!5LM9npCQLxV}r>6C~{u~X{3~V9_wxaik zmgI=_tP6t`r_RV5#uPZ82ZwvwAdKqH6_Pf8P`PvFD}e#)^Gt! z((A&49Gb3zKGu&Q{f~F!>X-_VezPNfqSpTE=DBpbbots`iNn1=3-!oQ{aaX+>p`jr zfDW&1Jd?bN@%LPSunJT!^&bw7mb=t7RGx_3w!Y5n58kf?xw`E=ib(PZ@lEq!t2z>Y z{3QPIBu@tDP}Jgy1!Z#Qgrk)`_cY)j_U&Hwjl-O+5$y;fLQj`7n{Nd`uf<5f4q@0u zF)vdC3{tV{9M!A&LmOp9cbTp{ic7^`ad`H--B#wfc3Xn+(Gb&cu#n2YTgg!`mG=$h zpBgGMm;CYdjr*16BdZ-DPrM9P=#$bVh?pm?pR+;MpI5Ix2njUj*@5A86>E^!`~qy7 z7_gVNSP}^|3r(&53WsfLOuxcb;3k`Wqi>!OJw!JzGxevsgbq`kepx} z(msR=bpwRNc-0q;Z3)8)cT37fD4b|GXPh?))epi)e?pb4eah=^hleWPo-v>gt0S^q5!%mtaV!6ovyZE7s;J15g$dITwyVHUP@>K@K;pa?Kjck`AjmqmWzc zFoH+^uqmwz%_+%0Tt*A76}A@q^(B@5 z9L-AuV0btPBVl=1P8o&d#Mfnx4Qk`@@tlYui6C8ZGPRh2p2JIrAcJsxOZ1V5KS??G z)mOUhaUz2#`__C~Y%pw25Dw?N7Gcn$8Vi=4wsTJK#_ zXT~UXma9o*&c=$Okr0kk;k|T`?U5RJCeg1Tp)w5TxwcRll1h&&q_kbuXQ#Y5G}eE? zb@Xak@=@EmqRC*6S1I2cbDiMb!!yPM&~O~#M@#Du$W!^^`0{_dsXQIJStVKF(%TKP zkU^v(vnc>@3hRR@-%ZWqMr}{B zH{eyx>+i?kTvm4wmmL?@E#?n&N1I&`y0$;0>OduE(|_`*G23wNK-ZJ}_V(2fWEihk zr~Si0?m0XU2iEXmIMeSts3Hqzp6fUN2u~7Myk~P&J1Cf7`>?ugXth~5&}WH}#tRtgch5jWJ|pOg z2ui#+yLjAHcrJsFr#6lUR9@WbRiq(?pSznRpGdlVP{J7)aDTulzaN>u1=2?il?H^I z&EU)pY~8`i6{R{Jk`V}Ysf8G!_9sIs>KAga-n0sueua*Bn=deZvJ`lac9f{QiEleD}ozhmrDTe{_kQuOz)BHg-n zvX$;gMP}uGq>lgHVM-Sne)IX*##G|BU4N8XxX}N#Bh*2dVhs z|D27|&Q(0ytBMDyjN;Q@UltU4b0KtGQ%;*o+F}hkZ%=bY(-uCJkLPlG%h|+MO^u~2 zD`a&8;=6Xv>R!uCv)-*PT?0HPw(z>{K;`%!*^ZyWBYzg&|C#Vt?C%q`r+Fi z*B@O2q#4#8FAq_kU~g^zjNhsgJ&iW_`7`qh)xYps2FfOH;Ld{5W}TDb5Cwd3U*q({ z=6@8P4P_U0ROmZV+2;0;Ka$N%5 zwzDek+Avsqp}auP!!yV{hXl#E0i@hm{RZ6vJe5(lzldIXDPsH&?wbleUlUVcV@VMV z>UX69-w~p$cEIA(G@lN~e92UrEP657p{W+6+uwHHe_d?m?9+^7x-@=B>_ly$sIp;6 zx$`SEw>?lCL0k&j@a^XoWqw|M&SPXQ$W8n>&VqOc&=Kj@`L zaZjuJQS>`aS>d*sWn$;?cG<{Vum2L>9?37pl7-btJN;s|j5osks!Ta$3$SmVMmi1w z7H$Z+H>{bf4`c&9h}QK9H)WE3m;}7xgTk?_=u8pRU~p33euu_Ea)e*Sjl(={084^Q z(|{cj_+{|M+SAWRALz-pkio@xX+?uKW94_%msDFmm4g!j|L5nk7!5)S-G@89(+Z^@ zDW`0)**g<5*q^zRvK?1Rj0FgHl9^+>H4cQs`Zl>~<92H>03d9kGn(1g;t@3J;`}G` z{!OrM3Y${QInuh;v_wMxgeAbX0S>o)9>W@F-voHF-~R6N6_>gyB@>6@{rCKi?NgIS zG0%&M2D zK~ch?{i%{KWY&W>OTXZDR90kMGf6x^8@8XD5~>K7*d}x5n2Ar4rl0U;3e=MKILa!- z8;qE)Num6JVYi+G!a_5Mk3%&W1|h6X%`adt)Hk{9V-9dUOzG70a=T2G#8kNmte%W# zOi$pWz6x<~u2=u4pcDeagD0v2XtyKH^984yPrf6jXs(zg2cn1rfE!{%6lUq<$3@nX zIeVgmUb)KWR0hf3Bw$c(^}*s1)(47P&7l5t%vSK#PB%HTEwz(yf``<(MrMg}xinlpe!0evO~k4&zzQ$(NwY`G`3()4 zafc>SYm1>XtdQ=x+4wQdVG7rFY)v7fsXH^%OO(5Ck!9><6}-S&tBFpYBNg6$L#Wrt z&>Ix@%+ffX1#nYePW#Nt=#i8=7M^~&mBuLpm9P<47XQj&jhGMvA-vfeNLdDRYfk|3;a}*J9wqhz3RVo#a+b z`G7y+&qjhsFI_8uTbc3^o2cMP*U<+vgVbON$8}o3z3tS390k~QBV7TrrQLTj-&yW4Ao z_w2DQPZw{tjuxVRlWL-{q4fHX=&%2Ydt_}d?j05X^f5BMkk(V|CbvjRnS5g#!*_&* zkj3w@X!+b6T(QoLa_YB$?hpM7Qv8&g)llhhguH11ZJeRiVUm0+Kr7KvhcOj_JI@y=xe(LkVNS2u5pz(xHirxYv}aM+ zFat%?v)LNN9{;4u9(q#QBrfr2a@ih*XJ7PSsU|?VAyFF7F+jRGPl%+?y`qpx5=R`o zj3LhxdaW{^z0lH&NqTT(f+tPT@@iyLCc<54U;mB(fnS$Vk@Q?T^i))&7|U*0oN8W{ zneMH)Z8=wLprnJ#kPHIy+%^E|R0K%t|1oI3w5IA6zQg5_y(CR92$3Ym>FkX>n0P1Z z4eR!}^YiPJYfuw#K``^9KbVUfl#`{?MA)s3k;`z*q-{%XL9_Fuq`NUjdDeiXx?5k! zOy6i1HONBQYtd{nm>O5-o;|_>fX<>}0`Nfy<#Uik+53?RO@-9HJW;)x2HyHXLk=mU zc-pejLE4xwfPy7b7=@7Ly^Wu>xb4&}JnVtoX<#170tIG1&%8Nh4(0VOdEaPddLfQp}`20Jjw+Hrj$m ztKH5Gjc=_Tf=DOtn5Ie%2$c`FcSt*Tt;H1}IpIE1}nw5#Wh<+ZvHk$o1)xrGk(`?egzOzIRT+J%isn zDOD46LSuOGNRMY9`dt8SdUa>2nYm*oSuzV#D<1<4x;y9M?`D0TktG7C=dFn}K16Bx zLe`gW3S@vcuBb7N*=)U@>a58epp*y4VbARNcPK;+Tu(3gStc>-Diu8p-d-qn0sF%C za5;~e6GAxk;(Ab*I_CG;^*{r-E~Hxttmt-O44^v+db_L+U;t9E@i|9)P9izH+rn&! zOamsI5(P;RIUb2DRVly0BptaC5w;Yg#y6-LA_a4UCGkRYZ-#0SNuh3ugbcM}X~mGh z+bFgQh0&@02h)>aN^#Rt{IEH6RR9Y)SJysEFmEf&-~LjfEF#_Bt8r z4LP0I42lZA^VLHgsLPM)RD4?jLLBbE27~91*iWE5?EABaQ(;&j1}kzI?S`?ZV=OY- zzxqrLTMDb{T5jsEOQ>?H>6d@j&B5d3Y;QWoPM#O4NppJpSugOC`@DLM2~GE&zM@_P zWEiu3em_(CUVQP>YPd@Wj&9rT9}Czlkv|Qn9__(738~>!ps^(qA*%3ErM78T>9D0L z))EO$!QXEt4*4kwJQ%SKCEtGoFO@!7IAz84CCs+4BB{O&+^_%H~; z$HGhY5p`y+!Tm6wZ+ok#1#G^UxOpP$Jp`nP;|*mz`?6n%YBelzLz)~SD>jm@1V^e! zXeH$}Julm8E&{5XiqvOU*Bj-;E<4B`#DKNEoxP;GhfelY$S_+sW+S7Tc zdlsKE%w{u~2`?wnxFMq$+Bqbtun)jLL39_o)MiA%;Ym3v-Z>d8BF+nNmwrby+&Lplq5)m<*oQ`==-o zB!F%VgXqF-n14pC&Mwm*!|X)i1T;Vs(3E)$FD4oj565G%=TGNML~*T1kDt?$fKD<| zW(yJy?2yiiPvXBO0EGRQ$f(ht#`>AMLIUd@Mwo`qqOM?cVjsab|gM9Bo9 z-?sSL$^ZVps^#m-doiLY~0N>$W^4yvm z*kQSd5jdNBE>1!L-jRS7G;FH3n7RN=h4D0F^K1wZ`#}h8<=qM63b}FuMOUTgfBwOt6t+YA?%qFVVm->(KfG zisCz$-Zmmg{uBFZV>L}&<%r+y8Ee)z(aoEv9txtU;+#k3N;i=PO2a9@kGg=4T@OeR zvITrK)TFAdLVZkh50Xxvn`4XUpFAbQ1+nyh}a1w6zZF;Pwd>|K&mD0>l}{1P#U^>x;ac-}f!6K$iGZh^#ykN8J}-Rv^7p z!XxD3IX{x@pFe3ABf*W>jlFW z07mk!EEHcMgXozBG*E05TDn3_upqz_gYqR^vy`u%@WFKGz}{Jy-#5MXnOSG8&d@al zpz_n=NRLTrPlnHrFH8F=)!i`bz8Y8ws+4wjmd8RC3@&z$-JT;1&8`wGb8YUk0-zXM z^<^-{^wK4Oen1zzAdjs%o~Q*+}ZfIR>Rl@)+^5 zXhZCc>mFdt>M}bPRYHEtLO~RCV?;^tc2dErJfh&I)4gjVp03a_JotJD^QUE~`zyPL ziw3cvKcZjzC2xJWj!@`sdc_n%Z%=t4vlA%ScR`* zWX5_PmVD8KP4qA5J$z%}!E)Su{RP1NO`E3x@G12H3ia(KgXNAb=NSGYE3js3&|CVt zp>p(ZB?3Ef-~izDdi{^rmoZOQ$%JH(*Y0aWaj{Ue3>Q<%5WZUrG z5%3Fh*CRY^l1|%OqbeOB1V=(C^IXpree>Kk<$nWxu@G%6eY6JTx=Z8^nKKrM;_1Ct zp%C>_N^Dk0*~5+7xX)I|apAYAp&ldYu(OZ6t zod^$&{O*t}VEDB;PJIX3b3%WCXa>Mfi~1(7Q4{wHqrb8R5yqq+)C#+i$E*UYU_s}&Z2#}Fz9MgPU4VCc$vx+D|%HQ?~>b2&Q%2RjxwVv zXrQrM9OA{CSmg%~`X79j?+nn?pamGxVMU%;)np1lU2&q8kw{l^VbwO22P2NVQ`E)= zuGD7S_T;D5CDpr&lCMvp!2XR-V) zW*I+rVAv(<3IJg+&;>jx#g#;dqZV0_=}~n#D)id`8dDspI7*xc0P-hQ*eHex55&F+ zzy8z~;^>mB9A(dfXqFm<6_h;WoQKv1%f-4px?S3G!%q9i3epMiSPU*50njZ_win1t zA6e2bnmUx|NYpkYuob|Nc?Pf*gL-i>9^*T>xf#>XIx^0XVfKv`t`%#$CfEKx5sdQk z49SQ;1>@ag`p@E(xe{0#1SR9IJL^o}Ms8l3uS+n=7+bRyTq9u=E~2L~Fs8QQrAbJpYf2hpx6PXhIjW;!buOv)%u z3V3X0$mlKC7?c_P8tG#pLoohmuJR~Y?O96SgG38vB|K+d#iSE3xVRe7XeKM-VgBWe z%ffEdyM4r+j9lo9c}qdT&j1(-{V@eJF!X}+FGx0eT$yK3pM|*-kzX^)l=y?Fllo@4B2s2=7gWcM9*rm*5Im|SW z8CyutMI7p8)EK^zUksNIw3W@iP@|vYdFdu{e}tRO&rUz{MZ#$9q@F0pD~2?a?csj~ zU^mrA7V%Cmf6o_MYv=QG`h-pIxf!?yH4D?X-Idh3bC$LTcp{Fc&K1#JXk$U>t&VP< zLHS{@B=&8$6G##Zs{i}CgBxs$UD9*HKluT?;V`G>7W3k7d@x6Ie#sQCoZNE`4hrY$ zjvA}2{m54EqkEh8jll9q%wZ2uIKp(BUF>l(4>3a7(0W?qwJDgEHR- z<^SF`Ie=P8<1^~wa`HPX|84xc#?x)1KU+97@p359rRww3xp_S3V)_%t9)ybBVn65g zz2EaRvE2EyJn9f|0K)+V@!40dfh@5zBClI{okaUQjxNp)7A*=zc2LzDFW=!myvs#_q-fDwoH-+K^Z==~_> z-|5kEplUrx{93Hy|GEu=aZrbGk^I5sJ{nSoSyBT|1r_jicymmMiU;73rj&YvM?X)P z!c(D7jgTpghj(i$p_k=&$6$+ zhFmtn1HdZurvfgC<++y?wM)!M*k=Wj7L|X#)o3G1q%Q7u%9)aq;vXs*ndUA|B_vhw zs-O$ey3j&R!ZsF9p+FO;f0^12r!R{GYX5icUcuJ}0HB4l;1yb^bN7qF5hz9Jjh>LB z_2I!VH$1~7KFL**!Rs+xQX=Cu53#^0Sk%wT7B?Y;)LmK$hYZmUS540{S^polW2yQ# zxidK!J1RobfZ~30b~yL=StbRCFOoQlQIWD*u=&g@-7&(}M22B|XTe>|MvEsZB3SF@ z9|x~y=#?^7S~ou5dvgC`t|t&M73<>5<)~C5JidGEGGnK-j|qoo>G|#GJ9nj%cxKH4utu_k9oc4HIJ^li;E%a`4UthB2#~ZMt4o- zS;)K#D{rXuQ(L$l3N5*8u!+0L$&7 zMjLojZL5IkuB4Tz9`6{FME)~qAICRq!JJLj-pwdguRf{wKRf#`oznyUVvWwRD~G+}J6k<= zz1R9DGyCdo{r$@EFRQxx{v;Ys;GXfY{SrIf>8qh$>z}71+e@c6$!{LVi42RNlxmUNB*98Ztq5Bpm~9n+mo$5xoW|4H}htDr0`tz3T; z%@08nFMTWMRr{Aai$;BXj9A;f@kwqMr7-=DA>cUa3M31-9nWw(^-T%vZ~>Q*v3@34 zJo=Ct8{^4*v!f|I_7YK5`e_T1P}`r%;3(C;sODO zOFIXC z2@t9(FyPryf-%TdAmVHRa7V<8>&_w%54t=scSURAzW9I!1Gr5BqVKCoxUoDsbNWcxR20xc#AS|98dvYhthUI3=oS;*`MH!F1kbQ(YK?3$(VH@Z5j=Mfc#db;?hi=AnblQpW!2~B0@m<4tq`cCg__Sf29DqUMh%tq3htRKTEIC_-40T4=Bb*kJ%$-rT%=Tv31| z#w5#T_t0#+`Sdph31Pvez6TC(J-bGLa}CTTWM)hBQzmT+9rhT{eb=>XNT9GThcJf1 zyiGum8$0vA%K3_8ShM)A~t>gI|j){CDA%=rP}dl#C*+oe|{J~a{jq3?gZs@(0Y@wEG6T!Y->|h zh-sadyzS2(0Qq5PJ0=w|KEAF9Qzx^-Z<4V*MQ?fbel1G&vK&`s7OtVxhnHf}N z2fsfhF)LL zPmKM^;0TDfLed$5K3!cDb(CY_{^!ol{aGIcubON=PB1zuof`22+Pso*Q?^N%$J)Y3 z!&nn(93D__QrEcr{BWqRbg?}<)DKX+A`)>%P&(D1D}vUL`tYoiFulnNHlD}N46vP=Ann1 z(7TwVFRE4dHSb$+zyCAEn>j-Ij6E%bOJl~!x3ayRZrg7pdMRhM4JBeB2~$$~DeV8D zPq>ZCw_~*NlK+HpS?|j}sIq*Dh&xLxWOg|azVU}_)q0fA9zAy5=)-){c*l_k^ROVCKja?5`X^dHn9_eTuhTSe`^8ZbUy5{lm9 zRpX-?r*JR!(^uSIS?ls0H)K;(clP{$PHU<`=#F2<#W9>yP;sY!|EV72FsQx`e|3C6 za*Sab3k`TOe3BJ+K4b6&G{aDNC_XYg8+vOFtzW+O_{xYavCVboO57Vh^5{t2t(e1W zF_hIi{W}%c;SF&&c&GdmPSx+l&Ur-dr^FsUbG;n^kw?d&rZ4a}e@95M2MdJXH?awo zI==H?uP@Nn3xJM-=tn{Ov~ZMITK$A?&mtht0tzwlf$Z=bB2FNq8Df-dQ$ z7E%z3>>$NsyXMm*2%6BQ6vCsJp@)WF-v?FqrS(r|)J&&9R)XRD;mc0cRAXmVzF)*8G2H59Hk6RNZn&?G_)g`#=X9nmI+4dob2BPCiHeICs7Bc|X4q`qa zXxirTMdscw$^Cbl^`Do=sQ!IxMPI3QdJb%!kar$!T3#aib+lbpq<-#cAD$F(|CT`{ z?Fxu~@6g%i-;fi1=1sdl&uZ_J9rF7lQ^HVLeWaKJLS;BN4wkX zdK9oBnnq+j>^FNn#M?vQPNdYaeb=ZNTT}%XRm|a1`k|@r{6H5Im6%u!a7QEBag}Do zN?V1(;V@^}-yn&00P{6vIUi+3!y2d23I@_6u^+6^bP@^=HpfB@Nf5u^@Q+j8&uHxQ zj_sK(G_FNeaM;%b9(UNbtIg;ez78-|~I^4O4g zZ2)c^&CBAV5OT%p&s22*i_OE9_h*2yQm32`o?;au0H2nFGXV%jukots4NjMVyPT}>(e9$dUlcG>geWn~z?^~|T;-9njus#M^x<)vj)m7y0*qT{#Q?N95i zd@G(g-1pJBUy9fK%=U2-?DoXy z`#8~BTk|l`D{D;zonbBhCbC{;oR-diWi!%PJ#d0SVG963GgBxl48A-|%qH$UW*>w3 z6KuJdMByQo>9(E+FpzKVPo3~9$#!GZW~=Q4=r*};v$VU=V-c-mB2!(i#Uxh8F5zx# zW33)&dkLqf&AH7eScy*nD|$6}g*vJvL*Xb%z*uBE!C*22N?KfEMx`n{WONmJ6zMoe zXt<+7Ywa7^)w@bLdCXQXCV5PFWPfi!stq_-k<~Y4AcgRafbqf%wj5C^JmFYnYU>>$ThEvzAbt& zY4m0Hg^3xF;)cp7O&Uu}QxGdlaiQlVA7D`vi33E zbs)~Y3*)OU)$8KxUawzHzXrk?;}cyJ_g2U>p%X}P7;^Im>YJ*l!KA<=MR=KQ%ZLFCh?}iVL;WFr|Wmg z*Hyp%cx-&*p9=Wa`F{!A7lVt6rhMO_`b2%@FZ5oA&TKt*lD-w*ig7>E;8=h@g%huU zm;^a#W_pr;_UD9h8QaYm3-_K*eu=$h#PP3{bnV^F*KjoD(h2_eAQXcHf&?kAcmTs- z=lCGYR7>#13lXZ1agwTAj_Z3zo?z4upgwmJ=#r}eLJ66^Z2QSf$E z_gKx-W9q&*pXFo59oVRJtXU?`-2t%^u9>`fD~o@>nE4#4#i>Bf3eMc3ODxoLJ7El3 zzXlQj8N9G}CJ_m0uFO)Vnw>i0Ae)J8ej$LWmOVD+3krP2s9vQYEjQo&{Nvc8o_4dd zo0wYT9qyc6d^H+l)}qY_Ebzcy@}Do-pV*-Z5hKzU9G9?a^D?dAfT8cc5%sGnjH>z< zJ^6%q|DZ%qxf-#Xb6>LAtCApnj|+qTj5U&AbXDU(0w^O!u-zvXJ;!rN6rBZ?^c@yjXuT@TcVS9Sv&%oIC zPlE5$A6v~c>nib^NdcS^Q_tQoH{}ldNQ+3UB{*8QAYY8jNtKTM{nJ`U%i7r9C)QlS zwp<@J(PRTSE~4qtC`u(Bx}h9a9bUb9)YpX%V9rfB6Ru3MaPn98>tFmZRot&9DX5Nc zHA?z%LWV0)BfWJmt*8qJK)I#xtSB4M?5{D7x%OnmOnd&?f?{0v|D3kX{Mx+l*|1NnTk~!9oWc@NOAVIY`aSQF?P$!nG!L(jo&ak3Vi2wK&8cvf z2|yyxP)7=~DrWCYepx9Jeflk$dDK-sqp$t>&+mq#voqXa6$W;h?++g9KL7Nbbx4Wl zO_@%HyGk1bkh4LCUT1uN%a+1iJyip@9`<2MjHuZ!KV&4_eZh8#t6vD(9yiW&lU+>*Bwdud~G8gXG%xs>1!vk4C z=U)^FI^XUk%V8<2Uw(RG6a_ee&FhvH`Qy6dVKfA z=z3=kyNq(XSPZzRckM`;ozIEWCOB0Nx1|{e?p1CNdz?`Ueno{aK2p9DUTiVzD5~^6 zarD1(iRs1P&3enKxjlRP&48)}T$hjAT zYCV#;r{I0%3UL-CxQ|^)I*4?s=4kd_6c`vP*c4$%~jZ;r?atWVO|i`m)> z-W2xflM7M0lbXg6>Pk=FqaAyI$I<=tu4 z6Cq$vYK%KMeMcW!j?X?2%?Q^EXDC6g{!agPitjv4Hzpz*i8&2`96UTWBqa(83kkQ; zR}%?geCB+>nx>Ovd|AdkeTjIREoj8kGxu5+m{H0?CTm4MJ%|t;IF(gRlP#c}SLXrz zFbz3MjXB`pI-EvG&mfEg!mEpO{+#A1Y~?9lG$60^=ga-c`wP!8-VZKoNBH&zhloU} zPy*8H1I9S00}F0COXhrq`ss4k=_0nwk#T5JZZZ>?^Fb~*B2s!US83n-j$#xxH9zVk zFL$9Rmy+jqkY`Mxox|s;&L9FKi=+CBulMKROHwpBqau3!cyKWW4L+4&sfi-Mw{LvX zXbPFoP@dP?42axu!CbSSa=pbkn`2!I89h!rxPy1{s;Er4@SW|#NOOFVcSCV*JER?5 z*7*mXb6mu_itIYb>ozFs{! zHq6n5NW)0dHx~4{9Y%F5t%%@9o)-#wqQ7+s?SOmQrMbUv@)?9Zsx7Te$z$lt_nQGx z5e_Pb(TPBvHb8PoNYMt!U(Pa+VcFP0QP<4lVNOI20M&hvuRV>|o&nP8XQ=*0@Zgx6 z3?70~ZoTeL<@WHQ9wHuBJyh%U>JbSNd=?RYth@i<(N%2vr3cX%AqUzV`TZ22?Int-b!ZQ>=X85B$^sa&|!a_lFdu97U_2bi*c~x~?L{fQamU zsH*soXCR!(RDHEU|8-iW0sGyPsR-#aUC{-$zbW2&)>ZszRT0na`P-{R9~AqhRhyx! zJJ%j-h*!sRRhwZUX@=GG7lt+Elxjm#y+LF3*n^DC;s9fE&5}3p9xg_+I9Rp!p^>uB zWglf1jL+k!$^#Ksh-ZZ4Kw&UTUDb3DBwmZ@SFU_%-9WlMzf6oVpxk!`gy*UU+0z;Z z)K5e;PY*QDq(2_|1E1n*(3WY@KCU+OslM{3xSWVAB}Xxdz}iL8$t6aQNe>^D`h_a` zsEGh|amps1Kx47mjynI|6ca!3drrrN0ndew9tHw2VDl+w%_Olt#js_L3t{yFbUvLD1PH7X zuJuxEeM|x?jCRg7w5o}KTreQ(c6FT}H4Q2c`Di?nMLc;ik3A9Xk0M^f<%PaM>)shifQC#Cc;dsFjlBgDwG z3~`i)HHhCd+L^xXqr0Tj?)~EYGkH=k0_azuD{f#vK$}-o-|l+v zYdgYMA=euy--AeiBB0LiDq1f?tBAXOUp3F9EStKkPjysnu_N_pB;yhE;_pbED*3N8$pX!cLxgAVPvXfB;U&{qH&uJwiqht9*q#z&=% zy6(f~)E+mbeEm;@*>AIKZr_*!!`IVefDc?jhW&u1E(QB>o;P4)64ISWqf867y`c0+ z;*mFI2ipFQ7&K4hWlk7uz_Z%nZ89@PvtYNuZulpvs4`$a+w%JqZ$mqpqtap&@VKRU z(7iqK`CVpXxu^;5aO054=)sC=>sxm>8m^GoO^@X#n!uXBh`0RIBDZV*TY&$*0kw%y_Elj%w3;#ij zAd=xk-@#lheq9@Q8kKBW3db z+uo?Dh9?`(RVh=Le^cus=u~JXVW;miySG%S;R4S~APZPO-uqf}SHcAqfj)-r+d^nD z5KSD2n+(}LpZ;Bjs>dN~aR^%(=#QbLOsWB5I{%9n(Ii86^WnT2c1A4#_3zU}qv~@8 zCo(9#_iyCvXnF86{PxRk5LdDM4Cu7~%^8Xe zh#sK*JKrYRGVm8JVV7NbXDBMSKrg9L!U)=8+@eicF}jdhW$`6)hgPP@2boVA%<(iy zgo7>6b#FMTt~ss6N3XSY16ZP`Q$MXyVU&u`Z+%E~dUOM}c$y|BWU~xiO*_(zm+pTw zj$>K`-?EANR?owUK{A;A-GH_vdE_B^*l6SKXE;~vvd;qita-lfK1iC}lbilHc(X{s zEGkN4h4%Lg_sq$+FE^JP2jAaZeaW3EL~Fjg=@rh?1d~B){e9&k_I^YEeVYzKYN5f} z6rw|Zt!WA|KrdwzQR^hSBFu;z2D(O}pq-JPt&~L~n0QRPVY-XiSM4=iP9-t0ToIolYwM%Q@oN|8YJ06}{Uykhy6{L_9LNd_ zs-a3IR8z#1zTh_frVO3b1?{fsw@u9V+^?TJ{deUVKHvPeBzft7FpqF)DBB|xl{cYn z`r&vVDbxxbB%MKcXzD0GgtNbN%l!O33wHcFpD{3)%e752)T8!ab-MVk*N32g?>?|J zkLG`wnm|2M87v_^eE_?F0tq-}%Z1}w>8{9^^Kw4ECMdQu0naPGxV~?A-=1}x+w+h?#^U_K+PmKicRp-&fEB}G-}}x zExe3QGOc*{Xx59LebWTcD?=#_ka3Gvs6z7F4j_^4xi<& zGU4!@R|I6?oTKusY2S%d#_AkmW~s~9;Klo989$EVJn~>xwM7AjjSWb-g-m89%LPW7 z4tw#Yc8FjityoCADN<~D71)B<88B)aKHrwOf&ejp${y>S7Pvaeb(uDSTcD{~cFw1H zQI02gX%WC+dFoQ+14L}HpO~|xzNq;s?R~!SJB%n_7FjvSXNjQ3OYs*>cm{SB} zf|hAXt}b`*OJhCf`#)*pIRPh_bSJicn(~@Q2{jy+>ACr|{2}8ShQ8~OFutg{(cK5x zV_QsRcY7-8EALD+PnK9&b2b|52H^xZEBq6J*_<>xZ0aobEk4Y7^Klgy9)Ec|Kb%P` ze>yCy<1!(td#5xl<@&l~feYUTZi!A?V!5wDNO&S(>`D0{$GEAUloiO_OrBB4x&e2B z2XB{j%Q)Oy{<%9Bz1%McLYlfjWldZ@7CP*QYO@D?qN{PX3|P1cSLz$xEx-H3??Qx! z_(&|}1r;?-WwrJ>FcEEkktFE*WKHlMTeV}U5PRBh8gJIUfwkH)bHJ~IVGRT{gz+y2 zqtNG(-$$=+kr{7nh$J`2S|S8`?9)?g)#haKj2^%0axXX`yInEYP&`TJ*cFXWXR_DU z*tM&xU-K*v-i-XUKr4z%7O9Nz*vB}S&p6jURs+N2`@EkSMy)f}v*;SGd6Mo9JRMa2 zn#?u$DHA>qKX%%G=}}x|vgW~_vKe}>aIfcJvgGqW+8@_PfGnvm9K#k00t*mnk&YO`JF+rdb0L^20^?fS#p%R76O+=kV4T5#L>=?I{OXT_ z27T8cER--gTM)M(okJ$B0J)aff6fxDI;wyVUaKD)^M<%a~%;$@iDSjAJdt+sm! zmkUHjy_n1fL}1EF21XHAABku0v3iJeUtwQ-oNnivIo^E9bg86g^kVZ?*&D(1G5of! zrkSsqCI1+Z`Lv)8F3O~R_JLagPzgseG3eToS?TRmCIw}oqIf(QlbE2Fuplciv?vt0 z{NycS8{tdcUUO!wz89?(ow-Voo)UpdmSEx67hIK-g0pvUmwD##+G3uZ>JI65eeZIW ziu?%{me}293$UM&=JS~>STf=qSWPRVDC9qN5()G>Ox#ZPetOUTd+eHnk2!PEP5Gy0 zE-_qnsM1aophk8O&t<0i)o&)qO5+5Z(=m2<;;q*n$5vSO1)*?BtY+9K_ z5G@uhM|pngzOK$E31ZUVVqkN%NaDd%+kZCYW9&6U^6R!;q=p}553K4f`noIV_owbF zPFJC#btc2JP3^sJx#X3TTU_Ku8P2&}m}L11OP9(W28O`(qy1NVy;0BQU+z9yffC(r z{Xtrs?OXMb^DV0n$sof!fG*E=NOCE-*%W=5g&f-YcGKS}ST2#176-UyJIVy&wovVV z)|R|1isB#{2K|{%+EdYF&G)1p0DgCdkn8+fOEN*z&^}Rwp&a4*Ve(b_%NB z6v7IAax?|^1kv$pcx?VV$rr0k9s*f>G z46bmcCa`|GzboB-`bei*gRz4#fi-P|5b~$QhvG^ zOf8qnw_Gn;=IDR{!k~#j@4Ds~?f@iU6igZpqciMDu;3sdbiEiDR7Cmc1IqwQSL>35 z9`at+a{BMogz4rP=w;T`W|@b#=*E1l*9adk>h!{bB6pz3R>kdD_5wz)!bSIe}>;7eiN5W$J) z`S4not-m{+JqNNJTf&lk<(D^052hZQUm0q@ZoDI8xW7;{+aSi<%%L59!qdQpPv*Qt zd7s`aoy{-90pY>Q`lLL}QBFKwDBy?TIIhrfU46eVUzKsfohWebpCC}L!Ta1uUr94I zYg~_kdk4V$^ILHic85|scsgYgzS#O@2jsE_c7251=821hWC(?t2!37p^W4NOZ{7VL zSFlm9T8(Npg|=Xj`=6JvyM7Kw zZbh@AB6Z~q4`Y+P=rM<><^eZkW@@s%=-+;$Pi$x=y{LIpR%TA3Ka5m41!5o%%Ad~+ z=NzEv9W&a_)F~+5*lX9BlL|kMcQE$@`Hrsk-XGl0Xu1lADJ(Q$BcQ%mm^32g3p2NF z0L186m17#{H_AQDRXL&6@aqZpeo3E`K$Q)?A>AG!k1p9XxLmY;Bbbt$jfcPYg2#Dh zr(pWiIEu}^uo@0zY@#|m1bab!PkJtpKFKL!(2x!=$k-SpZn%M{6>w#AJi0)Ras&|E zS7eTEV)@v$6O3mI8D(Fh-Om^`@VUWL58x7|37MYY?Sfm&DCnbdKI$ppQ$n!BT z#y7cw2xoW!bjA{{nkMd!$_{!%2N{d~^u-(wp+(!g&x5-mmf|_5LsuSjW=~M%O!;{I zG5)inB#hRz>Qo2FEQ}|gzKnjnJo~K=1JO1~L7AYPW>DH}pf+J3whH0J180+fkCs5Z zL@>uHKmuThh2+wR##a_}RB0RTIvCbw>eVHI!@W{?lt7C6G*2@hQ8m(4W@i2AWJhv7 z!8iHB$`ZaGk^IECp|zv!$je9`pY-c{szZq8z=LGJRijhGk-??z!6d#Rp423`u1g3! zsY`0qU2CkFFs?THR)yPoI%jH@9aL!`fXSm;E!GsR>pye@W{occ^;Yp&iv?6IB_UYu z`BG-0gi`LxR>zx=n~`#SYm(qSPIwR&_7jyN?Mk!2Otw1iw%SPcM9&=-w4tRI1(3!2 z5l}Y(hr~esTjZ?&_f-G-7eliqTstprXDaQ(Z>8XdA77jQUXC6AL_d*K{MnlY!cS^5 z1^sQlWrYLXTe@{IYrIMXvd(}w;WybNo>dy(EYUEv@*ah5X6k2-A_7u^Qw{ZH)GnGN zhlX4TNd;{VrLP_ACsV7gB*V>)9My#7l3BCH>_7E`1RK5t%yGY*`#iKbDWSFx&>evo zk0EA*81vQ4Zo!Az&Cnu^$LV#cNy1h%CKQMb8DzdQb1^Y1{xU(uc3BestnC$wLv^$& zn)ZQm?lPp}s*puwQW8Z5mXA~(TGG(k(g+n}A0ISIh8w7=8wF^HsXye}S{My5Tm0pc zbcv38&z5;~e>5Aj@ZFl$=z_8M6&afEsUJ1Q)<&uZHxbU~M3nieQMMCH|ODiuL zQ!9c#88q^J@WOc6if&a>G$Bw@5hT zH@e_Z-l_f4=yGZH6Js@|pKPb*sc!{1@@WSg9d)?=t;Wl+_-{@U9QDPG7F{>^()b^5 zR&XP$AAL_s`Y%9SGk&He3L@BHV`Xb^vTF14$4Z>lGTviZ@}EJwCZtkrRoj=Az?wwJlaPemnBs`KvsUe*iV1!Vcr~iBXTco(A8Tguvbd(O0 zNyMxB9w1YpJVA=hMOT7ApLs(ISn}Vko>i1~NdjnLoyAel;WHj?3%E#`EbRE4xu0lw zpQ0bjlKt(nKz=aapqL}F+bDVBE!t_4sl{1jL+x~*eIQLJi>H!6T1+CX@j7YZ$}OG> z_6JTrc9BiDJ4HTRCH&g&AKTbCx33l9D)^HMsxwW{gIoP|r#4z?uKN-o>npMUbT8!M zC8<&YaZ_^HoKf=ShP-L0<5T8-P*gg&j#hp>{^pixHm;^L+}1gOk@-WW!#-<++s!3s zX0xA+c8Al>Ne!1U3GgJADMG*vf%O-I=O$XpBU9JNoh*)Q&h&w1b_^Mek|f7L`>Y>VmLGY6)%y_YZIaj7{iLJs1K{w3MM zzA6+~o_u}gkGLCr1bEJQ-&5bAg}-lwqUi_MxVATvpK1#fRXP@%Cb)`1w}T*j5jpJ# zG8bEAcM^o9-fipQX@rF~YlLuD6)5WVb#hQW&U!qPC|+^O9Q!fjip?x7hdoSghYie^#^c3;#*VzFo_!-0VRsI9Z~rMZSdea^7;<8+JqgJTB1 z>G(S`u+aS%x^(k9m^l@{A?!64KPjy=@?ILpk{WRKqQaZ*Ee>fry)UXnGr81q1eca- zMOKr&q=nr83ZBAVG=;jPtHR(c36R7~km4IbMgKwtvb!~iZ?dEO(c!{^6<$Col3DyrA-|E$*H$Ob z;{7c?T@sz~SKFB%C*Au2ck^CwQ}ItJEKBcI7MdH^H21jv*&n&mPG>VmBPY3a)L zp}^YPeRo`-BVn~AkxD>-M1hK}0B^SE+fSt79D-4@3F^ss4*lzuZ1T5HKtG#Og8RBd zYPo!KVG$hgpI6n0&3Bq&KMr=h6V!DHI`FxWSIP&wala972;dk>#qM0Oy!$(2{|i=Y zAo2^=NZ%T=p7v!?ekR_L16%{AVJ>@rW>)eCgUL=qX6lkmb-d4;Z<&-3&y(U;LUFKG zz|DkR#UkKS%I+1oD$Bk%U2R>|!2jXuETf`&qrQD6nW3ZxhLr9Gky3|lq@@|UB}EX_ znPKQoX@+h|krIbeIs_3V98ek+6$R_h%loY7)ARLwIBVVOUgzBV?6ZH@MNsDb^oriY zSU>+sn#Z0{`hn(I=fJ3j>nspSpH8jkiLhE=U3VKbWX$_-g+AQU55K@LfP9 z$RIt-xSYF&M?rFeN>av!owpIxc1Bf%s!nPcO}3R z5{RPyUhA__Wq#uQyL+VcL^UIFTz3HJ#&;i9C-Pc)K?k3%KdauhuE|_7P<&@o>e8X? z`ibn3E1OtRx5zS5PP2saJEI|y@JE}e-ZuH%Dd;a3HrF)n)w7$TX><)~L6c=cKKV`p znSelW9=jGqYA!UIBhY~{SoVuFcLS(4f{JY~F0_qG@z!pmIo0`8V9?N%Hl4wcHP2Q_ zE85G(WlSaWLi>V-+hUol&ccWq<-3XoJGT$%oNo0O(s#U-&uoJ!S%eR_!%|l~D_uE@ zsN)*Rr={pBr6{+vR6^JB((6d%O*(6k@DKhQXNzO76$UWM?zM1v(7EWXESN2$fBa(^ zl1S&bou#8Y7%wP(k56qcUapnufunao6kJ&!@`20F`^{|H-!$>0PZw3neuF7~53cn! zFXF{OvW5}sU|qKY{;m<1t$$Eu1|_*zKdJ!#Dr=WX1nhQ032KHJUnusr z4hmReU>jBR{E*`F{4fRxS7Om-^|8C>rp_2Vpdz6z-6puO##oXnBa;5>$NXz-@n-Y> zoiL;2xJ|&l^z<+-J*TJiqAR$N3AnmwvX=^l@?OfsZ(V3hZ7!bC6Ov}6cB(!t-Vl;7=( zE}2ypq`&$-ndHk-L4HMT*Afn+kt|_Yp^l|Bgyq{>TuhPM8T*9tNz2-TMjUJq<}V?4 zU+1y8M9+MUW5ly}^SfsDp7E#3^xG^Ymsv2O&0N${`>Y( z3z>k&b~J)fJ9fht4m>Khx8A=a`Or}lgw3@uG~8;~OLqDP`t224iyZZ^-4>psg| zq!0e7IFXj1LaQR^v-;y3yUJ>SCBwD;(nb0X^TF7eD_VYUOjK5KKhP_!6-<;Uu~^5Z z%J&-I-BDN#*%da}3jDBsM||CPIw~r(3o-Oyc56}kDNevju7bFw&q5>7SYG!pgnAv9 z=U0+1T%He>*9Q5q3!n_8} zweb0TJDVw=Om%Z7u{YiB89`sh73LH)=QFjG-{2fL4b~Y91eHFWAa1HrRfKg1(cL$3 z%&W|+y8UQ|PJwn{Qd^5#@JFZ?)8J|2Qjp9GgtL*Mpwhe9tCL_VRJpaM9K>*UqnB@s3-cEr z|3E^RE5^sx55~BM*{dEze=rsMDWV*QPJh^KJ15aW! zFBLCnJW51&MMRXo^5d7I!i1S~MPCJk=5V`ESjn96zCXQA=7Ns#F+WF?<)ZGSCCy;( zgrIM;PSlyVuu^`)wfARm5<`AUkg}T@eAEzp^`#z72Vli2ZpJ$o)nGO67HeUEh3UoT zn%&RL%ED?e*+yvI%EM)M_EozoikZCxNQ}@14PXUV`=$iK^E0yk+74p|7mMo!Dog0p zElf&+(KmlbTu-h04LyPPF!6&H{aVZf7k1X9pg=ZGciy(_;MjzZXynfM1DX`@k)pco zsvR9UL=!Np$@U(gNDIG|osttOX{+ZwnCvyxZy0v3cGrDrT9agzYbjWGX1_q|BfWRXRrhN z$oz}Glk*bY*Xhx<(FcnX&K2-0iLPvZnF2Sz=yGe84__~EZwHn4vD8Rrnj1wmjwebS zr1Qa-P@IQhMlHeKKK#fYeK4yH-6Mt}!~WH@AI&go99KyiBUW@oL3@OA!y|>~IsFm4 zC@(-gkE2uO)#!L5?4_XgHMw7~yr_b;M9|u%^HUM0_cN)NZhfQ1e~Ntrklj7uyX1nm z%HjjtpQgAxwCL0+Lt?x(qCzZFNoYhTacfr^!5P)-!yiHlNn+ z)SC6V@(YDoiC)wA$1CG_LB}>akFT{ArrAC*o5Ar4Rv;>`anR+yRNJFF;YsNz`k#*z zZO^~$>(Bh4IBUc&O~Ji6_ttrI< z&qS7&d(s^Gx$JZACG>uwHnwzmeN})w{4qCY2(^VArpU#-v-P#ME1_O9xJ)(Ad#4cR zxVC=d6RG(JZ!18iAwpCGAoTjfNc9o_)Dm^YxmHlV%7rOmd_*l=ivx!TuVqP~yS}gBQ7ige0rcjh%xZ+mA(KSmOjG`JQrtjkh{m`uMc`y&sL_0D3iv4WnS}Yz z)bmJFLmi?91*Y?2eLbd@s`;^{TenGCGWA2$R@FLgg2-GDlC1I9X&I$E^K|dB9HFdB z$ac!54UmQq_sl=>k3wc9A-DE3yqJyUfuLv^NYx=?mrjr+K@QuQ`96zC|m%P8R& z|L@)HR1-BpB1bOhvSh3dH3r4NiDoE9oou7m*jS!v6<3Vxaxa7^Lp`l+;@C$np1wKH zRaQE!D^{^YUoFMpSk>GSg@Tb)t7XoPIyn_#vu|MY)Ez}7_s?I!4}!UCLcmh8LRLxE z_4Q6x@j7l++t(tDZ-1^G{wg43v-Sff5<;Krr~y{W98sWPfM$$X344)>xA-hXeZVu# zZA2+olRg*k?6o^-PL}r=W=DYNQ?-0oM)LQ{B}&g{@|#5l&$4k!?%gI;ib_;6^K=6w zXXPD{N4Bi2D9?wcu}XSUN*CcS`)+btVv zx?w=*I!#nlci%qaeruRVDChsLC3kiEwR>;GFJwU>7 zB)A$^WzVNN;OVGYCuZP>zd|(11kmB53`jioAQ+cwx+S+j+5(wn`ou(UH0sM=B|jA2X!T}7Lt zAG52b&Ta5ElTAmKnVJo+xDUrWtdWZqJEme^d*A2R$`_CQ*3BYMDl=!uSzZ3L&IALc z1q9^(joFiJmCw$%L~>D ztJ*Z2$og9OX{{%4U0r4!C^hfOS^uwbeJk(*dVZYn?!9ghWdluZBlP_W|24Nf+iG5g zwVeiHCTb~wq9~apMrrC&iXpF|6VGd!h zZ^AeAJn{1MF}L@#&mF^G#cGwUsRzdjA%-NCJ}ugNTu6IpeLn6ujhqYFhJHkD^stgX z$#Z=F{H*Px%-hXJEZ^Jgi3N&5JhzU$EYE zfYxXVwsAC1;}`?Ta9$17TNc8nlfnwZf|(dd0#|EAq1gNHtqm8k%~(`D*HU*!h8F>4 zOF)0b`9{%ciX;>Y>VkI+-gNslIqPvz&qhBu=6aH#e4%2&5(*Hp-_pIzz!K)E#|mLx z`polYd*(l!zpGYC8kJAVodxfcv0+&tT9%(77fKYPSzg`q9k zZCS3$dZ)cR@60JEcl__2vQI33+vgkaC63bZe+13F1~+{hSluEEZh6bbm|Aij*m+qb z$j&WyJB=1tjlAoYS|cbvHE$h@2=|tfuzV0u72G-w+@^baLTxJXgh|QH2Q)K030UFi z_5jnW@9rN;9fo8gO}ZmZbYE_X2)2RH)gZ0Zv?U;4IzGa}KUTUquNg4s2imaeCg09 z)IqPVrEoA%FQY5*P|qbuMi>f7R(sm8X>yRZ)#z56Tzg31G9Sxddkxwp{! zCi`(a0D zY*QVG8^&utiZhrww)s!HyyIfQrC71lw*60mi7u`24x-fF`V)e?;+HqyHjP< zn(J}&!8pb}SQjVe=9ftitmcz2C{jO4S-Y)+rA>P#)*=OjOjPUr{`BF~6tpeDk8?4v zwLf8k{jq6-TvBmiNl0^1OE*l&d&Z>jG-MSXrF2YCb`)FpiJV^#6y3Yn+vebev&!Qi zB|)v~r6&`rC9D)Ov++Rrh%uC?k*@Ve^|Gqeyj>wildfLlTyp_KdK=CPy?UYjX_mHn zKA>YkwsIH__k}2QIQu`#?|5hxuknBhnr=-A?CXPx)Rn zf4*l(Di0hOIA5Oudys{@Z!~g zvo%|S5Hvi|!ukwr-vbt{nZ!bqIOkuLMYS8?mX#fz@WKeJx*+_;>4M-TR zsNyk$n|2bzC9AGTMt7YXoGK9~XN(@>82~WPByyWg!a)SxB95ZxRtnvmEVKi~zsOPW zmY*=>1$@jZw36sef_1Zm0zbSk2~$l&3F=zbNl!*xaZqfwtGafF8hLJ^*y8r&)4Liv zDSPMIm7bWoZd%%OUp>=p@k4qT3hT;(-`DF!+KXkI1?4AnyGSwI=WZGzmzi!DDHBZx*WG(_C%{ND4 zg~zLXd@bD?;JF>*!L#?`)wWYGr(`%{-EqF6RVB^<6O(sPY1=ew`VWzlt->$ zN9y14+pN8jld^v#XAm#cENg6w&V)%SGFNuaX+i=O6O5zhaZ48dX~Wbi_e|JAI?N~N z6n+P5&?%VmR>T)4sxgjj8JjhV)fYvFG&WWDi}!O3^)c$T)i3Uxw|tE`VH}v=@(Yl1 zj=+yL_zWi9WEbAFgd2{$(|nOT$f__VH|66x)bYz!9}JfmZ5~m8v8h{LX#Bb|XOwP@ zm}%K)yT)E(^5NY?UMB-1Pg(v6ex^m|9!!eumZU65as)Lm=;{u+3358O$>Lubiaid>}%Z8oaIZtgiB&VzD+VPdtIEvT$r+~r}e1$@lZ;VHyrn_Oq#&NY8vQn+H+09q}uG$tV|(Q-?@dVD5Jl0UlS zQyR<1ey9|Srq>hd0WjK-Ns56c03GsQnirch^tSw9kLjnTma}@n0;!S8zptpVhxM8W zi5{y_C|vr5t-G7b=N0!<-9ZPBydN9=9{KL8FH*02@|4s=iMZITosv%2ns&pX;T{*$ zCI8l-wkdC0?ufJrCXah#0DSbO@3UACD;7(D z()mYnDs1>>)-i5Nr3iBRyuBKFoa)>|g2#~Zf57juTpl1WcH44&K!2rX;rCUUb{*{- zmG8Zix6R^#eILAWI!H1jLn~8KlsZCDO-Ta&e@5PAVsD{Am0R)#qToXHt2n@8h}wV* zW>-3frJ@80w4w7*x?l~3J~$AxLdoiGPu4Bry%>4a`lFx7&+H`-@J=-dgDkbq*V2_nU9YrU@lE>T%MU=bF|#MZfXfO-5I%~8 zO;b`_!^hcdRjA@Kzw)8F5F0)dR~^a%E&&v>>|n@sT}1(|9y=JPBPFR^zcO8f+EiG- zjYhp=82!X7NmMsW*(O&rW2(WtXEZNG-t3EZT6nb?kzvBM8YWe5wDsS{hcY0-0%LPr z`AVG`cS)3&sbD^Xh4olRwy^_nL5#pJV307fe13;IAoVrEC?Q*$-u(Nv(zr&te`Xci zh%taZ%QW_+<^>6k>nJ&clI*n?Su5LMA5y>4K9UxZwBMZi6_Ew!ngTlBp&!B0}qycEWrk*Gdmqjy`ruSosV=`l5@kp)hdMOxC zFB1C~Xngx59N!~g^o^wcGdjb+tlCbRkfI`((yT%9`CL@rW25#4XjJ+NM z`!(igli-bO`R@_Z<$epkVLHoEbCXjf3KkobLLYt1O7E?YyD1s-hWh-YsE4e@R=^O& zVoi87`Y)?MV{M8VRs+GpkbalF*ODXpGelW-Ot(7>1^a$>?WWpB zkB)BQbg|54I~ROGdrxs@oS@oDin8+pjpgYUNB_ER&k2^dAjIS2V4c#%GE&Dm-MPyF?>Eid#cAg74hh8$WHsES{HtV2)1 zfF&sOI%|Q|sd>WI16Un8$JkfHOJW6dKeNNBa!|fv>w!U+F45_m0n8R43Tz;o47+|; zU-KGu#MKW=Z^*h*K0wL6RnF@6>m#+_z+0A(0hK4VIvmZs&}u20%^0N!AQ_kJM9k33 z-%F7u@}(M;iC?ck#3>Il%Ib#E8A;9)s1aLVGhPP58Rs>{tuCZ6#2-)ES}2otWw*_n z&!bsB4Sv$$tXL`Of49*-3#B#wIt{-H*?HBhBgLBq?*Asc|E{JTfVR*bd=nKLn2#%s z%UXK8E7o;HsY?F*~Ta~6}%fxTBW zgD}K8Pf9tr3U=>w=KvX9Qo>c1oO&yh-u6)#!F5@SH@!`9`+L1k3=3F;;0b|aEfRveK zA_GXk^36QM3q%JN!jA>5$Ya(md94iRJ!WvX_{iwT}k8YF}O%=iprIYD; ziQb^qt0bMZ!I+}<5<~&2+AOKaO-@4{E_o0Bt8@HUGY*ev%TB~l&4v@|rg>ffl9hsb zjuT|#rL|drZ_0Ha1@W*A@!XoE@~?oOwO=l0R3>5$(uvWTM3i4OEtxd^SMY@w?Tdk_ zeo@kX^C#&DzQ4+5hm{uMPw11SA+S4S7CRZisRh&mId7hqdv`waAZUB%D+)8s8kxyx z+`^d7%N);yo(tG*gl5zWgmh@p1(SbwH_dSz&Uw({&k2=?7!30t{=fC|%vDVCelUzQ zB-!H&a@0JJ6$|-D`N-i$Z`>j15+Wq#^V#tgt9Qlwdvh5jBQU?u!fE`@>jl^NF#&LB@>QZ-fa35-omW@K}tjVt1K`M zM8wfDRArN6Ee&-J$(w(~KgcC3;4a8uH#$}UYRTtVxTBbY0h6Q<>B-VZdI_Rh1%Utc(P}7StDL69rR5MhFt2AgWNm;B)>awu7%(d@oVQw2jHsqZ;Vk)p8XRI=0jM^< zpAjXr6#{lsN2}3a%-?m=H|uTgBq#(k%i`U1rSOm(G87)xY3BO9mPx*G_NGdTzL3Ig zT7ZsWSVaKfu3?t6%wAlsHnfXX17TTpHCQ4*T;mi38Ka}2s13UW2fMS~7WS^xpj*o^ z=`~_X<{eD@lt2&-*f^v;AR)Z&Kzg9eSUzQ~3Uo3bi*S{4+@`$MW@DE{Ua|;ydI4cO zA?Orh*pNHPKxwuTws4}L&b2o=b16v0C+cdb_pq9B{cXN^-t7r=zv6`r*Nk z0wO3E3t)Qy7>A@gs97U$llt$3I7Z1-&17LDm90$u*FwxQ1vIMu)Zn~T`i?M9ePR_r5H-H!Ep`;vbpjYJ~euSX+Y@s zapnsP5(^}|bCVA~Im;frHWn^Jj4W8oBw4>11?FbbmG5AtP+q!WD2-->%m`99)@>!( zZ8O&*Tvh|LY*n%$i}C>>r_A)UK(;?V40c#}Yq_gFC;il~0z{d)A1*(U|4#E?1V8xJ z#YdQ16*<_O*{?URCwtEN`!Fr-V?@kLs$_~4`$W6aqwDwe#qNwzbp_V(kl|QduIVY~ zk?~=pDds}pV+AxO-to3;fNBm$Wbv|I221ALarLC}<<1Wl_{mxc+)H_C8S+XQuE4fL zg0F}$6Y6g;Jo3-+65yS?CqRShOYHY}9qns_{+xGk^>#~ zLy$VgGF(TVSb@GE0H~AnU$ZHC0h-(K^iKOU=|7mYDe^|{abK@KtODXa3oO6V;qU^? zL=qx$I6ehnuKeh0z2FCFg?R<(O5x_9QH43k_6b1y(Z3F-&xrQP zdtX;M!>+iu%uDY0`SDF@tcqPqe%WEIq>(*Jc@yGcUvtZzX~~P@y}yZPpXU%j)dnzg z2&g;_toytOP5z9tk*SyJ1K|1fG`tEaRCFAL5MFk*jJmQ|d_{Xy3I;(qJfq$FeT=?of`_@GnR-8UocjW8J#-x;@bEa`Mi!(? zZYX}|ZdjaZ!~tOOv}W(7fw?DNXPh^fq;q_UjZYJJQ;f_sK;x?W4>;YG-GK3hQXO8J zdR)t5R4S_*Ynol_#EPap9#-3TSuP+48C~Nd1qk8?`g`fIm|Og=5LMf{`>O-}Y4Y4r z5Dy$RC0b)NdGM2pz4@wUHGm@f#!E@MTZi>$v_1{tY(9TVWH!ud=ZKl`!ji7zAKll0 zzRMbBu3SVfcb)2vNQ{EbKveaA%Fm0Np7n$6>@82Uekx&MV@YGr>%q`Q`5PLOQBe?k zf2{x7&(vKz6Hefywso}{J&t+a`z|tJEg*UiGKeLo^pM?K1uXfH`CPe0YYIF-N~9hA zpzWj%ubmODK4|TMW$jeWkEypG8L^=IGZ#Je(*EldWETeH%xExSFWPu9{P6`{P$95Q zhMP@v6c0e##vj$hOm34={~T{09j9V+=by#c5lHBCU>xI%uX|H^E-Z8N0UD|BFT&v+~|?ec`pgjM1zsMk--NX9P z=VZ8gp8(?kLX?bq_iz3E-}P%e_2)Ov-10kL@!;gQu^&&JG>f^}2xSLGJ&JAsc$DdI z;(#Bs1DFBe#{gLR@^^)YN0$#$u@!|>SumMczVZ!A2oS!uT<4eMrN7kx2|a1;1OWzvI)o`?WtKXd%3i{X{DciM;%l6=(+9t z@6Xm21lO9rlLi8*Lo44F?^cn26534d^aHgfmd%um_6zb8szkNgDrwrpj zP#W~bj0K-t90MbdPt5!#Dih5Z+;tZ6Q9tLBWp^`DRdJ6o<2vHszGcI~>t+X;IO<~G zIGIbKHfC*NdE%yaa&{Kg?`Yet15u;X}csLXz3gas(>IN{K^8?D9aN0x|!uOY(m=nMIUK<2lS8b0_i=+ND-< z0rR(QAm#y2PlNL~GTl`h@#67|F~8|6Y#10y-Apfh!tB=iod-Y0hC+JAhn$dL{8NDc z3%kY!n71ThL;HwZ@gvCC4xL{^rkc8chGmtvtw2c2xSd|m&XahlsEmCoC*X{d$787<4dQew zlfEUEfeyLD$x&gsvek@<>b@3icZu^Fb!8F3ItIpN+EfoEKsdj~#>bO>O%2&{6jK<- zxMxeZ>X}f00s{vba?97Pwr~(smnc-wMv9}l)V$4Aa!Hh8~iZl3v>#CLk1C>5 ze3_APzkNZQ8R<)WR=Sn)g$1!@cCujTl70gALGmUUn;FrmT3AJ^6mz}I_4JbM`n#We zE;K@Pf<10Sn#G}fo9?H+3-}OM$u&FOG9mYv9Q<_BMH@?uazQT)k)k@JI;zTA;z8l-8^PFVQoYWkpw2lo}vmwkK^wfFhb71h{F9&}o_Jv}{5#HV|Gu9=@t}TpxjeiBvO;25m9RJXEcUK4G=m|mqW~WnYcKPAeXZbF z-L0ecLZgAWs_(?#0|VLeO9eZpUSG)QAl-_%B4sl5%tZN@@(+uDxTTtuan*EqO=IONHbguS~a6ulpIHxl079R&(6i+~) zUDM>7^fsbWaqABs`fl92xx4eux`@-F>#f;TrvZRTWqJ zd;3f7#px<5SpgqHN#nEJD4T{-L+!3M!{HQJf7=hPgBRkw1Hg_>Rp{aeW=H(r#v&w0AZU!3MEc^(F>S0gXztl2R)!IxEw~U5Q_-r1#gIrPn`+tM%ZM`hS%<= z$_0B5Zeixa1Oc=KCceyVA5&j(#fSD^4ZGr_+m3jcFhAqad0rZ5y8E$p@eg0ZQL6i>c6LTCZFtB`smq5)wxRPY)sN@ptXJduO;6dVi7K{z_q1TV#FmM>cB|?lM~~@kI54d-1%^3ABEbhgj_yV~n9v*W#Z!C!aj&Gk^FAzNdYX9M0L$alev%i-c<1BrH2TO zMZ0gm#qe%So<1D!t62Xm$enHVn#YMxW)tZ|ja`#>i2v?>aQ({VtXr0wwZTe?@R5a3 zFU0U*M2mI}^yd}U`OcMHa8T+62!C)LkZWr9$c$}aA9LPd1a1-U=}1u zU}EeyCU`7APyef!aV=2=S=_6;k-zd8W)h%yOLV6v@#YzkQI;x<6~aTpiza~V&h*4X z0OzwfDyI0K%My`iFmaLS`wekKuN z&JZtmPQ`;sB<_I{vz6s=P!kgVBEif-Nqk5Yht2cm=qKf^gamyH8xx5-vqAgdpa3GJ zGm*zlkbwq(N>S3JGU;#b!LA)A`JKXeD6r)>_f5@$$Hui9UWFM~q&^->HTju(dY1a) zA$vs%Y522hFMsUfoujj^95PC-hohau$3(IvRHcW z8F8~9lX@au++0sDDc9hG%S}*@oWX@GA}{A|P8~G#UR9FIF;wdRBLdSfV)%WA^K=(6 z{2?jxQ%^RIC~hQ{WWvspj?TLhl@nuY_$%H=q76)qgV@_4^Nzu;V))DK`B?V!!(%G1 zsC*x!$HaL4q;QVw-Hg9^Sz!%1;<6wq282gjUUcuHjRN}1ztS|=^VzWl2}uQC$Me%B z!h#AjLfFGq#26GPpgeYjS{tOOp|I>NxEPraod~bCGp=XK@SnI_@0-ymme$;mMe>5k znj^dHio2tVd&CN2_hE7S#m{{eW$Xx}b|o*8+{O#DY?B}k`z2k-Qal5qXQHs*t~4#O zbmaoU8uei9ZRv(@4y7xgY7`$g!HrM-Tj~$UmDl0)kiTh<=lFmz=M9XFM%3Zw6 z(MjdMg!y;J%R3E4=Q_e^WWLsxzxzo1+U6Jh3VlS%EyqdUZ_!U)z!ud za35sPfOP$LT3K76R4~br0%)pMi*l3<`^xIumopkh7})~~$52Ikh#IEG+OOso2SUw| zwBH7HDk_dPEO584?aM2WD5~}As|`4)g_wiHaS$cHx-3;hPEnoxJFvujVefv;9((0O z639cf{xrPS=bcdEfl$D`lG}!m8)h|fd<{8<4VUjV+&?%+78jN6<46V#P5qNi16S0v z`7&Bv8+!?j3p=$a4CF!#BTa6eIRINzH|74Wk)Tw8`XG+%>Ft@MiUapSziQnp&2F~M zOsW;Zjm@(M&36wfz>`%Q^@U3JnlQXYYaF-5e>bTyKHgG&e9Hdl&4tE>Ouw7_c;BxE zEZ+3l9ywVA-rGm+%eJ1_x6%??e>Fb%^RD)SeXoOqMD;a8jM`vRkEP6-9@;}_qMO($ zP=@}{4a4>c&-TBK7rP3HZ@URTY@g$3;8i0z*tg)#AXhTW$}st2O&vGAfvR^M+@~ED zh2@ZA;6hr%sfM_k@;HK{<*2V_AKRoB+|ZMJ-l3CnPqMfR^{3;-ZkL&VC#1O3hNj8B zv5>Bq9y!&3HOO}ax;O83xi@tgMYk^`=7Ei%{t`W63{AFwy6u|^W9{`bH{==#OAn+7$1a9E6QBPrUZ+CQm@!K}p3Mxiy+_UI> z1g`6s_yA8GSV9&tPBR!mZtj>GDETuGE!OAp7Rn2NZ_NYCMn!K^>Q@g#6xzT-(F2;!Q|Gwv>SXhul+NvxvO~W%s49qbE426ZkcfEq+FSC=x2(3mAUVmy z?fnD)sgZ0s5stlJp5vgNJnt*&)z6JeRJfuRR_Y}f5O*fKZ*h=zr}Cs^p+#3mu8fVw zCZ~EM$Gp2oF3dlc9HaNBOFxNcI%5o721Z?tTVa?NW`9{bD*$`h8l(A&x&6oQMGM{| zUMkn#3NwDmK;z*NW)3^4JA$Y#BubdPe1K+g&f(3AiK*#nPYetoZ(^~pP5P)U@o4@F3w^_mQjITfVt=4 zn_bhoa|(9dyjO=qd>QCI&2xUDf->lqyeOE9pO333dhuw1EA3Uq<^oo4fwkD}if^(U zU1x2$gIM5VWmcstbS9W_(bFbEsq@xVsU@Vh;?dVv>5_~0S4~URmrQ1|FESN+f$e`S z!0gX%)o(4?{VUdW5^p|tecfF7+O@?2id|xritsWrZ2zl|IYs;*eM~f0FGIXU`rg1qXWd*mCYDDK2d2x0fy?)-?m=I&%6q_v3k~!93S-T+ z4!T7DM;~*aUm53xPY_WO=GO?rNiuO#r)L&U)=HQ31=KDNBwz6|=DN_w@T9sYQf0U@ zOE?ciHZQ>Z-MdQHBIt``cs}Oyb#9BT4-{AA<2#>rjg#XU6`W`KevCupq^k_4WNY1iQ|?O)u`hyY^%^=G=U9 z72^PLc~!SNh-R&T zNI}tgEU`E4<+`U!+tQK?29N_K;PGfTpHn(H`~%Cf#H|Padh56IA?C|Av|;n2!s+f2 zZ+NgeG3J_?$k5X`JD!s^kL+;pCam<@2~Nv87-6M#pJzjFi^187eVvgR4F^+0&t7g< zy}6Gpx#vPu@j_aeX?zIu@uYjqdJ}W~3tp2}gHJx3qwQfP%%t^K!4wwR4^8T<8AX-~0PH zpgnvrns{fJ{^}`!F8$4uft56E4Q;7`cOBk91qO+Az;UBhP|ym<%yX8REYrlKw}sMG z8lOyBp!hiFJ!QvYifW+cGRc!b;l2*vO(zE^t>}*Xga15x*)^xNwv{_tp(aMnlwPC` z*nh$DDdaSk+bA%Axfc5zq6!B#Gb*j4v9no1XBAm?2fY>6{$F@gce3*Lb|FV|mjAHZ4n*txO>-#f*@Kbu(t953|&?~&4JyLOM z)rdP|WM%G~MmK_tse43K^$MUwC@{0GNMp5qkJp%ZZ1|1Qx=vox*#v0&ldBDH46c>G zuSZTnWz>Iu!Ix^2$5(sgsmv6xUg8VUlGjqE61Uyy{B{hq*i%X|_@xX9v|#L5{HpM^ z>wqu+^y}zX@2|I%%T?x{%U;y7!N=u_DVM!9%{{^W9z&bkr)~7zDv+M>nJ9$FvSkD* z>H5Roe}q?_?lh$5^5K6Z!i4w%0rHrF%RFqB$7EWHH;8>4{>Buzv5X2v>k8#!GEMj z0EElPkht?1!sF&42`~rmZs$BoF~f*7-*e!dKx&MptMzrAMB6DPe+cDi(N9l%Wq#+z z*Ji${1RXO#Aq!+ez)1L9(|II6O$nH~eT~S$5iRyXIO(tnN5{Mr4plC;opP~3By(yQ zeASIb6P1(E!a5Z=$xsvRH&HMg|DEOLScX9 zg3#{4m-%H3c8KX~sHq^Sw_F^6L}PJ?IKw+?L*Is;plM8KPcMb2u81sz_O6X5iWrO| zLJRq1J%)AF7vpPS8h;2W*c(<^sUFFThDO6QH<1Y|dj}E{blP4fmJm;d&v-eG{X(M1 zLK9Ok{St|AVDNlKt81CMU(obZ)-!lp?Kb5HOPT-REg|M4uaFP&1|yh=@W4(OMOrqd z6}LGU&EO^tTia}nzdi^=;DqR|o=dKrt35Sgr8oUD=iVn;*;?nsoJ<9B*(`Z0dsh7e zr9Lx9YfvH~e?MZc_*C&G68boBp7Tj8>{I{%TImlr=I{i{a#IyBb^{PvqsxQ?`t=oN zu6D0@$8|*_DxML#;X68L6{@#Z1!0bUfooPJ-`boa9$LLC4TM$Mh=mx88v18!WK@_S3Dr;BvzpVpoe^rI zDg-e zz^3|ox1V`icdIu;l5N8G&5)6hZ`yC%gcRu6aax0NHzRY`g0lTiK=|R=XwVItZNKpX zkIc;oOO}xYWBz6rhd_6$qF0=OnGn^-Gw7o%H<-gZhVJm@ZqhT!$DQ=Pck4C^E`seN zT8P<`3u!O=M&ZC(OthbBa$9Kd75nxX?PtD$=0?jT-(W&%`!KS-))A#;@yI-eP8|MO?$MAgBvfK(2 ztX7$QGvC-t)n*!N?i$?e#{9^=t$78C*6xp40C@{VJ4VOLlRXAbcn!;1*IgX?~6K&&Wv2tv{Lbq|UsT7OJCWfYC zU2E<`D+@1mO}z2H@7cp$ZnMxERd+x*BF1u!{w8Q9{acP9Vk!EEKwZ>^{K?tplQ%>$>}4Q5w~8|WT$^xKcX zZ)(&r>xWD~-*y&(DCgzCw^dH2(23LCoq zlYsOncsBt3lnej(SpXBaFId=ON5w)zTs=@8Ht%Pbfafu9;B7J-cHt{3?kB2~rIyBN zPXhoxrZRO^@&CQ}`t1@43*Z^?2xQI^O@8B(cOFVL0^A*j=-i;{aS)B0;3+J6qcZeh z7|n2lerF%TMCl$e;~cl>b$b~0^HA&1-~|~Q$#ehk+DM?6rKzkcYV2ot9#sUK6smL+ z@$4wrU<8;4h$I;SMo7j)_bjSek@HqlCPf%(Fh?qJDRu*m$GWEr(cbWA|0LXtVLU4&z-h9^=i?hAPV$C2v5W?>A;9TI5UasHu%CZ;_0)P>g}`|lJrLek+$ck zf_t0+M^G>WcTszj6ch8&C|&$E{ZciOUKNcU4u0wo`hZqjCDu-JC4|gVFN6F=zzc(O zai_18{t`m3UU-5PRGslI7TTzDTaG1VzqzO>l^YT359d%q`7GbOKSlpxRv z9UGHpi_7*Vpu90kM|mf|Q_GHRk63(}vp9@a`UzdE0>7pZV)w;cI7FdFAXPlcHA4B{M+xqg5}(n$Cbc&e z)cMX*Z>xje{^NOz9ZerU4t_ieoL&xuf@2e^SGvG zdq>Xz@}h$F2yEWo#x)xGuwaXoRo{eTvMy+gn`j9{e!)b>Kn2WYsU+E&o{{y;Zzc1} zns3Xbc*~G^W%W|Y<3XVT0mW+XfqLiVRqw-8#WP}lSTZte5i%=Ln;5Rqqy}P1G8}Rb zm%Z;eNias0W}g6K$0)2*%wK{s-%(I17IGiZ!+KT)!U@&o%W43T1)f#+t4k~iCPKYT zKDbQM1S1-UiMq>s8);PVZmFE%yj+i@;&Thogd>b9B?HywFlP%fp(|My^S1a^K?p2L zVmBRCsl3gyZ`;?Q0z7L}%a4LpRnrpi7gybvR{8~3`TeT(qaz3%Bj|<`4g%^z=rEUR z7(WxD$PW+=ET(Q0qV@~*E5{SYgXf_ZPefabB!TQ-IhRs9My~)T?No&P49@JMNJmQ; ze<54_z_rfNSxc#hw@zHnHZMJco8joTF@lboT6H0kK^-CxVIB6o>Rx6YiNj)1WzDo0 zzp+|Bc)jmEr6OP6q820FL1519wb2ID1mNib3N=+CxJ}jb^D_8M)djCOV=NObRqv~$ z62IU5Xn{V*s+=;>njSmGJZK)**A z>gK-JH>}}rw}f02@+>)Bu7*$Aw@0r9#r}S^QwmNRht%k_EXUU_)8F4UxSvT!_TBFm z!rvXmoh?}*Jv$n$#Q7anwJlw%t;srXqsJimIv?{<#pUe5+=R~vO{$|~tMveQAfk$B z9w5?RMFi623VDWC-n6XTl|$p8;j>f077>sHn&*=H|8O-a-@Rak{z2bZ`&-eIwFv*f5`5Yq~c} z%S*xq>8XJB+3{DvO2A{M?2Bp$KL9Lb*~foR@}LN~`LRl#AXyw(;;x`yWPKzn1Z1Bw za-R?nT@7h9!{Q^(vyUnA|fQ@Pl3x3WL)2rqnaR98W6c{urLFjhI}=l$wQ*x zP-tjqRaJrJpEmuWK>@(5Efy@}Iqsb}PK9_r*Ws{nT==j&NLFKlk)n3 z^W3GZKPXwJahjaIUvL}dcfVI454i{#`}Zfy@^7f)Ul6;gHWOv7KykgNId}xIs{c1%R>e4j9a43@f2{KaVWebw|TJw!Zgh(Yi6i3 z7M3t`j|gpDnyNBkXuWj|DkIZ?$ew~y z3i_o_VO%r)W}Ofj%SNiswdWrS47Fy?qO05fERMJ}dLot{F%Js1s<18rd;Lv#mohD+ zhL;oHt%d^bcN7xov-#zr3OacA4Y*3~cxnJ_4vHY9a5LKtdSBCb&$EOTKv#;l3>&s? zySM%z2KM(LyS84ZPL0<{6ronTO<_8K z`20NYJUk+Kpn}d9PD?zY6nIO@UP>tZOFh(@dH)`;Nl3)A!NKNdwoDtgOncxxUr+ud z?q4w;$YKdQXXc;&opdDbhw)X3IrpS8jAjXZx|y7>+6K`U9b#UO$&d^>Xbryqvl!vt z$ddx1+dPY7($=f4pmWno-L!Bsb2X8|6UOyA)(C|agP2gY_n&1%IDmuBmkJ9AYv&iS zdcrEtm1e>HusWEbCBZBfUV($BFkhH9oRHlSRp<~}Ol`#jRv$h%xa=kbY|fuN8BO}r zu~pk5$p|MRJe!j{OSof(7f*uylMYuc9tI_S-qfzv0WQgWgzPu$cyEBthNCf`a5ISG zWVz#qEtyvq-wLZeavP5GHwk3^fgWf;2j!v0I{2Rj&MO2#nwIA!+h3f8P8M7V;sE%V z6hws%obDB&*DJWi6if<0P=Q0N7hib4g8%J?m7(@o->$H~gGRslE_*%+Lic!ng>_i2 zRBd+%{|9$wzW*EWi!%l*+iTWn_jBzC+`5DGua@pPt z;%mK+&4YT^haJZj02mdB(Doea@pVpFe$UziB!nZVO(G}}B7{%>NN^)qO##oI6M=ev zPUC)72q9+gX8z6!Ay)2)R<;n+@)tP|PZQ2B?&_gGyXSMvzi*$8WQMGyee0W%J2>3h zO0INTcMr!p&<%R zX*&`aNOl}e$tP5oL*jjqKtir&R16<9d?{#=MUjh54l}ae7tBw_XPrJJF{nrl?p`)b+w04S z?EbpEV^!@?7SOXf82Cnxh~*BtQY|5ThA`*%_%*|#EKVZqUf0;qHX^a2RjL%!G#DfH z$Z4}~Wv6nA#>aX<5^$vgE`62?(lXh46AHM!{&s(l?*0P+J;S3wAA+r+3?ug^ZUshA zy^!XqCWZR8MYu9`M+63hFZO`||DF37sc?aJU#>mY>qlQa{m1ql6=8Sv>U|+v7qn8w znBa+Pfn#t2C%)Lgh@GmK|0svpGfkhPh*h(bgjAJ4$w=`vIhP31ak^PO#9W||%@}uv zkYg#g4*09)cGe3YsbiuVblDeKb+yiPoey6VNzKAyyYkP49&o|@O_HDd+;-WHDhn&U z`zEK73P0CXedrgSNNb-0il!}M?#I{8jDbWoO(|#yXc}3fsq}Spm0<81ZktCw_mB#M zt8=}W5XB_V#h@o$h;Cz7Sf;LsDRVEG@_?Z+hXixyo>i8P5RXsR3r(K^HGZFQH_}Hg zV68+IL6-q_f${yc=xxKYNh1F>yCq_oP36aui9;;`1Sbct72#i7f`QMU46`M3UP1rH zqUae=)0pB6=XPBcw#>lKNII7DSZXY*A^}G!jAH^nk|bB~rC!P4r&fMpGzcC+!d75n z)z-?GcR`mxZ+;6OE}*&R=-yc(Y6n%^@a8$`Rc*}{jRc>M4vOk8dhb!xJQu!GM5q`_ zX|4>@NG+Lp`Y|kxjbmHtsyPe&`VmZv_W7dkHv*UN(9k>#^XqpnVqew&`73BC2c9Ot z3;$1nVz$&h@Wv|UEdS;LaEG#u1lb4f#L&Ju56m)i&&A7R9}+<~uom@Q+lqL-$0rfzmR)4AG;3qT`C8ig-a0Iy)bmy-ag^VSx-C>7rm~4_dU6 z3!RIVat3!0?EShY?I=rhV~}NyYx5veXR;vuG27$wGT$}g4=mP4B^+Nf!nUaYC=+a- z!%jJ0wu6dc4%i>eHFEJbX1i%1DcJX6B0+9>U=j*UDa!&cc%dks7kvkR=m^BOR0DBo zM-fm^fyoVHNQf<>l1xU4?}zQ?QpA@;8!OHMYa`=}j{0yLc@6FJ&*2m=2 zcOL)1YBc;LMTC&Avf+FTB^1jTsPv33X@Vs&L>EA5IYVOWxypzA)OF-FfzOY^HSbb-uF~PH-}#?^;)lc-;+v zn~c7_>+yLe3nu|_TXMmPJpqsp&*Xj*lrs|$AQ@&X?-vtjW=9e{rc;HWj|Gu}M89N@ zN))KOP(=?E{GfbYMD(rn`%gw#IInO)Gn+$t&SUm9p)T>VCq6Ot715bzdb;Ki$^( zu216q6LamWizYs)@2cblN*kMKK8oZeViuH~w6~0=I%9cWG1Iymyi+gY8(`^p%tR5o z{rEXj+OsZ|Ov#TglZRE(ntBKo!L}v6bZ*Z^-*q=LD1pj_^2KPvvSy$XSQho*95y=k zINiCn)U7{XCK^S96QVN<5-ptR~^4R9g9kZ6C^*7#%i2$ERdjycGuC!QeM2QWnB>U_Er37_&P1$&%($s0Ap#0 zv;K2D0OZ{3se>m(T&Xu0+^Z+(%v9dR@tFA@o7 zV+HAxyiGsx2OUEm=z?g=g{CkHKp77#;LbpbksOU=t}R*Q)d`yez!-QJ$g3m)L^EHS zzXS0F&sTXEsx8^@=8b$p2j2~|HZg41F^JmSTKA{sc%qCa`c3l$5;|gX8did2KDM!K zVp>?CgmloB53##1NXPqx9H%m5~(()131yC+(g z%g8~*%q8kHU$BO^ZYmQzA77>LPE)Og38%}cRQ^G{{_pqrlV(rt_O*RvmtBO0=9=SnkY(ilJb_%dqv6JP ziDxQ2vabWre^rMI@S+N@U9|wT_p=hh_R8W z!8nWG>fvTnI5~-oB%S1$V-ErbK62^JmTb?#_MFViMY93$VMP7WJ&Q61gP+w8H1^0P0@j+d}c5|I|i6Xag{bn$6j3koL zv4>(EKnft_n-Qgs=*5fa+$-&+EANz_MQZxO0rDs=Zg425kEtBZwT&*>dB^%$VLA^w zrUT{=>}!++lhc56(S_d3_@*s=f5CKgR*@!rQj@BEc;wN9JNySb1u8;3E5T9d80ZO- zh1tGI%XIsr;I zAh4xmCs&89aXVN};)a6C=C}G$hA|^uf+knxG+vfl;Qs zA;OIM8KSYLdnzRCiIX~&q0JBDbcFv)2QhA=PG^8p%K#NfJVFP+cOTpv3FA)z*1nFt zyVrOcJ`G2V#=ara=mMkIP!LxXgy9DD*i+Uk*ThQ7nd^l?~++zU|=|q!QAc1Kk6o zFNvrg=+-4?NcEjY**hlu3y)yXY0gn-E`kpzlc>AV($VEUDkM!s!*s;l`0vPWr$73V zj{IUdgrG#Xqx8bGj~P&a8-O@>w9kFj{fKHpM2S7Kh@onN1$R?>3L!sD zc=t&B+tK*$nMXZG+(YLiAGb?by+_%{#Kce$eMX8TT}7-L@t(}lcM*$Xg^Q0FQ_cRe zxK4J#2Na$1<>$Ln$KtVLcC2FCy>#6ZF9_eSinS~*f< zB32LwfThgFjz91bn%2XhAKakuVE~4}sFk2-eLTGo489>plSxYEoduRuEQXLD8)0J? zp?6L=c!c+W7WNS(1$5)j<1e-LYjT8974b(pSq|CdLa(nzOjz(Miw(u_boe9qtyr4Z z$5Wd+y8Cl9-EHyga@*#|O52X>x6?rNM>G32AV0t1jlIcDvrmB)VOx-RaV&2^ic+ZZ zRDqD}&N4jt!gi&=f+gmDX{Bc6Go`HQLbiC4&(&jd<5Qoz~{IySi0XkMMN zXP$~Y=lMn2${9WSM2B&C8zJ{{gOV^+2SATSZ`Ps6B&`}IL2QmPu$=JM%IJs^ef)Od zVdy4zj0K%u^nFf}^5@R5g@H?%`d)vVIdVR9s)!pDZ38_;8q3q~1fIOz1%CoWiWw52G zQ3MMC^&}Rt)ov*Q(?_R+h?ln&7STRW^aUK{HZp*`+(57pifr429$OjYTy|I*Ct@wXxGUFNZt~954?B)U2@t2VrLS@#2tD7Sy znf!vKLUD>tVC3)B`21F7lVjDw)X#v-SCV*nlYipxy42jnvgBQ=g?4g8oD!!kBPPR% zV4R5)IG#Cfq&(GL^}Z$X=0kxQkdoYhiny+7(jK|tj`oZ8sNLaR)?z#v2WX*!-m<=90y zrBITMzT+AR}BU^xx8yy`dSt06j>qg0jFMq64@cTN>~m zQ(7Aisjl*n(s|fDXzW7HHCB5~O{Erg+weOUNB*fl z2ko2Xc`-6J4fX^YepGq&4N7J4Nxm6rXuBVUKA)iWN)_Kw{Rd`p{VUJ*m&N$_<3o`I zf{8@#+(_SI`PhLJ{m&GV&Q`L{$%@b6Z};$o!tTwp${6sz0RtVwR}6_! zOOnMJy3ilD*6HWoTN)jJ(lG2^c4*hj7;?GWkMA7vvhdp)KX~UbqBx#2ZO7~Fs7*Ax z5PyrvOC4|$Pw<9TkmibSb5G0i_i_m7W-nsWW|)1XM2Ow;Qik&RcH9v2`MJ42A zv_%KY^(O6h?y2N83-gwt%9`QMIHwqf3TBFke4i&M3~qctE)@siph=Rq`=S*X!Z{NG zeQLX8sI+FQM2iWReD7Q*2uusGN`H1M^KT z@YhD)&?Jo6^IO>w-O z=sJ4G`zY&<%@#6VQ{mdn31`YaP)l?(1kHRs@Yh8o&FXl6rb(KOGqiO6a?d7sjQO{$ zl5PH0t@Kp;1Ipm~)AzvZTYQFNyFcw0e^-)7J=AOF`e>JrLH}1{JoWg9qs^iU9lBjk zp)l7yXcXZy;(YmgaNBQf(RHm^k4)pq$q#+@xNAjP8)bPP*}S5zpv&z-)6fRv zclJwUSsF1UEFIo>2wqtlclz&cR9uGZZ91IlstHX_@+g!brqh?zWsQ#&|unZzcJ=_LVee^i+EdO+AEx*=Ak~9MKG{6jpd~uXS~i1b8s294mZz&q3>?l^B$r)EAl+ z`zN3jkob>c@;#ZW8J{U$9#!+|tZOU}tA^F7{hz0jPWiO?-NQqzwwCSUko$&H+S`ASD+ zUnE{INmaUH~vB60`1=`riz)f?L^PkMKD_m2kJrEac$J(a@nM zF_xboIX)KK7*ttBHS(U?t*h!KG=a1V?38X><<^ zjPb&&vfE4G&E6PaE|Z9^$T6fGNmC4zf<9nn)1E~(YcmB0u$*jE9%&(ky#OQ zug1(cUPA9Q_}BVA!C`3IT%IyjI|yo%04pZBvQc_K2G&-i>LQp8@kKr(^dbK`GNVn=COqBxKo!{&gn;Nd{<`l zLfLAU=qTn7JeJIBQL;Kwd%%|<%sqI_?mgR)tjqth+N?lM*3X1?11*2_-Te;$0WU$iFXRF*VDo+1yWfgu5i14vy-w}2;5;)Z>R?pFu@ ztqVl~@Fj_?EJ2h3t0Udq3K#_~A+57iOM!$`CL3&NYMrE-FHI^EXzu*9DhE$e6{dj6 zu+xTGBaak@c-o4`A_ezIzB&%as^a<-+H1{;&8f24U5oEvQomV9VjXA>FPgG@{_H+RI0mqjSJVStVQ+*HwqS|Ah9V=NPG%0py&){qdRG%3Fc?P7G9fvdako49Tqs~W` zFQul2NltI48Fm6ydP3_GCchC>uGY!0 zWlMj7BllmJr#kk7`j^srA7rXIe$Pxl--|8IUY2@Y`(%>dy1z3Rb(uCZ)mj zTG1ILp0U{0mK4Fc6wtUOzM=z8o18~Bb40(5fYUL|o<2o`EDgn4P>%s|Bdo3Tc~@tD z%sHZ$5v`R&{Him>4=67dCF*~aJEI@rE2sj9(?%LLyiZuWnUlmxt;^Yz{ltd4^}5pL z5rC*Nh6AHSsqJdgAVUY5Ya%uAQgoUgK#1#XHWq|vH7r{GT%U9r%YMyP9APrX^E{TD zpUI1|R==VYJHc%(+8fcDp=}p$S2t!cT%$WTC@8R7i1tGfcI^$q-`tL$`_h`s=>@i^ z_<*mzG^%*#0Et4eBfM`y+I~$^i8nR6-GQQhsYEbPvZ`^gDO3iQ+ta-d@!C`Ipz2HX z%-QW&hHa~0_>!znNy+(P%7UMS$j?cfxngX#m6pe_5}7Zbzi3#O@GY@Zbvvie4)#!D z;nl^9OdudMiRZlP+sL8RBdWgYv!CNo#jPZzqt z9V4{q-f-)rhfl%D7v;o{qRbGdGYYgTM&8=cA$UmPaBAYjyjp2$2236QsYy{zmcZiX zgQ#2H?*=4<#*&?@=DryWaXxS8@5XCH=Id}lRA`tSk`?M9PACwZ3bgh`!RJj|2I2TF z83xL&*J04tC?%ygzqNh^sThBcc_!PA2E%2Mhz+b)C$o2|L*TqwEwQ#or3t-1I+*3| zq_Mt=(9mr!m}aD1+rNbr5j$aPDZ~?*f9`}-?O{zz7)ci7uC#mhTAeSAcZiJ{ex*Ga z&{I{b{>&wSQo1?Lg2B<^*^7~qvAI+7BbE0>XV%oD#UmT%Spg-8P)8;5@$6fwNe65y zSS_%TURPFCro|z-BjjNFLTI?p2^Xc;QYr3XMlje-`_90jnfXP;GZ}rYo5&H}4|Jou zf;BQkDP|5bbh&DKSw!4-l1|yAiGj*x&i}~OYI@naW|{=Oy_Q}`_E}SdgY_E{rB_}Z z@m3e(jbv%-Zgi(uU@|U0@x>q3#sj8}w*X7^+t<`+^HUqH-?py@qG(>mJ6~8U0t^8J z@3VECU-W-oKSq1{q*&5|0u_k!lqMua%FS%~*J?u2zibtUi@Nhu0~kFLKJ2INDKWWl zM?~=anay`q0yEOH?V*m;h>s#S1u?xe325^tabLWi5!;5-6@(4hYM&xMwH8hpw1n|` z#?Pg$d~H;>>zF#h80S?O7ql|tkDwP~Q4or^=0~(2_6NVK<#a9NKlq-OeASy0_`G&- zmJ|Y@*#m6QD6J>n4QZz4+-wv+C_n>HXxfbMzZfm4y7`=h+1~>>pIMY>!lEQe$)(#B z|1BU4|31IVT;Gd?@aBYx+b->@MX+@f^vmn@(+r00MVoWrJ$fB({)D+mNl|o9o|qjE zg=HeWS~#HSw=7ITOcI~zP*fSQ!bQU2L&o{JWZ%pR7ir(ZPL+#E^SY!S+Q>g_yn;y- zr1wx-@t}ZY>Urv@As0-RGYf-60+JMl6UjjGuv>gEQ&L1leNNTzXaRc_B0g+SJK9>g z6te&(^L#qeH%7=CV*68cEw~dXA2~u88~Q{wY5SKId_~uEmnorR^MXfV%yPwa%+{m9AYri{M^djP^sdRDeO(S%Kh$DEEg+$J6Ky5Gf`SvsD6HDTe^y~^ISzcwq zy*?UtW!60O;ofe@69qn51qvKU9=c~zz--#WywF|z#vqHRCZBMqc+twd$W5NccjH{2 zefcl5rME^hj6nKRvZKxd?>QQfA}@D6y^}cfQ-`!~FkIRb%#ia6Gy@=Tt(?T!R_{zx z<=w4Ha4_xI6);}p$kb2%`Wxkmo7ds3&?C#$OZ_lUxnhxQBD(moJU7K}mD z+4dWPG<)^{57u{I02oblVxHy|A3@5G%I!>@!|Lja2@i5nx>WcR#eqqs_w$L%+`B50 zSo7eTDtinvWNKqwOY8O2;ig;v%EYv%d3>s-z3d)}k{$Qoug~xtAVKj~Qf4AL&YmVo zBS~x5F!RMvRg5QKWgopT;uP-63l@n`xW@_pFBzFZ^4H^EL|K?4SUnrEvkMiTI4cU4 zTL>!ki%#qserM39fT@O(jg*s|shWS<*GASb+w@wVcmm#Jsv<1R7tfRhFN$A54<5Kj zNqvH58oqixcYl~uLrQ1X6Ih!aRxKTaBrQO4-qSM~y_$6ZM0u}hPIyOwNf+*6I2>P* zSt+?g@u#d>#D~PVzVzlN}>F4zCs`j4Y&J*T;jgEOy zX!abS!c0^uMwf1dv9G$H=H9xeK$4dC*6joCTl4IbkS#TepUnyN5f-fNrz*d}1@OBc^kP_+bI zIuA2^&J(0i42wuOo1rEw*6HohOZwrM=j6auv%OAttoX%_N?(5S%h{_r=WaVFNlw2Q zpnkhZQR)f_fT3t|=%h4LC3AB|r5mIuYNRLnWn2{>$^ubLo*-Aj7Vq%q(l147Og>ZE z*Jg&xOfY&ka&Bvx&6#}p*E=t1S$4*2_sNi2z_-}B2_t>eViM#lXz@>GV zpd%)$kcpRB)c_0NbxgzQ>GLj3RaK^#iiE!*^&+adqgR~TSA5e)&yDIVe3WidexKj8 zmjr?P-!)kh{Frs1*r=unQ63(0i4=G%>x0B3Pel zMaLGC6diUo4$4sCd7VG)cMFo*l6Uy{1nURF%ML|rri1HGB50V-_E_Y%xUD! z?MTa;LKKF(w^AZ-QE4Q*nMhGW6r-t%@3d(SQGe`_RDZtaEX=P zSc{=#qxd2RjE{zt^j3+5f(`orVO3_H1a4W7x=K{u2K6xe-QTx4XRnP7W#hC>3Ne?iTX>Hlj>96dYPYJ zB`1F1+mx9*Def5`iNnDjm*NZ{-^4B19b=3!~~p zL(D3Cjl`}v>aI0vB@~2T-fDQnDxJzc0%aZ0|GVvLN`xXC3W%x%G6p@g8*ZsINOjC$ zmyQ5y*MZ7)aSnF@&v#Mc6DG;G{O{YKKSi$}lYCL0ahLfh4&xIjc_So~U8@(iAm~^o zq7ROKyS~)NB2usp$PyEv2#|XosoHXl779?55v^|UR^qDb8-v^YJ+fGnkEg&f@XOP@ z{s|=USG{z*Pp8oWh$PtW61NbsU3CCd6I#rwKlFt-?YLsCGQkZF{QF5bt!%GIO0@&H z9RNep2?;qXJBHmQFP$PwqSotU>-9U^SjcKvl3Zj?jwKw$fY<())=hFQ;euEk(SHKP zLqZIkKVNtI#qV1DXlU|%`IGEXo!`eKD#@I93V8x09P}nIP~w=xSQt>;Cs=o~isF<= z0iYHE!E2v?>Wk;hDN-56A5GbIWhl^UlH;9==75hxQcz@a+36GvFH3@YNO;dw{0u&J z{>n^$9;basLp zxKJcF^28H#1!&#KRJK!!r{l9!dg~H`zV~x2VfQ>e@g|JJ&~+51$2%7?n->GZUyCx0mJ)A zI}_9-us~D;j(30p_w${|+WQ|k#a+S67d*2460*9w*lUDyQ9 zSkGQYI*#^(zFL9!&vh9}nc5sW0SDOoC-l|IpZAB3KPuBotH_A@Do!N9A5N%=mgO5L zx`F&Sdgi-OE5NP5V?3|65utr8|8g5v{m1HV*^a@m{GiIF1)r}a!zmFEmy&T`$`oK$$X+JmAZ9&>Xm+$Fe= zG;*;8v#vU}CnPCOm8A?d-bX!+(ul{hwr4n_9o0L$#j9IR+$jwU;OeqvKWKcC&1-7D za~DO_%vF^qG=1Uy6?prt2RkHUr`_Z`yZ;fe@P(Y*gh-#TzD36>zWzR^>7wv)TOAaI z&_JE`KX}GIJ3#hAsc}%-pzJ>9op9WcUtGD;Kp`1djDkLP4#8)Qu|yL0`B;M(dojo#T1MyGuUlr}O?gQiM|4)ijb* z%KjwW&o>_ujobhbDl6->j|4B(gH}Fh%y#Qrq0{>ygCHm^FRHFz9g)R<_kvu4a&kV3 z03c6kHGo{q`5yOVF@cM$m<2z~GVz)*mN)OPl+D9@icC3TL`foD`GgfKhQu|jW|8chWCHLjQt}=sH6zvd&ehQMa&QeJDC9T)QrzmQR;w*nn z#T~L*GxJr0@lDWWCW&Cb5f&1~3az}_{y_ef=(Ov4GvC7rI0H#vObCPUxd|F7?s72) z`IVWZiryOfXzC6`Xqx%c+W(KS`)X^d>%s+`o{&%ydN&|VK$;3DsG&+HAYH^D2#EA9 zMG|@!klqYU>4siJ4821DMT%fRKt#}3P*i-``S!s+-hW^ntZQ9s&N=27&;3zGJ;tuO z4O8iMWY-)o{Wxku%;R3*?bCva!! zLc9}bT!All!}JVVfqLvve8Ov{?hLZz-z+Qs+{4ya+}byM>Z&h50s$**NU3|~ap&n7 z7lA8JKEjHV6gcM>Zyerg>duE!H3R2>gOsLfw(DumCd)C9j|1SdWM-gK{k=6ypOK_* zc)4KXzq4N{MCf&Vx|f9xU;B`<^mS&4{Szgj6*SMlh6qw2YA)6J=OMOP7X-7BiD7M_ zUjFhA9a(J8KPbE?{(VlH|ND5tLV|ObWsnXVK|RK#=_~vDsne(b=*$O3U)HQDuqz<-V^m4I|h{BOhSxBvw|| ztN+x8yQXcHwH_4E)AR3zIs0$xwjE(|?41Q}K~7Kc<00~P;&<}+N7XYbMjp$9ihLr; z_iKX7DkbIMd}$*JP9J;UiY;*3;p4Tdn8j`Zs-9{{Sr}+oNs#VLRGAj6Eg)*@~_OO=pKQ|$wluMlBIPr&$ z+ho>Ut{o-k4py$T?`f00_8-dxOz%3R7JWFgX3=8EqyBY(dsFy>+5MjD#>7u%VG|?f z6<^asIQP8dgFc*mmFni@m2d{@)eKt26QHM#sL0?WcU<>M=M-5b7pli5H}_`f>GV^( z*&3*j0ge05wo2vCura+EOom@hrSKX$R?>jdl9kQv#;tzW#%kr!h5v@qeM{U-o?R&W zir_%mj6J<#inr(T;DG)9LAs$$lCC;-<$GD2uUVaEb+s{`*SlX=x|KnML+HR@iZ&;u z&N>FOpSXUm+O210^>U^)zngW3HFmQj8Ys zouQVy4suP(f*Ucy4VxF|H7g%$MV4PoGst3w?F+ zMDXEF*L&qF!q5#h<1m=20f?)B91DGWQAJ1vrghq;8L6K%06mlR3rVHijkuNwQrOUA4;yH`kP@DuJ6Bmq1hq9m6@}cG zy);3Q+xAyACx?eXC^MN!569uFZtR)SCURbg>djhJ#)oD(21LaqiG^8eXsaw;RWzWk z2r0!RU1{+4DR!fMIPLG3DCXmjKCo&>#|uo*;Hq>Yo0lZ;lmswAASQ3#^-eaMJi0qromTt%Bsn|WnZ(=Y z=jG~4WQkhVh1jisJJlBn_NC+au}T$du<)GNKH>%RMBrmCHqL6ou(&0KRgj?t$d-xN zt#k^nP5sK_*%p6Rm$dXfAXU2N^pUyjgqZsq1<0Ju*$)IA0nOaWr_`#C77km9#xIp1eo-brFm4zUyglHzH*&A^zA+x zh;lGHMq!;*;=xlsaPQ@|I1ApcSVP1P?aF!erQz>PxxM=N-QL^H zpDsq4@P%z~Gx-Dwpch*CfQn_|$H)~K2-7N#PN>_TGiBdr_+Nb`4|B} zMVx6v2CqFcWd&69J+vFc6EGf$eA+;G9U0M|{R>71x8e9Ub%g?)S#@Q&S7OX2pilp+ zx_dMvXq%KhMuqhew)W-~KEYVH0gu+HDob-x!0$T&*#ed%0VLOO+wBl+xquI=5KT*? zSxmU2oZE&fVL*maiO=P^Bxi^aGZIYCnPlfImcK2KCN}OwlC!76+sFuE_6zAWa3pT3 z=JvDycCY4*;wwhvQ~E=HLa5w9*;ZmKf`gCa0tcD=4FQJ~2e47lY=2r5zwAgA2hy$p zFQFbKTQXUael}lLk(0fC(fx8!%7%c{_wO;|n&3&Kw${`GZSJ&kzMv=E;bI)#H0f7Z zHcB0$4|nxfAV67*YM0JuITA~&;8y}_vBqDe-8OFt68d%eizN{J*GyZ(AE=9i|73pa z1f5Ml0zBmVEt`f>o^3nKkwU0&kTb7Quv|-<5Lgdysl`n9 z-yS&MNh1Iyupk<@>Al1O;I@=ZUa70KlB<`u*7gI)KOW$CqQ_C zHE&6~KG+zO=v+hm>MZHaC)R&i4EO*q?pW%7@FTfJs{VimvqC|wT|&&eI2Bgil!C~A zRQ+$c2Ll6m*fOcNUIIXutgeRyL#~npvVmMf8!tLGKk#puiP+2+Ih()JYC=mFDDV>pF`{DpTri9kFF=n*eR=*&^)P5g}c6rFQ z;)&hsWx`>i8;_3S_N|vx1X_zVH6&?_1}e~E&&%Ukzegu`*j=?5acC2sCu*8%-vejg zvle&wp5*YfL!iTXzSmWnX5;zF$hgoMa;E@!e^e(h z9qIubYSd!oHf~n+he{v7<4!x67Xal>AcF#F461;*t#H^TPfP;Fb0gr?&r8gFy^eAi z>;kZaCrIblMK24v7A?M0yupu2^Cbh&z3JdVYe32w&Uw%^ox_{xDttCG%S_s=j-W)Agf%1r3TFk z84dm$HYrL4x6#ddK!p(9v*Ddu+;^6Q$N-y`y-&&yuNSGM1`qfx>KZdZsQLzZ0sg-!M`Q+cr$z~nKaxrDM7 zh5$f8lFJ^15-qfnMOd{r<5_aLvp9BAE^h()u%I+7$n*8B#Gl#qou)7Cr0)U+__g=~ z8SKN0b}TW%LuACn#SC!GrG$;#*Y)(NO4dz$S^GZl!Sw-1CMXWeG7|%pFm@J`Dw3PXS|MFS;^ReLvT&A+j(aoT926Unuqc-2y{Yr2Mtq$#BUKS4?|C4e^Og%f@Su zh)HH@LmwUOzsfx#!O}wC2jK>o0TB&2xT+S{aRtBrVJK!O>8=5itezq#8B@Bdlat?a zF1ClKQ`f-4LB+082*)E&;^W_Ncv;Nj@X+q0c%$u~QTzLXTxaImkzT!C#Ttj}YftNo zDE4jypk(fXuh921{;!?&Et@yMmhVSLCRmThL2NrCzp(HxO5(U#W2!|12a=#8RU8LL z;|4GE@Yvymcu95<_%#1{{?Crh4Kdl|FhRmWq%d%!=bcS2nmPCCi4* zlN!QWVa~kdyeU0r4<8cTk$S4IWg1*F*0huB@^Irvtzpn_S4puovCq>>B3#)7;IYuU z7a}(<{J{{MgPp{@q-`GxJG1=B z(mz*L^-4%U-6nmA2-#vq{W03Q=h*bC_kcj{v+vtJMMee*TZD%rydS)~44J(GK`kq1 zt6@P65$B37FF0>VpM0T7_la>w5;-E}-*=a`TWASq-hL}-Jh~>*^x{9X003r3eY6Ll zZHRQV5JQ|1usCwrvXkGtvXoO7brDXWOVrO=tX~dc0DS;&P6CgX0bmx*(BLn3vRif0_ER^~KjSkTxvm7su)QRR25Yx?x5oMPZ{UEja8{;@-a6) zivh4qK1Ssvl)BRXDYsFtCz6&af&G7cOs!=(3#Y5Bc1#=^X%?TURV{B-C9VYy`-fC* zSZa2ilwxI2jU-IG9&z8ND1Fu@*%0h%-v^fuy@+7rF8F?@KR-=Kj#o8Vy?Jst?bdvx z{JF8p8#&irAgiHM^V2075k7lA(lXCkogscLHz`!Ix_Skngwp8ndUp2_g)j+%7sLg8 zP^q~N7xRseOuhQ!?{E_2^erXc2R_*5AK>)*);N~m{z=y|WKvhEs}T6vt;u3OT8_3< z9Sh`@7?;rn*;9IbA*Jb8ssCEQyl7VvQYuUHE7k7>>2QJ z1U&6*t$zD&Df@u?uU$Axs0lH*u=)T}b9~M;GT*70H6vpt2BeO&RGX7gCljdy)`Y$ckVM_^Rj6{?kspJ0BpsxeK34oaKs96*KZ7*g{pV|4@afMhDfL%&2j%0wCxm)4yv$=l6cS z1H_^AWXfq5xjmAKNBy3pcm8H33s5iVe3wcbCO*u)@i|RcTppmRgZfr0u^UDg>p^%u z78Oa5shR01R~!595(q*Q`@7%%J}QFNJ!xekL!scn76Tk70)uz=!hRR_!-6OzB^d%3 znMBMSuxv6lc_{E&sBqk@;{`nUO9VZlkktrx)ILoW#n@B+%G>t6B z5@!|^VI-$8HaTWxX^Q%b=&M~=yD!Q^BuEYW0 zMu0eSXR(;jbU9xFy5(KHV`lskxDTuVn*<4Qa2OT5hgM|sY>rjn0`i1gUwJfyg`JTw zG{mDD9+C-2RF}3~=#$P19ho7%ah0FP0I9brxO4Y4XGJF$Mvv_pwF0_?;Y^{Le~FHQ zA_3ru+_;ZCmRw4)RT7f7>&2I_tmuh~$v=>C+!pks|JS^|J*a_l;mND9k- zl-J>CXi}7EY^7PAf9&e0w0b@kD$gh=@`ExtGZI~ijMO8NAca~6o@V|w&Jklv4cHjA zEu{9lk~aZE0;S9dzbX{L{n+HB``OSCwWRgYn!z(7Dc};d6j=X(_AP(#!CsKnNy#)A z6AdI3xa0H?uxt(-SO2dmUGCnsYe{$R<;5 zf7^2R5*$a)RX+RSF92^I0RkX@r$RPDRwm0t6RI9E5tQ7MMDXwK8rQ`xe zbrE9P_zX{56Ri7=hV)<58an#p*wdhQS@8ixe35P&)#y%zRbmZ)QWa|ZtpIhih!YTm zji&6La{6BP1~fyzZ@YyXL!7abml;q99v9r+LMO`3j&Pq;q~G zyJUE=$0d_qC~U2rD58;2cAVsljjYCs7NA2R+3-JY<*wBo<<8&teM)=3K{317<{|^A zlDu>B#sC0jh}*{u634_Z4yEXOfYqGw%bz^w%!R@Vg)_&2rz8CvYElOsh7DT3=kmED zaJ~n^RGFV6Hpp^7BBv(ymgsz_XCMnT@LwI6CB}r(MUC-;r$J-u?iuJ#`08gJv0QZJ zDX|~gi+^}G7Rim3l$5L&STdfu0U-rfc`yoy)D`y0PSWysKRS1%vmNy}An zadz7`?cgNgLs?Y_%(>qbe4HeOkeST;5vYQzC}*3Vg9lsN8eVB*TY&*}vA3&|&}qND zMz(*vKADdDDPPpz%k3PE>h!5G znvNHbKD`6HzkxtBFVyXAZgtcjw;1q}5=6AKp#1$H3=S+PzD5fF{i3b)7apvC^XSK{ z?)$7RmoHH#e=VWW@;4Owp&RK_;7MnAY_#wC5DWmj?Bzgqv>V$;yaEl`XzS_q8 zu$74M*E)v=4!^q98N&J!O#s8d(9U2T3Ha?KRESuDK(6ETSK_ie(148DO4s^^H+ayivn9xn0 z=NACu%|LIsh5Q&OJOMgk1(a=7C`vM9W?X3#K-zeCo~z*`0uztnuL~19w~(UVD#K0& zwk#z&Fo6&%Co4MsMQ3Va&FTGlO(?)XV4HP{8dHl-e(}WdXFF%^4}htQ;Q=Q`><7jG z?k^q3xuma_S^*SfC~k$hq3{qRioul&6Hlmi3 zVGFPVM*whMjFTcz>_~7Di2-~a%2h2aKD$v+tPS(~A6W%GmC1=alOt4EqH77VlYn0$ zgD2Z=R4hBrR)e5|Hzlhf?7)m3!(HN3 zv0;W7c=%OGO7e>VZ?0bSX6*quVx8tmFh?51cCXw@0A9ll-|bG6kS)#l4UxTs(q+K# zNm`ri;tOAbO)T6nXLQw;Akg@djii!cj0)!3A1LP@Chi;5 z)UQG0Qdz7(ae-j!>>g(%8XzOaaur)=;Roqb_gU#l^-^(J3zwd>x5Q*N8PGJv#A;j) z6RHfa7})X$5}u6}HHZlni_szfP4Gj}ln6hF0v(pY0M&I+%7FLSHHxO8_H8ZA-~Uwc zYyeLyfdsHET&O+m z+z|0?0YNn$n@y&Q|1$ThCj|VBy@(PqV46}iP&f(_711Deqa|jQA42E3pj78d29=<$ zrL0~{n{>=DZqK}dF`z>~;<`T)x+7OR#r{@TJ?AeI0vOgqR4E;{d>70kdTNCD>Yn#J zZEX$AY=0#5ymhtnmQeA(l;>$1wWp{s&jiYxl=#A2;1!1SZ%(4qc5kv{Ud?ewtCWc@E2a3 z`ce=CJHvpyOtn>Sd3n70lHI}_;01`tZU=ky?M6_Y=N+@UZHUEb3rcv zZ!>_4-rszW`Vseh|9RgnxtAJKgVhNwr-}}kP{80P8%|FWXZ+%$@x(qOm;?N zJM1+juhnxBz5Dba`SJE4Sm{M(D(pOZ zVy}0m(yQD7s~5F`mIO@jUq+mvy^1AI z3YkuyB`kb?+xLk=4c45eNOJu$;ng`ickTFf+#LEA6;8q~%=dCuy&Wl|jKSE(QIXFB z8*c}nePuWLn(J~$)Et`WPIaX%COJ-cnoj5XEhW8}o|#x`m*y&~dwrvEirD)G4V(}t zU9NsR66Za3mart!I2}y{re0n#eLjJIWZ?4Kb5!^R;@f%63HhwCvbDKrI=u7Zn%cNnNYoo@ddbR*H|KER z(F4%o0m%L4!t~|!rzJoo7Os!~a+Ukn?`(9)O`VJnuA$EZrq2-G{fb&V>pYRl3Na(g z0Q$<I%p&F*W26F`;>Xkyz0uf1(H z9>meW9`q}+Gf&>V-4y=4iQ*l*uL2e&PM)8clr0~7>^&_CkU#VJy~M<(?({ehk9~SQ z*6;;L5j&x3Hh7`8^VIbFQ!3m4A-C>NZ{$>MzxjxkWk3{}P~=V81^MS$;hp#lfaQZ7 zFNbZt$Zb0xii4{LrV+g&_M3C}a-x@v(8jEa^iy#_o67gGQ5&=`IKO zc;*I&KkN_ea%N2;DRbk>IGpj&;mzyq^_>swm_Uln+_InO+$YABaR>p>wJY`Wf%H)y zU&@}`7k0*m0{h?r3p{_|us*G*(z$0lG<* zp~c3Q;9`*?Mr|_v>i&Hukposz8E5h1IfV{8&eoN7t)6QWJmM+*aCWjiePbL`Xs$`N zPj&6*D!kz{QJQ*gH%kl)2wI!$RD45$-^Mx@g#bCv6M?h8V<1ng(p@_;3+pXZ2G5?q zdugq=`?S+bvQDa0GC*tdqAaicQOpSO(;FD)sQ!XoKZZlLuO{r%55&UhtD=tt%yRb_ z8-*7GI}Gq&c0bVma^i6KuO*+JJ-her^Q8vTu&mY82{29n7vJKWxh1Mt$36WbYaP%q?;jh6$fW+}R z5t25LBHDS&9O~GM{Yg3nG7A{V@HsHzYV+=PK4P5reSvbHz7*+Q`PVqtOP7vLd#y%k z<-sqT0ES8pc53f%gqzT|63^Y0x}L;ky*!tr^MeNFbNmM1sf@C)W&X_(x=?^{D|T%DQgfH;5bdG3(pFN=KPG4+D^LidKFm zZ#|D)&Io?}{*;^G`zHl?j5R`ERMyAP)bgjLC1Pia`a44(q;Aze`_EZ{?}co#7&@gw zNSnjftXl^5V;%)U9PSuDgR${{QncXc;{|tObZHR2gmNtcP|}J{8C2#a00eb*cN@}- z4(Y&q+Toe9*|;>u!B|uFji&CcGNFM9W~DYRX?Jf`kB{w@SL^ieZ-2kc$YSU>YtsdK zM`-tgh)UtgSN7!vMNKHwVac)O!BWw-c3eNE=F-68>EivvH>SsP0SMciDCi`A9J;lS zKdAr9w4a*Nx!Is%$cNXMAo8#E@Wd1H3ZIhdu^+Th_RhiZEt4o|v?w=IS=#?e@Pmox zoA}I$Gyp@oU5cZitG{P7&%HQ5%BBWE|G4pM56RPo<0`m?{ktEb)(jA2(=pcLwb%VC z-)c|-e{Yxh?qeAL4d1o6{^IC=2Ro(3H=pg6=dbI%c=Gr&aj&7($D!8ti+3DGWXkF1 z>!N2i*LYQzs1dv<>dO^AhWqiSV+{6c%mM7v%V7R|A;IpRpLM>;`>xUSw@YI-s`D1U z;kESwKU+f2-46D3zao@b@*{-AUgHMbeohr>A{QYV#8{c{3e!M<3M^3(c7qQ5_=1;P z=~&k6R3Z+4)H6Cwvp!cMw!>7GdMD2^lH?ybt%~mAO6F2yRG(wl9Cd`y6YQ8%=VSKu z!=TU$Gl>0GZT=ByAgbVNng{D3uHz?c`+{>q#|<2F+ux*A;GY!EMSqj92$T??3uG6* ziIwb9?AD{iSRTItN-cJM69c7w5PQ7;jnbm%C5w75x3oTyG-6hfm3|U&n&TO-kp`!C zlE~KT8QbJ*eTQF@+@9-TpQ*i2s4@eaHx!=rg#qD5^T2GQt(2OAt0+eR$0;k*-wdqA zi{aVqf}ES;M`1t~yYEFy$F4$WacxotSXRj&?*u>ZG8^qw9yUl6$-U{OwybTGzTqmx z=7$+~S}^kadVxR$_Qd2Q@@awXRw)MUZ=$Kx8k?jP!#W~8j*<|^v_2A1ZL~Kv^J(>X zTH*}RWQ=UFrI$oJD%G0pp1Ho`UmB6RuCdXryO(T+?U672`0YLz{+9fB)=-C)5C_q4 zQhqQuG-ynGgiZ}k z%;es5uJ*`%x{FWjDV_^(>uo!O#QVh-Z*reU6=<>0$cD?n+(_7Vh1OTUcvH)uTF%lM z2)j7&ZU$HSN2?F}f*Kl>?8BBjA_xatS#*0#Zll_yt)njy(6bJJB9^29Hj^uhJwMwi z>5X3Q#;YqQD@+YZ67ad=iJ&eWm@1u3S>0*`82Ke@X8R$Wfo z*&x5F7IB+2>X?3FUG^B-IPH;4>iXE)_LObsW;%#iHDsV=YasK5cO`+O9RQ5GN%Sq0 zBV~Q-tmQFnuskKWd;zb*kyN^-!BIpw@KNLV{8nDujd#66d(Q1cFZ64W)J;9J&qN} z9S6Wk#pR4ZQEiW{81}sW;0zA~4f@)ZXWYH!Gom6tx@SL{{D!gl0X(0jZG*VUAbSc( zrHTyONed)mI{+2_E9Wrxfz zo)ubWSpfI_(rkW5BbZR;`7eunFqi0oqAz_r(((Xb6S*79rLUUXewiM4zPaxkJN=Vs z6RdY#q_5Hy*edSn`#b^=kiD%j2vuyXvwJz4(AW{|O8?g|WAgiw|Awj$&XTfv<2mdSm6Ef=V4&&d<*GZ|hEOfG1a<-*eTsVgQO3s*%Yhbt$4$&_K94HZeWa zasBZU5n3|yH7oRZPl~Vm>E-c&{2Q&GloVT{IqLQb79v|Oi>iltCx0)-{8@Zw)72Ec zjs~Ekz~V$8t6i`5MUUGb1E@U+<~ZI(`G0#!CqqItqQMWPSJMbr_bn%DzF7ZV-7mPR z;b5Jc+LO z7^c?EXkFe{J*~Q({VcHVV9I2Q>-S956NyQu!lA3tqCXNf!|viyp*oegH}CZSo#2Ft zQ2AZ@ar`J$L7nky{jU={BNVo<_Uvy>Ad$rcp!u&};rPGMl68Qp{iK_#o0|8(4gxLF zMpISw%&^KksE4}y_4Uyxjn1ei(hs2iU^^yVO$CaCJusoLeC`a2{=oWGI@;s|tBgSe zsS_xSWjj)f?uLiiE^$T6Qs{bhFJkDh{+_+wAYM3X{eJ4b`k z+#`lRc*!K1rX2=gF2tR8k8>GTEBSB}!bdW>hj zsTfNonRqzIK5>4kXIoPpm}nz-l@Dlwg?=7|kav@RjV4bQAZzK&r=`s&C8!vrNGv^2 zP>=cZCL#cb7M2e7u+q2uh!ApVNqgl^Y}%;lgg(rGvj_I@Yp?FGUD^AYGyWm)d~%_OJn{=f1k7x4w67 zJR$(3Vc>T20{qdF>$b5W_aMztHj9@ZbQd}prsoT!m;ho~40B5S3X;YliQ_Czh)hcy zZ1{J{Y;yFHOgh=F^x;KeW5eX7Jj zZZl`L@`AO(hh+3f$7H1OkXu-GQ4~yCYO;p0+Kkw(O7Clxy zlg9T7pmm0P?Mx0lg{(ILlJ~2cHLT8JGE64`RKf(v>JQ=}x#~Axbru6*7haofRL$N~ zJ&36-uB%Ehsvg~_-2DwJ8wUz>`@44o9hN~B@h;}uhTc6-ek=lIq@-;Labgg^;7gU> z?oPGV#Sxw!h--k1f(Gm&fPK7tG%R|gJ5x9lS%O0?PJrqNRf%Q?VR7(-Ot-V5WT*I6o|HInoz?^=7O zn0BSyp2)d)lgB1Rs&dKwQmk7gL@ONew1GeM2K#a~7ExMDeNe}!S)E`>a431`+469u z284lHkRjjq8tKR;3ZX>l2J7$%y49H2^r)_eaY^_fyvc|H(bj0wnXJ9}r@=@dM#6|G zfd?}=sLJjqOG9{YJbbs!?3uQEQNA}u=#iR{$A@aC;R$Df8yyrL7*G}}a-(Iw2q~`7 zB5B;>yINDjXq2C9QH^L-7HU2BsZk!)q>Ju~sD~UPORu8Zw2a&IR$E;u&y0Q-%JyVz zh3W5k0L>%1n>|fgQg6Qxw3N9699w{F$9aQn^VyiZc{o}lw88aWM^h^BsVvli9wV08 zI5!3?W_0*P)QH!&fcslA=m-l&i_+iDXrb27;@(i9uF>MIM7d}01iN&}UB-Up!vZm7 z%cP7@eM`9Y9a*T>34rLvq@ie_9aQ^v0lr`Vie;|V2P;h+8WujJ^@HV64GIt+;s9#y z8QtsoZx!IHB<_rZVaVY2`jSq$&YtJg^g76dF*?n&HKe|mJF>H1sCPo{MMOlGn%oOr zK$EsH49_6HTYm5lNfbgu==B44H3snLdM21%S^H$#M(JJERktduaPY;Q2Z7HUNQz-miK zYCn%xe}*6E_C7)(vp+_t>Bk?0$bLUbu1%x9Z)t<-+0htJeLv`o9+Km^rKdNf7g>q;mC7u+nlv;p?;g%6fssTo zk_u^0jb>p%Ii<0*G(fB_bvjMej75N+QYPKfM)*p4Z$~1TTGLbVh%|ZRp5}%L#=(V`YEToGCVCo+XR)e~ ze`zpZG5|x*tiv_FM$Q=#X(8ke7P zBhC@0!GoGhqNY<%sUr%s5evV0<;mWZs9r0Rm^NuPhx@`0v2D73op+doQ|7dILpdq3 zLV(4ZSqr0Fa&e2(eBbb@!MpD?alB~=$K*ovBa{5yU)!d??$TrXrwJA%LuDEH2;^L_ z5K`W6k*P`9zg_f7XTcl{ms3XEXoz&cQdsF+c;lOB?=?>b^34g`Qmi-3hYlO=o%5D| zk($14k-0Sfw=u_Ipm?|TT>5(dCy-a~`p3&JR9=9O50=X>k5$^QC@PK3TI;9xt{90R zG|-5TZwDt`+jW0bh|tYybSkfx4%Jqhn|r+OIdIOQt)8O`sp4s35tA827N)hul%=jv z7E{OwpVHx3k+oL*k|u5~bPch7utu5&KPSF{XsxAF5or`eXw)0*<@JQi^U{nZ?)|Ol z`l{9B=otZ)i^U6kUNC8;sT)pHmr6mU2h0Dhje^-1j7;g*F3%X2(vR2ZiEm%oOlsP% zUURqJfc|Q~)gPrsOYKT;5P5I|Lid0Yg%lYOUqZpm$-iO0%uVaew^xWzMbY=k>}x%K z$Zqt~YSb1Jn$rCbS@z#YZL>99v#m@eHYVw`{%?(Fx*q;w?yz*}XVg0j!bsYSR+I4Z z)IF*KGyGd~U6Z&KLSE3;K#u~)2F1`{=ID6qzI!t($Ugd~g7>^a zdyZt{Z{53hbo`c zOGV`Y;CIQeIi)?=OGJs;UM7W6&Ca5ivG*o@>$1;M@6^`m%Ofst*YneRBZNkxO{X-8 zjMr;he@e?0(F@0>ZU0PR4KKhKGN(TZBUDb_z4LjX!-+d!2pO#%+Bb*vK!_U<>?1A> z5n+YTE%AU17=qaeuZRPy;$Y%`X*PH$H{c7Co09T7G^BUzXCTYTs6P+hxKI{X0E`p> zbN`ECd&U6uBiLUu>e0XIDGZ-k#N+=yUcU16xyjN%+SJR2W!ssSfygD1$0PhNwoCdD zr(Z6~a(o{oEeAJrUBH8lalf@SeiyuZM>87_;nu||0TUyoD>P=k^qjBUa!~E|(>XPf z>hYr~{s$C`_~*rY4hxm1*GSHQY;eHdXqYzRue~o+h;rBlcylWn$shHG$#dnA*;WWF z?%vQRXtsJhGVm(f;w*!G7O`}~)Tjvm0;2bx5gCXtAM46~(Wie!KkjEwJJ$4D;&&W5 zb#<+>51~nb|Gxa<&GAtXD_R%AE|EPzNRfo+zglX3KRlRt)}dDbGa{bJ%YRNa8NE3n zf)LZw_P~9BfpQQCGRyX0ShA-!}%0Ur9~?5i*P*~Hjc53aqXR~$*Jw@t-^X6Q}+Y8C3S@hNy2%fXK1>P zC0Ns*tWAB*w*?n1R;ajv~=Em`vUjwATy7JKcF z@+s3vc+kjogVS6B~O3{yjgOiwAsy$)nFlMHD3P>IL^ur7Z2nn z>Lp9N;YqBg{-(XB)faF{LCS?^j7XO>FW1@wi{pw%80UGv6rBdMtgOhjSnd`)7Ad z_siG+9rJ6l?U( zHC1h!Q?F?7r+Vfpo`jWo!LPb9QWygtKfzx;A1*V}IWEpBzvH=*-FMh*uA%7v*o6M3 z30F168$~9?z?1+SnHx}9v~ENW6(kg}6Y78~iGsD~LPe*}xR2>d&ER6(UC~017w8v- zSvW#-yadIL9VK<#nPW+qJF;Mh&kkJ(Cz1!BdhA@IYOK!W(v*jZ>rkAPRLUog~8uoo&)tRnJIOXT9DULq@77BkItk@PXrU&7g{IHc>kKI5ds zU$ePJPmyQ`#%XS(>xvB`XTF2^;(eZBb#>jl*Et zyE*TLQ*=i!t^+y3)U$iel_ ze2^e_X%Gg-HT=-kk>kC_gY;en`nLS z;M%gYbCD3Tv(mj*$V$j8E2&f}NvZt&{(^HJ=RD5&JU*ZI`~7-0nio7atyG%FJrPEO zQu^|IxbL}|d5qT-&O6$%<;gv(bYUv?@~O8JruRp^sPR7BjKM#Fi5doAkyHby!LAW!Tzi%9OM<`2 znd|HsbsWiM8dO!+>=&z~))W6!)d?S2b+!#78G)K;CjE%mwuw@5%A+`2U-Ptfx6h*m z8u#VCme;;CEW~SBJ@;1rZ`=m&e$~Cl&G?nrx6)M02Vm@{S<8yloT3?g{bGAiT%UdF z)xs*o&3*ZQd1FtX0%Zky3DT0@v<3S`D;VGa$cEd{d6r0a`S$gSv!#71+;H|0j9tWA z>?<5j&GcE>9Wf=zwy|fk#*6%wwH%X>s7_2o_u}>gf|0CK#XRaW7rBzl&27}1wK`Fs z?{nW-OcI|T;jnrbh=`Y;TT|MGAb=~KXwc*a&oxh3Vo*`R^VOZtL+mfuEm-T1=LHNH z1{cHzV!PRJ<|;=*JtsJ|T+J$PuNi9r8y97!m9$q^3c*4wKNQX(ex0VpH#$dYk53Cp|z zWE_4%DKsM3^XYe?z6w6&+CMtI?hvTYsFB36HD`Qn745C;FjXzdRsEjsWHEeMBGw^T zv#?X`@hIdA_Lu&}58QmiV%Hp}6bx|Uff}uT?6i_Y4NiUYL7{?AG}KiOy!@R)xme3r z12~dO7jk{wnCV190L*{*cMLcK%i1`b+0<73QnRl}F#!&9!6?;STZPzWVPTX?gV1Seduu)KY#@{4;$H8|H@j6#Upy zC>_T{kQhiCO2iCQ6*nu97xLvQ$6s?OBNXC zdNw0Ofhf4XJ^j6fUH;qCZRRqOFo{9yj<#H$Z;U^M9^0~`72NBS;GPX5mi>P4?@uX2uNx$f58Vq{h~xrv$A6Ziojm@lsb} zSXSHXQ@CumftUCsrnm0l7F*w9{-3QZLRML*LixRmPX_5dtG`e}A>u+BhT2i;yBIS%}|VNqlsmIz0`w+0;kubJ!#eE@rh~hXijWp4-b+BQlwThA`+hRJL@7+#*{QPvpkgQulHfA}W6<6PD)8s#ATn_>e z{#Yq(1Cx4~9WaAu)R{0WMD5=Iz9WF44$07xGNosBQZhJbZ|VM=?VM?8d@CytF@Y_| zBBYD@vdx0f`)uL;5SLtbc5i3)v1XeixN?wYPGk}dp&=?!=KB@QW8JCpX7p0#d7I%K zb;Ioz#)l=#F`r>EY=K0bVSof>Kc2$A2;k--efl`;-3~0QCi4_hbPLIlEd4B&DmxGJ zQ!YmF6k6YdL}41t_v-lDI)<3YpJ)R!6ElX@f&&d#4tRP%Z=%2+cimq(nq_huKqo!Zn#6!Xrx2eT(9( za^jZz6*)_Guj<%(E7(#$R7aVb{q;2*UbGxsm(66oe=|2@ZMk@D_wiUY7Rd#CJUcP< z2Rnn9gt!7eh&_Ed(VMlXf6s67N;K(e7q#V}Wtj=QJU6*CG|A}-G*n>{UI%&*(9cpu zKpKWuk@>5r)7kO_QXQ)fQJDq)N|OMRQ60j?w_6|Lvg{RT~hT(>Nxx#g%S1bjbp zTm<>8BKsFY=~G_L*EHVWj%=z$jJ;}PHRHor-L4SiWRO03;kUFlT~HP;^Ogma*WS(^ zuJHLe$neJmPu5IPgFRcvK&j{5GO4QagPALT^tsugf-C?*7AE1*5pC-ii2Fc809Yj) z=&_sF5JdGZ)YS4#Un*jjvZ08qy%quWJ{J4jBdNdp0J6sR}*OBab z^|8Uz9{fQ!T_HnLg|A4-)b*k{xPQ^Q@~>W)$k_ z?v%Sw!B||nmyTczlk~A*eyNSYzYkPv2bWUCB7f6%@mS(jKK=tYN)3gI(x%)i}hd08FQ+APX_UH-Ac z^YU#bulEg>Fpzz-7t%Y@mXz7BE;q3*WtvO&FznxUm9YEiBAc>z$l5PIm*b)7lvNkAi#g?Z z2{AOhDu396Ca8{V;T>gH%L2*n7C)HuBCZsy{#e8HEpMDVO(dmU6FI-#Lt?g^-0pbw z#N+OcGnXnH`f`w}VF|t#mlP$Ns5ayMn4QQ;2f7@2->BXE8dLr4QzGC7^+I6h7x^ra zVbIlGYB-Ti^#@yG#{9|L(yCRRo91U`c6^)EF*E2NwS>%80qofdmR1X0|9c%*^65=> z#DXbysGmJQsIA#8k6V(&Jv+n48M=1I0O)JgxFJU7HQ!hnUSqe{PpieIv6xRYO`>Wx zRkJAQSlTR&EFH%r`HLM%^Nabj{!$0>Is4-4Rxi2m<<&;)PIIz~ z3fZ9?yrKB^MAts6=c0eRkD)~QhyQ0Wn>a4m4p)iW*#ap9a8E{=FpQG(lvr<@C* za+ewF8Fz0bE)^TfzJJHd0n%Sv zOQgDowXi_C+`+pa9c5n274kSUdt|&Os7DH2kUrOICL0fEpl>p($IU_Gh)aKng0+xn zuAOVmo8hZW70g=ez(HB2yYocBeXpPyBWtT?5O0_y31 z**g+^fx3G>e>bHZKLbxe+WY^I3mIhY(5NE~@xM?iNg9y}j2Q(U?gOk?09NZ1^Ib@! ztSof(A=x$d%mUn13KP`q*;XNLG8M5#QwEGQqCM7S+8Mlyt ztw!oQ50SMXr>uLt*zHcP((i7%pZPQ~?9wx2gN=mOyX+FppM6N5*P7Ra&w@X9e*98{ zC4#+AZ|tcSQ8yWQ_BRJR6iT?-C|$m){Kx{Jtt zj&1*2E`-T482+nhYFfn$*@~hZ+5HR)%a4|>WLd&vBTA^mBG4w6EcWOl-@ngx926~` zOVNKPo-*5>y%bhn9ocWgD^{Bqy!cS*LD=QHNl|gknwDT5I!O>F%+ZGD)u90aS;rTQ-*By34MCVBsP1K&oo>0#*BpLz z%Z;rXG^M46&?gnJ3%bk zdz|0X06wo;sPMiA{mqR2ok0Z&gPVnABki*kv}$uWlE|z{Ddeb>%Gmf-vA@5!FjL=I zLq6$W`}yxf;?v!sVLzjXFFl`fP5hpaTByrn4gD;d<9k7VK{P1zDqk_FK<~By%akko z3JZrUiL8ymtHmW?&8;|)$6xFQWNywl{0r{r2L7mv`}sKqX20dd360B2>UkHJdG`Ia z@T6H)=-_pFlDzBu~vKq*KVn?`>D?+$ccJNEdJB0L(Kv>DU;Gctbn$iomCwX5)T*k37x z&UpGZ0aQe0ExT&}=UNT&8Ps&_OxsH#bqwdV3yEyy&oJ*?%GY_z?*Wq?SI6_&o;4x{ z5~leJ+%+dR2B{BajO$$^@@vltYOA?#zmTlTI&-f7`tVk@ka}Asm&4{a2PrkRF|-5E zTbXQW^=nfJ5@yz1B6_bwWP=WNnb~*>1ji&y%=zV=b|!RjKjcZbPl?}$)iJrUuZD+j1;!D}N=yy}Yx2|!l^~UZVEZ=~B*h?I55jF&9zPAV71tCn5B zHP*fL?t-k^t^T^O%d!rYmKjR{p0<9?rrlY;s|J1I30NV5OqKAKcKa| zGmJ?z8IVvE^jl2pZC4D3L6lpZxaaM%!Ab8MG;rnRFGzlYhMEua3z{3%E^e7?(N$H1 z)Q&bJ;dDe{%NWB7bCc_s%Rx&GI1i16_U`kr$`8vrU}ZCR7g!{-u-_+)ytNMO%_@^O z1$zb>eYT^j&;uq`^F>2mC6TZ5oDoW0T!}o{g|AZO8~4WEVI8G9F4N3JZQ$& z_&)*_P8a#&>ReI5f9Bmpz|Blrl(O#}=f2PI$x{y&!P9lSapNcW(Zei)L_-uKS773m zPR&QHS6RNOfP35tlaDHX6iVJvRFbOlAC>V)ed&4qcv{Lz4QjpI z5xHQiTo{vzGTM%FZ_j{y{q2_4Glldmus>h*QT@?dE?bTC?JRcXaa^S)TWvyXnxJ@$ z&Ee0ni1&ZHE!_R2q(YwV#9Hka_~i)2ydF}1eP{9BV;+@BsS}m!2~Wi#C_rM~2r4y_ zDVIFRdS8bPVHSm`GQQum**)VhWAt!_O%LnWQ$n+IqRB&ziy1Totx8m_3gxxK&6&F- z>DSik{8{a#>Kj4koYr+$+ zjoF-=!awwyAHAr#oc$#{*@PSyr233?wuOIIJtVs7M1s?3N>MzUJt6_bUu!9$82hy$ z)L|%f-01G_u0q3us}X6HxFLlufgG>Z0rt>vUQ`4xq%Zp{PvF6;e@xIb7JUAhLgA~r zcUrlr;^F75vgsf*F_40*5i|I7XRhqbxD_Dnw@9?u+s+o~$F?e6)3uOWoJoQuVskm9 zUnDva)C%x}qCeZvevU4izvOe5t-qvsA^ZcchS~Jq7H15jw#fcD7TWr6TywSol$lpe{!_+q3(BU=B zzw_E6cClwSL=Wwl`=jLGrDxC4)Sx$azGMEJY@Z!v{+`KWIIEbfx~AXENajPgo4-?` z$(;1G7EccPJs>COdg@B9eHt|%{8sC3%qm|1t5IC6b39q`cM7CzL7khuY zUONNHZ(ht&QhXrMz$O1Xbr~C_`|PSWLXtDm;p~mIYGm_Kgn%b%TH~VQBOjyi&5LN0))!zXc>OVCU3Z_jhpqb_1>@Qg1MwL+1{J$8XPapWF87_ zBB?4Wq!jyYi4Hy^7PH&extGTI>)LPCob>WXq;)S*wfysP!=^`5EQb=#UPU({c%-2^ z{V)EzZ1%2_Kk?ZRpTC@dPUL@5Gt82Hj~iD%h3*D@t)q_bRmy0j8%@8+z|3F}xnt{6 zZ#L|0`{k8l94t62aS)zuF^l`Kq-pnU2jG>3i_t~Z^(s2ZyN#_vL)rF56L>CP%%g!# zE(^^B+BvVZpw-)q<}w$~%|BzdLO`e36uZ;``gRf zZtC&1zHk{XWA0hNyO*Bks*v}c&F&}BMUm};ly@xe%gsjKZSs9Yace!}umL_Hq#w?t zxM;}4ac2l?RJt)7O88&a7%I9i-#C4U8ez0F`_Xru2wn$XRXnRvfw(<-~%T=6BdZy_e$J|Hnvynof4in8LZpce7Bt;MCR9ON& zvpo+S0}x4{@H> zaLhLTzBw>H+RPI#ZX09usfb@UGq_U+tE^+7U+OmD9FqAcW>Xa3eZ zZqMu3Nv6QK((p-^nrqZcb;!M53-NNgXw~(TRXwA?itBFf+FtD0pqd;UDJipX&(lgd*o+NNbxOPFC$9L(ZBhX5e)9NT;=&# zl#WCgf$RY=1Iqq;c{tkI3_p}$V~ zf4S4^B8W1(_Yl?YcOr=Dql~w(3dgMcXcVqd9F*$-^hhi>R9&Z_jdiy9boU^)Him1f zFX<W&!tUbbR>Yy45N zM{3@n)}EMl+yduR$>Cd&^8SEI-olS&qSC?0cPG;ru8XQq%tLBPefGS3O^b>*@q#+! z9C}J9){0|~8EFVZ{kE0b=0xpVVb>j8DxTG&ri4al!djWadxc|5;?cm&~XU)bsGbfY>363A|MFxeV23_9TSs3Pm0R@R6tt=CLVd~9nx3Qr?)^lJEKM=$f zC`B*&jxT657;K#=f861ypg1DW%`V?+*~oQ<)8R7KXgXrXBXOfr&2y3mPd?lS9er9^ zv&vZVOHwuF)%;42^?ZpwjdNKyw~wXe?V0DKlThgl7;*Ve_Yf+Q%#&r*fa1_`^cMVm zSyzuk?=VTX$g@$rh-F(){1=ThQ6(OORmOqOt(W5FUzrX=k_-k}Ese#9Y^}n6#s!w2 z8{yY=t99uNloWt{?~?8WYf{&e&3$t@4%-LKj!Td?c%oN8@|sT}r3t$j5h8K&U_(aiKHx+QHVE&R4L^MGhgm%)CNn$%N}L?h5pIVyo-R+qYeYoUo);yzatusag~cz(X@ zL4YSk*I+Qu2RASOB(V*kx7pY~&N~Tsyb252HYsiLO zflP)&J@Ahr@b6^O_4Rw}uF^V&XQS1o%#p)q(RMM`^q6J$>IS}vqPOqjuDEcW7^xSI zYNjv2mf+r8lOIVWscJ_0Zt7>Ewdd-D@c@Oj(Ov_=P}@EWYaqu-Bhv_SnS?-JvJ*+P zmQXP$bzewNgOI>uiWX!dv{Y-gucJKp2in?M<*ZYAMhT3)gmos=Tg6m$bgE3Le01nr2aQ)}51^u+SN=Oq(Z~aM=oX!k z4|FLVIM*YZ_e~PhVW!`F7vP8ch@MUee=n8I;@vlRdE`{6qN7-dfEl7-9;NuhdK2by zQ`X#!Q?g}><@b2j+V((XXoFPX4RBiTPSHJt?H@&zp2;(GIo^`pym^)wl#CFasCfT+Nh zD>3>t9ys#BX)efMT+%%#-A!dc^T4+~dnrC~$(t#d-BRIASmv0ecZ; zRa>sF?^x4?JA!hgi@2rMvnAxn)eWwN5GkC=d1e>bnsXudNl8H?v7KxriM;%g%XSi* z)28~+WMoih`z}|yQi)NqAl*ptz<$4Ov$#Ow#mu@d>z!^rLPF)kfbgr7z@6oc0xk5H zL}wGtncye#6s_8AYZq8#+;qP=FJDm7YF=%g=LcjnfNgX;5Oifg<_ZIGY28uy-|%uB zHK@K|D^q%0SI%rJnZ9*sfxO9xE#Cue2C-l%JM|NnqeDMPee8a5zg@{h65Z%in9N+) zl-S&4!UL6&p@YsCp|Xg@Fe4NfR4(=t2hXnWzt8fw7WPGVKe9|G7+v@lG^mukaOkyb zqxRy-2l8@#HO1JLuaQ&ZuaAb<{XFaz5}kdN`i1)bBp|F3B(!voKCw7tBpNjk_UHD% zpKnP_mRGj6A2B5`Ku%_G41nqA3)992mS&LFVxrl5$e7p&Q<9VR99<3BD2SBm7Acg9 znAJ}RG^hm^yOG*i0TA>ciiN=|OyZ)G5^5a-$l)v|Z+ZmpxLYFoy6wCBGZS=o`=lQc zV!pwlK}yAqORs~q(kWpYgnZl?$%ByyLcN_CSb5QDL0Ftesr1mE?QE@ad6v;(va(R) zqkl%;f5w%eIMuD!VL5WAi6?<@PX?bD;F_aSlQBuPf-?Q%%DL$GUSlS>=1~}t(Y}L` z>pLsO=X5vJ{^Ph=x)rytPCpUyYnqkMA2e^?=OFv_@b6z1uH`tCQzR?e z1c1Mby7x(#5CU9PMyr)(s>2K@Jdu>%fWZUog`8xP**mfvvV|IGEAMy5)`5+!maKFa zik2lEnGgK-$zQJ?h>Ro(OEmFa@pizZ^6NLb@eK=Xy%f-i5;j%OasT`l1V9*o_5M^{ zF0`)`8!;_g(JBP$yg^%Y=Sf*Pjupahb%yE=MaeX)LrQ@ha}lgW26r+;?s=fKk&MUp z8T{)yU9p<~iYcdog^LIcg-6wJ^)KK4)zMt;*aj~0SUn=#Z!|iaqWEn9iCzukSCtWq zz};<^N49X6v|HVU23$mE_G|npKk?Naci@+7b4xU0x=8}AzXV0o`It1{jte{7fdH}? z>U|LJJbR&Ibm8XGDY12i_`S&6{6n(!`EfJ+q?z6`ur~ZEHwyz*3WTxjw<($Mof>}C zB%Kn9URNUIn^|*f%qzPke0^Pa>qjH8A?sNQ1t`tvB=GX%$Cni-=7bA`fo&eX5LvEz zT#2!)!QoL*A=Za1pP;dj{>8~HHsIp?Hl$7E&g!L@`LnJ9TL(#y1S5W~WMH+H1O^k_ zdl-BJ;)Vt~vLR&Us_|W^uSCpsYDrQo09drohoG2RM8TM_cH{#fG^$zRC0MTk1e<69 zpuztq)^;y(gj4h;PAF#{UP{O}i9LT$|5P(Ar0D-?>#hveiQ{iI*o}Wsb6r9C#=U^E zLK*~)K^o~>;_IITAF}xj83&EU1-n|QljQfW`QOtB$OXm&+Q`qM|Ag)VB%_xh z1JBSwEOpedBe&SDN4F-_yTAra3sb+))3!Y4k{!=jeq;>?-yFwH|L{#0(9W0!n>`KX zD5QAd2Ic1fI?&dKXB3mj8Q4knp8gWOb`w0kL-&umg1;hbu__k0l05IO(!4k*?DI&4Hxoa|z+m4~>^8TFRAdmLGY;dpyw8^WGil-@is&6pDSs zW#DNdR|;V7(i>JDEv zpcrptl=fpT93$lUL|oNFeWrdk+Q+eXKLYpUg)3jD17_nr_z*K2bf9T zt45^-M}j#UVGEt=)J8%4X#P_7>=r^cubB*1Bj(_!Wvj+kczblI*@y$0f7UF7r45$} zEP@hd6NnWupfdgV&r3Hdxj zvl-7=X(w#eI8zbqJk=p3x>wQ;byu3a%C!HRf~Rm3UeK=Hic++@+hpHNsH==Q)*7(y zWtYIlWzhzcnALN};tZsrJM2PLZSad&(Vu9+q_D zrywp2i%z-QxbO&%K2#(`GHlve9Z4YS=e4%b`*NaY?j%1naSQz5AI4SbM zwPX||67WDi>D!V#d`_a9rd=CZH*#_BS>vSBsCh}5FB2LU z`}QY1+GOP_*$ekAe~YEm zG22nGd<~WYsiYeO8rjtzqAORGZdtjVIjHuWU`AGgAsdd2Yd%k{YE70e{^2L8U=!3! zgPR#tySTlUT)T&(_yp#sF0zSFqc+uII8C5_!J;v19&=CIcgJ{3A_qtbCkg6mG`b@e ztWQZ$t&tNbyUu?L(RxK*Uo}av$}KGkSd z^y`)n@>;(UL{7_bv&RlCvwG2r@rb`aMXpcD2cy9&3>hdgVYC{bbTV$r!qd7z-Q;@I zEmNAFvDEX{?UL7aeu$n-x9OBYf1mG!nn;~5<$D{*5R*L)CBXj zMd>>>f?Vwr&yN>H*k?b3~<#tTmc==8*xAH1GVJJ!K*jOITzb_XNilbD=xW| zxjthJ&2f?-vQ}-Tc}GZJqD(7}lwO7(aC&Ss97^UBx>>}k1C?{1(IHjeTgv3c5;;CM zwE_QsK-homwcn*_z=W8N1I&!1)!^a2D%0ntgD1MFI!}a$Yyi*0O|-{fWPXyiR{C}% z>drG<+ciVEyps#nUJqxcb}OqSP)O444pof|x&KB8Srqr3^MIxxVq@#PlJ^T$%{Uo< zxD!}XI8O3~sY<}+`mhQM8Fs4FYYV~6RE@u$9wz#TwV&9G8sAPVeZ9M*?UZBJo8>5!(lWvFS zH=tPo)E1NJ@Ig;ggIAjqZ_D2|`as;R0I-^tGm+uSI3}JMkDhl=OzxYBY}pT?{>);N zyez9xJd_13YW>v$A9L|z8R55GX%Rcd(S70hCqU=nWc_-4W@Vb&og6=yO)^(@zjcnJ zX%t&{sgn3_Pmu^Jq_l+xYEzs=0j18kAhS;M>}oN<+t;j}$QJoLBB=^V4h~mM!S;f~ z=IVXqCay$ZK8r$o5CM=98nRWrCTZg?<59q57I9fVqfUD99hMCOcwjXIR95jVny9XS zP}Gtri&1MwThX(K46=MoJ!%t~y#gNWWP;z~f3MODC90QFeVadS?>Vuy3c? z|J66#MK7B;wZL?BGFUllO}Iw^;O^OursYbS9iehu=!2&0%})=ttb5oqL!JIB*W1%* z0O+uWLn0Q%c3hb>WeZ}J+pZQtwMR}EY{=3L$8v}wj^147cFSByKV!Z=e8oNM$$(R3 z+SRc5Y&L^&S-++IaIJ7@j@Ow=h>k(BM1#AhG|h)U+UawM;qJ7L*{dt)<{TplAXq3b z5&*8naO0Xu5@H&CoB4vQVgQoP5TkF`R@v;;O5I=CVb6`x8r6lUjA|?xYHSIBG~lSA zg=vLRy7sES*aW(5&pQ8iV_3 z?B>rFBBeJaGqtMNj5xN-=Z|CzoA2n`s5PDZA@0ikE1Ky*wwkyX8U4DcW@rgNmQr7*vF^Dk zGYZKp9~XYkE1V)A%q)&|l#R`%jNjTS*Hm&bbo*58l+0uUwIvu|!GZG!O@oD%{ClS0_;3rSM1-o4{ zE0-4<9qf;C!3^)Nt9V{bA9Py6v{(Lk687lMh`IdncfEK#EcnTOq6`J(W1# z2DS-};Ih*~Lem|$agc(Z^63}i0=-{2+m;(aB3~#E9#JTtec;^<|zdWYRV= zd$;GmHJ7sP(zlzI7;hYd>5BbrzIr-f#t`s(`Z1a1!YfPN-?2HgDci#{#%WH-4Bk^G zkw1hulOeFqCNu+tzHTOZSzP@p{TKsHVE>g5Cc*}|sLxM+cTE~737UcnM*R6aE0mio zyCva3ijnDjEzqdEOOgZ+qMnp!4zKG*sl+GYv^p&xM5 zGm4`p?%@Cs4$yy^$|!4<$7(@OJ?{K60^ih1rto?K^|aR6rj%){Vbal`{@TlNY<~fL z2#fp73D6=T$wo-3k?=oxLFO5=cE+QT`@$|X<^mEk(&)b?hG?g4;h!zw3yGR$45%m* zbZG`;k_N(JxMK-FMW3`0Be>;y*e2I>z!&8y;xO+0f9P~>;xy+;hP;qG z)S@5HAIHcxl@zEX!Ut%9U?25&nCG7+{F zAO;!$e0|ONkDRogw9gE)Ool^wcRgz?)0YjM=9 zxPr2TWaN|376guiCy1!vx-;>ca(_QTerQv;M;!Va!+zxWZov+JGMXW+FeCl9lH(cS zP9?+X&%4(LiWZ^Y%>8WY`sJXaFs(QS_iZ|uE8;MHR`v{0L{%KI3_F&Rd)O@Bb5kWT znl69NLE*n71z#c?8V8nIm*K#nrR&iYhWMFC#rYhGjvZ7Fp3e>k`Ay{3lLm4o=zgM| zYIr6woOrRk+=Hz|NPeC61V(`~=t;vslE-&)=bF@=P zNYBsO$Egw)TRZ7A?(qsv*Bw+R^VGvX$w#cgKzdf6Z$+?O=%d3N*xlC4hXzj#l4c4IdmnNA8sW4h8d9V6;DDpphP@ zpo*st&{1hz3;}S&v&!Wet0Hvd9EDDEypEteb`_j1`2YHh?V4x^Q#>D%#_35^cGckU zLa4}|k_mt}$c>r3#*e$n10klF?)Tr^Y=w`iS|&zYq9TArp(>tvfLx;S!Mwa zR~i0p&+X03J^jtfEGMFUBw1YmmMWGL6*|O1+H`t{eW(qPS1Yjm%H`%WF2GVi7rcM#A@qUbi~0NdLIvYfpF*5j{)n z%8`;!8tNk6KP8h`BboUkcLKaKU^;YZ>P!%{b8HjfQUnJ%PT4#yKzpUYgmbiSvo>t{CXLn)UI56~BHt|LrM!jAdF#f`!t;a|iko%l9$Iy0k;Hbi57xX( zecih&^G*9d&Vv7Z1prD!?M5I`gx>_JBhiKr-ku9Vc9Bv9RFGo!-w$7-q9Sx|y?m7<1PXLA2AMi2d`XRY z{&5V~F&0{JmJs7of=oRdZ~P#R7}i?N4;3=qfLSj1brhP36dJo63dthF&G6}CIwh`* zfw^^rF$uo-fo+{P^G$y5&593uao6?>33)@*6P+uOJ9qv=2AZF?6CXCkf?RxwGOj;k zVn8|FttlrL@i|qCImhw=v+9EB_^X`^4i_=MUt;dLwSJ%Ad5qCexoXx?jDXMHYb1$} z%tx6%dM(D_M;gJ`iEz^{ui$vgGh%F~RMB$gr{&P!*O$Z$1qzFXsVTa8T0VcN$f8^n zs8fsCUhKc0KeMZT(UgeAa=*}zmRQ4P)w?DuT8-l4Kkxdqo zwwHWuABmd=q$C?xqXuZG*cXoU3T8jO7P)X06$WD9w4I6H^;Zvn2;N-FgCke4y<4C? z1V?bSfKg2)LaW4G*ST*?+29l<=@l`5AraK!*zl>ALPKJ_exz08$g0LFz8=6Vr7G0wF=QdEna2m!TWNDHy`ey7 zt^FO9zg;f|B8VCDNs%8uG|kE$>Hpd*Q=U$1T4xOx0ty2_2?mv^4@SLGP~M;B3pbDr z47@E?Sd3@f7VRl;bNo}1uw|a^vj@WMrO(GQo<9|ykV}{l9LttDp17es$<17Mt~Vk0 zS6hbK-)2^}*k{l^RS8ji$FI^3N*ws}jc3zR9D=MM4Bh7YPY#3#@FaSLW{BsNEJG1# zvt|?tUm4E~{CEj)m9Zwtxy{%h3C-eGc`D{6b>|tiEbF-F0q1b#!+87?b0iHO+c{~} z3kq0|Kvl4ay%6h5>y;qEYlf@?{%||d_<96qX^GJpe=(0C>`E5{QtvZ6UuQekSd5O8y-^ zD!W+z!n0#G{`D(hz{P$-u7{o4L?(yyM z*k=IeXF4pU?}f71_7@VWP#o1j`{pO55lgTThVcw|y*)8o?HYb2+Dzj_JfB)9+gVvt zUO-)n!=F>{eOGq%Xq~wG^H$v*!}qVgCbAF6D^x&WoYJ)v7>;yH$md}ZhP7rP3o?s6 zWynNXAx!|zCi>pA;U~ATEw3?@){9SX4EfNAa<>itSq&lnn-PcQkLvp3XK1KJ0KBkn zmG#X&1jB>C5n_x!y0blYl@$6WGJLVGKmil1a8Kl{F|hd>fX8~YJsRv($%lCw_3UoP zeR@A5cr#dnxnC@O)VcL32(5giVc26fR5D`gB)CNT*$%U)s9GqW(j@ z&$j?ZI*9rA@4swE#C34Q4BQZ{!@7DhDV0UB z%eP#XuVF6#VqaJU{`CUZfPoSiToJQitu`F?O+NC^ooC5;87{I=*NYlFBU>Sjeo>oRcJMo0Wrxb^@s%!OtLEdo8Z;k;{mf* z@8^k|%1}g8uXch|a1gffWM9Nd@FN4(K$MxMpjVBPrhh>XX9#_O`EsddP#oW!gK2$? zmF|~^%?oFP>3KBbK%rkj-RW?Xb#@K8jzzse=jEJFdTDyHM5pGx;52Mp9FLoR(iVe;>FX( zABvoU_bM z;!F?NK5H7=cI4M5XprUTcFm-Ql$& zm>hoSILGUX4>SsPKLUV3rt38J9rg5vISbS*-)MB1I2c_q#N|G7L8vFrjJi3kQfeo@;kf*uB_P2>ssm>>;yuEWk?qG95=Z{R zGCTx!p?TDHM|kIj7-uBXlL=58S%Nj!lK|3Mdl+iw6od+_NT(-o%Y4pFI32YOHW2Y zr{6i6FMS+xO{)xblaW`7OoO_(O7gJS2ZmRdc+coM-p>lLi3RtOY-BCFjxy;O0M z`_fF^RDB+gfTcoCcI5Ty{Ylb;uxe?x7iXL6*VdVtbPAP$IFz1nOlzs?uBbUt^dL(e zF_QN}+k1n%!9_}lbKVRQgdy`K=Qq&RKiUq+F@buR;D)XU^oVg=kGFgoxB}#=BMyO> zVw8#O4KG>u6Q8YbaJ2UkS^W09hXg}fGBQGxZ^{nZlE7NpQLZqb>(`kyD~|zGXTVC z(LLM287PLTu;wyWjy|`}u#vU3305YMqK@ifFCKGQTK%Fi`sqV?Xau%`b)x(wiZblx zC!?nCy8?O12`u`d#=vK!Jct61ln6&xRxB?5f>cI3O%z2<&=ptsnxvO9!8uGFO3GQM z57+aEeYC)x^P9Z!?2}D)cf&N8odPx;b)Mx*pm7<|*6&9G`zIKMYm>Si#oTGCFlyGsn)+^E_~v7 z68SHQUm3fjbzd8FL;Tb8Z2~0nckp9|S=QIEIFOX(GdW;Vo4Ha?UU_)<87d+$JbPA$ z!O?@AXz*2Pv@t#h z@Jb6<2>3a3-^{1`J%0Z)pdT@MkfR`lm@9r+d@ zl12nCjYO`F=mxxTx6BL=ZU;VIXDmDve3T`BEDUP-5H(=s13i)yUAK>G59Y!ebKydT zses!!bW1bCfn0qTQm`I#b;u8FTcm@!8Mu{;xgp|SAI6O#hKO$vvNMMX* z&l}DH8l(^dM`b|o;GyR+Dv?J~47h+F3N|0vgITFQSOl5%5XpxlC)@!f&vA!T+sKyl zyiz3Ubiilg1=G>cXW0M7tV<}2nK*Edtd;o!-yQkbYc{b~9ROh(@OcoS5CFC!fP`Cs zSPD|F4aiD}QyGegYmf7>G4@M<_i_bK<#LCjc`{juH|0)!)9&!(>I0$-(5ARsZ}k(p zunZ*_#!O7OqPc0Bhj^xqGS8^Ll?NnEmhzfK*y!qohv{4-B zZGdPA4)d?Re+})3K6HJGz?4|Jh3D~fbR>6ILj*n$2W(RGD3Qw}=HoWvlVSedu>lb! zBvuSu6&LY(2W3NKzyiQY)YJ|N_^z}56$=GnS|&eFK*EQJ-u5tkEOagwWPO;HDSH>} zlHT0`=fQ9Z>0cktsCH(lOC(N< zM`?8eSgAlekL&_k>~msjZbqs|u!{S4fZS}R<*!hy#IRJl$}G*{_GX&X-Fx{$x$t+; zGyu~O#w!htq5@>4@et+wEI&iG0G@}D!~Sxyq22C@VKuS!@eBr@$S7OLos3M+F91D! zUi{H*fv~U`%KhS(X-RO9wOBHn*fqokAWH%*vyKqrgceFL4t4;i2Xdc_6g2A>OerVs zv%|i*2%yHoOOB?pYH zj0->ou|R)~=9dKc$yz^pqjFlXxR{j{#wj|h;x3!^{8q#yI!VJ?@Qp#{xpIvqA<)kc z#ofrqy>G&7YjTe60<7D)u`xyec1y(qK!Ge!V?3nMD71m!IE3Ek5JY=Dj9rAG zH_IQ1RFg?C0RRXpbebM-gmJ2^ehz`Cqsu^Em0l_}IVgcj_``?Kj6|`)U}8XsZL0oa zeGoAf%?_)uxhROzn#qAK7C=AfR78_tXac%*ydrmwoLEpNcnjuYlv@H|F029cd9kT4 zl|4*yhz|+S$AF&C*Xv8b?@45037QFUFrCnVI~eedyoQu-S;q7CbrN`(19<4bvJZQY z*(k7PYNL@ynYXPte?{5+xhK0W^=G`E=*XuD>_n9)qYKtiPZAk~31CsQv0@%42ca1_ ztZ>!R8ThmUu@1N#!NVPZWZ!@6M+2v=SFclJlop!=y&tV{J+0U+^DL>iB*A))ZWkJr z|KZIP`F@&p14n(=WYh#wz4`UN{T_gu0%TEZ(%pAvn?+O+Tij}!GBZL{ez%zM6=3*U zmv$>}*VNxwj<7T=ZySL$BEbzVKHujw-xrWiw0Jy|foN}@th%Be7Z{gXyAfT3kpK-_ z&JFKs=UQlo{%Wt1JgYv$8N1JzCl0s5L6iBoZG|1PGE1e#o4F}%EXlx!%Tj<@#FdEL zk4uesd$J{?nyP=?v8Bc0EkLig<1|VfW4W`LuVE`cVA~Tu;(~lm`hWkENC;K|E#~ z=);d5XfOg_twvALuR~D$y^0RK%#%_80<0Uw90+7ypY83x-6vSs$E*I-*zO|P4dUAe zR3&))RXaP%0YuG$ohg8AaGN<1hu1J4-%yU8sxJcH~e zgL?JdRdfC1N1X)N1D`DB*Dsg=`6ERe+-BP4Lm}&-2i|(qR+}=hB1d>t-`9z z0mF(PA@>i#-X~pbG%z;<*GFFHRlu|0lcwNr?EYgZhD9S);}JezU~dynT@(0$ocK|H z0+4kUm;eCDNYj|%idiOOFfvGpFpzfwH=~XDbVF{<7VWSMYU2Aiea01=CNsDb>sQ7- zWNkt^f&R2`eh=UVKg<~e98jd1v(Z`^20$MnLd4-w2mD0$0AL+dg=efLqTEymZ<~x% zT*+AKp8BDhyYpDonw97 z9Rl>N2S=Xs$e2}zw=ov>xT&3o)1VHA@G*yhVV^m!)HwtZ+)RO#d<9=#PgfQ~5-5Jc zrs3QPBj;0l#5P}K3vts)Y;@L=V$r1Xlx8*#`3Mg-&p6f7TYvph8t?!I{;oeYwj62T z_`;~c(&ziE*##PA7GkdPa`XglwW_&Bfe~>K%?#+oY={cI1>z9QW-}k&Rn~QW*6ZM+ z$?E)pL&bf}8wd;NJ_Q)Es_6zmh0o3;SU?|OU!ia?V;Wp9wR>Fowr9ga^3=VH5JlEU zz#xs+*}jV~MP&9mRGG*&frnh7Eh|$XMnu1h&I`KrL2pB!)l9uO{W|*#_~yxl*9wlW zn|<-QUqCM>0ax%aH#&9-&87Pls9-+wxy#QoY{l!Z(RAAiC%B!Ki0h+u}$d0tJF^*gKU%*+57kxc;ruUdyap~LLZ z$gfY|DeAZ{c0a1oct4Q}3!eo$0U(CG%ycO1wZHF|hk0O_8_uab!d2xzvxQ&U_A!Q6Nd05Qj&?m9g3{@Qi(AJb;{&~CoYCfh8iXAKnRv}YEuS8Mk1 z#`vC@)|NR9to#Y2`3>Nk_VSym5n*i?@(FqYk6c^>6=yK-XH3dFeth@oF+4!dR0t_W z*i!z4D53&qm=C_MP&#DZKl?XpKx1BTLiS7_Bo&Xz{QIQCy^${ncz}mh9iqBX419;c z)9JA(sfXKB^OibHPV2~}-UC|H-dNE9RRqy{gy-K^)($*B{k(PmV~7s@8GPf;*9SX(0eY= zkH#jqBR@Yt05~4tKt2Hw%YR==&hW>l9|IbXeVB|x9)Estf2ZL&v#}t9S-`Kn&kr_> z#}#Isxa{{_gHzL!1 z*ghGcmV%_v2om*oS=7msna|sjpFTX<3n(53QT_la-pVfF3p3rcCqH~PfyIY^7mGiy zn4ve%GH@T-?4o$tU1c;6{l>t9t=`s8Ptgj~nPE+v)zc>vCV;)mw;94mzTf{X76Vy3`@hxCNLb%y^Z1GKg)R9vTVGK} zfftV==LlBOuzQDp-=6vR+zCy+TsP_e=4e4`NA5Qx-QoEZ483Dj3c7;-^6PZ}=JQPx zK?Zt+W`T{aHn#s9F3-Yd3087~%EZsVWWJfmyr!=nGTH8>@2ZvT2An-IdZcm#3)x-Y zmm+Q-OufHPg9g%0d<8dJd)d^HM|r3nrdy&OSjcet&cTH@pVf;dPd{Z;{JYmU-k$cA zxJHkB3a2wHdzm3YOf%eQ_|fReXThzA?LR}P|28|Do%MdVkHdmY58;Q5m`VR{MOuKp ztG~abeeHX!(!>rEnFal~iUxHCrB9xIH#hrjQTXH4KO^WGL<9g4p+U18?oFou`hU9u zPAln`6#EVpz=Ck=KpEZhlQSovKAyJ6e*@BM&j00N3eg@@bO^q7k8X#|@l4-%7I2^A z$Hn!?67GI!Zu;3K{n7MLVA@IUg>@G}PrBOy+ZO#c?FIh^{o}e5oc^EXCC~Is3f&Xb z*nDl^WOC*Xeaolm6Bx@0sCU}6|77y*7jv1`fXfH;$oI8Q75|HS=10cXi3P)v5_rd% zS&Gqk>_6iZy3YQ;Yl!y&{v5`D4Iq7l%?48kY1irWK^OtzC^4~FLPM|DEj=lL)s06_e6!+LH!(wwK5ex#X`W>Y}4 zbHKGaSGvXhzbi7Gv^-W!t&pOxL0HfLps{qadxPd%C0OAw?NAep`DSc!F zo20`imEOb*0*2-7IFDu~BfJ&Lm03zh(lI(o{D%J#(x4hUJkdJqXR?_u3i5zJl~aYv zxA#^&(K!Ayau@v;L+&#hjOF&$$t9L zH=HXx*kda~d4(&Fp!1yuu$hDiNL7qy`6w%}Q)T*Z{1HvKi#xn7d(HM~R^{)#lNHsrQV?4#m) zW-$!K_`}c7|4y&O(v&|qVEfh6%drDH z^Lttla@?FQL=Zz-^%k}939L~ScFshtRoZ%=xqseQN-vy7SE{%_`0;CxDf`~jshJQh z?6lY0`rFeQBY)9A2C&A6l|~Fp9Mt>!>8ci-#il*@rCGY&9>0Z%`5okqFu>pj&V(H} z*R4;B9q&#Oh%PCLU;R4C9XtnxD90B!!@QqICa% zeQ^H<<==0v1?HajT<${mIq!^KRBt!2Xo1s7%F&;sa+3hYS4kk-(r{EM0PMnH-_O2T#Px2P zfUfv}VvG<-e>56p>p^BV!uhi*iyX`+bYJ?3A)1bYwu+Pn&;C0=33WIM{ISv%sWc5P zo5){Yh$FSDtY@s>E=@sTH7~ij#n^V^?(`Cee#By3H!{=15-2APK!UOAe*!NRtdEa$^rs#1$tQ zA#tq3@2@Zxmde|_o~L~m8Q(F9P~Jn)ECYKO;RgrFw3F(LSR*G43)&I-{7`ffc?l(h{+MCA^3()4G3RqvM?>XM2;Yhc(uCeUcVuzTIlfe&cn#I ziGdIeM3O?*)_N_t2|pk!n(p_OR|h(LWnak(fgGfWQ76@#xz$dO?lE` z@DFZK7XaKN)@5zfD9P+*j-**@g`+!^goWn%zdkFP;PA-zLt7Mv3tNrhoa1Yzeq|cc z&tkhH9Eu<7 zA4$Gb`=~k_!-*}M@P3!b{3oY_-B&n@(@}-tL?ZiI$5Tym)2x`z`ZmaFx5+ zw?$66q+TOVz=ujwIeTyUQo=DzT84BL{kPz8-Y2oa)Gw9p->OXA9$Pa+ZZfjPbctO4 z-hDMH{y-zW==%`L(H@V1Idy z)b~ICynXa~^c!yd$6wyL=iA}#TZ_&)Hy1194&+e7e(#S8{#phu(b`M_ zK@ETi1NoqHz@`3%|=9j2!;JL1m@oF zp7$2rx_=5MhN9)|&siOQ_ZT^kmAmeO6pwsVWjC*crmLe06QOjF2)zbtNC9`uM)Tpr zJ7}aW_o&ABsK<0{)NE|MQZ$=&#P$fpgcd7u3=2Jq_CtiVC^_D{WPVMNY;cPlmPZzg zzfvG?B}tzwP4N7rXz9D<=9d!#!2>ub02>0*{4^ns4x(2*3|Gy7*cwE6Do1Z~#SwNG z`PUO0suBe~;yl8lZjJ)^XyHvCLc6S^Ij=|TwkMW?dnC(c!;ZeK|~dyEuR&SYIgHK0=&k*QlsaZX`LP9D*XC<9&x^A_KH!(gJX@V~UOb6SEXh$k$$RvH+;MP_xFf&2Ge=JR zQ3%vNFiU9N12dewzm;siovyR^u>N{B2Nmc_Lwa^(oBql`FQQmFbLNf{`2%ul0GWEJsSSHVIxPE*7 z>rvnfbmGcx#?0uW2i4$}(@tdJ`lEBB52|f#SZUF%H=Q%Y(uaSz+Lv>*7`nCJy$jz- zzNr+#v>=~YonS{pg7$LKc~S-Q^Ts=i`04O9p46)PQM$*FC}qJ5WGx|x$Tu2e>7Prqd3na!yQmVmnA=~`_` zTH_S<@bX%G`Shs-#gI3%cD*`z5#=RRomR^U;^i`-rSgtJ*a|B8S!zp{DhhZL1(S-U zI&+g>gFJs*5}`)I*RR=rR~lESQbSY~>se)0Rgn@rdkp|Jis*P{EhrXDPRg-RLBH@Q zH(4*TNvtqFy|On24S|6T@G-dL6tN0F!uy<=UG zUm&_?P1DyC{cgzWW;=Qf4?0%TJWm80ICU3jXmqC2cKjXZRTGuL))J}wi>QIbMC&mM znkT;n-@s|#uvpMkL}=VvYU=N75|}_XtmnDn8{h0Tot;4L7{SsH5t+os8{xJ7fPyC@ z?!~9CY8S6N`fgSx>DLKEbpELtt0g$H96l-Lpn~3ILG4|9xBP1>%5MJj)T(`o{FMi` zqZFX?rEv@n6Rn`|CPH1)D@jV`>{BBOgqqRj#lVnGg%}?qgzK^!4iP?dc9(a%P(-5| z6&%{t9@qpiFDQ9nQ(5I@le1+g_FGHY%A1}p0K}SK4|Yd41FQqo?))-ZP!!kOms1(5 z>&f#pS#J3UYjutT7+^EgmQbiM$g5}75As_%CtA7xv=Y?1-h?-~7j_L%+B%oJj4?&U zC%niSsQ)D_>Z z<8(J$O472W=+0vjBE_Eb*?`dn$RTuUuST@6Cchf>8kKpb4tZ?f)#Bas%C1YA)&>3_ zYHoxK^h` zO;S_+uG1S*X9`ep3NU)um1Wn~GPd1P-sR#!=fU&TNY+)T(w@IYF}yZnsG(P6@lF5u zXxvgXdesBwLqqTnu@tpg_|SAI5M3O^e0IqGW0zl7x6ty_;X)8sJtrOjwX-Y!;2FX3 zx`z(71I>X#)JH<@-Ct$EOY$4F-2|3znuaXdZZW9DsSlXq2TD$df|xezdaH>Jl>=%; z_VC#<3!_$Y4U~?cY{_T?3FQaTAao*I9=grUr-86P2IYsQ&5pyn+uYTLY*)H09VXgN zh6pP|L*Cu#*v2BluwU}<6kkQ9N7T*VhW==X1ps;x0KEW!W_ApR-7ybVM?`EqDAqOl z@J;K{^{Ux#%15%mxO)mktvGvjRp~btAD6AvbpULXr_n~R*-?-k1)xf4^_&1T+D8=; zQPucy5aW;yKePlt(eQEHy^uDPG1R^?TYqns`R`Dt6grGy(wH{H-2>s_@2Sp95*IHG z)$6}V1qXfsxgK_F1z4x?K|&npy?s-Q>L46mZRhk_l>lA`M;KAPFp!wyf8u7mAcD<= zrN~zhUt6DttOL_=VyHuy4h3+r3&2O5siw?i=A&MXg8rS%lrzo(AGK9eAl0}b*hhpI zmO*TNoONobo`25LXZ}{keA+q)egJ}f1cgM>p51GkSZ;G?80MOs6PyAbEHzGa4~zJA z)A?+U-H<6p==kL1MY>oGtybo*VflBMd}`^9>k29jFGHlKakCJCj5;vll_!Ub?jz#M zqq;J+v6fgE(O#^R1hJrjbl4h9d|q2mL0YJ<9a2#s79=4VNnM|5De5v0096H`ZUvyc z{?5Y>5N+zKw*pq*M1qzYR^d~tuTE1Zo=r|fO$~KAbZ-|t5*&SW{!yQw{aR{IyBc=! ztHxrE@1k$8bqFJbl|$G0P?=7eN|zT83x_&j=)3{dv>bJ;bJ7A^1DRqL!1VXd={cLYFxFMdNMu-?w)d zmqccj!oMw^HoSbVJ|IA|6}ooOoxJ`>nHPmfxv34fM}@Fq!C-v7WWe%O0@!lt`PH%N zS|X|h^B%tgwogThXufwmJ(#hZdJlD+SEslY8LQ@mEt`KJisOFUbgi7gcDKxQw8ggjv{aU` zyq63bF}ux_VfWZjWn?C)iIBGR_diTxhr;Nr=`)j+0pH^^Y8)DeKa+xj1`XT*KZ5O3#GXplA zd}vFiZ~WGG{}zMJtxkUR9f4@UST4W4K-|B$j&x>Lxw0V_pg@E-8qsRRpC_XoLC!ejh)bZ?ArFz*l>8JaT~ zoM(1jsDC0UuoN1??#U1Hi$C^y5y^*tp1=L!bn)cT^sejWpSjHYw@f!0ir!cjO%NH5 zbOCeV)3f?aJUFT;1(isS80(5Jk$rn9pr7r~lM&$6tD0mI$nun<{9WlP6`% zLmAKr2rC9Vx~>(2hqLu z>nCuW)uf7BxFTOpJy5y2H$Fs;=T%fUQ{l}@ekfs_yPje`FuH45mCUITd+oJkc~!C# z^vBriszS?KlSRVzmp<08c?zfmu?#h^cIa+O+I}@K%x2Shqnh+IW|CD{=2gL$v4Ke> zm+uy5`)UuUiwwUOsF5)zE&<3q%Fa7eb(2!EzmkJ^)Y~yb$clhE~p4 zKlNP!1b^OMT|V+(?+a!4ElU^%Y$)HFR4#?YC#4nHP|=1@UB#8H?Aq=j2gXCWGb`=i z)a+loO7Su)dFpCZC|ZCeP{uF$@>=OWEkt1t8 z9%S`SQTX|up|N8-9D?QISLw^NWW4R#Bn~m&hcua8lWii4m-#deSrAP0JF&(kaX2Rg zliXZE0tNgc+Q+3;=2_TyD@nHWw$Q2BI_Db^Y-%_3y;J=9zMje&JaUUPbN~7Lb(l z1^iDF=F&s#)jlu4l3XaM6D&&9hB(pSgtRPU$+f*CEz5r0uD719&Uj7abn+qau6;7Gq0@(v98o6)mT~y;d35IgPc7 zX%QVQ{VT5Ckr@D-aEs3`Z61(z` zDejoS1?NAQ;^Qy+(3rv8+H)MD8+yEpk^#Q_pU#NOOFATP8rxx*$~I^*_V%$=ts!F~U*tB$H~1zW z@Sgsq;gZxqbu!<|;aiZzaB8Ax3ZAWnUj*Bpqp3LLlH#F@KmK~kX`?I5T6H^F#43l( zzgZ<&YLHQHvDvjWWuz@ze*N>k5&66yDY6AZ#ZR@%>KPSC47y%UJ_YQGpi!8;v8ynE zQ45T##-XEam~(Ft$sDumNN(Y`2%VB-aT_hfS1-1cHMm%0?0eO;>a!QafM;_NB*+QF z6=jSK%I}qV`n!c;1xDpG$P!C5gX_A&xsZ|Tue39P1uI*UKbkB*3QMJ;=j^e;56_@( zSxQ+7owMs`e*0rmN36hELTgNozmhe+!-X*|SOHWf;SHJevig>$+q$c`e%I`&)5TD7 z%!OApwyQf%N7NRg7||Ja86V9XNhFJ8yi4}5OGNhGHf1}VoQPa?CK(2kQ2Q|;{%6Du zo;5v?L9ht_Hj$z_@nt%Q0Oos_0K)+DuV@98@i7jf%8Iqb0W3)z*=$e|$s85R$5IxH zT?*bH?peIusE#X3GK}FFV&J2+Y{i3#C$8cpMY0|_8fuxJgTwx6@jBZk3?3dM21M_fH5qB3;IEV<_0T{uDEH0V9TiYsdpbWp;1k~yu<0w8{felH{ z&x|v@;=Hf8Lt-AsuO3uLpVbw(f7v6KhjSYnJ9OPmD+gvbCD~kXfo0O9hj|> z>iH;VX}+}Cw4^s#Ec%e}a#{kr`) zuC}mtBYf=4IVF~$-%D+C!@!+9&Fr{u@pEj)rk4gD30(JZJY zqLhPBE1Fi3<%fB>Yig(LL=8Tb@1INc%kGDs#X^_?O&Yu>6)*(^jYFWs%kkb#E|oC7 zOHZ4U9q);-%jM1}IROMX zUi-UxI3{pSoFK1WYvO2)58_s zF~m^7@t3qY(UBeqlfK-)eilA?VMj3l9Q%k_U6XZRJdo&YY&8gU8$5qa^wmYK_KZ!1 z;s;FRol@>i@U)lOD-{_Ugo>=5dLas(n8*^C%bcLkJO4;W)}378~eTif2#+P zgMLbd^o7a)ImcC%M@R3S*2Fv)2aY(X^Ee29Nl+SCjIpx@Yri0CD|$HojwIIem7iH$ zolDa4^JqU5CaWVu*FkLhgCJC9Y=l@iYX4zGnfq`51p~YF9^3f7v8H*y4xGdCh9FON zh90G#Bu+h>aT8)St581*%N$FrqzCA<-^pIx*HC7NB?C11X~37H*iAmNEJf9_Gnraet$D~T1VPOw zYElTjJB7XV6WIqFny}s8VULuN<6bR$vbKCQbQE+!w?!fWcrk?}Tp*!JWI_Z0x(C#H zyyLtvJ)#q&)4q+%DHyT{fP4lG(K!ZQS%^*ZMp=2VCu?OacR`2Q2JP{!sFOzRAUpqw1d zTdgIxkgQ46e1cByH#jq_UBdoih<}IjVS@BMqgSM;_q_D57-R8zzIO9|rXrPytZQ$3 z*{>}gBXiRKlT36BV)Y0l=Bw(&0|1KMadZe#a2|{w0Z={>y!eZF1_98)kZosmD1;ab zEPrn_Y8k8&$*7WQKbVD%hra5Nr9}(yiEz*M1y&Ef@Q#Nrb;i^sIVrc@gH^A3%2OX&ooUaOSo>&PU%lA+vul)g<~oT?D}Q*I}SKHZ{;CD(iNxcF#8e^RL*Ui<)?l!Ze`aJre9*M8$fL%O*h;uH)dt{?i{3sXpZr zB76F^lU+`<@xT_i9|ov{yRr!|-m5pGN;iskJVujZ=3gpQtxMJ0&?2RARpPpi3()lC zB!%Ow-h0vf>#$BqlV9iJ-((s5aWxq^k(-)Br4>QtCt~4{_%R0P>54|Xa!KQ%Ubh9U z5>U;;kJhzif2mu-9Ig2pq7Sp}f0HtGAP-J0U7ey64+@*KGpw$sw`}PSS(^+cjOFZ0N61tf{C`ql0Uk}0=|~};Dz+@ zv@erTurmZ`J7}+*k!A?y4#<-2Cmr3Z>W5qm!ob;Du4>BhpI#Blpp1?<+H`YnX2Vz1 zFMYczuLeB*s3&Z~&Saz&lTW#x7l#yn#d7YNfwHNiy0+EghzHjKJqB^6l9m#H>=?6^45oz+b8jHgB10^=IzF5RGoX=n_$`7VWHAaU zMB0M48hGjOvLXT6b}!bs5Xx?qJoMN&$23@=ZeNhB2|sBjaL^0f0U^q~506jG@6`MG0b z=hcCo2+>X((0h_71NXSLJsCmNm%%A;Y7m!jq*Kc~yc^x5_eFwM0x?LNy4%(9w`pFnR93V!IqB%J_*-YPT=WF zo*U8w45uUsAa}{Ro{%@v`mU~`!T~9qHWDiz0j3ue%>HKL8-_)-fbcM*#SRi5fSBfs z0OY~$7IfaWd1_%mY8re^hrwa1r-h*t960PHadK-Ibo||-xLb_RLK1%h?A26UPyZP@ z{O@!1`P}Mx?+Y(AmPC37jJm>MH?ifX7TCD<6cl7J=`nY+w^Vbiw&C-Fr%zKcEvZgq z^W|F`Lpl6v)`pL$_S%apbg7?Q@+zrEfTTp5GWol#EuRYYm=o0ku+wa6=4`Gs&uta~ z$e5ln$EQvN@`S((;e)q(>e0NTr5Bc<_E;Dsm%SP=Y;EJ%ch|9M6e^v!nnRV8G64JK zshn5qn4fSgZ=eqoEhlNMHfp4=+H(wa4E5WHR}q~5*~BLDoD0u!YKfc$YE4m;Q;LIG zuF0|#Wlph)a~w`B3t-4xVPqCOUBLGS&G9XFz}!zg5+4qcS^*yRU5TX{{nm{?$*Jb$T=Mm;u&uzd>K^9ayN}vJ;!_Nl6TkOQwmZa5_u9upj zwm-I^+9-;TPJ0T*ta0FOr+hYkkM$TfF}*?0?TW>{7q8?UdY$@96j2Mg@lBDi?h z4!GxI%fGN9+i0dqBZ(14=Rh&&X$)2s9jXLfTydy?Y5& zVeCCjwv3Cm)aN*z;FS=b&m6_Q$6{}sucUr01Yay)5Z4Eu7XtkH>qhuF%#Ky|5#JWo ziFe1{vM>hji;!+rn(-Qta0?E+c=DD*ov3}CH?GZz+i5)~&xsi0fP)4ybL(M&XX!9F z<@g|F*Th|z;${~cBL>0hN@|3XpJp!)D4$Nc8*YCvy^ZSm?q#|r7X4|He2HC$#7>#u zHHIG$Udby zd(;hKekLpJc=s}cBoIE26G7S06-qe4*dNP-ZEiBImq&|pmz6!Ue~Mz1UrsW6xyZ!Q ziIV){v4PTXMH{5z4xcnPSbOSB zWVjQklsl;gI?q4}wZdFd%xjmfUY2TpT{5eOu&=kN{xj;jZ$;TJwvG@Os>PL_c$(mOZ7($kkvZK z;cCx^8$UnD<<0J8+Rq0}=3YIaV+JumKiW4jhIsz4=s9KpmOyq2kPAO!OgR$m zit|lavcOOJ;oFkTXmpgdg5I4w)h$VK`hMp0 zF6<8;b0oK{b!V)Kf;R)z*DPR|3zjK1`TY7R?bx4VfRrJk2R&o_GY%x-LAnV4mNpDl zCw%m*|EVw&QrKUhxBl4|>J{M;e@_#BH|$7k114{?UDyaT=(t@O4{yj0)p-I}KI>(= zuVeNmI4Sc^`o^@P+fCCEg+%ko-$kRYmJxmxSGC(lmTvMCG~BVgvXdmVoO&i=%#dc- zw$|yE-^Nt`8J1M^>Rl%#*)j@9xX&WE=iR*FU3eCF%Rj{ZG4|1Ag`eNMVU=i6y?1YVZ?<;&n(Pz3Q)hOkkM7k26WHJMvvl7=^Qi`Z*qJI6 zyXd5Tmvy(#+q#x9?+l?Afmml@sG;Z~@NcG)9Y_hn~Xa-3; zE|FbAb*($oC0{OEiBmrwDY6tD^GZO!`PL&l?RaLcLyX;_8|oAHGZqZ@<{zcQ_5S!X z@Yz&C$E|malDbEJPTg_nEyeOHJr2yQS6VzIgbj)3SXHw9MBYrhj^CDgv>b8wz^%in zb^DFv4@S?64=>(#61jq|#OoYo-G-63%6~8_ z323r$IowH9o^l9(m-Em`0yLixo7`zIFOjMOvUSx(vp`vl)IoZ;H2j8b(ZxMzh*wQ( zoE=>MX7 zX$7woAe__6rYV|dhH*1Xd$%T-S^aZ8dz$teAIov_rPV91FZ}^R*-ZWkS!a_*9lyQ0 z1d)stkNnXfoRq{-@NQJ%RuQW$uT#bA5|x!~)_0P37LOPcGd2TC?MruRr9_guS@V)Z z7M$~LrmcIFr5a0PsAxMkgPx>-VHo(-Dn zuwL3y(3y_-(QRp=^Fk~5iO$#A+ssOx2|_Ubn%wAAjh&NR{NwXI;2D*LJRJ{>1%$RXt%R@`~ptwvlsCz3g&L!`f>W1$)`zG2+|w6lF6#4KGdAoeN6AzV&)r z7pmv6KdV+Z`bNB~(x8P;tV341NsQZ`@nyQMHqZCjZwn%Deji#nw8(d=waxg!`L?#E zcUpxV`mUKn>^|*GN`Lxu9?V94cD78{IPlTA8XWOW;FLv=0c#loQ6yw*<)pc zQ$O?eD^sC`j#u)M!&%4N;$lV1S5>HAR7zvY_%{zRS{c#elfEeJdV-$Qrxyv1)C{f? z9F)O@t4qA-y>yfzL!w2tcKdfPyo+V09*X0{KBFOF&-)-gO+O ztlbB?p78)Wloxxz9a#5z3m1R)i_ndj<1X_zP zfnGTM7Um3najZ)Y?a=wfiPe{C_?&W(3=%SYLH(tY=Je$-b!}cjfTjZHdzD`%$TNK9 z|A@Npx1`?xf#ZiI0xnb(6&3eZoT*uXd+)6&u2OU0Dm5)|@3dT58ID|O;VMh>jeBI} zYG`ISGb=O8vgw!4Pv5_Qi|cT>?sMPg^?Z!aq)UG)wHVqoAE)6aj|)xBLysypTmDpt z|0VK<^Ge_YZ|ZokLJ-t5b~n!>I7pb?AW*YLpyaND)sFN%H#;{vWaWlxyEi%2x3uRk?8vk-gTGTm&}ek@)l{{ODUJLdLOa{K1r!!K74~WkYv* z(P7%U^kW(>MMyCXn)#UX)@(T=X9JU*JF4z$iSlNUOBsw%PoXc?Ohr8pBGlW@2-)J~ zs8=szW;=r$vXN6Hh4*KG3Fmdp!qjrLJ+Fs_U-q(9+jMO_S|+cHCd@CKYHkWx<&bJ8 zS;Q;ui&Nrrma)!vxAl1>Hdq|uUTKWBvzS(X1BD?Dx&JCZ)+_Ah2E#Xy_y5`}b zIg3P(e8ermf*cOsnGZq^d3D%yxm(J(8V(=!exA}tDZdO3ubNv;9n#{>0itzAe(EJ* zDyijy=8x+?*u_Ble+p4l8K7%IVS0BG)FN(&*?nKRcZ_P7?fePE8)N*g&>=GCu>YeJ zy1OhY-=E(W2 zY_BdN#Y9-6ph=lrlOJ&~(k}-N%vJp0S?yG=fohXOM?3Y6^I^RV!Q6uAKQf;*6Z85F zB7ZpMPrV52;cI_G`7PSW;2TOeJjjEa+56r&hkuB>Rg746-;-FbHl;l)%ZaZ~uFjaR z8?iJfzM!=^aA8(0!(=%NE`_1TPR9|OiYBxjGp=;wx@zdI9LfaESApxs+%3K#xykpO ze(zPFL;SX`KCvBMHLJmnFq|}27_OW8$HO+UL&NRl6MKtEu}PTouui zq0gB?({8NG_BUJ9jQo5;QniiN`5tb>YA?L@JPo%^%QfDXqM-l#`e1g(gU+AEZz5u8 z0L)f$h*Q{8bFZ_E*=Ip<4=-!J_rgpESvo-(DKn6E#(Pn4-e zc1HPVJfOY#B%$9hqQrZC{I+4%g&_RR5{PzA8gBP-J9Ewc#9hCK!@t7EVh{$J1q1Na zzg*V(s+PegoVvyH=Xy4av~K^-=`&fXH0SB4$zs;}VuzVfW$&W$!@G$F8dvt4QcZYg zCC+ZB23kUR&40z6w)p*|BqxKWvet_C>eWWPINMdNuBIBxtJ`VCrkIxIZU-IvVDiQg zz>^5S9@R-GJy<(hr~Ulh*5hgP7d1oc6|jS<@d=7T@6x+}ZlXhTxHUeAY>$+OIZeH- zu6*9%1+P_{dhw-CWL*8cA;x2)TWpD7al6!5A;iSwOPW?j8eywSnGJ(|1oO^&RQ}BK zZ|3KPm0XqMD46H-S|3!MvY+mr`Y3pEUf-$v3upI|-;EiO8(*q1f2+e?-|RL!d=c?? zlzOX8hb)AYS?QayUq%+I$%wPf*ncwgmTsa}3~+xN=SrkT$=J=w3Pr=7f1 zJtHU)jEZ2=Z%&XOKH^^0zsV!yZAPtBHk9N6U)~={_Y5%MnFiR|Ntfb`Xr~O%iIXvp zt|aIW>v*PNI7#Tz0VXs@=vRi8=m`JibbDO3%|{!v>no$sWpBQ5Q9}t}HV9PJH__*P!Ox^&te&D0&0KYzWXvqM- z=QTmcCp+(#cS2S(y2)C)E)PzEzFf6Y;va)fIW!s+F_YYkay@xlEMorJxlGg^%Saca z(qzAZVpTItztO*P;|88!kCf8*t`CR^l6WkO(*BIu;H)=GvpK{kV}gs_uS)fPgxkjZ zDt*h~d}5oO<2zyJ1=>qfFAg%O9ekW?rh+g}-Cu$25!H)F)RzWThl7H8fa66Z^*=Jl z*-%;EtrO-X(J471Qnnk0ccJakZg`K%tB^t4Q&J@| z!*!x;<%bdCvs}ktK*N3`$tpjdp}F(<`pkJb-1mK^0JSiQ<-KPKJUID^Jjp7ya$P*5l9!CfN3xf*ZHvAXo=VQ<}pPUX@ ze3zOv@%ztf$!@sSH1AhAzON7FsQdwL?KIh?)v?O4|3KFTkV}Ki)oVF4Ot3Ln6@uWh zwZ#q-`?4=yfBGb`DdBXZe1 ztXaGvy$a#k&IxVJeixh-B4s_OqEWJDj*V>X{kvp?}%KJM6x`l&^oV(LxxA+#;z zws^*Q!A#CKT=o>-UgBl3tiz$CC4Zl?^p$SZ6)D)QJkA}AB>J$h%c`qaVpzA1`fEuO-o(w>ZtOl*b_ z0T5lR^H-Lz4#e3T?*11VJrG=doX55M%C#w*BMkP0;Xn*7)3wj$DDgw^=#A*YV53S% znEd~gH>^?mg<`i@MTy#0SWC>ytk?=y{mZ`HWl>LToXa6?^CPMH5^W{pxA+w%3+o6t z1^FelO|{dWn?!}Ak#&q+P}fscN7Z9djpwQ*lqrKBo`kFS-D)>_HY-&rxL)1WN7|<= z*d{oHYYNzFy1=;(<)hgEnBwh#G$kimE^7SJYrEk$2d}#fpAI@U;8u8Rb#0H-1Bs;| z2i$`5sQVl$Z+d>Y5B^&wC&>-g?}@w zSYZX2#dt17qc?B$N(atu?LJlkC!d=`POQ5N8 z^~$VVO@`bWyfR zn4(2jzG*#Wx8~%VD?Rq@VOeCL31$4|P^(%tWew7OM$~vAe{u21aHx1~^ybFm8@*1Y zEpSYc@>_copVrGo{hwvNSBduVp(tRbfiLo=Y2w1}Vr!ZLj^>7^M+N_C;x8JPOA81m z9PYg1mj@H6(qkW|z+-wi)8!t7QQz=dF$Em(Ay|62uM~`+!o`e+eu=}ChE|n^qBQy; z^FDM=>m-PaDSGaNcYr21T(ln!@3cAZ%E7Mcgr<&xb6CAI=G ze8Z`X$Fo%(azE(eU!LeQK?o}7xiy$O!*u+CH4oI5(2J4mer#zIbhho=Kk>t{wMSh( zk4z0%m82$&+yWBxE7R3adE@HcGcqQdj~pEZgf<^sUoQk{gr+wM5gG@l8v=FRP!zE^ zA}|&s+tn^e07+z*fA@{@)Ry&XjJQ{7cdSk~n$E4)@lTIqJ?>9w*nOd! z=LF@ObvjA}b2DR2zRH_c3?C$HdccrI_sk!Ie=%i#%_f7V;q)hqo=3oahY?dzKLRdHAbNCb z3M#K%?{GF~D|l{WllR=+4Ju0oT|7VNya;#HavPAs5!AWfGA6N{po>3_U^!`;LNq=W zQ>QEM^@|5<+#7v?L3)E-<4JG7Th|@7eaiG#t_VvsNp;T7AIgbqZ{k0lJEqqdrCcbX zTAtad+*e^BEObiooS4c^j0LZRP1L1pAMg4(Kwa)fVv}C$1CEiD$RsO0z7h8}1n+UF zYVYim4yL^Sxb+xEE`9}#FJwD(r6=^vb?4QaR{m7JZDLToS%m^1Z2hemz)dsJ>%{TQ zp^Qu4vrhevdT~1&C>{#^EpnV|B#ATERIUO|zx#x37Hcae9UkPIfjs)4=k}{h-E~91 zcBvk=2s0{4`{*zEx*B9wZyZ+O1r;NRcClWqCD*P%=MDD@mIaWom z$&sFJtAhHsRDWyc>stt^!5Y&cBM73e127`-Fft>4`LyS+yLo*$`IS4q5@IJ0Jinj? z<0M(Kv9)QU=;w=bTtkSxe7#02Z#k;|r z4{6yp+A-c7`($M9 zbilobx6k!y;);w5>Rn4tiaU*UzYs_F4~1k8At*l|YagabYp%pC{PEa8P4757sHTNE zv+ED+zu$Hgm4x9OV6QZ1ZjVG*Ur6qHJfxUvKse7K2fgt)Uf{!n=RuE3)%IV!{M`Ha z)64X~UwGfu3MlADv~-eOnL{td8jS-6_}m~r4DP4BdHc8MN6&NM!oKAn4n<~)=)aYh zjkg7!iv_29Q-2uma%&hyCX8bnCY;Q6o%DeWQBg3o)$@6qPfy(L*31|FN&s|Ji6OY6M`UFG-?Q$X*56r+l%Txo4l$$#;tJw^wQ+>u8AkU1`+Q* zmJNjogz4W}i7&4b;tqFhS~%<09bUG5#ILU_;mLQ*VXLUFTX)o(7L;$3<4E3&bD6c< zl54X*8)#GJZ+xh#-#q)c-c5xWJWdFZhQ$O92J?NGmNJ9GCoaG3TcC(^a*Da|#GCJm z#D`8pEi3d=MRmh~;IpJ;y-+^GWYKrJDIU)xJ|=!;X+|W*oEwT8y1&6PDIR7UJd9&q zTfP!Q*U-GmyyR(~HxH7{ zY0~=_T^buZO2S)wV}EY8+#UbL-eo@v`fwW;%cr8k@oW~R)=hRAVe~97+Gsr5+g8C0 z8L!t9lz3cb2wKuo5oQ?ix>hY7)u9Lox+ACNuoGhX`%CA1hG1;>i)sX1ES@zGdVhIY z3MrAan)~!fa_#jFsjR06_~kVyzD6)&(!fGGr#{2da9jEE-ot`T5Tz=n+9~@;L~UyN%bXW42Ymbv1dat%MN90QC7d4UKrt z)KT#xn5w9`E(IFjdEhy&qW+5f^}{e9w@*yF<(_f@Vl26^Kx>k4h0ZOuxiw>fHxs+; zHRnFZ!5{SS0f+ec*8Cmu^YoOaBX3zr@1%1xR8C{QQWS5AM)O;~kj*RXmFNKJkSl5l#5i%7g4~@2)rk_aZ%g#$xo}KOhEzDj zh1R3njnwyDyYoo5G~7b3s$hEU*Hwnm4h1EMlac-V9^&hj9}6cUmhc6z4m#K?q#{!2 z{quhI%b};IM7G5X`n$8k&-bAf(WSYSyf%t-zDOr86 znt!o8EJ#APu{yhB!r(wwb29Jj4q^l!un!x1AXKVXdQ-p^d`FFw_J8uM-gEZ#{I0|4!Ya$w!mSVG= z9P=lx&6^~DZ_2(Q zWj#4y+b{3`esc-zjy2)24(O5Hc!%3^T++d#F;Ao@G;Un}I$mF>#A`!LsEY-&3qaaV zgG+GrC}pAt7bP(&_!uDFd6!m-HG|8 zZ5qF>ki3vr{UTWD##X#0PJzgaou$-MO4lNudR^(8kMEbCh|Pa9>7k$OggjkM<#nSI z!IPH7+M61M$14$zmt~1@gb?TWU~e642@@KaN9!%dq#4Q!9dDt*jY8i^oT8@(%5>3a9Iz=wsmhNLEiW=ijD zMAQj}DGnZrXldGozxZ4QvSEtY0@6wN92>^fL03;3 zy;BnEU~Z-zxQfeL_BfV5utgMAX3E%aYW24k3n+4_3YZEa-kSg38w>CFT`P* zqx^i-Y2LOPD)(+C!IG^i5GiRFGr$~gLEw7VZ}^_tLQrAdpwK8U?soSgZ=-wnXG;%* zg7j)ksWk4T<*WfQLM~CHQ_mQ;on0Y#{jKMF+!~%1bNlE0CXSC>?(E^05x&AhdF`Lh z{S9?j23nXcO;R)$z5H`yIONH7V^utAK|L09>KV77Ndq=OmcfExJxS=i(9e@XqR6i0 zGS9_LlIt=tBJ5+1S!EWc?zu>!Ni! ze^%6y46!iJ(WL6)^mK)0an#T9=;S=J@|M!)FBa^svhzeXoHZ{_*+zl$0C)+14!XkG z#5LzhjuW;w2!YE#rm=2t+T`eBA^qO9b1|Qu1q||+Gr>ZGZ@y6!2GpB#PNqa_q9}rO z{R*`xdGz^Lb}8b^(w@L0ZfXW0f(gb?-=E>5c$psl&T?WQ*J_=2Eiw;fP7wbvRCQJ7 z6>fCl3M-Yc_Ql12f{miWjCHF57t~n3r=>TivoP}2v7n`7O2(C3SJ~3SUtEf=WbqN{ zsjzm))e%>(W#sf>DE`RBwX}zh$#efj!c;1m-|uUHMchM$)#ip3k6M|v!AGOY#C-n zqi^D~Ao28{<4>QZZ8ACRyd2ri3Ja-&8f4eW*sQtg^8#Xat(A_Xu6heKWy?R?P=7s zW;`GFcoYwN>gobJiYCi*hYrc(0~IlJ001~n<*J$%8dE}kT`S9xE}903nSQFT9TUFK z;3!f7B_gDT9oJYPc8SV1yLZ<%%_K%iVzw)XhgHg;4m5ddw+c$+weV_ZbL3f?XWIxcMS1bH_=sW?M1Wkzul zFVGa$GD#KV4~)P?H{zmmOLLP8lqBX?xG@9Js>$Xqr;VO31s@6TS&rx~n&^Nu+>)2? z`3x~CfN#Yq_ACv)+P>JIf1@c9QO$yUivbQwR3~BqWjv~tjCYc{sb%>_pCe_g9vFQlqHdl`K$IjO942{qpM`C$V7i>G3Lfv%_8py+@_>?`%UCe5;^@YZ&;E= zjoak?)uM938zXEE8AJScO2+7uidSwU^MEIUHMlWapr2GLB})9kp3t4Z#|-`{Z1CMv zBw^$Xn#JNAbXI-rtp98eMW!#AZsGR_A8pkpm$j+>Y_6%ID9>7Mdvih6FSWILFUTlEH8D&jf9GQ>TvR>Te zk{ql&h{pYk*7?+^qv-%(nNZhGTsKHL7Ei-ZziR53)XCC&a7M3Lt@x?R<61fgg@x!R zs*XA9XLo|^WGP#48GrMU;0|4?3-@OYAl`w9m)lhN;jD zDmZKG1-~l^Mg`llNaBU)jsRm}kn%a2vSzT#L+5@*fkbnlkkLGv0&rQ+OFDF^O2vQ# zsXsis%(y2_s$6Qw0j7y&@ThO7>(LfTf;#%vmeEAZ+;{*CV6sTq(o(By^E1ETBaX3R z_ek@D1K9q&LFvMJJcuWcs&$EsnUWgWyPJF`LxDZR^p-NV?-ffNd8Vve)e?JX62Jg#aKYiZ3zAy<`y zY$=o8t(-nN-L|@eehnbhy>EN1VP0i!7pEh*&aPlOK&`b2V7m=5)o-2aA9|mg)+-*K)g-kIPv7y zFw^B)fsM-u&NXz0ea+@`O?4Bn5P*64G&G8M=D`bpF)9yBJ>mluHhE99G(NGc%L<-R zUrUN=9KfoZiJc7~R8$0Ht8g>v4ZcC54IxrFVfQ_`?^D@l6xsjt6UlVPoLDi;OT~RS zDv^18S5UdJ`_xJIxX?MG@1=!!8W(dfE?X~tVh=TrziR}4syIPl8DqQ$G^~fsBnD`b zBn^obGkj2%x(v9O6(0SA!*52%eE;pBJJ3as$hnz$Bgu@M>$Eh6D&WnflRW0u0&&Rz#FedPMKIMcYNYK>sR%ntmwok03 ziU%8(ebVB>R@-&j8|QEc;zCFDEzP(EX^$xir{ zG_sZj4<&Q_5{^H7$srwZ*Yfd<&5W?Mf^QvaGv5M-I0B@3kgC!&)FcO4Uncp`$C{aK8;T9WPIzI+wol`!ZV zq)-jwXIqC;%n6o;yIaSf*4^`iHDcBSY|@sFHmt!cjyxK)xpEgFf<7EsJsy=ZNuUn<_ z*jowN?1RS7maO>nzxz%8badj&`N;p_lQgt19uD*gF5zMJbo3OJ+no&iwrNz=Ga&wF z;Mo?4LcBZqa4^J6aLIe<1{b(}7G2Ad5T;k&czw~vS5*ZM!{GmuCLx^V8N4R#;w_^I zEQW*$QV-ua^V>pCUq>&`Ukn%r;Ui7}0vR6@B^+$%vk0X!`3%;!8*NP@aHL=z!?dn{m|l2)2qhQseR})tN17 zeq;(@mzLusLcSbhH`_T&>Gk5?f@g1_|C|)WQv|UjZcF?M=E90dwWJLhv`l4qDk3hE ztD-|R>42t|gs18dSm?$~=gHRwlOO+k}0{i=5NBzZ-=bQ%c`Lg&BOUH=m>P?lkd#61zbs zchCFX#q7TP`$(whaAMB8RkVgfR%%a9^5M;Ep=@K3%uFzk2St!UJCRw*S&(}2=&cpP z1$nOF<+Er2X8YfaNm-q2>N*JMym?kV&$lE*vSj9a=8RsKxant*^iubkSCbFuC1epS z;W1P{z7k(M4CPhv?#uZSNG-%2P5#3q3m2YF%FTAd*j6; zxxc^LUAq@CQxGYZ!|kIXENcms9%$5&%tHQ5^ln$JH4#k_J=J$Zvwr7|q=;ug4F4@f zcMboJG}&#;6Gd|DzZ9O-cQbV5T6j-|A3q=YSuZF-+K zU=jWP?(a(i5GWlP(2N^bNXrrbP7g*IA3RYP5H*yNnTt1Z3@yrGRCs`;yP4WA8Fv*og=z3HmfvFAIea;56xGiVd5Wom-k8ik{Kyy&gLZ z7h6Dz-_cG95WfR6Vu*_%xqMVB;)2mMu=f@n0(agbn;^pMZ6dqB2OMp@2jwI~)RME# zJgHtQ7xPN5%I&-}yc#^jnYlm=wAEhM7me=!-j}ZX;#bubbNP;OtrAnn+9}EaSdq@q z;?fu#myXaLmC1%X%OR~al zcSO)TcfBUC;7Ynu!&L34N_%bnAN9;-ei-*zi|ik5$sS}A{^(*Z{R$ZQ?$8QhcuH<9 zT#5>YUh+^e@GpI>1c+4rNODjfZh&zLRJc z;cG|h7|Oz0@-cEOi_@T;$$jEWa916dWiz z*Y_IH*)?{Y{lMx^m-R(D!c{zJ=SQ5^LHOx$b7Q9Wr#gtZ=x+a{6BYJ@4DLBtpO6Ko zV@th6m$(wFjqMb}JtJ9u^WQ^kI|F^KPI{^IQI}7~+~R*&>NuzN zQ-*PudX#Bky&4!=m06Xp2w?0F^M)=f@xxa7hIpghpT>FbrNVMeuTH(YMJJux| zA+7F)m1?BK3sez|UCH`_*lhxbN9cR~g;MQ9fC{`bJ#ENMxi`QP^t~}3ro82KH3A#d zUR+!`Cp*e%`Kng9?W=s~@Cqd>mGP_pb zvcv{T>=jf%=S%DTLCXF7x&`6w#c>r|+VwvRXYT!(rLH%``GA@r%Fddvj$vM0X=Xx0 z&N}5gW79EqXR79~11*Q%j2+Q(aXN8)<)I&g#&LD`#_1CC%yloioTF}?UI{AYo^f3lRLaIJ2=GpL7{X*CJR# zRv0q=U9`?1mn@wmj>TulQrM4!oKA0;($4~BdY(KLI*%&v`=GLzy&IJ1WRQK5_ zQTCKVs1lcx<)i?PU=m7lGXw0p`}G|qUeOi5?smK#gus*DKC;Vi@e%cHmSJrl*)qC^ zr~77n)&(r6`PK7NTu0`>m};@n_WwY+6@>F{t(+P}-G4D*yuo5&#GkI8E}ZL={K#eY zippP0g)rgE5cZLYYA8F2AuFLsS}B`;{*dO7Lu3a>iMOv-m#Z0wf4zFn=A@CvgY{Vw zE1hu#{t*>8SbtpPwuWfNSrYD)K%@S>&t{+M>>_(BAhPtxPq38T5wT;Z2sDpFxLI)| z7mKep6ZuRSp-)Ymdl~#OTM|Q6y@>}cy-W?ACGQ0Qas(KPc;RdU+VKo9g(Mv7>FWwVRr^C2 zf`_r=Sd}KI<5!ZK9Rr=9QVyNgo*Cy`2a&A=WF23IWjFE>ob-kxQ@55H5|^t?j95h%=nY z(Y;crh%i!aW`8PxqQioBA;@W*wgI_k55`8XiiJz1@t4G}2nOImr1vxvtI{uMhzl8F zbv5lAG2d5Oh4me|-Xl;We8>?>RTmw}pvwd=6jaur-ZD5PD^B0P%DuSD-TMG` zdw}ok&!dAAV!XS6BC6YnH%p3U0t7oLDe@huCgqHz~>S;#p zASVyYk&8j(aALSE5P10Oj2be}_9WRJ--W_4^@71}rjs`32GOFJEOQ!%^)HTS3WmUH zS`3E0K79+#sCgrke_9db_p9dLmPu5N!RIV_f-^=s>xr4?sl zar4QRW^0k+s1@KGx-2-nwtn%#Nk+93qoL(jLkYe3)2v?9(CGq4)WVk0Bnx6e7VASc z^^5Y8u~~6cj)o?=%p?hSWw^sOst5^T*Nq8em>1BdnNjK+-e&EUzwl7#wPE#Hsg^%6 z2-f0-HcHDhy^O`o9$~iB5KtxEcN$@lOZ(iDOmLvv-S38aG;ckuesuPtrgJ;s-vP2m zCY?Y)dZ>&%21ChBOa3{BL>^qYxVd}l5+B1Pa2vShk??l19pD2qfQ~aQWw%8S5kH=* zcZ4e*>&UrFM^(~cX86vBvPNl>Xx@Q#oK5PGsDz;y16Q1y)Z6MwW$!b<%zd<6r#Y;8 zyKFynUCRYKJvKRl7Y-4<|EUqFJlWm&v%$9!b$=J>*NuwQ!QEq^YKrgi_1ycB>=xCF zru^n@G#pDbHo)0 z*&B2^#{Q6_Q(j5sszODL2QD#^zJL_MpUQNZ=xK6vY4^>K>-^D~MsdO7QM zkwxt70~H`axc}Vy+j>6k@n=*ULRIxd{`+#Rbdgnp)aX#3A+oSuya84|WZDS%s286kaL|O-Kn%_5<(nqtdOZ9;`e7gJ{ zo8=*wDjonAkHX_9$NkI`oRj)vK)@w>ErU90$c2jC9Eyxbby7t-0iF|%P^W}pOJBDG z(bnx(!+8RhetVTC&fFsUK)+Pp`qD0EQqgx|L9 zUGq-n=}xNuB!EKFQ-n0pK?Re|wpKP%!#Ll(RZR>(`4E&IaZ8$tTCA@OjRpK!dAYve z1D_-~r8Z_2xDqjSF<{iEx%Mg-%9?VM(uK;O?x=C(E};VnR5T)UEUDmbYf61;0f*Nw zSPtL#CE-$=?I!7I4r^gHcnZAHmed;(cD520-7OtUnUbNGO{P?RXoeP1Y@h!|j+w@k zkYTS<(1?VwGq=Z{)=VDEj2TPmdq!kA;r{bjK}i#j^W2js)(bl!CfIo3LBTUqHuObh zPK#Mo{^mx?aH&$Bh}2B?dgmtNe0Yyp-D#COw0?RDJ6Nm$zF>;*pa0 zzcaD5AS?@NTlmc36DNf>F{V)PTxD#87&AykBI(Z;3x-cVnGA>&y!&UsoNt`;lLJSG z1W?A$qyn0bLPfYTMJhN_Ga*{~rH$RoD}B%hfJNz<#Ym)u?!n7JI_xp?!fV_9m8~as zLNf&Dc*h^arN1184=%x}94mid?gf%DfI=0w!g#N+)hB2L-{RO5#E63IBri^*c&zaq z3}Q?Q7U9MSMLn6;`}8D7?Zv$}H64AR{Hm;`Q|t=~V&i#xiNZ0A1;Dp`?9D>_3UKqy z(%5xyFYu;_Qss-{v0;=gJUPr(rQc(SXL1<6UX2`-n|rz$0O~$7^52`0I6lZH94NrC z7tIIuz`xy+d6pve(w+hLFSG=RPKS1PoZHw@&xVxo>?TKO?QIrzinXG)+*saZCA@^1 zUjD4OE>2hxp9UQlg!}&qpZEl|r-KxEtW0;2&yJx0_2*8&+Q*6PNj~JnxwV_OhHXBw zc%S+JM_0PftcP8I;dg|rd0difKz2J&M;aqS!KFWfQ_G&WvP?($Y{z|+<)deuSR(pO2!r(&^^8DHErw)Fbz4XjZ-EQ(*5c&6X zVCsd<@odT$c;|5|bpXN6dETcW6`1dxSdfpo{s(Sce#f_#e7CYLd~E8EF8I3bu(0my z$T54|st!Q3?~MY>4Jl7Q5Rj8KOt3qFkfG*Qr!I3VYUf?i&Qz2T_?+uNwyQMd&Be6x-P0F@I~$<&S)7mzb*V?fatg7+JJ>Q{r$ zZ;pUut)M&iy{2(`n-G3!K%$!z=+IYgdh9#zWR~hfi-^X zKB#|Kf?r?#^*Nor6K}^&BekDOqT2Dlt2F+~Vo=?VpPv0)lJ2ciUHqGN>`x3Ye`odG zP063*{|k&L9$Fjo`5Yn-<9`InPd9R&u)& zEW+HdsZa@cTJJR{{{&=^u(Q4pM+DJHnLKia^Gv6Dt1|Ut$;|gIO`P@ix3*p8=v z#Z~F=18c{0kMR5oiC<>F0L_V{1#}l2a4lOU}l*jU#&KO ztf~yMK%afXz&{|PE&IsY9gRq}K1wr}Zs|6l@Z$aMF+N@L7i-nd`Pp1Eb0_;;>22jS zE{QtJA+&{hASoY~mXdF&|6|t5c(pvZ#cG(3k|)Y@t9}-t(k&S8XbfV-mbBL%)Tm31 zQ`QA7qhr=G1o8q_EsnV5$ISsn-*g&fL7gs2M(8*sLZklMstKQ_;Ukl68B> z!Su3!0z`gXt^P=%PgGKfb7+?%E8kXkL$J@`1h?C~(-r0YX2sMXU45>t`Lp`C(1f89 zv-jZi0s(4j$Sdm!252GJ#oPVvskK|X3$?XnXBQzxyI0)OGhTo9AEz{p7b*(U^J&th zl_T6oEU)V1*+_=Id~@#e<@;XAHQg_%VKdV*H&RzVc&JcqHp9V367>TRqFXIPPFW(y zrOZ`it9$D6q949mD9ByxX?C93l@>34DW#}?(a!x>4PuHi1mk$yQune_p<8h7TAX_9 zJDKx$&aD+a+O6NJyFsa?-I|LUpBAu}TFv1NRL%v7CW|LJdphUh52N54|Lo7)c%V0X zrtX4z0)M*?UQEAp#{G9pCctE73WSFmP)lW#YPp0HJ)tK()%V48nLYw3l)*4HU|&?VZbR-Zj1w zJpn=^`fnjPY5sN1+o>0l{J&l}t1&cHSY%%QSS-9 za-R*+f2Q&2Oo5#@#6}H35T0>=Zn%`RPQ6B)E>?12d^cnDu*4CN$MGXmXNmATe8)n` zQ_(GrAkjremb5f;%SaKy-&2FWmnMcb2r-q_rDPI^o(NY_%1&f3(|GVy!CRJQ|2zfzVz@c{ddePHc=BCTV0HkN)&VggPq!H=TkqH@Fd8^^$ zzrLhWr}#vr9mhrPX_n*&qGcij`3dz}8rn@viGa%!H}EA_wsHr+Z1IMV5mVaRSEJ;R zOZ2GXDX0HhgM1Op=F=HKaPrA%SRkknR!EL%?52Bhr71%f0mE{Va8+J*6l-~nmEauJ z!e%>8ed^Wq;M2i7vrjWBwJ(Sm1IT(XkhnQ_sG>g8XuN*aF4=nH+F#jFlH}gA&@yZK zfliZls>oCy*Okg^wu=4GMaP2UJ90yP4UbeOZL>~wRdG<8M)dQhQC_8h6h=v3*vt7P zv!kwV@Fj>3Ut2zSrJj%)BAFT68%EP<{M9OL>)=h@*G1H;iYptT_^6jxOdAxtU9PxK z&Npmc0bpcihwNg-nZPRz-*8Uu+P~(*kY8_;&BC3z~*lm11^zP*AxFo)?I%!{lNbMU&83oDc#bYI=Yc&q_lttBa{*P+1N&dbc3TC=@NCL zO9TW&LMagt6crT}|4V5B*lC zvom=7iwe_#=yYgIpFRN0Mg%c!$qjKJ`9A($8Tz)FYLD5Oq24R(F}7Uv$+fr%FgcL= zdE#&*?GI;Wt1^jBjhnqZ$McZ?ULUM@8o?d!z0QodVYZNwq99X=0sLR95dVLyLhk=- z71I2FR-qoo^t@V-8+SD`a03nbf2~4VAX*~j2M5&qz#jj68smycjq z+S3P&0v41|(}DzWQigq%N!KLq<&S=5){P8%zcjI$sb!rkJ4`nISGu#9BdJ zGA2!Gk1)~0)H3{kc*@af^#8b_Z?Mx$| z^V2sHbo2r#DLnhjxCakc@9Adu{`}m4Dg>7XtCPjWQ3m7mfwLHL*6FP|1&J09?6a_21d>ji%`c`>MIku=e`gE!i-jn zP=E5dMtrlk+x3}ber%1wK^*-HklycGdQ1wjTcctOKMtx*tWP^Iv@AJ4J(Ku&1m_dk zN`9_@ROaFC*%vRU3pkNKPA3Z7BFF>`ghhq2*?YG29_Q|Lx?2*$xCe2e<7!`zW8rrh zE=T)JzAcX&N^-Z=&gAW<0n;B5wdjE8h;A#A-BAGaI&(<^%U! zF{7+W>(T_ez#9G0NYclujHkvX1%;xIzfe!R@AAsd$T7+EuF5pWe0wAEen|Nx+b~@e z7iwgaLL8#gx68Mrp9U|PdR@{gHb)9BfZ_N!xCcZ;+x7E`M`WuKl}eKCkG+>wcQg$d z(LD=FEir! zuW;)m-he6N9Vb8ie;QMfybr&AmAttf_WWg9#j1)|FU2Z!4P1Tuqd&SE3IN7)aJ_?y zo07k@3eoFR;H6GVrgY0^+!wm-c?gTlpe`(&tmHnQumV|1`HXfB+?cxf`TTJYeJqF# z`2zM;3hYD&ptObJF1e5xO&LHa^Dzmk1y@mU3Ncj$$>uhgCZ3K0bJa*<(I z>3zBOSMdGc8F7+jZc$%v4RJPoqK!_jqW{7^rnLyi$c=b2QikO^er34=1Tn*0$b<QU02`1c783r|EK}8f;QWZs)IXe})<>g2)Cm5L3 zv2QBaoD{`k

iHLW;^V$l2JLT9V~4Bo)V)a+M#^(MEG&VKkqA6ywJ6oqqBf+cV4 zcy5&hUScIY0n8&8Ag+f4ql{V7_s2v9H2+S`i-o>Q-BFg%z)=l_=S1F(=?C-A7td** zJMy2bVx(RGE^Fyb_XGy~ZO#IEJ41)CCq{e@3KL?I9poBwr*bb>13hlCHrrY0&L8n-3Qe||_f(knX9GPcehrVcA0|ElsD%4i`LTDZS9h zNRVdl;Q+NXSvT{Z1ZsUFI=;BK)O=Gmi2q%&T}MwIz^}YH*m-7cWpJexq5<&yjDHQi zG{w?~9ry{$VW`Ogl?*IJg8cA~1zO=9T3u+UD(8&*4Xx}x_Pmy7?bC14cPg_hUbNlQ z<<%@C_*FmrJ@zY)9Hml~%ei`TUAKrJ3@PkGH|*YxN!?g>`IhqM z`-l5b9WPocbVAbzrxW|^8*LS?&hpJR`~aO=HvKUb1OWhrD!ly`dp;s)d=+$R4z`CKnYJ-VHwM(NopNB=3UG=$uy%*afrpY1Ym!$3q`< zU1u6vJt{bxSeA{b$e#T$KONC+^$dkpEpwIT{XHMt^R>K_h>>yL0&dZ6ip;c(TJey_ zi~EBe9DQVlO+pxmHdSZ@RJ? z(M6>>G=OU)?#;`>QztZ1p5o)Jcy5k!HuR`)4|M=1} zQEvVDfpf@!xXR-jO0QUChz!D$3GG4|K0a+P(UWQvxX&X=CfF4s+zvt+2?7JxSJzgp z&+mJe?S}9oU!wPApv@Mc5wF+$dl;j1p;g;=b4MdV1a)>QO3VE^X2I!FGJ!0%Mb-+L zr&WMcU_%=eP4X5i#JPWtH8c3Oa8BjcgQ`)2TzIpS`;!>a#@3qwAH~D?pfEwqgux<7 zfkF|wNd5xw+fYMEg73%k5WFiNzRIY?fgh~`I>Y|a@cvhI!h(*Qi?;q5{3$BoYfsxe z_w*Ya-)5JYa|FMIw5vNS0BTeCdr2rlMMM&?Z`1&o5-5jq#e1aPtocl}{UW5he)AjZ z-QN0jW^zB6Z>#Rw{Z0Ff=sPb5=9vCH380oo53^QGfkqW}w4b39yS3?QS1}wdfJ183 zCZr%~0H$&?N!m{j5|IU_*Ae);;1+on0sngt{vftD?9rcPdfm&-n4#cjIJcEOPp$Ew zA2RFjv|^)(61tU{n73DJzBs{wtX_g)ZFIo>slo`k*YS>Cpa>!jY!bNefj*-B{`Sv% z5ektDuQBhOv5!uvh|!VCeX-i(zO!StoC@$}HWqlhxrH(MYPDaj5%m|78$-ALgM87< zgMclwAWmK&4Ok>H3o_Lg_E7|KNezZgLP|(LV^b_8Q5$|v!y1UU)`)!9_do59|K8*I z6e5wyv3&jR{F644igDeA2`7E8X_Gf|-(r*nSSh-mbp05U;> z7zPq7lJB#w;+Rb3l5@ZoY2;#&#NG7|k-gmuhKzYEt&hL8gI;IrY+8+8vd7%^h zaX{yJ=$x+|%r!qA^R4ICUPIOiwyUvm+)^#o(9g@klN#$9c?jGJzLhUbckQoglC;0r?!=#Z#ih zU}!n8iRj&MtlEv*e)Jb4wHiF>`(-k;jQB8C5?bnok1e7#Y@pF`$wD+Hl@PO@qqB_8 z?=iXLQD8*7dD_;jhyNs@T3&e!=ji|m!i@vUWL$yIVfJd&op7}Pr@I~;)WGnq6tf@9 zzONFv15!UB3zZ#n1CpTMxo9kH@^xtPn&3rEf_XMB_}@i&Bgq&;v+QT*g{AYkI-1$P zCxKyw={yH%$a5-(bLTKPmX}oQcz`cCELN^Jdp&Aa=aQlspygMP!d_@1*BE8Nk;{Of zZm9K6{b{n{8-J6MFnWt(;n6s_B*!+;+D-v21&gN5il)r6lTwP(rXY=3wBt1Szmm&r zi}P24lJkDi(5~jQ2jTx+YE(FBRP4u8_|TXOXu@AFBc*;t%PB*z7W-Lo=JwL~4;&f< zp95~fB5x zzY>f03M%11MBWeuhJUMQcCa~^$dNo%x+3O!RAeW^YINSvg4S}^ei7fr6kD5?amUsoOKN#iYxiAB%JC(qJvYV8 zwIp3_%%fbI@zhsNU2Z3a%hRUr!vYt+Jy4ECFXvW6Z6cVwpcErg20$kxm}e53XAw*^ zGAnyk+@RN3R(82XB*fOlCRaLWHYzI?YeZvnT=M*~DqD%Q6lSf0wh5_O!8PgNPjidY z3+OlPR-Ej`neSnz68!C##9xZe~w(Wy7>%MgUhuB)J zQ)gtL7IHNs|J;JvA*JLl@LhM^p@Rv$9pG#OS9xWA(*O<Dgj&XU+q#Nw-JNelsmwCzd_2CUDy6}iD*4GO!I0UDKXf$@l~oc>=u}%%ouQD1crPQU(Q5duu4j@)oe=`d* z6Vz+gl=Q%y&fNS-&Vriv8&`4yfo%nWNvyoz6~h>l z_xq~mmn3w{`d~|bJ^LvXd|cZ@gE^z-&H%Ji{mlSeK3$+UD_ zEfC5q0`CTyM`yyk9TMv{9MwXW9Gb8o4R0I`%geATwp4ltm9RP(iNGPUm+g}x^Pn)& zq^+3FHTuy=R*)Ho$@erdWW;C?NY}!oXCM}wGSO~B@9d_nqKq1wN`2A}Xl;i-o%~h* z{Noc^nep&68X3$?fF(KbqMomX9Ck52`H>vcLXIe#FwB~r(wT_A7+U=^vH1joY3Wkb z86nV{SJg}|4NdyBgXQNzT4Lsic`I*}ZL@*--&A?`c}U67RK{YR9ILD(!NAHA5CxEa ztPP+$rQ#<7hL37IHm2PysVY3R#m$iZYLU2=QY1o>ioY>Uk5F&ot~ zYmR`h{~e#^TQr=XRs1*{KimJ{qjMlsP7Dd_FT{>96S7h6M<8oG1gxmvg3 zG87f?g2&)&aSpjCDFm;FZ^_5v4XXI=UU8ak7bDr7QmzzDC~r|2ph2*dR@*Gkan^-*4K%5DuTevPg^!#{S-~^TlpXIcg4Q*Wz`a2%}cfnS0(J+e~*D|y*Ga;0| zXq$rdnktsf>e6}w7IFt?dVn{1VQLw#(&I-ySZG|ouY<5$DrpfD$1R!bD$M(qT6+ZA zJavk31<0Pl?$gqB13E!g9cDzR%T%unhIS0T;#@u-kwsesUt!ps8Ht+>y)uiszcE}! z9Jxy5L`k-z(FcrhbzXAm|Je?(bXV7xfPY8X2NuX%OD_#qpEX@5~LEQ(*ecE|- zWmCdyQzdjWu5~s+_JwBVu<}P|;x8(@!~V@H!$Nm9Kc2kE%Xm|Thks>&u%7Onw@!(D zdpE!H4#2-9zbYc)M46v~gkLH1!*Iw8LX(A{w>%(p?ZBnOCjxRUcdq93^R5hJ&_b}Z z=&Lh;>3M-RvJ8%qJ&IS1qi|yuRs?rGd5y3ckpiy0#0}2uWgE6+coB2)P4qe z$M9BJsA8sN0^4^|2=w8D(U$f7iWRA$?b9 z&D%FZ<7pG*4g$P(#6RuSqd<#KKV=HSGp>EYh3>p>`;=>asPbTUy6kPiGspwoRmrDa zuWwHzTpSiv%vvBI_q?c$pMj|sKt)$xE%ANP`bbleb=1Z$ld=eT^jGHJ-*>Sp)%__w z{fq$WOfcpe-57%Eh5}fb2ohBX|C>$a!c4PFlm zvQC~e5OppW0!ZLs#3zf-XYWHl?OPv6AP!F3s50hZkBL;Fh=W7ML%Gn+qtIQcxz|*W zcHhdd3LTH%|2ykvb2@blqLDvZJRWZNbcz6cVY%@lNB2wfC+P9E_US$jmo$g|k#rh$klh2e`YEF=hX9$<)iNuIC1bDY?uH0KI0FC2cMJWF3v;Y|Jr^?SCB#3Kd2wi zs`4)$=)zB)u0DJU#sc18w}!FvKPm4&5dPH>kGx5j^+y`*!2W^oZfv~@0+OjfXL}0f z2mBJd^-B#vH+BjJBf!|(y?5x~O-Nz_VVam@GpO&~Su=@;U-hF`bEuij5wqlG2&HGA zUTCqepG{X8p@4+B!46*oN0V(uR3Cdb)-={FSQTn|$OWt9CY5G~;uCf54ma4En0aXE z9}OF^HP|M@Z97Mgmc_Iuk8SitgBK-{^_h3IR*qNMEMUxot|KRI{h{EefeSuk5JBC3 z{ML-WJQY2hhdvaMMDm8fVDpOfq%Xdc*t9n>5jk#4UqixL&^HVqMwIsH@)#ST(;wr_*WKt!=h(7xf6`w*(yT-o@= zoY5Q3r$de9%%Z1T(MqoPoPnuIqlaxwF~SU#b&f`#r-OGx*i3}WlRP5SQt7(vG}0Iv zR=se^Y%C5o9D-qzrbO6k{~?2eFSbls{oQ=rF8ayq!s|5y9PO1A^fy z1;p;zJz&br)lL#E{46+SHgqz1n8q4dTHGS#*EtG-YjR7vtvP8 zj$k&R|AwCQrK4g_Wl$+K1v9@f?SH@G=Ah+6HVw|Ud`-(*Wv!m# z;For}_~wGm(Tv{HQtGF>LMthuFt9Etm)+^~sd`CBr>zKY?1@Kho?S5T2HV#t9;3N$ z8(U;|)rc)?F=dvD$KFb9CDN&^=!20usY9sAgck&I-&f>&Rw+^VDvze|Xu7{jDH5$bae!IiTG8FUmwP;)9KxVx$ zS~5Obj6Y@XGD$W>I+JoE2)|CA%J-LcwuLh*m=I_GCNa?YczxLVDmZi|NGWlE4psav z2dRkGj?E>GG**($;8j|qOcZ&}v!+-g*%*2~8N}=0TaqwO#Xh5C{e`ksuqPE3!{p-G zt75AvB_=8=F_kz#a>|a-6Xx;1I_5e^W{~mu!mT+uuFEq~o@JDt9buv;CS|F(RVEp&2yrp8V;U`^(<&f}jT-sU{dT7l71bgc z+8N+0_ZSTOi$>b5a~}#}XdP|9YNy*qRW4*&&jy0z5{8OmzI_g4rA5L-gD8pN^yw1- zLA8t+L(3c*we}PT5>?P-M-ETfYE}{w$mkNP zuq-=-aU1Z;BZpBa{f)SD{V+&po4StgJ%E0piu1l+v>Oq~^?-=4S*YWZ!5B&ARniIY zGnvh-Y;S8wRnb#`~t6f-Xo-h|R zM!@VBn>UjF z3MQ>uKfs{4#-O8NmMgg;S?|2}(mG)NhOJ5>o2>2Fe+-u*dCqz5xGQ|Y(x4LB+C`hj z28U@W)xAzM)bA}1QT-|4?+E)Rh4~*p*g@(Dy;562E@rtU;E$(|{e$l|D=h)2Ka7!m zEOwiL@gyT<8xkwM&;d`3A-VR8kDW-ZO6-hOZe62_iP==tw54I%+omuZyz zWE*rY()Eb-M!-#%nOFCw!B=2Jw&N}6`aQqc%VI31LQ~;Wxqc}t>rIU(^Z;CkU%3&U zo2Ldt9fBI65PdiY>oXcCBZ(SQ3*w0v2MiccvRd*^@$$2R0RHb-N}Ll|{1-8>oroT- zy}Pzg`IFSxz!P4w%xtNU;p!-eb?z z&Dcf%U={uglTS7pGTLSlQYEh$ep`&L%gl!jJ^o7bW41(3V}{@zgEx=fQvIaTL=&KA zs#J;!>Y%lFFg4NKk)fYVv&r9VO`E`w)(#a3@uq*Gm_RLo1o47^iA*hsmp9shfmCfE zrTKkoxg&K({vY8Er~sm{&!*6pulRBm=eIJVcMOaH)Iboaz0x z{ZFgAG4yV;d(R{`+HjFCd|4c-1zmD6;QYRHMlD`sT|fwjD3#9^!xUCE0FY z$u-QX3V5N(tz-dY8kSds$jn3VttBo%8%&c+N}wM71do0wwLKL_GK3CSQje7q;D*(h z@w^^R5E0T962u0r}e||eKQAvr)DG+ika7Zk<5&#>05C;f_>p6ftkfTN$(0*@xNLGqRk)a1yqv|th?r&8= z_p6Nx%_;}rzl|yRk}1aUvOq6Lo>#uataM4ywV?F+TU}hY%hY0*Imf@2XUSxG=^IP&7St1WGZaKk@bf^ucl8C5xe64e&!VF!M{1rxcYzQ4Mlp^DRCY=smkD9pEya7aHe5d_dOo#>FM zbR|;+qU$|*CQ(Sus6Y$VEXZK`OGJD^(-s(k7-b^9d@ihN~$=!_XPlbMG( zSf*c4nb%a9MOi}G!7K_nv!VlvaPS>8RixL<%E#84PLtnpRBLnsDt0e4ZE+ryxhNeV zYM$M*M&m+~wlO&&S5lBaxtb3Hi8-_?pP|{3VcpIv44_{OicdAK9BdjpTMyzrM_^4P&eSPE2xLRox|r$(dyx5t-k@r!Nrl1T%kw1s0z zeubz3irLINBk3+7wxM27-7@JyG~szV0!$$FzJU_@CqXZ$Oz~j)(OE?WULN}%hVQL4 z!HIYJ2Rv70xecow;e3nOTmJrqQ`Dn-#ZC8s zb3HJ-U5Bd>p|tPB-jH=*-~6CBLw+dUF1*_AYhJU`P+?J;|&)x_Iqs_w%&0{zmc%Dfq$jj_VgWQ(&Z1rZEf zQbvP_=BkbssuBH(<^(;e{^y2eaU^hzPE1b6- zh!Mz!GVR3k<(ry+K-hU_bV@%N^t!V0+CwuAXn3uIh;VloHd`Fev+OUbg8{AqD{{;8i3E zXup|A3OzflHJEl__9JNii3pY6BX~Z1I2^+suY! z<>EBmx~*6QCb7I0swFdT1Crg)ep5j(^YV37@bV*ciCF`h@wsh^;0)uI1MjG#yT&iu zaaosI715TD&jyP&PO7gqH(*~_J!XcN`(`X2?Ok2ySzOZGbXEie`@gOnql#*$MoZeq zDI_TYbT&@Z6;`(*{Ka@kSSNq5m4r_M?)xLI<99Lc_tk~7<>ghgY2g$%z zj|pT(DPS=YgOSaP zJ)Cals|(1u1QIJ52r+Hv#ck`6v6|rbRlT-vA8sxTTjJWuBxVa1E;u+8q3P;o7QB}D z=|0t-aJ4JU$J7RV<*etS;Bqd&I{*BI`WnG_m9Xk7Fz~Bxw0vjFeWPXZ(VnH65*jGG zvcn7m3!6y^&Q-&MXU*&@?-QX>yde6Df;b@F~0Nl{AscVji|DNRDh zX)lE>utD05%i)&-3Kahi$FrE@0jLKum=~3%IK#{M;9!CuVK9zHIJ=#$nxp4^qVkK@ z(*aqoi@ij(YJ)c3Q`6E*EumBodKTWh@A;4r=ggF14CF_Qk2}B1_E5?%O7NvZkSZXx zdOjy47X;sr67$_OQEk+9{I^0R z3D>-m=nE`(&YcF2x7a0dN=PhbcjmJKRl6FMTf0$_@}u4bDm5&`jYOIL#0xhjr;-$| z+TbEIUR{mN4WK-2sYb!6(i?698?3WmxqOOShF+`SNK*@w;qNEkKve;USr6X1e+o>k zEP7{o7_cPpxD%I+Oe2JAI4#^P-R~Vd*eL(B!MG&|lG|d^qAc}1k$x&#$ZY|!!QGKu z{hscN;<#039e8PLV}I=*pxM)&2ZVl=;E3MTP@I4BXwv1aJ%kmn}Cw@Lb&=>@;stAirF*0qd7?-Dy z=bNTnmU?Ao_YZ&9KuOZ=%gw%<8oLUU-}f=T^UU{wZVx=;1CQb2?d6N6I9XrHZHhg2JF%gdrnyY5S9eL*AnRKjgDF*&W$9{HepoTe>2XdpydyscXp$h3RsL<=bkA?s`Byf#-tfJrVI+Kw~aa!1d*yzb@=Th`U;9_L>#D;h{JBj-g4HjPR#Re1+1ij>$DK zA>YY&#hwo^u}iNR#9KOEa?MuVX(9|>edw1SQbx>YLfMifyk)dhng~ zAIA}Wx9A>yZ*u(T(igA|7x|QrRQxbgcq6V28pQl?wR5>h@!NcQ3EwMotH{~OXhu_T z(uc{Xk`rGNrs=+-c2BnrQ#kB(b|$|-^El;osAvYfYw&b*BP~O?4?6sXF#(J5jgcSN z9zphBJ-#Ub_;>O9I}TQOwx((7z02lc@8Y=Z88;w8#UQF9QmAt_l&D`{!6ZM|0NPopAzGhRye76olOIB}=fpB%VI zRkT*^_&#nB;$`Z2vv0~~dzQT(n)+RQ8kMOjp2ZWalCU8>@xJ|%FEUgIVjCrg>>g$G zLqnit;ra^+(V}Jw_GX-A(b$T^0eq6B&{C8MC;k~Vne7YEk*zwTz}DK%NvQU<=64%a zK}Y8|_Rfr=dnjw<*Lf(DT2`LFP-5_QyQ%z#d4J9pJ4e-J%`95<3$>p1VRPAWF8k?> z6kS%vjbDmrqpA@E=3ZTl%L zkLz+ftt0;6`I}+umh8{R}mG?gosDV>!5`z-ud9HQxEEuPnQbdhgZvwy2CJKj{c}v&}P?)WeJP ze3`EeeOh@ntH@pMkc#O(TX#*!<00YD+xEYaT{1H-eSZpOs}Y2f?n;Oz(iNGp z)NA0%KZqSn8SII23e4J~B1_`NZ=QC-=RFLfoWfJ>x3aaC8$6VZBf!aJGHSk7r}s$$Ap z(b4YAEhe|1vW%O&(T%=mHs}&!O`;0I|zZ;yPT(G)Tj3w$9=lUgn5i1y#_0 z_ijrJ9jnRf>@y29HclG-JE%i|<}e}vq>#2?9+Z&~o~gt3URY|%475f4Uk96gld$fN zH~5Mzc3HxRdzz)-_{t|qs64uoL9s@NL2ZLd>uoq=;`w{rl`ad9jSh<|a$EBhn_TGm0wI z?D@1oj;Rdd!7aXLfhHQlaaydQXHl(j`Pvn>jB#Zla?-UXhYo9*E_aU|>uXJdwN2Na z+njJ4D!tGjtmF!{30E;3NxTd#L{`61vNtu*w?kbY$#9ezw($MBIIz^7wkPMz-Wmv% zsrb087C_hJ*CfKZ9n*Ib`npvjd02#BFY&0~Ok^X*;JWPT%i+qOZ3H%CoLd6_IluX{ zZ!gNA+J(f$-wIVfbx-7=mYvz`Xnw&GI>%$-hpY()d?%O*eevTFx>xTF&Q50zg0)nG zy!UywNtP+O(530ED(pMClu0pN942?{CWeo?yq z#)G435o{HVP#`4PC|?e0X>lSQBDPmG4ULuH~v5LkLbtA(wif$Q^;HNnpuFCl%dya?6DW&-uzPecn8pZp6r@jX?ks*m8o%No@wHLy zzDxrk?DLqM)xu-PBSmSu9^cM5{!>4*Rjp`^TE2Z)8s2j))Aibq^@!r1Q?AjCD3rm- zf0_)ROZsO2yLzW;`?Nb)?#faGtf$_JwIk%SC++sdKKBNfj%bzMQCN`{TO|f68%PF4 z+)KId>yg<%=;w4P)~J&{pE6u5y)z*xkA>O7OY_4jz6o}3g-QRae~I&v7?PVK8veJ+ zkQI98Z@b>Q&&`r%alZwtr?d`yjvh$0;9L2NW3QruChnU!up={QPb!rv8$gB&P42rv znrBR#_0&c~ycN6}v`q(-xZUC(zI8f#0!9jHaVy4*FCL%tnQ zp#CdKU0W#{xfSRUQh@OY}4rXLMW3P#$rwBT>IaoI!=D<;iU~=-5vpB!_ zli22dgP!?QTyhEGmyFahxsi6fE&9D){ap@WX7i7Ln(# zV=>G;{DA$E?wu3^8Eaf?n|GiA74&#C zhqW>`hLV?`klgR!v%$tDd2lS$cx%;A&&)`VKl25Pm)G+slNexL`CdNE6XB`29`~2s z8nQw&mju<*pE!nk*o@Up;>?-f`A-?G1Z^%?G9InE=+-dm;tizW7P5Gp=Y_bX=*G zJcd+`#X_<*-Wo=Fa;Jd8?%X${bULbLpbCte735kme_rLoRY@Qp3CrSTm}iJJ4)mI1 zzO*(U!p4rh)lZ(#Pxb<{&z?L@0viegkv3AR1hEw(LXeNHj?;wbqp$ZTzf>~nu8tfI z8ECZV-)gC<$x8fJ-D|MG^S zc}@JtKtEY}J`aPhF|~#|xUb6iJVF*3sF3t{_DJ4~$-$%*8)nC#iz?+ers{c@BddDv z40W@=31-+_;a5;hyU-m8B|So=Z~yc5eb@t{(-`LJUd!Ps&O8~GolJCV-OywK8X^7j z3|-J;zK~%cT|0m;-k-mTznsm^rAka#X}&^3*i9ef_7>nST)r=(r{1t+&aCfI_Q79v z)YETCB4^hBj`>lZrDRU}1bu)=JCN~APua`TadgL?4dxIsU7lZ~lQ*J)1YOO>aK$?* zL+EbFum-e^cZp^skvU!%KJ4IPV1=@;Gw`?jQE}>n!n#dE0&pogLh73Q(q16CGo;g| zxcos~=n)r}kw2HFOY~-CI0rZ)0Kb~0Cu*o~)>F+igfQh}EQHbvuU*pI%XFcM_z=H= z00RK%PZLrAKB2sN`o%GO9jFe94O>2Eq)&jg&Q1Aw_%qb;wov>`gnY;%W++cT)ep1s zeh7O-U9bUOhJ|MVMB8ur3(_q#yi?Pd`RTYYPZUVxNvm$W87#ca8Ovj5w0lA0uj;g$ zl9)H%8kqKjOF~6LdM|-19SBHdXWAP!K&O?QGBtmF7%^Qf@EgFI1!N^A%#e3yv5=Qn z4hyA%x-_MRhp0u(4x=lI_xBPsw+KvAULL76y7R^5Skw4txZ3mi3Zu#R#d>oBj*h}- zE|E%qSSNAu7%T?WPF8(y9N|Kex&Jpz$yLMEZCY}MxNPzsIt;zb({XymZt`{qk*mY6 za(nwqjku?Z-$=L-ZrF7ezJrE(9I_N!1Egm|9bI{QmCONKYJyYd~$Y;Ti) zZF*=Fjj%4lF3en6`T1&N*0yzVijv3V0Nk*?e%P@r_tylahJ#dN&$K3eZc3a!nvOSt zFBe^*S=R*C(&s@;Ic5U+=9?HpiZ zxhD3|J=xdw(t47!f#H~CAn1d^=!=GeJg#IcOJL|h1cuQRsL|MR&?)oyN3d{J(!JhM z_J+{=8!~es1ef0kwVvq7v-$~B(Q1AM~^0kt8om`$BTznblNtWDcnmPt5$BAr8 zY2BmZwu_JDBuBP(9$yN{No(+jrZ#aQ^4Ix@+(k)(pHdm3DXtx$fLe8;Nf9XX{= zn=MVVee)v!b0AvCdMrSdqgHO|bE;2*>Yqn@s`YAJ2nx5zb=oS0WpC6P)|MtuRSjRE zgKKPeFoux!)f5gpL$+a;Uj<9wL!(GgUjT%!TmR7;qO1`&oo*h8^{yEC zND;mbF9p3xhfRGDPiy>93}k>{L~DS`&>1y=z?rn4>F?L^(<2%-pXtl7>`Ms7b|1%N z#%|s2AJXMS@z}A~mqAjxVJRC^+Tr7Xen5*t;&eN#DySk1gG?;JpgHDsE{mu$|7H z$JWmG?P8g1(*$C>XxA;grPGs>LLQBiz5-C~otGimxMse4h5saQ+3PwDI4+7$IXka} z!9H?gtLoYN)fU#-67{RVfW+|Qj|WwV^l{MR6V@4(ofIKkmfDn(z{a4XEoq!ol!kQC zaGiOGU07t~(PL?VI*Jme&;fuv?-EFA1H^of5Xg$W`9b&PD5ycs)j9e>(XevV{AU#? z;|}+MyHR<-r4nB7-3iaCHsYq{9)MvME?`quBRwAXq|_Z1B;z`5AUA-udJK<0qsIby zqpXdD#sVfMm1k!OpPV_Ky}KoqW_imyjkJGzT$7_jfUAjt@FC$5FK6Aqvwzu&>W9Nz ze820oLKJ1Rq}dE4*}yW%8mZB8tRV@t%D}V{jr8ZrI+ruicrxUwlxt^_r3~iAG1?W3 z(a1Z)AeJcAqMYXj*}i8++l%@-`6lxcRHSf844KSh$`m8@D3+XXodGj<+R}4y|!2 zpY_Ls`gf(kHqpBBvk7t-@U!b$HJ`OvAvzl22og9*v_aW9^0ziPVkUMXS|&cS@Hc1_ zGwQ5fax(m2pKx<%M8X)RCG)~pHDD!S%+ImF9c-GLWFT@%ro3)=@cWw#76<+7LxfA% znd^>UBTmZ7fComV&%ee+u?E=mm|?(=@{(nox{J!_U(cR#KB#>C;_NN7h4eL%Y^Pgi z%>LxYvdV1@Zt&f$dm`Kky3b6=RR)8jN-{k;SD#^Mx*%{ zVQ;5E@p|-@^uJj_w4W0Gb5Ki2cB4rl*mbw--?}5Y=0bPV+@pKsBLKnx1c`nLVw2VtX(=?%tV8V^CI=(M*9=MoE3}z4y~&AKjc<-$fnTjniGq$Ttt% zJK6ERTOeXG$VW*1+KW^~Ho1mxk?<)VLw4t%mcRUzzbO?43qw~M&~6R$4x46qkrQ@d znVh2<2v}smi&D)3E6J1G;sdSrxSCCnt4;T1JB_shuZvjJ-j-gjE^r}>mA`*H>s#Gzd zcj?jzRX|Wcx`Lq>0TBTK5knJ1QAF`$=jMCo-hbfyaAs$BX7_nNFP8s8qdUVV%I-1$ zHbS0*KrwBZ2E0mA)Eo;)n%8{Dhg+_WcV;ilmv7F@`ajGOyHxSKNc|S_;7N5Qe)z}mva?rF3+mDG z3*uAJnX!gK@@27kHR9)M7|OhS?Z!oTLyW@8LMDGMsO`5LE;}eB?7*{y=2V5*km8MC z2Bqn~R1((YU|`}yKn0CUa|R+w{1d-HI`9{U35z)3D&RL>6dR?f`f3{38g_FUi!Xe%3$yH z_h?zgZt*08&IQ(V5EW``$#8&B^bxCD+`#AEPVTOZn6JAjApU5{*0HDJ$!}x%sm|rf z#kpYfEU|eGAd@ZoAgMFry;F#B>Q-|0TI5lePO6af`S?WaV!K#5)=0JY@x1WjQO64d58%qiZc%H9nuQg3tfquPVMcX# z=n;X*&{XY^vE# zLYD5!jeQoi@Ex3+4++9aqo_rf*Ye~L69{@&bw3+{QyADt5%2|m5S|3eYa8Y!xE8F- zOk)isVAhM2tfm53dY|})w1aX}i_Mti6IK0tAzz+Y$I5xJBCp6+JUF@h><{%RH5fc23&3%;$C&NG9xh<2LELSQ@fUeah=ALE{ z3t0D+@5IhKo+(f1nv)y4S+LFH0gMn9m$CxFAbc^9YCRF1x-(jrg>o}e)DQCYDjS94 z_Yf13nhbFMPxHw`?4E##;N#Q72SuuuCW;{hjz(g;bkC%IVz;;;*rVQB(;`Dyz#VQF z`z6D(_?`5)_XSF@tBy4{?SPw$*ShdPvdyXcr%~Rso{-+NXLIp3fdD zbt=K!6M+gE&PaPXo0&S!ATq3~*-&_+cq#Qd$hnq-3cbln;xBojm^I{`zGkztXO5DX z!*DtAWVrqbi(g{fqzhKt72lH4y+6ru6S7j~O~L<0B=_NDnQ&B>}{f&HGvnD*s2 zLJlIMMFE$+dtYiM@s#$=R-{cwUst*!l1GGb6J6+q;8JWtEHEy;O&0U}d(Lyd_c=CS z=s&Ib0Llq^rMe&f&;#{)1&u7FdO|K}r)BwklxxKqf5Y;od1$^nRgz6lyjkcTKViN| z89|3E3$5T7)Jkhhd$Wo<&!DaH53ca7m2WHRNx&{e*+ZPc*4;yOtsD-Kdb=Op(*^@f z6l&uiwXdt{Ji>o+tid47)Z+WzES5M#Vv~*}KpbYm37kZFO)GtYs3Tqo*U%70&CO59 zQ5*t&A8XFH+#TTW1tV!0z;A5;{OzwFv8#Pjs{+n{LbUSJ)2I*$_Dd8>WbQd$mWle) zioG>oEiz4GTQG`L<7nVISH-R-7F8!?Wo30^jhr14<~DlYPG2|(fFnE8G$fe$VROVJ zMRzyeaqch8g$u8F_GlbR-K$v_MXLh_$GobGEpo~nJx&j{Po%Srakpb zBQ|*qIeen@Luesd{9kuZ;x>^u@kb@kl0Baau~tht?kH3y@q(_3#rJ$U+OnzbiSBy+ z29xWfxQ!E!QKRJ*+qMgR#? zajr_9P+{DQ;L{!Acvhr-OXxTb5un5_@wwzgr+sYS=jHSxdh#H>8hVxpLXCDm;D`)_ z@vIO~J0Bht7Um2{-<_M%8pi;U@Rx==(uwGqdjyEC! zpUn91Lov_Sk3&tiN8mB%g+qUTXC3%AONIBJz6%scTX<_B%$I3_(b`>si?k8r6~0+4 z*4*#Kv`}?aGX?o@ZzGxi_3enGnLmXSUmMg6vFgHDfa7bE! zVUw2G<&E;1yOCj3e^)kAuJYXx3`mh=fAFQgf9bR|e5Ou)NuFG!w(cUL_~nwLVZV{S z^wwUxn2+&uvAmdWOGpgc1NcjfrVlO4_|idEC*=0GbH8tv4)$o&>mASfG>~C}{$5*Y z|1raY=GzkbFjQpD;UlPO$@|P*ZJ5h}X)S z#HK@ySyM@i0VeaG9kShnS!J;+K%H4l(2q-pc-{JspNs`A{cW!Q`)lsAp6S2F=h#l+ zMZEwZZaO8Mf{p}P)z!F;){IYsy)Z|d>p*$8uS~y=3_dBN(&WB~`~3ncQh+||L~O2q6IR9R_TZNh{BRGBrNYxZZtLjsX|+pWJ=%~-e5H2+326RU zw}m#?^KWp08uM%T_=R{kSey^eh{p4Pthh#2Zo~_5Gu>!TAj^X}ARp&+GK8!k0*fx# zHoz%X{4}`;{&d7Wk@8vNKc3U8FHM)LXr!oZ!>RhHlyBV!lwkAA1%c(w-{xWoL z38FfWVWI-eUr;3G^Fl-Sv6jf|9BwzLU6&EAF*j~7|JUZica6r#5P!y2n`__`R$f@WQuy<}Klg6~j{1kj3t0li zFIdfhG0ekz4Y|Cx)5B<_rfDHATXCi$!*m?9e6k%on=9kb)YmvQoh>C(L}T=%Vcxe3 zpm0(eM<``tg(?|_ch9!M*sl1}JIwzh;FzU@Uk4_#Wx)jV^#v=$`FQ2|GB=@jwRcz zR6n#s{fUrb5?h{v?mO=%CW+@Mq}G~bIUyow`IwdQ{p*dq+W?8HJXN-8*mB$jo1SX% zL!N`7QJ{@XvYSGv9jl0>KAIL}_(40&tgY5e{4{7*5T3(Z8pZC*8ObcbCcuk&V@+?;HP^5iG>CL0d= zw`YkWs6C#75vMk7vq#TA{ZTM^UU2c$54*NV_`Um^U9tGxw|mq0Fag>Y`w;7?w4&sX zZ`!ODx=Ubee>fPj#4^kP4jrG|a%E&ESaNk)rm!&ykr?xmVFd)e14duUJ0^ccYnAZ# zH@_i|eP5%~nFDc#i8k7uLpC4euhhC=-9Hu+E^w>e4^2)`H3C?> z$$Z??S8Lr4w{BcZKA97mdf{)y^67?sNtb;^IInIB$c*H0ktO|yjiaz0mrlK-?q)Oh zk<6e^-}DQa0-6dc*is|NDMbOC1LquNFs!G_suFl@kFG0l__cp$!qr-90Fd}I#HUR5 z-vJ;NV5V;Ac=)?`NVDGopUVcjPF-Fo5BsN+{0RJ!|ME8PbTyH12{>g1(4$m0?eABa z%r4$uGHbeFCgghwWrMh;{Dr9O`8a|8rtjdCj|sGOd_$Pf*<}u|CWMW9^&GHIvtT#A z=;bTx-{q9zBB8Tq7>Gn@{jzLxx0SAlpMny?u1AGHb(9Kri7jwejxBCQVp<7H*KjI-c zJA4PHb9jU^e=Q`MeGm`H?X;G?2%ysej)m_LMXwTH`)i&~1B0hwgE@dzm+@BS*V7&#hubf=fv($K7gxV^h^ZZ|#KiReH<-MyU9 z3Mp}js?5UhB)uQb8|QRJmCQr{^_wz^7wieB%FT4d!-NqVk$$0LV0FUlwLFZvsv${H zF|L_87GO91k$9;$>db7QuIIn`P2S5>0Z}y{RG(qHH+hVx$aGT5a~dLq#_KyFXe+Po z4?%4j8QWe$L?9 zvqvO8SwZ^M1KHcfetpVlX(EWqdFQj?9S~LQG?*lKF_=49Fz4>oB)$W=P2B(y)?BtR z?xVb1uNsR=K_-!?w5R_u;!6~*f`4(g(rAL*uuo6DeRz*W*>F8+RmF-7H0@0qyTfYw z8=~?JZ6(C-L{cJ!4 z|8d*W$F+#aYKhLx(ss2nZ5ELNh~VNm(u0VAym$`vY!+To<2zv11wzo8J5Lai!&4~r zJhCV{;rTHf^`S%nvB+vf%DeQlz|uZM|0Oz!f)?4~G?0x(mtq-yac~MQ&%`tM%f!YJ zK_O~266#V(q3}T*MCAxXFH8dq`<_0xvdvSg(^gN=?_wJ|S329qyol#@{Z;B!Dj21s z7NSlXuIAxIYR!-@;>axJLRY@ZN6@WCv&>5(WN3FHU#XySzX!LU+nm5XGr?h%I34ux z^pRFp)o&h8eFldQBy`+OuK8cU8!9t3mtiiNeZF5ZO!=BH$Z4BbKcb{YqYawV4VX~C z4h82Y0VJk28v)4%{f=kRPB=jlN6yXeETBa}%q@MqYrjj!w6Vng_PZ*)3)>ARt>VYJ zTv^rII2ii`TcZn@)htuwMFNKjsLMLRSoY(HqRE!BxH++M;8V&DX2PA;=`06DVMlAohaqVlcGd#P{%jHBRvd}Hb ze+*ssA2z){!{2(5P?i8Orw>smv~#I5xKM9l5shRNp`HZyIWq9?rEuNSMZ zNfSfd>BE+BUe6r)BRQ=ax?D7)T*do0p;RDfi7@k`)_yVn!tVDQR+c952~cm^XpP*+ zBlR9jHF_eF;j}vqYZ^PM@3PH|j~?a_*erc<_0@}ZR>on{V-5nGohV1wd-1oRIXv>p zf1N)(dwIu0;Yk80o64HwGL=-lX!^I*n14z8MN}<_Jqokz)j#-kqyT=+{Si3h4nj+`iB?;Ud#paJr9439-{PUW3i9{7K1;d#@J|HG6M|=_ayZ{9(eI|0GbKl z{Yh6FL*=m$`3+j}b}yu~E7FcuYUo7waNpn6;*KZ3|M~Ylq)(8)Oz>-l*pJurLVY)-GLA^sWGOzSxEe0r zA?A;C%rfPSLC4`+EyW6@=O^Xp4Og9Y;PZ*VXVhP9y-&~|6g1;SpQlc$rnoO}sR$F2 zz~A?%O!^8w%}M}X$`F}2seT4mj5JO~@^Ie@pS&-re4jw(v~WIYR~rQBlu^l024)RA z3&(E%mnIiJEI+f$mRG{HhWwCrdl-Q2D|8S|pGD&Hie&Odj7iglQjp$QMumo%62((D z=H9eW(o7jhM1olDzAT}VWgw&O`;FsHz3&XR&mPyj*kp6xR*9ta0jp^L_@+!QEIFGA zWx}mW`cBA%8HhY#WOYx3p;!h-2_%(=*P+l~zeEY*ZM308#`o@1zy#i7I{AvQ!AH3r z;t=j?Xlzuma_|=GIn72jz9FZ_IJJ*U_ibgA{1*!jI0Iid8{EQa`|iY#rgJD-b^Q7J zxZ!AXBy?-NNrA*5FRe4X^~JZK@qJC6{BHa12ylP>vFV8~agOWg`cNSEW5Ca$)0tBb z@zwJ|5+3D>UCB7T@pkwR10QfbQ6f{#lgAxyV0$UPgr}~=YmKCA=2d&hnssW>v;;Oj zE4vfKA}o6}o)V~-1HEP{iX>c1m+W`Pn#(bAQWcf$3PnE3ojiP0a%j>fnQ62I)kT2qqVUcdE*cJ;O^D}a;Cln}OeXAo+n z#h)<{chSa#aPG;z)pJ9uV0dav#YK+D5Jr)2-yOkX0?iBQ>6~8WW(gN^^jRDCLri5~ z9QFzeXG#yV^AY{M-06d3R|t8gafM@W7fSo}`=J&tqxs)vhdk~^oh$*xzYf>9fWd#f z)EmylQ+7&)`sY^M0wfWF-j%b)_Xuxe^Dk9mT5uX3<^)mST-q(Ui6(oFHY%KDe$CfmQwC$eZGiE=e;v9GfS~=y zzqt6H{!%Bkjn+hc>=00R?VkWulA7yW%W0Tb9Q?7f}iOYBHQ&9?=^xRcJOc4N(TOIJtwfzu%;6|@|bXcjO(|_ zIaB>Q8MDvJc95R+kmpPeZ-jLnk7dPB>{-*#{a>1?zS^Nq&=RX6t%6eT+_%n4aw*S>NHU|I^< zL2LtT26!-AW&-q~n~#abmvT`|Uhq5jX}8Mh(qN_#B7}c42*hLtPG)aD5|K9BWclZQ zp^!volAu9)x+gAtzV%%HtOX!x!BS9fb6}vUnj{;xi4dJ9`6s5HUEKFlhv*R@NN=ar zUst+LBAH+;8Qh>459(_Ve^Fa1R65!)!=`R4fYS_f>LF>ZjY^hI;4NQPDSGw9D-pu? zikf`3Y7?H`OM^<_w2?DGU|zToCLu`stnUki7J_O4wllz4krKGK@WJZeDov>bxEW=b z#Xw_Bnw}l`Uct&B8B~*7vtOuY77Rf>t2%gcGXYLI#5jup{KJv$;Qefv7rOzkwF?uJ z(M|q_8QYgqeZ!sAU@lY|TqN@gI?&(k&I-a%MYSXAPK&EBmYn)_n1$J(g_y_a?S&N8 zHVzK3(y#cq14*YrENhP0vs2@R|D~BcpQRR7$BWty;>cpgB;V%8^{u!DQ-oRdO@O)t zx)n}(#F8H{5$5z*H}%O~=9686cwG+O?_kOhE+VHJ`>MUQXq< zO9fYZg$WSZgZoeRPf z?$@i$?hq!z*&JPC%4^w!#KACeHGA5VV#`W@?DkPw`tf1@^&p%!OX5+|zazUi(^8!l z5geIWnsmiz{COPAD1{Gk+EDWt8RTH^3UR=yW?lQfAJm%b@oX{|SDqWBlecH(M)91T zCCs)wbb0epy<32uVPv6V%nSe6Jda6kXMR?g55$7tW>CX4@#3)ro64d2V3rm%LJ6KH>`HfJIcCWCi@+~ZLD8;8{w zbS8d^q>fDU^>c-eXu5XENEJZ*yP@tvY?=v4@;g~(a24+T32#k24RPtNypAG-#V}+{ zo7aFFGWx19+?OKj^nR(6Q;DLz{J86+wB+t;<75(#$tjtkF@v$0r~}oJ4M~Xh0P+7& zp0epb zuavui-^M@3i?#gtCPSXuw0bCRZd<)A9i+#beFVB2>jEjaNRr%W16I1d`}a7UF`&1$ z5!953D3(*m_$z&)yIh5BD1bL$#Gy(^kZKCLniN_8U1P@LR@Q&0i6iCNVPlnu9TNFo=ZeFB7-2u4l7r>bU zD<`0u32-DSrZHU7`v~SuO0u^T2#|{ijerfkl0*cZMbM-9d!$=mOgn4Ovh7R3G17;6 zk@UtatoMz2&#Mza{6r3V>8_bbK2w|QDVV($cjNf$QymcN~G@~6l5!v(W(vT>k;|n0(D40oP6PUq7w0z^E5f~ zY9PH?am*{WzazQa(@`%RU|hWHMS_JRQ2Z;QO+fr?qd~ES3IjQ+V;tFHfoh>h)U+Y$ zz936oQJLaSg3D1kM$9`H*OeTI2oaocm+@`*g)$>^7A^p7!GJyjXbKQ|X9LTqsQw0=Ery8v>I%(%`W7eUL3*#j`#d}gP9`@ZOlLlOejACF$ zf!r?+Ae?j0xd~z=xc`x75GBA&8Iv)%nvs#>OR$%zr zRJdm==ezHG6wWPW3Cl~!)bzTQ`CqQTF{+V-9vG3X09kVjIdu_H>chz5<1F)gycs{j z-l^Qpv4HbS+Mh+%l>N9+tW*QC0NvmPicU=6N${(L963o)0Iv3>CrqfVMDw7wfhRXk zj__->v}mb{4jeve$|Vbi^{htXCX1Sm>hvdg>Z^IL_NO*~sn^Kkb(G{MbA-=YAblut z7gHNPbJZxw)fjnP`I@B9K*`{rKaGiKzJ~`O3jLzBeSnrj6$iw*uih3+0mdw}ZX`uQ zrc?4IO)xr!TRBXx*c-aXn~FoSx{2%=L{zwsUwshxAi}Guw4v!$xX@bjhOPxXN#E`T z38KaYO{?vjzWA_^({J-Wi$bH$n$M64;_nn|I2AnZkP;MrhF>(yuLL~-WIZr2-VEn8Y$i z!B7~vKMwZ#&8+Sg=)iguwh?zS-CN(d(=C+E^s!KKx1d%{DX>I`c!fNFHjZHHvHmBB7ujjG?J zQrd8`CHfm5OvkkM=l!R?b#xe1Zwo_RqoPEGnGHKpHS=M2isM&`nO+JpXA|JU!!j%% zUDJGIb#luq!B_S+oI+Ig38A5;#8X=aJ4dL(ZWD}H}X{PKEp;MI)bKD|4GO`oPo94*I-sarB{d!nsCl-`cw)Iv9G_MLC^{h;`0**b zJo5``mZ7Cup&KekBPtAw^f>Z+lqoJattuJ)Adn%#(#!`=7>j6|d^=u%TOYfAtRHMK zBqq(M+BWqpc6{#7jK(v@x@##fIybQ;a%iJqrCdE`K<>!-Elw9S8ZReRWW zcN}1RjAN#Io=Cu)^VSQkk{7%(A^)nMdA}eHq6b6UYn`wR!2n3yg22vkTI6(VIQ$5r z!N-l4c{z72g{+BHm(<(ruuV)J5Y9iKd6meKRj$Y(3#B z5uEcNXWVdbM)J?;C8xt=sa94)+QNB$*gWQ?=dI;Cl;wXKC~kvSMQ&m}lvc-nR6h-} z^Z3>7wP$f}jQRLiU@u7+U?Dkc#bNPT$ZJ^UCAsXw6)`hN9UA4~KQ4FaDJ6Ef?FjNH zO0VeHDxdFFU3F`h#Vf7YOoU`g5?-uljNx3QHsQ&eB`JP@ zodDJ&tUmiQGr`ZON`dzMX6k7}Js)^m^i{U|2uaH^79GxysW^SJ_D0Cca_He3i>q%) z1H9nPib8G@h?$1ZYTXEo95x3S{smDfh@SaJnPjB<{9eki>m$wmRxKNqz|;Md>(2>;Qp`b&cQ%%S!~sEIED{~__!Kmz00s|=~buCJUb9t0ky+wQl^eqgY$zqJW) z2OTDTDSZ|Mz8AFPmHGagsn(?{=s8cZ!0u0`!5f(rwP(MtZ~v9;e|)!(1rt(@9xkkSv zL7M*{tk*|D310pWU=c;C23byur&*m!7j#%uhb6gw(aQtUIb^Pn7F%u`fIymYP#&ut zqg;qtrCy2Eu1O*6+F&A&wI_XmDPUtX?JM?jR%ZxZoUII(4!Q;q}YlVJA!ekGIgOE;lo|=W@r0r|{;l>+d8hN|d2c^9J z!9L3G(S|NE{l-cz?pumwRoEn9?T@XYlxf1+n$hf40oSSiAURC=1AEIjod4q-7m>7Z zr>EV;SCuyk^8?-%nb`d|J2G%aTjNL8r>6^#5&cd^aa^%gd5`l^HJULEQe&CEMlTg{UMFj^c3!x^NaypDlYhSEJ^#g}n`@0@AD_R-cK>*s$;kJod6v^P zcE6VQh|=9eQ6ULW?S)R1D615A4t_FSvhGM{Kwj~NZi%|c$B{~%Ycppi%I9f%Quk|i zphk8>=$5OIy&f&%=<+$1vms~?MS+-gqL5&Mi2P-A?z-ueXvxf!F@^F3nJ97piTr$H z`j$4kEYIq0;dyg4L3Me?bR9;;rP#*evx70#I%+C^Q!hXLSkCxd^W=}rU=8Ld)I|Gg z5|VV0w|#fsfYWlj$l5clUHddhM^LId8L_}zZp2Q!(#&Wmd2{I-f$54(nUTzrjm^DS z=~Y*dw+p+h+-sApYnS^(&A?uQ;{Ay$U|TNHI1>J)iki%VbwNuO+Clu@mBI}_Ymz&M zQLl&lBS&@NBTlDjCVh(H64WbAY(1Q7Sq7b4QNq%MoW+k$~ZL|@p7)pE)y)wQ(BRh{0@bG2 z`|$=tA2ALZJSNz%5ZH=Lx_>tC{TBy7QO-W~7huw1%9+>=$ z>1L3&TqlJD(*#7O*%$Fk`&5dze91oh*4a)El)h3;-~yT+r^DZspx;ayl17yKej-n; zVqe0_i6Ts*4Fklj%sj_!UX6r!5UvPO$v!$Hr6-7FTDVk-k745OrXk4vWcHiDo)8Cd zF3GmBT8yV*E?vSh-QZJAUM%R0fn564usNozkiaGpln@Jo1IvlB&JDgAY0uN zeYFpu6#>A!aECRrE!A@7kmI|*4SVeTgZ@P_I$KrJDx(_7ze0n^WW6$V>z_LVN&&7g zd0anH@8c||+)LjgUr1<9{P6Q3;$rHs#6onuVWSSSBvIm;$5*RjE&8V0asSH0^ebVm zBqs97y7?sqos}hwFd7(P@ueXIo`9RO?RMaURC_l4la9~r_gB1QUU00O9=cy-I$%r3 z=Q@=Z3FT2hJg$9LUY)yAk1X`RF8)~h*&KTh^~GV}`Sf_+;?1rGLBI2Y5~Q7e8Z;2_ zx3Z@)@)1<}Lu*nca2GD|`u(}sq9pKZio z^z@0_BYZGzO9trO7@ z3&HmYV{tJ2vPR!1dT_1cY586?HfkY; z`87yu-~iyhyvQHl=4uz~YvNeCgktWhJsVJL^}KYs!1lQQ#(;�>{G1-|&tqR%Hmf zY-MaiDK&n}&*N0xzx!r)IVFJPE=XB>n~i+*C_vC<
*hG6ef0Jgo5?^SF`@ss%q z*B>pfH!d58yT8?V$f?Wz2-+J#l|ld)*okjnUT|X;oK~2Obflemi0c+L@GFBJ0Jh}F z@iH)QC6s4#Kk6ib1rn5XH+CB`+38OmI7r}&(Zj_sDI5RPWSjRm%wLN1p@5b z-w2nr_x9Ryu{*8M@8ErnjV!p?CE4rYQxTO{qOWQ~xQ~E^{Eg2ymw7CEKSeD&`iQ~A zwPEfL_d)aj*5AMQ(;2Z5z44YkUzZ1M8U3`G^#6s+I6ztzI1BLpKjHE(0&CPp8A?E~ zNnV?5s~$;#Y?BCEE{G9%3@jSh#MMsR!Re-BjXUa$b8z3#Lqo?Yrgvd-LLzRg)TuJn zP`YsWQji{#nM8;_N@}Q*_n?V;{9obHWD{4B9wu&?6C3?M;qv~~ix-_b)1J~Xva z!3y)7XM;sp#oh*u%TTZ$Just^jK5JdSVVNtP?CVadM_<}oj;dGyxZa`yI$cLN*FCXDwE{G6&@wsMGK zU2fPiBXD-0iCPyM3!k_L5{2?M7JeXaX7h1zL zQce?D%{5&c!nEjfkO++oa`2D&w<=c9#ds=tzxsGq(EEO9BuO_!GI8HKED@wkL!Q+=gmfNy%mtLFPF<5zWH92P?Xut!LfvEI(LWP=#w%*}le_%DN7 zT+rGNLxdpK^nAxmIug{0341Zt!Rw7bq(%!K!J=2swFEG3=kWzn-l%K7< z3V^*ewR?8*UrPT(hopQNM{wG;jeo5${QNWJ*J^*j$c9z$(FlXe#QKojKRUO0_80%q z6A|a?xWjK-pFTgGe)k}zbKuoQ3^-Kt%P1Ed;~W|=DmBC<1SE1k5kzzDQ(>~WfjPOh z(C2>faotx^r0wu1n_kM?;8FD%Mv;IHKC@LQxOZ?W@a8wGD e`GSG-aZVPie{2mH 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

?5N5tW-=}iY40#26%2Q(G@ruHWIH-p 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

Successfully authorized

-

Token code is <%= @auth.token %>

+

Token code is
<%= @auth.token %>

diff --git a/lib/pleroma/web/templates/o_auth/o_auth/oob_token_exists.html.eex b/lib/pleroma/web/templates/o_auth/o_auth/oob_token_exists.html.eex index 961aad976..82785c4b9 100644 --- a/lib/pleroma/web/templates/o_auth/o_auth/oob_token_exists.html.eex +++ b/lib/pleroma/web/templates/o_auth/o_auth/oob_token_exists.html.eex @@ -1,2 +1,2 @@

Authorization exists

-

Access token is <%= @token.token %>

+

Access token is
<%= @token.token %>

From a5d6c9aa8edd70f09ad252171589ff3fbfa88006 Mon Sep 17 00:00:00 2001 From: rinpatch Date: Thu, 17 Sep 2020 19:54:41 +0300 Subject: [PATCH 090/102] mix.exs: bump version to 2.1.2 --- mix.exs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mix.exs b/mix.exs index 51e05965e..c88bf392d 100644 --- a/mix.exs +++ b/mix.exs @@ -4,7 +4,7 @@ defmodule Pleroma.Mixfile do def project do [ app: :pleroma, - version: version("2.1.1"), + version: version("2.1.2"), elixir: "~> 1.9", elixirc_paths: elixirc_paths(Mix.env()), compilers: [:phoenix, :gettext] ++ Mix.compilers(), From b751c5babc159586ce2bf349e7a2f8a06e3bb7e4 Mon Sep 17 00:00:00 2001 From: rinpatch Date: Thu, 17 Sep 2020 20:40:52 +0300 Subject: [PATCH 091/102] CHANGELOG.md: Add 2.1.2 entry --- CHANGELOG.md | 19 +++++++++++++++---- 1 file changed, 15 insertions(+), 4 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 7125e6c1d..2f85cc302 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,16 +3,27 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/). -## unreleased-patch - ??? +## [2.1.2] - 2020-09-17 ### Security -- Fix most MRF rules either crashing or not being applied to objects passed into the Common Pipeline (ChatMessage, Question, Answer, Audio, Event) +- Fix most MRF rules either crashing or not being applied to objects passed into the Common Pipeline (ChatMessage, Question, Answer, Audio, Event). ### Fixed -- Welcome Chat messages preventing user registration with MRF Simple Policy applied to the local instance -- Mastodon API: the public timeline returning an error when the `reply_visibility` parameter is set to `self` for an unauthenticated user +- Welcome Chat messages preventing user registration with MRF Simple Policy applied to the local instance. +- Mastodon API: the public timeline returning an error when the `reply_visibility` parameter is set to `self` for an unauthenticated user. +- Mastodon Streaming API: Handler crashes on authentication failures, resulting in error logs. +- Mastodon Streaming API: Error logs on client pings. +- Rich media: Log spam on failures. Now the error is only logged once per attempt. + +### Changed + +- Rich Media: A HEAD request is now done to the url, to ensure it has the appropriate content type and size before proceeding with a GET. + +### Upgrade notes + +1. Restart Pleroma ## [2.1.1] - 2020-09-08 From 34afc2b0745b39861d9381e69cdb4b9c158f86ee Mon Sep 17 00:00:00 2001 From: rinpatch Date: Thu, 17 Sep 2020 21:00:13 +0300 Subject: [PATCH 092/102] pleroma-fe bundle: bump to b225c3578f3c89af5ed3a0be3f8f3a6bbcedcc7d --- priv/static/index.html | 2 +- .../static/font/fontello.1599568314856.woff | Bin 14912 -> 0 bytes .../static/font/fontello.1599568314856.woff2 | Bin 12524 -> 0 bytes ...8314856.eot => fontello.1600365488745.eot} | Bin 24524 -> 24796 bytes ...8314856.svg => fontello.1600365488745.svg} | 2 ++ ...8314856.ttf => fontello.1600365488745.ttf} | Bin 24356 -> 24628 bytes .../static/font/fontello.1600365488745.woff | Bin 0 -> 15108 bytes .../static/font/fontello.1600365488745.woff2 | Bin 0 -> 12736 bytes ...8314856.css => fontello.1600365488745.css} | 14 ++++++++------ priv/static/static/fontello.json | 6 ++++++ .../static/js/2.c92f4803ff24726cea58.js.map | 1 - ...4726cea58.js => 2.e852a6b4b3bba752b838.js} | 4 ++-- .../static/js/2.e852a6b4b3bba752b838.js.map | 1 + .../static/js/app.55d173dc5e39519aa518.js | 2 -- .../static/js/app.55d173dc5e39519aa518.js.map | 1 - .../static/js/app.826c44232e0a76bbd9ba.js | 2 ++ .../static/js/app.826c44232e0a76bbd9ba.js.map | 1 + priv/static/sw-pleroma.js | 2 +- 18 files changed, 24 insertions(+), 14 deletions(-) delete mode 100644 priv/static/static/font/fontello.1599568314856.woff delete mode 100644 priv/static/static/font/fontello.1599568314856.woff2 rename priv/static/static/font/{fontello.1599568314856.eot => fontello.1600365488745.eot} (89%) rename priv/static/static/font/{fontello.1599568314856.svg => fontello.1600365488745.svg} (98%) rename priv/static/static/font/{fontello.1599568314856.ttf => fontello.1600365488745.ttf} (89%) create mode 100644 priv/static/static/font/fontello.1600365488745.woff create mode 100644 priv/static/static/font/fontello.1600365488745.woff2 rename priv/static/static/{fontello.1599568314856.css => fontello.1600365488745.css} (89%) delete mode 100644 priv/static/static/js/2.c92f4803ff24726cea58.js.map rename priv/static/static/js/{2.c92f4803ff24726cea58.js => 2.e852a6b4b3bba752b838.js} (66%) create mode 100644 priv/static/static/js/2.e852a6b4b3bba752b838.js.map delete mode 100644 priv/static/static/js/app.55d173dc5e39519aa518.js delete mode 100644 priv/static/static/js/app.55d173dc5e39519aa518.js.map create mode 100644 priv/static/static/js/app.826c44232e0a76bbd9ba.js create mode 100644 priv/static/static/js/app.826c44232e0a76bbd9ba.js.map diff --git a/priv/static/index.html b/priv/static/index.html index 6fa237768..f5690a8d6 100644 --- a/priv/static/index.html +++ b/priv/static/index.html @@ -1 +1 @@ -Pleroma
\ No newline at end of file +Pleroma
\ No newline at end of file diff --git a/priv/static/static/font/fontello.1599568314856.woff b/priv/static/static/font/fontello.1599568314856.woff deleted file mode 100644 index 64f566383ab933c9d02a8b2c64879722d6f2c83a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 14912 zcmY+LV~{3I(5}bUj&0kvZS2_gGxm;c+qQOW+qQRX>&*LoCr-qvh&#IS>ddZ+?*7r$ zS?Q)AE)E0?^wYQnfe`;Y>XZJj{a^q8ZxSkM!azX4zkevtk5maG$vhQQ7?^)p(vL0j zBXxcTl}lq=Lx&%>`lACNAaGCKVI zc1Rkn#Si>pfWo!x(!!H@0vGas-M?(bO}d*lE7Hh);qf8szDZ?rXZ z{~4G4KR?3%1e^k2VrOV;`osSG#5n^2flN(hV_-ViJN@)I9)8%*yg{mLmBfS`0H!~& zT!TMxKVtxe90}2Mx@Q?1m>3xB8ZjEw85;l`@1YHMC!}b{jN^<94F3Sd@iJ#JQLymE z`-2XHj@SROL?AQ^3 z9DBexF(Q#4NODDJ;DQh##L+rM>yWhE5T|T6P_I#RK0Q;>#5I&?3ruWPq;%+9qd9>5 zTZKLE-$carE5v%YW9is2G<5CRsCx5E@4#=#Gp)8zWS>x9qvtVIE-~%FUDUf=G1RR* zchRA6Y3JbN1!KbLaAb9T-Z75#VD*j7ZMA|OE#P@)KER|HHe0`?UFPl^B- zB>=t>fLRG3t_09h0@x`50+awLN`ML_K(`WLUI}ol1b9;dASwb#6agHH02xJqz9PU$ z5fIwR5ajwiN7$;76uldw#2(loz6N85XUfy+mz2Fru1wySU33A_lE@5yMP(|`TAviS zd!_8vM_2L`_%4eF!I9aHzUg@8>9A3Lu)D27;s4ZTd8606P008LDjIO<{Xg%CASg1@ zXx5hibPzBK0_gJ(t5&ykTM$RZ^N`94q9uc+voahUw5$^+x9R%>E!1F4sGC)toEM48 zbJ~3yzO$=;Z?f+6kHc5%8i#>2uIa=fBeBr!WNK-0!xUL7;pg$kCuK4WEiRKsU+_Yo zhR97Qc~kOu5t&Ae?SLyGRi~`C;Dw5c5-T>>)QKX!<7;M^c>hxppZHs(AvaFPcS^5) zAk?L{9Q1F6C?_?8sbre&Q0YnWcdA;55lM%r!X~Vx8|UKEq*4j zz&)k$DP7fVksMcuJ6EL7`9?IWiqrrV6pT+HgwRTDUL70wL``5#}dWQgDM;AXcv~?`g_>mPK!hfZuUu z@fDV+pk;&8)WXySjjF9RQ^uC6(91^`-9$3fyQ>z!A^^A;Bi&JspZY8;DQU>vJK+nB zB=mevmoiWbxZasAd>Jd{LjYh$GY|Pv&6MkN){#5V>|@QGl~X7g?b1S8fkjLIBMELi zV-F$N4CkG`xJbrB5QI3!pkh#w-+BQ=v}kaKZBQb=(G8&{$T0iwj4}HGSRr+tRi;ae zDpCjQ>AxXtgbj>h@Y^QEj;yHLRE0Y%RINmEknNIHQD-XrO!M@3??Slh&?QqxGxV9J zlVin?UY615?6G+?dh5^Z31XhOZk3lKg9X69mzGt@x{Rg<5-V?TLUL>+_({Dex?$4ZRY( zxTh@o&@SBTO)ZF|5579=CUdBV~Op_JvbL%P+@dLz`t)wkw0sA6{#>6&^-- zAfa|0XsFsB7(stdPO!xa@-7NnDlE)h)+>;&*z`3+O}) zm>4QnJTqmLx^9KUM8}-HR*Z=Lu6$ed&Y@8Yo^vGKkzZ_?J28O!KwR~ccm$n&HvR{I zr=NMwK*_ax*t1EmDZn@{{l~#*UEQYH4zW4w47yJwQ61Ad4)0wG;pkb^hI>l1YrKWF z58O-sXJ{8?t2yde1*q^fii^MZWYTcf1R;>_m~qu?8oL+43G;$Ev=842)4MOrrz=qJ30w#!Crr{w!@AnjWyVQ5y;v;-pllE3gegQ%ly@o&WRk88|H*auGvdaOU>guH5b*am5Tbk5kT;^U>Wat7=atX* z$@gUDv-rFPYsTCpl$4~=7YxxLA+*#VAR-f5!>Uns103Lf_WG^WR?9rF7W&r3bI-(O zrt(X^4o7SZ+>H*~eH&{Ex;4IYQur~;1=~y$ABTi?E=`UtWz47d?MbL#8&VriPgQZ- zJ?|%5?_1ZtJJ;{`2ED7zxpx95J$>uHt2UD?ZYq%v7|H*zbVL2_oQcXPA(h}(DM3sU zMJ#icJXsM6K^U@uP5NhGSZ{kP@GSSz@iD_6844|s{kd}O(`}yn$Y(G&=Rg_J5V>fKqRo#0oLkAtl zgYVJ?NW6rO{CE7+!(*aKEaQ=an$++zt z#KQR;n_4`0t39q_#nj&bU!u%x#WUbTsAiMUib5H3ego%^{O^Z>Pq*)XEHvG>(J(O! z?Av}>G&u_1_nF}*eyy!gClw+wzP*2LLx;WP&W=WY)8Lqi9JxTpp&D7^2EdF9;h{>Y z6@kOQ>VVfwqpV0RjB?wELv*HNQfpV2OID)UA#!yZQ)8JV`U*VScVdyNpskfSkkV&Rp1x(E-(uDsk3!5d&92EmaGGLM-^ z=J87^Yy%pBS@Firp9;heBMm7uB|hR;F*$o^JI?x~nVQ{&Y;t>k5(8BQ_-j*!Vt+|8 z-Tu?~-Zb+7j07?n%Ji9A;s+(XFuiqZ9cH;nxjNJsR)Y-+#u%&=EnP87G3GcLrR&p^ z(0(DuRG)8;wR7ywUF<{q2gdS;ft)J);;$~lJJIE%b&sQ##x?XcBt4Bx*oT|R;hkjq zj;hHAH+;R@-dwxie%1{RUYjoN+JNu%y|2d+f>56L%V!&h*Uy^mU*Dl*tsM>LS5-Mm zaLt96eRTdYyY;0}1vQiu`FXS)&cfX|s0-L&jNwypF5spRZ<6Fk&+q{82Natr9`WyGNhv^;T z-n+f!<_dV2f8c9__vUzJZYUUdi+R;wMV%yGn&AWA3BDi7MLy?eyD3_Dn@*Y?Y-c*D zUBd~d4Fxt7@z;5H>h+A~u>(OTS~ydD_O?|?KZ#!c*s;5mpVY=2ze_ z!hR;dl8iWr9VbPJz-FZ5NsV@7RH7!IwcWE3{9{qKZElg1nM9abD4BnbzHy@=Pq<-&ls};;p#ibsd)K!N8&^ zvUUe#7s^xwBEnC?YXm8Ek`Ja}k_RJX(?uRNWKP{uI9$DX1=xx(w+MCBSnS#WS5Uul zXxnwuWioD=PkMUy)WlKx94#C3AN~^)UBs>2{7`%5XsZ*tWNwEdPj74 z62SyXClpWaQAHXUMX+#+q&KhvleJ%WcW{?4;eUEMSh8*EKI!~Z6e-KN$_8Yp=^>Ep z=#p$Co7J&kT=bYwMoTY&q@5Piiv`sX`?vda179W}YdW3mFjz${#+f!%?8I<~=!|S; zN^5YfX@vR7VoL6K8vt>Lm$(UUG^q>>S-HW-jb*%UN@CFhwODIGo-iDFKAjBrZ7pOvAqzecI&>TI9c|VX07lHd5^$&X9^v00u{1THNXncc9WWELQXU`+t7Fw<5C{C z4Q6!VCXcUzQJ2n5F|hC3=@F3#_f5e={<>QMs*31=dcksvWl^g#&p+58ogaU5O{$W?`K#tjobGgQ_B^Aq0mky2ODB4$~e5xE>SE{8L^ zE#myyEAhu*#DuX=+t*hN9p2P;l3tIC&s%N=&tK=K+UeBcqLlHImBEaWs!{6hc8(2r z<5}FwB+|ChWD{?%9$GVP+JVdQrY+r%k2&pS4mXpK`O|z^iTgM07~gJpH|^o0rK*(V zq1*UNlA-S8*N<@#l0=;08gY~IW{Ks)FITA=V+>z7)4B-e*1{~Ix_%@&MqebUXfx11 zg-Qkx`Sh}+BIQP-wRv+$Rzu;QeJR#3pvjQy2b}d)#UYM4C;3=P7`>T}=Vu!+U3l*M zJ$z$iE ziumX-8-2n^pxUpUSRqqmPV-(jU>w`GZ;7xqO>?qwa8@7HzNJ7}wIFF8d6bC1y{t&s zw0VQvLCnZPm#jHyY4Kz+b#4XH!+;*JGHug(47bcl%Uo(eGh*9%sCO5lX3Z1P^GP42cr(i}~)kLyNgF zSn{Y2Xuy8c%-lHDx+Sy2vVQ`7niYRFYCBm%>>(KwPp>Q`G@6?ivXW^{CdtF#2xS3U z5{QXZ{AD5OO#rEwR&kGw7G4mkOGf>ubN^>z<6U}{icozyb2nk&mQigw>sH~S5N%|w zGA)`dedHn!wo!3sw$dW4i)pHjO_dgP3{WPuRa7RKj7t;)TcUau?&CrLC^Z!w$dpp> z8;t?o;9$C)9^nK$lOw`NcC-{-|F}`@YHN}ME(uggB=`k5BI~>J+%&plJ13nAG(}_) z*lk;eVi$3=NZvbKG%TU}d`3Jv zo{TyZAJm>Qlaw(jh&ikzlK(P!MH%sW?!!4~mL}%uQgr2Upfi)4GXu3D>V^drr#g_d z`GzX(%SAlHj@NZ6!{;f{5s4odQBD3HL%1Mk&`pYUL@!w)sfar1tRf){(OxVFOn|ti zaviyaU0h+pu7&pAL~DgHnyTgM>~6xvul|P+Qg~aw-G*tRA{yjWG!YAA<{m}o3wWhc z+F9PD-pY3G1bu_r1PJWxI%9ta0ZP~w9Q~Oscsb$tqc~cfgpptdWm38M;!Dl&Nm<}u zpd*Abtnv*4{x}ubNvgX27yyQCCx#5f%~I$Ktvq_sN8yJT3oe-*`)4JEH+DDQpK z!5Wel7S_Ol2Z*D%*R2k)O`zebt-o|%@N3dR;ANGMS{wa4NeRV*Vx-Z7LcPLqky9u+ zA&L@7%QLFl$vTBde!D{Kr??|!Ix+LNaCF-cdcJ==ob~cOFx}SnpL{q`J z$J=XN^Gg%hJjS{jMvhHYO5KE`9zuSqnncMYD*(!2Z|Ps#tfOWyh~8K)y=hhoQF#SS zdsR6$vJ?_sJRTfTrz)+Cg*awLEG)8_9_gQ=T>;#|aa-i-_M#U!T+nrUy)9=)MQkoB zO(`L3btr-P-}5GNAR2=t9gfQh+V|3Wj5_4&XUqw>E5wv=QuAZxmYiV6zI2iwkq3-O zJ+sQhU7roHCQNR7MYrk^?k=@ei4$m2(V`=^#7+cvP;oRWd5@Hi@X)76Aw-D^3&j(I z*sTzp=Fl8q34*{``0Pb4BO*g6-QmZw@}ldIl2&$5to2C5(5%g62)8JYBofVku9miR z?kZ#S&$%46n({^eY8Gq;IHWohs+YjGFPe+{4J{ySG-cHaFWP*mt@eCrB-kqZQn8yd*#h z{IDOa;$M#NbXHi~3Ob*1fy9Vbt2bv6StnA#Cqszp(rrEj`+dkkQk6`f-#S@9WmX2M zI>5E7uC^4LN4&IkmYty;h%s501EuG|pEf%{?yas+gwpY39g@EXytyNcL`y{}RFglh z*7`lpGiE{+LF4C#Ye7!NrnEW{>#RVjoC*Je5lDW!W;(VSA-fVmql z`&g+0psezb+xG+sIKRN-YGbUN&~>Oa^5N)t3gdh7zuFefd_6f$P?Dl-Hl_AB;U;3@z8X|d zkkwwB@KW}l%205uk;43CUQ}y5UIS>H1aL)`Wg{3!4wR%W+c>xuV2dsb7xl`}n9IqW#j+1mCClbp{*2Wa$oY3?f+Inb9 zYJr5R;Zesgc>%3p={W4|gpfRSJdz?(jKLIfcI3kLcKvt{IT<#$U1;VLLc>}Izc#KH z*g|Kik-0TUocYrgf$8RS&~5LcL_`)K*{FTlyl6QP2mlkxN7f0DN@B5Lx)l$4$l8y%{PLY^PCPiGQH)RMt8gXp&&l!gV+= zz|Ka?)zEy_3S{?1IJd8(2v6e~jzOUNgR4#W%t0u(w?cM$_1$~#zI<3PVP4!%cHU&u zsMy?YuEFgnpyeFLcHA^8_t_K*g--+1yWYhkH(_(V5wPP|ol z4_@@;vRrC5GsW>%bD#@AO3~1aTO}N(kSJ-nyA!ks!JotuX-MSjO7RQi>A2*K;wm8I zDJ#;*9%6SF$=zjQ{#qGeKdHq8zgM&EG4k5T4fH&-`q*sfnon<{5!lW??(p>Tu(!NL z6&pM#(2U4B(bbUh>STP;&@_7>On1I=a(qfFX7h0O;;3iD2;}UC)=DGpdV@&|A;Q)% zZfJA|j)ipo0~NuH3=3hc|0i})LD!Be(G}AR^=dm8SRtfba#JM9gB6e{*O#|aNhB>; zkBtyA700m)|KgJ&ao?&NLSK$-&xf*Y5M`qym?y9+33($GiY#@l+s;Ox@>z`?0Gvwqt0`+|55wQR~wPg;y;Nk>CCf` z!kEm@vi#;f@a?FTz+gPkYaH4SljdKq>y^0NZXnK}Wdk(0%3=;aKy@t*sUJ!J$SjCzp0?zljK-1O{j z=QV5D3o4139JaVP_*xvRJ?%s`>`4jv>V9$REijgMTtSG%HqgP0ivXp&KxXhm2&%rk zAc#ge>rB_UvU2AE!WP`}V|Pdvb$T8sSN29#)BBpQDVm8op)*V?xl%9zb~c^xDA|C+ zr;&xvYH97~mqUvIn4Xk>G9#aQt#76g=Gy}BvHW-Y60ZXcK42k`9UQgW&B{f})g+hm zA@y3XdQ9_6k0DD?Idy*4rq4Ia)dN#LB0jH8XyNRDi5&|En(S+wh`WU)Ov|HdbAmkr zk5{3i7Y^S9zl3H7dD8p zO|2jjnK2jPS15FF7N~1;Ba8b>Kg)a$9#554Xf+(oLJLU=(^`%7I<%)A=iA~>3<`-^ zR~um`oJ-WEsKVpvIh*UB>=&dfA5W7Z2=BqdO@GP(${Tf4GhDKBgWv&@5rFicy#RCP zRKOM{1Cgahce1UG&l16KBQ= zs(JvFR(z2pD>;c`u7qZ!IOQaX8j`$2#7=p|fvuW3=J;ZGU9x;B=&6ZvsR{asAe2rE z^0J`2rj8_PN@^T-SB#5P1uFa{E_9G^pHg@QlbHpqb2#K`2OQ|k^nM^_^6rqwiA8Vn z+B)cgeG18e=Y>~_U$WTmbh(t4I64I5>ejbH+1+-SBf_B$GzuCq@k~E|C7T4IFV*yZ zHB)?-WyHR0m@1SJu}Y zD@3}lYsy(X7VC5^vnb-N+8Ov<5ur9zbOvGm&jcd}JwIk%NUt4%<i z>n6kE^+c|QOvN02dT>#J$i@GW6vrtPq>*l4`<81) zPtdZob{kr{br2k?>x;Qt0Tv7dr3_L(7h7PG*bwS8#zBe&*T;&V)5}6?jt^|ecEDA4 z&)0c3N$&B?&im=LU+z-fydRoExD>h=!p_uJ!{#btyZ1e&x$1O31D*7IJxNG+b8{P>bvqJ9mdex6QCa9Ea_FD{C=GBm_BQ7+ zA{hDn+NV6xm<8`SS7lwTI%leus-*H#eRW&BCD&=A;_tAY4SVRM-;OdOmZrfU&#&rl zr60+V-p~1REJx1-w=R%2hLTL$&lU7iECDxm*Q(DW9oOf2%@xlFd=j3XC7$vRv|HJY zJ`x{7GB0QZ2wKdfG_#jH`}elb1EsXzKE69iwXi%x{9Sr@bhgmYg&iQtDk6LvUY^(I zukP0sYO7P>SLIhZBwG}fZq2+TzCuAr62reEHgO111Y{gQ$<5w{T?q}$@lwU7P$v;# zaK;j&q5ZiL<9VfvU<)g$Z7ap2B}aD0qcPZB;ED^^EmckDNAx)PnHX7EW_h}t^6-X7 z76KP|_GDOMIV+~aDTqOH#HxfnO0fRM@F}~(|EXBIldb$$pgTe#tnzD-Dr_C?boWkH zMVe(xZc_Nho@_zY_Sd3H@Hdl?B}*jf=MymO+ZIHm zaH1%a0`qQm5>jynbViXg_Q+p`)+^md_CO%_Vr#4)K@-o6`Gfp=GwB(?)QbSRi-1GA@ z!b9`@U;pmmFSTU6mFvQxFEulyZB<8^yK5ajyvv5pO$!?W3wzeyfSQA3k`)56VB}*t z|1@vu!SlNpe5Ob*;z8^=_4b2%a*$|lhgc;W#bcvx^dazPPAkLohUr;)XWrx>e!+}N zjX|TuIh98(W|F`5R#wvNWFnT0imH~~N%&rTcQSw5qAz5L(iD4@maBo|@3ooUt?I@n zueHQ>N@^$0PLdcBGiw_Hzbga?+TOxcsPTsrj}-j)^1S7{?uZG(LU+3Fyr&?%!B5Nz zFUSQZNvfu-cx}G5CGllMwMd-iCJCdf?oy)>YTCr{uT2ICxXD zdD&bh=vZbpBZr>9r)6^89TeA`cRe6MiHZuQ3RPKfDzLO0Bx*7x#-0~bpx7?Ex5HYUhGv$PD`>}e5~0Pz;c3?W zqiugLE%3J)&BN`J&j^Y;A>&XImt>SRQWlB7W|)*zz?{|#<#oyv5T1pIu8w^b>Fmmm zLAQGN_xqpsHpI^^)+LRM+)USdAt2cI{*qiEYKz-&yvN&+KYDk$`jSYsl>Fo^t0h=# z#sSFhP4keCaG)+*Y(Dx~6^nbAtW>}AyUyejl_D}}N2-tDh6a zqqQG>=Nv0Th%a2Cm208KcC|!l`N=MDs;-=^H*X9fI#g?|dWxQ)HVHwu!Wa}uzs^45 zT5*z|L6h=3;tj^nnE#DZH@4n{t4FtpKNHmnM$JR2v{efG6)hTpsREP~c7mi?UvVT^ zuI7G%$#P1pCOx2Fx6RMjaNqmI^K6e}WviyVE$&B82$vJ2`gYrM6gd^kr>O(SVWAfP*(!JFr_&uQm&2W*Yb43QBK};cv}i5OdqUYuJ^6*n9ZnK zvLt_YA9O)OrI2))U6rET;xd(gUY~{s2QrMjI(@rNB^6|)amSuY)6HqyUZwrQOD=R#%mhQL;)OHRrSf*eYxz zLmsJUd*$RXvd zOC6xY7HY*3!xSzEM3*f)B2?F6Mcqk7=E$4J&{REIuwabZB>W}SX#0LbIWC+XCFv`D znhVn%3$rL0W$%oGYWhT``Tg+jU30_xe~Mlcp?cvG5j5R746P_kh;AbwObWuU z)vpEspmrXyUzOj_;~{7Gp9AFQbIL_bFwsh0hlc0PHDkvtV^R3dfrensWve`g&86$y z@AsSnOKWb2iNu+IyobQq!!q0zUjHWdCKpTxuZw#sMOnJnQp+R6E2`G#f%*^)pwEg^ zQ0##?hhynYTV<{{w7Bd&>-Mf`DQzT4M99Cr5KmGn7!`}c5Sf-h zVH)qED!{uuyry~R(qhW4!01!XE{5HoS3fz(5XyyZ|rT*O< zN#M7zQP%pogQ{DdjS_z~y$q<(JJPVi*swbJe$7OL1VPMRdp;Yh)>i1&N<@6-Wc|CQ zr#Iec4%@K71?bKb z#4jfAhe2%$7Q9g3%5pgiy_h?>RcynCSgbHV<|5saHpB0)eBsIv{UDsjlk?irKS!Mz zwT`BxaI^qoR4^Mr^mSc){|gA!gyUw?A+Yu_sr`H2S(fY-8CqsV#qYP0P-7!B5_zucmj;w1@*KJNjqr~-)CNj8X);vx!32X~xn!L>CSZ-n zWj&~;Ld(zOnB$3sX9az`t1#E+zu>R89Y^jOI@{k&b;w;^jav4VHMRdjzgIWw%{)Ej zB%DZj_}l;!4_G~W!q5p&9dO_2r_~h4rFRo9W(h~DZ+C<~T=O77nc1zdc3K&H#fOUO z42)=xXk_$Atz<3HMY5VKa2+ zpaft_U5Dtm-l(YlrNVI(c*onFZm3;FgC{TOO@K2=L&jp2TtDpCncXGKa1R#H4n-{0 zGGtCwq|C-YI#VEv?`>rKRT)E4XPXKSi$9lJB419m-4Jg3$uzi&D}o^3iIEG-?!KH+ z;YK7@hKL|<35vbi$+uyda4|gp{#JguDff~a!?8{3L~+XWR&JWp_oyVtBhpLs@0k;D z+g}{p0`0W_dP$Gn(%WpEjD=_9ouc4y$8l-tsjRJ?IAO#7){yHIvp$)z;pN|vu#KI8 zmwfd>v~TNcgKysar#qVYUctj0BMb*m?HZ@@N84 zLy+GhqH1Y4n`$jf4ToDs{E5;udw-<(M{%6^DFXY(GyVVO;V;^aVo&1W4RdL%R(bb3 zOEnzmd#K^M06>W^$p1EXdZ1WX$)J$wl8mW?JK)Y^+CjR+TMBEd8c=lwieB%T!YH^h z6MDAy+n&z{E5?EFsErT>087x5ozuhyv8mD6l&2()$&fW=Gt0jcN`Qrg3dK(hlMW59 zB^>sOmsXo4DNG&HFMLOll;_-PeuSgrVLR)#9J+6m+%8VrjD#SeXUKidvGzNNrJ(w) zuFU>oVheU^IW7?$RB%l>^)fFN_*daQe+vJ^&DqGYhIAp>M5^5%m@W_H=@aj%$<;<} zK{^?RCiVNuz?c;OA*h2^1>lu@m!PvrCQNBAK7Ot(Y=Q6>YZSn(ED@#VG#M1NI3O1k z)Y*3ifgZ^&8sHlX`>X+@+>9r}Tr4X8L<+8Yx?v*WHuQ%XL~Uei`g@?HfoItW)F=&c=e0r{n=i1%ggh&z%5pL%Nax9<^{M{hJnB8M0N9E zb=bFwU%Aywy|IUOqYX`GX_onT$}m>De~XXYUpC#K=vIT;ZZF}?5sJQ2N3S<#Hc9A0 zDq#Ug&MB7U%Q?$YjcVbsFS=|$-;_=*iE~X~5s${`)3T!Wigc#69lB4D7s;SXb+krn zZ7s)ArfDz(8^jDqiEesYkzkepnFmdNc^>Dmn8tnaZn?Yl z&1DQUm;1<@RlMcp-3`B-`6VPjdkM}x&+~Xjqols*PAhpNV=tlOjxejLwUWTr!;tT* zYxnD7&PpB>&)RoJqZl$im38oAV-@s>M3>60>=wNii5F)-Ap{qk+DdCl5u>XYF1C*s zGJRrzkKPx_7W&u`E5`$z(~2Y7yC{RyazS>X2rFATN~z9ft<%zbVD!ypXtN>*?b0^f zA`uVa4IWQZ5p?QAP)!xUR5KbQv(x!SptOnkw}{S`NB=YU-0|1iw7Lt4Bb`w)Bd-=> z??7(n)ghqsN*$f`0Gjf|BRtwWa`dL;ZmiOUh1oa8BC_@`p#QDAF)#qyKcJhz z7`fl@Hr+Mz1x7V&)vYu|Ed2KS%pFwj%R)E=Ff#g!0(U5xegXH(gQe9#RWi#EXmVAfuz0%?Y)$+V8@XXE^d0AZ_c^cb z@qH5LmAfC=e3VU@_&9z8>v`Y0I@yW6+RKGR7L+ObsYLp(Ndrv-BLmw2-+>f?LV%8f zNrU|XI|Da?_zQ6XNeHP9MGj>L2Y{=CXNC8MZ$+p93iucUDtpr2_ zXkSZf4YERPqQV46*g2ETR~K1k6cwd2r=!1NcLyRK$h^?{%9RqMqmVmYrSrIvWAtKm z=hgXMaV}Rmj9N_ba0;&6(tmaxV84#t;$yqJbSiuwx5ikL#^7*{@X(a4|0;y$$EC@t zKpElTR8Ng@JGIAM8Py%}YE_(xc|Ii>ae-4kZS|*lTw7@@9!pr1Zrn-eMfAp^7gI46 zOOxSjDQ7Q!FsXvYIca+$=G(fF$(p>MwdtSY4UCxdBXqXq*jl=ydu>yJKsUmRBdq>Fk82oWFy z$>~b6GC9F9)_AfkFFHLwkx%qPzU2d!YVRvcZF2c+$6Zh>J6=uCVWRy@eVL@ZjCo)@ z#`j9ksBZy8YeKhDJL60}AXI=Y=<|2AoCUFG?O8W}#89I(!f$n6%_Xrbt8nJi) zDi#1WZ4dSMw?X&jm%+}zI*1(R|(0BJgq3%H=?g6Fl zAt&y@A*t@cEAD}yxcgA{w+Pp_zy!C@xwqi@x9~f+pd&9>#Q|;ss%Kus9%$MlQ#P%b z&0QO2A)6tircGoe8kLL490lnxx~0-9>m3F2nK7q1?MXZ%Vu_E+oc5Gl@o1;%@h%6$ zzWEl-6U;lY*A1k_Y4N&v2n+S|M%jzfsYyx08zoQz$|prv`+6RkcW0?B^d-{mth2$Y z3wo}n!$F-?q65*!WE^Yy)!O78gWAmO2re9{Thc5<(Tb{MLLPZ+?PRWuC&T~XQMR)b z(P-AH5ByUQt>I%1i zXv%TZTZ^Yp=u)kEN!gy+=z{D-)-M0N{*$$s4joGWyljK+hkvxnTveymf&&r9fc%ZW z+t4x(!Mk&Xq1!s#Qf%6HWf%hwF;|t8jjrct9BHV;4i{G7XFA>A@KY~%v)$)FOld?y zVyu4%F`SJHhYL3bj)V0(o1KY~*}@+)vn>sii;$Kdf-!Q+5@P{4kCh^B>Z&QS54hjV z%wespfAtq;eP2F_5s6d8gg6_LJ%$7*C`qJ<1V9o@Qi>GG=Gf5aaBjWtrN;$S=31N_ O0s{!nmE@-i^8WzL|633M diff --git a/priv/static/static/font/fontello.1599568314856.woff2 b/priv/static/static/font/fontello.1599568314856.woff2 deleted file mode 100644 index 972e70831d2af5737ff64f92c61cb36b5fe1e410..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 12524 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 CT6|{! diff --git a/priv/static/static/font/fontello.1599568314856.eot b/priv/static/static/font/fontello.1600365488745.eot similarity index 89% rename from priv/static/static/font/fontello.1599568314856.eot rename to priv/static/static/font/fontello.1600365488745.eot index 1a6931a0eb07cc24d512dcafb2c891f0cbfe033b..255f503728cee8b339cb9a2d46ac63034b892b04 100644 GIT binary patch delta 1032 zcmZvZUu;uV9LK-Edv5>GmW^%QEi1R%U0FA2>o&Vf>z{$$EU=Jm*~qf6K*E~Qb&2hI zm0|Fyh{k{t-EtH6gh69~2Ok#u!UGAx7lT6l^MElnMiZ9I%xDqx!2tDlxrtBSlh65{ z?>WEoJNNv~t?N|1LC)$dpwF&2lXC0Hk@c1IyX8LsngB38SIipUx@nI66~J+J?zJV& zS%3Thm{NINn>X^scUG2X*bf3;BcDBC@ccIRepYwB@cO*(^8Q1Bs~^}mzL3iv4}SQY z0*s#K_2dFixNgcJ_E*_=EfkkdZSI_|f6WtBKGa<(&1GlK?Vkq5?sCA}#q24AR<~XP z#tZDV#cVNm`$Awl`}2Tw+bEq_l9aDR?pv1t?iXeh4!TGhH`zgPAJgG$rU*)}=o zX^`FSOjnZh2>I?4g`zZ4{pLG*5FLDq?y&p3*`x3Ew{)ptrAbp8wr?E?5BH|q^~lQ+ z{rkB3=m*JvC9oQRRDV=|MQn;0^k4#O=}Iy6gD0Al;_4T?%G`9|!;55#6z@Lj5e13H{W5u>E33yyJt8-?e`2PN&}a qFnpO45Hnm+#=U}5geT8P^it)M$vx!RQq1ME#zJW^SNY}8rte?6j{E=s delta 748 zcmZvZUr3Wt7{;HoeQn_kBZPELw_-&tb7ke$oaNBEC|9N+g)kY@ZOE1%DPlodHbN@Q z@zI})imoEUi|8xpLI@!cVL}95*@YKL0|~bN+==#lJJ40%;m32H^S=Pj^6V|onbF + + diff --git a/priv/static/static/font/fontello.1599568314856.ttf b/priv/static/static/font/fontello.1600365488745.ttf similarity index 89% rename from priv/static/static/font/fontello.1599568314856.ttf rename to priv/static/static/font/fontello.1600365488745.ttf index 7954644759a21507582b43e04f155f2f139e63ed..6bda99d50ec6c3474da825e450cac7eb7182c4fa 100644 GIT binary patch delta 1013 zcmZvZU1$?o6vzK(X41qY_A{N>IBBP8)2>NuyXlzvQ8lemOFyJ5rEFQj4K+<+lV;Q^ z>P!4WR75KQ`?QOSXdiqi#s?onL=X`Xbst>BviM-3OBc6(vJYxJ;pV(-a{S;t1KD>8aEh>C|2Mj2@u8!!*^vSamL+slD zhn|e@)_J~^y^GbBOzj_WUfHx2u(kjjw~Qv@J3N2##pU`vXJk&G0 z#|8O80{Ceg`y2YMgg)C5ya{Z-diMWcXd*X2$z>@JZw8G({5lG;+BrN0iB|JM04gNd z=YqMHbjW`YMmzki9mRKA?xb+U(!n{4@@1kxrEnT2h>Fqk*OB*0Rv{Y%<`{%n!zNhH zs+ph(SU7EhX4W$%;NmSzn&3y)X%ldch5IIGWqn}+&bPqzGQbMfS(7XxJa}t@HrCH3 zSP8r?H^C}aE~o*x8n4%xU=1tZ&;aeMF%zt1-C+VFmVd$k>sk3=14My08mvZV6rNDO#=hfAed9g_KXv1lN>%(hZ^TsjyR=7l+V@ zeoRO6cO&;)%52x3%IziX@8J;V_%?WcV!$ZTSItfJv{7g7MNd9=rgyqES|wLq_QX6F zJs*|^mQE;8u6bkLzpJ~e&)0-%&egn9ThynuTJ1;Q6;41*XMU{DA##cX{f7nGkpI}f Vmh6ktiDXXNagx= zdJA<+DswZr+M0R|SiL|;B%O%H9rvFw_dHV;XRt9|Vz=EohPg@pu_vT=XJO9Qg z{xh_3(>=Y~Y!_Sk_{!I=do5N|{s>Sa;G0WFB{&F_CnRX1K9ImqeJsHt>Wl=3sq+%B zR(VN+W-8la0M;(ANN|k$Q<6suC+iXffVCYG@S$t$n*okfPf8G^vVR6RLG6$rM2$<( zM&%_8VC>_;1~>)$;6)73P6YI3YtgUkfzLJ04~5L>>(!y(u$fDY;md6w^QCH2odFTn zzIN)G)-~;aUe{E&;P5$ej#u@y^<&PUbD<&G@X58$HS2b{huv>H5zpMN!ft=%_l5Pr Vi#9X2=XyqU)1@|{pX*(<{{>+1zPbPa diff --git a/priv/static/static/font/fontello.1600365488745.woff b/priv/static/static/font/fontello.1600365488745.woff new file mode 100644 index 0000000000000000000000000000000000000000..11c866ae00fb19196fc2ccfd78000476016422d6 GIT binary patch literal 15108 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 literal 0 HcmV?d00001 diff --git a/priv/static/static/font/fontello.1600365488745.woff2 b/priv/static/static/font/fontello.1600365488745.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..06151d28c78df3cdb3a13f4036203d4a15ee93b0 GIT binary patch literal 12736 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

for paragraphs, GS uses
between them)\n // as well as approximate line count by counting characters and approximating ~80\n // per line.\n //\n // Using max-height + overflow: auto for status components resulted in false positives\n // very often with japanese characters, and it was very annoying.\n tallStatus () {\n const lengthScore = this.status.statusnet_html.split(/ 20\n },\n longSubject () {\n return this.status.summary.length > 240\n },\n // When a status has a subject and is also tall, we should only have one show more/less button. If the default is to collapse statuses with subjects, we just treat it like a status with a subject; otherwise, we just treat it like a tall status.\n mightHideBecauseSubject () {\n return !!this.status.summary && this.localCollapseSubjectDefault\n },\n mightHideBecauseTall () {\n return this.tallStatus && !(this.status.summary && this.localCollapseSubjectDefault)\n },\n hideSubjectStatus () {\n return this.mightHideBecauseSubject && !this.expandingSubject\n },\n hideTallStatus () {\n return this.mightHideBecauseTall && !this.showingTall\n },\n showingMore () {\n return (this.mightHideBecauseTall && this.showingTall) || (this.mightHideBecauseSubject && this.expandingSubject)\n },\n nsfwClickthrough () {\n if (!this.status.nsfw) {\n return false\n }\n if (this.status.summary && this.localCollapseSubjectDefault) {\n return false\n }\n return true\n },\n attachmentSize () {\n if ((this.mergedConfig.hideAttachments && !this.inConversation) ||\n (this.mergedConfig.hideAttachmentsInConv && this.inConversation) ||\n (this.status.attachments.length > this.maxThumbnails)) {\n return 'hide'\n } else if (this.compact) {\n return 'small'\n }\n return 'normal'\n },\n galleryTypes () {\n if (this.attachmentSize === 'hide') {\n return []\n }\n return this.mergedConfig.playVideosInModal\n ? ['image', 'video']\n : ['image']\n },\n galleryAttachments () {\n return this.status.attachments.filter(\n file => fileType.fileMatchesSomeType(this.galleryTypes, file)\n )\n },\n nonGalleryAttachments () {\n return this.status.attachments.filter(\n file => !fileType.fileMatchesSomeType(this.galleryTypes, file)\n )\n },\n attachmentTypes () {\n return this.status.attachments.map(file => fileType.fileType(file.mimetype))\n },\n maxThumbnails () {\n return this.mergedConfig.maxThumbnails\n },\n postBodyHtml () {\n const html = this.status.statusnet_html\n\n if (this.mergedConfig.greentext) {\n try {\n if (html.includes('>')) {\n // This checks if post has '>' at the beginning, excluding mentions so that @mention >impying works\n return processHtml(html, (string) => {\n if (string.includes('>') &&\n string\n .replace(/<[^>]+?>/gi, '') // remove all tags\n .replace(/@\\w+/gi, '') // remove mentions (even failed ones)\n .trim()\n .startsWith('>')) {\n return `${string}`\n } else {\n return string\n }\n })\n } else {\n return html\n }\n } catch (e) {\n console.err('Failed to process status html', e)\n return html\n }\n } else {\n return html\n }\n },\n ...mapGetters(['mergedConfig']),\n ...mapState({\n betterShadow: state => state.interface.browserSupport.cssFilter,\n currentUser: state => state.users.currentUser\n })\n },\n components: {\n Attachment,\n Poll,\n Gallery,\n LinkPreview\n },\n methods: {\n linkClicked (event) {\n const target = event.target.closest('.status-content a')\n if (target) {\n if (target.className.match(/mention/)) {\n const href = target.href\n const attn = this.status.attentions.find(attn => mentionMatchesUrl(attn, href))\n if (attn) {\n event.stopPropagation()\n event.preventDefault()\n const link = this.generateUserProfileLink(attn.id, attn.screen_name)\n this.$router.push(link)\n return\n }\n }\n if (target.rel.match(/(?:^|\\s)tag(?:$|\\s)/) || target.className.match(/hashtag/)) {\n // Extract tag name from dataset or link url\n const tag = target.dataset.tag || extractTagFromUrl(target.href)\n if (tag) {\n const link = this.generateTagLink(tag)\n this.$router.push(link)\n return\n }\n }\n window.open(target.href, '_blank')\n }\n },\n toggleShowMore () {\n if (this.mightHideBecauseTall) {\n this.showingTall = !this.showingTall\n } else if (this.mightHideBecauseSubject) {\n this.expandingSubject = !this.expandingSubject\n }\n },\n generateUserProfileLink (id, name) {\n return generateProfileLink(id, name, this.$store.state.instance.restrictedNicknames)\n },\n generateTagLink (tag) {\n return `/tag/${tag}`\n },\n setMedia () {\n const attachments = this.attachmentSize === 'hide' ? this.status.attachments : this.galleryAttachments\n return () => this.$store.dispatch('setMedia', attachments)\n }\n }\n}\n\nexport default StatusContent\n","/**\n * This is a tiny purpose-built HTML parser/processor. This basically detects any type of visual newline and\n * allows it to be processed, useful for greentexting, mostly\n *\n * known issue: doesn't handle CDATA so nested CDATA might not work well\n *\n * @param {Object} input - input data\n * @param {(string) => string} processor - function that will be called on every line\n * @return {string} processed html\n */\nexport const processHtml = (html, processor) => {\n const handledTags = new Set(['p', 'br', 'div'])\n const openCloseTags = new Set(['p', 'div'])\n\n let buffer = '' // Current output buffer\n const level = [] // How deep we are in tags and which tags were there\n let textBuffer = '' // Current line content\n let tagBuffer = null // Current tag buffer, if null = we are not currently reading a tag\n\n // Extracts tag name from tag, i.e. => span\n const getTagName = (tag) => {\n const result = /(?:<\\/(\\w+)>|<(\\w+)\\s?[^/]*?\\/?>)/gi.exec(tag)\n return result && (result[1] || result[2])\n }\n\n const flush = () => { // Processes current line buffer, adds it to output buffer and clears line buffer\n if (textBuffer.trim().length > 0) {\n buffer += processor(textBuffer)\n } else {\n buffer += textBuffer\n }\n textBuffer = ''\n }\n\n const handleBr = (tag) => { // handles single newlines/linebreaks/selfclosing\n flush()\n buffer += tag\n }\n\n const handleOpen = (tag) => { // handles opening tags\n flush()\n buffer += tag\n level.push(tag)\n }\n\n const handleClose = (tag) => { // handles closing tags\n flush()\n buffer += tag\n if (level[level.length - 1] === tag) {\n level.pop()\n }\n }\n\n for (let i = 0; i < html.length; i++) {\n const char = html[i]\n if (char === '<' && tagBuffer === null) {\n tagBuffer = char\n } else if (char !== '>' && tagBuffer !== null) {\n tagBuffer += char\n } else if (char === '>' && tagBuffer !== null) {\n tagBuffer += char\n const tagFull = tagBuffer\n tagBuffer = null\n const tagName = getTagName(tagFull)\n if (handledTags.has(tagName)) {\n if (tagName === 'br') {\n handleBr(tagFull)\n } else if (openCloseTags.has(tagName)) {\n if (tagFull[1] === '/') {\n handleClose(tagFull)\n } else if (tagFull[tagFull.length - 2] === '/') {\n // self-closing\n handleBr(tagFull)\n } else {\n handleOpen(tagFull)\n }\n }\n } else {\n textBuffer += tagFull\n }\n } else if (char === '\\n') {\n handleBr(char)\n } else {\n textBuffer += char\n }\n }\n if (tagBuffer) {\n textBuffer += tagBuffer\n }\n\n flush()\n\n return buffer\n}\n","export const mentionMatchesUrl = (attention, url) => {\n if (url === attention.statusnet_profile_url) {\n return true\n }\n const [namepart, instancepart] = attention.screen_name.split('@')\n const matchstring = new RegExp('://' + instancepart + '/.*' + namepart + '$', 'g')\n\n return !!url.match(matchstring)\n}\n\n/**\n * Extract tag name from pleroma or mastodon url.\n * i.e https://bikeshed.party/tag/photo or https://quey.org/tags/sky\n * @param {string} url\n */\nexport const extractTagFromUrl = (url) => {\n const regex = /tag[s]*\\/(\\w+)$/g\n const result = regex.exec(url)\n if (!result) {\n return false\n }\n return result[1]\n}\n","function injectStyle (context) {\n require(\"!!vue-style-loader!css-loader?minimize!../../../node_modules/vue-loader/lib/style-compiler/index?{\\\"optionsId\\\":\\\"0\\\",\\\"vue\\\":true,\\\"scoped\\\":false,\\\"sourceMap\\\":false}!sass-loader!../../../node_modules/vue-loader/lib/selector?type=styles&index=0!./status_content.vue\")\n}\n/* script */\nexport * from \"!!babel-loader!./status_content.js\"\nimport __vue_script__ from \"!!babel-loader!./status_content.js\"/* template */\nimport {render as __vue_render__, staticRenderFns as __vue_static_render_fns__} from \"!!../../../node_modules/vue-loader/lib/template-compiler/index?{\\\"id\\\":\\\"data-v-2a51d4c2\\\",\\\"hasScoped\\\":false,\\\"optionsId\\\":\\\"0\\\",\\\"buble\\\":{\\\"transforms\\\":{}}}!../../../node_modules/vue-loader/lib/selector?type=template&index=0!./status_content.vue\"\n/* template functional */\nvar __vue_template_functional__ = false\n/* styles */\nvar __vue_styles__ = injectStyle\n/* scopeId */\nvar __vue_scopeId__ = null\n/* moduleIdentifier (server only) */\nvar __vue_module_identifier__ = null\nimport normalizeComponent from \"!../../../node_modules/vue-loader/lib/runtime/component-normalizer\"\nvar Component = normalizeComponent(\n __vue_script__,\n __vue_render__,\n __vue_static_render_fns__,\n __vue_template_functional__,\n __vue_styles__,\n __vue_scopeId__,\n __vue_module_identifier__\n)\n\nexport default Component.exports\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"StatusContent\"},[_vm._t(\"header\"),_vm._v(\" \"),(_vm.status.summary_html)?_c('div',{staticClass:\"summary-wrapper\",class:{ 'tall-subject': (_vm.longSubject && !_vm.showingLongSubject) }},[_c('div',{staticClass:\"media-body summary\",domProps:{\"innerHTML\":_vm._s(_vm.status.summary_html)},on:{\"click\":function($event){$event.preventDefault();return _vm.linkClicked($event)}}}),_vm._v(\" \"),(_vm.longSubject && _vm.showingLongSubject)?_c('a',{staticClass:\"tall-subject-hider\",attrs:{\"href\":\"#\"},on:{\"click\":function($event){$event.preventDefault();_vm.showingLongSubject=false}}},[_vm._v(_vm._s(_vm.$t(\"status.hide_full_subject\")))]):(_vm.longSubject)?_c('a',{staticClass:\"tall-subject-hider\",class:{ 'tall-subject-hider_focused': _vm.focused },attrs:{\"href\":\"#\"},on:{\"click\":function($event){$event.preventDefault();_vm.showingLongSubject=true}}},[_vm._v(\"\\n \"+_vm._s(_vm.$t(\"status.show_full_subject\"))+\"\\n \")]):_vm._e()]):_vm._e(),_vm._v(\" \"),_c('div',{staticClass:\"status-content-wrapper\",class:{'tall-status': _vm.hideTallStatus}},[(_vm.hideTallStatus)?_c('a',{staticClass:\"tall-status-hider\",class:{ 'tall-status-hider_focused': _vm.focused },attrs:{\"href\":\"#\"},on:{\"click\":function($event){$event.preventDefault();return _vm.toggleShowMore($event)}}},[_vm._v(\"\\n \"+_vm._s(_vm.$t(\"general.show_more\"))+\"\\n \")]):_vm._e(),_vm._v(\" \"),(!_vm.hideSubjectStatus)?_c('div',{staticClass:\"status-content media-body\",class:{ 'single-line': _vm.singleLine },domProps:{\"innerHTML\":_vm._s(_vm.postBodyHtml)},on:{\"click\":function($event){$event.preventDefault();return _vm.linkClicked($event)}}}):_vm._e(),_vm._v(\" \"),(_vm.hideSubjectStatus)?_c('a',{staticClass:\"cw-status-hider\",attrs:{\"href\":\"#\"},on:{\"click\":function($event){$event.preventDefault();return _vm.toggleShowMore($event)}}},[_vm._v(\"\\n \"+_vm._s(_vm.$t(\"status.show_content\"))+\"\\n \"),(_vm.attachmentTypes.includes('image'))?_c('span',{staticClass:\"icon-picture\"}):_vm._e(),_vm._v(\" \"),(_vm.attachmentTypes.includes('video'))?_c('span',{staticClass:\"icon-video\"}):_vm._e(),_vm._v(\" \"),(_vm.attachmentTypes.includes('audio'))?_c('span',{staticClass:\"icon-music\"}):_vm._e(),_vm._v(\" \"),(_vm.attachmentTypes.includes('unknown'))?_c('span',{staticClass:\"icon-doc\"}):_vm._e(),_vm._v(\" \"),(_vm.status.poll && _vm.status.poll.options)?_c('span',{staticClass:\"icon-chart-bar\"}):_vm._e(),_vm._v(\" \"),(_vm.status.card)?_c('span',{staticClass:\"icon-link\"}):_vm._e()]):_vm._e(),_vm._v(\" \"),(_vm.showingMore && !_vm.fullContent)?_c('a',{staticClass:\"status-unhider\",attrs:{\"href\":\"#\"},on:{\"click\":function($event){$event.preventDefault();return _vm.toggleShowMore($event)}}},[_vm._v(\"\\n \"+_vm._s(_vm.tallStatus ? _vm.$t(\"general.show_less\") : _vm.$t(\"status.hide_content\"))+\"\\n \")]):_vm._e()]),_vm._v(\" \"),(_vm.status.poll && _vm.status.poll.options && !_vm.hideSubjectStatus)?_c('div',[_c('poll',{attrs:{\"base-poll\":_vm.status.poll}})],1):_vm._e(),_vm._v(\" \"),(_vm.status.attachments.length !== 0 && (!_vm.hideSubjectStatus || _vm.showingLongSubject))?_c('div',{staticClass:\"attachments media-body\"},[_vm._l((_vm.nonGalleryAttachments),function(attachment){return _c('attachment',{key:attachment.id,staticClass:\"non-gallery\",attrs:{\"size\":_vm.attachmentSize,\"nsfw\":_vm.nsfwClickthrough,\"attachment\":attachment,\"allow-play\":true,\"set-media\":_vm.setMedia()}})}),_vm._v(\" \"),(_vm.galleryAttachments.length > 0)?_c('gallery',{attrs:{\"nsfw\":_vm.nsfwClickthrough,\"attachments\":_vm.galleryAttachments,\"set-media\":_vm.setMedia()}}):_vm._e()],2):_vm._e(),_vm._v(\" \"),(_vm.status.card && !_vm.hideSubjectStatus && !_vm.noHeading)?_c('div',{staticClass:\"link-preview media-body\"},[_c('link-preview',{attrs:{\"card\":_vm.status.card,\"size\":_vm.attachmentSize,\"nsfw\":_vm.nsfwClickthrough}})],1):_vm._e(),_vm._v(\" \"),_vm._t(\"footer\")],2)}\nvar staticRenderFns = []\nexport { render, staticRenderFns }","export const SECOND = 1000\nexport const MINUTE = 60 * SECOND\nexport const HOUR = 60 * MINUTE\nexport const DAY = 24 * HOUR\nexport const WEEK = 7 * DAY\nexport const MONTH = 30 * DAY\nexport const YEAR = 365.25 * DAY\n\nexport const relativeTime = (date, nowThreshold = 1) => {\n if (typeof date === 'string') date = Date.parse(date)\n const round = Date.now() > date ? Math.floor : Math.ceil\n const d = Math.abs(Date.now() - date)\n let r = { num: round(d / YEAR), key: 'time.years' }\n if (d < nowThreshold * SECOND) {\n r.num = 0\n r.key = 'time.now'\n } else if (d < MINUTE) {\n r.num = round(d / SECOND)\n r.key = 'time.seconds'\n } else if (d < HOUR) {\n r.num = round(d / MINUTE)\n r.key = 'time.minutes'\n } else if (d < DAY) {\n r.num = round(d / HOUR)\n r.key = 'time.hours'\n } else if (d < WEEK) {\n r.num = round(d / DAY)\n r.key = 'time.days'\n } else if (d < MONTH) {\n r.num = round(d / WEEK)\n r.key = 'time.weeks'\n } else if (d < YEAR) {\n r.num = round(d / MONTH)\n r.key = 'time.months'\n }\n // Remove plural form when singular\n if (r.num === 1) r.key = r.key.slice(0, -1)\n return r\n}\n\nexport const relativeTimeShort = (date, nowThreshold = 1) => {\n const r = relativeTime(date, nowThreshold)\n r.key += '_short'\n return r\n}\n","import UserCard from '../user_card/user_card.vue'\nimport UserAvatar from '../user_avatar/user_avatar.vue'\nimport generateProfileLink from 'src/services/user_profile_link_generator/user_profile_link_generator'\n\nconst BasicUserCard = {\n props: [\n 'user'\n ],\n data () {\n return {\n userExpanded: false\n }\n },\n components: {\n UserCard,\n UserAvatar\n },\n methods: {\n toggleUserExpanded () {\n this.userExpanded = !this.userExpanded\n },\n userProfileLink (user) {\n return generateProfileLink(user.id, user.screen_name, this.$store.state.instance.restrictedNicknames)\n }\n }\n}\n\nexport default BasicUserCard\n","function injectStyle (context) {\n require(\"!!vue-style-loader!css-loader?minimize!../../../node_modules/vue-loader/lib/style-compiler/index?{\\\"optionsId\\\":\\\"0\\\",\\\"vue\\\":true,\\\"scoped\\\":false,\\\"sourceMap\\\":false}!sass-loader!../../../node_modules/vue-loader/lib/selector?type=styles&index=0!./basic_user_card.vue\")\n}\n/* script */\nexport * from \"!!babel-loader!./basic_user_card.js\"\nimport __vue_script__ from \"!!babel-loader!./basic_user_card.js\"/* template */\nimport {render as __vue_render__, staticRenderFns as __vue_static_render_fns__} from \"!!../../../node_modules/vue-loader/lib/template-compiler/index?{\\\"id\\\":\\\"data-v-4d2bc0bb\\\",\\\"hasScoped\\\":false,\\\"optionsId\\\":\\\"0\\\",\\\"buble\\\":{\\\"transforms\\\":{}}}!../../../node_modules/vue-loader/lib/selector?type=template&index=0!./basic_user_card.vue\"\n/* template functional */\nvar __vue_template_functional__ = false\n/* styles */\nvar __vue_styles__ = injectStyle\n/* scopeId */\nvar __vue_scopeId__ = null\n/* moduleIdentifier (server only) */\nvar __vue_module_identifier__ = null\nimport normalizeComponent from \"!../../../node_modules/vue-loader/lib/runtime/component-normalizer\"\nvar Component = normalizeComponent(\n __vue_script__,\n __vue_render__,\n __vue_static_render_fns__,\n __vue_template_functional__,\n __vue_styles__,\n __vue_scopeId__,\n __vue_module_identifier__\n)\n\nexport default Component.exports\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"basic-user-card\"},[_c('router-link',{attrs:{\"to\":_vm.userProfileLink(_vm.user)}},[_c('UserAvatar',{staticClass:\"avatar\",attrs:{\"user\":_vm.user},nativeOn:{\"click\":function($event){$event.preventDefault();return _vm.toggleUserExpanded($event)}}})],1),_vm._v(\" \"),(_vm.userExpanded)?_c('div',{staticClass:\"basic-user-card-expanded-content\"},[_c('UserCard',{attrs:{\"user-id\":_vm.user.id,\"rounded\":true,\"bordered\":true}})],1):_c('div',{staticClass:\"basic-user-card-collapsed-content\"},[_c('div',{staticClass:\"basic-user-card-user-name\",attrs:{\"title\":_vm.user.name}},[(_vm.user.name_html)?_c('span',{staticClass:\"basic-user-card-user-name-value\",domProps:{\"innerHTML\":_vm._s(_vm.user.name_html)}}):_c('span',{staticClass:\"basic-user-card-user-name-value\"},[_vm._v(_vm._s(_vm.user.name))])]),_vm._v(\" \"),_c('div',[_c('router-link',{staticClass:\"basic-user-card-screen-name\",attrs:{\"to\":_vm.userProfileLink(_vm.user)}},[_vm._v(\"\\n @\"+_vm._s(_vm.user.screen_name)+\"\\n \")])],1),_vm._v(\" \"),_vm._t(\"default\")],2)],1)}\nvar staticRenderFns = []\nexport { render, staticRenderFns }","import { convert, brightness, contrastRatio } from 'chromatism'\nimport { alphaBlendLayers, getTextColor, relativeLuminance } from '../color_convert/color_convert.js'\nimport { LAYERS, DEFAULT_OPACITY, SLOT_INHERITANCE } from './pleromafe.js'\n\n/*\n * # What's all this?\n * Here be theme engine for pleromafe. All of this supposed to ease look\n * and feel customization, making widget styles and make developer's life\n * easier when it comes to supporting themes. Like many other theme systems\n * it operates on color definitions, or \"slots\" - for example you define\n * \"button\" color slot and then in UI component Button's CSS you refer to\n * it as a CSS3 Variable.\n *\n * Some applications allow you to customize colors for certain things.\n * Some UI toolkits allow you to define colors for each type of widget.\n * Most of them are pretty barebones and have no assistance for common\n * problems and cases, and in general themes themselves are very hard to\n * maintain in all aspects. This theme engine tries to solve all of the\n * common problems with themes.\n *\n * You don't have redefine several similar colors if you just want to\n * change one color - all color slots are derived from other ones, so you\n * can have at least one or two \"basic\" colors defined and have all other\n * components inherit and modify basic ones.\n *\n * You don't have to test contrast ratio for colors or pick text color for\n * each element even if you have light-on-dark elements in dark-on-light\n * theme.\n *\n * You don't have to maintain order of code for inheriting slots from othet\n * slots - dependency graph resolving does it for you.\n */\n\n/* This indicates that this version of code outputs similar theme data and\n * should be incremented if output changes - for instance if getTextColor\n * function changes and older themes no longer render text colors as\n * author intended previously.\n */\nexport const CURRENT_VERSION = 3\n\nexport const getLayersArray = (layer, data = LAYERS) => {\n let array = [layer]\n let parent = data[layer]\n while (parent) {\n array.unshift(parent)\n parent = data[parent]\n }\n return array\n}\n\nexport const getLayers = (layer, variant = layer, opacitySlot, colors, opacity) => {\n return getLayersArray(layer).map((currentLayer) => ([\n currentLayer === layer\n ? colors[variant]\n : colors[currentLayer],\n currentLayer === layer\n ? opacity[opacitySlot] || 1\n : opacity[currentLayer]\n ]))\n}\n\nconst getDependencies = (key, inheritance) => {\n const data = inheritance[key]\n if (typeof data === 'string' && data.startsWith('--')) {\n return [data.substring(2)]\n } else {\n if (data === null) return []\n const { depends, layer, variant } = data\n const layerDeps = layer\n ? getLayersArray(layer).map(currentLayer => {\n return currentLayer === layer\n ? variant || layer\n : currentLayer\n })\n : []\n if (Array.isArray(depends)) {\n return [...depends, ...layerDeps]\n } else {\n return [...layerDeps]\n }\n }\n}\n\n/**\n * Sorts inheritance object topologically - dependant slots come after\n * dependencies\n *\n * @property {Object} inheritance - object defining the nodes\n * @property {Function} getDeps - function that returns dependencies for\n * given value and inheritance object.\n * @returns {String[]} keys of inheritance object, sorted in topological\n * order. Additionally, dependency-less nodes will always be first in line\n */\nexport const topoSort = (\n inheritance = SLOT_INHERITANCE,\n getDeps = getDependencies\n) => {\n // This is an implementation of https://en.wikipedia.org/wiki/Tarjan%27s_strongly_connected_components_algorithm\n\n const allKeys = Object.keys(inheritance)\n const whites = new Set(allKeys)\n const grays = new Set()\n const blacks = new Set()\n const unprocessed = [...allKeys]\n const output = []\n\n const step = (node) => {\n if (whites.has(node)) {\n // Make node \"gray\"\n whites.delete(node)\n grays.add(node)\n // Do step for each node connected to it (one way)\n getDeps(node, inheritance).forEach(step)\n // Make node \"black\"\n grays.delete(node)\n blacks.add(node)\n // Put it into the output list\n output.push(node)\n } else if (grays.has(node)) {\n console.debug('Cyclic depenency in topoSort, ignoring')\n output.push(node)\n } else if (blacks.has(node)) {\n // do nothing\n } else {\n throw new Error('Unintended condition in topoSort!')\n }\n }\n while (unprocessed.length > 0) {\n step(unprocessed.pop())\n }\n\n // The index thing is to make sorting stable on browsers\n // where Array.sort() isn't stable\n return output.map((data, index) => ({ data, index })).sort(({ data: a, index: ai }, { data: b, index: bi }) => {\n const depsA = getDeps(a, inheritance).length\n const depsB = getDeps(b, inheritance).length\n\n if (depsA === depsB || (depsB !== 0 && depsA !== 0)) return ai - bi\n if (depsA === 0 && depsB !== 0) return -1\n if (depsB === 0 && depsA !== 0) return 1\n }).map(({ data }) => data)\n}\n\nconst expandSlotValue = (value) => {\n if (typeof value === 'object') return value\n return {\n depends: value.startsWith('--') ? [value.substring(2)] : [],\n default: value.startsWith('#') ? value : undefined\n }\n}\n/**\n * retrieves opacity slot for given slot. This goes up the depenency graph\n * to find which parent has opacity slot defined for it.\n * TODO refactor this\n */\nexport const getOpacitySlot = (\n k,\n inheritance = SLOT_INHERITANCE,\n getDeps = getDependencies\n) => {\n const value = expandSlotValue(inheritance[k])\n if (value.opacity === null) return\n if (value.opacity) return value.opacity\n const findInheritedOpacity = (key, visited = [k]) => {\n const depSlot = getDeps(key, inheritance)[0]\n if (depSlot === undefined) return\n const dependency = inheritance[depSlot]\n if (dependency === undefined) return\n if (dependency.opacity || dependency === null) {\n return dependency.opacity\n } else if (dependency.depends && visited.includes(depSlot)) {\n return findInheritedOpacity(depSlot, [...visited, depSlot])\n } else {\n return null\n }\n }\n if (value.depends) {\n return findInheritedOpacity(k)\n }\n}\n\n/**\n * retrieves layer slot for given slot. This goes up the depenency graph\n * to find which parent has opacity slot defined for it.\n * this is basically copypaste of getOpacitySlot except it checks if key is\n * in LAYERS\n * TODO refactor this\n */\nexport const getLayerSlot = (\n k,\n inheritance = SLOT_INHERITANCE,\n getDeps = getDependencies\n) => {\n const value = expandSlotValue(inheritance[k])\n if (LAYERS[k]) return k\n if (value.layer === null) return\n if (value.layer) return value.layer\n const findInheritedLayer = (key, visited = [k]) => {\n const depSlot = getDeps(key, inheritance)[0]\n if (depSlot === undefined) return\n const dependency = inheritance[depSlot]\n if (dependency === undefined) return\n if (dependency.layer || dependency === null) {\n return dependency.layer\n } else if (dependency.depends) {\n return findInheritedLayer(dependency, [...visited, depSlot])\n } else {\n return null\n }\n }\n if (value.depends) {\n return findInheritedLayer(k)\n }\n}\n\n/**\n * topologically sorted SLOT_INHERITANCE\n */\nexport const SLOT_ORDERED = topoSort(\n Object.entries(SLOT_INHERITANCE)\n .sort(([aK, aV], [bK, bV]) => ((aV && aV.priority) || 0) - ((bV && bV.priority) || 0))\n .reduce((acc, [k, v]) => ({ ...acc, [k]: v }), {})\n)\n\n/**\n * All opacity slots used in color slots, their default values and affected\n * color slots.\n */\nexport const OPACITIES = Object.entries(SLOT_INHERITANCE).reduce((acc, [k, v]) => {\n const opacity = getOpacitySlot(k, SLOT_INHERITANCE, getDependencies)\n if (opacity) {\n return {\n ...acc,\n [opacity]: {\n defaultValue: DEFAULT_OPACITY[opacity] || 1,\n affectedSlots: [...((acc[opacity] && acc[opacity].affectedSlots) || []), k]\n }\n }\n } else {\n return acc\n }\n}, {})\n\n/**\n * Handle dynamic color\n */\nexport const computeDynamicColor = (sourceColor, getColor, mod) => {\n if (typeof sourceColor !== 'string' || !sourceColor.startsWith('--')) return sourceColor\n let targetColor = null\n // Color references other color\n const [variable, modifier] = sourceColor.split(/,/g).map(str => str.trim())\n const variableSlot = variable.substring(2)\n targetColor = getColor(variableSlot)\n if (modifier) {\n targetColor = brightness(Number.parseFloat(modifier) * mod, targetColor).rgb\n }\n return targetColor\n}\n\n/**\n * THE function you want to use. Takes provided colors and opacities\n * value and uses inheritance data to figure out color needed for the slot.\n */\nexport const getColors = (sourceColors, sourceOpacity) => SLOT_ORDERED.reduce(({ colors, opacity }, key) => {\n const sourceColor = sourceColors[key]\n const value = expandSlotValue(SLOT_INHERITANCE[key])\n const deps = getDependencies(key, SLOT_INHERITANCE)\n const isTextColor = !!value.textColor\n const variant = value.variant || value.layer\n\n let backgroundColor = null\n\n if (isTextColor) {\n backgroundColor = alphaBlendLayers(\n { ...(colors[deps[0]] || convert(sourceColors[key] || '#FF00FF').rgb) },\n getLayers(\n getLayerSlot(key) || 'bg',\n variant || 'bg',\n getOpacitySlot(variant),\n colors,\n opacity\n )\n )\n } else if (variant && variant !== key) {\n backgroundColor = colors[variant] || convert(sourceColors[variant]).rgb\n } else {\n backgroundColor = colors.bg || convert(sourceColors.bg)\n }\n\n const isLightOnDark = relativeLuminance(backgroundColor) < 0.5\n const mod = isLightOnDark ? 1 : -1\n\n let outputColor = null\n if (sourceColor) {\n // Color is defined in source color\n let targetColor = sourceColor\n if (targetColor === 'transparent') {\n // We take only layers below current one\n const layers = getLayers(\n getLayerSlot(key),\n key,\n getOpacitySlot(key) || key,\n colors,\n opacity\n ).slice(0, -1)\n targetColor = {\n ...alphaBlendLayers(\n convert('#FF00FF').rgb,\n layers\n ),\n a: 0\n }\n } else if (typeof sourceColor === 'string' && sourceColor.startsWith('--')) {\n targetColor = computeDynamicColor(\n sourceColor,\n variableSlot => colors[variableSlot] || sourceColors[variableSlot],\n mod\n )\n } else if (typeof sourceColor === 'string' && sourceColor.startsWith('#')) {\n targetColor = convert(targetColor).rgb\n }\n outputColor = { ...targetColor }\n } else if (value.default) {\n // same as above except in object form\n outputColor = convert(value.default).rgb\n } else {\n // calculate color\n const defaultColorFunc = (mod, dep) => ({ ...dep })\n const colorFunc = value.color || defaultColorFunc\n\n if (value.textColor) {\n if (value.textColor === 'bw') {\n outputColor = contrastRatio(backgroundColor).rgb\n } else {\n let color = { ...colors[deps[0]] }\n if (value.color) {\n color = colorFunc(mod, ...deps.map((dep) => ({ ...colors[dep] })))\n }\n outputColor = getTextColor(\n backgroundColor,\n { ...color },\n value.textColor === 'preserve'\n )\n }\n } else {\n // background color case\n outputColor = colorFunc(\n mod,\n ...deps.map((dep) => ({ ...colors[dep] }))\n )\n }\n }\n if (!outputColor) {\n throw new Error('Couldn\\'t generate color for ' + key)\n }\n\n const opacitySlot = value.opacity || getOpacitySlot(key)\n const ownOpacitySlot = value.opacity\n\n if (ownOpacitySlot === null) {\n outputColor.a = 1\n } else if (sourceColor === 'transparent') {\n outputColor.a = 0\n } else {\n const opacityOverriden = ownOpacitySlot && sourceOpacity[opacitySlot] !== undefined\n\n const dependencySlot = deps[0]\n const dependencyColor = dependencySlot && colors[dependencySlot]\n\n if (!ownOpacitySlot && dependencyColor && !value.textColor && ownOpacitySlot !== null) {\n // Inheriting color from dependency (weird, i know)\n // except if it's a text color or opacity slot is set to 'null'\n outputColor.a = dependencyColor.a\n } else if (!dependencyColor && !opacitySlot) {\n // Remove any alpha channel if no dependency and no opacitySlot found\n delete outputColor.a\n } else {\n // Otherwise try to assign opacity\n if (dependencyColor && dependencyColor.a === 0) {\n // transparent dependency shall make dependents transparent too\n outputColor.a = 0\n } else {\n // Otherwise check if opacity is overriden and use that or default value instead\n outputColor.a = Number(\n opacityOverriden\n ? sourceOpacity[opacitySlot]\n : (OPACITIES[opacitySlot] || {}).defaultValue\n )\n }\n }\n }\n\n if (Number.isNaN(outputColor.a) || outputColor.a === undefined) {\n outputColor.a = 1\n }\n\n if (opacitySlot) {\n return {\n colors: { ...colors, [key]: outputColor },\n opacity: { ...opacity, [opacitySlot]: outputColor.a }\n }\n } else {\n return {\n colors: { ...colors, [key]: outputColor },\n opacity\n }\n }\n}, { colors: {}, opacity: {} })\n","/* eslint-env browser */\nimport statusPosterService from '../../services/status_poster/status_poster.service.js'\nimport fileSizeFormatService from '../../services/file_size_format/file_size_format.js'\n\nconst mediaUpload = {\n data () {\n return {\n uploadCount: 0,\n uploadReady: true\n }\n },\n computed: {\n uploading () {\n return this.uploadCount > 0\n }\n },\n methods: {\n uploadFile (file) {\n const self = this\n const store = this.$store\n if (file.size > store.state.instance.uploadlimit) {\n const filesize = fileSizeFormatService.fileSizeFormat(file.size)\n const allowedsize = fileSizeFormatService.fileSizeFormat(store.state.instance.uploadlimit)\n self.$emit('upload-failed', 'file_too_big', { filesize: filesize.num, filesizeunit: filesize.unit, allowedsize: allowedsize.num, allowedsizeunit: allowedsize.unit })\n return\n }\n const formData = new FormData()\n formData.append('file', file)\n\n self.$emit('uploading')\n self.uploadCount++\n\n statusPosterService.uploadMedia({ store, formData })\n .then((fileData) => {\n self.$emit('uploaded', fileData)\n self.decreaseUploadCount()\n }, (error) => { // eslint-disable-line handle-callback-err\n self.$emit('upload-failed', 'default')\n self.decreaseUploadCount()\n })\n },\n decreaseUploadCount () {\n this.uploadCount--\n if (this.uploadCount === 0) {\n this.$emit('all-uploaded')\n }\n },\n clearFile () {\n this.uploadReady = false\n this.$nextTick(() => {\n this.uploadReady = true\n })\n },\n multiUpload (files) {\n for (const file of files) {\n this.uploadFile(file)\n }\n },\n change ({ target }) {\n this.multiUpload(target.files)\n }\n },\n props: [\n 'dropFiles',\n 'disabled'\n ],\n watch: {\n 'dropFiles': function (fileInfos) {\n if (!this.uploading) {\n this.multiUpload(fileInfos)\n }\n }\n }\n}\n\nexport default mediaUpload\n","function injectStyle (context) {\n require(\"!!vue-style-loader!css-loader?minimize!../../../node_modules/vue-loader/lib/style-compiler/index?{\\\"optionsId\\\":\\\"0\\\",\\\"vue\\\":true,\\\"scoped\\\":false,\\\"sourceMap\\\":false}!sass-loader!../../../node_modules/vue-loader/lib/selector?type=styles&index=0!./media_upload.vue\")\n}\n/* script */\nexport * from \"!!babel-loader!./media_upload.js\"\nimport __vue_script__ from \"!!babel-loader!./media_upload.js\"/* template */\nimport {render as __vue_render__, staticRenderFns as __vue_static_render_fns__} from \"!!../../../node_modules/vue-loader/lib/template-compiler/index?{\\\"id\\\":\\\"data-v-6bb295a4\\\",\\\"hasScoped\\\":false,\\\"optionsId\\\":\\\"0\\\",\\\"buble\\\":{\\\"transforms\\\":{}}}!../../../node_modules/vue-loader/lib/selector?type=template&index=0!./media_upload.vue\"\n/* template functional */\nvar __vue_template_functional__ = false\n/* styles */\nvar __vue_styles__ = injectStyle\n/* scopeId */\nvar __vue_scopeId__ = null\n/* moduleIdentifier (server only) */\nvar __vue_module_identifier__ = null\nimport normalizeComponent from \"!../../../node_modules/vue-loader/lib/runtime/component-normalizer\"\nvar Component = normalizeComponent(\n __vue_script__,\n __vue_render__,\n __vue_static_render_fns__,\n __vue_template_functional__,\n __vue_styles__,\n __vue_scopeId__,\n __vue_module_identifier__\n)\n\nexport default Component.exports\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"media-upload\",class:{ disabled: _vm.disabled }},[_c('label',{staticClass:\"label\",attrs:{\"title\":_vm.$t('tool_tip.media_upload')}},[(_vm.uploading)?_c('i',{staticClass:\"progress-icon icon-spin4 animate-spin\"}):_vm._e(),_vm._v(\" \"),(!_vm.uploading)?_c('i',{staticClass:\"new-icon icon-upload\"}):_vm._e(),_vm._v(\" \"),(_vm.uploadReady)?_c('input',{staticStyle:{\"position\":\"fixed\",\"top\":\"-100em\"},attrs:{\"disabled\":_vm.disabled,\"type\":\"file\",\"multiple\":\"true\"},on:{\"change\":_vm.change}}):_vm._e()])])}\nvar staticRenderFns = []\nexport { render, staticRenderFns }","import * as DateUtils from 'src/services/date_utils/date_utils.js'\nimport { uniq } from 'lodash'\n\nexport default {\n name: 'PollForm',\n props: ['visible'],\n data: () => ({\n pollType: 'single',\n options: ['', ''],\n expiryAmount: 10,\n expiryUnit: 'minutes'\n }),\n computed: {\n pollLimits () {\n return this.$store.state.instance.pollLimits\n },\n maxOptions () {\n return this.pollLimits.max_options\n },\n maxLength () {\n return this.pollLimits.max_option_chars\n },\n expiryUnits () {\n const allUnits = ['minutes', 'hours', 'days']\n const expiry = this.convertExpiryFromUnit\n return allUnits.filter(\n unit => this.pollLimits.max_expiration >= expiry(unit, 1)\n )\n },\n minExpirationInCurrentUnit () {\n return Math.ceil(\n this.convertExpiryToUnit(\n this.expiryUnit,\n this.pollLimits.min_expiration\n )\n )\n },\n maxExpirationInCurrentUnit () {\n return Math.floor(\n this.convertExpiryToUnit(\n this.expiryUnit,\n this.pollLimits.max_expiration\n )\n )\n }\n },\n methods: {\n clear () {\n this.pollType = 'single'\n this.options = ['', '']\n this.expiryAmount = 10\n this.expiryUnit = 'minutes'\n },\n nextOption (index) {\n const element = this.$el.querySelector(`#poll-${index + 1}`)\n if (element) {\n element.focus()\n } else {\n // Try adding an option and try focusing on it\n const addedOption = this.addOption()\n if (addedOption) {\n this.$nextTick(function () {\n this.nextOption(index)\n })\n }\n }\n },\n addOption () {\n if (this.options.length < this.maxOptions) {\n this.options.push('')\n return true\n }\n return false\n },\n deleteOption (index, event) {\n if (this.options.length > 2) {\n this.options.splice(index, 1)\n this.updatePollToParent()\n }\n },\n convertExpiryToUnit (unit, amount) {\n // Note: we want seconds and not milliseconds\n switch (unit) {\n case 'minutes': return (1000 * amount) / DateUtils.MINUTE\n case 'hours': return (1000 * amount) / DateUtils.HOUR\n case 'days': return (1000 * amount) / DateUtils.DAY\n }\n },\n convertExpiryFromUnit (unit, amount) {\n // Note: we want seconds and not milliseconds\n switch (unit) {\n case 'minutes': return 0.001 * amount * DateUtils.MINUTE\n case 'hours': return 0.001 * amount * DateUtils.HOUR\n case 'days': return 0.001 * amount * DateUtils.DAY\n }\n },\n expiryAmountChange () {\n this.expiryAmount =\n Math.max(this.minExpirationInCurrentUnit, this.expiryAmount)\n this.expiryAmount =\n Math.min(this.maxExpirationInCurrentUnit, this.expiryAmount)\n this.updatePollToParent()\n },\n updatePollToParent () {\n const expiresIn = this.convertExpiryFromUnit(\n this.expiryUnit,\n this.expiryAmount\n )\n\n const options = uniq(this.options.filter(option => option !== ''))\n if (options.length < 2) {\n this.$emit('update-poll', { error: this.$t('polls.not_enough_options') })\n return\n }\n this.$emit('update-poll', {\n options,\n multiple: this.pollType === 'multiple',\n expiresIn\n })\n }\n }\n}\n","function injectStyle (context) {\n require(\"!!vue-style-loader!css-loader?minimize!../../../node_modules/vue-loader/lib/style-compiler/index?{\\\"optionsId\\\":\\\"0\\\",\\\"vue\\\":true,\\\"scoped\\\":false,\\\"sourceMap\\\":false}!sass-loader!../../../node_modules/vue-loader/lib/selector?type=styles&index=0!./poll_form.vue\")\n}\n/* script */\nexport * from \"!!babel-loader!./poll_form.js\"\nimport __vue_script__ from \"!!babel-loader!./poll_form.js\"/* template */\nimport {render as __vue_render__, staticRenderFns as __vue_static_render_fns__} from \"!!../../../node_modules/vue-loader/lib/template-compiler/index?{\\\"id\\\":\\\"data-v-1f896331\\\",\\\"hasScoped\\\":false,\\\"optionsId\\\":\\\"0\\\",\\\"buble\\\":{\\\"transforms\\\":{}}}!../../../node_modules/vue-loader/lib/selector?type=template&index=0!./poll_form.vue\"\n/* template functional */\nvar __vue_template_functional__ = false\n/* styles */\nvar __vue_styles__ = injectStyle\n/* scopeId */\nvar __vue_scopeId__ = null\n/* moduleIdentifier (server only) */\nvar __vue_module_identifier__ = null\nimport normalizeComponent from \"!../../../node_modules/vue-loader/lib/runtime/component-normalizer\"\nvar Component = normalizeComponent(\n __vue_script__,\n __vue_render__,\n __vue_static_render_fns__,\n __vue_template_functional__,\n __vue_styles__,\n __vue_scopeId__,\n __vue_module_identifier__\n)\n\nexport default Component.exports\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return (_vm.visible)?_c('div',{staticClass:\"poll-form\"},[_vm._l((_vm.options),function(option,index){return _c('div',{key:index,staticClass:\"poll-option\"},[_c('div',{staticClass:\"input-container\"},[_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.options[index]),expression:\"options[index]\"}],staticClass:\"poll-option-input\",attrs:{\"id\":(\"poll-\" + index),\"type\":\"text\",\"placeholder\":_vm.$t('polls.option'),\"maxlength\":_vm.maxLength},domProps:{\"value\":(_vm.options[index])},on:{\"change\":_vm.updatePollToParent,\"keydown\":function($event){if(!$event.type.indexOf('key')&&_vm._k($event.keyCode,\"enter\",13,$event.key,\"Enter\")){ return null; }$event.stopPropagation();$event.preventDefault();return _vm.nextOption(index)},\"input\":function($event){if($event.target.composing){ return; }_vm.$set(_vm.options, index, $event.target.value)}}})]),_vm._v(\" \"),(_vm.options.length > 2)?_c('div',{staticClass:\"icon-container\"},[_c('i',{staticClass:\"icon-cancel\",on:{\"click\":function($event){return _vm.deleteOption(index)}}})]):_vm._e()])}),_vm._v(\" \"),(_vm.options.length < _vm.maxOptions)?_c('a',{staticClass:\"add-option faint\",on:{\"click\":_vm.addOption}},[_c('i',{staticClass:\"icon-plus\"}),_vm._v(\"\\n \"+_vm._s(_vm.$t(\"polls.add_option\"))+\"\\n \")]):_vm._e(),_vm._v(\" \"),_c('div',{staticClass:\"poll-type-expiry\"},[_c('div',{staticClass:\"poll-type\",attrs:{\"title\":_vm.$t('polls.type')}},[_c('label',{staticClass:\"select\",attrs:{\"for\":\"poll-type-selector\"}},[_c('select',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.pollType),expression:\"pollType\"}],staticClass:\"select\",on:{\"change\":[function($event){var $$selectedVal = Array.prototype.filter.call($event.target.options,function(o){return o.selected}).map(function(o){var val = \"_value\" in o ? o._value : o.value;return val}); _vm.pollType=$event.target.multiple ? $$selectedVal : $$selectedVal[0]},_vm.updatePollToParent]}},[_c('option',{attrs:{\"value\":\"single\"}},[_vm._v(_vm._s(_vm.$t('polls.single_choice')))]),_vm._v(\" \"),_c('option',{attrs:{\"value\":\"multiple\"}},[_vm._v(_vm._s(_vm.$t('polls.multiple_choices')))])]),_vm._v(\" \"),_c('i',{staticClass:\"icon-down-open\"})])]),_vm._v(\" \"),_c('div',{staticClass:\"poll-expiry\",attrs:{\"title\":_vm.$t('polls.expiry')}},[_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.expiryAmount),expression:\"expiryAmount\"}],staticClass:\"expiry-amount hide-number-spinner\",attrs:{\"type\":\"number\",\"min\":_vm.minExpirationInCurrentUnit,\"max\":_vm.maxExpirationInCurrentUnit},domProps:{\"value\":(_vm.expiryAmount)},on:{\"change\":_vm.expiryAmountChange,\"input\":function($event){if($event.target.composing){ return; }_vm.expiryAmount=$event.target.value}}}),_vm._v(\" \"),_c('label',{staticClass:\"expiry-unit select\"},[_c('select',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.expiryUnit),expression:\"expiryUnit\"}],on:{\"change\":[function($event){var $$selectedVal = Array.prototype.filter.call($event.target.options,function(o){return o.selected}).map(function(o){var val = \"_value\" in o ? o._value : o.value;return val}); _vm.expiryUnit=$event.target.multiple ? $$selectedVal : $$selectedVal[0]},_vm.expiryAmountChange]}},_vm._l((_vm.expiryUnits),function(unit){return _c('option',{key:unit,domProps:{\"value\":unit}},[_vm._v(\"\\n \"+_vm._s(_vm.$t((\"time.\" + unit + \"_short\"), ['']))+\"\\n \")])}),0),_vm._v(\" \"),_c('i',{staticClass:\"icon-down-open\"})])])])],2):_vm._e()}\nvar staticRenderFns = []\nexport { render, staticRenderFns }","import statusPoster from '../../services/status_poster/status_poster.service.js'\nimport MediaUpload from '../media_upload/media_upload.vue'\nimport ScopeSelector from '../scope_selector/scope_selector.vue'\nimport EmojiInput from '../emoji_input/emoji_input.vue'\nimport PollForm from '../poll/poll_form.vue'\nimport Attachment from '../attachment/attachment.vue'\nimport StatusContent from '../status_content/status_content.vue'\nimport fileTypeService from '../../services/file_type/file_type.service.js'\nimport { findOffset } from '../../services/offset_finder/offset_finder.service.js'\nimport { reject, map, uniqBy, debounce } from 'lodash'\nimport suggestor from '../emoji_input/suggestor.js'\nimport { mapGetters, mapState } from 'vuex'\nimport Checkbox from '../checkbox/checkbox.vue'\n\nconst buildMentionsString = ({ user, attentions = [] }, currentUser) => {\n let allAttentions = [...attentions]\n\n allAttentions.unshift(user)\n\n allAttentions = uniqBy(allAttentions, 'id')\n allAttentions = reject(allAttentions, { id: currentUser.id })\n\n let mentions = map(allAttentions, (attention) => {\n return `@${attention.screen_name}`\n })\n\n return mentions.length > 0 ? mentions.join(' ') + ' ' : ''\n}\n\n// Converts a string with px to a number like '2px' -> 2\nconst pxStringToNumber = (str) => {\n return Number(str.substring(0, str.length - 2))\n}\n\nconst PostStatusForm = {\n props: [\n 'replyTo',\n 'repliedUser',\n 'attentions',\n 'copyMessageScope',\n 'subject',\n 'disableSubject',\n 'disableScopeSelector',\n 'disableNotice',\n 'disableLockWarning',\n 'disablePolls',\n 'disableSensitivityCheckbox',\n 'disableSubmit',\n 'disablePreview',\n 'placeholder',\n 'maxHeight',\n 'postHandler',\n 'preserveFocus',\n 'autoFocus',\n 'fileLimit',\n 'submitOnEnter',\n 'emojiPickerPlacement'\n ],\n components: {\n MediaUpload,\n EmojiInput,\n PollForm,\n ScopeSelector,\n Checkbox,\n Attachment,\n StatusContent\n },\n mounted () {\n this.updateIdempotencyKey()\n this.resize(this.$refs.textarea)\n\n if (this.replyTo) {\n const textLength = this.$refs.textarea.value.length\n this.$refs.textarea.setSelectionRange(textLength, textLength)\n }\n\n if (this.replyTo || this.autoFocus) {\n this.$refs.textarea.focus()\n }\n },\n data () {\n const preset = this.$route.query.message\n let statusText = preset || ''\n\n const { scopeCopy } = this.$store.getters.mergedConfig\n\n if (this.replyTo) {\n const currentUser = this.$store.state.users.currentUser\n statusText = buildMentionsString({ user: this.repliedUser, attentions: this.attentions }, currentUser)\n }\n\n const scope = ((this.copyMessageScope && scopeCopy) || this.copyMessageScope === 'direct')\n ? this.copyMessageScope\n : this.$store.state.users.currentUser.default_scope\n\n const { postContentType: contentType } = this.$store.getters.mergedConfig\n\n return {\n dropFiles: [],\n uploadingFiles: false,\n error: null,\n posting: false,\n highlighted: 0,\n newStatus: {\n spoilerText: this.subject || '',\n status: statusText,\n nsfw: false,\n files: [],\n poll: {},\n mediaDescriptions: {},\n visibility: scope,\n contentType\n },\n caret: 0,\n pollFormVisible: false,\n showDropIcon: 'hide',\n dropStopTimeout: null,\n preview: null,\n previewLoading: false,\n emojiInputShown: false,\n idempotencyKey: ''\n }\n },\n computed: {\n users () {\n return this.$store.state.users.users\n },\n userDefaultScope () {\n return this.$store.state.users.currentUser.default_scope\n },\n showAllScopes () {\n return !this.mergedConfig.minimalScopesMode\n },\n emojiUserSuggestor () {\n return suggestor({\n emoji: [\n ...this.$store.state.instance.emoji,\n ...this.$store.state.instance.customEmoji\n ],\n users: this.$store.state.users.users,\n updateUsersList: (query) => this.$store.dispatch('searchUsers', { query })\n })\n },\n emojiSuggestor () {\n return suggestor({\n emoji: [\n ...this.$store.state.instance.emoji,\n ...this.$store.state.instance.customEmoji\n ]\n })\n },\n emoji () {\n return this.$store.state.instance.emoji || []\n },\n customEmoji () {\n return this.$store.state.instance.customEmoji || []\n },\n statusLength () {\n return this.newStatus.status.length\n },\n spoilerTextLength () {\n return this.newStatus.spoilerText.length\n },\n statusLengthLimit () {\n return this.$store.state.instance.textlimit\n },\n hasStatusLengthLimit () {\n return this.statusLengthLimit > 0\n },\n charactersLeft () {\n return this.statusLengthLimit - (this.statusLength + this.spoilerTextLength)\n },\n isOverLengthLimit () {\n return this.hasStatusLengthLimit && (this.charactersLeft < 0)\n },\n minimalScopesMode () {\n return this.$store.state.instance.minimalScopesMode\n },\n alwaysShowSubject () {\n return this.mergedConfig.alwaysShowSubjectInput\n },\n postFormats () {\n return this.$store.state.instance.postFormats || []\n },\n safeDMEnabled () {\n return this.$store.state.instance.safeDM\n },\n pollsAvailable () {\n return this.$store.state.instance.pollsAvailable &&\n this.$store.state.instance.pollLimits.max_options >= 2 &&\n this.disablePolls !== true\n },\n hideScopeNotice () {\n return this.disableNotice || this.$store.getters.mergedConfig.hideScopeNotice\n },\n pollContentError () {\n return this.pollFormVisible &&\n this.newStatus.poll &&\n this.newStatus.poll.error\n },\n showPreview () {\n return !this.disablePreview && (!!this.preview || this.previewLoading)\n },\n emptyStatus () {\n return this.newStatus.status.trim() === '' && this.newStatus.files.length === 0\n },\n uploadFileLimitReached () {\n return this.newStatus.files.length >= this.fileLimit\n },\n ...mapGetters(['mergedConfig']),\n ...mapState({\n mobileLayout: state => state.interface.mobileLayout\n })\n },\n watch: {\n 'newStatus': {\n deep: true,\n handler () {\n this.statusChanged()\n }\n }\n },\n methods: {\n statusChanged () {\n this.autoPreview()\n this.updateIdempotencyKey()\n },\n clearStatus () {\n const newStatus = this.newStatus\n this.newStatus = {\n status: '',\n spoilerText: '',\n files: [],\n visibility: newStatus.visibility,\n contentType: newStatus.contentType,\n poll: {},\n mediaDescriptions: {}\n }\n this.pollFormVisible = false\n this.$refs.mediaUpload && this.$refs.mediaUpload.clearFile()\n this.clearPollForm()\n if (this.preserveFocus) {\n this.$nextTick(() => {\n this.$refs.textarea.focus()\n })\n }\n let el = this.$el.querySelector('textarea')\n el.style.height = 'auto'\n el.style.height = undefined\n this.error = null\n if (this.preview) this.previewStatus()\n },\n async postStatus (event, newStatus, opts = {}) {\n if (this.posting) { return }\n if (this.disableSubmit) { return }\n if (this.emojiInputShown) { return }\n if (this.submitOnEnter) {\n event.stopPropagation()\n event.preventDefault()\n }\n\n if (this.emptyStatus) {\n this.error = this.$t('post_status.empty_status_error')\n return\n }\n\n const poll = this.pollFormVisible ? this.newStatus.poll : {}\n if (this.pollContentError) {\n this.error = this.pollContentError\n return\n }\n\n this.posting = true\n\n try {\n await this.setAllMediaDescriptions()\n } catch (e) {\n this.error = this.$t('post_status.media_description_error')\n this.posting = false\n return\n }\n\n const postingOptions = {\n status: newStatus.status,\n spoilerText: newStatus.spoilerText || null,\n visibility: newStatus.visibility,\n sensitive: newStatus.nsfw,\n media: newStatus.files,\n store: this.$store,\n inReplyToStatusId: this.replyTo,\n contentType: newStatus.contentType,\n poll,\n idempotencyKey: this.idempotencyKey\n }\n\n const postHandler = this.postHandler ? this.postHandler : statusPoster.postStatus\n\n postHandler(postingOptions).then((data) => {\n if (!data.error) {\n this.clearStatus()\n this.$emit('posted', data)\n } else {\n this.error = data.error\n }\n this.posting = false\n })\n },\n previewStatus () {\n if (this.emptyStatus && this.newStatus.spoilerText.trim() === '') {\n this.preview = { error: this.$t('post_status.preview_empty') }\n this.previewLoading = false\n return\n }\n const newStatus = this.newStatus\n this.previewLoading = true\n statusPoster.postStatus({\n status: newStatus.status,\n spoilerText: newStatus.spoilerText || null,\n visibility: newStatus.visibility,\n sensitive: newStatus.nsfw,\n media: [],\n store: this.$store,\n inReplyToStatusId: this.replyTo,\n contentType: newStatus.contentType,\n poll: {},\n preview: true\n }).then((data) => {\n // Don't apply preview if not loading, because it means\n // user has closed the preview manually.\n if (!this.previewLoading) return\n if (!data.error) {\n this.preview = data\n } else {\n this.preview = { error: data.error }\n }\n }).catch((error) => {\n this.preview = { error }\n }).finally(() => {\n this.previewLoading = false\n })\n },\n debouncePreviewStatus: debounce(function () { this.previewStatus() }, 500),\n autoPreview () {\n if (!this.preview) return\n this.previewLoading = true\n this.debouncePreviewStatus()\n },\n closePreview () {\n this.preview = null\n this.previewLoading = false\n },\n togglePreview () {\n if (this.showPreview) {\n this.closePreview()\n } else {\n this.previewStatus()\n }\n },\n addMediaFile (fileInfo) {\n this.newStatus.files.push(fileInfo)\n this.$emit('resize', { delayed: true })\n },\n removeMediaFile (fileInfo) {\n let index = this.newStatus.files.indexOf(fileInfo)\n this.newStatus.files.splice(index, 1)\n this.$emit('resize')\n },\n uploadFailed (errString, templateArgs) {\n templateArgs = templateArgs || {}\n this.error = this.$t('upload.error.base') + ' ' + this.$t('upload.error.' + errString, templateArgs)\n },\n startedUploadingFiles () {\n this.uploadingFiles = true\n },\n finishedUploadingFiles () {\n this.$emit('resize')\n this.uploadingFiles = false\n },\n type (fileInfo) {\n return fileTypeService.fileType(fileInfo.mimetype)\n },\n paste (e) {\n this.autoPreview()\n this.resize(e)\n if (e.clipboardData.files.length > 0) {\n // prevent pasting of file as text\n e.preventDefault()\n // Strangely, files property gets emptied after event propagation\n // Trying to wrap it in array doesn't work. Plus I doubt it's possible\n // to hold more than one file in clipboard.\n this.dropFiles = [e.clipboardData.files[0]]\n }\n },\n fileDrop (e) {\n if (e.dataTransfer && e.dataTransfer.types.includes('Files')) {\n e.preventDefault() // allow dropping text like before\n this.dropFiles = e.dataTransfer.files\n clearTimeout(this.dropStopTimeout)\n this.showDropIcon = 'hide'\n }\n },\n fileDragStop (e) {\n // The false-setting is done with delay because just using leave-events\n // directly caused unwanted flickering, this is not perfect either but\n // much less noticable.\n clearTimeout(this.dropStopTimeout)\n this.showDropIcon = 'fade'\n this.dropStopTimeout = setTimeout(() => (this.showDropIcon = 'hide'), 500)\n },\n fileDrag (e) {\n e.dataTransfer.dropEffect = this.uploadFileLimitReached ? 'none' : 'copy'\n if (e.dataTransfer && e.dataTransfer.types.includes('Files')) {\n clearTimeout(this.dropStopTimeout)\n this.showDropIcon = 'show'\n }\n },\n onEmojiInputInput (e) {\n this.$nextTick(() => {\n this.resize(this.$refs['textarea'])\n })\n },\n resize (e) {\n const target = e.target || e\n if (!(target instanceof window.Element)) { return }\n\n // Reset to default height for empty form, nothing else to do here.\n if (target.value === '') {\n target.style.height = null\n this.$emit('resize')\n this.$refs['emoji-input'].resize()\n return\n }\n\n const formRef = this.$refs['form']\n const bottomRef = this.$refs['bottom']\n /* Scroller is either `window` (replies in TL), sidebar (main post form,\n * replies in notifs) or mobile post form. Note that getting and setting\n * scroll is different for `Window` and `Element`s\n */\n const bottomBottomPaddingStr = window.getComputedStyle(bottomRef)['padding-bottom']\n const bottomBottomPadding = pxStringToNumber(bottomBottomPaddingStr)\n\n const scrollerRef = this.$el.closest('.sidebar-scroller') ||\n this.$el.closest('.post-form-modal-view') ||\n window\n\n // Getting info about padding we have to account for, removing 'px' part\n const topPaddingStr = window.getComputedStyle(target)['padding-top']\n const bottomPaddingStr = window.getComputedStyle(target)['padding-bottom']\n const topPadding = pxStringToNumber(topPaddingStr)\n const bottomPadding = pxStringToNumber(bottomPaddingStr)\n const vertPadding = topPadding + bottomPadding\n\n const oldHeight = pxStringToNumber(target.style.height)\n\n /* Explanation:\n *\n * https://developer.mozilla.org/en-US/docs/Web/API/Element/scrollHeight\n * scrollHeight returns element's scrollable content height, i.e. visible\n * element + overscrolled parts of it. We use it to determine when text\n * inside the textarea exceeded its height, so we can set height to prevent\n * overscroll, i.e. make textarea grow with the text. HOWEVER, since we\n * explicitly set new height, scrollHeight won't go below that, so we can't\n * SHRINK the textarea when there's extra space. To workaround that we set\n * height to 'auto' which makes textarea tiny again, so that scrollHeight\n * will match text height again. HOWEVER, shrinking textarea can screw with\n * the scroll since there might be not enough padding around form-bottom to even\n * warrant a scroll, so it will jump to 0 and refuse to move anywhere,\n * so we check current scroll position before shrinking and then restore it\n * with needed delta.\n */\n\n // this part has to be BEFORE the content size update\n const currentScroll = scrollerRef === window\n ? scrollerRef.scrollY\n : scrollerRef.scrollTop\n const scrollerHeight = scrollerRef === window\n ? scrollerRef.innerHeight\n : scrollerRef.offsetHeight\n const scrollerBottomBorder = currentScroll + scrollerHeight\n\n // BEGIN content size update\n target.style.height = 'auto'\n const heightWithoutPadding = Math.floor(target.scrollHeight - vertPadding)\n let newHeight = this.maxHeight ? Math.min(heightWithoutPadding, this.maxHeight) : heightWithoutPadding\n // This is a bit of a hack to combat target.scrollHeight being different on every other input\n // on some browsers for whatever reason. Don't change the height if difference is 1px or less.\n if (Math.abs(newHeight - oldHeight) <= 1) {\n newHeight = oldHeight\n }\n target.style.height = `${newHeight}px`\n this.$emit('resize', newHeight)\n // END content size update\n\n // We check where the bottom border of form-bottom element is, this uses findOffset\n // to find offset relative to scrollable container (scroller)\n const bottomBottomBorder = bottomRef.offsetHeight + findOffset(bottomRef, scrollerRef).top + bottomBottomPadding\n\n const isBottomObstructed = scrollerBottomBorder < bottomBottomBorder\n const isFormBiggerThanScroller = scrollerHeight < formRef.offsetHeight\n const bottomChangeDelta = bottomBottomBorder - scrollerBottomBorder\n // The intention is basically this;\n // Keep form-bottom always visible so that submit button is in view EXCEPT\n // if form element bigger than scroller and caret isn't at the end, so that\n // if you scroll up and edit middle of text you won't get scrolled back to bottom\n const shouldScrollToBottom = isBottomObstructed &&\n !(isFormBiggerThanScroller &&\n this.$refs.textarea.selectionStart !== this.$refs.textarea.value.length)\n const totalDelta = shouldScrollToBottom ? bottomChangeDelta : 0\n const targetScroll = currentScroll + totalDelta\n\n if (scrollerRef === window) {\n scrollerRef.scroll(0, targetScroll)\n } else {\n scrollerRef.scrollTop = targetScroll\n }\n\n this.$refs['emoji-input'].resize()\n },\n showEmojiPicker () {\n this.$refs['textarea'].focus()\n this.$refs['emoji-input'].triggerShowPicker()\n },\n clearError () {\n this.error = null\n },\n changeVis (visibility) {\n this.newStatus.visibility = visibility\n },\n togglePollForm () {\n this.pollFormVisible = !this.pollFormVisible\n },\n setPoll (poll) {\n this.newStatus.poll = poll\n },\n clearPollForm () {\n if (this.$refs.pollForm) {\n this.$refs.pollForm.clear()\n }\n },\n dismissScopeNotice () {\n this.$store.dispatch('setOption', { name: 'hideScopeNotice', value: true })\n },\n setMediaDescription (id) {\n const description = this.newStatus.mediaDescriptions[id]\n if (!description || description.trim() === '') return\n return statusPoster.setMediaDescription({ store: this.$store, id, description })\n },\n setAllMediaDescriptions () {\n const ids = this.newStatus.files.map(file => file.id)\n return Promise.all(ids.map(id => this.setMediaDescription(id)))\n },\n handleEmojiInputShow (value) {\n this.emojiInputShown = value\n },\n updateIdempotencyKey () {\n this.idempotencyKey = Date.now().toString()\n },\n openProfileTab () {\n this.$store.dispatch('openSettingsModalTab', 'profile')\n }\n }\n}\n\nexport default PostStatusForm\n","function injectStyle (context) {\n require(\"!!vue-style-loader!css-loader?minimize!../../../node_modules/vue-loader/lib/style-compiler/index?{\\\"optionsId\\\":\\\"0\\\",\\\"vue\\\":true,\\\"scoped\\\":false,\\\"sourceMap\\\":false}!sass-loader!../../../node_modules/vue-loader/lib/selector?type=styles&index=0!./post_status_form.vue\")\n}\n/* script */\nexport * from \"!!babel-loader!./post_status_form.js\"\nimport __vue_script__ from \"!!babel-loader!./post_status_form.js\"/* template */\nimport {render as __vue_render__, staticRenderFns as __vue_static_render_fns__} from \"!!../../../node_modules/vue-loader/lib/template-compiler/index?{\\\"id\\\":\\\"data-v-c3d07a7c\\\",\\\"hasScoped\\\":false,\\\"optionsId\\\":\\\"0\\\",\\\"buble\\\":{\\\"transforms\\\":{}}}!../../../node_modules/vue-loader/lib/selector?type=template&index=0!./post_status_form.vue\"\n/* template functional */\nvar __vue_template_functional__ = false\n/* styles */\nvar __vue_styles__ = injectStyle\n/* scopeId */\nvar __vue_scopeId__ = null\n/* moduleIdentifier (server only) */\nvar __vue_module_identifier__ = null\nimport normalizeComponent from \"!../../../node_modules/vue-loader/lib/runtime/component-normalizer\"\nvar Component = normalizeComponent(\n __vue_script__,\n __vue_render__,\n __vue_static_render_fns__,\n __vue_template_functional__,\n __vue_styles__,\n __vue_scopeId__,\n __vue_module_identifier__\n)\n\nexport default Component.exports\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{ref:\"form\",staticClass:\"post-status-form\"},[_c('form',{attrs:{\"autocomplete\":\"off\"},on:{\"submit\":function($event){$event.preventDefault();},\"dragover\":function($event){$event.preventDefault();return _vm.fileDrag($event)}}},[_c('div',{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.showDropIcon !== 'hide'),expression:\"showDropIcon !== 'hide'\"}],staticClass:\"drop-indicator\",class:[_vm.uploadFileLimitReached ? 'icon-block' : 'icon-upload'],style:({ animation: _vm.showDropIcon === 'show' ? 'fade-in 0.25s' : 'fade-out 0.5s' }),on:{\"dragleave\":_vm.fileDragStop,\"drop\":function($event){$event.stopPropagation();return _vm.fileDrop($event)}}}),_vm._v(\" \"),_c('div',{staticClass:\"form-group\"},[(!_vm.$store.state.users.currentUser.locked && _vm.newStatus.visibility == 'private' && !_vm.disableLockWarning)?_c('i18n',{staticClass:\"visibility-notice\",attrs:{\"path\":\"post_status.account_not_locked_warning\",\"tag\":\"p\"}},[_c('a',{attrs:{\"href\":\"#\"},on:{\"click\":_vm.openProfileTab}},[_vm._v(\"\\n \"+_vm._s(_vm.$t('post_status.account_not_locked_warning_link'))+\"\\n \")])]):_vm._e(),_vm._v(\" \"),(!_vm.hideScopeNotice && _vm.newStatus.visibility === 'public')?_c('p',{staticClass:\"visibility-notice notice-dismissible\"},[_c('span',[_vm._v(_vm._s(_vm.$t('post_status.scope_notice.public')))]),_vm._v(\" \"),_c('a',{staticClass:\"button-icon dismiss\",on:{\"click\":function($event){$event.preventDefault();return _vm.dismissScopeNotice()}}},[_c('i',{staticClass:\"icon-cancel\"})])]):(!_vm.hideScopeNotice && _vm.newStatus.visibility === 'unlisted')?_c('p',{staticClass:\"visibility-notice notice-dismissible\"},[_c('span',[_vm._v(_vm._s(_vm.$t('post_status.scope_notice.unlisted')))]),_vm._v(\" \"),_c('a',{staticClass:\"button-icon dismiss\",on:{\"click\":function($event){$event.preventDefault();return _vm.dismissScopeNotice()}}},[_c('i',{staticClass:\"icon-cancel\"})])]):(!_vm.hideScopeNotice && _vm.newStatus.visibility === 'private' && _vm.$store.state.users.currentUser.locked)?_c('p',{staticClass:\"visibility-notice notice-dismissible\"},[_c('span',[_vm._v(_vm._s(_vm.$t('post_status.scope_notice.private')))]),_vm._v(\" \"),_c('a',{staticClass:\"button-icon dismiss\",on:{\"click\":function($event){$event.preventDefault();return _vm.dismissScopeNotice()}}},[_c('i',{staticClass:\"icon-cancel\"})])]):(_vm.newStatus.visibility === 'direct')?_c('p',{staticClass:\"visibility-notice\"},[(_vm.safeDMEnabled)?_c('span',[_vm._v(_vm._s(_vm.$t('post_status.direct_warning_to_first_only')))]):_c('span',[_vm._v(_vm._s(_vm.$t('post_status.direct_warning_to_all')))])]):_vm._e(),_vm._v(\" \"),(!_vm.disablePreview)?_c('div',{staticClass:\"preview-heading faint\"},[_c('a',{staticClass:\"preview-toggle faint\",on:{\"click\":function($event){$event.stopPropagation();$event.preventDefault();return _vm.togglePreview($event)}}},[_vm._v(\"\\n \"+_vm._s(_vm.$t('post_status.preview'))+\"\\n \"),_c('i',{class:_vm.showPreview ? 'icon-left-open' : 'icon-right-open'})]),_vm._v(\" \"),_c('i',{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.previewLoading),expression:\"previewLoading\"}],staticClass:\"icon-spin3 animate-spin\"})]):_vm._e(),_vm._v(\" \"),(_vm.showPreview)?_c('div',{staticClass:\"preview-container\"},[(!_vm.preview)?_c('div',{staticClass:\"preview-status\"},[_vm._v(\"\\n \"+_vm._s(_vm.$t('general.loading'))+\"\\n \")]):(_vm.preview.error)?_c('div',{staticClass:\"preview-status preview-error\"},[_vm._v(\"\\n \"+_vm._s(_vm.preview.error)+\"\\n \")]):_c('StatusContent',{staticClass:\"preview-status\",attrs:{\"status\":_vm.preview}})],1):_vm._e(),_vm._v(\" \"),(!_vm.disableSubject && (_vm.newStatus.spoilerText || _vm.alwaysShowSubject))?_c('EmojiInput',{staticClass:\"form-control\",attrs:{\"enable-emoji-picker\":\"\",\"suggest\":_vm.emojiSuggestor},model:{value:(_vm.newStatus.spoilerText),callback:function ($$v) {_vm.$set(_vm.newStatus, \"spoilerText\", $$v)},expression:\"newStatus.spoilerText\"}},[_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.newStatus.spoilerText),expression:\"newStatus.spoilerText\"}],staticClass:\"form-post-subject\",attrs:{\"type\":\"text\",\"placeholder\":_vm.$t('post_status.content_warning'),\"disabled\":_vm.posting},domProps:{\"value\":(_vm.newStatus.spoilerText)},on:{\"input\":function($event){if($event.target.composing){ return; }_vm.$set(_vm.newStatus, \"spoilerText\", $event.target.value)}}})]):_vm._e(),_vm._v(\" \"),_c('EmojiInput',{ref:\"emoji-input\",staticClass:\"form-control main-input\",attrs:{\"suggest\":_vm.emojiUserSuggestor,\"placement\":_vm.emojiPickerPlacement,\"enable-emoji-picker\":\"\",\"hide-emoji-button\":\"\",\"newline-on-ctrl-enter\":_vm.submitOnEnter,\"enable-sticker-picker\":\"\"},on:{\"input\":_vm.onEmojiInputInput,\"sticker-uploaded\":_vm.addMediaFile,\"sticker-upload-failed\":_vm.uploadFailed,\"shown\":_vm.handleEmojiInputShow},model:{value:(_vm.newStatus.status),callback:function ($$v) {_vm.$set(_vm.newStatus, \"status\", $$v)},expression:\"newStatus.status\"}},[_c('textarea',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.newStatus.status),expression:\"newStatus.status\"}],ref:\"textarea\",staticClass:\"form-post-body\",class:{ 'scrollable-form': !!_vm.maxHeight },attrs:{\"placeholder\":_vm.placeholder || _vm.$t('post_status.default'),\"rows\":\"1\",\"cols\":\"1\",\"disabled\":_vm.posting},domProps:{\"value\":(_vm.newStatus.status)},on:{\"keydown\":[function($event){if(!$event.type.indexOf('key')&&_vm._k($event.keyCode,\"enter\",13,$event.key,\"Enter\")){ return null; }if($event.ctrlKey||$event.shiftKey||$event.altKey||$event.metaKey){ return null; }_vm.submitOnEnter && _vm.postStatus($event, _vm.newStatus)},function($event){if(!$event.type.indexOf('key')&&_vm._k($event.keyCode,\"enter\",13,$event.key,\"Enter\")){ return null; }if(!$event.metaKey){ return null; }return _vm.postStatus($event, _vm.newStatus)},function($event){if(!$event.type.indexOf('key')&&_vm._k($event.keyCode,\"enter\",13,$event.key,\"Enter\")){ return null; }if(!$event.ctrlKey){ return null; }!_vm.submitOnEnter && _vm.postStatus($event, _vm.newStatus)}],\"input\":[function($event){if($event.target.composing){ return; }_vm.$set(_vm.newStatus, \"status\", $event.target.value)},_vm.resize],\"compositionupdate\":_vm.resize,\"paste\":_vm.paste}}),_vm._v(\" \"),(_vm.hasStatusLengthLimit)?_c('p',{staticClass:\"character-counter faint\",class:{ error: _vm.isOverLengthLimit }},[_vm._v(\"\\n \"+_vm._s(_vm.charactersLeft)+\"\\n \")]):_vm._e()]),_vm._v(\" \"),(!_vm.disableScopeSelector)?_c('div',{staticClass:\"visibility-tray\"},[_c('scope-selector',{attrs:{\"show-all\":_vm.showAllScopes,\"user-default\":_vm.userDefaultScope,\"original-scope\":_vm.copyMessageScope,\"initial-scope\":_vm.newStatus.visibility,\"on-scope-change\":_vm.changeVis}}),_vm._v(\" \"),(_vm.postFormats.length > 1)?_c('div',{staticClass:\"text-format\"},[_c('label',{staticClass:\"select\",attrs:{\"for\":\"post-content-type\"}},[_c('select',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.newStatus.contentType),expression:\"newStatus.contentType\"}],staticClass:\"form-control\",attrs:{\"id\":\"post-content-type\"},on:{\"change\":function($event){var $$selectedVal = Array.prototype.filter.call($event.target.options,function(o){return o.selected}).map(function(o){var val = \"_value\" in o ? o._value : o.value;return val}); _vm.$set(_vm.newStatus, \"contentType\", $event.target.multiple ? $$selectedVal : $$selectedVal[0])}}},_vm._l((_vm.postFormats),function(postFormat){return _c('option',{key:postFormat,domProps:{\"value\":postFormat}},[_vm._v(\"\\n \"+_vm._s(_vm.$t((\"post_status.content_type[\\\"\" + postFormat + \"\\\"]\")))+\"\\n \")])}),0),_vm._v(\" \"),_c('i',{staticClass:\"icon-down-open\"})])]):_vm._e(),_vm._v(\" \"),(_vm.postFormats.length === 1 && _vm.postFormats[0] !== 'text/plain')?_c('div',{staticClass:\"text-format\"},[_c('span',{staticClass:\"only-format\"},[_vm._v(\"\\n \"+_vm._s(_vm.$t((\"post_status.content_type[\\\"\" + (_vm.postFormats[0]) + \"\\\"]\")))+\"\\n \")])]):_vm._e()],1):_vm._e()],1),_vm._v(\" \"),(_vm.pollsAvailable)?_c('poll-form',{ref:\"pollForm\",attrs:{\"visible\":_vm.pollFormVisible},on:{\"update-poll\":_vm.setPoll}}):_vm._e(),_vm._v(\" \"),_c('div',{ref:\"bottom\",staticClass:\"form-bottom\"},[_c('div',{staticClass:\"form-bottom-left\"},[_c('media-upload',{ref:\"mediaUpload\",staticClass:\"media-upload-icon\",attrs:{\"drop-files\":_vm.dropFiles,\"disabled\":_vm.uploadFileLimitReached},on:{\"uploading\":_vm.startedUploadingFiles,\"uploaded\":_vm.addMediaFile,\"upload-failed\":_vm.uploadFailed,\"all-uploaded\":_vm.finishedUploadingFiles}}),_vm._v(\" \"),_c('div',{staticClass:\"emoji-icon\"},[_c('i',{staticClass:\"icon-smile btn btn-default\",attrs:{\"title\":_vm.$t('emoji.add_emoji')},on:{\"click\":_vm.showEmojiPicker}})]),_vm._v(\" \"),(_vm.pollsAvailable)?_c('div',{staticClass:\"poll-icon\",class:{ selected: _vm.pollFormVisible }},[_c('i',{staticClass:\"icon-chart-bar btn btn-default\",attrs:{\"title\":_vm.$t('polls.add_poll')},on:{\"click\":_vm.togglePollForm}})]):_vm._e()],1),_vm._v(\" \"),(_vm.posting)?_c('button',{staticClass:\"btn btn-default\",attrs:{\"disabled\":\"\"}},[_vm._v(\"\\n \"+_vm._s(_vm.$t('post_status.posting'))+\"\\n \")]):(_vm.isOverLengthLimit)?_c('button',{staticClass:\"btn btn-default\",attrs:{\"disabled\":\"\"}},[_vm._v(\"\\n \"+_vm._s(_vm.$t('general.submit'))+\"\\n \")]):_c('button',{staticClass:\"btn btn-default\",attrs:{\"disabled\":_vm.uploadingFiles || _vm.disableSubmit},on:{\"touchstart\":function($event){$event.stopPropagation();$event.preventDefault();return _vm.postStatus($event, _vm.newStatus)},\"click\":function($event){$event.stopPropagation();$event.preventDefault();return _vm.postStatus($event, _vm.newStatus)}}},[_vm._v(\"\\n \"+_vm._s(_vm.$t('general.submit'))+\"\\n \")])]),_vm._v(\" \"),(_vm.error)?_c('div',{staticClass:\"alert error\"},[_vm._v(\"\\n Error: \"+_vm._s(_vm.error)+\"\\n \"),_c('i',{staticClass:\"button-icon icon-cancel\",on:{\"click\":_vm.clearError}})]):_vm._e(),_vm._v(\" \"),_c('div',{staticClass:\"attachments\"},_vm._l((_vm.newStatus.files),function(file){return _c('div',{key:file.url,staticClass:\"media-upload-wrapper\"},[_c('i',{staticClass:\"fa button-icon icon-cancel\",on:{\"click\":function($event){return _vm.removeMediaFile(file)}}}),_vm._v(\" \"),_c('attachment',{attrs:{\"attachment\":file,\"set-media\":function () { return _vm.$store.dispatch('setMedia', _vm.newStatus.files); },\"size\":\"small\",\"allow-play\":\"false\"}}),_vm._v(\" \"),_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.newStatus.mediaDescriptions[file.id]),expression:\"newStatus.mediaDescriptions[file.id]\"}],attrs:{\"type\":\"text\",\"placeholder\":_vm.$t('post_status.media_description')},domProps:{\"value\":(_vm.newStatus.mediaDescriptions[file.id])},on:{\"keydown\":function($event){if(!$event.type.indexOf('key')&&_vm._k($event.keyCode,\"enter\",13,$event.key,\"Enter\")){ return null; }$event.preventDefault();},\"input\":function($event){if($event.target.composing){ return; }_vm.$set(_vm.newStatus.mediaDescriptions, file.id, $event.target.value)}}})],1)}),0),_vm._v(\" \"),(_vm.newStatus.files.length > 0 && !_vm.disableSensitivityCheckbox)?_c('div',{staticClass:\"upload_settings\"},[_c('Checkbox',{model:{value:(_vm.newStatus.nsfw),callback:function ($$v) {_vm.$set(_vm.newStatus, \"nsfw\", $$v)},expression:\"newStatus.nsfw\"}},[_vm._v(\"\\n \"+_vm._s(_vm.$t('post_status.attachments_sensitive'))+\"\\n \")])],1):_vm._e()],1)])}\nvar staticRenderFns = []\nexport { render, staticRenderFns }","import StillImage from '../still-image/still-image.vue'\nimport VideoAttachment from '../video_attachment/video_attachment.vue'\nimport nsfwImage from '../../assets/nsfw.png'\nimport fileTypeService from '../../services/file_type/file_type.service.js'\nimport { mapGetters } from 'vuex'\n\nconst Attachment = {\n props: [\n 'attachment',\n 'nsfw',\n 'size',\n 'allowPlay',\n 'setMedia',\n 'naturalSizeLoad'\n ],\n data () {\n return {\n nsfwImage: this.$store.state.instance.nsfwCensorImage || nsfwImage,\n hideNsfwLocal: this.$store.getters.mergedConfig.hideNsfw,\n preloadImage: this.$store.getters.mergedConfig.preloadImage,\n loading: false,\n img: fileTypeService.fileType(this.attachment.mimetype) === 'image' && document.createElement('img'),\n modalOpen: false,\n showHidden: false\n }\n },\n components: {\n StillImage,\n VideoAttachment\n },\n computed: {\n usePlaceholder () {\n return this.size === 'hide' || this.type === 'unknown'\n },\n placeholderName () {\n if (this.attachment.description === '' || !this.attachment.description) {\n return this.type.toUpperCase()\n }\n return this.attachment.description\n },\n placeholderIconClass () {\n if (this.type === 'image') return 'icon-picture'\n if (this.type === 'video') return 'icon-video'\n if (this.type === 'audio') return 'icon-music'\n return 'icon-doc'\n },\n referrerpolicy () {\n return this.$store.state.instance.mediaProxyAvailable ? '' : 'no-referrer'\n },\n type () {\n return fileTypeService.fileType(this.attachment.mimetype)\n },\n hidden () {\n return this.nsfw && this.hideNsfwLocal && !this.showHidden\n },\n isEmpty () {\n return (this.type === 'html' && !this.attachment.oembed) || this.type === 'unknown'\n },\n isSmall () {\n return this.size === 'small'\n },\n fullwidth () {\n if (this.size === 'hide') return false\n return this.type === 'html' || this.type === 'audio' || this.type === 'unknown'\n },\n useModal () {\n const modalTypes = this.size === 'hide' ? ['image', 'video', 'audio']\n : this.mergedConfig.playVideosInModal\n ? ['image', 'video']\n : ['image']\n return modalTypes.includes(this.type)\n },\n ...mapGetters(['mergedConfig'])\n },\n methods: {\n linkClicked ({ target }) {\n if (target.tagName === 'A') {\n window.open(target.href, '_blank')\n }\n },\n openModal (event) {\n if (this.useModal) {\n event.stopPropagation()\n event.preventDefault()\n this.setMedia()\n this.$store.dispatch('setCurrent', this.attachment)\n }\n },\n toggleHidden (event) {\n if (\n (this.mergedConfig.useOneClickNsfw && !this.showHidden) &&\n (this.type !== 'video' || this.mergedConfig.playVideosInModal)\n ) {\n this.openModal(event)\n return\n }\n if (this.img && !this.preloadImage) {\n if (this.img.onload) {\n this.img.onload()\n } else {\n this.loading = true\n this.img.src = this.attachment.url\n this.img.onload = () => {\n this.loading = false\n this.showHidden = !this.showHidden\n }\n }\n } else {\n this.showHidden = !this.showHidden\n }\n },\n onImageLoad (image) {\n const width = image.naturalWidth\n const height = image.naturalHeight\n this.naturalSizeLoad && this.naturalSizeLoad({ width, height })\n }\n }\n}\n\nexport default Attachment\n","function injectStyle (context) {\n require(\"!!vue-style-loader!css-loader?minimize!../../../node_modules/vue-loader/lib/style-compiler/index?{\\\"optionsId\\\":\\\"0\\\",\\\"vue\\\":true,\\\"scoped\\\":false,\\\"sourceMap\\\":false}!sass-loader!../../../node_modules/vue-loader/lib/selector?type=styles&index=0!./attachment.vue\")\n}\n/* script */\nexport * from \"!!babel-loader!./attachment.js\"\nimport __vue_script__ from \"!!babel-loader!./attachment.js\"/* template */\nimport {render as __vue_render__, staticRenderFns as __vue_static_render_fns__} from \"!!../../../node_modules/vue-loader/lib/template-compiler/index?{\\\"id\\\":\\\"data-v-6c00fc80\\\",\\\"hasScoped\\\":false,\\\"optionsId\\\":\\\"0\\\",\\\"buble\\\":{\\\"transforms\\\":{}}}!../../../node_modules/vue-loader/lib/selector?type=template&index=0!./attachment.vue\"\n/* template functional */\nvar __vue_template_functional__ = false\n/* styles */\nvar __vue_styles__ = injectStyle\n/* scopeId */\nvar __vue_scopeId__ = null\n/* moduleIdentifier (server only) */\nvar __vue_module_identifier__ = null\nimport normalizeComponent from \"!../../../node_modules/vue-loader/lib/runtime/component-normalizer\"\nvar Component = normalizeComponent(\n __vue_script__,\n __vue_render__,\n __vue_static_render_fns__,\n __vue_template_functional__,\n __vue_styles__,\n __vue_scopeId__,\n __vue_module_identifier__\n)\n\nexport default Component.exports\n","var render = function () {\nvar _obj;\nvar _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return (_vm.usePlaceholder)?_c('div',{class:{ 'fullwidth': _vm.fullwidth },on:{\"click\":_vm.openModal}},[(_vm.type !== 'html')?_c('a',{staticClass:\"placeholder\",attrs:{\"target\":\"_blank\",\"href\":_vm.attachment.url,\"alt\":_vm.attachment.description,\"title\":_vm.attachment.description}},[_c('span',{class:_vm.placeholderIconClass}),_vm._v(\" \"),_c('b',[_vm._v(_vm._s(_vm.nsfw ? \"NSFW / \" : \"\"))]),_vm._v(_vm._s(_vm.placeholderName)+\"\\n \")]):_vm._e()]):_c('div',{directives:[{name:\"show\",rawName:\"v-show\",value:(!_vm.isEmpty),expression:\"!isEmpty\"}],staticClass:\"attachment\",class:( _obj = {}, _obj[_vm.type] = true, _obj.loading = _vm.loading, _obj['fullwidth'] = _vm.fullwidth, _obj['nsfw-placeholder'] = _vm.hidden, _obj )},[(_vm.hidden)?_c('a',{staticClass:\"image-attachment\",attrs:{\"href\":_vm.attachment.url,\"alt\":_vm.attachment.description,\"title\":_vm.attachment.description},on:{\"click\":function($event){$event.preventDefault();return _vm.toggleHidden($event)}}},[_c('img',{key:_vm.nsfwImage,staticClass:\"nsfw\",class:{'small': _vm.isSmall},attrs:{\"src\":_vm.nsfwImage}}),_vm._v(\" \"),(_vm.type === 'video')?_c('i',{staticClass:\"play-icon icon-play-circled\"}):_vm._e()]):_vm._e(),_vm._v(\" \"),(_vm.nsfw && _vm.hideNsfwLocal && !_vm.hidden)?_c('div',{staticClass:\"hider\"},[_c('a',{attrs:{\"href\":\"#\"},on:{\"click\":function($event){$event.preventDefault();return _vm.toggleHidden($event)}}},[_vm._v(\"Hide\")])]):_vm._e(),_vm._v(\" \"),(_vm.type === 'image' && (!_vm.hidden || _vm.preloadImage))?_c('a',{staticClass:\"image-attachment\",class:{'hidden': _vm.hidden && _vm.preloadImage },attrs:{\"href\":_vm.attachment.url,\"target\":\"_blank\"},on:{\"click\":_vm.openModal}},[_c('StillImage',{staticClass:\"image\",attrs:{\"referrerpolicy\":_vm.referrerpolicy,\"mimetype\":_vm.attachment.mimetype,\"src\":_vm.attachment.large_thumb_url || _vm.attachment.url,\"image-load-handler\":_vm.onImageLoad,\"alt\":_vm.attachment.description}})],1):_vm._e(),_vm._v(\" \"),(_vm.type === 'video' && !_vm.hidden)?_c('a',{staticClass:\"video-container\",class:{'small': _vm.isSmall},attrs:{\"href\":_vm.allowPlay ? undefined : _vm.attachment.url},on:{\"click\":_vm.openModal}},[_c('VideoAttachment',{staticClass:\"video\",attrs:{\"attachment\":_vm.attachment,\"controls\":_vm.allowPlay}}),_vm._v(\" \"),(!_vm.allowPlay)?_c('i',{staticClass:\"play-icon icon-play-circled\"}):_vm._e()],1):_vm._e(),_vm._v(\" \"),(_vm.type === 'audio')?_c('audio',{attrs:{\"src\":_vm.attachment.url,\"alt\":_vm.attachment.description,\"title\":_vm.attachment.description,\"controls\":\"\"}}):_vm._e(),_vm._v(\" \"),(_vm.type === 'html' && _vm.attachment.oembed)?_c('div',{staticClass:\"oembed\",on:{\"click\":function($event){$event.preventDefault();return _vm.linkClicked($event)}}},[(_vm.attachment.thumb_url)?_c('div',{staticClass:\"image\"},[_c('img',{attrs:{\"src\":_vm.attachment.thumb_url}})]):_vm._e(),_vm._v(\" \"),_c('div',{staticClass:\"text\"},[_c('h1',[_c('a',{attrs:{\"href\":_vm.attachment.url}},[_vm._v(_vm._s(_vm.attachment.oembed.title))])]),_vm._v(\" \"),_c('div',{domProps:{\"innerHTML\":_vm._s(_vm.attachment.oembed.oembedHTML)}})])]):_vm._e()])}\nvar staticRenderFns = []\nexport { render, staticRenderFns }","\n\n\n","/* script */\nexport * from \"!!babel-loader!../../../node_modules/vue-loader/lib/selector?type=script&index=0!./timeago.vue\"\nimport __vue_script__ from \"!!babel-loader!../../../node_modules/vue-loader/lib/selector?type=script&index=0!./timeago.vue\"\n/* template */\nimport {render as __vue_render__, staticRenderFns as __vue_static_render_fns__} from \"!!../../../node_modules/vue-loader/lib/template-compiler/index?{\\\"id\\\":\\\"data-v-ac499830\\\",\\\"hasScoped\\\":false,\\\"optionsId\\\":\\\"0\\\",\\\"buble\\\":{\\\"transforms\\\":{}}}!../../../node_modules/vue-loader/lib/selector?type=template&index=0!./timeago.vue\"\n/* template functional */\nvar __vue_template_functional__ = false\n/* styles */\nvar __vue_styles__ = null\n/* scopeId */\nvar __vue_scopeId__ = null\n/* moduleIdentifier (server only) */\nvar __vue_module_identifier__ = null\nimport normalizeComponent from \"!../../../node_modules/vue-loader/lib/runtime/component-normalizer\"\nvar Component = normalizeComponent(\n __vue_script__,\n __vue_render__,\n __vue_static_render_fns__,\n __vue_template_functional__,\n __vue_styles__,\n __vue_scopeId__,\n __vue_module_identifier__\n)\n\nexport default Component.exports\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('time',{attrs:{\"datetime\":_vm.time,\"title\":_vm.localeDateString}},[_vm._v(\"\\n \"+_vm._s(_vm.$t(_vm.relativeTime.key, [_vm.relativeTime.num]))+\"\\n\")])}\nvar staticRenderFns = []\nexport { render, staticRenderFns }","import { hex2rgb } from '../color_convert/color_convert.js'\nconst highlightStyle = (prefs) => {\n if (prefs === undefined) return\n const { color, type } = prefs\n if (typeof color !== 'string') return\n const rgb = hex2rgb(color)\n if (rgb == null) return\n const solidColor = `rgb(${Math.floor(rgb.r)}, ${Math.floor(rgb.g)}, ${Math.floor(rgb.b)})`\n const tintColor = `rgba(${Math.floor(rgb.r)}, ${Math.floor(rgb.g)}, ${Math.floor(rgb.b)}, .1)`\n const tintColor2 = `rgba(${Math.floor(rgb.r)}, ${Math.floor(rgb.g)}, ${Math.floor(rgb.b)}, .2)`\n if (type === 'striped') {\n return {\n backgroundImage: [\n 'repeating-linear-gradient(135deg,',\n `${tintColor} ,`,\n `${tintColor} 20px,`,\n `${tintColor2} 20px,`,\n `${tintColor2} 40px`\n ].join(' '),\n backgroundPosition: '0 0'\n }\n } else if (type === 'solid') {\n return {\n backgroundColor: tintColor2\n }\n } else if (type === 'side') {\n return {\n backgroundImage: [\n 'linear-gradient(to right,',\n `${solidColor} ,`,\n `${solidColor} 2px,`,\n `transparent 6px`\n ].join(' '),\n backgroundPosition: '0 0'\n }\n }\n}\n\nconst highlightClass = (user) => {\n return 'USER____' + user.screen_name\n .replace(/\\./g, '_')\n .replace(/@/g, '_AT_')\n}\n\nexport {\n highlightClass,\n highlightStyle\n}\n","\n\n\n\n\n","function injectStyle (context) {\n require(\"!!vue-style-loader!css-loader?minimize!../../../node_modules/vue-loader/lib/style-compiler/index?{\\\"optionsId\\\":\\\"0\\\",\\\"vue\\\":true,\\\"scoped\\\":false,\\\"sourceMap\\\":false}!sass-loader!../../../node_modules/vue-loader/lib/selector?type=styles&index=0!./list.vue\")\n}\n/* script */\nexport * from \"!!babel-loader!../../../node_modules/vue-loader/lib/selector?type=script&index=0!./list.vue\"\nimport __vue_script__ from \"!!babel-loader!../../../node_modules/vue-loader/lib/selector?type=script&index=0!./list.vue\"\n/* template */\nimport {render as __vue_render__, staticRenderFns as __vue_static_render_fns__} from \"!!../../../node_modules/vue-loader/lib/template-compiler/index?{\\\"id\\\":\\\"data-v-c1790f52\\\",\\\"hasScoped\\\":false,\\\"optionsId\\\":\\\"0\\\",\\\"buble\\\":{\\\"transforms\\\":{}}}!../../../node_modules/vue-loader/lib/selector?type=template&index=0!./list.vue\"\n/* template functional */\nvar __vue_template_functional__ = false\n/* styles */\nvar __vue_styles__ = injectStyle\n/* scopeId */\nvar __vue_scopeId__ = null\n/* moduleIdentifier (server only) */\nvar __vue_module_identifier__ = null\nimport normalizeComponent from \"!../../../node_modules/vue-loader/lib/runtime/component-normalizer\"\nvar Component = normalizeComponent(\n __vue_script__,\n __vue_render__,\n __vue_static_render_fns__,\n __vue_template_functional__,\n __vue_styles__,\n __vue_scopeId__,\n __vue_module_identifier__\n)\n\nexport default Component.exports\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"list\"},[_vm._l((_vm.items),function(item){return _c('div',{key:_vm.getKey(item),staticClass:\"list-item\"},[_vm._t(\"item\",null,{\"item\":item})],2)}),_vm._v(\" \"),(_vm.items.length === 0 && !!_vm.$slots.empty)?_c('div',{staticClass:\"list-empty-content faint\"},[_vm._t(\"empty\")],2):_vm._e()],2)}\nvar staticRenderFns = []\nexport { render, staticRenderFns }","\n\n\n\n\n","function injectStyle (context) {\n require(\"!!vue-style-loader!css-loader?minimize!../../../node_modules/vue-loader/lib/style-compiler/index?{\\\"optionsId\\\":\\\"0\\\",\\\"vue\\\":true,\\\"scoped\\\":false,\\\"sourceMap\\\":false}!sass-loader!../../../node_modules/vue-loader/lib/selector?type=styles&index=0!./checkbox.vue\")\n}\n/* script */\nexport * from \"!!babel-loader!../../../node_modules/vue-loader/lib/selector?type=script&index=0!./checkbox.vue\"\nimport __vue_script__ from \"!!babel-loader!../../../node_modules/vue-loader/lib/selector?type=script&index=0!./checkbox.vue\"\n/* template */\nimport {render as __vue_render__, staticRenderFns as __vue_static_render_fns__} from \"!!../../../node_modules/vue-loader/lib/template-compiler/index?{\\\"id\\\":\\\"data-v-0631206a\\\",\\\"hasScoped\\\":false,\\\"optionsId\\\":\\\"0\\\",\\\"buble\\\":{\\\"transforms\\\":{}}}!../../../node_modules/vue-loader/lib/selector?type=template&index=0!./checkbox.vue\"\n/* template functional */\nvar __vue_template_functional__ = false\n/* styles */\nvar __vue_styles__ = injectStyle\n/* scopeId */\nvar __vue_scopeId__ = null\n/* moduleIdentifier (server only) */\nvar __vue_module_identifier__ = null\nimport normalizeComponent from \"!../../../node_modules/vue-loader/lib/runtime/component-normalizer\"\nvar Component = normalizeComponent(\n __vue_script__,\n __vue_render__,\n __vue_static_render_fns__,\n __vue_template_functional__,\n __vue_styles__,\n __vue_scopeId__,\n __vue_module_identifier__\n)\n\nexport default Component.exports\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('label',{staticClass:\"checkbox\",class:{ disabled: _vm.disabled, indeterminate: _vm.indeterminate }},[_c('input',{attrs:{\"type\":\"checkbox\",\"disabled\":_vm.disabled},domProps:{\"checked\":_vm.checked,\"indeterminate\":_vm.indeterminate},on:{\"change\":function($event){return _vm.$emit('change', $event.target.checked)}}}),_vm._v(\" \"),_c('i',{staticClass:\"checkbox-indicator\"}),_vm._v(\" \"),(!!_vm.$slots.default)?_c('span',{staticClass:\"label\"},[_vm._t(\"default\")],2):_vm._e()])}\nvar staticRenderFns = []\nexport { render, staticRenderFns }","import { map } from 'lodash'\nimport apiService from '../api/api.service.js'\n\nconst postStatus = ({\n store,\n status,\n spoilerText,\n visibility,\n sensitive,\n poll,\n media = [],\n inReplyToStatusId = undefined,\n contentType = 'text/plain',\n preview = false,\n idempotencyKey = ''\n}) => {\n const mediaIds = map(media, 'id')\n\n return apiService.postStatus({\n credentials: store.state.users.currentUser.credentials,\n status,\n spoilerText,\n visibility,\n sensitive,\n mediaIds,\n inReplyToStatusId,\n contentType,\n poll,\n preview,\n idempotencyKey\n })\n .then((data) => {\n if (!data.error && !preview) {\n store.dispatch('addNewStatuses', {\n statuses: [data],\n timeline: 'friends',\n showImmediately: true,\n noIdUpdate: true // To prevent missing notices on next pull.\n })\n }\n return data\n })\n .catch((err) => {\n return {\n error: err.message\n }\n })\n}\n\nconst uploadMedia = ({ store, formData }) => {\n const credentials = store.state.users.currentUser.credentials\n return apiService.uploadMedia({ credentials, formData })\n}\n\nconst setMediaDescription = ({ store, id, description }) => {\n const credentials = store.state.users.currentUser.credentials\n return apiService.setMediaDescription({ credentials, id, description })\n}\n\nconst statusPosterService = {\n postStatus,\n uploadMedia,\n setMediaDescription\n}\n\nexport default statusPosterService\n","const StillImage = {\n props: [\n 'src',\n 'referrerpolicy',\n 'mimetype',\n 'imageLoadError',\n 'imageLoadHandler',\n 'alt'\n ],\n data () {\n return {\n stopGifs: this.$store.getters.mergedConfig.stopGifs\n }\n },\n computed: {\n animated () {\n return this.stopGifs && (this.mimetype === 'image/gif' || this.src.endsWith('.gif'))\n }\n },\n methods: {\n onLoad () {\n this.imageLoadHandler && this.imageLoadHandler(this.$refs.src)\n const canvas = this.$refs.canvas\n if (!canvas) return\n const width = this.$refs.src.naturalWidth\n const height = this.$refs.src.naturalHeight\n canvas.width = width\n canvas.height = height\n canvas.getContext('2d').drawImage(this.$refs.src, 0, 0, width, height)\n },\n onError () {\n this.imageLoadError && this.imageLoadError()\n }\n }\n}\n\nexport default StillImage\n","function injectStyle (context) {\n require(\"!!vue-style-loader!css-loader?minimize!../../../node_modules/vue-loader/lib/style-compiler/index?{\\\"optionsId\\\":\\\"0\\\",\\\"vue\\\":true,\\\"scoped\\\":false,\\\"sourceMap\\\":false}!sass-loader!../../../node_modules/vue-loader/lib/selector?type=styles&index=0!./still-image.vue\")\n}\n/* script */\nexport * from \"!!babel-loader!./still-image.js\"\nimport __vue_script__ from \"!!babel-loader!./still-image.js\"/* template */\nimport {render as __vue_render__, staticRenderFns as __vue_static_render_fns__} from \"!!../../../node_modules/vue-loader/lib/template-compiler/index?{\\\"id\\\":\\\"data-v-3a23c4ff\\\",\\\"hasScoped\\\":false,\\\"optionsId\\\":\\\"0\\\",\\\"buble\\\":{\\\"transforms\\\":{}}}!../../../node_modules/vue-loader/lib/selector?type=template&index=0!./still-image.vue\"\n/* template functional */\nvar __vue_template_functional__ = false\n/* styles */\nvar __vue_styles__ = injectStyle\n/* scopeId */\nvar __vue_scopeId__ = null\n/* moduleIdentifier (server only) */\nvar __vue_module_identifier__ = null\nimport normalizeComponent from \"!../../../node_modules/vue-loader/lib/runtime/component-normalizer\"\nvar Component = normalizeComponent(\n __vue_script__,\n __vue_render__,\n __vue_static_render_fns__,\n __vue_template_functional__,\n __vue_styles__,\n __vue_scopeId__,\n __vue_module_identifier__\n)\n\nexport default Component.exports\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"still-image\",class:{ animated: _vm.animated }},[(_vm.animated)?_c('canvas',{ref:\"canvas\"}):_vm._e(),_vm._v(\" \"),_c('img',{key:_vm.src,ref:\"src\",attrs:{\"alt\":_vm.alt,\"title\":_vm.alt,\"src\":_vm.src,\"referrerpolicy\":_vm.referrerpolicy},on:{\"load\":_vm.onLoad,\"error\":_vm.onError}})])}\nvar staticRenderFns = []\nexport { render, staticRenderFns }","// When contributing, please sort JSON before committing so it would be easier to see what's missing and what's being added compared to English and other languages. It's not obligatory, but just an advice.\n// To sort json use jq https://stedolan.github.io/jq and invoke it like `jq -S . xx.json > xx.sorted.json`, AFAIK, there's no inplace edit option like in sed\n// Also, when adding a new language to \"messages\" variable, please do it alphabetically by language code so that users can search or check their custom language easily.\n\n// For anyone contributing to old huge messages.js and in need to quickly convert it to JSON\n// sed command for converting currently formatted JS to JSON:\n// sed -i -e \"s/'//gm\" -e 's/\"/\\\\\"/gm' -re 's/^( +)(.+?): ((.+?))?(,?)(\\{?)$/\\1\"\\2\": \"\\4\"/gm' -e 's/\\\"\\{\\\"/{/g' -e 's/,\"$/\",/g' file.json\n// There's only problem that apostrophe character ' gets replaced by \\\\ so you have to fix it manually, sorry.\n\nconst loaders = {\n ar: () => import('./ar.json'),\n ca: () => import('./ca.json'),\n cs: () => import('./cs.json'),\n de: () => import('./de.json'),\n eo: () => import('./eo.json'),\n es: () => import('./es.json'),\n et: () => import('./et.json'),\n eu: () => import('./eu.json'),\n fi: () => import('./fi.json'),\n fr: () => import('./fr.json'),\n ga: () => import('./ga.json'),\n he: () => import('./he.json'),\n hu: () => import('./hu.json'),\n it: () => import('./it.json'),\n ja: () => import('./ja_pedantic.json'),\n ja_easy: () => import('./ja_easy.json'),\n ko: () => import('./ko.json'),\n nb: () => import('./nb.json'),\n nl: () => import('./nl.json'),\n oc: () => import('./oc.json'),\n pl: () => import('./pl.json'),\n pt: () => import('./pt.json'),\n ro: () => import('./ro.json'),\n ru: () => import('./ru.json'),\n te: () => import('./te.json'),\n zh: () => import('./zh.json')\n}\n\nconst messages = {\n languages: ['en', ...Object.keys(loaders)],\n default: {\n en: require('./en.json')\n },\n setLanguage: async (i18n, language) => {\n if (loaders[language]) {\n let messages = await loaders[language]()\n i18n.setLocaleMessage(language, messages)\n }\n i18n.locale = language\n }\n}\n\nexport default messages\n","\n\n\n","/* script */\nexport * from \"!!babel-loader!../../../node_modules/vue-loader/lib/selector?type=script&index=0!./progress_button.vue\"\nimport __vue_script__ from \"!!babel-loader!../../../node_modules/vue-loader/lib/selector?type=script&index=0!./progress_button.vue\"\n/* template */\nimport {render as __vue_render__, staticRenderFns as __vue_static_render_fns__} from \"!!../../../node_modules/vue-loader/lib/template-compiler/index?{\\\"id\\\":\\\"data-v-9f751ae6\\\",\\\"hasScoped\\\":false,\\\"optionsId\\\":\\\"0\\\",\\\"buble\\\":{\\\"transforms\\\":{}}}!../../../node_modules/vue-loader/lib/selector?type=template&index=0!./progress_button.vue\"\n/* template functional */\nvar __vue_template_functional__ = false\n/* styles */\nvar __vue_styles__ = null\n/* scopeId */\nvar __vue_scopeId__ = null\n/* moduleIdentifier (server only) */\nvar __vue_module_identifier__ = null\nimport normalizeComponent from \"!../../../node_modules/vue-loader/lib/runtime/component-normalizer\"\nvar Component = normalizeComponent(\n __vue_script__,\n __vue_render__,\n __vue_static_render_fns__,\n __vue_template_functional__,\n __vue_styles__,\n __vue_scopeId__,\n __vue_module_identifier__\n)\n\nexport default Component.exports\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('button',{attrs:{\"disabled\":_vm.progress || _vm.disabled},on:{\"click\":_vm.onClick}},[(_vm.progress && _vm.$slots.progress)?[_vm._t(\"progress\")]:[_vm._t(\"default\")]],2)}\nvar staticRenderFns = []\nexport { render, staticRenderFns }","import { set, delete as del } from 'vue'\nimport { setPreset, applyTheme } from '../services/style_setter/style_setter.js'\nimport messages from '../i18n/messages'\n\nconst browserLocale = (window.navigator.language || 'en').split('-')[0]\n\n/* TODO this is a bit messy.\n * We need to declare settings with their types and also deal with\n * instance-default settings in some way, hopefully try to avoid copy-pasta\n * in general.\n */\nexport const multiChoiceProperties = [\n 'postContentType',\n 'subjectLineBehavior'\n]\n\nexport const defaultState = {\n colors: {},\n theme: undefined,\n customTheme: undefined,\n customThemeSource: undefined,\n hideISP: false,\n // bad name: actually hides posts of muted USERS\n hideMutedPosts: undefined, // instance default\n collapseMessageWithSubject: undefined, // instance default\n padEmoji: true,\n hideAttachments: false,\n hideAttachmentsInConv: false,\n maxThumbnails: 16,\n hideNsfw: true,\n preloadImage: true,\n loopVideo: true,\n loopVideoSilentOnly: true,\n streaming: false,\n emojiReactionsOnTimeline: true,\n autohideFloatingPostButton: false,\n pauseOnUnfocused: true,\n stopGifs: false,\n replyVisibility: 'all',\n notificationVisibility: {\n follows: true,\n mentions: true,\n likes: true,\n repeats: true,\n moves: true,\n emojiReactions: false,\n followRequest: true,\n chatMention: true\n },\n webPushNotifications: false,\n muteWords: [],\n highlight: {},\n interfaceLanguage: browserLocale,\n hideScopeNotice: false,\n useStreamingApi: false,\n scopeCopy: undefined, // instance default\n subjectLineBehavior: undefined, // instance default\n alwaysShowSubjectInput: undefined, // instance default\n postContentType: undefined, // instance default\n minimalScopesMode: undefined, // instance default\n // This hides statuses filtered via a word filter\n hideFilteredStatuses: undefined, // instance default\n playVideosInModal: false,\n useOneClickNsfw: false,\n useContainFit: false,\n greentext: undefined, // instance default\n hidePostStats: undefined, // instance default\n hideUserStats: undefined // instance default\n}\n\n// caching the instance default properties\nexport const instanceDefaultProperties = Object.entries(defaultState)\n .filter(([key, value]) => value === undefined)\n .map(([key, value]) => key)\n\nconst config = {\n state: defaultState,\n getters: {\n mergedConfig (state, getters, rootState, rootGetters) {\n const { instance } = rootState\n return {\n ...state,\n ...instanceDefaultProperties\n .map(key => [key, state[key] === undefined\n ? instance[key]\n : state[key]\n ])\n .reduce((acc, [key, value]) => ({ ...acc, [key]: value }), {})\n }\n }\n },\n mutations: {\n setOption (state, { name, value }) {\n set(state, name, value)\n },\n setHighlight (state, { user, color, type }) {\n const data = this.state.config.highlight[user]\n if (color || type) {\n set(state.highlight, user, { color: color || data.color, type: type || data.type })\n } else {\n del(state.highlight, user)\n }\n }\n },\n actions: {\n setHighlight ({ commit, dispatch }, { user, color, type }) {\n commit('setHighlight', { user, color, type })\n },\n setOption ({ commit, dispatch }, { name, value }) {\n commit('setOption', { name, value })\n switch (name) {\n case 'theme':\n setPreset(value)\n break\n case 'customTheme':\n case 'customThemeSource':\n applyTheme(value)\n break\n case 'interfaceLanguage':\n messages.setLanguage(this.getters.i18n, value)\n break\n }\n }\n }\n}\n\nexport default config\n","import { filter } from 'lodash'\n\nexport const muteWordHits = (status, muteWords) => {\n const statusText = status.text.toLowerCase()\n const statusSummary = status.summary.toLowerCase()\n const hits = filter(muteWords, (muteWord) => {\n return statusText.includes(muteWord.toLowerCase()) || statusSummary.includes(muteWord.toLowerCase())\n })\n\n return hits\n}\n","export const showDesktopNotification = (rootState, desktopNotificationOpts) => {\n if (!('Notification' in window && window.Notification.permission === 'granted')) return\n if (rootState.statuses.notifications.desktopNotificationSilence) { return }\n\n const desktopNotification = new window.Notification(desktopNotificationOpts.title, desktopNotificationOpts)\n // Chrome is known for not closing notifications automatically\n // according to MDN, anyway.\n setTimeout(desktopNotification.close.bind(desktopNotification), 5000)\n}\n","export const findOffset = (child, parent, { top = 0, left = 0 } = {}, ignorePadding = true) => {\n const result = {\n top: top + child.offsetTop,\n left: left + child.offsetLeft\n }\n if (!ignorePadding && child !== window) {\n const { topPadding, leftPadding } = findPadding(child)\n result.top += ignorePadding ? 0 : topPadding\n result.left += ignorePadding ? 0 : leftPadding\n }\n\n if (child.offsetParent && (parent === window || parent.contains(child.offsetParent) || parent === child.offsetParent)) {\n return findOffset(child.offsetParent, parent, result, false)\n } else {\n if (parent !== window) {\n const { topPadding, leftPadding } = findPadding(parent)\n result.top += topPadding\n result.left += leftPadding\n }\n return result\n }\n}\n\nconst findPadding = (el) => {\n const topPaddingStr = window.getComputedStyle(el)['padding-top']\n const topPadding = Number(topPaddingStr.substring(0, topPaddingStr.length - 2))\n const leftPaddingStr = window.getComputedStyle(el)['padding-left']\n const leftPadding = Number(leftPaddingStr.substring(0, leftPaddingStr.length - 2))\n\n return { topPadding, leftPadding }\n}\n","const fetchRelationship = (attempt, userId, store) => new Promise((resolve, reject) => {\n setTimeout(() => {\n store.state.api.backendInteractor.fetchUserRelationship({ id: userId })\n .then((relationship) => {\n store.commit('updateUserRelationship', [relationship])\n return relationship\n })\n .then((relationship) => resolve([relationship.following, relationship.requested, relationship.locked, attempt]))\n .catch((e) => reject(e))\n }, 500)\n}).then(([following, sent, locked, attempt]) => {\n if (!following && !(locked && sent) && attempt <= 3) {\n // If we BE reports that we still not following that user - retry,\n // increment attempts by one\n fetchRelationship(++attempt, userId, store)\n }\n})\n\nexport const requestFollow = (userId, store) => new Promise((resolve, reject) => {\n store.state.api.backendInteractor.followUser({ id: userId })\n .then((updated) => {\n store.commit('updateUserRelationship', [updated])\n\n if (updated.following || (updated.locked && updated.requested)) {\n // If we get result immediately or the account is locked, just stop.\n resolve()\n return\n }\n\n // But usually we don't get result immediately, so we ask server\n // for updated user profile to confirm if we are following them\n // Sometimes it takes several tries. Sometimes we end up not following\n // user anyway, probably because they locked themselves and we\n // don't know that yet.\n // Recursive Promise, it will call itself up to 3 times.\n\n return fetchRelationship(1, updated, store)\n .then(() => {\n resolve()\n })\n })\n})\n\nexport const requestUnfollow = (userId, store) => new Promise((resolve, reject) => {\n store.state.api.backendInteractor.unfollowUser({ id: userId })\n .then((updated) => {\n store.commit('updateUserRelationship', [updated])\n resolve({\n updated\n })\n })\n})\n","import { requestFollow, requestUnfollow } from '../../services/follow_manipulate/follow_manipulate'\nexport default {\n props: ['relationship', 'labelFollowing', 'buttonClass'],\n data () {\n return {\n inProgress: false\n }\n },\n computed: {\n isPressed () {\n return this.inProgress || this.relationship.following\n },\n title () {\n if (this.inProgress || this.relationship.following) {\n return this.$t('user_card.follow_unfollow')\n } else if (this.relationship.requested) {\n return this.$t('user_card.follow_again')\n } else {\n return this.$t('user_card.follow')\n }\n },\n label () {\n if (this.inProgress) {\n return this.$t('user_card.follow_progress')\n } else if (this.relationship.following) {\n return this.labelFollowing || this.$t('user_card.following')\n } else if (this.relationship.requested) {\n return this.$t('user_card.follow_sent')\n } else {\n return this.$t('user_card.follow')\n }\n }\n },\n methods: {\n onClick () {\n this.relationship.following ? this.unfollow() : this.follow()\n },\n follow () {\n this.inProgress = true\n requestFollow(this.relationship.id, this.$store).then(() => {\n this.inProgress = false\n })\n },\n unfollow () {\n const store = this.$store\n this.inProgress = true\n requestUnfollow(this.relationship.id, store).then(() => {\n this.inProgress = false\n store.commit('removeStatus', { timeline: 'friends', userId: this.relationship.id })\n })\n }\n }\n}\n","/* script */\nexport * from \"!!babel-loader!./follow_button.js\"\nimport __vue_script__ from \"!!babel-loader!./follow_button.js\"/* template */\nimport {render as __vue_render__, staticRenderFns as __vue_static_render_fns__} from \"!!../../../node_modules/vue-loader/lib/template-compiler/index?{\\\"id\\\":\\\"data-v-fae84d0a\\\",\\\"hasScoped\\\":false,\\\"optionsId\\\":\\\"0\\\",\\\"buble\\\":{\\\"transforms\\\":{}}}!../../../node_modules/vue-loader/lib/selector?type=template&index=0!./follow_button.vue\"\n/* template functional */\nvar __vue_template_functional__ = false\n/* styles */\nvar __vue_styles__ = null\n/* scopeId */\nvar __vue_scopeId__ = null\n/* moduleIdentifier (server only) */\nvar __vue_module_identifier__ = null\nimport normalizeComponent from \"!../../../node_modules/vue-loader/lib/runtime/component-normalizer\"\nvar Component = normalizeComponent(\n __vue_script__,\n __vue_render__,\n __vue_static_render_fns__,\n __vue_template_functional__,\n __vue_styles__,\n __vue_scopeId__,\n __vue_module_identifier__\n)\n\nexport default Component.exports\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('button',{staticClass:\"btn btn-default follow-button\",class:{ toggled: _vm.isPressed },attrs:{\"disabled\":_vm.inProgress,\"title\":_vm.title},on:{\"click\":_vm.onClick}},[_vm._v(\"\\n \"+_vm._s(_vm.label)+\"\\n\")])}\nvar staticRenderFns = []\nexport { render, staticRenderFns }","\nconst VideoAttachment = {\n props: ['attachment', 'controls'],\n data () {\n return {\n loopVideo: this.$store.getters.mergedConfig.loopVideo\n }\n },\n methods: {\n onVideoDataLoad (e) {\n const target = e.srcElement || e.target\n if (typeof target.webkitAudioDecodedByteCount !== 'undefined') {\n // non-zero if video has audio track\n if (target.webkitAudioDecodedByteCount > 0) {\n this.loopVideo = this.loopVideo && !this.$store.getters.mergedConfig.loopVideoSilentOnly\n }\n } else if (typeof target.mozHasAudio !== 'undefined') {\n // true if video has audio track\n if (target.mozHasAudio) {\n this.loopVideo = this.loopVideo && !this.$store.getters.mergedConfig.loopVideoSilentOnly\n }\n } else if (typeof target.audioTracks !== 'undefined') {\n if (target.audioTracks.length > 0) {\n this.loopVideo = this.loopVideo && !this.$store.getters.mergedConfig.loopVideoSilentOnly\n }\n }\n }\n }\n}\n\nexport default VideoAttachment\n","/* script */\nexport * from \"!!babel-loader!./video_attachment.js\"\nimport __vue_script__ from \"!!babel-loader!./video_attachment.js\"/* template */\nimport {render as __vue_render__, staticRenderFns as __vue_static_render_fns__} from \"!!../../../node_modules/vue-loader/lib/template-compiler/index?{\\\"id\\\":\\\"data-v-45029e08\\\",\\\"hasScoped\\\":false,\\\"optionsId\\\":\\\"0\\\",\\\"buble\\\":{\\\"transforms\\\":{}}}!../../../node_modules/vue-loader/lib/selector?type=template&index=0!./video_attachment.vue\"\n/* template functional */\nvar __vue_template_functional__ = false\n/* styles */\nvar __vue_styles__ = null\n/* scopeId */\nvar __vue_scopeId__ = null\n/* moduleIdentifier (server only) */\nvar __vue_module_identifier__ = null\nimport normalizeComponent from \"!../../../node_modules/vue-loader/lib/runtime/component-normalizer\"\nvar Component = normalizeComponent(\n __vue_script__,\n __vue_render__,\n __vue_static_render_fns__,\n __vue_template_functional__,\n __vue_styles__,\n __vue_scopeId__,\n __vue_module_identifier__\n)\n\nexport default Component.exports\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('video',{staticClass:\"video\",attrs:{\"src\":_vm.attachment.url,\"loop\":_vm.loopVideo,\"controls\":_vm.controls,\"alt\":_vm.attachment.description,\"title\":_vm.attachment.description,\"playsinline\":\"\"},on:{\"loadeddata\":_vm.onVideoDataLoad}})}\nvar staticRenderFns = []\nexport { render, staticRenderFns }","import Attachment from '../attachment/attachment.vue'\nimport { chunk, last, dropRight, sumBy } from 'lodash'\n\nconst Gallery = {\n props: [\n 'attachments',\n 'nsfw',\n 'setMedia'\n ],\n data () {\n return {\n sizes: {}\n }\n },\n components: { Attachment },\n computed: {\n rows () {\n if (!this.attachments) {\n return []\n }\n const rows = chunk(this.attachments, 3)\n if (last(rows).length === 1 && rows.length > 1) {\n // if 1 attachment on last row -> add it to the previous row instead\n const lastAttachment = last(rows)[0]\n const allButLastRow = dropRight(rows)\n last(allButLastRow).push(lastAttachment)\n return allButLastRow\n }\n return rows\n },\n useContainFit () {\n return this.$store.getters.mergedConfig.useContainFit\n }\n },\n methods: {\n onNaturalSizeLoad (id, size) {\n this.$set(this.sizes, id, size)\n },\n rowStyle (itemsPerRow) {\n return { 'padding-bottom': `${(100 / (itemsPerRow + 0.6))}%` }\n },\n itemStyle (id, row) {\n const total = sumBy(row, item => this.getAspectRatio(item.id))\n return { flex: `${this.getAspectRatio(id) / total} 1 0%` }\n },\n getAspectRatio (id) {\n const size = this.sizes[id]\n return size ? size.width / size.height : 1\n }\n }\n}\n\nexport default Gallery\n","function injectStyle (context) {\n require(\"!!vue-style-loader!css-loader?minimize!../../../node_modules/vue-loader/lib/style-compiler/index?{\\\"optionsId\\\":\\\"0\\\",\\\"vue\\\":true,\\\"scoped\\\":false,\\\"sourceMap\\\":false}!sass-loader!../../../node_modules/vue-loader/lib/selector?type=styles&index=0!./gallery.vue\")\n}\n/* script */\nexport * from \"!!babel-loader!./gallery.js\"\nimport __vue_script__ from \"!!babel-loader!./gallery.js\"/* template */\nimport {render as __vue_render__, staticRenderFns as __vue_static_render_fns__} from \"!!../../../node_modules/vue-loader/lib/template-compiler/index?{\\\"id\\\":\\\"data-v-3db94942\\\",\\\"hasScoped\\\":false,\\\"optionsId\\\":\\\"0\\\",\\\"buble\\\":{\\\"transforms\\\":{}}}!../../../node_modules/vue-loader/lib/selector?type=template&index=0!./gallery.vue\"\n/* template functional */\nvar __vue_template_functional__ = false\n/* styles */\nvar __vue_styles__ = injectStyle\n/* scopeId */\nvar __vue_scopeId__ = null\n/* moduleIdentifier (server only) */\nvar __vue_module_identifier__ = null\nimport normalizeComponent from \"!../../../node_modules/vue-loader/lib/runtime/component-normalizer\"\nvar Component = normalizeComponent(\n __vue_script__,\n __vue_render__,\n __vue_static_render_fns__,\n __vue_template_functional__,\n __vue_styles__,\n __vue_scopeId__,\n __vue_module_identifier__\n)\n\nexport default Component.exports\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{ref:\"galleryContainer\",staticStyle:{\"width\":\"100%\"}},_vm._l((_vm.rows),function(row,index){return _c('div',{key:index,staticClass:\"gallery-row\",class:{ 'contain-fit': _vm.useContainFit, 'cover-fit': !_vm.useContainFit },style:(_vm.rowStyle(row.length))},[_c('div',{staticClass:\"gallery-row-inner\"},_vm._l((row),function(attachment){return _c('attachment',{key:attachment.id,style:(_vm.itemStyle(attachment.id, row)),attrs:{\"set-media\":_vm.setMedia,\"nsfw\":_vm.nsfw,\"attachment\":attachment,\"allow-play\":false,\"natural-size-load\":_vm.onNaturalSizeLoad.bind(null, attachment.id)}})}),1)])}),0)}\nvar staticRenderFns = []\nexport { render, staticRenderFns }","const LinkPreview = {\n name: 'LinkPreview',\n props: [\n 'card',\n 'size',\n 'nsfw'\n ],\n data () {\n return {\n imageLoaded: false\n }\n },\n computed: {\n useImage () {\n // Currently BE shoudn't give cards if tagged NSFW, this is a bit paranoid\n // as it makes sure to hide the image if somehow NSFW tagged preview can\n // exist.\n return this.card.image && !this.nsfw && this.size !== 'hide'\n },\n useDescription () {\n return this.card.description && /\\S/.test(this.card.description)\n }\n },\n created () {\n if (this.useImage) {\n const newImg = new Image()\n newImg.onload = () => {\n this.imageLoaded = true\n }\n newImg.src = this.card.image\n }\n }\n}\n\nexport default LinkPreview\n","function injectStyle (context) {\n require(\"!!vue-style-loader!css-loader?minimize!../../../node_modules/vue-loader/lib/style-compiler/index?{\\\"optionsId\\\":\\\"0\\\",\\\"vue\\\":true,\\\"scoped\\\":false,\\\"sourceMap\\\":false}!sass-loader!../../../node_modules/vue-loader/lib/selector?type=styles&index=0!./link-preview.vue\")\n}\n/* script */\nexport * from \"!!babel-loader!./link-preview.js\"\nimport __vue_script__ from \"!!babel-loader!./link-preview.js\"/* template */\nimport {render as __vue_render__, staticRenderFns as __vue_static_render_fns__} from \"!!../../../node_modules/vue-loader/lib/template-compiler/index?{\\\"id\\\":\\\"data-v-7c8d99ac\\\",\\\"hasScoped\\\":false,\\\"optionsId\\\":\\\"0\\\",\\\"buble\\\":{\\\"transforms\\\":{}}}!../../../node_modules/vue-loader/lib/selector?type=template&index=0!./link-preview.vue\"\n/* template functional */\nvar __vue_template_functional__ = false\n/* styles */\nvar __vue_styles__ = injectStyle\n/* scopeId */\nvar __vue_scopeId__ = null\n/* moduleIdentifier (server only) */\nvar __vue_module_identifier__ = null\nimport normalizeComponent from \"!../../../node_modules/vue-loader/lib/runtime/component-normalizer\"\nvar Component = normalizeComponent(\n __vue_script__,\n __vue_render__,\n __vue_static_render_fns__,\n __vue_template_functional__,\n __vue_styles__,\n __vue_scopeId__,\n __vue_module_identifier__\n)\n\nexport default Component.exports\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[_c('a',{staticClass:\"link-preview-card\",attrs:{\"href\":_vm.card.url,\"target\":\"_blank\",\"rel\":\"noopener\"}},[(_vm.useImage && _vm.imageLoaded)?_c('div',{staticClass:\"card-image\",class:{ 'small-image': _vm.size === 'small' }},[_c('img',{attrs:{\"src\":_vm.card.image}})]):_vm._e(),_vm._v(\" \"),_c('div',{staticClass:\"card-content\"},[_c('span',{staticClass:\"card-host faint\"},[_vm._v(_vm._s(_vm.card.provider_name))]),_vm._v(\" \"),_c('h4',{staticClass:\"card-title\"},[_vm._v(_vm._s(_vm.card.title))]),_vm._v(\" \"),(_vm.useDescription)?_c('p',{staticClass:\"card-description\"},[_vm._v(_vm._s(_vm.card.description))]):_vm._e()])])])}\nvar staticRenderFns = []\nexport { render, staticRenderFns }","export default {\n props: [ 'user' ],\n computed: {\n subscribeUrl () {\n // eslint-disable-next-line no-undef\n const serverUrl = new URL(this.user.statusnet_profile_url)\n return `${serverUrl.protocol}//${serverUrl.host}/main/ostatus`\n }\n }\n}\n","function injectStyle (context) {\n require(\"!!vue-style-loader!css-loader?minimize!../../../node_modules/vue-loader/lib/style-compiler/index?{\\\"optionsId\\\":\\\"0\\\",\\\"vue\\\":true,\\\"scoped\\\":false,\\\"sourceMap\\\":false}!sass-loader!../../../node_modules/vue-loader/lib/selector?type=styles&index=0!./remote_follow.vue\")\n}\n/* script */\nexport * from \"!!babel-loader!./remote_follow.js\"\nimport __vue_script__ from \"!!babel-loader!./remote_follow.js\"/* template */\nimport {render as __vue_render__, staticRenderFns as __vue_static_render_fns__} from \"!!../../../node_modules/vue-loader/lib/template-compiler/index?{\\\"id\\\":\\\"data-v-e95e446e\\\",\\\"hasScoped\\\":false,\\\"optionsId\\\":\\\"0\\\",\\\"buble\\\":{\\\"transforms\\\":{}}}!../../../node_modules/vue-loader/lib/selector?type=template&index=0!./remote_follow.vue\"\n/* template functional */\nvar __vue_template_functional__ = false\n/* styles */\nvar __vue_styles__ = injectStyle\n/* scopeId */\nvar __vue_scopeId__ = null\n/* moduleIdentifier (server only) */\nvar __vue_module_identifier__ = null\nimport normalizeComponent from \"!../../../node_modules/vue-loader/lib/runtime/component-normalizer\"\nvar Component = normalizeComponent(\n __vue_script__,\n __vue_render__,\n __vue_static_render_fns__,\n __vue_template_functional__,\n __vue_styles__,\n __vue_scopeId__,\n __vue_module_identifier__\n)\n\nexport default Component.exports\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"remote-follow\"},[_c('form',{attrs:{\"method\":\"POST\",\"action\":_vm.subscribeUrl}},[_c('input',{attrs:{\"type\":\"hidden\",\"name\":\"nickname\"},domProps:{\"value\":_vm.user.screen_name}}),_vm._v(\" \"),_c('input',{attrs:{\"type\":\"hidden\",\"name\":\"profile\",\"value\":\"\"}}),_vm._v(\" \"),_c('button',{staticClass:\"remote-button\",attrs:{\"click\":\"submit\"}},[_vm._v(\"\\n \"+_vm._s(_vm.$t('user_card.remote_follow'))+\"\\n \")])])])}\nvar staticRenderFns = []\nexport { render, staticRenderFns }","import UserAvatar from '../user_avatar/user_avatar.vue'\nimport generateProfileLink from 'src/services/user_profile_link_generator/user_profile_link_generator'\n\nconst AvatarList = {\n props: ['users'],\n computed: {\n slicedUsers () {\n return this.users ? this.users.slice(0, 15) : []\n }\n },\n components: {\n UserAvatar\n },\n methods: {\n userProfileLink (user) {\n return generateProfileLink(user.id, user.screen_name, this.$store.state.instance.restrictedNicknames)\n }\n }\n}\n\nexport default AvatarList\n","function injectStyle (context) {\n require(\"!!vue-style-loader!css-loader?minimize!../../../node_modules/vue-loader/lib/style-compiler/index?{\\\"optionsId\\\":\\\"0\\\",\\\"vue\\\":true,\\\"scoped\\\":false,\\\"sourceMap\\\":false}!sass-loader!../../../node_modules/vue-loader/lib/selector?type=styles&index=0!./avatar_list.vue\")\n}\n/* script */\nexport * from \"!!babel-loader!./avatar_list.js\"\nimport __vue_script__ from \"!!babel-loader!./avatar_list.js\"/* template */\nimport {render as __vue_render__, staticRenderFns as __vue_static_render_fns__} from \"!!../../../node_modules/vue-loader/lib/template-compiler/index?{\\\"id\\\":\\\"data-v-4cea5bcf\\\",\\\"hasScoped\\\":false,\\\"optionsId\\\":\\\"0\\\",\\\"buble\\\":{\\\"transforms\\\":{}}}!../../../node_modules/vue-loader/lib/selector?type=template&index=0!./avatar_list.vue\"\n/* template functional */\nvar __vue_template_functional__ = false\n/* styles */\nvar __vue_styles__ = injectStyle\n/* scopeId */\nvar __vue_scopeId__ = null\n/* moduleIdentifier (server only) */\nvar __vue_module_identifier__ = null\nimport normalizeComponent from \"!../../../node_modules/vue-loader/lib/runtime/component-normalizer\"\nvar Component = normalizeComponent(\n __vue_script__,\n __vue_render__,\n __vue_static_render_fns__,\n __vue_template_functional__,\n __vue_styles__,\n __vue_scopeId__,\n __vue_module_identifier__\n)\n\nexport default Component.exports\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"avatars\"},_vm._l((_vm.slicedUsers),function(user){return _c('router-link',{key:user.id,staticClass:\"avatars-item\",attrs:{\"to\":_vm.userProfileLink(user)}},[_c('UserAvatar',{staticClass:\"avatar-small\",attrs:{\"user\":user}})],1)}),1)}\nvar staticRenderFns = []\nexport { render, staticRenderFns }","const fileSizeFormat = (num) => {\n var exponent\n var unit\n var units = ['B', 'KiB', 'MiB', 'GiB', 'TiB']\n if (num < 1) {\n return num + ' ' + units[0]\n }\n\n exponent = Math.min(Math.floor(Math.log(num) / Math.log(1024)), units.length - 1)\n num = (num / Math.pow(1024, exponent)).toFixed(2) * 1\n unit = units[exponent]\n return { num: num, unit: unit }\n}\nconst fileSizeFormatService = {\n fileSizeFormat\n}\nexport default fileSizeFormatService\n","import { debounce } from 'lodash'\n/**\n * suggest - generates a suggestor function to be used by emoji-input\n * data: object providing source information for specific types of suggestions:\n * data.emoji - optional, an array of all emoji available i.e.\n * (state.instance.emoji + state.instance.customEmoji)\n * data.users - optional, an array of all known users\n * updateUsersList - optional, a function to search and append to users\n *\n * Depending on data present one or both (or none) can be present, so if field\n * doesn't support user linking you can just provide only emoji.\n */\n\nconst debounceUserSearch = debounce((data, input) => {\n data.updateUsersList(input)\n}, 500)\n\nexport default data => input => {\n const firstChar = input[0]\n if (firstChar === ':' && data.emoji) {\n return suggestEmoji(data.emoji)(input)\n }\n if (firstChar === '@' && data.users) {\n return suggestUsers(data)(input)\n }\n return []\n}\n\nexport const suggestEmoji = emojis => input => {\n const noPrefix = input.toLowerCase().substr(1)\n return emojis\n .filter(({ displayText }) => displayText.toLowerCase().match(noPrefix))\n .sort((a, b) => {\n let aScore = 0\n let bScore = 0\n\n // An exact match always wins\n aScore += a.displayText.toLowerCase() === noPrefix ? 200 : 0\n bScore += b.displayText.toLowerCase() === noPrefix ? 200 : 0\n\n // Prioritize custom emoji a lot\n aScore += a.imageUrl ? 100 : 0\n bScore += b.imageUrl ? 100 : 0\n\n // Prioritize prefix matches somewhat\n aScore += a.displayText.toLowerCase().startsWith(noPrefix) ? 10 : 0\n bScore += b.displayText.toLowerCase().startsWith(noPrefix) ? 10 : 0\n\n // Sort by length\n aScore -= a.displayText.length\n bScore -= b.displayText.length\n\n // Break ties alphabetically\n const alphabetically = a.displayText > b.displayText ? 0.5 : -0.5\n\n return bScore - aScore + alphabetically\n })\n}\n\nexport const suggestUsers = data => input => {\n const noPrefix = input.toLowerCase().substr(1)\n const users = data.users\n\n const newUsers = users.filter(\n user =>\n user.screen_name.toLowerCase().startsWith(noPrefix) ||\n user.name.toLowerCase().startsWith(noPrefix)\n\n /* taking only 20 results so that sorting is a bit cheaper, we display\n * only 5 anyway. could be inaccurate, but we ideally we should query\n * backend anyway\n */\n ).slice(0, 20).sort((a, b) => {\n let aScore = 0\n let bScore = 0\n\n // Matches on screen name (i.e. user@instance) makes a priority\n aScore += a.screen_name.toLowerCase().startsWith(noPrefix) ? 2 : 0\n bScore += b.screen_name.toLowerCase().startsWith(noPrefix) ? 2 : 0\n\n // Matches on name takes second priority\n aScore += a.name.toLowerCase().startsWith(noPrefix) ? 1 : 0\n bScore += b.name.toLowerCase().startsWith(noPrefix) ? 1 : 0\n\n const diff = (bScore - aScore) * 10\n\n // Then sort alphabetically\n const nameAlphabetically = a.name > b.name ? 1 : -1\n const screenNameAlphabetically = a.screen_name > b.screen_name ? 1 : -1\n\n return diff + nameAlphabetically + screenNameAlphabetically\n /* eslint-disable camelcase */\n }).map(({ screen_name, name, profile_image_url_original }) => ({\n displayText: screen_name,\n detailText: name,\n imageUrl: profile_image_url_original,\n replacement: '@' + screen_name + ' '\n }))\n\n // BE search users to get more comprehensive results\n if (data.updateUsersList) {\n debounceUserSearch(data, noPrefix)\n }\n return newUsers\n /* eslint-enable camelcase */\n}\n","import Vue from 'vue'\nimport { mapState } from 'vuex'\n\nimport './tab_switcher.scss'\n\nexport default Vue.component('tab-switcher', {\n name: 'TabSwitcher',\n props: {\n renderOnlyFocused: {\n required: false,\n type: Boolean,\n default: false\n },\n onSwitch: {\n required: false,\n type: Function,\n default: undefined\n },\n activeTab: {\n required: false,\n type: String,\n default: undefined\n },\n scrollableTabs: {\n required: false,\n type: Boolean,\n default: false\n },\n sideTabBar: {\n required: false,\n type: Boolean,\n default: false\n }\n },\n data () {\n return {\n active: this.$slots.default.findIndex(_ => _.tag)\n }\n },\n computed: {\n activeIndex () {\n // In case of controlled component\n if (this.activeTab) {\n return this.$slots.default.findIndex(slot => this.activeTab === slot.key)\n } else {\n return this.active\n }\n },\n settingsModalVisible () {\n return this.settingsModalState === 'visible'\n },\n ...mapState({\n settingsModalState: state => state.interface.settingsModalState\n })\n },\n beforeUpdate () {\n const currentSlot = this.$slots.default[this.active]\n if (!currentSlot.tag) {\n this.active = this.$slots.default.findIndex(_ => _.tag)\n }\n },\n methods: {\n clickTab (index) {\n return (e) => {\n e.preventDefault()\n this.setTab(index)\n }\n },\n setTab (index) {\n if (typeof this.onSwitch === 'function') {\n this.onSwitch.call(null, this.$slots.default[index].key)\n }\n this.active = index\n if (this.scrollableTabs) {\n this.$refs.contents.scrollTop = 0\n }\n }\n },\n render (h) {\n const tabs = this.$slots.default\n .map((slot, index) => {\n if (!slot.tag) return\n const classesTab = ['tab']\n const classesWrapper = ['tab-wrapper']\n if (this.activeIndex === index) {\n classesTab.push('active')\n classesWrapper.push('active')\n }\n if (slot.data.attrs.image) {\n return (\n

\n )\n }\n return (\n
\n \n {!slot.data.attrs.icon ? '' : ()}\n \n {slot.data.attrs.label}\n \n \n
\n )\n })\n\n const contents = this.$slots.default.map((slot, index) => {\n if (!slot.tag) return\n const active = this.activeIndex === index\n const classes = [ active ? 'active' : 'hidden' ]\n if (slot.data.attrs.fullHeight) {\n classes.push('full-height')\n }\n const renderSlot = (!this.renderOnlyFocused || active)\n ? slot\n : ''\n\n return (\n
\n {\n this.sideTabBar\n ?

{slot.data.attrs.label}

\n : ''\n }\n {renderSlot}\n
\n )\n })\n\n return (\n
\n
\n {tabs}\n
\n
\n {contents}\n
\n
\n )\n }\n})\n","import isFunction from 'lodash/isFunction'\n\nconst getComponentOptions = (Component) => (isFunction(Component)) ? Component.options : Component\n\nconst getComponentProps = (Component) => getComponentOptions(Component).props\n\nexport {\n getComponentOptions,\n getComponentProps\n}\n","import { reduce, find } from 'lodash'\n\nexport const replaceWord = (str, toReplace, replacement) => {\n return str.slice(0, toReplace.start) + replacement + str.slice(toReplace.end)\n}\n\nexport const wordAtPosition = (str, pos) => {\n const words = splitByWhitespaceBoundary(str)\n const wordsWithPosition = addPositionToWords(words)\n\n return find(wordsWithPosition, ({ start, end }) => start <= pos && end > pos)\n}\n\nexport const addPositionToWords = (words) => {\n return reduce(words, (result, word) => {\n const data = {\n word,\n start: 0,\n end: word.length\n }\n\n if (result.length > 0) {\n const previous = result.pop()\n\n data.start += previous.end\n data.end += previous.end\n\n result.push(previous)\n }\n\n result.push(data)\n\n return result\n }, [])\n}\n\nexport const splitByWhitespaceBoundary = (str) => {\n let result = []\n let currentWord = ''\n for (let i = 0; i < str.length; i++) {\n const currentChar = str[i]\n // Starting a new word\n if (!currentWord) {\n currentWord = currentChar\n continue\n }\n // current character is whitespace while word isn't, or vice versa:\n // add our current word to results, start over the current word.\n if (!!currentChar.trim() !== !!currentWord.trim()) {\n result.push(currentWord)\n currentWord = currentChar\n continue\n }\n currentWord += currentChar\n }\n // Add the last word we were working on\n if (currentWord) {\n result.push(currentWord)\n }\n return result\n}\n\nconst completion = {\n wordAtPosition,\n addPositionToWords,\n splitByWhitespaceBoundary,\n replaceWord\n}\n\nexport default completion\n","import Checkbox from '../checkbox/checkbox.vue'\n\n// At widest, approximately 20 emoji are visible in a row,\n// loading 3 rows, could be overkill for narrow picker\nconst LOAD_EMOJI_BY = 60\n\n// When to start loading new batch emoji, in pixels\nconst LOAD_EMOJI_MARGIN = 64\n\nconst filterByKeyword = (list, keyword = '') => {\n return list.filter(x => x.displayText.includes(keyword))\n}\n\nconst EmojiPicker = {\n props: {\n enableStickerPicker: {\n required: false,\n type: Boolean,\n default: false\n }\n },\n data () {\n return {\n keyword: '',\n activeGroup: 'custom',\n showingStickers: false,\n groupsScrolledClass: 'scrolled-top',\n keepOpen: false,\n customEmojiBufferSlice: LOAD_EMOJI_BY,\n customEmojiTimeout: null,\n customEmojiLoadAllConfirmed: false\n }\n },\n components: {\n StickerPicker: () => import('../sticker_picker/sticker_picker.vue'),\n Checkbox\n },\n methods: {\n onStickerUploaded (e) {\n this.$emit('sticker-uploaded', e)\n },\n onStickerUploadFailed (e) {\n this.$emit('sticker-upload-failed', e)\n },\n onEmoji (emoji) {\n const value = emoji.imageUrl ? `:${emoji.displayText}:` : emoji.replacement\n this.$emit('emoji', { insertion: value, keepOpen: this.keepOpen })\n },\n onScroll (e) {\n const target = (e && e.target) || this.$refs['emoji-groups']\n this.updateScrolledClass(target)\n this.scrolledGroup(target)\n this.triggerLoadMore(target)\n },\n highlight (key) {\n const ref = this.$refs['group-' + key]\n const top = ref[0].offsetTop\n this.setShowStickers(false)\n this.activeGroup = key\n this.$nextTick(() => {\n this.$refs['emoji-groups'].scrollTop = top + 1\n })\n },\n updateScrolledClass (target) {\n if (target.scrollTop <= 5) {\n this.groupsScrolledClass = 'scrolled-top'\n } else if (target.scrollTop >= target.scrollTopMax - 5) {\n this.groupsScrolledClass = 'scrolled-bottom'\n } else {\n this.groupsScrolledClass = 'scrolled-middle'\n }\n },\n triggerLoadMore (target) {\n const ref = this.$refs['group-end-custom'][0]\n if (!ref) return\n const bottom = ref.offsetTop + ref.offsetHeight\n\n const scrollerBottom = target.scrollTop + target.clientHeight\n const scrollerTop = target.scrollTop\n const scrollerMax = target.scrollHeight\n\n // Loads more emoji when they come into view\n const approachingBottom = bottom - scrollerBottom < LOAD_EMOJI_MARGIN\n // Always load when at the very top in case there's no scroll space yet\n const atTop = scrollerTop < 5\n // Don't load when looking at unicode category or at the very bottom\n const bottomAboveViewport = bottom < scrollerTop || scrollerBottom === scrollerMax\n if (!bottomAboveViewport && (approachingBottom || atTop)) {\n this.loadEmoji()\n }\n },\n scrolledGroup (target) {\n const top = target.scrollTop + 5\n this.$nextTick(() => {\n this.emojisView.forEach(group => {\n const ref = this.$refs['group-' + group.id]\n if (ref[0].offsetTop <= top) {\n this.activeGroup = group.id\n }\n })\n })\n },\n loadEmoji () {\n const allLoaded = this.customEmojiBuffer.length === this.filteredEmoji.length\n\n if (allLoaded) {\n return\n }\n\n this.customEmojiBufferSlice += LOAD_EMOJI_BY\n },\n startEmojiLoad (forceUpdate = false) {\n if (!forceUpdate) {\n this.keyword = ''\n }\n this.$nextTick(() => {\n this.$refs['emoji-groups'].scrollTop = 0\n })\n const bufferSize = this.customEmojiBuffer.length\n const bufferPrefilledAll = bufferSize === this.filteredEmoji.length\n if (bufferPrefilledAll && !forceUpdate) {\n return\n }\n this.customEmojiBufferSlice = LOAD_EMOJI_BY\n },\n toggleStickers () {\n this.showingStickers = !this.showingStickers\n },\n setShowStickers (value) {\n this.showingStickers = value\n }\n },\n watch: {\n keyword () {\n this.customEmojiLoadAllConfirmed = false\n this.onScroll()\n this.startEmojiLoad(true)\n }\n },\n computed: {\n activeGroupView () {\n return this.showingStickers ? '' : this.activeGroup\n },\n stickersAvailable () {\n if (this.$store.state.instance.stickers) {\n return this.$store.state.instance.stickers.length > 0\n }\n return 0\n },\n filteredEmoji () {\n return filterByKeyword(\n this.$store.state.instance.customEmoji || [],\n this.keyword\n )\n },\n customEmojiBuffer () {\n return this.filteredEmoji.slice(0, this.customEmojiBufferSlice)\n },\n emojis () {\n const standardEmojis = this.$store.state.instance.emoji || []\n const customEmojis = this.customEmojiBuffer\n\n return [\n {\n id: 'custom',\n text: this.$t('emoji.custom'),\n icon: 'icon-smile',\n emojis: customEmojis\n },\n {\n id: 'standard',\n text: this.$t('emoji.unicode'),\n icon: 'icon-picture',\n emojis: filterByKeyword(standardEmojis, this.keyword)\n }\n ]\n },\n emojisView () {\n return this.emojis.filter(value => value.emojis.length > 0)\n },\n stickerPickerEnabled () {\n return (this.$store.state.instance.stickers || []).length !== 0\n }\n }\n}\n\nexport default EmojiPicker\n","function injectStyle (context) {\n require(\"!!vue-style-loader!css-loader?minimize!../../../node_modules/vue-loader/lib/style-compiler/index?{\\\"optionsId\\\":\\\"0\\\",\\\"vue\\\":true,\\\"scoped\\\":false,\\\"sourceMap\\\":false}!sass-loader!./emoji_picker.scss\")\n}\n/* script */\nexport * from \"!!babel-loader!./emoji_picker.js\"\nimport __vue_script__ from \"!!babel-loader!./emoji_picker.js\"/* template */\nimport {render as __vue_render__, staticRenderFns as __vue_static_render_fns__} from \"!!../../../node_modules/vue-loader/lib/template-compiler/index?{\\\"id\\\":\\\"data-v-47d21b3b\\\",\\\"hasScoped\\\":false,\\\"optionsId\\\":\\\"0\\\",\\\"buble\\\":{\\\"transforms\\\":{}}}!../../../node_modules/vue-loader/lib/selector?type=template&index=0!./emoji_picker.vue\"\n/* template functional */\nvar __vue_template_functional__ = false\n/* styles */\nvar __vue_styles__ = injectStyle\n/* scopeId */\nvar __vue_scopeId__ = null\n/* moduleIdentifier (server only) */\nvar __vue_module_identifier__ = null\nimport normalizeComponent from \"!../../../node_modules/vue-loader/lib/runtime/component-normalizer\"\nvar Component = normalizeComponent(\n __vue_script__,\n __vue_render__,\n __vue_static_render_fns__,\n __vue_template_functional__,\n __vue_styles__,\n __vue_scopeId__,\n __vue_module_identifier__\n)\n\nexport default Component.exports\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"emoji-picker panel panel-default panel-body\"},[_c('div',{staticClass:\"heading\"},[_c('span',{staticClass:\"emoji-tabs\"},_vm._l((_vm.emojis),function(group){return _c('span',{key:group.id,staticClass:\"emoji-tabs-item\",class:{\n active: _vm.activeGroupView === group.id,\n disabled: group.emojis.length === 0\n },attrs:{\"title\":group.text},on:{\"click\":function($event){$event.preventDefault();return _vm.highlight(group.id)}}},[_c('i',{class:group.icon})])}),0),_vm._v(\" \"),(_vm.stickerPickerEnabled)?_c('span',{staticClass:\"additional-tabs\"},[_c('span',{staticClass:\"stickers-tab-icon additional-tabs-item\",class:{active: _vm.showingStickers},attrs:{\"title\":_vm.$t('emoji.stickers')},on:{\"click\":function($event){$event.preventDefault();return _vm.toggleStickers($event)}}},[_c('i',{staticClass:\"icon-star\"})])]):_vm._e()]),_vm._v(\" \"),_c('div',{staticClass:\"content\"},[_c('div',{staticClass:\"emoji-content\",class:{hidden: _vm.showingStickers}},[_c('div',{staticClass:\"emoji-search\"},[_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.keyword),expression:\"keyword\"}],staticClass:\"form-control\",attrs:{\"type\":\"text\",\"placeholder\":_vm.$t('emoji.search_emoji')},domProps:{\"value\":(_vm.keyword)},on:{\"input\":function($event){if($event.target.composing){ return; }_vm.keyword=$event.target.value}}})]),_vm._v(\" \"),_c('div',{ref:\"emoji-groups\",staticClass:\"emoji-groups\",class:_vm.groupsScrolledClass,on:{\"scroll\":_vm.onScroll}},_vm._l((_vm.emojisView),function(group){return _c('div',{key:group.id,staticClass:\"emoji-group\"},[_c('h6',{ref:'group-' + group.id,refInFor:true,staticClass:\"emoji-group-title\"},[_vm._v(\"\\n \"+_vm._s(group.text)+\"\\n \")]),_vm._v(\" \"),_vm._l((group.emojis),function(emoji){return _c('span',{key:group.id + emoji.displayText,staticClass:\"emoji-item\",attrs:{\"title\":emoji.displayText},on:{\"click\":function($event){$event.stopPropagation();$event.preventDefault();return _vm.onEmoji(emoji)}}},[(!emoji.imageUrl)?_c('span',[_vm._v(_vm._s(emoji.replacement))]):_c('img',{attrs:{\"src\":emoji.imageUrl}})])}),_vm._v(\" \"),_c('span',{ref:'group-end-' + group.id,refInFor:true})],2)}),0),_vm._v(\" \"),_c('div',{staticClass:\"keep-open\"},[_c('Checkbox',{model:{value:(_vm.keepOpen),callback:function ($$v) {_vm.keepOpen=$$v},expression:\"keepOpen\"}},[_vm._v(\"\\n \"+_vm._s(_vm.$t('emoji.keep_open'))+\"\\n \")])],1)]),_vm._v(\" \"),(_vm.showingStickers)?_c('div',{staticClass:\"stickers-content\"},[_c('sticker-picker',{on:{\"uploaded\":_vm.onStickerUploaded,\"upload-failed\":_vm.onStickerUploadFailed}})],1):_vm._e()])])}\nvar staticRenderFns = []\nexport { render, staticRenderFns }","import Completion from '../../services/completion/completion.js'\nimport EmojiPicker from '../emoji_picker/emoji_picker.vue'\nimport { take } from 'lodash'\nimport { findOffset } from '../../services/offset_finder/offset_finder.service.js'\n\n/**\n * EmojiInput - augmented inputs for emoji and autocomplete support in inputs\n * without having to give up the comfort of and

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 KLoezqAOJhO#}3{A literal 0 HcmV?d00001 diff --git a/test/fixtures/image.png b/test/fixtures/image.png new file mode 100755 index 0000000000000000000000000000000000000000..e999e8800cf69e0c734a07a6c63b7adc49ad4783 GIT binary patch literal 104426 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 z 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 Cachex.clear(:banned_urls_cache) end) end - test "it returns 404 when MediaProxy disabled", %{conn: conn} do - clear_config([:media_proxy, :enabled], false) - - assert %Conn{ - status: 404, - resp_body: "Not Found" - } = get(conn, "/proxy/hhgfh/eeeee") - - assert %Conn{ - status: 404, - resp_body: "Not Found" - } = get(conn, "/proxy/hhgfh/eeee/fff") - end - - describe "" do + describe "Media Proxy" do setup do clear_config([:media_proxy, :enabled], true) clear_config([Pleroma.Web.Endpoint, :secret_key_base], "00000000000") + [url: MediaProxy.encode_url("https://google.fn/test.png")] end + test "it returns 404 when disabled", %{conn: conn} do + clear_config([:media_proxy, :enabled], false) + + assert %Conn{ + status: 404, + resp_body: "Not Found" + } = get(conn, "/proxy/hhgfh/eeeee") + + assert %Conn{ + status: 404, + resp_body: "Not Found" + } = get(conn, "/proxy/hhgfh/eeee/fff") + end + test "it returns 403 for invalid signature", %{conn: conn, url: url} do Pleroma.Config.put([Pleroma.Web.Endpoint, :secret_key_base], "000") %{path: path} = URI.parse(url) @@ -55,7 +56,7 @@ defmodule Pleroma.Web.MediaProxy.MediaProxyControllerTest do } = get(conn, "/proxy/hhgfh/eeee/fff") end - test "redirects on valid url when filename is invalidated", %{conn: conn, url: url} do + test "redirects to valid url when filename is invalidated", %{conn: conn, url: url} do invalid_url = String.replace(url, "test.png", "test-file.png") response = get(conn, invalid_url) assert response.status == 302 @@ -78,4 +79,249 @@ defmodule Pleroma.Web.MediaProxy.MediaProxyControllerTest do end end end + + describe "Media Preview Proxy" do + setup do + clear_config([:media_proxy, :enabled], true) + clear_config([:media_preview_proxy, :enabled], true) + clear_config([Pleroma.Web.Endpoint, :secret_key_base], "00000000000") + + original_url = "https://google.fn/test.png" + + [ + url: MediaProxy.encode_preview_url(original_url), + media_proxy_url: MediaProxy.encode_url(original_url) + ] + end + + test "returns 404 when media proxy is disabled", %{conn: conn} do + clear_config([:media_proxy, :enabled], false) + + assert %Conn{ + status: 404, + resp_body: "Not Found" + } = get(conn, "/proxy/preview/hhgfh/eeeee") + + assert %Conn{ + status: 404, + resp_body: "Not Found" + } = get(conn, "/proxy/preview/hhgfh/fff") + end + + test "returns 404 when disabled", %{conn: conn} do + clear_config([:media_preview_proxy, :enabled], false) + + assert %Conn{ + status: 404, + resp_body: "Not Found" + } = get(conn, "/proxy/preview/hhgfh/eeeee") + + assert %Conn{ + status: 404, + resp_body: "Not Found" + } = get(conn, "/proxy/preview/hhgfh/fff") + end + + test "it returns 403 for invalid signature", %{conn: conn, url: url} do + Pleroma.Config.put([Pleroma.Web.Endpoint, :secret_key_base], "000") + %{path: path} = URI.parse(url) + + assert %Conn{ + status: 403, + resp_body: "Forbidden" + } = get(conn, path) + + assert %Conn{ + status: 403, + resp_body: "Forbidden" + } = get(conn, "/proxy/preview/hhgfh/eeee") + + assert %Conn{ + status: 403, + resp_body: "Forbidden" + } = get(conn, "/proxy/preview/hhgfh/eeee/fff") + end + + test "redirects to valid url when filename is invalidated", %{conn: conn, url: url} do + invalid_url = String.replace(url, "test.png", "test-file.png") + response = get(conn, invalid_url) + assert response.status == 302 + assert redirected_to(response) == url + end + + test "responds with 424 Failed Dependency if HEAD request to media proxy fails", %{ + conn: conn, + url: url, + media_proxy_url: media_proxy_url + } do + Tesla.Mock.mock(fn + %{method: "head", url: ^media_proxy_url} -> + %Tesla.Env{status: 500, body: ""} + end) + + response = get(conn, url) + assert response.status == 424 + assert response.resp_body == "Can't fetch HTTP headers (HTTP 500)." + end + + test "redirects to media proxy URI on unsupported content type", %{ + conn: conn, + url: url, + media_proxy_url: media_proxy_url + } do + Tesla.Mock.mock(fn + %{method: "head", url: ^media_proxy_url} -> + %Tesla.Env{status: 200, body: "", headers: [{"content-type", "application/pdf"}]} + end) + + response = get(conn, url) + assert response.status == 302 + assert redirected_to(response) == media_proxy_url + end + + test "with `static=true` and GIF image preview requested, responds with JPEG image", %{ + conn: conn, + url: url, + media_proxy_url: media_proxy_url + } do + # Setting a high :min_content_length to ensure this scenario is not affected by its logic + clear_config([:media_preview_proxy, :min_content_length], 1_000_000_000) + + Tesla.Mock.mock(fn + %{method: "head", url: ^media_proxy_url} -> + %Tesla.Env{ + status: 200, + body: "", + headers: [{"content-type", "image/gif"}, {"content-length", "1001718"}] + } + + %{method: :get, url: ^media_proxy_url} -> + %Tesla.Env{status: 200, body: File.read!("test/fixtures/image.gif")} + end) + + response = get(conn, url <> "?static=true") + + assert response.status == 200 + assert Conn.get_resp_header(response, "content-type") == ["image/jpeg"] + assert response.resp_body != "" + end + + test "with GIF image preview requested and no `static` param, redirects to media proxy URI", + %{ + conn: conn, + url: url, + media_proxy_url: media_proxy_url + } do + Tesla.Mock.mock(fn + %{method: "head", url: ^media_proxy_url} -> + %Tesla.Env{status: 200, body: "", headers: [{"content-type", "image/gif"}]} + end) + + response = get(conn, url) + + assert response.status == 302 + assert redirected_to(response) == media_proxy_url + end + + test "with `static` param and non-GIF image preview requested, " <> + "redirects to media preview proxy URI without `static` param", + %{ + conn: conn, + url: url, + media_proxy_url: media_proxy_url + } do + Tesla.Mock.mock(fn + %{method: "head", url: ^media_proxy_url} -> + %Tesla.Env{status: 200, body: "", headers: [{"content-type", "image/jpeg"}]} + end) + + response = get(conn, url <> "?static=true") + + assert response.status == 302 + assert redirected_to(response) == url + end + + test "with :min_content_length setting not matched by Content-Length header, " <> + "redirects to media proxy URI", + %{ + conn: conn, + url: url, + media_proxy_url: media_proxy_url + } do + clear_config([:media_preview_proxy, :min_content_length], 100_000) + + Tesla.Mock.mock(fn + %{method: "head", url: ^media_proxy_url} -> + %Tesla.Env{ + status: 200, + body: "", + headers: [{"content-type", "image/gif"}, {"content-length", "5000"}] + } + end) + + response = get(conn, url) + + assert response.status == 302 + assert redirected_to(response) == media_proxy_url + end + + test "thumbnails PNG images into PNG", %{ + conn: conn, + url: url, + media_proxy_url: media_proxy_url + } do + Tesla.Mock.mock(fn + %{method: "head", url: ^media_proxy_url} -> + %Tesla.Env{status: 200, body: "", headers: [{"content-type", "image/png"}]} + + %{method: :get, url: ^media_proxy_url} -> + %Tesla.Env{status: 200, body: File.read!("test/fixtures/image.png")} + end) + + response = get(conn, url) + + assert response.status == 200 + assert Conn.get_resp_header(response, "content-type") == ["image/png"] + assert response.resp_body != "" + end + + test "thumbnails JPEG images into JPEG", %{ + conn: conn, + url: url, + media_proxy_url: media_proxy_url + } do + Tesla.Mock.mock(fn + %{method: "head", url: ^media_proxy_url} -> + %Tesla.Env{status: 200, body: "", headers: [{"content-type", "image/jpeg"}]} + + %{method: :get, url: ^media_proxy_url} -> + %Tesla.Env{status: 200, body: File.read!("test/fixtures/image.jpg")} + end) + + response = get(conn, url) + + assert response.status == 200 + assert Conn.get_resp_header(response, "content-type") == ["image/jpeg"] + assert response.resp_body != "" + end + + test "redirects to media proxy URI in case of thumbnailing error", %{ + conn: conn, + url: url, + media_proxy_url: media_proxy_url + } do + Tesla.Mock.mock(fn + %{method: "head", url: ^media_proxy_url} -> + %Tesla.Env{status: 200, body: "", headers: [{"content-type", "image/jpeg"}]} + + %{method: :get, url: ^media_proxy_url} -> + %Tesla.Env{status: 200, body: "error"} + end) + + response = get(conn, url) + + assert response.status == 302 + assert redirected_to(response) == media_proxy_url + end + end end From f7e40f7ef134a3030aa61114daa39810efb5889d Mon Sep 17 00:00:00 2001 From: Mark Felder Date: Thu, 17 Sep 2020 09:32:50 -0500 Subject: [PATCH 079/102] Deny ConfigDB migration when deprecated settings found --- lib/mix/tasks/pleroma/config.ex | 10 ++++- lib/pleroma/config/deprecation_warnings.ex | 43 ++++++++++++++++++---- test/tasks/config_test.exs | 13 +++++++ 3 files changed, 56 insertions(+), 10 deletions(-) diff --git a/lib/mix/tasks/pleroma/config.ex b/lib/mix/tasks/pleroma/config.ex index 904c5a74b..18f99318d 100644 --- a/lib/mix/tasks/pleroma/config.ex +++ b/lib/mix/tasks/pleroma/config.ex @@ -32,7 +32,8 @@ defmodule Mix.Tasks.Pleroma.Config do @spec migrate_to_db(Path.t() | nil) :: any() def migrate_to_db(file_path \\ nil) do - if Pleroma.Config.get([:configurable_from_database]) do + with true <- Pleroma.Config.get([:configurable_from_database]), + :ok <- Pleroma.Config.DeprecationWarnings.warn() do config_file = if file_path do file_path @@ -46,7 +47,8 @@ defmodule Mix.Tasks.Pleroma.Config do do_migrate_to_db(config_file) else - migration_error() + :error -> deprecation_error() + _ -> migration_error() end end @@ -120,6 +122,10 @@ defmodule Mix.Tasks.Pleroma.Config do ) end + defp deprecation_error do + shell_error("Migration is not allowed until all deprecation warnings have been resolved.") + end + if Code.ensure_loaded?(Config.Reader) do defp config_header, do: "import Config\r\n\r\n" defp read_file(config_file), do: Config.Reader.read_imports!(config_file) diff --git a/lib/pleroma/config/deprecation_warnings.ex b/lib/pleroma/config/deprecation_warnings.ex index 412d55a77..98c4dc9c8 100644 --- a/lib/pleroma/config/deprecation_warnings.ex +++ b/lib/pleroma/config/deprecation_warnings.ex @@ -26,6 +26,10 @@ defmodule Pleroma.Config.DeprecationWarnings do !!!DEPRECATION WARNING!!! You are using the old configuration mechanism for the hellthread filter. Please check config.md. """) + + :error + else + :ok end end @@ -47,17 +51,26 @@ defmodule Pleroma.Config.DeprecationWarnings do config :pleroma, :mrf_user_allowlist, #{inspect(rewritten, pretty: true)} """) + + :error + else + :ok end end def warn do - check_hellthread_threshold() - mrf_user_allowlist() - check_old_mrf_config() - check_media_proxy_whitelist_config() - check_welcome_message_config() - check_gun_pool_options() - check_activity_expiration_config() + with :ok <- check_hellthread_threshold(), + :ok <- mrf_user_allowlist(), + :ok <- check_old_mrf_config(), + :ok <- check_media_proxy_whitelist_config(), + :ok <- check_welcome_message_config(), + :ok <- check_gun_pool_options(), + :ok <- check_activity_expiration_config() do + :ok + else + _ -> + :error + end end def check_welcome_message_config do @@ -74,6 +87,10 @@ defmodule Pleroma.Config.DeprecationWarnings do \n* `config :pleroma, :instance, welcome_user_nickname` is now `config :pleroma, :welcome, :direct_message, :sender_nickname` \n* `config :pleroma, :instance, welcome_message` is now `config :pleroma, :welcome, :direct_message, :message` """) + + :error + else + :ok end end @@ -101,8 +118,11 @@ defmodule Pleroma.Config.DeprecationWarnings do end end) - if warning != "" do + if warning == "" do + :ok + else Logger.warn(warning_preface <> warning) + :error end end @@ -115,6 +135,10 @@ defmodule Pleroma.Config.DeprecationWarnings do !!!DEPRECATION WARNING!!! Your config is using old format (only domain) for MediaProxy whitelist option. Setting should work for now, but you are advised to change format to scheme with port to prevent possible issues later. """) + + :error + else + :ok end end @@ -157,6 +181,9 @@ defmodule Pleroma.Config.DeprecationWarnings do Logger.warn(Enum.join([warning_preface | pool_warnings])) Config.put(:pools, updated_config) + :error + else + :ok end end diff --git a/test/tasks/config_test.exs b/test/tasks/config_test.exs index fb12e7fb3..f36648829 100644 --- a/test/tasks/config_test.exs +++ b/test/tasks/config_test.exs @@ -40,6 +40,19 @@ defmodule Mix.Tasks.Pleroma.ConfigTest do on_exit(fn -> Application.put_env(:quack, :level, initial) end) end + @tag capture_log: true + test "config migration refused when deprecated settings are found" do + clear_config([:media_proxy, :whitelist], ["domain_without_scheme.com"]) + assert Repo.all(ConfigDB) == [] + + Mix.Tasks.Pleroma.Config.migrate_to_db("test/fixtures/config/temp.secret.exs") + + assert_received {:mix_shell, :error, [message]} + + assert message =~ + "Migration is not allowed until all deprecation warnings have been resolved." + end + test "filtered settings are migrated to db" do assert Repo.all(ConfigDB) == [] From dee4639dbb1245d4514b7b81d567321f9b4ee099 Mon Sep 17 00:00:00 2001 From: rinpatch Date: Mon, 14 Sep 2020 12:38:00 +0000 Subject: [PATCH 080/102] Merge branch 'feat/rich-media-head' into 'develop' RichMedia: Do a HEAD request to check content type/length See merge request pleroma/pleroma!2995 --- lib/pleroma/web/rich_media/helpers.ex | 46 ++++++++++++++++++++++++++- lib/pleroma/web/rich_media/parser.ex | 8 +++++ test/support/http_request_mock.ex | 17 ++++++++++ test/web/rich_media/parser_test.exs | 29 +++++++++++++++++ 4 files changed, 99 insertions(+), 1 deletion(-) diff --git a/lib/pleroma/web/rich_media/helpers.ex b/lib/pleroma/web/rich_media/helpers.ex index 752ca9f81..b7852c6e3 100644 --- a/lib/pleroma/web/rich_media/helpers.ex +++ b/lib/pleroma/web/rich_media/helpers.ex @@ -96,6 +96,50 @@ defmodule Pleroma.Web.RichMedia.Helpers do @rich_media_options end - Pleroma.HTTP.get(url, headers, adapter: options) + head_check = + case Pleroma.HTTP.head(url, headers, adapter: options) do + # If the HEAD request didn't reach the server for whatever reason, + # we assume the GET that comes right after won't either + {:error, _} = e -> + e + + {:ok, %Tesla.Env{status: 200, headers: headers}} -> + with :ok <- check_content_type(headers), + :ok <- check_content_length(headers), + do: :ok + + _ -> + :ok + end + + with :ok <- head_check, do: Pleroma.HTTP.get(url, headers, adapter: options) + end + + defp check_content_type(headers) do + case List.keyfind(headers, "content-type", 0) do + {_, content_type} -> + case Plug.Conn.Utils.media_type(content_type) do + {:ok, "text", "html", _} -> :ok + _ -> {:error, {:content_type, content_type}} + end + + _ -> + :ok + end + end + + @max_body @rich_media_options[:max_body] + defp check_content_length(headers) do + case List.keyfind(headers, "content-length", 0) do + {_, maybe_content_length} -> + case Integer.parse(maybe_content_length) do + {content_length, ""} when content_length <= @max_body -> :ok + {_, ""} -> {:error, :body_too_large} + _ -> :ok + end + + _ -> + :ok + end end end diff --git a/lib/pleroma/web/rich_media/parser.ex b/lib/pleroma/web/rich_media/parser.ex index e98c743ca..49ba22c90 100644 --- a/lib/pleroma/web/rich_media/parser.ex +++ b/lib/pleroma/web/rich_media/parser.ex @@ -31,6 +31,14 @@ defmodule Pleroma.Web.RichMedia.Parser do {:ok, _data} = res -> res + {:error, :body_too_large} = e -> + e + + {:error, {:content_type, _}} -> + e + + # The TTL is not set for the errors above, since they are unlikely to change + # with time {:error, _} = e -> ttl = Pleroma.Config.get([:rich_media, :failure_backoff], 60_000) Cachex.expire(:rich_media_cache, url, ttl) diff --git a/test/support/http_request_mock.ex b/test/support/http_request_mock.ex index a0ebf65d9..d9be248dc 100644 --- a/test/support/http_request_mock.ex +++ b/test/support/http_request_mock.ex @@ -1436,4 +1436,21 @@ defmodule HttpRequestMock do inspect(headers) }"} end + + # Most of the rich media mocks are missing HEAD requests, so we just return 404. + @rich_media_mocks [ + "https://example.com/ogp", + "https://example.com/ogp-missing-data", + "https://example.com/twitter-card" + ] + def head(url, _query, _body, _headers) when url in @rich_media_mocks do + {:ok, %Tesla.Env{status: 404, body: ""}} + end + + def head(url, query, body, headers) do + {:error, + "Mock response not implemented for HEAD #{inspect(url)}, #{query}, #{inspect(body)}, #{ + inspect(headers) + }"} + end end diff --git a/test/web/rich_media/parser_test.exs b/test/web/rich_media/parser_test.exs index 1e09cbf84..b8ef2cccf 100644 --- a/test/web/rich_media/parser_test.exs +++ b/test/web/rich_media/parser_test.exs @@ -56,6 +56,27 @@ defmodule Pleroma.Web.RichMedia.ParserTest do %{method: :get, url: "http://example.com/error"} -> {:error, :overload} + + %{ + method: :head, + url: "http://example.com/huge-page" + } -> + %Tesla.Env{ + status: 200, + headers: [{"content-length", "2000001"}, {"content-type", "text/html"}] + } + + %{ + method: :head, + url: "http://example.com/pdf-file" + } -> + %Tesla.Env{ + status: 200, + headers: [{"content-length", "1000000"}, {"content-type", "application/pdf"}] + } + + %{method: :head} -> + %Tesla.Env{status: 404, body: "", headers: []} end) :ok @@ -146,4 +167,12 @@ defmodule Pleroma.Web.RichMedia.ParserTest do test "returns error if getting page was not successful" do assert {:error, :overload} = Parser.parse("http://example.com/error") end + + test "does a HEAD request to check if the body is too large" do + assert {:error, :body_too_large} = Parser.parse("http://example.com/huge-page") + end + + test "does a HEAD request to check if the body is html" do + assert {:error, {:content_type, _}} = Parser.parse("http://example.com/pdf-file") + end end From eff7f9892dbb042a447fd83e1ce5e9cb69941cf6 Mon Sep 17 00:00:00 2001 From: rinpatch Date: Mon, 14 Sep 2020 12:48:27 +0000 Subject: [PATCH 081/102] Merge branch 'hotfix/rich-media-compile-error' into 'develop' RichMedia: fix a compilation error due to nonexistent variable See merge request pleroma/pleroma!2996 --- lib/pleroma/web/rich_media/parser.ex | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/pleroma/web/rich_media/parser.ex b/lib/pleroma/web/rich_media/parser.ex index 49ba22c90..569249f51 100644 --- a/lib/pleroma/web/rich_media/parser.ex +++ b/lib/pleroma/web/rich_media/parser.ex @@ -34,7 +34,7 @@ defmodule Pleroma.Web.RichMedia.Parser do {:error, :body_too_large} = e -> e - {:error, {:content_type, _}} -> + {:error, {:content_type, _}} = e -> e # The TTL is not set for the errors above, since they are unlikely to change From 41939e3175cf31884cb84acd136c303a84c77f8c Mon Sep 17 00:00:00 2001 From: stwf Date: Mon, 14 Sep 2020 11:40:52 -0400 Subject: [PATCH 082/102] User search respect discoverable flag --- lib/pleroma/user/search.ex | 5 +++ .../tesla_mock/admin@mastdon.example.org.json | 44 +++++++++++-------- ...ps___osada.macgirvin.com_channel_mike.json | 3 +- test/support/factory.ex | 1 + test/web/admin_api/search_test.exs | 9 ++++ .../mastodon_api/views/account_view_test.exs | 4 +- 6 files changed, 45 insertions(+), 21 deletions(-) diff --git a/lib/pleroma/user/search.ex b/lib/pleroma/user/search.ex index 7babd47ea..b8c648672 100644 --- a/lib/pleroma/user/search.ex +++ b/lib/pleroma/user/search.ex @@ -52,6 +52,7 @@ defmodule Pleroma.User.Search do |> base_query(following) |> filter_blocked_user(for_user) |> filter_invisible_users() + |> filter_discoverable_users() |> filter_internal_users() |> filter_blocked_domains(for_user) |> fts_search(query_string) @@ -122,6 +123,10 @@ defmodule Pleroma.User.Search do from(q in query, where: q.invisible == false) end + defp filter_discoverable_users(query) do + from(q in query, where: q.discoverable == true) + end + defp filter_internal_users(query) do from(q in query, where: q.actor_type != "Application") end diff --git a/test/fixtures/tesla_mock/admin@mastdon.example.org.json b/test/fixtures/tesla_mock/admin@mastdon.example.org.json index a911b979a..f961ccb36 100644 --- a/test/fixtures/tesla_mock/admin@mastdon.example.org.json +++ b/test/fixtures/tesla_mock/admin@mastdon.example.org.json @@ -1,20 +1,24 @@ { - "@context": ["https://www.w3.org/ns/activitystreams", "https://w3id.org/security/v1", { - "manuallyApprovesFollowers": "as:manuallyApprovesFollowers", - "sensitive": "as:sensitive", - "movedTo": "as:movedTo", - "Hashtag": "as:Hashtag", - "ostatus": "http://ostatus.org#", - "atomUri": "ostatus:atomUri", - "inReplyToAtomUri": "ostatus:inReplyToAtomUri", - "conversation": "ostatus:conversation", - "toot": "http://joinmastodon.org/ns#", - "Emoji": "toot:Emoji", - "alsoKnownAs": { - "@id": "as:alsoKnownAs", - "@type": "@id" + "@context": [ + "https://www.w3.org/ns/activitystreams", + "https://w3id.org/security/v1", + { + "manuallyApprovesFollowers": "as:manuallyApprovesFollowers", + "sensitive": "as:sensitive", + "movedTo": "as:movedTo", + "Hashtag": "as:Hashtag", + "ostatus": "http://ostatus.org#", + "atomUri": "ostatus:atomUri", + "inReplyToAtomUri": "ostatus:inReplyToAtomUri", + "conversation": "ostatus:conversation", + "toot": "http://joinmastodon.org/ns#", + "Emoji": "toot:Emoji", + "alsoKnownAs": { + "@id": "as:alsoKnownAs", + "@type": "@id" + } } - }], + ], "id": "http://mastodon.example.org/users/admin", "type": "Person", "following": "http://mastodon.example.org/users/admin/following", @@ -23,6 +27,7 @@ "outbox": "http://mastodon.example.org/users/admin/outbox", "preferredUsername": "admin", "name": null, + "discoverable": "true", "summary": "\u003cp\u003e\u003c/p\u003e", "url": "http://mastodon.example.org/@admin", "manuallyApprovesFollowers": false, @@ -34,7 +39,8 @@ "owner": "http://mastodon.example.org/users/admin", "publicKeyPem": "-----BEGIN PUBLIC KEY-----\nMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAtc4Tir+3ADhSNF6VKrtW\nOU32T01w7V0yshmQei38YyiVwVvFu8XOP6ACchkdxbJ+C9mZud8qWaRJKVbFTMUG\nNX4+6Q+FobyuKrwN7CEwhDALZtaN2IPbaPd6uG1B7QhWorrY+yFa8f2TBM3BxnUy\nI4T+bMIZIEYG7KtljCBoQXuTQmGtuffO0UwJksidg2ffCF5Q+K//JfQagJ3UzrR+\nZXbKMJdAw4bCVJYs4Z5EhHYBwQWiXCyMGTd7BGlmMkY6Av7ZqHKC/owp3/0EWDNz\nNqF09Wcpr3y3e8nA10X40MJqp/wR+1xtxp+YGbq/Cj5hZGBG7etFOmIpVBrDOhry\nBwIDAQAB\n-----END PUBLIC KEY-----\n" }, - "attachment": [{ + "attachment": [ + { "type": "PropertyValue", "name": "foo", "value": "bar" @@ -58,5 +64,7 @@ "mediaType": "image/png", "url": "https://cdn.niu.moe/accounts/headers/000/033/323/original/850b3448fa5fd477.png" }, - "alsoKnownAs": ["http://example.org/users/foo"] -} + "alsoKnownAs": [ + "http://example.org/users/foo" + ] +} \ No newline at end of file diff --git a/test/fixtures/tesla_mock/https___osada.macgirvin.com_channel_mike.json b/test/fixtures/tesla_mock/https___osada.macgirvin.com_channel_mike.json index c42f3a53c..ca76d6e17 100644 --- a/test/fixtures/tesla_mock/https___osada.macgirvin.com_channel_mike.json +++ b/test/fixtures/tesla_mock/https___osada.macgirvin.com_channel_mike.json @@ -8,6 +8,7 @@ "preferredUsername": "mike", "name": "Mike Macgirvin (Osada)", "updated": "2018-08-29T03:09:11Z", + "discoverable": "true", "icon": { "type": "Image", "mediaType": "image/jpeg", @@ -51,4 +52,4 @@ "created": "2018-10-17T07:16:28Z", "signatureValue": "WbfFVIPImkd3yNu6brz0CvZaeV242rwAbH0vy8DM4vfnXCxLr5Uv/Wj9gwP+tbooTxGaahAKBeqlGkQp8RLEo37LATrKMRLA/0V6DeeV+C5ORWR9B4WxyWiD3s/9Wf+KesFMtktNLAcMZ5PfnOS/xNYerhnpkp/gWPxtkglmLIWJv+w18A5zZ01JCxsO4QljHbhYaEUPHUfQ97abrkLECeam+FThVwdO6BFCtbjoNXHfzjpSZL/oKyBpi5/fpnqMqOLOQPs5WgBBZJvjEYYkQcoPTyxYI5NGpNbzIjGHPQNuACnOelH16A7L+q4swLWDIaEFeXQ2/5bmqVKZDZZ6usNP4QyTVszwd8jqo27qcDTNibXDUTsTdKpNQvM/3UncBuzuzmUV3FczhtGshIU1/pRVZiQycpVqPlGLvXhP/yZCe+1siyqDd+3uMaS2vkHTObSl5r+VYof+c+TcjrZXHSWnQTg8/X3zkoBWosrQ93VZcwjzMxQoARYv6rphbOoTz7RPmGAXYUt3/PDWkqDlmQDwCpLNNkJo1EidyefZBdD9HXQpCBO0ZU0NHb0JmPvg/+zU0krxlv70bm3RHA/maBETVjroIWzt7EwQEg5pL2hVnvSBG+1wF3BtRVe77etkPOHxLnYYIcAMLlVKCcgDd89DPIziQyruvkx1busHI08=" } -} +} \ No newline at end of file diff --git a/test/support/factory.ex b/test/support/factory.ex index 2fdfabbc5..fb82be0c4 100644 --- a/test/support/factory.ex +++ b/test/support/factory.ex @@ -31,6 +31,7 @@ defmodule Pleroma.Factory do nickname: sequence(:nickname, &"nick#{&1}"), password_hash: Pbkdf2.hash_pwd_salt("test"), bio: sequence(:bio, &"Tester Number #{&1}"), + discoverable: true, last_digest_emailed_at: NaiveDateTime.utc_now(), last_refreshed_at: NaiveDateTime.utc_now(), notification_settings: %Pleroma.User.NotificationSetting{}, diff --git a/test/web/admin_api/search_test.exs b/test/web/admin_api/search_test.exs index b974cedd5..d88867c52 100644 --- a/test/web/admin_api/search_test.exs +++ b/test/web/admin_api/search_test.exs @@ -177,5 +177,14 @@ defmodule Pleroma.Web.AdminAPI.SearchTest do assert total == 3 assert count == 1 end + + test "it returns non-discoverable users" do + insert(:user) + insert(:user, discoverable: false) + + {:ok, _results, total} = Search.user() + + assert total == 2 + end end end diff --git a/test/web/mastodon_api/views/account_view_test.exs b/test/web/mastodon_api/views/account_view_test.exs index c5f491d6b..a54b765ef 100644 --- a/test/web/mastodon_api/views/account_view_test.exs +++ b/test/web/mastodon_api/views/account_view_test.exs @@ -68,7 +68,7 @@ defmodule Pleroma.Web.MastodonAPI.AccountViewTest do sensitive: false, pleroma: %{ actor_type: "Person", - discoverable: false + discoverable: true }, fields: [] }, @@ -166,7 +166,7 @@ defmodule Pleroma.Web.MastodonAPI.AccountViewTest do sensitive: false, pleroma: %{ actor_type: "Service", - discoverable: false + discoverable: true }, fields: [] }, From dfc621a5291a761f025670153bb58a2005fd0a73 Mon Sep 17 00:00:00 2001 From: stwf Date: Thu, 17 Sep 2020 10:13:56 -0400 Subject: [PATCH 083/102] add test and changelog entry --- CHANGELOG.md | 2 +- test/user_search_test.exs | 8 ++++++++ 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 6072d4cbe..5d329fd55 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -10,8 +10,8 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/). - Renamed `:await_up_timeout` in `:connections_pool` namespace to `:connect_timeout`, old name is deprecated. - Renamed `:timeout` in `pools` namespace to `:recv_timeout`, old name is deprecated. - The `discoverable` field in the `User` struct will now add a NOINDEX metatag to profile pages when false. +- Users with the `discoverable` field set to false will not show up in searches. - Minimum lifetime for ephmeral activities changed to 10 minutes and made configurable (`:min_lifetime` option). - ### Removed - **Breaking:** `Pleroma.Workers.Cron.StatsWorker` setting from Oban `:crontab` (moved to a simpler implementation). diff --git a/test/user_search_test.exs b/test/user_search_test.exs index 01976bf58..8529ce6db 100644 --- a/test/user_search_test.exs +++ b/test/user_search_test.exs @@ -25,6 +25,14 @@ defmodule Pleroma.UserSearchTest do assert found_user.id == user.id end + test "excludes users when discoverable is false" do + insert(:user, %{nickname: "john 3000", discoverable: false}) + insert(:user, %{nickname: "john 3001"}) + + users = User.search("john") + assert Enum.count(users) == 1 + end + test "excludes service actors from results" do insert(:user, actor_type: "Application", nickname: "user1") service = insert(:user, actor_type: "Service", nickname: "user2") From 9d77f4abf80f75559456cef06da1a0d3b3b4f7e2 Mon Sep 17 00:00:00 2001 From: stwf Date: Thu, 17 Sep 2020 12:32:40 -0400 Subject: [PATCH 084/102] adapt to new user factory behavior --- test/web/metadata/metadata_test.exs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/test/web/metadata/metadata_test.exs b/test/web/metadata/metadata_test.exs index 054844597..ca6cbe67f 100644 --- a/test/web/metadata/metadata_test.exs +++ b/test/web/metadata/metadata_test.exs @@ -16,7 +16,7 @@ defmodule Pleroma.Web.MetadataTest do end test "for local user" do - user = insert(:user) + user = insert(:user, discoverable: false) assert Pleroma.Web.Metadata.build_tags(%{user: user}) =~ "" @@ -40,7 +40,7 @@ defmodule Pleroma.Web.MetadataTest do test "search exclusion metadata is included" do clear_config([:instance, :public], false) - user = insert(:user, bio: "This is my secret fedi account bio") + user = insert(:user, bio: "This is my secret fedi account bio", discoverable: false) assert ~s() == Pleroma.Web.Metadata.build_tags(%{user: user}) From 22d49993d9ab35ff5d5276a6a1f4aec96d03b7f3 Mon Sep 17 00:00:00 2001 From: rinpatch Date: Thu, 17 Sep 2020 12:13:36 +0000 Subject: [PATCH 085/102] Merge branch 'bugfix/mrf-ingestion' into 'develop' Bugfix: MRF and Pipeline Ingestion See merge request pleroma/secteam/pleroma!15 --- CHANGELOG.md | 11 ++++ lib/pleroma/web/activity_pub/mrf.ex | 24 +++++++- .../web/activity_pub/mrf/keyword_policy.ex | 61 +++++++++---------- .../web/activity_pub/mrf/subchain_policy.ex | 3 +- lib/pleroma/web/activity_pub/pipeline.ex | 8 ++- .../web/api_spec/operations/chat_operation.ex | 3 +- .../api_spec/operations/status_operation.ex | 2 +- lib/pleroma/web/common_api/common_api.ex | 3 + .../controllers/chat_controller.ex | 10 +++ test/web/activity_pub/pipeline_test.exs | 16 ++--- test/web/common_api/common_api_test.exs | 11 ++++ .../controllers/chat_controller_test.exs | 19 +++++- 12 files changed, 121 insertions(+), 50 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 92635f6d0..7125e6c1d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,6 +3,17 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/). +## unreleased-patch - ??? + +### Security + +- Fix most MRF rules either crashing or not being applied to objects passed into the Common Pipeline (ChatMessage, Question, Answer, Audio, Event) + +### Fixed + +- Welcome Chat messages preventing user registration with MRF Simple Policy applied to the local instance +- Mastodon API: the public timeline returning an error when the `reply_visibility` parameter is set to `self` for an unauthenticated user + ## [2.1.1] - 2020-09-08 ### Security diff --git a/lib/pleroma/web/activity_pub/mrf.ex b/lib/pleroma/web/activity_pub/mrf.ex index 206d6af52..5e5361082 100644 --- a/lib/pleroma/web/activity_pub/mrf.ex +++ b/lib/pleroma/web/activity_pub/mrf.ex @@ -5,16 +5,34 @@ defmodule Pleroma.Web.ActivityPub.MRF do @callback filter(Map.t()) :: {:ok | :reject, Map.t()} - def filter(policies, %{} = object) do + def filter(policies, %{} = message) do policies - |> Enum.reduce({:ok, object}, fn - policy, {:ok, object} -> policy.filter(object) + |> Enum.reduce({:ok, message}, fn + policy, {:ok, message} -> policy.filter(message) _, error -> error end) end def filter(%{} = object), do: get_policies() |> filter(object) + def pipeline_filter(%{} = message, meta) do + object = meta[:object_data] + ap_id = message["object"] + + if object && ap_id do + with {:ok, message} <- filter(Map.put(message, "object", object)) do + meta = Keyword.put(meta, :object_data, message["object"]) + {:ok, Map.put(message, "object", ap_id), meta} + else + {err, message} -> {err, message, meta} + end + else + {err, message} = filter(message) + + {err, message, meta} + end + end + def get_policies do Pleroma.Config.get([:mrf, :policies], []) |> get_policies() end diff --git a/lib/pleroma/web/activity_pub/mrf/keyword_policy.ex b/lib/pleroma/web/activity_pub/mrf/keyword_policy.ex index 15e09dcf0..db66cfa3e 100644 --- a/lib/pleroma/web/activity_pub/mrf/keyword_policy.ex +++ b/lib/pleroma/web/activity_pub/mrf/keyword_policy.ex @@ -20,9 +20,17 @@ defmodule Pleroma.Web.ActivityPub.MRF.KeywordPolicy do String.match?(string, pattern) end - defp check_reject(%{"object" => %{"content" => content, "summary" => summary}} = message) do + defp object_payload(%{} = object) do + [object["content"], object["summary"], object["name"]] + |> Enum.filter(& &1) + |> Enum.join("\n") + end + + defp check_reject(%{"object" => %{} = object} = message) do + payload = object_payload(object) + if Enum.any?(Pleroma.Config.get([:mrf_keyword, :reject]), fn pattern -> - string_matches?(content, pattern) or string_matches?(summary, pattern) + string_matches?(payload, pattern) end) do {:reject, "[KeywordPolicy] Matches with rejected keyword"} else @@ -30,12 +38,12 @@ defmodule Pleroma.Web.ActivityPub.MRF.KeywordPolicy do end end - defp check_ftl_removal( - %{"to" => to, "object" => %{"content" => content, "summary" => summary}} = message - ) do + defp check_ftl_removal(%{"to" => to, "object" => %{} = object} = message) do + payload = object_payload(object) + if Pleroma.Constants.as_public() in to and Enum.any?(Pleroma.Config.get([:mrf_keyword, :federated_timeline_removal]), fn pattern -> - string_matches?(content, pattern) or string_matches?(summary, pattern) + string_matches?(payload, pattern) end) do to = List.delete(to, Pleroma.Constants.as_public()) cc = [Pleroma.Constants.as_public() | message["cc"] || []] @@ -51,35 +59,24 @@ defmodule Pleroma.Web.ActivityPub.MRF.KeywordPolicy do end end - defp check_replace(%{"object" => %{"content" => content, "summary" => summary}} = message) do - content = - if is_binary(content) do - content - else - "" - end + defp check_replace(%{"object" => %{} = object} = message) do + object = + ["content", "name", "summary"] + |> Enum.filter(fn field -> Map.has_key?(object, field) && object[field] end) + |> Enum.reduce(object, fn field, object -> + data = + Enum.reduce( + Pleroma.Config.get([:mrf_keyword, :replace]), + object[field], + fn {pat, repl}, acc -> String.replace(acc, pat, repl) end + ) - summary = - if is_binary(summary) do - summary - else - "" - end + Map.put(object, field, data) + end) - {content, summary} = - Enum.reduce( - Pleroma.Config.get([:mrf_keyword, :replace]), - {content, summary}, - fn {pattern, replacement}, {content_acc, summary_acc} -> - {String.replace(content_acc, pattern, replacement), - String.replace(summary_acc, pattern, replacement)} - end - ) + message = Map.put(message, "object", object) - {:ok, - message - |> put_in(["object", "content"], content) - |> put_in(["object", "summary"], summary)} + {:ok, message} end @impl true diff --git a/lib/pleroma/web/activity_pub/mrf/subchain_policy.ex b/lib/pleroma/web/activity_pub/mrf/subchain_policy.ex index c9f20571f..048052da6 100644 --- a/lib/pleroma/web/activity_pub/mrf/subchain_policy.ex +++ b/lib/pleroma/web/activity_pub/mrf/subchain_policy.ex @@ -28,8 +28,7 @@ defmodule Pleroma.Web.ActivityPub.MRF.SubchainPolicy do }" ) - subchain - |> MRF.filter(message) + MRF.filter(subchain, message) else _e -> {:ok, message} end diff --git a/lib/pleroma/web/activity_pub/pipeline.ex b/lib/pleroma/web/activity_pub/pipeline.ex index 36e325c37..2db86f116 100644 --- a/lib/pleroma/web/activity_pub/pipeline.ex +++ b/lib/pleroma/web/activity_pub/pipeline.ex @@ -26,13 +26,17 @@ defmodule Pleroma.Web.ActivityPub.Pipeline do {:error, e} -> {:error, e} + + {:reject, e} -> + {:reject, e} end end def do_common_pipeline(object, meta) do with {_, {:ok, validated_object, meta}} <- {:validate_object, ObjectValidator.validate(object, meta)}, - {_, {:ok, mrfd_object}} <- {:mrf_object, MRF.filter(validated_object)}, + {_, {:ok, mrfd_object, meta}} <- + {:mrf_object, MRF.pipeline_filter(validated_object, meta)}, {_, {:ok, activity, meta}} <- {:persist_object, ActivityPub.persist(mrfd_object, meta)}, {_, {:ok, activity, meta}} <- @@ -40,7 +44,7 @@ defmodule Pleroma.Web.ActivityPub.Pipeline do {_, {:ok, _}} <- {:federation, maybe_federate(activity, meta)} do {:ok, activity, meta} else - {:mrf_object, {:reject, _}} -> {:ok, nil, meta} + {:mrf_object, {:reject, message, _}} -> {:reject, message} e -> {:error, e} end end diff --git a/lib/pleroma/web/api_spec/operations/chat_operation.ex b/lib/pleroma/web/api_spec/operations/chat_operation.ex index b1a0d26ab..56554d5b4 100644 --- a/lib/pleroma/web/api_spec/operations/chat_operation.ex +++ b/lib/pleroma/web/api_spec/operations/chat_operation.ex @@ -184,7 +184,8 @@ defmodule Pleroma.Web.ApiSpec.ChatOperation do "application/json", ChatMessage ), - 400 => Operation.response("Bad Request", "application/json", ApiError) + 400 => Operation.response("Bad Request", "application/json", ApiError), + 422 => Operation.response("MRF Rejection", "application/json", ApiError) }, security: [ %{ diff --git a/lib/pleroma/web/api_spec/operations/status_operation.ex b/lib/pleroma/web/api_spec/operations/status_operation.ex index 5bd4619d5..d7ebde6f6 100644 --- a/lib/pleroma/web/api_spec/operations/status_operation.ex +++ b/lib/pleroma/web/api_spec/operations/status_operation.ex @@ -55,7 +55,7 @@ defmodule Pleroma.Web.ApiSpec.StatusOperation do "application/json", %Schema{oneOf: [Status, ScheduledStatus]} ), - 422 => Operation.response("Bad Request", "application/json", ApiError) + 422 => Operation.response("Bad Request / MRF Rejection", "application/json", ApiError) } } end diff --git a/lib/pleroma/web/common_api/common_api.ex b/lib/pleroma/web/common_api/common_api.ex index 5ad2b91c2..3c7b9e794 100644 --- a/lib/pleroma/web/common_api/common_api.ex +++ b/lib/pleroma/web/common_api/common_api.ex @@ -49,6 +49,9 @@ defmodule Pleroma.Web.CommonAPI do local: true )} do {:ok, activity} + else + {:common_pipeline, {:reject, _} = e} -> e + e -> e end end diff --git a/lib/pleroma/web/pleroma_api/controllers/chat_controller.ex b/lib/pleroma/web/pleroma_api/controllers/chat_controller.ex index 1f2e953f7..ea0921c77 100644 --- a/lib/pleroma/web/pleroma_api/controllers/chat_controller.ex +++ b/lib/pleroma/web/pleroma_api/controllers/chat_controller.ex @@ -90,6 +90,16 @@ defmodule Pleroma.Web.PleromaAPI.ChatController do conn |> put_view(MessageReferenceView) |> render("show.json", chat_message_reference: cm_ref) + else + {:reject, message} -> + conn + |> put_status(:unprocessable_entity) + |> json(%{error: message}) + + {:error, message} -> + conn + |> put_status(:bad_request) + |> json(%{error: message}) end end diff --git a/test/web/activity_pub/pipeline_test.exs b/test/web/activity_pub/pipeline_test.exs index f2a231eaf..210a06563 100644 --- a/test/web/activity_pub/pipeline_test.exs +++ b/test/web/activity_pub/pipeline_test.exs @@ -26,7 +26,7 @@ defmodule Pleroma.Web.ActivityPub.PipelineTest do { Pleroma.Web.ActivityPub.MRF, [], - [filter: fn o -> {:ok, o} end] + [pipeline_filter: fn o, m -> {:ok, o, m} end] }, { Pleroma.Web.ActivityPub.ActivityPub, @@ -51,7 +51,7 @@ defmodule Pleroma.Web.ActivityPub.PipelineTest do Pleroma.Web.ActivityPub.Pipeline.common_pipeline(activity, meta) assert_called(Pleroma.Web.ActivityPub.ObjectValidator.validate(activity, meta)) - assert_called(Pleroma.Web.ActivityPub.MRF.filter(activity)) + assert_called(Pleroma.Web.ActivityPub.MRF.pipeline_filter(activity, meta)) assert_called(Pleroma.Web.ActivityPub.ActivityPub.persist(activity, meta)) assert_called(Pleroma.Web.ActivityPub.SideEffects.handle(activity, meta)) refute called(Pleroma.Web.Federator.publish(activity)) @@ -68,7 +68,7 @@ defmodule Pleroma.Web.ActivityPub.PipelineTest do { Pleroma.Web.ActivityPub.MRF, [], - [filter: fn o -> {:ok, o} end] + [pipeline_filter: fn o, m -> {:ok, o, m} end] }, { Pleroma.Web.ActivityPub.ActivityPub, @@ -93,7 +93,7 @@ defmodule Pleroma.Web.ActivityPub.PipelineTest do Pleroma.Web.ActivityPub.Pipeline.common_pipeline(activity, meta) assert_called(Pleroma.Web.ActivityPub.ObjectValidator.validate(activity, meta)) - assert_called(Pleroma.Web.ActivityPub.MRF.filter(activity)) + assert_called(Pleroma.Web.ActivityPub.MRF.pipeline_filter(activity, meta)) assert_called(Pleroma.Web.ActivityPub.ActivityPub.persist(activity, meta)) assert_called(Pleroma.Web.ActivityPub.SideEffects.handle(activity, meta)) assert_called(Pleroma.Web.Federator.publish(activity)) @@ -109,7 +109,7 @@ defmodule Pleroma.Web.ActivityPub.PipelineTest do { Pleroma.Web.ActivityPub.MRF, [], - [filter: fn o -> {:ok, o} end] + [pipeline_filter: fn o, m -> {:ok, o, m} end] }, { Pleroma.Web.ActivityPub.ActivityPub, @@ -131,7 +131,7 @@ defmodule Pleroma.Web.ActivityPub.PipelineTest do Pleroma.Web.ActivityPub.Pipeline.common_pipeline(activity, meta) assert_called(Pleroma.Web.ActivityPub.ObjectValidator.validate(activity, meta)) - assert_called(Pleroma.Web.ActivityPub.MRF.filter(activity)) + assert_called(Pleroma.Web.ActivityPub.MRF.pipeline_filter(activity, meta)) assert_called(Pleroma.Web.ActivityPub.ActivityPub.persist(activity, meta)) assert_called(Pleroma.Web.ActivityPub.SideEffects.handle(activity, meta)) end @@ -148,7 +148,7 @@ defmodule Pleroma.Web.ActivityPub.PipelineTest do { Pleroma.Web.ActivityPub.MRF, [], - [filter: fn o -> {:ok, o} end] + [pipeline_filter: fn o, m -> {:ok, o, m} end] }, { Pleroma.Web.ActivityPub.ActivityPub, @@ -170,7 +170,7 @@ defmodule Pleroma.Web.ActivityPub.PipelineTest do Pleroma.Web.ActivityPub.Pipeline.common_pipeline(activity, meta) assert_called(Pleroma.Web.ActivityPub.ObjectValidator.validate(activity, meta)) - assert_called(Pleroma.Web.ActivityPub.MRF.filter(activity)) + assert_called(Pleroma.Web.ActivityPub.MRF.pipeline_filter(activity, meta)) assert_called(Pleroma.Web.ActivityPub.ActivityPub.persist(activity, meta)) assert_called(Pleroma.Web.ActivityPub.SideEffects.handle(activity, meta)) end diff --git a/test/web/common_api/common_api_test.exs b/test/web/common_api/common_api_test.exs index 4ba6232dc..28bb6db30 100644 --- a/test/web/common_api/common_api_test.exs +++ b/test/web/common_api/common_api_test.exs @@ -213,6 +213,17 @@ defmodule Pleroma.Web.CommonAPITest do assert message == :content_too_long end + + test "it reject messages via MRF" do + clear_config([:mrf_keyword, :reject], ["GNO"]) + clear_config([:mrf, :policies], [Pleroma.Web.ActivityPub.MRF.KeywordPolicy]) + + author = insert(:user) + recipient = insert(:user) + + assert {:reject, "[KeywordPolicy] Matches with rejected keyword"} == + CommonAPI.post_chat_message(author, recipient, "GNO/Linux") + end end describe "unblocking" do diff --git a/test/web/pleroma_api/controllers/chat_controller_test.exs b/test/web/pleroma_api/controllers/chat_controller_test.exs index 7be5fe09c..44a78a738 100644 --- a/test/web/pleroma_api/controllers/chat_controller_test.exs +++ b/test/web/pleroma_api/controllers/chat_controller_test.exs @@ -100,7 +100,7 @@ defmodule Pleroma.Web.PleromaAPI.ChatControllerTest do |> post("/api/v1/pleroma/chats/#{chat.id}/messages") |> json_response_and_validate_schema(400) - assert result + assert %{"error" => "no_content"} == result end test "it works with an attachment", %{conn: conn, user: user} do @@ -126,6 +126,23 @@ defmodule Pleroma.Web.PleromaAPI.ChatControllerTest do assert result["attachment"] end + + test "gets MRF reason when rejected", %{conn: conn, user: user} do + clear_config([:mrf_keyword, :reject], ["GNO"]) + clear_config([:mrf, :policies], [Pleroma.Web.ActivityPub.MRF.KeywordPolicy]) + + other_user = insert(:user) + + {:ok, chat} = Chat.get_or_create(user.id, other_user.ap_id) + + result = + conn + |> put_req_header("content-type", "application/json") + |> post("/api/v1/pleroma/chats/#{chat.id}/messages", %{"content" => "GNO/Linux"}) + |> json_response_and_validate_schema(422) + + assert %{"error" => "[KeywordPolicy] Matches with rejected keyword"} == result + end end describe "DELETE /api/v1/pleroma/chats/:id/messages/:message_id" do From bb70b231d023c6e9f998a6be58f66ae3ff603157 Mon Sep 17 00:00:00 2001 From: lain Date: Tue, 15 Sep 2020 12:21:38 +0000 Subject: [PATCH 086/102] Merge branch 'reply-visibility-user-guard' into 'develop' Mastodon API: fix the public timeline returning an error when the `reply_visibility` parameter is set to `self` for an unauthenticated user See merge request pleroma/pleroma!2999 --- lib/pleroma/web/activity_pub/activity_pub.ex | 4 ++-- test/web/activity_pub/activity_pub_test.exs | 8 ++++++++ 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/lib/pleroma/web/activity_pub/activity_pub.ex b/lib/pleroma/web/activity_pub/activity_pub.ex index 624a508ae..e4eafc8ac 100644 --- a/lib/pleroma/web/activity_pub/activity_pub.ex +++ b/lib/pleroma/web/activity_pub/activity_pub.ex @@ -744,7 +744,7 @@ defmodule Pleroma.Web.ActivityPub.ActivityPub do end defp restrict_replies(query, %{ - reply_filtering_user: user, + reply_filtering_user: %User{} = user, reply_visibility: "self" }) do from( @@ -760,7 +760,7 @@ defmodule Pleroma.Web.ActivityPub.ActivityPub do end defp restrict_replies(query, %{ - reply_filtering_user: user, + reply_filtering_user: %User{} = user, reply_visibility: "following" }) do from( diff --git a/test/web/activity_pub/activity_pub_test.exs b/test/web/activity_pub/activity_pub_test.exs index 03f968aaf..b579bb0bb 100644 --- a/test/web/activity_pub/activity_pub_test.exs +++ b/test/web/activity_pub/activity_pub_test.exs @@ -1773,6 +1773,14 @@ defmodule Pleroma.Web.ActivityPub.ActivityPubTest do |> Enum.map(& &1.id) assert activities_ids == [] + + activities_ids = + %{} + |> Map.put(:reply_visibility, "self") + |> Map.put(:reply_filtering_user, nil) + |> ActivityPub.fetch_public_activities() + + assert activities_ids == [] end test "home timeline", %{users: %{u1: user}} do From 0465bdbd49ad729e9aec0b3f330607386f433d5d Mon Sep 17 00:00:00 2001 From: Haelwenn Date: Tue, 15 Sep 2020 08:25:10 +0000 Subject: [PATCH 087/102] Merge branch 'fix/mrf-simple-welcome-chats' into 'develop' Ensure we only apply media_nsfw simple policy on parsable objects Closes #2133 See merge request pleroma/pleroma!2992 --- .../web/activity_pub/mrf/simple_policy.ex | 3 +- .../web/activity_pub/transmogrifier.ex | 2 +- test/user_test.exs | 39 +++++++++++++++++++ 3 files changed, 42 insertions(+), 2 deletions(-) diff --git a/lib/pleroma/web/activity_pub/mrf/simple_policy.ex b/lib/pleroma/web/activity_pub/mrf/simple_policy.ex index bb193475a..161177727 100644 --- a/lib/pleroma/web/activity_pub/mrf/simple_policy.ex +++ b/lib/pleroma/web/activity_pub/mrf/simple_policy.ex @@ -66,7 +66,8 @@ defmodule Pleroma.Web.ActivityPub.MRF.SimplePolicy do "type" => "Create", "object" => child_object } = object - ) do + ) + when is_map(child_object) do media_nsfw = Config.get([:mrf_simple, :media_nsfw]) |> MRF.subdomains_regex() diff --git a/lib/pleroma/web/activity_pub/transmogrifier.ex b/lib/pleroma/web/activity_pub/transmogrifier.ex index 76298c4a0..63dd227c1 100644 --- a/lib/pleroma/web/activity_pub/transmogrifier.ex +++ b/lib/pleroma/web/activity_pub/transmogrifier.ex @@ -311,7 +311,7 @@ defmodule Pleroma.Web.ActivityPub.Transmogrifier do def fix_emoji(%{"tag" => tags} = object) when is_list(tags) do emoji = tags - |> Enum.filter(fn data -> data["type"] == "Emoji" and data["icon"] end) + |> Enum.filter(fn data -> is_map(data) and data["type"] == "Emoji" and data["icon"] end) |> Enum.reduce(%{}, fn data, mapping -> name = String.trim(data["name"], ":") diff --git a/test/user_test.exs b/test/user_test.exs index 3cf248659..301d8f05e 100644 --- a/test/user_test.exs +++ b/test/user_test.exs @@ -440,6 +440,45 @@ defmodule Pleroma.UserTest do assert activity.actor == welcome_user.ap_id end + setup do: + clear_config(:mrf_simple, + media_removal: [], + media_nsfw: [], + federated_timeline_removal: [], + report_removal: [], + reject: [], + followers_only: [], + accept: [], + avatar_removal: [], + banner_removal: [], + reject_deletes: [] + ) + + setup do: + clear_config(:mrf, + policies: [ + Pleroma.Web.ActivityPub.MRF.SimplePolicy + ] + ) + + test "it sends a welcome chat message when Simple policy applied to local instance" do + Pleroma.Config.put([:mrf_simple, :media_nsfw], ["localhost"]) + + welcome_user = insert(:user) + Pleroma.Config.put([:welcome, :chat_message, :enabled], true) + Pleroma.Config.put([:welcome, :chat_message, :sender_nickname], welcome_user.nickname) + Pleroma.Config.put([:welcome, :chat_message, :message], "Hello, this is a chat message") + + cng = User.register_changeset(%User{}, @full_user_data) + {:ok, registered_user} = User.register(cng) + ObanHelpers.perform_all() + + activity = Repo.one(Pleroma.Activity) + assert registered_user.ap_id in activity.recipients + assert Object.normalize(activity).data["content"] =~ "chat message" + assert activity.actor == welcome_user.ap_id + end + test "it sends a welcome email message if it is set" do welcome_user = insert(:user) Pleroma.Config.put([:welcome, :email, :enabled], true) From 608017b7df5916b607e707627dc09d89599129ff Mon Sep 17 00:00:00 2001 From: rinpatch Date: Thu, 10 Sep 2020 18:40:54 +0000 Subject: [PATCH 088/102] Merge branch 'fix/streaming-termination-errors' into 'develop' Fix two pseudo-errors in websocket handler Closes #2131 See merge request pleroma/pleroma!2982 --- .../web/mastodon_api/websocket_handler.ex | 12 ++++++--- test/integration/mastodon_websocket_test.exs | 26 +++++++++---------- 2 files changed, 22 insertions(+), 16 deletions(-) diff --git a/lib/pleroma/web/mastodon_api/websocket_handler.ex b/lib/pleroma/web/mastodon_api/websocket_handler.ex index 94e4595d8..cf923ded8 100644 --- a/lib/pleroma/web/mastodon_api/websocket_handler.ex +++ b/lib/pleroma/web/mastodon_api/websocket_handler.ex @@ -37,12 +37,12 @@ defmodule Pleroma.Web.MastodonAPI.WebsocketHandler do else {:error, :bad_topic} -> Logger.debug("#{__MODULE__} bad topic #{inspect(req)}") - {:ok, req} = :cowboy_req.reply(404, req) + req = :cowboy_req.reply(404, req) {:ok, req, state} {:error, :unauthorized} -> Logger.debug("#{__MODULE__} authentication error: #{inspect(req)}") - {:ok, req} = :cowboy_req.reply(401, req) + req = :cowboy_req.reply(401, req) {:ok, req, state} end end @@ -64,7 +64,9 @@ defmodule Pleroma.Web.MastodonAPI.WebsocketHandler do {:ok, %{state | timer: timer()}} end - # We never receive messages. + # We only receive pings for now + def websocket_handle(:ping, state), do: {:ok, state} + def websocket_handle(frame, state) do Logger.error("#{__MODULE__} received frame: #{inspect(frame)}") {:ok, state} @@ -98,6 +100,10 @@ defmodule Pleroma.Web.MastodonAPI.WebsocketHandler do {:reply, :ping, %{state | timer: nil, count: 0}, :hibernate} end + # State can be `[]` only in case we terminate before switching to websocket, + # we already log errors for these cases in `init/1`, so just do nothing here + def terminate(_reason, _req, []), do: :ok + def terminate(reason, _req, state) do Logger.debug( "#{__MODULE__} terminating websocket connection for user #{ diff --git a/test/integration/mastodon_websocket_test.exs b/test/integration/mastodon_websocket_test.exs index ea17e9feb..76fbc8bda 100644 --- a/test/integration/mastodon_websocket_test.exs +++ b/test/integration/mastodon_websocket_test.exs @@ -99,30 +99,30 @@ defmodule Pleroma.Integration.MastodonWebsocketTest do test "accepts the 'user' stream", %{token: token} = _state do assert {:ok, _} = start_socket("?stream=user&access_token=#{token.token}") - assert capture_log(fn -> - assert {:error, {401, _}} = start_socket("?stream=user") - Process.sleep(30) - end) =~ ":badarg" + capture_log(fn -> + assert {:error, {401, _}} = start_socket("?stream=user") + Process.sleep(30) + end) end test "accepts the 'user:notification' stream", %{token: token} = _state do assert {:ok, _} = start_socket("?stream=user:notification&access_token=#{token.token}") - assert capture_log(fn -> - assert {:error, {401, _}} = start_socket("?stream=user:notification") - Process.sleep(30) - end) =~ ":badarg" + capture_log(fn -> + assert {:error, {401, _}} = start_socket("?stream=user:notification") + Process.sleep(30) + end) end test "accepts valid token on Sec-WebSocket-Protocol header", %{token: token} do assert {:ok, _} = start_socket("?stream=user", [{"Sec-WebSocket-Protocol", token.token}]) - assert capture_log(fn -> - assert {:error, {401, _}} = - start_socket("?stream=user", [{"Sec-WebSocket-Protocol", "I am a friend"}]) + capture_log(fn -> + assert {:error, {401, _}} = + start_socket("?stream=user", [{"Sec-WebSocket-Protocol", "I am a friend"}]) - Process.sleep(30) - end) =~ ":badarg" + Process.sleep(30) + end) end end end From 6bbd65fb0922c5e7ed4877968c3c92ff51cc12cb Mon Sep 17 00:00:00 2001 From: rinpatch Date: Thu, 10 Sep 2020 18:38:48 +0000 Subject: [PATCH 089/102] Merge branch '2130-mfa-users-oauth-login-fix' into 'develop' [#2130] Fixed OAuth OOB authentication for users with enabled MFA Closes #2130 See merge request pleroma/pleroma!2979 --- lib/pleroma/web/oauth/oauth_controller.ex | 5 ++++- .../o_auth/o_auth/oob_authorization_created.html.eex | 2 +- .../web/templates/o_auth/o_auth/oob_token_exists.html.eex | 2 +- 3 files changed, 6 insertions(+), 3 deletions(-) diff --git a/lib/pleroma/web/oauth/oauth_controller.ex b/lib/pleroma/web/oauth/oauth_controller.ex index dd00600ea..06b116368 100644 --- a/lib/pleroma/web/oauth/oauth_controller.ex +++ b/lib/pleroma/web/oauth/oauth_controller.ex @@ -145,7 +145,10 @@ defmodule Pleroma.Web.OAuth.OAuthController do def after_create_authorization(%Plug.Conn{} = conn, %Authorization{} = auth, %{ "authorization" => %{"redirect_uri" => @oob_token_redirect_uri} }) do - render(conn, "oob_authorization_created.html", %{auth: auth}) + # Enforcing the view to reuse the template when calling from other controllers + conn + |> put_view(OAuthView) + |> render("oob_authorization_created.html", %{auth: auth}) end def after_create_authorization(%Plug.Conn{} = conn, %Authorization{} = auth, %{ diff --git a/lib/pleroma/web/templates/o_auth/o_auth/oob_authorization_created.html.eex b/lib/pleroma/web/templates/o_auth/o_auth/oob_authorization_created.html.eex index 8443d906b..ffabe29a6 100644 --- a/lib/pleroma/web/templates/o_auth/o_auth/oob_authorization_created.html.eex +++ b/lib/pleroma/web/templates/o_auth/o_auth/oob_authorization_created.html.eex @@ -1,2 +1,2 @@

J1P%u>L0rtJJdI} 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 tag\n\n// load the styles\nvar content = require(\"!!../../../node_modules/css-loader/index.js?minimize!../../../node_modules/vue-loader/lib/style-compiler/index.js?{\\\"optionsId\\\":\\\"0\\\",\\\"vue\\\":true,\\\"scoped\\\":false,\\\"sourceMap\\\":false}!../../../node_modules/sass-loader/lib/loader.js!./settings_modal_content.scss\");\nif(typeof content === 'string') content = [[module.id, content, '']];\nif(content.locals) module.exports = content.locals;\n// add the styles to the DOM\nvar add = require(\"!../../../node_modules/vue-style-loader/lib/addStylesClient.js\").default\nvar update = add(\"a45e17ec\", content, true, {});","exports = module.exports = require(\"../../../node_modules/css-loader/lib/css-base.js\")(false);\n// imports\n\n\n// module\nexports.push([module.id, \".settings_tab-switcher{height:100%}.settings_tab-switcher .setting-item{border-bottom:2px solid var(--fg,#182230);margin:1em 1em 1.4em;padding-bottom:1.4em}.settings_tab-switcher .setting-item>div{margin-bottom:.5em}.settings_tab-switcher .setting-item>div:last-child{margin-bottom:0}.settings_tab-switcher .setting-item:last-child{border-bottom:none;padding-bottom:0;margin-bottom:1em}.settings_tab-switcher .setting-item select{min-width:10em}.settings_tab-switcher .setting-item textarea{width:100%;max-width:100%;height:100px}.settings_tab-switcher .setting-item .unavailable,.settings_tab-switcher .setting-item .unavailable i{color:var(--cRed,red);color:red}.settings_tab-switcher .setting-item .number-input{max-width:6em}\", \"\"]);\n\n// exports\n","// style-loader: Adds some css to the DOM by adding a \n\n\n\n","function injectStyle (context) {\n require(\"!!vue-style-loader!css-loader?minimize!../../../node_modules/vue-loader/lib/style-compiler/index?{\\\"optionsId\\\":\\\"0\\\",\\\"vue\\\":true,\\\"scoped\\\":false,\\\"sourceMap\\\":false}!sass-loader!./color_input.scss\")\n require(\"!!vue-style-loader!css-loader?minimize!../../../node_modules/vue-loader/lib/style-compiler/index?{\\\"optionsId\\\":\\\"0\\\",\\\"vue\\\":true,\\\"scoped\\\":false,\\\"sourceMap\\\":false}!sass-loader!../../../node_modules/vue-loader/lib/selector?type=styles&index=1!./color_input.vue\")\n}\n/* script */\nexport * from \"!!babel-loader!../../../node_modules/vue-loader/lib/selector?type=script&index=0!./color_input.vue\"\nimport __vue_script__ from \"!!babel-loader!../../../node_modules/vue-loader/lib/selector?type=script&index=0!./color_input.vue\"\n/* template */\nimport {render as __vue_render__, staticRenderFns as __vue_static_render_fns__} from \"!!../../../node_modules/vue-loader/lib/template-compiler/index?{\\\"id\\\":\\\"data-v-77e407b6\\\",\\\"hasScoped\\\":false,\\\"optionsId\\\":\\\"0\\\",\\\"buble\\\":{\\\"transforms\\\":{}}}!../../../node_modules/vue-loader/lib/selector?type=template&index=0!./color_input.vue\"\n/* template functional */\nvar __vue_template_functional__ = false\n/* styles */\nvar __vue_styles__ = injectStyle\n/* scopeId */\nvar __vue_scopeId__ = null\n/* moduleIdentifier (server only) */\nvar __vue_module_identifier__ = null\nimport normalizeComponent from \"!../../../node_modules/vue-loader/lib/runtime/component-normalizer\"\nvar Component = normalizeComponent(\n __vue_script__,\n __vue_render__,\n __vue_static_render_fns__,\n __vue_template_functional__,\n __vue_styles__,\n __vue_scopeId__,\n __vue_module_identifier__\n)\n\nexport default Component.exports\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"color-input style-control\",class:{ disabled: !_vm.present || _vm.disabled }},[_c('label',{staticClass:\"label\",attrs:{\"for\":_vm.name}},[_vm._v(\"\\n \"+_vm._s(_vm.label)+\"\\n \")]),_vm._v(\" \"),(typeof _vm.fallback !== 'undefined' && _vm.showOptionalTickbox)?_c('Checkbox',{staticClass:\"opt\",attrs:{\"checked\":_vm.present,\"disabled\":_vm.disabled},on:{\"change\":function($event){return _vm.$emit('input', typeof _vm.value === 'undefined' ? _vm.fallback : undefined)}}}):_vm._e(),_vm._v(\" \"),_c('div',{staticClass:\"input color-input-field\"},[_c('input',{staticClass:\"textColor unstyled\",attrs:{\"id\":_vm.name + '-t',\"type\":\"text\",\"disabled\":!_vm.present || _vm.disabled},domProps:{\"value\":_vm.value || _vm.fallback},on:{\"input\":function($event){return _vm.$emit('input', $event.target.value)}}}),_vm._v(\" \"),(_vm.validColor)?_c('input',{staticClass:\"nativeColor unstyled\",attrs:{\"id\":_vm.name,\"type\":\"color\",\"disabled\":!_vm.present || _vm.disabled},domProps:{\"value\":_vm.value || _vm.fallback},on:{\"input\":function($event){return _vm.$emit('input', $event.target.value)}}}):_vm._e(),_vm._v(\" \"),(_vm.transparentColor)?_c('div',{staticClass:\"transparentIndicator\"}):_vm._e(),_vm._v(\" \"),(_vm.computedColor)?_c('div',{staticClass:\"computedIndicator\",style:({backgroundColor: _vm.fallback})}):_vm._e()])],1)}\nvar staticRenderFns = []\nexport { render, staticRenderFns }","/* script */\nexport * from \"!!babel-loader!../../../node_modules/vue-loader/lib/selector?type=script&index=0!./range_input.vue\"\nimport __vue_script__ from \"!!babel-loader!../../../node_modules/vue-loader/lib/selector?type=script&index=0!./range_input.vue\"\n/* template */\nimport {render as __vue_render__, staticRenderFns as __vue_static_render_fns__} from \"!!../../../node_modules/vue-loader/lib/template-compiler/index?{\\\"id\\\":\\\"data-v-6a3c1a26\\\",\\\"hasScoped\\\":false,\\\"optionsId\\\":\\\"0\\\",\\\"buble\\\":{\\\"transforms\\\":{}}}!../../../node_modules/vue-loader/lib/selector?type=template&index=0!./range_input.vue\"\n/* template functional */\nvar __vue_template_functional__ = false\n/* styles */\nvar __vue_styles__ = null\n/* scopeId */\nvar __vue_scopeId__ = null\n/* moduleIdentifier (server only) */\nvar __vue_module_identifier__ = null\nimport normalizeComponent from \"!../../../node_modules/vue-loader/lib/runtime/component-normalizer\"\nvar Component = normalizeComponent(\n __vue_script__,\n __vue_render__,\n __vue_static_render_fns__,\n __vue_template_functional__,\n __vue_styles__,\n __vue_scopeId__,\n __vue_module_identifier__\n)\n\nexport default Component.exports\n","\n\n\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"range-control style-control\",class:{ disabled: !_vm.present || _vm.disabled }},[_c('label',{staticClass:\"label\",attrs:{\"for\":_vm.name}},[_vm._v(\"\\n \"+_vm._s(_vm.label)+\"\\n \")]),_vm._v(\" \"),(typeof _vm.fallback !== 'undefined')?_c('input',{staticClass:\"opt\",attrs:{\"id\":_vm.name + '-o',\"type\":\"checkbox\"},domProps:{\"checked\":_vm.present},on:{\"input\":function($event){return _vm.$emit('input', !_vm.present ? _vm.fallback : undefined)}}}):_vm._e(),_vm._v(\" \"),(typeof _vm.fallback !== 'undefined')?_c('label',{staticClass:\"opt-l\",attrs:{\"for\":_vm.name + '-o'}}):_vm._e(),_vm._v(\" \"),_c('input',{staticClass:\"input-number\",attrs:{\"id\":_vm.name,\"type\":\"range\",\"disabled\":!_vm.present || _vm.disabled,\"max\":_vm.max || _vm.hardMax || 100,\"min\":_vm.min || _vm.hardMin || 0,\"step\":_vm.step || 1},domProps:{\"value\":_vm.value || _vm.fallback},on:{\"input\":function($event){return _vm.$emit('input', $event.target.value)}}}),_vm._v(\" \"),_c('input',{staticClass:\"input-number\",attrs:{\"id\":_vm.name,\"type\":\"number\",\"disabled\":!_vm.present || _vm.disabled,\"max\":_vm.hardMax,\"min\":_vm.hardMin,\"step\":_vm.step || 1},domProps:{\"value\":_vm.value || _vm.fallback},on:{\"input\":function($event){return _vm.$emit('input', $event.target.value)}}})])}\nvar staticRenderFns = []\nexport { render, staticRenderFns }","\n\n\n","/* script */\nexport * from \"!!babel-loader!../../../node_modules/vue-loader/lib/selector?type=script&index=0!./opacity_input.vue\"\nimport __vue_script__ from \"!!babel-loader!../../../node_modules/vue-loader/lib/selector?type=script&index=0!./opacity_input.vue\"\n/* template */\nimport {render as __vue_render__, staticRenderFns as __vue_static_render_fns__} from \"!!../../../node_modules/vue-loader/lib/template-compiler/index?{\\\"id\\\":\\\"data-v-3b48fa39\\\",\\\"hasScoped\\\":false,\\\"optionsId\\\":\\\"0\\\",\\\"buble\\\":{\\\"transforms\\\":{}}}!../../../node_modules/vue-loader/lib/selector?type=template&index=0!./opacity_input.vue\"\n/* template functional */\nvar __vue_template_functional__ = false\n/* styles */\nvar __vue_styles__ = null\n/* scopeId */\nvar __vue_scopeId__ = null\n/* moduleIdentifier (server only) */\nvar __vue_module_identifier__ = null\nimport normalizeComponent from \"!../../../node_modules/vue-loader/lib/runtime/component-normalizer\"\nvar Component = normalizeComponent(\n __vue_script__,\n __vue_render__,\n __vue_static_render_fns__,\n __vue_template_functional__,\n __vue_styles__,\n __vue_scopeId__,\n __vue_module_identifier__\n)\n\nexport default Component.exports\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"opacity-control style-control\",class:{ disabled: !_vm.present || _vm.disabled }},[_c('label',{staticClass:\"label\",attrs:{\"for\":_vm.name}},[_vm._v(\"\\n \"+_vm._s(_vm.$t('settings.style.common.opacity'))+\"\\n \")]),_vm._v(\" \"),(typeof _vm.fallback !== 'undefined')?_c('Checkbox',{staticClass:\"opt\",attrs:{\"checked\":_vm.present,\"disabled\":_vm.disabled},on:{\"change\":function($event){return _vm.$emit('input', !_vm.present ? _vm.fallback : undefined)}}}):_vm._e(),_vm._v(\" \"),_c('input',{staticClass:\"input-number\",attrs:{\"id\":_vm.name,\"type\":\"number\",\"disabled\":!_vm.present || _vm.disabled,\"max\":\"1\",\"min\":\"0\",\"step\":\".05\"},domProps:{\"value\":_vm.value || _vm.fallback},on:{\"input\":function($event){return _vm.$emit('input', $event.target.value)}}})],1)}\nvar staticRenderFns = []\nexport { render, staticRenderFns }","import ColorInput from '../color_input/color_input.vue'\nimport OpacityInput from '../opacity_input/opacity_input.vue'\nimport { getCssShadow } from '../../services/style_setter/style_setter.js'\nimport { hex2rgb } from '../../services/color_convert/color_convert.js'\n\nconst toModel = (object = {}) => ({\n x: 0,\n y: 0,\n blur: 0,\n spread: 0,\n inset: false,\n color: '#000000',\n alpha: 1,\n ...object\n})\n\nexport default {\n // 'Value' and 'Fallback' can be undefined, but if they are\n // initially vue won't detect it when they become something else\n // therefore i'm using \"ready\" which should be passed as true when\n // data becomes available\n props: [\n 'value', 'fallback', 'ready'\n ],\n data () {\n return {\n selectedId: 0,\n // TODO there are some bugs regarding display of array (it's not getting updated when deleting for some reason)\n cValue: (this.value || this.fallback || []).map(toModel)\n }\n },\n components: {\n ColorInput,\n OpacityInput\n },\n methods: {\n add () {\n this.cValue.push(toModel(this.selected))\n this.selectedId = this.cValue.length - 1\n },\n del () {\n this.cValue.splice(this.selectedId, 1)\n this.selectedId = this.cValue.length === 0 ? undefined : Math.max(this.selectedId - 1, 0)\n },\n moveUp () {\n const movable = this.cValue.splice(this.selectedId, 1)[0]\n this.cValue.splice(this.selectedId - 1, 0, movable)\n this.selectedId -= 1\n },\n moveDn () {\n const movable = this.cValue.splice(this.selectedId, 1)[0]\n this.cValue.splice(this.selectedId + 1, 0, movable)\n this.selectedId += 1\n }\n },\n beforeUpdate () {\n this.cValue = this.value || this.fallback\n },\n computed: {\n anyShadows () {\n return this.cValue.length > 0\n },\n anyShadowsFallback () {\n return this.fallback.length > 0\n },\n selected () {\n if (this.ready && this.anyShadows) {\n return this.cValue[this.selectedId]\n } else {\n return toModel({})\n }\n },\n currentFallback () {\n if (this.ready && this.anyShadowsFallback) {\n return this.fallback[this.selectedId]\n } else {\n return toModel({})\n }\n },\n moveUpValid () {\n return this.ready && this.selectedId > 0\n },\n moveDnValid () {\n return this.ready && this.selectedId < this.cValue.length - 1\n },\n present () {\n return this.ready &&\n typeof this.cValue[this.selectedId] !== 'undefined' &&\n !this.usingFallback\n },\n usingFallback () {\n return typeof this.value === 'undefined'\n },\n rgb () {\n return hex2rgb(this.selected.color)\n },\n style () {\n return this.ready ? {\n boxShadow: getCssShadow(this.fallback)\n } : {}\n }\n }\n}\n","function injectStyle (context) {\n require(\"!!vue-style-loader!css-loader?minimize!../../../node_modules/vue-loader/lib/style-compiler/index?{\\\"optionsId\\\":\\\"0\\\",\\\"vue\\\":true,\\\"scoped\\\":false,\\\"sourceMap\\\":false}!sass-loader!../../../node_modules/vue-loader/lib/selector?type=styles&index=0!./shadow_control.vue\")\n}\n/* script */\nexport * from \"!!babel-loader!./shadow_control.js\"\nimport __vue_script__ from \"!!babel-loader!./shadow_control.js\"/* template */\nimport {render as __vue_render__, staticRenderFns as __vue_static_render_fns__} from \"!!../../../node_modules/vue-loader/lib/template-compiler/index?{\\\"id\\\":\\\"data-v-5c532734\\\",\\\"hasScoped\\\":false,\\\"optionsId\\\":\\\"0\\\",\\\"buble\\\":{\\\"transforms\\\":{}}}!../../../node_modules/vue-loader/lib/selector?type=template&index=0!./shadow_control.vue\"\n/* template functional */\nvar __vue_template_functional__ = false\n/* styles */\nvar __vue_styles__ = injectStyle\n/* scopeId */\nvar __vue_scopeId__ = null\n/* moduleIdentifier (server only) */\nvar __vue_module_identifier__ = null\nimport normalizeComponent from \"!../../../node_modules/vue-loader/lib/runtime/component-normalizer\"\nvar Component = normalizeComponent(\n __vue_script__,\n __vue_render__,\n __vue_static_render_fns__,\n __vue_template_functional__,\n __vue_styles__,\n __vue_scopeId__,\n __vue_module_identifier__\n)\n\nexport default Component.exports\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"shadow-control\",class:{ disabled: !_vm.present }},[_c('div',{staticClass:\"shadow-preview-container\"},[_c('div',{staticClass:\"y-shift-control\",attrs:{\"disabled\":!_vm.present}},[_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.selected.y),expression:\"selected.y\"}],staticClass:\"input-number\",attrs:{\"disabled\":!_vm.present,\"type\":\"number\"},domProps:{\"value\":(_vm.selected.y)},on:{\"input\":function($event){if($event.target.composing){ return; }_vm.$set(_vm.selected, \"y\", $event.target.value)}}}),_vm._v(\" \"),_c('div',{staticClass:\"wrap\"},[_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.selected.y),expression:\"selected.y\"}],staticClass:\"input-range\",attrs:{\"disabled\":!_vm.present,\"type\":\"range\",\"max\":\"20\",\"min\":\"-20\"},domProps:{\"value\":(_vm.selected.y)},on:{\"__r\":function($event){return _vm.$set(_vm.selected, \"y\", $event.target.value)}}})])]),_vm._v(\" \"),_c('div',{staticClass:\"preview-window\"},[_c('div',{staticClass:\"preview-block\",style:(_vm.style)})]),_vm._v(\" \"),_c('div',{staticClass:\"x-shift-control\",attrs:{\"disabled\":!_vm.present}},[_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.selected.x),expression:\"selected.x\"}],staticClass:\"input-number\",attrs:{\"disabled\":!_vm.present,\"type\":\"number\"},domProps:{\"value\":(_vm.selected.x)},on:{\"input\":function($event){if($event.target.composing){ return; }_vm.$set(_vm.selected, \"x\", $event.target.value)}}}),_vm._v(\" \"),_c('div',{staticClass:\"wrap\"},[_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.selected.x),expression:\"selected.x\"}],staticClass:\"input-range\",attrs:{\"disabled\":!_vm.present,\"type\":\"range\",\"max\":\"20\",\"min\":\"-20\"},domProps:{\"value\":(_vm.selected.x)},on:{\"__r\":function($event){return _vm.$set(_vm.selected, \"x\", $event.target.value)}}})])])]),_vm._v(\" \"),_c('div',{staticClass:\"shadow-tweak\"},[_c('div',{staticClass:\"id-control style-control\",attrs:{\"disabled\":_vm.usingFallback}},[_c('label',{staticClass:\"select\",attrs:{\"for\":\"shadow-switcher\",\"disabled\":!_vm.ready || _vm.usingFallback}},[_c('select',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.selectedId),expression:\"selectedId\"}],staticClass:\"shadow-switcher\",attrs:{\"id\":\"shadow-switcher\",\"disabled\":!_vm.ready || _vm.usingFallback},on:{\"change\":function($event){var $$selectedVal = Array.prototype.filter.call($event.target.options,function(o){return o.selected}).map(function(o){var val = \"_value\" in o ? o._value : o.value;return val}); _vm.selectedId=$event.target.multiple ? $$selectedVal : $$selectedVal[0]}}},_vm._l((_vm.cValue),function(shadow,index){return _c('option',{key:index,domProps:{\"value\":index}},[_vm._v(\"\\n \"+_vm._s(_vm.$t('settings.style.shadows.shadow_id', { value: index }))+\"\\n \")])}),0),_vm._v(\" \"),_c('i',{staticClass:\"icon-down-open\"})]),_vm._v(\" \"),_c('button',{staticClass:\"btn btn-default\",attrs:{\"disabled\":!_vm.ready || !_vm.present},on:{\"click\":_vm.del}},[_c('i',{staticClass:\"icon-cancel\"})]),_vm._v(\" \"),_c('button',{staticClass:\"btn btn-default\",attrs:{\"disabled\":!_vm.moveUpValid},on:{\"click\":_vm.moveUp}},[_c('i',{staticClass:\"icon-up-open\"})]),_vm._v(\" \"),_c('button',{staticClass:\"btn btn-default\",attrs:{\"disabled\":!_vm.moveDnValid},on:{\"click\":_vm.moveDn}},[_c('i',{staticClass:\"icon-down-open\"})]),_vm._v(\" \"),_c('button',{staticClass:\"btn btn-default\",attrs:{\"disabled\":_vm.usingFallback},on:{\"click\":_vm.add}},[_c('i',{staticClass:\"icon-plus\"})])]),_vm._v(\" \"),_c('div',{staticClass:\"inset-control style-control\",attrs:{\"disabled\":!_vm.present}},[_c('label',{staticClass:\"label\",attrs:{\"for\":\"inset\"}},[_vm._v(\"\\n \"+_vm._s(_vm.$t('settings.style.shadows.inset'))+\"\\n \")]),_vm._v(\" \"),_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.selected.inset),expression:\"selected.inset\"}],staticClass:\"input-inset\",attrs:{\"id\":\"inset\",\"disabled\":!_vm.present,\"name\":\"inset\",\"type\":\"checkbox\"},domProps:{\"checked\":Array.isArray(_vm.selected.inset)?_vm._i(_vm.selected.inset,null)>-1:(_vm.selected.inset)},on:{\"change\":function($event){var $$a=_vm.selected.inset,$$el=$event.target,$$c=$$el.checked?(true):(false);if(Array.isArray($$a)){var $$v=null,$$i=_vm._i($$a,$$v);if($$el.checked){$$i<0&&(_vm.$set(_vm.selected, \"inset\", $$a.concat([$$v])))}else{$$i>-1&&(_vm.$set(_vm.selected, \"inset\", $$a.slice(0,$$i).concat($$a.slice($$i+1))))}}else{_vm.$set(_vm.selected, \"inset\", $$c)}}}}),_vm._v(\" \"),_c('label',{staticClass:\"checkbox-label\",attrs:{\"for\":\"inset\"}})]),_vm._v(\" \"),_c('div',{staticClass:\"blur-control style-control\",attrs:{\"disabled\":!_vm.present}},[_c('label',{staticClass:\"label\",attrs:{\"for\":\"spread\"}},[_vm._v(\"\\n \"+_vm._s(_vm.$t('settings.style.shadows.blur'))+\"\\n \")]),_vm._v(\" \"),_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.selected.blur),expression:\"selected.blur\"}],staticClass:\"input-range\",attrs:{\"id\":\"blur\",\"disabled\":!_vm.present,\"name\":\"blur\",\"type\":\"range\",\"max\":\"20\",\"min\":\"0\"},domProps:{\"value\":(_vm.selected.blur)},on:{\"__r\":function($event){return _vm.$set(_vm.selected, \"blur\", $event.target.value)}}}),_vm._v(\" \"),_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.selected.blur),expression:\"selected.blur\"}],staticClass:\"input-number\",attrs:{\"disabled\":!_vm.present,\"type\":\"number\",\"min\":\"0\"},domProps:{\"value\":(_vm.selected.blur)},on:{\"input\":function($event){if($event.target.composing){ return; }_vm.$set(_vm.selected, \"blur\", $event.target.value)}}})]),_vm._v(\" \"),_c('div',{staticClass:\"spread-control style-control\",attrs:{\"disabled\":!_vm.present}},[_c('label',{staticClass:\"label\",attrs:{\"for\":\"spread\"}},[_vm._v(\"\\n \"+_vm._s(_vm.$t('settings.style.shadows.spread'))+\"\\n \")]),_vm._v(\" \"),_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.selected.spread),expression:\"selected.spread\"}],staticClass:\"input-range\",attrs:{\"id\":\"spread\",\"disabled\":!_vm.present,\"name\":\"spread\",\"type\":\"range\",\"max\":\"20\",\"min\":\"-20\"},domProps:{\"value\":(_vm.selected.spread)},on:{\"__r\":function($event){return _vm.$set(_vm.selected, \"spread\", $event.target.value)}}}),_vm._v(\" \"),_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.selected.spread),expression:\"selected.spread\"}],staticClass:\"input-number\",attrs:{\"disabled\":!_vm.present,\"type\":\"number\"},domProps:{\"value\":(_vm.selected.spread)},on:{\"input\":function($event){if($event.target.composing){ return; }_vm.$set(_vm.selected, \"spread\", $event.target.value)}}})]),_vm._v(\" \"),_c('ColorInput',{attrs:{\"disabled\":!_vm.present,\"label\":_vm.$t('settings.style.common.color'),\"fallback\":_vm.currentFallback.color,\"show-optional-tickbox\":false,\"name\":\"shadow\"},model:{value:(_vm.selected.color),callback:function ($$v) {_vm.$set(_vm.selected, \"color\", $$v)},expression:\"selected.color\"}}),_vm._v(\" \"),_c('OpacityInput',{attrs:{\"disabled\":!_vm.present},model:{value:(_vm.selected.alpha),callback:function ($$v) {_vm.$set(_vm.selected, \"alpha\", $$v)},expression:\"selected.alpha\"}}),_vm._v(\" \"),_c('i18n',{attrs:{\"path\":\"settings.style.shadows.hintV3\",\"tag\":\"p\"}},[_c('code',[_vm._v(\"--variable,mod\")])])],1)])}\nvar staticRenderFns = []\nexport { render, staticRenderFns }","import { set } from 'vue'\n\nexport default {\n props: [\n 'name', 'label', 'value', 'fallback', 'options', 'no-inherit'\n ],\n data () {\n return {\n lValue: this.value,\n availableOptions: [\n this.noInherit ? '' : 'inherit',\n 'custom',\n ...(this.options || []),\n 'serif',\n 'monospace',\n 'sans-serif'\n ].filter(_ => _)\n }\n },\n beforeUpdate () {\n this.lValue = this.value\n },\n computed: {\n present () {\n return typeof this.lValue !== 'undefined'\n },\n dValue () {\n return this.lValue || this.fallback || {}\n },\n family: {\n get () {\n return this.dValue.family\n },\n set (v) {\n set(this.lValue, 'family', v)\n this.$emit('input', this.lValue)\n }\n },\n isCustom () {\n return this.preset === 'custom'\n },\n preset: {\n get () {\n if (this.family === 'serif' ||\n this.family === 'sans-serif' ||\n this.family === 'monospace' ||\n this.family === 'inherit') {\n return this.family\n } else {\n return 'custom'\n }\n },\n set (v) {\n this.family = v === 'custom' ? '' : v\n }\n }\n }\n}\n","function injectStyle (context) {\n require(\"!!vue-style-loader!css-loader?minimize!../../../node_modules/vue-loader/lib/style-compiler/index?{\\\"optionsId\\\":\\\"0\\\",\\\"vue\\\":true,\\\"scoped\\\":false,\\\"sourceMap\\\":false}!sass-loader!../../../node_modules/vue-loader/lib/selector?type=styles&index=0!./font_control.vue\")\n}\n/* script */\nexport * from \"!!babel-loader!./font_control.js\"\nimport __vue_script__ from \"!!babel-loader!./font_control.js\"/* template */\nimport {render as __vue_render__, staticRenderFns as __vue_static_render_fns__} from \"!!../../../node_modules/vue-loader/lib/template-compiler/index?{\\\"id\\\":\\\"data-v-0edf8dfc\\\",\\\"hasScoped\\\":false,\\\"optionsId\\\":\\\"0\\\",\\\"buble\\\":{\\\"transforms\\\":{}}}!../../../node_modules/vue-loader/lib/selector?type=template&index=0!./font_control.vue\"\n/* template functional */\nvar __vue_template_functional__ = false\n/* styles */\nvar __vue_styles__ = injectStyle\n/* scopeId */\nvar __vue_scopeId__ = null\n/* moduleIdentifier (server only) */\nvar __vue_module_identifier__ = null\nimport normalizeComponent from \"!../../../node_modules/vue-loader/lib/runtime/component-normalizer\"\nvar Component = normalizeComponent(\n __vue_script__,\n __vue_render__,\n __vue_static_render_fns__,\n __vue_template_functional__,\n __vue_styles__,\n __vue_scopeId__,\n __vue_module_identifier__\n)\n\nexport default Component.exports\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"font-control style-control\",class:{ custom: _vm.isCustom }},[_c('label',{staticClass:\"label\",attrs:{\"for\":_vm.preset === 'custom' ? _vm.name : _vm.name + '-font-switcher'}},[_vm._v(\"\\n \"+_vm._s(_vm.label)+\"\\n \")]),_vm._v(\" \"),(typeof _vm.fallback !== 'undefined')?_c('input',{staticClass:\"opt exlcude-disabled\",attrs:{\"id\":_vm.name + '-o',\"type\":\"checkbox\"},domProps:{\"checked\":_vm.present},on:{\"input\":function($event){return _vm.$emit('input', typeof _vm.value === 'undefined' ? _vm.fallback : undefined)}}}):_vm._e(),_vm._v(\" \"),(typeof _vm.fallback !== 'undefined')?_c('label',{staticClass:\"opt-l\",attrs:{\"for\":_vm.name + '-o'}}):_vm._e(),_vm._v(\" \"),_c('label',{staticClass:\"select\",attrs:{\"for\":_vm.name + '-font-switcher',\"disabled\":!_vm.present}},[_c('select',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.preset),expression:\"preset\"}],staticClass:\"font-switcher\",attrs:{\"id\":_vm.name + '-font-switcher',\"disabled\":!_vm.present},on:{\"change\":function($event){var $$selectedVal = Array.prototype.filter.call($event.target.options,function(o){return o.selected}).map(function(o){var val = \"_value\" in o ? o._value : o.value;return val}); _vm.preset=$event.target.multiple ? $$selectedVal : $$selectedVal[0]}}},_vm._l((_vm.availableOptions),function(option){return _c('option',{key:option,domProps:{\"value\":option}},[_vm._v(\"\\n \"+_vm._s(option === 'custom' ? _vm.$t('settings.style.fonts.custom') : option)+\"\\n \")])}),0),_vm._v(\" \"),_c('i',{staticClass:\"icon-down-open\"})]),_vm._v(\" \"),(_vm.isCustom)?_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.family),expression:\"family\"}],staticClass:\"custom-font\",attrs:{\"id\":_vm.name,\"type\":\"text\"},domProps:{\"value\":(_vm.family)},on:{\"input\":function($event){if($event.target.composing){ return; }_vm.family=$event.target.value}}}):_vm._e()])}\nvar staticRenderFns = []\nexport { render, staticRenderFns }","\n\n\n\n\n","function injectStyle (context) {\n require(\"!!vue-style-loader!css-loader?minimize!../../../node_modules/vue-loader/lib/style-compiler/index?{\\\"optionsId\\\":\\\"0\\\",\\\"vue\\\":true,\\\"scoped\\\":false,\\\"sourceMap\\\":false}!sass-loader!../../../node_modules/vue-loader/lib/selector?type=styles&index=0!./contrast_ratio.vue\")\n}\n/* script */\nexport * from \"!!babel-loader!../../../node_modules/vue-loader/lib/selector?type=script&index=0!./contrast_ratio.vue\"\nimport __vue_script__ from \"!!babel-loader!../../../node_modules/vue-loader/lib/selector?type=script&index=0!./contrast_ratio.vue\"\n/* template */\nimport {render as __vue_render__, staticRenderFns as __vue_static_render_fns__} from \"!!../../../node_modules/vue-loader/lib/template-compiler/index?{\\\"id\\\":\\\"data-v-2507acc6\\\",\\\"hasScoped\\\":false,\\\"optionsId\\\":\\\"0\\\",\\\"buble\\\":{\\\"transforms\\\":{}}}!../../../node_modules/vue-loader/lib/selector?type=template&index=0!./contrast_ratio.vue\"\n/* template functional */\nvar __vue_template_functional__ = false\n/* styles */\nvar __vue_styles__ = injectStyle\n/* scopeId */\nvar __vue_scopeId__ = null\n/* moduleIdentifier (server only) */\nvar __vue_module_identifier__ = null\nimport normalizeComponent from \"!../../../node_modules/vue-loader/lib/runtime/component-normalizer\"\nvar Component = normalizeComponent(\n __vue_script__,\n __vue_render__,\n __vue_static_render_fns__,\n __vue_template_functional__,\n __vue_styles__,\n __vue_scopeId__,\n __vue_module_identifier__\n)\n\nexport default Component.exports\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return (_vm.contrast)?_c('span',{staticClass:\"contrast-ratio\"},[_c('span',{staticClass:\"rating\",attrs:{\"title\":_vm.hint}},[(_vm.contrast.aaa)?_c('span',[_c('i',{staticClass:\"icon-thumbs-up-alt\"})]):_vm._e(),_vm._v(\" \"),(!_vm.contrast.aaa && _vm.contrast.aa)?_c('span',[_c('i',{staticClass:\"icon-adjust\"})]):_vm._e(),_vm._v(\" \"),(!_vm.contrast.aaa && !_vm.contrast.aa)?_c('span',[_c('i',{staticClass:\"icon-attention\"})]):_vm._e()]),_vm._v(\" \"),(_vm.contrast && _vm.large)?_c('span',{staticClass:\"rating\",attrs:{\"title\":_vm.hint_18pt}},[(_vm.contrast.laaa)?_c('span',[_c('i',{staticClass:\"icon-thumbs-up-alt\"})]):_vm._e(),_vm._v(\" \"),(!_vm.contrast.laaa && _vm.contrast.laa)?_c('span',[_c('i',{staticClass:\"icon-adjust\"})]):_vm._e(),_vm._v(\" \"),(!_vm.contrast.laaa && !_vm.contrast.laa)?_c('span',[_c('i',{staticClass:\"icon-attention\"})]):_vm._e()]):_vm._e()]):_vm._e()}\nvar staticRenderFns = []\nexport { render, staticRenderFns }","\n\n\n\n\n","function injectStyle (context) {\n require(\"!!vue-style-loader!css-loader?minimize!../../../node_modules/vue-loader/lib/style-compiler/index?{\\\"optionsId\\\":\\\"0\\\",\\\"vue\\\":true,\\\"scoped\\\":false,\\\"sourceMap\\\":false}!sass-loader!../../../node_modules/vue-loader/lib/selector?type=styles&index=0!./export_import.vue\")\n}\n/* script */\nexport * from \"!!babel-loader!../../../node_modules/vue-loader/lib/selector?type=script&index=0!./export_import.vue\"\nimport __vue_script__ from \"!!babel-loader!../../../node_modules/vue-loader/lib/selector?type=script&index=0!./export_import.vue\"\n/* template */\nimport {render as __vue_render__, staticRenderFns as __vue_static_render_fns__} from \"!!../../../node_modules/vue-loader/lib/template-compiler/index?{\\\"id\\\":\\\"data-v-3d9b5a74\\\",\\\"hasScoped\\\":false,\\\"optionsId\\\":\\\"0\\\",\\\"buble\\\":{\\\"transforms\\\":{}}}!../../../node_modules/vue-loader/lib/selector?type=template&index=0!./export_import.vue\"\n/* template functional */\nvar __vue_template_functional__ = false\n/* styles */\nvar __vue_styles__ = injectStyle\n/* scopeId */\nvar __vue_scopeId__ = null\n/* moduleIdentifier (server only) */\nvar __vue_module_identifier__ = null\nimport normalizeComponent from \"!../../../node_modules/vue-loader/lib/runtime/component-normalizer\"\nvar Component = normalizeComponent(\n __vue_script__,\n __vue_render__,\n __vue_static_render_fns__,\n __vue_template_functional__,\n __vue_styles__,\n __vue_scopeId__,\n __vue_module_identifier__\n)\n\nexport default Component.exports\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"import-export-container\"},[_vm._t(\"before\"),_vm._v(\" \"),_c('button',{staticClass:\"btn\",on:{\"click\":_vm.exportData}},[_vm._v(\"\\n \"+_vm._s(_vm.exportLabel)+\"\\n \")]),_vm._v(\" \"),_c('button',{staticClass:\"btn\",on:{\"click\":_vm.importData}},[_vm._v(\"\\n \"+_vm._s(_vm.importLabel)+\"\\n \")]),_vm._v(\" \"),_vm._t(\"afterButtons\"),_vm._v(\" \"),(_vm.importFailed)?_c('p',{staticClass:\"alert error\"},[_vm._v(\"\\n \"+_vm._s(_vm.importFailedText)+\"\\n \")]):_vm._e(),_vm._v(\" \"),_vm._t(\"afterError\")],2)}\nvar staticRenderFns = []\nexport { render, staticRenderFns }","function injectStyle (context) {\n require(\"!!vue-style-loader!css-loader?minimize!../../../../../node_modules/vue-loader/lib/style-compiler/index?{\\\"optionsId\\\":\\\"0\\\",\\\"vue\\\":true,\\\"scoped\\\":false,\\\"sourceMap\\\":false}!sass-loader!../../../../../node_modules/vue-loader/lib/selector?type=styles&index=0!./preview.vue\")\n}\n/* script */\nvar __vue_script__ = null\n/* template */\nimport {render as __vue_render__, staticRenderFns as __vue_static_render_fns__} from \"!!../../../../../node_modules/vue-loader/lib/template-compiler/index?{\\\"id\\\":\\\"data-v-1a88be74\\\",\\\"hasScoped\\\":false,\\\"optionsId\\\":\\\"0\\\",\\\"buble\\\":{\\\"transforms\\\":{}}}!../../../../../node_modules/vue-loader/lib/selector?type=template&index=0!./preview.vue\"\n/* template functional */\nvar __vue_template_functional__ = false\n/* styles */\nvar __vue_styles__ = injectStyle\n/* scopeId */\nvar __vue_scopeId__ = null\n/* moduleIdentifier (server only) */\nvar __vue_module_identifier__ = null\nimport normalizeComponent from \"!../../../../../node_modules/vue-loader/lib/runtime/component-normalizer\"\nvar Component = normalizeComponent(\n __vue_script__,\n __vue_render__,\n __vue_static_render_fns__,\n __vue_template_functional__,\n __vue_styles__,\n __vue_scopeId__,\n __vue_module_identifier__\n)\n\nexport default Component.exports\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"preview-container\"},[_c('div',{staticClass:\"underlay underlay-preview\"}),_vm._v(\" \"),_c('div',{staticClass:\"panel dummy\"},[_c('div',{staticClass:\"panel-heading\"},[_c('div',{staticClass:\"title\"},[_vm._v(\"\\n \"+_vm._s(_vm.$t('settings.style.preview.header'))+\"\\n \"),_c('span',{staticClass:\"badge badge-notification\"},[_vm._v(\"\\n 99\\n \")])]),_vm._v(\" \"),_c('span',{staticClass:\"faint\"},[_vm._v(\"\\n \"+_vm._s(_vm.$t('settings.style.preview.header_faint'))+\"\\n \")]),_vm._v(\" \"),_c('span',{staticClass:\"alert error\"},[_vm._v(\"\\n \"+_vm._s(_vm.$t('settings.style.preview.error'))+\"\\n \")]),_vm._v(\" \"),_c('button',{staticClass:\"btn\"},[_vm._v(\"\\n \"+_vm._s(_vm.$t('settings.style.preview.button'))+\"\\n \")])]),_vm._v(\" \"),_c('div',{staticClass:\"panel-body theme-preview-content\"},[_c('div',{staticClass:\"post\"},[_c('div',{staticClass:\"avatar still-image\"},[_vm._v(\"\\n ( ͡° ͜ʖ ͡°)\\n \")]),_vm._v(\" \"),_c('div',{staticClass:\"content\"},[_c('h4',[_vm._v(\"\\n \"+_vm._s(_vm.$t('settings.style.preview.content'))+\"\\n \")]),_vm._v(\" \"),_c('i18n',{attrs:{\"path\":\"settings.style.preview.text\"}},[_c('code',{staticStyle:{\"font-family\":\"var(--postCodeFont)\"}},[_vm._v(\"\\n \"+_vm._s(_vm.$t('settings.style.preview.mono'))+\"\\n \")]),_vm._v(\" \"),_c('a',{staticStyle:{\"color\":\"var(--link)\"}},[_vm._v(\"\\n \"+_vm._s(_vm.$t('settings.style.preview.link'))+\"\\n \")])]),_vm._v(\" \"),_vm._m(0)],1)]),_vm._v(\" \"),_c('div',{staticClass:\"after-post\"},[_c('div',{staticClass:\"avatar-alt\"},[_vm._v(\"\\n :^)\\n \")]),_vm._v(\" \"),_c('div',{staticClass:\"content\"},[_c('i18n',{staticClass:\"faint\",attrs:{\"path\":\"settings.style.preview.fine_print\",\"tag\":\"span\"}},[_c('a',{staticStyle:{\"color\":\"var(--faintLink)\"}},[_vm._v(\"\\n \"+_vm._s(_vm.$t('settings.style.preview.faint_link'))+\"\\n \")])])],1)]),_vm._v(\" \"),_c('div',{staticClass:\"separator\"}),_vm._v(\" \"),_c('span',{staticClass:\"alert error\"},[_vm._v(\"\\n \"+_vm._s(_vm.$t('settings.style.preview.error'))+\"\\n \")]),_vm._v(\" \"),_c('input',{attrs:{\"type\":\"text\"},domProps:{\"value\":_vm.$t('settings.style.preview.input')}}),_vm._v(\" \"),_c('div',{staticClass:\"actions\"},[_c('span',{staticClass:\"checkbox\"},[_c('input',{attrs:{\"id\":\"preview_checkbox\",\"checked\":\"very yes\",\"type\":\"checkbox\"}}),_vm._v(\" \"),_c('label',{attrs:{\"for\":\"preview_checkbox\"}},[_vm._v(_vm._s(_vm.$t('settings.style.preview.checkbox')))])]),_vm._v(\" \"),_c('button',{staticClass:\"btn\"},[_vm._v(\"\\n \"+_vm._s(_vm.$t('settings.style.preview.button'))+\"\\n \")])])])])])}\nvar staticRenderFns = [function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"icons\"},[_c('i',{staticClass:\"button-icon icon-reply\",staticStyle:{\"color\":\"var(--cBlue)\"}}),_vm._v(\" \"),_c('i',{staticClass:\"button-icon icon-retweet\",staticStyle:{\"color\":\"var(--cGreen)\"}}),_vm._v(\" \"),_c('i',{staticClass:\"button-icon icon-star\",staticStyle:{\"color\":\"var(--cOrange)\"}}),_vm._v(\" \"),_c('i',{staticClass:\"button-icon icon-cancel\",staticStyle:{\"color\":\"var(--cRed)\"}})])}]\nexport { render, staticRenderFns }","import { set, delete as del } from 'vue'\nimport {\n rgb2hex,\n hex2rgb,\n getContrastRatioLayers\n} from 'src/services/color_convert/color_convert.js'\nimport {\n DEFAULT_SHADOWS,\n generateColors,\n generateShadows,\n generateRadii,\n generateFonts,\n composePreset,\n getThemes,\n shadows2to3,\n colors2to3\n} from 'src/services/style_setter/style_setter.js'\nimport {\n SLOT_INHERITANCE\n} from 'src/services/theme_data/pleromafe.js'\nimport {\n CURRENT_VERSION,\n OPACITIES,\n getLayers,\n getOpacitySlot\n} from 'src/services/theme_data/theme_data.service.js'\nimport ColorInput from 'src/components/color_input/color_input.vue'\nimport RangeInput from 'src/components/range_input/range_input.vue'\nimport OpacityInput from 'src/components/opacity_input/opacity_input.vue'\nimport ShadowControl from 'src/components/shadow_control/shadow_control.vue'\nimport FontControl from 'src/components/font_control/font_control.vue'\nimport ContrastRatio from 'src/components/contrast_ratio/contrast_ratio.vue'\nimport TabSwitcher from 'src/components/tab_switcher/tab_switcher.js'\nimport ExportImport from 'src/components/export_import/export_import.vue'\nimport Checkbox from 'src/components/checkbox/checkbox.vue'\n\nimport Preview from './preview.vue'\n\n// List of color values used in v1\nconst v1OnlyNames = [\n 'bg',\n 'fg',\n 'text',\n 'link',\n 'cRed',\n 'cGreen',\n 'cBlue',\n 'cOrange'\n].map(_ => _ + 'ColorLocal')\n\nconst colorConvert = (color) => {\n if (color.startsWith('--') || color === 'transparent') {\n return color\n } else {\n return hex2rgb(color)\n }\n}\n\nexport default {\n data () {\n return {\n availableStyles: [],\n selected: this.$store.getters.mergedConfig.theme,\n themeWarning: undefined,\n tempImportFile: undefined,\n engineVersion: 0,\n\n previewShadows: {},\n previewColors: {},\n previewRadii: {},\n previewFonts: {},\n\n shadowsInvalid: true,\n colorsInvalid: true,\n radiiInvalid: true,\n\n keepColor: false,\n keepShadows: false,\n keepOpacity: false,\n keepRoundness: false,\n keepFonts: false,\n\n ...Object.keys(SLOT_INHERITANCE)\n .map(key => [key, ''])\n .reduce((acc, [key, val]) => ({ ...acc, [ key + 'ColorLocal' ]: val }), {}),\n\n ...Object.keys(OPACITIES)\n .map(key => [key, ''])\n .reduce((acc, [key, val]) => ({ ...acc, [ key + 'OpacityLocal' ]: val }), {}),\n\n shadowSelected: undefined,\n shadowsLocal: {},\n fontsLocal: {},\n\n btnRadiusLocal: '',\n inputRadiusLocal: '',\n checkboxRadiusLocal: '',\n panelRadiusLocal: '',\n avatarRadiusLocal: '',\n avatarAltRadiusLocal: '',\n attachmentRadiusLocal: '',\n tooltipRadiusLocal: '',\n chatMessageRadiusLocal: ''\n }\n },\n created () {\n const self = this\n\n getThemes()\n .then((promises) => {\n return Promise.all(\n Object.entries(promises)\n .map(([k, v]) => v.then(res => [k, res]))\n )\n })\n .then(themes => themes.reduce((acc, [k, v]) => {\n if (v) {\n return {\n ...acc,\n [k]: v\n }\n } else {\n return acc\n }\n }, {}))\n .then((themesComplete) => {\n self.availableStyles = themesComplete\n })\n },\n mounted () {\n this.loadThemeFromLocalStorage()\n if (typeof this.shadowSelected === 'undefined') {\n this.shadowSelected = this.shadowsAvailable[0]\n }\n },\n computed: {\n themeWarningHelp () {\n if (!this.themeWarning) return\n const t = this.$t\n const pre = 'settings.style.switcher.help.'\n const {\n origin,\n themeEngineVersion,\n type,\n noActionsPossible\n } = this.themeWarning\n if (origin === 'file') {\n // Loaded v2 theme from file\n if (themeEngineVersion === 2 && type === 'wrong_version') {\n return t(pre + 'v2_imported')\n }\n if (themeEngineVersion > CURRENT_VERSION) {\n return t(pre + 'future_version_imported') + ' ' +\n (\n noActionsPossible\n ? t(pre + 'snapshot_missing')\n : t(pre + 'snapshot_present')\n )\n }\n if (themeEngineVersion < CURRENT_VERSION) {\n return t(pre + 'future_version_imported') + ' ' +\n (\n noActionsPossible\n ? t(pre + 'snapshot_missing')\n : t(pre + 'snapshot_present')\n )\n }\n } else if (origin === 'localStorage') {\n if (type === 'snapshot_source_mismatch') {\n return t(pre + 'snapshot_source_mismatch')\n }\n // FE upgraded from v2\n if (themeEngineVersion === 2) {\n return t(pre + 'upgraded_from_v2')\n }\n // Admin downgraded FE\n if (themeEngineVersion > CURRENT_VERSION) {\n return t(pre + 'fe_downgraded') + ' ' +\n (\n noActionsPossible\n ? t(pre + 'migration_snapshot_ok')\n : t(pre + 'migration_snapshot_gone')\n )\n }\n // Admin upgraded FE\n if (themeEngineVersion < CURRENT_VERSION) {\n return t(pre + 'fe_upgraded') + ' ' +\n (\n noActionsPossible\n ? t(pre + 'migration_snapshot_ok')\n : t(pre + 'migration_snapshot_gone')\n )\n }\n }\n },\n selectedVersion () {\n return Array.isArray(this.selected) ? 1 : 2\n },\n currentColors () {\n return Object.keys(SLOT_INHERITANCE)\n .map(key => [key, this[key + 'ColorLocal']])\n .reduce((acc, [key, val]) => ({ ...acc, [ key ]: val }), {})\n },\n currentOpacity () {\n return Object.keys(OPACITIES)\n .map(key => [key, this[key + 'OpacityLocal']])\n .reduce((acc, [key, val]) => ({ ...acc, [ key ]: val }), {})\n },\n currentRadii () {\n return {\n btn: this.btnRadiusLocal,\n input: this.inputRadiusLocal,\n checkbox: this.checkboxRadiusLocal,\n panel: this.panelRadiusLocal,\n avatar: this.avatarRadiusLocal,\n avatarAlt: this.avatarAltRadiusLocal,\n tooltip: this.tooltipRadiusLocal,\n attachment: this.attachmentRadiusLocal,\n chatMessage: this.chatMessageRadiusLocal\n }\n },\n preview () {\n return composePreset(this.previewColors, this.previewRadii, this.previewShadows, this.previewFonts)\n },\n previewTheme () {\n if (!this.preview.theme.colors) return { colors: {}, opacity: {}, radii: {}, shadows: {}, fonts: {} }\n return this.preview.theme\n },\n // This needs optimization maybe\n previewContrast () {\n try {\n if (!this.previewTheme.colors.bg) return {}\n const colors = this.previewTheme.colors\n const opacity = this.previewTheme.opacity\n if (!colors.bg) return {}\n const hints = (ratio) => ({\n text: ratio.toPrecision(3) + ':1',\n // AA level, AAA level\n aa: ratio >= 4.5,\n aaa: ratio >= 7,\n // same but for 18pt+ texts\n laa: ratio >= 3,\n laaa: ratio >= 4.5\n })\n const colorsConverted = Object.entries(colors).reduce((acc, [key, value]) => ({ ...acc, [key]: colorConvert(value) }), {})\n\n const ratios = Object.entries(SLOT_INHERITANCE).reduce((acc, [key, value]) => {\n const slotIsBaseText = key === 'text' || key === 'link'\n const slotIsText = slotIsBaseText || (\n typeof value === 'object' && value !== null && value.textColor\n )\n if (!slotIsText) return acc\n const { layer, variant } = slotIsBaseText ? { layer: 'bg' } : value\n const background = variant || layer\n const opacitySlot = getOpacitySlot(background)\n const textColors = [\n key,\n ...(background === 'bg' ? ['cRed', 'cGreen', 'cBlue', 'cOrange'] : [])\n ]\n\n const layers = getLayers(\n layer,\n variant || layer,\n opacitySlot,\n colorsConverted,\n opacity\n )\n\n return {\n ...acc,\n ...textColors.reduce((acc, textColorKey) => {\n const newKey = slotIsBaseText\n ? 'bg' + textColorKey[0].toUpperCase() + textColorKey.slice(1)\n : textColorKey\n return {\n ...acc,\n [newKey]: getContrastRatioLayers(\n colorsConverted[textColorKey],\n layers,\n colorsConverted[textColorKey]\n )\n }\n }, {})\n }\n }, {})\n\n return Object.entries(ratios).reduce((acc, [k, v]) => { acc[k] = hints(v); return acc }, {})\n } catch (e) {\n console.warn('Failure computing contrasts', e)\n }\n },\n previewRules () {\n if (!this.preview.rules) return ''\n return [\n ...Object.values(this.preview.rules),\n 'color: var(--text)',\n 'font-family: var(--interfaceFont, sans-serif)'\n ].join(';')\n },\n shadowsAvailable () {\n return Object.keys(DEFAULT_SHADOWS).sort()\n },\n currentShadowOverriden: {\n get () {\n return !!this.currentShadow\n },\n set (val) {\n if (val) {\n set(this.shadowsLocal, this.shadowSelected, this.currentShadowFallback.map(_ => Object.assign({}, _)))\n } else {\n del(this.shadowsLocal, this.shadowSelected)\n }\n }\n },\n currentShadowFallback () {\n return (this.previewTheme.shadows || {})[this.shadowSelected]\n },\n currentShadow: {\n get () {\n return this.shadowsLocal[this.shadowSelected]\n },\n set (v) {\n set(this.shadowsLocal, this.shadowSelected, v)\n }\n },\n themeValid () {\n return !this.shadowsInvalid && !this.colorsInvalid && !this.radiiInvalid\n },\n exportedTheme () {\n const saveEverything = (\n !this.keepFonts &&\n !this.keepShadows &&\n !this.keepOpacity &&\n !this.keepRoundness &&\n !this.keepColor\n )\n\n const source = {\n themeEngineVersion: CURRENT_VERSION\n }\n\n if (this.keepFonts || saveEverything) {\n source.fonts = this.fontsLocal\n }\n if (this.keepShadows || saveEverything) {\n source.shadows = this.shadowsLocal\n }\n if (this.keepOpacity || saveEverything) {\n source.opacity = this.currentOpacity\n }\n if (this.keepColor || saveEverything) {\n source.colors = this.currentColors\n }\n if (this.keepRoundness || saveEverything) {\n source.radii = this.currentRadii\n }\n\n const theme = {\n themeEngineVersion: CURRENT_VERSION,\n ...this.previewTheme\n }\n\n return {\n // To separate from other random JSON files and possible future source formats\n _pleroma_theme_version: 2, theme, source\n }\n }\n },\n components: {\n ColorInput,\n OpacityInput,\n RangeInput,\n ContrastRatio,\n ShadowControl,\n FontControl,\n TabSwitcher,\n Preview,\n ExportImport,\n Checkbox\n },\n methods: {\n loadTheme (\n {\n theme,\n source,\n _pleroma_theme_version: fileVersion\n },\n origin,\n forceUseSource = false\n ) {\n this.dismissWarning()\n if (!source && !theme) {\n throw new Error('Can\\'t load theme: empty')\n }\n const version = (origin === 'localStorage' && !theme.colors)\n ? 'l1'\n : fileVersion\n const snapshotEngineVersion = (theme || {}).themeEngineVersion\n const themeEngineVersion = (source || {}).themeEngineVersion || 2\n const versionsMatch = themeEngineVersion === CURRENT_VERSION\n const sourceSnapshotMismatch = (\n theme !== undefined &&\n source !== undefined &&\n themeEngineVersion !== snapshotEngineVersion\n )\n // Force loading of source if user requested it or if snapshot\n // is unavailable\n const forcedSourceLoad = (source && forceUseSource) || !theme\n if (!(versionsMatch && !sourceSnapshotMismatch) &&\n !forcedSourceLoad &&\n version !== 'l1' &&\n origin !== 'defaults'\n ) {\n if (sourceSnapshotMismatch && origin === 'localStorage') {\n this.themeWarning = {\n origin,\n themeEngineVersion,\n type: 'snapshot_source_mismatch'\n }\n } else if (!theme) {\n this.themeWarning = {\n origin,\n noActionsPossible: true,\n themeEngineVersion,\n type: 'no_snapshot_old_version'\n }\n } else if (!versionsMatch) {\n this.themeWarning = {\n origin,\n noActionsPossible: !source,\n themeEngineVersion,\n type: 'wrong_version'\n }\n }\n }\n this.normalizeLocalState(theme, version, source, forcedSourceLoad)\n },\n forceLoadLocalStorage () {\n this.loadThemeFromLocalStorage(true)\n },\n dismissWarning () {\n this.themeWarning = undefined\n this.tempImportFile = undefined\n },\n forceLoad () {\n const { origin } = this.themeWarning\n switch (origin) {\n case 'localStorage':\n this.loadThemeFromLocalStorage(true)\n break\n case 'file':\n this.onImport(this.tempImportFile, true)\n break\n }\n this.dismissWarning()\n },\n forceSnapshot () {\n const { origin } = this.themeWarning\n switch (origin) {\n case 'localStorage':\n this.loadThemeFromLocalStorage(false, true)\n break\n case 'file':\n console.err('Forcing snapshout from file is not supported yet')\n break\n }\n this.dismissWarning()\n },\n loadThemeFromLocalStorage (confirmLoadSource = false, forceSnapshot = false) {\n const {\n customTheme: theme,\n customThemeSource: source\n } = this.$store.getters.mergedConfig\n if (!theme && !source) {\n // Anon user or never touched themes\n this.loadTheme(\n this.$store.state.instance.themeData,\n 'defaults',\n confirmLoadSource\n )\n } else {\n this.loadTheme(\n {\n theme,\n source: forceSnapshot ? theme : source\n },\n 'localStorage',\n confirmLoadSource\n )\n }\n },\n setCustomTheme () {\n this.$store.dispatch('setOption', {\n name: 'customTheme',\n value: {\n themeEngineVersion: CURRENT_VERSION,\n ...this.previewTheme\n }\n })\n this.$store.dispatch('setOption', {\n name: 'customThemeSource',\n value: {\n themeEngineVersion: CURRENT_VERSION,\n shadows: this.shadowsLocal,\n fonts: this.fontsLocal,\n opacity: this.currentOpacity,\n colors: this.currentColors,\n radii: this.currentRadii\n }\n })\n },\n updatePreviewColorsAndShadows () {\n this.previewColors = generateColors({\n opacity: this.currentOpacity,\n colors: this.currentColors\n })\n this.previewShadows = generateShadows(\n { shadows: this.shadowsLocal, opacity: this.previewTheme.opacity, themeEngineVersion: this.engineVersion },\n this.previewColors.theme.colors,\n this.previewColors.mod\n )\n },\n onImport (parsed, forceSource = false) {\n this.tempImportFile = parsed\n this.loadTheme(parsed, 'file', forceSource)\n },\n importValidator (parsed) {\n const version = parsed._pleroma_theme_version\n return version >= 1 || version <= 2\n },\n clearAll () {\n this.loadThemeFromLocalStorage()\n },\n\n // Clears all the extra stuff when loading V1 theme\n clearV1 () {\n Object.keys(this.$data)\n .filter(_ => _.endsWith('ColorLocal') || _.endsWith('OpacityLocal'))\n .filter(_ => !v1OnlyNames.includes(_))\n .forEach(key => {\n set(this.$data, key, undefined)\n })\n },\n\n clearRoundness () {\n Object.keys(this.$data)\n .filter(_ => _.endsWith('RadiusLocal'))\n .forEach(key => {\n set(this.$data, key, undefined)\n })\n },\n\n clearOpacity () {\n Object.keys(this.$data)\n .filter(_ => _.endsWith('OpacityLocal'))\n .forEach(key => {\n set(this.$data, key, undefined)\n })\n },\n\n clearShadows () {\n this.shadowsLocal = {}\n },\n\n clearFonts () {\n this.fontsLocal = {}\n },\n\n /**\n * This applies stored theme data onto form. Supports three versions of data:\n * v3 (version >= 3) - newest version of themes which supports snapshots for better compatiblity\n * v2 (version = 2) - newer version of themes.\n * v1 (version = 1) - older version of themes (import from file)\n * v1l (version = l1) - older version of theme (load from local storage)\n * v1 and v1l differ because of way themes were stored/exported.\n * @param {Object} theme - theme data (snapshot)\n * @param {Number} version - version of data. 0 means try to guess based on data. \"l1\" means v1, locastorage type\n * @param {Object} source - theme source - this will be used if compatible\n * @param {Boolean} source - by default source won't be used if version doesn't match since it might render differently\n * this allows importing source anyway\n */\n normalizeLocalState (theme, version = 0, source, forceSource = false) {\n let input\n if (typeof source !== 'undefined') {\n if (forceSource || source.themeEngineVersion === CURRENT_VERSION) {\n input = source\n version = source.themeEngineVersion\n } else {\n input = theme\n }\n } else {\n input = theme\n }\n\n const radii = input.radii || input\n const opacity = input.opacity\n const shadows = input.shadows || {}\n const fonts = input.fonts || {}\n const colors = !input.themeEngineVersion\n ? colors2to3(input.colors || input)\n : input.colors || input\n\n if (version === 0) {\n if (input.version) version = input.version\n // Old v1 naming: fg is text, btn is foreground\n if (typeof colors.text === 'undefined' && typeof colors.fg !== 'undefined') {\n version = 1\n }\n // New v2 naming: text is text, fg is foreground\n if (typeof colors.text !== 'undefined' && typeof colors.fg !== 'undefined') {\n version = 2\n }\n }\n\n this.engineVersion = version\n\n // Stuff that differs between V1 and V2\n if (version === 1) {\n this.fgColorLocal = rgb2hex(colors.btn)\n this.textColorLocal = rgb2hex(colors.fg)\n }\n\n if (!this.keepColor) {\n this.clearV1()\n const keys = new Set(version !== 1 ? Object.keys(SLOT_INHERITANCE) : [])\n if (version === 1 || version === 'l1') {\n keys\n .add('bg')\n .add('link')\n .add('cRed')\n .add('cBlue')\n .add('cGreen')\n .add('cOrange')\n }\n\n keys.forEach(key => {\n const color = colors[key]\n const hex = rgb2hex(colors[key])\n this[key + 'ColorLocal'] = hex === '#aN' ? color : hex\n })\n }\n\n if (opacity && !this.keepOpacity) {\n this.clearOpacity()\n Object.entries(opacity).forEach(([k, v]) => {\n if (typeof v === 'undefined' || v === null || Number.isNaN(v)) return\n this[k + 'OpacityLocal'] = v\n })\n }\n\n if (!this.keepRoundness) {\n this.clearRoundness()\n Object.entries(radii).forEach(([k, v]) => {\n // 'Radius' is kept mostly for v1->v2 localstorage transition\n const key = k.endsWith('Radius') ? k.split('Radius')[0] : k\n this[key + 'RadiusLocal'] = v\n })\n }\n\n if (!this.keepShadows) {\n this.clearShadows()\n if (version === 2) {\n this.shadowsLocal = shadows2to3(shadows, this.previewTheme.opacity)\n } else {\n this.shadowsLocal = shadows\n }\n this.shadowSelected = this.shadowsAvailable[0]\n }\n\n if (!this.keepFonts) {\n this.clearFonts()\n this.fontsLocal = fonts\n }\n }\n },\n watch: {\n currentRadii () {\n try {\n this.previewRadii = generateRadii({ radii: this.currentRadii })\n this.radiiInvalid = false\n } catch (e) {\n this.radiiInvalid = true\n console.warn(e)\n }\n },\n shadowsLocal: {\n handler () {\n if (Object.getOwnPropertyNames(this.previewColors).length === 1) return\n try {\n this.updatePreviewColorsAndShadows()\n this.shadowsInvalid = false\n } catch (e) {\n this.shadowsInvalid = true\n console.warn(e)\n }\n },\n deep: true\n },\n fontsLocal: {\n handler () {\n try {\n this.previewFonts = generateFonts({ fonts: this.fontsLocal })\n this.fontsInvalid = false\n } catch (e) {\n this.fontsInvalid = true\n console.warn(e)\n }\n },\n deep: true\n },\n currentColors () {\n try {\n this.updatePreviewColorsAndShadows()\n this.colorsInvalid = false\n this.shadowsInvalid = false\n } catch (e) {\n this.colorsInvalid = true\n this.shadowsInvalid = true\n console.warn(e)\n }\n },\n currentOpacity () {\n try {\n this.updatePreviewColorsAndShadows()\n } catch (e) {\n console.warn(e)\n }\n },\n selected () {\n this.dismissWarning()\n if (this.selectedVersion === 1) {\n if (!this.keepRoundness) {\n this.clearRoundness()\n }\n\n if (!this.keepShadows) {\n this.clearShadows()\n }\n\n if (!this.keepOpacity) {\n this.clearOpacity()\n }\n\n if (!this.keepColor) {\n this.clearV1()\n\n this.bgColorLocal = this.selected[1]\n this.fgColorLocal = this.selected[2]\n this.textColorLocal = this.selected[3]\n this.linkColorLocal = this.selected[4]\n this.cRedColorLocal = this.selected[5]\n this.cGreenColorLocal = this.selected[6]\n this.cBlueColorLocal = this.selected[7]\n this.cOrangeColorLocal = this.selected[8]\n }\n } else if (this.selectedVersion >= 2) {\n this.normalizeLocalState(this.selected.theme, 2, this.selected.source)\n }\n }\n }\n}\n","function injectStyle (context) {\n require(\"!!vue-style-loader!css-loader?minimize!../../../../../node_modules/vue-loader/lib/style-compiler/index?{\\\"optionsId\\\":\\\"0\\\",\\\"vue\\\":true,\\\"scoped\\\":false,\\\"sourceMap\\\":false}!sass-loader!./theme_tab.scss\")\n}\n/* script */\nexport * from \"!!babel-loader!./theme_tab.js\"\nimport __vue_script__ from \"!!babel-loader!./theme_tab.js\"/* template */\nimport {render as __vue_render__, staticRenderFns as __vue_static_render_fns__} from \"!!../../../../../node_modules/vue-loader/lib/template-compiler/index?{\\\"id\\\":\\\"data-v-af7d0e5c\\\",\\\"hasScoped\\\":false,\\\"optionsId\\\":\\\"0\\\",\\\"buble\\\":{\\\"transforms\\\":{}}}!../../../../../node_modules/vue-loader/lib/selector?type=template&index=0!./theme_tab.vue\"\n/* template functional */\nvar __vue_template_functional__ = false\n/* styles */\nvar __vue_styles__ = injectStyle\n/* scopeId */\nvar __vue_scopeId__ = null\n/* moduleIdentifier (server only) */\nvar __vue_module_identifier__ = null\nimport normalizeComponent from \"!../../../../../node_modules/vue-loader/lib/runtime/component-normalizer\"\nvar Component = normalizeComponent(\n __vue_script__,\n __vue_render__,\n __vue_static_render_fns__,\n __vue_template_functional__,\n __vue_styles__,\n __vue_scopeId__,\n __vue_module_identifier__\n)\n\nexport default Component.exports\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"theme-tab\"},[_c('div',{staticClass:\"presets-container\"},[_c('div',{staticClass:\"save-load\"},[(_vm.themeWarning)?_c('div',{staticClass:\"theme-warning\"},[_c('div',{staticClass:\"alert warning\"},[_vm._v(\"\\n \"+_vm._s(_vm.themeWarningHelp)+\"\\n \")]),_vm._v(\" \"),_c('div',{staticClass:\"buttons\"},[(_vm.themeWarning.type === 'snapshot_source_mismatch')?[_c('button',{staticClass:\"btn\",on:{\"click\":_vm.forceLoad}},[_vm._v(\"\\n \"+_vm._s(_vm.$t('settings.style.switcher.use_source'))+\"\\n \")]),_vm._v(\" \"),_c('button',{staticClass:\"btn\",on:{\"click\":_vm.forceSnapshot}},[_vm._v(\"\\n \"+_vm._s(_vm.$t('settings.style.switcher.use_snapshot'))+\"\\n \")])]:(_vm.themeWarning.noActionsPossible)?[_c('button',{staticClass:\"btn\",on:{\"click\":_vm.dismissWarning}},[_vm._v(\"\\n \"+_vm._s(_vm.$t('general.dismiss'))+\"\\n \")])]:[_c('button',{staticClass:\"btn\",on:{\"click\":_vm.forceLoad}},[_vm._v(\"\\n \"+_vm._s(_vm.$t('settings.style.switcher.load_theme'))+\"\\n \")]),_vm._v(\" \"),_c('button',{staticClass:\"btn\",on:{\"click\":_vm.dismissWarning}},[_vm._v(\"\\n \"+_vm._s(_vm.$t('settings.style.switcher.keep_as_is'))+\"\\n \")])]],2)]):_vm._e(),_vm._v(\" \"),_c('ExportImport',{attrs:{\"export-object\":_vm.exportedTheme,\"export-label\":_vm.$t(\"settings.export_theme\"),\"import-label\":_vm.$t(\"settings.import_theme\"),\"import-failed-text\":_vm.$t(\"settings.invalid_theme_imported\"),\"on-import\":_vm.onImport,\"validator\":_vm.importValidator}},[_c('template',{slot:\"before\"},[_c('div',{staticClass:\"presets\"},[_vm._v(\"\\n \"+_vm._s(_vm.$t('settings.presets'))+\"\\n \"),_c('label',{staticClass:\"select\",attrs:{\"for\":\"preset-switcher\"}},[_c('select',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.selected),expression:\"selected\"}],staticClass:\"preset-switcher\",attrs:{\"id\":\"preset-switcher\"},on:{\"change\":function($event){var $$selectedVal = Array.prototype.filter.call($event.target.options,function(o){return o.selected}).map(function(o){var val = \"_value\" in o ? o._value : o.value;return val}); _vm.selected=$event.target.multiple ? $$selectedVal : $$selectedVal[0]}}},_vm._l((_vm.availableStyles),function(style){return _c('option',{key:style.name,style:({\n backgroundColor: style[1] || (style.theme || style.source).colors.bg,\n color: style[3] || (style.theme || style.source).colors.text\n }),domProps:{\"value\":style}},[_vm._v(\"\\n \"+_vm._s(style[0] || style.name)+\"\\n \")])}),0),_vm._v(\" \"),_c('i',{staticClass:\"icon-down-open\"})])])])],2)],1),_vm._v(\" \"),_c('div',{staticClass:\"save-load-options\"},[_c('span',{staticClass:\"keep-option\"},[_c('Checkbox',{model:{value:(_vm.keepColor),callback:function ($$v) {_vm.keepColor=$$v},expression:\"keepColor\"}},[_vm._v(\"\\n \"+_vm._s(_vm.$t('settings.style.switcher.keep_color'))+\"\\n \")])],1),_vm._v(\" \"),_c('span',{staticClass:\"keep-option\"},[_c('Checkbox',{model:{value:(_vm.keepShadows),callback:function ($$v) {_vm.keepShadows=$$v},expression:\"keepShadows\"}},[_vm._v(\"\\n \"+_vm._s(_vm.$t('settings.style.switcher.keep_shadows'))+\"\\n \")])],1),_vm._v(\" \"),_c('span',{staticClass:\"keep-option\"},[_c('Checkbox',{model:{value:(_vm.keepOpacity),callback:function ($$v) {_vm.keepOpacity=$$v},expression:\"keepOpacity\"}},[_vm._v(\"\\n \"+_vm._s(_vm.$t('settings.style.switcher.keep_opacity'))+\"\\n \")])],1),_vm._v(\" \"),_c('span',{staticClass:\"keep-option\"},[_c('Checkbox',{model:{value:(_vm.keepRoundness),callback:function ($$v) {_vm.keepRoundness=$$v},expression:\"keepRoundness\"}},[_vm._v(\"\\n \"+_vm._s(_vm.$t('settings.style.switcher.keep_roundness'))+\"\\n \")])],1),_vm._v(\" \"),_c('span',{staticClass:\"keep-option\"},[_c('Checkbox',{model:{value:(_vm.keepFonts),callback:function ($$v) {_vm.keepFonts=$$v},expression:\"keepFonts\"}},[_vm._v(\"\\n \"+_vm._s(_vm.$t('settings.style.switcher.keep_fonts'))+\"\\n \")])],1),_vm._v(\" \"),_c('p',[_vm._v(_vm._s(_vm.$t('settings.style.switcher.save_load_hint')))])])]),_vm._v(\" \"),_c('preview',{style:(_vm.previewRules)}),_vm._v(\" \"),_c('keep-alive',[_c('tab-switcher',{key:\"style-tweak\"},[_c('div',{staticClass:\"color-container\",attrs:{\"label\":_vm.$t('settings.style.common_colors._tab_label')}},[_c('div',{staticClass:\"tab-header\"},[_c('p',[_vm._v(_vm._s(_vm.$t('settings.theme_help')))]),_vm._v(\" \"),_c('div',{staticClass:\"tab-header-buttons\"},[_c('button',{staticClass:\"btn\",on:{\"click\":_vm.clearOpacity}},[_vm._v(\"\\n \"+_vm._s(_vm.$t('settings.style.switcher.clear_opacity'))+\"\\n \")]),_vm._v(\" \"),_c('button',{staticClass:\"btn\",on:{\"click\":_vm.clearV1}},[_vm._v(\"\\n \"+_vm._s(_vm.$t('settings.style.switcher.clear_all'))+\"\\n \")])])]),_vm._v(\" \"),_c('p',[_vm._v(_vm._s(_vm.$t('settings.theme_help_v2_1')))]),_vm._v(\" \"),_c('h4',[_vm._v(_vm._s(_vm.$t('settings.style.common_colors.main')))]),_vm._v(\" \"),_c('div',{staticClass:\"color-item\"},[_c('ColorInput',{attrs:{\"name\":\"bgColor\",\"label\":_vm.$t('settings.background')},model:{value:(_vm.bgColorLocal),callback:function ($$v) {_vm.bgColorLocal=$$v},expression:\"bgColorLocal\"}}),_vm._v(\" \"),_c('OpacityInput',{attrs:{\"name\":\"bgOpacity\",\"fallback\":_vm.previewTheme.opacity.bg},model:{value:(_vm.bgOpacityLocal),callback:function ($$v) {_vm.bgOpacityLocal=$$v},expression:\"bgOpacityLocal\"}}),_vm._v(\" \"),_c('ColorInput',{attrs:{\"name\":\"textColor\",\"label\":_vm.$t('settings.text')},model:{value:(_vm.textColorLocal),callback:function ($$v) {_vm.textColorLocal=$$v},expression:\"textColorLocal\"}}),_vm._v(\" \"),_c('ContrastRatio',{attrs:{\"contrast\":_vm.previewContrast.bgText}}),_vm._v(\" \"),_c('ColorInput',{attrs:{\"name\":\"accentColor\",\"fallback\":_vm.previewTheme.colors.link,\"label\":_vm.$t('settings.accent'),\"show-optional-tickbox\":typeof _vm.linkColorLocal !== 'undefined'},model:{value:(_vm.accentColorLocal),callback:function ($$v) {_vm.accentColorLocal=$$v},expression:\"accentColorLocal\"}}),_vm._v(\" \"),_c('ColorInput',{attrs:{\"name\":\"linkColor\",\"fallback\":_vm.previewTheme.colors.accent,\"label\":_vm.$t('settings.links'),\"show-optional-tickbox\":typeof _vm.accentColorLocal !== 'undefined'},model:{value:(_vm.linkColorLocal),callback:function ($$v) {_vm.linkColorLocal=$$v},expression:\"linkColorLocal\"}}),_vm._v(\" \"),_c('ContrastRatio',{attrs:{\"contrast\":_vm.previewContrast.bgLink}})],1),_vm._v(\" \"),_c('div',{staticClass:\"color-item\"},[_c('ColorInput',{attrs:{\"name\":\"fgColor\",\"label\":_vm.$t('settings.foreground')},model:{value:(_vm.fgColorLocal),callback:function ($$v) {_vm.fgColorLocal=$$v},expression:\"fgColorLocal\"}}),_vm._v(\" \"),_c('ColorInput',{attrs:{\"name\":\"fgTextColor\",\"label\":_vm.$t('settings.text'),\"fallback\":_vm.previewTheme.colors.fgText},model:{value:(_vm.fgTextColorLocal),callback:function ($$v) {_vm.fgTextColorLocal=$$v},expression:\"fgTextColorLocal\"}}),_vm._v(\" \"),_c('ColorInput',{attrs:{\"name\":\"fgLinkColor\",\"label\":_vm.$t('settings.links'),\"fallback\":_vm.previewTheme.colors.fgLink},model:{value:(_vm.fgLinkColorLocal),callback:function ($$v) {_vm.fgLinkColorLocal=$$v},expression:\"fgLinkColorLocal\"}}),_vm._v(\" \"),_c('p',[_vm._v(_vm._s(_vm.$t('settings.style.common_colors.foreground_hint')))])],1),_vm._v(\" \"),_c('h4',[_vm._v(_vm._s(_vm.$t('settings.style.common_colors.rgbo')))]),_vm._v(\" \"),_c('div',{staticClass:\"color-item\"},[_c('ColorInput',{attrs:{\"name\":\"cRedColor\",\"label\":_vm.$t('settings.cRed')},model:{value:(_vm.cRedColorLocal),callback:function ($$v) {_vm.cRedColorLocal=$$v},expression:\"cRedColorLocal\"}}),_vm._v(\" \"),_c('ContrastRatio',{attrs:{\"contrast\":_vm.previewContrast.bgCRed}}),_vm._v(\" \"),_c('ColorInput',{attrs:{\"name\":\"cBlueColor\",\"label\":_vm.$t('settings.cBlue')},model:{value:(_vm.cBlueColorLocal),callback:function ($$v) {_vm.cBlueColorLocal=$$v},expression:\"cBlueColorLocal\"}}),_vm._v(\" \"),_c('ContrastRatio',{attrs:{\"contrast\":_vm.previewContrast.bgCBlue}})],1),_vm._v(\" \"),_c('div',{staticClass:\"color-item\"},[_c('ColorInput',{attrs:{\"name\":\"cGreenColor\",\"label\":_vm.$t('settings.cGreen')},model:{value:(_vm.cGreenColorLocal),callback:function ($$v) {_vm.cGreenColorLocal=$$v},expression:\"cGreenColorLocal\"}}),_vm._v(\" \"),_c('ContrastRatio',{attrs:{\"contrast\":_vm.previewContrast.bgCGreen}}),_vm._v(\" \"),_c('ColorInput',{attrs:{\"name\":\"cOrangeColor\",\"label\":_vm.$t('settings.cOrange')},model:{value:(_vm.cOrangeColorLocal),callback:function ($$v) {_vm.cOrangeColorLocal=$$v},expression:\"cOrangeColorLocal\"}}),_vm._v(\" \"),_c('ContrastRatio',{attrs:{\"contrast\":_vm.previewContrast.bgCOrange}})],1),_vm._v(\" \"),_c('p',[_vm._v(_vm._s(_vm.$t('settings.theme_help_v2_2')))])]),_vm._v(\" \"),_c('div',{staticClass:\"color-container\",attrs:{\"label\":_vm.$t('settings.style.advanced_colors._tab_label')}},[_c('div',{staticClass:\"tab-header\"},[_c('p',[_vm._v(_vm._s(_vm.$t('settings.theme_help')))]),_vm._v(\" \"),_c('button',{staticClass:\"btn\",on:{\"click\":_vm.clearOpacity}},[_vm._v(\"\\n \"+_vm._s(_vm.$t('settings.style.switcher.clear_opacity'))+\"\\n \")]),_vm._v(\" \"),_c('button',{staticClass:\"btn\",on:{\"click\":_vm.clearV1}},[_vm._v(\"\\n \"+_vm._s(_vm.$t('settings.style.switcher.clear_all'))+\"\\n \")])]),_vm._v(\" \"),_c('div',{staticClass:\"color-item\"},[_c('h4',[_vm._v(_vm._s(_vm.$t('settings.style.advanced_colors.post')))]),_vm._v(\" \"),_c('ColorInput',{attrs:{\"name\":\"postLinkColor\",\"fallback\":_vm.previewTheme.colors.accent,\"label\":_vm.$t('settings.links')},model:{value:(_vm.postLinkColorLocal),callback:function ($$v) {_vm.postLinkColorLocal=$$v},expression:\"postLinkColorLocal\"}}),_vm._v(\" \"),_c('ContrastRatio',{attrs:{\"contrast\":_vm.previewContrast.postLink}}),_vm._v(\" \"),_c('ColorInput',{attrs:{\"name\":\"postGreentextColor\",\"fallback\":_vm.previewTheme.colors.cGreen,\"label\":_vm.$t('settings.greentext')},model:{value:(_vm.postGreentextColorLocal),callback:function ($$v) {_vm.postGreentextColorLocal=$$v},expression:\"postGreentextColorLocal\"}}),_vm._v(\" \"),_c('ContrastRatio',{attrs:{\"contrast\":_vm.previewContrast.postGreentext}}),_vm._v(\" \"),_c('h4',[_vm._v(_vm._s(_vm.$t('settings.style.advanced_colors.alert')))]),_vm._v(\" \"),_c('ColorInput',{attrs:{\"name\":\"alertError\",\"label\":_vm.$t('settings.style.advanced_colors.alert_error'),\"fallback\":_vm.previewTheme.colors.alertError},model:{value:(_vm.alertErrorColorLocal),callback:function ($$v) {_vm.alertErrorColorLocal=$$v},expression:\"alertErrorColorLocal\"}}),_vm._v(\" \"),_c('ColorInput',{attrs:{\"name\":\"alertErrorText\",\"label\":_vm.$t('settings.text'),\"fallback\":_vm.previewTheme.colors.alertErrorText},model:{value:(_vm.alertErrorTextColorLocal),callback:function ($$v) {_vm.alertErrorTextColorLocal=$$v},expression:\"alertErrorTextColorLocal\"}}),_vm._v(\" \"),_c('ContrastRatio',{attrs:{\"contrast\":_vm.previewContrast.alertErrorText,\"large\":\"true\"}}),_vm._v(\" \"),_c('ColorInput',{attrs:{\"name\":\"alertWarning\",\"label\":_vm.$t('settings.style.advanced_colors.alert_warning'),\"fallback\":_vm.previewTheme.colors.alertWarning},model:{value:(_vm.alertWarningColorLocal),callback:function ($$v) {_vm.alertWarningColorLocal=$$v},expression:\"alertWarningColorLocal\"}}),_vm._v(\" \"),_c('ColorInput',{attrs:{\"name\":\"alertWarningText\",\"label\":_vm.$t('settings.text'),\"fallback\":_vm.previewTheme.colors.alertWarningText},model:{value:(_vm.alertWarningTextColorLocal),callback:function ($$v) {_vm.alertWarningTextColorLocal=$$v},expression:\"alertWarningTextColorLocal\"}}),_vm._v(\" \"),_c('ContrastRatio',{attrs:{\"contrast\":_vm.previewContrast.alertWarningText,\"large\":\"true\"}}),_vm._v(\" \"),_c('ColorInput',{attrs:{\"name\":\"alertNeutral\",\"label\":_vm.$t('settings.style.advanced_colors.alert_neutral'),\"fallback\":_vm.previewTheme.colors.alertNeutral},model:{value:(_vm.alertNeutralColorLocal),callback:function ($$v) {_vm.alertNeutralColorLocal=$$v},expression:\"alertNeutralColorLocal\"}}),_vm._v(\" \"),_c('ColorInput',{attrs:{\"name\":\"alertNeutralText\",\"label\":_vm.$t('settings.text'),\"fallback\":_vm.previewTheme.colors.alertNeutralText},model:{value:(_vm.alertNeutralTextColorLocal),callback:function ($$v) {_vm.alertNeutralTextColorLocal=$$v},expression:\"alertNeutralTextColorLocal\"}}),_vm._v(\" \"),_c('ContrastRatio',{attrs:{\"contrast\":_vm.previewContrast.alertNeutralText,\"large\":\"true\"}}),_vm._v(\" \"),_c('OpacityInput',{attrs:{\"name\":\"alertOpacity\",\"fallback\":_vm.previewTheme.opacity.alert},model:{value:(_vm.alertOpacityLocal),callback:function ($$v) {_vm.alertOpacityLocal=$$v},expression:\"alertOpacityLocal\"}})],1),_vm._v(\" \"),_c('div',{staticClass:\"color-item\"},[_c('h4',[_vm._v(_vm._s(_vm.$t('settings.style.advanced_colors.badge')))]),_vm._v(\" \"),_c('ColorInput',{attrs:{\"name\":\"badgeNotification\",\"label\":_vm.$t('settings.style.advanced_colors.badge_notification'),\"fallback\":_vm.previewTheme.colors.badgeNotification},model:{value:(_vm.badgeNotificationColorLocal),callback:function ($$v) {_vm.badgeNotificationColorLocal=$$v},expression:\"badgeNotificationColorLocal\"}}),_vm._v(\" \"),_c('ColorInput',{attrs:{\"name\":\"badgeNotificationText\",\"label\":_vm.$t('settings.text'),\"fallback\":_vm.previewTheme.colors.badgeNotificationText},model:{value:(_vm.badgeNotificationTextColorLocal),callback:function ($$v) {_vm.badgeNotificationTextColorLocal=$$v},expression:\"badgeNotificationTextColorLocal\"}}),_vm._v(\" \"),_c('ContrastRatio',{attrs:{\"contrast\":_vm.previewContrast.badgeNotificationText,\"large\":\"true\"}})],1),_vm._v(\" \"),_c('div',{staticClass:\"color-item\"},[_c('h4',[_vm._v(_vm._s(_vm.$t('settings.style.advanced_colors.panel_header')))]),_vm._v(\" \"),_c('ColorInput',{attrs:{\"name\":\"panelColor\",\"fallback\":_vm.previewTheme.colors.panel,\"label\":_vm.$t('settings.background')},model:{value:(_vm.panelColorLocal),callback:function ($$v) {_vm.panelColorLocal=$$v},expression:\"panelColorLocal\"}}),_vm._v(\" \"),_c('OpacityInput',{attrs:{\"name\":\"panelOpacity\",\"fallback\":_vm.previewTheme.opacity.panel,\"disabled\":_vm.panelColorLocal === 'transparent'},model:{value:(_vm.panelOpacityLocal),callback:function ($$v) {_vm.panelOpacityLocal=$$v},expression:\"panelOpacityLocal\"}}),_vm._v(\" \"),_c('ColorInput',{attrs:{\"name\":\"panelTextColor\",\"fallback\":_vm.previewTheme.colors.panelText,\"label\":_vm.$t('settings.text')},model:{value:(_vm.panelTextColorLocal),callback:function ($$v) {_vm.panelTextColorLocal=$$v},expression:\"panelTextColorLocal\"}}),_vm._v(\" \"),_c('ContrastRatio',{attrs:{\"contrast\":_vm.previewContrast.panelText,\"large\":\"true\"}}),_vm._v(\" \"),_c('ColorInput',{attrs:{\"name\":\"panelLinkColor\",\"fallback\":_vm.previewTheme.colors.panelLink,\"label\":_vm.$t('settings.links')},model:{value:(_vm.panelLinkColorLocal),callback:function ($$v) {_vm.panelLinkColorLocal=$$v},expression:\"panelLinkColorLocal\"}}),_vm._v(\" \"),_c('ContrastRatio',{attrs:{\"contrast\":_vm.previewContrast.panelLink,\"large\":\"true\"}})],1),_vm._v(\" \"),_c('div',{staticClass:\"color-item\"},[_c('h4',[_vm._v(_vm._s(_vm.$t('settings.style.advanced_colors.top_bar')))]),_vm._v(\" \"),_c('ColorInput',{attrs:{\"name\":\"topBarColor\",\"fallback\":_vm.previewTheme.colors.topBar,\"label\":_vm.$t('settings.background')},model:{value:(_vm.topBarColorLocal),callback:function ($$v) {_vm.topBarColorLocal=$$v},expression:\"topBarColorLocal\"}}),_vm._v(\" \"),_c('ColorInput',{attrs:{\"name\":\"topBarTextColor\",\"fallback\":_vm.previewTheme.colors.topBarText,\"label\":_vm.$t('settings.text')},model:{value:(_vm.topBarTextColorLocal),callback:function ($$v) {_vm.topBarTextColorLocal=$$v},expression:\"topBarTextColorLocal\"}}),_vm._v(\" \"),_c('ContrastRatio',{attrs:{\"contrast\":_vm.previewContrast.topBarText}}),_vm._v(\" \"),_c('ColorInput',{attrs:{\"name\":\"topBarLinkColor\",\"fallback\":_vm.previewTheme.colors.topBarLink,\"label\":_vm.$t('settings.links')},model:{value:(_vm.topBarLinkColorLocal),callback:function ($$v) {_vm.topBarLinkColorLocal=$$v},expression:\"topBarLinkColorLocal\"}}),_vm._v(\" \"),_c('ContrastRatio',{attrs:{\"contrast\":_vm.previewContrast.topBarLink}})],1),_vm._v(\" \"),_c('div',{staticClass:\"color-item\"},[_c('h4',[_vm._v(_vm._s(_vm.$t('settings.style.advanced_colors.inputs')))]),_vm._v(\" \"),_c('ColorInput',{attrs:{\"name\":\"inputColor\",\"fallback\":_vm.previewTheme.colors.input,\"label\":_vm.$t('settings.background')},model:{value:(_vm.inputColorLocal),callback:function ($$v) {_vm.inputColorLocal=$$v},expression:\"inputColorLocal\"}}),_vm._v(\" \"),_c('OpacityInput',{attrs:{\"name\":\"inputOpacity\",\"fallback\":_vm.previewTheme.opacity.input,\"disabled\":_vm.inputColorLocal === 'transparent'},model:{value:(_vm.inputOpacityLocal),callback:function ($$v) {_vm.inputOpacityLocal=$$v},expression:\"inputOpacityLocal\"}}),_vm._v(\" \"),_c('ColorInput',{attrs:{\"name\":\"inputTextColor\",\"fallback\":_vm.previewTheme.colors.inputText,\"label\":_vm.$t('settings.text')},model:{value:(_vm.inputTextColorLocal),callback:function ($$v) {_vm.inputTextColorLocal=$$v},expression:\"inputTextColorLocal\"}}),_vm._v(\" \"),_c('ContrastRatio',{attrs:{\"contrast\":_vm.previewContrast.inputText}})],1),_vm._v(\" \"),_c('div',{staticClass:\"color-item\"},[_c('h4',[_vm._v(_vm._s(_vm.$t('settings.style.advanced_colors.buttons')))]),_vm._v(\" \"),_c('ColorInput',{attrs:{\"name\":\"btnColor\",\"fallback\":_vm.previewTheme.colors.btn,\"label\":_vm.$t('settings.background')},model:{value:(_vm.btnColorLocal),callback:function ($$v) {_vm.btnColorLocal=$$v},expression:\"btnColorLocal\"}}),_vm._v(\" \"),_c('OpacityInput',{attrs:{\"name\":\"btnOpacity\",\"fallback\":_vm.previewTheme.opacity.btn,\"disabled\":_vm.btnColorLocal === 'transparent'},model:{value:(_vm.btnOpacityLocal),callback:function ($$v) {_vm.btnOpacityLocal=$$v},expression:\"btnOpacityLocal\"}}),_vm._v(\" \"),_c('ColorInput',{attrs:{\"name\":\"btnTextColor\",\"fallback\":_vm.previewTheme.colors.btnText,\"label\":_vm.$t('settings.text')},model:{value:(_vm.btnTextColorLocal),callback:function ($$v) {_vm.btnTextColorLocal=$$v},expression:\"btnTextColorLocal\"}}),_vm._v(\" \"),_c('ContrastRatio',{attrs:{\"contrast\":_vm.previewContrast.btnText}}),_vm._v(\" \"),_c('ColorInput',{attrs:{\"name\":\"btnPanelTextColor\",\"fallback\":_vm.previewTheme.colors.btnPanelText,\"label\":_vm.$t('settings.style.advanced_colors.panel_header')},model:{value:(_vm.btnPanelTextColorLocal),callback:function ($$v) {_vm.btnPanelTextColorLocal=$$v},expression:\"btnPanelTextColorLocal\"}}),_vm._v(\" \"),_c('ContrastRatio',{attrs:{\"contrast\":_vm.previewContrast.btnPanelText}}),_vm._v(\" \"),_c('ColorInput',{attrs:{\"name\":\"btnTopBarTextColor\",\"fallback\":_vm.previewTheme.colors.btnTopBarText,\"label\":_vm.$t('settings.style.advanced_colors.top_bar')},model:{value:(_vm.btnTopBarTextColorLocal),callback:function ($$v) {_vm.btnTopBarTextColorLocal=$$v},expression:\"btnTopBarTextColorLocal\"}}),_vm._v(\" \"),_c('ContrastRatio',{attrs:{\"contrast\":_vm.previewContrast.btnTopBarText}}),_vm._v(\" \"),_c('h5',[_vm._v(_vm._s(_vm.$t('settings.style.advanced_colors.pressed')))]),_vm._v(\" \"),_c('ColorInput',{attrs:{\"name\":\"btnPressedColor\",\"fallback\":_vm.previewTheme.colors.btnPressed,\"label\":_vm.$t('settings.background')},model:{value:(_vm.btnPressedColorLocal),callback:function ($$v) {_vm.btnPressedColorLocal=$$v},expression:\"btnPressedColorLocal\"}}),_vm._v(\" \"),_c('ColorInput',{attrs:{\"name\":\"btnPressedTextColor\",\"fallback\":_vm.previewTheme.colors.btnPressedText,\"label\":_vm.$t('settings.text')},model:{value:(_vm.btnPressedTextColorLocal),callback:function ($$v) {_vm.btnPressedTextColorLocal=$$v},expression:\"btnPressedTextColorLocal\"}}),_vm._v(\" \"),_c('ContrastRatio',{attrs:{\"contrast\":_vm.previewContrast.btnPressedText}}),_vm._v(\" \"),_c('ColorInput',{attrs:{\"name\":\"btnPressedPanelTextColor\",\"fallback\":_vm.previewTheme.colors.btnPressedPanelText,\"label\":_vm.$t('settings.style.advanced_colors.panel_header')},model:{value:(_vm.btnPressedPanelTextColorLocal),callback:function ($$v) {_vm.btnPressedPanelTextColorLocal=$$v},expression:\"btnPressedPanelTextColorLocal\"}}),_vm._v(\" \"),_c('ContrastRatio',{attrs:{\"contrast\":_vm.previewContrast.btnPressedPanelText}}),_vm._v(\" \"),_c('ColorInput',{attrs:{\"name\":\"btnPressedTopBarTextColor\",\"fallback\":_vm.previewTheme.colors.btnPressedTopBarText,\"label\":_vm.$t('settings.style.advanced_colors.top_bar')},model:{value:(_vm.btnPressedTopBarTextColorLocal),callback:function ($$v) {_vm.btnPressedTopBarTextColorLocal=$$v},expression:\"btnPressedTopBarTextColorLocal\"}}),_vm._v(\" \"),_c('ContrastRatio',{attrs:{\"contrast\":_vm.previewContrast.btnPressedTopBarText}}),_vm._v(\" \"),_c('h5',[_vm._v(_vm._s(_vm.$t('settings.style.advanced_colors.disabled')))]),_vm._v(\" \"),_c('ColorInput',{attrs:{\"name\":\"btnDisabledColor\",\"fallback\":_vm.previewTheme.colors.btnDisabled,\"label\":_vm.$t('settings.background')},model:{value:(_vm.btnDisabledColorLocal),callback:function ($$v) {_vm.btnDisabledColorLocal=$$v},expression:\"btnDisabledColorLocal\"}}),_vm._v(\" \"),_c('ColorInput',{attrs:{\"name\":\"btnDisabledTextColor\",\"fallback\":_vm.previewTheme.colors.btnDisabledText,\"label\":_vm.$t('settings.text')},model:{value:(_vm.btnDisabledTextColorLocal),callback:function ($$v) {_vm.btnDisabledTextColorLocal=$$v},expression:\"btnDisabledTextColorLocal\"}}),_vm._v(\" \"),_c('ColorInput',{attrs:{\"name\":\"btnDisabledPanelTextColor\",\"fallback\":_vm.previewTheme.colors.btnDisabledPanelText,\"label\":_vm.$t('settings.style.advanced_colors.panel_header')},model:{value:(_vm.btnDisabledPanelTextColorLocal),callback:function ($$v) {_vm.btnDisabledPanelTextColorLocal=$$v},expression:\"btnDisabledPanelTextColorLocal\"}}),_vm._v(\" \"),_c('ColorInput',{attrs:{\"name\":\"btnDisabledTopBarTextColor\",\"fallback\":_vm.previewTheme.colors.btnDisabledTopBarText,\"label\":_vm.$t('settings.style.advanced_colors.top_bar')},model:{value:(_vm.btnDisabledTopBarTextColorLocal),callback:function ($$v) {_vm.btnDisabledTopBarTextColorLocal=$$v},expression:\"btnDisabledTopBarTextColorLocal\"}}),_vm._v(\" \"),_c('h5',[_vm._v(_vm._s(_vm.$t('settings.style.advanced_colors.toggled')))]),_vm._v(\" \"),_c('ColorInput',{attrs:{\"name\":\"btnToggledColor\",\"fallback\":_vm.previewTheme.colors.btnToggled,\"label\":_vm.$t('settings.background')},model:{value:(_vm.btnToggledColorLocal),callback:function ($$v) {_vm.btnToggledColorLocal=$$v},expression:\"btnToggledColorLocal\"}}),_vm._v(\" \"),_c('ColorInput',{attrs:{\"name\":\"btnToggledTextColor\",\"fallback\":_vm.previewTheme.colors.btnToggledText,\"label\":_vm.$t('settings.text')},model:{value:(_vm.btnToggledTextColorLocal),callback:function ($$v) {_vm.btnToggledTextColorLocal=$$v},expression:\"btnToggledTextColorLocal\"}}),_vm._v(\" \"),_c('ContrastRatio',{attrs:{\"contrast\":_vm.previewContrast.btnToggledText}}),_vm._v(\" \"),_c('ColorInput',{attrs:{\"name\":\"btnToggledPanelTextColor\",\"fallback\":_vm.previewTheme.colors.btnToggledPanelText,\"label\":_vm.$t('settings.style.advanced_colors.panel_header')},model:{value:(_vm.btnToggledPanelTextColorLocal),callback:function ($$v) {_vm.btnToggledPanelTextColorLocal=$$v},expression:\"btnToggledPanelTextColorLocal\"}}),_vm._v(\" \"),_c('ContrastRatio',{attrs:{\"contrast\":_vm.previewContrast.btnToggledPanelText}}),_vm._v(\" \"),_c('ColorInput',{attrs:{\"name\":\"btnToggledTopBarTextColor\",\"fallback\":_vm.previewTheme.colors.btnToggledTopBarText,\"label\":_vm.$t('settings.style.advanced_colors.top_bar')},model:{value:(_vm.btnToggledTopBarTextColorLocal),callback:function ($$v) {_vm.btnToggledTopBarTextColorLocal=$$v},expression:\"btnToggledTopBarTextColorLocal\"}}),_vm._v(\" \"),_c('ContrastRatio',{attrs:{\"contrast\":_vm.previewContrast.btnToggledTopBarText}})],1),_vm._v(\" \"),_c('div',{staticClass:\"color-item\"},[_c('h4',[_vm._v(_vm._s(_vm.$t('settings.style.advanced_colors.tabs')))]),_vm._v(\" \"),_c('ColorInput',{attrs:{\"name\":\"tabColor\",\"fallback\":_vm.previewTheme.colors.tab,\"label\":_vm.$t('settings.background')},model:{value:(_vm.tabColorLocal),callback:function ($$v) {_vm.tabColorLocal=$$v},expression:\"tabColorLocal\"}}),_vm._v(\" \"),_c('ColorInput',{attrs:{\"name\":\"tabTextColor\",\"fallback\":_vm.previewTheme.colors.tabText,\"label\":_vm.$t('settings.text')},model:{value:(_vm.tabTextColorLocal),callback:function ($$v) {_vm.tabTextColorLocal=$$v},expression:\"tabTextColorLocal\"}}),_vm._v(\" \"),_c('ContrastRatio',{attrs:{\"contrast\":_vm.previewContrast.tabText}}),_vm._v(\" \"),_c('ColorInput',{attrs:{\"name\":\"tabActiveTextColor\",\"fallback\":_vm.previewTheme.colors.tabActiveText,\"label\":_vm.$t('settings.text')},model:{value:(_vm.tabActiveTextColorLocal),callback:function ($$v) {_vm.tabActiveTextColorLocal=$$v},expression:\"tabActiveTextColorLocal\"}}),_vm._v(\" \"),_c('ContrastRatio',{attrs:{\"contrast\":_vm.previewContrast.tabActiveText}})],1),_vm._v(\" \"),_c('div',{staticClass:\"color-item\"},[_c('h4',[_vm._v(_vm._s(_vm.$t('settings.style.advanced_colors.borders')))]),_vm._v(\" \"),_c('ColorInput',{attrs:{\"name\":\"borderColor\",\"fallback\":_vm.previewTheme.colors.border,\"label\":_vm.$t('settings.style.common.color')},model:{value:(_vm.borderColorLocal),callback:function ($$v) {_vm.borderColorLocal=$$v},expression:\"borderColorLocal\"}}),_vm._v(\" \"),_c('OpacityInput',{attrs:{\"name\":\"borderOpacity\",\"fallback\":_vm.previewTheme.opacity.border,\"disabled\":_vm.borderColorLocal === 'transparent'},model:{value:(_vm.borderOpacityLocal),callback:function ($$v) {_vm.borderOpacityLocal=$$v},expression:\"borderOpacityLocal\"}})],1),_vm._v(\" \"),_c('div',{staticClass:\"color-item\"},[_c('h4',[_vm._v(_vm._s(_vm.$t('settings.style.advanced_colors.faint_text')))]),_vm._v(\" \"),_c('ColorInput',{attrs:{\"name\":\"faintColor\",\"fallback\":_vm.previewTheme.colors.faint,\"label\":_vm.$t('settings.text')},model:{value:(_vm.faintColorLocal),callback:function ($$v) {_vm.faintColorLocal=$$v},expression:\"faintColorLocal\"}}),_vm._v(\" \"),_c('ColorInput',{attrs:{\"name\":\"faintLinkColor\",\"fallback\":_vm.previewTheme.colors.faintLink,\"label\":_vm.$t('settings.links')},model:{value:(_vm.faintLinkColorLocal),callback:function ($$v) {_vm.faintLinkColorLocal=$$v},expression:\"faintLinkColorLocal\"}}),_vm._v(\" \"),_c('ColorInput',{attrs:{\"name\":\"panelFaintColor\",\"fallback\":_vm.previewTheme.colors.panelFaint,\"label\":_vm.$t('settings.style.advanced_colors.panel_header')},model:{value:(_vm.panelFaintColorLocal),callback:function ($$v) {_vm.panelFaintColorLocal=$$v},expression:\"panelFaintColorLocal\"}}),_vm._v(\" \"),_c('OpacityInput',{attrs:{\"name\":\"faintOpacity\",\"fallback\":_vm.previewTheme.opacity.faint},model:{value:(_vm.faintOpacityLocal),callback:function ($$v) {_vm.faintOpacityLocal=$$v},expression:\"faintOpacityLocal\"}})],1),_vm._v(\" \"),_c('div',{staticClass:\"color-item\"},[_c('h4',[_vm._v(_vm._s(_vm.$t('settings.style.advanced_colors.underlay')))]),_vm._v(\" \"),_c('ColorInput',{attrs:{\"name\":\"underlay\",\"label\":_vm.$t('settings.style.advanced_colors.underlay'),\"fallback\":_vm.previewTheme.colors.underlay},model:{value:(_vm.underlayColorLocal),callback:function ($$v) {_vm.underlayColorLocal=$$v},expression:\"underlayColorLocal\"}}),_vm._v(\" \"),_c('OpacityInput',{attrs:{\"name\":\"underlayOpacity\",\"fallback\":_vm.previewTheme.opacity.underlay,\"disabled\":_vm.underlayOpacityLocal === 'transparent'},model:{value:(_vm.underlayOpacityLocal),callback:function ($$v) {_vm.underlayOpacityLocal=$$v},expression:\"underlayOpacityLocal\"}})],1),_vm._v(\" \"),_c('div',{staticClass:\"color-item\"},[_c('h4',[_vm._v(_vm._s(_vm.$t('settings.style.advanced_colors.poll')))]),_vm._v(\" \"),_c('ColorInput',{attrs:{\"name\":\"poll\",\"label\":_vm.$t('settings.background'),\"fallback\":_vm.previewTheme.colors.poll},model:{value:(_vm.pollColorLocal),callback:function ($$v) {_vm.pollColorLocal=$$v},expression:\"pollColorLocal\"}}),_vm._v(\" \"),_c('ColorInput',{attrs:{\"name\":\"pollText\",\"label\":_vm.$t('settings.text'),\"fallback\":_vm.previewTheme.colors.pollText},model:{value:(_vm.pollTextColorLocal),callback:function ($$v) {_vm.pollTextColorLocal=$$v},expression:\"pollTextColorLocal\"}})],1),_vm._v(\" \"),_c('div',{staticClass:\"color-item\"},[_c('h4',[_vm._v(_vm._s(_vm.$t('settings.style.advanced_colors.icons')))]),_vm._v(\" \"),_c('ColorInput',{attrs:{\"name\":\"icon\",\"label\":_vm.$t('settings.style.advanced_colors.icons'),\"fallback\":_vm.previewTheme.colors.icon},model:{value:(_vm.iconColorLocal),callback:function ($$v) {_vm.iconColorLocal=$$v},expression:\"iconColorLocal\"}})],1),_vm._v(\" \"),_c('div',{staticClass:\"color-item\"},[_c('h4',[_vm._v(_vm._s(_vm.$t('settings.style.advanced_colors.highlight')))]),_vm._v(\" \"),_c('ColorInput',{attrs:{\"name\":\"highlight\",\"label\":_vm.$t('settings.background'),\"fallback\":_vm.previewTheme.colors.highlight},model:{value:(_vm.highlightColorLocal),callback:function ($$v) {_vm.highlightColorLocal=$$v},expression:\"highlightColorLocal\"}}),_vm._v(\" \"),_c('ColorInput',{attrs:{\"name\":\"highlightText\",\"label\":_vm.$t('settings.text'),\"fallback\":_vm.previewTheme.colors.highlightText},model:{value:(_vm.highlightTextColorLocal),callback:function ($$v) {_vm.highlightTextColorLocal=$$v},expression:\"highlightTextColorLocal\"}}),_vm._v(\" \"),_c('ContrastRatio',{attrs:{\"contrast\":_vm.previewContrast.highlightText}}),_vm._v(\" \"),_c('ColorInput',{attrs:{\"name\":\"highlightLink\",\"label\":_vm.$t('settings.links'),\"fallback\":_vm.previewTheme.colors.highlightLink},model:{value:(_vm.highlightLinkColorLocal),callback:function ($$v) {_vm.highlightLinkColorLocal=$$v},expression:\"highlightLinkColorLocal\"}}),_vm._v(\" \"),_c('ContrastRatio',{attrs:{\"contrast\":_vm.previewContrast.highlightLink}})],1),_vm._v(\" \"),_c('div',{staticClass:\"color-item\"},[_c('h4',[_vm._v(_vm._s(_vm.$t('settings.style.advanced_colors.popover')))]),_vm._v(\" \"),_c('ColorInput',{attrs:{\"name\":\"popover\",\"label\":_vm.$t('settings.background'),\"fallback\":_vm.previewTheme.colors.popover},model:{value:(_vm.popoverColorLocal),callback:function ($$v) {_vm.popoverColorLocal=$$v},expression:\"popoverColorLocal\"}}),_vm._v(\" \"),_c('OpacityInput',{attrs:{\"name\":\"popoverOpacity\",\"fallback\":_vm.previewTheme.opacity.popover,\"disabled\":_vm.popoverOpacityLocal === 'transparent'},model:{value:(_vm.popoverOpacityLocal),callback:function ($$v) {_vm.popoverOpacityLocal=$$v},expression:\"popoverOpacityLocal\"}}),_vm._v(\" \"),_c('ColorInput',{attrs:{\"name\":\"popoverText\",\"label\":_vm.$t('settings.text'),\"fallback\":_vm.previewTheme.colors.popoverText},model:{value:(_vm.popoverTextColorLocal),callback:function ($$v) {_vm.popoverTextColorLocal=$$v},expression:\"popoverTextColorLocal\"}}),_vm._v(\" \"),_c('ContrastRatio',{attrs:{\"contrast\":_vm.previewContrast.popoverText}}),_vm._v(\" \"),_c('ColorInput',{attrs:{\"name\":\"popoverLink\",\"label\":_vm.$t('settings.links'),\"fallback\":_vm.previewTheme.colors.popoverLink},model:{value:(_vm.popoverLinkColorLocal),callback:function ($$v) {_vm.popoverLinkColorLocal=$$v},expression:\"popoverLinkColorLocal\"}}),_vm._v(\" \"),_c('ContrastRatio',{attrs:{\"contrast\":_vm.previewContrast.popoverLink}})],1),_vm._v(\" \"),_c('div',{staticClass:\"color-item\"},[_c('h4',[_vm._v(_vm._s(_vm.$t('settings.style.advanced_colors.selectedPost')))]),_vm._v(\" \"),_c('ColorInput',{attrs:{\"name\":\"selectedPost\",\"label\":_vm.$t('settings.background'),\"fallback\":_vm.previewTheme.colors.selectedPost},model:{value:(_vm.selectedPostColorLocal),callback:function ($$v) {_vm.selectedPostColorLocal=$$v},expression:\"selectedPostColorLocal\"}}),_vm._v(\" \"),_c('ColorInput',{attrs:{\"name\":\"selectedPostText\",\"label\":_vm.$t('settings.text'),\"fallback\":_vm.previewTheme.colors.selectedPostText},model:{value:(_vm.selectedPostTextColorLocal),callback:function ($$v) {_vm.selectedPostTextColorLocal=$$v},expression:\"selectedPostTextColorLocal\"}}),_vm._v(\" \"),_c('ContrastRatio',{attrs:{\"contrast\":_vm.previewContrast.selectedPostText}}),_vm._v(\" \"),_c('ColorInput',{attrs:{\"name\":\"selectedPostLink\",\"label\":_vm.$t('settings.links'),\"fallback\":_vm.previewTheme.colors.selectedPostLink},model:{value:(_vm.selectedPostLinkColorLocal),callback:function ($$v) {_vm.selectedPostLinkColorLocal=$$v},expression:\"selectedPostLinkColorLocal\"}}),_vm._v(\" \"),_c('ContrastRatio',{attrs:{\"contrast\":_vm.previewContrast.selectedPostLink}})],1),_vm._v(\" \"),_c('div',{staticClass:\"color-item\"},[_c('h4',[_vm._v(_vm._s(_vm.$t('settings.style.advanced_colors.selectedMenu')))]),_vm._v(\" \"),_c('ColorInput',{attrs:{\"name\":\"selectedMenu\",\"label\":_vm.$t('settings.background'),\"fallback\":_vm.previewTheme.colors.selectedMenu},model:{value:(_vm.selectedMenuColorLocal),callback:function ($$v) {_vm.selectedMenuColorLocal=$$v},expression:\"selectedMenuColorLocal\"}}),_vm._v(\" \"),_c('ColorInput',{attrs:{\"name\":\"selectedMenuText\",\"label\":_vm.$t('settings.text'),\"fallback\":_vm.previewTheme.colors.selectedMenuText},model:{value:(_vm.selectedMenuTextColorLocal),callback:function ($$v) {_vm.selectedMenuTextColorLocal=$$v},expression:\"selectedMenuTextColorLocal\"}}),_vm._v(\" \"),_c('ContrastRatio',{attrs:{\"contrast\":_vm.previewContrast.selectedMenuText}}),_vm._v(\" \"),_c('ColorInput',{attrs:{\"name\":\"selectedMenuLink\",\"label\":_vm.$t('settings.links'),\"fallback\":_vm.previewTheme.colors.selectedMenuLink},model:{value:(_vm.selectedMenuLinkColorLocal),callback:function ($$v) {_vm.selectedMenuLinkColorLocal=$$v},expression:\"selectedMenuLinkColorLocal\"}}),_vm._v(\" \"),_c('ContrastRatio',{attrs:{\"contrast\":_vm.previewContrast.selectedMenuLink}})],1),_vm._v(\" \"),_c('div',{staticClass:\"color-item\"},[_c('h4',[_vm._v(_vm._s(_vm.$t('chats.chats')))]),_vm._v(\" \"),_c('ColorInput',{attrs:{\"name\":\"chatBgColor\",\"fallback\":_vm.previewTheme.colors.bg || 1,\"label\":_vm.$t('settings.background')},model:{value:(_vm.chatBgColorLocal),callback:function ($$v) {_vm.chatBgColorLocal=$$v},expression:\"chatBgColorLocal\"}}),_vm._v(\" \"),_c('h5',[_vm._v(_vm._s(_vm.$t('settings.style.advanced_colors.chat.incoming')))]),_vm._v(\" \"),_c('ColorInput',{attrs:{\"name\":\"chatMessageIncomingBgColor\",\"fallback\":_vm.previewTheme.colors.bg || 1,\"label\":_vm.$t('settings.background')},model:{value:(_vm.chatMessageIncomingBgColorLocal),callback:function ($$v) {_vm.chatMessageIncomingBgColorLocal=$$v},expression:\"chatMessageIncomingBgColorLocal\"}}),_vm._v(\" \"),_c('ColorInput',{attrs:{\"name\":\"chatMessageIncomingTextColor\",\"fallback\":_vm.previewTheme.colors.text || 1,\"label\":_vm.$t('settings.text')},model:{value:(_vm.chatMessageIncomingTextColorLocal),callback:function ($$v) {_vm.chatMessageIncomingTextColorLocal=$$v},expression:\"chatMessageIncomingTextColorLocal\"}}),_vm._v(\" \"),_c('ColorInput',{attrs:{\"name\":\"chatMessageIncomingLinkColor\",\"fallback\":_vm.previewTheme.colors.link || 1,\"label\":_vm.$t('settings.links')},model:{value:(_vm.chatMessageIncomingLinkColorLocal),callback:function ($$v) {_vm.chatMessageIncomingLinkColorLocal=$$v},expression:\"chatMessageIncomingLinkColorLocal\"}}),_vm._v(\" \"),_c('ColorInput',{attrs:{\"name\":\"chatMessageIncomingBorderLinkColor\",\"fallback\":_vm.previewTheme.colors.fg || 1,\"label\":_vm.$t('settings.style.advanced_colors.chat.border')},model:{value:(_vm.chatMessageIncomingBorderColorLocal),callback:function ($$v) {_vm.chatMessageIncomingBorderColorLocal=$$v},expression:\"chatMessageIncomingBorderColorLocal\"}}),_vm._v(\" \"),_c('h5',[_vm._v(_vm._s(_vm.$t('settings.style.advanced_colors.chat.outgoing')))]),_vm._v(\" \"),_c('ColorInput',{attrs:{\"name\":\"chatMessageOutgoingBgColor\",\"fallback\":_vm.previewTheme.colors.bg || 1,\"label\":_vm.$t('settings.background')},model:{value:(_vm.chatMessageOutgoingBgColorLocal),callback:function ($$v) {_vm.chatMessageOutgoingBgColorLocal=$$v},expression:\"chatMessageOutgoingBgColorLocal\"}}),_vm._v(\" \"),_c('ColorInput',{attrs:{\"name\":\"chatMessageOutgoingTextColor\",\"fallback\":_vm.previewTheme.colors.text || 1,\"label\":_vm.$t('settings.text')},model:{value:(_vm.chatMessageOutgoingTextColorLocal),callback:function ($$v) {_vm.chatMessageOutgoingTextColorLocal=$$v},expression:\"chatMessageOutgoingTextColorLocal\"}}),_vm._v(\" \"),_c('ColorInput',{attrs:{\"name\":\"chatMessageOutgoingLinkColor\",\"fallback\":_vm.previewTheme.colors.link || 1,\"label\":_vm.$t('settings.links')},model:{value:(_vm.chatMessageOutgoingLinkColorLocal),callback:function ($$v) {_vm.chatMessageOutgoingLinkColorLocal=$$v},expression:\"chatMessageOutgoingLinkColorLocal\"}}),_vm._v(\" \"),_c('ColorInput',{attrs:{\"name\":\"chatMessageOutgoingBorderLinkColor\",\"fallback\":_vm.previewTheme.colors.bg || 1,\"label\":_vm.$t('settings.style.advanced_colors.chat.border')},model:{value:(_vm.chatMessageOutgoingBorderColorLocal),callback:function ($$v) {_vm.chatMessageOutgoingBorderColorLocal=$$v},expression:\"chatMessageOutgoingBorderColorLocal\"}})],1)]),_vm._v(\" \"),_c('div',{staticClass:\"radius-container\",attrs:{\"label\":_vm.$t('settings.style.radii._tab_label')}},[_c('div',{staticClass:\"tab-header\"},[_c('p',[_vm._v(_vm._s(_vm.$t('settings.radii_help')))]),_vm._v(\" \"),_c('button',{staticClass:\"btn\",on:{\"click\":_vm.clearRoundness}},[_vm._v(\"\\n \"+_vm._s(_vm.$t('settings.style.switcher.clear_all'))+\"\\n \")])]),_vm._v(\" \"),_c('RangeInput',{attrs:{\"name\":\"btnRadius\",\"label\":_vm.$t('settings.btnRadius'),\"fallback\":_vm.previewTheme.radii.btn,\"max\":\"16\",\"hard-min\":\"0\"},model:{value:(_vm.btnRadiusLocal),callback:function ($$v) {_vm.btnRadiusLocal=$$v},expression:\"btnRadiusLocal\"}}),_vm._v(\" \"),_c('RangeInput',{attrs:{\"name\":\"inputRadius\",\"label\":_vm.$t('settings.inputRadius'),\"fallback\":_vm.previewTheme.radii.input,\"max\":\"9\",\"hard-min\":\"0\"},model:{value:(_vm.inputRadiusLocal),callback:function ($$v) {_vm.inputRadiusLocal=$$v},expression:\"inputRadiusLocal\"}}),_vm._v(\" \"),_c('RangeInput',{attrs:{\"name\":\"checkboxRadius\",\"label\":_vm.$t('settings.checkboxRadius'),\"fallback\":_vm.previewTheme.radii.checkbox,\"max\":\"16\",\"hard-min\":\"0\"},model:{value:(_vm.checkboxRadiusLocal),callback:function ($$v) {_vm.checkboxRadiusLocal=$$v},expression:\"checkboxRadiusLocal\"}}),_vm._v(\" \"),_c('RangeInput',{attrs:{\"name\":\"panelRadius\",\"label\":_vm.$t('settings.panelRadius'),\"fallback\":_vm.previewTheme.radii.panel,\"max\":\"50\",\"hard-min\":\"0\"},model:{value:(_vm.panelRadiusLocal),callback:function ($$v) {_vm.panelRadiusLocal=$$v},expression:\"panelRadiusLocal\"}}),_vm._v(\" \"),_c('RangeInput',{attrs:{\"name\":\"avatarRadius\",\"label\":_vm.$t('settings.avatarRadius'),\"fallback\":_vm.previewTheme.radii.avatar,\"max\":\"28\",\"hard-min\":\"0\"},model:{value:(_vm.avatarRadiusLocal),callback:function ($$v) {_vm.avatarRadiusLocal=$$v},expression:\"avatarRadiusLocal\"}}),_vm._v(\" \"),_c('RangeInput',{attrs:{\"name\":\"avatarAltRadius\",\"label\":_vm.$t('settings.avatarAltRadius'),\"fallback\":_vm.previewTheme.radii.avatarAlt,\"max\":\"28\",\"hard-min\":\"0\"},model:{value:(_vm.avatarAltRadiusLocal),callback:function ($$v) {_vm.avatarAltRadiusLocal=$$v},expression:\"avatarAltRadiusLocal\"}}),_vm._v(\" \"),_c('RangeInput',{attrs:{\"name\":\"attachmentRadius\",\"label\":_vm.$t('settings.attachmentRadius'),\"fallback\":_vm.previewTheme.radii.attachment,\"max\":\"50\",\"hard-min\":\"0\"},model:{value:(_vm.attachmentRadiusLocal),callback:function ($$v) {_vm.attachmentRadiusLocal=$$v},expression:\"attachmentRadiusLocal\"}}),_vm._v(\" \"),_c('RangeInput',{attrs:{\"name\":\"tooltipRadius\",\"label\":_vm.$t('settings.tooltipRadius'),\"fallback\":_vm.previewTheme.radii.tooltip,\"max\":\"50\",\"hard-min\":\"0\"},model:{value:(_vm.tooltipRadiusLocal),callback:function ($$v) {_vm.tooltipRadiusLocal=$$v},expression:\"tooltipRadiusLocal\"}}),_vm._v(\" \"),_c('RangeInput',{attrs:{\"name\":\"chatMessageRadius\",\"label\":_vm.$t('settings.chatMessageRadius'),\"fallback\":_vm.previewTheme.radii.chatMessage || 2,\"max\":\"50\",\"hard-min\":\"0\"},model:{value:(_vm.chatMessageRadiusLocal),callback:function ($$v) {_vm.chatMessageRadiusLocal=$$v},expression:\"chatMessageRadiusLocal\"}})],1),_vm._v(\" \"),_c('div',{staticClass:\"shadow-container\",attrs:{\"label\":_vm.$t('settings.style.shadows._tab_label')}},[_c('div',{staticClass:\"tab-header shadow-selector\"},[_c('div',{staticClass:\"select-container\"},[_vm._v(\"\\n \"+_vm._s(_vm.$t('settings.style.shadows.component'))+\"\\n \"),_c('label',{staticClass:\"select\",attrs:{\"for\":\"shadow-switcher\"}},[_c('select',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.shadowSelected),expression:\"shadowSelected\"}],staticClass:\"shadow-switcher\",attrs:{\"id\":\"shadow-switcher\"},on:{\"change\":function($event){var $$selectedVal = Array.prototype.filter.call($event.target.options,function(o){return o.selected}).map(function(o){var val = \"_value\" in o ? o._value : o.value;return val}); _vm.shadowSelected=$event.target.multiple ? $$selectedVal : $$selectedVal[0]}}},_vm._l((_vm.shadowsAvailable),function(shadow){return _c('option',{key:shadow,domProps:{\"value\":shadow}},[_vm._v(\"\\n \"+_vm._s(_vm.$t('settings.style.shadows.components.' + shadow))+\"\\n \")])}),0),_vm._v(\" \"),_c('i',{staticClass:\"icon-down-open\"})])]),_vm._v(\" \"),_c('div',{staticClass:\"override\"},[_c('label',{staticClass:\"label\",attrs:{\"for\":\"override\"}},[_vm._v(\"\\n \"+_vm._s(_vm.$t('settings.style.shadows.override'))+\"\\n \")]),_vm._v(\" \"),_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.currentShadowOverriden),expression:\"currentShadowOverriden\"}],staticClass:\"input-override\",attrs:{\"id\":\"override\",\"name\":\"override\",\"type\":\"checkbox\"},domProps:{\"checked\":Array.isArray(_vm.currentShadowOverriden)?_vm._i(_vm.currentShadowOverriden,null)>-1:(_vm.currentShadowOverriden)},on:{\"change\":function($event){var $$a=_vm.currentShadowOverriden,$$el=$event.target,$$c=$$el.checked?(true):(false);if(Array.isArray($$a)){var $$v=null,$$i=_vm._i($$a,$$v);if($$el.checked){$$i<0&&(_vm.currentShadowOverriden=$$a.concat([$$v]))}else{$$i>-1&&(_vm.currentShadowOverriden=$$a.slice(0,$$i).concat($$a.slice($$i+1)))}}else{_vm.currentShadowOverriden=$$c}}}}),_vm._v(\" \"),_c('label',{staticClass:\"checkbox-label\",attrs:{\"for\":\"override\"}})]),_vm._v(\" \"),_c('button',{staticClass:\"btn\",on:{\"click\":_vm.clearShadows}},[_vm._v(\"\\n \"+_vm._s(_vm.$t('settings.style.switcher.clear_all'))+\"\\n \")])]),_vm._v(\" \"),_c('ShadowControl',{attrs:{\"ready\":!!_vm.currentShadowFallback,\"fallback\":_vm.currentShadowFallback},model:{value:(_vm.currentShadow),callback:function ($$v) {_vm.currentShadow=$$v},expression:\"currentShadow\"}}),_vm._v(\" \"),(_vm.shadowSelected === 'avatar' || _vm.shadowSelected === 'avatarStatus')?_c('div',[_c('i18n',{attrs:{\"path\":\"settings.style.shadows.filter_hint.always_drop_shadow\",\"tag\":\"p\"}},[_c('code',[_vm._v(\"filter: drop-shadow()\")])]),_vm._v(\" \"),_c('p',[_vm._v(_vm._s(_vm.$t('settings.style.shadows.filter_hint.avatar_inset')))]),_vm._v(\" \"),_c('i18n',{attrs:{\"path\":\"settings.style.shadows.filter_hint.drop_shadow_syntax\",\"tag\":\"p\"}},[_c('code',[_vm._v(\"drop-shadow\")]),_vm._v(\" \"),_c('code',[_vm._v(\"spread-radius\")]),_vm._v(\" \"),_c('code',[_vm._v(\"inset\")])]),_vm._v(\" \"),_c('i18n',{attrs:{\"path\":\"settings.style.shadows.filter_hint.inset_classic\",\"tag\":\"p\"}},[_c('code',[_vm._v(\"box-shadow\")])]),_vm._v(\" \"),_c('p',[_vm._v(_vm._s(_vm.$t('settings.style.shadows.filter_hint.spread_zero')))])],1):_vm._e()],1),_vm._v(\" \"),_c('div',{staticClass:\"fonts-container\",attrs:{\"label\":_vm.$t('settings.style.fonts._tab_label')}},[_c('div',{staticClass:\"tab-header\"},[_c('p',[_vm._v(_vm._s(_vm.$t('settings.style.fonts.help')))]),_vm._v(\" \"),_c('button',{staticClass:\"btn\",on:{\"click\":_vm.clearFonts}},[_vm._v(\"\\n \"+_vm._s(_vm.$t('settings.style.switcher.clear_all'))+\"\\n \")])]),_vm._v(\" \"),_c('FontControl',{attrs:{\"name\":\"ui\",\"label\":_vm.$t('settings.style.fonts.components.interface'),\"fallback\":_vm.previewTheme.fonts.interface,\"no-inherit\":\"1\"},model:{value:(_vm.fontsLocal.interface),callback:function ($$v) {_vm.$set(_vm.fontsLocal, \"interface\", $$v)},expression:\"fontsLocal.interface\"}}),_vm._v(\" \"),_c('FontControl',{attrs:{\"name\":\"input\",\"label\":_vm.$t('settings.style.fonts.components.input'),\"fallback\":_vm.previewTheme.fonts.input},model:{value:(_vm.fontsLocal.input),callback:function ($$v) {_vm.$set(_vm.fontsLocal, \"input\", $$v)},expression:\"fontsLocal.input\"}}),_vm._v(\" \"),_c('FontControl',{attrs:{\"name\":\"post\",\"label\":_vm.$t('settings.style.fonts.components.post'),\"fallback\":_vm.previewTheme.fonts.post},model:{value:(_vm.fontsLocal.post),callback:function ($$v) {_vm.$set(_vm.fontsLocal, \"post\", $$v)},expression:\"fontsLocal.post\"}}),_vm._v(\" \"),_c('FontControl',{attrs:{\"name\":\"postCode\",\"label\":_vm.$t('settings.style.fonts.components.postCode'),\"fallback\":_vm.previewTheme.fonts.postCode},model:{value:(_vm.fontsLocal.postCode),callback:function ($$v) {_vm.$set(_vm.fontsLocal, \"postCode\", $$v)},expression:\"fontsLocal.postCode\"}})],1)])],1),_vm._v(\" \"),_c('div',{staticClass:\"apply-container\"},[_c('button',{staticClass:\"btn submit\",attrs:{\"disabled\":!_vm.themeValid},on:{\"click\":_vm.setCustomTheme}},[_vm._v(\"\\n \"+_vm._s(_vm.$t('general.apply'))+\"\\n \")]),_vm._v(\" \"),_c('button',{staticClass:\"btn\",on:{\"click\":_vm.clearAll}},[_vm._v(\"\\n \"+_vm._s(_vm.$t('settings.style.switcher.reset'))+\"\\n \")])])],1)}\nvar staticRenderFns = []\nexport { render, staticRenderFns }","import TabSwitcher from 'src/components/tab_switcher/tab_switcher.js'\n\nimport DataImportExportTab from './tabs/data_import_export_tab.vue'\nimport MutesAndBlocksTab from './tabs/mutes_and_blocks_tab.vue'\nimport NotificationsTab from './tabs/notifications_tab.vue'\nimport FilteringTab from './tabs/filtering_tab.vue'\nimport SecurityTab from './tabs/security_tab/security_tab.vue'\nimport ProfileTab from './tabs/profile_tab.vue'\nimport GeneralTab from './tabs/general_tab.vue'\nimport VersionTab from './tabs/version_tab.vue'\nimport ThemeTab from './tabs/theme_tab/theme_tab.vue'\n\nconst SettingsModalContent = {\n components: {\n TabSwitcher,\n\n DataImportExportTab,\n MutesAndBlocksTab,\n NotificationsTab,\n FilteringTab,\n SecurityTab,\n ProfileTab,\n GeneralTab,\n VersionTab,\n ThemeTab\n },\n computed: {\n isLoggedIn () {\n return !!this.$store.state.users.currentUser\n },\n open () {\n return this.$store.state.interface.settingsModalState !== 'hidden'\n }\n },\n methods: {\n onOpen () {\n const targetTab = this.$store.state.interface.settingsModalTargetTab\n // We're being told to open in specific tab\n if (targetTab) {\n const tabIndex = this.$refs.tabSwitcher.$slots.default.findIndex(elm => {\n return elm.data && elm.data.attrs['data-tab-name'] === targetTab\n })\n if (tabIndex >= 0) {\n this.$refs.tabSwitcher.setTab(tabIndex)\n }\n }\n // Clear the state of target tab, so that next time settings is opened\n // it doesn't force it.\n this.$store.dispatch('clearSettingsModalTargetTab')\n }\n },\n mounted () {\n this.onOpen()\n },\n watch: {\n open: function (value) {\n if (value) this.onOpen()\n }\n }\n}\n\nexport default SettingsModalContent\n","function injectStyle (context) {\n require(\"!!vue-style-loader!css-loader?minimize!../../../node_modules/vue-loader/lib/style-compiler/index?{\\\"optionsId\\\":\\\"0\\\",\\\"vue\\\":true,\\\"scoped\\\":false,\\\"sourceMap\\\":false}!sass-loader!./settings_modal_content.scss\")\n}\n/* script */\nexport * from \"!!babel-loader!./settings_modal_content.js\"\nimport __vue_script__ from \"!!babel-loader!./settings_modal_content.js\"/* template */\nimport {render as __vue_render__, staticRenderFns as __vue_static_render_fns__} from \"!!../../../node_modules/vue-loader/lib/template-compiler/index?{\\\"id\\\":\\\"data-v-da72a86e\\\",\\\"hasScoped\\\":false,\\\"optionsId\\\":\\\"0\\\",\\\"buble\\\":{\\\"transforms\\\":{}}}!../../../node_modules/vue-loader/lib/selector?type=template&index=0!./settings_modal_content.vue\"\n/* template functional */\nvar __vue_template_functional__ = false\n/* styles */\nvar __vue_styles__ = injectStyle\n/* scopeId */\nvar __vue_scopeId__ = null\n/* moduleIdentifier (server only) */\nvar __vue_module_identifier__ = null\nimport normalizeComponent from \"!../../../node_modules/vue-loader/lib/runtime/component-normalizer\"\nvar Component = normalizeComponent(\n __vue_script__,\n __vue_render__,\n __vue_static_render_fns__,\n __vue_template_functional__,\n __vue_styles__,\n __vue_scopeId__,\n __vue_module_identifier__\n)\n\nexport default Component.exports\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('tab-switcher',{ref:\"tabSwitcher\",staticClass:\"settings_tab-switcher\",attrs:{\"side-tab-bar\":true,\"scrollable-tabs\":true}},[_c('div',{attrs:{\"label\":_vm.$t('settings.general'),\"icon\":\"wrench\",\"data-tab-name\":\"general\"}},[_c('GeneralTab')],1),_vm._v(\" \"),(_vm.isLoggedIn)?_c('div',{attrs:{\"label\":_vm.$t('settings.profile_tab'),\"icon\":\"user\",\"data-tab-name\":\"profile\"}},[_c('ProfileTab')],1):_vm._e(),_vm._v(\" \"),(_vm.isLoggedIn)?_c('div',{attrs:{\"label\":_vm.$t('settings.security_tab'),\"icon\":\"lock\",\"data-tab-name\":\"security\"}},[_c('SecurityTab')],1):_vm._e(),_vm._v(\" \"),_c('div',{attrs:{\"label\":_vm.$t('settings.filtering'),\"icon\":\"filter\",\"data-tab-name\":\"filtering\"}},[_c('FilteringTab')],1),_vm._v(\" \"),_c('div',{attrs:{\"label\":_vm.$t('settings.theme'),\"icon\":\"brush\",\"data-tab-name\":\"theme\"}},[_c('ThemeTab')],1),_vm._v(\" \"),(_vm.isLoggedIn)?_c('div',{attrs:{\"label\":_vm.$t('settings.notifications'),\"icon\":\"bell-ringing-o\",\"data-tab-name\":\"notifications\"}},[_c('NotificationsTab')],1):_vm._e(),_vm._v(\" \"),(_vm.isLoggedIn)?_c('div',{attrs:{\"label\":_vm.$t('settings.data_import_export_tab'),\"icon\":\"download\",\"data-tab-name\":\"dataImportExport\"}},[_c('DataImportExportTab')],1):_vm._e(),_vm._v(\" \"),(_vm.isLoggedIn)?_c('div',{attrs:{\"label\":_vm.$t('settings.mutes_and_blocks'),\"fullHeight\":true,\"icon\":\"eye-off\",\"data-tab-name\":\"mutesAndBlocks\"}},[_c('MutesAndBlocksTab')],1):_vm._e(),_vm._v(\" \"),_c('div',{attrs:{\"label\":_vm.$t('settings.version.title'),\"icon\":\"info-circled\",\"data-tab-name\":\"version\"}},[_c('VersionTab')],1)])}\nvar staticRenderFns = []\nexport { render, staticRenderFns }"],"sourceRoot":""} \ No newline at end of file diff --git a/priv/static/static/js/2.c92f4803ff24726cea58.js b/priv/static/static/js/2.e852a6b4b3bba752b838.js similarity index 66% rename from priv/static/static/js/2.c92f4803ff24726cea58.js rename to priv/static/static/js/2.e852a6b4b3bba752b838.js index 55aa1f44e..42e446575 100644 --- a/priv/static/static/js/2.c92f4803ff24726cea58.js +++ b/priv/static/static/js/2.e852a6b4b3bba752b838.js @@ -1,2 +1,2 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[2],{591:function(t,e,s){var a=s(592);"string"==typeof a&&(a=[[t.i,a,""]]),a.locals&&(t.exports=a.locals);(0,s(5).default)("a45e17ec",a,!0,{})},592:function(t,e,s){(t.exports=s(4)(!1)).push([t.i,".settings_tab-switcher{height:100%}.settings_tab-switcher .setting-item{border-bottom:2px solid var(--fg,#182230);margin:1em 1em 1.4em;padding-bottom:1.4em}.settings_tab-switcher .setting-item>div{margin-bottom:.5em}.settings_tab-switcher .setting-item>div:last-child{margin-bottom:0}.settings_tab-switcher .setting-item:last-child{border-bottom:none;padding-bottom:0;margin-bottom:1em}.settings_tab-switcher .setting-item select{min-width:10em}.settings_tab-switcher .setting-item textarea{width:100%;max-width:100%;height:100px}.settings_tab-switcher .setting-item .unavailable,.settings_tab-switcher .setting-item .unavailable i{color:var(--cRed,red);color:red}.settings_tab-switcher .setting-item .number-input{max-width:6em}",""])},593:function(t,e,s){var a=s(594);"string"==typeof a&&(a=[[t.i,a,""]]),a.locals&&(t.exports=a.locals);(0,s(5).default)("5bed876c",a,!0,{})},594:function(t,e,s){(t.exports=s(4)(!1)).push([t.i,".importer-uploading{font-size:1.5em;margin:.25em}",""])},595:function(t,e,s){var a=s(596);"string"==typeof a&&(a=[[t.i,a,""]]),a.locals&&(t.exports=a.locals);(0,s(5).default)("432fc7c6",a,!0,{})},596:function(t,e,s){(t.exports=s(4)(!1)).push([t.i,".exporter-processing{font-size:1.5em;margin:.25em}",""])},597:function(t,e,s){var a=s(598);"string"==typeof a&&(a=[[t.i,a,""]]),a.locals&&(t.exports=a.locals);(0,s(5).default)("33ca0d90",a,!0,{})},598:function(t,e,s){(t.exports=s(4)(!1)).push([t.i,".mutes-and-blocks-tab{height:100%}.mutes-and-blocks-tab .usersearch-wrapper{padding:1em}.mutes-and-blocks-tab .bulk-actions{text-align:right;padding:0 1em;min-height:28px}.mutes-and-blocks-tab .bulk-action-button{width:10em}.mutes-and-blocks-tab .domain-mute-form{padding:1em;display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column}.mutes-and-blocks-tab .domain-mute-button{-ms-flex-item-align:end;align-self:flex-end;margin-top:1em;width:10em}",""])},599:function(t,e,s){var a=s(600);"string"==typeof a&&(a=[[t.i,a,""]]),a.locals&&(t.exports=a.locals);(0,s(5).default)("3a9ec1bf",a,!0,{})},600:function(t,e,s){(t.exports=s(4)(!1)).push([t.i,".autosuggest{position:relative}.autosuggest-input{display:block;width:100%}.autosuggest-results{position:absolute;left:0;top:100%;right:0;max-height:400px;background-color:#121a24;background-color:var(--bg,#121a24);border-color:#222;border:1px solid var(--border,#222);border-radius:4px;border-radius:var(--inputRadius,4px);border-top-left-radius:0;border-top-right-radius:0;box-shadow:1px 1px 4px rgba(0,0,0,.6);box-shadow:var(--panelShadow);overflow-y:auto;z-index:1}",""])},601:function(t,e,s){var a=s(602);"string"==typeof a&&(a=[[t.i,a,""]]),a.locals&&(t.exports=a.locals);(0,s(5).default)("211aa67c",a,!0,{})},602:function(t,e,s){(t.exports=s(4)(!1)).push([t.i,".block-card-content-container{margin-top:.5em;text-align:right}.block-card-content-container button{width:10em}",""])},603:function(t,e,s){var a=s(604);"string"==typeof a&&(a=[[t.i,a,""]]),a.locals&&(t.exports=a.locals);(0,s(5).default)("7ea980e0",a,!0,{})},604:function(t,e,s){(t.exports=s(4)(!1)).push([t.i,".mute-card-content-container{margin-top:.5em;text-align:right}.mute-card-content-container button{width:10em}",""])},605:function(t,e,s){var a=s(606);"string"==typeof a&&(a=[[t.i,a,""]]),a.locals&&(t.exports=a.locals);(0,s(5).default)("39a942c3",a,!0,{})},606:function(t,e,s){(t.exports=s(4)(!1)).push([t.i,".domain-mute-card{-ms-flex:1 0;flex:1 0;display:-ms-flexbox;display:flex;-ms-flex-pack:justify;justify-content:space-between;-ms-flex-align:center;align-items:center;padding:.6em 1em .6em 0}.domain-mute-card-domain{margin-right:1em;overflow:hidden;text-overflow:ellipsis}.domain-mute-card button{width:10em}.autosuggest-results .domain-mute-card{padding-left:1em}",""])},607:function(t,e,s){var a=s(608);"string"==typeof a&&(a=[[t.i,a,""]]),a.locals&&(t.exports=a.locals);(0,s(5).default)("3724291e",a,!0,{})},608:function(t,e,s){(t.exports=s(4)(!1)).push([t.i,".selectable-list-item-inner{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center}.selectable-list-item-inner>*{min-width:0}.selectable-list-item-selected-inner{background-color:#151e2a;background-color:var(--selectedMenu,#151e2a);color:var(--selectedMenuText,#b9b9ba);--faint:var(--selectedMenuFaintText,$fallback--faint);--faintLink:var(--selectedMenuFaintLink,$fallback--faint);--lightText:var(--selectedMenuLightText,$fallback--lightText);--icon:var(--selectedMenuIcon,$fallback--icon)}.selectable-list-header{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;padding:.6em 0;border-bottom:2px solid;border-bottom-color:#222;border-bottom-color:var(--border,#222)}.selectable-list-header-actions{-ms-flex:1;flex:1}.selectable-list-checkbox-wrapper{padding:0 10px;-ms-flex:none;flex:none}",""])},609:function(t,e,s){},613:function(t,e,s){var a=s(614);"string"==typeof a&&(a=[[t.i,a,""]]),a.locals&&(t.exports=a.locals);(0,s(5).default)("a588473e",a,!0,{})},614:function(t,e,s){(t.exports=s(4)(!1)).push([t.i,".mfa-settings .method-item,.mfa-settings .mfa-heading{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-ms-flex-pack:justify;justify-content:space-between;-ms-flex-align:baseline;align-items:baseline}.mfa-settings .warning{color:orange;color:var(--cOrange,orange)}.mfa-settings .setup-otp{display:-ms-flexbox;display:flex;-ms-flex-pack:center;justify-content:center;-ms-flex-wrap:wrap;flex-wrap:wrap}.mfa-settings .setup-otp .qr-code{-ms-flex:1;flex:1;padding-right:10px}.mfa-settings .setup-otp .verify{-ms-flex:1;flex:1}.mfa-settings .setup-otp .error{margin:4px 0 0}.mfa-settings .setup-otp .confirm-otp-actions button{width:15em;margin-top:5px}",""])},615:function(t,e,s){var a=s(616);"string"==typeof a&&(a=[[t.i,a,""]]),a.locals&&(t.exports=a.locals);(0,s(5).default)("4065bf15",a,!0,{})},616:function(t,e,s){(t.exports=s(4)(!1)).push([t.i,".mfa-backup-codes .warning{color:orange;color:var(--cOrange,orange)}.mfa-backup-codes .backup-codes{font-family:var(--postCodeFont,monospace)}",""])},618:function(t,e,s){var a=s(619);"string"==typeof a&&(a=[[t.i,a,""]]),a.locals&&(t.exports=a.locals);(0,s(5).default)("27925ae8",a,!0,{})},619:function(t,e,s){(t.exports=s(4)(!1)).push([t.i,".profile-tab .bio{margin:0}.profile-tab .visibility-tray{padding-top:5px}.profile-tab input[type=file]{padding:5px;height:auto}.profile-tab .banner-background-preview{max-width:100%;width:300px;position:relative}.profile-tab .banner-background-preview img{width:100%}.profile-tab .uploading{font-size:1.5em;margin:.25em}.profile-tab .name-changer{width:100%}.profile-tab .current-avatar-container{position:relative;width:150px;height:150px}.profile-tab .current-avatar{display:block;width:100%;height:100%;border-radius:4px;border-radius:var(--avatarRadius,4px)}.profile-tab .reset-button{position:absolute;top:.2em;right:.2em;border-radius:5px;border-radius:var(--tooltipRadius,5px);background-color:rgba(0,0,0,.6);opacity:.7;color:#fff;width:1.5em;height:1.5em;text-align:center;line-height:1.5em;font-size:1.5em;cursor:pointer}.profile-tab .reset-button:hover{opacity:1}.profile-tab .oauth-tokens{width:100%}.profile-tab .oauth-tokens th{text-align:left}.profile-tab .oauth-tokens .actions{text-align:right}.profile-tab-usersearch-wrapper{padding:1em}.profile-tab-bulk-actions{text-align:right;padding:0 1em;min-height:28px}.profile-tab-bulk-actions button{width:10em}.profile-tab-domain-mute-form{padding:1em;display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column}.profile-tab-domain-mute-form button{-ms-flex-item-align:end;align-self:flex-end;margin-top:1em;width:10em}.profile-tab .setting-subitem{margin-left:1.75em}.profile-tab .profile-fields{display:-ms-flexbox;display:flex}.profile-tab .profile-fields>.emoji-input{-ms-flex:1 1 auto;flex:1 1 auto;margin:0 .2em .5em;min-width:0}.profile-tab .profile-fields>.icon-container{width:20px}.profile-tab .profile-fields>.icon-container>.icon-cancel{vertical-align:sub}",""])},620:function(t,e,s){var a=s(621);"string"==typeof a&&(a=[[t.i,a,""]]),a.locals&&(t.exports=a.locals);(0,s(5).default)("0dfd0b33",a,!0,{})},621:function(t,e,s){(t.exports=s(4)(!1)).push([t.i,".image-cropper-img-input{display:none}.image-cropper-image-container{position:relative}.image-cropper-image-container img{display:block;max-width:100%}.image-cropper-buttons-wrapper{margin-top:10px}.image-cropper-buttons-wrapper button{margin-top:5px}",""])},624:function(t,e,s){var a=s(625);"string"==typeof a&&(a=[[t.i,a,""]]),a.locals&&(t.exports=a.locals);(0,s(5).default)("4fafab12",a,!0,{})},625:function(t,e,s){(t.exports=s(4)(!1)).push([t.i,".theme-tab{padding-bottom:2em}.theme-tab .theme-warning{display:-ms-flexbox;display:flex;-ms-flex-align:baseline;align-items:baseline;margin-bottom:.5em}.theme-tab .theme-warning .buttons .btn{margin-bottom:.5em}.theme-tab .preset-switcher{margin-right:1em}.theme-tab .style-control{display:-ms-flexbox;display:flex;-ms-flex-align:baseline;align-items:baseline;margin-bottom:5px}.theme-tab .style-control .label{-ms-flex:1;flex:1}.theme-tab .style-control.disabled input,.theme-tab .style-control.disabled select{opacity:.5}.theme-tab .style-control .opt{margin:.5em}.theme-tab .style-control .color-input{-ms-flex:0 0 0px;flex:0 0 0}.theme-tab .style-control input,.theme-tab .style-control select{min-width:3em;margin:0;-ms-flex:0;flex:0}.theme-tab .style-control input[type=number],.theme-tab .style-control select[type=number]{min-width:5em}.theme-tab .style-control input[type=range],.theme-tab .style-control select[type=range]{-ms-flex:1;flex:1;min-width:3em;-ms-flex-item-align:start;align-self:flex-start}.theme-tab .reset-container{-ms-flex-wrap:wrap;flex-wrap:wrap}.theme-tab .apply-container,.theme-tab .color-container,.theme-tab .fonts-container,.theme-tab .radius-container,.theme-tab .reset-container{display:-ms-flexbox;display:flex}.theme-tab .fonts-container,.theme-tab .radius-container{-ms-flex-direction:column;flex-direction:column}.theme-tab .color-container{-ms-flex-wrap:wrap;flex-wrap:wrap;-ms-flex-pack:justify;justify-content:space-between}.theme-tab .color-container>h4{width:99%}.theme-tab .color-container,.theme-tab .fonts-container,.theme-tab .presets-container,.theme-tab .radius-container,.theme-tab .shadow-container{margin:1em 1em 0}.theme-tab .tab-header{display:-ms-flexbox;display:flex;-ms-flex-pack:justify;justify-content:space-between;-ms-flex-align:baseline;align-items:baseline;width:100%;min-height:30px;margin-bottom:1em}.theme-tab .tab-header p{-ms-flex:1;flex:1;margin:0;margin-right:.5em}.theme-tab .tab-header-buttons{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column}.theme-tab .tab-header-buttons .btn{min-width:1px;-ms-flex:0 auto;flex:0 auto;padding:0 1em;margin-bottom:.5em}.theme-tab .shadow-selector .override{-ms-flex:1;flex:1;margin-left:.5em}.theme-tab .shadow-selector .select-container{margin-top:-4px;margin-bottom:-3px}.theme-tab .save-load,.theme-tab .save-load-options{display:-ms-flexbox;display:flex;-ms-flex-pack:center;justify-content:center;-ms-flex-align:baseline;align-items:baseline;-ms-flex-wrap:wrap;flex-wrap:wrap}.theme-tab .save-load-options .import-export,.theme-tab .save-load-options .presets,.theme-tab .save-load .import-export,.theme-tab .save-load .presets{margin-bottom:.5em}.theme-tab .save-load-options .import-export,.theme-tab .save-load .import-export{display:-ms-flexbox;display:flex}.theme-tab .save-load-options .override,.theme-tab .save-load .override{margin-left:.5em}.theme-tab .save-load-options{-ms-flex-wrap:wrap;flex-wrap:wrap;margin-top:.5em;-ms-flex-pack:center;justify-content:center}.theme-tab .save-load-options .keep-option{margin:0 .5em .5em;min-width:25%}.theme-tab .preview-container{border-top:1px dashed;border-bottom:1px dashed;border-color:#222;border-color:var(--border,#222);margin:1em 0;padding:1em;background:var(--body-background-image);background-size:cover;background-position:50% 50%}.theme-tab .preview-container .dummy .post{font-family:var(--postFont);display:-ms-flexbox;display:flex}.theme-tab .preview-container .dummy .post .content{-ms-flex:1;flex:1}.theme-tab .preview-container .dummy .post .content h4{margin-bottom:.25em}.theme-tab .preview-container .dummy .post .content .icons{margin-top:.5em;display:-ms-flexbox;display:flex}.theme-tab .preview-container .dummy .post .content .icons i{margin-right:1em}.theme-tab .preview-container .dummy .after-post{margin-top:1em;display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center}.theme-tab .preview-container .dummy .avatar,.theme-tab .preview-container .dummy .avatar-alt{background:linear-gradient(135deg,#b8e1fc,#a9d2f3 10%,#90bae4 25%,#90bcea 37%,#90bff0 50%,#6ba8e5 51%,#a2daf5 83%,#bdf3fd);color:#000;font-family:sans-serif;text-align:center;margin-right:1em}.theme-tab .preview-container .dummy .avatar-alt{-ms-flex:0 auto;flex:0 auto;margin-left:28px;font-size:12px;min-width:20px;min-height:20px;line-height:20px;border-radius:10px;border-radius:var(--avatarAltRadius,10px)}.theme-tab .preview-container .dummy .avatar{-ms-flex:0 auto;flex:0 auto;width:48px;height:48px;font-size:14px;line-height:48px}.theme-tab .preview-container .dummy .actions{display:-ms-flexbox;display:flex;-ms-flex-align:baseline;align-items:baseline}.theme-tab .preview-container .dummy .actions .checkbox{display:-ms-inline-flexbox;display:inline-flex;-ms-flex-align:baseline;align-items:baseline;margin-right:1em;-ms-flex:1;flex:1}.theme-tab .preview-container .dummy .separator{margin:1em;border-bottom:1px solid;border-color:#222;border-color:var(--border,#222)}.theme-tab .preview-container .dummy .panel-heading .alert,.theme-tab .preview-container .dummy .panel-heading .badge,.theme-tab .preview-container .dummy .panel-heading .btn,.theme-tab .preview-container .dummy .panel-heading .faint{margin-left:1em;white-space:nowrap}.theme-tab .preview-container .dummy .panel-heading .faint{text-overflow:ellipsis;min-width:2em;overflow-x:hidden}.theme-tab .preview-container .dummy .panel-heading .flex-spacer{-ms-flex:1;flex:1}.theme-tab .preview-container .dummy .btn{margin-left:0;padding:0 1em;min-width:3em;min-height:30px}.theme-tab .apply-container{-ms-flex-pack:center;justify-content:center}.theme-tab .color-item,.theme-tab .radius-item{min-width:20em;margin:5px 6px 0 0;display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;-ms-flex:1 1 0px;flex:1 1 0}.theme-tab .color-item.wide,.theme-tab .radius-item.wide{min-width:60%}.theme-tab .color-item:not(.wide):nth-child(odd),.theme-tab .radius-item:not(.wide):nth-child(odd){margin-right:7px}.theme-tab .color-item .color,.theme-tab .color-item .opacity,.theme-tab .radius-item .color,.theme-tab .radius-item .opacity{display:-ms-flexbox;display:flex;-ms-flex-align:baseline;align-items:baseline}.theme-tab .radius-item{-ms-flex-preferred-size:auto;flex-basis:auto}.theme-tab .theme-color-cl,.theme-tab .theme-radius-rn{border:0;box-shadow:none;background:transparent;color:var(--faint,hsla(240,1%,73%,.5));-ms-flex-item-align:stretch;-ms-grid-row-align:stretch;align-self:stretch}.theme-tab .theme-color-cl,.theme-tab .theme-color-in,.theme-tab .theme-radius-in{margin-left:4px}.theme-tab .theme-radius-in{min-width:1em;max-width:7em;-ms-flex:1;flex:1}.theme-tab .theme-radius-lb{max-width:50em}.theme-tab .theme-preview-content{padding:20px}.theme-tab .apply-container .btn{min-height:28px;min-width:10em;padding:0 2em}.theme-tab .btn{margin-left:.25em;margin-right:.25em}",""])},626:function(t,e,s){var a=s(627);"string"==typeof a&&(a=[[t.i,a,""]]),a.locals&&(t.exports=a.locals);(0,s(5).default)("7e57f952",a,!0,{})},627:function(t,e,s){(t.exports=s(4)(!1)).push([t.i,'.color-input,.color-input-field.input{display:-ms-inline-flexbox;display:inline-flex}.color-input-field.input{-ms-flex:0 0 0px;flex:0 0 0;max-width:9em;-ms-flex-align:stretch;align-items:stretch;padding:.2em 8px}.color-input-field.input input{background:none;color:#b9b9ba;color:var(--inputText,#b9b9ba);border:none;padding:0;margin:0}.color-input-field.input input.textColor{-ms-flex:1 0 3em;flex:1 0 3em;min-width:3em;padding:0}.color-input-field.input .computedIndicator,.color-input-field.input .transparentIndicator,.color-input-field.input input.nativeColor{-ms-flex:0 0 2em;flex:0 0 2em;min-width:2em;-ms-flex-item-align:center;-ms-grid-row-align:center;align-self:center;height:100%}.color-input-field.input .transparentIndicator{background-color:#f0f;position:relative}.color-input-field.input .transparentIndicator:after,.color-input-field.input .transparentIndicator:before{display:block;content:"";background-color:#000;position:absolute;height:50%;width:50%}.color-input-field.input .transparentIndicator:after{top:0;left:0}.color-input-field.input .transparentIndicator:before{bottom:0;right:0}.color-input .label{-ms-flex:1 1 auto;flex:1 1 auto}',""])},628:function(t,e,s){var a=s(629);"string"==typeof a&&(a=[[t.i,a,""]]),a.locals&&(t.exports=a.locals);(0,s(5).default)("6c632637",a,!0,{})},629:function(t,e,s){(t.exports=s(4)(!1)).push([t.i,".color-control input.text-input{max-width:7em;-ms-flex:1;flex:1}",""])},630:function(t,e,s){var a=s(631);"string"==typeof a&&(a=[[t.i,a,""]]),a.locals&&(t.exports=a.locals);(0,s(5).default)("d219da80",a,!0,{})},631:function(t,e,s){(t.exports=s(4)(!1)).push([t.i,".shadow-control{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-ms-flex-pack:center;justify-content:center;margin-bottom:1em}.shadow-control .shadow-preview-container,.shadow-control .shadow-tweak{margin:5px 6px 0 0}.shadow-control .shadow-preview-container{-ms-flex:0;flex:0;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap}.shadow-control .shadow-preview-container input[type=number]{width:5em;min-width:2em}.shadow-control .shadow-preview-container .x-shift-control,.shadow-control .shadow-preview-container .y-shift-control{display:-ms-flexbox;display:flex;-ms-flex:0;flex:0}.shadow-control .shadow-preview-container .x-shift-control[disabled=disabled] *,.shadow-control .shadow-preview-container .y-shift-control[disabled=disabled] *{opacity:.5}.shadow-control .shadow-preview-container .x-shift-control{-ms-flex-align:start;align-items:flex-start}.shadow-control .shadow-preview-container .x-shift-control .wrap,.shadow-control .shadow-preview-container input[type=range]{margin:0;width:15em;height:2em}.shadow-control .shadow-preview-container .y-shift-control{-ms-flex-direction:column;flex-direction:column;-ms-flex-align:end;align-items:flex-end}.shadow-control .shadow-preview-container .y-shift-control .wrap{width:2em;height:15em}.shadow-control .shadow-preview-container .y-shift-control input[type=range]{transform-origin:1em 1em;transform:rotate(90deg)}.shadow-control .shadow-preview-container .preview-window{-ms-flex:1;flex:1;background-color:#999;display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center;background-image:linear-gradient(45deg,#666 25%,transparent 0),linear-gradient(-45deg,#666 25%,transparent 0),linear-gradient(45deg,transparent 75%,#666 0),linear-gradient(-45deg,transparent 75%,#666 0);background-size:20px 20px;background-position:0 0,0 10px,10px -10px,-10px 0;border-radius:4px;border-radius:var(--inputRadius,4px)}.shadow-control .shadow-preview-container .preview-window .preview-block{width:33%;height:33%;background-color:#121a24;background-color:var(--bg,#121a24);border-radius:10px;border-radius:var(--panelRadius,10px)}.shadow-control .shadow-tweak{-ms-flex:1;flex:1;min-width:280px}.shadow-control .shadow-tweak .id-control{-ms-flex-align:stretch;align-items:stretch}.shadow-control .shadow-tweak .id-control .btn,.shadow-control .shadow-tweak .id-control .select{min-width:1px;margin-right:5px}.shadow-control .shadow-tweak .id-control .btn{padding:0 .4em;margin:0 .1em}.shadow-control .shadow-tweak .id-control .select{-ms-flex:1;flex:1}.shadow-control .shadow-tweak .id-control .select select{-ms-flex-item-align:initial;-ms-grid-row-align:initial;align-self:auto}",""])},632:function(t,e,s){var a=s(633);"string"==typeof a&&(a=[[t.i,a,""]]),a.locals&&(t.exports=a.locals);(0,s(5).default)("d9c0acde",a,!0,{})},633:function(t,e,s){(t.exports=s(4)(!1)).push([t.i,".font-control input.custom-font{min-width:10em}.font-control.custom .select{border-top-right-radius:0;border-bottom-right-radius:0}.font-control.custom .custom-font{border-top-left-radius:0;border-bottom-left-radius:0}",""])},634:function(t,e,s){var a=s(635);"string"==typeof a&&(a=[[t.i,a,""]]),a.locals&&(t.exports=a.locals);(0,s(5).default)("b94bc120",a,!0,{})},635:function(t,e,s){(t.exports=s(4)(!1)).push([t.i,".contrast-ratio{display:-ms-flexbox;display:flex;-ms-flex-pack:end;justify-content:flex-end;margin-top:-4px;margin-bottom:5px}.contrast-ratio .label{margin-right:1em}.contrast-ratio .rating{display:inline-block;text-align:center}",""])},636:function(t,e,s){var a=s(637);"string"==typeof a&&(a=[[t.i,a,""]]),a.locals&&(t.exports=a.locals);(0,s(5).default)("66a4eaba",a,!0,{})},637:function(t,e,s){(t.exports=s(4)(!1)).push([t.i,".import-export-container{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-ms-flex-align:baseline;align-items:baseline;-ms-flex-pack:center;justify-content:center}",""])},638:function(t,e,s){var a=s(639);"string"==typeof a&&(a=[[t.i,a,""]]),a.locals&&(t.exports=a.locals);(0,s(5).default)("6fe23c76",a,!0,{})},639:function(t,e,s){(t.exports=s(4)(!1)).push([t.i,".preview-container{position:relative}.underlay-preview{position:absolute;top:0;bottom:0;left:10px;right:10px}",""])},641:function(t,e,s){"use strict";s.r(e);var a=s(141),n={props:{submitHandler:{type:Function,required:!0},submitButtonLabel:{type:String,default:function(){return this.$t("importer.submit")}},successMessage:{type:String,default:function(){return this.$t("importer.success")}},errorMessage:{type:String,default:function(){return this.$t("importer.error")}}},data:function(){return{file:null,error:!1,success:!1,submitting:!1}},methods:{change:function(){this.file=this.$refs.input.files[0]},submit:function(){var t=this;this.dismiss(),this.submitting=!0,this.submitHandler(this.file).then(function(){t.success=!0}).catch(function(){t.error=!0}).finally(function(){t.submitting=!1})},dismiss:function(){this.success=!1,this.error=!1}}},o=s(0);var i=function(t){s(593)},r=Object(o.a)(n,function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("div",{staticClass:"importer"},[s("form",[s("input",{ref:"input",attrs:{type:"file"},on:{change:t.change}})]),t._v(" "),t.submitting?s("i",{staticClass:"icon-spin4 animate-spin importer-uploading"}):s("button",{staticClass:"btn btn-default",on:{click:t.submit}},[t._v("\n "+t._s(t.submitButtonLabel)+"\n ")]),t._v(" "),t.success?s("div",[s("i",{staticClass:"icon-cross",on:{click:t.dismiss}}),t._v(" "),s("p",[t._v(t._s(t.successMessage))])]):t.error?s("div",[s("i",{staticClass:"icon-cross",on:{click:t.dismiss}}),t._v(" "),s("p",[t._v(t._s(t.errorMessage))])]):t._e()])},[],!1,i,null,null).exports,l={props:{getContent:{type:Function,required:!0},filename:{type:String,default:"export.csv"},exportButtonLabel:{type:String,default:function(){return this.$t("exporter.export")}},processingMessage:{type:String,default:function(){return this.$t("exporter.processing")}}},data:function(){return{processing:!1}},methods:{process:function(){var t=this;this.processing=!0,this.getContent().then(function(e){var s=document.createElement("a");s.setAttribute("href","data:text/plain;charset=utf-8,"+encodeURIComponent(e)),s.setAttribute("download",t.filename),s.style.display="none",document.body.appendChild(s),s.click(),document.body.removeChild(s),setTimeout(function(){t.processing=!1},2e3)})}}};var c=function(t){s(595)},u=Object(o.a)(l,function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("div",{staticClass:"exporter"},[t.processing?s("div",[s("i",{staticClass:"icon-spin4 animate-spin exporter-processing"}),t._v(" "),s("span",[t._v(t._s(t.processingMessage))])]):s("button",{staticClass:"btn btn-default",on:{click:t.process}},[t._v("\n "+t._s(t.exportButtonLabel)+"\n ")])])},[],!1,c,null,null).exports,d=s(54),p={data:function(){return{activeTab:"profile",newDomainToMute:""}},created:function(){this.$store.dispatch("fetchTokens")},components:{Importer:r,Exporter:u,Checkbox:d.a},computed:{user:function(){return this.$store.state.users.currentUser}},methods:{getFollowsContent:function(){return this.$store.state.api.backendInteractor.exportFriends({id:this.$store.state.users.currentUser.id}).then(this.generateExportableUsersContent)},getBlocksContent:function(){return this.$store.state.api.backendInteractor.fetchBlocks().then(this.generateExportableUsersContent)},importFollows:function(t){return this.$store.state.api.backendInteractor.importFollows({file:t}).then(function(t){if(!t)throw new Error("failed")})},importBlocks:function(t){return this.$store.state.api.backendInteractor.importBlocks({file:t}).then(function(t){if(!t)throw new Error("failed")})},generateExportableUsersContent:function(t){return t.map(function(t){return t&&t.is_local?t.screen_name+"@"+location.hostname:t.screen_name}).join("\n")}}},m=Object(o.a)(p,function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("div",{attrs:{label:t.$t("settings.data_import_export_tab")}},[s("div",{staticClass:"setting-item"},[s("h2",[t._v(t._s(t.$t("settings.follow_import")))]),t._v(" "),s("p",[t._v(t._s(t.$t("settings.import_followers_from_a_csv_file")))]),t._v(" "),s("Importer",{attrs:{"submit-handler":t.importFollows,"success-message":t.$t("settings.follows_imported"),"error-message":t.$t("settings.follow_import_error")}})],1),t._v(" "),s("div",{staticClass:"setting-item"},[s("h2",[t._v(t._s(t.$t("settings.follow_export")))]),t._v(" "),s("Exporter",{attrs:{"get-content":t.getFollowsContent,filename:"friends.csv","export-button-label":t.$t("settings.follow_export_button")}})],1),t._v(" "),s("div",{staticClass:"setting-item"},[s("h2",[t._v(t._s(t.$t("settings.block_import")))]),t._v(" "),s("p",[t._v(t._s(t.$t("settings.import_blocks_from_a_csv_file")))]),t._v(" "),s("Importer",{attrs:{"submit-handler":t.importBlocks,"success-message":t.$t("settings.blocks_imported"),"error-message":t.$t("settings.block_import_error")}})],1),t._v(" "),s("div",{staticClass:"setting-item"},[s("h2",[t._v(t._s(t.$t("settings.block_export")))]),t._v(" "),s("Exporter",{attrs:{"get-content":t.getBlocksContent,filename:"blocks.csv","export-button-label":t.$t("settings.block_export_button")}})],1)])},[],!1,null,null,null).exports,v=s(12),h=s.n(v),b=s(15),f=s.n(b),g=s(189),_=s.n(g),w={props:{query:{type:Function,required:!0},filter:{type:Function},placeholder:{type:String,default:"Search..."}},data:function(){return{term:"",timeout:null,results:[],resultsVisible:!1}},computed:{filtered:function(){return this.filter?this.filter(this.results):this.results}},watch:{term:function(t){this.fetchResults(t)}},methods:{fetchResults:function(t){var e=this;clearTimeout(this.timeout),this.timeout=setTimeout(function(){e.results=[],t&&e.query(t).then(function(t){e.results=t})},500)},onInputClick:function(){this.resultsVisible=!0},onClickOutside:function(){this.resultsVisible=!1}}};var C=function(t){s(599)},x=Object(o.a)(w,function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("div",{directives:[{name:"click-outside",rawName:"v-click-outside",value:t.onClickOutside,expression:"onClickOutside"}],staticClass:"autosuggest"},[s("input",{directives:[{name:"model",rawName:"v-model",value:t.term,expression:"term"}],staticClass:"autosuggest-input",attrs:{placeholder:t.placeholder},domProps:{value:t.term},on:{click:t.onInputClick,input:function(e){e.target.composing||(t.term=e.target.value)}}}),t._v(" "),t.resultsVisible&&t.filtered.length>0?s("div",{staticClass:"autosuggest-results"},[t._l(t.filtered,function(e){return t._t("default",null,{item:e})})],2):t._e()])},[],!1,C,null,null).exports,k=s(38),y={props:["userId"],data:function(){return{progress:!1}},computed:{user:function(){return this.$store.getters.findUser(this.userId)},relationship:function(){return this.$store.getters.relationship(this.userId)},blocked:function(){return this.relationship.blocking}},components:{BasicUserCard:k.a},methods:{unblockUser:function(){var t=this;this.progress=!0,this.$store.dispatch("unblockUser",this.user.id).then(function(){t.progress=!1})},blockUser:function(){var t=this;this.progress=!0,this.$store.dispatch("blockUser",this.user.id).then(function(){t.progress=!1})}}};var $=function(t){s(601)},L=Object(o.a)(y,function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("basic-user-card",{attrs:{user:t.user}},[s("div",{staticClass:"block-card-content-container"},[t.blocked?s("button",{staticClass:"btn btn-default",attrs:{disabled:t.progress},on:{click:t.unblockUser}},[t.progress?[t._v("\n "+t._s(t.$t("user_card.unblock_progress"))+"\n ")]:[t._v("\n "+t._s(t.$t("user_card.unblock"))+"\n ")]],2):s("button",{staticClass:"btn btn-default",attrs:{disabled:t.progress},on:{click:t.blockUser}},[t.progress?[t._v("\n "+t._s(t.$t("user_card.block_progress"))+"\n ")]:[t._v("\n "+t._s(t.$t("user_card.block"))+"\n ")]],2)])])},[],!1,$,null,null).exports,T={props:["userId"],data:function(){return{progress:!1}},computed:{user:function(){return this.$store.getters.findUser(this.userId)},relationship:function(){return this.$store.getters.relationship(this.userId)},muted:function(){return this.relationship.muting}},components:{BasicUserCard:k.a},methods:{unmuteUser:function(){var t=this;this.progress=!0,this.$store.dispatch("unmuteUser",this.userId).then(function(){t.progress=!1})},muteUser:function(){var t=this;this.progress=!0,this.$store.dispatch("muteUser",this.userId).then(function(){t.progress=!1})}}};var O=function(t){s(603)},P=Object(o.a)(T,function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("basic-user-card",{attrs:{user:t.user}},[s("div",{staticClass:"mute-card-content-container"},[t.muted?s("button",{staticClass:"btn btn-default",attrs:{disabled:t.progress},on:{click:t.unmuteUser}},[t.progress?[t._v("\n "+t._s(t.$t("user_card.unmute_progress"))+"\n ")]:[t._v("\n "+t._s(t.$t("user_card.unmute"))+"\n ")]],2):s("button",{staticClass:"btn btn-default",attrs:{disabled:t.progress},on:{click:t.muteUser}},[t.progress?[t._v("\n "+t._s(t.$t("user_card.mute_progress"))+"\n ")]:[t._v("\n "+t._s(t.$t("user_card.mute"))+"\n ")]],2)])])},[],!1,O,null,null).exports,S=s(78),I={props:["domain"],components:{ProgressButton:S.a},computed:{user:function(){return this.$store.state.users.currentUser},muted:function(){return this.user.domainMutes.includes(this.domain)}},methods:{unmuteDomain:function(){return this.$store.dispatch("unmuteDomain",this.domain)},muteDomain:function(){return this.$store.dispatch("muteDomain",this.domain)}}};var j=function(t){s(605)},E=Object(o.a)(I,function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("div",{staticClass:"domain-mute-card"},[s("div",{staticClass:"domain-mute-card-domain"},[t._v("\n "+t._s(t.domain)+"\n ")]),t._v(" "),t.muted?s("ProgressButton",{staticClass:"btn btn-default",attrs:{click:t.unmuteDomain}},[t._v("\n "+t._s(t.$t("domain_mute_card.unmute"))+"\n "),s("template",{slot:"progress"},[t._v("\n "+t._s(t.$t("domain_mute_card.unmute_progress"))+"\n ")])],2):s("ProgressButton",{staticClass:"btn btn-default",attrs:{click:t.muteDomain}},[t._v("\n "+t._s(t.$t("domain_mute_card.mute"))+"\n "),s("template",{slot:"progress"},[t._v("\n "+t._s(t.$t("domain_mute_card.mute_progress"))+"\n ")])],2)],1)},[],!1,j,null,null).exports,R={components:{List:s(52).a,Checkbox:d.a},props:{items:{type:Array,default:function(){return[]}},getKey:{type:Function,default:function(t){return t.id}}},data:function(){return{selected:[]}},computed:{allKeys:function(){return this.items.map(this.getKey)},filteredSelected:function(){var t=this;return this.allKeys.filter(function(e){return-1!==t.selected.indexOf(e)})},allSelected:function(){return this.filteredSelected.length===this.items.length},noneSelected:function(){return 0===this.filteredSelected.length},someSelected:function(){return!this.allSelected&&!this.noneSelected}},methods:{isSelected:function(t){return-1!==this.filteredSelected.indexOf(this.getKey(t))},toggle:function(t,e){var s=this.getKey(e);t!==this.isSelected(s)&&(t?this.selected.push(s):this.selected.splice(this.selected.indexOf(s),1))},toggleAll:function(t){this.selected=t?this.allKeys.slice(0):[]}}};var B=function(t){s(607)},F=Object(o.a)(R,function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("div",{staticClass:"selectable-list"},[t.items.length>0?s("div",{staticClass:"selectable-list-header"},[s("div",{staticClass:"selectable-list-checkbox-wrapper"},[s("Checkbox",{attrs:{checked:t.allSelected,indeterminate:t.someSelected},on:{change:t.toggleAll}},[t._v("\n "+t._s(t.$t("selectable_list.select_all"))+"\n ")])],1),t._v(" "),s("div",{staticClass:"selectable-list-header-actions"},[t._t("header",null,{selected:t.filteredSelected})],2)]):t._e(),t._v(" "),s("List",{attrs:{items:t.items,"get-key":t.getKey},scopedSlots:t._u([{key:"item",fn:function(e){var a=e.item;return[s("div",{staticClass:"selectable-list-item-inner",class:{"selectable-list-item-selected-inner":t.isSelected(a)}},[s("div",{staticClass:"selectable-list-checkbox-wrapper"},[s("Checkbox",{attrs:{checked:t.isSelected(a)},on:{change:function(e){return t.toggle(e,a)}}})],1),t._v(" "),t._t("item",null,{item:a})],2)]}}],null,!0)},[t._v(" "),s("template",{slot:"empty"},[t._t("empty")],2)],2)],1)},[],!1,B,null,null).exports,M=s(190),U=s.n(M),V=s(7),A=s.n(V),D=s(1),N=s.n(D),W=s(10),z=s.n(W),q=s(6),G=s.n(q),H=s(191),K=s.n(H),J=s(192);s(609);function Q(t,e){var s=Object.keys(t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(t);e&&(a=a.filter(function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})),s.push.apply(s,a)}return s}function X(t){for(var e=1;e0?s("ProgressButton",{staticClass:"btn btn-default bulk-action-button",attrs:{click:function(){return t.blockUsers(a)}}},[t._v("\n "+t._s(t.$t("user_card.block"))+"\n "),s("template",{slot:"progress"},[t._v("\n "+t._s(t.$t("user_card.block_progress"))+"\n ")])],2):t._e(),t._v(" "),a.length>0?s("ProgressButton",{staticClass:"btn btn-default",attrs:{click:function(){return t.unblockUsers(a)}}},[t._v("\n "+t._s(t.$t("user_card.unblock"))+"\n "),s("template",{slot:"progress"},[t._v("\n "+t._s(t.$t("user_card.unblock_progress"))+"\n ")])],2):t._e()],1)]}},{key:"item",fn:function(t){var e=t.item;return[s("BlockCard",{attrs:{"user-id":e}})]}}])},[t._v(" "),t._v(" "),s("template",{slot:"empty"},[t._v("\n "+t._s(t.$t("settings.no_blocks"))+"\n ")])],2)],1),t._v(" "),s("div",{attrs:{label:t.$t("settings.mutes_tab")}},[s("tab-switcher",[s("div",{attrs:{label:"Users"}},[s("div",{staticClass:"usersearch-wrapper"},[s("Autosuggest",{attrs:{filter:t.filterUnMutedUsers,query:t.queryUserIds,placeholder:t.$t("settings.search_user_to_mute")},scopedSlots:t._u([{key:"default",fn:function(t){return s("MuteCard",{attrs:{"user-id":t.item}})}}])})],1),t._v(" "),s("MuteList",{attrs:{refresh:!0,"get-key":function(t){return t}},scopedSlots:t._u([{key:"header",fn:function(e){var a=e.selected;return[s("div",{staticClass:"bulk-actions"},[a.length>0?s("ProgressButton",{staticClass:"btn btn-default",attrs:{click:function(){return t.muteUsers(a)}}},[t._v("\n "+t._s(t.$t("user_card.mute"))+"\n "),s("template",{slot:"progress"},[t._v("\n "+t._s(t.$t("user_card.mute_progress"))+"\n ")])],2):t._e(),t._v(" "),a.length>0?s("ProgressButton",{staticClass:"btn btn-default",attrs:{click:function(){return t.unmuteUsers(a)}}},[t._v("\n "+t._s(t.$t("user_card.unmute"))+"\n "),s("template",{slot:"progress"},[t._v("\n "+t._s(t.$t("user_card.unmute_progress"))+"\n ")])],2):t._e()],1)]}},{key:"item",fn:function(t){var e=t.item;return[s("MuteCard",{attrs:{"user-id":e}})]}}])},[t._v(" "),t._v(" "),s("template",{slot:"empty"},[t._v("\n "+t._s(t.$t("settings.no_mutes"))+"\n ")])],2)],1),t._v(" "),s("div",{attrs:{label:t.$t("settings.domain_mutes")}},[s("div",{staticClass:"domain-mute-form"},[s("Autosuggest",{attrs:{filter:t.filterUnMutedDomains,query:t.queryKnownDomains,placeholder:t.$t("settings.type_domains_to_mute")},scopedSlots:t._u([{key:"default",fn:function(t){return s("DomainMuteCard",{attrs:{domain:t.item}})}}])})],1),t._v(" "),s("DomainMuteList",{attrs:{refresh:!0,"get-key":function(t){return t}},scopedSlots:t._u([{key:"header",fn:function(e){var a=e.selected;return[s("div",{staticClass:"bulk-actions"},[a.length>0?s("ProgressButton",{staticClass:"btn btn-default",attrs:{click:function(){return t.unmuteDomains(a)}}},[t._v("\n "+t._s(t.$t("domain_mute_card.unmute"))+"\n "),s("template",{slot:"progress"},[t._v("\n "+t._s(t.$t("domain_mute_card.unmute_progress"))+"\n ")])],2):t._e()],1)]}},{key:"item",fn:function(t){var e=t.item;return[s("DomainMuteCard",{attrs:{domain:e}})]}}])},[t._v(" "),t._v(" "),s("template",{slot:"empty"},[t._v("\n "+t._s(t.$t("settings.no_mutes"))+"\n ")])],2)],1)])],1)])},[],!1,at,null,null).exports,ot={data:function(){return{activeTab:"profile",notificationSettings:this.$store.state.users.currentUser.notification_settings,newDomainToMute:""}},components:{Checkbox:d.a},computed:{user:function(){return this.$store.state.users.currentUser}},methods:{updateNotificationSettings:function(){this.$store.state.api.backendInteractor.updateNotificationSettings({settings:this.notificationSettings})}}},it=Object(o.a)(ot,function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("div",{attrs:{label:t.$t("settings.notifications")}},[s("div",{staticClass:"setting-item"},[s("h2",[t._v(t._s(t.$t("settings.notification_setting_filters")))]),t._v(" "),s("p",[s("Checkbox",{model:{value:t.notificationSettings.block_from_strangers,callback:function(e){t.$set(t.notificationSettings,"block_from_strangers",e)},expression:"notificationSettings.block_from_strangers"}},[t._v("\n "+t._s(t.$t("settings.notification_setting_block_from_strangers"))+"\n ")])],1)]),t._v(" "),s("div",{staticClass:"setting-item"},[s("h2",[t._v(t._s(t.$t("settings.notification_setting_privacy")))]),t._v(" "),s("p",[s("Checkbox",{model:{value:t.notificationSettings.hide_notification_contents,callback:function(e){t.$set(t.notificationSettings,"hide_notification_contents",e)},expression:"notificationSettings.hide_notification_contents"}},[t._v("\n "+t._s(t.$t("settings.notification_setting_hide_notification_contents"))+"\n ")])],1)]),t._v(" "),s("div",{staticClass:"setting-item"},[s("p",[t._v(t._s(t.$t("settings.notification_mutes")))]),t._v(" "),s("p",[t._v(t._s(t.$t("settings.notification_blocks")))]),t._v(" "),s("button",{staticClass:"btn btn-default",on:{click:t.updateNotificationSettings}},[t._v("\n "+t._s(t.$t("general.submit"))+"\n ")])])])},[],!1,null,null,null).exports,rt=s(610),lt=s.n(rt),ct=s(37),ut=s.n(ct),dt=s(95);function pt(t,e){var s=Object.keys(t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(t);e&&(a=a.filter(function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})),s.push.apply(s,a)}return s}function mt(t){for(var e=1;e0})})}}}),watch:{notificationVisibility:{handler:function(t){this.$store.dispatch("setOption",{name:"notificationVisibility",value:this.$store.getters.mergedConfig.notificationVisibility})},deep:!0},replyVisibility:function(){this.$store.dispatch("queueFlushAll")}}},ft=Object(o.a)(bt,function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("div",{attrs:{label:t.$t("settings.filtering")}},[s("div",{staticClass:"setting-item"},[s("div",{staticClass:"select-multiple"},[s("span",{staticClass:"label"},[t._v(t._s(t.$t("settings.notification_visibility")))]),t._v(" "),s("ul",{staticClass:"option-list"},[s("li",[s("Checkbox",{model:{value:t.notificationVisibility.likes,callback:function(e){t.$set(t.notificationVisibility,"likes",e)},expression:"notificationVisibility.likes"}},[t._v("\n "+t._s(t.$t("settings.notification_visibility_likes"))+"\n ")])],1),t._v(" "),s("li",[s("Checkbox",{model:{value:t.notificationVisibility.repeats,callback:function(e){t.$set(t.notificationVisibility,"repeats",e)},expression:"notificationVisibility.repeats"}},[t._v("\n "+t._s(t.$t("settings.notification_visibility_repeats"))+"\n ")])],1),t._v(" "),s("li",[s("Checkbox",{model:{value:t.notificationVisibility.follows,callback:function(e){t.$set(t.notificationVisibility,"follows",e)},expression:"notificationVisibility.follows"}},[t._v("\n "+t._s(t.$t("settings.notification_visibility_follows"))+"\n ")])],1),t._v(" "),s("li",[s("Checkbox",{model:{value:t.notificationVisibility.mentions,callback:function(e){t.$set(t.notificationVisibility,"mentions",e)},expression:"notificationVisibility.mentions"}},[t._v("\n "+t._s(t.$t("settings.notification_visibility_mentions"))+"\n ")])],1),t._v(" "),s("li",[s("Checkbox",{model:{value:t.notificationVisibility.moves,callback:function(e){t.$set(t.notificationVisibility,"moves",e)},expression:"notificationVisibility.moves"}},[t._v("\n "+t._s(t.$t("settings.notification_visibility_moves"))+"\n ")])],1),t._v(" "),s("li",[s("Checkbox",{model:{value:t.notificationVisibility.emojiReactions,callback:function(e){t.$set(t.notificationVisibility,"emojiReactions",e)},expression:"notificationVisibility.emojiReactions"}},[t._v("\n "+t._s(t.$t("settings.notification_visibility_emoji_reactions"))+"\n ")])],1)])]),t._v(" "),s("div",[t._v("\n "+t._s(t.$t("settings.replies_in_timeline"))+"\n "),s("label",{staticClass:"select",attrs:{for:"replyVisibility"}},[s("select",{directives:[{name:"model",rawName:"v-model",value:t.replyVisibility,expression:"replyVisibility"}],attrs:{id:"replyVisibility"},on:{change:function(e){var s=Array.prototype.filter.call(e.target.options,function(t){return t.selected}).map(function(t){return"_value"in t?t._value:t.value});t.replyVisibility=e.target.multiple?s:s[0]}}},[s("option",{attrs:{value:"all",selected:""}},[t._v(t._s(t.$t("settings.reply_visibility_all")))]),t._v(" "),s("option",{attrs:{value:"following"}},[t._v(t._s(t.$t("settings.reply_visibility_following")))]),t._v(" "),s("option",{attrs:{value:"self"}},[t._v(t._s(t.$t("settings.reply_visibility_self")))])]),t._v(" "),s("i",{staticClass:"icon-down-open"})])]),t._v(" "),s("div",[s("Checkbox",{model:{value:t.hidePostStats,callback:function(e){t.hidePostStats=e},expression:"hidePostStats"}},[t._v("\n "+t._s(t.$t("settings.hide_post_stats"))+" "+t._s(t.$t("settings.instance_default",{value:t.hidePostStatsLocalizedValue}))+"\n ")])],1),t._v(" "),s("div",[s("Checkbox",{model:{value:t.hideUserStats,callback:function(e){t.hideUserStats=e},expression:"hideUserStats"}},[t._v("\n "+t._s(t.$t("settings.hide_user_stats"))+" "+t._s(t.$t("settings.instance_default",{value:t.hideUserStatsLocalizedValue}))+"\n ")])],1)]),t._v(" "),s("div",{staticClass:"setting-item"},[s("div",[s("p",[t._v(t._s(t.$t("settings.filtering_explanation")))]),t._v(" "),s("textarea",{directives:[{name:"model",rawName:"v-model",value:t.muteWordsString,expression:"muteWordsString"}],attrs:{id:"muteWords"},domProps:{value:t.muteWordsString},on:{input:function(e){e.target.composing||(t.muteWordsString=e.target.value)}}})]),t._v(" "),s("div",[s("Checkbox",{model:{value:t.hideFilteredStatuses,callback:function(e){t.hideFilteredStatuses=e},expression:"hideFilteredStatuses"}},[t._v("\n "+t._s(t.$t("settings.hide_filtered_statuses"))+" "+t._s(t.$t("settings.instance_default",{value:t.hideFilteredStatusesLocalizedValue}))+"\n ")])],1)])])},[],!1,null,null,null).exports,gt=s(3),_t=s.n(gt),wt={props:{backupCodes:{type:Object,default:function(){return{inProgress:!1,codes:[]}}}},data:function(){return{}},computed:{inProgress:function(){return this.backupCodes.inProgress},ready:function(){return this.backupCodes.codes.length>0},displayTitle:function(){return this.inProgress||this.ready}}};var Ct=function(t){s(615)},xt=Object(o.a)(wt,function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("div",{staticClass:"mfa-backup-codes"},[t.displayTitle?s("h4",[t._v("\n "+t._s(t.$t("settings.mfa.recovery_codes"))+"\n ")]):t._e(),t._v(" "),t.inProgress?s("i",[t._v(t._s(t.$t("settings.mfa.waiting_a_recovery_codes")))]):t._e(),t._v(" "),t.ready?[s("p",{staticClass:"alert warning"},[t._v("\n "+t._s(t.$t("settings.mfa.recovery_codes_warning"))+"\n ")]),t._v(" "),s("ul",{staticClass:"backup-codes"},t._l(t.backupCodes.codes,function(e){return s("li",{key:e},[t._v("\n "+t._s(e)+"\n ")])}),0)]:t._e()],2)},[],!1,Ct,null,null).exports,kt={props:["disabled"],data:function(){return{}},methods:{confirm:function(){this.$emit("confirm")},cancel:function(){this.$emit("cancel")}}},yt=Object(o.a)(kt,function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("div",[t._t("default"),t._v(" "),s("button",{staticClass:"btn btn-default",attrs:{disabled:t.disabled},on:{click:t.confirm}},[t._v("\n "+t._s(t.$t("general.confirm"))+"\n ")]),t._v(" "),s("button",{staticClass:"btn btn-default",attrs:{disabled:t.disabled},on:{click:t.cancel}},[t._v("\n "+t._s(t.$t("general.cancel"))+"\n ")])],2)},[],!1,null,null,null).exports,$t=s(2);function Lt(t,e){var s=Object.keys(t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(t);e&&(a=a.filter(function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})),s.push.apply(s,a)}return s}var Tt={props:["settings"],data:function(){return{error:!1,currentPassword:"",deactivate:!1,inProgress:!1}},components:{confirm:yt},computed:function(t){for(var e=1;e0},confirmNewBackupCodes:function(){return this.backupCodes.getNewCodes}},Object($t.e)({backendInteractor:function(t){return t.api.backendInteractor}})),methods:{activateOTP:function(){this.settings.enabled||(this.setupState.state="getBackupcodes",this.fetchBackupCodes())},fetchBackupCodes:function(){var t=this;return this.backupCodes.inProgress=!0,this.backupCodes.codes=[],this.backendInteractor.generateMfaBackupCodes().then(function(e){t.backupCodes.codes=e.codes,t.backupCodes.inProgress=!1})},getBackupCodes:function(){this.backupCodes.getNewCodes=!0},confirmBackupCodes:function(){var t=this;this.fetchBackupCodes().then(function(e){t.backupCodes.getNewCodes=!1})},cancelBackupCodes:function(){this.backupCodes.getNewCodes=!1},setupOTP:function(){var t=this;this.setupState.state="setupOTP",this.setupState.setupOTPState="prepare",this.backendInteractor.mfaSetupOTP().then(function(e){t.otpSettings=e,t.setupState.setupOTPState="confirm"})},doConfirmOTP:function(){var t=this;this.error=null,this.backendInteractor.mfaConfirmOTP({token:this.otpConfirmToken,password:this.currentPassword}).then(function(e){e.error?t.error=e.error:t.completeSetup()})},completeSetup:function(){this.setupState.setupOTPState="complete",this.setupState.state="complete",this.currentPassword=null,this.error=null,this.fetchSettings()},cancelSetup:function(){this.setupState.setupOTPState="",this.setupState.state="",this.currentPassword=null,this.error=null},fetchSettings:function(){var t;return _t.a.async(function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,_t.a.awrap(this.backendInteractor.settingsMFA());case 2:if(!(t=e.sent).error){e.next=5;break}return e.abrupt("return");case 5:return this.settings=t.settings,this.settings.available=!0,e.abrupt("return",t);case 8:case"end":return e.stop()}},null,this)}},mounted:function(){var t=this;this.fetchSettings().then(function(){t.readyInit=!0})}};var St=function(t){s(613)},It=Object(o.a)(Pt,function(){var t=this,e=t.$createElement,s=t._self._c||e;return t.readyInit&&t.settings.available?s("div",{staticClass:"setting-item mfa-settings"},[s("div",{staticClass:"mfa-heading"},[s("h2",[t._v(t._s(t.$t("settings.mfa.title")))])]),t._v(" "),s("div",[t.setupInProgress?t._e():s("div",{staticClass:"setting-item"},[s("h3",[t._v(t._s(t.$t("settings.mfa.authentication_methods")))]),t._v(" "),s("totp-item",{attrs:{settings:t.settings},on:{deactivate:t.fetchSettings,activate:t.activateOTP}}),t._v(" "),s("br"),t._v(" "),t.settings.enabled?s("div",[t.confirmNewBackupCodes?t._e():s("recovery-codes",{attrs:{"backup-codes":t.backupCodes}}),t._v(" "),t.confirmNewBackupCodes?t._e():s("button",{staticClass:"btn btn-default",on:{click:t.getBackupCodes}},[t._v("\n "+t._s(t.$t("settings.mfa.generate_new_recovery_codes"))+"\n ")]),t._v(" "),t.confirmNewBackupCodes?s("div",[s("confirm",{attrs:{disabled:t.backupCodes.inProgress},on:{confirm:t.confirmBackupCodes,cancel:t.cancelBackupCodes}},[s("p",{staticClass:"warning"},[t._v("\n "+t._s(t.$t("settings.mfa.warning_of_generate_new_codes"))+"\n ")])])],1):t._e()],1):t._e()],1),t._v(" "),t.setupInProgress?s("div",[s("h3",[t._v(t._s(t.$t("settings.mfa.setup_otp")))]),t._v(" "),t.setupOTPInProgress?t._e():s("recovery-codes",{attrs:{"backup-codes":t.backupCodes}}),t._v(" "),t.canSetupOTP?s("button",{staticClass:"btn btn-default",on:{click:t.cancelSetup}},[t._v("\n "+t._s(t.$t("general.cancel"))+"\n ")]):t._e(),t._v(" "),t.canSetupOTP?s("button",{staticClass:"btn btn-default",on:{click:t.setupOTP}},[t._v("\n "+t._s(t.$t("settings.mfa.setup_otp"))+"\n ")]):t._e(),t._v(" "),t.setupOTPInProgress?[t.prepareOTP?s("i",[t._v(t._s(t.$t("settings.mfa.wait_pre_setup_otp")))]):t._e(),t._v(" "),t.confirmOTP?s("div",[s("div",{staticClass:"setup-otp"},[s("div",{staticClass:"qr-code"},[s("h4",[t._v(t._s(t.$t("settings.mfa.scan.title")))]),t._v(" "),s("p",[t._v(t._s(t.$t("settings.mfa.scan.desc")))]),t._v(" "),s("qrcode",{attrs:{value:t.otpSettings.provisioning_uri,options:{width:200}}}),t._v(" "),s("p",[t._v("\n "+t._s(t.$t("settings.mfa.scan.secret_code"))+":\n "+t._s(t.otpSettings.key)+"\n ")])],1),t._v(" "),s("div",{staticClass:"verify"},[s("h4",[t._v(t._s(t.$t("general.verify")))]),t._v(" "),s("p",[t._v(t._s(t.$t("settings.mfa.verify.desc")))]),t._v(" "),s("input",{directives:[{name:"model",rawName:"v-model",value:t.otpConfirmToken,expression:"otpConfirmToken"}],attrs:{type:"text"},domProps:{value:t.otpConfirmToken},on:{input:function(e){e.target.composing||(t.otpConfirmToken=e.target.value)}}}),t._v(" "),s("p",[t._v(t._s(t.$t("settings.enter_current_password_to_confirm"))+":")]),t._v(" "),s("input",{directives:[{name:"model",rawName:"v-model",value:t.currentPassword,expression:"currentPassword"}],attrs:{type:"password"},domProps:{value:t.currentPassword},on:{input:function(e){e.target.composing||(t.currentPassword=e.target.value)}}}),t._v(" "),s("div",{staticClass:"confirm-otp-actions"},[s("button",{staticClass:"btn btn-default",on:{click:t.doConfirmOTP}},[t._v("\n "+t._s(t.$t("settings.mfa.confirm_and_enable"))+"\n ")]),t._v(" "),s("button",{staticClass:"btn btn-default",on:{click:t.cancelSetup}},[t._v("\n "+t._s(t.$t("general.cancel"))+"\n ")])]),t._v(" "),t.error?s("div",{staticClass:"alert error"},[t._v("\n "+t._s(t.error)+"\n ")]):t._e()])])]):t._e()]:t._e()],2):t._e()])]):t._e()},[],!1,St,null,null).exports,jt={data:function(){return{newEmail:"",changeEmailError:!1,changeEmailPassword:"",changedEmail:!1,deletingAccount:!1,deleteAccountConfirmPasswordInput:"",deleteAccountError:!1,changePasswordInputs:["","",""],changedPassword:!1,changePasswordError:!1}},created:function(){this.$store.dispatch("fetchTokens")},components:{ProgressButton:S.a,Mfa:It,Checkbox:d.a},computed:{user:function(){return this.$store.state.users.currentUser},pleromaBackend:function(){return this.$store.state.instance.pleromaBackend},oauthTokens:function(){return this.$store.state.oauthTokens.tokens.map(function(t){return{id:t.id,appName:t.app_name,validUntil:new Date(t.valid_until).toLocaleDateString()}})}},methods:{confirmDelete:function(){this.deletingAccount=!0},deleteAccount:function(){var t=this;this.$store.state.api.backendInteractor.deleteAccount({password:this.deleteAccountConfirmPasswordInput}).then(function(e){"success"===e.status?(t.$store.dispatch("logout"),t.$router.push({name:"root"})):t.deleteAccountError=e.error})},changePassword:function(){var t=this,e={password:this.changePasswordInputs[0],newPassword:this.changePasswordInputs[1],newPasswordConfirmation:this.changePasswordInputs[2]};this.$store.state.api.backendInteractor.changePassword(e).then(function(e){"success"===e.status?(t.changedPassword=!0,t.changePasswordError=!1,t.logout()):(t.changedPassword=!1,t.changePasswordError=e.error)})},changeEmail:function(){var t=this,e={email:this.newEmail,password:this.changeEmailPassword};this.$store.state.api.backendInteractor.changeEmail(e).then(function(e){"success"===e.status?(t.changedEmail=!0,t.changeEmailError=!1):(t.changedEmail=!1,t.changeEmailError=e.error)})},logout:function(){this.$store.dispatch("logout"),this.$router.replace("/")},revokeToken:function(t){window.confirm("".concat(this.$i18n.t("settings.revoke_token"),"?"))&&this.$store.dispatch("revokeToken",t)}}},Et=Object(o.a)(jt,function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("div",{attrs:{label:t.$t("settings.security_tab")}},[s("div",{staticClass:"setting-item"},[s("h2",[t._v(t._s(t.$t("settings.change_email")))]),t._v(" "),s("div",[s("p",[t._v(t._s(t.$t("settings.new_email")))]),t._v(" "),s("input",{directives:[{name:"model",rawName:"v-model",value:t.newEmail,expression:"newEmail"}],attrs:{type:"email",autocomplete:"email"},domProps:{value:t.newEmail},on:{input:function(e){e.target.composing||(t.newEmail=e.target.value)}}})]),t._v(" "),s("div",[s("p",[t._v(t._s(t.$t("settings.current_password")))]),t._v(" "),s("input",{directives:[{name:"model",rawName:"v-model",value:t.changeEmailPassword,expression:"changeEmailPassword"}],attrs:{type:"password",autocomplete:"current-password"},domProps:{value:t.changeEmailPassword},on:{input:function(e){e.target.composing||(t.changeEmailPassword=e.target.value)}}})]),t._v(" "),s("button",{staticClass:"btn btn-default",on:{click:t.changeEmail}},[t._v("\n "+t._s(t.$t("general.submit"))+"\n ")]),t._v(" "),t.changedEmail?s("p",[t._v("\n "+t._s(t.$t("settings.changed_email"))+"\n ")]):t._e(),t._v(" "),!1!==t.changeEmailError?[s("p",[t._v(t._s(t.$t("settings.change_email_error")))]),t._v(" "),s("p",[t._v(t._s(t.changeEmailError))])]:t._e()],2),t._v(" "),s("div",{staticClass:"setting-item"},[s("h2",[t._v(t._s(t.$t("settings.change_password")))]),t._v(" "),s("div",[s("p",[t._v(t._s(t.$t("settings.current_password")))]),t._v(" "),s("input",{directives:[{name:"model",rawName:"v-model",value:t.changePasswordInputs[0],expression:"changePasswordInputs[0]"}],attrs:{type:"password"},domProps:{value:t.changePasswordInputs[0]},on:{input:function(e){e.target.composing||t.$set(t.changePasswordInputs,0,e.target.value)}}})]),t._v(" "),s("div",[s("p",[t._v(t._s(t.$t("settings.new_password")))]),t._v(" "),s("input",{directives:[{name:"model",rawName:"v-model",value:t.changePasswordInputs[1],expression:"changePasswordInputs[1]"}],attrs:{type:"password"},domProps:{value:t.changePasswordInputs[1]},on:{input:function(e){e.target.composing||t.$set(t.changePasswordInputs,1,e.target.value)}}})]),t._v(" "),s("div",[s("p",[t._v(t._s(t.$t("settings.confirm_new_password")))]),t._v(" "),s("input",{directives:[{name:"model",rawName:"v-model",value:t.changePasswordInputs[2],expression:"changePasswordInputs[2]"}],attrs:{type:"password"},domProps:{value:t.changePasswordInputs[2]},on:{input:function(e){e.target.composing||t.$set(t.changePasswordInputs,2,e.target.value)}}})]),t._v(" "),s("button",{staticClass:"btn btn-default",on:{click:t.changePassword}},[t._v("\n "+t._s(t.$t("general.submit"))+"\n ")]),t._v(" "),t.changedPassword?s("p",[t._v("\n "+t._s(t.$t("settings.changed_password"))+"\n ")]):!1!==t.changePasswordError?s("p",[t._v("\n "+t._s(t.$t("settings.change_password_error"))+"\n ")]):t._e(),t._v(" "),t.changePasswordError?s("p",[t._v("\n "+t._s(t.changePasswordError)+"\n ")]):t._e()]),t._v(" "),s("div",{staticClass:"setting-item"},[s("h2",[t._v(t._s(t.$t("settings.oauth_tokens")))]),t._v(" "),s("table",{staticClass:"oauth-tokens"},[s("thead",[s("tr",[s("th",[t._v(t._s(t.$t("settings.app_name")))]),t._v(" "),s("th",[t._v(t._s(t.$t("settings.valid_until")))]),t._v(" "),s("th")])]),t._v(" "),s("tbody",t._l(t.oauthTokens,function(e){return s("tr",{key:e.id},[s("td",[t._v(t._s(e.appName))]),t._v(" "),s("td",[t._v(t._s(e.validUntil))]),t._v(" "),s("td",{staticClass:"actions"},[s("button",{staticClass:"btn btn-default",on:{click:function(s){return t.revokeToken(e.id)}}},[t._v("\n "+t._s(t.$t("settings.revoke_token"))+"\n ")])])])}),0)])]),t._v(" "),s("mfa"),t._v(" "),s("div",{staticClass:"setting-item"},[s("h2",[t._v(t._s(t.$t("settings.delete_account")))]),t._v(" "),t.deletingAccount?t._e():s("p",[t._v("\n "+t._s(t.$t("settings.delete_account_description"))+"\n ")]),t._v(" "),t.deletingAccount?s("div",[s("p",[t._v(t._s(t.$t("settings.delete_account_instructions")))]),t._v(" "),s("p",[t._v(t._s(t.$t("login.password")))]),t._v(" "),s("input",{directives:[{name:"model",rawName:"v-model",value:t.deleteAccountConfirmPasswordInput,expression:"deleteAccountConfirmPasswordInput"}],attrs:{type:"password"},domProps:{value:t.deleteAccountConfirmPasswordInput},on:{input:function(e){e.target.composing||(t.deleteAccountConfirmPasswordInput=e.target.value)}}}),t._v(" "),s("button",{staticClass:"btn btn-default",on:{click:t.deleteAccount}},[t._v("\n "+t._s(t.$t("settings.delete_account"))+"\n ")])]):t._e(),t._v(" "),!1!==t.deleteAccountError?s("p",[t._v("\n "+t._s(t.$t("settings.delete_account_error"))+"\n ")]):t._e(),t._v(" "),t.deleteAccountError?s("p",[t._v("\n "+t._s(t.deleteAccountError)+"\n ")]):t._e(),t._v(" "),t.deletingAccount?t._e():s("button",{staticClass:"btn btn-default",on:{click:t.confirmDelete}},[t._v("\n "+t._s(t.$t("general.submit"))+"\n ")])])],1)},[],!1,null,null,null).exports,Rt=s(188),Bt=s.n(Rt),Ft=s(96),Mt=s.n(Ft),Ut=s(27),Vt=s.n(Ut),At=s(622),Dt=(s(623),{props:{trigger:{type:[String,window.Element],required:!0},submitHandler:{type:Function,required:!0},cropperOptions:{type:Object,default:function(){return{aspectRatio:1,autoCropArea:1,viewMode:1,movable:!1,zoomable:!1,guides:!1}}},mimes:{type:String,default:"image/png, image/gif, image/jpeg, image/bmp, image/x-icon"},saveButtonLabel:{type:String},saveWithoutCroppingButtonlabel:{type:String},cancelButtonLabel:{type:String}},data:function(){return{cropper:void 0,dataUrl:void 0,filename:void 0,submitting:!1,submitError:null}},computed:{saveText:function(){return this.saveButtonLabel||this.$t("image_cropper.save")},saveWithoutCroppingText:function(){return this.saveWithoutCroppingButtonlabel||this.$t("image_cropper.save_without_cropping")},cancelText:function(){return this.cancelButtonLabel||this.$t("image_cropper.cancel")},submitErrorMsg:function(){return this.submitError&&this.submitError instanceof Error?this.submitError.toString():this.submitError}},methods:{destroy:function(){this.cropper&&this.cropper.destroy(),this.$refs.input.value="",this.dataUrl=void 0,this.$emit("close")},submit:function(){var t=this,e=!(arguments.length>0&&void 0!==arguments[0])||arguments[0];this.submitting=!0,this.avatarUploadError=null,this.submitHandler(e&&this.cropper,this.file).then(function(){return t.destroy()}).catch(function(e){t.submitError=e}).finally(function(){t.submitting=!1})},pickImage:function(){this.$refs.input.click()},createCropper:function(){this.cropper=new At.a(this.$refs.img,this.cropperOptions)},getTriggerDOM:function(){return"object"===Vt()(this.trigger)?this.trigger:document.querySelector(this.trigger)},readFile:function(){var t=this,e=this.$refs.input;if(null!=e.files&&null!=e.files[0]){this.file=e.files[0];var s=new window.FileReader;s.onload=function(e){t.dataUrl=e.target.result,t.$emit("open")},s.readAsDataURL(this.file),this.$emit("changed",this.file,s)}},clearError:function(){this.submitError=null}},mounted:function(){var t=this.getTriggerDOM();t?t.addEventListener("click",this.pickImage):this.$emit("error","No image make trigger found.","user"),this.$refs.input.addEventListener("change",this.readFile)},beforeDestroy:function(){var t=this.getTriggerDOM();t&&t.removeEventListener("click",this.pickImage),this.$refs.input.removeEventListener("change",this.readFile)}});var Nt=function(t){s(620)},Wt=Object(o.a)(Dt,function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("div",{staticClass:"image-cropper"},[t.dataUrl?s("div",[s("div",{staticClass:"image-cropper-image-container"},[s("img",{ref:"img",attrs:{src:t.dataUrl,alt:""},on:{load:function(e){return e.stopPropagation(),t.createCropper(e)}}})]),t._v(" "),s("div",{staticClass:"image-cropper-buttons-wrapper"},[s("button",{staticClass:"btn",attrs:{type:"button",disabled:t.submitting},domProps:{textContent:t._s(t.saveText)},on:{click:function(e){return t.submit()}}}),t._v(" "),s("button",{staticClass:"btn",attrs:{type:"button",disabled:t.submitting},domProps:{textContent:t._s(t.cancelText)},on:{click:t.destroy}}),t._v(" "),s("button",{staticClass:"btn",attrs:{type:"button",disabled:t.submitting},domProps:{textContent:t._s(t.saveWithoutCroppingText)},on:{click:function(e){return t.submit(!1)}}}),t._v(" "),t.submitting?s("i",{staticClass:"icon-spin4 animate-spin"}):t._e()]),t._v(" "),t.submitError?s("div",{staticClass:"alert error"},[t._v("\n "+t._s(t.submitErrorMsg)+"\n "),s("i",{staticClass:"button-icon icon-cancel",on:{click:t.clearError}})]):t._e()]):t._e(),t._v(" "),s("input",{ref:"input",staticClass:"image-cropper-img-input",attrs:{type:"file",accept:t.mimes}})])},[],!1,Nt,null,null).exports,zt=s(196),qt=s(134),Gt=s(195),Ht=s(135),Kt={data:function(){return{newName:this.$store.state.users.currentUser.name,newBio:Bt()(this.$store.state.users.currentUser.description),newLocked:this.$store.state.users.currentUser.locked,newNoRichText:this.$store.state.users.currentUser.no_rich_text,newDefaultScope:this.$store.state.users.currentUser.default_scope,newFields:this.$store.state.users.currentUser.fields.map(function(t){return{name:t.name,value:t.value}}),hideFollows:this.$store.state.users.currentUser.hide_follows,hideFollowers:this.$store.state.users.currentUser.hide_followers,hideFollowsCount:this.$store.state.users.currentUser.hide_follows_count,hideFollowersCount:this.$store.state.users.currentUser.hide_followers_count,showRole:this.$store.state.users.currentUser.show_role,role:this.$store.state.users.currentUser.role,discoverable:this.$store.state.users.currentUser.discoverable,bot:this.$store.state.users.currentUser.bot,allowFollowingMove:this.$store.state.users.currentUser.allow_following_move,pickAvatarBtnVisible:!0,bannerUploading:!1,backgroundUploading:!1,banner:null,bannerPreview:null,background:null,backgroundPreview:null,bannerUploadError:null,backgroundUploadError:null}},components:{ScopeSelector:zt.a,ImageCropper:Wt,EmojiInput:Gt.a,Autosuggest:x,ProgressButton:S.a,Checkbox:d.a},computed:{user:function(){return this.$store.state.users.currentUser},emojiUserSuggestor:function(){var t=this;return Object(Ht.a)({emoji:[].concat(z()(this.$store.state.instance.emoji),z()(this.$store.state.instance.customEmoji)),users:this.$store.state.users.users,updateUsersList:function(e){return t.$store.dispatch("searchUsers",{query:e})}})},emojiSuggestor:function(){return Object(Ht.a)({emoji:[].concat(z()(this.$store.state.instance.emoji),z()(this.$store.state.instance.customEmoji))})},userSuggestor:function(){var t=this;return Object(Ht.a)({users:this.$store.state.users.users,updateUsersList:function(e){return t.$store.dispatch("searchUsers",{query:e})}})},fieldsLimits:function(){return this.$store.state.instance.fieldsLimits},maxFields:function(){return this.fieldsLimits?this.fieldsLimits.maxFields:0},defaultAvatar:function(){return this.$store.state.instance.server+this.$store.state.instance.defaultAvatar},defaultBanner:function(){return this.$store.state.instance.server+this.$store.state.instance.defaultBanner},isDefaultAvatar:function(){var t=this.$store.state.instance.defaultAvatar;return!this.$store.state.users.currentUser.profile_image_url||this.$store.state.users.currentUser.profile_image_url.includes(t)},isDefaultBanner:function(){var t=this.$store.state.instance.defaultBanner;return!this.$store.state.users.currentUser.cover_photo||this.$store.state.users.currentUser.cover_photo.includes(t)},isDefaultBackground:function(){return!this.$store.state.users.currentUser.background_image},avatarImgSrc:function(){var t=this.$store.state.users.currentUser.profile_image_url_original;return t||this.defaultAvatar},bannerImgSrc:function(){var t=this.$store.state.users.currentUser.cover_photo;return t||this.defaultBanner}},methods:{updateProfile:function(){var t=this;this.$store.state.api.backendInteractor.updateProfile({params:{note:this.newBio,locked:this.newLocked,display_name:this.newName,fields_attributes:this.newFields.filter(function(t){return null!=t}),default_scope:this.newDefaultScope,no_rich_text:this.newNoRichText,hide_follows:this.hideFollows,hide_followers:this.hideFollowers,discoverable:this.discoverable,bot:this.bot,allow_following_move:this.allowFollowingMove,hide_follows_count:this.hideFollowsCount,hide_followers_count:this.hideFollowersCount,show_role:this.showRole}}).then(function(e){t.newFields.splice(e.fields.length),Mt()(t.newFields,e.fields),t.$store.commit("addNewUsers",[e]),t.$store.commit("setCurrentUser",e)})},changeVis:function(t){this.newDefaultScope=t},addField:function(){return this.newFields.lengththis.$store.state.instance[t+"limit"]){var n=qt.a.fileSizeFormat(a.size),o=qt.a.fileSizeFormat(this.$store.state.instance[t+"limit"]);this[t+"UploadError"]=[this.$t("upload.error.base"),this.$t("upload.error.file_too_big",{filesize:n.num,filesizeunit:n.unit,allowedsize:o.num,allowedsizeunit:o.unit})].join(" ")}else{var i=new FileReader;i.onload=function(e){var n=e.target.result;s[t+"Preview"]=n,s[t]=a},i.readAsDataURL(a)}},resetAvatar:function(){window.confirm(this.$t("settings.reset_avatar_confirm"))&&this.submitAvatar(void 0,"")},resetBanner:function(){window.confirm(this.$t("settings.reset_banner_confirm"))&&this.submitBanner("")},resetBackground:function(){window.confirm(this.$t("settings.reset_background_confirm"))&&this.submitBackground("")},submitAvatar:function(t,e){var s=this;return new Promise(function(a,n){function o(t){s.$store.state.api.backendInteractor.updateProfileImages({avatar:t}).then(function(t){s.$store.commit("addNewUsers",[t]),s.$store.commit("setCurrentUser",t),a()}).catch(function(t){n(new Error(s.$t("upload.error.base")+" "+t.message))})}t?t.getCroppedCanvas().toBlob(o,e.type):o(e)})},submitBanner:function(t){var e=this;(this.bannerPreview||""===t)&&(this.bannerUploading=!0,this.$store.state.api.backendInteractor.updateProfileImages({banner:t}).then(function(t){e.$store.commit("addNewUsers",[t]),e.$store.commit("setCurrentUser",t),e.bannerPreview=null}).catch(function(t){e.bannerUploadError=e.$t("upload.error.base")+" "+t.message}).then(function(){e.bannerUploading=!1}))},submitBackground:function(t){var e=this;(this.backgroundPreview||""===t)&&(this.backgroundUploading=!0,this.$store.state.api.backendInteractor.updateProfileImages({background:t}).then(function(t){t.error?e.backgroundUploadError=e.$t("upload.error.base")+t.error:(e.$store.commit("addNewUsers",[t]),e.$store.commit("setCurrentUser",t),e.backgroundPreview=null),e.backgroundUploading=!1}))}}};var Jt=function(t){s(618)},Qt=Object(o.a)(Kt,function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("div",{staticClass:"profile-tab"},[s("div",{staticClass:"setting-item"},[s("h2",[t._v(t._s(t.$t("settings.name_bio")))]),t._v(" "),s("p",[t._v(t._s(t.$t("settings.name")))]),t._v(" "),s("EmojiInput",{attrs:{"enable-emoji-picker":"",suggest:t.emojiSuggestor},model:{value:t.newName,callback:function(e){t.newName=e},expression:"newName"}},[s("input",{directives:[{name:"model",rawName:"v-model",value:t.newName,expression:"newName"}],attrs:{id:"username",classname:"name-changer"},domProps:{value:t.newName},on:{input:function(e){e.target.composing||(t.newName=e.target.value)}}})]),t._v(" "),s("p",[t._v(t._s(t.$t("settings.bio")))]),t._v(" "),s("EmojiInput",{attrs:{"enable-emoji-picker":"",suggest:t.emojiUserSuggestor},model:{value:t.newBio,callback:function(e){t.newBio=e},expression:"newBio"}},[s("textarea",{directives:[{name:"model",rawName:"v-model",value:t.newBio,expression:"newBio"}],attrs:{classname:"bio"},domProps:{value:t.newBio},on:{input:function(e){e.target.composing||(t.newBio=e.target.value)}}})]),t._v(" "),s("p",[s("Checkbox",{model:{value:t.newLocked,callback:function(e){t.newLocked=e},expression:"newLocked"}},[t._v("\n "+t._s(t.$t("settings.lock_account_description"))+"\n ")])],1),t._v(" "),s("div",[s("label",{attrs:{for:"default-vis"}},[t._v(t._s(t.$t("settings.default_vis")))]),t._v(" "),s("div",{staticClass:"visibility-tray",attrs:{id:"default-vis"}},[s("scope-selector",{attrs:{"show-all":!0,"user-default":t.newDefaultScope,"initial-scope":t.newDefaultScope,"on-scope-change":t.changeVis}})],1)]),t._v(" "),s("p",[s("Checkbox",{model:{value:t.newNoRichText,callback:function(e){t.newNoRichText=e},expression:"newNoRichText"}},[t._v("\n "+t._s(t.$t("settings.no_rich_text_description"))+"\n ")])],1),t._v(" "),s("p",[s("Checkbox",{model:{value:t.hideFollows,callback:function(e){t.hideFollows=e},expression:"hideFollows"}},[t._v("\n "+t._s(t.$t("settings.hide_follows_description"))+"\n ")])],1),t._v(" "),s("p",{staticClass:"setting-subitem"},[s("Checkbox",{attrs:{disabled:!t.hideFollows},model:{value:t.hideFollowsCount,callback:function(e){t.hideFollowsCount=e},expression:"hideFollowsCount"}},[t._v("\n "+t._s(t.$t("settings.hide_follows_count_description"))+"\n ")])],1),t._v(" "),s("p",[s("Checkbox",{model:{value:t.hideFollowers,callback:function(e){t.hideFollowers=e},expression:"hideFollowers"}},[t._v("\n "+t._s(t.$t("settings.hide_followers_description"))+"\n ")])],1),t._v(" "),s("p",{staticClass:"setting-subitem"},[s("Checkbox",{attrs:{disabled:!t.hideFollowers},model:{value:t.hideFollowersCount,callback:function(e){t.hideFollowersCount=e},expression:"hideFollowersCount"}},[t._v("\n "+t._s(t.$t("settings.hide_followers_count_description"))+"\n ")])],1),t._v(" "),s("p",[s("Checkbox",{model:{value:t.allowFollowingMove,callback:function(e){t.allowFollowingMove=e},expression:"allowFollowingMove"}},[t._v("\n "+t._s(t.$t("settings.allow_following_move"))+"\n ")])],1),t._v(" "),"admin"===t.role||"moderator"===t.role?s("p",[s("Checkbox",{model:{value:t.showRole,callback:function(e){t.showRole=e},expression:"showRole"}},["admin"===t.role?[t._v("\n "+t._s(t.$t("settings.show_admin_badge"))+"\n ")]:t._e(),t._v(" "),"moderator"===t.role?[t._v("\n "+t._s(t.$t("settings.show_moderator_badge"))+"\n ")]:t._e()],2)],1):t._e(),t._v(" "),s("p",[s("Checkbox",{model:{value:t.discoverable,callback:function(e){t.discoverable=e},expression:"discoverable"}},[t._v("\n "+t._s(t.$t("settings.discoverable"))+"\n ")])],1),t._v(" "),t.maxFields>0?s("div",[s("p",[t._v(t._s(t.$t("settings.profile_fields.label")))]),t._v(" "),t._l(t.newFields,function(e,a){return s("div",{key:a,staticClass:"profile-fields"},[s("EmojiInput",{attrs:{"enable-emoji-picker":"","hide-emoji-button":"",suggest:t.userSuggestor},model:{value:t.newFields[a].name,callback:function(e){t.$set(t.newFields[a],"name",e)},expression:"newFields[i].name"}},[s("input",{directives:[{name:"model",rawName:"v-model",value:t.newFields[a].name,expression:"newFields[i].name"}],attrs:{placeholder:t.$t("settings.profile_fields.name")},domProps:{value:t.newFields[a].name},on:{input:function(e){e.target.composing||t.$set(t.newFields[a],"name",e.target.value)}}})]),t._v(" "),s("EmojiInput",{attrs:{"enable-emoji-picker":"","hide-emoji-button":"",suggest:t.userSuggestor},model:{value:t.newFields[a].value,callback:function(e){t.$set(t.newFields[a],"value",e)},expression:"newFields[i].value"}},[s("input",{directives:[{name:"model",rawName:"v-model",value:t.newFields[a].value,expression:"newFields[i].value"}],attrs:{placeholder:t.$t("settings.profile_fields.value")},domProps:{value:t.newFields[a].value},on:{input:function(e){e.target.composing||t.$set(t.newFields[a],"value",e.target.value)}}})]),t._v(" "),s("div",{staticClass:"icon-container"},[s("i",{directives:[{name:"show",rawName:"v-show",value:t.newFields.length>1,expression:"newFields.length > 1"}],staticClass:"icon-cancel",on:{click:function(e){return t.deleteField(a)}}})])],1)}),t._v(" "),t.newFields.length0?s("li",[s("div",[t._v("\n "+t._s(t.$t("settings.post_status_content_type"))+"\n "),s("label",{staticClass:"select",attrs:{for:"postContentType"}},[s("select",{directives:[{name:"model",rawName:"v-model",value:t.postContentType,expression:"postContentType"}],attrs:{id:"postContentType"},on:{change:function(e){var s=Array.prototype.filter.call(e.target.options,function(t){return t.selected}).map(function(t){return"_value"in t?t._value:t.value});t.postContentType=e.target.multiple?s:s[0]}}},t._l(t.postFormats,function(e){return s("option",{key:e,domProps:{value:e}},[t._v("\n "+t._s(t.$t('post_status.content_type["'+e+'"]'))+"\n "+t._s(t.postContentTypeDefaultValue===e?t.$t("settings.instance_default_simple"):"")+"\n ")])}),0),t._v(" "),s("i",{staticClass:"icon-down-open"})])])]):t._e(),t._v(" "),s("li",[s("Checkbox",{model:{value:t.minimalScopesMode,callback:function(e){t.minimalScopesMode=e},expression:"minimalScopesMode"}},[t._v("\n "+t._s(t.$t("settings.minimal_scopes_mode"))+" "+t._s(t.$t("settings.instance_default",{value:t.minimalScopesModeLocalizedValue}))+"\n ")])],1),t._v(" "),s("li",[s("Checkbox",{model:{value:t.autohideFloatingPostButton,callback:function(e){t.autohideFloatingPostButton=e},expression:"autohideFloatingPostButton"}},[t._v("\n "+t._s(t.$t("settings.autohide_floating_post_button"))+"\n ")])],1),t._v(" "),s("li",[s("Checkbox",{model:{value:t.padEmoji,callback:function(e){t.padEmoji=e},expression:"padEmoji"}},[t._v("\n "+t._s(t.$t("settings.pad_emoji"))+"\n ")])],1)])]),t._v(" "),s("div",{staticClass:"setting-item"},[s("h2",[t._v(t._s(t.$t("settings.attachments")))]),t._v(" "),s("ul",{staticClass:"setting-list"},[s("li",[s("Checkbox",{model:{value:t.hideAttachments,callback:function(e){t.hideAttachments=e},expression:"hideAttachments"}},[t._v("\n "+t._s(t.$t("settings.hide_attachments_in_tl"))+"\n ")])],1),t._v(" "),s("li",[s("Checkbox",{model:{value:t.hideAttachmentsInConv,callback:function(e){t.hideAttachmentsInConv=e},expression:"hideAttachmentsInConv"}},[t._v("\n "+t._s(t.$t("settings.hide_attachments_in_convo"))+"\n ")])],1),t._v(" "),s("li",[s("label",{attrs:{for:"maxThumbnails"}},[t._v("\n "+t._s(t.$t("settings.max_thumbnails"))+"\n ")]),t._v(" "),s("input",{directives:[{name:"model",rawName:"v-model.number",value:t.maxThumbnails,expression:"maxThumbnails",modifiers:{number:!0}}],staticClass:"number-input",attrs:{id:"maxThumbnails",type:"number",min:"0",step:"1"},domProps:{value:t.maxThumbnails},on:{input:function(e){e.target.composing||(t.maxThumbnails=t._n(e.target.value))},blur:function(e){return t.$forceUpdate()}}})]),t._v(" "),s("li",[s("Checkbox",{model:{value:t.hideNsfw,callback:function(e){t.hideNsfw=e},expression:"hideNsfw"}},[t._v("\n "+t._s(t.$t("settings.nsfw_clickthrough"))+"\n ")])],1),t._v(" "),s("ul",{staticClass:"setting-list suboptions"},[s("li",[s("Checkbox",{attrs:{disabled:!t.hideNsfw},model:{value:t.preloadImage,callback:function(e){t.preloadImage=e},expression:"preloadImage"}},[t._v("\n "+t._s(t.$t("settings.preload_images"))+"\n ")])],1),t._v(" "),s("li",[s("Checkbox",{attrs:{disabled:!t.hideNsfw},model:{value:t.useOneClickNsfw,callback:function(e){t.useOneClickNsfw=e},expression:"useOneClickNsfw"}},[t._v("\n "+t._s(t.$t("settings.use_one_click_nsfw"))+"\n ")])],1)]),t._v(" "),s("li",[s("Checkbox",{model:{value:t.stopGifs,callback:function(e){t.stopGifs=e},expression:"stopGifs"}},[t._v("\n "+t._s(t.$t("settings.stop_gifs"))+"\n ")])],1),t._v(" "),s("li",[s("Checkbox",{model:{value:t.loopVideo,callback:function(e){t.loopVideo=e},expression:"loopVideo"}},[t._v("\n "+t._s(t.$t("settings.loop_video"))+"\n ")]),t._v(" "),s("ul",{staticClass:"setting-list suboptions",class:[{disabled:!t.streaming}]},[s("li",[s("Checkbox",{attrs:{disabled:!t.loopVideo||!t.loopSilentAvailable},model:{value:t.loopVideoSilentOnly,callback:function(e){t.loopVideoSilentOnly=e},expression:"loopVideoSilentOnly"}},[t._v("\n "+t._s(t.$t("settings.loop_video_silent_only"))+"\n ")]),t._v(" "),t.loopSilentAvailable?t._e():s("div",{staticClass:"unavailable"},[s("i",{staticClass:"icon-globe"}),t._v("! "+t._s(t.$t("settings.limited_availability"))+"\n ")])],1)])],1),t._v(" "),s("li",[s("Checkbox",{model:{value:t.playVideosInModal,callback:function(e){t.playVideosInModal=e},expression:"playVideosInModal"}},[t._v("\n "+t._s(t.$t("settings.play_videos_in_modal"))+"\n ")])],1),t._v(" "),s("li",[s("Checkbox",{model:{value:t.useContainFit,callback:function(e){t.useContainFit=e},expression:"useContainFit"}},[t._v("\n "+t._s(t.$t("settings.use_contain_fit"))+"\n ")])],1)])]),t._v(" "),s("div",{staticClass:"setting-item"},[s("h2",[t._v(t._s(t.$t("settings.notifications")))]),t._v(" "),s("ul",{staticClass:"setting-list"},[s("li",[s("Checkbox",{model:{value:t.webPushNotifications,callback:function(e){t.webPushNotifications=e},expression:"webPushNotifications"}},[t._v("\n "+t._s(t.$t("settings.enable_web_push_notifications"))+"\n ")])],1)])]),t._v(" "),s("div",{staticClass:"setting-item"},[s("h2",[t._v(t._s(t.$t("settings.fun")))]),t._v(" "),s("ul",{staticClass:"setting-list"},[s("li",[s("Checkbox",{model:{value:t.greentext,callback:function(e){t.greentext=e},expression:"greentext"}},[t._v("\n "+t._s(t.$t("settings.greentext"))+" "+t._s(t.$t("settings.instance_default",{value:t.greentextLocalizedValue}))+"\n ")])],1)])])])},[],!1,null,null,null).exports,ne={data:function(){var t=this.$store.state.instance;return{backendVersion:t.backendVersion,frontendVersion:t.frontendVersion}},computed:{frontendVersionLink:function(){return"https://git.pleroma.social/pleroma/pleroma-fe/commit/"+this.frontendVersion},backendVersionLink:function(){return"https://git.pleroma.social/pleroma/pleroma/commit/"+(t=this.backendVersion,(e=t.match(/-g(\w+)/i))?e[1]:"");var t,e}}},oe=Object(o.a)(ne,function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("div",{attrs:{label:t.$t("settings.version.title")}},[s("div",{staticClass:"setting-item"},[s("ul",{staticClass:"setting-list"},[s("li",[s("p",[t._v(t._s(t.$t("settings.version.backend_version")))]),t._v(" "),s("ul",{staticClass:"option-list"},[s("li",[s("a",{attrs:{href:t.backendVersionLink,target:"_blank"}},[t._v(t._s(t.backendVersion))])])])]),t._v(" "),s("li",[s("p",[t._v(t._s(t.$t("settings.version.frontend_version")))]),t._v(" "),s("ul",{staticClass:"option-list"},[s("li",[s("a",{attrs:{href:t.frontendVersionLink,target:"_blank"}},[t._v(t._s(t.frontendVersion))])])])])])])])},[],!1,null,null,null).exports,ie=s(9),re=s(32),le=s(29),ce=s(39),ue={components:{Checkbox:d.a},props:{name:{required:!0,type:String},label:{required:!0,type:String},value:{required:!1,type:String,default:void 0},fallback:{required:!1,type:String,default:void 0},disabled:{required:!1,type:Boolean,default:!1},showOptionalTickbox:{required:!1,type:Boolean,default:!0}},computed:{present:function(){return void 0!==this.value},validColor:function(){return Object(ie.f)(this.value||this.fallback)},transparentColor:function(){return"transparent"===this.value},computedColor:function(){return this.value&&this.value.startsWith("--")}}};var de=function(t){s(626),s(628)},pe=Object(o.a)(ue,function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("div",{staticClass:"color-input style-control",class:{disabled:!t.present||t.disabled}},[s("label",{staticClass:"label",attrs:{for:t.name}},[t._v("\n "+t._s(t.label)+"\n ")]),t._v(" "),void 0!==t.fallback&&t.showOptionalTickbox?s("Checkbox",{staticClass:"opt",attrs:{checked:t.present,disabled:t.disabled},on:{change:function(e){return t.$emit("input",void 0===t.value?t.fallback:void 0)}}}):t._e(),t._v(" "),s("div",{staticClass:"input color-input-field"},[s("input",{staticClass:"textColor unstyled",attrs:{id:t.name+"-t",type:"text",disabled:!t.present||t.disabled},domProps:{value:t.value||t.fallback},on:{input:function(e){return t.$emit("input",e.target.value)}}}),t._v(" "),t.validColor?s("input",{staticClass:"nativeColor unstyled",attrs:{id:t.name,type:"color",disabled:!t.present||t.disabled},domProps:{value:t.value||t.fallback},on:{input:function(e){return t.$emit("input",e.target.value)}}}):t._e(),t._v(" "),t.transparentColor?s("div",{staticClass:"transparentIndicator"}):t._e(),t._v(" "),t.computedColor?s("div",{staticClass:"computedIndicator",style:{backgroundColor:t.fallback}}):t._e()])],1)},[],!1,de,null,null).exports,me=Object(o.a)({props:["name","value","fallback","disabled","label","max","min","step","hardMin","hardMax"],computed:{present:function(){return void 0!==this.value}}},function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("div",{staticClass:"range-control style-control",class:{disabled:!t.present||t.disabled}},[s("label",{staticClass:"label",attrs:{for:t.name}},[t._v("\n "+t._s(t.label)+"\n ")]),t._v(" "),void 0!==t.fallback?s("input",{staticClass:"opt",attrs:{id:t.name+"-o",type:"checkbox"},domProps:{checked:t.present},on:{input:function(e){return t.$emit("input",t.present?void 0:t.fallback)}}}):t._e(),t._v(" "),void 0!==t.fallback?s("label",{staticClass:"opt-l",attrs:{for:t.name+"-o"}}):t._e(),t._v(" "),s("input",{staticClass:"input-number",attrs:{id:t.name,type:"range",disabled:!t.present||t.disabled,max:t.max||t.hardMax||100,min:t.min||t.hardMin||0,step:t.step||1},domProps:{value:t.value||t.fallback},on:{input:function(e){return t.$emit("input",e.target.value)}}}),t._v(" "),s("input",{staticClass:"input-number",attrs:{id:t.name,type:"number",disabled:!t.present||t.disabled,max:t.hardMax,min:t.hardMin,step:t.step||1},domProps:{value:t.value||t.fallback},on:{input:function(e){return t.$emit("input",e.target.value)}}})])},[],!1,null,null,null).exports,ve={components:{Checkbox:d.a},props:["name","value","fallback","disabled"],computed:{present:function(){return void 0!==this.value}}},he=Object(o.a)(ve,function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("div",{staticClass:"opacity-control style-control",class:{disabled:!t.present||t.disabled}},[s("label",{staticClass:"label",attrs:{for:t.name}},[t._v("\n "+t._s(t.$t("settings.style.common.opacity"))+"\n ")]),t._v(" "),void 0!==t.fallback?s("Checkbox",{staticClass:"opt",attrs:{checked:t.present,disabled:t.disabled},on:{change:function(e){return t.$emit("input",t.present?void 0:t.fallback)}}}):t._e(),t._v(" "),s("input",{staticClass:"input-number",attrs:{id:t.name,type:"number",disabled:!t.present||t.disabled,max:"1",min:"0",step:".05"},domProps:{value:t.value||t.fallback},on:{input:function(e){return t.$emit("input",e.target.value)}}})],1)},[],!1,null,null,null).exports;function be(t,e){var s=Object.keys(t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(t);e&&(a=a.filter(function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})),s.push.apply(s,a)}return s}var fe=function(){return function(t){for(var e=1;e0&&void 0!==arguments[0]?arguments[0]:{})},ge={props:["value","fallback","ready"],data:function(){return{selectedId:0,cValue:(this.value||this.fallback||[]).map(fe)}},components:{ColorInput:pe,OpacityInput:he},methods:{add:function(){this.cValue.push(fe(this.selected)),this.selectedId=this.cValue.length-1},del:function(){this.cValue.splice(this.selectedId,1),this.selectedId=0===this.cValue.length?void 0:Math.max(this.selectedId-1,0)},moveUp:function(){var t=this.cValue.splice(this.selectedId,1)[0];this.cValue.splice(this.selectedId-1,0,t),this.selectedId-=1},moveDn:function(){var t=this.cValue.splice(this.selectedId,1)[0];this.cValue.splice(this.selectedId+1,0,t),this.selectedId+=1}},beforeUpdate:function(){this.cValue=this.value||this.fallback},computed:{anyShadows:function(){return this.cValue.length>0},anyShadowsFallback:function(){return this.fallback.length>0},selected:function(){return this.ready&&this.anyShadows?this.cValue[this.selectedId]:fe({})},currentFallback:function(){return this.ready&&this.anyShadowsFallback?this.fallback[this.selectedId]:fe({})},moveUpValid:function(){return this.ready&&this.selectedId>0},moveDnValid:function(){return this.ready&&this.selectedId-1:t.selected.inset},on:{change:function(e){var s=t.selected.inset,a=e.target,n=!!a.checked;if(Array.isArray(s)){var o=t._i(s,null);a.checked?o<0&&t.$set(t.selected,"inset",s.concat([null])):o>-1&&t.$set(t.selected,"inset",s.slice(0,o).concat(s.slice(o+1)))}else t.$set(t.selected,"inset",n)}}}),t._v(" "),s("label",{staticClass:"checkbox-label",attrs:{for:"inset"}})]),t._v(" "),s("div",{staticClass:"blur-control style-control",attrs:{disabled:!t.present}},[s("label",{staticClass:"label",attrs:{for:"spread"}},[t._v("\n "+t._s(t.$t("settings.style.shadows.blur"))+"\n ")]),t._v(" "),s("input",{directives:[{name:"model",rawName:"v-model",value:t.selected.blur,expression:"selected.blur"}],staticClass:"input-range",attrs:{id:"blur",disabled:!t.present,name:"blur",type:"range",max:"20",min:"0"},domProps:{value:t.selected.blur},on:{__r:function(e){return t.$set(t.selected,"blur",e.target.value)}}}),t._v(" "),s("input",{directives:[{name:"model",rawName:"v-model",value:t.selected.blur,expression:"selected.blur"}],staticClass:"input-number",attrs:{disabled:!t.present,type:"number",min:"0"},domProps:{value:t.selected.blur},on:{input:function(e){e.target.composing||t.$set(t.selected,"blur",e.target.value)}}})]),t._v(" "),s("div",{staticClass:"spread-control style-control",attrs:{disabled:!t.present}},[s("label",{staticClass:"label",attrs:{for:"spread"}},[t._v("\n "+t._s(t.$t("settings.style.shadows.spread"))+"\n ")]),t._v(" "),s("input",{directives:[{name:"model",rawName:"v-model",value:t.selected.spread,expression:"selected.spread"}],staticClass:"input-range",attrs:{id:"spread",disabled:!t.present,name:"spread",type:"range",max:"20",min:"-20"},domProps:{value:t.selected.spread},on:{__r:function(e){return t.$set(t.selected,"spread",e.target.value)}}}),t._v(" "),s("input",{directives:[{name:"model",rawName:"v-model",value:t.selected.spread,expression:"selected.spread"}],staticClass:"input-number",attrs:{disabled:!t.present,type:"number"},domProps:{value:t.selected.spread},on:{input:function(e){e.target.composing||t.$set(t.selected,"spread",e.target.value)}}})]),t._v(" "),s("ColorInput",{attrs:{disabled:!t.present,label:t.$t("settings.style.common.color"),fallback:t.currentFallback.color,"show-optional-tickbox":!1,name:"shadow"},model:{value:t.selected.color,callback:function(e){t.$set(t.selected,"color",e)},expression:"selected.color"}}),t._v(" "),s("OpacityInput",{attrs:{disabled:!t.present},model:{value:t.selected.alpha,callback:function(e){t.$set(t.selected,"alpha",e)},expression:"selected.alpha"}}),t._v(" "),s("i18n",{attrs:{path:"settings.style.shadows.hintV3",tag:"p"}},[s("code",[t._v("--variable,mod")])])],1)])},[],!1,_e,null,null).exports,Ce={props:["name","label","value","fallback","options","no-inherit"],data:function(){return{lValue:this.value,availableOptions:[this.noInherit?"":"inherit","custom"].concat(z()(this.options||[]),["serif","monospace","sans-serif"]).filter(function(t){return t})}},beforeUpdate:function(){this.lValue=this.value},computed:{present:function(){return void 0!==this.lValue},dValue:function(){return this.lValue||this.fallback||{}},family:{get:function(){return this.dValue.family},set:function(t){Object(q.set)(this.lValue,"family",t),this.$emit("input",this.lValue)}},isCustom:function(){return"custom"===this.preset},preset:{get:function(){return"serif"===this.family||"sans-serif"===this.family||"monospace"===this.family||"inherit"===this.family?this.family:"custom"},set:function(t){this.family="custom"===t?"":t}}}};var xe=function(t){s(632)},ke=Object(o.a)(Ce,function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("div",{staticClass:"font-control style-control",class:{custom:t.isCustom}},[s("label",{staticClass:"label",attrs:{for:"custom"===t.preset?t.name:t.name+"-font-switcher"}},[t._v("\n "+t._s(t.label)+"\n ")]),t._v(" "),void 0!==t.fallback?s("input",{staticClass:"opt exlcude-disabled",attrs:{id:t.name+"-o",type:"checkbox"},domProps:{checked:t.present},on:{input:function(e){return t.$emit("input",void 0===t.value?t.fallback:void 0)}}}):t._e(),t._v(" "),void 0!==t.fallback?s("label",{staticClass:"opt-l",attrs:{for:t.name+"-o"}}):t._e(),t._v(" "),s("label",{staticClass:"select",attrs:{for:t.name+"-font-switcher",disabled:!t.present}},[s("select",{directives:[{name:"model",rawName:"v-model",value:t.preset,expression:"preset"}],staticClass:"font-switcher",attrs:{id:t.name+"-font-switcher",disabled:!t.present},on:{change:function(e){var s=Array.prototype.filter.call(e.target.options,function(t){return t.selected}).map(function(t){return"_value"in t?t._value:t.value});t.preset=e.target.multiple?s:s[0]}}},t._l(t.availableOptions,function(e){return s("option",{key:e,domProps:{value:e}},[t._v("\n "+t._s("custom"===e?t.$t("settings.style.fonts.custom"):e)+"\n ")])}),0),t._v(" "),s("i",{staticClass:"icon-down-open"})]),t._v(" "),t.isCustom?s("input",{directives:[{name:"model",rawName:"v-model",value:t.family,expression:"family"}],staticClass:"custom-font",attrs:{id:t.name,type:"text"},domProps:{value:t.family},on:{input:function(e){e.target.composing||(t.family=e.target.value)}}}):t._e()])},[],!1,xe,null,null).exports,ye={props:{large:{required:!1},contrast:{required:!1,type:Object}},computed:{hint:function(){var t=this.contrast.aaa?"aaa":this.contrast.aa?"aa":"bad",e=this.$t("settings.style.common.contrast.level.".concat(t)),s=this.$t("settings.style.common.contrast.context.text"),a=this.contrast.text;return this.$t("settings.style.common.contrast.hint",{level:e,context:s,ratio:a})},hint_18pt:function(){var t=this.contrast.laaa?"aaa":this.contrast.laa?"aa":"bad",e=this.$t("settings.style.common.contrast.level.".concat(t)),s=this.$t("settings.style.common.contrast.context.18pt"),a=this.contrast.text;return this.$t("settings.style.common.contrast.hint",{level:e,context:s,ratio:a})}}};var $e=function(t){s(634)},Le=Object(o.a)(ye,function(){var t=this,e=t.$createElement,s=t._self._c||e;return t.contrast?s("span",{staticClass:"contrast-ratio"},[s("span",{staticClass:"rating",attrs:{title:t.hint}},[t.contrast.aaa?s("span",[s("i",{staticClass:"icon-thumbs-up-alt"})]):t._e(),t._v(" "),!t.contrast.aaa&&t.contrast.aa?s("span",[s("i",{staticClass:"icon-adjust"})]):t._e(),t._v(" "),t.contrast.aaa||t.contrast.aa?t._e():s("span",[s("i",{staticClass:"icon-attention"})])]),t._v(" "),t.contrast&&t.large?s("span",{staticClass:"rating",attrs:{title:t.hint_18pt}},[t.contrast.laaa?s("span",[s("i",{staticClass:"icon-thumbs-up-alt"})]):t._e(),t._v(" "),!t.contrast.laaa&&t.contrast.laa?s("span",[s("i",{staticClass:"icon-adjust"})]):t._e(),t._v(" "),t.contrast.laaa||t.contrast.laa?t._e():s("span",[s("i",{staticClass:"icon-attention"})])]):t._e()]):t._e()},[],!1,$e,null,null).exports,Te={props:["exportObject","importLabel","exportLabel","importFailedText","validator","onImport","onImportFailure"],data:function(){return{importFailed:!1}},methods:{exportData:function(){var t=JSON.stringify(this.exportObject,null,2),e=document.createElement("a");e.setAttribute("download","pleroma_theme.json"),e.setAttribute("href","data:application/json;base64,"+window.btoa(t)),e.style.display="none",document.body.appendChild(e),e.click(),document.body.removeChild(e)},importData:function(){var t=this;this.importFailed=!1;var e=document.createElement("input");e.setAttribute("type","file"),e.setAttribute("accept",".json"),e.addEventListener("change",function(e){if(e.target.files[0]){var s=new FileReader;s.onload=function(e){var s=e.target;try{var a=JSON.parse(s.result);t.validator(a)?t.onImport(a):t.importFailed=!0}catch(e){t.importFailed=!0}},s.readAsText(e.target.files[0])}}),document.body.appendChild(e),e.click(),document.body.removeChild(e)}}};var Oe=function(t){s(636)},Pe=Object(o.a)(Te,function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("div",{staticClass:"import-export-container"},[t._t("before"),t._v(" "),s("button",{staticClass:"btn",on:{click:t.exportData}},[t._v("\n "+t._s(t.exportLabel)+"\n ")]),t._v(" "),s("button",{staticClass:"btn",on:{click:t.importData}},[t._v("\n "+t._s(t.importLabel)+"\n ")]),t._v(" "),t._t("afterButtons"),t._v(" "),t.importFailed?s("p",{staticClass:"alert error"},[t._v("\n "+t._s(t.importFailedText)+"\n ")]):t._e(),t._v(" "),t._t("afterError")],2)},[],!1,Oe,null,null).exports;var Se=function(t){s(638)},Ie=Object(o.a)(null,function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("div",{staticClass:"preview-container"},[s("div",{staticClass:"underlay underlay-preview"}),t._v(" "),s("div",{staticClass:"panel dummy"},[s("div",{staticClass:"panel-heading"},[s("div",{staticClass:"title"},[t._v("\n "+t._s(t.$t("settings.style.preview.header"))+"\n "),s("span",{staticClass:"badge badge-notification"},[t._v("\n 99\n ")])]),t._v(" "),s("span",{staticClass:"faint"},[t._v("\n "+t._s(t.$t("settings.style.preview.header_faint"))+"\n ")]),t._v(" "),s("span",{staticClass:"alert error"},[t._v("\n "+t._s(t.$t("settings.style.preview.error"))+"\n ")]),t._v(" "),s("button",{staticClass:"btn"},[t._v("\n "+t._s(t.$t("settings.style.preview.button"))+"\n ")])]),t._v(" "),s("div",{staticClass:"panel-body theme-preview-content"},[s("div",{staticClass:"post"},[s("div",{staticClass:"avatar still-image"},[t._v("\n ( ͡° ͜ʖ ͡°)\n ")]),t._v(" "),s("div",{staticClass:"content"},[s("h4",[t._v("\n "+t._s(t.$t("settings.style.preview.content"))+"\n ")]),t._v(" "),s("i18n",{attrs:{path:"settings.style.preview.text"}},[s("code",{staticStyle:{"font-family":"var(--postCodeFont)"}},[t._v("\n "+t._s(t.$t("settings.style.preview.mono"))+"\n ")]),t._v(" "),s("a",{staticStyle:{color:"var(--link)"}},[t._v("\n "+t._s(t.$t("settings.style.preview.link"))+"\n ")])]),t._v(" "),t._m(0)],1)]),t._v(" "),s("div",{staticClass:"after-post"},[s("div",{staticClass:"avatar-alt"},[t._v("\n :^)\n ")]),t._v(" "),s("div",{staticClass:"content"},[s("i18n",{staticClass:"faint",attrs:{path:"settings.style.preview.fine_print",tag:"span"}},[s("a",{staticStyle:{color:"var(--faintLink)"}},[t._v("\n "+t._s(t.$t("settings.style.preview.faint_link"))+"\n ")])])],1)]),t._v(" "),s("div",{staticClass:"separator"}),t._v(" "),s("span",{staticClass:"alert error"},[t._v("\n "+t._s(t.$t("settings.style.preview.error"))+"\n ")]),t._v(" "),s("input",{attrs:{type:"text"},domProps:{value:t.$t("settings.style.preview.input")}}),t._v(" "),s("div",{staticClass:"actions"},[s("span",{staticClass:"checkbox"},[s("input",{attrs:{id:"preview_checkbox",checked:"very yes",type:"checkbox"}}),t._v(" "),s("label",{attrs:{for:"preview_checkbox"}},[t._v(t._s(t.$t("settings.style.preview.checkbox")))])]),t._v(" "),s("button",{staticClass:"btn"},[t._v("\n "+t._s(t.$t("settings.style.preview.button"))+"\n ")])])])])])},[function(){var t=this.$createElement,e=this._self._c||t;return e("div",{staticClass:"icons"},[e("i",{staticClass:"button-icon icon-reply",staticStyle:{color:"var(--cBlue)"}}),this._v(" "),e("i",{staticClass:"button-icon icon-retweet",staticStyle:{color:"var(--cGreen)"}}),this._v(" "),e("i",{staticClass:"button-icon icon-star",staticStyle:{color:"var(--cOrange)"}}),this._v(" "),e("i",{staticClass:"button-icon icon-cancel",staticStyle:{color:"var(--cRed)"}})])}],!1,Se,null,null).exports;function je(t,e){var s=Object.keys(t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(t);e&&(a=a.filter(function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})),s.push.apply(s,a)}return s}function Ee(t){for(var e=1;ece.a)return t(e+"future_version_imported")+" "+t(i?e+"snapshot_missing":e+"snapshot_present");if(nce.a)return t(e+"fe_downgraded")+" "+t(i?e+"migration_snapshot_ok":e+"migration_snapshot_gone");if(n=4.5,aaa:s>=7,laa:s>=3,laaa:s>=4.5},t},{})}catch(t){console.warn("Failure computing contrasts",t)}},previewRules:function(){return this.preview.rules?[].concat(z()(Object.values(this.preview.rules)),["color: var(--text)","font-family: var(--interfaceFont, sans-serif)"]).join(";"):""},shadowsAvailable:function(){return Object.keys(re.a).sort()},currentShadowOverriden:{get:function(){return!!this.currentShadow},set:function(t){t?Object(q.set)(this.shadowsLocal,this.shadowSelected,this.currentShadowFallback.map(function(t){return Object.assign({},t)})):Object(q.delete)(this.shadowsLocal,this.shadowSelected)}},currentShadowFallback:function(){return(this.previewTheme.shadows||{})[this.shadowSelected]},currentShadow:{get:function(){return this.shadowsLocal[this.shadowSelected]},set:function(t){Object(q.set)(this.shadowsLocal,this.shadowSelected,t)}},themeValid:function(){return!this.shadowsInvalid&&!this.colorsInvalid&&!this.radiiInvalid},exportedTheme:function(){var t=!(this.keepFonts||this.keepShadows||this.keepOpacity||this.keepRoundness||this.keepColor),e={themeEngineVersion:ce.a};return(this.keepFonts||t)&&(e.fonts=this.fontsLocal),(this.keepShadows||t)&&(e.shadows=this.shadowsLocal),(this.keepOpacity||t)&&(e.opacity=this.currentOpacity),(this.keepColor||t)&&(e.colors=this.currentColors),(this.keepRoundness||t)&&(e.radii=this.currentRadii),{_pleroma_theme_version:2,theme:Ee({themeEngineVersion:ce.a},this.previewTheme),source:e}}},components:{ColorInput:pe,OpacityInput:he,RangeInput:me,ContrastRatio:Le,ShadowControl:we,FontControl:ke,TabSwitcher:a.a,Preview:Ie,ExportImport:Pe,Checkbox:d.a},methods:{loadTheme:function(t,e){var s=t.theme,a=t.source,n=t._pleroma_theme_version,o=arguments.length>2&&void 0!==arguments[2]&&arguments[2];if(this.dismissWarning(),!a&&!s)throw new Error("Can't load theme: empty");var i="localStorage"!==e||s.colors?n:"l1",r=(s||{}).themeEngineVersion,l=(a||{}).themeEngineVersion||2,c=l===ce.a,u=void 0!==s&&void 0!==a&&l!==r,d=a&&o||!s;c&&!u||d||"l1"===i||"defaults"===e||(u&&"localStorage"===e?this.themeWarning={origin:e,themeEngineVersion:l,type:"snapshot_source_mismatch"}:s?c||(this.themeWarning={origin:e,noActionsPossible:!a,themeEngineVersion:l,type:"wrong_version"}):this.themeWarning={origin:e,noActionsPossible:!0,themeEngineVersion:l,type:"no_snapshot_old_version"}),this.normalizeLocalState(s,i,a,d)},forceLoadLocalStorage:function(){this.loadThemeFromLocalStorage(!0)},dismissWarning:function(){this.themeWarning=void 0,this.tempImportFile=void 0},forceLoad:function(){switch(this.themeWarning.origin){case"localStorage":this.loadThemeFromLocalStorage(!0);break;case"file":this.onImport(this.tempImportFile,!0)}this.dismissWarning()},forceSnapshot:function(){switch(this.themeWarning.origin){case"localStorage":this.loadThemeFromLocalStorage(!1,!0);break;case"file":console.err("Forcing snapshout from file is not supported yet")}this.dismissWarning()},loadThemeFromLocalStorage:function(){var t=arguments.length>0&&void 0!==arguments[0]&&arguments[0],e=arguments.length>1&&void 0!==arguments[1]&&arguments[1],s=this.$store.getters.mergedConfig,a=s.customTheme,n=s.customThemeSource;a||n?this.loadTheme({theme:a,source:e?a:n},"localStorage",t):this.loadTheme(this.$store.state.instance.themeData,"defaults",t)},setCustomTheme:function(){this.$store.dispatch("setOption",{name:"customTheme",value:Ee({themeEngineVersion:ce.a},this.previewTheme)}),this.$store.dispatch("setOption",{name:"customThemeSource",value:{themeEngineVersion:ce.a,shadows:this.shadowsLocal,fonts:this.fontsLocal,opacity:this.currentOpacity,colors:this.currentColors,radii:this.currentRadii}})},updatePreviewColorsAndShadows:function(){this.previewColors=Object(re.e)({opacity:this.currentOpacity,colors:this.currentColors}),this.previewShadows=Object(re.h)({shadows:this.shadowsLocal,opacity:this.previewTheme.opacity,themeEngineVersion:this.engineVersion},this.previewColors.theme.colors,this.previewColors.mod)},onImport:function(t){var e=arguments.length>1&&void 0!==arguments[1]&&arguments[1];this.tempImportFile=t,this.loadTheme(t,"file",e)},importValidator:function(t){var e=t._pleroma_theme_version;return e>=1||e<=2},clearAll:function(){this.loadThemeFromLocalStorage()},clearV1:function(){var t=this;Object.keys(this.$data).filter(function(t){return t.endsWith("ColorLocal")||t.endsWith("OpacityLocal")}).filter(function(t){return!Re.includes(t)}).forEach(function(e){Object(q.set)(t.$data,e,void 0)})},clearRoundness:function(){var t=this;Object.keys(this.$data).filter(function(t){return t.endsWith("RadiusLocal")}).forEach(function(e){Object(q.set)(t.$data,e,void 0)})},clearOpacity:function(){var t=this;Object.keys(this.$data).filter(function(t){return t.endsWith("OpacityLocal")}).forEach(function(e){Object(q.set)(t.$data,e,void 0)})},clearShadows:function(){this.shadowsLocal={}},clearFonts:function(){this.fontsLocal={}},normalizeLocalState:function(t){var e,s=this,a=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,n=arguments.length>2?arguments[2]:void 0,o=arguments.length>3&&void 0!==arguments[3]&&arguments[3];void 0!==n&&(o||n.themeEngineVersion===ce.a)?(e=n,a=n.themeEngineVersion):e=t;var i=e.radii||e,r=e.opacity,l=e.shadows||{},c=e.fonts||{},u=e.themeEngineVersion?e.colors||e:Object(re.c)(e.colors||e);if(0===a&&(e.version&&(a=e.version),void 0===u.text&&void 0!==u.fg&&(a=1),void 0!==u.text&&void 0!==u.fg&&(a=2)),this.engineVersion=a,1===a&&(this.fgColorLocal=Object(ie.i)(u.btn),this.textColorLocal=Object(ie.i)(u.fg)),!this.keepColor){this.clearV1();var d=new Set(1!==a?Object.keys(le.c):[]);1!==a&&"l1"!==a||d.add("bg").add("link").add("cRed").add("cBlue").add("cGreen").add("cOrange"),d.forEach(function(t){var e=u[t],a=Object(ie.i)(u[t]);s[t+"ColorLocal"]="#aN"===a?e:a})}r&&!this.keepOpacity&&(this.clearOpacity(),Object.entries(r).forEach(function(t){var e=A()(t,2),a=e[0],n=e[1];null==n||Number.isNaN(n)||(s[a+"OpacityLocal"]=n)})),this.keepRoundness||(this.clearRoundness(),Object.entries(i).forEach(function(t){var e=A()(t,2),a=e[0],n=e[1],o=a.endsWith("Radius")?a.split("Radius")[0]:a;s[o+"RadiusLocal"]=n})),this.keepShadows||(this.clearShadows(),this.shadowsLocal=2===a?Object(re.m)(l,this.previewTheme.opacity):l,this.shadowSelected=this.shadowsAvailable[0]),this.keepFonts||(this.clearFonts(),this.fontsLocal=c)}},watch:{currentRadii:function(){try{this.previewRadii=Object(re.g)({radii:this.currentRadii}),this.radiiInvalid=!1}catch(t){this.radiiInvalid=!0,console.warn(t)}},shadowsLocal:{handler:function(){if(1!==Object.getOwnPropertyNames(this.previewColors).length)try{this.updatePreviewColorsAndShadows(),this.shadowsInvalid=!1}catch(t){this.shadowsInvalid=!0,console.warn(t)}},deep:!0},fontsLocal:{handler:function(){try{this.previewFonts=Object(re.f)({fonts:this.fontsLocal}),this.fontsInvalid=!1}catch(t){this.fontsInvalid=!0,console.warn(t)}},deep:!0},currentColors:function(){try{this.updatePreviewColorsAndShadows(),this.colorsInvalid=!1,this.shadowsInvalid=!1}catch(t){this.colorsInvalid=!0,this.shadowsInvalid=!0,console.warn(t)}},currentOpacity:function(){try{this.updatePreviewColorsAndShadows()}catch(t){console.warn(t)}},selected:function(){this.dismissWarning(),1===this.selectedVersion?(this.keepRoundness||this.clearRoundness(),this.keepShadows||this.clearShadows(),this.keepOpacity||this.clearOpacity(),this.keepColor||(this.clearV1(),this.bgColorLocal=this.selected[1],this.fgColorLocal=this.selected[2],this.textColorLocal=this.selected[3],this.linkColorLocal=this.selected[4],this.cRedColorLocal=this.selected[5],this.cGreenColorLocal=this.selected[6],this.cBlueColorLocal=this.selected[7],this.cOrangeColorLocal=this.selected[8])):this.selectedVersion>=2&&this.normalizeLocalState(this.selected.theme,2,this.selected.source)}}};var Fe=function(t){s(624)},Me=Object(o.a)(Be,function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("div",{staticClass:"theme-tab"},[s("div",{staticClass:"presets-container"},[s("div",{staticClass:"save-load"},[t.themeWarning?s("div",{staticClass:"theme-warning"},[s("div",{staticClass:"alert warning"},[t._v("\n "+t._s(t.themeWarningHelp)+"\n ")]),t._v(" "),s("div",{staticClass:"buttons"},["snapshot_source_mismatch"===t.themeWarning.type?[s("button",{staticClass:"btn",on:{click:t.forceLoad}},[t._v("\n "+t._s(t.$t("settings.style.switcher.use_source"))+"\n ")]),t._v(" "),s("button",{staticClass:"btn",on:{click:t.forceSnapshot}},[t._v("\n "+t._s(t.$t("settings.style.switcher.use_snapshot"))+"\n ")])]:t.themeWarning.noActionsPossible?[s("button",{staticClass:"btn",on:{click:t.dismissWarning}},[t._v("\n "+t._s(t.$t("general.dismiss"))+"\n ")])]:[s("button",{staticClass:"btn",on:{click:t.forceLoad}},[t._v("\n "+t._s(t.$t("settings.style.switcher.load_theme"))+"\n ")]),t._v(" "),s("button",{staticClass:"btn",on:{click:t.dismissWarning}},[t._v("\n "+t._s(t.$t("settings.style.switcher.keep_as_is"))+"\n ")])]],2)]):t._e(),t._v(" "),s("ExportImport",{attrs:{"export-object":t.exportedTheme,"export-label":t.$t("settings.export_theme"),"import-label":t.$t("settings.import_theme"),"import-failed-text":t.$t("settings.invalid_theme_imported"),"on-import":t.onImport,validator:t.importValidator}},[s("template",{slot:"before"},[s("div",{staticClass:"presets"},[t._v("\n "+t._s(t.$t("settings.presets"))+"\n "),s("label",{staticClass:"select",attrs:{for:"preset-switcher"}},[s("select",{directives:[{name:"model",rawName:"v-model",value:t.selected,expression:"selected"}],staticClass:"preset-switcher",attrs:{id:"preset-switcher"},on:{change:function(e){var s=Array.prototype.filter.call(e.target.options,function(t){return t.selected}).map(function(t){return"_value"in t?t._value:t.value});t.selected=e.target.multiple?s:s[0]}}},t._l(t.availableStyles,function(e){return s("option",{key:e.name,style:{backgroundColor:e[1]||(e.theme||e.source).colors.bg,color:e[3]||(e.theme||e.source).colors.text},domProps:{value:e}},[t._v("\n "+t._s(e[0]||e.name)+"\n ")])}),0),t._v(" "),s("i",{staticClass:"icon-down-open"})])])])],2)],1),t._v(" "),s("div",{staticClass:"save-load-options"},[s("span",{staticClass:"keep-option"},[s("Checkbox",{model:{value:t.keepColor,callback:function(e){t.keepColor=e},expression:"keepColor"}},[t._v("\n "+t._s(t.$t("settings.style.switcher.keep_color"))+"\n ")])],1),t._v(" "),s("span",{staticClass:"keep-option"},[s("Checkbox",{model:{value:t.keepShadows,callback:function(e){t.keepShadows=e},expression:"keepShadows"}},[t._v("\n "+t._s(t.$t("settings.style.switcher.keep_shadows"))+"\n ")])],1),t._v(" "),s("span",{staticClass:"keep-option"},[s("Checkbox",{model:{value:t.keepOpacity,callback:function(e){t.keepOpacity=e},expression:"keepOpacity"}},[t._v("\n "+t._s(t.$t("settings.style.switcher.keep_opacity"))+"\n ")])],1),t._v(" "),s("span",{staticClass:"keep-option"},[s("Checkbox",{model:{value:t.keepRoundness,callback:function(e){t.keepRoundness=e},expression:"keepRoundness"}},[t._v("\n "+t._s(t.$t("settings.style.switcher.keep_roundness"))+"\n ")])],1),t._v(" "),s("span",{staticClass:"keep-option"},[s("Checkbox",{model:{value:t.keepFonts,callback:function(e){t.keepFonts=e},expression:"keepFonts"}},[t._v("\n "+t._s(t.$t("settings.style.switcher.keep_fonts"))+"\n ")])],1),t._v(" "),s("p",[t._v(t._s(t.$t("settings.style.switcher.save_load_hint")))])])]),t._v(" "),s("preview",{style:t.previewRules}),t._v(" "),s("keep-alive",[s("tab-switcher",{key:"style-tweak"},[s("div",{staticClass:"color-container",attrs:{label:t.$t("settings.style.common_colors._tab_label")}},[s("div",{staticClass:"tab-header"},[s("p",[t._v(t._s(t.$t("settings.theme_help")))]),t._v(" "),s("div",{staticClass:"tab-header-buttons"},[s("button",{staticClass:"btn",on:{click:t.clearOpacity}},[t._v("\n "+t._s(t.$t("settings.style.switcher.clear_opacity"))+"\n ")]),t._v(" "),s("button",{staticClass:"btn",on:{click:t.clearV1}},[t._v("\n "+t._s(t.$t("settings.style.switcher.clear_all"))+"\n ")])])]),t._v(" "),s("p",[t._v(t._s(t.$t("settings.theme_help_v2_1")))]),t._v(" "),s("h4",[t._v(t._s(t.$t("settings.style.common_colors.main")))]),t._v(" "),s("div",{staticClass:"color-item"},[s("ColorInput",{attrs:{name:"bgColor",label:t.$t("settings.background")},model:{value:t.bgColorLocal,callback:function(e){t.bgColorLocal=e},expression:"bgColorLocal"}}),t._v(" "),s("OpacityInput",{attrs:{name:"bgOpacity",fallback:t.previewTheme.opacity.bg},model:{value:t.bgOpacityLocal,callback:function(e){t.bgOpacityLocal=e},expression:"bgOpacityLocal"}}),t._v(" "),s("ColorInput",{attrs:{name:"textColor",label:t.$t("settings.text")},model:{value:t.textColorLocal,callback:function(e){t.textColorLocal=e},expression:"textColorLocal"}}),t._v(" "),s("ContrastRatio",{attrs:{contrast:t.previewContrast.bgText}}),t._v(" "),s("ColorInput",{attrs:{name:"accentColor",fallback:t.previewTheme.colors.link,label:t.$t("settings.accent"),"show-optional-tickbox":void 0!==t.linkColorLocal},model:{value:t.accentColorLocal,callback:function(e){t.accentColorLocal=e},expression:"accentColorLocal"}}),t._v(" "),s("ColorInput",{attrs:{name:"linkColor",fallback:t.previewTheme.colors.accent,label:t.$t("settings.links"),"show-optional-tickbox":void 0!==t.accentColorLocal},model:{value:t.linkColorLocal,callback:function(e){t.linkColorLocal=e},expression:"linkColorLocal"}}),t._v(" "),s("ContrastRatio",{attrs:{contrast:t.previewContrast.bgLink}})],1),t._v(" "),s("div",{staticClass:"color-item"},[s("ColorInput",{attrs:{name:"fgColor",label:t.$t("settings.foreground")},model:{value:t.fgColorLocal,callback:function(e){t.fgColorLocal=e},expression:"fgColorLocal"}}),t._v(" "),s("ColorInput",{attrs:{name:"fgTextColor",label:t.$t("settings.text"),fallback:t.previewTheme.colors.fgText},model:{value:t.fgTextColorLocal,callback:function(e){t.fgTextColorLocal=e},expression:"fgTextColorLocal"}}),t._v(" "),s("ColorInput",{attrs:{name:"fgLinkColor",label:t.$t("settings.links"),fallback:t.previewTheme.colors.fgLink},model:{value:t.fgLinkColorLocal,callback:function(e){t.fgLinkColorLocal=e},expression:"fgLinkColorLocal"}}),t._v(" "),s("p",[t._v(t._s(t.$t("settings.style.common_colors.foreground_hint")))])],1),t._v(" "),s("h4",[t._v(t._s(t.$t("settings.style.common_colors.rgbo")))]),t._v(" "),s("div",{staticClass:"color-item"},[s("ColorInput",{attrs:{name:"cRedColor",label:t.$t("settings.cRed")},model:{value:t.cRedColorLocal,callback:function(e){t.cRedColorLocal=e},expression:"cRedColorLocal"}}),t._v(" "),s("ContrastRatio",{attrs:{contrast:t.previewContrast.bgCRed}}),t._v(" "),s("ColorInput",{attrs:{name:"cBlueColor",label:t.$t("settings.cBlue")},model:{value:t.cBlueColorLocal,callback:function(e){t.cBlueColorLocal=e},expression:"cBlueColorLocal"}}),t._v(" "),s("ContrastRatio",{attrs:{contrast:t.previewContrast.bgCBlue}})],1),t._v(" "),s("div",{staticClass:"color-item"},[s("ColorInput",{attrs:{name:"cGreenColor",label:t.$t("settings.cGreen")},model:{value:t.cGreenColorLocal,callback:function(e){t.cGreenColorLocal=e},expression:"cGreenColorLocal"}}),t._v(" "),s("ContrastRatio",{attrs:{contrast:t.previewContrast.bgCGreen}}),t._v(" "),s("ColorInput",{attrs:{name:"cOrangeColor",label:t.$t("settings.cOrange")},model:{value:t.cOrangeColorLocal,callback:function(e){t.cOrangeColorLocal=e},expression:"cOrangeColorLocal"}}),t._v(" "),s("ContrastRatio",{attrs:{contrast:t.previewContrast.bgCOrange}})],1),t._v(" "),s("p",[t._v(t._s(t.$t("settings.theme_help_v2_2")))])]),t._v(" "),s("div",{staticClass:"color-container",attrs:{label:t.$t("settings.style.advanced_colors._tab_label")}},[s("div",{staticClass:"tab-header"},[s("p",[t._v(t._s(t.$t("settings.theme_help")))]),t._v(" "),s("button",{staticClass:"btn",on:{click:t.clearOpacity}},[t._v("\n "+t._s(t.$t("settings.style.switcher.clear_opacity"))+"\n ")]),t._v(" "),s("button",{staticClass:"btn",on:{click:t.clearV1}},[t._v("\n "+t._s(t.$t("settings.style.switcher.clear_all"))+"\n ")])]),t._v(" "),s("div",{staticClass:"color-item"},[s("h4",[t._v(t._s(t.$t("settings.style.advanced_colors.post")))]),t._v(" "),s("ColorInput",{attrs:{name:"postLinkColor",fallback:t.previewTheme.colors.accent,label:t.$t("settings.links")},model:{value:t.postLinkColorLocal,callback:function(e){t.postLinkColorLocal=e},expression:"postLinkColorLocal"}}),t._v(" "),s("ContrastRatio",{attrs:{contrast:t.previewContrast.postLink}}),t._v(" "),s("ColorInput",{attrs:{name:"postGreentextColor",fallback:t.previewTheme.colors.cGreen,label:t.$t("settings.greentext")},model:{value:t.postGreentextColorLocal,callback:function(e){t.postGreentextColorLocal=e},expression:"postGreentextColorLocal"}}),t._v(" "),s("ContrastRatio",{attrs:{contrast:t.previewContrast.postGreentext}}),t._v(" "),s("h4",[t._v(t._s(t.$t("settings.style.advanced_colors.alert")))]),t._v(" "),s("ColorInput",{attrs:{name:"alertError",label:t.$t("settings.style.advanced_colors.alert_error"),fallback:t.previewTheme.colors.alertError},model:{value:t.alertErrorColorLocal,callback:function(e){t.alertErrorColorLocal=e},expression:"alertErrorColorLocal"}}),t._v(" "),s("ColorInput",{attrs:{name:"alertErrorText",label:t.$t("settings.text"),fallback:t.previewTheme.colors.alertErrorText},model:{value:t.alertErrorTextColorLocal,callback:function(e){t.alertErrorTextColorLocal=e},expression:"alertErrorTextColorLocal"}}),t._v(" "),s("ContrastRatio",{attrs:{contrast:t.previewContrast.alertErrorText,large:"true"}}),t._v(" "),s("ColorInput",{attrs:{name:"alertWarning",label:t.$t("settings.style.advanced_colors.alert_warning"),fallback:t.previewTheme.colors.alertWarning},model:{value:t.alertWarningColorLocal,callback:function(e){t.alertWarningColorLocal=e},expression:"alertWarningColorLocal"}}),t._v(" "),s("ColorInput",{attrs:{name:"alertWarningText",label:t.$t("settings.text"),fallback:t.previewTheme.colors.alertWarningText},model:{value:t.alertWarningTextColorLocal,callback:function(e){t.alertWarningTextColorLocal=e},expression:"alertWarningTextColorLocal"}}),t._v(" "),s("ContrastRatio",{attrs:{contrast:t.previewContrast.alertWarningText,large:"true"}}),t._v(" "),s("ColorInput",{attrs:{name:"alertNeutral",label:t.$t("settings.style.advanced_colors.alert_neutral"),fallback:t.previewTheme.colors.alertNeutral},model:{value:t.alertNeutralColorLocal,callback:function(e){t.alertNeutralColorLocal=e},expression:"alertNeutralColorLocal"}}),t._v(" "),s("ColorInput",{attrs:{name:"alertNeutralText",label:t.$t("settings.text"),fallback:t.previewTheme.colors.alertNeutralText},model:{value:t.alertNeutralTextColorLocal,callback:function(e){t.alertNeutralTextColorLocal=e},expression:"alertNeutralTextColorLocal"}}),t._v(" "),s("ContrastRatio",{attrs:{contrast:t.previewContrast.alertNeutralText,large:"true"}}),t._v(" "),s("OpacityInput",{attrs:{name:"alertOpacity",fallback:t.previewTheme.opacity.alert},model:{value:t.alertOpacityLocal,callback:function(e){t.alertOpacityLocal=e},expression:"alertOpacityLocal"}})],1),t._v(" "),s("div",{staticClass:"color-item"},[s("h4",[t._v(t._s(t.$t("settings.style.advanced_colors.badge")))]),t._v(" "),s("ColorInput",{attrs:{name:"badgeNotification",label:t.$t("settings.style.advanced_colors.badge_notification"),fallback:t.previewTheme.colors.badgeNotification},model:{value:t.badgeNotificationColorLocal,callback:function(e){t.badgeNotificationColorLocal=e},expression:"badgeNotificationColorLocal"}}),t._v(" "),s("ColorInput",{attrs:{name:"badgeNotificationText",label:t.$t("settings.text"),fallback:t.previewTheme.colors.badgeNotificationText},model:{value:t.badgeNotificationTextColorLocal,callback:function(e){t.badgeNotificationTextColorLocal=e},expression:"badgeNotificationTextColorLocal"}}),t._v(" "),s("ContrastRatio",{attrs:{contrast:t.previewContrast.badgeNotificationText,large:"true"}})],1),t._v(" "),s("div",{staticClass:"color-item"},[s("h4",[t._v(t._s(t.$t("settings.style.advanced_colors.panel_header")))]),t._v(" "),s("ColorInput",{attrs:{name:"panelColor",fallback:t.previewTheme.colors.panel,label:t.$t("settings.background")},model:{value:t.panelColorLocal,callback:function(e){t.panelColorLocal=e},expression:"panelColorLocal"}}),t._v(" "),s("OpacityInput",{attrs:{name:"panelOpacity",fallback:t.previewTheme.opacity.panel,disabled:"transparent"===t.panelColorLocal},model:{value:t.panelOpacityLocal,callback:function(e){t.panelOpacityLocal=e},expression:"panelOpacityLocal"}}),t._v(" "),s("ColorInput",{attrs:{name:"panelTextColor",fallback:t.previewTheme.colors.panelText,label:t.$t("settings.text")},model:{value:t.panelTextColorLocal,callback:function(e){t.panelTextColorLocal=e},expression:"panelTextColorLocal"}}),t._v(" "),s("ContrastRatio",{attrs:{contrast:t.previewContrast.panelText,large:"true"}}),t._v(" "),s("ColorInput",{attrs:{name:"panelLinkColor",fallback:t.previewTheme.colors.panelLink,label:t.$t("settings.links")},model:{value:t.panelLinkColorLocal,callback:function(e){t.panelLinkColorLocal=e},expression:"panelLinkColorLocal"}}),t._v(" "),s("ContrastRatio",{attrs:{contrast:t.previewContrast.panelLink,large:"true"}})],1),t._v(" "),s("div",{staticClass:"color-item"},[s("h4",[t._v(t._s(t.$t("settings.style.advanced_colors.top_bar")))]),t._v(" "),s("ColorInput",{attrs:{name:"topBarColor",fallback:t.previewTheme.colors.topBar,label:t.$t("settings.background")},model:{value:t.topBarColorLocal,callback:function(e){t.topBarColorLocal=e},expression:"topBarColorLocal"}}),t._v(" "),s("ColorInput",{attrs:{name:"topBarTextColor",fallback:t.previewTheme.colors.topBarText,label:t.$t("settings.text")},model:{value:t.topBarTextColorLocal,callback:function(e){t.topBarTextColorLocal=e},expression:"topBarTextColorLocal"}}),t._v(" "),s("ContrastRatio",{attrs:{contrast:t.previewContrast.topBarText}}),t._v(" "),s("ColorInput",{attrs:{name:"topBarLinkColor",fallback:t.previewTheme.colors.topBarLink,label:t.$t("settings.links")},model:{value:t.topBarLinkColorLocal,callback:function(e){t.topBarLinkColorLocal=e},expression:"topBarLinkColorLocal"}}),t._v(" "),s("ContrastRatio",{attrs:{contrast:t.previewContrast.topBarLink}})],1),t._v(" "),s("div",{staticClass:"color-item"},[s("h4",[t._v(t._s(t.$t("settings.style.advanced_colors.inputs")))]),t._v(" "),s("ColorInput",{attrs:{name:"inputColor",fallback:t.previewTheme.colors.input,label:t.$t("settings.background")},model:{value:t.inputColorLocal,callback:function(e){t.inputColorLocal=e},expression:"inputColorLocal"}}),t._v(" "),s("OpacityInput",{attrs:{name:"inputOpacity",fallback:t.previewTheme.opacity.input,disabled:"transparent"===t.inputColorLocal},model:{value:t.inputOpacityLocal,callback:function(e){t.inputOpacityLocal=e},expression:"inputOpacityLocal"}}),t._v(" "),s("ColorInput",{attrs:{name:"inputTextColor",fallback:t.previewTheme.colors.inputText,label:t.$t("settings.text")},model:{value:t.inputTextColorLocal,callback:function(e){t.inputTextColorLocal=e},expression:"inputTextColorLocal"}}),t._v(" "),s("ContrastRatio",{attrs:{contrast:t.previewContrast.inputText}})],1),t._v(" "),s("div",{staticClass:"color-item"},[s("h4",[t._v(t._s(t.$t("settings.style.advanced_colors.buttons")))]),t._v(" "),s("ColorInput",{attrs:{name:"btnColor",fallback:t.previewTheme.colors.btn,label:t.$t("settings.background")},model:{value:t.btnColorLocal,callback:function(e){t.btnColorLocal=e},expression:"btnColorLocal"}}),t._v(" "),s("OpacityInput",{attrs:{name:"btnOpacity",fallback:t.previewTheme.opacity.btn,disabled:"transparent"===t.btnColorLocal},model:{value:t.btnOpacityLocal,callback:function(e){t.btnOpacityLocal=e},expression:"btnOpacityLocal"}}),t._v(" "),s("ColorInput",{attrs:{name:"btnTextColor",fallback:t.previewTheme.colors.btnText,label:t.$t("settings.text")},model:{value:t.btnTextColorLocal,callback:function(e){t.btnTextColorLocal=e},expression:"btnTextColorLocal"}}),t._v(" "),s("ContrastRatio",{attrs:{contrast:t.previewContrast.btnText}}),t._v(" "),s("ColorInput",{attrs:{name:"btnPanelTextColor",fallback:t.previewTheme.colors.btnPanelText,label:t.$t("settings.style.advanced_colors.panel_header")},model:{value:t.btnPanelTextColorLocal,callback:function(e){t.btnPanelTextColorLocal=e},expression:"btnPanelTextColorLocal"}}),t._v(" "),s("ContrastRatio",{attrs:{contrast:t.previewContrast.btnPanelText}}),t._v(" "),s("ColorInput",{attrs:{name:"btnTopBarTextColor",fallback:t.previewTheme.colors.btnTopBarText,label:t.$t("settings.style.advanced_colors.top_bar")},model:{value:t.btnTopBarTextColorLocal,callback:function(e){t.btnTopBarTextColorLocal=e},expression:"btnTopBarTextColorLocal"}}),t._v(" "),s("ContrastRatio",{attrs:{contrast:t.previewContrast.btnTopBarText}}),t._v(" "),s("h5",[t._v(t._s(t.$t("settings.style.advanced_colors.pressed")))]),t._v(" "),s("ColorInput",{attrs:{name:"btnPressedColor",fallback:t.previewTheme.colors.btnPressed,label:t.$t("settings.background")},model:{value:t.btnPressedColorLocal,callback:function(e){t.btnPressedColorLocal=e},expression:"btnPressedColorLocal"}}),t._v(" "),s("ColorInput",{attrs:{name:"btnPressedTextColor",fallback:t.previewTheme.colors.btnPressedText,label:t.$t("settings.text")},model:{value:t.btnPressedTextColorLocal,callback:function(e){t.btnPressedTextColorLocal=e},expression:"btnPressedTextColorLocal"}}),t._v(" "),s("ContrastRatio",{attrs:{contrast:t.previewContrast.btnPressedText}}),t._v(" "),s("ColorInput",{attrs:{name:"btnPressedPanelTextColor",fallback:t.previewTheme.colors.btnPressedPanelText,label:t.$t("settings.style.advanced_colors.panel_header")},model:{value:t.btnPressedPanelTextColorLocal,callback:function(e){t.btnPressedPanelTextColorLocal=e},expression:"btnPressedPanelTextColorLocal"}}),t._v(" "),s("ContrastRatio",{attrs:{contrast:t.previewContrast.btnPressedPanelText}}),t._v(" "),s("ColorInput",{attrs:{name:"btnPressedTopBarTextColor",fallback:t.previewTheme.colors.btnPressedTopBarText,label:t.$t("settings.style.advanced_colors.top_bar")},model:{value:t.btnPressedTopBarTextColorLocal,callback:function(e){t.btnPressedTopBarTextColorLocal=e},expression:"btnPressedTopBarTextColorLocal"}}),t._v(" "),s("ContrastRatio",{attrs:{contrast:t.previewContrast.btnPressedTopBarText}}),t._v(" "),s("h5",[t._v(t._s(t.$t("settings.style.advanced_colors.disabled")))]),t._v(" "),s("ColorInput",{attrs:{name:"btnDisabledColor",fallback:t.previewTheme.colors.btnDisabled,label:t.$t("settings.background")},model:{value:t.btnDisabledColorLocal,callback:function(e){t.btnDisabledColorLocal=e},expression:"btnDisabledColorLocal"}}),t._v(" "),s("ColorInput",{attrs:{name:"btnDisabledTextColor",fallback:t.previewTheme.colors.btnDisabledText,label:t.$t("settings.text")},model:{value:t.btnDisabledTextColorLocal,callback:function(e){t.btnDisabledTextColorLocal=e},expression:"btnDisabledTextColorLocal"}}),t._v(" "),s("ColorInput",{attrs:{name:"btnDisabledPanelTextColor",fallback:t.previewTheme.colors.btnDisabledPanelText,label:t.$t("settings.style.advanced_colors.panel_header")},model:{value:t.btnDisabledPanelTextColorLocal,callback:function(e){t.btnDisabledPanelTextColorLocal=e},expression:"btnDisabledPanelTextColorLocal"}}),t._v(" "),s("ColorInput",{attrs:{name:"btnDisabledTopBarTextColor",fallback:t.previewTheme.colors.btnDisabledTopBarText,label:t.$t("settings.style.advanced_colors.top_bar")},model:{value:t.btnDisabledTopBarTextColorLocal,callback:function(e){t.btnDisabledTopBarTextColorLocal=e},expression:"btnDisabledTopBarTextColorLocal"}}),t._v(" "),s("h5",[t._v(t._s(t.$t("settings.style.advanced_colors.toggled")))]),t._v(" "),s("ColorInput",{attrs:{name:"btnToggledColor",fallback:t.previewTheme.colors.btnToggled,label:t.$t("settings.background")},model:{value:t.btnToggledColorLocal,callback:function(e){t.btnToggledColorLocal=e},expression:"btnToggledColorLocal"}}),t._v(" "),s("ColorInput",{attrs:{name:"btnToggledTextColor",fallback:t.previewTheme.colors.btnToggledText,label:t.$t("settings.text")},model:{value:t.btnToggledTextColorLocal,callback:function(e){t.btnToggledTextColorLocal=e},expression:"btnToggledTextColorLocal"}}),t._v(" "),s("ContrastRatio",{attrs:{contrast:t.previewContrast.btnToggledText}}),t._v(" "),s("ColorInput",{attrs:{name:"btnToggledPanelTextColor",fallback:t.previewTheme.colors.btnToggledPanelText,label:t.$t("settings.style.advanced_colors.panel_header")},model:{value:t.btnToggledPanelTextColorLocal,callback:function(e){t.btnToggledPanelTextColorLocal=e},expression:"btnToggledPanelTextColorLocal"}}),t._v(" "),s("ContrastRatio",{attrs:{contrast:t.previewContrast.btnToggledPanelText}}),t._v(" "),s("ColorInput",{attrs:{name:"btnToggledTopBarTextColor",fallback:t.previewTheme.colors.btnToggledTopBarText,label:t.$t("settings.style.advanced_colors.top_bar")},model:{value:t.btnToggledTopBarTextColorLocal,callback:function(e){t.btnToggledTopBarTextColorLocal=e},expression:"btnToggledTopBarTextColorLocal"}}),t._v(" "),s("ContrastRatio",{attrs:{contrast:t.previewContrast.btnToggledTopBarText}})],1),t._v(" "),s("div",{staticClass:"color-item"},[s("h4",[t._v(t._s(t.$t("settings.style.advanced_colors.tabs")))]),t._v(" "),s("ColorInput",{attrs:{name:"tabColor",fallback:t.previewTheme.colors.tab,label:t.$t("settings.background")},model:{value:t.tabColorLocal,callback:function(e){t.tabColorLocal=e},expression:"tabColorLocal"}}),t._v(" "),s("ColorInput",{attrs:{name:"tabTextColor",fallback:t.previewTheme.colors.tabText,label:t.$t("settings.text")},model:{value:t.tabTextColorLocal,callback:function(e){t.tabTextColorLocal=e},expression:"tabTextColorLocal"}}),t._v(" "),s("ContrastRatio",{attrs:{contrast:t.previewContrast.tabText}}),t._v(" "),s("ColorInput",{attrs:{name:"tabActiveTextColor",fallback:t.previewTheme.colors.tabActiveText,label:t.$t("settings.text")},model:{value:t.tabActiveTextColorLocal,callback:function(e){t.tabActiveTextColorLocal=e},expression:"tabActiveTextColorLocal"}}),t._v(" "),s("ContrastRatio",{attrs:{contrast:t.previewContrast.tabActiveText}})],1),t._v(" "),s("div",{staticClass:"color-item"},[s("h4",[t._v(t._s(t.$t("settings.style.advanced_colors.borders")))]),t._v(" "),s("ColorInput",{attrs:{name:"borderColor",fallback:t.previewTheme.colors.border,label:t.$t("settings.style.common.color")},model:{value:t.borderColorLocal,callback:function(e){t.borderColorLocal=e},expression:"borderColorLocal"}}),t._v(" "),s("OpacityInput",{attrs:{name:"borderOpacity",fallback:t.previewTheme.opacity.border,disabled:"transparent"===t.borderColorLocal},model:{value:t.borderOpacityLocal,callback:function(e){t.borderOpacityLocal=e},expression:"borderOpacityLocal"}})],1),t._v(" "),s("div",{staticClass:"color-item"},[s("h4",[t._v(t._s(t.$t("settings.style.advanced_colors.faint_text")))]),t._v(" "),s("ColorInput",{attrs:{name:"faintColor",fallback:t.previewTheme.colors.faint,label:t.$t("settings.text")},model:{value:t.faintColorLocal,callback:function(e){t.faintColorLocal=e},expression:"faintColorLocal"}}),t._v(" "),s("ColorInput",{attrs:{name:"faintLinkColor",fallback:t.previewTheme.colors.faintLink,label:t.$t("settings.links")},model:{value:t.faintLinkColorLocal,callback:function(e){t.faintLinkColorLocal=e},expression:"faintLinkColorLocal"}}),t._v(" "),s("ColorInput",{attrs:{name:"panelFaintColor",fallback:t.previewTheme.colors.panelFaint,label:t.$t("settings.style.advanced_colors.panel_header")},model:{value:t.panelFaintColorLocal,callback:function(e){t.panelFaintColorLocal=e},expression:"panelFaintColorLocal"}}),t._v(" "),s("OpacityInput",{attrs:{name:"faintOpacity",fallback:t.previewTheme.opacity.faint},model:{value:t.faintOpacityLocal,callback:function(e){t.faintOpacityLocal=e},expression:"faintOpacityLocal"}})],1),t._v(" "),s("div",{staticClass:"color-item"},[s("h4",[t._v(t._s(t.$t("settings.style.advanced_colors.underlay")))]),t._v(" "),s("ColorInput",{attrs:{name:"underlay",label:t.$t("settings.style.advanced_colors.underlay"),fallback:t.previewTheme.colors.underlay},model:{value:t.underlayColorLocal,callback:function(e){t.underlayColorLocal=e},expression:"underlayColorLocal"}}),t._v(" "),s("OpacityInput",{attrs:{name:"underlayOpacity",fallback:t.previewTheme.opacity.underlay,disabled:"transparent"===t.underlayOpacityLocal},model:{value:t.underlayOpacityLocal,callback:function(e){t.underlayOpacityLocal=e},expression:"underlayOpacityLocal"}})],1),t._v(" "),s("div",{staticClass:"color-item"},[s("h4",[t._v(t._s(t.$t("settings.style.advanced_colors.poll")))]),t._v(" "),s("ColorInput",{attrs:{name:"poll",label:t.$t("settings.background"),fallback:t.previewTheme.colors.poll},model:{value:t.pollColorLocal,callback:function(e){t.pollColorLocal=e},expression:"pollColorLocal"}}),t._v(" "),s("ColorInput",{attrs:{name:"pollText",label:t.$t("settings.text"),fallback:t.previewTheme.colors.pollText},model:{value:t.pollTextColorLocal,callback:function(e){t.pollTextColorLocal=e},expression:"pollTextColorLocal"}})],1),t._v(" "),s("div",{staticClass:"color-item"},[s("h4",[t._v(t._s(t.$t("settings.style.advanced_colors.icons")))]),t._v(" "),s("ColorInput",{attrs:{name:"icon",label:t.$t("settings.style.advanced_colors.icons"),fallback:t.previewTheme.colors.icon},model:{value:t.iconColorLocal,callback:function(e){t.iconColorLocal=e},expression:"iconColorLocal"}})],1),t._v(" "),s("div",{staticClass:"color-item"},[s("h4",[t._v(t._s(t.$t("settings.style.advanced_colors.highlight")))]),t._v(" "),s("ColorInput",{attrs:{name:"highlight",label:t.$t("settings.background"),fallback:t.previewTheme.colors.highlight},model:{value:t.highlightColorLocal,callback:function(e){t.highlightColorLocal=e},expression:"highlightColorLocal"}}),t._v(" "),s("ColorInput",{attrs:{name:"highlightText",label:t.$t("settings.text"),fallback:t.previewTheme.colors.highlightText},model:{value:t.highlightTextColorLocal,callback:function(e){t.highlightTextColorLocal=e},expression:"highlightTextColorLocal"}}),t._v(" "),s("ContrastRatio",{attrs:{contrast:t.previewContrast.highlightText}}),t._v(" "),s("ColorInput",{attrs:{name:"highlightLink",label:t.$t("settings.links"),fallback:t.previewTheme.colors.highlightLink},model:{value:t.highlightLinkColorLocal,callback:function(e){t.highlightLinkColorLocal=e},expression:"highlightLinkColorLocal"}}),t._v(" "),s("ContrastRatio",{attrs:{contrast:t.previewContrast.highlightLink}})],1),t._v(" "),s("div",{staticClass:"color-item"},[s("h4",[t._v(t._s(t.$t("settings.style.advanced_colors.popover")))]),t._v(" "),s("ColorInput",{attrs:{name:"popover",label:t.$t("settings.background"),fallback:t.previewTheme.colors.popover},model:{value:t.popoverColorLocal,callback:function(e){t.popoverColorLocal=e},expression:"popoverColorLocal"}}),t._v(" "),s("OpacityInput",{attrs:{name:"popoverOpacity",fallback:t.previewTheme.opacity.popover,disabled:"transparent"===t.popoverOpacityLocal},model:{value:t.popoverOpacityLocal,callback:function(e){t.popoverOpacityLocal=e},expression:"popoverOpacityLocal"}}),t._v(" "),s("ColorInput",{attrs:{name:"popoverText",label:t.$t("settings.text"),fallback:t.previewTheme.colors.popoverText},model:{value:t.popoverTextColorLocal,callback:function(e){t.popoverTextColorLocal=e},expression:"popoverTextColorLocal"}}),t._v(" "),s("ContrastRatio",{attrs:{contrast:t.previewContrast.popoverText}}),t._v(" "),s("ColorInput",{attrs:{name:"popoverLink",label:t.$t("settings.links"),fallback:t.previewTheme.colors.popoverLink},model:{value:t.popoverLinkColorLocal,callback:function(e){t.popoverLinkColorLocal=e},expression:"popoverLinkColorLocal"}}),t._v(" "),s("ContrastRatio",{attrs:{contrast:t.previewContrast.popoverLink}})],1),t._v(" "),s("div",{staticClass:"color-item"},[s("h4",[t._v(t._s(t.$t("settings.style.advanced_colors.selectedPost")))]),t._v(" "),s("ColorInput",{attrs:{name:"selectedPost",label:t.$t("settings.background"),fallback:t.previewTheme.colors.selectedPost},model:{value:t.selectedPostColorLocal,callback:function(e){t.selectedPostColorLocal=e},expression:"selectedPostColorLocal"}}),t._v(" "),s("ColorInput",{attrs:{name:"selectedPostText",label:t.$t("settings.text"),fallback:t.previewTheme.colors.selectedPostText},model:{value:t.selectedPostTextColorLocal,callback:function(e){t.selectedPostTextColorLocal=e},expression:"selectedPostTextColorLocal"}}),t._v(" "),s("ContrastRatio",{attrs:{contrast:t.previewContrast.selectedPostText}}),t._v(" "),s("ColorInput",{attrs:{name:"selectedPostLink",label:t.$t("settings.links"),fallback:t.previewTheme.colors.selectedPostLink},model:{value:t.selectedPostLinkColorLocal,callback:function(e){t.selectedPostLinkColorLocal=e},expression:"selectedPostLinkColorLocal"}}),t._v(" "),s("ContrastRatio",{attrs:{contrast:t.previewContrast.selectedPostLink}})],1),t._v(" "),s("div",{staticClass:"color-item"},[s("h4",[t._v(t._s(t.$t("settings.style.advanced_colors.selectedMenu")))]),t._v(" "),s("ColorInput",{attrs:{name:"selectedMenu",label:t.$t("settings.background"),fallback:t.previewTheme.colors.selectedMenu},model:{value:t.selectedMenuColorLocal,callback:function(e){t.selectedMenuColorLocal=e},expression:"selectedMenuColorLocal"}}),t._v(" "),s("ColorInput",{attrs:{name:"selectedMenuText",label:t.$t("settings.text"),fallback:t.previewTheme.colors.selectedMenuText},model:{value:t.selectedMenuTextColorLocal,callback:function(e){t.selectedMenuTextColorLocal=e},expression:"selectedMenuTextColorLocal"}}),t._v(" "),s("ContrastRatio",{attrs:{contrast:t.previewContrast.selectedMenuText}}),t._v(" "),s("ColorInput",{attrs:{name:"selectedMenuLink",label:t.$t("settings.links"),fallback:t.previewTheme.colors.selectedMenuLink},model:{value:t.selectedMenuLinkColorLocal,callback:function(e){t.selectedMenuLinkColorLocal=e},expression:"selectedMenuLinkColorLocal"}}),t._v(" "),s("ContrastRatio",{attrs:{contrast:t.previewContrast.selectedMenuLink}})],1),t._v(" "),s("div",{staticClass:"color-item"},[s("h4",[t._v(t._s(t.$t("chats.chats")))]),t._v(" "),s("ColorInput",{attrs:{name:"chatBgColor",fallback:t.previewTheme.colors.bg||1,label:t.$t("settings.background")},model:{value:t.chatBgColorLocal,callback:function(e){t.chatBgColorLocal=e},expression:"chatBgColorLocal"}}),t._v(" "),s("h5",[t._v(t._s(t.$t("settings.style.advanced_colors.chat.incoming")))]),t._v(" "),s("ColorInput",{attrs:{name:"chatMessageIncomingBgColor",fallback:t.previewTheme.colors.bg||1,label:t.$t("settings.background")},model:{value:t.chatMessageIncomingBgColorLocal,callback:function(e){t.chatMessageIncomingBgColorLocal=e},expression:"chatMessageIncomingBgColorLocal"}}),t._v(" "),s("ColorInput",{attrs:{name:"chatMessageIncomingTextColor",fallback:t.previewTheme.colors.text||1,label:t.$t("settings.text")},model:{value:t.chatMessageIncomingTextColorLocal,callback:function(e){t.chatMessageIncomingTextColorLocal=e},expression:"chatMessageIncomingTextColorLocal"}}),t._v(" "),s("ColorInput",{attrs:{name:"chatMessageIncomingLinkColor",fallback:t.previewTheme.colors.link||1,label:t.$t("settings.links")},model:{value:t.chatMessageIncomingLinkColorLocal,callback:function(e){t.chatMessageIncomingLinkColorLocal=e},expression:"chatMessageIncomingLinkColorLocal"}}),t._v(" "),s("ColorInput",{attrs:{name:"chatMessageIncomingBorderLinkColor",fallback:t.previewTheme.colors.fg||1,label:t.$t("settings.style.advanced_colors.chat.border")},model:{value:t.chatMessageIncomingBorderColorLocal,callback:function(e){t.chatMessageIncomingBorderColorLocal=e},expression:"chatMessageIncomingBorderColorLocal"}}),t._v(" "),s("h5",[t._v(t._s(t.$t("settings.style.advanced_colors.chat.outgoing")))]),t._v(" "),s("ColorInput",{attrs:{name:"chatMessageOutgoingBgColor",fallback:t.previewTheme.colors.bg||1,label:t.$t("settings.background")},model:{value:t.chatMessageOutgoingBgColorLocal,callback:function(e){t.chatMessageOutgoingBgColorLocal=e},expression:"chatMessageOutgoingBgColorLocal"}}),t._v(" "),s("ColorInput",{attrs:{name:"chatMessageOutgoingTextColor",fallback:t.previewTheme.colors.text||1,label:t.$t("settings.text")},model:{value:t.chatMessageOutgoingTextColorLocal,callback:function(e){t.chatMessageOutgoingTextColorLocal=e},expression:"chatMessageOutgoingTextColorLocal"}}),t._v(" "),s("ColorInput",{attrs:{name:"chatMessageOutgoingLinkColor",fallback:t.previewTheme.colors.link||1,label:t.$t("settings.links")},model:{value:t.chatMessageOutgoingLinkColorLocal,callback:function(e){t.chatMessageOutgoingLinkColorLocal=e},expression:"chatMessageOutgoingLinkColorLocal"}}),t._v(" "),s("ColorInput",{attrs:{name:"chatMessageOutgoingBorderLinkColor",fallback:t.previewTheme.colors.bg||1,label:t.$t("settings.style.advanced_colors.chat.border")},model:{value:t.chatMessageOutgoingBorderColorLocal,callback:function(e){t.chatMessageOutgoingBorderColorLocal=e},expression:"chatMessageOutgoingBorderColorLocal"}})],1)]),t._v(" "),s("div",{staticClass:"radius-container",attrs:{label:t.$t("settings.style.radii._tab_label")}},[s("div",{staticClass:"tab-header"},[s("p",[t._v(t._s(t.$t("settings.radii_help")))]),t._v(" "),s("button",{staticClass:"btn",on:{click:t.clearRoundness}},[t._v("\n "+t._s(t.$t("settings.style.switcher.clear_all"))+"\n ")])]),t._v(" "),s("RangeInput",{attrs:{name:"btnRadius",label:t.$t("settings.btnRadius"),fallback:t.previewTheme.radii.btn,max:"16","hard-min":"0"},model:{value:t.btnRadiusLocal,callback:function(e){t.btnRadiusLocal=e},expression:"btnRadiusLocal"}}),t._v(" "),s("RangeInput",{attrs:{name:"inputRadius",label:t.$t("settings.inputRadius"),fallback:t.previewTheme.radii.input,max:"9","hard-min":"0"},model:{value:t.inputRadiusLocal,callback:function(e){t.inputRadiusLocal=e},expression:"inputRadiusLocal"}}),t._v(" "),s("RangeInput",{attrs:{name:"checkboxRadius",label:t.$t("settings.checkboxRadius"),fallback:t.previewTheme.radii.checkbox,max:"16","hard-min":"0"},model:{value:t.checkboxRadiusLocal,callback:function(e){t.checkboxRadiusLocal=e},expression:"checkboxRadiusLocal"}}),t._v(" "),s("RangeInput",{attrs:{name:"panelRadius",label:t.$t("settings.panelRadius"),fallback:t.previewTheme.radii.panel,max:"50","hard-min":"0"},model:{value:t.panelRadiusLocal,callback:function(e){t.panelRadiusLocal=e},expression:"panelRadiusLocal"}}),t._v(" "),s("RangeInput",{attrs:{name:"avatarRadius",label:t.$t("settings.avatarRadius"),fallback:t.previewTheme.radii.avatar,max:"28","hard-min":"0"},model:{value:t.avatarRadiusLocal,callback:function(e){t.avatarRadiusLocal=e},expression:"avatarRadiusLocal"}}),t._v(" "),s("RangeInput",{attrs:{name:"avatarAltRadius",label:t.$t("settings.avatarAltRadius"),fallback:t.previewTheme.radii.avatarAlt,max:"28","hard-min":"0"},model:{value:t.avatarAltRadiusLocal,callback:function(e){t.avatarAltRadiusLocal=e},expression:"avatarAltRadiusLocal"}}),t._v(" "),s("RangeInput",{attrs:{name:"attachmentRadius",label:t.$t("settings.attachmentRadius"),fallback:t.previewTheme.radii.attachment,max:"50","hard-min":"0"},model:{value:t.attachmentRadiusLocal,callback:function(e){t.attachmentRadiusLocal=e},expression:"attachmentRadiusLocal"}}),t._v(" "),s("RangeInput",{attrs:{name:"tooltipRadius",label:t.$t("settings.tooltipRadius"),fallback:t.previewTheme.radii.tooltip,max:"50","hard-min":"0"},model:{value:t.tooltipRadiusLocal,callback:function(e){t.tooltipRadiusLocal=e},expression:"tooltipRadiusLocal"}}),t._v(" "),s("RangeInput",{attrs:{name:"chatMessageRadius",label:t.$t("settings.chatMessageRadius"),fallback:t.previewTheme.radii.chatMessage||2,max:"50","hard-min":"0"},model:{value:t.chatMessageRadiusLocal,callback:function(e){t.chatMessageRadiusLocal=e},expression:"chatMessageRadiusLocal"}})],1),t._v(" "),s("div",{staticClass:"shadow-container",attrs:{label:t.$t("settings.style.shadows._tab_label")}},[s("div",{staticClass:"tab-header shadow-selector"},[s("div",{staticClass:"select-container"},[t._v("\n "+t._s(t.$t("settings.style.shadows.component"))+"\n "),s("label",{staticClass:"select",attrs:{for:"shadow-switcher"}},[s("select",{directives:[{name:"model",rawName:"v-model",value:t.shadowSelected,expression:"shadowSelected"}],staticClass:"shadow-switcher",attrs:{id:"shadow-switcher"},on:{change:function(e){var s=Array.prototype.filter.call(e.target.options,function(t){return t.selected}).map(function(t){return"_value"in t?t._value:t.value});t.shadowSelected=e.target.multiple?s:s[0]}}},t._l(t.shadowsAvailable,function(e){return s("option",{key:e,domProps:{value:e}},[t._v("\n "+t._s(t.$t("settings.style.shadows.components."+e))+"\n ")])}),0),t._v(" "),s("i",{staticClass:"icon-down-open"})])]),t._v(" "),s("div",{staticClass:"override"},[s("label",{staticClass:"label",attrs:{for:"override"}},[t._v("\n "+t._s(t.$t("settings.style.shadows.override"))+"\n ")]),t._v(" "),s("input",{directives:[{name:"model",rawName:"v-model",value:t.currentShadowOverriden,expression:"currentShadowOverriden"}],staticClass:"input-override",attrs:{id:"override",name:"override",type:"checkbox"},domProps:{checked:Array.isArray(t.currentShadowOverriden)?t._i(t.currentShadowOverriden,null)>-1:t.currentShadowOverriden},on:{change:function(e){var s=t.currentShadowOverriden,a=e.target,n=!!a.checked;if(Array.isArray(s)){var o=t._i(s,null);a.checked?o<0&&(t.currentShadowOverriden=s.concat([null])):o>-1&&(t.currentShadowOverriden=s.slice(0,o).concat(s.slice(o+1)))}else t.currentShadowOverriden=n}}}),t._v(" "),s("label",{staticClass:"checkbox-label",attrs:{for:"override"}})]),t._v(" "),s("button",{staticClass:"btn",on:{click:t.clearShadows}},[t._v("\n "+t._s(t.$t("settings.style.switcher.clear_all"))+"\n ")])]),t._v(" "),s("ShadowControl",{attrs:{ready:!!t.currentShadowFallback,fallback:t.currentShadowFallback},model:{value:t.currentShadow,callback:function(e){t.currentShadow=e},expression:"currentShadow"}}),t._v(" "),"avatar"===t.shadowSelected||"avatarStatus"===t.shadowSelected?s("div",[s("i18n",{attrs:{path:"settings.style.shadows.filter_hint.always_drop_shadow",tag:"p"}},[s("code",[t._v("filter: drop-shadow()")])]),t._v(" "),s("p",[t._v(t._s(t.$t("settings.style.shadows.filter_hint.avatar_inset")))]),t._v(" "),s("i18n",{attrs:{path:"settings.style.shadows.filter_hint.drop_shadow_syntax",tag:"p"}},[s("code",[t._v("drop-shadow")]),t._v(" "),s("code",[t._v("spread-radius")]),t._v(" "),s("code",[t._v("inset")])]),t._v(" "),s("i18n",{attrs:{path:"settings.style.shadows.filter_hint.inset_classic",tag:"p"}},[s("code",[t._v("box-shadow")])]),t._v(" "),s("p",[t._v(t._s(t.$t("settings.style.shadows.filter_hint.spread_zero")))])],1):t._e()],1),t._v(" "),s("div",{staticClass:"fonts-container",attrs:{label:t.$t("settings.style.fonts._tab_label")}},[s("div",{staticClass:"tab-header"},[s("p",[t._v(t._s(t.$t("settings.style.fonts.help")))]),t._v(" "),s("button",{staticClass:"btn",on:{click:t.clearFonts}},[t._v("\n "+t._s(t.$t("settings.style.switcher.clear_all"))+"\n ")])]),t._v(" "),s("FontControl",{attrs:{name:"ui",label:t.$t("settings.style.fonts.components.interface"),fallback:t.previewTheme.fonts.interface,"no-inherit":"1"},model:{value:t.fontsLocal.interface,callback:function(e){t.$set(t.fontsLocal,"interface",e)},expression:"fontsLocal.interface"}}),t._v(" "),s("FontControl",{attrs:{name:"input",label:t.$t("settings.style.fonts.components.input"),fallback:t.previewTheme.fonts.input},model:{value:t.fontsLocal.input,callback:function(e){t.$set(t.fontsLocal,"input",e)},expression:"fontsLocal.input"}}),t._v(" "),s("FontControl",{attrs:{name:"post",label:t.$t("settings.style.fonts.components.post"),fallback:t.previewTheme.fonts.post},model:{value:t.fontsLocal.post,callback:function(e){t.$set(t.fontsLocal,"post",e)},expression:"fontsLocal.post"}}),t._v(" "),s("FontControl",{attrs:{name:"postCode",label:t.$t("settings.style.fonts.components.postCode"),fallback:t.previewTheme.fonts.postCode},model:{value:t.fontsLocal.postCode,callback:function(e){t.$set(t.fontsLocal,"postCode",e)},expression:"fontsLocal.postCode"}})],1)])],1),t._v(" "),s("div",{staticClass:"apply-container"},[s("button",{staticClass:"btn submit",attrs:{disabled:!t.themeValid},on:{click:t.setCustomTheme}},[t._v("\n "+t._s(t.$t("general.apply"))+"\n ")]),t._v(" "),s("button",{staticClass:"btn",on:{click:t.clearAll}},[t._v("\n "+t._s(t.$t("settings.style.switcher.reset"))+"\n ")])])],1)},[],!1,Fe,null,null).exports,Ue={components:{TabSwitcher:a.a,DataImportExportTab:m,MutesAndBlocksTab:nt,NotificationsTab:it,FilteringTab:ft,SecurityTab:Et,ProfileTab:Qt,GeneralTab:ae,VersionTab:oe,ThemeTab:Me},computed:{isLoggedIn:function(){return!!this.$store.state.users.currentUser},open:function(){return"hidden"!==this.$store.state.interface.settingsModalState}},methods:{onOpen:function(){var t=this.$store.state.interface.settingsModalTargetTab;if(t){var e=this.$refs.tabSwitcher.$slots.default.findIndex(function(e){return e.data&&e.data.attrs["data-tab-name"]===t});e>=0&&this.$refs.tabSwitcher.setTab(e)}this.$store.dispatch("clearSettingsModalTargetTab")}},mounted:function(){this.onOpen()},watch:{open:function(t){t&&this.onOpen()}}};var Ve=function(t){s(591)},Ae=Object(o.a)(Ue,function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("tab-switcher",{ref:"tabSwitcher",staticClass:"settings_tab-switcher",attrs:{"side-tab-bar":!0,"scrollable-tabs":!0}},[s("div",{attrs:{label:t.$t("settings.general"),icon:"wrench","data-tab-name":"general"}},[s("GeneralTab")],1),t._v(" "),t.isLoggedIn?s("div",{attrs:{label:t.$t("settings.profile_tab"),icon:"user","data-tab-name":"profile"}},[s("ProfileTab")],1):t._e(),t._v(" "),t.isLoggedIn?s("div",{attrs:{label:t.$t("settings.security_tab"),icon:"lock","data-tab-name":"security"}},[s("SecurityTab")],1):t._e(),t._v(" "),s("div",{attrs:{label:t.$t("settings.filtering"),icon:"filter","data-tab-name":"filtering"}},[s("FilteringTab")],1),t._v(" "),s("div",{attrs:{label:t.$t("settings.theme"),icon:"brush","data-tab-name":"theme"}},[s("ThemeTab")],1),t._v(" "),t.isLoggedIn?s("div",{attrs:{label:t.$t("settings.notifications"),icon:"bell-ringing-o","data-tab-name":"notifications"}},[s("NotificationsTab")],1):t._e(),t._v(" "),t.isLoggedIn?s("div",{attrs:{label:t.$t("settings.data_import_export_tab"),icon:"download","data-tab-name":"dataImportExport"}},[s("DataImportExportTab")],1):t._e(),t._v(" "),t.isLoggedIn?s("div",{attrs:{label:t.$t("settings.mutes_and_blocks"),fullHeight:!0,icon:"eye-off","data-tab-name":"mutesAndBlocks"}},[s("MutesAndBlocksTab")],1):t._e(),t._v(" "),s("div",{attrs:{label:t.$t("settings.version.title"),icon:"info-circled","data-tab-name":"version"}},[s("VersionTab")],1)])},[],!1,Ve,null,null);e.default=Ae.exports}}]); -//# sourceMappingURL=2.c92f4803ff24726cea58.js.map \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[2],{591:function(t,e,s){var a=s(592);"string"==typeof a&&(a=[[t.i,a,""]]),a.locals&&(t.exports=a.locals);(0,s(5).default)("a45e17ec",a,!0,{})},592:function(t,e,s){(t.exports=s(4)(!1)).push([t.i,".settings_tab-switcher{height:100%}.settings_tab-switcher .setting-item{border-bottom:2px solid var(--fg,#182230);margin:1em 1em 1.4em;padding-bottom:1.4em}.settings_tab-switcher .setting-item>div{margin-bottom:.5em}.settings_tab-switcher .setting-item>div:last-child{margin-bottom:0}.settings_tab-switcher .setting-item:last-child{border-bottom:none;padding-bottom:0;margin-bottom:1em}.settings_tab-switcher .setting-item select{min-width:10em}.settings_tab-switcher .setting-item textarea{width:100%;max-width:100%;height:100px}.settings_tab-switcher .setting-item .unavailable,.settings_tab-switcher .setting-item .unavailable i{color:var(--cRed,red);color:red}.settings_tab-switcher .setting-item .number-input{max-width:6em}",""])},593:function(t,e,s){var a=s(594);"string"==typeof a&&(a=[[t.i,a,""]]),a.locals&&(t.exports=a.locals);(0,s(5).default)("5bed876c",a,!0,{})},594:function(t,e,s){(t.exports=s(4)(!1)).push([t.i,".importer-uploading{font-size:1.5em;margin:.25em}",""])},595:function(t,e,s){var a=s(596);"string"==typeof a&&(a=[[t.i,a,""]]),a.locals&&(t.exports=a.locals);(0,s(5).default)("432fc7c6",a,!0,{})},596:function(t,e,s){(t.exports=s(4)(!1)).push([t.i,".exporter-processing{font-size:1.5em;margin:.25em}",""])},597:function(t,e,s){var a=s(598);"string"==typeof a&&(a=[[t.i,a,""]]),a.locals&&(t.exports=a.locals);(0,s(5).default)("33ca0d90",a,!0,{})},598:function(t,e,s){(t.exports=s(4)(!1)).push([t.i,".mutes-and-blocks-tab{height:100%}.mutes-and-blocks-tab .usersearch-wrapper{padding:1em}.mutes-and-blocks-tab .bulk-actions{text-align:right;padding:0 1em;min-height:28px}.mutes-and-blocks-tab .bulk-action-button{width:10em}.mutes-and-blocks-tab .domain-mute-form{padding:1em;display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column}.mutes-and-blocks-tab .domain-mute-button{-ms-flex-item-align:end;align-self:flex-end;margin-top:1em;width:10em}",""])},599:function(t,e,s){var a=s(600);"string"==typeof a&&(a=[[t.i,a,""]]),a.locals&&(t.exports=a.locals);(0,s(5).default)("3a9ec1bf",a,!0,{})},600:function(t,e,s){(t.exports=s(4)(!1)).push([t.i,".autosuggest{position:relative}.autosuggest-input{display:block;width:100%}.autosuggest-results{position:absolute;left:0;top:100%;right:0;max-height:400px;background-color:#121a24;background-color:var(--bg,#121a24);border-color:#222;border:1px solid var(--border,#222);border-radius:4px;border-radius:var(--inputRadius,4px);border-top-left-radius:0;border-top-right-radius:0;box-shadow:1px 1px 4px rgba(0,0,0,.6);box-shadow:var(--panelShadow);overflow-y:auto;z-index:1}",""])},601:function(t,e,s){var a=s(602);"string"==typeof a&&(a=[[t.i,a,""]]),a.locals&&(t.exports=a.locals);(0,s(5).default)("211aa67c",a,!0,{})},602:function(t,e,s){(t.exports=s(4)(!1)).push([t.i,".block-card-content-container{margin-top:.5em;text-align:right}.block-card-content-container button{width:10em}",""])},603:function(t,e,s){var a=s(604);"string"==typeof a&&(a=[[t.i,a,""]]),a.locals&&(t.exports=a.locals);(0,s(5).default)("7ea980e0",a,!0,{})},604:function(t,e,s){(t.exports=s(4)(!1)).push([t.i,".mute-card-content-container{margin-top:.5em;text-align:right}.mute-card-content-container button{width:10em}",""])},605:function(t,e,s){var a=s(606);"string"==typeof a&&(a=[[t.i,a,""]]),a.locals&&(t.exports=a.locals);(0,s(5).default)("39a942c3",a,!0,{})},606:function(t,e,s){(t.exports=s(4)(!1)).push([t.i,".domain-mute-card{-ms-flex:1 0;flex:1 0;display:-ms-flexbox;display:flex;-ms-flex-pack:justify;justify-content:space-between;-ms-flex-align:center;align-items:center;padding:.6em 1em .6em 0}.domain-mute-card-domain{margin-right:1em;overflow:hidden;text-overflow:ellipsis}.domain-mute-card button{width:10em}.autosuggest-results .domain-mute-card{padding-left:1em}",""])},607:function(t,e,s){var a=s(608);"string"==typeof a&&(a=[[t.i,a,""]]),a.locals&&(t.exports=a.locals);(0,s(5).default)("3724291e",a,!0,{})},608:function(t,e,s){(t.exports=s(4)(!1)).push([t.i,".selectable-list-item-inner{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center}.selectable-list-item-inner>*{min-width:0}.selectable-list-item-selected-inner{background-color:#151e2a;background-color:var(--selectedMenu,#151e2a);color:var(--selectedMenuText,#b9b9ba);--faint:var(--selectedMenuFaintText,$fallback--faint);--faintLink:var(--selectedMenuFaintLink,$fallback--faint);--lightText:var(--selectedMenuLightText,$fallback--lightText);--icon:var(--selectedMenuIcon,$fallback--icon)}.selectable-list-header{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;padding:.6em 0;border-bottom:2px solid;border-bottom-color:#222;border-bottom-color:var(--border,#222)}.selectable-list-header-actions{-ms-flex:1;flex:1}.selectable-list-checkbox-wrapper{padding:0 10px;-ms-flex:none;flex:none}",""])},609:function(t,e,s){},613:function(t,e,s){var a=s(614);"string"==typeof a&&(a=[[t.i,a,""]]),a.locals&&(t.exports=a.locals);(0,s(5).default)("a588473e",a,!0,{})},614:function(t,e,s){(t.exports=s(4)(!1)).push([t.i,".mfa-settings .method-item,.mfa-settings .mfa-heading{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-ms-flex-pack:justify;justify-content:space-between;-ms-flex-align:baseline;align-items:baseline}.mfa-settings .warning{color:orange;color:var(--cOrange,orange)}.mfa-settings .setup-otp{display:-ms-flexbox;display:flex;-ms-flex-pack:center;justify-content:center;-ms-flex-wrap:wrap;flex-wrap:wrap}.mfa-settings .setup-otp .qr-code{-ms-flex:1;flex:1;padding-right:10px}.mfa-settings .setup-otp .verify{-ms-flex:1;flex:1}.mfa-settings .setup-otp .error{margin:4px 0 0}.mfa-settings .setup-otp .confirm-otp-actions button{width:15em;margin-top:5px}",""])},615:function(t,e,s){var a=s(616);"string"==typeof a&&(a=[[t.i,a,""]]),a.locals&&(t.exports=a.locals);(0,s(5).default)("4065bf15",a,!0,{})},616:function(t,e,s){(t.exports=s(4)(!1)).push([t.i,".mfa-backup-codes .warning{color:orange;color:var(--cOrange,orange)}.mfa-backup-codes .backup-codes{font-family:var(--postCodeFont,monospace)}",""])},618:function(t,e,s){var a=s(619);"string"==typeof a&&(a=[[t.i,a,""]]),a.locals&&(t.exports=a.locals);(0,s(5).default)("27925ae8",a,!0,{})},619:function(t,e,s){(t.exports=s(4)(!1)).push([t.i,".profile-tab .bio{margin:0}.profile-tab .visibility-tray{padding-top:5px}.profile-tab input[type=file]{padding:5px;height:auto}.profile-tab .banner-background-preview{max-width:100%;width:300px;position:relative}.profile-tab .banner-background-preview img{width:100%}.profile-tab .uploading{font-size:1.5em;margin:.25em}.profile-tab .name-changer{width:100%}.profile-tab .current-avatar-container{position:relative;width:150px;height:150px}.profile-tab .current-avatar{display:block;width:100%;height:100%;border-radius:4px;border-radius:var(--avatarRadius,4px)}.profile-tab .reset-button{position:absolute;top:.2em;right:.2em;border-radius:5px;border-radius:var(--tooltipRadius,5px);background-color:rgba(0,0,0,.6);opacity:.7;color:#fff;width:1.5em;height:1.5em;text-align:center;line-height:1.5em;font-size:1.5em;cursor:pointer}.profile-tab .reset-button:hover{opacity:1}.profile-tab .oauth-tokens{width:100%}.profile-tab .oauth-tokens th{text-align:left}.profile-tab .oauth-tokens .actions{text-align:right}.profile-tab-usersearch-wrapper{padding:1em}.profile-tab-bulk-actions{text-align:right;padding:0 1em;min-height:28px}.profile-tab-bulk-actions button{width:10em}.profile-tab-domain-mute-form{padding:1em;display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column}.profile-tab-domain-mute-form button{-ms-flex-item-align:end;align-self:flex-end;margin-top:1em;width:10em}.profile-tab .setting-subitem{margin-left:1.75em}.profile-tab .profile-fields{display:-ms-flexbox;display:flex}.profile-tab .profile-fields>.emoji-input{-ms-flex:1 1 auto;flex:1 1 auto;margin:0 .2em .5em;min-width:0}.profile-tab .profile-fields>.icon-container{width:20px}.profile-tab .profile-fields>.icon-container>.icon-cancel{vertical-align:sub}",""])},620:function(t,e,s){var a=s(621);"string"==typeof a&&(a=[[t.i,a,""]]),a.locals&&(t.exports=a.locals);(0,s(5).default)("0dfd0b33",a,!0,{})},621:function(t,e,s){(t.exports=s(4)(!1)).push([t.i,".image-cropper-img-input{display:none}.image-cropper-image-container{position:relative}.image-cropper-image-container img{display:block;max-width:100%}.image-cropper-buttons-wrapper{margin-top:10px}.image-cropper-buttons-wrapper button{margin-top:5px}",""])},624:function(t,e,s){var a=s(625);"string"==typeof a&&(a=[[t.i,a,""]]),a.locals&&(t.exports=a.locals);(0,s(5).default)("4fafab12",a,!0,{})},625:function(t,e,s){(t.exports=s(4)(!1)).push([t.i,".theme-tab{padding-bottom:2em}.theme-tab .theme-warning{display:-ms-flexbox;display:flex;-ms-flex-align:baseline;align-items:baseline;margin-bottom:.5em}.theme-tab .theme-warning .buttons .btn{margin-bottom:.5em}.theme-tab .preset-switcher{margin-right:1em}.theme-tab .style-control{display:-ms-flexbox;display:flex;-ms-flex-align:baseline;align-items:baseline;margin-bottom:5px}.theme-tab .style-control .label{-ms-flex:1;flex:1}.theme-tab .style-control.disabled input,.theme-tab .style-control.disabled select{opacity:.5}.theme-tab .style-control .opt{margin:.5em}.theme-tab .style-control .color-input{-ms-flex:0 0 0px;flex:0 0 0}.theme-tab .style-control input,.theme-tab .style-control select{min-width:3em;margin:0;-ms-flex:0;flex:0}.theme-tab .style-control input[type=number],.theme-tab .style-control select[type=number]{min-width:5em}.theme-tab .style-control input[type=range],.theme-tab .style-control select[type=range]{-ms-flex:1;flex:1;min-width:3em;-ms-flex-item-align:start;align-self:flex-start}.theme-tab .reset-container{-ms-flex-wrap:wrap;flex-wrap:wrap}.theme-tab .apply-container,.theme-tab .color-container,.theme-tab .fonts-container,.theme-tab .radius-container,.theme-tab .reset-container{display:-ms-flexbox;display:flex}.theme-tab .fonts-container,.theme-tab .radius-container{-ms-flex-direction:column;flex-direction:column}.theme-tab .color-container{-ms-flex-wrap:wrap;flex-wrap:wrap;-ms-flex-pack:justify;justify-content:space-between}.theme-tab .color-container>h4{width:99%}.theme-tab .color-container,.theme-tab .fonts-container,.theme-tab .presets-container,.theme-tab .radius-container,.theme-tab .shadow-container{margin:1em 1em 0}.theme-tab .tab-header{display:-ms-flexbox;display:flex;-ms-flex-pack:justify;justify-content:space-between;-ms-flex-align:baseline;align-items:baseline;width:100%;min-height:30px;margin-bottom:1em}.theme-tab .tab-header p{-ms-flex:1;flex:1;margin:0;margin-right:.5em}.theme-tab .tab-header-buttons{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column}.theme-tab .tab-header-buttons .btn{min-width:1px;-ms-flex:0 auto;flex:0 auto;padding:0 1em;margin-bottom:.5em}.theme-tab .shadow-selector .override{-ms-flex:1;flex:1;margin-left:.5em}.theme-tab .shadow-selector .select-container{margin-top:-4px;margin-bottom:-3px}.theme-tab .save-load,.theme-tab .save-load-options{display:-ms-flexbox;display:flex;-ms-flex-pack:center;justify-content:center;-ms-flex-align:baseline;align-items:baseline;-ms-flex-wrap:wrap;flex-wrap:wrap}.theme-tab .save-load-options .import-export,.theme-tab .save-load-options .presets,.theme-tab .save-load .import-export,.theme-tab .save-load .presets{margin-bottom:.5em}.theme-tab .save-load-options .import-export,.theme-tab .save-load .import-export{display:-ms-flexbox;display:flex}.theme-tab .save-load-options .override,.theme-tab .save-load .override{margin-left:.5em}.theme-tab .save-load-options{-ms-flex-wrap:wrap;flex-wrap:wrap;margin-top:.5em;-ms-flex-pack:center;justify-content:center}.theme-tab .save-load-options .keep-option{margin:0 .5em .5em;min-width:25%}.theme-tab .preview-container{border-top:1px dashed;border-bottom:1px dashed;border-color:#222;border-color:var(--border,#222);margin:1em 0;padding:1em;background:var(--body-background-image);background-size:cover;background-position:50% 50%}.theme-tab .preview-container .dummy .post{font-family:var(--postFont);display:-ms-flexbox;display:flex}.theme-tab .preview-container .dummy .post .content{-ms-flex:1;flex:1}.theme-tab .preview-container .dummy .post .content h4{margin-bottom:.25em}.theme-tab .preview-container .dummy .post .content .icons{margin-top:.5em;display:-ms-flexbox;display:flex}.theme-tab .preview-container .dummy .post .content .icons i{margin-right:1em}.theme-tab .preview-container .dummy .after-post{margin-top:1em;display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center}.theme-tab .preview-container .dummy .avatar,.theme-tab .preview-container .dummy .avatar-alt{background:linear-gradient(135deg,#b8e1fc,#a9d2f3 10%,#90bae4 25%,#90bcea 37%,#90bff0 50%,#6ba8e5 51%,#a2daf5 83%,#bdf3fd);color:#000;font-family:sans-serif;text-align:center;margin-right:1em}.theme-tab .preview-container .dummy .avatar-alt{-ms-flex:0 auto;flex:0 auto;margin-left:28px;font-size:12px;min-width:20px;min-height:20px;line-height:20px;border-radius:10px;border-radius:var(--avatarAltRadius,10px)}.theme-tab .preview-container .dummy .avatar{-ms-flex:0 auto;flex:0 auto;width:48px;height:48px;font-size:14px;line-height:48px}.theme-tab .preview-container .dummy .actions{display:-ms-flexbox;display:flex;-ms-flex-align:baseline;align-items:baseline}.theme-tab .preview-container .dummy .actions .checkbox{display:-ms-inline-flexbox;display:inline-flex;-ms-flex-align:baseline;align-items:baseline;margin-right:1em;-ms-flex:1;flex:1}.theme-tab .preview-container .dummy .separator{margin:1em;border-bottom:1px solid;border-color:#222;border-color:var(--border,#222)}.theme-tab .preview-container .dummy .panel-heading .alert,.theme-tab .preview-container .dummy .panel-heading .badge,.theme-tab .preview-container .dummy .panel-heading .btn,.theme-tab .preview-container .dummy .panel-heading .faint{margin-left:1em;white-space:nowrap}.theme-tab .preview-container .dummy .panel-heading .faint{text-overflow:ellipsis;min-width:2em;overflow-x:hidden}.theme-tab .preview-container .dummy .panel-heading .flex-spacer{-ms-flex:1;flex:1}.theme-tab .preview-container .dummy .btn{margin-left:0;padding:0 1em;min-width:3em;min-height:30px}.theme-tab .apply-container{-ms-flex-pack:center;justify-content:center}.theme-tab .color-item,.theme-tab .radius-item{min-width:20em;margin:5px 6px 0 0;display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;-ms-flex:1 1 0px;flex:1 1 0}.theme-tab .color-item.wide,.theme-tab .radius-item.wide{min-width:60%}.theme-tab .color-item:not(.wide):nth-child(odd),.theme-tab .radius-item:not(.wide):nth-child(odd){margin-right:7px}.theme-tab .color-item .color,.theme-tab .color-item .opacity,.theme-tab .radius-item .color,.theme-tab .radius-item .opacity{display:-ms-flexbox;display:flex;-ms-flex-align:baseline;align-items:baseline}.theme-tab .radius-item{-ms-flex-preferred-size:auto;flex-basis:auto}.theme-tab .theme-color-cl,.theme-tab .theme-radius-rn{border:0;box-shadow:none;background:transparent;color:var(--faint,hsla(240,1%,73%,.5));-ms-flex-item-align:stretch;-ms-grid-row-align:stretch;align-self:stretch}.theme-tab .theme-color-cl,.theme-tab .theme-color-in,.theme-tab .theme-radius-in{margin-left:4px}.theme-tab .theme-radius-in{min-width:1em;max-width:7em;-ms-flex:1;flex:1}.theme-tab .theme-radius-lb{max-width:50em}.theme-tab .theme-preview-content{padding:20px}.theme-tab .apply-container .btn{min-height:28px;min-width:10em;padding:0 2em}.theme-tab .btn{margin-left:.25em;margin-right:.25em}",""])},626:function(t,e,s){var a=s(627);"string"==typeof a&&(a=[[t.i,a,""]]),a.locals&&(t.exports=a.locals);(0,s(5).default)("7e57f952",a,!0,{})},627:function(t,e,s){(t.exports=s(4)(!1)).push([t.i,'.color-input,.color-input-field.input{display:-ms-inline-flexbox;display:inline-flex}.color-input-field.input{-ms-flex:0 0 0px;flex:0 0 0;max-width:9em;-ms-flex-align:stretch;align-items:stretch;padding:.2em 8px}.color-input-field.input input{background:none;color:#b9b9ba;color:var(--inputText,#b9b9ba);border:none;padding:0;margin:0}.color-input-field.input input.textColor{-ms-flex:1 0 3em;flex:1 0 3em;min-width:3em;padding:0}.color-input-field.input .computedIndicator,.color-input-field.input .transparentIndicator,.color-input-field.input input.nativeColor{-ms-flex:0 0 2em;flex:0 0 2em;min-width:2em;-ms-flex-item-align:center;-ms-grid-row-align:center;align-self:center;height:100%}.color-input-field.input .transparentIndicator{background-color:#f0f;position:relative}.color-input-field.input .transparentIndicator:after,.color-input-field.input .transparentIndicator:before{display:block;content:"";background-color:#000;position:absolute;height:50%;width:50%}.color-input-field.input .transparentIndicator:after{top:0;left:0}.color-input-field.input .transparentIndicator:before{bottom:0;right:0}.color-input .label{-ms-flex:1 1 auto;flex:1 1 auto}',""])},628:function(t,e,s){var a=s(629);"string"==typeof a&&(a=[[t.i,a,""]]),a.locals&&(t.exports=a.locals);(0,s(5).default)("6c632637",a,!0,{})},629:function(t,e,s){(t.exports=s(4)(!1)).push([t.i,".color-control input.text-input{max-width:7em;-ms-flex:1;flex:1}",""])},630:function(t,e,s){var a=s(631);"string"==typeof a&&(a=[[t.i,a,""]]),a.locals&&(t.exports=a.locals);(0,s(5).default)("d219da80",a,!0,{})},631:function(t,e,s){(t.exports=s(4)(!1)).push([t.i,".shadow-control{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-ms-flex-pack:center;justify-content:center;margin-bottom:1em}.shadow-control .shadow-preview-container,.shadow-control .shadow-tweak{margin:5px 6px 0 0}.shadow-control .shadow-preview-container{-ms-flex:0;flex:0;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap}.shadow-control .shadow-preview-container input[type=number]{width:5em;min-width:2em}.shadow-control .shadow-preview-container .x-shift-control,.shadow-control .shadow-preview-container .y-shift-control{display:-ms-flexbox;display:flex;-ms-flex:0;flex:0}.shadow-control .shadow-preview-container .x-shift-control[disabled=disabled] *,.shadow-control .shadow-preview-container .y-shift-control[disabled=disabled] *{opacity:.5}.shadow-control .shadow-preview-container .x-shift-control{-ms-flex-align:start;align-items:flex-start}.shadow-control .shadow-preview-container .x-shift-control .wrap,.shadow-control .shadow-preview-container input[type=range]{margin:0;width:15em;height:2em}.shadow-control .shadow-preview-container .y-shift-control{-ms-flex-direction:column;flex-direction:column;-ms-flex-align:end;align-items:flex-end}.shadow-control .shadow-preview-container .y-shift-control .wrap{width:2em;height:15em}.shadow-control .shadow-preview-container .y-shift-control input[type=range]{transform-origin:1em 1em;transform:rotate(90deg)}.shadow-control .shadow-preview-container .preview-window{-ms-flex:1;flex:1;background-color:#999;display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center;background-image:linear-gradient(45deg,#666 25%,transparent 0),linear-gradient(-45deg,#666 25%,transparent 0),linear-gradient(45deg,transparent 75%,#666 0),linear-gradient(-45deg,transparent 75%,#666 0);background-size:20px 20px;background-position:0 0,0 10px,10px -10px,-10px 0;border-radius:4px;border-radius:var(--inputRadius,4px)}.shadow-control .shadow-preview-container .preview-window .preview-block{width:33%;height:33%;background-color:#121a24;background-color:var(--bg,#121a24);border-radius:10px;border-radius:var(--panelRadius,10px)}.shadow-control .shadow-tweak{-ms-flex:1;flex:1;min-width:280px}.shadow-control .shadow-tweak .id-control{-ms-flex-align:stretch;align-items:stretch}.shadow-control .shadow-tweak .id-control .btn,.shadow-control .shadow-tweak .id-control .select{min-width:1px;margin-right:5px}.shadow-control .shadow-tweak .id-control .btn{padding:0 .4em;margin:0 .1em}.shadow-control .shadow-tweak .id-control .select{-ms-flex:1;flex:1}.shadow-control .shadow-tweak .id-control .select select{-ms-flex-item-align:initial;-ms-grid-row-align:initial;align-self:auto}",""])},632:function(t,e,s){var a=s(633);"string"==typeof a&&(a=[[t.i,a,""]]),a.locals&&(t.exports=a.locals);(0,s(5).default)("d9c0acde",a,!0,{})},633:function(t,e,s){(t.exports=s(4)(!1)).push([t.i,".font-control input.custom-font{min-width:10em}.font-control.custom .select{border-top-right-radius:0;border-bottom-right-radius:0}.font-control.custom .custom-font{border-top-left-radius:0;border-bottom-left-radius:0}",""])},634:function(t,e,s){var a=s(635);"string"==typeof a&&(a=[[t.i,a,""]]),a.locals&&(t.exports=a.locals);(0,s(5).default)("b94bc120",a,!0,{})},635:function(t,e,s){(t.exports=s(4)(!1)).push([t.i,".contrast-ratio{display:-ms-flexbox;display:flex;-ms-flex-pack:end;justify-content:flex-end;margin-top:-4px;margin-bottom:5px}.contrast-ratio .label{margin-right:1em}.contrast-ratio .rating{display:inline-block;text-align:center}",""])},636:function(t,e,s){var a=s(637);"string"==typeof a&&(a=[[t.i,a,""]]),a.locals&&(t.exports=a.locals);(0,s(5).default)("66a4eaba",a,!0,{})},637:function(t,e,s){(t.exports=s(4)(!1)).push([t.i,".import-export-container{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-ms-flex-align:baseline;align-items:baseline;-ms-flex-pack:center;justify-content:center}",""])},638:function(t,e,s){var a=s(639);"string"==typeof a&&(a=[[t.i,a,""]]),a.locals&&(t.exports=a.locals);(0,s(5).default)("6fe23c76",a,!0,{})},639:function(t,e,s){(t.exports=s(4)(!1)).push([t.i,".preview-container{position:relative}.underlay-preview{position:absolute;top:0;bottom:0;left:10px;right:10px}",""])},641:function(t,e,s){"use strict";s.r(e);var a=s(141),n={props:{submitHandler:{type:Function,required:!0},submitButtonLabel:{type:String,default:function(){return this.$t("importer.submit")}},successMessage:{type:String,default:function(){return this.$t("importer.success")}},errorMessage:{type:String,default:function(){return this.$t("importer.error")}}},data:function(){return{file:null,error:!1,success:!1,submitting:!1}},methods:{change:function(){this.file=this.$refs.input.files[0]},submit:function(){var t=this;this.dismiss(),this.submitting=!0,this.submitHandler(this.file).then(function(){t.success=!0}).catch(function(){t.error=!0}).finally(function(){t.submitting=!1})},dismiss:function(){this.success=!1,this.error=!1}}},o=s(0);var i=function(t){s(593)},r=Object(o.a)(n,function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("div",{staticClass:"importer"},[s("form",[s("input",{ref:"input",attrs:{type:"file"},on:{change:t.change}})]),t._v(" "),t.submitting?s("i",{staticClass:"icon-spin4 animate-spin importer-uploading"}):s("button",{staticClass:"btn btn-default",on:{click:t.submit}},[t._v("\n "+t._s(t.submitButtonLabel)+"\n ")]),t._v(" "),t.success?s("div",[s("i",{staticClass:"icon-cross",on:{click:t.dismiss}}),t._v(" "),s("p",[t._v(t._s(t.successMessage))])]):t.error?s("div",[s("i",{staticClass:"icon-cross",on:{click:t.dismiss}}),t._v(" "),s("p",[t._v(t._s(t.errorMessage))])]):t._e()])},[],!1,i,null,null).exports,l={props:{getContent:{type:Function,required:!0},filename:{type:String,default:"export.csv"},exportButtonLabel:{type:String,default:function(){return this.$t("exporter.export")}},processingMessage:{type:String,default:function(){return this.$t("exporter.processing")}}},data:function(){return{processing:!1}},methods:{process:function(){var t=this;this.processing=!0,this.getContent().then(function(e){var s=document.createElement("a");s.setAttribute("href","data:text/plain;charset=utf-8,"+encodeURIComponent(e)),s.setAttribute("download",t.filename),s.style.display="none",document.body.appendChild(s),s.click(),document.body.removeChild(s),setTimeout(function(){t.processing=!1},2e3)})}}};var c=function(t){s(595)},u=Object(o.a)(l,function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("div",{staticClass:"exporter"},[t.processing?s("div",[s("i",{staticClass:"icon-spin4 animate-spin exporter-processing"}),t._v(" "),s("span",[t._v(t._s(t.processingMessage))])]):s("button",{staticClass:"btn btn-default",on:{click:t.process}},[t._v("\n "+t._s(t.exportButtonLabel)+"\n ")])])},[],!1,c,null,null).exports,d=s(54),p={data:function(){return{activeTab:"profile",newDomainToMute:""}},created:function(){this.$store.dispatch("fetchTokens")},components:{Importer:r,Exporter:u,Checkbox:d.a},computed:{user:function(){return this.$store.state.users.currentUser}},methods:{getFollowsContent:function(){return this.$store.state.api.backendInteractor.exportFriends({id:this.$store.state.users.currentUser.id}).then(this.generateExportableUsersContent)},getBlocksContent:function(){return this.$store.state.api.backendInteractor.fetchBlocks().then(this.generateExportableUsersContent)},importFollows:function(t){return this.$store.state.api.backendInteractor.importFollows({file:t}).then(function(t){if(!t)throw new Error("failed")})},importBlocks:function(t){return this.$store.state.api.backendInteractor.importBlocks({file:t}).then(function(t){if(!t)throw new Error("failed")})},generateExportableUsersContent:function(t){return t.map(function(t){return t&&t.is_local?t.screen_name+"@"+location.hostname:t.screen_name}).join("\n")}}},m=Object(o.a)(p,function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("div",{attrs:{label:t.$t("settings.data_import_export_tab")}},[s("div",{staticClass:"setting-item"},[s("h2",[t._v(t._s(t.$t("settings.follow_import")))]),t._v(" "),s("p",[t._v(t._s(t.$t("settings.import_followers_from_a_csv_file")))]),t._v(" "),s("Importer",{attrs:{"submit-handler":t.importFollows,"success-message":t.$t("settings.follows_imported"),"error-message":t.$t("settings.follow_import_error")}})],1),t._v(" "),s("div",{staticClass:"setting-item"},[s("h2",[t._v(t._s(t.$t("settings.follow_export")))]),t._v(" "),s("Exporter",{attrs:{"get-content":t.getFollowsContent,filename:"friends.csv","export-button-label":t.$t("settings.follow_export_button")}})],1),t._v(" "),s("div",{staticClass:"setting-item"},[s("h2",[t._v(t._s(t.$t("settings.block_import")))]),t._v(" "),s("p",[t._v(t._s(t.$t("settings.import_blocks_from_a_csv_file")))]),t._v(" "),s("Importer",{attrs:{"submit-handler":t.importBlocks,"success-message":t.$t("settings.blocks_imported"),"error-message":t.$t("settings.block_import_error")}})],1),t._v(" "),s("div",{staticClass:"setting-item"},[s("h2",[t._v(t._s(t.$t("settings.block_export")))]),t._v(" "),s("Exporter",{attrs:{"get-content":t.getBlocksContent,filename:"blocks.csv","export-button-label":t.$t("settings.block_export_button")}})],1)])},[],!1,null,null,null).exports,v=s(12),h=s.n(v),b=s(15),f=s.n(b),g=s(189),_=s.n(g),w={props:{query:{type:Function,required:!0},filter:{type:Function},placeholder:{type:String,default:"Search..."}},data:function(){return{term:"",timeout:null,results:[],resultsVisible:!1}},computed:{filtered:function(){return this.filter?this.filter(this.results):this.results}},watch:{term:function(t){this.fetchResults(t)}},methods:{fetchResults:function(t){var e=this;clearTimeout(this.timeout),this.timeout=setTimeout(function(){e.results=[],t&&e.query(t).then(function(t){e.results=t})},500)},onInputClick:function(){this.resultsVisible=!0},onClickOutside:function(){this.resultsVisible=!1}}};var C=function(t){s(599)},x=Object(o.a)(w,function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("div",{directives:[{name:"click-outside",rawName:"v-click-outside",value:t.onClickOutside,expression:"onClickOutside"}],staticClass:"autosuggest"},[s("input",{directives:[{name:"model",rawName:"v-model",value:t.term,expression:"term"}],staticClass:"autosuggest-input",attrs:{placeholder:t.placeholder},domProps:{value:t.term},on:{click:t.onInputClick,input:function(e){e.target.composing||(t.term=e.target.value)}}}),t._v(" "),t.resultsVisible&&t.filtered.length>0?s("div",{staticClass:"autosuggest-results"},[t._l(t.filtered,function(e){return t._t("default",null,{item:e})})],2):t._e()])},[],!1,C,null,null).exports,k=s(38),y={props:["userId"],data:function(){return{progress:!1}},computed:{user:function(){return this.$store.getters.findUser(this.userId)},relationship:function(){return this.$store.getters.relationship(this.userId)},blocked:function(){return this.relationship.blocking}},components:{BasicUserCard:k.a},methods:{unblockUser:function(){var t=this;this.progress=!0,this.$store.dispatch("unblockUser",this.user.id).then(function(){t.progress=!1})},blockUser:function(){var t=this;this.progress=!0,this.$store.dispatch("blockUser",this.user.id).then(function(){t.progress=!1})}}};var $=function(t){s(601)},L=Object(o.a)(y,function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("basic-user-card",{attrs:{user:t.user}},[s("div",{staticClass:"block-card-content-container"},[t.blocked?s("button",{staticClass:"btn btn-default",attrs:{disabled:t.progress},on:{click:t.unblockUser}},[t.progress?[t._v("\n "+t._s(t.$t("user_card.unblock_progress"))+"\n ")]:[t._v("\n "+t._s(t.$t("user_card.unblock"))+"\n ")]],2):s("button",{staticClass:"btn btn-default",attrs:{disabled:t.progress},on:{click:t.blockUser}},[t.progress?[t._v("\n "+t._s(t.$t("user_card.block_progress"))+"\n ")]:[t._v("\n "+t._s(t.$t("user_card.block"))+"\n ")]],2)])])},[],!1,$,null,null).exports,T={props:["userId"],data:function(){return{progress:!1}},computed:{user:function(){return this.$store.getters.findUser(this.userId)},relationship:function(){return this.$store.getters.relationship(this.userId)},muted:function(){return this.relationship.muting}},components:{BasicUserCard:k.a},methods:{unmuteUser:function(){var t=this;this.progress=!0,this.$store.dispatch("unmuteUser",this.userId).then(function(){t.progress=!1})},muteUser:function(){var t=this;this.progress=!0,this.$store.dispatch("muteUser",this.userId).then(function(){t.progress=!1})}}};var O=function(t){s(603)},P=Object(o.a)(T,function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("basic-user-card",{attrs:{user:t.user}},[s("div",{staticClass:"mute-card-content-container"},[t.muted?s("button",{staticClass:"btn btn-default",attrs:{disabled:t.progress},on:{click:t.unmuteUser}},[t.progress?[t._v("\n "+t._s(t.$t("user_card.unmute_progress"))+"\n ")]:[t._v("\n "+t._s(t.$t("user_card.unmute"))+"\n ")]],2):s("button",{staticClass:"btn btn-default",attrs:{disabled:t.progress},on:{click:t.muteUser}},[t.progress?[t._v("\n "+t._s(t.$t("user_card.mute_progress"))+"\n ")]:[t._v("\n "+t._s(t.$t("user_card.mute"))+"\n ")]],2)])])},[],!1,O,null,null).exports,S=s(78),I={props:["domain"],components:{ProgressButton:S.a},computed:{user:function(){return this.$store.state.users.currentUser},muted:function(){return this.user.domainMutes.includes(this.domain)}},methods:{unmuteDomain:function(){return this.$store.dispatch("unmuteDomain",this.domain)},muteDomain:function(){return this.$store.dispatch("muteDomain",this.domain)}}};var j=function(t){s(605)},E=Object(o.a)(I,function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("div",{staticClass:"domain-mute-card"},[s("div",{staticClass:"domain-mute-card-domain"},[t._v("\n "+t._s(t.domain)+"\n ")]),t._v(" "),t.muted?s("ProgressButton",{staticClass:"btn btn-default",attrs:{click:t.unmuteDomain}},[t._v("\n "+t._s(t.$t("domain_mute_card.unmute"))+"\n "),s("template",{slot:"progress"},[t._v("\n "+t._s(t.$t("domain_mute_card.unmute_progress"))+"\n ")])],2):s("ProgressButton",{staticClass:"btn btn-default",attrs:{click:t.muteDomain}},[t._v("\n "+t._s(t.$t("domain_mute_card.mute"))+"\n "),s("template",{slot:"progress"},[t._v("\n "+t._s(t.$t("domain_mute_card.mute_progress"))+"\n ")])],2)],1)},[],!1,j,null,null).exports,R={components:{List:s(52).a,Checkbox:d.a},props:{items:{type:Array,default:function(){return[]}},getKey:{type:Function,default:function(t){return t.id}}},data:function(){return{selected:[]}},computed:{allKeys:function(){return this.items.map(this.getKey)},filteredSelected:function(){var t=this;return this.allKeys.filter(function(e){return-1!==t.selected.indexOf(e)})},allSelected:function(){return this.filteredSelected.length===this.items.length},noneSelected:function(){return 0===this.filteredSelected.length},someSelected:function(){return!this.allSelected&&!this.noneSelected}},methods:{isSelected:function(t){return-1!==this.filteredSelected.indexOf(this.getKey(t))},toggle:function(t,e){var s=this.getKey(e);t!==this.isSelected(s)&&(t?this.selected.push(s):this.selected.splice(this.selected.indexOf(s),1))},toggleAll:function(t){this.selected=t?this.allKeys.slice(0):[]}}};var B=function(t){s(607)},F=Object(o.a)(R,function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("div",{staticClass:"selectable-list"},[t.items.length>0?s("div",{staticClass:"selectable-list-header"},[s("div",{staticClass:"selectable-list-checkbox-wrapper"},[s("Checkbox",{attrs:{checked:t.allSelected,indeterminate:t.someSelected},on:{change:t.toggleAll}},[t._v("\n "+t._s(t.$t("selectable_list.select_all"))+"\n ")])],1),t._v(" "),s("div",{staticClass:"selectable-list-header-actions"},[t._t("header",null,{selected:t.filteredSelected})],2)]):t._e(),t._v(" "),s("List",{attrs:{items:t.items,"get-key":t.getKey},scopedSlots:t._u([{key:"item",fn:function(e){var a=e.item;return[s("div",{staticClass:"selectable-list-item-inner",class:{"selectable-list-item-selected-inner":t.isSelected(a)}},[s("div",{staticClass:"selectable-list-checkbox-wrapper"},[s("Checkbox",{attrs:{checked:t.isSelected(a)},on:{change:function(e){return t.toggle(e,a)}}})],1),t._v(" "),t._t("item",null,{item:a})],2)]}}],null,!0)},[t._v(" "),s("template",{slot:"empty"},[t._t("empty")],2)],2)],1)},[],!1,B,null,null).exports,M=s(190),U=s.n(M),V=s(7),A=s.n(V),D=s(1),N=s.n(D),W=s(10),z=s.n(W),q=s(6),G=s.n(q),H=s(191),K=s.n(H),J=s(192);s(609);function Q(t,e){var s=Object.keys(t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(t);e&&(a=a.filter(function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})),s.push.apply(s,a)}return s}function X(t){for(var e=1;e0?s("ProgressButton",{staticClass:"btn btn-default bulk-action-button",attrs:{click:function(){return t.blockUsers(a)}}},[t._v("\n "+t._s(t.$t("user_card.block"))+"\n "),s("template",{slot:"progress"},[t._v("\n "+t._s(t.$t("user_card.block_progress"))+"\n ")])],2):t._e(),t._v(" "),a.length>0?s("ProgressButton",{staticClass:"btn btn-default",attrs:{click:function(){return t.unblockUsers(a)}}},[t._v("\n "+t._s(t.$t("user_card.unblock"))+"\n "),s("template",{slot:"progress"},[t._v("\n "+t._s(t.$t("user_card.unblock_progress"))+"\n ")])],2):t._e()],1)]}},{key:"item",fn:function(t){var e=t.item;return[s("BlockCard",{attrs:{"user-id":e}})]}}])},[t._v(" "),t._v(" "),s("template",{slot:"empty"},[t._v("\n "+t._s(t.$t("settings.no_blocks"))+"\n ")])],2)],1),t._v(" "),s("div",{attrs:{label:t.$t("settings.mutes_tab")}},[s("tab-switcher",[s("div",{attrs:{label:"Users"}},[s("div",{staticClass:"usersearch-wrapper"},[s("Autosuggest",{attrs:{filter:t.filterUnMutedUsers,query:t.queryUserIds,placeholder:t.$t("settings.search_user_to_mute")},scopedSlots:t._u([{key:"default",fn:function(t){return s("MuteCard",{attrs:{"user-id":t.item}})}}])})],1),t._v(" "),s("MuteList",{attrs:{refresh:!0,"get-key":function(t){return t}},scopedSlots:t._u([{key:"header",fn:function(e){var a=e.selected;return[s("div",{staticClass:"bulk-actions"},[a.length>0?s("ProgressButton",{staticClass:"btn btn-default",attrs:{click:function(){return t.muteUsers(a)}}},[t._v("\n "+t._s(t.$t("user_card.mute"))+"\n "),s("template",{slot:"progress"},[t._v("\n "+t._s(t.$t("user_card.mute_progress"))+"\n ")])],2):t._e(),t._v(" "),a.length>0?s("ProgressButton",{staticClass:"btn btn-default",attrs:{click:function(){return t.unmuteUsers(a)}}},[t._v("\n "+t._s(t.$t("user_card.unmute"))+"\n "),s("template",{slot:"progress"},[t._v("\n "+t._s(t.$t("user_card.unmute_progress"))+"\n ")])],2):t._e()],1)]}},{key:"item",fn:function(t){var e=t.item;return[s("MuteCard",{attrs:{"user-id":e}})]}}])},[t._v(" "),t._v(" "),s("template",{slot:"empty"},[t._v("\n "+t._s(t.$t("settings.no_mutes"))+"\n ")])],2)],1),t._v(" "),s("div",{attrs:{label:t.$t("settings.domain_mutes")}},[s("div",{staticClass:"domain-mute-form"},[s("Autosuggest",{attrs:{filter:t.filterUnMutedDomains,query:t.queryKnownDomains,placeholder:t.$t("settings.type_domains_to_mute")},scopedSlots:t._u([{key:"default",fn:function(t){return s("DomainMuteCard",{attrs:{domain:t.item}})}}])})],1),t._v(" "),s("DomainMuteList",{attrs:{refresh:!0,"get-key":function(t){return t}},scopedSlots:t._u([{key:"header",fn:function(e){var a=e.selected;return[s("div",{staticClass:"bulk-actions"},[a.length>0?s("ProgressButton",{staticClass:"btn btn-default",attrs:{click:function(){return t.unmuteDomains(a)}}},[t._v("\n "+t._s(t.$t("domain_mute_card.unmute"))+"\n "),s("template",{slot:"progress"},[t._v("\n "+t._s(t.$t("domain_mute_card.unmute_progress"))+"\n ")])],2):t._e()],1)]}},{key:"item",fn:function(t){var e=t.item;return[s("DomainMuteCard",{attrs:{domain:e}})]}}])},[t._v(" "),t._v(" "),s("template",{slot:"empty"},[t._v("\n "+t._s(t.$t("settings.no_mutes"))+"\n ")])],2)],1)])],1)])},[],!1,at,null,null).exports,ot={data:function(){return{activeTab:"profile",notificationSettings:this.$store.state.users.currentUser.notification_settings,newDomainToMute:""}},components:{Checkbox:d.a},computed:{user:function(){return this.$store.state.users.currentUser}},methods:{updateNotificationSettings:function(){this.$store.state.api.backendInteractor.updateNotificationSettings({settings:this.notificationSettings})}}},it=Object(o.a)(ot,function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("div",{attrs:{label:t.$t("settings.notifications")}},[s("div",{staticClass:"setting-item"},[s("h2",[t._v(t._s(t.$t("settings.notification_setting_filters")))]),t._v(" "),s("p",[s("Checkbox",{model:{value:t.notificationSettings.block_from_strangers,callback:function(e){t.$set(t.notificationSettings,"block_from_strangers",e)},expression:"notificationSettings.block_from_strangers"}},[t._v("\n "+t._s(t.$t("settings.notification_setting_block_from_strangers"))+"\n ")])],1)]),t._v(" "),s("div",{staticClass:"setting-item"},[s("h2",[t._v(t._s(t.$t("settings.notification_setting_privacy")))]),t._v(" "),s("p",[s("Checkbox",{model:{value:t.notificationSettings.hide_notification_contents,callback:function(e){t.$set(t.notificationSettings,"hide_notification_contents",e)},expression:"notificationSettings.hide_notification_contents"}},[t._v("\n "+t._s(t.$t("settings.notification_setting_hide_notification_contents"))+"\n ")])],1)]),t._v(" "),s("div",{staticClass:"setting-item"},[s("p",[t._v(t._s(t.$t("settings.notification_mutes")))]),t._v(" "),s("p",[t._v(t._s(t.$t("settings.notification_blocks")))]),t._v(" "),s("button",{staticClass:"btn btn-default",on:{click:t.updateNotificationSettings}},[t._v("\n "+t._s(t.$t("general.submit"))+"\n ")])])])},[],!1,null,null,null).exports,rt=s(610),lt=s.n(rt),ct=s(37),ut=s.n(ct),dt=s(95);function pt(t,e){var s=Object.keys(t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(t);e&&(a=a.filter(function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})),s.push.apply(s,a)}return s}function mt(t){for(var e=1;e0})})}}}),watch:{notificationVisibility:{handler:function(t){this.$store.dispatch("setOption",{name:"notificationVisibility",value:this.$store.getters.mergedConfig.notificationVisibility})},deep:!0},replyVisibility:function(){this.$store.dispatch("queueFlushAll")}}},ft=Object(o.a)(bt,function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("div",{attrs:{label:t.$t("settings.filtering")}},[s("div",{staticClass:"setting-item"},[s("div",{staticClass:"select-multiple"},[s("span",{staticClass:"label"},[t._v(t._s(t.$t("settings.notification_visibility")))]),t._v(" "),s("ul",{staticClass:"option-list"},[s("li",[s("Checkbox",{model:{value:t.notificationVisibility.likes,callback:function(e){t.$set(t.notificationVisibility,"likes",e)},expression:"notificationVisibility.likes"}},[t._v("\n "+t._s(t.$t("settings.notification_visibility_likes"))+"\n ")])],1),t._v(" "),s("li",[s("Checkbox",{model:{value:t.notificationVisibility.repeats,callback:function(e){t.$set(t.notificationVisibility,"repeats",e)},expression:"notificationVisibility.repeats"}},[t._v("\n "+t._s(t.$t("settings.notification_visibility_repeats"))+"\n ")])],1),t._v(" "),s("li",[s("Checkbox",{model:{value:t.notificationVisibility.follows,callback:function(e){t.$set(t.notificationVisibility,"follows",e)},expression:"notificationVisibility.follows"}},[t._v("\n "+t._s(t.$t("settings.notification_visibility_follows"))+"\n ")])],1),t._v(" "),s("li",[s("Checkbox",{model:{value:t.notificationVisibility.mentions,callback:function(e){t.$set(t.notificationVisibility,"mentions",e)},expression:"notificationVisibility.mentions"}},[t._v("\n "+t._s(t.$t("settings.notification_visibility_mentions"))+"\n ")])],1),t._v(" "),s("li",[s("Checkbox",{model:{value:t.notificationVisibility.moves,callback:function(e){t.$set(t.notificationVisibility,"moves",e)},expression:"notificationVisibility.moves"}},[t._v("\n "+t._s(t.$t("settings.notification_visibility_moves"))+"\n ")])],1),t._v(" "),s("li",[s("Checkbox",{model:{value:t.notificationVisibility.emojiReactions,callback:function(e){t.$set(t.notificationVisibility,"emojiReactions",e)},expression:"notificationVisibility.emojiReactions"}},[t._v("\n "+t._s(t.$t("settings.notification_visibility_emoji_reactions"))+"\n ")])],1)])]),t._v(" "),s("div",[t._v("\n "+t._s(t.$t("settings.replies_in_timeline"))+"\n "),s("label",{staticClass:"select",attrs:{for:"replyVisibility"}},[s("select",{directives:[{name:"model",rawName:"v-model",value:t.replyVisibility,expression:"replyVisibility"}],attrs:{id:"replyVisibility"},on:{change:function(e){var s=Array.prototype.filter.call(e.target.options,function(t){return t.selected}).map(function(t){return"_value"in t?t._value:t.value});t.replyVisibility=e.target.multiple?s:s[0]}}},[s("option",{attrs:{value:"all",selected:""}},[t._v(t._s(t.$t("settings.reply_visibility_all")))]),t._v(" "),s("option",{attrs:{value:"following"}},[t._v(t._s(t.$t("settings.reply_visibility_following")))]),t._v(" "),s("option",{attrs:{value:"self"}},[t._v(t._s(t.$t("settings.reply_visibility_self")))])]),t._v(" "),s("i",{staticClass:"icon-down-open"})])]),t._v(" "),s("div",[s("Checkbox",{model:{value:t.hidePostStats,callback:function(e){t.hidePostStats=e},expression:"hidePostStats"}},[t._v("\n "+t._s(t.$t("settings.hide_post_stats"))+" "+t._s(t.$t("settings.instance_default",{value:t.hidePostStatsLocalizedValue}))+"\n ")])],1),t._v(" "),s("div",[s("Checkbox",{model:{value:t.hideUserStats,callback:function(e){t.hideUserStats=e},expression:"hideUserStats"}},[t._v("\n "+t._s(t.$t("settings.hide_user_stats"))+" "+t._s(t.$t("settings.instance_default",{value:t.hideUserStatsLocalizedValue}))+"\n ")])],1)]),t._v(" "),s("div",{staticClass:"setting-item"},[s("div",[s("p",[t._v(t._s(t.$t("settings.filtering_explanation")))]),t._v(" "),s("textarea",{directives:[{name:"model",rawName:"v-model",value:t.muteWordsString,expression:"muteWordsString"}],attrs:{id:"muteWords"},domProps:{value:t.muteWordsString},on:{input:function(e){e.target.composing||(t.muteWordsString=e.target.value)}}})]),t._v(" "),s("div",[s("Checkbox",{model:{value:t.hideFilteredStatuses,callback:function(e){t.hideFilteredStatuses=e},expression:"hideFilteredStatuses"}},[t._v("\n "+t._s(t.$t("settings.hide_filtered_statuses"))+" "+t._s(t.$t("settings.instance_default",{value:t.hideFilteredStatusesLocalizedValue}))+"\n ")])],1)])])},[],!1,null,null,null).exports,gt=s(3),_t=s.n(gt),wt={props:{backupCodes:{type:Object,default:function(){return{inProgress:!1,codes:[]}}}},data:function(){return{}},computed:{inProgress:function(){return this.backupCodes.inProgress},ready:function(){return this.backupCodes.codes.length>0},displayTitle:function(){return this.inProgress||this.ready}}};var Ct=function(t){s(615)},xt=Object(o.a)(wt,function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("div",{staticClass:"mfa-backup-codes"},[t.displayTitle?s("h4",[t._v("\n "+t._s(t.$t("settings.mfa.recovery_codes"))+"\n ")]):t._e(),t._v(" "),t.inProgress?s("i",[t._v(t._s(t.$t("settings.mfa.waiting_a_recovery_codes")))]):t._e(),t._v(" "),t.ready?[s("p",{staticClass:"alert warning"},[t._v("\n "+t._s(t.$t("settings.mfa.recovery_codes_warning"))+"\n ")]),t._v(" "),s("ul",{staticClass:"backup-codes"},t._l(t.backupCodes.codes,function(e){return s("li",{key:e},[t._v("\n "+t._s(e)+"\n ")])}),0)]:t._e()],2)},[],!1,Ct,null,null).exports,kt={props:["disabled"],data:function(){return{}},methods:{confirm:function(){this.$emit("confirm")},cancel:function(){this.$emit("cancel")}}},yt=Object(o.a)(kt,function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("div",[t._t("default"),t._v(" "),s("button",{staticClass:"btn btn-default",attrs:{disabled:t.disabled},on:{click:t.confirm}},[t._v("\n "+t._s(t.$t("general.confirm"))+"\n ")]),t._v(" "),s("button",{staticClass:"btn btn-default",attrs:{disabled:t.disabled},on:{click:t.cancel}},[t._v("\n "+t._s(t.$t("general.cancel"))+"\n ")])],2)},[],!1,null,null,null).exports,$t=s(2);function Lt(t,e){var s=Object.keys(t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(t);e&&(a=a.filter(function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})),s.push.apply(s,a)}return s}var Tt={props:["settings"],data:function(){return{error:!1,currentPassword:"",deactivate:!1,inProgress:!1}},components:{confirm:yt},computed:function(t){for(var e=1;e0},confirmNewBackupCodes:function(){return this.backupCodes.getNewCodes}},Object($t.e)({backendInteractor:function(t){return t.api.backendInteractor}})),methods:{activateOTP:function(){this.settings.enabled||(this.setupState.state="getBackupcodes",this.fetchBackupCodes())},fetchBackupCodes:function(){var t=this;return this.backupCodes.inProgress=!0,this.backupCodes.codes=[],this.backendInteractor.generateMfaBackupCodes().then(function(e){t.backupCodes.codes=e.codes,t.backupCodes.inProgress=!1})},getBackupCodes:function(){this.backupCodes.getNewCodes=!0},confirmBackupCodes:function(){var t=this;this.fetchBackupCodes().then(function(e){t.backupCodes.getNewCodes=!1})},cancelBackupCodes:function(){this.backupCodes.getNewCodes=!1},setupOTP:function(){var t=this;this.setupState.state="setupOTP",this.setupState.setupOTPState="prepare",this.backendInteractor.mfaSetupOTP().then(function(e){t.otpSettings=e,t.setupState.setupOTPState="confirm"})},doConfirmOTP:function(){var t=this;this.error=null,this.backendInteractor.mfaConfirmOTP({token:this.otpConfirmToken,password:this.currentPassword}).then(function(e){e.error?t.error=e.error:t.completeSetup()})},completeSetup:function(){this.setupState.setupOTPState="complete",this.setupState.state="complete",this.currentPassword=null,this.error=null,this.fetchSettings()},cancelSetup:function(){this.setupState.setupOTPState="",this.setupState.state="",this.currentPassword=null,this.error=null},fetchSettings:function(){var t;return _t.a.async(function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,_t.a.awrap(this.backendInteractor.settingsMFA());case 2:if(!(t=e.sent).error){e.next=5;break}return e.abrupt("return");case 5:return this.settings=t.settings,this.settings.available=!0,e.abrupt("return",t);case 8:case"end":return e.stop()}},null,this)}},mounted:function(){var t=this;this.fetchSettings().then(function(){t.readyInit=!0})}};var St=function(t){s(613)},It=Object(o.a)(Pt,function(){var t=this,e=t.$createElement,s=t._self._c||e;return t.readyInit&&t.settings.available?s("div",{staticClass:"setting-item mfa-settings"},[s("div",{staticClass:"mfa-heading"},[s("h2",[t._v(t._s(t.$t("settings.mfa.title")))])]),t._v(" "),s("div",[t.setupInProgress?t._e():s("div",{staticClass:"setting-item"},[s("h3",[t._v(t._s(t.$t("settings.mfa.authentication_methods")))]),t._v(" "),s("totp-item",{attrs:{settings:t.settings},on:{deactivate:t.fetchSettings,activate:t.activateOTP}}),t._v(" "),s("br"),t._v(" "),t.settings.enabled?s("div",[t.confirmNewBackupCodes?t._e():s("recovery-codes",{attrs:{"backup-codes":t.backupCodes}}),t._v(" "),t.confirmNewBackupCodes?t._e():s("button",{staticClass:"btn btn-default",on:{click:t.getBackupCodes}},[t._v("\n "+t._s(t.$t("settings.mfa.generate_new_recovery_codes"))+"\n ")]),t._v(" "),t.confirmNewBackupCodes?s("div",[s("confirm",{attrs:{disabled:t.backupCodes.inProgress},on:{confirm:t.confirmBackupCodes,cancel:t.cancelBackupCodes}},[s("p",{staticClass:"warning"},[t._v("\n "+t._s(t.$t("settings.mfa.warning_of_generate_new_codes"))+"\n ")])])],1):t._e()],1):t._e()],1),t._v(" "),t.setupInProgress?s("div",[s("h3",[t._v(t._s(t.$t("settings.mfa.setup_otp")))]),t._v(" "),t.setupOTPInProgress?t._e():s("recovery-codes",{attrs:{"backup-codes":t.backupCodes}}),t._v(" "),t.canSetupOTP?s("button",{staticClass:"btn btn-default",on:{click:t.cancelSetup}},[t._v("\n "+t._s(t.$t("general.cancel"))+"\n ")]):t._e(),t._v(" "),t.canSetupOTP?s("button",{staticClass:"btn btn-default",on:{click:t.setupOTP}},[t._v("\n "+t._s(t.$t("settings.mfa.setup_otp"))+"\n ")]):t._e(),t._v(" "),t.setupOTPInProgress?[t.prepareOTP?s("i",[t._v(t._s(t.$t("settings.mfa.wait_pre_setup_otp")))]):t._e(),t._v(" "),t.confirmOTP?s("div",[s("div",{staticClass:"setup-otp"},[s("div",{staticClass:"qr-code"},[s("h4",[t._v(t._s(t.$t("settings.mfa.scan.title")))]),t._v(" "),s("p",[t._v(t._s(t.$t("settings.mfa.scan.desc")))]),t._v(" "),s("qrcode",{attrs:{value:t.otpSettings.provisioning_uri,options:{width:200}}}),t._v(" "),s("p",[t._v("\n "+t._s(t.$t("settings.mfa.scan.secret_code"))+":\n "+t._s(t.otpSettings.key)+"\n ")])],1),t._v(" "),s("div",{staticClass:"verify"},[s("h4",[t._v(t._s(t.$t("general.verify")))]),t._v(" "),s("p",[t._v(t._s(t.$t("settings.mfa.verify.desc")))]),t._v(" "),s("input",{directives:[{name:"model",rawName:"v-model",value:t.otpConfirmToken,expression:"otpConfirmToken"}],attrs:{type:"text"},domProps:{value:t.otpConfirmToken},on:{input:function(e){e.target.composing||(t.otpConfirmToken=e.target.value)}}}),t._v(" "),s("p",[t._v(t._s(t.$t("settings.enter_current_password_to_confirm"))+":")]),t._v(" "),s("input",{directives:[{name:"model",rawName:"v-model",value:t.currentPassword,expression:"currentPassword"}],attrs:{type:"password"},domProps:{value:t.currentPassword},on:{input:function(e){e.target.composing||(t.currentPassword=e.target.value)}}}),t._v(" "),s("div",{staticClass:"confirm-otp-actions"},[s("button",{staticClass:"btn btn-default",on:{click:t.doConfirmOTP}},[t._v("\n "+t._s(t.$t("settings.mfa.confirm_and_enable"))+"\n ")]),t._v(" "),s("button",{staticClass:"btn btn-default",on:{click:t.cancelSetup}},[t._v("\n "+t._s(t.$t("general.cancel"))+"\n ")])]),t._v(" "),t.error?s("div",{staticClass:"alert error"},[t._v("\n "+t._s(t.error)+"\n ")]):t._e()])])]):t._e()]:t._e()],2):t._e()])]):t._e()},[],!1,St,null,null).exports,jt={data:function(){return{newEmail:"",changeEmailError:!1,changeEmailPassword:"",changedEmail:!1,deletingAccount:!1,deleteAccountConfirmPasswordInput:"",deleteAccountError:!1,changePasswordInputs:["","",""],changedPassword:!1,changePasswordError:!1}},created:function(){this.$store.dispatch("fetchTokens")},components:{ProgressButton:S.a,Mfa:It,Checkbox:d.a},computed:{user:function(){return this.$store.state.users.currentUser},pleromaBackend:function(){return this.$store.state.instance.pleromaBackend},oauthTokens:function(){return this.$store.state.oauthTokens.tokens.map(function(t){return{id:t.id,appName:t.app_name,validUntil:new Date(t.valid_until).toLocaleDateString()}})}},methods:{confirmDelete:function(){this.deletingAccount=!0},deleteAccount:function(){var t=this;this.$store.state.api.backendInteractor.deleteAccount({password:this.deleteAccountConfirmPasswordInput}).then(function(e){"success"===e.status?(t.$store.dispatch("logout"),t.$router.push({name:"root"})):t.deleteAccountError=e.error})},changePassword:function(){var t=this,e={password:this.changePasswordInputs[0],newPassword:this.changePasswordInputs[1],newPasswordConfirmation:this.changePasswordInputs[2]};this.$store.state.api.backendInteractor.changePassword(e).then(function(e){"success"===e.status?(t.changedPassword=!0,t.changePasswordError=!1,t.logout()):(t.changedPassword=!1,t.changePasswordError=e.error)})},changeEmail:function(){var t=this,e={email:this.newEmail,password:this.changeEmailPassword};this.$store.state.api.backendInteractor.changeEmail(e).then(function(e){"success"===e.status?(t.changedEmail=!0,t.changeEmailError=!1):(t.changedEmail=!1,t.changeEmailError=e.error)})},logout:function(){this.$store.dispatch("logout"),this.$router.replace("/")},revokeToken:function(t){window.confirm("".concat(this.$i18n.t("settings.revoke_token"),"?"))&&this.$store.dispatch("revokeToken",t)}}},Et=Object(o.a)(jt,function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("div",{attrs:{label:t.$t("settings.security_tab")}},[s("div",{staticClass:"setting-item"},[s("h2",[t._v(t._s(t.$t("settings.change_email")))]),t._v(" "),s("div",[s("p",[t._v(t._s(t.$t("settings.new_email")))]),t._v(" "),s("input",{directives:[{name:"model",rawName:"v-model",value:t.newEmail,expression:"newEmail"}],attrs:{type:"email",autocomplete:"email"},domProps:{value:t.newEmail},on:{input:function(e){e.target.composing||(t.newEmail=e.target.value)}}})]),t._v(" "),s("div",[s("p",[t._v(t._s(t.$t("settings.current_password")))]),t._v(" "),s("input",{directives:[{name:"model",rawName:"v-model",value:t.changeEmailPassword,expression:"changeEmailPassword"}],attrs:{type:"password",autocomplete:"current-password"},domProps:{value:t.changeEmailPassword},on:{input:function(e){e.target.composing||(t.changeEmailPassword=e.target.value)}}})]),t._v(" "),s("button",{staticClass:"btn btn-default",on:{click:t.changeEmail}},[t._v("\n "+t._s(t.$t("general.submit"))+"\n ")]),t._v(" "),t.changedEmail?s("p",[t._v("\n "+t._s(t.$t("settings.changed_email"))+"\n ")]):t._e(),t._v(" "),!1!==t.changeEmailError?[s("p",[t._v(t._s(t.$t("settings.change_email_error")))]),t._v(" "),s("p",[t._v(t._s(t.changeEmailError))])]:t._e()],2),t._v(" "),s("div",{staticClass:"setting-item"},[s("h2",[t._v(t._s(t.$t("settings.change_password")))]),t._v(" "),s("div",[s("p",[t._v(t._s(t.$t("settings.current_password")))]),t._v(" "),s("input",{directives:[{name:"model",rawName:"v-model",value:t.changePasswordInputs[0],expression:"changePasswordInputs[0]"}],attrs:{type:"password"},domProps:{value:t.changePasswordInputs[0]},on:{input:function(e){e.target.composing||t.$set(t.changePasswordInputs,0,e.target.value)}}})]),t._v(" "),s("div",[s("p",[t._v(t._s(t.$t("settings.new_password")))]),t._v(" "),s("input",{directives:[{name:"model",rawName:"v-model",value:t.changePasswordInputs[1],expression:"changePasswordInputs[1]"}],attrs:{type:"password"},domProps:{value:t.changePasswordInputs[1]},on:{input:function(e){e.target.composing||t.$set(t.changePasswordInputs,1,e.target.value)}}})]),t._v(" "),s("div",[s("p",[t._v(t._s(t.$t("settings.confirm_new_password")))]),t._v(" "),s("input",{directives:[{name:"model",rawName:"v-model",value:t.changePasswordInputs[2],expression:"changePasswordInputs[2]"}],attrs:{type:"password"},domProps:{value:t.changePasswordInputs[2]},on:{input:function(e){e.target.composing||t.$set(t.changePasswordInputs,2,e.target.value)}}})]),t._v(" "),s("button",{staticClass:"btn btn-default",on:{click:t.changePassword}},[t._v("\n "+t._s(t.$t("general.submit"))+"\n ")]),t._v(" "),t.changedPassword?s("p",[t._v("\n "+t._s(t.$t("settings.changed_password"))+"\n ")]):!1!==t.changePasswordError?s("p",[t._v("\n "+t._s(t.$t("settings.change_password_error"))+"\n ")]):t._e(),t._v(" "),t.changePasswordError?s("p",[t._v("\n "+t._s(t.changePasswordError)+"\n ")]):t._e()]),t._v(" "),s("div",{staticClass:"setting-item"},[s("h2",[t._v(t._s(t.$t("settings.oauth_tokens")))]),t._v(" "),s("table",{staticClass:"oauth-tokens"},[s("thead",[s("tr",[s("th",[t._v(t._s(t.$t("settings.app_name")))]),t._v(" "),s("th",[t._v(t._s(t.$t("settings.valid_until")))]),t._v(" "),s("th")])]),t._v(" "),s("tbody",t._l(t.oauthTokens,function(e){return s("tr",{key:e.id},[s("td",[t._v(t._s(e.appName))]),t._v(" "),s("td",[t._v(t._s(e.validUntil))]),t._v(" "),s("td",{staticClass:"actions"},[s("button",{staticClass:"btn btn-default",on:{click:function(s){return t.revokeToken(e.id)}}},[t._v("\n "+t._s(t.$t("settings.revoke_token"))+"\n ")])])])}),0)])]),t._v(" "),s("mfa"),t._v(" "),s("div",{staticClass:"setting-item"},[s("h2",[t._v(t._s(t.$t("settings.delete_account")))]),t._v(" "),t.deletingAccount?t._e():s("p",[t._v("\n "+t._s(t.$t("settings.delete_account_description"))+"\n ")]),t._v(" "),t.deletingAccount?s("div",[s("p",[t._v(t._s(t.$t("settings.delete_account_instructions")))]),t._v(" "),s("p",[t._v(t._s(t.$t("login.password")))]),t._v(" "),s("input",{directives:[{name:"model",rawName:"v-model",value:t.deleteAccountConfirmPasswordInput,expression:"deleteAccountConfirmPasswordInput"}],attrs:{type:"password"},domProps:{value:t.deleteAccountConfirmPasswordInput},on:{input:function(e){e.target.composing||(t.deleteAccountConfirmPasswordInput=e.target.value)}}}),t._v(" "),s("button",{staticClass:"btn btn-default",on:{click:t.deleteAccount}},[t._v("\n "+t._s(t.$t("settings.delete_account"))+"\n ")])]):t._e(),t._v(" "),!1!==t.deleteAccountError?s("p",[t._v("\n "+t._s(t.$t("settings.delete_account_error"))+"\n ")]):t._e(),t._v(" "),t.deleteAccountError?s("p",[t._v("\n "+t._s(t.deleteAccountError)+"\n ")]):t._e(),t._v(" "),t.deletingAccount?t._e():s("button",{staticClass:"btn btn-default",on:{click:t.confirmDelete}},[t._v("\n "+t._s(t.$t("general.submit"))+"\n ")])])],1)},[],!1,null,null,null).exports,Rt=s(188),Bt=s.n(Rt),Ft=s(96),Mt=s.n(Ft),Ut=s(27),Vt=s.n(Ut),At=s(622),Dt=(s(623),{props:{trigger:{type:[String,window.Element],required:!0},submitHandler:{type:Function,required:!0},cropperOptions:{type:Object,default:function(){return{aspectRatio:1,autoCropArea:1,viewMode:1,movable:!1,zoomable:!1,guides:!1}}},mimes:{type:String,default:"image/png, image/gif, image/jpeg, image/bmp, image/x-icon"},saveButtonLabel:{type:String},saveWithoutCroppingButtonlabel:{type:String},cancelButtonLabel:{type:String}},data:function(){return{cropper:void 0,dataUrl:void 0,filename:void 0,submitting:!1,submitError:null}},computed:{saveText:function(){return this.saveButtonLabel||this.$t("image_cropper.save")},saveWithoutCroppingText:function(){return this.saveWithoutCroppingButtonlabel||this.$t("image_cropper.save_without_cropping")},cancelText:function(){return this.cancelButtonLabel||this.$t("image_cropper.cancel")},submitErrorMsg:function(){return this.submitError&&this.submitError instanceof Error?this.submitError.toString():this.submitError}},methods:{destroy:function(){this.cropper&&this.cropper.destroy(),this.$refs.input.value="",this.dataUrl=void 0,this.$emit("close")},submit:function(){var t=this,e=!(arguments.length>0&&void 0!==arguments[0])||arguments[0];this.submitting=!0,this.avatarUploadError=null,this.submitHandler(e&&this.cropper,this.file).then(function(){return t.destroy()}).catch(function(e){t.submitError=e}).finally(function(){t.submitting=!1})},pickImage:function(){this.$refs.input.click()},createCropper:function(){this.cropper=new At.a(this.$refs.img,this.cropperOptions)},getTriggerDOM:function(){return"object"===Vt()(this.trigger)?this.trigger:document.querySelector(this.trigger)},readFile:function(){var t=this,e=this.$refs.input;if(null!=e.files&&null!=e.files[0]){this.file=e.files[0];var s=new window.FileReader;s.onload=function(e){t.dataUrl=e.target.result,t.$emit("open")},s.readAsDataURL(this.file),this.$emit("changed",this.file,s)}},clearError:function(){this.submitError=null}},mounted:function(){var t=this.getTriggerDOM();t?t.addEventListener("click",this.pickImage):this.$emit("error","No image make trigger found.","user"),this.$refs.input.addEventListener("change",this.readFile)},beforeDestroy:function(){var t=this.getTriggerDOM();t&&t.removeEventListener("click",this.pickImage),this.$refs.input.removeEventListener("change",this.readFile)}});var Nt=function(t){s(620)},Wt=Object(o.a)(Dt,function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("div",{staticClass:"image-cropper"},[t.dataUrl?s("div",[s("div",{staticClass:"image-cropper-image-container"},[s("img",{ref:"img",attrs:{src:t.dataUrl,alt:""},on:{load:function(e){return e.stopPropagation(),t.createCropper(e)}}})]),t._v(" "),s("div",{staticClass:"image-cropper-buttons-wrapper"},[s("button",{staticClass:"btn",attrs:{type:"button",disabled:t.submitting},domProps:{textContent:t._s(t.saveText)},on:{click:function(e){return t.submit()}}}),t._v(" "),s("button",{staticClass:"btn",attrs:{type:"button",disabled:t.submitting},domProps:{textContent:t._s(t.cancelText)},on:{click:t.destroy}}),t._v(" "),s("button",{staticClass:"btn",attrs:{type:"button",disabled:t.submitting},domProps:{textContent:t._s(t.saveWithoutCroppingText)},on:{click:function(e){return t.submit(!1)}}}),t._v(" "),t.submitting?s("i",{staticClass:"icon-spin4 animate-spin"}):t._e()]),t._v(" "),t.submitError?s("div",{staticClass:"alert error"},[t._v("\n "+t._s(t.submitErrorMsg)+"\n "),s("i",{staticClass:"button-icon icon-cancel",on:{click:t.clearError}})]):t._e()]):t._e(),t._v(" "),s("input",{ref:"input",staticClass:"image-cropper-img-input",attrs:{type:"file",accept:t.mimes}})])},[],!1,Nt,null,null).exports,zt=s(196),qt=s(134),Gt=s(195),Ht=s(135),Kt={data:function(){return{newName:this.$store.state.users.currentUser.name,newBio:Bt()(this.$store.state.users.currentUser.description),newLocked:this.$store.state.users.currentUser.locked,newNoRichText:this.$store.state.users.currentUser.no_rich_text,newDefaultScope:this.$store.state.users.currentUser.default_scope,newFields:this.$store.state.users.currentUser.fields.map(function(t){return{name:t.name,value:t.value}}),hideFollows:this.$store.state.users.currentUser.hide_follows,hideFollowers:this.$store.state.users.currentUser.hide_followers,hideFollowsCount:this.$store.state.users.currentUser.hide_follows_count,hideFollowersCount:this.$store.state.users.currentUser.hide_followers_count,showRole:this.$store.state.users.currentUser.show_role,role:this.$store.state.users.currentUser.role,discoverable:this.$store.state.users.currentUser.discoverable,bot:this.$store.state.users.currentUser.bot,allowFollowingMove:this.$store.state.users.currentUser.allow_following_move,pickAvatarBtnVisible:!0,bannerUploading:!1,backgroundUploading:!1,banner:null,bannerPreview:null,background:null,backgroundPreview:null,bannerUploadError:null,backgroundUploadError:null}},components:{ScopeSelector:zt.a,ImageCropper:Wt,EmojiInput:Gt.a,Autosuggest:x,ProgressButton:S.a,Checkbox:d.a},computed:{user:function(){return this.$store.state.users.currentUser},emojiUserSuggestor:function(){var t=this;return Object(Ht.a)({emoji:[].concat(z()(this.$store.state.instance.emoji),z()(this.$store.state.instance.customEmoji)),users:this.$store.state.users.users,updateUsersList:function(e){return t.$store.dispatch("searchUsers",{query:e})}})},emojiSuggestor:function(){return Object(Ht.a)({emoji:[].concat(z()(this.$store.state.instance.emoji),z()(this.$store.state.instance.customEmoji))})},userSuggestor:function(){var t=this;return Object(Ht.a)({users:this.$store.state.users.users,updateUsersList:function(e){return t.$store.dispatch("searchUsers",{query:e})}})},fieldsLimits:function(){return this.$store.state.instance.fieldsLimits},maxFields:function(){return this.fieldsLimits?this.fieldsLimits.maxFields:0},defaultAvatar:function(){return this.$store.state.instance.server+this.$store.state.instance.defaultAvatar},defaultBanner:function(){return this.$store.state.instance.server+this.$store.state.instance.defaultBanner},isDefaultAvatar:function(){var t=this.$store.state.instance.defaultAvatar;return!this.$store.state.users.currentUser.profile_image_url||this.$store.state.users.currentUser.profile_image_url.includes(t)},isDefaultBanner:function(){var t=this.$store.state.instance.defaultBanner;return!this.$store.state.users.currentUser.cover_photo||this.$store.state.users.currentUser.cover_photo.includes(t)},isDefaultBackground:function(){return!this.$store.state.users.currentUser.background_image},avatarImgSrc:function(){var t=this.$store.state.users.currentUser.profile_image_url_original;return t||this.defaultAvatar},bannerImgSrc:function(){var t=this.$store.state.users.currentUser.cover_photo;return t||this.defaultBanner}},methods:{updateProfile:function(){var t=this;this.$store.state.api.backendInteractor.updateProfile({params:{note:this.newBio,locked:this.newLocked,display_name:this.newName,fields_attributes:this.newFields.filter(function(t){return null!=t}),default_scope:this.newDefaultScope,no_rich_text:this.newNoRichText,hide_follows:this.hideFollows,hide_followers:this.hideFollowers,discoverable:this.discoverable,bot:this.bot,allow_following_move:this.allowFollowingMove,hide_follows_count:this.hideFollowsCount,hide_followers_count:this.hideFollowersCount,show_role:this.showRole}}).then(function(e){t.newFields.splice(e.fields.length),Mt()(t.newFields,e.fields),t.$store.commit("addNewUsers",[e]),t.$store.commit("setCurrentUser",e)})},changeVis:function(t){this.newDefaultScope=t},addField:function(){return this.newFields.lengththis.$store.state.instance[t+"limit"]){var n=qt.a.fileSizeFormat(a.size),o=qt.a.fileSizeFormat(this.$store.state.instance[t+"limit"]);this[t+"UploadError"]=[this.$t("upload.error.base"),this.$t("upload.error.file_too_big",{filesize:n.num,filesizeunit:n.unit,allowedsize:o.num,allowedsizeunit:o.unit})].join(" ")}else{var i=new FileReader;i.onload=function(e){var n=e.target.result;s[t+"Preview"]=n,s[t]=a},i.readAsDataURL(a)}},resetAvatar:function(){window.confirm(this.$t("settings.reset_avatar_confirm"))&&this.submitAvatar(void 0,"")},resetBanner:function(){window.confirm(this.$t("settings.reset_banner_confirm"))&&this.submitBanner("")},resetBackground:function(){window.confirm(this.$t("settings.reset_background_confirm"))&&this.submitBackground("")},submitAvatar:function(t,e){var s=this;return new Promise(function(a,n){function o(t){s.$store.state.api.backendInteractor.updateProfileImages({avatar:t}).then(function(t){s.$store.commit("addNewUsers",[t]),s.$store.commit("setCurrentUser",t),a()}).catch(function(t){n(new Error(s.$t("upload.error.base")+" "+t.message))})}t?t.getCroppedCanvas().toBlob(o,e.type):o(e)})},submitBanner:function(t){var e=this;(this.bannerPreview||""===t)&&(this.bannerUploading=!0,this.$store.state.api.backendInteractor.updateProfileImages({banner:t}).then(function(t){e.$store.commit("addNewUsers",[t]),e.$store.commit("setCurrentUser",t),e.bannerPreview=null}).catch(function(t){e.bannerUploadError=e.$t("upload.error.base")+" "+t.message}).then(function(){e.bannerUploading=!1}))},submitBackground:function(t){var e=this;(this.backgroundPreview||""===t)&&(this.backgroundUploading=!0,this.$store.state.api.backendInteractor.updateProfileImages({background:t}).then(function(t){t.error?e.backgroundUploadError=e.$t("upload.error.base")+t.error:(e.$store.commit("addNewUsers",[t]),e.$store.commit("setCurrentUser",t),e.backgroundPreview=null),e.backgroundUploading=!1}))}}};var Jt=function(t){s(618)},Qt=Object(o.a)(Kt,function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("div",{staticClass:"profile-tab"},[s("div",{staticClass:"setting-item"},[s("h2",[t._v(t._s(t.$t("settings.name_bio")))]),t._v(" "),s("p",[t._v(t._s(t.$t("settings.name")))]),t._v(" "),s("EmojiInput",{attrs:{"enable-emoji-picker":"",suggest:t.emojiSuggestor},model:{value:t.newName,callback:function(e){t.newName=e},expression:"newName"}},[s("input",{directives:[{name:"model",rawName:"v-model",value:t.newName,expression:"newName"}],attrs:{id:"username",classname:"name-changer"},domProps:{value:t.newName},on:{input:function(e){e.target.composing||(t.newName=e.target.value)}}})]),t._v(" "),s("p",[t._v(t._s(t.$t("settings.bio")))]),t._v(" "),s("EmojiInput",{attrs:{"enable-emoji-picker":"",suggest:t.emojiUserSuggestor},model:{value:t.newBio,callback:function(e){t.newBio=e},expression:"newBio"}},[s("textarea",{directives:[{name:"model",rawName:"v-model",value:t.newBio,expression:"newBio"}],attrs:{classname:"bio"},domProps:{value:t.newBio},on:{input:function(e){e.target.composing||(t.newBio=e.target.value)}}})]),t._v(" "),s("p",[s("Checkbox",{model:{value:t.newLocked,callback:function(e){t.newLocked=e},expression:"newLocked"}},[t._v("\n "+t._s(t.$t("settings.lock_account_description"))+"\n ")])],1),t._v(" "),s("div",[s("label",{attrs:{for:"default-vis"}},[t._v(t._s(t.$t("settings.default_vis")))]),t._v(" "),s("div",{staticClass:"visibility-tray",attrs:{id:"default-vis"}},[s("scope-selector",{attrs:{"show-all":!0,"user-default":t.newDefaultScope,"initial-scope":t.newDefaultScope,"on-scope-change":t.changeVis}})],1)]),t._v(" "),s("p",[s("Checkbox",{model:{value:t.newNoRichText,callback:function(e){t.newNoRichText=e},expression:"newNoRichText"}},[t._v("\n "+t._s(t.$t("settings.no_rich_text_description"))+"\n ")])],1),t._v(" "),s("p",[s("Checkbox",{model:{value:t.hideFollows,callback:function(e){t.hideFollows=e},expression:"hideFollows"}},[t._v("\n "+t._s(t.$t("settings.hide_follows_description"))+"\n ")])],1),t._v(" "),s("p",{staticClass:"setting-subitem"},[s("Checkbox",{attrs:{disabled:!t.hideFollows},model:{value:t.hideFollowsCount,callback:function(e){t.hideFollowsCount=e},expression:"hideFollowsCount"}},[t._v("\n "+t._s(t.$t("settings.hide_follows_count_description"))+"\n ")])],1),t._v(" "),s("p",[s("Checkbox",{model:{value:t.hideFollowers,callback:function(e){t.hideFollowers=e},expression:"hideFollowers"}},[t._v("\n "+t._s(t.$t("settings.hide_followers_description"))+"\n ")])],1),t._v(" "),s("p",{staticClass:"setting-subitem"},[s("Checkbox",{attrs:{disabled:!t.hideFollowers},model:{value:t.hideFollowersCount,callback:function(e){t.hideFollowersCount=e},expression:"hideFollowersCount"}},[t._v("\n "+t._s(t.$t("settings.hide_followers_count_description"))+"\n ")])],1),t._v(" "),s("p",[s("Checkbox",{model:{value:t.allowFollowingMove,callback:function(e){t.allowFollowingMove=e},expression:"allowFollowingMove"}},[t._v("\n "+t._s(t.$t("settings.allow_following_move"))+"\n ")])],1),t._v(" "),"admin"===t.role||"moderator"===t.role?s("p",[s("Checkbox",{model:{value:t.showRole,callback:function(e){t.showRole=e},expression:"showRole"}},["admin"===t.role?[t._v("\n "+t._s(t.$t("settings.show_admin_badge"))+"\n ")]:t._e(),t._v(" "),"moderator"===t.role?[t._v("\n "+t._s(t.$t("settings.show_moderator_badge"))+"\n ")]:t._e()],2)],1):t._e(),t._v(" "),s("p",[s("Checkbox",{model:{value:t.discoverable,callback:function(e){t.discoverable=e},expression:"discoverable"}},[t._v("\n "+t._s(t.$t("settings.discoverable"))+"\n ")])],1),t._v(" "),t.maxFields>0?s("div",[s("p",[t._v(t._s(t.$t("settings.profile_fields.label")))]),t._v(" "),t._l(t.newFields,function(e,a){return s("div",{key:a,staticClass:"profile-fields"},[s("EmojiInput",{attrs:{"enable-emoji-picker":"","hide-emoji-button":"",suggest:t.userSuggestor},model:{value:t.newFields[a].name,callback:function(e){t.$set(t.newFields[a],"name",e)},expression:"newFields[i].name"}},[s("input",{directives:[{name:"model",rawName:"v-model",value:t.newFields[a].name,expression:"newFields[i].name"}],attrs:{placeholder:t.$t("settings.profile_fields.name")},domProps:{value:t.newFields[a].name},on:{input:function(e){e.target.composing||t.$set(t.newFields[a],"name",e.target.value)}}})]),t._v(" "),s("EmojiInput",{attrs:{"enable-emoji-picker":"","hide-emoji-button":"",suggest:t.userSuggestor},model:{value:t.newFields[a].value,callback:function(e){t.$set(t.newFields[a],"value",e)},expression:"newFields[i].value"}},[s("input",{directives:[{name:"model",rawName:"v-model",value:t.newFields[a].value,expression:"newFields[i].value"}],attrs:{placeholder:t.$t("settings.profile_fields.value")},domProps:{value:t.newFields[a].value},on:{input:function(e){e.target.composing||t.$set(t.newFields[a],"value",e.target.value)}}})]),t._v(" "),s("div",{staticClass:"icon-container"},[s("i",{directives:[{name:"show",rawName:"v-show",value:t.newFields.length>1,expression:"newFields.length > 1"}],staticClass:"icon-cancel",on:{click:function(e){return t.deleteField(a)}}})])],1)}),t._v(" "),t.newFields.length0?s("li",[s("div",[t._v("\n "+t._s(t.$t("settings.post_status_content_type"))+"\n "),s("label",{staticClass:"select",attrs:{for:"postContentType"}},[s("select",{directives:[{name:"model",rawName:"v-model",value:t.postContentType,expression:"postContentType"}],attrs:{id:"postContentType"},on:{change:function(e){var s=Array.prototype.filter.call(e.target.options,function(t){return t.selected}).map(function(t){return"_value"in t?t._value:t.value});t.postContentType=e.target.multiple?s:s[0]}}},t._l(t.postFormats,function(e){return s("option",{key:e,domProps:{value:e}},[t._v("\n "+t._s(t.$t('post_status.content_type["'+e+'"]'))+"\n "+t._s(t.postContentTypeDefaultValue===e?t.$t("settings.instance_default_simple"):"")+"\n ")])}),0),t._v(" "),s("i",{staticClass:"icon-down-open"})])])]):t._e(),t._v(" "),s("li",[s("Checkbox",{model:{value:t.minimalScopesMode,callback:function(e){t.minimalScopesMode=e},expression:"minimalScopesMode"}},[t._v("\n "+t._s(t.$t("settings.minimal_scopes_mode"))+" "+t._s(t.$t("settings.instance_default",{value:t.minimalScopesModeLocalizedValue}))+"\n ")])],1),t._v(" "),s("li",[s("Checkbox",{model:{value:t.autohideFloatingPostButton,callback:function(e){t.autohideFloatingPostButton=e},expression:"autohideFloatingPostButton"}},[t._v("\n "+t._s(t.$t("settings.autohide_floating_post_button"))+"\n ")])],1),t._v(" "),s("li",[s("Checkbox",{model:{value:t.padEmoji,callback:function(e){t.padEmoji=e},expression:"padEmoji"}},[t._v("\n "+t._s(t.$t("settings.pad_emoji"))+"\n ")])],1)])]),t._v(" "),s("div",{staticClass:"setting-item"},[s("h2",[t._v(t._s(t.$t("settings.attachments")))]),t._v(" "),s("ul",{staticClass:"setting-list"},[s("li",[s("Checkbox",{model:{value:t.hideAttachments,callback:function(e){t.hideAttachments=e},expression:"hideAttachments"}},[t._v("\n "+t._s(t.$t("settings.hide_attachments_in_tl"))+"\n ")])],1),t._v(" "),s("li",[s("Checkbox",{model:{value:t.hideAttachmentsInConv,callback:function(e){t.hideAttachmentsInConv=e},expression:"hideAttachmentsInConv"}},[t._v("\n "+t._s(t.$t("settings.hide_attachments_in_convo"))+"\n ")])],1),t._v(" "),s("li",[s("label",{attrs:{for:"maxThumbnails"}},[t._v("\n "+t._s(t.$t("settings.max_thumbnails"))+"\n ")]),t._v(" "),s("input",{directives:[{name:"model",rawName:"v-model.number",value:t.maxThumbnails,expression:"maxThumbnails",modifiers:{number:!0}}],staticClass:"number-input",attrs:{id:"maxThumbnails",type:"number",min:"0",step:"1"},domProps:{value:t.maxThumbnails},on:{input:function(e){e.target.composing||(t.maxThumbnails=t._n(e.target.value))},blur:function(e){return t.$forceUpdate()}}})]),t._v(" "),s("li",[s("Checkbox",{model:{value:t.hideNsfw,callback:function(e){t.hideNsfw=e},expression:"hideNsfw"}},[t._v("\n "+t._s(t.$t("settings.nsfw_clickthrough"))+"\n ")])],1),t._v(" "),s("ul",{staticClass:"setting-list suboptions"},[s("li",[s("Checkbox",{attrs:{disabled:!t.hideNsfw},model:{value:t.preloadImage,callback:function(e){t.preloadImage=e},expression:"preloadImage"}},[t._v("\n "+t._s(t.$t("settings.preload_images"))+"\n ")])],1),t._v(" "),s("li",[s("Checkbox",{attrs:{disabled:!t.hideNsfw},model:{value:t.useOneClickNsfw,callback:function(e){t.useOneClickNsfw=e},expression:"useOneClickNsfw"}},[t._v("\n "+t._s(t.$t("settings.use_one_click_nsfw"))+"\n ")])],1)]),t._v(" "),s("li",[s("Checkbox",{model:{value:t.stopGifs,callback:function(e){t.stopGifs=e},expression:"stopGifs"}},[t._v("\n "+t._s(t.$t("settings.stop_gifs"))+"\n ")])],1),t._v(" "),s("li",[s("Checkbox",{model:{value:t.loopVideo,callback:function(e){t.loopVideo=e},expression:"loopVideo"}},[t._v("\n "+t._s(t.$t("settings.loop_video"))+"\n ")]),t._v(" "),s("ul",{staticClass:"setting-list suboptions",class:[{disabled:!t.streaming}]},[s("li",[s("Checkbox",{attrs:{disabled:!t.loopVideo||!t.loopSilentAvailable},model:{value:t.loopVideoSilentOnly,callback:function(e){t.loopVideoSilentOnly=e},expression:"loopVideoSilentOnly"}},[t._v("\n "+t._s(t.$t("settings.loop_video_silent_only"))+"\n ")]),t._v(" "),t.loopSilentAvailable?t._e():s("div",{staticClass:"unavailable"},[s("i",{staticClass:"icon-globe"}),t._v("! "+t._s(t.$t("settings.limited_availability"))+"\n ")])],1)])],1),t._v(" "),s("li",[s("Checkbox",{model:{value:t.playVideosInModal,callback:function(e){t.playVideosInModal=e},expression:"playVideosInModal"}},[t._v("\n "+t._s(t.$t("settings.play_videos_in_modal"))+"\n ")])],1),t._v(" "),s("li",[s("Checkbox",{model:{value:t.useContainFit,callback:function(e){t.useContainFit=e},expression:"useContainFit"}},[t._v("\n "+t._s(t.$t("settings.use_contain_fit"))+"\n ")])],1)])]),t._v(" "),s("div",{staticClass:"setting-item"},[s("h2",[t._v(t._s(t.$t("settings.notifications")))]),t._v(" "),s("ul",{staticClass:"setting-list"},[s("li",[s("Checkbox",{model:{value:t.webPushNotifications,callback:function(e){t.webPushNotifications=e},expression:"webPushNotifications"}},[t._v("\n "+t._s(t.$t("settings.enable_web_push_notifications"))+"\n ")])],1)])]),t._v(" "),s("div",{staticClass:"setting-item"},[s("h2",[t._v(t._s(t.$t("settings.fun")))]),t._v(" "),s("ul",{staticClass:"setting-list"},[s("li",[s("Checkbox",{model:{value:t.greentext,callback:function(e){t.greentext=e},expression:"greentext"}},[t._v("\n "+t._s(t.$t("settings.greentext"))+" "+t._s(t.$t("settings.instance_default",{value:t.greentextLocalizedValue}))+"\n ")])],1)])])])},[],!1,null,null,null).exports,ne={data:function(){var t=this.$store.state.instance;return{backendVersion:t.backendVersion,frontendVersion:t.frontendVersion}},computed:{frontendVersionLink:function(){return"https://git.pleroma.social/pleroma/pleroma-fe/commit/"+this.frontendVersion},backendVersionLink:function(){return"https://git.pleroma.social/pleroma/pleroma/commit/"+(t=this.backendVersion,(e=t.match(/-g(\w+)/i))?e[1]:"");var t,e}}},oe=Object(o.a)(ne,function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("div",{attrs:{label:t.$t("settings.version.title")}},[s("div",{staticClass:"setting-item"},[s("ul",{staticClass:"setting-list"},[s("li",[s("p",[t._v(t._s(t.$t("settings.version.backend_version")))]),t._v(" "),s("ul",{staticClass:"option-list"},[s("li",[s("a",{attrs:{href:t.backendVersionLink,target:"_blank"}},[t._v(t._s(t.backendVersion))])])])]),t._v(" "),s("li",[s("p",[t._v(t._s(t.$t("settings.version.frontend_version")))]),t._v(" "),s("ul",{staticClass:"option-list"},[s("li",[s("a",{attrs:{href:t.frontendVersionLink,target:"_blank"}},[t._v(t._s(t.frontendVersion))])])])])])])])},[],!1,null,null,null).exports,ie=s(9),re=s(32),le=s(29),ce=s(39),ue={components:{Checkbox:d.a},props:{name:{required:!0,type:String},label:{required:!0,type:String},value:{required:!1,type:String,default:void 0},fallback:{required:!1,type:String,default:void 0},disabled:{required:!1,type:Boolean,default:!1},showOptionalTickbox:{required:!1,type:Boolean,default:!0}},computed:{present:function(){return void 0!==this.value},validColor:function(){return Object(ie.f)(this.value||this.fallback)},transparentColor:function(){return"transparent"===this.value},computedColor:function(){return this.value&&this.value.startsWith("--")}}};var de=function(t){s(626),s(628)},pe=Object(o.a)(ue,function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("div",{staticClass:"color-input style-control",class:{disabled:!t.present||t.disabled}},[s("label",{staticClass:"label",attrs:{for:t.name}},[t._v("\n "+t._s(t.label)+"\n ")]),t._v(" "),void 0!==t.fallback&&t.showOptionalTickbox?s("Checkbox",{staticClass:"opt",attrs:{checked:t.present,disabled:t.disabled},on:{change:function(e){return t.$emit("input",void 0===t.value?t.fallback:void 0)}}}):t._e(),t._v(" "),s("div",{staticClass:"input color-input-field"},[s("input",{staticClass:"textColor unstyled",attrs:{id:t.name+"-t",type:"text",disabled:!t.present||t.disabled},domProps:{value:t.value||t.fallback},on:{input:function(e){return t.$emit("input",e.target.value)}}}),t._v(" "),t.validColor?s("input",{staticClass:"nativeColor unstyled",attrs:{id:t.name,type:"color",disabled:!t.present||t.disabled},domProps:{value:t.value||t.fallback},on:{input:function(e){return t.$emit("input",e.target.value)}}}):t._e(),t._v(" "),t.transparentColor?s("div",{staticClass:"transparentIndicator"}):t._e(),t._v(" "),t.computedColor?s("div",{staticClass:"computedIndicator",style:{backgroundColor:t.fallback}}):t._e()])],1)},[],!1,de,null,null).exports,me=Object(o.a)({props:["name","value","fallback","disabled","label","max","min","step","hardMin","hardMax"],computed:{present:function(){return void 0!==this.value}}},function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("div",{staticClass:"range-control style-control",class:{disabled:!t.present||t.disabled}},[s("label",{staticClass:"label",attrs:{for:t.name}},[t._v("\n "+t._s(t.label)+"\n ")]),t._v(" "),void 0!==t.fallback?s("input",{staticClass:"opt",attrs:{id:t.name+"-o",type:"checkbox"},domProps:{checked:t.present},on:{input:function(e){return t.$emit("input",t.present?void 0:t.fallback)}}}):t._e(),t._v(" "),void 0!==t.fallback?s("label",{staticClass:"opt-l",attrs:{for:t.name+"-o"}}):t._e(),t._v(" "),s("input",{staticClass:"input-number",attrs:{id:t.name,type:"range",disabled:!t.present||t.disabled,max:t.max||t.hardMax||100,min:t.min||t.hardMin||0,step:t.step||1},domProps:{value:t.value||t.fallback},on:{input:function(e){return t.$emit("input",e.target.value)}}}),t._v(" "),s("input",{staticClass:"input-number",attrs:{id:t.name,type:"number",disabled:!t.present||t.disabled,max:t.hardMax,min:t.hardMin,step:t.step||1},domProps:{value:t.value||t.fallback},on:{input:function(e){return t.$emit("input",e.target.value)}}})])},[],!1,null,null,null).exports,ve={components:{Checkbox:d.a},props:["name","value","fallback","disabled"],computed:{present:function(){return void 0!==this.value}}},he=Object(o.a)(ve,function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("div",{staticClass:"opacity-control style-control",class:{disabled:!t.present||t.disabled}},[s("label",{staticClass:"label",attrs:{for:t.name}},[t._v("\n "+t._s(t.$t("settings.style.common.opacity"))+"\n ")]),t._v(" "),void 0!==t.fallback?s("Checkbox",{staticClass:"opt",attrs:{checked:t.present,disabled:t.disabled},on:{change:function(e){return t.$emit("input",t.present?void 0:t.fallback)}}}):t._e(),t._v(" "),s("input",{staticClass:"input-number",attrs:{id:t.name,type:"number",disabled:!t.present||t.disabled,max:"1",min:"0",step:".05"},domProps:{value:t.value||t.fallback},on:{input:function(e){return t.$emit("input",e.target.value)}}})],1)},[],!1,null,null,null).exports;function be(t,e){var s=Object.keys(t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(t);e&&(a=a.filter(function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})),s.push.apply(s,a)}return s}var fe=function(){return function(t){for(var e=1;e0&&void 0!==arguments[0]?arguments[0]:{})},ge={props:["value","fallback","ready"],data:function(){return{selectedId:0,cValue:(this.value||this.fallback||[]).map(fe)}},components:{ColorInput:pe,OpacityInput:he},methods:{add:function(){this.cValue.push(fe(this.selected)),this.selectedId=this.cValue.length-1},del:function(){this.cValue.splice(this.selectedId,1),this.selectedId=0===this.cValue.length?void 0:Math.max(this.selectedId-1,0)},moveUp:function(){var t=this.cValue.splice(this.selectedId,1)[0];this.cValue.splice(this.selectedId-1,0,t),this.selectedId-=1},moveDn:function(){var t=this.cValue.splice(this.selectedId,1)[0];this.cValue.splice(this.selectedId+1,0,t),this.selectedId+=1}},beforeUpdate:function(){this.cValue=this.value||this.fallback},computed:{anyShadows:function(){return this.cValue.length>0},anyShadowsFallback:function(){return this.fallback.length>0},selected:function(){return this.ready&&this.anyShadows?this.cValue[this.selectedId]:fe({})},currentFallback:function(){return this.ready&&this.anyShadowsFallback?this.fallback[this.selectedId]:fe({})},moveUpValid:function(){return this.ready&&this.selectedId>0},moveDnValid:function(){return this.ready&&this.selectedId-1:t.selected.inset},on:{change:function(e){var s=t.selected.inset,a=e.target,n=!!a.checked;if(Array.isArray(s)){var o=t._i(s,null);a.checked?o<0&&t.$set(t.selected,"inset",s.concat([null])):o>-1&&t.$set(t.selected,"inset",s.slice(0,o).concat(s.slice(o+1)))}else t.$set(t.selected,"inset",n)}}}),t._v(" "),s("label",{staticClass:"checkbox-label",attrs:{for:"inset"}})]),t._v(" "),s("div",{staticClass:"blur-control style-control",attrs:{disabled:!t.present}},[s("label",{staticClass:"label",attrs:{for:"spread"}},[t._v("\n "+t._s(t.$t("settings.style.shadows.blur"))+"\n ")]),t._v(" "),s("input",{directives:[{name:"model",rawName:"v-model",value:t.selected.blur,expression:"selected.blur"}],staticClass:"input-range",attrs:{id:"blur",disabled:!t.present,name:"blur",type:"range",max:"20",min:"0"},domProps:{value:t.selected.blur},on:{__r:function(e){return t.$set(t.selected,"blur",e.target.value)}}}),t._v(" "),s("input",{directives:[{name:"model",rawName:"v-model",value:t.selected.blur,expression:"selected.blur"}],staticClass:"input-number",attrs:{disabled:!t.present,type:"number",min:"0"},domProps:{value:t.selected.blur},on:{input:function(e){e.target.composing||t.$set(t.selected,"blur",e.target.value)}}})]),t._v(" "),s("div",{staticClass:"spread-control style-control",attrs:{disabled:!t.present}},[s("label",{staticClass:"label",attrs:{for:"spread"}},[t._v("\n "+t._s(t.$t("settings.style.shadows.spread"))+"\n ")]),t._v(" "),s("input",{directives:[{name:"model",rawName:"v-model",value:t.selected.spread,expression:"selected.spread"}],staticClass:"input-range",attrs:{id:"spread",disabled:!t.present,name:"spread",type:"range",max:"20",min:"-20"},domProps:{value:t.selected.spread},on:{__r:function(e){return t.$set(t.selected,"spread",e.target.value)}}}),t._v(" "),s("input",{directives:[{name:"model",rawName:"v-model",value:t.selected.spread,expression:"selected.spread"}],staticClass:"input-number",attrs:{disabled:!t.present,type:"number"},domProps:{value:t.selected.spread},on:{input:function(e){e.target.composing||t.$set(t.selected,"spread",e.target.value)}}})]),t._v(" "),s("ColorInput",{attrs:{disabled:!t.present,label:t.$t("settings.style.common.color"),fallback:t.currentFallback.color,"show-optional-tickbox":!1,name:"shadow"},model:{value:t.selected.color,callback:function(e){t.$set(t.selected,"color",e)},expression:"selected.color"}}),t._v(" "),s("OpacityInput",{attrs:{disabled:!t.present},model:{value:t.selected.alpha,callback:function(e){t.$set(t.selected,"alpha",e)},expression:"selected.alpha"}}),t._v(" "),s("i18n",{attrs:{path:"settings.style.shadows.hintV3",tag:"p"}},[s("code",[t._v("--variable,mod")])])],1)])},[],!1,_e,null,null).exports,Ce={props:["name","label","value","fallback","options","no-inherit"],data:function(){return{lValue:this.value,availableOptions:[this.noInherit?"":"inherit","custom"].concat(z()(this.options||[]),["serif","monospace","sans-serif"]).filter(function(t){return t})}},beforeUpdate:function(){this.lValue=this.value},computed:{present:function(){return void 0!==this.lValue},dValue:function(){return this.lValue||this.fallback||{}},family:{get:function(){return this.dValue.family},set:function(t){Object(q.set)(this.lValue,"family",t),this.$emit("input",this.lValue)}},isCustom:function(){return"custom"===this.preset},preset:{get:function(){return"serif"===this.family||"sans-serif"===this.family||"monospace"===this.family||"inherit"===this.family?this.family:"custom"},set:function(t){this.family="custom"===t?"":t}}}};var xe=function(t){s(632)},ke=Object(o.a)(Ce,function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("div",{staticClass:"font-control style-control",class:{custom:t.isCustom}},[s("label",{staticClass:"label",attrs:{for:"custom"===t.preset?t.name:t.name+"-font-switcher"}},[t._v("\n "+t._s(t.label)+"\n ")]),t._v(" "),void 0!==t.fallback?s("input",{staticClass:"opt exlcude-disabled",attrs:{id:t.name+"-o",type:"checkbox"},domProps:{checked:t.present},on:{input:function(e){return t.$emit("input",void 0===t.value?t.fallback:void 0)}}}):t._e(),t._v(" "),void 0!==t.fallback?s("label",{staticClass:"opt-l",attrs:{for:t.name+"-o"}}):t._e(),t._v(" "),s("label",{staticClass:"select",attrs:{for:t.name+"-font-switcher",disabled:!t.present}},[s("select",{directives:[{name:"model",rawName:"v-model",value:t.preset,expression:"preset"}],staticClass:"font-switcher",attrs:{id:t.name+"-font-switcher",disabled:!t.present},on:{change:function(e){var s=Array.prototype.filter.call(e.target.options,function(t){return t.selected}).map(function(t){return"_value"in t?t._value:t.value});t.preset=e.target.multiple?s:s[0]}}},t._l(t.availableOptions,function(e){return s("option",{key:e,domProps:{value:e}},[t._v("\n "+t._s("custom"===e?t.$t("settings.style.fonts.custom"):e)+"\n ")])}),0),t._v(" "),s("i",{staticClass:"icon-down-open"})]),t._v(" "),t.isCustom?s("input",{directives:[{name:"model",rawName:"v-model",value:t.family,expression:"family"}],staticClass:"custom-font",attrs:{id:t.name,type:"text"},domProps:{value:t.family},on:{input:function(e){e.target.composing||(t.family=e.target.value)}}}):t._e()])},[],!1,xe,null,null).exports,ye={props:{large:{required:!1,type:Boolean,default:!1},contrast:{required:!1,type:Object,default:function(){return{}}}},computed:{hint:function(){var t=this.contrast.aaa?"aaa":this.contrast.aa?"aa":"bad",e=this.$t("settings.style.common.contrast.level.".concat(t)),s=this.$t("settings.style.common.contrast.context.text"),a=this.contrast.text;return this.$t("settings.style.common.contrast.hint",{level:e,context:s,ratio:a})},hint_18pt:function(){var t=this.contrast.laaa?"aaa":this.contrast.laa?"aa":"bad",e=this.$t("settings.style.common.contrast.level.".concat(t)),s=this.$t("settings.style.common.contrast.context.18pt"),a=this.contrast.text;return this.$t("settings.style.common.contrast.hint",{level:e,context:s,ratio:a})}}};var $e=function(t){s(634)},Le=Object(o.a)(ye,function(){var t=this,e=t.$createElement,s=t._self._c||e;return t.contrast?s("span",{staticClass:"contrast-ratio"},[s("span",{staticClass:"rating",attrs:{title:t.hint}},[t.contrast.aaa?s("span",[s("i",{staticClass:"icon-thumbs-up-alt"})]):t._e(),t._v(" "),!t.contrast.aaa&&t.contrast.aa?s("span",[s("i",{staticClass:"icon-adjust"})]):t._e(),t._v(" "),t.contrast.aaa||t.contrast.aa?t._e():s("span",[s("i",{staticClass:"icon-attention"})])]),t._v(" "),t.contrast&&t.large?s("span",{staticClass:"rating",attrs:{title:t.hint_18pt}},[t.contrast.laaa?s("span",[s("i",{staticClass:"icon-thumbs-up-alt"})]):t._e(),t._v(" "),!t.contrast.laaa&&t.contrast.laa?s("span",[s("i",{staticClass:"icon-adjust"})]):t._e(),t._v(" "),t.contrast.laaa||t.contrast.laa?t._e():s("span",[s("i",{staticClass:"icon-attention"})])]):t._e()]):t._e()},[],!1,$e,null,null).exports,Te={props:["exportObject","importLabel","exportLabel","importFailedText","validator","onImport","onImportFailure"],data:function(){return{importFailed:!1}},methods:{exportData:function(){var t=JSON.stringify(this.exportObject,null,2),e=document.createElement("a");e.setAttribute("download","pleroma_theme.json"),e.setAttribute("href","data:application/json;base64,"+window.btoa(t)),e.style.display="none",document.body.appendChild(e),e.click(),document.body.removeChild(e)},importData:function(){var t=this;this.importFailed=!1;var e=document.createElement("input");e.setAttribute("type","file"),e.setAttribute("accept",".json"),e.addEventListener("change",function(e){if(e.target.files[0]){var s=new FileReader;s.onload=function(e){var s=e.target;try{var a=JSON.parse(s.result);t.validator(a)?t.onImport(a):t.importFailed=!0}catch(e){t.importFailed=!0}},s.readAsText(e.target.files[0])}}),document.body.appendChild(e),e.click(),document.body.removeChild(e)}}};var Oe=function(t){s(636)},Pe=Object(o.a)(Te,function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("div",{staticClass:"import-export-container"},[t._t("before"),t._v(" "),s("button",{staticClass:"btn",on:{click:t.exportData}},[t._v("\n "+t._s(t.exportLabel)+"\n ")]),t._v(" "),s("button",{staticClass:"btn",on:{click:t.importData}},[t._v("\n "+t._s(t.importLabel)+"\n ")]),t._v(" "),t._t("afterButtons"),t._v(" "),t.importFailed?s("p",{staticClass:"alert error"},[t._v("\n "+t._s(t.importFailedText)+"\n ")]):t._e(),t._v(" "),t._t("afterError")],2)},[],!1,Oe,null,null).exports;var Se=function(t){s(638)},Ie=Object(o.a)(null,function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("div",{staticClass:"preview-container"},[s("div",{staticClass:"underlay underlay-preview"}),t._v(" "),s("div",{staticClass:"panel dummy"},[s("div",{staticClass:"panel-heading"},[s("div",{staticClass:"title"},[t._v("\n "+t._s(t.$t("settings.style.preview.header"))+"\n "),s("span",{staticClass:"badge badge-notification"},[t._v("\n 99\n ")])]),t._v(" "),s("span",{staticClass:"faint"},[t._v("\n "+t._s(t.$t("settings.style.preview.header_faint"))+"\n ")]),t._v(" "),s("span",{staticClass:"alert error"},[t._v("\n "+t._s(t.$t("settings.style.preview.error"))+"\n ")]),t._v(" "),s("button",{staticClass:"btn"},[t._v("\n "+t._s(t.$t("settings.style.preview.button"))+"\n ")])]),t._v(" "),s("div",{staticClass:"panel-body theme-preview-content"},[s("div",{staticClass:"post"},[s("div",{staticClass:"avatar still-image"},[t._v("\n ( ͡° ͜ʖ ͡°)\n ")]),t._v(" "),s("div",{staticClass:"content"},[s("h4",[t._v("\n "+t._s(t.$t("settings.style.preview.content"))+"\n ")]),t._v(" "),s("i18n",{attrs:{path:"settings.style.preview.text"}},[s("code",{staticStyle:{"font-family":"var(--postCodeFont)"}},[t._v("\n "+t._s(t.$t("settings.style.preview.mono"))+"\n ")]),t._v(" "),s("a",{staticStyle:{color:"var(--link)"}},[t._v("\n "+t._s(t.$t("settings.style.preview.link"))+"\n ")])]),t._v(" "),t._m(0)],1)]),t._v(" "),s("div",{staticClass:"after-post"},[s("div",{staticClass:"avatar-alt"},[t._v("\n :^)\n ")]),t._v(" "),s("div",{staticClass:"content"},[s("i18n",{staticClass:"faint",attrs:{path:"settings.style.preview.fine_print",tag:"span"}},[s("a",{staticStyle:{color:"var(--faintLink)"}},[t._v("\n "+t._s(t.$t("settings.style.preview.faint_link"))+"\n ")])])],1)]),t._v(" "),s("div",{staticClass:"separator"}),t._v(" "),s("span",{staticClass:"alert error"},[t._v("\n "+t._s(t.$t("settings.style.preview.error"))+"\n ")]),t._v(" "),s("input",{attrs:{type:"text"},domProps:{value:t.$t("settings.style.preview.input")}}),t._v(" "),s("div",{staticClass:"actions"},[s("span",{staticClass:"checkbox"},[s("input",{attrs:{id:"preview_checkbox",checked:"very yes",type:"checkbox"}}),t._v(" "),s("label",{attrs:{for:"preview_checkbox"}},[t._v(t._s(t.$t("settings.style.preview.checkbox")))])]),t._v(" "),s("button",{staticClass:"btn"},[t._v("\n "+t._s(t.$t("settings.style.preview.button"))+"\n ")])])])])])},[function(){var t=this.$createElement,e=this._self._c||t;return e("div",{staticClass:"icons"},[e("i",{staticClass:"button-icon icon-reply",staticStyle:{color:"var(--cBlue)"}}),this._v(" "),e("i",{staticClass:"button-icon icon-retweet",staticStyle:{color:"var(--cGreen)"}}),this._v(" "),e("i",{staticClass:"button-icon icon-star",staticStyle:{color:"var(--cOrange)"}}),this._v(" "),e("i",{staticClass:"button-icon icon-cancel",staticStyle:{color:"var(--cRed)"}})])}],!1,Se,null,null).exports;function je(t,e){var s=Object.keys(t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(t);e&&(a=a.filter(function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})),s.push.apply(s,a)}return s}function Ee(t){for(var e=1;ece.a)return t(e+"future_version_imported")+" "+t(i?e+"snapshot_missing":e+"snapshot_present");if(nce.a)return t(e+"fe_downgraded")+" "+t(i?e+"migration_snapshot_ok":e+"migration_snapshot_gone");if(n=4.5,aaa:s>=7,laa:s>=3,laaa:s>=4.5},t},{})}catch(t){console.warn("Failure computing contrasts",t)}},previewRules:function(){return this.preview.rules?[].concat(z()(Object.values(this.preview.rules)),["color: var(--text)","font-family: var(--interfaceFont, sans-serif)"]).join(";"):""},shadowsAvailable:function(){return Object.keys(re.a).sort()},currentShadowOverriden:{get:function(){return!!this.currentShadow},set:function(t){t?Object(q.set)(this.shadowsLocal,this.shadowSelected,this.currentShadowFallback.map(function(t){return Object.assign({},t)})):Object(q.delete)(this.shadowsLocal,this.shadowSelected)}},currentShadowFallback:function(){return(this.previewTheme.shadows||{})[this.shadowSelected]},currentShadow:{get:function(){return this.shadowsLocal[this.shadowSelected]},set:function(t){Object(q.set)(this.shadowsLocal,this.shadowSelected,t)}},themeValid:function(){return!this.shadowsInvalid&&!this.colorsInvalid&&!this.radiiInvalid},exportedTheme:function(){var t=!(this.keepFonts||this.keepShadows||this.keepOpacity||this.keepRoundness||this.keepColor),e={themeEngineVersion:ce.a};return(this.keepFonts||t)&&(e.fonts=this.fontsLocal),(this.keepShadows||t)&&(e.shadows=this.shadowsLocal),(this.keepOpacity||t)&&(e.opacity=this.currentOpacity),(this.keepColor||t)&&(e.colors=this.currentColors),(this.keepRoundness||t)&&(e.radii=this.currentRadii),{_pleroma_theme_version:2,theme:Ee({themeEngineVersion:ce.a},this.previewTheme),source:e}}},components:{ColorInput:pe,OpacityInput:he,RangeInput:me,ContrastRatio:Le,ShadowControl:we,FontControl:ke,TabSwitcher:a.a,Preview:Ie,ExportImport:Pe,Checkbox:d.a},methods:{loadTheme:function(t,e){var s=t.theme,a=t.source,n=t._pleroma_theme_version,o=arguments.length>2&&void 0!==arguments[2]&&arguments[2];if(this.dismissWarning(),!a&&!s)throw new Error("Can't load theme: empty");var i="localStorage"!==e||s.colors?n:"l1",r=(s||{}).themeEngineVersion,l=(a||{}).themeEngineVersion||2,c=l===ce.a,u=void 0!==s&&void 0!==a&&l!==r,d=a&&o||!s;c&&!u||d||"l1"===i||"defaults"===e||(u&&"localStorage"===e?this.themeWarning={origin:e,themeEngineVersion:l,type:"snapshot_source_mismatch"}:s?c||(this.themeWarning={origin:e,noActionsPossible:!a,themeEngineVersion:l,type:"wrong_version"}):this.themeWarning={origin:e,noActionsPossible:!0,themeEngineVersion:l,type:"no_snapshot_old_version"}),this.normalizeLocalState(s,i,a,d)},forceLoadLocalStorage:function(){this.loadThemeFromLocalStorage(!0)},dismissWarning:function(){this.themeWarning=void 0,this.tempImportFile=void 0},forceLoad:function(){switch(this.themeWarning.origin){case"localStorage":this.loadThemeFromLocalStorage(!0);break;case"file":this.onImport(this.tempImportFile,!0)}this.dismissWarning()},forceSnapshot:function(){switch(this.themeWarning.origin){case"localStorage":this.loadThemeFromLocalStorage(!1,!0);break;case"file":console.err("Forcing snapshout from file is not supported yet")}this.dismissWarning()},loadThemeFromLocalStorage:function(){var t=arguments.length>0&&void 0!==arguments[0]&&arguments[0],e=arguments.length>1&&void 0!==arguments[1]&&arguments[1],s=this.$store.getters.mergedConfig,a=s.customTheme,n=s.customThemeSource;a||n?this.loadTheme({theme:a,source:e?a:n},"localStorage",t):this.loadTheme(this.$store.state.instance.themeData,"defaults",t)},setCustomTheme:function(){this.$store.dispatch("setOption",{name:"customTheme",value:Ee({themeEngineVersion:ce.a},this.previewTheme)}),this.$store.dispatch("setOption",{name:"customThemeSource",value:{themeEngineVersion:ce.a,shadows:this.shadowsLocal,fonts:this.fontsLocal,opacity:this.currentOpacity,colors:this.currentColors,radii:this.currentRadii}})},updatePreviewColorsAndShadows:function(){this.previewColors=Object(re.e)({opacity:this.currentOpacity,colors:this.currentColors}),this.previewShadows=Object(re.h)({shadows:this.shadowsLocal,opacity:this.previewTheme.opacity,themeEngineVersion:this.engineVersion},this.previewColors.theme.colors,this.previewColors.mod)},onImport:function(t){var e=arguments.length>1&&void 0!==arguments[1]&&arguments[1];this.tempImportFile=t,this.loadTheme(t,"file",e)},importValidator:function(t){var e=t._pleroma_theme_version;return e>=1||e<=2},clearAll:function(){this.loadThemeFromLocalStorage()},clearV1:function(){var t=this;Object.keys(this.$data).filter(function(t){return t.endsWith("ColorLocal")||t.endsWith("OpacityLocal")}).filter(function(t){return!Re.includes(t)}).forEach(function(e){Object(q.set)(t.$data,e,void 0)})},clearRoundness:function(){var t=this;Object.keys(this.$data).filter(function(t){return t.endsWith("RadiusLocal")}).forEach(function(e){Object(q.set)(t.$data,e,void 0)})},clearOpacity:function(){var t=this;Object.keys(this.$data).filter(function(t){return t.endsWith("OpacityLocal")}).forEach(function(e){Object(q.set)(t.$data,e,void 0)})},clearShadows:function(){this.shadowsLocal={}},clearFonts:function(){this.fontsLocal={}},normalizeLocalState:function(t){var e,s=this,a=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,n=arguments.length>2?arguments[2]:void 0,o=arguments.length>3&&void 0!==arguments[3]&&arguments[3];void 0!==n&&(o||n.themeEngineVersion===ce.a)?(e=n,a=n.themeEngineVersion):e=t;var i=e.radii||e,r=e.opacity,l=e.shadows||{},c=e.fonts||{},u=e.themeEngineVersion?e.colors||e:Object(re.c)(e.colors||e);if(0===a&&(e.version&&(a=e.version),void 0===u.text&&void 0!==u.fg&&(a=1),void 0!==u.text&&void 0!==u.fg&&(a=2)),this.engineVersion=a,1===a&&(this.fgColorLocal=Object(ie.i)(u.btn),this.textColorLocal=Object(ie.i)(u.fg)),!this.keepColor){this.clearV1();var d=new Set(1!==a?Object.keys(le.c):[]);1!==a&&"l1"!==a||d.add("bg").add("link").add("cRed").add("cBlue").add("cGreen").add("cOrange"),d.forEach(function(t){var e=u[t],a=Object(ie.i)(u[t]);s[t+"ColorLocal"]="#aN"===a?e:a})}r&&!this.keepOpacity&&(this.clearOpacity(),Object.entries(r).forEach(function(t){var e=A()(t,2),a=e[0],n=e[1];null==n||Number.isNaN(n)||(s[a+"OpacityLocal"]=n)})),this.keepRoundness||(this.clearRoundness(),Object.entries(i).forEach(function(t){var e=A()(t,2),a=e[0],n=e[1],o=a.endsWith("Radius")?a.split("Radius")[0]:a;s[o+"RadiusLocal"]=n})),this.keepShadows||(this.clearShadows(),this.shadowsLocal=2===a?Object(re.m)(l,this.previewTheme.opacity):l,this.shadowSelected=this.shadowsAvailable[0]),this.keepFonts||(this.clearFonts(),this.fontsLocal=c)}},watch:{currentRadii:function(){try{this.previewRadii=Object(re.g)({radii:this.currentRadii}),this.radiiInvalid=!1}catch(t){this.radiiInvalid=!0,console.warn(t)}},shadowsLocal:{handler:function(){if(1!==Object.getOwnPropertyNames(this.previewColors).length)try{this.updatePreviewColorsAndShadows(),this.shadowsInvalid=!1}catch(t){this.shadowsInvalid=!0,console.warn(t)}},deep:!0},fontsLocal:{handler:function(){try{this.previewFonts=Object(re.f)({fonts:this.fontsLocal}),this.fontsInvalid=!1}catch(t){this.fontsInvalid=!0,console.warn(t)}},deep:!0},currentColors:function(){try{this.updatePreviewColorsAndShadows(),this.colorsInvalid=!1,this.shadowsInvalid=!1}catch(t){this.colorsInvalid=!0,this.shadowsInvalid=!0,console.warn(t)}},currentOpacity:function(){try{this.updatePreviewColorsAndShadows()}catch(t){console.warn(t)}},selected:function(){this.dismissWarning(),1===this.selectedVersion?(this.keepRoundness||this.clearRoundness(),this.keepShadows||this.clearShadows(),this.keepOpacity||this.clearOpacity(),this.keepColor||(this.clearV1(),this.bgColorLocal=this.selected[1],this.fgColorLocal=this.selected[2],this.textColorLocal=this.selected[3],this.linkColorLocal=this.selected[4],this.cRedColorLocal=this.selected[5],this.cGreenColorLocal=this.selected[6],this.cBlueColorLocal=this.selected[7],this.cOrangeColorLocal=this.selected[8])):this.selectedVersion>=2&&this.normalizeLocalState(this.selected.theme,2,this.selected.source)}}};var Fe=function(t){s(624)},Me=Object(o.a)(Be,function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("div",{staticClass:"theme-tab"},[s("div",{staticClass:"presets-container"},[s("div",{staticClass:"save-load"},[t.themeWarning?s("div",{staticClass:"theme-warning"},[s("div",{staticClass:"alert warning"},[t._v("\n "+t._s(t.themeWarningHelp)+"\n ")]),t._v(" "),s("div",{staticClass:"buttons"},["snapshot_source_mismatch"===t.themeWarning.type?[s("button",{staticClass:"btn",on:{click:t.forceLoad}},[t._v("\n "+t._s(t.$t("settings.style.switcher.use_source"))+"\n ")]),t._v(" "),s("button",{staticClass:"btn",on:{click:t.forceSnapshot}},[t._v("\n "+t._s(t.$t("settings.style.switcher.use_snapshot"))+"\n ")])]:t.themeWarning.noActionsPossible?[s("button",{staticClass:"btn",on:{click:t.dismissWarning}},[t._v("\n "+t._s(t.$t("general.dismiss"))+"\n ")])]:[s("button",{staticClass:"btn",on:{click:t.forceLoad}},[t._v("\n "+t._s(t.$t("settings.style.switcher.load_theme"))+"\n ")]),t._v(" "),s("button",{staticClass:"btn",on:{click:t.dismissWarning}},[t._v("\n "+t._s(t.$t("settings.style.switcher.keep_as_is"))+"\n ")])]],2)]):t._e(),t._v(" "),s("ExportImport",{attrs:{"export-object":t.exportedTheme,"export-label":t.$t("settings.export_theme"),"import-label":t.$t("settings.import_theme"),"import-failed-text":t.$t("settings.invalid_theme_imported"),"on-import":t.onImport,validator:t.importValidator}},[s("template",{slot:"before"},[s("div",{staticClass:"presets"},[t._v("\n "+t._s(t.$t("settings.presets"))+"\n "),s("label",{staticClass:"select",attrs:{for:"preset-switcher"}},[s("select",{directives:[{name:"model",rawName:"v-model",value:t.selected,expression:"selected"}],staticClass:"preset-switcher",attrs:{id:"preset-switcher"},on:{change:function(e){var s=Array.prototype.filter.call(e.target.options,function(t){return t.selected}).map(function(t){return"_value"in t?t._value:t.value});t.selected=e.target.multiple?s:s[0]}}},t._l(t.availableStyles,function(e){return s("option",{key:e.name,style:{backgroundColor:e[1]||(e.theme||e.source).colors.bg,color:e[3]||(e.theme||e.source).colors.text},domProps:{value:e}},[t._v("\n "+t._s(e[0]||e.name)+"\n ")])}),0),t._v(" "),s("i",{staticClass:"icon-down-open"})])])])],2)],1),t._v(" "),s("div",{staticClass:"save-load-options"},[s("span",{staticClass:"keep-option"},[s("Checkbox",{model:{value:t.keepColor,callback:function(e){t.keepColor=e},expression:"keepColor"}},[t._v("\n "+t._s(t.$t("settings.style.switcher.keep_color"))+"\n ")])],1),t._v(" "),s("span",{staticClass:"keep-option"},[s("Checkbox",{model:{value:t.keepShadows,callback:function(e){t.keepShadows=e},expression:"keepShadows"}},[t._v("\n "+t._s(t.$t("settings.style.switcher.keep_shadows"))+"\n ")])],1),t._v(" "),s("span",{staticClass:"keep-option"},[s("Checkbox",{model:{value:t.keepOpacity,callback:function(e){t.keepOpacity=e},expression:"keepOpacity"}},[t._v("\n "+t._s(t.$t("settings.style.switcher.keep_opacity"))+"\n ")])],1),t._v(" "),s("span",{staticClass:"keep-option"},[s("Checkbox",{model:{value:t.keepRoundness,callback:function(e){t.keepRoundness=e},expression:"keepRoundness"}},[t._v("\n "+t._s(t.$t("settings.style.switcher.keep_roundness"))+"\n ")])],1),t._v(" "),s("span",{staticClass:"keep-option"},[s("Checkbox",{model:{value:t.keepFonts,callback:function(e){t.keepFonts=e},expression:"keepFonts"}},[t._v("\n "+t._s(t.$t("settings.style.switcher.keep_fonts"))+"\n ")])],1),t._v(" "),s("p",[t._v(t._s(t.$t("settings.style.switcher.save_load_hint")))])])]),t._v(" "),s("preview",{style:t.previewRules}),t._v(" "),s("keep-alive",[s("tab-switcher",{key:"style-tweak"},[s("div",{staticClass:"color-container",attrs:{label:t.$t("settings.style.common_colors._tab_label")}},[s("div",{staticClass:"tab-header"},[s("p",[t._v(t._s(t.$t("settings.theme_help")))]),t._v(" "),s("div",{staticClass:"tab-header-buttons"},[s("button",{staticClass:"btn",on:{click:t.clearOpacity}},[t._v("\n "+t._s(t.$t("settings.style.switcher.clear_opacity"))+"\n ")]),t._v(" "),s("button",{staticClass:"btn",on:{click:t.clearV1}},[t._v("\n "+t._s(t.$t("settings.style.switcher.clear_all"))+"\n ")])])]),t._v(" "),s("p",[t._v(t._s(t.$t("settings.theme_help_v2_1")))]),t._v(" "),s("h4",[t._v(t._s(t.$t("settings.style.common_colors.main")))]),t._v(" "),s("div",{staticClass:"color-item"},[s("ColorInput",{attrs:{name:"bgColor",label:t.$t("settings.background")},model:{value:t.bgColorLocal,callback:function(e){t.bgColorLocal=e},expression:"bgColorLocal"}}),t._v(" "),s("OpacityInput",{attrs:{name:"bgOpacity",fallback:t.previewTheme.opacity.bg},model:{value:t.bgOpacityLocal,callback:function(e){t.bgOpacityLocal=e},expression:"bgOpacityLocal"}}),t._v(" "),s("ColorInput",{attrs:{name:"textColor",label:t.$t("settings.text")},model:{value:t.textColorLocal,callback:function(e){t.textColorLocal=e},expression:"textColorLocal"}}),t._v(" "),s("ContrastRatio",{attrs:{contrast:t.previewContrast.bgText}}),t._v(" "),s("ColorInput",{attrs:{name:"accentColor",fallback:t.previewTheme.colors.link,label:t.$t("settings.accent"),"show-optional-tickbox":void 0!==t.linkColorLocal},model:{value:t.accentColorLocal,callback:function(e){t.accentColorLocal=e},expression:"accentColorLocal"}}),t._v(" "),s("ColorInput",{attrs:{name:"linkColor",fallback:t.previewTheme.colors.accent,label:t.$t("settings.links"),"show-optional-tickbox":void 0!==t.accentColorLocal},model:{value:t.linkColorLocal,callback:function(e){t.linkColorLocal=e},expression:"linkColorLocal"}}),t._v(" "),s("ContrastRatio",{attrs:{contrast:t.previewContrast.bgLink}})],1),t._v(" "),s("div",{staticClass:"color-item"},[s("ColorInput",{attrs:{name:"fgColor",label:t.$t("settings.foreground")},model:{value:t.fgColorLocal,callback:function(e){t.fgColorLocal=e},expression:"fgColorLocal"}}),t._v(" "),s("ColorInput",{attrs:{name:"fgTextColor",label:t.$t("settings.text"),fallback:t.previewTheme.colors.fgText},model:{value:t.fgTextColorLocal,callback:function(e){t.fgTextColorLocal=e},expression:"fgTextColorLocal"}}),t._v(" "),s("ColorInput",{attrs:{name:"fgLinkColor",label:t.$t("settings.links"),fallback:t.previewTheme.colors.fgLink},model:{value:t.fgLinkColorLocal,callback:function(e){t.fgLinkColorLocal=e},expression:"fgLinkColorLocal"}}),t._v(" "),s("p",[t._v(t._s(t.$t("settings.style.common_colors.foreground_hint")))])],1),t._v(" "),s("h4",[t._v(t._s(t.$t("settings.style.common_colors.rgbo")))]),t._v(" "),s("div",{staticClass:"color-item"},[s("ColorInput",{attrs:{name:"cRedColor",label:t.$t("settings.cRed")},model:{value:t.cRedColorLocal,callback:function(e){t.cRedColorLocal=e},expression:"cRedColorLocal"}}),t._v(" "),s("ContrastRatio",{attrs:{contrast:t.previewContrast.bgCRed}}),t._v(" "),s("ColorInput",{attrs:{name:"cBlueColor",label:t.$t("settings.cBlue")},model:{value:t.cBlueColorLocal,callback:function(e){t.cBlueColorLocal=e},expression:"cBlueColorLocal"}}),t._v(" "),s("ContrastRatio",{attrs:{contrast:t.previewContrast.bgCBlue}})],1),t._v(" "),s("div",{staticClass:"color-item"},[s("ColorInput",{attrs:{name:"cGreenColor",label:t.$t("settings.cGreen")},model:{value:t.cGreenColorLocal,callback:function(e){t.cGreenColorLocal=e},expression:"cGreenColorLocal"}}),t._v(" "),s("ContrastRatio",{attrs:{contrast:t.previewContrast.bgCGreen}}),t._v(" "),s("ColorInput",{attrs:{name:"cOrangeColor",label:t.$t("settings.cOrange")},model:{value:t.cOrangeColorLocal,callback:function(e){t.cOrangeColorLocal=e},expression:"cOrangeColorLocal"}}),t._v(" "),s("ContrastRatio",{attrs:{contrast:t.previewContrast.bgCOrange}})],1),t._v(" "),s("p",[t._v(t._s(t.$t("settings.theme_help_v2_2")))])]),t._v(" "),s("div",{staticClass:"color-container",attrs:{label:t.$t("settings.style.advanced_colors._tab_label")}},[s("div",{staticClass:"tab-header"},[s("p",[t._v(t._s(t.$t("settings.theme_help")))]),t._v(" "),s("button",{staticClass:"btn",on:{click:t.clearOpacity}},[t._v("\n "+t._s(t.$t("settings.style.switcher.clear_opacity"))+"\n ")]),t._v(" "),s("button",{staticClass:"btn",on:{click:t.clearV1}},[t._v("\n "+t._s(t.$t("settings.style.switcher.clear_all"))+"\n ")])]),t._v(" "),s("div",{staticClass:"color-item"},[s("h4",[t._v(t._s(t.$t("settings.style.advanced_colors.post")))]),t._v(" "),s("ColorInput",{attrs:{name:"postLinkColor",fallback:t.previewTheme.colors.accent,label:t.$t("settings.links")},model:{value:t.postLinkColorLocal,callback:function(e){t.postLinkColorLocal=e},expression:"postLinkColorLocal"}}),t._v(" "),s("ContrastRatio",{attrs:{contrast:t.previewContrast.postLink}}),t._v(" "),s("ColorInput",{attrs:{name:"postGreentextColor",fallback:t.previewTheme.colors.cGreen,label:t.$t("settings.greentext")},model:{value:t.postGreentextColorLocal,callback:function(e){t.postGreentextColorLocal=e},expression:"postGreentextColorLocal"}}),t._v(" "),s("ContrastRatio",{attrs:{contrast:t.previewContrast.postGreentext}}),t._v(" "),s("h4",[t._v(t._s(t.$t("settings.style.advanced_colors.alert")))]),t._v(" "),s("ColorInput",{attrs:{name:"alertError",label:t.$t("settings.style.advanced_colors.alert_error"),fallback:t.previewTheme.colors.alertError},model:{value:t.alertErrorColorLocal,callback:function(e){t.alertErrorColorLocal=e},expression:"alertErrorColorLocal"}}),t._v(" "),s("ColorInput",{attrs:{name:"alertErrorText",label:t.$t("settings.text"),fallback:t.previewTheme.colors.alertErrorText},model:{value:t.alertErrorTextColorLocal,callback:function(e){t.alertErrorTextColorLocal=e},expression:"alertErrorTextColorLocal"}}),t._v(" "),s("ContrastRatio",{attrs:{contrast:t.previewContrast.alertErrorText,large:""}}),t._v(" "),s("ColorInput",{attrs:{name:"alertWarning",label:t.$t("settings.style.advanced_colors.alert_warning"),fallback:t.previewTheme.colors.alertWarning},model:{value:t.alertWarningColorLocal,callback:function(e){t.alertWarningColorLocal=e},expression:"alertWarningColorLocal"}}),t._v(" "),s("ColorInput",{attrs:{name:"alertWarningText",label:t.$t("settings.text"),fallback:t.previewTheme.colors.alertWarningText},model:{value:t.alertWarningTextColorLocal,callback:function(e){t.alertWarningTextColorLocal=e},expression:"alertWarningTextColorLocal"}}),t._v(" "),s("ContrastRatio",{attrs:{contrast:t.previewContrast.alertWarningText,large:""}}),t._v(" "),s("ColorInput",{attrs:{name:"alertNeutral",label:t.$t("settings.style.advanced_colors.alert_neutral"),fallback:t.previewTheme.colors.alertNeutral},model:{value:t.alertNeutralColorLocal,callback:function(e){t.alertNeutralColorLocal=e},expression:"alertNeutralColorLocal"}}),t._v(" "),s("ColorInput",{attrs:{name:"alertNeutralText",label:t.$t("settings.text"),fallback:t.previewTheme.colors.alertNeutralText},model:{value:t.alertNeutralTextColorLocal,callback:function(e){t.alertNeutralTextColorLocal=e},expression:"alertNeutralTextColorLocal"}}),t._v(" "),s("ContrastRatio",{attrs:{contrast:t.previewContrast.alertNeutralText,large:""}}),t._v(" "),s("OpacityInput",{attrs:{name:"alertOpacity",fallback:t.previewTheme.opacity.alert},model:{value:t.alertOpacityLocal,callback:function(e){t.alertOpacityLocal=e},expression:"alertOpacityLocal"}})],1),t._v(" "),s("div",{staticClass:"color-item"},[s("h4",[t._v(t._s(t.$t("settings.style.advanced_colors.badge")))]),t._v(" "),s("ColorInput",{attrs:{name:"badgeNotification",label:t.$t("settings.style.advanced_colors.badge_notification"),fallback:t.previewTheme.colors.badgeNotification},model:{value:t.badgeNotificationColorLocal,callback:function(e){t.badgeNotificationColorLocal=e},expression:"badgeNotificationColorLocal"}}),t._v(" "),s("ColorInput",{attrs:{name:"badgeNotificationText",label:t.$t("settings.text"),fallback:t.previewTheme.colors.badgeNotificationText},model:{value:t.badgeNotificationTextColorLocal,callback:function(e){t.badgeNotificationTextColorLocal=e},expression:"badgeNotificationTextColorLocal"}}),t._v(" "),s("ContrastRatio",{attrs:{contrast:t.previewContrast.badgeNotificationText,large:""}})],1),t._v(" "),s("div",{staticClass:"color-item"},[s("h4",[t._v(t._s(t.$t("settings.style.advanced_colors.panel_header")))]),t._v(" "),s("ColorInput",{attrs:{name:"panelColor",fallback:t.previewTheme.colors.panel,label:t.$t("settings.background")},model:{value:t.panelColorLocal,callback:function(e){t.panelColorLocal=e},expression:"panelColorLocal"}}),t._v(" "),s("OpacityInput",{attrs:{name:"panelOpacity",fallback:t.previewTheme.opacity.panel,disabled:"transparent"===t.panelColorLocal},model:{value:t.panelOpacityLocal,callback:function(e){t.panelOpacityLocal=e},expression:"panelOpacityLocal"}}),t._v(" "),s("ColorInput",{attrs:{name:"panelTextColor",fallback:t.previewTheme.colors.panelText,label:t.$t("settings.text")},model:{value:t.panelTextColorLocal,callback:function(e){t.panelTextColorLocal=e},expression:"panelTextColorLocal"}}),t._v(" "),s("ContrastRatio",{attrs:{contrast:t.previewContrast.panelText,large:""}}),t._v(" "),s("ColorInput",{attrs:{name:"panelLinkColor",fallback:t.previewTheme.colors.panelLink,label:t.$t("settings.links")},model:{value:t.panelLinkColorLocal,callback:function(e){t.panelLinkColorLocal=e},expression:"panelLinkColorLocal"}}),t._v(" "),s("ContrastRatio",{attrs:{contrast:t.previewContrast.panelLink,large:""}})],1),t._v(" "),s("div",{staticClass:"color-item"},[s("h4",[t._v(t._s(t.$t("settings.style.advanced_colors.top_bar")))]),t._v(" "),s("ColorInput",{attrs:{name:"topBarColor",fallback:t.previewTheme.colors.topBar,label:t.$t("settings.background")},model:{value:t.topBarColorLocal,callback:function(e){t.topBarColorLocal=e},expression:"topBarColorLocal"}}),t._v(" "),s("ColorInput",{attrs:{name:"topBarTextColor",fallback:t.previewTheme.colors.topBarText,label:t.$t("settings.text")},model:{value:t.topBarTextColorLocal,callback:function(e){t.topBarTextColorLocal=e},expression:"topBarTextColorLocal"}}),t._v(" "),s("ContrastRatio",{attrs:{contrast:t.previewContrast.topBarText}}),t._v(" "),s("ColorInput",{attrs:{name:"topBarLinkColor",fallback:t.previewTheme.colors.topBarLink,label:t.$t("settings.links")},model:{value:t.topBarLinkColorLocal,callback:function(e){t.topBarLinkColorLocal=e},expression:"topBarLinkColorLocal"}}),t._v(" "),s("ContrastRatio",{attrs:{contrast:t.previewContrast.topBarLink}})],1),t._v(" "),s("div",{staticClass:"color-item"},[s("h4",[t._v(t._s(t.$t("settings.style.advanced_colors.inputs")))]),t._v(" "),s("ColorInput",{attrs:{name:"inputColor",fallback:t.previewTheme.colors.input,label:t.$t("settings.background")},model:{value:t.inputColorLocal,callback:function(e){t.inputColorLocal=e},expression:"inputColorLocal"}}),t._v(" "),s("OpacityInput",{attrs:{name:"inputOpacity",fallback:t.previewTheme.opacity.input,disabled:"transparent"===t.inputColorLocal},model:{value:t.inputOpacityLocal,callback:function(e){t.inputOpacityLocal=e},expression:"inputOpacityLocal"}}),t._v(" "),s("ColorInput",{attrs:{name:"inputTextColor",fallback:t.previewTheme.colors.inputText,label:t.$t("settings.text")},model:{value:t.inputTextColorLocal,callback:function(e){t.inputTextColorLocal=e},expression:"inputTextColorLocal"}}),t._v(" "),s("ContrastRatio",{attrs:{contrast:t.previewContrast.inputText}})],1),t._v(" "),s("div",{staticClass:"color-item"},[s("h4",[t._v(t._s(t.$t("settings.style.advanced_colors.buttons")))]),t._v(" "),s("ColorInput",{attrs:{name:"btnColor",fallback:t.previewTheme.colors.btn,label:t.$t("settings.background")},model:{value:t.btnColorLocal,callback:function(e){t.btnColorLocal=e},expression:"btnColorLocal"}}),t._v(" "),s("OpacityInput",{attrs:{name:"btnOpacity",fallback:t.previewTheme.opacity.btn,disabled:"transparent"===t.btnColorLocal},model:{value:t.btnOpacityLocal,callback:function(e){t.btnOpacityLocal=e},expression:"btnOpacityLocal"}}),t._v(" "),s("ColorInput",{attrs:{name:"btnTextColor",fallback:t.previewTheme.colors.btnText,label:t.$t("settings.text")},model:{value:t.btnTextColorLocal,callback:function(e){t.btnTextColorLocal=e},expression:"btnTextColorLocal"}}),t._v(" "),s("ContrastRatio",{attrs:{contrast:t.previewContrast.btnText}}),t._v(" "),s("ColorInput",{attrs:{name:"btnPanelTextColor",fallback:t.previewTheme.colors.btnPanelText,label:t.$t("settings.style.advanced_colors.panel_header")},model:{value:t.btnPanelTextColorLocal,callback:function(e){t.btnPanelTextColorLocal=e},expression:"btnPanelTextColorLocal"}}),t._v(" "),s("ContrastRatio",{attrs:{contrast:t.previewContrast.btnPanelText}}),t._v(" "),s("ColorInput",{attrs:{name:"btnTopBarTextColor",fallback:t.previewTheme.colors.btnTopBarText,label:t.$t("settings.style.advanced_colors.top_bar")},model:{value:t.btnTopBarTextColorLocal,callback:function(e){t.btnTopBarTextColorLocal=e},expression:"btnTopBarTextColorLocal"}}),t._v(" "),s("ContrastRatio",{attrs:{contrast:t.previewContrast.btnTopBarText}}),t._v(" "),s("h5",[t._v(t._s(t.$t("settings.style.advanced_colors.pressed")))]),t._v(" "),s("ColorInput",{attrs:{name:"btnPressedColor",fallback:t.previewTheme.colors.btnPressed,label:t.$t("settings.background")},model:{value:t.btnPressedColorLocal,callback:function(e){t.btnPressedColorLocal=e},expression:"btnPressedColorLocal"}}),t._v(" "),s("ColorInput",{attrs:{name:"btnPressedTextColor",fallback:t.previewTheme.colors.btnPressedText,label:t.$t("settings.text")},model:{value:t.btnPressedTextColorLocal,callback:function(e){t.btnPressedTextColorLocal=e},expression:"btnPressedTextColorLocal"}}),t._v(" "),s("ContrastRatio",{attrs:{contrast:t.previewContrast.btnPressedText}}),t._v(" "),s("ColorInput",{attrs:{name:"btnPressedPanelTextColor",fallback:t.previewTheme.colors.btnPressedPanelText,label:t.$t("settings.style.advanced_colors.panel_header")},model:{value:t.btnPressedPanelTextColorLocal,callback:function(e){t.btnPressedPanelTextColorLocal=e},expression:"btnPressedPanelTextColorLocal"}}),t._v(" "),s("ContrastRatio",{attrs:{contrast:t.previewContrast.btnPressedPanelText}}),t._v(" "),s("ColorInput",{attrs:{name:"btnPressedTopBarTextColor",fallback:t.previewTheme.colors.btnPressedTopBarText,label:t.$t("settings.style.advanced_colors.top_bar")},model:{value:t.btnPressedTopBarTextColorLocal,callback:function(e){t.btnPressedTopBarTextColorLocal=e},expression:"btnPressedTopBarTextColorLocal"}}),t._v(" "),s("ContrastRatio",{attrs:{contrast:t.previewContrast.btnPressedTopBarText}}),t._v(" "),s("h5",[t._v(t._s(t.$t("settings.style.advanced_colors.disabled")))]),t._v(" "),s("ColorInput",{attrs:{name:"btnDisabledColor",fallback:t.previewTheme.colors.btnDisabled,label:t.$t("settings.background")},model:{value:t.btnDisabledColorLocal,callback:function(e){t.btnDisabledColorLocal=e},expression:"btnDisabledColorLocal"}}),t._v(" "),s("ColorInput",{attrs:{name:"btnDisabledTextColor",fallback:t.previewTheme.colors.btnDisabledText,label:t.$t("settings.text")},model:{value:t.btnDisabledTextColorLocal,callback:function(e){t.btnDisabledTextColorLocal=e},expression:"btnDisabledTextColorLocal"}}),t._v(" "),s("ColorInput",{attrs:{name:"btnDisabledPanelTextColor",fallback:t.previewTheme.colors.btnDisabledPanelText,label:t.$t("settings.style.advanced_colors.panel_header")},model:{value:t.btnDisabledPanelTextColorLocal,callback:function(e){t.btnDisabledPanelTextColorLocal=e},expression:"btnDisabledPanelTextColorLocal"}}),t._v(" "),s("ColorInput",{attrs:{name:"btnDisabledTopBarTextColor",fallback:t.previewTheme.colors.btnDisabledTopBarText,label:t.$t("settings.style.advanced_colors.top_bar")},model:{value:t.btnDisabledTopBarTextColorLocal,callback:function(e){t.btnDisabledTopBarTextColorLocal=e},expression:"btnDisabledTopBarTextColorLocal"}}),t._v(" "),s("h5",[t._v(t._s(t.$t("settings.style.advanced_colors.toggled")))]),t._v(" "),s("ColorInput",{attrs:{name:"btnToggledColor",fallback:t.previewTheme.colors.btnToggled,label:t.$t("settings.background")},model:{value:t.btnToggledColorLocal,callback:function(e){t.btnToggledColorLocal=e},expression:"btnToggledColorLocal"}}),t._v(" "),s("ColorInput",{attrs:{name:"btnToggledTextColor",fallback:t.previewTheme.colors.btnToggledText,label:t.$t("settings.text")},model:{value:t.btnToggledTextColorLocal,callback:function(e){t.btnToggledTextColorLocal=e},expression:"btnToggledTextColorLocal"}}),t._v(" "),s("ContrastRatio",{attrs:{contrast:t.previewContrast.btnToggledText}}),t._v(" "),s("ColorInput",{attrs:{name:"btnToggledPanelTextColor",fallback:t.previewTheme.colors.btnToggledPanelText,label:t.$t("settings.style.advanced_colors.panel_header")},model:{value:t.btnToggledPanelTextColorLocal,callback:function(e){t.btnToggledPanelTextColorLocal=e},expression:"btnToggledPanelTextColorLocal"}}),t._v(" "),s("ContrastRatio",{attrs:{contrast:t.previewContrast.btnToggledPanelText}}),t._v(" "),s("ColorInput",{attrs:{name:"btnToggledTopBarTextColor",fallback:t.previewTheme.colors.btnToggledTopBarText,label:t.$t("settings.style.advanced_colors.top_bar")},model:{value:t.btnToggledTopBarTextColorLocal,callback:function(e){t.btnToggledTopBarTextColorLocal=e},expression:"btnToggledTopBarTextColorLocal"}}),t._v(" "),s("ContrastRatio",{attrs:{contrast:t.previewContrast.btnToggledTopBarText}})],1),t._v(" "),s("div",{staticClass:"color-item"},[s("h4",[t._v(t._s(t.$t("settings.style.advanced_colors.tabs")))]),t._v(" "),s("ColorInput",{attrs:{name:"tabColor",fallback:t.previewTheme.colors.tab,label:t.$t("settings.background")},model:{value:t.tabColorLocal,callback:function(e){t.tabColorLocal=e},expression:"tabColorLocal"}}),t._v(" "),s("ColorInput",{attrs:{name:"tabTextColor",fallback:t.previewTheme.colors.tabText,label:t.$t("settings.text")},model:{value:t.tabTextColorLocal,callback:function(e){t.tabTextColorLocal=e},expression:"tabTextColorLocal"}}),t._v(" "),s("ContrastRatio",{attrs:{contrast:t.previewContrast.tabText}}),t._v(" "),s("ColorInput",{attrs:{name:"tabActiveTextColor",fallback:t.previewTheme.colors.tabActiveText,label:t.$t("settings.text")},model:{value:t.tabActiveTextColorLocal,callback:function(e){t.tabActiveTextColorLocal=e},expression:"tabActiveTextColorLocal"}}),t._v(" "),s("ContrastRatio",{attrs:{contrast:t.previewContrast.tabActiveText}})],1),t._v(" "),s("div",{staticClass:"color-item"},[s("h4",[t._v(t._s(t.$t("settings.style.advanced_colors.borders")))]),t._v(" "),s("ColorInput",{attrs:{name:"borderColor",fallback:t.previewTheme.colors.border,label:t.$t("settings.style.common.color")},model:{value:t.borderColorLocal,callback:function(e){t.borderColorLocal=e},expression:"borderColorLocal"}}),t._v(" "),s("OpacityInput",{attrs:{name:"borderOpacity",fallback:t.previewTheme.opacity.border,disabled:"transparent"===t.borderColorLocal},model:{value:t.borderOpacityLocal,callback:function(e){t.borderOpacityLocal=e},expression:"borderOpacityLocal"}})],1),t._v(" "),s("div",{staticClass:"color-item"},[s("h4",[t._v(t._s(t.$t("settings.style.advanced_colors.faint_text")))]),t._v(" "),s("ColorInput",{attrs:{name:"faintColor",fallback:t.previewTheme.colors.faint,label:t.$t("settings.text")},model:{value:t.faintColorLocal,callback:function(e){t.faintColorLocal=e},expression:"faintColorLocal"}}),t._v(" "),s("ColorInput",{attrs:{name:"faintLinkColor",fallback:t.previewTheme.colors.faintLink,label:t.$t("settings.links")},model:{value:t.faintLinkColorLocal,callback:function(e){t.faintLinkColorLocal=e},expression:"faintLinkColorLocal"}}),t._v(" "),s("ColorInput",{attrs:{name:"panelFaintColor",fallback:t.previewTheme.colors.panelFaint,label:t.$t("settings.style.advanced_colors.panel_header")},model:{value:t.panelFaintColorLocal,callback:function(e){t.panelFaintColorLocal=e},expression:"panelFaintColorLocal"}}),t._v(" "),s("OpacityInput",{attrs:{name:"faintOpacity",fallback:t.previewTheme.opacity.faint},model:{value:t.faintOpacityLocal,callback:function(e){t.faintOpacityLocal=e},expression:"faintOpacityLocal"}})],1),t._v(" "),s("div",{staticClass:"color-item"},[s("h4",[t._v(t._s(t.$t("settings.style.advanced_colors.underlay")))]),t._v(" "),s("ColorInput",{attrs:{name:"underlay",label:t.$t("settings.style.advanced_colors.underlay"),fallback:t.previewTheme.colors.underlay},model:{value:t.underlayColorLocal,callback:function(e){t.underlayColorLocal=e},expression:"underlayColorLocal"}}),t._v(" "),s("OpacityInput",{attrs:{name:"underlayOpacity",fallback:t.previewTheme.opacity.underlay,disabled:"transparent"===t.underlayOpacityLocal},model:{value:t.underlayOpacityLocal,callback:function(e){t.underlayOpacityLocal=e},expression:"underlayOpacityLocal"}})],1),t._v(" "),s("div",{staticClass:"color-item"},[s("h4",[t._v(t._s(t.$t("settings.style.advanced_colors.poll")))]),t._v(" "),s("ColorInput",{attrs:{name:"poll",label:t.$t("settings.background"),fallback:t.previewTheme.colors.poll},model:{value:t.pollColorLocal,callback:function(e){t.pollColorLocal=e},expression:"pollColorLocal"}}),t._v(" "),s("ColorInput",{attrs:{name:"pollText",label:t.$t("settings.text"),fallback:t.previewTheme.colors.pollText},model:{value:t.pollTextColorLocal,callback:function(e){t.pollTextColorLocal=e},expression:"pollTextColorLocal"}})],1),t._v(" "),s("div",{staticClass:"color-item"},[s("h4",[t._v(t._s(t.$t("settings.style.advanced_colors.icons")))]),t._v(" "),s("ColorInput",{attrs:{name:"icon",label:t.$t("settings.style.advanced_colors.icons"),fallback:t.previewTheme.colors.icon},model:{value:t.iconColorLocal,callback:function(e){t.iconColorLocal=e},expression:"iconColorLocal"}})],1),t._v(" "),s("div",{staticClass:"color-item"},[s("h4",[t._v(t._s(t.$t("settings.style.advanced_colors.highlight")))]),t._v(" "),s("ColorInput",{attrs:{name:"highlight",label:t.$t("settings.background"),fallback:t.previewTheme.colors.highlight},model:{value:t.highlightColorLocal,callback:function(e){t.highlightColorLocal=e},expression:"highlightColorLocal"}}),t._v(" "),s("ColorInput",{attrs:{name:"highlightText",label:t.$t("settings.text"),fallback:t.previewTheme.colors.highlightText},model:{value:t.highlightTextColorLocal,callback:function(e){t.highlightTextColorLocal=e},expression:"highlightTextColorLocal"}}),t._v(" "),s("ContrastRatio",{attrs:{contrast:t.previewContrast.highlightText}}),t._v(" "),s("ColorInput",{attrs:{name:"highlightLink",label:t.$t("settings.links"),fallback:t.previewTheme.colors.highlightLink},model:{value:t.highlightLinkColorLocal,callback:function(e){t.highlightLinkColorLocal=e},expression:"highlightLinkColorLocal"}}),t._v(" "),s("ContrastRatio",{attrs:{contrast:t.previewContrast.highlightLink}})],1),t._v(" "),s("div",{staticClass:"color-item"},[s("h4",[t._v(t._s(t.$t("settings.style.advanced_colors.popover")))]),t._v(" "),s("ColorInput",{attrs:{name:"popover",label:t.$t("settings.background"),fallback:t.previewTheme.colors.popover},model:{value:t.popoverColorLocal,callback:function(e){t.popoverColorLocal=e},expression:"popoverColorLocal"}}),t._v(" "),s("OpacityInput",{attrs:{name:"popoverOpacity",fallback:t.previewTheme.opacity.popover,disabled:"transparent"===t.popoverOpacityLocal},model:{value:t.popoverOpacityLocal,callback:function(e){t.popoverOpacityLocal=e},expression:"popoverOpacityLocal"}}),t._v(" "),s("ColorInput",{attrs:{name:"popoverText",label:t.$t("settings.text"),fallback:t.previewTheme.colors.popoverText},model:{value:t.popoverTextColorLocal,callback:function(e){t.popoverTextColorLocal=e},expression:"popoverTextColorLocal"}}),t._v(" "),s("ContrastRatio",{attrs:{contrast:t.previewContrast.popoverText}}),t._v(" "),s("ColorInput",{attrs:{name:"popoverLink",label:t.$t("settings.links"),fallback:t.previewTheme.colors.popoverLink},model:{value:t.popoverLinkColorLocal,callback:function(e){t.popoverLinkColorLocal=e},expression:"popoverLinkColorLocal"}}),t._v(" "),s("ContrastRatio",{attrs:{contrast:t.previewContrast.popoverLink}})],1),t._v(" "),s("div",{staticClass:"color-item"},[s("h4",[t._v(t._s(t.$t("settings.style.advanced_colors.selectedPost")))]),t._v(" "),s("ColorInput",{attrs:{name:"selectedPost",label:t.$t("settings.background"),fallback:t.previewTheme.colors.selectedPost},model:{value:t.selectedPostColorLocal,callback:function(e){t.selectedPostColorLocal=e},expression:"selectedPostColorLocal"}}),t._v(" "),s("ColorInput",{attrs:{name:"selectedPostText",label:t.$t("settings.text"),fallback:t.previewTheme.colors.selectedPostText},model:{value:t.selectedPostTextColorLocal,callback:function(e){t.selectedPostTextColorLocal=e},expression:"selectedPostTextColorLocal"}}),t._v(" "),s("ContrastRatio",{attrs:{contrast:t.previewContrast.selectedPostText}}),t._v(" "),s("ColorInput",{attrs:{name:"selectedPostLink",label:t.$t("settings.links"),fallback:t.previewTheme.colors.selectedPostLink},model:{value:t.selectedPostLinkColorLocal,callback:function(e){t.selectedPostLinkColorLocal=e},expression:"selectedPostLinkColorLocal"}}),t._v(" "),s("ContrastRatio",{attrs:{contrast:t.previewContrast.selectedPostLink}})],1),t._v(" "),s("div",{staticClass:"color-item"},[s("h4",[t._v(t._s(t.$t("settings.style.advanced_colors.selectedMenu")))]),t._v(" "),s("ColorInput",{attrs:{name:"selectedMenu",label:t.$t("settings.background"),fallback:t.previewTheme.colors.selectedMenu},model:{value:t.selectedMenuColorLocal,callback:function(e){t.selectedMenuColorLocal=e},expression:"selectedMenuColorLocal"}}),t._v(" "),s("ColorInput",{attrs:{name:"selectedMenuText",label:t.$t("settings.text"),fallback:t.previewTheme.colors.selectedMenuText},model:{value:t.selectedMenuTextColorLocal,callback:function(e){t.selectedMenuTextColorLocal=e},expression:"selectedMenuTextColorLocal"}}),t._v(" "),s("ContrastRatio",{attrs:{contrast:t.previewContrast.selectedMenuText}}),t._v(" "),s("ColorInput",{attrs:{name:"selectedMenuLink",label:t.$t("settings.links"),fallback:t.previewTheme.colors.selectedMenuLink},model:{value:t.selectedMenuLinkColorLocal,callback:function(e){t.selectedMenuLinkColorLocal=e},expression:"selectedMenuLinkColorLocal"}}),t._v(" "),s("ContrastRatio",{attrs:{contrast:t.previewContrast.selectedMenuLink}})],1),t._v(" "),s("div",{staticClass:"color-item"},[s("h4",[t._v(t._s(t.$t("chats.chats")))]),t._v(" "),s("ColorInput",{attrs:{name:"chatBgColor",fallback:t.previewTheme.colors.bg,label:t.$t("settings.background")},model:{value:t.chatBgColorLocal,callback:function(e){t.chatBgColorLocal=e},expression:"chatBgColorLocal"}}),t._v(" "),s("h5",[t._v(t._s(t.$t("settings.style.advanced_colors.chat.incoming")))]),t._v(" "),s("ColorInput",{attrs:{name:"chatMessageIncomingBgColor",fallback:t.previewTheme.colors.bg,label:t.$t("settings.background")},model:{value:t.chatMessageIncomingBgColorLocal,callback:function(e){t.chatMessageIncomingBgColorLocal=e},expression:"chatMessageIncomingBgColorLocal"}}),t._v(" "),s("ColorInput",{attrs:{name:"chatMessageIncomingTextColor",fallback:t.previewTheme.colors.text,label:t.$t("settings.text")},model:{value:t.chatMessageIncomingTextColorLocal,callback:function(e){t.chatMessageIncomingTextColorLocal=e},expression:"chatMessageIncomingTextColorLocal"}}),t._v(" "),s("ColorInput",{attrs:{name:"chatMessageIncomingLinkColor",fallback:t.previewTheme.colors.link,label:t.$t("settings.links")},model:{value:t.chatMessageIncomingLinkColorLocal,callback:function(e){t.chatMessageIncomingLinkColorLocal=e},expression:"chatMessageIncomingLinkColorLocal"}}),t._v(" "),s("ColorInput",{attrs:{name:"chatMessageIncomingBorderLinkColor",fallback:t.previewTheme.colors.fg,label:t.$t("settings.style.advanced_colors.chat.border")},model:{value:t.chatMessageIncomingBorderColorLocal,callback:function(e){t.chatMessageIncomingBorderColorLocal=e},expression:"chatMessageIncomingBorderColorLocal"}}),t._v(" "),s("h5",[t._v(t._s(t.$t("settings.style.advanced_colors.chat.outgoing")))]),t._v(" "),s("ColorInput",{attrs:{name:"chatMessageOutgoingBgColor",fallback:t.previewTheme.colors.bg,label:t.$t("settings.background")},model:{value:t.chatMessageOutgoingBgColorLocal,callback:function(e){t.chatMessageOutgoingBgColorLocal=e},expression:"chatMessageOutgoingBgColorLocal"}}),t._v(" "),s("ColorInput",{attrs:{name:"chatMessageOutgoingTextColor",fallback:t.previewTheme.colors.text,label:t.$t("settings.text")},model:{value:t.chatMessageOutgoingTextColorLocal,callback:function(e){t.chatMessageOutgoingTextColorLocal=e},expression:"chatMessageOutgoingTextColorLocal"}}),t._v(" "),s("ColorInput",{attrs:{name:"chatMessageOutgoingLinkColor",fallback:t.previewTheme.colors.link,label:t.$t("settings.links")},model:{value:t.chatMessageOutgoingLinkColorLocal,callback:function(e){t.chatMessageOutgoingLinkColorLocal=e},expression:"chatMessageOutgoingLinkColorLocal"}}),t._v(" "),s("ColorInput",{attrs:{name:"chatMessageOutgoingBorderLinkColor",fallback:t.previewTheme.colors.bg,label:t.$t("settings.style.advanced_colors.chat.border")},model:{value:t.chatMessageOutgoingBorderColorLocal,callback:function(e){t.chatMessageOutgoingBorderColorLocal=e},expression:"chatMessageOutgoingBorderColorLocal"}})],1)]),t._v(" "),s("div",{staticClass:"radius-container",attrs:{label:t.$t("settings.style.radii._tab_label")}},[s("div",{staticClass:"tab-header"},[s("p",[t._v(t._s(t.$t("settings.radii_help")))]),t._v(" "),s("button",{staticClass:"btn",on:{click:t.clearRoundness}},[t._v("\n "+t._s(t.$t("settings.style.switcher.clear_all"))+"\n ")])]),t._v(" "),s("RangeInput",{attrs:{name:"btnRadius",label:t.$t("settings.btnRadius"),fallback:t.previewTheme.radii.btn,max:"16","hard-min":"0"},model:{value:t.btnRadiusLocal,callback:function(e){t.btnRadiusLocal=e},expression:"btnRadiusLocal"}}),t._v(" "),s("RangeInput",{attrs:{name:"inputRadius",label:t.$t("settings.inputRadius"),fallback:t.previewTheme.radii.input,max:"9","hard-min":"0"},model:{value:t.inputRadiusLocal,callback:function(e){t.inputRadiusLocal=e},expression:"inputRadiusLocal"}}),t._v(" "),s("RangeInput",{attrs:{name:"checkboxRadius",label:t.$t("settings.checkboxRadius"),fallback:t.previewTheme.radii.checkbox,max:"16","hard-min":"0"},model:{value:t.checkboxRadiusLocal,callback:function(e){t.checkboxRadiusLocal=e},expression:"checkboxRadiusLocal"}}),t._v(" "),s("RangeInput",{attrs:{name:"panelRadius",label:t.$t("settings.panelRadius"),fallback:t.previewTheme.radii.panel,max:"50","hard-min":"0"},model:{value:t.panelRadiusLocal,callback:function(e){t.panelRadiusLocal=e},expression:"panelRadiusLocal"}}),t._v(" "),s("RangeInput",{attrs:{name:"avatarRadius",label:t.$t("settings.avatarRadius"),fallback:t.previewTheme.radii.avatar,max:"28","hard-min":"0"},model:{value:t.avatarRadiusLocal,callback:function(e){t.avatarRadiusLocal=e},expression:"avatarRadiusLocal"}}),t._v(" "),s("RangeInput",{attrs:{name:"avatarAltRadius",label:t.$t("settings.avatarAltRadius"),fallback:t.previewTheme.radii.avatarAlt,max:"28","hard-min":"0"},model:{value:t.avatarAltRadiusLocal,callback:function(e){t.avatarAltRadiusLocal=e},expression:"avatarAltRadiusLocal"}}),t._v(" "),s("RangeInput",{attrs:{name:"attachmentRadius",label:t.$t("settings.attachmentRadius"),fallback:t.previewTheme.radii.attachment,max:"50","hard-min":"0"},model:{value:t.attachmentRadiusLocal,callback:function(e){t.attachmentRadiusLocal=e},expression:"attachmentRadiusLocal"}}),t._v(" "),s("RangeInput",{attrs:{name:"tooltipRadius",label:t.$t("settings.tooltipRadius"),fallback:t.previewTheme.radii.tooltip,max:"50","hard-min":"0"},model:{value:t.tooltipRadiusLocal,callback:function(e){t.tooltipRadiusLocal=e},expression:"tooltipRadiusLocal"}}),t._v(" "),s("RangeInput",{attrs:{name:"chatMessageRadius",label:t.$t("settings.chatMessageRadius"),fallback:t.previewTheme.radii.chatMessage||2,max:"50","hard-min":"0"},model:{value:t.chatMessageRadiusLocal,callback:function(e){t.chatMessageRadiusLocal=e},expression:"chatMessageRadiusLocal"}})],1),t._v(" "),s("div",{staticClass:"shadow-container",attrs:{label:t.$t("settings.style.shadows._tab_label")}},[s("div",{staticClass:"tab-header shadow-selector"},[s("div",{staticClass:"select-container"},[t._v("\n "+t._s(t.$t("settings.style.shadows.component"))+"\n "),s("label",{staticClass:"select",attrs:{for:"shadow-switcher"}},[s("select",{directives:[{name:"model",rawName:"v-model",value:t.shadowSelected,expression:"shadowSelected"}],staticClass:"shadow-switcher",attrs:{id:"shadow-switcher"},on:{change:function(e){var s=Array.prototype.filter.call(e.target.options,function(t){return t.selected}).map(function(t){return"_value"in t?t._value:t.value});t.shadowSelected=e.target.multiple?s:s[0]}}},t._l(t.shadowsAvailable,function(e){return s("option",{key:e,domProps:{value:e}},[t._v("\n "+t._s(t.$t("settings.style.shadows.components."+e))+"\n ")])}),0),t._v(" "),s("i",{staticClass:"icon-down-open"})])]),t._v(" "),s("div",{staticClass:"override"},[s("label",{staticClass:"label",attrs:{for:"override"}},[t._v("\n "+t._s(t.$t("settings.style.shadows.override"))+"\n ")]),t._v(" "),s("input",{directives:[{name:"model",rawName:"v-model",value:t.currentShadowOverriden,expression:"currentShadowOverriden"}],staticClass:"input-override",attrs:{id:"override",name:"override",type:"checkbox"},domProps:{checked:Array.isArray(t.currentShadowOverriden)?t._i(t.currentShadowOverriden,null)>-1:t.currentShadowOverriden},on:{change:function(e){var s=t.currentShadowOverriden,a=e.target,n=!!a.checked;if(Array.isArray(s)){var o=t._i(s,null);a.checked?o<0&&(t.currentShadowOverriden=s.concat([null])):o>-1&&(t.currentShadowOverriden=s.slice(0,o).concat(s.slice(o+1)))}else t.currentShadowOverriden=n}}}),t._v(" "),s("label",{staticClass:"checkbox-label",attrs:{for:"override"}})]),t._v(" "),s("button",{staticClass:"btn",on:{click:t.clearShadows}},[t._v("\n "+t._s(t.$t("settings.style.switcher.clear_all"))+"\n ")])]),t._v(" "),s("ShadowControl",{attrs:{ready:!!t.currentShadowFallback,fallback:t.currentShadowFallback},model:{value:t.currentShadow,callback:function(e){t.currentShadow=e},expression:"currentShadow"}}),t._v(" "),"avatar"===t.shadowSelected||"avatarStatus"===t.shadowSelected?s("div",[s("i18n",{attrs:{path:"settings.style.shadows.filter_hint.always_drop_shadow",tag:"p"}},[s("code",[t._v("filter: drop-shadow()")])]),t._v(" "),s("p",[t._v(t._s(t.$t("settings.style.shadows.filter_hint.avatar_inset")))]),t._v(" "),s("i18n",{attrs:{path:"settings.style.shadows.filter_hint.drop_shadow_syntax",tag:"p"}},[s("code",[t._v("drop-shadow")]),t._v(" "),s("code",[t._v("spread-radius")]),t._v(" "),s("code",[t._v("inset")])]),t._v(" "),s("i18n",{attrs:{path:"settings.style.shadows.filter_hint.inset_classic",tag:"p"}},[s("code",[t._v("box-shadow")])]),t._v(" "),s("p",[t._v(t._s(t.$t("settings.style.shadows.filter_hint.spread_zero")))])],1):t._e()],1),t._v(" "),s("div",{staticClass:"fonts-container",attrs:{label:t.$t("settings.style.fonts._tab_label")}},[s("div",{staticClass:"tab-header"},[s("p",[t._v(t._s(t.$t("settings.style.fonts.help")))]),t._v(" "),s("button",{staticClass:"btn",on:{click:t.clearFonts}},[t._v("\n "+t._s(t.$t("settings.style.switcher.clear_all"))+"\n ")])]),t._v(" "),s("FontControl",{attrs:{name:"ui",label:t.$t("settings.style.fonts.components.interface"),fallback:t.previewTheme.fonts.interface,"no-inherit":"1"},model:{value:t.fontsLocal.interface,callback:function(e){t.$set(t.fontsLocal,"interface",e)},expression:"fontsLocal.interface"}}),t._v(" "),s("FontControl",{attrs:{name:"input",label:t.$t("settings.style.fonts.components.input"),fallback:t.previewTheme.fonts.input},model:{value:t.fontsLocal.input,callback:function(e){t.$set(t.fontsLocal,"input",e)},expression:"fontsLocal.input"}}),t._v(" "),s("FontControl",{attrs:{name:"post",label:t.$t("settings.style.fonts.components.post"),fallback:t.previewTheme.fonts.post},model:{value:t.fontsLocal.post,callback:function(e){t.$set(t.fontsLocal,"post",e)},expression:"fontsLocal.post"}}),t._v(" "),s("FontControl",{attrs:{name:"postCode",label:t.$t("settings.style.fonts.components.postCode"),fallback:t.previewTheme.fonts.postCode},model:{value:t.fontsLocal.postCode,callback:function(e){t.$set(t.fontsLocal,"postCode",e)},expression:"fontsLocal.postCode"}})],1)])],1),t._v(" "),s("div",{staticClass:"apply-container"},[s("button",{staticClass:"btn submit",attrs:{disabled:!t.themeValid},on:{click:t.setCustomTheme}},[t._v("\n "+t._s(t.$t("general.apply"))+"\n ")]),t._v(" "),s("button",{staticClass:"btn",on:{click:t.clearAll}},[t._v("\n "+t._s(t.$t("settings.style.switcher.reset"))+"\n ")])])],1)},[],!1,Fe,null,null).exports,Ue={components:{TabSwitcher:a.a,DataImportExportTab:m,MutesAndBlocksTab:nt,NotificationsTab:it,FilteringTab:ft,SecurityTab:Et,ProfileTab:Qt,GeneralTab:ae,VersionTab:oe,ThemeTab:Me},computed:{isLoggedIn:function(){return!!this.$store.state.users.currentUser},open:function(){return"hidden"!==this.$store.state.interface.settingsModalState}},methods:{onOpen:function(){var t=this.$store.state.interface.settingsModalTargetTab;if(t){var e=this.$refs.tabSwitcher.$slots.default.findIndex(function(e){return e.data&&e.data.attrs["data-tab-name"]===t});e>=0&&this.$refs.tabSwitcher.setTab(e)}this.$store.dispatch("clearSettingsModalTargetTab")}},mounted:function(){this.onOpen()},watch:{open:function(t){t&&this.onOpen()}}};var Ve=function(t){s(591)},Ae=Object(o.a)(Ue,function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("tab-switcher",{ref:"tabSwitcher",staticClass:"settings_tab-switcher",attrs:{"side-tab-bar":!0,"scrollable-tabs":!0}},[s("div",{attrs:{label:t.$t("settings.general"),icon:"wrench","data-tab-name":"general"}},[s("GeneralTab")],1),t._v(" "),t.isLoggedIn?s("div",{attrs:{label:t.$t("settings.profile_tab"),icon:"user","data-tab-name":"profile"}},[s("ProfileTab")],1):t._e(),t._v(" "),t.isLoggedIn?s("div",{attrs:{label:t.$t("settings.security_tab"),icon:"lock","data-tab-name":"security"}},[s("SecurityTab")],1):t._e(),t._v(" "),s("div",{attrs:{label:t.$t("settings.filtering"),icon:"filter","data-tab-name":"filtering"}},[s("FilteringTab")],1),t._v(" "),s("div",{attrs:{label:t.$t("settings.theme"),icon:"brush","data-tab-name":"theme"}},[s("ThemeTab")],1),t._v(" "),t.isLoggedIn?s("div",{attrs:{label:t.$t("settings.notifications"),icon:"bell-ringing-o","data-tab-name":"notifications"}},[s("NotificationsTab")],1):t._e(),t._v(" "),t.isLoggedIn?s("div",{attrs:{label:t.$t("settings.data_import_export_tab"),icon:"download","data-tab-name":"dataImportExport"}},[s("DataImportExportTab")],1):t._e(),t._v(" "),t.isLoggedIn?s("div",{attrs:{label:t.$t("settings.mutes_and_blocks"),fullHeight:!0,icon:"eye-off","data-tab-name":"mutesAndBlocks"}},[s("MutesAndBlocksTab")],1):t._e(),t._v(" "),s("div",{attrs:{label:t.$t("settings.version.title"),icon:"info-circled","data-tab-name":"version"}},[s("VersionTab")],1)])},[],!1,Ve,null,null);e.default=Ae.exports}}]); +//# sourceMappingURL=2.e852a6b4b3bba752b838.js.map \ No newline at end of file diff --git a/priv/static/static/js/2.e852a6b4b3bba752b838.js.map b/priv/static/static/js/2.e852a6b4b3bba752b838.js.map new file mode 100644 index 000000000..d698f09e1 --- /dev/null +++ b/priv/static/static/js/2.e852a6b4b3bba752b838.js.map @@ -0,0 +1 @@ +{"version":3,"sources":["webpack:///./src/components/settings_modal/settings_modal_content.scss?d424","webpack:///./src/components/settings_modal/settings_modal_content.scss","webpack:///./src/components/importer/importer.vue?7798","webpack:///./src/components/importer/importer.vue?6af6","webpack:///./src/components/exporter/exporter.vue?dea3","webpack:///./src/components/exporter/exporter.vue?cc2b","webpack:///./src/components/settings_modal/tabs/mutes_and_blocks_tab.scss?4d0c","webpack:///./src/components/settings_modal/tabs/mutes_and_blocks_tab.scss","webpack:///./src/components/autosuggest/autosuggest.vue?9908","webpack:///./src/components/autosuggest/autosuggest.vue?9383","webpack:///./src/components/block_card/block_card.vue?7ad7","webpack:///./src/components/block_card/block_card.vue?ddc8","webpack:///./src/components/mute_card/mute_card.vue?c72f","webpack:///./src/components/mute_card/mute_card.vue?1268","webpack:///./src/components/domain_mute_card/domain_mute_card.vue?a613","webpack:///./src/components/domain_mute_card/domain_mute_card.vue?c85e","webpack:///./src/components/selectable_list/selectable_list.vue?a6e3","webpack:///./src/components/selectable_list/selectable_list.vue?c2f8","webpack:///./src/components/settings_modal/tabs/security_tab/mfa.vue?540b","webpack:///./src/components/settings_modal/tabs/security_tab/mfa.vue?cd9f","webpack:///./src/components/settings_modal/tabs/security_tab/mfa_backup_codes.vue?da3d","webpack:///./src/components/settings_modal/tabs/security_tab/mfa_backup_codes.vue?57b8","webpack:///./src/components/settings_modal/tabs/profile_tab.scss?588b","webpack:///./src/components/settings_modal/tabs/profile_tab.scss","webpack:///./src/components/image_cropper/image_cropper.vue?f169","webpack:///./src/components/image_cropper/image_cropper.vue?6235","webpack:///./src/components/settings_modal/tabs/theme_tab/theme_tab.scss?080d","webpack:///./src/components/settings_modal/tabs/theme_tab/theme_tab.scss","webpack:///./src/components/color_input/color_input.scss?c457","webpack:///./src/components/color_input/color_input.scss","webpack:///./src/components/color_input/color_input.vue?6a4c","webpack:///./src/components/color_input/color_input.vue?bb22","webpack:///./src/components/shadow_control/shadow_control.vue?bfd4","webpack:///./src/components/shadow_control/shadow_control.vue?78ef","webpack:///./src/components/font_control/font_control.vue?5f33","webpack:///./src/components/font_control/font_control.vue?bef4","webpack:///./src/components/contrast_ratio/contrast_ratio.vue?a340","webpack:///./src/components/contrast_ratio/contrast_ratio.vue?32fa","webpack:///./src/components/export_import/export_import.vue?5952","webpack:///./src/components/export_import/export_import.vue?aed6","webpack:///./src/components/settings_modal/tabs/theme_tab/preview.vue?1ae8","webpack:///./src/components/settings_modal/tabs/theme_tab/preview.vue?ab81","webpack:///./src/components/importer/importer.js","webpack:///./src/components/importer/importer.vue","webpack:///./src/components/importer/importer.vue?320c","webpack:///./src/components/exporter/exporter.js","webpack:///./src/components/exporter/exporter.vue","webpack:///./src/components/exporter/exporter.vue?7e42","webpack:///./src/components/settings_modal/tabs/data_import_export_tab.js","webpack:///./src/components/settings_modal/tabs/data_import_export_tab.vue","webpack:///./src/components/settings_modal/tabs/data_import_export_tab.vue?40b4","webpack:///./src/components/autosuggest/autosuggest.js","webpack:///./src/components/autosuggest/autosuggest.vue","webpack:///./src/components/autosuggest/autosuggest.vue?b400","webpack:///./src/components/block_card/block_card.js","webpack:///./src/components/block_card/block_card.vue","webpack:///./src/components/block_card/block_card.vue?7b44","webpack:///./src/components/mute_card/mute_card.js","webpack:///./src/components/mute_card/mute_card.vue","webpack:///./src/components/mute_card/mute_card.vue?6bc9","webpack:///./src/components/domain_mute_card/domain_mute_card.js","webpack:///./src/components/domain_mute_card/domain_mute_card.vue","webpack:///./src/components/domain_mute_card/domain_mute_card.vue?7cf0","webpack:///./src/components/selectable_list/selectable_list.js","webpack:///./src/components/selectable_list/selectable_list.vue","webpack:///./src/components/selectable_list/selectable_list.vue?5686","webpack:///./src/hocs/with_subscription/with_subscription.js","webpack:///./src/components/settings_modal/tabs/mutes_and_blocks_tab.js","webpack:///./src/components/settings_modal/tabs/mutes_and_blocks_tab.vue","webpack:///./src/components/settings_modal/tabs/mutes_and_blocks_tab.vue?0687","webpack:///./src/components/settings_modal/tabs/notifications_tab.js","webpack:///./src/components/settings_modal/tabs/notifications_tab.vue","webpack:///./src/components/settings_modal/tabs/notifications_tab.vue?6dcc","webpack:///./src/components/settings_modal/helpers/shared_computed_object.js","webpack:///./src/components/settings_modal/tabs/filtering_tab.js","webpack:///./src/components/settings_modal/tabs/filtering_tab.vue","webpack:///./src/components/settings_modal/tabs/filtering_tab.vue?3af7","webpack:///./src/components/settings_modal/tabs/security_tab/mfa_backup_codes.js","webpack:///./src/components/settings_modal/tabs/security_tab/mfa_backup_codes.vue","webpack:///./src/components/settings_modal/tabs/security_tab/mfa_backup_codes.vue?198f","webpack:///./src/components/settings_modal/tabs/security_tab/confirm.js","webpack:///./src/components/settings_modal/tabs/security_tab/confirm.vue","webpack:///./src/components/settings_modal/tabs/security_tab/confirm.vue?da03","webpack:///./src/components/settings_modal/tabs/security_tab/mfa_totp.js","webpack:///./src/components/settings_modal/tabs/security_tab/mfa.js","webpack:///./src/components/settings_modal/tabs/security_tab/mfa_totp.vue","webpack:///./src/components/settings_modal/tabs/security_tab/mfa_totp.vue?cdbe","webpack:///./src/components/settings_modal/tabs/security_tab/mfa.vue","webpack:///./src/components/settings_modal/tabs/security_tab/mfa.vue?8795","webpack:///./src/components/settings_modal/tabs/security_tab/security_tab.js","webpack:///./src/components/settings_modal/tabs/security_tab/security_tab.vue","webpack:///./src/components/settings_modal/tabs/security_tab/security_tab.vue?0d38","webpack:///./src/components/image_cropper/image_cropper.js","webpack:///./src/components/image_cropper/image_cropper.vue","webpack:///./src/components/image_cropper/image_cropper.vue?017e","webpack:///./src/components/settings_modal/tabs/profile_tab.js","webpack:///./src/components/settings_modal/tabs/profile_tab.vue","webpack:///./src/components/settings_modal/tabs/profile_tab.vue?4eea","webpack:///src/components/interface_language_switcher/interface_language_switcher.vue","webpack:///./src/components/interface_language_switcher/interface_language_switcher.vue","webpack:///./src/components/interface_language_switcher/interface_language_switcher.vue?d9d4","webpack:///./src/components/settings_modal/tabs/general_tab.js","webpack:///./src/components/settings_modal/tabs/general_tab.vue","webpack:///./src/components/settings_modal/tabs/general_tab.vue?2e10","webpack:///./src/components/settings_modal/tabs/version_tab.js","webpack:///./src/services/version/version.service.js","webpack:///./src/components/settings_modal/tabs/version_tab.vue","webpack:///./src/components/settings_modal/tabs/version_tab.vue?7cbe","webpack:///src/components/color_input/color_input.vue","webpack:///./src/components/color_input/color_input.vue","webpack:///./src/components/color_input/color_input.vue?3d5b","webpack:///./src/components/range_input/range_input.vue","webpack:///src/components/range_input/range_input.vue","webpack:///./src/components/range_input/range_input.vue?202a","webpack:///src/components/opacity_input/opacity_input.vue","webpack:///./src/components/opacity_input/opacity_input.vue","webpack:///./src/components/opacity_input/opacity_input.vue?0078","webpack:///./src/components/shadow_control/shadow_control.js","webpack:///./src/components/shadow_control/shadow_control.vue","webpack:///./src/components/shadow_control/shadow_control.vue?c9d6","webpack:///./src/components/font_control/font_control.js","webpack:///./src/components/font_control/font_control.vue","webpack:///./src/components/font_control/font_control.vue?184b","webpack:///src/components/contrast_ratio/contrast_ratio.vue","webpack:///./src/components/contrast_ratio/contrast_ratio.vue","webpack:///./src/components/contrast_ratio/contrast_ratio.vue?efc3","webpack:///src/components/export_import/export_import.vue","webpack:///./src/components/export_import/export_import.vue","webpack:///./src/components/export_import/export_import.vue?9130","webpack:///./src/components/settings_modal/tabs/theme_tab/preview.vue","webpack:///./src/components/settings_modal/tabs/theme_tab/preview.vue?4c36","webpack:///./src/components/settings_modal/tabs/theme_tab/theme_tab.js","webpack:///./src/components/settings_modal/tabs/theme_tab/theme_tab.vue","webpack:///./src/components/settings_modal/tabs/theme_tab/theme_tab.vue?1515","webpack:///./src/components/settings_modal/settings_modal_content.js","webpack:///./src/components/settings_modal/settings_modal_content.vue","webpack:///./src/components/settings_modal/settings_modal_content.vue?458b"],"names":["content","__webpack_require__","module","i","locals","exports","add","default","push","Importer","props","submitHandler","type","Function","required","submitButtonLabel","String","this","$t","successMessage","errorMessage","data","file","error","success","submitting","methods","change","$refs","input","files","submit","_this","dismiss","then","__vue_styles__","context","importer_importer","Object","component_normalizer","importer","_vm","_h","$createElement","_c","_self","staticClass","ref","attrs","on","_v","click","_s","_e","Exporter","getContent","filename","exportButtonLabel","processingMessage","processing","process","fileToDownload","document","createElement","setAttribute","encodeURIComponent","style","display","body","appendChild","removeChild","setTimeout","exporter_vue_styles_","exporter_exporter","exporter","DataImportExportTab","activeTab","newDomainToMute","created","$store","dispatch","components","Checkbox","computed","user","state","users","currentUser","getFollowsContent","api","backendInteractor","exportFriends","id","generateExportableUsersContent","getBlocksContent","fetchBlocks","importFollows","status","Error","importBlocks","map","is_local","screen_name","location","hostname","join","tabs_data_import_export_tab","data_import_export_tab","label","submit-handler","success-message","error-message","get-content","export-button-label","autosuggest","query","filter","placeholder","term","timeout","results","resultsVisible","filtered","watch","val","fetchResults","clearTimeout","onInputClick","onClickOutside","autosuggest_vue_styles_","autosuggest_autosuggest","directives","name","rawName","value","expression","domProps","$event","target","composing","length","_l","item","_t","BlockCard","progress","getters","findUser","userId","relationship","blocked","blocking","BasicUserCard","unblockUser","blockUser","_this2","block_card_vue_styles_","block_card_block_card","block_card","disabled","MuteCard","muted","muting","unmuteUser","muteUser","mute_card_vue_styles_","mute_card_mute_card","mute_card","DomainMuteCard","ProgressButton","domainMutes","includes","domain","unmuteDomain","muteDomain","domain_mute_card_vue_styles_","domain_mute_card_domain_mute_card","domain_mute_card","slot","SelectableList","List","items","Array","getKey","selected","allKeys","filteredSelected","key","indexOf","allSelected","noneSelected","someSelected","isSelected","toggle","checked","splice","toggleAll","slice","selectable_list_vue_styles_","selectable_list_selectable_list","selectable_list","indeterminate","get-key","scopedSlots","_u","fn","class","selectable-list-item-selected-inner","withSubscription","_ref","fetch","select","_ref$childPropName","childPropName","_ref$additionalPropNa","additionalPropNames","WrappedComponent","keys","getComponentProps","v","concat","Vue","component","toConsumableArray_default","loading","fetchedData","$props","refresh","isEmpty","fetchData","render","h","_objectSpread","defineProperty_default","$listeners","$scopedSlots","children","entries","$slots","_ref2","_ref3","slicedToArray_default","helper_default","BlockList","get","MuteList","DomainMuteList","MutesAndBlocks","TabSwitcher","Autosuggest","knownDomains","instance","activateTab","tabName","filterUnblockedUsers","userIds","reject","filterUnMutedUsers","queryUserIds","blockUsers","ids","unblockUsers","muteUsers","unmuteUsers","filterUnMutedDomains","urls","_this3","url","queryKnownDomains","_this4","Promise","resolve","toLowerCase","unmuteDomains","domains","mutes_and_blocks_tab_vue_styles_","tabs_mutes_and_blocks_tab","mutes_and_blocks_tab","scrollable-tabs","row","user-id","NotificationsTab","notificationSettings","notification_settings","updateNotificationSettings","settings","tabs_notifications_tab","notifications_tab","model","callback","$$v","$set","SharedComputedObject","shared_computed_object_objectSpread","instanceDefaultProperties","multiChoiceProperties","instanceDefaultConfig","reduce","acc","_ref4","configDefaultState","mergedConfig","set","_ref5","_ref6","useStreamingApi","e","console","FilteringTab","muteWordsStringLocal","muteWords","filtering_tab_objectSpread","muteWordsString","filter_default","split","word","trim_default","notificationVisibility","handler","deep","replyVisibility","tabs_filtering_tab","filtering_tab","for","$$selectedVal","prototype","call","options","o","_value","multiple","hidePostStats","hidePostStatsLocalizedValue","hideUserStats","hideUserStatsLocalizedValue","hideFilteredStatuses","hideFilteredStatusesLocalizedValue","mfa_backup_codes","backupCodes","inProgress","codes","ready","displayTitle","mfa_backup_codes_vue_styles_","security_tab_mfa_backup_codes","code","Confirm","confirm","$emit","cancel","tabs_security_tab_confirm","security_tab_confirm","mfa_totp","currentPassword","deactivate","mfa_totp_objectSpread","isActivated","totp","mapState","doActivate","cancelDeactivate","doDeactivate","confirmDeactivate","mfaDisableOTP","password","res","Mfa","available","enabled","setupState","setupOTPState","getNewCodes","otpSettings","provisioning_uri","otpConfirmToken","readyInit","recovery-codes","RecoveryCodes","totp-item","qrcode","VueQrcode","mfa_objectSpread","canSetupOTP","setupInProgress","backupCodesPrepared","setupOTPInProgress","completedOTP","prepareOTP","confirmOTP","confirmNewBackupCodes","activateOTP","fetchBackupCodes","generateMfaBackupCodes","getBackupCodes","confirmBackupCodes","cancelBackupCodes","setupOTP","mfaSetupOTP","doConfirmOTP","mfaConfirmOTP","token","completeSetup","fetchSettings","cancelSetup","result","regenerator_default","a","async","_context","prev","next","awrap","settingsMFA","sent","abrupt","stop","mounted","_this5","mfa_vue_styles_","security_tab_mfa","mfa","activate","backup-codes","width","SecurityTab","newEmail","changeEmailError","changeEmailPassword","changedEmail","deletingAccount","deleteAccountConfirmPasswordInput","deleteAccountError","changePasswordInputs","changedPassword","changePasswordError","pleromaBackend","oauthTokens","tokens","oauthToken","appName","app_name","validUntil","Date","valid_until","toLocaleDateString","confirmDelete","deleteAccount","$router","changePassword","params","newPassword","newPasswordConfirmation","logout","changeEmail","email","replace","revokeToken","window","$i18n","t","security_tab_security_tab","security_tab","autocomplete","ImageCropper","trigger","Element","cropperOptions","aspectRatio","autoCropArea","viewMode","movable","zoomable","guides","mimes","saveButtonLabel","saveWithoutCroppingButtonlabel","cancelButtonLabel","cropper","undefined","dataUrl","submitError","saveText","saveWithoutCroppingText","cancelText","submitErrorMsg","toString","destroy","cropping","arguments","avatarUploadError","err","pickImage","createCropper","Cropper","img","getTriggerDOM","typeof_default","querySelector","readFile","fileInput","reader","FileReader","onload","readAsDataURL","clearError","addEventListener","beforeDestroy","removeEventListener","image_cropper_vue_styles_","image_cropper_image_cropper","image_cropper","src","alt","load","stopPropagation","textContent","accept","ProfileTab","newName","newBio","unescape","description","newLocked","locked","newNoRichText","no_rich_text","newDefaultScope","default_scope","newFields","fields","field","hideFollows","hide_follows","hideFollowers","hide_followers","hideFollowsCount","hide_follows_count","hideFollowersCount","hide_followers_count","showRole","show_role","role","discoverable","bot","allowFollowingMove","allow_following_move","pickAvatarBtnVisible","bannerUploading","backgroundUploading","banner","bannerPreview","background","backgroundPreview","bannerUploadError","backgroundUploadError","ScopeSelector","EmojiInput","emojiUserSuggestor","suggestor","emoji","customEmoji","updateUsersList","emojiSuggestor","userSuggestor","fieldsLimits","maxFields","defaultAvatar","server","defaultBanner","isDefaultAvatar","baseAvatar","profile_image_url","isDefaultBanner","baseBanner","cover_photo","isDefaultBackground","background_image","avatarImgSrc","profile_image_url_original","bannerImgSrc","updateProfile","note","display_name","fields_attributes","el","merge","commit","changeVis","visibility","addField","deleteField","index","event","$delete","uploadFile","size","filesize","fileSizeFormatService","fileSizeFormat","allowedsize","num","filesizeunit","unit","allowedsizeunit","resetAvatar","submitAvatar","resetBanner","submitBanner","resetBackground","submitBackground","that","updateAvatar","avatar","updateProfileImages","message","getCroppedCanvas","toBlob","_this6","profile_tab_vue_styles_","tabs_profile_tab","profile_tab","enable-emoji-picker","suggest","classname","show-all","user-default","initial-scope","on-scope-change","_","hide-emoji-button","title","open","close","clearUploadError","interface_language_switcher","languageCodes","messages","languages","languageNames","map_default","getLanguageName","language","interfaceLanguage","ja","ja_easy","zh","getName","interface_language_switcher_interface_language_switcher","langCode","GeneralTab","loopSilentAvailable","getOwnPropertyDescriptor","HTMLVideoElement","HTMLMediaElement","InterfaceLanguageSwitcher","general_tab_objectSpread","postFormats","instanceSpecificPanelPresent","showInstanceSpecificPanel","tabs_general_tab","general_tab","hideISP","hideMutedPosts","hideMutedPostsLocalizedValue","collapseMessageWithSubject","collapseMessageWithSubjectLocalizedValue","streaming","pauseOnUnfocused","emojiReactionsOnTimeline","scopeCopy","scopeCopyLocalizedValue","alwaysShowSubjectInput","alwaysShowSubjectInputLocalizedValue","subjectLineBehavior","subjectLineBehaviorDefaultValue","postContentType","postFormat","postContentTypeDefaultValue","minimalScopesMode","minimalScopesModeLocalizedValue","autohideFloatingPostButton","padEmoji","hideAttachments","hideAttachmentsInConv","modifiers","number","min","step","maxThumbnails","_n","blur","$forceUpdate","hideNsfw","preloadImage","useOneClickNsfw","stopGifs","loopVideo","loopVideoSilentOnly","playVideosInModal","useContainFit","webPushNotifications","greentext","greentextLocalizedValue","VersionTab","backendVersion","frontendVersion","frontendVersionLink","backendVersionLink","versionString","matches","match","tabs_version_tab","version_tab","href","color_input","checkbox_checkbox","fallback","Boolean","showOptionalTickbox","present","validColor","color_convert","transparentColor","computedColor","startsWith","color_input_vue_styles_","color_input_color_input","backgroundColor","range_input_range_input","max","hardMax","hardMin","opacity_input","opacity_input_opacity_input","toModel","shadow_control_objectSpread","x","y","spread","inset","color","alpha","shadow_control","selectedId","cValue","ColorInput","OpacityInput","del","Math","moveUp","moveDn","beforeUpdate","anyShadows","anyShadowsFallback","currentFallback","moveUpValid","moveDnValid","usingFallback","rgb","hex2rgb","boxShadow","getCssShadow","shadow_control_vue_styles_","shadow_control_shadow_control","__r","shadow","isArray","_i","$$a","$$el","$$c","$$i","show-optional-tickbox","path","tag","font_control","lValue","availableOptions","noInherit","dValue","family","isCustom","preset","font_control_vue_styles_","font_control_font_control","custom","option","contrast_ratio","large","contrast","hint","levelVal","aaa","aa","level","ratio","text","hint_18pt","laaa","laa","contrast_ratio_vue_styles_","contrast_ratio_contrast_ratio","export_import","importFailed","exportData","stringified","JSON","stringify","exportObject","btoa","importData","filePicker","parsed","parse","validator","onImport","readAsText","export_import_vue_styles_","export_import_export_import","exportLabel","importLabel","importFailedText","preview_vue_styles_","theme_tab_preview","staticStyle","font-family","_m","v1OnlyNames","theme_tab","theme_tab_objectSpread","availableStyles","theme","themeWarning","tempImportFile","engineVersion","previewShadows","previewColors","previewRadii","previewFonts","shadowsInvalid","colorsInvalid","radiiInvalid","keepColor","keepShadows","keepOpacity","keepRoundness","keepFonts","SLOT_INHERITANCE","OPACITIES","shadowSelected","shadowsLocal","fontsLocal","btnRadiusLocal","inputRadiusLocal","checkboxRadiusLocal","panelRadiusLocal","avatarRadiusLocal","avatarAltRadiusLocal","attachmentRadiusLocal","tooltipRadiusLocal","chatMessageRadiusLocal","self","getThemes","promises","all","k","themes","_ref7","_ref8","themesComplete","loadThemeFromLocalStorage","shadowsAvailable","themeWarningHelp","pre","_this$themeWarning","origin","themeEngineVersion","noActionsPossible","CURRENT_VERSION","selectedVersion","currentColors","_ref9","_ref10","currentOpacity","_ref11","_ref12","currentRadii","btn","checkbox","panel","avatarAlt","tooltip","attachment","chatMessage","preview","composePreset","previewTheme","colors","opacity","radii","shadows","fonts","previewContrast","bg","colorsConverted","_ref13","_ref14","ratios","_ref15","_ref16","slotIsBaseText","textColor","_ref17","layer","variant","opacitySlot","getOpacitySlot","textColors","layers","getLayers","textColorKey","newKey","toUpperCase","getContrastRatioLayers","_ref18","_ref19","toPrecision","warn","previewRules","rules","values","DEFAULT_SHADOWS","sort","currentShadowOverriden","currentShadow","currentShadowFallback","assign","themeValid","exportedTheme","saveEverything","source","_pleroma_theme_version","RangeInput","ContrastRatio","ShadowControl","FontControl","Preview","ExportImport","loadTheme","_ref20","fileVersion","forceUseSource","dismissWarning","version","snapshotEngineVersion","versionsMatch","sourceSnapshotMismatch","forcedSourceLoad","normalizeLocalState","forceLoadLocalStorage","forceLoad","forceSnapshot","confirmLoadSource","_this$$store$getters$","customTheme","customThemeSource","themeData","setCustomTheme","updatePreviewColorsAndShadows","generateColors","generateShadows","mod","forceSource","importValidator","clearAll","clearV1","$data","endsWith","forEach","clearRoundness","clearOpacity","clearShadows","clearFonts","colors2to3","fg","fgColorLocal","rgb2hex","textColorLocal","Set","hex","_ref21","_ref22","Number","isNaN","_ref23","_ref24","shadows2to3","generateRadii","getOwnPropertyNames","generateFonts","fontsInvalid","bgColorLocal","linkColorLocal","cRedColorLocal","cGreenColorLocal","cBlueColorLocal","cOrangeColorLocal","theme_tab_vue_styles_","theme_tab_theme_tab","export-object","export-label","import-label","import-failed-text","on-import","bgOpacityLocal","bgText","link","accentColorLocal","accent","bgLink","fgText","fgTextColorLocal","fgLink","fgLinkColorLocal","bgCRed","bgCBlue","bgCGreen","bgCOrange","postLinkColorLocal","postLink","cGreen","postGreentextColorLocal","postGreentext","alertError","alertErrorColorLocal","alertErrorText","alertErrorTextColorLocal","alertWarning","alertWarningColorLocal","alertWarningText","alertWarningTextColorLocal","alertNeutral","alertNeutralColorLocal","alertNeutralText","alertNeutralTextColorLocal","alert","alertOpacityLocal","badgeNotification","badgeNotificationColorLocal","badgeNotificationText","badgeNotificationTextColorLocal","panelColorLocal","panelOpacityLocal","panelText","panelTextColorLocal","panelLink","panelLinkColorLocal","topBar","topBarColorLocal","topBarText","topBarTextColorLocal","topBarLink","topBarLinkColorLocal","inputColorLocal","inputOpacityLocal","inputText","inputTextColorLocal","btnColorLocal","btnOpacityLocal","btnText","btnTextColorLocal","btnPanelText","btnPanelTextColorLocal","btnTopBarText","btnTopBarTextColorLocal","btnPressed","btnPressedColorLocal","btnPressedText","btnPressedTextColorLocal","btnPressedPanelText","btnPressedPanelTextColorLocal","btnPressedTopBarText","btnPressedTopBarTextColorLocal","btnDisabled","btnDisabledColorLocal","btnDisabledText","btnDisabledTextColorLocal","btnDisabledPanelText","btnDisabledPanelTextColorLocal","btnDisabledTopBarText","btnDisabledTopBarTextColorLocal","btnToggled","btnToggledColorLocal","btnToggledText","btnToggledTextColorLocal","btnToggledPanelText","btnToggledPanelTextColorLocal","btnToggledTopBarText","btnToggledTopBarTextColorLocal","tab","tabColorLocal","tabText","tabTextColorLocal","tabActiveText","tabActiveTextColorLocal","border","borderColorLocal","borderOpacityLocal","faint","faintColorLocal","faintLink","faintLinkColorLocal","panelFaint","panelFaintColorLocal","faintOpacityLocal","underlay","underlayColorLocal","underlayOpacityLocal","poll","pollColorLocal","pollText","pollTextColorLocal","icon","iconColorLocal","highlight","highlightColorLocal","highlightText","highlightTextColorLocal","highlightLink","highlightLinkColorLocal","popover","popoverColorLocal","popoverOpacityLocal","popoverText","popoverTextColorLocal","popoverLink","popoverLinkColorLocal","selectedPost","selectedPostColorLocal","selectedPostText","selectedPostTextColorLocal","selectedPostLink","selectedPostLinkColorLocal","selectedMenu","selectedMenuColorLocal","selectedMenuText","selectedMenuTextColorLocal","selectedMenuLink","selectedMenuLinkColorLocal","chatBgColorLocal","chatMessageIncomingBgColorLocal","chatMessageIncomingTextColorLocal","chatMessageIncomingLinkColorLocal","chatMessageIncomingBorderColorLocal","chatMessageOutgoingBgColorLocal","chatMessageOutgoingTextColorLocal","chatMessageOutgoingLinkColorLocal","chatMessageOutgoingBorderColorLocal","hard-min","interface","no-inherit","post","postCode","SettingsModalContent","MutesAndBlocksTab","ThemeTab","isLoggedIn","settingsModalState","onOpen","targetTab","settingsModalTargetTab","tabIndex","tabSwitcher","findIndex","elm","setTab","settings_modal_content_vue_styles_","settings_modal_content_Component","settings_modal_content","side-tab-bar","data-tab-name","fullHeight","__webpack_exports__"],"mappings":"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","file":"static/js/2.e852a6b4b3bba752b838.js","sourcesContent":["// style-loader: Adds some css to the DOM by adding a \n\n\n\n","function injectStyle (context) {\n require(\"!!vue-style-loader!css-loader?minimize!../../../node_modules/vue-loader/lib/style-compiler/index?{\\\"optionsId\\\":\\\"0\\\",\\\"vue\\\":true,\\\"scoped\\\":false,\\\"sourceMap\\\":false}!sass-loader!./color_input.scss\")\n require(\"!!vue-style-loader!css-loader?minimize!../../../node_modules/vue-loader/lib/style-compiler/index?{\\\"optionsId\\\":\\\"0\\\",\\\"vue\\\":true,\\\"scoped\\\":false,\\\"sourceMap\\\":false}!sass-loader!../../../node_modules/vue-loader/lib/selector?type=styles&index=1!./color_input.vue\")\n}\n/* script */\nexport * from \"!!babel-loader!../../../node_modules/vue-loader/lib/selector?type=script&index=0!./color_input.vue\"\nimport __vue_script__ from \"!!babel-loader!../../../node_modules/vue-loader/lib/selector?type=script&index=0!./color_input.vue\"\n/* template */\nimport {render as __vue_render__, staticRenderFns as __vue_static_render_fns__} from \"!!../../../node_modules/vue-loader/lib/template-compiler/index?{\\\"id\\\":\\\"data-v-77e407b6\\\",\\\"hasScoped\\\":false,\\\"optionsId\\\":\\\"0\\\",\\\"buble\\\":{\\\"transforms\\\":{}}}!../../../node_modules/vue-loader/lib/selector?type=template&index=0!./color_input.vue\"\n/* template functional */\nvar __vue_template_functional__ = false\n/* styles */\nvar __vue_styles__ = injectStyle\n/* scopeId */\nvar __vue_scopeId__ = null\n/* moduleIdentifier (server only) */\nvar __vue_module_identifier__ = null\nimport normalizeComponent from \"!../../../node_modules/vue-loader/lib/runtime/component-normalizer\"\nvar Component = normalizeComponent(\n __vue_script__,\n __vue_render__,\n __vue_static_render_fns__,\n __vue_template_functional__,\n __vue_styles__,\n __vue_scopeId__,\n __vue_module_identifier__\n)\n\nexport default Component.exports\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"color-input style-control\",class:{ disabled: !_vm.present || _vm.disabled }},[_c('label',{staticClass:\"label\",attrs:{\"for\":_vm.name}},[_vm._v(\"\\n \"+_vm._s(_vm.label)+\"\\n \")]),_vm._v(\" \"),(typeof _vm.fallback !== 'undefined' && _vm.showOptionalTickbox)?_c('Checkbox',{staticClass:\"opt\",attrs:{\"checked\":_vm.present,\"disabled\":_vm.disabled},on:{\"change\":function($event){return _vm.$emit('input', typeof _vm.value === 'undefined' ? _vm.fallback : undefined)}}}):_vm._e(),_vm._v(\" \"),_c('div',{staticClass:\"input color-input-field\"},[_c('input',{staticClass:\"textColor unstyled\",attrs:{\"id\":_vm.name + '-t',\"type\":\"text\",\"disabled\":!_vm.present || _vm.disabled},domProps:{\"value\":_vm.value || _vm.fallback},on:{\"input\":function($event){return _vm.$emit('input', $event.target.value)}}}),_vm._v(\" \"),(_vm.validColor)?_c('input',{staticClass:\"nativeColor unstyled\",attrs:{\"id\":_vm.name,\"type\":\"color\",\"disabled\":!_vm.present || _vm.disabled},domProps:{\"value\":_vm.value || _vm.fallback},on:{\"input\":function($event){return _vm.$emit('input', $event.target.value)}}}):_vm._e(),_vm._v(\" \"),(_vm.transparentColor)?_c('div',{staticClass:\"transparentIndicator\"}):_vm._e(),_vm._v(\" \"),(_vm.computedColor)?_c('div',{staticClass:\"computedIndicator\",style:({backgroundColor: _vm.fallback})}):_vm._e()])],1)}\nvar staticRenderFns = []\nexport { render, staticRenderFns }","/* script */\nexport * from \"!!babel-loader!../../../node_modules/vue-loader/lib/selector?type=script&index=0!./range_input.vue\"\nimport __vue_script__ from \"!!babel-loader!../../../node_modules/vue-loader/lib/selector?type=script&index=0!./range_input.vue\"\n/* template */\nimport {render as __vue_render__, staticRenderFns as __vue_static_render_fns__} from \"!!../../../node_modules/vue-loader/lib/template-compiler/index?{\\\"id\\\":\\\"data-v-6a3c1a26\\\",\\\"hasScoped\\\":false,\\\"optionsId\\\":\\\"0\\\",\\\"buble\\\":{\\\"transforms\\\":{}}}!../../../node_modules/vue-loader/lib/selector?type=template&index=0!./range_input.vue\"\n/* template functional */\nvar __vue_template_functional__ = false\n/* styles */\nvar __vue_styles__ = null\n/* scopeId */\nvar __vue_scopeId__ = null\n/* moduleIdentifier (server only) */\nvar __vue_module_identifier__ = null\nimport normalizeComponent from \"!../../../node_modules/vue-loader/lib/runtime/component-normalizer\"\nvar Component = normalizeComponent(\n __vue_script__,\n __vue_render__,\n __vue_static_render_fns__,\n __vue_template_functional__,\n __vue_styles__,\n __vue_scopeId__,\n __vue_module_identifier__\n)\n\nexport default Component.exports\n","\n\n\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"range-control style-control\",class:{ disabled: !_vm.present || _vm.disabled }},[_c('label',{staticClass:\"label\",attrs:{\"for\":_vm.name}},[_vm._v(\"\\n \"+_vm._s(_vm.label)+\"\\n \")]),_vm._v(\" \"),(typeof _vm.fallback !== 'undefined')?_c('input',{staticClass:\"opt\",attrs:{\"id\":_vm.name + '-o',\"type\":\"checkbox\"},domProps:{\"checked\":_vm.present},on:{\"input\":function($event){return _vm.$emit('input', !_vm.present ? _vm.fallback : undefined)}}}):_vm._e(),_vm._v(\" \"),(typeof _vm.fallback !== 'undefined')?_c('label',{staticClass:\"opt-l\",attrs:{\"for\":_vm.name + '-o'}}):_vm._e(),_vm._v(\" \"),_c('input',{staticClass:\"input-number\",attrs:{\"id\":_vm.name,\"type\":\"range\",\"disabled\":!_vm.present || _vm.disabled,\"max\":_vm.max || _vm.hardMax || 100,\"min\":_vm.min || _vm.hardMin || 0,\"step\":_vm.step || 1},domProps:{\"value\":_vm.value || _vm.fallback},on:{\"input\":function($event){return _vm.$emit('input', $event.target.value)}}}),_vm._v(\" \"),_c('input',{staticClass:\"input-number\",attrs:{\"id\":_vm.name,\"type\":\"number\",\"disabled\":!_vm.present || _vm.disabled,\"max\":_vm.hardMax,\"min\":_vm.hardMin,\"step\":_vm.step || 1},domProps:{\"value\":_vm.value || _vm.fallback},on:{\"input\":function($event){return _vm.$emit('input', $event.target.value)}}})])}\nvar staticRenderFns = []\nexport { render, staticRenderFns }","\n\n\n","/* script */\nexport * from \"!!babel-loader!../../../node_modules/vue-loader/lib/selector?type=script&index=0!./opacity_input.vue\"\nimport __vue_script__ from \"!!babel-loader!../../../node_modules/vue-loader/lib/selector?type=script&index=0!./opacity_input.vue\"\n/* template */\nimport {render as __vue_render__, staticRenderFns as __vue_static_render_fns__} from \"!!../../../node_modules/vue-loader/lib/template-compiler/index?{\\\"id\\\":\\\"data-v-3b48fa39\\\",\\\"hasScoped\\\":false,\\\"optionsId\\\":\\\"0\\\",\\\"buble\\\":{\\\"transforms\\\":{}}}!../../../node_modules/vue-loader/lib/selector?type=template&index=0!./opacity_input.vue\"\n/* template functional */\nvar __vue_template_functional__ = false\n/* styles */\nvar __vue_styles__ = null\n/* scopeId */\nvar __vue_scopeId__ = null\n/* moduleIdentifier (server only) */\nvar __vue_module_identifier__ = null\nimport normalizeComponent from \"!../../../node_modules/vue-loader/lib/runtime/component-normalizer\"\nvar Component = normalizeComponent(\n __vue_script__,\n __vue_render__,\n __vue_static_render_fns__,\n __vue_template_functional__,\n __vue_styles__,\n __vue_scopeId__,\n __vue_module_identifier__\n)\n\nexport default Component.exports\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"opacity-control style-control\",class:{ disabled: !_vm.present || _vm.disabled }},[_c('label',{staticClass:\"label\",attrs:{\"for\":_vm.name}},[_vm._v(\"\\n \"+_vm._s(_vm.$t('settings.style.common.opacity'))+\"\\n \")]),_vm._v(\" \"),(typeof _vm.fallback !== 'undefined')?_c('Checkbox',{staticClass:\"opt\",attrs:{\"checked\":_vm.present,\"disabled\":_vm.disabled},on:{\"change\":function($event){return _vm.$emit('input', !_vm.present ? _vm.fallback : undefined)}}}):_vm._e(),_vm._v(\" \"),_c('input',{staticClass:\"input-number\",attrs:{\"id\":_vm.name,\"type\":\"number\",\"disabled\":!_vm.present || _vm.disabled,\"max\":\"1\",\"min\":\"0\",\"step\":\".05\"},domProps:{\"value\":_vm.value || _vm.fallback},on:{\"input\":function($event){return _vm.$emit('input', $event.target.value)}}})],1)}\nvar staticRenderFns = []\nexport { render, staticRenderFns }","import ColorInput from '../color_input/color_input.vue'\nimport OpacityInput from '../opacity_input/opacity_input.vue'\nimport { getCssShadow } from '../../services/style_setter/style_setter.js'\nimport { hex2rgb } from '../../services/color_convert/color_convert.js'\n\nconst toModel = (object = {}) => ({\n x: 0,\n y: 0,\n blur: 0,\n spread: 0,\n inset: false,\n color: '#000000',\n alpha: 1,\n ...object\n})\n\nexport default {\n // 'Value' and 'Fallback' can be undefined, but if they are\n // initially vue won't detect it when they become something else\n // therefore i'm using \"ready\" which should be passed as true when\n // data becomes available\n props: [\n 'value', 'fallback', 'ready'\n ],\n data () {\n return {\n selectedId: 0,\n // TODO there are some bugs regarding display of array (it's not getting updated when deleting for some reason)\n cValue: (this.value || this.fallback || []).map(toModel)\n }\n },\n components: {\n ColorInput,\n OpacityInput\n },\n methods: {\n add () {\n this.cValue.push(toModel(this.selected))\n this.selectedId = this.cValue.length - 1\n },\n del () {\n this.cValue.splice(this.selectedId, 1)\n this.selectedId = this.cValue.length === 0 ? undefined : Math.max(this.selectedId - 1, 0)\n },\n moveUp () {\n const movable = this.cValue.splice(this.selectedId, 1)[0]\n this.cValue.splice(this.selectedId - 1, 0, movable)\n this.selectedId -= 1\n },\n moveDn () {\n const movable = this.cValue.splice(this.selectedId, 1)[0]\n this.cValue.splice(this.selectedId + 1, 0, movable)\n this.selectedId += 1\n }\n },\n beforeUpdate () {\n this.cValue = this.value || this.fallback\n },\n computed: {\n anyShadows () {\n return this.cValue.length > 0\n },\n anyShadowsFallback () {\n return this.fallback.length > 0\n },\n selected () {\n if (this.ready && this.anyShadows) {\n return this.cValue[this.selectedId]\n } else {\n return toModel({})\n }\n },\n currentFallback () {\n if (this.ready && this.anyShadowsFallback) {\n return this.fallback[this.selectedId]\n } else {\n return toModel({})\n }\n },\n moveUpValid () {\n return this.ready && this.selectedId > 0\n },\n moveDnValid () {\n return this.ready && this.selectedId < this.cValue.length - 1\n },\n present () {\n return this.ready &&\n typeof this.cValue[this.selectedId] !== 'undefined' &&\n !this.usingFallback\n },\n usingFallback () {\n return typeof this.value === 'undefined'\n },\n rgb () {\n return hex2rgb(this.selected.color)\n },\n style () {\n return this.ready ? {\n boxShadow: getCssShadow(this.fallback)\n } : {}\n }\n }\n}\n","function injectStyle (context) {\n require(\"!!vue-style-loader!css-loader?minimize!../../../node_modules/vue-loader/lib/style-compiler/index?{\\\"optionsId\\\":\\\"0\\\",\\\"vue\\\":true,\\\"scoped\\\":false,\\\"sourceMap\\\":false}!sass-loader!../../../node_modules/vue-loader/lib/selector?type=styles&index=0!./shadow_control.vue\")\n}\n/* script */\nexport * from \"!!babel-loader!./shadow_control.js\"\nimport __vue_script__ from \"!!babel-loader!./shadow_control.js\"/* template */\nimport {render as __vue_render__, staticRenderFns as __vue_static_render_fns__} from \"!!../../../node_modules/vue-loader/lib/template-compiler/index?{\\\"id\\\":\\\"data-v-5c532734\\\",\\\"hasScoped\\\":false,\\\"optionsId\\\":\\\"0\\\",\\\"buble\\\":{\\\"transforms\\\":{}}}!../../../node_modules/vue-loader/lib/selector?type=template&index=0!./shadow_control.vue\"\n/* template functional */\nvar __vue_template_functional__ = false\n/* styles */\nvar __vue_styles__ = injectStyle\n/* scopeId */\nvar __vue_scopeId__ = null\n/* moduleIdentifier (server only) */\nvar __vue_module_identifier__ = null\nimport normalizeComponent from \"!../../../node_modules/vue-loader/lib/runtime/component-normalizer\"\nvar Component = normalizeComponent(\n __vue_script__,\n __vue_render__,\n __vue_static_render_fns__,\n __vue_template_functional__,\n __vue_styles__,\n __vue_scopeId__,\n __vue_module_identifier__\n)\n\nexport default Component.exports\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"shadow-control\",class:{ disabled: !_vm.present }},[_c('div',{staticClass:\"shadow-preview-container\"},[_c('div',{staticClass:\"y-shift-control\",attrs:{\"disabled\":!_vm.present}},[_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.selected.y),expression:\"selected.y\"}],staticClass:\"input-number\",attrs:{\"disabled\":!_vm.present,\"type\":\"number\"},domProps:{\"value\":(_vm.selected.y)},on:{\"input\":function($event){if($event.target.composing){ return; }_vm.$set(_vm.selected, \"y\", $event.target.value)}}}),_vm._v(\" \"),_c('div',{staticClass:\"wrap\"},[_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.selected.y),expression:\"selected.y\"}],staticClass:\"input-range\",attrs:{\"disabled\":!_vm.present,\"type\":\"range\",\"max\":\"20\",\"min\":\"-20\"},domProps:{\"value\":(_vm.selected.y)},on:{\"__r\":function($event){return _vm.$set(_vm.selected, \"y\", $event.target.value)}}})])]),_vm._v(\" \"),_c('div',{staticClass:\"preview-window\"},[_c('div',{staticClass:\"preview-block\",style:(_vm.style)})]),_vm._v(\" \"),_c('div',{staticClass:\"x-shift-control\",attrs:{\"disabled\":!_vm.present}},[_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.selected.x),expression:\"selected.x\"}],staticClass:\"input-number\",attrs:{\"disabled\":!_vm.present,\"type\":\"number\"},domProps:{\"value\":(_vm.selected.x)},on:{\"input\":function($event){if($event.target.composing){ return; }_vm.$set(_vm.selected, \"x\", $event.target.value)}}}),_vm._v(\" \"),_c('div',{staticClass:\"wrap\"},[_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.selected.x),expression:\"selected.x\"}],staticClass:\"input-range\",attrs:{\"disabled\":!_vm.present,\"type\":\"range\",\"max\":\"20\",\"min\":\"-20\"},domProps:{\"value\":(_vm.selected.x)},on:{\"__r\":function($event){return _vm.$set(_vm.selected, \"x\", $event.target.value)}}})])])]),_vm._v(\" \"),_c('div',{staticClass:\"shadow-tweak\"},[_c('div',{staticClass:\"id-control style-control\",attrs:{\"disabled\":_vm.usingFallback}},[_c('label',{staticClass:\"select\",attrs:{\"for\":\"shadow-switcher\",\"disabled\":!_vm.ready || _vm.usingFallback}},[_c('select',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.selectedId),expression:\"selectedId\"}],staticClass:\"shadow-switcher\",attrs:{\"id\":\"shadow-switcher\",\"disabled\":!_vm.ready || _vm.usingFallback},on:{\"change\":function($event){var $$selectedVal = Array.prototype.filter.call($event.target.options,function(o){return o.selected}).map(function(o){var val = \"_value\" in o ? o._value : o.value;return val}); _vm.selectedId=$event.target.multiple ? $$selectedVal : $$selectedVal[0]}}},_vm._l((_vm.cValue),function(shadow,index){return _c('option',{key:index,domProps:{\"value\":index}},[_vm._v(\"\\n \"+_vm._s(_vm.$t('settings.style.shadows.shadow_id', { value: index }))+\"\\n \")])}),0),_vm._v(\" \"),_c('i',{staticClass:\"icon-down-open\"})]),_vm._v(\" \"),_c('button',{staticClass:\"btn btn-default\",attrs:{\"disabled\":!_vm.ready || !_vm.present},on:{\"click\":_vm.del}},[_c('i',{staticClass:\"icon-cancel\"})]),_vm._v(\" \"),_c('button',{staticClass:\"btn btn-default\",attrs:{\"disabled\":!_vm.moveUpValid},on:{\"click\":_vm.moveUp}},[_c('i',{staticClass:\"icon-up-open\"})]),_vm._v(\" \"),_c('button',{staticClass:\"btn btn-default\",attrs:{\"disabled\":!_vm.moveDnValid},on:{\"click\":_vm.moveDn}},[_c('i',{staticClass:\"icon-down-open\"})]),_vm._v(\" \"),_c('button',{staticClass:\"btn btn-default\",attrs:{\"disabled\":_vm.usingFallback},on:{\"click\":_vm.add}},[_c('i',{staticClass:\"icon-plus\"})])]),_vm._v(\" \"),_c('div',{staticClass:\"inset-control style-control\",attrs:{\"disabled\":!_vm.present}},[_c('label',{staticClass:\"label\",attrs:{\"for\":\"inset\"}},[_vm._v(\"\\n \"+_vm._s(_vm.$t('settings.style.shadows.inset'))+\"\\n \")]),_vm._v(\" \"),_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.selected.inset),expression:\"selected.inset\"}],staticClass:\"input-inset\",attrs:{\"id\":\"inset\",\"disabled\":!_vm.present,\"name\":\"inset\",\"type\":\"checkbox\"},domProps:{\"checked\":Array.isArray(_vm.selected.inset)?_vm._i(_vm.selected.inset,null)>-1:(_vm.selected.inset)},on:{\"change\":function($event){var $$a=_vm.selected.inset,$$el=$event.target,$$c=$$el.checked?(true):(false);if(Array.isArray($$a)){var $$v=null,$$i=_vm._i($$a,$$v);if($$el.checked){$$i<0&&(_vm.$set(_vm.selected, \"inset\", $$a.concat([$$v])))}else{$$i>-1&&(_vm.$set(_vm.selected, \"inset\", $$a.slice(0,$$i).concat($$a.slice($$i+1))))}}else{_vm.$set(_vm.selected, \"inset\", $$c)}}}}),_vm._v(\" \"),_c('label',{staticClass:\"checkbox-label\",attrs:{\"for\":\"inset\"}})]),_vm._v(\" \"),_c('div',{staticClass:\"blur-control style-control\",attrs:{\"disabled\":!_vm.present}},[_c('label',{staticClass:\"label\",attrs:{\"for\":\"spread\"}},[_vm._v(\"\\n \"+_vm._s(_vm.$t('settings.style.shadows.blur'))+\"\\n \")]),_vm._v(\" \"),_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.selected.blur),expression:\"selected.blur\"}],staticClass:\"input-range\",attrs:{\"id\":\"blur\",\"disabled\":!_vm.present,\"name\":\"blur\",\"type\":\"range\",\"max\":\"20\",\"min\":\"0\"},domProps:{\"value\":(_vm.selected.blur)},on:{\"__r\":function($event){return _vm.$set(_vm.selected, \"blur\", $event.target.value)}}}),_vm._v(\" \"),_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.selected.blur),expression:\"selected.blur\"}],staticClass:\"input-number\",attrs:{\"disabled\":!_vm.present,\"type\":\"number\",\"min\":\"0\"},domProps:{\"value\":(_vm.selected.blur)},on:{\"input\":function($event){if($event.target.composing){ return; }_vm.$set(_vm.selected, \"blur\", $event.target.value)}}})]),_vm._v(\" \"),_c('div',{staticClass:\"spread-control style-control\",attrs:{\"disabled\":!_vm.present}},[_c('label',{staticClass:\"label\",attrs:{\"for\":\"spread\"}},[_vm._v(\"\\n \"+_vm._s(_vm.$t('settings.style.shadows.spread'))+\"\\n \")]),_vm._v(\" \"),_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.selected.spread),expression:\"selected.spread\"}],staticClass:\"input-range\",attrs:{\"id\":\"spread\",\"disabled\":!_vm.present,\"name\":\"spread\",\"type\":\"range\",\"max\":\"20\",\"min\":\"-20\"},domProps:{\"value\":(_vm.selected.spread)},on:{\"__r\":function($event){return _vm.$set(_vm.selected, \"spread\", $event.target.value)}}}),_vm._v(\" \"),_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.selected.spread),expression:\"selected.spread\"}],staticClass:\"input-number\",attrs:{\"disabled\":!_vm.present,\"type\":\"number\"},domProps:{\"value\":(_vm.selected.spread)},on:{\"input\":function($event){if($event.target.composing){ return; }_vm.$set(_vm.selected, \"spread\", $event.target.value)}}})]),_vm._v(\" \"),_c('ColorInput',{attrs:{\"disabled\":!_vm.present,\"label\":_vm.$t('settings.style.common.color'),\"fallback\":_vm.currentFallback.color,\"show-optional-tickbox\":false,\"name\":\"shadow\"},model:{value:(_vm.selected.color),callback:function ($$v) {_vm.$set(_vm.selected, \"color\", $$v)},expression:\"selected.color\"}}),_vm._v(\" \"),_c('OpacityInput',{attrs:{\"disabled\":!_vm.present},model:{value:(_vm.selected.alpha),callback:function ($$v) {_vm.$set(_vm.selected, \"alpha\", $$v)},expression:\"selected.alpha\"}}),_vm._v(\" \"),_c('i18n',{attrs:{\"path\":\"settings.style.shadows.hintV3\",\"tag\":\"p\"}},[_c('code',[_vm._v(\"--variable,mod\")])])],1)])}\nvar staticRenderFns = []\nexport { render, staticRenderFns }","import { set } from 'vue'\n\nexport default {\n props: [\n 'name', 'label', 'value', 'fallback', 'options', 'no-inherit'\n ],\n data () {\n return {\n lValue: this.value,\n availableOptions: [\n this.noInherit ? '' : 'inherit',\n 'custom',\n ...(this.options || []),\n 'serif',\n 'monospace',\n 'sans-serif'\n ].filter(_ => _)\n }\n },\n beforeUpdate () {\n this.lValue = this.value\n },\n computed: {\n present () {\n return typeof this.lValue !== 'undefined'\n },\n dValue () {\n return this.lValue || this.fallback || {}\n },\n family: {\n get () {\n return this.dValue.family\n },\n set (v) {\n set(this.lValue, 'family', v)\n this.$emit('input', this.lValue)\n }\n },\n isCustom () {\n return this.preset === 'custom'\n },\n preset: {\n get () {\n if (this.family === 'serif' ||\n this.family === 'sans-serif' ||\n this.family === 'monospace' ||\n this.family === 'inherit') {\n return this.family\n } else {\n return 'custom'\n }\n },\n set (v) {\n this.family = v === 'custom' ? '' : v\n }\n }\n }\n}\n","function injectStyle (context) {\n require(\"!!vue-style-loader!css-loader?minimize!../../../node_modules/vue-loader/lib/style-compiler/index?{\\\"optionsId\\\":\\\"0\\\",\\\"vue\\\":true,\\\"scoped\\\":false,\\\"sourceMap\\\":false}!sass-loader!../../../node_modules/vue-loader/lib/selector?type=styles&index=0!./font_control.vue\")\n}\n/* script */\nexport * from \"!!babel-loader!./font_control.js\"\nimport __vue_script__ from \"!!babel-loader!./font_control.js\"/* template */\nimport {render as __vue_render__, staticRenderFns as __vue_static_render_fns__} from \"!!../../../node_modules/vue-loader/lib/template-compiler/index?{\\\"id\\\":\\\"data-v-0edf8dfc\\\",\\\"hasScoped\\\":false,\\\"optionsId\\\":\\\"0\\\",\\\"buble\\\":{\\\"transforms\\\":{}}}!../../../node_modules/vue-loader/lib/selector?type=template&index=0!./font_control.vue\"\n/* template functional */\nvar __vue_template_functional__ = false\n/* styles */\nvar __vue_styles__ = injectStyle\n/* scopeId */\nvar __vue_scopeId__ = null\n/* moduleIdentifier (server only) */\nvar __vue_module_identifier__ = null\nimport normalizeComponent from \"!../../../node_modules/vue-loader/lib/runtime/component-normalizer\"\nvar Component = normalizeComponent(\n __vue_script__,\n __vue_render__,\n __vue_static_render_fns__,\n __vue_template_functional__,\n __vue_styles__,\n __vue_scopeId__,\n __vue_module_identifier__\n)\n\nexport default Component.exports\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"font-control style-control\",class:{ custom: _vm.isCustom }},[_c('label',{staticClass:\"label\",attrs:{\"for\":_vm.preset === 'custom' ? _vm.name : _vm.name + '-font-switcher'}},[_vm._v(\"\\n \"+_vm._s(_vm.label)+\"\\n \")]),_vm._v(\" \"),(typeof _vm.fallback !== 'undefined')?_c('input',{staticClass:\"opt exlcude-disabled\",attrs:{\"id\":_vm.name + '-o',\"type\":\"checkbox\"},domProps:{\"checked\":_vm.present},on:{\"input\":function($event){return _vm.$emit('input', typeof _vm.value === 'undefined' ? _vm.fallback : undefined)}}}):_vm._e(),_vm._v(\" \"),(typeof _vm.fallback !== 'undefined')?_c('label',{staticClass:\"opt-l\",attrs:{\"for\":_vm.name + '-o'}}):_vm._e(),_vm._v(\" \"),_c('label',{staticClass:\"select\",attrs:{\"for\":_vm.name + '-font-switcher',\"disabled\":!_vm.present}},[_c('select',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.preset),expression:\"preset\"}],staticClass:\"font-switcher\",attrs:{\"id\":_vm.name + '-font-switcher',\"disabled\":!_vm.present},on:{\"change\":function($event){var $$selectedVal = Array.prototype.filter.call($event.target.options,function(o){return o.selected}).map(function(o){var val = \"_value\" in o ? o._value : o.value;return val}); _vm.preset=$event.target.multiple ? $$selectedVal : $$selectedVal[0]}}},_vm._l((_vm.availableOptions),function(option){return _c('option',{key:option,domProps:{\"value\":option}},[_vm._v(\"\\n \"+_vm._s(option === 'custom' ? _vm.$t('settings.style.fonts.custom') : option)+\"\\n \")])}),0),_vm._v(\" \"),_c('i',{staticClass:\"icon-down-open\"})]),_vm._v(\" \"),(_vm.isCustom)?_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.family),expression:\"family\"}],staticClass:\"custom-font\",attrs:{\"id\":_vm.name,\"type\":\"text\"},domProps:{\"value\":(_vm.family)},on:{\"input\":function($event){if($event.target.composing){ return; }_vm.family=$event.target.value}}}):_vm._e()])}\nvar staticRenderFns = []\nexport { render, staticRenderFns }","\n\n\n\n\n","function injectStyle (context) {\n require(\"!!vue-style-loader!css-loader?minimize!../../../node_modules/vue-loader/lib/style-compiler/index?{\\\"optionsId\\\":\\\"0\\\",\\\"vue\\\":true,\\\"scoped\\\":false,\\\"sourceMap\\\":false}!sass-loader!../../../node_modules/vue-loader/lib/selector?type=styles&index=0!./contrast_ratio.vue\")\n}\n/* script */\nexport * from \"!!babel-loader!../../../node_modules/vue-loader/lib/selector?type=script&index=0!./contrast_ratio.vue\"\nimport __vue_script__ from \"!!babel-loader!../../../node_modules/vue-loader/lib/selector?type=script&index=0!./contrast_ratio.vue\"\n/* template */\nimport {render as __vue_render__, staticRenderFns as __vue_static_render_fns__} from \"!!../../../node_modules/vue-loader/lib/template-compiler/index?{\\\"id\\\":\\\"data-v-7974f5b3\\\",\\\"hasScoped\\\":false,\\\"optionsId\\\":\\\"0\\\",\\\"buble\\\":{\\\"transforms\\\":{}}}!../../../node_modules/vue-loader/lib/selector?type=template&index=0!./contrast_ratio.vue\"\n/* template functional */\nvar __vue_template_functional__ = false\n/* styles */\nvar __vue_styles__ = injectStyle\n/* scopeId */\nvar __vue_scopeId__ = null\n/* moduleIdentifier (server only) */\nvar __vue_module_identifier__ = null\nimport normalizeComponent from \"!../../../node_modules/vue-loader/lib/runtime/component-normalizer\"\nvar Component = normalizeComponent(\n __vue_script__,\n __vue_render__,\n __vue_static_render_fns__,\n __vue_template_functional__,\n __vue_styles__,\n __vue_scopeId__,\n __vue_module_identifier__\n)\n\nexport default Component.exports\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return (_vm.contrast)?_c('span',{staticClass:\"contrast-ratio\"},[_c('span',{staticClass:\"rating\",attrs:{\"title\":_vm.hint}},[(_vm.contrast.aaa)?_c('span',[_c('i',{staticClass:\"icon-thumbs-up-alt\"})]):_vm._e(),_vm._v(\" \"),(!_vm.contrast.aaa && _vm.contrast.aa)?_c('span',[_c('i',{staticClass:\"icon-adjust\"})]):_vm._e(),_vm._v(\" \"),(!_vm.contrast.aaa && !_vm.contrast.aa)?_c('span',[_c('i',{staticClass:\"icon-attention\"})]):_vm._e()]),_vm._v(\" \"),(_vm.contrast && _vm.large)?_c('span',{staticClass:\"rating\",attrs:{\"title\":_vm.hint_18pt}},[(_vm.contrast.laaa)?_c('span',[_c('i',{staticClass:\"icon-thumbs-up-alt\"})]):_vm._e(),_vm._v(\" \"),(!_vm.contrast.laaa && _vm.contrast.laa)?_c('span',[_c('i',{staticClass:\"icon-adjust\"})]):_vm._e(),_vm._v(\" \"),(!_vm.contrast.laaa && !_vm.contrast.laa)?_c('span',[_c('i',{staticClass:\"icon-attention\"})]):_vm._e()]):_vm._e()]):_vm._e()}\nvar staticRenderFns = []\nexport { render, staticRenderFns }","\n\n\n\n\n","function injectStyle (context) {\n require(\"!!vue-style-loader!css-loader?minimize!../../../node_modules/vue-loader/lib/style-compiler/index?{\\\"optionsId\\\":\\\"0\\\",\\\"vue\\\":true,\\\"scoped\\\":false,\\\"sourceMap\\\":false}!sass-loader!../../../node_modules/vue-loader/lib/selector?type=styles&index=0!./export_import.vue\")\n}\n/* script */\nexport * from \"!!babel-loader!../../../node_modules/vue-loader/lib/selector?type=script&index=0!./export_import.vue\"\nimport __vue_script__ from \"!!babel-loader!../../../node_modules/vue-loader/lib/selector?type=script&index=0!./export_import.vue\"\n/* template */\nimport {render as __vue_render__, staticRenderFns as __vue_static_render_fns__} from \"!!../../../node_modules/vue-loader/lib/template-compiler/index?{\\\"id\\\":\\\"data-v-3d9b5a74\\\",\\\"hasScoped\\\":false,\\\"optionsId\\\":\\\"0\\\",\\\"buble\\\":{\\\"transforms\\\":{}}}!../../../node_modules/vue-loader/lib/selector?type=template&index=0!./export_import.vue\"\n/* template functional */\nvar __vue_template_functional__ = false\n/* styles */\nvar __vue_styles__ = injectStyle\n/* scopeId */\nvar __vue_scopeId__ = null\n/* moduleIdentifier (server only) */\nvar __vue_module_identifier__ = null\nimport normalizeComponent from \"!../../../node_modules/vue-loader/lib/runtime/component-normalizer\"\nvar Component = normalizeComponent(\n __vue_script__,\n __vue_render__,\n __vue_static_render_fns__,\n __vue_template_functional__,\n __vue_styles__,\n __vue_scopeId__,\n __vue_module_identifier__\n)\n\nexport default Component.exports\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"import-export-container\"},[_vm._t(\"before\"),_vm._v(\" \"),_c('button',{staticClass:\"btn\",on:{\"click\":_vm.exportData}},[_vm._v(\"\\n \"+_vm._s(_vm.exportLabel)+\"\\n \")]),_vm._v(\" \"),_c('button',{staticClass:\"btn\",on:{\"click\":_vm.importData}},[_vm._v(\"\\n \"+_vm._s(_vm.importLabel)+\"\\n \")]),_vm._v(\" \"),_vm._t(\"afterButtons\"),_vm._v(\" \"),(_vm.importFailed)?_c('p',{staticClass:\"alert error\"},[_vm._v(\"\\n \"+_vm._s(_vm.importFailedText)+\"\\n \")]):_vm._e(),_vm._v(\" \"),_vm._t(\"afterError\")],2)}\nvar staticRenderFns = []\nexport { render, staticRenderFns }","function injectStyle (context) {\n require(\"!!vue-style-loader!css-loader?minimize!../../../../../node_modules/vue-loader/lib/style-compiler/index?{\\\"optionsId\\\":\\\"0\\\",\\\"vue\\\":true,\\\"scoped\\\":false,\\\"sourceMap\\\":false}!sass-loader!../../../../../node_modules/vue-loader/lib/selector?type=styles&index=0!./preview.vue\")\n}\n/* script */\nvar __vue_script__ = null\n/* template */\nimport {render as __vue_render__, staticRenderFns as __vue_static_render_fns__} from \"!!../../../../../node_modules/vue-loader/lib/template-compiler/index?{\\\"id\\\":\\\"data-v-1a88be74\\\",\\\"hasScoped\\\":false,\\\"optionsId\\\":\\\"0\\\",\\\"buble\\\":{\\\"transforms\\\":{}}}!../../../../../node_modules/vue-loader/lib/selector?type=template&index=0!./preview.vue\"\n/* template functional */\nvar __vue_template_functional__ = false\n/* styles */\nvar __vue_styles__ = injectStyle\n/* scopeId */\nvar __vue_scopeId__ = null\n/* moduleIdentifier (server only) */\nvar __vue_module_identifier__ = null\nimport normalizeComponent from \"!../../../../../node_modules/vue-loader/lib/runtime/component-normalizer\"\nvar Component = normalizeComponent(\n __vue_script__,\n __vue_render__,\n __vue_static_render_fns__,\n __vue_template_functional__,\n __vue_styles__,\n __vue_scopeId__,\n __vue_module_identifier__\n)\n\nexport default Component.exports\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"preview-container\"},[_c('div',{staticClass:\"underlay underlay-preview\"}),_vm._v(\" \"),_c('div',{staticClass:\"panel dummy\"},[_c('div',{staticClass:\"panel-heading\"},[_c('div',{staticClass:\"title\"},[_vm._v(\"\\n \"+_vm._s(_vm.$t('settings.style.preview.header'))+\"\\n \"),_c('span',{staticClass:\"badge badge-notification\"},[_vm._v(\"\\n 99\\n \")])]),_vm._v(\" \"),_c('span',{staticClass:\"faint\"},[_vm._v(\"\\n \"+_vm._s(_vm.$t('settings.style.preview.header_faint'))+\"\\n \")]),_vm._v(\" \"),_c('span',{staticClass:\"alert error\"},[_vm._v(\"\\n \"+_vm._s(_vm.$t('settings.style.preview.error'))+\"\\n \")]),_vm._v(\" \"),_c('button',{staticClass:\"btn\"},[_vm._v(\"\\n \"+_vm._s(_vm.$t('settings.style.preview.button'))+\"\\n \")])]),_vm._v(\" \"),_c('div',{staticClass:\"panel-body theme-preview-content\"},[_c('div',{staticClass:\"post\"},[_c('div',{staticClass:\"avatar still-image\"},[_vm._v(\"\\n ( ͡° ͜ʖ ͡°)\\n \")]),_vm._v(\" \"),_c('div',{staticClass:\"content\"},[_c('h4',[_vm._v(\"\\n \"+_vm._s(_vm.$t('settings.style.preview.content'))+\"\\n \")]),_vm._v(\" \"),_c('i18n',{attrs:{\"path\":\"settings.style.preview.text\"}},[_c('code',{staticStyle:{\"font-family\":\"var(--postCodeFont)\"}},[_vm._v(\"\\n \"+_vm._s(_vm.$t('settings.style.preview.mono'))+\"\\n \")]),_vm._v(\" \"),_c('a',{staticStyle:{\"color\":\"var(--link)\"}},[_vm._v(\"\\n \"+_vm._s(_vm.$t('settings.style.preview.link'))+\"\\n \")])]),_vm._v(\" \"),_vm._m(0)],1)]),_vm._v(\" \"),_c('div',{staticClass:\"after-post\"},[_c('div',{staticClass:\"avatar-alt\"},[_vm._v(\"\\n :^)\\n \")]),_vm._v(\" \"),_c('div',{staticClass:\"content\"},[_c('i18n',{staticClass:\"faint\",attrs:{\"path\":\"settings.style.preview.fine_print\",\"tag\":\"span\"}},[_c('a',{staticStyle:{\"color\":\"var(--faintLink)\"}},[_vm._v(\"\\n \"+_vm._s(_vm.$t('settings.style.preview.faint_link'))+\"\\n \")])])],1)]),_vm._v(\" \"),_c('div',{staticClass:\"separator\"}),_vm._v(\" \"),_c('span',{staticClass:\"alert error\"},[_vm._v(\"\\n \"+_vm._s(_vm.$t('settings.style.preview.error'))+\"\\n \")]),_vm._v(\" \"),_c('input',{attrs:{\"type\":\"text\"},domProps:{\"value\":_vm.$t('settings.style.preview.input')}}),_vm._v(\" \"),_c('div',{staticClass:\"actions\"},[_c('span',{staticClass:\"checkbox\"},[_c('input',{attrs:{\"id\":\"preview_checkbox\",\"checked\":\"very yes\",\"type\":\"checkbox\"}}),_vm._v(\" \"),_c('label',{attrs:{\"for\":\"preview_checkbox\"}},[_vm._v(_vm._s(_vm.$t('settings.style.preview.checkbox')))])]),_vm._v(\" \"),_c('button',{staticClass:\"btn\"},[_vm._v(\"\\n \"+_vm._s(_vm.$t('settings.style.preview.button'))+\"\\n \")])])])])])}\nvar staticRenderFns = [function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"icons\"},[_c('i',{staticClass:\"button-icon icon-reply\",staticStyle:{\"color\":\"var(--cBlue)\"}}),_vm._v(\" \"),_c('i',{staticClass:\"button-icon icon-retweet\",staticStyle:{\"color\":\"var(--cGreen)\"}}),_vm._v(\" \"),_c('i',{staticClass:\"button-icon icon-star\",staticStyle:{\"color\":\"var(--cOrange)\"}}),_vm._v(\" \"),_c('i',{staticClass:\"button-icon icon-cancel\",staticStyle:{\"color\":\"var(--cRed)\"}})])}]\nexport { render, staticRenderFns }","import { set, delete as del } from 'vue'\nimport {\n rgb2hex,\n hex2rgb,\n getContrastRatioLayers\n} from 'src/services/color_convert/color_convert.js'\nimport {\n DEFAULT_SHADOWS,\n generateColors,\n generateShadows,\n generateRadii,\n generateFonts,\n composePreset,\n getThemes,\n shadows2to3,\n colors2to3\n} from 'src/services/style_setter/style_setter.js'\nimport {\n SLOT_INHERITANCE\n} from 'src/services/theme_data/pleromafe.js'\nimport {\n CURRENT_VERSION,\n OPACITIES,\n getLayers,\n getOpacitySlot\n} from 'src/services/theme_data/theme_data.service.js'\nimport ColorInput from 'src/components/color_input/color_input.vue'\nimport RangeInput from 'src/components/range_input/range_input.vue'\nimport OpacityInput from 'src/components/opacity_input/opacity_input.vue'\nimport ShadowControl from 'src/components/shadow_control/shadow_control.vue'\nimport FontControl from 'src/components/font_control/font_control.vue'\nimport ContrastRatio from 'src/components/contrast_ratio/contrast_ratio.vue'\nimport TabSwitcher from 'src/components/tab_switcher/tab_switcher.js'\nimport ExportImport from 'src/components/export_import/export_import.vue'\nimport Checkbox from 'src/components/checkbox/checkbox.vue'\n\nimport Preview from './preview.vue'\n\n// List of color values used in v1\nconst v1OnlyNames = [\n 'bg',\n 'fg',\n 'text',\n 'link',\n 'cRed',\n 'cGreen',\n 'cBlue',\n 'cOrange'\n].map(_ => _ + 'ColorLocal')\n\nconst colorConvert = (color) => {\n if (color.startsWith('--') || color === 'transparent') {\n return color\n } else {\n return hex2rgb(color)\n }\n}\n\nexport default {\n data () {\n return {\n availableStyles: [],\n selected: this.$store.getters.mergedConfig.theme,\n themeWarning: undefined,\n tempImportFile: undefined,\n engineVersion: 0,\n\n previewShadows: {},\n previewColors: {},\n previewRadii: {},\n previewFonts: {},\n\n shadowsInvalid: true,\n colorsInvalid: true,\n radiiInvalid: true,\n\n keepColor: false,\n keepShadows: false,\n keepOpacity: false,\n keepRoundness: false,\n keepFonts: false,\n\n ...Object.keys(SLOT_INHERITANCE)\n .map(key => [key, ''])\n .reduce((acc, [key, val]) => ({ ...acc, [ key + 'ColorLocal' ]: val }), {}),\n\n ...Object.keys(OPACITIES)\n .map(key => [key, ''])\n .reduce((acc, [key, val]) => ({ ...acc, [ key + 'OpacityLocal' ]: val }), {}),\n\n shadowSelected: undefined,\n shadowsLocal: {},\n fontsLocal: {},\n\n btnRadiusLocal: '',\n inputRadiusLocal: '',\n checkboxRadiusLocal: '',\n panelRadiusLocal: '',\n avatarRadiusLocal: '',\n avatarAltRadiusLocal: '',\n attachmentRadiusLocal: '',\n tooltipRadiusLocal: '',\n chatMessageRadiusLocal: ''\n }\n },\n created () {\n const self = this\n\n getThemes()\n .then((promises) => {\n return Promise.all(\n Object.entries(promises)\n .map(([k, v]) => v.then(res => [k, res]))\n )\n })\n .then(themes => themes.reduce((acc, [k, v]) => {\n if (v) {\n return {\n ...acc,\n [k]: v\n }\n } else {\n return acc\n }\n }, {}))\n .then((themesComplete) => {\n self.availableStyles = themesComplete\n })\n },\n mounted () {\n this.loadThemeFromLocalStorage()\n if (typeof this.shadowSelected === 'undefined') {\n this.shadowSelected = this.shadowsAvailable[0]\n }\n },\n computed: {\n themeWarningHelp () {\n if (!this.themeWarning) return\n const t = this.$t\n const pre = 'settings.style.switcher.help.'\n const {\n origin,\n themeEngineVersion,\n type,\n noActionsPossible\n } = this.themeWarning\n if (origin === 'file') {\n // Loaded v2 theme from file\n if (themeEngineVersion === 2 && type === 'wrong_version') {\n return t(pre + 'v2_imported')\n }\n if (themeEngineVersion > CURRENT_VERSION) {\n return t(pre + 'future_version_imported') + ' ' +\n (\n noActionsPossible\n ? t(pre + 'snapshot_missing')\n : t(pre + 'snapshot_present')\n )\n }\n if (themeEngineVersion < CURRENT_VERSION) {\n return t(pre + 'future_version_imported') + ' ' +\n (\n noActionsPossible\n ? t(pre + 'snapshot_missing')\n : t(pre + 'snapshot_present')\n )\n }\n } else if (origin === 'localStorage') {\n if (type === 'snapshot_source_mismatch') {\n return t(pre + 'snapshot_source_mismatch')\n }\n // FE upgraded from v2\n if (themeEngineVersion === 2) {\n return t(pre + 'upgraded_from_v2')\n }\n // Admin downgraded FE\n if (themeEngineVersion > CURRENT_VERSION) {\n return t(pre + 'fe_downgraded') + ' ' +\n (\n noActionsPossible\n ? t(pre + 'migration_snapshot_ok')\n : t(pre + 'migration_snapshot_gone')\n )\n }\n // Admin upgraded FE\n if (themeEngineVersion < CURRENT_VERSION) {\n return t(pre + 'fe_upgraded') + ' ' +\n (\n noActionsPossible\n ? t(pre + 'migration_snapshot_ok')\n : t(pre + 'migration_snapshot_gone')\n )\n }\n }\n },\n selectedVersion () {\n return Array.isArray(this.selected) ? 1 : 2\n },\n currentColors () {\n return Object.keys(SLOT_INHERITANCE)\n .map(key => [key, this[key + 'ColorLocal']])\n .reduce((acc, [key, val]) => ({ ...acc, [ key ]: val }), {})\n },\n currentOpacity () {\n return Object.keys(OPACITIES)\n .map(key => [key, this[key + 'OpacityLocal']])\n .reduce((acc, [key, val]) => ({ ...acc, [ key ]: val }), {})\n },\n currentRadii () {\n return {\n btn: this.btnRadiusLocal,\n input: this.inputRadiusLocal,\n checkbox: this.checkboxRadiusLocal,\n panel: this.panelRadiusLocal,\n avatar: this.avatarRadiusLocal,\n avatarAlt: this.avatarAltRadiusLocal,\n tooltip: this.tooltipRadiusLocal,\n attachment: this.attachmentRadiusLocal,\n chatMessage: this.chatMessageRadiusLocal\n }\n },\n preview () {\n return composePreset(this.previewColors, this.previewRadii, this.previewShadows, this.previewFonts)\n },\n previewTheme () {\n if (!this.preview.theme.colors) return { colors: {}, opacity: {}, radii: {}, shadows: {}, fonts: {} }\n return this.preview.theme\n },\n // This needs optimization maybe\n previewContrast () {\n try {\n if (!this.previewTheme.colors.bg) return {}\n const colors = this.previewTheme.colors\n const opacity = this.previewTheme.opacity\n if (!colors.bg) return {}\n const hints = (ratio) => ({\n text: ratio.toPrecision(3) + ':1',\n // AA level, AAA level\n aa: ratio >= 4.5,\n aaa: ratio >= 7,\n // same but for 18pt+ texts\n laa: ratio >= 3,\n laaa: ratio >= 4.5\n })\n const colorsConverted = Object.entries(colors).reduce((acc, [key, value]) => ({ ...acc, [key]: colorConvert(value) }), {})\n\n const ratios = Object.entries(SLOT_INHERITANCE).reduce((acc, [key, value]) => {\n const slotIsBaseText = key === 'text' || key === 'link'\n const slotIsText = slotIsBaseText || (\n typeof value === 'object' && value !== null && value.textColor\n )\n if (!slotIsText) return acc\n const { layer, variant } = slotIsBaseText ? { layer: 'bg' } : value\n const background = variant || layer\n const opacitySlot = getOpacitySlot(background)\n const textColors = [\n key,\n ...(background === 'bg' ? ['cRed', 'cGreen', 'cBlue', 'cOrange'] : [])\n ]\n\n const layers = getLayers(\n layer,\n variant || layer,\n opacitySlot,\n colorsConverted,\n opacity\n )\n\n return {\n ...acc,\n ...textColors.reduce((acc, textColorKey) => {\n const newKey = slotIsBaseText\n ? 'bg' + textColorKey[0].toUpperCase() + textColorKey.slice(1)\n : textColorKey\n return {\n ...acc,\n [newKey]: getContrastRatioLayers(\n colorsConverted[textColorKey],\n layers,\n colorsConverted[textColorKey]\n )\n }\n }, {})\n }\n }, {})\n\n return Object.entries(ratios).reduce((acc, [k, v]) => { acc[k] = hints(v); return acc }, {})\n } catch (e) {\n console.warn('Failure computing contrasts', e)\n }\n },\n previewRules () {\n if (!this.preview.rules) return ''\n return [\n ...Object.values(this.preview.rules),\n 'color: var(--text)',\n 'font-family: var(--interfaceFont, sans-serif)'\n ].join(';')\n },\n shadowsAvailable () {\n return Object.keys(DEFAULT_SHADOWS).sort()\n },\n currentShadowOverriden: {\n get () {\n return !!this.currentShadow\n },\n set (val) {\n if (val) {\n set(this.shadowsLocal, this.shadowSelected, this.currentShadowFallback.map(_ => Object.assign({}, _)))\n } else {\n del(this.shadowsLocal, this.shadowSelected)\n }\n }\n },\n currentShadowFallback () {\n return (this.previewTheme.shadows || {})[this.shadowSelected]\n },\n currentShadow: {\n get () {\n return this.shadowsLocal[this.shadowSelected]\n },\n set (v) {\n set(this.shadowsLocal, this.shadowSelected, v)\n }\n },\n themeValid () {\n return !this.shadowsInvalid && !this.colorsInvalid && !this.radiiInvalid\n },\n exportedTheme () {\n const saveEverything = (\n !this.keepFonts &&\n !this.keepShadows &&\n !this.keepOpacity &&\n !this.keepRoundness &&\n !this.keepColor\n )\n\n const source = {\n themeEngineVersion: CURRENT_VERSION\n }\n\n if (this.keepFonts || saveEverything) {\n source.fonts = this.fontsLocal\n }\n if (this.keepShadows || saveEverything) {\n source.shadows = this.shadowsLocal\n }\n if (this.keepOpacity || saveEverything) {\n source.opacity = this.currentOpacity\n }\n if (this.keepColor || saveEverything) {\n source.colors = this.currentColors\n }\n if (this.keepRoundness || saveEverything) {\n source.radii = this.currentRadii\n }\n\n const theme = {\n themeEngineVersion: CURRENT_VERSION,\n ...this.previewTheme\n }\n\n return {\n // To separate from other random JSON files and possible future source formats\n _pleroma_theme_version: 2, theme, source\n }\n }\n },\n components: {\n ColorInput,\n OpacityInput,\n RangeInput,\n ContrastRatio,\n ShadowControl,\n FontControl,\n TabSwitcher,\n Preview,\n ExportImport,\n Checkbox\n },\n methods: {\n loadTheme (\n {\n theme,\n source,\n _pleroma_theme_version: fileVersion\n },\n origin,\n forceUseSource = false\n ) {\n this.dismissWarning()\n if (!source && !theme) {\n throw new Error('Can\\'t load theme: empty')\n }\n const version = (origin === 'localStorage' && !theme.colors)\n ? 'l1'\n : fileVersion\n const snapshotEngineVersion = (theme || {}).themeEngineVersion\n const themeEngineVersion = (source || {}).themeEngineVersion || 2\n const versionsMatch = themeEngineVersion === CURRENT_VERSION\n const sourceSnapshotMismatch = (\n theme !== undefined &&\n source !== undefined &&\n themeEngineVersion !== snapshotEngineVersion\n )\n // Force loading of source if user requested it or if snapshot\n // is unavailable\n const forcedSourceLoad = (source && forceUseSource) || !theme\n if (!(versionsMatch && !sourceSnapshotMismatch) &&\n !forcedSourceLoad &&\n version !== 'l1' &&\n origin !== 'defaults'\n ) {\n if (sourceSnapshotMismatch && origin === 'localStorage') {\n this.themeWarning = {\n origin,\n themeEngineVersion,\n type: 'snapshot_source_mismatch'\n }\n } else if (!theme) {\n this.themeWarning = {\n origin,\n noActionsPossible: true,\n themeEngineVersion,\n type: 'no_snapshot_old_version'\n }\n } else if (!versionsMatch) {\n this.themeWarning = {\n origin,\n noActionsPossible: !source,\n themeEngineVersion,\n type: 'wrong_version'\n }\n }\n }\n this.normalizeLocalState(theme, version, source, forcedSourceLoad)\n },\n forceLoadLocalStorage () {\n this.loadThemeFromLocalStorage(true)\n },\n dismissWarning () {\n this.themeWarning = undefined\n this.tempImportFile = undefined\n },\n forceLoad () {\n const { origin } = this.themeWarning\n switch (origin) {\n case 'localStorage':\n this.loadThemeFromLocalStorage(true)\n break\n case 'file':\n this.onImport(this.tempImportFile, true)\n break\n }\n this.dismissWarning()\n },\n forceSnapshot () {\n const { origin } = this.themeWarning\n switch (origin) {\n case 'localStorage':\n this.loadThemeFromLocalStorage(false, true)\n break\n case 'file':\n console.err('Forcing snapshout from file is not supported yet')\n break\n }\n this.dismissWarning()\n },\n loadThemeFromLocalStorage (confirmLoadSource = false, forceSnapshot = false) {\n const {\n customTheme: theme,\n customThemeSource: source\n } = this.$store.getters.mergedConfig\n if (!theme && !source) {\n // Anon user or never touched themes\n this.loadTheme(\n this.$store.state.instance.themeData,\n 'defaults',\n confirmLoadSource\n )\n } else {\n this.loadTheme(\n {\n theme,\n source: forceSnapshot ? theme : source\n },\n 'localStorage',\n confirmLoadSource\n )\n }\n },\n setCustomTheme () {\n this.$store.dispatch('setOption', {\n name: 'customTheme',\n value: {\n themeEngineVersion: CURRENT_VERSION,\n ...this.previewTheme\n }\n })\n this.$store.dispatch('setOption', {\n name: 'customThemeSource',\n value: {\n themeEngineVersion: CURRENT_VERSION,\n shadows: this.shadowsLocal,\n fonts: this.fontsLocal,\n opacity: this.currentOpacity,\n colors: this.currentColors,\n radii: this.currentRadii\n }\n })\n },\n updatePreviewColorsAndShadows () {\n this.previewColors = generateColors({\n opacity: this.currentOpacity,\n colors: this.currentColors\n })\n this.previewShadows = generateShadows(\n { shadows: this.shadowsLocal, opacity: this.previewTheme.opacity, themeEngineVersion: this.engineVersion },\n this.previewColors.theme.colors,\n this.previewColors.mod\n )\n },\n onImport (parsed, forceSource = false) {\n this.tempImportFile = parsed\n this.loadTheme(parsed, 'file', forceSource)\n },\n importValidator (parsed) {\n const version = parsed._pleroma_theme_version\n return version >= 1 || version <= 2\n },\n clearAll () {\n this.loadThemeFromLocalStorage()\n },\n\n // Clears all the extra stuff when loading V1 theme\n clearV1 () {\n Object.keys(this.$data)\n .filter(_ => _.endsWith('ColorLocal') || _.endsWith('OpacityLocal'))\n .filter(_ => !v1OnlyNames.includes(_))\n .forEach(key => {\n set(this.$data, key, undefined)\n })\n },\n\n clearRoundness () {\n Object.keys(this.$data)\n .filter(_ => _.endsWith('RadiusLocal'))\n .forEach(key => {\n set(this.$data, key, undefined)\n })\n },\n\n clearOpacity () {\n Object.keys(this.$data)\n .filter(_ => _.endsWith('OpacityLocal'))\n .forEach(key => {\n set(this.$data, key, undefined)\n })\n },\n\n clearShadows () {\n this.shadowsLocal = {}\n },\n\n clearFonts () {\n this.fontsLocal = {}\n },\n\n /**\n * This applies stored theme data onto form. Supports three versions of data:\n * v3 (version >= 3) - newest version of themes which supports snapshots for better compatiblity\n * v2 (version = 2) - newer version of themes.\n * v1 (version = 1) - older version of themes (import from file)\n * v1l (version = l1) - older version of theme (load from local storage)\n * v1 and v1l differ because of way themes were stored/exported.\n * @param {Object} theme - theme data (snapshot)\n * @param {Number} version - version of data. 0 means try to guess based on data. \"l1\" means v1, locastorage type\n * @param {Object} source - theme source - this will be used if compatible\n * @param {Boolean} source - by default source won't be used if version doesn't match since it might render differently\n * this allows importing source anyway\n */\n normalizeLocalState (theme, version = 0, source, forceSource = false) {\n let input\n if (typeof source !== 'undefined') {\n if (forceSource || source.themeEngineVersion === CURRENT_VERSION) {\n input = source\n version = source.themeEngineVersion\n } else {\n input = theme\n }\n } else {\n input = theme\n }\n\n const radii = input.radii || input\n const opacity = input.opacity\n const shadows = input.shadows || {}\n const fonts = input.fonts || {}\n const colors = !input.themeEngineVersion\n ? colors2to3(input.colors || input)\n : input.colors || input\n\n if (version === 0) {\n if (input.version) version = input.version\n // Old v1 naming: fg is text, btn is foreground\n if (typeof colors.text === 'undefined' && typeof colors.fg !== 'undefined') {\n version = 1\n }\n // New v2 naming: text is text, fg is foreground\n if (typeof colors.text !== 'undefined' && typeof colors.fg !== 'undefined') {\n version = 2\n }\n }\n\n this.engineVersion = version\n\n // Stuff that differs between V1 and V2\n if (version === 1) {\n this.fgColorLocal = rgb2hex(colors.btn)\n this.textColorLocal = rgb2hex(colors.fg)\n }\n\n if (!this.keepColor) {\n this.clearV1()\n const keys = new Set(version !== 1 ? Object.keys(SLOT_INHERITANCE) : [])\n if (version === 1 || version === 'l1') {\n keys\n .add('bg')\n .add('link')\n .add('cRed')\n .add('cBlue')\n .add('cGreen')\n .add('cOrange')\n }\n\n keys.forEach(key => {\n const color = colors[key]\n const hex = rgb2hex(colors[key])\n this[key + 'ColorLocal'] = hex === '#aN' ? color : hex\n })\n }\n\n if (opacity && !this.keepOpacity) {\n this.clearOpacity()\n Object.entries(opacity).forEach(([k, v]) => {\n if (typeof v === 'undefined' || v === null || Number.isNaN(v)) return\n this[k + 'OpacityLocal'] = v\n })\n }\n\n if (!this.keepRoundness) {\n this.clearRoundness()\n Object.entries(radii).forEach(([k, v]) => {\n // 'Radius' is kept mostly for v1->v2 localstorage transition\n const key = k.endsWith('Radius') ? k.split('Radius')[0] : k\n this[key + 'RadiusLocal'] = v\n })\n }\n\n if (!this.keepShadows) {\n this.clearShadows()\n if (version === 2) {\n this.shadowsLocal = shadows2to3(shadows, this.previewTheme.opacity)\n } else {\n this.shadowsLocal = shadows\n }\n this.shadowSelected = this.shadowsAvailable[0]\n }\n\n if (!this.keepFonts) {\n this.clearFonts()\n this.fontsLocal = fonts\n }\n }\n },\n watch: {\n currentRadii () {\n try {\n this.previewRadii = generateRadii({ radii: this.currentRadii })\n this.radiiInvalid = false\n } catch (e) {\n this.radiiInvalid = true\n console.warn(e)\n }\n },\n shadowsLocal: {\n handler () {\n if (Object.getOwnPropertyNames(this.previewColors).length === 1) return\n try {\n this.updatePreviewColorsAndShadows()\n this.shadowsInvalid = false\n } catch (e) {\n this.shadowsInvalid = true\n console.warn(e)\n }\n },\n deep: true\n },\n fontsLocal: {\n handler () {\n try {\n this.previewFonts = generateFonts({ fonts: this.fontsLocal })\n this.fontsInvalid = false\n } catch (e) {\n this.fontsInvalid = true\n console.warn(e)\n }\n },\n deep: true\n },\n currentColors () {\n try {\n this.updatePreviewColorsAndShadows()\n this.colorsInvalid = false\n this.shadowsInvalid = false\n } catch (e) {\n this.colorsInvalid = true\n this.shadowsInvalid = true\n console.warn(e)\n }\n },\n currentOpacity () {\n try {\n this.updatePreviewColorsAndShadows()\n } catch (e) {\n console.warn(e)\n }\n },\n selected () {\n this.dismissWarning()\n if (this.selectedVersion === 1) {\n if (!this.keepRoundness) {\n this.clearRoundness()\n }\n\n if (!this.keepShadows) {\n this.clearShadows()\n }\n\n if (!this.keepOpacity) {\n this.clearOpacity()\n }\n\n if (!this.keepColor) {\n this.clearV1()\n\n this.bgColorLocal = this.selected[1]\n this.fgColorLocal = this.selected[2]\n this.textColorLocal = this.selected[3]\n this.linkColorLocal = this.selected[4]\n this.cRedColorLocal = this.selected[5]\n this.cGreenColorLocal = this.selected[6]\n this.cBlueColorLocal = this.selected[7]\n this.cOrangeColorLocal = this.selected[8]\n }\n } else if (this.selectedVersion >= 2) {\n this.normalizeLocalState(this.selected.theme, 2, this.selected.source)\n }\n }\n }\n}\n","function injectStyle (context) {\n require(\"!!vue-style-loader!css-loader?minimize!../../../../../node_modules/vue-loader/lib/style-compiler/index?{\\\"optionsId\\\":\\\"0\\\",\\\"vue\\\":true,\\\"scoped\\\":false,\\\"sourceMap\\\":false}!sass-loader!./theme_tab.scss\")\n}\n/* script */\nexport * from \"!!babel-loader!./theme_tab.js\"\nimport __vue_script__ from \"!!babel-loader!./theme_tab.js\"/* template */\nimport {render as __vue_render__, staticRenderFns as __vue_static_render_fns__} from \"!!../../../../../node_modules/vue-loader/lib/template-compiler/index?{\\\"id\\\":\\\"data-v-03c6cfba\\\",\\\"hasScoped\\\":false,\\\"optionsId\\\":\\\"0\\\",\\\"buble\\\":{\\\"transforms\\\":{}}}!../../../../../node_modules/vue-loader/lib/selector?type=template&index=0!./theme_tab.vue\"\n/* template functional */\nvar __vue_template_functional__ = false\n/* styles */\nvar __vue_styles__ = injectStyle\n/* scopeId */\nvar __vue_scopeId__ = null\n/* moduleIdentifier (server only) */\nvar __vue_module_identifier__ = null\nimport normalizeComponent from \"!../../../../../node_modules/vue-loader/lib/runtime/component-normalizer\"\nvar Component = normalizeComponent(\n __vue_script__,\n __vue_render__,\n __vue_static_render_fns__,\n __vue_template_functional__,\n __vue_styles__,\n __vue_scopeId__,\n __vue_module_identifier__\n)\n\nexport default Component.exports\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"theme-tab\"},[_c('div',{staticClass:\"presets-container\"},[_c('div',{staticClass:\"save-load\"},[(_vm.themeWarning)?_c('div',{staticClass:\"theme-warning\"},[_c('div',{staticClass:\"alert warning\"},[_vm._v(\"\\n \"+_vm._s(_vm.themeWarningHelp)+\"\\n \")]),_vm._v(\" \"),_c('div',{staticClass:\"buttons\"},[(_vm.themeWarning.type === 'snapshot_source_mismatch')?[_c('button',{staticClass:\"btn\",on:{\"click\":_vm.forceLoad}},[_vm._v(\"\\n \"+_vm._s(_vm.$t('settings.style.switcher.use_source'))+\"\\n \")]),_vm._v(\" \"),_c('button',{staticClass:\"btn\",on:{\"click\":_vm.forceSnapshot}},[_vm._v(\"\\n \"+_vm._s(_vm.$t('settings.style.switcher.use_snapshot'))+\"\\n \")])]:(_vm.themeWarning.noActionsPossible)?[_c('button',{staticClass:\"btn\",on:{\"click\":_vm.dismissWarning}},[_vm._v(\"\\n \"+_vm._s(_vm.$t('general.dismiss'))+\"\\n \")])]:[_c('button',{staticClass:\"btn\",on:{\"click\":_vm.forceLoad}},[_vm._v(\"\\n \"+_vm._s(_vm.$t('settings.style.switcher.load_theme'))+\"\\n \")]),_vm._v(\" \"),_c('button',{staticClass:\"btn\",on:{\"click\":_vm.dismissWarning}},[_vm._v(\"\\n \"+_vm._s(_vm.$t('settings.style.switcher.keep_as_is'))+\"\\n \")])]],2)]):_vm._e(),_vm._v(\" \"),_c('ExportImport',{attrs:{\"export-object\":_vm.exportedTheme,\"export-label\":_vm.$t(\"settings.export_theme\"),\"import-label\":_vm.$t(\"settings.import_theme\"),\"import-failed-text\":_vm.$t(\"settings.invalid_theme_imported\"),\"on-import\":_vm.onImport,\"validator\":_vm.importValidator}},[_c('template',{slot:\"before\"},[_c('div',{staticClass:\"presets\"},[_vm._v(\"\\n \"+_vm._s(_vm.$t('settings.presets'))+\"\\n \"),_c('label',{staticClass:\"select\",attrs:{\"for\":\"preset-switcher\"}},[_c('select',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.selected),expression:\"selected\"}],staticClass:\"preset-switcher\",attrs:{\"id\":\"preset-switcher\"},on:{\"change\":function($event){var $$selectedVal = Array.prototype.filter.call($event.target.options,function(o){return o.selected}).map(function(o){var val = \"_value\" in o ? o._value : o.value;return val}); _vm.selected=$event.target.multiple ? $$selectedVal : $$selectedVal[0]}}},_vm._l((_vm.availableStyles),function(style){return _c('option',{key:style.name,style:({\n backgroundColor: style[1] || (style.theme || style.source).colors.bg,\n color: style[3] || (style.theme || style.source).colors.text\n }),domProps:{\"value\":style}},[_vm._v(\"\\n \"+_vm._s(style[0] || style.name)+\"\\n \")])}),0),_vm._v(\" \"),_c('i',{staticClass:\"icon-down-open\"})])])])],2)],1),_vm._v(\" \"),_c('div',{staticClass:\"save-load-options\"},[_c('span',{staticClass:\"keep-option\"},[_c('Checkbox',{model:{value:(_vm.keepColor),callback:function ($$v) {_vm.keepColor=$$v},expression:\"keepColor\"}},[_vm._v(\"\\n \"+_vm._s(_vm.$t('settings.style.switcher.keep_color'))+\"\\n \")])],1),_vm._v(\" \"),_c('span',{staticClass:\"keep-option\"},[_c('Checkbox',{model:{value:(_vm.keepShadows),callback:function ($$v) {_vm.keepShadows=$$v},expression:\"keepShadows\"}},[_vm._v(\"\\n \"+_vm._s(_vm.$t('settings.style.switcher.keep_shadows'))+\"\\n \")])],1),_vm._v(\" \"),_c('span',{staticClass:\"keep-option\"},[_c('Checkbox',{model:{value:(_vm.keepOpacity),callback:function ($$v) {_vm.keepOpacity=$$v},expression:\"keepOpacity\"}},[_vm._v(\"\\n \"+_vm._s(_vm.$t('settings.style.switcher.keep_opacity'))+\"\\n \")])],1),_vm._v(\" \"),_c('span',{staticClass:\"keep-option\"},[_c('Checkbox',{model:{value:(_vm.keepRoundness),callback:function ($$v) {_vm.keepRoundness=$$v},expression:\"keepRoundness\"}},[_vm._v(\"\\n \"+_vm._s(_vm.$t('settings.style.switcher.keep_roundness'))+\"\\n \")])],1),_vm._v(\" \"),_c('span',{staticClass:\"keep-option\"},[_c('Checkbox',{model:{value:(_vm.keepFonts),callback:function ($$v) {_vm.keepFonts=$$v},expression:\"keepFonts\"}},[_vm._v(\"\\n \"+_vm._s(_vm.$t('settings.style.switcher.keep_fonts'))+\"\\n \")])],1),_vm._v(\" \"),_c('p',[_vm._v(_vm._s(_vm.$t('settings.style.switcher.save_load_hint')))])])]),_vm._v(\" \"),_c('preview',{style:(_vm.previewRules)}),_vm._v(\" \"),_c('keep-alive',[_c('tab-switcher',{key:\"style-tweak\"},[_c('div',{staticClass:\"color-container\",attrs:{\"label\":_vm.$t('settings.style.common_colors._tab_label')}},[_c('div',{staticClass:\"tab-header\"},[_c('p',[_vm._v(_vm._s(_vm.$t('settings.theme_help')))]),_vm._v(\" \"),_c('div',{staticClass:\"tab-header-buttons\"},[_c('button',{staticClass:\"btn\",on:{\"click\":_vm.clearOpacity}},[_vm._v(\"\\n \"+_vm._s(_vm.$t('settings.style.switcher.clear_opacity'))+\"\\n \")]),_vm._v(\" \"),_c('button',{staticClass:\"btn\",on:{\"click\":_vm.clearV1}},[_vm._v(\"\\n \"+_vm._s(_vm.$t('settings.style.switcher.clear_all'))+\"\\n \")])])]),_vm._v(\" \"),_c('p',[_vm._v(_vm._s(_vm.$t('settings.theme_help_v2_1')))]),_vm._v(\" \"),_c('h4',[_vm._v(_vm._s(_vm.$t('settings.style.common_colors.main')))]),_vm._v(\" \"),_c('div',{staticClass:\"color-item\"},[_c('ColorInput',{attrs:{\"name\":\"bgColor\",\"label\":_vm.$t('settings.background')},model:{value:(_vm.bgColorLocal),callback:function ($$v) {_vm.bgColorLocal=$$v},expression:\"bgColorLocal\"}}),_vm._v(\" \"),_c('OpacityInput',{attrs:{\"name\":\"bgOpacity\",\"fallback\":_vm.previewTheme.opacity.bg},model:{value:(_vm.bgOpacityLocal),callback:function ($$v) {_vm.bgOpacityLocal=$$v},expression:\"bgOpacityLocal\"}}),_vm._v(\" \"),_c('ColorInput',{attrs:{\"name\":\"textColor\",\"label\":_vm.$t('settings.text')},model:{value:(_vm.textColorLocal),callback:function ($$v) {_vm.textColorLocal=$$v},expression:\"textColorLocal\"}}),_vm._v(\" \"),_c('ContrastRatio',{attrs:{\"contrast\":_vm.previewContrast.bgText}}),_vm._v(\" \"),_c('ColorInput',{attrs:{\"name\":\"accentColor\",\"fallback\":_vm.previewTheme.colors.link,\"label\":_vm.$t('settings.accent'),\"show-optional-tickbox\":typeof _vm.linkColorLocal !== 'undefined'},model:{value:(_vm.accentColorLocal),callback:function ($$v) {_vm.accentColorLocal=$$v},expression:\"accentColorLocal\"}}),_vm._v(\" \"),_c('ColorInput',{attrs:{\"name\":\"linkColor\",\"fallback\":_vm.previewTheme.colors.accent,\"label\":_vm.$t('settings.links'),\"show-optional-tickbox\":typeof _vm.accentColorLocal !== 'undefined'},model:{value:(_vm.linkColorLocal),callback:function ($$v) {_vm.linkColorLocal=$$v},expression:\"linkColorLocal\"}}),_vm._v(\" \"),_c('ContrastRatio',{attrs:{\"contrast\":_vm.previewContrast.bgLink}})],1),_vm._v(\" \"),_c('div',{staticClass:\"color-item\"},[_c('ColorInput',{attrs:{\"name\":\"fgColor\",\"label\":_vm.$t('settings.foreground')},model:{value:(_vm.fgColorLocal),callback:function ($$v) {_vm.fgColorLocal=$$v},expression:\"fgColorLocal\"}}),_vm._v(\" \"),_c('ColorInput',{attrs:{\"name\":\"fgTextColor\",\"label\":_vm.$t('settings.text'),\"fallback\":_vm.previewTheme.colors.fgText},model:{value:(_vm.fgTextColorLocal),callback:function ($$v) {_vm.fgTextColorLocal=$$v},expression:\"fgTextColorLocal\"}}),_vm._v(\" \"),_c('ColorInput',{attrs:{\"name\":\"fgLinkColor\",\"label\":_vm.$t('settings.links'),\"fallback\":_vm.previewTheme.colors.fgLink},model:{value:(_vm.fgLinkColorLocal),callback:function ($$v) {_vm.fgLinkColorLocal=$$v},expression:\"fgLinkColorLocal\"}}),_vm._v(\" \"),_c('p',[_vm._v(_vm._s(_vm.$t('settings.style.common_colors.foreground_hint')))])],1),_vm._v(\" \"),_c('h4',[_vm._v(_vm._s(_vm.$t('settings.style.common_colors.rgbo')))]),_vm._v(\" \"),_c('div',{staticClass:\"color-item\"},[_c('ColorInput',{attrs:{\"name\":\"cRedColor\",\"label\":_vm.$t('settings.cRed')},model:{value:(_vm.cRedColorLocal),callback:function ($$v) {_vm.cRedColorLocal=$$v},expression:\"cRedColorLocal\"}}),_vm._v(\" \"),_c('ContrastRatio',{attrs:{\"contrast\":_vm.previewContrast.bgCRed}}),_vm._v(\" \"),_c('ColorInput',{attrs:{\"name\":\"cBlueColor\",\"label\":_vm.$t('settings.cBlue')},model:{value:(_vm.cBlueColorLocal),callback:function ($$v) {_vm.cBlueColorLocal=$$v},expression:\"cBlueColorLocal\"}}),_vm._v(\" \"),_c('ContrastRatio',{attrs:{\"contrast\":_vm.previewContrast.bgCBlue}})],1),_vm._v(\" \"),_c('div',{staticClass:\"color-item\"},[_c('ColorInput',{attrs:{\"name\":\"cGreenColor\",\"label\":_vm.$t('settings.cGreen')},model:{value:(_vm.cGreenColorLocal),callback:function ($$v) {_vm.cGreenColorLocal=$$v},expression:\"cGreenColorLocal\"}}),_vm._v(\" \"),_c('ContrastRatio',{attrs:{\"contrast\":_vm.previewContrast.bgCGreen}}),_vm._v(\" \"),_c('ColorInput',{attrs:{\"name\":\"cOrangeColor\",\"label\":_vm.$t('settings.cOrange')},model:{value:(_vm.cOrangeColorLocal),callback:function ($$v) {_vm.cOrangeColorLocal=$$v},expression:\"cOrangeColorLocal\"}}),_vm._v(\" \"),_c('ContrastRatio',{attrs:{\"contrast\":_vm.previewContrast.bgCOrange}})],1),_vm._v(\" \"),_c('p',[_vm._v(_vm._s(_vm.$t('settings.theme_help_v2_2')))])]),_vm._v(\" \"),_c('div',{staticClass:\"color-container\",attrs:{\"label\":_vm.$t('settings.style.advanced_colors._tab_label')}},[_c('div',{staticClass:\"tab-header\"},[_c('p',[_vm._v(_vm._s(_vm.$t('settings.theme_help')))]),_vm._v(\" \"),_c('button',{staticClass:\"btn\",on:{\"click\":_vm.clearOpacity}},[_vm._v(\"\\n \"+_vm._s(_vm.$t('settings.style.switcher.clear_opacity'))+\"\\n \")]),_vm._v(\" \"),_c('button',{staticClass:\"btn\",on:{\"click\":_vm.clearV1}},[_vm._v(\"\\n \"+_vm._s(_vm.$t('settings.style.switcher.clear_all'))+\"\\n \")])]),_vm._v(\" \"),_c('div',{staticClass:\"color-item\"},[_c('h4',[_vm._v(_vm._s(_vm.$t('settings.style.advanced_colors.post')))]),_vm._v(\" \"),_c('ColorInput',{attrs:{\"name\":\"postLinkColor\",\"fallback\":_vm.previewTheme.colors.accent,\"label\":_vm.$t('settings.links')},model:{value:(_vm.postLinkColorLocal),callback:function ($$v) {_vm.postLinkColorLocal=$$v},expression:\"postLinkColorLocal\"}}),_vm._v(\" \"),_c('ContrastRatio',{attrs:{\"contrast\":_vm.previewContrast.postLink}}),_vm._v(\" \"),_c('ColorInput',{attrs:{\"name\":\"postGreentextColor\",\"fallback\":_vm.previewTheme.colors.cGreen,\"label\":_vm.$t('settings.greentext')},model:{value:(_vm.postGreentextColorLocal),callback:function ($$v) {_vm.postGreentextColorLocal=$$v},expression:\"postGreentextColorLocal\"}}),_vm._v(\" \"),_c('ContrastRatio',{attrs:{\"contrast\":_vm.previewContrast.postGreentext}}),_vm._v(\" \"),_c('h4',[_vm._v(_vm._s(_vm.$t('settings.style.advanced_colors.alert')))]),_vm._v(\" \"),_c('ColorInput',{attrs:{\"name\":\"alertError\",\"label\":_vm.$t('settings.style.advanced_colors.alert_error'),\"fallback\":_vm.previewTheme.colors.alertError},model:{value:(_vm.alertErrorColorLocal),callback:function ($$v) {_vm.alertErrorColorLocal=$$v},expression:\"alertErrorColorLocal\"}}),_vm._v(\" \"),_c('ColorInput',{attrs:{\"name\":\"alertErrorText\",\"label\":_vm.$t('settings.text'),\"fallback\":_vm.previewTheme.colors.alertErrorText},model:{value:(_vm.alertErrorTextColorLocal),callback:function ($$v) {_vm.alertErrorTextColorLocal=$$v},expression:\"alertErrorTextColorLocal\"}}),_vm._v(\" \"),_c('ContrastRatio',{attrs:{\"contrast\":_vm.previewContrast.alertErrorText,\"large\":\"\"}}),_vm._v(\" \"),_c('ColorInput',{attrs:{\"name\":\"alertWarning\",\"label\":_vm.$t('settings.style.advanced_colors.alert_warning'),\"fallback\":_vm.previewTheme.colors.alertWarning},model:{value:(_vm.alertWarningColorLocal),callback:function ($$v) {_vm.alertWarningColorLocal=$$v},expression:\"alertWarningColorLocal\"}}),_vm._v(\" \"),_c('ColorInput',{attrs:{\"name\":\"alertWarningText\",\"label\":_vm.$t('settings.text'),\"fallback\":_vm.previewTheme.colors.alertWarningText},model:{value:(_vm.alertWarningTextColorLocal),callback:function ($$v) {_vm.alertWarningTextColorLocal=$$v},expression:\"alertWarningTextColorLocal\"}}),_vm._v(\" \"),_c('ContrastRatio',{attrs:{\"contrast\":_vm.previewContrast.alertWarningText,\"large\":\"\"}}),_vm._v(\" \"),_c('ColorInput',{attrs:{\"name\":\"alertNeutral\",\"label\":_vm.$t('settings.style.advanced_colors.alert_neutral'),\"fallback\":_vm.previewTheme.colors.alertNeutral},model:{value:(_vm.alertNeutralColorLocal),callback:function ($$v) {_vm.alertNeutralColorLocal=$$v},expression:\"alertNeutralColorLocal\"}}),_vm._v(\" \"),_c('ColorInput',{attrs:{\"name\":\"alertNeutralText\",\"label\":_vm.$t('settings.text'),\"fallback\":_vm.previewTheme.colors.alertNeutralText},model:{value:(_vm.alertNeutralTextColorLocal),callback:function ($$v) {_vm.alertNeutralTextColorLocal=$$v},expression:\"alertNeutralTextColorLocal\"}}),_vm._v(\" \"),_c('ContrastRatio',{attrs:{\"contrast\":_vm.previewContrast.alertNeutralText,\"large\":\"\"}}),_vm._v(\" \"),_c('OpacityInput',{attrs:{\"name\":\"alertOpacity\",\"fallback\":_vm.previewTheme.opacity.alert},model:{value:(_vm.alertOpacityLocal),callback:function ($$v) {_vm.alertOpacityLocal=$$v},expression:\"alertOpacityLocal\"}})],1),_vm._v(\" \"),_c('div',{staticClass:\"color-item\"},[_c('h4',[_vm._v(_vm._s(_vm.$t('settings.style.advanced_colors.badge')))]),_vm._v(\" \"),_c('ColorInput',{attrs:{\"name\":\"badgeNotification\",\"label\":_vm.$t('settings.style.advanced_colors.badge_notification'),\"fallback\":_vm.previewTheme.colors.badgeNotification},model:{value:(_vm.badgeNotificationColorLocal),callback:function ($$v) {_vm.badgeNotificationColorLocal=$$v},expression:\"badgeNotificationColorLocal\"}}),_vm._v(\" \"),_c('ColorInput',{attrs:{\"name\":\"badgeNotificationText\",\"label\":_vm.$t('settings.text'),\"fallback\":_vm.previewTheme.colors.badgeNotificationText},model:{value:(_vm.badgeNotificationTextColorLocal),callback:function ($$v) {_vm.badgeNotificationTextColorLocal=$$v},expression:\"badgeNotificationTextColorLocal\"}}),_vm._v(\" \"),_c('ContrastRatio',{attrs:{\"contrast\":_vm.previewContrast.badgeNotificationText,\"large\":\"\"}})],1),_vm._v(\" \"),_c('div',{staticClass:\"color-item\"},[_c('h4',[_vm._v(_vm._s(_vm.$t('settings.style.advanced_colors.panel_header')))]),_vm._v(\" \"),_c('ColorInput',{attrs:{\"name\":\"panelColor\",\"fallback\":_vm.previewTheme.colors.panel,\"label\":_vm.$t('settings.background')},model:{value:(_vm.panelColorLocal),callback:function ($$v) {_vm.panelColorLocal=$$v},expression:\"panelColorLocal\"}}),_vm._v(\" \"),_c('OpacityInput',{attrs:{\"name\":\"panelOpacity\",\"fallback\":_vm.previewTheme.opacity.panel,\"disabled\":_vm.panelColorLocal === 'transparent'},model:{value:(_vm.panelOpacityLocal),callback:function ($$v) {_vm.panelOpacityLocal=$$v},expression:\"panelOpacityLocal\"}}),_vm._v(\" \"),_c('ColorInput',{attrs:{\"name\":\"panelTextColor\",\"fallback\":_vm.previewTheme.colors.panelText,\"label\":_vm.$t('settings.text')},model:{value:(_vm.panelTextColorLocal),callback:function ($$v) {_vm.panelTextColorLocal=$$v},expression:\"panelTextColorLocal\"}}),_vm._v(\" \"),_c('ContrastRatio',{attrs:{\"contrast\":_vm.previewContrast.panelText,\"large\":\"\"}}),_vm._v(\" \"),_c('ColorInput',{attrs:{\"name\":\"panelLinkColor\",\"fallback\":_vm.previewTheme.colors.panelLink,\"label\":_vm.$t('settings.links')},model:{value:(_vm.panelLinkColorLocal),callback:function ($$v) {_vm.panelLinkColorLocal=$$v},expression:\"panelLinkColorLocal\"}}),_vm._v(\" \"),_c('ContrastRatio',{attrs:{\"contrast\":_vm.previewContrast.panelLink,\"large\":\"\"}})],1),_vm._v(\" \"),_c('div',{staticClass:\"color-item\"},[_c('h4',[_vm._v(_vm._s(_vm.$t('settings.style.advanced_colors.top_bar')))]),_vm._v(\" \"),_c('ColorInput',{attrs:{\"name\":\"topBarColor\",\"fallback\":_vm.previewTheme.colors.topBar,\"label\":_vm.$t('settings.background')},model:{value:(_vm.topBarColorLocal),callback:function ($$v) {_vm.topBarColorLocal=$$v},expression:\"topBarColorLocal\"}}),_vm._v(\" \"),_c('ColorInput',{attrs:{\"name\":\"topBarTextColor\",\"fallback\":_vm.previewTheme.colors.topBarText,\"label\":_vm.$t('settings.text')},model:{value:(_vm.topBarTextColorLocal),callback:function ($$v) {_vm.topBarTextColorLocal=$$v},expression:\"topBarTextColorLocal\"}}),_vm._v(\" \"),_c('ContrastRatio',{attrs:{\"contrast\":_vm.previewContrast.topBarText}}),_vm._v(\" \"),_c('ColorInput',{attrs:{\"name\":\"topBarLinkColor\",\"fallback\":_vm.previewTheme.colors.topBarLink,\"label\":_vm.$t('settings.links')},model:{value:(_vm.topBarLinkColorLocal),callback:function ($$v) {_vm.topBarLinkColorLocal=$$v},expression:\"topBarLinkColorLocal\"}}),_vm._v(\" \"),_c('ContrastRatio',{attrs:{\"contrast\":_vm.previewContrast.topBarLink}})],1),_vm._v(\" \"),_c('div',{staticClass:\"color-item\"},[_c('h4',[_vm._v(_vm._s(_vm.$t('settings.style.advanced_colors.inputs')))]),_vm._v(\" \"),_c('ColorInput',{attrs:{\"name\":\"inputColor\",\"fallback\":_vm.previewTheme.colors.input,\"label\":_vm.$t('settings.background')},model:{value:(_vm.inputColorLocal),callback:function ($$v) {_vm.inputColorLocal=$$v},expression:\"inputColorLocal\"}}),_vm._v(\" \"),_c('OpacityInput',{attrs:{\"name\":\"inputOpacity\",\"fallback\":_vm.previewTheme.opacity.input,\"disabled\":_vm.inputColorLocal === 'transparent'},model:{value:(_vm.inputOpacityLocal),callback:function ($$v) {_vm.inputOpacityLocal=$$v},expression:\"inputOpacityLocal\"}}),_vm._v(\" \"),_c('ColorInput',{attrs:{\"name\":\"inputTextColor\",\"fallback\":_vm.previewTheme.colors.inputText,\"label\":_vm.$t('settings.text')},model:{value:(_vm.inputTextColorLocal),callback:function ($$v) {_vm.inputTextColorLocal=$$v},expression:\"inputTextColorLocal\"}}),_vm._v(\" \"),_c('ContrastRatio',{attrs:{\"contrast\":_vm.previewContrast.inputText}})],1),_vm._v(\" \"),_c('div',{staticClass:\"color-item\"},[_c('h4',[_vm._v(_vm._s(_vm.$t('settings.style.advanced_colors.buttons')))]),_vm._v(\" \"),_c('ColorInput',{attrs:{\"name\":\"btnColor\",\"fallback\":_vm.previewTheme.colors.btn,\"label\":_vm.$t('settings.background')},model:{value:(_vm.btnColorLocal),callback:function ($$v) {_vm.btnColorLocal=$$v},expression:\"btnColorLocal\"}}),_vm._v(\" \"),_c('OpacityInput',{attrs:{\"name\":\"btnOpacity\",\"fallback\":_vm.previewTheme.opacity.btn,\"disabled\":_vm.btnColorLocal === 'transparent'},model:{value:(_vm.btnOpacityLocal),callback:function ($$v) {_vm.btnOpacityLocal=$$v},expression:\"btnOpacityLocal\"}}),_vm._v(\" \"),_c('ColorInput',{attrs:{\"name\":\"btnTextColor\",\"fallback\":_vm.previewTheme.colors.btnText,\"label\":_vm.$t('settings.text')},model:{value:(_vm.btnTextColorLocal),callback:function ($$v) {_vm.btnTextColorLocal=$$v},expression:\"btnTextColorLocal\"}}),_vm._v(\" \"),_c('ContrastRatio',{attrs:{\"contrast\":_vm.previewContrast.btnText}}),_vm._v(\" \"),_c('ColorInput',{attrs:{\"name\":\"btnPanelTextColor\",\"fallback\":_vm.previewTheme.colors.btnPanelText,\"label\":_vm.$t('settings.style.advanced_colors.panel_header')},model:{value:(_vm.btnPanelTextColorLocal),callback:function ($$v) {_vm.btnPanelTextColorLocal=$$v},expression:\"btnPanelTextColorLocal\"}}),_vm._v(\" \"),_c('ContrastRatio',{attrs:{\"contrast\":_vm.previewContrast.btnPanelText}}),_vm._v(\" \"),_c('ColorInput',{attrs:{\"name\":\"btnTopBarTextColor\",\"fallback\":_vm.previewTheme.colors.btnTopBarText,\"label\":_vm.$t('settings.style.advanced_colors.top_bar')},model:{value:(_vm.btnTopBarTextColorLocal),callback:function ($$v) {_vm.btnTopBarTextColorLocal=$$v},expression:\"btnTopBarTextColorLocal\"}}),_vm._v(\" \"),_c('ContrastRatio',{attrs:{\"contrast\":_vm.previewContrast.btnTopBarText}}),_vm._v(\" \"),_c('h5',[_vm._v(_vm._s(_vm.$t('settings.style.advanced_colors.pressed')))]),_vm._v(\" \"),_c('ColorInput',{attrs:{\"name\":\"btnPressedColor\",\"fallback\":_vm.previewTheme.colors.btnPressed,\"label\":_vm.$t('settings.background')},model:{value:(_vm.btnPressedColorLocal),callback:function ($$v) {_vm.btnPressedColorLocal=$$v},expression:\"btnPressedColorLocal\"}}),_vm._v(\" \"),_c('ColorInput',{attrs:{\"name\":\"btnPressedTextColor\",\"fallback\":_vm.previewTheme.colors.btnPressedText,\"label\":_vm.$t('settings.text')},model:{value:(_vm.btnPressedTextColorLocal),callback:function ($$v) {_vm.btnPressedTextColorLocal=$$v},expression:\"btnPressedTextColorLocal\"}}),_vm._v(\" \"),_c('ContrastRatio',{attrs:{\"contrast\":_vm.previewContrast.btnPressedText}}),_vm._v(\" \"),_c('ColorInput',{attrs:{\"name\":\"btnPressedPanelTextColor\",\"fallback\":_vm.previewTheme.colors.btnPressedPanelText,\"label\":_vm.$t('settings.style.advanced_colors.panel_header')},model:{value:(_vm.btnPressedPanelTextColorLocal),callback:function ($$v) {_vm.btnPressedPanelTextColorLocal=$$v},expression:\"btnPressedPanelTextColorLocal\"}}),_vm._v(\" \"),_c('ContrastRatio',{attrs:{\"contrast\":_vm.previewContrast.btnPressedPanelText}}),_vm._v(\" \"),_c('ColorInput',{attrs:{\"name\":\"btnPressedTopBarTextColor\",\"fallback\":_vm.previewTheme.colors.btnPressedTopBarText,\"label\":_vm.$t('settings.style.advanced_colors.top_bar')},model:{value:(_vm.btnPressedTopBarTextColorLocal),callback:function ($$v) {_vm.btnPressedTopBarTextColorLocal=$$v},expression:\"btnPressedTopBarTextColorLocal\"}}),_vm._v(\" \"),_c('ContrastRatio',{attrs:{\"contrast\":_vm.previewContrast.btnPressedTopBarText}}),_vm._v(\" \"),_c('h5',[_vm._v(_vm._s(_vm.$t('settings.style.advanced_colors.disabled')))]),_vm._v(\" \"),_c('ColorInput',{attrs:{\"name\":\"btnDisabledColor\",\"fallback\":_vm.previewTheme.colors.btnDisabled,\"label\":_vm.$t('settings.background')},model:{value:(_vm.btnDisabledColorLocal),callback:function ($$v) {_vm.btnDisabledColorLocal=$$v},expression:\"btnDisabledColorLocal\"}}),_vm._v(\" \"),_c('ColorInput',{attrs:{\"name\":\"btnDisabledTextColor\",\"fallback\":_vm.previewTheme.colors.btnDisabledText,\"label\":_vm.$t('settings.text')},model:{value:(_vm.btnDisabledTextColorLocal),callback:function ($$v) {_vm.btnDisabledTextColorLocal=$$v},expression:\"btnDisabledTextColorLocal\"}}),_vm._v(\" \"),_c('ColorInput',{attrs:{\"name\":\"btnDisabledPanelTextColor\",\"fallback\":_vm.previewTheme.colors.btnDisabledPanelText,\"label\":_vm.$t('settings.style.advanced_colors.panel_header')},model:{value:(_vm.btnDisabledPanelTextColorLocal),callback:function ($$v) {_vm.btnDisabledPanelTextColorLocal=$$v},expression:\"btnDisabledPanelTextColorLocal\"}}),_vm._v(\" \"),_c('ColorInput',{attrs:{\"name\":\"btnDisabledTopBarTextColor\",\"fallback\":_vm.previewTheme.colors.btnDisabledTopBarText,\"label\":_vm.$t('settings.style.advanced_colors.top_bar')},model:{value:(_vm.btnDisabledTopBarTextColorLocal),callback:function ($$v) {_vm.btnDisabledTopBarTextColorLocal=$$v},expression:\"btnDisabledTopBarTextColorLocal\"}}),_vm._v(\" \"),_c('h5',[_vm._v(_vm._s(_vm.$t('settings.style.advanced_colors.toggled')))]),_vm._v(\" \"),_c('ColorInput',{attrs:{\"name\":\"btnToggledColor\",\"fallback\":_vm.previewTheme.colors.btnToggled,\"label\":_vm.$t('settings.background')},model:{value:(_vm.btnToggledColorLocal),callback:function ($$v) {_vm.btnToggledColorLocal=$$v},expression:\"btnToggledColorLocal\"}}),_vm._v(\" \"),_c('ColorInput',{attrs:{\"name\":\"btnToggledTextColor\",\"fallback\":_vm.previewTheme.colors.btnToggledText,\"label\":_vm.$t('settings.text')},model:{value:(_vm.btnToggledTextColorLocal),callback:function ($$v) {_vm.btnToggledTextColorLocal=$$v},expression:\"btnToggledTextColorLocal\"}}),_vm._v(\" \"),_c('ContrastRatio',{attrs:{\"contrast\":_vm.previewContrast.btnToggledText}}),_vm._v(\" \"),_c('ColorInput',{attrs:{\"name\":\"btnToggledPanelTextColor\",\"fallback\":_vm.previewTheme.colors.btnToggledPanelText,\"label\":_vm.$t('settings.style.advanced_colors.panel_header')},model:{value:(_vm.btnToggledPanelTextColorLocal),callback:function ($$v) {_vm.btnToggledPanelTextColorLocal=$$v},expression:\"btnToggledPanelTextColorLocal\"}}),_vm._v(\" \"),_c('ContrastRatio',{attrs:{\"contrast\":_vm.previewContrast.btnToggledPanelText}}),_vm._v(\" \"),_c('ColorInput',{attrs:{\"name\":\"btnToggledTopBarTextColor\",\"fallback\":_vm.previewTheme.colors.btnToggledTopBarText,\"label\":_vm.$t('settings.style.advanced_colors.top_bar')},model:{value:(_vm.btnToggledTopBarTextColorLocal),callback:function ($$v) {_vm.btnToggledTopBarTextColorLocal=$$v},expression:\"btnToggledTopBarTextColorLocal\"}}),_vm._v(\" \"),_c('ContrastRatio',{attrs:{\"contrast\":_vm.previewContrast.btnToggledTopBarText}})],1),_vm._v(\" \"),_c('div',{staticClass:\"color-item\"},[_c('h4',[_vm._v(_vm._s(_vm.$t('settings.style.advanced_colors.tabs')))]),_vm._v(\" \"),_c('ColorInput',{attrs:{\"name\":\"tabColor\",\"fallback\":_vm.previewTheme.colors.tab,\"label\":_vm.$t('settings.background')},model:{value:(_vm.tabColorLocal),callback:function ($$v) {_vm.tabColorLocal=$$v},expression:\"tabColorLocal\"}}),_vm._v(\" \"),_c('ColorInput',{attrs:{\"name\":\"tabTextColor\",\"fallback\":_vm.previewTheme.colors.tabText,\"label\":_vm.$t('settings.text')},model:{value:(_vm.tabTextColorLocal),callback:function ($$v) {_vm.tabTextColorLocal=$$v},expression:\"tabTextColorLocal\"}}),_vm._v(\" \"),_c('ContrastRatio',{attrs:{\"contrast\":_vm.previewContrast.tabText}}),_vm._v(\" \"),_c('ColorInput',{attrs:{\"name\":\"tabActiveTextColor\",\"fallback\":_vm.previewTheme.colors.tabActiveText,\"label\":_vm.$t('settings.text')},model:{value:(_vm.tabActiveTextColorLocal),callback:function ($$v) {_vm.tabActiveTextColorLocal=$$v},expression:\"tabActiveTextColorLocal\"}}),_vm._v(\" \"),_c('ContrastRatio',{attrs:{\"contrast\":_vm.previewContrast.tabActiveText}})],1),_vm._v(\" \"),_c('div',{staticClass:\"color-item\"},[_c('h4',[_vm._v(_vm._s(_vm.$t('settings.style.advanced_colors.borders')))]),_vm._v(\" \"),_c('ColorInput',{attrs:{\"name\":\"borderColor\",\"fallback\":_vm.previewTheme.colors.border,\"label\":_vm.$t('settings.style.common.color')},model:{value:(_vm.borderColorLocal),callback:function ($$v) {_vm.borderColorLocal=$$v},expression:\"borderColorLocal\"}}),_vm._v(\" \"),_c('OpacityInput',{attrs:{\"name\":\"borderOpacity\",\"fallback\":_vm.previewTheme.opacity.border,\"disabled\":_vm.borderColorLocal === 'transparent'},model:{value:(_vm.borderOpacityLocal),callback:function ($$v) {_vm.borderOpacityLocal=$$v},expression:\"borderOpacityLocal\"}})],1),_vm._v(\" \"),_c('div',{staticClass:\"color-item\"},[_c('h4',[_vm._v(_vm._s(_vm.$t('settings.style.advanced_colors.faint_text')))]),_vm._v(\" \"),_c('ColorInput',{attrs:{\"name\":\"faintColor\",\"fallback\":_vm.previewTheme.colors.faint,\"label\":_vm.$t('settings.text')},model:{value:(_vm.faintColorLocal),callback:function ($$v) {_vm.faintColorLocal=$$v},expression:\"faintColorLocal\"}}),_vm._v(\" \"),_c('ColorInput',{attrs:{\"name\":\"faintLinkColor\",\"fallback\":_vm.previewTheme.colors.faintLink,\"label\":_vm.$t('settings.links')},model:{value:(_vm.faintLinkColorLocal),callback:function ($$v) {_vm.faintLinkColorLocal=$$v},expression:\"faintLinkColorLocal\"}}),_vm._v(\" \"),_c('ColorInput',{attrs:{\"name\":\"panelFaintColor\",\"fallback\":_vm.previewTheme.colors.panelFaint,\"label\":_vm.$t('settings.style.advanced_colors.panel_header')},model:{value:(_vm.panelFaintColorLocal),callback:function ($$v) {_vm.panelFaintColorLocal=$$v},expression:\"panelFaintColorLocal\"}}),_vm._v(\" \"),_c('OpacityInput',{attrs:{\"name\":\"faintOpacity\",\"fallback\":_vm.previewTheme.opacity.faint},model:{value:(_vm.faintOpacityLocal),callback:function ($$v) {_vm.faintOpacityLocal=$$v},expression:\"faintOpacityLocal\"}})],1),_vm._v(\" \"),_c('div',{staticClass:\"color-item\"},[_c('h4',[_vm._v(_vm._s(_vm.$t('settings.style.advanced_colors.underlay')))]),_vm._v(\" \"),_c('ColorInput',{attrs:{\"name\":\"underlay\",\"label\":_vm.$t('settings.style.advanced_colors.underlay'),\"fallback\":_vm.previewTheme.colors.underlay},model:{value:(_vm.underlayColorLocal),callback:function ($$v) {_vm.underlayColorLocal=$$v},expression:\"underlayColorLocal\"}}),_vm._v(\" \"),_c('OpacityInput',{attrs:{\"name\":\"underlayOpacity\",\"fallback\":_vm.previewTheme.opacity.underlay,\"disabled\":_vm.underlayOpacityLocal === 'transparent'},model:{value:(_vm.underlayOpacityLocal),callback:function ($$v) {_vm.underlayOpacityLocal=$$v},expression:\"underlayOpacityLocal\"}})],1),_vm._v(\" \"),_c('div',{staticClass:\"color-item\"},[_c('h4',[_vm._v(_vm._s(_vm.$t('settings.style.advanced_colors.poll')))]),_vm._v(\" \"),_c('ColorInput',{attrs:{\"name\":\"poll\",\"label\":_vm.$t('settings.background'),\"fallback\":_vm.previewTheme.colors.poll},model:{value:(_vm.pollColorLocal),callback:function ($$v) {_vm.pollColorLocal=$$v},expression:\"pollColorLocal\"}}),_vm._v(\" \"),_c('ColorInput',{attrs:{\"name\":\"pollText\",\"label\":_vm.$t('settings.text'),\"fallback\":_vm.previewTheme.colors.pollText},model:{value:(_vm.pollTextColorLocal),callback:function ($$v) {_vm.pollTextColorLocal=$$v},expression:\"pollTextColorLocal\"}})],1),_vm._v(\" \"),_c('div',{staticClass:\"color-item\"},[_c('h4',[_vm._v(_vm._s(_vm.$t('settings.style.advanced_colors.icons')))]),_vm._v(\" \"),_c('ColorInput',{attrs:{\"name\":\"icon\",\"label\":_vm.$t('settings.style.advanced_colors.icons'),\"fallback\":_vm.previewTheme.colors.icon},model:{value:(_vm.iconColorLocal),callback:function ($$v) {_vm.iconColorLocal=$$v},expression:\"iconColorLocal\"}})],1),_vm._v(\" \"),_c('div',{staticClass:\"color-item\"},[_c('h4',[_vm._v(_vm._s(_vm.$t('settings.style.advanced_colors.highlight')))]),_vm._v(\" \"),_c('ColorInput',{attrs:{\"name\":\"highlight\",\"label\":_vm.$t('settings.background'),\"fallback\":_vm.previewTheme.colors.highlight},model:{value:(_vm.highlightColorLocal),callback:function ($$v) {_vm.highlightColorLocal=$$v},expression:\"highlightColorLocal\"}}),_vm._v(\" \"),_c('ColorInput',{attrs:{\"name\":\"highlightText\",\"label\":_vm.$t('settings.text'),\"fallback\":_vm.previewTheme.colors.highlightText},model:{value:(_vm.highlightTextColorLocal),callback:function ($$v) {_vm.highlightTextColorLocal=$$v},expression:\"highlightTextColorLocal\"}}),_vm._v(\" \"),_c('ContrastRatio',{attrs:{\"contrast\":_vm.previewContrast.highlightText}}),_vm._v(\" \"),_c('ColorInput',{attrs:{\"name\":\"highlightLink\",\"label\":_vm.$t('settings.links'),\"fallback\":_vm.previewTheme.colors.highlightLink},model:{value:(_vm.highlightLinkColorLocal),callback:function ($$v) {_vm.highlightLinkColorLocal=$$v},expression:\"highlightLinkColorLocal\"}}),_vm._v(\" \"),_c('ContrastRatio',{attrs:{\"contrast\":_vm.previewContrast.highlightLink}})],1),_vm._v(\" \"),_c('div',{staticClass:\"color-item\"},[_c('h4',[_vm._v(_vm._s(_vm.$t('settings.style.advanced_colors.popover')))]),_vm._v(\" \"),_c('ColorInput',{attrs:{\"name\":\"popover\",\"label\":_vm.$t('settings.background'),\"fallback\":_vm.previewTheme.colors.popover},model:{value:(_vm.popoverColorLocal),callback:function ($$v) {_vm.popoverColorLocal=$$v},expression:\"popoverColorLocal\"}}),_vm._v(\" \"),_c('OpacityInput',{attrs:{\"name\":\"popoverOpacity\",\"fallback\":_vm.previewTheme.opacity.popover,\"disabled\":_vm.popoverOpacityLocal === 'transparent'},model:{value:(_vm.popoverOpacityLocal),callback:function ($$v) {_vm.popoverOpacityLocal=$$v},expression:\"popoverOpacityLocal\"}}),_vm._v(\" \"),_c('ColorInput',{attrs:{\"name\":\"popoverText\",\"label\":_vm.$t('settings.text'),\"fallback\":_vm.previewTheme.colors.popoverText},model:{value:(_vm.popoverTextColorLocal),callback:function ($$v) {_vm.popoverTextColorLocal=$$v},expression:\"popoverTextColorLocal\"}}),_vm._v(\" \"),_c('ContrastRatio',{attrs:{\"contrast\":_vm.previewContrast.popoverText}}),_vm._v(\" \"),_c('ColorInput',{attrs:{\"name\":\"popoverLink\",\"label\":_vm.$t('settings.links'),\"fallback\":_vm.previewTheme.colors.popoverLink},model:{value:(_vm.popoverLinkColorLocal),callback:function ($$v) {_vm.popoverLinkColorLocal=$$v},expression:\"popoverLinkColorLocal\"}}),_vm._v(\" \"),_c('ContrastRatio',{attrs:{\"contrast\":_vm.previewContrast.popoverLink}})],1),_vm._v(\" \"),_c('div',{staticClass:\"color-item\"},[_c('h4',[_vm._v(_vm._s(_vm.$t('settings.style.advanced_colors.selectedPost')))]),_vm._v(\" \"),_c('ColorInput',{attrs:{\"name\":\"selectedPost\",\"label\":_vm.$t('settings.background'),\"fallback\":_vm.previewTheme.colors.selectedPost},model:{value:(_vm.selectedPostColorLocal),callback:function ($$v) {_vm.selectedPostColorLocal=$$v},expression:\"selectedPostColorLocal\"}}),_vm._v(\" \"),_c('ColorInput',{attrs:{\"name\":\"selectedPostText\",\"label\":_vm.$t('settings.text'),\"fallback\":_vm.previewTheme.colors.selectedPostText},model:{value:(_vm.selectedPostTextColorLocal),callback:function ($$v) {_vm.selectedPostTextColorLocal=$$v},expression:\"selectedPostTextColorLocal\"}}),_vm._v(\" \"),_c('ContrastRatio',{attrs:{\"contrast\":_vm.previewContrast.selectedPostText}}),_vm._v(\" \"),_c('ColorInput',{attrs:{\"name\":\"selectedPostLink\",\"label\":_vm.$t('settings.links'),\"fallback\":_vm.previewTheme.colors.selectedPostLink},model:{value:(_vm.selectedPostLinkColorLocal),callback:function ($$v) {_vm.selectedPostLinkColorLocal=$$v},expression:\"selectedPostLinkColorLocal\"}}),_vm._v(\" \"),_c('ContrastRatio',{attrs:{\"contrast\":_vm.previewContrast.selectedPostLink}})],1),_vm._v(\" \"),_c('div',{staticClass:\"color-item\"},[_c('h4',[_vm._v(_vm._s(_vm.$t('settings.style.advanced_colors.selectedMenu')))]),_vm._v(\" \"),_c('ColorInput',{attrs:{\"name\":\"selectedMenu\",\"label\":_vm.$t('settings.background'),\"fallback\":_vm.previewTheme.colors.selectedMenu},model:{value:(_vm.selectedMenuColorLocal),callback:function ($$v) {_vm.selectedMenuColorLocal=$$v},expression:\"selectedMenuColorLocal\"}}),_vm._v(\" \"),_c('ColorInput',{attrs:{\"name\":\"selectedMenuText\",\"label\":_vm.$t('settings.text'),\"fallback\":_vm.previewTheme.colors.selectedMenuText},model:{value:(_vm.selectedMenuTextColorLocal),callback:function ($$v) {_vm.selectedMenuTextColorLocal=$$v},expression:\"selectedMenuTextColorLocal\"}}),_vm._v(\" \"),_c('ContrastRatio',{attrs:{\"contrast\":_vm.previewContrast.selectedMenuText}}),_vm._v(\" \"),_c('ColorInput',{attrs:{\"name\":\"selectedMenuLink\",\"label\":_vm.$t('settings.links'),\"fallback\":_vm.previewTheme.colors.selectedMenuLink},model:{value:(_vm.selectedMenuLinkColorLocal),callback:function ($$v) {_vm.selectedMenuLinkColorLocal=$$v},expression:\"selectedMenuLinkColorLocal\"}}),_vm._v(\" \"),_c('ContrastRatio',{attrs:{\"contrast\":_vm.previewContrast.selectedMenuLink}})],1),_vm._v(\" \"),_c('div',{staticClass:\"color-item\"},[_c('h4',[_vm._v(_vm._s(_vm.$t('chats.chats')))]),_vm._v(\" \"),_c('ColorInput',{attrs:{\"name\":\"chatBgColor\",\"fallback\":_vm.previewTheme.colors.bg,\"label\":_vm.$t('settings.background')},model:{value:(_vm.chatBgColorLocal),callback:function ($$v) {_vm.chatBgColorLocal=$$v},expression:\"chatBgColorLocal\"}}),_vm._v(\" \"),_c('h5',[_vm._v(_vm._s(_vm.$t('settings.style.advanced_colors.chat.incoming')))]),_vm._v(\" \"),_c('ColorInput',{attrs:{\"name\":\"chatMessageIncomingBgColor\",\"fallback\":_vm.previewTheme.colors.bg,\"label\":_vm.$t('settings.background')},model:{value:(_vm.chatMessageIncomingBgColorLocal),callback:function ($$v) {_vm.chatMessageIncomingBgColorLocal=$$v},expression:\"chatMessageIncomingBgColorLocal\"}}),_vm._v(\" \"),_c('ColorInput',{attrs:{\"name\":\"chatMessageIncomingTextColor\",\"fallback\":_vm.previewTheme.colors.text,\"label\":_vm.$t('settings.text')},model:{value:(_vm.chatMessageIncomingTextColorLocal),callback:function ($$v) {_vm.chatMessageIncomingTextColorLocal=$$v},expression:\"chatMessageIncomingTextColorLocal\"}}),_vm._v(\" \"),_c('ColorInput',{attrs:{\"name\":\"chatMessageIncomingLinkColor\",\"fallback\":_vm.previewTheme.colors.link,\"label\":_vm.$t('settings.links')},model:{value:(_vm.chatMessageIncomingLinkColorLocal),callback:function ($$v) {_vm.chatMessageIncomingLinkColorLocal=$$v},expression:\"chatMessageIncomingLinkColorLocal\"}}),_vm._v(\" \"),_c('ColorInput',{attrs:{\"name\":\"chatMessageIncomingBorderLinkColor\",\"fallback\":_vm.previewTheme.colors.fg,\"label\":_vm.$t('settings.style.advanced_colors.chat.border')},model:{value:(_vm.chatMessageIncomingBorderColorLocal),callback:function ($$v) {_vm.chatMessageIncomingBorderColorLocal=$$v},expression:\"chatMessageIncomingBorderColorLocal\"}}),_vm._v(\" \"),_c('h5',[_vm._v(_vm._s(_vm.$t('settings.style.advanced_colors.chat.outgoing')))]),_vm._v(\" \"),_c('ColorInput',{attrs:{\"name\":\"chatMessageOutgoingBgColor\",\"fallback\":_vm.previewTheme.colors.bg,\"label\":_vm.$t('settings.background')},model:{value:(_vm.chatMessageOutgoingBgColorLocal),callback:function ($$v) {_vm.chatMessageOutgoingBgColorLocal=$$v},expression:\"chatMessageOutgoingBgColorLocal\"}}),_vm._v(\" \"),_c('ColorInput',{attrs:{\"name\":\"chatMessageOutgoingTextColor\",\"fallback\":_vm.previewTheme.colors.text,\"label\":_vm.$t('settings.text')},model:{value:(_vm.chatMessageOutgoingTextColorLocal),callback:function ($$v) {_vm.chatMessageOutgoingTextColorLocal=$$v},expression:\"chatMessageOutgoingTextColorLocal\"}}),_vm._v(\" \"),_c('ColorInput',{attrs:{\"name\":\"chatMessageOutgoingLinkColor\",\"fallback\":_vm.previewTheme.colors.link,\"label\":_vm.$t('settings.links')},model:{value:(_vm.chatMessageOutgoingLinkColorLocal),callback:function ($$v) {_vm.chatMessageOutgoingLinkColorLocal=$$v},expression:\"chatMessageOutgoingLinkColorLocal\"}}),_vm._v(\" \"),_c('ColorInput',{attrs:{\"name\":\"chatMessageOutgoingBorderLinkColor\",\"fallback\":_vm.previewTheme.colors.bg,\"label\":_vm.$t('settings.style.advanced_colors.chat.border')},model:{value:(_vm.chatMessageOutgoingBorderColorLocal),callback:function ($$v) {_vm.chatMessageOutgoingBorderColorLocal=$$v},expression:\"chatMessageOutgoingBorderColorLocal\"}})],1)]),_vm._v(\" \"),_c('div',{staticClass:\"radius-container\",attrs:{\"label\":_vm.$t('settings.style.radii._tab_label')}},[_c('div',{staticClass:\"tab-header\"},[_c('p',[_vm._v(_vm._s(_vm.$t('settings.radii_help')))]),_vm._v(\" \"),_c('button',{staticClass:\"btn\",on:{\"click\":_vm.clearRoundness}},[_vm._v(\"\\n \"+_vm._s(_vm.$t('settings.style.switcher.clear_all'))+\"\\n \")])]),_vm._v(\" \"),_c('RangeInput',{attrs:{\"name\":\"btnRadius\",\"label\":_vm.$t('settings.btnRadius'),\"fallback\":_vm.previewTheme.radii.btn,\"max\":\"16\",\"hard-min\":\"0\"},model:{value:(_vm.btnRadiusLocal),callback:function ($$v) {_vm.btnRadiusLocal=$$v},expression:\"btnRadiusLocal\"}}),_vm._v(\" \"),_c('RangeInput',{attrs:{\"name\":\"inputRadius\",\"label\":_vm.$t('settings.inputRadius'),\"fallback\":_vm.previewTheme.radii.input,\"max\":\"9\",\"hard-min\":\"0\"},model:{value:(_vm.inputRadiusLocal),callback:function ($$v) {_vm.inputRadiusLocal=$$v},expression:\"inputRadiusLocal\"}}),_vm._v(\" \"),_c('RangeInput',{attrs:{\"name\":\"checkboxRadius\",\"label\":_vm.$t('settings.checkboxRadius'),\"fallback\":_vm.previewTheme.radii.checkbox,\"max\":\"16\",\"hard-min\":\"0\"},model:{value:(_vm.checkboxRadiusLocal),callback:function ($$v) {_vm.checkboxRadiusLocal=$$v},expression:\"checkboxRadiusLocal\"}}),_vm._v(\" \"),_c('RangeInput',{attrs:{\"name\":\"panelRadius\",\"label\":_vm.$t('settings.panelRadius'),\"fallback\":_vm.previewTheme.radii.panel,\"max\":\"50\",\"hard-min\":\"0\"},model:{value:(_vm.panelRadiusLocal),callback:function ($$v) {_vm.panelRadiusLocal=$$v},expression:\"panelRadiusLocal\"}}),_vm._v(\" \"),_c('RangeInput',{attrs:{\"name\":\"avatarRadius\",\"label\":_vm.$t('settings.avatarRadius'),\"fallback\":_vm.previewTheme.radii.avatar,\"max\":\"28\",\"hard-min\":\"0\"},model:{value:(_vm.avatarRadiusLocal),callback:function ($$v) {_vm.avatarRadiusLocal=$$v},expression:\"avatarRadiusLocal\"}}),_vm._v(\" \"),_c('RangeInput',{attrs:{\"name\":\"avatarAltRadius\",\"label\":_vm.$t('settings.avatarAltRadius'),\"fallback\":_vm.previewTheme.radii.avatarAlt,\"max\":\"28\",\"hard-min\":\"0\"},model:{value:(_vm.avatarAltRadiusLocal),callback:function ($$v) {_vm.avatarAltRadiusLocal=$$v},expression:\"avatarAltRadiusLocal\"}}),_vm._v(\" \"),_c('RangeInput',{attrs:{\"name\":\"attachmentRadius\",\"label\":_vm.$t('settings.attachmentRadius'),\"fallback\":_vm.previewTheme.radii.attachment,\"max\":\"50\",\"hard-min\":\"0\"},model:{value:(_vm.attachmentRadiusLocal),callback:function ($$v) {_vm.attachmentRadiusLocal=$$v},expression:\"attachmentRadiusLocal\"}}),_vm._v(\" \"),_c('RangeInput',{attrs:{\"name\":\"tooltipRadius\",\"label\":_vm.$t('settings.tooltipRadius'),\"fallback\":_vm.previewTheme.radii.tooltip,\"max\":\"50\",\"hard-min\":\"0\"},model:{value:(_vm.tooltipRadiusLocal),callback:function ($$v) {_vm.tooltipRadiusLocal=$$v},expression:\"tooltipRadiusLocal\"}}),_vm._v(\" \"),_c('RangeInput',{attrs:{\"name\":\"chatMessageRadius\",\"label\":_vm.$t('settings.chatMessageRadius'),\"fallback\":_vm.previewTheme.radii.chatMessage || 2,\"max\":\"50\",\"hard-min\":\"0\"},model:{value:(_vm.chatMessageRadiusLocal),callback:function ($$v) {_vm.chatMessageRadiusLocal=$$v},expression:\"chatMessageRadiusLocal\"}})],1),_vm._v(\" \"),_c('div',{staticClass:\"shadow-container\",attrs:{\"label\":_vm.$t('settings.style.shadows._tab_label')}},[_c('div',{staticClass:\"tab-header shadow-selector\"},[_c('div',{staticClass:\"select-container\"},[_vm._v(\"\\n \"+_vm._s(_vm.$t('settings.style.shadows.component'))+\"\\n \"),_c('label',{staticClass:\"select\",attrs:{\"for\":\"shadow-switcher\"}},[_c('select',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.shadowSelected),expression:\"shadowSelected\"}],staticClass:\"shadow-switcher\",attrs:{\"id\":\"shadow-switcher\"},on:{\"change\":function($event){var $$selectedVal = Array.prototype.filter.call($event.target.options,function(o){return o.selected}).map(function(o){var val = \"_value\" in o ? o._value : o.value;return val}); _vm.shadowSelected=$event.target.multiple ? $$selectedVal : $$selectedVal[0]}}},_vm._l((_vm.shadowsAvailable),function(shadow){return _c('option',{key:shadow,domProps:{\"value\":shadow}},[_vm._v(\"\\n \"+_vm._s(_vm.$t('settings.style.shadows.components.' + shadow))+\"\\n \")])}),0),_vm._v(\" \"),_c('i',{staticClass:\"icon-down-open\"})])]),_vm._v(\" \"),_c('div',{staticClass:\"override\"},[_c('label',{staticClass:\"label\",attrs:{\"for\":\"override\"}},[_vm._v(\"\\n \"+_vm._s(_vm.$t('settings.style.shadows.override'))+\"\\n \")]),_vm._v(\" \"),_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.currentShadowOverriden),expression:\"currentShadowOverriden\"}],staticClass:\"input-override\",attrs:{\"id\":\"override\",\"name\":\"override\",\"type\":\"checkbox\"},domProps:{\"checked\":Array.isArray(_vm.currentShadowOverriden)?_vm._i(_vm.currentShadowOverriden,null)>-1:(_vm.currentShadowOverriden)},on:{\"change\":function($event){var $$a=_vm.currentShadowOverriden,$$el=$event.target,$$c=$$el.checked?(true):(false);if(Array.isArray($$a)){var $$v=null,$$i=_vm._i($$a,$$v);if($$el.checked){$$i<0&&(_vm.currentShadowOverriden=$$a.concat([$$v]))}else{$$i>-1&&(_vm.currentShadowOverriden=$$a.slice(0,$$i).concat($$a.slice($$i+1)))}}else{_vm.currentShadowOverriden=$$c}}}}),_vm._v(\" \"),_c('label',{staticClass:\"checkbox-label\",attrs:{\"for\":\"override\"}})]),_vm._v(\" \"),_c('button',{staticClass:\"btn\",on:{\"click\":_vm.clearShadows}},[_vm._v(\"\\n \"+_vm._s(_vm.$t('settings.style.switcher.clear_all'))+\"\\n \")])]),_vm._v(\" \"),_c('ShadowControl',{attrs:{\"ready\":!!_vm.currentShadowFallback,\"fallback\":_vm.currentShadowFallback},model:{value:(_vm.currentShadow),callback:function ($$v) {_vm.currentShadow=$$v},expression:\"currentShadow\"}}),_vm._v(\" \"),(_vm.shadowSelected === 'avatar' || _vm.shadowSelected === 'avatarStatus')?_c('div',[_c('i18n',{attrs:{\"path\":\"settings.style.shadows.filter_hint.always_drop_shadow\",\"tag\":\"p\"}},[_c('code',[_vm._v(\"filter: drop-shadow()\")])]),_vm._v(\" \"),_c('p',[_vm._v(_vm._s(_vm.$t('settings.style.shadows.filter_hint.avatar_inset')))]),_vm._v(\" \"),_c('i18n',{attrs:{\"path\":\"settings.style.shadows.filter_hint.drop_shadow_syntax\",\"tag\":\"p\"}},[_c('code',[_vm._v(\"drop-shadow\")]),_vm._v(\" \"),_c('code',[_vm._v(\"spread-radius\")]),_vm._v(\" \"),_c('code',[_vm._v(\"inset\")])]),_vm._v(\" \"),_c('i18n',{attrs:{\"path\":\"settings.style.shadows.filter_hint.inset_classic\",\"tag\":\"p\"}},[_c('code',[_vm._v(\"box-shadow\")])]),_vm._v(\" \"),_c('p',[_vm._v(_vm._s(_vm.$t('settings.style.shadows.filter_hint.spread_zero')))])],1):_vm._e()],1),_vm._v(\" \"),_c('div',{staticClass:\"fonts-container\",attrs:{\"label\":_vm.$t('settings.style.fonts._tab_label')}},[_c('div',{staticClass:\"tab-header\"},[_c('p',[_vm._v(_vm._s(_vm.$t('settings.style.fonts.help')))]),_vm._v(\" \"),_c('button',{staticClass:\"btn\",on:{\"click\":_vm.clearFonts}},[_vm._v(\"\\n \"+_vm._s(_vm.$t('settings.style.switcher.clear_all'))+\"\\n \")])]),_vm._v(\" \"),_c('FontControl',{attrs:{\"name\":\"ui\",\"label\":_vm.$t('settings.style.fonts.components.interface'),\"fallback\":_vm.previewTheme.fonts.interface,\"no-inherit\":\"1\"},model:{value:(_vm.fontsLocal.interface),callback:function ($$v) {_vm.$set(_vm.fontsLocal, \"interface\", $$v)},expression:\"fontsLocal.interface\"}}),_vm._v(\" \"),_c('FontControl',{attrs:{\"name\":\"input\",\"label\":_vm.$t('settings.style.fonts.components.input'),\"fallback\":_vm.previewTheme.fonts.input},model:{value:(_vm.fontsLocal.input),callback:function ($$v) {_vm.$set(_vm.fontsLocal, \"input\", $$v)},expression:\"fontsLocal.input\"}}),_vm._v(\" \"),_c('FontControl',{attrs:{\"name\":\"post\",\"label\":_vm.$t('settings.style.fonts.components.post'),\"fallback\":_vm.previewTheme.fonts.post},model:{value:(_vm.fontsLocal.post),callback:function ($$v) {_vm.$set(_vm.fontsLocal, \"post\", $$v)},expression:\"fontsLocal.post\"}}),_vm._v(\" \"),_c('FontControl',{attrs:{\"name\":\"postCode\",\"label\":_vm.$t('settings.style.fonts.components.postCode'),\"fallback\":_vm.previewTheme.fonts.postCode},model:{value:(_vm.fontsLocal.postCode),callback:function ($$v) {_vm.$set(_vm.fontsLocal, \"postCode\", $$v)},expression:\"fontsLocal.postCode\"}})],1)])],1),_vm._v(\" \"),_c('div',{staticClass:\"apply-container\"},[_c('button',{staticClass:\"btn submit\",attrs:{\"disabled\":!_vm.themeValid},on:{\"click\":_vm.setCustomTheme}},[_vm._v(\"\\n \"+_vm._s(_vm.$t('general.apply'))+\"\\n \")]),_vm._v(\" \"),_c('button',{staticClass:\"btn\",on:{\"click\":_vm.clearAll}},[_vm._v(\"\\n \"+_vm._s(_vm.$t('settings.style.switcher.reset'))+\"\\n \")])])],1)}\nvar staticRenderFns = []\nexport { render, staticRenderFns }","import TabSwitcher from 'src/components/tab_switcher/tab_switcher.js'\n\nimport DataImportExportTab from './tabs/data_import_export_tab.vue'\nimport MutesAndBlocksTab from './tabs/mutes_and_blocks_tab.vue'\nimport NotificationsTab from './tabs/notifications_tab.vue'\nimport FilteringTab from './tabs/filtering_tab.vue'\nimport SecurityTab from './tabs/security_tab/security_tab.vue'\nimport ProfileTab from './tabs/profile_tab.vue'\nimport GeneralTab from './tabs/general_tab.vue'\nimport VersionTab from './tabs/version_tab.vue'\nimport ThemeTab from './tabs/theme_tab/theme_tab.vue'\n\nconst SettingsModalContent = {\n components: {\n TabSwitcher,\n\n DataImportExportTab,\n MutesAndBlocksTab,\n NotificationsTab,\n FilteringTab,\n SecurityTab,\n ProfileTab,\n GeneralTab,\n VersionTab,\n ThemeTab\n },\n computed: {\n isLoggedIn () {\n return !!this.$store.state.users.currentUser\n },\n open () {\n return this.$store.state.interface.settingsModalState !== 'hidden'\n }\n },\n methods: {\n onOpen () {\n const targetTab = this.$store.state.interface.settingsModalTargetTab\n // We're being told to open in specific tab\n if (targetTab) {\n const tabIndex = this.$refs.tabSwitcher.$slots.default.findIndex(elm => {\n return elm.data && elm.data.attrs['data-tab-name'] === targetTab\n })\n if (tabIndex >= 0) {\n this.$refs.tabSwitcher.setTab(tabIndex)\n }\n }\n // Clear the state of target tab, so that next time settings is opened\n // it doesn't force it.\n this.$store.dispatch('clearSettingsModalTargetTab')\n }\n },\n mounted () {\n this.onOpen()\n },\n watch: {\n open: function (value) {\n if (value) this.onOpen()\n }\n }\n}\n\nexport default SettingsModalContent\n","function injectStyle (context) {\n require(\"!!vue-style-loader!css-loader?minimize!../../../node_modules/vue-loader/lib/style-compiler/index?{\\\"optionsId\\\":\\\"0\\\",\\\"vue\\\":true,\\\"scoped\\\":false,\\\"sourceMap\\\":false}!sass-loader!./settings_modal_content.scss\")\n}\n/* script */\nexport * from \"!!babel-loader!./settings_modal_content.js\"\nimport __vue_script__ from \"!!babel-loader!./settings_modal_content.js\"/* template */\nimport {render as __vue_render__, staticRenderFns as __vue_static_render_fns__} from \"!!../../../node_modules/vue-loader/lib/template-compiler/index?{\\\"id\\\":\\\"data-v-da72a86e\\\",\\\"hasScoped\\\":false,\\\"optionsId\\\":\\\"0\\\",\\\"buble\\\":{\\\"transforms\\\":{}}}!../../../node_modules/vue-loader/lib/selector?type=template&index=0!./settings_modal_content.vue\"\n/* template functional */\nvar __vue_template_functional__ = false\n/* styles */\nvar __vue_styles__ = injectStyle\n/* scopeId */\nvar __vue_scopeId__ = null\n/* moduleIdentifier (server only) */\nvar __vue_module_identifier__ = null\nimport normalizeComponent from \"!../../../node_modules/vue-loader/lib/runtime/component-normalizer\"\nvar Component = normalizeComponent(\n __vue_script__,\n __vue_render__,\n __vue_static_render_fns__,\n __vue_template_functional__,\n __vue_styles__,\n __vue_scopeId__,\n __vue_module_identifier__\n)\n\nexport default Component.exports\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('tab-switcher',{ref:\"tabSwitcher\",staticClass:\"settings_tab-switcher\",attrs:{\"side-tab-bar\":true,\"scrollable-tabs\":true}},[_c('div',{attrs:{\"label\":_vm.$t('settings.general'),\"icon\":\"wrench\",\"data-tab-name\":\"general\"}},[_c('GeneralTab')],1),_vm._v(\" \"),(_vm.isLoggedIn)?_c('div',{attrs:{\"label\":_vm.$t('settings.profile_tab'),\"icon\":\"user\",\"data-tab-name\":\"profile\"}},[_c('ProfileTab')],1):_vm._e(),_vm._v(\" \"),(_vm.isLoggedIn)?_c('div',{attrs:{\"label\":_vm.$t('settings.security_tab'),\"icon\":\"lock\",\"data-tab-name\":\"security\"}},[_c('SecurityTab')],1):_vm._e(),_vm._v(\" \"),_c('div',{attrs:{\"label\":_vm.$t('settings.filtering'),\"icon\":\"filter\",\"data-tab-name\":\"filtering\"}},[_c('FilteringTab')],1),_vm._v(\" \"),_c('div',{attrs:{\"label\":_vm.$t('settings.theme'),\"icon\":\"brush\",\"data-tab-name\":\"theme\"}},[_c('ThemeTab')],1),_vm._v(\" \"),(_vm.isLoggedIn)?_c('div',{attrs:{\"label\":_vm.$t('settings.notifications'),\"icon\":\"bell-ringing-o\",\"data-tab-name\":\"notifications\"}},[_c('NotificationsTab')],1):_vm._e(),_vm._v(\" \"),(_vm.isLoggedIn)?_c('div',{attrs:{\"label\":_vm.$t('settings.data_import_export_tab'),\"icon\":\"download\",\"data-tab-name\":\"dataImportExport\"}},[_c('DataImportExportTab')],1):_vm._e(),_vm._v(\" \"),(_vm.isLoggedIn)?_c('div',{attrs:{\"label\":_vm.$t('settings.mutes_and_blocks'),\"fullHeight\":true,\"icon\":\"eye-off\",\"data-tab-name\":\"mutesAndBlocks\"}},[_c('MutesAndBlocksTab')],1):_vm._e(),_vm._v(\" \"),_c('div',{attrs:{\"label\":_vm.$t('settings.version.title'),\"icon\":\"info-circled\",\"data-tab-name\":\"version\"}},[_c('VersionTab')],1)])}\nvar staticRenderFns = []\nexport { render, staticRenderFns }"],"sourceRoot":""} \ No newline at end of file diff --git a/priv/static/static/js/app.55d173dc5e39519aa518.js b/priv/static/static/js/app.55d173dc5e39519aa518.js deleted file mode 100644 index d04ae3499..000000000 --- a/priv/static/static/js/app.55d173dc5e39519aa518.js +++ /dev/null @@ -1,2 +0,0 @@ -!function(t){function e(e){for(var i,o,a=e[0],c=e[1],l=e[2],u=0,p=[];u]*>/g,"")),value:unescape(t.value.replace(/<[^>]*>/g,""))}}),e.profile_image_url=t.avatar,e.profile_image_url_original=t.avatar,e.cover_photo=t.header,e.friends_count=t.following_count,e.bot=t.bot,t.pleroma){var o=t.pleroma.relationship;e.background_image=t.pleroma.background_image,e.favicon=t.pleroma.favicon,e.token=t.pleroma.chat_token,o&&(e.relationship=o),e.allow_following_move=t.pleroma.allow_following_move,e.hide_follows=t.pleroma.hide_follows,e.hide_followers=t.pleroma.hide_followers,e.hide_follows_count=t.pleroma.hide_follows_count,e.hide_followers_count=t.pleroma.hide_followers_count,e.rights={moderator:t.pleroma.is_moderator,admin:t.pleroma.is_admin},e.rights.admin?e.role="admin":e.rights.moderator?e.role="moderator":e.role="member"}t.source&&(e.description=t.source.note,e.default_scope=t.source.privacy,e.fields=t.source.fields,t.source.pleroma&&(e.no_rich_text=t.source.pleroma.no_rich_text,e.show_role=t.source.pleroma.show_role,e.discoverable=t.source.pleroma.discoverable)),e.is_local=!e.screen_name.includes("@")}else e.screen_name=t.screen_name,e.name=t.name,e.name_html=t.name_html,e.description=t.description,e.description_html=t.description_html,e.profile_image_url=t.profile_image_url,e.profile_image_url_original=t.profile_image_url_original,e.cover_photo=t.cover_photo,e.friends_count=t.friends_count,e.statusnet_profile_url=t.statusnet_profile_url,e.is_local=t.is_local,e.role=t.role,e.show_role=t.show_role,t.rights&&(e.rights={moderator:t.rights.delete_others_notice,admin:t.rights.admin}),e.no_rich_text=t.no_rich_text,e.default_scope=t.default_scope,e.hide_follows=t.hide_follows,e.hide_followers=t.hide_followers,e.hide_follows_count=t.hide_follows_count,e.hide_followers_count=t.hide_followers_count,e.background_image=t.background_image,e.token=t.token,e.relationship={muting:t.muted,blocking:t.statusnet_blocking,followed_by:t.follows_you,following:t.following};return e.created_at=new Date(t.created_at),e.locked=t.locked,e.followers_count=t.followers_count,e.statuses_count=t.statuses_count,e.friendIds=[],e.followerIds=[],e.pinnedStatusIds=[],t.pleroma&&(e.follow_request_count=t.pleroma.follow_request_count,e.tags=t.pleroma.tags,e.deactivated=t.pleroma.deactivated,e.notification_settings=t.pleroma.notification_settings,e.unread_chat_count=t.pleroma.unread_chat_count),e.tags=e.tags||[],e.rights=e.rights||{},e.notification_settings=e.notification_settings||{},e},p=function(t){var e={};return!t.hasOwnProperty("oembed")?(e.mimetype=t.pleroma?t.pleroma.mime_type:t.type,e.meta=t.meta,e.id=t.id):e.mimetype=t.mimetype,e.url=t.url,e.large_thumb_url=t.preview_url,e.description=t.description,e},f=function(t,e){var n=/[|\\{}()[\]^$+*?.-]/g;return e.reduce(function(t,e){var i=e.shortcode.replace(n,"\\$&");return t.replace(new RegExp(":".concat(i,":"),"g"),":").concat(e.shortcode,":"))},t)},h=function t(e){var n,i={},r=e.hasOwnProperty("account");if(r){if(i.favorited=e.favourited,i.fave_num=e.favourites_count,i.repeated=e.reblogged,i.repeat_num=e.reblogs_count,i.bookmarked=e.bookmarked,i.type=e.reblog?"retweet":"status",i.nsfw=e.sensitive,i.statusnet_html=f(e.content,e.emojis),i.tags=e.tags,e.pleroma){var a=e.pleroma;i.text=a.content?e.pleroma.content["text/plain"]:e.content,i.summary=a.spoiler_text?e.pleroma.spoiler_text["text/plain"]:e.spoiler_text,i.statusnet_conversation_id=e.pleroma.conversation_id,i.is_local=a.local,i.in_reply_to_screen_name=e.pleroma.in_reply_to_account_acct,i.thread_muted=a.thread_muted,i.emoji_reactions=a.emoji_reactions,i.parent_visible=void 0===a.parent_visible||a.parent_visible}else i.text=e.content,i.summary=e.spoiler_text;i.in_reply_to_status_id=e.in_reply_to_id,i.in_reply_to_user_id=e.in_reply_to_account_id,i.replies_count=e.replies_count,"retweet"===i.type&&(i.retweeted_status=t(e.reblog)),i.summary_html=f(s()(e.spoiler_text),e.emojis),i.external_url=e.url,i.poll=e.poll,i.poll&&(i.poll.options=(i.poll.options||[]).map(function(t){return function(t){for(var e=1;e1&&void 0!==arguments[1]?arguments[1]:{}).flakeId,n=c()(t);if(n){var i=n.next.max_id,o=n.prev.min_id;return{maxId:e?i:parseInt(i,10),minId:e?o:parseInt(o,10)}}},b=function(t){var e={};return e.id=t.id,e.account=d(t.account),e.unread=t.unread,e.lastMessage=w(t.last_message),e.updated_at=new Date(t.updated_at),e},w=function(t){if(t){if(t.isNormalized)return t;var e=t;return e.id=t.id,e.created_at=new Date(t.created_at),e.chat_id=t.chat_id,t.content?e.content=f(t.content,t.emojis):e.content="",t.attachment?e.attachments=[p(t.attachment)]:e.attachments=[],e.isNormalized=!0,e}}},function(t,e,n){"use strict";n.d(e,"i",function(){return d}),n.d(e,"h",function(){return f}),n.d(e,"c",function(){return m}),n.d(e,"a",function(){return g}),n.d(e,"b",function(){return v}),n.d(e,"f",function(){return b}),n.d(e,"g",function(){return w}),n.d(e,"j",function(){return _}),n.d(e,"e",function(){return x}),n.d(e,"d",function(){return y});var i=n(1),o=n.n(i),r=n(7),s=n.n(r),a=n(27),c=n.n(a),l=n(14);function u(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(t);e&&(i=i.filter(function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})),n.push.apply(n,i)}return n}var d=function(t,e,n){if(null!=t){if("#"===t[0]||"transparent"===t)return t;if("object"===c()(t)){var i=t;t=i.r,e=i.g,n=i.b}var o=[t,e,n].map(function(t){return t=(t=(t=Math.ceil(t))<0?0:t)>255?255:t}),r=s()(o,3);return t=r[0],e=r[1],n=r[2],"#".concat(((1<<24)+(t<<16)+(e<<8)+n).toString(16).slice(1))}},p=function(t){return"rgb".split("").reduce(function(e,n){return e[n]=function(t){var e=t/255;return e<.03928?e/12.92:Math.pow((e+.055)/1.055,2.4)}(t[n]),e},{})},f=function(t){var e=p(t);return.2126*e.r+.7152*e.g+.0722*e.b},h=function(t,e){var n=f(t),i=f(e),o=n>i?[n,i]:[i,n],r=s()(o,2);return(r[0]+.05)/(r[1]+.05)},m=function(t,e,n){return h(v(n,e),t)},g=function(t,e,n){return 1===e||void 0===e?t:"rgb".split("").reduce(function(i,o){return i[o]=t[o]*e+n[o]*(1-e),i},{})},v=function(t,e){return e.reduce(function(t,e){var n=s()(e,2),i=n[0],o=n[1];return g(i,o,t)},t)},b=function(t){var e=/^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.exec(t);return e?{r:parseInt(e[1],16),g:parseInt(e[2],16),b:parseInt(e[3],16)}:null},w=function(t,e){return"rgb".split("").reduce(function(n,i){return n[i]=(t[i]+e[i])/2,n},{})},_=function(t){return"rgba(".concat(Math.floor(t.r),", ").concat(Math.floor(t.g),", ").concat(Math.floor(t.b),", ").concat(t.a,")")},x=function(t,e,n){if(h(t,e)<4.5){var i=void 0!==e.a?{a:e.a}:{},o=Object.assign(i,Object(l.invertLightness)(e).rgb);return!n&&h(t,o)<4.5?Object(l.contrastRatio)(t,e).rgb:o}return e},y=function(t,e){var n={};if("object"===c()(t))n=t;else if("string"==typeof t){if(!t.startsWith("#"))return t;n=b(t)}return _(function(t){for(var e=1;e2&&void 0!==arguments[2]?arguments[2]:function(t){return t};t.addEventListener(e,function(t){s.dispatchEvent(new CustomEvent(e,{detail:n(t)}))})};return a.addEventListener("open",function(t){console.debug("[WS][".concat(r,"] Socket connected"),t)}),a.addEventListener("error",function(t){console.debug("[WS][".concat(r,"] Socket errored"),t)}),a.addEventListener("close",function(t){console.debug("[WS][".concat(r,"] Socket disconnected with code ").concat(t.code),t)}),c(a,"open"),c(a,"close"),c(a,"message",i),c(a,"error"),s.close=function(){a.close(1e3,"Shutting down socket")},s},St=function(t){var e=t.data;if(e){var n=JSON.parse(e),i=n.event,o=n.payload;if(!yt.has(i)&&!kt.has(i))return console.warn("Unknown event",t),null;if("delete"===i)return{event:i,id:o};var r=o?JSON.parse(o):null;return"update"===i?{event:i,status:Object(x.f)(r)}:"notification"===i?{event:i,notification:Object(x.e)(r)}:"pleroma:chat_update"===i?{event:i,chatUpdate:Object(x.b)(r)}:void 0}},jt=Object.freeze({JOINED:1,CLOSED:2,ERROR:3}),Ot={verifyCredentials:function(t){return vt("/api/v1/accounts/verify_credentials",{headers:wt(t)}).then(function(t){return t.ok?t.json():{error:t}}).then(function(t){return t.error?t:Object(x.g)(t)})},fetchTimeline:function(t){var e=t.timeline,n=t.credentials,i=t.since,o=void 0!==i&&i,r=t.until,s=void 0!==r&&r,a=t.userId,c=void 0!==a&&a,l=t.tag,u=void 0!==l&&l,d=t.withMuted,p=void 0!==d&&d,f=t.replyVisibility,h=void 0===f?"all":f,m="notifications"===e,g=[],v={public:"/api/v1/timelines/public",friends:"/api/v1/timelines/home",dms:"/api/v1/timelines/direct",notifications:"/api/v1/notifications",publicAndExternal:"/api/v1/timelines/public",user:J,media:J,favorites:"/api/v1/favourites",tag:X,bookmarks:"/api/v1/bookmarks"}[e];"user"!==e&&"media"!==e||(v=v(c)),o&&g.push(["since_id",o]),s&&g.push(["max_id",s]),u&&(v=v(u)),"media"===e&&g.push(["only_media",1]),"public"===e&&g.push(["local",!0]),"public"!==e&&"publicAndExternal"!==e||g.push(["only_media",!1]),"favorites"!==e&&"bookmarks"!==e&&g.push(["with_muted",p]),"all"!==h&&g.push(["reply_visibility",h]),g.push(["limit",20]);var w=b()(g,function(t){return"".concat(t[0],"=").concat(t[1])}).join("&");v+="?".concat(w);var _="",y="",k={};return vt(v,{headers:wt(n)}).then(function(t){return _=t.status,y=t.statusText,k=Object(x.d)(t.headers.get("Link"),{flakeId:"bookmarks"!==e&&"notifications"!==e}),t}).then(function(t){return t.json()}).then(function(t){return t.error?(t.status=_,t.statusText=y,t):{data:t.map(m?x.e:x.f),pagination:k}})},fetchPinnedStatuses:function(t){var e=t.id,n=t.credentials,i=J(e)+"?pinned=true";return bt({url:i,credentials:n}).then(function(t){return t.map(x.f)})},fetchConversation:function(t){var e=t.id,n=t.credentials,i=function(t){return"/api/v1/statuses/".concat(t,"/context")}(e);return vt(i,{headers:wt(n)}).then(function(t){if(t.ok)return t;throw new Error("Error fetching timeline",t)}).then(function(t){return t.json()}).then(function(t){var e=t.ancestors,n=t.descendants;return{ancestors:e.map(x.f),descendants:n.map(x.f)}})},fetchStatus:function(t){var e=t.id,n=t.credentials,i=function(t){return"/api/v1/statuses/".concat(t)}(e);return vt(i,{headers:wt(n)}).then(function(t){if(t.ok)return t;throw new Error("Error fetching timeline",t)}).then(function(t){return t.json()}).then(function(t){return Object(x.f)(t)})},fetchFriends:_t,exportFriends:function(t){var e=t.id,n=t.credentials;return new Promise(function(t,i){var r,s,a,c;return o.a.async(function(l){for(;;)switch(l.prev=l.next){case 0:l.prev=0,r=[],s=!0;case 3:if(!s){l.next=12;break}return a=r.length>0?h()(r).id:void 0,l.next=7,o.a.awrap(_t({id:e,maxId:a,credentials:n}));case 7:c=l.sent,r=g()(r,c),0===c.length&&(s=!1),l.next=3;break;case 12:t(r),l.next=18;break;case 15:l.prev=15,l.t0=l.catch(0),i(l.t0);case 18:case"end":return l.stop()}},null,null,[[0,15]])})},fetchFollowers:function(t){var e=t.id,n=t.maxId,i=t.sinceId,o=t.limit,r=void 0===o?20:o,s=t.credentials,a=function(t){return"/api/v1/accounts/".concat(t,"/followers")}(e),c=[n&&"max_id=".concat(n),i&&"since_id=".concat(i),r&&"limit=".concat(r),"with_relationships=true"].filter(function(t){return t}).join("&");return vt(a+=c?"?"+c:"",{headers:wt(s)}).then(function(t){return t.json()}).then(function(t){return t.map(x.g)})},followUser:function(t){var e=t.id,n=t.credentials,i=s()(t,["id","credentials"]),o=function(t){return"/api/v1/accounts/".concat(t,"/follow")}(e),r={};return void 0!==i.reblogs&&(r.reblogs=i.reblogs),vt(o,{body:JSON.stringify(r),headers:H({},wt(n),{"Content-Type":"application/json"}),method:"POST"}).then(function(t){return t.json()})},unfollowUser:function(t){var e=t.id,n=t.credentials,i=function(t){return"/api/v1/accounts/".concat(t,"/unfollow")}(e);return vt(i,{headers:wt(n),method:"POST"}).then(function(t){return t.json()})},pinOwnStatus:function(t){var e=t.id,n=t.credentials;return bt({url:st(e),credentials:n,method:"POST"}).then(function(t){return Object(x.f)(t)})},unpinOwnStatus:function(t){var e=t.id,n=t.credentials;return bt({url:at(e),credentials:n,method:"POST"}).then(function(t){return Object(x.f)(t)})},muteConversation:function(t){var e=t.id,n=t.credentials;return bt({url:ct(e),credentials:n,method:"POST"}).then(function(t){return Object(x.f)(t)})},unmuteConversation:function(t){var e=t.id,n=t.credentials;return bt({url:lt(e),credentials:n,method:"POST"}).then(function(t){return Object(x.f)(t)})},blockUser:function(t){var e=t.id,n=t.credentials;return vt(function(t){return"/api/v1/accounts/".concat(t,"/block")}(e),{headers:wt(n),method:"POST"}).then(function(t){return t.json()})},unblockUser:function(t){var e=t.id,n=t.credentials;return vt(function(t){return"/api/v1/accounts/".concat(t,"/unblock")}(e),{headers:wt(n),method:"POST"}).then(function(t){return t.json()})},fetchUser:function(t){var e=t.id,n=t.credentials,i="".concat("/api/v1/accounts","/").concat(e);return bt({url:i,credentials:n}).then(function(t){return Object(x.g)(t)})},fetchUserRelationship:function(t){var e=t.id,n=t.credentials,i="".concat("/api/v1/accounts/relationships","/?id=").concat(e);return vt(i,{headers:wt(n)}).then(function(t){return new Promise(function(e,n){return t.json().then(function(o){return t.ok?e(o):n(new A(t.status,o,{url:i},t))})})})},favorite:function(t){var e=t.id,n=t.credentials;return bt({url:V(e),method:"POST",credentials:n}).then(function(t){return Object(x.f)(t)})},unfavorite:function(t){var e=t.id,n=t.credentials;return bt({url:G(e),method:"POST",credentials:n}).then(function(t){return Object(x.f)(t)})},retweet:function(t){var e=t.id,n=t.credentials;return bt({url:K(e),method:"POST",credentials:n}).then(function(t){return Object(x.f)(t)})},unretweet:function(t){var e=t.id,n=t.credentials;return bt({url:Y(e),method:"POST",credentials:n}).then(function(t){return Object(x.f)(t)})},bookmarkStatus:function(t){var e=t.id,n=t.credentials;return bt({url:nt(e),headers:wt(n),method:"POST"})},unbookmarkStatus:function(t){var e=t.id,n=t.credentials;return bt({url:it(e),headers:wt(n),method:"POST"})},postStatus:function(t){var e=t.credentials,n=t.status,i=t.spoilerText,o=t.visibility,r=t.sensitive,s=t.poll,a=t.mediaIds,c=void 0===a?[]:a,l=t.inReplyToStatusId,u=t.contentType,d=t.preview,p=t.idempotencyKey,f=new FormData,h=s.options||[];if(f.append("status",n),f.append("source","Pleroma FE"),i&&f.append("spoiler_text",i),o&&f.append("visibility",o),r&&f.append("sensitive",r),u&&f.append("content_type",u),c.forEach(function(t){f.append("media_ids[]",t)}),h.some(function(t){return""!==t})){var m={expires_in:s.expiresIn,multiple:s.multiple};Object.keys(m).forEach(function(t){f.append("poll[".concat(t,"]"),m[t])}),h.forEach(function(t){f.append("poll[options][]",t)})}l&&f.append("in_reply_to_id",l),d&&f.append("preview","true");var g=wt(e);return p&&(g["idempotency-key"]=p),vt("/api/v1/statuses",{body:f,method:"POST",headers:g}).then(function(t){return t.json()}).then(function(t){return t.error?t:Object(x.f)(t)})},deleteStatus:function(t){var e=t.id,n=t.credentials;return vt(function(t){return"/api/v1/statuses/".concat(t)}(e),{headers:wt(n),method:"DELETE"})},uploadMedia:function(t){var e=t.formData,n=t.credentials;return vt("/api/v1/media",{body:e,method:"POST",headers:wt(n)}).then(function(t){return t.json()}).then(function(t){return Object(x.a)(t)})},setMediaDescription:function(t){var e=t.id,n=t.description,i=t.credentials;return bt({url:"".concat("/api/v1/media","/").concat(e),method:"PUT",headers:wt(i),payload:{description:n}}).then(function(t){return Object(x.a)(t)})},fetchMutes:function(t){var e=t.credentials;return bt({url:"/api/v1/mutes/",credentials:e}).then(function(t){return t.map(x.g)})},muteUser:function(t){var e=t.id,n=t.credentials;return bt({url:Q(e),credentials:n,method:"POST"})},unmuteUser:function(t){var e=t.id,n=t.credentials;return bt({url:Z(e),credentials:n,method:"POST"})},subscribeUser:function(t){var e=t.id,n=t.credentials;return bt({url:tt(e),credentials:n,method:"POST"})},unsubscribeUser:function(t){var e=t.id,n=t.credentials;return bt({url:et(e),credentials:n,method:"POST"})},fetchBlocks:function(t){var e=t.credentials;return bt({url:"/api/v1/blocks/",credentials:e}).then(function(t){return t.map(x.g)})},fetchOAuthTokens:function(t){var e=t.credentials;return vt("/api/oauth_tokens.json",{headers:wt(e)}).then(function(t){if(t.ok)return t.json();throw new Error("Error fetching auth tokens",t)})},revokeOAuthToken:function(t){var e=t.id,n=t.credentials,i="/api/oauth_tokens/".concat(e);return vt(i,{headers:wt(n),method:"DELETE"})},tagUser:function(t){var e=t.tag,n=t.credentials,i={nicknames:[t.user.screen_name],tags:[e]},o=wt(n);return o["Content-Type"]="application/json",vt("/api/pleroma/admin/users/tag",{method:"PUT",headers:o,body:JSON.stringify(i)})},untagUser:function(t){var e=t.tag,n=t.credentials,i={nicknames:[t.user.screen_name],tags:[e]},o=wt(n);return o["Content-Type"]="application/json",vt("/api/pleroma/admin/users/tag",{method:"DELETE",headers:o,body:JSON.stringify(i)})},deleteUser:function(t){var e=t.credentials,n=t.user.screen_name,i=wt(e);return vt("".concat("/api/pleroma/admin/users","?nickname=").concat(n),{method:"DELETE",headers:i})},addRight:function(t){var e=t.right,n=t.credentials,i=t.user.screen_name;return vt(q(i,e),{method:"POST",headers:wt(n),body:{}})},deleteRight:function(t){var e=t.right,n=t.credentials,i=t.user.screen_name;return vt(q(i,e),{method:"DELETE",headers:wt(n),body:{}})},activateUser:function(t){var e=t.credentials,n=t.user.screen_name;return bt({url:"/api/pleroma/admin/users/activate",method:"PATCH",credentials:e,payload:{nicknames:[n]}}).then(function(t){return p()(t,"users.0")})},deactivateUser:function(t){var e=t.credentials,n=t.user.screen_name;return bt({url:"/api/pleroma/admin/users/deactivate",method:"PATCH",credentials:e,payload:{nicknames:[n]}}).then(function(t){return p()(t,"users.0")})},register:function(t){var e=t.params,n=t.credentials,i=e.nickname,o=s()(e,["nickname"]);return vt("/api/v1/accounts",{method:"POST",headers:H({},wt(n),{"Content-Type":"application/json"}),body:JSON.stringify(H({nickname:i,locale:"en_US",agreement:!0},o))}).then(function(t){return t.ok?t.json():t.json().then(function(t){throw new B(t)})})},getCaptcha:function(){return vt("/api/pleroma/captcha").then(function(t){return t.json()})},updateProfileImages:function(t){var e=t.credentials,n=t.avatar,i=void 0===n?null:n,o=t.banner,r=void 0===o?null:o,s=t.background,a=void 0===s?null:s,c=new FormData;return null!==i&&c.append("avatar",i),null!==r&&c.append("header",r),null!==a&&c.append("pleroma_background_image",a),vt("/api/v1/accounts/update_credentials",{headers:wt(e),method:"PATCH",body:c}).then(function(t){return t.json()}).then(function(t){return Object(x.g)(t)})},updateProfile:function(t){var e=t.credentials,n=t.params;return bt({url:"/api/v1/accounts/update_credentials",method:"PATCH",payload:n,credentials:e}).then(function(t){return Object(x.g)(t)})},importBlocks:function(t){var e=t.file,n=t.credentials,i=new FormData;return i.append("list",e),vt("/api/pleroma/blocks_import",{body:i,method:"POST",headers:wt(n)}).then(function(t){return t.ok})},importFollows:function(t){var e=t.file,n=t.credentials,i=new FormData;return i.append("list",e),vt("/api/pleroma/follow_import",{body:i,method:"POST",headers:wt(n)}).then(function(t){return t.ok})},deleteAccount:function(t){var e=t.credentials,n=t.password,i=new FormData;return i.append("password",n),vt("/api/pleroma/delete_account",{body:i,method:"POST",headers:wt(e)}).then(function(t){return t.json()})},changeEmail:function(t){var e=t.credentials,n=t.email,i=t.password,o=new FormData;return o.append("email",n),o.append("password",i),vt("/api/pleroma/change_email",{body:o,method:"POST",headers:wt(e)}).then(function(t){return t.json()})},changePassword:function(t){var e=t.credentials,n=t.password,i=t.newPassword,o=t.newPasswordConfirmation,r=new FormData;return r.append("password",n),r.append("new_password",i),r.append("new_password_confirmation",o),vt("/api/pleroma/change_password",{body:r,method:"POST",headers:wt(e)}).then(function(t){return t.json()})},settingsMFA:function(t){var e=t.credentials;return vt("/api/pleroma/accounts/mfa",{headers:wt(e),method:"GET"}).then(function(t){return t.json()})},mfaDisableOTP:function(t){var e=t.credentials,n=t.password,i=new FormData;return i.append("password",n),vt("/api/pleroma/accounts/mfa/totp",{body:i,method:"DELETE",headers:wt(e)}).then(function(t){return t.json()})},generateMfaBackupCodes:function(t){var e=t.credentials;return vt("/api/pleroma/accounts/mfa/backup_codes",{headers:wt(e),method:"GET"}).then(function(t){return t.json()})},mfaSetupOTP:function(t){var e=t.credentials;return vt("/api/pleroma/accounts/mfa/setup/totp",{headers:wt(e),method:"GET"}).then(function(t){return t.json()})},mfaConfirmOTP:function(t){var e=t.credentials,n=t.password,i=t.token,o=new FormData;return o.append("password",n),o.append("code",i),vt("/api/pleroma/accounts/mfa/confirm/totp",{body:o,headers:wt(e),method:"POST"}).then(function(t){return t.json()})},fetchFollowRequests:function(t){var e=t.credentials;return vt("/api/v1/follow_requests",{headers:wt(e)}).then(function(t){return t.json()}).then(function(t){return t.map(x.g)})},approveUser:function(t){var e=t.id,n=t.credentials,i=function(t){return"/api/v1/follow_requests/".concat(t,"/authorize")}(e);return vt(i,{headers:wt(n),method:"POST"}).then(function(t){return t.json()})},denyUser:function(t){var e=t.id,n=t.credentials,i=function(t){return"/api/v1/follow_requests/".concat(t,"/reject")}(e);return vt(i,{headers:wt(n),method:"POST"}).then(function(t){return t.json()})},suggestions:function(t){var e=t.credentials;return vt("/api/v1/suggestions",{headers:wt(e)}).then(function(t){return t.json()})},markNotificationsAsSeen:function(t){var e=t.id,n=t.credentials,i=t.single,o=void 0!==i&&i,r=new FormData;return o?r.append("id",e):r.append("max_id",e),vt("/api/v1/pleroma/notifications/read",{body:r,headers:wt(n),method:"POST"}).then(function(t){return t.json()})},dismissNotification:function(t){var e=t.credentials,n=t.id;return bt({url:W(n),method:"POST",payload:{id:n},credentials:e})},vote:function(t){var e,n=t.pollId,i=t.choices,o=t.credentials;return(new FormData).append("choices",i),bt({url:(e=encodeURIComponent(n),"/api/v1/polls/".concat(e,"/votes")),method:"POST",credentials:o,payload:{choices:i}})},fetchPoll:function(t){var e,n=t.pollId,i=t.credentials;return bt({url:(e=encodeURIComponent(n),"/api/v1/polls/".concat(e)),method:"GET",credentials:i})},fetchFavoritedByUsers:function(t){var e=t.id,n=t.credentials;return bt({url:ot(e),method:"GET",credentials:n}).then(function(t){return t.map(x.g)})},fetchRebloggedByUsers:function(t){var e=t.id,n=t.credentials;return bt({url:rt(e),method:"GET",credentials:n}).then(function(t){return t.map(x.g)})},fetchEmojiReactions:function(t){var e=t.id,n=t.credentials;return bt({url:ut(e),credentials:n}).then(function(t){return t.map(function(t){return t.accounts=t.accounts.map(x.g),t})})},reactWithEmoji:function(t){var e=t.id,n=t.emoji,i=t.credentials;return bt({url:dt(e,n),method:"PUT",credentials:i}).then(x.f)},unreactWithEmoji:function(t){var e=t.id,n=t.emoji,i=t.credentials;return bt({url:pt(e,n),method:"DELETE",credentials:i}).then(x.f)},reportUser:function(t){var e=t.credentials,n=t.userId,i=t.statusIds,o=t.comment,r=t.forward;return bt({url:"/api/v1/reports",method:"POST",payload:{account_id:n,status_ids:i,comment:o,forward:r},credentials:e})},updateNotificationSettings:function(t){var e=t.credentials,n=t.settings,i=new FormData;return _()(n,function(t,e){i.append(e,t)}),vt("/api/pleroma/notification_settings",{headers:wt(e),method:"PUT",body:i}).then(function(t){return t.json()})},search2:function(t){var e=t.credentials,n=t.q,i=t.resolve,o=t.limit,r=t.offset,s=t.following,a="/api/v2/search",c=[];n&&c.push(["q",encodeURIComponent(n)]),i&&c.push(["resolve",i]),o&&c.push(["limit",o]),r&&c.push(["offset",r]),s&&c.push(["following",!0]),c.push(["with_relationships",!0]);var l=b()(c,function(t){return"".concat(t[0],"=").concat(t[1])}).join("&");return a+="?".concat(l),vt(a,{headers:wt(e)}).then(function(t){if(t.ok)return t;throw new Error("Error fetching search result",t)}).then(function(t){return t.json()}).then(function(t){return t.accounts=t.accounts.slice(0,o).map(function(t){return Object(x.g)(t)}),t.statuses=t.statuses.slice(0,o).map(function(t){return Object(x.f)(t)}),t})},searchUsers:function(t){var e=t.credentials,n=t.query;return bt({url:"/api/v1/accounts/search",params:{q:n,resolve:!0},credentials:e}).then(function(t){return t.map(x.g)})},fetchKnownDomains:function(t){var e=t.credentials;return bt({url:"/api/v1/instance/peers",credentials:e})},fetchDomainMutes:function(t){var e=t.credentials;return bt({url:"/api/v1/domain_blocks",credentials:e})},muteDomain:function(t){var e=t.domain,n=t.credentials;return bt({url:"/api/v1/domain_blocks",method:"POST",payload:{domain:e},credentials:n})},unmuteDomain:function(t){var e=t.domain,n=t.credentials;return bt({url:"/api/v1/domain_blocks",method:"DELETE",payload:{domain:e},credentials:n})},chats:function(t){var e=t.credentials;return vt("/api/v1/pleroma/chats",{headers:wt(e)}).then(function(t){return t.json()}).then(function(t){return{chats:t.map(x.b).filter(function(t){return t})}})},getOrCreateChat:function(t){var e,n=t.accountId,i=t.credentials;return bt({url:(e=n,"/api/v1/pleroma/chats/by-account-id/".concat(e)),method:"POST",credentials:i})},chatMessages:function(t){var e=t.id,n=t.credentials,i=t.maxId,o=t.sinceId,r=t.limit,s=void 0===r?20:r,a=ft(e),c=[i&&"max_id=".concat(i),o&&"since_id=".concat(o),s&&"limit=".concat(s)].filter(function(t){return t}).join("&");return bt({url:a+=c?"?"+c:"",method:"GET",credentials:n})},sendChatMessage:function(t){var e=t.id,n=t.content,i=t.mediaId,o=void 0===i?null:i,r=t.credentials,s={content:n};return o&&(s.media_id=o),bt({url:ft(e),method:"POST",payload:s,credentials:r})},readChat:function(t){var e=t.id,n=t.lastReadId,i=t.credentials;return bt({url:ht(e),method:"POST",payload:{last_read_id:n},credentials:i})},deleteChatMessage:function(t){var e=t.chatId,n=t.messageId,i=t.credentials;return bt({url:mt(e,n),method:"DELETE",credentials:i})}};e.c=Ot},,,,,,function(t,e,n){"use strict";var i=n(97),o=n.n(i),r=function(t){return t&&t.includes("@")};e.a=function(t,e,n){var i=!e||r(e)||o()(n,e);return{name:i?"external-user-profile":"user-profile",params:i?{id:t}:{name:e}}}},function(t,e,n){"use strict";n.r(e);var i={props:["user","betterShadow","compact"],data:function(){return{showPlaceholder:!1,defaultAvatar:"".concat(this.$store.state.instance.server+this.$store.state.instance.defaultAvatar)}},components:{StillImage:n(62).a},methods:{imgSrc:function(t){return!t||this.showPlaceholder?this.defaultAvatar:t},imageLoadError:function(){this.showPlaceholder=!0}}},o=n(0);var r=function(t){n(415)},s=Object(o.a)(i,function(){var t=this.$createElement;return(this._self._c||t)("StillImage",{staticClass:"Avatar",class:{"avatar-compact":this.compact,"better-shadow":this.betterShadow},attrs:{alt:this.user.screen_name,title:this.user.screen_name,src:this.imgSrc(this.user.profile_image_url_original),"image-load-error":this.imageLoadError}})},[],!1,r,null,null);e.default=s.exports},function(t,e,n){"use strict";n.d(e,"d",function(){return d}),n.d(e,"b",function(){return h}),n.d(e,"c",function(){return g}),n.d(e,"a",function(){return v}),n.d(e,"e",function(){return b});var i=n(97),o=n.n(i),r=n(98),s=n.n(r),a=n(37),c=n.n(a),l=n(99),u=n(100),d=function(t){return t.state.statuses.notifications.data},p=function(t){var e=t.rootState||t.state;return[e.config.notificationVisibility.likes&&"like",e.config.notificationVisibility.mentions&&"mention",e.config.notificationVisibility.repeats&&"repeat",e.config.notificationVisibility.follows&&"follow",e.config.notificationVisibility.followRequest&&"follow_request",e.config.notificationVisibility.moves&&"move",e.config.notificationVisibility.emojiReactions&&"pleroma:emoji_reaction"].filter(function(t){return t})},f=["like","mention","repeat","pleroma:emoji_reaction"],h=function(t){return o()(f,t)},m=function(t,e){var n=Number(t.id),i=Number(e.id),o=!Number.isNaN(n),r=!Number.isNaN(i);return o&&r?n>i?-1:1:o&&!r?1:!o&&r?-1:t.id>e.id?-1:1},g=function(t,e){var n=t.rootState||t.state;if(!e.seen&&p(t).includes(e.type)&&("mention"!==e.type||!function(t,e){if(e.status)return e.status.muted||Object(l.a)(e.status,t.rootGetters.mergedConfig.muteWords).length>0}(t,e))){var i=w(e,t.rootGetters.i18n);Object(u.a)(n,i)}},v=function(t,e){var n=d(t).map(function(t){return t}).sort(m);return(n=s()(n,"seen")).filter(function(n){return(e||p(t)).includes(n.type)})},b=function(t){return c()(v(t),function(t){return!t.seen})},w=function(t,e){var n,i={tag:t.id},o=t.status,r=t.from_profile.name;switch(i.title=r,i.icon=t.from_profile.profile_image_url,t.type){case"like":n="favorited_you";break;case"repeat":n="repeated_you";break;case"follow":n="followed_you";break;case"move":n="migrated_to";break;case"follow_request":n="follow_request"}return"pleroma:emoji_reaction"===t.type?i.body=e.t("notifications.reacted_with",[t.emoji]):n?i.body=e.t("notifications."+n):h(t.type)&&(i.body=t.status.text),o&&o.attachments&&o.attachments.length>0&&!o.nsfw&&o.attachments[0].mimetype.startsWith("image/")&&(i.image=o.attachments[0].url),i}},,function(t,e,n){"use strict";var i=function(t){return t.match(/text\/html/)?"html":t.match(/image/)?"image":t.match(/video/)?"video":t.match(/audio/)?"audio":"unknown"},o={fileType:i,fileMatchesSomeType:function(t,e){return t.some(function(t){return i(e.mimetype)===t})}};e.a=o},function(t,e,n){"use strict";n.r(e);var i={name:"Popover",props:{trigger:String,placement:String,boundTo:Object,boundToSelector:String,margin:Object,offset:Object,popoverClass:String},data:function(){return{hidden:!0,styles:{opacity:0},oldSize:{width:0,height:0}}},methods:{containerBoundingClientRect:function(){return(this.boundToSelector?this.$el.closest(this.boundToSelector):this.$el.offsetParent).getBoundingClientRect()},updateStyles:function(){if(this.hidden)this.styles={opacity:0};else{var t=this.$refs.trigger&&this.$refs.trigger.children[0]||this.$el,e=t.getBoundingClientRect(),n=e.left+.5*e.width,i=e.top,o=this.$refs.content,r=this.boundTo&&("container"===this.boundTo.x||"container"===this.boundTo.y)&&this.containerBoundingClientRect(),s=this.margin||{},a=this.boundTo&&"container"===this.boundTo.x?{min:r.left+(s.left||0),max:r.right-(s.right||0)}:{min:0+(s.left||10),max:window.innerWidth-(s.right||10)},c=this.boundTo&&"container"===this.boundTo.y?{min:r.top+(s.top||0),max:r.bottom-(s.bottom||0)}:{min:0+(s.top||50),max:window.innerHeight-(s.bottom||5)},l=0;n-.5*o.offsetWidtha.max&&(l-=n+l+.5*o.offsetWidth-a.max);var u="bottom"!==this.placement;i+o.offsetHeight>c.max&&(u=!0),i-o.offsetHeight0?n("span",[t._v(t._s(t.status.fave_num))]):t._e()]):n("div",[n("i",{staticClass:"button-icon favorite-button",class:t.classes,attrs:{title:t.$t("tool_tip.favorite")}}),t._v(" "),!t.mergedConfig.hidePostStats&&t.status.fave_num>0?n("span",[t._v(t._s(t.status.fave_num))]):t._e()])},[],!1,f,null,null).exports,m=n(22);function g(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(t);e&&(i=i.filter(function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})),n.push.apply(n,i)}return n}var v={props:["status"],data:function(){return{filterWord:""}},components:{Popover:m.default},methods:{addReaction:function(t,e,n){var i=this.status.emoji_reactions.find(function(t){return t.name===e});i&&i.me?this.$store.dispatch("unreactWithEmoji",{id:this.status.id,emoji:e}):this.$store.dispatch("reactWithEmoji",{id:this.status.id,emoji:e}),n()}},computed:function(t){for(var e=1;e0?n("span",[t._v(t._s(t.status.repeat_num))]):t._e()]:[n("i",{staticClass:"button-icon icon-lock",class:t.classes,attrs:{title:t.$t("timeline.no_retweet_hint")}})]],2):t.loggedIn?t._e():n("div",[n("i",{staticClass:"button-icon icon-retweet",class:t.classes,attrs:{title:t.$t("tool_tip.repeat")}}),t._v(" "),!t.mergedConfig.hidePostStats&&t.status.repeat_num>0?n("span",[t._v(t._s(t.status.repeat_num))]):t._e()])},[],!1,y,null,null).exports,C={props:["status"],components:{Popover:m.default},methods:{deleteStatus:function(){window.confirm(this.$t("status.delete_confirm"))&&this.$store.dispatch("deleteStatus",{id:this.status.id})},pinStatus:function(){var t=this;this.$store.dispatch("pinStatus",this.status.id).then(function(){return t.$emit("onSuccess")}).catch(function(e){return t.$emit("onError",e.error.error)})},unpinStatus:function(){var t=this;this.$store.dispatch("unpinStatus",this.status.id).then(function(){return t.$emit("onSuccess")}).catch(function(e){return t.$emit("onError",e.error.error)})},muteConversation:function(){var t=this;this.$store.dispatch("muteConversation",this.status.id).then(function(){return t.$emit("onSuccess")}).catch(function(e){return t.$emit("onError",e.error.error)})},unmuteConversation:function(){var t=this;this.$store.dispatch("unmuteConversation",this.status.id).then(function(){return t.$emit("onSuccess")}).catch(function(e){return t.$emit("onError",e.error.error)})},copyLink:function(){var t=this;navigator.clipboard.writeText(this.statusLink).then(function(){return t.$emit("onSuccess")}).catch(function(e){return t.$emit("onError",e.error.error)})},bookmarkStatus:function(){var t=this;this.$store.dispatch("bookmark",{id:this.status.id}).then(function(){return t.$emit("onSuccess")}).catch(function(e){return t.$emit("onError",e.error.error)})},unbookmarkStatus:function(){var t=this;this.$store.dispatch("unbookmark",{id:this.status.id}).then(function(){return t.$emit("onSuccess")}).catch(function(e){return t.$emit("onError",e.error.error)})}},computed:{currentUser:function(){return this.$store.state.users.currentUser},canDelete:function(){if(this.currentUser)return this.currentUser.rights.moderator||this.currentUser.rights.admin||this.status.user.id===this.currentUser.id},ownStatus:function(){return this.status.user.id===this.currentUser.id},canPin:function(){return this.ownStatus&&("public"===this.status.visibility||"unlisted"===this.status.visibility)},canMute:function(){return!!this.currentUser},statusLink:function(){return"".concat(this.$store.state.instance.server).concat(this.$router.resolve({name:"conversation",params:{id:this.status.id}}).href)}}};var S=function(t){n(385)},j=Object(p.a)(C,function(){var t=this,e=t.$createElement,n=t._self._c||e;return n("Popover",{staticClass:"extra-button-popover",attrs:{trigger:"click",placement:"top","bound-to":{x:"container"}},scopedSlots:t._u([{key:"content",fn:function(e){var i=e.close;return n("div",{},[n("div",{staticClass:"dropdown-menu"},[t.canMute&&!t.status.thread_muted?n("button",{staticClass:"dropdown-item dropdown-item-icon",on:{click:function(e){return e.preventDefault(),t.muteConversation(e)}}},[n("i",{staticClass:"icon-eye-off"}),n("span",[t._v(t._s(t.$t("status.mute_conversation")))])]):t._e(),t._v(" "),t.canMute&&t.status.thread_muted?n("button",{staticClass:"dropdown-item dropdown-item-icon",on:{click:function(e){return e.preventDefault(),t.unmuteConversation(e)}}},[n("i",{staticClass:"icon-eye-off"}),n("span",[t._v(t._s(t.$t("status.unmute_conversation")))])]):t._e(),t._v(" "),!t.status.pinned&&t.canPin?n("button",{staticClass:"dropdown-item dropdown-item-icon",on:{click:[function(e){return e.preventDefault(),t.pinStatus(e)},i]}},[n("i",{staticClass:"icon-pin"}),n("span",[t._v(t._s(t.$t("status.pin")))])]):t._e(),t._v(" "),t.status.pinned&&t.canPin?n("button",{staticClass:"dropdown-item dropdown-item-icon",on:{click:[function(e){return e.preventDefault(),t.unpinStatus(e)},i]}},[n("i",{staticClass:"icon-pin"}),n("span",[t._v(t._s(t.$t("status.unpin")))])]):t._e(),t._v(" "),t.status.bookmarked?t._e():n("button",{staticClass:"dropdown-item dropdown-item-icon",on:{click:[function(e){return e.preventDefault(),t.bookmarkStatus(e)},i]}},[n("i",{staticClass:"icon-bookmark-empty"}),n("span",[t._v(t._s(t.$t("status.bookmark")))])]),t._v(" "),t.status.bookmarked?n("button",{staticClass:"dropdown-item dropdown-item-icon",on:{click:[function(e){return e.preventDefault(),t.unbookmarkStatus(e)},i]}},[n("i",{staticClass:"icon-bookmark"}),n("span",[t._v(t._s(t.$t("status.unbookmark")))])]):t._e(),t._v(" "),t.canDelete?n("button",{staticClass:"dropdown-item dropdown-item-icon",on:{click:[function(e){return e.preventDefault(),t.deleteStatus(e)},i]}},[n("i",{staticClass:"icon-cancel"}),n("span",[t._v(t._s(t.$t("status.delete")))])]):t._e(),t._v(" "),n("button",{staticClass:"dropdown-item dropdown-item-icon",on:{click:[function(e){return e.preventDefault(),t.copyLink(e)},i]}},[n("i",{staticClass:"icon-share"}),n("span",[t._v(t._s(t.$t("status.copy_link")))])])])])}}])},[t._v(" "),n("i",{staticClass:"icon-ellipsis button-icon",attrs:{slot:"trigger"},slot:"trigger"})])},[],!1,S,null,null).exports,O=n(42),P=n(28),$=n(18),T=n(114),I=n(44),E=n(34),M=n(25),U=n.n(M),F={name:"StatusPopover",props:["statusId"],data:function(){return{error:!1}},computed:{status:function(){return U()(this.$store.state.statuses.allStatuses,{id:this.statusId})}},components:{Status:function(){return Promise.resolve().then(n.bind(null,33))},Popover:function(){return Promise.resolve().then(n.bind(null,22))}},methods:{enter:function(){var t=this;if(!this.status){if(!this.statusId)return void(this.error=!0);this.$store.dispatch("fetchStatus",this.statusId).then(function(e){return t.error=!1}).catch(function(e){return t.error=!0})}}}};var D=function(t){n(427)},L=Object(p.a)(F,function(){var t=this,e=t.$createElement,n=t._self._c||e;return n("Popover",{attrs:{trigger:"hover","popover-class":"popover-default status-popover","bound-to":{x:"container"}},on:{show:t.enter}},[n("template",{slot:"trigger"},[t._t("default")],2),t._v(" "),n("div",{attrs:{slot:"content"},slot:"content"},[t.status?n("Status",{attrs:{"is-preview":!0,statusoid:t.status,compact:!0}}):t.error?n("div",{staticClass:"status-preview-no-content faint"},[t._v("\n "+t._s(t.$t("status.status_unavailable"))+"\n ")]):n("div",{staticClass:"status-preview-no-content"},[n("i",{staticClass:"icon-spin4 animate-spin"})])],1)],2)},[],!1,D,null,null).exports,N={name:"UserListPopover",props:["users"],components:{Popover:function(){return Promise.resolve().then(n.bind(null,22))},UserAvatar:function(){return Promise.resolve().then(n.bind(null,18))}},computed:{usersCapped:function(){return this.users.slice(0,16)}}};var R=function(t){n(429)},A=Object(p.a)(N,function(){var t=this,e=t.$createElement,n=t._self._c||e;return n("Popover",{attrs:{trigger:"hover",placement:"top",offset:{y:5}}},[n("template",{slot:"trigger"},[t._t("default")],2),t._v(" "),n("div",{staticClass:"user-list-popover",attrs:{slot:"content"},slot:"content"},[t.users.length?n("div",t._l(t.usersCapped,function(e){return n("div",{key:e.id,staticClass:"user-list-row"},[n("UserAvatar",{staticClass:"avatar-small",attrs:{user:e,compact:!0}}),t._v(" "),n("div",{staticClass:"user-list-names"},[n("span",{domProps:{innerHTML:t._s(e.name_html)}}),t._v(" "),n("span",{staticClass:"user-list-screen-name"},[t._v(t._s(e.screen_name))])])],1)}),0):n("div",[n("i",{staticClass:"icon-spin4 animate-spin"})])])],2)},[],!1,R,null,null).exports,B={name:"EmojiReactions",components:{UserAvatar:$.default,UserListPopover:A},props:["status"],data:function(){return{showAll:!1}},computed:{tooManyReactions:function(){return this.status.emoji_reactions.length>12},emojiReactions:function(){return this.showAll?this.status.emoji_reactions:this.status.emoji_reactions.slice(0,12)},showMoreString:function(){return"+".concat(this.status.emoji_reactions.length-12)},accountsForEmoji:function(){return this.status.emoji_reactions.reduce(function(t,e){return t[e.name]=e.accounts||[],t},{})},loggedIn:function(){return!!this.$store.state.users.currentUser}},methods:{toggleShowAll:function(){this.showAll=!this.showAll},reactedWith:function(t){return this.status.emoji_reactions.find(function(e){return e.name===t}).me},fetchEmojiReactionsByIfMissing:function(){this.status.emoji_reactions.find(function(t){return!t.accounts})&&this.$store.dispatch("fetchEmojiReactionsBy",this.status.id)},reactWith:function(t){this.$store.dispatch("reactWithEmoji",{id:this.status.id,emoji:t})},unreact:function(t){this.$store.dispatch("unreactWithEmoji",{id:this.status.id,emoji:t})},emojiOnClick:function(t,e){this.loggedIn&&(this.reactedWith(t)?this.unreact(t):this.reactWith(t))}}};var z=function(t){n(431)},H=Object(p.a)(B,function(){var t=this,e=t.$createElement,n=t._self._c||e;return n("div",{staticClass:"emoji-reactions"},[t._l(t.emojiReactions,function(e){return n("UserListPopover",{key:e.name,attrs:{users:t.accountsForEmoji[e.name]}},[n("button",{staticClass:"emoji-reaction btn btn-default",class:{"picked-reaction":t.reactedWith(e.name),"not-clickable":!t.loggedIn},on:{click:function(n){return t.emojiOnClick(e.name,n)},mouseenter:function(e){return t.fetchEmojiReactionsByIfMissing()}}},[n("span",{staticClass:"reaction-emoji"},[t._v(t._s(e.name))]),t._v(" "),n("span",[t._v(t._s(e.count))])])])}),t._v(" "),t.tooManyReactions?n("a",{staticClass:"emoji-reaction-expand faint",attrs:{href:"javascript:void(0)"},on:{click:t.toggleShowAll}},[t._v("\n "+t._s(t.showAll?t.$t("general.show_less"):t.showMoreString)+"\n ")]):t._e()],2)},[],!1,z,null,null).exports,q=n(17),W=n(46),V=n(99);function G(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(t);e&&(i=i.filter(function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})),n.push.apply(n,i)}return n}var K={name:"Status",components:{FavoriteButton:h,ReactButton:w,RetweetButton:k,ExtraButtons:j,PostStatusForm:O.a,UserCard:P.a,UserAvatar:$.default,AvatarList:T.a,Timeago:I.a,StatusPopover:L,UserListPopover:A,EmojiReactions:H,StatusContent:E.a},props:["statusoid","expandable","inConversation","focused","highlight","compact","replies","isPreview","noHeading","inlineExpanded","showPinned","inProfile","profileUserId"],data:function(){return{replying:!1,unmuted:!1,userExpanded:!1,error:null}},computed:function(t){for(var e=1;e0,r=(this.inProfile&&(!e&&t.user.id===this.profileUserId||e&&e.user.id===this.profileUserId)||this.inConversation&&t.thread_muted)&&!this.muteWordHits.length>0;return!this.unmuted&&!r&&o},hideFilteredStatuses:function(){return this.mergedConfig.hideFilteredStatuses},hideStatus:function(){return this.deleted||this.muted&&this.hideFilteredStatuses},isFocused:function(){return!!this.focused||!!this.inConversation&&this.status.id===this.highlight},isReply:function(){return!(!this.status.in_reply_to_status_id||!this.status.in_reply_to_user_id)},replyToName:function(){if(this.status.in_reply_to_screen_name)return this.status.in_reply_to_screen_name;var t=this.$store.getters.findUser(this.status.in_reply_to_user_id);return t&&t.screen_name},replySubject:function(){if(!this.status.summary)return"";var t=c()(this.status.summary),e=this.mergedConfig.subjectLineBehavior,n=t.match(/^re[: ]/i);return"noop"!==e&&n||"masto"===e?t:"email"===e?"re: ".concat(t):"noop"===e?"":void 0},combinedFavsAndRepeatsUsers:function(){var t=[].concat(this.statusFromGlobalRepository.favoritedBy,this.statusFromGlobalRepository.rebloggedBy);return s()(t,"id")},tags:function(){return this.status.tags.filter(function(t){return t.hasOwnProperty("name")}).map(function(t){return t.name}).join(" ")},hidePostStats:function(){return this.mergedConfig.hidePostStats}},Object(l.c)(["mergedConfig"]),{},Object(l.e)({betterShadow:function(t){return t.interface.browserSupport.cssFilter},currentUser:function(t){return t.users.currentUser}})),methods:{visibilityIcon:function(t){switch(t){case"private":return"icon-lock";case"unlisted":return"icon-lock-open-alt";case"direct":return"icon-mail-alt";default:return"icon-globe"}},showError:function(t){this.error=t},clearError:function(){this.error=void 0},toggleReplying:function(){this.replying=!this.replying},gotoOriginal:function(t){this.inConversation&&this.$emit("goto",t)},toggleExpanded:function(){this.$emit("toggleExpanded")},toggleMute:function(){this.unmuted=!this.unmuted},toggleUserExpanded:function(){this.userExpanded=!this.userExpanded},generateUserProfileLink:function(t,e){return Object(q.a)(t,e,this.$store.state.instance.restrictedNicknames)}},watch:{highlight:function(t){if(this.status.id===t){var e=this.$el.getBoundingClientRect();e.top<100?window.scrollBy(0,e.top-100):e.height>=window.innerHeight-50?window.scrollBy(0,e.top-100):e.bottom>window.innerHeight-50&&window.scrollBy(0,e.bottom-window.innerHeight+50)}},"status.repeat_num":function(t){this.isFocused&&this.statusFromGlobalRepository.rebloggedBy&&this.statusFromGlobalRepository.rebloggedBy.length!==t&&this.$store.dispatch("fetchRepeats",this.status.id)},"status.fave_num":function(t){this.isFocused&&this.statusFromGlobalRepository.favoritedBy&&this.statusFromGlobalRepository.favoritedBy.length!==t&&this.$store.dispatch("fetchFavs",this.status.id)}},filters:{capitalize:function(t){return t.charAt(0).toUpperCase()+t.slice(1)}}};var Y=function(t){n(374)},J=Object(p.a)(K,function(){var t=this,e=t.$createElement,n=t._self._c||e;return t.hideStatus?t._e():n("div",{staticClass:"Status",class:[{"-focused":t.isFocused},{"-conversation":t.inlineExpanded}]},[t.error?n("div",{staticClass:"alert error"},[t._v("\n "+t._s(t.error)+"\n "),n("i",{staticClass:"button-icon icon-cancel",on:{click:t.clearError}})]):t._e(),t._v(" "),t.muted&&!t.isPreview?[n("div",{staticClass:"status-csontainer muted"},[n("small",{staticClass:"status-username"},[t.muted&&t.retweet?n("i",{staticClass:"button-icon icon-retweet"}):t._e(),t._v(" "),n("router-link",{attrs:{to:t.userProfileLink}},[t._v("\n "+t._s(t.status.user.screen_name)+"\n ")])],1),t._v(" "),t.showReasonMutedThread?n("small",{staticClass:"mute-thread"},[t._v("\n "+t._s(t.$t("status.thread_muted"))+"\n ")]):t._e(),t._v(" "),t.showReasonMutedThread&&t.muteWordHits.length>0?n("small",{staticClass:"mute-thread"},[t._v("\n "+t._s(t.$t("status.thread_muted_and_words"))+"\n ")]):t._e(),t._v(" "),n("small",{staticClass:"mute-words",attrs:{title:t.muteWordHits.join(", ")}},[t._v("\n "+t._s(t.muteWordHits.join(", "))+"\n ")]),t._v(" "),n("a",{staticClass:"unmute",attrs:{href:"#"},on:{click:function(e){return e.preventDefault(),t.toggleMute(e)}}},[n("i",{staticClass:"button-icon icon-eye-off"})])])]:[t.showPinned?n("div",{staticClass:"pin"},[n("i",{staticClass:"fa icon-pin faint"}),t._v(" "),n("span",{staticClass:"faint"},[t._v(t._s(t.$t("status.pinned")))])]):t._e(),t._v(" "),!t.retweet||t.noHeading||t.inConversation?t._e():n("div",{staticClass:"status-container repeat-info",class:[t.repeaterClass,{highlighted:t.repeaterStyle}],style:[t.repeaterStyle]},[t.retweet?n("UserAvatar",{staticClass:"left-side repeater-avatar",attrs:{"better-shadow":t.betterShadow,user:t.statusoid.user}}):t._e(),t._v(" "),n("div",{staticClass:"right-side faint"},[n("span",{staticClass:"status-username repeater-name",attrs:{title:t.retweeter}},[t.retweeterHtml?n("router-link",{attrs:{to:t.retweeterProfileLink},domProps:{innerHTML:t._s(t.retweeterHtml)}}):n("router-link",{attrs:{to:t.retweeterProfileLink}},[t._v(t._s(t.retweeter))])],1),t._v(" "),n("i",{staticClass:"fa icon-retweet retweeted",attrs:{title:t.$t("tool_tip.repeat")}}),t._v("\n "+t._s(t.$t("timeline.repeated"))+"\n ")])],1),t._v(" "),n("div",{staticClass:"status-container",class:[t.userClass,{highlighted:t.userStyle,"-repeat":t.retweet&&!t.inConversation}],style:[t.userStyle],attrs:{"data-tags":t.tags}},[t.noHeading?t._e():n("div",{staticClass:"left-side"},[n("router-link",{attrs:{to:t.userProfileLink},nativeOn:{"!click":function(e){return e.stopPropagation(),e.preventDefault(),t.toggleUserExpanded(e)}}},[n("UserAvatar",{attrs:{compact:t.compact,"better-shadow":t.betterShadow,user:t.status.user}})],1)],1),t._v(" "),n("div",{staticClass:"right-side"},[t.userExpanded?n("UserCard",{staticClass:"usercard",attrs:{"user-id":t.status.user.id,rounded:!0,bordered:!0}}):t._e(),t._v(" "),t.noHeading?t._e():n("div",{staticClass:"status-heading"},[n("div",{staticClass:"heading-name-row"},[n("div",{staticClass:"heading-left"},[t.status.user.name_html?n("h4",{staticClass:"status-username",attrs:{title:t.status.user.name},domProps:{innerHTML:t._s(t.status.user.name_html)}}):n("h4",{staticClass:"status-username",attrs:{title:t.status.user.name}},[t._v("\n "+t._s(t.status.user.name)+"\n ")]),t._v(" "),n("router-link",{staticClass:"account-name",attrs:{title:t.status.user.screen_name,to:t.userProfileLink}},[t._v("\n "+t._s(t.status.user.screen_name)+"\n ")]),t._v(" "),t.status.user&&t.status.user.favicon?n("img",{staticClass:"status-favicon",attrs:{src:t.status.user.favicon}}):t._e()],1),t._v(" "),n("span",{staticClass:"heading-right"},[n("router-link",{staticClass:"timeago faint-link",attrs:{to:{name:"conversation",params:{id:t.status.id}}}},[n("Timeago",{attrs:{time:t.status.created_at,"auto-update":60}})],1),t._v(" "),t.status.visibility?n("div",{staticClass:"button-icon visibility-icon"},[n("i",{class:t.visibilityIcon(t.status.visibility),attrs:{title:t._f("capitalize")(t.status.visibility)}})]):t._e(),t._v(" "),t.status.is_local||t.isPreview?t._e():n("a",{staticClass:"source_url",attrs:{href:t.status.external_url,target:"_blank",title:"Source"}},[n("i",{staticClass:"button-icon icon-link-ext-alt"})]),t._v(" "),t.expandable&&!t.isPreview?[n("a",{attrs:{href:"#",title:"Expand"},on:{click:function(e){return e.preventDefault(),t.toggleExpanded(e)}}},[n("i",{staticClass:"button-icon icon-plus-squared"})])]:t._e(),t._v(" "),t.unmuted?n("a",{attrs:{href:"#"},on:{click:function(e){return e.preventDefault(),t.toggleMute(e)}}},[n("i",{staticClass:"button-icon icon-eye-off"})]):t._e()],2)]),t._v(" "),n("div",{staticClass:"heading-reply-row"},[t.isReply?n("div",{staticClass:"reply-to-and-accountname"},[t.isPreview?n("span",{staticClass:"reply-to-no-popover"},[n("span",{staticClass:"reply-to-text"},[t._v(t._s(t.$t("status.reply_to")))])]):n("StatusPopover",{staticClass:"reply-to-popover",class:{"-strikethrough":!t.status.parent_visible},staticStyle:{"min-width":"0"},attrs:{"status-id":t.status.parent_visible&&t.status.in_reply_to_status_id}},[n("a",{staticClass:"reply-to",attrs:{href:"#","aria-label":t.$t("tool_tip.reply")},on:{click:function(e){return e.preventDefault(),t.gotoOriginal(t.status.in_reply_to_status_id)}}},[n("i",{staticClass:"button-icon reply-button icon-reply"}),t._v(" "),n("span",{staticClass:"faint-link reply-to-text"},[t._v("\n "+t._s(t.$t("status.reply_to"))+"\n ")])])]),t._v(" "),n("router-link",{staticClass:"reply-to-link",attrs:{title:t.replyToName,to:t.replyProfileLink}},[t._v("\n "+t._s(t.replyToName)+"\n ")]),t._v(" "),t.replies&&t.replies.length?n("span",{staticClass:"faint replies-separator"},[t._v("\n -\n ")]):t._e()],1):t._e(),t._v(" "),t.inConversation&&!t.isPreview&&t.replies&&t.replies.length?n("div",{staticClass:"replies"},[n("span",{staticClass:"faint"},[t._v(t._s(t.$t("status.replies_list")))]),t._v(" "),t._l(t.replies,function(e){return n("StatusPopover",{key:e.id,attrs:{"status-id":e.id}},[n("a",{staticClass:"reply-link",attrs:{href:"#"},on:{click:function(n){return n.preventDefault(),t.gotoOriginal(e.id)}}},[t._v(t._s(e.name))])])})],2):t._e()])]),t._v(" "),n("StatusContent",{attrs:{status:t.status,"no-heading":t.noHeading,highlight:t.highlight,focused:t.isFocused}}),t._v(" "),n("transition",{attrs:{name:"fade"}},[!t.hidePostStats&&t.isFocused&&t.combinedFavsAndRepeatsUsers.length>0?n("div",{staticClass:"favs-repeated-users"},[n("div",{staticClass:"stats"},[t.statusFromGlobalRepository.rebloggedBy&&t.statusFromGlobalRepository.rebloggedBy.length>0?n("UserListPopover",{attrs:{users:t.statusFromGlobalRepository.rebloggedBy}},[n("div",{staticClass:"stat-count"},[n("a",{staticClass:"stat-title"},[t._v(t._s(t.$t("status.repeats")))]),t._v(" "),n("div",{staticClass:"stat-number"},[t._v("\n "+t._s(t.statusFromGlobalRepository.rebloggedBy.length)+"\n ")])])]):t._e(),t._v(" "),t.statusFromGlobalRepository.favoritedBy&&t.statusFromGlobalRepository.favoritedBy.length>0?n("UserListPopover",{attrs:{users:t.statusFromGlobalRepository.favoritedBy}},[n("div",{staticClass:"stat-count"},[n("a",{staticClass:"stat-title"},[t._v(t._s(t.$t("status.favorites")))]),t._v(" "),n("div",{staticClass:"stat-number"},[t._v("\n "+t._s(t.statusFromGlobalRepository.favoritedBy.length)+"\n ")])])]):t._e(),t._v(" "),n("div",{staticClass:"avatar-row"},[n("AvatarList",{attrs:{users:t.combinedFavsAndRepeatsUsers}})],1)],1)]):t._e()]),t._v(" "),!t.mergedConfig.emojiReactionsOnTimeline&&!t.isFocused||t.noHeading||t.isPreview?t._e():n("EmojiReactions",{attrs:{status:t.status}}),t._v(" "),t.noHeading||t.isPreview?t._e():n("div",{staticClass:"status-actions"},[n("div",[t.loggedIn?n("i",{staticClass:"button-icon button-reply icon-reply",class:{"-active":t.replying},attrs:{title:t.$t("tool_tip.reply")},on:{click:function(e){return e.preventDefault(),t.toggleReplying(e)}}}):n("i",{staticClass:"button-icon button-reply -disabled icon-reply",attrs:{title:t.$t("tool_tip.reply")}}),t._v(" "),t.status.replies_count>0?n("span",[t._v(t._s(t.status.replies_count))]):t._e()]),t._v(" "),n("retweet-button",{attrs:{visibility:t.status.visibility,"logged-in":t.loggedIn,status:t.status}}),t._v(" "),n("favorite-button",{attrs:{"logged-in":t.loggedIn,status:t.status}}),t._v(" "),t.loggedIn?n("ReactButton",{attrs:{status:t.status}}):t._e(),t._v(" "),n("extra-buttons",{attrs:{status:t.status},on:{onError:t.showError,onSuccess:t.clearError}})],1)],1)]),t._v(" "),t.replying?n("div",{staticClass:"status-container reply-form"},[n("PostStatusForm",{staticClass:"reply-body",attrs:{"reply-to":t.status.id,attentions:t.status.attentions,"replied-user":t.status.user,"copy-message-scope":t.status.visibility,subject:t.replySubject},on:{posted:t.toggleReplying}})],1):t._e()]],2)},[],!1,Y,null,null);e.default=J.exports},function(t,e,n){"use strict";var i=n(1),o=n.n(i),r=n(43),s=n(15),a=n.n(s),c=n(130),l=n.n(c),u={name:"Poll",props:["basePoll"],components:{Timeago:n(44).a},data:function(){return{loading:!1,choices:[]}},created:function(){this.$store.state.polls.pollsObject[this.pollId]||this.$store.dispatch("mergeOrAddPoll",this.basePoll),this.$store.dispatch("trackPoll",this.pollId)},destroyed:function(){this.$store.dispatch("untrackPoll",this.pollId)},computed:{pollId:function(){return this.basePoll.id},poll:function(){return this.$store.state.polls.pollsObject[this.pollId]||{}},options:function(){return this.poll&&this.poll.options||[]},expiresAt:function(){return this.poll&&this.poll.expires_at||0},expired:function(){return this.poll&&this.poll.expired||!1},loggedIn:function(){return this.$store.state.users.currentUser},showResults:function(){return this.poll.voted||this.expired||!this.loggedIn},totalVotesCount:function(){return this.poll.votes_count},containerClass:function(){return{loading:this.loading}},choiceIndices:function(){return this.choices.map(function(t,e){return t&&e}).filter(function(t){return"number"==typeof t})},isDisabled:function(){var t=0===this.choiceIndices.length;return this.loading||t}},methods:{percentageForOption:function(t){return 0===this.totalVotesCount?0:Math.round(t/this.totalVotesCount*100)},resultTitle:function(t){return"".concat(t.votes_count,"/").concat(this.totalVotesCount," ").concat(this.$t("polls.votes"))},fetchPoll:function(){this.$store.dispatch("refreshPoll",{id:this.statusId,pollId:this.poll.id})},activateOption:function(t){var e=this.$el.querySelectorAll("input"),n=this.$el.querySelector('input[value="'.concat(t,'"]'));this.poll.multiple?n.checked=!n.checked:(l()(e,function(t){t.checked=!1}),n.checked=!0),this.choices=a()(e,function(t){return t.checked})},optionId:function(t){return"poll".concat(this.poll.id,"-").concat(t)},vote:function(){var t=this;0!==this.choiceIndices.length&&(this.loading=!0,this.$store.dispatch("votePoll",{id:this.statusId,pollId:this.poll.id,choices:this.choiceIndices}).then(function(e){t.loading=!1}))}}},d=n(0);var p=function(t){n(407)},f=Object(d.a)(u,function(){var t=this,e=t.$createElement,n=t._self._c||e;return n("div",{staticClass:"poll",class:t.containerClass},[t._l(t.options,function(e,i){return n("div",{key:i,staticClass:"poll-option"},[t.showResults?n("div",{staticClass:"option-result",attrs:{title:t.resultTitle(e)}},[n("div",{staticClass:"option-result-label"},[n("span",{staticClass:"result-percentage"},[t._v("\n "+t._s(t.percentageForOption(e.votes_count))+"%\n ")]),t._v(" "),n("span",{domProps:{innerHTML:t._s(e.title_html)}})]),t._v(" "),n("div",{staticClass:"result-fill",style:{width:t.percentageForOption(e.votes_count)+"%"}})]):n("div",{on:{click:function(e){return t.activateOption(i)}}},[t.poll.multiple?n("input",{attrs:{type:"checkbox",disabled:t.loading},domProps:{value:i}}):n("input",{attrs:{type:"radio",disabled:t.loading},domProps:{value:i}}),t._v(" "),n("label",{staticClass:"option-vote"},[n("div",[t._v(t._s(e.title))])])])])}),t._v(" "),n("div",{staticClass:"footer faint"},[t.showResults?t._e():n("button",{staticClass:"btn btn-default poll-vote-button",attrs:{type:"button",disabled:t.isDisabled},on:{click:t.vote}},[t._v("\n "+t._s(t.$t("polls.vote"))+"\n ")]),t._v(" "),n("div",{staticClass:"total"},[t._v("\n "+t._s(t.totalVotesCount)+" "+t._s(t.$t("polls.votes"))+" · \n ")]),t._v(" "),n("i18n",{attrs:{path:t.expired?"polls.expired":"polls.expires_in"}},[n("Timeago",{attrs:{time:t.expiresAt,"auto-update":60,"now-threshold":0}})],1)],1)],2)},[],!1,p,null,null).exports,h=n(111),m=n(112),g=n(17),v=n(21),b=n(7),w=n.n(b),_=n(2);function x(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(t);e&&(i=i.filter(function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})),n.push.apply(n,i)}return n}var y={name:"StatusContent",props:["status","focused","noHeading","fullContent","singleLine"],data:function(){return{showingTall:this.fullContent||this.inConversation&&this.focused,showingLongSubject:!1,expandingSubject:!this.$store.getters.mergedConfig.collapseMessageWithSubject}},computed:function(t){for(var e=1;e20},longSubject:function(){return this.status.summary.length>240},mightHideBecauseSubject:function(){return!!this.status.summary&&this.localCollapseSubjectDefault},mightHideBecauseTall:function(){return this.tallStatus&&!(this.status.summary&&this.localCollapseSubjectDefault)},hideSubjectStatus:function(){return this.mightHideBecauseSubject&&!this.expandingSubject},hideTallStatus:function(){return this.mightHideBecauseTall&&!this.showingTall},showingMore:function(){return this.mightHideBecauseTall&&this.showingTall||this.mightHideBecauseSubject&&this.expandingSubject},nsfwClickthrough:function(){return!!this.status.nsfw&&(!this.status.summary||!this.localCollapseSubjectDefault)},attachmentSize:function(){return this.mergedConfig.hideAttachments&&!this.inConversation||this.mergedConfig.hideAttachmentsInConv&&this.inConversation||this.status.attachments.length>this.maxThumbnails?"hide":this.compact?"small":"normal"},galleryTypes:function(){return"hide"===this.attachmentSize?[]:this.mergedConfig.playVideosInModal?["image","video"]:["image"]},galleryAttachments:function(){var t=this;return this.status.attachments.filter(function(e){return v.a.fileMatchesSomeType(t.galleryTypes,e)})},nonGalleryAttachments:function(){var t=this;return this.status.attachments.filter(function(e){return!v.a.fileMatchesSomeType(t.galleryTypes,e)})},attachmentTypes:function(){return this.status.attachments.map(function(t){return v.a.fileType(t.mimetype)})},maxThumbnails:function(){return this.mergedConfig.maxThumbnails},postBodyHtml:function(){var t=this.status.statusnet_html;if(!this.mergedConfig.greentext)return t;try{return t.includes(">")?function(t,e){for(var n,i=new Set(["p","br","div"]),o=new Set(["p","div"]),r="",s=[],a="",c=null,l=function(){a.trim().length>0?r+=e(a):r+=a,a=""},u=function(t){l(),r+=t},d=function(t){l(),r+=t,s.push(t)},p=function(t){l(),r+=t,s[s.length-1]===t&&s.pop()},f=0;f"!==h&&null!==c)c+=h;else if(">"===h&&null!==c){var m=c+=h;c=null;var g=(n=void 0,(n=/(?:<\/(\w+)>|<(\w+)\s?[^/]*?\/?>)/gi.exec(m))&&(n[1]||n[2]));i.has(g)?"br"===g?u(m):o.has(g)&&("/"===m[1]?p(m):"/"===m[m.length-2]?u(m):d(m)):a+=m}else"\n"===h?u(h):a+=h}return c&&(a+=c),l(),r}(t,function(t){return t.includes(">")&&t.replace(/<[^>]+?>/gi,"").replace(/@\w+/gi,"").trim().startsWith(">")?"".concat(t,""):t}):t}catch(e){return console.err("Failed to process status html",e),t}}},Object(_.c)(["mergedConfig"]),{},Object(_.e)({betterShadow:function(t){return t.interface.browserSupport.cssFilter},currentUser:function(t){return t.users.currentUser}})),components:{Attachment:r.a,Poll:f,Gallery:h.a,LinkPreview:m.a},methods:{linkClicked:function(t){var e,n,i=t.target.closest(".status-content a");if(i){if(i.className.match(/mention/)){var o=i.href,r=this.status.attentions.find(function(t){return function(t,e){if(e===t.statusnet_profile_url)return!0;var n=t.screen_name.split("@"),i=w()(n,2),o=i[0],r=i[1],s=new RegExp("://"+r+"/.*"+o+"$","g");return!!e.match(s)}(t,o)});if(r){t.stopPropagation(),t.preventDefault();var s=this.generateUserProfileLink(r.id,r.screen_name);return void this.$router.push(s)}}if(i.rel.match(/(?:^|\s)tag(?:$|\s)/)||i.className.match(/hashtag/)){var a=i.dataset.tag||(e=i.href,!!(n=/tag[s]*\/(\w+)$/g.exec(e))&&n[1]);if(a){var c=this.generateTagLink(a);return void this.$router.push(c)}}window.open(i.href,"_blank")}},toggleShowMore:function(){this.mightHideBecauseTall?this.showingTall=!this.showingTall:this.mightHideBecauseSubject&&(this.expandingSubject=!this.expandingSubject)},generateUserProfileLink:function(t,e){return Object(g.a)(t,e,this.$store.state.instance.restrictedNicknames)},generateTagLink:function(t){return"/tag/".concat(t)},setMedia:function(){var t=this,e="hide"===this.attachmentSize?this.status.attachments:this.galleryAttachments;return function(){return t.$store.dispatch("setMedia",e)}}}};var k=function(t){n(405)},C=Object(d.a)(y,function(){var t=this,e=t.$createElement,n=t._self._c||e;return n("div",{staticClass:"StatusContent"},[t._t("header"),t._v(" "),t.status.summary_html?n("div",{staticClass:"summary-wrapper",class:{"tall-subject":t.longSubject&&!t.showingLongSubject}},[n("div",{staticClass:"media-body summary",domProps:{innerHTML:t._s(t.status.summary_html)},on:{click:function(e){return e.preventDefault(),t.linkClicked(e)}}}),t._v(" "),t.longSubject&&t.showingLongSubject?n("a",{staticClass:"tall-subject-hider",attrs:{href:"#"},on:{click:function(e){e.preventDefault(),t.showingLongSubject=!1}}},[t._v(t._s(t.$t("status.hide_full_subject")))]):t.longSubject?n("a",{staticClass:"tall-subject-hider",class:{"tall-subject-hider_focused":t.focused},attrs:{href:"#"},on:{click:function(e){e.preventDefault(),t.showingLongSubject=!0}}},[t._v("\n "+t._s(t.$t("status.show_full_subject"))+"\n ")]):t._e()]):t._e(),t._v(" "),n("div",{staticClass:"status-content-wrapper",class:{"tall-status":t.hideTallStatus}},[t.hideTallStatus?n("a",{staticClass:"tall-status-hider",class:{"tall-status-hider_focused":t.focused},attrs:{href:"#"},on:{click:function(e){return e.preventDefault(),t.toggleShowMore(e)}}},[t._v("\n "+t._s(t.$t("general.show_more"))+"\n ")]):t._e(),t._v(" "),t.hideSubjectStatus?t._e():n("div",{staticClass:"status-content media-body",class:{"single-line":t.singleLine},domProps:{innerHTML:t._s(t.postBodyHtml)},on:{click:function(e){return e.preventDefault(),t.linkClicked(e)}}}),t._v(" "),t.hideSubjectStatus?n("a",{staticClass:"cw-status-hider",attrs:{href:"#"},on:{click:function(e){return e.preventDefault(),t.toggleShowMore(e)}}},[t._v("\n "+t._s(t.$t("status.show_content"))+"\n "),t.attachmentTypes.includes("image")?n("span",{staticClass:"icon-picture"}):t._e(),t._v(" "),t.attachmentTypes.includes("video")?n("span",{staticClass:"icon-video"}):t._e(),t._v(" "),t.attachmentTypes.includes("audio")?n("span",{staticClass:"icon-music"}):t._e(),t._v(" "),t.attachmentTypes.includes("unknown")?n("span",{staticClass:"icon-doc"}):t._e(),t._v(" "),t.status.poll&&t.status.poll.options?n("span",{staticClass:"icon-chart-bar"}):t._e(),t._v(" "),t.status.card?n("span",{staticClass:"icon-link"}):t._e()]):t._e(),t._v(" "),t.showingMore&&!t.fullContent?n("a",{staticClass:"status-unhider",attrs:{href:"#"},on:{click:function(e){return e.preventDefault(),t.toggleShowMore(e)}}},[t._v("\n "+t._s(t.tallStatus?t.$t("general.show_less"):t.$t("status.hide_content"))+"\n ")]):t._e()]),t._v(" "),t.status.poll&&t.status.poll.options&&!t.hideSubjectStatus?n("div",[n("poll",{attrs:{"base-poll":t.status.poll}})],1):t._e(),t._v(" "),0===t.status.attachments.length||t.hideSubjectStatus&&!t.showingLongSubject?t._e():n("div",{staticClass:"attachments media-body"},[t._l(t.nonGalleryAttachments,function(e){return n("attachment",{key:e.id,staticClass:"non-gallery",attrs:{size:t.attachmentSize,nsfw:t.nsfwClickthrough,attachment:e,"allow-play":!0,"set-media":t.setMedia()}})}),t._v(" "),t.galleryAttachments.length>0?n("gallery",{attrs:{nsfw:t.nsfwClickthrough,attachments:t.galleryAttachments,"set-media":t.setMedia()}}):t._e()],2),t._v(" "),!t.status.card||t.hideSubjectStatus||t.noHeading?t._e():n("div",{staticClass:"link-preview media-body"},[n("link-preview",{attrs:{card:t.status.card,size:t.attachmentSize,nsfw:t.nsfwClickthrough}})],1),t._v(" "),t._t("footer")],2)},[],!1,k,null,null);e.a=C.exports},function(t,e,n){"use strict";n.d(e,"c",function(){return i}),n.d(e,"b",function(){return o}),n.d(e,"a",function(){return r}),n.d(e,"d",function(){return l}),n.d(e,"e",function(){return u});var i=6e4,o=60*i,r=24*o,s=7*r,a=30*r,c=365.25*r,l=function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:1;"string"==typeof t&&(t=Date.parse(t));var n=Date.now()>t?Math.floor:Math.ceil,l=Math.abs(Date.now()-t),u={num:n(l/c),key:"time.years"};return l<1e3*e?(u.num=0,u.key="time.now"):l1&&void 0!==arguments[1]?arguments[1]:1,n=l(t,e);return n.key+="_short",n}},,,function(t,e,n){"use strict";var i=n(28),o=n(18),r=n(17),s={props:["user"],data:function(){return{userExpanded:!1}},components:{UserCard:i.a,UserAvatar:o.default},methods:{toggleUserExpanded:function(){this.userExpanded=!this.userExpanded},userProfileLink:function(t){return Object(r.a)(t.id,t.screen_name,this.$store.state.instance.restrictedNicknames)}}},a=n(0);var c=function(t){n(463)},l=Object(a.a)(s,function(){var t=this,e=t.$createElement,n=t._self._c||e;return n("div",{staticClass:"basic-user-card"},[n("router-link",{attrs:{to:t.userProfileLink(t.user)}},[n("UserAvatar",{staticClass:"avatar",attrs:{user:t.user},nativeOn:{click:function(e){return e.preventDefault(),t.toggleUserExpanded(e)}}})],1),t._v(" "),t.userExpanded?n("div",{staticClass:"basic-user-card-expanded-content"},[n("UserCard",{attrs:{"user-id":t.user.id,rounded:!0,bordered:!0}})],1):n("div",{staticClass:"basic-user-card-collapsed-content"},[n("div",{staticClass:"basic-user-card-user-name",attrs:{title:t.user.name}},[t.user.name_html?n("span",{staticClass:"basic-user-card-user-name-value",domProps:{innerHTML:t._s(t.user.name_html)}}):n("span",{staticClass:"basic-user-card-user-name-value"},[t._v(t._s(t.user.name))])]),t._v(" "),n("div",[n("router-link",{staticClass:"basic-user-card-screen-name",attrs:{to:t.userProfileLink(t.user)}},[t._v("\n @"+t._s(t.user.screen_name)+"\n ")])],1),t._v(" "),t._t("default")],2)],1)},[],!1,c,null,null);e.a=l.exports},function(t,e,n){"use strict";n.d(e,"a",function(){return g}),n.d(e,"e",function(){return b}),n.d(e,"f",function(){return x}),n.d(e,"b",function(){return C}),n.d(e,"c",function(){return S}),n.d(e,"d",function(){return j});var i=n(1),o=n.n(i),r=n(7),s=n.n(r),a=n(27),c=n.n(a),l=n(10),u=n.n(l),d=n(14),p=n(9),f=n(29);function h(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(t);e&&(i=i.filter(function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})),n.push.apply(n,i)}return n}function m(t){for(var e=1;e1&&void 0!==arguments[1]?arguments[1]:f.b,n=[t],i=e[t];i;)n.unshift(i),i=e[i];return n},b=function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:t,n=arguments.length>2?arguments[2]:void 0,i=arguments.length>3?arguments[3]:void 0,o=arguments.length>4?arguments[4]:void 0;return v(t).map(function(r){return[r===t?i[e]:i[r],r===t?o[n]||1:o[r]]})},w=function(t,e){var n=e[t];if("string"==typeof n&&n.startsWith("--"))return[n.substring(2)];if(null===n)return[];var i=n.depends,o=n.layer,r=n.variant,s=o?v(o).map(function(t){return t===o?r||o:t}):[];return Array.isArray(i)?[].concat(u()(i),u()(s)):u()(s)},_=function(t){return"object"===c()(t)?t:{depends:t.startsWith("--")?[t.substring(2)]:[],default:t.startsWith("#")?t:void 0}},x=function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:f.c,n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:w,i=_(e[t]);if(null!==i.opacity){if(i.opacity)return i.opacity;return i.depends?function i(o){var r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[t],s=n(o,e)[0];if(void 0!==s){var a=e[s];if(void 0!==a)return a.opacity||null===a?a.opacity:a.depends&&r.includes(s)?i(s,[].concat(u()(r),[s])):null}}(t):void 0}},y=function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:f.c,n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:w,i=_(e[t]);if(f.b[t])return t;if(null!==i.layer){if(i.layer)return i.layer;return i.depends?function i(o){var r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[t],s=n(o,e)[0];if(void 0!==s){var a=e[s];if(void 0!==a)return a.layer||null===a?a.layer:a.depends?i(a,[].concat(u()(r),[s])):null}}(t):void 0}},k=function(){for(var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:f.c,e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:w,n=Object.keys(t),i=new Set(n),o=new Set,r=new Set,s=u()(n),a=[],c=function n(s){if(i.has(s))i.delete(s),o.add(s),e(s,t).forEach(n),o.delete(s),r.add(s),a.push(s);else if(o.has(s))console.debug("Cyclic depenency in topoSort, ignoring"),a.push(s);else if(!r.has(s))throw new Error("Unintended condition in topoSort!")};s.length>0;)c(s.pop());return a.map(function(t,e){return{data:t,index:e}}).sort(function(n,i){var o=n.data,r=n.index,s=i.data,a=i.index,c=e(o,t).length,l=e(s,t).length;return c===l||0!==l&&0!==c?r-a:0===c&&0!==l?-1:0===l&&0!==c?1:void 0}).map(function(t){return t.data})}(Object.entries(f.c).sort(function(t,e){var n=s()(t,2),i=(n[0],n[1]),o=s()(e,2),r=(o[0],o[1]);return(i&&i.priority||0)-(r&&r.priority||0)}).reduce(function(t,e){var n=s()(e,2),i=n[0],r=n[1];return m({},t,o()({},i,r))},{})),C=Object.entries(f.c).reduce(function(t,e){var n=s()(e,2),i=n[0],r=(n[1],x(i,f.c,w));return r?m({},t,o()({},r,{defaultValue:f.a[r]||1,affectedSlots:[].concat(u()(t[r]&&t[r].affectedSlots||[]),[i])})):t},{}),S=function(t,e,n){if("string"!=typeof t||!t.startsWith("--"))return t;var i=null,o=t.split(/,/g).map(function(t){return t.trim()}),r=s()(o,2),a=r[0],c=r[1];return i=e(a.substring(2)),c&&(i=Object(d.brightness)(Number.parseFloat(c)*n,i).rgb),i},j=function(t,e){return k.reduce(function(n,i){var r=n.colors,s=n.opacity,a=t[i],c=_(f.c[i]),l=w(i,f.c),h=!!c.textColor,g=c.variant||c.layer,v=null;v=h?Object(p.b)(m({},r[l[0]]||Object(d.convert)(t[i]||"#FF00FF").rgb),b(y(i)||"bg",g||"bg",x(g),r,s)):g&&g!==i?r[g]||Object(d.convert)(t[g]).rgb:r.bg||Object(d.convert)(t.bg);var k=Object(p.h)(v)<.5?1:-1,j=null;if(a){var O=a;if("transparent"===O){var P=b(y(i),i,x(i)||i,r,s).slice(0,-1);O=m({},Object(p.b)(Object(d.convert)("#FF00FF").rgb,P),{a:0})}else"string"==typeof a&&a.startsWith("--")?O=S(a,function(e){return r[e]||t[e]},k):"string"==typeof a&&a.startsWith("#")&&(O=Object(d.convert)(O).rgb);j=m({},O)}else if(c.default)j=Object(d.convert)(c.default).rgb;else{var $=c.color||function(t,e){return m({},e)};if(c.textColor)if("bw"===c.textColor)j=Object(d.contrastRatio)(v).rgb;else{var T=m({},r[l[0]]);c.color&&(T=$.apply(void 0,[k].concat(u()(l.map(function(t){return m({},r[t])}))))),j=Object(p.e)(v,m({},T),"preserve"===c.textColor)}else j=$.apply(void 0,[k].concat(u()(l.map(function(t){return m({},r[t])}))))}if(!j)throw new Error("Couldn't generate color for "+i);var I=c.opacity||x(i),E=c.opacity;if(null===E)j.a=1;else if("transparent"===a)j.a=0;else{var M=E&&void 0!==e[I],U=l[0],F=U&&r[U];E||!F||c.textColor||null===E?F||I?F&&0===F.a?j.a=0:j.a=Number(M?e[I]:(C[I]||{}).defaultValue):delete j.a:j.a=F.a}return(Number.isNaN(j.a)||void 0===j.a)&&(j.a=1),I?{colors:m({},r,o()({},i,j)),opacity:m({},s,o()({},I,j.a))}:{colors:m({},r,o()({},i,j)),opacity:s}},{colors:{},opacity:{}})}},,,function(t,e,n){"use strict";var i=n(3),o=n.n(i),r=n(1),s=n.n(r),a=n(10),c=n.n(a),l=n(41),u=n.n(l),d=n(106),p=n.n(d),f=n(15),h=n.n(f),m=n(189),g=n.n(m),v=n(61),b=n(134),w={data:function(){return{uploadCount:0,uploadReady:!0}},computed:{uploading:function(){return this.uploadCount>0}},methods:{uploadFile:function(t){var e=this,n=this.$store;if(t.size>n.state.instance.uploadlimit){var i=b.a.fileSizeFormat(t.size),o=b.a.fileSizeFormat(n.state.instance.uploadlimit);e.$emit("upload-failed","file_too_big",{filesize:i.num,filesizeunit:i.unit,allowedsize:o.num,allowedsizeunit:o.unit})}else{var r=new FormData;r.append("file",t),e.$emit("uploading"),e.uploadCount++,v.a.uploadMedia({store:n,formData:r}).then(function(t){e.$emit("uploaded",t),e.decreaseUploadCount()},function(t){e.$emit("upload-failed","default"),e.decreaseUploadCount()})}},decreaseUploadCount:function(){this.uploadCount--,0===this.uploadCount&&this.$emit("all-uploaded")},clearFile:function(){var t=this;this.uploadReady=!1,this.$nextTick(function(){t.uploadReady=!0})},multiUpload:function(t){var e=!0,n=!1,i=void 0;try{for(var o,r=t[Symbol.iterator]();!(e=(o=r.next()).done);e=!0){var s=o.value;this.uploadFile(s)}}catch(t){n=!0,i=t}finally{try{e||null==r.return||r.return()}finally{if(n)throw i}}},change:function(t){var e=t.target;this.multiUpload(e.files)}},props:["dropFiles","disabled"],watch:{dropFiles:function(t){this.uploading||this.multiUpload(t)}}},_=n(0);var x=function(t){n(389)},y=Object(_.a)(w,function(){var t=this,e=t.$createElement,n=t._self._c||e;return n("div",{staticClass:"media-upload",class:{disabled:t.disabled}},[n("label",{staticClass:"label",attrs:{title:t.$t("tool_tip.media_upload")}},[t.uploading?n("i",{staticClass:"progress-icon icon-spin4 animate-spin"}):t._e(),t._v(" "),t.uploading?t._e():n("i",{staticClass:"new-icon icon-upload"}),t._v(" "),t.uploadReady?n("input",{staticStyle:{position:"fixed",top:"-100em"},attrs:{disabled:t.disabled,type:"file",multiple:"true"},on:{change:t.change}}):t._e()])])},[],!1,x,null,null).exports,k=n(196),C=n(195),S=n(77),j=n.n(S),O=n(35),P={name:"PollForm",props:["visible"],data:function(){return{pollType:"single",options:["",""],expiryAmount:10,expiryUnit:"minutes"}},computed:{pollLimits:function(){return this.$store.state.instance.pollLimits},maxOptions:function(){return this.pollLimits.max_options},maxLength:function(){return this.pollLimits.max_option_chars},expiryUnits:function(){var t=this,e=this.convertExpiryFromUnit;return["minutes","hours","days"].filter(function(n){return t.pollLimits.max_expiration>=e(n,1)})},minExpirationInCurrentUnit:function(){return Math.ceil(this.convertExpiryToUnit(this.expiryUnit,this.pollLimits.min_expiration))},maxExpirationInCurrentUnit:function(){return Math.floor(this.convertExpiryToUnit(this.expiryUnit,this.pollLimits.max_expiration))}},methods:{clear:function(){this.pollType="single",this.options=["",""],this.expiryAmount=10,this.expiryUnit="minutes"},nextOption:function(t){var e=this.$el.querySelector("#poll-".concat(t+1));e?e.focus():this.addOption()&&this.$nextTick(function(){this.nextOption(t)})},addOption:function(){return this.options.length2&&(this.options.splice(t,1),this.updatePollToParent())},convertExpiryToUnit:function(t,e){switch(t){case"minutes":return 1e3*e/O.c;case"hours":return 1e3*e/O.b;case"days":return 1e3*e/O.a}},convertExpiryFromUnit:function(t,e){switch(t){case"minutes":return.001*e*O.c;case"hours":return.001*e*O.b;case"days":return.001*e*O.a}},expiryAmountChange:function(){this.expiryAmount=Math.max(this.minExpirationInCurrentUnit,this.expiryAmount),this.expiryAmount=Math.min(this.maxExpirationInCurrentUnit,this.expiryAmount),this.updatePollToParent()},updatePollToParent:function(){var t=this.convertExpiryFromUnit(this.expiryUnit,this.expiryAmount),e=j()(this.options.filter(function(t){return""!==t}));e.length<2?this.$emit("update-poll",{error:this.$t("polls.not_enough_options")}):this.$emit("update-poll",{options:e,multiple:"multiple"===this.pollType,expiresIn:t})}}};var $=function(t){n(399)},T=Object(_.a)(P,function(){var t=this,e=t.$createElement,n=t._self._c||e;return t.visible?n("div",{staticClass:"poll-form"},[t._l(t.options,function(e,i){return n("div",{key:i,staticClass:"poll-option"},[n("div",{staticClass:"input-container"},[n("input",{directives:[{name:"model",rawName:"v-model",value:t.options[i],expression:"options[index]"}],staticClass:"poll-option-input",attrs:{id:"poll-"+i,type:"text",placeholder:t.$t("polls.option"),maxlength:t.maxLength},domProps:{value:t.options[i]},on:{change:t.updatePollToParent,keydown:function(e){return!e.type.indexOf("key")&&t._k(e.keyCode,"enter",13,e.key,"Enter")?null:(e.stopPropagation(),e.preventDefault(),t.nextOption(i))},input:function(e){e.target.composing||t.$set(t.options,i,e.target.value)}}})]),t._v(" "),t.options.length>2?n("div",{staticClass:"icon-container"},[n("i",{staticClass:"icon-cancel",on:{click:function(e){return t.deleteOption(i)}}})]):t._e()])}),t._v(" "),t.options.length0?s.join(" ")+" ":""}({user:this.repliedUser,attentions:this.attentions},n)}var i=this.copyMessageScope&&e||"direct"===this.copyMessageScope?this.copyMessageScope:this.$store.state.users.currentUser.default_scope,o=this.$store.getters.mergedConfig.postContentType;return{dropFiles:[],uploadingFiles:!1,error:null,posting:!1,highlighted:0,newStatus:{spoilerText:this.subject||"",status:t,nsfw:!1,files:[],poll:{},mediaDescriptions:{},visibility:i,contentType:o},caret:0,pollFormVisible:!1,showDropIcon:"hide",dropStopTimeout:null,preview:null,previewLoading:!1,emojiInputShown:!1,idempotencyKey:""}},computed:function(t){for(var e=1;e0},charactersLeft:function(){return this.statusLengthLimit-(this.statusLength+this.spoilerTextLength)},isOverLengthLimit:function(){return this.hasStatusLengthLimit&&this.charactersLeft<0},minimalScopesMode:function(){return this.$store.state.instance.minimalScopesMode},alwaysShowSubject:function(){return this.mergedConfig.alwaysShowSubjectInput},postFormats:function(){return this.$store.state.instance.postFormats||[]},safeDMEnabled:function(){return this.$store.state.instance.safeDM},pollsAvailable:function(){return this.$store.state.instance.pollsAvailable&&this.$store.state.instance.pollLimits.max_options>=2&&!0!==this.disablePolls},hideScopeNotice:function(){return this.disableNotice||this.$store.getters.mergedConfig.hideScopeNotice},pollContentError:function(){return this.pollFormVisible&&this.newStatus.poll&&this.newStatus.poll.error},showPreview:function(){return!this.disablePreview&&(!!this.preview||this.previewLoading)},emptyStatus:function(){return""===this.newStatus.status.trim()&&0===this.newStatus.files.length},uploadFileLimitReached:function(){return this.newStatus.files.length>=this.fileLimit}},Object(D.c)(["mergedConfig"]),{},Object(D.e)({mobileLayout:function(t){return t.interface.mobileLayout}})),watch:{newStatus:{deep:!0,handler:function(){this.statusChanged()}}},methods:{statusChanged:function(){this.autoPreview(),this.updateIdempotencyKey()},clearStatus:function(){var t=this,e=this.newStatus;this.newStatus={status:"",spoilerText:"",files:[],visibility:e.visibility,contentType:e.contentType,poll:{},mediaDescriptions:{}},this.pollFormVisible=!1,this.$refs.mediaUpload&&this.$refs.mediaUpload.clearFile(),this.clearPollForm(),this.preserveFocus&&this.$nextTick(function(){t.$refs.textarea.focus()});var n=this.$el.querySelector("textarea");n.style.height="auto",n.style.height=void 0,this.error=null,this.preview&&this.previewStatus()},postStatus:function(t,e){var n,i,r=this,s=arguments;return o.a.async(function(a){for(;;)switch(a.prev=a.next){case 0:if(s.length>2&&void 0!==s[2]?s[2]:{},!this.posting){a.next=3;break}return a.abrupt("return");case 3:if(!this.disableSubmit){a.next=5;break}return a.abrupt("return");case 5:if(!this.emojiInputShown){a.next=7;break}return a.abrupt("return");case 7:if(this.submitOnEnter&&(t.stopPropagation(),t.preventDefault()),!this.emptyStatus){a.next=11;break}return this.error=this.$t("post_status.empty_status_error"),a.abrupt("return");case 11:if(n=this.pollFormVisible?this.newStatus.poll:{},!this.pollContentError){a.next=15;break}return this.error=this.pollContentError,a.abrupt("return");case 15:return this.posting=!0,a.prev=16,a.next=19,o.a.awrap(this.setAllMediaDescriptions());case 19:a.next=26;break;case 21:return a.prev=21,a.t0=a.catch(16),this.error=this.$t("post_status.media_description_error"),this.posting=!1,a.abrupt("return");case 26:i={status:e.status,spoilerText:e.spoilerText||null,visibility:e.visibility,sensitive:e.nsfw,media:e.files,store:this.$store,inReplyToStatusId:this.replyTo,contentType:e.contentType,poll:n,idempotencyKey:this.idempotencyKey},(this.postHandler?this.postHandler:v.a.postStatus)(i).then(function(t){t.error?r.error=t.error:(r.clearStatus(),r.$emit("posted",t)),r.posting=!1});case 29:case"end":return a.stop()}},null,this,[[16,21]])},previewStatus:function(){var t=this;if(this.emptyStatus&&""===this.newStatus.spoilerText.trim())return this.preview={error:this.$t("post_status.preview_empty")},void(this.previewLoading=!1);var e=this.newStatus;this.previewLoading=!0,v.a.postStatus({status:e.status,spoilerText:e.spoilerText||null,visibility:e.visibility,sensitive:e.nsfw,media:[],store:this.$store,inReplyToStatusId:this.replyTo,contentType:e.contentType,poll:{},preview:!0}).then(function(e){t.previewLoading&&(e.error?t.preview={error:e.error}:t.preview=e)}).catch(function(e){t.preview={error:e}}).finally(function(){t.previewLoading=!1})},debouncePreviewStatus:u()(function(){this.previewStatus()},500),autoPreview:function(){this.preview&&(this.previewLoading=!0,this.debouncePreviewStatus())},closePreview:function(){this.preview=null,this.previewLoading=!1},togglePreview:function(){this.showPreview?this.closePreview():this.previewStatus()},addMediaFile:function(t){this.newStatus.files.push(t),this.$emit("resize",{delayed:!0})},removeMediaFile:function(t){var e=this.newStatus.files.indexOf(t);this.newStatus.files.splice(e,1),this.$emit("resize")},uploadFailed:function(t,e){e=e||{},this.error=this.$t("upload.error.base")+" "+this.$t("upload.error."+t,e)},startedUploadingFiles:function(){this.uploadingFiles=!0},finishedUploadingFiles:function(){this.$emit("resize"),this.uploadingFiles=!1},type:function(t){return M.a.fileType(t.mimetype)},paste:function(t){this.autoPreview(),this.resize(t),t.clipboardData.files.length>0&&(t.preventDefault(),this.dropFiles=[t.clipboardData.files[0]])},fileDrop:function(t){t.dataTransfer&&t.dataTransfer.types.includes("Files")&&(t.preventDefault(),this.dropFiles=t.dataTransfer.files,clearTimeout(this.dropStopTimeout),this.showDropIcon="hide")},fileDragStop:function(t){var e=this;clearTimeout(this.dropStopTimeout),this.showDropIcon="fade",this.dropStopTimeout=setTimeout(function(){return e.showDropIcon="hide"},500)},fileDrag:function(t){t.dataTransfer.dropEffect=this.uploadFileLimitReached?"none":"copy",t.dataTransfer&&t.dataTransfer.types.includes("Files")&&(clearTimeout(this.dropStopTimeout),this.showDropIcon="show")},onEmojiInputInput:function(t){var e=this;this.$nextTick(function(){e.resize(e.$refs.textarea)})},resize:function(t){var e=t.target||t;if(e instanceof window.Element){if(""===e.value)return e.style.height=null,this.$emit("resize"),void this.$refs["emoji-input"].resize();var n=this.$refs.form,i=this.$refs.bottom,o=window.getComputedStyle(i)["padding-bottom"],r=R(o),s=this.$el.closest(".sidebar-scroller")||this.$el.closest(".post-form-modal-view")||window,a=window.getComputedStyle(e)["padding-top"],c=window.getComputedStyle(e)["padding-bottom"],l=R(a)+R(c),u=R(e.style.height),d=s===window?s.scrollY:s.scrollTop,p=s===window?s.innerHeight:s.offsetHeight,f=d+p;e.style.height="auto";var h=Math.floor(e.scrollHeight-l),m=this.maxHeight?Math.min(h,this.maxHeight):h;Math.abs(m-u)<=1&&(m=u),e.style.height="".concat(m,"px"),this.$emit("resize",m);var g=i.offsetHeight+Object(U.a)(i,s).top+r,v=f1?n("div",{staticClass:"text-format"},[n("label",{staticClass:"select",attrs:{for:"post-content-type"}},[n("select",{directives:[{name:"model",rawName:"v-model",value:t.newStatus.contentType,expression:"newStatus.contentType"}],staticClass:"form-control",attrs:{id:"post-content-type"},on:{change:function(e){var n=Array.prototype.filter.call(e.target.options,function(t){return t.selected}).map(function(t){return"_value"in t?t._value:t.value});t.$set(t.newStatus,"contentType",e.target.multiple?n:n[0])}}},t._l(t.postFormats,function(e){return n("option",{key:e,domProps:{value:e}},[t._v("\n "+t._s(t.$t('post_status.content_type["'+e+'"]'))+"\n ")])}),0),t._v(" "),n("i",{staticClass:"icon-down-open"})])]):t._e(),t._v(" "),1===t.postFormats.length&&"text/plain"!==t.postFormats[0]?n("div",{staticClass:"text-format"},[n("span",{staticClass:"only-format"},[t._v("\n "+t._s(t.$t('post_status.content_type["'+t.postFormats[0]+'"]'))+"\n ")])]):t._e()],1)],1),t._v(" "),t.pollsAvailable?n("poll-form",{ref:"pollForm",attrs:{visible:t.pollFormVisible},on:{"update-poll":t.setPoll}}):t._e(),t._v(" "),n("div",{ref:"bottom",staticClass:"form-bottom"},[n("div",{staticClass:"form-bottom-left"},[n("media-upload",{ref:"mediaUpload",staticClass:"media-upload-icon",attrs:{"drop-files":t.dropFiles,disabled:t.uploadFileLimitReached},on:{uploading:t.startedUploadingFiles,uploaded:t.addMediaFile,"upload-failed":t.uploadFailed,"all-uploaded":t.finishedUploadingFiles}}),t._v(" "),n("div",{staticClass:"emoji-icon"},[n("i",{staticClass:"icon-smile btn btn-default",attrs:{title:t.$t("emoji.add_emoji")},on:{click:t.showEmojiPicker}})]),t._v(" "),t.pollsAvailable?n("div",{staticClass:"poll-icon",class:{selected:t.pollFormVisible}},[n("i",{staticClass:"icon-chart-bar btn btn-default",attrs:{title:t.$t("polls.add_poll")},on:{click:t.togglePollForm}})]):t._e()],1),t._v(" "),t.posting?n("button",{staticClass:"btn btn-default",attrs:{disabled:""}},[t._v("\n "+t._s(t.$t("post_status.posting"))+"\n ")]):t.isOverLengthLimit?n("button",{staticClass:"btn btn-default",attrs:{disabled:""}},[t._v("\n "+t._s(t.$t("general.submit"))+"\n ")]):n("button",{staticClass:"btn btn-default",attrs:{disabled:t.uploadingFiles||t.disableSubmit},on:{touchstart:function(e){return e.stopPropagation(),e.preventDefault(),t.postStatus(e,t.newStatus)},click:function(e){return e.stopPropagation(),e.preventDefault(),t.postStatus(e,t.newStatus)}}},[t._v("\n "+t._s(t.$t("general.submit"))+"\n ")])]),t._v(" "),t.error?n("div",{staticClass:"alert error"},[t._v("\n Error: "+t._s(t.error)+"\n "),n("i",{staticClass:"button-icon icon-cancel",on:{click:t.clearError}})]):t._e(),t._v(" "),n("div",{staticClass:"attachments"},t._l(t.newStatus.files,function(e){return n("div",{key:e.url,staticClass:"media-upload-wrapper"},[n("i",{staticClass:"fa button-icon icon-cancel",on:{click:function(n){return t.removeMediaFile(e)}}}),t._v(" "),n("attachment",{attrs:{attachment:e,"set-media":function(){return t.$store.dispatch("setMedia",t.newStatus.files)},size:"small","allow-play":"false"}}),t._v(" "),n("input",{directives:[{name:"model",rawName:"v-model",value:t.newStatus.mediaDescriptions[e.id],expression:"newStatus.mediaDescriptions[file.id]"}],attrs:{type:"text",placeholder:t.$t("post_status.media_description")},domProps:{value:t.newStatus.mediaDescriptions[e.id]},on:{keydown:function(e){if(!e.type.indexOf("key")&&t._k(e.keyCode,"enter",13,e.key,"Enter"))return null;e.preventDefault()},input:function(n){n.target.composing||t.$set(t.newStatus.mediaDescriptions,e.id,n.target.value)}}})],1)}),0),t._v(" "),t.newStatus.files.length>0&&!t.disableSensitivityCheckbox?n("div",{staticClass:"upload_settings"},[n("Checkbox",{model:{value:t.newStatus.nsfw,callback:function(e){t.$set(t.newStatus,"nsfw",e)},expression:"newStatus.nsfw"}},[t._v("\n "+t._s(t.$t("post_status.attachments_sensitive"))+"\n ")])],1):t._e()],1)])},[],!1,B,null,null);e.a=z.exports},function(t,e,n){"use strict";var i=n(1),o=n.n(i),r=n(62),s=n(110),a=n(216),c=n.n(a),l=n(21),u=n(2);function d(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(t);e&&(i=i.filter(function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})),n.push.apply(n,i)}return n}var p={props:["attachment","nsfw","size","allowPlay","setMedia","naturalSizeLoad"],data:function(){return{nsfwImage:this.$store.state.instance.nsfwCensorImage||c.a,hideNsfwLocal:this.$store.getters.mergedConfig.hideNsfw,preloadImage:this.$store.getters.mergedConfig.preloadImage,loading:!1,img:"image"===l.a.fileType(this.attachment.mimetype)&&document.createElement("img"),modalOpen:!1,showHidden:!1}},components:{StillImage:r.a,VideoAttachment:s.a},computed:function(t){for(var e=1;e2&&void 0!==arguments[2]?arguments[2]:{},r=i.top,s=void 0===r?0:r,a=i.left,c=void 0===a?0:a,l=!(arguments.length>3&&void 0!==arguments[3])||arguments[3],u={top:s+e.offsetTop,left:c+e.offsetLeft};if(!l&&e!==window){var d=o(e),p=d.topPadding,f=d.leftPadding;u.top+=l?0:p,u.left+=l?0:f}if(e.offsetParent&&(n===window||n.contains(e.offsetParent)||n===e.offsetParent))return t(e.offsetParent,n,u,!1);if(n!==window){var h=o(n),m=h.topPadding,g=h.leftPadding;u.top+=m,u.left+=g}return u},o=function(t){var e=window.getComputedStyle(t)["padding-top"],n=Number(e.substring(0,e.length-2)),i=window.getComputedStyle(t)["padding-left"];return{topPadding:n,leftPadding:Number(i.substring(0,i.length-2))}}},,function(t,e,n){"use strict";var i=n(7),o=n.n(i),r=function(t,e){return new Promise(function(n,i){e.state.api.backendInteractor.followUser({id:t}).then(function(t){if(e.commit("updateUserRelationship",[t]),!(t.following||t.locked&&t.requested))return function t(e,n,i){return new Promise(function(t,o){setTimeout(function(){i.state.api.backendInteractor.fetchUserRelationship({id:n}).then(function(t){return i.commit("updateUserRelationship",[t]),t}).then(function(n){return t([n.following,n.requested,n.locked,e])}).catch(function(t){return o(t)})},500)}).then(function(e){var r=o()(e,4),s=r[0],a=r[1],c=r[2],l=r[3];s||c&&a||!(l<=3)||t(++l,n,i)})}(1,t,e).then(function(){n()});n()})})},s={props:["relationship","labelFollowing","buttonClass"],data:function(){return{inProgress:!1}},computed:{isPressed:function(){return this.inProgress||this.relationship.following},title:function(){return this.inProgress||this.relationship.following?this.$t("user_card.follow_unfollow"):this.relationship.requested?this.$t("user_card.follow_again"):this.$t("user_card.follow")},label:function(){return this.inProgress?this.$t("user_card.follow_progress"):this.relationship.following?this.labelFollowing||this.$t("user_card.following"):this.relationship.requested?this.$t("user_card.follow_sent"):this.$t("user_card.follow")}},methods:{onClick:function(){this.relationship.following?this.unfollow():this.follow()},follow:function(){var t=this;this.inProgress=!0,r(this.relationship.id,this.$store).then(function(){t.inProgress=!1})},unfollow:function(){var t=this,e=this.$store;this.inProgress=!0,function(t,e){return new Promise(function(n,i){e.state.api.backendInteractor.unfollowUser({id:t}).then(function(t){e.commit("updateUserRelationship",[t]),n({updated:t})})})}(this.relationship.id,e).then(function(){t.inProgress=!1,e.commit("removeStatus",{timeline:"friends",userId:t.relationship.id})})}}},a=n(0),c=Object(a.a)(s,function(){var t=this.$createElement;return(this._self._c||t)("button",{staticClass:"btn btn-default follow-button",class:{toggled:this.isPressed},attrs:{disabled:this.inProgress,title:this.title},on:{click:this.onClick}},[this._v("\n "+this._s(this.label)+"\n")])},[],!1,null,null,null);e.a=c.exports},function(t,e,n){"use strict";var i={props:["attachment","controls"],data:function(){return{loopVideo:this.$store.getters.mergedConfig.loopVideo}},methods:{onVideoDataLoad:function(t){var e=t.srcElement||t.target;void 0!==e.webkitAudioDecodedByteCount?e.webkitAudioDecodedByteCount>0&&(this.loopVideo=this.loopVideo&&!this.$store.getters.mergedConfig.loopVideoSilentOnly):void 0!==e.mozHasAudio?e.mozHasAudio&&(this.loopVideo=this.loopVideo&&!this.$store.getters.mergedConfig.loopVideoSilentOnly):void 0!==e.audioTracks&&e.audioTracks.length>0&&(this.loopVideo=this.loopVideo&&!this.$store.getters.mergedConfig.loopVideoSilentOnly)}}},o=n(0),r=Object(o.a)(i,function(){var t=this.$createElement;return(this._self._c||t)("video",{staticClass:"video",attrs:{src:this.attachment.url,loop:this.loopVideo,controls:this.controls,alt:this.attachment.description,title:this.attachment.description,playsinline:""},on:{loadeddata:this.onVideoDataLoad}})},[],!1,null,null,null);e.a=r.exports},function(t,e,n){"use strict";var i=n(104),o=n.n(i),r=n(217),s=n.n(r),a=n(23),c=n.n(a),l=n(218),u=n.n(l),d={props:["attachments","nsfw","setMedia"],data:function(){return{sizes:{}}},components:{Attachment:n(43).a},computed:{rows:function(){if(!this.attachments)return[];var t=u()(this.attachments,3);if(1===c()(t).length&&t.length>1){var e=c()(t)[0],n=s()(t);return c()(n).push(e),n}return t},useContainFit:function(){return this.$store.getters.mergedConfig.useContainFit}},methods:{onNaturalSizeLoad:function(t,e){this.$set(this.sizes,t,e)},rowStyle:function(t){return{"padding-bottom":"".concat(100/(t+.6),"%")}},itemStyle:function(t,e){var n=this,i=o()(e,function(t){return n.getAspectRatio(t.id)});return{flex:"".concat(this.getAspectRatio(t)/i," 1 0%")}},getAspectRatio:function(t){var e=this.sizes[t];return e?e.width/e.height:1}}},p=n(0);var f=function(t){n(409)},h=Object(p.a)(d,function(){var t=this,e=t.$createElement,n=t._self._c||e;return n("div",{ref:"galleryContainer",staticStyle:{width:"100%"}},t._l(t.rows,function(e,i){return n("div",{key:i,staticClass:"gallery-row",class:{"contain-fit":t.useContainFit,"cover-fit":!t.useContainFit},style:t.rowStyle(e.length)},[n("div",{staticClass:"gallery-row-inner"},t._l(e,function(i){return n("attachment",{key:i.id,style:t.itemStyle(i.id,e),attrs:{"set-media":t.setMedia,nsfw:t.nsfw,attachment:i,"allow-play":!1,"natural-size-load":t.onNaturalSizeLoad.bind(null,i.id)}})}),1)])}),0)},[],!1,f,null,null);e.a=h.exports},function(t,e,n){"use strict";var i={name:"LinkPreview",props:["card","size","nsfw"],data:function(){return{imageLoaded:!1}},computed:{useImage:function(){return this.card.image&&!this.nsfw&&"hide"!==this.size},useDescription:function(){return this.card.description&&/\S/.test(this.card.description)}},created:function(){var t=this;if(this.useImage){var e=new Image;e.onload=function(){t.imageLoaded=!0},e.src=this.card.image}}},o=n(0);var r=function(t){n(411)},s=Object(o.a)(i,function(){var t=this,e=t.$createElement,n=t._self._c||e;return n("div",[n("a",{staticClass:"link-preview-card",attrs:{href:t.card.url,target:"_blank",rel:"noopener"}},[t.useImage&&t.imageLoaded?n("div",{staticClass:"card-image",class:{"small-image":"small"===t.size}},[n("img",{attrs:{src:t.card.image}})]):t._e(),t._v(" "),n("div",{staticClass:"card-content"},[n("span",{staticClass:"card-host faint"},[t._v(t._s(t.card.provider_name))]),t._v(" "),n("h4",{staticClass:"card-title"},[t._v(t._s(t.card.title))]),t._v(" "),t.useDescription?n("p",{staticClass:"card-description"},[t._v(t._s(t.card.description))]):t._e()])])])},[],!1,r,null,null);e.a=s.exports},function(t,e,n){"use strict";var i={props:["user"],computed:{subscribeUrl:function(){var t=new URL(this.user.statusnet_profile_url);return"".concat(t.protocol,"//").concat(t.host,"/main/ostatus")}}},o=n(0);var r=function(t){n(417)},s=Object(o.a)(i,function(){var t=this.$createElement,e=this._self._c||t;return e("div",{staticClass:"remote-follow"},[e("form",{attrs:{method:"POST",action:this.subscribeUrl}},[e("input",{attrs:{type:"hidden",name:"nickname"},domProps:{value:this.user.screen_name}}),this._v(" "),e("input",{attrs:{type:"hidden",name:"profile",value:""}}),this._v(" "),e("button",{staticClass:"remote-button",attrs:{click:"submit"}},[this._v("\n "+this._s(this.$t("user_card.remote_follow"))+"\n ")])])])},[],!1,r,null,null);e.a=s.exports},function(t,e,n){"use strict";var i=n(18),o=n(17),r={props:["users"],computed:{slicedUsers:function(){return this.users?this.users.slice(0,15):[]}},components:{UserAvatar:i.default},methods:{userProfileLink:function(t){return Object(o.a)(t.id,t.screen_name,this.$store.state.instance.restrictedNicknames)}}},s=n(0);var a=function(t){n(425)},c=Object(s.a)(r,function(){var t=this,e=t.$createElement,n=t._self._c||e;return n("div",{staticClass:"avatars"},t._l(t.slicedUsers,function(e){return n("router-link",{key:e.id,staticClass:"avatars-item",attrs:{to:t.userProfileLink(e)}},[n("UserAvatar",{staticClass:"avatar-small",attrs:{user:e}})],1)}),1)},[],!1,a,null,null);e.a=c.exports},,,,,,,,,,,,,,,,,,,,function(t,e,n){"use strict";var i={fileSizeFormat:function(t){var e,n=["B","KiB","MiB","GiB","TiB"];return t<1?t+" "+n[0]:(e=Math.min(Math.floor(Math.log(t)/Math.log(1024)),n.length-1),{num:t=1*(t/Math.pow(1024,e)).toFixed(2),unit:n[e]})}};e.a=i},function(t,e,n){"use strict";var i=n(41),o=n.n(i)()(function(t,e){t.updateUsersList(e)},500);e.a=function(t){return function(e){var n=e[0];return":"===n&&t.emoji?r(t.emoji)(e):"@"===n&&t.users?s(t)(e):[]}};var r=function(t){return function(e){var n=e.toLowerCase().substr(1);return t.filter(function(t){return t.displayText.toLowerCase().match(n)}).sort(function(t,e){var i=0,o=0;return i+=t.displayText.toLowerCase()===n?200:0,o+=e.displayText.toLowerCase()===n?200:0,i+=t.imageUrl?100:0,o+=e.imageUrl?100:0,i+=t.displayText.toLowerCase().startsWith(n)?10:0,o+=e.displayText.toLowerCase().startsWith(n)?10:0,i-=t.displayText.length,(o-=e.displayText.length)-i+(t.displayText>e.displayText?.5:-.5)})}},s=function(t){return function(e){var n=e.toLowerCase().substr(1),i=t.users.filter(function(t){return t.screen_name.toLowerCase().startsWith(n)||t.name.toLowerCase().startsWith(n)}).slice(0,20).sort(function(t,e){var i=0,o=0;return i+=t.screen_name.toLowerCase().startsWith(n)?2:0,o+=e.screen_name.toLowerCase().startsWith(n)?2:0,i+=t.name.toLowerCase().startsWith(n)?1:0,10*((o+=e.name.toLowerCase().startsWith(n)?1:0)-i)+(t.name>e.name?1:-1)+(t.screen_name>e.screen_name?1:-1)}).map(function(t){var e=t.screen_name;return{displayText:e,detailText:t.name,imageUrl:t.profile_image_url_original,replacement:"@"+e+" "}});return t.updateUsersList&&o(t,n),i}}},,,,,,function(t,e,n){"use strict";var i=n(1),o=n.n(i),r=n(6),s=n.n(r),a=n(2);n(475);function c(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(t);e&&(i=i.filter(function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})),n.push.apply(n,i)}return n}e.a=s.a.component("tab-switcher",{name:"TabSwitcher",props:{renderOnlyFocused:{required:!1,type:Boolean,default:!1},onSwitch:{required:!1,type:Function,default:void 0},activeTab:{required:!1,type:String,default:void 0},scrollableTabs:{required:!1,type:Boolean,default:!1},sideTabBar:{required:!1,type:Boolean,default:!1}},data:function(){return{active:this.$slots.default.findIndex(function(t){return t.tag})}},computed:function(t){for(var e=1;e0){var i=t.pop();n.start+=i.end,n.end+=i.end,t.push(i)}return t.push(n),t},[])},h=function(t){for(var e=[],n="",i=0;ie})},addPositionToWords:f,splitByWhitespaceBoundary:h,replaceWord:function(t,e,n){return t.slice(0,e.start)+n+t.slice(e.end)}},g=n(54),v=function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"";return t.filter(function(t){return t.displayText.includes(e)})},b={props:{enableStickerPicker:{required:!1,type:Boolean,default:!1}},data:function(){return{keyword:"",activeGroup:"custom",showingStickers:!1,groupsScrolledClass:"scrolled-top",keepOpen:!1,customEmojiBufferSlice:60,customEmojiTimeout:null,customEmojiLoadAllConfirmed:!1}},components:{StickerPicker:function(){return n.e(4).then(n.bind(null,642))},Checkbox:g.a},methods:{onStickerUploaded:function(t){this.$emit("sticker-uploaded",t)},onStickerUploadFailed:function(t){this.$emit("sticker-upload-failed",t)},onEmoji:function(t){var e=t.imageUrl?":".concat(t.displayText,":"):t.replacement;this.$emit("emoji",{insertion:e,keepOpen:this.keepOpen})},onScroll:function(t){var e=t&&t.target||this.$refs["emoji-groups"];this.updateScrolledClass(e),this.scrolledGroup(e),this.triggerLoadMore(e)},highlight:function(t){var e=this,n=this.$refs["group-"+t][0].offsetTop;this.setShowStickers(!1),this.activeGroup=t,this.$nextTick(function(){e.$refs["emoji-groups"].scrollTop=n+1})},updateScrolledClass:function(t){t.scrollTop<=5?this.groupsScrolledClass="scrolled-top":t.scrollTop>=t.scrollTopMax-5?this.groupsScrolledClass="scrolled-bottom":this.groupsScrolledClass="scrolled-middle"},triggerLoadMore:function(t){var e=this.$refs["group-end-custom"][0];if(e){var n=e.offsetTop+e.offsetHeight,i=t.scrollTop+t.clientHeight,o=t.scrollTop,r=t.scrollHeight;n0&&void 0!==arguments[0]&&arguments[0];e||(this.keyword=""),this.$nextTick(function(){t.$refs["emoji-groups"].scrollTop=0}),this.customEmojiBuffer.length===this.filteredEmoji.length&&!e||(this.customEmojiBufferSlice=60)},toggleStickers:function(){this.showingStickers=!this.showingStickers},setShowStickers:function(t){this.showingStickers=t}},watch:{keyword:function(){this.customEmojiLoadAllConfirmed=!1,this.onScroll(),this.startEmojiLoad(!0)}},computed:{activeGroupView:function(){return this.showingStickers?"":this.activeGroup},stickersAvailable:function(){return this.$store.state.instance.stickers?this.$store.state.instance.stickers.length>0:0},filteredEmoji:function(){return v(this.$store.state.instance.customEmoji||[],this.keyword)},customEmojiBuffer:function(){return this.filteredEmoji.slice(0,this.customEmojiBufferSlice)},emojis:function(){var t=this.$store.state.instance.emoji||[],e=this.customEmojiBuffer;return[{id:"custom",text:this.$t("emoji.custom"),icon:"icon-smile",emojis:e},{id:"standard",text:this.$t("emoji.unicode"),icon:"icon-picture",emojis:v(t,this.keyword)}]},emojisView:function(){return this.emojis.filter(function(t){return t.emojis.length>0})},stickerPickerEnabled:function(){return 0!==(this.$store.state.instance.stickers||[]).length}}},w=n(0);var _=function(t){n(395)},x=Object(w.a)(b,function(){var t=this,e=t.$createElement,n=t._self._c||e;return n("div",{staticClass:"emoji-picker panel panel-default panel-body"},[n("div",{staticClass:"heading"},[n("span",{staticClass:"emoji-tabs"},t._l(t.emojis,function(e){return n("span",{key:e.id,staticClass:"emoji-tabs-item",class:{active:t.activeGroupView===e.id,disabled:0===e.emojis.length},attrs:{title:e.text},on:{click:function(n){return n.preventDefault(),t.highlight(e.id)}}},[n("i",{class:e.icon})])}),0),t._v(" "),t.stickerPickerEnabled?n("span",{staticClass:"additional-tabs"},[n("span",{staticClass:"stickers-tab-icon additional-tabs-item",class:{active:t.showingStickers},attrs:{title:t.$t("emoji.stickers")},on:{click:function(e){return e.preventDefault(),t.toggleStickers(e)}}},[n("i",{staticClass:"icon-star"})])]):t._e()]),t._v(" "),n("div",{staticClass:"content"},[n("div",{staticClass:"emoji-content",class:{hidden:t.showingStickers}},[n("div",{staticClass:"emoji-search"},[n("input",{directives:[{name:"model",rawName:"v-model",value:t.keyword,expression:"keyword"}],staticClass:"form-control",attrs:{type:"text",placeholder:t.$t("emoji.search_emoji")},domProps:{value:t.keyword},on:{input:function(e){e.target.composing||(t.keyword=e.target.value)}}})]),t._v(" "),n("div",{ref:"emoji-groups",staticClass:"emoji-groups",class:t.groupsScrolledClass,on:{scroll:t.onScroll}},t._l(t.emojisView,function(e){return n("div",{key:e.id,staticClass:"emoji-group"},[n("h6",{ref:"group-"+e.id,refInFor:!0,staticClass:"emoji-group-title"},[t._v("\n "+t._s(e.text)+"\n ")]),t._v(" "),t._l(e.emojis,function(i){return n("span",{key:e.id+i.displayText,staticClass:"emoji-item",attrs:{title:i.displayText},on:{click:function(e){return e.stopPropagation(),e.preventDefault(),t.onEmoji(i)}}},[i.imageUrl?n("img",{attrs:{src:i.imageUrl}}):n("span",[t._v(t._s(i.replacement))])])}),t._v(" "),n("span",{ref:"group-end-"+e.id,refInFor:!0})],2)}),0),t._v(" "),n("div",{staticClass:"keep-open"},[n("Checkbox",{model:{value:t.keepOpen,callback:function(e){t.keepOpen=e},expression:"keepOpen"}},[t._v("\n "+t._s(t.$t("emoji.keep_open"))+"\n ")])],1)]),t._v(" "),t.showingStickers?n("div",{staticClass:"stickers-content"},[n("sticker-picker",{on:{uploaded:t.onStickerUploaded,"upload-failed":t.onStickerUploadFailed}})],1):t._e()])])},[],!1,_,null,null).exports,y=n(107);function k(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(t);e&&(i=i.filter(function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})),n.push.apply(n,i)}return n}var C={props:{suggest:{required:!0,type:Function},value:{required:!0,type:String},enableEmojiPicker:{required:!1,type:Boolean,default:!1},hideEmojiButton:{required:!1,type:Boolean,default:!1},enableStickerPicker:{required:!1,type:Boolean,default:!1},placement:{required:!1,type:String,default:"auto"},newlineOnCtrlEnter:{required:!1,type:Boolean,default:!1}},data:function(){return{input:void 0,highlighted:0,caret:0,focused:!1,blurTimeout:null,showPicker:!1,temporarilyHideSuggestions:!1,keepOpen:!1,disableClickOutside:!1}},components:{EmojiPicker:x},computed:{padEmoji:function(){return this.$store.getters.mergedConfig.padEmoji},suggestions:function(){var t=this,e=this.textAtCaret.charAt(0);if(this.textAtCaret===e)return[];var n=this.suggest(this.textAtCaret);return n.length<=0?[]:c()(n,5).map(function(e,n){var i=e.imageUrl;return function(t){for(var e=1;e0&&!this.showPicker&&!this.temporarilyHideSuggestions},textAtCaret:function(){return(this.wordAtCaret||{}).word||""},wordAtCaret:function(){if(this.value&&this.caret)return m.wordAtPosition(this.value,this.caret-1)||{}}},mounted:function(){var t=this.$slots.default;if(t&&0!==t.length){var e=t.find(function(t){return["input","textarea"].includes(t.tag)});e&&(this.input=e,this.resize(),e.elm.addEventListener("blur",this.onBlur),e.elm.addEventListener("focus",this.onFocus),e.elm.addEventListener("paste",this.onPaste),e.elm.addEventListener("keyup",this.onKeyUp),e.elm.addEventListener("keydown",this.onKeyDown),e.elm.addEventListener("click",this.onClickInput),e.elm.addEventListener("transitionend",this.onTransition),e.elm.addEventListener("input",this.onInput))}},unmounted:function(){var t=this.input;t&&(t.elm.removeEventListener("blur",this.onBlur),t.elm.removeEventListener("focus",this.onFocus),t.elm.removeEventListener("paste",this.onPaste),t.elm.removeEventListener("keyup",this.onKeyUp),t.elm.removeEventListener("keydown",this.onKeyDown),t.elm.removeEventListener("click",this.onClickInput),t.elm.removeEventListener("transitionend",this.onTransition),t.elm.removeEventListener("input",this.onInput))},watch:{showSuggestions:function(t){this.$emit("shown",t)}},methods:{triggerShowPicker:function(){var t=this;this.showPicker=!0,this.$refs.picker.startEmojiLoad(),this.$nextTick(function(){t.scrollIntoView()}),this.disableClickOutside=!0,setTimeout(function(){t.disableClickOutside=!1},0)},togglePicker:function(){this.input.elm.focus(),this.showPicker=!this.showPicker,this.showPicker&&(this.scrollIntoView(),this.$refs.picker.startEmojiLoad())},replace:function(t){var e=m.replaceWord(this.value,this.wordAtCaret,t);this.$emit("input",e),this.caret=0},insert:function(t){var e=t.insertion,n=t.keepOpen,i=t.surroundingSpace,o=void 0===i||i,r=this.value.substring(0,this.caret)||"",s=this.value.substring(this.caret)||"",a=/\s/,c=o&&!a.exec(r.slice(-1))&&r.length&&this.padEmoji>0?" ":"",l=o&&!a.exec(s[0])&&this.padEmoji?" ":"",u=[r,c,e,l,s].join("");this.keepOpen=n,this.$emit("input",u);var d=this.caret+(e+l+c).length;n||this.input.elm.focus(),this.$nextTick(function(){this.input.elm.setSelectionRange(d,d),this.caret=d})},replaceText:function(t,e){var n=this.suggestions.length||0;if(1!==this.textAtCaret.length&&(n>0||e)){var i=(e||this.suggestions[this.highlighted]).replacement,o=m.replaceWord(this.value,this.wordAtCaret,i);this.$emit("input",o),this.highlighted=0;var r=this.wordAtCaret.start+i.length;this.$nextTick(function(){this.input.elm.focus(),this.input.elm.setSelectionRange(r,r),this.caret=r}),t.preventDefault()}},cycleBackward:function(t){(this.suggestions.length||0)>1?(this.highlighted-=1,this.highlighted<0&&(this.highlighted=this.suggestions.length-1),t.preventDefault()):this.highlighted=0},cycleForward:function(t){var e=this.suggestions.length||0;e>1?(this.highlighted+=1,this.highlighted>=e&&(this.highlighted=0),t.preventDefault()):this.highlighted=0},scrollIntoView:function(){var t=this,e=this.$refs.picker.$el,n=this.$el.closest(".sidebar-scroller")||this.$el.closest(".post-form-modal-view")||window,i=n===window?n.scrollY:n.scrollTop,o=i+(n===window?n.innerHeight:n.offsetHeight),r=e.offsetHeight+Object(y.a)(e,n).top,s=i+Math.max(0,r-o);n===window?n.scroll(0,s):n.scrollTop=s,this.$nextTick(function(){var e=t.input.elm.offsetHeight,n=t.$refs.picker;n.$el.getBoundingClientRect().bottom>window.innerHeight&&(n.$el.style.top="auto",n.$el.style.bottom=e+"px")})},onTransition:function(t){this.resize()},onBlur:function(t){var e=this;this.blurTimeout=setTimeout(function(){e.focused=!1,e.setCaret(t),e.resize()},200)},onClick:function(t,e){this.replaceText(t,e)},onFocus:function(t){this.blurTimeout&&(clearTimeout(this.blurTimeout),this.blurTimeout=null),this.keepOpen||(this.showPicker=!1),this.focused=!0,this.setCaret(t),this.resize(),this.temporarilyHideSuggestions=!1},onKeyUp:function(t){var e=t.key;this.setCaret(t),this.resize(),this.temporarilyHideSuggestions="Escape"===e},onPaste:function(t){this.setCaret(t),this.resize()},onKeyDown:function(t){var e=this,n=t.ctrlKey,i=t.shiftKey,o=t.key;this.newlineOnCtrlEnter&&n&&"Enter"===o&&(this.insert({insertion:"\n",surroundingSpace:!1}),t.stopPropagation(),t.preventDefault(),this.$nextTick(function(){e.input.elm.blur(),e.input.elm.focus()})),this.temporarilyHideSuggestions||("Tab"===o&&(i?this.cycleBackward(t):this.cycleForward(t)),"ArrowUp"===o?this.cycleBackward(t):"ArrowDown"===o&&this.cycleForward(t),"Enter"===o&&(n||this.replaceText(t))),"Escape"===o&&(this.temporarilyHideSuggestions||this.input.elm.focus()),this.showPicker=!1,this.resize()},onInput:function(t){this.showPicker=!1,this.setCaret(t),this.resize(),this.$emit("input",t.target.value)},onClickInput:function(t){this.showPicker=!1},onClickOutside:function(t){this.disableClickOutside||(this.showPicker=!1)},onStickerUploaded:function(t){this.showPicker=!1,this.$emit("sticker-uploaded",t)},onStickerUploadFailed:function(t){this.showPicker=!1,this.$emit("sticker-upload-Failed",t)},setCaret:function(t){var e=t.target.selectionStart;this.caret=e},resize:function(){var t=this.$refs.panel;if(t){var e=this.$refs.picker.$el,n=this.$refs["panel-body"],i=this.input.elm,o=i.offsetHeight,r=i.offsetTop+o;this.setPlacement(n,t,r),this.setPlacement(e,e,r)}},setPlacement:function(t,e,n){t&&e&&(e.style.top=n+"px",e.style.bottom="auto",("top"===this.placement||"auto"===this.placement&&this.overflowsBottom(t))&&(e.style.top="auto",e.style.bottom=this.input.elm.offsetHeight+"px"))},overflowsBottom:function(t){return t.getBoundingClientRect().bottom>window.innerHeight}}};var S=function(t){n(393)},j=Object(w.a)(C,function(){var t=this,e=t.$createElement,n=t._self._c||e;return n("div",{directives:[{name:"click-outside",rawName:"v-click-outside",value:t.onClickOutside,expression:"onClickOutside"}],staticClass:"emoji-input",class:{"with-picker":!t.hideEmojiButton}},[t._t("default"),t._v(" "),t.enableEmojiPicker?[t.hideEmojiButton?t._e():n("div",{staticClass:"emoji-picker-icon",on:{click:function(e){return e.preventDefault(),t.togglePicker(e)}}},[n("i",{staticClass:"icon-smile"})]),t._v(" "),t.enableEmojiPicker?n("EmojiPicker",{ref:"picker",staticClass:"emoji-picker-panel",class:{hide:!t.showPicker},attrs:{"enable-sticker-picker":t.enableStickerPicker},on:{emoji:t.insert,"sticker-uploaded":t.onStickerUploaded,"sticker-upload-failed":t.onStickerUploadFailed}}):t._e()]:t._e(),t._v(" "),n("div",{ref:"panel",staticClass:"autocomplete-panel",class:{hide:!t.showSuggestions}},[n("div",{ref:"panel-body",staticClass:"autocomplete-panel-body"},t._l(t.suggestions,function(e,i){return n("div",{key:i,staticClass:"autocomplete-item",class:{highlighted:e.highlighted},on:{click:function(n){return n.stopPropagation(),n.preventDefault(),t.onClick(n,e)}}},[n("span",{staticClass:"image"},[e.img?n("img",{attrs:{src:e.img}}):n("span",[t._v(t._s(e.replacement))])]),t._v(" "),n("div",{staticClass:"label"},[n("span",{staticClass:"displayText"},[t._v(t._s(e.displayText))]),t._v(" "),n("span",{staticClass:"detailText"},[t._v(t._s(e.detailText))])])])}),0)])],2)},[],!1,S,null,null);e.a=j.exports},function(t,e,n){"use strict";var i={props:["showAll","userDefault","originalScope","initialScope","onScopeChange"],data:function(){return{currentScope:this.initialScope}},computed:{showNothing:function(){return!(this.showPublic||this.showUnlisted||this.showPrivate||this.showDirect)},showPublic:function(){return"direct"!==this.originalScope&&this.shouldShow("public")},showUnlisted:function(){return"direct"!==this.originalScope&&this.shouldShow("unlisted")},showPrivate:function(){return"direct"!==this.originalScope&&this.shouldShow("private")},showDirect:function(){return this.shouldShow("direct")},css:function(){return{public:{selected:"public"===this.currentScope},unlisted:{selected:"unlisted"===this.currentScope},private:{selected:"private"===this.currentScope},direct:{selected:"direct"===this.currentScope}}}},methods:{shouldShow:function(t){return this.showAll||this.currentScope===t||this.originalScope===t||this.userDefault===t||"direct"===t},changeVis:function(t){this.currentScope=t,this.onScopeChange&&this.onScopeChange(t)}}},o=n(0);var r=function(t){n(391)},s=Object(o.a)(i,function(){var t=this,e=t.$createElement,n=t._self._c||e;return t.showNothing?t._e():n("div",{staticClass:"scope-selector"},[t.showDirect?n("i",{staticClass:"icon-mail-alt",class:t.css.direct,attrs:{title:t.$t("post_status.scope.direct")},on:{click:function(e){return t.changeVis("direct")}}}):t._e(),t._v(" "),t.showPrivate?n("i",{staticClass:"icon-lock",class:t.css.private,attrs:{title:t.$t("post_status.scope.private")},on:{click:function(e){return t.changeVis("private")}}}):t._e(),t._v(" "),t.showUnlisted?n("i",{staticClass:"icon-lock-open-alt",class:t.css.unlisted,attrs:{title:t.$t("post_status.scope.unlisted")},on:{click:function(e){return t.changeVis("unlisted")}}}):t._e(),t._v(" "),t.showPublic?n("i",{staticClass:"icon-globe",class:t.css.public,attrs:{title:t.$t("post_status.scope.public")},on:{click:function(e){return t.changeVis("public")}}}):t._e()])},[],!1,r,null,null);e.a=s.exports},,,,,,,,,,,,,,,,,,,,function(t,e,n){t.exports=n.p+"static/img/nsfw.74818f9.png"},,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,function(t){t.exports={about:{mrf:{federation:"Federation",keyword:{keyword_policies:"Keyword Policies",ftl_removal:'Removal from "The Whole Known Network" Timeline',reject:"Reject",replace:"Replace",is_replaced_by:"→"},mrf_policies:"Enabled MRF Policies",mrf_policies_desc:"MRF policies manipulate the federation behaviour of the instance. The following policies are enabled:",simple:{simple_policies:"Instance-specific Policies",accept:"Accept",accept_desc:"This instance only accepts messages from the following instances:",reject:"Reject",reject_desc:"This instance will not accept messages from the following instances:",quarantine:"Quarantine",quarantine_desc:"This instance will send only public posts to the following instances:",ftl_removal:'Removal from "The Whole Known Network" Timeline',ftl_removal_desc:'This instance removes these instances from "The Whole Known Network" timeline:',media_removal:"Media Removal",media_removal_desc:"This instance removes media from posts on the following instances:",media_nsfw:"Media Force-set As Sensitive",media_nsfw_desc:"This instance forces media to be set sensitive in posts on the following instances:"}},staff:"Staff"},shoutbox:{title:"Shoutbox"},domain_mute_card:{mute:"Mute",mute_progress:"Muting…",unmute:"Unmute",unmute_progress:"Unmuting…"},exporter:{export:"Export",processing:"Processing, you'll soon be asked to download your file"},features_panel:{chat:"Chat",pleroma_chat_messages:"Pleroma Chat",gopher:"Gopher",media_proxy:"Media proxy",scope_options:"Scope options",text_limit:"Text limit",title:"Features",who_to_follow:"Who to follow"},finder:{error_fetching_user:"Error fetching user",find_user:"Find user"},general:{apply:"Apply",submit:"Submit",more:"More",loading:"Loading…",generic_error:"An error occured",error_retry:"Please try again",retry:"Try again",optional:"optional",show_more:"Show more",show_less:"Show less",dismiss:"Dismiss",cancel:"Cancel",disable:"Disable",enable:"Enable",confirm:"Confirm",verify:"Verify",close:"Close",peek:"Peek"},image_cropper:{crop_picture:"Crop picture",save:"Save",save_without_cropping:"Save without cropping",cancel:"Cancel"},importer:{submit:"Submit",success:"Imported successfully.",error:"An error occured while importing this file."},login:{login:"Log in",description:"Log in with OAuth",logout:"Log out",password:"Password",placeholder:"e.g. lain",register:"Register",username:"Username",hint:"Log in to join the discussion",authentication_code:"Authentication code",enter_recovery_code:"Enter a recovery code",enter_two_factor_code:"Enter a two-factor code",recovery_code:"Recovery code",heading:{totp:"Two-factor authentication",recovery:"Two-factor recovery"}},media_modal:{previous:"Previous",next:"Next"},nav:{about:"About",administration:"Administration",back:"Back",chat:"Local Chat",friend_requests:"Follow Requests",mentions:"Mentions",interactions:"Interactions",dms:"Direct Messages",public_tl:"Public Timeline",timeline:"Timeline",twkn:"Known Network",bookmarks:"Bookmarks",user_search:"User Search",search:"Search",who_to_follow:"Who to follow",preferences:"Preferences",timelines:"Timelines",chats:"Chats"},notifications:{broken_favorite:"Unknown status, searching for it…",favorited_you:"favorited your status",followed_you:"followed you",follow_request:"wants to follow you",load_older:"Load older notifications",notifications:"Notifications",read:"Read!",repeated_you:"repeated your status",no_more_notifications:"No more notifications",migrated_to:"migrated to",reacted_with:"reacted with {0}"},polls:{add_poll:"Add Poll",add_option:"Add Option",option:"Option",votes:"votes",vote:"Vote",type:"Poll type",single_choice:"Single choice",multiple_choices:"Multiple choices",expiry:"Poll age",expires_in:"Poll ends in {0}",expired:"Poll ended {0} ago",not_enough_options:"Too few unique options in poll"},emoji:{stickers:"Stickers",emoji:"Emoji",keep_open:"Keep picker open",search_emoji:"Search for an emoji",add_emoji:"Insert emoji",custom:"Custom emoji",unicode:"Unicode emoji",load_all_hint:"Loaded first {saneAmount} emoji, loading all emoji may cause performance issues.",load_all:"Loading all {emojiAmount} emoji"},errors:{storage_unavailable:"Pleroma could not access browser storage. Your login or your local settings won't be saved and you might encounter unexpected issues. Try enabling cookies."},interactions:{favs_repeats:"Repeats and Favorites",follows:"New follows",moves:"User migrates",load_older:"Load older interactions"},post_status:{new_status:"Post new status",account_not_locked_warning:"Your account is not {0}. Anyone can follow you to view your follower-only posts.",account_not_locked_warning_link:"locked",attachments_sensitive:"Mark attachments as sensitive",media_description:"Media description",content_type:{"text/plain":"Plain text","text/html":"HTML","text/markdown":"Markdown","text/bbcode":"BBCode"},content_warning:"Subject (optional)",default:"Just landed in L.A.",direct_warning_to_all:"This post will be visible to all the mentioned users.",direct_warning_to_first_only:"This post will only be visible to the mentioned users at the beginning of the message.",posting:"Posting",preview:"Preview",preview_empty:"Empty",empty_status_error:"Can't post an empty status with no files",media_description_error:"Failed to update media, try again",scope_notice:{public:"This post will be visible to everyone",private:"This post will be visible to your followers only",unlisted:"This post will not be visible in Public Timeline and The Whole Known Network"},scope:{direct:"Direct - Post to mentioned users only",private:"Followers-only - Post to followers only",public:"Public - Post to public timelines",unlisted:"Unlisted - Do not post to public timelines"}},registration:{bio:"Bio",email:"Email",fullname:"Display name",password_confirm:"Password confirmation",registration:"Registration",token:"Invite token",captcha:"CAPTCHA",new_captcha:"Click the image to get a new captcha",username_placeholder:"e.g. lain",fullname_placeholder:"e.g. Lain Iwakura",bio_placeholder:"e.g.\nHi, I'm Lain.\nI’m an anime girl living in suburban Japan. You may know me from the Wired.",validations:{username_required:"cannot be left blank",fullname_required:"cannot be left blank",email_required:"cannot be left blank",password_required:"cannot be left blank",password_confirmation_required:"cannot be left blank",password_confirmation_match:"should be the same as password"}},remote_user_resolver:{remote_user_resolver:"Remote user resolver",searching_for:"Searching for",error:"Not found."},selectable_list:{select_all:"Select all"},settings:{app_name:"App name",security:"Security",enter_current_password_to_confirm:"Enter your current password to confirm your identity",mfa:{otp:"OTP",setup_otp:"Setup OTP",wait_pre_setup_otp:"presetting OTP",confirm_and_enable:"Confirm & enable OTP",title:"Two-factor Authentication",generate_new_recovery_codes:"Generate new recovery codes",warning_of_generate_new_codes:"When you generate new recovery codes, your old codes won’t work anymore.",recovery_codes:"Recovery codes.",waiting_a_recovery_codes:"Receiving backup codes…",recovery_codes_warning:"Write the codes down or save them somewhere secure - otherwise you won't see them again. If you lose access to your 2FA app and recovery codes you'll be locked out of your account.",authentication_methods:"Authentication methods",scan:{title:"Scan",desc:"Using your two-factor app, scan this QR code or enter text key:",secret_code:"Key"},verify:{desc:"To enable two-factor authentication, enter the code from your two-factor app:"}},allow_following_move:"Allow auto-follow when following account moves",attachmentRadius:"Attachments",attachments:"Attachments",avatar:"Avatar",avatarAltRadius:"Avatars (Notifications)",avatarRadius:"Avatars",background:"Background",bio:"Bio",block_export:"Block export",block_export_button:"Export your blocks to a csv file",block_import:"Block import",block_import_error:"Error importing blocks",blocks_imported:"Blocks imported! Processing them will take a while.",blocks_tab:"Blocks",bot:"This is a bot account",btnRadius:"Buttons",cBlue:"Blue (Reply, follow)",cGreen:"Green (Retweet)",cOrange:"Orange (Favorite)",cRed:"Red (Cancel)",change_email:"Change Email",change_email_error:"There was an issue changing your email.",changed_email:"Email changed successfully!",change_password:"Change Password",change_password_error:"There was an issue changing your password.",changed_password:"Password changed successfully!",chatMessageRadius:"Chat message",collapse_subject:"Collapse posts with subjects",composing:"Composing",confirm_new_password:"Confirm new password",current_password:"Current password",mutes_and_blocks:"Mutes and Blocks",data_import_export_tab:"Data Import / Export",default_vis:"Default visibility scope",delete_account:"Delete Account",delete_account_description:"Permanently delete your data and deactivate your account.",delete_account_error:"There was an issue deleting your account. If this persists please contact your instance administrator.",delete_account_instructions:"Type your password in the input below to confirm account deletion.",discoverable:"Allow discovery of this account in search results and other services",domain_mutes:"Domains",avatar_size_instruction:"The recommended minimum size for avatar images is 150x150 pixels.",pad_emoji:"Pad emoji with spaces when adding from picker",emoji_reactions_on_timeline:"Show emoji reactions on timeline",export_theme:"Save preset",filtering:"Filtering",filtering_explanation:"All statuses containing these words will be muted, one per line",follow_export:"Follow export",follow_export_button:"Export your follows to a csv file",follow_import:"Follow import",follow_import_error:"Error importing followers",follows_imported:"Follows imported! Processing them will take a while.",accent:"Accent",foreground:"Foreground",general:"General",hide_attachments_in_convo:"Hide attachments in conversations",hide_attachments_in_tl:"Hide attachments in timeline",hide_muted_posts:"Hide posts of muted users",max_thumbnails:"Maximum amount of thumbnails per post",hide_isp:"Hide instance-specific panel",preload_images:"Preload images",use_one_click_nsfw:"Open NSFW attachments with just one click",hide_post_stats:"Hide post statistics (e.g. the number of favorites)",hide_user_stats:"Hide user statistics (e.g. the number of followers)",hide_filtered_statuses:"Hide filtered statuses",import_blocks_from_a_csv_file:"Import blocks from a csv file",import_followers_from_a_csv_file:"Import follows from a csv file",import_theme:"Load preset",inputRadius:"Input fields",checkboxRadius:"Checkboxes",instance_default:"(default: {value})",instance_default_simple:"(default)",interface:"Interface",interfaceLanguage:"Interface language",invalid_theme_imported:"The selected file is not a supported Pleroma theme. No changes to your theme were made.",limited_availability:"Unavailable in your browser",links:"Links",lock_account_description:"Restrict your account to approved followers only",loop_video:"Loop videos",loop_video_silent_only:'Loop only videos without sound (i.e. Mastodon\'s "gifs")',mutes_tab:"Mutes",play_videos_in_modal:"Play videos in a popup frame",profile_fields:{label:"Profile metadata",add_field:"Add Field",name:"Label",value:"Content"},use_contain_fit:"Don't crop the attachment in thumbnails",name:"Name",name_bio:"Name & Bio",new_email:"New Email",new_password:"New password",notification_visibility:"Types of notifications to show",notification_visibility_follows:"Follows",notification_visibility_likes:"Likes",notification_visibility_mentions:"Mentions",notification_visibility_repeats:"Repeats",notification_visibility_moves:"User Migrates",notification_visibility_emoji_reactions:"Reactions",no_rich_text_description:"Strip rich text formatting from all posts",no_blocks:"No blocks",no_mutes:"No mutes",hide_follows_description:"Don't show who I'm following",hide_followers_description:"Don't show who's following me",hide_follows_count_description:"Don't show follow count",hide_followers_count_description:"Don't show follower count",show_admin_badge:"Show Admin badge in my profile",show_moderator_badge:"Show Moderator badge in my profile",nsfw_clickthrough:"Enable clickthrough NSFW attachment hiding",oauth_tokens:"OAuth tokens",token:"Token",refresh_token:"Refresh Token",valid_until:"Valid Until",revoke_token:"Revoke",panelRadius:"Panels",pause_on_unfocused:"Pause streaming when tab is not focused",presets:"Presets",profile_background:"Profile Background",profile_banner:"Profile Banner",profile_tab:"Profile",radii_help:"Set up interface edge rounding (in pixels)",replies_in_timeline:"Replies in timeline",reply_visibility_all:"Show all replies",reply_visibility_following:"Only show replies directed at me or users I'm following",reply_visibility_self:"Only show replies directed at me",autohide_floating_post_button:"Automatically hide New Post button (mobile)",saving_err:"Error saving settings",saving_ok:"Settings saved",search_user_to_block:"Search whom you want to block",search_user_to_mute:"Search whom you want to mute",security_tab:"Security",scope_copy:"Copy scope when replying (DMs are always copied)",minimal_scopes_mode:"Minimize post scope selection options",set_new_avatar:"Set new avatar",set_new_profile_background:"Set new profile background",set_new_profile_banner:"Set new profile banner",reset_avatar:"Reset avatar",reset_profile_background:"Reset profile background",reset_profile_banner:"Reset profile banner",reset_avatar_confirm:"Do you really want to reset the avatar?",reset_banner_confirm:"Do you really want to reset the banner?",reset_background_confirm:"Do you really want to reset the background?",settings:"Settings",subject_input_always_show:"Always show subject field",subject_line_behavior:"Copy subject when replying",subject_line_email:'Like email: "re: subject"',subject_line_mastodon:"Like mastodon: copy as is",subject_line_noop:"Do not copy",post_status_content_type:"Post status content type",stop_gifs:"Play-on-hover GIFs",streaming:"Enable automatic streaming of new posts when scrolled to the top",user_mutes:"Users",useStreamingApi:"Receive posts and notifications real-time",useStreamingApiWarning:"(Not recommended, experimental, known to skip posts)",text:"Text",theme:"Theme",theme_help:"Use hex color codes (#rrggbb) to customize your color theme.",theme_help_v2_1:'You can also override certain component\'s colors and opacity by toggling the checkbox, use "Clear all" button to clear all overrides.',theme_help_v2_2:"Icons underneath some entries are background/text contrast indicators, hover over for detailed info. Please keep in mind that when using transparency contrast indicators show the worst possible case.",tooltipRadius:"Tooltips/alerts",type_domains_to_mute:"Search domains to mute",upload_a_photo:"Upload a photo",user_settings:"User Settings",values:{false:"no",true:"yes"},fun:"Fun",greentext:"Meme arrows",notifications:"Notifications",notification_setting_filters:"Filters",notification_setting_block_from_strangers:"Block notifications from users who you do not follow",notification_setting_privacy:"Privacy",notification_setting_hide_notification_contents:"Hide the sender and contents of push notifications",notification_mutes:"To stop receiving notifications from a specific user, use a mute.",notification_blocks:"Blocking a user stops all notifications as well as unsubscribes them.",enable_web_push_notifications:"Enable web push notifications",style:{switcher:{keep_color:"Keep colors",keep_shadows:"Keep shadows",keep_opacity:"Keep opacity",keep_roundness:"Keep roundness",keep_fonts:"Keep fonts",save_load_hint:'"Keep" options preserve currently set options when selecting or loading themes, it also stores said options when exporting a theme. When all checkboxes unset, exporting theme will save everything.',reset:"Reset",clear_all:"Clear all",clear_opacity:"Clear opacity",load_theme:"Load theme",keep_as_is:"Keep as is",use_snapshot:"Old version",use_source:"New version",help:{upgraded_from_v2:"PleromaFE has been upgraded, theme could look a little bit different than you remember.",v2_imported:"File you imported was made for older FE. We try to maximize compatibility but there still could be inconsistencies.",future_version_imported:"File you imported was made in newer version of FE.",older_version_imported:"File you imported was made in older version of FE.",snapshot_present:"Theme snapshot is loaded, so all values are overriden. You can load theme's actual data instead.",snapshot_missing:"No theme snapshot was in the file so it could look different than originally envisioned.",fe_upgraded:"PleromaFE's theme engine upgraded after version update.",fe_downgraded:"PleromaFE's version rolled back.",migration_snapshot_ok:"Just to be safe, theme snapshot loaded. You can try loading theme data.",migration_napshot_gone:"For whatever reason snapshot was missing, some stuff could look different than you remember.",snapshot_source_mismatch:"Versions conflict: most likely FE was rolled back and updated again, if you changed theme using older version of FE you most likely want to use old version, otherwise use new version."}},common:{color:"Color",opacity:"Opacity",contrast:{hint:"Contrast ratio is {ratio}, it {level} {context}",level:{aa:"meets Level AA guideline (minimal)",aaa:"meets Level AAA guideline (recommended)",bad:"doesn't meet any accessibility guidelines"},context:{"18pt":"for large (18pt+) text",text:"for text"}}},common_colors:{_tab_label:"Common",main:"Common colors",foreground_hint:'See "Advanced" tab for more detailed control',rgbo:"Icons, accents, badges"},advanced_colors:{_tab_label:"Advanced",alert:"Alert background",alert_error:"Error",alert_warning:"Warning",alert_neutral:"Neutral",post:"Posts/User bios",badge:"Badge background",popover:"Tooltips, menus, popovers",badge_notification:"Notification",panel_header:"Panel header",top_bar:"Top bar",borders:"Borders",buttons:"Buttons",inputs:"Input fields",faint_text:"Faded text",underlay:"Underlay",poll:"Poll graph",icons:"Icons",highlight:"Highlighted elements",pressed:"Pressed",selectedPost:"Selected post",selectedMenu:"Selected menu item",disabled:"Disabled",toggled:"Toggled",tabs:"Tabs",chat:{incoming:"Incoming",outgoing:"Outgoing",border:"Border"}},radii:{_tab_label:"Roundness"},shadows:{_tab_label:"Shadow and lighting",component:"Component",override:"Override",shadow_id:"Shadow #{value}",blur:"Blur",spread:"Spread",inset:"Inset",hintV3:"For shadows you can also use the {0} notation to use other color slot.",filter_hint:{always_drop_shadow:"Warning, this shadow always uses {0} when browser supports it.",drop_shadow_syntax:"{0} does not support {1} parameter and {2} keyword.",avatar_inset:"Please note that combining both inset and non-inset shadows on avatars might give unexpected results with transparent avatars.",spread_zero:"Shadows with spread > 0 will appear as if it was set to zero",inset_classic:"Inset shadows will be using {0}"},components:{panel:"Panel",panelHeader:"Panel header",topBar:"Top bar",avatar:"User avatar (in profile view)",avatarStatus:"User avatar (in post display)",popup:"Popups and tooltips",button:"Button",buttonHover:"Button (hover)",buttonPressed:"Button (pressed)",buttonPressedHover:"Button (pressed+hover)",input:"Input field"}},fonts:{_tab_label:"Fonts",help:'Select font to use for elements of UI. For "custom" you have to enter exact font name as it appears in system.',components:{interface:"Interface",input:"Input fields",post:"Post text",postCode:"Monospaced text in a post (rich text)"},family:"Font name",size:"Size (in px)",weight:"Weight (boldness)",custom:"Custom"},preview:{header:"Preview",content:"Content",error:"Example error",button:"Button",text:"A bunch of more {0} and {1}",mono:"content",input:"Just landed in L.A.",faint_link:"helpful manual",fine_print:"Read our {0} to learn nothing useful!",header_faint:"This is fine",checkbox:"I have skimmed over terms and conditions",link:"a nice lil' link"}},version:{title:"Version",backend_version:"Backend Version",frontend_version:"Frontend Version"}},time:{day:"{0} day",days:"{0} days",day_short:"{0}d",days_short:"{0}d",hour:"{0} hour",hours:"{0} hours",hour_short:"{0}h",hours_short:"{0}h",in_future:"in {0}",in_past:"{0} ago",minute:"{0} minute",minutes:"{0} minutes",minute_short:"{0}min",minutes_short:"{0}min",month:"{0} month",months:"{0} months",month_short:"{0}mo",months_short:"{0}mo",now:"just now",now_short:"now",second:"{0} second",seconds:"{0} seconds",second_short:"{0}s",seconds_short:"{0}s",week:"{0} week",weeks:"{0} weeks",week_short:"{0}w",weeks_short:"{0}w",year:"{0} year",years:"{0} years",year_short:"{0}y",years_short:"{0}y"},timeline:{collapse:"Collapse",conversation:"Conversation",error_fetching:"Error fetching updates",load_older:"Load older statuses",no_retweet_hint:"Post is marked as followers-only or direct and cannot be repeated",repeated:"repeated",show_new:"Show new",reload:"Reload",up_to_date:"Up-to-date",no_more_statuses:"No more statuses",no_statuses:"No statuses"},status:{favorites:"Favorites",repeats:"Repeats",delete:"Delete status",pin:"Pin on profile",unpin:"Unpin from profile",pinned:"Pinned",bookmark:"Bookmark",unbookmark:"Unbookmark",delete_confirm:"Do you really want to delete this status?",reply_to:"Reply to",replies_list:"Replies:",mute_conversation:"Mute conversation",unmute_conversation:"Unmute conversation",status_unavailable:"Status unavailable",copy_link:"Copy link to status",thread_muted:"Thread muted",thread_muted_and_words:", has words:",show_full_subject:"Show full subject",hide_full_subject:"Hide full subject",show_content:"Show content",hide_content:"Hide content"},user_card:{approve:"Approve",block:"Block",blocked:"Blocked!",deny:"Deny",favorites:"Favorites",follow:"Follow",follow_sent:"Request sent!",follow_progress:"Requesting…",follow_again:"Send request again?",follow_unfollow:"Unfollow",followees:"Following",followers:"Followers",following:"Following!",follows_you:"Follows you!",hidden:"Hidden",its_you:"It's you!",media:"Media",mention:"Mention",message:"Message",mute:"Mute",muted:"Muted",per_day:"per day",remote_follow:"Remote follow",report:"Report",statuses:"Statuses",subscribe:"Subscribe",unsubscribe:"Unsubscribe",unblock:"Unblock",unblock_progress:"Unblocking…",block_progress:"Blocking…",unmute:"Unmute",unmute_progress:"Unmuting…",mute_progress:"Muting…",hide_repeats:"Hide repeats",show_repeats:"Show repeats",admin_menu:{moderation:"Moderation",grant_admin:"Grant Admin",revoke_admin:"Revoke Admin",grant_moderator:"Grant Moderator",revoke_moderator:"Revoke Moderator",activate_account:"Activate account",deactivate_account:"Deactivate account",delete_account:"Delete account",force_nsfw:"Mark all posts as NSFW",strip_media:"Remove media from posts",force_unlisted:"Force posts to be unlisted",sandbox:"Force posts to be followers-only",disable_remote_subscription:"Disallow following user from remote instances",disable_any_subscription:"Disallow following user at all",quarantine:"Disallow user posts from federating",delete_user:"Delete user",delete_user_confirmation:"Are you absolutely sure? This action cannot be undone."}},user_profile:{timeline_title:"User Timeline",profile_does_not_exist:"Sorry, this profile does not exist.",profile_loading_error:"Sorry, there was an error loading this profile."},user_reporting:{title:"Reporting {0}",add_comment_description:"The report will be sent to your instance moderators. You can provide an explanation of why you are reporting this account below:",additional_comments:"Additional comments",forward_description:"The account is from another server. Send a copy of the report there as well?",forward_to:"Forward to {0}",submit:"Submit",generic_error:"An error occurred while processing your request."},who_to_follow:{more:"More",who_to_follow:"Who to follow"},tool_tip:{media_upload:"Upload Media",repeat:"Repeat",reply:"Reply",favorite:"Favorite",add_reaction:"Add Reaction",user_settings:"User Settings",accept_follow_request:"Accept follow request",reject_follow_request:"Reject follow request",bookmark:"Bookmark"},upload:{error:{base:"Upload failed.",file_too_big:"File too big [{filesize}{filesizeunit} / {allowedsize}{allowedsizeunit}]",default:"Try again later"},file_size_units:{B:"B",KiB:"KiB",MiB:"MiB",GiB:"GiB",TiB:"TiB"}},search:{people:"People",hashtags:"Hashtags",person_talking:"{count} person talking",people_talking:"{count} people talking",no_results:"No results"},password_reset:{forgot_password:"Forgot password?",password_reset:"Password reset",instruction:"Enter your email address or username. We will send you a link to reset your password.",placeholder:"Your email or username",check_email:"Check your email for a link to reset your password.",return_home:"Return to the home page",too_many_requests:"You have reached the limit of attempts, try again later.",password_reset_disabled:"Password reset is disabled. Please contact your instance administrator.",password_reset_required:"You must reset your password to log in.",password_reset_required_but_mailer_is_disabled:"You must reset your password, but password reset is disabled. Please contact your instance administrator."},chats:{you:"You:",message_user:"Message {nickname}",delete:"Delete",chats:"Chats",new:"New Chat",empty_message_error:"Cannot post empty message",more:"More",delete_confirm:"Do you really want to delete this message?",error_loading_chat:"Something went wrong when loading the chat.",error_sending_message:"Something went wrong when sending the message.",empty_chat_list_placeholder:"You don't have any chats yet. Start a new chat!"},file_type:{audio:"Audio",video:"Video",image:"Image",file:"File"},display_date:{today:"Today"}}},,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,function(t,e,n){var i=n(369);"string"==typeof i&&(i=[[t.i,i,""]]),i.locals&&(t.exports=i.locals);(0,n(5).default)("0084eb3d",i,!0,{})},function(t,e,n){(t.exports=n(4)(!1)).push([t.i,".timeline .loadmore-text{opacity:1}.timeline-heading{max-width:100%;-ms-flex-wrap:nowrap;flex-wrap:nowrap}.timeline-heading .loadmore-button,.timeline-heading .loadmore-text{-ms-flex-negative:0;flex-shrink:0}.timeline-heading .loadmore-text{line-height:1em}",""])},,,,,function(t,e,n){var i=n(375);"string"==typeof i&&(i=[[t.i,i,""]]),i.locals&&(t.exports=i.locals);(0,n(5).default)("80571546",i,!0,{})},function(t,e,n){(t.exports=n(4)(!1)).push([t.i,'.Status{min-width:0}.Status:hover{--still-image-img:visible;--still-image-canvas:hidden}.Status.-focused{background-color:#151e2a;background-color:var(--selectedPost,#151e2a);color:#b9b9ba;color:var(--selectedPostText,#b9b9ba);--lightText:var(--selectedPostLightText,$fallback--light);--faint:var(--selectedPostFaintText,$fallback--faint);--faintLink:var(--selectedPostFaintLink,$fallback--faint);--postLink:var(--selectedPostPostLink,$fallback--faint);--postFaintLink:var(--selectedPostFaintPostLink,$fallback--faint);--icon:var(--selectedPostIcon,$fallback--icon)}.Status .status-container{display:-ms-flexbox;display:flex;padding:.75em}.Status .status-container.-repeat{padding-top:0}.Status .pin{padding:.75em .75em 0;display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;-ms-flex-pack:end;justify-content:flex-end}.Status .left-side{margin-right:.75em}.Status .right-side{-ms-flex:1;flex:1;min-width:0}.Status .usercard{margin-bottom:.75em}.Status .status-username{white-space:nowrap;font-size:14px;overflow:hidden;max-width:85%;font-weight:700;-ms-flex-negative:1;flex-shrink:1;margin-right:.4em;text-overflow:ellipsis}.Status .status-username .emoji{width:14px;height:14px;vertical-align:middle;-o-object-fit:contain;object-fit:contain}.Status .status-favicon{height:18px;width:18px;margin-right:.4em}.Status .status-heading{margin-bottom:.5em}.Status .heading-name-row{display:-ms-flexbox;display:flex;-ms-flex-pack:justify;justify-content:space-between;line-height:18px}.Status .heading-name-row a{display:inline-block;word-break:break-all}.Status .account-name{min-width:1.6em;margin-right:.4em;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;-ms-flex:1 1 0px;flex:1 1 0}.Status .heading-left{display:-ms-flexbox;display:flex;min-width:0}.Status .heading-right{display:-ms-flexbox;display:flex;-ms-flex-negative:0;flex-shrink:0}.Status .timeago{margin-right:.2em}.Status .heading-reply-row{position:relative;-ms-flex-line-pack:baseline;align-content:baseline;font-size:12px;line-height:18px;max-width:100%;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-ms-flex-align:stretch;align-items:stretch}.Status .reply-to-and-accountname{display:-ms-flexbox;display:flex;height:18px;margin-right:.5em;max-width:100%}.Status .reply-to-and-accountname .reply-to-link{white-space:nowrap;word-break:break-word;text-overflow:ellipsis;overflow-x:hidden}.Status .reply-to-and-accountname .icon-reply{transform:scaleX(-1)}.Status .reply-to-no-popover,.Status .reply-to-popover{min-width:0;margin-right:.4em;-ms-flex-negative:0;flex-shrink:0}.Status .reply-to-popover .reply-to:hover:before{content:"";display:block;position:absolute;bottom:0;width:100%;border-bottom:1px solid var(--faint);pointer-events:none}.Status .reply-to-popover .faint-link:hover{text-decoration:none}.Status .reply-to-popover.-strikethrough .reply-to:after{content:"";display:block;position:absolute;top:50%;width:100%;border-bottom:1px solid var(--faint);pointer-events:none}.Status .reply-to{display:-ms-flexbox;display:flex;position:relative}.Status .reply-to-text{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;margin-left:.2em}.Status .replies-separator{margin-left:.4em}.Status .replies{line-height:18px;font-size:12px;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap}.Status .replies>*{margin-right:.4em}.Status .reply-link{height:17px}.Status .repeat-info{padding:.4em .75em;line-height:22px}.Status .repeat-info .right-side{display:-ms-flexbox;display:flex;-ms-flex-line-pack:center;align-content:center;-ms-flex-wrap:wrap;flex-wrap:wrap}.Status .repeat-info i{padding:0 .2em}.Status .repeater-avatar{border-radius:var(--avatarAltRadius,10px);margin-left:28px;width:20px;height:20px}.Status .repeater-name{text-overflow:ellipsis;margin-right:0}.Status .repeater-name .emoji{width:14px;height:14px;vertical-align:middle;-o-object-fit:contain;object-fit:contain}.Status .status-fadein{animation-duration:.4s;animation-name:fadein}@keyframes fadein{0%{opacity:0}to{opacity:1}}.Status .status-actions{position:relative;width:100%;display:-ms-flexbox;display:flex;margin-top:.75em}.Status .status-actions>*{max-width:4em;-ms-flex:1;flex:1}.Status .button-reply:not(.-disabled){cursor:pointer}.Status .button-reply.-active,.Status .button-reply:not(.-disabled):hover{color:#0095ff;color:var(--cBlue,#0095ff)}.Status .muted{padding:.25em .6em;height:1.2em;line-height:1.2em;text-overflow:ellipsis;overflow:hidden;display:-ms-flexbox;display:flex;-ms-flex-wrap:nowrap;flex-wrap:nowrap}.Status .muted .mute-thread,.Status .muted .mute-words,.Status .muted .status-username{word-wrap:normal;word-break:normal;white-space:nowrap}.Status .muted .mute-words,.Status .muted .status-username{text-overflow:ellipsis;overflow:hidden}.Status .muted .status-username{font-weight:400;-ms-flex:0 1 auto;flex:0 1 auto;margin-right:.2em;font-size:smaller}.Status .muted .mute-thread{-ms-flex:0 0 auto;flex:0 0 auto}.Status .muted .mute-words{-ms-flex:1 0 5em;flex:1 0 5em;margin-left:.2em}.Status .muted .mute-words:before{content:" "}.Status .muted .unmute{-ms-flex:0 0 auto;flex:0 0 auto;margin-left:auto;display:block}.Status .reply-form{padding-top:0;padding-bottom:0}.Status .reply-body{-ms-flex:1;flex:1}.Status .favs-repeated-users{margin-top:.75em}.Status .stats{width:100%;display:-ms-flexbox;display:flex;line-height:1em}.Status .avatar-row{-ms-flex:1;flex:1;overflow:hidden;position:relative;display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center}.Status .avatar-row:before{content:"";position:absolute;height:100%;width:1px;left:0;background-color:var(--faint,hsla(240,1%,73%,.5))}.Status .stat-count{margin-right:.75em;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.Status .stat-count .stat-title{color:var(--faint,hsla(240,1%,73%,.5));font-size:12px;text-transform:uppercase;position:relative}.Status .stat-count .stat-number{font-weight:bolder;font-size:16px;line-height:1em}.Status .stat-count:hover .stat-title{text-decoration:underline}@media (max-width:800px){.Status .repeater-avatar{margin-left:20px}.Status .avatar:not(.repeater-avatar){width:40px;height:40px}.Status .avatar:not(.repeater-avatar).avatar-compact{width:32px;height:32px}}',""])},,function(t,e,n){var i=n(378);"string"==typeof i&&(i=[[t.i,i,""]]),i.locals&&(t.exports=i.locals);(0,n(5).default)("7d4fb47f",i,!0,{})},function(t,e,n){(t.exports=n(4)(!1)).push([t.i,".fav-active{cursor:pointer;animation-duration:.6s}.fav-active:hover,.favorite-button.icon-star{color:orange;color:var(--cOrange,orange)}",""])},function(t,e,n){var i=n(380);"string"==typeof i&&(i=[[t.i,i,""]]),i.locals&&(t.exports=i.locals);(0,n(5).default)("b98558e8",i,!0,{})},function(t,e,n){(t.exports=n(4)(!1)).push([t.i,".reaction-picker-filter{padding:.5em;display:-ms-flexbox;display:flex}.reaction-picker-filter input{-ms-flex:1;flex:1}.reaction-picker-divider{height:1px;width:100%;margin:.5em;background-color:var(--border,#222)}.reaction-picker{width:10em;height:9em;font-size:1.5em;overflow-y:scroll;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;padding:.5em;text-align:center;-ms-flex-line-pack:start;align-content:flex-start;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-webkit-mask:linear-gradient(0deg,#fff 0,transparent) bottom no-repeat,linear-gradient(180deg,#fff 0,transparent) top no-repeat,linear-gradient(0deg,#fff,#fff);mask:linear-gradient(0deg,#fff 0,transparent) bottom no-repeat,linear-gradient(180deg,#fff 0,transparent) top no-repeat,linear-gradient(0deg,#fff,#fff);transition:-webkit-mask-size .15s;transition:mask-size .15s;transition:mask-size .15s,-webkit-mask-size .15s;-webkit-mask-size:100% 20px,100% 20px,auto;mask-size:100% 20px,100% 20px,auto;-webkit-mask-composite:xor;mask-composite:exclude}.reaction-picker .emoji-button{cursor:pointer;-ms-flex-preferred-size:20%;flex-basis:20%;line-height:1.5em;-ms-flex-line-pack:center;align-content:center}.reaction-picker .emoji-button:hover{transform:scale(1.25)}.add-reaction-button{cursor:pointer}.add-reaction-button:hover{color:#b9b9ba;color:var(--text,#b9b9ba)}",""])},function(t,e,n){var i=n(382);"string"==typeof i&&(i=[[t.i,i,""]]),i.locals&&(t.exports=i.locals);(0,n(5).default)("92bf6e22",i,!0,{})},function(t,e,n){(t.exports=n(4)(!1)).push([t.i,".popover{z-index:8;position:absolute;min-width:0}.popover-default{transition:opacity .3s;box-shadow:1px 1px 4px rgba(0,0,0,.6);box-shadow:var(--panelShadow);border-radius:4px;border-radius:var(--btnRadius,4px);background-color:#121a24;background-color:var(--popover,#121a24);color:#b9b9ba;color:var(--popoverText,#b9b9ba);--faint:var(--popoverFaintText,$fallback--faint);--faintLink:var(--popoverFaintLink,$fallback--faint);--lightText:var(--popoverLightText,$fallback--lightText);--postLink:var(--popoverPostLink,$fallback--link);--postFaintLink:var(--popoverPostFaintLink,$fallback--link);--icon:var(--popoverIcon,$fallback--icon)}.dropdown-menu{display:block;padding:.5rem 0;font-size:1rem;text-align:left;list-style:none;max-width:100vw;z-index:10;white-space:nowrap}.dropdown-menu .dropdown-divider{height:0;margin:.5rem 0;overflow:hidden;border-top:1px solid #222;border-top:1px solid var(--border,#222)}.dropdown-menu .dropdown-item{line-height:21px;margin-right:5px;overflow:auto;display:block;padding:.25rem 1rem .25rem 1.5rem;clear:both;font-weight:400;text-align:inherit;white-space:nowrap;border:none;border-radius:0;background-color:transparent;box-shadow:none;width:100%;height:100%;--btnText:var(--popoverText,$fallback--text)}.dropdown-menu .dropdown-item-icon{padding-left:.5rem}.dropdown-menu .dropdown-item-icon i{margin-right:.25rem;color:var(--menuPopoverIcon,#666)}.dropdown-menu .dropdown-item:active,.dropdown-menu .dropdown-item:hover{background-color:#151e2a;background-color:var(--selectedMenuPopover,#151e2a);color:#d8a070;color:var(--selectedMenuPopoverText,#d8a070);--faint:var(--selectedMenuPopoverFaintText,$fallback--faint);--faintLink:var(--selectedMenuPopoverFaintLink,$fallback--faint);--lightText:var(--selectedMenuPopoverLightText,$fallback--lightText);--icon:var(--selectedMenuPopoverIcon,$fallback--icon)}.dropdown-menu .dropdown-item:active i,.dropdown-menu .dropdown-item:hover i{color:var(--selectedMenuPopoverIcon,#666)}",""])},function(t,e,n){var i=n(384);"string"==typeof i&&(i=[[t.i,i,""]]),i.locals&&(t.exports=i.locals);(0,n(5).default)("2c52cbcb",i,!0,{})},function(t,e,n){(t.exports=n(4)(!1)).push([t.i,".rt-active{cursor:pointer;animation-duration:.6s}.icon-retweet.retweeted,.rt-active:hover{color:#0fa00f;color:var(--cGreen,#0fa00f)}",""])},function(t,e,n){var i=n(386);"string"==typeof i&&(i=[[t.i,i,""]]),i.locals&&(t.exports=i.locals);(0,n(5).default)("0d2c533c",i,!0,{})},function(t,e,n){(t.exports=n(4)(!1)).push([t.i,".icon-ellipsis{cursor:pointer}.extra-button-popover.open .icon-ellipsis,.icon-ellipsis:hover{color:#b9b9ba;color:var(--text,#b9b9ba)}",""])},function(t,e,n){var i=n(388);"string"==typeof i&&(i=[[t.i,i,""]]),i.locals&&(t.exports=i.locals);(0,n(5).default)("ce7966a8",i,!0,{})},function(t,e,n){(t.exports=n(4)(!1)).push([t.i,".tribute-container ul{padding:0}.tribute-container ul li{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center}.tribute-container img{padding:3px;width:16px;height:16px;border-radius:10px;border-radius:var(--avatarAltRadius,10px)}.post-status-form{position:relative}.post-status-form .form-bottom{display:-ms-flexbox;display:flex;-ms-flex-pack:justify;justify-content:space-between;padding:.5em;height:32px}.post-status-form .form-bottom button{width:10em}.post-status-form .form-bottom p{margin:.35em;padding:.35em;display:-ms-flexbox;display:flex}.post-status-form .form-bottom-left{display:-ms-flexbox;display:flex;-ms-flex:1;flex:1;padding-right:7px;margin-right:7px;max-width:10em}.post-status-form .preview-heading{padding-left:.5em;display:-ms-flexbox;display:flex;width:100%}.post-status-form .preview-heading .icon-spin3{margin-left:auto}.post-status-form .preview-toggle{display:-ms-flexbox;display:flex;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.post-status-form .preview-toggle:hover{text-decoration:underline}.post-status-form .preview-toggle i{margin-left:.2em;font-size:.8em;transform:rotate(90deg)}.post-status-form .preview-container{margin-bottom:1em}.post-status-form .preview-error{font-style:italic;color:hsla(240,1%,73%,.5);color:var(--faint,hsla(240,1%,73%,.5))}.post-status-form .preview-status{border:1px solid #222;border:1px solid var(--border,#222);border-radius:5px;border-radius:var(--tooltipRadius,5px);padding:.5em;margin:0;line-height:1.4em}.post-status-form .text-format .only-format{color:hsla(240,1%,73%,.5);color:var(--faint,hsla(240,1%,73%,.5))}.post-status-form .visibility-tray{display:-ms-flexbox;display:flex;-ms-flex-pack:justify;justify-content:space-between;padding-top:5px}.post-status-form .emoji-icon,.post-status-form .media-upload-icon,.post-status-form .poll-icon{font-size:26px;-ms-flex:1;flex:1}.post-status-form .emoji-icon.selected i,.post-status-form .emoji-icon.selected label,.post-status-form .emoji-icon:hover i,.post-status-form .emoji-icon:hover label,.post-status-form .media-upload-icon.selected i,.post-status-form .media-upload-icon.selected label,.post-status-form .media-upload-icon:hover i,.post-status-form .media-upload-icon:hover label,.post-status-form .poll-icon.selected i,.post-status-form .poll-icon.selected label,.post-status-form .poll-icon:hover i,.post-status-form .poll-icon:hover label{color:#b9b9ba;color:var(--lightText,#b9b9ba)}.post-status-form .emoji-icon.disabled i,.post-status-form .media-upload-icon.disabled i,.post-status-form .poll-icon.disabled i{cursor:not-allowed;color:#666;color:var(--btnDisabledText,#666)}.post-status-form .emoji-icon.disabled i:hover,.post-status-form .media-upload-icon.disabled i:hover,.post-status-form .poll-icon.disabled i:hover{color:#666;color:var(--btnDisabledText,#666)}.post-status-form .media-upload-icon{-ms-flex-order:1;order:1;text-align:left}.post-status-form .emoji-icon{-ms-flex-order:2;order:2;text-align:center}.post-status-form .poll-icon{-ms-flex-order:3;order:3;text-align:right}.post-status-form .icon-chart-bar{cursor:pointer}.post-status-form .error{text-align:center}.post-status-form .media-upload-wrapper{margin-right:.2em;margin-bottom:.5em;width:18em}.post-status-form .media-upload-wrapper .icon-cancel{display:inline-block;position:static;margin:0;padding-bottom:0;margin-left:10px;margin-left:var(--attachmentRadius,10px);background-color:#182230;background-color:var(--btn,#182230);border-bottom-left-radius:0;border-bottom-right-radius:0}.post-status-form .media-upload-wrapper img,.post-status-form .media-upload-wrapper video{-o-object-fit:contain;object-fit:contain;max-height:10em}.post-status-form .media-upload-wrapper .video{max-height:10em}.post-status-form .media-upload-wrapper input{-ms-flex:1;flex:1;width:100%}.post-status-form .status-input-wrapper{display:-ms-flexbox;display:flex;position:relative;width:100%;-ms-flex-direction:column;flex-direction:column}.post-status-form .media-upload-wrapper .attachments{padding:0 .5em}.post-status-form .media-upload-wrapper .attachments .attachment{margin:0;padding:0;position:relative}.post-status-form .media-upload-wrapper .attachments i{position:absolute;margin:10px;padding:5px;background:hsla(0,0%,90%,.6);border-radius:10px;border-radius:var(--attachmentRadius,10px);font-weight:700}.post-status-form form{margin:.6em;position:relative}.post-status-form .form-group,.post-status-form form{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column}.post-status-form .form-group{padding:.25em .5em .5em;line-height:24px}.post-status-form .form-post-body,.post-status-form form textarea.form-cw{line-height:16px;resize:none;overflow:hidden;transition:min-height .2s .1s;min-height:1px}.post-status-form .form-post-body{height:16px;padding-bottom:1.75em;box-sizing:content-box}.post-status-form .form-post-body.scrollable-form{overflow-y:auto}.post-status-form .main-input{position:relative}.post-status-form .character-counter{position:absolute;bottom:0;right:0;padding:0;margin:0 .5em}.post-status-form .character-counter.error{color:red;color:var(--cRed,red)}.post-status-form .btn{cursor:pointer}.post-status-form .btn[disabled]{cursor:not-allowed}.post-status-form .icon-cancel{cursor:pointer;z-index:4}@keyframes fade-in{0%{opacity:0}to{opacity:.6}}@keyframes fade-out{0%{opacity:.6}to{opacity:0}}.post-status-form .drop-indicator{position:absolute;z-index:1;width:100%;height:100%;font-size:5em;display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center;opacity:.6;color:#b9b9ba;color:var(--text,#b9b9ba);background-color:#121a24;background-color:var(--bg,#121a24);border-radius:5px;border-radius:var(--tooltipRadius,5px);border:2px dashed #b9b9ba;border:2px dashed var(--text,#b9b9ba)}.media-upload-container>video,img.media-upload{line-height:0;max-height:200px;max-width:100%}",""])},function(t,e,n){var i=n(390);"string"==typeof i&&(i=[[t.i,i,""]]),i.locals&&(t.exports=i.locals);(0,n(5).default)("8585287c",i,!0,{})},function(t,e,n){(t.exports=n(4)(!1)).push([t.i,".media-upload .label{display:inline-block}.media-upload .new-icon{cursor:pointer}.media-upload .progress-icon{display:inline-block;line-height:0}.media-upload .progress-icon:before{margin:0;line-height:0}",""])},function(t,e,n){var i=n(392);"string"==typeof i&&(i=[[t.i,i,""]]),i.locals&&(t.exports=i.locals);(0,n(5).default)("770eecd8",i,!0,{})},function(t,e,n){(t.exports=n(4)(!1)).push([t.i,".scope-selector i{font-size:1.2em;cursor:pointer}.scope-selector i.selected{color:#b9b9ba;color:var(--lightText,#b9b9ba)}",""])},function(t,e,n){var i=n(394);"string"==typeof i&&(i=[[t.i,i,""]]),i.locals&&(t.exports=i.locals);(0,n(5).default)("d6bd964a",i,!0,{})},function(t,e,n){(t.exports=n(4)(!1)).push([t.i,".emoji-input{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;position:relative}.emoji-input.with-picker input{padding-right:30px}.emoji-input .emoji-picker-icon{position:absolute;top:0;right:0;margin:.2em .25em;font-size:16px;cursor:pointer;line-height:24px}.emoji-input .emoji-picker-icon:hover i{color:#b9b9ba;color:var(--text,#b9b9ba)}.emoji-input .emoji-picker-panel{position:absolute;z-index:20;margin-top:2px}.emoji-input .emoji-picker-panel.hide{display:none}.emoji-input .autocomplete-panel{position:absolute;z-index:20;margin-top:2px}.emoji-input .autocomplete-panel.hide{display:none}.emoji-input .autocomplete-panel-body{margin:0 .5em;border-radius:5px;border-radius:var(--tooltipRadius,5px);box-shadow:1px 2px 4px rgba(0,0,0,.5);box-shadow:var(--popupShadow);min-width:75%;background-color:#121a24;background-color:var(--popover,#121a24);color:#d8a070;color:var(--popoverText,#d8a070);--faint:var(--popoverFaintText,$fallback--faint);--faintLink:var(--popoverFaintLink,$fallback--faint);--lightText:var(--popoverLightText,$fallback--lightText);--postLink:var(--popoverPostLink,$fallback--link);--postFaintLink:var(--popoverPostFaintLink,$fallback--link);--icon:var(--popoverIcon,$fallback--icon)}.emoji-input .autocomplete-item{display:-ms-flexbox;display:flex;cursor:pointer;padding:.2em .4em;border-bottom:1px solid rgba(0,0,0,.4);height:32px}.emoji-input .autocomplete-item .image{width:32px;height:32px;line-height:32px;text-align:center;font-size:32px;margin-right:4px}.emoji-input .autocomplete-item .image img{width:32px;height:32px;-o-object-fit:contain;object-fit:contain}.emoji-input .autocomplete-item .label{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;-ms-flex-pack:center;justify-content:center;margin:0 .1em 0 .2em}.emoji-input .autocomplete-item .label .displayText{line-height:1.5}.emoji-input .autocomplete-item .label .detailText{font-size:9px;line-height:9px}.emoji-input .autocomplete-item.highlighted{background-color:#182230;background-color:var(--selectedMenuPopover,#182230);color:var(--selectedMenuPopoverText,#b9b9ba);--faint:var(--selectedMenuPopoverFaintText,$fallback--faint);--faintLink:var(--selectedMenuPopoverFaintLink,$fallback--faint);--lightText:var(--selectedMenuPopoverLightText,$fallback--lightText);--icon:var(--selectedMenuPopoverIcon,$fallback--icon)}.emoji-input input,.emoji-input textarea{-ms-flex:1 0 auto;flex:1 0 auto}",""])},function(t,e,n){var i=n(396);"string"==typeof i&&(i=[[t.i,i,""]]),i.locals&&(t.exports=i.locals);(0,n(5).default)("7bb72e68",i,!0,{})},function(t,e,n){(t.exports=n(4)(!1)).push([t.i,".emoji-picker{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;position:absolute;right:0;left:0;margin:0!important;z-index:1;background-color:#121a24;background-color:var(--popover,#121a24);color:#d8a070;color:var(--popoverText,#d8a070);--lightText:var(--popoverLightText,$fallback--faint);--faint:var(--popoverFaintText,$fallback--faint);--faintLink:var(--popoverFaintLink,$fallback--faint);--lightText:var(--popoverLightText,$fallback--lightText);--icon:var(--popoverIcon,$fallback--icon)}.emoji-picker .keep-open,.emoji-picker .too-many-emoji{padding:7px;line-height:normal}.emoji-picker .too-many-emoji{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column}.emoji-picker .keep-open-label{padding:0 7px;display:-ms-flexbox;display:flex}.emoji-picker .heading{display:-ms-flexbox;display:flex;height:32px;padding:10px 7px 5px}.emoji-picker .content{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;-ms-flex:1 1 auto;flex:1 1 auto;min-height:0}.emoji-picker .emoji-tabs{-ms-flex-positive:1;flex-grow:1}.emoji-picker .emoji-groups{min-height:200px}.emoji-picker .additional-tabs{border-left:1px solid;border-left-color:#666;border-left-color:var(--icon,#666);padding-left:7px;-ms-flex:0 0 auto;flex:0 0 auto}.emoji-picker .additional-tabs,.emoji-picker .emoji-tabs{display:block;min-width:0;-ms-flex-preferred-size:auto;flex-basis:auto;-ms-flex-negative:1;flex-shrink:1}.emoji-picker .additional-tabs-item,.emoji-picker .emoji-tabs-item{padding:0 7px;cursor:pointer;font-size:24px}.emoji-picker .additional-tabs-item.disabled,.emoji-picker .emoji-tabs-item.disabled{opacity:.5;pointer-events:none}.emoji-picker .additional-tabs-item.active,.emoji-picker .emoji-tabs-item.active{border-bottom:4px solid}.emoji-picker .additional-tabs-item.active i,.emoji-picker .emoji-tabs-item.active i{color:#b9b9ba;color:var(--lightText,#b9b9ba)}.emoji-picker .sticker-picker{-ms-flex:1 1 auto;flex:1 1 auto}.emoji-picker .emoji-content,.emoji-picker .stickers-content{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;-ms-flex:1 1 auto;flex:1 1 auto;min-height:0}.emoji-picker .emoji-content.hidden,.emoji-picker .stickers-content.hidden{opacity:0;pointer-events:none;position:absolute}.emoji-picker .emoji-search{padding:5px;-ms-flex:0 0 auto;flex:0 0 auto}.emoji-picker .emoji-search input{width:100%}.emoji-picker .emoji-groups{-ms-flex:1 1 1px;flex:1 1 1px;position:relative;overflow:auto;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-webkit-mask:linear-gradient(0deg,#fff 0,transparent) bottom no-repeat,linear-gradient(180deg,#fff 0,transparent) top no-repeat,linear-gradient(0deg,#fff,#fff);mask:linear-gradient(0deg,#fff 0,transparent) bottom no-repeat,linear-gradient(180deg,#fff 0,transparent) top no-repeat,linear-gradient(0deg,#fff,#fff);transition:-webkit-mask-size .15s;transition:mask-size .15s;transition:mask-size .15s,-webkit-mask-size .15s;-webkit-mask-size:100% 20px,100% 20px,auto;mask-size:100% 20px,100% 20px,auto;-webkit-mask-composite:xor;mask-composite:exclude}.emoji-picker .emoji-groups.scrolled-top{-webkit-mask-size:100% 20px,100% 0,auto;mask-size:100% 20px,100% 0,auto}.emoji-picker .emoji-groups.scrolled-bottom{-webkit-mask-size:100% 0,100% 20px,auto;mask-size:100% 0,100% 20px,auto}.emoji-picker .emoji-group{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;-ms-flex-wrap:wrap;flex-wrap:wrap;padding-left:5px;-ms-flex-pack:left;justify-content:left}.emoji-picker .emoji-group-title{font-size:12px;width:100%;margin:0}.emoji-picker .emoji-group-title.disabled{display:none}.emoji-picker .emoji-item{width:32px;height:32px;box-sizing:border-box;display:-ms-flexbox;display:flex;font-size:32px;-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center;margin:4px;cursor:pointer}.emoji-picker .emoji-item img{-o-object-fit:contain;object-fit:contain;max-width:100%;max-height:100%}",""])},function(t,e,n){var i=n(398);"string"==typeof i&&(i=[[t.i,i,""]]),i.locals&&(t.exports=i.locals);(0,n(5).default)("002629bb",i,!0,{})},function(t,e,n){(t.exports=n(4)(!1)).push([t.i,'.checkbox{position:relative;display:inline-block;min-height:1.2em}.checkbox-indicator{position:relative;padding-left:1.2em}.checkbox-indicator:before{position:absolute;right:0;top:0;display:block;content:"\\2713";transition:color .2s;width:1.1em;height:1.1em;border-radius:2px;border-radius:var(--checkboxRadius,2px);box-shadow:inset 0 0 2px #000;box-shadow:var(--inputShadow);background-color:#182230;background-color:var(--input,#182230);vertical-align:top;text-align:center;line-height:1.1em;font-size:1.1em;color:transparent;overflow:hidden;box-sizing:border-box}.checkbox.disabled .checkbox-indicator:before,.checkbox.disabled .label{opacity:.5}.checkbox.disabled .label{color:hsla(240,1%,73%,.5);color:var(--faint,hsla(240,1%,73%,.5))}.checkbox input[type=checkbox]{display:none}.checkbox input[type=checkbox]:checked+.checkbox-indicator:before{color:#b9b9ba;color:var(--inputText,#b9b9ba)}.checkbox input[type=checkbox]:indeterminate+.checkbox-indicator:before{content:"\\2013";color:#b9b9ba;color:var(--inputText,#b9b9ba)}.checkbox>span{margin-left:.5em}',""])},function(t,e,n){var i=n(400);"string"==typeof i&&(i=[[t.i,i,""]]),i.locals&&(t.exports=i.locals);(0,n(5).default)("60db0262",i,!0,{})},function(t,e,n){(t.exports=n(4)(!1)).push([t.i,".poll-form{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;padding:0 .5em .5em}.poll-form .add-option{-ms-flex-item-align:start;align-self:flex-start;padding-top:.25em;cursor:pointer}.poll-form .poll-option{display:-ms-flexbox;display:flex;-ms-flex-align:baseline;align-items:baseline;-ms-flex-pack:justify;justify-content:space-between;margin-bottom:.25em}.poll-form .input-container{width:100%}.poll-form .input-container input{padding-right:2.5em;width:100%}.poll-form .icon-container{width:2em;margin-left:-2em;z-index:1}.poll-form .poll-type-expiry{margin-top:.5em;display:-ms-flexbox;display:flex;width:100%}.poll-form .poll-type{margin-right:.75em;-ms-flex:1 1 60%;flex:1 1 60%}.poll-form .poll-type .select{border:none;box-shadow:none;background-color:transparent}.poll-form .poll-expiry{display:-ms-flexbox;display:flex}.poll-form .poll-expiry .expiry-amount{width:3em;text-align:right}.poll-form .poll-expiry .expiry-unit{border:none;box-shadow:none;background-color:transparent}",""])},function(t,e,n){var i=n(402);"string"==typeof i&&(i=[[t.i,i,""]]),i.locals&&(t.exports=i.locals);(0,n(5).default)("60b296ca",i,!0,{})},function(t,e,n){(t.exports=n(4)(!1)).push([t.i,".attachments{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap}.attachments .non-gallery{max-width:100%}.attachments .placeholder{display:inline-block;padding:.3em 1em .3em 0;color:#d8a070;color:var(--postLink,#d8a070);overflow:hidden;white-space:nowrap;text-overflow:ellipsis;max-width:100%}.attachments .nsfw-placeholder{cursor:pointer}.attachments .nsfw-placeholder.loading{cursor:progress}.attachments .attachment{position:relative;margin-top:.5em;-ms-flex-item-align:start;align-self:flex-start;line-height:0;border-radius:10px;border-radius:var(--attachmentRadius,10px);border-color:#222;border:1px solid var(--border,#222);overflow:hidden}.attachments .non-gallery.attachment.video{-ms-flex:1 0 40%;flex:1 0 40%}.attachments .non-gallery.attachment .nsfw{height:260px}.attachments .non-gallery.attachment .small{height:120px;-ms-flex-positive:0;flex-grow:0}.attachments .non-gallery.attachment .video{height:260px;display:-ms-flexbox;display:flex}.attachments .non-gallery.attachment video{max-height:100%;-o-object-fit:contain;object-fit:contain}.attachments .fullwidth{-ms-flex-preferred-size:100%;flex-basis:100%}.attachments.video{line-height:0}.attachments .video-container{display:-ms-flexbox;display:flex;max-height:100%}.attachments .video{width:100%;height:100%}.attachments .play-icon{position:absolute;font-size:64px;top:calc(50% - 32px);left:calc(50% - 32px);color:hsla(0,0%,100%,.75);text-shadow:0 0 2px rgba(0,0,0,.4)}.attachments .play-icon:before{margin:0}.attachments.html{-ms-flex-preferred-size:90%;flex-basis:90%;width:100%;display:-ms-flexbox;display:flex}.attachments .hider{position:absolute;right:0;white-space:nowrap;margin:10px;padding:5px;background:hsla(0,0%,90%,.6);font-weight:700;z-index:4;line-height:1;border-radius:5px;border-radius:var(--tooltipRadius,5px)}.attachments video{z-index:0}.attachments audio{width:100%}.attachments img.media-upload{line-height:0;max-height:200px;max-width:100%}.attachments .oembed{line-height:1.2em;-ms-flex:1 0 100%;flex:1 0 100%;width:100%;margin-right:15px;display:-ms-flexbox;display:flex}.attachments .oembed img{width:100%}.attachments .oembed .image{-ms-flex:1;flex:1}.attachments .oembed .image img{border:0;border-radius:5px;height:100%;-o-object-fit:cover;object-fit:cover}.attachments .oembed .text{-ms-flex:2;flex:2;margin:8px;word-break:break-all}.attachments .oembed .text h1{font-size:14px;margin:0}.attachments .image-attachment,.attachments .image-attachment .image{width:100%;height:100%}.attachments .image-attachment.hidden{display:none}.attachments .image-attachment .nsfw{-o-object-fit:cover;object-fit:cover;width:100%;height:100%}.attachments .image-attachment img{image-orientation:from-image}",""])},function(t,e,n){var i=n(404);"string"==typeof i&&(i=[[t.i,i,""]]),i.locals&&(t.exports=i.locals);(0,n(5).default)("24ab97e0",i,!0,{})},function(t,e,n){(t.exports=n(4)(!1)).push([t.i,'.still-image{position:relative;line-height:0;overflow:hidden;display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center}.still-image canvas{position:absolute;top:0;bottom:0;left:0;right:0;height:100%;visibility:var(--still-image-canvas,visible)}.still-image canvas,.still-image img{width:100%;-o-object-fit:contain;object-fit:contain}.still-image img{min-height:100%}.still-image.animated:before{content:"gif";position:absolute;line-height:10px;font-size:10px;top:5px;left:5px;background:hsla(0,0%,50%,.5);color:#fff;display:block;padding:2px 4px;border-radius:5px;border-radius:var(--tooltipRadius,5px);z-index:2;visibility:var(--still-image-label-visibility,visible)}.still-image.animated:hover canvas{display:none}.still-image.animated:hover:before,.still-image.animated img{visibility:var(--still-image-img,hidden)}.still-image.animated:hover img{visibility:visible}',""])},function(t,e,n){var i=n(406);"string"==typeof i&&(i=[[t.i,i,""]]),i.locals&&(t.exports=i.locals);(0,n(5).default)("af4a4f5c",i,!0,{})},function(t,e,n){(t.exports=n(4)(!1)).push([t.i,".StatusContent{-ms-flex:1;flex:1;min-width:0}.StatusContent .status-content-wrapper{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;-ms-flex-wrap:nowrap;flex-wrap:nowrap}.StatusContent .tall-status{position:relative;height:220px;overflow-x:hidden;overflow-y:hidden;z-index:1}.StatusContent .tall-status .status-content{min-height:0;-webkit-mask:linear-gradient(0deg,#fff,transparent) bottom/100% 70px no-repeat,linear-gradient(0deg,#fff,#fff);mask:linear-gradient(0deg,#fff,transparent) bottom/100% 70px no-repeat,linear-gradient(0deg,#fff,#fff);-webkit-mask-composite:xor;mask-composite:exclude}.StatusContent .tall-status-hider{position:absolute;height:70px;margin-top:150px;line-height:110px;z-index:2}.StatusContent .cw-status-hider,.StatusContent .status-unhider,.StatusContent .tall-status-hider{display:inline-block;word-break:break-all;width:100%;text-align:center}.StatusContent img,.StatusContent video{max-width:100%;max-height:400px;vertical-align:middle;-o-object-fit:contain;object-fit:contain}.StatusContent img.emoji,.StatusContent video.emoji{width:32px;height:32px}.StatusContent .summary-wrapper{margin-bottom:.5em;border-style:solid;border-width:0 0 1px;border-color:var(--border,#222);-ms-flex-positive:0;flex-grow:0}.StatusContent .summary{font-style:italic;padding-bottom:.5em}.StatusContent .tall-subject{position:relative}.StatusContent .tall-subject .summary{max-height:2em;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.StatusContent .tall-subject-hider{display:inline-block;word-break:break-all;width:100%;text-align:center;padding-bottom:.5em}.StatusContent .status-content{font-family:var(--postFont,sans-serif);line-height:1.4em;white-space:pre-wrap;overflow-wrap:break-word;word-wrap:break-word;word-break:break-word}.StatusContent .status-content blockquote{margin:.2em 0 .2em 2em;font-style:italic}.StatusContent .status-content pre{overflow:auto}.StatusContent .status-content code,.StatusContent .status-content kbd,.StatusContent .status-content pre,.StatusContent .status-content samp,.StatusContent .status-content var{font-family:var(--postCodeFont,monospace)}.StatusContent .status-content p{margin:0 0 1em}.StatusContent .status-content p:last-child{margin:0}.StatusContent .status-content h1{font-size:1.1em;line-height:1.2em;margin:1.4em 0}.StatusContent .status-content h2{font-size:1.1em;margin:1em 0}.StatusContent .status-content h3{font-size:1em;margin:1.2em 0}.StatusContent .status-content h4{margin:1.1em 0}.StatusContent .status-content.single-line{white-space:nowrap;text-overflow:ellipsis;overflow:hidden;height:1.4em}.greentext{color:#0fa00f;color:var(--postGreentext,#0fa00f)}",""])},function(t,e,n){var i=n(408);"string"==typeof i&&(i=[[t.i,i,""]]),i.locals&&(t.exports=i.locals);(0,n(5).default)("1a8b173f",i,!0,{})},function(t,e,n){(t.exports=n(4)(!1)).push([t.i,".poll .votes{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;margin:0 0 .5em}.poll .poll-option{margin:.75em .5em}.poll .option-result{height:100%;display:-ms-flexbox;display:flex;-ms-flex-direction:row;flex-direction:row;position:relative;color:#b9b9ba;color:var(--lightText,#b9b9ba)}.poll .option-result-label{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;padding:.1em .25em;z-index:1;word-break:break-word}.poll .result-percentage{width:3.5em;-ms-flex-negative:0;flex-shrink:0}.poll .result-fill{height:100%;position:absolute;color:#b9b9ba;color:var(--pollText,#b9b9ba);background-color:#151e2a;background-color:var(--poll,#151e2a);border-radius:10px;border-radius:var(--panelRadius,10px);top:0;left:0;transition:width .5s}.poll .option-vote{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center}.poll input{width:3.5em}.poll .footer{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center}.poll.loading *{cursor:progress}.poll .poll-vote-button{padding:0 .5em;margin-right:.5em}",""])},function(t,e,n){var i=n(410);"string"==typeof i&&(i=[[t.i,i,""]]),i.locals&&(t.exports=i.locals);(0,n(5).default)("6c9d5cbc",i,!0,{})},function(t,e,n){(t.exports=n(4)(!1)).push([t.i,".gallery-row{position:relative;height:0;width:100%;-ms-flex-positive:1;flex-grow:1;margin-top:.5em}.gallery-row .gallery-row-inner{position:absolute;top:0;left:0;right:0;bottom:0;display:-ms-flexbox;display:flex;-ms-flex-direction:row;flex-direction:row;-ms-flex-wrap:nowrap;flex-wrap:nowrap;-ms-flex-line-pack:stretch;align-content:stretch}.gallery-row .gallery-row-inner .attachment{margin:0 .5em 0 0;-ms-flex-positive:1;flex-grow:1;height:100%;box-sizing:border-box;min-width:2em}.gallery-row .gallery-row-inner .attachment:last-child{margin:0}.gallery-row .image-attachment{width:100%;height:100%}.gallery-row .video-container{height:100%}.gallery-row.contain-fit canvas,.gallery-row.contain-fit img,.gallery-row.contain-fit video{-o-object-fit:contain;object-fit:contain;height:100%}.gallery-row.cover-fit canvas,.gallery-row.cover-fit img,.gallery-row.cover-fit video{-o-object-fit:cover;object-fit:cover}",""])},function(t,e,n){var i=n(412);"string"==typeof i&&(i=[[t.i,i,""]]),i.locals&&(t.exports=i.locals);(0,n(5).default)("c13d6bee",i,!0,{})},function(t,e,n){(t.exports=n(4)(!1)).push([t.i,".link-preview-card{display:-ms-flexbox;display:flex;-ms-flex-direction:row;flex-direction:row;cursor:pointer;overflow:hidden;margin-top:.5em;color:#b9b9ba;color:var(--text,#b9b9ba);border-radius:10px;border-radius:var(--attachmentRadius,10px);border-color:#222;border:1px solid var(--border,#222)}.link-preview-card .card-image{-ms-flex-negative:0;flex-shrink:0;width:120px;max-width:25%}.link-preview-card .card-image img{width:100%;height:100%;-o-object-fit:cover;object-fit:cover;border-radius:10px;border-radius:var(--attachmentRadius,10px)}.link-preview-card .small-image{width:80px}.link-preview-card .card-content{max-height:100%;margin:.5em;display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column}.link-preview-card .card-host{font-size:12px}.link-preview-card .card-description{margin:.5em 0 0;overflow:hidden;text-overflow:ellipsis;word-break:break-word;line-height:1.2em;max-height:calc(1.2em * 3 - 1px)}",""])},function(t,e,n){var i=n(414);"string"==typeof i&&(i=[[t.i,i,""]]),i.locals&&(t.exports=i.locals);(0,n(5).default)("0060b6a4",i,!0,{})},function(t,e,n){(t.exports=n(4)(!1)).push([t.i,".user-card{position:relative}.user-card .panel-heading{padding:.5em 0;text-align:center;box-shadow:none;background:transparent;-ms-flex-direction:column;flex-direction:column;-ms-flex-align:stretch;align-items:stretch;position:relative}.user-card .panel-body{word-wrap:break-word;border-bottom-right-radius:inherit;border-bottom-left-radius:inherit;position:relative}.user-card .background-image{position:absolute;top:0;left:0;right:0;bottom:0;-webkit-mask:linear-gradient(0deg,#fff,transparent) bottom no-repeat,linear-gradient(0deg,#fff,#fff);mask:linear-gradient(0deg,#fff,transparent) bottom no-repeat,linear-gradient(0deg,#fff,#fff);-webkit-mask-composite:xor;mask-composite:exclude;background-size:cover;-webkit-mask-size:100% 60%;mask-size:100% 60%;border-top-left-radius:calc(var(--panelRadius) - 1px);border-top-right-radius:calc(var(--panelRadius) - 1px);background-color:var(--profileBg)}.user-card .background-image.hide-bio{-webkit-mask-size:100% 40px;mask-size:100% 40px}.user-card p{margin-bottom:0}.user-card-bio{text-align:center}.user-card-bio a{color:#d8a070;color:var(--postLink,#d8a070)}.user-card-bio img{-o-object-fit:contain;object-fit:contain;vertical-align:middle;max-width:100%;max-height:400px}.user-card-bio img.emoji{width:32px;height:32px}.user-card-rounded-t{border-top-left-radius:10px;border-top-left-radius:var(--panelRadius,10px);border-top-right-radius:10px;border-top-right-radius:var(--panelRadius,10px)}.user-card-rounded{border-radius:10px;border-radius:var(--panelRadius,10px)}.user-card-bordered{border-color:#222;border:1px solid var(--border,#222)}.user-info{color:#b9b9ba;color:var(--lightText,#b9b9ba);padding:0 26px}.user-info .container{padding:16px 0 6px;display:-ms-flexbox;display:flex;-ms-flex-align:start;align-items:flex-start;max-height:56px}.user-info .container .Avatar{-ms-flex:1 0 100%;flex:1 0 100%;width:56px;height:56px;box-shadow:0 1px 8px rgba(0,0,0,.75);box-shadow:var(--avatarShadow);-o-object-fit:cover;object-fit:cover}.user-info:hover .Avatar{--still-image-img:visible;--still-image-canvas:hidden}.user-info-avatar-link{position:relative;cursor:pointer}.user-info-avatar-link-overlay{position:absolute;left:0;top:0;right:0;bottom:0;background-color:rgba(0,0,0,.3);display:-ms-flexbox;display:flex;-ms-flex-pack:center;justify-content:center;-ms-flex-align:center;align-items:center;border-radius:4px;border-radius:var(--avatarRadius,4px);opacity:0;transition:opacity .2s ease}.user-info-avatar-link-overlay i{color:#fff}.user-info-avatar-link:hover .user-info-avatar-link-overlay{opacity:1}.user-info .usersettings{color:#b9b9ba;color:var(--lightText,#b9b9ba);opacity:.8}.user-info .user-summary{display:block;margin-left:.6em;text-align:left;text-overflow:ellipsis;white-space:nowrap;-ms-flex:1 1 0px;flex:1 1 0;z-index:1}.user-info .user-summary img{width:26px;height:26px;vertical-align:middle;-o-object-fit:contain;object-fit:contain}.user-info .user-summary .top-line{display:-ms-flexbox;display:flex}.user-info .user-name{text-overflow:ellipsis;overflow:hidden;-ms-flex:1 1 auto;flex:1 1 auto;margin-right:1em;font-size:15px}.user-info .user-name img{-o-object-fit:contain;object-fit:contain;height:16px;width:16px;vertical-align:middle}.user-info .bottom-line{display:-ms-flexbox;display:flex;font-weight:light;font-size:15px}.user-info .bottom-line .user-screen-name{min-width:1px;-ms-flex:0 1 auto;flex:0 1 auto;text-overflow:ellipsis;overflow:hidden;color:#b9b9ba;color:var(--lightText,#b9b9ba)}.user-info .bottom-line .dailyAvg{min-width:1px;-ms-flex:0 0 auto;flex:0 0 auto;margin-left:1em;font-size:.7em;color:#b9b9ba;color:var(--text,#b9b9ba)}.user-info .bottom-line .user-role{-ms-flex:none;flex:none;text-transform:capitalize;color:#b9b9ba;color:var(--alertNeutralText,#b9b9ba);background-color:#182230;background-color:var(--alertNeutral,#182230)}.user-info .user-meta{margin-bottom:.15em;display:-ms-flexbox;display:flex;-ms-flex-align:baseline;align-items:baseline;font-size:14px;line-height:22px;-ms-flex-wrap:wrap;flex-wrap:wrap}.user-info .user-meta .following{-ms-flex:1 0 auto;flex:1 0 auto;margin:0;margin-bottom:.25em;text-align:left}.user-info .user-meta .highlighter{-ms-flex:0 1 auto;flex:0 1 auto;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;margin-right:-.5em;-ms-flex-item-align:start;align-self:start}.user-info .user-meta .highlighter .userHighlightCl{padding:2px 10px;-ms-flex:1 0 auto;flex:1 0 auto}.user-info .user-meta .highlighter .userHighlightSel,.user-info .user-meta .highlighter .userHighlightSel.select{padding-top:0;padding-bottom:0;-ms-flex:1 0 auto;flex:1 0 auto}.user-info .user-meta .highlighter .userHighlightSel.select i{line-height:22px}.user-info .user-meta .highlighter .userHighlightText{width:70px;-ms-flex:1 0 auto;flex:1 0 auto}.user-info .user-meta .highlighter .userHighlightCl,.user-info .user-meta .highlighter .userHighlightSel,.user-info .user-meta .highlighter .userHighlightSel.select,.user-info .user-meta .highlighter .userHighlightText{height:22px;vertical-align:top;margin-right:.5em;margin-bottom:.25em}.user-info .user-interactions{position:relative;display:-ms-flexbox;display:flex;-ms-flex-flow:row wrap;flex-flow:row wrap;margin-right:-.75em}.user-info .user-interactions>*{margin:0 .75em .6em 0;white-space:nowrap;min-width:95px}.user-info .user-interactions button{margin:0}.user-counts{display:-ms-flexbox;display:flex;line-height:16px;padding:.5em 1.5em 0;text-align:center;-ms-flex-pack:justify;justify-content:space-between;color:#b9b9ba;color:var(--lightText,#b9b9ba);-ms-flex-wrap:wrap;flex-wrap:wrap}.user-count{-ms-flex:1 0 auto;flex:1 0 auto;padding:.5em 0;margin:0 .5em}.user-count h5{font-size:1em;font-weight:bolder;margin:0 0 .25em}.user-count a{text-decoration:none}",""])},function(t,e,n){var i=n(416);"string"==typeof i&&(i=[[t.i,i,""]]),i.locals&&(t.exports=i.locals);(0,n(5).default)("6b6f3617",i,!0,{})},function(t,e,n){(t.exports=n(4)(!1)).push([t.i,".Avatar{--still-image-label-visibility:hidden;width:48px;height:48px;box-shadow:var(--avatarStatusShadow);border-radius:4px;border-radius:var(--avatarRadius,4px)}.Avatar img{width:100%;height:100%}.Avatar.better-shadow{box-shadow:var(--avatarStatusShadowInset);filter:var(--avatarStatusShadowFilter)}.Avatar.animated:before{display:none}.Avatar.avatar-compact{width:32px;height:32px;border-radius:10px;border-radius:var(--avatarAltRadius,10px)}",""])},function(t,e,n){var i=n(418);"string"==typeof i&&(i=[[t.i,i,""]]),i.locals&&(t.exports=i.locals);(0,n(5).default)("4852bbb4",i,!0,{})},function(t,e,n){(t.exports=n(4)(!1)).push([t.i,".remote-follow{max-width:220px}.remote-follow .remote-button{width:100%;min-height:28px}",""])},function(t,e,n){var i=n(420);"string"==typeof i&&(i=[[t.i,i,""]]),i.locals&&(t.exports=i.locals);(0,n(5).default)("2c0672fc",i,!0,{})},function(t,e,n){(t.exports=n(4)(!1)).push([t.i,'.menu-checkbox{float:right;min-width:22px;max-width:22px;min-height:22px;max-height:22px;line-height:22px;text-align:center;border-radius:0;background-color:#182230;background-color:var(--input,#182230);box-shadow:inset 0 0 2px #000;box-shadow:var(--inputShadow)}.menu-checkbox.menu-checkbox-checked:after{content:"\\2714"}.moderation-tools-popover{height:100%}.moderation-tools-popover .trigger{display:-ms-flexbox!important;display:flex!important;height:100%}',""])},function(t,e,n){var i=n(422);"string"==typeof i&&(i=[[t.i,i,""]]),i.locals&&(t.exports=i.locals);(0,n(5).default)("56d82e88",i,!0,{})},function(t,e,n){(t.exports=n(4)(!1)).push([t.i,'.dark-overlay:before{bottom:0;content:" ";left:0;right:0;background:rgba(27,31,35,.5);z-index:99}.dark-overlay:before,.dialog-modal.panel{display:block;cursor:default;position:fixed;top:0}.dialog-modal.panel{left:50%;max-height:80vh;max-width:90vw;margin:15vh auto;transform:translateX(-50%);z-index:999;background-color:#121a24;background-color:var(--bg,#121a24)}.dialog-modal.panel .dialog-modal-heading{padding:.5em;margin-right:auto;margin-bottom:0;white-space:nowrap;color:var(--panelText);background-color:#182230;background-color:var(--panel,#182230)}.dialog-modal.panel .dialog-modal-heading .title{margin-bottom:0;text-align:center}.dialog-modal.panel .dialog-modal-content{margin:0;padding:1rem;background-color:#121a24;background-color:var(--bg,#121a24);white-space:normal}.dialog-modal.panel .dialog-modal-footer{margin:0;padding:.5em;background-color:#121a24;background-color:var(--bg,#121a24);border-top:1px solid #222;border-top:1px solid var(--border,#222);display:-ms-flexbox;display:flex;-ms-flex-pack:end;justify-content:flex-end}.dialog-modal.panel .dialog-modal-footer button{width:auto;margin-left:.5rem}',""])},function(t,e,n){var i=n(424);"string"==typeof i&&(i=[[t.i,i,""]]),i.locals&&(t.exports=i.locals);(0,n(5).default)("8c9d5016",i,!0,{})},function(t,e,n){(t.exports=n(4)(!1)).push([t.i,".account-actions{margin:0 .8em}.account-actions button.dropdown-item{margin-left:0}.account-actions .trigger-button{color:#b9b9ba;color:var(--lightText,#b9b9ba);opacity:.8;cursor:pointer}.account-actions .trigger-button:hover{color:#b9b9ba;color:var(--text,#b9b9ba)}",""])},function(t,e,n){var i=n(426);"string"==typeof i&&(i=[[t.i,i,""]]),i.locals&&(t.exports=i.locals);(0,n(5).default)("7096a06e",i,!0,{})},function(t,e,n){(t.exports=n(4)(!1)).push([t.i,".avatars{display:-ms-flexbox;display:flex;margin:0;padding:0;-ms-flex-wrap:wrap;flex-wrap:wrap;height:24px}.avatars .avatars-item{margin:0 0 5px 5px}.avatars .avatars-item:first-child{padding-left:5px}.avatars .avatars-item .avatar-small{border-radius:10px;border-radius:var(--avatarAltRadius,10px);height:24px;width:24px}",""])},function(t,e,n){var i=n(428);"string"==typeof i&&(i=[[t.i,i,""]]),i.locals&&(t.exports=i.locals);(0,n(5).default)("14cff5b4",i,!0,{})},function(t,e,n){(t.exports=n(4)(!1)).push([t.i,".status-popover.popover{font-size:1rem;min-width:15em;max-width:95%;border-color:#222;border:1px solid var(--border,#222);border-radius:5px;border-radius:var(--tooltipRadius,5px);box-shadow:2px 2px 3px rgba(0,0,0,.5);box-shadow:var(--popupShadow)}.status-popover.popover .Status.Status{border:none}.status-popover.popover .status-preview-no-content{padding:1em;text-align:center}.status-popover.popover .status-preview-no-content i{font-size:2em}",""])},function(t,e,n){var i=n(430);"string"==typeof i&&(i=[[t.i,i,""]]),i.locals&&(t.exports=i.locals);(0,n(5).default)("50540f22",i,!0,{})},function(t,e,n){(t.exports=n(4)(!1)).push([t.i,".user-list-popover{padding:.5em}.user-list-popover .user-list-row{padding:.25em;display:-ms-flexbox;display:flex;-ms-flex-direction:row;flex-direction:row}.user-list-popover .user-list-row .user-list-names{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;margin-left:.5em;min-width:5em}.user-list-popover .user-list-row .user-list-names img{width:1em;height:1em}.user-list-popover .user-list-row .user-list-screen-name{font-size:9px}",""])},function(t,e,n){var i=n(432);"string"==typeof i&&(i=[[t.i,i,""]]),i.locals&&(t.exports=i.locals);(0,n(5).default)("cf35b50a",i,!0,{})},function(t,e,n){(t.exports=n(4)(!1)).push([t.i,".emoji-reactions{display:-ms-flexbox;display:flex;margin-top:.25em;-ms-flex-wrap:wrap;flex-wrap:wrap}.emoji-reaction{padding:0 .5em;margin-right:.5em;margin-top:.5em;display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center;box-sizing:border-box}.emoji-reaction .reaction-emoji{width:1.25em;margin-right:.25em}.emoji-reaction:focus{outline:none}.emoji-reaction.not-clickable{cursor:default}.emoji-reaction.not-clickable:hover{box-shadow:0 0 2px 0 #000,inset 0 1px 0 0 hsla(0,0%,100%,.2),inset 0 -1px 0 0 rgba(0,0,0,.2);box-shadow:var(--buttonShadow)}.emoji-reaction-expand{padding:0 .5em;margin-right:.5em;margin-top:.5em;display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center}.emoji-reaction-expand:hover{text-decoration:underline}.picked-reaction{border:1px solid var(--accent,#d8a070);margin-left:-1px;margin-right:calc(.5em - 1px)}",""])},function(t,e,n){var i=n(434);"string"==typeof i&&(i=[[t.i,i,""]]),i.locals&&(t.exports=i.locals);(0,n(5).default)("93498d0a",i,!0,{})},function(t,e,n){(t.exports=n(4)(!1)).push([t.i,".Conversation .conversation-status{border-left:none;border-bottom-width:1px;border-bottom-style:solid;border-bottom-color:var(--border,#222);border-radius:0}.Conversation.-expanded .conversation-status{border-color:#222;border-color:var(--border,#222);border-left:4px solid red;border-left:4px solid var(--cRed,red)}.Conversation.-expanded .conversation-status:last-child{border-bottom:none;border-radius:0 0 10px 10px;border-radius:0 0 var(--panelRadius,10px) var(--panelRadius,10px)}",""])},,,,,,,,,,,,,,,function(t,e,n){var i=n(450);"string"==typeof i&&(i=[[t.i,i,""]]),i.locals&&(t.exports=i.locals);(0,n(5).default)("b449a0b2",i,!0,{})},function(t,e,n){(t.exports=n(4)(!1)).push([t.i,".timeline-menu{-ms-flex-negative:1;flex-shrink:1;margin-right:auto;min-width:0;width:24rem}.timeline-menu .timeline-menu-popover-wrap{overflow:hidden;margin-top:.6rem;padding:0 15px 15px}.timeline-menu .timeline-menu-popover{width:24rem;max-width:100vw;margin:0;font-size:1rem;transform:translateY(-100%);transition:transform .1s}.timeline-menu .panel:after,.timeline-menu .timeline-menu-popover{border-top-right-radius:0;border-top-left-radius:0}.timeline-menu.open .timeline-menu-popover{transform:translateY(0)}.timeline-menu .timeline-menu-title{margin:0;cursor:pointer;display:-ms-flexbox;display:flex;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;width:100%}.timeline-menu .timeline-menu-title span{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.timeline-menu .timeline-menu-title i{margin-left:.6em;-ms-flex-negative:0;flex-shrink:0;font-size:1rem;transition:transform .1s}.timeline-menu.open .timeline-menu-title i{color:#b9b9ba;color:var(--panelText,#b9b9ba);transform:rotate(180deg)}.timeline-menu .panel{box-shadow:var(--popoverShadow)}.timeline-menu ul{list-style:none;margin:0;padding:0}.timeline-menu li{border-bottom:1px solid;border-color:#222;border-color:var(--border,#222);padding:0}.timeline-menu li:last-child a{border-bottom-right-radius:10px;border-bottom-right-radius:var(--panelRadius,10px);border-bottom-left-radius:10px;border-bottom-left-radius:var(--panelRadius,10px)}.timeline-menu li:last-child{border:none}.timeline-menu li i{margin:0 .5em}.timeline-menu a{display:block;padding:.6em 0}.timeline-menu a:hover{color:#d8a070;color:var(--selectedMenuText,#d8a070)}.timeline-menu a.router-link-active,.timeline-menu a:hover{background-color:#151e2a;background-color:var(--selectedMenu,#151e2a);--faint:var(--selectedMenuFaintText,$fallback--faint);--faintLink:var(--selectedMenuFaintLink,$fallback--faint);--lightText:var(--selectedMenuLightText,$fallback--lightText);--icon:var(--selectedMenuIcon,$fallback--icon)}.timeline-menu a.router-link-active{font-weight:bolder;color:#b9b9ba;color:var(--selectedMenuText,#b9b9ba)}.timeline-menu a.router-link-active:hover{text-decoration:underline}",""])},function(t,e,n){var i=n(452);"string"==typeof i&&(i=[[t.i,i,""]]),i.locals&&(t.exports=i.locals);(0,n(5).default)("87e1cf2e",i,!0,{})},function(t,e,n){(t.exports=n(4)(!1)).push([t.i,".notifications:not(.minimal){padding-bottom:15em}.notifications .loadmore-error{color:#b9b9ba;color:var(--text,#b9b9ba)}.notifications .notification{position:relative}.notifications .notification .notification-overlay{position:absolute;top:0;right:0;left:0;bottom:0;pointer-events:none}.notifications .notification.unseen .notification-overlay{background-image:linear-gradient(135deg,var(--badgeNotification,red) 4px,transparent 10px)}.notification{box-sizing:border-box;border-bottom:1px solid;border-color:#222;border-color:var(--border,#222);word-wrap:break-word;word-break:break-word}.notification:hover .animated.Avatar canvas{display:none}.notification:hover .animated.Avatar img{visibility:visible}.notification .non-mention{display:-ms-flexbox;display:flex;-ms-flex:1;flex:1;-ms-flex-wrap:nowrap;flex-wrap:nowrap;padding:.6em;min-width:0;--link:var(--faintLink);--text:var(--faint)}.notification .non-mention .avatar-container{width:32px;height:32px}.notification .follow-request-accept{cursor:pointer}.notification .follow-request-accept:hover{color:#b9b9ba;color:var(--text,#b9b9ba)}.notification .follow-request-reject{cursor:pointer}.notification .follow-request-reject:hover{color:red;color:var(--cRed,red)}.notification .follow-text,.notification .move-text{padding:.5em 0;overflow-wrap:break-word;display:-ms-flexbox;display:flex;-ms-flex-pack:justify;justify-content:space-between}.notification .follow-text .follow-name,.notification .move-text .follow-name{display:block;max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.notification .Status{-ms-flex:1;flex:1}.notification time{white-space:nowrap}.notification .notification-right{-ms-flex:1;flex:1;padding-left:.8em;min-width:0}.notification .notification-right .timeago{min-width:3em;text-align:right}.notification .emoji-reaction-emoji{font-size:16px}.notification .notification-details{min-width:0;word-wrap:break-word;line-height:18px;position:relative;overflow:hidden;width:100%;-ms-flex:1 1 0px;flex:1 1 0;display:-ms-flexbox;display:flex;-ms-flex-wrap:nowrap;flex-wrap:nowrap;-ms-flex-pack:justify;justify-content:space-between}.notification .notification-details .name-and-action{-ms-flex:1;flex:1;overflow:hidden;text-overflow:ellipsis}.notification .notification-details .username{font-weight:bolder;max-width:100%;text-overflow:ellipsis;white-space:nowrap}.notification .notification-details .username img{width:14px;height:14px;vertical-align:middle;-o-object-fit:contain;object-fit:contain}.notification .notification-details .timeago{margin-right:.2em}.notification .notification-details .icon-retweet.lit{color:#0fa00f;color:var(--cGreen,#0fa00f)}.notification .notification-details .icon-reply.lit,.notification .notification-details .icon-user-plus.lit,.notification .notification-details .icon-user.lit{color:#0095ff;color:var(--cBlue,#0095ff)}.notification .notification-details .icon-star.lit{color:orange;color:var(--cOrange,orange)}.notification .notification-details .icon-arrow-curved.lit{color:#0095ff;color:var(--cBlue,#0095ff)}.notification .notification-details .status-content{margin:0;max-height:300px}.notification .notification-details h1{word-break:break-all;margin:0 0 .3em;padding:0;font-size:1em;line-height:20px}.notification .notification-details h1 small{font-weight:lighter}.notification .notification-details p{margin:0;margin-top:0;margin-bottom:.3em}",""])},function(t,e,n){var i=n(454);"string"==typeof i&&(i=[[t.i,i,""]]),i.locals&&(t.exports=i.locals);(0,n(5).default)("41041624",i,!0,{})},function(t,e,n){(t.exports=n(4)(!1)).push([t.i,'.Notification.-muted{padding:.25em .6em;height:1.2em;line-height:1.2em;text-overflow:ellipsis;overflow:hidden;display:-ms-flexbox;display:flex;-ms-flex-wrap:nowrap;flex-wrap:nowrap}.Notification.-muted .mute-thread,.Notification.-muted .mute-words,.Notification.-muted .status-username{word-wrap:normal;word-break:normal;white-space:nowrap}.Notification.-muted .mute-words,.Notification.-muted .status-username{text-overflow:ellipsis;overflow:hidden}.Notification.-muted .status-username{font-weight:400;-ms-flex:0 1 auto;flex:0 1 auto;margin-right:.2em;font-size:smaller}.Notification.-muted .mute-thread{-ms-flex:0 0 auto;flex:0 0 auto}.Notification.-muted .mute-words{-ms-flex:1 0 5em;flex:1 0 5em;margin-left:.2em}.Notification.-muted .mute-words:before{content:" "}.Notification.-muted .unmute{-ms-flex:0 0 auto;flex:0 0 auto;margin-left:auto;display:block}',""])},function(t,e,n){var i=n(456);"string"==typeof i&&(i=[[t.i,i,""]]),i.locals&&(t.exports=i.locals);(0,n(5).default)("3a6f72a2",i,!0,{})},function(t,e,n){(t.exports=n(4)(!1)).push([t.i,".chat-list{min-height:25em;margin-bottom:0}.emtpy-chat-list-alert{padding:3em;font-size:1.2em;display:-ms-flexbox;display:flex;-ms-flex-pack:center;justify-content:center;color:#b9b9ba;color:var(--faint,#b9b9ba)}",""])},function(t,e,n){var i=n(458);"string"==typeof i&&(i=[[t.i,i,""]]),i.locals&&(t.exports=i.locals);(0,n(5).default)("33c6b65e",i,!0,{})},function(t,e,n){(t.exports=n(4)(!1)).push([t.i,".chat-list-item{display:-ms-flexbox;display:flex;-ms-flex-direction:row;flex-direction:row;padding:.75em;height:5em;overflow:hidden;box-sizing:border-box;cursor:pointer}.chat-list-item :focus{outline:none}.chat-list-item:hover{background-color:var(--selectedPost,#151e2a);box-shadow:0 0 3px 1px rgba(0,0,0,.1)}.chat-list-item .chat-list-item-left{margin-right:1em}.chat-list-item .chat-list-item-center{width:100%;box-sizing:border-box;overflow:hidden;word-wrap:break-word}.chat-list-item .heading{width:100%;display:-ms-inline-flexbox;display:inline-flex;-ms-flex-pack:justify;justify-content:space-between;line-height:1em}.chat-list-item .heading-right{white-space:nowrap}.chat-list-item .name-and-account-name{text-overflow:ellipsis;white-space:nowrap;overflow:hidden;-ms-flex-negative:1;flex-shrink:1;line-height:1.4em}.chat-list-item .chat-preview{display:-ms-inline-flexbox;display:inline-flex;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;margin:.35em 0;color:#b9b9ba;color:var(--faint,#b9b9ba);width:100%}.chat-list-item a{color:var(--faintLink,#d8a070);text-decoration:none;pointer-events:none}.chat-list-item:hover .animated.avatar canvas{display:none}.chat-list-item:hover .animated.avatar img{visibility:visible}.chat-list-item .Avatar{border-radius:10px;border-radius:var(--avatarAltRadius,10px)}.chat-list-item .StatusContent img.emoji{width:1.4em;height:1.4em}.chat-list-item .time-wrapper{line-height:1.4em}.chat-list-item .single-line{padding-right:1em}",""])},function(t,e,n){var i=n(460);"string"==typeof i&&(i=[[t.i,i,""]]),i.locals&&(t.exports=i.locals);(0,n(5).default)("3dcd538d",i,!0,{})},function(t,e,n){(t.exports=n(4)(!1)).push([t.i,".chat-title{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center}.chat-title,.chat-title .username{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.chat-title .username{max-width:100%;display:inline;word-wrap:break-word}.chat-title .username .emoji{width:14px;height:14px;vertical-align:middle;-o-object-fit:contain;object-fit:contain}.chat-title .Avatar{width:23px;height:23px;margin-right:.5em;border-radius:10px;border-radius:var(--avatarAltRadius,10px)}.chat-title .Avatar.animated:before{display:none}",""])},function(t,e,n){var i=n(462);"string"==typeof i&&(i=[[t.i,i,""]]),i.locals&&(t.exports=i.locals);(0,n(5).default)("ca48b176",i,!0,{})},function(t,e,n){(t.exports=n(4)(!1)).push([t.i,".chat-new .input-wrap{display:-ms-flexbox;display:flex;margin:.7em .5em}.chat-new .input-wrap input{width:100%}.chat-new .icon-search{font-size:1.5em;float:right;margin-right:.3em}.chat-new .member-list{padding-bottom:.7rem}.chat-new .basic-user-card:hover{cursor:pointer;background-color:var(--selectedPost,#151e2a)}.chat-new .go-back-button{cursor:pointer}",""])},function(t,e,n){var i=n(464);"string"==typeof i&&(i=[[t.i,i,""]]),i.locals&&(t.exports=i.locals);(0,n(5).default)("119ab786",i,!0,{})},function(t,e,n){(t.exports=n(4)(!1)).push([t.i,".basic-user-card{display:-ms-flexbox;display:flex;-ms-flex:1 0;flex:1 0;margin:0;padding:.6em 1em}.basic-user-card-collapsed-content{margin-left:.7em;text-align:left;-ms-flex:1;flex:1;min-width:0}.basic-user-card-user-name img{-o-object-fit:contain;object-fit:contain;height:16px;width:16px;vertical-align:middle}.basic-user-card-screen-name,.basic-user-card-user-name-value{display:inline-block;max-width:100%;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.basic-user-card-expanded-content{-ms-flex:1;flex:1;margin-left:.7em;min-width:0}",""])},function(t,e,n){var i=n(466);"string"==typeof i&&(i=[[t.i,i,""]]),i.locals&&(t.exports=i.locals);(0,n(5).default)("33745640",i,!0,{})},function(t,e,n){(t.exports=n(4)(!1)).push([t.i,".list-item:not(:last-child){border-bottom:1px solid;border-bottom-color:#222;border-bottom-color:var(--border,#222)}.list-empty-content{text-align:center;padding:10px}",""])},function(t,e,n){var i=n(468);"string"==typeof i&&(i=[[t.i,i,""]]),i.locals&&(t.exports=i.locals);(0,n(5).default)("0f673926",i,!0,{})},function(t,e,n){(t.exports=n(4)(!1)).push([t.i,".chat-view{display:-ms-flexbox;display:flex;height:calc(100vh - 60px);width:100%}.chat-view .chat-title{height:28px}.chat-view .chat-view-inner{height:auto;margin:.5em .5em 0}.chat-view .chat-view-body,.chat-view .chat-view-inner{width:100%;overflow:visible;display:-ms-flexbox;display:flex}.chat-view .chat-view-body{background-color:var(--chatBg,#121a24);-ms-flex-direction:column;flex-direction:column;min-height:100%;margin:0;border-radius:10px 10px 0 0;border-radius:var(--panelRadius,10px) var(--panelRadius,10px) 0 0}.chat-view .chat-view-body:after{border-radius:0}.chat-view .scrollable-message-list{padding:0 .8em;height:100%;overflow-y:scroll;overflow-x:hidden;display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column}.chat-view .footer{position:-webkit-sticky;position:sticky;bottom:0}.chat-view .chat-view-heading{-ms-flex-align:center;align-items:center;-ms-flex-pack:justify;justify-content:space-between;top:50px;display:-ms-flexbox;display:flex;z-index:2;position:-webkit-sticky;position:sticky;overflow:hidden}.chat-view .go-back-button{cursor:pointer;margin-right:1.4em}.chat-view .go-back-button i,.chat-view .jump-to-bottom-button{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center}.chat-view .jump-to-bottom-button{width:2.5em;height:2.5em;border-radius:100%;position:absolute;right:1.3em;top:-3.2em;background-color:#182230;background-color:var(--btn,#182230);-ms-flex-pack:center;justify-content:center;box-shadow:0 1px 1px rgba(0,0,0,.3),0 2px 4px rgba(0,0,0,.3);z-index:10;transition:all .35s;transition-timing-function:cubic-bezier(0,1,.5,1);opacity:0;visibility:hidden;cursor:pointer}.chat-view .jump-to-bottom-button.visible{opacity:1;visibility:visible}.chat-view .jump-to-bottom-button i{font-size:1em;color:#b9b9ba;color:var(--text,#b9b9ba)}.chat-view .jump-to-bottom-button .unread-message-count{font-size:.8em;left:50%;transform:translate(-50%);border-radius:100%;margin-top:-1rem;padding:0}.chat-view .jump-to-bottom-button .chat-loading-error{width:100%;display:-ms-flexbox;display:flex;-ms-flex-align:end;align-items:flex-end;height:100%}.chat-view .jump-to-bottom-button .chat-loading-error .error{width:100%}@media (max-width:800px){.chat-view{height:100%;overflow:hidden}.chat-view .chat-view-inner{overflow:hidden;height:100%;margin-top:0;margin-left:0;margin-right:0}.chat-view .chat-view-body{display:-ms-flexbox;display:flex;min-height:auto;overflow:hidden;height:100%;margin:0;border-radius:0}.chat-view .chat-view-heading{position:static;z-index:9999;top:0;margin-top:0;border-radius:0}.chat-view .scrollable-message-list{display:unset;overflow-y:scroll;overflow-x:hidden;-webkit-overflow-scrolling:touch}.chat-view .footer{position:-webkit-sticky;position:sticky;bottom:auto}}",""])},function(t,e,n){var i=n(470);"string"==typeof i&&(i=[[t.i,i,""]]),i.locals&&(t.exports=i.locals);(0,n(5).default)("20b81e5e",i,!0,{})},function(t,e,n){(t.exports=n(4)(!1)).push([t.i,'.chat-message-wrapper.hovered-message-chain .animated.Avatar canvas{display:none}.chat-message-wrapper.hovered-message-chain .animated.Avatar img{visibility:visible}.chat-message-wrapper .chat-message-menu{transition:opacity .1s;opacity:0;position:absolute;top:-.8em}.chat-message-wrapper .chat-message-menu button{padding-top:.2em;padding-bottom:.2em}.chat-message-wrapper .icon-ellipsis{cursor:pointer;border-radius:10px;border-radius:var(--chatMessageRadius,10px)}.chat-message-wrapper .icon-ellipsis:hover,.extra-button-popover.open .chat-message-wrapper .icon-ellipsis{color:#b9b9ba;color:var(--text,#b9b9ba)}.chat-message-wrapper .popover{width:12em}.chat-message-wrapper .chat-message{display:-ms-flexbox;display:flex;padding-bottom:.5em}.chat-message-wrapper .avatar-wrapper{margin-right:.72em;width:32px}.chat-message-wrapper .attachments,.chat-message-wrapper .link-preview{margin-bottom:1em}.chat-message-wrapper .chat-message-inner{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;-ms-flex-align:start;align-items:flex-start;max-width:80%;min-width:10em;width:100%}.chat-message-wrapper .chat-message-inner.with-media{width:100%}.chat-message-wrapper .chat-message-inner.with-media .gallery-row{overflow:hidden}.chat-message-wrapper .chat-message-inner.with-media .status{width:100%}.chat-message-wrapper .status{border-radius:10px;border-radius:var(--chatMessageRadius,10px);display:-ms-flexbox;display:flex;padding:.75em}.chat-message-wrapper .created-at{position:relative;float:right;font-size:.8em;margin:-1em 0 -.5em;font-style:italic;opacity:.8}.chat-message-wrapper .without-attachment .status-content:after{margin-right:5.4em;content:" ";display:inline-block}.chat-message-wrapper .incoming a{color:var(--chatMessageIncomingLink,#d8a070)}.chat-message-wrapper .incoming .status{background-color:var(--chatMessageIncomingBg,#121a24);border:1px solid var(--chatMessageIncomingBorder,--border)}.chat-message-wrapper .incoming .created-at a,.chat-message-wrapper .incoming .status{color:var(--chatMessageIncomingText,#b9b9ba)}.chat-message-wrapper .incoming .chat-message-menu{left:.4rem}.chat-message-wrapper .outgoing{display:-ms-flexbox;display:flex;-ms-flex-direction:row;flex-direction:row;-ms-flex-wrap:wrap;flex-wrap:wrap;-ms-flex-line-pack:end;align-content:end;-ms-flex-pack:end;justify-content:flex-end}.chat-message-wrapper .outgoing a{color:var(--chatMessageOutgoingLink,#d8a070)}.chat-message-wrapper .outgoing .status{color:var(--chatMessageOutgoingText,#b9b9ba);background-color:var(--chatMessageOutgoingBg,#151e2a);border:1px solid var(--chatMessageOutgoingBorder,--lightBg)}.chat-message-wrapper .outgoing .chat-message-inner{-ms-flex-align:end;align-items:flex-end}.chat-message-wrapper .outgoing .chat-message-menu{right:.4rem}.chat-message-wrapper .visible{opacity:1}.chat-message-date-separator{text-align:center;margin:1.4em 0;font-size:.9em;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;color:#b9b9ba;color:var(--faintedText,#b9b9ba)}',""])},function(t,e,n){var i=n(472);"string"==typeof i&&(i=[[t.i,i,""]]),i.locals&&(t.exports=i.locals);(0,n(5).default)("7563b46e",i,!0,{})},function(t,e,n){(t.exports=n(4)(!1)).push([t.i,".user-profile{-ms-flex:2;flex:2;-ms-flex-preferred-size:500px;flex-basis:500px}.user-profile .user-profile-fields{margin:0 .5em}.user-profile .user-profile-fields img{-o-object-fit:contain;object-fit:contain;vertical-align:middle;max-width:100%;max-height:400px}.user-profile .user-profile-fields img.emoji{width:18px;height:18px}.user-profile .user-profile-fields .user-profile-field{display:-ms-flexbox;display:flex;margin:.25em auto;max-width:32em;border:1px solid var(--border,#222);border-radius:4px;border-radius:var(--inputRadius,4px)}.user-profile .user-profile-fields .user-profile-field .user-profile-field-name{-ms-flex:0 1 30%;flex:0 1 30%;font-weight:500;text-align:right;color:var(--lightText);min-width:120px;border-right:1px solid var(--border,#222)}.user-profile .user-profile-fields .user-profile-field .user-profile-field-value{-ms-flex:1 1 70%;flex:1 1 70%;color:var(--text);margin:0 0 0 .25em}.user-profile .user-profile-fields .user-profile-field .user-profile-field-name,.user-profile .user-profile-fields .user-profile-field .user-profile-field-value{line-height:18px;text-overflow:ellipsis;white-space:nowrap;overflow:hidden;padding:.5em 1.5em;box-sizing:border-box}.user-profile .userlist-placeholder{-ms-flex-align:middle;align-items:middle;padding:2em}.user-profile .timeline-heading,.user-profile .userlist-placeholder{display:-ms-flexbox;display:flex;-ms-flex-pack:center;justify-content:center}.user-profile .timeline-heading .alert,.user-profile .timeline-heading .loadmore-button{-ms-flex:1;flex:1}.user-profile .timeline-heading .loadmore-button{height:28px;margin:10px .6em}.user-profile .timeline-heading .loadmore-text,.user-profile .timeline-heading .title{display:none}.user-profile-placeholder .panel-body{display:-ms-flexbox;display:flex;-ms-flex-pack:center;justify-content:center;-ms-flex-align:middle;align-items:middle;padding:7em}",""])},function(t,e,n){var i=n(474);"string"==typeof i&&(i=[[t.i,i,""]]),i.locals&&(t.exports=i.locals);(0,n(5).default)("ae955a70",i,!0,{})},function(t,e,n){(t.exports=n(4)(!1)).push([t.i,".follow-card-content-container{-ms-flex-negative:0;flex-shrink:0;display:-ms-flexbox;display:flex;-ms-flex-direction:row;flex-direction:row;-ms-flex-pack:justify;justify-content:space-between;-ms-flex-wrap:wrap;flex-wrap:wrap;line-height:1.5em}.follow-card-follow-button{margin-top:.5em;margin-left:auto;width:10em}",""])},function(t,e,n){},function(t,e,n){},function(t,e,n){var i=n(478);"string"==typeof i&&(i=[[t.i,i,""]]),i.locals&&(t.exports=i.locals);(0,n(5).default)("354d66d6",i,!0,{})},function(t,e,n){(t.exports=n(4)(!1)).push([t.i,".search-result-heading{color:hsla(240,1%,73%,.5);color:var(--faint,hsla(240,1%,73%,.5));padding:.75rem;text-align:center}@media (max-width:800px){.search-nav-heading .tab-switcher .tabs .tab-wrapper{display:block;-ms-flex-pack:center;justify-content:center;-ms-flex:1 1 auto;flex:1 1 auto;text-align:center}}.search-result{box-sizing:border-box;border-bottom:1px solid;border-color:#222;border-color:var(--border,#222)}.search-result-footer{border-width:1px 0 0;border-style:solid;border-color:var(--border,#222);padding:10px;background-color:#182230;background-color:var(--panel,#182230)}.search-input-container{padding:.8rem;display:-ms-flexbox;display:flex;-ms-flex-pack:center;justify-content:center}.search-input-container .search-input{width:100%;line-height:1.125rem;font-size:1rem;padding:.5rem;box-sizing:border-box}.search-input-container .search-button{margin-left:.5em}.loading-icon{padding:1em}.trend{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center}.trend .hashtag{-ms-flex:1 1 auto;flex:1 1 auto;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.trend .count,.trend .hashtag{color:#b9b9ba;color:var(--text,#b9b9ba)}.trend .count{-ms-flex:0 0 auto;flex:0 0 auto;width:2rem;font-size:1.5rem;line-height:2.25rem;font-weight:500;text-align:center}",""])},function(t,e,n){var i=n(480);"string"==typeof i&&(i=[[t.i,i,""]]),i.locals&&(t.exports=i.locals);(0,n(5).default)("16815f76",i,!0,{})},function(t,e,n){(t.exports=n(4)(!1)).push([t.i,'.registration-form{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;margin:.6em}.registration-form .container{display:-ms-flexbox;display:flex;-ms-flex-direction:row;flex-direction:row}.registration-form .terms-of-service{-ms-flex:0 1 50%;flex:0 1 50%;margin:.8em}.registration-form .text-fields{margin-top:.6em;-ms-flex:1 0;flex:1 0;display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column}.registration-form textarea{min-height:100px;resize:vertical}.registration-form .form-group{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;padding:.3em 0;line-height:24px;margin-bottom:1em}.registration-form .form-group--error{animation-name:shakeError;animation-duration:.6s;animation-timing-function:ease-in-out}.registration-form .form-group--error .form--label{color:#f04124;color:var(--cRed,#f04124)}.registration-form .form-error{margin-top:-.7em;text-align:left}.registration-form .form-error span{font-size:12px}.registration-form .form-error ul{list-style:none;padding:0 0 0 5px;margin-top:0}.registration-form .form-error ul li:before{content:"\\2022 "}.registration-form form textarea{line-height:16px;resize:vertical}.registration-form .captcha{max-width:350px;margin-bottom:.4em}.registration-form .btn{margin-top:.6em;height:28px}.registration-form .error{text-align:center}@media (max-width:800px){.registration-form .container{-ms-flex-direction:column-reverse;flex-direction:column-reverse}}',""])},,,,,,,,,,,,,,,,,,,,,,,,,function(t,e,n){var i=n(506);"string"==typeof i&&(i=[[t.i,i,""]]),i.locals&&(t.exports=i.locals);(0,n(5).default)("1ef4fd93",i,!0,{})},function(t,e,n){(t.exports=n(4)(!1)).push([t.i,".password-reset-form{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;-ms-flex-align:center;align-items:center;margin:.6em}.password-reset-form .container{display:-ms-flexbox;display:flex;-ms-flex:1 0;flex:1 0;-ms-flex-direction:column;flex-direction:column;margin-top:.6em;max-width:18rem}.password-reset-form .form-group{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;margin-bottom:1em;padding:.3em 0;line-height:24px}.password-reset-form .error{text-align:center;animation-name:shakeError;animation-duration:.4s;animation-timing-function:ease-in-out}.password-reset-form .alert{padding:.5em;margin:.3em 0 1em}.password-reset-form .password-reset-required{background-color:var(--alertError,rgba(211,16,20,.5));padding:10px 0}.password-reset-form .notice-dismissible{padding-right:2rem}.password-reset-form .icon-cancel{cursor:pointer}",""])},function(t,e,n){var i=n(508);"string"==typeof i&&(i=[[t.i,i,""]]),i.locals&&(t.exports=i.locals);(0,n(5).default)("ad510f10",i,!0,{})},function(t,e,n){(t.exports=n(4)(!1)).push([t.i,".follow-request-card-content-container{display:-ms-flexbox;display:flex;-ms-flex-direction:row;flex-direction:row;-ms-flex-wrap:wrap;flex-wrap:wrap}.follow-request-card-content-container button{margin-top:.5em;margin-right:.5em;-ms-flex:1 1;flex:1 1;max-width:12em;min-width:8em}.follow-request-card-content-container button:last-child{margin-right:0}",""])},function(t,e,n){var i=n(510);"string"==typeof i&&(i=[[t.i,i,""]]),i.locals&&(t.exports=i.locals);(0,n(5).default)("42704024",i,!0,{})},function(t,e,n){(t.exports=n(4)(!1)).push([t.i,".login-form{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;padding:.6em}.login-form .btn{min-height:28px;width:10em}.login-form .register{-ms-flex:1 1;flex:1 1}.login-form .login-bottom{margin-top:1em;display:-ms-flexbox;display:flex;-ms-flex-direction:row;flex-direction:row;-ms-flex-align:center;align-items:center;-ms-flex-pack:justify;justify-content:space-between}.login-form .form-group{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;padding:.3em .5em .6em;line-height:24px}.login-form .form-bottom{display:-ms-flexbox;display:flex;padding:.5em;height:32px}.login-form .form-bottom button{width:10em}.login-form .form-bottom p{margin:.35em;padding:.35em;display:-ms-flexbox;display:flex}.login-form .error{text-align:center;animation-name:shakeError;animation-duration:.4s;animation-timing-function:ease-in-out}",""])},function(t,e,n){var i=n(512);"string"==typeof i&&(i=[[t.i,i,""]]),i.locals&&(t.exports=i.locals);(0,n(5).default)("2c0040e1",i,!0,{})},function(t,e,n){(t.exports=n(4)(!1)).push([t.i,".floating-chat{position:fixed;right:0;bottom:0;z-index:1000;max-width:25em}.chat-panel .chat-heading{cursor:pointer}.chat-panel .chat-heading .icon-comment-empty{color:#b9b9ba;color:var(--text,#b9b9ba)}.chat-panel .chat-window{overflow-y:auto;overflow-x:hidden;max-height:20em}.chat-panel .chat-window-container{height:100%}.chat-panel .chat-message{display:-ms-flexbox;display:flex;padding:.2em .5em}.chat-panel .chat-avatar img{height:24px;width:24px;border-radius:4px;border-radius:var(--avatarRadius,4px);margin-right:.5em;margin-top:.25em}.chat-panel .chat-input{display:-ms-flexbox;display:flex}.chat-panel .chat-input textarea{-ms-flex:1;flex:1;margin:.6em;min-height:3.5em;resize:none}.chat-panel .chat-panel .title{display:-ms-flexbox;display:flex;-ms-flex-pack:justify;justify-content:space-between}",""])},function(t,e,n){var i=n(514);"string"==typeof i&&(i=[[t.i,i,""]]),i.locals&&(t.exports=i.locals);(0,n(5).default)("c74f4f44",i,!0,{})},function(t,e,n){(t.exports=n(4)(!1)).push([t.i,"",""])},function(t,e,n){var i=n(516);"string"==typeof i&&(i=[[t.i,i,""]]),i.locals&&(t.exports=i.locals);(0,n(5).default)("7dfaed97",i,!0,{})},function(t,e,n){(t.exports=n(4)(!1)).push([t.i,"",""])},function(t,e,n){var i=n(518);"string"==typeof i&&(i=[[t.i,i,""]]),i.locals&&(t.exports=i.locals);(0,n(5).default)("55ca8508",i,!0,{})},function(t,e,n){(t.exports=n(4)(!1)).push([t.i,".features-panel li{line-height:24px}",""])},function(t,e,n){var i=n(520);"string"==typeof i&&(i=[[t.i,i,""]]),i.locals&&(t.exports=i.locals);(0,n(5).default)("42aabc98",i,!0,{})},function(t,e,n){(t.exports=n(4)(!1)).push([t.i,".tos-content{margin:1em}",""])},function(t,e,n){var i=n(522);"string"==typeof i&&(i=[[t.i,i,""]]),i.locals&&(t.exports=i.locals);(0,n(5).default)("5aa588af",i,!0,{})},function(t,e,n){(t.exports=n(4)(!1)).push([t.i,"",""])},function(t,e,n){var i=n(524);"string"==typeof i&&(i=[[t.i,i,""]]),i.locals&&(t.exports=i.locals);(0,n(5).default)("72647543",i,!0,{})},function(t,e,n){(t.exports=n(4)(!1)).push([t.i,".mrf-section{margin:1em}",""])},function(t,e,n){var i=n(526);"string"==typeof i&&(i=[[t.i,i,""]]),i.locals&&(t.exports=i.locals);(0,n(5).default)("67a8aa3d",i,!0,{})},function(t,e,n){(t.exports=n(4)(!1)).push([t.i,"",""])},function(t,e,n){var i=n(528);"string"==typeof i&&(i=[[t.i,i,""]]),i.locals&&(t.exports=i.locals);(0,n(5).default)("5c806d03",i,!0,{})},function(t,e,n){(t.exports=n(4)(!1)).push([t.i,'#app{min-height:100vh;max-width:100%;overflow:hidden}.app-bg-wrapper{position:fixed;z-index:-1;height:100%;left:0;right:-20px;background-size:cover;background-repeat:no-repeat;background-position:0 50%}i[class^=icon-]{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}h4{margin:0}#content{box-sizing:border-box;padding-top:60px;margin:auto;min-height:100vh;max-width:980px;-ms-flex-line-pack:start;align-content:flex-start}.underlay{background-color:rgba(0,0,0,.15);background-color:var(--underlay,rgba(0,0,0,.15))}.text-center{text-align:center}html{font-size:14px}body{overscroll-behavior-y:none;font-family:sans-serif;font-family:var(--interfaceFont,sans-serif);margin:0;color:#b9b9ba;color:var(--text,#b9b9ba);max-width:100vw;overflow-x:hidden;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}body.hidden{display:none}a{text-decoration:none;color:#d8a070;color:var(--link,#d8a070)}button{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;background-color:#182230;background-color:var(--btn,#182230);border:none;border-radius:4px;border-radius:var(--btnRadius,4px);cursor:pointer;box-shadow:0 0 2px 0 #000,inset 0 1px 0 0 hsla(0,0%,100%,.2),inset 0 -1px 0 0 rgba(0,0,0,.2);box-shadow:var(--buttonShadow);font-size:14px;font-family:sans-serif;font-family:var(--interfaceFont,sans-serif)}button,button i[class*=icon-]{color:#b9b9ba;color:var(--btnText,#b9b9ba)}button::-moz-focus-inner{border:none}button:hover{box-shadow:0 0 4px hsla(0,0%,100%,.3);box-shadow:var(--buttonHoverShadow)}button:active{box-shadow:0 0 4px 0 hsla(0,0%,100%,.3),inset 0 1px 0 0 rgba(0,0,0,.2),inset 0 -1px 0 0 hsla(0,0%,100%,.2);box-shadow:var(--buttonPressedShadow);background-color:#182230;background-color:var(--btnPressed,#182230)}button:active,button:active i{color:#b9b9ba;color:var(--btnPressedText,#b9b9ba)}button:disabled{cursor:not-allowed;background-color:#182230;background-color:var(--btnDisabled,#182230)}button:disabled,button:disabled i{color:#b9b9ba;color:var(--btnDisabledText,#b9b9ba)}button.toggled{background-color:#182230;background-color:var(--btnToggled,#182230);box-shadow:0 0 4px 0 hsla(0,0%,100%,.3),inset 0 1px 0 0 rgba(0,0,0,.2),inset 0 -1px 0 0 hsla(0,0%,100%,.2);box-shadow:var(--buttonPressedShadow)}button.toggled,button.toggled i{color:#b9b9ba;color:var(--btnToggledText,#b9b9ba)}button.danger{color:#b9b9ba;color:var(--alertErrorPanelText,#b9b9ba);background-color:rgba(211,16,20,.5);background-color:var(--alertError,rgba(211,16,20,.5))}.input,.select,input,textarea{border:none;border-radius:4px;border-radius:var(--inputRadius,4px);box-shadow:inset 0 1px 0 0 rgba(0,0,0,.2),inset 0 -1px 0 0 hsla(0,0%,100%,.2),inset 0 0 2px 0 #000;box-shadow:var(--inputShadow);background-color:#182230;background-color:var(--input,#182230);color:#b9b9ba;color:var(--inputText,#b9b9ba);font-family:sans-serif;font-family:var(--inputFont,sans-serif);font-size:14px;margin:0;box-sizing:border-box;display:inline-block;position:relative;height:28px;line-height:16px;-webkit-hyphens:none;-ms-hyphens:none;hyphens:none;padding:8px .5em}.input.unstyled,.select.unstyled,input.unstyled,textarea.unstyled{border-radius:0;background:none;box-shadow:none;height:unset}.input.select,.select.select,input.select,textarea.select{padding:0}.input:disabled,.input[disabled=disabled],.select:disabled,.select[disabled=disabled],input:disabled,input[disabled=disabled],textarea:disabled,textarea[disabled=disabled]{cursor:not-allowed;opacity:.5}.input .icon-down-open,.select .icon-down-open,input .icon-down-open,textarea .icon-down-open{position:absolute;top:0;bottom:0;right:5px;height:100%;color:#b9b9ba;color:var(--inputText,#b9b9ba);line-height:28px;z-index:0;pointer-events:none}.input select,.select select,input select,textarea select{-webkit-appearance:none;-moz-appearance:none;appearance:none;background:transparent;border:none;color:#b9b9ba;color:var(--inputText,--text,#b9b9ba);margin:0;padding:0 2em 0 .2em;font-family:sans-serif;font-family:var(--inputFont,sans-serif);font-size:14px;width:100%;z-index:1;height:28px;line-height:16px}.input[type=range],.select[type=range],input[type=range],textarea[type=range]{background:none;border:none;margin:0;box-shadow:none;-ms-flex:1;flex:1}.input[type=radio],.select[type=radio],input[type=radio],textarea[type=radio]{display:none}.input[type=radio]:checked+label:before,.select[type=radio]:checked+label:before,input[type=radio]:checked+label:before,textarea[type=radio]:checked+label:before{box-shadow:inset 0 0 2px #000,inset 0 0 0 4px #182230;box-shadow:var(--inputShadow),0 0 0 4px var(--fg,#182230) inset;background-color:var(--accent,#d8a070)}.input[type=radio]:disabled,.input[type=radio]:disabled+label,.input[type=radio]:disabled+label:before,.select[type=radio]:disabled,.select[type=radio]:disabled+label,.select[type=radio]:disabled+label:before,input[type=radio]:disabled,input[type=radio]:disabled+label,input[type=radio]:disabled+label:before,textarea[type=radio]:disabled,textarea[type=radio]:disabled+label,textarea[type=radio]:disabled+label:before{opacity:.5}.input[type=radio]+label:before,.select[type=radio]+label:before,input[type=radio]+label:before,textarea[type=radio]+label:before{-ms-flex-negative:0;flex-shrink:0;display:inline-block;content:"";transition:box-shadow .2s;width:1.1em;height:1.1em;border-radius:100%;box-shadow:inset 0 0 2px #000;box-shadow:var(--inputShadow);margin-right:.5em;background-color:#182230;background-color:var(--input,#182230);vertical-align:top;text-align:center;line-height:1.1em;font-size:1.1em;color:transparent;overflow:hidden;box-sizing:border-box}.input[type=checkbox],.select[type=checkbox],input[type=checkbox],textarea[type=checkbox]{display:none}.input[type=checkbox]:checked+label:before,.select[type=checkbox]:checked+label:before,input[type=checkbox]:checked+label:before,textarea[type=checkbox]:checked+label:before{color:#b9b9ba;color:var(--inputText,#b9b9ba)}.input[type=checkbox]:disabled,.input[type=checkbox]:disabled+label,.input[type=checkbox]:disabled+label:before,.select[type=checkbox]:disabled,.select[type=checkbox]:disabled+label,.select[type=checkbox]:disabled+label:before,input[type=checkbox]:disabled,input[type=checkbox]:disabled+label,input[type=checkbox]:disabled+label:before,textarea[type=checkbox]:disabled,textarea[type=checkbox]:disabled+label,textarea[type=checkbox]:disabled+label:before{opacity:.5}.input[type=checkbox]+label:before,.select[type=checkbox]+label:before,input[type=checkbox]+label:before,textarea[type=checkbox]+label:before{-ms-flex-negative:0;flex-shrink:0;display:inline-block;content:"\\2714";transition:color .2s;width:1.1em;height:1.1em;border-radius:2px;border-radius:var(--checkboxRadius,2px);box-shadow:inset 0 0 2px #000;box-shadow:var(--inputShadow);margin-right:.5em;background-color:#182230;background-color:var(--input,#182230);vertical-align:top;text-align:center;line-height:1.1em;font-size:1.1em;color:transparent;overflow:hidden;box-sizing:border-box}option{color:#b9b9ba;color:var(--text,#b9b9ba);background-color:#121a24;background-color:var(--bg,#121a24)}.hide-number-spinner{-moz-appearance:textfield}.hide-number-spinner[type=number]::-webkit-inner-spin-button,.hide-number-spinner[type=number]::-webkit-outer-spin-button{opacity:0;display:none}i[class*=icon-]{color:#666;color:var(--icon,#666)}.btn-block{display:block;width:100%}.btn-group{position:relative;display:-ms-inline-flexbox;display:inline-flex;vertical-align:middle}.btn-group button{position:relative;-ms-flex:1 1 auto;flex:1 1 auto}.btn-group button:not(:last-child){border-top-right-radius:0;border-bottom-right-radius:0}.btn-group button:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.container{-ms-flex-wrap:wrap;flex-wrap:wrap;margin:0;padding:0 10px}.container,.item{display:-ms-flexbox;display:flex}.item{-ms-flex:1;flex:1;line-height:50px;height:50px;overflow:hidden;-ms-flex-wrap:wrap;flex-wrap:wrap}.item .nav-icon{margin-left:.4em}.item.right{-ms-flex-pack:end;justify-content:flex-end}.auto-size{-ms-flex:1;flex:1}.nav-bar{padding:0;width:100%;-ms-flex-align:center;align-items:center;position:fixed;height:50px;box-sizing:border-box}.nav-bar button,.nav-bar button i[class*=icon-]{color:#b9b9ba;color:var(--btnTopBarText,#b9b9ba)}.nav-bar button:active{background-color:#182230;background-color:var(--btnPressedTopBar,#182230);color:#b9b9ba;color:var(--btnPressedTopBarText,#b9b9ba)}.nav-bar button:disabled{color:#b9b9ba;color:var(--btnDisabledTopBarText,#b9b9ba)}.nav-bar button.toggled{color:#b9b9ba;color:var(--btnToggledTopBarText,#b9b9ba);background-color:#182230;background-color:var(--btnToggledTopBar,#182230)}.nav-bar .logo{display:-ms-flexbox;display:flex;-ms-flex-align:stretch;align-items:stretch;-ms-flex-pack:center;justify-content:center;-ms-flex:0 0 auto;flex:0 0 auto;z-index:-1;transition:opacity;transition-timing-function:ease-out;transition-duration:.1s}.nav-bar .logo,.nav-bar .logo .mask{position:absolute;top:0;bottom:0;left:0;right:0}.nav-bar .logo .mask{-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-position:center;mask-position:center;-webkit-mask-size:contain;mask-size:contain;background-color:#182230;background-color:var(--topBarText,#182230)}.nav-bar .logo img{height:100%;-o-object-fit:contain;object-fit:contain;display:block;-ms-flex:0;flex:0}.nav-bar .inner-nav{position:relative;margin:auto;box-sizing:border-box;padding-left:10px;padding-right:10px;display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;-ms-flex-preferred-size:970px;flex-basis:970px;height:50px}.nav-bar .inner-nav a,.nav-bar .inner-nav a i{color:#d8a070;color:var(--topBarLink,#d8a070)}main-router{-ms-flex:1;flex:1}.status.compact{color:rgba(0,0,0,.42);font-weight:300}.status.compact p{margin:0;font-size:.8em}.panel{display:-ms-flexbox;display:flex;position:relative;-ms-flex-direction:column;flex-direction:column;margin:.5em;background-color:#121a24;background-color:var(--bg,#121a24)}.panel,.panel:after{border-radius:10px;border-radius:var(--panelRadius,10px)}.panel:after{content:"";position:absolute;top:0;bottom:0;left:0;right:0;pointer-events:none;box-shadow:1px 1px 4px rgba(0,0,0,.6);box-shadow:var(--panelShadow)}.panel-body:empty:before{content:"\\AF\\\\_(\\30C4)_/\\AF";display:block;margin:1em;text-align:center}.panel-heading{display:-ms-flexbox;display:flex;-ms-flex:none;flex:none;border-radius:10px 10px 0 0;border-radius:var(--panelRadius,10px) var(--panelRadius,10px) 0 0;background-size:cover;padding:.6em;text-align:left;line-height:28px;color:var(--panelText);background-color:#182230;background-color:var(--panel,#182230);-ms-flex-align:baseline;align-items:baseline;box-shadow:var(--panelHeaderShadow)}.panel-heading .title{-ms-flex:1 0 auto;flex:1 0 auto;font-size:1.3em}.panel-heading .faint{background-color:transparent;color:hsla(240,1%,73%,.5);color:var(--panelFaint,hsla(240,1%,73%,.5))}.panel-heading .faint-link{color:hsla(240,1%,73%,.5);color:var(--faintLink,hsla(240,1%,73%,.5))}.panel-heading .alert{white-space:nowrap;text-overflow:ellipsis;overflow-x:hidden}.panel-heading button{-ms-flex-negative:0;flex-shrink:0}.panel-heading .alert,.panel-heading button{line-height:21px;min-height:0;box-sizing:border-box;margin:0;margin-left:.5em;min-width:1px;-ms-flex-item-align:stretch;-ms-grid-row-align:stretch;align-self:stretch}.panel-heading button,.panel-heading button i[class*=icon-]{color:#b9b9ba;color:var(--btnPanelText,#b9b9ba)}.panel-heading button:active{background-color:#182230;background-color:var(--btnPressedPanel,#182230);color:#b9b9ba;color:var(--btnPressedPanelText,#b9b9ba)}.panel-heading button:disabled{color:#b9b9ba;color:var(--btnDisabledPanelText,#b9b9ba)}.panel-heading button.toggled{color:#b9b9ba;color:var(--btnToggledPanelText,#b9b9ba)}.panel-heading a{color:#d8a070;color:var(--panelLink,#d8a070)}.panel-heading.stub{border-radius:10px;border-radius:var(--panelRadius,10px)}.panel-footer{border-radius:0 0 10px 10px;border-radius:0 0 var(--panelRadius,10px) var(--panelRadius,10px)}.panel-footer .faint{color:hsla(240,1%,73%,.5);color:var(--panelFaint,hsla(240,1%,73%,.5))}.panel-footer a{color:#d8a070;color:var(--panelLink,#d8a070)}.panel-body>p{line-height:18px;padding:1em;margin:0}.container>*{min-width:0}.fa{color:grey}nav{z-index:1000;color:var(--topBarText);background-color:#182230;background-color:var(--topBar,#182230);color:hsla(240,1%,73%,.5);color:var(--faint,hsla(240,1%,73%,.5));box-shadow:0 0 4px rgba(0,0,0,.6);box-shadow:var(--topBarShadow)}.fade-enter-active,.fade-leave-active{transition:opacity .2s}.fade-enter,.fade-leave-active{opacity:0}.main{-ms-flex-preferred-size:50%;flex-basis:50%;-ms-flex-positive:1;flex-grow:1;-ms-flex-negative:1;flex-shrink:1}.sidebar-bounds{-ms-flex:0;flex:0;-ms-flex-preferred-size:35%;flex-basis:35%}.sidebar-flexer{-ms-flex:1;flex:1;-ms-flex-preferred-size:345px;flex-basis:345px;width:365px}.mobile-shown{display:none}@media (min-width:800px){body{overflow-y:scroll}.sidebar-bounds{overflow:hidden;max-height:100vh;width:345px;position:fixed;margin-top:-10px}.sidebar-bounds .sidebar-scroller{height:96vh;width:365px;padding-top:10px;padding-right:50px;overflow-x:hidden;overflow-y:scroll}.sidebar-bounds .sidebar{width:345px}.sidebar-flexer{max-height:96vh;-ms-flex-negative:0;flex-shrink:0;-ms-flex-positive:0;flex-grow:0}}.badge{display:inline-block;border-radius:99px;min-width:22px;max-width:22px;min-height:22px;max-height:22px;font-size:15px;line-height:22px;text-align:center;vertical-align:middle;white-space:nowrap;padding:0}.badge.badge-notification{background-color:red;background-color:var(--badgeNotification,red);color:#fff;color:var(--badgeNotificationText,#fff)}.alert{margin:.35em;padding:.25em;border-radius:5px;border-radius:var(--tooltipRadius,5px);min-height:28px;line-height:28px}.alert.error{background-color:rgba(211,16,20,.5);background-color:var(--alertError,rgba(211,16,20,.5));color:#b9b9ba;color:var(--alertErrorText,#b9b9ba)}.panel-heading .alert.error{color:#b9b9ba;color:var(--alertErrorPanelText,#b9b9ba)}.alert.warning{background-color:rgba(111,111,20,.5);background-color:var(--alertWarning,rgba(111,111,20,.5));color:#b9b9ba;color:var(--alertWarningText,#b9b9ba)}.panel-heading .alert.warning{color:#b9b9ba;color:var(--alertWarningPanelText,#b9b9ba)}.faint,.faint-link{color:hsla(240,1%,73%,.5);color:var(--faint,hsla(240,1%,73%,.5))}.faint-link:hover{text-decoration:underline}@media (min-width:800px){.logo{opacity:1!important}}.item.right{text-align:right}.visibility-notice{padding:.5em;border:1px solid hsla(240,1%,73%,.5);border:1px solid var(--faint,hsla(240,1%,73%,.5));border-radius:4px;border-radius:var(--inputRadius,4px)}.notice-dismissible{padding-right:4rem;position:relative}.notice-dismissible .dismiss{position:absolute;top:0;right:0;padding:.5em;color:inherit}.button-icon{font-size:1.2em}@keyframes shakeError{0%{transform:translateX(0)}15%{transform:translateX(.375rem)}30%{transform:translateX(-.375rem)}45%{transform:translateX(.375rem)}60%{transform:translateX(-.375rem)}75%{transform:translateX(.375rem)}90%{transform:translateX(-.375rem)}to{transform:translateX(0)}}@media (max-width:800px){.mobile-hidden{display:none}.panel-switcher{display:-ms-flexbox;display:flex}.container{padding:0}.panel{margin:.5em 0}.menu-button{display:block;margin-right:.8em}.main{margin-bottom:7em}}.select-multiple{display:-ms-flexbox;display:flex}.select-multiple .option-list{margin:0;padding-left:.5em}.option-list,.setting-list{list-style-type:none;padding-left:2em}.option-list li,.setting-list li{margin-bottom:.5em}.option-list .suboptions,.setting-list .suboptions{margin-top:.3em}.login-hint{text-align:center}@media (min-width:801px){.login-hint{display:none}}.login-hint a{display:inline-block;padding:1em 0;width:100%}.btn.btn-default{min-height:28px}.animate-spin{animation:spin 2s infinite linear;display:inline-block}@keyframes spin{0%{transform:rotate(0deg)}to{transform:rotate(359deg)}}.new-status-notification{position:relative;margin-top:-1px;font-size:1.1em;border-width:1px 0 0;border-style:solid;border-color:var(--border,#222);padding:10px;z-index:1;background-color:#182230;background-color:var(--panel,#182230)}.unread-chat-count{font-size:.9em;font-weight:bolder;font-style:normal;position:absolute;right:.6rem;padding:0 .3em;min-width:1.3rem;min-height:1.3rem;max-height:1.3rem;line-height:1.3rem}.chat-layout{overflow:hidden;height:100%}@media (max-width:800px){.chat-layout body{height:100%}.chat-layout #app{height:100%;overflow:hidden;min-height:auto}.chat-layout #app_bg_wrapper{overflow:hidden}.chat-layout .main{overflow:hidden;height:100%}.chat-layout #content{padding-top:0;height:100%;overflow:visible}}',""])},function(t,e,n){var i=n(530);"string"==typeof i&&(i=[[t.i,i,""]]),i.locals&&(t.exports=i.locals);(0,n(5).default)("04d46dee",i,!0,{})},function(t,e,n){(t.exports=n(4)(!1)).push([t.i,".user-panel .signed-in{overflow:visible}",""])},function(t,e,n){var i=n(532);"string"==typeof i&&(i=[[t.i,i,""]]),i.locals&&(t.exports=i.locals);(0,n(5).default)("b030addc",i,!0,{})},function(t,e,n){(t.exports=n(4)(!1)).push([t.i,".nav-panel .panel{overflow:hidden;box-shadow:var(--panelShadow)}.nav-panel ul{list-style:none;margin:0;padding:0}.follow-request-count{margin:-6px 10px;background-color:#121a24;background-color:var(--input,hsla(240,1%,73%,.5))}.nav-panel li{border-bottom:1px solid;border-color:#222;border-color:var(--border,#222);padding:0}.nav-panel li:first-child a{border-top-right-radius:10px;border-top-right-radius:var(--panelRadius,10px);border-top-left-radius:10px;border-top-left-radius:var(--panelRadius,10px)}.nav-panel li:last-child a{border-bottom-right-radius:10px;border-bottom-right-radius:var(--panelRadius,10px);border-bottom-left-radius:10px;border-bottom-left-radius:var(--panelRadius,10px)}.nav-panel li:last-child{border:none}.nav-panel a{display:block;padding:.8em .85em}.nav-panel a:hover{color:#d8a070;color:var(--selectedMenuText,#d8a070)}.nav-panel a.router-link-active,.nav-panel a:hover{background-color:#151e2a;background-color:var(--selectedMenu,#151e2a);--faint:var(--selectedMenuFaintText,$fallback--faint);--faintLink:var(--selectedMenuFaintLink,$fallback--faint);--lightText:var(--selectedMenuLightText,$fallback--lightText);--icon:var(--selectedMenuIcon,$fallback--icon)}.nav-panel a.router-link-active{font-weight:bolder;color:#b9b9ba;color:var(--selectedMenuText,#b9b9ba)}.nav-panel a.router-link-active:hover{text-decoration:underline}.nav-panel .button-icon:before{width:1.1em}",""])},function(t,e,n){var i=n(534);"string"==typeof i&&(i=[[t.i,i,""]]),i.locals&&(t.exports=i.locals);(0,n(5).default)("0ea9aafc",i,!0,{})},function(t,e,n){(t.exports=n(4)(!1)).push([t.i,".search-bar-container{max-width:100%;display:-ms-inline-flexbox;display:inline-flex;-ms-flex-align:baseline;align-items:baseline;vertical-align:baseline;-ms-flex-pack:end;justify-content:flex-end}.search-bar-container .search-bar-input,.search-bar-container .search-button{height:29px}.search-bar-container .search-bar-input{max-width:calc(100% - 30px - 30px - 20px)}.search-bar-container .search-button{margin-left:.5em;margin-right:.5em}.search-bar-container .icon-cancel{cursor:pointer}",""])},function(t,e,n){var i=n(536);"string"==typeof i&&(i=[[t.i,i,""]]),i.locals&&(t.exports=i.locals);(0,n(5).default)("2f18dd03",i,!0,{})},function(t,e,n){(t.exports=n(4)(!1)).push([t.i,".who-to-follow *{vertical-align:middle}.who-to-follow img{width:32px;height:32px}.who-to-follow{padding:0 1em;margin:0}.who-to-follow-items{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;padding:0;margin:1em 0}.who-to-follow-more{padding:0;margin:1em 0;text-align:center}",""])},,,,function(t,e,n){var i=n(541);"string"==typeof i&&(i=[[t.i,i,""]]),i.locals&&(t.exports=i.locals);(0,n(5).default)("7272e6fe",i,!0,{})},function(t,e,n){(t.exports=n(4)(!1)).push([t.i,".settings-modal{overflow:hidden}.settings-modal.peek .settings-modal-panel{transform:translateY(calc(((100vh - 100%) / 2 + 100%) - 50px))}@media (max-width:800px){.settings-modal.peek .settings-modal-panel{transform:translateY(calc(100% - 50px))}}.settings-modal .settings-modal-panel{overflow:hidden;transition:transform;transition-timing-function:ease-in-out;transition-duration:.3s;width:1000px;max-width:90vw;height:90vh}@media (max-width:800px){.settings-modal .settings-modal-panel{max-width:100vw;height:100%}}.settings-modal .settings-modal-panel>.panel-body{height:100%;overflow-y:hidden}.settings-modal .settings-modal-panel>.panel-body .btn{min-height:28px;min-width:10em;padding:0 2em}",""])},function(t,e,n){var i=n(543);"string"==typeof i&&(i=[[t.i,i,""]]),i.locals&&(t.exports=i.locals);(0,n(5).default)("f7395e92",i,!0,{})},function(t,e,n){(t.exports=n(4)(!1)).push([t.i,".modal-view{z-index:1000;position:fixed;top:0;left:0;right:0;bottom:0;display:-ms-flexbox;display:flex;-ms-flex-pack:center;justify-content:center;-ms-flex-align:center;align-items:center;overflow:auto;pointer-events:none;animation-duration:.2s;animation-name:modal-background-fadein;opacity:0}.modal-view>*{pointer-events:auto}.modal-view.modal-background{pointer-events:auto;background-color:rgba(0,0,0,.5)}.modal-view.open{opacity:1}@keyframes modal-background-fadein{0%{background-color:transparent}to{background-color:rgba(0,0,0,.5)}}",""])},function(t,e,n){var i=n(545);"string"==typeof i&&(i=[[t.i,i,""]]),i.locals&&(t.exports=i.locals);(0,n(5).default)("1c82888b",i,!0,{})},function(t,e,n){(t.exports=n(4)(!1)).push([t.i,".panel-loading{display:-ms-flexbox;display:flex;height:100%;-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center;font-size:2em;color:#b9b9ba;color:var(--text,#b9b9ba)}.panel-loading .loading-text i{font-size:3em;line-height:0;vertical-align:middle;color:#b9b9ba;color:var(--text,#b9b9ba)}",""])},function(t,e,n){var i=n(547);"string"==typeof i&&(i=[[t.i,i,""]]),i.locals&&(t.exports=i.locals);(0,n(5).default)("2970b266",i,!0,{})},function(t,e,n){(t.exports=n(4)(!1)).push([t.i,".async-component-error{display:-ms-flexbox;display:flex;height:100%;-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center}.async-component-error .btn{margin:.5em;padding:.5em 2em}",""])},function(t,e,n){var i=n(549);"string"==typeof i&&(i=[[t.i,i,""]]),i.locals&&(t.exports=i.locals);(0,n(5).default)("23b00cfc",i,!0,{})},function(t,e,n){(t.exports=n(4)(!1)).push([t.i,".modal-view.media-modal-view{z-index:1001}.modal-view.media-modal-view .modal-view-button-arrow{opacity:.75}.modal-view.media-modal-view .modal-view-button-arrow:focus,.modal-view.media-modal-view .modal-view-button-arrow:hover{outline:none;box-shadow:none}.modal-view.media-modal-view .modal-view-button-arrow:hover{opacity:1}.modal-image{max-width:90%;max-height:90%;box-shadow:0 5px 15px 0 rgba(0,0,0,.5);image-orientation:from-image}.modal-view-button-arrow{position:absolute;display:block;top:50%;margin-top:-50px;width:70px;height:100px;border:0;padding:0;opacity:0;box-shadow:none;background:none;-webkit-appearance:none;-moz-appearance:none;appearance:none;overflow:visible;cursor:pointer;transition:opacity 333ms cubic-bezier(.4,0,.22,1)}.modal-view-button-arrow .arrow-icon{position:absolute;top:35px;height:30px;width:32px;font-size:14px;line-height:30px;color:#fff;text-align:center;background-color:rgba(0,0,0,.3)}.modal-view-button-arrow--prev{left:0}.modal-view-button-arrow--prev .arrow-icon{left:6px}.modal-view-button-arrow--next{right:0}.modal-view-button-arrow--next .arrow-icon{right:6px}",""])},function(t,e,n){var i=n(551);"string"==typeof i&&(i=[[t.i,i,""]]),i.locals&&(t.exports=i.locals);(0,n(5).default)("34992fba",i,!0,{})},function(t,e,n){(t.exports=n(4)(!1)).push([t.i,".side-drawer-container{position:fixed;z-index:1000;top:0;left:0;width:100%;height:100%;display:-ms-flexbox;display:flex;-ms-flex-align:stretch;align-items:stretch;transition-duration:0s;transition-property:transform}.side-drawer-container-open{transform:translate(0)}.side-drawer-container-closed{transition-delay:.35s;transform:translate(-100%)}.side-drawer-darken{top:0;left:0;width:100vw;height:100vh;position:fixed;z-index:-1;transition:.35s;transition-property:background-color;background-color:rgba(0,0,0,.5)}.side-drawer-darken-closed{background-color:transparent}.side-drawer-click-outside{-ms-flex:1 1 100%;flex:1 1 100%}.side-drawer{overflow-x:hidden;transition-timing-function:cubic-bezier(0,1,.5,1);transition:.35s;transition-property:transform;margin:0 0 0 -100px;padding:0 0 1em 100px;width:80%;max-width:20em;-ms-flex:0 0 80%;flex:0 0 80%;box-shadow:1px 1px 4px rgba(0,0,0,.6);box-shadow:var(--panelShadow);background-color:#121a24;background-color:var(--popover,#121a24);color:#d8a070;color:var(--popoverText,#d8a070);--faint:var(--popoverFaintText,$fallback--faint);--faintLink:var(--popoverFaintLink,$fallback--faint);--lightText:var(--popoverLightText,$fallback--lightText);--icon:var(--popoverIcon,$fallback--icon)}.side-drawer .button-icon:before{width:1.1em}.side-drawer-logo-wrapper{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;padding:.85em}.side-drawer-logo-wrapper img{-ms-flex:none;flex:none;height:50px;margin-right:.85em}.side-drawer-logo-wrapper span{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.side-drawer-click-outside-closed{-ms-flex:0 0 0px;flex:0 0 0}.side-drawer-closed{transform:translate(-100%)}.side-drawer-heading{background:transparent;-ms-flex-direction:column;flex-direction:column;-ms-flex-align:stretch;align-items:stretch;display:-ms-flexbox;display:flex;padding:0;margin:0}.side-drawer ul{list-style:none;margin:0;padding:0;border-bottom:1px solid;border-color:#222;border-color:var(--border,#222);margin:.2em 0}.side-drawer ul:last-child{border:0}.side-drawer li{padding:0}.side-drawer li a{display:block;padding:.5em .85em}.side-drawer li a:hover{background-color:#151e2a;background-color:var(--selectedMenuPopover,#151e2a);color:#b9b9ba;color:var(--selectedMenuPopoverText,#b9b9ba);--faint:var(--selectedMenuPopoverFaintText,$fallback--faint);--faintLink:var(--selectedMenuPopoverFaintLink,$fallback--faint);--lightText:var(--selectedMenuPopoverLightText,$fallback--lightText);--icon:var(--selectedMenuPopoverIcon,$fallback--icon)}",""])},function(t,e,n){var i=n(553);"string"==typeof i&&(i=[[t.i,i,""]]),i.locals&&(t.exports=i.locals);(0,n(5).default)("7f8eca07",i,!0,{})},function(t,e,n){(t.exports=n(4)(!1)).push([t.i,".new-status-button{width:5em;height:5em;border-radius:100%;position:fixed;bottom:1.5em;right:1.5em;background-color:#182230;background-color:var(--btn,#182230);display:-ms-flexbox;display:flex;-ms-flex-pack:center;justify-content:center;-ms-flex-align:center;align-items:center;box-shadow:0 2px 2px rgba(0,0,0,.3),0 4px 6px rgba(0,0,0,.3);z-index:10;transition:transform .35s;transition-timing-function:cubic-bezier(0,1,.5,1)}.new-status-button.hidden{transform:translateY(150%)}.new-status-button i{font-size:1.5em;color:#b9b9ba;color:var(--text,#b9b9ba)}@media (min-width:801px){.new-status-button{display:none}}",""])},function(t,e,n){var i=n(555);"string"==typeof i&&(i=[[t.i,i,""]]),i.locals&&(t.exports=i.locals);(0,n(5).default)("1e0fbcf8",i,!0,{})},function(t,e,n){(t.exports=n(4)(!1)).push([t.i,".mobile-inner-nav{width:100%;display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center}.mobile-nav-button{display:-ms-flexbox;display:flex;-ms-flex-pack:center;justify-content:center;width:50px;position:relative;cursor:pointer}.alert-dot{border-radius:100%;height:8px;width:8px;position:absolute;left:calc(50% - 4px);top:calc(50% - 4px);margin-left:6px;margin-top:-6px;background-color:red;background-color:var(--badgeNotification,red)}.mobile-notifications-drawer{width:100%;height:100vh;overflow-x:hidden;position:fixed;top:0;left:0;box-shadow:1px 1px 4px rgba(0,0,0,.6);box-shadow:var(--panelShadow);transition-property:transform;transition-duration:.25s;transform:translateX(0);z-index:1001;-webkit-overflow-scrolling:touch}.mobile-notifications-drawer.closed{transform:translateX(100%)}.mobile-notifications-header{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;-ms-flex-pack:justify;justify-content:space-between;z-index:1;width:100%;height:50px;line-height:50px;position:absolute;color:var(--topBarText);background-color:#182230;background-color:var(--topBar,#182230);box-shadow:0 0 4px rgba(0,0,0,.6);box-shadow:var(--topBarShadow)}.mobile-notifications-header .title{font-size:1.3em;margin-left:.6em}.mobile-notifications{margin-top:50px;width:100vw;height:calc(100vh - 50px);overflow-x:hidden;overflow-y:scroll;color:#b9b9ba;color:var(--text,#b9b9ba);background-color:#121a24;background-color:var(--bg,#121a24)}.mobile-notifications .notifications{padding:0;border-radius:0;box-shadow:none}.mobile-notifications .notifications .panel{border-radius:0;margin:0;box-shadow:none}.mobile-notifications .notifications .panel:after{border-radius:0}.mobile-notifications .notifications .panel .panel-heading{border-radius:0;box-shadow:none}",""])},function(t,e,n){var i=n(557);"string"==typeof i&&(i=[[t.i,i,""]]),i.locals&&(t.exports=i.locals);(0,n(5).default)("10c04f96",i,!0,{})},function(t,e,n){(t.exports=n(4)(!1)).push([t.i,".user-reporting-panel{width:90vw;max-width:700px;min-height:20vh;max-height:80vh}.user-reporting-panel .panel-heading .title{text-align:center;-ms-flex:1;flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.user-reporting-panel .panel-body{display:-ms-flexbox;display:flex;-ms-flex-direction:column-reverse;flex-direction:column-reverse;border-top:1px solid;border-color:#222;border-color:var(--border,#222);overflow:hidden}.user-reporting-panel-left{padding:1.1em .7em .7em;line-height:1.4em;box-sizing:border-box}.user-reporting-panel-left>div{margin-bottom:1em}.user-reporting-panel-left>div:last-child{margin-bottom:0}.user-reporting-panel-left p{margin-top:0}.user-reporting-panel-left textarea.form-control{line-height:16px;resize:none;overflow:hidden;transition:min-height .2s .1s;min-height:44px;width:100%}.user-reporting-panel-left .btn{min-width:10em;padding:0 2em}.user-reporting-panel-left .alert{margin:1em 0 0;line-height:1.3em}.user-reporting-panel-right{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;overflow-y:auto}.user-reporting-panel-sitem{display:-ms-flexbox;display:flex;-ms-flex-pack:justify;justify-content:space-between}.user-reporting-panel-sitem>.Status{-ms-flex:1;flex:1}.user-reporting-panel-sitem>.checkbox{margin:.75em}@media (min-width:801px){.user-reporting-panel .panel-body{-ms-flex-direction:row;flex-direction:row}.user-reporting-panel-left{width:50%;max-width:320px;border-right:1px solid;border-color:#222;border-color:var(--border,#222);padding:1.1em}.user-reporting-panel-left>div{margin-bottom:2em}.user-reporting-panel-right{width:50%;-ms-flex:1 1 auto;flex:1 1 auto;margin-bottom:12px}}",""])},function(t,e,n){var i=n(559);"string"==typeof i&&(i=[[t.i,i,""]]),i.locals&&(t.exports=i.locals);(0,n(5).default)("7628c2ae",i,!0,{})},function(t,e,n){(t.exports=n(4)(!1)).push([t.i,".modal-view.post-form-modal-view{-ms-flex-align:start;align-items:flex-start}.post-form-modal-panel{-ms-flex-negative:0;flex-shrink:0;margin-top:25%;margin-bottom:2em;width:100%;max-width:700px}@media (orientation:landscape){.post-form-modal-panel{margin-top:8%}}",""])},function(t,e,n){var i=n(561);"string"==typeof i&&(i=[[t.i,i,""]]),i.locals&&(t.exports=i.locals);(0,n(5).default)("cdffaf96",i,!0,{})},function(t,e,n){(t.exports=n(4)(!1)).push([t.i,".global-notice-list{position:fixed;top:50px;width:100%;pointer-events:none;z-index:1001;display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;-ms-flex-align:center;align-items:center}.global-notice-list .global-notice{pointer-events:auto;text-align:center;width:40em;max-width:calc(100% - 3em);display:-ms-flexbox;display:flex;padding-left:1.5em;line-height:2em}.global-notice-list .global-notice .notice-message{-ms-flex:1 1 100%;flex:1 1 100%}.global-notice-list .global-notice i{-ms-flex:0 0;flex:0 0;width:1.5em;cursor:pointer}.global-notice-list .global-error{background-color:var(--alertPopupError,red)}.global-notice-list .global-error,.global-notice-list .global-error i{color:var(--alertPopupErrorText,#b9b9ba)}.global-notice-list .global-warning{background-color:var(--alertPopupWarning,orange)}.global-notice-list .global-warning,.global-notice-list .global-warning i{color:var(--alertPopupWarningText,#b9b9ba)}.global-notice-list .global-info{background-color:var(--alertPopupNeutral,#182230)}.global-notice-list .global-info,.global-notice-list .global-info i{color:var(--alertPopupNeutralText,#b9b9ba)}",""])},function(t,e,n){"use strict";n.r(e);var i=n(3),o=n.n(i),r=n(6),s=n.n(r),a=n(108),c=n(2),l=(n(226),n(197));try{new EventTarget}catch(t){window.EventTarget=l.a}var u={state:{settingsModalState:"hidden",settingsModalLoaded:!1,settingsModalTargetTab:null,settings:{currentSaveStateNotice:null,noticeClearTimeout:null,notificationPermission:null},browserSupport:{cssFilter:window.CSS&&window.CSS.supports&&(window.CSS.supports("filter","drop-shadow(0 0)")||window.CSS.supports("-webkit-filter","drop-shadow(0 0)"))},mobileLayout:!1,globalNotices:[],layoutHeight:0,lastTimeline:null},mutations:{settingsSaved:function(t,e){var n=e.success,i=e.error;n?(t.noticeClearTimeout&&clearTimeout(t.noticeClearTimeout),Object(r.set)(t.settings,"currentSaveStateNotice",{error:!1,data:n}),Object(r.set)(t.settings,"noticeClearTimeout",setTimeout(function(){return Object(r.delete)(t.settings,"currentSaveStateNotice")},2e3))):Object(r.set)(t.settings,"currentSaveStateNotice",{error:!0,errorData:i})},setNotificationPermission:function(t,e){t.notificationPermission=e},setMobileLayout:function(t,e){t.mobileLayout=e},closeSettingsModal:function(t){t.settingsModalState="hidden"},togglePeekSettingsModal:function(t){switch(t.settingsModalState){case"minimized":return void(t.settingsModalState="visible");case"visible":return void(t.settingsModalState="minimized");default:throw new Error("Illegal minimization state of settings modal")}},openSettingsModal:function(t){t.settingsModalState="visible",t.settingsModalLoaded||(t.settingsModalLoaded=!0)},setSettingsModalTargetTab:function(t,e){t.settingsModalTargetTab=e},pushGlobalNotice:function(t,e){t.globalNotices.push(e)},removeGlobalNotice:function(t,e){t.globalNotices=t.globalNotices.filter(function(t){return t!==e})},setLayoutHeight:function(t,e){t.layoutHeight=e},setLastTimeline:function(t,e){t.lastTimeline=e}},actions:{setPageTitle:function(t){var e=t.rootState,n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"";document.title="".concat(n," ").concat(e.instance.name)},settingsSaved:function(t,e){var n=t.commit;t.dispatch;n("settingsSaved",{success:e.success,error:e.error})},setNotificationPermission:function(t,e){(0,t.commit)("setNotificationPermission",e)},setMobileLayout:function(t,e){(0,t.commit)("setMobileLayout",e)},closeSettingsModal:function(t){(0,t.commit)("closeSettingsModal")},openSettingsModal:function(t){(0,t.commit)("openSettingsModal")},togglePeekSettingsModal:function(t){(0,t.commit)("togglePeekSettingsModal")},clearSettingsModalTargetTab:function(t){(0,t.commit)("setSettingsModalTargetTab",null)},openSettingsModalTab:function(t,e){var n=t.commit;n("setSettingsModalTargetTab",e),n("openSettingsModal")},pushGlobalNotice:function(t,e){var n=t.commit,i=t.dispatch,o=e.messageKey,r=e.messageArgs,s=void 0===r?{}:r,a=e.level,c=void 0===a?"error":a,l=e.timeout,u=void 0===l?0:l,d={messageKey:o,messageArgs:s,level:c};return u&&setTimeout(function(){return i("removeGlobalNotice",d)},u),n("pushGlobalNotice",d),d},removeGlobalNotice:function(t,e){(0,t.commit)("removeGlobalNotice",e)},setLayoutHeight:function(t,e){(0,t.commit)("setLayoutHeight",e)},setLastTimeline:function(t,e){(0,t.commit)("setLastTimeline",e)}}},d=n(10),p=n.n(d),f=n(1),h=n.n(f),m=n(7),g=n.n(m),v=n(32),b=n(39),w=n(11),_=n(95);function x(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(t);e&&(i=i.filter(function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})),n.push.apply(n,i)}return n}var y={state:{name:"Pleroma FE",registrationOpen:!0,server:"http://localhost:4040/",textlimit:5e3,themeData:void 0,vapidPublicKey:void 0,alwaysShowSubjectInput:!0,defaultAvatar:"/images/avi.png",defaultBanner:"/images/banner.png",background:"/static/aurora_borealis.jpg",collapseMessageWithSubject:!1,disableChat:!1,greentext:!1,hideFilteredStatuses:!1,hideMutedPosts:!1,hidePostStats:!1,hideSitename:!1,hideUserStats:!1,loginMethod:"password",logo:"/static/logo.png",logoMargin:".2em",logoMask:!0,minimalScopesMode:!1,nsfwCensorImage:void 0,postContentType:"text/plain",redirectRootLogin:"/main/friends",redirectRootNoLogin:"/main/all",scopeCopy:!0,showFeaturesPanel:!0,showInstanceSpecificPanel:!1,sidebarRight:!1,subjectLineBehavior:"email",theme:"pleroma-dark",customEmoji:[],customEmojiFetched:!1,emoji:[],emojiFetched:!1,pleromaBackend:!0,postFormats:[],restrictedNicknames:[],safeDM:!0,knownDomains:[],chatAvailable:!1,pleromaChatMessagesAvailable:!1,gopherAvailable:!1,mediaProxyAvailable:!1,suggestionsEnabled:!1,suggestionsWeb:"",instanceSpecificPanelContent:"",tos:"",backendVersion:"",frontendVersion:"",pollsAvailable:!1,pollLimits:{max_options:4,max_option_chars:255,min_expiration:60,max_expiration:86400}},mutations:{setInstanceOption:function(t,e){var n=e.name,i=e.value;void 0!==i&&Object(r.set)(t,n,i)},setKnownDomains:function(t,e){t.knownDomains=e}},getters:{instanceDefaultConfig:function(t){return _.c.map(function(e){return[e,t[e]]}).reduce(function(t,e){var n=g()(e,2),i=n[0],o=n[1];return function(t){for(var e=1;ee?1:0}):["utf"],replacement:":".concat(i,": ")}}).sort(function(t,e){return t.displayText.toLowerCase()>e.displayText.toLowerCase()?1:0}),e("setInstanceOption",{name:"customEmoji",value:a}),c.next=15;break;case 14:throw i;case 15:c.next=21;break;case 17:c.prev=17,c.t0=c.catch(1),console.warn("Can't load custom emojis"),console.warn(c.t0);case 21:case"end":return c.stop()}},null,null,[[1,17]])},setTheme:function(t,e){var n=t.commit,i=t.rootState;n("setInstanceOption",{name:"theme",value:e}),Object(v.j)(e).then(function(t){if(n("setInstanceOption",{name:"themeData",value:t}),!i.config.customTheme){var e=t.source;!t.theme||e&&e.themeEngineVersion===b.a?Object(v.b)(e):Object(v.b)(t.theme)}})},fetchEmoji:function(t){var e=t.dispatch,n=t.state;n.customEmojiFetched||(n.customEmojiFetched=!0,e("getCustomEmoji")),n.emojiFetched||(n.emojiFetched=!0,e("getStaticEmoji"))},getKnownDomains:function(t){var e,n,i;return o.a.async(function(r){for(;;)switch(r.prev=r.next){case 0:return e=t.commit,n=t.rootState,r.prev=1,r.next=4,o.a.awrap(w.c.fetchKnownDomains({credentials:n.users.currentUser.credentials}));case 4:i=r.sent,e("setKnownDomains",i),r.next=12;break;case 8:r.prev=8,r.t0=r.catch(1),console.warn("Can't load known domains"),console.warn(r.t0);case 12:case"end":return r.stop()}},null,null,[[1,8]])}}},k=n(101),C=n.n(k),S=n(13),j=n.n(S),O=n(23),P=n.n(O),$=n(203),T=n.n($),I=n(96),E=n.n(I),M=n(102),U=n.n(M),F=n(103),D=n.n(F),L=n(25),N=n.n(L),R=n(45),A=n.n(R),B=n(24),z=n.n(B),H=n(204),q=n.n(H),W=n(47),V=n.n(W),G=n(19);function K(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(t);e&&(i=i.filter(function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})),n.push.apply(n,i)}return n}function Y(t){for(var e=1;e0&&void 0!==arguments[0]?arguments[0]:0,flushMarker:0}},X=function(){return{desktopNotificationSilence:!0,maxId:0,minId:Number.POSITIVE_INFINITY,data:[],idStore:{},loading:!1,error:!1}},Q=function(){return{allStatuses:[],allStatusesObject:{},conversationsObject:{},maxId:0,notifications:X(),favorites:new Set,error:!1,errorData:null,timelines:{mentions:J(),public:J(),user:J(),favorites:J(),media:J(),publicAndExternal:J(),friends:J(),tag:J(),dms:J(),bookmarks:J()}}},Z=function(t,e,n){var i,o=e[n.id];return o?(E()(o,C()(n,function(t,e){return null===t||"user"===e})),o.attachments.splice(o.attachments.length),{item:o,new:!1}):((i=n).deleted=!1,i.attachments=i.attachments||[],t.push(n),Object(r.set)(e,n.id,n),{item:n,new:!0})},tt=function(t,e){var n=Number(t.id),i=Number(e.id),o=!Number.isNaN(n),r=!Number.isNaN(i);return o&&r?n>i?-1:1:o&&!r?1:!o&&r?-1:t.id>e.id?-1:1},et=function(t){return t.visibleStatuses=t.visibleStatuses.sort(tt),t.statuses=t.statuses.sort(tt),t.minVisibleId=(P()(t.visibleStatuses)||{}).id,t},nt=function(t,e){var n=Z(t.allStatuses,t.allStatusesObject,e);if(n.new){var i=n.item,o=t.conversationsObject,s=i.statusnet_conversation_id;o[s]?o[s].push(i):Object(r.set)(o,s,[i])}return n},it={addNewStatuses:function(t,e){var n=e.statuses,i=e.showImmediately,o=void 0!==i&&i,r=e.timeline,s=e.user,a=void 0===s?{}:s,c=e.noIdUpdate,l=void 0!==c&&c,u=e.userId,d=e.pagination,p=void 0===d?{}:d;if(!j()(n))return!1;var f=t.allStatuses,h=t.timelines[r],m=p.maxId||(n.length>0?U()(n,"id").id:0),g=p.minId||(n.length>0?D()(n,"id").id:0),v=r&&(g>h.maxId||0===h.maxId)&&n.length>0,b=r&&(m0;if(!l&&v&&(h.maxId=g),!l&&b&&(h.minId=m),"user"!==r&&"media"!==r||h.userId===u){var w=function(e,n){var i,o=!(arguments.length>2&&void 0!==arguments[2])||arguments[2],s=nt(t,e),c=s.item;if(s.new){if("status"===c.type&&N()(c.attentions,{id:a.id})){var l=t.timelines.mentions;h!==l&&(Z(l.statuses,l.statusesObject,c),l.newStatusCount+=1,et(l))}if("direct"===c.visibility){var u=t.timelines.dms;Z(u.statuses,u.statusesObject,c),u.newStatusCount+=1,et(u)}}return r&&o&&(i=Z(h.statuses,h.statusesObject,c)),r&&n?Z(h.visibleStatuses,h.visibleStatusesObject,c):r&&o&&i.new&&(h.newStatusCount+=1),c},_={status:function(t){w(t,o)},retweet:function(t){var e,n=w(t.retweeted_status,!1,!1);e=r&&N()(h.statuses,function(t){return t.retweeted_status?t.id===n.id||t.retweeted_status.id===n.id:t.id===n.id})?w(t,!1,!1):w(t,o),e.retweeted_status=n},favorite:function(e){t.favorites.has(e.id)||(t.favorites.add(e.id),function(t,e){var n=N()(f,{id:t.in_reply_to_status_id});n&&(t.user.id===a.id?n.favorited=!0:n.fave_num+=1)}(e))},deletion:function(e){var n=e.uri,i=N()(f,{uri:n});i&&(function(t,e){V()(t.allStatuses,{id:e.id}),V()(t.notifications.data,function(t){return t.action.id===e.id});var n=e.statusnet_conversation_id;t.conversationsObject[n]&&V()(t.conversationsObject[n],{id:e.id})}(t,i),r&&(V()(h.statuses,{uri:n}),V()(h.visibleStatuses,{uri:n})))},follow:function(t){},default:function(t){console.log("unknown status type"),console.log(t)}};z()(n,function(t){var e=t.type;(_[e]||_.default)(t)}),r&&"bookmarks"!==r&&et(h)}},addNewNotifications:function(t,e){var n=e.dispatch,i=e.notifications,o=(e.older,e.visibleNotificationTypes,e.rootGetters,e.newNotificationSideEffects);z()(i,function(e){Object(G.b)(e.type)&&(e.action=nt(t,e.action).item,e.status=e.status&&nt(t,e.status).item),"pleroma:emoji_reaction"===e.type&&n("fetchEmojiReactionsBy",e.status.id),t.notifications.idStore.hasOwnProperty(e.id)?e.seen&&(t.notifications.idStore[e.id].seen=!0):(t.notifications.maxId=e.id>t.notifications.maxId?e.id:t.notifications.maxId,t.notifications.minId=e.id0?P()(o.visibleStatuses).id:0,o.maxId=o.statuses.length>0?T()(o.statuses).id:0)},showNewStatuses:function(t,e){var n=e.timeline,i=t.timelines[n];i.newStatusCount=0,i.visibleStatuses=q()(i.statuses,0,50),i.minVisibleId=P()(i.visibleStatuses).id,i.minId=i.minVisibleId,i.visibleStatusesObject={},z()(i.visibleStatuses,function(t){i.visibleStatusesObject[t.id]=t})},resetStatuses:function(t){var e=Q();Object.entries(e).forEach(function(e){var n=g()(e,2),i=n[0],o=n[1];t[i]=o})},clearTimeline:function(t,e){var n=e.timeline,i=e.excludeUserId,o=void 0!==i&&i?t.timelines[n].userId:void 0;t.timelines[n]=J(o)},clearNotifications:function(t){t.notifications=X()},setFavorited:function(t,e){var n=e.status,i=e.value,o=t.allStatusesObject[n.id];o.favorited!==i&&(i?o.fave_num++:o.fave_num--),o.favorited=i},setFavoritedConfirm:function(t,e){var n=e.status,i=e.user,o=t.allStatusesObject[n.id];o.favorited=n.favorited,o.fave_num=n.fave_num;var r=A()(o.favoritedBy,{id:i.id});-1===r||o.favorited?-1===r&&o.favorited&&o.favoritedBy.push(i):o.favoritedBy.splice(r,1)},setMutedStatus:function(t,e){var n=t.allStatusesObject[e.id];n.thread_muted=e.thread_muted,void 0!==n.thread_muted&&t.conversationsObject[n.statusnet_conversation_id].forEach(function(t){t.thread_muted=n.thread_muted})},setRetweeted:function(t,e){var n=e.status,i=e.value,o=t.allStatusesObject[n.id];o.repeated!==i&&(i?o.repeat_num++:o.repeat_num--),o.repeated=i},setRetweetedConfirm:function(t,e){var n=e.status,i=e.user,o=t.allStatusesObject[n.id];o.repeated=n.repeated,o.repeat_num=n.repeat_num;var r=A()(o.rebloggedBy,{id:i.id});-1===r||o.repeated?-1===r&&o.repeated&&o.rebloggedBy.push(i):o.rebloggedBy.splice(r,1)},setBookmarked:function(t,e){var n=e.status,i=e.value;t.allStatusesObject[n.id].bookmarked=i},setBookmarkedConfirm:function(t,e){var n=e.status;t.allStatusesObject[n.id].bookmarked=n.bookmarked},setDeleted:function(t,e){var n=e.status,i=t.allStatusesObject[n.id];i&&(i.deleted=!0)},setManyDeleted:function(t,e){Object.values(t.allStatusesObject).forEach(function(t){e(t)&&(t.deleted=!0)})},setLoading:function(t,e){var n=e.timeline,i=e.value;t.timelines[n].loading=i},setNsfw:function(t,e){var n=e.id,i=e.nsfw;t.allStatusesObject[n].nsfw=i},setError:function(t,e){var n=e.value;t.error=n},setErrorData:function(t,e){var n=e.value;t.errorData=n},setNotificationsLoading:function(t,e){var n=e.value;t.notifications.loading=n},setNotificationsError:function(t,e){var n=e.value;t.notifications.error=n},setNotificationsSilence:function(t,e){var n=e.value;t.notifications.desktopNotificationSilence=n},markNotificationsAsSeen:function(t){z()(t.notifications.data,function(t){t.seen=!0})},markSingleNotificationAsSeen:function(t,e){var n=e.id,i=N()(t.notifications.data,function(t){return t.id===n});i&&(i.seen=!0)},dismissNotification:function(t,e){var n=e.id;t.notifications.data=t.notifications.data.filter(function(t){return t.id!==n})},dismissNotifications:function(t,e){var n=e.finder;t.notifications.data=t.notifications.data.filter(function(t){return n})},updateNotification:function(t,e){var n=e.id,i=e.updater,o=N()(t.notifications.data,function(t){return t.id===n});o&&i(o)},queueFlush:function(t,e){var n=e.timeline,i=e.id;t.timelines[n].flushMarker=i},queueFlushAll:function(t){Object.keys(t.timelines).forEach(function(e){t.timelines[e].flushMarker=t.timelines[e].maxId})},addRepeats:function(t,e){var n=e.id,i=e.rebloggedByUsers,o=e.currentUser,r=t.allStatusesObject[n];r.rebloggedBy=i.filter(function(t){return t}),r.repeat_num=r.rebloggedBy.length,r.repeated=!!r.rebloggedBy.find(function(t){var e=t.id;return o.id===e})},addFavs:function(t,e){var n=e.id,i=e.favoritedByUsers,o=e.currentUser,r=t.allStatusesObject[n];r.favoritedBy=i.filter(function(t){return t}),r.fave_num=r.favoritedBy.length,r.favorited=!!r.favoritedBy.find(function(t){var e=t.id;return o.id===e})},addEmojiReactionsBy:function(t,e){var n=e.id,i=e.emojiReactions,o=(e.currentUser,t.allStatusesObject[n]);Object(r.set)(o,"emoji_reactions",i)},addOwnReaction:function(t,e){var n=e.id,i=e.emoji,o=e.currentUser,s=t.allStatusesObject[n],a=A()(s.emoji_reactions,{name:i}),c=s.emoji_reactions[a]||{name:i,count:0,accounts:[]},l=Y({},c,{count:c.count+1,me:!0,accounts:[].concat(p()(c.accounts),[o])});a>=0?Object(r.set)(s.emoji_reactions,a,l):Object(r.set)(s,"emoji_reactions",[].concat(p()(s.emoji_reactions),[l]))},removeOwnReaction:function(t,e){var n=e.id,i=e.emoji,o=e.currentUser,s=t.allStatusesObject[n],a=A()(s.emoji_reactions,{name:i});if(!(a<0)){var c=s.emoji_reactions[a],l=c.accounts||[],u=Y({},c,{count:c.count-1,me:!1,accounts:l.filter(function(t){return t.id!==o.id})});u.count>0?Object(r.set)(s.emoji_reactions,a,u):Object(r.set)(s,"emoji_reactions",s.emoji_reactions.filter(function(t){return t.name!==i}))}},updateStatusWithPoll:function(t,e){var n=e.id,i=e.poll;t.allStatusesObject[n].poll=i}},ot={state:Q(),actions:{addNewStatuses:function(t,e){var n=t.rootState,i=t.commit,o=e.statuses,r=e.showImmediately,s=void 0!==r&&r,a=e.timeline,c=void 0!==a&&a,l=e.noIdUpdate,u=void 0!==l&&l,d=e.userId,p=e.pagination;i("addNewStatuses",{statuses:o,showImmediately:s,timeline:c,noIdUpdate:u,user:n.users.currentUser,userId:d,pagination:p})},addNewNotifications:function(t,e){var n=e.notifications,i=e.older;(0,t.commit)("addNewNotifications",{dispatch:t.dispatch,notifications:n,older:i,rootGetters:t.rootGetters,newNotificationSideEffects:function(e){Object(G.c)(t,e)}})},setError:function(t,e){t.rootState;(0,t.commit)("setError",{value:e.value})},setErrorData:function(t,e){t.rootState;(0,t.commit)("setErrorData",{value:e.value})},setNotificationsLoading:function(t,e){t.rootState;(0,t.commit)("setNotificationsLoading",{value:e.value})},setNotificationsError:function(t,e){t.rootState;(0,t.commit)("setNotificationsError",{value:e.value})},setNotificationsSilence:function(t,e){t.rootState;(0,t.commit)("setNotificationsSilence",{value:e.value})},fetchStatus:function(t,e){var n=t.rootState,i=t.dispatch;return n.api.backendInteractor.fetchStatus({id:e}).then(function(t){return i("addNewStatuses",{statuses:[t]})})},deleteStatus:function(t,e){var n=t.rootState;(0,t.commit)("setDeleted",{status:e}),w.c.deleteStatus({id:e.id,credentials:n.users.currentUser.credentials})},markStatusesAsDeleted:function(t,e){(0,t.commit)("setManyDeleted",e)},favorite:function(t,e){var n=t.rootState,i=t.commit;i("setFavorited",{status:e,value:!0}),n.api.backendInteractor.favorite({id:e.id}).then(function(t){return i("setFavoritedConfirm",{status:t,user:n.users.currentUser})})},unfavorite:function(t,e){var n=t.rootState,i=t.commit;i("setFavorited",{status:e,value:!1}),n.api.backendInteractor.unfavorite({id:e.id}).then(function(t){return i("setFavoritedConfirm",{status:t,user:n.users.currentUser})})},fetchPinnedStatuses:function(t,e){var n=t.rootState,i=t.dispatch;n.api.backendInteractor.fetchPinnedStatuses({id:e}).then(function(t){return i("addNewStatuses",{statuses:t,timeline:"user",userId:e,showImmediately:!0,noIdUpdate:!0})})},pinStatus:function(t,e){var n=t.rootState,i=t.dispatch;return n.api.backendInteractor.pinOwnStatus({id:e}).then(function(t){return i("addNewStatuses",{statuses:[t]})})},unpinStatus:function(t,e){var n=t.rootState,i=t.dispatch;n.api.backendInteractor.unpinOwnStatus({id:e}).then(function(t){return i("addNewStatuses",{statuses:[t]})})},muteConversation:function(t,e){var n=t.rootState,i=t.commit;return n.api.backendInteractor.muteConversation({id:e}).then(function(t){return i("setMutedStatus",t)})},unmuteConversation:function(t,e){var n=t.rootState,i=t.commit;return n.api.backendInteractor.unmuteConversation({id:e}).then(function(t){return i("setMutedStatus",t)})},retweet:function(t,e){var n=t.rootState,i=t.commit;i("setRetweeted",{status:e,value:!0}),n.api.backendInteractor.retweet({id:e.id}).then(function(t){return i("setRetweetedConfirm",{status:t.retweeted_status,user:n.users.currentUser})})},unretweet:function(t,e){var n=t.rootState,i=t.commit;i("setRetweeted",{status:e,value:!1}),n.api.backendInteractor.unretweet({id:e.id}).then(function(t){return i("setRetweetedConfirm",{status:t,user:n.users.currentUser})})},bookmark:function(t,e){var n=t.rootState,i=t.commit;i("setBookmarked",{status:e,value:!0}),n.api.backendInteractor.bookmarkStatus({id:e.id}).then(function(t){i("setBookmarkedConfirm",{status:t})})},unbookmark:function(t,e){var n=t.rootState,i=t.commit;i("setBookmarked",{status:e,value:!1}),n.api.backendInteractor.unbookmarkStatus({id:e.id}).then(function(t){i("setBookmarkedConfirm",{status:t})})},queueFlush:function(t,e){t.rootState;(0,t.commit)("queueFlush",{timeline:e.timeline,id:e.id})},queueFlushAll:function(t){t.rootState;(0,t.commit)("queueFlushAll")},markNotificationsAsSeen:function(t){var e=t.rootState;(0,t.commit)("markNotificationsAsSeen"),w.c.markNotificationsAsSeen({id:e.statuses.notifications.maxId,credentials:e.users.currentUser.credentials})},markSingleNotificationAsSeen:function(t,e){var n=t.rootState,i=t.commit,o=e.id;i("markSingleNotificationAsSeen",{id:o}),w.c.markNotificationsAsSeen({single:!0,id:o,credentials:n.users.currentUser.credentials})},dismissNotificationLocal:function(t,e){t.rootState;(0,t.commit)("dismissNotification",{id:e.id})},dismissNotification:function(t,e){var n=t.rootState,i=t.commit,o=e.id;i("dismissNotification",{id:o}),n.api.backendInteractor.dismissNotification({id:o})},updateNotification:function(t,e){t.rootState;(0,t.commit)("updateNotification",{id:e.id,updater:e.updater})},fetchFavsAndRepeats:function(t,e){var n=t.rootState,i=t.commit;Promise.all([n.api.backendInteractor.fetchFavoritedByUsers({id:e}),n.api.backendInteractor.fetchRebloggedByUsers({id:e})]).then(function(t){var o=g()(t,2),r=o[0],s=o[1];i("addFavs",{id:e,favoritedByUsers:r,currentUser:n.users.currentUser}),i("addRepeats",{id:e,rebloggedByUsers:s,currentUser:n.users.currentUser})})},reactWithEmoji:function(t,e){var n=t.rootState,i=t.dispatch,o=t.commit,r=e.id,s=e.emoji,a=n.users.currentUser;a&&(o("addOwnReaction",{id:r,emoji:s,currentUser:a}),n.api.backendInteractor.reactWithEmoji({id:r,emoji:s}).then(function(t){i("fetchEmojiReactionsBy",r)}))},unreactWithEmoji:function(t,e){var n=t.rootState,i=t.dispatch,o=t.commit,r=e.id,s=e.emoji,a=n.users.currentUser;a&&(o("removeOwnReaction",{id:r,emoji:s,currentUser:a}),n.api.backendInteractor.unreactWithEmoji({id:r,emoji:s}).then(function(t){i("fetchEmojiReactionsBy",r)}))},fetchEmojiReactionsBy:function(t,e){var n=t.rootState,i=t.commit;n.api.backendInteractor.fetchEmojiReactions({id:e}).then(function(t){i("addEmojiReactionsBy",{id:e,emojiReactions:t,currentUser:n.users.currentUser})})},fetchFavs:function(t,e){var n=t.rootState,i=t.commit;n.api.backendInteractor.fetchFavoritedByUsers({id:e}).then(function(t){return i("addFavs",{id:e,favoritedByUsers:t,currentUser:n.users.currentUser})})},fetchRepeats:function(t,e){var n=t.rootState,i=t.commit;n.api.backendInteractor.fetchRebloggedByUsers({id:e}).then(function(t){return i("addRepeats",{id:e,rebloggedByUsers:t,currentUser:n.users.currentUser})})},search:function(t,e){var n=e.q,i=e.resolve,o=e.limit,r=e.offset,s=e.following;return t.rootState.api.backendInteractor.search2({q:n,resolve:i,limit:o,offset:r,following:s}).then(function(e){return t.commit("addNewUsers",e.accounts),t.commit("addNewStatuses",{statuses:e.statuses}),e})}},mutations:it},rt=n(77),st=n.n(rt),at=n(76),ct=n.n(at),lt=n(115),ut=n.n(lt),dt=n(15),pt=n.n(dt),ft=n(137),ht=n.n(ft),mt=n(116),gt=n.n(mt),vt=function(t){var e=t.store,n=t.credentials,i=t.timeline,o=void 0===i?"friends":i,r=t.older,s=void 0!==r&&r,a=t.showImmediately,c=void 0!==a&&a,l=t.userId,u=void 0!==l&&l,d=t.tag,p=void 0!==d&&d,f=t.until,h={timeline:o,credentials:n},m=e.rootState||e.state,g=e.getters,v=m.statuses.timelines[gt()(o)],b=g.mergedConfig,_=b.hideMutedPosts,x=b.replyVisibility,y=!!m.users.currentUser;s?h.until=f||v.minId:h.since=v.maxId,h.userId=u,h.tag=p,h.withMuted=!_,y&&["friends","public","publicAndExternal"].includes(o)&&(h.replyVisibility=x);var k=v.statuses.length;return w.c.fetchTimeline(h).then(function(t){if(!t.error){var n=t.data,i=t.pagination;return!s&&n.length>=20&&!v.loading&&k>0&&e.dispatch("queueFlush",{timeline:o,id:v.maxId}),function(t){var e=t.store,n=t.statuses,i=t.timeline,o=t.showImmediately,r=t.userId,s=t.pagination,a=gt()(i);e.dispatch("setError",{value:!1}),e.dispatch("setErrorData",{value:null}),e.dispatch("addNewStatuses",{timeline:a,userId:r,statuses:n,showImmediately:o,pagination:s})}({store:e,statuses:n,timeline:o,showImmediately:c,userId:u,pagination:i}),{statuses:n,pagination:i}}e.dispatch("setErrorData",{value:t})},function(){return e.dispatch("setError",{value:!0})})},bt={fetchAndUpdate:vt,startFetching:function(t){var e=t.timeline,n=void 0===e?"friends":e,i=t.credentials,o=t.store,r=t.userId,s=void 0!==r&&r,a=t.tag,c=void 0!==a&&a,l=(o.rootState||o.state).statuses.timelines[gt()(n)],u=0===l.visibleStatuses.length;l.userId=s,vt({timeline:n,credentials:i,store:o,showImmediately:u,userId:s,tag:c});return setInterval(function(){return vt({timeline:n,credentials:i,store:o,userId:s,tag:c})},1e4)}},wt=function(t){var e=t.store,n=t.credentials,i=t.older,o=void 0!==i&&i,r={credentials:n},s=e.getters,a=e.rootState||e.state,c=a.statuses.notifications,l=s.mergedConfig.hideMutedPosts,u=a.users.currentUser.allow_following_move;if(r.withMuted=!l,r.withMove=!u,r.timeline="notifications",o)return c.minId!==Number.POSITIVE_INFINITY&&(r.until=c.minId),_t({store:e,args:r,older:o});c.maxId!==Number.POSITIVE_INFINITY&&(r.since=c.maxId);var d=_t({store:e,args:r,older:o}),f=c.data,h=f.filter(function(t){return t.seen}).map(function(t){return t.id});return f.length-h.length>0&&h.length>0&&(r.since=Math.max.apply(Math,p()(h)),_t({store:e,args:r,older:o})),d},_t=function(t){var e=t.store,n=t.args,i=t.older;return w.c.fetchTimeline(n).then(function(t){var n=t.data;return function(t){var e=t.store,n=t.notifications,i=t.older;e.dispatch("setNotificationsError",{value:!1}),e.dispatch("addNewNotifications",{notifications:n,older:i})}({store:e,notifications:n,older:i}),n},function(){return e.dispatch("setNotificationsError",{value:!0})}).catch(function(){return e.dispatch("setNotificationsError",{value:!0})})},xt={fetchAndUpdate:wt,startFetching:function(t){var e=t.credentials,n=t.store;wt({credentials:e,store:n});return setTimeout(function(){return n.dispatch("setNotificationsSilence",!1)},1e4),setInterval(function(){return wt({credentials:e,store:n})},1e4)}},yt=function(t){var e=t.store,n=t.credentials;return w.c.fetchFollowRequests({credentials:n}).then(function(t){e.commit("setFollowRequests",t),e.commit("addNewUsers",t)},function(){}).catch(function(){})},kt={startFetching:function(t){var e=t.credentials,n=t.store;yt({credentials:e,store:n});return setInterval(function(){return yt({credentials:e,store:n})},1e4)}};function Ct(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(t);e&&(i=i.filter(function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})),n.push.apply(n,i)}return n}function St(t){for(var e=1;e1&&void 0!==arguments[1]?arguments[1]:[];return Promise.all(e.map(function(e){return zt(t,e)}))},unblockUsers:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[];return Promise.all(e.map(function(e){return Ht(t,e)}))},fetchMutes:function(t){return t.rootState.api.backendInteractor.fetchMutes().then(function(e){return t.commit("saveMuteIds",pt()(e,"id")),t.commit("addNewUsers",e),e})},muteUser:function(t,e){return qt(t,e)},unmuteUser:function(t,e){return Wt(t,e)},hideReblogs:function(t,e){return function(t,e){return t.rootState.api.backendInteractor.followUser({id:e,reblogs:!1}).then(function(e){t.commit("updateUserRelationship",[e])})}(t,e)},showReblogs:function(t,e){return function(t,e){return t.rootState.api.backendInteractor.followUser({id:e,reblogs:!0}).then(function(e){return t.commit("updateUserRelationship",[e])})}(t,e)},muteUsers:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[];return Promise.all(e.map(function(e){return qt(t,e)}))},unmuteUsers:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[];return Promise.all(e.map(function(e){return Wt(t,e)}))},fetchDomainMutes:function(t){return t.rootState.api.backendInteractor.fetchDomainMutes().then(function(e){return t.commit("saveDomainMutes",e),e})},muteDomain:function(t,e){return Vt(t,e)},unmuteDomain:function(t,e){return Gt(t,e)},muteDomains:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[];return Promise.all(e.map(function(e){return Vt(t,e)}))},unmuteDomains:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[];return Promise.all(e.map(function(e){return Gt(t,e)}))},fetchFriends:function(t,e){var n=t.rootState,i=t.commit,o=n.users.usersObject[e],r=P()(o.friendIds);return n.api.backendInteractor.fetchFriends({id:e,maxId:r}).then(function(t){return i("addNewUsers",t),i("saveFriendIds",{id:e,friendIds:pt()(t,"id")}),t})},fetchFollowers:function(t,e){var n=t.rootState,i=t.commit,o=n.users.usersObject[e],r=P()(o.followerIds);return n.api.backendInteractor.fetchFollowers({id:e,maxId:r}).then(function(t){return i("addNewUsers",t),i("saveFollowerIds",{id:e,followerIds:pt()(t,"id")}),t})},clearFriends:function(t,e){(0,t.commit)("clearFriends",e)},clearFollowers:function(t,e){(0,t.commit)("clearFollowers",e)},subscribeUser:function(t,e){var n=t.rootState,i=t.commit;return n.api.backendInteractor.subscribeUser({id:e}).then(function(t){return i("updateUserRelationship",[t])})},unsubscribeUser:function(t,e){var n=t.rootState,i=t.commit;return n.api.backendInteractor.unsubscribeUser({id:e}).then(function(t){return i("updateUserRelationship",[t])})},toggleActivationStatus:function(t,e){var n=t.rootState,i=t.commit,o=e.user;(o.deactivated?n.api.backendInteractor.activateUser:n.api.backendInteractor.deactivateUser)({user:o}).then(function(t){var e=t.deactivated;return i("updateActivationStatus",{user:o,deactivated:e})})},registerPushNotifications:function(t){var e=t.state.currentUser.credentials,n=t.rootState.instance.vapidPublicKey;Nt(t.rootState.config.webPushNotifications,n,e,t.rootState.config.notificationVisibility)},unregisterPushNotifications:function(t){!function(t){Ft()&&Promise.all([Lt(t),Dt().then(function(t){return function(t){return t.pushManager.getSubscription().then(function(t){if(null!==t)return t.unsubscribe()})}(t).then(function(e){return[t,e]})}).then(function(t){var e=g()(t,2),n=e[0];return e[1]||console.warn("Push subscription cancellation wasn't successful, killing SW anyway..."),n.unregister().then(function(t){t||console.warn("Failed to kill SW")})})]).catch(function(t){return console.warn("Failed to disable Web Push Notifications: ".concat(t.message))})}(t.state.currentUser.credentials)},addNewUsers:function(t,e){(0,t.commit)("addNewUsers",e)},addNewStatuses:function(t,e){var n=e.statuses,i=pt()(n,"user"),o=ht()(pt()(n,"retweeted_status.user"));t.commit("addNewUsers",i),t.commit("addNewUsers",o),z()(n,function(e){t.commit("setUserForStatus",e),t.commit("setPinnedToUser",e)}),z()(ht()(pt()(n,"retweeted_status")),function(e){t.commit("setUserForStatus",e),t.commit("setPinnedToUser",e)})},addNewNotifications:function(t,e){var n=e.notifications,i=pt()(n,"from_profile"),o=pt()(n,"target").filter(function(t){return t}),r=n.map(function(t){return t.id});t.commit("addNewUsers",i),t.commit("addNewUsers",o);var s=t.rootState.statuses.notifications.idStore,a=Object.entries(s).filter(function(t){var e=g()(t,2),n=e[0];e[1];return r.includes(n)}).map(function(t){var e=g()(t,2);e[0];return e[1]});z()(a,function(e){t.commit("setUserForNotification",e)})},searchUsers:function(t,e){var n=t.rootState,i=t.commit,o=e.query;return n.api.backendInteractor.searchUsers({query:o}).then(function(t){return i("addNewUsers",t),t})},signUp:function(t,e){var n,i,r;return o.a.async(function(s){for(;;)switch(s.prev=s.next){case 0:return t.commit("signUpPending"),n=t.rootState,s.prev=2,s.next=5,o.a.awrap(n.api.backendInteractor.register({params:At({},e)}));case 5:i=s.sent,t.commit("signUpSuccess"),t.commit("setToken",i.access_token),t.dispatch("loginUser",i.access_token),s.next=16;break;case 11:throw s.prev=11,s.t0=s.catch(2),r=s.t0.message,t.commit("signUpFailure",r),s.t0;case 16:case"end":return s.stop()}},null,null,[[2,11]])},getCaptcha:function(t){return o.a.async(function(e){for(;;)switch(e.prev=e.next){case 0:return e.abrupt("return",t.rootState.api.backendInteractor.getCaptcha());case 1:case"end":return e.stop()}})},logout:function(t){var e=t.rootState,n=e.oauth,i=e.instance,o=At({},n,{commit:t.commit,instance:i.server});return Et.getOrCreateApp(o).then(function(t){var e={app:t,instance:o.instance,token:n.userToken};return Et.revokeToken(e)}).then(function(){t.commit("clearCurrentUser"),t.dispatch("disconnectFromSocket"),t.commit("clearToken"),t.dispatch("stopFetchingTimeline","friends"),t.commit("setBackendInteractor",jt(t.getters.getToken())),t.dispatch("stopFetchingNotifications"),t.dispatch("stopFetchingFollowRequests"),t.commit("clearNotifications"),t.commit("resetStatuses"),t.dispatch("resetChats"),t.dispatch("setLastTimeline","public-timeline")})},loginUser:function(t,e){return new Promise(function(n,i){var o=t.commit;o("beginLogin"),t.rootState.api.backendInteractor.verifyCredentials(e).then(function(r){if(r.error){var s=r.error;o("endLogin"),401===s.status?i(new Error("Wrong username or password")):i(new Error("An error occurred, please try again"))}else{var a=r;a.credentials=e,a.blockIds=[],a.muteIds=[],a.domainMutes=[],o("setCurrentUser",a),o("addNewUsers",[a]),t.dispatch("fetchEmoji"),(l=window.Notification,l?"default"===l.permission?l.requestPermission():Promise.resolve(l.permission):Promise.resolve(null)).then(function(t){return o("setNotificationPermission",t)}),o("setBackendInteractor",jt(e)),a.token&&(t.dispatch("setWsToken",a.token),t.dispatch("initializeSocket"));var c=function(){t.dispatch("startFetchingTimeline",{timeline:"friends"}),t.dispatch("startFetchingNotifications"),t.dispatch("startFetchingChats")};t.getters.mergedConfig.useStreamingApi?t.dispatch("enableMastoSockets").catch(function(t){console.error("Failed initializing MastoAPI Streaming socket",t),c()}).then(function(){t.dispatch("fetchChats",{latest:!0}),setTimeout(function(){return t.dispatch("setNotificationsSilence",!1)},1e4)}):c(),t.dispatch("fetchMutes"),t.rootState.api.backendInteractor.fetchFriends({id:a.id}).then(function(t){return o("addNewUsers",t)})}var l;o("endLogin"),n()}).catch(function(t){console.log(t),o("endLogin"),i(new Error("Failed to connect to server, try again"))})})}}},Yt=n(100),Jt=function(t,e){if(e.lastMessage&&(t.rootState.chats.currentChatId!==e.id||document.hidden)&&t.rootState.users.currentUser.id!==e.lastMessage.account.id){var n={tag:e.lastMessage.id,title:e.account.name,icon:e.account.profile_image_url,body:e.lastMessage.content};e.lastMessage.attachment&&"image"===e.lastMessage.attachment.type&&(n.image=e.lastMessage.attachment.preview_url),Object(Yt.a)(t.rootState,n)}},Xt=n(206),Qt={state:{backendInteractor:jt(),fetchers:{},socket:null,mastoUserSocket:null,mastoUserSocketStatus:null,followRequests:[]},mutations:{setBackendInteractor:function(t,e){t.backendInteractor=e},addFetcher:function(t,e){var n=e.fetcherName,i=e.fetcher;t.fetchers[n]=i},removeFetcher:function(t,e){var n=e.fetcherName,i=e.fetcher;window.clearInterval(i),delete t.fetchers[n]},setWsToken:function(t,e){t.wsToken=e},setSocket:function(t,e){t.socket=e},setFollowRequests:function(t,e){t.followRequests=e},setMastoUserSocketStatus:function(t,e){t.mastoUserSocketStatus=e}},actions:{enableMastoSockets:function(t){var e=t.state,n=t.dispatch;if(!e.mastoUserSocket)return n("startMastoUserSocket")},disableMastoSockets:function(t){var e=t.state,n=t.dispatch;if(e.mastoUserSocket)return n("stopMastoUserSocket")},startMastoUserSocket:function(t){return new Promise(function(e,n){try{var i=t.state,o=t.commit,r=t.dispatch,s=t.rootState.statuses.timelines.friends;i.mastoUserSocket=i.backendInteractor.startUserSocket({store:t}),i.mastoUserSocket.addEventListener("message",function(e){var n=e.detail;n&&("notification"===n.event?r("addNewNotifications",{notifications:[n.notification],older:!1}):"update"===n.event?r("addNewStatuses",{statuses:[n.status],userId:!1,showImmediately:0===s.visibleStatuses.length,timeline:"friends"}):"pleroma:chat_update"===n.event&&(r("addChatMessages",{chatId:n.chatUpdate.id,messages:[n.chatUpdate.lastMessage]}),r("updateChat",{chat:n.chatUpdate}),Jt(t,n.chatUpdate)))}),i.mastoUserSocket.addEventListener("open",function(){o("setMastoUserSocketStatus",w.b.JOINED)}),i.mastoUserSocket.addEventListener("error",function(t){var e=t.detail;console.error("Error in MastoAPI websocket:",e),o("setMastoUserSocketStatus",w.b.ERROR),r("clearOpenedChats")}),i.mastoUserSocket.addEventListener("close",function(t){var e=t.detail,n=new Set([1e3,1001]),i=e.code;n.has(i)?console.debug("Not restarting socket becasue of closure code ".concat(i," is in ignore list")):(console.warn("MastoAPI websocket disconnected, restarting. CloseEvent code: ".concat(i)),r("startFetchingTimeline",{timeline:"friends"}),r("startFetchingNotifications"),r("startFetchingChats"),r("restartMastoUserSocket")),o("setMastoUserSocketStatus",w.b.CLOSED),r("clearOpenedChats")}),e()}catch(t){n(t)}})},restartMastoUserSocket:function(t){var e=t.dispatch;return e("startMastoUserSocket").then(function(){e("stopFetchingTimeline",{timeline:"friends"}),e("stopFetchingNotifications"),e("stopFetchingChats")})},stopMastoUserSocket:function(t){var e=t.state,n=t.dispatch;n("startFetchingTimeline",{timeline:"friends"}),n("startFetchingNotifications"),n("startFetchingChats"),e.mastoUserSocket.close()},startFetchingTimeline:function(t,e){var n=e.timeline,i=void 0===n?"friends":n,o=e.tag,r=void 0!==o&&o,s=e.userId,a=void 0!==s&&s;if(!t.state.fetchers[i]){var c=t.state.backendInteractor.startFetchingTimeline({timeline:i,store:t,userId:a,tag:r});t.commit("addFetcher",{fetcherName:i,fetcher:c})}},stopFetchingTimeline:function(t,e){var n=t.state.fetchers[e];n&&t.commit("removeFetcher",{fetcherName:e,fetcher:n})},startFetchingNotifications:function(t){if(!t.state.fetchers.notifications){var e=t.state.backendInteractor.startFetchingNotifications({store:t});t.commit("addFetcher",{fetcherName:"notifications",fetcher:e})}},stopFetchingNotifications:function(t){var e=t.state.fetchers.notifications;e&&t.commit("removeFetcher",{fetcherName:"notifications",fetcher:e})},startFetchingFollowRequests:function(t){if(!t.state.fetchers.followRequests){var e=t.state.backendInteractor.startFetchingFollowRequests({store:t});t.commit("addFetcher",{fetcherName:"followRequests",fetcher:e})}},stopFetchingFollowRequests:function(t){var e=t.state.fetchers.followRequests;e&&t.commit("removeFetcher",{fetcherName:"followRequests",fetcher:e})},removeFollowRequest:function(t,e){var n=t.state.followRequests.filter(function(t){return t!==e});t.commit("setFollowRequests",n)},setWsToken:function(t,e){t.commit("setWsToken",e)},initializeSocket:function(t){var e=t.dispatch,n=t.commit,i=t.state,o=t.rootState,r=i.wsToken;if(o.instance.chatAvailable&&void 0!==r&&null===i.socket){var s=new Xt.Socket("/socket",{params:{token:r}});s.connect(),n("setSocket",s),e("initializeChat",s)}},disconnectFromSocket:function(t){var e=t.commit,n=t.state;n.socket&&n.socket.disconnect(),e("setSocket",null)}}},Zt={state:{messages:[],channel:{state:""}},mutations:{setChannel:function(t,e){t.channel=e},addMessage:function(t,e){t.messages.push(e),t.messages=t.messages.slice(-19,20)},setMessages:function(t,e){t.messages=e.slice(-19,20)}},actions:{initializeChat:function(t,e){var n=e.channel("chat:public");n.on("new_msg",function(e){t.commit("addMessage",e)}),n.on("messages",function(e){var n=e.messages;t.commit("setMessages",n)}),n.join(),t.commit("setChannel",n)}}},te={state:{clientId:!1,clientSecret:!1,appToken:!1,userToken:!1},mutations:{setClientData:function(t,e){var n=e.clientId,i=e.clientSecret;t.clientId=n,t.clientSecret=i},setAppToken:function(t,e){t.appToken=e},setToken:function(t,e){t.userToken=e},clearToken:function(t){t.userToken=!1,Object(r.delete)(t,"token")}},getters:{getToken:function(t){return function(){return t.userToken||t.token||t.appToken}},getUserToken:function(t){return function(){return t.userToken||t.token}}}},ee=function(t){t.strategy=t.initStrategy,t.settings={}},ne={namespaced:!0,state:{settings:{},strategy:"password",initStrategy:"password"},getters:{settings:function(t,e){return t.settings},requiredPassword:function(t,e,n){return"password"===t.strategy},requiredToken:function(t,e,n){return"token"===t.strategy},requiredTOTP:function(t,e,n){return"totp"===t.strategy},requiredRecovery:function(t,e,n){return"recovery"===t.strategy}},mutations:{setInitialStrategy:function(t,e){e&&(t.initStrategy=e,t.strategy=e)},requirePassword:function(t){t.strategy="password"},requireToken:function(t){t.strategy="token"},requireMFA:function(t,e){var n=e.settings;t.settings=n,t.strategy="totp"},requireRecovery:function(t){t.strategy="recovery"},requireTOTP:function(t){t.strategy="totp"},abortMFA:function(t){ee(t)}},actions:{login:function(t,e){var n,i,r,s;return o.a.async(function(a){for(;;)switch(a.prev=a.next){case 0:return n=t.state,i=t.dispatch,r=t.commit,s=e.access_token,r("setToken",s,{root:!0}),a.next=5,o.a.awrap(i("loginUser",s,{root:!0}));case 5:ee(n);case 6:case"end":return a.stop()}})}}},ie=n(21),oe={state:{media:[],currentIndex:0,activated:!1},mutations:{setMedia:function(t,e){t.media=e},setCurrent:function(t,e){t.activated=!0,t.currentIndex=e},close:function(t){t.activated=!1}},actions:{setMedia:function(t,e){(0,t.commit)("setMedia",e.filter(function(t){var e=ie.a.fileType(t.mimetype);return"image"===e||"video"===e||"audio"===e}))},setCurrent:function(t,e){(0,t.commit)("setCurrent",t.state.media.indexOf(e)||0)},closeMediaViewer:function(t){(0,t.commit)("close")}}},re={state:{tokens:[]},actions:{fetchTokens:function(t){var e=t.rootState,n=t.commit;e.api.backendInteractor.fetchOAuthTokens().then(function(t){n("swapTokens",t)})},revokeToken:function(t,e){var n=t.rootState,i=t.commit,o=t.state;n.api.backendInteractor.revokeOAuthToken({id:e}).then(function(t){201===t.status&&i("swapTokens",o.tokens.filter(function(t){return t.id!==e}))})}},mutations:{swapTokens:function(t,e){t.tokens=e}}},se=n(37),ae=n.n(se),ce={state:{userId:null,statuses:[],modalActivated:!1},mutations:{openUserReportingModal:function(t,e){var n=e.userId,i=e.statuses;t.userId=n,t.statuses=i,t.modalActivated=!0},closeUserReportingModal:function(t){t.modalActivated=!1}},actions:{openUserReportingModal:function(t,e){var n=t.rootState,i=t.commit,o=ae()(n.statuses.allStatuses,function(t){return t.user.id===e});i("openUserReportingModal",{userId:e,statuses:o})},closeUserReportingModal:function(t){(0,t.commit)("closeUserReportingModal")}}},le={state:{trackedPolls:{},pollsObject:{}},mutations:{mergeOrAddPoll:function(t,e){var n=t.pollsObject[e.id];e.expired=Date.now()>Date.parse(e.expires_at),n?Object(r.set)(t.pollsObject,e.id,E()(n,e)):Object(r.set)(t.pollsObject,e.id,e)},trackPoll:function(t,e){var n=t.trackedPolls[e];n?Object(r.set)(t.trackedPolls,e,n+1):Object(r.set)(t.trackedPolls,e,1)},untrackPoll:function(t,e){var n=t.trackedPolls[e];n?Object(r.set)(t.trackedPolls,e,n-1):Object(r.set)(t.trackedPolls,e,0)}},actions:{mergeOrAddPoll:function(t,e){(0,t.commit)("mergeOrAddPoll",e)},updateTrackedPoll:function(t,e){var n=t.rootState,i=t.dispatch,o=t.commit;n.api.backendInteractor.fetchPoll({pollId:e}).then(function(t){setTimeout(function(){n.polls.trackedPolls[e]&&i("updateTrackedPoll",e)},3e4),o("mergeOrAddPoll",t)})},trackPoll:function(t,e){var n=t.rootState,i=t.commit,o=t.dispatch;n.polls.trackedPolls[e]||setTimeout(function(){return o("updateTrackedPoll",e)},3e4),i("trackPoll",e)},untrackPoll:function(t,e){(0,t.commit)("untrackPoll",e)},votePoll:function(t,e){var n=t.rootState,i=t.commit,o=(e.id,e.pollId),r=e.choices;return n.api.backendInteractor.vote({pollId:o,choices:r}).then(function(t){return i("mergeOrAddPoll",t),t})}}},ue={state:{params:null,modalActivated:!1},mutations:{openPostStatusModal:function(t,e){t.params=e,t.modalActivated=!0},closePostStatusModal:function(t){t.modalActivated=!1}},actions:{openPostStatusModal:function(t,e){(0,t.commit)("openPostStatusModal",e)},closePostStatusModal:function(t){(0,t.commit)("closePostStatusModal")}}},de=n(104),pe=n.n(de),fe=n(207),he=n.n(fe),me=n(208),ge=n.n(me),ve=n(98),be=n.n(ve),we={add:function(t,e){var n=e.messages;if(t)for(var i=0;it.lastMessage.id)&&(t.lastMessage=o),t.idIndex[o.id]||(t.lastSeenTimestamp1&&void 0!==arguments[1]&&arguments[1];return n.api.backendInteractor.chats().then(function(t){var n=t.chats;return e("addNewChats",{chats:n}),n})},addNewChats:function(t,e){var n=e.chats;(0,t.commit)("addNewChats",{dispatch:t.dispatch,chats:n,rootGetters:t.rootGetters,newChatMessageSideEffects:function(e){Jt(t,e)}})},updateChat:function(t,e){(0,t.commit)("updateChat",{chat:e.chat})},startFetchingCurrentChat:function(t,e){t.commit;(0,t.dispatch)("setCurrentChatFetcher",{fetcher:e.fetcher})},setCurrentChatFetcher:function(t,e){t.rootState;(0,t.commit)("setCurrentChatFetcher",{fetcher:e.fetcher})},addOpenedChat:function(t,e){t.rootState;var n=t.commit,i=t.dispatch,o=e.chat;n("addOpenedChat",{dispatch:i,chat:Object(_e.b)(o)}),i("addNewUsers",[o.account])},addChatMessages:function(t,e){var n=t.commit;n("addChatMessages",ye({commit:n},e))},resetChatNewMessageCount:function(t,e){(0,t.commit)("resetChatNewMessageCount",e)},clearCurrentChat:function(t,e){t.rootState;var n=t.commit;t.dispatch;n("setCurrentChatId",{chatId:void 0}),n("setCurrentChatFetcher",{fetcher:void 0})},readChat:function(t,e){var n=t.rootState,i=t.commit,o=t.dispatch,r=e.id,s=e.lastReadId;o("resetChatNewMessageCount"),i("readChat",{id:r}),n.api.backendInteractor.readChat({id:r,lastReadId:s})},deleteChatMessage:function(t,e){var n=t.rootState,i=t.commit;n.api.backendInteractor.deleteChatMessage(e),i("deleteChatMessage",ye({commit:i},e))},resetChats:function(t){var e=t.commit;(0,t.dispatch)("clearCurrentChat"),e("resetChats",{commit:e})},clearOpenedChats:function(t){t.rootState;var e=t.commit;t.dispatch,t.rootGetters;e("clearOpenedChats",{commit:e})}},mutations:{setChatListFetcher:function(t,e){e.commit;var n=e.fetcher,i=t.chatListFetcher;i&&clearInterval(i),t.chatListFetcher=n&&n()},setCurrentChatFetcher:function(t,e){var n=e.fetcher,i=t.fetcher;i&&clearInterval(i),t.fetcher=n&&n()},addOpenedChat:function(t,e){e._dispatch;var n=e.chat;t.currentChatId=n.id,s.a.set(t.openedChats,n.id,n),t.openedChatMessageServices[n.id]||s.a.set(t.openedChatMessageServices,n.id,we.empty(n.id))},setCurrentChatId:function(t,e){var n=e.chatId;t.currentChatId=n},addNewChats:function(t,e){var n=e.chats,i=e.newChatMessageSideEffects;n.forEach(function(e){var n=ke(t,e.id);if(n){var o=(n.lastMessage&&n.lastMessage.id)!==(e.lastMessage&&e.lastMessage.id);n.lastMessage=e.lastMessage,n.unread=e.unread,o&&n.unread&&i(e)}else t.chatList.data.push(e),s.a.set(t.chatList.idStore,e.id,e)})},updateChat:function(t,e){e._dispatch;var n=e.chat,i=(e._rootGetters,ke(t,n.id));i&&(i.lastMessage=n.lastMessage,i.unread=n.unread,i.updated_at=n.updated_at),i||t.chatList.data.unshift(n),s.a.set(t.chatList.idStore,n.id,n)},deleteChat:function(t,e){e._dispatch;var n=e.id;e._rootGetters;t.chats.data=t.chats.data.filter(function(t){return t.last_status.id!==n}),t.chats.idStore=C()(t.chats.idStore,function(t){return t.last_status.id===n})},resetChats:function(t,e){var n=e.commit;for(var i in t.chatList={data:[],idStore:{}},t.currentChatId=null,n("setChatListFetcher",{fetcher:void 0}),t.openedChats)we.clear(t.openedChatMessageServices[i]),s.a.delete(t.openedChats,i),s.a.delete(t.openedChatMessageServices,i)},setChatsLoading:function(t,e){var n=e.value;t.chats.loading=n},addChatMessages:function(t,e){var n=e.commit,i=e.chatId,o=e.messages,r=t.openedChatMessageServices[i];r&&(we.add(r,{messages:o.map(_e.c)}),n("refreshLastMessage",{chatId:i}))},refreshLastMessage:function(t,e){var n=e.chatId,i=t.openedChatMessageServices[n];if(i){var o=ke(t,n);o&&(o.lastMessage=i.lastMessage,i.lastMessage&&(o.updated_at=i.lastMessage.created_at))}},deleteChatMessage:function(t,e){var n=e.commit,i=e.chatId,o=e.messageId,r=t.openedChatMessageServices[i];r&&(we.deleteMessage(r,o),n("refreshLastMessage",{chatId:i}))},resetChatNewMessageCount:function(t,e){var n=t.openedChatMessageServices[t.currentChatId];we.resetNewMessageCount(n)},clearOpenedChats:function(t){var e=t.currentChatId;for(var n in t.openedChats)e!==n&&(we.clear(t.openedChatMessageServices[n]),s.a.delete(t.openedChats,n),s.a.delete(t.openedChatMessageServices,n))},readChat:function(t,e){var n=e.id,i=ke(t,n);i&&(i.unread=0)}}},Se=n(138),je=n(27),Oe=n.n(je),Pe=n(209),$e=n.n(Pe),Te=n(12),Ie=n.n(Te),Ee=n(210),Me=n.n(Ee),Ue=n(211),Fe=!1,De=function(t,e){return 0===e.length?t:e.reduce(function(e,n){return $e()(e,n,Ie()(t,n)),e},{})},Le=["markNotificationsAsSeen","clearCurrentUser","setCurrentUser","setHighlight","setOption","setClientData","setToken","clearToken"],Ne=n.n(Ue).a;function Re(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},e=t.key,n=void 0===e?"vuex-lz":e,i=t.paths,o=void 0===i?[]:i,r=t.getState,s=void 0===r?function(t,e){return e.getItem(t)}:r,a=t.setState,c=void 0===a?function(t,e,n){return Fe?n.setItem(t,e):(console.log("waiting for old state to be loaded..."),Promise.resolve())}:a,l=t.reducer,u=void 0===l?De:l,d=t.storage,p=void 0===d?Ne:d,f=t.subscriber,h=void 0===f?function(t){return function(e){return t.subscribe(e)}}:f;return s(n,p).then(function(t){return function(e){try{if(null!==t&&"object"===Oe()(t)){var i=t.users||{};i.usersObject={};var r=i.users||[];z()(r,function(t){i.usersObject[t.id]=t}),t.users=i,e.replaceState(Me()({},e.state,t))}Fe=!0}catch(t){console.log("Couldn't load state"),console.error(t),Fe=!0}h(e)(function(t,i){try{Le.includes(t.type)&&c(n,u(i,o),p).then(function(n){void 0!==n&&("setOption"!==t.type&&"setCurrentUser"!==t.type||e.dispatch("settingsSaved",{success:n}))},function(n){"setOption"!==t.type&&"setCurrentUser"!==t.type||e.dispatch("settingsSaved",{error:n})})}catch(t){console.log("Couldn't persist state:"),console.log(t)}})}})}var Ae,Be,ze=function(t){t.subscribe(function(e,n){var i=n.instance.vapidPublicKey,o=n.config.webPushNotifications,r="granted"===n.interface.notificationPermission,s=n.users.currentUser,a="setCurrentUser"===e.type,c="setInstanceOption"===e.type&&"vapidPublicKey"===e.payload.name,l="setNotificationPermission"===e.type&&"granted"===e.payload,u="setOption"===e.type&&"webPushNotifications"===e.payload.name,d="setOption"===e.type&&"notificationVisibility"===e.payload.name;if(a||c||l||u||d){if(s&&i&&r&&o)return t.dispatch("registerPushNotifications");if(u&&!o)return t.dispatch("unregisterPushNotifications")}})},He=n(74),qe=n(212),We=n.n(qe),Ve=n(213),Ge=n.n(Ve),Ke=n(214),Ye=n.n(Ke),Je=n(139),Xe=new Set([]),Qe=function(t){var e=window.innerWidth-document.documentElement.clientWidth;Je.disableBodyScroll(t,{reserveScrollBarGap:!0}),Xe.add(t),setTimeout(function(){if(Xe.size<=1){if(void 0===Ae){var t=document.getElementById("nav");Ae=window.getComputedStyle(t).getPropertyValue("padding-right"),t.style.paddingRight=Ae?"calc(".concat(Ae," + ").concat(e,"px)"):"".concat(e,"px")}if(void 0===Be){var n=document.getElementById("app_bg_wrapper");Be=window.getComputedStyle(n).getPropertyValue("right"),n.style.right=Be?"calc(".concat(Be," + ").concat(e,"px)"):"".concat(e,"px")}document.body.classList.add("scroll-locked")}})},Ze=function(t){Xe.delete(t),setTimeout(function(){0===Xe.size&&(void 0!==Ae&&(document.getElementById("nav").style.paddingRight=Ae,Ae=void 0),void 0!==Be&&(document.getElementById("app_bg_wrapper").style.right=Be,Be=void 0),document.body.classList.remove("scroll-locked"))}),Je.enableBodyScroll(t)},tn={inserted:function(t,e){e.value&&Qe(t)},componentUpdated:function(t,e){e.oldValue!==e.value&&(e.value?Qe(t):Ze(t))},unbind:function(t){Ze(t)}},en=n(140),nn=n.n(en),on=n(105),rn=n.n(on),sn=n(33),an=n(219),cn=n.n(an),ln=function(t,e){var n="retweet"===t.type?t.retweeted_status.id:t.id,i="retweet"===e.type?e.retweeted_status.id:e.id,o=Number(n),r=Number(i),s=!Number.isNaN(o),a=!Number.isNaN(r);return s&&a?o0||0!==this.timeline.flushMarker)},loadButtonString:function(){return 0!==this.timeline.flushMarker?this.$t("timeline.reload"):"".concat(this.$t("timeline.show_new")," (").concat(this.newStatusCount,")")},classes:function(){return{root:["timeline"].concat(this.embedded?[]:["panel","panel-default"]),header:["timeline-heading"].concat(this.embedded?[]:["panel-heading"]),body:["timeline-body"].concat(this.embedded?[]:["panel-body"]),footer:["timeline-footer"].concat(this.embedded?[]:["panel-footer"])}},excludedStatusIdsObject:function(){var t=function(t,e){var n=[];if(e&&e.length>0){var i=!0,o=!1,r=void 0;try{for(var s,a=t[Symbol.iterator]();!(i=(s=a.next()).done);i=!0){var c=s.value;if(!e.includes(c.id))break;n.push(c.id)}}catch(t){o=!0,r=t}finally{try{i||null==a.return||a.return()}finally{if(o)throw r}}}return n}(this.timeline.visibleStatuses,this.pinnedStatusIds);return nn()(t)},pinnedStatusIdsObject:function(){return nn()(this.pinnedStatusIds)}},created:function(){var t=this.$store,e=t.state.users.currentUser.credentials,n=0===this.timeline.visibleStatuses.length;if(window.addEventListener("scroll",this.scrollLoad),t.state.api.fetchers[this.timelineName])return!1;bt.fetchAndUpdate({store:t,credentials:e,timeline:this.timelineName,showImmediately:n,userId:this.userId,tag:this.tag})},mounted:function(){void 0!==document.hidden&&(document.addEventListener("visibilitychange",this.handleVisibilityChange,!1),this.unfocused=document.hidden),window.addEventListener("keydown",this.handleShortKey)},destroyed:function(){window.removeEventListener("scroll",this.scrollLoad),window.removeEventListener("keydown",this.handleShortKey),void 0!==document.hidden&&document.removeEventListener("visibilitychange",this.handleVisibilityChange,!1),this.$store.commit("setLoading",{timeline:this.timelineName,value:!1})},methods:{handleShortKey:function(t){["textarea","input"].includes(t.target.tagName.toLowerCase())||"."===t.key&&this.showNewStatuses()},showNewStatuses:function(){0!==this.timeline.flushMarker?(this.$store.commit("clearTimeline",{timeline:this.timelineName,excludeUserId:!0}),this.$store.commit("queueFlush",{timeline:this.timelineName,id:0}),this.fetchOlderStatuses()):(this.$store.commit("showNewStatuses",{timeline:this.timelineName}),this.paused=!1)},fetchOlderStatuses:rn()(function(){var t=this,e=this.$store,n=e.state.users.currentUser.credentials;e.commit("setLoading",{timeline:this.timelineName,value:!0}),bt.fetchAndUpdate({store:e,credentials:n,timeline:this.timelineName,older:!0,showImmediately:!0,userId:this.userId,tag:this.tag}).then(function(n){var i=n.statuses;e.commit("setLoading",{timeline:t.timelineName,value:!1}),i&&0===i.length&&(t.bottomedOut=!0)})},1e3,void 0),scrollLoad:function(t){var e=document.body.getBoundingClientRect(),n=Math.max(e.height,-e.y);!1===this.timeline.loading&&this.$el.offsetHeight>0&&window.innerHeight+window.pageYOffset>=n-750&&this.fetchOlderStatuses()},handleVisibilityChange:function(){this.unfocused=document.hidden}},watch:{newStatusCount:function(t){if(this.$store.getters.mergedConfig.streaming&&t>0){var e=document.documentElement;!((window.pageYOffset||e.scrollTop)-(e.clientTop||0)<15)||this.paused||this.unfocused&&this.$store.getters.mergedConfig.pauseOnUnfocused?this.paused=!0:this.showNewStatuses()}}}};var _n=function(t){n(368)},xn=Object(dn.a)(wn,function(){var t=this,e=t.$createElement,n=t._self._c||e;return n("div",{class:[t.classes.root,"timeline"]},[n("div",{class:t.classes.header},[t.embedded?t._e():n("TimelineMenu"),t._v(" "),t.timelineError?n("div",{staticClass:"loadmore-error alert error",on:{click:function(t){t.preventDefault()}}},[t._v("\n "+t._s(t.$t("timeline.error_fetching"))+"\n ")]):t.errorData?n("div",{staticClass:"loadmore-error alert error",on:{click:function(t){t.preventDefault()}}},[t._v("\n "+t._s(t.errorData.statusText)+"\n ")]):t.showLoadButton?n("button",{staticClass:"loadmore-button",on:{click:function(e){return e.preventDefault(),t.showNewStatuses(e)}}},[t._v("\n "+t._s(t.loadButtonString)+"\n ")]):n("div",{staticClass:"loadmore-text faint",on:{click:function(t){t.preventDefault()}}},[t._v("\n "+t._s(t.$t("timeline.up_to_date"))+"\n ")])],1),t._v(" "),n("div",{class:t.classes.body},[n("div",{staticClass:"timeline"},[t._l(t.pinnedStatusIds,function(e){return[t.timeline.statusesObject[e]?n("conversation",{key:e+"-pinned",staticClass:"status-fadein",attrs:{"status-id":e,collapsable:!0,"pinned-status-ids-object":t.pinnedStatusIdsObject,"in-profile":t.inProfile,"profile-user-id":t.userId}}):t._e()]}),t._v(" "),t._l(t.timeline.visibleStatuses,function(e){return[t.excludedStatusIdsObject[e.id]?t._e():n("conversation",{key:e.id,staticClass:"status-fadein",attrs:{"status-id":e.id,collapsable:!0,"in-profile":t.inProfile,"profile-user-id":t.userId}})]})],2)]),t._v(" "),n("div",{class:t.classes.footer},[0===t.count?n("div",{staticClass:"new-status-notification text-center panel-footer faint"},[t._v("\n "+t._s(t.$t("timeline.no_statuses"))+"\n ")]):t.bottomedOut?n("div",{staticClass:"new-status-notification text-center panel-footer faint"},[t._v("\n "+t._s(t.$t("timeline.no_more_statuses"))+"\n ")]):t.timeline.loading||t.errorData?t.errorData?n("a",{attrs:{href:"#"}},[n("div",{staticClass:"new-status-notification text-center panel-footer"},[t._v(t._s(t.errorData.error))])]):n("div",{staticClass:"new-status-notification text-center panel-footer"},[n("i",{staticClass:"icon-spin3 animate-spin"})]):n("a",{attrs:{href:"#"},on:{click:function(e){return e.preventDefault(),t.fetchOlderStatuses()}}},[n("div",{staticClass:"new-status-notification text-center panel-footer"},[t._v(t._s(t.$t("timeline.load_older")))])])])])},[],!1,_n,null,null).exports,yn={components:{Timeline:xn},computed:{timeline:function(){return this.$store.state.statuses.timelines.public}},created:function(){this.$store.dispatch("startFetchingTimeline",{timeline:"public"})},destroyed:function(){this.$store.dispatch("stopFetchingTimeline","public")}},kn=Object(dn.a)(yn,function(){var t=this.$createElement;return(this._self._c||t)("Timeline",{attrs:{title:this.$t("nav.public_tl"),timeline:this.timeline,"timeline-name":"public"}})},[],!1,null,null,null).exports,Cn={components:{Timeline:xn},computed:{timeline:function(){return this.$store.state.statuses.timelines.publicAndExternal}},created:function(){this.$store.dispatch("startFetchingTimeline",{timeline:"publicAndExternal"})},destroyed:function(){this.$store.dispatch("stopFetchingTimeline","publicAndExternal")}},Sn=Object(dn.a)(Cn,function(){var t=this.$createElement;return(this._self._c||t)("Timeline",{attrs:{title:this.$t("nav.twkn"),timeline:this.timeline,"timeline-name":"publicAndExternal"}})},[],!1,null,null,null).exports,jn={components:{Timeline:xn},computed:{timeline:function(){return this.$store.state.statuses.timelines.friends}}},On=Object(dn.a)(jn,function(){var t=this.$createElement;return(this._self._c||t)("Timeline",{attrs:{title:this.$t("nav.timeline"),timeline:this.timeline,"timeline-name":"friends"}})},[],!1,null,null,null).exports,Pn={created:function(){this.$store.commit("clearTimeline",{timeline:"tag"}),this.$store.dispatch("startFetchingTimeline",{timeline:"tag",tag:this.tag})},components:{Timeline:xn},computed:{tag:function(){return this.$route.params.tag},timeline:function(){return this.$store.state.statuses.timelines.tag}},watch:{tag:function(){this.$store.commit("clearTimeline",{timeline:"tag"}),this.$store.dispatch("startFetchingTimeline",{timeline:"tag",tag:this.tag})}},destroyed:function(){this.$store.dispatch("stopFetchingTimeline","tag")}},$n=Object(dn.a)(Pn,function(){var t=this.$createElement;return(this._self._c||t)("Timeline",{attrs:{title:this.tag,timeline:this.timeline,"timeline-name":"tag",tag:this.tag}})},[],!1,null,null,null).exports,Tn={computed:{timeline:function(){return this.$store.state.statuses.timelines.bookmarks}},components:{Timeline:xn},destroyed:function(){this.$store.commit("clearTimeline",{timeline:"bookmarks"})}},In=Object(dn.a)(Tn,function(){var t=this.$createElement;return(this._self._c||t)("Timeline",{attrs:{title:this.$t("nav.bookmarks"),timeline:this.timeline,"timeline-name":"bookmarks"}})},[],!1,null,null,null).exports,En={components:{Conversation:fn},computed:{statusId:function(){return this.$route.params.id}}},Mn=Object(dn.a)(En,function(){var t=this.$createElement;return(this._self._c||t)("conversation",{attrs:{collapsable:!1,"is-page":"true","status-id":this.statusId}})},[],!1,null,null,null).exports,Un=n(34),Fn=n(18),Dn=n(28),Ln=n(44),Nn=n(46),Rn=n(17);function An(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(t);e&&(i=i.filter(function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})),n.push.apply(n,i)}return n}var Bn={data:function(){return{userExpanded:!1,betterShadow:this.$store.state.interface.browserSupport.cssFilter,unmuted:!1}},props:["notification"],components:{StatusContent:Un.a,UserAvatar:Fn.default,UserCard:Dn.a,Timeago:Ln.a,Status:sn.default},methods:{toggleUserExpanded:function(){this.userExpanded=!this.userExpanded},generateUserProfileLink:function(t){return Object(Rn.a)(t.id,t.screen_name,this.$store.state.instance.restrictedNicknames)},getUser:function(t){return this.$store.state.users.usersObject[t.from_profile.id]},toggleMute:function(){this.unmuted=!this.unmuted},approveUser:function(){this.$store.state.api.backendInteractor.approveUser({id:this.user.id}),this.$store.dispatch("removeFollowRequest",this.user),this.$store.dispatch("markSingleNotificationAsSeen",{id:this.notification.id}),this.$store.dispatch("updateNotification",{id:this.notification.id,updater:function(t){t.type="follow"}})},denyUser:function(){var t=this;this.$store.state.api.backendInteractor.denyUser({id:this.user.id}).then(function(){t.$store.dispatch("dismissNotificationLocal",{id:t.notification.id}),t.$store.dispatch("removeFollowRequest",t.user)})}},computed:function(t){for(var e=1;e0?this.$store.dispatch("setPageTitle","(".concat(t,")")):this.$store.dispatch("setPageTitle","")}},methods:{markAsSeen:function(){this.$store.dispatch("markNotificationsAsSeen"),this.seenToDisplayCount=30},fetchOlderNotifications:function(){var t=this;if(!this.loading){var e=this.filteredNotifications.length-this.unseenCount;if(this.seenToDisplayCounte&&(this.seenToDisplayCount=e);var n=this.$store,i=n.state.users.currentUser.credentials;n.commit("setNotificationsLoading",{value:!0}),xt.fetchAndUpdate({store:n,credentials:i,older:!0}).then(function(e){n.commit("setNotificationsLoading",{value:!1}),0===e.length&&(t.bottomedOut=!0),t.seenToDisplayCount+=e.length})}}}}};var Vn=function(t){n(451)},Gn=Object(dn.a)(Wn,function(){var t=this,e=t.$createElement,n=t._self._c||e;return n("div",{staticClass:"notifications",class:{minimal:t.minimalMode}},[n("div",{class:t.mainClass},[t.noHeading?t._e():n("div",{staticClass:"panel-heading"},[n("div",{staticClass:"title"},[t._v("\n "+t._s(t.$t("notifications.notifications"))+"\n "),t.unseenCount?n("span",{staticClass:"badge badge-notification unseen-count"},[t._v(t._s(t.unseenCount))]):t._e()]),t._v(" "),t.error?n("div",{staticClass:"loadmore-error alert error",on:{click:function(t){t.preventDefault()}}},[t._v("\n "+t._s(t.$t("timeline.error_fetching"))+"\n ")]):t._e(),t._v(" "),t.unseenCount?n("button",{staticClass:"read-button",on:{click:function(e){return e.preventDefault(),t.markAsSeen(e)}}},[t._v("\n "+t._s(t.$t("notifications.read"))+"\n ")]):t._e()]),t._v(" "),n("div",{staticClass:"panel-body"},t._l(t.notificationsToDisplay,function(e){return n("div",{key:e.id,staticClass:"notification",class:{unseen:!t.minimalMode&&!e.seen}},[n("div",{staticClass:"notification-overlay"}),t._v(" "),n("notification",{attrs:{notification:e}})],1)}),0),t._v(" "),n("div",{staticClass:"panel-footer"},[t.bottomedOut?n("div",{staticClass:"new-status-notification text-center panel-footer faint"},[t._v("\n "+t._s(t.$t("notifications.no_more_notifications"))+"\n ")]):t.loading?n("div",{staticClass:"new-status-notification text-center panel-footer"},[n("i",{staticClass:"icon-spin3 animate-spin"})]):n("a",{attrs:{href:"#"},on:{click:function(e){return e.preventDefault(),t.fetchOlderNotifications()}}},[n("div",{staticClass:"new-status-notification text-center panel-footer"},[t._v("\n "+t._s(t.minimalMode?t.$t("interactions.load_older"):t.$t("notifications.load_older"))+"\n ")])])])])])},[],!1,Vn,null,null).exports,Kn={mentions:["mention"],"likes+repeats":["repeat","like"],follows:["follow"],moves:["move"]},Yn={data:function(){return{allowFollowingMove:this.$store.state.users.currentUser.allow_following_move,filterMode:Kn.mentions}},methods:{onModeSwitch:function(t){this.filterMode=Kn[t]}},components:{Notifications:Gn}},Jn=Object(dn.a)(Yn,function(){var t=this,e=t.$createElement,n=t._self._c||e;return n("div",{staticClass:"panel panel-default"},[n("div",{staticClass:"panel-heading"},[n("div",{staticClass:"title"},[t._v("\n "+t._s(t.$t("nav.interactions"))+"\n ")])]),t._v(" "),n("tab-switcher",{ref:"tabSwitcher",attrs:{"on-switch":t.onModeSwitch}},[n("span",{key:"mentions",attrs:{label:t.$t("nav.mentions")}}),t._v(" "),n("span",{key:"likes+repeats",attrs:{label:t.$t("interactions.favs_repeats")}}),t._v(" "),n("span",{key:"follows",attrs:{label:t.$t("interactions.follows")}}),t._v(" "),t.allowFollowingMove?t._e():n("span",{key:"moves",attrs:{label:t.$t("interactions.moves")}})]),t._v(" "),n("Notifications",{ref:"notifications",attrs:{"no-heading":!0,"minimal-mode":!0,"filter-mode":t.filterMode}})],1)},[],!1,null,null,null).exports,Xn={computed:{timeline:function(){return this.$store.state.statuses.timelines.dms}},components:{Timeline:xn}},Qn=Object(dn.a)(Xn,function(){var t=this.$createElement;return(this._self._c||t)("Timeline",{attrs:{title:this.$t("nav.dms"),timeline:this.timeline,"timeline-name":"dms"}})},[],!1,null,null,null).exports,Zn=n(114),ti=s.a.component("chat-title",{name:"ChatTitle",components:{UserAvatar:Fn.default},props:["user","withAvatar"],computed:{title:function(){return this.user?this.user.screen_name:""},htmlTitle:function(){return this.user?this.user.name_html:""}},methods:{getUserProfileLink:function(t){return Object(Rn.a)(t.id,t.screen_name)}}});var ei=function(t){n(459)},ni=Object(dn.a)(ti,function(){var t=this,e=t.$createElement,n=t._self._c||e;return n("div",{staticClass:"chat-title",attrs:{title:t.title}},[t.withAvatar&&t.user?n("router-link",{attrs:{to:t.getUserProfileLink(t.user)}},[n("UserAvatar",{attrs:{user:t.user,width:"23px",height:"23px"}})],1):t._e(),t._v(" "),n("span",{staticClass:"username",domProps:{innerHTML:t._s(t.htmlTitle)}})],1)},[],!1,ei,null,null).exports;function ii(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(t);e&&(i=i.filter(function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})),n.push.apply(n,i)}return n}var oi={name:"ChatListItem",props:["chat"],components:{UserAvatar:Fn.default,AvatarList:Zn.a,Timeago:Ln.a,ChatTitle:ni,StatusContent:Un.a},computed:function(t){for(var e=1;e".concat(this.$t("chats.you")," ").concat(n):n;return{summary:"",statusnet_html:i,text:i,attachments:[]}}}),methods:{openChat:function(t){this.chat.id&&this.$router.push({name:"chat",params:{username:this.currentUser.screen_name,recipient_id:this.chat.account.id}})}}};var ri=function(t){n(457)},si=Object(dn.a)(oi,function(){var t=this,e=t.$createElement,n=t._self._c||e;return n("div",{staticClass:"chat-list-item",on:{"!click":function(e){return e.preventDefault(),t.openChat(e)}}},[n("div",{staticClass:"chat-list-item-left"},[n("UserAvatar",{attrs:{user:t.chat.account,height:"48px",width:"48px"}})],1),t._v(" "),n("div",{staticClass:"chat-list-item-center"},[n("div",{staticClass:"heading"},[t.chat.account?n("span",{staticClass:"name-and-account-name"},[n("ChatTitle",{attrs:{user:t.chat.account}})],1):t._e(),t._v(" "),n("span",{staticClass:"heading-right"})]),t._v(" "),n("div",{staticClass:"chat-preview"},[n("StatusContent",{attrs:{status:t.messageForStatusContent,"single-line":!0}}),t._v(" "),t.chat.unread>0?n("div",{staticClass:"badge badge-notification unread-chat-count"},[t._v("\n "+t._s(t.chat.unread)+"\n ")]):t._e()],1)]),t._v(" "),n("div",{staticClass:"time-wrapper"},[n("Timeago",{attrs:{time:t.chat.updated_at,"auto-update":60}})],1)])},[],!1,ri,null,null).exports,ai=n(38);function ci(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(t);e&&(i=i.filter(function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})),n.push.apply(n,i)}return n}var li={components:{BasicUserCard:ai.a,UserAvatar:Fn.default},data:function(){return{suggestions:[],userIds:[],loading:!1,query:""}},created:function(){var t,e=this;return o.a.async(function(n){for(;;)switch(n.prev=n.next){case 0:return n.next=2,o.a.awrap(this.backendInteractor.chats());case 2:t=n.sent,t.chats.forEach(function(t){return e.suggestions.push(t.account)});case 5:case"end":return n.stop()}},null,this)},computed:function(t){for(var e=1;e0?n("div",{staticClass:"timeline"},[n("List",{attrs:{items:t.sortedChatList},scopedSlots:t._u([{key:"item",fn:function(t){var e=t.item;return[n("ChatListItem",{key:e.id,attrs:{compact:!1,chat:e}})]}}],null,!1,1412157271)})],1):n("div",{staticClass:"emtpy-chat-list-alert"},[n("span",[t._v(t._s(t.$t("chats.empty_chat_list_placeholder")))])])])])},[],!1,mi,null,null).exports,vi=n(43),bi=n(111),wi=n(112),_i={name:"Timeago",props:["date"],computed:{displayDate:function(){var t=new Date;return t.setHours(0,0,0,0),this.date.getTime()===t.getTime()?this.$t("display_date.today"):this.date.toLocaleDateString("en",{day:"numeric",month:"long"})}}},xi=Object(dn.a)(_i,function(){var t=this.$createElement;return(this._self._c||t)("time",[this._v("\n "+this._s(this.displayDate)+"\n")])},[],!1,null,null,null).exports;function yi(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(t);e&&(i=i.filter(function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})),n.push.apply(n,i)}return n}var ki={name:"ChatMessage",props:["author","edited","noHeading","chatViewItem","hoveredMessageChain"],components:{Popover:hn.default,Attachment:vi.a,StatusContent:Un.a,UserAvatar:Fn.default,Gallery:bi.a,LinkPreview:wi.a,ChatMessageDate:xi},computed:function(t){for(var e=1;e0}},Object(c.e)({betterShadow:function(t){return t.interface.browserSupport.cssFilter},currentUser:function(t){return t.users.currentUser},restrictedNicknames:function(t){return t.instance.restrictedNicknames}}),{popoverMarginStyle:function(){return this.isCurrentUser?{}:{left:50}}},Object(c.c)(["mergedConfig","findUser"])),data:function(){return{hovered:!1,menuOpened:!1}},methods:{onHover:function(t){this.$emit("hover",{isHovered:t,messageChainId:this.chatViewItem.messageChainId})},deleteMessage:function(){return o.a.async(function(t){for(;;)switch(t.prev=t.next){case 0:if(!window.confirm(this.$t("chats.delete_confirm"))){t.next=4;break}return t.next=4,o.a.awrap(this.$store.dispatch("deleteChatMessage",{messageId:this.chatViewItem.data.id,chatId:this.chatViewItem.data.chat_id}));case 4:this.hovered=!1,this.menuOpened=!1;case 6:case"end":return t.stop()}},null,this)}}};var Ci=function(t){n(469)},Si=Object(dn.a)(ki,function(){var t=this,e=t.$createElement,n=t._self._c||e;return t.isMessage?n("div",{staticClass:"chat-message-wrapper",class:{"hovered-message-chain":t.hoveredMessageChain},on:{mouseover:function(e){return t.onHover(!0)},mouseleave:function(e){return t.onHover(!1)}}},[n("div",{staticClass:"chat-message",class:[{outgoing:t.isCurrentUser,incoming:!t.isCurrentUser}]},[t.isCurrentUser?t._e():n("div",{staticClass:"avatar-wrapper"},[t.chatViewItem.isHead?n("router-link",{attrs:{to:t.userProfileLink}},[n("UserAvatar",{attrs:{compact:!0,"better-shadow":t.betterShadow,user:t.author}})],1):t._e()],1),t._v(" "),n("div",{staticClass:"chat-message-inner"},[n("div",{staticClass:"status-body",style:{"min-width":t.message.attachment?"80%":""}},[n("div",{staticClass:"media status",class:{"without-attachment":!t.hasAttachment},staticStyle:{position:"relative"},on:{mouseenter:function(e){t.hovered=!0},mouseleave:function(e){t.hovered=!1}}},[n("div",{staticClass:"chat-message-menu",class:{visible:t.hovered||t.menuOpened}},[n("Popover",{attrs:{trigger:"click",placement:"top","bound-to-selector":t.isCurrentUser?"":".scrollable-message-list","bound-to":{x:"container"},margin:t.popoverMarginStyle},on:{show:function(e){t.menuOpened=!0},close:function(e){t.menuOpened=!1}}},[n("div",{attrs:{slot:"content"},slot:"content"},[n("div",{staticClass:"dropdown-menu"},[n("button",{staticClass:"dropdown-item dropdown-item-icon",on:{click:t.deleteMessage}},[n("i",{staticClass:"icon-cancel"}),t._v(" "+t._s(t.$t("chats.delete"))+"\n ")])])]),t._v(" "),n("button",{attrs:{slot:"trigger",title:t.$t("chats.more")},slot:"trigger"},[n("i",{staticClass:"icon-ellipsis"})])])],1),t._v(" "),n("StatusContent",{attrs:{status:t.messageForStatusContent,"full-content":!0}},[n("span",{staticClass:"created-at",attrs:{slot:"footer"},slot:"footer"},[t._v("\n "+t._s(t.createdAt)+"\n ")])])],1)])])])]):n("div",{staticClass:"chat-message-date-separator"},[n("ChatMessageDate",{attrs:{date:t.chatViewItem.date}})],1)},[],!1,Ci,null,null).exports,ji=n(42),Oi=function(t){return{scrollTop:t.scrollTop,scrollHeight:t.scrollHeight,offsetHeight:t.offsetHeight}};function Pi(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(t);e&&(i=i.filter(function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})),n.push.apply(n,i)}return n}function $i(t){for(var e=1;e0&&void 0!==arguments[0]?arguments[0]:{},n=e.expand,i=void 0!==n&&n,o=e.delayed;void 0!==o&&o?setTimeout(function(){t.handleResize($i({},e,{delayed:!1}))},100):this.$nextTick(function(){t.updateScrollableContainerHeight();var e=t.lastScrollPosition.offsetHeight,n=void 0===e?void 0:e;t.lastScrollPosition=Oi(t.$refs.scrollable);var o=t.lastScrollPosition.offsetHeight-n;(o<0||!t.bottomedOut()&&i)&&t.$nextTick(function(){t.updateScrollableContainerHeight(),t.$refs.scrollable.scrollTo({top:t.$refs.scrollable.scrollTop-o,left:0})})})},scrollDown:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},e=t.behavior,n=void 0===e?"auto":e,i=t.forceRead,o=void 0!==i&&i,r=this.$refs.scrollable;r&&(this.$nextTick(function(){r.scrollTo({top:r.scrollHeight,left:0,behavior:n})}),(o||this.newMessageCount>0)&&this.readChat())},readChat:function(){if(this.currentChatMessageService&&this.currentChatMessageService.lastMessage&&!document.hidden){var t=this.currentChatMessageService.lastMessage.id;this.$store.dispatch("readChat",{id:this.currentChat.id,lastReadId:t})}},bottomedOut:function(t){return function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0;if(t){var n=t.scrollTop+e;return t.scrollHeight-t.offsetHeight<=n}}(this.$refs.scrollable,t)},reachedTop:function(){var t=this.$refs.scrollable;return t&&t.scrollTop<=0},handleScroll:rn()(function(){this.currentChat&&(this.reachedTop()?this.fetchChat({maxId:this.currentChatMessageService.minId}):this.bottomedOut(150)?(this.jumpToBottomButtonVisible=!1,this.newMessageCount>0&&this.readChat()):this.jumpToBottomButtonVisible=!0)},100),handleScrollUp:function(t){var e,n,i=Oi(this.$refs.scrollable);this.$refs.scrollable.scrollTo({top:(e=t,n=i,e.scrollTop+(n.scrollHeight-e.scrollHeight)),left:0})},fetchChat:function(t){var e=this,n=t.isFirstFetch,i=void 0!==n&&n,o=t.fetchLatest,r=void 0!==o&&o,s=t.maxId,a=this.currentChatMessageService;if(a&&(!r||!this.streamingEnabled)){var c=a.chatId,l=!!s,u=r&&a.lastMessage&&a.lastMessage.id;this.backendInteractor.chatMessages({id:c,maxId:s,sinceId:u}).then(function(t){i&&we.clear(a);var n=Oi(e.$refs.scrollable);e.$store.dispatch("addChatMessages",{chatId:c,messages:t}).then(function(){e.$nextTick(function(){l&&e.handleScrollUp(n),i&&e.updateScrollableContainerHeight()})})})}},startFetching:function(){var t,e=this;return o.a.async(function(n){for(;;)switch(n.prev=n.next){case 0:if(t=this.findOpenedChatByRecipientId(this.recipientId)){n.next=12;break}return n.prev=2,n.next=5,o.a.awrap(this.backendInteractor.getOrCreateChat({accountId:this.recipientId}));case 5:t=n.sent,n.next=12;break;case 8:n.prev=8,n.t0=n.catch(2),console.error("Error creating or getting a chat",n.t0),this.errorLoadingChat=!0;case 12:t&&(this.$nextTick(function(){e.scrollDown({forceRead:!0})}),this.$store.dispatch("addOpenedChat",{chat:t}),this.doStartFetching());case 13:case"end":return n.stop()}},null,this,[[2,8]])},doStartFetching:function(){var t=this;this.$store.dispatch("startFetchingCurrentChat",{fetcher:function(){return setInterval(function(){return t.fetchChat({fetchLatest:!0})},5e3)}}),this.fetchChat({isFirstFetch:!0})},sendMessage:function(t){var e=this,n=t.status,i=t.media,o={id:this.currentChat.id,content:n};return i[0]&&(o.mediaId=i[0].id),this.backendInteractor.sendChatMessage(o).then(function(t){return e.$store.dispatch("addChatMessages",{chatId:e.currentChat.id,messages:[t]}).then(function(){e.$nextTick(function(){e.handleResize(),setTimeout(function(){e.updateScrollableContainerHeight()},100),e.scrollDown({forceRead:!0})})}),t}).catch(function(t){return console.error("Error sending message",t),{error:e.$t("chats.error_sending_message")}})},goBack:function(){this.$router.push({name:"chats",params:{username:this.currentUser.screen_name}})}}};var Ii=function(t){n(467)},Ei=Object(dn.a)(Ti,function(){var t=this,e=t.$createElement,n=t._self._c||e;return n("div",{staticClass:"chat-view"},[n("div",{staticClass:"chat-view-inner"},[n("div",{ref:"inner",staticClass:"panel-default panel chat-view-body",attrs:{id:"nav"}},[n("div",{ref:"header",staticClass:"panel-heading chat-view-heading mobile-hidden"},[n("a",{staticClass:"go-back-button",on:{click:t.goBack}},[n("i",{staticClass:"button-icon icon-left-open"})]),t._v(" "),n("div",{staticClass:"title text-center"},[n("ChatTitle",{attrs:{user:t.recipient,"with-avatar":!0}})],1)]),t._v(" "),[n("div",{ref:"scrollable",staticClass:"scrollable-message-list",style:{height:t.scrollableContainerHeight},on:{scroll:t.handleScroll}},[t.errorLoadingChat?n("div",{staticClass:"chat-loading-error"},[n("div",{staticClass:"alert error"},[t._v("\n "+t._s(t.$t("chats.error_loading_chat"))+"\n ")])]):t._l(t.chatViewItems,function(e){return n("ChatMessage",{key:e.id,attrs:{author:t.recipient,"chat-view-item":e,"hovered-message-chain":e.messageChainId===t.hoveredMessageChainId},on:{hover:t.onMessageHover}})})],2),t._v(" "),n("div",{ref:"footer",staticClass:"panel-body footer"},[n("div",{staticClass:"jump-to-bottom-button",class:{visible:t.jumpToBottomButtonVisible},on:{click:function(e){return t.scrollDown({behavior:"smooth"})}}},[n("i",{staticClass:"icon-down-open"},[t.newMessageCount?n("div",{staticClass:"badge badge-notification unread-chat-count unread-message-count"},[t._v("\n "+t._s(t.newMessageCount)+"\n ")]):t._e()])]),t._v(" "),n("PostStatusForm",{attrs:{"disable-subject":!0,"disable-scope-selector":!0,"disable-notice":!0,"disable-lock-warning":!0,"disable-polls":!0,"disable-sensitivity-checkbox":!0,"disable-submit":t.errorLoadingChat||!t.currentChat,"disable-preview":!0,"post-handler":t.sendMessage,"submit-on-enter":!t.mobileLayout,"preserve-focus":!t.mobileLayout,"auto-focus":!t.mobileLayout,placeholder:t.formPlaceholder,"file-limit":1,"max-height":"160","emoji-picker-placement":"top"},on:{resize:t.handleResize}})],1)]],2)])])},[],!1,Ii,null,null).exports,Mi=n(113),Ui=n(109),Fi={props:["user","noFollowsYou"],components:{BasicUserCard:ai.a,RemoteFollow:Mi.a,FollowButton:Ui.a},computed:{isMe:function(){return this.$store.state.users.currentUser.id===this.user.id},loggedIn:function(){return this.$store.state.users.currentUser},relationship:function(){return this.$store.getters.relationship(this.user.id)}}};var Di=function(t){n(473)},Li=Object(dn.a)(Fi,function(){var t=this,e=t.$createElement,n=t._self._c||e;return n("basic-user-card",{attrs:{user:t.user}},[n("div",{staticClass:"follow-card-content-container"},[t.isMe||!t.noFollowsYou&&t.relationship.followed_by?n("span",{staticClass:"faint"},[t._v("\n "+t._s(t.isMe?t.$t("user_card.its_you"):t.$t("user_card.follows_you"))+"\n ")]):t._e(),t._v(" "),t.loggedIn?t.isMe?t._e():[n("FollowButton",{staticClass:"follow-card-follow-button",attrs:{relationship:t.relationship,"label-following":t.$t("user_card.follow_unfollow")}})]:[t.relationship.following?t._e():n("div",{staticClass:"follow-card-follow-button"},[n("RemoteFollow",{attrs:{user:t.user}})],1)]],2)])},[],!1,Di,null,null).exports,Ni=n(141),Ri=n(190),Ai=n.n(Ri),Bi=n(191),zi=n.n(Bi),Hi=n(192);n(476);function qi(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(t);e&&(i=i.filter(function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})),n.push.apply(n,i)}return n}function Wi(t){for(var e=1;e0&&window.innerHeight+window.pageYOffset>=n-750&&this.fetchEntries()}},render:function(e){var n={props:Wi({},this.$props,h()({},r,this.entries)),on:this.$listeners,scopedSlots:this.$scopedSlots},i=Object.entries(this.$slots).map(function(t){var n=g()(t,2),i=n[0],o=n[1];return e("template",{slot:i},o)});return e("div",{class:"with-load-more"},[e(t,Ai()([{},n]),[i]),e("div",{class:"with-load-more-footer"},[this.error&&e("a",{on:{click:this.fetchEntries},class:"alert error"},[this.$t("general.generic_error")]),!this.error&&this.loading&&e("i",{class:"icon-spin3 animate-spin"}),!this.error&&!this.loading&&!this.bottomedOut&&e("a",{on:{click:this.fetchEntries}},[this.$t("general.more")])])])}})}},Gi=Vi({fetch:function(t,e){return e.dispatch("fetchFollowers",t.userId)},select:function(t,e){return Ie()(e.getters.findUser(t.userId),"followerIds",[]).map(function(t){return e.getters.findUser(t)})},destroy:function(t,e){return e.dispatch("clearFollowers",t.userId)},childPropName:"items",additionalPropNames:["userId"]})(pi.a),Ki=Vi({fetch:function(t,e){return e.dispatch("fetchFriends",t.userId)},select:function(t,e){return Ie()(e.getters.findUser(t.userId),"friendIds",[]).map(function(t){return e.getters.findUser(t)})},destroy:function(t,e){return e.dispatch("clearFriends",t.userId)},childPropName:"items",additionalPropNames:["userId"]})(pi.a),Yi={data:function(){return{error:!1,userId:null,tab:"statuses"}},created:function(){var t=this.$route.params;this.load(t.name||t.id),this.tab=Ie()(this.$route,"query.tab","statuses")},destroyed:function(){this.stopFetching()},computed:{timeline:function(){return this.$store.state.statuses.timelines.user},favorites:function(){return this.$store.state.statuses.timelines.favorites},media:function(){return this.$store.state.statuses.timelines.media},isUs:function(){return this.userId&&this.$store.state.users.currentUser.id&&this.userId===this.$store.state.users.currentUser.id},user:function(){return this.$store.getters.findUser(this.userId)},isExternal:function(){return"external-user-profile"===this.$route.name},followsTabVisible:function(){return this.isUs||!this.user.hide_follows},followersTabVisible:function(){return this.isUs||!this.user.hide_followers}},methods:{load:function(t){var e=this,n=function(t,n){n!==e.$store.state.statuses.timelines[t].userId&&e.$store.commit("clearTimeline",{timeline:t}),e.$store.dispatch("startFetchingTimeline",{timeline:t,userId:n})},i=function(t){e.userId=t,n("user",t),n("media",t),e.isUs&&n("favorites",t),e.$store.dispatch("fetchPinnedStatuses",t)};this.userId=null,this.error=!1;var o=this.$store.getters.findUser(t);o?i(o.id):this.$store.dispatch("fetchUser",t).then(function(t){var e=t.id;return i(e)}).catch(function(t){var n=Ie()(t,"error.error");e.error="No user with such user_id"===n?e.$t("user_profile.profile_does_not_exist"):n||e.$t("user_profile.profile_loading_error")})},stopFetching:function(){this.$store.dispatch("stopFetchingTimeline","user"),this.$store.dispatch("stopFetchingTimeline","favorites"),this.$store.dispatch("stopFetchingTimeline","media")},switchUser:function(t){this.stopFetching(),this.load(t)},onTabSwitch:function(t){this.tab=t,this.$router.replace({query:{tab:t}})},linkClicked:function(t){var e=t.target;"SPAN"===e.tagName&&(e=e.parentNode),"A"===e.tagName&&window.open(e.href,"_blank")}},watch:{"$route.params.id":function(t){t&&this.switchUser(t)},"$route.params.name":function(t){t&&this.switchUser(t)},"$route.query":function(t){this.tab=t.tab||"statuses"}},components:{UserCard:Dn.a,Timeline:xn,FollowerList:Gi,FriendList:Ki,FollowCard:Li,TabSwitcher:Ni.a,Conversation:fn}};var Ji=function(t){n(471)},Xi=Object(dn.a)(Yi,function(){var t=this,e=t.$createElement,n=t._self._c||e;return n("div",[t.user?n("div",{staticClass:"user-profile panel panel-default"},[n("UserCard",{attrs:{"user-id":t.userId,switcher:!0,selected:t.timeline.viewing,"allow-zooming-avatar":!0,rounded:"top"}}),t._v(" "),t.user.fields_html&&t.user.fields_html.length>0?n("div",{staticClass:"user-profile-fields"},t._l(t.user.fields_html,function(e,i){return n("dl",{key:i,staticClass:"user-profile-field"},[n("dt",{staticClass:"user-profile-field-name",attrs:{title:t.user.fields_text[i].name},on:{click:function(e){return e.preventDefault(),t.linkClicked(e)}}},[t._v("\n "+t._s(e.name)+"\n ")]),t._v(" "),n("dd",{staticClass:"user-profile-field-value",attrs:{title:t.user.fields_text[i].value},domProps:{innerHTML:t._s(e.value)},on:{click:function(e){return e.preventDefault(),t.linkClicked(e)}}})])}),0):t._e(),t._v(" "),n("tab-switcher",{attrs:{"active-tab":t.tab,"render-only-focused":!0,"on-switch":t.onTabSwitch}},[n("Timeline",{key:"statuses",attrs:{label:t.$t("user_card.statuses"),count:t.user.statuses_count,embedded:!0,title:t.$t("user_profile.timeline_title"),timeline:t.timeline,"timeline-name":"user","user-id":t.userId,"pinned-status-ids":t.user.pinnedStatusIds,"in-profile":!0}}),t._v(" "),t.followsTabVisible?n("div",{key:"followees",attrs:{label:t.$t("user_card.followees"),disabled:!t.user.friends_count}},[n("FriendList",{attrs:{"user-id":t.userId},scopedSlots:t._u([{key:"item",fn:function(t){var e=t.item;return[n("FollowCard",{attrs:{user:e}})]}}],null,!1,676117295)})],1):t._e(),t._v(" "),t.followersTabVisible?n("div",{key:"followers",attrs:{label:t.$t("user_card.followers"),disabled:!t.user.followers_count}},[n("FollowerList",{attrs:{"user-id":t.userId},scopedSlots:t._u([{key:"item",fn:function(e){var i=e.item;return[n("FollowCard",{attrs:{user:i,"no-follows-you":t.isUs}})]}}],null,!1,3839341157)})],1):t._e(),t._v(" "),n("Timeline",{key:"media",attrs:{label:t.$t("user_card.media"),disabled:!t.media.visibleStatuses.length,embedded:!0,title:t.$t("user_card.media"),"timeline-name":"media",timeline:t.media,"user-id":t.userId,"in-profile":!0}}),t._v(" "),t.isUs?n("Timeline",{key:"favorites",attrs:{label:t.$t("user_card.favorites"),disabled:!t.favorites.visibleStatuses.length,embedded:!0,title:t.$t("user_card.favorites"),"timeline-name":"favorites",timeline:t.favorites,"in-profile":!0}}):t._e()],1)],1):n("div",{staticClass:"panel user-profile-placeholder"},[n("div",{staticClass:"panel-heading"},[n("div",{staticClass:"title"},[t._v("\n "+t._s(t.$t("settings.profile_tab"))+"\n ")])]),t._v(" "),n("div",{staticClass:"panel-body"},[t.error?n("span",[t._v(t._s(t.error))]):n("i",{staticClass:"icon-spin3 animate-spin"})])])])},[],!1,Ji,null,null).exports,Qi={components:{FollowCard:Li,Conversation:fn,Status:sn.default},props:["query"],data:function(){return{loaded:!1,loading:!1,searchTerm:this.query||"",userIds:[],statuses:[],hashtags:[],currenResultTab:"statuses"}},computed:{users:function(){var t=this;return this.userIds.map(function(e){return t.$store.getters.findUser(e)})},visibleStatuses:function(){var t=this.$store.state.statuses.allStatusesObject;return this.statuses.filter(function(e){return t[e.id]&&!t[e.id].deleted})}},mounted:function(){this.search(this.query)},watch:{query:function(t){this.searchTerm=t,this.search(t)}},methods:{newQuery:function(t){this.$router.push({name:"search",query:{query:t}}),this.$refs.searchInput.focus()},search:function(t){var e=this;t?(this.loading=!0,this.userIds=[],this.statuses=[],this.hashtags=[],this.$refs.searchInput.blur(),this.$store.dispatch("search",{q:t,resolve:!0}).then(function(t){e.loading=!1,e.userIds=pt()(t.accounts,"id"),e.statuses=t.statuses,e.hashtags=t.hashtags,e.currenResultTab=e.getActiveTab(),e.loaded=!0})):this.loading=!1},resultCount:function(t){var e=this[t].length;return 0===e?"":" (".concat(e,")")},onResultTabSwitch:function(t){this.currenResultTab=t},getActiveTab:function(){return this.visibleStatuses.length>0?"statuses":this.users.length>0?"people":this.hashtags.length>0?"hashtags":"statuses"},lastHistoryRecord:function(t){return t.history&&t.history[0]}}};var Zi=function(t){n(477)},to=Object(dn.a)(Qi,function(){var t=this,e=t.$createElement,n=t._self._c||e;return n("div",{staticClass:"panel panel-default"},[n("div",{staticClass:"panel-heading"},[n("div",{staticClass:"title"},[t._v("\n "+t._s(t.$t("nav.search"))+"\n ")])]),t._v(" "),n("div",{staticClass:"search-input-container"},[n("input",{directives:[{name:"model",rawName:"v-model",value:t.searchTerm,expression:"searchTerm"}],ref:"searchInput",staticClass:"search-input",attrs:{placeholder:t.$t("nav.search")},domProps:{value:t.searchTerm},on:{keyup:function(e){return!e.type.indexOf("key")&&t._k(e.keyCode,"enter",13,e.key,"Enter")?null:t.newQuery(t.searchTerm)},input:function(e){e.target.composing||(t.searchTerm=e.target.value)}}}),t._v(" "),n("button",{staticClass:"btn search-button",on:{click:function(e){return t.newQuery(t.searchTerm)}}},[n("i",{staticClass:"icon-search"})])]),t._v(" "),t.loading?n("div",{staticClass:"text-center loading-icon"},[n("i",{staticClass:"icon-spin3 animate-spin"})]):t.loaded?n("div",[n("div",{staticClass:"search-nav-heading"},[n("tab-switcher",{ref:"tabSwitcher",attrs:{"on-switch":t.onResultTabSwitch,"active-tab":t.currenResultTab}},[n("span",{key:"statuses",attrs:{label:t.$t("user_card.statuses")+t.resultCount("visibleStatuses")}}),t._v(" "),n("span",{key:"people",attrs:{label:t.$t("search.people")+t.resultCount("users")}}),t._v(" "),n("span",{key:"hashtags",attrs:{label:t.$t("search.hashtags")+t.resultCount("hashtags")}})])],1)]):t._e(),t._v(" "),n("div",{staticClass:"panel-body"},["statuses"===t.currenResultTab?n("div",[0===t.visibleStatuses.length&&!t.loading&&t.loaded?n("div",{staticClass:"search-result-heading"},[n("h4",[t._v(t._s(t.$t("search.no_results")))])]):t._e(),t._v(" "),t._l(t.visibleStatuses,function(t){return n("Status",{key:t.id,staticClass:"search-result",attrs:{collapsable:!1,expandable:!1,compact:!1,statusoid:t,"no-heading":!1}})})],2):"people"===t.currenResultTab?n("div",[0===t.users.length&&!t.loading&&t.loaded?n("div",{staticClass:"search-result-heading"},[n("h4",[t._v(t._s(t.$t("search.no_results")))])]):t._e(),t._v(" "),t._l(t.users,function(t){return n("FollowCard",{key:t.id,staticClass:"list-item search-result",attrs:{user:t}})})],2):"hashtags"===t.currenResultTab?n("div",[0===t.hashtags.length&&!t.loading&&t.loaded?n("div",{staticClass:"search-result-heading"},[n("h4",[t._v(t._s(t.$t("search.no_results")))])]):t._e(),t._v(" "),t._l(t.hashtags,function(e){return n("div",{key:e.url,staticClass:"status trend search-result"},[n("div",{staticClass:"hashtag"},[n("router-link",{attrs:{to:{name:"tag-timeline",params:{tag:e.name}}}},[t._v("\n #"+t._s(e.name)+"\n ")]),t._v(" "),t.lastHistoryRecord(e)?n("div",[1==t.lastHistoryRecord(e).accounts?n("span",[t._v("\n "+t._s(t.$t("search.person_talking",{count:t.lastHistoryRecord(e).accounts}))+"\n ")]):n("span",[t._v("\n "+t._s(t.$t("search.people_talking",{count:t.lastHistoryRecord(e).accounts}))+"\n ")])]):t._e()],1),t._v(" "),t.lastHistoryRecord(e)?n("div",{staticClass:"count"},[t._v("\n "+t._s(t.lastHistoryRecord(e).uses)+"\n ")]):t._e()])})],2):t._e()]),t._v(" "),n("div",{staticClass:"search-result-footer text-center panel-footer faint"})])},[],!1,Zi,null,null).exports,eo=n(220),no=n(53);function io(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(t);e&&(i=i.filter(function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})),n.push.apply(n,i)}return n}function oo(t){for(var e=1;e0?n("span",{staticClass:"badge follow-request-count"},[t._v("\n "+t._s(t.followRequestCount)+"\n ")]):t._e()])],1):t._e(),t._v(" "),n("li",[n("router-link",{attrs:{to:{name:"about"}}},[n("i",{staticClass:"button-icon icon-info-circled"}),t._v(" "+t._s(t.$t("nav.about"))+"\n ")])],1)])])])},[],!1,gr,null,null).exports,br={data:function(){return{searchTerm:void 0,hidden:!0,error:!1,loading:!1}},watch:{$route:function(t){"search"===t.name&&(this.searchTerm=t.query.query)}},methods:{find:function(t){this.$router.push({name:"search",query:{query:t}}),this.$refs.searchInput.focus()},toggleHidden:function(){var t=this;this.hidden=!this.hidden,this.$emit("toggled",this.hidden),this.$nextTick(function(){t.hidden||t.$refs.searchInput.focus()})}}};var wr=function(t){n(533)},_r=Object(dn.a)(br,function(){var t=this,e=t.$createElement,n=t._self._c||e;return n("div",[n("div",{staticClass:"search-bar-container"},[t.loading?n("i",{staticClass:"icon-spin4 finder-icon animate-spin-slow"}):t._e(),t._v(" "),t.hidden?n("a",{attrs:{href:"#",title:t.$t("nav.search")}},[n("i",{staticClass:"button-icon icon-search",on:{click:function(e){return e.preventDefault(),e.stopPropagation(),t.toggleHidden(e)}}})]):[n("input",{directives:[{name:"model",rawName:"v-model",value:t.searchTerm,expression:"searchTerm"}],ref:"searchInput",staticClass:"search-bar-input",attrs:{id:"search-bar-input",placeholder:t.$t("nav.search"),type:"text"},domProps:{value:t.searchTerm},on:{keyup:function(e){return!e.type.indexOf("key")&&t._k(e.keyCode,"enter",13,e.key,"Enter")?null:t.find(t.searchTerm)},input:function(e){e.target.composing||(t.searchTerm=e.target.value)}}}),t._v(" "),n("button",{staticClass:"btn search-button",on:{click:function(e){return t.find(t.searchTerm)}}},[n("i",{staticClass:"icon-search"})]),t._v(" "),n("i",{staticClass:"button-icon icon-cancel",on:{click:function(e){return e.preventDefault(),e.stopPropagation(),t.toggleHidden(e)}}})]],2)])},[],!1,wr,null,null).exports,xr=n(221),yr=n.n(xr);function kr(t){var e=t.$store.state.users.currentUser.credentials;e&&(t.usersToFollow.forEach(function(t){t.name="Loading..."}),w.c.suggestions({credentials:e}).then(function(e){!function(t,e){var n=this,i=yr()(e);t.usersToFollow.forEach(function(e,o){var r=i[o],s=r.avatar||n.$store.state.instance.defaultAvatar,a=r.acct;e.img=s,e.name=a,t.$store.state.api.backendInteractor.fetchUser({id:a}).then(function(n){n.error||(t.$store.commit("addNewUsers",[n]),e.id=n.id)})})}(t,e)}))}var Cr={data:function(){return{usersToFollow:[]}},computed:{user:function(){return this.$store.state.users.currentUser.screen_name},suggestionsEnabled:function(){return this.$store.state.instance.suggestionsEnabled}},methods:{userProfileLink:function(t,e){return Object(Rn.a)(t,e,this.$store.state.instance.restrictedNicknames)}},watch:{user:function(t,e){this.suggestionsEnabled&&kr(this)}},mounted:function(){var t=this;this.usersToFollow=new Array(3).fill().map(function(e){return{img:t.$store.state.instance.defaultAvatar,name:"",id:0}}),this.suggestionsEnabled&&kr(this)}};var Sr=function(t){n(535)},jr=Object(dn.a)(Cr,function(){var t=this,e=t.$createElement,n=t._self._c||e;return n("div",{staticClass:"who-to-follow-panel"},[n("div",{staticClass:"panel panel-default base01-background"},[n("div",{staticClass:"panel-heading timeline-heading base02-background base04"},[n("div",{staticClass:"title"},[t._v("\n "+t._s(t.$t("who_to_follow.who_to_follow"))+"\n ")])]),t._v(" "),n("div",{staticClass:"who-to-follow"},[t._l(t.usersToFollow,function(e){return n("p",{key:e.id,staticClass:"who-to-follow-items"},[n("img",{attrs:{src:e.img}}),t._v(" "),n("router-link",{attrs:{to:t.userProfileLink(e.id,e.name)}},[t._v("\n "+t._s(e.name)+"\n ")]),n("br")],1)}),t._v(" "),n("p",{staticClass:"who-to-follow-more"},[n("router-link",{attrs:{to:{name:"who-to-follow"}}},[t._v("\n "+t._s(t.$t("who_to_follow.more"))+"\n ")])],1)],2)])])},[],!1,Sr,null,null).exports,Or={props:{isOpen:{type:Boolean,default:!0},noBackground:{type:Boolean,default:!1}},computed:{classes:function(){return{"modal-background":!this.noBackground,open:this.isOpen}}}};var Pr=function(t){n(542)},$r=Object(dn.a)(Or,function(){var t=this,e=t.$createElement;return(t._self._c||e)("div",{directives:[{name:"show",rawName:"v-show",value:t.isOpen,expression:"isOpen"},{name:"body-scroll-lock",rawName:"v-body-scroll-lock",value:t.isOpen&&!t.noBackground,expression:"isOpen && !noBackground"}],staticClass:"modal-view",class:t.classes,on:{click:function(e){return e.target!==e.currentTarget?null:t.$emit("backdropClicked")}}},[t._t("default")],2)},[],!1,Pr,null,null).exports;var Tr=function(t){n(544)};var Ir=function(t){n(546)};function Er(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(t);e&&(i=i.filter(function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})),n.push.apply(n,i)}return n}var Mr={components:{Modal:$r,SettingsModalContent:function(t,e){var n=function(){return function(){return function(t){for(var e=1;e2&&void 0!==arguments[2]?arguments[2]:30,perpendicularTolerance:arguments.length>3&&void 0!==arguments[3]?arguments[3]:1,_startPos:[0,0],_swiping:!1}},beginSwipe:function(t,e){e._startPos=Nr(t),e._swiping=!0},updateSwipe:function(t,e){if(e._swiping){var n,i,o=(n=e._startPos,[(i=Nr(t))[0]-n[0],i[1]-n[1]]);if(!(Rr(o)1},type:function(){return this.currentMedia?ie.a.fileType(this.currentMedia.mimetype):null}},created:function(){this.mediaSwipeGestureRight=zr.swipeGesture(zr.DIRECTION_RIGHT,this.goPrev,50),this.mediaSwipeGestureLeft=zr.swipeGesture(zr.DIRECTION_LEFT,this.goNext,50)},methods:{mediaTouchStart:function(t){zr.beginSwipe(t,this.mediaSwipeGestureRight),zr.beginSwipe(t,this.mediaSwipeGestureLeft)},mediaTouchMove:function(t){zr.updateSwipe(t,this.mediaSwipeGestureRight),zr.updateSwipe(t,this.mediaSwipeGestureLeft)},hide:function(){this.$store.dispatch("closeMediaViewer")},goPrev:function(){if(this.canNavigate){var t=0===this.currentIndex?this.media.length-1:this.currentIndex-1;this.$store.dispatch("setCurrent",this.media[t])}},goNext:function(){if(this.canNavigate){var t=this.currentIndex===this.media.length-1?0:this.currentIndex+1;this.$store.dispatch("setCurrent",this.media[t])}},handleKeyupEvent:function(t){this.showing&&27===t.keyCode&&this.hide()},handleKeydownEvent:function(t){this.showing&&(39===t.keyCode?this.goNext():37===t.keyCode&&this.goPrev())}},mounted:function(){window.addEventListener("popstate",this.hide),document.addEventListener("keyup",this.handleKeyupEvent),document.addEventListener("keydown",this.handleKeydownEvent)},destroyed:function(){window.removeEventListener("popstate",this.hide),document.removeEventListener("keyup",this.handleKeyupEvent),document.removeEventListener("keydown",this.handleKeydownEvent)}};var qr=function(t){n(548)},Wr=Object(dn.a)(Hr,function(){var t=this,e=t.$createElement,n=t._self._c||e;return t.showing?n("Modal",{staticClass:"media-modal-view",on:{backdropClicked:t.hide}},["image"===t.type?n("img",{staticClass:"modal-image",attrs:{src:t.currentMedia.url,alt:t.currentMedia.description,title:t.currentMedia.description},on:{touchstart:function(e){return e.stopPropagation(),t.mediaTouchStart(e)},touchmove:function(e){return e.stopPropagation(),t.mediaTouchMove(e)},click:t.hide}}):t._e(),t._v(" "),"video"===t.type?n("VideoAttachment",{staticClass:"modal-image",attrs:{attachment:t.currentMedia,controls:!0}}):t._e(),t._v(" "),"audio"===t.type?n("audio",{staticClass:"modal-image",attrs:{src:t.currentMedia.url,alt:t.currentMedia.description,title:t.currentMedia.description,controls:""}}):t._e(),t._v(" "),t.canNavigate?n("button",{staticClass:"modal-view-button-arrow modal-view-button-arrow--prev",attrs:{title:t.$t("media_modal.previous")},on:{click:function(e){return e.stopPropagation(),e.preventDefault(),t.goPrev(e)}}},[n("i",{staticClass:"icon-left-open arrow-icon"})]):t._e(),t._v(" "),t.canNavigate?n("button",{staticClass:"modal-view-button-arrow modal-view-button-arrow--next",attrs:{title:t.$t("media_modal.next")},on:{click:function(e){return e.stopPropagation(),e.preventDefault(),t.goNext(e)}}},[n("i",{staticClass:"icon-right-open arrow-icon"})]):t._e()],1):t._e()},[],!1,qr,null,null).exports;function Vr(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(t);e&&(i=i.filter(function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})),n.push.apply(n,i)}return n}var Gr={props:["logout"],data:function(){return{closed:!0,closeGesture:void 0}},created:function(){this.closeGesture=zr.swipeGesture(zr.DIRECTION_LEFT,this.toggleDrawer),this.currentUser&&this.currentUser.locked&&this.$store.dispatch("startFetchingFollowRequests")},components:{UserCard:Dn.a},computed:function(t){for(var e=1;e0?n("span",{staticClass:"badge follow-request-count"},[t._v("\n "+t._s(t.followRequestCount)+"\n ")]):t._e()])],1):t._e(),t._v(" "),t.chat?n("li",{on:{click:t.toggleDrawer}},[n("router-link",{attrs:{to:{name:"chat"}}},[n("i",{staticClass:"button-icon icon-chat"}),t._v(" "+t._s(t.$t("nav.chat"))+"\n ")])],1):t._e()]):t._e(),t._v(" "),n("ul",[t.currentUser||!t.privateMode?n("li",{on:{click:t.toggleDrawer}},[n("router-link",{attrs:{to:{name:"search"}}},[n("i",{staticClass:"button-icon icon-search"}),t._v(" "+t._s(t.$t("nav.search"))+"\n ")])],1):t._e(),t._v(" "),t.currentUser&&t.suggestionsEnabled?n("li",{on:{click:t.toggleDrawer}},[n("router-link",{attrs:{to:{name:"who-to-follow"}}},[n("i",{staticClass:"button-icon icon-user-plus"}),t._v(" "+t._s(t.$t("nav.who_to_follow"))+"\n ")])],1):t._e(),t._v(" "),n("li",{on:{click:t.toggleDrawer}},[n("a",{attrs:{href:"#"},on:{click:t.openSettingsModal}},[n("i",{staticClass:"button-icon icon-cog"}),t._v(" "+t._s(t.$t("settings.settings"))+"\n ")])]),t._v(" "),n("li",{on:{click:t.toggleDrawer}},[n("router-link",{attrs:{to:{name:"about"}}},[n("i",{staticClass:"button-icon icon-info-circled"}),t._v(" "+t._s(t.$t("nav.about"))+"\n ")])],1),t._v(" "),t.currentUser&&"admin"===t.currentUser.role?n("li",{on:{click:t.toggleDrawer}},[n("a",{attrs:{href:"/pleroma/admin/#/login-pleroma",target:"_blank"}},[n("i",{staticClass:"button-icon icon-gauge"}),t._v(" "+t._s(t.$t("nav.administration"))+"\n ")])]):t._e(),t._v(" "),t.currentUser?n("li",{on:{click:t.toggleDrawer}},[n("a",{attrs:{href:"#"},on:{click:t.doLogout}},[n("i",{staticClass:"button-icon icon-logout"}),t._v(" "+t._s(t.$t("login.logout"))+"\n ")])]):t._e()])]),t._v(" "),n("div",{staticClass:"side-drawer-click-outside",class:{"side-drawer-click-outside-closed":t.closed},on:{click:function(e){return e.stopPropagation(),e.preventDefault(),t.toggleDrawer(e)}}})])},[],!1,Kr,null,null).exports,Jr=n(41),Xr=n.n(Jr),Qr=new Set(["chats","chat"]),Zr={data:function(){return{hidden:!1,scrollingDown:!1,inputActive:!1,oldScrollPos:0,amountScrolled:0}},created:function(){this.autohideFloatingPostButton&&this.activateFloatingPostButtonAutohide(),window.addEventListener("resize",this.handleOSK)},destroyed:function(){this.autohideFloatingPostButton&&this.deactivateFloatingPostButtonAutohide(),window.removeEventListener("resize",this.handleOSK)},computed:{isLoggedIn:function(){return!!this.$store.state.users.currentUser},isHidden:function(){return!!Qr.has(this.$route.name)||this.autohideFloatingPostButton&&(this.hidden||this.inputActive)},autohideFloatingPostButton:function(){return!!this.$store.getters.mergedConfig.autohideFloatingPostButton}},watch:{autohideFloatingPostButton:function(t){t?this.activateFloatingPostButtonAutohide():this.deactivateFloatingPostButtonAutohide()}},methods:{activateFloatingPostButtonAutohide:function(){window.addEventListener("scroll",this.handleScrollStart),window.addEventListener("scroll",this.handleScrollEnd)},deactivateFloatingPostButtonAutohide:function(){window.removeEventListener("scroll",this.handleScrollStart),window.removeEventListener("scroll",this.handleScrollEnd)},openPostForm:function(){this.$store.dispatch("openPostStatusModal")},handleOSK:function(){var t=window.innerWidth<350,e=t&&window.innerHeight<345,n=!t&&window.innerWidth<450&&window.innerHeight<560;this.inputActive=!(!e&&!n)},handleScrollStart:Xr()(function(){window.scrollY>this.oldScrollPos?this.hidden=!0:this.hidden=!1,this.oldScrollPos=window.scrollY},100,{leading:!0,trailing:!1}),handleScrollEnd:Xr()(function(){this.hidden=!1,this.oldScrollPos=window.scrollY},100,{leading:!1,trailing:!0})}};var ts=function(t){n(552)},es=Object(dn.a)(Zr,function(){var t=this.$createElement,e=this._self._c||t;return this.isLoggedIn?e("div",[e("button",{staticClass:"new-status-button",class:{hidden:this.isHidden},on:{click:this.openPostForm}},[e("i",{staticClass:"icon-edit"})])]):this._e()},[],!1,ts,null,null).exports;function ns(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(t);e&&(i=i.filter(function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})),n.push.apply(n,i)}return n}var is={components:{SideDrawer:Yr,Notifications:Gn},data:function(){return{notificationsCloseGesture:void 0,notificationsOpen:!1}},created:function(){this.notificationsCloseGesture=zr.swipeGesture(zr.DIRECTION_RIGHT,this.closeMobileNotifications,50)},computed:function(t){for(var e=1;e=e.scrollHeight&&this.$refs.notifications.fetchOlderNotifications()}},watch:{$route:function(){this.closeMobileNotifications()}}};var os=function(t){n(554)},rs=Object(dn.a)(is,function(){var t=this,e=t.$createElement,n=t._self._c||e;return n("div",[n("nav",{staticClass:"nav-bar container",class:{"mobile-hidden":t.isChat},attrs:{id:"nav"}},[n("div",{staticClass:"mobile-inner-nav",on:{click:function(e){return t.scrollToTop()}}},[n("div",{staticClass:"item"},[n("a",{staticClass:"mobile-nav-button",attrs:{href:"#"},on:{click:function(e){return e.stopPropagation(),e.preventDefault(),t.toggleMobileSidebar()}}},[n("i",{staticClass:"button-icon icon-menu"}),t._v(" "),t.unreadChatCount?n("div",{staticClass:"alert-dot"}):t._e()]),t._v(" "),t.hideSitename?t._e():n("router-link",{staticClass:"site-name",attrs:{to:{name:"root"},"active-class":"home"}},[t._v("\n "+t._s(t.sitename)+"\n ")])],1),t._v(" "),n("div",{staticClass:"item right"},[t.currentUser?n("a",{staticClass:"mobile-nav-button",attrs:{href:"#"},on:{click:function(e){return e.stopPropagation(),e.preventDefault(),t.openMobileNotifications()}}},[n("i",{staticClass:"button-icon icon-bell-alt"}),t._v(" "),t.unseenNotificationsCount?n("div",{staticClass:"alert-dot"}):t._e()]):t._e()])])]),t._v(" "),t.currentUser?n("div",{staticClass:"mobile-notifications-drawer",class:{closed:!t.notificationsOpen},on:{touchstart:function(e){return e.stopPropagation(),t.notificationsTouchStart(e)},touchmove:function(e){return e.stopPropagation(),t.notificationsTouchMove(e)}}},[n("div",{staticClass:"mobile-notifications-header"},[n("span",{staticClass:"title"},[t._v(t._s(t.$t("notifications.notifications")))]),t._v(" "),n("a",{staticClass:"mobile-nav-button",on:{click:function(e){return e.stopPropagation(),e.preventDefault(),t.closeMobileNotifications()}}},[n("i",{staticClass:"button-icon icon-cancel"})])]),t._v(" "),n("div",{staticClass:"mobile-notifications",on:{scroll:t.onScroll}},[n("Notifications",{ref:"notifications",attrs:{"no-heading":!0}})],1)]):t._e(),t._v(" "),n("SideDrawer",{ref:"sideDrawer",attrs:{logout:t.logout}})],1)},[],!1,os,null,null).exports,ss=n(54);function as(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(t);e&&(i=i.filter(function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})),n.push.apply(n,i)}return n}var cs={components:{Status:sn.default,List:pi.a,Checkbox:ss.a,Modal:$r},data:function(){return{comment:"",forward:!1,statusIdsToReport:[],processing:!1,error:!1}},computed:{isLoggedIn:function(){return!!this.$store.state.users.currentUser},isOpen:function(){return this.isLoggedIn&&this.$store.state.reports.modalActivated},userId:function(){return this.$store.state.reports.userId},user:function(){return this.$store.getters.findUser(this.userId)},remoteInstance:function(){return!this.user.is_local&&this.user.screen_name.substr(this.user.screen_name.indexOf("@")+1)},statuses:function(){return this.$store.state.reports.statuses}},watch:{userId:"resetState"},methods:{resetState:function(){this.comment="",this.forward=!1,this.statusIdsToReport=[],this.processing=!1,this.error=!1},closeModal:function(){this.$store.dispatch("closeUserReportingModal")},reportUser:function(){var t=this;this.processing=!0,this.error=!1;var e={userId:this.userId,comment:this.comment,forward:this.forward,statusIds:this.statusIdsToReport};this.$store.state.api.backendInteractor.reportUser(function(t){for(var e=1;e {\n if (status.is_post_verb) {\n return 'status'\n }\n\n if (status.retweeted_status) {\n return 'retweet'\n }\n\n if ((typeof status.uri === 'string' && status.uri.match(/(fave|objectType=Favourite)/)) ||\n (typeof status.text === 'string' && status.text.match(/favorited/))) {\n return 'favorite'\n }\n\n if (status.text.match(/deleted notice {{tag/) || status.qvitter_delete_notice) {\n return 'deletion'\n }\n\n if (status.text.match(/started following/) || status.activity_type === 'follow') {\n return 'follow'\n }\n\n return 'unknown'\n}\n\nexport const parseUser = (data) => {\n const output = {}\n const masto = data.hasOwnProperty('acct')\n // case for users in \"mentions\" property for statuses in MastoAPI\n const mastoShort = masto && !data.hasOwnProperty('avatar')\n\n output.id = String(data.id)\n\n if (masto) {\n output.screen_name = data.acct\n output.statusnet_profile_url = data.url\n\n // There's nothing else to get\n if (mastoShort) {\n return output\n }\n\n output.name = data.display_name\n output.name_html = addEmojis(escape(data.display_name), data.emojis)\n\n output.description = data.note\n output.description_html = addEmojis(data.note, data.emojis)\n\n output.fields = data.fields\n output.fields_html = data.fields.map(field => {\n return {\n name: addEmojis(field.name, data.emojis),\n value: addEmojis(field.value, data.emojis)\n }\n })\n output.fields_text = data.fields.map(field => {\n return {\n name: unescape(field.name.replace(/<[^>]*>/g, '')),\n value: unescape(field.value.replace(/<[^>]*>/g, ''))\n }\n })\n\n // Utilize avatar_static for gif avatars?\n output.profile_image_url = data.avatar\n output.profile_image_url_original = data.avatar\n\n // Same, utilize header_static?\n output.cover_photo = data.header\n\n output.friends_count = data.following_count\n\n output.bot = data.bot\n\n if (data.pleroma) {\n const relationship = data.pleroma.relationship\n\n output.background_image = data.pleroma.background_image\n output.favicon = data.pleroma.favicon\n output.token = data.pleroma.chat_token\n\n if (relationship) {\n output.relationship = relationship\n }\n\n output.allow_following_move = data.pleroma.allow_following_move\n\n output.hide_follows = data.pleroma.hide_follows\n output.hide_followers = data.pleroma.hide_followers\n output.hide_follows_count = data.pleroma.hide_follows_count\n output.hide_followers_count = data.pleroma.hide_followers_count\n\n output.rights = {\n moderator: data.pleroma.is_moderator,\n admin: data.pleroma.is_admin\n }\n // TODO: Clean up in UI? This is duplication from what BE does for qvitterapi\n if (output.rights.admin) {\n output.role = 'admin'\n } else if (output.rights.moderator) {\n output.role = 'moderator'\n } else {\n output.role = 'member'\n }\n }\n\n if (data.source) {\n output.description = data.source.note\n output.default_scope = data.source.privacy\n output.fields = data.source.fields\n if (data.source.pleroma) {\n output.no_rich_text = data.source.pleroma.no_rich_text\n output.show_role = data.source.pleroma.show_role\n output.discoverable = data.source.pleroma.discoverable\n }\n }\n\n // TODO: handle is_local\n output.is_local = !output.screen_name.includes('@')\n } else {\n output.screen_name = data.screen_name\n\n output.name = data.name\n output.name_html = data.name_html\n\n output.description = data.description\n output.description_html = data.description_html\n\n output.profile_image_url = data.profile_image_url\n output.profile_image_url_original = data.profile_image_url_original\n\n output.cover_photo = data.cover_photo\n\n output.friends_count = data.friends_count\n\n // output.bot = ??? missing\n\n output.statusnet_profile_url = data.statusnet_profile_url\n\n output.is_local = data.is_local\n output.role = data.role\n output.show_role = data.show_role\n\n if (data.rights) {\n output.rights = {\n moderator: data.rights.delete_others_notice,\n admin: data.rights.admin\n }\n }\n output.no_rich_text = data.no_rich_text\n output.default_scope = data.default_scope\n output.hide_follows = data.hide_follows\n output.hide_followers = data.hide_followers\n output.hide_follows_count = data.hide_follows_count\n output.hide_followers_count = data.hide_followers_count\n output.background_image = data.background_image\n // Websocket token\n output.token = data.token\n\n // Convert relationsip data to expected format\n output.relationship = {\n muting: data.muted,\n blocking: data.statusnet_blocking,\n followed_by: data.follows_you,\n following: data.following\n }\n }\n\n output.created_at = new Date(data.created_at)\n output.locked = data.locked\n output.followers_count = data.followers_count\n output.statuses_count = data.statuses_count\n output.friendIds = []\n output.followerIds = []\n output.pinnedStatusIds = []\n\n if (data.pleroma) {\n output.follow_request_count = data.pleroma.follow_request_count\n\n output.tags = data.pleroma.tags\n output.deactivated = data.pleroma.deactivated\n\n output.notification_settings = data.pleroma.notification_settings\n output.unread_chat_count = data.pleroma.unread_chat_count\n }\n\n output.tags = output.tags || []\n output.rights = output.rights || {}\n output.notification_settings = output.notification_settings || {}\n\n return output\n}\n\nexport const parseAttachment = (data) => {\n const output = {}\n const masto = !data.hasOwnProperty('oembed')\n\n if (masto) {\n // Not exactly same...\n output.mimetype = data.pleroma ? data.pleroma.mime_type : data.type\n output.meta = data.meta // not present in BE yet\n output.id = data.id\n } else {\n output.mimetype = data.mimetype\n // output.meta = ??? missing\n }\n\n output.url = data.url\n output.large_thumb_url = data.preview_url\n output.description = data.description\n\n return output\n}\nexport const addEmojis = (string, emojis) => {\n const matchOperatorsRegex = /[|\\\\{}()[\\]^$+*?.-]/g\n return emojis.reduce((acc, emoji) => {\n const regexSafeShortCode = emoji.shortcode.replace(matchOperatorsRegex, '\\\\$&')\n return acc.replace(\n new RegExp(`:${regexSafeShortCode}:`, 'g'),\n `:${emoji.shortcode}:`\n )\n }, string)\n}\n\nexport const parseStatus = (data) => {\n const output = {}\n const masto = data.hasOwnProperty('account')\n\n if (masto) {\n output.favorited = data.favourited\n output.fave_num = data.favourites_count\n\n output.repeated = data.reblogged\n output.repeat_num = data.reblogs_count\n\n output.bookmarked = data.bookmarked\n\n output.type = data.reblog ? 'retweet' : 'status'\n output.nsfw = data.sensitive\n\n output.statusnet_html = addEmojis(data.content, data.emojis)\n\n output.tags = data.tags\n\n if (data.pleroma) {\n const { pleroma } = data\n output.text = pleroma.content ? data.pleroma.content['text/plain'] : data.content\n output.summary = pleroma.spoiler_text ? data.pleroma.spoiler_text['text/plain'] : data.spoiler_text\n output.statusnet_conversation_id = data.pleroma.conversation_id\n output.is_local = pleroma.local\n output.in_reply_to_screen_name = data.pleroma.in_reply_to_account_acct\n output.thread_muted = pleroma.thread_muted\n output.emoji_reactions = pleroma.emoji_reactions\n output.parent_visible = pleroma.parent_visible === undefined ? true : pleroma.parent_visible\n } else {\n output.text = data.content\n output.summary = data.spoiler_text\n }\n\n output.in_reply_to_status_id = data.in_reply_to_id\n output.in_reply_to_user_id = data.in_reply_to_account_id\n output.replies_count = data.replies_count\n\n if (output.type === 'retweet') {\n output.retweeted_status = parseStatus(data.reblog)\n }\n\n output.summary_html = addEmojis(escape(data.spoiler_text), data.emojis)\n output.external_url = data.url\n output.poll = data.poll\n if (output.poll) {\n output.poll.options = (output.poll.options || []).map(field => ({\n ...field,\n title_html: addEmojis(field.title, data.emojis)\n }))\n }\n output.pinned = data.pinned\n output.muted = data.muted\n } else {\n output.favorited = data.favorited\n output.fave_num = data.fave_num\n\n output.repeated = data.repeated\n output.repeat_num = data.repeat_num\n\n // catchall, temporary\n // Object.assign(output, data)\n\n output.type = qvitterStatusType(data)\n\n if (data.nsfw === undefined) {\n output.nsfw = isNsfw(data)\n if (data.retweeted_status) {\n output.nsfw = data.retweeted_status.nsfw\n }\n } else {\n output.nsfw = data.nsfw\n }\n\n output.statusnet_html = data.statusnet_html\n output.text = data.text\n\n output.in_reply_to_status_id = data.in_reply_to_status_id\n output.in_reply_to_user_id = data.in_reply_to_user_id\n output.in_reply_to_screen_name = data.in_reply_to_screen_name\n output.statusnet_conversation_id = data.statusnet_conversation_id\n\n if (output.type === 'retweet') {\n output.retweeted_status = parseStatus(data.retweeted_status)\n }\n\n output.summary = data.summary\n output.summary_html = data.summary_html\n output.external_url = data.external_url\n output.is_local = data.is_local\n }\n\n output.id = String(data.id)\n output.visibility = data.visibility\n output.card = data.card\n output.created_at = new Date(data.created_at)\n\n // Converting to string, the right way.\n output.in_reply_to_status_id = output.in_reply_to_status_id\n ? String(output.in_reply_to_status_id)\n : null\n output.in_reply_to_user_id = output.in_reply_to_user_id\n ? String(output.in_reply_to_user_id)\n : null\n\n output.user = parseUser(masto ? data.account : data.user)\n\n output.attentions = ((masto ? data.mentions : data.attentions) || []).map(parseUser)\n\n output.attachments = ((masto ? data.media_attachments : data.attachments) || [])\n .map(parseAttachment)\n\n const retweetedStatus = masto ? data.reblog : data.retweeted_status\n if (retweetedStatus) {\n output.retweeted_status = parseStatus(retweetedStatus)\n }\n\n output.favoritedBy = []\n output.rebloggedBy = []\n\n return output\n}\n\nexport const parseNotification = (data) => {\n const mastoDict = {\n 'favourite': 'like',\n 'reblog': 'repeat'\n }\n const masto = !data.hasOwnProperty('ntype')\n const output = {}\n\n if (masto) {\n output.type = mastoDict[data.type] || data.type\n output.seen = data.pleroma.is_seen\n output.status = isStatusNotification(output.type) ? parseStatus(data.status) : null\n output.action = output.status // TODO: Refactor, this is unneeded\n output.target = output.type !== 'move'\n ? null\n : parseUser(data.target)\n output.from_profile = parseUser(data.account)\n output.emoji = data.emoji\n } else {\n const parsedNotice = parseStatus(data.notice)\n output.type = data.ntype\n output.seen = Boolean(data.is_seen)\n output.status = output.type === 'like'\n ? parseStatus(data.notice.favorited_status)\n : parsedNotice\n output.action = parsedNotice\n output.from_profile = output.type === 'pleroma:chat_mention' ? parseUser(data.account) : parseUser(data.from_profile)\n }\n\n output.created_at = new Date(data.created_at)\n output.id = parseInt(data.id)\n\n return output\n}\n\nconst isNsfw = (status) => {\n const nsfwRegex = /#nsfw/i\n return (status.tags || []).includes('nsfw') || !!(status.text || '').match(nsfwRegex)\n}\n\nexport const parseLinkHeaderPagination = (linkHeader, opts = {}) => {\n const flakeId = opts.flakeId\n const parsedLinkHeader = parseLinkHeader(linkHeader)\n if (!parsedLinkHeader) return\n const maxId = parsedLinkHeader.next.max_id\n const minId = parsedLinkHeader.prev.min_id\n\n return {\n maxId: flakeId ? maxId : parseInt(maxId, 10),\n minId: flakeId ? minId : parseInt(minId, 10)\n }\n}\n\nexport const parseChat = (chat) => {\n const output = {}\n output.id = chat.id\n output.account = parseUser(chat.account)\n output.unread = chat.unread\n output.lastMessage = parseChatMessage(chat.last_message)\n output.updated_at = new Date(chat.updated_at)\n return output\n}\n\nexport const parseChatMessage = (message) => {\n if (!message) { return }\n if (message.isNormalized) { return message }\n const output = message\n output.id = message.id\n output.created_at = new Date(message.created_at)\n output.chat_id = message.chat_id\n if (message.content) {\n output.content = addEmojis(message.content, message.emojis)\n } else {\n output.content = ''\n }\n if (message.attachment) {\n output.attachments = [parseAttachment(message.attachment)]\n } else {\n output.attachments = []\n }\n output.isNormalized = true\n return output\n}\n","import { invertLightness, contrastRatio } from 'chromatism'\n\n// useful for visualizing color when debugging\nexport const consoleColor = (color) => console.log('%c##########', 'background: ' + color + '; color: ' + color)\n\n/**\n * Convert r, g, b values into hex notation. All components are [0-255]\n *\n * @param {Number|String|Object} r - Either red component, {r,g,b} object, or hex string\n * @param {Number} [g] - Green component\n * @param {Number} [b] - Blue component\n */\nexport const rgb2hex = (r, g, b) => {\n if (r === null || typeof r === 'undefined') {\n return undefined\n }\n // TODO: clean up this mess\n if (r[0] === '#' || r === 'transparent') {\n return r\n }\n if (typeof r === 'object') {\n ({ r, g, b } = r)\n }\n [r, g, b] = [r, g, b].map(val => {\n val = Math.ceil(val)\n val = val < 0 ? 0 : val\n val = val > 255 ? 255 : val\n return val\n })\n return `#${((1 << 24) + (r << 16) + (g << 8) + b).toString(16).slice(1)}`\n}\n\n/**\n * Converts 8-bit RGB component into linear component\n * https://www.w3.org/TR/2008/REC-WCAG20-20081211/#relativeluminancedef\n * https://www.w3.org/TR/2008/REC-WCAG20-20081211/relative-luminance.xml\n * https://en.wikipedia.org/wiki/SRGB#The_reverse_transformation\n *\n * @param {Number} bit - color component [0..255]\n * @returns {Number} linear component [0..1]\n */\nconst c2linear = (bit) => {\n // W3C gives 0.03928 while wikipedia states 0.04045\n // what those magical numbers mean - I don't know.\n // something about gamma-correction, i suppose.\n // Sticking with W3C example.\n const c = bit / 255\n if (c < 0.03928) {\n return c / 12.92\n } else {\n return Math.pow((c + 0.055) / 1.055, 2.4)\n }\n}\n\n/**\n * Converts sRGB into linear RGB\n * @param {Object} srgb - sRGB color\n * @returns {Object} linear rgb color\n */\nconst srgbToLinear = (srgb) => {\n return 'rgb'.split('').reduce((acc, c) => { acc[c] = c2linear(srgb[c]); return acc }, {})\n}\n\n/**\n * Calculates relative luminance for given color\n * https://www.w3.org/TR/2008/REC-WCAG20-20081211/#relativeluminancedef\n * https://www.w3.org/TR/2008/REC-WCAG20-20081211/relative-luminance.xml\n *\n * @param {Object} srgb - sRGB color\n * @returns {Number} relative luminance\n */\nexport const relativeLuminance = (srgb) => {\n const { r, g, b } = srgbToLinear(srgb)\n return 0.2126 * r + 0.7152 * g + 0.0722 * b\n}\n\n/**\n * Generates color ratio between two colors. Order is unimporant\n * https://www.w3.org/TR/2008/REC-WCAG20-20081211/#contrast-ratiodef\n *\n * @param {Object} a - sRGB color\n * @param {Object} b - sRGB color\n * @returns {Number} color ratio\n */\nexport const getContrastRatio = (a, b) => {\n const la = relativeLuminance(a)\n const lb = relativeLuminance(b)\n const [l1, l2] = la > lb ? [la, lb] : [lb, la]\n\n return (l1 + 0.05) / (l2 + 0.05)\n}\n\n/**\n * Same as `getContrastRatio` but for multiple layers in-between\n *\n * @param {Object} text - text color (topmost layer)\n * @param {[Object, Number]} layers[] - layers between text and bedrock\n * @param {Object} bedrock - layer at the very bottom\n */\nexport const getContrastRatioLayers = (text, layers, bedrock) => {\n return getContrastRatio(alphaBlendLayers(bedrock, layers), text)\n}\n\n/**\n * This performs alpha blending between solid background and semi-transparent foreground\n *\n * @param {Object} fg - top layer color\n * @param {Number} fga - top layer's alpha\n * @param {Object} bg - bottom layer color\n * @returns {Object} sRGB of resulting color\n */\nexport const alphaBlend = (fg, fga, bg) => {\n if (fga === 1 || typeof fga === 'undefined') return fg\n return 'rgb'.split('').reduce((acc, c) => {\n // Simplified https://en.wikipedia.org/wiki/Alpha_compositing#Alpha_blending\n // for opaque bg and transparent fg\n acc[c] = (fg[c] * fga + bg[c] * (1 - fga))\n return acc\n }, {})\n}\n\n/**\n * Same as `alphaBlend` but for multiple layers in-between\n *\n * @param {Object} bedrock - layer at the very bottom\n * @param {[Object, Number]} layers[] - layers between text and bedrock\n */\nexport const alphaBlendLayers = (bedrock, layers) => layers.reduce((acc, [color, opacity]) => {\n return alphaBlend(color, opacity, acc)\n}, bedrock)\n\nexport const invert = (rgb) => {\n return 'rgb'.split('').reduce((acc, c) => {\n acc[c] = 255 - rgb[c]\n return acc\n }, {})\n}\n\n/**\n * Converts #rrggbb hex notation into an {r, g, b} object\n *\n * @param {String} hex - #rrggbb string\n * @returns {Object} rgb representation of the color, values are 0-255\n */\nexport const hex2rgb = (hex) => {\n const result = /^#?([a-f\\d]{2})([a-f\\d]{2})([a-f\\d]{2})$/i.exec(hex)\n return result ? {\n r: parseInt(result[1], 16),\n g: parseInt(result[2], 16),\n b: parseInt(result[3], 16)\n } : null\n}\n\n/**\n * Old somewhat weird function for mixing two colors together\n *\n * @param {Object} a - one color (rgb)\n * @param {Object} b - other color (rgb)\n * @returns {Object} result\n */\nexport const mixrgb = (a, b) => {\n return 'rgb'.split('').reduce((acc, k) => {\n acc[k] = (a[k] + b[k]) / 2\n return acc\n }, {})\n}\n/**\n * Converts rgb object into a CSS rgba() color\n *\n * @param {Object} color - rgb\n * @returns {String} CSS rgba() color\n */\nexport const rgba2css = function (rgba) {\n return `rgba(${Math.floor(rgba.r)}, ${Math.floor(rgba.g)}, ${Math.floor(rgba.b)}, ${rgba.a})`\n}\n\n/**\n * Get text color for given background color and intended text color\n * This checks if text and background don't have enough color and inverts\n * text color's lightness if needed. If text color is still not enough it\n * will fall back to black or white\n *\n * @param {Object} bg - background color\n * @param {Object} text - intended text color\n * @param {Boolean} preserve - try to preserve intended text color's hue/saturation (i.e. no BW)\n */\nexport const getTextColor = function (bg, text, preserve) {\n const contrast = getContrastRatio(bg, text)\n\n if (contrast < 4.5) {\n const base = typeof text.a !== 'undefined' ? { a: text.a } : {}\n const result = Object.assign(base, invertLightness(text).rgb)\n if (!preserve && getContrastRatio(bg, result) < 4.5) {\n // B&W\n return contrastRatio(bg, text).rgb\n }\n // Inverted color\n return result\n }\n return text\n}\n\n/**\n * Converts color to CSS Color value\n *\n * @param {Object|String} input - color\n * @param {Number} [a] - alpha value\n * @returns {String} a CSS Color value\n */\nexport const getCssColor = (input, a) => {\n let rgb = {}\n if (typeof input === 'object') {\n rgb = input\n } else if (typeof input === 'string') {\n if (input.startsWith('#')) {\n rgb = hex2rgb(input)\n } else {\n return input\n }\n }\n return rgba2css({ ...rgb, a })\n}\n","import { humanizeErrors } from '../../modules/errors'\n\nexport function StatusCodeError (statusCode, body, options, response) {\n this.name = 'StatusCodeError'\n this.statusCode = statusCode\n this.message = statusCode + ' - ' + (JSON && JSON.stringify ? JSON.stringify(body) : body)\n this.error = body // legacy attribute\n this.options = options\n this.response = response\n\n if (Error.captureStackTrace) { // required for non-V8 environments\n Error.captureStackTrace(this)\n }\n}\nStatusCodeError.prototype = Object.create(Error.prototype)\nStatusCodeError.prototype.constructor = StatusCodeError\n\nexport class RegistrationError extends Error {\n constructor (error) {\n super()\n if (Error.captureStackTrace) {\n Error.captureStackTrace(this)\n }\n\n try {\n // the error is probably a JSON object with a single key, \"errors\", whose value is another JSON object containing the real errors\n if (typeof error === 'string') {\n error = JSON.parse(error)\n if (error.hasOwnProperty('error')) {\n error = JSON.parse(error.error)\n }\n }\n\n if (typeof error === 'object') {\n const errorContents = JSON.parse(error.error)\n // keys will have the property that has the error, for example 'ap_id',\n // 'email' or 'captcha', the value will be an array of its error\n // like \"ap_id\": [\"has been taken\"] or \"captcha\": [\"Invalid CAPTCHA\"]\n\n // replace ap_id with username\n if (errorContents.ap_id) {\n errorContents.username = errorContents.ap_id\n delete errorContents.ap_id\n }\n\n this.message = humanizeErrors(errorContents)\n } else {\n this.message = error\n }\n } catch (e) {\n // can't parse it, so just treat it like a string\n this.message = error\n }\n }\n}\n","import { capitalize } from 'lodash'\n\nexport function humanizeErrors (errors) {\n return Object.entries(errors).reduce((errs, [k, val]) => {\n let message = val.reduce((acc, message) => {\n let key = capitalize(k.replace(/_/g, ' '))\n return acc + [key, message].join(' ') + '. '\n }, '')\n return [...errs, message]\n }, [])\n}\n","import { each, map, concat, last, get } from 'lodash'\nimport { parseStatus, parseUser, parseNotification, parseAttachment, parseChat, parseLinkHeaderPagination } from '../entity_normalizer/entity_normalizer.service.js'\nimport { RegistrationError, StatusCodeError } from '../errors/errors'\n\n/* eslint-env browser */\nconst BLOCKS_IMPORT_URL = '/api/pleroma/blocks_import'\nconst FOLLOW_IMPORT_URL = '/api/pleroma/follow_import'\nconst DELETE_ACCOUNT_URL = '/api/pleroma/delete_account'\nconst CHANGE_EMAIL_URL = '/api/pleroma/change_email'\nconst CHANGE_PASSWORD_URL = '/api/pleroma/change_password'\nconst TAG_USER_URL = '/api/pleroma/admin/users/tag'\nconst PERMISSION_GROUP_URL = (screenName, right) => `/api/pleroma/admin/users/${screenName}/permission_group/${right}`\nconst ACTIVATE_USER_URL = '/api/pleroma/admin/users/activate'\nconst DEACTIVATE_USER_URL = '/api/pleroma/admin/users/deactivate'\nconst ADMIN_USERS_URL = '/api/pleroma/admin/users'\nconst SUGGESTIONS_URL = '/api/v1/suggestions'\nconst NOTIFICATION_SETTINGS_URL = '/api/pleroma/notification_settings'\nconst NOTIFICATION_READ_URL = '/api/v1/pleroma/notifications/read'\n\nconst MFA_SETTINGS_URL = '/api/pleroma/accounts/mfa'\nconst MFA_BACKUP_CODES_URL = '/api/pleroma/accounts/mfa/backup_codes'\n\nconst MFA_SETUP_OTP_URL = '/api/pleroma/accounts/mfa/setup/totp'\nconst MFA_CONFIRM_OTP_URL = '/api/pleroma/accounts/mfa/confirm/totp'\nconst MFA_DISABLE_OTP_URL = '/api/pleroma/accounts/mfa/totp'\n\nconst MASTODON_LOGIN_URL = '/api/v1/accounts/verify_credentials'\nconst MASTODON_REGISTRATION_URL = '/api/v1/accounts'\nconst MASTODON_USER_FAVORITES_TIMELINE_URL = '/api/v1/favourites'\nconst MASTODON_USER_NOTIFICATIONS_URL = '/api/v1/notifications'\nconst MASTODON_DISMISS_NOTIFICATION_URL = id => `/api/v1/notifications/${id}/dismiss`\nconst MASTODON_FAVORITE_URL = id => `/api/v1/statuses/${id}/favourite`\nconst MASTODON_UNFAVORITE_URL = id => `/api/v1/statuses/${id}/unfavourite`\nconst MASTODON_RETWEET_URL = id => `/api/v1/statuses/${id}/reblog`\nconst MASTODON_UNRETWEET_URL = id => `/api/v1/statuses/${id}/unreblog`\nconst MASTODON_DELETE_URL = id => `/api/v1/statuses/${id}`\nconst MASTODON_FOLLOW_URL = id => `/api/v1/accounts/${id}/follow`\nconst MASTODON_UNFOLLOW_URL = id => `/api/v1/accounts/${id}/unfollow`\nconst MASTODON_FOLLOWING_URL = id => `/api/v1/accounts/${id}/following`\nconst MASTODON_FOLLOWERS_URL = id => `/api/v1/accounts/${id}/followers`\nconst MASTODON_FOLLOW_REQUESTS_URL = '/api/v1/follow_requests'\nconst MASTODON_APPROVE_USER_URL = id => `/api/v1/follow_requests/${id}/authorize`\nconst MASTODON_DENY_USER_URL = id => `/api/v1/follow_requests/${id}/reject`\nconst MASTODON_DIRECT_MESSAGES_TIMELINE_URL = '/api/v1/timelines/direct'\nconst MASTODON_PUBLIC_TIMELINE = '/api/v1/timelines/public'\nconst MASTODON_USER_HOME_TIMELINE_URL = '/api/v1/timelines/home'\nconst MASTODON_STATUS_URL = id => `/api/v1/statuses/${id}`\nconst MASTODON_STATUS_CONTEXT_URL = id => `/api/v1/statuses/${id}/context`\nconst MASTODON_USER_URL = '/api/v1/accounts'\nconst MASTODON_USER_RELATIONSHIPS_URL = '/api/v1/accounts/relationships'\nconst MASTODON_USER_TIMELINE_URL = id => `/api/v1/accounts/${id}/statuses`\nconst MASTODON_TAG_TIMELINE_URL = tag => `/api/v1/timelines/tag/${tag}`\nconst MASTODON_BOOKMARK_TIMELINE_URL = '/api/v1/bookmarks'\nconst MASTODON_USER_BLOCKS_URL = '/api/v1/blocks/'\nconst MASTODON_USER_MUTES_URL = '/api/v1/mutes/'\nconst MASTODON_BLOCK_USER_URL = id => `/api/v1/accounts/${id}/block`\nconst MASTODON_UNBLOCK_USER_URL = id => `/api/v1/accounts/${id}/unblock`\nconst MASTODON_MUTE_USER_URL = id => `/api/v1/accounts/${id}/mute`\nconst MASTODON_UNMUTE_USER_URL = id => `/api/v1/accounts/${id}/unmute`\nconst MASTODON_SUBSCRIBE_USER = id => `/api/v1/pleroma/accounts/${id}/subscribe`\nconst MASTODON_UNSUBSCRIBE_USER = id => `/api/v1/pleroma/accounts/${id}/unsubscribe`\nconst MASTODON_BOOKMARK_STATUS_URL = id => `/api/v1/statuses/${id}/bookmark`\nconst MASTODON_UNBOOKMARK_STATUS_URL = id => `/api/v1/statuses/${id}/unbookmark`\nconst MASTODON_POST_STATUS_URL = '/api/v1/statuses'\nconst MASTODON_MEDIA_UPLOAD_URL = '/api/v1/media'\nconst MASTODON_VOTE_URL = id => `/api/v1/polls/${id}/votes`\nconst MASTODON_POLL_URL = id => `/api/v1/polls/${id}`\nconst MASTODON_STATUS_FAVORITEDBY_URL = id => `/api/v1/statuses/${id}/favourited_by`\nconst MASTODON_STATUS_REBLOGGEDBY_URL = id => `/api/v1/statuses/${id}/reblogged_by`\nconst MASTODON_PROFILE_UPDATE_URL = '/api/v1/accounts/update_credentials'\nconst MASTODON_REPORT_USER_URL = '/api/v1/reports'\nconst MASTODON_PIN_OWN_STATUS = id => `/api/v1/statuses/${id}/pin`\nconst MASTODON_UNPIN_OWN_STATUS = id => `/api/v1/statuses/${id}/unpin`\nconst MASTODON_MUTE_CONVERSATION = id => `/api/v1/statuses/${id}/mute`\nconst MASTODON_UNMUTE_CONVERSATION = id => `/api/v1/statuses/${id}/unmute`\nconst MASTODON_SEARCH_2 = `/api/v2/search`\nconst MASTODON_USER_SEARCH_URL = '/api/v1/accounts/search'\nconst MASTODON_DOMAIN_BLOCKS_URL = '/api/v1/domain_blocks'\nconst MASTODON_STREAMING = '/api/v1/streaming'\nconst MASTODON_KNOWN_DOMAIN_LIST_URL = '/api/v1/instance/peers'\nconst PLEROMA_EMOJI_REACTIONS_URL = id => `/api/v1/pleroma/statuses/${id}/reactions`\nconst PLEROMA_EMOJI_REACT_URL = (id, emoji) => `/api/v1/pleroma/statuses/${id}/reactions/${emoji}`\nconst PLEROMA_EMOJI_UNREACT_URL = (id, emoji) => `/api/v1/pleroma/statuses/${id}/reactions/${emoji}`\nconst PLEROMA_CHATS_URL = `/api/v1/pleroma/chats`\nconst PLEROMA_CHAT_URL = id => `/api/v1/pleroma/chats/by-account-id/${id}`\nconst PLEROMA_CHAT_MESSAGES_URL = id => `/api/v1/pleroma/chats/${id}/messages`\nconst PLEROMA_CHAT_READ_URL = id => `/api/v1/pleroma/chats/${id}/read`\nconst PLEROMA_DELETE_CHAT_MESSAGE_URL = (chatId, messageId) => `/api/v1/pleroma/chats/${chatId}/messages/${messageId}`\n\nconst oldfetch = window.fetch\n\nlet fetch = (url, options) => {\n options = options || {}\n const baseUrl = ''\n const fullUrl = baseUrl + url\n options.credentials = 'same-origin'\n return oldfetch(fullUrl, options)\n}\n\nconst promisedRequest = ({ method, url, params, payload, credentials, headers = {} }) => {\n const options = {\n method,\n headers: {\n 'Accept': 'application/json',\n 'Content-Type': 'application/json',\n ...headers\n }\n }\n if (params) {\n url += '?' + Object.entries(params)\n .map(([key, value]) => encodeURIComponent(key) + '=' + encodeURIComponent(value))\n .join('&')\n }\n if (payload) {\n options.body = JSON.stringify(payload)\n }\n if (credentials) {\n options.headers = {\n ...options.headers,\n ...authHeaders(credentials)\n }\n }\n return fetch(url, options)\n .then((response) => {\n return new Promise((resolve, reject) => response.json()\n .then((json) => {\n if (!response.ok) {\n return reject(new StatusCodeError(response.status, json, { url, options }, response))\n }\n return resolve(json)\n }))\n })\n}\n\nconst updateNotificationSettings = ({ credentials, settings }) => {\n const form = new FormData()\n\n each(settings, (value, key) => {\n form.append(key, value)\n })\n\n return fetch(NOTIFICATION_SETTINGS_URL, {\n headers: authHeaders(credentials),\n method: 'PUT',\n body: form\n }).then((data) => data.json())\n}\n\nconst updateProfileImages = ({ credentials, avatar = null, banner = null, background = null }) => {\n const form = new FormData()\n if (avatar !== null) form.append('avatar', avatar)\n if (banner !== null) form.append('header', banner)\n if (background !== null) form.append('pleroma_background_image', background)\n return fetch(MASTODON_PROFILE_UPDATE_URL, {\n headers: authHeaders(credentials),\n method: 'PATCH',\n body: form\n })\n .then((data) => data.json())\n .then((data) => parseUser(data))\n}\n\nconst updateProfile = ({ credentials, params }) => {\n return promisedRequest({\n url: MASTODON_PROFILE_UPDATE_URL,\n method: 'PATCH',\n payload: params,\n credentials\n }).then((data) => parseUser(data))\n}\n\n// Params needed:\n// nickname\n// email\n// fullname\n// password\n// password_confirm\n//\n// Optional\n// bio\n// homepage\n// location\n// token\nconst register = ({ params, credentials }) => {\n const { nickname, ...rest } = params\n return fetch(MASTODON_REGISTRATION_URL, {\n method: 'POST',\n headers: {\n ...authHeaders(credentials),\n 'Content-Type': 'application/json'\n },\n body: JSON.stringify({\n nickname,\n locale: 'en_US',\n agreement: true,\n ...rest\n })\n })\n .then((response) => {\n if (response.ok) {\n return response.json()\n } else {\n return response.json().then((error) => { throw new RegistrationError(error) })\n }\n })\n}\n\nconst getCaptcha = () => fetch('/api/pleroma/captcha').then(resp => resp.json())\n\nconst authHeaders = (accessToken) => {\n if (accessToken) {\n return { 'Authorization': `Bearer ${accessToken}` }\n } else {\n return { }\n }\n}\n\nconst followUser = ({ id, credentials, ...options }) => {\n let url = MASTODON_FOLLOW_URL(id)\n const form = {}\n if (options.reblogs !== undefined) { form['reblogs'] = options.reblogs }\n return fetch(url, {\n body: JSON.stringify(form),\n headers: {\n ...authHeaders(credentials),\n 'Content-Type': 'application/json'\n },\n method: 'POST'\n }).then((data) => data.json())\n}\n\nconst unfollowUser = ({ id, credentials }) => {\n let url = MASTODON_UNFOLLOW_URL(id)\n return fetch(url, {\n headers: authHeaders(credentials),\n method: 'POST'\n }).then((data) => data.json())\n}\n\nconst pinOwnStatus = ({ id, credentials }) => {\n return promisedRequest({ url: MASTODON_PIN_OWN_STATUS(id), credentials, method: 'POST' })\n .then((data) => parseStatus(data))\n}\n\nconst unpinOwnStatus = ({ id, credentials }) => {\n return promisedRequest({ url: MASTODON_UNPIN_OWN_STATUS(id), credentials, method: 'POST' })\n .then((data) => parseStatus(data))\n}\n\nconst muteConversation = ({ id, credentials }) => {\n return promisedRequest({ url: MASTODON_MUTE_CONVERSATION(id), credentials, method: 'POST' })\n .then((data) => parseStatus(data))\n}\n\nconst unmuteConversation = ({ id, credentials }) => {\n return promisedRequest({ url: MASTODON_UNMUTE_CONVERSATION(id), credentials, method: 'POST' })\n .then((data) => parseStatus(data))\n}\n\nconst blockUser = ({ id, credentials }) => {\n return fetch(MASTODON_BLOCK_USER_URL(id), {\n headers: authHeaders(credentials),\n method: 'POST'\n }).then((data) => data.json())\n}\n\nconst unblockUser = ({ id, credentials }) => {\n return fetch(MASTODON_UNBLOCK_USER_URL(id), {\n headers: authHeaders(credentials),\n method: 'POST'\n }).then((data) => data.json())\n}\n\nconst approveUser = ({ id, credentials }) => {\n let url = MASTODON_APPROVE_USER_URL(id)\n return fetch(url, {\n headers: authHeaders(credentials),\n method: 'POST'\n }).then((data) => data.json())\n}\n\nconst denyUser = ({ id, credentials }) => {\n let url = MASTODON_DENY_USER_URL(id)\n return fetch(url, {\n headers: authHeaders(credentials),\n method: 'POST'\n }).then((data) => data.json())\n}\n\nconst fetchUser = ({ id, credentials }) => {\n let url = `${MASTODON_USER_URL}/${id}`\n return promisedRequest({ url, credentials })\n .then((data) => parseUser(data))\n}\n\nconst fetchUserRelationship = ({ id, credentials }) => {\n let url = `${MASTODON_USER_RELATIONSHIPS_URL}/?id=${id}`\n return fetch(url, { headers: authHeaders(credentials) })\n .then((response) => {\n return new Promise((resolve, reject) => response.json()\n .then((json) => {\n if (!response.ok) {\n return reject(new StatusCodeError(response.status, json, { url }, response))\n }\n return resolve(json)\n }))\n })\n}\n\nconst fetchFriends = ({ id, maxId, sinceId, limit = 20, credentials }) => {\n let url = MASTODON_FOLLOWING_URL(id)\n const args = [\n maxId && `max_id=${maxId}`,\n sinceId && `since_id=${sinceId}`,\n limit && `limit=${limit}`,\n `with_relationships=true`\n ].filter(_ => _).join('&')\n\n url = url + (args ? '?' + args : '')\n return fetch(url, { headers: authHeaders(credentials) })\n .then((data) => data.json())\n .then((data) => data.map(parseUser))\n}\n\nconst exportFriends = ({ id, credentials }) => {\n return new Promise(async (resolve, reject) => {\n try {\n let friends = []\n let more = true\n while (more) {\n const maxId = friends.length > 0 ? last(friends).id : undefined\n const users = await fetchFriends({ id, maxId, credentials })\n friends = concat(friends, users)\n if (users.length === 0) {\n more = false\n }\n }\n resolve(friends)\n } catch (err) {\n reject(err)\n }\n })\n}\n\nconst fetchFollowers = ({ id, maxId, sinceId, limit = 20, credentials }) => {\n let url = MASTODON_FOLLOWERS_URL(id)\n const args = [\n maxId && `max_id=${maxId}`,\n sinceId && `since_id=${sinceId}`,\n limit && `limit=${limit}`,\n `with_relationships=true`\n ].filter(_ => _).join('&')\n\n url += args ? '?' + args : ''\n return fetch(url, { headers: authHeaders(credentials) })\n .then((data) => data.json())\n .then((data) => data.map(parseUser))\n}\n\nconst fetchFollowRequests = ({ credentials }) => {\n const url = MASTODON_FOLLOW_REQUESTS_URL\n return fetch(url, { headers: authHeaders(credentials) })\n .then((data) => data.json())\n .then((data) => data.map(parseUser))\n}\n\nconst fetchConversation = ({ id, credentials }) => {\n let urlContext = MASTODON_STATUS_CONTEXT_URL(id)\n return fetch(urlContext, { headers: authHeaders(credentials) })\n .then((data) => {\n if (data.ok) {\n return data\n }\n throw new Error('Error fetching timeline', data)\n })\n .then((data) => data.json())\n .then(({ ancestors, descendants }) => ({\n ancestors: ancestors.map(parseStatus),\n descendants: descendants.map(parseStatus)\n }))\n}\n\nconst fetchStatus = ({ id, credentials }) => {\n let url = MASTODON_STATUS_URL(id)\n return fetch(url, { headers: authHeaders(credentials) })\n .then((data) => {\n if (data.ok) {\n return data\n }\n throw new Error('Error fetching timeline', data)\n })\n .then((data) => data.json())\n .then((data) => parseStatus(data))\n}\n\nconst tagUser = ({ tag, credentials, user }) => {\n const screenName = user.screen_name\n const form = {\n nicknames: [screenName],\n tags: [tag]\n }\n\n const headers = authHeaders(credentials)\n headers['Content-Type'] = 'application/json'\n\n return fetch(TAG_USER_URL, {\n method: 'PUT',\n headers: headers,\n body: JSON.stringify(form)\n })\n}\n\nconst untagUser = ({ tag, credentials, user }) => {\n const screenName = user.screen_name\n const body = {\n nicknames: [screenName],\n tags: [tag]\n }\n\n const headers = authHeaders(credentials)\n headers['Content-Type'] = 'application/json'\n\n return fetch(TAG_USER_URL, {\n method: 'DELETE',\n headers: headers,\n body: JSON.stringify(body)\n })\n}\n\nconst addRight = ({ right, credentials, user }) => {\n const screenName = user.screen_name\n\n return fetch(PERMISSION_GROUP_URL(screenName, right), {\n method: 'POST',\n headers: authHeaders(credentials),\n body: {}\n })\n}\n\nconst deleteRight = ({ right, credentials, user }) => {\n const screenName = user.screen_name\n\n return fetch(PERMISSION_GROUP_URL(screenName, right), {\n method: 'DELETE',\n headers: authHeaders(credentials),\n body: {}\n })\n}\n\nconst activateUser = ({ credentials, user: { screen_name: nickname } }) => {\n return promisedRequest({\n url: ACTIVATE_USER_URL,\n method: 'PATCH',\n credentials,\n payload: {\n nicknames: [nickname]\n }\n }).then(response => get(response, 'users.0'))\n}\n\nconst deactivateUser = ({ credentials, user: { screen_name: nickname } }) => {\n return promisedRequest({\n url: DEACTIVATE_USER_URL,\n method: 'PATCH',\n credentials,\n payload: {\n nicknames: [nickname]\n }\n }).then(response => get(response, 'users.0'))\n}\n\nconst deleteUser = ({ credentials, user }) => {\n const screenName = user.screen_name\n const headers = authHeaders(credentials)\n\n return fetch(`${ADMIN_USERS_URL}?nickname=${screenName}`, {\n method: 'DELETE',\n headers: headers\n })\n}\n\nconst fetchTimeline = ({\n timeline,\n credentials,\n since = false,\n until = false,\n userId = false,\n tag = false,\n withMuted = false,\n replyVisibility = 'all'\n}) => {\n const timelineUrls = {\n public: MASTODON_PUBLIC_TIMELINE,\n friends: MASTODON_USER_HOME_TIMELINE_URL,\n dms: MASTODON_DIRECT_MESSAGES_TIMELINE_URL,\n notifications: MASTODON_USER_NOTIFICATIONS_URL,\n 'publicAndExternal': MASTODON_PUBLIC_TIMELINE,\n user: MASTODON_USER_TIMELINE_URL,\n media: MASTODON_USER_TIMELINE_URL,\n favorites: MASTODON_USER_FAVORITES_TIMELINE_URL,\n tag: MASTODON_TAG_TIMELINE_URL,\n bookmarks: MASTODON_BOOKMARK_TIMELINE_URL\n }\n const isNotifications = timeline === 'notifications'\n const params = []\n\n let url = timelineUrls[timeline]\n\n if (timeline === 'user' || timeline === 'media') {\n url = url(userId)\n }\n\n if (since) {\n params.push(['since_id', since])\n }\n if (until) {\n params.push(['max_id', until])\n }\n if (tag) {\n url = url(tag)\n }\n if (timeline === 'media') {\n params.push(['only_media', 1])\n }\n if (timeline === 'public') {\n params.push(['local', true])\n }\n if (timeline === 'public' || timeline === 'publicAndExternal') {\n params.push(['only_media', false])\n }\n if (timeline !== 'favorites' && timeline !== 'bookmarks') {\n params.push(['with_muted', withMuted])\n }\n if (replyVisibility !== 'all') {\n params.push(['reply_visibility', replyVisibility])\n }\n\n params.push(['limit', 20])\n\n const queryString = map(params, (param) => `${param[0]}=${param[1]}`).join('&')\n url += `?${queryString}`\n let status = ''\n let statusText = ''\n let pagination = {}\n return fetch(url, { headers: authHeaders(credentials) })\n .then((data) => {\n status = data.status\n statusText = data.statusText\n pagination = parseLinkHeaderPagination(data.headers.get('Link'), {\n flakeId: timeline !== 'bookmarks' && timeline !== 'notifications'\n })\n return data\n })\n .then((data) => data.json())\n .then((data) => {\n if (!data.error) {\n return { data: data.map(isNotifications ? parseNotification : parseStatus), pagination }\n } else {\n data.status = status\n data.statusText = statusText\n return data\n }\n })\n}\n\nconst fetchPinnedStatuses = ({ id, credentials }) => {\n const url = MASTODON_USER_TIMELINE_URL(id) + '?pinned=true'\n return promisedRequest({ url, credentials })\n .then((data) => data.map(parseStatus))\n}\n\nconst verifyCredentials = (user) => {\n return fetch(MASTODON_LOGIN_URL, {\n headers: authHeaders(user)\n })\n .then((response) => {\n if (response.ok) {\n return response.json()\n } else {\n return {\n error: response\n }\n }\n })\n .then((data) => data.error ? data : parseUser(data))\n}\n\nconst favorite = ({ id, credentials }) => {\n return promisedRequest({ url: MASTODON_FAVORITE_URL(id), method: 'POST', credentials })\n .then((data) => parseStatus(data))\n}\n\nconst unfavorite = ({ id, credentials }) => {\n return promisedRequest({ url: MASTODON_UNFAVORITE_URL(id), method: 'POST', credentials })\n .then((data) => parseStatus(data))\n}\n\nconst retweet = ({ id, credentials }) => {\n return promisedRequest({ url: MASTODON_RETWEET_URL(id), method: 'POST', credentials })\n .then((data) => parseStatus(data))\n}\n\nconst unretweet = ({ id, credentials }) => {\n return promisedRequest({ url: MASTODON_UNRETWEET_URL(id), method: 'POST', credentials })\n .then((data) => parseStatus(data))\n}\n\nconst bookmarkStatus = ({ id, credentials }) => {\n return promisedRequest({\n url: MASTODON_BOOKMARK_STATUS_URL(id),\n headers: authHeaders(credentials),\n method: 'POST'\n })\n}\n\nconst unbookmarkStatus = ({ id, credentials }) => {\n return promisedRequest({\n url: MASTODON_UNBOOKMARK_STATUS_URL(id),\n headers: authHeaders(credentials),\n method: 'POST'\n })\n}\n\nconst postStatus = ({\n credentials,\n status,\n spoilerText,\n visibility,\n sensitive,\n poll,\n mediaIds = [],\n inReplyToStatusId,\n contentType,\n preview,\n idempotencyKey\n}) => {\n const form = new FormData()\n const pollOptions = poll.options || []\n\n form.append('status', status)\n form.append('source', 'Pleroma FE')\n if (spoilerText) form.append('spoiler_text', spoilerText)\n if (visibility) form.append('visibility', visibility)\n if (sensitive) form.append('sensitive', sensitive)\n if (contentType) form.append('content_type', contentType)\n mediaIds.forEach(val => {\n form.append('media_ids[]', val)\n })\n if (pollOptions.some(option => option !== '')) {\n const normalizedPoll = {\n expires_in: poll.expiresIn,\n multiple: poll.multiple\n }\n Object.keys(normalizedPoll).forEach(key => {\n form.append(`poll[${key}]`, normalizedPoll[key])\n })\n\n pollOptions.forEach(option => {\n form.append('poll[options][]', option)\n })\n }\n if (inReplyToStatusId) {\n form.append('in_reply_to_id', inReplyToStatusId)\n }\n if (preview) {\n form.append('preview', 'true')\n }\n\n let postHeaders = authHeaders(credentials)\n if (idempotencyKey) {\n postHeaders['idempotency-key'] = idempotencyKey\n }\n\n return fetch(MASTODON_POST_STATUS_URL, {\n body: form,\n method: 'POST',\n headers: postHeaders\n })\n .then((response) => {\n return response.json()\n })\n .then((data) => data.error ? data : parseStatus(data))\n}\n\nconst deleteStatus = ({ id, credentials }) => {\n return fetch(MASTODON_DELETE_URL(id), {\n headers: authHeaders(credentials),\n method: 'DELETE'\n })\n}\n\nconst uploadMedia = ({ formData, credentials }) => {\n return fetch(MASTODON_MEDIA_UPLOAD_URL, {\n body: formData,\n method: 'POST',\n headers: authHeaders(credentials)\n })\n .then((data) => data.json())\n .then((data) => parseAttachment(data))\n}\n\nconst setMediaDescription = ({ id, description, credentials }) => {\n return promisedRequest({\n url: `${MASTODON_MEDIA_UPLOAD_URL}/${id}`,\n method: 'PUT',\n headers: authHeaders(credentials),\n payload: {\n description\n }\n }).then((data) => parseAttachment(data))\n}\n\nconst importBlocks = ({ file, credentials }) => {\n const formData = new FormData()\n formData.append('list', file)\n return fetch(BLOCKS_IMPORT_URL, {\n body: formData,\n method: 'POST',\n headers: authHeaders(credentials)\n })\n .then((response) => response.ok)\n}\n\nconst importFollows = ({ file, credentials }) => {\n const formData = new FormData()\n formData.append('list', file)\n return fetch(FOLLOW_IMPORT_URL, {\n body: formData,\n method: 'POST',\n headers: authHeaders(credentials)\n })\n .then((response) => response.ok)\n}\n\nconst deleteAccount = ({ credentials, password }) => {\n const form = new FormData()\n\n form.append('password', password)\n\n return fetch(DELETE_ACCOUNT_URL, {\n body: form,\n method: 'POST',\n headers: authHeaders(credentials)\n })\n .then((response) => response.json())\n}\n\nconst changeEmail = ({ credentials, email, password }) => {\n const form = new FormData()\n\n form.append('email', email)\n form.append('password', password)\n\n return fetch(CHANGE_EMAIL_URL, {\n body: form,\n method: 'POST',\n headers: authHeaders(credentials)\n })\n .then((response) => response.json())\n}\n\nconst changePassword = ({ credentials, password, newPassword, newPasswordConfirmation }) => {\n const form = new FormData()\n\n form.append('password', password)\n form.append('new_password', newPassword)\n form.append('new_password_confirmation', newPasswordConfirmation)\n\n return fetch(CHANGE_PASSWORD_URL, {\n body: form,\n method: 'POST',\n headers: authHeaders(credentials)\n })\n .then((response) => response.json())\n}\n\nconst settingsMFA = ({ credentials }) => {\n return fetch(MFA_SETTINGS_URL, {\n headers: authHeaders(credentials),\n method: 'GET'\n }).then((data) => data.json())\n}\n\nconst mfaDisableOTP = ({ credentials, password }) => {\n const form = new FormData()\n\n form.append('password', password)\n\n return fetch(MFA_DISABLE_OTP_URL, {\n body: form,\n method: 'DELETE',\n headers: authHeaders(credentials)\n })\n .then((response) => response.json())\n}\n\nconst mfaConfirmOTP = ({ credentials, password, token }) => {\n const form = new FormData()\n\n form.append('password', password)\n form.append('code', token)\n\n return fetch(MFA_CONFIRM_OTP_URL, {\n body: form,\n headers: authHeaders(credentials),\n method: 'POST'\n }).then((data) => data.json())\n}\nconst mfaSetupOTP = ({ credentials }) => {\n return fetch(MFA_SETUP_OTP_URL, {\n headers: authHeaders(credentials),\n method: 'GET'\n }).then((data) => data.json())\n}\nconst generateMfaBackupCodes = ({ credentials }) => {\n return fetch(MFA_BACKUP_CODES_URL, {\n headers: authHeaders(credentials),\n method: 'GET'\n }).then((data) => data.json())\n}\n\nconst fetchMutes = ({ credentials }) => {\n return promisedRequest({ url: MASTODON_USER_MUTES_URL, credentials })\n .then((users) => users.map(parseUser))\n}\n\nconst muteUser = ({ id, credentials }) => {\n return promisedRequest({ url: MASTODON_MUTE_USER_URL(id), credentials, method: 'POST' })\n}\n\nconst unmuteUser = ({ id, credentials }) => {\n return promisedRequest({ url: MASTODON_UNMUTE_USER_URL(id), credentials, method: 'POST' })\n}\n\nconst subscribeUser = ({ id, credentials }) => {\n return promisedRequest({ url: MASTODON_SUBSCRIBE_USER(id), credentials, method: 'POST' })\n}\n\nconst unsubscribeUser = ({ id, credentials }) => {\n return promisedRequest({ url: MASTODON_UNSUBSCRIBE_USER(id), credentials, method: 'POST' })\n}\n\nconst fetchBlocks = ({ credentials }) => {\n return promisedRequest({ url: MASTODON_USER_BLOCKS_URL, credentials })\n .then((users) => users.map(parseUser))\n}\n\nconst fetchOAuthTokens = ({ credentials }) => {\n const url = '/api/oauth_tokens.json'\n\n return fetch(url, {\n headers: authHeaders(credentials)\n }).then((data) => {\n if (data.ok) {\n return data.json()\n }\n throw new Error('Error fetching auth tokens', data)\n })\n}\n\nconst revokeOAuthToken = ({ id, credentials }) => {\n const url = `/api/oauth_tokens/${id}`\n\n return fetch(url, {\n headers: authHeaders(credentials),\n method: 'DELETE'\n })\n}\n\nconst suggestions = ({ credentials }) => {\n return fetch(SUGGESTIONS_URL, {\n headers: authHeaders(credentials)\n }).then((data) => data.json())\n}\n\nconst markNotificationsAsSeen = ({ id, credentials, single = false }) => {\n const body = new FormData()\n\n if (single) {\n body.append('id', id)\n } else {\n body.append('max_id', id)\n }\n\n return fetch(NOTIFICATION_READ_URL, {\n body,\n headers: authHeaders(credentials),\n method: 'POST'\n }).then((data) => data.json())\n}\n\nconst vote = ({ pollId, choices, credentials }) => {\n const form = new FormData()\n form.append('choices', choices)\n\n return promisedRequest({\n url: MASTODON_VOTE_URL(encodeURIComponent(pollId)),\n method: 'POST',\n credentials,\n payload: {\n choices: choices\n }\n })\n}\n\nconst fetchPoll = ({ pollId, credentials }) => {\n return promisedRequest(\n {\n url: MASTODON_POLL_URL(encodeURIComponent(pollId)),\n method: 'GET',\n credentials\n }\n )\n}\n\nconst fetchFavoritedByUsers = ({ id, credentials }) => {\n return promisedRequest({\n url: MASTODON_STATUS_FAVORITEDBY_URL(id),\n method: 'GET',\n credentials\n }).then((users) => users.map(parseUser))\n}\n\nconst fetchRebloggedByUsers = ({ id, credentials }) => {\n return promisedRequest({\n url: MASTODON_STATUS_REBLOGGEDBY_URL(id),\n method: 'GET',\n credentials\n }).then((users) => users.map(parseUser))\n}\n\nconst fetchEmojiReactions = ({ id, credentials }) => {\n return promisedRequest({ url: PLEROMA_EMOJI_REACTIONS_URL(id), credentials })\n .then((reactions) => reactions.map(r => {\n r.accounts = r.accounts.map(parseUser)\n return r\n }))\n}\n\nconst reactWithEmoji = ({ id, emoji, credentials }) => {\n return promisedRequest({\n url: PLEROMA_EMOJI_REACT_URL(id, emoji),\n method: 'PUT',\n credentials\n }).then(parseStatus)\n}\n\nconst unreactWithEmoji = ({ id, emoji, credentials }) => {\n return promisedRequest({\n url: PLEROMA_EMOJI_UNREACT_URL(id, emoji),\n method: 'DELETE',\n credentials\n }).then(parseStatus)\n}\n\nconst reportUser = ({ credentials, userId, statusIds, comment, forward }) => {\n return promisedRequest({\n url: MASTODON_REPORT_USER_URL,\n method: 'POST',\n payload: {\n 'account_id': userId,\n 'status_ids': statusIds,\n comment,\n forward\n },\n credentials\n })\n}\n\nconst searchUsers = ({ credentials, query }) => {\n return promisedRequest({\n url: MASTODON_USER_SEARCH_URL,\n params: {\n q: query,\n resolve: true\n },\n credentials\n })\n .then((data) => data.map(parseUser))\n}\n\nconst search2 = ({ credentials, q, resolve, limit, offset, following }) => {\n let url = MASTODON_SEARCH_2\n let params = []\n\n if (q) {\n params.push(['q', encodeURIComponent(q)])\n }\n\n if (resolve) {\n params.push(['resolve', resolve])\n }\n\n if (limit) {\n params.push(['limit', limit])\n }\n\n if (offset) {\n params.push(['offset', offset])\n }\n\n if (following) {\n params.push(['following', true])\n }\n\n params.push(['with_relationships', true])\n\n let queryString = map(params, (param) => `${param[0]}=${param[1]}`).join('&')\n url += `?${queryString}`\n\n return fetch(url, { headers: authHeaders(credentials) })\n .then((data) => {\n if (data.ok) {\n return data\n }\n throw new Error('Error fetching search result', data)\n })\n .then((data) => { return data.json() })\n .then((data) => {\n data.accounts = data.accounts.slice(0, limit).map(u => parseUser(u))\n data.statuses = data.statuses.slice(0, limit).map(s => parseStatus(s))\n return data\n })\n}\n\nconst fetchKnownDomains = ({ credentials }) => {\n return promisedRequest({ url: MASTODON_KNOWN_DOMAIN_LIST_URL, credentials })\n}\n\nconst fetchDomainMutes = ({ credentials }) => {\n return promisedRequest({ url: MASTODON_DOMAIN_BLOCKS_URL, credentials })\n}\n\nconst muteDomain = ({ domain, credentials }) => {\n return promisedRequest({\n url: MASTODON_DOMAIN_BLOCKS_URL,\n method: 'POST',\n payload: { domain },\n credentials\n })\n}\n\nconst unmuteDomain = ({ domain, credentials }) => {\n return promisedRequest({\n url: MASTODON_DOMAIN_BLOCKS_URL,\n method: 'DELETE',\n payload: { domain },\n credentials\n })\n}\n\nconst dismissNotification = ({ credentials, id }) => {\n return promisedRequest({\n url: MASTODON_DISMISS_NOTIFICATION_URL(id),\n method: 'POST',\n payload: { id },\n credentials\n })\n}\n\nexport const getMastodonSocketURI = ({ credentials, stream, args = {} }) => {\n return Object.entries({\n ...(credentials\n ? { access_token: credentials }\n : {}\n ),\n stream,\n ...args\n }).reduce((acc, [key, val]) => {\n return acc + `${key}=${val}&`\n }, MASTODON_STREAMING + '?')\n}\n\nconst MASTODON_STREAMING_EVENTS = new Set([\n 'update',\n 'notification',\n 'delete',\n 'filters_changed'\n])\n\nconst PLEROMA_STREAMING_EVENTS = new Set([\n 'pleroma:chat_update'\n])\n\n// A thin wrapper around WebSocket API that allows adding a pre-processor to it\n// Uses EventTarget and a CustomEvent to proxy events\nexport const ProcessedWS = ({\n url,\n preprocessor = handleMastoWS,\n id = 'Unknown'\n}) => {\n const eventTarget = new EventTarget()\n const socket = new WebSocket(url)\n if (!socket) throw new Error(`Failed to create socket ${id}`)\n const proxy = (original, eventName, processor = a => a) => {\n original.addEventListener(eventName, (eventData) => {\n eventTarget.dispatchEvent(new CustomEvent(\n eventName,\n { detail: processor(eventData) }\n ))\n })\n }\n socket.addEventListener('open', (wsEvent) => {\n console.debug(`[WS][${id}] Socket connected`, wsEvent)\n })\n socket.addEventListener('error', (wsEvent) => {\n console.debug(`[WS][${id}] Socket errored`, wsEvent)\n })\n socket.addEventListener('close', (wsEvent) => {\n console.debug(\n `[WS][${id}] Socket disconnected with code ${wsEvent.code}`,\n wsEvent\n )\n })\n // Commented code reason: very spammy, uncomment to enable message debug logging\n /*\n socket.addEventListener('message', (wsEvent) => {\n console.debug(\n `[WS][${id}] Message received`,\n wsEvent\n )\n })\n /**/\n\n proxy(socket, 'open')\n proxy(socket, 'close')\n proxy(socket, 'message', preprocessor)\n proxy(socket, 'error')\n\n // 1000 = Normal Closure\n eventTarget.close = () => { socket.close(1000, 'Shutting down socket') }\n\n return eventTarget\n}\n\nexport const handleMastoWS = (wsEvent) => {\n const { data } = wsEvent\n if (!data) return\n const parsedEvent = JSON.parse(data)\n const { event, payload } = parsedEvent\n if (MASTODON_STREAMING_EVENTS.has(event) || PLEROMA_STREAMING_EVENTS.has(event)) {\n // MastoBE and PleromaBE both send payload for delete as a PLAIN string\n if (event === 'delete') {\n return { event, id: payload }\n }\n const data = payload ? JSON.parse(payload) : null\n if (event === 'update') {\n return { event, status: parseStatus(data) }\n } else if (event === 'notification') {\n return { event, notification: parseNotification(data) }\n } else if (event === 'pleroma:chat_update') {\n return { event, chatUpdate: parseChat(data) }\n }\n } else {\n console.warn('Unknown event', wsEvent)\n return null\n }\n}\n\nexport const WSConnectionStatus = Object.freeze({\n 'JOINED': 1,\n 'CLOSED': 2,\n 'ERROR': 3\n})\n\nconst chats = ({ credentials }) => {\n return fetch(PLEROMA_CHATS_URL, { headers: authHeaders(credentials) })\n .then((data) => data.json())\n .then((data) => {\n return { chats: data.map(parseChat).filter(c => c) }\n })\n}\n\nconst getOrCreateChat = ({ accountId, credentials }) => {\n return promisedRequest({\n url: PLEROMA_CHAT_URL(accountId),\n method: 'POST',\n credentials\n })\n}\n\nconst chatMessages = ({ id, credentials, maxId, sinceId, limit = 20 }) => {\n let url = PLEROMA_CHAT_MESSAGES_URL(id)\n const args = [\n maxId && `max_id=${maxId}`,\n sinceId && `since_id=${sinceId}`,\n limit && `limit=${limit}`\n ].filter(_ => _).join('&')\n\n url = url + (args ? '?' + args : '')\n\n return promisedRequest({\n url,\n method: 'GET',\n credentials\n })\n}\n\nconst sendChatMessage = ({ id, content, mediaId = null, credentials }) => {\n const payload = {\n 'content': content\n }\n\n if (mediaId) {\n payload['media_id'] = mediaId\n }\n\n return promisedRequest({\n url: PLEROMA_CHAT_MESSAGES_URL(id),\n method: 'POST',\n payload: payload,\n credentials\n })\n}\n\nconst readChat = ({ id, lastReadId, credentials }) => {\n return promisedRequest({\n url: PLEROMA_CHAT_READ_URL(id),\n method: 'POST',\n payload: {\n 'last_read_id': lastReadId\n },\n credentials\n })\n}\n\nconst deleteChatMessage = ({ chatId, messageId, credentials }) => {\n return promisedRequest({\n url: PLEROMA_DELETE_CHAT_MESSAGE_URL(chatId, messageId),\n method: 'DELETE',\n credentials\n })\n}\n\nconst apiService = {\n verifyCredentials,\n fetchTimeline,\n fetchPinnedStatuses,\n fetchConversation,\n fetchStatus,\n fetchFriends,\n exportFriends,\n fetchFollowers,\n followUser,\n unfollowUser,\n pinOwnStatus,\n unpinOwnStatus,\n muteConversation,\n unmuteConversation,\n blockUser,\n unblockUser,\n fetchUser,\n fetchUserRelationship,\n favorite,\n unfavorite,\n retweet,\n unretweet,\n bookmarkStatus,\n unbookmarkStatus,\n postStatus,\n deleteStatus,\n uploadMedia,\n setMediaDescription,\n fetchMutes,\n muteUser,\n unmuteUser,\n subscribeUser,\n unsubscribeUser,\n fetchBlocks,\n fetchOAuthTokens,\n revokeOAuthToken,\n tagUser,\n untagUser,\n deleteUser,\n addRight,\n deleteRight,\n activateUser,\n deactivateUser,\n register,\n getCaptcha,\n updateProfileImages,\n updateProfile,\n importBlocks,\n importFollows,\n deleteAccount,\n changeEmail,\n changePassword,\n settingsMFA,\n mfaDisableOTP,\n generateMfaBackupCodes,\n mfaSetupOTP,\n mfaConfirmOTP,\n fetchFollowRequests,\n approveUser,\n denyUser,\n suggestions,\n markNotificationsAsSeen,\n dismissNotification,\n vote,\n fetchPoll,\n fetchFavoritedByUsers,\n fetchRebloggedByUsers,\n fetchEmojiReactions,\n reactWithEmoji,\n unreactWithEmoji,\n reportUser,\n updateNotificationSettings,\n search2,\n searchUsers,\n fetchKnownDomains,\n fetchDomainMutes,\n muteDomain,\n unmuteDomain,\n chats,\n getOrCreateChat,\n chatMessages,\n sendChatMessage,\n readChat,\n deleteChatMessage\n}\n\nexport default apiService\n","import { includes } from 'lodash'\n\nconst generateProfileLink = (id, screenName, restrictedNicknames) => {\n const complicated = !screenName || (isExternal(screenName) || includes(restrictedNicknames, screenName))\n return {\n name: (complicated ? 'external-user-profile' : 'user-profile'),\n params: (complicated ? { id } : { name: screenName })\n }\n}\n\nconst isExternal = screenName => screenName && screenName.includes('@')\n\nexport default generateProfileLink\n","import StillImage from '../still-image/still-image.vue'\n\nconst UserAvatar = {\n props: [\n 'user',\n 'betterShadow',\n 'compact'\n ],\n data () {\n return {\n showPlaceholder: false,\n defaultAvatar: `${this.$store.state.instance.server + this.$store.state.instance.defaultAvatar}`\n }\n },\n components: {\n StillImage\n },\n methods: {\n imgSrc (src) {\n return (!src || this.showPlaceholder) ? this.defaultAvatar : src\n },\n imageLoadError () {\n this.showPlaceholder = true\n }\n }\n}\n\nexport default UserAvatar\n","function injectStyle (context) {\n require(\"!!vue-style-loader!css-loader?minimize!../../../node_modules/vue-loader/lib/style-compiler/index?{\\\"optionsId\\\":\\\"0\\\",\\\"vue\\\":true,\\\"scoped\\\":false,\\\"sourceMap\\\":false}!sass-loader!../../../node_modules/vue-loader/lib/selector?type=styles&index=0!./user_avatar.vue\")\n}\n/* script */\nexport * from \"!!babel-loader!./user_avatar.js\"\nimport __vue_script__ from \"!!babel-loader!./user_avatar.js\"/* template */\nimport {render as __vue_render__, staticRenderFns as __vue_static_render_fns__} from \"!!../../../node_modules/vue-loader/lib/template-compiler/index?{\\\"id\\\":\\\"data-v-619ad024\\\",\\\"hasScoped\\\":false,\\\"optionsId\\\":\\\"0\\\",\\\"buble\\\":{\\\"transforms\\\":{}}}!../../../node_modules/vue-loader/lib/selector?type=template&index=0!./user_avatar.vue\"\n/* template functional */\nvar __vue_template_functional__ = false\n/* styles */\nvar __vue_styles__ = injectStyle\n/* scopeId */\nvar __vue_scopeId__ = null\n/* moduleIdentifier (server only) */\nvar __vue_module_identifier__ = null\nimport normalizeComponent from \"!../../../node_modules/vue-loader/lib/runtime/component-normalizer\"\nvar Component = normalizeComponent(\n __vue_script__,\n __vue_render__,\n __vue_static_render_fns__,\n __vue_template_functional__,\n __vue_styles__,\n __vue_scopeId__,\n __vue_module_identifier__\n)\n\nexport default Component.exports\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('StillImage',{staticClass:\"Avatar\",class:{ 'avatar-compact': _vm.compact, 'better-shadow': _vm.betterShadow },attrs:{\"alt\":_vm.user.screen_name,\"title\":_vm.user.screen_name,\"src\":_vm.imgSrc(_vm.user.profile_image_url_original),\"image-load-error\":_vm.imageLoadError}})}\nvar staticRenderFns = []\nexport { render, staticRenderFns }","import { filter, sortBy, includes } from 'lodash'\nimport { muteWordHits } from '../status_parser/status_parser.js'\nimport { showDesktopNotification } from '../desktop_notification_utils/desktop_notification_utils.js'\n\nexport const notificationsFromStore = store => store.state.statuses.notifications.data\n\nexport const visibleTypes = store => {\n const rootState = store.rootState || store.state\n\n return ([\n rootState.config.notificationVisibility.likes && 'like',\n rootState.config.notificationVisibility.mentions && 'mention',\n rootState.config.notificationVisibility.repeats && 'repeat',\n rootState.config.notificationVisibility.follows && 'follow',\n rootState.config.notificationVisibility.followRequest && 'follow_request',\n rootState.config.notificationVisibility.moves && 'move',\n rootState.config.notificationVisibility.emojiReactions && 'pleroma:emoji_reaction'\n ].filter(_ => _))\n}\n\nconst statusNotifications = ['like', 'mention', 'repeat', 'pleroma:emoji_reaction']\n\nexport const isStatusNotification = (type) => includes(statusNotifications, type)\n\nconst sortById = (a, b) => {\n const seqA = Number(a.id)\n const seqB = Number(b.id)\n const isSeqA = !Number.isNaN(seqA)\n const isSeqB = !Number.isNaN(seqB)\n if (isSeqA && isSeqB) {\n return seqA > seqB ? -1 : 1\n } else if (isSeqA && !isSeqB) {\n return 1\n } else if (!isSeqA && isSeqB) {\n return -1\n } else {\n return a.id > b.id ? -1 : 1\n }\n}\n\nconst isMutedNotification = (store, notification) => {\n if (!notification.status) return\n return notification.status.muted || muteWordHits(notification.status, store.rootGetters.mergedConfig.muteWords).length > 0\n}\n\nexport const maybeShowNotification = (store, notification) => {\n const rootState = store.rootState || store.state\n\n if (notification.seen) return\n if (!visibleTypes(store).includes(notification.type)) return\n if (notification.type === 'mention' && isMutedNotification(store, notification)) return\n\n const notificationObject = prepareNotificationObject(notification, store.rootGetters.i18n)\n showDesktopNotification(rootState, notificationObject)\n}\n\nexport const filteredNotificationsFromStore = (store, types) => {\n // map is just to clone the array since sort mutates it and it causes some issues\n let sortedNotifications = notificationsFromStore(store).map(_ => _).sort(sortById)\n sortedNotifications = sortBy(sortedNotifications, 'seen')\n return sortedNotifications.filter(\n (notification) => (types || visibleTypes(store)).includes(notification.type)\n )\n}\n\nexport const unseenNotificationsFromStore = store =>\n filter(filteredNotificationsFromStore(store), ({ seen }) => !seen)\n\nexport const prepareNotificationObject = (notification, i18n) => {\n const notifObj = {\n tag: notification.id\n }\n const status = notification.status\n const title = notification.from_profile.name\n notifObj.title = title\n notifObj.icon = notification.from_profile.profile_image_url\n let i18nString\n switch (notification.type) {\n case 'like':\n i18nString = 'favorited_you'\n break\n case 'repeat':\n i18nString = 'repeated_you'\n break\n case 'follow':\n i18nString = 'followed_you'\n break\n case 'move':\n i18nString = 'migrated_to'\n break\n case 'follow_request':\n i18nString = 'follow_request'\n break\n }\n\n if (notification.type === 'pleroma:emoji_reaction') {\n notifObj.body = i18n.t('notifications.reacted_with', [notification.emoji])\n } else if (i18nString) {\n notifObj.body = i18n.t('notifications.' + i18nString)\n } else if (isStatusNotification(notification.type)) {\n notifObj.body = notification.status.text\n }\n\n // Shows first attached non-nsfw image, if any. Should add configuration for this somehow...\n if (status && status.attachments && status.attachments.length > 0 && !status.nsfw &&\n status.attachments[0].mimetype.startsWith('image/')) {\n notifObj.image = status.attachments[0].url\n }\n\n return notifObj\n}\n","// TODO this func might as well take the entire file and use its mimetype\n// or the entire service could be just mimetype service that only operates\n// on mimetypes and not files. Currently the naming is confusing.\nconst fileType = mimetype => {\n if (mimetype.match(/text\\/html/)) {\n return 'html'\n }\n\n if (mimetype.match(/image/)) {\n return 'image'\n }\n\n if (mimetype.match(/video/)) {\n return 'video'\n }\n\n if (mimetype.match(/audio/)) {\n return 'audio'\n }\n\n return 'unknown'\n}\n\nconst fileMatchesSomeType = (types, file) =>\n types.some(type => fileType(file.mimetype) === type)\n\nconst fileTypeService = {\n fileType,\n fileMatchesSomeType\n}\n\nexport default fileTypeService\n","const Popover = {\n name: 'Popover',\n props: {\n // Action to trigger popover: either 'hover' or 'click'\n trigger: String,\n // Either 'top' or 'bottom'\n placement: String,\n // Takes object with properties 'x' and 'y', values of these can be\n // 'container' for using offsetParent as boundaries for either axis\n // or 'viewport'\n boundTo: Object,\n // Takes a selector to use as a replacement for the parent container\n // for getting boundaries for x an y axis\n boundToSelector: String,\n // Takes a top/bottom/left/right object, how much space to leave\n // between boundary and popover element\n margin: Object,\n // Takes a x/y object and tells how many pixels to offset from\n // anchor point on either axis\n offset: Object,\n // Replaces the classes you may want for the popover container.\n // Use 'popover-default' in addition to get the default popover\n // styles with your custom class.\n popoverClass: String\n },\n data () {\n return {\n hidden: true,\n styles: { opacity: 0 },\n oldSize: { width: 0, height: 0 }\n }\n },\n methods: {\n containerBoundingClientRect () {\n const container = this.boundToSelector ? this.$el.closest(this.boundToSelector) : this.$el.offsetParent\n return container.getBoundingClientRect()\n },\n updateStyles () {\n if (this.hidden) {\n this.styles = {\n opacity: 0\n }\n return\n }\n\n // Popover will be anchored around this element, trigger ref is the container, so\n // its children are what are inside the slot. Expect only one slot=\"trigger\".\n const anchorEl = (this.$refs.trigger && this.$refs.trigger.children[0]) || this.$el\n const screenBox = anchorEl.getBoundingClientRect()\n // Screen position of the origin point for popover\n const origin = { x: screenBox.left + screenBox.width * 0.5, y: screenBox.top }\n const content = this.$refs.content\n // Minor optimization, don't call a slow reflow call if we don't have to\n const parentBounds = this.boundTo &&\n (this.boundTo.x === 'container' || this.boundTo.y === 'container') &&\n this.containerBoundingClientRect()\n\n const margin = this.margin || {}\n\n // What are the screen bounds for the popover? Viewport vs container\n // when using viewport, using default margin values to dodge the navbar\n const xBounds = this.boundTo && this.boundTo.x === 'container' ? {\n min: parentBounds.left + (margin.left || 0),\n max: parentBounds.right - (margin.right || 0)\n } : {\n min: 0 + (margin.left || 10),\n max: window.innerWidth - (margin.right || 10)\n }\n\n const yBounds = this.boundTo && this.boundTo.y === 'container' ? {\n min: parentBounds.top + (margin.top || 0),\n max: parentBounds.bottom - (margin.bottom || 0)\n } : {\n min: 0 + (margin.top || 50),\n max: window.innerHeight - (margin.bottom || 5)\n }\n\n let horizOffset = 0\n\n // If overflowing from left, move it so that it doesn't\n if ((origin.x - content.offsetWidth * 0.5) < xBounds.min) {\n horizOffset += -(origin.x - content.offsetWidth * 0.5) + xBounds.min\n }\n\n // If overflowing from right, move it so that it doesn't\n if ((origin.x + horizOffset + content.offsetWidth * 0.5) > xBounds.max) {\n horizOffset -= (origin.x + horizOffset + content.offsetWidth * 0.5) - xBounds.max\n }\n\n // Default to whatever user wished with placement prop\n let usingTop = this.placement !== 'bottom'\n\n // Handle special cases, first force to displaying on top if there's not space on bottom,\n // regardless of what placement value was. Then check if there's not space on top, and\n // force to bottom, again regardless of what placement value was.\n if (origin.y + content.offsetHeight > yBounds.max) usingTop = true\n if (origin.y - content.offsetHeight < yBounds.min) usingTop = false\n\n const yOffset = (this.offset && this.offset.y) || 0\n const translateY = usingTop\n ? -anchorEl.offsetHeight - yOffset - content.offsetHeight\n : yOffset\n\n const xOffset = (this.offset && this.offset.x) || 0\n const translateX = (anchorEl.offsetWidth * 0.5) - content.offsetWidth * 0.5 + horizOffset + xOffset\n\n // Note, separate translateX and translateY avoids blurry text on chromium,\n // single translate or translate3d resulted in blurry text.\n this.styles = {\n opacity: 1,\n transform: `translateX(${Math.round(translateX)}px) translateY(${Math.round(translateY)}px)`\n }\n },\n showPopover () {\n if (this.hidden) this.$emit('show')\n this.hidden = false\n this.$nextTick(this.updateStyles)\n },\n hidePopover () {\n if (!this.hidden) this.$emit('close')\n this.hidden = true\n this.styles = { opacity: 0 }\n },\n onMouseenter (e) {\n if (this.trigger === 'hover') this.showPopover()\n },\n onMouseleave (e) {\n if (this.trigger === 'hover') this.hidePopover()\n },\n onClick (e) {\n if (this.trigger === 'click') {\n if (this.hidden) {\n this.showPopover()\n } else {\n this.hidePopover()\n }\n }\n },\n onClickOutside (e) {\n if (this.hidden) return\n if (this.$el.contains(e.target)) return\n this.hidePopover()\n }\n },\n updated () {\n // Monitor changes to content size, update styles only when content sizes have changed,\n // that should be the only time we need to move the popover box if we don't care about scroll\n // or resize\n const content = this.$refs.content\n if (!content) return\n if (this.oldSize.width !== content.offsetWidth || this.oldSize.height !== content.offsetHeight) {\n this.updateStyles()\n this.oldSize = { width: content.offsetWidth, height: content.offsetHeight }\n }\n },\n created () {\n document.addEventListener('click', this.onClickOutside)\n },\n destroyed () {\n document.removeEventListener('click', this.onClickOutside)\n this.hidePopover()\n }\n}\n\nexport default Popover\n","function injectStyle (context) {\n require(\"!!vue-style-loader!css-loader?minimize!../../../node_modules/vue-loader/lib/style-compiler/index?{\\\"optionsId\\\":\\\"0\\\",\\\"vue\\\":true,\\\"scoped\\\":false,\\\"sourceMap\\\":false}!sass-loader!../../../node_modules/vue-loader/lib/selector?type=styles&index=0!./popover.vue\")\n}\n/* script */\nexport * from \"!!babel-loader!./popover.js\"\nimport __vue_script__ from \"!!babel-loader!./popover.js\"/* template */\nimport {render as __vue_render__, staticRenderFns as __vue_static_render_fns__} from \"!!../../../node_modules/vue-loader/lib/template-compiler/index?{\\\"id\\\":\\\"data-v-fbc07fb6\\\",\\\"hasScoped\\\":false,\\\"optionsId\\\":\\\"0\\\",\\\"buble\\\":{\\\"transforms\\\":{}}}!../../../node_modules/vue-loader/lib/selector?type=template&index=0!./popover.vue\"\n/* template functional */\nvar __vue_template_functional__ = false\n/* styles */\nvar __vue_styles__ = injectStyle\n/* scopeId */\nvar __vue_scopeId__ = null\n/* moduleIdentifier (server only) */\nvar __vue_module_identifier__ = null\nimport normalizeComponent from \"!../../../node_modules/vue-loader/lib/runtime/component-normalizer\"\nvar Component = normalizeComponent(\n __vue_script__,\n __vue_render__,\n __vue_static_render_fns__,\n __vue_template_functional__,\n __vue_styles__,\n __vue_scopeId__,\n __vue_module_identifier__\n)\n\nexport default Component.exports\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{on:{\"mouseenter\":_vm.onMouseenter,\"mouseleave\":_vm.onMouseleave}},[_c('div',{ref:\"trigger\",on:{\"click\":_vm.onClick}},[_vm._t(\"trigger\")],2),_vm._v(\" \"),(!_vm.hidden)?_c('div',{ref:\"content\",staticClass:\"popover\",class:_vm.popoverClass || 'popover-default',style:(_vm.styles)},[_vm._t(\"content\",null,{\"close\":_vm.hidePopover})],2):_vm._e()])}\nvar staticRenderFns = []\nexport { render, staticRenderFns }","const DialogModal = {\n props: {\n darkOverlay: {\n default: true,\n type: Boolean\n },\n onCancel: {\n default: () => {},\n type: Function\n }\n }\n}\n\nexport default DialogModal\n","function injectStyle (context) {\n require(\"!!vue-style-loader!css-loader?minimize!../../../node_modules/vue-loader/lib/style-compiler/index?{\\\"optionsId\\\":\\\"0\\\",\\\"vue\\\":true,\\\"scoped\\\":false,\\\"sourceMap\\\":false}!sass-loader!../../../node_modules/vue-loader/lib/selector?type=styles&index=0!./dialog_modal.vue\")\n}\n/* script */\nexport * from \"!!babel-loader!./dialog_modal.js\"\nimport __vue_script__ from \"!!babel-loader!./dialog_modal.js\"/* template */\nimport {render as __vue_render__, staticRenderFns as __vue_static_render_fns__} from \"!!../../../node_modules/vue-loader/lib/template-compiler/index?{\\\"id\\\":\\\"data-v-70b9d662\\\",\\\"hasScoped\\\":false,\\\"optionsId\\\":\\\"0\\\",\\\"buble\\\":{\\\"transforms\\\":{}}}!../../../node_modules/vue-loader/lib/selector?type=template&index=0!./dialog_modal.vue\"\n/* template functional */\nvar __vue_template_functional__ = false\n/* styles */\nvar __vue_styles__ = injectStyle\n/* scopeId */\nvar __vue_scopeId__ = null\n/* moduleIdentifier (server only) */\nvar __vue_module_identifier__ = null\nimport normalizeComponent from \"!../../../node_modules/vue-loader/lib/runtime/component-normalizer\"\nvar Component = normalizeComponent(\n __vue_script__,\n __vue_render__,\n __vue_static_render_fns__,\n __vue_template_functional__,\n __vue_styles__,\n __vue_scopeId__,\n __vue_module_identifier__\n)\n\nexport default Component.exports\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('span',{class:{ 'dark-overlay': _vm.darkOverlay },on:{\"click\":function($event){if($event.target !== $event.currentTarget){ return null; }$event.stopPropagation();return _vm.onCancel()}}},[_c('div',{staticClass:\"dialog-modal panel panel-default\",on:{\"click\":function($event){$event.stopPropagation();}}},[_c('div',{staticClass:\"panel-heading dialog-modal-heading\"},[_c('div',{staticClass:\"title\"},[_vm._t(\"header\")],2)]),_vm._v(\" \"),_c('div',{staticClass:\"dialog-modal-content\"},[_vm._t(\"default\")],2),_vm._v(\" \"),_c('div',{staticClass:\"dialog-modal-footer user-interactions panel-footer\"},[_vm._t(\"footer\")],2)])])}\nvar staticRenderFns = []\nexport { render, staticRenderFns }","import DialogModal from '../dialog_modal/dialog_modal.vue'\nimport Popover from '../popover/popover.vue'\n\nconst FORCE_NSFW = 'mrf_tag:media-force-nsfw'\nconst STRIP_MEDIA = 'mrf_tag:media-strip'\nconst FORCE_UNLISTED = 'mrf_tag:force-unlisted'\nconst DISABLE_REMOTE_SUBSCRIPTION = 'mrf_tag:disable-remote-subscription'\nconst DISABLE_ANY_SUBSCRIPTION = 'mrf_tag:disable-any-subscription'\nconst SANDBOX = 'mrf_tag:sandbox'\nconst QUARANTINE = 'mrf_tag:quarantine'\n\nconst ModerationTools = {\n props: [\n 'user'\n ],\n data () {\n return {\n tags: {\n FORCE_NSFW,\n STRIP_MEDIA,\n FORCE_UNLISTED,\n DISABLE_REMOTE_SUBSCRIPTION,\n DISABLE_ANY_SUBSCRIPTION,\n SANDBOX,\n QUARANTINE\n },\n showDeleteUserDialog: false,\n toggled: false\n }\n },\n components: {\n DialogModal,\n Popover\n },\n computed: {\n tagsSet () {\n return new Set(this.user.tags)\n },\n hasTagPolicy () {\n return this.$store.state.instance.tagPolicyAvailable\n }\n },\n methods: {\n hasTag (tagName) {\n return this.tagsSet.has(tagName)\n },\n toggleTag (tag) {\n const store = this.$store\n if (this.tagsSet.has(tag)) {\n store.state.api.backendInteractor.untagUser({ user: this.user, tag }).then(response => {\n if (!response.ok) { return }\n store.commit('untagUser', { user: this.user, tag })\n })\n } else {\n store.state.api.backendInteractor.tagUser({ user: this.user, tag }).then(response => {\n if (!response.ok) { return }\n store.commit('tagUser', { user: this.user, tag })\n })\n }\n },\n toggleRight (right) {\n const store = this.$store\n if (this.user.rights[right]) {\n store.state.api.backendInteractor.deleteRight({ user: this.user, right }).then(response => {\n if (!response.ok) { return }\n store.commit('updateRight', { user: this.user, right, value: false })\n })\n } else {\n store.state.api.backendInteractor.addRight({ user: this.user, right }).then(response => {\n if (!response.ok) { return }\n store.commit('updateRight', { user: this.user, right, value: true })\n })\n }\n },\n toggleActivationStatus () {\n this.$store.dispatch('toggleActivationStatus', { user: this.user })\n },\n deleteUserDialog (show) {\n this.showDeleteUserDialog = show\n },\n deleteUser () {\n const store = this.$store\n const user = this.user\n const { id, name } = user\n store.state.api.backendInteractor.deleteUser({ user })\n .then(e => {\n this.$store.dispatch('markStatusesAsDeleted', status => user.id === status.user.id)\n const isProfile = this.$route.name === 'external-user-profile' || this.$route.name === 'user-profile'\n const isTargetUser = this.$route.params.name === name || this.$route.params.id === id\n if (isProfile && isTargetUser) {\n window.history.back()\n }\n })\n },\n setToggled (value) {\n this.toggled = value\n }\n }\n}\n\nexport default ModerationTools\n","function injectStyle (context) {\n require(\"!!vue-style-loader!css-loader?minimize!../../../node_modules/vue-loader/lib/style-compiler/index?{\\\"optionsId\\\":\\\"0\\\",\\\"vue\\\":true,\\\"scoped\\\":false,\\\"sourceMap\\\":false}!sass-loader!../../../node_modules/vue-loader/lib/selector?type=styles&index=0!./moderation_tools.vue\")\n}\n/* script */\nexport * from \"!!babel-loader!./moderation_tools.js\"\nimport __vue_script__ from \"!!babel-loader!./moderation_tools.js\"/* template */\nimport {render as __vue_render__, staticRenderFns as __vue_static_render_fns__} from \"!!../../../node_modules/vue-loader/lib/template-compiler/index?{\\\"id\\\":\\\"data-v-168f1ca6\\\",\\\"hasScoped\\\":false,\\\"optionsId\\\":\\\"0\\\",\\\"buble\\\":{\\\"transforms\\\":{}}}!../../../node_modules/vue-loader/lib/selector?type=template&index=0!./moderation_tools.vue\"\n/* template functional */\nvar __vue_template_functional__ = false\n/* styles */\nvar __vue_styles__ = injectStyle\n/* scopeId */\nvar __vue_scopeId__ = null\n/* moduleIdentifier (server only) */\nvar __vue_module_identifier__ = null\nimport normalizeComponent from \"!../../../node_modules/vue-loader/lib/runtime/component-normalizer\"\nvar Component = normalizeComponent(\n __vue_script__,\n __vue_render__,\n __vue_static_render_fns__,\n __vue_template_functional__,\n __vue_styles__,\n __vue_scopeId__,\n __vue_module_identifier__\n)\n\nexport default Component.exports\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[_c('Popover',{staticClass:\"moderation-tools-popover\",attrs:{\"trigger\":\"click\",\"placement\":\"bottom\",\"offset\":{ y: 5 }},on:{\"show\":function($event){return _vm.setToggled(true)},\"close\":function($event){return _vm.setToggled(false)}}},[_c('div',{attrs:{\"slot\":\"content\"},slot:\"content\"},[_c('div',{staticClass:\"dropdown-menu\"},[(_vm.user.is_local)?_c('span',[_c('button',{staticClass:\"dropdown-item\",on:{\"click\":function($event){return _vm.toggleRight(\"admin\")}}},[_vm._v(\"\\n \"+_vm._s(_vm.$t(!!_vm.user.rights.admin ? 'user_card.admin_menu.revoke_admin' : 'user_card.admin_menu.grant_admin'))+\"\\n \")]),_vm._v(\" \"),_c('button',{staticClass:\"dropdown-item\",on:{\"click\":function($event){return _vm.toggleRight(\"moderator\")}}},[_vm._v(\"\\n \"+_vm._s(_vm.$t(!!_vm.user.rights.moderator ? 'user_card.admin_menu.revoke_moderator' : 'user_card.admin_menu.grant_moderator'))+\"\\n \")]),_vm._v(\" \"),_c('div',{staticClass:\"dropdown-divider\",attrs:{\"role\":\"separator\"}})]):_vm._e(),_vm._v(\" \"),_c('button',{staticClass:\"dropdown-item\",on:{\"click\":function($event){return _vm.toggleActivationStatus()}}},[_vm._v(\"\\n \"+_vm._s(_vm.$t(!!_vm.user.deactivated ? 'user_card.admin_menu.activate_account' : 'user_card.admin_menu.deactivate_account'))+\"\\n \")]),_vm._v(\" \"),_c('button',{staticClass:\"dropdown-item\",on:{\"click\":function($event){return _vm.deleteUserDialog(true)}}},[_vm._v(\"\\n \"+_vm._s(_vm.$t('user_card.admin_menu.delete_account'))+\"\\n \")]),_vm._v(\" \"),(_vm.hasTagPolicy)?_c('div',{staticClass:\"dropdown-divider\",attrs:{\"role\":\"separator\"}}):_vm._e(),_vm._v(\" \"),(_vm.hasTagPolicy)?_c('span',[_c('button',{staticClass:\"dropdown-item\",on:{\"click\":function($event){return _vm.toggleTag(_vm.tags.FORCE_NSFW)}}},[_vm._v(\"\\n \"+_vm._s(_vm.$t('user_card.admin_menu.force_nsfw'))+\"\\n \"),_c('span',{staticClass:\"menu-checkbox\",class:{ 'menu-checkbox-checked': _vm.hasTag(_vm.tags.FORCE_NSFW) }})]),_vm._v(\" \"),_c('button',{staticClass:\"dropdown-item\",on:{\"click\":function($event){return _vm.toggleTag(_vm.tags.STRIP_MEDIA)}}},[_vm._v(\"\\n \"+_vm._s(_vm.$t('user_card.admin_menu.strip_media'))+\"\\n \"),_c('span',{staticClass:\"menu-checkbox\",class:{ 'menu-checkbox-checked': _vm.hasTag(_vm.tags.STRIP_MEDIA) }})]),_vm._v(\" \"),_c('button',{staticClass:\"dropdown-item\",on:{\"click\":function($event){return _vm.toggleTag(_vm.tags.FORCE_UNLISTED)}}},[_vm._v(\"\\n \"+_vm._s(_vm.$t('user_card.admin_menu.force_unlisted'))+\"\\n \"),_c('span',{staticClass:\"menu-checkbox\",class:{ 'menu-checkbox-checked': _vm.hasTag(_vm.tags.FORCE_UNLISTED) }})]),_vm._v(\" \"),_c('button',{staticClass:\"dropdown-item\",on:{\"click\":function($event){return _vm.toggleTag(_vm.tags.SANDBOX)}}},[_vm._v(\"\\n \"+_vm._s(_vm.$t('user_card.admin_menu.sandbox'))+\"\\n \"),_c('span',{staticClass:\"menu-checkbox\",class:{ 'menu-checkbox-checked': _vm.hasTag(_vm.tags.SANDBOX) }})]),_vm._v(\" \"),(_vm.user.is_local)?_c('button',{staticClass:\"dropdown-item\",on:{\"click\":function($event){return _vm.toggleTag(_vm.tags.DISABLE_REMOTE_SUBSCRIPTION)}}},[_vm._v(\"\\n \"+_vm._s(_vm.$t('user_card.admin_menu.disable_remote_subscription'))+\"\\n \"),_c('span',{staticClass:\"menu-checkbox\",class:{ 'menu-checkbox-checked': _vm.hasTag(_vm.tags.DISABLE_REMOTE_SUBSCRIPTION) }})]):_vm._e(),_vm._v(\" \"),(_vm.user.is_local)?_c('button',{staticClass:\"dropdown-item\",on:{\"click\":function($event){return _vm.toggleTag(_vm.tags.DISABLE_ANY_SUBSCRIPTION)}}},[_vm._v(\"\\n \"+_vm._s(_vm.$t('user_card.admin_menu.disable_any_subscription'))+\"\\n \"),_c('span',{staticClass:\"menu-checkbox\",class:{ 'menu-checkbox-checked': _vm.hasTag(_vm.tags.DISABLE_ANY_SUBSCRIPTION) }})]):_vm._e(),_vm._v(\" \"),(_vm.user.is_local)?_c('button',{staticClass:\"dropdown-item\",on:{\"click\":function($event){return _vm.toggleTag(_vm.tags.QUARANTINE)}}},[_vm._v(\"\\n \"+_vm._s(_vm.$t('user_card.admin_menu.quarantine'))+\"\\n \"),_c('span',{staticClass:\"menu-checkbox\",class:{ 'menu-checkbox-checked': _vm.hasTag(_vm.tags.QUARANTINE) }})]):_vm._e()]):_vm._e()])]),_vm._v(\" \"),_c('button',{staticClass:\"btn btn-default btn-block\",class:{ toggled: _vm.toggled },attrs:{\"slot\":\"trigger\"},slot:\"trigger\"},[_vm._v(\"\\n \"+_vm._s(_vm.$t('user_card.admin_menu.moderation'))+\"\\n \")])]),_vm._v(\" \"),_c('portal',{attrs:{\"to\":\"modal\"}},[(_vm.showDeleteUserDialog)?_c('DialogModal',{attrs:{\"on-cancel\":_vm.deleteUserDialog.bind(this, false)}},[_c('template',{slot:\"header\"},[_vm._v(\"\\n \"+_vm._s(_vm.$t('user_card.admin_menu.delete_user'))+\"\\n \")]),_vm._v(\" \"),_c('p',[_vm._v(_vm._s(_vm.$t('user_card.admin_menu.delete_user_confirmation')))]),_vm._v(\" \"),_c('template',{slot:\"footer\"},[_c('button',{staticClass:\"btn btn-default\",on:{\"click\":function($event){return _vm.deleteUserDialog(false)}}},[_vm._v(\"\\n \"+_vm._s(_vm.$t('general.cancel'))+\"\\n \")]),_vm._v(\" \"),_c('button',{staticClass:\"btn btn-default danger\",on:{\"click\":function($event){return _vm.deleteUser()}}},[_vm._v(\"\\n \"+_vm._s(_vm.$t('user_card.admin_menu.delete_user'))+\"\\n \")])])],2):_vm._e()],1)],1)}\nvar staticRenderFns = []\nexport { render, staticRenderFns }","import { mapState } from 'vuex'\nimport ProgressButton from '../progress_button/progress_button.vue'\nimport Popover from '../popover/popover.vue'\n\nconst AccountActions = {\n props: [\n 'user', 'relationship'\n ],\n data () {\n return { }\n },\n components: {\n ProgressButton,\n Popover\n },\n methods: {\n showRepeats () {\n this.$store.dispatch('showReblogs', this.user.id)\n },\n hideRepeats () {\n this.$store.dispatch('hideReblogs', this.user.id)\n },\n blockUser () {\n this.$store.dispatch('blockUser', this.user.id)\n },\n unblockUser () {\n this.$store.dispatch('unblockUser', this.user.id)\n },\n reportUser () {\n this.$store.dispatch('openUserReportingModal', this.user.id)\n },\n openChat () {\n this.$router.push({\n name: 'chat',\n params: { recipient_id: this.user.id }\n })\n }\n },\n computed: {\n ...mapState({\n pleromaChatMessagesAvailable: state => state.instance.pleromaChatMessagesAvailable\n })\n }\n}\n\nexport default AccountActions\n","function injectStyle (context) {\n require(\"!!vue-style-loader!css-loader?minimize!../../../node_modules/vue-loader/lib/style-compiler/index?{\\\"optionsId\\\":\\\"0\\\",\\\"vue\\\":true,\\\"scoped\\\":false,\\\"sourceMap\\\":false}!sass-loader!../../../node_modules/vue-loader/lib/selector?type=styles&index=0!./account_actions.vue\")\n}\n/* script */\nexport * from \"!!babel-loader!./account_actions.js\"\nimport __vue_script__ from \"!!babel-loader!./account_actions.js\"/* template */\nimport {render as __vue_render__, staticRenderFns as __vue_static_render_fns__} from \"!!../../../node_modules/vue-loader/lib/template-compiler/index?{\\\"id\\\":\\\"data-v-1883f214\\\",\\\"hasScoped\\\":false,\\\"optionsId\\\":\\\"0\\\",\\\"buble\\\":{\\\"transforms\\\":{}}}!../../../node_modules/vue-loader/lib/selector?type=template&index=0!./account_actions.vue\"\n/* template functional */\nvar __vue_template_functional__ = false\n/* styles */\nvar __vue_styles__ = injectStyle\n/* scopeId */\nvar __vue_scopeId__ = null\n/* moduleIdentifier (server only) */\nvar __vue_module_identifier__ = null\nimport normalizeComponent from \"!../../../node_modules/vue-loader/lib/runtime/component-normalizer\"\nvar Component = normalizeComponent(\n __vue_script__,\n __vue_render__,\n __vue_static_render_fns__,\n __vue_template_functional__,\n __vue_styles__,\n __vue_scopeId__,\n __vue_module_identifier__\n)\n\nexport default Component.exports\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"account-actions\"},[_c('Popover',{attrs:{\"trigger\":\"click\",\"placement\":\"bottom\",\"bound-to\":{ x: 'container' }}},[_c('div',{staticClass:\"account-tools-popover\",attrs:{\"slot\":\"content\"},slot:\"content\"},[_c('div',{staticClass:\"dropdown-menu\"},[(_vm.relationship.following)?[(_vm.relationship.showing_reblogs)?_c('button',{staticClass:\"btn btn-default dropdown-item\",on:{\"click\":_vm.hideRepeats}},[_vm._v(\"\\n \"+_vm._s(_vm.$t('user_card.hide_repeats'))+\"\\n \")]):_vm._e(),_vm._v(\" \"),(!_vm.relationship.showing_reblogs)?_c('button',{staticClass:\"btn btn-default dropdown-item\",on:{\"click\":_vm.showRepeats}},[_vm._v(\"\\n \"+_vm._s(_vm.$t('user_card.show_repeats'))+\"\\n \")]):_vm._e(),_vm._v(\" \"),_c('div',{staticClass:\"dropdown-divider\",attrs:{\"role\":\"separator\"}})]:_vm._e(),_vm._v(\" \"),(_vm.relationship.blocking)?_c('button',{staticClass:\"btn btn-default btn-block dropdown-item\",on:{\"click\":_vm.unblockUser}},[_vm._v(\"\\n \"+_vm._s(_vm.$t('user_card.unblock'))+\"\\n \")]):_c('button',{staticClass:\"btn btn-default btn-block dropdown-item\",on:{\"click\":_vm.blockUser}},[_vm._v(\"\\n \"+_vm._s(_vm.$t('user_card.block'))+\"\\n \")]),_vm._v(\" \"),_c('button',{staticClass:\"btn btn-default btn-block dropdown-item\",on:{\"click\":_vm.reportUser}},[_vm._v(\"\\n \"+_vm._s(_vm.$t('user_card.report'))+\"\\n \")]),_vm._v(\" \"),(_vm.pleromaChatMessagesAvailable)?_c('button',{staticClass:\"btn btn-default btn-block dropdown-item\",on:{\"click\":_vm.openChat}},[_vm._v(\"\\n \"+_vm._s(_vm.$t('user_card.message'))+\"\\n \")]):_vm._e()],2)]),_vm._v(\" \"),_c('div',{staticClass:\"btn btn-default ellipsis-button\",attrs:{\"slot\":\"trigger\"},slot:\"trigger\"},[_c('i',{staticClass:\"icon-ellipsis trigger-button\"})])])],1)}\nvar staticRenderFns = []\nexport { render, staticRenderFns }","import UserAvatar from '../user_avatar/user_avatar.vue'\nimport RemoteFollow from '../remote_follow/remote_follow.vue'\nimport ProgressButton from '../progress_button/progress_button.vue'\nimport FollowButton from '../follow_button/follow_button.vue'\nimport ModerationTools from '../moderation_tools/moderation_tools.vue'\nimport AccountActions from '../account_actions/account_actions.vue'\nimport generateProfileLink from 'src/services/user_profile_link_generator/user_profile_link_generator'\nimport { mapGetters } from 'vuex'\n\nexport default {\n props: [\n 'userId', 'switcher', 'selected', 'hideBio', 'rounded', 'bordered', 'allowZoomingAvatar'\n ],\n data () {\n return {\n followRequestInProgress: false,\n betterShadow: this.$store.state.interface.browserSupport.cssFilter\n }\n },\n created () {\n this.$store.dispatch('fetchUserRelationship', this.user.id)\n },\n computed: {\n user () {\n return this.$store.getters.findUser(this.userId)\n },\n relationship () {\n return this.$store.getters.relationship(this.userId)\n },\n classes () {\n return [{\n 'user-card-rounded-t': this.rounded === 'top', // set border-top-left-radius and border-top-right-radius\n 'user-card-rounded': this.rounded === true, // set border-radius for all sides\n 'user-card-bordered': this.bordered === true // set border for all sides\n }]\n },\n style () {\n return {\n backgroundImage: [\n `linear-gradient(to bottom, var(--profileTint), var(--profileTint))`,\n `url(${this.user.cover_photo})`\n ].join(', ')\n }\n },\n isOtherUser () {\n return this.user.id !== this.$store.state.users.currentUser.id\n },\n subscribeUrl () {\n // eslint-disable-next-line no-undef\n const serverUrl = new URL(this.user.statusnet_profile_url)\n return `${serverUrl.protocol}//${serverUrl.host}/main/ostatus`\n },\n loggedIn () {\n return this.$store.state.users.currentUser\n },\n dailyAvg () {\n const days = Math.ceil((new Date() - new Date(this.user.created_at)) / (60 * 60 * 24 * 1000))\n return Math.round(this.user.statuses_count / days)\n },\n userHighlightType: {\n get () {\n const data = this.$store.getters.mergedConfig.highlight[this.user.screen_name]\n return (data && data.type) || 'disabled'\n },\n set (type) {\n const data = this.$store.getters.mergedConfig.highlight[this.user.screen_name]\n if (type !== 'disabled') {\n this.$store.dispatch('setHighlight', { user: this.user.screen_name, color: (data && data.color) || '#FFFFFF', type })\n } else {\n this.$store.dispatch('setHighlight', { user: this.user.screen_name, color: undefined })\n }\n },\n ...mapGetters(['mergedConfig'])\n },\n userHighlightColor: {\n get () {\n const data = this.$store.getters.mergedConfig.highlight[this.user.screen_name]\n return data && data.color\n },\n set (color) {\n this.$store.dispatch('setHighlight', { user: this.user.screen_name, color })\n }\n },\n visibleRole () {\n const rights = this.user.rights\n if (!rights) { return }\n const validRole = rights.admin || rights.moderator\n const roleTitle = rights.admin ? 'admin' : 'moderator'\n return validRole && roleTitle\n },\n hideFollowsCount () {\n return this.isOtherUser && this.user.hide_follows_count\n },\n hideFollowersCount () {\n return this.isOtherUser && this.user.hide_followers_count\n },\n ...mapGetters(['mergedConfig'])\n },\n components: {\n UserAvatar,\n RemoteFollow,\n ModerationTools,\n AccountActions,\n ProgressButton,\n FollowButton\n },\n methods: {\n muteUser () {\n this.$store.dispatch('muteUser', this.user.id)\n },\n unmuteUser () {\n this.$store.dispatch('unmuteUser', this.user.id)\n },\n subscribeUser () {\n return this.$store.dispatch('subscribeUser', this.user.id)\n },\n unsubscribeUser () {\n return this.$store.dispatch('unsubscribeUser', this.user.id)\n },\n setProfileView (v) {\n if (this.switcher) {\n const store = this.$store\n store.commit('setProfileView', { v })\n }\n },\n linkClicked ({ target }) {\n if (target.tagName === 'SPAN') {\n target = target.parentNode\n }\n if (target.tagName === 'A') {\n window.open(target.href, '_blank')\n }\n },\n userProfileLink (user) {\n return generateProfileLink(\n user.id, user.screen_name,\n this.$store.state.instance.restrictedNicknames\n )\n },\n zoomAvatar () {\n const attachment = {\n url: this.user.profile_image_url_original,\n mimetype: 'image'\n }\n this.$store.dispatch('setMedia', [attachment])\n this.$store.dispatch('setCurrent', attachment)\n },\n mentionUser () {\n this.$store.dispatch('openPostStatusModal', { replyTo: true, repliedUser: this.user })\n }\n }\n}\n","function injectStyle (context) {\n require(\"!!vue-style-loader!css-loader?minimize!../../../node_modules/vue-loader/lib/style-compiler/index?{\\\"optionsId\\\":\\\"0\\\",\\\"vue\\\":true,\\\"scoped\\\":false,\\\"sourceMap\\\":false}!sass-loader!../../../node_modules/vue-loader/lib/selector?type=styles&index=0!./user_card.vue\")\n}\n/* script */\nexport * from \"!!babel-loader!./user_card.js\"\nimport __vue_script__ from \"!!babel-loader!./user_card.js\"/* template */\nimport {render as __vue_render__, staticRenderFns as __vue_static_render_fns__} from \"!!../../../node_modules/vue-loader/lib/template-compiler/index?{\\\"id\\\":\\\"data-v-5c57b7a6\\\",\\\"hasScoped\\\":false,\\\"optionsId\\\":\\\"0\\\",\\\"buble\\\":{\\\"transforms\\\":{}}}!../../../node_modules/vue-loader/lib/selector?type=template&index=0!./user_card.vue\"\n/* template functional */\nvar __vue_template_functional__ = false\n/* styles */\nvar __vue_styles__ = injectStyle\n/* scopeId */\nvar __vue_scopeId__ = null\n/* moduleIdentifier (server only) */\nvar __vue_module_identifier__ = null\nimport normalizeComponent from \"!../../../node_modules/vue-loader/lib/runtime/component-normalizer\"\nvar Component = normalizeComponent(\n __vue_script__,\n __vue_render__,\n __vue_static_render_fns__,\n __vue_template_functional__,\n __vue_styles__,\n __vue_scopeId__,\n __vue_module_identifier__\n)\n\nexport default Component.exports\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"user-card\",class:_vm.classes},[_c('div',{staticClass:\"background-image\",class:{ 'hide-bio': _vm.hideBio },style:(_vm.style)}),_vm._v(\" \"),_c('div',{staticClass:\"panel-heading\"},[_c('div',{staticClass:\"user-info\"},[_c('div',{staticClass:\"container\"},[(_vm.allowZoomingAvatar)?_c('a',{staticClass:\"user-info-avatar-link\",on:{\"click\":_vm.zoomAvatar}},[_c('UserAvatar',{attrs:{\"better-shadow\":_vm.betterShadow,\"user\":_vm.user}}),_vm._v(\" \"),_vm._m(0)],1):_c('router-link',{attrs:{\"to\":_vm.userProfileLink(_vm.user)}},[_c('UserAvatar',{attrs:{\"better-shadow\":_vm.betterShadow,\"user\":_vm.user}})],1),_vm._v(\" \"),_c('div',{staticClass:\"user-summary\"},[_c('div',{staticClass:\"top-line\"},[(_vm.user.name_html)?_c('div',{staticClass:\"user-name\",attrs:{\"title\":_vm.user.name},domProps:{\"innerHTML\":_vm._s(_vm.user.name_html)}}):_c('div',{staticClass:\"user-name\",attrs:{\"title\":_vm.user.name}},[_vm._v(\"\\n \"+_vm._s(_vm.user.name)+\"\\n \")]),_vm._v(\" \"),(_vm.isOtherUser && !_vm.user.is_local)?_c('a',{attrs:{\"href\":_vm.user.statusnet_profile_url,\"target\":\"_blank\"}},[_c('i',{staticClass:\"icon-link-ext usersettings\"})]):_vm._e(),_vm._v(\" \"),(_vm.isOtherUser && _vm.loggedIn)?_c('AccountActions',{attrs:{\"user\":_vm.user,\"relationship\":_vm.relationship}}):_vm._e()],1),_vm._v(\" \"),_c('div',{staticClass:\"bottom-line\"},[_c('router-link',{staticClass:\"user-screen-name\",attrs:{\"title\":_vm.user.screen_name,\"to\":_vm.userProfileLink(_vm.user)}},[_vm._v(\"\\n @\"+_vm._s(_vm.user.screen_name)+\"\\n \")]),_vm._v(\" \"),(!_vm.hideBio)?[(!!_vm.visibleRole)?_c('span',{staticClass:\"alert user-role\"},[_vm._v(\"\\n \"+_vm._s(_vm.visibleRole)+\"\\n \")]):_vm._e(),_vm._v(\" \"),(_vm.user.bot)?_c('span',{staticClass:\"alert user-role\"},[_vm._v(\"\\n bot\\n \")]):_vm._e()]:_vm._e(),_vm._v(\" \"),(_vm.user.locked)?_c('span',[_c('i',{staticClass:\"icon icon-lock\"})]):_vm._e(),_vm._v(\" \"),(!_vm.mergedConfig.hideUserStats && !_vm.hideBio)?_c('span',{staticClass:\"dailyAvg\"},[_vm._v(_vm._s(_vm.dailyAvg)+\" \"+_vm._s(_vm.$t('user_card.per_day')))]):_vm._e()],2)])],1),_vm._v(\" \"),_c('div',{staticClass:\"user-meta\"},[(_vm.relationship.followed_by && _vm.loggedIn && _vm.isOtherUser)?_c('div',{staticClass:\"following\"},[_vm._v(\"\\n \"+_vm._s(_vm.$t('user_card.follows_you'))+\"\\n \")]):_vm._e(),_vm._v(\" \"),(_vm.isOtherUser && (_vm.loggedIn || !_vm.switcher))?_c('div',{staticClass:\"highlighter\"},[(_vm.userHighlightType !== 'disabled')?_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.userHighlightColor),expression:\"userHighlightColor\"}],staticClass:\"userHighlightText\",attrs:{\"id\":'userHighlightColorTx'+_vm.user.id,\"type\":\"text\"},domProps:{\"value\":(_vm.userHighlightColor)},on:{\"input\":function($event){if($event.target.composing){ return; }_vm.userHighlightColor=$event.target.value}}}):_vm._e(),_vm._v(\" \"),(_vm.userHighlightType !== 'disabled')?_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.userHighlightColor),expression:\"userHighlightColor\"}],staticClass:\"userHighlightCl\",attrs:{\"id\":'userHighlightColor'+_vm.user.id,\"type\":\"color\"},domProps:{\"value\":(_vm.userHighlightColor)},on:{\"input\":function($event){if($event.target.composing){ return; }_vm.userHighlightColor=$event.target.value}}}):_vm._e(),_vm._v(\" \"),_c('label',{staticClass:\"userHighlightSel select\",attrs:{\"for\":\"theme_tab\"}},[_c('select',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.userHighlightType),expression:\"userHighlightType\"}],staticClass:\"userHighlightSel\",attrs:{\"id\":'userHighlightSel'+_vm.user.id},on:{\"change\":function($event){var $$selectedVal = Array.prototype.filter.call($event.target.options,function(o){return o.selected}).map(function(o){var val = \"_value\" in o ? o._value : o.value;return val}); _vm.userHighlightType=$event.target.multiple ? $$selectedVal : $$selectedVal[0]}}},[_c('option',{attrs:{\"value\":\"disabled\"}},[_vm._v(\"No highlight\")]),_vm._v(\" \"),_c('option',{attrs:{\"value\":\"solid\"}},[_vm._v(\"Solid bg\")]),_vm._v(\" \"),_c('option',{attrs:{\"value\":\"striped\"}},[_vm._v(\"Striped bg\")]),_vm._v(\" \"),_c('option',{attrs:{\"value\":\"side\"}},[_vm._v(\"Side stripe\")])]),_vm._v(\" \"),_c('i',{staticClass:\"icon-down-open\"})])]):_vm._e()]),_vm._v(\" \"),(_vm.loggedIn && _vm.isOtherUser)?_c('div',{staticClass:\"user-interactions\"},[_c('div',{staticClass:\"btn-group\"},[_c('FollowButton',{attrs:{\"relationship\":_vm.relationship}}),_vm._v(\" \"),(_vm.relationship.following)?[(!_vm.relationship.subscribing)?_c('ProgressButton',{staticClass:\"btn btn-default\",attrs:{\"click\":_vm.subscribeUser,\"title\":_vm.$t('user_card.subscribe')}},[_c('i',{staticClass:\"icon-bell-alt\"})]):_c('ProgressButton',{staticClass:\"btn btn-default toggled\",attrs:{\"click\":_vm.unsubscribeUser,\"title\":_vm.$t('user_card.unsubscribe')}},[_c('i',{staticClass:\"icon-bell-ringing-o\"})])]:_vm._e()],2),_vm._v(\" \"),_c('div',[(_vm.relationship.muting)?_c('button',{staticClass:\"btn btn-default btn-block toggled\",on:{\"click\":_vm.unmuteUser}},[_vm._v(\"\\n \"+_vm._s(_vm.$t('user_card.muted'))+\"\\n \")]):_c('button',{staticClass:\"btn btn-default btn-block\",on:{\"click\":_vm.muteUser}},[_vm._v(\"\\n \"+_vm._s(_vm.$t('user_card.mute'))+\"\\n \")])]),_vm._v(\" \"),_c('div',[_c('button',{staticClass:\"btn btn-default btn-block\",on:{\"click\":_vm.mentionUser}},[_vm._v(\"\\n \"+_vm._s(_vm.$t('user_card.mention'))+\"\\n \")])]),_vm._v(\" \"),(_vm.loggedIn.role === \"admin\")?_c('ModerationTools',{attrs:{\"user\":_vm.user}}):_vm._e()],1):_vm._e(),_vm._v(\" \"),(!_vm.loggedIn && _vm.user.is_local)?_c('div',{staticClass:\"user-interactions\"},[_c('RemoteFollow',{attrs:{\"user\":_vm.user}})],1):_vm._e()])]),_vm._v(\" \"),(!_vm.hideBio)?_c('div',{staticClass:\"panel-body\"},[(!_vm.mergedConfig.hideUserStats && _vm.switcher)?_c('div',{staticClass:\"user-counts\"},[_c('div',{staticClass:\"user-count\",on:{\"click\":function($event){$event.preventDefault();return _vm.setProfileView('statuses')}}},[_c('h5',[_vm._v(_vm._s(_vm.$t('user_card.statuses')))]),_vm._v(\" \"),_c('span',[_vm._v(_vm._s(_vm.user.statuses_count)+\" \"),_c('br')])]),_vm._v(\" \"),_c('div',{staticClass:\"user-count\",on:{\"click\":function($event){$event.preventDefault();return _vm.setProfileView('friends')}}},[_c('h5',[_vm._v(_vm._s(_vm.$t('user_card.followees')))]),_vm._v(\" \"),_c('span',[_vm._v(_vm._s(_vm.hideFollowsCount ? _vm.$t('user_card.hidden') : _vm.user.friends_count))])]),_vm._v(\" \"),_c('div',{staticClass:\"user-count\",on:{\"click\":function($event){$event.preventDefault();return _vm.setProfileView('followers')}}},[_c('h5',[_vm._v(_vm._s(_vm.$t('user_card.followers')))]),_vm._v(\" \"),_c('span',[_vm._v(_vm._s(_vm.hideFollowersCount ? _vm.$t('user_card.hidden') : _vm.user.followers_count))])])]):_vm._e(),_vm._v(\" \"),(!_vm.hideBio && _vm.user.description_html)?_c('p',{staticClass:\"user-card-bio\",domProps:{\"innerHTML\":_vm._s(_vm.user.description_html)},on:{\"click\":function($event){$event.preventDefault();return _vm.linkClicked($event)}}}):(!_vm.hideBio)?_c('p',{staticClass:\"user-card-bio\"},[_vm._v(\"\\n \"+_vm._s(_vm.user.description)+\"\\n \")]):_vm._e()]):_vm._e()])}\nvar staticRenderFns = [function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"user-info-avatar-link-overlay\"},[_c('i',{staticClass:\"button-icon icon-zoom-in\"})])}]\nexport { render, staticRenderFns }","import { invertLightness, brightness } from 'chromatism'\nimport { alphaBlend, mixrgb } from '../color_convert/color_convert.js'\n/* This is a definition of all layer combinations\n * each key is a topmost layer, each value represents layer underneath\n * this is essentially a simplified tree\n */\nexport const LAYERS = {\n undelay: null, // root\n topBar: null, // no transparency support\n badge: null, // no transparency support\n profileTint: null, // doesn't matter\n fg: null,\n bg: 'underlay',\n highlight: 'bg',\n panel: 'bg',\n popover: 'bg',\n selectedMenu: 'popover',\n btn: 'bg',\n btnPanel: 'panel',\n btnTopBar: 'topBar',\n input: 'bg',\n inputPanel: 'panel',\n inputTopBar: 'topBar',\n alert: 'bg',\n alertPanel: 'panel',\n poll: 'bg',\n chatBg: 'underlay',\n chatMessage: 'chatBg'\n}\n\n/* By default opacity slots have 1 as default opacity\n * this allows redefining it to something else\n */\nexport const DEFAULT_OPACITY = {\n profileTint: 0.5,\n alert: 0.5,\n input: 0.5,\n faint: 0.5,\n underlay: 0.15,\n alertPopup: 0.95\n}\n\n/** SUBJECT TO CHANGE IN THE FUTURE, this is all beta\n * Color and opacity slots definitions. Each key represents a slot.\n *\n * Short-hands:\n * String beginning with `--` - value after dashes treated as sole\n * dependency - i.e. `--value` equivalent to { depends: ['value']}\n * String beginning with `#` - value would be treated as solid color\n * defined in hexadecimal representation (i.e. #FFFFFF) and will be\n * used as default. `#FFFFFF` is equivalent to { default: '#FFFFFF'}\n *\n * Full definition:\n * @property {String[]} depends - color slot names this color depends ones.\n * cyclic dependencies are supported to some extent but not recommended.\n * @property {String} [opacity] - opacity slot used by this color slot.\n * opacity is inherited from parents. To break inheritance graph use null\n * @property {Number} [priority] - EXPERIMENTAL. used to pre-sort slots so\n * that slots with higher priority come earlier\n * @property {Function(mod, ...colors)} [color] - function that will be\n * used to determine the color. By default it just copies first color in\n * dependency list.\n * @argument {Number} mod - `1` (light-on-dark) or `-1` (dark-on-light)\n * depending on background color (for textColor)/given color.\n * @argument {...Object} deps - each argument after mod represents each\n * color from `depends` array. All colors take user customizations into\n * account and represented by { r, g, b } objects.\n * @returns {Object} resulting color, should be in { r, g, b } form\n *\n * @property {Boolean|String} [textColor] - true to mark color slot as text\n * color. This enables automatic text color generation for the slot. Use\n * 'preserve' string if you don't want text color to fall back to\n * black/white. Use 'bw' to only ever use black or white. This also makes\n * following properties required:\n * @property {String} [layer] - which layer the text sit on top on - used\n * to account for transparency in text color calculation\n * layer is inherited from parents. To break inheritance graph use null\n * @property {String} [variant] - which color slot is background (same as\n * above, used to account for transparency)\n */\nexport const SLOT_INHERITANCE = {\n bg: {\n depends: [],\n opacity: 'bg',\n priority: 1\n },\n fg: {\n depends: [],\n priority: 1\n },\n text: {\n depends: [],\n layer: 'bg',\n opacity: null,\n priority: 1\n },\n underlay: {\n default: '#000000',\n opacity: 'underlay'\n },\n link: {\n depends: ['accent'],\n priority: 1\n },\n accent: {\n depends: ['link'],\n priority: 1\n },\n faint: {\n depends: ['text'],\n opacity: 'faint'\n },\n faintLink: {\n depends: ['link'],\n opacity: 'faint'\n },\n postFaintLink: {\n depends: ['postLink'],\n opacity: 'faint'\n },\n\n cBlue: '#0000ff',\n cRed: '#FF0000',\n cGreen: '#00FF00',\n cOrange: '#E3FF00',\n\n profileBg: {\n depends: ['bg'],\n color: (mod, bg) => ({\n r: Math.floor(bg.r * 0.53),\n g: Math.floor(bg.g * 0.56),\n b: Math.floor(bg.b * 0.59)\n })\n },\n profileTint: {\n depends: ['bg'],\n layer: 'profileTint',\n opacity: 'profileTint'\n },\n\n highlight: {\n depends: ['bg'],\n color: (mod, bg) => brightness(5 * mod, bg).rgb\n },\n highlightLightText: {\n depends: ['lightText'],\n layer: 'highlight',\n textColor: true\n },\n highlightPostLink: {\n depends: ['postLink'],\n layer: 'highlight',\n textColor: 'preserve'\n },\n highlightFaintText: {\n depends: ['faint'],\n layer: 'highlight',\n textColor: true\n },\n highlightFaintLink: {\n depends: ['faintLink'],\n layer: 'highlight',\n textColor: 'preserve'\n },\n highlightPostFaintLink: {\n depends: ['postFaintLink'],\n layer: 'highlight',\n textColor: 'preserve'\n },\n highlightText: {\n depends: ['text'],\n layer: 'highlight',\n textColor: true\n },\n highlightLink: {\n depends: ['link'],\n layer: 'highlight',\n textColor: 'preserve'\n },\n highlightIcon: {\n depends: ['highlight', 'highlightText'],\n color: (mod, bg, text) => mixrgb(bg, text)\n },\n\n popover: {\n depends: ['bg'],\n opacity: 'popover'\n },\n popoverLightText: {\n depends: ['lightText'],\n layer: 'popover',\n textColor: true\n },\n popoverPostLink: {\n depends: ['postLink'],\n layer: 'popover',\n textColor: 'preserve'\n },\n popoverFaintText: {\n depends: ['faint'],\n layer: 'popover',\n textColor: true\n },\n popoverFaintLink: {\n depends: ['faintLink'],\n layer: 'popover',\n textColor: 'preserve'\n },\n popoverPostFaintLink: {\n depends: ['postFaintLink'],\n layer: 'popover',\n textColor: 'preserve'\n },\n popoverText: {\n depends: ['text'],\n layer: 'popover',\n textColor: true\n },\n popoverLink: {\n depends: ['link'],\n layer: 'popover',\n textColor: 'preserve'\n },\n popoverIcon: {\n depends: ['popover', 'popoverText'],\n color: (mod, bg, text) => mixrgb(bg, text)\n },\n\n selectedPost: '--highlight',\n selectedPostFaintText: {\n depends: ['highlightFaintText'],\n layer: 'highlight',\n variant: 'selectedPost',\n textColor: true\n },\n selectedPostLightText: {\n depends: ['highlightLightText'],\n layer: 'highlight',\n variant: 'selectedPost',\n textColor: true\n },\n selectedPostPostLink: {\n depends: ['highlightPostLink'],\n layer: 'highlight',\n variant: 'selectedPost',\n textColor: 'preserve'\n },\n selectedPostFaintLink: {\n depends: ['highlightFaintLink'],\n layer: 'highlight',\n variant: 'selectedPost',\n textColor: 'preserve'\n },\n selectedPostText: {\n depends: ['highlightText'],\n layer: 'highlight',\n variant: 'selectedPost',\n textColor: true\n },\n selectedPostLink: {\n depends: ['highlightLink'],\n layer: 'highlight',\n variant: 'selectedPost',\n textColor: 'preserve'\n },\n selectedPostIcon: {\n depends: ['selectedPost', 'selectedPostText'],\n color: (mod, bg, text) => mixrgb(bg, text)\n },\n\n selectedMenu: {\n depends: ['bg'],\n color: (mod, bg) => brightness(5 * mod, bg).rgb\n },\n selectedMenuLightText: {\n depends: ['highlightLightText'],\n layer: 'selectedMenu',\n variant: 'selectedMenu',\n textColor: true\n },\n selectedMenuFaintText: {\n depends: ['highlightFaintText'],\n layer: 'selectedMenu',\n variant: 'selectedMenu',\n textColor: true\n },\n selectedMenuFaintLink: {\n depends: ['highlightFaintLink'],\n layer: 'selectedMenu',\n variant: 'selectedMenu',\n textColor: 'preserve'\n },\n selectedMenuText: {\n depends: ['highlightText'],\n layer: 'selectedMenu',\n variant: 'selectedMenu',\n textColor: true\n },\n selectedMenuLink: {\n depends: ['highlightLink'],\n layer: 'selectedMenu',\n variant: 'selectedMenu',\n textColor: 'preserve'\n },\n selectedMenuIcon: {\n depends: ['selectedMenu', 'selectedMenuText'],\n color: (mod, bg, text) => mixrgb(bg, text)\n },\n\n selectedMenuPopover: {\n depends: ['popover'],\n color: (mod, bg) => brightness(5 * mod, bg).rgb\n },\n selectedMenuPopoverLightText: {\n depends: ['selectedMenuLightText'],\n layer: 'selectedMenuPopover',\n variant: 'selectedMenuPopover',\n textColor: true\n },\n selectedMenuPopoverFaintText: {\n depends: ['selectedMenuFaintText'],\n layer: 'selectedMenuPopover',\n variant: 'selectedMenuPopover',\n textColor: true\n },\n selectedMenuPopoverFaintLink: {\n depends: ['selectedMenuFaintLink'],\n layer: 'selectedMenuPopover',\n variant: 'selectedMenuPopover',\n textColor: 'preserve'\n },\n selectedMenuPopoverText: {\n depends: ['selectedMenuText'],\n layer: 'selectedMenuPopover',\n variant: 'selectedMenuPopover',\n textColor: true\n },\n selectedMenuPopoverLink: {\n depends: ['selectedMenuLink'],\n layer: 'selectedMenuPopover',\n variant: 'selectedMenuPopover',\n textColor: 'preserve'\n },\n selectedMenuPopoverIcon: {\n depends: ['selectedMenuPopover', 'selectedMenuText'],\n color: (mod, bg, text) => mixrgb(bg, text)\n },\n\n lightText: {\n depends: ['text'],\n layer: 'bg',\n textColor: 'preserve',\n color: (mod, text) => brightness(20 * mod, text).rgb\n },\n\n postLink: {\n depends: ['link'],\n layer: 'bg',\n textColor: 'preserve'\n },\n\n postGreentext: {\n depends: ['cGreen'],\n layer: 'bg',\n textColor: 'preserve'\n },\n\n border: {\n depends: ['fg'],\n opacity: 'border',\n color: (mod, fg) => brightness(2 * mod, fg).rgb\n },\n\n poll: {\n depends: ['accent', 'bg'],\n copacity: 'poll',\n color: (mod, accent, bg) => alphaBlend(accent, 0.4, bg)\n },\n pollText: {\n depends: ['text'],\n layer: 'poll',\n textColor: true\n },\n\n icon: {\n depends: ['bg', 'text'],\n inheritsOpacity: false,\n color: (mod, bg, text) => mixrgb(bg, text)\n },\n\n // Foreground\n fgText: {\n depends: ['text'],\n layer: 'fg',\n textColor: true\n },\n fgLink: {\n depends: ['link'],\n layer: 'fg',\n textColor: 'preserve'\n },\n\n // Panel header\n panel: {\n depends: ['fg'],\n opacity: 'panel'\n },\n panelText: {\n depends: ['text'],\n layer: 'panel',\n textColor: true\n },\n panelFaint: {\n depends: ['fgText'],\n layer: 'panel',\n opacity: 'faint',\n textColor: true\n },\n panelLink: {\n depends: ['fgLink'],\n layer: 'panel',\n textColor: 'preserve'\n },\n\n // Top bar\n topBar: '--fg',\n topBarText: {\n depends: ['fgText'],\n layer: 'topBar',\n textColor: true\n },\n topBarLink: {\n depends: ['fgLink'],\n layer: 'topBar',\n textColor: 'preserve'\n },\n\n // Tabs\n tab: {\n depends: ['btn']\n },\n tabText: {\n depends: ['btnText'],\n layer: 'btn',\n textColor: true\n },\n tabActiveText: {\n depends: ['text'],\n layer: 'bg',\n textColor: true\n },\n\n // Buttons\n btn: {\n depends: ['fg'],\n variant: 'btn',\n opacity: 'btn'\n },\n btnText: {\n depends: ['fgText'],\n layer: 'btn',\n textColor: true\n },\n btnPanelText: {\n depends: ['btnText'],\n layer: 'btnPanel',\n variant: 'btn',\n textColor: true\n },\n btnTopBarText: {\n depends: ['btnText'],\n layer: 'btnTopBar',\n variant: 'btn',\n textColor: true\n },\n\n // Buttons: pressed\n btnPressed: {\n depends: ['btn'],\n layer: 'btn'\n },\n btnPressedText: {\n depends: ['btnText'],\n layer: 'btn',\n variant: 'btnPressed',\n textColor: true\n },\n btnPressedPanel: {\n depends: ['btnPressed'],\n layer: 'btn'\n },\n btnPressedPanelText: {\n depends: ['btnPanelText'],\n layer: 'btnPanel',\n variant: 'btnPressed',\n textColor: true\n },\n btnPressedTopBar: {\n depends: ['btnPressed'],\n layer: 'btn'\n },\n btnPressedTopBarText: {\n depends: ['btnTopBarText'],\n layer: 'btnTopBar',\n variant: 'btnPressed',\n textColor: true\n },\n\n // Buttons: toggled\n btnToggled: {\n depends: ['btn'],\n layer: 'btn',\n color: (mod, btn) => brightness(mod * 20, btn).rgb\n },\n btnToggledText: {\n depends: ['btnText'],\n layer: 'btn',\n variant: 'btnToggled',\n textColor: true\n },\n btnToggledPanelText: {\n depends: ['btnPanelText'],\n layer: 'btnPanel',\n variant: 'btnToggled',\n textColor: true\n },\n btnToggledTopBarText: {\n depends: ['btnTopBarText'],\n layer: 'btnTopBar',\n variant: 'btnToggled',\n textColor: true\n },\n\n // Buttons: disabled\n btnDisabled: {\n depends: ['btn', 'bg'],\n color: (mod, btn, bg) => alphaBlend(btn, 0.25, bg)\n },\n btnDisabledText: {\n depends: ['btnText', 'btnDisabled'],\n layer: 'btn',\n variant: 'btnDisabled',\n color: (mod, text, btn) => alphaBlend(text, 0.25, btn)\n },\n btnDisabledPanelText: {\n depends: ['btnPanelText', 'btnDisabled'],\n layer: 'btnPanel',\n variant: 'btnDisabled',\n color: (mod, text, btn) => alphaBlend(text, 0.25, btn)\n },\n btnDisabledTopBarText: {\n depends: ['btnTopBarText', 'btnDisabled'],\n layer: 'btnTopBar',\n variant: 'btnDisabled',\n color: (mod, text, btn) => alphaBlend(text, 0.25, btn)\n },\n\n // Input fields\n input: {\n depends: ['fg'],\n opacity: 'input'\n },\n inputText: {\n depends: ['text'],\n layer: 'input',\n textColor: true\n },\n inputPanelText: {\n depends: ['panelText'],\n layer: 'inputPanel',\n variant: 'input',\n textColor: true\n },\n inputTopbarText: {\n depends: ['topBarText'],\n layer: 'inputTopBar',\n variant: 'input',\n textColor: true\n },\n\n alertError: {\n depends: ['cRed'],\n opacity: 'alert'\n },\n alertErrorText: {\n depends: ['text'],\n layer: 'alert',\n variant: 'alertError',\n textColor: true\n },\n alertErrorPanelText: {\n depends: ['panelText'],\n layer: 'alertPanel',\n variant: 'alertError',\n textColor: true\n },\n\n alertWarning: {\n depends: ['cOrange'],\n opacity: 'alert'\n },\n alertWarningText: {\n depends: ['text'],\n layer: 'alert',\n variant: 'alertWarning',\n textColor: true\n },\n alertWarningPanelText: {\n depends: ['panelText'],\n layer: 'alertPanel',\n variant: 'alertWarning',\n textColor: true\n },\n\n alertNeutral: {\n depends: ['text'],\n opacity: 'alert'\n },\n alertNeutralText: {\n depends: ['text'],\n layer: 'alert',\n variant: 'alertNeutral',\n color: (mod, text) => invertLightness(text).rgb,\n textColor: true\n },\n alertNeutralPanelText: {\n depends: ['panelText'],\n layer: 'alertPanel',\n variant: 'alertNeutral',\n textColor: true\n },\n\n alertPopupError: {\n depends: ['alertError'],\n opacity: 'alertPopup'\n },\n alertPopupErrorText: {\n depends: ['alertErrorText'],\n layer: 'popover',\n variant: 'alertPopupError',\n textColor: true\n },\n\n alertPopupWarning: {\n depends: ['alertWarning'],\n opacity: 'alertPopup'\n },\n alertPopupWarningText: {\n depends: ['alertWarningText'],\n layer: 'popover',\n variant: 'alertPopupWarning',\n textColor: true\n },\n\n alertPopupNeutral: {\n depends: ['alertNeutral'],\n opacity: 'alertPopup'\n },\n alertPopupNeutralText: {\n depends: ['alertNeutralText'],\n layer: 'popover',\n variant: 'alertPopupNeutral',\n textColor: true\n },\n\n badgeNotification: '--cRed',\n badgeNotificationText: {\n depends: ['text', 'badgeNotification'],\n layer: 'badge',\n variant: 'badgeNotification',\n textColor: 'bw'\n },\n\n chatBg: {\n depends: ['bg']\n },\n\n chatMessageIncomingBg: {\n depends: ['chatBg']\n },\n\n chatMessageIncomingText: {\n depends: ['text'],\n layer: 'chatMessage',\n variant: 'chatMessageIncomingBg',\n textColor: true\n },\n\n chatMessageIncomingLink: {\n depends: ['link'],\n layer: 'chatMessage',\n variant: 'chatMessageIncomingBg',\n textColor: 'preserve'\n },\n\n chatMessageIncomingBorder: {\n depends: ['border'],\n opacity: 'border',\n color: (mod, border) => brightness(2 * mod, border).rgb\n },\n\n chatMessageOutgoingBg: {\n depends: ['chatMessageIncomingBg'],\n color: (mod, chatMessage) => brightness(5 * mod, chatMessage).rgb\n },\n\n chatMessageOutgoingText: {\n depends: ['text'],\n layer: 'chatMessage',\n variant: 'chatMessageOutgoingBg',\n textColor: true\n },\n\n chatMessageOutgoingLink: {\n depends: ['link'],\n layer: 'chatMessage',\n variant: 'chatMessageOutgoingBg',\n textColor: 'preserve'\n },\n\n chatMessageOutgoingBorder: {\n depends: ['chatMessageOutgoingBg'],\n opacity: 'border',\n color: (mod, border) => brightness(2 * mod, border).rgb\n }\n}\n","import { convert } from 'chromatism'\nimport { rgb2hex, hex2rgb, rgba2css, getCssColor, relativeLuminance } from '../color_convert/color_convert.js'\nimport { getColors, computeDynamicColor, getOpacitySlot } from '../theme_data/theme_data.service.js'\n\nexport const applyTheme = (input) => {\n const { rules } = generatePreset(input)\n const head = document.head\n const body = document.body\n body.classList.add('hidden')\n\n const styleEl = document.createElement('style')\n head.appendChild(styleEl)\n const styleSheet = styleEl.sheet\n\n styleSheet.toString()\n styleSheet.insertRule(`body { ${rules.radii} }`, 'index-max')\n styleSheet.insertRule(`body { ${rules.colors} }`, 'index-max')\n styleSheet.insertRule(`body { ${rules.shadows} }`, 'index-max')\n styleSheet.insertRule(`body { ${rules.fonts} }`, 'index-max')\n body.classList.remove('hidden')\n}\n\nexport const getCssShadow = (input, usesDropShadow) => {\n if (input.length === 0) {\n return 'none'\n }\n\n return input\n .filter(_ => usesDropShadow ? _.inset : _)\n .map((shad) => [\n shad.x,\n shad.y,\n shad.blur,\n shad.spread\n ].map(_ => _ + 'px').concat([\n getCssColor(shad.color, shad.alpha),\n shad.inset ? 'inset' : ''\n ]).join(' ')).join(', ')\n}\n\nconst getCssShadowFilter = (input) => {\n if (input.length === 0) {\n return 'none'\n }\n\n return input\n // drop-shadow doesn't support inset or spread\n .filter((shad) => !shad.inset && Number(shad.spread) === 0)\n .map((shad) => [\n shad.x,\n shad.y,\n // drop-shadow's blur is twice as strong compared to box-shadow\n shad.blur / 2\n ].map(_ => _ + 'px').concat([\n getCssColor(shad.color, shad.alpha)\n ]).join(' '))\n .map(_ => `drop-shadow(${_})`)\n .join(' ')\n}\n\nexport const generateColors = (themeData) => {\n const sourceColors = !themeData.themeEngineVersion\n ? colors2to3(themeData.colors || themeData)\n : themeData.colors || themeData\n\n const { colors, opacity } = getColors(sourceColors, themeData.opacity || {})\n\n const htmlColors = Object.entries(colors)\n .reduce((acc, [k, v]) => {\n if (!v) return acc\n acc.solid[k] = rgb2hex(v)\n acc.complete[k] = typeof v.a === 'undefined' ? rgb2hex(v) : rgba2css(v)\n return acc\n }, { complete: {}, solid: {} })\n return {\n rules: {\n colors: Object.entries(htmlColors.complete)\n .filter(([k, v]) => v)\n .map(([k, v]) => `--${k}: ${v}`)\n .join(';')\n },\n theme: {\n colors: htmlColors.solid,\n opacity\n }\n }\n}\n\nexport const generateRadii = (input) => {\n let inputRadii = input.radii || {}\n // v1 -> v2\n if (typeof input.btnRadius !== 'undefined') {\n inputRadii = Object\n .entries(input)\n .filter(([k, v]) => k.endsWith('Radius'))\n .reduce((acc, e) => { acc[e[0].split('Radius')[0]] = e[1]; return acc }, {})\n }\n const radii = Object.entries(inputRadii).filter(([k, v]) => v).reduce((acc, [k, v]) => {\n acc[k] = v\n return acc\n }, {\n btn: 4,\n input: 4,\n checkbox: 2,\n panel: 10,\n avatar: 5,\n avatarAlt: 50,\n tooltip: 2,\n attachment: 5,\n chatMessage: inputRadii.panel\n })\n\n return {\n rules: {\n radii: Object.entries(radii).filter(([k, v]) => v).map(([k, v]) => `--${k}Radius: ${v}px`).join(';')\n },\n theme: {\n radii\n }\n }\n}\n\nexport const generateFonts = (input) => {\n const fonts = Object.entries(input.fonts || {}).filter(([k, v]) => v).reduce((acc, [k, v]) => {\n acc[k] = Object.entries(v).filter(([k, v]) => v).reduce((acc, [k, v]) => {\n acc[k] = v\n return acc\n }, acc[k])\n return acc\n }, {\n interface: {\n family: 'sans-serif'\n },\n input: {\n family: 'inherit'\n },\n post: {\n family: 'inherit'\n },\n postCode: {\n family: 'monospace'\n }\n })\n\n return {\n rules: {\n fonts: Object\n .entries(fonts)\n .filter(([k, v]) => v)\n .map(([k, v]) => `--${k}Font: ${v.family}`).join(';')\n },\n theme: {\n fonts\n }\n }\n}\n\nconst border = (top, shadow) => ({\n x: 0,\n y: top ? 1 : -1,\n blur: 0,\n spread: 0,\n color: shadow ? '#000000' : '#FFFFFF',\n alpha: 0.2,\n inset: true\n})\nconst buttonInsetFakeBorders = [border(true, false), border(false, true)]\nconst inputInsetFakeBorders = [border(true, true), border(false, false)]\nconst hoverGlow = {\n x: 0,\n y: 0,\n blur: 4,\n spread: 0,\n color: '--faint',\n alpha: 1\n}\n\nexport const DEFAULT_SHADOWS = {\n panel: [{\n x: 1,\n y: 1,\n blur: 4,\n spread: 0,\n color: '#000000',\n alpha: 0.6\n }],\n topBar: [{\n x: 0,\n y: 0,\n blur: 4,\n spread: 0,\n color: '#000000',\n alpha: 0.6\n }],\n popup: [{\n x: 2,\n y: 2,\n blur: 3,\n spread: 0,\n color: '#000000',\n alpha: 0.5\n }],\n avatar: [{\n x: 0,\n y: 1,\n blur: 8,\n spread: 0,\n color: '#000000',\n alpha: 0.7\n }],\n avatarStatus: [],\n panelHeader: [],\n button: [{\n x: 0,\n y: 0,\n blur: 2,\n spread: 0,\n color: '#000000',\n alpha: 1\n }, ...buttonInsetFakeBorders],\n buttonHover: [hoverGlow, ...buttonInsetFakeBorders],\n buttonPressed: [hoverGlow, ...inputInsetFakeBorders],\n input: [...inputInsetFakeBorders, {\n x: 0,\n y: 0,\n blur: 2,\n inset: true,\n spread: 0,\n color: '#000000',\n alpha: 1\n }]\n}\nexport const generateShadows = (input, colors) => {\n // TODO this is a small hack for `mod` to work with shadows\n // this is used to get the \"context\" of shadow, i.e. for `mod` properly depend on background color of element\n const hackContextDict = {\n button: 'btn',\n panel: 'bg',\n top: 'topBar',\n popup: 'popover',\n avatar: 'bg',\n panelHeader: 'panel',\n input: 'input'\n }\n const inputShadows = input.shadows && !input.themeEngineVersion\n ? shadows2to3(input.shadows, input.opacity)\n : input.shadows || {}\n const shadows = Object.entries({\n ...DEFAULT_SHADOWS,\n ...inputShadows\n }).reduce((shadowsAcc, [slotName, shadowDefs]) => {\n const slotFirstWord = slotName.replace(/[A-Z].*$/, '')\n const colorSlotName = hackContextDict[slotFirstWord]\n const isLightOnDark = relativeLuminance(convert(colors[colorSlotName]).rgb) < 0.5\n const mod = isLightOnDark ? 1 : -1\n const newShadow = shadowDefs.reduce((shadowAcc, def) => [\n ...shadowAcc,\n {\n ...def,\n color: rgb2hex(computeDynamicColor(\n def.color,\n (variableSlot) => convert(colors[variableSlot]).rgb,\n mod\n ))\n }\n ], [])\n return { ...shadowsAcc, [slotName]: newShadow }\n }, {})\n\n return {\n rules: {\n shadows: Object\n .entries(shadows)\n // TODO for v2.2: if shadow doesn't have non-inset shadows with spread > 0 - optionally\n // convert all non-inset shadows into filter: drop-shadow() to boost performance\n .map(([k, v]) => [\n `--${k}Shadow: ${getCssShadow(v)}`,\n `--${k}ShadowFilter: ${getCssShadowFilter(v)}`,\n `--${k}ShadowInset: ${getCssShadow(v, true)}`\n ].join(';'))\n .join(';')\n },\n theme: {\n shadows\n }\n }\n}\n\nexport const composePreset = (colors, radii, shadows, fonts) => {\n return {\n rules: {\n ...shadows.rules,\n ...colors.rules,\n ...radii.rules,\n ...fonts.rules\n },\n theme: {\n ...shadows.theme,\n ...colors.theme,\n ...radii.theme,\n ...fonts.theme\n }\n }\n}\n\nexport const generatePreset = (input) => {\n const colors = generateColors(input)\n return composePreset(\n colors,\n generateRadii(input),\n generateShadows(input, colors.theme.colors, colors.mod),\n generateFonts(input)\n )\n}\n\nexport const getThemes = () => {\n const cache = 'no-store'\n\n return window.fetch('/static/styles.json', { cache })\n .then((data) => data.json())\n .then((themes) => {\n return Object.entries(themes).map(([k, v]) => {\n let promise = null\n if (typeof v === 'object') {\n promise = Promise.resolve(v)\n } else if (typeof v === 'string') {\n promise = window.fetch(v, { cache })\n .then((data) => data.json())\n .catch((e) => {\n console.error(e)\n return null\n })\n }\n return [k, promise]\n })\n })\n .then((promises) => {\n return promises\n .reduce((acc, [k, v]) => {\n acc[k] = v\n return acc\n }, {})\n })\n}\nexport const colors2to3 = (colors) => {\n return Object.entries(colors).reduce((acc, [slotName, color]) => {\n const btnPositions = ['', 'Panel', 'TopBar']\n switch (slotName) {\n case 'lightBg':\n return { ...acc, highlight: color }\n case 'btnText':\n return {\n ...acc,\n ...btnPositions\n .reduce(\n (statePositionAcc, position) =>\n ({ ...statePositionAcc, ['btn' + position + 'Text']: color })\n , {}\n )\n }\n default:\n return { ...acc, [slotName]: color }\n }\n }, {})\n}\n\n/**\n * This handles compatibility issues when importing v2 theme's shadows to current format\n *\n * Back in v2 shadows allowed you to use dynamic colors however those used pure CSS3 variables\n */\nexport const shadows2to3 = (shadows, opacity) => {\n return Object.entries(shadows).reduce((shadowsAcc, [slotName, shadowDefs]) => {\n const isDynamic = ({ color }) => color.startsWith('--')\n const getOpacity = ({ color }) => opacity[getOpacitySlot(color.substring(2).split(',')[0])]\n const newShadow = shadowDefs.reduce((shadowAcc, def) => [\n ...shadowAcc,\n {\n ...def,\n alpha: isDynamic(def) ? getOpacity(def) || 1 : def.alpha\n }\n ], [])\n return { ...shadowsAcc, [slotName]: newShadow }\n }, {})\n}\n\nexport const getPreset = (val) => {\n return getThemes()\n .then((themes) => themes[val] ? themes[val] : themes['pleroma-dark'])\n .then((theme) => {\n const isV1 = Array.isArray(theme)\n const data = isV1 ? {} : theme.theme\n\n if (isV1) {\n const bg = hex2rgb(theme[1])\n const fg = hex2rgb(theme[2])\n const text = hex2rgb(theme[3])\n const link = hex2rgb(theme[4])\n\n const cRed = hex2rgb(theme[5] || '#FF0000')\n const cGreen = hex2rgb(theme[6] || '#00FF00')\n const cBlue = hex2rgb(theme[7] || '#0000FF')\n const cOrange = hex2rgb(theme[8] || '#E3FF00')\n\n data.colors = { bg, fg, text, link, cRed, cBlue, cGreen, cOrange }\n }\n\n return { theme: data, source: theme.source }\n })\n}\n\nexport const setPreset = (val) => getPreset(val).then(data => applyTheme(data.theme))\n","import { mapGetters } from 'vuex'\n\nconst FavoriteButton = {\n props: ['status', 'loggedIn'],\n data () {\n return {\n animated: false\n }\n },\n methods: {\n favorite () {\n if (!this.status.favorited) {\n this.$store.dispatch('favorite', { id: this.status.id })\n } else {\n this.$store.dispatch('unfavorite', { id: this.status.id })\n }\n this.animated = true\n setTimeout(() => {\n this.animated = false\n }, 500)\n }\n },\n computed: {\n classes () {\n return {\n 'icon-star-empty': !this.status.favorited,\n 'icon-star': this.status.favorited,\n 'animate-spin': this.animated\n }\n },\n ...mapGetters(['mergedConfig'])\n }\n}\n\nexport default FavoriteButton\n","function injectStyle (context) {\n require(\"!!vue-style-loader!css-loader?minimize!../../../node_modules/vue-loader/lib/style-compiler/index?{\\\"optionsId\\\":\\\"0\\\",\\\"vue\\\":true,\\\"scoped\\\":false,\\\"sourceMap\\\":false}!sass-loader!../../../node_modules/vue-loader/lib/selector?type=styles&index=0!./favorite_button.vue\")\n}\n/* script */\nexport * from \"!!babel-loader!./favorite_button.js\"\nimport __vue_script__ from \"!!babel-loader!./favorite_button.js\"/* template */\nimport {render as __vue_render__, staticRenderFns as __vue_static_render_fns__} from \"!!../../../node_modules/vue-loader/lib/template-compiler/index?{\\\"id\\\":\\\"data-v-2ced002f\\\",\\\"hasScoped\\\":false,\\\"optionsId\\\":\\\"0\\\",\\\"buble\\\":{\\\"transforms\\\":{}}}!../../../node_modules/vue-loader/lib/selector?type=template&index=0!./favorite_button.vue\"\n/* template functional */\nvar __vue_template_functional__ = false\n/* styles */\nvar __vue_styles__ = injectStyle\n/* scopeId */\nvar __vue_scopeId__ = null\n/* moduleIdentifier (server only) */\nvar __vue_module_identifier__ = null\nimport normalizeComponent from \"!../../../node_modules/vue-loader/lib/runtime/component-normalizer\"\nvar Component = normalizeComponent(\n __vue_script__,\n __vue_render__,\n __vue_static_render_fns__,\n __vue_template_functional__,\n __vue_styles__,\n __vue_scopeId__,\n __vue_module_identifier__\n)\n\nexport default Component.exports\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return (_vm.loggedIn)?_c('div',[_c('i',{staticClass:\"button-icon favorite-button fav-active\",class:_vm.classes,attrs:{\"title\":_vm.$t('tool_tip.favorite')},on:{\"click\":function($event){$event.preventDefault();return _vm.favorite()}}}),_vm._v(\" \"),(!_vm.mergedConfig.hidePostStats && _vm.status.fave_num > 0)?_c('span',[_vm._v(_vm._s(_vm.status.fave_num))]):_vm._e()]):_c('div',[_c('i',{staticClass:\"button-icon favorite-button\",class:_vm.classes,attrs:{\"title\":_vm.$t('tool_tip.favorite')}}),_vm._v(\" \"),(!_vm.mergedConfig.hidePostStats && _vm.status.fave_num > 0)?_c('span',[_vm._v(_vm._s(_vm.status.fave_num))]):_vm._e()])}\nvar staticRenderFns = []\nexport { render, staticRenderFns }","import Popover from '../popover/popover.vue'\nimport { mapGetters } from 'vuex'\n\nconst ReactButton = {\n props: ['status'],\n data () {\n return {\n filterWord: ''\n }\n },\n components: {\n Popover\n },\n methods: {\n addReaction (event, emoji, close) {\n const existingReaction = this.status.emoji_reactions.find(r => r.name === emoji)\n if (existingReaction && existingReaction.me) {\n this.$store.dispatch('unreactWithEmoji', { id: this.status.id, emoji })\n } else {\n this.$store.dispatch('reactWithEmoji', { id: this.status.id, emoji })\n }\n close()\n }\n },\n computed: {\n commonEmojis () {\n return ['👍', '😠', '👀', '😂', '🔥']\n },\n emojis () {\n if (this.filterWord !== '') {\n const filterWordLowercase = this.filterWord.toLowerCase()\n return this.$store.state.instance.emoji.filter(emoji =>\n emoji.displayText.toLowerCase().includes(filterWordLowercase)\n )\n }\n return this.$store.state.instance.emoji || []\n },\n ...mapGetters(['mergedConfig'])\n }\n}\n\nexport default ReactButton\n","function injectStyle (context) {\n require(\"!!vue-style-loader!css-loader?minimize!../../../node_modules/vue-loader/lib/style-compiler/index?{\\\"optionsId\\\":\\\"0\\\",\\\"vue\\\":true,\\\"scoped\\\":false,\\\"sourceMap\\\":false}!sass-loader!../../../node_modules/vue-loader/lib/selector?type=styles&index=0!./react_button.vue\")\n}\n/* script */\nexport * from \"!!babel-loader!./react_button.js\"\nimport __vue_script__ from \"!!babel-loader!./react_button.js\"/* template */\nimport {render as __vue_render__, staticRenderFns as __vue_static_render_fns__} from \"!!../../../node_modules/vue-loader/lib/template-compiler/index?{\\\"id\\\":\\\"data-v-185f65eb\\\",\\\"hasScoped\\\":false,\\\"optionsId\\\":\\\"0\\\",\\\"buble\\\":{\\\"transforms\\\":{}}}!../../../node_modules/vue-loader/lib/selector?type=template&index=0!./react_button.vue\"\n/* template functional */\nvar __vue_template_functional__ = false\n/* styles */\nvar __vue_styles__ = injectStyle\n/* scopeId */\nvar __vue_scopeId__ = null\n/* moduleIdentifier (server only) */\nvar __vue_module_identifier__ = null\nimport normalizeComponent from \"!../../../node_modules/vue-loader/lib/runtime/component-normalizer\"\nvar Component = normalizeComponent(\n __vue_script__,\n __vue_render__,\n __vue_static_render_fns__,\n __vue_template_functional__,\n __vue_styles__,\n __vue_scopeId__,\n __vue_module_identifier__\n)\n\nexport default Component.exports\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('Popover',{staticClass:\"react-button-popover\",attrs:{\"trigger\":\"click\",\"placement\":\"top\",\"offset\":{ y: 5 }},scopedSlots:_vm._u([{key:\"content\",fn:function(ref){\nvar close = ref.close;\nreturn _c('div',{},[_c('div',{staticClass:\"reaction-picker-filter\"},[_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.filterWord),expression:\"filterWord\"}],attrs:{\"placeholder\":_vm.$t('emoji.search_emoji')},domProps:{\"value\":(_vm.filterWord)},on:{\"input\":function($event){if($event.target.composing){ return; }_vm.filterWord=$event.target.value}}})]),_vm._v(\" \"),_c('div',{staticClass:\"reaction-picker\"},[_vm._l((_vm.commonEmojis),function(emoji){return _c('span',{key:emoji,staticClass:\"emoji-button\",on:{\"click\":function($event){return _vm.addReaction($event, emoji, close)}}},[_vm._v(\"\\n \"+_vm._s(emoji)+\"\\n \")])}),_vm._v(\" \"),_c('div',{staticClass:\"reaction-picker-divider\"}),_vm._v(\" \"),_vm._l((_vm.emojis),function(emoji,key){return _c('span',{key:key,staticClass:\"emoji-button\",on:{\"click\":function($event){return _vm.addReaction($event, emoji.replacement, close)}}},[_vm._v(\"\\n \"+_vm._s(emoji.replacement)+\"\\n \")])}),_vm._v(\" \"),_c('div',{staticClass:\"reaction-bottom-fader\"})],2)])}}])},[_vm._v(\" \"),_c('i',{staticClass:\"icon-smile button-icon add-reaction-button\",attrs:{\"slot\":\"trigger\",\"title\":_vm.$t('tool_tip.add_reaction')},slot:\"trigger\"})])}\nvar staticRenderFns = []\nexport { render, staticRenderFns }","import { mapGetters } from 'vuex'\n\nconst RetweetButton = {\n props: ['status', 'loggedIn', 'visibility'],\n data () {\n return {\n animated: false\n }\n },\n methods: {\n retweet () {\n if (!this.status.repeated) {\n this.$store.dispatch('retweet', { id: this.status.id })\n } else {\n this.$store.dispatch('unretweet', { id: this.status.id })\n }\n this.animated = true\n setTimeout(() => {\n this.animated = false\n }, 500)\n }\n },\n computed: {\n classes () {\n return {\n 'retweeted': this.status.repeated,\n 'retweeted-empty': !this.status.repeated,\n 'animate-spin': this.animated\n }\n },\n ...mapGetters(['mergedConfig'])\n }\n}\n\nexport default RetweetButton\n","function injectStyle (context) {\n require(\"!!vue-style-loader!css-loader?minimize!../../../node_modules/vue-loader/lib/style-compiler/index?{\\\"optionsId\\\":\\\"0\\\",\\\"vue\\\":true,\\\"scoped\\\":false,\\\"sourceMap\\\":false}!sass-loader!../../../node_modules/vue-loader/lib/selector?type=styles&index=0!./retweet_button.vue\")\n}\n/* script */\nexport * from \"!!babel-loader!./retweet_button.js\"\nimport __vue_script__ from \"!!babel-loader!./retweet_button.js\"/* template */\nimport {render as __vue_render__, staticRenderFns as __vue_static_render_fns__} from \"!!../../../node_modules/vue-loader/lib/template-compiler/index?{\\\"id\\\":\\\"data-v-538410cc\\\",\\\"hasScoped\\\":false,\\\"optionsId\\\":\\\"0\\\",\\\"buble\\\":{\\\"transforms\\\":{}}}!../../../node_modules/vue-loader/lib/selector?type=template&index=0!./retweet_button.vue\"\n/* template functional */\nvar __vue_template_functional__ = false\n/* styles */\nvar __vue_styles__ = injectStyle\n/* scopeId */\nvar __vue_scopeId__ = null\n/* moduleIdentifier (server only) */\nvar __vue_module_identifier__ = null\nimport normalizeComponent from \"!../../../node_modules/vue-loader/lib/runtime/component-normalizer\"\nvar Component = normalizeComponent(\n __vue_script__,\n __vue_render__,\n __vue_static_render_fns__,\n __vue_template_functional__,\n __vue_styles__,\n __vue_scopeId__,\n __vue_module_identifier__\n)\n\nexport default Component.exports\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return (_vm.loggedIn)?_c('div',[(_vm.visibility !== 'private' && _vm.visibility !== 'direct')?[_c('i',{staticClass:\"button-icon retweet-button icon-retweet rt-active\",class:_vm.classes,attrs:{\"title\":_vm.$t('tool_tip.repeat')},on:{\"click\":function($event){$event.preventDefault();return _vm.retweet()}}}),_vm._v(\" \"),(!_vm.mergedConfig.hidePostStats && _vm.status.repeat_num > 0)?_c('span',[_vm._v(_vm._s(_vm.status.repeat_num))]):_vm._e()]:[_c('i',{staticClass:\"button-icon icon-lock\",class:_vm.classes,attrs:{\"title\":_vm.$t('timeline.no_retweet_hint')}})]],2):(!_vm.loggedIn)?_c('div',[_c('i',{staticClass:\"button-icon icon-retweet\",class:_vm.classes,attrs:{\"title\":_vm.$t('tool_tip.repeat')}}),_vm._v(\" \"),(!_vm.mergedConfig.hidePostStats && _vm.status.repeat_num > 0)?_c('span',[_vm._v(_vm._s(_vm.status.repeat_num))]):_vm._e()]):_vm._e()}\nvar staticRenderFns = []\nexport { render, staticRenderFns }","import Popover from '../popover/popover.vue'\n\nconst ExtraButtons = {\n props: [ 'status' ],\n components: { Popover },\n methods: {\n deleteStatus () {\n const confirmed = window.confirm(this.$t('status.delete_confirm'))\n if (confirmed) {\n this.$store.dispatch('deleteStatus', { id: this.status.id })\n }\n },\n pinStatus () {\n this.$store.dispatch('pinStatus', this.status.id)\n .then(() => this.$emit('onSuccess'))\n .catch(err => this.$emit('onError', err.error.error))\n },\n unpinStatus () {\n this.$store.dispatch('unpinStatus', this.status.id)\n .then(() => this.$emit('onSuccess'))\n .catch(err => this.$emit('onError', err.error.error))\n },\n muteConversation () {\n this.$store.dispatch('muteConversation', this.status.id)\n .then(() => this.$emit('onSuccess'))\n .catch(err => this.$emit('onError', err.error.error))\n },\n unmuteConversation () {\n this.$store.dispatch('unmuteConversation', this.status.id)\n .then(() => this.$emit('onSuccess'))\n .catch(err => this.$emit('onError', err.error.error))\n },\n copyLink () {\n navigator.clipboard.writeText(this.statusLink)\n .then(() => this.$emit('onSuccess'))\n .catch(err => this.$emit('onError', err.error.error))\n },\n bookmarkStatus () {\n this.$store.dispatch('bookmark', { id: this.status.id })\n .then(() => this.$emit('onSuccess'))\n .catch(err => this.$emit('onError', err.error.error))\n },\n unbookmarkStatus () {\n this.$store.dispatch('unbookmark', { id: this.status.id })\n .then(() => this.$emit('onSuccess'))\n .catch(err => this.$emit('onError', err.error.error))\n }\n },\n computed: {\n currentUser () { return this.$store.state.users.currentUser },\n canDelete () {\n if (!this.currentUser) { return }\n const superuser = this.currentUser.rights.moderator || this.currentUser.rights.admin\n return superuser || this.status.user.id === this.currentUser.id\n },\n ownStatus () {\n return this.status.user.id === this.currentUser.id\n },\n canPin () {\n return this.ownStatus && (this.status.visibility === 'public' || this.status.visibility === 'unlisted')\n },\n canMute () {\n return !!this.currentUser\n },\n statusLink () {\n return `${this.$store.state.instance.server}${this.$router.resolve({ name: 'conversation', params: { id: this.status.id } }).href}`\n }\n }\n}\n\nexport default ExtraButtons\n","function injectStyle (context) {\n require(\"!!vue-style-loader!css-loader?minimize!../../../node_modules/vue-loader/lib/style-compiler/index?{\\\"optionsId\\\":\\\"0\\\",\\\"vue\\\":true,\\\"scoped\\\":false,\\\"sourceMap\\\":false}!sass-loader!../../../node_modules/vue-loader/lib/selector?type=styles&index=0!./extra_buttons.vue\")\n}\n/* script */\nexport * from \"!!babel-loader!./extra_buttons.js\"\nimport __vue_script__ from \"!!babel-loader!./extra_buttons.js\"/* template */\nimport {render as __vue_render__, staticRenderFns as __vue_static_render_fns__} from \"!!../../../node_modules/vue-loader/lib/template-compiler/index?{\\\"id\\\":\\\"data-v-2d820a60\\\",\\\"hasScoped\\\":false,\\\"optionsId\\\":\\\"0\\\",\\\"buble\\\":{\\\"transforms\\\":{}}}!../../../node_modules/vue-loader/lib/selector?type=template&index=0!./extra_buttons.vue\"\n/* template functional */\nvar __vue_template_functional__ = false\n/* styles */\nvar __vue_styles__ = injectStyle\n/* scopeId */\nvar __vue_scopeId__ = null\n/* moduleIdentifier (server only) */\nvar __vue_module_identifier__ = null\nimport normalizeComponent from \"!../../../node_modules/vue-loader/lib/runtime/component-normalizer\"\nvar Component = normalizeComponent(\n __vue_script__,\n __vue_render__,\n __vue_static_render_fns__,\n __vue_template_functional__,\n __vue_styles__,\n __vue_scopeId__,\n __vue_module_identifier__\n)\n\nexport default Component.exports\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('Popover',{staticClass:\"extra-button-popover\",attrs:{\"trigger\":\"click\",\"placement\":\"top\",\"bound-to\":{ x: 'container' }},scopedSlots:_vm._u([{key:\"content\",fn:function(ref){\nvar close = ref.close;\nreturn _c('div',{},[_c('div',{staticClass:\"dropdown-menu\"},[(_vm.canMute && !_vm.status.thread_muted)?_c('button',{staticClass:\"dropdown-item dropdown-item-icon\",on:{\"click\":function($event){$event.preventDefault();return _vm.muteConversation($event)}}},[_c('i',{staticClass:\"icon-eye-off\"}),_c('span',[_vm._v(_vm._s(_vm.$t(\"status.mute_conversation\")))])]):_vm._e(),_vm._v(\" \"),(_vm.canMute && _vm.status.thread_muted)?_c('button',{staticClass:\"dropdown-item dropdown-item-icon\",on:{\"click\":function($event){$event.preventDefault();return _vm.unmuteConversation($event)}}},[_c('i',{staticClass:\"icon-eye-off\"}),_c('span',[_vm._v(_vm._s(_vm.$t(\"status.unmute_conversation\")))])]):_vm._e(),_vm._v(\" \"),(!_vm.status.pinned && _vm.canPin)?_c('button',{staticClass:\"dropdown-item dropdown-item-icon\",on:{\"click\":[function($event){$event.preventDefault();return _vm.pinStatus($event)},close]}},[_c('i',{staticClass:\"icon-pin\"}),_c('span',[_vm._v(_vm._s(_vm.$t(\"status.pin\")))])]):_vm._e(),_vm._v(\" \"),(_vm.status.pinned && _vm.canPin)?_c('button',{staticClass:\"dropdown-item dropdown-item-icon\",on:{\"click\":[function($event){$event.preventDefault();return _vm.unpinStatus($event)},close]}},[_c('i',{staticClass:\"icon-pin\"}),_c('span',[_vm._v(_vm._s(_vm.$t(\"status.unpin\")))])]):_vm._e(),_vm._v(\" \"),(!_vm.status.bookmarked)?_c('button',{staticClass:\"dropdown-item dropdown-item-icon\",on:{\"click\":[function($event){$event.preventDefault();return _vm.bookmarkStatus($event)},close]}},[_c('i',{staticClass:\"icon-bookmark-empty\"}),_c('span',[_vm._v(_vm._s(_vm.$t(\"status.bookmark\")))])]):_vm._e(),_vm._v(\" \"),(_vm.status.bookmarked)?_c('button',{staticClass:\"dropdown-item dropdown-item-icon\",on:{\"click\":[function($event){$event.preventDefault();return _vm.unbookmarkStatus($event)},close]}},[_c('i',{staticClass:\"icon-bookmark\"}),_c('span',[_vm._v(_vm._s(_vm.$t(\"status.unbookmark\")))])]):_vm._e(),_vm._v(\" \"),(_vm.canDelete)?_c('button',{staticClass:\"dropdown-item dropdown-item-icon\",on:{\"click\":[function($event){$event.preventDefault();return _vm.deleteStatus($event)},close]}},[_c('i',{staticClass:\"icon-cancel\"}),_c('span',[_vm._v(_vm._s(_vm.$t(\"status.delete\")))])]):_vm._e(),_vm._v(\" \"),_c('button',{staticClass:\"dropdown-item dropdown-item-icon\",on:{\"click\":[function($event){$event.preventDefault();return _vm.copyLink($event)},close]}},[_c('i',{staticClass:\"icon-share\"}),_c('span',[_vm._v(_vm._s(_vm.$t(\"status.copy_link\")))])])])])}}])},[_vm._v(\" \"),_c('i',{staticClass:\"icon-ellipsis button-icon\",attrs:{\"slot\":\"trigger\"},slot:\"trigger\"})])}\nvar staticRenderFns = []\nexport { render, staticRenderFns }","import { find } from 'lodash'\n\nconst StatusPopover = {\n name: 'StatusPopover',\n props: [\n 'statusId'\n ],\n data () {\n return {\n error: false\n }\n },\n computed: {\n status () {\n return find(this.$store.state.statuses.allStatuses, { id: this.statusId })\n }\n },\n components: {\n Status: () => import('../status/status.vue'),\n Popover: () => import('../popover/popover.vue')\n },\n methods: {\n enter () {\n if (!this.status) {\n if (!this.statusId) {\n this.error = true\n return\n }\n this.$store.dispatch('fetchStatus', this.statusId)\n .then(data => (this.error = false))\n .catch(e => (this.error = true))\n }\n }\n }\n}\n\nexport default StatusPopover\n","function injectStyle (context) {\n require(\"!!vue-style-loader!css-loader?minimize!../../../node_modules/vue-loader/lib/style-compiler/index?{\\\"optionsId\\\":\\\"0\\\",\\\"vue\\\":true,\\\"scoped\\\":false,\\\"sourceMap\\\":false}!sass-loader!../../../node_modules/vue-loader/lib/selector?type=styles&index=0!./status_popover.vue\")\n}\n/* script */\nexport * from \"!!babel-loader!./status_popover.js\"\nimport __vue_script__ from \"!!babel-loader!./status_popover.js\"/* template */\nimport {render as __vue_render__, staticRenderFns as __vue_static_render_fns__} from \"!!../../../node_modules/vue-loader/lib/template-compiler/index?{\\\"id\\\":\\\"data-v-1ce08f47\\\",\\\"hasScoped\\\":false,\\\"optionsId\\\":\\\"0\\\",\\\"buble\\\":{\\\"transforms\\\":{}}}!../../../node_modules/vue-loader/lib/selector?type=template&index=0!./status_popover.vue\"\n/* template functional */\nvar __vue_template_functional__ = false\n/* styles */\nvar __vue_styles__ = injectStyle\n/* scopeId */\nvar __vue_scopeId__ = null\n/* moduleIdentifier (server only) */\nvar __vue_module_identifier__ = null\nimport normalizeComponent from \"!../../../node_modules/vue-loader/lib/runtime/component-normalizer\"\nvar Component = normalizeComponent(\n __vue_script__,\n __vue_render__,\n __vue_static_render_fns__,\n __vue_template_functional__,\n __vue_styles__,\n __vue_scopeId__,\n __vue_module_identifier__\n)\n\nexport default Component.exports\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('Popover',{attrs:{\"trigger\":\"hover\",\"popover-class\":\"popover-default status-popover\",\"bound-to\":{ x: 'container' }},on:{\"show\":_vm.enter}},[_c('template',{slot:\"trigger\"},[_vm._t(\"default\")],2),_vm._v(\" \"),_c('div',{attrs:{\"slot\":\"content\"},slot:\"content\"},[(_vm.status)?_c('Status',{attrs:{\"is-preview\":true,\"statusoid\":_vm.status,\"compact\":true}}):(_vm.error)?_c('div',{staticClass:\"status-preview-no-content faint\"},[_vm._v(\"\\n \"+_vm._s(_vm.$t('status.status_unavailable'))+\"\\n \")]):_c('div',{staticClass:\"status-preview-no-content\"},[_c('i',{staticClass:\"icon-spin4 animate-spin\"})])],1)],2)}\nvar staticRenderFns = []\nexport { render, staticRenderFns }","\nconst UserListPopover = {\n name: 'UserListPopover',\n props: [\n 'users'\n ],\n components: {\n Popover: () => import('../popover/popover.vue'),\n UserAvatar: () => import('../user_avatar/user_avatar.vue')\n },\n computed: {\n usersCapped () {\n return this.users.slice(0, 16)\n }\n }\n}\n\nexport default UserListPopover\n","function injectStyle (context) {\n require(\"!!vue-style-loader!css-loader?minimize!../../../node_modules/vue-loader/lib/style-compiler/index?{\\\"optionsId\\\":\\\"0\\\",\\\"vue\\\":true,\\\"scoped\\\":false,\\\"sourceMap\\\":false}!sass-loader!../../../node_modules/vue-loader/lib/selector?type=styles&index=0!./user_list_popover.vue\")\n}\n/* script */\nexport * from \"!!babel-loader!./user_list_popover.js\"\nimport __vue_script__ from \"!!babel-loader!./user_list_popover.js\"/* template */\nimport {render as __vue_render__, staticRenderFns as __vue_static_render_fns__} from \"!!../../../node_modules/vue-loader/lib/template-compiler/index?{\\\"id\\\":\\\"data-v-3dc4669d\\\",\\\"hasScoped\\\":false,\\\"optionsId\\\":\\\"0\\\",\\\"buble\\\":{\\\"transforms\\\":{}}}!../../../node_modules/vue-loader/lib/selector?type=template&index=0!./user_list_popover.vue\"\n/* template functional */\nvar __vue_template_functional__ = false\n/* styles */\nvar __vue_styles__ = injectStyle\n/* scopeId */\nvar __vue_scopeId__ = null\n/* moduleIdentifier (server only) */\nvar __vue_module_identifier__ = null\nimport normalizeComponent from \"!../../../node_modules/vue-loader/lib/runtime/component-normalizer\"\nvar Component = normalizeComponent(\n __vue_script__,\n __vue_render__,\n __vue_static_render_fns__,\n __vue_template_functional__,\n __vue_styles__,\n __vue_scopeId__,\n __vue_module_identifier__\n)\n\nexport default Component.exports\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('Popover',{attrs:{\"trigger\":\"hover\",\"placement\":\"top\",\"offset\":{ y: 5 }}},[_c('template',{slot:\"trigger\"},[_vm._t(\"default\")],2),_vm._v(\" \"),_c('div',{staticClass:\"user-list-popover\",attrs:{\"slot\":\"content\"},slot:\"content\"},[(_vm.users.length)?_c('div',_vm._l((_vm.usersCapped),function(user){return _c('div',{key:user.id,staticClass:\"user-list-row\"},[_c('UserAvatar',{staticClass:\"avatar-small\",attrs:{\"user\":user,\"compact\":true}}),_vm._v(\" \"),_c('div',{staticClass:\"user-list-names\"},[_c('span',{domProps:{\"innerHTML\":_vm._s(user.name_html)}}),_vm._v(\" \"),_c('span',{staticClass:\"user-list-screen-name\"},[_vm._v(_vm._s(user.screen_name))])])],1)}),0):_c('div',[_c('i',{staticClass:\"icon-spin4 animate-spin\"})])])],2)}\nvar staticRenderFns = []\nexport { render, staticRenderFns }","import UserAvatar from '../user_avatar/user_avatar.vue'\nimport UserListPopover from '../user_list_popover/user_list_popover.vue'\n\nconst EMOJI_REACTION_COUNT_CUTOFF = 12\n\nconst EmojiReactions = {\n name: 'EmojiReactions',\n components: {\n UserAvatar,\n UserListPopover\n },\n props: ['status'],\n data: () => ({\n showAll: false\n }),\n computed: {\n tooManyReactions () {\n return this.status.emoji_reactions.length > EMOJI_REACTION_COUNT_CUTOFF\n },\n emojiReactions () {\n return this.showAll\n ? this.status.emoji_reactions\n : this.status.emoji_reactions.slice(0, EMOJI_REACTION_COUNT_CUTOFF)\n },\n showMoreString () {\n return `+${this.status.emoji_reactions.length - EMOJI_REACTION_COUNT_CUTOFF}`\n },\n accountsForEmoji () {\n return this.status.emoji_reactions.reduce((acc, reaction) => {\n acc[reaction.name] = reaction.accounts || []\n return acc\n }, {})\n },\n loggedIn () {\n return !!this.$store.state.users.currentUser\n }\n },\n methods: {\n toggleShowAll () {\n this.showAll = !this.showAll\n },\n reactedWith (emoji) {\n return this.status.emoji_reactions.find(r => r.name === emoji).me\n },\n fetchEmojiReactionsByIfMissing () {\n const hasNoAccounts = this.status.emoji_reactions.find(r => !r.accounts)\n if (hasNoAccounts) {\n this.$store.dispatch('fetchEmojiReactionsBy', this.status.id)\n }\n },\n reactWith (emoji) {\n this.$store.dispatch('reactWithEmoji', { id: this.status.id, emoji })\n },\n unreact (emoji) {\n this.$store.dispatch('unreactWithEmoji', { id: this.status.id, emoji })\n },\n emojiOnClick (emoji, event) {\n if (!this.loggedIn) return\n\n if (this.reactedWith(emoji)) {\n this.unreact(emoji)\n } else {\n this.reactWith(emoji)\n }\n }\n }\n}\n\nexport default EmojiReactions\n","function injectStyle (context) {\n require(\"!!vue-style-loader!css-loader?minimize!../../../node_modules/vue-loader/lib/style-compiler/index?{\\\"optionsId\\\":\\\"0\\\",\\\"vue\\\":true,\\\"scoped\\\":false,\\\"sourceMap\\\":false}!sass-loader!../../../node_modules/vue-loader/lib/selector?type=styles&index=0!./emoji_reactions.vue\")\n}\n/* script */\nexport * from \"!!babel-loader!./emoji_reactions.js\"\nimport __vue_script__ from \"!!babel-loader!./emoji_reactions.js\"/* template */\nimport {render as __vue_render__, staticRenderFns as __vue_static_render_fns__} from \"!!../../../node_modules/vue-loader/lib/template-compiler/index?{\\\"id\\\":\\\"data-v-342ef24c\\\",\\\"hasScoped\\\":false,\\\"optionsId\\\":\\\"0\\\",\\\"buble\\\":{\\\"transforms\\\":{}}}!../../../node_modules/vue-loader/lib/selector?type=template&index=0!./emoji_reactions.vue\"\n/* template functional */\nvar __vue_template_functional__ = false\n/* styles */\nvar __vue_styles__ = injectStyle\n/* scopeId */\nvar __vue_scopeId__ = null\n/* moduleIdentifier (server only) */\nvar __vue_module_identifier__ = null\nimport normalizeComponent from \"!../../../node_modules/vue-loader/lib/runtime/component-normalizer\"\nvar Component = normalizeComponent(\n __vue_script__,\n __vue_render__,\n __vue_static_render_fns__,\n __vue_template_functional__,\n __vue_styles__,\n __vue_scopeId__,\n __vue_module_identifier__\n)\n\nexport default Component.exports\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"emoji-reactions\"},[_vm._l((_vm.emojiReactions),function(reaction){return _c('UserListPopover',{key:reaction.name,attrs:{\"users\":_vm.accountsForEmoji[reaction.name]}},[_c('button',{staticClass:\"emoji-reaction btn btn-default\",class:{ 'picked-reaction': _vm.reactedWith(reaction.name), 'not-clickable': !_vm.loggedIn },on:{\"click\":function($event){return _vm.emojiOnClick(reaction.name, $event)},\"mouseenter\":function($event){return _vm.fetchEmojiReactionsByIfMissing()}}},[_c('span',{staticClass:\"reaction-emoji\"},[_vm._v(_vm._s(reaction.name))]),_vm._v(\" \"),_c('span',[_vm._v(_vm._s(reaction.count))])])])}),_vm._v(\" \"),(_vm.tooManyReactions)?_c('a',{staticClass:\"emoji-reaction-expand faint\",attrs:{\"href\":\"javascript:void(0)\"},on:{\"click\":_vm.toggleShowAll}},[_vm._v(\"\\n \"+_vm._s(_vm.showAll ? _vm.$t('general.show_less') : _vm.showMoreString)+\"\\n \")]):_vm._e()],2)}\nvar staticRenderFns = []\nexport { render, staticRenderFns }","import FavoriteButton from '../favorite_button/favorite_button.vue'\nimport ReactButton from '../react_button/react_button.vue'\nimport RetweetButton from '../retweet_button/retweet_button.vue'\nimport ExtraButtons from '../extra_buttons/extra_buttons.vue'\nimport PostStatusForm from '../post_status_form/post_status_form.vue'\nimport UserCard from '../user_card/user_card.vue'\nimport UserAvatar from '../user_avatar/user_avatar.vue'\nimport AvatarList from '../avatar_list/avatar_list.vue'\nimport Timeago from '../timeago/timeago.vue'\nimport StatusContent from '../status_content/status_content.vue'\nimport StatusPopover from '../status_popover/status_popover.vue'\nimport UserListPopover from '../user_list_popover/user_list_popover.vue'\nimport EmojiReactions from '../emoji_reactions/emoji_reactions.vue'\nimport generateProfileLink from 'src/services/user_profile_link_generator/user_profile_link_generator'\nimport { highlightClass, highlightStyle } from '../../services/user_highlighter/user_highlighter.js'\nimport { muteWordHits } from '../../services/status_parser/status_parser.js'\nimport { unescape, uniqBy } from 'lodash'\nimport { mapGetters, mapState } from 'vuex'\n\nconst Status = {\n name: 'Status',\n components: {\n FavoriteButton,\n ReactButton,\n RetweetButton,\n ExtraButtons,\n PostStatusForm,\n UserCard,\n UserAvatar,\n AvatarList,\n Timeago,\n StatusPopover,\n UserListPopover,\n EmojiReactions,\n StatusContent\n },\n props: [\n 'statusoid',\n 'expandable',\n 'inConversation',\n 'focused',\n 'highlight',\n 'compact',\n 'replies',\n 'isPreview',\n 'noHeading',\n 'inlineExpanded',\n 'showPinned',\n 'inProfile',\n 'profileUserId'\n ],\n data () {\n return {\n replying: false,\n unmuted: false,\n userExpanded: false,\n error: null\n }\n },\n computed: {\n muteWords () {\n return this.mergedConfig.muteWords\n },\n showReasonMutedThread () {\n return (\n this.status.thread_muted ||\n (this.status.reblog && this.status.reblog.thread_muted)\n ) && !this.inConversation\n },\n repeaterClass () {\n const user = this.statusoid.user\n return highlightClass(user)\n },\n userClass () {\n const user = this.retweet ? (this.statusoid.retweeted_status.user) : this.statusoid.user\n return highlightClass(user)\n },\n deleted () {\n return this.statusoid.deleted\n },\n repeaterStyle () {\n const user = this.statusoid.user\n const highlight = this.mergedConfig.highlight\n return highlightStyle(highlight[user.screen_name])\n },\n userStyle () {\n if (this.noHeading) return\n const user = this.retweet ? (this.statusoid.retweeted_status.user) : this.statusoid.user\n const highlight = this.mergedConfig.highlight\n return highlightStyle(highlight[user.screen_name])\n },\n userProfileLink () {\n return this.generateUserProfileLink(this.status.user.id, this.status.user.screen_name)\n },\n replyProfileLink () {\n if (this.isReply) {\n return this.generateUserProfileLink(this.status.in_reply_to_user_id, this.replyToName)\n }\n },\n retweet () { return !!this.statusoid.retweeted_status },\n retweeter () { return this.statusoid.user.name || this.statusoid.user.screen_name },\n retweeterHtml () { return this.statusoid.user.name_html },\n retweeterProfileLink () { return this.generateUserProfileLink(this.statusoid.user.id, this.statusoid.user.screen_name) },\n status () {\n if (this.retweet) {\n return this.statusoid.retweeted_status\n } else {\n return this.statusoid\n }\n },\n statusFromGlobalRepository () {\n // NOTE: Consider to replace status with statusFromGlobalRepository\n return this.$store.state.statuses.allStatusesObject[this.status.id]\n },\n loggedIn () {\n return !!this.currentUser\n },\n muteWordHits () {\n return muteWordHits(this.status, this.muteWords)\n },\n muted () {\n const { status } = this\n const { reblog } = status\n const relationship = this.$store.getters.relationship(status.user.id)\n const relationshipReblog = reblog && this.$store.getters.relationship(reblog.user.id)\n const reasonsToMute = (\n // Post is muted according to BE\n status.muted ||\n // Reprööt of a muted post according to BE\n (reblog && reblog.muted) ||\n // Muted user\n relationship.muting ||\n // Muted user of a reprööt\n (relationshipReblog && relationshipReblog.muting) ||\n // Thread is muted\n status.thread_muted ||\n // Wordfiltered\n this.muteWordHits.length > 0\n )\n const excusesNotToMute = (\n (\n this.inProfile && (\n // Don't mute user's posts on user timeline (except reblogs)\n (!reblog && status.user.id === this.profileUserId) ||\n // Same as above but also allow self-reblogs\n (reblog && reblog.user.id === this.profileUserId)\n )\n ) ||\n // Don't mute statuses in muted conversation when said conversation is opened\n (this.inConversation && status.thread_muted)\n // No excuses if post has muted words\n ) && !this.muteWordHits.length > 0\n\n return !this.unmuted && !excusesNotToMute && reasonsToMute\n },\n hideFilteredStatuses () {\n return this.mergedConfig.hideFilteredStatuses\n },\n hideStatus () {\n return this.deleted || (this.muted && this.hideFilteredStatuses)\n },\n isFocused () {\n // retweet or root of an expanded conversation\n if (this.focused) {\n return true\n } else if (!this.inConversation) {\n return false\n }\n // use conversation highlight only when in conversation\n return this.status.id === this.highlight\n },\n isReply () {\n return !!(this.status.in_reply_to_status_id && this.status.in_reply_to_user_id)\n },\n replyToName () {\n if (this.status.in_reply_to_screen_name) {\n return this.status.in_reply_to_screen_name\n } else {\n const user = this.$store.getters.findUser(this.status.in_reply_to_user_id)\n return user && user.screen_name\n }\n },\n replySubject () {\n if (!this.status.summary) return ''\n const decodedSummary = unescape(this.status.summary)\n const behavior = this.mergedConfig.subjectLineBehavior\n const startsWithRe = decodedSummary.match(/^re[: ]/i)\n if ((behavior !== 'noop' && startsWithRe) || behavior === 'masto') {\n return decodedSummary\n } else if (behavior === 'email') {\n return 're: '.concat(decodedSummary)\n } else if (behavior === 'noop') {\n return ''\n }\n },\n combinedFavsAndRepeatsUsers () {\n // Use the status from the global status repository since favs and repeats are saved in it\n const combinedUsers = [].concat(\n this.statusFromGlobalRepository.favoritedBy,\n this.statusFromGlobalRepository.rebloggedBy\n )\n return uniqBy(combinedUsers, 'id')\n },\n tags () {\n return this.status.tags.filter(tagObj => tagObj.hasOwnProperty('name')).map(tagObj => tagObj.name).join(' ')\n },\n hidePostStats () {\n return this.mergedConfig.hidePostStats\n },\n ...mapGetters(['mergedConfig']),\n ...mapState({\n betterShadow: state => state.interface.browserSupport.cssFilter,\n currentUser: state => state.users.currentUser\n })\n },\n methods: {\n visibilityIcon (visibility) {\n switch (visibility) {\n case 'private':\n return 'icon-lock'\n case 'unlisted':\n return 'icon-lock-open-alt'\n case 'direct':\n return 'icon-mail-alt'\n default:\n return 'icon-globe'\n }\n },\n showError (error) {\n this.error = error\n },\n clearError () {\n this.error = undefined\n },\n toggleReplying () {\n this.replying = !this.replying\n },\n gotoOriginal (id) {\n if (this.inConversation) {\n this.$emit('goto', id)\n }\n },\n toggleExpanded () {\n this.$emit('toggleExpanded')\n },\n toggleMute () {\n this.unmuted = !this.unmuted\n },\n toggleUserExpanded () {\n this.userExpanded = !this.userExpanded\n },\n generateUserProfileLink (id, name) {\n return generateProfileLink(id, name, this.$store.state.instance.restrictedNicknames)\n }\n },\n watch: {\n 'highlight': function (id) {\n if (this.status.id === id) {\n let rect = this.$el.getBoundingClientRect()\n if (rect.top < 100) {\n // Post is above screen, match its top to screen top\n window.scrollBy(0, rect.top - 100)\n } else if (rect.height >= (window.innerHeight - 50)) {\n // Post we want to see is taller than screen so match its top to screen top\n window.scrollBy(0, rect.top - 100)\n } else if (rect.bottom > window.innerHeight - 50) {\n // Post is below screen, match its bottom to screen bottom\n window.scrollBy(0, rect.bottom - window.innerHeight + 50)\n }\n }\n },\n 'status.repeat_num': function (num) {\n // refetch repeats when repeat_num is changed in any way\n if (this.isFocused && this.statusFromGlobalRepository.rebloggedBy && this.statusFromGlobalRepository.rebloggedBy.length !== num) {\n this.$store.dispatch('fetchRepeats', this.status.id)\n }\n },\n 'status.fave_num': function (num) {\n // refetch favs when fave_num is changed in any way\n if (this.isFocused && this.statusFromGlobalRepository.favoritedBy && this.statusFromGlobalRepository.favoritedBy.length !== num) {\n this.$store.dispatch('fetchFavs', this.status.id)\n }\n }\n },\n filters: {\n capitalize: function (str) {\n return str.charAt(0).toUpperCase() + str.slice(1)\n }\n }\n}\n\nexport default Status\n","function injectStyle (context) {\n require(\"!!vue-style-loader!css-loader?minimize!../../../node_modules/vue-loader/lib/style-compiler/index?{\\\"optionsId\\\":\\\"0\\\",\\\"vue\\\":true,\\\"scoped\\\":false,\\\"sourceMap\\\":false}!sass-loader!./status.scss\")\n}\n/* script */\nexport * from \"!!babel-loader!./status.js\"\nimport __vue_script__ from \"!!babel-loader!./status.js\"/* template */\nimport {render as __vue_render__, staticRenderFns as __vue_static_render_fns__} from \"!!../../../node_modules/vue-loader/lib/template-compiler/index?{\\\"id\\\":\\\"data-v-1b1157fc\\\",\\\"hasScoped\\\":false,\\\"optionsId\\\":\\\"0\\\",\\\"buble\\\":{\\\"transforms\\\":{}}}!../../../node_modules/vue-loader/lib/selector?type=template&index=0!./status.vue\"\n/* template functional */\nvar __vue_template_functional__ = false\n/* styles */\nvar __vue_styles__ = injectStyle\n/* scopeId */\nvar __vue_scopeId__ = null\n/* moduleIdentifier (server only) */\nvar __vue_module_identifier__ = null\nimport normalizeComponent from \"!../../../node_modules/vue-loader/lib/runtime/component-normalizer\"\nvar Component = normalizeComponent(\n __vue_script__,\n __vue_render__,\n __vue_static_render_fns__,\n __vue_template_functional__,\n __vue_styles__,\n __vue_scopeId__,\n __vue_module_identifier__\n)\n\nexport default Component.exports\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return (!_vm.hideStatus)?_c('div',{staticClass:\"Status\",class:[{ '-focused': _vm.isFocused }, { '-conversation': _vm.inlineExpanded }]},[(_vm.error)?_c('div',{staticClass:\"alert error\"},[_vm._v(\"\\n \"+_vm._s(_vm.error)+\"\\n \"),_c('i',{staticClass:\"button-icon icon-cancel\",on:{\"click\":_vm.clearError}})]):_vm._e(),_vm._v(\" \"),(_vm.muted && !_vm.isPreview)?[_c('div',{staticClass:\"status-csontainer muted\"},[_c('small',{staticClass:\"status-username\"},[(_vm.muted && _vm.retweet)?_c('i',{staticClass:\"button-icon icon-retweet\"}):_vm._e(),_vm._v(\" \"),_c('router-link',{attrs:{\"to\":_vm.userProfileLink}},[_vm._v(\"\\n \"+_vm._s(_vm.status.user.screen_name)+\"\\n \")])],1),_vm._v(\" \"),(_vm.showReasonMutedThread)?_c('small',{staticClass:\"mute-thread\"},[_vm._v(\"\\n \"+_vm._s(_vm.$t('status.thread_muted'))+\"\\n \")]):_vm._e(),_vm._v(\" \"),(_vm.showReasonMutedThread && _vm.muteWordHits.length > 0)?_c('small',{staticClass:\"mute-thread\"},[_vm._v(\"\\n \"+_vm._s(_vm.$t('status.thread_muted_and_words'))+\"\\n \")]):_vm._e(),_vm._v(\" \"),_c('small',{staticClass:\"mute-words\",attrs:{\"title\":_vm.muteWordHits.join(', ')}},[_vm._v(\"\\n \"+_vm._s(_vm.muteWordHits.join(', '))+\"\\n \")]),_vm._v(\" \"),_c('a',{staticClass:\"unmute\",attrs:{\"href\":\"#\"},on:{\"click\":function($event){$event.preventDefault();return _vm.toggleMute($event)}}},[_c('i',{staticClass:\"button-icon icon-eye-off\"})])])]:[(_vm.showPinned)?_c('div',{staticClass:\"pin\"},[_c('i',{staticClass:\"fa icon-pin faint\"}),_vm._v(\" \"),_c('span',{staticClass:\"faint\"},[_vm._v(_vm._s(_vm.$t('status.pinned')))])]):_vm._e(),_vm._v(\" \"),(_vm.retweet && !_vm.noHeading && !_vm.inConversation)?_c('div',{staticClass:\"status-container repeat-info\",class:[_vm.repeaterClass, { highlighted: _vm.repeaterStyle }],style:([_vm.repeaterStyle])},[(_vm.retweet)?_c('UserAvatar',{staticClass:\"left-side repeater-avatar\",attrs:{\"better-shadow\":_vm.betterShadow,\"user\":_vm.statusoid.user}}):_vm._e(),_vm._v(\" \"),_c('div',{staticClass:\"right-side faint\"},[_c('span',{staticClass:\"status-username repeater-name\",attrs:{\"title\":_vm.retweeter}},[(_vm.retweeterHtml)?_c('router-link',{attrs:{\"to\":_vm.retweeterProfileLink},domProps:{\"innerHTML\":_vm._s(_vm.retweeterHtml)}}):_c('router-link',{attrs:{\"to\":_vm.retweeterProfileLink}},[_vm._v(_vm._s(_vm.retweeter))])],1),_vm._v(\" \"),_c('i',{staticClass:\"fa icon-retweet retweeted\",attrs:{\"title\":_vm.$t('tool_tip.repeat')}}),_vm._v(\"\\n \"+_vm._s(_vm.$t('timeline.repeated'))+\"\\n \")])],1):_vm._e(),_vm._v(\" \"),_c('div',{staticClass:\"status-container\",class:[_vm.userClass, { highlighted: _vm.userStyle, '-repeat': _vm.retweet && !_vm.inConversation }],style:([ _vm.userStyle ]),attrs:{\"data-tags\":_vm.tags}},[(!_vm.noHeading)?_c('div',{staticClass:\"left-side\"},[_c('router-link',{attrs:{\"to\":_vm.userProfileLink},nativeOn:{\"!click\":function($event){$event.stopPropagation();$event.preventDefault();return _vm.toggleUserExpanded($event)}}},[_c('UserAvatar',{attrs:{\"compact\":_vm.compact,\"better-shadow\":_vm.betterShadow,\"user\":_vm.status.user}})],1)],1):_vm._e(),_vm._v(\" \"),_c('div',{staticClass:\"right-side\"},[(_vm.userExpanded)?_c('UserCard',{staticClass:\"usercard\",attrs:{\"user-id\":_vm.status.user.id,\"rounded\":true,\"bordered\":true}}):_vm._e(),_vm._v(\" \"),(!_vm.noHeading)?_c('div',{staticClass:\"status-heading\"},[_c('div',{staticClass:\"heading-name-row\"},[_c('div',{staticClass:\"heading-left\"},[(_vm.status.user.name_html)?_c('h4',{staticClass:\"status-username\",attrs:{\"title\":_vm.status.user.name},domProps:{\"innerHTML\":_vm._s(_vm.status.user.name_html)}}):_c('h4',{staticClass:\"status-username\",attrs:{\"title\":_vm.status.user.name}},[_vm._v(\"\\n \"+_vm._s(_vm.status.user.name)+\"\\n \")]),_vm._v(\" \"),_c('router-link',{staticClass:\"account-name\",attrs:{\"title\":_vm.status.user.screen_name,\"to\":_vm.userProfileLink}},[_vm._v(\"\\n \"+_vm._s(_vm.status.user.screen_name)+\"\\n \")]),_vm._v(\" \"),(!!(_vm.status.user && _vm.status.user.favicon))?_c('img',{staticClass:\"status-favicon\",attrs:{\"src\":_vm.status.user.favicon}}):_vm._e()],1),_vm._v(\" \"),_c('span',{staticClass:\"heading-right\"},[_c('router-link',{staticClass:\"timeago faint-link\",attrs:{\"to\":{ name: 'conversation', params: { id: _vm.status.id } }}},[_c('Timeago',{attrs:{\"time\":_vm.status.created_at,\"auto-update\":60}})],1),_vm._v(\" \"),(_vm.status.visibility)?_c('div',{staticClass:\"button-icon visibility-icon\"},[_c('i',{class:_vm.visibilityIcon(_vm.status.visibility),attrs:{\"title\":_vm._f(\"capitalize\")(_vm.status.visibility)}})]):_vm._e(),_vm._v(\" \"),(!_vm.status.is_local && !_vm.isPreview)?_c('a',{staticClass:\"source_url\",attrs:{\"href\":_vm.status.external_url,\"target\":\"_blank\",\"title\":\"Source\"}},[_c('i',{staticClass:\"button-icon icon-link-ext-alt\"})]):_vm._e(),_vm._v(\" \"),(_vm.expandable && !_vm.isPreview)?[_c('a',{attrs:{\"href\":\"#\",\"title\":\"Expand\"},on:{\"click\":function($event){$event.preventDefault();return _vm.toggleExpanded($event)}}},[_c('i',{staticClass:\"button-icon icon-plus-squared\"})])]:_vm._e(),_vm._v(\" \"),(_vm.unmuted)?_c('a',{attrs:{\"href\":\"#\"},on:{\"click\":function($event){$event.preventDefault();return _vm.toggleMute($event)}}},[_c('i',{staticClass:\"button-icon icon-eye-off\"})]):_vm._e()],2)]),_vm._v(\" \"),_c('div',{staticClass:\"heading-reply-row\"},[(_vm.isReply)?_c('div',{staticClass:\"reply-to-and-accountname\"},[(!_vm.isPreview)?_c('StatusPopover',{staticClass:\"reply-to-popover\",class:{ '-strikethrough': !_vm.status.parent_visible },staticStyle:{\"min-width\":\"0\"},attrs:{\"status-id\":_vm.status.parent_visible && _vm.status.in_reply_to_status_id}},[_c('a',{staticClass:\"reply-to\",attrs:{\"href\":\"#\",\"aria-label\":_vm.$t('tool_tip.reply')},on:{\"click\":function($event){$event.preventDefault();return _vm.gotoOriginal(_vm.status.in_reply_to_status_id)}}},[_c('i',{staticClass:\"button-icon reply-button icon-reply\"}),_vm._v(\" \"),_c('span',{staticClass:\"faint-link reply-to-text\"},[_vm._v(\"\\n \"+_vm._s(_vm.$t('status.reply_to'))+\"\\n \")])])]):_c('span',{staticClass:\"reply-to-no-popover\"},[_c('span',{staticClass:\"reply-to-text\"},[_vm._v(_vm._s(_vm.$t('status.reply_to')))])]),_vm._v(\" \"),_c('router-link',{staticClass:\"reply-to-link\",attrs:{\"title\":_vm.replyToName,\"to\":_vm.replyProfileLink}},[_vm._v(\"\\n \"+_vm._s(_vm.replyToName)+\"\\n \")]),_vm._v(\" \"),(_vm.replies && _vm.replies.length)?_c('span',{staticClass:\"faint replies-separator\"},[_vm._v(\"\\n -\\n \")]):_vm._e()],1):_vm._e(),_vm._v(\" \"),(_vm.inConversation && !_vm.isPreview && _vm.replies && _vm.replies.length)?_c('div',{staticClass:\"replies\"},[_c('span',{staticClass:\"faint\"},[_vm._v(_vm._s(_vm.$t('status.replies_list')))]),_vm._v(\" \"),_vm._l((_vm.replies),function(reply){return _c('StatusPopover',{key:reply.id,attrs:{\"status-id\":reply.id}},[_c('a',{staticClass:\"reply-link\",attrs:{\"href\":\"#\"},on:{\"click\":function($event){$event.preventDefault();return _vm.gotoOriginal(reply.id)}}},[_vm._v(_vm._s(reply.name))])])})],2):_vm._e()])]):_vm._e(),_vm._v(\" \"),_c('StatusContent',{attrs:{\"status\":_vm.status,\"no-heading\":_vm.noHeading,\"highlight\":_vm.highlight,\"focused\":_vm.isFocused}}),_vm._v(\" \"),_c('transition',{attrs:{\"name\":\"fade\"}},[(!_vm.hidePostStats && _vm.isFocused && _vm.combinedFavsAndRepeatsUsers.length > 0)?_c('div',{staticClass:\"favs-repeated-users\"},[_c('div',{staticClass:\"stats\"},[(_vm.statusFromGlobalRepository.rebloggedBy && _vm.statusFromGlobalRepository.rebloggedBy.length > 0)?_c('UserListPopover',{attrs:{\"users\":_vm.statusFromGlobalRepository.rebloggedBy}},[_c('div',{staticClass:\"stat-count\"},[_c('a',{staticClass:\"stat-title\"},[_vm._v(_vm._s(_vm.$t('status.repeats')))]),_vm._v(\" \"),_c('div',{staticClass:\"stat-number\"},[_vm._v(\"\\n \"+_vm._s(_vm.statusFromGlobalRepository.rebloggedBy.length)+\"\\n \")])])]):_vm._e(),_vm._v(\" \"),(_vm.statusFromGlobalRepository.favoritedBy && _vm.statusFromGlobalRepository.favoritedBy.length > 0)?_c('UserListPopover',{attrs:{\"users\":_vm.statusFromGlobalRepository.favoritedBy}},[_c('div',{staticClass:\"stat-count\"},[_c('a',{staticClass:\"stat-title\"},[_vm._v(_vm._s(_vm.$t('status.favorites')))]),_vm._v(\" \"),_c('div',{staticClass:\"stat-number\"},[_vm._v(\"\\n \"+_vm._s(_vm.statusFromGlobalRepository.favoritedBy.length)+\"\\n \")])])]):_vm._e(),_vm._v(\" \"),_c('div',{staticClass:\"avatar-row\"},[_c('AvatarList',{attrs:{\"users\":_vm.combinedFavsAndRepeatsUsers}})],1)],1)]):_vm._e()]),_vm._v(\" \"),((_vm.mergedConfig.emojiReactionsOnTimeline || _vm.isFocused) && (!_vm.noHeading && !_vm.isPreview))?_c('EmojiReactions',{attrs:{\"status\":_vm.status}}):_vm._e(),_vm._v(\" \"),(!_vm.noHeading && !_vm.isPreview)?_c('div',{staticClass:\"status-actions\"},[_c('div',[(_vm.loggedIn)?_c('i',{staticClass:\"button-icon button-reply icon-reply\",class:{'-active': _vm.replying},attrs:{\"title\":_vm.$t('tool_tip.reply')},on:{\"click\":function($event){$event.preventDefault();return _vm.toggleReplying($event)}}}):_c('i',{staticClass:\"button-icon button-reply -disabled icon-reply\",attrs:{\"title\":_vm.$t('tool_tip.reply')}}),_vm._v(\" \"),(_vm.status.replies_count > 0)?_c('span',[_vm._v(_vm._s(_vm.status.replies_count))]):_vm._e()]),_vm._v(\" \"),_c('retweet-button',{attrs:{\"visibility\":_vm.status.visibility,\"logged-in\":_vm.loggedIn,\"status\":_vm.status}}),_vm._v(\" \"),_c('favorite-button',{attrs:{\"logged-in\":_vm.loggedIn,\"status\":_vm.status}}),_vm._v(\" \"),(_vm.loggedIn)?_c('ReactButton',{attrs:{\"status\":_vm.status}}):_vm._e(),_vm._v(\" \"),_c('extra-buttons',{attrs:{\"status\":_vm.status},on:{\"onError\":_vm.showError,\"onSuccess\":_vm.clearError}})],1):_vm._e()],1)]),_vm._v(\" \"),(_vm.replying)?_c('div',{staticClass:\"status-container reply-form\"},[_c('PostStatusForm',{staticClass:\"reply-body\",attrs:{\"reply-to\":_vm.status.id,\"attentions\":_vm.status.attentions,\"replied-user\":_vm.status.user,\"copy-message-scope\":_vm.status.visibility,\"subject\":_vm.replySubject},on:{\"posted\":_vm.toggleReplying}})],1):_vm._e()]],2):_vm._e()}\nvar staticRenderFns = []\nexport { render, staticRenderFns }","import Timeago from '../timeago/timeago.vue'\nimport { forEach, map } from 'lodash'\n\nexport default {\n name: 'Poll',\n props: ['basePoll'],\n components: { Timeago },\n data () {\n return {\n loading: false,\n choices: []\n }\n },\n created () {\n if (!this.$store.state.polls.pollsObject[this.pollId]) {\n this.$store.dispatch('mergeOrAddPoll', this.basePoll)\n }\n this.$store.dispatch('trackPoll', this.pollId)\n },\n destroyed () {\n this.$store.dispatch('untrackPoll', this.pollId)\n },\n computed: {\n pollId () {\n return this.basePoll.id\n },\n poll () {\n const storePoll = this.$store.state.polls.pollsObject[this.pollId]\n return storePoll || {}\n },\n options () {\n return (this.poll && this.poll.options) || []\n },\n expiresAt () {\n return (this.poll && this.poll.expires_at) || 0\n },\n expired () {\n return (this.poll && this.poll.expired) || false\n },\n loggedIn () {\n return this.$store.state.users.currentUser\n },\n showResults () {\n return this.poll.voted || this.expired || !this.loggedIn\n },\n totalVotesCount () {\n return this.poll.votes_count\n },\n containerClass () {\n return {\n loading: this.loading\n }\n },\n choiceIndices () {\n // Convert array of booleans into an array of indices of the\n // items that were 'true', so [true, false, false, true] becomes\n // [0, 3].\n return this.choices\n .map((entry, index) => entry && index)\n .filter(value => typeof value === 'number')\n },\n isDisabled () {\n const noChoice = this.choiceIndices.length === 0\n return this.loading || noChoice\n }\n },\n methods: {\n percentageForOption (count) {\n return this.totalVotesCount === 0 ? 0 : Math.round(count / this.totalVotesCount * 100)\n },\n resultTitle (option) {\n return `${option.votes_count}/${this.totalVotesCount} ${this.$t('polls.votes')}`\n },\n fetchPoll () {\n this.$store.dispatch('refreshPoll', { id: this.statusId, pollId: this.poll.id })\n },\n activateOption (index) {\n // forgive me father: doing checking the radio/checkboxes\n // in code because of customized input elements need either\n // a) an extra element for the actual graphic, or b) use a\n // pseudo element for the label. We use b) which mandates\n // using \"for\" and \"id\" matching which isn't nice when the\n // same poll appears multiple times on the site (notifs and\n // timeline for example). With code we can make sure it just\n // works without altering the pseudo element implementation.\n const allElements = this.$el.querySelectorAll('input')\n const clickedElement = this.$el.querySelector(`input[value=\"${index}\"]`)\n if (this.poll.multiple) {\n // Checkboxes, toggle only the clicked one\n clickedElement.checked = !clickedElement.checked\n } else {\n // Radio button, uncheck everything and check the clicked one\n forEach(allElements, element => { element.checked = false })\n clickedElement.checked = true\n }\n this.choices = map(allElements, e => e.checked)\n },\n optionId (index) {\n return `poll${this.poll.id}-${index}`\n },\n vote () {\n if (this.choiceIndices.length === 0) return\n this.loading = true\n this.$store.dispatch(\n 'votePoll',\n { id: this.statusId, pollId: this.poll.id, choices: this.choiceIndices }\n ).then(poll => {\n this.loading = false\n })\n }\n }\n}\n","function injectStyle (context) {\n require(\"!!vue-style-loader!css-loader?minimize!../../../node_modules/vue-loader/lib/style-compiler/index?{\\\"optionsId\\\":\\\"0\\\",\\\"vue\\\":true,\\\"scoped\\\":false,\\\"sourceMap\\\":false}!sass-loader!../../../node_modules/vue-loader/lib/selector?type=styles&index=0!./poll.vue\")\n}\n/* script */\nexport * from \"!!babel-loader!./poll.js\"\nimport __vue_script__ from \"!!babel-loader!./poll.js\"/* template */\nimport {render as __vue_render__, staticRenderFns as __vue_static_render_fns__} from \"!!../../../node_modules/vue-loader/lib/template-compiler/index?{\\\"id\\\":\\\"data-v-95e3808e\\\",\\\"hasScoped\\\":false,\\\"optionsId\\\":\\\"0\\\",\\\"buble\\\":{\\\"transforms\\\":{}}}!../../../node_modules/vue-loader/lib/selector?type=template&index=0!./poll.vue\"\n/* template functional */\nvar __vue_template_functional__ = false\n/* styles */\nvar __vue_styles__ = injectStyle\n/* scopeId */\nvar __vue_scopeId__ = null\n/* moduleIdentifier (server only) */\nvar __vue_module_identifier__ = null\nimport normalizeComponent from \"!../../../node_modules/vue-loader/lib/runtime/component-normalizer\"\nvar Component = normalizeComponent(\n __vue_script__,\n __vue_render__,\n __vue_static_render_fns__,\n __vue_template_functional__,\n __vue_styles__,\n __vue_scopeId__,\n __vue_module_identifier__\n)\n\nexport default Component.exports\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"poll\",class:_vm.containerClass},[_vm._l((_vm.options),function(option,index){return _c('div',{key:index,staticClass:\"poll-option\"},[(_vm.showResults)?_c('div',{staticClass:\"option-result\",attrs:{\"title\":_vm.resultTitle(option)}},[_c('div',{staticClass:\"option-result-label\"},[_c('span',{staticClass:\"result-percentage\"},[_vm._v(\"\\n \"+_vm._s(_vm.percentageForOption(option.votes_count))+\"%\\n \")]),_vm._v(\" \"),_c('span',{domProps:{\"innerHTML\":_vm._s(option.title_html)}})]),_vm._v(\" \"),_c('div',{staticClass:\"result-fill\",style:({ 'width': ((_vm.percentageForOption(option.votes_count)) + \"%\") })})]):_c('div',{on:{\"click\":function($event){return _vm.activateOption(index)}}},[(_vm.poll.multiple)?_c('input',{attrs:{\"type\":\"checkbox\",\"disabled\":_vm.loading},domProps:{\"value\":index}}):_c('input',{attrs:{\"type\":\"radio\",\"disabled\":_vm.loading},domProps:{\"value\":index}}),_vm._v(\" \"),_c('label',{staticClass:\"option-vote\"},[_c('div',[_vm._v(_vm._s(option.title))])])])])}),_vm._v(\" \"),_c('div',{staticClass:\"footer faint\"},[(!_vm.showResults)?_c('button',{staticClass:\"btn btn-default poll-vote-button\",attrs:{\"type\":\"button\",\"disabled\":_vm.isDisabled},on:{\"click\":_vm.vote}},[_vm._v(\"\\n \"+_vm._s(_vm.$t('polls.vote'))+\"\\n \")]):_vm._e(),_vm._v(\" \"),_c('div',{staticClass:\"total\"},[_vm._v(\"\\n \"+_vm._s(_vm.totalVotesCount)+\" \"+_vm._s(_vm.$t(\"polls.votes\"))+\" · \\n \")]),_vm._v(\" \"),_c('i18n',{attrs:{\"path\":_vm.expired ? 'polls.expired' : 'polls.expires_in'}},[_c('Timeago',{attrs:{\"time\":_vm.expiresAt,\"auto-update\":60,\"now-threshold\":0}})],1)],1)],2)}\nvar staticRenderFns = []\nexport { render, staticRenderFns }","import Attachment from '../attachment/attachment.vue'\nimport Poll from '../poll/poll.vue'\nimport Gallery from '../gallery/gallery.vue'\nimport LinkPreview from '../link-preview/link-preview.vue'\nimport generateProfileLink from 'src/services/user_profile_link_generator/user_profile_link_generator'\nimport fileType from 'src/services/file_type/file_type.service'\nimport { processHtml } from 'src/services/tiny_post_html_processor/tiny_post_html_processor.service.js'\nimport { mentionMatchesUrl, extractTagFromUrl } from 'src/services/matcher/matcher.service.js'\nimport { mapGetters, mapState } from 'vuex'\n\nconst StatusContent = {\n name: 'StatusContent',\n props: [\n 'status',\n 'focused',\n 'noHeading',\n 'fullContent',\n 'singleLine'\n ],\n data () {\n return {\n showingTall: this.fullContent || (this.inConversation && this.focused),\n showingLongSubject: false,\n // not as computed because it sets the initial state which will be changed later\n expandingSubject: !this.$store.getters.mergedConfig.collapseMessageWithSubject\n }\n },\n computed: {\n localCollapseSubjectDefault () {\n return this.mergedConfig.collapseMessageWithSubject\n },\n hideAttachments () {\n return (this.mergedConfig.hideAttachments && !this.inConversation) ||\n (this.mergedConfig.hideAttachmentsInConv && this.inConversation)\n },\n // This is a bit hacky, but we want to approximate post height before rendering\n // so we count newlines (masto uses