From c12a2c8fe3ee117dffa9ab932dcb6ce1d1f5daed Mon Sep 17 00:00:00 2001 From: Sander Roosendaal Date: Sat, 5 Oct 2019 14:35:06 +0200 Subject: [PATCH 01/10] first version actual/executed chart for plan --- rowers/interactiveplots.py | 33 ++++- rowers/models.py | 2 +- rowers/plannedsessions.py | 169 ++++++++++++++++++++++- rowers/templates/trainingplan_chart.html | 35 +++++ rowers/urls.py | 4 + rowers/views/planviews.py | 153 ++++++++------------ 6 files changed, 299 insertions(+), 97 deletions(-) create mode 100644 rowers/templates/trainingplan_chart.html diff --git a/rowers/interactiveplots.py b/rowers/interactiveplots.py index 5b30d4c4..3aaa69b6 100644 --- a/rowers/interactiveplots.py +++ b/rowers/interactiveplots.py @@ -232,6 +232,37 @@ def interactive_boxchart(datadf,fieldname,extratitle='', return script,div + +def interactive_planchart(data,startdate,enddate): + source = ColumnDataSource(data) + + hv.extension('bokeh') + + + yaxmaximum = data['executed'].max() + if data['planned'].max() > yaxmaximum: + yaxmaximum = data['planned'].max() + + yrange1 = Range1d(start=0,end=1.1*yaxmaximum) + + + tidy_df = data.melt(id_vars=['startdate'],value_vars=['planned','executed']) + bars = hv.Bars(tidy_df,['startdate','variable'],['value']) + bars.opts( + opts.Bars(show_legend=True,tools=['tap','hover'],legend_position='bottom',show_frame=True)) + + p = hv.render(bars) + + p.plot_width=550 + p.plot_height=350 + p.y_range = yrange1 + p.toolbar_location = 'above' + p.sizing_mode = 'scale_width' + + script,div = components(p) + + return script,div + def interactive_activitychart(workouts,startdate,enddate,stack='type'): dates = [] @@ -352,7 +383,7 @@ def interactive_activitychart(workouts,startdate,enddate,stack='type'): p.plot_width=550 p.plot_height=350 - p.toolbar_location = None + p.toolbar_location = 'above' p.sizing_mode = 'scale_width' url = "http://rowsandall.com/rowers/workout/@duration/" taptool = p.select(type=TapTool) diff --git a/rowers/models.py b/rowers/models.py index e3e23ada..0c69aecc 100644 --- a/rowers/models.py +++ b/rowers/models.py @@ -1981,7 +1981,7 @@ class TrainingMicroCycle(models.Model): if self.startdate < self.plan.startdate: self.startdate = self.plan.startdate - othercycles = TrainingMicroCycle.objects.filter( + othercycles = TrainingMicroCycle.objects.filter( plan=self.plan).exclude(pk=self.pk).order_by("-startdate") for othercycle in othercycles: diff --git a/rowers/plannedsessions.py b/rowers/plannedsessions.py index f3c33b4e..697a63a0 100644 --- a/rowers/plannedsessions.py +++ b/rowers/plannedsessions.py @@ -22,11 +22,14 @@ queue = django_rq.get_queue('default') queuelow = django_rq.get_queue('low') queuehigh = django_rq.get_queue('low') +import pandas as pd + from rowers.models import ( Rower, Workout,Team, GeoCourse, TrainingMicroCycle,TrainingMesoCycle,TrainingMacroCycle, TrainingPlan,PlannedSession,VirtualRaceResult,CourseTestResult, - get_course_timezone, IndoorVirtualRaceResult,VirtualRace + get_course_timezone, IndoorVirtualRaceResult,VirtualRace,createmacrofillers, + createmesofillers,createmicrofillers, ) from rowers.courses import get_time_course @@ -47,6 +50,170 @@ from rowers.tasks import ( ) from rowers.utils import totaltime_sec_to_string +def checkscores(r,macrocycles): + for m in macrocycles: + createmesofillers(m) + m.plantime = 0 + m.actualtime = 0 + m.plandistance = 0 + m.actualdistance = 0 + m.planrscore = 0 + m.actualrscore = 0 + m.plantrimp = 0 + m.actualtrimp = 0 + + + mesocycles = TrainingMesoCycle.objects.filter( + plan=m, + type='userdefined').order_by("startdate") + + for me in mesocycles: + me.plantime = 0 + me.actualtime = 0 + me.plandistance = 0 + me.actualdistance = 0 + me.planrscore = 0 + me.actualrscore = 0 + me.plantrimp = 0 + me.actualtrimp = 0 + + microcycles = TrainingMicroCycle.objects.filter( + plan=me, + type='userdefined').order_by("startdate") + + for mm in microcycles: + sps = get_sessions(r,startdate=mm.startdate,enddate=mm.enddate) + + # sps = PlannedSession.objects.filter( + # rower = r, + # startdate__lte=mm.enddate, + # enddate__gte=mm.startdate) + + + mm.plantime = 0 + mm.actualtime = 0 + mm.plandistance = 0 + mm.actualdistance = 0 + mm.planrscore = 0 + mm.actualrscore = 0 + mm.plantrimp = 0 + mm.actualtrimp = 0 + + + if mm.type == 'userdefined': + for ps in sps: + ratio, status, cdate = is_session_complete(r,ps) + if ps.sessionmode == 'time': + mm.plantime += ps.sessionvalue + mm.actualtime += int(ps.sessionvalue*ratio) + elif ps.sessionmode == 'distance' and ps.sessiontype != 'race': + mm.plandistance += ps.sessionvalue + mm.actualdistance += int(ps.sessionvalue*ratio) + elif ps.sessionmode == 'rScore': + mm.planrscore += ps.sessionvalue + mm.actualrscore += int(ps.sessionvalue*ratio) + elif ps.sessionmode == 'TRIMP': + mm.plantrimp += ps.sessionvalue + mm.actualtrimp += int(ps.sessionvalue*ratio) + + mm.save() + + me.plantime += mm.plantime + me.actualtime += mm.actualtime + me.plandistance += mm.plandistance + me.actualdistance += mm.actualdistance + me.planrscore += mm.planrscore + me.actualrscore += mm.actualrscore + me.plantrimp += mm.plantrimp + me.actualtrimp += mm.actualtrimp + + if me.type == 'userdefined': + me.save() + + m.plantime += me.plantime + m.actualtime += me.actualtime + m.plandistance += me.plandistance + m.actualdistance += me.actualdistance + m.planrscore += me.planrscore + m.actualrscore += me.actualrscore + m.plantrimp += me.plantrimp + m.actualtrimp += me.actualtrimp + + + + if m.type == 'userdefined': + m.save() + + + +def get_execution_report(rower,startdate,enddate,plan=None): + if plan: + macros = TrainingMacroCycle.objects.filter(plan=plan).order_by("startdate") + checkscores(rower,macros) + mesos = TrainingMesoCycle.objects.filter(plan__in=macros).order_by("startdate") + micros = TrainingMicroCycle.objects.filter(plan__in=mesos).order_by("startdate") + else: + plans = TrainingPlan.objects.filter(startdate__lte=startdate,enddate__gte=startdate) + plans2 = TrainingPlan.objects.filter(enddate__lte=enddate,startdate__lte=enddate) + plans = plans | plans2 + + plans = plans.exclude(status=False).order_by("-enddate") + + if not plans: + # make week cycles here + return(0,'no plan found') + else: + plan = plans[0] + macros = TrainingMacroCycle.objects.filter(plan=plan).order_by("startdate") + checkscores(rower,macros) + mesos = TrainingMesoCycle.objects.filter(plan__in=macros).order_by("startdate") + micros = TrainingMicroCycle.objects.filter(plan__in=mesos).order_by("startdate") + + # we've got micros, now get sessions + startdates = [] + planned = [] + executed = [] + + for mm in micros: + plannedscore = 0 + actualscore = 0 + sps = get_sessions(rower,startdate=mm.startdate,enddate=mm.enddate) + for ps in sps: + if ps.sessionmode == 'rscore': + plannedscore += ps.planrscore + actualscore += ps.actualrscore + else: + ratio, status, cdate = is_session_complete(rower,ps) + ws = Workout.objects.filter(user=rower,plannedsession=ps) + + for w in ws: + if w.rscore != 0: + plannedscore += w.rscore/ratio + actualscore += w.rscore + elif w.hrtss != 0: + plannedscore += w.hrtss/ratio + actualscore += w.hrtss + else: + minutes = w.duration.hour*60+w.duration.minute + plannedscore += minutes/ratio + actualscore += minutes + + actualscore = int(actualscore) + plannedscore = int(plannedscore) + + startdates += [mm.startdate] + planned += [plannedscore] + executed += [actualscore] + + + data = pd.DataFrame({ + 'startdate':startdates, + 'planned':planned, + 'executed':executed, + }) + + return(data,'ok') + def get_indoorraces(workout): races1 = VirtualRace.objects.filter( sessiontype='indoorrace', diff --git a/rowers/templates/trainingplan_chart.html b/rowers/templates/trainingplan_chart.html new file mode 100644 index 00000000..030658cb --- /dev/null +++ b/rowers/templates/trainingplan_chart.html @@ -0,0 +1,35 @@ +{% extends "newbase.html" %} +{% load staticfiles %} +{% load rowerfilters %} + +{% block title %}Rowsandall Training Plans{% endblock %} + + +{% block main %} + + + + + +

Training Plan - {{ plan.name }}

+ +{{ the_script | safe }} + + + +{% endblock %} + +{% block scripts %} +{% endblock %} + +{% block sidebar %} +{% include 'menu_plan.html' %} +{% endblock %} diff --git a/rowers/urls.py b/rowers/urls.py index 599dbac8..b6bcc91b 100644 --- a/rowers/urls.py +++ b/rowers/urls.py @@ -587,6 +587,10 @@ urlpatterns = [ name='rower_trainingplan_view'), re_path(r'^plan/(?P\d+)/macro/(?P\d+)/user/(?P\d+)/$',views.rower_trainingplan_view, name='rower_trainingplan_view'), + re_path(r'^plan/(?P\d+)/execution/$',views.rower_trainingplan_execution_view, + name='rower_trainingplan_execution_view'), + re_path(r'^plan/(?P\d+)/execution/user/(?P\d+)/$',views.rower_trainingplan_execution_view, + name='rower_trainingplan_execution_view'), re_path(r'^macrocycle/(?P\d+)/$',login_required( views.TrainingMacroCycleUpdate.as_view()), name='macrocycle_update_view'), diff --git a/rowers/views/planviews.py b/rowers/views/planviews.py index 1e2f47b4..8868e0e7 100644 --- a/rowers/views/planviews.py +++ b/rowers/views/planviews.py @@ -1053,7 +1053,7 @@ def plannedsessions_coach_view(request, } ) -from rowers.plannedsessions import cratiocolors +from rowers.plannedsessions import cratiocolors,checkscores @login_required() def plannedsessions_view(request, @@ -2329,6 +2329,63 @@ class MacroCycleDelete(DeleteView): return obj +@user_passes_test(hasplannedsessions,login_url="/rowers/paidplans", + message="This functionality requires a Coach or Self-Coach plan", + redirect_field_name=None) +def rower_trainingplan_execution_view(request, + id=0, + userid=0): + + startdate,enddate = get_dates_timeperiod(request) + + try: + plan = TrainingPlan.objects.get(id=id) + except TrainingPlan.DoesNotExist: + raise Http4040("Training Plan Does Not Exist") + + r = getrequestrower(request,userid=userid) + + if not checkaccessuser(request.user,plan.manager): + if request.user.rower not in plan.rowers.all(): + raise PermissionDenied("Access denied") + + data,message = get_execution_report(r,plan.startdate,plan.enddate,plan=plan) + + script, div = interactive_planchart(data,plan.startdate,plan.enddate) + + breadcrumbs = [ + { + 'url':reverse(plannedsessions_view, + kwargs={'userid':userid}), + 'name': 'Plan' + }, + { + 'url':reverse(rower_trainingplan_view, + kwargs={'userid':userid, + 'id':id}), + 'name': plan.name + }, + { + 'url':reverse(rower_trainingplan_execution_view, + kwargs={'userid':userid, + 'id':id}), + 'name': 'Execution' + } + ] + + return render(request,'trainingplan_chart.html', + { + 'plan':plan, + 'todays_date': timezone.now().date(), + 'active': 'nav-plan', + 'breadcrumbs':breadcrumbs, + 'rower':r, + 'the_script':script, + 'the_div':div + } + ) + + @user_passes_test(hasplannedsessions,login_url="/rowers/paidplans", message="This functionality requires a Coach or Self-Coach plan", redirect_field_name=None) @@ -2359,99 +2416,7 @@ def rower_trainingplan_view(request, plan=plan, type='userdefined').order_by("startdate") - - for m in macrocycles: - createmesofillers(m) - m.plantime = 0 - m.actualtime = 0 - m.plandistance = 0 - m.actualdistance = 0 - m.planrscore = 0 - m.actualrscore = 0 - m.plantrimp = 0 - m.actualtrimp = 0 - - - mesocycles = TrainingMesoCycle.objects.filter( - plan=m, - type='userdefined').order_by("startdate") - - for me in mesocycles: - me.plantime = 0 - me.actualtime = 0 - me.plandistance = 0 - me.actualdistance = 0 - me.planrscore = 0 - me.actualrscore = 0 - me.plantrimp = 0 - me.actualtrimp = 0 - - microcycles = TrainingMicroCycle.objects.filter( - plan=me, - type='userdefined').order_by("startdate") - - for mm in microcycles: - sps = get_sessions(r,startdate=mm.startdate,enddate=mm.enddate) - - # sps = PlannedSession.objects.filter( - # rower = r, - # startdate__lte=mm.enddate, - # enddate__gte=mm.startdate) - - - mm.plantime = 0 - mm.actualtime = 0 - mm.plandistance = 0 - mm.actualdistance = 0 - mm.planrscore = 0 - mm.actualrscore = 0 - mm.plantrimp = 0 - mm.actualtrimp = 0 - - - if mm.type == 'userdefined': - for ps in sps: - ratio, status, cdate = is_session_complete(r,ps) - if ps.sessionmode == 'time': - mm.plantime += ps.sessionvalue - mm.actualtime += int(ps.sessionvalue*ratio) - elif ps.sessionmode == 'distance' and ps.sessiontype != 'race': - mm.plandistance += ps.sessionvalue - mm.actualdistance += int(ps.sessionvalue*ratio) - elif ps.sessionmode == 'rScore': - mm.planrscore += ps.sessionvalue - mm.actualrscore += int(ps.sessionvalue*ratio) - elif ps.sessionmode == 'TRIMP': - mm.plantrimp += ps.sessionvalue - mm.actualtrimp += int(ps.sessionvalue*ratio) - - mm.save() - - me.plantime += mm.plantime - me.actualtime += mm.actualtime - me.plandistance += mm.plandistance - me.actualdistance += mm.actualdistance - me.planrscore += mm.planrscore - me.actualrscore += mm.actualrscore - me.plantrimp += mm.plantrimp - me.actualtrimp += mm.actualtrimp - - if me.type == 'userdefined': - me.save() - - m.plantime += me.plantime - m.actualtime += me.actualtime - m.plandistance += me.plandistance - m.actualdistance += me.actualdistance - m.planrscore += me.planrscore - m.actualrscore += me.actualrscore - m.plantrimp += me.plantrimp - m.actualtrimp += me.actualtrimp - - - - if m.type == 'userdefined': - m.save() + checkscores(r,macrocycles) createmacrofillers(plan) macrocycles = TrainingMacroCycle.objects.filter(plan=plan).order_by("startdate") From db4465512c496de8dec4c6c77e2d557fff8a243d Mon Sep 17 00:00:00 2001 From: Sander Roosendaal Date: Sat, 5 Oct 2019 15:07:25 +0200 Subject: [PATCH 02/10] execution chart without plan --- rowers/interactiveplots.py | 3 ++ rowers/plannedsessions.py | 15 ++++++- rowers/views/planviews.py | 89 +++++++++++++++++++++++++------------- 3 files changed, 76 insertions(+), 31 deletions(-) diff --git a/rowers/interactiveplots.py b/rowers/interactiveplots.py index 3aaa69b6..5148a698 100644 --- a/rowers/interactiveplots.py +++ b/rowers/interactiveplots.py @@ -242,6 +242,9 @@ def interactive_planchart(data,startdate,enddate): yaxmaximum = data['executed'].max() if data['planned'].max() > yaxmaximum: yaxmaximum = data['planned'].max() + + if yaxmaximum == 0: + yaxmaximum = 250 yrange1 = Range1d(start=0,end=1.1*yaxmaximum) diff --git a/rowers/plannedsessions.py b/rowers/plannedsessions.py index 697a63a0..e2a96bc5 100644 --- a/rowers/plannedsessions.py +++ b/rowers/plannedsessions.py @@ -145,13 +145,13 @@ def checkscores(r,macrocycles): m.save() - def get_execution_report(rower,startdate,enddate,plan=None): if plan: macros = TrainingMacroCycle.objects.filter(plan=plan).order_by("startdate") checkscores(rower,macros) mesos = TrainingMesoCycle.objects.filter(plan__in=macros).order_by("startdate") micros = TrainingMicroCycle.objects.filter(plan__in=mesos).order_by("startdate") + micros = micros.exclude(enddate__lte=startdate).exclude(startdate__gte=enddate) else: plans = TrainingPlan.objects.filter(startdate__lte=startdate,enddate__gte=startdate) plans2 = TrainingPlan.objects.filter(enddate__lte=enddate,startdate__lte=enddate) @@ -161,7 +161,18 @@ def get_execution_report(rower,startdate,enddate,plan=None): if not plans: # make week cycles here - return(0,'no plan found') + # get monday before startdate + startdate += timedelta(days=1-startdate.isoweekday()) + startdate = startdate-timedelta(days=7) + micros = [] + while startdate <= enddate: + micro = type('micros',(object,), + { + 'startdate':startdate, + 'enddate':startdate+timedelta(days=7) + }) + micros.append(micro) + startdate += timedelta(days=7) else: plan = plans[0] macros = TrainingMacroCycle.objects.filter(plan=plan).order_by("startdate") diff --git a/rowers/views/planviews.py b/rowers/views/planviews.py index 8868e0e7..6bb9aad5 100644 --- a/rowers/views/planviews.py +++ b/rowers/views/planviews.py @@ -2336,46 +2336,77 @@ def rower_trainingplan_execution_view(request, id=0, userid=0): - startdate,enddate = get_dates_timeperiod(request) - - try: - plan = TrainingPlan.objects.get(id=id) - except TrainingPlan.DoesNotExist: - raise Http4040("Training Plan Does Not Exist") - + startdate = request.GET.get('startdate') + enddate = request.GET.get('enddate') + r = getrequestrower(request,userid=userid) - if not checkaccessuser(request.user,plan.manager): - if request.user.rower not in plan.rowers.all(): - raise PermissionDenied("Access denied") + + if int(id): + try: + plan = TrainingPlan.objects.get(id=id) + except TrainingPlan.DoesNotExist: + raise Http404("Training Plan Does Not Exist") + if not checkaccessuser(request.user,plan.manager): + if request.user.rower not in plan.rowers.all(): + raise PermissionDenied("Access denied") - data,message = get_execution_report(r,plan.startdate,plan.enddate,plan=plan) + if not startdate or not enddate: + startdate = plan.startdate + enddate = plan.enddate + else: + startdate,enddate = get_dates_timeperiod(request) - script, div = interactive_planchart(data,plan.startdate,plan.enddate) - breadcrumbs = [ - { - 'url':reverse(plannedsessions_view, - kwargs={'userid':userid}), - 'name': 'Plan' - }, - { - 'url':reverse(rower_trainingplan_view, - kwargs={'userid':userid, - 'id':id}), - 'name': plan.name + if int(id): + data,message = get_execution_report(r,startdate,enddate,plan=plan) + else: + data,message = get_execution_report(r,startdate,enddate) + + if not data.empty: + script, div = interactive_planchart(data,startdate,enddate) + else: + script = '' + div = '' + messages.error(request,'The plan does not cover this time range') + + if int(id): + breadcrumbs = [ + { + 'url':reverse(plannedsessions_view, + kwargs={'userid':userid}), + 'name': 'Plan' }, - { - 'url':reverse(rower_trainingplan_execution_view, - kwargs={'userid':userid, - 'id':id}), - 'name': 'Execution' + { + 'url':reverse(rower_trainingplan_view, + kwargs={'userid':userid, + 'id':id}), + 'name': plan.name + }, + { + 'url':reverse(rower_trainingplan_execution_view, + kwargs={'userid':userid, + 'id':id}), + 'name': 'Execution' + } + ] + else: + breadcrumbs = [ + { + 'url':reverse(plannedsessions_view, + kwargs={'userid':userid}), + 'name': 'Plan' + }, + { + 'url':reverse(rower_trainingplan_execution_view, + kwargs={'userid':userid, + 'id':id}), + 'name': 'Execution' } ] return render(request,'trainingplan_chart.html', { - 'plan':plan, 'todays_date': timezone.now().date(), 'active': 'nav-plan', 'breadcrumbs':breadcrumbs, From 3c93b270cb96afc99067410c9f6e920ce458b3c1 Mon Sep 17 00:00:00 2001 From: Sander Roosendaal Date: Sat, 5 Oct 2019 15:17:45 +0200 Subject: [PATCH 03/10] some bug fixes --- rowers/interactiveplots.py | 2 +- rowers/views/planviews.py | 7 +++++-- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/rowers/interactiveplots.py b/rowers/interactiveplots.py index 5148a698..c2e921db 100644 --- a/rowers/interactiveplots.py +++ b/rowers/interactiveplots.py @@ -249,7 +249,7 @@ def interactive_planchart(data,startdate,enddate): yrange1 = Range1d(start=0,end=1.1*yaxmaximum) - tidy_df = data.melt(id_vars=['startdate'],value_vars=['planned','executed']) + tidy_df = data.melt(id_vars=['startdate'],value_vars=['executed','planned']) bars = hv.Bars(tidy_df,['startdate','variable'],['value']) bars.opts( opts.Bars(show_legend=True,tools=['tap','hover'],legend_position='bottom',show_frame=True)) diff --git a/rowers/views/planviews.py b/rowers/views/planviews.py index 6bb9aad5..4809c0fe 100644 --- a/rowers/views/planviews.py +++ b/rowers/views/planviews.py @@ -2352,8 +2352,11 @@ def rower_trainingplan_execution_view(request, raise PermissionDenied("Access denied") if not startdate or not enddate: - startdate = plan.startdate - enddate = plan.enddate + if int(id): + startdate = plan.startdate + enddate = plan.enddate + else: + startdate,enddate = get_dates_timeperiod(request) else: startdate,enddate = get_dates_timeperiod(request) From e7224467c0554adb288f0cb489faf4bb32596fbf Mon Sep 17 00:00:00 2001 From: Sander Roosendaal Date: Sat, 5 Oct 2019 15:28:27 +0200 Subject: [PATCH 04/10] fix zero division --- rowers/plannedsessions.py | 22 +++++++++++++++++----- 1 file changed, 17 insertions(+), 5 deletions(-) diff --git a/rowers/plannedsessions.py b/rowers/plannedsessions.py index e2a96bc5..1c7f430e 100644 --- a/rowers/plannedsessions.py +++ b/rowers/plannedsessions.py @@ -199,14 +199,26 @@ def get_execution_report(rower,startdate,enddate,plan=None): for w in ws: if w.rscore != 0: - plannedscore += w.rscore/ratio - actualscore += w.rscore + if ratio > 0: + plannedscore += w.rscore/ratio + actualscore += w.rscore + else: + plannedscore += 60 + actualscore += 0 elif w.hrtss != 0: - plannedscore += w.hrtss/ratio - actualscore += w.hrtss + if ratio > 0: + plannedscore += w.hrtss/ratio + actualscore += w.hrtss + else: + plannedscore += 60 + actualscore += 0 else: minutes = w.duration.hour*60+w.duration.minute - plannedscore += minutes/ratio + if ration > 0: + plannedscore += minutes/ratio + else: + plannedscore += 60 + actualscore += minutes actualscore = int(actualscore) From 22b71e37286e325e6bbee795505d20562e269a76 Mon Sep 17 00:00:00 2001 From: Sander Roosendaal Date: Sat, 5 Oct 2019 15:33:18 +0200 Subject: [PATCH 05/10] fix --- rowers/plannedsessions.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/rowers/plannedsessions.py b/rowers/plannedsessions.py index 1c7f430e..3aa7d6ef 100644 --- a/rowers/plannedsessions.py +++ b/rowers/plannedsessions.py @@ -214,7 +214,7 @@ def get_execution_report(rower,startdate,enddate,plan=None): actualscore += 0 else: minutes = w.duration.hour*60+w.duration.minute - if ration > 0: + if ratio > 0: plannedscore += minutes/ratio else: plannedscore += 60 From 48906faaff7a4e39f140b13d306f7f52b3bb69a3 Mon Sep 17 00:00:00 2001 From: Sander Roosendaal Date: Sat, 5 Oct 2019 21:13:48 +0200 Subject: [PATCH 06/10] adding workouts not attached to sessions --- rowers/plannedsessions.py | 31 +++++++++++++++++++++++++------ 1 file changed, 25 insertions(+), 6 deletions(-) diff --git a/rowers/plannedsessions.py b/rowers/plannedsessions.py index 3aa7d6ef..7687540f 100644 --- a/rowers/plannedsessions.py +++ b/rowers/plannedsessions.py @@ -189,14 +189,33 @@ def get_execution_report(rower,startdate,enddate,plan=None): plannedscore = 0 actualscore = 0 sps = get_sessions(rower,startdate=mm.startdate,enddate=mm.enddate) - for ps in sps: - if ps.sessionmode == 'rscore': - plannedscore += ps.planrscore - actualscore += ps.actualrscore + unmatchedworkouts = Workout.objects.filter( + user=rower, + plannedsession=None, + date__gte=mm.startdate,date__lte=mm.enddate) + for w in unmatchedworkouts: + if w.rscore != 0: + actualscore += w.rscore + elif w.hrtss != 0: + actualscore += w.hrtss + else: + minutes = w.duration.hour*60+w.duration.minute + actualscore += minutes + for ps in sps: + ratio, status, cdate = is_session_complete(rower,ps) + if ps.sessionmode == 'rscore': + plannedscore += ps.sessionvalue + actualscore += ratio*ps.sessionvalue else: - ratio, status, cdate = is_session_complete(rower,ps) ws = Workout.objects.filter(user=rower,plannedsession=ps) - + if not ws: + if ps.sessionmode == 'time': + plannedscore += ps.sessionvalue + elif ps.sessionmode == 'distance': + plannedscore += 60. + elif ps.sessionmode == 'TRIMP': + plannedscore += ps.sessionvalue/2. + for w in ws: if w.rscore != 0: if ratio > 0: From ddc17455bb08c2a52accf6407a836cb04c1decd2 Mon Sep 17 00:00:00 2001 From: Sander Roosendaal Date: Sun, 6 Oct 2019 09:03:37 +0200 Subject: [PATCH 07/10] excluded duplicate workouts from work load calc --- rowers/plannedsessions.py | 2 +- rowers/stravastuff.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/rowers/plannedsessions.py b/rowers/plannedsessions.py index 7687540f..a3f8f1a7 100644 --- a/rowers/plannedsessions.py +++ b/rowers/plannedsessions.py @@ -192,7 +192,7 @@ def get_execution_report(rower,startdate,enddate,plan=None): unmatchedworkouts = Workout.objects.filter( user=rower, plannedsession=None, - date__gte=mm.startdate,date__lte=mm.enddate) + date__gte=mm.startdate,date__lte=mm.enddate).exclude(duplicate=True) for w in unmatchedworkouts: if w.rscore != 0: actualscore += w.rscore diff --git a/rowers/stravastuff.py b/rowers/stravastuff.py index 0ea6ab5c..6c75da2c 100644 --- a/rowers/stravastuff.py +++ b/rowers/stravastuff.py @@ -441,7 +441,7 @@ def handle_stravaexport(f2,workoutname,stravatoken,description='', client = stravalib.Client(access_token=stravatoken) act = client.upload_activity(f2,'tcx.gz',name=workoutname) - + try: res = act.wait(poll_interval=5.0,timeout=30) message = 'Workout successfully synchronized to Strava' From 6a171513b934d534f2b263b685c79ebf81532c1c Mon Sep 17 00:00:00 2001 From: Sander Roosendaal Date: Sat, 12 Oct 2019 16:53:11 +0200 Subject: [PATCH 08/10] attempting to speed up --- rowers/templates/course_edit_view.html | 8 ++ rowers/templates/course_replace.html | 8 ++ rowers/templates/course_view.html | 8 ++ rowers/templates/coursemap.html | 8 ++ rowers/templates/list_workouts.html | 5 +- rowers/templates/map_view.html | 6 ++ rowers/templates/plannedsessionview.html | 3 + rowers/templates/virtualevent.html | 6 ++ rowers/templates/virtualeventranking.html | 6 ++ rowers/templates/workout_form.html | 6 ++ rowers/templates/workout_view.html | 7 ++ rowsandall_app/settings.py | 4 +- static/css/bokeh-1.0.4.min.css | 1 + static/css/bokeh-widgets-1.0.4.min.css | 4 + templates/newbase.html | 119 +++++++++++----------- 15 files changed, 136 insertions(+), 63 deletions(-) create mode 100644 static/css/bokeh-1.0.4.min.css create mode 100644 static/css/bokeh-widgets-1.0.4.min.css diff --git a/rowers/templates/course_edit_view.html b/rowers/templates/course_edit_view.html index 436a07a7..797a2924 100644 --- a/rowers/templates/course_edit_view.html +++ b/rowers/templates/course_edit_view.html @@ -1,6 +1,13 @@ {% extends "newbase.html" %} {% load staticfiles %} {% load rowerfilters %} +{% load leaflet_tags %} + +{% block meta %} +{% leaflet_js %} +{% leaflet_css %} +{% endblock %} + {% block scripts %} {% include "monitorjobs.html" %} {% endblock %} @@ -8,6 +15,7 @@ {% block title %}{{ course.name }} {% endblock %} {% block og_title %}{{ course.name }} {% endblock %} {% block main %} +

{{ course.name }}

    diff --git a/rowers/templates/course_replace.html b/rowers/templates/course_replace.html index c639962e..563564a5 100644 --- a/rowers/templates/course_replace.html +++ b/rowers/templates/course_replace.html @@ -1,6 +1,13 @@ {% extends "newbase.html" %} {% load staticfiles %} {% load rowerfilters %} +{% load leaflet_tags %} + +{% block meta %} +{% leaflet_js %} +{% leaflet_css %} +{% endblock %} + {% block scripts %} {% include "monitorjobs.html" %} {% endblock %} @@ -8,6 +15,7 @@ {% block title %}{{ course.name }} {% endblock %} {% block og_title %}{{ course.name }} {% endblock %} {% block main %} +

    Replace {{ course.name }}

      diff --git a/rowers/templates/course_view.html b/rowers/templates/course_view.html index 7a68f77d..312ee33f 100644 --- a/rowers/templates/course_view.html +++ b/rowers/templates/course_view.html @@ -1,6 +1,13 @@ {% extends "newbase.html" %} {% load staticfiles %} {% load rowerfilters %} +{% load leaflet_tags %} + +{% block meta %} +{% leaflet_js %} +{% leaflet_css %} +{% endblock %} + {% block scripts %} {% include "monitorjobs.html" %} {% endblock %} @@ -8,6 +15,7 @@ {% block title %}{{ course.name }} {% endblock %} {% block og_title %}{{ course.name }} {% endblock %} {% block main %} +

      {{ course.name }}

        diff --git a/rowers/templates/coursemap.html b/rowers/templates/coursemap.html index 8af84b05..b5b162e6 100644 --- a/rowers/templates/coursemap.html +++ b/rowers/templates/coursemap.html @@ -1,6 +1,13 @@ {% extends "newbase.html" %} {% load staticfiles %} {% load rowerfilters %} +{% load leaflet_tags %} + +{% block meta %} +{% leaflet_js %} +{% leaflet_css %} +{% endblock %} + {% block scripts %} {% include "monitorjobs.html" %} {% endblock %} @@ -8,6 +15,7 @@ {% block title %}{{ course.name }} {% endblock %} {% block og_title %}{{ course.name }} {% endblock %} {% block main %} +

        {{ course.name }}

        {{ mapdiv|safe }} diff --git a/rowers/templates/list_workouts.html b/rowers/templates/list_workouts.html index 237165d7..b5ec0a6e 100644 --- a/rowers/templates/list_workouts.html +++ b/rowers/templates/list_workouts.html @@ -59,10 +59,7 @@
        • - - + {{ interactiveplot |safe }} diff --git a/rowers/templates/map_view.html b/rowers/templates/map_view.html index 2d24ccf8..7826674e 100644 --- a/rowers/templates/map_view.html +++ b/rowers/templates/map_view.html @@ -1,9 +1,15 @@ {% extends "newbase.html" %} {% load staticfiles %} {% load rowerfilters %} +{% load leaflet_tags %} {% block title %}{{ workout.name }} {% endblock %} +{% block meta %} +{% leaflet_js %} +{% leaflet_css %} +{% endblock %} + {% block main %} diff --git a/rowers/templates/plannedsessionview.html b/rowers/templates/plannedsessionview.html index 92fa1897..a8d0ad65 100644 --- a/rowers/templates/plannedsessionview.html +++ b/rowers/templates/plannedsessionview.html @@ -1,8 +1,11 @@ {% extends "newbase.html" %} {% load staticfiles %} {% load rowerfilters %} +{% load leaflet_tags %} {% block meta %} +{% leaflet_js %} +{% leaflet_css %} {% endblock %} {% block title %}Planned Session{% endblock %} diff --git a/rowers/templates/virtualevent.html b/rowers/templates/virtualevent.html index e60338cd..60d40f64 100644 --- a/rowers/templates/virtualevent.html +++ b/rowers/templates/virtualevent.html @@ -1,6 +1,12 @@ {% extends "newbase.html" %} {% load staticfiles %} {% load rowerfilters %} +{% load leaflet_tags %} + +{% block meta %} +{% leaflet_js %} +{% leaflet_css %} +{% endblock %} {% block title %}Rowsandall Virtual Race{% endblock %} diff --git a/rowers/templates/virtualeventranking.html b/rowers/templates/virtualeventranking.html index dac83880..5917b706 100644 --- a/rowers/templates/virtualeventranking.html +++ b/rowers/templates/virtualeventranking.html @@ -1,6 +1,12 @@ {% extends "newbase.html" %} {% load staticfiles %} {% load rowerfilters %} +{% load leaflet_tags %} + +{% block meta %} +{% leaflet_js %} +{% leaflet_css %} +{% endblock %} {% block title %}Rowsandall Virtual Race{% endblock %} diff --git a/rowers/templates/workout_form.html b/rowers/templates/workout_form.html index ae07da1a..38c28cfe 100644 --- a/rowers/templates/workout_form.html +++ b/rowers/templates/workout_form.html @@ -1,6 +1,12 @@ {% extends "newbase.html" %} {% load staticfiles %} {% load rowerfilters %} +{% load leaflet_tags %} + +{% block meta %} +{% leaflet_js %} +{% leaflet_css %} +{% endblock %} {% load tz %} diff --git a/rowers/templates/workout_view.html b/rowers/templates/workout_view.html index b55e25cc..bf99c2e1 100644 --- a/rowers/templates/workout_view.html +++ b/rowers/templates/workout_view.html @@ -1,6 +1,13 @@ {% extends "newbase.html" %} {% load staticfiles %} {% load rowerfilters %} +{% load leaflet_tags %} + +{% block meta %} +{% leaflet_js %} +{% leaflet_css %} +{% endblock %} + {% block scripts %} {% include "monitorjobs.html" %} {% endblock %} diff --git a/rowsandall_app/settings.py b/rowsandall_app/settings.py index 33831eb8..5863adaa 100644 --- a/rowsandall_app/settings.py +++ b/rowsandall_app/settings.py @@ -84,7 +84,7 @@ MIDDLEWARE = [ 'django.middleware.common.CommonMiddleware', 'django.middleware.common.BrokenLinkEmailsMiddleware', 'django.middleware.gzip.GZipMiddleware', -# 'htmlmin.middleware.HtmlMinifyMiddleware', + 'htmlmin.middleware.HtmlMinifyMiddleware', # 'htmlmin.middleware.MarkRequestMiddleware', 'django.middleware.csrf.CsrfViewMiddleware', 'django.middleware.security.SecurityMiddleware', @@ -103,7 +103,7 @@ MIDDLEWARE = [ ] ROOT_URLCONF = 'rowsandall_app.urls' -#HTML_MINIFY = True +HTML_MINIFY = True #EXCLUDE_FROM_MINIFYING = ('^rowers/flexall', # '^rowers/list-workouts', diff --git a/static/css/bokeh-1.0.4.min.css b/static/css/bokeh-1.0.4.min.css new file mode 100644 index 00000000..7ad0e234 --- /dev/null +++ b/static/css/bokeh-1.0.4.min.css @@ -0,0 +1 @@ +.bk-root{font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:10pt;position:relative;width:auto;height:auto}.bk-root .bk-shading{position:absolute;display:block;border:1px dashed green}.bk-root .bk-tile-attribution a{color:black}.bk-root .bk-tool-icon-box-select{background-image:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAB3RJTUUH4gEMEg0kduFrowAAAIdJREFUWMPtVtEKwCAI9KL//4e9DPZ3+wP3KgOjNZouFYI4C8q7s7DtB1lGIeMoRMRinCLXg/ML3EcFqpjjloOyZxRntxpwQ8HsgHYARKFAtSFrCg3TCdMFCE1BuuALEXJLjC4qENsFVXCESZw38/kWLOkC/K4PcOc/Hj03WkoDT3EaWW9egQul6CUbq90JTwAAAABJRU5ErkJggg==")}.bk-root .bk-tool-icon-box-zoom{background-image:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAB3RJTUUH4gEMEg82t254aQAAAkBJREFUWMPN11+E1FEUB/DPTFn2qaeIpcSwr5NlUyJiKWVXWUqvlUh/iE3RY9mUekkPPURtLKNRrFJEeuphGfUUaVliiX1aVjGs6aG7+XX9ZnZ+d2fTl2vmnHvPPfeee/79Sk+may2/UQq/q7Qu+bAJoxjHIKqB/wlfUMcMVqI9bLZ+DGIKwzlzQ2GcxCx2xwvKOUKlaHTiX8bHNspjDONHkOmJBW5jIof/FvPh/06MZOb6cRc7cGn1AKUE5cdzlM/gAr5F/O24H3xkFRfxAbVygvK+cIsspjGWo1zgjeFpxL+BvnLw7laBA4xjIFJwrgu52DoVjKdY4HBEX8dSF3JLYe1fe6UcYCii3xWQjdfuSTnAtoheKCC7GNED5Zx4L4qt61jbTLHA94geKSC7P7ZeShQ0Inoi1IJuEOeORooFXkV0FZNdZs5qvFfKAeqYy7nZ6yg//HG0MBfffh71lFrQDCW2EvEP4mt4okZUDftz9rmGZkotmMxJRtlisy+MTniAWrty3AlXw0hFM2TD89l+oNsoOJXjbIs4EpqNtTCLXbiZ0g+M4mFObj8U3vsNjoZCVcmk60ZwthpepLZkB/AsivWfOJZxtpUQHfWib7KWDwzjeegBZJSdKFiE2qJTFFTwElsi/unQ/awXrU4WGMD7nOJxBY/1EO2iYConq93CHT1GOwucjdqnRyFz+VcHmMNefMY9nNkA3SWUOoXhQviSWQ4huLIRFlirFixnQq/XaKXUgg2xQNGv4V7x/RcW+AXPB3h7H1PaiQAAAABJRU5ErkJggg==")}.bk-root .bk-tool-icon-zoom-in{background-image:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAB3RJTUUH4gEMEgsUBmL8iQAAA2JJREFUWMO9l12IlFUYx3//MzPrLpSjkm5oN4FFIWVEl66IQlFYwtLOzozsjHdGRSCRF0sfBEXRVV0FQuQiLm5CZNBFgRRaRLVFhbJ2EdiN5gbK7toObTPn6eYdPTvNzPvOBz5Xh/ec5/n/n89zXtEHmZqeSXSuXBz/3zfdKvBWJHQrwZuRcP0El+QkbQXeBX6WZEgm6TtJk5lM5o4Lc+cV6qpf4Ga20Tm338zeATItVK9Ker6yvPzp4NDQ3+XieGsCU9MzTYumGbhz7m4ze9/MHgvBgItACrgfGAj2jgAvAYs3wlEujjc13kii8YyZrXXOfWhmo9GnFUlvOOemarVapVqtkslksmb2KjARqL62ecuWN9NxbRInzrldAXhV0uFSIfdew7G/gNLU9MwS8CwSmE3Oz88fcXG5blfpqVRq0Ix8VIAAX0XgrVL7HDCHGcCaWrV60LUBN8Dae58aQIxEqcA592I9M610JL0cpG/U9TIHJNKY3RV5z0R+7Nd4HZ0P1g/2RMBuegLAsRMnb4vT8d5vqKfMzOgtAlADrkmqGywmiMBTwfr3dC9j1Xv/r6Tvg/5/5ejxE6cO7M9faVbQZrYNOFSPmqQvVo9FKexvi5uWX58943aM7DwAfBDY+FbSCxP5sdkGx55GeguzrUEXPaSo2pFkAbiSZQCAzZJOmdkjwd6SpB/M7KykQTPbA2wDhoIzRzcNDx9MJwGNIXdJ0mEzmwbujL7dbma7gd03A7lKfnTOvf74nl0r6bonTUbujRSUCrm2d4L3/kvn3JPe+8+BDW2i9o+kT7z3kxP5sYsA6W47oE64TsR7P9tQL4vA2mh9WdIscKxUyJ0M7aR7acOGzikD65EQLEjaa2ZXzMwDFeB6qZBbbLTRE4EGeSaozNOZgYFf8qP7lmIvs354n0qlHpB0T7B9Ogl4IgJJrmjv/SiQjbrkD+BMUkfSbYATPdckrTOzkciWAXOlQu5cYgLdPEIapud9wMOR9zVJH3ViKx333mtHMJvNuoWFhZ3A+ojMcja77njXBEKwJJfTcqUyCIQ34Mf7nnh0paMnXacFuGoC1mr3AtuDfLzd8Zuyl+rfuGn4HLAD+Az4qZQf+61TAj0Noj8vX6oC35SL43u7teG6rf5+iXppwW7/JUL5D03qaFRvvUe+AAAAAElFTkSuQmCC")}.bk-root .bk-tool-icon-zoom-out{background-image:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAB3RJTUUH4gEMEgsHgty9VwAAA0FJREFUWMO9l09oXFUUxn/fmXlpItppi22k7UJBRSlVkCytSAuKUloIdjKT0El3FXVXdVFKRVAQV7qQohsNwdA0UFvBhYtqUVyIVlRaogtFQVq7qSTVjA3z3nHzBq/jvPmTN/Ss7rv3nvN99/y794kByMzcfE/7picn/jenmwWeRUI3E7wdCRskuCSTdDfwBvCtJEdySV9KOhpF0e0/LF5SqKtBgbv7ZjObcvfXgShD9Zqk5+orKx8Oj4z8NT05kU1gZm6+bdK0Azezu9z9hLs/HoIBvwAF4H5gKFh7B3gBWFY3460kWve4+3oze9fdx9OpVUmvmNlMHMf1RqNBFEUldz8OHAxUX9q6bduryut+Sfvc/Wz62ZD0fK1afjND9y3gGSRwv1GMojstTxUUCoVhdyopEYDzKXjWwZ4FFnEHWBc3Goet00m7lZlZYQixKw0FZnakGZksHUnHgvCN5/KARBH37enpOVg58H13HV0Kxg/kIuD/ngSA2ZMLt3bTSZJkUzNk7k4+D0AM/CGpaXCyBw/sC8Y/qZd2GpZiuL9YLN4Sx/HpoP5/c/exQ1OVq+1yyt13SLoArEsJnMjlgfOffvK3u58Kprab2QezJxfG2iTzUzI70wRPG9jbmpmb95SNB9mpzp7/j2yVdNbdx4K565K+cvfPJQ27+x5gBzAS7Hlvy+jo4WIvoC3kWpcvS3rR3eeAO9K529x9N7C7zX6AC2b28hN7Hl1Vt44niVq13LUjmtlYkiQfA5s6eO+GpDNJkhw9NFX5ueNt2ARodyF1IHIN2JiOl4H16fiKpK+B2Vq1vBAqFAf4IJkGNiIhWJK0192vunsC1IE/a9XycquNXARa5OnApeeioaHvKuP7r3dTGsiLqFAo7JR0T7B8rhfwXARa2us4UEqr5Ffgs151i/08oTNKdIO770ptObBYq5Yv5ibQq/sl3Qc8lJ4+lnSqH1vFfp9koZRKJVtaWnqkWXqSVkqlDe+vmUDWpZMlK/X6MBDegKf3P/nYaj8ErN9fqZBYEsf3Ag8G8Xit33BaniTcvGX0IvAw8BHwTa1y4Md+CeRqRL9fudwAvpienNi7Vhu21uwflOT+L+i1X2TJP57iUvUFtHWsAAAAAElFTkSuQmCC")}.bk-root .bk-tool-icon-help{background-image:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAXNSR0IArs4c6QAAAAlwSFlzAAALEwAACxMBAJqcGAAABltpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IlhNUCBDb3JlIDUuNC4wIj4KICAgPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4KICAgICAgPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIKICAgICAgICAgICAgeG1sbnM6dGlmZj0iaHR0cDovL25zLmFkb2JlLmNvbS90aWZmLzEuMC8iCiAgICAgICAgICAgIHhtbG5zOmV4aWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20vZXhpZi8xLjAvIgogICAgICAgICAgICB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIKICAgICAgICAgICAgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiCiAgICAgICAgICAgIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyIKICAgICAgICAgICAgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIj4KICAgICAgICAgPHRpZmY6UmVzb2x1dGlvblVuaXQ+MjwvdGlmZjpSZXNvbHV0aW9uVW5pdD4KICAgICAgICAgPHRpZmY6Q29tcHJlc3Npb24+NTwvdGlmZjpDb21wcmVzc2lvbj4KICAgICAgICAgPHRpZmY6WFJlc29sdXRpb24+NzI8L3RpZmY6WFJlc29sdXRpb24+CiAgICAgICAgIDx0aWZmOk9yaWVudGF0aW9uPjE8L3RpZmY6T3JpZW50YXRpb24+CiAgICAgICAgIDx0aWZmOllSZXNvbHV0aW9uPjcyPC90aWZmOllSZXNvbHV0aW9uPgogICAgICAgICA8ZXhpZjpQaXhlbFlEaW1lbnNpb24+MzI8L2V4aWY6UGl4ZWxZRGltZW5zaW9uPgogICAgICAgICA8ZXhpZjpQaXhlbFhEaW1lbnNpb24+MzI8L2V4aWY6UGl4ZWxYRGltZW5zaW9uPgogICAgICAgICA8ZXhpZjpDb2xvclNwYWNlPjE8L2V4aWY6Q29sb3JTcGFjZT4KICAgICAgICAgPHhtcE1NOkluc3RhbmNlSUQ+eG1wLmlpZDpBODVDNDBDMzIwQjMxMUU0ODREQUYzNzM5QTM2MjBCRTwveG1wTU06SW5zdGFuY2VJRD4KICAgICAgICAgPHhtcE1NOkRvY3VtZW50SUQ+eG1wLmRpZDpBODVDNDBDNDIwQjMxMUU0ODREQUYzNzM5QTM2MjBCRTwveG1wTU06RG9jdW1lbnRJRD4KICAgICAgICAgPHhtcE1NOkRlcml2ZWRGcm9tIHJkZjpwYXJzZVR5cGU9IlJlc291cmNlIj4KICAgICAgICAgICAgPHN0UmVmOmluc3RhbmNlSUQ+eG1wLmlpZDpBODVDNDBDMTIwQjMxMUU0ODREQUYzNzM5QTM2MjBCRTwvc3RSZWY6aW5zdGFuY2VJRD4KICAgICAgICAgICAgPHN0UmVmOmRvY3VtZW50SUQ+eG1wLmRpZDpBODVDNDBDMjIwQjMxMUU0ODREQUYzNzM5QTM2MjBCRTwvc3RSZWY6ZG9jdW1lbnRJRD4KICAgICAgICAgPC94bXBNTTpEZXJpdmVkRnJvbT4KICAgICAgICAgPGRjOnN1YmplY3Q+CiAgICAgICAgICAgIDxyZGY6U2VxLz4KICAgICAgICAgPC9kYzpzdWJqZWN0PgogICAgICAgICA8eG1wOk1vZGlmeURhdGU+MjAxNjoxMToyOCAxMToxMTo4MjwveG1wOk1vZGlmeURhdGU+CiAgICAgICAgIDx4bXA6Q3JlYXRvclRvb2w+UGl4ZWxtYXRvciAzLjY8L3htcDpDcmVhdG9yVG9vbD4KICAgICAgPC9yZGY6RGVzY3JpcHRpb24+CiAgIDwvcmRmOlJERj4KPC94OnhtcG1ldGE+Cphjt2AAAAT7SURBVFgJxRdbaFxFdGb2bhui227BWrsVKYgf2kJUbP9EUPuzEB803WTXJjH61Q/7Ya1+CMYKEVTsh4J/EpvY7BoabUiNiA8s1p+4KIhpoUUEselHqyS76TbZ3HuP58ydc3d2u4+IkQxczpz3mZkzZ86VYpXjvenpjZsLhUcliE4AuUuASAgptmt1EFdwPiclzIIUUwubNn17OJlcXo1p2UpodHRiux9xB1Eug1+slbzhFxGOKc851tu7/0oznYYBDA8Pt0U2tL8KQryIq2tvZqQhD0QJHRz3yqWhgYGBpXpydQMwqz6NCnurleCSADkJEfgKfOePqL80R/wV1ZaQyr1LenKfkPCkEPKeaj0xg7vxVL3duCmA0Vyuw/fl52hgBxsBED+h4Cv9z3R/zbRm8MTJTx7HQN7GQB6w5C4L4SX7M5lfLBpurjXMyvNIShiyi0l1pL8n9b7EDGPR8fHxzSsQ6XDB3618/xqo6Pk25V5MpVJllgHM1BO58RdQ612kOYZ+GXdij70TYQB05mpj+1kU5G2fB+l3PZtOf8NGx6ambnMXb3yAxg8wjSEG6OKKR9oicBQD+ZvpH2Wzj0lQpxCPG9qMv1x6hHNCsSAlHM7ZOa682vlI9tRDbvHGbD3nZAPpDoD/3JIrLpAs26UFkC3EMUA99hpfGtEBfJjNJnS2Gwnadnvl+Xw+iuc3DAJuNyIaSCHpilVldyDjjUxj3WDZIAhxhHHyRcdNuA7AAfUaXzVKODpzFiZ4/uLvh5G+m2no+C/pyIf7MqlEJB7bpqR6nXkEUfbeawuLaZsW2ISfNQ2vtaktQlGFQyIVGT0o2+2EC4iQNGwjBIN9qdQ5Qg4mk4X4rW3vCClLtowE2FOFUxKDfNmiZci3ovKKRFPh4FK9q4Zbdr+lKKJiA13TcHR2dmLBgdmQ0GAS2MZaEowY+XbAk09IvgtYZGp16SyvFhaHcIUh645t8T9DBCcnz5zZ4hZLu3DzK2QlL1QQa0Y+pHiJKPSuOGj3PmZTheM5w2TwqBxnvBZOTk7G5gvXJ5Aelms8wnJURL+olSWcfEhf6gDoUXPMq6ZlqbzWU2pE+3hi4s6F68tfIj9cBMlikr7Z0/P0b/X0yIcUXsDCF1WhtL4OROHaXk+xlkbV0Cu732Nmhc4peaWSg73pA8dq5RkvO37ldUTfXCKZv2q45MkhvG87WQEzpCCUSvV1d9GONBy3lMvgKSwrZig8gjAietWY0QriylO2jIo4yVbOSb7KB/qmI9BPKjHpSSXYauRyn92Nq9/Kcrj13x3s3v8D481glQ/0raiNYgX9njPSBOImbrHZePl+tfFmc9sH+Xaoh8NjOKSVdDMhjjYzQLy+dFceH5+IJQf9VYXX4tROg4ZFU8m31M3mfPEqUoJqCGJfvWpo2xnNfdrhC28n06SCeSzNZxlvBINGRXCtKS7EY1uV6V7HWAm38y1cXaXsMcOCvr9ySPj+af7A1U2HJXHzVNvUXVLIGyPf+jV0pf8GHoN+TLAyPkidTCi2RpPApmnR0Bd1zGRaB/B8Oj2HSw7LLbVR1MmskW8RdEWVXSJf3JbpAMgRtc4IZoxTh9qotQjCasm46M0YX9pV1VmbpvRH5OwwgdRtSg2vKaAz/1dNKVtb17Y8DCL4HVufHxMOYl1/zTgIgiYvBnFKfaNp3YjTdPz3n9Na8//X7/k/O1tdwopcZlcAAAAASUVORK5CYII=")}.bk-root .bk-tool-icon-hover{background-image:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAB3RJTUUH4gEMEg4oVHp0SwAAAQJJREFUWMPtlsENgzAMRb8RQ5VJItFDOgaZAMaAA0iZpN3KPZSoEEHSQBCViI/G8pfNt/KAFFcPshPdoAGgZkYVVYjQAFCyFLN8tlAbXRwAxp61nc9XCkGERpZCxRDvBl0zoxp7K98GAACxxH29srNNmPsK2l7zHoHHXZDr+/9vwDfB3kgeSB5IHkgeOH0DmesJjSXi6pUvkYt5u9teVy6aWREDM0D0BRvmGRV5N6DsQkMzI64FidtI5t3AOKWaFhuioY8dlYf9TO1PREUh/9HVeAqzIThHgWZ6MuNmC1jiL1mK4pAzlKUojEmNsxcmL0J60tazWjLZFpClPbd9BMJfL95145YajN5RHQAAAABJRU5ErkJggg==")}.bk-root .bk-tool-icon-crosshair{background-image:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAADEUlEQVRYR81XXVIaQRCeHqug8CXmBNETaE4gniDwIgpVspxAbxC9ATkBkCpQ8gKeQDiB5AQxNyAvUlrldr7eHxyGXZi1rMJ5opbp7m++7un+htSGF204vsoMoNXrlzSpfWa1oxQfhAegCZGaEtPorHo8znIoJwCt6+td8uk7ApUQCIHTF4BNAWzImq8ap6cP68CsBdDp9i9ZqXM7ML79g/EnCWD+jgMKENKqWT+tXK0CkQqgNRjs0OxpQIqKhoMxaG6/6JeRnK7T6yO2UvVqhYSlLX+ryORfgKn9ORDFIy7ky41yGcwsr0QAQfDH5zucOswx819fs4egI9OFCcD8DjBF7VNbEX0JzdWEt3NHSSASAcCxBDqMgt/623kvyTgNgNjJIfTjk4D4FqaJR1715MjmYAmA5Bx3AwUXQL+t105KaTlcBSC26XRvhjEIoLiq1yqXpr8FAGG16/ug4IT27fxBWu7EiQuAiImJpEMKE6nYM30uAIDDttSUOPfJP7JzbjPhAiBIh9QE67vIvoOi9WJfCwDavf40ulpjbCqmUf+W753ezURuh7Dg1SqflwAEHU6pgfyBq9Y4qx0LG++2fnZ/eUzcstmdM2AWH+jfc+liWdBJfSENf8Lifi3GVwC9mybOfi5dzatWVrbbLIHNva8p5h/16gkaFiLGGxbufkoE6XguwePiXLF3XmMfCUCUAqtKXU7sumd1CowOuJEi3Pg1FBpjitIGhyvVSfvmjci6ZR+rFQfDiPVE2jFYeICQ+PoewwjC5h7CZld6DBdyu6nDSKgzOyIMhmhK5TTqXYbRorZYM46TmpKAAOrGWwSJJekSB1yqJNOzp1Gs7YJ0EDeySDIMtJbQHh6Kf/uFfNFZkolJICRmz0P8DKWZuIG2g1hpok+Mk0Qphs0h9lzMtWRoNvYLuVImUWrmPJDlBKeRBDfATGOpHkhw670QSHWGLLckmF1PTsMlYqMJpyUbiO0weiMMceqLVTcotnMCYAYJJbcuQrVgZFP0NOOJYpr62pf3AmrHfWUG4O7abefGAfwH7EXSMJafOlYAAAAASUVORK5CYII=")}.bk-root .bk-tool-icon-lasso-select{background-image:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAB3RJTUUH4gEMEgwlGP1qdAAABMBJREFUWMO9V1uIVVUY/r61z57ZMx4DnbzgkbQXL5iCJphlWdpIGY4jpFBkEiU9ZNaDRRcITcIwMwgxoQtU2IMXdAZfMjFvpERXYiSbysyBEXFmyuHMnLP32uvrwT2xnY5nxvHQ93Jg7fWv71/r//7L4a59TRgqJk+Z6v3a+sv0OI5nk5wu6VaSVZImAThHsgjgrKTvM5nMUWvtmf5n8HodCIKgOgzDhc65pSTrJQWDsSNpJX1ljHnDOfdT37oZLLHv+8OMMasKhcIJ59xHAJYMlhwAJGUAzJfUTHLFuFzOG5QDU6dNMyQfs9Yedc5tBpAD4IYYNQGoBrDtQnt7/b0LFrJsCHzfn2itfQfAnZLiazytA3AaQAuAiwDaEgeNpGkkswAWSBqRONB38b88z5uTKePt6iiKXkk8jq+iJC5LOmiMaTLGHLPWhmWeHr7vV0dRtATAapAzIVmSo51zyzIlbm2stesFPA6pKk0r6Ryg93y/ek8YFvPOOTg3cDSiKCoC2OP7/rEoirYm4rUkF12lAWNM1lr7lqQn0+QA8gI2jBg5cj6Aj8OwmB+KAKIoukhyp6SRJAUgl0ndPLDWPi9pJQCbuviXvu+/GIZhW1dnJ24UJFuTjCCA2ADA8sYGWmsXS3qmL94kDYAtkh4Nw7ANlQJ5U6INT1KrAYC9zQdykl7nFSj5fXp5Y8NWVBhy7mUAjqShMYdMXV2dJ2klyRwAJ8lIeuGWCRMP7N7frEqSG2OmAFhKshNAp5wrmO7u7jEAngPQm1S2z2pqapr+OPt7XEly0oxwzq2RdFmSD2AMgKKJouhhAL4kA+Cs53l7e3t7uytJHgRBreTWkXwkKVJnJD0B4GAGwIJE9R6AFufc6UqSZ7PZbD6ff5dkA4CQZEHSqwAOISmXtwGIE+F1SeqqIP8d+Xz+C0mLJYWSAODteXffczjdDQNJ0BWMCoLg5gqIbRTJNwHsljQhUb0luWPM2LE7Thw/9m/5NCT/TByxAOYWi8X6/gdWV1dnfN8fNRBxJpMZTXKdc+6IpFVJWAEgkvSJpA0X2tvtVTaSjgOYBCAEEADYSHK87/sfhmEYA9gShuEDkgzJHyWtB/B1irQ2juP7ADxkrX0wOUOpzmdpzEY590HJ7Ni1r2kSyZOSiv2+hSRjSTXp/QAukzySNJOJkmalyNIl10hqMcasdc61XDNcQRD8BnITgNp+36r6kfcNFMMlLQGwTNLMEuQGQBfJl2bdPru+HDkAZAqFQux53jZHEsC6aw0eg2gylNRBcqcx5v04ji999+03AwsWAOI4Lsy9a94WkisAnE5a5WCJYwCfA1g7LJudI2lTHMeXBm1faiQzxkyRtF3S5CTupeAB+KG2tnZFT0/P30NO2VKLzrmfAbwGMipjG5Oc0dPTc0Md05SZ5U4Q2FxChErtEYD7jTGNQ3UgM8Asv90Yc9I5LSKRlXSI5CxJa0jWSALJjKRnAewfkniT+vwf7N7fXHK9rq7O7+jo+BTA/NRrdBpjnnLOnUrvXd7YMPQXSBunneno6IhIHgYwW1JtkgmBpBkATlVMAwOk3nFJ+VSoqgCMr6gIy2FcLtdKspAedyQN/98caDt/3kpyabUmf8WvG/8A1vODTBVE/0MAAAAASUVORK5CYII=")}.bk-root .bk-tool-icon-pan{background-image:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAB3RJTUUH4gEMEg4lKssI9gAAAOtJREFUWMPVll0KwyAMgNPgoc0JzDX2Mtgp3csKErSamGabIEUo/T6bHz0ezxdsjPJ5kvUDaROem7VJAp3gufkbtwtI+JYEOsHNEugIN0mgM1wtsVoF1MnyKtZHZBW4DVxoMh6jaAW0MTfnBAbALyUwCD6UwEB4VyJN4FXx4aqUAACgFLjzrsRP9AECAP4Cm88QtJeJrGivdeNdPpko+j1H7XzUB+6WYHmo4eDk4wj41XFMEfBZGXpK0F/eB+QhVcXslVo7i6eANjF5NYSojCN7wi05MJNgbfKiMaPZA75TBVKCrWWbnGrb3DPePZ9Bcbe/QecAAAAASUVORK5CYII=")}.bk-root .bk-tool-icon-xpan{background-image:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAB3RJTUUH4gEMEg4X4hxZdgAAAMpJREFUWMPtlsEKwjAMhr/pwOOedINJe/PobWXCfAIvgo/nA4heOiilZQqN2yE5lpD/I38SWt3uD9aMHSuHAiiAAmwaYCqoM/0KMABtQYDW11wEaHyiEei28bWb8LGOkk5C4iEEgE11YBQWDyHGuAMD0CeS30IQPfACbC3o+Vd2bOIOWMCtoO1mC+ap3CfmoCokFs/SZd6E0ILjnzrhvFbyEJ2FIZzXyB6iZ3AkjITn8WOdSbbAoaD4NSW+tIZdQYBOPyQKoAAKkIsPv0se4A/1UC0AAAAASUVORK5CYII=")}.bk-root .bk-tool-icon-ypan{background-image:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAB3RJTUUH4gEMEg4anK0lywAAAMVJREFUWMPtlzEKwzAMRX/S7rlpIMXeOnaLaME36FLo8XqCdNFghGljyc4kgQi2Q/SUj0F/eL7eMMTKz6j9wNlYPGRrFcSoLH4XxQPvdQeYuPOlcLbw2dRTgqvoXEaolWM0aP4LYm0NkHYWzyFSSwlmzjw2sR6OvAXNwgEcwAEcwAEcwAEcoGYk20SiMCHlmVoCzACoojEqjHBmCeJOCOo1lgPA7Q8E8TvdjMmHuzsV3NFD4w+1t+Ai/gTx3qHuOFqdMQB8ASMwJX0IEHOeAAAAAElFTkSuQmCC")}.bk-root .bk-tool-icon-range{background-image:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAXNSR0IArs4c6QAAAAlwSFlzAAALEwAACxMBAJqcGAAABCJpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IlhNUCBDb3JlIDUuNC4wIj4KICAgPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4KICAgICAgPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIKICAgICAgICAgICAgeG1sbnM6dGlmZj0iaHR0cDovL25zLmFkb2JlLmNvbS90aWZmLzEuMC8iCiAgICAgICAgICAgIHhtbG5zOmV4aWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20vZXhpZi8xLjAvIgogICAgICAgICAgICB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iCiAgICAgICAgICAgIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyI+CiAgICAgICAgIDx0aWZmOlJlc29sdXRpb25Vbml0PjI8L3RpZmY6UmVzb2x1dGlvblVuaXQ+CiAgICAgICAgIDx0aWZmOkNvbXByZXNzaW9uPjU8L3RpZmY6Q29tcHJlc3Npb24+CiAgICAgICAgIDx0aWZmOlhSZXNvbHV0aW9uPjcyPC90aWZmOlhSZXNvbHV0aW9uPgogICAgICAgICA8dGlmZjpPcmllbnRhdGlvbj4xPC90aWZmOk9yaWVudGF0aW9uPgogICAgICAgICA8dGlmZjpZUmVzb2x1dGlvbj43MjwvdGlmZjpZUmVzb2x1dGlvbj4KICAgICAgICAgPGV4aWY6UGl4ZWxYRGltZW5zaW9uPjMyPC9leGlmOlBpeGVsWERpbWVuc2lvbj4KICAgICAgICAgPGV4aWY6Q29sb3JTcGFjZT4xPC9leGlmOkNvbG9yU3BhY2U+CiAgICAgICAgIDxleGlmOlBpeGVsWURpbWVuc2lvbj4zMjwvZXhpZjpQaXhlbFlEaW1lbnNpb24+CiAgICAgICAgIDxkYzpzdWJqZWN0PgogICAgICAgICAgICA8cmRmOkJhZy8+CiAgICAgICAgIDwvZGM6c3ViamVjdD4KICAgICAgICAgPHhtcDpNb2RpZnlEYXRlPjIwMTgtMDQtMjhUMTQ6MDQ6NDk8L3htcDpNb2RpZnlEYXRlPgogICAgICAgICA8eG1wOkNyZWF0b3JUb29sPlBpeGVsbWF0b3IgMy43PC94bXA6Q3JlYXRvclRvb2w+CiAgICAgIDwvcmRmOkRlc2NyaXB0aW9uPgogICA8L3JkZjpSREY+CjwveDp4bXBtZXRhPgrsrWBhAAAD60lEQVRYCcVWv2scRxSemZ097SHbSeWkcYwwclDhzr1Q5T6QE1LghP6BGNIYJGRWNlaZItiFK1mr+JAu4HQu0kjpU8sgF3ITAsaFg0hOvt2Zyfvmdsa7a610Unx44Zgf773vvfneezPHNzrbhn3CT3xC3wPXYOC8LDzqdi8YY/gwh4BeknS/2th6dr2kf94AOp3OFyWgMyziOPbMDxV9FTtJnl1ut795Xd0/YQ0/vtYQwMT1KXWCfr2IjOWwtNehwN4xL9ykTrm6Pzl58yLn3J+mKh9mXbT3uRjGEDph+O8/TjfP5dBp7Ha7AX7O3o5nZeD/0E/OGyXntDgzA0X6qmCnrVutVlrUWV9f/3xo+pwhGDhvEPHOjoxnZjJggXmMHzBQ7NGNp9vxk61fr0HR7e/u7pZzCGHlc7qwBYYTT7tJYSx1AQzppyFPft5apta9w7SKcn0b7P7+/jCsDQ5mbc0dCmIJGDN0ehdcjsmkm6A6KUeKFOTE11PLxrC7Ukqh3ylL2fT0NAP9q6ur6rRCJJYsbKB0JsbCKMuy+xREePDyxQPCz+Crlw062QcA5wBOOt1l6vIl2WiI9F1fN6Q+BBqit6hEC4Hk08GQJMn4myjSP7RavVxgdaVUh/3U6HCMsPr9pYnJKRziHtWQ+un58+hGs6nsjQSjpuTyKGN3CX+FBwHXSiEVgjP+O8X6N12kIePES+GzTKAkGbNp8yJsGUMVzz8jPKReiyAQRimy5/cjye5RpF8utFp/+nwmT7d/NMzcFkS7yjJNGDaPURQxIQThEQy0SyF4l5WJYYhBa816vZ6dU7A6CAhbZVow/pDe0O9hVOoCi13r4BgBAvJHqMSQL2vE/iH6IAXEwgrRVUmBoRRwnwJQT98xEeVeSUyB4dJ5nwJBKdCFFGRmUCcu7rwIYypCTblaChuNBhWODrman5ub+4v0rMNBt8z6Ezh7GksJQpCbm79cMQE7QBFm/X6f0rjWnv8WRYg/QdbUpwDAEBy8vPyA8rNGzg3a8MiElwiM7dAtRqNoNptjGPM1laVxP9umWEMGLOKhKUOJDtBwDmzsw9fC/CzHr9SGuCTi2LbbKvVtmqXpCjMihBFa79Wrt5fGx9PDzc3fmu32Lf8qFliwU9emKhBSp+kRKn/hu9k1COEDbFdt/BoKWOAkuEbdVYyoIXv8+I/QK9dMHEb1Knb7MHOv8LFFOsjzCVHWOD7Ltn+MXCRF4729vWMDK+p8rLkvwjLg4N4v741m5YuwCI9CvHp1Ha8gFdBoPnQAkGsYYGxxcfEI7QQlFCTGUXwjAz4tWF+EpymOWu7fglE7qsOvrYE6g4+9/x/vhRbMdLOCFgAAAABJRU5ErkJggg==")}.bk-root .bk-tool-icon-polygon-select{background-image:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAB3RJTUUH4gEMEjc1OfiVKAAAAe1JREFUWMPt1r9rU1EUB/DPK0XbqphFHETo4OCiFhwF0V1KHbRSROLqon+AUMVRRFBwEbRFMBiV+mMW/wIxi5OD1kERRVKRJHUwLvfBTZrU5OWBGXLgQu7Jfe98z/ec7z0vKa88b2q1BDtRHdAPBaylm1NzsxsOjPnPNt6WSWprbft+/c3I3zOAjhT1Y4+fvcjEQJIXnVECSa+AhqIHqlHH5lWCZoe+Gk4GRgDG86j9SAUdlDBSQaZhlOkuHyoVdJmsw98D1S5fM4NYM1LCpqM+Lwa240oLgmZzpVZvzKT75VLZcqksSZKWlQeAy/iORVwIvh31xvotvK7VG3Px4aWHj3Jl4C2uYSvq+Bn8v6LLbaVWb9zsBiKLCvbiNG7gLm7jAYqbPHMJMziZ9lsKoh8GtqCEVVzHftwJn+TFHp4/hg8BSCYVfMOZoPEv2NZGdy9WCGUr9toDR3E2/H4V6nwRe/BmgN65H1ZhvMuB3XiKIyFoGefwO6ysVkUlrNUNsyAK/jli533Q+Y8cJFvAeXyMS1CI/jiMr/gUtD2LQwMGr4R3p7bY3oQHQ5b38CT4D2AXXg6YcQXHpyYnlqKsi5iOAVSwL9zd7zJ09r+Cpwq72omFMazjT9Dnibym0dTkRDUKrrgwH7MwXVyYB38BstaGDfLUTsgAAAAASUVORK5CYII=")}.bk-root .bk-tool-icon-redo{background-image:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAB3RJTUUH4gEMEg4itK+dVQAAAaFJREFUWMPt1L1rFFEUBfDfJDaBBSslIFjbaSFp1FJQFMVCHkzhKIqdUYOCoBgErVz8rCwiTDMwBCIKipDWyip/gxAIWAmBgBC0eYFh2Gx2l9lFcA5M8e59782Zc84dWrT435Hs1siLchqn43MS0zgW22vYxjesYjVLw3YjBPKinMUTBOwf8J5fKLGYpWFjJAJ5Uc7gIW6jM6Kim3iNZ1katgYmEL/6I+YasvY7Lg6iRpIX5VF8wuEe/XV8wGf8jN6LWTiAc7iEQ7ucPZ+lYW0vAtfwvlbfwCKW9gpXDOv1mJvZHiSO91MiyYsyiQSuxtpXXM7SsDmM5nlRdrCMMz3sOJWl4Xevc/vwBzdwAl+yNNwZxfRI+GxelK9ikHcwh8d4NNR/YFRES1ZwoTYdR7I0rNf3TzVNIGbmSvR/Bx08mIgCFSVu4l2ltIWD9WxNGR+W8KOynqnZ0rwCeVG+wa0hjrxtWoF5dAfc28V8Mib/n+Nev5dnabg/zgw87aNEN/bHOwVRiRe4Wym9zNKwMKkpgIWKEt24njxiJlq0aPFv4i9ZWXMSPPhE/QAAAABJRU5ErkJggg==")}.bk-root .bk-tool-icon-reset{background-image:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAB3RJTUUH4gEMEg4gWqH8eQAABLdJREFUWMPtlktsVGUUx3/nfvfOlLQaY2IiRRMQIRpI0PjamJhoVASDvNpCpYw1vJQYSVwZwIVQF6wwRHmkAUof9ElrI6VqDAXcID4TF0IiYQMkSlTokNCZ+b7jove2t+NMH7rQBWd3v+989/zP+Z8X3Jb/WGQySvUNTQBJESkNguAVYIWqzhaRhwBU9WcR+QXoymazn6jqzUQiMQSQzWZRVdal1vwzAI2tHQBPOuc2AbWTdOyQ53n7nHNfRwee51GzqoIQMCLDpr3x/tLQ0oZzrk5Vj0/BOEBt+KYuOlBVGlrahr0Wob27t3gEjnZ2AyQzmUwHsDgP6J/AYRE553neDwDOuUdU9QngNeCumK4TkRMhZUORcYC1qysLA6iuSQHIwkWLD6lqapQsuSmwTVV3h99I7EcAR462A2xR2Ilq6ehTaejvO1774kuLNALR33eclsaGsQDe3fYegHl43vyNwEeqGl1963mm2jl7YZRTQ82qlWP4HM6ZToC5ztkW4LHQoALru7s6Di5dvlIj/e6ujrEAWoZDn8hmMjXATMACGaAVuBjXTVVXFc/AxhaA+4zvn1DV+eHxVWPMAmvtb5GeMWZyZVhI2rt7qVy2pOh9U1snwIPW2vMi4oWJuBPYHkVAVScPoKmtkzVVK6cEMsyJraHhiCqJqJUwj/JRz7TW1iSSyR2rVyylqa0Ta+24Ic8vXaAEmDFc/l5Z2A/80OibuVyuz/f9ElUdHCmvw82t5HK5h6y1PYhsz2YyGw43t2KtBZHIGwB6+j4rCkBVUdV7gXrggnPuu8h4eP+xMeZS2D0rJYZ6AdAMzAt1b4nI26p6IFZOY8pugijcKSIHVLUK0LyST4vnrVfnWr3mjmP4QTATaERkXkypRFX3isjmuHdRJEK6Ckqquopp06bdKCkp2Sgi7XnGLcg7gzeutwNIiPYc8HixqIrIOlU9ONVIhHPEd851icgSVXUiskVV94gIqoonIt0i8gfQCfwae38e6BWRXuBZz5jZ8VbaOE4EIqlZVUEQBLlkMplS1QER2RwkEnsSyaREDUzyeNsvIhvCMqkH1kdIJ2o+k8iJB1LVVRfjZ6nqqlEAIbdVQGto8Lrv+/dbawcjAL7vc+6bs+zetetfLSHxniIFGofGGsU2oC7eOCbDfZ7nQawBOSAX74SF9oEPImOq+r7nmVmxb5raukZa8UReGmNmhbMkAwwBH467EYVZe49z7kdgenj8k7V2oTHm8kgdWcvrNdVFjR8cHkYzjDH9wLjDaEwEzpwa4MypgWvAjtjxfGNMj4jMiT+M+kFsZI/Q6Pv+HGNMT8w4wI7TAyevxXVPD5z8+zD64tRXAMHVK1eaVLUyVvuDqroV2BOnJF4ZIedviUidqt4Re9s+vbx8zZXLl7PR2+nl5Tz/zNOFp2FzxzGAklw22wUsLLaSKXwf8vhosZUM6PeDYEUum70VHfpBwKsVyyfeikOP6oBNwN1TrLbfgX3A1kKLzKeff8nLLzw38T5wZDgxn1LnNk5lLRfP26/OnR2hwfNYW2Atn9RCsrf+EECyrKysDFimqhXhyjY3VLkAXBKRDqA7nU6nS0tLhyIj6XSaN9bVclv+l/IXAmkwvZc+jNUAAAAASUVORK5CYII=")}.bk-root .bk-tool-icon-save{background-image:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAB3RJTUUH4gEMEg4UexUIzAAAAIRJREFUWMNjXLhs5X+GAQRMDAMMWJDYjGhyf7CoIQf8x2H+f0KGM9M7BBio5FNcITo408CoA0YdQM1cwEhtB/ylgqMkCJmFLwrOQguj/xTg50hmkeyARAYGhlNUCIXjDAwM0eREwTUGBgbz0Ww46oBRB4w6YNQBow4YdcCIahP+H5EhAAAH2R8hH3Rg0QAAAABJRU5ErkJggg==")}.bk-root .bk-tool-icon-tap-select{background-image:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA2hpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMC1jMDYxIDY0LjE0MDk0OSwgMjAxMC8xMi8wNy0xMDo1NzowMSAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDo3NzIwRUFGMDYyMjE2ODExOTdBNUNBNjVEQTY5OTRDRSIgeG1wTU06RG9jdW1lbnRJRD0ieG1wLmRpZDpCOTJBQzE0RDQ0RDUxMUU0QTE0ODk2NTE1M0M0MkZENCIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDpCOTJBQzE0QzQ0RDUxMUU0QTE0ODk2NTE1M0M0MkZENCIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgQ1M1LjEgTWFjaW50b3NoIj4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6OTQ0QzIwMUM1RjIxNjgxMUE3QkFFMzhGRjc2NTI3MjgiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6NzcyMEVBRjA2MjIxNjgxMTk3QTVDQTY1REE2OTk0Q0UiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz6eYZ88AAADLklEQVR42rSXf2TUYRzHv7tuGcfE6Vwb5zLSSjEj7Y9KWqfEmFZJP+yPMdKKmUrrn0iUfjhWlLFi6YfNrF+StBoTo39iYkTGco4xxxG59P7k/T2PT8/37nu3bx9ezvPj+zyf5/PreS78bGLS8SmrwE6yje3NHJsDBTALpknBz6JhH3NiYAB0gHqPOVv52wJ6QQ48BzdAttTioRJjdeA8mAHHS2xuk3p+M8M16ipVQE49Ds6CiFO9RLjGONf05QLx6wPQaBlbBlPgJVgkP0ETiIJ2sB/E1XfimjfgBOOlKDUqCGOcqBcQnw6BYW5YTo4wbvQhMmCfGRemC2rBiGXzWUb+kM/NRZ6CHWBM9ce5R61NgX6ayhSJ5EPlItlDRNkz4JbFHf06BkSzHjXxM+gDv1S/mPUo2AXWgt9UUHL/IVhS8yUV1/EbV3o4N+NaoE9Fu/i827K5pNYHnqAVJECShWmAaddpscYFFXwR7vnXBRGlnUN/L6kqKJlxnRUuDbaDBiL+vst5d4gpcpBrqk/2jIgCKVUolhntplzivHmwh4stGOPfwBWwl/2dpp8p7xjQZqFLiQJtauKkivYm+kzccpK57yXfOUe+P23JqAnVbhMFmlXntCWnxbT31am9ZJ4BJifsUmNTqt0cYhA5ypympPg7VkEKunPbVb8cIG+0kyHLJZNR7fUMooUKFHAPkfQo58VLK+RzwRDd4FdWG9mjpaAXzqkJa1R7kQttqEABWXMjOOxxVRfnhRm5URX1prk/0pQHwNcKlchZ+jdpC+hFdVqO0my9Hj5dkYgCn1Rfh/KdlNDHrJhPqlDih+IfBd6qwpOgEqYMsorJ2HtWxtagLJDn/W3KRfPOZhoeBJfZPgVeGKeKrkQBh5dLXl25Ny3pc4/1fkTdbvFqFQgbxWeYD0hXulhQ0pYiM1jG547fcbMQpVnHTZEn9W3ljsCzwHxCdVteNHIZvQa7/7cC7nV6zHIfyFP9EXjFa7YxKAVqPP4bxhhoLWW+z9JyCb6M/MREg59/RlmmXbmneIybB+YC/ay+yrffqEddDzwGvKxxDmzhc0tc80XVgblqFfgjwAAPubcGjAOl1wAAAABJRU5ErkJggg==")}.bk-root .bk-tool-icon-undo{background-image:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAB3RJTUUH4gEMEg4em8Dh0gAAAatJREFUWMPt1rFrFFEQBvDfGhACASshkL/ALpWVrSAKEQV5sIULWlgZNSgIFkGIVQ412gkBt1lYLERREFJqJRaW1oHAoZUQsDqwecWy7N3tbe6C4H2wxc682Zn3zTfvLXPM8b8j6RqYF+UCzsfnHBawGt3fMcAX7GEvS8NgKgXkRbmMxwg41TLsN0psZmnodyogL8pFPMIdLHUk7hA7eJKl4U/rAuKu3+HslFr/FZezNPSTFslX8QErDe4DvMVH/Iq9F7VwGpdwZUjsPtaSFjv/1vCBPjaxO0xcNbHejLpZrrlvJCMCT+JzA+2fcC1Lw+GE4l3CG1yIptfjCtiKoqtiJ0vD3aM0Py/K57iIMxgkQxat4EdN7e9xdRzlk+LEEPvDWvIDXJ928sYxjL36icWK+VaWhlezOIqbGFirJd/H7szugrwoX+D2BDEvszSsT5OBdfRaru/F9dPXQF6U27g/KnmWhgctxqyzBrZGMNGL/rHI0nDkKXiKexXTsywNGx0OnFbFNk3BRoWJXnw//j+ivCi32/S8CxPVNiWOAdUiJtXITIqYY45/Cn8B2D97FYW2H+IAAAAASUVORK5CYII=")}.bk-root .bk-tool-icon-wheel-pan{background-image:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAB3RJTUUH4gEMEgswOmEYWAAABddJREFUWMO9l09oXNcVxn/n3vc0fzRjj2RHyIZ6ERuy6CarxJtS0pQSCsXNpqGFWK5tTHAwyqIGN7VdEts1LV04BEoxdlJnUbfNogtDCYWQRZOSxtAUCoFiJY0pWJVUjeTKM9LMe+9+Xcyb8ZMychuofeHCffeee7/vnXvOuefYlV/+mv932//tb91z/Y2rvxmMHQ+4FcEfOIGN4A+UwDDwoQScc7vM7AIwB8yZ2QXn3K77Ab6OgJnVgeOSbkqaBiaACUnTkm4Cx3OZzwf+qzcRQup1zNZ9RwDe+0YI4YKZTUn6zCGSMLOfAF/03r+QZdnyfwO+ePEiI6N1nPMgMDMkETLRbd2mXG8gCbd9YiIKIUxLKoLfBN7I+80+CUlTIYTp7RMT0b3Af37p8kh5y9gZcy4Fzt+5szqSaxkzUR7dwtrKMmaGW242d0t6vrD/He/90865o865o977p4F3Ctp4frnZ3L0Z+OryUrVSrZ0z8ZxhHjhcq1XPrS43q/0flDlK9XpPA2ma7gMeyvfPx3H8TJZlH4YQWiGEVpZlH8Zx/Awwn8s8lKbpvmq1ahvB641SXNk6dhLskNA2MIBtwKHK1vGTW8bKMRbAMgyPqWeETxUM8VSSJAv52JmZA0iSZMHMThWwnipXKp8hsLLcSaIR92oU8xjSayCQXotiHotG3Ku3m+0EOQwPQCDggMf7BzQajSs5eAk4B5zLx4O1vD2eJMmAQKliscgASJMw21pansFs1swQ/DNLmUmTMNuXX+taXHTDaj5OW612R1JZ0nFJJ/J+XFJ5aWmpA6S5bHV8fHsPHFU6q3pJCjtFxtrKMuXRLUUXXxdrRLazFOtUolZlsGhmACsgnHPTwJnCnjP5HMBKLotzxsTE9rgDL0t6LoriKsDIaB31ZEK+JxQJRHFUBR2NqLw8OTkZR0OC0ntm9k1JWU7OA4vD/mZ+YfElsANmNEKi75vztzB5M8uAr+bx48me88g757PQ1U5zNg52YH7hX8l6f+4Fi3c3BqHNmkI4YQOV2MGCNu9qHPYCewfzbrC+XSGcWEcgTRKA3wFfyzdDz5d+D3x9CIcfA4eBbQS9LscskgfLnHNPAnslvS/pbZDHLLPADpx9N9fqpSIBH8cxWZY9m6bpb4Ev5fN/iKLo2TRNgdx/eo8Wk5O7Ts/N/SOSdMjHdj4kmgkIEJLJzPZKetvMTkIvFLsR25Ml2gfuF5M7vnA66sdooJYkCSGERe/9VAjhzRxoKk3Tvg3U8nulVqvx8cyNpER2umM+SdOkbc5B8JhpqBdIgTRR24h+lpKen731aRIN7thscH9Zlv0d2F8YD2TIX7F2uw3A7ZWV1a0TYz9ca8cJZHRbuRuaDfUCw9/qJHamPOKToAwHtHN6lMvlSkH2o7wDMDo6WuGuQbbn5+YAKNcb3J5fSvrhtTY+vsOPuD1IOyRhMOkj9kSx29HfXB5RUnS964NT2+3vbGbxG9auO2cDNuV6A8NTb5TitBuOpQkfYD2vwOxgmvBB2g3Hto5X42EJyVsFlztbKpXGNgqVSqUxSWcLU2+tdToa9hasLjfPYlwGa+bTi8Dl1dvNsyvNtQQL9MO2w+HM7BqwlAtPdrvdq9773WAVsIr3fne3270KTOYyS2Z2bbXdHhogKmPj7YWF+VOSXs/v/9KdO+0fVBrjbRkgB/KIDBnYu9f/7D+ZmfmRxPd6qwB8YmZXcq1MAQ/nJhTM+OnDe/a8+PGNG9lm19V/D1Qw7HXZlcRa69+U6w38l5/4ipxzf5X0CPBILjcGPJH34pVcc8692FxcXLlXRnTwwH7+9P4f8aWe3fY59LIqo1NMyQBCCHNmdgx4BegUWefjDvCKmR0LIcz9L8nokSNH+PRvH4HC3YQ098pSbevg24qlmZmNmtmjkg4D3+j/tZldkvQXSa3PW5ptlpL3ZaIN99OS9F7+IgKUgSyEkNyv2nHT7DZX0dr9rpjua2l2r4rogRAYVqZvnPsPqVnpEXjEaB4AAAAASUVORK5CYII=")}.bk-root .bk-tool-icon-wheel-zoom{background-image:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAB3RJTUUH4gEMEgskILvMJQAABTtJREFUWMPdl1+MXVUVxn/fPvf2zrSFmUKnoBCUdjRoVaIxEpO2JhilMYBCtBQS2hejpg1Uo2NUrIFAoyGmtiE+GHwQGtvQJhqDmKYRBv+URFsFDNCSptH60DJTO3dKnX/33rM/H7rvsDu9M20fDMaVnGTvtb69z7fWXmvtc/TEzqd4OyXwNsv/FwFJQVI/sA14SZKRLOlPkr5TrVYXHz70quYkEEK4TtI2YAgYkrQthHDdhV5uuw+43/ZrwCbgRttgY/tjtrc0m83X3/f+D6ydnJhYcB4BSZcBA7aP2d4ELAGW2N5k+xgwkDB0IH19CGGH7R8B1aQeAf4KvAw0ku4K2zu7uru3ApdPEyiKohd4TNKjtjt5h6RHgccSNrddbvuHtm9Jqoak7xVF8WFgdavV+pSk5cCObNmXgK++85prCj3z28HKqZMnH7D9YAY4BvwujT8BvCuL1INX9vVt+dfwcCvNb7f9q2RuSfrGvWu/sL2Nf3LX7pzvj4ENSGBPVarVd4fRkZFltjdmoMGiKO4IIWwIIWwoiuIOYDDzeOPoyMiyFLkum7WJCMDztrcrTTrIRuAQZ6NcK1utL4dWq/VZoC8BhqvV6l1lWb4YYxyLMY6VZflitVq9CxhOmL60hhCKeYiV7WMKIXw9jT1HpXw3c+bOAKzOjJubzebJrKQCQLPZPClpc7bP6rMYKtjXth2OMf7tIkr11Wz8oQDc1Fb09vY+kQw1YAuwJY2nbUluAnCWpKkaFl6IQIzxivaR2SYA89sJVK/Xp2x32R6w/a30DNjuqtfrU0ArYecDCEqgLqm94T0dEm9mBG7PxkdDlkBnkhebgIezNQ8nHcCZPL9ijE1Jf/bZZoPtzbavmqNZLbf9tSxq+yoduuJ+SZ+zXSZyBXCqU+d8fvC5yRUrV+0G2j3g2hDCLyXd/+Su3QdnvP/zCuH72LWsgf2k0oHlH2c2odlkxcpVEdgr6aDtjyb8x20/J+mA7T9I6rL9SWA5dne2/GdXLl58qNJh398An85yTMA+4DOz8Dgu6Zu2dwJXJ91ltm8Gbp7Fgb+EEB4aHhpq5CEtACqVyr3AC0AlPS8k3TSmQ2YPhhBuS/1/LpmS9JTtNTHGfwBU2uUALARotVqniqJYH2Pck85pfavVaufAwnQvnHc0McaDKVptebN94QAnJB0EdtjekydyZXqjs/0ZgLIs/w6sy8bnYGYJ63pgERKC05JutT1kOwITwL9tvzlzUQUYB+Zjs2DBgu6xsbGJZHstByZbezregcBXeCsEz1bnzXt5anLyzLq71zDLxTRdVgemdx0fv2e2w5thO5DbiqL4oKT3ZKpnpyYnz+SY2ZpTAPZmJfdIrVZbNBNUq9UW2X4kU+2dcf53Aj1pj2PA7y/6m1DS00A9za9uNBq7iqJYBuoGdRdFsazRaOzKSqye1rTbaa/tlbYrqXQP2X4FIA9/J1l39xrC0v7+w5IeB8XkwS1lWe6TGJAYKMty31tfO4qSHl/a3384I3CDpI+kzC4lnRfrue6GytEjR8oQwlY73gC0L4qlth/q0M1/LYWtR48cKQF6enrC6dOnVwGLEpnxnp7en4+O1i/tszzGOCTpPmB7ahb57QUwBWyXdF+McWg6MScmuoA8OX8xOlpvXGz422XYTsB/SnpA0h7bX5R0WzI9HUL4qe2XbI+dk3xl+V7gxoztD5jRI+YK/zkEEokx2/uB/RdzIfUtueqVN04cXwF8G3iHY3z9Urw/j8ClyhsnjrcS2Vv/J/8NLxT+/zqBTkcxU/cfEkyEAu3kmjAAAAAASUVORK5CYII=")}.bk-root .bk-tool-icon-box-edit{background-image:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAB3RJTUUH4gEMEg4QfHjM1QAAAGRJREFUWMNjXLhsJcNAAiaGAQYsDAwM/+lsJ+OgCwGsLqMB+D8o08CoA0YdMOqAUQewDFQdMBoFIyoN/B/U7YFRB7DQIc7xyo9GwbBMA4xDqhxgISH1klXbDYk0QOseEeOgDgEAIS0JQleje6IAAAAASUVORK5CYII=")}.bk-root .bk-tool-icon-freehand-draw{background-image:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAADTElEQVRYCeWWTWwMYRjH/88721X1lZJIGxJxcEE4OOiBgzjXWh8TJKR76kWacOBGxdEJIdk4VChZI/phidRBHMRRIr7DSUiaSCRFRM3u88gz+o7Z6bBTdjmYZPf9eJ55fv/5zzvvDPC/H9QsA66Olo9Ga+/MdR+Ljm2/KQIULsz9FqItGdOfJKLhApLgVkiSCGODjWit7QpKWy+TNrFeXvzKVUT8NiTVaIgDcbiCFJ7GiT8WkARXAdYBK0Lbhi/CenArRNskuM7/tgNp4ArQ42dwjf3WY5gWTqC7O/NbNn2Xkfw/YwdSw/We14HP2IEZwX+y9cZ9SH0LmgFP7UCz4KkENBNeV0Cz4b8U8DfgKiDxMWwUXETqLvJpCQpXZfawbzS7t9v5pL19cHBwfja7YA0y/lyCM0+E5hv5+piZXwKYcF23as+37bTXsQVqgkL0p/34fHR7DcBtbetFsBmGDwMOJCggYG55yw7dMlk6DuC1Bdu2RsCU9TYWQq2IoGbsreZ5NzvEqfSBsIsIy8OTbcdgiRHeh4o8AFAEwDakbY2AaCCpH7V9aGhoUUUy3UyVbkPYFuYLDlUZH8XBpwxkK0Dbgxg5HcVi0ent7a0RULMIozaHBSMfF9b2SzdutFcFB2FkwMIJOG6qfteXOa1nHZ48tyefuwyfT9s6wtzZ3t7eZse2DR2I228TtHXzuWCx9g8MtK5cuHCZTH4tiHEOa4xFngvTyS8f35d6enomiCi4/foEXBkZaQuukChL4FYA2Whd7YcC4gEdW3CpdL3LtGAVCVYJywEyTpAuJKeMOKXZs/Bw947C50KhUFOG4cwz35cjWNBlHGeD53n3xsfHP/T19U1qciggar8Fa4I3PHobIotBWBtc2hSiChyZxVzM53Pv7FVH6Tp3uVy+g0r1ImD2GjIrQGYIxjnfuXTZGICS5k/bBwJoubwEFX4TLah9EXomJGMA3za+f9913Yl4TnzsDQ+vE6YTZOjHh4ngibstt1pzQwd04F0bPStEBpXqRoBeQ/AKghfBnOEKgS+Q7z91Xfdz/HGKg8Ox7z8iYD9z6wqTkZFgnvhMGP9VZ2or1XVkPM9z0mytSfVsHa1RLBZbLoyNzUnK+ydz3wC6I9x+lwbngwAAAABJRU5ErkJggg==")}.bk-root .bk-tool-icon-poly-draw{background-image:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAB3RJTUUH4gEMEjglo9eZgwAAAc5JREFUWMPt1zFrU1EUB/DfS4OmVTGDIChCP4BgnQXRxVHqIJUupp9AB8VBQcRBQUXIB9DWQoMRiXZzcnQSA34A7aAuHSJKkgo2LvfBrU3aJnlYkBy4vHcP557zP/9z3r33JdXa647N0kHSZd5Nn0rSxc8G3cXp85sMcnZZ8vge3osZ+l3vB8CWFA0iL14t79h210swAjACMAIwAjACkB90D/8/GchI9ve4nPwTBh5E9ws7OepzGWb9EddSn51Op9ZstadSg4VK1UKlKkmSDSMLALewiuNh/hVJq71Wxttmqz0dG88vPc+MgWP4grvYG3SLOBrZFFFrttqPe4HIDxh4GSei+98iSlusuYopXEAjBtEPA3tQwUpwluAbDm4TPJUz+BTW9l2Ce6G7L0X/Bw8D3T/7SKKIDzHg7QCcxjvcQAEtXAnrrg/RP0/DKPbqgcN4iVOR7gcO4dcQgRuoh7HSqwlP4n20m63jJu5n8MkWMYfP3UowhzdR8FU8w9iQwevBdyq3/27CMRzAE5yLuvsRLg+ZcR1nJ8YL81HWJUzGAPaFZwe/Q5MdyYDyNHgjzO90YyGHtVDncuiJchaHw8R4oREFV5qdiVmYLM3OgD9k5209/atmIAAAAABJRU5ErkJggg==")}.bk-root .bk-tool-icon-point-draw{background-image:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAB3RJTUUH4gEMEiERGWPELgAAA4RJREFUWMO1lr1uG1cQhb9ztdRSP7AF1QxgwKlcuZSqRC9gWUUUINWqTh5AnaFOnVPEteQmRuhCURqWsSqqc9IolREXdEvQBElxtdw7KURSFEVKu4w8wAKLxdw9Z+bMnRmZGXfZ29//II8th4WwGVNyIoQLYB5vxA9Caq04iUd9A+7ZlsNC2I7TdSd2hZXMJKlnTqp9jtl/GBaqoyQ0noFKpUIzBicYYc+DEFpxkglc4oVJa5gvDn8v1xV2irG3FM4NSVwjUKlUaMcpJhCGmSEJQ6QGD8M5WnHCd8+f3QCXpPLx8WNwv0j6Bm9FMK7FJ3WBE+R/2t7c/GBmFvSBrzRTCsyTDjXrxUgEMtpxynJYmJoBJ4VAybwVARgvL7Oik0okCodnKpVKX7P0leiVMb0VvbJT+upznK4vh0GIeQwwQStJkHQD3MwsCALTJRG7Qrdrj5m/djgYaIa0hlkRdJk26XEgC9txurccBtVW3IudBImmZuACUP+ZlIDBt9FKcubYNTcAH/X0RYM1E7utJPlqe+uZzPxUcEkiSS4sTT95n15Mud0xWC0o2PAWOCdK3KYZlFxfM+tHOcnMzNr1es18ug+cgsVjP4yBU/Ppfrter1m/+l0+zYygML1xRVHU7TSb1cSzBzoBzszsH+AMdJJ49jrNZjWKou6wBnwOzcyndBpNbuueURR1Dw8Pq35p9cc5p/Dy9Dypt7jXrtdGwQECS9NPhr6Gq6txUzNigE6zydLK6lTw12/KT4FGFEUfJX2YJNONq5tVs4ODA7sD/DnwJ/BoADZuE3tHFs12dna6d4C/BI6AlbyzI8ii2TTw12/KK33gb2cdXsNZoAntbZC2SeO4c9592k/5eNQbiwvFd1kJuFGwLJr1wSPg/SwpvyFBHufOeXcFeAlE97U/uCxOY+P3b+Bn4B3Q+L8EdJfD4a+/AbC4UBzPxiPg3wlHZquB28Cn2IuR9x3gr3uV4DbwfvSDOvi4uFA8BDZmIRHkjHpS9Ht9iRqd8+5G3g05mAGcQbsdiX5QJ428G7Kygo8XYdb1/K4NWVmjzkNge2sz84bs+ELmpDDLtqWsNZBXgvmw8CTtpWVMT7x5YWBjLARnwZfKQNYN2U2LPvrh+5nBt7c2M2/It9bArCTKR8eZN+SJ13AScPnoODeRdqNenH+wul5w2gUr2WUjMFAt8bZ/0axX/wNnv4H8vTFb1QAAAABJRU5ErkJggg==")}.bk-root .bk-tool-icon-poly-edit{background-image:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAB3RJTUUH4gELFi46qJmxxAAABV9JREFUWMOdl19vFFUYxn9n9u9sCyylUIzWUoMQBAWCMdEEIt6xIRQSLIEKtvHe6AcA4yeQb7CAUNJy0daLeomJN8SEULAC2kBBapBKoLvbmdl/c14vdmY7u91tF95kknPOnHmf95znPc97Ro2OTeBbdjFDT3c32ZxVHUOE9kSMB0/m6ExuoJn1H+ur6Y+OTfD50SMN5168OgrAlyf7CfuD+z7+iDs3p8hkLUQ0iFQ/yFl5Nm/qonfHVva+s32Zw9GxCYILsZ08tpNfBhbs+1YN4OH9+7huGdECSBVfqUosbsllfmauBqiR+cCNwOr7AEo8pPHJnymXykhg5fUWjoQpl0vVvhZhbSzGoUOHqgBlt6B6uruj2Zy1E9jo0fhfeyL2x4Mnc8VErK0KUEOB64JSyptfG4RSytsJjUJVxw2lsFy3urL9nx1Qd25ObctkrVMi+jQivd7U2ZyV/3Hzpq7h3h1b/7p9Y0o8v8rwAbTWrGpSocN/FGDlbAI0Rl23PCBan0Ok158H9Ipwzi25A/Mzc9Gl/BYx/E4kYqC1NKRARNAaDCNUM27Z+Zr+ouXs0q4+LSLBHPYCFkTkC6uU39kwCdsS7WRKmaYUiAhdnZ3MPX2K4+QjQI+C94A93rMzm8ltMwyDeDzWjMZeEb2pYQDdW3vITU2jtUZ5QThOPgm8C7wP7J15OPsBsB3oWpGnVWisCeDS1VHj4vBI92+/3tgB7Ab2AruAXiDBK5oIOkhtkEYRNRuJhObrd8Dl9ewf4D5wG7hVLpen29vb5wzD+BrkbBMaL3d1dk5nsrnlFDTTFWAWmAZueWD3gCemGde2k2fw1Al1YXhEvjozoO49eczdqekrWmsc2zlrmvEKOGoW1GUjFLqSk2KpJrCLwyMCPAP+BO54QL8DM6YZX/ClsP9YnwKkXnIBP4jdIpJRpdJTCYdMwwi98KU0Hjc/dDILNyUcwTCWdOSMJ0TRmBktGRhLugu0xyLk7CIqVNm+0bGJptl1YXikD0grpY4Rjc4a8Fbgdab/6OGbAJeCUuyJnnHmZH9pbSyGuBXV8NUwlUpR1EWyixmSyTWEwqGlJ2Swbo2JXbAAfgDGgGQA9I1A9t1tlq0AxrXxn0ilUpw4fhQqYkH/sT41OTnJJwf2s6FjI5mshdYa7bqVR2uezr9MJmJt14FvGrh/O9D+e6UkM/xyCuCqEKCYnJyUTKFQrZDHjxzGshwWLQcRsOz8Hi85P23id0ug/XilAMLBmm4tPGdoaKjSH5+oAGrhwvBI9SjZTn4QSK9yenoD7dlrExPoJlXW8G8ytpNHxRKk02lGxsdRKFwXLNvx5yY94HQLGhGk4LFCYQSqaE0AwWM1eOoEbR0dKBSW7bC4mKuffxs4D/wCLKwQQPAUzIkslfp6cVomROWSolh0GjldAM4nzDi2k9/i5UAzC9aKfwNJ3zgJg9YEvN6+C7SHgKm69+sD7RfNnKTTaZRPQfAut4oFV//IS7gkcB34VlVo8kGzphlfB+DU+TfNGBpZtRastvrvARJmfMF28ge9sc2B9/PNnCilMIDwK6y8/ow/Ai4kvILTljAXvDvEvrqKSUs60KolzPjBxspavQD2tKqCAGF/Ba+xE/Wbilu54wZV8NEKF5fXzQHl/bh4hUsE0WAXSlDMYcQSrQXgCmsTseXHsJkNnjqBFGwKJaHsKlxtUHYVhbLCzr1kaOA4bcn1y1Swmb+iLpJKpVrfgdpfsiVVCYcgluwgnU7jEgJ4s5UkLFtWYyHyEg0/N1q1tmQH+YXnAMFr97Nmv3p+0QsHQRsF8qpBOE5+rb9Nkaj50tVQKjqh4OU3GNL/1/So3vuUgbAAAAAASUVORK5CYII=")}.bk-root .bk-grid-row,.bk-root .bk-grid-column{display:flex;display:-webkit-flex;flex-wrap:nowrap;-webkit-flex-wrap:nowrap}.bk-root .bk-grid-row>*,.bk-root .bk-grid-column>*{flex-shrink:0;-webkit-flex-shrink:0}.bk-root .bk-grid-row{flex-direction:row;-webkit-flex-direction:row}.bk-root .bk-grid-column{flex-direction:column;-webkit-flex-direction:column}.bk-root .bk-canvas-wrapper{position:relative;font-size:12pt}.bk-root .bk-canvas,.bk-root .bk-canvas-overlays,.bk-root .bk-canvas-events{position:absolute;top:0;left:0;width:100%;height:100%}.bk-root .bk-canvas-map{position:absolute;border:0}.bk-root .bk-logo{margin:5px;position:relative;display:block;background-repeat:no-repeat}.bk-root .bk-logo.bk-grey{filter:url("data:image/svg+xml;utf8,#grayscale");filter:gray;-webkit-filter:grayscale(100%)}.bk-root .bk-logo-notebook{display:inline-block;vertical-align:middle;margin-right:5px}.bk-root .bk-logo-small{width:20px;height:20px;background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAABx0RVh0U29mdHdhcmUAQWRvYmUgRmlyZXdvcmtzIENTNui8sowAAAOkSURBVDiNjZRtaJVlGMd/1/08zzln5zjP1LWcU9N0NkN8m2CYjpgQYQXqSs0I84OLIC0hkEKoPtiH3gmKoiJDU7QpLgoLjLIQCpEsNJ1vqUOdO7ppbuec5+V+rj4ctwzd8IIbbi6u+8f1539dt3A78eXC7QizUF7gyV1fD1Yqg4JWz84yffhm0qkFqBogB9rM8tZdtwVsPUhWhGcFJngGeWrPzHm5oaMmkfEg1usvLFyc8jLRqDOMru7AyC8saQr7GG7f5fvDeH7Ej8CM66nIF+8yngt6HWaKh7k49Soy9nXurCi1o3qUbS3zWfrYeQDTB/Qj6kX6Ybhw4B+bOYoLKCC9H3Nu/leUTZ1JdRWkkn2ldcCamzrcf47KKXdAJllSlxAOkRgyHsGC/zRday5Qld9DyoM4/q/rUoy/CXh3jzOu3bHUVZeU+DEn8FInkPBFlu3+nW3Nw0mk6vCDiWg8CeJaxEwuHS3+z5RgY+YBR6V1Z1nxSOfoaPa4LASWxxdNp+VWTk7+4vzaou8v8PN+xo+KY2xsw6une2frhw05CTYOmQvsEhjhWjn0bmXPjpE1+kplmmkP3suftwTubK9Vq22qKmrBhpY4jvd5afdRA3wGjFAgcnTK2s4hY0/GPNIb0nErGMCRxWOOX64Z8RAC4oCXdklmEvcL8o0BfkNK4lUg9HTl+oPlQxdNo3Mg4Nv175e/1LDGzZen30MEjRUtmXSfiTVu1kK8W4txyV6BMKlbgk3lMwYCiusNy9fVfvvwMxv8Ynl6vxoByANLTWplvuj/nF9m2+PDtt1eiHPBr1oIfhCChQMBw6Aw0UulqTKZdfVvfG7VcfIqLG9bcldL/+pdWTLxLUy8Qq38heUIjh4XlzZxzQm19lLFlr8vdQ97rjZVOLf8nclzckbcD4wxXMidpX30sFd37Fv/GtwwhzhxGVAprjbg0gCAEeIgwCZyTV2Z1REEW8O4py0wsjeloKoMr6iCY6dP92H6Vw/oTyICIthibxjm/DfN9lVz8IqtqKYLUXfoKVMVQVVJOElGjrnnUt9T9wbgp8AyYKaGlqingHZU/uG2NTZSVqwHQTWkx9hxjkpWDaCg6Ckj5qebgBVbT3V3NNXMSiWSDdGV3hrtzla7J+duwPOToIg42ChPQOQjspnSlp1V+Gjdged7+8UN5CRAV7a5EdFNwCjEaBR27b3W890TE7g24NAP/mMDXRWrGoFPQI9ls/MWO2dWFAar/xcOIImbbpA3zgAAAABJRU5ErkJggg==)}.bk-root .bk-toolbar,.bk-root .bk-toolbar *{box-sizing:border-box;margin:0;padding:0}.bk-root .bk-toolbar-hidden{visibility:hidden;opacity:0;transition:visibility .3s linear,opacity .3s linear}.bk-root .bk-toolbar,.bk-root .bk-button-bar{display:flex;display:-webkit-flex;flex-wrap:nowrap;-webkit-flex-wrap:nowrap;align-items:center;-webkit-align-items:center;user-select:none;-moz-user-select:none;-webkit-user-select:none;-ms-user-select:none}.bk-root .bk-toolbar .bk-logo{flex-shrink:0;-webkit-flex-shrink:0}.bk-root .bk-toolbar-above,.bk-root .bk-toolbar-below{flex-direction:row;-webkit-flex-direction:row;justify-content:flex-end;-webkit-justify-content:flex-end}.bk-root .bk-toolbar-above .bk-button-bar,.bk-root .bk-toolbar-below .bk-button-bar{display:flex;display:-webkit-flex;flex-direction:row;-webkit-flex-direction:row}.bk-root .bk-toolbar-above .bk-logo,.bk-root .bk-toolbar-below .bk-logo{order:1;-webkit-order:1;margin-left:5px}.bk-root .bk-toolbar-left,.bk-root .bk-toolbar-right{flex-direction:column;-webkit-flex-direction:column;justify-content:flex-start;-webkit-justify-content:flex-start}.bk-root .bk-toolbar-left .bk-button-bar,.bk-root .bk-toolbar-right .bk-button-bar{display:flex;display:-webkit-flex;flex-direction:column;-webkit-flex-direction:column}.bk-root .bk-toolbar-left .bk-logo,.bk-root .bk-toolbar-right .bk-logo{order:0;-webkit-order:0;margin-bottom:5px}.bk-root .bk-toolbar-button{width:30px;height:30px;background-size:60%;background-color:transparent;background-repeat:no-repeat;background-position:center center}.bk-root .bk-toolbar-button:hover{background-color:#f9f9f9}.bk-root .bk-toolbar-button:focus{outline:0}.bk-root .bk-toolbar-button::-moz-focus-inner{border:0}.bk-root .bk-toolbar-above .bk-toolbar-button{border-bottom:2px solid transparent}.bk-root .bk-toolbar-above .bk-toolbar-button.bk-active{border-bottom-color:#26aae1}.bk-root .bk-toolbar-below .bk-toolbar-button{border-top:2px solid transparent}.bk-root .bk-toolbar-below .bk-toolbar-button.bk-active{border-top-color:#26aae1}.bk-root .bk-toolbar-right .bk-toolbar-button{border-left:2px solid transparent}.bk-root .bk-toolbar-right .bk-toolbar-button.bk-active{border-left-color:#26aae1}.bk-root .bk-toolbar-left .bk-toolbar-button{border-right:2px solid transparent}.bk-root .bk-toolbar-left .bk-toolbar-button.bk-active{border-right-color:#26aae1}.bk-root .bk-button-bar+.bk-button-bar:before{content:" ";display:inline-block;background-color:lightgray}.bk-root .bk-toolbar-above .bk-button-bar+.bk-button-bar:before,.bk-root .bk-toolbar-below .bk-button-bar+.bk-button-bar:before{height:10px;width:1px}.bk-root .bk-toolbar-left .bk-button-bar+.bk-button-bar:before,.bk-root .bk-toolbar-right .bk-button-bar+.bk-button-bar:before{height:1px;width:10px}.bk-root .bk-tooltip{font-family:"HelveticaNeue-Light","Helvetica Neue Light","Helvetica Neue",Helvetica,Arial,"Lucida Grande",sans-serif;font-weight:300;font-size:12px;position:absolute;padding:5px;border:1px solid #e5e5e5;color:#2f2f2f;background-color:white;pointer-events:none;opacity:.95}.bk-root .bk-tooltip>div:not(:first-child){margin-top:5px;border-top:#e5e5e5 1px dashed}.bk-root .bk-tooltip.bk-left.bk-tooltip-arrow::before{position:absolute;margin:-7px 0 0 0;top:50%;width:0;height:0;border-style:solid;border-width:7px 0 7px 0;border-color:transparent;content:" ";display:block;left:-10px;border-right-width:10px;border-right-color:#909599}.bk-root .bk-tooltip.bk-left::before{left:-10px;border-right-width:10px;border-right-color:#909599}.bk-root .bk-tooltip.bk-right.bk-tooltip-arrow::after{position:absolute;margin:-7px 0 0 0;top:50%;width:0;height:0;border-style:solid;border-width:7px 0 7px 0;border-color:transparent;content:" ";display:block;right:-10px;border-left-width:10px;border-left-color:#909599}.bk-root .bk-tooltip.bk-right::after{right:-10px;border-left-width:10px;border-left-color:#909599}.bk-root .bk-tooltip.bk-above::before{position:absolute;margin:0 0 0 -7px;left:50%;width:0;height:0;border-style:solid;border-width:0 7px 0 7px;border-color:transparent;content:" ";display:block;top:-10px;border-bottom-width:10px;border-bottom-color:#909599}.bk-root .bk-tooltip.bk-below::after{position:absolute;margin:0 0 0 -7px;left:50%;width:0;height:0;border-style:solid;border-width:0 7px 0 7px;border-color:transparent;content:" ";display:block;bottom:-10px;border-top-width:10px;border-top-color:#909599}.bk-root .bk-tooltip-row-label{text-align:right;color:#26aae1}.bk-root .bk-tooltip-row-value{color:default}.bk-root .bk-tooltip-color-block{width:12px;height:12px;margin-left:5px;margin-right:5px;outline:#ddd solid 1px;display:inline-block}.rendered_html .bk-root .bk-tooltip table,.rendered_html .bk-root .bk-tooltip tr,.rendered_html .bk-root .bk-tooltip th,.rendered_html .bk-root .bk-tooltip td{border:0;padding:1px} \ No newline at end of file diff --git a/static/css/bokeh-widgets-1.0.4.min.css b/static/css/bokeh-widgets-1.0.4.min.css new file mode 100644 index 00000000..4f840ced --- /dev/null +++ b/static/css/bokeh-widgets-1.0.4.min.css @@ -0,0 +1,4 @@ +@charset "UTF-8";.bk-root{/*! + * Pikaday + * Copyright © 2014 David Bushell | BSD & MIT license | http://dbushell.com/ + */}.bk-root .bk-noUi-target,.bk-root .bk-noUi-target *{-webkit-touch-callout:none;-webkit-tap-highlight-color:rgba(0,0,0,0);-webkit-user-select:none;-ms-touch-action:none;touch-action:none;-ms-user-select:none;-moz-user-select:none;user-select:none;-moz-box-sizing:border-box;box-sizing:border-box}.bk-root .bk-noUi-target{position:relative;direction:ltr}.bk-root .bk-noUi-base{width:100%;height:100%;position:relative;z-index:1}.bk-root .bk-noUi-connect{position:absolute;right:0;top:0;left:0;bottom:0}.bk-root .bk-noUi-origin{position:absolute;height:0;width:0}.bk-root .bk-noUi-handle{position:relative;z-index:1}.bk-root .bk-noUi-state-tap .bk-noUi-connect,.bk-root .bk-noUi-state-tap .bk-noUi-origin{-webkit-transition:top .3s,right .3s,bottom .3s,left .3s;transition:top .3s,right .3s,bottom .3s,left .3s}.bk-root .bk-noUi-state-drag *{cursor:inherit !important}.bk-root .bk-noUi-base,.bk-root .bk-noUi-handle{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}.bk-root .bk-noUi-horizontal{height:18px}.bk-root .bk-noUi-horizontal .bk-noUi-handle{width:34px;height:28px;left:-17px;top:-6px}.bk-root .bk-noUi-vertical{width:18px}.bk-root .bk-noUi-vertical .bk-noUi-handle{width:28px;height:34px;left:-6px;top:-17px}.bk-root .bk-noUi-target{background:#fafafa;border-radius:4px;border:1px solid #d3d3d3;box-shadow:inset 0 1px 1px #f0f0f0,0 3px 6px -5px #BBB}.bk-root .bk-noUi-connect{background:#3fb8af;border-radius:4px;box-shadow:inset 0 0 3px rgba(51,51,51,0.45);-webkit-transition:background 450ms;transition:background 450ms}.bk-root .bk-noUi-draggable{cursor:ew-resize}.bk-root .bk-noUi-vertical .bk-noUi-draggable{cursor:ns-resize}.bk-root .bk-noUi-handle{border:1px solid #d9d9d9;border-radius:3px;background:#FFF;cursor:default;box-shadow:inset 0 0 1px #FFF,inset 0 1px 7px #ebebeb,0 3px 6px -3px #BBB}.bk-root .bk-noUi-active{box-shadow:inset 0 0 1px #FFF,inset 0 1px 7px #DDD,0 3px 6px -3px #BBB}.bk-root .bk-noUi-handle:before,.bk-root .bk-noUi-handle:after{content:"";display:block;position:absolute;height:14px;width:1px;background:#e8e7e6;left:14px;top:6px}.bk-root .bk-noUi-handle:after{left:17px}.bk-root .bk-noUi-vertical .bk-noUi-handle:before,.bk-root .bk-noUi-vertical .bk-noUi-handle:after{width:14px;height:1px;left:6px;top:14px}.bk-root .bk-noUi-vertical .bk-noUi-handle:after{top:17px}.bk-root [disabled] .bk-noUi-connect{background:#b8b8b8}.bk-root [disabled].bk-noUi-target,.bk-root [disabled].bk-noUi-handle,.bk-root [disabled] .bk-noUi-handle{cursor:not-allowed}.bk-root .bk-noUi-pips,.bk-root .bk-noUi-pips *{-moz-box-sizing:border-box;box-sizing:border-box}.bk-root .bk-noUi-pips{position:absolute;color:#999}.bk-root .bk-noUi-value{position:absolute;white-space:nowrap;text-align:center}.bk-root .bk-noUi-value-sub{color:#ccc;font-size:10px}.bk-root .bk-noUi-marker{position:absolute;background:#CCC}.bk-root .bk-noUi-marker-sub{background:#AAA}.bk-root .bk-noUi-marker-large{background:#AAA}.bk-root .bk-noUi-pips-horizontal{padding:10px 0;height:80px;top:100%;left:0;width:100%}.bk-root .bk-noUi-value-horizontal{-webkit-transform:translate3d(-50%,50%,0);transform:translate3d(-50%,50%,0)}.bk-root .bk-noUi-marker-horizontal.bk-noUi-marker{margin-left:-1px;width:2px;height:5px}.bk-root .bk-noUi-marker-horizontal.bk-noUi-marker-sub{height:10px}.bk-root .bk-noUi-marker-horizontal.bk-noUi-marker-large{height:15px}.bk-root .bk-noUi-pips-vertical{padding:0 10px;height:100%;top:0;left:100%}.bk-root .bk-noUi-value-vertical{-webkit-transform:translate3d(0,50%,0);transform:translate3d(0,50%,0);padding-left:25px}.bk-root .bk-noUi-marker-vertical.bk-noUi-marker{width:5px;height:2px;margin-top:-1px}.bk-root .bk-noUi-marker-vertical.bk-noUi-marker-sub{width:10px}.bk-root .bk-noUi-marker-vertical.bk-noUi-marker-large{width:15px}.bk-root .bk-noUi-tooltip{display:block;position:absolute;border:1px solid #d9d9d9;border-radius:3px;background:#fff;color:#000;padding:5px;text-align:center;white-space:nowrap}.bk-root .bk-noUi-horizontal .bk-noUi-tooltip{-webkit-transform:translate(-50%,0);transform:translate(-50%,0);left:50%;bottom:120%}.bk-root .bk-noUi-vertical .bk-noUi-tooltip{-webkit-transform:translate(0,-50%);transform:translate(0,-50%);top:50%;right:120%}.bk-root .bk-noUi-handle{cursor:grab;cursor:-webkit-grab}.bk-root .bk-noUi-handle.bk-noUi-active{cursor:grabbing;cursor:-webkit-grabbing}.bk-root .bk-noUi-tooltip{display:none;white-space:nowrap}.bk-root .bk-noUi-handle:hover .bk-noUi-tooltip{display:block}.bk-root .bk-noUi-horizontal{width:100%;height:10px}.bk-root .bk-noUi-horizontal .bk-noUi-handle{width:14px;height:18px;left:-7px;top:-5px}.bk-root .bk-noUi-vertical{width:10px;height:100%}.bk-root .bk-noUi-vertical .bk-noUi-handle{width:18px;height:14px;left:-5px;top:-7px}.bk-root .bk-noUi-handle:after,.bk-root .bk-noUi-handle:before{display:none}.bk-root .bk-noUi-connect{box-shadow:none}.bk-root fieldset{padding:0;margin:0;border:0;min-width:0}.bk-root legend{display:block;width:100%;padding:0;margin-bottom:17px;line-height:inherit;color:#333;border:0;border-bottom:1px solid #e5e5e5}.bk-root label{display:inline-block;margin-bottom:5px}.bk-root input[type="search"]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.bk-root input[type="radio"],.bk-root input[type="checkbox"]{margin:4px 0 0;margin-top:1px \9;line-height:normal}.bk-root input[type="file"]{display:block}.bk-root input[type="range"]{display:block;width:100%}.bk-root select[multiple],.bk-root select[size]{height:auto}.bk-root input[type="file"]:focus,.bk-root input[type="radio"]:focus,.bk-root input[type="checkbox"]:focus{outline:thin dotted;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}.bk-root output{display:block;padding-top:7px;line-height:1.42857143;color:#555}.bk-root .bk-bs-form-control{display:block;height:31px;padding:0 12px;background-color:#fff;background-image:none;border:1px solid #ccc;border-radius:4px}.bk-root .bk-bs-form-control:focus{border-color:#66afe9;outline:0;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(102,175,233,0.6);box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(102,175,233,0.6)}.bk-root .bk-bs-form-control::-moz-placeholder{color:#999;opacity:1}.bk-root .bk-bs-form-control:-ms-input-placeholder{color:#999}.bk-root .bk-bs-form-control::-webkit-input-placeholder{color:#999}.bk-root .bk-bs-form-control[disabled],.bk-root .bk-bs-form-control[readonly],fieldset[disabled] .bk-root .bk-bs-form-control{cursor:not-allowed;background-color:#eee;opacity:1}textarea.bk-root .bk-bs-form-control{height:auto}.bk-root input[type="search"]{-webkit-appearance:none}.bk-root input[type="date"]{line-height:31px}.bk-root .bk-bs-form-group{margin-bottom:15px}.bk-root .bk-bs-radio,.bk-root .bk-bs-checkbox{display:block;min-height:17px;margin-top:10px;margin-bottom:10px;padding-left:20px}.bk-root .bk-bs-radio label,.bk-root .bk-bs-checkbox label{display:inline;font-weight:normal;cursor:pointer}.bk-root .bk-bs-radio input[type="radio"],.bk-root .bk-bs-radio-inline input[type="radio"],.bk-root .bk-bs-checkbox input[type="checkbox"],.bk-root .bk-bs-checkbox-inline input[type="checkbox"]{float:left;margin-left:-20px}.bk-root .bk-bs-radio+.bk-bs-radio,.bk-root .bk-bs-checkbox+.bk-bs-checkbox{margin-top:-5px}.bk-root .bk-bs-radio-inline,.bk-root .bk-bs-checkbox-inline{display:inline-block;padding-left:20px;margin-bottom:0;vertical-align:middle;font-weight:normal;cursor:pointer}.bk-root .bk-bs-radio-inline+.bk-bs-radio-inline,.bk-root .bk-bs-checkbox-inline+.bk-bs-checkbox-inline{margin-top:0;margin-left:10px}.bk-root input[type="radio"][disabled],.bk-root input[type="checkbox"][disabled],.bk-root .bk-bs-radio[disabled],.bk-root .bk-bs-radio-inline[disabled],.bk-root .bk-bs-checkbox[disabled],.bk-root .bk-bs-checkbox-inline[disabled],fieldset[disabled] .bk-root input[type="radio"],fieldset[disabled] .bk-root input[type="checkbox"],fieldset[disabled] .bk-root .bk-bs-radio,fieldset[disabled] .bk-root .bk-bs-radio-inline,fieldset[disabled] .bk-root .bk-bs-checkbox,fieldset[disabled] .bk-root .bk-bs-checkbox-inline{cursor:not-allowed}.bk-root .bk-bs-input-sm{height:28px;padding:5px 10px;font-size:11px;line-height:1.5;border-radius:3px}select.bk-root .bk-bs-input-sm{height:28px;line-height:28px}textarea.bk-root .bk-bs-input-sm,select[multiple].bk-root .bk-bs-input-sm{height:auto}.bk-root .bk-bs-input-lg{height:42px;padding:10px 16px;font-size:15px;line-height:1.33;border-radius:6px}select.bk-root .bk-bs-input-lg{height:42px;line-height:42px}textarea.bk-root .bk-bs-input-lg,select[multiple].bk-root .bk-bs-input-lg{height:auto}.bk-root .bk-bs-has-feedback{position:relative}.bk-root .bk-bs-has-feedback .bk-bs-form-control{padding-right:38.75px}.bk-root .bk-bs-has-feedback .bk-bs-form-control-feedback{position:absolute;top:22px;right:0;display:block;width:31px;height:31px;line-height:31px;text-align:center}.bk-root .bk-bs-has-success .bk-bs-help-block,.bk-root .bk-bs-has-success .bk-bs-control-label,.bk-root .bk-bs-has-success .bk-bs-radio,.bk-root .bk-bs-has-success .bk-bs-checkbox,.bk-root .bk-bs-has-success .bk-bs-radio-inline,.bk-root .bk-bs-has-success .bk-bs-checkbox-inline{color:#3c763d}.bk-root .bk-bs-has-success .bk-bs-form-control{border-color:#3c763d;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075)}.bk-root .bk-bs-has-success .bk-bs-form-control:focus{border-color:#2b542c;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #67b168;box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #67b168}.bk-root .bk-bs-has-success .bk-bs-input-group-addon{color:#3c763d;border-color:#3c763d;background-color:#dff0d8}.bk-root .bk-bs-has-success .bk-bs-form-control-feedback{color:#3c763d}.bk-root .bk-bs-has-warning .bk-bs-help-block,.bk-root .bk-bs-has-warning .bk-bs-control-label,.bk-root .bk-bs-has-warning .bk-bs-radio,.bk-root .bk-bs-has-warning .bk-bs-checkbox,.bk-root .bk-bs-has-warning .bk-bs-radio-inline,.bk-root .bk-bs-has-warning .bk-bs-checkbox-inline{color:#8a6d3b}.bk-root .bk-bs-has-warning .bk-bs-form-control{border-color:#8a6d3b;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075)}.bk-root .bk-bs-has-warning .bk-bs-form-control:focus{border-color:#66512c;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #c0a16b;box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #c0a16b}.bk-root .bk-bs-has-warning .bk-bs-input-group-addon{color:#8a6d3b;border-color:#8a6d3b;background-color:#fcf8e3}.bk-root .bk-bs-has-warning .bk-bs-form-control-feedback{color:#8a6d3b}.bk-root .bk-bs-has-error .bk-bs-help-block,.bk-root .bk-bs-has-error .bk-bs-control-label,.bk-root .bk-bs-has-error .bk-bs-radio,.bk-root .bk-bs-has-error .bk-bs-checkbox,.bk-root .bk-bs-has-error .bk-bs-radio-inline,.bk-root .bk-bs-has-error .bk-bs-checkbox-inline{color:#a94442}.bk-root .bk-bs-has-error .bk-bs-form-control{border-color:#a94442;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075)}.bk-root .bk-bs-has-error .bk-bs-form-control:focus{border-color:#843534;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #ce8483;box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #ce8483}.bk-root .bk-bs-has-error .bk-bs-input-group-addon{color:#a94442;border-color:#a94442;background-color:#f2dede}.bk-root .bk-bs-has-error .bk-bs-form-control-feedback{color:#a94442}.bk-root .bk-bs-form-control-static{margin-bottom:0}.bk-root .bk-bs-help-block{display:block;margin-top:5px;margin-bottom:10px;color:#737373}@media(min-width:768px){.bk-root .bk-bs-form-inline .bk-bs-form-group{display:inline-block;margin-bottom:0;vertical-align:middle}.bk-root .bk-bs-form-inline .bk-bs-form-control{display:inline-block;width:auto;vertical-align:middle}.bk-root .bk-bs-form-inline .bk-bs-input-group>.bk-bs-form-control{width:100%}.bk-root .bk-bs-form-inline .bk-bs-control-label{margin-bottom:0;vertical-align:middle}.bk-root .bk-bs-form-inline .bk-bs-radio,.bk-root .bk-bs-form-inline .bk-bs-checkbox{display:inline-block;margin-top:0;margin-bottom:0;padding-left:0;vertical-align:middle}.bk-root .bk-bs-form-inline .bk-bs-radio input[type="radio"],.bk-root .bk-bs-form-inline .bk-bs-checkbox input[type="checkbox"]{float:none;margin-left:0}.bk-root .bk-bs-form-inline .bk-bs-has-feedback .bk-bs-form-control-feedback{top:0}}.bk-root .bk-bs-form-horizontal .bk-bs-control-label,.bk-root .bk-bs-form-horizontal .bk-bs-radio,.bk-root .bk-bs-form-horizontal .bk-bs-checkbox,.bk-root .bk-bs-form-horizontal .bk-bs-radio-inline,.bk-root .bk-bs-form-horizontal .bk-bs-checkbox-inline{margin-top:0;margin-bottom:0;padding-top:7px}.bk-root .bk-bs-form-horizontal .bk-bs-radio,.bk-root .bk-bs-form-horizontal .bk-bs-checkbox{min-height:24px}.bk-root .bk-bs-form-horizontal .bk-bs-form-group{margin-left:-15px;margin-right:-15px}.bk-root .bk-bs-form-horizontal .bk-bs-form-control-static{padding-top:7px}@media(min-width:768px){.bk-root .bk-bs-form-horizontal .bk-bs-control-label{text-align:right}}.bk-root .bk-bs-form-horizontal .bk-bs-has-feedback .bk-bs-form-control-feedback{top:0;right:15px}.bk-root .bk-bs-btn{display:inline-block;margin-bottom:0;font-weight:normal;text-align:center;vertical-align:middle;cursor:pointer;background-image:none;border:1px solid transparent;white-space:nowrap;padding:6px 12px;font-size:12px;line-height:1.42857143;border-radius:4px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.bk-root .bk-bs-btn:focus,.bk-root .bk-bs-btn:active:focus,.bk-root .bk-bs-btn.bk-bs-active:focus{outline:thin dotted;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}.bk-root .bk-bs-btn:hover,.bk-root .bk-bs-btn:focus{color:#333;text-decoration:none}.bk-root .bk-bs-btn:active,.bk-root .bk-bs-btn.bk-bs-active{outline:0;background-image:none;-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,0.125);box-shadow:inset 0 3px 5px rgba(0,0,0,0.125)}.bk-root .bk-bs-btn.bk-bs-disabled,.bk-root .bk-bs-btn[disabled],fieldset[disabled] .bk-root .bk-bs-btn{cursor:not-allowed;pointer-events:none;opacity:.65;filter:alpha(opacity=65);-webkit-box-shadow:none;box-shadow:none}.bk-root .bk-bs-btn-default{color:#333;background-color:#fff;border-color:#ccc}.bk-root .bk-bs-btn-default:hover,.bk-root .bk-bs-btn-default:focus,.bk-root .bk-bs-btn-default:active,.bk-root .bk-bs-btn-default.bk-bs-active,.bk-bs-open .bk-bs-dropdown-toggle.bk-root .bk-bs-btn-default{color:#333;background-color:#ebebeb;border-color:#adadad}.bk-root .bk-bs-btn-default:active,.bk-root .bk-bs-btn-default.bk-bs-active,.bk-bs-open .bk-bs-dropdown-toggle.bk-root .bk-bs-btn-default{background-image:none}.bk-root .bk-bs-btn-default.bk-bs-disabled,.bk-root .bk-bs-btn-default[disabled],fieldset[disabled] .bk-root .bk-bs-btn-default,.bk-root .bk-bs-btn-default.bk-bs-disabled:hover,.bk-root .bk-bs-btn-default[disabled]:hover,fieldset[disabled] .bk-root .bk-bs-btn-default:hover,.bk-root .bk-bs-btn-default.bk-bs-disabled:focus,.bk-root .bk-bs-btn-default[disabled]:focus,fieldset[disabled] .bk-root .bk-bs-btn-default:focus,.bk-root .bk-bs-btn-default.bk-bs-disabled:active,.bk-root .bk-bs-btn-default[disabled]:active,fieldset[disabled] .bk-root .bk-bs-btn-default:active,.bk-root .bk-bs-btn-default.bk-bs-disabled.bk-bs-active,.bk-root .bk-bs-btn-default[disabled].bk-bs-active,fieldset[disabled] .bk-root .bk-bs-btn-default.bk-bs-active{background-color:#fff;border-color:#ccc}.bk-root .bk-bs-btn-default .bk-bs-badge{color:#fff;background-color:#333}.bk-root .bk-bs-btn-primary{color:#fff;background-color:#428bca;border-color:#357ebd}.bk-root .bk-bs-btn-primary:hover,.bk-root .bk-bs-btn-primary:focus,.bk-root .bk-bs-btn-primary:active,.bk-root .bk-bs-btn-primary.bk-bs-active,.bk-bs-open .bk-bs-dropdown-toggle.bk-root .bk-bs-btn-primary{color:#fff;background-color:#3276b1;border-color:#285e8e}.bk-root .bk-bs-btn-primary:active,.bk-root .bk-bs-btn-primary.bk-bs-active,.bk-bs-open .bk-bs-dropdown-toggle.bk-root .bk-bs-btn-primary{background-image:none}.bk-root .bk-bs-btn-primary.bk-bs-disabled,.bk-root .bk-bs-btn-primary[disabled],fieldset[disabled] .bk-root .bk-bs-btn-primary,.bk-root .bk-bs-btn-primary.bk-bs-disabled:hover,.bk-root .bk-bs-btn-primary[disabled]:hover,fieldset[disabled] .bk-root .bk-bs-btn-primary:hover,.bk-root .bk-bs-btn-primary.bk-bs-disabled:focus,.bk-root .bk-bs-btn-primary[disabled]:focus,fieldset[disabled] .bk-root .bk-bs-btn-primary:focus,.bk-root .bk-bs-btn-primary.bk-bs-disabled:active,.bk-root .bk-bs-btn-primary[disabled]:active,fieldset[disabled] .bk-root .bk-bs-btn-primary:active,.bk-root .bk-bs-btn-primary.bk-bs-disabled.bk-bs-active,.bk-root .bk-bs-btn-primary[disabled].bk-bs-active,fieldset[disabled] .bk-root .bk-bs-btn-primary.bk-bs-active{background-color:#428bca;border-color:#357ebd}.bk-root .bk-bs-btn-primary .bk-bs-badge{color:#428bca;background-color:#fff}.bk-root .bk-bs-btn-success{color:#fff;background-color:#5cb85c;border-color:#4cae4c}.bk-root .bk-bs-btn-success:hover,.bk-root .bk-bs-btn-success:focus,.bk-root .bk-bs-btn-success:active,.bk-root .bk-bs-btn-success.bk-bs-active,.bk-bs-open .bk-bs-dropdown-toggle.bk-root .bk-bs-btn-success{color:#fff;background-color:#47a447;border-color:#398439}.bk-root .bk-bs-btn-success:active,.bk-root .bk-bs-btn-success.bk-bs-active,.bk-bs-open .bk-bs-dropdown-toggle.bk-root .bk-bs-btn-success{background-image:none}.bk-root .bk-bs-btn-success.bk-bs-disabled,.bk-root .bk-bs-btn-success[disabled],fieldset[disabled] .bk-root .bk-bs-btn-success,.bk-root .bk-bs-btn-success.bk-bs-disabled:hover,.bk-root .bk-bs-btn-success[disabled]:hover,fieldset[disabled] .bk-root .bk-bs-btn-success:hover,.bk-root .bk-bs-btn-success.bk-bs-disabled:focus,.bk-root .bk-bs-btn-success[disabled]:focus,fieldset[disabled] .bk-root .bk-bs-btn-success:focus,.bk-root .bk-bs-btn-success.bk-bs-disabled:active,.bk-root .bk-bs-btn-success[disabled]:active,fieldset[disabled] .bk-root .bk-bs-btn-success:active,.bk-root .bk-bs-btn-success.bk-bs-disabled.bk-bs-active,.bk-root .bk-bs-btn-success[disabled].bk-bs-active,fieldset[disabled] .bk-root .bk-bs-btn-success.bk-bs-active{background-color:#5cb85c;border-color:#4cae4c}.bk-root .bk-bs-btn-success .bk-bs-badge{color:#5cb85c;background-color:#fff}.bk-root .bk-bs-btn-info{color:#fff;background-color:#5bc0de;border-color:#46b8da}.bk-root .bk-bs-btn-info:hover,.bk-root .bk-bs-btn-info:focus,.bk-root .bk-bs-btn-info:active,.bk-root .bk-bs-btn-info.bk-bs-active,.bk-bs-open .bk-bs-dropdown-toggle.bk-root .bk-bs-btn-info{color:#fff;background-color:#39b3d7;border-color:#269abc}.bk-root .bk-bs-btn-info:active,.bk-root .bk-bs-btn-info.bk-bs-active,.bk-bs-open .bk-bs-dropdown-toggle.bk-root .bk-bs-btn-info{background-image:none}.bk-root .bk-bs-btn-info.bk-bs-disabled,.bk-root .bk-bs-btn-info[disabled],fieldset[disabled] .bk-root .bk-bs-btn-info,.bk-root .bk-bs-btn-info.bk-bs-disabled:hover,.bk-root .bk-bs-btn-info[disabled]:hover,fieldset[disabled] .bk-root .bk-bs-btn-info:hover,.bk-root .bk-bs-btn-info.bk-bs-disabled:focus,.bk-root .bk-bs-btn-info[disabled]:focus,fieldset[disabled] .bk-root .bk-bs-btn-info:focus,.bk-root .bk-bs-btn-info.bk-bs-disabled:active,.bk-root .bk-bs-btn-info[disabled]:active,fieldset[disabled] .bk-root .bk-bs-btn-info:active,.bk-root .bk-bs-btn-info.bk-bs-disabled.bk-bs-active,.bk-root .bk-bs-btn-info[disabled].bk-bs-active,fieldset[disabled] .bk-root .bk-bs-btn-info.bk-bs-active{background-color:#5bc0de;border-color:#46b8da}.bk-root .bk-bs-btn-info .bk-bs-badge{color:#5bc0de;background-color:#fff}.bk-root .bk-bs-btn-warning{color:#fff;background-color:#f0ad4e;border-color:#eea236}.bk-root .bk-bs-btn-warning:hover,.bk-root .bk-bs-btn-warning:focus,.bk-root .bk-bs-btn-warning:active,.bk-root .bk-bs-btn-warning.bk-bs-active,.bk-bs-open .bk-bs-dropdown-toggle.bk-root .bk-bs-btn-warning{color:#fff;background-color:#ed9c28;border-color:#d58512}.bk-root .bk-bs-btn-warning:active,.bk-root .bk-bs-btn-warning.bk-bs-active,.bk-bs-open .bk-bs-dropdown-toggle.bk-root .bk-bs-btn-warning{background-image:none}.bk-root .bk-bs-btn-warning.bk-bs-disabled,.bk-root .bk-bs-btn-warning[disabled],fieldset[disabled] .bk-root .bk-bs-btn-warning,.bk-root .bk-bs-btn-warning.bk-bs-disabled:hover,.bk-root .bk-bs-btn-warning[disabled]:hover,fieldset[disabled] .bk-root .bk-bs-btn-warning:hover,.bk-root .bk-bs-btn-warning.bk-bs-disabled:focus,.bk-root .bk-bs-btn-warning[disabled]:focus,fieldset[disabled] .bk-root .bk-bs-btn-warning:focus,.bk-root .bk-bs-btn-warning.bk-bs-disabled:active,.bk-root .bk-bs-btn-warning[disabled]:active,fieldset[disabled] .bk-root .bk-bs-btn-warning:active,.bk-root .bk-bs-btn-warning.bk-bs-disabled.bk-bs-active,.bk-root .bk-bs-btn-warning[disabled].bk-bs-active,fieldset[disabled] .bk-root .bk-bs-btn-warning.bk-bs-active{background-color:#f0ad4e;border-color:#eea236}.bk-root .bk-bs-btn-warning .bk-bs-badge{color:#f0ad4e;background-color:#fff}.bk-root .bk-bs-btn-danger{color:#fff;background-color:#d9534f;border-color:#d43f3a}.bk-root .bk-bs-btn-danger:hover,.bk-root .bk-bs-btn-danger:focus,.bk-root .bk-bs-btn-danger:active,.bk-root .bk-bs-btn-danger.bk-bs-active,.bk-bs-open .bk-bs-dropdown-toggle.bk-root .bk-bs-btn-danger{color:#fff;background-color:#d2322d;border-color:#ac2925}.bk-root .bk-bs-btn-danger:active,.bk-root .bk-bs-btn-danger.bk-bs-active,.bk-bs-open .bk-bs-dropdown-toggle.bk-root .bk-bs-btn-danger{background-image:none}.bk-root .bk-bs-btn-danger.bk-bs-disabled,.bk-root .bk-bs-btn-danger[disabled],fieldset[disabled] .bk-root .bk-bs-btn-danger,.bk-root .bk-bs-btn-danger.bk-bs-disabled:hover,.bk-root .bk-bs-btn-danger[disabled]:hover,fieldset[disabled] .bk-root .bk-bs-btn-danger:hover,.bk-root .bk-bs-btn-danger.bk-bs-disabled:focus,.bk-root .bk-bs-btn-danger[disabled]:focus,fieldset[disabled] .bk-root .bk-bs-btn-danger:focus,.bk-root .bk-bs-btn-danger.bk-bs-disabled:active,.bk-root .bk-bs-btn-danger[disabled]:active,fieldset[disabled] .bk-root .bk-bs-btn-danger:active,.bk-root .bk-bs-btn-danger.bk-bs-disabled.bk-bs-active,.bk-root .bk-bs-btn-danger[disabled].bk-bs-active,fieldset[disabled] .bk-root .bk-bs-btn-danger.bk-bs-active{background-color:#d9534f;border-color:#d43f3a}.bk-root .bk-bs-btn-danger .bk-bs-badge{color:#d9534f;background-color:#fff}.bk-root .bk-bs-btn-link{color:#428bca;font-weight:normal;cursor:pointer;border-radius:0}.bk-root .bk-bs-btn-link,.bk-root .bk-bs-btn-link:active,.bk-root .bk-bs-btn-link[disabled],fieldset[disabled] .bk-root .bk-bs-btn-link{background-color:transparent;-webkit-box-shadow:none;box-shadow:none}.bk-root .bk-bs-btn-link,.bk-root .bk-bs-btn-link:hover,.bk-root .bk-bs-btn-link:focus,.bk-root .bk-bs-btn-link:active{border-color:transparent}.bk-root .bk-bs-btn-link:hover,.bk-root .bk-bs-btn-link:focus{color:#2a6496;text-decoration:underline;background-color:transparent}.bk-root .bk-bs-btn-link[disabled]:hover,fieldset[disabled] .bk-root .bk-bs-btn-link:hover,.bk-root .bk-bs-btn-link[disabled]:focus,fieldset[disabled] .bk-root .bk-bs-btn-link:focus{color:#999;text-decoration:none}.bk-root .bk-bs-btn-lg{padding:10px 16px;font-size:15px;line-height:1.33;border-radius:6px}.bk-root .bk-bs-btn-sm{padding:5px 10px;font-size:11px;line-height:1.5;border-radius:3px}.bk-root .bk-bs-btn-xs{padding:1px 5px;font-size:11px;line-height:1.5;border-radius:3px}.bk-root .bk-bs-btn-block{display:block;width:100%;padding-left:0;padding-right:0}.bk-root .bk-bs-btn-block+.bk-bs-btn-block{margin-top:5px}.bk-root input[type="submit"].bk-bs-btn-block,.bk-root input[type="reset"].bk-bs-btn-block,.bk-root input[type="button"].bk-bs-btn-block{width:100%}.bk-root .bk-bs-caret{display:inline-block;width:0;height:0;margin-left:2px;vertical-align:middle;border-top:4px solid;border-right:4px solid transparent;border-left:4px solid transparent}.bk-root .bk-bs-dropdown{position:relative}.bk-root .bk-bs-dropdown-toggle:focus{outline:0}.bk-root .bk-bs-dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;display:none;float:left;min-width:160px;padding:5px 0;margin:2px 0 0;list-style:none;font-size:12px;background-color:#fff;border:1px solid #ccc;border:1px solid rgba(0,0,0,0.15);border-radius:4px;-webkit-box-shadow:0 6px 12px rgba(0,0,0,0.175);box-shadow:0 6px 12px rgba(0,0,0,0.175);background-clip:padding-box}.bk-root .bk-bs-dropdown-menu.bk-bs-pull-right{right:0;left:auto}.bk-root .bk-bs-dropdown-menu .bk-bs-divider{height:1px;margin:7.5px 0;overflow:hidden;background-color:#e5e5e5}.bk-root .bk-bs-dropdown-menu>li>a{display:block;padding:3px 20px;clear:both;font-weight:normal;line-height:1.42857143;color:#333;white-space:nowrap}.bk-root .bk-bs-dropdown-menu>li>a:hover,.bk-root .bk-bs-dropdown-menu>li>a:focus{text-decoration:none;color:#262626;background-color:#f5f5f5}.bk-root .bk-bs-dropdown-menu>.bk-bs-active>a,.bk-root .bk-bs-dropdown-menu>.bk-bs-active>a:hover,.bk-root .bk-bs-dropdown-menu>.bk-bs-active>a:focus{color:#fff;text-decoration:none;outline:0;background-color:#428bca}.bk-root .bk-bs-dropdown-menu>.bk-bs-disabled>a,.bk-root .bk-bs-dropdown-menu>.bk-bs-disabled>a:hover,.bk-root .bk-bs-dropdown-menu>.bk-bs-disabled>a:focus{color:#999}.bk-root .bk-bs-dropdown-menu>.bk-bs-disabled>a:hover,.bk-root .bk-bs-dropdown-menu>.bk-bs-disabled>a:focus{text-decoration:none;background-color:transparent;background-image:none;filter:progid:DXImageTransform.bk-bs-Microsoft.bk-bs-gradient(enabled = false);cursor:not-allowed}.bk-root .bk-bs-open>.bk-bs-dropdown-menu{display:block}.bk-root .bk-bs-open>a{outline:0}.bk-root .bk-bs-dropdown-menu-right{left:auto;right:0}.bk-root .bk-bs-dropdown-menu-left{left:0;right:auto}.bk-root .bk-bs-dropdown-header{display:block;padding:3px 20px;font-size:11px;line-height:1.42857143;color:#999}.bk-root .bk-bs-dropdown-backdrop{position:fixed;left:0;right:0;bottom:0;top:0;z-index:990}.bk-root .bk-bs-pull-right>.bk-bs-dropdown-menu{right:0;left:auto}.bk-root .bk-bs-dropup .bk-bs-caret,.bk-root .bk-bs-navbar-fixed-bottom .bk-bs-dropdown .bk-bs-caret{border-top:0;border-bottom:4px solid;content:""}.bk-root .bk-bs-dropup .bk-bs-dropdown-menu,.bk-root .bk-bs-navbar-fixed-bottom .bk-bs-dropdown .bk-bs-dropdown-menu{top:auto;bottom:100%;margin-bottom:1px}@media(min-width:768px){.bk-root .bk-bs-navbar-right .bk-bs-dropdown-menu{left:auto;right:0}.bk-root .bk-bs-navbar-right .bk-bs-dropdown-menu-left{left:0;right:auto}}.bk-root .bk-bs-btn-group,.bk-root .bk-bs-btn-group-vertical{position:relative;display:inline-block;vertical-align:middle}.bk-root .bk-bs-btn-group>.bk-bs-btn,.bk-root .bk-bs-btn-group-vertical>.bk-bs-btn{position:relative;float:left}.bk-root .bk-bs-btn-group>.bk-bs-btn:hover,.bk-root .bk-bs-btn-group-vertical>.bk-bs-btn:hover,.bk-root .bk-bs-btn-group>.bk-bs-btn:focus,.bk-root .bk-bs-btn-group-vertical>.bk-bs-btn:focus,.bk-root .bk-bs-btn-group>.bk-bs-btn:active,.bk-root .bk-bs-btn-group-vertical>.bk-bs-btn:active,.bk-root .bk-bs-btn-group>.bk-bs-btn.bk-bs-active,.bk-root .bk-bs-btn-group-vertical>.bk-bs-btn.bk-bs-active{z-index:2}.bk-root .bk-bs-btn-group>.bk-bs-btn:focus,.bk-root .bk-bs-btn-group-vertical>.bk-bs-btn:focus{outline:0}.bk-root .bk-bs-btn-group .bk-bs-btn+.bk-bs-btn,.bk-root .bk-bs-btn-group .bk-bs-btn+.bk-bs-btn-group,.bk-root .bk-bs-btn-group .bk-bs-btn-group+.bk-bs-btn,.bk-root .bk-bs-btn-group .bk-bs-btn-group+.bk-bs-btn-group{margin-left:-1px}.bk-root .bk-bs-btn-toolbar{margin-left:-5px}.bk-root .bk-bs-btn-toolbar .bk-bs-btn-group,.bk-root .bk-bs-btn-toolbar .bk-bs-input-group{float:left}.bk-root .bk-bs-btn-toolbar>.bk-bs-btn,.bk-root .bk-bs-btn-toolbar>.bk-bs-btn-group,.bk-root .bk-bs-btn-toolbar>.bk-bs-input-group{margin-left:5px}.bk-root .bk-bs-btn-group>.bk-bs-btn:not(:first-child):not(:last-child):not(.bk-bs-dropdown-toggle){border-radius:0}.bk-root .bk-bs-btn-group>.bk-bs-btn:first-child{margin-left:0}.bk-root .bk-bs-btn-group>.bk-bs-btn:first-child:not(:last-child):not(.bk-bs-dropdown-toggle){border-bottom-right-radius:0;border-top-right-radius:0}.bk-root .bk-bs-btn-group>.bk-bs-btn:last-child:not(:first-child),.bk-root .bk-bs-btn-group>.bk-bs-dropdown-toggle:not(:first-child){border-bottom-left-radius:0;border-top-left-radius:0}.bk-root .bk-bs-btn-group>.bk-bs-btn-group{float:left}.bk-root .bk-bs-btn-group>.bk-bs-btn-group:not(:first-child):not(:last-child)>.bk-bs-btn{border-radius:0}.bk-root .bk-bs-btn-group>.bk-bs-btn-group:first-child>.bk-bs-btn:last-child,.bk-root .bk-bs-btn-group>.bk-bs-btn-group:first-child>.bk-bs-dropdown-toggle{border-bottom-right-radius:0;border-top-right-radius:0}.bk-root .bk-bs-btn-group>.bk-bs-btn-group:last-child>.bk-bs-btn:first-child{border-bottom-left-radius:0;border-top-left-radius:0}.bk-root .bk-bs-btn-group .bk-bs-dropdown-toggle:active,.bk-root .bk-bs-btn-group.bk-bs-open .bk-bs-dropdown-toggle{outline:0}.bk-root .bk-bs-btn-group>.bk-bs-btn+.bk-bs-dropdown-toggle{padding-left:8px;padding-right:8px}.bk-root .bk-bs-btn-group>.bk-bs-btn-lg+.bk-bs-dropdown-toggle{padding-left:12px;padding-right:12px}.bk-root .bk-bs-btn-group.bk-bs-open .bk-bs-dropdown-toggle{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,0.125);box-shadow:inset 0 3px 5px rgba(0,0,0,0.125)}.bk-root .bk-bs-btn-group.bk-bs-open .bk-bs-dropdown-toggle.bk-bs-btn-link{-webkit-box-shadow:none;box-shadow:none}.bk-root .bk-bs-btn .bk-bs-caret{margin-left:0}.bk-root .bk-bs-btn-lg .bk-bs-caret{border-width:5px 5px 0;border-bottom-width:0}.bk-root .bk-bs-dropup .bk-bs-btn-lg .bk-bs-caret{border-width:0 5px 5px}.bk-root .bk-bs-btn-group-vertical>.bk-bs-btn,.bk-root .bk-bs-btn-group-vertical>.bk-bs-btn-group,.bk-root .bk-bs-btn-group-vertical>.bk-bs-btn-group>.bk-bs-btn{display:block;float:none;width:100%;max-width:100%}.bk-root .bk-bs-btn-group-vertical>.bk-bs-btn-group>.bk-bs-btn{float:none}.bk-root .bk-bs-btn-group-vertical>.bk-bs-btn+.bk-bs-btn,.bk-root .bk-bs-btn-group-vertical>.bk-bs-btn+.bk-bs-btn-group,.bk-root .bk-bs-btn-group-vertical>.bk-bs-btn-group+.bk-bs-btn,.bk-root .bk-bs-btn-group-vertical>.bk-bs-btn-group+.bk-bs-btn-group{margin-top:-1px;margin-left:0}.bk-root .bk-bs-btn-group-vertical>.bk-bs-btn:not(:first-child):not(:last-child){border-radius:0}.bk-root .bk-bs-btn-group-vertical>.bk-bs-btn:first-child:not(:last-child){border-top-right-radius:4px;border-bottom-right-radius:0;border-bottom-left-radius:0}.bk-root .bk-bs-btn-group-vertical>.bk-bs-btn:last-child:not(:first-child){border-bottom-left-radius:4px;border-top-right-radius:0;border-top-left-radius:0}.bk-root .bk-bs-btn-group-vertical>.bk-bs-btn-group:not(:first-child):not(:last-child)>.bk-bs-btn{border-radius:0}.bk-root .bk-bs-btn-group-vertical>.bk-bs-btn-group:first-child:not(:last-child)>.bk-bs-btn:last-child,.bk-root .bk-bs-btn-group-vertical>.bk-bs-btn-group:first-child:not(:last-child)>.bk-bs-dropdown-toggle{border-bottom-right-radius:0;border-bottom-left-radius:0}.bk-root .bk-bs-btn-group-vertical>.bk-bs-btn-group:last-child:not(:first-child)>.bk-bs-btn:first-child{border-top-right-radius:0;border-top-left-radius:0}.bk-root .bk-bs-btn-group-justified{display:table;width:100%;table-layout:fixed;border-collapse:separate}.bk-root .bk-bs-btn-group-justified>.bk-bs-btn,.bk-root .bk-bs-btn-group-justified>.bk-bs-btn-group{float:none;display:table-cell;width:1%}.bk-root .bk-bs-btn-group-justified>.bk-bs-btn-group .bk-bs-btn{width:100%}.bk-root .bk-bs-btn-group>.bk-bs-btn>input[type="radio"],.bk-root .bk-bs-btn-group>.bk-bs-btn>input[type="checkbox"]{display:none}.bk-root .bk-bs-input-group{position:relative;display:table;border-collapse:separate}.bk-root .bk-bs-input-group[class*="col-"]{float:none;padding-left:0;padding-right:0}.bk-root .bk-bs-input-group .bk-bs-form-control{position:relative;z-index:2;float:left;width:100%;margin-bottom:0}.bk-root .bk-bs-input-group-lg>.bk-bs-form-control,.bk-root .bk-bs-input-group-lg>.bk-bs-input-group-addon,.bk-root .bk-bs-input-group-lg>.bk-bs-input-group-btn>.bk-bs-btn{height:42px;padding:10px 16px;font-size:15px;line-height:1.33;border-radius:6px}select.bk-root .bk-bs-input-group-lg>.bk-bs-form-control,select.bk-root .bk-bs-input-group-lg>.bk-bs-input-group-addon,select.bk-root .bk-bs-input-group-lg>.bk-bs-input-group-btn>.bk-bs-btn{height:42px;line-height:42px}textarea.bk-root .bk-bs-input-group-lg>.bk-bs-form-control,textarea.bk-root .bk-bs-input-group-lg>.bk-bs-input-group-addon,textarea.bk-root .bk-bs-input-group-lg>.bk-bs-input-group-btn>.bk-bs-btn,select[multiple].bk-root .bk-bs-input-group-lg>.bk-bs-form-control,select[multiple].bk-root .bk-bs-input-group-lg>.bk-bs-input-group-addon,select[multiple].bk-root .bk-bs-input-group-lg>.bk-bs-input-group-btn>.bk-bs-btn{height:auto}.bk-root .bk-bs-input-group-sm>.bk-bs-form-control,.bk-root .bk-bs-input-group-sm>.bk-bs-input-group-addon,.bk-root .bk-bs-input-group-sm>.bk-bs-input-group-btn>.bk-bs-btn{height:28px;padding:5px 10px;font-size:11px;line-height:1.5;border-radius:3px}select.bk-root .bk-bs-input-group-sm>.bk-bs-form-control,select.bk-root .bk-bs-input-group-sm>.bk-bs-input-group-addon,select.bk-root .bk-bs-input-group-sm>.bk-bs-input-group-btn>.bk-bs-btn{height:28px;line-height:28px}textarea.bk-root .bk-bs-input-group-sm>.bk-bs-form-control,textarea.bk-root .bk-bs-input-group-sm>.bk-bs-input-group-addon,textarea.bk-root .bk-bs-input-group-sm>.bk-bs-input-group-btn>.bk-bs-btn,select[multiple].bk-root .bk-bs-input-group-sm>.bk-bs-form-control,select[multiple].bk-root .bk-bs-input-group-sm>.bk-bs-input-group-addon,select[multiple].bk-root .bk-bs-input-group-sm>.bk-bs-input-group-btn>.bk-bs-btn{height:auto}.bk-root .bk-bs-input-group-addon,.bk-root .bk-bs-input-group-btn,.bk-root .bk-bs-input-group .bk-bs-form-control{display:table-cell}.bk-root .bk-bs-input-group-addon:not(:first-child):not(:last-child),.bk-root .bk-bs-input-group-btn:not(:first-child):not(:last-child),.bk-root .bk-bs-input-group .bk-bs-form-control:not(:first-child):not(:last-child){border-radius:0}.bk-root .bk-bs-input-group-addon,.bk-root .bk-bs-input-group-btn{width:1%;white-space:nowrap;vertical-align:middle}.bk-root .bk-bs-input-group-addon{padding:6px 12px;font-size:12px;font-weight:normal;line-height:1;color:#555;text-align:center;background-color:#eee;border:1px solid #ccc;border-radius:4px}.bk-root .bk-bs-input-group-addon.bk-bs-input-sm{padding:5px 10px;font-size:11px;border-radius:3px}.bk-root .bk-bs-input-group-addon.bk-bs-input-lg{padding:10px 16px;font-size:15px;border-radius:6px}.bk-root .bk-bs-input-group-addon input[type="radio"],.bk-root .bk-bs-input-group-addon input[type="checkbox"]{margin-top:0}.bk-root .bk-bs-input-group .bk-bs-form-control:first-child,.bk-root .bk-bs-input-group-addon:first-child,.bk-root .bk-bs-input-group-btn:first-child>.bk-bs-btn,.bk-root .bk-bs-input-group-btn:first-child>.bk-bs-btn-group>.bk-bs-btn,.bk-root .bk-bs-input-group-btn:first-child>.bk-bs-dropdown-toggle,.bk-root .bk-bs-input-group-btn:last-child>.bk-bs-btn:not(:last-child):not(.bk-bs-dropdown-toggle),.bk-root .bk-bs-input-group-btn:last-child>.bk-bs-btn-group:not(:last-child)>.bk-bs-btn{border-bottom-right-radius:0;border-top-right-radius:0}.bk-root .bk-bs-input-group-addon:first-child{border-right:0}.bk-root .bk-bs-input-group .bk-bs-form-control:last-child,.bk-root .bk-bs-input-group-addon:last-child,.bk-root .bk-bs-input-group-btn:last-child>.bk-bs-btn,.bk-root .bk-bs-input-group-btn:last-child>.bk-bs-btn-group>.bk-bs-btn,.bk-root .bk-bs-input-group-btn:last-child>.bk-bs-dropdown-toggle,.bk-root .bk-bs-input-group-btn:first-child>.bk-bs-btn:not(:first-child),.bk-root .bk-bs-input-group-btn:first-child>.bk-bs-btn-group:not(:first-child)>.bk-bs-btn{border-bottom-left-radius:0;border-top-left-radius:0}.bk-root .bk-bs-input-group-addon:last-child{border-left:0}.bk-root .bk-bs-input-group-btn{position:relative;font-size:0;white-space:nowrap}.bk-root .bk-bs-input-group-btn>.bk-bs-btn{position:relative}.bk-root .bk-bs-input-group-btn>.bk-bs-btn+.bk-bs-btn{margin-left:-1px}.bk-root .bk-bs-input-group-btn>.bk-bs-btn:hover,.bk-root .bk-bs-input-group-btn>.bk-bs-btn:focus,.bk-root .bk-bs-input-group-btn>.bk-bs-btn:active{z-index:2}.bk-root .bk-bs-input-group-btn:first-child>.bk-bs-btn,.bk-root .bk-bs-input-group-btn:first-child>.bk-bs-btn-group{margin-right:-1px}.bk-root .bk-bs-input-group-btn:last-child>.bk-bs-btn,.bk-root .bk-bs-input-group-btn:last-child>.bk-bs-btn-group{margin-left:-1px}.bk-root .bk-bs-nav{margin-bottom:0;padding-left:0;list-style:none}.bk-root .bk-bs-nav>li{position:relative;display:block}.bk-root .bk-bs-nav>li>span{position:relative;display:block;padding:10px 15px}.bk-root .bk-bs-nav>li>span:hover,.bk-root .bk-bs-nav>li>span:focus{text-decoration:none;background-color:#eee}.bk-root .bk-bs-nav>li.bk-bs-disabled>span{color:#999}.bk-root .bk-bs-nav>li.bk-bs-disabled>span:hover,.bk-root .bk-bs-nav>li.bk-bs-disabled>span:focus{color:#999;text-decoration:none;background-color:transparent;cursor:not-allowed}.bk-root .bk-bs-nav-tabs{border-bottom:1px solid #ddd}.bk-root .bk-bs-nav-tabs>li{float:left;margin-bottom:-1px}.bk-root .bk-bs-nav-tabs>li>span{margin-right:2px;line-height:1.42857143;border:1px solid transparent;border-radius:4px 4px 0 0}.bk-root .bk-bs-nav-tabs>li>span:hover{border-color:#eee #eee #ddd;cursor:pointer}.bk-root .bk-bs-nav-tabs>li.bk-bs-active>span,.bk-root .bk-bs-nav-tabs>li.bk-bs-active>span:hover,.bk-root .bk-bs-nav-tabs>li.bk-bs-active>span:focus{color:#555;background-color:#fff;border:1px solid #ddd;border-bottom-color:transparent;cursor:default}.bk-root .bk-bs-tab-content>.bk-bs-tab-pane{display:none}.bk-root .bk-bs-tab-content>.bk-bs-active{display:block}.bk-root .pika-single{z-index:9999;display:block;position:relative;color:#333;background:#fff;border:1px solid #ccc;border-bottom-color:#bbb;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif}.bk-root .pika-single:before,.bk-root .pika-single:after{content:" ";display:table}.bk-root .pika-single:after{clear:both}.bk-root .pika-single{*zoom:1}.bk-root .pika-single.is-hidden{display:none}.bk-root .pika-single.is-bound{position:absolute;box-shadow:0 5px 15px -5px rgba(0,0,0,0.5)}.bk-root .pika-lendar{float:left;width:240px;margin:8px}.bk-root .pika-title{position:relative;text-align:center}.bk-root .pika-label{display:inline-block;*display:inline;position:relative;z-index:9999;overflow:hidden;margin:0;padding:5px 3px;font-size:14px;line-height:20px;font-weight:bold;background-color:#fff}.bk-root .pika-title select{cursor:pointer;position:absolute;z-index:9998;margin:0;left:0;top:5px;filter:alpha(opacity=0);opacity:0}.bk-root .pika-prev,.bk-root .pika-next{display:block;cursor:pointer;position:relative;outline:0;border:0;padding:0;width:20px;height:30px;text-indent:20px;white-space:nowrap;overflow:hidden;background-color:transparent;background-position:center center;background-repeat:no-repeat;background-size:75% 75%;opacity:.5;*position:absolute;*top:0}.bk-root .pika-prev:hover,.bk-root .pika-next:hover{opacity:1}.bk-root .pika-prev,.bk-root .is-rtl .pika-next{float:left;background-image:url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAeCAYAAAAsEj5rAAAAUklEQVR42u3VMQoAIBADQf8Pgj+OD9hG2CtONJB2ymQkKe0HbwAP0xucDiQWARITIDEBEnMgMQ8S8+AqBIl6kKgHiXqQqAeJepBo/z38J/U0uAHlaBkBl9I4GwAAAABJRU5ErkJggg==');*left:0}.bk-root .pika-next,.bk-root .is-rtl .pika-prev{float:right;background-image:url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAeCAYAAAAsEj5rAAAAU0lEQVR42u3VOwoAMAgE0dwfAnNjU26bYkBCFGwfiL9VVWoO+BJ4Gf3gtsEKKoFBNTCoCAYVwaAiGNQGMUHMkjGbgjk2mIONuXo0nC8XnCf1JXgArVIZAQh5TKYAAAAASUVORK5CYII=');*right:0}.bk-root .pika-prev.is-disabled,.bk-root .pika-next.is-disabled{cursor:default;opacity:.2}.bk-root .pika-select{display:inline-block;*display:inline}.bk-root .pika-table{width:100%;border-collapse:collapse;border-spacing:0;border:0}.bk-root .pika-table th,.bk-root .pika-table td{width:14.285714285714286%;padding:0}.bk-root .pika-table th{color:#999;font-size:12px;line-height:25px;font-weight:bold;text-align:center}.bk-root .pika-button{cursor:pointer;display:block;box-sizing:border-box;-moz-box-sizing:border-box;outline:0;border:0;margin:0;width:100%;padding:5px;color:#666;font-size:12px;line-height:15px;text-align:right;background:#f5f5f5}.bk-root .pika-week{font-size:11px;color:#999}.bk-root .is-today .pika-button{color:#3af;font-weight:bold}.bk-root .is-selected .pika-button,.bk-root .has-event .pika-button{color:#fff;font-weight:bold;background:#3af;box-shadow:inset 0 1px 3px #178fe5;border-radius:3px}.bk-root .has-event .pika-button{background:#005da9;box-shadow:inset 0 1px 3px #0076c9}.bk-root .is-disabled .pika-button,.bk-root .is-inrange .pika-button{background:#d5e9f7}.bk-root .is-startrange .pika-button{color:#fff;background:#6cb31d;box-shadow:none;border-radius:3px}.bk-root .is-endrange .pika-button{color:#fff;background:#3af;box-shadow:none;border-radius:3px}.bk-root .is-disabled .pika-button{pointer-events:none;cursor:default;color:#999;opacity:.3}.bk-root .is-outside-current-month .pika-button{color:#999;opacity:.3}.bk-root .is-selection-disabled{pointer-events:none;cursor:default}.bk-root .pika-button:hover,.bk-root .pika-row.pick-whole-week:hover .pika-button{color:#fff;background:#ff8000;box-shadow:none;border-radius:3px}.bk-root .pika-table abbr{border-bottom:0;cursor:help}.bk-root .bk-widget-box{overflow:visible;padding:5px 10px}.bk-root .bk-widget label{margin-bottom:2px}.bk-root .bk-widget{margin-top:10px}.bk-root .bk-widget h1:first-child,.bk-root .bk-widget h2:first-child,.bk-root .bk-widget h3:first-child,.bk-root .bk-widget h4:first-child,.bk-root .bk-widget h5:first-child,.bk-root .bk-widget h6:first-child,.bk-root .bk-widget p:first-child{margin-top:0}.bk-root .bk-widget-form-input{display:block;height:31px;padding:0 12px;background-color:#fff;background-image:none;border:1px solid #ccc;border-radius:4px}.bk-root .bk-widget-form-input:focus{border-color:#66afe9;outline:0;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(102,175,233,0.6);box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(102,175,233,0.6)}.bk-root .bk-widget-form-input::-moz-placeholder{color:#999;opacity:1}.bk-root .bk-widget-form-input:-ms-input-placeholder{color:#999}.bk-root .bk-widget-form-input::-webkit-input-placeholder{color:#999}.bk-root .bk-widget-form-input[disabled],.bk-root .bk-widget-form-input[readonly],fieldset[disabled] .bk-root .bk-widget-form-input{cursor:not-allowed;background-color:#eee;opacity:1}textarea.bk-root .bk-widget-form-input{height:auto}.bk-root .bk-widget-form-textarea{display:block;height:31px;padding:0 12px;background-color:#fff;background-image:none;border:1px solid #ccc;border-radius:4px;height:auto}.bk-root .bk-widget-form-textarea:focus{border-color:#66afe9;outline:0;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(102,175,233,0.6);box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(102,175,233,0.6)}.bk-root .bk-widget-form-textarea::-moz-placeholder{color:#999;opacity:1}.bk-root .bk-widget-form-textarea:-ms-input-placeholder{color:#999}.bk-root .bk-widget-form-textarea::-webkit-input-placeholder{color:#999}.bk-root .bk-widget-form-textarea[disabled],.bk-root .bk-widget-form-textarea[readonly],fieldset[disabled] .bk-root .bk-widget-form-textarea{cursor:not-allowed;background-color:#eee;opacity:1}textarea.bk-root .bk-widget-form-textarea{height:auto}.bk-root .bk-widget button{min-width:100%}.bk-root .bk-widget input[type="text"]{min-width:90%}.bk-root .bk-widget select{min-width:97%}.bk-root .bk-bs-dropdown-toggle .bk-bs-caret{margin-left:5px}.bk-root .bk-bs-dropdown-menu{width:100%}.bk-root .bk-bs-nav-tabs{overflow:hidden}.bk-root .bk-slider label{margin-right:5px}.bk-root .bk-slider .bk-slider-value{display:inline-block;font-weight:600}.bk-root .bk-slider input,.bk-root .bk-slider .bk-slider-value{margin-bottom:5px} \ No newline at end of file diff --git a/templates/newbase.html b/templates/newbase.html index 0945b75a..3c1e2e1f 100644 --- a/templates/newbase.html +++ b/templates/newbase.html @@ -10,23 +10,6 @@ {% block title %}Rowsandall Rowing Data Analytics{% endblock %} - {% block scripts %} {% endblock %} - - - - - - - - - - - - - - - {% analytical_head_top %} @@ -58,14 +41,12 @@ - - + + {% block meta %} {% endblock %} - {% leaflet_js %} - {% leaflet_css %}
          - - {% analytical_head_bottom %} @@ -312,7 +302,7 @@ {% if request|announcements %} -

          What's New?

          +

          News

          {% for a in request|announcements %}
          @@ -421,22 +411,37 @@ - + {% block scripts %} {% endblock %} + + + + + + + + + + + + + + + + + - +