From 6d9c2ea02101d0e24340bbb4bf448cfae1bec139 Mon Sep 17 00:00:00 2001 From: LEdoian Date: Mon, 17 Sep 2018 00:01:16 +0200 Subject: [PATCH 001/286] =?UTF-8?q?Zm=C4=9Bna=20NoArgsCommand=20na=20BaseC?= =?UTF-8?q?ommand=20kv=C5=AFli=20upgrade=20Djanga?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit https://docs.djangoproject.com/en/1.11/releases/1.8/ django.core.management.NoArgsCommand The class NoArgsCommand is now deprecated and will be removed in Django 1.10. Use BaseCommand instead, which takes no arguments by default. --- seminar/management/commands/auth.py | 4 ++-- seminar/management/commands/testdata.py | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/seminar/management/commands/auth.py b/seminar/management/commands/auth.py index 1aa504dd..894a87bc 100644 --- a/seminar/management/commands/auth.py +++ b/seminar/management/commands/auth.py @@ -1,10 +1,10 @@ # -*- coding: utf-8 -*- -from django.core.management.base import NoArgsCommand +from django.core.management.base import BaseCommand from django.contrib.sessions.models import Session from django.contrib.auth.models import User -class Command(NoArgsCommand): +class Command(BaseCommand): u"""Vypiš username přihlášeného orga s daným session_key. Příkaz pro manage.py, který ze vstupu přečte session_key (tak, jak je diff --git a/seminar/management/commands/testdata.py b/seminar/management/commands/testdata.py index dda7b097..aaa59462 100644 --- a/seminar/management/commands/testdata.py +++ b/seminar/management/commands/testdata.py @@ -4,7 +4,7 @@ import datetime import os import random -from django.core.management.base import NoArgsCommand +from django.core.management.base import BaseCommand from django.core.management import call_command from django.conf import settings @@ -14,7 +14,7 @@ import django.contrib.auth User = django.contrib.auth.get_user_model() -class Command(NoArgsCommand): +class Command(BaseCommand): help = "Clear database and load testing data." def handle_noargs(self, **options): From d4317ae9f2b52b308302b3d7b5940e25da597f21 Mon Sep 17 00:00:00 2001 From: LEdoian Date: Mon, 17 Sep 2018 00:10:00 +0200 Subject: [PATCH 002/286] =?UTF-8?q?Fix=20(nebyla=20definov=C3=A1na=20metod?= =?UTF-8?q?a=20handle)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit https://stackoverflow.com/questions/43107630/from-django-core-management-base-import-noargscommand-commanderror-importerror --- seminar/management/commands/auth.py | 2 +- seminar/management/commands/testdata.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/seminar/management/commands/auth.py b/seminar/management/commands/auth.py index 894a87bc..71757418 100644 --- a/seminar/management/commands/auth.py +++ b/seminar/management/commands/auth.py @@ -11,7 +11,7 @@ class Command(BaseCommand): uložen v cookie sessionid) a pokud session existuje a příslušný přihlášený uživatel má právo přihlásit se do admina, vypíše jeho username. """ - def handle_noargs(self, **options): + def handle(self, *args, **options): session_key = raw_input() s = Session.objects.get(pk=session_key).get_decoded() user_id = s['_auth_user_id'] diff --git a/seminar/management/commands/testdata.py b/seminar/management/commands/testdata.py index aaa59462..9f38ab57 100644 --- a/seminar/management/commands/testdata.py +++ b/seminar/management/commands/testdata.py @@ -17,7 +17,7 @@ User = django.contrib.auth.get_user_model() class Command(BaseCommand): help = "Clear database and load testing data." - def handle_noargs(self, **options): + def handle(self, *args, **options): assert settings.DEBUG == True dbfile = settings.DATABASES['default']['NAME'] if os.path.exists(dbfile): From ba5ceb14ba4a945aa39c5d9e56c9526c58e151ae Mon Sep 17 00:00:00 2001 From: LEdoian Date: Mon, 17 Sep 2018 22:18:27 +0200 Subject: [PATCH 003/286] =?UTF-8?q?Makefile:=20mo=C5=BEnost=20deploy=5Ftes?= =?UTF-8?q?t=20deploynout=20i=20jinou=20branch.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Makefile | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/Makefile b/Makefile index 51bbdfad..7abd5a36 100644 --- a/Makefile +++ b/Makefile @@ -2,6 +2,7 @@ PYTHON=python2.7 VE_VER=16.0.0 LOCAL_PYTHON=bin/python +TEST_BRANCH?=test all: install @@ -66,7 +67,7 @@ deploy_test: @if [ ${USER} != "mam-web" ]; then echo "Only possible by user mam-web"; exit 1; fi @if [ `pwd` != "/akce/mam/www/mamweb-test" ]; then echo "Only possible in /akce/mam/www/mamweb-test"; exit 1; fi @echo "Installing version from origin/test ..." - git pull origin test + git pull origin $(TEST_BRANCH) git clean -f make install ./manage.py migrate From 2e9ff73eacb3e6c6905f72aa04849df831c13596 Mon Sep 17 00:00:00 2001 From: LEdoian Date: Tue, 18 Sep 2018 02:07:01 +0200 Subject: [PATCH 004/286] =?UTF-8?q?Korektury:=20rozd=C4=9Blen=C3=AD=20aktu?= =?UTF-8?q?=C3=A1ln=C3=ADch=20a=20star=C3=BDch=20na=20dv=C4=9B=20str=C3=A1?= =?UTF-8?q?nky?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- korektury/templates/korektury/base.html | 4 ++++ korektury/templates/korektury/help.html | 7 +++++++ korektury/templates/korektury/seznam.html | 12 ++++++++++++ korektury/templates/korektury/submenu.html | 13 +++++++++++++ korektury/urls.py | 3 ++- korektury/views.py | 13 +++++++++++++ 6 files changed, 51 insertions(+), 1 deletion(-) create mode 100644 korektury/templates/korektury/submenu.html diff --git a/korektury/templates/korektury/base.html b/korektury/templates/korektury/base.html index b31d5d47..886a15e1 100644 --- a/korektury/templates/korektury/base.html +++ b/korektury/templates/korektury/base.html @@ -1,5 +1,9 @@ {% extends "base.html" %} +{% block submenu %} + {% include "korektury/submenu.html" %} +{% endblock %} + {% block content %} {# blok do kterého se nacita text, v pripade jinyhc templatu obalit vlastnim blokem #} {% endblock %} diff --git a/korektury/templates/korektury/help.html b/korektury/templates/korektury/help.html index 0024848e..f2ddafb9 100644 --- a/korektury/templates/korektury/help.html +++ b/korektury/templates/korektury/help.html @@ -1,4 +1,11 @@ {% extends "korektury/base.html" %} + +{% block submenu %} + {% with "help" as selected %} + {% include "korektury/submenu.html" %} + {% endwith %} +{% endblock %} + {% load staticfiles %} {% block title %} Nápověda ke korigovátku {% endblock title %} diff --git a/korektury/templates/korektury/seznam.html b/korektury/templates/korektury/seznam.html index 7531679b..6420ec7d 100644 --- a/korektury/templates/korektury/seznam.html +++ b/korektury/templates/korektury/seznam.html @@ -1,6 +1,18 @@ {% extends "korektury/base.html" %} {% load staticfiles %} +{% block submenu %} + {% if aktualni %} + {% with "aktualni" as selected %} + {% include "korektury/submenu.html" %} + {% endwith %} + {% else %} + {% with "zastarale" as selected %} + {% include "korektury/submenu.html" %} + {% endwith %} + {% endif %} +{% endblock %} + {% block script%} {% endblock %} diff --git a/korektury/templates/korektury/submenu.html b/korektury/templates/korektury/submenu.html new file mode 100644 index 00000000..0a5ed988 --- /dev/null +++ b/korektury/templates/korektury/submenu.html @@ -0,0 +1,13 @@ +{% with "/korektury" as cesta %} + + + +{% endwith %} + + diff --git a/korektury/urls.py b/korektury/urls.py index 2f131516..ecad4804 100644 --- a/korektury/urls.py +++ b/korektury/urls.py @@ -6,7 +6,8 @@ from . import views staff_member_required = user_passes_test(lambda u: u.is_staff) urlpatterns = [ - url(r'^korektury/$', staff_member_required(views.KorekturyListView.as_view()), name='korektury-list'), + url(r'^korektury/$', staff_member_required(views.KorekturyAktualniListView.as_view()), name='korektury-list'), + url(r'^korektury/zastarale/$', staff_member_required(views.KorekturyZastaraleListView.as_view()), name='korektury-list-zastarale'), url(r'^korektury/(?P\d+)/$', staff_member_required(views.KorekturyView.as_view()), name='korektury'), url(r'^korektury/help/', staff_member_required(views.KorekturyHelpView.as_view()), name='korektury-help'), ] diff --git a/korektury/views.py b/korektury/views.py index 1e5a9298..bc2acdd8 100644 --- a/korektury/views.py +++ b/korektury/views.py @@ -21,6 +21,19 @@ class KorekturyListView(generic.ListView): model = KorekturovanePDF template_name = 'korektury/seznam.html' +class KorekturyAktualniListView(KorekturyListView): + def __init__ (self): + self.queryset=self.get_queryset().exclude(status="zastarale") + + def get_context_data(self, **kwargs): + context = super(KorekturyAktualniListView,self).get_context_data(**kwargs) + context['aktualni'] = True + return context + +class KorekturyZastaraleListView(KorekturyListView): + def __init__ (self): + self.queryset=self.get_queryset().filter(status="zastarale") + ### Korektury class KorekturyView(generic.TemplateView): model = Oprava From 52d14c667aa59e9348387993994160de81fd6ab8 Mon Sep 17 00:00:00 2001 From: MaM Web user Date: Tue, 18 Sep 2018 02:20:55 +0200 Subject: [PATCH 005/286] =?UTF-8?q?Revert=20"Makefile:=20mo=C5=BEnost=20de?= =?UTF-8?q?ploy=5Ftest=20deploynout=20i=20jinou=20branch."?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Tohle stejně nefungovalo. Asi je to dobrý nápad, ale git se chová jinak, než jsem si myslel. This reverts commit ba5ceb14ba4a945aa39c5d9e56c9526c58e151ae. --- Makefile | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/Makefile b/Makefile index 7abd5a36..51bbdfad 100644 --- a/Makefile +++ b/Makefile @@ -2,7 +2,6 @@ PYTHON=python2.7 VE_VER=16.0.0 LOCAL_PYTHON=bin/python -TEST_BRANCH?=test all: install @@ -67,7 +66,7 @@ deploy_test: @if [ ${USER} != "mam-web" ]; then echo "Only possible by user mam-web"; exit 1; fi @if [ `pwd` != "/akce/mam/www/mamweb-test" ]; then echo "Only possible in /akce/mam/www/mamweb-test"; exit 1; fi @echo "Installing version from origin/test ..." - git pull origin $(TEST_BRANCH) + git pull origin test git clean -f make install ./manage.py migrate From 8d22ab3c91b33eedaa930c66d8707714068262b8 Mon Sep 17 00:00:00 2001 From: LEdoian Date: Fri, 21 Sep 2018 00:25:54 +0200 Subject: [PATCH 006/286] =?UTF-8?q?Hez=C4=8D=C3=AD=20verze?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- korektury/templates/korektury/seznam.html | 10 +--------- korektury/views.py | 19 ++++++++++++++----- 2 files changed, 15 insertions(+), 14 deletions(-) diff --git a/korektury/templates/korektury/seznam.html b/korektury/templates/korektury/seznam.html index 6420ec7d..2498fbce 100644 --- a/korektury/templates/korektury/seznam.html +++ b/korektury/templates/korektury/seznam.html @@ -2,15 +2,7 @@ {% load staticfiles %} {% block submenu %} - {% if aktualni %} - {% with "aktualni" as selected %} - {% include "korektury/submenu.html" %} - {% endwith %} - {% else %} - {% with "zastarale" as selected %} - {% include "korektury/submenu.html" %} - {% endwith %} - {% endif %} + {% include "korektury/submenu.html" %} {% endblock %} {% block script%} diff --git a/korektury/views.py b/korektury/views.py index bc2acdd8..56f198f2 100644 --- a/korektury/views.py +++ b/korektury/views.py @@ -22,17 +22,26 @@ class KorekturyListView(generic.ListView): template_name = 'korektury/seznam.html' class KorekturyAktualniListView(KorekturyListView): - def __init__ (self): - self.queryset=self.get_queryset().exclude(status="zastarale") + def get_queryset(self, *args, **kwargs): + queryset=super(KorekturyAktualniListView,self).get_queryset() + queryset=queryset.exclude(status="zastarale") + return queryset def get_context_data(self, **kwargs): context = super(KorekturyAktualniListView,self).get_context_data(**kwargs) - context['aktualni'] = True + context['selected'] = 'aktualni' return context class KorekturyZastaraleListView(KorekturyListView): - def __init__ (self): - self.queryset=self.get_queryset().filter(status="zastarale") + def get_queryset(self, *args, **kwargs): + queryset=super(KorekturyZastaraleListView,self).get_queryset() + queryset=queryset.filter(status="zastarale") + return queryset + + def get_context_data(self, **kwargs): + context = super(KorekturyZastaraleListView,self).get_context_data(**kwargs) + context['selected'] = 'zastarale' + return context ### Korektury class KorekturyView(generic.TemplateView): From 0eadd8fcda4ac734efba4944dea6fbc519d83a67 Mon Sep 17 00:00:00 2001 From: LEdoian Date: Wed, 5 Dec 2018 23:42:26 +0100 Subject: [PATCH 007/286] =?UTF-8?q?Korekturov=C3=A1tko:=20Snad=20fix=20roz?= =?UTF-8?q?bit=C3=A9ho=20ImageMagicku?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- korektury/models.py | 25 +++++++++++++++++-------- 1 file changed, 17 insertions(+), 8 deletions(-) diff --git a/korektury/models.py b/korektury/models.py index 1430ec75..e5b6e01a 100644 --- a/korektury/models.py +++ b/korektury/models.py @@ -82,16 +82,25 @@ class KorekturovanePDF(models.Model): self.stran = 0 while True: res = subprocess.call([ - "convert", - "-density", "180x180", - "-geometry", " 1024x1448", - "%s[%d]" % (self.pdf.path, self.stran), - os.path.join( + #Parametry inspirovány chybovou hláškou imagemagicku + "gs", + "-sstdout=%stderr", + "-dSAFER", + "-dNOPAUSE", + "-dBATCH", + "-dNOPROMPT", + "-sDEVICE=pngalpha", + "-r180x180", + "-dFirstPage=%d" % (self.stran+1), + "-dLastPage=%d" % (self.stran+1), + "-sOutputFile="+os.path.join( dirname, - "%s-%d.png" % (self.get_prefix(), self.stran) - ) + "%s-%d.png" % (self.get_prefix(), self.stran)), + "-f%s" % (self.pdf.path) ]) - if res == 1: + if not os.path.exists(os.path.join( + dirname, + "%s-%d.png" % (self.get_prefix(), self.stran))): break self.stran += 1 # Změnil se počet stran, ukládáme From a7480f179612d05f7ed0e052d909436e2a94ec5a Mon Sep 17 00:00:00 2001 From: LEdoian Date: Mon, 10 Dec 2018 03:39:22 +0100 Subject: [PATCH 008/286] =?UTF-8?q?=C3=9Aprava=20textu=20v=20/zadani/temat?= =?UTF-8?q?a?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Už to není flatpage, tak se to musí změnit tu. K zamyšlení: nechceme nějakou metodu úpravy statických textů na dynamických stránkách z adminu? --- seminar/templates/seminar/zadani/Temata.html | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/seminar/templates/seminar/zadani/Temata.html b/seminar/templates/seminar/zadani/Temata.html index ec700a1f..ae19de1a 100644 --- a/seminar/templates/seminar/zadani/Temata.html +++ b/seminar/templates/seminar/zadani/Temata.html @@ -17,10 +17,10 @@

- Témata jsou hlavním obsahem časopisu M&M. Obvykle představují - složitější a obecnější problémy než samostatné úlohy. Navíc je v jejich - zadání vždy prostor pro tvůrčí rozšíření. Za pěkný článek k tématu lze - získat třeba i 20 bodů, určitě se tedy vyplatí se tématy zabývat. + Témata jsou texty nejen z oblasti matematiky, fyziky a informatiky, které + popisují nějaký problém a jsou doprovázeny návodnými úlohami. Vaším úkolem + je zamyslet se nad daným problémem a sepsat vaše úvahy ve formě krátkého + textu.

Jak řešit téma? From fe7c4f601513c2045d58612918e7b1c82b371883 Mon Sep 17 00:00:00 2001 From: LEdoian Date: Wed, 6 Feb 2019 01:44:30 +0100 Subject: [PATCH 009/286] =?UTF-8?q?V=C3=BDsledkovka:=20V=C3=ADce=20=C5=99e?= =?UTF-8?q?=C5=A1en=C3=AD=20ke=20stejn=C3=A9mu=20=C5=99e=C5=A1iteli=20a=20?= =?UTF-8?q?=C4=8D=C3=ADslu?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Například: nějaké nepravidelné získání bodů (DOD), pozdní dodání starého řešení, několik příspěvků ke stejnému témátku, ... --- seminar/views.py | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/seminar/views.py b/seminar/views.py index 25d72f7f..16a0e872 100644 --- a/seminar/views.py +++ b/seminar/views.py @@ -319,8 +319,10 @@ def vysledkovka_rocniku(rocnik, jen_verejne=True): #zobrazim jen je-li vysledkovka verejna body_za_cislo = VysledkyZaCislo.objects.filter(cislo__rocnik=rocnik).filter(cislo = cis).filter(resitel = v.resitel) if body_za_cislo: - #neprazdne vysledky by mely obsahovat prave jeden vysledek - v.body_cisla.append(body_za_cislo[0].body) + soucet = 0.0 + for x in body_za_cislo: + soucet += x.body + v.body_cisla.append(soucet) else: #resitel nema za cislo body v.body_cisla.append(0) From ce5884914891c43b04d01f3c6c5714544ade54d5 Mon Sep 17 00:00:00 2001 From: MaM Web user Date: Wed, 6 Feb 2019 02:33:05 +0100 Subject: [PATCH 010/286] =?UTF-8?q?Revert=20"V=C3=BDsledkovka:=20V=C3=ADce?= =?UTF-8?q?=20=C5=99e=C5=A1en=C3=AD=20ke=20stejn=C3=A9mu=20=C5=99e=C5=A1it?= =?UTF-8?q?eli=20a=20=C4=8D=C3=ADslu"?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This reverts commit fe7c4f601513c2045d58612918e7b1c82b371883. Změnil jsem špatný kód a navíc nefungoval --- seminar/views.py | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/seminar/views.py b/seminar/views.py index 16a0e872..25d72f7f 100644 --- a/seminar/views.py +++ b/seminar/views.py @@ -319,10 +319,8 @@ def vysledkovka_rocniku(rocnik, jen_verejne=True): #zobrazim jen je-li vysledkovka verejna body_za_cislo = VysledkyZaCislo.objects.filter(cislo__rocnik=rocnik).filter(cislo = cis).filter(resitel = v.resitel) if body_za_cislo: - soucet = 0.0 - for x in body_za_cislo: - soucet += x.body - v.body_cisla.append(soucet) + #neprazdne vysledky by mely obsahovat prave jeden vysledek + v.body_cisla.append(body_za_cislo[0].body) else: #resitel nema za cislo body v.body_cisla.append(0) From 028e249df2eda4d0f7b6a12c6aec4401d724c741 Mon Sep 17 00:00:00 2001 From: MaM Web user Date: Wed, 6 Feb 2019 04:51:12 +0100 Subject: [PATCH 011/286] =?UTF-8?q?V=C3=BDsledkovka:=20Sou=C4=8Det=20bod?= =?UTF-8?q?=C5=AF=20=C5=99e=C5=A1en=C3=AD=20ke=20stejn=C3=A9mu=20probl?= =?UTF-8?q?=C3=A9mu?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Dosud se součet za číslo sečetl správně, ale body u problému byly jen z posledního zpracovaného řešení. Tohle je potřeba na: DODové úložky, více článků ke stejnému témátku (třeba postupně během jednoho čísla), opožděné submity, ... Pavel --- seminar/views.py | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/seminar/views.py b/seminar/views.py index 25d72f7f..55e8aa7a 100644 --- a/seminar/views.py +++ b/seminar/views.py @@ -491,7 +491,12 @@ class CisloView(generic.DetailView): # za každé řešení doplníme k příslušnému řešiteli a úloze body for r in reseni: - vysledky_resitele[r.resitel.id].body_ulohy[problem_index[r.problem.id]] = r.body + if r.body is None or vysledky_resitele[r.resitel.id].body_ulohy[problem_index[r.problem.id]] is None: + vysledky_resitele[r.resitel.id].body_ulohy[problem_index[r.problem.id]] = None + elif vysledky_resitele[r.resitel.id].body_ulohy[problem_index[r.problem.id]] == '': + vysledky_resitele[r.resitel.id].body_ulohy[problem_index[r.problem.id]] = r.body + else: + vysledky_resitele[r.resitel.id].body_ulohy[problem_index[r.problem.id]] += r.body context['vysledkovka'] = vysledkovka context['problemy'] = problemy From 5e9bdbfef08953441187ed501f2e40e0d7fcc9be Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tom=C3=A1=C5=A1=20Domes?= Date: Tue, 5 Mar 2019 20:52:09 +0100 Subject: [PATCH 012/286] =?UTF-8?q?Zm=C4=9Bna=20obr=C3=A1zk=C5=AF=20v=20?= =?UTF-8?q?=C3=BAvodn=C3=ADm=20grafu?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- seminar/templates/seminar/titulnistrana.html | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/seminar/templates/seminar/titulnistrana.html b/seminar/templates/seminar/titulnistrana.html index d73e65e3..a9f3df66 100644 --- a/seminar/templates/seminar/titulnistrana.html +++ b/seminar/templates/seminar/titulnistrana.html @@ -39,19 +39,19 @@ M&M je korespondenční seminář. Několikrát do roka zdarma vydáváme č - - - + + + - - - + + + - + From 828aa7e52330fe1738a789a07877ecf4900c31ab Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tom=C3=A1=C5=A1=20Domes?= Date: Tue, 5 Mar 2019 20:52:09 +0100 Subject: [PATCH 013/286] =?UTF-8?q?Zm=C4=9Bna=20obr=C3=A1zk=C5=AF=20v=20?= =?UTF-8?q?=C3=BAvodn=C3=ADm=20grafu?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- seminar/templates/seminar/titulnistrana.html | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/seminar/templates/seminar/titulnistrana.html b/seminar/templates/seminar/titulnistrana.html index d73e65e3..a9f3df66 100644 --- a/seminar/templates/seminar/titulnistrana.html +++ b/seminar/templates/seminar/titulnistrana.html @@ -39,19 +39,19 @@ M&M je korespondenční seminář. Několikrát do roka zdarma vydáváme č - - - + + + - - - + + + - + From d2367d28fb33b4dcdf2895b8e4bf95bbaabc328a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tom=C3=A1=C5=A1=20Domes?= Date: Tue, 5 Mar 2019 21:09:14 +0100 Subject: [PATCH 014/286] =?UTF-8?q?Oprava=20rozbit=C3=BDch=20p=C5=99=C3=AD?= =?UTF-8?q?pon=20obr=C3=A1zk=C5=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- seminar/templates/seminar/titulnistrana.html | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/seminar/templates/seminar/titulnistrana.html b/seminar/templates/seminar/titulnistrana.html index a9f3df66..3134de45 100644 --- a/seminar/templates/seminar/titulnistrana.html +++ b/seminar/templates/seminar/titulnistrana.html @@ -51,11 +51,11 @@ M&M je korespondenční seminář. Několikrát do roka zdarma vydáváme č - + - + From 7b3f423a74ed6611d7fa42be26707c69491d8738 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tom=C3=A1=C5=A1=20Domes?= Date: Tue, 5 Mar 2019 21:09:14 +0100 Subject: [PATCH 015/286] =?UTF-8?q?Oprava=20rozbit=C3=BDch=20p=C5=99=C3=AD?= =?UTF-8?q?pon=20obr=C3=A1zk=C5=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- seminar/templates/seminar/titulnistrana.html | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/seminar/templates/seminar/titulnistrana.html b/seminar/templates/seminar/titulnistrana.html index a9f3df66..3134de45 100644 --- a/seminar/templates/seminar/titulnistrana.html +++ b/seminar/templates/seminar/titulnistrana.html @@ -51,11 +51,11 @@ M&M je korespondenční seminář. Několikrát do roka zdarma vydáváme č - + - + From 66715166d494e71d2ae0ce027c3e0bb19d92e22c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tom=C3=A1=C5=A1=20Domes?= Date: Wed, 6 Mar 2019 00:19:47 +0100 Subject: [PATCH 016/286] galerie/views.py: oprava sorteni obrazku --- galerie/views.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/galerie/views.py b/galerie/views.py index 46860810..f7ace3c8 100644 --- a/galerie/views.py +++ b/galerie/views.py @@ -38,7 +38,7 @@ def nahled(request, pk, soustredeni): if not request.user.is_staff: podgalerie = podgalerie.filter(zobrazit__lt=1) - obrazky = Obrazek.objects.filter(galerie = galerie) + obrazky = Obrazek.objects.filter(galerie = galerie).order_by('poradi') preview = zobrazit(galerie, request) sourozenci = [] @@ -82,7 +82,7 @@ def detail(request, pk, fotka, soustredeni): galerie = get_object_or_404(Galerie, pk=pk) preview = zobrazit(galerie, request) obrazek = get_object_or_404(Obrazek, pk=fotka) - obrazky = galerie.obrazek_set.all() + obrazky = galerie.obrazek_set.all().order_by('poradi') # vytvoreni a obslouzeni formulare if request.method == 'POST': From ec8ac3e3093fca287954bf174e6dbcf79d7721dd Mon Sep 17 00:00:00 2001 From: LEdoian Date: Wed, 6 Mar 2019 00:52:34 +0100 Subject: [PATCH 017/286] =?UTF-8?q?Galerie:=20Mo=C5=BEnost=20=C3=BApravy?= =?UTF-8?q?=20po=C5=99ad=C3=AD=20fotek?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- galerie/admin.py | 6 +++--- galerie/views.py | 4 ++-- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/galerie/admin.py b/galerie/admin.py index 8e9c1897..6bae43ac 100644 --- a/galerie/admin.py +++ b/galerie/admin.py @@ -31,20 +31,20 @@ def prepnout_fotogalerii_do_org_rezimu(modeladmin, request, queryset): class GalerieInline(admin.TabularInline): model = Obrazek - fields = ['obrazek_velky', 'nazev', 'popis', 'obrazek_maly_tag'] + fields = ['obrazek_velky', 'nazev', 'popis', 'obrazek_maly_tag', 'poradi'] readonly_fields = ['nazev', 'obrazek_maly_tag'] formfield_overrides = { models.TextField: {'widget': forms.TextInput}, } class ObrazekAdmin(admin.ModelAdmin): - list_display = ('obrazek_velky', 'nazev', 'popis', 'obrazek_maly_tag') + list_display = ('obrazek_velky', 'nazev', 'popis', 'obrazek_maly_tag', 'poradi') class GalerieAdmin(admin.ModelAdmin): form = autocomplete_light.modelform_factory(Galerie, autocomplete_fields=['titulni_obrazek'], fields=['titulni_obrazek']) model = Galerie fields = ('zobrazit', 'nazev', 'titulni_obrazek', 'popis', 'galerie_up', 'soustredeni', 'poradi') - list_display = ('nazev', 'pk', 'poradi', 'datum_zmeny', 'zobrazit', 'soustredeni') + list_display = ('nazev', 'pk', 'poradi', 'datum_zmeny', 'zobrazit', 'soustredeni', 'poradi') inlines = [GalerieInline] actions = [zverejnit_fotogalerii, prepnout_fotogalerii_do_org_rezimu] save_on_top = True diff --git a/galerie/views.py b/galerie/views.py index 46860810..f7ace3c8 100644 --- a/galerie/views.py +++ b/galerie/views.py @@ -38,7 +38,7 @@ def nahled(request, pk, soustredeni): if not request.user.is_staff: podgalerie = podgalerie.filter(zobrazit__lt=1) - obrazky = Obrazek.objects.filter(galerie = galerie) + obrazky = Obrazek.objects.filter(galerie = galerie).order_by('poradi') preview = zobrazit(galerie, request) sourozenci = [] @@ -82,7 +82,7 @@ def detail(request, pk, fotka, soustredeni): galerie = get_object_or_404(Galerie, pk=pk) preview = zobrazit(galerie, request) obrazek = get_object_or_404(Obrazek, pk=fotka) - obrazky = galerie.obrazek_set.all() + obrazky = galerie.obrazek_set.all().order_by('poradi') # vytvoreni a obslouzeni formulare if request.method == 'POST': From aba3fa356b40ccfe639c40d16eb1c00aef2c0b58 Mon Sep 17 00:00:00 2001 From: LEdoian Date: Wed, 6 Mar 2019 01:13:55 +0100 Subject: [PATCH 018/286] =?UTF-8?q?Galerie:=20Ale=20sta=C4=8D=C3=AD=20zobr?= =?UTF-8?q?azit=20po=C5=99ad=C3=AD=20jednou=20:-)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- galerie/admin.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/galerie/admin.py b/galerie/admin.py index 6bae43ac..784d4aa8 100644 --- a/galerie/admin.py +++ b/galerie/admin.py @@ -44,7 +44,7 @@ class GalerieAdmin(admin.ModelAdmin): form = autocomplete_light.modelform_factory(Galerie, autocomplete_fields=['titulni_obrazek'], fields=['titulni_obrazek']) model = Galerie fields = ('zobrazit', 'nazev', 'titulni_obrazek', 'popis', 'galerie_up', 'soustredeni', 'poradi') - list_display = ('nazev', 'pk', 'poradi', 'datum_zmeny', 'zobrazit', 'soustredeni', 'poradi') + list_display = ('nazev', 'pk', 'poradi', 'datum_zmeny', 'zobrazit', 'soustredeni') inlines = [GalerieInline] actions = [zverejnit_fotogalerii, prepnout_fotogalerii_do_org_rezimu] save_on_top = True From 9b14e964101c073283e18ffb6040c5fdb16f399a Mon Sep 17 00:00:00 2001 From: LEdoian Date: Wed, 6 Mar 2019 00:52:34 +0100 Subject: [PATCH 019/286] =?UTF-8?q?Galerie:=20Mo=C5=BEnost=20=C3=BApravy?= =?UTF-8?q?=20po=C5=99ad=C3=AD=20fotek?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- galerie/admin.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/galerie/admin.py b/galerie/admin.py index 9ab2c3ba..0ca32dc9 100644 --- a/galerie/admin.py +++ b/galerie/admin.py @@ -31,14 +31,14 @@ def prepnout_fotogalerii_do_org_rezimu(modeladmin, request, queryset): class GalerieInline(admin.TabularInline): model = Obrazek - fields = ['obrazek_velky', 'nazev', 'popis', 'obrazek_maly_tag'] + fields = ['obrazek_velky', 'nazev', 'popis', 'obrazek_maly_tag', 'poradi'] readonly_fields = ['nazev', 'obrazek_maly_tag'] formfield_overrides = { models.TextField: {'widget': forms.TextInput}, } class ObrazekAdmin(admin.ModelAdmin): - list_display = ('obrazek_velky', 'nazev', 'popis', 'obrazek_maly_tag') + list_display = ('obrazek_velky', 'nazev', 'popis', 'obrazek_maly_tag', 'poradi') class GalerieAdmin(admin.ModelAdmin): form = autocomplete_light.modelform_factory(Galerie, autocomplete_fields=['titulni_obrazek'], fields=['titulni_obrazek']) From abb99cfde1335b9821b2207236e6eb559801126a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tom=C3=A1=C5=A1=20Domes?= Date: Wed, 6 Mar 2019 12:55:24 +0100 Subject: [PATCH 020/286] =?UTF-8?q?Varov=C3=A1n=C3=AD=20o=20neaktu=C3=A1ln?= =?UTF-8?q?osti=20t=C3=A9m=C3=A1tek?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- seminar/templates/seminar/zadani/Temata.html | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/seminar/templates/seminar/zadani/Temata.html b/seminar/templates/seminar/zadani/Temata.html index ae19de1a..ee3d822a 100644 --- a/seminar/templates/seminar/zadani/Temata.html +++ b/seminar/templates/seminar/zadani/Temata.html @@ -16,6 +16,10 @@ {% endblock %}{% endblock %} + +

+ Pozor, tato stránka není aktuální! Aktualizovaný seznam všech čísel v PDF najdete zde. Za problémy se omlouváme. +

Témata jsou texty nejen z oblasti matematiky, fyziky a informatiky, které popisují nějaký problém a jsou doprovázeny návodnými úlohami. Vaším úkolem From 891480f7513a417a765b3908636578ee1128adf5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tom=C3=A1=C5=A1=20Domes?= Date: Wed, 6 Mar 2019 13:20:41 +0100 Subject: [PATCH 021/286] =?UTF-8?q?Zm=C4=9Bna=20velikosti=20varov=C3=A1n?= =?UTF-8?q?=C3=AD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- seminar/templates/seminar/zadani/Temata.html | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/seminar/templates/seminar/zadani/Temata.html b/seminar/templates/seminar/zadani/Temata.html index ee3d822a..26a88664 100644 --- a/seminar/templates/seminar/zadani/Temata.html +++ b/seminar/templates/seminar/zadani/Temata.html @@ -17,9 +17,9 @@ -

+

Pozor, tato stránka není aktuální! Aktualizovaný seznam všech čísel v PDF najdete zde. Za problémy se omlouváme. -

+

Témata jsou texty nejen z oblasti matematiky, fyziky a informatiky, které popisují nějaký problém a jsou doprovázeny návodnými úlohami. Vaším úkolem From 2cd5294754e2bf7e5b84525702eedcf9bc5dd289 Mon Sep 17 00:00:00 2001 From: LEdoian Date: Wed, 13 Mar 2019 18:41:28 +0100 Subject: [PATCH 022/286] =?UTF-8?q?Organizator:=20Lep=C5=A1=C3=AD=20zp?= =?UTF-8?q?=C5=AFsob=20=C5=99azen=C3=AD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- seminar/models.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/seminar/models.py b/seminar/models.py index 2bc86c41..e3c89ab8 100644 --- a/seminar/models.py +++ b/seminar/models.py @@ -758,6 +758,10 @@ class Organizator(models.Model): class Meta: verbose_name = 'Organizátor' verbose_name_plural = 'Organizátoři' + # Řadí aktivní orgy na začátek, pod tím v pořadí od nejstarších neaktivní orgy. + # TODO: Chtěl bych spíš mít nejstarší orgy dole. + # TODO: Zohledňovat přezdívky? + ordering = ['organizuje_do_roku', 'user__first_name', 'user__last_name'] @reversion.register(ignore_duplicates=True) From 9e03fba505185eca8391bbc87bb9f57739272306 Mon Sep 17 00:00:00 2001 From: MaM Web user Date: Wed, 13 Mar 2019 18:51:09 +0100 Subject: [PATCH 023/286] =?UTF-8?q?Chyba=20ve=20znam=C3=A9nku=20u=20=C5=99?= =?UTF-8?q?azen=C3=AD=20organiz=C3=A1tor=C5=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- seminar/models.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/seminar/models.py b/seminar/models.py index e3c89ab8..86ea2811 100644 --- a/seminar/models.py +++ b/seminar/models.py @@ -761,7 +761,8 @@ class Organizator(models.Model): # Řadí aktivní orgy na začátek, pod tím v pořadí od nejstarších neaktivní orgy. # TODO: Chtěl bych spíš mít nejstarší orgy dole. # TODO: Zohledňovat přezdívky? - ordering = ['organizuje_do_roku', 'user__first_name', 'user__last_name'] + # TODO: Sjednotit s tím, jak se řadí organizátoři v seznau orgů na webu + ordering = ['-organizuje_do_roku', 'user__first_name', 'user__last_name'] @reversion.register(ignore_duplicates=True) From 7e517d2c242c1179cbc7dd2bf52e4eb345099c6e Mon Sep 17 00:00:00 2001 From: LEdoian Date: Wed, 13 Mar 2019 18:41:28 +0100 Subject: [PATCH 024/286] =?UTF-8?q?Organizator:=20Lep=C5=A1=C3=AD=20zp?= =?UTF-8?q?=C5=AFsob=20=C5=99azen=C3=AD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- seminar/models.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/seminar/models.py b/seminar/models.py index 2bc86c41..e3c89ab8 100644 --- a/seminar/models.py +++ b/seminar/models.py @@ -758,6 +758,10 @@ class Organizator(models.Model): class Meta: verbose_name = 'Organizátor' verbose_name_plural = 'Organizátoři' + # Řadí aktivní orgy na začátek, pod tím v pořadí od nejstarších neaktivní orgy. + # TODO: Chtěl bych spíš mít nejstarší orgy dole. + # TODO: Zohledňovat přezdívky? + ordering = ['organizuje_do_roku', 'user__first_name', 'user__last_name'] @reversion.register(ignore_duplicates=True) From 4c0ea60ecb701dae0c9f4890b069ef890ac21dee Mon Sep 17 00:00:00 2001 From: MaM Web user Date: Wed, 13 Mar 2019 18:51:09 +0100 Subject: [PATCH 025/286] =?UTF-8?q?Chyba=20ve=20znam=C3=A9nku=20u=20=C5=99?= =?UTF-8?q?azen=C3=AD=20organiz=C3=A1tor=C5=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- seminar/models.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/seminar/models.py b/seminar/models.py index e3c89ab8..86ea2811 100644 --- a/seminar/models.py +++ b/seminar/models.py @@ -761,7 +761,8 @@ class Organizator(models.Model): # Řadí aktivní orgy na začátek, pod tím v pořadí od nejstarších neaktivní orgy. # TODO: Chtěl bych spíš mít nejstarší orgy dole. # TODO: Zohledňovat přezdívky? - ordering = ['organizuje_do_roku', 'user__first_name', 'user__last_name'] + # TODO: Sjednotit s tím, jak se řadí organizátoři v seznau orgů na webu + ordering = ['-organizuje_do_roku', 'user__first_name', 'user__last_name'] @reversion.register(ignore_duplicates=True) From dd9250a380357c49c76aacea1678ea07c850d0f9 Mon Sep 17 00:00:00 2001 From: LEdoian Date: Sun, 17 Mar 2019 19:48:33 +0100 Subject: [PATCH 026/286] =?UTF-8?q?P=C5=99edn=C3=A1=C5=A1ky:=20obt=C3=AD?= =?UTF-8?q?=C5=BEnost=20v=20seznamu,=20jen=20aktu=C3=A1ln=C3=AD=20body=20v?= =?UTF-8?q?e=20v=C3=BDsledc=C3=ADch?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ... Snad. --- prednasky/admin.py | 7 ++++++- prednasky/views.py | 2 +- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/prednasky/admin.py b/prednasky/admin.py index a9b94ee0..f7ce8730 100644 --- a/prednasky/admin.py +++ b/prednasky/admin.py @@ -37,15 +37,20 @@ class Seznam_PrednaskaInline(admin.TabularInline): def prednaska__obor(self, obj): return obj.prednaska.obor + def prednaska__obtiznost(self, obj): + return obj.prednaska.obtiznost + prednaska__nazev.short_description = u'Přednáška' prednaska__popis.short_description = u'Popis pro orgy' prednaska__anotace.short_description = u'Anotace' prednaska__org.short_description = u'Org' prednaska__obor.short_description = u'Obor' + prednaska__obtiznost.short_description = u'Obtížnost' readonly_fields = [ 'prednaska__nazev', 'prednaska__obor', + 'prednaska__obtiznost', 'prednaska__org', 'prednaska__popis', 'prednaska__anotace', @@ -63,7 +68,7 @@ admin.site.register(Seznam, SeznamAdmin) class PrednaskaAdmin(VersionAdmin): - list_display = ['nazev', 'org', 'obor'] + list_display = ['nazev', 'org', 'obor', 'obtiznost'] list_filter = ['org', 'obor'] search_fields = [] filter_horizontal = ('seznamy', ) diff --git a/prednasky/views.py b/prednasky/views.py index 1e66ee64..7423f860 100644 --- a/prednasky/views.py +++ b/prednasky/views.py @@ -57,7 +57,7 @@ class SeznamListView(generic.ListView): self.seznam = get_object_or_404(Seznam, id=self.kwargs["seznam"]) prednasky = Prednaska.objects.filter(seznamy=self.seznam).order_by( 'org__user__first_name', 'org__user__last_name' - ).annotate(body=Sum('hlasovani__body')) + ).annotate(body=Sum('hlasovani__body').filter(seznam=self.seznam)) return prednasky From 5db763f2cb713632381f455a93efc319b44f9f48 Mon Sep 17 00:00:00 2001 From: LEdoian Date: Sun, 17 Mar 2019 21:27:35 +0100 Subject: [PATCH 027/286] =?UTF-8?q?Revert=20"P=C5=99edn=C3=A1=C5=A1ky:=20o?= =?UTF-8?q?bt=C3=AD=C5=BEnost=20v=20seznamu,=20jen=20aktu=C3=A1ln=C3=AD=20?= =?UTF-8?q?body=20ve=20v=C3=BDsledc=C3=ADch"?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Víc věcí to rozbilo než opravilo This reverts commit dd9250a380357c49c76aacea1678ea07c850d0f9. --- prednasky/admin.py | 7 +------ prednasky/views.py | 2 +- 2 files changed, 2 insertions(+), 7 deletions(-) diff --git a/prednasky/admin.py b/prednasky/admin.py index f7ce8730..a9b94ee0 100644 --- a/prednasky/admin.py +++ b/prednasky/admin.py @@ -37,20 +37,15 @@ class Seznam_PrednaskaInline(admin.TabularInline): def prednaska__obor(self, obj): return obj.prednaska.obor - def prednaska__obtiznost(self, obj): - return obj.prednaska.obtiznost - prednaska__nazev.short_description = u'Přednáška' prednaska__popis.short_description = u'Popis pro orgy' prednaska__anotace.short_description = u'Anotace' prednaska__org.short_description = u'Org' prednaska__obor.short_description = u'Obor' - prednaska__obtiznost.short_description = u'Obtížnost' readonly_fields = [ 'prednaska__nazev', 'prednaska__obor', - 'prednaska__obtiznost', 'prednaska__org', 'prednaska__popis', 'prednaska__anotace', @@ -68,7 +63,7 @@ admin.site.register(Seznam, SeznamAdmin) class PrednaskaAdmin(VersionAdmin): - list_display = ['nazev', 'org', 'obor', 'obtiznost'] + list_display = ['nazev', 'org', 'obor'] list_filter = ['org', 'obor'] search_fields = [] filter_horizontal = ('seznamy', ) diff --git a/prednasky/views.py b/prednasky/views.py index 7423f860..1e66ee64 100644 --- a/prednasky/views.py +++ b/prednasky/views.py @@ -57,7 +57,7 @@ class SeznamListView(generic.ListView): self.seznam = get_object_or_404(Seznam, id=self.kwargs["seznam"]) prednasky = Prednaska.objects.filter(seznamy=self.seznam).order_by( 'org__user__first_name', 'org__user__last_name' - ).annotate(body=Sum('hlasovani__body').filter(seznam=self.seznam)) + ).annotate(body=Sum('hlasovani__body')) return prednasky From bd92068b37d4842d646e313cebe94e7f74d61b89 Mon Sep 17 00:00:00 2001 From: LEdoian Date: Mon, 18 Mar 2019 00:34:37 +0100 Subject: [PATCH 028/286] =?UTF-8?q?Prednasky:=20v=20aktu=C3=A1ln=C3=ADch?= =?UTF-8?q?=20v=C3=BDsledc=C3=ADch=20jen=20aktu=C3=A1ln=C3=AD=20v=C3=BDsle?= =?UTF-8?q?dky?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- prednasky/views.py | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/prednasky/views.py b/prednasky/views.py index 1e66ee64..5d4e2eab 100644 --- a/prednasky/views.py +++ b/prednasky/views.py @@ -3,7 +3,7 @@ from django.shortcuts import render, get_object_or_404 from django.views import generic from django.shortcuts import HttpResponseRedirect from django.core.exceptions import ObjectDoesNotExist -from django.db.models import Sum +from django.db.models import Sum, Subquery from prednasky.models import Prednaska, Hlasovani, Seznam, STAV_NAVRH from seminar.models import Soustredeni @@ -55,9 +55,14 @@ class SeznamListView(generic.ListView): def get_queryset(self): self.seznam = get_object_or_404(Seznam, id=self.kwargs["seznam"]) + # Od "annotate" je to hack opsaný ze stack overflow, kterým se filtrují + # jen výsledky z aktuálního seznamu. Dosud se zobrazoval součet bodů u + # přednášky od počátku historie. + # TODO: udělat lépe (Django 2 má Sum s filtrem) prednasky = Prednaska.objects.filter(seznamy=self.seznam).order_by( 'org__user__first_name', 'org__user__last_name' - ).annotate(body=Sum('hlasovani__body')) + ).annotate(body=Subquery(Hlasovani.objects.filter(seznam=self.seznam) + .values('body').annotate(b=Sum('body')).values('b'))) return prednasky From 0aa5faa995c89de3b536bd442bb2e773f2053e64 Mon Sep 17 00:00:00 2001 From: MaM Web user Date: Mon, 18 Mar 2019 00:56:53 +0100 Subject: [PATCH 029/286] =?UTF-8?q?Revert=20"Prednasky:=20v=20aktu=C3=A1ln?= =?UTF-8?q?=C3=ADch=20v=C3=BDsledc=C3=ADch=20jen=20aktu=C3=A1ln=C3=AD=20v?= =?UTF-8?q?=C3=BDsledky"?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Zase to nefungovalo This reverts commit bd92068b37d4842d646e313cebe94e7f74d61b89. --- prednasky/views.py | 9 ++------- 1 file changed, 2 insertions(+), 7 deletions(-) diff --git a/prednasky/views.py b/prednasky/views.py index 5d4e2eab..1e66ee64 100644 --- a/prednasky/views.py +++ b/prednasky/views.py @@ -3,7 +3,7 @@ from django.shortcuts import render, get_object_or_404 from django.views import generic from django.shortcuts import HttpResponseRedirect from django.core.exceptions import ObjectDoesNotExist -from django.db.models import Sum, Subquery +from django.db.models import Sum from prednasky.models import Prednaska, Hlasovani, Seznam, STAV_NAVRH from seminar.models import Soustredeni @@ -55,14 +55,9 @@ class SeznamListView(generic.ListView): def get_queryset(self): self.seznam = get_object_or_404(Seznam, id=self.kwargs["seznam"]) - # Od "annotate" je to hack opsaný ze stack overflow, kterým se filtrují - # jen výsledky z aktuálního seznamu. Dosud se zobrazoval součet bodů u - # přednášky od počátku historie. - # TODO: udělat lépe (Django 2 má Sum s filtrem) prednasky = Prednaska.objects.filter(seznamy=self.seznam).order_by( 'org__user__first_name', 'org__user__last_name' - ).annotate(body=Subquery(Hlasovani.objects.filter(seznam=self.seznam) - .values('body').annotate(b=Sum('body')).values('b'))) + ).annotate(body=Sum('hlasovani__body')) return prednasky From 9c2ac21174a8720b5c7f67e0a73ccbd65d38b24a Mon Sep 17 00:00:00 2001 From: LEdoian Date: Tue, 19 Mar 2019 20:49:19 +0100 Subject: [PATCH 030/286] =?UTF-8?q?V=C3=BDsledkovka:=20s=C4=8D=C3=ADtat=20?= =?UTF-8?q?body,=20pokud=20=C3=BA=C4=8Dastn=C3=ADk=20m=C3=A1=20v=C3=ADc=20?= =?UTF-8?q?bodov=C3=A1n=C3=AD=20ke=20stejn=C3=A9mu=20t=C3=A9m=C3=A1tku?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- seminar/views.py | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/seminar/views.py b/seminar/views.py index 25d72f7f..55e8aa7a 100644 --- a/seminar/views.py +++ b/seminar/views.py @@ -491,7 +491,12 @@ class CisloView(generic.DetailView): # za každé řešení doplníme k příslušnému řešiteli a úloze body for r in reseni: - vysledky_resitele[r.resitel.id].body_ulohy[problem_index[r.problem.id]] = r.body + if r.body is None or vysledky_resitele[r.resitel.id].body_ulohy[problem_index[r.problem.id]] is None: + vysledky_resitele[r.resitel.id].body_ulohy[problem_index[r.problem.id]] = None + elif vysledky_resitele[r.resitel.id].body_ulohy[problem_index[r.problem.id]] == '': + vysledky_resitele[r.resitel.id].body_ulohy[problem_index[r.problem.id]] = r.body + else: + vysledky_resitele[r.resitel.id].body_ulohy[problem_index[r.problem.id]] += r.body context['vysledkovka'] = vysledkovka context['problemy'] = problemy From a6b4d346f55f16e1f7907373e4d6e19281e1fd25 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tom=C3=A1=C5=A1=20Domes?= Date: Tue, 19 Mar 2019 22:05:58 +0100 Subject: [PATCH 031/286] =?UTF-8?q?Vypnut=C3=AD=20ACF=20v=20ck=20editoru?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- mamweb/settings_common.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/mamweb/settings_common.py b/mamweb/settings_common.py index 6d171ca0..590a0a74 100644 --- a/mamweb/settings_common.py +++ b/mamweb/settings_common.py @@ -172,7 +172,8 @@ CKEDITOR_CONFIGS = { # 'toolbar': 'full', 'height': '40em', 'width': '100%', - 'toolbarStartupExpanded': False + 'toolbarStartupExpanded': False, + 'allowedContent' : True, }, } From 27d304bb17169de839802724c21b671ed137ce7e Mon Sep 17 00:00:00 2001 From: "Tomas \"Jethro\" Pokorny" Date: Tue, 19 Mar 2019 23:05:36 +0100 Subject: [PATCH 032/286] Oprava zobrazovani vysledku hlasovani. V seznamu prednasek se zobrazuji pouze body ziskane k danemu sous. --- .../prednasky/seznam_prednasek_export.txt | 14 +------------- prednasky/views.py | 19 +++++++++++++++++-- 2 files changed, 18 insertions(+), 15 deletions(-) diff --git a/prednasky/templates/prednasky/seznam_prednasek_export.txt b/prednasky/templates/prednasky/seznam_prednasek_export.txt index 2defc91e..21d88942 100644 --- a/prednasky/templates/prednasky/seznam_prednasek_export.txt +++ b/prednasky/templates/prednasky/seznam_prednasek_export.txt @@ -1,19 +1,7 @@ {% block content %} {% spaceless %} -{% for hlas in hlasovani %} -hlas({{hlas.ucastnik}},{{hlas.prednaska.id}},{{hlas.body}}) -{% endfor %} -{% for prednaska in prednasky %} -prednaska({{prednaska.id}},{{prednaska.org.id}},{{prednaska.obtiznost}},{{prednaska.obor}}) -{% endfor %} -{% for org in orgove %} -org({{org.id}},4,0,15) -{% endfor %} -{% for org in orgove %} -{{org.id}};{{org}} -{% endfor %} {% for prednaska in prednasky %} -{{prednaska.id}};{{prednaska.nazev}};{{prednaska.org.id}} +{{prednaska.id}};{{prednaska.nazev}};{{prednaska.org}} {{prednaska.body}} {% endfor %} {% endspaceless %} diff --git a/prednasky/views.py b/prednasky/views.py index 1e66ee64..7eee5740 100644 --- a/prednasky/views.py +++ b/prednasky/views.py @@ -57,9 +57,24 @@ class SeznamListView(generic.ListView): self.seznam = get_object_or_404(Seznam, id=self.kwargs["seznam"]) prednasky = Prednaska.objects.filter(seznamy=self.seznam).order_by( 'org__user__first_name', 'org__user__last_name' - ).annotate(body=Sum('hlasovani__body')) + ) return prednasky + # FIXME nahradit anotaci s filtrem po prechodu na Django 2.2 + def get_context_data(self,**kwargs): + context = super(SeznamListView, self).get_context_data(**kwargs) + + # hlasovani se vztahuje k nejnovejsimu soustredeni + sous = Soustredeni.objects.first() + seznam = Seznam.objects.filter(soustredeni = sous, stav = STAV_NAVRH).first() + + for obj in self.object_list: + hlasovani_set = obj.hlasovani_set.filter(seznam=seznam).only('body') + obj.body = sum(map(lambda x: x.body,hlasovani_set)) + + return context + + def SeznamExportView(request, seznam): u"""Vypíše výsledky hlasování ve formátu pro prologovský optimalizátor""" @@ -86,7 +101,7 @@ def SeznamExportView(request, seznam): request, 'prednasky/seznam_prednasek_export.txt', {"hlasovani": hlasovani, "prednasky": prednasky, "orgove": orgove}, - content_type="text/plain" + content_type="text/plain; charset=utf-8" ) From 05e8efd034d1aba766ae1a5f21b3a03d02fe8e3f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20Mus=C3=ADlek?= Date: Fri, 17 May 2019 20:38:54 +0200 Subject: [PATCH 033/286] =?UTF-8?q?Odstran=C4=9Bn=C3=AD=20django-flat-them?= =?UTF-8?q?e,=20kter=C3=A9=20rozb=C3=ADjelo=20admina?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- mamweb/settings_common.py | 1 - requirements.txt | 1 - 2 files changed, 2 deletions(-) diff --git a/mamweb/settings_common.py b/mamweb/settings_common.py index 590a0a74..5dc5f7ca 100644 --- a/mamweb/settings_common.py +++ b/mamweb/settings_common.py @@ -129,7 +129,6 @@ INSTALLED_APPS = ( # 'admin_tools.theming', # 'admin_tools.menu', # 'admin_tools.dashboard', - 'flat', 'django.contrib.admin', ) diff --git a/requirements.txt b/requirements.txt index 02104910..6aac48c9 100644 --- a/requirements.txt +++ b/requirements.txt @@ -20,7 +20,6 @@ django-sekizai==0.10.0 django-countries==5.3.1 django-solo==1.1.3 django-ckeditor==5.6.1 -django-flat-theme==1.1.4 django-taggit==0.23.0 django-autocomplete-light==2.3.6 django-crispy-forms==1.7.2 From 44f1a8228f628de5a1f21d3545b4c026ea4c4c64 Mon Sep 17 00:00:00 2001 From: "Pavel \"LEdoian\" Turinsky" Date: Thu, 23 May 2019 02:04:58 +0200 Subject: [PATCH 034/286] =?UTF-8?q?Galerie:=20Fix=20po=C5=99ad=C3=AD=20obr?= =?UTF-8?q?=C3=A1zk=C5=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Django si původní řazení nepamatuje ani jako sekundární, bylo potřeba napsat explicitně. --- galerie/views.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/galerie/views.py b/galerie/views.py index f7ace3c8..807b6de4 100644 --- a/galerie/views.py +++ b/galerie/views.py @@ -38,7 +38,7 @@ def nahled(request, pk, soustredeni): if not request.user.is_staff: podgalerie = podgalerie.filter(zobrazit__lt=1) - obrazky = Obrazek.objects.filter(galerie = galerie).order_by('poradi') + obrazky = Obrazek.objects.filter(galerie = galerie).order_by('poradi', 'nazev') preview = zobrazit(galerie, request) sourozenci = [] @@ -82,7 +82,7 @@ def detail(request, pk, fotka, soustredeni): galerie = get_object_or_404(Galerie, pk=pk) preview = zobrazit(galerie, request) obrazek = get_object_or_404(Obrazek, pk=fotka) - obrazky = galerie.obrazek_set.all().order_by('poradi') + obrazky = galerie.obrazek_set.all().order_by('poradi', 'nazev') # vytvoreni a obslouzeni formulare if request.method == 'POST': From e39fe78391eda50ebe7ff60d9646ca789c396efd Mon Sep 17 00:00:00 2001 From: "Tomas \"Jethro\" Pokorny" Date: Thu, 25 Jul 2019 20:20:38 +0200 Subject: [PATCH 035/286] Upgradovana verze Djanga na aktualni. --- requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements.txt b/requirements.txt index 6aac48c9..74bcc531 100644 --- a/requirements.txt +++ b/requirements.txt @@ -12,7 +12,7 @@ Unidecode==1.0.22 # Django and modules -Django==1.11.15 +Django==1.11.22 #django-bootstrap-sass django-mptt==0.9.1 django-reversion==2.0.13 From 37b06d6888f594f5a10a63b5a209a23f60f87126 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tom=C3=A1=C5=A1=20Domes?= Date: Tue, 10 Sep 2019 15:12:22 +0200 Subject: [PATCH 036/286] =?UTF-8?q?=C3=9Aprava=20textu=20v=20zadani/aktual?= =?UTF-8?q?ni?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- seminar/templates/seminar/zadani/AktualniZadani.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/seminar/templates/seminar/zadani/AktualniZadani.html b/seminar/templates/seminar/zadani/AktualniZadani.html index b611eee9..77f79db6 100644 --- a/seminar/templates/seminar/zadani/AktualniZadani.html +++ b/seminar/templates/seminar/zadani/AktualniZadani.html @@ -71,7 +71,7 @@ Téma {{problem.kod}}: {{problem.nazev}} {% empty %} - Aktuálně nejsou zadána žádná témata k řešení. + Zadání témat je zatím k dispozici pouze ve formátu PDF - viz aktuální číslo. {% endfor %} From 0d355539a36f028790639f03a826b82aef12fd11 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tom=C3=A1=C5=A1=20Domes?= Date: Tue, 10 Sep 2019 15:34:59 +0200 Subject: [PATCH 037/286] =?UTF-8?q?druh=C3=A1=20=C3=BAprava=20textu=20v=20?= =?UTF-8?q?zadani/aktualni?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- seminar/templates/seminar/zadani/AktualniZadani.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/seminar/templates/seminar/zadani/AktualniZadani.html b/seminar/templates/seminar/zadani/AktualniZadani.html index 77f79db6..273633d2 100644 --- a/seminar/templates/seminar/zadani/AktualniZadani.html +++ b/seminar/templates/seminar/zadani/AktualniZadani.html @@ -71,7 +71,7 @@ Téma {{problem.kod}}: {{problem.nazev}} {% empty %} - Zadání témat je zatím k dispozici pouze ve formátu PDF - viz aktuální číslo. + Zadání témat je zatím k dispozici pouze ve formátu PDF - viz odkaz na aktuální číslo výše. {% endfor %} From 4828c980d1135663ab2f0cf6515df8fc5b1f3aff Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tom=C3=A1=C5=A1=20Domes?= Date: Thu, 26 Sep 2019 14:24:44 +0200 Subject: [PATCH 038/286] =?UTF-8?q?opraven=20odkaz=20v=20textu=20o=20neakt?= =?UTF-8?q?u=C3=A1lnosti=20t=C3=A9mat?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- seminar/templates/seminar/zadani/Temata.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/seminar/templates/seminar/zadani/Temata.html b/seminar/templates/seminar/zadani/Temata.html index 26a88664..679deaee 100644 --- a/seminar/templates/seminar/zadani/Temata.html +++ b/seminar/templates/seminar/zadani/Temata.html @@ -18,7 +18,7 @@

- Pozor, tato stránka není aktuální! Aktualizovaný seznam všech čísel v PDF najdete zde. Za problémy se omlouváme. + Pozor, tato stránka není aktuální! Aktualizovaný seznam všech čísel v PDF najdete zde. Za problémy se omlouváme.

Témata jsou texty nejen z oblasti matematiky, fyziky a informatiky, které From 4a1fe6965c2cee897f67e033878589077852125c Mon Sep 17 00:00:00 2001 From: "Martin Z. (Zimamazim)" Date: Thu, 26 Sep 2019 20:51:05 +0200 Subject: [PATCH 039/286] =?UTF-8?q?P=C5=99id=C3=A1n=20text=20na=20Aktu?= =?UTF-8?q?=C3=A1ln=C3=AD=20t=C3=A9mata,=20=C5=BEe=20je=20najdou=20v=20PDF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../seminar/zadani/AktualniZadani.html | 41 ++++++++++--------- 1 file changed, 22 insertions(+), 19 deletions(-) diff --git a/seminar/templates/seminar/zadani/AktualniZadani.html b/seminar/templates/seminar/zadani/AktualniZadani.html index 273633d2..3c5bc1f1 100644 --- a/seminar/templates/seminar/zadani/AktualniZadani.html +++ b/seminar/templates/seminar/zadani/AktualniZadani.html @@ -35,27 +35,30 @@ {% if ac.pdf %} -

Aktuální číslo v PDF

+

Aktuální témata najdete v aktuálním čísle v PDF.

{% endif %} - {% for sada in jednorazove_problemy %} - {# podnadpisy, kdyz neni zakomentuje se nadpis #} - {% if not sada %}{% endif %} - {# publikace jednotlivych zadani #} - {% for problem in sada %} - {% for tag in problem.zamereni.names %} - - {% endfor %} + + {% if False %} + {% for sada in jednorazove_problemy %} + {# podnadpisy, kdyz neni zakomentuje se nadpis #} + {% if not sada %}{% endif %} + {# publikace jednotlivych zadani #} + {% for problem in sada %} + {% for tag in problem.zamereni.names %} + + {% endfor %} - {# TODO použít {{problem.kod_v_rocniku}} ? vrací 4.u1 místo 4.1 #} -

{{problem.cislo_zadani.cislo}}.{{problem.kod}} {{problem.nazev}} {{ problem.body_v_zavorce }}

- {% autoescape off %}{{problem.text_zadani}}{% endautoescape %} -
- {% endfor %} - {% empty %} - Aktuálně nejsou zadané žádné úlohy k řešení. - {% endfor %} + {# TODO použít {{problem.kod_v_rocniku}} ? vrací 4.u1 místo 4.1 #} +

{{problem.cislo_zadani.cislo}}.{{problem.kod}} {{problem.nazev}} {{ problem.body_v_zavorce }}

+ {% autoescape off %}{{problem.text_zadani}}{% endautoescape %} +
+ {% endfor %} + {% empty %} + Aktuálně nejsou zadané žádné úlohy k řešení. + {% endfor %} + {% endif %} {% if user.is_staff and not verejne%}{% endif %} {% else %} From 95b1e73f816a1c62588a08161fb68c76c5d54d2e Mon Sep 17 00:00:00 2001 From: "Martin Z. (Zimamazim)" Date: Thu, 26 Sep 2019 21:02:17 +0200 Subject: [PATCH 040/286] =?UTF-8?q?Upraven=20posledn=C3=AD=20commit,=20aby?= =?UTF-8?q?=20to=20fungovalo=20(text=20na=20aktu=C3=A1ln=C3=AD=20t=C3=A9ma?= =?UTF-8?q?ta)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- seminar/templates/seminar/zadani/AktualniZadani.html | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/seminar/templates/seminar/zadani/AktualniZadani.html b/seminar/templates/seminar/zadani/AktualniZadani.html index 3c5bc1f1..626ba110 100644 --- a/seminar/templates/seminar/zadani/AktualniZadani.html +++ b/seminar/templates/seminar/zadani/AktualniZadani.html @@ -74,7 +74,11 @@ Téma {{problem.kod}}: {{problem.nazev}} {% empty %} - Zadání témat je zatím k dispozici pouze ve formátu PDF - viz odkaz na aktuální číslo výše. + {% if ac.pdf %} +

Aktuální témata najdete v aktuálním čísle v PDF.

+ {% else %} +

Aktuálně nemáme žádná témata.

+ {% endif %} {% endfor %} From 733beb588eae3558d7b32bd902c9c5b5700977d0 Mon Sep 17 00:00:00 2001 From: "Martin Z. (Zimamazim)" Date: Thu, 26 Sep 2019 21:17:12 +0200 Subject: [PATCH 041/286] Dalsi pokus (text v Aktualnich tematech) --- seminar/templates/seminar/zadani/AktualniZadani.html | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/seminar/templates/seminar/zadani/AktualniZadani.html b/seminar/templates/seminar/zadani/AktualniZadani.html index 626ba110..93fac9a4 100644 --- a/seminar/templates/seminar/zadani/AktualniZadani.html +++ b/seminar/templates/seminar/zadani/AktualniZadani.html @@ -35,7 +35,7 @@ {% if ac.pdf %} -

Aktuální témata najdete v aktuálním čísle v PDF.

+

Aktuální témata najdete v aktuálním čísle v PDF.

{% endif %} {% if False %} @@ -66,6 +66,7 @@ {% endif %} + {% if False %}

Témata

    {% for problem in temata %} @@ -81,6 +82,7 @@ {% endif %} {% endfor %}
+ {% endif %} {% endwith %} From de2b9de120f2aaf3d9515b026bc1f7f40643c0fb Mon Sep 17 00:00:00 2001 From: "Martin Z. (Zimamazim)" Date: Thu, 26 Sep 2019 21:34:06 +0200 Subject: [PATCH 042/286] =?UTF-8?q?Odebr=C3=A1n=20ne=C3=BApln=C3=BD=20sezn?= =?UTF-8?q?am=20t=C3=A9m=C3=A1tek,=20kter=C3=A1=20jsou=20stejn=C4=9B=20jen?= =?UTF-8?q?om=20nadpisy.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- seminar/templates/seminar/zadani/Temata.html | 2 ++ 1 file changed, 2 insertions(+) diff --git a/seminar/templates/seminar/zadani/Temata.html b/seminar/templates/seminar/zadani/Temata.html index 679deaee..9b4e0156 100644 --- a/seminar/templates/seminar/zadani/Temata.html +++ b/seminar/templates/seminar/zadani/Temata.html @@ -29,6 +29,7 @@

Jak řešit téma?

+ {% endwith %} From 9cd49ff7ba5c8aa1df863f37b3df3ddb5b848289 Mon Sep 17 00:00:00 2001 From: "Martin Z. (Zimamazim)" Date: Thu, 26 Sep 2019 21:45:36 +0200 Subject: [PATCH 043/286] =?UTF-8?q?Upraven=20Makefile,=20aby=20=C5=A1el=20?= =?UTF-8?q?pustit=20"make=20deploy=5Ftest"=20i=20p=C5=99es=20symlinky.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Makefile b/Makefile index 51bbdfad..1df825e4 100644 --- a/Makefile +++ b/Makefile @@ -64,7 +64,7 @@ schema_all.pdf: # Deploy to current *mamweb-test* directory deploy_test: @if [ ${USER} != "mam-web" ]; then echo "Only possible by user mam-web"; exit 1; fi - @if [ `pwd` != "/akce/mam/www/mamweb-test" ]; then echo "Only possible in /akce/mam/www/mamweb-test"; exit 1; fi + @if [ `readlink -f .` != "/aux/akce/mam/www/mamweb-test" ]; then echo "Only possible in directory mamweb-test"; exit 1; fi @echo "Installing version from origin/test ..." git pull origin test git clean -f From 5de321788c1eb630cfb8ffb1e5aea68980dfa673 Mon Sep 17 00:00:00 2001 From: "Martin Z. (Zimamazim)" Date: Thu, 26 Sep 2019 21:53:28 +0200 Subject: [PATCH 044/286] =?UTF-8?q?Upraven=20Makefile,=20aby=20=C5=A1el=20?= =?UTF-8?q?pustit=20"make=20deploy=5Fprod"=20i=20p=C5=99es=20symlinky.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Makefile b/Makefile index 1df825e4..11852922 100644 --- a/Makefile +++ b/Makefile @@ -80,7 +80,7 @@ deploy_test: # Deploy to current *mamweb-prod* directory deploy_prod: @if [ ${USER} != "mam-web" ]; then echo "Only possible by user mam-web"; exit 1; fi - @if [ `pwd` != "/akce/mam/www/mamweb-prod" ]; then echo "Only possible in /akce/mam/www/mamweb-prod"; exit 1; fi + @if [ `readlink -f .` != "/aux/akce/mam/www/mamweb-prod" ]; then echo "Only possible in directory mamweb-prod"; exit 1; fi @echo "Backing up production DB ..." ( cd .. && ./backup_prod_db.sh ) @echo "Installing version from origin/master ..." From b3221eab65f91cfe0169ea9b1f4d183830fda62f Mon Sep 17 00:00:00 2001 From: "Martin Z. (Zimamazim)" Date: Thu, 26 Sep 2019 22:01:04 +0200 Subject: [PATCH 045/286] =?UTF-8?q?Upraven=20"deploy=5Fprod"=20v=20Makefil?= =?UTF-8?q?e,=20aby=20v=20n=C4=9Bm=20fungovalo=20"cd=20.."=20odkudkoliv.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Makefile b/Makefile index 11852922..c34c0a0e 100644 --- a/Makefile +++ b/Makefile @@ -82,7 +82,7 @@ deploy_prod: @if [ ${USER} != "mam-web" ]; then echo "Only possible by user mam-web"; exit 1; fi @if [ `readlink -f .` != "/aux/akce/mam/www/mamweb-prod" ]; then echo "Only possible in directory mamweb-prod"; exit 1; fi @echo "Backing up production DB ..." - ( cd .. && ./backup_prod_db.sh ) + ( cd -P .. && ./backup_prod_db.sh ) @echo "Installing version from origin/master ..." git pull origin master git clean -f From 5efed702be5f6b418014f717964c4e64dea31425 Mon Sep 17 00:00:00 2001 From: MaM Web user Date: Sun, 29 Sep 2019 00:37:34 +0200 Subject: [PATCH 046/286] =?UTF-8?q?Makefile:=20sync=5Ftest=20je=20v=C3=ADc?= =?UTF-8?q?=20user-friendly?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Pavel --- Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Makefile b/Makefile index c34c0a0e..33e1f229 100644 --- a/Makefile +++ b/Makefile @@ -99,7 +99,7 @@ deploy_prod: # Sync test media directory with production sync_test_media: @if [ ${USER} != "mam-web" ]; then echo "Only possible by user mam-web"; exit 1; fi - @if [ `pwd` != "/akce/mam/www/mamweb-test" ]; then echo "Only possible in /akce/mam/www/mamweb-test"; exit 1; fi + @if [ `readlink -f .` != "/aux/akce/mam/www/mamweb-test" ]; then echo "Only possible in /akce/mam/www/mamweb-test"; exit 1; fi rsync -av --delete /akce/mam/www/mamweb-prod/media/ ./media # Sync test database with production database From 380e4f1e8244785e67755c2b4ef5cf793e0d21c9 Mon Sep 17 00:00:00 2001 From: MaM Web user Date: Tue, 15 Oct 2019 22:41:29 +0200 Subject: [PATCH 047/286] Makefile: chceme bugfixy 1.11 --- requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements.txt b/requirements.txt index 74bcc531..989f8380 100644 --- a/requirements.txt +++ b/requirements.txt @@ -12,7 +12,7 @@ Unidecode==1.0.22 # Django and modules -Django==1.11.22 +Django<1.12 #django-bootstrap-sass django-mptt==0.9.1 django-reversion==2.0.13 From 5460884da546415a8406659ee9f8212127135a75 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tom=C3=A1=C5=A1=20Domes?= Date: Wed, 13 Nov 2019 22:00:08 +0100 Subject: [PATCH 048/286] =?UTF-8?q?Zm=C4=9Bna=20obr=C3=A1zku=20li=C5=A1?= =?UTF-8?q?=C3=A1ka=20na=20ob=C3=A1lk=C3=A1ch?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- seminar/static/seminar/lisak.eps | 1603 ------------------- seminar/static/seminar/lisak.pdf | Bin 0 -> 1959 bytes seminar/templates/seminar/archiv/obalky.tex | 3 +- seminar/views.py | 2 +- 4 files changed, 3 insertions(+), 1605 deletions(-) delete mode 100644 seminar/static/seminar/lisak.eps create mode 100644 seminar/static/seminar/lisak.pdf diff --git a/seminar/static/seminar/lisak.eps b/seminar/static/seminar/lisak.eps deleted file mode 100644 index 3a136212..00000000 --- a/seminar/static/seminar/lisak.eps +++ /dev/null @@ -1,1603 +0,0 @@ -%%BeginDocument: ./Eps/lisak.eps -%!PS-Adobe-3.0 EPSF-3.0 -%%BoundingBox: -191 -97 769 946 -%%Creator: CorelDRAW 8 -%%Title: L:\Prace\MaM\Obrazky\Lisak.eps -%%CreationDate: Tue May 11 17:28:49 1999 -%%For: Halef -%%DocumentProcessColors: Black -%%DocumentSuppliedResources: (atend) -%%EndComments -%%BeginProlog -/AutoFlatness false def -/AutoSteps 0 def -/CMYKMarks true def -/UseLevel 1 def -%Color profile: PROFILES.CCM - Obecn profil tiskrny CMYK - d. -%%BeginResource: procset wCorel8Dict 8.0 0 -/wCorel8Dict 300 dict def wCorel8Dict begin -% Copyright (c)1992-97 Corel Corporation -% All rights reserved. v8.0 r0.7 -/bd{bind def}bind def/ld{load def}bd/xd{exch def}bd/_ null def/rp{{pop}repeat} -bd/@cp/closepath ld/@gs/gsave ld/@gr/grestore ld/@np/newpath ld/Tl/translate ld -/$sv 0 def/@sv{/$sv save def}bd/@rs{$sv restore}bd/spg/showpage ld/showpage{} -bd currentscreen/@dsp xd/$dsp/@dsp def/$dsa xd/$dsf xd/$sdf false def/$SDF -false def/$Scra 0 def/SetScr/setscreen ld/setscreen{pop pop pop}bd/@ss{2 index -0 eq{$dsf 3 1 roll 4 -1 roll pop}if exch $Scra add exch load SetScr}bd -/SepMode_5 where{pop}{/SepMode_5 0 def}ifelse/CurrentInkName_5 where{pop} -{/CurrentInkName_5(Composite)def}ifelse/$ink_5 where{pop}{/$ink_5 -1 def} -ifelse/$c 0 def/$m 0 def/$y 0 def/$k 0 def/$t 1 def/$n _ def/$o 0 def/$fil 0 -def/$C 0 def/$M 0 def/$Y 0 def/$K 0 def/$T 1 def/$N _ def/$O 0 def/$PF false -def/s1c 0 def/s1m 0 def/s1y 0 def/s1k 0 def/s1t 0 def/s1n _ def/$bkg false def -/SK 0 def/SM 0 def/SY 0 def/SC 0 def/$op false def matrix currentmatrix/$ctm xd -/$ptm matrix def/$ttm matrix def/$stm matrix def/$ffpnt true def -/CorelDrawReencodeVect[16#0/grave 16#5/breve 16#6/dotaccent 16#8/ring -16#A/hungarumlaut 16#B/ogonek 16#C/caron 16#D/dotlessi 16#27/quotesingle -16#60/grave 16#7C/bar -16#82/quotesinglbase/florin/quotedblbase/ellipsis/dagger/daggerdbl -16#88/circumflex/perthousand/Scaron/guilsinglleft/OE -16#91/quoteleft/quoteright/quotedblleft/quotedblright/bullet/endash/emdash -16#98/tilde/trademark/scaron/guilsinglright/oe 16#9F/Ydieresis -16#A1/exclamdown/cent/sterling/currency/yen/brokenbar/section -16#a8/dieresis/copyright/ordfeminine/guillemotleft/logicalnot/minus/registered/macron -16#b0/degree/plusminus/twosuperior/threesuperior/acute/mu/paragraph/periodcentered -16#b8/cedilla/onesuperior/ordmasculine/guillemotright/onequarter/onehalf/threequarters/questiondown -16#c0/Agrave/Aacute/Acircumflex/Atilde/Adieresis/Aring/AE/Ccedilla -16#c8/Egrave/Eacute/Ecircumflex/Edieresis/Igrave/Iacute/Icircumflex/Idieresis -16#d0/Eth/Ntilde/Ograve/Oacute/Ocircumflex/Otilde/Odieresis/multiply -16#d8/Oslash/Ugrave/Uacute/Ucircumflex/Udieresis/Yacute/Thorn/germandbls -16#e0/agrave/aacute/acircumflex/atilde/adieresis/aring/ae/ccedilla -16#e8/egrave/eacute/ecircumflex/edieresis/igrave/iacute/icircumflex/idieresis -16#f0/eth/ntilde/ograve/oacute/ocircumflex/otilde/odieresis/divide -16#f8/oslash/ugrave/uacute/ucircumflex/udieresis/yacute/thorn/ydieresis]def -/L2?/languagelevel where{pop languagelevel 2 ge}{false}ifelse def -/@BeginSysCorelDict{systemdict/Corel30Dict known{systemdict/Corel30Dict get -exec}if systemdict/CorelLexDict known{1 systemdict/CorelLexDict get exec}if}bd -/@EndSysCorelDict{systemdict/Corel30Dict known{end}if/EndCorelLexDict where -{pop EndCorelLexDict}if}bd AutoFlatness{/@ifl{dup currentflat exch sub 10 gt{ -([Error: PathTooComplex; OffendingCommand: AnyPaintingOperator]\n)print flush -@np exit}{currentflat 2 add setflat}ifelse}bd/@fill/fill ld/fill{currentflat{ -{@fill}stopped{@ifl}{exit}ifelse}bind loop setflat}bd/@eofill/eofill ld/eofill -{currentflat{{@eofill}stopped{@ifl}{exit}ifelse}bind loop setflat}bd/@clip -/clip ld/clip{currentflat{{@clip}stopped{@ifl}{exit}ifelse}bind loop setflat} -bd/@eoclip/eoclip ld/eoclip{currentflat{{@eoclip}stopped{@ifl}{exit}ifelse} -bind loop setflat}bd/@stroke/stroke ld/stroke{currentflat{{@stroke}stopped -{@ifl}{exit}ifelse}bind loop setflat}bd}if L2?{/@ssa{true setstrokeadjust}bd}{ -/@ssa{}bd}ifelse/d/setdash ld/j/setlinejoin ld/J/setlinecap ld/M/setmiterlimit -ld/w/setlinewidth ld/O{/$o xd}bd/R{/$O xd}bd/W/eoclip ld/c/curveto ld/C/c ld/l -/lineto ld/L/l ld/rl/rlineto ld/m/moveto ld/n/newpath ld/N/newpath ld/P{11 rp} -bd/u{}bd/U{}bd/A{pop}bd/q/@gs ld/Q/@gr ld/&{}bd/@j{@sv @np}bd/@J{@rs}bd/g{1 -exch sub/$k xd/$c 0 def/$m 0 def/$y 0 def/$t 1 def/$n _ def/$fil 0 def}bd/G{1 -sub neg/$K xd _ 1 0 0 0/$C xd/$M xd/$Y xd/$T xd/$N xd}bd/k{1 index type -/stringtype eq{/$t xd/$n xd}{/$t 0 def/$n _ def}ifelse/$k xd/$y xd/$m xd/$c xd -/$fil 0 def}bd/K{1 index type/stringtype eq{/$T xd/$N xd}{/$T 0 def/$N _ def} -ifelse/$K xd/$Y xd/$M xd/$C xd}bd/x/k ld/X/K ld/sf{1 index type/stringtype eq{ -/s1t xd/s1n xd}{/s1t 0 def/s1n _ def}ifelse/s1k xd/s1y xd/s1m xd/s1c xd}bd/i{ -dup 0 ne{setflat}{pop}ifelse}bd/v{4 -2 roll 2 copy 6 -2 roll c}bd/V/v ld/y{2 -copy c}bd/Y/y ld/@w{matrix rotate/$ptm xd matrix scale $ptm dup concatmatrix -/$ptm xd 1 eq{$ptm exch dup concatmatrix/$ptm xd}if 1 w}bd/@g{1 eq dup/$sdf xd -{/$scp xd/$sca xd/$scf xd}if}bd/@G{1 eq dup/$SDF xd{/$SCP xd/$SCA xd/$SCF xd} -if}bd/@D{2 index 0 eq{$dsf 3 1 roll 4 -1 roll pop}if 3 copy exch $Scra add exch -load SetScr/$dsp xd/$dsa xd/$dsf xd}bd/$ngx{$SDF{$SCF SepMode_5 0 eq{$SCA} -{$dsa}ifelse $SCP @ss}if}bd/p{/$pm xd 7 rp/$pyf xd/$pxf xd/$pn xd/$fil 1 def} -bd/@MN{2 copy le{pop}{exch pop}ifelse}bd/@MX{2 copy ge{pop}{exch pop}ifelse}bd -/InRange{3 -1 roll @MN @MX}bd/@sqr{dup 0 rl dup 0 exch rl neg 0 rl @cp}bd -/currentscale{1 0 dtransform matrix defaultmatrix idtransform dup mul exch dup -mul add sqrt 0 1 dtransform matrix defaultmatrix idtransform dup mul exch dup -mul add sqrt}bd/@unscale{}bd/wDstChck{2 1 roll dup 3 -1 roll eq{1 add}if}bd -/@dot{dup mul exch dup mul add 1 exch sub}bd/@lin{exch pop abs 1 exch sub}bd -/cmyk2rgb{3{dup 5 -1 roll add 1 exch sub dup 0 lt{pop 0}if exch}repeat pop}bd -/rgb2cmyk{3{1 exch sub 3 1 roll}repeat 3 copy @MN @MN 3{dup 5 -1 roll sub neg -exch}repeat}bd/rgb2g{2 index .299 mul 2 index .587 mul add 1 index .114 mul add -4 1 roll pop pop pop}bd/WaldoColor_5 where{pop}{/SetRgb/setrgbcolor ld/GetRgb -/currentrgbcolor ld/SetGry/setgray ld/GetGry/currentgray ld/SetRgb2 systemdict -/setrgbcolor get def/GetRgb2 systemdict/currentrgbcolor get def/SetHsb -systemdict/sethsbcolor get def/GetHsb systemdict/currenthsbcolor get def -/rgb2hsb{SetRgb2 GetHsb}bd/hsb2rgb{3 -1 roll dup floor sub 3 1 roll SetHsb -GetRgb2}bd/setcmykcolor where{pop/SetCmyk_5/setcmykcolor ld}{/SetCmyk_5{ -cmyk2rgb SetRgb}bd}ifelse/currentcmykcolor where{pop/GetCmyk/currentcmykcolor -ld}{/GetCmyk{GetRgb rgb2cmyk}bd}ifelse/setoverprint where{pop}{/setoverprint{ -/$op xd}bd}ifelse/currentoverprint where{pop}{/currentoverprint{$op}bd}ifelse -/@tc_5{5 -1 roll dup 1 ge{pop}{4{dup 6 -1 roll mul exch}repeat pop}ifelse}bd -/@trp{exch pop 5 1 roll @tc_5}bd/setprocesscolor_5{SepMode_5 0 eq{SetCmyk_5}{0 -4 $ink_5 sub index exch pop 5 1 roll pop pop pop pop SepsColor true eq{$ink_5 3 -gt{1 sub neg SetGry}{0 0 0 4 $ink_5 roll SetCmyk_5}ifelse}{1 sub neg SetGry} -ifelse}ifelse}bd/findcmykcustomcolor where{pop}{/findcmykcustomcolor{5 array -astore}bd}ifelse/setcustomcolor where{pop}{/setcustomcolor{exch aload pop -SepMode_5 0 eq{pop @tc_5 setprocesscolor_5}{CurrentInkName_5 eq{4 index}{0} -ifelse 6 1 roll 5 rp 1 sub neg SetGry}ifelse}bd}ifelse/@scc_5{dup type -/booleantype eq{setoverprint}{1 eq setoverprint}ifelse dup _ eq{pop -setprocesscolor_5 pop}{findcmykcustomcolor exch setcustomcolor}ifelse SepMode_5 -0 eq{true}{GetGry 1 eq currentoverprint and not}ifelse}bd/colorimage where{pop -/ColorImage{colorimage}def}{/ColorImage{/ncolors xd pop/dataaq xd{dataaq -ncolors dup 3 eq{/$dat xd 0 1 $dat length 3 div 1 sub{dup 3 mul $dat 1 index -get 255 div $dat 2 index 1 add get 255 div $dat 3 index 2 add get 255 div rgb2g -255 mul cvi exch pop $dat 3 1 roll put}for $dat 0 $dat length 3 idiv -getinterval pop}{4 eq{/$dat xd 0 1 $dat length 4 div 1 sub{dup 4 mul $dat 1 -index get 255 div $dat 2 index 1 add get 255 div $dat 3 index 2 add get 255 div -$dat 4 index 3 add get 255 div cmyk2rgb rgb2g 255 mul cvi exch pop $dat 3 1 -roll put}for $dat 0 $dat length ncolors idiv getinterval}if}ifelse}image}bd -}ifelse/setcmykcolor{1 5 1 roll _ currentoverprint @scc_5/$ffpnt xd}bd -/currentcmykcolor{0 0 0 0}bd/setrgbcolor{rgb2cmyk setcmykcolor}bd -/currentrgbcolor{currentcmykcolor cmyk2rgb}bd/sethsbcolor{hsb2rgb setrgbcolor} -bd/currenthsbcolor{currentrgbcolor rgb2hsb}bd/setgray{dup dup setrgbcolor}bd -/currentgray{currentrgbcolor rgb2g}bd/InsideDCS false def/IMAGE systemdict -/image get def/image{InsideDCS{IMAGE}{/EPSDict where{pop SepMode_5 0 eq{IMAGE} -{dup type/dicttype eq{dup/ImageType get 1 ne{IMAGE}{dup dup/BitsPerComponent -get 8 eq exch/BitsPerComponent get 1 eq or currentcolorspace 0 get/DeviceGray -eq and{CurrentInkName_5(Black)eq{IMAGE}{dup/DataSource get/TCC xd/Height get -abs{TCC pop}repeat}ifelse}{IMAGE}ifelse}ifelse}{2 index 1 ne{CurrentInkName_5 -(Black)eq{IMAGE}{/TCC xd pop pop exch pop abs{TCC pop}repeat}ifelse}{IMAGE} -ifelse}ifelse}ifelse}{IMAGE}ifelse}ifelse}bd}ifelse/WaldoColor_5 true def/@sft -{$tllx $pxf add dup $tllx gt{$pwid sub}if/$tx xd $tury $pyf sub dup $tury lt -{$phei add}if/$ty xd}bd/@stb{pathbbox/$ury xd/$urx xd/$lly xd/$llx xd}bd/@ep{{ -cvx exec}forall}bd/@tp{@sv/$in true def 2 copy dup $lly le{/$in false def}if -$phei sub $ury ge{/$in false def}if dup $urx ge{/$in false def}if $pwid add -$llx le{/$in false def}if $in{@np 2 copy m $pwid 0 rl 0 $phei neg rl $pwid neg -0 rl 0 $phei rl clip @np $pn cvlit load aload pop 7 -1 roll 5 index sub 7 -1 -roll 3 index sub Tl matrix currentmatrix/$ctm xd @ep pop pop pop pop}{pop pop -}ifelse @rs}bd/@th{@sft 0 1 $tly 1 sub{dup $psx mul $tx add{dup $llx gt{$pwid -sub}{exit}ifelse}loop exch $phei mul $ty exch sub 0 1 $tlx 1 sub{$pwid mul 3 -copy 3 -1 roll add exch @tp pop}for pop pop}for}bd/@tv{@sft 0 1 $tlx 1 sub{dup -$pwid mul $tx add exch $psy mul $ty exch sub{dup $ury lt{$phei add}{exit} -ifelse}loop 0 1 $tly 1 sub{$phei mul 3 copy sub @tp pop}for pop pop}for}bd/$fm -0 def/wfill{1 $fm eq{fill}{eofill}ifelse}bd/wclip{1 $fm eq{clip}{eoclip}ifelse -}bd/@pf{@gs $ctm setmatrix $pm concat @stb wclip @sv Bburx Bbury $pm itransform -/$tury xd/$turx xd Bbllx Bblly $pm itransform/$tlly xd/$tllx xd newpath $tllx -$tlly m $tllx $tury l $turx $tury l $turx $tlly l $tllx $tlly m @cp pathbbox -@rs/$tury xd/$turx xd/$tlly xd/$tllx xd/$wid $turx $tllx sub def/$hei $tury -$tlly sub def @gs $vectpat{1 0 0 0 0 _ $o @scc_5{wfill}if}{$t $c $m $y $k $n $o -@scc_5{SepMode_5 0 eq $pfrg or{$tllx $tlly Tl $wid $hei scale <00> 8 1 false[8 -0 0 1 0 0]{}imagemask}{/$bkg true def}ifelse}if}ifelse @gr $wid 0 gt $hei 0 gt -and{$pn cvlit load aload pop/$pd xd 3 -1 roll sub/$phei xd exch sub/$pwid xd -$wid $pwid div ceiling 1 add/$tlx xd $hei $phei div ceiling 1 add/$tly xd $psx -0 eq{@tv}{@th}ifelse}if @gr @np/$bkg false def}bd/@Pf{@sv SepMode_5 0 eq $Psc 0 -ne or $ink_5 3 eq or{0 J 0 j[]0 d $t $c $m $y $k $n $o @scc_5 pop $ctm -setmatrix 72 1000 div dup matrix scale dup concat dup Bburx exch Bbury exch -itransform ceiling cvi/Bbury xd ceiling cvi/Bburx xd Bbllx exch Bblly exch -itransform floor cvi/Bblly xd floor cvi/Bbllx xd $Prm aload pop $Psn load exec -}{1 SetGry wfill}ifelse @rs @np}bd/F{matrix currentmatrix $sdf{$scf $sca $scp -@ss}if $fil 1 eq{@pf}{$fil 2 eq{@ff}{$fil 3 eq{@Pf}{$t $c $m $y $k $n $o @scc_5 -{wfill}{@np}ifelse}ifelse}ifelse}ifelse $sdf{$dsf $dsa $dsp @ss}if setmatrix} -bd/f{@cp F}bd/S{matrix currentmatrix $ctm setmatrix $SDF{$SCF $SCA $SCP @ss}if -$T $C $M $Y $K $N $O @scc_5{matrix currentmatrix $ptm concat stroke setmatrix} -{@np}ifelse $SDF{$dsf $dsa $dsp @ss}if setmatrix}bd/s{@cp S}bd/B{@gs F @gr S} -bd/b{@cp B}bd/_E{5 array astore exch cvlit xd}bd/@cc{currentfile $dat -readhexstring pop}bd/@sm{/$ctm $ctm currentmatrix def}bd/@E{/Bbury xd/Bburx xd -/Bblly xd/Bbllx xd}bd/@c{@cp}bd/@p{/$fil 1 def 1 eq dup/$vectpat xd{/$pfrg true -def}{@gs $t $c $m $y $k $n $o @scc_5/$pfrg xd @gr}ifelse/$pm xd/$psy xd/$psx xd -/$pyf xd/$pxf xd/$pn xd}bd/@P{/$fil 3 def/$Psn xd/$Psc xd array astore/$Prm xd -}bd/@ii{concat 3 index 3 index m 3 index 1 index l 2 copy l 1 index 3 index l 3 -index 3 index l clip pop pop pop pop}bd/tcc{@cc}def/@i{@sm @gs @ii 6 index 1 ne -{/$frg true def pop pop}{1 eq{s1t s1c s1m s1y s1k s1n $O @scc_5/$frg xd}{/$frg -false def}ifelse 1 eq{@gs $ctm setmatrix F @gr}if}ifelse @np/$ury xd/$urx xd -/$lly xd/$llx xd/$bts xd/$hei xd/$wid xd/$dat $wid $bts mul 8 div ceiling cvi -string def $bkg $frg or{$SDF{$SCF $SCA $SCP @ss}if $llx $lly Tl $urx $llx sub -$ury $lly sub scale $bkg{$t $c $m $y $k $n $o @scc_5 pop}if $wid $hei abs $bts -1 eq{$bkg}{$bts}ifelse[$wid 0 0 $hei neg 0 $hei 0 gt{$hei}{0}ifelse]/tcc load -$bts 1 eq{imagemask}{image}ifelse $SDF{$dsf $dsa $dsp @ss}if}{$hei abs{tcc pop} -repeat}ifelse @gr $ctm setmatrix}bd/@I{@sm @gs @ii @np/$ury xd/$urx xd/$lly xd -/$llx xd/$ncl xd/$bts xd/$hei xd/$wid xd/$dat $wid $bts mul $ncl mul 8 div -ceiling cvi string def $ngx $llx $lly Tl $urx $llx sub $ury $lly sub scale $wid -$hei abs $bts[$wid 0 0 $hei neg 0 $hei 0 gt{$hei}{0}ifelse]/@cc load false $ncl -ColorImage $SDF{$dsf $dsa $dsp @ss}if @gr $ctm setmatrix}bd/COMP 0 def -/MaskedImage false def L2?{/@I_2{@sm @gs @ii @np/$ury xd/$urx xd/$lly xd/$llx -xd/$ncl xd/$bts xd/$hei xd/$wid xd/$dat $wid $bts mul $ncl mul 8 div ceiling -cvi string def $ngx $ncl 1 eq{/DeviceGray}{$ncl 3 eq{/DeviceRGB}{/DeviceCMYK} -ifelse}ifelse setcolorspace $llx $lly Tl $urx $llx sub $ury $lly sub scale 8 -dict begin/ImageType 1 def/Width $wid def/Height $hei abs def/BitsPerComponent -$bts def/Decode $ncl 1 eq{[0 1]}{$ncl 3 eq{[0 1 0 1 0 1]}{[0 1 0 1 0 1 0 1]} -ifelse}ifelse def/ImageMatrix[$wid 0 0 $hei neg 0 $hei 0 gt{$hei}{0}ifelse]def -/DataSource currentfile/ASCII85Decode filter COMP 1 eq{/DCTDecode filter}{COMP -2 eq{/RunLengthDecode filter}if}ifelse def currentdict end image $SDF{$dsf $dsa -$dsp @ss}if @gr $ctm setmatrix}bd}{/@I_2{}bd}ifelse/@I_3{@sm @gs @ii @np/$ury -xd/$urx xd/$lly xd/$llx xd/$ncl xd/$bts xd/$hei xd/$wid xd/$dat $wid $bts mul -$ncl mul 8 div ceiling cvi string def $ngx $ncl 1 eq{/DeviceGray}{$ncl 3 eq -{/DeviceRGB}{/DeviceCMYK}ifelse}ifelse setcolorspace $llx $lly Tl $urx $llx sub -$ury $lly sub scale/ImageDataDict 8 dict def ImageDataDict begin/ImageType 1 -def/Width $wid def/Height $hei abs def/BitsPerComponent $bts def/Decode $ncl 1 -eq{[0 1]}{$ncl 3 eq{[0 1 0 1 0 1]}{[0 1 0 1 0 1 0 1]}ifelse}ifelse def -/ImageMatrix[$wid 0 0 $hei neg 0 $hei 0 gt{$hei}{0}ifelse]def/DataSource -currentfile/ASCII85Decode filter COMP 1 eq{/DCTDecode filter}{COMP 2 eq{ -/RunLengthDecode filter}if}ifelse def end/MaskedImageDict 7 dict def -MaskedImageDict begin/ImageType 3 def/InterleaveType 3 def/MaskDict -ImageMaskDict def/DataDict ImageDataDict def end MaskedImageDict image $SDF -{$dsf $dsa $dsp @ss}if @gr $ctm setmatrix}bd/@SetMask{/$mbts xd/$mhei xd/$mwid -xd/ImageMaskDict 8 dict def ImageMaskDict begin/ImageType 1 def/Width $mwid def -/Height $mhei abs def/BitsPerComponent $mbts def/DataSource maskstream def -/ImageMatrix[$mwid 0 0 $mhei neg 0 $mhei 0 gt{$mhei}{0}ifelse]def/Decode[1 0] -def end}bd/@B{@gs S @gr F}bd/@b{@cp @B}bd/@sep{CurrentInkName_5(Composite)eq -{/$ink_5 -1 def}{CurrentInkName_5(Cyan)eq{/$ink_5 0 def}{CurrentInkName_5 -(Magenta)eq{/$ink_5 1 def}{CurrentInkName_5(Yellow)eq{/$ink_5 2 def}{ -CurrentInkName_5(Black)eq{/$ink_5 3 def}{/$ink_5 4 def}ifelse}ifelse}ifelse} -ifelse}ifelse}bd/@whi{@gs -72000 dup m -72000 72000 l 72000 dup l 72000 -72000 -l @cp 1 SetGry fill @gr}bd/@neg{[{1 exch sub}/exec cvx currenttransfer/exec -cvx]cvx settransfer @whi}bd/deflevel 0 def/@sax{/deflevel deflevel 1 add def} -bd/@eax{/deflevel deflevel dup 0 gt{1 sub}if def deflevel 0 gt{/eax load}{eax} -ifelse}bd/eax{{exec}forall}bd/@rax{deflevel 0 eq{@rs @sv}if}bd/@daq{dup type -/arraytype eq{{}forall}if}bd/@BMP{/@cc xd UseLevel 3 eq MaskedImage true eq and -{7 -2 roll pop pop @I_3}{12 index 1 gt UseLevel 2 eq UseLevel 3 eq or and{7 -2 -roll pop pop @I_2}{11 index 1 eq{12 -1 roll pop @i}{7 -2 roll pop pop @I} -ifelse}ifelse}ifelse}bd systemdict/pdfmark known not{/pdfmark/cleartomark ld} -if -end -%%EndResource -%%EndProlog -%%BeginSetup -wCorel8Dict begin -@BeginSysCorelDict -2.6131 setmiterlimit -1.00 setflat -/$fst 128 def -%%EndSetup - -%%Page: 1 1 -%LogicalPage: 1 -%%BeginPageSetup -@sv -@sm -@sv -%%EndPageSetup -@rax %Note: Object -482.82180 -96.51912 768.51780 183.48888 @E - 1 O 0 @g -0.00 0.00 0.00 1.00 k -/$fm 0 def -614.79780 -96.51912 m -610.54980 -96.23112 606.30180 -96.01512 602.05380 -95.79912 C -594.49380 -90.75912 581.53380 -79.52712 580.23780 -71.31912 C -573.54180 -72.90312 569.86980 -76.71912 564.46980 -80.75112 C -552.15780 -82.69512 539.12580 -86.94312 527.60580 -86.36712 C -523.57380 -78.30312 530.26980 -71.10312 536.96580 -68.29512 C -538.76580 -62.10312 543.30180 -61.16712 548.62980 -57.71112 C -548.05380 -50.00712 537.32580 -44.82312 535.88580 -36.61512 C -535.38180 -36.61512 534.87780 -36.61512 534.37380 -36.61512 C -532.50180 -26.82312 531.70980 -26.10312 531.34980 -23.79912 C -533.65380 -22.64712 533.65380 -22.64712 534.37380 -20.77512 C -547.33380 -17.96712 552.58980 -17.03112 564.82980 -26.10312 C -565.04580 -28.04712 576.56580 -35.39112 580.23780 -35.89512 C -582.54180 -11.48712 580.59780 7.59288 565.98180 27.10488 C -565.18980 27.24888 564.39780 27.39288 563.67780 27.46488 C -562.23780 18.17688 557.84580 10.32888 552.01380 2.55288 C -540.92580 -2.05512 538.54980 13.64088 536.60580 19.90488 C -535.81380 19.90488 535.09380 19.90488 534.37380 19.90488 C -529.40580 9.89688 520.69380 -0.83112 508.81380 -0.83112 C -494.26980 8.88888 501.90180 18.60888 506.94180 32.00088 C -510.03780 38.04888 513.13380 44.09688 516.30180 50.07288 C -502.62180 47.69688 487.28580 43.37688 482.82180 60.58488 C -482.82180 75.92088 495.99780 80.81688 508.81380 83.62488 C -509.17380 86.21688 509.17380 86.21688 507.66180 90.03288 C -511.62180 108.96888 509.53380 106.66488 525.73380 108.82488 C -525.80580 109.83288 525.94980 110.84088 526.09380 111.84888 C -531.06180 111.56088 536.31780 105.94488 538.11780 100.54488 C -543.08580 102.27288 544.45380 108.17688 546.75780 112.64088 C -552.80580 120.12888 556.18980 122.79288 556.90980 124.66488 C -559.21380 123.58488 559.21380 123.58488 561.80580 123.94488 C -562.16580 125.09688 562.52580 126.24888 562.95780 127.32888 C -566.34180 126.68088 572.67780 117.10488 574.54980 113.36088 C -574.54980 105.87288 573.68580 99.60888 571.95780 91.54488 C -577.50180 91.83288 580.09380 94.92888 587.00580 94.92888 C -589.95780 92.91288 592.98180 90.89688 596.00580 88.88088 C -606.15780 73.32888 587.65380 57.34488 575.70180 48.20088 C -568.93380 45.17688 568.93380 45.17688 565.54980 42.51288 C -565.40580 41.28888 565.26180 40.06488 565.18980 38.76888 C -565.69380 38.76888 566.19780 38.76888 566.70180 38.76888 C -575.12580 25.16088 585.85380 9.10488 587.72580 -7.95912 C -592.83780 -6.08712 598.74180 27.75288 600.90180 34.23288 C -603.99780 38.76888 605.72580 44.45688 606.87780 49.28088 C -618.97380 73.40088 624.94980 83.19288 625.30980 85.49688 C -605.86980 84.77688 614.79780 105.15288 618.18180 116.38488 C -622.42980 122.72088 625.74180 126.39288 631.35780 131.14488 C -631.21380 151.08888 626.38980 166.28088 648.63780 171.39288 C -648.34980 172.40088 648.13380 173.40888 647.91780 174.41688 C -658.42980 174.05688 660.15780 170.45688 661.45380 158.57688 C -667.93380 160.16088 680.46180 184.42488 687.01380 177.87288 C -688.74180 178.37688 690.46980 178.88088 692.26980 179.38488 C -692.62980 181.25688 692.62980 181.25688 691.47780 183.48888 C -700.90980 182.98488 702.42180 175.13688 702.42180 166.13688 C -697.09380 155.62488 697.09380 155.62488 696.73380 153.32088 C -709.47780 152.88888 712.14180 142.30488 712.14180 129.99288 C -706.95780 120.63288 695.50980 108.96888 684.70980 106.95288 C -681.90180 104.57688 680.74980 103.35288 677.22180 102.84888 C -677.72580 90.24888 664.33380 71.67288 652.38180 67.06488 C -639.49380 70.16088 648.34980 87.36888 644.17380 94.92888 C -643.38180 95.07288 642.58980 95.21688 641.86980 95.28888 C -641.14980 93.41688 637.76580 90.75288 625.66980 72.68088 C -611.91780 47.40888 601.26180 22.64088 597.51780 -6.44712 C -612.63780 -1.04712 612.49380 24.29688 632.07780 22.92888 C -632.07780 22.42488 632.07780 21.92088 632.07780 21.41688 C -632.58180 21.41688 633.08580 21.41688 633.58980 21.41688 C -635.10180 12.99288 632.29380 6.72888 629.84580 -1.98312 C -638.62980 3.99288 643.23780 15.36888 654.68580 18.03288 C -660.01380 23.64888 665.41380 25.95288 672.32580 29.69688 C -673.26180 48.12888 680.02980 58.78488 697.09380 66.63288 C -695.43780 84.92088 694.28580 92.19288 710.26980 103.20888 C -714.08580 103.20888 714.80580 102.48888 721.21380 102.84888 C -721.71780 103.85688 722.22180 104.86488 722.72580 105.87288 C -723.58980 106.01688 724.45380 106.16088 725.31780 106.23288 C -729.06180 102.48888 731.94180 99.75288 732.87780 93.05688 C -740.29380 95.21688 745.04580 103.20888 753.90180 103.20888 C -754.69380 102.48888 754.69380 102.48888 757.64580 102.48888 C -762.03780 106.88088 763.98180 104.50488 768.51780 100.54488 C -767.65380 91.25688 763.33380 83.84088 757.64580 76.06488 C -753.32580 75.05688 749.07780 67.13688 747.92580 62.88888 C -749.36580 62.67288 750.87780 62.38488 752.38980 62.09688 C -754.47780 57.05688 758.79780 53.60088 758.79780 46.25688 C -751.30980 29.62488 738.06180 20.26488 720.06180 20.26488 C -715.45380 15.00888 703.64580 1.47288 695.65380 6.36888 C -691.11780 13.13688 694.57380 20.84088 695.29380 27.46488 C -675.78180 25.01688 656.34180 16.16088 642.66180 2.19288 C -640.35780 -1.55112 638.48580 -2.70312 638.12580 -5.00712 C -643.38180 -5.36712 643.38180 -5.36712 645.25380 -6.44712 C -645.25380 -20.84712 643.74180 -31.14312 637.76580 -44.89512 C -636.25380 -46.40712 636.25380 -46.40712 635.89380 -48.71112 C -648.99780 -49.07112 665.12580 -49.79112 678.73380 -51.73512 C -678.73380 -52.23912 678.73380 -52.74312 678.73380 -53.24712 C -663.39780 -63.61512 643.09380 -80.31912 623.86980 -81.11112 C -625.81380 -93.99912 627.97380 -95.00712 614.79780 -96.51912 C -@c -F - -@rax %Note: Object -587.00580 -92.77512 618.15345 -70.52712 @E - 1 O 0 @g -0.00 0.00 0.00 0.00 k -/$fm 0 def -613.28580 -92.77512 m -609.68580 -86.58312 600.61380 -91.40712 596.79780 -82.62312 C -596.29380 -82.62312 595.78980 -82.62312 595.28580 -82.62312 C -591.61380 -77.36712 589.16580 -75.85512 587.00580 -70.52712 C -594.49380 -70.88712 598.88580 -71.03112 603.92580 -78.08712 C -609.54180 -80.75112 609.54180 -80.75112 617.10180 -82.62312 C -618.39780 -87.15912 619.69380 -92.77512 613.28580 -92.77512 C -@c -F - -@rax %Note: Object -534.37380 -79.95912 573.46980 -64.09020 @E - 1 O 0 @g -0.00 0.00 0.00 0.00 k -/$fm 0 def -535.88580 -79.95912 m -535.38180 -79.81512 534.87780 -79.67112 534.37380 -79.59912 C -539.77380 -60.80712 558.34980 -63.54312 573.46980 -65.27112 C -567.13380 -78.01512 550.14180 -74.19912 539.62980 -78.44712 C -538.11780 -79.95912 538.11780 -79.95912 535.88580 -79.95912 C -@c -F - -@rax %Note: Object -612.20580 -75.42312 656.91780 -55.75946 @E - 1 O 0 @g -0.00 0.00 0.00 0.00 k -/$fm 0 def -620.05380 -75.42312 m -616.88580 -74.63112 612.63780 -68.79912 612.20580 -66.06312 C -630.34980 -54.75912 634.95780 -54.03912 656.91780 -57.71112 C -651.44580 -68.15112 631.64580 -75.42312 620.05380 -75.42312 C -@c -F - -@rax %Note: Object --104.09528 -70.16712 339.97380 514.40088 @E - 1 O 0 @g -0.00 0.00 0.00 1.00 k -/$fm 0 def -226.14180 -70.16712 m -220.81380 -64.83912 220.23780 -58.86312 212.60580 -56.99112 C -211.66980 -58.21512 210.80580 -59.43912 209.94180 -60.73512 C -201.08580 -61.02312 198.63780 -59.36712 198.63780 -50.94312 C -196.04580 -47.41512 195.90180 -47.19912 197.55780 -44.17512 C -195.54180 -44.17512 193.52580 -44.17512 191.50980 -44.17512 C -185.82180 -54.83112 185.96580 -59.22312 174.22980 -61.09512 C -169.18980 -57.71112 169.62180 -56.55912 168.61380 -51.73512 C -167.67780 -51.59112 166.81380 -51.44712 165.94980 -51.30312 C -153.34980 -67.43112 148.02180 -71.17512 140.38980 -51.73512 C -133.62180 -54.32712 133.62180 -54.32712 127.64580 -58.07112 C -116.48580 -58.07112 114.75780 -54.18312 114.10980 -44.89512 C -106.04580 -45.47112 99.63780 -55.19112 92.29380 -59.58312 C -89.26980 -59.58312 86.24580 -59.58312 83.29380 -59.58312 C -78.46980 -54.75912 78.32580 -52.81512 78.75780 -47.19912 C -72.06180 -48.49512 70.47780 -55.11912 62.19780 -55.11912 C -57.66180 -49.35912 58.38180 -47.05512 57.73380 -40.43112 C -53.91780 -41.51112 53.91780 -41.51112 47.94180 -44.53512 C -24.54180 -44.53512 29.36580 -27.11112 40.45380 -14.36712 C -48.66180 -9.83112 47.79780 -10.62312 56.94180 -10.62312 C -77.24580 9.68088 33.90180 36.53688 22.38180 45.17688 C -2.36580 55.18488 -17.72220 68.07288 -33.99420 82.11288 C --37.66620 83.91288 -45.44220 89.60088 -47.53020 90.03288 C --47.53020 90.53688 -47.53020 91.04088 -47.53020 91.54488 C --60.56220 102.63288 -68.84220 110.04888 -77.98620 122.43288 C --79.49820 126.96888 -82.52220 130.71288 -91.52220 146.55288 C --107.50620 182.40888 -113.69820 219.12888 -77.62620 243.46488 C --59.26620 249.65688 -50.26620 247.64088 -30.25020 244.90488 C --29.31420 243.96888 -8.21820 236.12088 -4.69020 235.47288 C --4.47420 234.89688 -4.25820 234.24888 -3.97020 233.60088 C -4.23780 232.23288 8.19780 227.40888 16.33380 224.96088 C -16.33380 224.45688 16.33380 223.95288 16.33380 223.44888 C -19.06980 221.93688 21.80580 220.42488 24.61380 218.91288 C -24.61380 218.40888 24.61380 217.90488 24.61380 217.40088 C -34.26180 213.44088 44.84580 189.68088 49.45380 178.95288 C -57.08580 182.84088 50.60580 193.78488 52.04580 201.56088 C -52.04580 207.82488 50.82180 221.00088 54.27780 226.47288 C -51.61380 269.67288 66.66180 315.53688 81.34980 355.35288 C -84.37380 359.09688 84.37380 359.09688 93.37380 377.96088 C -109.71780 400.35288 123.39780 430.23288 135.49380 454.85688 C -141.97380 473.57688 150.68580 493.88088 154.28580 512.88888 C -155.43780 514.04088 155.43780 514.04088 159.97380 514.40088 C -154.71780 483.22488 139.81380 451.47288 126.13380 422.81688 C -125.62980 422.74488 125.12580 422.60088 124.62180 422.45688 C -120.37380 404.38488 103.74180 389.55288 97.90980 371.91288 C -95.10180 366.44088 92.36580 360.89688 89.62980 355.35288 C -85.74180 353.91288 78.18180 327.84888 76.88580 320.64888 C -67.23780 302.07288 65.14980 271.11288 61.04580 249.80088 C -61.04580 236.98488 58.81380 218.91288 58.09380 200.84088 C -60.32580 164.62488 60.32580 164.62488 60.32580 155.62488 C -58.74180 153.96888 56.79780 151.88088 54.70980 151.44888 C -51.18180 157.92888 51.54180 163.25688 47.50980 168.44088 C -36.99780 191.04888 34.04580 195.51288 32.53380 199.32888 C -8.77380 229.06488 -34.28220 244.61688 -70.85820 238.92888 C --76.76220 236.55288 -83.81820 233.74488 -86.26620 227.19288 C --102.17820 211.28088 -97.06620 190.32888 -93.82620 169.95288 C --88.28220 156.12888 -74.09820 119.55288 -59.55420 113.36088 C --56.60220 108.10488 -39.97020 91.18488 -32.48220 90.03288 C --32.48220 89.52888 -32.48220 89.02488 -32.48220 88.52088 C --29.38620 86.79288 -26.29020 84.99288 -23.12220 83.19288 C --23.05020 82.76088 -22.90620 82.25688 -22.76220 81.75288 C --12.17820 77.00088 -1.16220 63.75288 10.35780 61.01688 C -12.51780 58.85688 23.53380 52.52088 27.63780 51.58488 C -30.73380 43.16088 45.27780 42.15288 49.45380 32.72088 C -57.15780 29.98488 64.71780 19.11288 67.81380 10.83288 C -67.81380 2.33688 69.61380 -5.36712 63.70980 -12.85512 C -51.18180 -16.23912 38.50980 -18.90312 38.50980 -34.38312 C -40.02180 -35.89512 40.02180 -35.89512 40.45380 -37.40712 C -44.70180 -36.75912 48.94980 -36.11112 53.19780 -35.46312 C -55.71780 -31.14312 61.33380 -27.83112 66.37380 -28.33512 C -66.37380 -34.31112 64.93380 -40.14312 65.22180 -47.19912 C -77.38980 -43.45512 72.70980 -30.92712 84.80580 -29.84712 C -85.23780 -36.90312 83.86980 -43.88712 85.52580 -51.73512 C -98.26980 -50.72712 104.67780 -40.64712 115.62180 -34.74312 C -119.43780 -25.23912 121.30980 -18.18312 132.90180 -16.31112 C -132.90180 -17.03112 132.90180 -17.75112 132.90180 -18.54312 C -145.64580 -14.65512 139.59780 -8.46312 143.77380 0.32088 C -143.77380 10.11288 143.77380 19.90488 143.77380 29.69688 C -140.89380 49.49688 138.66180 68.86488 134.77380 87.72888 C -134.77380 126.68088 107.70180 164.26488 107.70180 203.07288 C -106.18980 206.88888 103.16580 233.24088 102.44580 233.96088 C -96.32580 258.51288 101.07780 285.94488 102.44580 310.13688 C -103.16580 313.16088 104.67780 314.67288 105.10980 319.20888 C -106.69380 318.99288 108.27780 318.70488 109.93380 318.41688 C -107.70180 289.76088 107.70180 289.76088 106.90980 289.04088 C -106.90980 256.85688 110.65380 226.04088 114.46980 193.28088 C -117.99780 181.11288 123.18180 165.92088 124.98180 152.60088 C -132.97380 144.60888 141.75780 91.54488 143.77380 80.96088 C -145.28580 64.40088 146.79780 59.07288 150.54180 24.44088 C -150.25380 12.63288 150.03780 0.82488 149.82180 -10.98312 C -142.69380 -25.31112 131.67780 -18.75912 123.46980 -31.35912 C -122.31780 -36.47112 119.14980 -44.46312 122.38980 -49.79112 C -132.46980 -55.04712 136.21380 -39.35112 146.43780 -38.48712 C -146.94180 -45.25512 146.07780 -50.58312 150.18180 -56.55912 C -153.20580 -56.55912 153.20580 -56.55912 158.02980 -54.75912 C -161.05380 -47.91912 167.10180 -38.12712 169.76580 -32.43912 C -171.49380 -32.58312 173.22180 -32.72712 175.02180 -32.87112 C -175.38180 -47.19912 175.38180 -47.19912 176.53380 -52.09512 C -185.67780 -52.09512 184.38180 -46.40712 187.40580 -38.91912 C -188.91780 -21.71112 190.71780 -3.85512 184.38180 12.34488 C -183.22980 23.36088 182.43780 30.12888 184.02180 40.28088 C -183.51780 40.28088 183.01380 40.28088 182.50980 40.28088 C -182.07780 54.39288 183.30180 68.14488 184.38180 81.75288 C -180.13380 90.10488 179.41380 99.39288 177.97380 107.74488 C -177.46980 107.88888 176.96580 108.03288 176.53380 108.10488 C -175.38180 114.87288 176.10180 115.66488 175.02180 124.66488 C -165.66180 122.50488 166.02180 122.57688 163.35780 131.50488 C -163.35780 140.50488 164.07780 141.29688 164.79780 148.06488 C -164.07780 148.78488 164.79780 167.64888 164.07780 193.28088 C -163.06980 201.63288 162.06180 209.91288 161.05380 218.19288 C -155.72580 218.62488 156.51780 215.52888 151.33380 219.70488 C -145.57380 239.93688 152.98980 260.88888 153.92580 280.76088 C -151.69380 280.40088 149.46180 278.09688 147.94980 278.09688 C -138.22980 287.81688 162.34980 335.91288 163.71780 344.84088 C -157.59780 344.26488 152.19780 327.63288 146.79780 332.74488 C -146.79780 337.28088 148.30980 340.30488 149.02980 344.04888 C -154.21380 353.62488 179.55780 393.36888 177.97380 404.02488 C -177.18180 404.02488 176.46180 404.02488 175.74180 404.02488 C -172.50180 400.13688 170.77380 397.18488 165.94980 397.18488 C -161.48580 401.64888 168.97380 410.14488 171.56580 414.17688 C -179.26980 431.45688 190.14180 449.60088 194.17380 467.67288 C -198.34980 473.50488 197.91780 485.24088 205.04580 486.53688 C -205.90980 467.38488 189.92580 438.80088 181.35780 421.66488 C -178.83780 419.14488 179.19780 419.72088 178.76580 415.68888 C -181.71780 416.33688 184.74180 416.98488 187.76580 417.56088 C -188.48580 417.05688 189.20580 416.55288 189.99780 416.04888 C -191.29380 396.46488 165.15780 373.42488 160.69380 352.32888 C -165.30180 354.99288 168.03780 359.52888 173.50980 359.52888 C -175.02180 358.01688 175.02180 358.01688 175.38180 356.14488 C -166.45380 336.92088 159.68580 321.44088 155.43780 300.34488 C -160.90980 303.08088 156.58980 308.91288 165.58980 307.83288 C -165.58980 305.60088 165.58980 303.36888 165.58980 301.06488 C -159.75780 280.61688 156.73380 260.09688 156.22980 238.49688 C -158.60580 239.36088 158.53380 240.94488 159.18180 243.03288 C -161.41380 243.03288 163.64580 243.03288 165.94980 243.03288 C -167.53380 211.42488 170.62980 179.60088 171.99780 147.27288 C -172.57380 147.56088 173.22180 147.84888 173.86980 148.06488 C -175.38180 156.34488 175.38180 156.34488 177.97380 163.11288 C -179.70180 163.11288 181.50180 163.11288 183.30180 163.11288 C -183.44580 155.55288 183.22980 150.65688 181.35780 142.80888 C -182.14980 125.45688 182.86980 124.66488 182.50980 114.87288 C -183.01380 114.87288 183.51780 114.87288 184.02180 114.87288 C -183.58980 104.00088 184.02180 99.75288 188.55780 89.24088 C -194.53380 90.68088 208.35780 129.05688 211.45380 136.76088 C -212.17380 144.03288 211.81380 152.16888 219.73380 145.76088 C -220.30980 140.50488 220.95780 135.24888 221.60580 129.99288 C -222.46980 130.28088 223.33380 130.49688 224.19780 130.71288 C -227.22180 138.27288 230.24580 143.52888 236.22180 160.08888 C -240.54180 168.58488 241.83780 180.75288 248.31780 187.23288 C -248.17380 189.75288 248.02980 192.27288 247.95780 194.79288 C -251.70180 195.15288 251.70180 195.15288 254.72580 194.07288 C -257.02980 188.81688 259.40580 183.56088 261.78180 178.23288 C -262.42980 178.16088 263.07780 178.01688 263.72580 177.87288 C -270.13380 197.96088 269.34180 223.44888 269.34180 243.82488 C -270.85380 247.56888 270.85380 252.10488 272.00580 253.97688 C -279.99780 252.46488 282.73380 238.78488 284.74980 231.00888 C -286.62180 231.72888 286.62180 231.72888 287.41380 233.24088 C -288.34980 262.04088 284.53380 290.98488 285.90180 319.20888 C -287.41380 320.64888 287.41380 320.64888 289.28580 321.08088 C -292.52580 318.48888 296.05380 311.43288 300.51780 310.49688 C -301.95780 318.27288 294.10980 335.98488 291.87780 343.32888 C -288.85380 349.44888 278.77380 368.96088 282.08580 374.21688 C -287.12580 374.57688 290.29380 369.39288 294.90180 370.40088 C -292.66980 377.96088 292.66980 377.96088 289.64580 384.72888 C -280.64580 397.54488 267.10980 413.38488 266.74980 414.89688 C -246.51780 429.87288 232.18980 452.55288 221.24580 473.72088 C -218.22180 477.03288 215.19780 480.27288 212.17380 483.51288 C -210.66180 488.76888 210.66180 488.76888 209.22180 490.28088 C -211.09380 510.51288 215.34180 492.22488 219.73380 488.76888 C -221.10180 480.63288 230.31780 470.04888 233.98980 460.90488 C -249.03780 440.52888 249.03780 440.52888 258.03780 430.73688 C -260.98980 429.65688 276.03780 412.37688 276.46980 410.36088 C -276.97380 410.36088 277.47780 410.36088 277.98180 410.36088 C -277.98180 409.85688 277.98180 409.35288 277.98180 408.84888 C -278.48580 408.84888 278.98980 408.84888 279.49380 408.84888 C -279.56580 408.12888 279.70980 407.40888 279.85380 406.61688 C -290.94180 394.23288 299.29380 382.49688 303.54180 365.14488 C -304.04580 365.14488 304.54980 365.14488 305.05380 365.14488 C -307.21380 360.82488 305.41380 356.50488 300.51780 356.50488 C -297.78180 360.10488 295.26180 362.26488 291.51780 362.91288 C -295.04580 340.80888 308.43780 322.30488 308.43780 297.32088 C -307.93380 296.60088 307.42980 295.88088 306.92580 295.08888 C -306.06180 295.01688 305.19780 294.87288 304.33380 294.72888 C -300.15780 298.83288 297.13380 307.11288 292.30980 307.83288 C -291.87780 298.04088 294.18180 258.08088 294.18180 236.98488 C -293.82180 231.08088 295.76580 212.72088 287.77380 210.99288 C -285.10980 215.16888 285.10980 215.16888 283.23780 220.42488 C -283.81380 220.71288 284.46180 220.92888 285.10980 221.14488 C -284.96580 221.79288 284.82180 222.44088 284.74980 223.08888 C -279.20580 225.39288 278.91780 232.88088 277.98180 237.77688 C -277.18980 237.77688 276.46980 237.77688 275.74980 237.77688 C -274.95780 215.02488 274.38180 188.52888 268.54980 165.41688 C -265.88580 162.60888 265.59780 162.39288 262.21380 162.39288 C -261.78180 165.92088 261.42180 169.44888 261.06180 172.90488 C -255.37380 175.56888 255.80580 176.93688 253.93380 181.61688 C -252.92580 181.76088 251.91780 181.90488 250.90980 181.97688 C -241.54980 157.85688 233.91780 137.69688 230.24580 111.84888 C -224.41380 90.17688 215.55780 70.01688 207.70980 48.56088 C -204.68580 32.00088 204.68580 32.00088 198.63780 6.36888 C -198.34980 -8.96712 198.06180 -23.22312 199.42980 -38.91912 C -202.45380 -46.40712 202.45380 -46.40712 203.53380 -51.30312 C -204.75780 -51.30312 206.05380 -51.30312 207.34980 -51.30312 C -210.44580 -47.48712 209.86980 -46.40712 209.58180 -41.94312 C -212.67780 -39.99912 212.38980 -39.99912 216.70980 -40.43112 C -220.02180 -46.98312 220.45380 -54.18312 225.34980 -61.88712 C -226.42980 -61.74312 227.58180 -61.59912 228.73380 -61.52712 C -231.54180 -54.68712 230.46180 -45.90312 230.60580 -38.91912 C -239.53380 -41.51112 238.95780 -53.60712 247.16580 -53.60712 C -255.94980 -42.66312 244.14180 -32.29512 236.22180 -26.10312 C -229.30980 -11.55912 231.68580 13.49688 240.75780 25.16088 C -253.06980 55.32888 270.13380 81.17688 285.90180 108.82488 C -309.94980 168.44088 309.94980 168.44088 314.41380 181.97688 C -323.34180 215.45688 327.30180 248.64888 330.97380 282.27288 C -335.36580 286.23288 330.39780 325.25688 334.35780 332.38488 C -343.35780 332.38488 338.10180 314.16888 339.97380 306.39288 C -337.02180 261.89688 337.02180 261.89688 334.71780 245.26488 C -329.67780 231.72888 328.23780 216.46488 326.50980 201.56088 C -318.51780 172.68888 307.14180 144.53688 296.41380 116.38488 C -281.36580 88.52088 278.34180 84.70488 269.70180 67.78488 C -269.19780 67.71288 268.69380 67.56888 268.18980 67.42488 C -253.06980 37.47288 235.93380 15.65688 240.75780 -18.54312 C -245.22180 -24.23112 254.14980 -28.83912 256.16580 -37.40712 C -257.89380 -37.26312 259.62180 -37.11912 261.42180 -36.97512 C -264.94980 -41.15112 275.67780 -57.85512 284.38980 -56.19912 C -284.24580 -52.88712 284.10180 -49.64712 284.02980 -46.40712 C -289.57380 -47.41512 293.53380 -48.35112 294.54180 -55.47912 C -295.04580 -55.47912 295.54980 -55.47912 296.05380 -55.47912 C -293.74980 -61.59912 290.86980 -64.04712 285.54180 -68.65512 C -274.09380 -65.34312 266.67780 -52.81512 254.72580 -52.81512 C -250.18980 -60.66312 250.33380 -63.03912 241.18980 -60.73512 C -241.18980 -60.23112 241.18980 -59.72712 241.18980 -59.22312 C -239.67780 -58.71912 238.16580 -58.21512 236.65380 -57.71112 C -234.27780 -63.32712 233.34180 -70.16712 226.14180 -70.16712 C -@c -F - -@rax %Note: Object -298.07433 -67.14312 601.62180 853.66488 @E - 1 O 0 @g -0.00 0.00 0.00 1.00 k -/$fm 0 def -303.54180 -67.14312 m -302.02980 -66.63912 300.51780 -66.13512 299.07780 -65.63112 C -297.92580 -63.03912 297.92580 -63.03912 298.28580 -58.86312 C -300.01380 -58.86312 301.74180 -58.86312 303.54180 -58.86312 C -307.50180 -54.90312 306.70980 -44.53512 306.20580 -39.63912 C -311.10180 -39.27912 311.10180 -39.27912 314.05380 -40.43112 C -320.82180 -51.30312 322.69380 -52.45512 323.84580 -55.11912 C -327.30180 -54.97512 330.82980 -54.83112 334.35780 -54.75912 C -334.35780 -53.75112 334.35780 -52.74312 334.35780 -51.73512 C -334.86180 -51.73512 335.36580 -51.73512 335.86980 -51.73512 C -337.02180 -47.19912 337.02180 -47.19912 337.02180 -44.17512 C -327.80580 -25.67112 327.44580 -15.66312 330.25380 3.34488 C -332.34180 8.96088 337.16580 16.08888 338.17380 21.41688 C -338.74980 21.70488 339.32580 21.92088 339.97380 22.13688 C -346.38180 37.68888 373.66980 51.36888 389.29380 57.20088 C -406.57380 69.87288 430.47780 82.11288 444.51780 98.31288 C -454.38180 105.65688 464.31780 113.14488 470.43780 123.94488 C -483.39780 133.95288 486.99780 162.24888 488.86980 178.23288 C -482.38980 195.80088 481.30980 201.92088 463.66980 206.52888 C -442.64580 206.52888 442.64580 206.52888 441.92580 205.73688 C -427.74180 200.55288 413.19780 196.66488 399.80580 190.68888 C -390.22980 183.20088 380.72580 175.64088 371.22180 168.08088 C -364.52580 159.51288 354.22980 131.28888 347.89380 130.35288 C -345.30180 132.94488 346.23780 134.60088 346.02180 137.48088 C -354.87780 167.43288 364.52580 198.24888 369.34980 228.70488 C -381.44580 270.10488 388.86180 308.91288 390.37380 351.60888 C -388.86180 373.42488 388.86180 373.42488 384.39780 409.64088 C -383.60580 411.15288 382.88580 417.92088 381.37380 420.94488 C -380.58180 425.48088 379.86180 426.20088 373.81380 456.36888 C -370.86180 464.64888 364.81380 475.95288 358.83780 489.56088 C -357.03780 501.72888 349.69380 514.11288 345.66180 524.98488 C -344.65380 524.98488 343.64580 524.98488 342.63780 524.98488 C -342.27780 528.00888 340.76580 529.52088 339.25380 533.26488 C -338.60580 536.79288 337.95780 540.32088 337.38180 543.84888 C -336.87780 543.84888 336.37380 543.84888 335.86980 543.84888 C -332.77380 559.97688 327.80580 575.81688 324.99780 591.29688 C -321.32580 630.10488 322.76580 667.40088 323.48580 705.92088 C -327.94980 740.55288 327.94980 740.55288 329.46180 744.36888 C -331.33380 745.16088 333.20580 745.88088 335.14980 746.60088 C -336.44580 742.85688 334.28580 731.98488 332.48580 728.52888 C -328.95780 684.89688 327.44580 639.46488 331.76580 595.11288 C -335.36580 576.75288 339.75780 557.74488 345.66180 539.31288 C -346.23780 539.09688 346.88580 538.80888 347.53380 538.52088 C -349.40580 530.09688 353.86980 523.11288 357.32580 514.40088 C -358.18980 514.18488 359.05380 513.96888 359.91780 513.68088 C -365.89380 545.43288 375.18180 574.88088 382.88580 605.62488 C -401.53380 651.27288 424.42980 692.74488 448.26180 736.01688 C -458.12580 763.37688 472.38180 786.70488 476.84580 815.93688 C -476.84580 828.60888 479.58180 841.92888 482.46180 853.66488 C -484.47780 853.66488 486.49380 853.66488 488.50980 853.66488 C -488.43780 834.94488 486.13380 815.36088 490.38180 796.35288 C -493.26180 789.72888 496.14180 783.10488 499.02180 776.40888 C -507.44580 777.41688 514.14180 809.96088 526.09380 807.29688 C -527.24580 805.42488 527.24580 805.42488 528.68580 798.58488 C -528.25380 776.55288 526.81380 759.12888 533.65380 737.52888 C -534.58980 737.67288 535.59780 737.81688 536.60580 737.96088 C -542.22180 746.60088 542.22180 746.60088 552.80580 766.18488 C -555.39780 767.33688 555.39780 767.33688 558.42180 767.33688 C -560.29380 765.46488 560.43780 756.53688 558.78180 753.36888 C -560.14980 737.67288 562.88580 723.27288 565.98180 707.43288 C -566.41380 707.43288 566.91780 707.43288 567.42180 707.43288 C -567.78180 704.40888 568.57380 703.61688 572.31780 692.31288 C -577.57380 664.44888 579.08580 660.63288 582.10980 642.56088 C -585.13380 631.25688 588.08580 615.41688 589.59780 611.67288 C -596.79780 564.80088 599.96580 516.05688 601.62180 467.67288 C -598.74180 428.57688 594.06180 394.52088 585.85380 356.14488 C -581.31780 341.81688 579.87780 340.30488 573.82980 321.44088 C -555.82980 286.30488 540.78180 254.48088 516.66180 222.65688 C -508.52580 217.97688 501.32580 198.68088 493.04580 196.30488 C -492.61380 194.28888 492.25380 192.27288 491.89380 190.25688 C -492.90180 188.02488 493.90980 185.79288 494.91780 183.48888 C -496.28580 148.49688 481.45380 117.60888 452.43780 96.44088 C -426.80580 70.80888 395.05380 55.11288 364.81380 36.46488 C -364.45380 35.88888 364.09380 35.24088 363.73380 34.59288 C -342.70980 24.87288 336.66180 4.78488 335.50980 -17.03112 C -341.55780 -32.94312 352.06980 -51.66312 333.63780 -64.11912 C -322.83780 -64.11912 320.60580 -52.88712 314.05380 -51.73512 C -313.26180 -57.99912 312.10980 -67.14312 303.54180 -67.14312 C -@c -F - -@rax %Note: Object -541.14180 -56.55912 585.85380 -26.96088 @E - 1 O 0 @g -0.00 0.00 0.00 0.00 k -/$fm 0 def -570.44580 -56.55912 m -563.46180 -53.24712 556.11780 -54.68712 552.44580 -47.91912 C -551.94180 -47.91912 551.43780 -47.91912 550.93380 -47.91912 C -547.26180 -39.20712 540.42180 -37.55112 541.14180 -27.18312 C -559.35780 -25.95912 558.78180 -29.70312 574.18980 -40.43112 C -577.35780 -44.96712 579.73380 -50.07912 585.49380 -52.81512 C -585.56580 -53.46312 585.70980 -54.11112 585.85380 -54.75912 C -583.26180 -55.11912 580.23780 -53.60712 574.18980 -53.96712 C -573.90180 -54.83112 573.68580 -55.69512 573.46980 -56.55912 C -572.46180 -56.55912 571.45380 -56.55912 570.44580 -56.55912 C -@c -F - -@rax %Note: Object -598.30980 -56.55912 637.40580 -21.56712 @E - 1 O 0 @g -0.00 0.00 0.00 0.00 k -/$fm 0 def -602.77380 -56.55912 m -601.26180 -56.41512 599.74980 -56.27112 598.30980 -56.19912 C -599.82180 -48.35112 607.95780 -48.63912 614.07780 -44.53512 C -618.90180 -36.90312 629.98980 -23.79912 637.40580 -21.56712 C -635.82180 -34.02312 633.87780 -42.37512 624.58980 -50.58312 C -612.56580 -53.60712 605.79780 -56.55912 602.77380 -56.55912 C -@c -F - -@rax %Note: Object --189.56041 -47.56365 -38.17020 169.95288 @E - 1 O 0 @g -0.00 0.00 0.00 1.00 k -/$fm 0 def --111.46620 -47.55912 m --128.09820 -39.13512 -147.17820 -16.16712 -147.17820 2.55288 C --140.19420 11.33688 -142.42620 15.65688 -129.46620 11.98488 C --126.51420 9.96888 -106.42620 -5.72712 -103.90620 -5.72712 C --103.90620 -6.44712 -103.90620 -7.16712 -103.90620 -7.95912 C --98.93820 -11.48712 -95.91420 -15.59112 -91.88220 -21.13512 C --91.01820 -20.99112 -90.15420 -20.84712 -89.29020 -20.77512 C --90.73020 17.67288 -95.98620 41.64888 -120.10620 71.88888 C --120.75420 72.17688 -121.40220 72.46488 -121.97820 72.68088 C --121.97820 73.18488 -121.97820 73.68888 -121.97820 74.19288 C --122.98620 74.19288 -123.99420 74.19288 -125.00220 74.19288 C --128.31420 62.02488 -131.12220 48.20088 -146.02620 48.20088 C --155.53020 54.17688 -156.82620 67.49688 -155.02620 77.21688 C --164.09820 76.35288 -177.56220 44.96088 -189.29820 60.58488 C --190.30620 82.25688 -189.44220 95.07288 -172.37820 109.97688 C --172.30620 110.91288 -172.16220 111.77688 -172.01820 112.64088 C --188.43420 129.48888 -190.16220 134.16888 -186.63420 157.13688 C --185.91420 157.49688 -185.19420 157.85688 -184.40220 158.21688 C --179.79420 172.11288 -168.70620 168.87288 -158.05020 163.54488 C --157.33020 161.60088 -150.92220 156.34488 -150.56220 154.83288 C --149.55420 154.97688 -148.54620 155.12088 -147.53820 155.26488 C --142.85820 161.88888 -136.01820 162.17688 -133.28220 169.95288 C --112.76220 169.01688 -117.44220 150.00888 -120.89820 135.24888 C --120.75420 133.73688 -120.61020 132.22488 -120.46620 130.71288 C --87.05820 139.13688 -95.77020 106.80888 -106.57020 87.72888 C --110.53020 84.27288 -112.69020 83.26488 -117.44220 81.75288 C --115.42620 71.88888 -107.36220 66.48888 -102.39420 56.84088 C --92.89020 53.31288 -84.17820 2.62488 -82.52220 -6.44712 C --81.65820 -6.51912 -80.79420 -6.66312 -79.85820 -6.80712 C --69.99420 3.05688 -64.23420 16.66488 -52.06620 24.80088 C --42.34620 34.52088 -41.98620 32.50488 -38.17020 19.90488 C --38.17020 -14.36712 -48.53820 -36.83112 -85.11420 -42.30312 C --95.12220 -47.91912 -100.81020 -47.55912 -111.46620 -47.55912 C -@c -F - -@rax %Note: Object -588.87780 -47.55912 627.61380 15.36888 @E - 1 O 0 @g -0.00 0.00 0.00 0.00 k -/$fm 0 def -590.74980 -47.55912 m -590.10180 -47.12712 589.45380 -46.76712 588.87780 -46.40712 C -588.87780 -37.62312 595.42980 -24.01512 599.38980 -17.03112 C -599.53380 -16.81512 619.54980 13.92888 627.61380 15.36888 C -626.38980 4.42488 602.70180 -47.55912 590.74980 -47.55912 C -@c -F - -@rax %Note: Object --139.86539 -40.79112 -93.03420 6.00888 @E - 1 O 0 @g -0.00 0.00 0.00 0.00 k -/$fm 0 def --106.21020 -40.79112 m --121.61820 -36.83112 -128.67420 -23.43912 -137.38620 -11.77512 C --138.68220 -4.14312 -143.29020 0.39288 -135.51420 6.00888 C --126.94620 6.00888 -99.94620 -15.08712 -98.65020 -24.59112 C --93.82620 -27.83112 -94.40220 -31.28712 -93.03420 -37.40712 C --94.18620 -38.48712 -99.44220 -39.99912 -106.21020 -40.79112 C -@c -F - -@rax %Note: Object --81.37020 -33.23112 -44.62016 20.62488 @E - 1 O 0 @g -0.00 0.00 0.00 0.00 k -/$fm 0 def --77.62620 -33.23112 m --78.92220 -32.72712 -80.14620 -32.22312 -81.37020 -31.71912 C --83.60220 -18.25512 -57.89820 18.39288 -45.29820 20.62488 C --41.84220 -1.04712 -51.41820 -33.23112 -77.62620 -33.23112 C -@c -F - -@rax %Note: Object -629.12580 -17.39112 637.40580 -7.95912 @E - 1 O 0 @g -0.00 0.00 0.00 0.00 k -/$fm 0 def -630.63780 -17.39112 m -629.48580 -16.31112 629.48580 -16.31112 629.12580 -14.00712 C -632.94180 -12.56712 632.79780 -8.75112 637.40580 -7.95912 C -635.38980 -11.99112 633.80580 -14.22312 630.63780 -17.39112 C -@c -F - -@rax %Note: Object -506.97326 6.00888 539.26980 55.32888 @E - 1 O 0 @g -0.00 0.00 0.00 0.00 k -/$fm 0 def -509.53380 6.00888 m -498.73380 12.70488 521.55780 53.60088 533.65380 55.32888 C -534.73380 50.79288 536.31780 48.56088 539.26980 44.02488 C -537.68580 32.57688 522.99780 6.00888 509.53380 6.00888 C -@c -F - -@rax %Note: Object -543.60794 8.96088 557.79506 45.17688 @E - 1 O 0 @g -0.00 0.00 0.00 0.00 k -/$fm 0 def -547.18980 8.96088 m -543.80580 18.10488 540.78180 38.04888 547.90980 45.17688 C -549.49380 45.03288 551.14980 44.88888 552.80580 44.74488 C -552.87780 44.31288 553.02180 43.80888 553.16580 43.30488 C -554.17380 43.08888 555.18180 42.80088 556.18980 42.51288 C -560.22180 31.20888 556.26180 18.68088 549.42180 8.96088 C -548.62980 8.96088 547.90980 8.96088 547.18980 8.96088 C -@c -F - -@rax %Note: Object -188.91780 12.34488 223.83780 123.15288 @E - 1 O 0 @g -0.00 0.00 0.00 0.00 k -/$fm 0 def -191.50980 12.34488 m -189.42180 32.00088 188.91780 50.28888 188.91780 69.65688 C -193.81380 75.56088 193.81380 77.28888 194.89380 84.70488 C -201.37380 96.80088 206.41380 110.98488 212.96580 122.43288 C -213.82980 122.72088 214.69380 122.93688 215.62980 123.15288 C -216.42180 121.06488 216.49380 121.35288 219.37380 120.12888 C -218.22180 117.89688 218.22180 117.89688 218.22180 113.36088 C -220.09380 111.48888 220.38180 110.76888 223.83780 110.33688 C -214.26180 85.35288 203.24580 59.36088 198.63780 32.72088 C -195.39780 29.48088 195.68580 21.27288 195.68580 16.16088 C -195.03780 15.94488 194.38980 15.65688 193.81380 15.36888 C -193.52580 14.50488 193.23780 13.64088 193.02180 12.77688 C -192.51780 12.63288 192.01380 12.48888 191.50980 12.34488 C -@c -F - -@rax %Note: Object -699.67219 12.77688 716.67780 40.64088 @E - 1 O 0 @g -0.00 0.00 0.00 0.00 k -/$fm 0 def -700.54980 12.77688 m -697.38180 15.72888 703.35780 27.96888 704.65380 32.00088 C -708.39780 36.17688 709.83780 39.92088 715.59780 40.64088 C -715.95780 35.52888 716.31780 30.34488 716.67780 25.16088 C -711.78180 20.55288 706.95780 14.14488 700.54980 12.77688 C -@c -F - -@rax %Note: Object -724.59780 27.82488 753.30454 57.27969 @E - 1 O 0 @g -0.00 0.00 0.00 0.00 k -/$fm 0 def -728.34180 27.82488 m -727.04580 28.25688 725.82180 28.61688 724.59780 28.97688 C -727.18980 37.97688 727.98180 38.76888 728.34180 41.79288 C -727.69380 42.08088 727.04580 42.29688 726.46980 42.51288 C -726.46980 43.30488 726.46980 44.02488 726.46980 44.74488 C -736.69380 52.23288 737.55780 60.94488 753.18180 55.76088 C -755.55780 42.58488 740.72580 27.82488 728.34180 27.82488 C -@c -F - -@rax %Note: Object -678.83386 34.59288 711.42180 59.81074 @E - 1 O 0 @g -0.00 0.00 0.00 0.00 k -/$fm 0 def -680.24580 34.59288 m -674.98980 39.84888 685.14180 50.14488 687.73380 54.24888 C -699.68580 60.94488 699.03780 62.02488 711.42180 55.32888 C -711.42180 42.51288 689.67780 34.59288 680.24580 34.59288 C -@c -F - -@rax %Note: Object -719.07591 48.20088 727.83128 59.07288 @E - 1 O 0 @g -0.00 0.00 0.00 0.00 k -/$fm 0 def -719.34180 48.20088 m -718.90980 53.81688 718.90980 53.81688 720.06180 59.07288 C -727.62180 58.71288 730.28580 58.92888 725.31780 51.22488 C -720.85380 48.20088 720.85380 48.20088 719.34180 48.20088 C -@c -F - -@rax %Note: Object -557.36759 50.79288 593.94898 88.52088 @E - 1 O 0 @g -0.00 0.00 0.00 0.00 k -/$fm 0 def -558.42180 50.79288 m -555.54180 56.62488 559.35780 65.84088 560.29380 71.16888 C -570.22980 81.10488 576.06180 89.38488 591.54180 88.52088 C -601.98180 73.76088 578.36580 56.62488 565.98180 51.22488 C -563.46180 51.08088 560.94180 50.93688 558.42180 50.79288 C -@c -F - -@rax %Note: Object -540.92665 51.58488 551.95087 69.33402 @E - 1 O 0 @g -0.00 0.00 0.00 0.00 k -/$fm 0 def -541.86180 51.58488 m -540.78180 56.84088 540.78180 56.84088 541.14180 59.50488 C -541.71780 59.86488 542.36580 60.22488 543.01380 60.58488 C -543.22980 62.88888 543.44580 65.19288 543.73380 67.42488 C -555.61380 76.28088 554.38980 52.73688 541.86180 51.58488 C -@c -F - -@rax %Note: Object -488.86980 54.24888 525.73380 75.31569 @E - 1 O 0 @g -0.00 0.00 0.00 0.00 k -/$fm 0 def -496.78980 54.24888 m -492.75780 56.12088 490.81380 56.98488 488.86980 59.86488 C -488.86980 72.96888 502.11780 78.15288 513.34980 73.83288 C -517.16580 68.93688 519.25380 65.33688 525.73380 62.88888 C -524.94180 58.71288 501.68580 54.24888 496.78980 54.24888 C -@c -F - -@rax %Note: Object --148.92803 55.76088 -131.77020 92.92195 @E - 1 O 0 @g -0.00 0.00 0.00 0.00 k -/$fm 0 def --145.30620 55.76088 m --145.81020 55.90488 -146.31420 56.04888 -146.81820 56.12088 C --150.41820 68.28888 -149.05020 78.72888 -145.66620 90.03288 C --141.63420 92.55288 -138.03420 95.72088 -137.02620 88.52088 C --136.52220 88.52088 -136.01820 88.52088 -135.51420 88.52088 C --130.25820 81.03288 -129.53820 60.58488 -139.25820 55.76088 C --141.27420 55.76088 -143.29020 55.76088 -145.30620 55.76088 C -@c -F - -@rax %Note: Object --184.04220 63.24888 -154.66620 105.08088 @E - 1 O 0 @g -0.00 0.00 0.00 0.00 k -/$fm 0 def --182.89020 63.24888 m --183.32220 63.89688 -183.68220 64.54488 -184.04220 65.12088 C --184.04220 83.04888 -181.16220 106.30488 -158.48220 105.08088 C --157.69020 100.54488 -156.17820 98.31288 -154.66620 90.03288 C --160.06620 82.11288 -173.89020 63.24888 -182.89020 63.24888 C -@c -F - -@rax %Note: Object -726.10980 64.04088 761.46180 97.16088 @E - 1 O 0 @g -0.00 0.00 0.00 0.00 k -/$fm 0 def -731.36580 64.04088 m -729.85380 65.55288 729.85380 65.55288 726.10980 66.63288 C -734.53380 86.00088 738.70980 95.00088 761.46180 97.16088 C -762.39780 85.92888 740.36580 64.04088 731.36580 64.04088 C -@c -F - -@rax %Note: Object -701.93367 66.63288 726.32353 97.52088 @E - 1 O 0 @g -0.00 0.00 0.00 0.00 k -/$fm 0 def -714.80580 66.63288 m -714.80580 67.13688 714.80580 67.64088 714.80580 68.14488 C -711.99780 68.07288 709.26180 67.92888 706.52580 67.78488 C -694.86180 84.92088 706.81380 98.45688 724.95780 97.52088 C -728.12580 89.81688 725.74980 83.26488 719.70180 77.21688 C -718.98180 73.68888 718.62180 68.28888 714.80580 66.63288 C -@c -F - -@rax %Note: Object -514.93266 70.01688 535.14000 103.06035 @E - 1 O 0 @g -0.00 0.00 0.00 0.00 k -/$fm 0 def -533.65380 70.01688 m -516.73380 80.31288 510.75780 83.19288 517.81380 102.05688 C -521.55780 103.20888 521.55780 103.20888 530.19780 102.84888 C -536.10180 92.40888 535.38180 82.97688 534.73380 70.37688 C -534.37380 70.30488 534.01380 70.16088 533.65380 70.01688 C -@c -F - -@rax %Note: Object -651.61899 74.55288 671.53380 110.33688 @E - 1 O 0 @g -0.00 0.00 0.00 0.00 k -/$fm 0 def -654.68580 74.55288 m -653.67780 74.69688 652.66980 74.84088 651.66180 74.91288 C -651.51780 89.88888 651.30180 97.80888 658.42980 110.33688 C -659.65380 110.33688 660.87780 110.33688 662.17380 110.33688 C -662.46180 105.51288 666.63780 104.36088 671.53380 102.05688 C -670.45380 89.31288 664.69380 84.77688 656.19780 74.55288 C -655.69380 74.55288 655.18980 74.55288 654.68580 74.55288 C -@c -F - -@rax %Note: Object -544.45153 76.85688 568.13386 119.04888 @E - 1 O 0 @g -0.00 0.00 0.00 0.00 k -/$fm 0 def -550.14180 76.85688 m -549.63780 77.36088 549.13380 77.86488 548.62980 78.36888 C -547.33380 78.22488 546.10980 78.08088 544.88580 77.93688 C -543.08580 96.22488 546.10980 107.31288 561.44580 119.04888 C -562.45380 119.04888 563.46180 119.04888 564.46980 119.04888 C -574.54980 108.96888 561.87780 76.85688 550.14180 76.85688 C -@c -F - -@rax %Note: Object --133.33408 89.67288 -102.20400 126.60888 @E - 1 O 0 @g -0.00 0.00 0.00 0.00 k -/$fm 0 def --119.74620 89.67288 m --134.07420 91.25688 -135.15420 102.99288 -131.77020 115.30488 C --122.12220 122.14488 -117.80220 126.60888 -105.41820 126.60888 C --97.57020 116.16888 -105.56220 101.26488 -110.31420 90.75288 C --113.69820 89.67288 -113.69820 89.67288 -119.74620 89.67288 C -@c -F - -@rax %Note: Object -580.23780 90.75288 584.77380 93.05688 @E - 1 O 0 @g -0.00 0.00 0.00 0.00 k -/$fm 0 def -580.23780 90.75288 m -580.23780 91.54488 580.23780 92.33688 580.23780 93.05688 C -581.74980 92.98488 583.26180 92.84088 584.77380 92.69688 C -583.26180 92.04888 581.74980 91.40088 580.23780 90.75288 C -@c -F - -@rax %Note: Object -619.22239 92.69688 651.30180 125.09688 @E - 1 O 0 @g -0.00 0.00 0.00 0.00 k -/$fm 0 def -620.84580 92.69688 m -614.72580 102.56088 626.24580 119.33688 633.58980 125.09688 C -638.84580 125.09688 639.63780 124.30488 650.94180 123.94488 C -650.50980 117.17688 651.30180 115.66488 651.30180 113.36088 C -642.87780 105.65688 632.00580 94.06488 620.84580 92.69688 C -@c -F - -@rax %Note: Object --152.07420 97.95288 -138.89820 120.81515 @E - 1 O 0 @g -0.00 0.00 0.00 0.00 k -/$fm 0 def --148.25820 97.95288 m --149.05020 98.31288 -149.84220 98.67288 -150.56220 99.03288 C --150.56220 99.53688 -150.56220 100.04088 -150.56220 100.54488 C --151.06620 100.54488 -151.57020 100.54488 -152.07420 100.54488 C --152.00220 106.01688 -150.41820 129.41688 -138.89820 117.89688 C --138.89820 111.84888 -139.97820 97.95288 -148.25820 97.95288 C -@c -F - -@rax %Note: Object -668.58180 110.76888 708.03780 145.07943 @E - 1 O 0 @g -0.00 0.00 0.00 0.00 k -/$fm 0 def -672.68580 110.76888 m -671.31780 111.63288 669.94980 112.49688 668.58180 113.36088 C -668.58180 118.54488 672.10980 120.41688 675.34980 123.94488 C -678.15780 136.40088 691.04580 146.55288 704.29380 145.04088 C -705.08580 142.66488 704.86980 142.16088 708.03780 140.50488 C -704.50980 120.41688 691.98180 113.93688 672.68580 110.76888 C -@c -F - -@rax %Note: Object --183.02854 116.81688 -152.93820 161.29474 @E - 1 O 0 @g -0.00 0.00 0.00 0.00 k -/$fm 0 def --167.12220 116.81688 m --180.44220 127.32888 -186.49020 138.92088 -181.01820 154.83288 C --174.03420 163.47288 -170.21820 162.17688 -160.35420 158.57688 C --160.35420 158.14488 -160.35420 157.64088 -160.35420 157.13688 C --148.83420 149.00088 -153.73020 135.89688 -155.45820 123.15288 C --159.77820 119.69688 -161.72220 116.81688 -167.12220 116.81688 C -@c -F - -@rax %Note: Object -659.14980 119.04888 668.26687 128.48088 @E - 1 O 0 @g -0.00 0.00 0.00 0.00 k -/$fm 0 def -659.14980 119.04888 m -658.64580 125.24088 662.82180 127.54488 668.22180 128.48088 C -668.43780 124.23288 667.93380 123.72888 665.55780 119.40888 C -663.39780 119.33688 661.23780 119.19288 659.14980 119.04888 C -@c -F - -@rax %Note: Object --144.71291 122.79288 -122.98989 162.75288 @E - 1 O 0 @g -0.00 0.00 0.00 0.00 k -/$fm 0 def --134.72220 122.79288 m --138.10620 125.60088 -140.62620 127.25688 -144.51420 126.17688 C --144.15420 144.39288 -147.97020 150.65688 -134.00220 162.75288 C --114.05820 162.75288 -126.08220 134.38488 -130.97820 123.58488 C --132.49020 122.79288 -132.49020 122.79288 -134.72220 122.79288 C -@c -F - -@rax %Note: Object -665.14394 133.73688 696.37380 175.20888 @E - 1 O 0 @g -0.00 0.00 0.00 0.00 k -/$fm 0 def -665.91780 133.73688 m -665.48580 143.16888 662.89380 150.65688 670.09380 157.85688 C -671.31780 163.11288 683.91780 172.11288 688.52580 174.84888 C -690.97380 174.99288 693.49380 175.13688 696.01380 175.20888 C -696.08580 172.47288 696.22980 169.73688 696.37380 166.92888 C -692.62980 159.36888 674.98980 135.96888 665.91780 133.73688 C -@c -F - -@rax %Note: Object -636.69175 135.60888 655.88287 167.28888 @E - 1 O 0 @g -0.00 0.00 0.00 0.00 k -/$fm 0 def -638.84580 135.60888 m -634.02180 140.43288 638.41380 156.77688 640.35780 162.39288 C -644.96580 164.04888 645.25380 167.28888 652.38180 167.28888 C -656.91780 162.75288 657.06180 142.59288 652.74180 135.96888 C -648.06180 135.89688 643.45380 135.75288 638.84580 135.60888 C -@c -F - -@rax %Note: Object -694.14180 147.70488 699.03780 151.80888 @E - 1 O 0 @g -0.00 0.00 0.00 0.00 k -/$fm 0 def -694.50180 147.70488 m -694.35780 148.85688 694.21380 150.00888 694.14180 151.08888 C -695.22180 151.37688 696.37380 151.59288 697.52580 151.80888 C -697.52580 151.30488 697.52580 150.80088 697.52580 150.29688 C -698.02980 150.29688 698.53380 150.29688 699.03780 150.29688 C -698.74980 149.72088 698.46180 149.07288 698.24580 148.42488 C -696.94980 148.20888 695.72580 147.99288 694.50180 147.70488 C -@c -F - -@rax %Note: Object -363.73380 173.69688 594.13380 799.37688 @E - 1 O 0 @g -0.00 0.00 0.00 0.00 k -/$fm 0 def -363.73380 173.69688 m -364.81380 180.46488 370.86180 203.07288 376.83780 231.00888 C -377.62980 231.72888 380.58180 242.31288 381.37380 243.03288 C -388.42980 277.59288 394.98180 310.78488 397.93380 345.56088 C -397.93380 357.65688 397.14180 359.09688 397.14180 367.44888 C -391.16580 413.38488 391.16580 413.38488 390.37380 414.17688 C -387.27780 428.14488 383.38980 442.18488 381.73380 455.64888 C -381.22980 455.64888 380.72580 455.64888 380.22180 455.64888 C -379.06980 462.41688 376.11780 469.18488 372.73380 482.79288 C -372.22980 482.79288 371.72580 482.79288 371.22180 482.79288 C -369.78180 488.33688 368.41380 493.88088 367.04580 499.35288 C -365.74980 522.24888 371.22180 547.44888 378.70980 568.32888 C -379.28580 568.25688 379.93380 568.11288 380.58180 567.96888 C -382.52580 555.94488 384.25380 532.25688 398.29380 526.85688 C -416.29380 526.85688 428.74980 537.72888 443.36580 547.95288 C -444.37380 548.09688 445.38180 548.24088 446.38980 548.31288 C -446.74980 547.59288 447.10980 546.87288 447.54180 546.08088 C -448.18980 527.43288 444.30180 464.28888 473.46180 464.28888 C -484.40580 472.35288 489.80580 482.21688 499.02180 491.43288 C -499.88580 491.36088 500.74980 491.21688 501.68580 491.07288 C -501.68580 479.26488 501.68580 467.45688 501.68580 455.64888 C -503.62980 446.21688 505.14180 430.52088 514.78980 424.32888 C -533.72580 424.32888 535.09380 444.48888 550.14180 446.57688 C -552.80580 426.20088 552.80580 426.20088 553.52580 412.66488 C -558.06180 400.20888 568.28580 389.19288 582.10980 399.84888 C -582.10980 405.60888 575.12580 403.44888 571.23780 403.59288 C -570.80580 404.38488 570.44580 405.17688 570.08580 405.89688 C -567.70980 406.18488 565.33380 406.40088 562.95780 406.61688 C -558.42180 421.08888 558.13380 435.20088 556.54980 449.60088 C -553.88580 452.98488 552.44580 453.34488 552.44580 454.85688 C -541.35780 452.62488 536.46180 446.28888 529.47780 438.29688 C -525.51780 435.27288 521.77380 431.16888 517.09380 431.16888 C -501.97380 449.96088 511.54980 482.93688 506.58180 504.60888 C -489.51780 503.96088 486.27780 471.84888 466.69380 471.84888 C -457.62180 480.92088 455.89380 512.24088 455.02980 523.47288 C -455.02980 533.26488 455.24580 549.03288 451.64580 557.38488 C -450.13380 557.52888 448.62180 557.67288 447.18180 557.74488 C -433.71780 551.33688 410.60580 528.22488 396.78180 535.13688 C -386.98980 553.20888 386.62980 568.25688 386.62980 588.27288 C -398.36580 638.45688 425.07780 681.44088 449.77380 726.22488 C -452.00580 732.27288 455.02980 736.80888 467.05380 762.44088 C -471.44580 774.75288 475.83780 787.06488 480.22980 799.37688 C -480.94980 799.37688 481.66980 799.37688 482.46180 799.37688 C -491.10180 775.97688 491.10180 775.97688 495.63780 766.18488 C -496.78980 765.10488 496.78980 765.10488 500.17380 765.46488 C -506.50980 775.54488 514.35780 784.90488 519.32580 795.63288 C -520.33380 795.63288 521.34180 795.63288 522.34980 795.63288 C -522.27780 785.91288 517.59780 728.88888 536.60580 728.88888 C -539.62980 731.91288 539.62980 731.91288 549.42180 748.47288 C -550.28580 748.40088 551.14980 748.25688 552.01380 748.11288 C -552.80580 746.60088 552.80580 746.60088 554.24580 728.52888 C -562.09380 698.00088 570.66180 668.62488 576.06180 636.51288 C -588.37380 596.69688 589.59780 550.11288 594.13380 508.35288 C -593.34180 506.12088 593.34180 506.12088 594.13380 462.41688 C -589.16580 405.24888 584.19780 356.21688 557.26980 304.88088 C -549.56580 283.92888 537.10980 267.87288 527.24580 247.56888 C -526.30980 247.06488 525.44580 246.56088 524.58180 246.05688 C -523.93380 236.48088 501.54180 217.68888 494.55780 206.52888 C -493.54980 206.16888 492.54180 205.80888 491.53380 205.37688 C -491.24580 204.29688 490.95780 203.14488 490.74180 201.99288 C -489.22980 201.20088 489.22980 201.20088 485.48580 201.56088 C -473.38980 217.90488 461.94180 215.45688 443.36580 214.01688 C -434.29380 211.42488 427.88580 209.69688 420.10980 205.01688 C -396.27780 205.01688 384.46980 179.60088 363.73380 173.69688 C -@c -F - -@rax %Note: Object --27.22620 483.15288 195.36180 602.63660 @E - 1 O 0 @g -0.00 0.00 0.00 1.00 k -/$fm 0 def -41.17380 483.15288 m -28.42980 484.80888 15.75780 488.33688 5.46180 494.81688 C -5.17380 497.26488 -3.32220 500.57688 -5.41020 502.01688 C --8.14620 507.20088 -12.17820 508.56888 -13.69020 512.88888 C --14.69820 513.32088 -15.70620 513.68088 -16.71420 514.04088 C --18.51420 521.31288 -28.16220 522.68088 -27.22620 533.62488 C --24.27420 535.92888 -24.27420 535.92888 -22.76220 535.92888 C --19.09020 532.25688 -16.64220 520.80888 -9.94620 518.93688 C --7.42620 513.68088 5.60580 506.04888 6.61380 502.37688 C -11.86980 499.71288 11.86980 499.71288 22.38180 496.32888 C -22.38180 495.82488 22.38180 495.32088 22.38180 494.81688 C -42.68580 491.43288 42.68580 491.43288 49.45380 491.43288 C -50.96580 492.22488 69.75780 494.45688 93.80580 498.99288 C -97.04580 501.29688 100.28580 503.52888 103.59780 505.76088 C -113.24580 507.41688 132.90180 522.96888 137.79780 530.24088 C -149.24580 539.38488 155.79780 556.44888 160.33380 569.48088 C -160.18980 575.24088 160.04580 581.00088 159.97380 586.76088 C -160.54980 587.04888 161.19780 587.33688 161.84580 587.55288 C -161.91780 588.56088 162.06180 589.56888 162.20580 590.57688 C -161.41380 590.57688 160.69380 590.57688 159.97380 590.57688 C -158.31780 595.32888 157.09380 597.41688 158.02980 601.88088 C -159.18180 602.02488 160.33380 602.16888 161.48580 602.24088 C -171.63780 596.26488 182.58180 604.47288 194.53380 602.24088 C -195.61380 599.57688 195.54180 598.56888 194.89380 595.11288 C -185.24580 594.03288 175.38180 593.67288 166.74180 590.57688 C -167.17380 560.98488 161.62980 547.16088 141.54180 523.47288 C -141.39780 522.75288 141.25380 521.96088 141.18180 521.16888 C -157.23780 523.47288 169.69380 532.11288 180.99780 543.48888 C -183.01380 543.63288 185.02980 543.77688 187.04580 543.84888 C -187.04580 543.34488 187.04580 542.84088 187.04580 542.33688 C -187.54980 542.33688 188.05380 542.33688 188.55780 542.33688 C -186.97380 530.81688 155.58180 517.78488 146.43780 513.32088 C -143.98980 513.46488 141.61380 513.60888 139.23780 513.68088 C -138.87780 515.48088 138.51780 517.20888 138.15780 518.93688 C -130.59780 516.70488 129.37380 509.86488 121.59780 507.27288 C -98.70180 490.35288 68.89380 483.15288 41.17380 483.15288 C -@c -F - -@rax %Note: Object --72.73020 540.46488 248.32205 910.38784 @E - 1 O 0 @g -0.00 0.00 0.00 1.00 k -/$fm 0 def --45.29820 540.46488 m --47.60220 540.96888 -49.83420 541.47288 -52.06620 541.97688 C --66.61020 549.10488 -69.77820 554.50488 -72.73020 569.48088 C --69.85020 596.98488 -42.77820 613.40088 -26.14620 585.24888 C --25.06620 582.00888 -23.91420 578.76888 -22.76220 575.45688 C --8.65020 576.46488 6.90180 589.35288 18.63780 596.98488 C -30.87780 608.64888 58.81380 634.71288 58.81380 653.14488 C -56.50980 655.95288 54.27780 658.68888 52.04580 661.42488 C -50.24580 677.76888 50.96580 688.49688 54.27780 703.61688 C -57.01380 707.72088 57.94980 708.87288 56.22180 712.68888 C -55.71780 712.68888 55.21380 712.68888 54.70980 712.68888 C -53.34180 720.75288 49.66980 727.52088 55.42980 733.42488 C -56.94180 733.06488 58.45380 732.70488 59.96580 732.27288 C -61.62180 739.47288 62.12580 740.26488 67.81380 744.36888 C -66.66180 752.07288 62.62980 751.85688 58.45380 756.03288 C -54.78180 761.14488 53.12580 763.73688 48.66180 766.61688 C -33.32580 785.33688 13.45380 808.37688 5.46180 830.26488 C -3.94980 838.54488 3.15780 850.64088 0.20580 866.48088 C -1.28580 881.31288 6.03780 894.99288 7.69380 908.67288 C -11.29380 912.27288 14.38980 909.39288 18.63780 907.59288 C -29.94180 905.79288 40.16580 903.63288 51.68580 900.03288 C -52.69380 897.00888 74.43780 889.37688 79.54980 888.29688 C -79.54980 887.79288 79.54980 887.28888 79.54980 886.78488 C -80.26980 886.78488 80.98980 886.78488 81.78180 886.78488 C -81.78180 886.28088 81.78180 885.77688 81.78180 885.27288 C -84.66180 884.19288 90.70980 879.08088 90.06180 874.40088 C -84.01380 875.40888 84.08580 878.79288 80.26980 881.16888 C -68.74980 882.60888 58.74180 890.02488 47.94180 892.83288 C -47.94180 893.33688 47.94180 893.84088 47.94180 894.34488 C -36.27780 897.15288 25.04580 900.46488 13.74180 899.60088 C -12.22980 894.34488 11.43780 893.62488 11.07780 891.32088 C -17.70180 889.08888 31.38180 881.74488 33.68580 873.96888 C -34.54980 873.75288 35.41380 873.53688 36.27780 873.24888 C -36.34980 871.95288 43.47780 862.30488 46.06980 861.15288 C -46.14180 860.43288 46.28580 859.71288 46.42980 858.92088 C -47.00580 858.70488 47.65380 858.48888 48.30180 858.20088 C -62.19780 838.76088 69.10980 816.51288 78.03780 793.76088 C -78.54180 793.61688 79.04580 793.47288 79.54980 793.32888 C -83.00580 809.38488 85.45380 817.01688 93.37380 831.05688 C -100.93380 840.05688 100.93380 840.05688 101.29380 841.56888 C -87.39780 840.92088 80.62980 835.59288 80.62980 850.64088 C -92.65380 864.96888 92.65380 864.96888 98.70180 870.94488 C -113.60580 881.96088 125.12580 885.63288 143.41380 889.08888 C -143.41380 889.88088 143.41380 890.60088 143.41380 891.32088 C -142.62180 891.32088 141.90180 891.32088 141.18180 891.32088 C -141.18180 891.82488 141.18180 892.32888 141.18180 892.83288 C -140.53380 893.12088 139.88580 893.40888 139.23780 893.62488 C -139.45380 894.92088 139.74180 896.14488 140.02980 897.36888 C -166.59780 907.08888 193.88580 913.92888 222.39780 905.28888 C -229.09380 899.24088 229.09380 899.24088 230.60580 898.88088 C -231.82980 895.92888 231.68580 894.34488 235.14180 892.47288 C -235.50180 890.60088 235.86180 888.72888 236.22180 886.78488 C -236.86980 886.56888 237.51780 886.35288 238.16580 886.06488 C -238.02180 884.55288 237.87780 883.04088 237.73380 881.52888 C -247.59780 848.48088 253.78980 819.03288 241.54980 784.25688 C -234.56580 771.51288 237.44580 776.26488 226.86180 777.48888 C -225.56580 769.06488 213.10980 758.26488 206.55780 753.00888 C -193.38180 753.00888 195.25380 765.24888 194.53380 774.46488 C -182.36580 773.60088 175.66980 746.67288 159.97380 743.21688 C -157.95780 744.72888 155.94180 746.24088 153.92580 747.75288 C -152.70180 757.76088 153.99780 764.96088 155.43780 774.46488 C -142.26180 769.78488 132.03780 733.78488 115.62180 744.72888 C -108.13380 761.00088 114.46980 783.39288 119.36580 799.37688 C -105.97380 797.21688 99.27780 777.84888 83.29380 776.76888 C -82.93380 773.52888 82.42980 770.43288 78.03780 769.64088 C -75.08580 772.44888 76.09380 773.38488 72.78180 774.46488 C -73.14180 769.20888 78.32580 766.25688 79.90980 760.13688 C -79.40580 759.41688 78.90180 758.69688 78.39780 757.90488 C -76.95780 757.68888 75.58980 757.47288 74.22180 757.18488 C -74.43780 754.95288 74.72580 752.64888 75.01380 750.34488 C -76.23780 750.12888 77.46180 749.91288 78.75780 749.62488 C -80.12580 745.95288 84.22980 748.25688 83.29380 742.49688 C -81.78180 741.70488 81.78180 741.70488 69.75780 742.85688 C -69.82980 741.34488 69.97380 739.83288 70.11780 738.32088 C -65.07780 733.28088 68.24580 727.37688 69.75780 720.96888 C -74.94180 720.53688 79.47780 721.90488 85.52580 720.60888 C -88.62180 733.92888 91.42980 749.84088 92.29380 763.16088 C -92.79780 763.16088 93.30180 763.16088 93.80580 763.16088 C -93.80580 760.71288 93.80580 758.19288 93.80580 755.67288 C -94.52580 755.31288 95.24580 754.95288 96.03780 754.52088 C -96.10980 748.40088 96.25380 742.20888 96.39780 736.01688 C -90.85380 716.64888 92.72580 698.21688 88.90980 677.98488 C -86.24580 671.28888 76.81380 653.28888 69.75780 651.63288 C -67.16580 642.99288 66.51780 646.52088 61.47780 641.48088 C -51.46980 613.97688 24.75780 593.45688 1.35780 577.40088 C --6.13020 573.58488 -12.89820 567.75288 -21.25020 567.17688 C --24.85020 552.56088 -28.52220 540.46488 -45.29820 540.46488 C -@c -F - -@rax %Note: Object --53.21820 559.25688 -38.27197 582.29688 @E - 1 O 0 @g -0.00 0.00 0.00 0.00 k -/$fm 0 def --46.01820 559.25688 m --49.83420 562.28088 -49.83420 562.28088 -51.27420 562.64088 C --51.27420 563.64888 -51.27420 564.65688 -51.27420 565.66488 C --51.92220 565.95288 -52.57020 566.24088 -53.21820 566.45688 C --53.21820 576.96888 -53.21820 576.96888 -52.06620 579.63288 C --50.19420 580.78488 -50.19420 580.78488 -49.83420 582.29688 C --36.73020 581.86488 -35.14620 568.97688 -43.06620 559.25688 C --44.07420 559.25688 -45.08220 559.25688 -46.01820 559.25688 C -@c -F - -@rax %Note: Object -147.81487 656.52888 195.99846 740.98488 @E - 1 O 0 @g -0.00 0.00 0.00 1.00 k -/$fm 0 def -156.94980 656.52888 m -150.18180 661.06488 150.18180 661.06488 149.02980 662.93688 C -147.08580 679.35288 146.14980 700.08888 156.58980 713.40888 C -156.66180 714.92088 156.80580 716.43288 156.94980 717.94488 C -160.26180 718.59288 161.91780 718.80888 164.43780 721.32888 C -179.77380 725.14488 180.20580 727.73688 187.76580 740.98488 C -189.34980 740.84088 191.00580 740.69688 192.66180 740.55288 C -192.66180 732.27288 182.86980 724.28088 184.02180 719.09688 C -184.52580 719.09688 185.02980 719.09688 185.53380 719.09688 C -188.12580 722.55288 191.07780 726.72888 195.32580 727.37688 C -198.42180 721.97688 190.50180 712.47288 185.89380 708.87288 C -185.89380 699.36888 184.45380 671.50488 172.71780 668.19288 C -171.42180 662.86488 161.98980 657.75288 156.94980 656.52888 C -@c -F - -@rax %Note: Object -56.77965 660.27288 85.64995 708.51288 @E - 1 O 0 @g -0.00 0.00 0.00 0.00 k -/$fm 0 def -61.47780 660.27288 m -52.33380 671.64888 56.79780 704.91288 71.98980 708.51288 C -85.16580 708.51288 86.10180 707.14488 85.52580 692.74488 C -85.02180 692.74488 84.51780 692.74488 84.01380 692.74488 C -80.70180 697.71288 78.25380 697.13688 73.50180 698.72088 C -55.71780 692.38488 60.54180 675.96888 62.98980 661.06488 C -62.48580 660.84888 61.98180 660.56088 61.47780 660.27288 C -@c -F - -@rax %Note: Object -153.92580 682.52088 180.26476 710.53682 @E - 1 O 0 @g -0.00 0.00 0.00 0.00 k -/$fm 0 def -153.92580 682.52088 m -155.79780 698.57688 159.03780 718.66488 178.76580 707.43288 C -179.55780 702.89688 181.50180 699.36888 179.12580 694.61688 C -175.02180 700.44888 173.65380 700.23288 167.46180 700.23288 C -163.86180 696.27288 157.30980 684.03288 153.92580 682.52088 C -@c -F - -@rax %Note: Object -86.24580 748.83288 242.26980 902.10132 @E - 1 O 0 @g -0.00 0.00 0.00 0.00 k -/$fm 0 def -120.08580 748.83288 m -114.46980 772.44888 126.13380 790.95288 129.51780 812.19288 C -122.10180 819.60888 98.62980 786.20088 86.24580 785.04888 C -86.60580 791.60088 86.96580 798.15288 87.39780 804.63288 C -95.67780 826.16088 102.30180 835.16088 120.87780 847.97688 C -122.24580 850.20888 123.61380 851.72088 123.10980 854.02488 C -120.08580 854.81688 120.08580 854.81688 115.62180 854.02488 C -106.40580 849.41688 96.82980 847.32888 87.03780 846.82488 C -92.65380 870.44088 128.00580 880.59288 148.66980 883.40088 C -157.66980 883.68888 166.66980 883.97688 175.74180 884.19288 C -177.97380 886.42488 178.69380 886.92888 179.12580 889.80888 C -175.52580 893.40888 159.32580 892.68888 153.20580 893.62488 C -153.20580 894.41688 153.20580 895.13688 153.20580 895.85688 C -175.88580 901.47288 197.26980 905.21688 220.88580 898.52088 C -227.22180 892.83288 227.22180 892.83288 230.96580 887.57688 C -230.96580 878.28888 233.98980 863.02488 238.88580 854.02488 C -239.38980 853.95288 239.89380 853.80888 240.39780 853.66488 C -238.88580 843.72888 241.83780 828.96888 242.26980 817.44888 C -241.54980 809.16888 241.54980 809.16888 235.86180 785.40888 C -234.85380 785.33688 233.84580 785.19288 232.90980 785.04888 C -232.47780 791.81688 232.62180 791.96088 227.65380 793.32888 C -224.12580 784.40088 213.90180 759.27288 202.09380 760.92888 C -201.80580 770.72088 201.51780 780.51288 201.30180 790.30488 C -199.50180 790.30488 197.77380 790.30488 196.04580 790.30488 C -190.57380 781.66488 169.62180 752.14488 159.97380 751.13688 C -159.46980 764.45688 161.77380 774.24888 165.58980 786.56088 C -165.44580 789.00888 165.30180 791.38488 165.22980 793.76088 C -149.89380 793.76088 138.58980 751.42488 120.08580 748.83288 C -@c -F - -@rax %Note: Object -252.06180 759.77688 393.39780 945.96888 @E - 1 O 0 @g -0.00 0.00 0.00 1.00 k -/$fm 0 def -332.12580 759.77688 m -331.33380 759.92088 330.61380 760.06488 329.89380 760.13688 C -329.60580 762.65688 329.31780 765.17688 329.10180 767.69688 C -333.42180 768.34488 338.02980 768.27288 338.89380 773.74488 C -350.91780 778.85688 365.10180 789.36888 373.81380 799.37688 C -395.05380 838.90488 384.97380 892.04088 376.47780 933.51288 C -369.42180 930.99288 368.70180 928.83288 367.04580 922.20888 C -344.43780 914.79288 332.77380 895.06488 319.74180 876.27288 C -308.58180 858.20088 288.92580 830.12088 292.30980 806.93688 C -303.61380 812.55288 310.09380 821.84088 320.10180 829.90488 C -322.33380 830.04888 324.56580 830.19288 326.86980 830.26488 C -326.50980 823.06488 319.45380 813.56088 315.92580 806.93688 C -315.27780 802.18488 314.62980 797.43288 314.05380 792.60888 C -322.40580 793.04088 323.26980 798.29688 334.35780 795.63288 C -336.73380 790.52088 337.30980 778.20888 333.99780 772.95288 C -333.13380 772.88088 332.26980 772.73688 331.40580 772.59288 C -328.23780 775.76088 329.89380 785.55288 329.89380 789.58488 C -327.37380 789.22488 324.85380 788.86488 322.33380 788.43288 C -300.15780 777.12888 307.21380 792.75288 310.30980 809.88888 C -301.52580 809.31288 299.22180 798.22488 289.28580 798.22488 C -280.71780 811.32888 286.90980 824.07288 291.15780 837.82488 C -303.18180 861.15288 303.18180 861.15288 315.20580 880.80888 C -320.24580 887.14488 330.18180 898.37688 332.91780 905.64888 C -307.64580 899.67288 288.27780 875.33688 265.23780 864.17688 C -262.64580 859.13688 259.54980 855.53688 253.93380 855.53688 C -251.70180 857.76888 252.27780 858.70488 252.06180 861.15288 C -257.24580 863.52888 258.46980 864.75288 261.78180 869.50488 C -288.27780 887.79288 315.70980 905.07288 344.14980 920.40888 C -355.52580 927.89688 369.56580 934.80888 377.98980 945.96888 C -385.83780 945.96888 383.31780 942.00888 383.60580 933.51288 C -386.05380 923.21688 390.44580 908.24088 389.29380 897.36888 C -389.79780 897.36888 390.30180 897.36888 390.80580 897.36888 C -392.60580 872.45688 393.39780 870.94488 393.39780 855.89688 C -390.44580 849.92088 390.73380 829.47288 390.37380 825.00888 C -384.75780 798.51288 374.89380 788.43288 351.27780 772.95288 C -347.60580 766.25688 339.68580 759.77688 332.12580 759.77688 C -@c -F - -@rax %Note: Object -6.60359 765.82488 72.78180 884.91288 @E - 1 O 0 @g -0.00 0.00 0.00 0.00 k -/$fm 0 def -62.19780 765.82488 m -57.30180 769.56888 50.67780 774.96888 47.94180 779.79288 C -47.43780 779.79288 46.93380 779.79288 46.42980 779.79288 C -34.33380 794.33688 21.66180 812.19288 13.74180 828.03288 C -9.63780 842.14488 2.36580 872.38488 9.56580 884.91288 C -18.56580 883.32888 33.54180 869.57688 37.42980 860.43288 C -37.93380 860.43288 38.43780 860.43288 38.94180 860.43288 C -44.19780 852.51288 44.19780 852.51288 46.06980 851.36088 C -53.05380 838.90488 74.94180 795.41688 72.78180 785.40888 C -70.47780 785.40888 68.96580 786.20088 64.50180 786.20088 C -63.34980 785.04888 63.34980 785.04888 62.98980 781.30488 C -63.56580 781.08888 64.21380 780.80088 64.86180 780.51288 C -64.86180 779.00088 64.06980 778.28088 63.70980 772.95288 C -66.51780 771.65688 67.23780 771.00888 66.73380 767.33688 C -64.50180 765.82488 64.50180 765.82488 62.19780 765.82488 C -@c -F - -%%PageTrailer -@rs -@rs -%%Trailer -@EndSysCorelDict -end -%%DocumentSuppliedResources: procset wCorel8Dict -%%EOF - -%%EndDocument - diff --git a/seminar/static/seminar/lisak.pdf b/seminar/static/seminar/lisak.pdf new file mode 100644 index 0000000000000000000000000000000000000000..f90b2784a721c629ab2b509433196981ab8cec94 GIT binary patch literal 1959 zcmb7FYfuwc7_A~AD`HjD3btGyNKy*fO|l_Eh?N8w1_~IIY6W$ZED#J?+}%I`Tc?8) z@PV`?^+DBQDZUWIp|n*TQ3M=2;-j@#r&I-}*eVWHr^U)pdv8b}MgR0pW;c88-TR&I zeBV7Akfe?dCPGLopz&edASMMkV6<77LIFhav?+tn1SEts7yv*NZ7}jQ3-3mXr`5EM z(bJexiE%tjQ`wkhFIh@>wq)*Glu#sXGD2nS+Z8X}XDizOr=WRegu zDJNwh&Hk#2G4b$S4xsuB7bAvc%sDRXhXdMCXF|!421}W^928iW?}TFk&zfoHlM1d< z)42v6t%-?5pd(!k%`s+HM{@v4r*TOWWsW3u=@Iz|t(Wx(5_g!MLqilslx)`Wc9EhP zHrtLwx@v($kUG*I&Krn}E846+ku)EZmPBP9S}Cx+ z-`Bdo;quaO_b}gmcUyP$mz7^?cog#Gthf_Tr>TzUKCmhJj>io4)_haed@Zmut0vFD z7dDQIXs>T;O5Ij!n|HG>E%w}^e#Nt%n#z9nVtUckP>pPQiuFNb?Dvxsf41gs_33O{|^sRi@=g#l7v5+-m)DyK@8{!LRSkoCZEFd z30}T)q!Q!R`ejA!)>1#IJd;f)8r%ZUGzFKaeRs^75LxcMj#_KwU#Ti+CfBX%lTTT& z{?tLWdmuF}Xi50}p1jWe`zV!r2Zqg(KFsdEx%_nfxT5(JOOK@tsdMvwd{koF5r~zi zhY7WX{aIVIJtrT8x~;7$_nF&q;CQS=rBy}>tC=*-TJK`=>@}m%n>+5-HzizV?5aFV z1%@g_`uc|Ro^MDaCjAku?vO9NmE9h+HSk*3EApe|}p?zv9hc(0<8uPOFDoR@qtb%X7GK}oM{bI-G!+V%wpXWod+|JbMedPP}F za@QVfYsBv6drDi&i{66z+~F-UoOGUh)Re;q!rsRJ(_2RU13829V2%0*XWul=py!}Z zAdAtAn1UJEiOb1c?6N@;%jnHIXx9QAWndXVgb-v1fdfG%&*y}Rpus^jgQapZ4LUA_ zVKan6dmt4wbKbz1)W{qK>M$`*EG7s-A||9_TpolIfjBO7i3ztH%UVV8l#$7>Z-*R^ zb9mlprWTe?$8hM+7(Oz9j3lA;r2_|s;sN_CFgYVP(Y)6k@IO72G$MfHf-gw crgR3N+Sy%}<0+Q63q;6BDHaeAl^Biv3#gunCIA2c literal 0 HcmV?d00001 diff --git a/seminar/templates/seminar/archiv/obalky.tex b/seminar/templates/seminar/archiv/obalky.tex index 4995d105..03c2c1c6 100644 --- a/seminar/templates/seminar/archiv/obalky.tex +++ b/seminar/templates/seminar/archiv/obalky.tex @@ -86,7 +86,8 @@ % Tohle makro vysází samotnou obálku \def\obalka#1#2#3#4#5#6#7{ % Horní a pravý okraj je zároveň okraj stránky, resetujeme odsazení -\includegraphics[height=2.55cm]{lisak.eps}\hskip 1 em\vbox{% +\includegraphics[height=2.55cm]{lisak.pdf} +\vbox{% \adresaMaM} \vskip 7.3 cm % Od oka \hskip\toskip% diff --git a/seminar/views.py b/seminar/views.py index 55e8aa7a..1ab5460a 100644 --- a/seminar/views.py +++ b/seminar/views.py @@ -572,7 +572,7 @@ def obalkyView(request,resitele): tempdir = tempfile.mkdtemp() with open(tempdir+"/obalky.tex","w") as texfile: texfile.write(tex) - shutil.copy(os.path.join(settings.STATIC_ROOT, 'seminar/lisak.eps'),tempdir) + shutil.copy(os.path.join(settings.STATIC_ROOT, 'seminar/lisak.pdf'),tempdir) subprocess.call(["pdflatex","obalky.tex"],cwd = tempdir) with open(tempdir+"/obalky.pdf","rb") as pdffile: From cb65fc7cfdbd2e286e1d81cc483b714f98f0d4dc Mon Sep 17 00:00:00 2001 From: Pavel 'LEdoian' Turinsky Date: Wed, 27 Nov 2019 02:03:26 +0100 Subject: [PATCH 049/286] =?UTF-8?q?Admin:=20=C5=98e=C5=A1itel=20m=C3=A1=20?= =?UTF-8?q?m=C3=ADt=20vid=C4=9Bt=20pozn=C3=A1mku?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- seminar/admin.py | 1 + 1 file changed, 1 insertion(+) diff --git a/seminar/admin.py b/seminar/admin.py index 29363f68..6b583bc3 100644 --- a/seminar/admin.py +++ b/seminar/admin.py @@ -209,6 +209,7 @@ class ResitelAdmin(VersionAdmin): (u'Seminář', {'fields': ['datum_souhlasu_udaje', 'datum_souhlasu_zasilani', 'datum_prihlaseni', 'zasilat']}), (u'Osobní údaje', {'fields': ['pohlavi_muz', 'datum_narozeni', 'email', 'telefon']}), (u'Adresa', {'fields': ['ulice', 'mesto', 'psc', 'stat']}), + (u'Další', {'fields': ['poznamka']}), ] list_display = ['jmeno', 'prijmeni', 'user', 'pohlavi_muz', 'skola', 'rok_maturity', 'pocet_reseni'] list_filter = ['pohlavi_muz', 'rok_maturity', 'zasilat'] From 7e070f5f05c7ead507d62e62cd4f8a16852ca345 Mon Sep 17 00:00:00 2001 From: "Pavel \"LEdoian\" Turinsky" Date: Mon, 9 Dec 2019 23:21:41 +0100 Subject: [PATCH 050/286] =?UTF-8?q?Galerie:=20p=C5=99ejmenov=C3=A1na=20`zn?= =?UTF-8?q?acka`=20na=20`poradi`,=20aby=20to=20d=C3=A1valo=20aspo=C5=88=20?= =?UTF-8?q?trochu=20smysl?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- galerie/views.py | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/galerie/views.py b/galerie/views.py index 807b6de4..7d37c6be 100644 --- a/galerie/views.py +++ b/galerie/views.py @@ -96,7 +96,7 @@ def detail(request, pk, fotka, soustredeni): # Poradi aktualniho obrazku v galerii/stitku. for i in range(len(obrazky)): if obrazky[i] == obrazek: - znacka = i + poradi = i break else: # Obrazek neni v galerii/stitku. @@ -108,11 +108,11 @@ def detail(request, pk, fotka, soustredeni): # a udelat z toho funkci, ktera se pouzije u nahledu predchozi_galerie = None nasledujici_galerie = None - obrazky_dalsi = obrazky[znacka+1:znacka+NAHLEDU+1] - if (znacka+1) > NAHLEDU: - obrazky_predchozi = obrazky[znacka-NAHLEDU:znacka] + obrazky_dalsi = obrazky[poradi+1:poradi+NAHLEDU+1] + if (poradi+1) > NAHLEDU: + obrazky_predchozi = obrazky[poradi-NAHLEDU:poradi] else: - obrazky_predchozi = obrazky[0:znacka] + obrazky_predchozi = obrazky[0:poradi] if galerie.poradi > 1: predchozi_galerie = Galerie.objects.\ filter(galerie_up=galerie.galerie_up).\ @@ -121,7 +121,7 @@ def detail(request, pk, fotka, soustredeni): predchozi_galerie = predchozi_galerie[0] else: predchozi_galerie = None - if (znacka+1) == len(obrazky): + if (poradi+1) == len(obrazky): nasledujici_galerie = Galerie.objects.\ filter(galerie_up=galerie.galerie_up).\ filter(poradi=(galerie.poradi+1)) From b5c4fa1f8f2f1376621bb9afb5aca00a60add719 Mon Sep 17 00:00:00 2001 From: "Pavel \"LEdoian\" Turinsky" Date: Mon, 9 Dec 2019 23:23:34 +0100 Subject: [PATCH 051/286] =?UTF-8?q?Galerie:=20V=C3=BDchoz=C3=AD=20po=C5=99?= =?UTF-8?q?ad=C3=AD=20galerie=20je=20nula?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Jinak se nedá zobrazit poslední obrázek galerie --- galerie/models.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/galerie/models.py b/galerie/models.py index 3cc4b682..1b64194c 100644 --- a/galerie/models.py +++ b/galerie/models.py @@ -91,7 +91,7 @@ class Galerie(models.Model): zobrazit = models.IntegerField('Zobrazit?', default = ORG, choices = VIDITELNOST) galerie_up = models.ForeignKey('Galerie', blank = True, null = True) soustredeni = models.ForeignKey(Soustredeni, blank = True, null = True) - poradi = models.IntegerField('Pořadí', blank = True, null = True) + poradi = models.IntegerField('Pořadí', blank = True, null = False, default = 0) def __unicode__(self): return self.nazev From b7387571da14f5a29c39afddb279512fe76ffdae Mon Sep 17 00:00:00 2001 From: "Pavel \"LEdoian\" Turinsky" Date: Mon, 9 Dec 2019 23:46:00 +0100 Subject: [PATCH 052/286] =?UTF-8?q?Galerie:=20Nespadneme,=20pokud=20nen?= =?UTF-8?q?=C3=AD=20nastaven=C3=A9=20=C4=8D=C3=ADslo=20galerie?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Ano, vím, že jsem to před chvílí opravil i jinak, ale co. --- galerie/views.py | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/galerie/views.py b/galerie/views.py index 7d37c6be..11c01f33 100644 --- a/galerie/views.py +++ b/galerie/views.py @@ -121,10 +121,14 @@ def detail(request, pk, fotka, soustredeni): predchozi_galerie = predchozi_galerie[0] else: predchozi_galerie = None - if (poradi+1) == len(obrazky): - nasledujici_galerie = Galerie.objects.\ + if (poradi+1) == len(obrazky): # Tohle je poslední obrázek + if galerie.poradi is not None + and galerie.galerie_up is not None: + nasledujici_galerie = Galerie.objects.\ filter(galerie_up=galerie.galerie_up).\ filter(poradi=(galerie.poradi+1)) + else: + nasledujici_galerie = None if nasledujici_galerie: nasledujici_galerie = nasledujici_galerie[0] else: From ac56fd056353a07c53624aedd6620b2806462ea9 Mon Sep 17 00:00:00 2001 From: "Pavel \"LEdoian\" Turinsky" Date: Mon, 9 Dec 2019 23:46:40 +0100 Subject: [PATCH 053/286] Galerie: Migrace k b5c4fa1 --- galerie/migrations/0008_auto_20191209_2326.py | 20 +++++++++++++++++++ 1 file changed, 20 insertions(+) create mode 100644 galerie/migrations/0008_auto_20191209_2326.py diff --git a/galerie/migrations/0008_auto_20191209_2326.py b/galerie/migrations/0008_auto_20191209_2326.py new file mode 100644 index 00000000..12e605f4 --- /dev/null +++ b/galerie/migrations/0008_auto_20191209_2326.py @@ -0,0 +1,20 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.11.26 on 2019-12-09 22:26 +from __future__ import unicode_literals + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('galerie', '0007_obrazek_odstranen_datum'), + ] + + operations = [ + migrations.AlterField( + model_name='galerie', + name='poradi', + field=models.IntegerField(blank=True, default=0, verbose_name=b'Po\xc5\x99ad\xc3\xad'), + ), + ] From 1722283a75b35b9baa1608efadfc46e1dc4bf114 Mon Sep 17 00:00:00 2001 From: "Pavel \"LEdoian\" Turinsky" Date: Mon, 9 Dec 2019 23:52:12 +0100 Subject: [PATCH 054/286] Galerie: Fix syntax --- galerie/views.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/galerie/views.py b/galerie/views.py index 11c01f33..916a869b 100644 --- a/galerie/views.py +++ b/galerie/views.py @@ -122,8 +122,8 @@ def detail(request, pk, fotka, soustredeni): else: predchozi_galerie = None if (poradi+1) == len(obrazky): # Tohle je poslední obrázek - if galerie.poradi is not None - and galerie.galerie_up is not None: + if (galerie.poradi is not None + and galerie.galerie_up is not None): nasledujici_galerie = Galerie.objects.\ filter(galerie_up=galerie.galerie_up).\ filter(poradi=(galerie.poradi+1)) From ab8c895792f560493e258782897c908cfba91082 Mon Sep 17 00:00:00 2001 From: Pavel 'LEdoian' Turinsky Date: Tue, 21 Jan 2020 16:05:06 +0100 Subject: [PATCH 055/286] =?UTF-8?q?Testweb=20b=C4=9B=C5=BE=C3=AD=20na=20ma?= =?UTF-8?q?m-test.ks.matfyz.cz?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- mamweb/settings_test.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mamweb/settings_test.py b/mamweb/settings_test.py index 9f971f45..3b4a4fbb 100644 --- a/mamweb/settings_test.py +++ b/mamweb/settings_test.py @@ -32,7 +32,7 @@ DEBUG = True TEMPLATES[0]['OPTIONS']['debug'] = True -ALLOWED_HOSTS = ['*.mam.mff.cuni.cz', 'atrey.karlin.mff.cuni.cz', 'mam.mff.cuni.cz', 'mam-test.kam.mff.cuni.cz', 'gimli.ms.mff.cuni.cz'] +ALLOWED_HOSTS = ['*.mam.mff.cuni.cz', 'atrey.karlin.mff.cuni.cz', 'mam.mff.cuni.cz', 'mam-test.kam.mff.cuni.cz', 'gimli.ms.mff.cuni.cz', 'mam-test.ks.matfyz.cz'] # Database # https://docs.djangoproject.com/en/1.7/ref/settings/#databases From d099f709854f20fedcb7a795e3893cf09c563b02 Mon Sep 17 00:00:00 2001 From: "Tomas \"Jethro\" Pokorny" Date: Thu, 26 Mar 2020 00:25:22 +0100 Subject: [PATCH 056/286] Pokus o mockup exitacniho rozhrani pro TreeNody. --- mamweb/templates/base.html | 3 +- seminar/templates/seminar/archiv/base.html | 2 -- seminar/templates/seminar/treenode.html | 14 +++++++- .../templates/seminar/treenode_recursive.html | 35 +++++++++++++++++-- seminar/templatetags/treenodes.py | 35 +++++++++++++------ 5 files changed, 72 insertions(+), 17 deletions(-) diff --git a/mamweb/templates/base.html b/mamweb/templates/base.html index a53fa3df..18450af0 100644 --- a/mamweb/templates/base.html +++ b/mamweb/templates/base.html @@ -6,7 +6,8 @@ {% block title %}{% block nadpis1a %}{% endblock %} – Korespondenční seminář M&M{% endblock title %} - {% render_block "css" %} + {% render_block css %} + {% block custom_css %}{% endblock %} diff --git a/seminar/templates/seminar/archiv/base.html b/seminar/templates/seminar/archiv/base.html index d1401d28..efc3171d 100644 --- a/seminar/templates/seminar/archiv/base.html +++ b/seminar/templates/seminar/archiv/base.html @@ -1,6 +1,4 @@ {% extends "base.html" %} -{% block menu_archiv %}selected{% endblock %} - {# zmena fotky #}{% block header %}archiv{% endblock %} diff --git a/seminar/templates/seminar/treenode.html b/seminar/templates/seminar/treenode.html index 0fd734ef..c8e542d6 100644 --- a/seminar/templates/seminar/treenode.html +++ b/seminar/templates/seminar/treenode.html @@ -1,4 +1,16 @@ -{% extends "seminar/archiv/base_ulohy.html" %} +{% extends "seminar/archiv/base.html" %} +{% load staticfiles %} +{% load sekizai_tags %} + +{# toto z nejakeho duvodu nefunguje #} +{% addtoblock css %} +dfsdfs + +{% endaddtoblock "css" %} + +{% block custom_css %} + +{% endblock custom_css %} {% load comments %} diff --git a/seminar/templates/seminar/treenode_recursive.html b/seminar/templates/seminar/treenode_recursive.html index 0cf37d9a..cdee68f0 100644 --- a/seminar/templates/seminar/treenode_recursive.html +++ b/seminar/templates/seminar/treenode_recursive.html @@ -1,6 +1,12 @@ {% load treenodes %} {# {{depth}} #} -
+
+
+ {{obj.node}} + + + +
{% if obj.node|isRocnik %} Ročník {{obj.node.rocnik}} {% elif obj.node|isCislo %} @@ -17,11 +23,36 @@ Objekt jiného typu {{obj.node}} {% endif %} {%if obj.children %} -
+
+
Přidat před + + +
{%for ch in obj.children %} {%with obj=ch depth=depth|add:"1" template_name="seminar/treenode_recursive.html" %} {%include template_name%} {%endwith%} +
+ {% if forloop.last %} Přidat za {% else %} Přidat mezi {% endif %} + + + +     + {% if not forloop.last %} + + {% endif %} + +
{%endfor%}
{%endif%} diff --git a/seminar/templatetags/treenodes.py b/seminar/templatetags/treenodes.py index 0d60765e..f7e334c0 100644 --- a/seminar/templatetags/treenodes.py +++ b/seminar/templatetags/treenodes.py @@ -3,47 +3,60 @@ import seminar.models as m register = template.Library() +@register.filter +def nodeType(value): + if isinstance(value,RocnikNode): return "Ročník" + if isinstance(value,CisloNode): return "Číslo" + if isinstance(value,CastNode): return "Část" + if isinstance(value,TextNode): return "Text" + if isinstance(value,TemaVCisleNode): return "Téma v čísle" + if isinstance(value,KonferaNode): return "Konfera" + if isinstance(value,ClanekNode): return "Článek" + if isinstance(value,UlohaVzorakNode): return "Vzorák" + if isinstance(value,UlohaZadaniNode): return "Zadání úlohy" + if isinstance(value,PohadkaNode): return "Pohádka" + @register.filter def isRocnik(value): - return isinstance(value, m.RocnikNode) + return isinstance(value, m.RocnikNode) @register.filter def isCislo(value): - return isinstance(value, m.CisloNode) + return isinstance(value, m.CisloNode) @register.filter def isCast(value): - return isinstance(value, m.CastNode) + return isinstance(value, m.CastNode) @register.filter def isText(value): - return isinstance(value, m.TextNode) + return isinstance(value, m.TextNode) @register.filter def isTemaVCisle(value): - return isinstance(value, m.TemaVCisleNode) + return isinstance(value, m.TemaVCisleNode) @register.filter def isKonfera(value): - return isinstance(value, m.KonferaNode) + return isinstance(value, m.KonferaNode) @register.filter def isClanek(value): - return isinstance(value, m.ClanekNode) + return isinstance(value, m.ClanekNode) @register.filter def isUlohaVzorak(value): - return isinstance(value, m.UlohaVzorakNode) + return isinstance(value, m.UlohaVzorakNode) @register.filter def isUlohaZadani(value): - return isinstance(value, m.UlohaZadaniNode) + return isinstance(value, m.UlohaZadaniNode) @register.filter def isPohadka(value): - return isinstance(value, m.PohadkaNode) + return isinstance(value, m.PohadkaNode) #@register.filter #def isOtisteneReseniNode(value): -# return isinstance(value, m.OtisteneReseniNode) +# return isinstance(value, m.OtisteneReseniNode) From 2fc738ae74b4b2af9f6abadb560da913b625cfc1 Mon Sep 17 00:00:00 2001 From: "Tomas \"Jethro\" Pokorny" Date: Wed, 8 Apr 2020 21:45:55 +0200 Subject: [PATCH 057/286] Fix obrazek_maly_tag kdyz neni zadny obrazek. --- galerie/models.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/galerie/models.py b/galerie/models.py index c6acc5df..2d9b8e56 100644 --- a/galerie/models.py +++ b/galerie/models.py @@ -69,6 +69,8 @@ class Obrazek(models.Model): ordering = ['nazev'] def obrazek_maly_tag(self): + if not self.obrazek_maly: + return '' return u''.format(self.obrazek_maly.url) obrazek_maly_tag.short_description = "Náhled" obrazek_maly_tag.allow_tags = True From 1b11c6a281ba965e243ca55c13c40a7ea272274f Mon Sep 17 00:00:00 2001 From: "Tomas \"Jethro\" Pokorny" Date: Wed, 8 Apr 2020 23:09:25 +0200 Subject: [PATCH 058/286] Seminar | models | Pridan nahled titulky cisla. --- seminar/migrations/0080_auto_20200408_2221.py | 24 ++++++++++ seminar/models.py | 45 ++++++++++++++++++- 2 files changed, 67 insertions(+), 2 deletions(-) create mode 100644 seminar/migrations/0080_auto_20200408_2221.py diff --git a/seminar/migrations/0080_auto_20200408_2221.py b/seminar/migrations/0080_auto_20200408_2221.py new file mode 100644 index 00000000..f095ee06 --- /dev/null +++ b/seminar/migrations/0080_auto_20200408_2221.py @@ -0,0 +1,24 @@ +# Generated by Django 2.2.9 on 2020-04-08 20:21 + +from django.db import migrations, models +import seminar.models + + +class Migration(migrations.Migration): + + dependencies = [ + ('seminar', '0079_clanek_resitelsky'), + ] + + operations = [ + migrations.AddField( + model_name='cislo', + name='titulka_nahled', + field=models.ImageField(blank=True, help_text='Obrázek titulní strany, generuje se automaticky', null=True, upload_to='', verbose_name='Obrázek titulní strany'), + ), + migrations.AlterField( + model_name='cislo', + name='pdf', + field=models.FileField(blank=True, help_text='PDF čísla, které si mohou řešitelé stáhnout', null=True, upload_to=seminar.models.cislo_pdf_filename, verbose_name='pdf'), + ), + ] diff --git a/seminar/models.py b/seminar/models.py index 2a1c60d6..6419e73d 100644 --- a/seminar/models.py +++ b/seminar/models.py @@ -1,6 +1,9 @@ # -*- coding: utf-8 -*- import os import random +import subprocess +import pathlib +import tempfile from django.db import models from django.contrib import auth @@ -27,6 +30,7 @@ from unidecode import unidecode # Používám pro získání ID odkazu (ještě from polymorphic.models import PolymorphicModel + class SeminarModelBase(models.Model): class Meta: @@ -407,7 +411,11 @@ class Rocnik(SeminarModelBase): def cislo_pdf_filename(self, filename): rocnik = str(self.rocnik.rocnik) - return os.path.join('cislo', 'pdf', rocnik, '{}-{}.pdf'.format(rocnik, self.poradi)) + return pathlib.Path('cislo', 'pdf', rocnik, '{}-{}.pdf'.format(rocnik, self.poradi)) + +def cislo_png_filename(self, filename): + rocnik = str(self.rocnik.rocnik) + return pathlib.Path('cislo', 'png', rocnik, '{}-{}.png'.format(rocnik, self.poradi)) @reversion.register(ignore_duplicates=True) class Cislo(SeminarModelBase): @@ -451,7 +459,10 @@ class Cislo(SeminarModelBase): help_text='Neveřejná poznámka k číslu (plain text)') pdf = models.FileField('pdf', upload_to=cislo_pdf_filename, null=True, blank=True, - help_text='Pdf čísla, které si mohou řešitelé stáhnout') + help_text='PDF čísla, které si mohou řešitelé stáhnout') + + titulka_nahled = models.ImageField('Obrázek titulní strany', upload_to=cislo_png_filename, null=True, blank=True, + help_text='Obrázek titulní strany, generuje se automaticky') # má OneToOneField s: # CisloNode @@ -488,6 +499,35 @@ class Cislo(SeminarModelBase): return None return cs[i] + def vygeneruj_nahled(self): + VYSKA = 594 + sirka = int(VYSKA*210/297) + if not self.pdf: + return + + + # Pokud obrázek neexistuje nebo není aktuální, vytvoř jej + if not self.titulka_nahled or os.path.getmtime(self.titulka_nahled.path) < os.path.getmtime(self.pdf.path): + png_filename = pathlib.Path(tempfile.mkdtemp(), 'nahled.png') + + subprocess.call([ + "convert", + "-density", "300x300", + "-geometry", "{}x{}".format(VYSKA, sirka), + "-background", "white", + "-flatten", + "{}[0]".format(self.pdf.path), # titulní strana + png_filename + ]) + + with open(png_filename,'rb') as f: + self.titulka_nahled.save('',f,True) + + png_filename.unlink() + png_filename.parent.rmdir() + + + @classmethod def get(cls, rocnik, cislo): try: @@ -499,6 +539,7 @@ class Cislo(SeminarModelBase): def save(self, *args, **kwargs): super().save(*args, **kwargs) + self.vygeneruj_nahled() # *Node.save() aktualizuje název *Nodu. try: self.cislonode.save() From 49b517bef0e45ac09a961c2589b959f01bc4d25e Mon Sep 17 00:00:00 2001 From: "Tomas \"Jethro\" Pokorny" Date: Wed, 15 Apr 2020 22:58:47 +0200 Subject: [PATCH 059/286] Priprava GUI, chybi operace pro presun mezi vrstvami. --- mamweb/static/css/mamweb-dev.css | 29 ++++ .../templates/seminar/treenode_recursive.html | 101 +++++++++----- seminar/templatetags/treenodes.py | 124 ++++++++++++++++-- seminar/views/views_all.py | 25 ++-- 4 files changed, 225 insertions(+), 54 deletions(-) create mode 100644 mamweb/static/css/mamweb-dev.css diff --git a/mamweb/static/css/mamweb-dev.css b/mamweb/static/css/mamweb-dev.css new file mode 100644 index 00000000..1f4d286d --- /dev/null +++ b/mamweb/static/css/mamweb-dev.css @@ -0,0 +1,29 @@ +.pink { + background-color: #ffc0cb; +} + +div.borderized { + border-style: solid; + border-radius: 5px; + padding: 5px; + padding-right: 20px; +} + +div.tnmenu { + float: right; + margin-right: 0px; +} + + +div.parent { + border-width: 2px; +} + +div.children { + border-width: 1px; +} + +div.node_type { + background-color: #d4d4d4; +} + diff --git a/seminar/templates/seminar/treenode_recursive.html b/seminar/templates/seminar/treenode_recursive.html index cdee68f0..d76670d6 100644 --- a/seminar/templates/seminar/treenode_recursive.html +++ b/seminar/templates/seminar/treenode_recursive.html @@ -2,11 +2,19 @@ {# {{depth}} #}
- {{obj.node}} +{{obj.node}} +{% if obj.node|deletable %} - - +{% endif %} +{% if not obj.children and obj.node|appendableChildren %} +{% endif %} +
+{% if obj|editableSiblings %} +
+ +
+{% endif %} {% if obj.node|isRocnik %} Ročník {{obj.node.rocnik}} {% elif obj.node|isCislo %} @@ -22,38 +30,63 @@ {% else %} Objekt jiného typu {{obj.node}} {% endif %} - {%if obj.children %} + +{%if obj.children %}
-
Přidat před - - -
- {%for ch in obj.children %} - {%with obj=ch depth=depth|add:"1" template_name="seminar/treenode_recursive.html" %} - {%include template_name%} - {%endwith%} -
- {% if forloop.last %} Přidat za {% else %} Přidat mezi {% endif %} - - - -     - {% if not forloop.last %} - - {% endif %} -
- {%endfor%} + {# ----------- Přidáváme před prvního syna -------- #} + {% if obj.node|appendableChildren %} +
Přidat před + + +
+ {% endif %}{# appendablebleChildren #} + {# ----------- /Přidáváme před -------- #} + {%for ch in obj.children %} + + {# ----------- Vypisujeme podstrom ----------#} + {%with obj=ch depth=depth|add:"1" template_name="seminar/treenode_recursive.html" %} + {%include template_name%} + {%endwith%} + {# ----------- /Vypisujeme podstrom ---------#} + {# ----------- Přidáváme mezi syny / za posledního -------- #} + {% if obj.node|appendableChildren %} +
+ {% if forloop.last %} Přidat za {% else %} Přidat mezi {% endif %} + + +
+ {% endif %}{# appendablebleChildren #} + {# ----------- /Přidáváme mezi syny / za posledního -------- #} +
+ {% if not forloop.last and ch|editableSiblings %} + + {% endif %} +
+ + {% empty %} + {# ----------- Přidáváme prvního syna -------- #} + {% if obj.node|appendableChildren %} +
+ Přidat jako syna + + +
+ {% endif %} + {# ----------- /Přidáváme prvního syna -------- #} + {% endfor %}
- {%endif%} +{%endif%}
diff --git a/seminar/templatetags/treenodes.py b/seminar/templatetags/treenodes.py index f7e334c0..5e28c31d 100644 --- a/seminar/templatetags/treenodes.py +++ b/seminar/templatetags/treenodes.py @@ -1,4 +1,5 @@ from django import template +from enum import Enum import seminar.models as m register = template.Library() @@ -18,45 +19,144 @@ def nodeType(value): @register.filter def isRocnik(value): - return isinstance(value, m.RocnikNode) + return isinstance(value, m.RocnikNode) @register.filter def isCislo(value): - return isinstance(value, m.CisloNode) + return isinstance(value, m.CisloNode) @register.filter def isCast(value): - return isinstance(value, m.CastNode) + return isinstance(value, m.CastNode) @register.filter def isText(value): - return isinstance(value, m.TextNode) + return isinstance(value, m.TextNode) @register.filter def isTemaVCisle(value): - return isinstance(value, m.TemaVCisleNode) + return isinstance(value, m.TemaVCisleNode) @register.filter def isKonfera(value): - return isinstance(value, m.KonferaNode) + return isinstance(value, m.KonferaNode) @register.filter def isClanek(value): - return isinstance(value, m.ClanekNode) + return isinstance(value, m.ClanekNode) @register.filter def isUlohaVzorak(value): - return isinstance(value, m.UlohaVzorakNode) + return isinstance(value, m.UlohaVzorakNode) @register.filter def isUlohaZadani(value): - return isinstance(value, m.UlohaZadaniNode) + return isinstance(value, m.UlohaZadaniNode) @register.filter def isPohadka(value): - return isinstance(value, m.PohadkaNode) + return isinstance(value, m.PohadkaNode) +@register.filter +def isReseni(value): + return False +# return isinstance(value, m.OtisteneReseniNode) + +@register.filter +def isOrgText(value): + return False +# return isinstance(value, m.OrgTextNode) + + +### + +#@register.filter +#def podvesitelneNody(value): +# if isText() + +@register.filter +def deletable(value): + if isTemaVCisle(value): + return True + if isOrgText(value): + return True + if isReseni(value): + return True + if isUlohaZadani(value): + return True + if isUlohaVzorak(value): + return True + if isCast(value): + return True + if isText(value): + return True + return False + +@register.filter +def editableSiblings(value): + if isCast(value.node): + return True + if isText(value.node): + return True + if isReseni(value.node) and value.tema_in_path: + return True + if isUlohaZadani(value.node) and value.tema_in_path: + return True + if isUlohaVzorak(value.node) and value.tema_in_path: + return True + return False + +@register.filter +def editableChildren(value): + if isRocnik(value.node): + return False + if isCislo(value.node): + return False + if isText(value.node): + return False + return True + + +class NodeTypes(Enum): + ROCNIK = ('rocnikNode','Ročník') + CISLO = ('cisloNode', 'Číslo') + CAST = ('castNode', 'Část') + TEXT = ('textNode', 'Text') + TEMAVCISLE = ('temaVCisleNode', 'Téma v čísle') + RESENI = ('reseniNode','Řešení') + ULOHAZADANI = ('ulohaZadaniNode','Zadání') + ULOHAVZORAK = ('ulohaVzorakNode','Vzorák') + POHADKA = ('pohadkaNode','Pohádka') + ORGTEXT = ('orgText','Orgtext') + + + + +@register.filter +def appendableChildren(value): + if isTemaVCisle(value): + return (NodeTypes.RESENI.value, + NodeTypes.ULOHAZADANI.value, + NodeTypes.ULOHAVZORAK.value, + NodeTypes.CAST.value, + NodeTypes.TEXT.value, + ) + if isOrgText(value) or isReseni(value) or isUlohaZadani(value) or isUlohaVzorak(value): + return (NodeTypes.CAST.value, + NodeTypes.TEXT.value, + ) + if isCast(value): + return appendableChildren(value.parent) + return None + + + +#@register.filter +#def is(value): +# return +# +# NodeTypes..value, #@register.filter -#def isOtisteneReseniNode(value): -# return isinstance(value, m.OtisteneReseniNode) +#def is(value): +# return diff --git a/seminar/views/views_all.py b/seminar/views/views_all.py index 01546843..8bd850eb 100644 --- a/seminar/views/views_all.py +++ b/seminar/views/views_all.py @@ -17,6 +17,7 @@ from django.contrib.auth.mixins import LoginRequiredMixin from django.db import transaction import seminar.models as s +import seminar.models as m from seminar.models import Problem, Cislo, Reseni, Nastaveni, Rocnik, Soustredeni, Organizator, Resitel, Novinky, Soustredeni_Ucastnici, Pohadka, Tema, Clanek, Osoba, Skola # Tohle je stare a chceme se toho zbavit. Pouzivejte s.ToCoChci #from .models import VysledkyZaCislo, VysledkyKCisluZaRocnik, VysledkyKCisluOdjakziva from seminar import utils,treelib @@ -84,17 +85,25 @@ class ObalkovaniView(generic.ListView): return context class TNLData(object): - def __init__(self,anode): + def __init__(self,anode,parent=None): self.node = anode self.children = [] + self.parent = parent + self.tema_in_path = False + if parent: + self.tema_in_path = parent.tema_in_path + if isinstance(anode, m.TemaVCisleNode): + self.tema_in_path = True + + @classmethod + def from_treenode(cls,anode,parent=None): + out = cls(anode,parent) + for ch in treelib.all_children(anode): + outitem = cls.from_treenode(ch,out) + out.children.append(outitem) + return out -def treenode_strom_na_seznamy(node): - out = TNLData(node) - for ch in treelib.all_children(node): - outitem = treenode_strom_na_seznamy(ch) - out.children.append(outitem) - return out class TreeNodeView(generic.DetailView): model = s.TreeNode @@ -102,7 +111,7 @@ class TreeNodeView(generic.DetailView): def get_context_data(self,**kwargs): context = super().get_context_data(**kwargs) - context['tnldata'] = treenode_strom_na_seznamy(self.object) + context['tnldata'] = TNLData.from_treenode(self.object) return context # TODO Co chceme vlastně zobrazovat na této stránce? Zatím je zde aktuální číslo, ale může tu být cokoli jiného... From 6846f208983aa4e1397b4d018fd067760bc4a0db Mon Sep 17 00:00:00 2001 From: "Tomas \"Jethro\" Pokorny" Date: Thu, 16 Apr 2020 00:33:36 +0200 Subject: [PATCH 060/286] GUI temer hotovo, ceka na testovaci data. --- .../templates/seminar/treenode_add_stub.html | 11 ++ seminar/templates/seminar/treenode_name.html | 16 +++ .../templates/seminar/treenode_recursive.html | 102 ++++++------------ seminar/templatetags/treenodes.py | 35 ++++++ seminar/views/views_all.py | 11 +- 5 files changed, 100 insertions(+), 75 deletions(-) create mode 100644 seminar/templates/seminar/treenode_add_stub.html create mode 100644 seminar/templates/seminar/treenode_name.html diff --git a/seminar/templates/seminar/treenode_add_stub.html b/seminar/templates/seminar/treenode_add_stub.html new file mode 100644 index 00000000..e53c070b --- /dev/null +++ b/seminar/templates/seminar/treenode_add_stub.html @@ -0,0 +1,11 @@ +{% load treenodes %} +{% if obj.node|appendableChildren %} +
Přidat {{kam}} + + +
+{% endif %}{# appendablebleChildren #} diff --git a/seminar/templates/seminar/treenode_name.html b/seminar/templates/seminar/treenode_name.html new file mode 100644 index 00000000..ef15de1e --- /dev/null +++ b/seminar/templates/seminar/treenode_name.html @@ -0,0 +1,16 @@ +{% load treenodes %} +{% if obj.node|isRocnik %} + Ročník {{obj.node.rocnik}} +{% elif obj.node|isCislo %} + Číslo {{obj.node.cislo}} +{% elif obj.node|isTemaVCisle %} + Téma {{obj.node.tema.nazev}} +{% elif obj.node|isUlohaZadani %} +Úloha {{obj.node.uloha.kod_v_rocniku}} ({{obj.node.uloha.max_body}} b) +{% elif obj.node|isUlohaVzorak %} +Řešení: {{obj.node.uloha.kod_v_rocniku}} +{% elif obj.node|isText %} +{{obj.node.text.na_web}} +{% else %} +Objekt jiného typu {{obj.node}} +{% endif %} diff --git a/seminar/templates/seminar/treenode_recursive.html b/seminar/templates/seminar/treenode_recursive.html index d76670d6..81011cc5 100644 --- a/seminar/templates/seminar/treenode_recursive.html +++ b/seminar/templates/seminar/treenode_recursive.html @@ -2,91 +2,53 @@ {# {{depth}} #}
-{{obj.node}} -{% if obj.node|deletable %} - -{% endif %} -{% if not obj.children and obj.node|appendableChildren %} -{% endif %} -
-{% if obj|editableSiblings %} -
- - + {{obj.node}} + {% if obj.node|deletable %} + + {% endif %} + {% if obj.parent and obj.parent|editableSiblings %} + + {% endif %} + {% if obj|canPodvesitPred %} + - nejsou testovací data + {% endif %} + {% if obj|canPodvesitZa %} + - nejsou testovací data + {% endif %} + +
+{% if False %} +
+ FIXME: není zatím implementováno + - nejsou testovací data +
{% endif %} -{% if obj.node|isRocnik %} - Ročník {{obj.node.rocnik}} -{% elif obj.node|isCislo %} - Číslo {{obj.node.cislo}} -{% elif obj.node|isTemaVCisle %} - Téma {{obj.node.tema.nazev}} -{% elif obj.node|isUlohaZadani %} -Úloha {{obj.node.uloha.kod_v_rocniku}} ({{obj.node.uloha.max_body}} b) -{% elif obj.node|isUlohaVzorak %} -Řešení: {{obj.node.uloha.kod_v_rocniku}} -{% elif obj.node|isText %} -{{obj.node.text.na_web}} -{% else %} -Objekt jiného typu {{obj.node}} -{% endif %} - +{% include "seminar/treenode_name.html" %} {%if obj.children %}
- {# ----------- Přidáváme před prvního syna -------- #} - {% if obj.node|appendableChildren %} -
Přidat před - - -
- {% endif %}{# appendablebleChildren #} - {# ----------- /Přidáváme před -------- #} + {% with kam="před" %} {% include "seminar/treenode_add_stub.html" %} {% endwith %} {%for ch in obj.children %} {# ----------- Vypisujeme podstrom ----------#} - {%with obj=ch depth=depth|add:"1" template_name="seminar/treenode_recursive.html" %} - {%include template_name%} - {%endwith%} - {# ----------- /Vypisujeme podstrom ---------#} + {%with obj=ch depth=depth|add:"1" %} {%include "seminar/treenode_recursive.html" %} {%endwith%} {# ----------- Přidáváme mezi syny / za posledního -------- #} - {% if obj.node|appendableChildren %} -
- {% if forloop.last %} Přidat za {% else %} Přidat mezi {% endif %} - - -
- {% endif %}{# appendablebleChildren #} - {# ----------- /Přidáváme mezi syny / za posledního -------- #} + {% if forloop.last %} + {% with kam="za" %} {% include "seminar/treenode_add_stub.html" %} {% endwith %} + {% else %} + {% with kam="mezi" %} {% include "seminar/treenode_add_stub.html" %} {% endwith %} + {% endif %} + {# ----------- Prohazujeme sousedy ----------#}
{% if not forloop.last and ch|editableSiblings %} {% endif %}
- - {% empty %} - {# ----------- Přidáváme prvního syna -------- #} - {% if obj.node|appendableChildren %} -
- Přidat jako syna - - -
- {% endif %} - {# ----------- /Přidáváme prvního syna -------- #} {% endfor %}
+{% else %} + {# ----------- Přidáváme prvního syna ----------#} + {% with kam="jako syna" %} {% include "seminar/treenode_add_stub.html" %} {% endwith %} {%endif%}
diff --git a/seminar/templatetags/treenodes.py b/seminar/templatetags/treenodes.py index 5e28c31d..b1e7b65d 100644 --- a/seminar/templatetags/treenodes.py +++ b/seminar/templatetags/treenodes.py @@ -116,6 +116,41 @@ def editableChildren(value): return False return True +@register.filter +def textOnlySubtree(value): + text_only = True + if isText(value.node): + return True + if not isCast(value.node): + return False + for ch in value.children: + if not textOnlySubtree(ch): + return False + return True + +def canPodvesit(obj,new_parent): + if isCast(new_parent.node): +# print("Lze",obj,new_parent) + return True + if textOnlySubtree(obj): +# print("Lze",obj,new_parent) + return True + return False + +@register.filter +def canPodvesitZa(value): + if not value.index or value.index+1 >= len(value.parent.children): + return False + new_parent = value.parent.children[value.index+1] + return canPodvesit(value,new_parent) + +@register.filter +def canPodvesitPred(value): + if not value.index or value.index <= 0: + return False + new_parent = value.parent.children[value.index-1] + return canPodvesit(value,new_parent) + class NodeTypes(Enum): ROCNIK = ('rocnikNode','Ročník') diff --git a/seminar/views/views_all.py b/seminar/views/views_all.py index 8bd850eb..48708b26 100644 --- a/seminar/views/views_all.py +++ b/seminar/views/views_all.py @@ -85,21 +85,22 @@ class ObalkovaniView(generic.ListView): return context class TNLData(object): - def __init__(self,anode,parent=None): + def __init__(self,anode,parent=None, index=None): self.node = anode self.children = [] self.parent = parent self.tema_in_path = False + self.index = index if parent: self.tema_in_path = parent.tema_in_path if isinstance(anode, m.TemaVCisleNode): self.tema_in_path = True @classmethod - def from_treenode(cls,anode,parent=None): - out = cls(anode,parent) - for ch in treelib.all_children(anode): - outitem = cls.from_treenode(ch,out) + def from_treenode(cls,anode,parent=None,index=None): + out = cls(anode,parent,index) + for (idx,ch) in enumerate(treelib.all_children(anode)): + outitem = cls.from_treenode(ch,out,idx) out.children.append(outitem) return out From b57fcc9b25036c5c678f75b152b31486f328e97e Mon Sep 17 00:00:00 2001 From: Pavel 'LEdoian' Turinsky Date: Wed, 22 Apr 2020 23:46:18 +0200 Subject: [PATCH 061/286] =?UTF-8?q?Vyr=C3=A1b=C3=ADme=20TNLData=20podle=20?= =?UTF-8?q?filtru?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- seminar/views/views_all.py | 24 +++++++++++++++++++++++- 1 file changed, 23 insertions(+), 1 deletion(-) diff --git a/seminar/views/views_all.py b/seminar/views/views_all.py index 48708b26..32956c35 100644 --- a/seminar/views/views_all.py +++ b/seminar/views/views_all.py @@ -103,8 +103,30 @@ class TNLData(object): outitem = cls.from_treenode(ch,out,idx) out.children.append(outitem) return out + + @classmethod + def filter_treenode(cls, treenode, predicate): + tnll = cls._filter_treenode_recursive(treenode, predicate) # TreeNodeList List :-) + # Teď vyrobíme virtuální TNL, který nemá obsah, ale má za potomky všecny nalezené TNLData + result = cls(None) + for idx, tnl in enumerate(tnll): + result.children.append(tnl) + tnl.parent = result + tnl.index = idx + return result - + @classmethod + def _filter_treenode_recursive(cls, treenode, predicate): + if predicate(treenode): + return [cls.from_treenode(treenode)] + else: + found = [] + for tn in all_children(treenode): + result = cls.filter_treenode(tn, predicate) + # Result by v tuhle chvíli měl být seznam TNLDat odpovídající treenodům, jež matchnuly predikát. + for tnl in result: + found.append(tnl) + return found class TreeNodeView(generic.DetailView): model = s.TreeNode From e33a33eae8fcba5d88ffce3bf4dd9d6dda7e6aec Mon Sep 17 00:00:00 2001 From: "Tomas \"Jethro\" Pokorny" Date: Wed, 22 Apr 2020 23:48:19 +0200 Subject: [PATCH 062/286] seminar | treenode | pridany url na jednotlive editacni operace --- seminar/templates/seminar/treenode.html | 2 ++ seminar/templates/seminar/treenode_add_stub.html | 2 +- seminar/templates/seminar/treenode_recursive.html | 10 +++++----- seminar/urls.py | 6 ++++++ 4 files changed, 14 insertions(+), 6 deletions(-) diff --git a/seminar/templates/seminar/treenode.html b/seminar/templates/seminar/treenode.html index c8e542d6..eddb6243 100644 --- a/seminar/templates/seminar/treenode.html +++ b/seminar/templates/seminar/treenode.html @@ -16,7 +16,9 @@ dfsdfs {% block content %} +
{%with obj=tnldata depth=1 template_name="seminar/treenode_recursive.html" %} {%include template_name%} {%endwith%} +
{% endblock content %} diff --git a/seminar/templates/seminar/treenode_add_stub.html b/seminar/templates/seminar/treenode_add_stub.html index e53c070b..b4318d07 100644 --- a/seminar/templates/seminar/treenode_add_stub.html +++ b/seminar/templates/seminar/treenode_add_stub.html @@ -6,6 +6,6 @@ {% endfor %} - +
{% endif %}{# appendablebleChildren #} diff --git a/seminar/templates/seminar/treenode_recursive.html b/seminar/templates/seminar/treenode_recursive.html index 81011cc5..1fad8d80 100644 --- a/seminar/templates/seminar/treenode_recursive.html +++ b/seminar/templates/seminar/treenode_recursive.html @@ -4,16 +4,16 @@
{{obj.node}} {% if obj.node|deletable %} - + {% endif %} {% if obj.parent and obj.parent|editableSiblings %} - + {% endif %} {% if obj|canPodvesitPred %} - - nejsou testovací data + - nejsou testovací data {% endif %} {% if obj|canPodvesitZa %} - - nejsou testovací data + - nejsou testovací data {% endif %} @@ -42,7 +42,7 @@ {# ----------- Prohazujeme sousedy ----------#}
{% if not forloop.last and ch|editableSiblings %} - + {% endif %}
{% endfor %} diff --git a/seminar/urls.py b/seminar/urls.py index adf2cea5..6fa9a559 100644 --- a/seminar/urls.py +++ b/seminar/urls.py @@ -26,6 +26,12 @@ urlpatterns = [ path('cislo/./', views.CisloView.as_view(), name='seminar_cislo'), # odkomentované jenom kvůli testování archivu path('problem//', views.ProblemView.as_view(), name='seminar_problem'), path('treenode//', views.TreeNodeView.as_view(), name='seminar_treenode'), + path('treenode/editor/pridat/', views.TreeNodeView.as_view(), name='treenode_pridat'), + path('treenode/editor/smazat/', views.TreeNodeView.as_view(), name='treenode_smazat'), + path('treenode/editor/odvesit/', views.TreeNodeView.as_view(), name='treenode_odvesit'), + path('treenode/editor/podvesit/predchozi/', views.TreeNodeView.as_view(), name='treenode_podvesit_predchozi'), + path('treenode/editor/podvesit/nasledujici/', views.TreeNodeView.as_view(), name='treenode_podvesit_nasledujici'), + path('treenode/editor/prohodit/', views.TreeNodeView.as_view(), name='treenode_prohodit'), #path('problem/(?P\d+)/(?P\d+)/', views.PrispevekView.as_view(), name='seminar_problem_prispevek'), # Soustredeni From 6e79237cefaf91619c346965a40c485956d5aa69 Mon Sep 17 00:00:00 2001 From: Pavel 'LEdoian' Turinsky Date: Thu, 23 Apr 2020 00:40:15 +0200 Subject: [PATCH 063/286] =?UTF-8?q?TNLData=20u=C5=BE=20um=C3=AD=20vyr?= =?UTF-8?q?=C3=A1b=C4=9Bt=20dummy=20vrcholy=20i=20jen=20ze=20seznamu=20TNL?= =?UTF-8?q?Dat?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- seminar/views/views_all.py | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/seminar/views/views_all.py b/seminar/views/views_all.py index 9bb5276e..2e9bd864 100644 --- a/seminar/views/views_all.py +++ b/seminar/views/views_all.py @@ -106,16 +106,20 @@ class TNLData(object): return out @classmethod - def filter_treenode(cls, treenode, predicate): - tnll = cls._filter_treenode_recursive(treenode, predicate) # TreeNodeList List :-) - # Teď vyrobíme virtuální TNL, který nemá obsah, ale má za potomky všecny nalezené TNLData + def from_tnldata_list(cls, tnllist): + """Vyrobíme virtuální TNL, který nemá obsah, ale má za potomky všechna zadaná TNLData""" result = cls(None) - for idx, tnl in enumerate(tnll): + for idx, tnl in enumerate(tnllist): result.children.append(tnl) tnl.parent = result tnl.index = idx return result + @classmethod + def filter_treenode(cls, treenode, predicate): + tnll = cls._filter_treenode_recursive(treenode, predicate) # TreeNodeList List :-) + return TNLData.from_tnldata_list(tnll) + @classmethod def _filter_treenode_recursive(cls, treenode, predicate): if predicate(treenode): From aca63f4e5e3df6f4cf3eadfafa3b408e01e8bc37 Mon Sep 17 00:00:00 2001 From: Pavel 'LEdoian' Turinsky Date: Thu, 23 Apr 2020 00:41:04 +0200 Subject: [PATCH 064/286] =?UTF-8?q?P=C5=99id=C3=A1n=20ProblemView?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- seminar/views/views_all.py | 29 ++++++++++++++++++++++++++++- 1 file changed, 28 insertions(+), 1 deletion(-) diff --git a/seminar/views/views_all.py b/seminar/views/views_all.py index 2e9bd864..38ec06f2 100644 --- a/seminar/views/views_all.py +++ b/seminar/views/views_all.py @@ -141,7 +141,34 @@ class TreeNodeView(generic.DetailView): context = super().get_context_data(**kwargs) context['tnldata'] = TNLData.from_treenode(self.object) return context - + +class ProblemView(generic.DetailView): + model = s.Problem + # Zkopírujeme template_name od TreeNodeView, protože jsme prakticky jen trošku upravený TreeNodeView + template_name = TreeNodeView.template_name + + def get_context_data(self, **kwargs): + context = super().get_context_data(**kwargs) + # Teď potřebujeme doplnit tnldata do kontextu. + # Ošklivý type switch, hezčí by bylo udělat to polymorfni. FIXME. + if False: + # Hezčí formátování zbytku :-P + pass + elif isinstance(self.object, s.Clanek) or isinstance(self.object, s.Konfera): + # Tyhle Problémy mají ŘešeníNode + context['tnldata'] = TNLData.from_treenode(self.object.reseninode) + elif isinstance(self.object, s.Uloha): + # FIXME: Teď vždycky zobrazujeme i vzorák! Možná by bylo hezčí/lepší mít to stejně jako pro Téma: procházet jen dosažitelné z Ročníku / čísla / whatever + tnl_zadani = self.object.ulohazadaninode + tnl_vzorak = self.object.ulohavzoraknode + context['tnldata'] = TNLData.from_tnldata_list([tnl_zadani, tnl_vzorak]) + elif isinstance(self.object, s.Tema): + rocniknode = self.object.rocnik.rocniknode + context['tnldata'] = TNLData.filter_treenode(rocniknode, lambda x: isinstance(x, s.TemaVCisleNode)) + else: + raise ValueError("Obecný problém nejde zobrazit.") + return context + # TODO Co chceme vlastně zobrazovat na této stránce? Zatím je zde aktuální číslo, ale může tu být cokoli jiného... class AktualniZadaniView(TreeNodeView): def get_object(self): From a732ac805cebcc88eaa8b096dceb080a3e05e52b Mon Sep 17 00:00:00 2001 From: Pavel 'LEdoian' Turinsky Date: Thu, 23 Apr 2020 00:45:34 +0200 Subject: [PATCH 065/286] =?UTF-8?q?Smaz=C3=A1na=20divn=C3=A1=20p=C5=99ebyt?= =?UTF-8?q?e=C4=8Dn=C3=A1=20migrace?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- seminar/migrations/0080_auto_20200408_2221.py | 24 ------------------- 1 file changed, 24 deletions(-) delete mode 100644 seminar/migrations/0080_auto_20200408_2221.py diff --git a/seminar/migrations/0080_auto_20200408_2221.py b/seminar/migrations/0080_auto_20200408_2221.py deleted file mode 100644 index f095ee06..00000000 --- a/seminar/migrations/0080_auto_20200408_2221.py +++ /dev/null @@ -1,24 +0,0 @@ -# Generated by Django 2.2.9 on 2020-04-08 20:21 - -from django.db import migrations, models -import seminar.models - - -class Migration(migrations.Migration): - - dependencies = [ - ('seminar', '0079_clanek_resitelsky'), - ] - - operations = [ - migrations.AddField( - model_name='cislo', - name='titulka_nahled', - field=models.ImageField(blank=True, help_text='Obrázek titulní strany, generuje se automaticky', null=True, upload_to='', verbose_name='Obrázek titulní strany'), - ), - migrations.AlterField( - model_name='cislo', - name='pdf', - field=models.FileField(blank=True, help_text='PDF čísla, které si mohou řešitelé stáhnout', null=True, upload_to=seminar.models.cislo_pdf_filename, verbose_name='pdf'), - ), - ] From 55faab78d53f6e0cea7b0d1dc8ef651181895291 Mon Sep 17 00:00:00 2001 From: Pavel 'LEdoian' Turinsky Date: Thu, 23 Apr 2020 00:57:21 +0200 Subject: [PATCH 066/286] =?UTF-8?q?Mergem=20jsem=20si=20p=C5=99it=C3=A1hl?= =?UTF-8?q?=20=C5=A1patnou=20verzi=20ProblemView,=20ma=C5=BEu.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- seminar/views/views_all.py | 26 -------------------------- 1 file changed, 26 deletions(-) diff --git a/seminar/views/views_all.py b/seminar/views/views_all.py index 38ec06f2..a91743c0 100644 --- a/seminar/views/views_all.py +++ b/seminar/views/views_all.py @@ -602,32 +602,6 @@ class RocnikView(generic.DetailView): return context - -class ProblemView(generic.DetailView): - model = Problem - - # Používáme funkci, protože přímo template_name neumí mít v přiřazení dost logiky. Ledaže by se to udělalo polymorfně... - def get_template_names(self, **kwargs): - # FIXME: Switch podle typu není hezký, ale nechtělo se mi to přepisovat celé. Správně by se tohle mělo řešit polymorfismem. - spravne_templaty = { - s.Uloha: "uloha", - s.Tema: "tema", - s.Konfera: "konfera", - s.Clanek: "clanek", - } - context = super().get_context_data(**kwargs) - return ['seminar/archiv/problem_' + spravne_templaty[context['object'].__class__] + '.html'] - - def get_context_data(self, **kwargs): - context = super().get_context_data(**kwargs) - # Musí se používat context['object'], protože nevíme, jestli dostaneme úložku, téma, článek, .... a tyhle věci vyrábějí různé klíče. - if not context['object'].verejne() and not self.request.user.is_staff: - raise PermissionDenied() - if isinstance(context['object'], Clanek): - context['reseni'] = Reseni.objects.filter(problem=context['object']).select_related('resitel').order_by('resitel__prijmeni') - return context - - class RadekVysledkovkyCisla(object): """Obsahuje věci, které se hodí vědět při konstruování výsledkovky. Umožňuje snazší práci v templatu (lepší, než seznam).""" From 42f0f166d6681eea1a8f3b9201c6e2c859e97da7 Mon Sep 17 00:00:00 2001 From: Pavel 'LEdoian' Turinsky Date: Thu, 23 Apr 2020 01:02:47 +0200 Subject: [PATCH 067/286] =?UTF-8?q?Fix:=20*Node=20nen=C3=AD=20TNLData.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- seminar/views/views_all.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/seminar/views/views_all.py b/seminar/views/views_all.py index a91743c0..ee21791a 100644 --- a/seminar/views/views_all.py +++ b/seminar/views/views_all.py @@ -159,8 +159,8 @@ class ProblemView(generic.DetailView): context['tnldata'] = TNLData.from_treenode(self.object.reseninode) elif isinstance(self.object, s.Uloha): # FIXME: Teď vždycky zobrazujeme i vzorák! Možná by bylo hezčí/lepší mít to stejně jako pro Téma: procházet jen dosažitelné z Ročníku / čísla / whatever - tnl_zadani = self.object.ulohazadaninode - tnl_vzorak = self.object.ulohavzoraknode + tnl_zadani = TNLData.from_treenode(self.object.ulohazadaninode) + tnl_vzorak = TNLData.from_treenode(self.object.ulohavzoraknode) context['tnldata'] = TNLData.from_tnldata_list([tnl_zadani, tnl_vzorak]) elif isinstance(self.object, s.Tema): rocniknode = self.object.rocnik.rocniknode From 84dcb34a70e626cb0a7934ff71056625b536ca0b Mon Sep 17 00:00:00 2001 From: "Tomas \"Jethro\" Pokorny" Date: Thu, 7 May 2020 00:51:10 +0200 Subject: [PATCH 068/286] seminar | admin | pridany dalsi node do admina --- seminar/admin.py | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/seminar/admin.py b/seminar/admin.py index edfbb595..268bdbba 100644 --- a/seminar/admin.py +++ b/seminar/admin.py @@ -106,6 +106,8 @@ class TreeNodeAdmin(PolymorphicParentModelAdmin): m.PohadkaNode, m.UlohaVzorakNode, m.TextNode, + m.CastNode, + m.OrgTextNode, ] actions = ['aktualizuj_nazvy'] @@ -159,6 +161,16 @@ class TextNodeAdmin(PolymorphicChildModelAdmin): base_model = m.TextNode show_in_index = True +@admin.register(m.CastNode) +class TextNodeAdmin(PolymorphicChildModelAdmin): + base_model = m.CastNode + show_in_index = True + +@admin.register(m.OrgTextNode) +class TextNodeAdmin(PolymorphicChildModelAdmin): + base_model = m.OrgTextNode + show_in_index = True + admin.site.register(m.Nastaveni) admin.site.register(m.Novinky) From 98eed4bab4beaba2ae162b2b49b41276fd010560 Mon Sep 17 00:00:00 2001 From: "Tomas \"Jethro\" Pokorny" Date: Thu, 7 May 2020 00:53:54 +0200 Subject: [PATCH 069/286] seminar | treenode editor | Prototyp pridavani, funguje jen neco --- seminar/templates/seminar/treenode.html | 3 +- .../templates/seminar/treenode_add_stub.html | 16 +++-- seminar/templates/seminar/treenode_name.html | 2 + .../templates/seminar/treenode_recursive.html | 12 ++-- seminar/templatetags/treenodes.py | 7 +- seminar/treelib.py | 3 + seminar/urls.py | 11 ++-- seminar/views/views_all.py | 66 ++++++++++++++++++- 8 files changed, 98 insertions(+), 22 deletions(-) diff --git a/seminar/templates/seminar/treenode.html b/seminar/templates/seminar/treenode.html index eddb6243..a6dc39f9 100644 --- a/seminar/templates/seminar/treenode.html +++ b/seminar/templates/seminar/treenode.html @@ -16,7 +16,8 @@ dfsdfs {% block content %} -
+ +{% csrf_token %} {%with obj=tnldata depth=1 template_name="seminar/treenode_recursive.html" %} {%include template_name%} {%endwith%} diff --git a/seminar/templates/seminar/treenode_add_stub.html b/seminar/templates/seminar/treenode_add_stub.html index b4318d07..09f2d2fa 100644 --- a/seminar/templates/seminar/treenode_add_stub.html +++ b/seminar/templates/seminar/treenode_add_stub.html @@ -1,11 +1,17 @@ {% load treenodes %} -{% if obj.node|appendableChildren %} +{% if kam_slug == "syn" %} + {% appendableChildren obj as dostupne_typy %} +{% else %} + {% appendableChildren obj.parent as dostupne_typy %} +{% endif %} + +{% if dostupne_typy %}
Přidat {{kam}} - + {% for typ in dostupne_typy %} + {% endfor %} - +
{% endif %}{# appendablebleChildren #} diff --git a/seminar/templates/seminar/treenode_name.html b/seminar/templates/seminar/treenode_name.html index ef15de1e..501effe4 100644 --- a/seminar/templates/seminar/treenode_name.html +++ b/seminar/templates/seminar/treenode_name.html @@ -9,6 +9,8 @@ Úloha {{obj.node.uloha.kod_v_rocniku}} ({{obj.node.uloha.max_body}} b) {% elif obj.node|isUlohaVzorak %} Řešení: {{obj.node.uloha.kod_v_rocniku}} +{% elif obj.node|isCast %} + {{obj.node.nadpis}} {% elif obj.node|isText %} {{obj.node.text.na_web}} {% else %} diff --git a/seminar/templates/seminar/treenode_recursive.html b/seminar/templates/seminar/treenode_recursive.html index 1fad8d80..62beed10 100644 --- a/seminar/templates/seminar/treenode_recursive.html +++ b/seminar/templates/seminar/treenode_recursive.html @@ -10,10 +10,10 @@ {% endif %} {% if obj|canPodvesitPred %} - - nejsou testovací data + - nejsou testovací data {% endif %} {% if obj|canPodvesitZa %} - - nejsou testovací data + - nejsou testovací data {% endif %} @@ -28,16 +28,16 @@ {%if obj.children %}
- {% with kam="před" %} {% include "seminar/treenode_add_stub.html" %} {% endwith %} + {% with kam="před" kam_slug="syn" %} {% include "seminar/treenode_add_stub.html" %} {% endwith %} {%for ch in obj.children %} {# ----------- Vypisujeme podstrom ----------#} {%with obj=ch depth=depth|add:"1" %} {%include "seminar/treenode_recursive.html" %} {%endwith%} {# ----------- Přidáváme mezi syny / za posledního -------- #} {% if forloop.last %} - {% with kam="za" %} {% include "seminar/treenode_add_stub.html" %} {% endwith %} + {% with kam="za" kam_slug="za" obj=ch %} {% include "seminar/treenode_add_stub.html" %} {% endwith %} {% else %} - {% with kam="mezi" %} {% include "seminar/treenode_add_stub.html" %} {% endwith %} + {% with kam="mezi" obj=ch kam_slug="za" %} {% include "seminar/treenode_add_stub.html" %} {% endwith %} {% endif %} {# ----------- Prohazujeme sousedy ----------#}
@@ -49,6 +49,6 @@
{% else %} {# ----------- Přidáváme prvního syna ----------#} - {% with kam="jako syna" %} {% include "seminar/treenode_add_stub.html" %} {% endwith %} + {% with kam="jako syna" kam_slug="syn" %} {% include "seminar/treenode_add_stub.html" %} {% endwith %} {%endif%}
diff --git a/seminar/templatetags/treenodes.py b/seminar/templatetags/treenodes.py index b1e7b65d..d9bb668e 100644 --- a/seminar/templatetags/treenodes.py +++ b/seminar/templatetags/treenodes.py @@ -155,6 +155,7 @@ def canPodvesitPred(value): class NodeTypes(Enum): ROCNIK = ('rocnikNode','Ročník') CISLO = ('cisloNode', 'Číslo') + MEZICISLO = ('mezicisloNode', 'Mezičíslo') CAST = ('castNode', 'Část') TEXT = ('textNode', 'Text') TEMAVCISLE = ('temaVCisleNode', 'Téma v čísle') @@ -167,16 +168,16 @@ class NodeTypes(Enum): -@register.filter +@register.simple_tag def appendableChildren(value): - if isTemaVCisle(value): + if isTemaVCisle(value.node): return (NodeTypes.RESENI.value, NodeTypes.ULOHAZADANI.value, NodeTypes.ULOHAVZORAK.value, NodeTypes.CAST.value, NodeTypes.TEXT.value, ) - if isOrgText(value) or isReseni(value) or isUlohaZadani(value) or isUlohaVzorak(value): + if isOrgText(value.node) or isReseni(value.node) or isUlohaZadani(value.node) or isUlohaVzorak(value.node): return (NodeTypes.CAST.value, NodeTypes.TEXT.value, ) diff --git a/seminar/treelib.py b/seminar/treelib.py index 854bf62c..ba08e07a 100644 --- a/seminar/treelib.py +++ b/seminar/treelib.py @@ -181,6 +181,7 @@ def create_node_after(predecessor, type, **kwargs): predecessor.save() new_node.succ = succ new_node.save() + return new_node # Vyrábí prvního syna, ostatní nalepí za (existují-li) def create_child(parent, type, **kwargs): @@ -193,6 +194,7 @@ def create_child(parent, type, **kwargs): # Přidáme původního prvního syna jako potomka nového vrcholu new_node.succ = orig_child new_node.save() + return new_node def insert_last_child(parent, node): """ Zadaný Node přidá jako posledního potomka otce. """ @@ -225,6 +227,7 @@ def create_node_before(successor, type, **kwargs): new = type.objects.create(**kwargs) new.succ = successor new.save() + return new # ValueError, pokud je (aspoň) jeden parametr None diff --git a/seminar/urls.py b/seminar/urls.py index e462979c..f13fd442 100644 --- a/seminar/urls.py +++ b/seminar/urls.py @@ -26,12 +26,11 @@ urlpatterns = [ path('cislo/./', views.CisloView.as_view(), name='seminar_cislo'), # odkomentované jenom kvůli testování archivu path('problem//', views.ProblemView.as_view(), name='seminar_problem'), path('treenode//', views.TreeNodeView.as_view(), name='seminar_treenode'), - path('treenode/editor/pridat/', views.TreeNodeView.as_view(), name='treenode_pridat'), - path('treenode/editor/smazat/', views.TreeNodeView.as_view(), name='treenode_smazat'), - path('treenode/editor/odvesit/', views.TreeNodeView.as_view(), name='treenode_odvesit'), - path('treenode/editor/podvesit/predchozi/', views.TreeNodeView.as_view(), name='treenode_podvesit_predchozi'), - path('treenode/editor/podvesit/nasledujici/', views.TreeNodeView.as_view(), name='treenode_podvesit_nasledujici'), - path('treenode/editor/prohodit/', views.TreeNodeView.as_view(), name='treenode_prohodit'), + path('treenode/editor/pridat///', views.TreeNodePridatView.as_view(), name='treenode_pridat'), + path('treenode/editor/smazat//', views.TreeNodeSmazatView.as_view(), name='treenode_smazat'), + path('treenode/editor/odvesit//', views.TreeNodeOdvesitView.as_view(), name='treenode_odvesit'), + path('treenode/editor/podvesit///', views.TreeNodePodvesitView.as_view(), name='treenode_podvesit'), + path('treenode/editor/prohodit//', views.TreeNodeProhoditView.as_view(), name='treenode_prohodit'), #path('problem/(?P\d+)/(?P\d+)/', views.PrispevekView.as_view(), name='seminar_problem_prispevek'), # Soustredeni diff --git a/seminar/views/views_all.py b/seminar/views/views_all.py index 7146ca8b..aa34837f 100644 --- a/seminar/views/views_all.py +++ b/seminar/views/views_all.py @@ -1,6 +1,6 @@ # coding:utf-8 -from django.shortcuts import get_object_or_404, render +from django.shortcuts import get_object_or_404, render, redirect from django.http import HttpResponse, HttpResponseRedirect, HttpResponseForbidden, JsonResponse from django.urls import reverse,reverse_lazy from django.core.exceptions import PermissionDenied, ObjectDoesNotExist @@ -133,6 +133,8 @@ class TNLData(object): for tnl in result: found.append(tnl) return found + def __repr__(self): + return("TNL({})".format(self.node)) class TreeNodeView(generic.DetailView): model = s.TreeNode @@ -143,6 +145,68 @@ class TreeNodeView(generic.DetailView): context['tnldata'] = TNLData.from_treenode(self.object) return context +class TreeNodePridatView(generic.View): + type_from_str = { + 'rocnikNode': m.RocnikNode, + 'cisloNode': m.CisloNode, + 'castNode': m.CastNode, + 'textNode': m.TextNode, + 'temaVCisleNode': m.TemaVCisleNode, + 'reseniNode': m.ReseniNode, + 'ulohaZadaniNode': m.UlohaZadaniNode, + 'ulohaVzorakNode': m.UlohaVzorakNode, + 'pohadkaNode': m.PohadkaNode, + 'orgText': m.OrgTextNode, + } + + def post(self, request, *args, **kwargs): + kam = self.kwargs['kam'] + node = s.TreeNode.objects.get(pk=self.kwargs['pk']) + + if kam not in ('syn','za'): + raise ValidationError('Přidat lze pouze před nebo za node') + if kam == 'syn': + strtyp = request.POST.get('pridat-typ-{}-syn'.format(node.id)) + typ = self.type_from_str[strtyp] + node = treelib.create_child(node,typ) + if kam == 'za': + strtyp = request.POST.get('pridat-typ-{}-za'.format(node.id)) + typ = self.type_from_str[strtyp] + node = treelib.create_node_after(node,typ) + + return redirect(node.get_admin_url()) + + + + + + + + + + + +class TreeNodeSmazatView(generic.base.View): + def post(self, request, *args, **kwargs): + pass + pass + +class TreeNodeOdvesitView(generic.base.View): + def post(self, request, *args, **kwargs): + pass + pass + +class TreeNodePodvesitView(generic.base.View): + def post(self, request, *args, **kwargs): + pass + pass + +class TreeNodeProhoditView(generic.base.View): + def post(self, request, *args, **kwargs): + pass + pass + + class ProblemView(generic.DetailView): model = s.Problem # Zkopírujeme template_name od TreeNodeView, protože jsme prakticky jen trošku upravený TreeNodeView From ae929c8a987ecca5961869a556b2528abb3e2fd2 Mon Sep 17 00:00:00 2001 From: "Tomas \"Jethro\" Pokorny" Date: Wed, 20 May 2020 21:44:12 +0200 Subject: [PATCH 070/286] seminar | submitovatko | prejmenovana trida, odebrany nadbytecne polozky formulare --- seminar/forms.py | 2 ++ seminar/urls.py | 2 +- seminar/views/views_all.py | 2 +- 3 files changed, 4 insertions(+), 2 deletions(-) diff --git a/seminar/forms.py b/seminar/forms.py index fb313272..24a2109c 100644 --- a/seminar/forms.py +++ b/seminar/forms.py @@ -257,6 +257,7 @@ class NahrajReseniForm(forms.ModelForm): class Meta: model = m.Reseni fields = ('problem',) + help_texts = {'problem':''} # Nezobrazovat help text ve formuláři widgets = {'problem': autocomplete.ModelSelect2Multiple( @@ -272,6 +273,7 @@ ReseniSPrilohamiFormSet = inlineformset_factory(m.Reseni,m.PrilohaReseni, fields = ('soubor','res_poznamka'), widgets = {'res_poznamka':forms.TextInput()}, extra = 1, + can_delete = False, ) diff --git a/seminar/urls.py b/seminar/urls.py index f13fd442..e4655b99 100644 --- a/seminar/urls.py +++ b/seminar/urls.py @@ -123,7 +123,7 @@ urlpatterns = [ path('autocomplete/problem/odevzdatelny',views.OdevzdatelnyProblemAutocomplete.as_view(), name='autocomplete_problem_odevzdatelny'), path('temp/add_solution', views.AddSolutionView.as_view(),name='seminar_vloz_reseni'), - path('temp/submit_solution', views.SubmitSolutionView.as_view(),name='seminar_nahraj_reseni'), + path('temp/nahraj_reseni', views.NahrajReseniView.as_view(),name='seminar_nahraj_reseni'), path('', views.TitulniStranaView.as_view(), name='titulni_strana'), diff --git a/seminar/views/views_all.py b/seminar/views/views_all.py index a0bcfb5f..8bad8c03 100644 --- a/seminar/views/views_all.py +++ b/seminar/views/views_all.py @@ -1313,7 +1313,7 @@ class AddSolutionView(LoginRequiredMixin, FormView): form_class = f.VlozReseniForm success_url = '/' -class SubmitSolutionView(LoginRequiredMixin, CreateView): +class NahrajReseniView(LoginRequiredMixin, CreateView): model = s.Reseni template_name = 'seminar/nahraj_reseni.html' form_class = f.NahrajReseniForm From 336ef6905492c363f4e3f9fbd416b21feb658a70 Mon Sep 17 00:00:00 2001 From: "Tomas \"Jethro\" Pokorny" Date: Thu, 21 May 2020 12:42:15 +0200 Subject: [PATCH 071/286] seminar | treenode editor | pridany dalsi funkce --- seminar/models.py | 4 +- .../templates/seminar/treenode_recursive.html | 4 +- seminar/templatetags/treenodes.py | 2 +- seminar/treelib.py | 14 +++++- seminar/views/views_all.py | 45 +++++++++++-------- 5 files changed, 43 insertions(+), 26 deletions(-) diff --git a/seminar/models.py b/seminar/models.py index c53c7048..c045b658 100644 --- a/seminar/models.py +++ b/seminar/models.py @@ -826,9 +826,7 @@ class Text(SeminarModelBase): tn.save() def __str__(self): - parser = FirstTagParser() - parser.feed(str(self.na_web)) - return parser.firstTag + return str(self.na_web)[:20] class Uloha(Problem): class Meta: diff --git a/seminar/templates/seminar/treenode_recursive.html b/seminar/templates/seminar/treenode_recursive.html index 62beed10..a95568df 100644 --- a/seminar/templates/seminar/treenode_recursive.html +++ b/seminar/templates/seminar/treenode_recursive.html @@ -10,10 +10,10 @@ {% endif %} {% if obj|canPodvesitPred %} - - nejsou testovací data + - nejsou testovací data {% endif %} {% if obj|canPodvesitZa %} - - nejsou testovací data + - nejsou testovací data {% endif %} diff --git a/seminar/templatetags/treenodes.py b/seminar/templatetags/treenodes.py index d9bb668e..2aa914e4 100644 --- a/seminar/templatetags/treenodes.py +++ b/seminar/templatetags/treenodes.py @@ -181,7 +181,7 @@ def appendableChildren(value): return (NodeTypes.CAST.value, NodeTypes.TEXT.value, ) - if isCast(value): + if isCast(value.node): return appendableChildren(value.parent) return None diff --git a/seminar/treelib.py b/seminar/treelib.py index ba08e07a..8653e599 100644 --- a/seminar/treelib.py +++ b/seminar/treelib.py @@ -1,4 +1,5 @@ from django.core.exceptions import ObjectDoesNotExist +from django.db import transaction # NOTE: node.prev a node.succ jsou implementovány přímo v models.TreeNode # TODO: Všechny tyto funkce se naivně spoléhají na to, že jako parametr dostanou nějaký TreeNode (některé možná zvládnou i None) # TODO: Chceme, aby všechno nějak zvládlo None jako parametr. @@ -239,6 +240,7 @@ def swap(node, other): class TreeLibError(RuntimeError): pass +@transaction.atomic def swap_pred(node): if node is None: raise TreeLibError("Nelze přesunout None. Tohle by se nemělo stát.") @@ -248,14 +250,19 @@ def swap_pred(node): pre_pred = safe_pred(pred) succ = node.succ + #TODO zkontrolovaz, ze toto poradi nerozbiji db a neskonci s unique constraint violation if pre_pred is not None: - pre_pred.succ = node + pre_pred.succ = None pre_pred.save() node.succ = pred node.save() pred.succ = succ pred.save() + if pre_pred is not None: + pre_pred.succ = node + pre_pred.save() +@transaction.atomic def swap_succ(node): if node is None: raise TreeLibError("Nelze přesunout None. Tohle by se nemělo stát.") @@ -266,12 +273,15 @@ def swap_succ(node): post_succ = succ.succ if pred is not None: - pred.succ = succ + pred.succ = None pred.save() succ.succ = node succ.save() node.succ = post_succ node.save() + if pred is not None: + pred.succ = succ + pred.save() # Rotace stromu # Dokumentace viz wiki: diff --git a/seminar/views/views_all.py b/seminar/views/views_all.py index 8bad8c03..46297dba 100644 --- a/seminar/views/views_all.py +++ b/seminar/views/views_all.py @@ -159,51 +159,60 @@ class TreeNodePridatView(generic.View): } def post(self, request, *args, **kwargs): - kam = self.kwargs['kam'] node = s.TreeNode.objects.get(pk=self.kwargs['pk']) + kam = self.kwargs['kam'] if kam not in ('syn','za'): raise ValidationError('Přidat lze pouze před nebo za node') if kam == 'syn': strtyp = request.POST.get('pridat-typ-{}-syn'.format(node.id)) typ = self.type_from_str[strtyp] - node = treelib.create_child(node,typ) + if typ == m.TextNode: + text_obj = m.Text() + text_obj.save() + node = treelib.create_child(node,typ,text=text_obj) + else: + node = treelib.create_child(node,typ) if kam == 'za': strtyp = request.POST.get('pridat-typ-{}-za'.format(node.id)) typ = self.type_from_str[strtyp] - node = treelib.create_node_after(node,typ) + if typ == m.TextNode: + text_obj = m.Text() + text_obj.save() + node = treelib.create_node_after(node,typ,text=text_obj) + else: + node = treelib.create_node_after(node,typ) return redirect(node.get_admin_url()) - - - - - - - - - class TreeNodeSmazatView(generic.base.View): def post(self, request, *args, **kwargs): - pass - pass + node = s.TreeNode.objects.get(pk=self.kwargs['pk']) + if node.first_child: + raise NotImplemented('Mazání TreeNode se syny není zatím podporováno!') + node.delete() class TreeNodeOdvesitView(generic.base.View): def post(self, request, *args, **kwargs): + node = s.TreeNode.objects.get(pk=self.kwargs['pk']) pass pass class TreeNodePodvesitView(generic.base.View): def post(self, request, *args, **kwargs): - pass - pass + node = s.TreeNode.objects.get(pk=self.kwargs['pk']) + kam = self.kwargs['kam'] + if kam == 'pred': + lower_node(node) + elif kam == 'za': + raise NotImplemented('Podvěsit za není zatím podporováno') class TreeNodeProhoditView(generic.base.View): def post(self, request, *args, **kwargs): - pass - pass + node = s.TreeNode.objects.get(pk=self.kwargs['pk']) + treelib.swap_succ(node) + #FIXME ve formulari predat puvodni url a vratit redirect na ni class ProblemView(generic.DetailView): From be7d587b826653f68927d0372cd59208f9c643b1 Mon Sep 17 00:00:00 2001 From: "Tomas \"Jethro\" Pokorny" Date: Sat, 30 May 2020 23:52:30 +0200 Subject: [PATCH 072/286] seminar | TreeNode editor - id u TreeNodu, rozumny admin pro CastNode --- seminar/admin.py | 1 + seminar/templates/seminar/treenode_recursive.html | 1 + 2 files changed, 2 insertions(+) diff --git a/seminar/admin.py b/seminar/admin.py index 268bdbba..ce7cfd80 100644 --- a/seminar/admin.py +++ b/seminar/admin.py @@ -165,6 +165,7 @@ class TextNodeAdmin(PolymorphicChildModelAdmin): class TextNodeAdmin(PolymorphicChildModelAdmin): base_model = m.CastNode show_in_index = True + fields = ('nadpis',) @admin.register(m.OrgTextNode) class TextNodeAdmin(PolymorphicChildModelAdmin): diff --git a/seminar/templates/seminar/treenode_recursive.html b/seminar/templates/seminar/treenode_recursive.html index a95568df..89dfb594 100644 --- a/seminar/templates/seminar/treenode_recursive.html +++ b/seminar/templates/seminar/treenode_recursive.html @@ -3,6 +3,7 @@
{{obj.node}} + {{obj.node.id}} {% if obj.node|deletable %} {% endif %} From 24642324abfcb879afbefc06a10823c39bd05203 Mon Sep 17 00:00:00 2001 From: "Tomas \"Jethro\" Pokorny" Date: Sat, 30 May 2020 23:54:09 +0200 Subject: [PATCH 073/286] seminar | TreeNode - treelib, referer, mazani - v Treelib opraveno prohazovani TreeNodu, uz upravuje otce u prvniho syna - pridano mazani vrcholu, vrchol s podstromem nejde smazat (a nenencha se) - operace modifikujici tvar stromu nyni pouzivaji referer pro navrat na puvodni adresu --- seminar/treelib.py | 85 +++++++++++++++++++++++++------------- seminar/views/views_all.py | 8 ++-- 2 files changed, 62 insertions(+), 31 deletions(-) diff --git a/seminar/treelib.py b/seminar/treelib.py index 8653e599..b57b3459 100644 --- a/seminar/treelib.py +++ b/seminar/treelib.py @@ -27,15 +27,12 @@ def safe_pred(node): except ObjectDoesNotExist: return None -def first_brother(node): - if node is None: +def safe_succ(node): + try: + return node.succ + except ObjectDoesNotExist: return None - brother = node - while safe_pred(brother) is not None: - brother = safe_pred(brother) - return brother -# A to samé pro .father_of_first def safe_father_of_first(node): first = first_brother(node) try: @@ -43,6 +40,14 @@ def safe_father_of_first(node): except ObjectDoesNotExist: return None +def first_brother(node): + if node is None: + return None + brother = node + while safe_pred(brother) is not None: + brother = safe_pred(brother) + return brother + ## Rodinné vztahy def get_parent(node): # Nejdřív získáme prvního potomka... @@ -240,29 +245,9 @@ def swap(node, other): class TreeLibError(RuntimeError): pass -@transaction.atomic -def swap_pred(node): - if node is None: - raise TreeLibError("Nelze přesunout None. Tohle by se nemělo stát.") - pred = safe_pred(node) - if pred is None: - raise TreeLibError("Nelze posunout vlevo, není tam žádný další uzel.") - pre_pred = safe_pred(pred) - succ = node.succ - - #TODO zkontrolovaz, ze toto poradi nerozbiji db a neskonci s unique constraint violation - if pre_pred is not None: - pre_pred.succ = None - pre_pred.save() - node.succ = pred - node.save() - pred.succ = succ - pred.save() - if pre_pred is not None: - pre_pred.succ = node - pre_pred.save() @transaction.atomic +#FIXME Neřeší father-of-first! def swap_succ(node): if node is None: raise TreeLibError("Nelze přesunout None. Tohle by se nemělo stát.") @@ -275,6 +260,14 @@ def swap_succ(node): if pred is not None: pred.succ = None pred.save() + + # Nemame predchudce -> je potreba upravit otce + father = safe_father_of_first(node) + if pred is None and father is not None: # Mame otce + father.first_child = succ + father.save() + + succ.succ = node succ.save() node.succ = post_succ @@ -283,6 +276,15 @@ def swap_succ(node): pred.succ = succ pred.save() +@transaction.atomic +def swap_pred(node): + if node is None: + raise TreeLibError("Nelze přesunout None. Tohle by se nemělo stát.") + pred = safe_pred(node) + if pred is None: + raise TreeLibError("Nelze posunout vlevo, není tam žádný další uzel.") + return swap_succ(pred) + # Rotace stromu # Dokumentace viz wiki: # (lower bude jednoduchá rotace, ne mega, existence jednoduché rotace mi došla až po nakreslení obrázku) @@ -336,3 +338,30 @@ def lower_node(node): subtree2_tail.save() # To by mělo být všechno... + +def delete_node(node): + if node is None: + raise TreeLibError("Nelze smazat None. Tohle by se nemělo stát.") + if node.first_child: + raise TreeLibError("Mazání TreeNode s potomky není podporováno.") + + print(f'My:{node}, predchudce:{safe_pred(node)}, naslednik:{safe_succ(node)}, otec:{safe_father_of_first(node)}') + + # Jsme prvnim synem + if safe_pred(node) is None: + if safe_succ(node) is None: # Jsme jedinym synem - upravime otce (pokud mame) a smazeme se + father = safe_father_of_first(node) + if father is not None: + father.first_child = None + father.save() + node.delete() + return + + else: # mame bratra + swap_succ(node) # Staneme se neprvním synem, pokracujeme mimo if + + # Jsme neprvním synem + prev = node.prev + prev.succ = node.succ + node.delete() + prev.save() diff --git a/seminar/views/views_all.py b/seminar/views/views_all.py index 59aa2995..9aaf46ab 100644 --- a/seminar/views/views_all.py +++ b/seminar/views/views_all.py @@ -190,8 +190,9 @@ class TreeNodeSmazatView(generic.base.View): def post(self, request, *args, **kwargs): node = s.TreeNode.objects.get(pk=self.kwargs['pk']) if node.first_child: - raise NotImplemented('Mazání TreeNode se syny není zatím podporováno!') - node.delete() + raise NotImplementedError('Mazání TreeNode se syny není zatím podporováno!') + treelib.delete_node(node) + return redirect(request.headers.get('referer')) class TreeNodeOdvesitView(generic.base.View): def post(self, request, *args, **kwargs): @@ -206,12 +207,13 @@ class TreeNodePodvesitView(generic.base.View): if kam == 'pred': lower_node(node) elif kam == 'za': - raise NotImplemented('Podvěsit za není zatím podporováno') + raise NotImplementedError('Podvěsit za není zatím podporováno') class TreeNodeProhoditView(generic.base.View): def post(self, request, *args, **kwargs): node = s.TreeNode.objects.get(pk=self.kwargs['pk']) treelib.swap_succ(node) + return redirect(request.headers.get('referer')) #FIXME ve formulari predat puvodni url a vratit redirect na ni From 32bca992b740ed0ce9227bc893aae886be72e59d Mon Sep 17 00:00:00 2001 From: "Tomas \"Jethro\" Pokorny" Date: Sat, 30 May 2020 23:59:54 +0200 Subject: [PATCH 074/286] seminar | TreeNode - opraven lower_node, ale ma bug v Treelib --- seminar/views/views_all.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/seminar/views/views_all.py b/seminar/views/views_all.py index 9aaf46ab..e5aef445 100644 --- a/seminar/views/views_all.py +++ b/seminar/views/views_all.py @@ -205,9 +205,10 @@ class TreeNodePodvesitView(generic.base.View): node = s.TreeNode.objects.get(pk=self.kwargs['pk']) kam = self.kwargs['kam'] if kam == 'pred': - lower_node(node) + treelib.lower_node(node) elif kam == 'za': raise NotImplementedError('Podvěsit za není zatím podporováno') + return redirect(request.headers.get('referer')) class TreeNodeProhoditView(generic.base.View): def post(self, request, *args, **kwargs): From 74a95a8780ef7d8c8af50886fce71b96e6a9cf5f Mon Sep 17 00:00:00 2001 From: Tomas 'Jethro' Pokorny Date: Wed, 3 Jun 2020 21:41:03 +0200 Subject: [PATCH 075/286] Makefile | Pridan navod na menu a flatpages --- Makefile | 2 ++ 1 file changed, 2 insertions(+) diff --git a/Makefile b/Makefile index 18a24851..49e0cde9 100644 --- a/Makefile +++ b/Makefile @@ -31,6 +31,8 @@ install_web: venv_check pip install --upgrade setuptools # Instalace závislostí webu pip install -r requirements.txt --upgrade + # Po vygenerování testdat spusť ./manage.py loaddata sitetree_new.json, ať máš menu + # Pro synchronizaci flatpages spusť make sync_prod_flatpages install_venv: ${VENV} ${VENV_PATH} From c2483289fe89450411e464eb9692c335788c6018 Mon Sep 17 00:00:00 2001 From: Tomas 'Jethro' Pokorny Date: Wed, 3 Jun 2020 23:50:55 +0200 Subject: [PATCH 076/286] seminar | TreeNode editor ++ | Pridano odveseni a sirotcinec - doplneno nastavovani root u TreeNodu do testdat a treelib - pridana podpora odveseni do sirotcince - pridany funkce na smazani / nastaveni root u podstromu --- seminar/templates/seminar/orphanage.html | 23 ++++++++++ .../templates/seminar/treenode_recursive.html | 2 +- seminar/testutils.py | 46 +++++++++---------- seminar/treelib.py | 35 ++++++++++---- seminar/urls.py | 3 +- seminar/views/views_all.py | 18 ++++++-- 6 files changed, 90 insertions(+), 37 deletions(-) create mode 100644 seminar/templates/seminar/orphanage.html diff --git a/seminar/templates/seminar/orphanage.html b/seminar/templates/seminar/orphanage.html new file mode 100644 index 00000000..8732b394 --- /dev/null +++ b/seminar/templates/seminar/orphanage.html @@ -0,0 +1,23 @@ +{% extends "seminar/archiv/base.html" %} +{% load staticfiles %} +{% load sekizai_tags %} + +{# toto z nejakeho duvodu nefunguje #} +{% addtoblock css %} +dfsdfs + +{% endaddtoblock "css" %} + +{% block custom_css %} + +{% endblock custom_css %} + +{% load comments %} + +{% block content %} +
    +{% for obj in object_list %} +
  • {{obj}} (id {{obj.id}})
  • +{% endfor %} +
+{% endblock content %} diff --git a/seminar/templates/seminar/treenode_recursive.html b/seminar/templates/seminar/treenode_recursive.html index 89dfb594..6da7a96f 100644 --- a/seminar/templates/seminar/treenode_recursive.html +++ b/seminar/templates/seminar/treenode_recursive.html @@ -8,7 +8,7 @@ {% endif %} {% if obj.parent and obj.parent|editableSiblings %} - + {% endif %} {% if obj|canPodvesitPred %} - nejsou testovací data diff --git a/seminar/testutils.py b/seminar/testutils.py index 3c4356a2..0dc4782d 100644 --- a/seminar/testutils.py +++ b/seminar/testutils.py @@ -219,8 +219,8 @@ def gen_zadani_ulohy(rnd, cisla, organizatori, pocet_oboru, poradi_cisla, poradi na_web = text, do_cisla = text, ) - zad = TextNode.objects.create(text = text_zadani) - uloha_zadani = UlohaZadaniNode.objects.create(uloha = p, first_child = zad) + zad = TextNode.objects.create(text = text_zadani, root = p.cislo_zadani.rocnik.rocniknode) + uloha_zadani = UlohaZadaniNode.objects.create(uloha = p, first_child = zad, root = p.cislo_zadani.rocnik.rocniknode) p.ulohazadaninode = uloha_zadani otec_syn(cisla[poradi_cisla-2-1].cislonode, uloha_zadani) @@ -241,8 +241,8 @@ def gen_vzoroveho_reseni_ulohy(rnd, organizatori, uloha, pocet_opravovatelu): na_web = obsah, do_cisla = obsah ) - vzorak = TextNode.objects.create(text = text_vzoraku) - uloha_vzorak = UlohaVzorakNode.objects.create(uloha = uloha, first_child = vzorak) + vzorak = TextNode.objects.create(text = text_vzoraku, root = uloha.cislo_zadani.rocnik.rocniknode) + uloha_vzorak = UlohaVzorakNode.objects.create(uloha = uloha, first_child = vzorak, root = uloha.cislo_zadani.rocnik.rocniknode) uloha.ulohavzoraknode = uloha_vzorak uloha.opravovatele.set(rnd.sample(organizatori, pocet_opravovatelu)) @@ -409,7 +409,7 @@ def gen_cisla(rnd, rocniky): datum_deadline=deadline, verejne_db=True ) - node2 = CisloNode.objects.create(cislo = cislo, succ = node) + node2 = CisloNode.objects.create(cislo = cislo, succ = node, root=rocnik.rocniknode) cislo.save() node = node2 if otec: @@ -448,54 +448,54 @@ def gen_dlouhe_tema(rnd, organizatori, rocnik, nazev, obor, kod): for cislo in cisla: # Přidáme TemaVCisleNode do daného čísla cislo_node = cislo.cislonode - tema_cislo_node = TemaVCisleNode.objects.create(tema = tema) + tema_cislo_node = TemaVCisleNode.objects.create(tema = tema, root = cislo_node.root) insert_last_child(cislo_node, tema_cislo_node) # Přidávání obsahu do čísla - cast_node = m.CastNode.objects.create(nadpis = "Příspěvek k číslu {}".format(cislo.kod)) + cast_node = m.CastNode.objects.create(nadpis = "Příspěvek k číslu {}".format(cislo.kod), root=cislo_node.root) add_first_child(tema_cislo_node, cast_node) - text_node = TextNode.objects.create(text = get_text()) + text_node = TextNode.objects.create(text = get_text(), root=cislo_node.root) add_first_child(cast_node, text_node) - cast_node2 = m.CastNode.objects.create(nadpis = "První podproblém") + cast_node2 = m.CastNode.objects.create(nadpis = "První podproblém", root=cislo_node.root) add_first_child(text_node, cast_node2) - text_node2 = TextNode.objects.create(text = get_text()) + text_node2 = TextNode.objects.create(text = get_text(), root=cislo_node.root) add_first_child(cast_node2, text_node2) - cast_node3 = m.CastNode.objects.create(nadpis = "Druhý podproblém") + cast_node3 = m.CastNode.objects.create(nadpis = "Druhý podproblém", root=cislo_node.root) add_first_child(text_node2, cast_node3) - text_node3 = TextNode.objects.create(text = get_text()) + text_node3 = TextNode.objects.create(text = get_text(), root=cislo_node.root) add_first_child(cast_node3, text_node3) - cast_node4 = m.CastNode.objects.create(nadpis = "Třetí podproblém") + cast_node4 = m.CastNode.objects.create(nadpis = "Třetí podproblém", root=cislo_node.root) add_first_child(text_node3, cast_node4) - text_node4 = TextNode.objects.create(text = get_text()) + text_node4 = TextNode.objects.create(text = get_text(), root=cislo_node.root) add_first_child(cast_node3, text_node4) cast_node3a = m.CastNode.objects.create(nadpis = "Podproblém paralelní s " - "druhým podproblémem") + "druhým podproblémem", root=cislo_node.root) cast_node3.succ = cast_node3a cast_node3.save() - text_node3a = TextNode.objects.create(text = get_text()) + text_node3a = TextNode.objects.create(text = get_text(), root=cislo_node.root) add_first_child(cast_node3a, text_node3a) # Občas přidáme mezičíslo if rnd.randint(1, 3) == 1: - create_node_after(cislo_node, m.MezicisloNode) + create_node_after(cislo_node, m.MezicisloNode, root=cislo_node.root) mezicislo_node = cislo_node.succ cast_node_mezicislo = m.CastNode.objects.create( - nadpis = "Příspěvek k mezičíslu".format(cislo.kod)) + nadpis = "Příspěvek k mezičíslu".format(cislo.kod), root=cislo_node.root) add_first_child(mezicislo_node, cast_node_mezicislo) odstavec = lorem.paragraph() - text_mezicislo = Text.objects.create(na_web = odstavec, do_cisla = odstavec) - text_node_mezicislo = TextNode.objects.create(text = text_mezicislo) + text_mezicislo = Text.objects.create(na_web = odstavec, do_cisla = odstavec) + text_node_mezicislo = TextNode.objects.create(text = text_mezicislo, root=cislo_node.root) add_first_child(cast_node_mezicislo, text_node_mezicislo) return tema @@ -539,7 +539,7 @@ def gen_temata(rnd, rocniky, rocnik_cisla, organizatori): # Vyrobíme TemaVCisleNody pro obsah for i in range(zacatek_tematu, konec_tematu+1): - node = TemaVCisleNode.objects.create(tema = t) + node = TemaVCisleNode.objects.create(tema = t,root=rocnik.rocniknode) # FIXME: Není to off-by-one? otec = cisla[i-1].cislonode otec_syn(otec, node) @@ -596,8 +596,8 @@ def gen_ulohy_tematu(rnd, organizatori, tema, kod, cislo, cislo_se_vzorakem): na_web = obsah, do_cisla = obsah, ) - zad = TextNode.objects.create(text = text_zadani) - uloha_zadani = UlohaZadaniNode.objects.create(uloha=uloha, first_child = zad) + zad = TextNode.objects.create(text = text_zadani, root=tema.temavcislenode_set.first().root) + uloha_zadani = UlohaZadaniNode.objects.create(uloha=uloha, first_child = zad, root=tema.temavcislenode_set.first().root) uloha.ulohazadaninode = uloha_zadani return uloha, uloha_zadani diff --git a/seminar/treelib.py b/seminar/treelib.py index b57b3459..03613d05 100644 --- a/seminar/treelib.py +++ b/seminar/treelib.py @@ -181,6 +181,7 @@ def get_prev_node_of_type(node, type): # Editace stromu: def create_node_after(predecessor, type, **kwargs): new_node = type.objects.create(**kwargs) + new_node.root = predecessor.root new_node.save() succ = predecessor.succ predecessor.succ = new_node @@ -192,6 +193,7 @@ def create_node_after(predecessor, type, **kwargs): # Vyrábí prvního syna, ostatní nalepí za (existují-li) def create_child(parent, type, **kwargs): new_node = type.objects.create(**kwargs) + new_node.root = parent.root new_node.save() orig_child = parent.first_child parent.first_child = new_node @@ -231,6 +233,7 @@ def create_node_before(successor, type, **kwargs): create_child(successor.father_of_first, type, **kwargs) # Teď už easy: Jsme sirotci, takže se vyrobíme a našeho následníka si přidáme jako succ new = type.objects.create(**kwargs) + new.root = successor.root new.succ = successor new.save() return new @@ -247,7 +250,6 @@ class TreeLibError(RuntimeError): @transaction.atomic -#FIXME Neřeší father-of-first! def swap_succ(node): if node is None: raise TreeLibError("Nelze přesunout None. Tohle by se nemělo stát.") @@ -339,22 +341,20 @@ def lower_node(node): # To by mělo být všechno... -def delete_node(node): +def disconnect_node(node): + #FIXME: dodělat odstranění roota všem potomkům if node is None: - raise TreeLibError("Nelze smazat None. Tohle by se nemělo stát.") - if node.first_child: - raise TreeLibError("Mazání TreeNode s potomky není podporováno.") + raise TreeLibError("Nelze odpojit None. Tohle by se nemělo stát.") print(f'My:{node}, predchudce:{safe_pred(node)}, naslednik:{safe_succ(node)}, otec:{safe_father_of_first(node)}') # Jsme prvnim synem if safe_pred(node) is None: - if safe_succ(node) is None: # Jsme jedinym synem - upravime otce (pokud mame) a smazeme se + if safe_succ(node) is None: # Jsme jedinym synem - upravime otce (pokud mame) a odpojime se father = safe_father_of_first(node) if father is not None: father.first_child = None father.save() - node.delete() return else: # mame bratra @@ -363,5 +363,24 @@ def delete_node(node): # Jsme neprvním synem prev = node.prev prev.succ = node.succ - node.delete() + node.prev = None + node.succ = None + node.save() + clear_root(node) prev.save() + +def clear_root(node): + node.root = None + node.save() + if node.first_child: + clear_root(node.first_child) + if node.succ: + clear_root(node.succ) + +def set_root(node,root): + node.root = root + node.save() + if node.first_child: + clear_root(node.first_child) + if node.succ: + clear_root(node.succ) diff --git a/seminar/urls.py b/seminar/urls.py index e4655b99..fcaf8144 100644 --- a/seminar/urls.py +++ b/seminar/urls.py @@ -28,9 +28,10 @@ urlpatterns = [ path('treenode//', views.TreeNodeView.as_view(), name='seminar_treenode'), path('treenode/editor/pridat///', views.TreeNodePridatView.as_view(), name='treenode_pridat'), path('treenode/editor/smazat//', views.TreeNodeSmazatView.as_view(), name='treenode_smazat'), - path('treenode/editor/odvesit//', views.TreeNodeOdvesitView.as_view(), name='treenode_odvesit'), + path('treenode/editor/odvesitpryc//', views.TreeNodeOdvesitPrycView.as_view(), name='treenode_odvesitpryc'), path('treenode/editor/podvesit///', views.TreeNodePodvesitView.as_view(), name='treenode_podvesit'), path('treenode/editor/prohodit//', views.TreeNodeProhoditView.as_view(), name='treenode_prohodit'), + path('treenode/sirotcinec/', views.SirotcinecView.as_view(), name='seminar_treenode_sirotcinec'), #path('problem/(?P\d+)/(?P\d+)/', views.PrispevekView.as_view(), name='seminar_problem_prispevek'), # Soustredeni diff --git a/seminar/views/views_all.py b/seminar/views/views_all.py index e5aef445..746b1642 100644 --- a/seminar/views/views_all.py +++ b/seminar/views/views_all.py @@ -191,14 +191,18 @@ class TreeNodeSmazatView(generic.base.View): node = s.TreeNode.objects.get(pk=self.kwargs['pk']) if node.first_child: raise NotImplementedError('Mazání TreeNode se syny není zatím podporováno!') - treelib.delete_node(node) + treelib.disconnect_node(node) + node.delete() return redirect(request.headers.get('referer')) -class TreeNodeOdvesitView(generic.base.View): +class TreeNodeOdvesitPrycView(generic.base.View): def post(self, request, *args, **kwargs): node = s.TreeNode.objects.get(pk=self.kwargs['pk']) - pass - pass + treelib.disconnect_node(node) + node.root = None + node.save() + return redirect(request.headers.get('referer')) + class TreeNodePodvesitView(generic.base.View): def post(self, request, *args, **kwargs): @@ -217,6 +221,12 @@ class TreeNodeProhoditView(generic.base.View): return redirect(request.headers.get('referer')) #FIXME ve formulari predat puvodni url a vratit redirect na ni +class SirotcinecView(generic.ListView): + model = s.TreeNode + template_name = 'seminar/orphanage.html' + + def get_queryset(self): + return s.TreeNode.objects.not_instance_of(s.RocnikNode).filter(root=None) class ProblemView(generic.DetailView): model = s.Problem From 548852c83ca3aeeed71c847c5f2edb6259b6bead Mon Sep 17 00:00:00 2001 From: Tomas 'Jethro' Pokorny Date: Wed, 3 Jun 2020 23:54:59 +0200 Subject: [PATCH 077/286] seminar | sirotcinec | lepsi detekce sirotku --- seminar/views/views_all.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/seminar/views/views_all.py b/seminar/views/views_all.py index 746b1642..69832744 100644 --- a/seminar/views/views_all.py +++ b/seminar/views/views_all.py @@ -226,7 +226,7 @@ class SirotcinecView(generic.ListView): template_name = 'seminar/orphanage.html' def get_queryset(self): - return s.TreeNode.objects.not_instance_of(s.RocnikNode).filter(root=None) + return s.TreeNode.objects.not_instance_of(s.RocnikNode).filter(root=None,succ=None,father_of_first=None) class ProblemView(generic.DetailView): model = s.Problem From b43a9d142b420841294b089858a6930a7ee4da5f Mon Sep 17 00:00:00 2001 From: Pavel 'LEdoian' Turinsky Date: Thu, 11 Jun 2020 18:19:38 +0000 Subject: [PATCH 078/286] =?UTF-8?q?TreeLib=20|=20p=C5=99epsan=C3=BD=20is?= =?UTF-8?q?=5Forphan?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- seminar/treelib.py | 22 +++++++++++++++------- 1 file changed, 15 insertions(+), 7 deletions(-) diff --git a/seminar/treelib.py b/seminar/treelib.py index 03613d05..95fae9a9 100644 --- a/seminar/treelib.py +++ b/seminar/treelib.py @@ -13,13 +13,6 @@ def print_tree(node,indent=0): if node.succ: print_tree(node.succ, indent=indent) -def is_orphan(node): - """ Zjišťuje, jestli už je daný Node někde pověšený či nikoli. """ - if safe_father_of_first(node) is None and safe_pred(node) is None: - return True - else: - return False - # Django je trošku hloupé, takže node.prev nevrací None, ale hází django.core.exceptions.ObjectDoesNotExist def safe_pred(node): try: @@ -63,6 +56,21 @@ def get_last_child(node): else: return last_brother(first) +def is_orphan(node): + """ Zjišťuje, jestli už je daný Node někde pověšený či nikoli. """ + # None jsem se rozhodl, že sirotek není + if node is None: + return False + if get_parent(node) is None: + if node.succ is not None or safe_pred(node) is not None or safe_father_of_first(node) is not None or node.root is not None: + import logging + logger = logging.getLogger(__name__) + # Error = pošle mail :-) + logger.error(f"Node-sirotek s id {node.id} má rodinné vztahy (Node: {node})") + return True + else: + return False + # Obecný next: další Node v "the-right-order" pořadí (já, pak potomci, pak sousedé) def general_next(node): # Máme potomka? From 981cbc8bf17b1070a7e53d9700a77fa4fa2760e6 Mon Sep 17 00:00:00 2001 From: Pavel 'LEdoian' Turinsky Date: Thu, 11 Jun 2020 18:35:49 +0000 Subject: [PATCH 079/286] =?UTF-8?q?TreeLib:=20explicitn=C4=9B=20o=C5=A1et?= =?UTF-8?q?=C5=99en=C3=A9=20node=3DNone=20v=20"z=C3=ADsk=C3=A1vac=C3=ADch"?= =?UTF-8?q?=20funkc=C3=ADch?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- seminar/treelib.py | 33 +++++++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) diff --git a/seminar/treelib.py b/seminar/treelib.py index 95fae9a9..06a710cf 100644 --- a/seminar/treelib.py +++ b/seminar/treelib.py @@ -15,11 +15,14 @@ def print_tree(node,indent=0): # Django je trošku hloupé, takže node.prev nevrací None, ale hází django.core.exceptions.ObjectDoesNotExist def safe_pred(node): + if node is None: + return None try: return node.prev except ObjectDoesNotExist: return None +# FIXME: Proč????? def safe_succ(node): try: return node.succ @@ -27,6 +30,8 @@ def safe_succ(node): return None def safe_father_of_first(node): + if node is None: + return None first = first_brother(node) try: return first.father_of_first @@ -42,6 +47,7 @@ def first_brother(node): return brother ## Rodinné vztahy +# Tohle se teď zrovna k None chová správně, ale je potřeba na to dávat pozor def get_parent(node): # Nejdřív získáme prvního potomka... while safe_pred(node) is not None: @@ -50,6 +56,8 @@ def get_parent(node): return safe_father_of_first(node) def get_last_child(node): + if node is None: + return None first = node.first_child if first is None: return None @@ -73,6 +81,8 @@ def is_orphan(node): # Obecný next: další Node v "the-right-order" pořadí (já, pak potomci, pak sousedé) def general_next(node): + if node is None: + return None # Máme potomka? if node.first_child is not None: return node.first_child @@ -85,6 +95,8 @@ def general_next(node): return node.succ def last_brother(node): + if node is None: + return None while node.succ is not None: node = node.succ return node @@ -92,6 +104,7 @@ def last_brother(node): def general_prev(node): # Předchůdce je buď rekurzivně poslední potomek předchůdce, nebo náš otec. # Otce vyřešíme nejdřív: + # Tady se ošetří node=None samo if safe_pred(node) is None: return safe_father_of_first(node) pred = safe_pred(node) @@ -109,12 +122,16 @@ def me_and_right_brothers(node): current = current.succ def right_brothers(node): + if node is None: + return generator = me_and_right_brothers(node.succ) for item in generator: yield item # Generátor všech sourozenců (vč. sám sebe) def all_brothers(node): + if node is None: + return # Najdeme prvního bratra fb = first_brother(node) marb = me_and_right_brothers(fb) @@ -122,6 +139,8 @@ def all_brothers(node): yield cur def all_proper_brothers(node): + if node is None: + return all = all_brothers(node) for br in all: if br is node: @@ -130,12 +149,16 @@ def all_proper_brothers(node): def all_children(node): """ Generátor všech potomků zadaného Node. """ + if node is None: + return brothers = all_brothers(node.first_child) for br in brothers: yield br def all_children_of_type(node, type): """ Generuje všechny potomky daného Node a daného typu. """ + if node is None: + return brothers = all_brothers(node.first_child) for br in brothers: if isinstance(br, type): @@ -144,6 +167,8 @@ def all_children_of_type(node, type): # Generátor následníků v "the-right-order" # Bez tohoto vrcholu def all_following(node): + if node is None: + return current = general_next(node) while current is not None: yield current @@ -153,12 +178,16 @@ def all_following(node): # Najdi dalšího bratra nějakého typu, nebo None. # hledá i podtřídy, i.e. get_next_brother_of_type(neco, TreeNode) je prostě succ. def get_next_brother_of_type(node, type): + if node is None: + return for current in right_brothers(node): if isinstance(current, type): return current return None def get_prev_brother_of_type(node, type): + if node is None: + return # Na tohle není rozumný generátor, ani ho asi nechceme, prostě to implementujeme cyklem. current = node while safe_pred(current) is not None: @@ -169,6 +198,8 @@ def get_prev_brother_of_type(node, type): # Totéž pro "the-right-order" pořadí def get_next_node_of_type(node, type): + if node is None: + return for cur in all_folowing(node): if isinstance(cur, type): return cur @@ -176,6 +207,8 @@ def get_next_node_of_type(node, type): def get_prev_node_of_type(node, type): # Na tohle není rozumný generátor, ani ho asi nechceme, prostě to implementujeme cyklem. + if node is None: + return current = node while general_prev(current) is not None: current = general_prev(current) From 3d0adc6c9eadb37f545769edcae003d00ed7367f Mon Sep 17 00:00:00 2001 From: Pavel 'LEdoian' Turinsky Date: Thu, 11 Jun 2020 20:27:45 +0000 Subject: [PATCH 080/286] =?UTF-8?q?TreeLib:=20Dal=C5=A1=C3=AD=20none-check?= =?UTF-8?q?y?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Zbývají rotace --- seminar/treelib.py | 24 +++++++++++++++++++----- 1 file changed, 19 insertions(+), 5 deletions(-) diff --git a/seminar/treelib.py b/seminar/treelib.py index 06a710cf..6efab260 100644 --- a/seminar/treelib.py +++ b/seminar/treelib.py @@ -218,9 +218,18 @@ def get_prev_node_of_type(node, type): +# Exception, kterou některé metody při špatném použití mohou házet +# Hlavní důvod je možnost informovat o selhání, aby se příslušný problém dal zobrazit na frontendu, +class TreeLibError(RuntimeError): + pass + # Editace stromu: def create_node_after(predecessor, type, **kwargs): + if predecessor is None: + raise TreeLibError("Nelze vyrábět sirotky! (predecessor=None)") + if not isinstance(type, TreeNode): + raise TreeLibError("Nový node není node!") new_node = type.objects.create(**kwargs) new_node.root = predecessor.root new_node.save() @@ -233,6 +242,10 @@ def create_node_after(predecessor, type, **kwargs): # Vyrábí prvního syna, ostatní nalepí za (existují-li) def create_child(parent, type, **kwargs): + if parent is None: + raise TreeLibError("Nelze vyrábět sirotky! (parent=None)") + if not isinstance(type, TreeNode): + raise TreeLibError("Nový node není node!") new_node = type.objects.create(**kwargs) new_node.root = parent.root new_node.save() @@ -246,6 +259,8 @@ def create_child(parent, type, **kwargs): return new_node def insert_last_child(parent, node): + if parent is None: + raise TreeLibError("Nelze vyrábět sirotky! (parent=None)") """ Zadaný Node přidá jako posledního potomka otce. """ last = get_last_child(parent) if not is_orphan(node): @@ -264,6 +279,10 @@ def insert_last_child(parent, node): last.save() def create_node_before(successor, type, **kwargs): + if successor is None: + raise TreeLibError("Nelze vyrábět sirotky! (successor=None)") + if not isinstance(type, TreeNode): + raise TreeLibError("Nový node není node!") if safe_pred(successor) is not None: # Easy: přidáme za předchůdce create_node_after(successor.prev, type, **kwargs) @@ -284,11 +303,6 @@ def create_node_before(successor, type, **kwargs): def swap(node, other): raise NotImplementedError("YAGNI (You aren't gonna need it).") -# Exception, kterou některé metody při špatném použití mohou házet -# Hlavní důvod je možnost informovat o selhání, aby se příslušný problém dal zobrazit na frontendu, -class TreeLibError(RuntimeError): - pass - @transaction.atomic def swap_succ(node): From ebc5967cc58165f9e5204d31fb59706388d84c1e Mon Sep 17 00:00:00 2001 From: Pavel 'LEdoian' Turinsky Date: Thu, 11 Jun 2020 20:36:57 +0000 Subject: [PATCH 081/286] =?UTF-8?q?TreeLib:=20chyb=C4=9Bj=C3=ADc=C3=AD=20i?= =?UTF-8?q?mport?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- seminar/treelib.py | 1 + 1 file changed, 1 insertion(+) diff --git a/seminar/treelib.py b/seminar/treelib.py index 6efab260..8784c2d9 100644 --- a/seminar/treelib.py +++ b/seminar/treelib.py @@ -1,5 +1,6 @@ from django.core.exceptions import ObjectDoesNotExist from django.db import transaction +from seminar.models import TreeNode # NOTE: node.prev a node.succ jsou implementovány přímo v models.TreeNode # TODO: Všechny tyto funkce se naivně spoléhají na to, že jako parametr dostanou nějaký TreeNode (některé možná zvládnou i None) # TODO: Chceme, aby všechno nějak zvládlo None jako parametr. From b6f2b94a0135b3487b0da258a601ff8f668f60b7 Mon Sep 17 00:00:00 2001 From: Pavel 'LEdoian' Turinsky Date: Thu, 11 Jun 2020 22:13:26 +0000 Subject: [PATCH 082/286] =?UTF-8?q?Opraven=C3=AD=20cyklick=C3=BDch=20impor?= =?UTF-8?q?t=C5=AF=20(pls=20don't=20kill=20me)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- seminar/models.py | 2 +- seminar/treelib.py | 4 +++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/seminar/models.py b/seminar/models.py index c045b658..8a4090fa 100644 --- a/seminar/models.py +++ b/seminar/models.py @@ -28,7 +28,6 @@ from reversion import revisions as reversion from seminar.utils import roman, FirstTagParser # Pro získání úryvku z TextNode from unidecode import unidecode # Používám pro získání ID odkazu (ještě je to někde po někom zakomentované) -from seminar.treelib import safe_pred from polymorphic.models import PolymorphicModel @@ -1342,6 +1341,7 @@ class MezicisloNode(TreeNode): # TODO: Využít TreeLib def aktualizuj_nazev(self): + from seminar.treelib import safe_pred if safe_pred(self) is not None: if (self.prev.get_real_instance_class() != CisloNode and self.prev.get_real_instance_class() != MezicisloNode): diff --git a/seminar/treelib.py b/seminar/treelib.py index 8784c2d9..2fb53c8e 100644 --- a/seminar/treelib.py +++ b/seminar/treelib.py @@ -1,6 +1,5 @@ from django.core.exceptions import ObjectDoesNotExist from django.db import transaction -from seminar.models import TreeNode # NOTE: node.prev a node.succ jsou implementovány přímo v models.TreeNode # TODO: Všechny tyto funkce se naivně spoléhají na to, že jako parametr dostanou nějaký TreeNode (některé možná zvládnou i None) # TODO: Chceme, aby všechno nějak zvládlo None jako parametr. @@ -227,6 +226,7 @@ class TreeLibError(RuntimeError): # Editace stromu: def create_node_after(predecessor, type, **kwargs): + from seminar.models import TreeNode if predecessor is None: raise TreeLibError("Nelze vyrábět sirotky! (predecessor=None)") if not isinstance(type, TreeNode): @@ -243,6 +243,7 @@ def create_node_after(predecessor, type, **kwargs): # Vyrábí prvního syna, ostatní nalepí za (existují-li) def create_child(parent, type, **kwargs): + from seminar.models import TreeNode if parent is None: raise TreeLibError("Nelze vyrábět sirotky! (parent=None)") if not isinstance(type, TreeNode): @@ -280,6 +281,7 @@ def insert_last_child(parent, node): last.save() def create_node_before(successor, type, **kwargs): + from seminar.models import TreeNode if successor is None: raise TreeLibError("Nelze vyrábět sirotky! (successor=None)") if not isinstance(type, TreeNode): From 15449ae24bd7bbc22b550e8c5d4339664b7f7ac5 Mon Sep 17 00:00:00 2001 From: Pavel 'LEdoian' Turinsky Date: Thu, 11 Jun 2020 22:51:55 +0000 Subject: [PATCH 083/286] TreeLib: Fix type check --- seminar/treelib.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/seminar/treelib.py b/seminar/treelib.py index 2fb53c8e..a17d9aee 100644 --- a/seminar/treelib.py +++ b/seminar/treelib.py @@ -229,7 +229,7 @@ def create_node_after(predecessor, type, **kwargs): from seminar.models import TreeNode if predecessor is None: raise TreeLibError("Nelze vyrábět sirotky! (predecessor=None)") - if not isinstance(type, TreeNode): + if not issubclass(type, TreeNode): raise TreeLibError("Nový node není node!") new_node = type.objects.create(**kwargs) new_node.root = predecessor.root @@ -246,7 +246,7 @@ def create_child(parent, type, **kwargs): from seminar.models import TreeNode if parent is None: raise TreeLibError("Nelze vyrábět sirotky! (parent=None)") - if not isinstance(type, TreeNode): + if not issubclass(type, TreeNode): raise TreeLibError("Nový node není node!") new_node = type.objects.create(**kwargs) new_node.root = parent.root @@ -284,7 +284,7 @@ def create_node_before(successor, type, **kwargs): from seminar.models import TreeNode if successor is None: raise TreeLibError("Nelze vyrábět sirotky! (successor=None)") - if not isinstance(type, TreeNode): + if not issubclass(type, TreeNode): raise TreeLibError("Nový node není node!") if safe_pred(successor) is not None: # Easy: přidáme za předchůdce From 7e7303a50f23b9ed010973daad88cd968b7724fc Mon Sep 17 00:00:00 2001 From: Pavel 'LEdoian' Turinsky Date: Thu, 11 Jun 2020 23:39:12 +0000 Subject: [PATCH 084/286] TreeLib: opraveny rotace --- seminar/treelib.py | 62 +++++++++++++++++++++++++++++++--------------- 1 file changed, 42 insertions(+), 20 deletions(-) diff --git a/seminar/treelib.py b/seminar/treelib.py index a17d9aee..bd47da4d 100644 --- a/seminar/treelib.py +++ b/seminar/treelib.py @@ -3,6 +3,7 @@ from django.db import transaction # NOTE: node.prev a node.succ jsou implementovány přímo v models.TreeNode # TODO: Všechny tyto funkce se naivně spoléhají na to, že jako parametr dostanou nějaký TreeNode (některé možná zvládnou i None) # TODO: Chceme, aby všechno nějak zvládlo None jako parametr. +# TODO: Do nějakých consistency-checků přidat hledání polo-sirotků (kteří nesplňují invarianty) # Slouží k debugování pro rychlé získání představy o podobě podstromu pod tímto TreeNode. def print_tree(node,indent=0): @@ -347,55 +348,76 @@ def swap_pred(node): # Rotace stromu # Dokumentace viz wiki: -# (lower bude jednoduchá rotace, ne mega, existence jednoduché rotace mi došla až po nakreslení obrázku) def raise_node(node): if node is None: raise TreeLibError("Nelze přesunout None. Tohle by se nemělo stát.") # Pojmenování viz WIKI (as of 2020-03-19 01:33:44 GMT+1) - # FIXME: Velmi naivní, chybí error checky + # FIXME: Trochu méně naivní, nevěřím tomu, prosím otestovat D = node C = get_parent(D) - E = C.succ - subtree4_head = D.first_child - subtree4_tail = last_brother(subtree4_head) - subtree3P_head = D.succ - subtree3L_head = C.first_child - subtree3L_tail = safe_pred(D) + if C is None: + raise TreeLibError("Nelze povýšit vrchol, jenž nemá otce.") + E = C.succ # Může být None a ničemu to nevadí + subtree4_head = D.first_child # Může být None, ale pak se musí z 3P udělat přímo potomek D + subtree4_tail = last_brother(subtree4_head) # Měl by být None právě když je sub4_head=None + subtree3P_head = D.succ # Může být None a ničemu to nevadí + subtree3L_tail = safe_pred(D) # Pokud je None, D je první syn C a C má tedy skončit bezdětný # Prostor pro motlitbu... pass # Amen. - C.succ = D + # Teď už nesmíme spadnout, protože jinak skončíme se stromem v nekonzistentním stavu + C.succ = D # Nespadne C.save() - D.succ = E + D.succ = E # Nespadne D.save() - subtree3L_tail.succ = None - subtree3L_tail.save() - subtree4_tail.succ = subtree3P.head - subtree4_tail.save() + + if subtree3L_tail is not None: + subtree3L_tail.succ = None + subtree3L_tail.save() + else: + assert C.first_child is D + C.first_child = None + C.save() + + if subtree4_tail is not None: + subtree4_tail.succ = subtree3P_head + subtree4_tail.save() + else: + D.first_child = subtree3P_head + D.save() # To by mělo být všechno... +# (lower bude jednoduchá rotace, ne mega, existence jednoduché rotace mi došla až po nakreslení obrázku) def lower_node(node): if node is None: raise TreeLibError("Nelze přesunout None. Tohle by se nemělo stát.") # Pojmenování viz WIKI (as of 2020-03-19 01:33:44 GMT+1) # FIXME: Velmi naivní, chybí error checky C = node - D = C.succ + D = C.succ # Může být None a ničemu to nevadí B = safe_pred(C) - subtree2_head = B.first_child - subtree2_tail = last_brother(subtree2_head) + if B is None: + raise TreeLibError("Nelze ponížit prvního syna (není pod co)") + subtree2_head = B.first_child # Je-li None, pak se z C má stát první syn + subtree2_tail = last_brother(subtree2_head) # None iff head=None, doufám # Prostor pro motlitbu... pass # Amen. - B.succ = D + # Teď už nesmíme spadnout, protože jinak skončíme se stromem v nekonzistentním stavu + B.succ = D # Nespadne B.save() - subtree2_tail.succ = C - subtree2_tail.save() + if subtree2_tail is not None: + subtree2_tail.succ = C + subtree2_tail.save() + else: + assert subtree2_head is None + B.first_child = C + B.save() # To by mělo být všechno... From 5c11369f5138d6b63ba65f887e6d67e558dfc446 Mon Sep 17 00:00:00 2001 From: Pavel 'LEdoian' Turinsky Date: Thu, 11 Jun 2020 23:42:47 +0000 Subject: [PATCH 085/286] =?UTF-8?q?Zp=C5=99esn=C4=9Bn=C3=AD=20koment=C3=A1?= =?UTF-8?q?=C5=99=C5=AF=20:-)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- seminar/treelib.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/seminar/treelib.py b/seminar/treelib.py index bd47da4d..fe4ebce0 100644 --- a/seminar/treelib.py +++ b/seminar/treelib.py @@ -3,7 +3,7 @@ from django.db import transaction # NOTE: node.prev a node.succ jsou implementovány přímo v models.TreeNode # TODO: Všechny tyto funkce se naivně spoléhají na to, že jako parametr dostanou nějaký TreeNode (některé možná zvládnou i None) # TODO: Chceme, aby všechno nějak zvládlo None jako parametr. -# TODO: Do nějakých consistency-checků přidat hledání polo-sirotků (kteří nesplňují invarianty) +# TODO: Do nějakých consistency-checků přidat hledání polo-sirotků (kteří nesplňují invarianty, třeba nejsou dosažitelní a mají root, vyrábějí DAG, ...) # Slouží k debugování pro rychlé získání představy o podobě podstromu pod tímto TreeNode. def print_tree(node,indent=0): @@ -395,7 +395,7 @@ def lower_node(node): if node is None: raise TreeLibError("Nelze přesunout None. Tohle by se nemělo stát.") # Pojmenování viz WIKI (as of 2020-03-19 01:33:44 GMT+1) - # FIXME: Velmi naivní, chybí error checky + # FIXME: Trochu naivní, prosím otestovat C = node D = C.succ # Může být None a ničemu to nevadí B = safe_pred(C) From 8bb6e770fe79568643b8fac06c6ef2e8def2730e Mon Sep 17 00:00:00 2001 From: "Tomas \"Jethro\" Pokorny" Date: Fri, 12 Jun 2020 01:56:07 +0200 Subject: [PATCH 086/286] seminar | treenode editor | prepracovan system pridavani TreeNodu Zatim jen rozepsano, nefunkcni. --- mamweb/static/css/mamweb-dev.css | 3 ++ seminar/static/seminar/treenode_editor.js | 18 +++++++++ seminar/templates/seminar/treenode.html | 1 + .../templates/seminar/treenode_add_stub.html | 14 ++++++- seminar/templatetags/treenodes.py | 38 +++++++++++++++++++ seminar/urls.py | 2 +- seminar/views/views_all.py | 38 +++++++++++++++---- 7 files changed, 104 insertions(+), 10 deletions(-) create mode 100644 seminar/static/seminar/treenode_editor.js diff --git a/mamweb/static/css/mamweb-dev.css b/mamweb/static/css/mamweb-dev.css index 1f4d286d..23472e51 100644 --- a/mamweb/static/css/mamweb-dev.css +++ b/mamweb/static/css/mamweb-dev.css @@ -27,3 +27,6 @@ div.node_type { background-color: #d4d4d4; } +.hidden-tn { + display: none; +} diff --git a/seminar/static/seminar/treenode_editor.js b/seminar/static/seminar/treenode_editor.js new file mode 100644 index 00000000..d7f20d0d --- /dev/null +++ b/seminar/static/seminar/treenode_editor.js @@ -0,0 +1,18 @@ +function showSelectedItemForm(sel,id){ + var option; + var name; + var div; + Array.from(sel.options).forEach(function(option){ + console.log(option); + name = 'pridat-'+option.value+'-'+id; + div = document.getElementById(name); + console.log(div); + div.style.display = 'none'; + }); + name = sel.options[sel.selectedIndex].value; + name = 'pridat-'+name+'-'+id; + div = document.getElementById(name); + console.log(div); + div.style.display = 'block'; + +} diff --git a/seminar/templates/seminar/treenode.html b/seminar/templates/seminar/treenode.html index a6dc39f9..1440de86 100644 --- a/seminar/templates/seminar/treenode.html +++ b/seminar/templates/seminar/treenode.html @@ -10,6 +10,7 @@ dfsdfs {% block custom_css %} + {% endblock custom_css %} {% load comments %} diff --git a/seminar/templates/seminar/treenode_add_stub.html b/seminar/templates/seminar/treenode_add_stub.html index 09f2d2fa..dd3fc670 100644 --- a/seminar/templates/seminar/treenode_add_stub.html +++ b/seminar/templates/seminar/treenode_add_stub.html @@ -5,13 +5,23 @@ {% appendableChildren obj.parent as dostupne_typy %} {% endif %} +{# ulohaZadani ulohaVzorak Reseni Cast Text #} {% if dostupne_typy %}
Přidat {{kam}} - {% for typ in dostupne_typy %} {% endfor %} - +
+ Nadpis: + +
+
Vytvořit
+
Vytvořit, Tady bude autocomplete na reseniNode
+
Vytvořit zadání
+
Vytvořit vzorák k: Tady bude autocomplete na problémy k aktuálnímu kontextu
+ +
{% endif %}{# appendablebleChildren #} diff --git a/seminar/templatetags/treenodes.py b/seminar/templatetags/treenodes.py index 2aa914e4..f1fae1bf 100644 --- a/seminar/templatetags/treenodes.py +++ b/seminar/templatetags/treenodes.py @@ -185,7 +185,45 @@ def appendableChildren(value): return appendableChildren(value.parent) return None +@register.simple_tag +def canAppendReseni(value): + if isTemaVCisle(value.node): + return True + if isCast(value.node): + return canAppendReseni(value.parent) + return False + +@register.simple_tag +def canAppendUlohaZadani(value): + if isTemaVCisle(value.node): + return True + if isCast(value.node): + return canAppendUlohaZadani(value.parent) + return False + +@register.simple_tag +def canAppendUlohaVzorak(value): + if isTemaVCisle(value.node): + return True + if isCast(value.node): + return canAppendUlohaVzorak(value.parent) + return False +@register.simple_tag +def canAppendCast(value): + if isTemaVCisle(value.node) or isOrgText(value.node) or isReseni(value.node) or isUlohaZadani(value.node) or isUlohaVzorak(value.node): + return True + if isCast(value.node): + return canAppendCast(value.parent) + return False + +@register.simple_tag +def canAppendText(value): + if isTemaVCisle(value.node) or isOrgText(value.node) or isReseni(value.node) or isUlohaZadani(value.node) or isUlohaVzorak(value.node): + return True + if isCast(value.node): + return canAppendText(value.parent) + return False #@register.filter #def is(value): diff --git a/seminar/urls.py b/seminar/urls.py index 2b93f00b..b7633919 100644 --- a/seminar/urls.py +++ b/seminar/urls.py @@ -26,7 +26,7 @@ urlpatterns = [ path('cislo/./', views.CisloView.as_view(), name='seminar_cislo'), # odkomentované jenom kvůli testování archivu path('problem//', views.ProblemView.as_view(), name='seminar_problem'), path('treenode//', views.TreeNodeView.as_view(), name='seminar_treenode'), - path('treenode/editor/pridat///', views.TreeNodePridatView.as_view(), name='treenode_pridat'), + path('treenode/editor/pridat////', views.TreeNodePridatView.as_view(), name='treenode_pridat'), path('treenode/editor/smazat//', views.TreeNodeSmazatView.as_view(), name='treenode_smazat'), path('treenode/editor/odvesitpryc//', views.TreeNodeOdvesitPrycView.as_view(), name='treenode_odvesitpryc'), path('treenode/editor/podvesit///', views.TreeNodePodvesitView.as_view(), name='treenode_podvesit'), diff --git a/seminar/views/views_all.py b/seminar/views/views_all.py index 9089b63b..a4448d8a 100644 --- a/seminar/views/views_all.py +++ b/seminar/views/views_all.py @@ -159,14 +159,40 @@ class TreeNodePridatView(generic.View): } def post(self, request, *args, **kwargs): + ######## FIXME: ROZEPSANE, NEFUNGUJE, DOPSAT !!!!!! ########### node = s.TreeNode.objects.get(pk=self.kwargs['pk']) kam = self.kwargs['kam'] + co = self.kwargs['co'] + typ = self.type_from_str[co] + + raise NotImplementedError('Neni to dopsane, dopis to!') + + if kam not in ('pred','syn','za'): + raise ValidationError('Přidat lze pouze před nebo za node nebo jako syna') + + if co == m.TextNode: + new_obj = m.Text() + new_obj.save() + elif co == m.CastNode: + new_obj = m.CastNode() + new_obj.nadpis = request.POST.get('pridat-castNode-{}-{}'.format(node.id,kam)) + new_obj.save() + elif co == m.ReseniNode: + new_obj = m. + pass + elif co == m.UlohaZadaniNode: + pass + elif co == m.UlohaReseniNode: + pass + else: + new_obj = None + + + if kam == 'pred': + pass + - if kam not in ('syn','za'): - raise ValidationError('Přidat lze pouze před nebo za node') if kam == 'syn': - strtyp = request.POST.get('pridat-typ-{}-syn'.format(node.id)) - typ = self.type_from_str[strtyp] if typ == m.TextNode: text_obj = m.Text() text_obj.save() @@ -174,8 +200,6 @@ class TreeNodePridatView(generic.View): else: node = treelib.create_child(node,typ) if kam == 'za': - strtyp = request.POST.get('pridat-typ-{}-za'.format(node.id)) - typ = self.type_from_str[strtyp] if typ == m.TextNode: text_obj = m.Text() text_obj.save() @@ -226,7 +250,7 @@ class SirotcinecView(generic.ListView): template_name = 'seminar/orphanage.html' def get_queryset(self): - return s.TreeNode.objects.not_instance_of(s.RocnikNode).filter(root=None,succ=None,father_of_first=None) + return s.TreeNode.objects.not_instance_of(s.RocnikNode).filter(root=None,prev=None,succ=None,father_of_first=None) class ProblemView(generic.DetailView): model = s.Problem From c6b21a231e95f1d3db17f1dd03e94d59a086160c Mon Sep 17 00:00:00 2001 From: Pavel 'LEdoian' Turinsky Date: Thu, 11 Jun 2020 23:56:39 +0000 Subject: [PATCH 087/286] =?UTF-8?q?TreeLib:=20Smaz=C3=A1no=20podez=C5=99el?= =?UTF-8?q?=C3=A9=20p=C5=99i=C5=99azen=C3=AD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Skutečně to funguje, dá to do prev.succ None, ale nejsem si jistý, že to nemaže něco divného. --- seminar/treelib.py | 1 - 1 file changed, 1 deletion(-) diff --git a/seminar/treelib.py b/seminar/treelib.py index fe4ebce0..9482079a 100644 --- a/seminar/treelib.py +++ b/seminar/treelib.py @@ -443,7 +443,6 @@ def disconnect_node(node): # Jsme neprvním synem prev = node.prev prev.succ = node.succ - node.prev = None node.succ = None node.save() clear_root(node) From 9c015de24544de87e110b2fa3003c3f2f746bac7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kate=C5=99ina=20=C4=8C?= Date: Wed, 1 Jul 2020 19:42:34 +0200 Subject: [PATCH 088/286] =?UTF-8?q?pokusy=20o=20=C3=BApravu=20vzhledu=20ti?= =?UTF-8?q?tuln=C3=AD=20str=C3=A1nky?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- mamweb/static/css/mamweb.css | 24 ++++++++++--- seminar/templates/seminar/novinky.html | 3 +- .../soustredeni/seznam_soustredeni.html | 5 --- seminar/templates/seminar/titulnistrana.html | 34 ++++++++++++------- seminar/views/views_all.py | 2 +- 5 files changed, 43 insertions(+), 25 deletions(-) diff --git a/mamweb/static/css/mamweb.css b/mamweb/static/css/mamweb.css index 7dda151a..79272cea 100644 --- a/mamweb/static/css/mamweb.css +++ b/mamweb/static/css/mamweb.css @@ -958,9 +958,26 @@ div.cislo_odkazy ul { float: left; } -.novinky{ - float: right; - max-width: 42%; +div.pruh_titulni{ + width: 100%; + padding: 0%; + margin: 0%; + display: inline-block; +} + +div.titulnistrana_vitej{ + width: 33%; + display: table-cell; +} + +div.titulnistrana_novinky{ + width: 66%; + display: table-cell; +} + +div.titulnistrana_novinka{ + width: 45%; + display: inline-block; } .novinka_obrazek img { @@ -969,7 +986,6 @@ div.cislo_odkazy ul { div.novinka_obrazek { width: 100%; - max-width: 400px; /*FIXME*/ } div.org-text { diff --git a/seminar/templates/seminar/novinky.html b/seminar/templates/seminar/novinky.html index ccf40831..1ef4448a 100644 --- a/seminar/templates/seminar/novinky.html +++ b/seminar/templates/seminar/novinky.html @@ -1,6 +1,5 @@ {% for novinka in object_list %} -{# pripravene div-y na stylovani#} -
+
{% if not novinka.zverejneno and user.is_staff %}
    diff --git a/seminar/templates/seminar/soustredeni/seznam_soustredeni.html b/seminar/templates/seminar/soustredeni/seznam_soustredeni.html index a607e41e..bad911b1 100644 --- a/seminar/templates/seminar/soustredeni/seznam_soustredeni.html +++ b/seminar/templates/seminar/soustredeni/seznam_soustredeni.html @@ -1,11 +1,6 @@ {% extends "seminar/soustredeni/base.html" %} {% block menu_soustredeni %}selected{% endblock %} -{% block submenu %} - {% with "probehlo" as selected %} - {% include "seminar/soustredeni/submenu.html" %} - {% endwith %} -{% endblock submenu %} {# zmena fotky #}{% block header %}soustredeni{% endblock %} diff --git a/seminar/templates/seminar/titulnistrana.html b/seminar/templates/seminar/titulnistrana.html index bf9a884a..7da89bfa 100644 --- a/seminar/templates/seminar/titulnistrana.html +++ b/seminar/templates/seminar/titulnistrana.html @@ -5,19 +5,7 @@ {% block content %} - {# Uvitaci text #} -

    - {% block nadpis1a %}{% block nadpis1b %} - Vítej! - {% endblock %}{% endblock %} -

    -

    -M&M je korespondenční seminář. Několikrát do roka zdarma vydáváme časopis a v něm zajímavé podněty k přemýšlení. Ty na ně můžeš reagovat.
    - - M&M je taky soutěž. Můžeš vyhrát knížky, deskovky nebo dokonce dort. Můžeš se dostat na matfyz bez přijímaček. A především s námi můžeš jet na skvělé soustředění. -

    -
    {% if dead %}

    Do konce odeslání řešení {% if deadline_soustredeni %}(pro účast na soustředění) {% endif %}zbývá:
    @@ -25,12 +13,32 @@ M&M je korespondenční seminář. Několikrát do roka zdarma vydáváme č

    {% endif %} +
    +
    + +

    + {% block nadpis1a %} + Vítej! + {% endblock %} +

    + +

    + M&M je korespondenční seminář. Několikrát do roka zdarma vydáváme časopis a v něm zajímavé podněty k přemýšlení. Ty na ně můžeš reagovat.
    + M&M je taky soutěž. Můžeš vyhrát knížky, deskovky nebo dokonce dort. Můžeš se dostat na matfyz bez přijímaček. A především s námi můžeš jet na skvělé soustředění. +

    + +
    + +
    + {# Novinky #}

    Novinky

    {% include 'seminar/novinky.html' %} - Archiv novinek +
    +Archiv novinek +
    diff --git a/seminar/views/views_all.py b/seminar/views/views_all.py index 48d54c22..0510fe66 100644 --- a/seminar/views/views_all.py +++ b/seminar/views/views_all.py @@ -230,7 +230,7 @@ class AktualniZadaniView(TreeNodeView): class TitulniStranaView(generic.ListView): model = Novinky template_name='seminar/titulnistrana.html' - queryset = Novinky.objects.order_by('-datum')[:5] + queryset = Novinky.objects.order_by('-datum')[:2] def get_context_data(self, **kwargs): context = super(TitulniStranaView, self).get_context_data(**kwargs) From 04c4c77c485b85e6ccc2d40e110722fcff56d0ca Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kate=C5=99ina=20=C4=8C?= Date: Wed, 1 Jul 2020 19:55:03 +0200 Subject: [PATCH 089/286] =?UTF-8?q?minule=20jsem=20ty=20zm=C4=9Bny=20zapom?= =?UTF-8?q?n=C4=9Bla=20ulo=C5=BEit?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- seminar/views/views_all.py | 4 ---- 1 file changed, 4 deletions(-) diff --git a/seminar/views/views_all.py b/seminar/views/views_all.py index 44f25c3b..78172c74 100644 --- a/seminar/views/views_all.py +++ b/seminar/views/views_all.py @@ -245,13 +245,9 @@ def spravne_novinky(request): class TitulniStranaView(generic.ListView): template_name='seminar/titulnistrana.html' -<<<<<<< HEAD - queryset = Novinky.objects.order_by('-datum')[:2] -======= def get_queryset(self): return spravne_novinky(self.request)[:5] ->>>>>>> data_migrations def get_context_data(self, **kwargs): context = super(TitulniStranaView, self).get_context_data(**kwargs) From 9925ccf1b047b58e3e725d90f3339e7197c8debd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kate=C5=99ina=20=C4=8C?= Date: Wed, 1 Jul 2020 23:31:43 +0200 Subject: [PATCH 090/286] =?UTF-8?q?pr=C3=A1ce=20na=20tituln=C3=AD=20stran?= =?UTF-8?q?=C4=9B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- mamweb/static/css/mamweb.css | 29 +++++++-------- seminar/templates/seminar/novinky.html | 2 -- seminar/templates/seminar/titulnistrana.html | 37 ++++++++++++++------ seminar/views/views_all.py | 2 +- 4 files changed, 40 insertions(+), 30 deletions(-) diff --git a/mamweb/static/css/mamweb.css b/mamweb/static/css/mamweb.css index 79272cea..8a6cb752 100644 --- a/mamweb/static/css/mamweb.css +++ b/mamweb/static/css/mamweb.css @@ -958,33 +958,24 @@ div.cislo_odkazy ul { float: left; } -div.pruh_titulni{ - width: 100%; - padding: 0%; - margin: 0%; - display: inline-block; -} - -div.titulnistrana_vitej{ - width: 33%; - display: table-cell; +.titulnistrana_obsah { + width: 66%; } -div.titulnistrana_novinky{ - width: 66%; +.vitej, .jsitunovy{ + width: 49%; display: table-cell; } -div.titulnistrana_novinka{ - width: 45%; - display: inline-block; +.titulnistrana_novinky { + width: 33%; } .novinka_obrazek img { - margin-bottom: 15px; + padding: 10px; } -div.novinka_obrazek { +.novinka_obrazek { width: 100%; } @@ -992,6 +983,10 @@ div.org-text { font-style: italic; } +/**/ + +/**/ + div.nahledy_cisel { float: right; height: 297px; diff --git a/seminar/templates/seminar/novinky.html b/seminar/templates/seminar/novinky.html index 1ef4448a..9e2f4600 100644 --- a/seminar/templates/seminar/novinky.html +++ b/seminar/templates/seminar/novinky.html @@ -1,5 +1,4 @@ {% for novinka in object_list %} -
    {% if not novinka.zverejneno and user.is_staff %}
      @@ -35,6 +34,5 @@ {% if not novinka.zverejneno and user.is_staff %}
    {% endif %} -
    {% endfor%} diff --git a/seminar/templates/seminar/titulnistrana.html b/seminar/templates/seminar/titulnistrana.html index 7da89bfa..56ac6d8d 100644 --- a/seminar/templates/seminar/titulnistrana.html +++ b/seminar/templates/seminar/titulnistrana.html @@ -13,8 +13,9 @@
    {% endif %} -
    -
    +
    + +

    {% block nadpis1a %} @@ -22,22 +23,25 @@ {% endblock %}

    -

    - M&M je korespondenční seminář. Několikrát do roka zdarma vydáváme časopis a v něm zajímavé podněty k přemýšlení. Ty na ně můžeš reagovat.
    +

    + M&M je korespondenční seminář. Několikrát do roka zdarma vydáváme časopis a v něm zajímavé podněty k přemýšlení. Ty na ně můžeš reagovat.

    M&M je taky soutěž. Můžeš vyhrát knížky, deskovky nebo dokonce dort. Můžeš se dostat na matfyz bez přijímaček. A především s námi můžeš jet na skvělé soustředění. -

    +
    -
    +
    - {# Novinky #} -

    Novinky

    - {% include 'seminar/novinky.html' %} +

    + Jsi tu nový? +

    +
    + Přidej se k nám! Pusť se do řešení témát a pojeď na soustředění.
    +
    -Archiv novinek +
    @@ -50,4 +54,17 @@
    + +
    + +
    + + {# Novinky #} +

    Aktuality

    + {% include 'seminar/novinky.html' %} + + Archiv novinek + +
    + {% endblock %} diff --git a/seminar/views/views_all.py b/seminar/views/views_all.py index 78172c74..d85c5ebf 100644 --- a/seminar/views/views_all.py +++ b/seminar/views/views_all.py @@ -247,7 +247,7 @@ class TitulniStranaView(generic.ListView): template_name='seminar/titulnistrana.html' def get_queryset(self): - return spravne_novinky(self.request)[:5] + return spravne_novinky(self.request)[:2] def get_context_data(self, **kwargs): context = super(TitulniStranaView, self).get_context_data(**kwargs) From b81420e06bf77871f7ca40a018ad1a1188d2f88f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kate=C5=99ina=20=C4=8C?= Date: Tue, 14 Jul 2020 23:21:55 +0200 Subject: [PATCH 091/286] =?UTF-8?q?pr=C3=A1ce=20na=20titulce?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- mamweb/static/css/mamweb.css | 6 +++++- seminar/templates/seminar/titulnistrana.html | 11 +++++++---- seminar/views/views_all.py | 4 ++++ 3 files changed, 16 insertions(+), 5 deletions(-) diff --git a/mamweb/static/css/mamweb.css b/mamweb/static/css/mamweb.css index 8a6cb752..eacd9496 100644 --- a/mamweb/static/css/mamweb.css +++ b/mamweb/static/css/mamweb.css @@ -950,6 +950,10 @@ div.cislo_odkazy ul { /* titulni stranka */ +.titulnistrana { + display: flex; +} + .zjistit_vic{ text-align: center; } @@ -962,7 +966,7 @@ div.cislo_odkazy ul { width: 66%; } -.vitej, .jsitunovy{ +.vitej_titulka, .temata_titulka { width: 49%; display: table-cell; } diff --git a/seminar/templates/seminar/titulnistrana.html b/seminar/templates/seminar/titulnistrana.html index 56ac6d8d..6b5c2fd5 100644 --- a/seminar/templates/seminar/titulnistrana.html +++ b/seminar/templates/seminar/titulnistrana.html @@ -6,6 +6,8 @@ {% block content %} +
    + {% if dead %}

    Do konce odeslání řešení {% if deadline_soustredeni %}(pro účast na soustředění) {% endif %}zbývá:
    @@ -15,7 +17,7 @@

    -
    +

    {% block nadpis1a %} @@ -23,17 +25,17 @@ {% endblock %}

    -
    +
    M&M je korespondenční seminář. Několikrát do roka zdarma vydáváme časopis a v něm zajímavé podněty k přemýšlení. Ty na ně můžeš reagovat.

    M&M je taky soutěž. Můžeš vyhrát knížky, deskovky nebo dokonce dort. Můžeš se dostat na matfyz bez přijímaček. A především s námi můžeš jet na skvělé soustředění.
    -
    +

    - Jsi tu nový? + Řeš témata!

    @@ -67,4 +69,5 @@
    +
    {% endblock %} diff --git a/seminar/views/views_all.py b/seminar/views/views_all.py index d85c5ebf..775de011 100644 --- a/seminar/views/views_all.py +++ b/seminar/views/views_all.py @@ -281,6 +281,10 @@ class TitulniStranaView(generic.ListView): else: context['dead'] = None context['deadline_soustredeni'] = deadline_soustredeni + + # Aktuální témata + + return context class StareNovinkyView(generic.ListView): From 67c1e43dc1588fb3db4c1e68dd743895317421b0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kate=C5=99ina=20=C4=8C?= Date: Wed, 15 Jul 2020 11:21:16 +0200 Subject: [PATCH 092/286] =?UTF-8?q?p=C5=99id=C3=A1n=C3=AD=20odkaz=C5=AF=20?= =?UTF-8?q?na=20aktivn=C3=AD=20t=C3=A9mata=20na=20tituln=C3=AD=20str=C3=A1?= =?UTF-8?q?nku?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- seminar/models.py | 1 + seminar/templates/seminar/titulnistrana.html | 3 ++ seminar/views/views_all.py | 42 ++++++++++++++------ 3 files changed, 34 insertions(+), 12 deletions(-) diff --git a/seminar/models.py b/seminar/models.py index deb0c9b9..85188b1b 100644 --- a/seminar/models.py +++ b/seminar/models.py @@ -698,6 +698,7 @@ class Problem(SeminarModelBase,PolymorphicModel): (STAV_SMAZANY, 'Smazaný'), ] stav = models.CharField('stav problému', max_length=32, choices=STAV_CHOICES, blank=False, default=STAV_NAVRH) + # Téma je taky Problém, takže má stavy, "zadané" témátko je aktuálně otevřené a dá se k němu něco poslat (řešení nebo článek) zamereni = TaggableManager(verbose_name='zaměření', help_text='Zaměření M/F/I/O problému, příp. další tagy', blank=True) diff --git a/seminar/templates/seminar/titulnistrana.html b/seminar/templates/seminar/titulnistrana.html index 6b5c2fd5..c578c3d6 100644 --- a/seminar/templates/seminar/titulnistrana.html +++ b/seminar/templates/seminar/titulnistrana.html @@ -40,6 +40,9 @@
    Přidej se k nám! Pusť se do řešení témát a pojeď na soustředění. + {% for tema in aktualni_temata %} +
    {{ tema.nazev }}
    + {% endfor %}
    diff --git a/seminar/views/views_all.py b/seminar/views/views_all.py index 775de011..dd83ef83 100644 --- a/seminar/views/views_all.py +++ b/seminar/views/views_all.py @@ -43,14 +43,15 @@ import time from seminar.utils import aktivniResitele, resi_v_rocniku - -def verejna_temata(rocnik): - """Vrací queryset zveřejněných témat v daném ročníku. - """ - return Problem.objects.filter(typ=Problem.TYP_TEMA, cislo_zadani__rocnik=rocnik, cislo_zadani__verejne_db=True).order_by('kod') - -def temata_v_rocniku(rocnik): - return Problem.objects.filter(typ=Problem.TYP_TEMA, rocnik=rocnik) +# ze starého modelu +#def verejna_temata(rocnik): +# """ +# Vrací queryset zveřejněných témat v daném ročníku. +# """ +# return Problem.objects.filter(typ=Problem.TYP_TEMA, cislo_zadani__rocnik=rocnik, cislo_zadani__verejne_db=True).order_by('kod') +# +#def temata_v_rocniku(rocnik): +# return Problem.objects.filter(typ=Problem.TYP_TEMA, rocnik=rocnik) def get_problemy_k_tematu(tema): return Problem.objects.filter(nadproblem = tema) @@ -242,6 +243,12 @@ def spravne_novinky(request): qs = qs.filter(zverejneno=True) return qs.order_by('-datum') +def aktualni_temata(rocnik): + """ + Vrací PolymorphicQuerySet témat v daném ročníku, ke kterým se aktuálně dá něco odevzdat. + """ + return Tema.objects.filter(rocnik=rocnik, stav='zadany').order_by('kod') + class TitulniStranaView(generic.ListView): template_name='seminar/titulnistrana.html' @@ -283,7 +290,16 @@ class TitulniStranaView(generic.ListView): context['deadline_soustredeni'] = deadline_soustredeni # Aktuální témata - + nazvy_a_odkazy_na_aktualni_temata = [] + akt_temata = aktualni_temata(nastaveni.aktualni_rocnik) + + for tema in akt_temata: + # FIXME: netuším, jestli funguje tema.verejne_url(), nemáme testdata na témátka - je to asi url vzhledem k ročníku + nazvy_a_odkazy_na_aktualni_temata.append({'nazev':tema.nazev,'url':tema.verejne_url()}) + + context['aktualni_temata'] = nazvy_a_odkazy_na_aktualni_temata + + print(context) return context @@ -347,7 +363,8 @@ class ArchivView(generic.ListView): ### Výsledky def sloupec_s_poradim(setrizene_body): - """ Ze seznamu obsahujícího sestupně setřízené body řešitelů za daný ročník + """ + Ze seznamu obsahujícího sestupně setřízené body řešitelů za daný ročník vytvoří seznam s pořadími (včetně 3.-5. a pak 2 volná místa atp.), podle toho, jak jdou za sebou ve výsledkovce. Parametr: @@ -387,7 +404,8 @@ def sloupec_s_poradim(setrizene_body): return sloupec_s_poradim def cisla_rocniku(rocnik, jen_verejne=True): - """ Vrátí všechna čísla daného ročníku. + """ + Vrátí všechna čísla daného ročníku. Parametry: rocnik (Rocnik): ročník semináře jen_verejne (bool): zda se mají vrátit jen veřejná, nebo všechna čísla @@ -542,7 +560,7 @@ def vysledkovka_rocniku(rocnik, jen_verejne=True): # získáme body za ročník, seznam obsahuje dvojice (řešitel_id, body) setřízené sestupně resitel_rocnikbody_sezn = secti_body_za_rocnik(rocnik, aktivni_resitele) - + # setřídíme řešitele podle počtu bodů a získáme seznam s body od nejvyšších po nenižší setrizeni_resitele_id, setrizeni_resitele, setrizene_body = setrid_resitele_a_body(resitel_rocnikbody_sezn) poradi = sloupec_s_poradim(setrizene_body) From 262573a058200d604470b0157f1cd8128851568b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kate=C5=99ina=20=C4=8C?= Date: Wed, 15 Jul 2020 21:12:00 +0200 Subject: [PATCH 093/286] =?UTF-8?q?pr=C3=A1ce=20na=20tituln=C3=AD=20str?= =?UTF-8?q?=C3=A1nce=20-=20tla=C4=8D=C3=ADtka=20pro=20odkazy?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- mamweb/static/css/mamweb.css | 34 +++++++++++++++++--- seminar/templates/seminar/titulnistrana.html | 18 +++++++---- seminar/views/views_all.py | 2 +- 3 files changed, 41 insertions(+), 13 deletions(-) diff --git a/mamweb/static/css/mamweb.css b/mamweb/static/css/mamweb.css index eacd9496..a8b11542 100644 --- a/mamweb/static/css/mamweb.css +++ b/mamweb/static/css/mamweb.css @@ -101,6 +101,27 @@ h6 { color: black; } +.button { + height: 40px; + margin: 10px 0px 10px 0px; + padding: 4px 0; /*vertikální centování textu*/ + text-align: center; + background-color: #e84e10; + color: #fffbf6; + font-size: 150%; + font-weight: bold; + font-variant: small-caps; + filter: drop-shadow(0px 5px 5px rgba(0, 0, 0, 0.4)); +} + +.button:hover { + position: relative; + top: 2px; + left:2px; + background-color: #df490e; +; +} + .org-logged-in .mam-text-plugin { border: dashed 1px #6a0043; @@ -954,12 +975,16 @@ div.cislo_odkazy ul { display: flex; } +.titulnistrana h1 { + text-align: center; +} + .zjistit_vic{ text-align: center; } -.graf{ - float: left; +.graf { + padding-top: 40px; } .titulnistrana_obsah { @@ -968,18 +993,17 @@ div.cislo_odkazy ul { .vitej_titulka, .temata_titulka { width: 49%; + padding: 10px; display: table-cell; } .titulnistrana_novinky { width: 33%; -} - -.novinka_obrazek img { padding: 10px; } .novinka_obrazek { + margin: 10px 0px 10px 0px; width: 100%; } diff --git a/seminar/templates/seminar/titulnistrana.html b/seminar/templates/seminar/titulnistrana.html index c578c3d6..032841aa 100644 --- a/seminar/templates/seminar/titulnistrana.html +++ b/seminar/templates/seminar/titulnistrana.html @@ -21,13 +21,18 @@

    {% block nadpis1a %} - Vítej! + Vítej {% endblock %} + mezi námi

    - M&M je korespondenční seminář. Několikrát do roka zdarma vydáváme časopis a v něm zajímavé podněty k přemýšlení. Ty na ně můžeš reagovat.

    - M&M je taky soutěž. Můžeš vyhrát knížky, deskovky nebo dokonce dort. Můžeš se dostat na matfyz bez přijímaček. A především s námi můžeš jet na skvělé soustředění. + M&M je korespondenční seminář. Vydává- me časopis a v něm zajímavé podněty k přemýšlení. Ty na ně můžeš reagovat, + ex- perimentovat a objevovat s námi fascinu- jící zákoutí matiky, fyziky a informatiky. +
    Zaregistruj se!
    {# FIXME odkaz #} + M&M je taky soutěž. Za svá řešení dostaneš body a můžeš vyhrát zajímavé ceny, dostat se + na Matfyz bez přijímaček a především, můžeš s námi jet na skvělé soustředění. +
    Co můžeš vyhrát?
    {# FIXME odkaz #}
    @@ -38,8 +43,8 @@ Řeš témata! -
    - Přidej se k nám! Pusť se do řešení témát a pojeď na soustředění. +
    + Přidej se k nám! Pusť se do řešení témát. {% for tema in aktualni_temata %}
    {{ tema.nazev }}
    {% endfor %} @@ -47,7 +52,6 @@
    -
    @@ -65,7 +69,7 @@
    {# Novinky #} -

    Aktuality

    +

    Co je nového?

    {% include 'seminar/novinky.html' %} Archiv novinek diff --git a/seminar/views/views_all.py b/seminar/views/views_all.py index dd83ef83..2db28247 100644 --- a/seminar/views/views_all.py +++ b/seminar/views/views_all.py @@ -254,7 +254,7 @@ class TitulniStranaView(generic.ListView): template_name='seminar/titulnistrana.html' def get_queryset(self): - return spravne_novinky(self.request)[:2] + return spravne_novinky(self.request)[:3] def get_context_data(self, **kwargs): context = super(TitulniStranaView, self).get_context_data(**kwargs) From 26346e174dc951e0356adf909fe00ccaff494f0c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kate=C5=99ina=20=C4=8C?= Date: Thu, 16 Jul 2020 15:55:51 +0200 Subject: [PATCH 094/286] =?UTF-8?q?pr=C3=A1ce=20na=20titulce,=20hlavn?= =?UTF-8?q?=C4=9B=20novinky?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- mamweb/static/css/mamweb.css | 18 +++++++++++++++++- seminar/templates/seminar/novinky.html | 12 ++++++------ 2 files changed, 23 insertions(+), 7 deletions(-) diff --git a/mamweb/static/css/mamweb.css b/mamweb/static/css/mamweb.css index a8b11542..9c5d0d07 100644 --- a/mamweb/static/css/mamweb.css +++ b/mamweb/static/css/mamweb.css @@ -102,7 +102,6 @@ h6 { } .button { - height: 40px; margin: 10px 0px 10px 0px; padding: 4px 0; /*vertikální centování textu*/ text-align: center; @@ -973,12 +972,20 @@ div.cislo_odkazy ul { .titulnistrana { display: flex; + text-align: justify; } .titulnistrana h1 { text-align: center; } +/* +.temata_titulka .button { + color: #6f2509; + /*background-color: #fdedd5;* + background-color: #fffbf6; +}*/ + .zjistit_vic{ text-align: center; } @@ -1007,6 +1014,15 @@ div.cislo_odkazy ul { width: 100%; } +.novinka_datum { + font-weight: bold; +} + +.novinka_autor { + text-align: right; + font-style: italic; +} + div.org-text { font-style: italic; } diff --git a/seminar/templates/seminar/novinky.html b/seminar/templates/seminar/novinky.html index 9e2f4600..b8877575 100644 --- a/seminar/templates/seminar/novinky.html +++ b/seminar/templates/seminar/novinky.html @@ -7,7 +7,7 @@ {% endif %} {% if novinka.zverejneno or user.is_staff %} {# datum #} -
    {{novinka.datum}}
    +
    {{novinka.datum}}
    {# text #} {{ novinka.text | safe }} {# obrazek #} @@ -23,12 +23,12 @@
    {% endif %} {# autor #} -

    {{novinka.autor.first_name}} - {% if novinka.autor.organizator.prezdivka%} - „{{novinka.autor.organizator.prezdivka}}“ +

    + {{novinka.autor.osoba.jmeno}} + {% if novinka.autor.osoba.prezdivka%} + „{{novinka.autor.osoba.prezdivka}}“ {% endif %} - {{novinka.autor.last_name}} -

    + {{novinka.autor.osoba.prijmeni}}
    {% endif %} {% if not novinka.zverejneno and user.is_staff %} From 402c1d8595e8b0ffb4b97f56df8a7533493d10be Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kate=C5=99ina=20=C4=8C?= Date: Wed, 22 Jul 2020 11:46:25 +0200 Subject: [PATCH 095/286] =?UTF-8?q?flip-card=20v=20archivu=20b=C3=ADle?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- mamweb/static/css/mamweb.css | 23 ++++----------------- seminar/templates/seminar/archiv/cisla.html | 6 +----- 2 files changed, 5 insertions(+), 24 deletions(-) diff --git a/mamweb/static/css/mamweb.css b/mamweb/static/css/mamweb.css index 9c5d0d07..d1482367 100644 --- a/mamweb/static/css/mamweb.css +++ b/mamweb/static/css/mamweb.css @@ -752,11 +752,6 @@ div.org_email { backface-visibility: hidden; } -/* Style the front side (fallback if image is missing) */ -.flip-card-front { - background-color: #bbb; -} - div.flip-card-foto img { width: 100%; height: 100%; @@ -772,6 +767,10 @@ div.flip-card-foto img { padding-top: 20px; } +#archiv.flip-card-back { + background-color: white; +} + /* karty archiv */ div.popis_rocniku { @@ -1029,20 +1028,6 @@ div.org-text { /**/ -/**/ - -div.nahledy_cisel { - float: right; - height: 297px; - width: 420px; - position: relative; - margin-right: 10%; - margin-bottom: 50px; -} - -div.nahledy_cisel div, div.nahledy_cisel img { - position: absolute; -} ul.form { list-style-type: none; padding-left: 0px; diff --git a/seminar/templates/seminar/archiv/cisla.html b/seminar/templates/seminar/archiv/cisla.html index f931ee49..f40d3bd2 100644 --- a/seminar/templates/seminar/archiv/cisla.html +++ b/seminar/templates/seminar/archiv/cisla.html @@ -8,10 +8,6 @@ {% endblock %}{% endblock %} - - {% for rocnik, url_png in object_list.items %}
    @@ -33,7 +29,7 @@
    -
    +
    Jednotlivá čísla:
      From 729f110cd10a5e2a30f5ad06d8174a0df89a16fa Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kate=C5=99ina=20=C4=8C?= Date: Mon, 17 Aug 2020 12:01:37 +0200 Subject: [PATCH 096/286] =?UTF-8?q?titulka=20pro=20mobily=20(n=C4=9Bjak),?= =?UTF-8?q?=20vycentrov=C3=A1n=C3=AD=20grafu?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- mamweb/static/css/mamweb.css | 237 +++++++++++-------- seminar/templates/seminar/titulnistrana.html | 1 + 2 files changed, 139 insertions(+), 99 deletions(-) diff --git a/mamweb/static/css/mamweb.css b/mamweb/static/css/mamweb.css index d1482367..4f82f68f 100644 --- a/mamweb/static/css/mamweb.css +++ b/mamweb/static/css/mamweb.css @@ -422,6 +422,70 @@ input { margin: 5px; } + +/* titulni stranka */ + +.titulnistrana { + display: flex; + text-align: justify; +} + +.titulnistrana h1 { + text-align: center; +} + +.zjistit_vic{ + text-align: center; + margin-bottom: 30px; +} + +.zjistit_vic hr { + display: none; +} + +.graf-svg { + display: flex; +} + +#svg-graf { + width: 100%; + height: auto; + margin: 30px; +} + +.titulnistrana_obsah { + width: 66%; +} + +.vitej_titulka, .temata_titulka { + width: 49%; + padding: 10px; + display: table-cell; +} + +.titulnistrana_novinky { + width: 33%; + padding: 10px; +} + +.novinka_obrazek { + margin: 10px 0px 10px 0px; + width: 100%; +} + +.novinka_datum { + font-weight: bold; +} + +.novinka_autor { + text-align: right; + font-style: italic; +} + +div.org-text { + font-style: italic; +} + /********************** * Zmenšování displeje ***********************/ @@ -451,42 +515,22 @@ input { width: 100%; } - div.novinky{ - max-width: 100%; - margin-left: auto; - margin-right: auto; - float: none; - } - - div.graf{ - width: 70%; - float: none; - margin-left: auto; - margin-right: auto; - margin-top: 10px; - } - #svg-graf{ - width: 100%; - height: auto;; + ul.menu { + font-size: 90%; + margin-top: -7px; } -ul.menu { - font-size: 90%; - margin-top: -7px; -} - -ul.menu li { - margin-top: 10px; /* posunutí textu hlavního menu níže */ -} - -ul.submenu li { - margin-top: 0px; /* aby se spolu s textem hlavního menu neposunoval níže i text submenu */ -} + ul.menu li { + margin-top: 10px; /* posunutí textu hlavního menu níže */ + } -ul.submenu { - margin-top: 8px; /* mezera mezi hlavním menu a submenu */ -} + ul.submenu li { + margin-top: 0px; /* aby se spolu s textem hlavního menu neposunoval níže i text submenu */ + } + ul.submenu { + margin-top: 8px; /* mezera mezi hlavním menu a submenu */ + } } @@ -518,6 +562,44 @@ ul.submenu { display: inline-grid; max-width: 300px; } + + /* titulni stranka */ + + .titulnistrana { + display: block; + } + + .graf { + padding-top: 40px; + } + + .titulnistrana_obsah { + width: 100%; + } + + .vitej_titulka, .temata_titulka { + width: 49%; + padding: 10px; + display: table-cell; + } + + .titulnistrana_novinky { + width: 100%; + max-width: 500px; + padding: 10px; + margin: auto; + } + + #svg-graf { + width: 100%; + max-width: 500px; + padding: 10px; + margin: auto; + } + + .zjistit_vic hr { + display: flex; + } } /* malý tablet, mobil */ @@ -659,18 +741,34 @@ ul.submenu { text-align: justify; } - div.novinky { - max-width: 100%; - float: none; - } + table.form td, table.form tr { + display: inherit; + } + + /* titulni stranka */ + + .titulnistrana { + display: block; + } - div.graf { + .graf { + padding-top: 40px; + } + + .titulnistrana_obsah { width: 100%; } - table.form td, table.form tr { - display: inherit; - } + .vitej_titulka, .temata_titulka { + width: 100%; + padding: 10px; + display: block; + } + + .titulnistrana_novinky { + width: 100%; + padding: 10px; + } } @@ -967,65 +1065,6 @@ div.cislo_odkazy ul { } -/* titulni stranka */ - -.titulnistrana { - display: flex; - text-align: justify; -} - -.titulnistrana h1 { - text-align: center; -} - -/* -.temata_titulka .button { - color: #6f2509; - /*background-color: #fdedd5;* - background-color: #fffbf6; -}*/ - -.zjistit_vic{ - text-align: center; -} - -.graf { - padding-top: 40px; -} - -.titulnistrana_obsah { - width: 66%; -} - -.vitej_titulka, .temata_titulka { - width: 49%; - padding: 10px; - display: table-cell; -} - -.titulnistrana_novinky { - width: 33%; - padding: 10px; -} - -.novinka_obrazek { - margin: 10px 0px 10px 0px; - width: 100%; -} - -.novinka_datum { - font-weight: bold; -} - -.novinka_autor { - text-align: right; - font-style: italic; -} - -div.org-text { - font-style: italic; -} - /**/ ul.form { diff --git a/seminar/templates/seminar/titulnistrana.html b/seminar/templates/seminar/titulnistrana.html index 032841aa..2e4fa6a0 100644 --- a/seminar/templates/seminar/titulnistrana.html +++ b/seminar/templates/seminar/titulnistrana.html @@ -60,6 +60,7 @@

      Zjistit víc!

      +
    From 90c7b181c160b28231184ebba02746548d153594 Mon Sep 17 00:00:00 2001 From: Pavel 'LEdoian' Turinsky Date: Mon, 17 Aug 2020 20:07:49 +0200 Subject: [PATCH 097/286] =?UTF-8?q?WIP:=20Za=C4=8D=C3=A1tek=20k=C3=B3du=20?= =?UTF-8?q?odevzd=C3=A1v=C3=A1tka?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- seminar/views/odevzdavatko.py | 93 +++++++++++++++++++++++++++++++++++ 1 file changed, 93 insertions(+) create mode 100644 seminar/views/odevzdavatko.py diff --git a/seminar/views/odevzdavatko.py b/seminar/views/odevzdavatko.py new file mode 100644 index 00000000..bf4ab0fa --- /dev/null +++ b/seminar/views/odevzdavatko.py @@ -0,0 +1,93 @@ +from django.views.generic import ListView, DetailView +from django.views.generic.base import TemplateView + +from dataclasses import dataclass +import datetime + +import seminar.models as m +from seminar.utils import aktivniResitele, resi_v_rocniku + +# Co chceme? +# - "Tabulku" aktuální řešitelé x zveřejněné problémy, v buňkách počet řešení +# - TabulkaOdevzdanychReseniView +# - Detail konkrétního problému a řešitele -- přehled všech řešení odevzdaných k tomuto problému +# - ReseniProblemuView +# - Detail konkrétního řešení -- všechny soubory, datum, ... +# - DetailReseniView +# +# Taky se může hodit: +# - Tabulka všech řešitelů x všech problémů? + +@dataclass +class SouhrnReseni: + """Dataclass reprezentující data o odevzdaných řešeních pro zobrazení v tabulce.""" + pocet_reseni : int + posledni_odevzdani : datetime.datetime + body : float + + +class TabulkaOdevzdanychReseniView(TemplateView): + template_name = 'TODO' + + def get_context_data(self, *args, **kwargs): + akt_rocnik = m.Nastaveni.get_solo().aktualni_rocnik # .get_solo() vrátí tu jedinou instanci, asi... + resitele = resi_v_rocniku(akt_rocnik) + zadane_problemy = m.Problem.objects.filter(stav=m.Problem.STAV_ZADANY) + + ctx = dict() + ctx['problemy'] = zadane_problemy + ctx['resitele'] = resitele + + # Zkonstruujeme jednotlivé řádky + # Řádky budou indexované řešiteli a budou obsahovat SouhrnyReseni + # TODO: Tohle se asi nějak dá urychlit / zpřehlednit... + ctx['radky'] = dict() + for resitel in resitele: + ctx['radky'][resitel] = [] + for problem in zadane_problemy: + reseni_k_tomuto_problemu = m.Reseni.objects.filter( + resitele__in=[resitel], # Snad funguje i takhle + hodnoceni__problem__in=[problem], # ditto + ) + .order_by('-cas_doruceni') + pocet_reseni = reseni_k_tomuto_problemu.count() + nejnovejsi = reseni_k_tomuto_problemu.first().cas_doruceni + pocet_bodu = max( + [h.body for h in m.Hodnoceni.objects.filter( + reseni__in=reseni_k_tomuto_problemu, + problem=problem, + ) + ] + ) + ctx['radky'][resitel].append( + SouhrnReseni( + pocet_reseni=pocet_reseni, + posledni_odevzdani=nejnovejsi, + body=pocet_bodu, + ) + return ctx + +class ReseniProblemuView(ListView): + model = m.Reseni + template_name = 'TODO' + + def get_queryset(self): + qs = super().get_queryset() + + + + + +# Přehled všech řešení kvůli debugování + +class SeznamReseniView(ListView): + model = m.Reseni + template_name = 'TODO' + +class SeznamAktualnichReseniView(SeznamReseniView): + def get_queryset(self): + qs = super().get_queryset() + akt_rocnik = m.Nastaveni.get_solo().aktualni_rocnik # .get_solo() vrátí tu jedinou instanci, asi... + resitele = resi_v_rocniku(akt_rocnik) + qs = qs.filter(resitele__in=resitele) # Doufám, že tohle najde řešení, která maji alespoň jednoho řešitele řešícího v aktuálním ročníku + return qs From ab3ce769cd44f7a752ed31aed1fd06e4fe5c9682 Mon Sep 17 00:00:00 2001 From: "Pavel \"LEdoian\" Turinsky" Date: Tue, 18 Aug 2020 05:03:33 +0200 Subject: [PATCH 098/286] Requirements: hack old python --- requirements.txt | 2 ++ 1 file changed, 2 insertions(+) diff --git a/requirements.txt b/requirements.txt index 989f8380..8f7c152d 100644 --- a/requirements.txt +++ b/requirements.txt @@ -24,6 +24,8 @@ django-taggit==0.23.0 django-autocomplete-light==2.3.6 django-crispy-forms==1.7.2 django-imagekit==4.0.2 +# HACK: django-appconf je závislost django-imagekitu, ale verze 1.0.4 už nepodporuje Py2, takže si explicitně řekneme o 1.0.3. +django-appconf==1.0.3 # Comments akismet==1.0.1 From c6bd98dae5b42cd01ea38a30cf9f6db58f402171 Mon Sep 17 00:00:00 2001 From: Jonas Havelka Date: Tue, 18 Aug 2020 16:42:10 +0200 Subject: [PATCH 099/286] =?UTF-8?q?Vr=C3=A1cen=C3=AD=20reversion=20kv?= =?UTF-8?q?=C5=AFli=20nahr=C3=A1v=C3=A1n=C3=AD=20pdf=20a=20p=C5=99edn?= =?UTF-8?q?=C3=A1=C5=A1k=C3=A1m?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- mamweb/settings_common.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mamweb/settings_common.py b/mamweb/settings_common.py index 62cd7fe7..f4acf02b 100644 --- a/mamweb/settings_common.py +++ b/mamweb/settings_common.py @@ -98,7 +98,7 @@ INSTALLED_APPS = ( # Utilities 'sekizai', -# 'reversion', + 'reversion', 'django_countries', 'solo', 'ckeditor', From 4dba5919dedda214300b94d68975717f2c411d94 Mon Sep 17 00:00:00 2001 From: "Pavel Turinsky (VM)" Date: Wed, 19 Aug 2020 07:05:56 +0200 Subject: [PATCH 100/286] SMAZAT: Upravy pro upgrade --- Makefile | 7 ------- mamweb/settings_prod.py | 9 +++++---- 2 files changed, 5 insertions(+), 11 deletions(-) diff --git a/Makefile b/Makefile index 33e1f229..6ad72f63 100644 --- a/Makefile +++ b/Makefile @@ -63,8 +63,6 @@ schema_all.pdf: # Deploy to current *mamweb-test* directory deploy_test: - @if [ ${USER} != "mam-web" ]; then echo "Only possible by user mam-web"; exit 1; fi - @if [ `readlink -f .` != "/aux/akce/mam/www/mamweb-test" ]; then echo "Only possible in directory mamweb-test"; exit 1; fi @echo "Installing version from origin/test ..." git pull origin test git clean -f @@ -79,8 +77,6 @@ deploy_test: # Deploy to current *mamweb-prod* directory deploy_prod: - @if [ ${USER} != "mam-web" ]; then echo "Only possible by user mam-web"; exit 1; fi - @if [ `readlink -f .` != "/aux/akce/mam/www/mamweb-prod" ]; then echo "Only possible in directory mamweb-prod"; exit 1; fi @echo "Backing up production DB ..." ( cd -P .. && ./backup_prod_db.sh ) @echo "Installing version from origin/master ..." @@ -98,13 +94,10 @@ deploy_prod: # Sync test media directory with production sync_test_media: - @if [ ${USER} != "mam-web" ]; then echo "Only possible by user mam-web"; exit 1; fi - @if [ `readlink -f .` != "/aux/akce/mam/www/mamweb-test" ]; then echo "Only possible in /akce/mam/www/mamweb-test"; exit 1; fi rsync -av --delete /akce/mam/www/mamweb-prod/media/ ./media # Sync test database with production database sync_test_db: - @if [ ${USER} != "mam-web" ]; then echo "Only possible by user mam-web"; exit 1; fi pg_dump mam_test > dump-test-`date +"%Y%m%d_%H%M"`.sql pg_dump -Fc mam_prod > dump-prod.sql pg_restore -c -d mam_test dump-prod.sql diff --git a/mamweb/settings_prod.py b/mamweb/settings_prod.py index 918fd4b2..e883b5f2 100644 --- a/mamweb/settings_prod.py +++ b/mamweb/settings_prod.py @@ -28,7 +28,8 @@ DEBUG = False TEMPLATE_DEBUG = False ALLOWED_HOSTS = ['mam.mff.cuni.cz', 'www.mam.mff.cuni.cz', 'atrey.karlin.mff.cuni.cz', - 'mamweb.bezva.org','gimli.ms.mff.cuni.cz'] + 'mamweb.bezva.org','gimli.ms.mff.cuni.cz', + 'localhost'] # Database # https://docs.djangoproject.com/en/1.7/ref/settings/#databases @@ -37,7 +38,7 @@ DATABASES = { 'default': { 'ENGINE': 'django.db.backends.postgresql_psycopg2', 'NAME': 'mam_prod', - 'USER': 'mam-web', + 'USER': 'user', 'TEST': { 'NAME': 'mam-prod-testdb', }, @@ -46,8 +47,8 @@ DATABASES = { import os -SERVER_EMAIL = 'mamweb-prod-errors@mam.mff.cuni.cz' -ADMINS = [('M&M ERRORs', 'mam-errors@mam.mff.cuni.cz')] +SERVER_EMAIL = 'mamweb-prod-errors@pokemon.ledoian.cz' +ADMINS = [('M&M ERRORs', 'mam-errors@pokemon.ledoian.cz')] # SECURITY: only send sensitive cookies via HTTPS From b7232d9010c66dacc56b27989e54cb58c11d3916 Mon Sep 17 00:00:00 2001 From: "Pavel Turinsky (VM)" Date: Wed, 19 Aug 2020 07:09:01 +0200 Subject: [PATCH 101/286] Also: Makefile --- Makefile | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/Makefile b/Makefile index 6ad72f63..87384135 100644 --- a/Makefile +++ b/Makefile @@ -63,8 +63,8 @@ schema_all.pdf: # Deploy to current *mamweb-test* directory deploy_test: - @echo "Installing version from origin/test ..." - git pull origin test + @echo "Installing version from origin/pseudo_test ..." + git pull origin pseudo_test git clean -f make install ./manage.py migrate @@ -79,8 +79,8 @@ deploy_test: deploy_prod: @echo "Backing up production DB ..." ( cd -P .. && ./backup_prod_db.sh ) - @echo "Installing version from origin/master ..." - git pull origin master + @echo "Installing version from origin/pseudo_master ..." + git pull origin pseudo_master git clean -f make install ./manage.py migrate From e6149fcc56985011d0fddfebfd79b42e9cb53460 Mon Sep 17 00:00:00 2001 From: "Pavel Turinsky (VM)" Date: Wed, 19 Aug 2020 07:24:32 +0200 Subject: [PATCH 102/286] Tyhlety zalohy vsechny jen obtezuji --- Makefile | 2 -- 1 file changed, 2 deletions(-) diff --git a/Makefile b/Makefile index 87384135..4dbd39d3 100644 --- a/Makefile +++ b/Makefile @@ -77,8 +77,6 @@ deploy_test: # Deploy to current *mamweb-prod* directory deploy_prod: - @echo "Backing up production DB ..." - ( cd -P .. && ./backup_prod_db.sh ) @echo "Installing version from origin/pseudo_master ..." git pull origin pseudo_master git clean -f From cda25efcd60dea16a8d625fca8d8ce24aa90acfa Mon Sep 17 00:00:00 2001 From: "Pavel Turinsky (VM)" Date: Wed, 19 Aug 2020 09:17:42 +0200 Subject: [PATCH 103/286] Oprava uwsgi configu pro Python 3 --- mamweb_prod.ini | 2 +- mamweb_test.ini | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/mamweb_prod.ini b/mamweb_prod.ini index 218593e6..8816064f 100644 --- a/mamweb_prod.ini +++ b/mamweb_prod.ini @@ -5,7 +5,7 @@ chdir = /akce/mam/www/mamweb-prod/ home = /akce/mam/www/mamweb-prod/ module = mamweb.wsgi -plugin = python +plugin = python3 virtualenv = env master = True vacuum = True diff --git a/mamweb_test.ini b/mamweb_test.ini index a27f71f9..ddd6e55c 100644 --- a/mamweb_test.ini +++ b/mamweb_test.ini @@ -5,7 +5,7 @@ chdir = /akce/mam/www/mamweb-test/ home = /akce/mam/www/mamweb-test/ module = mamweb.wsgi -plugin = python +plugin = python3 virtualenv = env master = True vacuum = True From 3f5c5ee217382d13830da878ed4999e4717b9bdf Mon Sep 17 00:00:00 2001 From: "Pavel Turinsky (VM)" Date: Wed, 19 Aug 2020 09:26:47 +0200 Subject: [PATCH 104/286] Fix typo --- mamweb/settings_common.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mamweb/settings_common.py b/mamweb/settings_common.py index beffa593..430fbe16 100644 --- a/mamweb/settings_common.py +++ b/mamweb/settings_common.py @@ -248,7 +248,7 @@ LOGGING = { 'class': 'django.utils.log.AdminEmailHandler', 'formatter': 'verbose', }, - 'mail_registraion': { + 'mail_registration': { 'level': 'WARN', 'class': 'django.utils.log.AdminEmailHandler', 'formatter': 'verbose', From e44b3296cf71fbbecc0ee7c753059c5e3d3240e6 Mon Sep 17 00:00:00 2001 From: "Pavel Turinsky (VM)" Date: Wed, 19 Aug 2020 09:28:15 +0200 Subject: [PATCH 105/286] Smazana zapomenuta konfliktova znacka --- seminar/admin.py | 1 - 1 file changed, 1 deletion(-) diff --git a/seminar/admin.py b/seminar/admin.py index 70f06966..edfbb595 100644 --- a/seminar/admin.py +++ b/seminar/admin.py @@ -162,4 +162,3 @@ class TextNodeAdmin(PolymorphicChildModelAdmin): admin.site.register(m.Nastaveni) admin.site.register(m.Novinky) ->>>>>>> origin/data_migrations From a82c218b71ed866d38c12117f23a2191c503d783 Mon Sep 17 00:00:00 2001 From: Pavel 'LEdoian' Turinsky Date: Wed, 19 Aug 2020 10:00:04 +0200 Subject: [PATCH 106/286] =?UTF-8?q?Dal=C5=A1=C3=AD=20opravy=20skoro-povede?= =?UTF-8?q?n=C3=A9ho=20merge?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...209_2326.py => 0010_auto_20200819_0947.py} | 8 +++---- prednasky/views.py | 21 +++++++++---------- seminar/migrations/0086_auto_20200819_0959.py | 17 +++++++++++++++ seminar/models.py | 2 +- 4 files changed, 31 insertions(+), 17 deletions(-) rename galerie/migrations/{0008_auto_20191209_2326.py => 0010_auto_20200819_0947.py} (59%) create mode 100644 seminar/migrations/0086_auto_20200819_0959.py diff --git a/galerie/migrations/0008_auto_20191209_2326.py b/galerie/migrations/0010_auto_20200819_0947.py similarity index 59% rename from galerie/migrations/0008_auto_20191209_2326.py rename to galerie/migrations/0010_auto_20200819_0947.py index 12e605f4..b7678ac1 100644 --- a/galerie/migrations/0008_auto_20191209_2326.py +++ b/galerie/migrations/0010_auto_20200819_0947.py @@ -1,6 +1,4 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.11.26 on 2019-12-09 22:26 -from __future__ import unicode_literals +# Generated by Django 2.2.15 on 2020-08-19 07:47 from django.db import migrations, models @@ -8,13 +6,13 @@ from django.db import migrations, models class Migration(migrations.Migration): dependencies = [ - ('galerie', '0007_obrazek_odstranen_datum'), + ('galerie', '0009_auto_20190610_2358'), ] operations = [ migrations.AlterField( model_name='galerie', name='poradi', - field=models.IntegerField(blank=True, default=0, verbose_name=b'Po\xc5\x99ad\xc3\xad'), + field=models.IntegerField(blank=True, default=0, verbose_name='Pořadí'), ), ] diff --git a/prednasky/views.py b/prednasky/views.py index c4800c30..93cccf1b 100644 --- a/prednasky/views.py +++ b/prednasky/views.py @@ -60,20 +60,19 @@ class SeznamListView(generic.ListView): ) return prednasky - # FIXME nahradit anotaci s filtrem po prechodu na Django 2.2 - def get_context_data(self,**kwargs): - context = super(SeznamListView, self).get_context_data(**kwargs) + # FIXME nahradit anotaci s filtrem po prechodu na Django 2.2 + def get_context_data(self,**kwargs): + context = super(SeznamListView, self).get_context_data(**kwargs) - # hlasovani se vztahuje k nejnovejsimu soustredeni - sous = Soustredeni.objects.first() - seznam = Seznam.objects.filter(soustredeni = sous, stav = STAV_NAVRH).first() + # hlasovani se vztahuje k nejnovejsimu soustredeni + sous = Soustredeni.objects.first() + seznam = Seznam.objects.filter(soustredeni = sous, stav = STAV_NAVRH).first() - for obj in self.object_list: - hlasovani_set = obj.hlasovani_set.filter(seznam=seznam).only('body') - obj.body = sum(map(lambda x: x.body,hlasovani_set)) + for obj in self.object_list: + hlasovani_set = obj.hlasovani_set.filter(seznam=seznam).only('body') + obj.body = sum(map(lambda x: x.body,hlasovani_set)) - return context - + return context def SeznamExportView(request, seznam): diff --git a/seminar/migrations/0086_auto_20200819_0959.py b/seminar/migrations/0086_auto_20200819_0959.py new file mode 100644 index 00000000..a5847e71 --- /dev/null +++ b/seminar/migrations/0086_auto_20200819_0959.py @@ -0,0 +1,17 @@ +# Generated by Django 2.2.15 on 2020-08-19 07:59 + +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('seminar', '0085_nepovinna_prezdivka'), + ] + + operations = [ + migrations.AlterModelOptions( + name='organizator', + options={'ordering': ['-organizuje_do', 'osoba__jmeno', 'osoba__prijmeni'], 'verbose_name': 'Organizátor', 'verbose_name_plural': 'Organizátoři'}, + ), + ] diff --git a/seminar/models.py b/seminar/models.py index 2e361377..4070e1d0 100644 --- a/seminar/models.py +++ b/seminar/models.py @@ -601,7 +601,7 @@ class Organizator(SeminarModelBase): # TODO: Chtěl bych spíš mít nejstarší orgy dole. # TODO: Zohledňovat přezdívky? # TODO: Sjednotit s tím, jak se řadí organizátoři v seznau orgů na webu - ordering = ['-organizuje_do', 'user__osoba__jmeno', 'user__osoba__prijmeni'] + ordering = ['-organizuje_do', 'osoba__jmeno', 'osoba__prijmeni'] @reversion.register(ignore_duplicates=True) class Soustredeni(SeminarModelBase): From f67aed8a5a9e2ad4dd50be91e1efcccf3035ef65 Mon Sep 17 00:00:00 2001 From: "Pavel \"LEdoian\" Turinsky" Date: Wed, 19 Aug 2020 17:49:07 +0200 Subject: [PATCH 107/286] =?UTF-8?q?Za=C4=8D=C3=A1tek=20seznamu=20toho,=20c?= =?UTF-8?q?o=20je=20pot=C5=99eba=20opravit=20v=20produk=C4=8Dn=C3=AD=20dat?= =?UTF-8?q?ab=C3=A1zi,=20aby=20pro=C5=A1ly=20migrace.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- MIGRATIONS | 8 ++++++++ 1 file changed, 8 insertions(+) create mode 100644 MIGRATIONS diff --git a/MIGRATIONS b/MIGRATIONS new file mode 100644 index 00000000..d2f07be8 --- /dev/null +++ b/MIGRATIONS @@ -0,0 +1,8 @@ +Jak zvládnout migrace na nový model: + +- Mail Toma Sourady (User vs Resitel) + +- Články s nekompatibilním zadáním a řešením: + - 2130: Definice čísel (23.6 vs 23.7) + - 2143: Gravitace ve Flatlandu (23.4 vs 23.6) + - 1954: Chceme vodu (nepublikováno) (21.3 vs 21.6) From 3330fd5a9ffc2a0f64d3d36d5687fb9e497f5df5 Mon Sep 17 00:00:00 2001 From: "Pavel \"LEdoian\" Turinsky" Date: Wed, 19 Aug 2020 20:28:51 +0200 Subject: [PATCH 108/286] =?UTF-8?q?Migrace=200084=20nem=C3=A1=20padat,=20a?= =?UTF-8?q?le=20logovat.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- MIGRATIONS | 2 ++ seminar/migrations/0084_clanek_cislo.py | 8 +++++++- 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/MIGRATIONS b/MIGRATIONS index d2f07be8..2c2ef671 100644 --- a/MIGRATIONS +++ b/MIGRATIONS @@ -6,3 +6,5 @@ Jak zvládnout migrace na nový model: - 2130: Definice čísel (23.6 vs 23.7) - 2143: Gravitace ve Flatlandu (23.4 vs 23.6) - 1954: Chceme vodu (nepublikováno) (21.3 vs 21.6) + +- V mojí verzi databáze mají úlohy-Problémy typ "b'uloha'" diff --git a/seminar/migrations/0084_clanek_cislo.py b/seminar/migrations/0084_clanek_cislo.py index 5de1fefa..7a211fa6 100644 --- a/seminar/migrations/0084_clanek_cislo.py +++ b/seminar/migrations/0084_clanek_cislo.py @@ -4,6 +4,9 @@ from django.db import migrations, models import django.db.models.deletion from seminar.treelib import get_parent +import logging +logger = logging.getLogger(__name__) + def najdi_cislo(apps, schema_editor): Clanek = apps.get_model('seminar', 'Clanek') Hodnoceni = apps.get_model('seminar', 'Hodnoceni') @@ -15,7 +18,10 @@ def najdi_cislo(apps, schema_editor): for c in Clanek.objects.all(): reseni = c.reseni_set if (reseni.count() != 1): # Pozor, reseni_set je Manager, takže se na něj musí trošku jinak - raise ValueError("Článek k sobě má nejedno řešení!") + logger.warn(f"Více než jedno řešení pro článek {c}") + c.cislo = None + c.save() + continue r = reseni.first() aktualniNode = r.text_cely # Hlavní ReseniNode pro řešení while aktualniNode is not None: From ea41f8259599b95898d1e11498d0af3254fbf7ce Mon Sep 17 00:00:00 2001 From: "Pavel \"LEdoian\" Turinsky" Date: Wed, 19 Aug 2020 20:59:16 +0200 Subject: [PATCH 109/286] Revert "SMAZAT: Upravy pro upgrade" This reverts commit 4dba5919dedda214300b94d68975717f2c411d94. Conflicts: Makefile --- Makefile | 17 +++++++++++++---- mamweb/settings_prod.py | 9 ++++----- 2 files changed, 17 insertions(+), 9 deletions(-) diff --git a/Makefile b/Makefile index e17e073f..a9d2e082 100644 --- a/Makefile +++ b/Makefile @@ -64,8 +64,10 @@ schema_all.pdf: venv_check # Deploy to current *mamweb-test* directory deploy_test: venv_check - @echo "Installing version from origin/pseudo_test ..." - git pull origin pseudo_test + @if [ ${USER} != "mam-web" ]; then echo "Only possible by user mam-web"; exit 1; fi + @if [ `readlink -f .` != "/aux/akce/mam/www/mamweb-test" ]; then echo "Only possible in directory mamweb-test"; exit 1; fi + @echo "Installing version from origin/test ..." + git pull origin test git clean -f make install ./manage.py migrate @@ -78,8 +80,12 @@ deploy_test: venv_check # Deploy to current *mamweb-prod* directory deploy_prod: venv_check - @echo "Installing version from origin/pseudo_master ..." - git pull origin pseudo_master + @if [ ${USER} != "mam-web" ]; then echo "Only possible by user mam-web"; exit 1; fi + @if [ `readlink -f .` != "/aux/akce/mam/www/mamweb-prod" ]; then echo "Only possible in directory mamweb-prod"; exit 1; fi + @echo "Backing up production DB ..." + ( cd -P .. && ./backup_prod_db.sh ) + @echo "Installing version from origin/master ..." + git pull origin master git clean -f make install ./manage.py migrate @@ -102,10 +108,13 @@ sync_prod_flatpages: venv_check # Sync test media directory with production sync_test_media: + @if [ ${USER} != "mam-web" ]; then echo "Only possible by user mam-web"; exit 1; fi + @if [ `readlink -f .` != "/aux/akce/mam/www/mamweb-test" ]; then echo "Only possible in /akce/mam/www/mamweb-test"; exit 1; fi rsync -av --delete /akce/mam/www/mamweb-prod/media/ ./media # Sync test database with production database sync_test_db: + @if [ ${USER} != "mam-web" ]; then echo "Only possible by user mam-web"; exit 1; fi pg_dump mam_test > dump-test-`date +"%Y%m%d_%H%M"`.sql pg_dump -Fc mam_prod > dump-prod.sql pg_restore -c -d mam_test dump-prod.sql diff --git a/mamweb/settings_prod.py b/mamweb/settings_prod.py index 234e2949..1c223842 100644 --- a/mamweb/settings_prod.py +++ b/mamweb/settings_prod.py @@ -28,8 +28,7 @@ DEBUG = False TEMPLATE_DEBUG = False ALLOWED_HOSTS = ['mam.mff.cuni.cz', 'www.mam.mff.cuni.cz', 'atrey.karlin.mff.cuni.cz', - 'mamweb.bezva.org','gimli.ms.mff.cuni.cz', - 'localhost'] + 'mamweb.bezva.org','gimli.ms.mff.cuni.cz'] # Database # https://docs.djangoproject.com/en/1.7/ref/settings/#databases @@ -38,7 +37,7 @@ DATABASES = { 'default': { 'ENGINE': 'django.db.backends.postgresql_psycopg2', 'NAME': 'mam_prod', - 'USER': 'user', + 'USER': 'mam-web', 'TEST': { 'NAME': 'mam-prod-testdb', }, @@ -47,8 +46,8 @@ DATABASES = { import os -SERVER_EMAIL = 'mamweb-prod-errors@pokemon.ledoian.cz' -ADMINS = [('M&M ERRORs', 'mam-errors@pokemon.ledoian.cz')] +SERVER_EMAIL = 'mamweb-prod-errors@mam.mff.cuni.cz' +ADMINS = [('M&M ERRORs', 'mam-errors@mam.mff.cuni.cz')] # SECURITY: only send sensitive cookies via HTTPS From 2df9f1d8bced18bb0c0b238d1b78854f21f7d53f Mon Sep 17 00:00:00 2001 From: "Pavel \"LEdoian\" Turinsky" Date: Wed, 19 Aug 2020 22:25:26 +0200 Subject: [PATCH 110/286] =?UTF-8?q?P=C3=A1r=20vy=C5=99e=C5=A1en=C3=BDch=20?= =?UTF-8?q?probl=C3=A9m=C5=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- MIGRATIONS | 7 ------- 1 file changed, 7 deletions(-) diff --git a/MIGRATIONS b/MIGRATIONS index 2c2ef671..2bfd0dca 100644 --- a/MIGRATIONS +++ b/MIGRATIONS @@ -1,10 +1,3 @@ Jak zvládnout migrace na nový model: -- Mail Toma Sourady (User vs Resitel) - -- Články s nekompatibilním zadáním a řešením: - - 2130: Definice čísel (23.6 vs 23.7) - - 2143: Gravitace ve Flatlandu (23.4 vs 23.6) - - 1954: Chceme vodu (nepublikováno) (21.3 vs 21.6) - - V mojí verzi databáze mají úlohy-Problémy typ "b'uloha'" From 3de0b5ca1dadef139e8049b7e15c772a041e096f Mon Sep 17 00:00:00 2001 From: "Pavel \"LEdoian\" Turinsky" Date: Wed, 19 Aug 2020 22:43:31 +0200 Subject: [PATCH 111/286] =?UTF-8?q?Nov=C3=A9=20django:=20zm=C4=9Bna=20jm?= =?UTF-8?q?=C3=A9na=20konfigura=C4=8Dn=C3=AD=20prom=C4=9Bnn=C3=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- mamweb/settings_test.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mamweb/settings_test.py b/mamweb/settings_test.py index 8ad2c76f..e8af9a88 100644 --- a/mamweb/settings_test.py +++ b/mamweb/settings_test.py @@ -12,7 +12,7 @@ import os.path # Import common settings from .settings_common import * # zatim nutne, casem snad vyresime # noqa -MIDDLEWARE_CLASSES += ( +MIDDLEWARE += ( 'debug_toolbar.middleware.DebugToolbarMiddleware', ) From 614d795b6aa9b6e89f12aa4c3a328c7795811fdf Mon Sep 17 00:00:00 2001 From: "Pavel \"LEdoian\" Turinsky" Date: Wed, 19 Aug 2020 23:45:22 +0200 Subject: [PATCH 112/286] =?UTF-8?q?Zlobiv=C3=A1=200058=20m=C3=A1=20taky=20?= =?UTF-8?q?logovat,=20aspo=C5=88=20do=C4=8Dasn=C4=9B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- seminar/migrations/0058_problem_to_uloha_tema_clanek.py | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/seminar/migrations/0058_problem_to_uloha_tema_clanek.py b/seminar/migrations/0058_problem_to_uloha_tema_clanek.py index 333f5453..1b170eb8 100644 --- a/seminar/migrations/0058_problem_to_uloha_tema_clanek.py +++ b/seminar/migrations/0058_problem_to_uloha_tema_clanek.py @@ -6,6 +6,9 @@ from django.db import migrations from django.db.models import Q +import logging +logger = logging.getLogger(__name__) + def poskladej_strom(apps, rodic, *texty): Text = apps.get_model('seminar', 'Text') TextNode = apps.get_model('seminar', 'TextNode') @@ -42,6 +45,7 @@ def uloha_to_Uloha(apps,schema_editor): ulohy = Problem.objects.filter(typ = 'uloha') for uold in ulohy: + logger.debug('u') unew = Uloha.objects.create( problem_ptr = uold, # Zakomentované fieldy by se už měly nacházet v příslušném problému @@ -83,6 +87,7 @@ def clanek_to_Clanek(apps,schema_editor): clanky = Problem.objects.filter(Q(typ='org-clanek') | Q(typ='res-clanek')) for cl in clanky: + logger.debug('c') # Vybereme vhodné číslo pro článek z čísla zadání a čísla řešení: if cl.cislo_zadani_old is None: cislo = cl.cislo_reseni_old @@ -121,6 +126,7 @@ def tema_to_Tema(apps, schema_editor): temata = Problem.objects.filter(Q(typ = 'tema') | Q(typ='serial')) for t in temata: + logger.debug('t') # Vymyslíme správně ročník: if t.cislo_zadani_old is None and t.cislo_reseni_old is None: rocnik = None From 325cb73cd49d6a14854ee75595540ca06e49ce19 Mon Sep 17 00:00:00 2001 From: "Pavel \"LEdoian\" Turinsky" Date: Wed, 19 Aug 2020 23:59:28 +0200 Subject: [PATCH 113/286] Loglevel --- seminar/migrations/0058_problem_to_uloha_tema_clanek.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/seminar/migrations/0058_problem_to_uloha_tema_clanek.py b/seminar/migrations/0058_problem_to_uloha_tema_clanek.py index 1b170eb8..2f86b89f 100644 --- a/seminar/migrations/0058_problem_to_uloha_tema_clanek.py +++ b/seminar/migrations/0058_problem_to_uloha_tema_clanek.py @@ -45,7 +45,7 @@ def uloha_to_Uloha(apps,schema_editor): ulohy = Problem.objects.filter(typ = 'uloha') for uold in ulohy: - logger.debug('u') + logger.info('u') unew = Uloha.objects.create( problem_ptr = uold, # Zakomentované fieldy by se už měly nacházet v příslušném problému @@ -87,7 +87,7 @@ def clanek_to_Clanek(apps,schema_editor): clanky = Problem.objects.filter(Q(typ='org-clanek') | Q(typ='res-clanek')) for cl in clanky: - logger.debug('c') + logger.info('c') # Vybereme vhodné číslo pro článek z čísla zadání a čísla řešení: if cl.cislo_zadani_old is None: cislo = cl.cislo_reseni_old @@ -126,7 +126,7 @@ def tema_to_Tema(apps, schema_editor): temata = Problem.objects.filter(Q(typ = 'tema') | Q(typ='serial')) for t in temata: - logger.debug('t') + logger.info('t') # Vymyslíme správně ročník: if t.cislo_zadani_old is None and t.cislo_reseni_old is None: rocnik = None From 21a549af18d748aea1d1cbc4cbd4d3ad6e865208 Mon Sep 17 00:00:00 2001 From: "Pavel \"LEdoian\" Turinsky" Date: Thu, 20 Aug 2020 00:02:49 +0200 Subject: [PATCH 114/286] =?UTF-8?q?J=C3=A1=20to=20chci=20vid=C4=9Bt...?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- seminar/migrations/0058_problem_to_uloha_tema_clanek.py | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/seminar/migrations/0058_problem_to_uloha_tema_clanek.py b/seminar/migrations/0058_problem_to_uloha_tema_clanek.py index 2f86b89f..509ac938 100644 --- a/seminar/migrations/0058_problem_to_uloha_tema_clanek.py +++ b/seminar/migrations/0058_problem_to_uloha_tema_clanek.py @@ -6,9 +6,6 @@ from django.db import migrations from django.db.models import Q -import logging -logger = logging.getLogger(__name__) - def poskladej_strom(apps, rodic, *texty): Text = apps.get_model('seminar', 'Text') TextNode = apps.get_model('seminar', 'TextNode') @@ -45,7 +42,7 @@ def uloha_to_Uloha(apps,schema_editor): ulohy = Problem.objects.filter(typ = 'uloha') for uold in ulohy: - logger.info('u') + print('u') unew = Uloha.objects.create( problem_ptr = uold, # Zakomentované fieldy by se už měly nacházet v příslušném problému @@ -87,7 +84,7 @@ def clanek_to_Clanek(apps,schema_editor): clanky = Problem.objects.filter(Q(typ='org-clanek') | Q(typ='res-clanek')) for cl in clanky: - logger.info('c') + print('c') # Vybereme vhodné číslo pro článek z čísla zadání a čísla řešení: if cl.cislo_zadani_old is None: cislo = cl.cislo_reseni_old @@ -126,7 +123,7 @@ def tema_to_Tema(apps, schema_editor): temata = Problem.objects.filter(Q(typ = 'tema') | Q(typ='serial')) for t in temata: - logger.info('t') + print('t') # Vymyslíme správně ročník: if t.cislo_zadani_old is None and t.cislo_reseni_old is None: rocnik = None From 3a56eafa59e6e698b7be82d0d87ff4902d2e6984 Mon Sep 17 00:00:00 2001 From: "Pavel \"LEdoian\" Turinsky" Date: Thu, 20 Aug 2020 00:34:14 +0200 Subject: [PATCH 115/286] =?UTF-8?q?Opravn=C3=A1=20migrace,=20proto=C5=BEe?= =?UTF-8?q?=20to=20prost=C4=9B=20nefungovalo?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Kdyby to byl býval RunSQL, byl to oneliner... --- .../migrations/0059_vytvorit_pohadkanode.py | 2 +- seminar/migrations/fix_0058.py | 19 +++++++++++++++++++ 2 files changed, 20 insertions(+), 1 deletion(-) create mode 100644 seminar/migrations/fix_0058.py diff --git a/seminar/migrations/0059_vytvorit_pohadkanode.py b/seminar/migrations/0059_vytvorit_pohadkanode.py index 7ff7c655..d0edd677 100644 --- a/seminar/migrations/0059_vytvorit_pohadkanode.py +++ b/seminar/migrations/0059_vytvorit_pohadkanode.py @@ -21,7 +21,7 @@ def vytvor_pohadkanode(apps, schema_editor): class Migration(migrations.Migration): dependencies = [ - ('seminar', '0058_problem_to_uloha_tema_clanek'), + ('seminar', 'fix_0058'), ] operations = [ diff --git a/seminar/migrations/fix_0058.py b/seminar/migrations/fix_0058.py new file mode 100644 index 00000000..e344d237 --- /dev/null +++ b/seminar/migrations/fix_0058.py @@ -0,0 +1,19 @@ +from django.db import migrations + +def oprav_ulohy(apps, schema_editor): + Problem = apps.get_model('seminar', 'Pohadka') + + for p in Problem.objects.filter(typ="b'uloha'"): + p.typ = "uloha" + p.save() + +class Migration(migrations.Migration): + + dependencies = [ + ('seminar', '0058_problem_to_uloha_tema_clanek'), + ] + + operations = [ + migrations.RunPython(oprav_ulohy, oprav_ulohy), + ] + From 54e728d2be2ce6b25d4f0e8cc196f0acb8c14d80 Mon Sep 17 00:00:00 2001 From: "Pavel \"LEdoian\" Turinsky" Date: Thu, 20 Aug 2020 00:40:50 +0200 Subject: [PATCH 116/286] =?UTF-8?q?A=20nakonec=20to=20stejn=C4=9B=20SQL=20?= =?UTF-8?q?je...?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- seminar/migrations/fix_0058.py | 9 ++------- 1 file changed, 2 insertions(+), 7 deletions(-) diff --git a/seminar/migrations/fix_0058.py b/seminar/migrations/fix_0058.py index e344d237..ac36d0a0 100644 --- a/seminar/migrations/fix_0058.py +++ b/seminar/migrations/fix_0058.py @@ -1,11 +1,6 @@ from django.db import migrations -def oprav_ulohy(apps, schema_editor): - Problem = apps.get_model('seminar', 'Pohadka') - - for p in Problem.objects.filter(typ="b'uloha'"): - p.typ = "uloha" - p.save() +sql = "update seminar_problemy set typ = 'uloha' where typ like 'b_uloha_';" class Migration(migrations.Migration): @@ -14,6 +9,6 @@ class Migration(migrations.Migration): ] operations = [ - migrations.RunPython(oprav_ulohy, oprav_ulohy), + migrations.RunSQL(sql, sql), ] From 50103535d32a42339f193b56303370f3b3056c76 Mon Sep 17 00:00:00 2001 From: "Pavel \"LEdoian\" Turinsky" Date: Thu, 20 Aug 2020 00:41:20 +0200 Subject: [PATCH 117/286] =?UTF-8?q?D=C4=9Bl=C3=A1=20to=20n=C4=9Bco=20?= =?UTF-8?q?=C5=A1patn=C4=9B,=20ale=20tyhle=20printy=20nepom=C5=AF=C5=BEou?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- seminar/migrations/0058_problem_to_uloha_tema_clanek.py | 3 --- 1 file changed, 3 deletions(-) diff --git a/seminar/migrations/0058_problem_to_uloha_tema_clanek.py b/seminar/migrations/0058_problem_to_uloha_tema_clanek.py index 509ac938..333f5453 100644 --- a/seminar/migrations/0058_problem_to_uloha_tema_clanek.py +++ b/seminar/migrations/0058_problem_to_uloha_tema_clanek.py @@ -42,7 +42,6 @@ def uloha_to_Uloha(apps,schema_editor): ulohy = Problem.objects.filter(typ = 'uloha') for uold in ulohy: - print('u') unew = Uloha.objects.create( problem_ptr = uold, # Zakomentované fieldy by se už měly nacházet v příslušném problému @@ -84,7 +83,6 @@ def clanek_to_Clanek(apps,schema_editor): clanky = Problem.objects.filter(Q(typ='org-clanek') | Q(typ='res-clanek')) for cl in clanky: - print('c') # Vybereme vhodné číslo pro článek z čísla zadání a čísla řešení: if cl.cislo_zadani_old is None: cislo = cl.cislo_reseni_old @@ -123,7 +121,6 @@ def tema_to_Tema(apps, schema_editor): temata = Problem.objects.filter(Q(typ = 'tema') | Q(typ='serial')) for t in temata: - print('t') # Vymyslíme správně ročník: if t.cislo_zadani_old is None and t.cislo_reseni_old is None: rocnik = None From 575ccf5b3f23770ca6e2d89c2bcd4652c97f9ab4 Mon Sep 17 00:00:00 2001 From: "Pavel \"LEdoian\" Turinsky" Date: Thu, 20 Aug 2020 00:49:51 +0200 Subject: [PATCH 118/286] =?UTF-8?q?Log=20migrace,=20a=C5=A5=20se=20v=C3=AD?= =?UTF-8?q?,=20co=20se=20nepovedlo=20a=20d=C3=A1=20se=20to=20dochytat?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- MIGRATIONS | 184 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 184 insertions(+) diff --git a/MIGRATIONS b/MIGRATIONS index 2bfd0dca..3cf73ac4 100644 --- a/MIGRATIONS +++ b/MIGRATIONS @@ -1,3 +1,187 @@ Jak zvládnout migrace na nový model: - V mojí verzi databáze mají úlohy-Problémy typ "b'uloha'" + + +Log migrace na nový model: + +Operations to perform: + Apply all migrations: admin, auth, contenttypes, django_comments, flatpages, fluent_comments, galerie, korektury, prednasky, reversion, seminar, sessions, sites, sitetree, taggit, threadedcomments +Running migrations: + Applying admin.0003_logentry_add_action_flag_choices... OK + Applying auth.0009_alter_user_last_name_max_length... OK + Applying auth.0010_alter_group_name_max_length... OK + Applying auth.0011_update_proxy_permissions... OK + Applying galerie.0008_auto_20190430_2340... OK + Applying galerie.0009_auto_20190610_2358... OK + Applying galerie.0010_auto_20200819_0947... OK + Applying korektury.0016_auto_20190430_2340... OK + Applying korektury.0017_auto_20190610_2358... OK + Applying prednasky.0011_auto_20190430_2340... OK + Applying prednasky.0012_auto_20190610_2358... OK + Applying seminar.0049_auto_20190430_2354... OK + Applying seminar.0050_auto_20190510_2228... OK + Applying seminar.0051_resitel_to_osoba... OK + Applying seminar.0052_user_to_organizator... OK +/aux/akce/mam/www/mamweb-test/env/lib/python3.7/site-packages/django/db/models/fields/__init__.py:1427: RuntimeWarning: DateTimeField Organizator.organizuje_do received a naive datetime (2004-12-31 00:00:00) while time zone support is active. + RuntimeWarning) +/aux/akce/mam/www/mamweb-test/env/lib/python3.7/site-packages/django/db/models/fields/__init__.py:1427: RuntimeWarning: DateTimeField Organizator.organizuje_od received a naive datetime (1998-01-01 00:00:00) while time zone support is active. + RuntimeWarning) +/aux/akce/mam/www/mamweb-test/env/lib/python3.7/site-packages/django/db/models/fields/__init__.py:1427: RuntimeWarning: DateTimeField Organizator.organizuje_do received a naive datetime (2017-12-31 00:00:00) while time zone support is active. + RuntimeWarning) +/aux/akce/mam/www/mamweb-test/env/lib/python3.7/site-packages/django/db/models/fields/__init__.py:1427: RuntimeWarning: DateTimeField Organizator.organizuje_od received a naive datetime (2017-01-01 00:00:00) while time zone support is active. + RuntimeWarning) +/aux/akce/mam/www/mamweb-test/env/lib/python3.7/site-packages/django/db/models/fields/__init__.py:1427: RuntimeWarning: DateTimeField Organizator.organizuje_do received a naive datetime (2014-12-31 00:00:00) while time zone support is active. + RuntimeWarning) +/aux/akce/mam/www/mamweb-test/env/lib/python3.7/site-packages/django/db/models/fields/__init__.py:1427: RuntimeWarning: DateTimeField Organizator.organizuje_od received a naive datetime (2011-01-01 00:00:00) while time zone support is active. + RuntimeWarning) +/aux/akce/mam/www/mamweb-test/env/lib/python3.7/site-packages/django/db/models/fields/__init__.py:1427: RuntimeWarning: DateTimeField Organizator.organizuje_do received a naive datetime (2013-12-31 00:00:00) while time zone support is active. + RuntimeWarning) +/aux/akce/mam/www/mamweb-test/env/lib/python3.7/site-packages/django/db/models/fields/__init__.py:1427: RuntimeWarning: DateTimeField Organizator.organizuje_od received a naive datetime (2004-01-01 00:00:00) while time zone support is active. + RuntimeWarning) +/aux/akce/mam/www/mamweb-test/env/lib/python3.7/site-packages/django/db/models/fields/__init__.py:1427: RuntimeWarning: DateTimeField Organizator.organizuje_od received a naive datetime (2013-01-01 00:00:00) while time zone support is active. + RuntimeWarning) +/aux/akce/mam/www/mamweb-test/env/lib/python3.7/site-packages/django/db/models/fields/__init__.py:1427: RuntimeWarning: DateTimeField Organizator.organizuje_do received a naive datetime (2012-12-31 00:00:00) while time zone support is active. + RuntimeWarning) +/aux/akce/mam/www/mamweb-test/env/lib/python3.7/site-packages/django/db/models/fields/__init__.py:1427: RuntimeWarning: DateTimeField Organizator.organizuje_od received a naive datetime (2007-01-01 00:00:00) while time zone support is active. + RuntimeWarning) +/aux/akce/mam/www/mamweb-test/env/lib/python3.7/site-packages/django/db/models/fields/__init__.py:1427: RuntimeWarning: DateTimeField Organizator.organizuje_do received a naive datetime (2011-12-31 00:00:00) while time zone support is active. + RuntimeWarning) +/aux/akce/mam/www/mamweb-test/env/lib/python3.7/site-packages/django/db/models/fields/__init__.py:1427: RuntimeWarning: DateTimeField Organizator.organizuje_od received a naive datetime (2009-01-01 00:00:00) while time zone support is active. + RuntimeWarning) +/aux/akce/mam/www/mamweb-test/env/lib/python3.7/site-packages/django/db/models/fields/__init__.py:1427: RuntimeWarning: DateTimeField Organizator.organizuje_do received a naive datetime (2009-12-31 00:00:00) while time zone support is active. + RuntimeWarning) +/aux/akce/mam/www/mamweb-test/env/lib/python3.7/site-packages/django/db/models/fields/__init__.py:1427: RuntimeWarning: DateTimeField Organizator.organizuje_do received a naive datetime (2008-12-31 00:00:00) while time zone support is active. + RuntimeWarning) +/aux/akce/mam/www/mamweb-test/env/lib/python3.7/site-packages/django/db/models/fields/__init__.py:1427: RuntimeWarning: DateTimeField Organizator.organizuje_od received a naive datetime (2005-01-01 00:00:00) while time zone support is active. + RuntimeWarning) +/aux/akce/mam/www/mamweb-test/env/lib/python3.7/site-packages/django/db/models/fields/__init__.py:1427: RuntimeWarning: DateTimeField Organizator.organizuje_do received a naive datetime (2015-12-31 00:00:00) while time zone support is active. + RuntimeWarning) +/aux/akce/mam/www/mamweb-test/env/lib/python3.7/site-packages/django/db/models/fields/__init__.py:1427: RuntimeWarning: DateTimeField Organizator.organizuje_od received a naive datetime (2001-01-01 00:00:00) while time zone support is active. + RuntimeWarning) +/aux/akce/mam/www/mamweb-test/env/lib/python3.7/site-packages/django/db/models/fields/__init__.py:1427: RuntimeWarning: DateTimeField Organizator.organizuje_od received a naive datetime (2010-01-01 00:00:00) while time zone support is active. + RuntimeWarning) +/aux/akce/mam/www/mamweb-test/env/lib/python3.7/site-packages/django/db/models/fields/__init__.py:1427: RuntimeWarning: DateTimeField Organizator.organizuje_od received a naive datetime (2008-01-01 00:00:00) while time zone support is active. + RuntimeWarning) +/aux/akce/mam/www/mamweb-test/env/lib/python3.7/site-packages/django/db/models/fields/__init__.py:1427: RuntimeWarning: DateTimeField Organizator.organizuje_do received a naive datetime (2006-12-31 00:00:00) while time zone support is active. + RuntimeWarning) +/aux/akce/mam/www/mamweb-test/env/lib/python3.7/site-packages/django/db/models/fields/__init__.py:1427: RuntimeWarning: DateTimeField Organizator.organizuje_od received a naive datetime (2002-01-01 00:00:00) while time zone support is active. + RuntimeWarning) +/aux/akce/mam/www/mamweb-test/env/lib/python3.7/site-packages/django/db/models/fields/__init__.py:1427: RuntimeWarning: DateTimeField Organizator.organizuje_do received a naive datetime (2005-12-31 00:00:00) while time zone support is active. + RuntimeWarning) +/aux/akce/mam/www/mamweb-test/env/lib/python3.7/site-packages/django/db/models/fields/__init__.py:1427: RuntimeWarning: DateTimeField Organizator.organizuje_od received a naive datetime (1999-01-01 00:00:00) while time zone support is active. + RuntimeWarning) +/aux/akce/mam/www/mamweb-test/env/lib/python3.7/site-packages/django/db/models/fields/__init__.py:1427: RuntimeWarning: DateTimeField Organizator.organizuje_od received a naive datetime (2003-01-01 00:00:00) while time zone support is active. + RuntimeWarning) +/aux/akce/mam/www/mamweb-test/env/lib/python3.7/site-packages/django/db/models/fields/__init__.py:1427: RuntimeWarning: DateTimeField Organizator.organizuje_od received a naive datetime (2000-01-01 00:00:00) while time zone support is active. + RuntimeWarning) +/aux/akce/mam/www/mamweb-test/env/lib/python3.7/site-packages/django/db/models/fields/__init__.py:1427: RuntimeWarning: DateTimeField Organizator.organizuje_do received a naive datetime (2002-12-31 00:00:00) while time zone support is active. + RuntimeWarning) +/aux/akce/mam/www/mamweb-test/env/lib/python3.7/site-packages/django/db/models/fields/__init__.py:1427: RuntimeWarning: DateTimeField Organizator.organizuje_do received a naive datetime (2001-12-31 00:00:00) while time zone support is active. + RuntimeWarning) +/aux/akce/mam/www/mamweb-test/env/lib/python3.7/site-packages/django/db/models/fields/__init__.py:1427: RuntimeWarning: DateTimeField Organizator.organizuje_od received a naive datetime (1996-01-01 00:00:00) while time zone support is active. + RuntimeWarning) +/aux/akce/mam/www/mamweb-test/env/lib/python3.7/site-packages/django/db/models/fields/__init__.py:1427: RuntimeWarning: DateTimeField Organizator.organizuje_do received a naive datetime (2000-12-31 00:00:00) while time zone support is active. + RuntimeWarning) +/aux/akce/mam/www/mamweb-test/env/lib/python3.7/site-packages/django/db/models/fields/__init__.py:1427: RuntimeWarning: DateTimeField Organizator.organizuje_do received a naive datetime (1999-12-31 00:00:00) while time zone support is active. + RuntimeWarning) +/aux/akce/mam/www/mamweb-test/env/lib/python3.7/site-packages/django/db/models/fields/__init__.py:1427: RuntimeWarning: DateTimeField Organizator.organizuje_do received a naive datetime (1996-12-31 00:00:00) while time zone support is active. + RuntimeWarning) +/aux/akce/mam/www/mamweb-test/env/lib/python3.7/site-packages/django/db/models/fields/__init__.py:1427: RuntimeWarning: DateTimeField Organizator.organizuje_od received a naive datetime (1994-01-01 00:00:00) while time zone support is active. + RuntimeWarning) +/aux/akce/mam/www/mamweb-test/env/lib/python3.7/site-packages/django/db/models/fields/__init__.py:1427: RuntimeWarning: DateTimeField Organizator.organizuje_od received a naive datetime (2012-01-01 00:00:00) while time zone support is active. + RuntimeWarning) +/aux/akce/mam/www/mamweb-test/env/lib/python3.7/site-packages/django/db/models/fields/__init__.py:1427: RuntimeWarning: DateTimeField Organizator.organizuje_do received a naive datetime (2016-12-31 00:00:00) while time zone support is active. + RuntimeWarning) +/aux/akce/mam/www/mamweb-test/env/lib/python3.7/site-packages/django/db/models/fields/__init__.py:1427: RuntimeWarning: DateTimeField Organizator.organizuje_do received a naive datetime (2018-12-31 00:00:00) while time zone support is active. + RuntimeWarning) +/aux/akce/mam/www/mamweb-test/env/lib/python3.7/site-packages/django/db/models/fields/__init__.py:1427: RuntimeWarning: DateTimeField Organizator.organizuje_od received a naive datetime (2014-01-01 00:00:00) while time zone support is active. + RuntimeWarning) +/aux/akce/mam/www/mamweb-test/env/lib/python3.7/site-packages/django/db/models/fields/__init__.py:1427: RuntimeWarning: DateTimeField Organizator.organizuje_do received a naive datetime (2019-12-31 00:00:00) while time zone support is active. + RuntimeWarning) +/aux/akce/mam/www/mamweb-test/env/lib/python3.7/site-packages/django/db/models/fields/__init__.py:1427: RuntimeWarning: DateTimeField Organizator.organizuje_od received a naive datetime (2006-01-01 00:00:00) while time zone support is active. + RuntimeWarning) +/aux/akce/mam/www/mamweb-test/env/lib/python3.7/site-packages/django/db/models/fields/__init__.py:1427: RuntimeWarning: DateTimeField Organizator.organizuje_od received a naive datetime (1995-01-01 00:00:00) while time zone support is active. + RuntimeWarning) +/aux/akce/mam/www/mamweb-test/env/lib/python3.7/site-packages/django/db/models/fields/__init__.py:1427: RuntimeWarning: DateTimeField Organizator.organizuje_do received a naive datetime (2007-12-31 00:00:00) while time zone support is active. + RuntimeWarning) +/aux/akce/mam/www/mamweb-test/env/lib/python3.7/site-packages/django/db/models/fields/__init__.py:1427: RuntimeWarning: DateTimeField Organizator.organizuje_od received a naive datetime (2015-01-01 00:00:00) while time zone support is active. + RuntimeWarning) +/aux/akce/mam/www/mamweb-test/env/lib/python3.7/site-packages/django/db/models/fields/__init__.py:1427: RuntimeWarning: DateTimeField Organizator.organizuje_od received a naive datetime (2016-01-01 00:00:00) while time zone support is active. + RuntimeWarning) +/aux/akce/mam/www/mamweb-test/env/lib/python3.7/site-packages/django/db/models/fields/__init__.py:1427: RuntimeWarning: DateTimeField Organizator.organizuje_od received a naive datetime (2018-01-01 00:00:00) while time zone support is active. + RuntimeWarning) +/aux/akce/mam/www/mamweb-test/env/lib/python3.7/site-packages/django/db/models/fields/__init__.py:1427: RuntimeWarning: DateTimeField Organizator.organizuje_od received a naive datetime (2019-01-01 00:00:00) while time zone support is active. + RuntimeWarning) +/aux/akce/mam/www/mamweb-test/env/lib/python3.7/site-packages/django/db/models/fields/__init__.py:1427: RuntimeWarning: DateTimeField Organizator.organizuje_od received a naive datetime (2020-01-01 00:00:00) while time zone support is active. + RuntimeWarning) + Applying seminar.0053_organizator_organizuje_od_do... OK + Applying seminar.0055_smazat_nemigrovane_zastarale_veci... OK + Applying seminar.0056_vrcholy_pro_rocniky_a_cisla... OK + Applying seminar.0057_reseni_to_reseni_hodnoceni...!!!!!!!!!!!!!!! +31397 Reseni object (31397) +!!!!!!!!!!!!!!! +!!!!!!!!!!!!!!! +31396 Reseni object (31396) +!!!!!!!!!!!!!!! +!!!!!!!!!!!!!!! +31395 Reseni object (31395) +!!!!!!!!!!!!!!! +!!!!!!!!!!!!!!! +31394 Reseni object (31394) +!!!!!!!!!!!!!!! +!!!!!!!!!!!!!!! +31393 Reseni object (31393) +!!!!!!!!!!!!!!! + OK + Applying seminar.0058_problem_to_uloha_tema_clanek... OK + Applying seminar.fix_0058... OK + Applying seminar.0059_vytvorit_pohadkanode... OK + Applying seminar.0060_spoj_stromy... OK + Applying seminar.0061_kill_frankenstein... OK + Applying seminar.0062_redukce_modelu_pohadky... OK + Applying seminar.0063_procisteni_migraci... OK + Applying seminar.0064_auto_20190610_2358... OK + Applying seminar.0065_treenode_polymorphic_ctype... OK + Applying seminar.0066_problem_polymorphic_ctype... OK + Applying seminar.0067_auto_20190814_0805... OK + Applying seminar.0068_treenode_nazev... OK + Applying seminar.0069_auto_20191120_2115... OK + Applying seminar.0070_auto_20191120_2357... OK + Applying seminar.0071_remove_nastaveni_aktualni_rocnik... OK + Applying seminar.0072_auto_20191204_2257... OK + Applying seminar.0073_copy_osoba_email_to_user_email... OK + Applying seminar.0074_auto_20200228_1401... OK + Applying seminar.0075_auto_20200228_2010... OK + Applying seminar.0076_auto_20200228_2013... OK + Applying seminar.0077_auto_20200318_2146... OK + Applying seminar.0078_otistenereseninode... OK + Applying seminar.0079_clanek_resitelsky... OK + Applying seminar.0080_zruseni_claneknode_a_konferanode... OK + Applying seminar.0081_auto_20200408_2221... OK + Applying seminar.0082_auto_20200506_1951... OK + Applying seminar.0083_auto_20200506_1952... OK +WARNING 2020-08-20 00:49:07,941 0084_clanek_cislo: Více než jedno řešení pro článek Clanek object (2215) +WARNING 2020-08-20 00:49:07,953 0084_clanek_cislo: Více než jedno řešení pro článek Clanek object (2221) +WARNING 2020-08-20 00:49:07,959 0084_clanek_cislo: Více než jedno řešení pro článek Clanek object (2212) +WARNING 2020-08-20 00:49:07,965 0084_clanek_cislo: Více než jedno řešení pro článek Clanek object (1955) +WARNING 2020-08-20 00:49:07,968 0084_clanek_cislo: Více než jedno řešení pro článek Clanek object (2027) +WARNING 2020-08-20 00:49:07,971 0084_clanek_cislo: Více než jedno řešení pro článek Clanek object (1981) +WARNING 2020-08-20 00:49:07,974 0084_clanek_cislo: Více než jedno řešení pro článek Clanek object (1970) +WARNING 2020-08-20 00:49:07,978 0084_clanek_cislo: Více než jedno řešení pro článek Clanek object (2001) +WARNING 2020-08-20 00:49:07,981 0084_clanek_cislo: Více než jedno řešení pro článek Clanek object (2004) +WARNING 2020-08-20 00:49:07,984 0084_clanek_cislo: Více než jedno řešení pro článek Clanek object (1941) +WARNING 2020-08-20 00:49:07,990 0084_clanek_cislo: Více než jedno řešení pro článek Clanek object (2024) +WARNING 2020-08-20 00:49:07,993 0084_clanek_cislo: Více než jedno řešení pro článek Clanek object (2031) +WARNING 2020-08-20 00:49:07,997 0084_clanek_cislo: Více než jedno řešení pro článek Clanek object (2211) +WARNING 2020-08-20 00:49:08,005 0084_clanek_cislo: Více než jedno řešení pro článek Clanek object (2073) +WARNING 2020-08-20 00:49:08,017 0084_clanek_cislo: Více než jedno řešení pro článek Clanek object (2018) +WARNING 2020-08-20 00:49:08,022 0084_clanek_cislo: Více než jedno řešení pro článek Clanek object (2222) +WARNING 2020-08-20 00:49:08,028 0084_clanek_cislo: Více než jedno řešení pro článek Clanek object (1953) +WARNING 2020-08-20 00:49:08,034 0084_clanek_cislo: Více než jedno řešení pro článek Clanek object (2026) + Applying seminar.0084_clanek_cislo... OK + Applying seminar.0085_nepovinna_prezdivka... OK + Applying seminar.0086_auto_20200819_0959... OK + Applying sitetree.0001_initial... OK + Applying taggit.0003_taggeditem_add_unique_index... OK + From 7fb76947983d38e7e562b00fbd8e2563c562f91d Mon Sep 17 00:00:00 2001 From: "Pavel \"LEdoian\" Turinsky" Date: Thu, 20 Aug 2020 00:54:40 +0200 Subject: [PATCH 119/286] Fix squashed migration --- .../migrations/0001_squashed_0067_auto_20190814_0805.py | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/seminar/migrations/0001_squashed_0067_auto_20190814_0805.py b/seminar/migrations/0001_squashed_0067_auto_20190814_0805.py index 05d5f265..653a9eaf 100644 --- a/seminar/migrations/0001_squashed_0067_auto_20190814_0805.py +++ b/seminar/migrations/0001_squashed_0067_auto_20190814_0805.py @@ -511,7 +511,7 @@ def vyrob_problemum_ctypes(apps, schema_editor): class Migration(migrations.Migration): atomic = False - replaces = [('seminar', '0001_initial'), ('seminar', '0002_add_body_views'), ('seminar', '0003_add_skola_zs_ss'), ('seminar', '0004_add_old_dakos_id'), ('seminar', '0005_alter_problem_autor'), ('seminar', '0006_problem_add_timestamp'), ('seminar', '0007_problem_zamereni'), ('seminar', '0008_reseni_forma'), ('seminar', '0009_rename_imported_IDs'), ('seminar', '0010_alter_rok_maturity'), ('seminar', '0011_alter_timestamp_def'), ('seminar', '0012_remove_soustredeni_ucastnici'), ('seminar', '0013_soustredeni_ucastnici_through_model'), ('seminar', '0014_uprava_poznamek'), ('seminar', '0015_soustredeni_text'), ('seminar', '0016_texty_problemu'), ('seminar', '0017_texty_problemu_minor'), ('seminar', '0018_problemnavrh_problemzadany'), ('seminar', '0019_rocnik_ciselne'), ('seminar', '0020_indexy_a_razeni'), ('seminar', '0021_cislo_verejna_vysledkovka'), ('seminar', '0022_decimal_body'), ('seminar', '0023_add_novinky'), ('seminar', '0024_add_organizator'), ('seminar', '0025_zmena_cesty_nahravani_obrazku'), ('seminar', '0026_soustredeni_typ'), ('seminar', '0027_export_flag_a_typ_akce'), ('seminar', '0028_add_body_celkem_views'), ('seminar', '0029_fix_body_celkem_views'), ('seminar', '0030_add_vysledky'), ('seminar', '0031_cislo_pdf'), ('seminar', '0032_cislo_pdf_blank_typos'), ('seminar', '0033_organizator_studuje_popisek'), ('seminar', '0034_reseni_forma_default_email'), ('seminar', '0035_django_imagekit'), ('seminar', '0036_add_org_to_soustredeni'), ('seminar', '0037_prispevek'), ('seminar', '0038_change_meta_prispevek'), ('seminar', '0039_pohadka'), ('seminar', '0040_pohadka_nepovinny_autor'), ('seminar', '0041_konfery'), ('seminar', '0042_cislo_faze'), ('seminar', '0043_uprava_faze'), ('seminar', '0044_uprava_faze'), ('seminar', '0045_cislo_pridani_faze_nahrano'), ('seminar', '0042_auto_20161005_0847'), ('seminar', '0046_merge'), ('seminar', '0047_auto_20170120_2118'), ('seminar', '0048_add_cislo_datum_deadline_soustredeni'), ('seminar', '0049_auto_20190430_2354'), ('seminar', '0050_auto_20190510_2228'), ('seminar', '0051_resitel_to_osoba'), ('seminar', '0052_user_to_organizator'), ('seminar', '0053_organizator_organizuje_od_do'), ('seminar', '0055_smazat_nemigrovane_zastarale_veci'), ('seminar', '0056_vrcholy_pro_rocniky_a_cisla'), ('seminar', '0057_reseni_to_reseni_hodnoceni'), ('seminar', '0058_problem_to_uloha_tema_clanek'), ('seminar', '0059_vytvorit_pohadkanode'), ('seminar', '0060_spoj_stromy'), ('seminar', '0061_kill_frankenstein'), ('seminar', '0062_redukce_modelu_pohadky'), ('seminar', '0063_procisteni_migraci'), ('seminar', '0064_auto_20190610_2358'), ('seminar', '0065_treenode_polymorphic_ctype'), ('seminar', '0066_problem_polymorphic_ctype'), ('seminar', '0067_auto_20190814_0805')] + replaces = [('seminar', '0001_initial'), ('seminar', '0002_add_body_views'), ('seminar', '0003_add_skola_zs_ss'), ('seminar', '0004_add_old_dakos_id'), ('seminar', '0005_alter_problem_autor'), ('seminar', '0006_problem_add_timestamp'), ('seminar', '0007_problem_zamereni'), ('seminar', '0008_reseni_forma'), ('seminar', '0009_rename_imported_IDs'), ('seminar', '0010_alter_rok_maturity'), ('seminar', '0011_alter_timestamp_def'), ('seminar', '0012_remove_soustredeni_ucastnici'), ('seminar', '0013_soustredeni_ucastnici_through_model'), ('seminar', '0014_uprava_poznamek'), ('seminar', '0015_soustredeni_text'), ('seminar', '0016_texty_problemu'), ('seminar', '0017_texty_problemu_minor'), ('seminar', '0018_problemnavrh_problemzadany'), ('seminar', '0019_rocnik_ciselne'), ('seminar', '0020_indexy_a_razeni'), ('seminar', '0021_cislo_verejna_vysledkovka'), ('seminar', '0022_decimal_body'), ('seminar', '0023_add_novinky'), ('seminar', '0024_add_organizator'), ('seminar', '0025_zmena_cesty_nahravani_obrazku'), ('seminar', '0026_soustredeni_typ'), ('seminar', '0027_export_flag_a_typ_akce'), ('seminar', '0028_add_body_celkem_views'), ('seminar', '0029_fix_body_celkem_views'), ('seminar', '0030_add_vysledky'), ('seminar', '0031_cislo_pdf'), ('seminar', '0032_cislo_pdf_blank_typos'), ('seminar', '0033_organizator_studuje_popisek'), ('seminar', '0034_reseni_forma_default_email'), ('seminar', '0035_django_imagekit'), ('seminar', '0036_add_org_to_soustredeni'), ('seminar', '0037_prispevek'), ('seminar', '0038_change_meta_prispevek'), ('seminar', '0039_pohadka'), ('seminar', '0040_pohadka_nepovinny_autor'), ('seminar', '0041_konfery'), ('seminar', '0042_cislo_faze'), ('seminar', '0043_uprava_faze'), ('seminar', '0044_uprava_faze'), ('seminar', '0045_cislo_pridani_faze_nahrano'), ('seminar', '0042_auto_20161005_0847'), ('seminar', '0046_merge'), ('seminar', '0047_auto_20170120_2118'), ('seminar', '0048_add_cislo_datum_deadline_soustredeni'), ('seminar', '0049_auto_20190430_2354'), ('seminar', '0050_auto_20190510_2228'), ('seminar', '0051_resitel_to_osoba'), ('seminar', '0052_user_to_organizator'), ('seminar', '0053_organizator_organizuje_od_do'), ('seminar', '0055_smazat_nemigrovane_zastarale_veci'), ('seminar', '0056_vrcholy_pro_rocniky_a_cisla'), ('seminar', '0057_reseni_to_reseni_hodnoceni'), ('seminar', '0058_problem_to_uloha_tema_clanek'), ('seminar', 'fix_0058'), ('seminar', '0059_vytvorit_pohadkanode'), ('seminar', '0060_spoj_stromy'), ('seminar', '0061_kill_frankenstein'), ('seminar', '0062_redukce_modelu_pohadky'), ('seminar', '0063_procisteni_migraci'), ('seminar', '0064_auto_20190610_2358'), ('seminar', '0065_treenode_polymorphic_ctype'), ('seminar', '0066_problem_polymorphic_ctype'), ('seminar', '0067_auto_20190814_0805')] initial = True @@ -1816,6 +1816,12 @@ class Migration(migrations.Migration): konfery_rucne, ), + # migr "fix 0058" + migtations.RunSQL( + "update seminar_problemy set typ = 'uloha' where typ like 'b_uloha_';", + "update seminar_problemy set typ = 'uloha' where typ like 'b_uloha_';" + ), + # migr 0059 migrations.RunPython( vytvor_pohadkanode, From 3153b31b2d2671a921ca46a79147d8f3f842892b Mon Sep 17 00:00:00 2001 From: "Pavel \"LEdoian\" Turinsky" Date: Thu, 20 Aug 2020 00:56:02 +0200 Subject: [PATCH 120/286] Fix typo --- seminar/migrations/0001_squashed_0067_auto_20190814_0805.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/seminar/migrations/0001_squashed_0067_auto_20190814_0805.py b/seminar/migrations/0001_squashed_0067_auto_20190814_0805.py index 653a9eaf..5eb3e452 100644 --- a/seminar/migrations/0001_squashed_0067_auto_20190814_0805.py +++ b/seminar/migrations/0001_squashed_0067_auto_20190814_0805.py @@ -1817,7 +1817,7 @@ class Migration(migrations.Migration): ), # migr "fix 0058" - migtations.RunSQL( + migrations.RunSQL( "update seminar_problemy set typ = 'uloha' where typ like 'b_uloha_';", "update seminar_problemy set typ = 'uloha' where typ like 'b_uloha_';" ), From 645163cec83d96d70f7396a4d0d605c65284c5c8 Mon Sep 17 00:00:00 2001 From: Anet Date: Sun, 23 Aug 2020 18:46:47 +0200 Subject: [PATCH 121/286] =?UTF-8?q?views:=20zprovozn=C4=9Bn=C3=AD=20views?= =?UTF-8?q?=20=C5=99e=C5=A1itelsk=C3=BDch=20=C4=8Dl=C3=A1nk=C5=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- seminar/views/views_all.py | 31 ++++++++++++++++++++++++++++++- 1 file changed, 30 insertions(+), 1 deletion(-) diff --git a/seminar/views/views_all.py b/seminar/views/views_all.py index 87c7dbe5..af34e69e 100644 --- a/seminar/views/views_all.py +++ b/seminar/views/views_all.py @@ -951,12 +951,41 @@ def soustredeniUcastniciExportView(request,soustredeni): ### Články +def group_by_rocnik(clanky): + ''' Vezme zadaný seznam článků a seskupí je podle ročníku. + Vrátí seznam seznamů článků ze stejného ročníku.''' + clanky.order_by('cislo__rocnik__rocnik') + skupiny_clanku = [] + skupina = [] + + rocnik = clanky.first().cislo.rocnik.rocnik # první ročník + for clanek in clanky: + if clanek.cislo.rocnik.rocnik == rocnik: + skupina.append(clanek) + else: + skupiny_clanku.append(skupina) + skupina = [] + skupina.append(clanek) + rocnik = clanek.cislo.rocnik.rocnik + skupiny_clanku.append(skupina) + return skupiny_clanku + # FIXME: clanky jsou vsechny, pokud budou i neresitelske, tak se take zobrazi class ClankyResitelView(generic.ListView): model = Problem template_name = 'seminar/clanky/resitelske_clanky.html' - queryset = Clanek.objects.filter(stav=Problem.STAV_ZADANY).select_related('cislo_zadani__rocnik').order_by('-cislo_zadani__rocnik__rocnik', 'kod') + #queryset + clanky = Clanek.objects.filter(stav=Problem.STAV_ZADANY).select_related('cislo__rocnik').order_by('-cislo__rocnik__rocnik') + queryset = [] + skupiny_clanku = group_by_rocnik(clanky) + for skupina in skupiny_clanku: + skupina.sort(key=lambda clanek: clanek.kod_v_rocniku()) + for clanek in skupina: + queryset.append(clanek) + #XXX + + #zadani__rocnik').order_by('-cislo_zadani__rocnik__rocnik', 'kod') # FIXME: pokud chceme orgoclanky, tak nejak zavest do modelu a podle toho odkomentovat a upravit #class ClankyOrganizatorView(generic.ListView): From ab4148e2e271c7bd1a936e5ba7f4c3adfb01970a Mon Sep 17 00:00:00 2001 From: Anet Date: Sun, 23 Aug 2020 23:22:17 +0200 Subject: [PATCH 122/286] orgorozcestnik: nabuseni statickych odkazu, pokus o nejake lehke dynamicke veci - rozdelane --- .../templates/seminar/clanky/resitelske_clanky.html | 2 +- seminar/urls.py | 3 +++ seminar/views/views_all.py | 11 ++++++++++- 3 files changed, 14 insertions(+), 2 deletions(-) diff --git a/seminar/templates/seminar/clanky/resitelske_clanky.html b/seminar/templates/seminar/clanky/resitelske_clanky.html index 1e15fcbc..84089753 100644 --- a/seminar/templates/seminar/clanky/resitelske_clanky.html +++ b/seminar/templates/seminar/clanky/resitelske_clanky.html @@ -17,7 +17,7 @@ {% for clanek in object_list %} -{% with clanek.cislo_zadani.rocnik.rocnik as rocnik %} +{% with clanek.cislo.rocnik.rocnik as rocnik %} {% ifchanged rocnik %} {% if not forloop.first %}
{% endif %}

{{ rocnik }}. ročník

diff --git a/seminar/urls.py b/seminar/urls.py index df2e1435..9c72717e 100644 --- a/seminar/urls.py +++ b/seminar/urls.py @@ -90,6 +90,9 @@ urlpatterns = [ path('org/vloz_body//', staff_member_required(views.VlozBodyView.as_view()),name='seminar_org_vlozbody'), + # příprava na nestatický orgorozcestník + path('org/rozcestnik', + staff_member_required(views.OrgoRozcestnikView.as_view()),name='seminar_org_rozcestnik'), path('prihlaska/',views.prihlaskaView, name='seminar_prihlaska'), path('login/', views.LoginView.as_view(), name='login'), path('logout/', views.LogoutView.as_view(), name='logout'), diff --git a/seminar/views/views_all.py b/seminar/views/views_all.py index af34e69e..a80623d7 100644 --- a/seminar/views/views_all.py +++ b/seminar/views/views_all.py @@ -873,6 +873,16 @@ def oldObalkovaniView(request, rocnik, cislo): {'cislo': cislo, 'problemy': problemy, 'reseni': reseni} ) +### Orgostránky + +def OrgoRozcestnikView(request): + ''' Zobrazí organizátorský rozcestník.''' + posledni_soustredeni = Soustredeni.objects.order_by('-datum_konce').first() + + template_name = 'seminar/orgorozcestnik.html' + content_type = 'text/plain; charset=UTF8' + #XXX + ### Tituly def TitulyView(request, rocnik, cislo): @@ -983,7 +993,6 @@ class ClankyResitelView(generic.ListView): skupina.sort(key=lambda clanek: clanek.kod_v_rocniku()) for clanek in skupina: queryset.append(clanek) - #XXX #zadani__rocnik').order_by('-cislo_zadani__rocnik__rocnik', 'kod') From 64777359142862f3bab94724e9a50b6562415f11 Mon Sep 17 00:00:00 2001 From: Anet Date: Tue, 1 Sep 2020 23:04:19 +0200 Subject: [PATCH 123/286] =?UTF-8?q?orgorozhrani=20verze=20-1:=20z=C3=A1kla?= =?UTF-8?q?dn=C3=AD=20v=C4=9Bci,=20u=20probl=C3=A9m=C5=AF=20je=20pot=C5=99?= =?UTF-8?q?eba=20vymyslet,=20kam=20to=20m=C3=A1=20sm=C4=9Brovat,=20asi=20o?= =?UTF-8?q?dkaz=20na=20treenode=20editor?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- seminar/templates/seminar/orgorozcestnik.html | 86 +++++++++++ seminar/urls.py | 2 +- seminar/views/views_all.py | 138 +++++++++++------- 3 files changed, 170 insertions(+), 56 deletions(-) create mode 100644 seminar/templates/seminar/orgorozcestnik.html diff --git a/seminar/templates/seminar/orgorozcestnik.html b/seminar/templates/seminar/orgorozcestnik.html new file mode 100644 index 00000000..5bd75403 --- /dev/null +++ b/seminar/templates/seminar/orgorozcestnik.html @@ -0,0 +1,86 @@ +{% extends "base.html" %} + +{% block content %} +

Informace, komunikace

+ +
    +
  • wiki obsahuje různé návody a know-how
  • +
  • Riot chatování s dalšími orgy
  • +
  • Kanboard správa TODO + +
  • +
  • přidat novinku na web
  • +
+ +
+

Tvorba čísla

+ + +
+ +

Moje problémy

+ +

Témata

+
    +{% for t in temata %} +
  • {{ t }}
  • +{% endfor %} +
+ +

Úlohy

+
    +{% for u in ulohy %} +
  • {{ u }}
  • +{% endfor %} +
+ +

Články

+
    +{% for c in clanky %} +
  • {{ c }}
  • +{% endfor %} +
+ +
+

Soustředění

+ + + +
+

Můj profil

+ + + +
+

Nemůžeš najít, co hledáš? Může to být v administračním rozhraní webu.

+{% endblock content %} + diff --git a/seminar/urls.py b/seminar/urls.py index 9c72717e..ed42a7f8 100644 --- a/seminar/urls.py +++ b/seminar/urls.py @@ -91,7 +91,7 @@ urlpatterns = [ path('org/vloz_body//', staff_member_required(views.VlozBodyView.as_view()),name='seminar_org_vlozbody'), # příprava na nestatický orgorozcestník - path('org/rozcestnik', + path('org/rozcestnik/', staff_member_required(views.OrgoRozcestnikView.as_view()),name='seminar_org_rozcestnik'), path('prihlaska/',views.prihlaskaView, name='seminar_prihlaska'), path('login/', views.LoginView.as_view(), name='login'), diff --git a/seminar/views/views_all.py b/seminar/views/views_all.py index a80623d7..242c4962 100644 --- a/seminar/views/views_all.py +++ b/seminar/views/views_all.py @@ -10,6 +10,7 @@ from django.http import Http404,HttpResponseBadRequest,HttpResponseRedirect from django.db.models import Q, Sum, Count from django.views.decorators.csrf import ensure_csrf_cookie from django.views.generic.edit import FormView, CreateView +from django.views.generic.base import TemplateView from django.contrib.auth import authenticate, login, get_user_model, logout from django.contrib.auth import views as auth_views from django.contrib.auth.models import User @@ -200,7 +201,7 @@ class AktualniZadaniView(TreeNodeView): # "cisla" : cisla # }) # return render(request, 'seminar/tematka/rozcestnik.html', {"tematka": tematka, "rocnik" : nastaveni.aktualni_rocnik().rocnik}) -# +# #def ZadaniAktualniVysledkovkaView(request): # nastaveni = get_object_or_404(Nastaveni) @@ -875,12 +876,39 @@ def oldObalkovaniView(request, rocnik, cislo): ### Orgostránky -def OrgoRozcestnikView(request): +class OrgoRozcestnikView(TemplateView): ''' Zobrazí organizátorský rozcestník.''' - posledni_soustredeni = Soustredeni.objects.order_by('-datum_konce').first() template_name = 'seminar/orgorozcestnik.html' - content_type = 'text/plain; charset=UTF8' + + def get_context_data(self, **kwargs): + context = super().get_context_data(**kwargs) + context['posledni_soustredeni'] = Soustredeni.objects.order_by('-datum_konce').first() + nastaveni = Nastaveni.objects.first() + aktualni_rocnik = nastaveni.aktualni_rocnik + context['posledni_cislo_url'] = nastaveni.aktualni_cislo.verejne_url() + # TODO možná chceme odkazovat na právě rozpracované číslo, a ne to poslední vydané + # pokud nechceme haluzit kód (= poradi) dalšího čísla, bude asi potřeba jít + # přes treenody (a dát si přitom pozor na MezicisloNode) + + u = self.request.user + os = s.Osoba.objects.get(user=u) + organizator = s.Organizator.objects.get(osoba=os) + temata_garant = s.Tema.objects.filter(garant=organizator, + rocnik=aktualni_rocnik) + #FIXME: přidat opravovatel, stav='STAV_ZADANY' + ulohy_garant = s.Uloha.objects.filter(garant=organizator, + cislo_zadani__rocnik=aktualni_rocnik) + clanky_garant = s.Clanek.objects.filter(garant=organizator, + cislo__rocnik=aktualni_rocnik) + + context['temata'] = temata_garant + context['ulohy'] = ulohy_garant + context['clanky'] = clanky_garant + context['organizator'] = organizator + return context + + #content_type = 'text/plain; charset=UTF8' #XXX ### Tituly @@ -1109,57 +1137,57 @@ def prihlaska_log_gdpr_safe(logger, gdpr_logger, msg, form_data): from django.forms.models import model_to_dict def resitelEditView(request): - err_logger = logging.getLogger('seminar.prihlaska.problem') - ## Načtení objektu Osoba a Resitel, patrici k aktuálně přihlášenému uživately - u = request.user - osoba_edit = Osoba.objects.get(user=u) - resitel_edit = osoba_edit.resitel - user_edit = osoba_edit.user - ## Vytvoření slovníku, kterým předvyplním formulář - prefill_1=model_to_dict(user_edit) - prefill_2=model_to_dict(resitel_edit) - prefill_3=model_to_dict(osoba_edit) - prefill_1.update(prefill_2) - prefill_1.update(prefill_3) - form = ProfileEditForm(initial=prefill_1) - ## Změna údajů a jejich uložení - if request.method == 'POST': - form = ProfileEditForm(request.POST) - if form.is_valid(): - ## Změny v osobě - fcd = form.cleaned_data - osoba_edit.jmeno = fcd['jmeno'] - osoba_edit.prijmeni = fcd['prijmeni'] - osoba_edit.pohlavi_muz = fcd['pohlavi_muz'] - osoba_edit.email = fcd['email'] - osoba_edit.telefon = fcd['telefon'] - osoba_edit.ulice = fcd['ulice'] - osoba_edit.mesto = fcd['mesto'] - osoba_edit.psc = fcd['psc'] - ## Změny v osobě s podmínkami - if fcd.get('spam',False): - osoba_edit.datum_souhlasu_zasilani = date.today() - if fcd.get('stat','') in ('CZ','SK'): - osoba_edit.stat = fcd['stat'] - else: - ## Neznámá země - msg = "Unknown country {}".format(fcd['stat_text']) - - ## Změny v řešiteli - resitel_edit.skola = fcd['skola'] - resitel_edit.rok_maturity = fcd['rok_maturity'] - resitel_edit.zasilat = fcd['zasilat'] - if fcd.get('skola'): - resitel_edit.skola = fcd['skola'] - else: - # Unknown school - log it - msg = "Unknown school {}, {}".format(fcd['skola_nazev'],fcd['skola_adresa']) - resitel_edit.save() - osoba_edit.save() - return HttpResponseRedirect('/thanks/') - else: - ## Stránka před odeslaním formuláře = předvyplněný formulář - return render(request, 'seminar/profil/edit.html', {'form': form}) + err_logger = logging.getLogger('seminar.prihlaska.problem') + ## Načtení objektu Osoba a Resitel, patrici k aktuálně přihlášenému uživately + u = request.user + osoba_edit = Osoba.objects.get(user=u) + resitel_edit = osoba_edit.resitel + user_edit = osoba_edit.user + ## Vytvoření slovníku, kterým předvyplním formulář + prefill_1=model_to_dict(user_edit) + prefill_2=model_to_dict(resitel_edit) + prefill_3=model_to_dict(osoba_edit) + prefill_1.update(prefill_2) + prefill_1.update(prefill_3) + form = ProfileEditForm(initial=prefill_1) + ## Změna údajů a jejich uložení + if request.method == 'POST': + form = ProfileEditForm(request.POST) + if form.is_valid(): + ## Změny v osobě + fcd = form.cleaned_data + osoba_edit.jmeno = fcd['jmeno'] + osoba_edit.prijmeni = fcd['prijmeni'] + osoba_edit.pohlavi_muz = fcd['pohlavi_muz'] + osoba_edit.email = fcd['email'] + osoba_edit.telefon = fcd['telefon'] + osoba_edit.ulice = fcd['ulice'] + osoba_edit.mesto = fcd['mesto'] + osoba_edit.psc = fcd['psc'] + ## Změny v osobě s podmínkami + if fcd.get('spam',False): + osoba_edit.datum_souhlasu_zasilani = date.today() + if fcd.get('stat','') in ('CZ','SK'): + osoba_edit.stat = fcd['stat'] + else: + ## Neznámá země + msg = "Unknown country {}".format(fcd['stat_text']) + + ## Změny v řešiteli + resitel_edit.skola = fcd['skola'] + resitel_edit.rok_maturity = fcd['rok_maturity'] + resitel_edit.zasilat = fcd['zasilat'] + if fcd.get('skola'): + resitel_edit.skola = fcd['skola'] + else: + # Unknown school - log it + msg = "Unknown school {}, {}".format(fcd['skola_nazev'],fcd['skola_adresa']) + resitel_edit.save() + osoba_edit.save() + return HttpResponseRedirect('/thanks/') + else: + ## Stránka před odeslaním formuláře = předvyplněný formulář + return render(request, 'seminar/profil/edit.html', {'form': form}) def prihlaskaView(request): generic_logger = logging.getLogger('seminar.prihlaska') From 80d608eb53c8acc9763b9b90068aa33489326df9 Mon Sep 17 00:00:00 2001 From: Jonas Havelka Date: Thu, 3 Sep 2020 16:07:52 +0200 Subject: [PATCH 124/286] =?UTF-8?q?Fix=20o=C5=A1et=C5=99en=C3=AD=20pr?= =?UTF-8?q?=C3=A1zdn=C3=A9ho=20seznamu=20a=20chybn=C3=A9ho=20logov=C3=A1n?= =?UTF-8?q?=C3=AD=20registrace?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit = pád webu = nemožnost registrace --- seminar/views/views_all.py | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/seminar/views/views_all.py b/seminar/views/views_all.py index 242c4962..0144854a 100644 --- a/seminar/views/views_all.py +++ b/seminar/views/views_all.py @@ -992,6 +992,8 @@ def soustredeniUcastniciExportView(request,soustredeni): def group_by_rocnik(clanky): ''' Vezme zadaný seznam článků a seskupí je podle ročníku. Vrátí seznam seznamů článků ze stejného ročníku.''' + if len(clanky) == 0: + return clanky clanky.order_by('cislo__rocnik__rocnik') skupiny_clanku = [] skupina = [] @@ -1131,7 +1133,7 @@ def logoutView(request): def prihlaska_log_gdpr_safe(logger, gdpr_logger, msg, form_data): - msg = "{}, form_hash:{}".format(msg,hash(form_data)) + msg = "{}, form_hash:{}".format(msg,hash(frozenset(form_data.items))) logger.warn(msg) gdpr_logger.warn(msg+", form:{}".format(form_data)) @@ -1199,8 +1201,8 @@ def prihlaskaView(request): if form.is_valid(): generic_logger.info("Form valid") fcd = form.cleaned_data - form_hash = hash(fcd) - form_logger.info(fcd,form_hash=form_hash) + form_hash = hash(frozenset(fcd.items())) + form_logger.info(fcd,form_hash) # TODO takhle log nefunguje, ale ta předchozí varianta dokonce padala with transaction.atomic(): u = User.objects.create_user( @@ -1230,7 +1232,7 @@ def prihlaskaView(request): else: # Unknown country - log it msg = "Unknown country {}".format(fcd['stat_text']) - err_logger.warn(msg,form_hash=form_hash) + err_logger.warn(msg,form_hash) # TODO viz výše o.save() o.user = u @@ -1248,7 +1250,7 @@ def prihlaskaView(request): else: # Unknown school - log it msg = "Unknown school {}, {}".format(fcd['skola_nazev'],fcd['skola_adresa']) - err_logger.warn(msg,form_hash=form_hash) + err_logger.warn(msg,form_hash) # TODO viz výše r.save() From 6491d63714283df6147d61c0964e24bee67d1159 Mon Sep 17 00:00:00 2001 From: Jonas Havelka Date: Thu, 3 Sep 2020 16:12:50 +0200 Subject: [PATCH 125/286] =?UTF-8?q?Fix=20organiz=C3=A1tor=20musel=20m?= =?UTF-8?q?=C3=ADt=20vypln=C4=9Bn=C3=A9=20organizuje=20od=20/=20do,=20jina?= =?UTF-8?q?k=20vyhazovalo=20chybnou=20chybu?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- seminar/models.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/seminar/models.py b/seminar/models.py index deb0c9b9..79d08eae 100644 --- a/seminar/models.py +++ b/seminar/models.py @@ -582,7 +582,7 @@ class Organizator(SeminarModelBase): "školu, ale jen obor, možnost zobrazit zvlášť") def clean(self): - if self.organizuje_od > self.organizuje_do: + if self.organizuje_od and self.organizuje_do and (self.organizuje_od > self.organizuje_do): raise ValidationError("Organizátor nemůže skončit s organizováním dříve než začal!") super().clean() From f1026c1a0635af3b0dcd3be0d3494afb4a66f298 Mon Sep 17 00:00:00 2001 From: Jonas Havelka Date: Thu, 3 Sep 2020 22:00:54 +0200 Subject: [PATCH 126/286] =?UTF-8?q?Fix=20logu=20v=20p=C5=99ihl=C3=A1=C5=A1?= =?UTF-8?q?ce?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- seminar/views/views_all.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/seminar/views/views_all.py b/seminar/views/views_all.py index 0144854a..e8298b17 100644 --- a/seminar/views/views_all.py +++ b/seminar/views/views_all.py @@ -1202,7 +1202,7 @@ def prihlaskaView(request): generic_logger.info("Form valid") fcd = form.cleaned_data form_hash = hash(frozenset(fcd.items())) - form_logger.info(fcd,form_hash) # TODO takhle log nefunguje, ale ta předchozí varianta dokonce padala + form_logger.info(str(fcd) + str(form_hash)) # TODO možná logovat jinak with transaction.atomic(): u = User.objects.create_user( @@ -1232,7 +1232,7 @@ def prihlaskaView(request): else: # Unknown country - log it msg = "Unknown country {}".format(fcd['stat_text']) - err_logger.warn(msg,form_hash) # TODO viz výše + err_logger.warn(msg + str(form_hash)) o.save() o.user = u @@ -1250,7 +1250,7 @@ def prihlaskaView(request): else: # Unknown school - log it msg = "Unknown school {}, {}".format(fcd['skola_nazev'],fcd['skola_adresa']) - err_logger.warn(msg,form_hash) # TODO viz výše + err_logger.warn(msg + str(form_hash)) r.save() From 90d072ea576e2f98a7c512c01ead5337b3315f49 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kate=C5=99ina=20=C4=8C?= Date: Thu, 3 Sep 2020 22:32:32 +0200 Subject: [PATCH 127/286] =?UTF-8?q?menu=20polo=C5=BEky=20v=20archivu?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sitetree_new.json | 563 +--------------------------------------------- 1 file changed, 1 insertion(+), 562 deletions(-) diff --git a/sitetree_new.json b/sitetree_new.json index e66f9bc7..468d8bcb 100644 --- a/sitetree_new.json +++ b/sitetree_new.json @@ -1,562 +1 @@ -[ -{ - "model": "sitetree.tree", - "pk": 1, - "fields": { - "title": "Hlavn\u00ed menu", - "alias": "main_menu" - } -}, -{ - "model": "sitetree.treeitem", - "pk": 1, - "fields": { - "title": "Co je M&M", - "hint": "", - "url": "/co-je-MaM/uvod/", - "urlaspattern": false, - "tree": 1, - "hidden": false, - "alias": null, - "description": "", - "inmenu": true, - "inbreadcrumbs": true, - "insitetree": true, - "access_loggedin": false, - "access_guest": false, - "access_restricted": false, - "access_perm_type": 1, - "parent": null, - "sort_order": 1, - "access_permissions": [] - } -}, -{ - "model": "sitetree.treeitem", - "pk": 2, - "fields": { - "title": "Jak \u0159e\u0161it", - "hint": "", - "url": "/jak-resit/", - "urlaspattern": false, - "tree": 1, - "hidden": false, - "alias": null, - "description": "", - "inmenu": true, - "inbreadcrumbs": true, - "insitetree": true, - "access_loggedin": false, - "access_guest": false, - "access_restricted": false, - "access_perm_type": 1, - "parent": null, - "sort_order": 2, - "access_permissions": [] - } -}, -{ - "model": "sitetree.treeitem", - "pk": 3, - "fields": { - "title": "Aktu\u00e1ln\u00ed
ro\u010dn\u00edk", - "hint": "", - "url": "/zadani/aktualni/", - "urlaspattern": false, - "tree": 1, - "hidden": false, - "alias": null, - "description": "", - "inmenu": true, - "inbreadcrumbs": true, - "insitetree": true, - "access_loggedin": false, - "access_guest": false, - "access_restricted": false, - "access_perm_type": 1, - "parent": null, - "sort_order": 3, - "access_permissions": [] - } -}, -{ - "model": "sitetree.treeitem", - "pk": 4, - "fields": { - "title": "Soust\u0159ed\u011bn\u00ed", - "hint": "", - "url": "/soustredeni/", - "urlaspattern": false, - "tree": 1, - "hidden": false, - "alias": null, - "description": "", - "inmenu": true, - "inbreadcrumbs": true, - "insitetree": true, - "access_loggedin": false, - "access_guest": false, - "access_restricted": false, - "access_perm_type": 1, - "parent": null, - "sort_order": 4, - "access_permissions": [] - } -}, -{ - "model": "sitetree.treeitem", - "pk": 5, - "fields": { - "title": "Archiv", - "hint": "", - "url": "/archiv/rocniky/", - "urlaspattern": false, - "tree": 1, - "hidden": false, - "alias": null, - "description": "", - "inmenu": true, - "inbreadcrumbs": true, - "insitetree": true, - "access_loggedin": false, - "access_guest": false, - "access_restricted": false, - "access_perm_type": 1, - "parent": null, - "sort_order": 5, - "access_permissions": [] - } -}, -{ - "model": "sitetree.treeitem", - "pk": 6, - "fields": { - "title": "P\u0159ihl\u00e1sit", - "hint": "", - "url": "/login/", - "urlaspattern": false, - "tree": 1, - "hidden": false, - "alias": null, - "description": "", - "inmenu": true, - "inbreadcrumbs": true, - "insitetree": true, - "access_loggedin": false, - "access_guest": true, - "access_restricted": false, - "access_perm_type": 1, - "parent": null, - "sort_order": 6, - "access_permissions": [] - } -}, -{ - "model": "sitetree.treeitem", - "pk": 7, - "fields": { - "title": "\u00davod", - "hint": "", - "url": "/co-je-MaM/uvod/", - "urlaspattern": false, - "tree": 1, - "hidden": false, - "alias": null, - "description": "", - "inmenu": true, - "inbreadcrumbs": true, - "insitetree": true, - "access_loggedin": false, - "access_guest": false, - "access_restricted": false, - "access_perm_type": 1, - "parent": 1, - "sort_order": 7, - "access_permissions": [] - } -}, -{ - "model": "sitetree.treeitem", - "pk": 8, - "fields": { - "title": "Organiz\u00e1to\u0159i", - "hint": "", - "url": "/co-je-MaM/organizatori/", - "urlaspattern": false, - "tree": 1, - "hidden": false, - "alias": null, - "description": "", - "inmenu": true, - "inbreadcrumbs": true, - "insitetree": true, - "access_loggedin": false, - "access_guest": false, - "access_restricted": false, - "access_perm_type": 1, - "parent": 1, - "sort_order": 8, - "access_permissions": [] - } -}, -{ - "model": "sitetree.treeitem", - "pk": 9, - "fields": { - "title": "FAQ", - "hint": "", - "url": "/co-je-MaM/FAQ/", - "urlaspattern": false, - "tree": 1, - "hidden": false, - "alias": null, - "description": "", - "inmenu": true, - "inbreadcrumbs": true, - "insitetree": true, - "access_loggedin": false, - "access_guest": false, - "access_restricted": false, - "access_perm_type": 1, - "parent": 1, - "sort_order": 9, - "access_permissions": [] - } -}, -{ - "model": "sitetree.treeitem", - "pk": 10, - "fields": { - "title": "Kontakt", - "hint": "", - "url": "/co-je-MaM/kontakt/", - "urlaspattern": false, - "tree": 1, - "hidden": false, - "alias": null, - "description": "", - "inmenu": true, - "inbreadcrumbs": true, - "insitetree": true, - "access_loggedin": false, - "access_guest": false, - "access_restricted": false, - "access_perm_type": 1, - "parent": 1, - "sort_order": 10, - "access_permissions": [] - } -}, -{ - "model": "sitetree.treeitem", - "pk": 11, - "fields": { - "title": "T\u00e9mata", - "hint": "", - "url": "/jak-resit/temata/", - "urlaspattern": false, - "tree": 1, - "hidden": false, - "alias": null, - "description": "", - "inmenu": true, - "inbreadcrumbs": true, - "insitetree": true, - "access_loggedin": false, - "access_guest": false, - "access_restricted": false, - "access_perm_type": 1, - "parent": 2, - "sort_order": 11, - "access_permissions": [] - } -}, -{ - "model": "sitetree.treeitem", - "pk": 12, - "fields": { - "title": "Jak ps\u00e1t p\u0159\u00edsp\u011bvek", - "hint": "", - "url": "/jak-resit/jak-psat-prispevek/", - "urlaspattern": false, - "tree": 1, - "hidden": false, - "alias": null, - "description": "", - "inmenu": true, - "inbreadcrumbs": true, - "insitetree": true, - "access_loggedin": false, - "access_guest": false, - "access_restricted": false, - "access_perm_type": 1, - "parent": 2, - "sort_order": 12, - "access_permissions": [] - } -}, -{ - "model": "sitetree.treeitem", - "pk": 13, - "fields": { - "title": "Odm\u011bny", - "hint": "", - "url": "/co-je-MaM/odmeny/", - "urlaspattern": false, - "tree": 1, - "hidden": false, - "alias": null, - "description": "", - "inmenu": true, - "inbreadcrumbs": true, - "insitetree": true, - "access_loggedin": false, - "access_guest": false, - "access_restricted": false, - "access_perm_type": 1, - "parent": 2, - "sort_order": 13, - "access_permissions": [] - } -}, -{ - "model": "sitetree.treeitem", - "pk": 15, - "fields": { - "title": "Aktu\u00e1ln\u00ed t\u00e9mata", - "hint": "", - "url": "/zadani/temata/", - "urlaspattern": false, - "tree": 1, - "hidden": false, - "alias": null, - "description": "", - "inmenu": true, - "inbreadcrumbs": true, - "insitetree": true, - "access_loggedin": false, - "access_guest": false, - "access_restricted": false, - "access_perm_type": 1, - "parent": 3, - "sort_order": 15, - "access_permissions": [] - } -}, -{ - "model": "sitetree.treeitem", - "pk": 16, - "fields": { - "title": "V\u00fdsledkov\u00e1 listina", - "hint": "", - "url": "zadani/vysledkova-listina/", - "urlaspattern": false, - "tree": 1, - "hidden": false, - "alias": null, - "description": "", - "inmenu": true, - "inbreadcrumbs": true, - "insitetree": true, - "access_loggedin": false, - "access_guest": false, - "access_restricted": false, - "access_perm_type": 1, - "parent": 3, - "sort_order": 16, - "access_permissions": [] - } -}, -{ - "model": "sitetree.treeitem", - "pk": 17, - "fields": { - "title": "\u010cl\u00e1nky", - "hint": "", - "url": "/clanky/resitel/", - "urlaspattern": false, - "tree": 1, - "hidden": false, - "alias": null, - "description": "", - "inmenu": true, - "inbreadcrumbs": true, - "insitetree": true, - "access_loggedin": false, - "access_guest": false, - "access_restricted": false, - "access_perm_type": 1, - "parent": 3, - "sort_order": 17, - "access_permissions": [] - } -}, -{ - "model": "sitetree.treeitem", - "pk": 18, - "fields": { - "title": "\u00davod", - "hint": "", - "url": "/soustredeni/uvod/", - "urlaspattern": false, - "tree": 1, - "hidden": false, - "alias": null, - "description": "", - "inmenu": true, - "inbreadcrumbs": true, - "insitetree": true, - "access_loggedin": false, - "access_guest": false, - "access_restricted": false, - "access_perm_type": 1, - "parent": 4, - "sort_order": 18, - "access_permissions": [] - } -}, -{ - "model": "sitetree.treeitem", - "pk": 19, - "fields": { - "title": "P\u0159ipravujeme", - "hint": "", - "url": "/soustredeni/pripravujeme/", - "urlaspattern": false, - "tree": 1, - "hidden": false, - "alias": null, - "description": "", - "inmenu": true, - "inbreadcrumbs": true, - "insitetree": true, - "access_loggedin": false, - "access_guest": false, - "access_restricted": false, - "access_perm_type": 1, - "parent": 4, - "sort_order": 19, - "access_permissions": [] - } -}, -{ - "model": "sitetree.treeitem", - "pk": 20, - "fields": { - "title": "Prob\u011bhlo", - "hint": "", - "url": "/soustredeni/probehlo/", - "urlaspattern": false, - "tree": 1, - "hidden": false, - "alias": null, - "description": "", - "inmenu": true, - "inbreadcrumbs": true, - "insitetree": true, - "access_loggedin": false, - "access_guest": false, - "access_restricted": false, - "access_perm_type": 1, - "parent": 4, - "sort_order": 20, - "access_permissions": [] - } -}, -{ - "model": "sitetree.treeitem", - "pk": 21, - "fields": { - "title": "Profil", - "hint": "", - "url": "/profil/", - "urlaspattern": false, - "tree": 1, - "hidden": false, - "alias": null, - "description": "", - "inmenu": true, - "inbreadcrumbs": true, - "insitetree": true, - "access_loggedin": true, - "access_guest": false, - "access_restricted": false, - "access_perm_type": 1, - "parent": null, - "sort_order": 21, - "access_permissions": [] - } -}, -{ - "model": "sitetree.treeitem", - "pk": 22, - "fields": { - "title": "Osobn\u00ed \u00fadaje", - "hint": "", - "url": "/profil/osobni-udaje", - "urlaspattern": false, - "tree": 1, - "hidden": false, - "alias": null, - "description": "", - "inmenu": true, - "inbreadcrumbs": true, - "insitetree": true, - "access_loggedin": false, - "access_guest": false, - "access_restricted": false, - "access_perm_type": 1, - "parent": 21, - "sort_order": 22, - "access_permissions": [] - } -}, -{ - "model": "sitetree.treeitem", - "pk": 23, - "fields": { - "title": "Poslat \u0159e\u0161en\u00ed", - "hint": "", - "url": "/odeslat-reseni/", - "urlaspattern": false, - "tree": 1, - "hidden": false, - "alias": null, - "description": "", - "inmenu": true, - "inbreadcrumbs": true, - "insitetree": true, - "access_loggedin": false, - "access_guest": false, - "access_restricted": false, - "access_perm_type": 1, - "parent": 21, - "sort_order": 23, - "access_permissions": [] - } -}, -{ - "model": "sitetree.treeitem", - "pk": 24, - "fields": { - "title": "T\u00e9mata", - "hint": "", - "url": "/archiv/temata/", - "urlaspattern": false, - "tree": 1, - "hidden": false, - "alias": null, - "description": "", - "inmenu": true, - "inbreadcrumbs": true, - "insitetree": true, - "access_loggedin": false, - "access_guest": false, - "access_restricted": false, - "access_perm_type": 1, - "parent": 5, - "sort_order": 24, - "access_permissions": [] - } -} -] +[{"model": "sitetree.tree", "pk": 1, "fields": {"title": "Hlavn\u00ed menu", "alias": "main_menu"}}, {"model": "sitetree.treeitem", "pk": 1, "fields": {"title": "Co je M&M", "hint": "", "url": "/co-je-MaM/uvod/", "urlaspattern": false, "tree": 1, "hidden": false, "alias": null, "description": "", "inmenu": true, "inbreadcrumbs": true, "insitetree": true, "access_loggedin": false, "access_guest": false, "access_restricted": false, "access_perm_type": 1, "parent": null, "sort_order": 1, "access_permissions": []}}, {"model": "sitetree.treeitem", "pk": 2, "fields": {"title": "Jak \u0159e\u0161it", "hint": "", "url": "/jak-resit/", "urlaspattern": false, "tree": 1, "hidden": false, "alias": null, "description": "", "inmenu": true, "inbreadcrumbs": true, "insitetree": true, "access_loggedin": false, "access_guest": false, "access_restricted": false, "access_perm_type": 1, "parent": null, "sort_order": 2, "access_permissions": []}}, {"model": "sitetree.treeitem", "pk": 3, "fields": {"title": "Aktu\u00e1ln\u00ed
ro\u010dn\u00edk", "hint": "", "url": "/zadani/aktualni/", "urlaspattern": false, "tree": 1, "hidden": false, "alias": null, "description": "", "inmenu": true, "inbreadcrumbs": true, "insitetree": true, "access_loggedin": false, "access_guest": false, "access_restricted": false, "access_perm_type": 1, "parent": null, "sort_order": 3, "access_permissions": []}}, {"model": "sitetree.treeitem", "pk": 4, "fields": {"title": "Soust\u0159ed\u011bn\u00ed", "hint": "", "url": "/soustredeni/", "urlaspattern": false, "tree": 1, "hidden": false, "alias": null, "description": "", "inmenu": true, "inbreadcrumbs": true, "insitetree": true, "access_loggedin": false, "access_guest": false, "access_restricted": false, "access_perm_type": 1, "parent": null, "sort_order": 4, "access_permissions": []}}, {"model": "sitetree.treeitem", "pk": 5, "fields": {"title": "Archiv", "hint": "", "url": "/archiv/rocniky/", "urlaspattern": false, "tree": 1, "hidden": false, "alias": null, "description": "", "inmenu": true, "inbreadcrumbs": true, "insitetree": true, "access_loggedin": false, "access_guest": false, "access_restricted": false, "access_perm_type": 1, "parent": null, "sort_order": 5, "access_permissions": []}}, {"model": "sitetree.treeitem", "pk": 6, "fields": {"title": "P\u0159ihl\u00e1sit", "hint": "", "url": "/login/", "urlaspattern": false, "tree": 1, "hidden": false, "alias": null, "description": "", "inmenu": true, "inbreadcrumbs": true, "insitetree": true, "access_loggedin": false, "access_guest": true, "access_restricted": false, "access_perm_type": 1, "parent": null, "sort_order": 6, "access_permissions": []}}, {"model": "sitetree.treeitem", "pk": 7, "fields": {"title": "\u00davod", "hint": "", "url": "/co-je-MaM/uvod/", "urlaspattern": false, "tree": 1, "hidden": false, "alias": null, "description": "", "inmenu": true, "inbreadcrumbs": true, "insitetree": true, "access_loggedin": false, "access_guest": false, "access_restricted": false, "access_perm_type": 1, "parent": 1, "sort_order": 7, "access_permissions": []}}, {"model": "sitetree.treeitem", "pk": 8, "fields": {"title": "Organiz\u00e1to\u0159i", "hint": "", "url": "/co-je-MaM/organizatori/", "urlaspattern": false, "tree": 1, "hidden": false, "alias": null, "description": "", "inmenu": true, "inbreadcrumbs": true, "insitetree": true, "access_loggedin": false, "access_guest": false, "access_restricted": false, "access_perm_type": 1, "parent": 1, "sort_order": 8, "access_permissions": []}}, {"model": "sitetree.treeitem", "pk": 9, "fields": {"title": "FAQ", "hint": "", "url": "/co-je-MaM/FAQ/", "urlaspattern": false, "tree": 1, "hidden": false, "alias": null, "description": "", "inmenu": true, "inbreadcrumbs": true, "insitetree": true, "access_loggedin": false, "access_guest": false, "access_restricted": false, "access_perm_type": 1, "parent": 1, "sort_order": 9, "access_permissions": []}}, {"model": "sitetree.treeitem", "pk": 10, "fields": {"title": "Kontakt", "hint": "", "url": "/co-je-MaM/kontakt/", "urlaspattern": false, "tree": 1, "hidden": false, "alias": null, "description": "", "inmenu": true, "inbreadcrumbs": true, "insitetree": true, "access_loggedin": false, "access_guest": false, "access_restricted": false, "access_perm_type": 1, "parent": 1, "sort_order": 10, "access_permissions": []}}, {"model": "sitetree.treeitem", "pk": 11, "fields": {"title": "T\u00e9mata", "hint": "", "url": "/jak-resit/temata/", "urlaspattern": false, "tree": 1, "hidden": false, "alias": null, "description": "", "inmenu": true, "inbreadcrumbs": true, "insitetree": true, "access_loggedin": false, "access_guest": false, "access_restricted": false, "access_perm_type": 1, "parent": 2, "sort_order": 11, "access_permissions": []}}, {"model": "sitetree.treeitem", "pk": 12, "fields": {"title": "Jak ps\u00e1t p\u0159\u00edsp\u011bvek", "hint": "", "url": "/jak-resit/jak-psat-prispevek/", "urlaspattern": false, "tree": 1, "hidden": false, "alias": null, "description": "", "inmenu": true, "inbreadcrumbs": true, "insitetree": true, "access_loggedin": false, "access_guest": false, "access_restricted": false, "access_perm_type": 1, "parent": 2, "sort_order": 12, "access_permissions": []}}, {"model": "sitetree.treeitem", "pk": 13, "fields": {"title": "Odm\u011bny", "hint": "", "url": "/co-je-MaM/odmeny/", "urlaspattern": false, "tree": 1, "hidden": false, "alias": null, "description": "", "inmenu": true, "inbreadcrumbs": true, "insitetree": true, "access_loggedin": false, "access_guest": false, "access_restricted": false, "access_perm_type": 1, "parent": 2, "sort_order": 13, "access_permissions": []}}, {"model": "sitetree.treeitem", "pk": 15, "fields": {"title": "Aktu\u00e1ln\u00ed t\u00e9mata", "hint": "", "url": "/zadani/temata/", "urlaspattern": false, "tree": 1, "hidden": false, "alias": null, "description": "", "inmenu": true, "inbreadcrumbs": true, "insitetree": true, "access_loggedin": false, "access_guest": false, "access_restricted": false, "access_perm_type": 1, "parent": 3, "sort_order": 15, "access_permissions": []}}, {"model": "sitetree.treeitem", "pk": 16, "fields": {"title": "V\u00fdsledkov\u00e1 listina", "hint": "", "url": "zadani/vysledkova-listina/", "urlaspattern": false, "tree": 1, "hidden": false, "alias": null, "description": "", "inmenu": true, "inbreadcrumbs": true, "insitetree": true, "access_loggedin": false, "access_guest": false, "access_restricted": false, "access_perm_type": 1, "parent": 3, "sort_order": 16, "access_permissions": []}}, {"model": "sitetree.treeitem", "pk": 17, "fields": {"title": "\u010cl\u00e1nky", "hint": "", "url": "/clanky/resitel/", "urlaspattern": false, "tree": 1, "hidden": false, "alias": null, "description": "", "inmenu": true, "inbreadcrumbs": true, "insitetree": true, "access_loggedin": false, "access_guest": false, "access_restricted": false, "access_perm_type": 1, "parent": 3, "sort_order": 17, "access_permissions": []}}, {"model": "sitetree.treeitem", "pk": 18, "fields": {"title": "\u00davod", "hint": "", "url": "/soustredeni/uvod/", "urlaspattern": false, "tree": 1, "hidden": false, "alias": null, "description": "", "inmenu": true, "inbreadcrumbs": true, "insitetree": true, "access_loggedin": false, "access_guest": false, "access_restricted": false, "access_perm_type": 1, "parent": 4, "sort_order": 18, "access_permissions": []}}, {"model": "sitetree.treeitem", "pk": 19, "fields": {"title": "P\u0159ipravujeme", "hint": "", "url": "/soustredeni/pripravujeme/", "urlaspattern": false, "tree": 1, "hidden": false, "alias": null, "description": "", "inmenu": true, "inbreadcrumbs": true, "insitetree": true, "access_loggedin": false, "access_guest": false, "access_restricted": false, "access_perm_type": 1, "parent": 4, "sort_order": 19, "access_permissions": []}}, {"model": "sitetree.treeitem", "pk": 20, "fields": {"title": "Prob\u011bhlo", "hint": "", "url": "/soustredeni/probehlo/", "urlaspattern": false, "tree": 1, "hidden": false, "alias": null, "description": "", "inmenu": true, "inbreadcrumbs": true, "insitetree": true, "access_loggedin": false, "access_guest": false, "access_restricted": false, "access_perm_type": 1, "parent": 4, "sort_order": 20, "access_permissions": []}}, {"model": "sitetree.treeitem", "pk": 21, "fields": {"title": "Profil", "hint": "", "url": "/profil/", "urlaspattern": false, "tree": 1, "hidden": false, "alias": null, "description": "", "inmenu": true, "inbreadcrumbs": true, "insitetree": true, "access_loggedin": true, "access_guest": false, "access_restricted": false, "access_perm_type": 1, "parent": null, "sort_order": 21, "access_permissions": []}}, {"model": "sitetree.treeitem", "pk": 22, "fields": {"title": "Osobn\u00ed \u00fadaje", "hint": "", "url": "/profil/osobni-udaje", "urlaspattern": false, "tree": 1, "hidden": false, "alias": null, "description": "", "inmenu": true, "inbreadcrumbs": true, "insitetree": true, "access_loggedin": false, "access_guest": false, "access_restricted": false, "access_perm_type": 1, "parent": 21, "sort_order": 22, "access_permissions": []}}, {"model": "sitetree.treeitem", "pk": 23, "fields": {"title": "Poslat \u0159e\u0161en\u00ed", "hint": "", "url": "/odeslat-reseni/", "urlaspattern": false, "tree": 1, "hidden": false, "alias": null, "description": "", "inmenu": true, "inbreadcrumbs": true, "insitetree": true, "access_loggedin": false, "access_guest": false, "access_restricted": false, "access_perm_type": 1, "parent": 21, "sort_order": 23, "access_permissions": []}}, {"model": "sitetree.treeitem", "pk": 24, "fields": {"title": "T\u00e9mata", "hint": "", "url": "/archiv/temata/", "urlaspattern": false, "tree": 1, "hidden": false, "alias": null, "description": "", "inmenu": true, "inbreadcrumbs": true, "insitetree": true, "access_loggedin": false, "access_guest": false, "access_restricted": false, "access_perm_type": 1, "parent": 5, "sort_order": 25, "access_permissions": []}}, {"model": "sitetree.treeitem", "pk": 25, "fields": {"title": "\u010cl\u00e1nky", "hint": "", "url": "/clanky/resitel/", "urlaspattern": false, "tree": 1, "hidden": false, "alias": null, "description": "", "inmenu": true, "inbreadcrumbs": true, "insitetree": true, "access_loggedin": false, "access_guest": false, "access_restricted": false, "access_perm_type": 1, "parent": 5, "sort_order": 26, "access_permissions": []}}, {"model": "sitetree.treeitem", "pk": 26, "fields": {"title": "\u010c\u00edsla", "hint": "", "url": "/archiv/rocniky", "urlaspattern": false, "tree": 1, "hidden": false, "alias": null, "description": "", "inmenu": true, "inbreadcrumbs": true, "insitetree": true, "access_loggedin": false, "access_guest": false, "access_restricted": false, "access_perm_type": 1, "parent": 5, "sort_order": 24, "access_permissions": []}}] \ No newline at end of file From 403434e10bfbef241a7a70a41733b7b52f60070e Mon Sep 17 00:00:00 2001 From: "Tomas \"Jethro\" Pokorny" Date: Thu, 3 Sep 2020 23:02:28 +0200 Subject: [PATCH 128/286] TreeNode editor a zobrazovac ve Vue --- mamweb/routers.py | 7 + mamweb/settings_common.py | 24 + mamweb/urls.py | 5 + requirements.txt | 3 + seminar/templates/seminar/vuetest.html | 7 + seminar/templatetags/treenodes.py | 3 + seminar/urls.py | 4 + seminar/views/__init__.py | 1 + seminar/views/views_all.py | 72 +- seminar/views/views_rest.py | 89 + seminar/viewsets.py | 7 + vue_frontend/.gitignore | 22 + vue_frontend/babel.config.js | 5 + vue_frontend/package.json | 46 + vue_frontend/src/App.vue | 53 + vue_frontend/src/components/CastNode.vue | 45 + vue_frontend/src/components/CisloNode.vue | 33 + vue_frontend/src/components/RocnikNode.vue | 33 + .../src/components/TemaVCisleNode.vue | 19 + vue_frontend/src/components/TextNode.vue | 88 + vue_frontend/src/components/TreeNode.vue | 84 + .../src/components/UlohaVzorakNode.vue | 15 + .../src/components/UlohaZadaniNode.vue | 15 + vue_frontend/src/main.js | 10 + vue_frontend/vue.config.js | 60 + vue_frontend/yarn.lock | 8305 +++++++++++++++++ 26 files changed, 9054 insertions(+), 1 deletion(-) create mode 100644 mamweb/routers.py create mode 100644 seminar/templates/seminar/vuetest.html create mode 100644 seminar/views/views_rest.py create mode 100644 seminar/viewsets.py create mode 100644 vue_frontend/.gitignore create mode 100644 vue_frontend/babel.config.js create mode 100644 vue_frontend/package.json create mode 100644 vue_frontend/src/App.vue create mode 100644 vue_frontend/src/components/CastNode.vue create mode 100644 vue_frontend/src/components/CisloNode.vue create mode 100644 vue_frontend/src/components/RocnikNode.vue create mode 100644 vue_frontend/src/components/TemaVCisleNode.vue create mode 100644 vue_frontend/src/components/TextNode.vue create mode 100644 vue_frontend/src/components/TreeNode.vue create mode 100644 vue_frontend/src/components/UlohaVzorakNode.vue create mode 100644 vue_frontend/src/components/UlohaZadaniNode.vue create mode 100644 vue_frontend/src/main.js create mode 100644 vue_frontend/vue.config.js create mode 100644 vue_frontend/yarn.lock diff --git a/mamweb/routers.py b/mamweb/routers.py new file mode 100644 index 00000000..cd9907a4 --- /dev/null +++ b/mamweb/routers.py @@ -0,0 +1,7 @@ +from rest_framework import routers +from seminar import viewsets as vs + +router = routers.DefaultRouter() + +router.register(r'ulohavzoraknode', vs.UlohaVzorakNodeViewSet) + diff --git a/mamweb/settings_common.py b/mamweb/settings_common.py index 62cd7fe7..4bee02aa 100644 --- a/mamweb/settings_common.py +++ b/mamweb/settings_common.py @@ -120,6 +120,9 @@ INSTALLED_APPS = ( 'imagekit', 'polymorphic', + + 'webpack_loader', + 'rest_framework', # MaMweb 'mamweb', @@ -183,6 +186,27 @@ CKEDITOR_CONFIGS = { }, } +# Webpack loader +VUE_FRONTEND_DIR = os.path.join(BASE_DIR, 'vue_frontend') + +WEBPACK_LOADER = { + 'DEFAULT': { + 'CACHE': False, + 'BUNDLE_DIR_NAME': 'vue/', # must end with slash + 'STATS_FILE': os.path.join(VUE_FRONTEND_DIR, 'webpack-stats.json'), + 'POLL_INTERVAL': 0.1, + 'TIMEOUT': None, + 'IGNORE': [r'.+\.hot-update.js', r'.+\.map'] + } +} + + +# Dajngo REST Framework + +REST_FRAMEWORK = { + 'DEFAULT_PAGINATION_CLASS': 'rest_framework.pagination.LimitOffsetPagination', + 'PAGE_SIZE': 100 +} # Comments diff --git a/mamweb/urls.py b/mamweb/urls.py index 0c8877a2..2f5aeea9 100644 --- a/mamweb/urls.py +++ b/mamweb/urls.py @@ -6,6 +6,8 @@ from django.views.generic.base import TemplateView from django import views from django.urls import path # As per docs. +from .routers import router + urlpatterns = [ # Admin a nastroje @@ -25,6 +27,9 @@ urlpatterns = [ path('comments_dj/', include('django_comments.urls')), path('comments_fl/', include('fluent_comments.urls')), + # REST API + path('api/', include(router.urls)), + ] # This is only needed when using runserver. diff --git a/requirements.txt b/requirements.txt index 22f8e43c..41917af2 100644 --- a/requirements.txt +++ b/requirements.txt @@ -28,6 +28,9 @@ django-imagekit django-polymorphic django-sitetree django_reverse_admin +django-rest-framework +django-webpack-loader +django-rest-polymorphic # Comments akismet==1.0.1 diff --git a/seminar/templates/seminar/vuetest.html b/seminar/templates/seminar/vuetest.html new file mode 100644 index 00000000..a235921d --- /dev/null +++ b/seminar/templates/seminar/vuetest.html @@ -0,0 +1,7 @@ +{% load render_bundle from webpack_loader %} + +
+ +
+{% render_bundle 'chunk-vendors' %} +{% render_bundle 'vue_app_01' %} diff --git a/seminar/templatetags/treenodes.py b/seminar/templatetags/treenodes.py index f1fae1bf..a3160af4 100644 --- a/seminar/templatetags/treenodes.py +++ b/seminar/templatetags/treenodes.py @@ -17,6 +17,9 @@ def nodeType(value): if isinstance(value,UlohaZadaniNode): return "Zadání úlohy" if isinstance(value,PohadkaNode): return "Pohádka" +### NASLEDUJICI FUNKCE SE POUZIVAJI VE views_all.py V SEKCI PRIPRAVJICI TNLData +### NEMAZAT, PRESUNOUT S TNLDaty NEKAM BOKEM + @register.filter def isRocnik(value): return isinstance(value, m.RocnikNode) diff --git a/seminar/urls.py b/seminar/urls.py index b7633919..efbfb65f 100644 --- a/seminar/urls.py +++ b/seminar/urls.py @@ -26,6 +26,8 @@ urlpatterns = [ path('cislo/./', views.CisloView.as_view(), name='seminar_cislo'), # odkomentované jenom kvůli testování archivu path('problem//', views.ProblemView.as_view(), name='seminar_problem'), path('treenode//', views.TreeNodeView.as_view(), name='seminar_treenode'), + path('treenode//json/', views.TreeNodeJSONView.as_view(), name='seminar_treenode_json'), + path('treenode/text//', views.TextWebView.as_view(), name='seminar_textnode_web'), path('treenode/editor/pridat////', views.TreeNodePridatView.as_view(), name='treenode_pridat'), path('treenode/editor/smazat//', views.TreeNodeSmazatView.as_view(), name='treenode_smazat'), path('treenode/editor/odvesitpryc//', views.TreeNodeOdvesitPrycView.as_view(), name='treenode_odvesitpryc'), @@ -118,6 +120,8 @@ urlpatterns = [ path('temp/add_solution', views.AddSolutionView.as_view(),name='seminar_vloz_reseni'), path('temp/nahraj_reseni', views.NahrajReseniView.as_view(),name='seminar_nahraj_reseni'), + path('temp/vue',views.VueTestView.as_view(),name='vue_test_view'), + path('', views.TitulniStranaView.as_view(), name='titulni_strana'), # Ceka na autocomplete v3 diff --git a/seminar/views/__init__.py b/seminar/views/__init__.py index 976a34fe..222d19bb 100644 --- a/seminar/views/__init__.py +++ b/seminar/views/__init__.py @@ -1,2 +1,3 @@ from .views_all import * from .autocomplete import * +from .views_rest import * diff --git a/seminar/views/views_all.py b/seminar/views/views_all.py index a4448d8a..f769155f 100644 --- a/seminar/views/views_all.py +++ b/seminar/views/views_all.py @@ -15,6 +15,8 @@ from django.contrib.auth import views as auth_views from django.contrib.auth.models import User from django.contrib.auth.mixins import LoginRequiredMixin from django.db import transaction +from django.core import serializers +from django.forms.models import model_to_dict import seminar.models as s import seminar.models as m @@ -23,6 +25,8 @@ from seminar.models import Problem, Cislo, Reseni, Nastaveni, Rocnik, Soustreden from seminar import utils, treelib from seminar.forms import PrihlaskaForm, LoginForm, ProfileEditForm import seminar.forms as f +import seminar.templatetags.treenodes as tnltt +import seminar.views.views_rest as vr from datetime import timedelta, date, datetime from django.utils import timezone @@ -88,21 +92,39 @@ class ObalkovaniView(generic.ListView): class TNLData(object): def __init__(self,anode,parent=None, index=None): self.node = anode + self.sernode = vr.TreeNodeSerializer(anode) self.children = [] self.parent = parent self.tema_in_path = False self.index = index + if parent: self.tema_in_path = parent.tema_in_path if isinstance(anode, m.TemaVCisleNode): self.tema_in_path = True + def add_edit_options(self): + self.deletable = tnltt.deletable(self) + self.editable_siblings = tnltt.editableSiblings(self) + self.editable_children = tnltt.editableChildren(self) + self.text_only_subtree = tnltt.textOnlySubtree(self) + self.can_podvesit_za = tnltt.canPodvesitZa(self) + self.can_podvesit_pred = tnltt.canPodvesitPred(self) + self.appendable_children = tnltt.appendableChildren(self) + if self.parent: + self.appendable_siblings = tnltt.appendableChildren(self.parent) + else: + self.appendable_siblings = [] + + + @classmethod def from_treenode(cls,anode,parent=None,index=None): out = cls(anode,parent,index) for (idx,ch) in enumerate(treelib.all_children(anode)): outitem = cls.from_treenode(ch,out,idx) out.children.append(outitem) + out.add_edit_options() return out @classmethod @@ -113,6 +135,7 @@ class TNLData(object): result.children.append(tnl) tnl.parent = result tnl.index = idx + result.add_edit_options() return result @classmethod @@ -132,6 +155,31 @@ class TNLData(object): for tnl in result: found.append(tnl) return found + + def to_json(self): + #self.node = anode + #self.children = [] + #self.parent = parent + #self.tema_in_path = False + #self.index = index + out = {} + out['node'] = self.sernode.data + out['children'] = [n.to_json() for n in self.children] + out['tema_in_path'] = self.tema_in_path + out['index'] = self.index + out['deletable'] = self.deletable + out['editable_siblings'] = self.editable_siblings + out['editable_children'] = self.editable_children + out['text_only_subtree'] = self.text_only_subtree + out['can_podvesit_za'] = self.can_podvesit_za + out['can_podvesit_pod'] = self.can_podvesit_pred + out['appendable_children'] = self.appendable_children + out['appendable_siblings'] = self.appendable_siblings + + return out + + + def __repr__(self): return("TNL({})".format(self.node)) @@ -144,6 +192,16 @@ class TreeNodeView(generic.DetailView): context['tnldata'] = TNLData.from_treenode(self.object) return context +class TreeNodeJSONView(generic.DetailView): + model = s.TreeNode + + def get(self,request,*args, **kwargs): + self.object = self.get_object() + data = TNLData.from_treenode(self.object).to_json() + return JsonResponse(data) + + + class TreeNodePridatView(generic.View): type_from_str = { 'rocnikNode': m.RocnikNode, @@ -178,7 +236,7 @@ class TreeNodePridatView(generic.View): new_obj.nadpis = request.POST.get('pridat-castNode-{}-{}'.format(node.id,kam)) new_obj.save() elif co == m.ReseniNode: - new_obj = m. + new_obj = m pass elif co == m.UlohaZadaniNode: pass @@ -252,6 +310,15 @@ class SirotcinecView(generic.ListView): def get_queryset(self): return s.TreeNode.objects.not_instance_of(s.RocnikNode).filter(root=None,prev=None,succ=None,father_of_first=None) +# FIXME pouzit Django REST Framework +class TextWebView(generic.DetailView): + model = s.Text + + def get(self,request,*args, **kwargs): + self.object = self.get_object() + return JsonResponse(model_to_dict(self.object,exclude='do_cisla')) + + class ProblemView(generic.DetailView): model = s.Problem # Zkopírujeme template_name od TreeNodeView, protože jsme prakticky jen trošku upravený TreeNodeView @@ -1422,3 +1489,6 @@ class PasswordResetCompleteView(auth_views.PasswordResetCompleteView): class PasswordChangeView(auth_views.PasswordChangeView): #template_name = 'seminar/password_change.html' success_url = reverse_lazy('titulni_strana') + +class VueTestView(generic.TemplateView): + template_name = 'seminar/vuetest.html' diff --git a/seminar/views/views_rest.py b/seminar/views/views_rest.py new file mode 100644 index 00000000..0224383b --- /dev/null +++ b/seminar/views/views_rest.py @@ -0,0 +1,89 @@ +from rest_framework import serializers +from rest_polymorphic.serializers import PolymorphicSerializer + +import seminar.models as m + +DEFAULT_NODE_DEPTH = 2 + +class UlohaVzorakNodeSerializer(serializers.ModelSerializer): + class Meta: + model = m.UlohaVzorakNode + fields = '__all__' + depth = DEFAULT_NODE_DEPTH + +class UlohaZadaniNodeSerializer(serializers.ModelSerializer): + class Meta: + model = m.UlohaZadaniNode + fields = '__all__' + depth = DEFAULT_NODE_DEPTH + +class RocnikNodeSerializer(serializers.ModelSerializer): + class Meta: + model = m.RocnikNode + fields = '__all__' + depth = DEFAULT_NODE_DEPTH + +class CisloNodeSerializer(serializers.ModelSerializer): + class Meta: + model = m.CisloNode + fields = '__all__' + depth = DEFAULT_NODE_DEPTH + +class MezicisloNodeSerializer(serializers.ModelSerializer): + class Meta: + model = m.MezicisloNode + fields = '__all__' + depth = DEFAULT_NODE_DEPTH + +class TemaVCisleNodeSerializer(serializers.ModelSerializer): + class Meta: + model = m.TemaVCisleNode + fields = '__all__' + depth = DEFAULT_NODE_DEPTH + +class OrgTextNodeSerializer(serializers.ModelSerializer): + class Meta: + model = m.OrgTextNode + fields = '__all__' + depth = DEFAULT_NODE_DEPTH + +class PohadkaNodeSerializer(serializers.ModelSerializer): + class Meta: + model = m.PohadkaNode + fields = '__all__' + depth = DEFAULT_NODE_DEPTH + +class TextNodeSerializer(serializers.ModelSerializer): + class Meta: + model = m.TextNode + fields = '__all__' + depth = DEFAULT_NODE_DEPTH + +class CastNodeSerializer(serializers.ModelSerializer): + class Meta: + model = m.CastNode + fields = '__all__' + depth = DEFAULT_NODE_DEPTH + +class ReseniNodeSerializer(serializers.ModelSerializer): + class Meta: + model = m.ReseniNode + fields = '__all__' + depth = DEFAULT_NODE_DEPTH + + +class TreeNodeSerializer(PolymorphicSerializer): + model_serializer_mapping = { + m.RocnikNode: RocnikNodeSerializer, + m.CisloNode: CisloNodeSerializer, + m.MezicisloNode: MezicisloNodeSerializer, + m.TemaVCisleNode: TemaVCisleNodeSerializer, + m.OrgTextNode: OrgTextNodeSerializer, + m.UlohaZadaniNode: UlohaZadaniNodeSerializer, + m.UlohaVzorakNode: UlohaVzorakNodeSerializer, + m.PohadkaNode: PohadkaNodeSerializer, + m.TextNode: TextNodeSerializer, + m.CastNode: CastNodeSerializer, + m.ReseniNode: ReseniNodeSerializer, + + } diff --git a/seminar/viewsets.py b/seminar/viewsets.py new file mode 100644 index 00000000..aab12b7d --- /dev/null +++ b/seminar/viewsets.py @@ -0,0 +1,7 @@ +from rest_framework import viewsets,filters +from . import models as m +from . import views + +class UlohaVzorakNodeViewSet(viewsets.ModelViewSet): + queryset = m.UlohaVzorakNode.objects.all() + serializer_class = views.UlohaVzorakNodeSerializer diff --git a/vue_frontend/.gitignore b/vue_frontend/.gitignore new file mode 100644 index 00000000..11f5d714 --- /dev/null +++ b/vue_frontend/.gitignore @@ -0,0 +1,22 @@ +.DS_Store +node_modules +/dist + +# local env files +.env.local +.env.*.local + +# Log files +npm-debug.log* +yarn-debug.log* +yarn-error.log* +pnpm-debug.log* + +# Editor directories and files +.idea +.vscode +*.suo +*.ntvs* +*.njsproj +*.sln +*.sw? diff --git a/vue_frontend/babel.config.js b/vue_frontend/babel.config.js new file mode 100644 index 00000000..e9558405 --- /dev/null +++ b/vue_frontend/babel.config.js @@ -0,0 +1,5 @@ +module.exports = { + presets: [ + '@vue/cli-plugin-babel/preset' + ] +} diff --git a/vue_frontend/package.json b/vue_frontend/package.json new file mode 100644 index 00000000..a3dd1a86 --- /dev/null +++ b/vue_frontend/package.json @@ -0,0 +1,46 @@ +{ + "name": "vue_frontend", + "version": "0.1.0", + "private": true, + "scripts": { + "serve": "vue-cli-service serve", + "build": "vue-cli-service build", + "lint": "vue-cli-service lint" + }, + "dependencies": { + "@ckeditor/ckeditor5-build-classic": "^22.0.0", + "@ckeditor/ckeditor5-vue": "^1.0.1", + "axios": "^0.19.2", + "core-js": "^3.6.5", + "vue": "^2.6.11" + }, + "devDependencies": { + "@vue/cli-plugin-babel": "~4.4.0", + "@vue/cli-plugin-eslint": "~4.4.0", + "@vue/cli-service": "~4.4.0", + "babel-eslint": "^10.1.0", + "eslint": "^6.7.2", + "eslint-plugin-vue": "^6.2.2", + "vue-template-compiler": "^2.6.11", + "webpack-bundle-tracker": "0.4.3" + }, + "eslintConfig": { + "root": true, + "env": { + "node": true + }, + "extends": [ + "plugin:vue/essential", + "eslint:recommended" + ], + "parserOptions": { + "parser": "babel-eslint" + }, + "rules": {} + }, + "browserslist": [ + "> 1%", + "last 2 versions", + "not dead" + ] +} diff --git a/vue_frontend/src/App.vue b/vue_frontend/src/App.vue new file mode 100644 index 00000000..a4f3aea3 --- /dev/null +++ b/vue_frontend/src/App.vue @@ -0,0 +1,53 @@ + + + + + diff --git a/vue_frontend/src/components/CastNode.vue b/vue_frontend/src/components/CastNode.vue new file mode 100644 index 00000000..1ffff915 --- /dev/null +++ b/vue_frontend/src/components/CastNode.vue @@ -0,0 +1,45 @@ + + + + + + diff --git a/vue_frontend/src/components/CisloNode.vue b/vue_frontend/src/components/CisloNode.vue new file mode 100644 index 00000000..519b100c --- /dev/null +++ b/vue_frontend/src/components/CisloNode.vue @@ -0,0 +1,33 @@ + + + + + + diff --git a/vue_frontend/src/components/RocnikNode.vue b/vue_frontend/src/components/RocnikNode.vue new file mode 100644 index 00000000..4b8ea05c --- /dev/null +++ b/vue_frontend/src/components/RocnikNode.vue @@ -0,0 +1,33 @@ + + + + + + diff --git a/vue_frontend/src/components/TemaVCisleNode.vue b/vue_frontend/src/components/TemaVCisleNode.vue new file mode 100644 index 00000000..0fe00bd0 --- /dev/null +++ b/vue_frontend/src/components/TemaVCisleNode.vue @@ -0,0 +1,19 @@ + + + + + + diff --git a/vue_frontend/src/components/TextNode.vue b/vue_frontend/src/components/TextNode.vue new file mode 100644 index 00000000..47c03278 --- /dev/null +++ b/vue_frontend/src/components/TextNode.vue @@ -0,0 +1,88 @@ + + + + + + diff --git a/vue_frontend/src/components/TreeNode.vue b/vue_frontend/src/components/TreeNode.vue new file mode 100644 index 00000000..4d187b9d --- /dev/null +++ b/vue_frontend/src/components/TreeNode.vue @@ -0,0 +1,84 @@ + + + + + + diff --git a/vue_frontend/src/components/UlohaVzorakNode.vue b/vue_frontend/src/components/UlohaVzorakNode.vue new file mode 100644 index 00000000..dde89654 --- /dev/null +++ b/vue_frontend/src/components/UlohaVzorakNode.vue @@ -0,0 +1,15 @@ + + + diff --git a/vue_frontend/src/components/UlohaZadaniNode.vue b/vue_frontend/src/components/UlohaZadaniNode.vue new file mode 100644 index 00000000..6bf34a27 --- /dev/null +++ b/vue_frontend/src/components/UlohaZadaniNode.vue @@ -0,0 +1,15 @@ + + + diff --git a/vue_frontend/src/main.js b/vue_frontend/src/main.js new file mode 100644 index 00000000..abfcc1e8 --- /dev/null +++ b/vue_frontend/src/main.js @@ -0,0 +1,10 @@ +import Vue from 'vue' +import App from './App.vue' +import CKEditor from '@ckeditor/ckeditor5-vue' + +Vue.config.productionTip = false +Vue.use(CKEditor); + +new Vue({ + render: h => h(App), +}).$mount('#app') diff --git a/vue_frontend/vue.config.js b/vue_frontend/vue.config.js new file mode 100644 index 00000000..d1ae1d2b --- /dev/null +++ b/vue_frontend/vue.config.js @@ -0,0 +1,60 @@ +const BundleTracker = require("webpack-bundle-tracker"); + +const pages = { + 'vue_app_01': { + entry: './src/main.js', + chunks: ['chunk-vendors'] + }, + 'vue_app_02': { + entry: './src/newhampshir.js', + chunks: ['chunk-vendors'] + }, +} + +module.exports = { + pages: pages, + filenameHashing: false, + productionSourceMap: false, + publicPath: process.env.NODE_ENV === 'production' + ? '/static/seminar/vue/' + : 'http://localhost:8080/', + outputDir: '../seminar/static/seminar/vue/', + + chainWebpack: config => { + + config.optimization + .splitChunks({ + cacheGroups: { + vendor: { + test: /[\\/]node_modules[\\/]/, + name: "chunk-vendors", + chunks: "all", + priority: 1 + }, + }, + }); + + Object.keys(pages).forEach(page => { + config.plugins.delete(`html-${page}`); + config.plugins.delete(`preload-${page}`); + config.plugins.delete(`prefetch-${page}`); + }) + + config + .plugin('BundleTracker') + .use(BundleTracker, [{filename: '../vue_frontend/webpack-stats.json'}]); + + config.resolve.alias + .set('__STATIC__', 'static') + + config.devServer + .public('http://localhost:8080') + .host('localhost') + .port(8080) + .hotOnly(true) + .watchOptions({poll: 1000}) + .https(false) + .headers({"Access-Control-Allow-Origin": ["*"]}) + + } +}; diff --git a/vue_frontend/yarn.lock b/vue_frontend/yarn.lock new file mode 100644 index 00000000..9e3b6abf --- /dev/null +++ b/vue_frontend/yarn.lock @@ -0,0 +1,8305 @@ +# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. +# yarn lockfile v1 + + +"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.10.4.tgz#168da1a36e90da68ae8d49c0f1b48c7c6249213a" + integrity sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg== + dependencies: + "@babel/highlight" "^7.10.4" + +"@babel/compat-data@^7.10.4", "@babel/compat-data@^7.11.0": + version "7.11.0" + resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.11.0.tgz#e9f73efe09af1355b723a7f39b11bad637d7c99c" + integrity sha512-TPSvJfv73ng0pfnEOh17bYMPQbI95+nGWc71Ss4vZdRBHTDqmM9Z8ZV4rYz8Ks7sfzc95n30k6ODIq5UGnXcYQ== + dependencies: + browserslist "^4.12.0" + invariant "^2.2.4" + semver "^5.5.0" + +"@babel/core@^7.9.6": + version "7.11.1" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.11.1.tgz#2c55b604e73a40dc21b0e52650b11c65cf276643" + integrity sha512-XqF7F6FWQdKGGWAzGELL+aCO1p+lRY5Tj5/tbT3St1G8NaH70jhhDIKknIZaDans0OQBG5wRAldROLHSt44BgQ== + dependencies: + "@babel/code-frame" "^7.10.4" + "@babel/generator" "^7.11.0" + "@babel/helper-module-transforms" "^7.11.0" + "@babel/helpers" "^7.10.4" + "@babel/parser" "^7.11.1" + "@babel/template" "^7.10.4" + "@babel/traverse" "^7.11.0" + "@babel/types" "^7.11.0" + convert-source-map "^1.7.0" + debug "^4.1.0" + gensync "^1.0.0-beta.1" + json5 "^2.1.2" + lodash "^4.17.19" + resolve "^1.3.2" + semver "^5.4.1" + source-map "^0.5.0" + +"@babel/generator@^7.11.0": + version "7.11.0" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.11.0.tgz#4b90c78d8c12825024568cbe83ee6c9af193585c" + integrity sha512-fEm3Uzw7Mc9Xi//qU20cBKatTfs2aOtKqmvy/Vm7RkJEGFQ4xc9myCfbXxqK//ZS8MR/ciOHw6meGASJuKmDfQ== + dependencies: + "@babel/types" "^7.11.0" + jsesc "^2.5.1" + source-map "^0.5.0" + +"@babel/helper-annotate-as-pure@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.10.4.tgz#5bf0d495a3f757ac3bda48b5bf3b3ba309c72ba3" + integrity sha512-XQlqKQP4vXFB7BN8fEEerrmYvHp3fK/rBkRFz9jaJbzK0B1DSfej9Kc7ZzE8Z/OnId1jpJdNAZ3BFQjWG68rcA== + dependencies: + "@babel/types" "^7.10.4" + +"@babel/helper-builder-binary-assignment-operator-visitor@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.10.4.tgz#bb0b75f31bf98cbf9ff143c1ae578b87274ae1a3" + integrity sha512-L0zGlFrGWZK4PbT8AszSfLTM5sDU1+Az/En9VrdT8/LmEiJt4zXt+Jve9DCAnQcbqDhCI+29y/L93mrDzddCcg== + dependencies: + "@babel/helper-explode-assignable-expression" "^7.10.4" + "@babel/types" "^7.10.4" + +"@babel/helper-compilation-targets@^7.10.4", "@babel/helper-compilation-targets@^7.9.6": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.10.4.tgz#804ae8e3f04376607cc791b9d47d540276332bd2" + integrity sha512-a3rYhlsGV0UHNDvrtOXBg8/OpfV0OKTkxKPzIplS1zpx7CygDcWWxckxZeDd3gzPzC4kUT0A4nVFDK0wGMh4MQ== + dependencies: + "@babel/compat-data" "^7.10.4" + browserslist "^4.12.0" + invariant "^2.2.4" + levenary "^1.1.1" + semver "^5.5.0" + +"@babel/helper-create-class-features-plugin@^7.10.4", "@babel/helper-create-class-features-plugin@^7.10.5": + version "7.10.5" + resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.10.5.tgz#9f61446ba80e8240b0a5c85c6fdac8459d6f259d" + integrity sha512-0nkdeijB7VlZoLT3r/mY3bUkw3T8WG/hNw+FATs/6+pG2039IJWjTYL0VTISqsNHMUTEnwbVnc89WIJX9Qed0A== + dependencies: + "@babel/helper-function-name" "^7.10.4" + "@babel/helper-member-expression-to-functions" "^7.10.5" + "@babel/helper-optimise-call-expression" "^7.10.4" + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/helper-replace-supers" "^7.10.4" + "@babel/helper-split-export-declaration" "^7.10.4" + +"@babel/helper-create-regexp-features-plugin@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.10.4.tgz#fdd60d88524659a0b6959c0579925e425714f3b8" + integrity sha512-2/hu58IEPKeoLF45DBwx3XFqsbCXmkdAay4spVr2x0jYgRxrSNp+ePwvSsy9g6YSaNDcKIQVPXk1Ov8S2edk2g== + dependencies: + "@babel/helper-annotate-as-pure" "^7.10.4" + "@babel/helper-regex" "^7.10.4" + regexpu-core "^4.7.0" + +"@babel/helper-define-map@^7.10.4": + version "7.10.5" + resolved "https://registry.yarnpkg.com/@babel/helper-define-map/-/helper-define-map-7.10.5.tgz#b53c10db78a640800152692b13393147acb9bb30" + integrity sha512-fMw4kgFB720aQFXSVaXr79pjjcW5puTCM16+rECJ/plGS+zByelE8l9nCpV1GibxTnFVmUuYG9U8wYfQHdzOEQ== + dependencies: + "@babel/helper-function-name" "^7.10.4" + "@babel/types" "^7.10.5" + lodash "^4.17.19" + +"@babel/helper-explode-assignable-expression@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.10.4.tgz#40a1cd917bff1288f699a94a75b37a1a2dbd8c7c" + integrity sha512-4K71RyRQNPRrR85sr5QY4X3VwG4wtVoXZB9+L3r1Gp38DhELyHCtovqydRi7c1Ovb17eRGiQ/FD5s8JdU0Uy5A== + dependencies: + "@babel/traverse" "^7.10.4" + "@babel/types" "^7.10.4" + +"@babel/helper-function-name@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.10.4.tgz#d2d3b20c59ad8c47112fa7d2a94bc09d5ef82f1a" + integrity sha512-YdaSyz1n8gY44EmN7x44zBn9zQ1Ry2Y+3GTA+3vH6Mizke1Vw0aWDM66FOYEPw8//qKkmqOckrGgTYa+6sceqQ== + dependencies: + "@babel/helper-get-function-arity" "^7.10.4" + "@babel/template" "^7.10.4" + "@babel/types" "^7.10.4" + +"@babel/helper-get-function-arity@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.10.4.tgz#98c1cbea0e2332f33f9a4661b8ce1505b2c19ba2" + integrity sha512-EkN3YDB+SRDgiIUnNgcmiD361ti+AVbL3f3Henf6dqqUyr5dMsorno0lJWJuLhDhkI5sYEpgj6y9kB8AOU1I2A== + dependencies: + "@babel/types" "^7.10.4" + +"@babel/helper-hoist-variables@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.10.4.tgz#d49b001d1d5a68ca5e6604dda01a6297f7c9381e" + integrity sha512-wljroF5PgCk2juF69kanHVs6vrLwIPNp6DLD+Lrl3hoQ3PpPPikaDRNFA+0t81NOoMt2DL6WW/mdU8k4k6ZzuA== + dependencies: + "@babel/types" "^7.10.4" + +"@babel/helper-member-expression-to-functions@^7.10.4", "@babel/helper-member-expression-to-functions@^7.10.5": + version "7.11.0" + resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.11.0.tgz#ae69c83d84ee82f4b42f96e2a09410935a8f26df" + integrity sha512-JbFlKHFntRV5qKw3YC0CvQnDZ4XMwgzzBbld7Ly4Mj4cbFy3KywcR8NtNctRToMWJOVvLINJv525Gd6wwVEx/Q== + dependencies: + "@babel/types" "^7.11.0" + +"@babel/helper-module-imports@^7.0.0", "@babel/helper-module-imports@^7.10.4", "@babel/helper-module-imports@^7.8.3": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.10.4.tgz#4c5c54be04bd31670a7382797d75b9fa2e5b5620" + integrity sha512-nEQJHqYavI217oD9+s5MUBzk6x1IlvoS9WTPfgG43CbMEeStE0v+r+TucWdx8KFGowPGvyOkDT9+7DHedIDnVw== + dependencies: + "@babel/types" "^7.10.4" + +"@babel/helper-module-transforms@^7.10.4", "@babel/helper-module-transforms@^7.10.5", "@babel/helper-module-transforms@^7.11.0": + version "7.11.0" + resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.11.0.tgz#b16f250229e47211abdd84b34b64737c2ab2d359" + integrity sha512-02EVu8COMuTRO1TAzdMtpBPbe6aQ1w/8fePD2YgQmxZU4gpNWaL9gK3Jp7dxlkUlUCJOTaSeA+Hrm1BRQwqIhg== + dependencies: + "@babel/helper-module-imports" "^7.10.4" + "@babel/helper-replace-supers" "^7.10.4" + "@babel/helper-simple-access" "^7.10.4" + "@babel/helper-split-export-declaration" "^7.11.0" + "@babel/template" "^7.10.4" + "@babel/types" "^7.11.0" + lodash "^4.17.19" + +"@babel/helper-optimise-call-expression@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.10.4.tgz#50dc96413d594f995a77905905b05893cd779673" + integrity sha512-n3UGKY4VXwXThEiKrgRAoVPBMqeoPgHVqiHZOanAJCG9nQUL2pLRQirUzl0ioKclHGpGqRgIOkgcIJaIWLpygg== + dependencies: + "@babel/types" "^7.10.4" + +"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.8.0", "@babel/helper-plugin-utils@^7.8.3": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz#2f75a831269d4f677de49986dff59927533cf375" + integrity sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg== + +"@babel/helper-regex@^7.10.4": + version "7.10.5" + resolved "https://registry.yarnpkg.com/@babel/helper-regex/-/helper-regex-7.10.5.tgz#32dfbb79899073c415557053a19bd055aae50ae0" + integrity sha512-68kdUAzDrljqBrio7DYAEgCoJHxppJOERHOgOrDN7WjOzP0ZQ1LsSDRXcemzVZaLvjaJsJEESb6qt+znNuENDg== + dependencies: + lodash "^4.17.19" + +"@babel/helper-remap-async-to-generator@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.10.4.tgz#fce8bea4e9690bbe923056ded21e54b4e8b68ed5" + integrity sha512-86Lsr6NNw3qTNl+TBcF1oRZMaVzJtbWTyTko+CQL/tvNvcGYEFKbLXDPxtW0HKk3McNOk4KzY55itGWCAGK5tg== + dependencies: + "@babel/helper-annotate-as-pure" "^7.10.4" + "@babel/helper-wrap-function" "^7.10.4" + "@babel/template" "^7.10.4" + "@babel/traverse" "^7.10.4" + "@babel/types" "^7.10.4" + +"@babel/helper-replace-supers@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.10.4.tgz#d585cd9388ea06e6031e4cd44b6713cbead9e6cf" + integrity sha512-sPxZfFXocEymYTdVK1UNmFPBN+Hv5mJkLPsYWwGBxZAxaWfFu+xqp7b6qWD0yjNuNL2VKc6L5M18tOXUP7NU0A== + dependencies: + "@babel/helper-member-expression-to-functions" "^7.10.4" + "@babel/helper-optimise-call-expression" "^7.10.4" + "@babel/traverse" "^7.10.4" + "@babel/types" "^7.10.4" + +"@babel/helper-simple-access@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.10.4.tgz#0f5ccda2945277a2a7a2d3a821e15395edcf3461" + integrity sha512-0fMy72ej/VEvF8ULmX6yb5MtHG4uH4Dbd6I/aHDb/JVg0bbivwt9Wg+h3uMvX+QSFtwr5MeItvazbrc4jtRAXw== + dependencies: + "@babel/template" "^7.10.4" + "@babel/types" "^7.10.4" + +"@babel/helper-skip-transparent-expression-wrappers@^7.11.0": + version "7.11.0" + resolved "https://registry.yarnpkg.com/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.11.0.tgz#eec162f112c2f58d3af0af125e3bb57665146729" + integrity sha512-0XIdiQln4Elglgjbwo9wuJpL/K7AGCY26kmEt0+pRP0TAj4jjyNq1MjoRvikrTVqKcx4Gysxt4cXvVFXP/JO2Q== + dependencies: + "@babel/types" "^7.11.0" + +"@babel/helper-split-export-declaration@^7.10.4", "@babel/helper-split-export-declaration@^7.11.0": + version "7.11.0" + resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.11.0.tgz#f8a491244acf6a676158ac42072911ba83ad099f" + integrity sha512-74Vejvp6mHkGE+m+k5vHY93FX2cAtrw1zXrZXRlG4l410Nm9PxfEiVTn1PjDPV5SnmieiueY4AFg2xqhNFuuZg== + dependencies: + "@babel/types" "^7.11.0" + +"@babel/helper-validator-identifier@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.4.tgz#a78c7a7251e01f616512d31b10adcf52ada5e0d2" + integrity sha512-3U9y+43hz7ZM+rzG24Qe2mufW5KhvFg/NhnNph+i9mgCtdTCtMJuI1TMkrIUiK7Ix4PYlRF9I5dhqaLYA/ADXw== + +"@babel/helper-wrap-function@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.10.4.tgz#8a6f701eab0ff39f765b5a1cfef409990e624b87" + integrity sha512-6py45WvEF0MhiLrdxtRjKjufwLL1/ob2qDJgg5JgNdojBAZSAKnAjkyOCNug6n+OBl4VW76XjvgSFTdaMcW0Ug== + dependencies: + "@babel/helper-function-name" "^7.10.4" + "@babel/template" "^7.10.4" + "@babel/traverse" "^7.10.4" + "@babel/types" "^7.10.4" + +"@babel/helpers@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.10.4.tgz#2abeb0d721aff7c0a97376b9e1f6f65d7a475044" + integrity sha512-L2gX/XeUONeEbI78dXSrJzGdz4GQ+ZTA/aazfUsFaWjSe95kiCuOZ5HsXvkiw3iwF+mFHSRUfJU8t6YavocdXA== + dependencies: + "@babel/template" "^7.10.4" + "@babel/traverse" "^7.10.4" + "@babel/types" "^7.10.4" + +"@babel/highlight@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.10.4.tgz#7d1bdfd65753538fabe6c38596cdb76d9ac60143" + integrity sha512-i6rgnR/YgPEQzZZnbTHHuZdlE8qyoBNalD6F+q4vAFlcMEcqmkoG+mPqJYJCo63qPf74+Y1UZsl3l6f7/RIkmA== + dependencies: + "@babel/helper-validator-identifier" "^7.10.4" + chalk "^2.0.0" + js-tokens "^4.0.0" + +"@babel/parser@^7.10.4", "@babel/parser@^7.11.0", "@babel/parser@^7.11.1", "@babel/parser@^7.7.0": + version "7.11.2" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.11.2.tgz#0882ab8a455df3065ea2dcb4c753b2460a24bead" + integrity sha512-Vuj/+7vLo6l1Vi7uuO+1ngCDNeVmNbTngcJFKCR/oEtz8tKz0CJxZEGmPt9KcIloZhOZ3Zit6xbpXT2MDlS9Vw== + +"@babel/plugin-proposal-async-generator-functions@^7.10.4": + version "7.10.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.10.5.tgz#3491cabf2f7c179ab820606cec27fed15e0e8558" + integrity sha512-cNMCVezQbrRGvXJwm9fu/1sJj9bHdGAgKodZdLqOQIpfoH3raqmRPBM17+lh7CzhiKRRBrGtZL9WcjxSoGYUSg== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/helper-remap-async-to-generator" "^7.10.4" + "@babel/plugin-syntax-async-generators" "^7.8.0" + +"@babel/plugin-proposal-class-properties@^7.10.4", "@babel/plugin-proposal-class-properties@^7.8.3": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.10.4.tgz#a33bf632da390a59c7a8c570045d1115cd778807" + integrity sha512-vhwkEROxzcHGNu2mzUC0OFFNXdZ4M23ib8aRRcJSsW8BZK9pQMD7QB7csl97NBbgGZO7ZyHUyKDnxzOaP4IrCg== + dependencies: + "@babel/helper-create-class-features-plugin" "^7.10.4" + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-proposal-decorators@^7.8.3": + version "7.10.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.10.5.tgz#42898bba478bc4b1ae242a703a953a7ad350ffb4" + integrity sha512-Sc5TAQSZuLzgY0664mMDn24Vw2P8g/VhyLyGPaWiHahhgLqeZvcGeyBZOrJW0oSKIK2mvQ22a1ENXBIQLhrEiQ== + dependencies: + "@babel/helper-create-class-features-plugin" "^7.10.5" + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/plugin-syntax-decorators" "^7.10.4" + +"@babel/plugin-proposal-dynamic-import@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.10.4.tgz#ba57a26cb98b37741e9d5bca1b8b0ddf8291f17e" + integrity sha512-up6oID1LeidOOASNXgv/CFbgBqTuKJ0cJjz6An5tWD+NVBNlp3VNSBxv2ZdU7SYl3NxJC7agAQDApZusV6uFwQ== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/plugin-syntax-dynamic-import" "^7.8.0" + +"@babel/plugin-proposal-export-namespace-from@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.10.4.tgz#570d883b91031637b3e2958eea3c438e62c05f54" + integrity sha512-aNdf0LY6/3WXkhh0Fdb6Zk9j1NMD8ovj3F6r0+3j837Pn1S1PdNtcwJ5EG9WkVPNHPxyJDaxMaAOVq4eki0qbg== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/plugin-syntax-export-namespace-from" "^7.8.3" + +"@babel/plugin-proposal-json-strings@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.10.4.tgz#593e59c63528160233bd321b1aebe0820c2341db" + integrity sha512-fCL7QF0Jo83uy1K0P2YXrfX11tj3lkpN7l4dMv9Y9VkowkhkQDwFHFd8IiwyK5MZjE8UpbgokkgtcReH88Abaw== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/plugin-syntax-json-strings" "^7.8.0" + +"@babel/plugin-proposal-logical-assignment-operators@^7.11.0": + version "7.11.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.11.0.tgz#9f80e482c03083c87125dee10026b58527ea20c8" + integrity sha512-/f8p4z+Auz0Uaf+i8Ekf1iM7wUNLcViFUGiPxKeXvxTSl63B875YPiVdUDdem7hREcI0E0kSpEhS8tF5RphK7Q== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" + +"@babel/plugin-proposal-nullish-coalescing-operator@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.10.4.tgz#02a7e961fc32e6d5b2db0649e01bf80ddee7e04a" + integrity sha512-wq5n1M3ZUlHl9sqT2ok1T2/MTt6AXE0e1Lz4WzWBr95LsAZ5qDXe4KnFuauYyEyLiohvXFMdbsOTMyLZs91Zlw== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.0" + +"@babel/plugin-proposal-numeric-separator@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.10.4.tgz#ce1590ff0a65ad12970a609d78855e9a4c1aef06" + integrity sha512-73/G7QoRoeNkLZFxsoCCvlg4ezE4eM+57PnOqgaPOozd5myfj7p0muD1mRVJvbUWbOzD+q3No2bWbaKy+DJ8DA== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/plugin-syntax-numeric-separator" "^7.10.4" + +"@babel/plugin-proposal-object-rest-spread@^7.11.0": + version "7.11.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.11.0.tgz#bd81f95a1f746760ea43b6c2d3d62b11790ad0af" + integrity sha512-wzch41N4yztwoRw0ak+37wxwJM2oiIiy6huGCoqkvSTA9acYWcPfn9Y4aJqmFFJ70KTJUu29f3DQ43uJ9HXzEA== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/plugin-syntax-object-rest-spread" "^7.8.0" + "@babel/plugin-transform-parameters" "^7.10.4" + +"@babel/plugin-proposal-optional-catch-binding@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.10.4.tgz#31c938309d24a78a49d68fdabffaa863758554dd" + integrity sha512-LflT6nPh+GK2MnFiKDyLiqSqVHkQnVf7hdoAvyTnnKj9xB3docGRsdPuxp6qqqW19ifK3xgc9U5/FwrSaCNX5g== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/plugin-syntax-optional-catch-binding" "^7.8.0" + +"@babel/plugin-proposal-optional-chaining@^7.11.0": + version "7.11.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.11.0.tgz#de5866d0646f6afdaab8a566382fe3a221755076" + integrity sha512-v9fZIu3Y8562RRwhm1BbMRxtqZNFmFA2EG+pT2diuU8PT3H6T/KXoZ54KgYisfOFZHV6PfvAiBIZ9Rcz+/JCxA== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/helper-skip-transparent-expression-wrappers" "^7.11.0" + "@babel/plugin-syntax-optional-chaining" "^7.8.0" + +"@babel/plugin-proposal-private-methods@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.10.4.tgz#b160d972b8fdba5c7d111a145fc8c421fc2a6909" + integrity sha512-wh5GJleuI8k3emgTg5KkJK6kHNsGEr0uBTDBuQUBJwckk9xs1ez79ioheEVVxMLyPscB0LfkbVHslQqIzWV6Bw== + dependencies: + "@babel/helper-create-class-features-plugin" "^7.10.4" + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-proposal-unicode-property-regex@^7.10.4", "@babel/plugin-proposal-unicode-property-regex@^7.4.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.10.4.tgz#4483cda53041ce3413b7fe2f00022665ddfaa75d" + integrity sha512-H+3fOgPnEXFL9zGYtKQe4IDOPKYlZdF1kqFDQRRb8PK4B8af1vAGK04tF5iQAAsui+mHNBQSAtd2/ndEDe9wuA== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.10.4" + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-syntax-async-generators@^7.8.0": + version "7.8.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz#a983fb1aeb2ec3f6ed042a210f640e90e786fe0d" + integrity sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-class-properties@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.10.4.tgz#6644e6a0baa55a61f9e3231f6c9eeb6ee46c124c" + integrity sha512-GCSBF7iUle6rNugfURwNmCGG3Z/2+opxAMLs1nND4bhEG5PuxTIggDBoeYYSujAlLtsupzOHYJQgPS3pivwXIA== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-syntax-decorators@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-decorators/-/plugin-syntax-decorators-7.10.4.tgz#6853085b2c429f9d322d02f5a635018cdeb2360c" + integrity sha512-2NaoC6fAk2VMdhY1eerkfHV+lVYC1u8b+jmRJISqANCJlTxYy19HGdIkkQtix2UtkcPuPu+IlDgrVseZnU03bw== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-syntax-dynamic-import@^7.8.0", "@babel/plugin-syntax-dynamic-import@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz#62bf98b2da3cd21d626154fc96ee5b3cb68eacb3" + integrity sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-export-namespace-from@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz#028964a9ba80dbc094c915c487ad7c4e7a66465a" + integrity sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q== + dependencies: + "@babel/helper-plugin-utils" "^7.8.3" + +"@babel/plugin-syntax-json-strings@^7.8.0": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz#01ca21b668cd8218c9e640cb6dd88c5412b2c96a" + integrity sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-jsx@^7.2.0", "@babel/plugin-syntax-jsx@^7.8.3": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.10.4.tgz#39abaae3cbf710c4373d8429484e6ba21340166c" + integrity sha512-KCg9mio9jwiARCB7WAcQ7Y1q+qicILjoK8LP/VkPkEKaf5dkaZZK1EcTe91a3JJlZ3qy6L5s9X52boEYi8DM9g== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-syntax-logical-assignment-operators@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz#ca91ef46303530448b906652bac2e9fe9941f699" + integrity sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-syntax-nullish-coalescing-operator@^7.8.0": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz#167ed70368886081f74b5c36c65a88c03b66d1a9" + integrity sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-numeric-separator@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz#b9b070b3e33570cd9fd07ba7fa91c0dd37b9af97" + integrity sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-syntax-object-rest-spread@^7.8.0": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz#60e225edcbd98a640332a2e72dd3e66f1af55871" + integrity sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-optional-catch-binding@^7.8.0": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz#6111a265bcfb020eb9efd0fdfd7d26402b9ed6c1" + integrity sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-optional-chaining@^7.8.0": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz#4f69c2ab95167e0180cd5336613f8c5788f7d48a" + integrity sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-top-level-await@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.10.4.tgz#4bbeb8917b54fcf768364e0a81f560e33a3ef57d" + integrity sha512-ni1brg4lXEmWyafKr0ccFWkJG0CeMt4WV1oyeBW6EFObF4oOHclbkj5cARxAPQyAQ2UTuplJyK4nfkXIMMFvsQ== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-transform-arrow-functions@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.10.4.tgz#e22960d77e697c74f41c501d44d73dbf8a6a64cd" + integrity sha512-9J/oD1jV0ZCBcgnoFWFq1vJd4msoKb/TCpGNFyyLt0zABdcvgK3aYikZ8HjzB14c26bc7E3Q1yugpwGy2aTPNA== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-transform-async-to-generator@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.10.4.tgz#41a5017e49eb6f3cda9392a51eef29405b245a37" + integrity sha512-F6nREOan7J5UXTLsDsZG3DXmZSVofr2tGNwfdrVwkDWHfQckbQXnXSPfD7iO+c/2HGqycwyLST3DnZ16n+cBJQ== + dependencies: + "@babel/helper-module-imports" "^7.10.4" + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/helper-remap-async-to-generator" "^7.10.4" + +"@babel/plugin-transform-block-scoped-functions@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.10.4.tgz#1afa595744f75e43a91af73b0d998ecfe4ebc2e8" + integrity sha512-WzXDarQXYYfjaV1szJvN3AD7rZgZzC1JtjJZ8dMHUyiK8mxPRahynp14zzNjU3VkPqPsO38CzxiWO1c9ARZ8JA== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-transform-block-scoping@^7.10.4": + version "7.11.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.11.1.tgz#5b7efe98852bef8d652c0b28144cd93a9e4b5215" + integrity sha512-00dYeDE0EVEHuuM+26+0w/SCL0BH2Qy7LwHuI4Hi4MH5gkC8/AqMN5uWFJIsoXZrAphiMm1iXzBw6L2T+eA0ew== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-transform-classes@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.10.4.tgz#405136af2b3e218bc4a1926228bc917ab1a0adc7" + integrity sha512-2oZ9qLjt161dn1ZE0Ms66xBncQH4In8Sqw1YWgBUZuGVJJS5c0OFZXL6dP2MRHrkU/eKhWg8CzFJhRQl50rQxA== + dependencies: + "@babel/helper-annotate-as-pure" "^7.10.4" + "@babel/helper-define-map" "^7.10.4" + "@babel/helper-function-name" "^7.10.4" + "@babel/helper-optimise-call-expression" "^7.10.4" + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/helper-replace-supers" "^7.10.4" + "@babel/helper-split-export-declaration" "^7.10.4" + globals "^11.1.0" + +"@babel/plugin-transform-computed-properties@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.10.4.tgz#9ded83a816e82ded28d52d4b4ecbdd810cdfc0eb" + integrity sha512-JFwVDXcP/hM/TbyzGq3l/XWGut7p46Z3QvqFMXTfk6/09m7xZHJUN9xHfsv7vqqD4YnfI5ueYdSJtXqqBLyjBw== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-transform-destructuring@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.10.4.tgz#70ddd2b3d1bea83d01509e9bb25ddb3a74fc85e5" + integrity sha512-+WmfvyfsyF603iPa6825mq6Qrb7uLjTOsa3XOFzlYcYDHSS4QmpOWOL0NNBY5qMbvrcf3tq0Cw+v4lxswOBpgA== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-transform-dotall-regex@^7.10.4", "@babel/plugin-transform-dotall-regex@^7.4.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.10.4.tgz#469c2062105c1eb6a040eaf4fac4b488078395ee" + integrity sha512-ZEAVvUTCMlMFAbASYSVQoxIbHm2OkG2MseW6bV2JjIygOjdVv8tuxrCTzj1+Rynh7ODb8GivUy7dzEXzEhuPaA== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.10.4" + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-transform-duplicate-keys@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.10.4.tgz#697e50c9fee14380fe843d1f306b295617431e47" + integrity sha512-GL0/fJnmgMclHiBTTWXNlYjYsA7rDrtsazHG6mglaGSTh0KsrW04qml+Bbz9FL0LcJIRwBWL5ZqlNHKTkU3xAA== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-transform-exponentiation-operator@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.10.4.tgz#5ae338c57f8cf4001bdb35607ae66b92d665af2e" + integrity sha512-S5HgLVgkBcRdyQAHbKj+7KyuWx8C6t5oETmUuwz1pt3WTWJhsUV0WIIXuVvfXMxl/QQyHKlSCNNtaIamG8fysw== + dependencies: + "@babel/helper-builder-binary-assignment-operator-visitor" "^7.10.4" + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-transform-for-of@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.10.4.tgz#c08892e8819d3a5db29031b115af511dbbfebae9" + integrity sha512-ItdQfAzu9AlEqmusA/65TqJ79eRcgGmpPPFvBnGILXZH975G0LNjP1yjHvGgfuCxqrPPueXOPe+FsvxmxKiHHQ== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-transform-function-name@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.10.4.tgz#6a467880e0fc9638514ba369111811ddbe2644b7" + integrity sha512-OcDCq2y5+E0dVD5MagT5X+yTRbcvFjDI2ZVAottGH6tzqjx/LKpgkUepu3hp/u4tZBzxxpNGwLsAvGBvQ2mJzg== + dependencies: + "@babel/helper-function-name" "^7.10.4" + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-transform-literals@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.10.4.tgz#9f42ba0841100a135f22712d0e391c462f571f3c" + integrity sha512-Xd/dFSTEVuUWnyZiMu76/InZxLTYilOSr1UlHV+p115Z/Le2Fi1KXkJUYz0b42DfndostYlPub3m8ZTQlMaiqQ== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-transform-member-expression-literals@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.10.4.tgz#b1ec44fcf195afcb8db2c62cd8e551c881baf8b7" + integrity sha512-0bFOvPyAoTBhtcJLr9VcwZqKmSjFml1iVxvPL0ReomGU53CX53HsM4h2SzckNdkQcHox1bpAqzxBI1Y09LlBSw== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-transform-modules-amd@^7.10.4": + version "7.10.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.10.5.tgz#1b9cddaf05d9e88b3aad339cb3e445c4f020a9b1" + integrity sha512-elm5uruNio7CTLFItVC/rIzKLfQ17+fX7EVz5W0TMgIHFo1zY0Ozzx+lgwhL4plzl8OzVn6Qasx5DeEFyoNiRw== + dependencies: + "@babel/helper-module-transforms" "^7.10.5" + "@babel/helper-plugin-utils" "^7.10.4" + babel-plugin-dynamic-import-node "^2.3.3" + +"@babel/plugin-transform-modules-commonjs@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.10.4.tgz#66667c3eeda1ebf7896d41f1f16b17105a2fbca0" + integrity sha512-Xj7Uq5o80HDLlW64rVfDBhao6OX89HKUmb+9vWYaLXBZOma4gA6tw4Ni1O5qVDoZWUV0fxMYA0aYzOawz0l+1w== + dependencies: + "@babel/helper-module-transforms" "^7.10.4" + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/helper-simple-access" "^7.10.4" + babel-plugin-dynamic-import-node "^2.3.3" + +"@babel/plugin-transform-modules-systemjs@^7.10.4": + version "7.10.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.10.5.tgz#6270099c854066681bae9e05f87e1b9cadbe8c85" + integrity sha512-f4RLO/OL14/FP1AEbcsWMzpbUz6tssRaeQg11RH1BP/XnPpRoVwgeYViMFacnkaw4k4wjRSjn3ip1Uw9TaXuMw== + dependencies: + "@babel/helper-hoist-variables" "^7.10.4" + "@babel/helper-module-transforms" "^7.10.5" + "@babel/helper-plugin-utils" "^7.10.4" + babel-plugin-dynamic-import-node "^2.3.3" + +"@babel/plugin-transform-modules-umd@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.10.4.tgz#9a8481fe81b824654b3a0b65da3df89f3d21839e" + integrity sha512-mohW5q3uAEt8T45YT7Qc5ws6mWgJAaL/8BfWD9Dodo1A3RKWli8wTS+WiQ/knF+tXlPirW/1/MqzzGfCExKECA== + dependencies: + "@babel/helper-module-transforms" "^7.10.4" + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-transform-named-capturing-groups-regex@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.10.4.tgz#78b4d978810b6f3bcf03f9e318f2fc0ed41aecb6" + integrity sha512-V6LuOnD31kTkxQPhKiVYzYC/Jgdq53irJC/xBSmqcNcqFGV+PER4l6rU5SH2Vl7bH9mLDHcc0+l9HUOe4RNGKA== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.10.4" + +"@babel/plugin-transform-new-target@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.10.4.tgz#9097d753cb7b024cb7381a3b2e52e9513a9c6888" + integrity sha512-YXwWUDAH/J6dlfwqlWsztI2Puz1NtUAubXhOPLQ5gjR/qmQ5U96DY4FQO8At33JN4XPBhrjB8I4eMmLROjjLjw== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-transform-object-super@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.10.4.tgz#d7146c4d139433e7a6526f888c667e314a093894" + integrity sha512-5iTw0JkdRdJvr7sY0vHqTpnruUpTea32JHmq/atIWqsnNussbRzjEDyWep8UNztt1B5IusBYg8Irb0bLbiEBCQ== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/helper-replace-supers" "^7.10.4" + +"@babel/plugin-transform-parameters@^7.10.4": + version "7.10.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.10.5.tgz#59d339d58d0b1950435f4043e74e2510005e2c4a" + integrity sha512-xPHwUj5RdFV8l1wuYiu5S9fqWGM2DrYc24TMvUiRrPVm+SM3XeqU9BcokQX/kEUe+p2RBwy+yoiR1w/Blq6ubw== + dependencies: + "@babel/helper-get-function-arity" "^7.10.4" + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-transform-property-literals@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.10.4.tgz#f6fe54b6590352298785b83edd815d214c42e3c0" + integrity sha512-ofsAcKiUxQ8TY4sScgsGeR2vJIsfrzqvFb9GvJ5UdXDzl+MyYCaBj/FGzXuv7qE0aJcjWMILny1epqelnFlz8g== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-transform-regenerator@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.10.4.tgz#2015e59d839074e76838de2159db421966fd8b63" + integrity sha512-3thAHwtor39A7C04XucbMg17RcZ3Qppfxr22wYzZNcVIkPHfpM9J0SO8zuCV6SZa265kxBJSrfKTvDCYqBFXGw== + dependencies: + regenerator-transform "^0.14.2" + +"@babel/plugin-transform-reserved-words@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.10.4.tgz#8f2682bcdcef9ed327e1b0861585d7013f8a54dd" + integrity sha512-hGsw1O6Rew1fkFbDImZIEqA8GoidwTAilwCyWqLBM9f+e/u/sQMQu7uX6dyokfOayRuuVfKOW4O7HvaBWM+JlQ== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-transform-runtime@^7.9.6": + version "7.11.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.11.0.tgz#e27f78eb36f19448636e05c33c90fd9ad9b8bccf" + integrity sha512-LFEsP+t3wkYBlis8w6/kmnd6Kb1dxTd+wGJ8MlxTGzQo//ehtqlVL4S9DNUa53+dtPSQobN2CXx4d81FqC58cw== + dependencies: + "@babel/helper-module-imports" "^7.10.4" + "@babel/helper-plugin-utils" "^7.10.4" + resolve "^1.8.1" + semver "^5.5.1" + +"@babel/plugin-transform-shorthand-properties@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.10.4.tgz#9fd25ec5cdd555bb7f473e5e6ee1c971eede4dd6" + integrity sha512-AC2K/t7o07KeTIxMoHneyX90v3zkm5cjHJEokrPEAGEy3UCp8sLKfnfOIGdZ194fyN4wfX/zZUWT9trJZ0qc+Q== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-transform-spread@^7.11.0": + version "7.11.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.11.0.tgz#fa84d300f5e4f57752fe41a6d1b3c554f13f17cc" + integrity sha512-UwQYGOqIdQJe4aWNyS7noqAnN2VbaczPLiEtln+zPowRNlD+79w3oi2TWfYe0eZgd+gjZCbsydN7lzWysDt+gw== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/helper-skip-transparent-expression-wrappers" "^7.11.0" + +"@babel/plugin-transform-sticky-regex@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.10.4.tgz#8f3889ee8657581130a29d9cc91d7c73b7c4a28d" + integrity sha512-Ddy3QZfIbEV0VYcVtFDCjeE4xwVTJWTmUtorAJkn6u/92Z/nWJNV+mILyqHKrUxXYKA2EoCilgoPePymKL4DvQ== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/helper-regex" "^7.10.4" + +"@babel/plugin-transform-template-literals@^7.10.4": + version "7.10.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.10.5.tgz#78bc5d626a6642db3312d9d0f001f5e7639fde8c" + integrity sha512-V/lnPGIb+KT12OQikDvgSuesRX14ck5FfJXt6+tXhdkJ+Vsd0lDCVtF6jcB4rNClYFzaB2jusZ+lNISDk2mMMw== + dependencies: + "@babel/helper-annotate-as-pure" "^7.10.4" + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-transform-typeof-symbol@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.10.4.tgz#9509f1a7eec31c4edbffe137c16cc33ff0bc5bfc" + integrity sha512-QqNgYwuuW0y0H+kUE/GWSR45t/ccRhe14Fs/4ZRouNNQsyd4o3PG4OtHiIrepbM2WKUBDAXKCAK/Lk4VhzTaGA== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-transform-unicode-escapes@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.10.4.tgz#feae523391c7651ddac115dae0a9d06857892007" + integrity sha512-y5XJ9waMti2J+e7ij20e+aH+fho7Wb7W8rNuu72aKRwCHFqQdhkdU2lo3uZ9tQuboEJcUFayXdARhcxLQ3+6Fg== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-transform-unicode-regex@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.10.4.tgz#e56d71f9282fac6db09c82742055576d5e6d80a8" + integrity sha512-wNfsc4s8N2qnIwpO/WP2ZiSyjfpTamT2C9V9FDH/Ljub9zw6P3SjkXcFmc0RQUt96k2fmIvtla2MMjgTwIAC+A== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.10.4" + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/preset-env@^7.9.6": + version "7.11.0" + resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.11.0.tgz#860ee38f2ce17ad60480c2021ba9689393efb796" + integrity sha512-2u1/k7rG/gTh02dylX2kL3S0IJNF+J6bfDSp4DI2Ma8QN6Y9x9pmAax59fsCk6QUQG0yqH47yJWA+u1I1LccAg== + dependencies: + "@babel/compat-data" "^7.11.0" + "@babel/helper-compilation-targets" "^7.10.4" + "@babel/helper-module-imports" "^7.10.4" + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/plugin-proposal-async-generator-functions" "^7.10.4" + "@babel/plugin-proposal-class-properties" "^7.10.4" + "@babel/plugin-proposal-dynamic-import" "^7.10.4" + "@babel/plugin-proposal-export-namespace-from" "^7.10.4" + "@babel/plugin-proposal-json-strings" "^7.10.4" + "@babel/plugin-proposal-logical-assignment-operators" "^7.11.0" + "@babel/plugin-proposal-nullish-coalescing-operator" "^7.10.4" + "@babel/plugin-proposal-numeric-separator" "^7.10.4" + "@babel/plugin-proposal-object-rest-spread" "^7.11.0" + "@babel/plugin-proposal-optional-catch-binding" "^7.10.4" + "@babel/plugin-proposal-optional-chaining" "^7.11.0" + "@babel/plugin-proposal-private-methods" "^7.10.4" + "@babel/plugin-proposal-unicode-property-regex" "^7.10.4" + "@babel/plugin-syntax-async-generators" "^7.8.0" + "@babel/plugin-syntax-class-properties" "^7.10.4" + "@babel/plugin-syntax-dynamic-import" "^7.8.0" + "@babel/plugin-syntax-export-namespace-from" "^7.8.3" + "@babel/plugin-syntax-json-strings" "^7.8.0" + "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" + "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.0" + "@babel/plugin-syntax-numeric-separator" "^7.10.4" + "@babel/plugin-syntax-object-rest-spread" "^7.8.0" + "@babel/plugin-syntax-optional-catch-binding" "^7.8.0" + "@babel/plugin-syntax-optional-chaining" "^7.8.0" + "@babel/plugin-syntax-top-level-await" "^7.10.4" + "@babel/plugin-transform-arrow-functions" "^7.10.4" + "@babel/plugin-transform-async-to-generator" "^7.10.4" + "@babel/plugin-transform-block-scoped-functions" "^7.10.4" + "@babel/plugin-transform-block-scoping" "^7.10.4" + "@babel/plugin-transform-classes" "^7.10.4" + "@babel/plugin-transform-computed-properties" "^7.10.4" + "@babel/plugin-transform-destructuring" "^7.10.4" + "@babel/plugin-transform-dotall-regex" "^7.10.4" + "@babel/plugin-transform-duplicate-keys" "^7.10.4" + "@babel/plugin-transform-exponentiation-operator" "^7.10.4" + "@babel/plugin-transform-for-of" "^7.10.4" + "@babel/plugin-transform-function-name" "^7.10.4" + "@babel/plugin-transform-literals" "^7.10.4" + "@babel/plugin-transform-member-expression-literals" "^7.10.4" + "@babel/plugin-transform-modules-amd" "^7.10.4" + "@babel/plugin-transform-modules-commonjs" "^7.10.4" + "@babel/plugin-transform-modules-systemjs" "^7.10.4" + "@babel/plugin-transform-modules-umd" "^7.10.4" + "@babel/plugin-transform-named-capturing-groups-regex" "^7.10.4" + "@babel/plugin-transform-new-target" "^7.10.4" + "@babel/plugin-transform-object-super" "^7.10.4" + "@babel/plugin-transform-parameters" "^7.10.4" + "@babel/plugin-transform-property-literals" "^7.10.4" + "@babel/plugin-transform-regenerator" "^7.10.4" + "@babel/plugin-transform-reserved-words" "^7.10.4" + "@babel/plugin-transform-shorthand-properties" "^7.10.4" + "@babel/plugin-transform-spread" "^7.11.0" + "@babel/plugin-transform-sticky-regex" "^7.10.4" + "@babel/plugin-transform-template-literals" "^7.10.4" + "@babel/plugin-transform-typeof-symbol" "^7.10.4" + "@babel/plugin-transform-unicode-escapes" "^7.10.4" + "@babel/plugin-transform-unicode-regex" "^7.10.4" + "@babel/preset-modules" "^0.1.3" + "@babel/types" "^7.11.0" + browserslist "^4.12.0" + core-js-compat "^3.6.2" + invariant "^2.2.2" + levenary "^1.1.1" + semver "^5.5.0" + +"@babel/preset-modules@^0.1.3": + version "0.1.3" + resolved "https://registry.yarnpkg.com/@babel/preset-modules/-/preset-modules-0.1.3.tgz#13242b53b5ef8c883c3cf7dddd55b36ce80fbc72" + integrity sha512-Ra3JXOHBq2xd56xSF7lMKXdjBn3T772Y1Wet3yWnkDly9zHvJki029tAFzvAAK5cf4YV3yoxuP61crYRol6SVg== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + "@babel/plugin-proposal-unicode-property-regex" "^7.4.4" + "@babel/plugin-transform-dotall-regex" "^7.4.4" + "@babel/types" "^7.4.4" + esutils "^2.0.2" + +"@babel/runtime@^7.8.4", "@babel/runtime@^7.9.6": + version "7.11.2" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.11.2.tgz#f549c13c754cc40b87644b9fa9f09a6a95fe0736" + integrity sha512-TeWkU52so0mPtDcaCTxNBI/IHiz0pZgr8VEFqXFtZWpYD08ZB6FaSwVAS8MKRQAP3bYKiVjwysOJgMFY28o6Tw== + dependencies: + regenerator-runtime "^0.13.4" + +"@babel/template@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.10.4.tgz#3251996c4200ebc71d1a8fc405fba940f36ba278" + integrity sha512-ZCjD27cGJFUB6nmCB1Enki3r+L5kJveX9pq1SvAUKoICy6CZ9yD8xO086YXdYhvNjBdnekm4ZnaP5yC8Cs/1tA== + dependencies: + "@babel/code-frame" "^7.10.4" + "@babel/parser" "^7.10.4" + "@babel/types" "^7.10.4" + +"@babel/traverse@^7.10.4", "@babel/traverse@^7.11.0", "@babel/traverse@^7.7.0": + version "7.11.0" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.11.0.tgz#9b996ce1b98f53f7c3e4175115605d56ed07dd24" + integrity sha512-ZB2V+LskoWKNpMq6E5UUCrjtDUh5IOTAyIl0dTjIEoXum/iKWkoIEKIRDnUucO6f+2FzNkE0oD4RLKoPIufDtg== + dependencies: + "@babel/code-frame" "^7.10.4" + "@babel/generator" "^7.11.0" + "@babel/helper-function-name" "^7.10.4" + "@babel/helper-split-export-declaration" "^7.11.0" + "@babel/parser" "^7.11.0" + "@babel/types" "^7.11.0" + debug "^4.1.0" + globals "^11.1.0" + lodash "^4.17.19" + +"@babel/types@^7.10.4", "@babel/types@^7.10.5", "@babel/types@^7.11.0", "@babel/types@^7.4.4", "@babel/types@^7.7.0": + version "7.11.0" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.11.0.tgz#2ae6bf1ba9ae8c3c43824e5861269871b206e90d" + integrity sha512-O53yME4ZZI0jO1EVGtF1ePGl0LHirG4P1ibcD80XyzZcKhcMFeCXmh4Xb1ifGBIV233Qg12x4rBfQgA+tmOukA== + dependencies: + "@babel/helper-validator-identifier" "^7.10.4" + lodash "^4.17.19" + to-fast-properties "^2.0.0" + +"@ckeditor/ckeditor5-build-classic@^22.0.0": + version "22.0.0" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-build-classic/-/ckeditor5-build-classic-22.0.0.tgz#24e4a32a4d68211c58b4ea49e794217bd61bf0b7" + integrity sha512-Vcy7vqSDv1xH6ACi2RW25+wIEEKrzEYb+dpgL/yTfhqv0wlswl4tn1VOfEbzGNrgQCio3djxkF813be29IfmWA== + +"@ckeditor/ckeditor5-vue@^1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-vue/-/ckeditor5-vue-1.0.1.tgz#cddb99609f61b647214b704656c08a15b6a53865" + integrity sha512-4MaQwZ04cWwqYW0732sg2aqx9ILeHIP0LSLKUuLCLR21qYONZPvxY/V/czh1DH99toaL/iwPvEoJtO2ldriPaA== + +"@hapi/address@2.x.x": + version "2.1.4" + resolved "https://registry.yarnpkg.com/@hapi/address/-/address-2.1.4.tgz#5d67ed43f3fd41a69d4b9ff7b56e7c0d1d0a81e5" + integrity sha512-QD1PhQk+s31P1ixsX0H0Suoupp3VMXzIVMSwobR3F3MSUO2YCV0B7xqLcUw/Bh8yuvd3LhpyqLQWTNcRmp6IdQ== + +"@hapi/bourne@1.x.x": + version "1.3.2" + resolved "https://registry.yarnpkg.com/@hapi/bourne/-/bourne-1.3.2.tgz#0a7095adea067243ce3283e1b56b8a8f453b242a" + integrity sha512-1dVNHT76Uu5N3eJNTYcvxee+jzX4Z9lfciqRRHCU27ihbUcYi+iSc2iml5Ke1LXe1SyJCLA0+14Jh4tXJgOppA== + +"@hapi/hoek@8.x.x", "@hapi/hoek@^8.3.0": + version "8.5.1" + resolved "https://registry.yarnpkg.com/@hapi/hoek/-/hoek-8.5.1.tgz#fde96064ca446dec8c55a8c2f130957b070c6e06" + integrity sha512-yN7kbciD87WzLGc5539Tn0sApjyiGHAJgKvG9W8C7O+6c7qmoQMfVs0W4bX17eqz6C78QJqqFrtgdK5EWf6Qow== + +"@hapi/joi@^15.0.1": + version "15.1.1" + resolved "https://registry.yarnpkg.com/@hapi/joi/-/joi-15.1.1.tgz#c675b8a71296f02833f8d6d243b34c57b8ce19d7" + integrity sha512-entf8ZMOK8sc+8YfeOlM8pCfg3b5+WZIKBfUaaJT8UsjAAPjartzxIYm3TIbjvA4u+u++KbcXD38k682nVHDAQ== + dependencies: + "@hapi/address" "2.x.x" + "@hapi/bourne" "1.x.x" + "@hapi/hoek" "8.x.x" + "@hapi/topo" "3.x.x" + +"@hapi/topo@3.x.x": + version "3.1.6" + resolved "https://registry.yarnpkg.com/@hapi/topo/-/topo-3.1.6.tgz#68d935fa3eae7fdd5ab0d7f953f3205d8b2bfc29" + integrity sha512-tAag0jEcjwH+P2quUfipd7liWCNX2F8NvYjQp2wtInsZxnMlypdw0FtAOLxtvvkO+GSRRbmNi8m/5y42PQJYCQ== + dependencies: + "@hapi/hoek" "^8.3.0" + +"@intervolga/optimize-cssnano-plugin@^1.0.5": + version "1.0.6" + resolved "https://registry.yarnpkg.com/@intervolga/optimize-cssnano-plugin/-/optimize-cssnano-plugin-1.0.6.tgz#be7c7846128b88f6a9b1d1261a0ad06eb5c0fdf8" + integrity sha512-zN69TnSr0viRSU6cEDIcuPcP67QcpQ6uHACg58FiN9PDrU6SLyGW3MR4tiISbYxy1kDWAVPwD+XwQTWE5cigAA== + dependencies: + cssnano "^4.0.0" + cssnano-preset-default "^4.0.0" + postcss "^7.0.0" + +"@mrmlnc/readdir-enhanced@^2.2.1": + version "2.2.1" + resolved "https://registry.yarnpkg.com/@mrmlnc/readdir-enhanced/-/readdir-enhanced-2.2.1.tgz#524af240d1a360527b730475ecfa1344aa540dde" + integrity sha512-bPHp6Ji8b41szTOcaP63VlnbbO5Ny6dwAATtY6JTjh5N2OLrb5Qk/Th5cRkRQhkWCt+EJsYrNB0MiL+Gpn6e3g== + dependencies: + call-me-maybe "^1.0.1" + glob-to-regexp "^0.3.0" + +"@nodelib/fs.stat@^1.1.2": + version "1.1.3" + resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-1.1.3.tgz#2b5a3ab3f918cca48a8c754c08168e3f03eba61b" + integrity sha512-shAmDyaQC4H92APFoIaVDHCx5bStIocgvbwQyxPRrbUY20V1EYTbSDchWbuwlMG3V17cprZhA6+78JfB+3DTPw== + +"@soda/friendly-errors-webpack-plugin@^1.7.1": + version "1.7.1" + resolved "https://registry.yarnpkg.com/@soda/friendly-errors-webpack-plugin/-/friendly-errors-webpack-plugin-1.7.1.tgz#706f64bcb4a8b9642b48ae3ace444c70334d615d" + integrity sha512-cWKrGaFX+rfbMrAxVv56DzhPNqOJPZuNIS2HGMELtgGzb+vsMzyig9mml5gZ/hr2BGtSLV+dP2LUEuAL8aG2mQ== + dependencies: + chalk "^1.1.3" + error-stack-parser "^2.0.0" + string-width "^2.0.0" + +"@soda/get-current-script@^1.0.0": + version "1.0.2" + resolved "https://registry.yarnpkg.com/@soda/get-current-script/-/get-current-script-1.0.2.tgz#a53515db25d8038374381b73af20bb4f2e508d87" + integrity sha512-T7VNNlYVM1SgQ+VsMYhnDkcGmWhQdL0bDyGm5TlQ3GBXnJscEClUUOKduWTmm2zCnvNLC1hc3JpuXjs/nFOc5w== + +"@types/color-name@^1.1.1": + version "1.1.1" + resolved "https://registry.yarnpkg.com/@types/color-name/-/color-name-1.1.1.tgz#1c1261bbeaa10a8055bbc5d8ab84b7b2afc846a0" + integrity sha512-rr+OQyAjxze7GgWrSaJwydHStIhHq2lvY3BOC2Mj7KnzI7XK0Uw1TOOdI9lDoajEbSWLiYgoo4f1R51erQfhPQ== + +"@types/glob@^7.1.1": + version "7.1.3" + resolved "https://registry.yarnpkg.com/@types/glob/-/glob-7.1.3.tgz#e6ba80f36b7daad2c685acd9266382e68985c183" + integrity sha512-SEYeGAIQIQX8NN6LDKprLjbrd5dARM5EXsd8GI/A5l0apYI1fGMWgPHSe4ZKL4eozlAyI+doUE9XbYS4xCkQ1w== + dependencies: + "@types/minimatch" "*" + "@types/node" "*" + +"@types/json-schema@^7.0.4": + version "7.0.5" + resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.5.tgz#dcce4430e64b443ba8945f0290fb564ad5bac6dd" + integrity sha512-7+2BITlgjgDhH0vvwZU/HZJVyk+2XUlvxXe8dFMedNX/aMkaOq++rMAFXc0tM7ij15QaWlbdQASBR9dihi+bDQ== + +"@types/minimatch@*": + version "3.0.3" + resolved "https://registry.yarnpkg.com/@types/minimatch/-/minimatch-3.0.3.tgz#3dca0e3f33b200fc7d1139c0cd96c1268cadfd9d" + integrity sha512-tHq6qdbT9U1IRSGf14CL0pUlULksvY9OZ+5eEgl1N7t+OA3tGvNpxJCzuKQlsNgCVwbAs670L1vcVQi8j9HjnA== + +"@types/node@*": + version "14.0.27" + resolved "https://registry.yarnpkg.com/@types/node/-/node-14.0.27.tgz#a151873af5a5e851b51b3b065c9e63390a9e0eb1" + integrity sha512-kVrqXhbclHNHGu9ztnAwSncIgJv/FaxmzXJvGXNdcCpV1b8u1/Mi6z6m0vwy0LzKeXFTPLH0NzwmoJ3fNCIq0g== + +"@types/normalize-package-data@^2.4.0": + version "2.4.0" + resolved "https://registry.yarnpkg.com/@types/normalize-package-data/-/normalize-package-data-2.4.0.tgz#e486d0d97396d79beedd0a6e33f4534ff6b4973e" + integrity sha512-f5j5b/Gf71L+dbqxIpQ4Z2WlmI/mPJ0fOkGGmFgtb6sAu97EPczzbS3/tJKxmcYDj55OX6ssqwDAWOHIYDRDGA== + +"@types/q@^1.5.1": + version "1.5.4" + resolved "https://registry.yarnpkg.com/@types/q/-/q-1.5.4.tgz#15925414e0ad2cd765bfef58842f7e26a7accb24" + integrity sha512-1HcDas8SEj4z1Wc696tH56G8OlRaH/sqZOynNNB+HF0WOeXPaxTtbYzJY2oEfiUxjSKjhCKr+MvR7dCHcEelug== + +"@vue/babel-helper-vue-jsx-merge-props@^1.0.0": + version "1.0.0" + resolved "https://registry.yarnpkg.com/@vue/babel-helper-vue-jsx-merge-props/-/babel-helper-vue-jsx-merge-props-1.0.0.tgz#048fe579958da408fb7a8b2a3ec050b50a661040" + integrity sha512-6tyf5Cqm4m6v7buITuwS+jHzPlIPxbFzEhXR5JGZpbrvOcp1hiQKckd305/3C7C36wFekNTQSxAtgeM0j0yoUw== + +"@vue/babel-plugin-transform-vue-jsx@^1.1.2": + version "1.1.2" + resolved "https://registry.yarnpkg.com/@vue/babel-plugin-transform-vue-jsx/-/babel-plugin-transform-vue-jsx-1.1.2.tgz#c0a3e6efc022e75e4247b448a8fc6b86f03e91c0" + integrity sha512-YfdaoSMvD1nj7+DsrwfTvTnhDXI7bsuh+Y5qWwvQXlD24uLgnsoww3qbiZvWf/EoviZMrvqkqN4CBw0W3BWUTQ== + dependencies: + "@babel/helper-module-imports" "^7.0.0" + "@babel/plugin-syntax-jsx" "^7.2.0" + "@vue/babel-helper-vue-jsx-merge-props" "^1.0.0" + html-tags "^2.0.0" + lodash.kebabcase "^4.1.1" + svg-tags "^1.0.0" + +"@vue/babel-preset-app@^4.4.6": + version "4.4.6" + resolved "https://registry.yarnpkg.com/@vue/babel-preset-app/-/babel-preset-app-4.4.6.tgz#92aef916e83f1abe0a2ed1e9e2cef5b332f958c4" + integrity sha512-urIa6Qk3lKacLvscrzxMNyYlTqKFcPAUo5MohOjv1ISZ9PssHw693WTOrqSC0XksdMLtp/rnLvc6l5G8Muk0lw== + dependencies: + "@babel/core" "^7.9.6" + "@babel/helper-compilation-targets" "^7.9.6" + "@babel/helper-module-imports" "^7.8.3" + "@babel/plugin-proposal-class-properties" "^7.8.3" + "@babel/plugin-proposal-decorators" "^7.8.3" + "@babel/plugin-syntax-dynamic-import" "^7.8.3" + "@babel/plugin-syntax-jsx" "^7.8.3" + "@babel/plugin-transform-runtime" "^7.9.6" + "@babel/preset-env" "^7.9.6" + "@babel/runtime" "^7.9.6" + "@vue/babel-preset-jsx" "^1.1.2" + babel-plugin-dynamic-import-node "^2.3.3" + core-js "^3.6.5" + core-js-compat "^3.6.5" + semver "^6.1.0" + +"@vue/babel-preset-jsx@^1.1.2": + version "1.1.2" + resolved "https://registry.yarnpkg.com/@vue/babel-preset-jsx/-/babel-preset-jsx-1.1.2.tgz#2e169eb4c204ea37ca66c2ea85a880bfc99d4f20" + integrity sha512-zDpVnFpeC9YXmvGIDSsKNdL7qCG2rA3gjywLYHPCKDT10erjxF4U+6ay9X6TW5fl4GsDlJp9bVfAVQAAVzxxvQ== + dependencies: + "@vue/babel-helper-vue-jsx-merge-props" "^1.0.0" + "@vue/babel-plugin-transform-vue-jsx" "^1.1.2" + "@vue/babel-sugar-functional-vue" "^1.1.2" + "@vue/babel-sugar-inject-h" "^1.1.2" + "@vue/babel-sugar-v-model" "^1.1.2" + "@vue/babel-sugar-v-on" "^1.1.2" + +"@vue/babel-sugar-functional-vue@^1.1.2": + version "1.1.2" + resolved "https://registry.yarnpkg.com/@vue/babel-sugar-functional-vue/-/babel-sugar-functional-vue-1.1.2.tgz#f7e24fba09e6f1ee70104560a8808057555f1a9a" + integrity sha512-YhmdJQSVEFF5ETJXzrMpj0nkCXEa39TvVxJTuVjzvP2rgKhdMmQzlJuMv/HpadhZaRVMCCF3AEjjJcK5q/cYzQ== + dependencies: + "@babel/plugin-syntax-jsx" "^7.2.0" + +"@vue/babel-sugar-inject-h@^1.1.2": + version "1.1.2" + resolved "https://registry.yarnpkg.com/@vue/babel-sugar-inject-h/-/babel-sugar-inject-h-1.1.2.tgz#8a5276b6d8e2ed16ffc8078aad94236274e6edf0" + integrity sha512-VRSENdTvD5htpnVp7i7DNuChR5rVMcORdXjvv5HVvpdKHzDZAYiLSD+GhnhxLm3/dMuk8pSzV+k28ECkiN5m8w== + dependencies: + "@babel/plugin-syntax-jsx" "^7.2.0" + +"@vue/babel-sugar-v-model@^1.1.2": + version "1.1.2" + resolved "https://registry.yarnpkg.com/@vue/babel-sugar-v-model/-/babel-sugar-v-model-1.1.2.tgz#1ff6fd1b800223fc9cb1e84dceb5e52d737a8192" + integrity sha512-vLXPvNq8vDtt0u9LqFdpGM9W9IWDmCmCyJXuozlq4F4UYVleXJ2Fa+3JsnTZNJcG+pLjjfnEGHci2339Kj5sGg== + dependencies: + "@babel/plugin-syntax-jsx" "^7.2.0" + "@vue/babel-helper-vue-jsx-merge-props" "^1.0.0" + "@vue/babel-plugin-transform-vue-jsx" "^1.1.2" + camelcase "^5.0.0" + html-tags "^2.0.0" + svg-tags "^1.0.0" + +"@vue/babel-sugar-v-on@^1.1.2": + version "1.1.2" + resolved "https://registry.yarnpkg.com/@vue/babel-sugar-v-on/-/babel-sugar-v-on-1.1.2.tgz#b2ef99b8f2fab09fbead25aad70ef42e1cf5b13b" + integrity sha512-T8ZCwC8Jp2uRtcZ88YwZtZXe7eQrJcfRq0uTFy6ShbwYJyz5qWskRFoVsdTi9o0WEhmQXxhQUewodOSCUPVmsQ== + dependencies: + "@babel/plugin-syntax-jsx" "^7.2.0" + "@vue/babel-plugin-transform-vue-jsx" "^1.1.2" + camelcase "^5.0.0" + +"@vue/cli-overlay@^4.4.6": + version "4.4.6" + resolved "https://registry.yarnpkg.com/@vue/cli-overlay/-/cli-overlay-4.4.6.tgz#58f996066d8c0a0a45ad4b5c6f3f213f9945a9ba" + integrity sha512-fzjg2gWQt+jw5fyLsD9HZNxGNQgZjLDI2s9bLWJwRucdfmncSi9neqA0TZyszGrgcJA4Qu4V5KgV0qwVSBYCaw== + +"@vue/cli-plugin-babel@~4.4.0": + version "4.4.6" + resolved "https://registry.yarnpkg.com/@vue/cli-plugin-babel/-/cli-plugin-babel-4.4.6.tgz#d5d750d4f74900c00836e19c164193650df26f3b" + integrity sha512-9cX9mN+4DIbcqw3rV6UBOA0t5zikIkrBLQloUzsOBOu5Xb7/UoD7inInFj7bnyHUflr5LqbdWJ+etCQcWAIIXA== + dependencies: + "@babel/core" "^7.9.6" + "@vue/babel-preset-app" "^4.4.6" + "@vue/cli-shared-utils" "^4.4.6" + babel-loader "^8.1.0" + cache-loader "^4.1.0" + thread-loader "^2.1.3" + webpack "^4.0.0" + +"@vue/cli-plugin-eslint@~4.4.0": + version "4.4.6" + resolved "https://registry.yarnpkg.com/@vue/cli-plugin-eslint/-/cli-plugin-eslint-4.4.6.tgz#442d62a70dd93e4a549ff9164d2d10f4e97a58f1" + integrity sha512-3a9rVpOKPQsDgAlRkhmBMHboGobivG/47BbQGE66Z8YJxrgF/AWikP3Jy67SmxtszRkyiWfw4aJFRV9r3MzffQ== + dependencies: + "@vue/cli-shared-utils" "^4.4.6" + eslint-loader "^2.2.1" + globby "^9.2.0" + inquirer "^7.1.0" + webpack "^4.0.0" + yorkie "^2.0.0" + +"@vue/cli-plugin-router@^4.4.6": + version "4.4.6" + resolved "https://registry.yarnpkg.com/@vue/cli-plugin-router/-/cli-plugin-router-4.4.6.tgz#db5bb1c92afd2046376e4faa90270d6363d4b9b8" + integrity sha512-TkLdn0ZYo3zgn78Rk8doPlR+4UkGjGW2R1eGEaZEkue/mw2VhUWtTk9cKLZaYrw0eY8Ro/j+OV6mD+scyrairg== + dependencies: + "@vue/cli-shared-utils" "^4.4.6" + +"@vue/cli-plugin-vuex@^4.4.6": + version "4.4.6" + resolved "https://registry.yarnpkg.com/@vue/cli-plugin-vuex/-/cli-plugin-vuex-4.4.6.tgz#44b596f0d5236e0a2ce1aa4757bda5207c230be0" + integrity sha512-Ho0YzUivn8BLPqFoFypntR8CMTEXYYHVr0GdnZW99XL+DbGw75f+tJfnrV9UFHDTfvZt7uewKiXDMlrzQ0l3Ug== + +"@vue/cli-service@~4.4.0": + version "4.4.6" + resolved "https://registry.yarnpkg.com/@vue/cli-service/-/cli-service-4.4.6.tgz#83ca058d081eb145bbc1ae2fe8069d2d9ddf7e18" + integrity sha512-k5OFGh2NnvRymCyq9DfBiNJvECUuun3pl5KMm3557IZyA5E5csv+RHoSW3dX8HHe0zXq18g52VswP1llvR9POw== + dependencies: + "@intervolga/optimize-cssnano-plugin" "^1.0.5" + "@soda/friendly-errors-webpack-plugin" "^1.7.1" + "@soda/get-current-script" "^1.0.0" + "@vue/cli-overlay" "^4.4.6" + "@vue/cli-plugin-router" "^4.4.6" + "@vue/cli-plugin-vuex" "^4.4.6" + "@vue/cli-shared-utils" "^4.4.6" + "@vue/component-compiler-utils" "^3.1.2" + "@vue/preload-webpack-plugin" "^1.1.0" + "@vue/web-component-wrapper" "^1.2.0" + acorn "^7.2.0" + acorn-walk "^7.1.1" + address "^1.1.2" + autoprefixer "^9.8.0" + browserslist "^4.12.0" + cache-loader "^4.1.0" + case-sensitive-paths-webpack-plugin "^2.3.0" + cli-highlight "^2.1.4" + clipboardy "^2.3.0" + cliui "^6.0.0" + copy-webpack-plugin "^5.1.1" + css-loader "^3.5.3" + cssnano "^4.1.10" + debug "^4.1.1" + default-gateway "^5.0.5" + dotenv "^8.2.0" + dotenv-expand "^5.1.0" + file-loader "^4.2.0" + fs-extra "^7.0.1" + globby "^9.2.0" + hash-sum "^2.0.0" + html-webpack-plugin "^3.2.0" + launch-editor-middleware "^2.2.1" + lodash.defaultsdeep "^4.6.1" + lodash.mapvalues "^4.6.0" + lodash.transform "^4.6.0" + mini-css-extract-plugin "^0.9.0" + minimist "^1.2.5" + pnp-webpack-plugin "^1.6.4" + portfinder "^1.0.26" + postcss-loader "^3.0.0" + ssri "^7.1.0" + terser-webpack-plugin "^2.3.6" + thread-loader "^2.1.3" + url-loader "^2.2.0" + vue-loader "^15.9.2" + vue-style-loader "^4.1.2" + webpack "^4.0.0" + webpack-bundle-analyzer "^3.8.0" + webpack-chain "^6.4.0" + webpack-dev-server "^3.11.0" + webpack-merge "^4.2.2" + +"@vue/cli-shared-utils@^4.4.6": + version "4.4.6" + resolved "https://registry.yarnpkg.com/@vue/cli-shared-utils/-/cli-shared-utils-4.4.6.tgz#0ec59880920736c6dd79079ac0b5ceac29fa55e1" + integrity sha512-ba+FZZCjiTSu2otnLjY4qXqASe7ZIQ/QBljk5oRPgqrR0p1NUkDPUcZhqa041aOaSW1yAfSfhOD7Q84nMnWhzQ== + dependencies: + "@hapi/joi" "^15.0.1" + chalk "^2.4.2" + execa "^1.0.0" + launch-editor "^2.2.1" + lru-cache "^5.1.1" + node-ipc "^9.1.1" + open "^6.3.0" + ora "^3.4.0" + read-pkg "^5.1.1" + request "^2.88.2" + semver "^6.1.0" + strip-ansi "^6.0.0" + +"@vue/component-compiler-utils@^3.1.0", "@vue/component-compiler-utils@^3.1.2": + version "3.2.0" + resolved "https://registry.yarnpkg.com/@vue/component-compiler-utils/-/component-compiler-utils-3.2.0.tgz#8f85182ceed28e9b3c75313de669f83166d11e5d" + integrity sha512-lejBLa7xAMsfiZfNp7Kv51zOzifnb29FwdnMLa96z26kXErPFioSf9BMcePVIQ6/Gc6/mC0UrPpxAWIHyae0vw== + dependencies: + consolidate "^0.15.1" + hash-sum "^1.0.2" + lru-cache "^4.1.2" + merge-source-map "^1.1.0" + postcss "^7.0.14" + postcss-selector-parser "^6.0.2" + source-map "~0.6.1" + vue-template-es2015-compiler "^1.9.0" + optionalDependencies: + prettier "^1.18.2" + +"@vue/preload-webpack-plugin@^1.1.0": + version "1.1.2" + resolved "https://registry.yarnpkg.com/@vue/preload-webpack-plugin/-/preload-webpack-plugin-1.1.2.tgz#ceb924b4ecb3b9c43871c7a429a02f8423e621ab" + integrity sha512-LIZMuJk38pk9U9Ur4YzHjlIyMuxPlACdBIHH9/nGYVTsaGKOSnSuELiE8vS9wa+dJpIYspYUOqk+L1Q4pgHQHQ== + +"@vue/web-component-wrapper@^1.2.0": + version "1.2.0" + resolved "https://registry.yarnpkg.com/@vue/web-component-wrapper/-/web-component-wrapper-1.2.0.tgz#bb0e46f1585a7e289b4ee6067dcc5a6ae62f1dd1" + integrity sha512-Xn/+vdm9CjuC9p3Ae+lTClNutrVhsXpzxvoTXXtoys6kVRX9FkueSUAqSWAyZntmVLlR4DosBV4pH8y5Z/HbUw== + +"@webassemblyjs/ast@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/ast/-/ast-1.9.0.tgz#bd850604b4042459a5a41cd7d338cbed695ed964" + integrity sha512-C6wW5L+b7ogSDVqymbkkvuW9kruN//YisMED04xzeBBqjHa2FYnmvOlS6Xj68xWQRgWvI9cIglsjFowH/RJyEA== + dependencies: + "@webassemblyjs/helper-module-context" "1.9.0" + "@webassemblyjs/helper-wasm-bytecode" "1.9.0" + "@webassemblyjs/wast-parser" "1.9.0" + +"@webassemblyjs/floating-point-hex-parser@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.9.0.tgz#3c3d3b271bddfc84deb00f71344438311d52ffb4" + integrity sha512-TG5qcFsS8QB4g4MhrxK5TqfdNe7Ey/7YL/xN+36rRjl/BlGE/NcBvJcqsRgCP6Z92mRE+7N50pRIi8SmKUbcQA== + +"@webassemblyjs/helper-api-error@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-api-error/-/helper-api-error-1.9.0.tgz#203f676e333b96c9da2eeab3ccef33c45928b6a2" + integrity sha512-NcMLjoFMXpsASZFxJ5h2HZRcEhDkvnNFOAKneP5RbKRzaWJN36NC4jqQHKwStIhGXu5mUWlUUk7ygdtrO8lbmw== + +"@webassemblyjs/helper-buffer@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-buffer/-/helper-buffer-1.9.0.tgz#a1442d269c5feb23fcbc9ef759dac3547f29de00" + integrity sha512-qZol43oqhq6yBPx7YM3m9Bv7WMV9Eevj6kMi6InKOuZxhw+q9hOkvq5e/PpKSiLfyetpaBnogSbNCfBwyB00CA== + +"@webassemblyjs/helper-code-frame@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-code-frame/-/helper-code-frame-1.9.0.tgz#647f8892cd2043a82ac0c8c5e75c36f1d9159f27" + integrity sha512-ERCYdJBkD9Vu4vtjUYe8LZruWuNIToYq/ME22igL+2vj2dQ2OOujIZr3MEFvfEaqKoVqpsFKAGsRdBSBjrIvZA== + dependencies: + "@webassemblyjs/wast-printer" "1.9.0" + +"@webassemblyjs/helper-fsm@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-fsm/-/helper-fsm-1.9.0.tgz#c05256b71244214671f4b08ec108ad63b70eddb8" + integrity sha512-OPRowhGbshCb5PxJ8LocpdX9Kl0uB4XsAjl6jH/dWKlk/mzsANvhwbiULsaiqT5GZGT9qinTICdj6PLuM5gslw== + +"@webassemblyjs/helper-module-context@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-module-context/-/helper-module-context-1.9.0.tgz#25d8884b76839871a08a6c6f806c3979ef712f07" + integrity sha512-MJCW8iGC08tMk2enck1aPW+BE5Cw8/7ph/VGZxwyvGbJwjktKkDK7vy7gAmMDx88D7mhDTCNKAW5tED+gZ0W8g== + dependencies: + "@webassemblyjs/ast" "1.9.0" + +"@webassemblyjs/helper-wasm-bytecode@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.9.0.tgz#4fed8beac9b8c14f8c58b70d124d549dd1fe5790" + integrity sha512-R7FStIzyNcd7xKxCZH5lE0Bqy+hGTwS3LJjuv1ZVxd9O7eHCedSdrId/hMOd20I+v8wDXEn+bjfKDLzTepoaUw== + +"@webassemblyjs/helper-wasm-section@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.9.0.tgz#5a4138d5a6292ba18b04c5ae49717e4167965346" + integrity sha512-XnMB8l3ek4tvrKUUku+IVaXNHz2YsJyOOmz+MMkZvh8h1uSJpSen6vYnw3IoQ7WwEuAhL8Efjms1ZWjqh2agvw== + dependencies: + "@webassemblyjs/ast" "1.9.0" + "@webassemblyjs/helper-buffer" "1.9.0" + "@webassemblyjs/helper-wasm-bytecode" "1.9.0" + "@webassemblyjs/wasm-gen" "1.9.0" + +"@webassemblyjs/ieee754@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/ieee754/-/ieee754-1.9.0.tgz#15c7a0fbaae83fb26143bbacf6d6df1702ad39e4" + integrity sha512-dcX8JuYU/gvymzIHc9DgxTzUUTLexWwt8uCTWP3otys596io0L5aW02Gb1RjYpx2+0Jus1h4ZFqjla7umFniTg== + dependencies: + "@xtuc/ieee754" "^1.2.0" + +"@webassemblyjs/leb128@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/leb128/-/leb128-1.9.0.tgz#f19ca0b76a6dc55623a09cffa769e838fa1e1c95" + integrity sha512-ENVzM5VwV1ojs9jam6vPys97B/S65YQtv/aanqnU7D8aSoHFX8GyhGg0CMfyKNIHBuAVjy3tlzd5QMMINa7wpw== + dependencies: + "@xtuc/long" "4.2.2" + +"@webassemblyjs/utf8@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/utf8/-/utf8-1.9.0.tgz#04d33b636f78e6a6813227e82402f7637b6229ab" + integrity sha512-GZbQlWtopBTP0u7cHrEx+73yZKrQoBMpwkGEIqlacljhXCkVM1kMQge/Mf+csMJAjEdSwhOyLAS0AoR3AG5P8w== + +"@webassemblyjs/wasm-edit@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-edit/-/wasm-edit-1.9.0.tgz#3fe6d79d3f0f922183aa86002c42dd256cfee9cf" + integrity sha512-FgHzBm80uwz5M8WKnMTn6j/sVbqilPdQXTWraSjBwFXSYGirpkSWE2R9Qvz9tNiTKQvoKILpCuTjBKzOIm0nxw== + dependencies: + "@webassemblyjs/ast" "1.9.0" + "@webassemblyjs/helper-buffer" "1.9.0" + "@webassemblyjs/helper-wasm-bytecode" "1.9.0" + "@webassemblyjs/helper-wasm-section" "1.9.0" + "@webassemblyjs/wasm-gen" "1.9.0" + "@webassemblyjs/wasm-opt" "1.9.0" + "@webassemblyjs/wasm-parser" "1.9.0" + "@webassemblyjs/wast-printer" "1.9.0" + +"@webassemblyjs/wasm-gen@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-gen/-/wasm-gen-1.9.0.tgz#50bc70ec68ded8e2763b01a1418bf43491a7a49c" + integrity sha512-cPE3o44YzOOHvlsb4+E9qSqjc9Qf9Na1OO/BHFy4OI91XDE14MjFN4lTMezzaIWdPqHnsTodGGNP+iRSYfGkjA== + dependencies: + "@webassemblyjs/ast" "1.9.0" + "@webassemblyjs/helper-wasm-bytecode" "1.9.0" + "@webassemblyjs/ieee754" "1.9.0" + "@webassemblyjs/leb128" "1.9.0" + "@webassemblyjs/utf8" "1.9.0" + +"@webassemblyjs/wasm-opt@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-opt/-/wasm-opt-1.9.0.tgz#2211181e5b31326443cc8112eb9f0b9028721a61" + integrity sha512-Qkjgm6Anhm+OMbIL0iokO7meajkzQD71ioelnfPEj6r4eOFuqm4YC3VBPqXjFyyNwowzbMD+hizmprP/Fwkl2A== + dependencies: + "@webassemblyjs/ast" "1.9.0" + "@webassemblyjs/helper-buffer" "1.9.0" + "@webassemblyjs/wasm-gen" "1.9.0" + "@webassemblyjs/wasm-parser" "1.9.0" + +"@webassemblyjs/wasm-parser@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-parser/-/wasm-parser-1.9.0.tgz#9d48e44826df4a6598294aa6c87469d642fff65e" + integrity sha512-9+wkMowR2AmdSWQzsPEjFU7njh8HTO5MqO8vjwEHuM+AMHioNqSBONRdr0NQQ3dVQrzp0s8lTcYqzUdb7YgELA== + dependencies: + "@webassemblyjs/ast" "1.9.0" + "@webassemblyjs/helper-api-error" "1.9.0" + "@webassemblyjs/helper-wasm-bytecode" "1.9.0" + "@webassemblyjs/ieee754" "1.9.0" + "@webassemblyjs/leb128" "1.9.0" + "@webassemblyjs/utf8" "1.9.0" + +"@webassemblyjs/wast-parser@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wast-parser/-/wast-parser-1.9.0.tgz#3031115d79ac5bd261556cecc3fa90a3ef451914" + integrity sha512-qsqSAP3QQ3LyZjNC/0jBJ/ToSxfYJ8kYyuiGvtn/8MK89VrNEfwj7BPQzJVHi0jGTRK2dGdJ5PRqhtjzoww+bw== + dependencies: + "@webassemblyjs/ast" "1.9.0" + "@webassemblyjs/floating-point-hex-parser" "1.9.0" + "@webassemblyjs/helper-api-error" "1.9.0" + "@webassemblyjs/helper-code-frame" "1.9.0" + "@webassemblyjs/helper-fsm" "1.9.0" + "@xtuc/long" "4.2.2" + +"@webassemblyjs/wast-printer@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wast-printer/-/wast-printer-1.9.0.tgz#4935d54c85fef637b00ce9f52377451d00d47899" + integrity sha512-2J0nE95rHXHyQ24cWjMKJ1tqB/ds8z/cyeOZxJhcb+rW+SQASVjuznUSmdz5GpVJTzU8JkhYut0D3siFDD6wsA== + dependencies: + "@webassemblyjs/ast" "1.9.0" + "@webassemblyjs/wast-parser" "1.9.0" + "@xtuc/long" "4.2.2" + +"@xtuc/ieee754@^1.2.0": + version "1.2.0" + resolved "https://registry.yarnpkg.com/@xtuc/ieee754/-/ieee754-1.2.0.tgz#eef014a3145ae477a1cbc00cd1e552336dceb790" + integrity sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA== + +"@xtuc/long@4.2.2": + version "4.2.2" + resolved "https://registry.yarnpkg.com/@xtuc/long/-/long-4.2.2.tgz#d291c6a4e97989b5c61d9acf396ae4fe133a718d" + integrity sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ== + +accepts@~1.3.4, accepts@~1.3.5, accepts@~1.3.7: + version "1.3.7" + resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.7.tgz#531bc726517a3b2b41f850021c6cc15eaab507cd" + integrity sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA== + dependencies: + mime-types "~2.1.24" + negotiator "0.6.2" + +acorn-jsx@^5.2.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.2.0.tgz#4c66069173d6fdd68ed85239fc256226182b2ebe" + integrity sha512-HiUX/+K2YpkpJ+SzBffkM/AQ2YE03S0U1kjTLVpoJdhZMOWy8qvXVN9JdLqv2QsaQ6MPYQIuNmwD8zOiYUofLQ== + +acorn-walk@^7.1.1: + version "7.2.0" + resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-7.2.0.tgz#0de889a601203909b0fbe07b8938dc21d2e967bc" + integrity sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA== + +acorn@^6.4.1: + version "6.4.1" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-6.4.1.tgz#531e58ba3f51b9dacb9a6646ca4debf5b14ca474" + integrity sha512-ZVA9k326Nwrj3Cj9jlh3wGFutC2ZornPNARZwsNYqQYgN0EsV2d53w5RN/co65Ohn4sUAUtb1rSUAOD6XN9idA== + +acorn@^7.1.1, acorn@^7.2.0: + version "7.4.0" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.4.0.tgz#e1ad486e6c54501634c6c397c5c121daa383607c" + integrity sha512-+G7P8jJmCHr+S+cLfQxygbWhXy+8YTVGzAkpEbcLo2mLoL7tij/VG41QSHACSf5QgYRhMZYHuNc6drJaO0Da+w== + +address@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/address/-/address-1.1.2.tgz#bf1116c9c758c51b7a933d296b72c221ed9428b6" + integrity sha512-aT6camzM4xEA54YVJYSqxz1kv4IHnQZRtThJJHhUMRExaU5spC7jX5ugSwTaTgJliIgs4VhZOk7htClvQ/LmRA== + +aggregate-error@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/aggregate-error/-/aggregate-error-3.0.1.tgz#db2fe7246e536f40d9b5442a39e117d7dd6a24e0" + integrity sha512-quoaXsZ9/BLNae5yiNoUz+Nhkwz83GhWwtYFglcjEQB2NDHCIpApbqXxIFnm4Pq/Nvhrsq5sYJFyohrrxnTGAA== + dependencies: + clean-stack "^2.0.0" + indent-string "^4.0.0" + +ajv-errors@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/ajv-errors/-/ajv-errors-1.0.1.tgz#f35986aceb91afadec4102fbd85014950cefa64d" + integrity sha512-DCRfO/4nQ+89p/RK43i8Ezd41EqdGIU4ld7nGF8OQ14oc/we5rEntLCUa7+jrn3nn83BosfwZA0wb4pon2o8iQ== + +ajv-keywords@^3.1.0, ajv-keywords@^3.4.1: + version "3.5.2" + resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-3.5.2.tgz#31f29da5ab6e00d1c2d329acf7b5929614d5014d" + integrity sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ== + +ajv@^6.1.0, ajv@^6.10.0, ajv@^6.10.2, ajv@^6.12.2, ajv@^6.12.3: + version "6.12.3" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.3.tgz#18c5af38a111ddeb4f2697bd78d68abc1cabd706" + integrity sha512-4K0cK3L1hsqk9xIb2z9vs/XU+PGJZ9PNpJRDS9YLzmNdX6jmVPfamLvTJr0aDAusnHyCHO6MjzlkAsgtqp9teA== + dependencies: + fast-deep-equal "^3.1.1" + fast-json-stable-stringify "^2.0.0" + json-schema-traverse "^0.4.1" + uri-js "^4.2.2" + +alphanum-sort@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/alphanum-sort/-/alphanum-sort-1.0.2.tgz#97a1119649b211ad33691d9f9f486a8ec9fbe0a3" + integrity sha1-l6ERlkmyEa0zaR2fn0hqjsn74KM= + +ansi-colors@^3.0.0: + version "3.2.4" + resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-3.2.4.tgz#e3a3da4bfbae6c86a9c285625de124a234026fbf" + integrity sha512-hHUXGagefjN2iRrID63xckIvotOXOojhQKWIPUZ4mNUZ9nLZW+7FMNoE1lOkEhNWYsx/7ysGIuJYCiMAA9FnrA== + +ansi-escapes@^4.2.1: + version "4.3.1" + resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-4.3.1.tgz#a5c47cc43181f1f38ffd7076837700d395522a61" + integrity sha512-JWF7ocqNrp8u9oqpgV+wH5ftbt+cfvv+PTjOvKLT3AdYly/LmORARfEVT1iyjwN+4MqE5UmVKoAdIBqeoCHgLA== + dependencies: + type-fest "^0.11.0" + +ansi-html@0.0.7: + version "0.0.7" + resolved "https://registry.yarnpkg.com/ansi-html/-/ansi-html-0.0.7.tgz#813584021962a9e9e6fd039f940d12f56ca7859e" + integrity sha1-gTWEAhliqenm/QOflA0S9WynhZ4= + +ansi-regex@^2.0.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" + integrity sha1-w7M6te42DYbg5ijwRorn7yfWVN8= + +ansi-regex@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-3.0.0.tgz#ed0317c322064f79466c02966bddb605ab37d998" + integrity sha1-7QMXwyIGT3lGbAKWa922Bas32Zg= + +ansi-regex@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-4.1.0.tgz#8b9f8f08cf1acb843756a839ca8c7e3168c51997" + integrity sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg== + +ansi-regex@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.0.tgz#388539f55179bf39339c81af30a654d69f87cb75" + integrity sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg== + +ansi-styles@^2.2.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe" + integrity sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4= + +ansi-styles@^3.2.0, ansi-styles@^3.2.1: + version "3.2.1" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" + integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== + dependencies: + color-convert "^1.9.0" + +ansi-styles@^4.0.0, ansi-styles@^4.1.0: + version "4.2.1" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.2.1.tgz#90ae75c424d008d2624c5bf29ead3177ebfcf359" + integrity sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA== + dependencies: + "@types/color-name" "^1.1.1" + color-convert "^2.0.1" + +any-promise@^1.0.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/any-promise/-/any-promise-1.3.0.tgz#abc6afeedcea52e809cdc0376aed3ce39635d17f" + integrity sha1-q8av7tzqUugJzcA3au0845Y10X8= + +anymatch@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-2.0.0.tgz#bcb24b4f37934d9aa7ac17b4adaf89e7c76ef2eb" + integrity sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw== + dependencies: + micromatch "^3.1.4" + normalize-path "^2.1.1" + +anymatch@~3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.1.tgz#c55ecf02185e2469259399310c173ce31233b142" + integrity sha512-mM8522psRCqzV+6LhomX5wgp25YVibjh8Wj23I5RPkPppSVSjyKD2A2mBJmWGa+KN7f2D6LNh9jkBCeyLktzjg== + dependencies: + normalize-path "^3.0.0" + picomatch "^2.0.4" + +aproba@^1.1.1: + version "1.2.0" + resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.2.0.tgz#6802e6264efd18c790a1b0d517f0f2627bf2c94a" + integrity sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw== + +arch@^2.1.1: + version "2.1.2" + resolved "https://registry.yarnpkg.com/arch/-/arch-2.1.2.tgz#0c52bbe7344bb4fa260c443d2cbad9c00ff2f0bf" + integrity sha512-NTBIIbAfkJeIletyABbVtdPgeKfDafR+1mZV/AyyfC1UkVkp9iUjV+wwmqtUgphHYajbI86jejBJp5e+jkGTiQ== + +argparse@^1.0.7: + version "1.0.10" + resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" + integrity sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg== + dependencies: + sprintf-js "~1.0.2" + +arr-diff@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-4.0.0.tgz#d6461074febfec71e7e15235761a329a5dc7c520" + integrity sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA= + +arr-flatten@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/arr-flatten/-/arr-flatten-1.1.0.tgz#36048bbff4e7b47e136644316c99669ea5ae91f1" + integrity sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg== + +arr-union@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/arr-union/-/arr-union-3.1.0.tgz#e39b09aea9def866a8f206e288af63919bae39c4" + integrity sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ= + +array-flatten@1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-1.1.1.tgz#9a5f699051b1e7073328f2a008968b64ea2955d2" + integrity sha1-ml9pkFGx5wczKPKgCJaLZOopVdI= + +array-flatten@^2.1.0: + version "2.1.2" + resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-2.1.2.tgz#24ef80a28c1a893617e2149b0c6d0d788293b099" + integrity sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ== + +array-union@^1.0.1, array-union@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/array-union/-/array-union-1.0.2.tgz#9a34410e4f4e3da23dea375be5be70f24778ec39" + integrity sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk= + dependencies: + array-uniq "^1.0.1" + +array-uniq@^1.0.1: + version "1.0.3" + resolved "https://registry.yarnpkg.com/array-uniq/-/array-uniq-1.0.3.tgz#af6ac877a25cc7f74e058894753858dfdb24fdb6" + integrity sha1-r2rId6Jcx/dOBYiUdThY39sk/bY= + +array-unique@^0.3.2: + version "0.3.2" + resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.3.2.tgz#a894b75d4bc4f6cd679ef3244a9fd8f46ae2d428" + integrity sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg= + +asn1.js@^4.0.0: + version "4.10.1" + resolved "https://registry.yarnpkg.com/asn1.js/-/asn1.js-4.10.1.tgz#b9c2bf5805f1e64aadeed6df3a2bfafb5a73f5a0" + integrity sha512-p32cOF5q0Zqs9uBiONKYLm6BClCoBCM5O9JfeUSlnQLBTxYdTK+pW+nXflm8UkKd2UYlEbYz5qEi0JuZR9ckSw== + dependencies: + bn.js "^4.0.0" + inherits "^2.0.1" + minimalistic-assert "^1.0.0" + +asn1@~0.2.3: + version "0.2.4" + resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.4.tgz#8d2475dfab553bb33e77b54e59e880bb8ce23136" + integrity sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg== + dependencies: + safer-buffer "~2.1.0" + +assert-plus@1.0.0, assert-plus@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525" + integrity sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU= + +assert@^1.1.1: + version "1.5.0" + resolved "https://registry.yarnpkg.com/assert/-/assert-1.5.0.tgz#55c109aaf6e0aefdb3dc4b71240c70bf574b18eb" + integrity sha512-EDsgawzwoun2CZkCgtxJbv392v4nbk9XDD06zI+kQYoBM/3RBWLlEyJARDOmhAAosBjWACEkKL6S+lIZtcAubA== + dependencies: + object-assign "^4.1.1" + util "0.10.3" + +assign-symbols@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/assign-symbols/-/assign-symbols-1.0.0.tgz#59667f41fadd4f20ccbc2bb96b8d4f7f78ec0367" + integrity sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c= + +astral-regex@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-1.0.0.tgz#6c8c3fb827dd43ee3918f27b82782ab7658a6fd9" + integrity sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg== + +async-each@^1.0.1: + version "1.0.3" + resolved "https://registry.yarnpkg.com/async-each/-/async-each-1.0.3.tgz#b727dbf87d7651602f06f4d4ac387f47d91b0cbf" + integrity sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ== + +async-limiter@~1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/async-limiter/-/async-limiter-1.0.1.tgz#dd379e94f0db8310b08291f9d64c3209766617fd" + integrity sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ== + +async@^2.6.2: + version "2.6.3" + resolved "https://registry.yarnpkg.com/async/-/async-2.6.3.tgz#d72625e2344a3656e3a3ad4fa749fa83299d82ff" + integrity sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg== + dependencies: + lodash "^4.17.14" + +asynckit@^0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" + integrity sha1-x57Zf380y48robyXkLzDZkdLS3k= + +atob@^2.1.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/atob/-/atob-2.1.2.tgz#6d9517eb9e030d2436666651e86bd9f6f13533c9" + integrity sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg== + +autoprefixer@^9.8.0: + version "9.8.6" + resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-9.8.6.tgz#3b73594ca1bf9266320c5acf1588d74dea74210f" + integrity sha512-XrvP4VVHdRBCdX1S3WXVD8+RyG9qeb1D5Sn1DeLiG2xfSpzellk5k54xbUERJ3M5DggQxes39UGOTP8CFrEGbg== + dependencies: + browserslist "^4.12.0" + caniuse-lite "^1.0.30001109" + colorette "^1.2.1" + normalize-range "^0.1.2" + num2fraction "^1.2.2" + postcss "^7.0.32" + postcss-value-parser "^4.1.0" + +aws-sign2@~0.7.0: + version "0.7.0" + resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.7.0.tgz#b46e890934a9591f2d2f6f86d7e6a9f1b3fe76a8" + integrity sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg= + +aws4@^1.8.0: + version "1.10.0" + resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.10.0.tgz#a17b3a8ea811060e74d47d306122400ad4497ae2" + integrity sha512-3YDiu347mtVtjpyV3u5kVqQLP242c06zwDOgpeRnybmXlYYsLbtTrUBUm8i8srONt+FWobl5aibnU1030PeeuA== + +axios@^0.19.2: + version "0.19.2" + resolved "https://registry.yarnpkg.com/axios/-/axios-0.19.2.tgz#3ea36c5d8818d0d5f8a8a97a6d36b86cdc00cb27" + integrity sha512-fjgm5MvRHLhx+osE2xoekY70AhARk3a6hkN+3Io1jc00jtquGvxYlKlsFUhmUET0V5te6CcZI7lcv2Ym61mjHA== + dependencies: + follow-redirects "1.5.10" + +babel-eslint@^10.1.0: + version "10.1.0" + resolved "https://registry.yarnpkg.com/babel-eslint/-/babel-eslint-10.1.0.tgz#6968e568a910b78fb3779cdd8b6ac2f479943232" + integrity sha512-ifWaTHQ0ce+448CYop8AdrQiBsGrnC+bMgfyKFdi6EsPLTAWG+QfyDeM6OH+FmWnKvEq5NnBMLvlBUPKQZoDSg== + dependencies: + "@babel/code-frame" "^7.0.0" + "@babel/parser" "^7.7.0" + "@babel/traverse" "^7.7.0" + "@babel/types" "^7.7.0" + eslint-visitor-keys "^1.0.0" + resolve "^1.12.0" + +babel-loader@^8.1.0: + version "8.1.0" + resolved "https://registry.yarnpkg.com/babel-loader/-/babel-loader-8.1.0.tgz#c611d5112bd5209abe8b9fa84c3e4da25275f1c3" + integrity sha512-7q7nC1tYOrqvUrN3LQK4GwSk/TQorZSOlO9C+RZDZpODgyN4ZlCqE5q9cDsyWOliN+aU9B4JX01xK9eJXowJLw== + dependencies: + find-cache-dir "^2.1.0" + loader-utils "^1.4.0" + mkdirp "^0.5.3" + pify "^4.0.1" + schema-utils "^2.6.5" + +babel-plugin-dynamic-import-node@^2.3.3: + version "2.3.3" + resolved "https://registry.yarnpkg.com/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz#84fda19c976ec5c6defef57f9427b3def66e17a3" + integrity sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ== + dependencies: + object.assign "^4.1.0" + +balanced-match@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" + integrity sha1-ibTRmasr7kneFk6gK4nORi1xt2c= + +base64-js@^1.0.2: + version "1.3.1" + resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.3.1.tgz#58ece8cb75dd07e71ed08c736abc5fac4dbf8df1" + integrity sha512-mLQ4i2QO1ytvGWFWmcngKO//JXAQueZvwEKtjgQFM4jIK0kU+ytMfplL8j+n5mspOfjHwoAg+9yhb7BwAHm36g== + +base@^0.11.1: + version "0.11.2" + resolved "https://registry.yarnpkg.com/base/-/base-0.11.2.tgz#7bde5ced145b6d551a90db87f83c558b4eb48a8f" + integrity sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg== + dependencies: + cache-base "^1.0.1" + class-utils "^0.3.5" + component-emitter "^1.2.1" + define-property "^1.0.0" + isobject "^3.0.1" + mixin-deep "^1.2.0" + pascalcase "^0.1.1" + +batch@0.6.1: + version "0.6.1" + resolved "https://registry.yarnpkg.com/batch/-/batch-0.6.1.tgz#dc34314f4e679318093fc760272525f94bf25c16" + integrity sha1-3DQxT05nkxgJP8dgJyUl+UvyXBY= + +bcrypt-pbkdf@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz#a4301d389b6a43f9b67ff3ca11a3f6637e360e9e" + integrity sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4= + dependencies: + tweetnacl "^0.14.3" + +bfj@^6.1.1: + version "6.1.2" + resolved "https://registry.yarnpkg.com/bfj/-/bfj-6.1.2.tgz#325c861a822bcb358a41c78a33b8e6e2086dde7f" + integrity sha512-BmBJa4Lip6BPRINSZ0BPEIfB1wUY/9rwbwvIHQA1KjX9om29B6id0wnWXq7m3bn5JrUVjeOTnVuhPT1FiHwPGw== + dependencies: + bluebird "^3.5.5" + check-types "^8.0.3" + hoopy "^0.1.4" + tryer "^1.0.1" + +big.js@^3.1.3: + version "3.2.0" + resolved "https://registry.yarnpkg.com/big.js/-/big.js-3.2.0.tgz#a5fc298b81b9e0dca2e458824784b65c52ba588e" + integrity sha512-+hN/Zh2D08Mx65pZ/4g5bsmNiZUuChDiQfTUQ7qJr4/kuopCr88xZsAXv6mBoZEsUI4OuGHlX59qE94K2mMW8Q== + +big.js@^5.2.2: + version "5.2.2" + resolved "https://registry.yarnpkg.com/big.js/-/big.js-5.2.2.tgz#65f0af382f578bcdc742bd9c281e9cb2d7768328" + integrity sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ== + +binary-extensions@^1.0.0: + version "1.13.1" + resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-1.13.1.tgz#598afe54755b2868a5330d2aff9d4ebb53209b65" + integrity sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw== + +binary-extensions@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.1.0.tgz#30fa40c9e7fe07dbc895678cd287024dea241dd9" + integrity sha512-1Yj8h9Q+QDF5FzhMs/c9+6UntbD5MkRfRwac8DoEm9ZfUBZ7tZ55YcGVAzEe4bXsdQHEk+s9S5wsOKVdZrw0tQ== + +bindings@^1.5.0: + version "1.5.0" + resolved "https://registry.yarnpkg.com/bindings/-/bindings-1.5.0.tgz#10353c9e945334bc0511a6d90b38fbc7c9c504df" + integrity sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ== + dependencies: + file-uri-to-path "1.0.0" + +bluebird@^3.1.1, bluebird@^3.5.5: + version "3.7.2" + resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.7.2.tgz#9f229c15be272454ffa973ace0dbee79a1b0c36f" + integrity sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg== + +bn.js@^4.0.0, bn.js@^4.1.0, bn.js@^4.4.0: + version "4.11.9" + resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.11.9.tgz#26d556829458f9d1e81fc48952493d0ba3507828" + integrity sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw== + +bn.js@^5.1.1: + version "5.1.2" + resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-5.1.2.tgz#c9686902d3c9a27729f43ab10f9d79c2004da7b0" + integrity sha512-40rZaf3bUNKTVYu9sIeeEGOg7g14Yvnj9kH7b50EiwX0Q7A6umbvfI5tvHaOERH0XigqKkfLkFQxzb4e6CIXnA== + +body-parser@1.19.0: + version "1.19.0" + resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.19.0.tgz#96b2709e57c9c4e09a6fd66a8fd979844f69f08a" + integrity sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw== + dependencies: + bytes "3.1.0" + content-type "~1.0.4" + debug "2.6.9" + depd "~1.1.2" + http-errors "1.7.2" + iconv-lite "0.4.24" + on-finished "~2.3.0" + qs "6.7.0" + raw-body "2.4.0" + type-is "~1.6.17" + +bonjour@^3.5.0: + version "3.5.0" + resolved "https://registry.yarnpkg.com/bonjour/-/bonjour-3.5.0.tgz#8e890a183d8ee9a2393b3844c691a42bcf7bc9f5" + integrity sha1-jokKGD2O6aI5OzhExpGkK897yfU= + dependencies: + array-flatten "^2.1.0" + deep-equal "^1.0.1" + dns-equal "^1.0.0" + dns-txt "^2.0.2" + multicast-dns "^6.0.1" + multicast-dns-service-types "^1.1.0" + +boolbase@^1.0.0, boolbase@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/boolbase/-/boolbase-1.0.0.tgz#68dff5fbe60c51eb37725ea9e3ed310dcc1e776e" + integrity sha1-aN/1++YMUes3cl6p4+0xDcwed24= + +brace-expansion@^1.1.7: + version "1.1.11" + resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" + integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== + dependencies: + balanced-match "^1.0.0" + concat-map "0.0.1" + +braces@^2.3.1, braces@^2.3.2: + version "2.3.2" + resolved "https://registry.yarnpkg.com/braces/-/braces-2.3.2.tgz#5979fd3f14cd531565e5fa2df1abfff1dfaee729" + integrity sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w== + dependencies: + arr-flatten "^1.1.0" + array-unique "^0.3.2" + extend-shallow "^2.0.1" + fill-range "^4.0.0" + isobject "^3.0.1" + repeat-element "^1.1.2" + snapdragon "^0.8.1" + snapdragon-node "^2.0.1" + split-string "^3.0.2" + to-regex "^3.0.1" + +braces@~3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" + integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== + dependencies: + fill-range "^7.0.1" + +brorand@^1.0.1: + version "1.1.0" + resolved "https://registry.yarnpkg.com/brorand/-/brorand-1.1.0.tgz#12c25efe40a45e3c323eb8675a0a0ce57b22371f" + integrity sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8= + +browserify-aes@^1.0.0, browserify-aes@^1.0.4: + version "1.2.0" + resolved "https://registry.yarnpkg.com/browserify-aes/-/browserify-aes-1.2.0.tgz#326734642f403dabc3003209853bb70ad428ef48" + integrity sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA== + dependencies: + buffer-xor "^1.0.3" + cipher-base "^1.0.0" + create-hash "^1.1.0" + evp_bytestokey "^1.0.3" + inherits "^2.0.1" + safe-buffer "^5.0.1" + +browserify-cipher@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/browserify-cipher/-/browserify-cipher-1.0.1.tgz#8d6474c1b870bfdabcd3bcfcc1934a10e94f15f0" + integrity sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w== + dependencies: + browserify-aes "^1.0.4" + browserify-des "^1.0.0" + evp_bytestokey "^1.0.0" + +browserify-des@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/browserify-des/-/browserify-des-1.0.2.tgz#3af4f1f59839403572f1c66204375f7a7f703e9c" + integrity sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A== + dependencies: + cipher-base "^1.0.1" + des.js "^1.0.0" + inherits "^2.0.1" + safe-buffer "^5.1.2" + +browserify-rsa@^4.0.0, browserify-rsa@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/browserify-rsa/-/browserify-rsa-4.0.1.tgz#21e0abfaf6f2029cf2fafb133567a701d4135524" + integrity sha1-IeCr+vbyApzy+vsTNWenAdQTVSQ= + dependencies: + bn.js "^4.1.0" + randombytes "^2.0.1" + +browserify-sign@^4.0.0: + version "4.2.1" + resolved "https://registry.yarnpkg.com/browserify-sign/-/browserify-sign-4.2.1.tgz#eaf4add46dd54be3bb3b36c0cf15abbeba7956c3" + integrity sha512-/vrA5fguVAKKAVTNJjgSm1tRQDHUU6DbwO9IROu/0WAzC8PKhucDSh18J0RMvVeHAn5puMd+QHC2erPRNf8lmg== + dependencies: + bn.js "^5.1.1" + browserify-rsa "^4.0.1" + create-hash "^1.2.0" + create-hmac "^1.1.7" + elliptic "^6.5.3" + inherits "^2.0.4" + parse-asn1 "^5.1.5" + readable-stream "^3.6.0" + safe-buffer "^5.2.0" + +browserify-zlib@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/browserify-zlib/-/browserify-zlib-0.2.0.tgz#2869459d9aa3be245fe8fe2ca1f46e2e7f54d73f" + integrity sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA== + dependencies: + pako "~1.0.5" + +browserslist@^4.0.0, browserslist@^4.12.0, browserslist@^4.8.5: + version "4.14.0" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.14.0.tgz#2908951abfe4ec98737b72f34c3bcedc8d43b000" + integrity sha512-pUsXKAF2lVwhmtpeA3LJrZ76jXuusrNyhduuQs7CDFf9foT4Y38aQOserd2lMe5DSSrjf3fx34oHwryuvxAUgQ== + dependencies: + caniuse-lite "^1.0.30001111" + electron-to-chromium "^1.3.523" + escalade "^3.0.2" + node-releases "^1.1.60" + +buffer-from@^1.0.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.1.tgz#32713bc028f75c02fdb710d7c7bcec1f2c6070ef" + integrity sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A== + +buffer-indexof@^1.0.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/buffer-indexof/-/buffer-indexof-1.1.1.tgz#52fabcc6a606d1a00302802648ef68f639da268c" + integrity sha512-4/rOEg86jivtPTeOUUT61jJO1Ya1TrR/OkqCSZDyq84WJh3LuuiphBYJN+fm5xufIk4XAFcEwte/8WzC8If/1g== + +buffer-json@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/buffer-json/-/buffer-json-2.0.0.tgz#f73e13b1e42f196fe2fd67d001c7d7107edd7c23" + integrity sha512-+jjPFVqyfF1esi9fvfUs3NqM0pH1ziZ36VP4hmA/y/Ssfo/5w5xHKfTw9BwQjoJ1w/oVtpLomqwUHKdefGyuHw== + +buffer-xor@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/buffer-xor/-/buffer-xor-1.0.3.tgz#26e61ed1422fb70dd42e6e36729ed51d855fe8d9" + integrity sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk= + +buffer@^4.3.0: + version "4.9.2" + resolved "https://registry.yarnpkg.com/buffer/-/buffer-4.9.2.tgz#230ead344002988644841ab0244af8c44bbe3ef8" + integrity sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg== + dependencies: + base64-js "^1.0.2" + ieee754 "^1.1.4" + isarray "^1.0.0" + +builtin-status-codes@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz#85982878e21b98e1c66425e03d0174788f569ee8" + integrity sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug= + +bytes@3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.0.0.tgz#d32815404d689699f85a4ea4fa8755dd13a96048" + integrity sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg= + +bytes@3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.0.tgz#f6cf7933a360e0588fa9fde85651cdc7f805d1f6" + integrity sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg== + +cacache@^12.0.2, cacache@^12.0.3: + version "12.0.4" + resolved "https://registry.yarnpkg.com/cacache/-/cacache-12.0.4.tgz#668bcbd105aeb5f1d92fe25570ec9525c8faa40c" + integrity sha512-a0tMB40oefvuInr4Cwb3GerbL9xTj1D5yg0T5xrjGCGyfvbxseIXX7BAO/u/hIXdafzOI5JC3wDwHyf24buOAQ== + dependencies: + bluebird "^3.5.5" + chownr "^1.1.1" + figgy-pudding "^3.5.1" + glob "^7.1.4" + graceful-fs "^4.1.15" + infer-owner "^1.0.3" + lru-cache "^5.1.1" + mississippi "^3.0.0" + mkdirp "^0.5.1" + move-concurrently "^1.0.1" + promise-inflight "^1.0.1" + rimraf "^2.6.3" + ssri "^6.0.1" + unique-filename "^1.1.1" + y18n "^4.0.0" + +cacache@^13.0.1: + version "13.0.1" + resolved "https://registry.yarnpkg.com/cacache/-/cacache-13.0.1.tgz#a8000c21697089082f85287a1aec6e382024a71c" + integrity sha512-5ZvAxd05HDDU+y9BVvcqYu2LLXmPnQ0hW62h32g4xBTgL/MppR4/04NHfj/ycM2y6lmTnbw6HVi+1eN0Psba6w== + dependencies: + chownr "^1.1.2" + figgy-pudding "^3.5.1" + fs-minipass "^2.0.0" + glob "^7.1.4" + graceful-fs "^4.2.2" + infer-owner "^1.0.4" + lru-cache "^5.1.1" + minipass "^3.0.0" + minipass-collect "^1.0.2" + minipass-flush "^1.0.5" + minipass-pipeline "^1.2.2" + mkdirp "^0.5.1" + move-concurrently "^1.0.1" + p-map "^3.0.0" + promise-inflight "^1.0.1" + rimraf "^2.7.1" + ssri "^7.0.0" + unique-filename "^1.1.1" + +cache-base@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/cache-base/-/cache-base-1.0.1.tgz#0a7f46416831c8b662ee36fe4e7c59d76f666ab2" + integrity sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ== + dependencies: + collection-visit "^1.0.0" + component-emitter "^1.2.1" + get-value "^2.0.6" + has-value "^1.0.0" + isobject "^3.0.1" + set-value "^2.0.0" + to-object-path "^0.3.0" + union-value "^1.0.0" + unset-value "^1.0.0" + +cache-loader@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/cache-loader/-/cache-loader-4.1.0.tgz#9948cae353aec0a1fcb1eafda2300816ec85387e" + integrity sha512-ftOayxve0PwKzBF/GLsZNC9fJBXl8lkZE3TOsjkboHfVHVkL39iUEs1FO07A33mizmci5Dudt38UZrrYXDtbhw== + dependencies: + buffer-json "^2.0.0" + find-cache-dir "^3.0.0" + loader-utils "^1.2.3" + mkdirp "^0.5.1" + neo-async "^2.6.1" + schema-utils "^2.0.0" + +call-me-maybe@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/call-me-maybe/-/call-me-maybe-1.0.1.tgz#26d208ea89e37b5cbde60250a15f031c16a4d66b" + integrity sha1-JtII6onje1y95gJQoV8DHBak1ms= + +caller-callsite@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/caller-callsite/-/caller-callsite-2.0.0.tgz#847e0fce0a223750a9a027c54b33731ad3154134" + integrity sha1-hH4PzgoiN1CpoCfFSzNzGtMVQTQ= + dependencies: + callsites "^2.0.0" + +caller-path@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/caller-path/-/caller-path-2.0.0.tgz#468f83044e369ab2010fac5f06ceee15bb2cb1f4" + integrity sha1-Ro+DBE42mrIBD6xfBs7uFbsssfQ= + dependencies: + caller-callsite "^2.0.0" + +callsites@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/callsites/-/callsites-2.0.0.tgz#06eb84f00eea413da86affefacbffb36093b3c50" + integrity sha1-BuuE8A7qQT2oav/vrL/7Ngk7PFA= + +callsites@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" + integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== + +camel-case@3.0.x: + version "3.0.0" + resolved "https://registry.yarnpkg.com/camel-case/-/camel-case-3.0.0.tgz#ca3c3688a4e9cf3a4cda777dc4dcbc713249cf73" + integrity sha1-yjw2iKTpzzpM2nd9xNy8cTJJz3M= + dependencies: + no-case "^2.2.0" + upper-case "^1.1.1" + +camelcase@^5.0.0, camelcase@^5.3.1: + version "5.3.1" + resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320" + integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg== + +caniuse-api@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/caniuse-api/-/caniuse-api-3.0.0.tgz#5e4d90e2274961d46291997df599e3ed008ee4c0" + integrity sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw== + dependencies: + browserslist "^4.0.0" + caniuse-lite "^1.0.0" + lodash.memoize "^4.1.2" + lodash.uniq "^4.5.0" + +caniuse-lite@^1.0.0, caniuse-lite@^1.0.30001109, caniuse-lite@^1.0.30001111: + version "1.0.30001112" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001112.tgz#0fffc3b934ff56ff0548c37bc9dad7d882bcf672" + integrity sha512-J05RTQlqsatidif/38aN3PGULCLrg8OYQOlJUKbeYVzC2mGZkZLIztwRlB3MtrfLmawUmjFlNJvy/uhwniIe1Q== + +case-sensitive-paths-webpack-plugin@^2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/case-sensitive-paths-webpack-plugin/-/case-sensitive-paths-webpack-plugin-2.3.0.tgz#23ac613cc9a856e4f88ff8bb73bbb5e989825cf7" + integrity sha512-/4YgnZS8y1UXXmC02xD5rRrBEu6T5ub+mQHLNRj0fzTRbgdBYhsNo2V5EqwgqrExjxsjtF/OpAKAMkKsxbD5XQ== + +caseless@~0.12.0: + version "0.12.0" + resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc" + integrity sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw= + +chalk@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98" + integrity sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg= + dependencies: + ansi-styles "^2.2.1" + escape-string-regexp "^1.0.2" + has-ansi "^2.0.0" + strip-ansi "^3.0.0" + supports-color "^2.0.0" + +chalk@^2.0.0, chalk@^2.0.1, chalk@^2.1.0, chalk@^2.3.0, chalk@^2.4.1, chalk@^2.4.2: + version "2.4.2" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" + integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== + dependencies: + ansi-styles "^3.2.1" + escape-string-regexp "^1.0.5" + supports-color "^5.3.0" + +chalk@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-3.0.0.tgz#3f73c2bf526591f574cc492c51e2456349f844e4" + integrity sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg== + dependencies: + ansi-styles "^4.1.0" + supports-color "^7.1.0" + +chalk@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.0.tgz#4e14870a618d9e2edd97dd8345fd9d9dc315646a" + integrity sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A== + dependencies: + ansi-styles "^4.1.0" + supports-color "^7.1.0" + +chardet@^0.7.0: + version "0.7.0" + resolved "https://registry.yarnpkg.com/chardet/-/chardet-0.7.0.tgz#90094849f0937f2eedc2425d0d28a9e5f0cbad9e" + integrity sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA== + +check-types@^8.0.3: + version "8.0.3" + resolved "https://registry.yarnpkg.com/check-types/-/check-types-8.0.3.tgz#3356cca19c889544f2d7a95ed49ce508a0ecf552" + integrity sha512-YpeKZngUmG65rLudJ4taU7VLkOCTMhNl/u4ctNC56LQS/zJTyNH0Lrtwm1tfTsbLlwvlfsA2d1c8vCf/Kh2KwQ== + +chokidar@^2.1.8: + version "2.1.8" + resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-2.1.8.tgz#804b3a7b6a99358c3c5c61e71d8728f041cff917" + integrity sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg== + dependencies: + anymatch "^2.0.0" + async-each "^1.0.1" + braces "^2.3.2" + glob-parent "^3.1.0" + inherits "^2.0.3" + is-binary-path "^1.0.0" + is-glob "^4.0.0" + normalize-path "^3.0.0" + path-is-absolute "^1.0.0" + readdirp "^2.2.1" + upath "^1.1.1" + optionalDependencies: + fsevents "^1.2.7" + +chokidar@^3.4.1: + version "3.4.2" + resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.4.2.tgz#38dc8e658dec3809741eb3ef7bb0a47fe424232d" + integrity sha512-IZHaDeBeI+sZJRX7lGcXsdzgvZqKv6sECqsbErJA4mHWfpRrD8B97kSFN4cQz6nGBGiuFia1MKR4d6c1o8Cv7A== + dependencies: + anymatch "~3.1.1" + braces "~3.0.2" + glob-parent "~5.1.0" + is-binary-path "~2.1.0" + is-glob "~4.0.1" + normalize-path "~3.0.0" + readdirp "~3.4.0" + optionalDependencies: + fsevents "~2.1.2" + +chownr@^1.1.1, chownr@^1.1.2: + version "1.1.4" + resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.4.tgz#6fc9d7b42d32a583596337666e7d08084da2cc6b" + integrity sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg== + +chrome-trace-event@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/chrome-trace-event/-/chrome-trace-event-1.0.2.tgz#234090ee97c7d4ad1a2c4beae27505deffc608a4" + integrity sha512-9e/zx1jw7B4CO+c/RXoCsfg/x1AfUBioy4owYH0bJprEYAx5hRFLRhWBqHAG57D0ZM4H7vxbP7bPe0VwhQRYDQ== + dependencies: + tslib "^1.9.0" + +ci-info@^1.5.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-1.6.0.tgz#2ca20dbb9ceb32d4524a683303313f0304b1e497" + integrity sha512-vsGdkwSCDpWmP80ncATX7iea5DWQemg1UgCW5J8tqjU3lYw4FBYuj89J0CTVomA7BEfvSZd84GmHko+MxFQU2A== + +cipher-base@^1.0.0, cipher-base@^1.0.1, cipher-base@^1.0.3: + version "1.0.4" + resolved "https://registry.yarnpkg.com/cipher-base/-/cipher-base-1.0.4.tgz#8760e4ecc272f4c363532f926d874aae2c1397de" + integrity sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q== + dependencies: + inherits "^2.0.1" + safe-buffer "^5.0.1" + +class-utils@^0.3.5: + version "0.3.6" + resolved "https://registry.yarnpkg.com/class-utils/-/class-utils-0.3.6.tgz#f93369ae8b9a7ce02fd41faad0ca83033190c463" + integrity sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg== + dependencies: + arr-union "^3.1.0" + define-property "^0.2.5" + isobject "^3.0.0" + static-extend "^0.1.1" + +clean-css@4.2.x: + version "4.2.3" + resolved "https://registry.yarnpkg.com/clean-css/-/clean-css-4.2.3.tgz#507b5de7d97b48ee53d84adb0160ff6216380f78" + integrity sha512-VcMWDN54ZN/DS+g58HYL5/n4Zrqe8vHJpGA8KdgUXFU4fuP/aHNw8eld9SyEIyabIMJX/0RaY/fplOo5hYLSFA== + dependencies: + source-map "~0.6.0" + +clean-stack@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/clean-stack/-/clean-stack-2.2.0.tgz#ee8472dbb129e727b31e8a10a427dee9dfe4008b" + integrity sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A== + +cli-cursor@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-2.1.0.tgz#b35dac376479facc3e94747d41d0d0f5238ffcb5" + integrity sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU= + dependencies: + restore-cursor "^2.0.0" + +cli-cursor@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-3.1.0.tgz#264305a7ae490d1d03bf0c9ba7c925d1753af307" + integrity sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw== + dependencies: + restore-cursor "^3.1.0" + +cli-highlight@^2.1.4: + version "2.1.4" + resolved "https://registry.yarnpkg.com/cli-highlight/-/cli-highlight-2.1.4.tgz#098cb642cf17f42adc1c1145e07f960ec4d7522b" + integrity sha512-s7Zofobm20qriqDoU9sXptQx0t2R9PEgac92mENNm7xaEe1hn71IIMsXMK+6encA6WRCWWxIGQbipr3q998tlQ== + dependencies: + chalk "^3.0.0" + highlight.js "^9.6.0" + mz "^2.4.0" + parse5 "^5.1.1" + parse5-htmlparser2-tree-adapter "^5.1.1" + yargs "^15.0.0" + +cli-spinners@^2.0.0: + version "2.4.0" + resolved "https://registry.yarnpkg.com/cli-spinners/-/cli-spinners-2.4.0.tgz#c6256db216b878cfba4720e719cec7cf72685d7f" + integrity sha512-sJAofoarcm76ZGpuooaO0eDy8saEy+YoZBLjC4h8srt4jeBnkYeOgqxgsJQTpyt2LjI5PTfLJHSL+41Yu4fEJA== + +cli-width@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-3.0.0.tgz#a2f48437a2caa9a22436e794bf071ec9e61cedf6" + integrity sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw== + +clipboardy@^2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/clipboardy/-/clipboardy-2.3.0.tgz#3c2903650c68e46a91b388985bc2774287dba290" + integrity sha512-mKhiIL2DrQIsuXMgBgnfEHOZOryC7kY7YO//TN6c63wlEm3NG5tz+YgY5rVi29KCmq/QQjKYvM7a19+MDOTHOQ== + dependencies: + arch "^2.1.1" + execa "^1.0.0" + is-wsl "^2.1.1" + +cliui@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/cliui/-/cliui-5.0.0.tgz#deefcfdb2e800784aa34f46fa08e06851c7bbbc5" + integrity sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA== + dependencies: + string-width "^3.1.0" + strip-ansi "^5.2.0" + wrap-ansi "^5.1.0" + +cliui@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/cliui/-/cliui-6.0.0.tgz#511d702c0c4e41ca156d7d0e96021f23e13225b1" + integrity sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ== + dependencies: + string-width "^4.2.0" + strip-ansi "^6.0.0" + wrap-ansi "^6.2.0" + +clone@^1.0.2: + version "1.0.4" + resolved "https://registry.yarnpkg.com/clone/-/clone-1.0.4.tgz#da309cc263df15994c688ca902179ca3c7cd7c7e" + integrity sha1-2jCcwmPfFZlMaIypAheco8fNfH4= + +coa@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/coa/-/coa-2.0.2.tgz#43f6c21151b4ef2bf57187db0d73de229e3e7ec3" + integrity sha512-q5/jG+YQnSy4nRTV4F7lPepBJZ8qBNJJDBuJdoejDyLXgmL7IEo+Le2JDZudFTFt7mrCqIRaSjws4ygRCTCAXA== + dependencies: + "@types/q" "^1.5.1" + chalk "^2.4.1" + q "^1.1.2" + +collection-visit@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/collection-visit/-/collection-visit-1.0.0.tgz#4bc0373c164bc3291b4d368c829cf1a80a59dca0" + integrity sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA= + dependencies: + map-visit "^1.0.0" + object-visit "^1.0.0" + +color-convert@^1.9.0, color-convert@^1.9.1: + version "1.9.3" + resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" + integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== + dependencies: + color-name "1.1.3" + +color-convert@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" + integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== + dependencies: + color-name "~1.1.4" + +color-name@1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" + integrity sha1-p9BVi9icQveV3UIyj3QIMcpTvCU= + +color-name@^1.0.0, color-name@~1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" + integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== + +color-string@^1.5.2: + version "1.5.3" + resolved "https://registry.yarnpkg.com/color-string/-/color-string-1.5.3.tgz#c9bbc5f01b58b5492f3d6857459cb6590ce204cc" + integrity sha512-dC2C5qeWoYkxki5UAXapdjqO672AM4vZuPGRQfO8b5HKuKGBbKWpITyDYN7TOFKvRW7kOgAn3746clDBMDJyQw== + dependencies: + color-name "^1.0.0" + simple-swizzle "^0.2.2" + +color@^3.0.0: + version "3.1.2" + resolved "https://registry.yarnpkg.com/color/-/color-3.1.2.tgz#68148e7f85d41ad7649c5fa8c8106f098d229e10" + integrity sha512-vXTJhHebByxZn3lDvDJYw4lR5+uB3vuoHsuYA5AKuxRVn5wzzIfQKGLBmgdVRHKTJYeK5rvJcHnrd0Li49CFpg== + dependencies: + color-convert "^1.9.1" + color-string "^1.5.2" + +colorette@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/colorette/-/colorette-1.2.1.tgz#4d0b921325c14faf92633086a536db6e89564b1b" + integrity sha512-puCDz0CzydiSYOrnXpz/PKd69zRrribezjtE9yd4zvytoRc8+RY/KJPvtPFKZS3E3wP6neGyMe0vOTlHO5L3Pw== + +combined-stream@^1.0.6, combined-stream@~1.0.6: + version "1.0.8" + resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f" + integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg== + dependencies: + delayed-stream "~1.0.0" + +commander@2.17.x: + version "2.17.1" + resolved "https://registry.yarnpkg.com/commander/-/commander-2.17.1.tgz#bd77ab7de6de94205ceacc72f1716d29f20a77bf" + integrity sha512-wPMUt6FnH2yzG95SA6mzjQOEKUU3aLaDEmzs1ti+1E9h+CsrZghRlqEM/EJ4KscsQVG8uNN4uVreUeT8+drlgg== + +commander@^2.18.0, commander@^2.20.0: + version "2.20.3" + resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" + integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== + +commander@~2.19.0: + version "2.19.0" + resolved "https://registry.yarnpkg.com/commander/-/commander-2.19.0.tgz#f6198aa84e5b83c46054b94ddedbfed5ee9ff12a" + integrity sha512-6tvAOO+D6OENvRAh524Dh9jcfKTYDQAqvqezbCW82xj5X0pSrcpxtvRKHLG0yBY6SD7PSDrJaj+0AiOcKVd1Xg== + +commondir@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/commondir/-/commondir-1.0.1.tgz#ddd800da0c66127393cca5950ea968a3aaf1253b" + integrity sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs= + +component-emitter@^1.2.1: + version "1.3.0" + resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.3.0.tgz#16e4070fba8ae29b679f2215853ee181ab2eabc0" + integrity sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg== + +compressible@~2.0.16: + version "2.0.18" + resolved "https://registry.yarnpkg.com/compressible/-/compressible-2.0.18.tgz#af53cca6b070d4c3c0750fbd77286a6d7cc46fba" + integrity sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg== + dependencies: + mime-db ">= 1.43.0 < 2" + +compression@^1.7.4: + version "1.7.4" + resolved "https://registry.yarnpkg.com/compression/-/compression-1.7.4.tgz#95523eff170ca57c29a0ca41e6fe131f41e5bb8f" + integrity sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ== + dependencies: + accepts "~1.3.5" + bytes "3.0.0" + compressible "~2.0.16" + debug "2.6.9" + on-headers "~1.0.2" + safe-buffer "5.1.2" + vary "~1.1.2" + +concat-map@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" + integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= + +concat-stream@^1.5.0: + version "1.6.2" + resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.6.2.tgz#904bdf194cd3122fc675c77fc4ac3d4ff0fd1a34" + integrity sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw== + dependencies: + buffer-from "^1.0.0" + inherits "^2.0.3" + readable-stream "^2.2.2" + typedarray "^0.0.6" + +connect-history-api-fallback@^1.6.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/connect-history-api-fallback/-/connect-history-api-fallback-1.6.0.tgz#8b32089359308d111115d81cad3fceab888f97bc" + integrity sha512-e54B99q/OUoH64zYYRf3HBP5z24G38h5D3qXu23JGRoigpX5Ss4r9ZnDk3g0Z8uQC2x2lPaJ+UlWBc1ZWBWdLg== + +console-browserify@^1.1.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/console-browserify/-/console-browserify-1.2.0.tgz#67063cef57ceb6cf4993a2ab3a55840ae8c49336" + integrity sha512-ZMkYO/LkF17QvCPqM0gxw8yUzigAOZOSWSHg91FH6orS7vcEj5dVZTidN2fQ14yBSdg97RqhSNwLUXInd52OTA== + +consolidate@^0.15.1: + version "0.15.1" + resolved "https://registry.yarnpkg.com/consolidate/-/consolidate-0.15.1.tgz#21ab043235c71a07d45d9aad98593b0dba56bab7" + integrity sha512-DW46nrsMJgy9kqAbPt5rKaCr7uFtpo4mSUvLHIUbJEjm0vo+aY5QLwBUq3FK4tRnJr/X0Psc0C4jf/h+HtXSMw== + dependencies: + bluebird "^3.1.1" + +constants-browserify@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/constants-browserify/-/constants-browserify-1.0.0.tgz#c20b96d8c617748aaf1c16021760cd27fcb8cb75" + integrity sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U= + +content-disposition@0.5.3: + version "0.5.3" + resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.3.tgz#e130caf7e7279087c5616c2007d0485698984fbd" + integrity sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g== + dependencies: + safe-buffer "5.1.2" + +content-type@~1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.4.tgz#e138cc75e040c727b1966fe5e5f8c9aee256fe3b" + integrity sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA== + +convert-source-map@^1.7.0: + version "1.7.0" + resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.7.0.tgz#17a2cb882d7f77d3490585e2ce6c524424a3a442" + integrity sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA== + dependencies: + safe-buffer "~5.1.1" + +cookie-signature@1.0.6: + version "1.0.6" + resolved "https://registry.yarnpkg.com/cookie-signature/-/cookie-signature-1.0.6.tgz#e303a882b342cc3ee8ca513a79999734dab3ae2c" + integrity sha1-4wOogrNCzD7oylE6eZmXNNqzriw= + +cookie@0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.4.0.tgz#beb437e7022b3b6d49019d088665303ebe9c14ba" + integrity sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg== + +copy-concurrently@^1.0.0: + version "1.0.5" + resolved "https://registry.yarnpkg.com/copy-concurrently/-/copy-concurrently-1.0.5.tgz#92297398cae34937fcafd6ec8139c18051f0b5e0" + integrity sha512-f2domd9fsVDFtaFcbaRZuYXwtdmnzqbADSwhSWYxYB/Q8zsdUUFMXVRwXGDMWmbEzAn1kdRrtI1T/KTFOL4X2A== + dependencies: + aproba "^1.1.1" + fs-write-stream-atomic "^1.0.8" + iferr "^0.1.5" + mkdirp "^0.5.1" + rimraf "^2.5.4" + run-queue "^1.0.0" + +copy-descriptor@^0.1.0: + version "0.1.1" + resolved "https://registry.yarnpkg.com/copy-descriptor/-/copy-descriptor-0.1.1.tgz#676f6eb3c39997c2ee1ac3a924fd6124748f578d" + integrity sha1-Z29us8OZl8LuGsOpJP1hJHSPV40= + +copy-webpack-plugin@^5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/copy-webpack-plugin/-/copy-webpack-plugin-5.1.1.tgz#5481a03dea1123d88a988c6ff8b78247214f0b88" + integrity sha512-P15M5ZC8dyCjQHWwd4Ia/dm0SgVvZJMYeykVIVYXbGyqO4dWB5oyPHp9i7wjwo5LhtlhKbiBCdS2NvM07Wlybg== + dependencies: + cacache "^12.0.3" + find-cache-dir "^2.1.0" + glob-parent "^3.1.0" + globby "^7.1.1" + is-glob "^4.0.1" + loader-utils "^1.2.3" + minimatch "^3.0.4" + normalize-path "^3.0.0" + p-limit "^2.2.1" + schema-utils "^1.0.0" + serialize-javascript "^2.1.2" + webpack-log "^2.0.0" + +core-js-compat@^3.6.2, core-js-compat@^3.6.5: + version "3.6.5" + resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.6.5.tgz#2a51d9a4e25dfd6e690251aa81f99e3c05481f1c" + integrity sha512-7ItTKOhOZbznhXAQ2g/slGg1PJV5zDO/WdkTwi7UEOJmkvsE32PWvx6mKtDjiMpjnR2CNf6BAD6sSxIlv7ptng== + dependencies: + browserslist "^4.8.5" + semver "7.0.0" + +core-js@^3.6.5: + version "3.6.5" + resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.6.5.tgz#7395dc273af37fb2e50e9bd3d9fe841285231d1a" + integrity sha512-vZVEEwZoIsI+vPEuoF9Iqf5H7/M3eeQqWlQnYa8FSKKePuYTf5MWnxb5SDAzCa60b3JBRS5g9b+Dq7b1y/RCrA== + +core-util-is@1.0.2, core-util-is@~1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" + integrity sha1-tf1UIgqivFq1eqtxQMlAdUUDwac= + +cosmiconfig@^5.0.0: + version "5.2.1" + resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-5.2.1.tgz#040f726809c591e77a17c0a3626ca45b4f168b1a" + integrity sha512-H65gsXo1SKjf8zmrJ67eJk8aIRKV5ff2D4uKZIBZShbhGSpEmsQOPW/SKMKYhSTrqR7ufy6RP69rPogdaPh/kA== + dependencies: + import-fresh "^2.0.0" + is-directory "^0.3.1" + js-yaml "^3.13.1" + parse-json "^4.0.0" + +create-ecdh@^4.0.0: + version "4.0.4" + resolved "https://registry.yarnpkg.com/create-ecdh/-/create-ecdh-4.0.4.tgz#d6e7f4bffa66736085a0762fd3a632684dabcc4e" + integrity sha512-mf+TCx8wWc9VpuxfP2ht0iSISLZnt0JgWlrOKZiNqyUZWnjIaCIVNQArMHnCZKfEYRg6IM7A+NeJoN8gf/Ws0A== + dependencies: + bn.js "^4.1.0" + elliptic "^6.5.3" + +create-hash@^1.1.0, create-hash@^1.1.2, create-hash@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/create-hash/-/create-hash-1.2.0.tgz#889078af11a63756bcfb59bd221996be3a9ef196" + integrity sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg== + dependencies: + cipher-base "^1.0.1" + inherits "^2.0.1" + md5.js "^1.3.4" + ripemd160 "^2.0.1" + sha.js "^2.4.0" + +create-hmac@^1.1.0, create-hmac@^1.1.4, create-hmac@^1.1.7: + version "1.1.7" + resolved "https://registry.yarnpkg.com/create-hmac/-/create-hmac-1.1.7.tgz#69170c78b3ab957147b2b8b04572e47ead2243ff" + integrity sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg== + dependencies: + cipher-base "^1.0.3" + create-hash "^1.1.0" + inherits "^2.0.1" + ripemd160 "^2.0.0" + safe-buffer "^5.0.1" + sha.js "^2.4.8" + +cross-spawn@^5.0.1: + version "5.1.0" + resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-5.1.0.tgz#e8bd0efee58fcff6f8f94510a0a554bbfa235449" + integrity sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk= + dependencies: + lru-cache "^4.0.1" + shebang-command "^1.2.0" + which "^1.2.9" + +cross-spawn@^6.0.0, cross-spawn@^6.0.5: + version "6.0.5" + resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-6.0.5.tgz#4a5ec7c64dfae22c3a14124dbacdee846d80cbc4" + integrity sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ== + dependencies: + nice-try "^1.0.4" + path-key "^2.0.1" + semver "^5.5.0" + shebang-command "^1.2.0" + which "^1.2.9" + +cross-spawn@^7.0.0: + version "7.0.3" + resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6" + integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== + dependencies: + path-key "^3.1.0" + shebang-command "^2.0.0" + which "^2.0.1" + +crypto-browserify@^3.11.0: + version "3.12.0" + resolved "https://registry.yarnpkg.com/crypto-browserify/-/crypto-browserify-3.12.0.tgz#396cf9f3137f03e4b8e532c58f698254e00f80ec" + integrity sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg== + dependencies: + browserify-cipher "^1.0.0" + browserify-sign "^4.0.0" + create-ecdh "^4.0.0" + create-hash "^1.1.0" + create-hmac "^1.1.0" + diffie-hellman "^5.0.0" + inherits "^2.0.1" + pbkdf2 "^3.0.3" + public-encrypt "^4.0.0" + randombytes "^2.0.0" + randomfill "^1.0.3" + +css-color-names@0.0.4, css-color-names@^0.0.4: + version "0.0.4" + resolved "https://registry.yarnpkg.com/css-color-names/-/css-color-names-0.0.4.tgz#808adc2e79cf84738069b646cb20ec27beb629e0" + integrity sha1-gIrcLnnPhHOAabZGyyDsJ762KeA= + +css-declaration-sorter@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/css-declaration-sorter/-/css-declaration-sorter-4.0.1.tgz#c198940f63a76d7e36c1e71018b001721054cb22" + integrity sha512-BcxQSKTSEEQUftYpBVnsH4SF05NTuBokb19/sBt6asXGKZ/6VP7PLG1CBCkFDYOnhXhPh0jMhO6xZ71oYHXHBA== + dependencies: + postcss "^7.0.1" + timsort "^0.3.0" + +css-loader@^3.5.3: + version "3.6.0" + resolved "https://registry.yarnpkg.com/css-loader/-/css-loader-3.6.0.tgz#2e4b2c7e6e2d27f8c8f28f61bffcd2e6c91ef645" + integrity sha512-M5lSukoWi1If8dhQAUCvj4H8vUt3vOnwbQBH9DdTm/s4Ym2B/3dPMtYZeJmq7Q3S3Pa+I94DcZ7pc9bP14cWIQ== + dependencies: + camelcase "^5.3.1" + cssesc "^3.0.0" + icss-utils "^4.1.1" + loader-utils "^1.2.3" + normalize-path "^3.0.0" + postcss "^7.0.32" + postcss-modules-extract-imports "^2.0.0" + postcss-modules-local-by-default "^3.0.2" + postcss-modules-scope "^2.2.0" + postcss-modules-values "^3.0.0" + postcss-value-parser "^4.1.0" + schema-utils "^2.7.0" + semver "^6.3.0" + +css-select-base-adapter@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/css-select-base-adapter/-/css-select-base-adapter-0.1.1.tgz#3b2ff4972cc362ab88561507a95408a1432135d7" + integrity sha512-jQVeeRG70QI08vSTwf1jHxp74JoZsr2XSgETae8/xC8ovSnL2WF87GTLO86Sbwdt2lK4Umg4HnnwMO4YF3Ce7w== + +css-select@^1.1.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/css-select/-/css-select-1.2.0.tgz#2b3a110539c5355f1cd8d314623e870b121ec858" + integrity sha1-KzoRBTnFNV8c2NMUYj6HCxIeyFg= + dependencies: + boolbase "~1.0.0" + css-what "2.1" + domutils "1.5.1" + nth-check "~1.0.1" + +css-select@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/css-select/-/css-select-2.1.0.tgz#6a34653356635934a81baca68d0255432105dbef" + integrity sha512-Dqk7LQKpwLoH3VovzZnkzegqNSuAziQyNZUcrdDM401iY+R5NkGBXGmtO05/yaXQziALuPogeG0b7UAgjnTJTQ== + dependencies: + boolbase "^1.0.0" + css-what "^3.2.1" + domutils "^1.7.0" + nth-check "^1.0.2" + +css-tree@1.0.0-alpha.37: + version "1.0.0-alpha.37" + resolved "https://registry.yarnpkg.com/css-tree/-/css-tree-1.0.0-alpha.37.tgz#98bebd62c4c1d9f960ec340cf9f7522e30709a22" + integrity sha512-DMxWJg0rnz7UgxKT0Q1HU/L9BeJI0M6ksor0OgqOnF+aRCDWg/N2641HmVyU9KVIu0OVVWOb2IpC9A+BJRnejg== + dependencies: + mdn-data "2.0.4" + source-map "^0.6.1" + +css-tree@1.0.0-alpha.39: + version "1.0.0-alpha.39" + resolved "https://registry.yarnpkg.com/css-tree/-/css-tree-1.0.0-alpha.39.tgz#2bff3ffe1bb3f776cf7eefd91ee5cba77a149eeb" + integrity sha512-7UvkEYgBAHRG9Nt980lYxjsTrCyHFN53ky3wVsDkiMdVqylqRt+Zc+jm5qw7/qyOvN2dHSYtX0e4MbCCExSvnA== + dependencies: + mdn-data "2.0.6" + source-map "^0.6.1" + +css-what@2.1: + version "2.1.3" + resolved "https://registry.yarnpkg.com/css-what/-/css-what-2.1.3.tgz#a6d7604573365fe74686c3f311c56513d88285f2" + integrity sha512-a+EPoD+uZiNfh+5fxw2nO9QwFa6nJe2Or35fGY6Ipw1R3R4AGz1d1TEZrCegvw2YTmZ0jXirGYlzxxpYSHwpEg== + +css-what@^3.2.1: + version "3.3.0" + resolved "https://registry.yarnpkg.com/css-what/-/css-what-3.3.0.tgz#10fec696a9ece2e591ac772d759aacabac38cd39" + integrity sha512-pv9JPyatiPaQ6pf4OvD/dbfm0o5LviWmwxNWzblYf/1u9QZd0ihV+PMwy5jdQWQ3349kZmKEx9WXuSka2dM4cg== + +cssesc@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/cssesc/-/cssesc-3.0.0.tgz#37741919903b868565e1c09ea747445cd18983ee" + integrity sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg== + +cssnano-preset-default@^4.0.0, cssnano-preset-default@^4.0.7: + version "4.0.7" + resolved "https://registry.yarnpkg.com/cssnano-preset-default/-/cssnano-preset-default-4.0.7.tgz#51ec662ccfca0f88b396dcd9679cdb931be17f76" + integrity sha512-x0YHHx2h6p0fCl1zY9L9roD7rnlltugGu7zXSKQx6k2rYw0Hi3IqxcoAGF7u9Q5w1nt7vK0ulxV8Lo+EvllGsA== + dependencies: + css-declaration-sorter "^4.0.1" + cssnano-util-raw-cache "^4.0.1" + postcss "^7.0.0" + postcss-calc "^7.0.1" + postcss-colormin "^4.0.3" + postcss-convert-values "^4.0.1" + postcss-discard-comments "^4.0.2" + postcss-discard-duplicates "^4.0.2" + postcss-discard-empty "^4.0.1" + postcss-discard-overridden "^4.0.1" + postcss-merge-longhand "^4.0.11" + postcss-merge-rules "^4.0.3" + postcss-minify-font-values "^4.0.2" + postcss-minify-gradients "^4.0.2" + postcss-minify-params "^4.0.2" + postcss-minify-selectors "^4.0.2" + postcss-normalize-charset "^4.0.1" + postcss-normalize-display-values "^4.0.2" + postcss-normalize-positions "^4.0.2" + postcss-normalize-repeat-style "^4.0.2" + postcss-normalize-string "^4.0.2" + postcss-normalize-timing-functions "^4.0.2" + postcss-normalize-unicode "^4.0.1" + postcss-normalize-url "^4.0.1" + postcss-normalize-whitespace "^4.0.2" + postcss-ordered-values "^4.1.2" + postcss-reduce-initial "^4.0.3" + postcss-reduce-transforms "^4.0.2" + postcss-svgo "^4.0.2" + postcss-unique-selectors "^4.0.1" + +cssnano-util-get-arguments@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/cssnano-util-get-arguments/-/cssnano-util-get-arguments-4.0.0.tgz#ed3a08299f21d75741b20f3b81f194ed49cc150f" + integrity sha1-7ToIKZ8h11dBsg87gfGU7UnMFQ8= + +cssnano-util-get-match@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/cssnano-util-get-match/-/cssnano-util-get-match-4.0.0.tgz#c0e4ca07f5386bb17ec5e52250b4f5961365156d" + integrity sha1-wOTKB/U4a7F+xeUiULT1lhNlFW0= + +cssnano-util-raw-cache@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/cssnano-util-raw-cache/-/cssnano-util-raw-cache-4.0.1.tgz#b26d5fd5f72a11dfe7a7846fb4c67260f96bf282" + integrity sha512-qLuYtWK2b2Dy55I8ZX3ky1Z16WYsx544Q0UWViebptpwn/xDBmog2TLg4f+DBMg1rJ6JDWtn96WHbOKDWt1WQA== + dependencies: + postcss "^7.0.0" + +cssnano-util-same-parent@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/cssnano-util-same-parent/-/cssnano-util-same-parent-4.0.1.tgz#574082fb2859d2db433855835d9a8456ea18bbf3" + integrity sha512-WcKx5OY+KoSIAxBW6UBBRay1U6vkYheCdjyVNDm85zt5K9mHoGOfsOsqIszfAqrQQFIIKgjh2+FDgIj/zsl21Q== + +cssnano@^4.0.0, cssnano@^4.1.10: + version "4.1.10" + resolved "https://registry.yarnpkg.com/cssnano/-/cssnano-4.1.10.tgz#0ac41f0b13d13d465487e111b778d42da631b8b2" + integrity sha512-5wny+F6H4/8RgNlaqab4ktc3e0/blKutmq8yNlBFXA//nSFFAqAngjNVRzUvCgYROULmZZUoosL/KSoZo5aUaQ== + dependencies: + cosmiconfig "^5.0.0" + cssnano-preset-default "^4.0.7" + is-resolvable "^1.0.0" + postcss "^7.0.0" + +csso@^4.0.2: + version "4.0.3" + resolved "https://registry.yarnpkg.com/csso/-/csso-4.0.3.tgz#0d9985dc852c7cc2b2cacfbbe1079014d1a8e903" + integrity sha512-NL3spysxUkcrOgnpsT4Xdl2aiEiBG6bXswAABQVHcMrfjjBisFOKwLDOmf4wf32aPdcJws1zds2B0Rg+jqMyHQ== + dependencies: + css-tree "1.0.0-alpha.39" + +cyclist@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/cyclist/-/cyclist-1.0.1.tgz#596e9698fd0c80e12038c2b82d6eb1b35b6224d9" + integrity sha1-WW6WmP0MgOEgOMK4LW6xs1tiJNk= + +dashdash@^1.12.0: + version "1.14.1" + resolved "https://registry.yarnpkg.com/dashdash/-/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0" + integrity sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA= + dependencies: + assert-plus "^1.0.0" + +de-indent@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/de-indent/-/de-indent-1.0.2.tgz#b2038e846dc33baa5796128d0804b455b8c1e21d" + integrity sha1-sgOOhG3DO6pXlhKNCAS0VbjB4h0= + +debug@2.6.9, debug@^2.2.0, debug@^2.3.3: + version "2.6.9" + resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" + integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== + dependencies: + ms "2.0.0" + +debug@=3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/debug/-/debug-3.1.0.tgz#5bb5a0672628b64149566ba16819e61518c67261" + integrity sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g== + dependencies: + ms "2.0.0" + +debug@^3.1.1, debug@^3.2.5: + version "3.2.6" + resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.6.tgz#e83d17de16d8a7efb7717edbe5fb10135eee629b" + integrity sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ== + dependencies: + ms "^2.1.1" + +debug@^4.0.1, debug@^4.1.0, debug@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.1.1.tgz#3b72260255109c6b589cee050f1d516139664791" + integrity sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw== + dependencies: + ms "^2.1.1" + +decamelize@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" + integrity sha1-9lNNFRSCabIDUue+4m9QH5oZEpA= + +decode-uri-component@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.2.0.tgz#eb3913333458775cb84cd1a1fae062106bb87545" + integrity sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU= + +deep-equal@^1.0.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/deep-equal/-/deep-equal-1.1.1.tgz#b5c98c942ceffaf7cb051e24e1434a25a2e6076a" + integrity sha512-yd9c5AdiqVcR+JjcwUQb9DkhJc8ngNr0MahEBGvDiJw8puWab2yZlh+nkasOnZP+EGTAP6rRp2JzJhJZzvNF8g== + dependencies: + is-arguments "^1.0.4" + is-date-object "^1.0.1" + is-regex "^1.0.4" + object-is "^1.0.1" + object-keys "^1.1.1" + regexp.prototype.flags "^1.2.0" + +deep-extend@^0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.6.0.tgz#c4fa7c95404a17a9c3e8ca7e1537312b736330ac" + integrity sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA== + +deep-is@~0.1.3: + version "0.1.3" + resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34" + integrity sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ= + +deepmerge@^1.5.2: + version "1.5.2" + resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-1.5.2.tgz#10499d868844cdad4fee0842df8c7f6f0c95a753" + integrity sha512-95k0GDqvBjZavkuvzx/YqVLv/6YYa17fz6ILMSf7neqQITCPbnfEnQvEgMPNjH4kgobe7+WIL0yJEHku+H3qtQ== + +default-gateway@^4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/default-gateway/-/default-gateway-4.2.0.tgz#167104c7500c2115f6dd69b0a536bb8ed720552b" + integrity sha512-h6sMrVB1VMWVrW13mSc6ia/DwYYw5MN6+exNu1OaJeFac5aSAvwM7lZ0NVfTABuSkQelr4h5oebg3KB1XPdjgA== + dependencies: + execa "^1.0.0" + ip-regex "^2.1.0" + +default-gateway@^5.0.5: + version "5.0.5" + resolved "https://registry.yarnpkg.com/default-gateway/-/default-gateway-5.0.5.tgz#4fd6bd5d2855d39b34cc5a59505486e9aafc9b10" + integrity sha512-z2RnruVmj8hVMmAnEJMTIJNijhKCDiGjbLP+BHJFOT7ld3Bo5qcIBpVYDniqhbMIIf+jZDlkP2MkPXiQy/DBLA== + dependencies: + execa "^3.3.0" + +defaults@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/defaults/-/defaults-1.0.3.tgz#c656051e9817d9ff08ed881477f3fe4019f3ef7d" + integrity sha1-xlYFHpgX2f8I7YgUd/P+QBnz730= + dependencies: + clone "^1.0.2" + +define-properties@^1.1.2, define-properties@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.3.tgz#cf88da6cbee26fe6db7094f61d870cbd84cee9f1" + integrity sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ== + dependencies: + object-keys "^1.0.12" + +define-property@^0.2.5: + version "0.2.5" + resolved "https://registry.yarnpkg.com/define-property/-/define-property-0.2.5.tgz#c35b1ef918ec3c990f9a5bc57be04aacec5c8116" + integrity sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY= + dependencies: + is-descriptor "^0.1.0" + +define-property@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/define-property/-/define-property-1.0.0.tgz#769ebaaf3f4a63aad3af9e8d304c9bbe79bfb0e6" + integrity sha1-dp66rz9KY6rTr56NMEybvnm/sOY= + dependencies: + is-descriptor "^1.0.0" + +define-property@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/define-property/-/define-property-2.0.2.tgz#d459689e8d654ba77e02a817f8710d702cb16e9d" + integrity sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ== + dependencies: + is-descriptor "^1.0.2" + isobject "^3.0.1" + +del@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/del/-/del-4.1.1.tgz#9e8f117222ea44a31ff3a156c049b99052a9f0b4" + integrity sha512-QwGuEUouP2kVwQenAsOof5Fv8K9t3D8Ca8NxcXKrIpEHjTXK5J2nXLdP+ALI1cgv8wj7KuwBhTwBkOZSJKM5XQ== + dependencies: + "@types/glob" "^7.1.1" + globby "^6.1.0" + is-path-cwd "^2.0.0" + is-path-in-cwd "^2.0.0" + p-map "^2.0.0" + pify "^4.0.1" + rimraf "^2.6.3" + +delayed-stream@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" + integrity sha1-3zrhmayt+31ECqrgsp4icrJOxhk= + +depd@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.2.tgz#9bcd52e14c097763e749b274c4346ed2e560b5a9" + integrity sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak= + +des.js@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/des.js/-/des.js-1.0.1.tgz#5382142e1bdc53f85d86d53e5f4aa7deb91e0843" + integrity sha512-Q0I4pfFrv2VPd34/vfLrFOoRmlYj3OV50i7fskps1jZWK1kApMWWT9G6RRUeYedLcBDIhnSDaUvJMb3AhUlaEA== + dependencies: + inherits "^2.0.1" + minimalistic-assert "^1.0.0" + +destroy@~1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.0.4.tgz#978857442c44749e4206613e37946205826abd80" + integrity sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA= + +detect-node@^2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/detect-node/-/detect-node-2.0.4.tgz#014ee8f8f669c5c58023da64b8179c083a28c46c" + integrity sha512-ZIzRpLJrOj7jjP2miAtgqIfmzbxa4ZOr5jJc601zklsfEx9oTzmmj2nVpIPRpNlRTIh8lc1kyViIY7BWSGNmKw== + +diffie-hellman@^5.0.0: + version "5.0.3" + resolved "https://registry.yarnpkg.com/diffie-hellman/-/diffie-hellman-5.0.3.tgz#40e8ee98f55a2149607146921c63e1ae5f3d2875" + integrity sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg== + dependencies: + bn.js "^4.1.0" + miller-rabin "^4.0.0" + randombytes "^2.0.0" + +dir-glob@^2.0.0, dir-glob@^2.2.2: + version "2.2.2" + resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-2.2.2.tgz#fa09f0694153c8918b18ba0deafae94769fc50c4" + integrity sha512-f9LBi5QWzIW3I6e//uxZoLBlUt9kcp66qo0sSCxL6YZKc75R1c4MFCoe/LaZiBGmgujvQdxc5Bn3QhfyvK5Hsw== + dependencies: + path-type "^3.0.0" + +dns-equal@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/dns-equal/-/dns-equal-1.0.0.tgz#b39e7f1da6eb0a75ba9c17324b34753c47e0654d" + integrity sha1-s55/HabrCnW6nBcySzR1PEfgZU0= + +dns-packet@^1.3.1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/dns-packet/-/dns-packet-1.3.1.tgz#12aa426981075be500b910eedcd0b47dd7deda5a" + integrity sha512-0UxfQkMhYAUaZI+xrNZOz/as5KgDU0M/fQ9b6SpkyLbk3GEswDi6PADJVaYJradtRVsRIlF1zLyOodbcTCDzUg== + dependencies: + ip "^1.1.0" + safe-buffer "^5.0.1" + +dns-txt@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/dns-txt/-/dns-txt-2.0.2.tgz#b91d806f5d27188e4ab3e7d107d881a1cc4642b6" + integrity sha1-uR2Ab10nGI5Ks+fRB9iBocxGQrY= + dependencies: + buffer-indexof "^1.0.0" + +doctrine@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-3.0.0.tgz#addebead72a6574db783639dc87a121773973961" + integrity sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w== + dependencies: + esutils "^2.0.2" + +dom-converter@^0.2: + version "0.2.0" + resolved "https://registry.yarnpkg.com/dom-converter/-/dom-converter-0.2.0.tgz#6721a9daee2e293682955b6afe416771627bb768" + integrity sha512-gd3ypIPfOMr9h5jIKq8E3sHOTCjeirnl0WK5ZdS1AW0Odt0b1PaWaHdJ4Qk4klv+YB9aJBS7mESXjFoDQPu6DA== + dependencies: + utila "~0.4" + +dom-serializer@0: + version "0.2.2" + resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-0.2.2.tgz#1afb81f533717175d478655debc5e332d9f9bb51" + integrity sha512-2/xPb3ORsQ42nHYiSunXkDjPLBaEj/xTwUO4B7XCZQTRk7EBtTOPaygh10YAAh2OI1Qrp6NWfpAhzswj0ydt9g== + dependencies: + domelementtype "^2.0.1" + entities "^2.0.0" + +domain-browser@^1.1.1: + version "1.2.0" + resolved "https://registry.yarnpkg.com/domain-browser/-/domain-browser-1.2.0.tgz#3d31f50191a6749dd1375a7f522e823d42e54eda" + integrity sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA== + +domelementtype@1, domelementtype@^1.3.1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-1.3.1.tgz#d048c44b37b0d10a7f2a3d5fee3f4333d790481f" + integrity sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w== + +domelementtype@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-2.0.1.tgz#1f8bdfe91f5a78063274e803b4bdcedf6e94f94d" + integrity sha512-5HOHUDsYZWV8FGWN0Njbr/Rn7f/eWSQi1v7+HsUVwXgn8nWWlL64zKDkS0n8ZmQ3mlWOMuXOnR+7Nx/5tMO5AQ== + +domhandler@^2.3.0: + version "2.4.2" + resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-2.4.2.tgz#8805097e933d65e85546f726d60f5eb88b44f803" + integrity sha512-JiK04h0Ht5u/80fdLMCEmV4zkNh2BcoMFBmZ/91WtYZ8qVXSKjiw7fXMgFPnHcSZgOo3XdinHvmnDUeMf5R4wA== + dependencies: + domelementtype "1" + +domutils@1.5.1: + version "1.5.1" + resolved "https://registry.yarnpkg.com/domutils/-/domutils-1.5.1.tgz#dcd8488a26f563d61079e48c9f7b7e32373682cf" + integrity sha1-3NhIiib1Y9YQeeSMn3t+Mjc2gs8= + dependencies: + dom-serializer "0" + domelementtype "1" + +domutils@^1.5.1, domutils@^1.7.0: + version "1.7.0" + resolved "https://registry.yarnpkg.com/domutils/-/domutils-1.7.0.tgz#56ea341e834e06e6748af7a1cb25da67ea9f8c2a" + integrity sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg== + dependencies: + dom-serializer "0" + domelementtype "1" + +dot-prop@^5.2.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/dot-prop/-/dot-prop-5.2.0.tgz#c34ecc29556dc45f1f4c22697b6f4904e0cc4fcb" + integrity sha512-uEUyaDKoSQ1M4Oq8l45hSE26SnTxL6snNnqvK/VWx5wJhmff5z0FUVJDKDanor/6w3kzE3i7XZOk+7wC0EXr1A== + dependencies: + is-obj "^2.0.0" + +dotenv-expand@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/dotenv-expand/-/dotenv-expand-5.1.0.tgz#3fbaf020bfd794884072ea26b1e9791d45a629f0" + integrity sha512-YXQl1DSa4/PQyRfgrv6aoNjhasp/p4qs9FjJ4q4cQk+8m4r6k4ZSiEyytKG8f8W9gi8WsQtIObNmKd+tMzNTmA== + +dotenv@^8.2.0: + version "8.2.0" + resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-8.2.0.tgz#97e619259ada750eea3e4ea3e26bceea5424b16a" + integrity sha512-8sJ78ElpbDJBHNeBzUbUVLsqKdccaa/BXF1uPTw3GrvQTBgrQrtObr2mUrE38vzYd8cEv+m/JBfDLioYcfXoaw== + +duplexer@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/duplexer/-/duplexer-0.1.1.tgz#ace6ff808c1ce66b57d1ebf97977acb02334cfc1" + integrity sha1-rOb/gIwc5mtX0ev5eXessCM0z8E= + +duplexify@^3.4.2, duplexify@^3.6.0: + version "3.7.1" + resolved "https://registry.yarnpkg.com/duplexify/-/duplexify-3.7.1.tgz#2a4df5317f6ccfd91f86d6fd25d8d8a103b88309" + integrity sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g== + dependencies: + end-of-stream "^1.0.0" + inherits "^2.0.1" + readable-stream "^2.0.0" + stream-shift "^1.0.0" + +easy-stack@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/easy-stack/-/easy-stack-1.0.0.tgz#12c91b3085a37f0baa336e9486eac4bf94e3e788" + integrity sha1-EskbMIWjfwuqM26UhurEv5Tj54g= + +ecc-jsbn@~0.1.1: + version "0.1.2" + resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz#3a83a904e54353287874c564b7549386849a98c9" + integrity sha1-OoOpBOVDUyh4dMVkt1SThoSamMk= + dependencies: + jsbn "~0.1.0" + safer-buffer "^2.1.0" + +ee-first@1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" + integrity sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0= + +ejs@^2.6.1: + version "2.7.4" + resolved "https://registry.yarnpkg.com/ejs/-/ejs-2.7.4.tgz#48661287573dcc53e366c7a1ae52c3a120eec9ba" + integrity sha512-7vmuyh5+kuUyJKePhQfRQBhXV5Ce+RnaeeQArKu1EAMpL3WbgMt5WG6uQZpEVvYSSsxMXRKOewtDk9RaTKXRlA== + +electron-to-chromium@^1.3.523: + version "1.3.524" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.524.tgz#dd49646594466192de35956a5369bb20d616aa78" + integrity sha512-ZUvklIBkfXQyA6IeiEss1nfKRICcdB5afAGZAaPGaExdfrkpUu/WWVO+X7QpNnphaVMllXnAcvKnVPdyM+DCPQ== + +elliptic@^6.5.3: + version "6.5.3" + resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.5.3.tgz#cb59eb2efdaf73a0bd78ccd7015a62ad6e0f93d6" + integrity sha512-IMqzv5wNQf+E6aHeIqATs0tOLeOTwj1QKbRcS3jBbYkl5oLAserA8yJTT7/VyHUYG91PRmPyeQDObKLPpeS4dw== + dependencies: + bn.js "^4.4.0" + brorand "^1.0.1" + hash.js "^1.0.0" + hmac-drbg "^1.0.0" + inherits "^2.0.1" + minimalistic-assert "^1.0.0" + minimalistic-crypto-utils "^1.0.0" + +emoji-regex@^7.0.1: + version "7.0.3" + resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-7.0.3.tgz#933a04052860c85e83c122479c4748a8e4c72156" + integrity sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA== + +emoji-regex@^8.0.0: + version "8.0.0" + resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" + integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== + +emojis-list@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/emojis-list/-/emojis-list-2.1.0.tgz#4daa4d9db00f9819880c79fa457ae5b09a1fd389" + integrity sha1-TapNnbAPmBmIDHn6RXrlsJof04k= + +emojis-list@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/emojis-list/-/emojis-list-3.0.0.tgz#5570662046ad29e2e916e71aae260abdff4f6a78" + integrity sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q== + +encodeurl@~1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59" + integrity sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k= + +end-of-stream@^1.0.0, end-of-stream@^1.1.0: + version "1.4.4" + resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0" + integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q== + dependencies: + once "^1.4.0" + +enhanced-resolve@^4.3.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-4.3.0.tgz#3b806f3bfafc1ec7de69551ef93cca46c1704126" + integrity sha512-3e87LvavsdxyoCfGusJnrZ5G8SLPOFeHSNpZI/ATL9a5leXo2k0w6MKnbqhdBad9qTobSfB20Ld7UmgoNbAZkQ== + dependencies: + graceful-fs "^4.1.2" + memory-fs "^0.5.0" + tapable "^1.0.0" + +entities@^1.1.1: + version "1.1.2" + resolved "https://registry.yarnpkg.com/entities/-/entities-1.1.2.tgz#bdfa735299664dfafd34529ed4f8522a275fea56" + integrity sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w== + +entities@^2.0.0: + version "2.0.3" + resolved "https://registry.yarnpkg.com/entities/-/entities-2.0.3.tgz#5c487e5742ab93c15abb5da22759b8590ec03b7f" + integrity sha512-MyoZ0jgnLvB2X3Lg5HqpFmn1kybDiIfEQmKzTb5apr51Rb+T3KdmMiqa70T+bhGnyv7bQ6WMj2QMHpGMmlrUYQ== + +errno@^0.1.3, errno@~0.1.7: + version "0.1.7" + resolved "https://registry.yarnpkg.com/errno/-/errno-0.1.7.tgz#4684d71779ad39af177e3f007996f7c67c852618" + integrity sha512-MfrRBDWzIWifgq6tJj60gkAwtLNb6sQPlcFrSOflcP1aFmmruKQ2wRnze/8V6kgyz7H3FF8Npzv78mZ7XLLflg== + dependencies: + prr "~1.0.1" + +error-ex@^1.3.1: + version "1.3.2" + resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf" + integrity sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g== + dependencies: + is-arrayish "^0.2.1" + +error-stack-parser@^2.0.0: + version "2.0.6" + resolved "https://registry.yarnpkg.com/error-stack-parser/-/error-stack-parser-2.0.6.tgz#5a99a707bd7a4c58a797902d48d82803ede6aad8" + integrity sha512-d51brTeqC+BHlwF0BhPtcYgF5nlzf9ZZ0ZIUQNZpc9ZB9qw5IJ2diTrBY9jlCJkTLITYPjmiX6OWCwH+fuyNgQ== + dependencies: + stackframe "^1.1.1" + +es-abstract@^1.17.0-next.1, es-abstract@^1.17.2, es-abstract@^1.17.5: + version "1.17.6" + resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.17.6.tgz#9142071707857b2cacc7b89ecb670316c3e2d52a" + integrity sha512-Fr89bON3WFyUi5EvAeI48QTWX0AyekGgLA8H+c+7fbfCkJwRWRMLd8CQedNEyJuoYYhmtEqY92pgte1FAhBlhw== + dependencies: + es-to-primitive "^1.2.1" + function-bind "^1.1.1" + has "^1.0.3" + has-symbols "^1.0.1" + is-callable "^1.2.0" + is-regex "^1.1.0" + object-inspect "^1.7.0" + object-keys "^1.1.1" + object.assign "^4.1.0" + string.prototype.trimend "^1.0.1" + string.prototype.trimstart "^1.0.1" + +es-to-primitive@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.2.1.tgz#e55cd4c9cdc188bcefb03b366c736323fc5c898a" + integrity sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA== + dependencies: + is-callable "^1.1.4" + is-date-object "^1.0.1" + is-symbol "^1.0.2" + +escalade@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.0.2.tgz#6a580d70edb87880f22b4c91d0d56078df6962c4" + integrity sha512-gPYAU37hYCUhW5euPeR+Y74F7BL+IBsV93j5cvGriSaD1aG6MGsqsV1yamRdrWrb2j3aiZvb0X+UBOWpx3JWtQ== + +escape-html@~1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" + integrity sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg= + +escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" + integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= + +eslint-loader@^2.2.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/eslint-loader/-/eslint-loader-2.2.1.tgz#28b9c12da54057af0845e2a6112701a2f6bf8337" + integrity sha512-RLgV9hoCVsMLvOxCuNjdqOrUqIj9oJg8hF44vzJaYqsAHuY9G2YAeN3joQ9nxP0p5Th9iFSIpKo+SD8KISxXRg== + dependencies: + loader-fs-cache "^1.0.0" + loader-utils "^1.0.2" + object-assign "^4.0.1" + object-hash "^1.1.4" + rimraf "^2.6.1" + +eslint-plugin-vue@^6.2.2: + version "6.2.2" + resolved "https://registry.yarnpkg.com/eslint-plugin-vue/-/eslint-plugin-vue-6.2.2.tgz#27fecd9a3a24789b0f111ecdd540a9e56198e0fe" + integrity sha512-Nhc+oVAHm0uz/PkJAWscwIT4ijTrK5fqNqz9QB1D35SbbuMG1uB6Yr5AJpvPSWg+WOw7nYNswerYh0kOk64gqQ== + dependencies: + natural-compare "^1.4.0" + semver "^5.6.0" + vue-eslint-parser "^7.0.0" + +eslint-scope@^4.0.3: + version "4.0.3" + resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-4.0.3.tgz#ca03833310f6889a3264781aa82e63eb9cfe7848" + integrity sha512-p7VutNr1O/QrxysMo3E45FjYDTeXBy0iTltPFNSqKAIfjDSXC+4dj+qfyuD8bfAXrW/y6lW3O76VaYNPKfpKrg== + dependencies: + esrecurse "^4.1.0" + estraverse "^4.1.1" + +eslint-scope@^5.0.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-5.1.0.tgz#d0f971dfe59c69e0cada684b23d49dbf82600ce5" + integrity sha512-iiGRvtxWqgtx5m8EyQUJihBloE4EnYeGE/bz1wSPwJE6tZuJUtHlhqDM4Xj2ukE8Dyy1+HCZ4hE0fzIVMzb58w== + dependencies: + esrecurse "^4.1.0" + estraverse "^4.1.1" + +eslint-utils@^1.4.3: + version "1.4.3" + resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-1.4.3.tgz#74fec7c54d0776b6f67e0251040b5806564e981f" + integrity sha512-fbBN5W2xdY45KulGXmLHZ3c3FHfVYmKg0IrAKGOkT/464PQsx2UeIzfz1RmEci+KLm1bBaAzZAh8+/E+XAeZ8Q== + dependencies: + eslint-visitor-keys "^1.1.0" + +eslint-visitor-keys@^1.0.0, eslint-visitor-keys@^1.1.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz#30ebd1ef7c2fdff01c3a4f151044af25fab0523e" + integrity sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ== + +eslint@^6.7.2: + version "6.8.0" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-6.8.0.tgz#62262d6729739f9275723824302fb227c8c93ffb" + integrity sha512-K+Iayyo2LtyYhDSYwz5D5QdWw0hCacNzyq1Y821Xna2xSJj7cijoLLYmLxTQgcgZ9mC61nryMy9S7GRbYpI5Ig== + dependencies: + "@babel/code-frame" "^7.0.0" + ajv "^6.10.0" + chalk "^2.1.0" + cross-spawn "^6.0.5" + debug "^4.0.1" + doctrine "^3.0.0" + eslint-scope "^5.0.0" + eslint-utils "^1.4.3" + eslint-visitor-keys "^1.1.0" + espree "^6.1.2" + esquery "^1.0.1" + esutils "^2.0.2" + file-entry-cache "^5.0.1" + functional-red-black-tree "^1.0.1" + glob-parent "^5.0.0" + globals "^12.1.0" + ignore "^4.0.6" + import-fresh "^3.0.0" + imurmurhash "^0.1.4" + inquirer "^7.0.0" + is-glob "^4.0.0" + js-yaml "^3.13.1" + json-stable-stringify-without-jsonify "^1.0.1" + levn "^0.3.0" + lodash "^4.17.14" + minimatch "^3.0.4" + mkdirp "^0.5.1" + natural-compare "^1.4.0" + optionator "^0.8.3" + progress "^2.0.0" + regexpp "^2.0.1" + semver "^6.1.2" + strip-ansi "^5.2.0" + strip-json-comments "^3.0.1" + table "^5.2.3" + text-table "^0.2.0" + v8-compile-cache "^2.0.3" + +espree@^6.1.2, espree@^6.2.1: + version "6.2.1" + resolved "https://registry.yarnpkg.com/espree/-/espree-6.2.1.tgz#77fc72e1fd744a2052c20f38a5b575832e82734a" + integrity sha512-ysCxRQY3WaXJz9tdbWOwuWr5Y/XrPTGX9Kiz3yoUXwW0VZ4w30HTkQLaGx/+ttFjF8i+ACbArnB4ce68a9m5hw== + dependencies: + acorn "^7.1.1" + acorn-jsx "^5.2.0" + eslint-visitor-keys "^1.1.0" + +esprima@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" + integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== + +esquery@^1.0.1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.3.1.tgz#b78b5828aa8e214e29fb74c4d5b752e1c033da57" + integrity sha512-olpvt9QG0vniUBZspVRN6lwB7hOZoTRtT+jzR+tS4ffYx2mzbw+z0XCOk44aaLYKApNX5nMm+E+P6o25ip/DHQ== + dependencies: + estraverse "^5.1.0" + +esrecurse@^4.1.0: + version "4.2.1" + resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.2.1.tgz#007a3b9fdbc2b3bb87e4879ea19c92fdbd3942cf" + integrity sha512-64RBB++fIOAXPw3P9cy89qfMlvZEXZkqqJkjqqXIvzP5ezRZjW+lPWjw35UX/3EhUPFYbg5ER4JYgDw4007/DQ== + dependencies: + estraverse "^4.1.0" + +estraverse@^4.1.0, estraverse@^4.1.1: + version "4.3.0" + resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d" + integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw== + +estraverse@^5.1.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.2.0.tgz#307df42547e6cc7324d3cf03c155d5cdb8c53880" + integrity sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ== + +esutils@^2.0.2: + version "2.0.3" + resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" + integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== + +etag@~1.8.1: + version "1.8.1" + resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887" + integrity sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc= + +event-pubsub@4.3.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/event-pubsub/-/event-pubsub-4.3.0.tgz#f68d816bc29f1ec02c539dc58c8dd40ce72cb36e" + integrity sha512-z7IyloorXvKbFx9Bpie2+vMJKKx1fH1EN5yiTfp8CiLOTptSYy1g8H4yDpGlEdshL1PBiFtBHepF2cNsqeEeFQ== + +eventemitter3@^4.0.0: + version "4.0.4" + resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-4.0.4.tgz#b5463ace635a083d018bdc7c917b4c5f10a85384" + integrity sha512-rlaVLnVxtxvoyLsQQFBx53YmXHDxRIzzTLbdfxqi4yocpSjAxXwkU0cScM5JgSKMqEhrZpnvQ2D9gjylR0AimQ== + +events@^3.0.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/events/-/events-3.2.0.tgz#93b87c18f8efcd4202a461aec4dfc0556b639379" + integrity sha512-/46HWwbfCX2xTawVfkKLGxMifJYQBWMwY1mjywRtb4c9x8l5NP3KoJtnIOiL1hfdRkIuYhETxQlo62IF8tcnlg== + +eventsource@^1.0.7: + version "1.0.7" + resolved "https://registry.yarnpkg.com/eventsource/-/eventsource-1.0.7.tgz#8fbc72c93fcd34088090bc0a4e64f4b5cee6d8d0" + integrity sha512-4Ln17+vVT0k8aWq+t/bF5arcS3EpT9gYtW66EPacdj/mAFevznsnyoHLPy2BA8gbIQeIHoPsvwmfBftfcG//BQ== + dependencies: + original "^1.0.0" + +evp_bytestokey@^1.0.0, evp_bytestokey@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz#7fcbdb198dc71959432efe13842684e0525acb02" + integrity sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA== + dependencies: + md5.js "^1.3.4" + safe-buffer "^5.1.1" + +execa@^0.8.0: + version "0.8.0" + resolved "https://registry.yarnpkg.com/execa/-/execa-0.8.0.tgz#d8d76bbc1b55217ed190fd6dd49d3c774ecfc8da" + integrity sha1-2NdrvBtVIX7RkP1t1J08d07PyNo= + dependencies: + cross-spawn "^5.0.1" + get-stream "^3.0.0" + is-stream "^1.1.0" + npm-run-path "^2.0.0" + p-finally "^1.0.0" + signal-exit "^3.0.0" + strip-eof "^1.0.0" + +execa@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/execa/-/execa-1.0.0.tgz#c6236a5bb4df6d6f15e88e7f017798216749ddd8" + integrity sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA== + dependencies: + cross-spawn "^6.0.0" + get-stream "^4.0.0" + is-stream "^1.1.0" + npm-run-path "^2.0.0" + p-finally "^1.0.0" + signal-exit "^3.0.0" + strip-eof "^1.0.0" + +execa@^3.3.0: + version "3.4.0" + resolved "https://registry.yarnpkg.com/execa/-/execa-3.4.0.tgz#c08ed4550ef65d858fac269ffc8572446f37eb89" + integrity sha512-r9vdGQk4bmCuK1yKQu1KTwcT2zwfWdbdaXfCtAh+5nU/4fSX+JAb7vZGvI5naJrQlvONrEB20jeruESI69530g== + dependencies: + cross-spawn "^7.0.0" + get-stream "^5.0.0" + human-signals "^1.1.1" + is-stream "^2.0.0" + merge-stream "^2.0.0" + npm-run-path "^4.0.0" + onetime "^5.1.0" + p-finally "^2.0.0" + signal-exit "^3.0.2" + strip-final-newline "^2.0.0" + +expand-brackets@^2.1.4: + version "2.1.4" + resolved "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-2.1.4.tgz#b77735e315ce30f6b6eff0f83b04151a22449622" + integrity sha1-t3c14xXOMPa27/D4OwQVGiJEliI= + dependencies: + debug "^2.3.3" + define-property "^0.2.5" + extend-shallow "^2.0.1" + posix-character-classes "^0.1.0" + regex-not "^1.0.0" + snapdragon "^0.8.1" + to-regex "^3.0.1" + +express@^4.16.3, express@^4.17.1: + version "4.17.1" + resolved "https://registry.yarnpkg.com/express/-/express-4.17.1.tgz#4491fc38605cf51f8629d39c2b5d026f98a4c134" + integrity sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g== + dependencies: + accepts "~1.3.7" + array-flatten "1.1.1" + body-parser "1.19.0" + content-disposition "0.5.3" + content-type "~1.0.4" + cookie "0.4.0" + cookie-signature "1.0.6" + debug "2.6.9" + depd "~1.1.2" + encodeurl "~1.0.2" + escape-html "~1.0.3" + etag "~1.8.1" + finalhandler "~1.1.2" + fresh "0.5.2" + merge-descriptors "1.0.1" + methods "~1.1.2" + on-finished "~2.3.0" + parseurl "~1.3.3" + path-to-regexp "0.1.7" + proxy-addr "~2.0.5" + qs "6.7.0" + range-parser "~1.2.1" + safe-buffer "5.1.2" + send "0.17.1" + serve-static "1.14.1" + setprototypeof "1.1.1" + statuses "~1.5.0" + type-is "~1.6.18" + utils-merge "1.0.1" + vary "~1.1.2" + +extend-shallow@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-2.0.1.tgz#51af7d614ad9a9f610ea1bafbb989d6b1c56890f" + integrity sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8= + dependencies: + is-extendable "^0.1.0" + +extend-shallow@^3.0.0, extend-shallow@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-3.0.2.tgz#26a71aaf073b39fb2127172746131c2704028db8" + integrity sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg= + dependencies: + assign-symbols "^1.0.0" + is-extendable "^1.0.1" + +extend@~3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa" + integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g== + +external-editor@^3.0.3: + version "3.1.0" + resolved "https://registry.yarnpkg.com/external-editor/-/external-editor-3.1.0.tgz#cb03f740befae03ea4d283caed2741a83f335495" + integrity sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew== + dependencies: + chardet "^0.7.0" + iconv-lite "^0.4.24" + tmp "^0.0.33" + +extglob@^2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/extglob/-/extglob-2.0.4.tgz#ad00fe4dc612a9232e8718711dc5cb5ab0285543" + integrity sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw== + dependencies: + array-unique "^0.3.2" + define-property "^1.0.0" + expand-brackets "^2.1.4" + extend-shallow "^2.0.1" + fragment-cache "^0.2.1" + regex-not "^1.0.0" + snapdragon "^0.8.1" + to-regex "^3.0.1" + +extsprintf@1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.3.0.tgz#96918440e3041a7a414f8c52e3c574eb3c3e1e05" + integrity sha1-lpGEQOMEGnpBT4xS48V06zw+HgU= + +extsprintf@^1.2.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.4.0.tgz#e2689f8f356fad62cca65a3a91c5df5f9551692f" + integrity sha1-4mifjzVvrWLMplo6kcXfX5VRaS8= + +fast-deep-equal@^3.1.1: + version "3.1.3" + resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" + integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== + +fast-glob@^2.2.6: + version "2.2.7" + resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-2.2.7.tgz#6953857c3afa475fff92ee6015d52da70a4cd39d" + integrity sha512-g1KuQwHOZAmOZMuBtHdxDtju+T2RT8jgCC9aANsbpdiDDTSnjgfuVsIBNKbUeJI3oKMRExcfNDtJl4OhbffMsw== + dependencies: + "@mrmlnc/readdir-enhanced" "^2.2.1" + "@nodelib/fs.stat" "^1.1.2" + glob-parent "^3.1.0" + is-glob "^4.0.0" + merge2 "^1.2.3" + micromatch "^3.1.10" + +fast-json-stable-stringify@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" + integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== + +fast-levenshtein@~2.0.6: + version "2.0.6" + resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" + integrity sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc= + +faye-websocket@^0.10.0: + version "0.10.0" + resolved "https://registry.yarnpkg.com/faye-websocket/-/faye-websocket-0.10.0.tgz#4e492f8d04dfb6f89003507f6edbf2d501e7c6f4" + integrity sha1-TkkvjQTftviQA1B/btvy1QHnxvQ= + dependencies: + websocket-driver ">=0.5.1" + +faye-websocket@~0.11.1: + version "0.11.3" + resolved "https://registry.yarnpkg.com/faye-websocket/-/faye-websocket-0.11.3.tgz#5c0e9a8968e8912c286639fde977a8b209f2508e" + integrity sha512-D2y4bovYpzziGgbHYtGCMjlJM36vAl/y+xUyn1C+FVx8szd1E+86KwVw6XvYSzOP8iMpm1X0I4xJD+QtUb36OA== + dependencies: + websocket-driver ">=0.5.1" + +figgy-pudding@^3.5.1: + version "3.5.2" + resolved "https://registry.yarnpkg.com/figgy-pudding/-/figgy-pudding-3.5.2.tgz#b4eee8148abb01dcf1d1ac34367d59e12fa61d6e" + integrity sha512-0btnI/H8f2pavGMN8w40mlSKOfTK2SVJmBfBeVIj3kNw0swwgzyRq0d5TJVOwodFmtvpPeWPN/MCcfuWF0Ezbw== + +figures@^3.0.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/figures/-/figures-3.2.0.tgz#625c18bd293c604dc4a8ddb2febf0c88341746af" + integrity sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg== + dependencies: + escape-string-regexp "^1.0.5" + +file-entry-cache@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-5.0.1.tgz#ca0f6efa6dd3d561333fb14515065c2fafdf439c" + integrity sha512-bCg29ictuBaKUwwArK4ouCaqDgLZcysCFLmM/Yn/FDoqndh/9vNuQfXRDvTuXKLxfD/JtZQGKFT8MGcJBK644g== + dependencies: + flat-cache "^2.0.1" + +file-loader@^4.2.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/file-loader/-/file-loader-4.3.0.tgz#780f040f729b3d18019f20605f723e844b8a58af" + integrity sha512-aKrYPYjF1yG3oX0kWRrqrSMfgftm7oJW5M+m4owoldH5C51C0RkIwB++JbRvEW3IU6/ZG5n8UvEcdgwOt2UOWA== + dependencies: + loader-utils "^1.2.3" + schema-utils "^2.5.0" + +file-uri-to-path@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz#553a7b8446ff6f684359c445f1e37a05dacc33dd" + integrity sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw== + +filesize@^3.6.1: + version "3.6.1" + resolved "https://registry.yarnpkg.com/filesize/-/filesize-3.6.1.tgz#090bb3ee01b6f801a8a8be99d31710b3422bb317" + integrity sha512-7KjR1vv6qnicaPMi1iiTcI85CyYwRO/PSFCu6SvqL8jN2Wjt/NIYQTFtFs7fSDCYOstUkEWIQGFUg5YZQfjlcg== + +fill-range@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-4.0.0.tgz#d544811d428f98eb06a63dc402d2403c328c38f7" + integrity sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc= + dependencies: + extend-shallow "^2.0.1" + is-number "^3.0.0" + repeat-string "^1.6.1" + to-regex-range "^2.1.0" + +fill-range@^7.0.1: + version "7.0.1" + resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" + integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== + dependencies: + to-regex-range "^5.0.1" + +finalhandler@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.1.2.tgz#b7e7d000ffd11938d0fdb053506f6ebabe9f587d" + integrity sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA== + dependencies: + debug "2.6.9" + encodeurl "~1.0.2" + escape-html "~1.0.3" + on-finished "~2.3.0" + parseurl "~1.3.3" + statuses "~1.5.0" + unpipe "~1.0.0" + +find-cache-dir@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-0.1.1.tgz#c8defae57c8a52a8a784f9e31c57c742e993a0b9" + integrity sha1-yN765XyKUqinhPnjHFfHQumToLk= + dependencies: + commondir "^1.0.1" + mkdirp "^0.5.1" + pkg-dir "^1.0.0" + +find-cache-dir@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-2.1.0.tgz#8d0f94cd13fe43c6c7c261a0d86115ca918c05f7" + integrity sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ== + dependencies: + commondir "^1.0.1" + make-dir "^2.0.0" + pkg-dir "^3.0.0" + +find-cache-dir@^3.0.0, find-cache-dir@^3.3.1: + version "3.3.1" + resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-3.3.1.tgz#89b33fad4a4670daa94f855f7fbe31d6d84fe880" + integrity sha512-t2GDMt3oGC/v+BMwzmllWDuJF/xcDtE5j/fCGbqDD7OLuJkj0cfh1YSA5VKPvwMeLFLNDBkwOKZ2X85jGLVftQ== + dependencies: + commondir "^1.0.1" + make-dir "^3.0.2" + pkg-dir "^4.1.0" + +find-up@^1.0.0: + version "1.1.2" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-1.1.2.tgz#6b2e9822b1a2ce0a60ab64d610eccad53cb24d0f" + integrity sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8= + dependencies: + path-exists "^2.0.0" + pinkie-promise "^2.0.0" + +find-up@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-3.0.0.tgz#49169f1d7993430646da61ecc5ae355c21c97b73" + integrity sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg== + dependencies: + locate-path "^3.0.0" + +find-up@^4.0.0, find-up@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-4.1.0.tgz#97afe7d6cdc0bc5928584b7c8d7b16e8a9aa5d19" + integrity sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw== + dependencies: + locate-path "^5.0.0" + path-exists "^4.0.0" + +flat-cache@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-2.0.1.tgz#5d296d6f04bda44a4630a301413bdbc2ec085ec0" + integrity sha512-LoQe6yDuUMDzQAEH8sgmh4Md6oZnc/7PjtwjNFSzveXqSHt6ka9fPBuso7IGf9Rz4uqnSnWiFH2B/zj24a5ReA== + dependencies: + flatted "^2.0.0" + rimraf "2.6.3" + write "1.0.3" + +flatted@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/flatted/-/flatted-2.0.2.tgz#4575b21e2bcee7434aa9be662f4b7b5f9c2b5138" + integrity sha512-r5wGx7YeOwNWNlCA0wQ86zKyDLMQr+/RB8xy74M4hTphfmjlijTSSXGuH8rnvKZnfT9i+75zmd8jcKdMR4O6jA== + +flush-write-stream@^1.0.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/flush-write-stream/-/flush-write-stream-1.1.1.tgz#8dd7d873a1babc207d94ead0c2e0e44276ebf2e8" + integrity sha512-3Z4XhFZ3992uIq0XOqb9AreonueSYphE6oYbpt5+3u06JWklbsPkNv3ZKkP9Bz/r+1MWCaMoSQ28P85+1Yc77w== + dependencies: + inherits "^2.0.3" + readable-stream "^2.3.6" + +follow-redirects@1.5.10: + version "1.5.10" + resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.5.10.tgz#7b7a9f9aea2fdff36786a94ff643ed07f4ff5e2a" + integrity sha512-0V5l4Cizzvqt5D44aTXbFZz+FtyXV1vrDN6qrelxtfYQKW0KO0W2T/hkE8xvGa/540LkZlkaUjO4ailYTFtHVQ== + dependencies: + debug "=3.1.0" + +follow-redirects@^1.0.0: + version "1.12.1" + resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.12.1.tgz#de54a6205311b93d60398ebc01cf7015682312b6" + integrity sha512-tmRv0AVuR7ZyouUHLeNSiO6pqulF7dYa3s19c6t+wz9LD69/uSzdMxJ2S91nTI9U3rt/IldxpzMOFejp6f0hjg== + +for-in@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/for-in/-/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80" + integrity sha1-gQaNKVqBQuwKxybG4iAMMPttXoA= + +forever-agent@~0.6.1: + version "0.6.1" + resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91" + integrity sha1-+8cfDEGt6zf5bFd60e1C2P2sypE= + +form-data@~2.3.2: + version "2.3.3" + resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.3.3.tgz#dcce52c05f644f298c6a7ab936bd724ceffbf3a6" + integrity sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ== + dependencies: + asynckit "^0.4.0" + combined-stream "^1.0.6" + mime-types "^2.1.12" + +forwarded@~0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/forwarded/-/forwarded-0.1.2.tgz#98c23dab1175657b8c0573e8ceccd91b0ff18c84" + integrity sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ= + +fragment-cache@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/fragment-cache/-/fragment-cache-0.2.1.tgz#4290fad27f13e89be7f33799c6bc5a0abfff0d19" + integrity sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk= + dependencies: + map-cache "^0.2.2" + +fresh@0.5.2: + version "0.5.2" + resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7" + integrity sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac= + +from2@^2.1.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/from2/-/from2-2.3.0.tgz#8bfb5502bde4a4d36cfdeea007fcca21d7e382af" + integrity sha1-i/tVAr3kpNNs/e6gB/zKIdfjgq8= + dependencies: + inherits "^2.0.1" + readable-stream "^2.0.0" + +fs-extra@^7.0.1: + version "7.0.1" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-7.0.1.tgz#4f189c44aa123b895f722804f55ea23eadc348e9" + integrity sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw== + dependencies: + graceful-fs "^4.1.2" + jsonfile "^4.0.0" + universalify "^0.1.0" + +fs-minipass@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-2.1.0.tgz#7f5036fdbf12c63c169190cbe4199c852271f9fb" + integrity sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg== + dependencies: + minipass "^3.0.0" + +fs-write-stream-atomic@^1.0.8: + version "1.0.10" + resolved "https://registry.yarnpkg.com/fs-write-stream-atomic/-/fs-write-stream-atomic-1.0.10.tgz#b47df53493ef911df75731e70a9ded0189db40c9" + integrity sha1-tH31NJPvkR33VzHnCp3tAYnbQMk= + dependencies: + graceful-fs "^4.1.2" + iferr "^0.1.5" + imurmurhash "^0.1.4" + readable-stream "1 || 2" + +fs.realpath@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" + integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8= + +fsevents@^1.2.7: + version "1.2.13" + resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-1.2.13.tgz#f325cb0455592428bcf11b383370ef70e3bfcc38" + integrity sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw== + dependencies: + bindings "^1.5.0" + nan "^2.12.1" + +fsevents@~2.1.2: + version "2.1.3" + resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.1.3.tgz#fb738703ae8d2f9fe900c33836ddebee8b97f23e" + integrity sha512-Auw9a4AxqWpa9GUfj370BMPzzyncfBABW8Mab7BGWBYDj4Isgq+cDKtx0i6u9jcX9pQDnswsaaOTgTmA5pEjuQ== + +function-bind@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" + integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== + +functional-red-black-tree@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz#1b0ab3bd553b2a0d6399d29c0e3ea0b252078327" + integrity sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc= + +gensync@^1.0.0-beta.1: + version "1.0.0-beta.1" + resolved "https://registry.yarnpkg.com/gensync/-/gensync-1.0.0-beta.1.tgz#58f4361ff987e5ff6e1e7a210827aa371eaac269" + integrity sha512-r8EC6NO1sngH/zdD9fiRDLdcgnbayXah+mLgManTaIZJqEC1MZstmnox8KpnI2/fxQwrp5OpCOYWLp4rBl4Jcg== + +get-caller-file@^2.0.1: + version "2.0.5" + resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" + integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== + +get-stream@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-3.0.0.tgz#8e943d1358dc37555054ecbe2edb05aa174ede14" + integrity sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ= + +get-stream@^4.0.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-4.1.0.tgz#c1b255575f3dc21d59bfc79cd3d2b46b1c3a54b5" + integrity sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w== + dependencies: + pump "^3.0.0" + +get-stream@^5.0.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-5.1.0.tgz#01203cdc92597f9b909067c3e656cc1f4d3c4dc9" + integrity sha512-EXr1FOzrzTfGeL0gQdeFEvOMm2mzMOglyiOXSTpPC+iAjAKftbr3jpCMWynogwYnM+eSj9sHGc6wjIcDvYiygw== + dependencies: + pump "^3.0.0" + +get-value@^2.0.3, get-value@^2.0.6: + version "2.0.6" + resolved "https://registry.yarnpkg.com/get-value/-/get-value-2.0.6.tgz#dc15ca1c672387ca76bd37ac0a395ba2042a2c28" + integrity sha1-3BXKHGcjh8p2vTesCjlbogQqLCg= + +getpass@^0.1.1: + version "0.1.7" + resolved "https://registry.yarnpkg.com/getpass/-/getpass-0.1.7.tgz#5eff8e3e684d569ae4cb2b1282604e8ba62149fa" + integrity sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo= + dependencies: + assert-plus "^1.0.0" + +glob-parent@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-3.1.0.tgz#9e6af6299d8d3bd2bd40430832bd113df906c5ae" + integrity sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4= + dependencies: + is-glob "^3.1.0" + path-dirname "^1.0.0" + +glob-parent@^5.0.0, glob-parent@~5.1.0: + version "5.1.1" + resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.1.tgz#b6c1ef417c4e5663ea498f1c45afac6916bbc229" + integrity sha512-FnI+VGOpnlGHWZxthPGR+QhR78fuiK0sNLkHQv+bL9fQi57lNNdquIbna/WrfROrolq8GK5Ek6BiMwqL/voRYQ== + dependencies: + is-glob "^4.0.1" + +glob-to-regexp@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/glob-to-regexp/-/glob-to-regexp-0.3.0.tgz#8c5a1494d2066c570cc3bfe4496175acc4d502ab" + integrity sha1-jFoUlNIGbFcMw7/kSWF1rMTVAqs= + +glob@^7.0.3, glob@^7.1.2, glob@^7.1.3, glob@^7.1.4: + version "7.1.6" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.6.tgz#141f33b81a7c2492e125594307480c46679278a6" + integrity sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA== + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^3.0.4" + once "^1.3.0" + path-is-absolute "^1.0.0" + +globals@^11.1.0: + version "11.12.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e" + integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== + +globals@^12.1.0: + version "12.4.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-12.4.0.tgz#a18813576a41b00a24a97e7f815918c2e19925f8" + integrity sha512-BWICuzzDvDoH54NHKCseDanAhE3CeDorgDL5MT6LMXXj2WCnd9UC2szdk4AWLfjdgNBCXLUanXYcpBBKOSWGwg== + dependencies: + type-fest "^0.8.1" + +globby@^6.1.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/globby/-/globby-6.1.0.tgz#f5a6d70e8395e21c858fb0489d64df02424d506c" + integrity sha1-9abXDoOV4hyFj7BInWTfAkJNUGw= + dependencies: + array-union "^1.0.1" + glob "^7.0.3" + object-assign "^4.0.1" + pify "^2.0.0" + pinkie-promise "^2.0.0" + +globby@^7.1.1: + version "7.1.1" + resolved "https://registry.yarnpkg.com/globby/-/globby-7.1.1.tgz#fb2ccff9401f8600945dfada97440cca972b8680" + integrity sha1-+yzP+UAfhgCUXfral0QMypcrhoA= + dependencies: + array-union "^1.0.1" + dir-glob "^2.0.0" + glob "^7.1.2" + ignore "^3.3.5" + pify "^3.0.0" + slash "^1.0.0" + +globby@^9.2.0: + version "9.2.0" + resolved "https://registry.yarnpkg.com/globby/-/globby-9.2.0.tgz#fd029a706c703d29bdd170f4b6db3a3f7a7cb63d" + integrity sha512-ollPHROa5mcxDEkwg6bPt3QbEf4pDQSNtd6JPL1YvOvAo/7/0VAm9TccUeoTmarjPw4pfUthSCqcyfNB1I3ZSg== + dependencies: + "@types/glob" "^7.1.1" + array-union "^1.0.2" + dir-glob "^2.2.2" + fast-glob "^2.2.6" + glob "^7.1.3" + ignore "^4.0.3" + pify "^4.0.1" + slash "^2.0.0" + +graceful-fs@^4.1.11, graceful-fs@^4.1.15, graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.2: + version "4.2.4" + resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.4.tgz#2256bde14d3632958c465ebc96dc467ca07a29fb" + integrity sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw== + +gzip-size@^5.0.0: + version "5.1.1" + resolved "https://registry.yarnpkg.com/gzip-size/-/gzip-size-5.1.1.tgz#cb9bee692f87c0612b232840a873904e4c135274" + integrity sha512-FNHi6mmoHvs1mxZAds4PpdCS6QG8B4C1krxJsMutgxl5t3+GlRTzzI3NEkifXx2pVsOvJdOGSmIgDhQ55FwdPA== + dependencies: + duplexer "^0.1.1" + pify "^4.0.1" + +handle-thing@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/handle-thing/-/handle-thing-2.0.1.tgz#857f79ce359580c340d43081cc648970d0bb234e" + integrity sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg== + +har-schema@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/har-schema/-/har-schema-2.0.0.tgz#a94c2224ebcac04782a0d9035521f24735b7ec92" + integrity sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI= + +har-validator@~5.1.3: + version "5.1.5" + resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-5.1.5.tgz#1f0803b9f8cb20c0fa13822df1ecddb36bde1efd" + integrity sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w== + dependencies: + ajv "^6.12.3" + har-schema "^2.0.0" + +has-ansi@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/has-ansi/-/has-ansi-2.0.0.tgz#34f5049ce1ecdf2b0649af3ef24e45ed35416d91" + integrity sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE= + dependencies: + ansi-regex "^2.0.0" + +has-flag@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" + integrity sha1-tdRU3CGZriJWmfNGfloH87lVuv0= + +has-flag@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" + integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== + +has-symbols@^1.0.0, has-symbols@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.1.tgz#9f5214758a44196c406d9bd76cebf81ec2dd31e8" + integrity sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg== + +has-value@^0.3.1: + version "0.3.1" + resolved "https://registry.yarnpkg.com/has-value/-/has-value-0.3.1.tgz#7b1f58bada62ca827ec0a2078025654845995e1f" + integrity sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8= + dependencies: + get-value "^2.0.3" + has-values "^0.1.4" + isobject "^2.0.0" + +has-value@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/has-value/-/has-value-1.0.0.tgz#18b281da585b1c5c51def24c930ed29a0be6b177" + integrity sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc= + dependencies: + get-value "^2.0.6" + has-values "^1.0.0" + isobject "^3.0.0" + +has-values@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/has-values/-/has-values-0.1.4.tgz#6d61de95d91dfca9b9a02089ad384bff8f62b771" + integrity sha1-bWHeldkd/Km5oCCJrThL/49it3E= + +has-values@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/has-values/-/has-values-1.0.0.tgz#95b0b63fec2146619a6fe57fe75628d5a39efe4f" + integrity sha1-lbC2P+whRmGab+V/51Yo1aOe/k8= + dependencies: + is-number "^3.0.0" + kind-of "^4.0.0" + +has@^1.0.0, has@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" + integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw== + dependencies: + function-bind "^1.1.1" + +hash-base@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/hash-base/-/hash-base-3.1.0.tgz#55c381d9e06e1d2997a883b4a3fddfe7f0d3af33" + integrity sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA== + dependencies: + inherits "^2.0.4" + readable-stream "^3.6.0" + safe-buffer "^5.2.0" + +hash-sum@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/hash-sum/-/hash-sum-1.0.2.tgz#33b40777754c6432573c120cc3808bbd10d47f04" + integrity sha1-M7QHd3VMZDJXPBIMw4CLvRDUfwQ= + +hash-sum@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/hash-sum/-/hash-sum-2.0.0.tgz#81d01bb5de8ea4a214ad5d6ead1b523460b0b45a" + integrity sha512-WdZTbAByD+pHfl/g9QSsBIIwy8IT+EsPiKDs0KNX+zSHhdDLFKdZu0BQHljvO+0QI/BasbMSUa8wYNCZTvhslg== + +hash.js@^1.0.0, hash.js@^1.0.3: + version "1.1.7" + resolved "https://registry.yarnpkg.com/hash.js/-/hash.js-1.1.7.tgz#0babca538e8d4ee4a0f8988d68866537a003cf42" + integrity sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA== + dependencies: + inherits "^2.0.3" + minimalistic-assert "^1.0.1" + +he@1.2.x, he@^1.1.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/he/-/he-1.2.0.tgz#84ae65fa7eafb165fddb61566ae14baf05664f0f" + integrity sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw== + +hex-color-regex@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/hex-color-regex/-/hex-color-regex-1.1.0.tgz#4c06fccb4602fe2602b3c93df82d7e7dbf1a8a8e" + integrity sha512-l9sfDFsuqtOqKDsQdqrMRk0U85RZc0RtOR9yPI7mRVOa4FsR/BVnZ0shmQRM96Ji99kYZP/7hn1cedc1+ApsTQ== + +highlight.js@^9.6.0: + version "9.18.3" + resolved "https://registry.yarnpkg.com/highlight.js/-/highlight.js-9.18.3.tgz#a1a0a2028d5e3149e2380f8a865ee8516703d634" + integrity sha512-zBZAmhSupHIl5sITeMqIJnYCDfAEc3Gdkqj65wC1lpI468MMQeeQkhcIAvk+RylAkxrCcI9xy9piHiXeQ1BdzQ== + +hmac-drbg@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/hmac-drbg/-/hmac-drbg-1.0.1.tgz#d2745701025a6c775a6c545793ed502fc0c649a1" + integrity sha1-0nRXAQJabHdabFRXk+1QL8DGSaE= + dependencies: + hash.js "^1.0.3" + minimalistic-assert "^1.0.0" + minimalistic-crypto-utils "^1.0.1" + +hoopy@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/hoopy/-/hoopy-0.1.4.tgz#609207d661100033a9a9402ad3dea677381c1b1d" + integrity sha512-HRcs+2mr52W0K+x8RzcLzuPPmVIKMSv97RGHy0Ea9y/mpcaK+xTrjICA04KAHi4GRzxliNqNJEFYWHghy3rSfQ== + +hosted-git-info@^2.1.4: + version "2.8.8" + resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.8.8.tgz#7539bd4bc1e0e0a895815a2e0262420b12858488" + integrity sha512-f/wzC2QaWBs7t9IYqB4T3sR1xviIViXJRJTWBlx2Gf3g0Xi5vI7Yy4koXQ1c9OYDGHN9sBy1DQ2AB8fqZBWhUg== + +hpack.js@^2.1.6: + version "2.1.6" + resolved "https://registry.yarnpkg.com/hpack.js/-/hpack.js-2.1.6.tgz#87774c0949e513f42e84575b3c45681fade2a0b2" + integrity sha1-h3dMCUnlE/QuhFdbPEVoH63ioLI= + dependencies: + inherits "^2.0.1" + obuf "^1.0.0" + readable-stream "^2.0.1" + wbuf "^1.1.0" + +hsl-regex@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/hsl-regex/-/hsl-regex-1.0.0.tgz#d49330c789ed819e276a4c0d272dffa30b18fe6e" + integrity sha1-1JMwx4ntgZ4nakwNJy3/owsY/m4= + +hsla-regex@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/hsla-regex/-/hsla-regex-1.0.0.tgz#c1ce7a3168c8c6614033a4b5f7877f3b225f9c38" + integrity sha1-wc56MWjIxmFAM6S194d/OyJfnDg= + +html-comment-regex@^1.1.0: + version "1.1.2" + resolved "https://registry.yarnpkg.com/html-comment-regex/-/html-comment-regex-1.1.2.tgz#97d4688aeb5c81886a364faa0cad1dda14d433a7" + integrity sha512-P+M65QY2JQ5Y0G9KKdlDpo0zK+/OHptU5AaBwUfAIDJZk1MYf32Frm84EcOytfJE0t5JvkAnKlmjsXDnWzCJmQ== + +html-entities@^1.3.1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/html-entities/-/html-entities-1.3.1.tgz#fb9a1a4b5b14c5daba82d3e34c6ae4fe701a0e44" + integrity sha512-rhE/4Z3hIhzHAUKbW8jVcCyuT5oJCXXqhN/6mXXVCpzTmvJnoH2HL/bt3EZ6p55jbFJBeAe1ZNpL5BugLujxNA== + +html-minifier@^3.2.3: + version "3.5.21" + resolved "https://registry.yarnpkg.com/html-minifier/-/html-minifier-3.5.21.tgz#d0040e054730e354db008463593194015212d20c" + integrity sha512-LKUKwuJDhxNa3uf/LPR/KVjm/l3rBqtYeCOAekvG8F1vItxMUpueGd94i/asDDr8/1u7InxzFA5EeGjhhG5mMA== + dependencies: + camel-case "3.0.x" + clean-css "4.2.x" + commander "2.17.x" + he "1.2.x" + param-case "2.1.x" + relateurl "0.2.x" + uglify-js "3.4.x" + +html-tags@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/html-tags/-/html-tags-2.0.0.tgz#10b30a386085f43cede353cc8fa7cb0deeea668b" + integrity sha1-ELMKOGCF9Dzt41PMj6fLDe7qZos= + +html-webpack-plugin@^3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/html-webpack-plugin/-/html-webpack-plugin-3.2.0.tgz#b01abbd723acaaa7b37b6af4492ebda03d9dd37b" + integrity sha1-sBq71yOsqqeze2r0SS69oD2d03s= + dependencies: + html-minifier "^3.2.3" + loader-utils "^0.2.16" + lodash "^4.17.3" + pretty-error "^2.0.2" + tapable "^1.0.0" + toposort "^1.0.0" + util.promisify "1.0.0" + +htmlparser2@^3.3.0: + version "3.10.1" + resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-3.10.1.tgz#bd679dc3f59897b6a34bb10749c855bb53a9392f" + integrity sha512-IgieNijUMbkDovyoKObU1DUhm1iwNYE/fuifEoEHfd1oZKZDaONBSkal7Y01shxsM49R4XaMdGez3WnF9UfiCQ== + dependencies: + domelementtype "^1.3.1" + domhandler "^2.3.0" + domutils "^1.5.1" + entities "^1.1.1" + inherits "^2.0.1" + readable-stream "^3.1.1" + +http-deceiver@^1.2.7: + version "1.2.7" + resolved "https://registry.yarnpkg.com/http-deceiver/-/http-deceiver-1.2.7.tgz#fa7168944ab9a519d337cb0bec7284dc3e723d87" + integrity sha1-+nFolEq5pRnTN8sL7HKE3D5yPYc= + +http-errors@1.7.2: + version "1.7.2" + resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.7.2.tgz#4f5029cf13239f31036e5b2e55292bcfbcc85c8f" + integrity sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg== + dependencies: + depd "~1.1.2" + inherits "2.0.3" + setprototypeof "1.1.1" + statuses ">= 1.5.0 < 2" + toidentifier "1.0.0" + +http-errors@~1.6.2: + version "1.6.3" + resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.6.3.tgz#8b55680bb4be283a0b5bf4ea2e38580be1d9320d" + integrity sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0= + dependencies: + depd "~1.1.2" + inherits "2.0.3" + setprototypeof "1.1.0" + statuses ">= 1.4.0 < 2" + +http-errors@~1.7.2: + version "1.7.3" + resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.7.3.tgz#6c619e4f9c60308c38519498c14fbb10aacebb06" + integrity sha512-ZTTX0MWrsQ2ZAhA1cejAwDLycFsd7I7nVtnkT3Ol0aqodaKW+0CTZDQ1uBv5whptCnc8e8HeRRJxRs0kmm/Qfw== + dependencies: + depd "~1.1.2" + inherits "2.0.4" + setprototypeof "1.1.1" + statuses ">= 1.5.0 < 2" + toidentifier "1.0.0" + +http-parser-js@>=0.5.1: + version "0.5.2" + resolved "https://registry.yarnpkg.com/http-parser-js/-/http-parser-js-0.5.2.tgz#da2e31d237b393aae72ace43882dd7e270a8ff77" + integrity sha512-opCO9ASqg5Wy2FNo7A0sxy71yGbbkJJXLdgMK04Tcypw9jr2MgWbyubb0+WdmDmGnFflO7fRbqbaihh/ENDlRQ== + +http-proxy-middleware@0.19.1: + version "0.19.1" + resolved "https://registry.yarnpkg.com/http-proxy-middleware/-/http-proxy-middleware-0.19.1.tgz#183c7dc4aa1479150306498c210cdaf96080a43a" + integrity sha512-yHYTgWMQO8VvwNS22eLLloAkvungsKdKTLO8AJlftYIKNfJr3GK3zK0ZCfzDDGUBttdGc8xFy1mCitvNKQtC3Q== + dependencies: + http-proxy "^1.17.0" + is-glob "^4.0.0" + lodash "^4.17.11" + micromatch "^3.1.10" + +http-proxy@^1.17.0: + version "1.18.1" + resolved "https://registry.yarnpkg.com/http-proxy/-/http-proxy-1.18.1.tgz#401541f0534884bbf95260334e72f88ee3976549" + integrity sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ== + dependencies: + eventemitter3 "^4.0.0" + follow-redirects "^1.0.0" + requires-port "^1.0.0" + +http-signature@~1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.2.0.tgz#9aecd925114772f3d95b65a60abb8f7c18fbace1" + integrity sha1-muzZJRFHcvPZW2WmCruPfBj7rOE= + dependencies: + assert-plus "^1.0.0" + jsprim "^1.2.2" + sshpk "^1.7.0" + +https-browserify@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/https-browserify/-/https-browserify-1.0.0.tgz#ec06c10e0a34c0f2faf199f7fd7fc78fffd03c73" + integrity sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM= + +human-signals@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-1.1.1.tgz#c5b1cd14f50aeae09ab6c59fe63ba3395fe4dfa3" + integrity sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw== + +iconv-lite@0.4.24, iconv-lite@^0.4.24: + version "0.4.24" + resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" + integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== + dependencies: + safer-buffer ">= 2.1.2 < 3" + +icss-utils@^4.0.0, icss-utils@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/icss-utils/-/icss-utils-4.1.1.tgz#21170b53789ee27447c2f47dd683081403f9a467" + integrity sha512-4aFq7wvWyMHKgxsH8QQtGpvbASCf+eM3wPRLI6R+MgAnTCZ6STYsRvttLvRWK0Nfif5piF394St3HeJDaljGPA== + dependencies: + postcss "^7.0.14" + +ieee754@^1.1.4: + version "1.1.13" + resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.1.13.tgz#ec168558e95aa181fd87d37f55c32bbcb6708b84" + integrity sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg== + +iferr@^0.1.5: + version "0.1.5" + resolved "https://registry.yarnpkg.com/iferr/-/iferr-0.1.5.tgz#c60eed69e6d8fdb6b3104a1fcbca1c192dc5b501" + integrity sha1-xg7taebY/bazEEofy8ocGS3FtQE= + +ignore@^3.3.5: + version "3.3.10" + resolved "https://registry.yarnpkg.com/ignore/-/ignore-3.3.10.tgz#0a97fb876986e8081c631160f8f9f389157f0043" + integrity sha512-Pgs951kaMm5GXP7MOvxERINe3gsaVjUWFm+UZPSq9xYriQAksyhg0csnS0KXSNRD5NmNdapXEpjxG49+AKh/ug== + +ignore@^4.0.3, ignore@^4.0.6: + version "4.0.6" + resolved "https://registry.yarnpkg.com/ignore/-/ignore-4.0.6.tgz#750e3db5862087b4737ebac8207ffd1ef27b25fc" + integrity sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg== + +import-cwd@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/import-cwd/-/import-cwd-2.1.0.tgz#aa6cf36e722761285cb371ec6519f53e2435b0a9" + integrity sha1-qmzzbnInYShcs3HsZRn1PiQ1sKk= + dependencies: + import-from "^2.1.0" + +import-fresh@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-2.0.0.tgz#d81355c15612d386c61f9ddd3922d4304822a546" + integrity sha1-2BNVwVYS04bGH53dOSLUMEgipUY= + dependencies: + caller-path "^2.0.0" + resolve-from "^3.0.0" + +import-fresh@^3.0.0: + version "3.2.1" + resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.2.1.tgz#633ff618506e793af5ac91bf48b72677e15cbe66" + integrity sha512-6e1q1cnWP2RXD9/keSkxHScg508CdXqXWgWBaETNhyuBFz+kUZlKboh+ISK+bU++DmbHimVBrOz/zzPe0sZ3sQ== + dependencies: + parent-module "^1.0.0" + resolve-from "^4.0.0" + +import-from@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/import-from/-/import-from-2.1.0.tgz#335db7f2a7affd53aaa471d4b8021dee36b7f3b1" + integrity sha1-M1238qev/VOqpHHUuAId7ja387E= + dependencies: + resolve-from "^3.0.0" + +import-local@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/import-local/-/import-local-2.0.0.tgz#55070be38a5993cf18ef6db7e961f5bee5c5a09d" + integrity sha512-b6s04m3O+s3CGSbqDIyP4R6aAwAeYlVq9+WUWep6iHa8ETRf9yei1U48C5MmfJmV9AiLYYBKPMq/W+/WRpQmCQ== + dependencies: + pkg-dir "^3.0.0" + resolve-cwd "^2.0.0" + +imurmurhash@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" + integrity sha1-khi5srkoojixPcT7a21XbyMUU+o= + +indent-string@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-4.0.0.tgz#624f8f4497d619b2d9768531d58f4122854d7251" + integrity sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg== + +indexes-of@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/indexes-of/-/indexes-of-1.0.1.tgz#f30f716c8e2bd346c7b67d3df3915566a7c05607" + integrity sha1-8w9xbI4r00bHtn0985FVZqfAVgc= + +infer-owner@^1.0.3, infer-owner@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/infer-owner/-/infer-owner-1.0.4.tgz#c4cefcaa8e51051c2a40ba2ce8a3d27295af9467" + integrity sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A== + +inflight@^1.0.4: + version "1.0.6" + resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" + integrity sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk= + dependencies: + once "^1.3.0" + wrappy "1" + +inherits@2, inherits@2.0.4, inherits@^2.0.1, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.1, inherits@~2.0.3: + version "2.0.4" + resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" + integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== + +inherits@2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.1.tgz#b17d08d326b4423e568eff719f91b0b1cbdf69f1" + integrity sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE= + +inherits@2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" + integrity sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4= + +inquirer@^7.0.0, inquirer@^7.1.0: + version "7.3.3" + resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-7.3.3.tgz#04d176b2af04afc157a83fd7c100e98ee0aad003" + integrity sha512-JG3eIAj5V9CwcGvuOmoo6LB9kbAYT8HXffUl6memuszlwDC/qvFAJw49XJ5NROSFNPxp3iQg1GqkFhaY/CR0IA== + dependencies: + ansi-escapes "^4.2.1" + chalk "^4.1.0" + cli-cursor "^3.1.0" + cli-width "^3.0.0" + external-editor "^3.0.3" + figures "^3.0.0" + lodash "^4.17.19" + mute-stream "0.0.8" + run-async "^2.4.0" + rxjs "^6.6.0" + string-width "^4.1.0" + strip-ansi "^6.0.0" + through "^2.3.6" + +internal-ip@^4.3.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/internal-ip/-/internal-ip-4.3.0.tgz#845452baad9d2ca3b69c635a137acb9a0dad0907" + integrity sha512-S1zBo1D6zcsyuC6PMmY5+55YMILQ9av8lotMx447Bq6SAgo/sDK6y6uUKmuYhW7eacnIhFfsPmCNYdDzsnnDCg== + dependencies: + default-gateway "^4.2.0" + ipaddr.js "^1.9.0" + +invariant@^2.2.2, invariant@^2.2.4: + version "2.2.4" + resolved "https://registry.yarnpkg.com/invariant/-/invariant-2.2.4.tgz#610f3c92c9359ce1db616e538008d23ff35158e6" + integrity sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA== + dependencies: + loose-envify "^1.0.0" + +ip-regex@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/ip-regex/-/ip-regex-2.1.0.tgz#fa78bf5d2e6913c911ce9f819ee5146bb6d844e9" + integrity sha1-+ni/XS5pE8kRzp+BnuUUa7bYROk= + +ip@^1.1.0, ip@^1.1.5: + version "1.1.5" + resolved "https://registry.yarnpkg.com/ip/-/ip-1.1.5.tgz#bdded70114290828c0a039e72ef25f5aaec4354a" + integrity sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo= + +ipaddr.js@1.9.1, ipaddr.js@^1.9.0: + version "1.9.1" + resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.9.1.tgz#bff38543eeb8984825079ff3a2a8e6cbd46781b3" + integrity sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g== + +is-absolute-url@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-absolute-url/-/is-absolute-url-2.1.0.tgz#50530dfb84fcc9aa7dbe7852e83a37b93b9f2aa6" + integrity sha1-UFMN+4T8yap9vnhS6Do3uTufKqY= + +is-absolute-url@^3.0.3: + version "3.0.3" + resolved "https://registry.yarnpkg.com/is-absolute-url/-/is-absolute-url-3.0.3.tgz#96c6a22b6a23929b11ea0afb1836c36ad4a5d698" + integrity sha512-opmNIX7uFnS96NtPmhWQgQx6/NYFgsUXYMllcfzwWKUMwfo8kku1TvE6hkNcH+Q1ts5cMVrsY7j0bxXQDciu9Q== + +is-accessor-descriptor@^0.1.6: + version "0.1.6" + resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz#a9e12cb3ae8d876727eeef3843f8a0897b5c98d6" + integrity sha1-qeEss66Nh2cn7u84Q/igiXtcmNY= + dependencies: + kind-of "^3.0.2" + +is-accessor-descriptor@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz#169c2f6d3df1f992618072365c9b0ea1f6878656" + integrity sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ== + dependencies: + kind-of "^6.0.0" + +is-arguments@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/is-arguments/-/is-arguments-1.0.4.tgz#3faf966c7cba0ff437fb31f6250082fcf0448cf3" + integrity sha512-xPh0Rmt8NE65sNzvyUmWgI1tz3mKq74lGA0mL8LYZcoIzKOzDh6HmrYm3d18k60nHerC8A9Km8kYu87zfSFnLA== + +is-arrayish@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" + integrity sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0= + +is-arrayish@^0.3.1: + version "0.3.2" + resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.3.2.tgz#4574a2ae56f7ab206896fb431eaeed066fdf8f03" + integrity sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ== + +is-binary-path@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-1.0.1.tgz#75f16642b480f187a711c814161fd3a4a7655898" + integrity sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg= + dependencies: + binary-extensions "^1.0.0" + +is-binary-path@~2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09" + integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw== + dependencies: + binary-extensions "^2.0.0" + +is-buffer@^1.1.5: + version "1.1.6" + resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be" + integrity sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w== + +is-callable@^1.1.4, is-callable@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.0.tgz#83336560b54a38e35e3a2df7afd0454d691468bb" + integrity sha512-pyVD9AaGLxtg6srb2Ng6ynWJqkHU9bEM087AKck0w8QwDarTfNcpIYoU8x8Hv2Icm8u6kFJM18Dag8lyqGkviw== + +is-ci@^1.0.10: + version "1.2.1" + resolved "https://registry.yarnpkg.com/is-ci/-/is-ci-1.2.1.tgz#e3779c8ee17fccf428488f6e281187f2e632841c" + integrity sha512-s6tfsaQaQi3JNciBH6shVqEDvhGut0SUXr31ag8Pd8BBbVVlcGfWhpPmEOoM6RJ5TFhbypvf5yyRw/VXW1IiWg== + dependencies: + ci-info "^1.5.0" + +is-color-stop@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-color-stop/-/is-color-stop-1.1.0.tgz#cfff471aee4dd5c9e158598fbe12967b5cdad345" + integrity sha1-z/9HGu5N1cnhWFmPvhKWe1za00U= + dependencies: + css-color-names "^0.0.4" + hex-color-regex "^1.1.0" + hsl-regex "^1.0.0" + hsla-regex "^1.0.0" + rgb-regex "^1.0.1" + rgba-regex "^1.0.0" + +is-data-descriptor@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz#0b5ee648388e2c860282e793f1856fec3f301b56" + integrity sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y= + dependencies: + kind-of "^3.0.2" + +is-data-descriptor@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz#d84876321d0e7add03990406abbbbd36ba9268c7" + integrity sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ== + dependencies: + kind-of "^6.0.0" + +is-date-object@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.2.tgz#bda736f2cd8fd06d32844e7743bfa7494c3bfd7e" + integrity sha512-USlDT524woQ08aoZFzh3/Z6ch9Y/EWXEHQ/AaRN0SkKq4t2Jw2R2339tSXmwuVoY7LLlBCbOIlx2myP/L5zk0g== + +is-descriptor@^0.1.0: + version "0.1.6" + resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-0.1.6.tgz#366d8240dde487ca51823b1ab9f07a10a78251ca" + integrity sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg== + dependencies: + is-accessor-descriptor "^0.1.6" + is-data-descriptor "^0.1.4" + kind-of "^5.0.0" + +is-descriptor@^1.0.0, is-descriptor@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-1.0.2.tgz#3b159746a66604b04f8c81524ba365c5f14d86ec" + integrity sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg== + dependencies: + is-accessor-descriptor "^1.0.0" + is-data-descriptor "^1.0.0" + kind-of "^6.0.2" + +is-directory@^0.3.1: + version "0.3.1" + resolved "https://registry.yarnpkg.com/is-directory/-/is-directory-0.3.1.tgz#61339b6f2475fc772fd9c9d83f5c8575dc154ae1" + integrity sha1-YTObbyR1/Hcv2cnYP1yFddwVSuE= + +is-docker@^2.0.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/is-docker/-/is-docker-2.1.1.tgz#4125a88e44e450d384e09047ede71adc2d144156" + integrity sha512-ZOoqiXfEwtGknTiuDEy8pN2CfE3TxMHprvNer1mXiqwkOT77Rw3YVrUQ52EqAOU3QAWDQ+bQdx7HJzrv7LS2Hw== + +is-extendable@^0.1.0, is-extendable@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89" + integrity sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik= + +is-extendable@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-1.0.1.tgz#a7470f9e426733d81bd81e1155264e3a3507cab4" + integrity sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA== + dependencies: + is-plain-object "^2.0.4" + +is-extglob@^2.1.0, is-extglob@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" + integrity sha1-qIwCU1eR8C7TfHahueqXc8gz+MI= + +is-fullwidth-code-point@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f" + integrity sha1-o7MKXE8ZkYMWeqq5O+764937ZU8= + +is-fullwidth-code-point@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" + integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== + +is-glob@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-3.1.0.tgz#7ba5ae24217804ac70707b96922567486cc3e84a" + integrity sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo= + dependencies: + is-extglob "^2.1.0" + +is-glob@^4.0.0, is-glob@^4.0.1, is-glob@~4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.1.tgz#7567dbe9f2f5e2467bc77ab83c4a29482407a5dc" + integrity sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg== + dependencies: + is-extglob "^2.1.1" + +is-number@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/is-number/-/is-number-3.0.0.tgz#24fd6201a4782cf50561c810276afc7d12d71195" + integrity sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU= + dependencies: + kind-of "^3.0.2" + +is-number@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" + integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== + +is-obj@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-2.0.0.tgz#473fb05d973705e3fd9620545018ca8e22ef4982" + integrity sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w== + +is-path-cwd@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/is-path-cwd/-/is-path-cwd-2.2.0.tgz#67d43b82664a7b5191fd9119127eb300048a9fdb" + integrity sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ== + +is-path-in-cwd@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-path-in-cwd/-/is-path-in-cwd-2.1.0.tgz#bfe2dca26c69f397265a4009963602935a053acb" + integrity sha512-rNocXHgipO+rvnP6dk3zI20RpOtrAM/kzbB258Uw5BWr3TpXi861yzjo16Dn4hUox07iw5AyeMLHWsujkjzvRQ== + dependencies: + is-path-inside "^2.1.0" + +is-path-inside@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-2.1.0.tgz#7c9810587d659a40d27bcdb4d5616eab059494b2" + integrity sha512-wiyhTzfDWsvwAW53OBWF5zuvaOGlZ6PwYxAbPVDhpm+gM09xKQGjBq/8uYN12aDvMxnAnq3dxTyoSoRNmg5YFg== + dependencies: + path-is-inside "^1.0.2" + +is-plain-obj@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-1.1.0.tgz#71a50c8429dfca773c92a390a4a03b39fcd51d3e" + integrity sha1-caUMhCnfync8kqOQpKA7OfzVHT4= + +is-plain-object@^2.0.3, is-plain-object@^2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-2.0.4.tgz#2c163b3fafb1b606d9d17928f05c2a1c38e07677" + integrity sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og== + dependencies: + isobject "^3.0.1" + +is-regex@^1.0.4, is-regex@^1.1.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.1.1.tgz#c6f98aacc546f6cec5468a07b7b153ab564a57b9" + integrity sha512-1+QkEcxiLlB7VEyFtyBg94e08OAsvq7FUBgApTq/w2ymCLyKJgDPsybBENVtA7XCQEgEXxKPonG+mvYRxh/LIg== + dependencies: + has-symbols "^1.0.1" + +is-resolvable@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-resolvable/-/is-resolvable-1.1.0.tgz#fb18f87ce1feb925169c9a407c19318a3206ed88" + integrity sha512-qgDYXFSR5WvEfuS5dMj6oTMEbrrSaM0CrFk2Yiq/gXnBvD9pMa2jGXxyhGLfvhZpuMZe18CJpFxAt3CRs42NMg== + +is-stream@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44" + integrity sha1-EtSj3U5o4Lec6428hBc66A2RykQ= + +is-stream@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-2.0.0.tgz#bde9c32680d6fae04129d6ac9d921ce7815f78e3" + integrity sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw== + +is-svg@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/is-svg/-/is-svg-3.0.0.tgz#9321dbd29c212e5ca99c4fa9794c714bcafa2f75" + integrity sha512-gi4iHK53LR2ujhLVVj+37Ykh9GLqYHX6JOVXbLAucaG/Cqw9xwdFOjDM2qeifLs1sF1npXXFvDu0r5HNgCMrzQ== + dependencies: + html-comment-regex "^1.1.0" + +is-symbol@^1.0.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.3.tgz#38e1014b9e6329be0de9d24a414fd7441ec61937" + integrity sha512-OwijhaRSgqvhm/0ZdAcXNZt9lYdKFpcRDT5ULUuYXPoT794UNOdU+gpT6Rzo7b4V2HUl/op6GqY894AZwv9faQ== + dependencies: + has-symbols "^1.0.1" + +is-typedarray@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" + integrity sha1-5HnICFjfDBsR3dppQPlgEfzaSpo= + +is-windows@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-windows/-/is-windows-1.0.2.tgz#d1850eb9791ecd18e6182ce12a30f396634bb19d" + integrity sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA== + +is-wsl@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-1.1.0.tgz#1f16e4aa22b04d1336b66188a66af3c600c3a66d" + integrity sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0= + +is-wsl@^2.1.1: + version "2.2.0" + resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-2.2.0.tgz#74a4c76e77ca9fd3f932f290c17ea326cd157271" + integrity sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww== + dependencies: + is-docker "^2.0.0" + +isarray@1.0.0, isarray@^1.0.0, isarray@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" + integrity sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE= + +isexe@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" + integrity sha1-6PvzdNxVb/iUehDcsFctYz8s+hA= + +isobject@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/isobject/-/isobject-2.1.0.tgz#f065561096a3f1da2ef46272f815c840d87e0c89" + integrity sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk= + dependencies: + isarray "1.0.0" + +isobject@^3.0.0, isobject@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df" + integrity sha1-TkMekrEalzFjaqH5yNHMvP2reN8= + +isstream@~0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" + integrity sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo= + +javascript-stringify@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/javascript-stringify/-/javascript-stringify-2.0.1.tgz#6ef358035310e35d667c675ed63d3eb7c1aa19e5" + integrity sha512-yV+gqbd5vaOYjqlbk16EG89xB5udgjqQF3C5FAORDg4f/IS1Yc5ERCv5e/57yBcfJYw05V5JyIXabhwb75Xxow== + +jest-worker@^25.4.0: + version "25.5.0" + resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-25.5.0.tgz#2611d071b79cea0f43ee57a3d118593ac1547db1" + integrity sha512-/dsSmUkIy5EBGfv/IjjqmFxrNAUpBERfGs1oHROyD7yxjG/w+t0GOJDX8O1k32ySmd7+a5IhnJU2qQFcJ4n1vw== + dependencies: + merge-stream "^2.0.0" + supports-color "^7.0.0" + +js-message@1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/js-message/-/js-message-1.0.5.tgz#2300d24b1af08e89dd095bc1a4c9c9cfcb892d15" + integrity sha1-IwDSSxrwjondCVvBpMnJz8uJLRU= + +js-queue@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/js-queue/-/js-queue-2.0.0.tgz#362213cf860f468f0125fc6c96abc1742531f948" + integrity sha1-NiITz4YPRo8BJfxslqvBdCUx+Ug= + dependencies: + easy-stack "^1.0.0" + +"js-tokens@^3.0.0 || ^4.0.0", js-tokens@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" + integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== + +js-yaml@^3.13.1: + version "3.14.0" + resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.14.0.tgz#a7a34170f26a21bb162424d8adacb4113a69e482" + integrity sha512-/4IbIeHcD9VMHFqDR/gQ7EdZdLimOvW2DdcxFjdyyZ9NsbS+ccrXqVWDtab/lRl5AlUqmpBx8EhPaWR+OtY17A== + dependencies: + argparse "^1.0.7" + esprima "^4.0.0" + +jsbn@~0.1.0: + version "0.1.1" + resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513" + integrity sha1-peZUwuWi3rXyAdls77yoDA7y9RM= + +jsesc@^2.5.1: + version "2.5.2" + resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-2.5.2.tgz#80564d2e483dacf6e8ef209650a67df3f0c283a4" + integrity sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA== + +jsesc@~0.5.0: + version "0.5.0" + resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-0.5.0.tgz#e7dee66e35d6fc16f710fe91d5cf69f70f08911d" + integrity sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0= + +json-parse-better-errors@^1.0.1, json-parse-better-errors@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz#bb867cfb3450e69107c131d1c514bab3dc8bcaa9" + integrity sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw== + +json-schema-traverse@^0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" + integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== + +json-schema@0.2.3: + version "0.2.3" + resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.2.3.tgz#b480c892e59a2f05954ce727bd3f2a4e882f9e13" + integrity sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM= + +json-stable-stringify-without-jsonify@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651" + integrity sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE= + +json-stringify-safe@~5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" + integrity sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus= + +json3@^3.3.2: + version "3.3.3" + resolved "https://registry.yarnpkg.com/json3/-/json3-3.3.3.tgz#7fc10e375fc5ae42c4705a5cc0aa6f62be305b81" + integrity sha512-c7/8mbUsKigAbLkD5B010BK4D9LZm7A1pNItkEwiUZRpIN66exu/e7YQWysGun+TRKaJp8MhemM+VkfWv42aCA== + +json5@^0.5.0: + version "0.5.1" + resolved "https://registry.yarnpkg.com/json5/-/json5-0.5.1.tgz#1eade7acc012034ad84e2396767ead9fa5495821" + integrity sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE= + +json5@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/json5/-/json5-1.0.1.tgz#779fb0018604fa854eacbf6252180d83543e3dbe" + integrity sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow== + dependencies: + minimist "^1.2.0" + +json5@^2.1.2: + version "2.1.3" + resolved "https://registry.yarnpkg.com/json5/-/json5-2.1.3.tgz#c9b0f7fa9233bfe5807fe66fcf3a5617ed597d43" + integrity sha512-KXPvOm8K9IJKFM0bmdn8QXh7udDh1g/giieX0NLCaMnb4hEiVFqnop2ImTXCc5e0/oHz3LTqmHGtExn5hfMkOA== + dependencies: + minimist "^1.2.5" + +jsonfile@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-4.0.0.tgz#8771aae0799b64076b76640fca058f9c10e33ecb" + integrity sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss= + optionalDependencies: + graceful-fs "^4.1.6" + +jsprim@^1.2.2: + version "1.4.1" + resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.4.1.tgz#313e66bc1e5cc06e438bc1b7499c2e5c56acb6a2" + integrity sha1-MT5mvB5cwG5Di8G3SZwuXFastqI= + dependencies: + assert-plus "1.0.0" + extsprintf "1.3.0" + json-schema "0.2.3" + verror "1.10.0" + +killable@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/killable/-/killable-1.0.1.tgz#4c8ce441187a061c7474fb87ca08e2a638194892" + integrity sha512-LzqtLKlUwirEUyl/nicirVmNiPvYs7l5n8wOPP7fyJVpUPkvCnW/vuiXGpylGUlnPDnB7311rARzAt3Mhswpjg== + +kind-of@^3.0.2, kind-of@^3.0.3, kind-of@^3.2.0: + version "3.2.2" + resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-3.2.2.tgz#31ea21a734bab9bbb0f32466d893aea51e4a3c64" + integrity sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ= + dependencies: + is-buffer "^1.1.5" + +kind-of@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-4.0.0.tgz#20813df3d712928b207378691a45066fae72dd57" + integrity sha1-IIE989cSkosgc3hpGkUGb65y3Vc= + dependencies: + is-buffer "^1.1.5" + +kind-of@^5.0.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-5.1.0.tgz#729c91e2d857b7a419a1f9aa65685c4c33f5845d" + integrity sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw== + +kind-of@^6.0.0, kind-of@^6.0.2: + version "6.0.3" + resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.3.tgz#07c05034a6c349fa06e24fa35aa76db4580ce4dd" + integrity sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw== + +launch-editor-middleware@^2.2.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/launch-editor-middleware/-/launch-editor-middleware-2.2.1.tgz#e14b07e6c7154b0a4b86a0fd345784e45804c157" + integrity sha512-s0UO2/gEGiCgei3/2UN3SMuUj1phjQN8lcpnvgLSz26fAzNWPQ6Nf/kF5IFClnfU2ehp6LrmKdMU/beveO+2jg== + dependencies: + launch-editor "^2.2.1" + +launch-editor@^2.2.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/launch-editor/-/launch-editor-2.2.1.tgz#871b5a3ee39d6680fcc26d37930b6eeda89db0ca" + integrity sha512-On+V7K2uZK6wK7x691ycSUbLD/FyKKelArkbaAMSSJU8JmqmhwN2+mnJDNINuJWSrh2L0kDk+ZQtbC/gOWUwLw== + dependencies: + chalk "^2.3.0" + shell-quote "^1.6.1" + +leven@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/leven/-/leven-3.1.0.tgz#77891de834064cccba82ae7842bb6b14a13ed7f2" + integrity sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A== + +levenary@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/levenary/-/levenary-1.1.1.tgz#842a9ee98d2075aa7faeedbe32679e9205f46f77" + integrity sha512-mkAdOIt79FD6irqjYSs4rdbnlT5vRonMEvBVPVb3XmevfS8kgRXwfes0dhPdEtzTWD/1eNE/Bm/G1iRt6DcnQQ== + dependencies: + leven "^3.1.0" + +levn@^0.3.0, levn@~0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/levn/-/levn-0.3.0.tgz#3b09924edf9f083c0490fdd4c0bc4421e04764ee" + integrity sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4= + dependencies: + prelude-ls "~1.1.2" + type-check "~0.3.2" + +lines-and-columns@^1.1.6: + version "1.1.6" + resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-1.1.6.tgz#1c00c743b433cd0a4e80758f7b64a57440d9ff00" + integrity sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA= + +loader-fs-cache@^1.0.0: + version "1.0.3" + resolved "https://registry.yarnpkg.com/loader-fs-cache/-/loader-fs-cache-1.0.3.tgz#f08657646d607078be2f0a032f8bd69dd6f277d9" + integrity sha512-ldcgZpjNJj71n+2Mf6yetz+c9bM4xpKtNds4LbqXzU/PTdeAX0g3ytnU1AJMEcTk2Lex4Smpe3Q/eCTsvUBxbA== + dependencies: + find-cache-dir "^0.1.1" + mkdirp "^0.5.1" + +loader-runner@^2.3.1, loader-runner@^2.4.0: + version "2.4.0" + resolved "https://registry.yarnpkg.com/loader-runner/-/loader-runner-2.4.0.tgz#ed47066bfe534d7e84c4c7b9998c2a75607d9357" + integrity sha512-Jsmr89RcXGIwivFY21FcRrisYZfvLMTWx5kOLc+JTxtpBOG6xML0vzbc6SEQG2FO9/4Fc3wW4LVcB5DmGflaRw== + +loader-utils@^0.2.16: + version "0.2.17" + resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-0.2.17.tgz#f86e6374d43205a6e6c60e9196f17c0299bfb348" + integrity sha1-+G5jdNQyBabmxg6RlvF8Apm/s0g= + dependencies: + big.js "^3.1.3" + emojis-list "^2.0.0" + json5 "^0.5.0" + object-assign "^4.0.1" + +loader-utils@^1.0.2, loader-utils@^1.1.0, loader-utils@^1.2.3, loader-utils@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-1.4.0.tgz#c579b5e34cb34b1a74edc6c1fb36bfa371d5a613" + integrity sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA== + dependencies: + big.js "^5.2.2" + emojis-list "^3.0.0" + json5 "^1.0.1" + +locate-path@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-3.0.0.tgz#dbec3b3ab759758071b58fe59fc41871af21400e" + integrity sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A== + dependencies: + p-locate "^3.0.0" + path-exists "^3.0.0" + +locate-path@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-5.0.0.tgz#1afba396afd676a6d42504d0a67a3a7eb9f62aa0" + integrity sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g== + dependencies: + p-locate "^4.1.0" + +lodash.defaultsdeep@^4.6.1: + version "4.6.1" + resolved "https://registry.yarnpkg.com/lodash.defaultsdeep/-/lodash.defaultsdeep-4.6.1.tgz#512e9bd721d272d94e3d3a63653fa17516741ca6" + integrity sha512-3j8wdDzYuWO3lM3Reg03MuQR957t287Rpcxp1njpEa8oDrikb+FwGdW3n+FELh/A6qib6yPit0j/pv9G/yeAqA== + +lodash.kebabcase@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/lodash.kebabcase/-/lodash.kebabcase-4.1.1.tgz#8489b1cb0d29ff88195cceca448ff6d6cc295c36" + integrity sha1-hImxyw0p/4gZXM7KRI/21swpXDY= + +lodash.mapvalues@^4.6.0: + version "4.6.0" + resolved "https://registry.yarnpkg.com/lodash.mapvalues/-/lodash.mapvalues-4.6.0.tgz#1bafa5005de9dd6f4f26668c30ca37230cc9689c" + integrity sha1-G6+lAF3p3W9PJmaMMMo3IwzJaJw= + +lodash.memoize@^4.1.2: + version "4.1.2" + resolved "https://registry.yarnpkg.com/lodash.memoize/-/lodash.memoize-4.1.2.tgz#bcc6c49a42a2840ed997f323eada5ecd182e0bfe" + integrity sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4= + +lodash.transform@^4.6.0: + version "4.6.0" + resolved "https://registry.yarnpkg.com/lodash.transform/-/lodash.transform-4.6.0.tgz#12306422f63324aed8483d3f38332b5f670547a0" + integrity sha1-EjBkIvYzJK7YSD0/ODMrX2cFR6A= + +lodash.uniq@^4.5.0: + version "4.5.0" + resolved "https://registry.yarnpkg.com/lodash.uniq/-/lodash.uniq-4.5.0.tgz#d0225373aeb652adc1bc82e4945339a842754773" + integrity sha1-0CJTc662Uq3BvILklFM5qEJ1R3M= + +lodash@^4.17.11, lodash@^4.17.14, lodash@^4.17.15, lodash@^4.17.19, lodash@^4.17.3: + version "4.17.19" + resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.19.tgz#e48ddedbe30b3321783c5b4301fbd353bc1e4a4b" + integrity sha512-JNvd8XER9GQX0v2qJgsaN/mzFCNA5BRe/j8JN9d+tWyGLSodKQHKFicdwNYzWwI3wjRnaKPsGj1XkBjx/F96DQ== + +log-symbols@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-2.2.0.tgz#5740e1c5d6f0dfda4ad9323b5332107ef6b4c40a" + integrity sha512-VeIAFslyIerEJLXHziedo2basKbMKtTw3vfn5IzG0XTjhAVEJyNHnL2p7vc+wBDSdQuUpNw3M2u6xb9QsAY5Eg== + dependencies: + chalk "^2.0.1" + +loglevel@^1.6.8: + version "1.6.8" + resolved "https://registry.yarnpkg.com/loglevel/-/loglevel-1.6.8.tgz#8a25fb75d092230ecd4457270d80b54e28011171" + integrity sha512-bsU7+gc9AJ2SqpzxwU3+1fedl8zAntbtC5XYlt3s2j1hJcn2PsXSmgN8TaLG/J1/2mod4+cE/3vNL70/c1RNCA== + +loose-envify@^1.0.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf" + integrity sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q== + dependencies: + js-tokens "^3.0.0 || ^4.0.0" + +lower-case@^1.1.1: + version "1.1.4" + resolved "https://registry.yarnpkg.com/lower-case/-/lower-case-1.1.4.tgz#9a2cabd1b9e8e0ae993a4bf7d5875c39c42e8eac" + integrity sha1-miyr0bno4K6ZOkv31YdcOcQujqw= + +lru-cache@^4.0.1, lru-cache@^4.1.2: + version "4.1.5" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-4.1.5.tgz#8bbe50ea85bed59bc9e33dcab8235ee9bcf443cd" + integrity sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g== + dependencies: + pseudomap "^1.0.2" + yallist "^2.1.2" + +lru-cache@^5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-5.1.1.tgz#1da27e6710271947695daf6848e847f01d84b920" + integrity sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w== + dependencies: + yallist "^3.0.2" + +make-dir@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-2.1.0.tgz#5f0310e18b8be898cc07009295a30ae41e91e6f5" + integrity sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA== + dependencies: + pify "^4.0.1" + semver "^5.6.0" + +make-dir@^3.0.2: + version "3.1.0" + resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-3.1.0.tgz#415e967046b3a7f1d185277d84aa58203726a13f" + integrity sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw== + dependencies: + semver "^6.0.0" + +map-cache@^0.2.2: + version "0.2.2" + resolved "https://registry.yarnpkg.com/map-cache/-/map-cache-0.2.2.tgz#c32abd0bd6525d9b051645bb4f26ac5dc98a0dbf" + integrity sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8= + +map-visit@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/map-visit/-/map-visit-1.0.0.tgz#ecdca8f13144e660f1b5bd41f12f3479d98dfb8f" + integrity sha1-7Nyo8TFE5mDxtb1B8S80edmN+48= + dependencies: + object-visit "^1.0.0" + +md5.js@^1.3.4: + version "1.3.5" + resolved "https://registry.yarnpkg.com/md5.js/-/md5.js-1.3.5.tgz#b5d07b8e3216e3e27cd728d72f70d1e6a342005f" + integrity sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg== + dependencies: + hash-base "^3.0.0" + inherits "^2.0.1" + safe-buffer "^5.1.2" + +mdn-data@2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/mdn-data/-/mdn-data-2.0.4.tgz#699b3c38ac6f1d728091a64650b65d388502fd5b" + integrity sha512-iV3XNKw06j5Q7mi6h+9vbx23Tv7JkjEVgKHW4pimwyDGWm0OIQntJJ+u1C6mg6mK1EaTv42XQ7w76yuzH7M2cA== + +mdn-data@2.0.6: + version "2.0.6" + resolved "https://registry.yarnpkg.com/mdn-data/-/mdn-data-2.0.6.tgz#852dc60fcaa5daa2e8cf6c9189c440ed3e042978" + integrity sha512-rQvjv71olwNHgiTbfPZFkJtjNMciWgswYeciZhtvWLO8bmX3TnhyA62I6sTWOyZssWHJJjY6/KiWwqQsWWsqOA== + +media-typer@0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748" + integrity sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g= + +memory-fs@^0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/memory-fs/-/memory-fs-0.4.1.tgz#3a9a20b8462523e447cfbc7e8bb80ed667bfc552" + integrity sha1-OpoguEYlI+RHz7x+i7gO1me/xVI= + dependencies: + errno "^0.1.3" + readable-stream "^2.0.1" + +memory-fs@^0.5.0: + version "0.5.0" + resolved "https://registry.yarnpkg.com/memory-fs/-/memory-fs-0.5.0.tgz#324c01288b88652966d161db77838720845a8e3c" + integrity sha512-jA0rdU5KoQMC0e6ppoNRtpp6vjFq6+NY7r8hywnC7V+1Xj/MtHwGIbB1QaK/dunyjWteJzmkpd7ooeWg10T7GA== + dependencies: + errno "^0.1.3" + readable-stream "^2.0.1" + +merge-descriptors@1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/merge-descriptors/-/merge-descriptors-1.0.1.tgz#b00aaa556dd8b44568150ec9d1b953f3f90cbb61" + integrity sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E= + +merge-source-map@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/merge-source-map/-/merge-source-map-1.1.0.tgz#2fdde7e6020939f70906a68f2d7ae685e4c8c646" + integrity sha512-Qkcp7P2ygktpMPh2mCQZaf3jhN6D3Z/qVZHSdWvQ+2Ef5HgRAPBO57A77+ENm0CPx2+1Ce/MYKi3ymqdfuqibw== + dependencies: + source-map "^0.6.1" + +merge-stream@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60" + integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w== + +merge2@^1.2.3: + version "1.4.1" + resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae" + integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== + +methods@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee" + integrity sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4= + +micromatch@^3.1.10, micromatch@^3.1.4: + version "3.1.10" + resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-3.1.10.tgz#70859bc95c9840952f359a068a3fc49f9ecfac23" + integrity sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg== + dependencies: + arr-diff "^4.0.0" + array-unique "^0.3.2" + braces "^2.3.1" + define-property "^2.0.2" + extend-shallow "^3.0.2" + extglob "^2.0.4" + fragment-cache "^0.2.1" + kind-of "^6.0.2" + nanomatch "^1.2.9" + object.pick "^1.3.0" + regex-not "^1.0.0" + snapdragon "^0.8.1" + to-regex "^3.0.2" + +miller-rabin@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/miller-rabin/-/miller-rabin-4.0.1.tgz#f080351c865b0dc562a8462966daa53543c78a4d" + integrity sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA== + dependencies: + bn.js "^4.0.0" + brorand "^1.0.1" + +mime-db@1.44.0, "mime-db@>= 1.43.0 < 2": + version "1.44.0" + resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.44.0.tgz#fa11c5eb0aca1334b4233cb4d52f10c5a6272f92" + integrity sha512-/NOTfLrsPBVeH7YtFPgsVWveuL+4SjjYxaQ1xtM1KMFj7HdxlBlxeyNLzhyJVx7r4rZGJAZ/6lkKCitSc/Nmpg== + +mime-types@^2.1.12, mime-types@~2.1.17, mime-types@~2.1.19, mime-types@~2.1.24: + version "2.1.27" + resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.27.tgz#47949f98e279ea53119f5722e0f34e529bec009f" + integrity sha512-JIhqnCasI9yD+SsmkquHBxTSEuZdQX5BuQnS2Vc7puQQQ+8yiP5AY5uWhpdv4YL4VM5c6iliiYWPgJ/nJQLp7w== + dependencies: + mime-db "1.44.0" + +mime@1.6.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1" + integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg== + +mime@^2.4.4: + version "2.4.6" + resolved "https://registry.yarnpkg.com/mime/-/mime-2.4.6.tgz#e5b407c90db442f2beb5b162373d07b69affa4d1" + integrity sha512-RZKhC3EmpBchfTGBVb8fb+RL2cWyw/32lshnsETttkBAyAUXSGHxbEJWWRXc751DrIxG1q04b8QwMbAwkRPpUA== + +mimic-fn@^1.0.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-1.2.0.tgz#820c86a39334640e99516928bd03fca88057d022" + integrity sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ== + +mimic-fn@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" + integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== + +mini-css-extract-plugin@^0.9.0: + version "0.9.0" + resolved "https://registry.yarnpkg.com/mini-css-extract-plugin/-/mini-css-extract-plugin-0.9.0.tgz#47f2cf07aa165ab35733b1fc97d4c46c0564339e" + integrity sha512-lp3GeY7ygcgAmVIcRPBVhIkf8Us7FZjA+ILpal44qLdSu11wmjKQ3d9k15lfD7pO4esu9eUIAW7qiYIBppv40A== + dependencies: + loader-utils "^1.1.0" + normalize-url "1.9.1" + schema-utils "^1.0.0" + webpack-sources "^1.1.0" + +minimalistic-assert@^1.0.0, minimalistic-assert@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz#2e194de044626d4a10e7f7fbc00ce73e83e4d5c7" + integrity sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A== + +minimalistic-crypto-utils@^1.0.0, minimalistic-crypto-utils@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz#f6c00c1c0b082246e5c4d99dfb8c7c083b2b582a" + integrity sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo= + +minimatch@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" + integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA== + dependencies: + brace-expansion "^1.1.7" + +minimist@^1.2.0, minimist@^1.2.5: + version "1.2.5" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.5.tgz#67d66014b66a6a8aaa0c083c5fd58df4e4e97602" + integrity sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw== + +minipass-collect@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/minipass-collect/-/minipass-collect-1.0.2.tgz#22b813bf745dc6edba2576b940022ad6edc8c617" + integrity sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA== + dependencies: + minipass "^3.0.0" + +minipass-flush@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/minipass-flush/-/minipass-flush-1.0.5.tgz#82e7135d7e89a50ffe64610a787953c4c4cbb373" + integrity sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw== + dependencies: + minipass "^3.0.0" + +minipass-pipeline@^1.2.2: + version "1.2.4" + resolved "https://registry.yarnpkg.com/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz#68472f79711c084657c067c5c6ad93cddea8214c" + integrity sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A== + dependencies: + minipass "^3.0.0" + +minipass@^3.0.0, minipass@^3.1.1: + version "3.1.3" + resolved "https://registry.yarnpkg.com/minipass/-/minipass-3.1.3.tgz#7d42ff1f39635482e15f9cdb53184deebd5815fd" + integrity sha512-Mgd2GdMVzY+x3IJ+oHnVM+KG3lA5c8tnabyJKmHSaG2kAGpudxuOf8ToDkhumF7UzME7DecbQE9uOZhNm7PuJg== + dependencies: + yallist "^4.0.0" + +mississippi@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/mississippi/-/mississippi-3.0.0.tgz#ea0a3291f97e0b5e8776b363d5f0a12d94c67022" + integrity sha512-x471SsVjUtBRtcvd4BzKE9kFC+/2TeWgKCgw0bZcw1b9l2X3QX5vCWgF+KaZaYm87Ss//rHnWryupDrgLvmSkA== + dependencies: + concat-stream "^1.5.0" + duplexify "^3.4.2" + end-of-stream "^1.1.0" + flush-write-stream "^1.0.0" + from2 "^2.1.0" + parallel-transform "^1.1.0" + pump "^3.0.0" + pumpify "^1.3.3" + stream-each "^1.1.0" + through2 "^2.0.0" + +mixin-deep@^1.2.0: + version "1.3.2" + resolved "https://registry.yarnpkg.com/mixin-deep/-/mixin-deep-1.3.2.tgz#1120b43dc359a785dce65b55b82e257ccf479566" + integrity sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA== + dependencies: + for-in "^1.0.2" + is-extendable "^1.0.1" + +mkdirp@^0.5.1, mkdirp@^0.5.3, mkdirp@^0.5.5, mkdirp@~0.5.1: + version "0.5.5" + resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.5.tgz#d91cefd62d1436ca0f41620e251288d420099def" + integrity sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ== + dependencies: + minimist "^1.2.5" + +move-concurrently@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/move-concurrently/-/move-concurrently-1.0.1.tgz#be2c005fda32e0b29af1f05d7c4b33214c701f92" + integrity sha1-viwAX9oy4LKa8fBdfEszIUxwH5I= + dependencies: + aproba "^1.1.1" + copy-concurrently "^1.0.0" + fs-write-stream-atomic "^1.0.8" + mkdirp "^0.5.1" + rimraf "^2.5.4" + run-queue "^1.0.3" + +ms@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" + integrity sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g= + +ms@2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.1.tgz#30a5864eb3ebb0a66f2ebe6d727af06a09d86e0a" + integrity sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg== + +ms@^2.1.1: + version "2.1.2" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" + integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== + +multicast-dns-service-types@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/multicast-dns-service-types/-/multicast-dns-service-types-1.1.0.tgz#899f11d9686e5e05cb91b35d5f0e63b773cfc901" + integrity sha1-iZ8R2WhuXgXLkbNdXw5jt3PPyQE= + +multicast-dns@^6.0.1: + version "6.2.3" + resolved "https://registry.yarnpkg.com/multicast-dns/-/multicast-dns-6.2.3.tgz#a0ec7bd9055c4282f790c3c82f4e28db3b31b229" + integrity sha512-ji6J5enbMyGRHIAkAOu3WdV8nggqviKCEKtXcOqfphZZtQrmHKycfynJ2V7eVPUA4NhJ6V7Wf4TmGbTwKE9B6g== + dependencies: + dns-packet "^1.3.1" + thunky "^1.0.2" + +mute-stream@0.0.8: + version "0.0.8" + resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.8.tgz#1630c42b2251ff81e2a283de96a5497ea92e5e0d" + integrity sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA== + +mz@^2.4.0: + version "2.7.0" + resolved "https://registry.yarnpkg.com/mz/-/mz-2.7.0.tgz#95008057a56cafadc2bc63dde7f9ff6955948e32" + integrity sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q== + dependencies: + any-promise "^1.0.0" + object-assign "^4.0.1" + thenify-all "^1.0.0" + +nan@^2.12.1: + version "2.14.1" + resolved "https://registry.yarnpkg.com/nan/-/nan-2.14.1.tgz#d7be34dfa3105b91494c3147089315eff8874b01" + integrity sha512-isWHgVjnFjh2x2yuJ/tj3JbwoHu3UC2dX5G/88Cm24yB6YopVgxvBObDY7n5xW6ExmFhJpSEQqFPvq9zaXc8Jw== + +nanomatch@^1.2.9: + version "1.2.13" + resolved "https://registry.yarnpkg.com/nanomatch/-/nanomatch-1.2.13.tgz#b87a8aa4fc0de8fe6be88895b38983ff265bd119" + integrity sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA== + dependencies: + arr-diff "^4.0.0" + array-unique "^0.3.2" + define-property "^2.0.2" + extend-shallow "^3.0.2" + fragment-cache "^0.2.1" + is-windows "^1.0.2" + kind-of "^6.0.2" + object.pick "^1.3.0" + regex-not "^1.0.0" + snapdragon "^0.8.1" + to-regex "^3.0.1" + +natural-compare@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" + integrity sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc= + +negotiator@0.6.2: + version "0.6.2" + resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.2.tgz#feacf7ccf525a77ae9634436a64883ffeca346fb" + integrity sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw== + +neo-async@^2.5.0, neo-async@^2.6.0, neo-async@^2.6.1: + version "2.6.2" + resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.2.tgz#b4aafb93e3aeb2d8174ca53cf163ab7d7308305f" + integrity sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw== + +nice-try@^1.0.4: + version "1.0.5" + resolved "https://registry.yarnpkg.com/nice-try/-/nice-try-1.0.5.tgz#a3378a7696ce7d223e88fc9b764bd7ef1089e366" + integrity sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ== + +no-case@^2.2.0: + version "2.3.2" + resolved "https://registry.yarnpkg.com/no-case/-/no-case-2.3.2.tgz#60b813396be39b3f1288a4c1ed5d1e7d28b464ac" + integrity sha512-rmTZ9kz+f3rCvK2TD1Ue/oZlns7OGoIWP4fc3llxxRXlOkHKoWPPWJOfFYpITabSow43QJbRIoHQXtt10VldyQ== + dependencies: + lower-case "^1.1.1" + +node-forge@0.9.0: + version "0.9.0" + resolved "https://registry.yarnpkg.com/node-forge/-/node-forge-0.9.0.tgz#d624050edbb44874adca12bb9a52ec63cb782579" + integrity sha512-7ASaDa3pD+lJ3WvXFsxekJQelBKRpne+GOVbLbtHYdd7pFspyeuJHnWfLplGf3SwKGbfs/aYl5V/JCIaHVUKKQ== + +node-ipc@^9.1.1: + version "9.1.1" + resolved "https://registry.yarnpkg.com/node-ipc/-/node-ipc-9.1.1.tgz#4e245ed6938e65100e595ebc5dc34b16e8dd5d69" + integrity sha512-FAyICv0sIRJxVp3GW5fzgaf9jwwRQxAKDJlmNFUL5hOy+W4X/I5AypyHoq0DXXbo9o/gt79gj++4cMr4jVWE/w== + dependencies: + event-pubsub "4.3.0" + js-message "1.0.5" + js-queue "2.0.0" + +node-libs-browser@^2.2.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/node-libs-browser/-/node-libs-browser-2.2.1.tgz#b64f513d18338625f90346d27b0d235e631f6425" + integrity sha512-h/zcD8H9kaDZ9ALUWwlBUDo6TKF8a7qBSCSEGfjTVIYeqsioSKaAX+BN7NgiMGp6iSIXZ3PxgCu8KS3b71YK5Q== + dependencies: + assert "^1.1.1" + browserify-zlib "^0.2.0" + buffer "^4.3.0" + console-browserify "^1.1.0" + constants-browserify "^1.0.0" + crypto-browserify "^3.11.0" + domain-browser "^1.1.1" + events "^3.0.0" + https-browserify "^1.0.0" + os-browserify "^0.3.0" + path-browserify "0.0.1" + process "^0.11.10" + punycode "^1.2.4" + querystring-es3 "^0.2.0" + readable-stream "^2.3.3" + stream-browserify "^2.0.1" + stream-http "^2.7.2" + string_decoder "^1.0.0" + timers-browserify "^2.0.4" + tty-browserify "0.0.0" + url "^0.11.0" + util "^0.11.0" + vm-browserify "^1.0.1" + +node-releases@^1.1.60: + version "1.1.60" + resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-1.1.60.tgz#6948bdfce8286f0b5d0e5a88e8384e954dfe7084" + integrity sha512-gsO4vjEdQaTusZAEebUWp2a5d7dF5DYoIpDG7WySnk7BuZDW+GPpHXoXXuYawRBr/9t5q54tirPz79kFIWg4dA== + +normalize-package-data@^2.5.0: + version "2.5.0" + resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.5.0.tgz#e66db1838b200c1dfc233225d12cb36520e234a8" + integrity sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA== + dependencies: + hosted-git-info "^2.1.4" + resolve "^1.10.0" + semver "2 || 3 || 4 || 5" + validate-npm-package-license "^3.0.1" + +normalize-path@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-1.0.0.tgz#32d0e472f91ff345701c15a8311018d3b0a90379" + integrity sha1-MtDkcvkf80VwHBWoMRAY07CpA3k= + +normalize-path@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-2.1.1.tgz#1ab28b556e198363a8c1a6f7e6fa20137fe6aed9" + integrity sha1-GrKLVW4Zg2Oowab35vogE3/mrtk= + dependencies: + remove-trailing-separator "^1.0.1" + +normalize-path@^3.0.0, normalize-path@~3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" + integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== + +normalize-range@^0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/normalize-range/-/normalize-range-0.1.2.tgz#2d10c06bdfd312ea9777695a4d28439456b75942" + integrity sha1-LRDAa9/TEuqXd2laTShDlFa3WUI= + +normalize-url@1.9.1: + version "1.9.1" + resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-1.9.1.tgz#2cc0d66b31ea23036458436e3620d85954c66c3c" + integrity sha1-LMDWazHqIwNkWENuNiDYWVTGbDw= + dependencies: + object-assign "^4.0.1" + prepend-http "^1.0.0" + query-string "^4.1.0" + sort-keys "^1.0.0" + +normalize-url@^3.0.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-3.3.0.tgz#b2e1c4dc4f7c6d57743df733a4f5978d18650559" + integrity sha512-U+JJi7duF1o+u2pynbp2zXDW2/PADgC30f0GsHZtRh+HOcXHnw137TrNlyxxRvWW5fjKd3bcLHPxofWuCjaeZg== + +npm-run-path@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-2.0.2.tgz#35a9232dfa35d7067b4cb2ddf2357b1871536c5f" + integrity sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8= + dependencies: + path-key "^2.0.0" + +npm-run-path@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-4.0.1.tgz#b7ecd1e5ed53da8e37a55e1c2269e0b97ed748ea" + integrity sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw== + dependencies: + path-key "^3.0.0" + +nth-check@^1.0.2, nth-check@~1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/nth-check/-/nth-check-1.0.2.tgz#b2bd295c37e3dd58a3bf0700376663ba4d9cf05c" + integrity sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg== + dependencies: + boolbase "~1.0.0" + +num2fraction@^1.2.2: + version "1.2.2" + resolved "https://registry.yarnpkg.com/num2fraction/-/num2fraction-1.2.2.tgz#6f682b6a027a4e9ddfa4564cd2589d1d4e669ede" + integrity sha1-b2gragJ6Tp3fpFZM0lidHU5mnt4= + +oauth-sign@~0.9.0: + version "0.9.0" + resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.9.0.tgz#47a7b016baa68b5fa0ecf3dee08a85c679ac6455" + integrity sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ== + +object-assign@^4.0.1, object-assign@^4.1.0, object-assign@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" + integrity sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM= + +object-copy@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/object-copy/-/object-copy-0.1.0.tgz#7e7d858b781bd7c991a41ba975ed3812754e998c" + integrity sha1-fn2Fi3gb18mRpBupde04EnVOmYw= + dependencies: + copy-descriptor "^0.1.0" + define-property "^0.2.5" + kind-of "^3.0.3" + +object-hash@^1.1.4: + version "1.3.1" + resolved "https://registry.yarnpkg.com/object-hash/-/object-hash-1.3.1.tgz#fde452098a951cb145f039bb7d455449ddc126df" + integrity sha512-OSuu/pU4ENM9kmREg0BdNrUDIl1heYa4mBZacJc+vVWz4GtAwu7jO8s4AIt2aGRUTqxykpWzI3Oqnsm13tTMDA== + +object-inspect@^1.7.0: + version "1.8.0" + resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.8.0.tgz#df807e5ecf53a609cc6bfe93eac3cc7be5b3a9d0" + integrity sha512-jLdtEOB112fORuypAyl/50VRVIBIdVQOSUUGQHzJ4xBSbit81zRarz7GThkEFZy1RceYrWYcPcBFPQwHyAc1gA== + +object-is@^1.0.1: + version "1.1.2" + resolved "https://registry.yarnpkg.com/object-is/-/object-is-1.1.2.tgz#c5d2e87ff9e119f78b7a088441519e2eec1573b6" + integrity sha512-5lHCz+0uufF6wZ7CRFWJN3hp8Jqblpgve06U5CMQ3f//6iDjPr2PEo9MWCjEssDsa+UZEL4PkFpr+BMop6aKzQ== + dependencies: + define-properties "^1.1.3" + es-abstract "^1.17.5" + +object-keys@^1.0.11, object-keys@^1.0.12, object-keys@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e" + integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== + +object-visit@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/object-visit/-/object-visit-1.0.1.tgz#f79c4493af0c5377b59fe39d395e41042dd045bb" + integrity sha1-95xEk68MU3e1n+OdOV5BBC3QRbs= + dependencies: + isobject "^3.0.0" + +object.assign@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.0.tgz#968bf1100d7956bb3ca086f006f846b3bc4008da" + integrity sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w== + dependencies: + define-properties "^1.1.2" + function-bind "^1.1.1" + has-symbols "^1.0.0" + object-keys "^1.0.11" + +object.getownpropertydescriptors@^2.0.3, object.getownpropertydescriptors@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.0.tgz#369bf1f9592d8ab89d712dced5cb81c7c5352649" + integrity sha512-Z53Oah9A3TdLoblT7VKJaTDdXdT+lQO+cNpKVnya5JDe9uLvzu1YyY1yFDFrcxrlRgWrEFH0jJtD/IbuwjcEVg== + dependencies: + define-properties "^1.1.3" + es-abstract "^1.17.0-next.1" + +object.pick@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/object.pick/-/object.pick-1.3.0.tgz#87a10ac4c1694bd2e1cbf53591a66141fb5dd747" + integrity sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c= + dependencies: + isobject "^3.0.1" + +object.values@^1.1.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.1.1.tgz#68a99ecde356b7e9295a3c5e0ce31dc8c953de5e" + integrity sha512-WTa54g2K8iu0kmS/us18jEmdv1a4Wi//BZ/DTVYEcH0XhLM5NYdpDHja3gt57VrZLcNAO2WGA+KpWsDBaHt6eA== + dependencies: + define-properties "^1.1.3" + es-abstract "^1.17.0-next.1" + function-bind "^1.1.1" + has "^1.0.3" + +obuf@^1.0.0, obuf@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/obuf/-/obuf-1.1.2.tgz#09bea3343d41859ebd446292d11c9d4db619084e" + integrity sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg== + +on-finished@~2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.3.0.tgz#20f1336481b083cd75337992a16971aa2d906947" + integrity sha1-IPEzZIGwg811M3mSoWlxqi2QaUc= + dependencies: + ee-first "1.1.1" + +on-headers@~1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/on-headers/-/on-headers-1.0.2.tgz#772b0ae6aaa525c399e489adfad90c403eb3c28f" + integrity sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA== + +once@^1.3.0, once@^1.3.1, once@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" + integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E= + dependencies: + wrappy "1" + +onetime@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/onetime/-/onetime-2.0.1.tgz#067428230fd67443b2794b22bba528b6867962d4" + integrity sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ= + dependencies: + mimic-fn "^1.0.0" + +onetime@^5.1.0: + version "5.1.1" + resolved "https://registry.yarnpkg.com/onetime/-/onetime-5.1.1.tgz#5c8016847b0d67fcedb7eef254751cfcdc7e9418" + integrity sha512-ZpZpjcJeugQfWsfyQlshVoowIIQ1qBGSVll4rfDq6JJVO//fesjoX808hXWfBjY+ROZgpKDI5TRSRBSoJiZ8eg== + dependencies: + mimic-fn "^2.1.0" + +open@^6.3.0: + version "6.4.0" + resolved "https://registry.yarnpkg.com/open/-/open-6.4.0.tgz#5c13e96d0dc894686164f18965ecfe889ecfc8a9" + integrity sha512-IFenVPgF70fSm1keSd2iDBIDIBZkroLeuffXq+wKTzTJlBpesFWojV9lb8mzOfaAzM1sr7HQHuO0vtV0zYekGg== + dependencies: + is-wsl "^1.1.0" + +opener@^1.5.1: + version "1.5.1" + resolved "https://registry.yarnpkg.com/opener/-/opener-1.5.1.tgz#6d2f0e77f1a0af0032aca716c2c1fbb8e7e8abed" + integrity sha512-goYSy5c2UXE4Ra1xixabeVh1guIX/ZV/YokJksb6q2lubWu6UbvPQ20p542/sFIll1nl8JnCyK9oBaOcCWXwvA== + +opn@^5.5.0: + version "5.5.0" + resolved "https://registry.yarnpkg.com/opn/-/opn-5.5.0.tgz#fc7164fab56d235904c51c3b27da6758ca3b9bfc" + integrity sha512-PqHpggC9bLV0VeWcdKhkpxY+3JTzetLSqTCWL/z/tFIbI6G8JCjondXklT1JinczLz2Xib62sSp0T/gKT4KksA== + dependencies: + is-wsl "^1.1.0" + +optionator@^0.8.3: + version "0.8.3" + resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.8.3.tgz#84fa1d036fe9d3c7e21d99884b601167ec8fb495" + integrity sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA== + dependencies: + deep-is "~0.1.3" + fast-levenshtein "~2.0.6" + levn "~0.3.0" + prelude-ls "~1.1.2" + type-check "~0.3.2" + word-wrap "~1.2.3" + +ora@^3.4.0: + version "3.4.0" + resolved "https://registry.yarnpkg.com/ora/-/ora-3.4.0.tgz#bf0752491059a3ef3ed4c85097531de9fdbcd318" + integrity sha512-eNwHudNbO1folBP3JsZ19v9azXWtQZjICdr3Q0TDPIaeBQ3mXLrh54wM+er0+hSp+dWKf+Z8KM58CYzEyIYxYg== + dependencies: + chalk "^2.4.2" + cli-cursor "^2.1.0" + cli-spinners "^2.0.0" + log-symbols "^2.2.0" + strip-ansi "^5.2.0" + wcwidth "^1.0.1" + +original@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/original/-/original-1.0.2.tgz#e442a61cffe1c5fd20a65f3261c26663b303f25f" + integrity sha512-hyBVl6iqqUOJ8FqRe+l/gS8H+kKYjrEndd5Pm1MfBtsEKA038HkkdbAl/72EAXGyonD/PFsvmVG+EvcIpliMBg== + dependencies: + url-parse "^1.4.3" + +os-browserify@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/os-browserify/-/os-browserify-0.3.0.tgz#854373c7f5c2315914fc9bfc6bd8238fdda1ec27" + integrity sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc= + +os-tmpdir@~1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" + integrity sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ= + +p-finally@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae" + integrity sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4= + +p-finally@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-2.0.1.tgz#bd6fcaa9c559a096b680806f4d657b3f0f240561" + integrity sha512-vpm09aKwq6H9phqRQzecoDpD8TmVyGw70qmWlyq5onxY7tqyTTFVvxMykxQSQKILBSFlbXpypIw2T1Ml7+DDtw== + +p-limit@^2.0.0, p-limit@^2.2.0, p-limit@^2.2.1, p-limit@^2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.3.0.tgz#3dd33c647a214fdfffd835933eb086da0dc21db1" + integrity sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w== + dependencies: + p-try "^2.0.0" + +p-locate@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-3.0.0.tgz#322d69a05c0264b25997d9f40cd8a891ab0064a4" + integrity sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ== + dependencies: + p-limit "^2.0.0" + +p-locate@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-4.1.0.tgz#a3428bb7088b3a60292f66919278b7c297ad4f07" + integrity sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A== + dependencies: + p-limit "^2.2.0" + +p-map@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/p-map/-/p-map-2.1.0.tgz#310928feef9c9ecc65b68b17693018a665cea175" + integrity sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw== + +p-map@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/p-map/-/p-map-3.0.0.tgz#d704d9af8a2ba684e2600d9a215983d4141a979d" + integrity sha512-d3qXVTF/s+W+CdJ5A29wywV2n8CQQYahlgz2bFiA+4eVNJbHJodPZ+/gXwPGh0bOqA+j8S+6+ckmvLGPk1QpxQ== + dependencies: + aggregate-error "^3.0.0" + +p-retry@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/p-retry/-/p-retry-3.0.1.tgz#316b4c8893e2c8dc1cfa891f406c4b422bebf328" + integrity sha512-XE6G4+YTTkT2a0UWb2kjZe8xNwf8bIbnqpc/IS/idOBVhyves0mK5OJgeocjx7q5pvX/6m23xuzVPYT1uGM73w== + dependencies: + retry "^0.12.0" + +p-try@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6" + integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ== + +pako@~1.0.5: + version "1.0.11" + resolved "https://registry.yarnpkg.com/pako/-/pako-1.0.11.tgz#6c9599d340d54dfd3946380252a35705a6b992bf" + integrity sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw== + +parallel-transform@^1.1.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/parallel-transform/-/parallel-transform-1.2.0.tgz#9049ca37d6cb2182c3b1d2c720be94d14a5814fc" + integrity sha512-P2vSmIu38uIlvdcU7fDkyrxj33gTUy/ABO5ZUbGowxNCopBq/OoD42bP4UmMrJoPyk4Uqf0mu3mtWBhHCZD8yg== + dependencies: + cyclist "^1.0.1" + inherits "^2.0.3" + readable-stream "^2.1.5" + +param-case@2.1.x: + version "2.1.1" + resolved "https://registry.yarnpkg.com/param-case/-/param-case-2.1.1.tgz#df94fd8cf6531ecf75e6bef9a0858fbc72be2247" + integrity sha1-35T9jPZTHs915r75oIWPvHK+Ikc= + dependencies: + no-case "^2.2.0" + +parent-module@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2" + integrity sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g== + dependencies: + callsites "^3.0.0" + +parse-asn1@^5.0.0, parse-asn1@^5.1.5: + version "5.1.5" + resolved "https://registry.yarnpkg.com/parse-asn1/-/parse-asn1-5.1.5.tgz#003271343da58dc94cace494faef3d2147ecea0e" + integrity sha512-jkMYn1dcJqF6d5CpU689bq7w/b5ALS9ROVSpQDPrZsqqesUJii9qutvoT5ltGedNXMO2e16YUWIghG9KxaViTQ== + dependencies: + asn1.js "^4.0.0" + browserify-aes "^1.0.0" + create-hash "^1.1.0" + evp_bytestokey "^1.0.0" + pbkdf2 "^3.0.3" + safe-buffer "^5.1.1" + +parse-json@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-4.0.0.tgz#be35f5425be1f7f6c747184f98a788cb99477ee0" + integrity sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA= + dependencies: + error-ex "^1.3.1" + json-parse-better-errors "^1.0.1" + +parse-json@^5.0.0: + version "5.0.1" + resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-5.0.1.tgz#7cfe35c1ccd641bce3981467e6c2ece61b3b3878" + integrity sha512-ztoZ4/DYeXQq4E21v169sC8qWINGpcosGv9XhTDvg9/hWvx/zrFkc9BiWxR58OJLHGk28j5BL0SDLeV2WmFZlQ== + dependencies: + "@babel/code-frame" "^7.0.0" + error-ex "^1.3.1" + json-parse-better-errors "^1.0.1" + lines-and-columns "^1.1.6" + +parse5-htmlparser2-tree-adapter@^5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-5.1.1.tgz#e8c743d4e92194d5293ecde2b08be31e67461cbc" + integrity sha512-CF+TKjXqoqyDwHqBhFQ+3l5t83xYi6fVT1tQNg+Ye0JRLnTxWvIroCjEp1A0k4lneHNBGnICUf0cfYVYGEazqw== + dependencies: + parse5 "^5.1.1" + +parse5@^5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/parse5/-/parse5-5.1.1.tgz#f68e4e5ba1852ac2cadc00f4555fff6c2abb6178" + integrity sha512-ugq4DFI0Ptb+WWjAdOK16+u/nHfiIrcE+sh8kZMaM0WllQKLI9rOUq6c2b7cwPkXdzfQESqvoqK6ug7U/Yyzug== + +parseurl@~1.3.2, parseurl@~1.3.3: + version "1.3.3" + resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.3.tgz#9da19e7bee8d12dff0513ed5b76957793bc2e8d4" + integrity sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ== + +pascalcase@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/pascalcase/-/pascalcase-0.1.1.tgz#b363e55e8006ca6fe21784d2db22bd15d7917f14" + integrity sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ= + +path-browserify@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/path-browserify/-/path-browserify-0.0.1.tgz#e6c4ddd7ed3aa27c68a20cc4e50e1a4ee83bbc4a" + integrity sha512-BapA40NHICOS+USX9SN4tyhq+A2RrN/Ws5F0Z5aMHDp98Fl86lX8Oti8B7uN93L4Ifv4fHOEA+pQw87gmMO/lQ== + +path-dirname@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/path-dirname/-/path-dirname-1.0.2.tgz#cc33d24d525e099a5388c0336c6e32b9160609e0" + integrity sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA= + +path-exists@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-2.1.0.tgz#0feb6c64f0fc518d9a754dd5efb62c7022761f4b" + integrity sha1-D+tsZPD8UY2adU3V77YscCJ2H0s= + dependencies: + pinkie-promise "^2.0.0" + +path-exists@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515" + integrity sha1-zg6+ql94yxiSXqfYENe1mwEP1RU= + +path-exists@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3" + integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w== + +path-is-absolute@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" + integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18= + +path-is-inside@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/path-is-inside/-/path-is-inside-1.0.2.tgz#365417dede44430d1c11af61027facf074bdfc53" + integrity sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM= + +path-key@^2.0.0, path-key@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/path-key/-/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40" + integrity sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A= + +path-key@^3.0.0, path-key@^3.1.0: + version "3.1.1" + resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" + integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== + +path-parse@^1.0.6: + version "1.0.6" + resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.6.tgz#d62dbb5679405d72c4737ec58600e9ddcf06d24c" + integrity sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw== + +path-to-regexp@0.1.7: + version "0.1.7" + resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-0.1.7.tgz#df604178005f522f15eb4490e7247a1bfaa67f8c" + integrity sha1-32BBeABfUi8V60SQ5yR6G/qmf4w= + +path-type@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/path-type/-/path-type-3.0.0.tgz#cef31dc8e0a1a3bb0d105c0cd97cf3bf47f4e36f" + integrity sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg== + dependencies: + pify "^3.0.0" + +pbkdf2@^3.0.3: + version "3.1.1" + resolved "https://registry.yarnpkg.com/pbkdf2/-/pbkdf2-3.1.1.tgz#cb8724b0fada984596856d1a6ebafd3584654b94" + integrity sha512-4Ejy1OPxi9f2tt1rRV7Go7zmfDQ+ZectEQz3VGUQhgq62HtIRPDyG/JtnwIxs6x3uNMwo2V7q1fMvKjb+Tnpqg== + dependencies: + create-hash "^1.1.2" + create-hmac "^1.1.4" + ripemd160 "^2.0.1" + safe-buffer "^5.0.1" + sha.js "^2.4.8" + +performance-now@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b" + integrity sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns= + +picomatch@^2.0.4, picomatch@^2.2.1: + version "2.2.2" + resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.2.2.tgz#21f333e9b6b8eaff02468f5146ea406d345f4dad" + integrity sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg== + +pify@^2.0.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" + integrity sha1-7RQaasBDqEnqWISY59yosVMw6Qw= + +pify@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/pify/-/pify-3.0.0.tgz#e5a4acd2c101fdf3d9a4d07f0dbc4db49dd28176" + integrity sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY= + +pify@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/pify/-/pify-4.0.1.tgz#4b2cd25c50d598735c50292224fd8c6df41e3231" + integrity sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g== + +pinkie-promise@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/pinkie-promise/-/pinkie-promise-2.0.1.tgz#2135d6dfa7a358c069ac9b178776288228450ffa" + integrity sha1-ITXW36ejWMBprJsXh3YogihFD/o= + dependencies: + pinkie "^2.0.0" + +pinkie@^2.0.0: + version "2.0.4" + resolved "https://registry.yarnpkg.com/pinkie/-/pinkie-2.0.4.tgz#72556b80cfa0d48a974e80e77248e80ed4f7f870" + integrity sha1-clVrgM+g1IqXToDnckjoDtT3+HA= + +pkg-dir@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-1.0.0.tgz#7a4b508a8d5bb2d629d447056ff4e9c9314cf3d4" + integrity sha1-ektQio1bstYp1EcFb/TpyTFM89Q= + dependencies: + find-up "^1.0.0" + +pkg-dir@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-3.0.0.tgz#2749020f239ed990881b1f71210d51eb6523bea3" + integrity sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw== + dependencies: + find-up "^3.0.0" + +pkg-dir@^4.1.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-4.2.0.tgz#f099133df7ede422e81d1d8448270eeb3e4261f3" + integrity sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ== + dependencies: + find-up "^4.0.0" + +pnp-webpack-plugin@^1.6.4: + version "1.6.4" + resolved "https://registry.yarnpkg.com/pnp-webpack-plugin/-/pnp-webpack-plugin-1.6.4.tgz#c9711ac4dc48a685dabafc86f8b6dd9f8df84149" + integrity sha512-7Wjy+9E3WwLOEL30D+m8TSTF7qJJUJLONBnwQp0518siuMxUQUbgZwssaFX+QKlZkjHZcw/IpZCt/H0srrntSg== + dependencies: + ts-pnp "^1.1.6" + +portfinder@^1.0.26: + version "1.0.28" + resolved "https://registry.yarnpkg.com/portfinder/-/portfinder-1.0.28.tgz#67c4622852bd5374dd1dd900f779f53462fac778" + integrity sha512-Se+2isanIcEqf2XMHjyUKskczxbPH7dQnlMjXX6+dybayyHvAf/TCgyMRlzf/B6QDhAEFOGes0pzRo3by4AbMA== + dependencies: + async "^2.6.2" + debug "^3.1.1" + mkdirp "^0.5.5" + +posix-character-classes@^0.1.0: + version "0.1.1" + resolved "https://registry.yarnpkg.com/posix-character-classes/-/posix-character-classes-0.1.1.tgz#01eac0fe3b5af71a2a6c02feabb8c1fef7e00eab" + integrity sha1-AerA/jta9xoqbAL+q7jB/vfgDqs= + +postcss-calc@^7.0.1: + version "7.0.3" + resolved "https://registry.yarnpkg.com/postcss-calc/-/postcss-calc-7.0.3.tgz#d65cca92a3c52bf27ad37a5f732e0587b74f1623" + integrity sha512-IB/EAEmZhIMEIhG7Ov4x+l47UaXOS1n2f4FBUk/aKllQhtSCxWhTzn0nJgkqN7fo/jcWySvWTSB6Syk9L+31bA== + dependencies: + postcss "^7.0.27" + postcss-selector-parser "^6.0.2" + postcss-value-parser "^4.0.2" + +postcss-colormin@^4.0.3: + version "4.0.3" + resolved "https://registry.yarnpkg.com/postcss-colormin/-/postcss-colormin-4.0.3.tgz#ae060bce93ed794ac71264f08132d550956bd381" + integrity sha512-WyQFAdDZpExQh32j0U0feWisZ0dmOtPl44qYmJKkq9xFWY3p+4qnRzCHeNrkeRhwPHz9bQ3mo0/yVkaply0MNw== + dependencies: + browserslist "^4.0.0" + color "^3.0.0" + has "^1.0.0" + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + +postcss-convert-values@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/postcss-convert-values/-/postcss-convert-values-4.0.1.tgz#ca3813ed4da0f812f9d43703584e449ebe189a7f" + integrity sha512-Kisdo1y77KUC0Jmn0OXU/COOJbzM8cImvw1ZFsBgBgMgb1iL23Zs/LXRe3r+EZqM3vGYKdQ2YJVQ5VkJI+zEJQ== + dependencies: + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + +postcss-discard-comments@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/postcss-discard-comments/-/postcss-discard-comments-4.0.2.tgz#1fbabd2c246bff6aaad7997b2b0918f4d7af4033" + integrity sha512-RJutN259iuRf3IW7GZyLM5Sw4GLTOH8FmsXBnv8Ab/Tc2k4SR4qbV4DNbyyY4+Sjo362SyDmW2DQ7lBSChrpkg== + dependencies: + postcss "^7.0.0" + +postcss-discard-duplicates@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/postcss-discard-duplicates/-/postcss-discard-duplicates-4.0.2.tgz#3fe133cd3c82282e550fc9b239176a9207b784eb" + integrity sha512-ZNQfR1gPNAiXZhgENFfEglF93pciw0WxMkJeVmw8eF+JZBbMD7jp6C67GqJAXVZP2BWbOztKfbsdmMp/k8c6oQ== + dependencies: + postcss "^7.0.0" + +postcss-discard-empty@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/postcss-discard-empty/-/postcss-discard-empty-4.0.1.tgz#c8c951e9f73ed9428019458444a02ad90bb9f765" + integrity sha512-B9miTzbznhDjTfjvipfHoqbWKwd0Mj+/fL5s1QOz06wufguil+Xheo4XpOnc4NqKYBCNqqEzgPv2aPBIJLox0w== + dependencies: + postcss "^7.0.0" + +postcss-discard-overridden@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/postcss-discard-overridden/-/postcss-discard-overridden-4.0.1.tgz#652aef8a96726f029f5e3e00146ee7a4e755ff57" + integrity sha512-IYY2bEDD7g1XM1IDEsUT4//iEYCxAmP5oDSFMVU/JVvT7gh+l4fmjciLqGgwjdWpQIdb0Che2VX00QObS5+cTg== + dependencies: + postcss "^7.0.0" + +postcss-load-config@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/postcss-load-config/-/postcss-load-config-2.1.0.tgz#c84d692b7bb7b41ddced94ee62e8ab31b417b003" + integrity sha512-4pV3JJVPLd5+RueiVVB+gFOAa7GWc25XQcMp86Zexzke69mKf6Nx9LRcQywdz7yZI9n1udOxmLuAwTBypypF8Q== + dependencies: + cosmiconfig "^5.0.0" + import-cwd "^2.0.0" + +postcss-loader@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/postcss-loader/-/postcss-loader-3.0.0.tgz#6b97943e47c72d845fa9e03f273773d4e8dd6c2d" + integrity sha512-cLWoDEY5OwHcAjDnkyRQzAXfs2jrKjXpO/HQFcc5b5u/r7aa471wdmChmwfnv7x2u840iat/wi0lQ5nbRgSkUA== + dependencies: + loader-utils "^1.1.0" + postcss "^7.0.0" + postcss-load-config "^2.0.0" + schema-utils "^1.0.0" + +postcss-merge-longhand@^4.0.11: + version "4.0.11" + resolved "https://registry.yarnpkg.com/postcss-merge-longhand/-/postcss-merge-longhand-4.0.11.tgz#62f49a13e4a0ee04e7b98f42bb16062ca2549e24" + integrity sha512-alx/zmoeXvJjp7L4mxEMjh8lxVlDFX1gqWHzaaQewwMZiVhLo42TEClKaeHbRf6J7j82ZOdTJ808RtN0ZOZwvw== + dependencies: + css-color-names "0.0.4" + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + stylehacks "^4.0.0" + +postcss-merge-rules@^4.0.3: + version "4.0.3" + resolved "https://registry.yarnpkg.com/postcss-merge-rules/-/postcss-merge-rules-4.0.3.tgz#362bea4ff5a1f98e4075a713c6cb25aefef9a650" + integrity sha512-U7e3r1SbvYzO0Jr3UT/zKBVgYYyhAz0aitvGIYOYK5CPmkNih+WDSsS5tvPrJ8YMQYlEMvsZIiqmn7HdFUaeEQ== + dependencies: + browserslist "^4.0.0" + caniuse-api "^3.0.0" + cssnano-util-same-parent "^4.0.0" + postcss "^7.0.0" + postcss-selector-parser "^3.0.0" + vendors "^1.0.0" + +postcss-minify-font-values@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/postcss-minify-font-values/-/postcss-minify-font-values-4.0.2.tgz#cd4c344cce474343fac5d82206ab2cbcb8afd5a6" + integrity sha512-j85oO6OnRU9zPf04+PZv1LYIYOprWm6IA6zkXkrJXyRveDEuQggG6tvoy8ir8ZwjLxLuGfNkCZEQG7zan+Hbtg== + dependencies: + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + +postcss-minify-gradients@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/postcss-minify-gradients/-/postcss-minify-gradients-4.0.2.tgz#93b29c2ff5099c535eecda56c4aa6e665a663471" + integrity sha512-qKPfwlONdcf/AndP1U8SJ/uzIJtowHlMaSioKzebAXSG4iJthlWC9iSWznQcX4f66gIWX44RSA841HTHj3wK+Q== + dependencies: + cssnano-util-get-arguments "^4.0.0" + is-color-stop "^1.0.0" + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + +postcss-minify-params@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/postcss-minify-params/-/postcss-minify-params-4.0.2.tgz#6b9cef030c11e35261f95f618c90036d680db874" + integrity sha512-G7eWyzEx0xL4/wiBBJxJOz48zAKV2WG3iZOqVhPet/9geefm/Px5uo1fzlHu+DOjT+m0Mmiz3jkQzVHe6wxAWg== + dependencies: + alphanum-sort "^1.0.0" + browserslist "^4.0.0" + cssnano-util-get-arguments "^4.0.0" + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + uniqs "^2.0.0" + +postcss-minify-selectors@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/postcss-minify-selectors/-/postcss-minify-selectors-4.0.2.tgz#e2e5eb40bfee500d0cd9243500f5f8ea4262fbd8" + integrity sha512-D5S1iViljXBj9kflQo4YutWnJmwm8VvIsU1GeXJGiG9j8CIg9zs4voPMdQDUmIxetUOh60VilsNzCiAFTOqu3g== + dependencies: + alphanum-sort "^1.0.0" + has "^1.0.0" + postcss "^7.0.0" + postcss-selector-parser "^3.0.0" + +postcss-modules-extract-imports@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/postcss-modules-extract-imports/-/postcss-modules-extract-imports-2.0.0.tgz#818719a1ae1da325f9832446b01136eeb493cd7e" + integrity sha512-LaYLDNS4SG8Q5WAWqIJgdHPJrDDr/Lv775rMBFUbgjTz6j34lUznACHcdRWroPvXANP2Vj7yNK57vp9eFqzLWQ== + dependencies: + postcss "^7.0.5" + +postcss-modules-local-by-default@^3.0.2: + version "3.0.3" + resolved "https://registry.yarnpkg.com/postcss-modules-local-by-default/-/postcss-modules-local-by-default-3.0.3.tgz#bb14e0cc78279d504dbdcbfd7e0ca28993ffbbb0" + integrity sha512-e3xDq+LotiGesympRlKNgaJ0PCzoUIdpH0dj47iWAui/kyTgh3CiAr1qP54uodmJhl6p9rN6BoNcdEDVJx9RDw== + dependencies: + icss-utils "^4.1.1" + postcss "^7.0.32" + postcss-selector-parser "^6.0.2" + postcss-value-parser "^4.1.0" + +postcss-modules-scope@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/postcss-modules-scope/-/postcss-modules-scope-2.2.0.tgz#385cae013cc7743f5a7d7602d1073a89eaae62ee" + integrity sha512-YyEgsTMRpNd+HmyC7H/mh3y+MeFWevy7V1evVhJWewmMbjDHIbZbOXICC2y+m1xI1UVfIT1HMW/O04Hxyu9oXQ== + dependencies: + postcss "^7.0.6" + postcss-selector-parser "^6.0.0" + +postcss-modules-values@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/postcss-modules-values/-/postcss-modules-values-3.0.0.tgz#5b5000d6ebae29b4255301b4a3a54574423e7f10" + integrity sha512-1//E5jCBrZ9DmRX+zCtmQtRSV6PV42Ix7Bzj9GbwJceduuf7IqP8MgeTXuRDHOWj2m0VzZD5+roFWDuU8RQjcg== + dependencies: + icss-utils "^4.0.0" + postcss "^7.0.6" + +postcss-normalize-charset@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/postcss-normalize-charset/-/postcss-normalize-charset-4.0.1.tgz#8b35add3aee83a136b0471e0d59be58a50285dd4" + integrity sha512-gMXCrrlWh6G27U0hF3vNvR3w8I1s2wOBILvA87iNXaPvSNo5uZAMYsZG7XjCUf1eVxuPfyL4TJ7++SGZLc9A3g== + dependencies: + postcss "^7.0.0" + +postcss-normalize-display-values@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/postcss-normalize-display-values/-/postcss-normalize-display-values-4.0.2.tgz#0dbe04a4ce9063d4667ed2be476bb830c825935a" + integrity sha512-3F2jcsaMW7+VtRMAqf/3m4cPFhPD3EFRgNs18u+k3lTJJlVe7d0YPO+bnwqo2xg8YiRpDXJI2u8A0wqJxMsQuQ== + dependencies: + cssnano-util-get-match "^4.0.0" + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + +postcss-normalize-positions@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/postcss-normalize-positions/-/postcss-normalize-positions-4.0.2.tgz#05f757f84f260437378368a91f8932d4b102917f" + integrity sha512-Dlf3/9AxpxE+NF1fJxYDeggi5WwV35MXGFnnoccP/9qDtFrTArZ0D0R+iKcg5WsUd8nUYMIl8yXDCtcrT8JrdA== + dependencies: + cssnano-util-get-arguments "^4.0.0" + has "^1.0.0" + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + +postcss-normalize-repeat-style@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-4.0.2.tgz#c4ebbc289f3991a028d44751cbdd11918b17910c" + integrity sha512-qvigdYYMpSuoFs3Is/f5nHdRLJN/ITA7huIoCyqqENJe9PvPmLhNLMu7QTjPdtnVf6OcYYO5SHonx4+fbJE1+Q== + dependencies: + cssnano-util-get-arguments "^4.0.0" + cssnano-util-get-match "^4.0.0" + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + +postcss-normalize-string@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/postcss-normalize-string/-/postcss-normalize-string-4.0.2.tgz#cd44c40ab07a0c7a36dc5e99aace1eca4ec2690c" + integrity sha512-RrERod97Dnwqq49WNz8qo66ps0swYZDSb6rM57kN2J+aoyEAJfZ6bMx0sx/F9TIEX0xthPGCmeyiam/jXif0eA== + dependencies: + has "^1.0.0" + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + +postcss-normalize-timing-functions@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-4.0.2.tgz#8e009ca2a3949cdaf8ad23e6b6ab99cb5e7d28d9" + integrity sha512-acwJY95edP762e++00Ehq9L4sZCEcOPyaHwoaFOhIwWCDfik6YvqsYNxckee65JHLKzuNSSmAdxwD2Cud1Z54A== + dependencies: + cssnano-util-get-match "^4.0.0" + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + +postcss-normalize-unicode@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/postcss-normalize-unicode/-/postcss-normalize-unicode-4.0.1.tgz#841bd48fdcf3019ad4baa7493a3d363b52ae1cfb" + integrity sha512-od18Uq2wCYn+vZ/qCOeutvHjB5jm57ToxRaMeNuf0nWVHaP9Hua56QyMF6fs/4FSUnVIw0CBPsU0K4LnBPwYwg== + dependencies: + browserslist "^4.0.0" + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + +postcss-normalize-url@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/postcss-normalize-url/-/postcss-normalize-url-4.0.1.tgz#10e437f86bc7c7e58f7b9652ed878daaa95faae1" + integrity sha512-p5oVaF4+IHwu7VpMan/SSpmpYxcJMtkGppYf0VbdH5B6hN8YNmVyJLuY9FmLQTzY3fag5ESUUHDqM+heid0UVA== + dependencies: + is-absolute-url "^2.0.0" + normalize-url "^3.0.0" + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + +postcss-normalize-whitespace@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/postcss-normalize-whitespace/-/postcss-normalize-whitespace-4.0.2.tgz#bf1d4070fe4fcea87d1348e825d8cc0c5faa7d82" + integrity sha512-tO8QIgrsI3p95r8fyqKV+ufKlSHh9hMJqACqbv2XknufqEDhDvbguXGBBqxw9nsQoXWf0qOqppziKJKHMD4GtA== + dependencies: + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + +postcss-ordered-values@^4.1.2: + version "4.1.2" + resolved "https://registry.yarnpkg.com/postcss-ordered-values/-/postcss-ordered-values-4.1.2.tgz#0cf75c820ec7d5c4d280189559e0b571ebac0eee" + integrity sha512-2fCObh5UanxvSxeXrtLtlwVThBvHn6MQcu4ksNT2tsaV2Fg76R2CV98W7wNSlX+5/pFwEyaDwKLLoEV7uRybAw== + dependencies: + cssnano-util-get-arguments "^4.0.0" + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + +postcss-reduce-initial@^4.0.3: + version "4.0.3" + resolved "https://registry.yarnpkg.com/postcss-reduce-initial/-/postcss-reduce-initial-4.0.3.tgz#7fd42ebea5e9c814609639e2c2e84ae270ba48df" + integrity sha512-gKWmR5aUulSjbzOfD9AlJiHCGH6AEVLaM0AV+aSioxUDd16qXP1PCh8d1/BGVvpdWn8k/HiK7n6TjeoXN1F7DA== + dependencies: + browserslist "^4.0.0" + caniuse-api "^3.0.0" + has "^1.0.0" + postcss "^7.0.0" + +postcss-reduce-transforms@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/postcss-reduce-transforms/-/postcss-reduce-transforms-4.0.2.tgz#17efa405eacc6e07be3414a5ca2d1074681d4e29" + integrity sha512-EEVig1Q2QJ4ELpJXMZR8Vt5DQx8/mo+dGWSR7vWXqcob2gQLyQGsionYcGKATXvQzMPn6DSN1vTN7yFximdIAg== + dependencies: + cssnano-util-get-match "^4.0.0" + has "^1.0.0" + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + +postcss-selector-parser@^3.0.0: + version "3.1.2" + resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-3.1.2.tgz#b310f5c4c0fdaf76f94902bbaa30db6aa84f5270" + integrity sha512-h7fJ/5uWuRVyOtkO45pnt1Ih40CEleeyCHzipqAZO2e5H20g25Y48uYnFUiShvY4rZWNJ/Bib/KVPmanaCtOhA== + dependencies: + dot-prop "^5.2.0" + indexes-of "^1.0.1" + uniq "^1.0.1" + +postcss-selector-parser@^6.0.0, postcss-selector-parser@^6.0.2: + version "6.0.2" + resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-6.0.2.tgz#934cf799d016c83411859e09dcecade01286ec5c" + integrity sha512-36P2QR59jDTOAiIkqEprfJDsoNrvwFei3eCqKd1Y0tUsBimsq39BLp7RD+JWny3WgB1zGhJX8XVePwm9k4wdBg== + dependencies: + cssesc "^3.0.0" + indexes-of "^1.0.1" + uniq "^1.0.1" + +postcss-svgo@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/postcss-svgo/-/postcss-svgo-4.0.2.tgz#17b997bc711b333bab143aaed3b8d3d6e3d38258" + integrity sha512-C6wyjo3VwFm0QgBy+Fu7gCYOkCmgmClghO+pjcxvrcBKtiKt0uCF+hvbMO1fyv5BMImRK90SMb+dwUnfbGd+jw== + dependencies: + is-svg "^3.0.0" + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + svgo "^1.0.0" + +postcss-unique-selectors@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/postcss-unique-selectors/-/postcss-unique-selectors-4.0.1.tgz#9446911f3289bfd64c6d680f073c03b1f9ee4bac" + integrity sha512-+JanVaryLo9QwZjKrmJgkI4Fn8SBgRO6WXQBJi7KiAVPlmxikB5Jzc4EvXMT2H0/m0RjrVVm9rGNhZddm/8Spg== + dependencies: + alphanum-sort "^1.0.0" + postcss "^7.0.0" + uniqs "^2.0.0" + +postcss-value-parser@^3.0.0: + version "3.3.1" + resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz#9ff822547e2893213cf1c30efa51ac5fd1ba8281" + integrity sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ== + +postcss-value-parser@^4.0.2, postcss-value-parser@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-4.1.0.tgz#443f6a20ced6481a2bda4fa8532a6e55d789a2cb" + integrity sha512-97DXOFbQJhk71ne5/Mt6cOu6yxsSfM0QGQyl0L25Gca4yGWEGJaig7l7gbCX623VqTBNGLRLaVUCnNkcedlRSQ== + +postcss@^7.0.0, postcss@^7.0.1, postcss@^7.0.14, postcss@^7.0.27, postcss@^7.0.32, postcss@^7.0.5, postcss@^7.0.6: + version "7.0.32" + resolved "https://registry.yarnpkg.com/postcss/-/postcss-7.0.32.tgz#4310d6ee347053da3433db2be492883d62cec59d" + integrity sha512-03eXong5NLnNCD05xscnGKGDZ98CyzoqPSMjOe6SuoQY7Z2hIj0Ld1g/O/UQRuOle2aRtiIRDg9tDcTGAkLfKw== + dependencies: + chalk "^2.4.2" + source-map "^0.6.1" + supports-color "^6.1.0" + +prelude-ls@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54" + integrity sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ= + +prepend-http@^1.0.0: + version "1.0.4" + resolved "https://registry.yarnpkg.com/prepend-http/-/prepend-http-1.0.4.tgz#d4f4562b0ce3696e41ac52d0e002e57a635dc6dc" + integrity sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw= + +prettier@^1.18.2: + version "1.19.1" + resolved "https://registry.yarnpkg.com/prettier/-/prettier-1.19.1.tgz#f7d7f5ff8a9cd872a7be4ca142095956a60797cb" + integrity sha512-s7PoyDv/II1ObgQunCbB9PdLmUcBZcnWOcxDh7O0N/UwDEsHyqkW+Qh28jW+mVuCdx7gLB0BotYI1Y6uI9iyew== + +pretty-error@^2.0.2: + version "2.1.1" + resolved "https://registry.yarnpkg.com/pretty-error/-/pretty-error-2.1.1.tgz#5f4f87c8f91e5ae3f3ba87ab4cf5e03b1a17f1a3" + integrity sha1-X0+HyPkeWuPzuoerTPXgOxoX8aM= + dependencies: + renderkid "^2.0.1" + utila "~0.4" + +process-nextick-args@~2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2" + integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag== + +process@^0.11.10: + version "0.11.10" + resolved "https://registry.yarnpkg.com/process/-/process-0.11.10.tgz#7332300e840161bda3e69a1d1d91a7d4bc16f182" + integrity sha1-czIwDoQBYb2j5podHZGn1LwW8YI= + +progress@^2.0.0: + version "2.0.3" + resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.3.tgz#7e8cf8d8f5b8f239c1bc68beb4eb78567d572ef8" + integrity sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA== + +promise-inflight@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/promise-inflight/-/promise-inflight-1.0.1.tgz#98472870bf228132fcbdd868129bad12c3c029e3" + integrity sha1-mEcocL8igTL8vdhoEputEsPAKeM= + +proxy-addr@~2.0.5: + version "2.0.6" + resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-2.0.6.tgz#fdc2336505447d3f2f2c638ed272caf614bbb2bf" + integrity sha512-dh/frvCBVmSsDYzw6n926jv974gddhkFPfiN8hPOi30Wax25QZyZEGveluCgliBnqmuM+UJmBErbAUFIoDbjOw== + dependencies: + forwarded "~0.1.2" + ipaddr.js "1.9.1" + +prr@~1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/prr/-/prr-1.0.1.tgz#d3fc114ba06995a45ec6893f484ceb1d78f5f476" + integrity sha1-0/wRS6BplaRexok/SEzrHXj19HY= + +pseudomap@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/pseudomap/-/pseudomap-1.0.2.tgz#f052a28da70e618917ef0a8ac34c1ae5a68286b3" + integrity sha1-8FKijacOYYkX7wqKw0wa5aaChrM= + +psl@^1.1.28: + version "1.8.0" + resolved "https://registry.yarnpkg.com/psl/-/psl-1.8.0.tgz#9326f8bcfb013adcc005fdff056acce020e51c24" + integrity sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ== + +public-encrypt@^4.0.0: + version "4.0.3" + resolved "https://registry.yarnpkg.com/public-encrypt/-/public-encrypt-4.0.3.tgz#4fcc9d77a07e48ba7527e7cbe0de33d0701331e0" + integrity sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q== + dependencies: + bn.js "^4.1.0" + browserify-rsa "^4.0.0" + create-hash "^1.1.0" + parse-asn1 "^5.0.0" + randombytes "^2.0.1" + safe-buffer "^5.1.2" + +pump@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/pump/-/pump-2.0.1.tgz#12399add6e4cf7526d973cbc8b5ce2e2908b3909" + integrity sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA== + dependencies: + end-of-stream "^1.1.0" + once "^1.3.1" + +pump@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/pump/-/pump-3.0.0.tgz#b4a2116815bde2f4e1ea602354e8c75565107a64" + integrity sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww== + dependencies: + end-of-stream "^1.1.0" + once "^1.3.1" + +pumpify@^1.3.3: + version "1.5.1" + resolved "https://registry.yarnpkg.com/pumpify/-/pumpify-1.5.1.tgz#36513be246ab27570b1a374a5ce278bfd74370ce" + integrity sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ== + dependencies: + duplexify "^3.6.0" + inherits "^2.0.3" + pump "^2.0.0" + +punycode@1.3.2: + version "1.3.2" + resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.3.2.tgz#9653a036fb7c1ee42342f2325cceefea3926c48d" + integrity sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0= + +punycode@^1.2.4: + version "1.4.1" + resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e" + integrity sha1-wNWmOycYgArY4esPpSachN1BhF4= + +punycode@^2.1.0, punycode@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" + integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== + +q@^1.1.2: + version "1.5.1" + resolved "https://registry.yarnpkg.com/q/-/q-1.5.1.tgz#7e32f75b41381291d04611f1bf14109ac00651d7" + integrity sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc= + +qs@6.7.0: + version "6.7.0" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.7.0.tgz#41dc1a015e3d581f1621776be31afb2876a9b1bc" + integrity sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ== + +qs@~6.5.2: + version "6.5.2" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.2.tgz#cb3ae806e8740444584ef154ce8ee98d403f3e36" + integrity sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA== + +query-string@^4.1.0: + version "4.3.4" + resolved "https://registry.yarnpkg.com/query-string/-/query-string-4.3.4.tgz#bbb693b9ca915c232515b228b1a02b609043dbeb" + integrity sha1-u7aTucqRXCMlFbIosaArYJBD2+s= + dependencies: + object-assign "^4.1.0" + strict-uri-encode "^1.0.0" + +querystring-es3@^0.2.0: + version "0.2.1" + resolved "https://registry.yarnpkg.com/querystring-es3/-/querystring-es3-0.2.1.tgz#9ec61f79049875707d69414596fd907a4d711e73" + integrity sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM= + +querystring@0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/querystring/-/querystring-0.2.0.tgz#b209849203bb25df820da756e747005878521620" + integrity sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA= + +querystringify@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/querystringify/-/querystringify-2.1.1.tgz#60e5a5fd64a7f8bfa4d2ab2ed6fdf4c85bad154e" + integrity sha512-w7fLxIRCRT7U8Qu53jQnJyPkYZIaR4n5151KMfcJlO/A9397Wxb1amJvROTK6TOnp7PfoAmg/qXiNHI+08jRfA== + +randombytes@^2.0.0, randombytes@^2.0.1, randombytes@^2.0.5, randombytes@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.1.0.tgz#df6f84372f0270dc65cdf6291349ab7a473d4f2a" + integrity sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ== + dependencies: + safe-buffer "^5.1.0" + +randomfill@^1.0.3: + version "1.0.4" + resolved "https://registry.yarnpkg.com/randomfill/-/randomfill-1.0.4.tgz#c92196fc86ab42be983f1bf31778224931d61458" + integrity sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw== + dependencies: + randombytes "^2.0.5" + safe-buffer "^5.1.0" + +range-parser@^1.2.1, range-parser@~1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.1.tgz#3cf37023d199e1c24d1a55b84800c2f3e6468031" + integrity sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg== + +raw-body@2.4.0: + version "2.4.0" + resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.4.0.tgz#a1ce6fb9c9bc356ca52e89256ab59059e13d0332" + integrity sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q== + dependencies: + bytes "3.1.0" + http-errors "1.7.2" + iconv-lite "0.4.24" + unpipe "1.0.0" + +read-pkg@^5.1.1: + version "5.2.0" + resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-5.2.0.tgz#7bf295438ca5a33e56cd30e053b34ee7250c93cc" + integrity sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg== + dependencies: + "@types/normalize-package-data" "^2.4.0" + normalize-package-data "^2.5.0" + parse-json "^5.0.0" + type-fest "^0.6.0" + +"readable-stream@1 || 2", readable-stream@^2.0.0, readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.1.5, readable-stream@^2.2.2, readable-stream@^2.3.3, readable-stream@^2.3.6, readable-stream@~2.3.6: + version "2.3.7" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.7.tgz#1eca1cf711aef814c04f62252a36a62f6cb23b57" + integrity sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw== + dependencies: + core-util-is "~1.0.0" + inherits "~2.0.3" + isarray "~1.0.0" + process-nextick-args "~2.0.0" + safe-buffer "~5.1.1" + string_decoder "~1.1.1" + util-deprecate "~1.0.1" + +readable-stream@^3.0.6, readable-stream@^3.1.1, readable-stream@^3.6.0: + version "3.6.0" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.0.tgz#337bbda3adc0706bd3e024426a286d4b4b2c9198" + integrity sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA== + dependencies: + inherits "^2.0.3" + string_decoder "^1.1.1" + util-deprecate "^1.0.1" + +readdirp@^2.2.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-2.2.1.tgz#0e87622a3325aa33e892285caf8b4e846529a525" + integrity sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ== + dependencies: + graceful-fs "^4.1.11" + micromatch "^3.1.10" + readable-stream "^2.0.2" + +readdirp@~3.4.0: + version "3.4.0" + resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.4.0.tgz#9fdccdf9e9155805449221ac645e8303ab5b9ada" + integrity sha512-0xe001vZBnJEK+uKcj8qOhyAKPzIT+gStxWr3LCB0DwcXR5NZJ3IaC+yGnHCYzB/S7ov3m3EEbZI2zeNvX+hGQ== + dependencies: + picomatch "^2.2.1" + +regenerate-unicode-properties@^8.2.0: + version "8.2.0" + resolved "https://registry.yarnpkg.com/regenerate-unicode-properties/-/regenerate-unicode-properties-8.2.0.tgz#e5de7111d655e7ba60c057dbe9ff37c87e65cdec" + integrity sha512-F9DjY1vKLo/tPePDycuH3dn9H1OTPIkVD9Kz4LODu+F2C75mgjAJ7x/gwy6ZcSNRAAkhNlJSOHRe8k3p+K9WhA== + dependencies: + regenerate "^1.4.0" + +regenerate@^1.4.0: + version "1.4.1" + resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.4.1.tgz#cad92ad8e6b591773485fbe05a485caf4f457e6f" + integrity sha512-j2+C8+NtXQgEKWk49MMP5P/u2GhnahTtVkRIHr5R5lVRlbKvmQ+oS+A5aLKWp2ma5VkT8sh6v+v4hbH0YHR66A== + +regenerator-runtime@^0.13.4: + version "0.13.7" + resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.7.tgz#cac2dacc8a1ea675feaabaeb8ae833898ae46f55" + integrity sha512-a54FxoJDIr27pgf7IgeQGxmqUNYrcV338lf/6gH456HZ/PhX+5BcwHXG9ajESmwe6WRO0tAzRUrRmNONWgkrew== + +regenerator-transform@^0.14.2: + version "0.14.5" + resolved "https://registry.yarnpkg.com/regenerator-transform/-/regenerator-transform-0.14.5.tgz#c98da154683671c9c4dcb16ece736517e1b7feb4" + integrity sha512-eOf6vka5IO151Jfsw2NO9WpGX58W6wWmefK3I1zEGr0lOD0u8rwPaNqQL1aRxUaxLeKO3ArNh3VYg1KbaD+FFw== + dependencies: + "@babel/runtime" "^7.8.4" + +regex-not@^1.0.0, regex-not@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/regex-not/-/regex-not-1.0.2.tgz#1f4ece27e00b0b65e0247a6810e6a85d83a5752c" + integrity sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A== + dependencies: + extend-shallow "^3.0.2" + safe-regex "^1.1.0" + +regexp.prototype.flags@^1.2.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.3.0.tgz#7aba89b3c13a64509dabcf3ca8d9fbb9bdf5cb75" + integrity sha512-2+Q0C5g951OlYlJz6yu5/M33IcsESLlLfsyIaLJaG4FA2r4yP8MvVMJUUP/fVBkSpbbbZlS5gynbEWLipiiXiQ== + dependencies: + define-properties "^1.1.3" + es-abstract "^1.17.0-next.1" + +regexpp@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-2.0.1.tgz#8d19d31cf632482b589049f8281f93dbcba4d07f" + integrity sha512-lv0M6+TkDVniA3aD1Eg0DVpfU/booSu7Eev3TDO/mZKHBfVjgCGTV4t4buppESEYDtkArYFOxTJWv6S5C+iaNw== + +regexpu-core@^4.7.0: + version "4.7.0" + resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-4.7.0.tgz#fcbf458c50431b0bb7b45d6967b8192d91f3d938" + integrity sha512-TQ4KXRnIn6tz6tjnrXEkD/sshygKH/j5KzK86X8MkeHyZ8qst/LZ89j3X4/8HEIfHANTFIP/AbXakeRhWIl5YQ== + dependencies: + regenerate "^1.4.0" + regenerate-unicode-properties "^8.2.0" + regjsgen "^0.5.1" + regjsparser "^0.6.4" + unicode-match-property-ecmascript "^1.0.4" + unicode-match-property-value-ecmascript "^1.2.0" + +regjsgen@^0.5.1: + version "0.5.2" + resolved "https://registry.yarnpkg.com/regjsgen/-/regjsgen-0.5.2.tgz#92ff295fb1deecbf6ecdab2543d207e91aa33733" + integrity sha512-OFFT3MfrH90xIW8OOSyUrk6QHD5E9JOTeGodiJeBS3J6IwlgzJMNE/1bZklWz5oTg+9dCMyEetclvCVXOPoN3A== + +regjsparser@^0.6.4: + version "0.6.4" + resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.6.4.tgz#a769f8684308401a66e9b529d2436ff4d0666272" + integrity sha512-64O87/dPDgfk8/RQqC4gkZoGyyWFIEUTTh80CU6CWuK5vkCGyekIx+oKcEIYtP/RAxSQltCZHCNu/mdd7fqlJw== + dependencies: + jsesc "~0.5.0" + +relateurl@0.2.x: + version "0.2.7" + resolved "https://registry.yarnpkg.com/relateurl/-/relateurl-0.2.7.tgz#54dbf377e51440aca90a4cd274600d3ff2d888a9" + integrity sha1-VNvzd+UUQKypCkzSdGANP/LYiKk= + +remove-trailing-separator@^1.0.1: + version "1.1.0" + resolved "https://registry.yarnpkg.com/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz#c24bce2a283adad5bc3f58e0d48249b92379d8ef" + integrity sha1-wkvOKig62tW8P1jg1IJJuSN52O8= + +renderkid@^2.0.1: + version "2.0.3" + resolved "https://registry.yarnpkg.com/renderkid/-/renderkid-2.0.3.tgz#380179c2ff5ae1365c522bf2fcfcff01c5b74149" + integrity sha512-z8CLQp7EZBPCwCnncgf9C4XAi3WR0dv+uWu/PjIyhhAb5d6IJ/QZqlHFprHeKT+59//V6BNUsLbvN8+2LarxGA== + dependencies: + css-select "^1.1.0" + dom-converter "^0.2" + htmlparser2 "^3.3.0" + strip-ansi "^3.0.0" + utila "^0.4.0" + +repeat-element@^1.1.2: + version "1.1.3" + resolved "https://registry.yarnpkg.com/repeat-element/-/repeat-element-1.1.3.tgz#782e0d825c0c5a3bb39731f84efee6b742e6b1ce" + integrity sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g== + +repeat-string@^1.6.1: + version "1.6.1" + resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637" + integrity sha1-jcrkcOHIirwtYA//Sndihtp15jc= + +request@^2.88.2: + version "2.88.2" + resolved "https://registry.yarnpkg.com/request/-/request-2.88.2.tgz#d73c918731cb5a87da047e207234146f664d12b3" + integrity sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw== + dependencies: + aws-sign2 "~0.7.0" + aws4 "^1.8.0" + caseless "~0.12.0" + combined-stream "~1.0.6" + extend "~3.0.2" + forever-agent "~0.6.1" + form-data "~2.3.2" + har-validator "~5.1.3" + http-signature "~1.2.0" + is-typedarray "~1.0.0" + isstream "~0.1.2" + json-stringify-safe "~5.0.1" + mime-types "~2.1.19" + oauth-sign "~0.9.0" + performance-now "^2.1.0" + qs "~6.5.2" + safe-buffer "^5.1.2" + tough-cookie "~2.5.0" + tunnel-agent "^0.6.0" + uuid "^3.3.2" + +require-directory@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" + integrity sha1-jGStX9MNqxyXbiNE/+f3kqam30I= + +require-main-filename@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-2.0.0.tgz#d0b329ecc7cc0f61649f62215be69af54aa8989b" + integrity sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg== + +requires-port@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/requires-port/-/requires-port-1.0.0.tgz#925d2601d39ac485e091cf0da5c6e694dc3dcaff" + integrity sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8= + +resolve-cwd@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/resolve-cwd/-/resolve-cwd-2.0.0.tgz#00a9f7387556e27038eae232caa372a6a59b665a" + integrity sha1-AKn3OHVW4nA46uIyyqNypqWbZlo= + dependencies: + resolve-from "^3.0.0" + +resolve-from@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-3.0.0.tgz#b22c7af7d9d6881bc8b6e653335eebcb0a188748" + integrity sha1-six699nWiBvItuZTM17rywoYh0g= + +resolve-from@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6" + integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== + +resolve-url@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/resolve-url/-/resolve-url-0.2.1.tgz#2c637fe77c893afd2a663fe21aa9080068e2052a" + integrity sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo= + +resolve@^1.10.0, resolve@^1.12.0, resolve@^1.3.2, resolve@^1.8.1: + version "1.17.0" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.17.0.tgz#b25941b54968231cc2d1bb76a79cb7f2c0bf8444" + integrity sha512-ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w== + dependencies: + path-parse "^1.0.6" + +restore-cursor@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-2.0.0.tgz#9f7ee287f82fd326d4fd162923d62129eee0dfaf" + integrity sha1-n37ih/gv0ybU/RYpI9YhKe7g368= + dependencies: + onetime "^2.0.0" + signal-exit "^3.0.2" + +restore-cursor@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-3.1.0.tgz#39f67c54b3a7a58cea5236d95cf0034239631f7e" + integrity sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA== + dependencies: + onetime "^5.1.0" + signal-exit "^3.0.2" + +ret@~0.1.10: + version "0.1.15" + resolved "https://registry.yarnpkg.com/ret/-/ret-0.1.15.tgz#b8a4825d5bdb1fc3f6f53c2bc33f81388681c7bc" + integrity sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg== + +retry@^0.12.0: + version "0.12.0" + resolved "https://registry.yarnpkg.com/retry/-/retry-0.12.0.tgz#1b42a6266a21f07421d1b0b54b7dc167b01c013b" + integrity sha1-G0KmJmoh8HQh0bC1S33BZ7AcATs= + +rgb-regex@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/rgb-regex/-/rgb-regex-1.0.1.tgz#c0e0d6882df0e23be254a475e8edd41915feaeb1" + integrity sha1-wODWiC3w4jviVKR16O3UGRX+rrE= + +rgba-regex@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/rgba-regex/-/rgba-regex-1.0.0.tgz#43374e2e2ca0968b0ef1523460b7d730ff22eeb3" + integrity sha1-QzdOLiyglosO8VI0YLfXMP8i7rM= + +rimraf@2.6.3: + version "2.6.3" + resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.3.tgz#b2d104fe0d8fb27cf9e0a1cda8262dd3833c6cab" + integrity sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA== + dependencies: + glob "^7.1.3" + +rimraf@^2.5.4, rimraf@^2.6.1, rimraf@^2.6.3, rimraf@^2.7.1: + version "2.7.1" + resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.7.1.tgz#35797f13a7fdadc566142c29d4f07ccad483e3ec" + integrity sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w== + dependencies: + glob "^7.1.3" + +ripemd160@^2.0.0, ripemd160@^2.0.1: + version "2.0.2" + resolved "https://registry.yarnpkg.com/ripemd160/-/ripemd160-2.0.2.tgz#a1c1a6f624751577ba5d07914cbc92850585890c" + integrity sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA== + dependencies: + hash-base "^3.0.0" + inherits "^2.0.1" + +run-async@^2.4.0: + version "2.4.1" + resolved "https://registry.yarnpkg.com/run-async/-/run-async-2.4.1.tgz#8440eccf99ea3e70bd409d49aab88e10c189a455" + integrity sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ== + +run-queue@^1.0.0, run-queue@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/run-queue/-/run-queue-1.0.3.tgz#e848396f057d223f24386924618e25694161ec47" + integrity sha1-6Eg5bwV9Ij8kOGkkYY4laUFh7Ec= + dependencies: + aproba "^1.1.1" + +rxjs@^6.6.0: + version "6.6.2" + resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-6.6.2.tgz#8096a7ac03f2cc4fe5860ef6e572810d9e01c0d2" + integrity sha512-BHdBMVoWC2sL26w//BCu3YzKT4s2jip/WhwsGEDmeKYBhKDZeYezVUnHatYB7L85v5xs0BAQmg6BEYJEKxBabg== + dependencies: + tslib "^1.9.0" + +safe-buffer@5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1: + version "5.1.2" + resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" + integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== + +safe-buffer@>=5.1.0, safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.1, safe-buffer@^5.1.2, safe-buffer@^5.2.0, safe-buffer@~5.2.0: + version "5.2.1" + resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" + integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== + +safe-regex@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/safe-regex/-/safe-regex-1.1.0.tgz#40a3669f3b077d1e943d44629e157dd48023bf2e" + integrity sha1-QKNmnzsHfR6UPURinhV91IAjvy4= + dependencies: + ret "~0.1.10" + +"safer-buffer@>= 2.1.2 < 3", safer-buffer@^2.0.2, safer-buffer@^2.1.0, safer-buffer@~2.1.0: + version "2.1.2" + resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" + integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== + +sax@~1.2.4: + version "1.2.4" + resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9" + integrity sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw== + +schema-utils@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-1.0.0.tgz#0b79a93204d7b600d4b2850d1f66c2a34951c770" + integrity sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g== + dependencies: + ajv "^6.1.0" + ajv-errors "^1.0.0" + ajv-keywords "^3.1.0" + +schema-utils@^2.0.0, schema-utils@^2.5.0, schema-utils@^2.6.5, schema-utils@^2.6.6, schema-utils@^2.7.0: + version "2.7.0" + resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-2.7.0.tgz#17151f76d8eae67fbbf77960c33c676ad9f4efc7" + integrity sha512-0ilKFI6QQF5nxDZLFn2dMjvc4hjg/Wkg7rHd3jK6/A4a1Hl9VFdQWvgB1UMGoU94pad1P/8N7fMcEnLnSiju8A== + dependencies: + "@types/json-schema" "^7.0.4" + ajv "^6.12.2" + ajv-keywords "^3.4.1" + +select-hose@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/select-hose/-/select-hose-2.0.0.tgz#625d8658f865af43ec962bfc376a37359a4994ca" + integrity sha1-Yl2GWPhlr0Psliv8N2o3NZpJlMo= + +selfsigned@^1.10.7: + version "1.10.7" + resolved "https://registry.yarnpkg.com/selfsigned/-/selfsigned-1.10.7.tgz#da5819fd049d5574f28e88a9bcc6dbc6e6f3906b" + integrity sha512-8M3wBCzeWIJnQfl43IKwOmC4H/RAp50S8DF60znzjW5GVqTcSe2vWclt7hmYVPkKPlHWOu5EaWOMZ2Y6W8ZXTA== + dependencies: + node-forge "0.9.0" + +"semver@2 || 3 || 4 || 5", semver@^5.4.1, semver@^5.5.0, semver@^5.5.1, semver@^5.6.0: + version "5.7.1" + resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" + integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== + +semver@7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.0.0.tgz#5f3ca35761e47e05b206c6daff2cf814f0316b8e" + integrity sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A== + +semver@^6.0.0, semver@^6.1.0, semver@^6.1.2, semver@^6.3.0: + version "6.3.0" + resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" + integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== + +send@0.17.1: + version "0.17.1" + resolved "https://registry.yarnpkg.com/send/-/send-0.17.1.tgz#c1d8b059f7900f7466dd4938bdc44e11ddb376c8" + integrity sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg== + dependencies: + debug "2.6.9" + depd "~1.1.2" + destroy "~1.0.4" + encodeurl "~1.0.2" + escape-html "~1.0.3" + etag "~1.8.1" + fresh "0.5.2" + http-errors "~1.7.2" + mime "1.6.0" + ms "2.1.1" + on-finished "~2.3.0" + range-parser "~1.2.1" + statuses "~1.5.0" + +serialize-javascript@^2.1.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-2.1.2.tgz#ecec53b0e0317bdc95ef76ab7074b7384785fa61" + integrity sha512-rs9OggEUF0V4jUSecXazOYsLfu7OGK2qIn3c7IPBiffz32XniEp/TX9Xmc9LQfK2nQ2QKHvZ2oygKUGU0lG4jQ== + +serialize-javascript@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-3.1.0.tgz#8bf3a9170712664ef2561b44b691eafe399214ea" + integrity sha512-JIJT1DGiWmIKhzRsG91aS6Ze4sFUrYbltlkg2onR5OrnNM02Kl/hnY/T4FN2omvyeBbQmMJv+K4cPOpGzOTFBg== + dependencies: + randombytes "^2.1.0" + +serve-index@^1.9.1: + version "1.9.1" + resolved "https://registry.yarnpkg.com/serve-index/-/serve-index-1.9.1.tgz#d3768d69b1e7d82e5ce050fff5b453bea12a9239" + integrity sha1-03aNabHn2C5c4FD/9bRTvqEqkjk= + dependencies: + accepts "~1.3.4" + batch "0.6.1" + debug "2.6.9" + escape-html "~1.0.3" + http-errors "~1.6.2" + mime-types "~2.1.17" + parseurl "~1.3.2" + +serve-static@1.14.1: + version "1.14.1" + resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.14.1.tgz#666e636dc4f010f7ef29970a88a674320898b2f9" + integrity sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg== + dependencies: + encodeurl "~1.0.2" + escape-html "~1.0.3" + parseurl "~1.3.3" + send "0.17.1" + +set-blocking@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" + integrity sha1-BF+XgtARrppoA93TgrJDkrPYkPc= + +set-value@^2.0.0, set-value@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/set-value/-/set-value-2.0.1.tgz#a18d40530e6f07de4228c7defe4227af8cad005b" + integrity sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw== + dependencies: + extend-shallow "^2.0.1" + is-extendable "^0.1.1" + is-plain-object "^2.0.3" + split-string "^3.0.1" + +setimmediate@^1.0.4: + version "1.0.5" + resolved "https://registry.yarnpkg.com/setimmediate/-/setimmediate-1.0.5.tgz#290cbb232e306942d7d7ea9b83732ab7856f8285" + integrity sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU= + +setprototypeof@1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.1.0.tgz#d0bd85536887b6fe7c0d818cb962d9d91c54e656" + integrity sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ== + +setprototypeof@1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.1.1.tgz#7e95acb24aa92f5885e0abef5ba131330d4ae683" + integrity sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw== + +sha.js@^2.4.0, sha.js@^2.4.8: + version "2.4.11" + resolved "https://registry.yarnpkg.com/sha.js/-/sha.js-2.4.11.tgz#37a5cf0b81ecbc6943de109ba2960d1b26584ae7" + integrity sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ== + dependencies: + inherits "^2.0.1" + safe-buffer "^5.0.1" + +shebang-command@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea" + integrity sha1-RKrGW2lbAzmJaMOfNj/uXer98eo= + dependencies: + shebang-regex "^1.0.0" + +shebang-command@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea" + integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA== + dependencies: + shebang-regex "^3.0.0" + +shebang-regex@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3" + integrity sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM= + +shebang-regex@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" + integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== + +shell-quote@^1.6.1: + version "1.7.2" + resolved "https://registry.yarnpkg.com/shell-quote/-/shell-quote-1.7.2.tgz#67a7d02c76c9da24f99d20808fcaded0e0e04be2" + integrity sha512-mRz/m/JVscCrkMyPqHc/bczi3OQHkLTqXHEFu0zDhK/qfv3UcOA4SVmRCLmos4bhjr9ekVQubj/R7waKapmiQg== + +signal-exit@^3.0.0, signal-exit@^3.0.2: + version "3.0.3" + resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.3.tgz#a1410c2edd8f077b08b4e253c8eacfcaf057461c" + integrity sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA== + +simple-swizzle@^0.2.2: + version "0.2.2" + resolved "https://registry.yarnpkg.com/simple-swizzle/-/simple-swizzle-0.2.2.tgz#a4da6b635ffcccca33f70d17cb92592de95e557a" + integrity sha1-pNprY1/8zMoz9w0Xy5JZLeleVXo= + dependencies: + is-arrayish "^0.3.1" + +slash@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/slash/-/slash-1.0.0.tgz#c41f2f6c39fc16d1cd17ad4b5d896114ae470d55" + integrity sha1-xB8vbDn8FtHNF61LXYlhFK5HDVU= + +slash@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/slash/-/slash-2.0.0.tgz#de552851a1759df3a8f206535442f5ec4ddeab44" + integrity sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A== + +slice-ansi@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-2.1.0.tgz#cacd7693461a637a5788d92a7dd4fba068e81636" + integrity sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ== + dependencies: + ansi-styles "^3.2.0" + astral-regex "^1.0.0" + is-fullwidth-code-point "^2.0.0" + +snapdragon-node@^2.0.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/snapdragon-node/-/snapdragon-node-2.1.1.tgz#6c175f86ff14bdb0724563e8f3c1b021a286853b" + integrity sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw== + dependencies: + define-property "^1.0.0" + isobject "^3.0.0" + snapdragon-util "^3.0.1" + +snapdragon-util@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/snapdragon-util/-/snapdragon-util-3.0.1.tgz#f956479486f2acd79700693f6f7b805e45ab56e2" + integrity sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ== + dependencies: + kind-of "^3.2.0" + +snapdragon@^0.8.1: + version "0.8.2" + resolved "https://registry.yarnpkg.com/snapdragon/-/snapdragon-0.8.2.tgz#64922e7c565b0e14204ba1aa7d6964278d25182d" + integrity sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg== + dependencies: + base "^0.11.1" + debug "^2.2.0" + define-property "^0.2.5" + extend-shallow "^2.0.1" + map-cache "^0.2.2" + source-map "^0.5.6" + source-map-resolve "^0.5.0" + use "^3.1.0" + +sockjs-client@1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/sockjs-client/-/sockjs-client-1.4.0.tgz#c9f2568e19c8fd8173b4997ea3420e0bb306c7d5" + integrity sha512-5zaLyO8/nri5cua0VtOrFXBPK1jbL4+1cebT/mmKA1E1ZXOvJrII75bPu0l0k843G/+iAbhEqzyKr0w/eCCj7g== + dependencies: + debug "^3.2.5" + eventsource "^1.0.7" + faye-websocket "~0.11.1" + inherits "^2.0.3" + json3 "^3.3.2" + url-parse "^1.4.3" + +sockjs@0.3.20: + version "0.3.20" + resolved "https://registry.yarnpkg.com/sockjs/-/sockjs-0.3.20.tgz#b26a283ec562ef8b2687b44033a4eeceac75d855" + integrity sha512-SpmVOVpdq0DJc0qArhF3E5xsxvaiqGNb73XfgBpK1y3UD5gs8DSo8aCTsuT5pX8rssdc2NDIzANwP9eCAiSdTA== + dependencies: + faye-websocket "^0.10.0" + uuid "^3.4.0" + websocket-driver "0.6.5" + +sort-keys@^1.0.0: + version "1.1.2" + resolved "https://registry.yarnpkg.com/sort-keys/-/sort-keys-1.1.2.tgz#441b6d4d346798f1b4e49e8920adfba0e543f9ad" + integrity sha1-RBttTTRnmPG05J6JIK37oOVD+a0= + dependencies: + is-plain-obj "^1.0.0" + +source-list-map@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/source-list-map/-/source-list-map-2.0.1.tgz#3993bd873bfc48479cca9ea3a547835c7c154b34" + integrity sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw== + +source-map-resolve@^0.5.0: + version "0.5.3" + resolved "https://registry.yarnpkg.com/source-map-resolve/-/source-map-resolve-0.5.3.tgz#190866bece7553e1f8f267a2ee82c606b5509a1a" + integrity sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw== + dependencies: + atob "^2.1.2" + decode-uri-component "^0.2.0" + resolve-url "^0.2.1" + source-map-url "^0.4.0" + urix "^0.1.0" + +source-map-support@~0.5.12: + version "0.5.19" + resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.19.tgz#a98b62f86dcaf4f67399648c085291ab9e8fed61" + integrity sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw== + dependencies: + buffer-from "^1.0.0" + source-map "^0.6.0" + +source-map-url@^0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/source-map-url/-/source-map-url-0.4.0.tgz#3e935d7ddd73631b97659956d55128e87b5084a3" + integrity sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM= + +source-map@^0.5.0, source-map@^0.5.6: + version "0.5.7" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" + integrity sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w= + +source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.0, source-map@~0.6.1: + version "0.6.1" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" + integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== + +spdx-correct@^3.0.0: + version "3.1.1" + resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.1.1.tgz#dece81ac9c1e6713e5f7d1b6f17d468fa53d89a9" + integrity sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w== + dependencies: + spdx-expression-parse "^3.0.0" + spdx-license-ids "^3.0.0" + +spdx-exceptions@^2.1.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz#3f28ce1a77a00372683eade4a433183527a2163d" + integrity sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A== + +spdx-expression-parse@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz#cf70f50482eefdc98e3ce0a6833e4a53ceeba679" + integrity sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q== + dependencies: + spdx-exceptions "^2.1.0" + spdx-license-ids "^3.0.0" + +spdx-license-ids@^3.0.0: + version "3.0.5" + resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.5.tgz#3694b5804567a458d3c8045842a6358632f62654" + integrity sha512-J+FWzZoynJEXGphVIS+XEh3kFSjZX/1i9gFBaWQcB+/tmpe2qUsSBABpcxqxnAxFdiUFEgAX1bjYGQvIZmoz9Q== + +spdy-transport@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/spdy-transport/-/spdy-transport-3.0.0.tgz#00d4863a6400ad75df93361a1608605e5dcdcf31" + integrity sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw== + dependencies: + debug "^4.1.0" + detect-node "^2.0.4" + hpack.js "^2.1.6" + obuf "^1.1.2" + readable-stream "^3.0.6" + wbuf "^1.7.3" + +spdy@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/spdy/-/spdy-4.0.2.tgz#b74f466203a3eda452c02492b91fb9e84a27677b" + integrity sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA== + dependencies: + debug "^4.1.0" + handle-thing "^2.0.0" + http-deceiver "^1.2.7" + select-hose "^2.0.0" + spdy-transport "^3.0.0" + +split-string@^3.0.1, split-string@^3.0.2: + version "3.1.0" + resolved "https://registry.yarnpkg.com/split-string/-/split-string-3.1.0.tgz#7cb09dda3a86585705c64b39a6466038682e8fe2" + integrity sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw== + dependencies: + extend-shallow "^3.0.0" + +sprintf-js@~1.0.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" + integrity sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw= + +sshpk@^1.7.0: + version "1.16.1" + resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.16.1.tgz#fb661c0bef29b39db40769ee39fa70093d6f6877" + integrity sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg== + dependencies: + asn1 "~0.2.3" + assert-plus "^1.0.0" + bcrypt-pbkdf "^1.0.0" + dashdash "^1.12.0" + ecc-jsbn "~0.1.1" + getpass "^0.1.1" + jsbn "~0.1.0" + safer-buffer "^2.0.2" + tweetnacl "~0.14.0" + +ssri@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/ssri/-/ssri-6.0.1.tgz#2a3c41b28dd45b62b63676ecb74001265ae9edd8" + integrity sha512-3Wge10hNcT1Kur4PDFwEieXSCMCJs/7WvSACcrMYrNp+b8kDL1/0wJch5Ni2WrtwEa2IO8OsVfeKIciKCDx/QA== + dependencies: + figgy-pudding "^3.5.1" + +ssri@^7.0.0, ssri@^7.1.0: + version "7.1.0" + resolved "https://registry.yarnpkg.com/ssri/-/ssri-7.1.0.tgz#92c241bf6de82365b5c7fb4bd76e975522e1294d" + integrity sha512-77/WrDZUWocK0mvA5NTRQyveUf+wsrIc6vyrxpS8tVvYBcX215QbafrJR3KtkpskIzoFLqqNuuYQvxaMjXJ/0g== + dependencies: + figgy-pudding "^3.5.1" + minipass "^3.1.1" + +stable@^0.1.8: + version "0.1.8" + resolved "https://registry.yarnpkg.com/stable/-/stable-0.1.8.tgz#836eb3c8382fe2936feaf544631017ce7d47a3cf" + integrity sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w== + +stackframe@^1.1.1: + version "1.2.0" + resolved "https://registry.yarnpkg.com/stackframe/-/stackframe-1.2.0.tgz#52429492d63c62eb989804c11552e3d22e779303" + integrity sha512-GrdeshiRmS1YLMYgzF16olf2jJ/IzxXY9lhKOskuVziubpTYcYqyOwYeJKzQkwy7uN0fYSsbsC4RQaXf9LCrYA== + +static-extend@^0.1.1: + version "0.1.2" + resolved "https://registry.yarnpkg.com/static-extend/-/static-extend-0.1.2.tgz#60809c39cbff55337226fd5e0b520f341f1fb5c6" + integrity sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY= + dependencies: + define-property "^0.2.5" + object-copy "^0.1.0" + +"statuses@>= 1.4.0 < 2", "statuses@>= 1.5.0 < 2", statuses@~1.5.0: + version "1.5.0" + resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.5.0.tgz#161c7dac177659fd9811f43771fa99381478628c" + integrity sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow= + +stream-browserify@^2.0.1: + version "2.0.2" + resolved "https://registry.yarnpkg.com/stream-browserify/-/stream-browserify-2.0.2.tgz#87521d38a44aa7ee91ce1cd2a47df0cb49dd660b" + integrity sha512-nX6hmklHs/gr2FuxYDltq8fJA1GDlxKQCz8O/IM4atRqBH8OORmBNgfvW5gG10GT/qQ9u0CzIvr2X5Pkt6ntqg== + dependencies: + inherits "~2.0.1" + readable-stream "^2.0.2" + +stream-each@^1.1.0: + version "1.2.3" + resolved "https://registry.yarnpkg.com/stream-each/-/stream-each-1.2.3.tgz#ebe27a0c389b04fbcc233642952e10731afa9bae" + integrity sha512-vlMC2f8I2u/bZGqkdfLQW/13Zihpej/7PmSiMQsbYddxuTsJp8vRe2x2FvVExZg7FaOds43ROAuFJwPR4MTZLw== + dependencies: + end-of-stream "^1.1.0" + stream-shift "^1.0.0" + +stream-http@^2.7.2: + version "2.8.3" + resolved "https://registry.yarnpkg.com/stream-http/-/stream-http-2.8.3.tgz#b2d242469288a5a27ec4fe8933acf623de6514fc" + integrity sha512-+TSkfINHDo4J+ZobQLWiMouQYB+UVYFttRA94FpEzzJ7ZdqcL4uUUQ7WkdkI4DSozGmgBUE/a47L+38PenXhUw== + dependencies: + builtin-status-codes "^3.0.0" + inherits "^2.0.1" + readable-stream "^2.3.6" + to-arraybuffer "^1.0.0" + xtend "^4.0.0" + +stream-shift@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/stream-shift/-/stream-shift-1.0.1.tgz#d7088281559ab2778424279b0877da3c392d5a3d" + integrity sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ== + +strict-uri-encode@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz#279b225df1d582b1f54e65addd4352e18faa0713" + integrity sha1-J5siXfHVgrH1TmWt3UNS4Y+qBxM= + +string-width@^2.0.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e" + integrity sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw== + dependencies: + is-fullwidth-code-point "^2.0.0" + strip-ansi "^4.0.0" + +string-width@^3.0.0, string-width@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-3.1.0.tgz#22767be21b62af1081574306f69ac51b62203961" + integrity sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w== + dependencies: + emoji-regex "^7.0.1" + is-fullwidth-code-point "^2.0.0" + strip-ansi "^5.1.0" + +string-width@^4.1.0, string-width@^4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.0.tgz#952182c46cc7b2c313d1596e623992bd163b72b5" + integrity sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg== + dependencies: + emoji-regex "^8.0.0" + is-fullwidth-code-point "^3.0.0" + strip-ansi "^6.0.0" + +string.prototype.trimend@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.1.tgz#85812a6b847ac002270f5808146064c995fb6913" + integrity sha512-LRPxFUaTtpqYsTeNKaFOw3R4bxIzWOnbQ837QfBylo8jIxtcbK/A/sMV7Q+OAV/vWo+7s25pOE10KYSjaSO06g== + dependencies: + define-properties "^1.1.3" + es-abstract "^1.17.5" + +string.prototype.trimstart@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.1.tgz#14af6d9f34b053f7cfc89b72f8f2ee14b9039a54" + integrity sha512-XxZn+QpvrBI1FOcg6dIpxUPgWCPuNXvMD72aaRaUQv1eD4e/Qy8i/hFTe0BUmD60p/QA6bh1avmuPTfNjqVWRw== + dependencies: + define-properties "^1.1.3" + es-abstract "^1.17.5" + +string_decoder@^1.0.0, string_decoder@^1.1.1: + version "1.3.0" + resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e" + integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA== + dependencies: + safe-buffer "~5.2.0" + +string_decoder@~1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8" + integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg== + dependencies: + safe-buffer "~5.1.0" + +strip-ansi@^3.0.0, strip-ansi@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf" + integrity sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8= + dependencies: + ansi-regex "^2.0.0" + +strip-ansi@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-4.0.0.tgz#a8479022eb1ac368a871389b635262c505ee368f" + integrity sha1-qEeQIusaw2iocTibY1JixQXuNo8= + dependencies: + ansi-regex "^3.0.0" + +strip-ansi@^5.0.0, strip-ansi@^5.1.0, strip-ansi@^5.2.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-5.2.0.tgz#8c9a536feb6afc962bdfa5b104a5091c1ad9c0ae" + integrity sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA== + dependencies: + ansi-regex "^4.1.0" + +strip-ansi@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.0.tgz#0b1571dd7669ccd4f3e06e14ef1eed26225ae532" + integrity sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w== + dependencies: + ansi-regex "^5.0.0" + +strip-eof@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/strip-eof/-/strip-eof-1.0.0.tgz#bb43ff5598a6eb05d89b59fcd129c983313606bf" + integrity sha1-u0P/VZim6wXYm1n80SnJgzE2Br8= + +strip-final-newline@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/strip-final-newline/-/strip-final-newline-2.0.0.tgz#89b852fb2fcbe936f6f4b3187afb0a12c1ab58ad" + integrity sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA== + +strip-indent@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/strip-indent/-/strip-indent-2.0.0.tgz#5ef8db295d01e6ed6cbf7aab96998d7822527b68" + integrity sha1-XvjbKV0B5u1sv3qrlpmNeCJSe2g= + +strip-json-comments@^3.0.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" + integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== + +stylehacks@^4.0.0: + version "4.0.3" + resolved "https://registry.yarnpkg.com/stylehacks/-/stylehacks-4.0.3.tgz#6718fcaf4d1e07d8a1318690881e8d96726a71d5" + integrity sha512-7GlLk9JwlElY4Y6a/rmbH2MhVlTyVmiJd1PfTCqFaIBEGMYNsrO/v3SeGTdhBThLg4Z+NbOk/qFMwCa+J+3p/g== + dependencies: + browserslist "^4.0.0" + postcss "^7.0.0" + postcss-selector-parser "^3.0.0" + +supports-color@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7" + integrity sha1-U10EXOa2Nj+kARcIRimZXp3zJMc= + +supports-color@^5.3.0: + version "5.5.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" + integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== + dependencies: + has-flag "^3.0.0" + +supports-color@^6.1.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-6.1.0.tgz#0764abc69c63d5ac842dd4867e8d025e880df8f3" + integrity sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ== + dependencies: + has-flag "^3.0.0" + +supports-color@^7.0.0, supports-color@^7.1.0: + version "7.1.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.1.0.tgz#68e32591df73e25ad1c4b49108a2ec507962bfd1" + integrity sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g== + dependencies: + has-flag "^4.0.0" + +svg-tags@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/svg-tags/-/svg-tags-1.0.0.tgz#58f71cee3bd519b59d4b2a843b6c7de64ac04764" + integrity sha1-WPcc7jvVGbWdSyqEO2x95krAR2Q= + +svgo@^1.0.0: + version "1.3.2" + resolved "https://registry.yarnpkg.com/svgo/-/svgo-1.3.2.tgz#b6dc511c063346c9e415b81e43401145b96d4167" + integrity sha512-yhy/sQYxR5BkC98CY7o31VGsg014AKLEPxdfhora76l36hD9Rdy5NZA/Ocn6yayNPgSamYdtX2rFJdcv07AYVw== + dependencies: + chalk "^2.4.1" + coa "^2.0.2" + css-select "^2.0.0" + css-select-base-adapter "^0.1.1" + css-tree "1.0.0-alpha.37" + csso "^4.0.2" + js-yaml "^3.13.1" + mkdirp "~0.5.1" + object.values "^1.1.0" + sax "~1.2.4" + stable "^0.1.8" + unquote "~1.1.1" + util.promisify "~1.0.0" + +table@^5.2.3: + version "5.4.6" + resolved "https://registry.yarnpkg.com/table/-/table-5.4.6.tgz#1292d19500ce3f86053b05f0e8e7e4a3bb21079e" + integrity sha512-wmEc8m4fjnob4gt5riFRtTu/6+4rSe12TpAELNSqHMfF3IqnA+CH37USM6/YR3qRZv7e56kAEAtd6nKZaxe0Ug== + dependencies: + ajv "^6.10.2" + lodash "^4.17.14" + slice-ansi "^2.1.0" + string-width "^3.0.0" + +tapable@^1.0.0, tapable@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/tapable/-/tapable-1.1.3.tgz#a1fccc06b58db61fd7a45da2da44f5f3a3e67ba2" + integrity sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA== + +terser-webpack-plugin@^1.4.3: + version "1.4.4" + resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-1.4.4.tgz#2c63544347324baafa9a56baaddf1634c8abfc2f" + integrity sha512-U4mACBHIegmfoEe5fdongHESNJWqsGU+W0S/9+BmYGVQDw1+c2Ow05TpMhxjPK1sRb7cuYq1BPl1e5YHJMTCqA== + dependencies: + cacache "^12.0.2" + find-cache-dir "^2.1.0" + is-wsl "^1.1.0" + schema-utils "^1.0.0" + serialize-javascript "^3.1.0" + source-map "^0.6.1" + terser "^4.1.2" + webpack-sources "^1.4.0" + worker-farm "^1.7.0" + +terser-webpack-plugin@^2.3.6: + version "2.3.7" + resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-2.3.7.tgz#4910ff5d1a872168cc7fa6cd3749e2b0d60a8a0b" + integrity sha512-xzYyaHUNhzgaAdBsXxk2Yvo/x1NJdslUaussK3fdpBbvttm1iIwU+c26dj9UxJcwk2c5UWt5F55MUTIA8BE7Dg== + dependencies: + cacache "^13.0.1" + find-cache-dir "^3.3.1" + jest-worker "^25.4.0" + p-limit "^2.3.0" + schema-utils "^2.6.6" + serialize-javascript "^3.1.0" + source-map "^0.6.1" + terser "^4.6.12" + webpack-sources "^1.4.3" + +terser@^4.1.2, terser@^4.6.12: + version "4.8.0" + resolved "https://registry.yarnpkg.com/terser/-/terser-4.8.0.tgz#63056343d7c70bb29f3af665865a46fe03a0df17" + integrity sha512-EAPipTNeWsb/3wLPeup1tVPaXfIaU68xMnVdPafIL1TV05OhASArYyIfFvnvJCNrR2NIOvDVNNTFRa+Re2MWyw== + dependencies: + commander "^2.20.0" + source-map "~0.6.1" + source-map-support "~0.5.12" + +text-table@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" + integrity sha1-f17oI66AUgfACvLfSoTsP8+lcLQ= + +thenify-all@^1.0.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/thenify-all/-/thenify-all-1.6.0.tgz#1a1918d402d8fc3f98fbf234db0bcc8cc10e9726" + integrity sha1-GhkY1ALY/D+Y+/I02wvMjMEOlyY= + dependencies: + thenify ">= 3.1.0 < 4" + +"thenify@>= 3.1.0 < 4": + version "3.3.1" + resolved "https://registry.yarnpkg.com/thenify/-/thenify-3.3.1.tgz#8932e686a4066038a016dd9e2ca46add9838a95f" + integrity sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw== + dependencies: + any-promise "^1.0.0" + +thread-loader@^2.1.3: + version "2.1.3" + resolved "https://registry.yarnpkg.com/thread-loader/-/thread-loader-2.1.3.tgz#cbd2c139fc2b2de6e9d28f62286ab770c1acbdda" + integrity sha512-wNrVKH2Lcf8ZrWxDF/khdlLlsTMczdcwPA9VEK4c2exlEPynYWxi9op3nPTo5lAnDIkE0rQEB3VBP+4Zncc9Hg== + dependencies: + loader-runner "^2.3.1" + loader-utils "^1.1.0" + neo-async "^2.6.0" + +through2@^2.0.0: + version "2.0.5" + resolved "https://registry.yarnpkg.com/through2/-/through2-2.0.5.tgz#01c1e39eb31d07cb7d03a96a70823260b23132cd" + integrity sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ== + dependencies: + readable-stream "~2.3.6" + xtend "~4.0.1" + +through@^2.3.6: + version "2.3.8" + resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" + integrity sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU= + +thunky@^1.0.2: + version "1.1.0" + resolved "https://registry.yarnpkg.com/thunky/-/thunky-1.1.0.tgz#5abaf714a9405db0504732bbccd2cedd9ef9537d" + integrity sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA== + +timers-browserify@^2.0.4: + version "2.0.11" + resolved "https://registry.yarnpkg.com/timers-browserify/-/timers-browserify-2.0.11.tgz#800b1f3eee272e5bc53ee465a04d0e804c31211f" + integrity sha512-60aV6sgJ5YEbzUdn9c8kYGIqOubPoUdqQCul3SBAsRCZ40s6Y5cMcrW4dt3/k/EsbLVJNl9n6Vz3fTc+k2GeKQ== + dependencies: + setimmediate "^1.0.4" + +timsort@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/timsort/-/timsort-0.3.0.tgz#405411a8e7e6339fe64db9a234de11dc31e02bd4" + integrity sha1-QFQRqOfmM5/mTbmiNN4R3DHgK9Q= + +tmp@^0.0.33: + version "0.0.33" + resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.33.tgz#6d34335889768d21b2bcda0aa277ced3b1bfadf9" + integrity sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw== + dependencies: + os-tmpdir "~1.0.2" + +to-arraybuffer@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz#7d229b1fcc637e466ca081180836a7aabff83f43" + integrity sha1-fSKbH8xjfkZsoIEYCDanqr/4P0M= + +to-fast-properties@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e" + integrity sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4= + +to-object-path@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/to-object-path/-/to-object-path-0.3.0.tgz#297588b7b0e7e0ac08e04e672f85c1f4999e17af" + integrity sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68= + dependencies: + kind-of "^3.0.2" + +to-regex-range@^2.1.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-2.1.1.tgz#7c80c17b9dfebe599e27367e0d4dd5590141db38" + integrity sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg= + dependencies: + is-number "^3.0.0" + repeat-string "^1.6.1" + +to-regex-range@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" + integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== + dependencies: + is-number "^7.0.0" + +to-regex@^3.0.1, to-regex@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/to-regex/-/to-regex-3.0.2.tgz#13cfdd9b336552f30b51f33a8ae1b42a7a7599ce" + integrity sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw== + dependencies: + define-property "^2.0.2" + extend-shallow "^3.0.2" + regex-not "^1.0.2" + safe-regex "^1.1.0" + +toidentifier@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.0.tgz#7e1be3470f1e77948bc43d94a3c8f4d7752ba553" + integrity sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw== + +toposort@^1.0.0: + version "1.0.7" + resolved "https://registry.yarnpkg.com/toposort/-/toposort-1.0.7.tgz#2e68442d9f64ec720b8cc89e6443ac6caa950029" + integrity sha1-LmhELZ9k7HILjMieZEOsbKqVACk= + +tough-cookie@~2.5.0: + version "2.5.0" + resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.5.0.tgz#cd9fb2a0aa1d5a12b473bd9fb96fa3dcff65ade2" + integrity sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g== + dependencies: + psl "^1.1.28" + punycode "^2.1.1" + +tryer@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/tryer/-/tryer-1.0.1.tgz#f2c85406800b9b0f74c9f7465b81eaad241252f8" + integrity sha512-c3zayb8/kWWpycWYg87P71E1S1ZL6b6IJxfb5fvsUgsf0S2MVGaDhDXXjDMpdCpfWXqptc+4mXwmiy1ypXqRAA== + +ts-pnp@^1.1.6: + version "1.2.0" + resolved "https://registry.yarnpkg.com/ts-pnp/-/ts-pnp-1.2.0.tgz#a500ad084b0798f1c3071af391e65912c86bca92" + integrity sha512-csd+vJOb/gkzvcCHgTGSChYpy5f1/XKNsmvBGO4JXS+z1v2HobugDz4s1IeFXM3wZB44uczs+eazB5Q/ccdhQw== + +tslib@^1.9.0: + version "1.13.0" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.13.0.tgz#c881e13cc7015894ed914862d276436fa9a47043" + integrity sha512-i/6DQjL8Xf3be4K/E6Wgpekn5Qasl1usyw++dAA35Ue5orEn65VIxOA+YvNNl9HV3qv70T7CNwjODHZrLwvd1Q== + +tty-browserify@0.0.0: + version "0.0.0" + resolved "https://registry.yarnpkg.com/tty-browserify/-/tty-browserify-0.0.0.tgz#a157ba402da24e9bf957f9aa69d524eed42901a6" + integrity sha1-oVe6QC2iTpv5V/mqadUk7tQpAaY= + +tunnel-agent@^0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd" + integrity sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0= + dependencies: + safe-buffer "^5.0.1" + +tweetnacl@^0.14.3, tweetnacl@~0.14.0: + version "0.14.5" + resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64" + integrity sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q= + +type-check@~0.3.2: + version "0.3.2" + resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.3.2.tgz#5884cab512cf1d355e3fb784f30804b2b520db72" + integrity sha1-WITKtRLPHTVeP7eE8wgEsrUg23I= + dependencies: + prelude-ls "~1.1.2" + +type-fest@^0.11.0: + version "0.11.0" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.11.0.tgz#97abf0872310fed88a5c466b25681576145e33f1" + integrity sha512-OdjXJxnCN1AvyLSzeKIgXTXxV+99ZuXl3Hpo9XpJAv9MBcHrrJOQ5kV7ypXOuQie+AmWG25hLbiKdwYTifzcfQ== + +type-fest@^0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.6.0.tgz#8d2a2370d3df886eb5c90ada1c5bf6188acf838b" + integrity sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg== + +type-fest@^0.8.1: + version "0.8.1" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.8.1.tgz#09e249ebde851d3b1e48d27c105444667f17b83d" + integrity sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA== + +type-is@~1.6.17, type-is@~1.6.18: + version "1.6.18" + resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.18.tgz#4e552cd05df09467dcbc4ef739de89f2cf37c131" + integrity sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g== + dependencies: + media-typer "0.3.0" + mime-types "~2.1.24" + +typedarray@^0.0.6: + version "0.0.6" + resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" + integrity sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c= + +uglify-js@3.4.x: + version "3.4.10" + resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.4.10.tgz#9ad9563d8eb3acdfb8d38597d2af1d815f6a755f" + integrity sha512-Y2VsbPVs0FIshJztycsO2SfPk7/KAF/T72qzv9u5EpQ4kB2hQoHlhNQTsNyy6ul7lQtqJN/AoWeS23OzEiEFxw== + dependencies: + commander "~2.19.0" + source-map "~0.6.1" + +unicode-canonical-property-names-ecmascript@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-1.0.4.tgz#2619800c4c825800efdd8343af7dd9933cbe2818" + integrity sha512-jDrNnXWHd4oHiTZnx/ZG7gtUTVp+gCcTTKr8L0HjlwphROEW3+Him+IpvC+xcJEFegapiMZyZe02CyuOnRmbnQ== + +unicode-match-property-ecmascript@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-1.0.4.tgz#8ed2a32569961bce9227d09cd3ffbb8fed5f020c" + integrity sha512-L4Qoh15vTfntsn4P1zqnHulG0LdXgjSO035fEpdtp6YxXhMT51Q6vgM5lYdG/5X3MjS+k/Y9Xw4SFCY9IkR0rg== + dependencies: + unicode-canonical-property-names-ecmascript "^1.0.4" + unicode-property-aliases-ecmascript "^1.0.4" + +unicode-match-property-value-ecmascript@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-1.2.0.tgz#0d91f600eeeb3096aa962b1d6fc88876e64ea531" + integrity sha512-wjuQHGQVofmSJv1uVISKLE5zO2rNGzM/KCYZch/QQvez7C1hUhBIuZ701fYXExuufJFMPhv2SyL8CyoIfMLbIQ== + +unicode-property-aliases-ecmascript@^1.0.4: + version "1.1.0" + resolved "https://registry.yarnpkg.com/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-1.1.0.tgz#dd57a99f6207bedff4628abefb94c50db941c8f4" + integrity sha512-PqSoPh/pWetQ2phoj5RLiaqIk4kCNwoV3CI+LfGmWLKI3rE3kl1h59XpX2BjgDrmbxD9ARtQobPGU1SguCYuQg== + +union-value@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/union-value/-/union-value-1.0.1.tgz#0b6fe7b835aecda61c6ea4d4f02c14221e109847" + integrity sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg== + dependencies: + arr-union "^3.1.0" + get-value "^2.0.6" + is-extendable "^0.1.1" + set-value "^2.0.1" + +uniq@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/uniq/-/uniq-1.0.1.tgz#b31c5ae8254844a3a8281541ce2b04b865a734ff" + integrity sha1-sxxa6CVIRKOoKBVBzisEuGWnNP8= + +uniqs@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/uniqs/-/uniqs-2.0.0.tgz#ffede4b36b25290696e6e165d4a59edb998e6b02" + integrity sha1-/+3ks2slKQaW5uFl1KWe25mOawI= + +unique-filename@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/unique-filename/-/unique-filename-1.1.1.tgz#1d69769369ada0583103a1e6ae87681b56573230" + integrity sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ== + dependencies: + unique-slug "^2.0.0" + +unique-slug@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/unique-slug/-/unique-slug-2.0.2.tgz#baabce91083fc64e945b0f3ad613e264f7cd4e6c" + integrity sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w== + dependencies: + imurmurhash "^0.1.4" + +universalify@^0.1.0: + version "0.1.2" + resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66" + integrity sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg== + +unpipe@1.0.0, unpipe@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" + integrity sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw= + +unquote@~1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/unquote/-/unquote-1.1.1.tgz#8fded7324ec6e88a0ff8b905e7c098cdc086d544" + integrity sha1-j97XMk7G6IoP+LkF58CYzcCG1UQ= + +unset-value@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/unset-value/-/unset-value-1.0.0.tgz#8376873f7d2335179ffb1e6fc3a8ed0dfc8ab559" + integrity sha1-g3aHP30jNRef+x5vw6jtDfyKtVk= + dependencies: + has-value "^0.3.1" + isobject "^3.0.0" + +upath@^1.1.1: + version "1.2.0" + resolved "https://registry.yarnpkg.com/upath/-/upath-1.2.0.tgz#8f66dbcd55a883acdae4408af8b035a5044c1894" + integrity sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg== + +upper-case@^1.1.1: + version "1.1.3" + resolved "https://registry.yarnpkg.com/upper-case/-/upper-case-1.1.3.tgz#f6b4501c2ec4cdd26ba78be7222961de77621598" + integrity sha1-9rRQHC7EzdJrp4vnIilh3ndiFZg= + +uri-js@^4.2.2: + version "4.2.2" + resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.2.2.tgz#94c540e1ff772956e2299507c010aea6c8838eb0" + integrity sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ== + dependencies: + punycode "^2.1.0" + +urix@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/urix/-/urix-0.1.0.tgz#da937f7a62e21fec1fd18d49b35c2935067a6c72" + integrity sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI= + +url-loader@^2.2.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/url-loader/-/url-loader-2.3.0.tgz#e0e2ef658f003efb8ca41b0f3ffbf76bab88658b" + integrity sha512-goSdg8VY+7nPZKUEChZSEtW5gjbS66USIGCeSJ1OVOJ7Yfuh/36YxCwMi5HVEJh6mqUYOoy3NJ0vlOMrWsSHog== + dependencies: + loader-utils "^1.2.3" + mime "^2.4.4" + schema-utils "^2.5.0" + +url-parse@^1.4.3: + version "1.4.7" + resolved "https://registry.yarnpkg.com/url-parse/-/url-parse-1.4.7.tgz#a8a83535e8c00a316e403a5db4ac1b9b853ae278" + integrity sha512-d3uaVyzDB9tQoSXFvuSUNFibTd9zxd2bkVrDRvF5TmvWWQwqE4lgYJ5m+x1DbecWkw+LK4RNl2CU1hHuOKPVlg== + dependencies: + querystringify "^2.1.1" + requires-port "^1.0.0" + +url@^0.11.0: + version "0.11.0" + resolved "https://registry.yarnpkg.com/url/-/url-0.11.0.tgz#3838e97cfc60521eb73c525a8e55bfdd9e2e28f1" + integrity sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE= + dependencies: + punycode "1.3.2" + querystring "0.2.0" + +use@^3.1.0: + version "3.1.1" + resolved "https://registry.yarnpkg.com/use/-/use-3.1.1.tgz#d50c8cac79a19fbc20f2911f56eb973f4e10070f" + integrity sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ== + +util-deprecate@^1.0.1, util-deprecate@~1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" + integrity sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8= + +util.promisify@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/util.promisify/-/util.promisify-1.0.0.tgz#440f7165a459c9a16dc145eb8e72f35687097030" + integrity sha512-i+6qA2MPhvoKLuxnJNpXAGhg7HphQOSUq2LKMZD0m15EiskXUkMvKdF4Uui0WYeCUGea+o2cw/ZuwehtfsrNkA== + dependencies: + define-properties "^1.1.2" + object.getownpropertydescriptors "^2.0.3" + +util.promisify@~1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/util.promisify/-/util.promisify-1.0.1.tgz#6baf7774b80eeb0f7520d8b81d07982a59abbaee" + integrity sha512-g9JpC/3He3bm38zsLupWryXHoEcS22YHthuPQSJdMy6KNrzIRzWqcsHzD/WUnqe45whVou4VIsPew37DoXWNrA== + dependencies: + define-properties "^1.1.3" + es-abstract "^1.17.2" + has-symbols "^1.0.1" + object.getownpropertydescriptors "^2.1.0" + +util@0.10.3: + version "0.10.3" + resolved "https://registry.yarnpkg.com/util/-/util-0.10.3.tgz#7afb1afe50805246489e3db7fe0ed379336ac0f9" + integrity sha1-evsa/lCAUkZInj23/g7TeTNqwPk= + dependencies: + inherits "2.0.1" + +util@^0.11.0: + version "0.11.1" + resolved "https://registry.yarnpkg.com/util/-/util-0.11.1.tgz#3236733720ec64bb27f6e26f421aaa2e1b588d61" + integrity sha512-HShAsny+zS2TZfaXxD9tYj4HQGlBezXZMZuM/S5PKLLoZkShZiGk9o5CzukI1LVHZvjdvZ2Sj1aW/Ndn2NB/HQ== + dependencies: + inherits "2.0.3" + +utila@^0.4.0, utila@~0.4: + version "0.4.0" + resolved "https://registry.yarnpkg.com/utila/-/utila-0.4.0.tgz#8a16a05d445657a3aea5eecc5b12a4fa5379772c" + integrity sha1-ihagXURWV6Oupe7MWxKk+lN5dyw= + +utils-merge@1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713" + integrity sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM= + +uuid@^3.3.2, uuid@^3.4.0: + version "3.4.0" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.4.0.tgz#b23e4358afa8a202fe7a100af1f5f883f02007ee" + integrity sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A== + +v8-compile-cache@^2.0.3: + version "2.1.1" + resolved "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-2.1.1.tgz#54bc3cdd43317bca91e35dcaf305b1a7237de745" + integrity sha512-8OQ9CL+VWyt3JStj7HX7/ciTL2V3Rl1Wf5OL+SNTm0yK1KvtReVulksyeRnCANHHuUxHlQig+JJDlUhBt1NQDQ== + +validate-npm-package-license@^3.0.1: + version "3.0.4" + resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz#fc91f6b9c7ba15c857f4cb2c5defeec39d4f410a" + integrity sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew== + dependencies: + spdx-correct "^3.0.0" + spdx-expression-parse "^3.0.0" + +vary@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc" + integrity sha1-IpnwLG3tMNSllhsLn3RSShj2NPw= + +vendors@^1.0.0: + version "1.0.4" + resolved "https://registry.yarnpkg.com/vendors/-/vendors-1.0.4.tgz#e2b800a53e7a29b93506c3cf41100d16c4c4ad8e" + integrity sha512-/juG65kTL4Cy2su4P8HjtkTxk6VmJDiOPBufWniqQ6wknac6jNiXS9vU+hO3wgusiyqWlzTbVHi0dyJqRONg3w== + +verror@1.10.0: + version "1.10.0" + resolved "https://registry.yarnpkg.com/verror/-/verror-1.10.0.tgz#3a105ca17053af55d6e270c1f8288682e18da400" + integrity sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA= + dependencies: + assert-plus "^1.0.0" + core-util-is "1.0.2" + extsprintf "^1.2.0" + +vm-browserify@^1.0.1: + version "1.1.2" + resolved "https://registry.yarnpkg.com/vm-browserify/-/vm-browserify-1.1.2.tgz#78641c488b8e6ca91a75f511e7a3b32a86e5dda0" + integrity sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ== + +vue-eslint-parser@^7.0.0: + version "7.1.0" + resolved "https://registry.yarnpkg.com/vue-eslint-parser/-/vue-eslint-parser-7.1.0.tgz#9cdbcc823e656b087507a1911732b867ac101e83" + integrity sha512-Kr21uPfthDc63nDl27AGQEhtt9VrZ9nkYk/NTftJ2ws9XiJwzJJCnCr3AITQ2jpRMA0XPGDECxYH8E027qMK9Q== + dependencies: + debug "^4.1.1" + eslint-scope "^5.0.0" + eslint-visitor-keys "^1.1.0" + espree "^6.2.1" + esquery "^1.0.1" + lodash "^4.17.15" + +vue-hot-reload-api@^2.3.0: + version "2.3.4" + resolved "https://registry.yarnpkg.com/vue-hot-reload-api/-/vue-hot-reload-api-2.3.4.tgz#532955cc1eb208a3d990b3a9f9a70574657e08f2" + integrity sha512-BXq3jwIagosjgNVae6tkHzzIk6a8MHFtzAdwhnV5VlvPTFxDCvIttgSiHWjdGoTJvXtmRu5HacExfdarRcFhog== + +vue-loader@^15.9.2: + version "15.9.3" + resolved "https://registry.yarnpkg.com/vue-loader/-/vue-loader-15.9.3.tgz#0de35d9e555d3ed53969516cac5ce25531299dda" + integrity sha512-Y67VnGGgVLH5Voostx8JBZgPQTlDQeOVBLOEsjc2cXbCYBKexSKEpOA56x0YZofoDOTszrLnIShyOX1p9uCEHA== + dependencies: + "@vue/component-compiler-utils" "^3.1.0" + hash-sum "^1.0.2" + loader-utils "^1.1.0" + vue-hot-reload-api "^2.3.0" + vue-style-loader "^4.1.0" + +vue-style-loader@^4.1.0, vue-style-loader@^4.1.2: + version "4.1.2" + resolved "https://registry.yarnpkg.com/vue-style-loader/-/vue-style-loader-4.1.2.tgz#dedf349806f25ceb4e64f3ad7c0a44fba735fcf8" + integrity sha512-0ip8ge6Gzz/Bk0iHovU9XAUQaFt/G2B61bnWa2tCcqqdgfHs1lF9xXorFbE55Gmy92okFT+8bfmySuUOu13vxQ== + dependencies: + hash-sum "^1.0.2" + loader-utils "^1.0.2" + +vue-template-compiler@^2.6.11: + version "2.6.11" + resolved "https://registry.yarnpkg.com/vue-template-compiler/-/vue-template-compiler-2.6.11.tgz#c04704ef8f498b153130018993e56309d4698080" + integrity sha512-KIq15bvQDrcCjpGjrAhx4mUlyyHfdmTaoNfeoATHLAiWB+MU3cx4lOzMwrnUh9cCxy0Lt1T11hAFY6TQgroUAA== + dependencies: + de-indent "^1.0.2" + he "^1.1.0" + +vue-template-es2015-compiler@^1.9.0: + version "1.9.1" + resolved "https://registry.yarnpkg.com/vue-template-es2015-compiler/-/vue-template-es2015-compiler-1.9.1.tgz#1ee3bc9a16ecbf5118be334bb15f9c46f82f5825" + integrity sha512-4gDntzrifFnCEvyoO8PqyJDmguXgVPxKiIxrBKjIowvL9l+N66196+72XVYR8BBf1Uv1Fgt3bGevJ+sEmxfZzw== + +vue@^2.6.11: + version "2.6.11" + resolved "https://registry.yarnpkg.com/vue/-/vue-2.6.11.tgz#76594d877d4b12234406e84e35275c6d514125c5" + integrity sha512-VfPwgcGABbGAue9+sfrD4PuwFar7gPb1yl1UK1MwXoQPAw0BKSqWfoYCT/ThFrdEVWoI51dBuyCoiNU9bZDZxQ== + +watchpack-chokidar2@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/watchpack-chokidar2/-/watchpack-chokidar2-2.0.0.tgz#9948a1866cbbd6cb824dea13a7ed691f6c8ddff0" + integrity sha512-9TyfOyN/zLUbA288wZ8IsMZ+6cbzvsNyEzSBp6e/zkifi6xxbl8SmQ/CxQq32k8NNqrdVEVUVSEf56L4rQ/ZxA== + dependencies: + chokidar "^2.1.8" + +watchpack@^1.7.4: + version "1.7.4" + resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-1.7.4.tgz#6e9da53b3c80bb2d6508188f5b200410866cd30b" + integrity sha512-aWAgTW4MoSJzZPAicljkO1hsi1oKj/RRq/OJQh2PKI2UKL04c2Bs+MBOB+BBABHTXJpf9mCwHN7ANCvYsvY2sg== + dependencies: + graceful-fs "^4.1.2" + neo-async "^2.5.0" + optionalDependencies: + chokidar "^3.4.1" + watchpack-chokidar2 "^2.0.0" + +wbuf@^1.1.0, wbuf@^1.7.3: + version "1.7.3" + resolved "https://registry.yarnpkg.com/wbuf/-/wbuf-1.7.3.tgz#c1d8d149316d3ea852848895cb6a0bfe887b87df" + integrity sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA== + dependencies: + minimalistic-assert "^1.0.0" + +wcwidth@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/wcwidth/-/wcwidth-1.0.1.tgz#f0b0dcf915bc5ff1528afadb2c0e17b532da2fe8" + integrity sha1-8LDc+RW8X/FSivrbLA4XtTLaL+g= + dependencies: + defaults "^1.0.3" + +webpack-bundle-analyzer@^3.8.0: + version "3.8.0" + resolved "https://registry.yarnpkg.com/webpack-bundle-analyzer/-/webpack-bundle-analyzer-3.8.0.tgz#ce6b3f908daf069fd1f7266f692cbb3bded9ba16" + integrity sha512-PODQhAYVEourCcOuU+NiYI7WdR8QyELZGgPvB1y2tjbUpbmcQOt5Q7jEK+ttd5se0KSBKD9SXHCEozS++Wllmw== + dependencies: + acorn "^7.1.1" + acorn-walk "^7.1.1" + bfj "^6.1.1" + chalk "^2.4.1" + commander "^2.18.0" + ejs "^2.6.1" + express "^4.16.3" + filesize "^3.6.1" + gzip-size "^5.0.0" + lodash "^4.17.15" + mkdirp "^0.5.1" + opener "^1.5.1" + ws "^6.0.0" + +webpack-bundle-tracker@0.4.3: + version "0.4.3" + resolved "https://registry.yarnpkg.com/webpack-bundle-tracker/-/webpack-bundle-tracker-0.4.3.tgz#48a3e2226ddb9d24d704640ab4168c2d120f4526" + integrity sha512-Sl/+OsNhFAH3/c6XADupRu8jLvGojfXX0pZIIm3O5ZcJqkHHqlY4nLG+NVRcbDgM/jOeWimKDGQMVEa8FBeJ2g== + dependencies: + deep-extend "^0.6.0" + mkdirp "^0.5.1" + strip-ansi "^5.2.0" + +webpack-chain@^6.4.0: + version "6.5.1" + resolved "https://registry.yarnpkg.com/webpack-chain/-/webpack-chain-6.5.1.tgz#4f27284cbbb637e3c8fbdef43eef588d4d861206" + integrity sha512-7doO/SRtLu8q5WM0s7vPKPWX580qhi0/yBHkOxNkv50f6qB76Zy9o2wRTrrPULqYTvQlVHuvbA8v+G5ayuUDsA== + dependencies: + deepmerge "^1.5.2" + javascript-stringify "^2.0.1" + +webpack-dev-middleware@^3.7.2: + version "3.7.2" + resolved "https://registry.yarnpkg.com/webpack-dev-middleware/-/webpack-dev-middleware-3.7.2.tgz#0019c3db716e3fa5cecbf64f2ab88a74bab331f3" + integrity sha512-1xC42LxbYoqLNAhV6YzTYacicgMZQTqRd27Sim9wn5hJrX3I5nxYy1SxSd4+gjUFsz1dQFj+yEe6zEVmSkeJjw== + dependencies: + memory-fs "^0.4.1" + mime "^2.4.4" + mkdirp "^0.5.1" + range-parser "^1.2.1" + webpack-log "^2.0.0" + +webpack-dev-server@^3.11.0: + version "3.11.0" + resolved "https://registry.yarnpkg.com/webpack-dev-server/-/webpack-dev-server-3.11.0.tgz#8f154a3bce1bcfd1cc618ef4e703278855e7ff8c" + integrity sha512-PUxZ+oSTxogFQgkTtFndEtJIPNmml7ExwufBZ9L2/Xyyd5PnOL5UreWe5ZT7IU25DSdykL9p1MLQzmLh2ljSeg== + dependencies: + ansi-html "0.0.7" + bonjour "^3.5.0" + chokidar "^2.1.8" + compression "^1.7.4" + connect-history-api-fallback "^1.6.0" + debug "^4.1.1" + del "^4.1.1" + express "^4.17.1" + html-entities "^1.3.1" + http-proxy-middleware "0.19.1" + import-local "^2.0.0" + internal-ip "^4.3.0" + ip "^1.1.5" + is-absolute-url "^3.0.3" + killable "^1.0.1" + loglevel "^1.6.8" + opn "^5.5.0" + p-retry "^3.0.1" + portfinder "^1.0.26" + schema-utils "^1.0.0" + selfsigned "^1.10.7" + semver "^6.3.0" + serve-index "^1.9.1" + sockjs "0.3.20" + sockjs-client "1.4.0" + spdy "^4.0.2" + strip-ansi "^3.0.1" + supports-color "^6.1.0" + url "^0.11.0" + webpack-dev-middleware "^3.7.2" + webpack-log "^2.0.0" + ws "^6.2.1" + yargs "^13.3.2" + +webpack-log@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/webpack-log/-/webpack-log-2.0.0.tgz#5b7928e0637593f119d32f6227c1e0ac31e1b47f" + integrity sha512-cX8G2vR/85UYG59FgkoMamwHUIkSSlV3bBMRsbxVXVUk2j6NleCKjQ/WE9eYg9WY4w25O9w8wKP4rzNZFmUcUg== + dependencies: + ansi-colors "^3.0.0" + uuid "^3.3.2" + +webpack-merge@^4.2.2: + version "4.2.2" + resolved "https://registry.yarnpkg.com/webpack-merge/-/webpack-merge-4.2.2.tgz#a27c52ea783d1398afd2087f547d7b9d2f43634d" + integrity sha512-TUE1UGoTX2Cd42j3krGYqObZbOD+xF7u28WB7tfUordytSjbWTIjK/8V0amkBfTYN4/pB/GIDlJZZ657BGG19g== + dependencies: + lodash "^4.17.15" + +webpack-sources@^1.1.0, webpack-sources@^1.4.0, webpack-sources@^1.4.1, webpack-sources@^1.4.3: + version "1.4.3" + resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-1.4.3.tgz#eedd8ec0b928fbf1cbfe994e22d2d890f330a933" + integrity sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ== + dependencies: + source-list-map "^2.0.0" + source-map "~0.6.1" + +webpack@^4.0.0: + version "4.44.1" + resolved "https://registry.yarnpkg.com/webpack/-/webpack-4.44.1.tgz#17e69fff9f321b8f117d1fda714edfc0b939cc21" + integrity sha512-4UOGAohv/VGUNQJstzEywwNxqX417FnjZgZJpJQegddzPmTvph37eBIRbRTfdySXzVtJXLJfbMN3mMYhM6GdmQ== + dependencies: + "@webassemblyjs/ast" "1.9.0" + "@webassemblyjs/helper-module-context" "1.9.0" + "@webassemblyjs/wasm-edit" "1.9.0" + "@webassemblyjs/wasm-parser" "1.9.0" + acorn "^6.4.1" + ajv "^6.10.2" + ajv-keywords "^3.4.1" + chrome-trace-event "^1.0.2" + enhanced-resolve "^4.3.0" + eslint-scope "^4.0.3" + json-parse-better-errors "^1.0.2" + loader-runner "^2.4.0" + loader-utils "^1.2.3" + memory-fs "^0.4.1" + micromatch "^3.1.10" + mkdirp "^0.5.3" + neo-async "^2.6.1" + node-libs-browser "^2.2.1" + schema-utils "^1.0.0" + tapable "^1.1.3" + terser-webpack-plugin "^1.4.3" + watchpack "^1.7.4" + webpack-sources "^1.4.1" + +websocket-driver@0.6.5: + version "0.6.5" + resolved "https://registry.yarnpkg.com/websocket-driver/-/websocket-driver-0.6.5.tgz#5cb2556ceb85f4373c6d8238aa691c8454e13a36" + integrity sha1-XLJVbOuF9Dc8bYI4qmkchFThOjY= + dependencies: + websocket-extensions ">=0.1.1" + +websocket-driver@>=0.5.1: + version "0.7.4" + resolved "https://registry.yarnpkg.com/websocket-driver/-/websocket-driver-0.7.4.tgz#89ad5295bbf64b480abcba31e4953aca706f5760" + integrity sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg== + dependencies: + http-parser-js ">=0.5.1" + safe-buffer ">=5.1.0" + websocket-extensions ">=0.1.1" + +websocket-extensions@>=0.1.1: + version "0.1.4" + resolved "https://registry.yarnpkg.com/websocket-extensions/-/websocket-extensions-0.1.4.tgz#7f8473bc839dfd87608adb95d7eb075211578a42" + integrity sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg== + +which-module@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.0.tgz#d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a" + integrity sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho= + +which@^1.2.9: + version "1.3.1" + resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a" + integrity sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ== + dependencies: + isexe "^2.0.0" + +which@^2.0.1: + version "2.0.2" + resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" + integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== + dependencies: + isexe "^2.0.0" + +word-wrap@~1.2.3: + version "1.2.3" + resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.3.tgz#610636f6b1f703891bd34771ccb17fb93b47079c" + integrity sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ== + +worker-farm@^1.7.0: + version "1.7.0" + resolved "https://registry.yarnpkg.com/worker-farm/-/worker-farm-1.7.0.tgz#26a94c5391bbca926152002f69b84a4bf772e5a8" + integrity sha512-rvw3QTZc8lAxyVrqcSGVm5yP/IJ2UcB3U0graE3LCFoZ0Yn2x4EoVSqJKdB/T5M+FLcRPjz4TDacRf3OCfNUzw== + dependencies: + errno "~0.1.7" + +wrap-ansi@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-5.1.0.tgz#1fd1f67235d5b6d0fee781056001bfb694c03b09" + integrity sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q== + dependencies: + ansi-styles "^3.2.0" + string-width "^3.0.0" + strip-ansi "^5.0.0" + +wrap-ansi@^6.2.0: + version "6.2.0" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-6.2.0.tgz#e9393ba07102e6c91a3b221478f0257cd2856e53" + integrity sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA== + dependencies: + ansi-styles "^4.0.0" + string-width "^4.1.0" + strip-ansi "^6.0.0" + +wrappy@1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" + integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= + +write@1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/write/-/write-1.0.3.tgz#0800e14523b923a387e415123c865616aae0f5c3" + integrity sha512-/lg70HAjtkUgWPVZhZcm+T4hkL8Zbtp1nFNOn3lRrxnlv50SRBv7cR7RqR+GMsd3hUXy9hWBo4CHTbFTcOYwig== + dependencies: + mkdirp "^0.5.1" + +ws@^6.0.0, ws@^6.2.1: + version "6.2.1" + resolved "https://registry.yarnpkg.com/ws/-/ws-6.2.1.tgz#442fdf0a47ed64f59b6a5d8ff130f4748ed524fb" + integrity sha512-GIyAXC2cB7LjvpgMt9EKS2ldqr0MTrORaleiOno6TweZ6r3TKtoFQWay/2PceJ3RuBasOHzXNn5Lrw1X0bEjqA== + dependencies: + async-limiter "~1.0.0" + +xtend@^4.0.0, xtend@~4.0.1: + version "4.0.2" + resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54" + integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ== + +y18n@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/y18n/-/y18n-4.0.0.tgz#95ef94f85ecc81d007c264e190a120f0a3c8566b" + integrity sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w== + +yallist@^2.1.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/yallist/-/yallist-2.1.2.tgz#1c11f9218f076089a47dd512f93c6699a6a81d52" + integrity sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI= + +yallist@^3.0.2: + version "3.1.1" + resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd" + integrity sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g== + +yallist@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" + integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== + +yargs-parser@^13.1.2: + version "13.1.2" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-13.1.2.tgz#130f09702ebaeef2650d54ce6e3e5706f7a4fb38" + integrity sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg== + dependencies: + camelcase "^5.0.0" + decamelize "^1.2.0" + +yargs-parser@^18.1.2: + version "18.1.3" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-18.1.3.tgz#be68c4975c6b2abf469236b0c870362fab09a7b0" + integrity sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ== + dependencies: + camelcase "^5.0.0" + decamelize "^1.2.0" + +yargs@^13.3.2: + version "13.3.2" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-13.3.2.tgz#ad7ffefec1aa59565ac915f82dccb38a9c31a2dd" + integrity sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw== + dependencies: + cliui "^5.0.0" + find-up "^3.0.0" + get-caller-file "^2.0.1" + require-directory "^2.1.1" + require-main-filename "^2.0.0" + set-blocking "^2.0.0" + string-width "^3.0.0" + which-module "^2.0.0" + y18n "^4.0.0" + yargs-parser "^13.1.2" + +yargs@^15.0.0: + version "15.4.1" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-15.4.1.tgz#0d87a16de01aee9d8bec2bfbf74f67851730f4f8" + integrity sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A== + dependencies: + cliui "^6.0.0" + decamelize "^1.2.0" + find-up "^4.1.0" + get-caller-file "^2.0.1" + require-directory "^2.1.1" + require-main-filename "^2.0.0" + set-blocking "^2.0.0" + string-width "^4.2.0" + which-module "^2.0.0" + y18n "^4.0.0" + yargs-parser "^18.1.2" + +yorkie@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/yorkie/-/yorkie-2.0.0.tgz#92411912d435214e12c51c2ae1093e54b6bb83d9" + integrity sha512-jcKpkthap6x63MB4TxwCyuIGkV0oYP/YRyuQU5UO0Yz/E/ZAu+653/uov+phdmO54n6BcvFRyyt0RRrWdN2mpw== + dependencies: + execa "^0.8.0" + is-ci "^1.0.10" + normalize-path "^1.0.0" + strip-indent "^2.0.0" From b202060742d44779ff03db7b591fc93e40a6b3f2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kate=C5=99ina=20=C4=8C?= Date: Thu, 3 Sep 2020 23:03:08 +0200 Subject: [PATCH 129/286] =?UTF-8?q?koment=C3=A1=C5=99e=20k=20CisloView?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- seminar/urls.py | 2 +- seminar/views/views_all.py | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/seminar/urls.py b/seminar/urls.py index df2e1435..7481b66d 100644 --- a/seminar/urls.py +++ b/seminar/urls.py @@ -20,7 +20,7 @@ urlpatterns = [ path('archiv/temata/', views.ArchivTemataView.as_view()), path('rocnik//', views.RocnikView.as_view(), name='seminar_rocnik'), - path('cislo/./', views.CisloView.as_view(), name='seminar_cislo'), # odkomentované jenom kvůli testování archivu + path('cislo/./', views.CisloView.as_view(), name='seminar_cislo'), path('problem//', views.ProblemView.as_view(), name='seminar_problem'), path('treenode//', views.TreeNodeView.as_view(), name='seminar_treenode'), #path('problem/(?P\d+)/(?P\d+)/', views.PrispevekView.as_view(), name='seminar_problem_prispevek'), diff --git a/seminar/views/views_all.py b/seminar/views/views_all.py index 9fa25953..fd9badf0 100644 --- a/seminar/views/views_all.py +++ b/seminar/views/views_all.py @@ -795,6 +795,7 @@ def vysledkovka_cisla(cislo, context=None): return context class CisloView(generic.DetailView): + # FIXME zobrazování témátek a vůbec, teď je tam jen odkaz na číslo v pdf model = Cislo template_name = 'seminar/archiv/cislo.html' From bca00a3d6fd4d98fa0a5107da6913817b11de94a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kate=C5=99ina=20=C4=8C?= Date: Thu, 3 Sep 2020 23:07:28 +0200 Subject: [PATCH 130/286] =?UTF-8?q?prvn=C3=AD=20nedokon=C4=8Den=C3=BD=20po?= =?UTF-8?q?kus=20o=20jak-resit?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- mamweb/static/images/jakresit_1.svg | 26847 +++++++++++++++++++++ mamweb/static/images/jakresit_2.svg | 26847 +++++++++++++++++++++ mamweb/static/images/jakresit_3.svg | 26847 +++++++++++++++++++++ seminar/templates/seminar/jak-resit.html | 16 + 4 files changed, 80557 insertions(+) create mode 100644 mamweb/static/images/jakresit_1.svg create mode 100644 mamweb/static/images/jakresit_2.svg create mode 100644 mamweb/static/images/jakresit_3.svg create mode 100644 seminar/templates/seminar/jak-resit.html diff --git a/mamweb/static/images/jakresit_1.svg b/mamweb/static/images/jakresit_1.svg new file mode 100644 index 00000000..36a6b7c7 --- /dev/null +++ b/mamweb/static/images/jakresit_1.svg @@ -0,0 +1,26847 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/mamweb/static/images/jakresit_2.svg b/mamweb/static/images/jakresit_2.svg new file mode 100644 index 00000000..93fa9f2e --- /dev/null +++ b/mamweb/static/images/jakresit_2.svg @@ -0,0 +1,26847 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/mamweb/static/images/jakresit_3.svg b/mamweb/static/images/jakresit_3.svg new file mode 100644 index 00000000..63a34f13 --- /dev/null +++ b/mamweb/static/images/jakresit_3.svg @@ -0,0 +1,26847 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/seminar/templates/seminar/jak-resit.html b/seminar/templates/seminar/jak-resit.html new file mode 100644 index 00000000..b7d78376 --- /dev/null +++ b/seminar/templates/seminar/jak-resit.html @@ -0,0 +1,16 @@ +{% extends 'base.html' %} + +{% load humanize %} +{% load staticfiles %} + + +{% block content %} + +
+ + + + + +
+{% endblock %} From be6a79ab24d936fa9183de65690de663117f6340 Mon Sep 17 00:00:00 2001 From: "Tomas \"Jethro\" Pokorny" Date: Thu, 3 Sep 2020 23:09:30 +0200 Subject: [PATCH 131/286] TreeNode editor | misto

--- vue_frontend/src/components/TreeNode.vue | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/vue_frontend/src/components/TreeNode.vue b/vue_frontend/src/components/TreeNode.vue index 4d187b9d..0735fa49 100644 --- a/vue_frontend/src/components/TreeNode.vue +++ b/vue_frontend/src/components/TreeNode.vue @@ -8,7 +8,7 @@
-

Vložit jako syna

+ Vložit jako syna
  • {{chld[1]}} From 303c8e4b4b10c23991ee1c53096ce3bd405d3e93 Mon Sep 17 00:00:00 2001 From: "Pavel \"LEdoian\" Turinsky" Date: Fri, 4 Sep 2020 14:27:35 +0200 Subject: [PATCH 132/286] =?UTF-8?q?Oprava=20vytvo=C5=99en=C3=AD=20polymorf?= =?UTF-8?q?ick=C3=BDch=20contenttypes?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../0065_treenode_polymorphic_ctype.py | 4 +- .../0066_problem_polymorphic_ctype.py | 4 +- seminar/migrations/0087_fix_polymorphism.py | 49 +++++++++++++++++++ 3 files changed, 53 insertions(+), 4 deletions(-) create mode 100644 seminar/migrations/0087_fix_polymorphism.py diff --git a/seminar/migrations/0065_treenode_polymorphic_ctype.py b/seminar/migrations/0065_treenode_polymorphic_ctype.py index 71eef262..cb65d8f1 100644 --- a/seminar/migrations/0065_treenode_polymorphic_ctype.py +++ b/seminar/migrations/0065_treenode_polymorphic_ctype.py @@ -5,7 +5,7 @@ import django.db.models.deletion def vyrob_treenodum_ctypes(apps, schema_editor): # Kód zkopírovaný z dokumentace: https://django-polymorphic.readthedocs.io/en/stable/migrating.html - # XXX: Nevím, jestli se tohle náhodou nemělo spustit na všech childech (jen/i) + # NOTE: Tahle migrace je špatně, 0087 ji opravuje. Možno squashnout pryč. TreeNode = apps.get_model('seminar', 'TreeNode') ContentType = apps.get_model('contenttypes', 'ContentType') @@ -27,5 +27,5 @@ class Migration(migrations.Migration): name='polymorphic_ctype', field=models.ForeignKey(editable=False, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='polymorphic_seminar.treenode_set+', to='contenttypes.ContentType'), ), - migrations.RunPython(vyrob_treenodum_ctypes, migrations.RunPython.noop), + migrations.RunPython(vyrob_treenodum_ctypes, migrations.RunPython.noop, elidable=True), ] diff --git a/seminar/migrations/0066_problem_polymorphic_ctype.py b/seminar/migrations/0066_problem_polymorphic_ctype.py index f956217e..3aab4605 100644 --- a/seminar/migrations/0066_problem_polymorphic_ctype.py +++ b/seminar/migrations/0066_problem_polymorphic_ctype.py @@ -5,7 +5,7 @@ import django.db.models.deletion def vyrob_problemum_ctypes(apps, schema_editor): # Kód zkopírovaný z dokumentace: https://django-polymorphic.readthedocs.io/en/stable/migrating.html - # XXX: Nevím, jestli se tohle náhodou nemělo spustit na všech childech (jen/i) + # NOTE: Tahle migrace je špatně, 0087 ji opravuje. Možno squashnout pryč. Problem = apps.get_model('seminar', 'Problem') ContentType = apps.get_model('contenttypes', 'ContentType') @@ -25,5 +25,5 @@ class Migration(migrations.Migration): name='polymorphic_ctype', field=models.ForeignKey(editable=False, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='polymorphic_seminar.problem_set+', to='contenttypes.ContentType'), ), - migrations.RunPython(vyrob_problemum_ctypes, migrations.RunPython.noop), + migrations.RunPython(vyrob_problemum_ctypes, migrations.RunPython.noop, elidable=True), ] diff --git a/seminar/migrations/0087_fix_polymorphism.py b/seminar/migrations/0087_fix_polymorphism.py new file mode 100644 index 00000000..d38877ba --- /dev/null +++ b/seminar/migrations/0087_fix_polymorphism.py @@ -0,0 +1,49 @@ +# Generated by Django 2.2.16 on 2020-09-04 12:06 + +from django.db import migrations +from logging import getLogger + +log = getLogger(__name__) + +# Oprava migrací 0065 a 0066, kde jsem špatně pochopil django-polymorphic + +# Pomocná funkce -- děláme to samé pro obě polymorfní hierarchie +def fix_ctypes(parent: str, children, apps, schema_editor): + Parent = apps.get_model('seminar', parent) + ContentType = apps.get_model('contenttypes', 'ContentType') + + # Nejdřív všechno smažeme: + Parent.objects.update(polymorphic_ctype=None) + + # Opravíme děti + for clsname in children: + Model = apps.get_model('seminar', clsname) + ct = ContentType.objects.get_for_model(Model) + Model.objects.update(polymorphic_ctype=ct) + + + # Ostatní instance mají mít explicitně content type pro rodiče + new_ct = ContentType.objects.get_for_model(Parent) + for obj in Parent.objects.filter(polymorphic_ctype__isnull=True): + log.warn(f"{parent} {obj} neměl content type -- nejspíš to je instance přímo {parent}!") + obj.polymorphic_ctype=new_ct + obj.save() + +def fix_treenode(apps, schema_editor): + children = ['RocnikNode', 'CisloNode', 'MezicisloNode', 'TemaVCisleNode', + 'OrgTextNode', 'UlohaZadaniNode', 'UlohaVzorakNode', 'PohadkaNode', + 'TextNode', 'CastNode', 'ReseniNode'] + fix_ctypes("TreeNode", children, apps, schema_editor) + +def fix_problem(apps, schema_editor): + children = ['Tema', 'Clanek', 'Uloha', 'Konfera'] + fix_ctypes("Problem", children, apps, schema_editor) + +class Migration(migrations.Migration): + dependencies = [ + ('seminar', '0086_auto_20200819_0959'), + ] + operations = [ + migrations.RunPython(fix_treenode, migrations.RunPython.noop), + migrations.RunPython(fix_problem, migrations.RunPython.noop), + ] From f26f4a5c0fc65b031860e410dc4ecb3709d72170 Mon Sep 17 00:00:00 2001 From: "Pavel \"LEdoian\" Turinsky" Date: Fri, 4 Sep 2020 14:32:58 +0200 Subject: [PATCH 133/286] Fix --- seminar/migrations/0087_fix_polymorphism.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/seminar/migrations/0087_fix_polymorphism.py b/seminar/migrations/0087_fix_polymorphism.py index d38877ba..40ce9adf 100644 --- a/seminar/migrations/0087_fix_polymorphism.py +++ b/seminar/migrations/0087_fix_polymorphism.py @@ -25,7 +25,7 @@ def fix_ctypes(parent: str, children, apps, schema_editor): # Ostatní instance mají mít explicitně content type pro rodiče new_ct = ContentType.objects.get_for_model(Parent) for obj in Parent.objects.filter(polymorphic_ctype__isnull=True): - log.warn(f"{parent} {obj} neměl content type -- nejspíš to je instance přímo {parent}!") + log.warn(f"{parent} \"{obj}\" neměl content type -- nejspíš to je instance přímo {parent}!") obj.polymorphic_ctype=new_ct obj.save() @@ -36,7 +36,7 @@ def fix_treenode(apps, schema_editor): fix_ctypes("TreeNode", children, apps, schema_editor) def fix_problem(apps, schema_editor): - children = ['Tema', 'Clanek', 'Uloha', 'Konfera'] + children = ['Tema', 'Clanek', 'Uloha'] # FIXME: Konfera z nějakého důvodu tenhle field vůbec nemá, asi je to špatně. fix_ctypes("Problem", children, apps, schema_editor) class Migration(migrations.Migration): From f1ef0eab077268aaaf327486634fd92a4eff9b35 Mon Sep 17 00:00:00 2001 From: "Pavel \"LEdoian\" Turinsky" Date: Fri, 4 Sep 2020 14:41:01 +0200 Subject: [PATCH 134/286] =?UTF-8?q?Fix=20reference=20ji=C5=BE=20neexistuj?= =?UTF-8?q?=C3=ADc=C3=ADho=20template?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- seminar/templates/seminar/treenode.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/seminar/templates/seminar/treenode.html b/seminar/templates/seminar/treenode.html index 0fd734ef..ca4df002 100644 --- a/seminar/templates/seminar/treenode.html +++ b/seminar/templates/seminar/treenode.html @@ -1,4 +1,4 @@ -{% extends "seminar/archiv/base_ulohy.html" %} +{% extends "seminar/archiv/base.html" %} {% load comments %} From 714fb43eabac5d1ec0d00559471a90495ed395be Mon Sep 17 00:00:00 2001 From: "Pavel \"LEdoian\" Turinsky" Date: Fri, 4 Sep 2020 15:37:04 +0200 Subject: [PATCH 135/286] Pokus o opravu ClankyResitelView --- seminar/views/views_all.py | 22 ++++++++++++---------- 1 file changed, 12 insertions(+), 10 deletions(-) diff --git a/seminar/views/views_all.py b/seminar/views/views_all.py index 0144854a..d57fb221 100644 --- a/seminar/views/views_all.py +++ b/seminar/views/views_all.py @@ -1012,19 +1012,21 @@ def group_by_rocnik(clanky): # FIXME: clanky jsou vsechny, pokud budou i neresitelske, tak se take zobrazi +# FIXME: Původně tu byl kód přímo v těle třídy, což rozbíjelo migrace. Opravil jsem, ale vůbec nevím, jestli to funguje. class ClankyResitelView(generic.ListView): model = Problem template_name = 'seminar/clanky/resitelske_clanky.html' - #queryset - clanky = Clanek.objects.filter(stav=Problem.STAV_ZADANY).select_related('cislo__rocnik').order_by('-cislo__rocnik__rocnik') - queryset = [] - skupiny_clanku = group_by_rocnik(clanky) - for skupina in skupiny_clanku: - skupina.sort(key=lambda clanek: clanek.kod_v_rocniku()) - for clanek in skupina: - queryset.append(clanek) - - #zadani__rocnik').order_by('-cislo_zadani__rocnik__rocnik', 'kod') + + # FIXME: QuerySet není pole! + def get_queryset(self): + clanky = Clanek.objects.filter(stav=Problem.STAV_ZADANY).select_related('cislo__rocnik').order_by('-cislo__rocnik__rocnik') + queryset = [] + skupiny_clanku = group_by_rocnik(clanky) + for skupina in skupiny_clanku: + skupina.sort(key=lambda clanek: clanek.kod_v_rocniku()) + for clanek in skupina: + queryset.append(clanek) + return queryset # FIXME: pokud chceme orgoclanky, tak nejak zavest do modelu a podle toho odkomentovat a upravit #class ClankyOrganizatorView(generic.ListView): From b96187f60cc7d99532ca774aa906583c29c872e0 Mon Sep 17 00:00:00 2001 From: "Pavel \"LEdoian\" Turinsky" Date: Fri, 4 Sep 2020 16:28:38 +0200 Subject: [PATCH 136/286] =?UTF-8?q?P=C5=99id=C3=A1n=20handler=20pro=20/pro?= =?UTF-8?q?fil/?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- seminar/urls.py | 3 +++ seminar/views/views_all.py | 12 ++++++++++++ 2 files changed, 15 insertions(+) diff --git a/seminar/urls.py b/seminar/urls.py index ed42a7f8..e5fed60e 100644 --- a/seminar/urls.py +++ b/seminar/urls.py @@ -104,6 +104,9 @@ urlpatterns = [ path('reset_password_complete/', views.PasswordResetCompleteView.as_view(), name='reset_password_complete'), path('resitel_edit', views.resitelEditView, name='seminar_resitel_edit'), + # Obecný view na profil -- orgům dá rozcestník, řešitelům jejich stránku + path('profil/', views.profilView, name='profil'), + # Autocomplete path('autocomplete/skola/',views.SkolaAutocomplete.as_view(), name='autocomplete_skola'), path('autocomplete/resitel/',views.ResitelAutocomplete.as_view(), name='autocomplete_resitel'), diff --git a/seminar/views/views_all.py b/seminar/views/views_all.py index bdf5b816..f039d372 100644 --- a/seminar/views/views_all.py +++ b/seminar/views/views_all.py @@ -1306,3 +1306,15 @@ class PasswordResetCompleteView(auth_views.PasswordResetCompleteView): class PasswordChangeView(auth_views.PasswordChangeView): #template_name = 'seminar/password_change.html' success_url = reverse_lazy('titulni_strana') + + +# Jen hloupé rozhazovátko +def profilView(request): + user = request.user + # FIXME: správná oprávnění + if user.has_perm('org'): + return OrgoRozcestnikView.as_view()(request) + if user.has_perm('ucastnik'): + return ResitelView.as_view()(request) + else: + return LoginView.as_view()(request) From 4f42621fb3b77a743328d61838974b32141b53d5 Mon Sep 17 00:00:00 2001 From: "Pavel \"LEdoian\" Turinsky" Date: Fri, 4 Sep 2020 17:21:30 +0200 Subject: [PATCH 137/286] =?UTF-8?q?Pos=C3=ADl=C3=A1n=C3=AD=20e-mail=C5=AF?= =?UTF-8?q?=20z=20lok=C3=A1ln=C3=AD=20instance?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- mamweb/settings_local.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/mamweb/settings_local.py b/mamweb/settings_local.py index 1e62009f..de1f0b9b 100644 --- a/mamweb/settings_local.py +++ b/mamweb/settings_local.py @@ -94,4 +94,6 @@ LOGGING = { # set to 'DEBUG' for EXTRA verbose output # LOGGING['handlers']['console']['level'] = 'INFO' +# E-maily posílat chceme, ale do terminálu :-) EMAIL_BACKEND = 'django.core.mail.backends.console.EmailBackend' +SEND_EMAIL_NOTIFICATIONS = True From 11e1924338e54dcd8b295359364606c0eeaf6cc2 Mon Sep 17 00:00:00 2001 From: "Pavel \"LEdoian\" Turinsky" Date: Fri, 4 Sep 2020 17:29:22 +0200 Subject: [PATCH 138/286] =?UTF-8?q?Fix=20admin=20Nastaven=C3=AD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- seminar/admin.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/seminar/admin.py b/seminar/admin.py index edfbb595..c5d7e69b 100644 --- a/seminar/admin.py +++ b/seminar/admin.py @@ -3,6 +3,7 @@ from django.contrib import admin from polymorphic.admin import PolymorphicParentModelAdmin, PolymorphicChildModelAdmin, PolymorphicChildModelFilter from reversion.admin import VersionAdmin from django_reverse_admin import ReverseModelAdmin +from solo.admin import SingletonModelAdmin # Todo: reversion @@ -160,5 +161,5 @@ class TextNodeAdmin(PolymorphicChildModelAdmin): show_in_index = True -admin.site.register(m.Nastaveni) +admin.site.register(m.Nastaveni, SingletonModelAdmin) admin.site.register(m.Novinky) From 05ae74aeb384e98b6167f035b6d536ec3e18b182 Mon Sep 17 00:00:00 2001 From: "Pavel \"LEdoian\" Turinsky" Date: Fri, 4 Sep 2020 17:29:51 +0200 Subject: [PATCH 139/286] =?UTF-8?q?Smaz=C3=A1ny=20dom=C3=A9ny=20z=20odkaz?= =?UTF-8?q?=C5=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Takže teď již jde web testovat, aniž by se věci náhodně přesměrovávaly Možná jsem neměl měnit flat.json... --- flat.json | 2 +- korektury/views.py | 4 +++- seminar/templates/seminar/orgorozcestnik.html | 15 ++++++++------- seminar/templates/seminar/titulnistrana.html | 2 +- 4 files changed, 13 insertions(+), 10 deletions(-) diff --git a/flat.json b/flat.json index db13ba78..8adde103 100644 --- a/flat.json +++ b/flat.json @@ -125,7 +125,7 @@ "fields": { "url": "/soustredeni/", "title": "Informace", - "content": "

    Pro na\u0161e nejlep\u0161\u00ed \u0159e\u0161itele po\u0159\u00e1d\u00e1me dvakr\u00e1t do roka t\u00fddenn\u00ed soust\u0159ed\u011bn\u00ed pln\u00e9 odborn\u00e9ho programu i nejr\u016fzn\u011bj\u0161\u00ed z\u00e1bavy.

    \r\n\r\n\r\n

    Pro\u010d jet na soust\u0159ed\u011bn\u00ed?

    \r\n\r\n

    P\u0159edn\u00e1\u0161ky

    \r\n\r\n

    V\u011bt\u0161inou t\u011b ka\u017ed\u00fd den \u010dekaj\u00ed dv\u011b devades\u00e1timinutov\u00e9 p\u0159edn\u00e1\u0161ky. Vybrat si obvykle m\u016f\u017ee\u0161 mezi matematikou, fyzikou a informatikou, proto\u017ee se konaj\u00ed t\u0159i p\u0159edn\u00e1\u0161ky z\u00e1rove\u0148. N\u011bkter\u00e9 p\u0159edn\u00e1\u0161ky jsou leh\u010d\u00ed, jin\u00e9 t\u011b\u017e\u0161\u00ed, obecn\u011b je ale jejich \u00farove\u0148 vhodn\u00e1 pr\u00e1v\u011b pro zv\u00eddav\u00e9 st\u0159edo\u0161kol\u00e1ky. P\u0159edn\u00e1\u0161\u00edme jak klasick\u00e1 t\u00e9mata, tak t\u00e9mata nev\u0161edn\u00ed, z\u00e1kulisn\u00ed \u010di dokonce obskurn\u00ed. Kdy\u017e bude\u0161 organiz\u00e1tory hodn\u011b prosit, mo\u017en\u00e1 se dostane i na n\u011bjakou \u010dernou magii!

    \r\n\r\n

    Krom toho p\u0159edn\u00e1\u0161\u00edme i na po\u017e\u00e1d\u00e1n\u00ed \u2013 sta\u010d\u00ed, kdy\u017e si vybere\u0161 t\u00e9ma, kter\u00e9 t\u011b zaj\u00edm\u00e1, a oslov\u00ed\u0161 toho spr\u00e1vn\u00e9ho organiz\u00e1tora.

    \r\n\r\n

    Lid\u00e9

    \r\n\r\n

    Pozn\u00e1\u0161 lidi, pro kter\u00e9 je p\u0159em\u00fd\u0161len\u00ed obl\u00edbenou \u010dinnost\u00ed a pro kter\u00e9 matematika nen\u00ed sprost\u00e9 slovo. P\u0159edev\u0161\u00edm to jsou ale lidi, kte\u0159\u00ed se r\u00e1di bav\u00ed a se kter\u00fdmi si u\u017eije\u0161 mnoho legrace u j\u00eddla, b\u011bhem her, na v\u00fdlet\u011b, jen tak, p\u0159i hran\u00ed na kytaru nebo p\u0159i \u0161ar\u00e1d\u011bn\u00ed (pokud nev\u00ed\u0161, co tohle slovo znamen\u00e1, je na \u010dase to zjistit!).

    \r\n\r\n

    Konfery

    \r\n\r\n

    Konfery jsou na\u0161\u00ed specialitou. Ve skupin\u011b \u00fa\u010dastn\u00edk\u016f a pod veden\u00edm zku\u0161en\u00e9ho organiz\u00e1tora m\u016f\u017ee\u0161 zkusit pracovat na zadan\u00e9m probl\u00e9mu a v\u00fdsledky pak ostatn\u00edm prezentovat na mal\u00e9 v\u011bdeck\u00e9 konferenci. Pr\u00e1ce na konfe\u0159e je velmi podobn\u00e1 skute\u010dn\u00e9 v\u011bdeck\u00e9 pr\u00e1ci. M\u00e1me za sebou nap\u0159\u00edklad stavbu katapultu, po\u010d\u00edta\u010dovou synt\u00e9zu zvuku \u010di tropickou geometrii.

    \r\n\r\n

    Hry

    \r\n\r\n

    M\u00e1me pro tebe p\u0159ipravenou celou \u0159adu denn\u00edch i no\u010dn\u00edch her, uvnit\u0159 i venku, strategick\u00fdch i ak\u010dn\u00edch. A n\u011bkdy tohle v\u0161echno dohromady. Chceme, aby sis mohl/a zkusit \u010dinnosti, ke kter\u00fdm se b\u011b\u017en\u011b nedostane\u0161. St\u0159elba z luku, lezen\u00ed po skal\u00e1ch, slackline \u010di celono\u010dn\u00ed \u0161ifrova\u010dka? Nen\u00ed probl\u00e9m!

    \r\n\r\n

    Legenda

    \r\n\r\n

    Ka\u017ed\u00e9 soust\u0159ed\u011bn\u00ed m\u00e1 sv\u00e9 vlastn\u00ed prost\u0159ed\u00ed \u010di p\u0159\u00edb\u011bh, kter\u00fd j\u00edm prov\u00e1z\u00ed. U\u017e jsme byli ve starov\u011bk\u00e9m \u0158ecku \u010di pod podlahou obcho\u010f\u00e1ku, cestovali jsme \u010dasem a tak\u00e9 jsme bojovali s krvela\u010dn\u00fdmi zmutovan\u00fdmi tule\u0148\u00e1tky, kter\u00e1 se nakonec uk\u00e1zala b\u00fdt filma\u0159sk\u00fdm trikem. Co n\u00e1s \u010dek\u00e1 p\u0159\u00ed\u0161t\u011b?

    \r\n\r\n

    Absence ve \u0161kole

    \r\n\r\n

    Ne\u017e pojede\u0161 na soust\u0159ed\u011bn\u00ed, po\u0161leme ti ofici\u00e1ln\u00ed omluvenku od MFF UK. Jeliko\u017e je soust\u0159ed\u011bn\u00ed pln\u00e9 odborn\u00e9ho programu, v\u011bt\u0161ina \u0161kol na\u0161e \u0159e\u0161itele bez probl\u00e9mu uvol\u0148uje. N\u011bkter\u00e9 \u0161koly dokonce \u00fa\u010dast na soust\u0159ed\u011bn\u00ed nezapo\u010d\u00edt\u00e1vaj\u00ed do absence. V\u017edy je ale dobr\u00e9 se informovat, jak \u00fa\u010dast na podobn\u00fdch akc\u00edch \u0159e\u0161\u00ed tvoje \u0161kola, a p\u0159\u00edpadn\u011b se osobn\u011b domluvit s \u0159editelem \u010di \u0159editelkou.

    \r\n\r\n

    Kapacita soust\u0159ed\u011bn\u00ed

    \r\n\r\n

    Proto\u017ee chceme zachovat p\u0159\u00e1telskou a komorn\u00ed atmosf\u00e9ru soust\u0159ed\u011bn\u00ed, zveme na soust\u0159ed\u011bn\u00ed zhruba dvacet nej\u00fasp\u011b\u0161n\u011bj\u0161\u00edch \u0159e\u0161itel\u016f koresponden\u010dn\u00edho semin\u00e1\u0159e. N\u011bkolik dal\u0161\u00edch \u0159e\u0161itel\u016f zveme jako n\u00e1hradn\u00edky pro p\u0159\u00edpad, \u017ee by n\u011bkte\u0159\u00ed pozvan\u00ed nemohli. Pokud t\u011b na soust\u0159ed\u011bn\u00ed nepozveme, nezoufej a zkus v p\u0159\u00ed\u0161t\u00edm p\u016flroce v\u00edc \u0159e\u0161it t\u00e9mata. Dostat se mezi nejlep\u0161\u00edch dvacet \u0159e\u0161itel\u016f je s trochou p\u00edle hra\u010dka.

    \r\n\r\n

     

    \r\n", + "content": "

    Pro na\u0161e nejlep\u0161\u00ed \u0159e\u0161itele po\u0159\u00e1d\u00e1me dvakr\u00e1t do roka t\u00fddenn\u00ed soust\u0159ed\u011bn\u00ed pln\u00e9 odborn\u00e9ho programu i nejr\u016fzn\u011bj\u0161\u00ed z\u00e1bavy.

    \r\n\r\n\r\n

    Pro\u010d jet na soust\u0159ed\u011bn\u00ed?

    \r\n\r\n

    P\u0159edn\u00e1\u0161ky

    \r\n\r\n

    V\u011bt\u0161inou t\u011b ka\u017ed\u00fd den \u010dekaj\u00ed dv\u011b devades\u00e1timinutov\u00e9 p\u0159edn\u00e1\u0161ky. Vybrat si obvykle m\u016f\u017ee\u0161 mezi matematikou, fyzikou a informatikou, proto\u017ee se konaj\u00ed t\u0159i p\u0159edn\u00e1\u0161ky z\u00e1rove\u0148. N\u011bkter\u00e9 p\u0159edn\u00e1\u0161ky jsou leh\u010d\u00ed, jin\u00e9 t\u011b\u017e\u0161\u00ed, obecn\u011b je ale jejich \u00farove\u0148 vhodn\u00e1 pr\u00e1v\u011b pro zv\u00eddav\u00e9 st\u0159edo\u0161kol\u00e1ky. P\u0159edn\u00e1\u0161\u00edme jak klasick\u00e1 t\u00e9mata, tak t\u00e9mata nev\u0161edn\u00ed, z\u00e1kulisn\u00ed \u010di dokonce obskurn\u00ed. Kdy\u017e bude\u0161 organiz\u00e1tory hodn\u011b prosit, mo\u017en\u00e1 se dostane i na n\u011bjakou \u010dernou magii!

    \r\n\r\n

    Krom toho p\u0159edn\u00e1\u0161\u00edme i na po\u017e\u00e1d\u00e1n\u00ed \u2013 sta\u010d\u00ed, kdy\u017e si vybere\u0161 t\u00e9ma, kter\u00e9 t\u011b zaj\u00edm\u00e1, a oslov\u00ed\u0161 toho spr\u00e1vn\u00e9ho organiz\u00e1tora.

    \r\n\r\n

    Lid\u00e9

    \r\n\r\n

    Pozn\u00e1\u0161 lidi, pro kter\u00e9 je p\u0159em\u00fd\u0161len\u00ed obl\u00edbenou \u010dinnost\u00ed a pro kter\u00e9 matematika nen\u00ed sprost\u00e9 slovo. P\u0159edev\u0161\u00edm to jsou ale lidi, kte\u0159\u00ed se r\u00e1di bav\u00ed a se kter\u00fdmi si u\u017eije\u0161 mnoho legrace u j\u00eddla, b\u011bhem her, na v\u00fdlet\u011b, jen tak, p\u0159i hran\u00ed na kytaru nebo p\u0159i \u0161ar\u00e1d\u011bn\u00ed (pokud nev\u00ed\u0161, co tohle slovo znamen\u00e1, je na \u010dase to zjistit!).

    \r\n\r\n

    Konfery

    \r\n\r\n

    Konfery jsou na\u0161\u00ed specialitou. Ve skupin\u011b \u00fa\u010dastn\u00edk\u016f a pod veden\u00edm zku\u0161en\u00e9ho organiz\u00e1tora m\u016f\u017ee\u0161 zkusit pracovat na zadan\u00e9m probl\u00e9mu a v\u00fdsledky pak ostatn\u00edm prezentovat na mal\u00e9 v\u011bdeck\u00e9 konferenci. Pr\u00e1ce na konfe\u0159e je velmi podobn\u00e1 skute\u010dn\u00e9 v\u011bdeck\u00e9 pr\u00e1ci. M\u00e1me za sebou nap\u0159\u00edklad stavbu katapultu, po\u010d\u00edta\u010dovou synt\u00e9zu zvuku \u010di tropickou geometrii.

    \r\n\r\n

    Hry

    \r\n\r\n

    M\u00e1me pro tebe p\u0159ipravenou celou \u0159adu denn\u00edch i no\u010dn\u00edch her, uvnit\u0159 i venku, strategick\u00fdch i ak\u010dn\u00edch. A n\u011bkdy tohle v\u0161echno dohromady. Chceme, aby sis mohl/a zkusit \u010dinnosti, ke kter\u00fdm se b\u011b\u017en\u011b nedostane\u0161. St\u0159elba z luku, lezen\u00ed po skal\u00e1ch, slackline \u010di celono\u010dn\u00ed \u0161ifrova\u010dka? Nen\u00ed probl\u00e9m!

    \r\n\r\n

    Legenda

    \r\n\r\n

    Ka\u017ed\u00e9 soust\u0159ed\u011bn\u00ed m\u00e1 sv\u00e9 vlastn\u00ed prost\u0159ed\u00ed \u010di p\u0159\u00edb\u011bh, kter\u00fd j\u00edm prov\u00e1z\u00ed. U\u017e jsme byli ve starov\u011bk\u00e9m \u0158ecku \u010di pod podlahou obcho\u010f\u00e1ku, cestovali jsme \u010dasem a tak\u00e9 jsme bojovali s krvela\u010dn\u00fdmi zmutovan\u00fdmi tule\u0148\u00e1tky, kter\u00e1 se nakonec uk\u00e1zala b\u00fdt filma\u0159sk\u00fdm trikem. Co n\u00e1s \u010dek\u00e1 p\u0159\u00ed\u0161t\u011b?

    \r\n\r\n

    Absence ve \u0161kole

    \r\n\r\n

    Ne\u017e pojede\u0161 na soust\u0159ed\u011bn\u00ed, po\u0161leme ti ofici\u00e1ln\u00ed omluvenku od MFF UK. Jeliko\u017e je soust\u0159ed\u011bn\u00ed pln\u00e9 odborn\u00e9ho programu, v\u011bt\u0161ina \u0161kol na\u0161e \u0159e\u0161itele bez probl\u00e9mu uvol\u0148uje. N\u011bkter\u00e9 \u0161koly dokonce \u00fa\u010dast na soust\u0159ed\u011bn\u00ed nezapo\u010d\u00edt\u00e1vaj\u00ed do absence. V\u017edy je ale dobr\u00e9 se informovat, jak \u00fa\u010dast na podobn\u00fdch akc\u00edch \u0159e\u0161\u00ed tvoje \u0161kola, a p\u0159\u00edpadn\u011b se osobn\u011b domluvit s \u0159editelem \u010di \u0159editelkou.

    \r\n\r\n

    Kapacita soust\u0159ed\u011bn\u00ed

    \r\n\r\n

    Proto\u017ee chceme zachovat p\u0159\u00e1telskou a komorn\u00ed atmosf\u00e9ru soust\u0159ed\u011bn\u00ed, zveme na soust\u0159ed\u011bn\u00ed zhruba dvacet nej\u00fasp\u011b\u0161n\u011bj\u0161\u00edch \u0159e\u0161itel\u016f koresponden\u010dn\u00edho semin\u00e1\u0159e. N\u011bkolik dal\u0161\u00edch \u0159e\u0161itel\u016f zveme jako n\u00e1hradn\u00edky pro p\u0159\u00edpad, \u017ee by n\u011bkte\u0159\u00ed pozvan\u00ed nemohli. Pokud t\u011b na soust\u0159ed\u011bn\u00ed nepozveme, nezoufej a zkus v p\u0159\u00ed\u0161t\u00edm p\u016flroce v\u00edc \u0159e\u0161it t\u00e9mata. Dostat se mezi nejlep\u0161\u00edch dvacet \u0159e\u0161itel\u016f je s trochou p\u00edle hra\u010dka.

    \r\n\r\n

     

    \r\n", "enable_comments": false, "template_name": "", "registration_required": false, diff --git a/korektury/views.py b/korektury/views.py index e2d342ec..aea3813a 100644 --- a/korektury/views.py +++ b/korektury/views.py @@ -152,7 +152,9 @@ class KorekturyView(generic.TemplateView): ''' # parametry e-mailu - odkaz = "https://mam.mff.cuni.cz/korektury/{}/".format(oprava.pdf.pk) + #odkaz = "https://mam.mff.cuni.cz/korektury/{}/".format(oprava.pdf.pk) + from django.urls import reverse + odkaz = self.request.build_absolute_uri(reverse('korektury', kwargs={'pdf': oprava.pdf.pk})) from_email = 'korekturovatko@mam.mff.cuni.cz' subject = 'Nová korektura od {} v {}'.format(autor, oprava.pdf.nazev) diff --git a/seminar/templates/seminar/orgorozcestnik.html b/seminar/templates/seminar/orgorozcestnik.html index 5bd75403..73268812 100644 --- a/seminar/templates/seminar/orgorozcestnik.html +++ b/seminar/templates/seminar/orgorozcestnik.html @@ -1,4 +1,5 @@ {% extends "base.html" %} +{# FIXME: Použít ideálně reverse() ke zjišťování URL #} {% block content %}

    Informace, komunikace

    @@ -12,18 +13,18 @@
  • soustředění
-
  • přidat novinku na web
  • +
  • přidat novinku na web

  • Tvorba čísla

      -
    • přidat téma
    • +
    • přidat téma
    • korektury
    • poslední vydané číslo
    • @@ -60,11 +61,11 @@
    • přednášky
    • -
    • proběhlá soustředění +
    • proběhlá soustředění
      • vytvoření galerie
      • stažení seznamu účastníků
      • @@ -81,6 +82,6 @@

      -

      Nemůžeš najít, co hledáš? Může to být v administračním rozhraní webu.

      +

      Nemůžeš najít, co hledáš? Může to být v administračním rozhraní webu.

      {% endblock content %} diff --git a/seminar/templates/seminar/titulnistrana.html b/seminar/templates/seminar/titulnistrana.html index bf9a884a..8f6057bf 100644 --- a/seminar/templates/seminar/titulnistrana.html +++ b/seminar/templates/seminar/titulnistrana.html @@ -20,7 +20,7 @@ M&M je korespondenční seminář. Několikrát do roka zdarma vydáváme č
      {% if dead %}
      -

      Do konce odeslání řešení {% if deadline_soustredeni %}(pro účast na soustředění) {% endif %}zbývá:
      +

      Do konce odeslání řešení {% if deadline_soustredeni %}(pro účast na soustředění) {% endif %}zbývá:
      {{ted|timesince:dead}}

      {% endif %} From 54ae94866262564c8184224b441f70152f360391 Mon Sep 17 00:00:00 2001 From: "Pavel \"LEdoian\" Turinsky" Date: Fri, 4 Sep 2020 18:05:33 +0200 Subject: [PATCH 140/286] =?UTF-8?q?P=C5=99id=C3=A1no=20potvrzen=C3=AD=20od?= =?UTF-8?q?esl=C3=A1n=C3=AD=20formul=C3=A1=C5=99e?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- seminar/templates/seminar/formular_ok.html | 10 ++++++++++ seminar/views/views_all.py | 18 ++++++++++++++++-- 2 files changed, 26 insertions(+), 2 deletions(-) create mode 100644 seminar/templates/seminar/formular_ok.html diff --git a/seminar/templates/seminar/formular_ok.html b/seminar/templates/seminar/formular_ok.html new file mode 100644 index 00000000..6388f60c --- /dev/null +++ b/seminar/templates/seminar/formular_ok.html @@ -0,0 +1,10 @@ +{% extends "base.html" %} + +{% block nadpis1a %}Formulář byl odeslán{% endblock %} + +{% block content %} +

      Formulář byl úspěšně odeslán

      +{% for odkaz in odkazy %} +

      {{odkaz.0}}

      +{% endfor %} +{% endblock %} diff --git a/seminar/views/views_all.py b/seminar/views/views_all.py index f039d372..cae17b77 100644 --- a/seminar/views/views_all.py +++ b/seminar/views/views_all.py @@ -1188,7 +1188,7 @@ def resitelEditView(request): msg = "Unknown school {}, {}".format(fcd['skola_nazev'],fcd['skola_adresa']) resitel_edit.save() osoba_edit.save() - return HttpResponseRedirect('/thanks/') + return formularOKView(request) else: ## Stránka před odeslaním formuláře = předvyplněný formulář return render(request, 'seminar/profil/edit.html', {'form': form}) @@ -1256,7 +1256,7 @@ def prihlaskaView(request): r.save() - return HttpResponseRedirect('/thanks/') + return formularOKView(request) # if a GET (or any other method) we'll create a blank form else: @@ -1318,3 +1318,17 @@ def profilView(request): return ResitelView.as_view()(request) else: return LoginView.as_view()(request) + +# Interní, nemá se nikdy objevit v urls (jinak to účastníci vytrolí) +def formularOKView(request): + template_name = 'seminar/formular_ok.html' + odkazy = [ + # (Text, odkaz) + ('Vrátit se na titulní stránku', reverse('titulni_strana')), + ('Zobrazit aktuální zadání', reverse('seminar_aktualni_zadani')), + ] + context = { + 'odkazy': odkazy, + } + return render(request, template_name, context) + From 4a3454e2e4ab82a43c4cbb794622654ad9ba9b94 Mon Sep 17 00:00:00 2001 From: "Tomas \"Jethro\" Pokorny" Date: Fri, 4 Sep 2020 21:50:56 +0200 Subject: [PATCH 141/286] TreeNode editor | odstranena nepouzivana aplikace z konfigurace --- vue_frontend/vue.config.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/vue_frontend/vue.config.js b/vue_frontend/vue.config.js index d1ae1d2b..8d61b6ce 100644 --- a/vue_frontend/vue.config.js +++ b/vue_frontend/vue.config.js @@ -5,10 +5,11 @@ const pages = { entry: './src/main.js', chunks: ['chunk-vendors'] }, - 'vue_app_02': { +/* 'vue_app_02': { entry: './src/newhampshir.js', chunks: ['chunk-vendors'] }, +*/ } module.exports = { From ba9f869193d42f48b1505b8537527fbeb56115b9 Mon Sep 17 00:00:00 2001 From: "Tomas \"Jethro\" Pokorny" Date: Sat, 5 Sep 2020 06:57:54 +0200 Subject: [PATCH 142/286] TreeNode editor | pridavani novych nodu (WIP) --- vue_frontend/src/components/TreeNode.vue | 27 ++++++++++++++++++------ 1 file changed, 21 insertions(+), 6 deletions(-) diff --git a/vue_frontend/src/components/TreeNode.vue b/vue_frontend/src/components/TreeNode.vue index 0735fa49..0490395c 100644 --- a/vue_frontend/src/components/TreeNode.vue +++ b/vue_frontend/src/components/TreeNode.vue @@ -16,22 +16,31 @@
    -
    -

    Vložit před

    +
    + Vložit před +
      -
    • +
    • +
      + Vložit mezi + Vložit za + +
    -

    diff --git a/vue_frontend/src/components/CastNode.vue b/vue_frontend/src/components/CastNode.vue index 1ffff915..3eb9fb8f 100644 --- a/vue_frontend/src/components/CastNode.vue +++ b/vue_frontend/src/components/CastNode.vue @@ -21,12 +21,20 @@ export default { originalText: "", }), props: { - item: Object + item: Object, + editorShow: Boolean, + create: Boolean, }, mounted: function() { - console.log("mounted"); - this.currentText = this.item.node.nadpis; - this.originalText = this.item.node.nadpis; + if (this.create){ + this.currentText = ""; + this.originalText = ""; + this.editorShow = true; + } + else { + this.currentText = this.item.node.nadpis; + this.originalText = this.item.node.nadpis; + } //this.getText(); }, methods: { @@ -36,7 +44,7 @@ export default { // FIXME really save! this.editorShow = false; } - } + }, } diff --git a/vue_frontend/src/components/TextNode.vue b/vue_frontend/src/components/TextNode.vue index 47c03278..2e6d689b 100644 --- a/vue_frontend/src/components/TextNode.vue +++ b/vue_frontend/src/components/TextNode.vue @@ -38,7 +38,7 @@ export default { }), computed: { changedObject: function () { - console.log(this.currentText); + //console.log(this.currentText); //console.log(this.originalText); return { changed: this.currentText !== this.originalText, @@ -46,12 +46,21 @@ export default { } }, props: { - item: Object + item: Object, + editorShow: Boolean, + create: Boolean }, mounted: function() { - console.log("mounted"); - this.currentText = this.item.node.text.na_web; - this.originalText = this.item.node.text.na_web; + //console.log("mounted"); + if (this.create){ + this.currentText = ""; + this.originalText = ""; + this.editorShow = true; + } else { + this.currentText = this.item.node.text.na_web; + this.originalText = this.item.node.text.na_web; + + } //this.getText(); }, methods: { diff --git a/vue_frontend/src/components/TreeNode.vue b/vue_frontend/src/components/TreeNode.vue index 0490395c..ad89764b 100644 --- a/vue_frontend/src/components/TreeNode.vue +++ b/vue_frontend/src/components/TreeNode.vue @@ -9,20 +9,12 @@
    Vložit jako syna - +
    Vložit před - +
      @@ -32,11 +24,7 @@
      Vložit mezi Vložit za - +
    @@ -52,7 +40,7 @@ import castnode from './CastNode.vue' import textnode from './TextNode.vue' import ulohazadaninode from './UlohaZadaniNode.vue' import ulohavzoraknode from './UlohaVzorakNode.vue' - +import addnewnode from './AddNewNode.vue' export default { name: 'TreeNode', @@ -64,6 +52,7 @@ export default { textnode, ulohazadaninode, ulohavzoraknode, + addnewnode }, data: () => ({ debugShow: false, diff --git a/vue_frontend/src/components/UlohaVzorakNode.vue b/vue_frontend/src/components/UlohaVzorakNode.vue index dde89654..398b3924 100644 --- a/vue_frontend/src/components/UlohaVzorakNode.vue +++ b/vue_frontend/src/components/UlohaVzorakNode.vue @@ -1,7 +1,7 @@ @@ -9,7 +9,14 @@ export default { name: 'UlohaVzorakNode', props: { - item: Object + item: Object, + create: Boolean + }, + mounted: function(){ + if (this.item.node.uloha === null){ + console.log("Uloha je null!"); + console.log(this.item); + } } } diff --git a/vue_frontend/src/components/UlohaZadaniNode.vue b/vue_frontend/src/components/UlohaZadaniNode.vue index 6bf34a27..eb4806b1 100644 --- a/vue_frontend/src/components/UlohaZadaniNode.vue +++ b/vue_frontend/src/components/UlohaZadaniNode.vue @@ -1,7 +1,7 @@ @@ -9,7 +9,15 @@ export default { name: 'UlohaZadaniNode', props: { - item: Object + item: Object, + created: Boolean + , + mounted: function(){ + if (this.item.node.uloha === null){ + console.log("Uloha je null!"); + console.log(this.item); + } } } +} From b930afbda945a9d1cc347a5dca9df7c986403fbb Mon Sep 17 00:00:00 2001 From: Jonas Havelka Date: Sun, 6 Sep 2020 10:24:05 +0200 Subject: [PATCH 146/286] =?UTF-8?q?Return=20testovac=C3=AD=20=C3=BApravy?= =?UTF-8?q?=20v=20p=C5=99edn=C3=A1=C5=A1k=C3=A1ch?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- prednasky/views.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/prednasky/views.py b/prednasky/views.py index 87d696bc..2c370b7a 100644 --- a/prednasky/views.py +++ b/prednasky/views.py @@ -12,7 +12,7 @@ from seminar.models import Soustredeni, Osoba def newPrednaska(request): # hlasovani se vztahuje k nejnovejsimu soustredeni sous = Soustredeni.objects.first() - seznam = Seznam.objects.all().first() + seznam = Seznam.objects.filter(soustredeni = sous, stav = STAV_NAVRH).first() osoba = Osoba.objects.filter(user=request.user).first() ucastnik = osoba.plne_jmeno() + ' ' + str(osoba.id) # obsluha formulare From 41a027a9410ebf525f21a852b2d8e393f0b766f2 Mon Sep 17 00:00:00 2001 From: Jonas Havelka Date: Sun, 6 Sep 2020 11:56:20 +0200 Subject: [PATCH 147/286] =?UTF-8?q?Fix=20migrac=C3=AD=20vE=20(=3D=20aby=20?= =?UTF-8?q?fungovalo=20unapply=20alespo=C5=88=20na=20pr=C3=A1zdn=C3=A9=20d?= =?UTF-8?q?atab=C3=A1zy)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../0001_squashed_0067_auto_20190814_0805.py | 13 +++++++++++++ seminar/migrations/0019_rocnik_ciselne.py | 3 ++- seminar/migrations/0052_user_to_organizator.py | 8 ++++---- .../migrations/0056_vrcholy_pro_rocniky_a_cisla.py | 2 +- .../migrations/0057_reseni_to_reseni_hodnoceni.py | 2 +- .../migrations/0058_problem_to_uloha_tema_clanek.py | 8 ++++---- seminar/migrations/0059_vytvorit_pohadkanode.py | 2 +- seminar/migrations/0060_spoj_stromy.py | 2 +- seminar/migrations/0068_treenode_nazev.py | 2 +- .../0080_zruseni_claneknode_a_konferanode.py | 6 +++--- 10 files changed, 31 insertions(+), 17 deletions(-) diff --git a/seminar/migrations/0001_squashed_0067_auto_20190814_0805.py b/seminar/migrations/0001_squashed_0067_auto_20190814_0805.py index 5eb3e452..f9a8b5eb 100644 --- a/seminar/migrations/0001_squashed_0067_auto_20190814_0805.py +++ b/seminar/migrations/0001_squashed_0067_auto_20190814_0805.py @@ -877,6 +877,7 @@ class Migration(migrations.Migration): ), migrations.RunSQL( sql='update seminar_rocniky set rocnik_n = cast (rocnik as integer)', + reverse_sql='update seminar_rocniky set rocnik_n = cast (rocnik as nvarchar(16))', ), migrations.RemoveField( model_name='rocnik', @@ -1733,15 +1734,19 @@ class Migration(migrations.Migration): # migr 0052 migrations.RunPython( spoj_k_organizatorum_osoby, + reverse_code=migrations.RunPython.noop, ), migrations.RunPython( fix_problem, + reverse_code=migrations.RunPython.noop, ), migrations.RunPython( fix_pohadka, + reverse_code=migrations.RunPython.noop, ), migrations.RunPython( fix_novinka, + reverse_code=migrations.RunPython.noop, ), # migr 0053 @@ -1795,25 +1800,31 @@ class Migration(migrations.Migration): # migr 0056 migrations.RunPython( generuj_RocnikNody_a_CisloNody, + reverse_code=migrations.RunPython.noop, ), # migr 0057 migrations.RunPython( reseni_to_Reseni, + reverse_code=migrations.RunPython.noop, ), # migr 0058 migrations.RunPython( uloha_to_Uloha, + reverse_code=migrations.RunPython.noop, ), migrations.RunPython( tema_to_Tema, + reverse_code=migrations.RunPython.noop, ), migrations.RunPython( clanek_to_Clanek, + reverse_code=migrations.RunPython.noop, ), migrations.RunPython( konfery_rucne, + reverse_code=migrations.RunPython.noop, ), # migr "fix 0058" @@ -1825,11 +1836,13 @@ class Migration(migrations.Migration): # migr 0059 migrations.RunPython( vytvor_pohadkanode, + reverse_code=migrations.RunPython.noop, ), # migr 0060 migrations.RunPython( pokacej_les, + reverse_code=migrations.RunPython.noop, ), migrations.RemoveField( diff --git a/seminar/migrations/0019_rocnik_ciselne.py b/seminar/migrations/0019_rocnik_ciselne.py index 42308b2f..da9591aa 100644 --- a/seminar/migrations/0019_rocnik_ciselne.py +++ b/seminar/migrations/0019_rocnik_ciselne.py @@ -18,7 +18,8 @@ class Migration(migrations.Migration): preserve_default=False, ), migrations.RunSQL( - sql="update seminar_rocniky set rocnik_n = cast (rocnik as integer)" + sql="update seminar_rocniky set rocnik_n = cast (rocnik as integer)", + reverse_sql='update seminar_rocniky set rocnik_n = cast (rocnik as nvarchar(16))', ), migrations.RemoveField( model_name='rocnik', diff --git a/seminar/migrations/0052_user_to_organizator.py b/seminar/migrations/0052_user_to_organizator.py index d52e29ca..db3827ce 100644 --- a/seminar/migrations/0052_user_to_organizator.py +++ b/seminar/migrations/0052_user_to_organizator.py @@ -75,8 +75,8 @@ class Migration(migrations.Migration): ] operations = [ - migrations.RunPython(spoj_k_organizatorum_osoby), - migrations.RunPython(fix_problem), - migrations.RunPython(fix_pohadka), - migrations.RunPython(fix_novinka), + migrations.RunPython(spoj_k_organizatorum_osoby, migrations.RunPython.noop), + migrations.RunPython(fix_problem, migrations.RunPython.noop), + migrations.RunPython(fix_pohadka, migrations.RunPython.noop), + migrations.RunPython(fix_novinka, migrations.RunPython.noop), ] diff --git a/seminar/migrations/0056_vrcholy_pro_rocniky_a_cisla.py b/seminar/migrations/0056_vrcholy_pro_rocniky_a_cisla.py index 024400a4..56146261 100644 --- a/seminar/migrations/0056_vrcholy_pro_rocniky_a_cisla.py +++ b/seminar/migrations/0056_vrcholy_pro_rocniky_a_cisla.py @@ -43,5 +43,5 @@ class Migration(migrations.Migration): ] operations = [ - migrations.RunPython(generuj_RocnikNody_a_CisloNody), + migrations.RunPython(generuj_RocnikNody_a_CisloNody, migrations.RunPython.noop), ] diff --git a/seminar/migrations/0057_reseni_to_reseni_hodnoceni.py b/seminar/migrations/0057_reseni_to_reseni_hodnoceni.py index b3f0405b..a11d99ae 100644 --- a/seminar/migrations/0057_reseni_to_reseni_hodnoceni.py +++ b/seminar/migrations/0057_reseni_to_reseni_hodnoceni.py @@ -30,5 +30,5 @@ class Migration(migrations.Migration): ] operations = [ - migrations.RunPython(reseni_to_Reseni) + migrations.RunPython(reseni_to_Reseni, migrations.RunPython.noop) ] diff --git a/seminar/migrations/0058_problem_to_uloha_tema_clanek.py b/seminar/migrations/0058_problem_to_uloha_tema_clanek.py index 333f5453..7d651edb 100644 --- a/seminar/migrations/0058_problem_to_uloha_tema_clanek.py +++ b/seminar/migrations/0058_problem_to_uloha_tema_clanek.py @@ -154,8 +154,8 @@ class Migration(migrations.Migration): operations = [ # ashes to Ashes, dust to Dust.... - migrations.RunPython(uloha_to_Uloha), - migrations.RunPython(tema_to_Tema), - migrations.RunPython(clanek_to_Clanek), - migrations.RunPython(konfery_rucne), + migrations.RunPython(uloha_to_Uloha, migrations.RunPython.noop), + migrations.RunPython(tema_to_Tema, migrations.RunPython.noop), + migrations.RunPython(clanek_to_Clanek, migrations.RunPython.noop), + migrations.RunPython(konfery_rucne, migrations.RunPython.noop), ] diff --git a/seminar/migrations/0059_vytvorit_pohadkanode.py b/seminar/migrations/0059_vytvorit_pohadkanode.py index d0edd677..2a78c7ee 100644 --- a/seminar/migrations/0059_vytvorit_pohadkanode.py +++ b/seminar/migrations/0059_vytvorit_pohadkanode.py @@ -25,5 +25,5 @@ class Migration(migrations.Migration): ] operations = [ - migrations.RunPython(vytvor_pohadkanode), + migrations.RunPython(vytvor_pohadkanode, migrations.RunPython.noop), ] diff --git a/seminar/migrations/0060_spoj_stromy.py b/seminar/migrations/0060_spoj_stromy.py index a94caf48..c02b8d12 100644 --- a/seminar/migrations/0060_spoj_stromy.py +++ b/seminar/migrations/0060_spoj_stromy.py @@ -108,5 +108,5 @@ class Migration(migrations.Migration): ] operations = [ - migrations.RunPython(pokacej_les), + migrations.RunPython(pokacej_les, migrations.RunPython.noop), ] diff --git a/seminar/migrations/0068_treenode_nazev.py b/seminar/migrations/0068_treenode_nazev.py index bead85d3..c0024c8d 100644 --- a/seminar/migrations/0068_treenode_nazev.py +++ b/seminar/migrations/0068_treenode_nazev.py @@ -103,5 +103,5 @@ class Migration(migrations.Migration): name='nazev', field=models.TextField(help_text='Tento název se zobrazuje v nabídkách pro výběr vhodného TreeNode', null=True, verbose_name='název tohoto node'), ), - migrations.RunPython(fix_all_names), + migrations.RunPython(fix_all_names, migrations.RunPython.noop), ] diff --git a/seminar/migrations/0080_zruseni_claneknode_a_konferanode.py b/seminar/migrations/0080_zruseni_claneknode_a_konferanode.py index 13d083f9..34c22249 100644 --- a/seminar/migrations/0080_zruseni_claneknode_a_konferanode.py +++ b/seminar/migrations/0080_zruseni_claneknode_a_konferanode.py @@ -65,6 +65,9 @@ class Migration(migrations.Migration): model_name='reseni', name='text_zkraceny', ), + migrations.DeleteModel( # nejdříve musím smazat objekt ukazující na konferu, + name='KonferaNode', # pak až změnit klíč konferám (viz další operace) + ), migrations.AddField( model_name='konfera', name='problem_ptr', @@ -95,9 +98,6 @@ class Migration(migrations.Migration): migrations.DeleteModel( name='ClanekNode', ), - migrations.DeleteModel( - name='KonferaNode', - ), migrations.CreateModel( name='Konfery_Ucastnici', fields=[ From 9a1cf6928c71350bd862c5b2cff790ed77e991f5 Mon Sep 17 00:00:00 2001 From: Jonas Havelka Date: Mon, 7 Sep 2020 23:17:36 +0200 Subject: [PATCH 148/286] =?UTF-8?q?Add=20testdata:=20adminova=20osoba,=20o?= =?UTF-8?q?soby=20u=C5=BEivatel=C5=AF,=20korektury?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- korektury/models.py | 4 +- korektury/testpdfs/A.pdf | Bin 0 -> 440473 bytes korektury/testpdfs/B.pdf | 5125 ++++++++++++++++++++++++++++++++++++++ korektury/testutils.py | 69 + seminar/testutils.py | 53 +- 5 files changed, 5242 insertions(+), 9 deletions(-) create mode 100644 korektury/testpdfs/A.pdf create mode 100644 korektury/testpdfs/B.pdf create mode 100644 korektury/testutils.py diff --git a/korektury/models.py b/korektury/models.py index 88c1a5e6..37213172 100644 --- a/korektury/models.py +++ b/korektury/models.py @@ -103,7 +103,7 @@ class KorekturovanePDF(models.Model): # Změnil se počet stran, ukládáme super(KorekturovanePDF, self).save() - def save(self): + def save(self, **kwargs): # Pokud se nezmenilo PDF, tak nepregenerovavej nahledy try: original = KorekturovanePDF.objects.get(pk=self.pk) @@ -113,7 +113,7 @@ class KorekturovanePDF(models.Model): except ObjectDoesNotExist: pass # uložíme nahrávané pdf - super(KorekturovanePDF, self).save() + super(KorekturovanePDF, self).save(kwargs) # uložíme png a změněný počet stran self.convert() diff --git a/korektury/testpdfs/A.pdf b/korektury/testpdfs/A.pdf new file mode 100644 index 0000000000000000000000000000000000000000..083bac6a5d8c8a40470e5970232d10e3a70c626f GIT binary patch literal 440473 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

    8F5}q5ygz&?zz&g`UeuP#1r8w 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�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

    ~yUhBo-%DRdn?6?a5#@0?!vh?)R( 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�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�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

    From debac2908c0e1af0ac3a198684e6ca1f510fb0e5 Mon Sep 17 00:00:00 2001 From: Jonas Havelka Date: Tue, 8 Sep 2020 00:10:16 +0200 Subject: [PATCH 151/286] =?UTF-8?q?Fix=20menu=20soust=C5=99ed=C4=9Bn=C3=AD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sitetree_new.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sitetree_new.json b/sitetree_new.json index e66f9bc7..28ae633f 100644 --- a/sitetree_new.json +++ b/sitetree_new.json @@ -397,7 +397,7 @@ "fields": { "title": "\u00davod", "hint": "", - "url": "/soustredeni/uvod/", + "url": "/soustredeni/", "urlaspattern": false, "tree": 1, "hidden": false, From 0de90f0caff5d1bb6146c621e3fe346e61f5a6be Mon Sep 17 00:00:00 2001 From: Jonas Havelka Date: Tue, 8 Sep 2020 01:49:18 +0200 Subject: [PATCH 152/286] =?UTF-8?q?Haluz=20fix=20menu=20korektur=20(polo?= =?UTF-8?q?=C5=BEka=20menu=20s=20n=C3=A1zvem=20HIDDEN=20m=C3=A1=20display:?= =?UTF-8?q?none)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- mamweb/templates/menu.html | 4 +- sitetree_new.json | 98 ++++++++++++++++++++++++++++++++++++++ 2 files changed, 101 insertions(+), 1 deletion(-) diff --git a/mamweb/templates/menu.html b/mamweb/templates/menu.html index c7c0e8f5..e948785a 100644 --- a/mamweb/templates/menu.html +++ b/mamweb/templates/menu.html @@ -3,7 +3,9 @@ {% autoescape off %} - {% if user.is_staff %} + {% if user.je_org %}
    Vytvořit novou fotogalerii
    Vygenerovat obálky pro účastníky
    @@ -60,7 +60,7 @@ {% if soustredeni.text %} {% autoescape off %}{{soustredeni.text}}{% endautoescape %} {% endif %} - {% if user.is_staff %} + {% if user.je_org %}
    {# Účastníci #}

    Soustředění se zúčastnili tito účastníci:

    @@ -82,7 +82,7 @@
    {% endif %} - {% if not soustredeni.verejne_db and user.is_staff %} + {% if not soustredeni.verejne_db and user.je_org %}
    {# class="mam-org-only" #} {% endif %} {% endif %} diff --git a/seminar/utils.py b/seminar/utils.py index f4e38779..ad9be95e 100644 --- a/seminar/utils.py +++ b/seminar/utils.py @@ -1,8 +1,12 @@ # -*- coding: utf-8 -*- import datetime + +from django.contrib.auth import get_user_model from django.contrib.auth.decorators import permission_required from html.parser import HTMLParser + +from django.contrib.auth.models import AnonymousUser from django.contrib.contenttypes.models import ContentType from django.core.exceptions import ObjectDoesNotExist @@ -11,6 +15,11 @@ import seminar.treelib as t org_required = permission_required('auth.org', raise_exception=True) resitel_required = permission_required('auth.resitel', raise_exception=True) +User = get_user_model() +User.je_org = lambda self: self.has_perm('auth.org') +User.je_resitel = lambda self: self.has_perm('auth.resitel') +AnonymousUser.je_org = lambda self: False +AnonymousUser.je_resitel = lambda self: False class FirstTagParser(HTMLParser): diff --git a/seminar/views/views_all.py b/seminar/views/views_all.py index 9e77341d..a27f85d2 100644 --- a/seminar/views/views_all.py +++ b/seminar/views/views_all.py @@ -238,8 +238,7 @@ def spravne_novinky(request): user = request.user # Využíváme líné vyhodnocování QuerySetů qs = Novinky.objects.all() - # TODO: Tohle by mělo spíš kontrolovat, že je/není někdo org, než že může do Adminu. - if not user.is_staff: + if not user.je_org: qs = qs.filter(zverejneno=True) return qs.order_by('-datum') @@ -623,7 +622,7 @@ class ProblemView(generic.DetailView): def get_context_data(self, **kwargs): context = super().get_context_data(**kwargs) # Musí se používat context['object'], protože nevíme, jestli dostaneme úložku, téma, článek, .... a tyhle věci vyrábějí různé klíče. - if not context['object'].verejne() and not self.request.user.is_staff: + if not context['object'].verejne() and not self.request.user.je_org: raise PermissionDenied() if isinstance(context['object'], Clanek): context['reseni'] = Reseni.objects.filter(problem=context['object']).select_related('resitel').order_by('resitel__prijmeni') From 66b19d567352dd69f80524565ca3ebeff821804f Mon Sep 17 00:00:00 2001 From: Jonas Havelka Date: Tue, 8 Sep 2020 18:41:54 +0200 Subject: [PATCH 155/286] .gitignore update --- .gitignore | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/.gitignore b/.gitignore index 36b0b565..05e728bd 100644 --- a/.gitignore +++ b/.gitignore @@ -24,3 +24,9 @@ TODO # .htpasswd kvůli přihlášení .htpasswd + +# reversion kvůli historii objektů v reversion +**/reversion + +# pro lidi, co programují v nástrojích od JetBrains +.idea \ No newline at end of file From c9e8e737daaded05b9c969030d814d8457a1ee05 Mon Sep 17 00:00:00 2001 From: "Tomas \"Jethro\" Pokorny" Date: Sat, 12 Sep 2020 09:33:36 +0200 Subject: [PATCH 156/286] TreeNode editor | working adding and editing TextNodes. --- mamweb/routers.py | 2 + seminar/views/views_rest.py | 47 ++++++++++++++++++- seminar/viewsets.py | 53 ++++++++++++++++++++++ vue_frontend/src/components/AddNewNode.vue | 5 +- vue_frontend/src/components/TextNode.vue | 34 +++++++++++++- vue_frontend/src/components/TreeNode.vue | 6 +-- 6 files changed, 139 insertions(+), 8 deletions(-) diff --git a/mamweb/routers.py b/mamweb/routers.py index cd9907a4..ee310427 100644 --- a/mamweb/routers.py +++ b/mamweb/routers.py @@ -4,4 +4,6 @@ from seminar import viewsets as vs router = routers.DefaultRouter() router.register(r'ulohavzoraknode', vs.UlohaVzorakNodeViewSet) +router.register(r'text', vs.TextViewSet) +router.register(r'textnode', vs.TextNodeViewSet) diff --git a/seminar/views/views_rest.py b/seminar/views/views_rest.py index 0224383b..8cee4fd1 100644 --- a/seminar/views/views_rest.py +++ b/seminar/views/views_rest.py @@ -2,9 +2,17 @@ from rest_framework import serializers from rest_polymorphic.serializers import PolymorphicSerializer import seminar.models as m +from seminar import treelib DEFAULT_NODE_DEPTH = 2 +class TextSerializer(serializers.ModelSerializer): + class Meta: + model = m.Text + fields = '__all__' + + + class UlohaVzorakNodeSerializer(serializers.ModelSerializer): class Meta: model = m.UlohaVzorakNode @@ -54,9 +62,44 @@ class PohadkaNodeSerializer(serializers.ModelSerializer): depth = DEFAULT_NODE_DEPTH class TextNodeSerializer(serializers.ModelSerializer): + text = TextSerializer() + class Meta: model = m.TextNode - fields = '__all__' + fields = ('id','text','polymorphic_ctype') + depth = DEFAULT_NODE_DEPTH + +class TextNodeWriteSerializer(serializers.ModelSerializer): + text = TextSerializer() + + def update(self,node,validated_data): + node.text.na_web = validated_data.get('text').get('na_web') + return node + + class Meta: + model = m.TextNode + fields = ('id','text') + depth = DEFAULT_NODE_DEPTH + +class TextNodeCreateSerializer(serializers.ModelSerializer): + text = TextSerializer() + refnode = serializers.CharField() + where = serializers.CharField() + + def create(self,validated_data): + temp_text = validated_data.pop('text') + where = validated_data.pop('where') + refnode_id = validated_data.pop('refnode') + refnode = m.TreeNode.objects.get(pk=refnode_id) + text = m.Text.objects.create(**temp_text) + node = treelib.create_child(refnode,m.TextNode,text=text) + node.where = None + node.refnode = None + return node + + class Meta: + model = m.TextNode + fields = ('text','where','refnode') depth = DEFAULT_NODE_DEPTH class CastNodeSerializer(serializers.ModelSerializer): @@ -85,5 +128,5 @@ class TreeNodeSerializer(PolymorphicSerializer): m.TextNode: TextNodeSerializer, m.CastNode: CastNodeSerializer, m.ReseniNode: ReseniNodeSerializer, - } + diff --git a/seminar/viewsets.py b/seminar/viewsets.py index aab12b7d..a0c0750d 100644 --- a/seminar/viewsets.py +++ b/seminar/viewsets.py @@ -2,6 +2,59 @@ from rest_framework import viewsets,filters from . import models as m from . import views +class ReadWriteSerializerMixin(object): + """ + Overrides get_serializer_class to choose the read serializer + for GET requests and the write serializer for POST requests. + + Set read_serializer_class and write_serializer_class attributes on a + viewset. + """ + + read_serializer_class = None + create_serializer_class = None + write_serializer_class = None + + def get_serializer_class(self): + if self.action == "create": + return self.get_create_serializer_class() + if self.action in ["update", "partial_update", "destroy"]: + return self.get_write_serializer_class() + return self.get_read_serializer_class() + + def get_read_serializer_class(self): + assert self.read_serializer_class is not None, ( + "'%s' should either include a `read_serializer_class` attribute," + "or override the `get_read_serializer_class()` method." + % self.__class__.__name__ + ) + return self.read_serializer_class + + def get_write_serializer_class(self): + assert self.write_serializer_class is not None, ( + "'%s' should either include a `write_serializer_class` attribute," + "or override the `get_write_serializer_class()` method." + % self.__class__.__name__ + ) + return self.write_serializer_class + + def get_create_serializer_class(self): + assert self.create_serializer_class is not None, ( + "'%s' should either include a `create_serializer_class` attribute," + "or override the `get_create_serializer_class()` method." + % self.__class__.__name__ + ) + return self.create_serializer_class + class UlohaVzorakNodeViewSet(viewsets.ModelViewSet): queryset = m.UlohaVzorakNode.objects.all() serializer_class = views.UlohaVzorakNodeSerializer + +class TextViewSet(viewsets.ModelViewSet): + queryset = m.Text.objects.all() + serializer_class = views.TextSerializer + +class TextNodeViewSet(ReadWriteSerializerMixin,viewsets.ModelViewSet): + queryset = m.TextNode.objects.all() + read_serializer_class = views.TextNodeSerializer + write_serializer_class = views.TextNodeWriteSerializer diff --git a/vue_frontend/src/components/AddNewNode.vue b/vue_frontend/src/components/AddNewNode.vue index e948f1cd..ffbd33ef 100644 --- a/vue_frontend/src/components/AddNewNode.vue +++ b/vue_frontend/src/components/AddNewNode.vue @@ -6,7 +6,7 @@
    - +
    @@ -22,7 +22,8 @@ export default { name: 'AddNewNode', props: { types: Array, - where: String + where: String, + refnode: Object, }, data: () => ({ selected: null, diff --git a/vue_frontend/src/components/TextNode.vue b/vue_frontend/src/components/TextNode.vue index 2e6d689b..ce45f293 100644 --- a/vue_frontend/src/components/TextNode.vue +++ b/vue_frontend/src/components/TextNode.vue @@ -48,7 +48,9 @@ export default { props: { item: Object, editorShow: Boolean, - create: Boolean + create: Boolean, + where: String, + refnode: Object }, mounted: function() { //console.log("mounted"); @@ -82,8 +84,38 @@ export default { updateText: function() { console.log("Saving text"); console.log(this.currentText); + if (this.create){ + console.log(this.refnode); + console.log(this.where); + axios.post('/api/textnode/',{ + 'text': { 'na_web': this.currentText}, + 'refnode': this.refnode.id, + 'where': this.where + }).then(response => {this.originalText = response.data.text.na_web}) + .catch(e => { + this.errors.push(e) + }); + } else { + axios.put('/api/textnode/'+this.item.node.id+'/',{ + 'text': { 'na_web': this.currentText}, + 'id': this.item.node.id + }).then(response => {this.originalText = response.data.text.na_web}) + .catch(e => { + this.errors.push(e) + }); + + } + // FIXME really save! this.editorShow = false; + }, + save: function() { + console.log(this.item); + if (this.create){ + console.log(this.refnode); + console.log(this.where); + } + } } } diff --git a/vue_frontend/src/components/TreeNode.vue b/vue_frontend/src/components/TreeNode.vue index ad89764b..8da318d6 100644 --- a/vue_frontend/src/components/TreeNode.vue +++ b/vue_frontend/src/components/TreeNode.vue @@ -9,12 +9,12 @@
    Vložit jako syna - +
    Vložit před - +
      @@ -24,7 +24,7 @@
      Vložit mezi Vložit za - +
    From b9192bbdb4fe3ae3079d131a7fce28db09b6b9f7 Mon Sep 17 00:00:00 2001 From: Jonas Havelka Date: Sat, 12 Sep 2020 11:34:14 +0200 Subject: [PATCH 157/286] =?UTF-8?q?Zv=C3=ADraz=C5=88ov=C3=A1n=C3=AD=20menu?= =?UTF-8?q?=20(pozad=C3=AD)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- mamweb/static/css/mamweb.css | 4 +++ .../images/{logo_co-je-mam.svg => logo_1.svg} | 0 .../images/{logo_jak-resit.svg => logo_2.svg} | 0 .../images/{logo_aktualni.svg => logo_3.svg} | 0 .../{logo_soustredeni.svg => logo_4.svg} | 0 .../images/{logo_archiv.svg => logo_5.svg} | 0 .../images/{logo_profil.svg => logo_6.svg} | 0 mamweb/templates/base.html | 2 +- mamweb/templates/logo.html | 26 +++++++++++++++++++ 9 files changed, 31 insertions(+), 1 deletion(-) rename mamweb/static/images/{logo_co-je-mam.svg => logo_1.svg} (100%) rename mamweb/static/images/{logo_jak-resit.svg => logo_2.svg} (100%) rename mamweb/static/images/{logo_aktualni.svg => logo_3.svg} (100%) rename mamweb/static/images/{logo_soustredeni.svg => logo_4.svg} (100%) rename mamweb/static/images/{logo_archiv.svg => logo_5.svg} (100%) rename mamweb/static/images/{logo_profil.svg => logo_6.svg} (100%) create mode 100644 mamweb/templates/logo.html diff --git a/mamweb/static/css/mamweb.css b/mamweb/static/css/mamweb.css index 7dda151a..68aa51d5 100644 --- a/mamweb/static/css/mamweb.css +++ b/mamweb/static/css/mamweb.css @@ -318,6 +318,10 @@ ul.submenu li>a:hover { color: black; } +ul.menu li.active>a, ul.submenu li.active>a { + color: black; +} + /* konec nového menu */ div.novinky_name { diff --git a/mamweb/static/images/logo_co-je-mam.svg b/mamweb/static/images/logo_1.svg similarity index 100% rename from mamweb/static/images/logo_co-je-mam.svg rename to mamweb/static/images/logo_1.svg diff --git a/mamweb/static/images/logo_jak-resit.svg b/mamweb/static/images/logo_2.svg similarity index 100% rename from mamweb/static/images/logo_jak-resit.svg rename to mamweb/static/images/logo_2.svg diff --git a/mamweb/static/images/logo_aktualni.svg b/mamweb/static/images/logo_3.svg similarity index 100% rename from mamweb/static/images/logo_aktualni.svg rename to mamweb/static/images/logo_3.svg diff --git a/mamweb/static/images/logo_soustredeni.svg b/mamweb/static/images/logo_4.svg similarity index 100% rename from mamweb/static/images/logo_soustredeni.svg rename to mamweb/static/images/logo_4.svg diff --git a/mamweb/static/images/logo_archiv.svg b/mamweb/static/images/logo_5.svg similarity index 100% rename from mamweb/static/images/logo_archiv.svg rename to mamweb/static/images/logo_5.svg diff --git a/mamweb/static/images/logo_profil.svg b/mamweb/static/images/logo_6.svg similarity index 100% rename from mamweb/static/images/logo_profil.svg rename to mamweb/static/images/logo_6.svg diff --git a/mamweb/templates/base.html b/mamweb/templates/base.html index 4af21b46..7f0556f3 100644 --- a/mamweb/templates/base.html +++ b/mamweb/templates/base.html @@ -57,7 +57,7 @@
    M&M - korespondenční seminář a časopis MFF UK
    diff --git a/mamweb/templates/logo.html b/mamweb/templates/logo.html new file mode 100644 index 00000000..c5113d0c --- /dev/null +++ b/mamweb/templates/logo.html @@ -0,0 +1,26 @@ +{% load staticfiles %} + \ No newline at end of file From fb6e46003951aaa4bf18c9f48abd32c31af2e75b Mon Sep 17 00:00:00 2001 From: Jonas Havelka Date: Sat, 12 Sep 2020 11:50:17 +0200 Subject: [PATCH 158/286] Fix haluz fixu menu korektur pro mobily --- mamweb/templates/menu_mobile.html | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/mamweb/templates/menu_mobile.html b/mamweb/templates/menu_mobile.html index 362e61f1..aed04cd5 100644 --- a/mamweb/templates/menu_mobile.html +++ b/mamweb/templates/menu_mobile.html @@ -3,7 +3,9 @@ {% autoescape off %}
    - {% if user.is_staff and galerie.zobrazit > 0 %} + {% if user.je_org and galerie.zobrazit > 0 %}
    ({{galerie.poradi}}) + @@ -73,7 +73,7 @@ Galerie {{galerie.nazev}} {% endwith %} {% endif %} {% endif %} - {% if user.is_staff and galerie.zobrazit > 0 %} + {% if user.je_org and galerie.zobrazit > 0 %} diff --git a/galerie/urls.py b/galerie/urls.py index 4af34ca1..d299165f 100644 --- a/galerie/urls.py +++ b/galerie/urls.py @@ -8,7 +8,7 @@ urlpatterns = [ path('/', views.nahled), path('//', views.detail), path('/new/', org_required(views.new_galerie)), - path('/plus//', views.plus_galerie), - path('/minus//', views.minus_galerie), + path('/plus//', org_required(views.plus_galerie)), + path('/minus//', org_required(views.minus_galerie)), ] diff --git a/seminar/templates/seminar/archiv/cislo.html b/seminar/templates/seminar/archiv/cislo.html index 80905e00..46c62094 100644 --- a/seminar/templates/seminar/archiv/cislo.html +++ b/seminar/templates/seminar/archiv/cislo.html @@ -18,9 +18,9 @@

    Zadané problémy

    {% endif %} @@ -29,14 +29,14 @@

    Řešené problémy

    {% endif %} - {% if user.is_staff %} + {% if user.je_org %}

    Orgovské odkazy

      @@ -52,13 +52,13 @@

      Výsledkovka

      {% else %} - {% if user.is_staff %} + {% if user.je_org %}

      Výsledkovka (neveřejná)

      {% endif %} {% endif %} - {% if cislo.verejna_vysledkovka or user.is_staff %} + {% if cislo.verejna_vysledkovka or user.je_org %}
      # @@ -66,7 +66,7 @@ {% for p in problemy %} {{ p.kod_v_rocniku }} {% endfor %} - Za číslo + Za číslo Za ročník Odjakživa {% for rv in radky_vysledkovky %} @@ -88,7 +88,7 @@
      {% endif %} - {% if not cislo.verejna_vysledkovka and user.is_staff %} + {% if not cislo.verejna_vysledkovka and user.je_org %}
      {% endif %} diff --git a/seminar/templates/seminar/archiv/problem.html b/seminar/templates/seminar/archiv/problem.html index 91c67c77..ac17353a 100644 --- a/seminar/templates/seminar/archiv/problem.html +++ b/seminar/templates/seminar/archiv/problem.html @@ -3,11 +3,11 @@ {% load comments %} {% block content %} -
      +
      {% block problem %} {% endblock %} - {% if user.is_staff %} + {% if user.je_org %}

      Text - org

      diff --git a/seminar/templates/seminar/archiv/rocnik.html b/seminar/templates/seminar/archiv/rocnik.html index 0f48b30c..da4789e2 100644 --- a/seminar/templates/seminar/archiv/rocnik.html +++ b/seminar/templates/seminar/archiv/rocnik.html @@ -62,7 +62,7 @@
      {% if vysledkovka %} - {% if user.is_staff %} + {% if user.je_org %} @@ -72,7 +72,7 @@ {% include "seminar/vysledkovka_rocnik.html" %} {% endif %} - {% if user.is_staff and vysledkovka_s_neverejnymi %} + {% if user.je_org and vysledkovka_s_neverejnymi %}

      Výsledková listina včetně neveřejných bodů

      {% with radky_vyledkovky_s_neverejnymi as radky_vysledkovky %} diff --git a/seminar/templates/seminar/novinky.html b/seminar/templates/seminar/novinky.html index ccf40831..dfcddda5 100644 --- a/seminar/templates/seminar/novinky.html +++ b/seminar/templates/seminar/novinky.html @@ -1,13 +1,13 @@ {% for novinka in object_list %} {# pripravene div-y na stylovani#}
      - {% if not novinka.zverejneno and user.is_staff %} + {% if not novinka.zverejneno and user.je_org %}
      {% endif %} - {% if novinka.zverejneno or user.is_staff %} + {% if novinka.zverejneno or user.je_org %} {# datum #}
      {{novinka.datum}}
      {# text #} @@ -33,7 +33,7 @@

      {% endif %} - {% if not novinka.zverejneno and user.is_staff %} + {% if not novinka.zverejneno and user.je_org %}
      {% endif %}
      diff --git a/seminar/templates/seminar/zadani/AktualniVysledkovka.html b/seminar/templates/seminar/zadani/AktualniVysledkovka.html index 00ace94c..0f2ad4f4 100644 --- a/seminar/templates/seminar/zadani/AktualniVysledkovka.html +++ b/seminar/templates/seminar/zadani/AktualniVysledkovka.html @@ -27,7 +27,7 @@ v archivu.

      - {% if user.is_staff and vysledkovka_s_neverejnymi %} + {% if user.je_org and vysledkovka_s_neverejnymi %}

      Výsledky včetně neveřejných

      {% with vysledkovka_s_neverejnymi as vysledkovka %} diff --git a/seminar/templates/seminar/zadani/AktualniZadani.html b/seminar/templates/seminar/zadani/AktualniZadani.html index 93fac9a4..31e2ca89 100644 --- a/seminar/templates/seminar/zadani/AktualniZadani.html +++ b/seminar/templates/seminar/zadani/AktualniZadani.html @@ -16,8 +16,8 @@ {% with nastaveni.aktualni_cislo as ac %} {# Zobrazovani neverejnych zadani jen organizatorum #} -{% if user.is_staff or verejne %} -{% if user.is_staff and not verejne %}
      {% endif %} +{% if user.je_org or verejne %} +{% if user.je_org and not verejne %}
      {% endif %} {% if ac.zadane_problemy.all %} {% if ac.datum_deadline_soustredeni %} @@ -60,7 +60,7 @@ {% endfor %} {% endif %} -{% if user.is_staff and not verejne%}
      {% endif %} +{% if user.je_org and not verejne%}
      {% endif %} {% else %}

      Aktuálně nejsou zveřejněny žádné úlohy

      {% endif %} From 7e42d9d64c12f6aab6b9796a84e3560f4b15fd26 Mon Sep 17 00:00:00 2001 From: Jonas Havelka Date: Sat, 12 Sep 2020 17:43:58 +0200 Subject: [PATCH 160/286] =?UTF-8?q?Oprava=20p=C5=99eklep=C5=AF=20(hlavn?= =?UTF-8?q?=C4=9B=20chyb=C4=9Bj=C3=ADc=C3=ADch=20)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- korektury/templates/korektury/opraf.html | 4 ++-- prednasky/templates/prednasky/metaseznam_prednasek.html | 2 ++ prednasky/templates/prednasky/seznam_prednasek.html | 2 ++ seminar/templates/seminar/profil/gdpr.html | 3 ++- seminar/templates/seminar/profil/nahraj_reseni.html | 6 +++--- seminar/templates/seminar/profil/prihlaska_field.html | 2 +- seminar/templates/seminar/soustredeni/seznam_ucastniku.html | 1 - 7 files changed, 12 insertions(+), 8 deletions(-) diff --git a/korektury/templates/korektury/opraf.html b/korektury/templates/korektury/opraf.html index ba8898a6..00c81c2d 100644 --- a/korektury/templates/korektury/opraf.html +++ b/korektury/templates/korektury/opraf.html @@ -36,12 +36,12 @@ id="neni_chyba_checkbox" name="neni_chyba_checkbox" onchange="toggle_corrections('neni_chyba')" checked> -
    +
    {% endblock %} diff --git a/prednasky/templates/prednasky/seznam_prednasek.html b/prednasky/templates/prednasky/seznam_prednasek.html index a019c000..91261242 100644 --- a/prednasky/templates/prednasky/seznam_prednasek.html +++ b/prednasky/templates/prednasky/seznam_prednasek.html @@ -15,5 +15,7 @@ {{ prednaska.body }} b
    ) – {{ prednaska.org }} {% endfor %} + +
    {% endblock %} diff --git a/seminar/templates/seminar/profil/gdpr.html b/seminar/templates/seminar/profil/gdpr.html index 74e253f5..3e85de78 100644 --- a/seminar/templates/seminar/profil/gdpr.html +++ b/seminar/templates/seminar/profil/gdpr.html @@ -36,13 +36,14 @@ Tento souhlas uděluji ze své vlastní a svobodné vůle a beru na vědomí, ž

    Dále máte právo: +

    • požádat o informaci, jaké osobní údaje jsou o vás zpracovávány,
    • požadovat opravu osobních údajů, pokud jsou neplatné nebo zastaralé,
    • požadovat, aby nebyly vaše osobní údaje zpracovávány do doby, než bude vyřešena oprávněnost výše uvedených požadavků,
    • požadovat, aby byly vaše osobní údaje předány jinému správci,
    • podat stížnost u dozorového úřadu. -

      +

    V případě jakéhokoliv dotazu nebo uplatnění svých práv můžete kontaktovat pověřence pro ochranu osobních údajů na e-mailové adrese gdpr@cuni.cz.

    diff --git a/seminar/templates/seminar/profil/nahraj_reseni.html b/seminar/templates/seminar/profil/nahraj_reseni.html index 861d7bdd..dddc5e19 100644 --- a/seminar/templates/seminar/profil/nahraj_reseni.html +++ b/seminar/templates/seminar/profil/nahraj_reseni.html @@ -53,7 +53,7 @@ {{ field }} - {{ field.help_text|safe }} + {{ field.help_text|safe }}> {{ field.errors }} @@ -74,7 +74,7 @@
    -

    {{ currentText }}

    +

    {{ currentText }}

    diff --git a/vue_frontend/src/components/CisloNode.vue b/vue_frontend/src/components/CisloNode.vue index 519b100c..f83e30c6 100644 --- a/vue_frontend/src/components/CisloNode.vue +++ b/vue_frontend/src/components/CisloNode.vue @@ -1,8 +1,10 @@ + + \ No newline at end of file diff --git a/vue_frontend/src/components/UlohaZadaniNode.vue b/vue_frontend/src/components/UlohaZadaniNode.vue index 7c5f6346..454ff61b 100644 --- a/vue_frontend/src/components/UlohaZadaniNode.vue +++ b/vue_frontend/src/components/UlohaZadaniNode.vue @@ -1,7 +1,7 @@ From 7d21da0a8f23eaf8010f6aa996136ce2d0dad66a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kate=C5=99ina=20=C4=8C?= Date: Fri, 18 Sep 2020 09:57:13 +0200 Subject: [PATCH 163/286] =?UTF-8?q?vzhled=20drobn=C3=A9=20=C3=BApravy=20-?= =?UTF-8?q?=20smaz=C3=A1no=20zbyte=C4=8Dn=C3=A9=20summary?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- vue_frontend/src/App.vue | 8 +------- vue_frontend/src/components/CisloNode.vue | 2 -- 2 files changed, 1 insertion(+), 9 deletions(-) diff --git a/vue_frontend/src/App.vue b/vue_frontend/src/App.vue index d532ef0c..495994d3 100644 --- a/vue_frontend/src/App.vue +++ b/vue_frontend/src/App.vue @@ -54,11 +54,5 @@ export default { diff --git a/vue_frontend/src/components/CisloNode.vue b/vue_frontend/src/components/CisloNode.vue index f83e30c6..f9c34723 100644 --- a/vue_frontend/src/components/CisloNode.vue +++ b/vue_frontend/src/components/CisloNode.vue @@ -1,10 +1,8 @@ - - diff --git a/vue_frontend/src/components/TreeNodeRoot.vue b/vue_frontend/src/components/TreeNodeRoot.vue new file mode 100644 index 00000000..fd70a028 --- /dev/null +++ b/vue_frontend/src/components/TreeNodeRoot.vue @@ -0,0 +1,62 @@ + + + + + diff --git a/vue_frontend/src/main.js b/vue_frontend/src/main.js index abfcc1e8..0c3b439d 100644 --- a/vue_frontend/src/main.js +++ b/vue_frontend/src/main.js @@ -1,10 +1,12 @@ import Vue from 'vue' import App from './App.vue' +import router from './router' import CKEditor from '@ckeditor/ckeditor5-vue' Vue.config.productionTip = false Vue.use(CKEditor); new Vue({ - render: h => h(App), + router, + render: h => h(App), }).$mount('#app') diff --git a/vue_frontend/src/router/index.js b/vue_frontend/src/router/index.js new file mode 100644 index 00000000..711bbc81 --- /dev/null +++ b/vue_frontend/src/router/index.js @@ -0,0 +1,23 @@ +import Vue from 'vue' +import Router from 'vue-router' +import TreeNodeRoot from '../components/TreeNodeRoot.vue' + +Vue.use(Router) + +export default new Router({ + mode: 'history', + linkActiveClass: 'active', + routes: [{ + path: '/temp/vue', + name: 'treenodedefault', + props: {'tnid': 1}, + component: TreeNodeRoot + }, { + path: '/temp/vue/:tnid', + name: 'treenode', + props: true, + component: TreeNodeRoot + }, + ] +}) + diff --git a/vue_frontend/yarn.lock b/vue_frontend/yarn.lock index 63a49784..0d2d55bb 100644 --- a/vue_frontend/yarn.lock +++ b/vue_frontend/yarn.lock @@ -8122,6 +8122,11 @@ vue-loader@^15.9.2: vue-hot-reload-api "^2.3.0" vue-style-loader "^4.1.0" +vue-router@^3.4.3: + version "3.4.3" + resolved "https://registry.yarnpkg.com/vue-router/-/vue-router-3.4.3.tgz#fa93768616ee338aa174f160ac965167fa572ffa" + integrity sha512-BADg1mjGWX18Dpmy6bOGzGNnk7B/ZA0RxuA6qedY/YJwirMfKXIDzcccmHbQI0A6k5PzMdMloc0ElHfyOoX35A== + vue-style-loader@^4.1.0, vue-style-loader@^4.1.2: version "4.1.2" resolved "https://registry.yarnpkg.com/vue-style-loader/-/vue-style-loader-4.1.2.tgz#dedf349806f25ceb4e64f3ad7c0a44fba735fcf8" From 84265161064676d1dbd95698e40a06ca7c51d5b6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kate=C5=99ina=20=C4=8C?= Date: Fri, 18 Sep 2020 20:48:49 +0200 Subject: [PATCH 169/286] =?UTF-8?q?sjednocen=C3=AD=20velikosti=20nadpis?= =?UTF-8?q?=C5=AF=20zad=C3=A1n=C3=AD=20a=20=C5=99e=C5=A1en=C3=AD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- vue_frontend/src/components/UlohaZadaniNode.vue | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/vue_frontend/src/components/UlohaZadaniNode.vue b/vue_frontend/src/components/UlohaZadaniNode.vue index 454ff61b..7c5f6346 100644 --- a/vue_frontend/src/components/UlohaZadaniNode.vue +++ b/vue_frontend/src/components/UlohaZadaniNode.vue @@ -1,7 +1,7 @@ From f5c1d2f1aa354132208443b9a4d3f07dc1c46914 Mon Sep 17 00:00:00 2001 From: Jonas Havelka Date: Fri, 18 Sep 2020 22:12:57 +0200 Subject: [PATCH 170/286] =?UTF-8?q?Dopln=C4=9Bn=20chybjej=C3=ADc=C3=AD=20?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- seminar/templates/seminar/novinky.html | 1 + 1 file changed, 1 insertion(+) diff --git a/seminar/templates/seminar/novinky.html b/seminar/templates/seminar/novinky.html index 8ac80a82..c1e5b663 100644 --- a/seminar/templates/seminar/novinky.html +++ b/seminar/templates/seminar/novinky.html @@ -36,5 +36,6 @@ {% if not novinka.zverejneno and user.je_org %}
    {% endif %} + {% endfor%} From 6f1f558db111cc2aad3413c333db50ad069c3445 Mon Sep 17 00:00:00 2001 From: Jonas Havelka Date: Fri, 18 Sep 2020 22:26:17 +0200 Subject: [PATCH 171/286] =?UTF-8?q?Spr=C3=A1vn=C3=A9=20
    y=20v=20base.h?= =?UTF-8?q?tml?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- mamweb/templates/base.html | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/mamweb/templates/base.html b/mamweb/templates/base.html index 7f0556f3..dff05f55 100644 --- a/mamweb/templates/base.html +++ b/mamweb/templates/base.html @@ -63,6 +63,7 @@
    +
    @@ -72,6 +73,9 @@ {# ========= MENU MOBILE ========== #} +
    +
    +