From 42918189b98f0c3ee405bdce4394729b8f8c99b5 Mon Sep 17 00:00:00 2001
From: Ziumper <Ziumper@users.noreply.github.com>
Date: Sat, 14 Dec 2024 10:03:05 +0000
Subject: [PATCH] =?UTF-8?q?Deploying=20to=20gh-pages=20from=20@=20Ziumper/?=
 =?UTF-8?q?ziumper.github.io@31c1484aae84d85cc9590026ab0d43a5a08c32a5=20?=
 =?UTF-8?q?=F0=9F=9A=80?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 assets/css/main.css            | 2 +-
 assets/jupyter/blog.ipynb.html | 2 +-
 feed.xml                       | 2 +-
 pl/feed.xml                    | 2 +-
 pl/sitemap.xml                 | 2 +-
 sitemap.xml                    | 2 +-
 6 files changed, 6 insertions(+), 6 deletions(-)

diff --git a/assets/css/main.css b/assets/css/main.css
index 7f1356f..7c7f627 100644
--- a/assets/css/main.css
+++ b/assets/css/main.css
@@ -221,4 +221,4 @@ td.list-group-category{color:var(--global-theme-color);margin-bottom:.5rem}td.li
 .fi-ie{background-image:url(../img/flags/4x3/ie.svg)}.fi-ie.fis{background-image:url(../img/flags/1x1/ie.svg)}.fi-il{background-image:url(../img/flags/4x3/il.svg)}.fi-il.fis{background-image:url(../img/flags/1x1/il.svg)}.fi-im{background-image:url(../img/flags/4x3/im.svg)}.fi-im.fis{background-image:url(../img/flags/1x1/im.svg)}.fi-in{background-image:url(../img/flags/4x3/in.svg)}.fi-in.fis{background-image:url(../img/flags/1x1/in.svg)}.fi-io{background-image:url(../img/flags/4x3/io.svg)}.fi-io.fis{background-image:url(../img/flags/1x1/io.svg)}.fi-iq{background-image:url(../img/flags/4x3/iq.svg)}.fi-iq.fis{background-image:url(../img/flags/1x1/iq.svg)}.fi-ir{background-image:url(../img/flags/4x3/ir.svg)}.fi-ir.fis{background-image:url(../img/flags/1x1/ir.svg)}.fi-is{background-image:url(../img/flags/4x3/is.svg)}.fi-is.fis{background-image:url(../img/flags/1x1/is.svg)}.fi-it{background-image:url(../img/flags/4x3/it.svg)}.fi-it.fis{background-image:url(../img/flags/1x1/it.svg)}.fi-je{background-image:url(../img/flags/4x3/je.svg)}.fi-je.fis{background-image:url(../img/flags/1x1/je.svg)}.fi-jm{background-image:url(../img/flags/4x3/jm.svg)}.fi-jm.fis{background-image:url(../img/flags/1x1/jm.svg)}.fi-jo{background-image:url(../img/flags/4x3/jo.svg)}.fi-jo.fis{background-image:url(../img/flags/1x1/jo.svg)}.fi-jp{background-image:url(../img/flags/4x3/jp.svg)}.fi-jp.fis{background-image:url(../img/flags/1x1/jp.svg)}.fi-ke{background-image:url(../img/flags/4x3/ke.svg)}.fi-ke.fis{background-image:url(../img/flags/1x1/ke.svg)}.fi-kg{background-image:url(../img/flags/4x3/kg.svg)}.fi-kg.fis{background-image:url(../img/flags/1x1/kg.svg)}.fi-kh{background-image:url(../img/flags/4x3/kh.svg)}.fi-kh.fis{background-image:url(../img/flags/1x1/kh.svg)}.fi-ki{background-image:url(../img/flags/4x3/ki.svg)}.fi-ki.fis{background-image:url(../img/flags/1x1/ki.svg)}.fi-km{background-image:url(../img/flags/4x3/km.svg)}.fi-km.fis{background-image:url(../img/flags/1x1/km.svg)}.fi-kn{background-image:url(../img/flags/4x3/kn.svg)}.fi-kn.fis{background-image:url(../img/flags/1x1/kn.svg)}.fi-kp{background-image:url(../img/flags/4x3/kp.svg)}.fi-kp.fis{background-image:url(../img/flags/1x1/kp.svg)}.fi-kr{background-image:url(../img/flags/4x3/kr.svg)}.fi-kr.fis{background-image:url(../img/flags/1x1/kr.svg)}.fi-kw{background-image:url(../img/flags/4x3/kw.svg)}.fi-kw.fis{background-image:url(../img/flags/1x1/kw.svg)}.fi-ky{background-image:url(../img/flags/4x3/ky.svg)}.fi-ky.fis{background-image:url(../img/flags/1x1/ky.svg)}.fi-kz{background-image:url(../img/flags/4x3/kz.svg)}.fi-kz.fis{background-image:url(../img/flags/1x1/kz.svg)}.fi-la{background-image:url(../img/flags/4x3/la.svg)}.fi-la.fis{background-image:url(../img/flags/1x1/la.svg)}.fi-lb{background-image:url(../img/flags/4x3/lb.svg)}.fi-lb.fis{background-image:url(../img/flags/1x1/lb.svg)}.fi-lc{background-image:url(../img/flags/4x3/lc.svg)}.fi-lc.fis{background-image:url(../img/flags/1x1/lc.svg)}.fi-li{background-image:url(../img/flags/4x3/li.svg)}.fi-li.fis{background-image:url(../img/flags/1x1/li.svg)}.fi-lk{background-image:url(../img/flags/4x3/lk.svg)}.fi-lk.fis{background-image:url(../img/flags/1x1/lk.svg)}.fi-lr{background-image:url(../img/flags/4x3/lr.svg)}.fi-lr.fis{background-image:url(../img/flags/1x1/lr.svg)}.fi-ls{background-image:url(../img/flags/4x3/ls.svg)}.fi-ls.fis{background-image:url(../img/flags/1x1/ls.svg)}.fi-lt{background-image:url(../img/flags/4x3/lt.svg)}.fi-lt.fis{background-image:url(../img/flags/1x1/lt.svg)}.fi-lu{background-image:url(../img/flags/4x3/lu.svg)}.fi-lu.fis{background-image:url(../img/flags/1x1/lu.svg)}.fi-lv{background-image:url(../img/flags/4x3/lv.svg)}.fi-lv.fis{background-image:url(../img/flags/1x1/lv.svg)}.fi-ly{background-image:url(../img/flags/4x3/ly.svg)}.fi-ly.fis{background-image:url(../img/flags/1x1/ly.svg)}.fi-ma{background-image:url(../img/flags/4x3/ma.svg)}.fi-ma.fis{background-image:url(../img/flags/1x1/ma.svg)}.fi-mc{background-image:url(../img/flags/4x3/mc.svg)}.fi-mc.fis{background-image:url(../img/flags/1x1/mc.svg)}.fi-md{background-image:url(../img/flags/4x3/md.svg)}.fi-md.fis{background-image:url(../img/flags/1x1/md.svg)}.fi-me{background-image:url(../img/flags/4x3/me.svg)}.fi-me.fis{background-image:url(../img/flags/1x1/me.svg)}.fi-mf{background-image:url(../img/flags/4x3/mf.svg)}.fi-mf.fis{background-image:url(../img/flags/1x1/mf.svg)}.fi-mg{background-image:url(../img/flags/4x3/mg.svg)}.fi-mg.fis{background-image:url(../img/flags/1x1/mg.svg)}.fi-mh{background-image:url(../img/flags/4x3/mh.svg)}.fi-mh.fis{background-image:url(../img/flags/1x1/mh.svg)}.fi-mk{background-image:url(../img/flags/4x3/mk.svg)}.fi-mk.fis{background-image:url(../img/flags/1x1/mk.svg)}.fi-ml{background-image:url(../img/flags/4x3/ml.svg)}.fi-ml.fis{background-image:url(../img/flags/1x1/ml.svg)}.fi-mm{background-image:url(../img/flags/4x3/mm.svg)}.fi-mm.fis{background-image:url(../img/flags/1x1/mm.svg)}.fi-mn{background-image:url(../img/flags/4x3/mn.svg)}
 .fi-mn.fis{background-image:url(../img/flags/1x1/mn.svg)}.fi-mo{background-image:url(../img/flags/4x3/mo.svg)}.fi-mo.fis{background-image:url(../img/flags/1x1/mo.svg)}.fi-mp{background-image:url(../img/flags/4x3/mp.svg)}.fi-mp.fis{background-image:url(../img/flags/1x1/mp.svg)}.fi-mq{background-image:url(../img/flags/4x3/mq.svg)}.fi-mq.fis{background-image:url(../img/flags/1x1/mq.svg)}.fi-mr{background-image:url(../img/flags/4x3/mr.svg)}.fi-mr.fis{background-image:url(../img/flags/1x1/mr.svg)}.fi-ms{background-image:url(../img/flags/4x3/ms.svg)}.fi-ms.fis{background-image:url(../img/flags/1x1/ms.svg)}.fi-mt{background-image:url(../img/flags/4x3/mt.svg)}.fi-mt.fis{background-image:url(../img/flags/1x1/mt.svg)}.fi-mu{background-image:url(../img/flags/4x3/mu.svg)}.fi-mu.fis{background-image:url(../img/flags/1x1/mu.svg)}.fi-mv{background-image:url(../img/flags/4x3/mv.svg)}.fi-mv.fis{background-image:url(../img/flags/1x1/mv.svg)}.fi-mw{background-image:url(../img/flags/4x3/mw.svg)}.fi-mw.fis{background-image:url(../img/flags/1x1/mw.svg)}.fi-mx{background-image:url(../img/flags/4x3/mx.svg)}.fi-mx.fis{background-image:url(../img/flags/1x1/mx.svg)}.fi-my{background-image:url(../img/flags/4x3/my.svg)}.fi-my.fis{background-image:url(../img/flags/1x1/my.svg)}.fi-mz{background-image:url(../img/flags/4x3/mz.svg)}.fi-mz.fis{background-image:url(../img/flags/1x1/mz.svg)}.fi-na{background-image:url(../img/flags/4x3/na.svg)}.fi-na.fis{background-image:url(../img/flags/1x1/na.svg)}.fi-nc{background-image:url(../img/flags/4x3/nc.svg)}.fi-nc.fis{background-image:url(../img/flags/1x1/nc.svg)}.fi-ne{background-image:url(../img/flags/4x3/ne.svg)}.fi-ne.fis{background-image:url(../img/flags/1x1/ne.svg)}.fi-nf{background-image:url(../img/flags/4x3/nf.svg)}.fi-nf.fis{background-image:url(../img/flags/1x1/nf.svg)}.fi-ng{background-image:url(../img/flags/4x3/ng.svg)}.fi-ng.fis{background-image:url(../img/flags/1x1/ng.svg)}.fi-ni{background-image:url(../img/flags/4x3/ni.svg)}.fi-ni.fis{background-image:url(../img/flags/1x1/ni.svg)}.fi-nl{background-image:url(../img/flags/4x3/nl.svg)}.fi-nl.fis{background-image:url(../img/flags/1x1/nl.svg)}.fi-no{background-image:url(../img/flags/4x3/no.svg)}.fi-no.fis{background-image:url(../img/flags/1x1/no.svg)}.fi-np{background-image:url(../img/flags/4x3/np.svg)}.fi-np.fis{background-image:url(../img/flags/1x1/np.svg)}.fi-nr{background-image:url(../img/flags/4x3/nr.svg)}.fi-nr.fis{background-image:url(../img/flags/1x1/nr.svg)}.fi-nu{background-image:url(../img/flags/4x3/nu.svg)}.fi-nu.fis{background-image:url(../img/flags/1x1/nu.svg)}.fi-nz{background-image:url(../img/flags/4x3/nz.svg)}.fi-nz.fis{background-image:url(../img/flags/1x1/nz.svg)}.fi-om{background-image:url(../img/flags/4x3/om.svg)}.fi-om.fis{background-image:url(../img/flags/1x1/om.svg)}.fi-pa{background-image:url(../img/flags/4x3/pa.svg)}.fi-pa.fis{background-image:url(../img/flags/1x1/pa.svg)}.fi-pe{background-image:url(../img/flags/4x3/pe.svg)}.fi-pe.fis{background-image:url(../img/flags/1x1/pe.svg)}.fi-pf{background-image:url(../img/flags/4x3/pf.svg)}.fi-pf.fis{background-image:url(../img/flags/1x1/pf.svg)}.fi-pg{background-image:url(../img/flags/4x3/pg.svg)}.fi-pg.fis{background-image:url(../img/flags/1x1/pg.svg)}.fi-ph{background-image:url(../img/flags/4x3/ph.svg)}.fi-ph.fis{background-image:url(../img/flags/1x1/ph.svg)}.fi-pk{background-image:url(../img/flags/4x3/pk.svg)}.fi-pk.fis{background-image:url(../img/flags/1x1/pk.svg)}.fi-pl{background-image:url(../img/flags/4x3/pl.svg)}.fi-pl.fis{background-image:url(../img/flags/1x1/pl.svg)}.fi-pm{background-image:url(../img/flags/4x3/pm.svg)}.fi-pm.fis{background-image:url(../img/flags/1x1/pm.svg)}.fi-pn{background-image:url(../img/flags/4x3/pn.svg)}.fi-pn.fis{background-image:url(../img/flags/1x1/pn.svg)}.fi-pr{background-image:url(../img/flags/4x3/pr.svg)}.fi-pr.fis{background-image:url(../img/flags/1x1/pr.svg)}.fi-ps{background-image:url(../img/flags/4x3/ps.svg)}.fi-ps.fis{background-image:url(../img/flags/1x1/ps.svg)}.fi-pt{background-image:url(../img/flags/4x3/pt.svg)}.fi-pt.fis{background-image:url(../img/flags/1x1/pt.svg)}.fi-pw{background-image:url(../img/flags/4x3/pw.svg)}.fi-pw.fis{background-image:url(../img/flags/1x1/pw.svg)}.fi-py{background-image:url(../img/flags/4x3/py.svg)}.fi-py.fis{background-image:url(../img/flags/1x1/py.svg)}.fi-qa{background-image:url(../img/flags/4x3/qa.svg)}.fi-qa.fis{background-image:url(../img/flags/1x1/qa.svg)}.fi-re{background-image:url(../img/flags/4x3/re.svg)}.fi-re.fis{background-image:url(../img/flags/1x1/re.svg)}.fi-ro{background-image:url(../img/flags/4x3/ro.svg)}.fi-ro.fis{background-image:url(../img/flags/1x1/ro.svg)}.fi-rs{background-image:url(../img/flags/4x3/rs.svg)}.fi-rs.fis{background-image:url(../img/flags/1x1/rs.svg)}.fi-ru{background-image:url(../img/flags/4x3/ru.svg)}.fi-ru.fis{background-image:url(../img/flags/1x1/ru.svg)}.fi-rw{background-image:url(../img/flags/4x3/rw.svg)}.fi-rw.fis{background-image:url(../img/flags/1x1/rw.svg)}
 .fi-sa{background-image:url(../img/flags/4x3/sa.svg)}.fi-sa.fis{background-image:url(../img/flags/1x1/sa.svg)}.fi-sb{background-image:url(../img/flags/4x3/sb.svg)}.fi-sb.fis{background-image:url(../img/flags/1x1/sb.svg)}.fi-sc{background-image:url(../img/flags/4x3/sc.svg)}.fi-sc.fis{background-image:url(../img/flags/1x1/sc.svg)}.fi-sd{background-image:url(../img/flags/4x3/sd.svg)}.fi-sd.fis{background-image:url(../img/flags/1x1/sd.svg)}.fi-se{background-image:url(../img/flags/4x3/se.svg)}.fi-se.fis{background-image:url(../img/flags/1x1/se.svg)}.fi-sg{background-image:url(../img/flags/4x3/sg.svg)}.fi-sg.fis{background-image:url(../img/flags/1x1/sg.svg)}.fi-sh{background-image:url(../img/flags/4x3/sh.svg)}.fi-sh.fis{background-image:url(../img/flags/1x1/sh.svg)}.fi-si{background-image:url(../img/flags/4x3/si.svg)}.fi-si.fis{background-image:url(../img/flags/1x1/si.svg)}.fi-sj{background-image:url(../img/flags/4x3/sj.svg)}.fi-sj.fis{background-image:url(../img/flags/1x1/sj.svg)}.fi-sk{background-image:url(../img/flags/4x3/sk.svg)}.fi-sk.fis{background-image:url(../img/flags/1x1/sk.svg)}.fi-sl{background-image:url(../img/flags/4x3/sl.svg)}.fi-sl.fis{background-image:url(../img/flags/1x1/sl.svg)}.fi-sm{background-image:url(../img/flags/4x3/sm.svg)}.fi-sm.fis{background-image:url(../img/flags/1x1/sm.svg)}.fi-sn{background-image:url(../img/flags/4x3/sn.svg)}.fi-sn.fis{background-image:url(../img/flags/1x1/sn.svg)}.fi-so{background-image:url(../img/flags/4x3/so.svg)}.fi-so.fis{background-image:url(../img/flags/1x1/so.svg)}.fi-sr{background-image:url(../img/flags/4x3/sr.svg)}.fi-sr.fis{background-image:url(../img/flags/1x1/sr.svg)}.fi-ss{background-image:url(../img/flags/4x3/ss.svg)}.fi-ss.fis{background-image:url(../img/flags/1x1/ss.svg)}.fi-st{background-image:url(../img/flags/4x3/st.svg)}.fi-st.fis{background-image:url(../img/flags/1x1/st.svg)}.fi-sv{background-image:url(../img/flags/4x3/sv.svg)}.fi-sv.fis{background-image:url(../img/flags/1x1/sv.svg)}.fi-sx{background-image:url(../img/flags/4x3/sx.svg)}.fi-sx.fis{background-image:url(../img/flags/1x1/sx.svg)}.fi-sy{background-image:url(../img/flags/4x3/sy.svg)}.fi-sy.fis{background-image:url(../img/flags/1x1/sy.svg)}.fi-sz{background-image:url(../img/flags/4x3/sz.svg)}.fi-sz.fis{background-image:url(../img/flags/1x1/sz.svg)}.fi-tc{background-image:url(../img/flags/4x3/tc.svg)}.fi-tc.fis{background-image:url(../img/flags/1x1/tc.svg)}.fi-td{background-image:url(../img/flags/4x3/td.svg)}.fi-td.fis{background-image:url(../img/flags/1x1/td.svg)}.fi-tf{background-image:url(../img/flags/4x3/tf.svg)}.fi-tf.fis{background-image:url(../img/flags/1x1/tf.svg)}.fi-tg{background-image:url(../img/flags/4x3/tg.svg)}.fi-tg.fis{background-image:url(../img/flags/1x1/tg.svg)}.fi-th{background-image:url(../img/flags/4x3/th.svg)}.fi-th.fis{background-image:url(../img/flags/1x1/th.svg)}.fi-tj{background-image:url(../img/flags/4x3/tj.svg)}.fi-tj.fis{background-image:url(../img/flags/1x1/tj.svg)}.fi-tk{background-image:url(../img/flags/4x3/tk.svg)}.fi-tk.fis{background-image:url(../img/flags/1x1/tk.svg)}.fi-tl{background-image:url(../img/flags/4x3/tl.svg)}.fi-tl.fis{background-image:url(../img/flags/1x1/tl.svg)}.fi-tm{background-image:url(../img/flags/4x3/tm.svg)}.fi-tm.fis{background-image:url(../img/flags/1x1/tm.svg)}.fi-tn{background-image:url(../img/flags/4x3/tn.svg)}.fi-tn.fis{background-image:url(../img/flags/1x1/tn.svg)}.fi-to{background-image:url(../img/flags/4x3/to.svg)}.fi-to.fis{background-image:url(../img/flags/1x1/to.svg)}.fi-tr{background-image:url(../img/flags/4x3/tr.svg)}.fi-tr.fis{background-image:url(../img/flags/1x1/tr.svg)}.fi-tt{background-image:url(../img/flags/4x3/tt.svg)}.fi-tt.fis{background-image:url(../img/flags/1x1/tt.svg)}.fi-tv{background-image:url(../img/flags/4x3/tv.svg)}.fi-tv.fis{background-image:url(../img/flags/1x1/tv.svg)}.fi-tw{background-image:url(../img/flags/4x3/tw.svg)}.fi-tw.fis{background-image:url(../img/flags/1x1/tw.svg)}.fi-tz{background-image:url(../img/flags/4x3/tz.svg)}.fi-tz.fis{background-image:url(../img/flags/1x1/tz.svg)}.fi-ua{background-image:url(../img/flags/4x3/ua.svg)}.fi-ua.fis{background-image:url(../img/flags/1x1/ua.svg)}.fi-ug{background-image:url(../img/flags/4x3/ug.svg)}.fi-ug.fis{background-image:url(../img/flags/1x1/ug.svg)}.fi-um{background-image:url(../img/flags/4x3/um.svg)}.fi-um.fis{background-image:url(../img/flags/1x1/um.svg)}.fi-us{background-image:url(../img/flags/4x3/us.svg)}.fi-us.fis{background-image:url(../img/flags/1x1/us.svg)}.fi-uy{background-image:url(../img/flags/4x3/uy.svg)}.fi-uy.fis{background-image:url(../img/flags/1x1/uy.svg)}.fi-uz{background-image:url(../img/flags/4x3/uz.svg)}.fi-uz.fis{background-image:url(../img/flags/1x1/uz.svg)}.fi-va{background-image:url(../img/flags/4x3/va.svg)}.fi-va.fis{background-image:url(../img/flags/1x1/va.svg)}.fi-vc{background-image:url(../img/flags/4x3/vc.svg)}.fi-vc.fis{background-image:url(../img/flags/1x1/vc.svg)}.fi-ve{background-image:url(../img/flags/4x3/ve.svg)}
-.fi-ve.fis{background-image:url(../img/flags/1x1/ve.svg)}.fi-vg{background-image:url(../img/flags/4x3/vg.svg)}.fi-vg.fis{background-image:url(../img/flags/1x1/vg.svg)}.fi-vi{background-image:url(../img/flags/4x3/vi.svg)}.fi-vi.fis{background-image:url(../img/flags/1x1/vi.svg)}.fi-vn{background-image:url(../img/flags/4x3/vn.svg)}.fi-vn.fis{background-image:url(../img/flags/1x1/vn.svg)}.fi-vu{background-image:url(../img/flags/4x3/vu.svg)}.fi-vu.fis{background-image:url(../img/flags/1x1/vu.svg)}.fi-wf{background-image:url(../img/flags/4x3/wf.svg)}.fi-wf.fis{background-image:url(../img/flags/1x1/wf.svg)}.fi-ws{background-image:url(../img/flags/4x3/ws.svg)}.fi-ws.fis{background-image:url(../img/flags/1x1/ws.svg)}.fi-ye{background-image:url(../img/flags/4x3/ye.svg)}.fi-ye.fis{background-image:url(../img/flags/1x1/ye.svg)}.fi-yt{background-image:url(../img/flags/4x3/yt.svg)}.fi-yt.fis{background-image:url(../img/flags/1x1/yt.svg)}.fi-za{background-image:url(../img/flags/4x3/za.svg)}.fi-za.fis{background-image:url(../img/flags/1x1/za.svg)}.fi-zm{background-image:url(../img/flags/4x3/zm.svg)}.fi-zm.fis{background-image:url(../img/flags/1x1/zm.svg)}.fi-zw{background-image:url(../img/flags/4x3/zw.svg)}.fi-zw.fis{background-image:url(../img/flags/1x1/zw.svg)}.fi-arab{background-image:url(../img/flags/4x3/arab.svg)}.fi-arab.fis{background-image:url(../img/flags/1x1/arab.svg)}.fi-cefta{background-image:url(../img/flags/4x3/cefta.svg)}.fi-cefta.fis{background-image:url(../img/flags/1x1/cefta.svg)}.fi-cp{background-image:url(../img/flags/4x3/cp.svg)}.fi-cp.fis{background-image:url(../img/flags/1x1/cp.svg)}.fi-dg{background-image:url(../img/flags/4x3/dg.svg)}.fi-dg.fis{background-image:url(../img/flags/1x1/dg.svg)}.fi-eac{background-image:url(../img/flags/4x3/eac.svg)}.fi-eac.fis{background-image:url(../img/flags/1x1/eac.svg)}.fi-es-ct{background-image:url(../img/flags/4x3/es-ct.svg)}.fi-es-ct.fis{background-image:url(../img/flags/1x1/es-ct.svg)}.fi-es-ga{background-image:url(../img/flags/4x3/es-ga.svg)}.fi-es-ga.fis{background-image:url(../img/flags/1x1/es-ga.svg)}.fi-es-pv{background-image:url(../img/flags/4x3/es-pv.svg)}.fi-es-pv.fis{background-image:url(../img/flags/1x1/es-pv.svg)}.fi-eu{background-image:url(../img/flags/4x3/eu.svg)}.fi-eu.fis{background-image:url(../img/flags/1x1/eu.svg)}.fi-gb-eng{background-image:url(../img/flags/4x3/gb-eng.svg)}.fi-gb-eng.fis{background-image:url(../img/flags/1x1/gb-eng.svg)}.fi-gb-nir{background-image:url(../img/flags/4x3/gb-nir.svg)}.fi-gb-nir.fis{background-image:url(../img/flags/1x1/gb-nir.svg)}.fi-gb-sct{background-image:url(../img/flags/4x3/gb-sct.svg)}.fi-gb-sct.fis{background-image:url(../img/flags/1x1/gb-sct.svg)}.fi-gb-wls{background-image:url(../img/flags/4x3/gb-wls.svg)}.fi-gb-wls.fis{background-image:url(../img/flags/1x1/gb-wls.svg)}.fi-ic{background-image:url(../img/flags/4x3/ic.svg)}.fi-ic.fis{background-image:url(../img/flags/1x1/ic.svg)}.fi-pc{background-image:url(../img/flags/4x3/pc.svg)}.fi-pc.fis{background-image:url(../img/flags/1x1/pc.svg)}.fi-sh-ac{background-image:url(../img/flags/4x3/sh-ac.svg)}.fi-sh-ac.fis{background-image:url(../img/flags/1x1/sh-ac.svg)}.fi-sh-hl{background-image:url(../img/flags/4x3/sh-hl.svg)}.fi-sh-hl.fis{background-image:url(../img/flags/1x1/sh-hl.svg)}.fi-sh-ta{background-image:url(../img/flags/4x3/sh-ta.svg)}.fi-sh-ta.fis{background-image:url(../img/flags/1x1/sh-ta.svg)}.fi-un{background-image:url(../img/flags/4x3/un.svg)}.fi-un.fis{background-image:url(../img/flags/1x1/un.svg)}.fi-xk{background-image:url(../img/flags/4x3/xk.svg)}.fi-xk.fis{background-image:url(../img/flags/1x1/xk.svg)}.projects h2.category{color:var(--global-theme-color)}.post .links{padding-bottom:30px}.btn.btn-amber{color:var(--global-code-bg-color)}.btn.btn-amber:hover{color:var(--global-hover-text-color)}
\ No newline at end of file
+.fi-ve.fis{background-image:url(../img/flags/1x1/ve.svg)}.fi-vg{background-image:url(../img/flags/4x3/vg.svg)}.fi-vg.fis{background-image:url(../img/flags/1x1/vg.svg)}.fi-vi{background-image:url(../img/flags/4x3/vi.svg)}.fi-vi.fis{background-image:url(../img/flags/1x1/vi.svg)}.fi-vn{background-image:url(../img/flags/4x3/vn.svg)}.fi-vn.fis{background-image:url(../img/flags/1x1/vn.svg)}.fi-vu{background-image:url(../img/flags/4x3/vu.svg)}.fi-vu.fis{background-image:url(../img/flags/1x1/vu.svg)}.fi-wf{background-image:url(../img/flags/4x3/wf.svg)}.fi-wf.fis{background-image:url(../img/flags/1x1/wf.svg)}.fi-ws{background-image:url(../img/flags/4x3/ws.svg)}.fi-ws.fis{background-image:url(../img/flags/1x1/ws.svg)}.fi-ye{background-image:url(../img/flags/4x3/ye.svg)}.fi-ye.fis{background-image:url(../img/flags/1x1/ye.svg)}.fi-yt{background-image:url(../img/flags/4x3/yt.svg)}.fi-yt.fis{background-image:url(../img/flags/1x1/yt.svg)}.fi-za{background-image:url(../img/flags/4x3/za.svg)}.fi-za.fis{background-image:url(../img/flags/1x1/za.svg)}.fi-zm{background-image:url(../img/flags/4x3/zm.svg)}.fi-zm.fis{background-image:url(../img/flags/1x1/zm.svg)}.fi-zw{background-image:url(../img/flags/4x3/zw.svg)}.fi-zw.fis{background-image:url(../img/flags/1x1/zw.svg)}.fi-arab{background-image:url(../img/flags/4x3/arab.svg)}.fi-arab.fis{background-image:url(../img/flags/1x1/arab.svg)}.fi-cefta{background-image:url(../img/flags/4x3/cefta.svg)}.fi-cefta.fis{background-image:url(../img/flags/1x1/cefta.svg)}.fi-cp{background-image:url(../img/flags/4x3/cp.svg)}.fi-cp.fis{background-image:url(../img/flags/1x1/cp.svg)}.fi-dg{background-image:url(../img/flags/4x3/dg.svg)}.fi-dg.fis{background-image:url(../img/flags/1x1/dg.svg)}.fi-eac{background-image:url(../img/flags/4x3/eac.svg)}.fi-eac.fis{background-image:url(../img/flags/1x1/eac.svg)}.fi-es-ct{background-image:url(../img/flags/4x3/es-ct.svg)}.fi-es-ct.fis{background-image:url(../img/flags/1x1/es-ct.svg)}.fi-es-ga{background-image:url(../img/flags/4x3/es-ga.svg)}.fi-es-ga.fis{background-image:url(../img/flags/1x1/es-ga.svg)}.fi-es-pv{background-image:url(../img/flags/4x3/es-pv.svg)}.fi-es-pv.fis{background-image:url(../img/flags/1x1/es-pv.svg)}.fi-eu{background-image:url(../img/flags/4x3/eu.svg)}.fi-eu.fis{background-image:url(../img/flags/1x1/eu.svg)}.fi-gb-eng{background-image:url(../img/flags/4x3/gb-eng.svg)}.fi-gb-eng.fis{background-image:url(../img/flags/1x1/gb-eng.svg)}.fi-gb-nir{background-image:url(../img/flags/4x3/gb-nir.svg)}.fi-gb-nir.fis{background-image:url(../img/flags/1x1/gb-nir.svg)}.fi-gb-sct{background-image:url(../img/flags/4x3/gb-sct.svg)}.fi-gb-sct.fis{background-image:url(../img/flags/1x1/gb-sct.svg)}.fi-gb-wls{background-image:url(../img/flags/4x3/gb-wls.svg)}.fi-gb-wls.fis{background-image:url(../img/flags/1x1/gb-wls.svg)}.fi-ic{background-image:url(../img/flags/4x3/ic.svg)}.fi-ic.fis{background-image:url(../img/flags/1x1/ic.svg)}.fi-pc{background-image:url(../img/flags/4x3/pc.svg)}.fi-pc.fis{background-image:url(../img/flags/1x1/pc.svg)}.fi-sh-ac{background-image:url(../img/flags/4x3/sh-ac.svg)}.fi-sh-ac.fis{background-image:url(../img/flags/1x1/sh-ac.svg)}.fi-sh-hl{background-image:url(../img/flags/4x3/sh-hl.svg)}.fi-sh-hl.fis{background-image:url(../img/flags/1x1/sh-hl.svg)}.fi-sh-ta{background-image:url(../img/flags/4x3/sh-ta.svg)}.fi-sh-ta.fis{background-image:url(../img/flags/1x1/sh-ta.svg)}.fi-un{background-image:url(../img/flags/4x3/un.svg)}.fi-un.fis{background-image:url(../img/flags/1x1/un.svg)}.fi-xk{background-image:url(../img/flags/4x3/xk.svg)}.fi-xk.fis{background-image:url(../img/flags/1x1/xk.svg)}.projects h2.category{color:var(--global-theme-color)}.btn.btn-amber{color:var(--global-code-bg-color)}.btn.btn-amber:hover{color:var(--global-hover-text-color)}.post .links{padding-bottom:30px}.post .links .btn.btn-amber{color:var(--global-back-to-top-text-color)}.post .links .btn.btn-amber:hover{color:var(--global-text-color)}
\ No newline at end of file
diff --git a/assets/jupyter/blog.ipynb.html b/assets/jupyter/blog.ipynb.html
index 422ced6..6734fb7 100644
--- a/assets/jupyter/blog.ipynb.html
+++ b/assets/jupyter/blog.ipynb.html
@@ -1,4 +1,4 @@
-<!DOCTYPE html> <html lang="en"> <head><meta charset="utf-8"/> <meta content="width=device-width, initial-scale=1.0" name="viewport"/> <title>jekyll-jupyter-notebook20241205-1874-jiju1g</title><script src="https://cdnjs.cloudflare.com/ajax/libs/require.js/2.1.10/require.min.js"></script> <style type="text/css">pre{line-height:125%}td.linenos .normal{color:inherit;background-color:transparent;padding-left:5px;padding-right:5px}span.linenos{color:inherit;background-color:transparent;padding-left:5px;padding-right:5px}td.linenos .special{color:#000;background-color:#ffffc0;padding-left:5px;padding-right:5px}span.linenos.special{color:#000;background-color:#ffffc0;padding-left:5px;padding-right:5px}.highlight .hll{background-color:var(--jp-cell-editor-active-background)}.highlight{background:var(--jp-cell-editor-background);color:var(--jp-mirror-editor-variable-color)}.highlight .c{color:var(--jp-mirror-editor-comment-color);font-style:italic}.highlight .err{color:var(--jp-mirror-editor-error-color)}.highlight .k{color:var(--jp-mirror-editor-keyword-color);font-weight:bold}.highlight .o{color:var(--jp-mirror-editor-operator-color);font-weight:bold}.highlight .p{color:var(--jp-mirror-editor-punctuation-color)}.highlight .ch{color:var(--jp-mirror-editor-comment-color);font-style:italic}.highlight .cm{color:var(--jp-mirror-editor-comment-color);font-style:italic}.highlight .cp{color:var(--jp-mirror-editor-comment-color);font-style:italic}.highlight .cpf{color:var(--jp-mirror-editor-comment-color);font-style:italic}.highlight .c1{color:var(--jp-mirror-editor-comment-color);font-style:italic}.highlight .cs{color:var(--jp-mirror-editor-comment-color);font-style:italic}.highlight .kc{color:var(--jp-mirror-editor-keyword-color);font-weight:bold}.highlight .kd{color:var(--jp-mirror-editor-keyword-color);font-weight:bold}.highlight .kn{color:var(--jp-mirror-editor-keyword-color);font-weight:bold}.highlight .kp{color:var(--jp-mirror-editor-keyword-color);font-weight:bold}.highlight .kr{color:var(--jp-mirror-editor-keyword-color);font-weight:bold}.highlight .kt{color:var(--jp-mirror-editor-keyword-color);font-weight:bold}.highlight .m{color:var(--jp-mirror-editor-number-color)}.highlight .s{color:var(--jp-mirror-editor-string-color)}.highlight .ow{color:var(--jp-mirror-editor-operator-color);font-weight:bold}.highlight .w{color:var(--jp-mirror-editor-variable-color)}.highlight .mb{color:var(--jp-mirror-editor-number-color)}.highlight .mf{color:var(--jp-mirror-editor-number-color)}.highlight .mh{color:var(--jp-mirror-editor-number-color)}.highlight .mi{color:var(--jp-mirror-editor-number-color)}.highlight .mo{color:var(--jp-mirror-editor-number-color)}.highlight .sa{color:var(--jp-mirror-editor-string-color)}.highlight .sb{color:var(--jp-mirror-editor-string-color)}.highlight .sc{color:var(--jp-mirror-editor-string-color)}.highlight .dl{color:var(--jp-mirror-editor-string-color)}.highlight .sd{color:var(--jp-mirror-editor-string-color)}.highlight .s2{color:var(--jp-mirror-editor-string-color)}.highlight .se{color:var(--jp-mirror-editor-string-color)}.highlight .sh{color:var(--jp-mirror-editor-string-color)}.highlight .si{color:var(--jp-mirror-editor-string-color)}.highlight .sx{color:var(--jp-mirror-editor-string-color)}.highlight .sr{color:var(--jp-mirror-editor-string-color)}.highlight .s1{color:var(--jp-mirror-editor-string-color)}.highlight .ss{color:var(--jp-mirror-editor-string-color)}.highlight .il{color:var(--jp-mirror-editor-number-color)}</style> <style type="text/css">[data-jp-theme-scrollbars='true']{scrollbar-color:rgb(var(--jp-scrollbar-thumb-color)) var(--jp-scrollbar-background-color)}[data-jp-theme-scrollbars='true'] .CodeMirror-hscrollbar,[data-jp-theme-scrollbars='true'] .CodeMirror-vscrollbar{scrollbar-color:rgba(var(--jp-scrollbar-thumb-color),0.5) transparent}.jp-scrollbar-tiny{scrollbar-color:rgba(var(--jp-scrollbar-thumb-color),0.5) transparent;scrollbar-width:thin}.jp-scrollbar-tiny::-webkit-scrollbar,.jp-scrollbar-tiny::-webkit-scrollbar-corner{background-color:transparent;height:4px;width:4px}.jp-scrollbar-tiny::-webkit-scrollbar-thumb{background:rgba(var(--jp-scrollbar-thumb-color),0.5)}.jp-scrollbar-tiny::-webkit-scrollbar-track:horizontal{border-left:0 solid transparent;border-right:0 solid transparent}.jp-scrollbar-tiny::-webkit-scrollbar-track:vertical{border-top:0 solid transparent;border-bottom:0 solid transparent}.lm-ScrollBar[data-orientation='horizontal']{min-height:16px;max-height:16px;min-width:45px;border-top:1px solid #a0a0a0}.lm-ScrollBar[data-orientation='vertical']{min-width:16px;max-width:16px;min-height:45px;border-left:1px solid #a0a0a0}.lm-ScrollBar-button{background-color:#f0f0f0;background-position:center center;min-height:15px;max-height:15px;min-width:15px;max-width:15px}.lm-ScrollBar-button:hover{background-color:#dadada}.lm-ScrollBar-button.lm-mod-active{background-color:#cdcdcd}.lm-ScrollBar-track{background:#f0f0f0}.lm-ScrollBar-thumb{background:#cdcdcd}.lm-ScrollBar-thumb:hover{background:#bababa}.lm-ScrollBar-thumb.lm-mod-active{background:#a0a0a0}.lm-ScrollBar[data-orientation='horizontal'] .lm-ScrollBar-thumb{height:100%;min-width:15px;border-left:1px solid #a0a0a0;border-right:1px solid #a0a0a0}.lm-ScrollBar[data-orientation='vertical'] .lm-ScrollBar-thumb{width:100%;min-height:15px;border-top:1px solid #a0a0a0;border-bottom:1px solid #a0a0a0}.lm-ScrollBar[data-orientation='horizontal'] .lm-ScrollBar-button[data-action='decrement']{background-image:var(--jp-icon-caret-left);background-size:17px}.lm-ScrollBar[data-orientation='horizontal'] .lm-ScrollBar-button[data-action='increment']{background-image:var(--jp-icon-caret-right);background-size:17px}.lm-ScrollBar[data-orientation='vertical'] .lm-ScrollBar-button[data-action='decrement']{background-image:var(--jp-icon-caret-up);background-size:17px}.lm-ScrollBar[data-orientation='vertical'] .lm-ScrollBar-button[data-action='increment']{background-image:var(--jp-icon-caret-down);background-size:17px}.lm-Widget{box-sizing:border-box;position:relative;overflow:hidden}.lm-Widget.lm-mod-hidden{display:none!important}.lm-AccordionPanel[data-orientation='horizontal']>.lm-AccordionPanel-title{display:block;transform-origin:top left;transform:rotate(-90deg) translate(-100%)}.lm-CommandPalette{display:flex;flex-direction:column;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.lm-CommandPalette-search{flex:0 0 auto}.lm-CommandPalette-content{flex:1 1 auto;margin:0;padding:0;min-height:0;overflow:auto;list-style-type:none}.lm-CommandPalette-header{overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.lm-CommandPalette-item{display:flex;flex-direction:row}.lm-CommandPalette-itemIcon{flex:0 0 auto}.lm-CommandPalette-itemContent{flex:1 1 auto;overflow:hidden}.lm-CommandPalette-itemShortcut{flex:0 0 auto}.lm-CommandPalette-itemLabel{overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.lm-close-icon{border:1px solid transparent;background-color:transparent;position:absolute;z-index:1;right:3%;top:0;bottom:0;margin:auto;padding:7px 0;display:none;vertical-align:middle;outline:0;cursor:pointer}.lm-close-icon:after{content:'X';display:block;width:15px;height:15px;text-align:center;color:#000;font-weight:normal;font-size:12px;cursor:pointer}.lm-DockPanel{z-index:0}.lm-DockPanel-widget{z-index:0}.lm-DockPanel-tabBar{z-index:1}.lm-DockPanel-handle{z-index:2}.lm-DockPanel-handle.lm-mod-hidden{display:none!important}.lm-DockPanel-handle:after{position:absolute;top:0;left:0;width:100%;height:100%;content:''}.lm-DockPanel-handle[data-orientation='horizontal']{cursor:ew-resize}.lm-DockPanel-handle[data-orientation='vertical']{cursor:ns-resize}.lm-DockPanel-handle[data-orientation='horizontal']:after{left:50%;min-width:8px;transform:translateX(-50%)}.lm-DockPanel-handle[data-orientation='vertical']:after{top:50%;min-height:8px;transform:translateY(-50%)}.lm-DockPanel-overlay{z-index:3;box-sizing:border-box;pointer-events:none}
+<!DOCTYPE html> <html lang="en"> <head><meta charset="utf-8"/> <meta content="width=device-width, initial-scale=1.0" name="viewport"/> <title>jekyll-jupyter-notebook20241214-2361-ym8vv3</title><script src="https://cdnjs.cloudflare.com/ajax/libs/require.js/2.1.10/require.min.js"></script> <style type="text/css">pre{line-height:125%}td.linenos .normal{color:inherit;background-color:transparent;padding-left:5px;padding-right:5px}span.linenos{color:inherit;background-color:transparent;padding-left:5px;padding-right:5px}td.linenos .special{color:#000;background-color:#ffffc0;padding-left:5px;padding-right:5px}span.linenos.special{color:#000;background-color:#ffffc0;padding-left:5px;padding-right:5px}.highlight .hll{background-color:var(--jp-cell-editor-active-background)}.highlight{background:var(--jp-cell-editor-background);color:var(--jp-mirror-editor-variable-color)}.highlight .c{color:var(--jp-mirror-editor-comment-color);font-style:italic}.highlight .err{color:var(--jp-mirror-editor-error-color)}.highlight .k{color:var(--jp-mirror-editor-keyword-color);font-weight:bold}.highlight .o{color:var(--jp-mirror-editor-operator-color);font-weight:bold}.highlight .p{color:var(--jp-mirror-editor-punctuation-color)}.highlight .ch{color:var(--jp-mirror-editor-comment-color);font-style:italic}.highlight .cm{color:var(--jp-mirror-editor-comment-color);font-style:italic}.highlight .cp{color:var(--jp-mirror-editor-comment-color);font-style:italic}.highlight .cpf{color:var(--jp-mirror-editor-comment-color);font-style:italic}.highlight .c1{color:var(--jp-mirror-editor-comment-color);font-style:italic}.highlight .cs{color:var(--jp-mirror-editor-comment-color);font-style:italic}.highlight .kc{color:var(--jp-mirror-editor-keyword-color);font-weight:bold}.highlight .kd{color:var(--jp-mirror-editor-keyword-color);font-weight:bold}.highlight .kn{color:var(--jp-mirror-editor-keyword-color);font-weight:bold}.highlight .kp{color:var(--jp-mirror-editor-keyword-color);font-weight:bold}.highlight .kr{color:var(--jp-mirror-editor-keyword-color);font-weight:bold}.highlight .kt{color:var(--jp-mirror-editor-keyword-color);font-weight:bold}.highlight .m{color:var(--jp-mirror-editor-number-color)}.highlight .s{color:var(--jp-mirror-editor-string-color)}.highlight .ow{color:var(--jp-mirror-editor-operator-color);font-weight:bold}.highlight .w{color:var(--jp-mirror-editor-variable-color)}.highlight .mb{color:var(--jp-mirror-editor-number-color)}.highlight .mf{color:var(--jp-mirror-editor-number-color)}.highlight .mh{color:var(--jp-mirror-editor-number-color)}.highlight .mi{color:var(--jp-mirror-editor-number-color)}.highlight .mo{color:var(--jp-mirror-editor-number-color)}.highlight .sa{color:var(--jp-mirror-editor-string-color)}.highlight .sb{color:var(--jp-mirror-editor-string-color)}.highlight .sc{color:var(--jp-mirror-editor-string-color)}.highlight .dl{color:var(--jp-mirror-editor-string-color)}.highlight .sd{color:var(--jp-mirror-editor-string-color)}.highlight .s2{color:var(--jp-mirror-editor-string-color)}.highlight .se{color:var(--jp-mirror-editor-string-color)}.highlight .sh{color:var(--jp-mirror-editor-string-color)}.highlight .si{color:var(--jp-mirror-editor-string-color)}.highlight .sx{color:var(--jp-mirror-editor-string-color)}.highlight .sr{color:var(--jp-mirror-editor-string-color)}.highlight .s1{color:var(--jp-mirror-editor-string-color)}.highlight .ss{color:var(--jp-mirror-editor-string-color)}.highlight .il{color:var(--jp-mirror-editor-number-color)}</style> <style type="text/css">[data-jp-theme-scrollbars='true']{scrollbar-color:rgb(var(--jp-scrollbar-thumb-color)) var(--jp-scrollbar-background-color)}[data-jp-theme-scrollbars='true'] .CodeMirror-hscrollbar,[data-jp-theme-scrollbars='true'] .CodeMirror-vscrollbar{scrollbar-color:rgba(var(--jp-scrollbar-thumb-color),0.5) transparent}.jp-scrollbar-tiny{scrollbar-color:rgba(var(--jp-scrollbar-thumb-color),0.5) transparent;scrollbar-width:thin}.jp-scrollbar-tiny::-webkit-scrollbar,.jp-scrollbar-tiny::-webkit-scrollbar-corner{background-color:transparent;height:4px;width:4px}.jp-scrollbar-tiny::-webkit-scrollbar-thumb{background:rgba(var(--jp-scrollbar-thumb-color),0.5)}.jp-scrollbar-tiny::-webkit-scrollbar-track:horizontal{border-left:0 solid transparent;border-right:0 solid transparent}.jp-scrollbar-tiny::-webkit-scrollbar-track:vertical{border-top:0 solid transparent;border-bottom:0 solid transparent}.lm-ScrollBar[data-orientation='horizontal']{min-height:16px;max-height:16px;min-width:45px;border-top:1px solid #a0a0a0}.lm-ScrollBar[data-orientation='vertical']{min-width:16px;max-width:16px;min-height:45px;border-left:1px solid #a0a0a0}.lm-ScrollBar-button{background-color:#f0f0f0;background-position:center center;min-height:15px;max-height:15px;min-width:15px;max-width:15px}.lm-ScrollBar-button:hover{background-color:#dadada}.lm-ScrollBar-button.lm-mod-active{background-color:#cdcdcd}.lm-ScrollBar-track{background:#f0f0f0}.lm-ScrollBar-thumb{background:#cdcdcd}.lm-ScrollBar-thumb:hover{background:#bababa}.lm-ScrollBar-thumb.lm-mod-active{background:#a0a0a0}.lm-ScrollBar[data-orientation='horizontal'] .lm-ScrollBar-thumb{height:100%;min-width:15px;border-left:1px solid #a0a0a0;border-right:1px solid #a0a0a0}.lm-ScrollBar[data-orientation='vertical'] .lm-ScrollBar-thumb{width:100%;min-height:15px;border-top:1px solid #a0a0a0;border-bottom:1px solid #a0a0a0}.lm-ScrollBar[data-orientation='horizontal'] .lm-ScrollBar-button[data-action='decrement']{background-image:var(--jp-icon-caret-left);background-size:17px}.lm-ScrollBar[data-orientation='horizontal'] .lm-ScrollBar-button[data-action='increment']{background-image:var(--jp-icon-caret-right);background-size:17px}.lm-ScrollBar[data-orientation='vertical'] .lm-ScrollBar-button[data-action='decrement']{background-image:var(--jp-icon-caret-up);background-size:17px}.lm-ScrollBar[data-orientation='vertical'] .lm-ScrollBar-button[data-action='increment']{background-image:var(--jp-icon-caret-down);background-size:17px}.lm-Widget{box-sizing:border-box;position:relative;overflow:hidden}.lm-Widget.lm-mod-hidden{display:none!important}.lm-AccordionPanel[data-orientation='horizontal']>.lm-AccordionPanel-title{display:block;transform-origin:top left;transform:rotate(-90deg) translate(-100%)}.lm-CommandPalette{display:flex;flex-direction:column;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.lm-CommandPalette-search{flex:0 0 auto}.lm-CommandPalette-content{flex:1 1 auto;margin:0;padding:0;min-height:0;overflow:auto;list-style-type:none}.lm-CommandPalette-header{overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.lm-CommandPalette-item{display:flex;flex-direction:row}.lm-CommandPalette-itemIcon{flex:0 0 auto}.lm-CommandPalette-itemContent{flex:1 1 auto;overflow:hidden}.lm-CommandPalette-itemShortcut{flex:0 0 auto}.lm-CommandPalette-itemLabel{overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.lm-close-icon{border:1px solid transparent;background-color:transparent;position:absolute;z-index:1;right:3%;top:0;bottom:0;margin:auto;padding:7px 0;display:none;vertical-align:middle;outline:0;cursor:pointer}.lm-close-icon:after{content:'X';display:block;width:15px;height:15px;text-align:center;color:#000;font-weight:normal;font-size:12px;cursor:pointer}.lm-DockPanel{z-index:0}.lm-DockPanel-widget{z-index:0}.lm-DockPanel-tabBar{z-index:1}.lm-DockPanel-handle{z-index:2}.lm-DockPanel-handle.lm-mod-hidden{display:none!important}.lm-DockPanel-handle:after{position:absolute;top:0;left:0;width:100%;height:100%;content:''}.lm-DockPanel-handle[data-orientation='horizontal']{cursor:ew-resize}.lm-DockPanel-handle[data-orientation='vertical']{cursor:ns-resize}.lm-DockPanel-handle[data-orientation='horizontal']:after{left:50%;min-width:8px;transform:translateX(-50%)}.lm-DockPanel-handle[data-orientation='vertical']:after{top:50%;min-height:8px;transform:translateY(-50%)}.lm-DockPanel-overlay{z-index:3;box-sizing:border-box;pointer-events:none}
 .lm-DockPanel-overlay.lm-mod-hidden{display:none!important}.lm-Menu{z-index:10000;position:absolute;white-space:nowrap;overflow-x:hidden;overflow-y:auto;outline:0;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.lm-Menu-content{margin:0;padding:0;display:table;list-style-type:none}.lm-Menu-item{display:table-row}.lm-Menu-item.lm-mod-hidden,.lm-Menu-item.lm-mod-collapsed{display:none!important}.lm-Menu-itemIcon,.lm-Menu-itemSubmenuIcon{display:table-cell;text-align:center}.lm-Menu-itemLabel{display:table-cell;text-align:left}.lm-Menu-itemShortcut{display:table-cell;text-align:right}.lm-MenuBar{outline:0;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.lm-MenuBar-content{margin:0;padding:0;display:flex;flex-direction:row;list-style-type:none}.lm-MenuBar-item{box-sizing:border-box}.lm-MenuBar-itemIcon,.lm-MenuBar-itemLabel{display:inline-block}.lm-ScrollBar{display:flex;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.lm-ScrollBar[data-orientation='horizontal']{flex-direction:row}.lm-ScrollBar[data-orientation='vertical']{flex-direction:column}.lm-ScrollBar-button{box-sizing:border-box;flex:0 0 auto}.lm-ScrollBar-track{box-sizing:border-box;position:relative;overflow:hidden;flex:1 1 auto}.lm-ScrollBar-thumb{box-sizing:border-box;position:absolute}.lm-SplitPanel-child{z-index:0}.lm-SplitPanel-handle{z-index:1}.lm-SplitPanel-handle.lm-mod-hidden{display:none!important}.lm-SplitPanel-handle:after{position:absolute;top:0;left:0;width:100%;height:100%;content:''}.lm-SplitPanel[data-orientation='horizontal']>.lm-SplitPanel-handle{cursor:ew-resize}.lm-SplitPanel[data-orientation='vertical']>.lm-SplitPanel-handle{cursor:ns-resize}.lm-SplitPanel[data-orientation='horizontal']>.lm-SplitPanel-handle:after{left:50%;min-width:8px;transform:translateX(-50%)}.lm-SplitPanel[data-orientation='vertical']>.lm-SplitPanel-handle:after{top:50%;min-height:8px;transform:translateY(-50%)}.lm-TabBar{display:flex;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.lm-TabBar[data-orientation='horizontal']{flex-direction:row;align-items:flex-end}.lm-TabBar[data-orientation='vertical']{flex-direction:column;align-items:flex-end}.lm-TabBar-content{margin:0;padding:0;display:flex;flex:1 1 auto;list-style-type:none}.lm-TabBar[data-orientation='horizontal']>.lm-TabBar-content{flex-direction:row}.lm-TabBar[data-orientation='vertical']>.lm-TabBar-content{flex-direction:column}.lm-TabBar-tab{display:flex;flex-direction:row;box-sizing:border-box;overflow:hidden;touch-action:none}.lm-TabBar-tabIcon,.lm-TabBar-tabCloseIcon{flex:0 0 auto}.lm-TabBar-tabLabel{flex:1 1 auto;overflow:hidden;white-space:nowrap}.lm-TabBar-tabInput{user-select:all;width:100%;box-sizing:border-box}.lm-TabBar-tab.lm-mod-hidden{display:none!important}.lm-TabBar-addButton.lm-mod-hidden{display:none!important}.lm-TabBar.lm-mod-dragging .lm-TabBar-tab{position:relative}.lm-TabBar.lm-mod-dragging[data-orientation='horizontal'] .lm-TabBar-tab{left:0;transition:left 150ms ease}.lm-TabBar.lm-mod-dragging[data-orientation='vertical'] .lm-TabBar-tab{top:0;transition:top 150ms ease}.lm-TabBar.lm-mod-dragging .lm-TabBar-tab.lm-mod-dragging{transition:none}.lm-TabBar-tabLabel .lm-TabBar-tabInput{user-select:all;width:100%;box-sizing:border-box;background:inherit}.lm-TabPanel-tabBar{z-index:1}.lm-TabPanel-stackedPanel{z-index:0}.jp-Collapse{display:flex;flex-direction:column;align-items:stretch}.jp-Collapse-header{padding:1px 12px;background-color:var(--jp-layout-color1);border-bottom:solid var(--jp-border-width) var(--jp-border-color2);color:var(--jp-ui-font-color1);cursor:pointer;display:flex;align-items:center;font-size:var(--jp-ui-font-size0);font-weight:600;text-transform:uppercase;user-select:none}.jp-Collapser-icon{height:16px}.jp-Collapse-header-collapsed .jp-Collapser-icon{transform:rotate(-90deg);margin:auto 0}.jp-Collapser-title{line-height:25px}.jp-Collapse-contents{padding:0 12px;background-color:var(--jp-layout-color1);color:var(--jp-ui-font-color1);overflow:auto}:root{--jp-icon-add-above:url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTQiIGhlaWdodD0iMTQiIHZpZXdCb3g9IjAgMCAxNCAxNCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPGcgY2xpcC1wYXRoPSJ1cmwoI2NsaXAwXzEzN18xOTQ5MikiPgo8cGF0aCBjbGFzcz0ianAtaWNvbjMiIGQ9Ik00Ljc1IDQuOTMwNjZINi42MjVWNi44MDU2NkM2LjYyNSA3LjAxMTkxIDYuNzkzNzUgNy4xODA2NiA3IDcuMTgwNjZDNy4yMDYyNSA3LjE4MDY2IDcuMzc1IDcuMDExOTEgNy4zNzUgNi44MDU2NlY0LjkzMDY2SDkuMjVDOS40NTYyNSA0LjkzMDY2IDkuNjI1IDQuNzYxOTEgOS42MjUgNC41NTU2NkM5LjYyNSA0LjM0OTQxIDkuNDU2MjUgNC4xODA2NiA5LjI1IDQuMTgwNjZINy4zNzVWMi4zMDU2NkM3LjM3NSAyLjA5OTQxIDcuMjA2MjUgMS45MzA2NiA3IDEuOTMwNjZDNi43OTM3NSAxLjkzMDY2IDYuNjI1IDIuMDk5NDEgNi42MjUgMi4zMDU2NlY0LjE4MDY2SDQuNzVDNC41NDM3NSA0LjE4MDY2IDQuMzc1IDQuMzQ5NDEgNC4zNzUgNC41NTU2NkM0LjM3NSA0Ljc2MTkxIDQuNTQzNzUgNC45MzA2NiA0Ljc1IDQuOTMwNjZaIiBmaWxsPSIjNjE2MTYxIiBzdHJva2U9IiM2MTYxNjEiIHN0cm9rZS13aWR0aD0iMC43Ii8+CjwvZz4KPHBhdGggY2xhc3M9ImpwLWljb24zIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGNsaXAtcnVsZT0iZXZlbm9kZCIgZD0iTTExLjUgOS41VjExLjVMMi41IDExLjVWOS41TDExLjUgOS41Wk0xMiA4QzEyLjU1MjMgOCAxMyA4LjQ0NzcyIDEzIDlWMTJDMTMgMTIuNTUyMyAxMi41NTIzIDEzIDEyIDEzTDIgMTNDMS40NDc3MiAxMyAxIDEyLjU1MjMgMSAxMlY5QzEgOC40NDc3MiAxLjQ0NzcxIDggMiA4TDEyIDhaIiBmaWxsPSIjNjE2MTYxIi8+CjxkZWZzPgo8Y2xpcFBhdGggaWQ9ImNsaXAwXzEzN18xOTQ5MiI+CjxyZWN0IGNsYXNzPSJqcC1pY29uMyIgd2lkdGg9IjYiIGhlaWdodD0iNiIgZmlsbD0id2hpdGUiIHRyYW5zZm9ybT0ibWF0cml4KC0xIDAgMCAxIDEwIDEuNTU1NjYpIi8+CjwvY2xpcFBhdGg+CjwvZGVmcz4KPC9zdmc+Cg==);--jp-icon-add-below:url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTQiIGhlaWdodD0iMTQiIHZpZXdCb3g9IjAgMCAxNCAxNCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPGcgY2xpcC1wYXRoPSJ1cmwoI2NsaXAwXzEzN18xOTQ5OCkiPgo8cGF0aCBjbGFzcz0ianAtaWNvbjMiIGQ9Ik05LjI1IDEwLjA2OTNMNy4zNzUgMTAuMDY5M0w3LjM3NSA4LjE5NDM0QzcuMzc1IDcuOTg4MDkgNy4yMDYyNSA3LjgxOTM0IDcgNy44MTkzNEM2Ljc5Mzc1IDcuODE5MzQgNi42MjUgNy45ODgwOSA2LjYyNSA4LjE5NDM0TDYuNjI1IDEwLjA2OTNMNC43NSAxMC4wNjkzQzQuNTQzNzUgMTAuMDY5MyA0LjM3NSAxMC4yMzgxIDQuMzc1IDEwLjQ0NDNDNC4zNzUgMTAuNjUwNiA0LjU0Mzc1IDEwLjgxOTMgNC43NSAxMC44MTkzTDYuNjI1IDEwLjgxOTNMNi42MjUgMTIuNjk0M0M2LjYyNSAxMi45MDA2IDYuNzkzNzUgMTMuMDY5MyA3IDEzLjA2OTNDNy4yMDYyNSAxMy4wNjkzIDcuMzc1IDEyLjkwMDYgNy4zNzUgMTIuNjk0M0w3LjM3NSAxMC44MTkzTDkuMjUgMTAuODE5M0M5LjQ1NjI1IDEwLjgxOTMgOS42MjUgMTAuNjUwNiA5LjYyNSAxMC40NDQzQzkuNjI1IDEwLjIzODEgOS40NTYyNSAxMC4wNjkzIDkuMjUgMTAuMDY5M1oiIGZpbGw9IiM2MTYxNjEiIHN0cm9rZT0iIzYxNjE2MSIgc3Ryb2tlLXdpZHRoPSIwLjciLz4KPC9nPgo8cGF0aCBjbGFzcz0ianAtaWNvbjMiIGZpbGwtcnVsZT0iZXZlbm9kZCIgY2xpcC1ydWxlPSJldmVub2RkIiBkPSJNMi41IDUuNUwyLjUgMy41TDExLjUgMy41TDExLjUgNS41TDIuNSA1LjVaTTIgN0MxLjQ0NzcyIDcgMSA2LjU1MjI4IDEgNkwxIDNDMSAyLjQ0NzcyIDEuNDQ3NzIgMiAyIDJMMTIgMkMxMi41NTIzIDIgMTMgMi40NDc3MiAxMyAzTDEzIDZDMTMgNi41NTIyOSAxMi41NTIzIDcgMTIgN0wyIDdaIiBmaWxsPSIjNjE2MTYxIi8+CjxkZWZzPgo8Y2xpcFBhdGggaWQ9ImNsaXAwXzEzN18xOTQ5OCI+CjxyZWN0IGNsYXNzPSJqcC1pY29uMyIgd2lkdGg9IjYiIGhlaWdodD0iNiIgZmlsbD0id2hpdGUiIHRyYW5zZm9ybT0ibWF0cml4KDEgMS43NDg0NmUtMDcgMS43NDg0NmUtMDcgLTEgNCAxMy40NDQzKSIvPgo8L2NsaXBQYXRoPgo8L2RlZnM+Cjwvc3ZnPgo=);--jp-icon-add:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTE5IDEzaC02djZoLTJ2LTZINXYtMmg2VjVoMnY2aDZ2MnoiLz4KICA8L2c+Cjwvc3ZnPgo=);--jp-icon-bell:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDE2IDE2IiB2ZXJzaW9uPSIxLjEiPgogICA8cGF0aCBjbGFzcz0ianAtaWNvbjIganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjMzMzMzMzIgogICAgICBkPSJtOCAwLjI5Yy0xLjQgMC0yLjcgMC43My0zLjYgMS44LTEuMiAxLjUtMS40IDMuNC0xLjUgNS4yLTAuMTggMi4yLTAuNDQgNC0yLjMgNS4zbDAuMjggMS4zaDVjMC4wMjYgMC42NiAwLjMyIDEuMSAwLjcxIDEuNSAwLjg0IDAuNjEgMiAwLjYxIDIuOCAwIDAuNTItMC40IDAuNi0xIDAuNzEtMS41aDVsMC4yOC0xLjNjLTEuOS0wLjk3LTIuMi0zLjMtMi4zLTUuMy0wLjEzLTEuOC0wLjI2LTMuNy0xLjUtNS4yLTAuODUtMS0yLjItMS44LTMuNi0xLjh6bTAgMS40YzAuODggMCAxLjkgMC41NSAyLjUgMS4zIDAuODggMS4xIDEuMSAyLjcgMS4yIDQuNCAwLjEzIDEuNyAwLjIzIDMuNiAxLjMgNS4yaC0xMGMxLjEtMS42IDEuMi0zLjQgMS4zLTUuMiAwLjEzLTEuNyAwLjMtMy4zIDEuMi00LjQgMC41OS0wLjcyIDEuNi0xLjMgMi41LTEuM3ptLTAuNzQgMTJoMS41Yy0wLjAwMTUgMC4yOCAwLjAxNSAwLjc5LTAuNzQgMC43OS0wLjczIDAuMDAxNi0wLjcyLTAuNTMtMC43NC0wLjc5eiIgLz4KPC9zdmc+Cg==);--jp-icon-bug-dot:url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIHZpZXdCb3g9IjAgMCAyNCAyNCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICAgIDxnIGNsYXNzPSJqcC1pY29uMyBqcC1pY29uLXNlbGVjdGFibGUiIGZpbGw9IiM2MTYxNjEiPgogICAgICAgIDxwYXRoIGZpbGwtcnVsZT0iZXZlbm9kZCIgY2xpcC1ydWxlPSJldmVub2RkIiBkPSJNMTcuMTkgOEgyMFYxMEgxNy45MUMxNy45NiAxMC4zMyAxOCAxMC42NiAxOCAxMVYxMkgyMFYxNEgxOC41SDE4VjE0LjAyNzVDMTUuNzUgMTQuMjc2MiAxNCAxNi4xODM3IDE0IDE4LjVDMTQgMTkuMjA4IDE0LjE2MzUgMTkuODc3OSAxNC40NTQ5IDIwLjQ3MzlDMTMuNzA2MyAyMC44MTE3IDEyLjg3NTcgMjEgMTIgMjFDOS43OCAyMSA3Ljg1IDE5Ljc5IDYuODEgMThINFYxNkg2LjA5QzYuMDQgMTUuNjcgNiAxNS4zNCA2IDE1VjE0SDRWMTJINlYxMUM2IDEwLjY2IDYuMDQgMTAuMzMgNi4wOSAxMEg0VjhINi44MUM3LjI2IDcuMjIgNy44OCA2LjU1IDguNjIgNi4wNEw3IDQuNDFMOC40MSAzTDEwLjU5IDUuMTdDMTEuMDQgNS4wNiAxMS41MSA1IDEyIDVDMTIuNDkgNSAxMi45NiA1LjA2IDEzLjQyIDUuMTdMMTUuNTkgM0wxNyA0LjQxTDE1LjM3IDYuMDRDMTYuMTIgNi41NSAxNi43NCA3LjIyIDE3LjE5IDhaTTEwIDE2SDE0VjE0SDEwVjE2Wk0xMCAxMkgxNFYxMEgxMFYxMloiIGZpbGw9IiM2MTYxNjEiLz4KICAgICAgICA8cGF0aCBkPSJNMjIgMTguNUMyMiAyMC40MzMgMjAuNDMzIDIyIDE4LjUgMjJDMTYuNTY3IDIyIDE1IDIwLjQzMyAxNSAxOC41QzE1IDE2LjU2NyAxNi41NjcgMTUgMTguNSAxNUMyMC40MzMgMTUgMjIgMTYuNTY3IDIyIDE4LjVaIiBmaWxsPSIjNjE2MTYxIi8+CiAgICA8L2c+Cjwvc3ZnPgo=);--jp-icon-bug:url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjNjE2MTYxIj4KICAgIDxwYXRoIGQ9Ik0yMCA4aC0yLjgxYy0uNDUtLjc4LTEuMDctMS40NS0xLjgyLTEuOTZMMTcgNC40MSAxNS41OSAzbC0yLjE3IDIuMTdDMTIuOTYgNS4wNiAxMi40OSA1IDEyIDVjLS40OSAwLS45Ni4wNi0xLjQxLjE3TDguNDEgMyA3IDQuNDFsMS42MiAxLjYzQzcuODggNi41NSA3LjI2IDcuMjIgNi44MSA4SDR2MmgyLjA5Yy0uMDUuMzMtLjA5LjY2LS4wOSAxdjFINHYyaDJ2MWMwIC4zNC4wNC42Ny4wOSAxSDR2MmgyLjgxYzEuMDQgMS43OSAyLjk3IDMgNS4xOSAzczQuMTUtMS4yMSA1LjE5LTNIMjB2LTJoLTIuMDljLjA1LS4zMy4wOS0uNjYuMDktMXYtMWgydi0yaC0ydi0xYzAtLjM0LS4wNC0uNjctLjA5LTFIMjBWOHptLTYgOGgtNHYtMmg0djJ6bTAtNGgtNHYtMmg0djJ6Ii8+CiAgPC9nPgo8L3N2Zz4K);--jp-icon-build:url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIHZpZXdCb3g9IjAgMCAyNCAyNCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTE0LjkgMTcuNDVDMTYuMjUgMTcuNDUgMTcuMzUgMTYuMzUgMTcuMzUgMTVDMTcuMzUgMTMuNjUgMTYuMjUgMTIuNTUgMTQuOSAxMi41NUMxMy41NCAxMi41NSAxMi40NSAxMy42NSAxMi40NSAxNUMxMi40NSAxNi4zNSAxMy41NCAxNy40NSAxNC45IDE3LjQ1Wk0yMC4xIDE1LjY4TDIxLjU4IDE2Ljg0QzIxLjcxIDE2Ljk1IDIxLjc1IDE3LjEzIDIxLjY2IDE3LjI5TDIwLjI2IDE5LjcxQzIwLjE3IDE5Ljg2IDIwIDE5LjkyIDE5LjgzIDE5Ljg2TDE4LjA5IDE5LjE2QzE3LjczIDE5LjQ0IDE3LjMzIDE5LjY3IDE2LjkxIDE5Ljg1TDE2LjY0IDIxLjdDMTYuNjIgMjEuODcgMTYuNDcgMjIgMTYuMyAyMkgxMy41QzEzLjMyIDIyIDEzLjE4IDIxLjg3IDEzLjE1IDIxLjdMMTIuODkgMTkuODVDMTIuNDYgMTkuNjcgMTIuMDcgMTkuNDQgMTEuNzEgMTkuMTZMOS45NjAwMiAxOS44NkM5LjgxMDAyIDE5LjkyIDkuNjIwMDIgMTkuODYgOS41NDAwMiAxOS43MUw4LjE0MDAyIDE3LjI5QzguMDUwMDIgMTcuMTMgOC4wOTAwMiAxNi45NSA4LjIyMDAyIDE2Ljg0TDkuNzAwMDIgMTUuNjhMOS42NTAwMSAxNUw5LjcwMDAyIDE0LjMxTDguMjIwMDIgMTMuMTZDOC4wOTAwMiAxMy4wNSA4LjA1MDAyIDEyLjg2IDguMTQwMDIgMTIuNzFMOS41NDAwMiAxMC4yOUM5LjYyMDAyIDEwLjEzIDkuODEwMDIgMTAuMDcgOS45NjAwMiAxMC4xM0wxMS43MSAxMC44NEMxMi4wNyAxMC41NiAxMi40NiAxMC4zMiAxMi44OSAxMC4xNUwxMy4xNSA4LjI4OTk4QzEzLjE4IDguMTI5OTggMTMuMzIgNy45OTk5OCAxMy41IDcuOTk5OThIMTYuM0MxNi40NyA3Ljk5OTk4IDE2LjYyIDguMTI5OTggMTYuNjQgOC4yODk5OEwxNi45MSAxMC4xNUMxNy4zMyAxMC4zMiAxNy43MyAxMC41NiAxOC4wOSAxMC44NEwxOS44MyAxMC4xM0MyMCAxMC4wNyAyMC4xNyAxMC4xMyAyMC4yNiAxMC4yOUwyMS42NiAxMi43MUMyMS43NSAxMi44NiAyMS43MSAxMy4wNSAyMS41OCAxMy4xNkwyMC4xIDE0LjMxTDIwLjE1IDE1TDIwLjEgMTUuNjhaIi8+CiAgICA8cGF0aCBkPSJNNy4zMjk2NiA3LjQ0NDU0QzguMDgzMSA3LjAwOTU0IDguMzM5MzIgNi4wNTMzMiA3LjkwNDMyIDUuMjk5ODhDNy40NjkzMiA0LjU0NjQzIDYuNTA4MSA0LjI4MTU2IDUuNzU0NjYgNC43MTY1NkM1LjM5MTc2IDQuOTI2MDggNS4xMjY5NSA1LjI3MTE4IDUuMDE4NDkgNS42NzU5NEM0LjkxMDA0IDYuMDgwNzEgNC45NjY4MiA2LjUxMTk4IDUuMTc2MzQgNi44NzQ4OEM1LjYxMTM0IDcuNjI4MzIgNi41NzYyMiA3Ljg3OTU0IDcuMzI5NjYgNy40NDQ1NFpNOS42NTcxOCA0Ljc5NTkzTDEwLjg2NzIgNC45NTE3OUMxMC45NjI4IDQuOTc3NDEgMTEuMDQwMiA1LjA3MTMzIDExLjAzODIgNS4xODc5M0wxMS4wMzg4IDYuOTg4OTNDMTEuMDQ1NSA3LjEwMDU0IDEwLjk2MTYgNy4xOTUxOCAxMC44NTUgNy4yMTA1NEw5LjY2MDAxIDcuMzgwODNMOS4yMzkxNSA4LjEzMTg4TDkuNjY5NjEgOS4yNTc0NUM5LjcwNzI5IDkuMzYyNzEgOS42NjkzNCA5LjQ3Njk5IDkuNTc0MDggOS41MzE5OUw4LjAxNTIzIDEwLjQzMkM3LjkxMTMxIDEwLjQ5MiA3Ljc5MzM3IDEwLjQ2NzcgNy43MjEwNSAxMC4zODI0TDYuOTg3NDggOS40MzE4OEw2LjEwOTMxIDkuNDMwODNMNS4zNDcwNCAxMC4zOTA1QzUuMjg5MDkgMTAuNDcwMiA1LjE3MzgzIDEwLjQ5MDUgNS4wNzE4NyAxMC40MzM5TDMuNTEyNDUgOS41MzI5M0MzLjQxMDQ5IDkuNDc2MzMgMy4zNzY0NyA5LjM1NzQxIDMuNDEwNzUgOS4yNTY3OUwzLjg2MzQ3IDguMTQwOTNMMy42MTc0OSA3Ljc3NDg4TDMuNDIzNDcgNy4zNzg4M0wyLjIzMDc1IDcuMjEyOTdDMi4xMjY0NyA3LjE5MjM1IDIuMDQwNDkgNy4xMDM0MiAyLjA0MjQ1IDYuOTg2ODJMMi4wNDE4NyA1LjE4NTgyQzIuMDQzODMgNS4wNjkyMiAyLjExOTA5IDQuOTc5NTggMi4yMTcwNCA0Ljk2OTIyTDMuNDIwNjUgNC43OTM5M0wzLjg2NzQ5IDQuMDI3ODhMMy40MTEwNSAyLjkxNzMxQzMuMzczMzcgMi44MTIwNCAzLjQxMTMxIDIuNjk3NzYgMy41MTUyMyAyLjYzNzc2TDUuMDc0MDggMS43Mzc3NkM1LjE2OTM0IDEuNjgyNzYgNS4yODcyOSAxLjcwNzA0IDUuMzU5NjEgMS43OTIzMUw2LjExOTE1IDIuNzI3ODhMNi45ODAwMSAyLjczODkzTDcuNzI0OTYgMS43ODkyMkM3Ljc5MTU2IDEuNzA0NTggNy45MTU0OCAxLjY3OTIyIDguMDA4NzkgMS43NDA4Mkw5LjU2ODIxIDIuNjQxODJDOS42NzAxNyAyLjY5ODQyIDkuNzEyODUgMi44MTIzNCA5LjY4NzIzIDIuOTA3OTdMOS4yMTcxOCA0LjAzMzgzTDkuNDYzMTYgNC4zOTk4OEw5LjY1NzE4IDQuNzk1OTNaIi8+CiAgPC9nPgo8L3N2Zz4K);--jp-icon-caret-down-empty-thin:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIwIDIwIj4KCTxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSIgc2hhcGUtcmVuZGVyaW5nPSJnZW9tZXRyaWNQcmVjaXNpb24iPgoJCTxwb2x5Z29uIGNsYXNzPSJzdDEiIHBvaW50cz0iOS45LDEzLjYgMy42LDcuNCA0LjQsNi42IDkuOSwxMi4yIDE1LjQsNi43IDE2LjEsNy40ICIvPgoJPC9nPgo8L3N2Zz4K);--jp-icon-caret-down-empty:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDE4IDE4Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiIHNoYXBlLXJlbmRlcmluZz0iZ2VvbWV0cmljUHJlY2lzaW9uIj4KICAgIDxwYXRoIGQ9Ik01LjIsNS45TDksOS43bDMuOC0zLjhsMS4yLDEuMmwtNC45LDVsLTQuOS01TDUuMiw1Ljl6Ii8+CiAgPC9nPgo8L3N2Zz4K);--jp-icon-caret-down:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDE4IDE4Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiIHNoYXBlLXJlbmRlcmluZz0iZ2VvbWV0cmljUHJlY2lzaW9uIj4KICAgIDxwYXRoIGQ9Ik01LjIsNy41TDksMTEuMmwzLjgtMy44SDUuMnoiLz4KICA8L2c+Cjwvc3ZnPgo=);--jp-icon-caret-left:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDE4IDE4Ij4KCTxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSIgc2hhcGUtcmVuZGVyaW5nPSJnZW9tZXRyaWNQcmVjaXNpb24iPgoJCTxwYXRoIGQ9Ik0xMC44LDEyLjhMNy4xLDlsMy44LTMuOGwwLDcuNkgxMC44eiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-caret-right:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDE4IDE4Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiIHNoYXBlLXJlbmRlcmluZz0iZ2VvbWV0cmljUHJlY2lzaW9uIj4KICAgIDxwYXRoIGQ9Ik03LjIsNS4yTDEwLjksOWwtMy44LDMuOFY1LjJINy4yeiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-caret-up-empty-thin:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIwIDIwIj4KCTxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSIgc2hhcGUtcmVuZGVyaW5nPSJnZW9tZXRyaWNQcmVjaXNpb24iPgoJCTxwb2x5Z29uIGNsYXNzPSJzdDEiIHBvaW50cz0iMTUuNCwxMy4zIDkuOSw3LjcgNC40LDEzLjIgMy42LDEyLjUgOS45LDYuMyAxNi4xLDEyLjYgIi8+Cgk8L2c+Cjwvc3ZnPgo=);--jp-icon-caret-up:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDE4IDE4Ij4KCTxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSIgc2hhcGUtcmVuZGVyaW5nPSJnZW9tZXRyaWNQcmVjaXNpb24iPgoJCTxwYXRoIGQ9Ik01LjIsMTAuNUw5LDYuOGwzLjgsMy44SDUuMnoiLz4KICA8L2c+Cjwvc3ZnPgo=);--jp-icon-case-sensitive:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIwIDIwIj4KICA8ZyBjbGFzcz0ianAtaWNvbjIiIGZpbGw9IiM0MTQxNDEiPgogICAgPHJlY3QgeD0iMiIgeT0iMiIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2Ii8+CiAgPC9nPgogIDxnIGNsYXNzPSJqcC1pY29uLWFjY2VudDIiIGZpbGw9IiNGRkYiPgogICAgPHBhdGggZD0iTTcuNiw4aDAuOWwzLjUsOGgtMS4xTDEwLDE0SDZsLTAuOSwySDRMNy42LDh6IE04LDkuMUw2LjQsMTNoMy4yTDgsOS4xeiIvPgogICAgPHBhdGggZD0iTTE2LjYsOS44Yy0wLjIsMC4xLTAuNCwwLjEtMC43LDAuMWMtMC4yLDAtMC40LTAuMS0wLjYtMC4yYy0wLjEtMC4xLTAuMi0wLjQtMC4yLTAuNyBjLTAuMywwLjMtMC42LDAuNS0wLjksMC43Yy0wLjMsMC4xLTAuNywwLjItMS4xLDAuMmMtMC4zLDAtMC41LDAtMC43LTAuMWMtMC4yLTAuMS0wLjQtMC4yLTAuNi0wLjNjLTAuMi0wLjEtMC4zLTAuMy0wLjQtMC41IGMtMC4xLTAuMi0wLjEtMC40LTAuMS0wLjdjMC0wLjMsMC4xLTAuNiwwLjItMC44YzAuMS0wLjIsMC4zLTAuNCwwLjQtMC41QzEyLDcsMTIuMiw2LjksMTIuNSw2LjhjMC4yLTAuMSwwLjUtMC4xLDAuNy0wLjIgYzAuMy0wLjEsMC41LTAuMSwwLjctMC4xYzAuMiwwLDAuNC0wLjEsMC42LTAuMWMwLjIsMCwwLjMtMC4xLDAuNC0wLjJjMC4xLTAuMSwwLjItMC4yLDAuMi0wLjRjMC0xLTEuMS0xLTEuMy0xIGMtMC40LDAtMS40LDAtMS40LDEuMmgtMC45YzAtMC40LDAuMS0wLjcsMC4yLTFjMC4xLTAuMiwwLjMtMC40LDAuNS0wLjZjMC4yLTAuMiwwLjUtMC4zLDAuOC0wLjNDMTMuMyw0LDEzLjYsNCwxMy45LDQgYzAuMywwLDAuNSwwLDAuOCwwLjFjMC4zLDAsMC41LDAuMSwwLjcsMC4yYzAuMiwwLjEsMC40LDAuMywwLjUsMC41QzE2LDUsMTYsNS4yLDE2LDUuNnYyLjljMCwwLjIsMCwwLjQsMCwwLjUgYzAsMC4xLDAuMSwwLjIsMC4zLDAuMmMwLjEsMCwwLjIsMCwwLjMsMFY5Ljh6IE0xNS4yLDYuOWMtMS4yLDAuNi0zLjEsMC4yLTMuMSwxLjRjMCwxLjQsMy4xLDEsMy4xLTAuNVY2Ljl6Ii8+CiAgPC9nPgo8L3N2Zz4K);--jp-icon-check:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjNjE2MTYxIj4KICAgIDxwYXRoIGQ9Ik05IDE2LjE3TDQuODMgMTJsLTEuNDIgMS40MUw5IDE5IDIxIDdsLTEuNDEtMS40MXoiLz4KICA8L2c+Cjwvc3ZnPgo=);--jp-icon-circle-empty:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTEyIDJDNi40NyAyIDIgNi40NyAyIDEyczQuNDcgMTAgMTAgMTAgMTAtNC40NyAxMC0xMFMxNy41MyAyIDEyIDJ6bTAgMThjLTQuNDEgMC04LTMuNTktOC04czMuNTktOCA4LTggOCAzLjU5IDggOC0zLjU5IDgtOCA4eiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-circle:url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMTggMTgiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPGNpcmNsZSBjeD0iOSIgY3k9IjkiIHI9IjgiLz4KICA8L2c+Cjwvc3ZnPgo=);--jp-icon-clear:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8bWFzayBpZD0iZG9udXRIb2xlIj4KICAgIDxyZWN0IHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgZmlsbD0id2hpdGUiIC8+CiAgICA8Y2lyY2xlIGN4PSIxMiIgY3k9IjEyIiByPSI4IiBmaWxsPSJibGFjayIvPgogIDwvbWFzaz4KCiAgPGcgY2xhc3M9ImpwLWljb24zIiBmaWxsPSIjNjE2MTYxIj4KICAgIDxyZWN0IGhlaWdodD0iMTgiIHdpZHRoPSIyIiB4PSIxMSIgeT0iMyIgdHJhbnNmb3JtPSJyb3RhdGUoMzE1LCAxMiwgMTIpIi8+CiAgICA8Y2lyY2xlIGN4PSIxMiIgY3k9IjEyIiByPSIxMCIgbWFzaz0idXJsKCNkb251dEhvbGUpIi8+CiAgPC9nPgo8L3N2Zz4K);--jp-icon-close:url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbi1ub25lIGpwLWljb24tc2VsZWN0YWJsZS1pbnZlcnNlIGpwLWljb24zLWhvdmVyIiBmaWxsPSJub25lIj4KICAgIDxjaXJjbGUgY3g9IjEyIiBjeT0iMTIiIHI9IjExIi8+CiAgPC9nPgoKICA8ZyBjbGFzcz0ianAtaWNvbjMganAtaWNvbi1zZWxlY3RhYmxlIGpwLWljb24tYWNjZW50Mi1ob3ZlciIgZmlsbD0iIzYxNjE2MSI+CiAgICA8cGF0aCBkPSJNMTkgNi40MUwxNy41OSA1IDEyIDEwLjU5IDYuNDEgNSA1IDYuNDEgMTAuNTkgMTIgNSAxNy41OSA2LjQxIDE5IDEyIDEzLjQxIDE3LjU5IDE5IDE5IDE3LjU5IDEzLjQxIDEyeiIvPgogIDwvZz4KCiAgPGcgY2xhc3M9ImpwLWljb24tbm9uZSBqcC1pY29uLWJ1c3kiIGZpbGw9Im5vbmUiPgogICAgPGNpcmNsZSBjeD0iMTIiIGN5PSIxMiIgcj0iNyIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-code-check:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjNjE2MTYxIiBzaGFwZS1yZW5kZXJpbmc9Imdlb21ldHJpY1ByZWNpc2lvbiI+CiAgICA8cGF0aCBkPSJNNi41OSwzLjQxTDIsOEw2LjU5LDEyLjZMOCwxMS4xOEw0LjgyLDhMOCw0LjgyTDYuNTksMy40MU0xMi40MSwzLjQxTDExLDQuODJMMTQuMTgsOEwxMSwxMS4xOEwxMi40MSwxMi42TDE3LDhMMTIuNDEsMy40MU0yMS41OSwxMS41OUwxMy41LDE5LjY4TDkuODMsMTZMOC40MiwxNy40MUwxMy41LDIyLjVMMjMsMTNMMjEuNTksMTEuNTlaIiAvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-code:url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjIiIGhlaWdodD0iMjIiIHZpZXdCb3g9IjAgMCAyOCAyOCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KCTxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSI+CgkJPHBhdGggZD0iTTExLjQgMTguNkw2LjggMTRMMTEuNCA5LjRMMTAgOEw0IDE0TDEwIDIwTDExLjQgMTguNlpNMTYuNiAxOC42TDIxLjIgMTRMMTYuNiA5LjRMMTggOEwyNCAxNEwxOCAyMEwxNi42IDE4LjZWMTguNloiLz4KCTwvZz4KPC9zdmc+Cg==);--jp-icon-collapse-all:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICAgIDxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSI+CiAgICAgICAgPHBhdGgKICAgICAgICAgICAgZD0iTTggMmMxIDAgMTEgMCAxMiAwczIgMSAyIDJjMCAxIDAgMTEgMCAxMnMwIDItMiAyQzIwIDE0IDIwIDQgMjAgNFMxMCA0IDYgNGMwLTIgMS0yIDItMnoiIC8+CiAgICAgICAgPHBhdGgKICAgICAgICAgICAgZD0iTTE4IDhjMC0xLTEtMi0yLTJTNSA2IDQgNnMtMiAxLTIgMmMwIDEgMCAxMSAwIDEyczEgMiAyIDJjMSAwIDExIDAgMTIgMHMyLTEgMi0yYzAtMSAwLTExIDAtMTJ6bS0yIDB2MTJINFY4eiIgLz4KICAgICAgICA8cGF0aCBkPSJNNiAxM3YyaDh2LTJ6IiAvPgogICAgPC9nPgo8L3N2Zz4K);--jp-icon-console:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIwMCAyMDAiPgogIDxnIGNsYXNzPSJqcC1jb25zb2xlLWljb24tYmFja2dyb3VuZC1jb2xvciBqcC1pY29uLXNlbGVjdGFibGUiIGZpbGw9IiMwMjg4RDEiPgogICAgPHBhdGggZD0iTTIwIDE5LjhoMTYwdjE1OS45SDIweiIvPgogIDwvZz4KICA8ZyBjbGFzcz0ianAtY29uc29sZS1pY29uLWNvbG9yIGpwLWljb24tc2VsZWN0YWJsZS1pbnZlcnNlIiBmaWxsPSIjZmZmIj4KICAgIDxwYXRoIGQ9Ik0xMDUgMTI3LjNoNDB2MTIuOGgtNDB6TTUxLjEgNzdMNzQgOTkuOWwtMjMuMyAyMy4zIDEwLjUgMTAuNSAyMy4zLTIzLjNMOTUgOTkuOSA4NC41IDg5LjQgNjEuNiA2Ni41eiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-copy:url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMTggMTgiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTExLjksMUgzLjJDMi40LDEsMS43LDEuNywxLjcsMi41djEwLjJoMS41VjIuNWg4LjdWMXogTTE0LjEsMy45aC04Yy0wLjgsMC0xLjUsMC43LTEuNSwxLjV2MTAuMmMwLDAuOCwwLjcsMS41LDEuNSwxLjVoOCBjMC44LDAsMS41LTAuNywxLjUtMS41VjUuNEMxNS41LDQuNiwxNC45LDMuOSwxNC4xLDMuOXogTTE0LjEsMTUuNWgtOFY1LjRoOFYxNS41eiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-copyright:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGVuYWJsZS1iYWNrZ3JvdW5kPSJuZXcgMCAwIDI0IDI0IiBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIyNCI+CiAgPGcgY2xhc3M9ImpwLWljb24zIiBmaWxsPSIjNjE2MTYxIj4KICAgIDxwYXRoIGQ9Ik0xMS44OCw5LjE0YzEuMjgsMC4wNiwxLjYxLDEuMTUsMS42MywxLjY2aDEuNzljLTAuMDgtMS45OC0xLjQ5LTMuMTktMy40NS0zLjE5QzkuNjQsNy42MSw4LDksOCwxMi4xNCBjMCwxLjk0LDAuOTMsNC4yNCwzLjg0LDQuMjRjMi4yMiwwLDMuNDEtMS42NSwzLjQ0LTIuOTVoLTEuNzljLTAuMDMsMC41OS0wLjQ1LDEuMzgtMS42MywxLjQ0QzEwLjU1LDE0LjgzLDEwLDEzLjgxLDEwLDEyLjE0IEMxMCw5LjI1LDExLjI4LDkuMTYsMTEuODgsOS4xNHogTTEyLDJDNi40OCwyLDIsNi40OCwyLDEyczQuNDgsMTAsMTAsMTBzMTAtNC40OCwxMC0xMFMxNy41MiwyLDEyLDJ6IE0xMiwyMGMtNC40MSwwLTgtMy41OS04LTggczMuNTktOCw4LThzOCwzLjU5LDgsOFMxNi40MSwyMCwxMiwyMHoiLz4KICA8L2c+Cjwvc3ZnPgo=);--jp-icon-cut:url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTkuNjQgNy42NGMuMjMtLjUuMzYtMS4wNS4zNi0xLjY0IDAtMi4yMS0xLjc5LTQtNC00UzIgMy43OSAyIDZzMS43OSA0IDQgNGMuNTkgMCAxLjE0LS4xMyAxLjY0LS4zNkwxMCAxMmwtMi4zNiAyLjM2QzcuMTQgMTQuMTMgNi41OSAxNCA2IDE0Yy0yLjIxIDAtNCAxLjc5LTQgNHMxLjc5IDQgNCA0IDQtMS43OSA0LTRjMC0uNTktLjEzLTEuMTQtLjM2LTEuNjRMMTIgMTRsNyA3aDN2LTFMOS42NCA3LjY0ek02IDhjLTEuMSAwLTItLjg5LTItMnMuOS0yIDItMiAyIC44OSAyIDItLjkgMi0yIDJ6bTAgMTJjLTEuMSAwLTItLjg5LTItMnMuOS0yIDItMiAyIC44OSAyIDItLjkgMi0yIDJ6bTYtNy41Yy0uMjggMC0uNS0uMjItLjUtLjVzLjIyLS41LjUtLjUuNS4yMi41LjUtLjIyLjUtLjUuNXpNMTkgM2wtNiA2IDIgMiA3LTdWM3oiLz4KICA8L2c+Cjwvc3ZnPgo=);--jp-icon-delete:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNCAyNCIgd2lkdGg9IjE2cHgiIGhlaWdodD0iMTZweCI+CiAgICA8cGF0aCBkPSJNMCAwaDI0djI0SDB6IiBmaWxsPSJub25lIiAvPgogICAgPHBhdGggY2xhc3M9ImpwLWljb24zIiBmaWxsPSIjNjI2MjYyIiBkPSJNNiAxOWMwIDEuMS45IDIgMiAyaDhjMS4xIDAgMi0uOSAyLTJWN0g2djEyek0xOSA0aC0zLjVsLTEtMWgtNWwtMSAxSDV2MmgxNFY0eiIgLz4KPC9zdmc+Cg==);--jp-icon-download:url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTE5IDloLTRWM0g5djZINWw3IDcgNy03ek01IDE4djJoMTR2LTJINXoiLz4KICA8L2c+Cjwvc3ZnPgo=);--jp-icon-duplicate:url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTQiIGhlaWdodD0iMTQiIHZpZXdCb3g9IjAgMCAxNCAxNCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggY2xhc3M9ImpwLWljb24zIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGNsaXAtcnVsZT0iZXZlbm9kZCIgZD0iTTIuNzk5OTggMC44NzVIOC44OTU4MkM5LjIwMDYxIDAuODc1IDkuNDQ5OTggMS4xMzkxNCA5LjQ0OTk4IDEuNDYxOThDOS40NDk5OCAxLjc4NDgyIDkuMjAwNjEgMi4wNDg5NiA4Ljg5NTgyIDIuMDQ4OTZIMy4zNTQxNUMzLjA0OTM2IDIuMDQ4OTYgMi43OTk5OCAyLjMxMzEgMi43OTk5OCAyLjYzNTk0VjkuNjc5NjlDMi43OTk5OCAxMC4wMDI1IDIuNTUwNjEgMTAuMjY2NyAyLjI0NTgyIDEwLjI2NjdDMS45NDEwMyAxMC4yNjY3IDEuNjkxNjUgMTAuMDAyNSAxLjY5MTY1IDkuNjc5NjlWMi4wNDg5NkMxLjY5MTY1IDEuNDAzMjggMi4xOTA0IDAuODc1IDIuNzk5OTggMC44NzVaTTUuMzY2NjUgMTEuOVY0LjU1SDExLjA4MzNWMTEuOUg1LjM2NjY1Wk00LjE0MTY1IDQuMTQxNjdDNC4xNDE2NSAzLjY5MDYzIDQuNTA3MjggMy4zMjUgNC45NTgzMiAzLjMyNUgxMS40OTE3QzExLjk0MjcgMy4zMjUgMTIuMzA4MyAzLjY5MDYzIDEyLjMwODMgNC4xNDE2N1YxMi4zMDgzQzEyLjMwODMgMTIuNzU5NCAxMS45NDI3IDEzLjEyNSAxMS40OTE3IDEzLjEyNUg0Ljk1ODMyQzQuNTA3MjggMTMuMTI1IDQuMTQxNjUgMTIuNzU5NCA0LjE0MTY1IDEyLjMwODNWNC4xNDE2N1oiIGZpbGw9IiM2MTYxNjEiLz4KPHBhdGggY2xhc3M9ImpwLWljb24zIiBkPSJNOS40MzU3NCA4LjI2NTA3SDguMzY0MzFWOS4zMzY1QzguMzY0MzEgOS40NTQzNSA4LjI2Nzg4IDkuNTUwNzggOC4xNTAwMiA5LjU1MDc4QzguMDMyMTcgOS41NTA3OCA3LjkzNTc0IDkuNDU0MzUgNy45MzU3NCA5LjMzNjVWOC4yNjUwN0g2Ljg2NDMxQzYuNzQ2NDUgOC4yNjUwNyA2LjY1MDAyIDguMTY4NjQgNi42NTAwMiA4LjA1MDc4QzYuNjUwMDIgNy45MzI5MiA2Ljc0NjQ1IDcuODM2NSA2Ljg2NDMxIDcuODM2NUg3LjkzNTc0VjYuNzY1MDdDNy45MzU3NCA2LjY0NzIxIDguMDMyMTcgNi41NTA3OCA4LjE1MDAyIDYuNTUwNzhDOC4yNjc4OCA2LjU1MDc4IDguMzY0MzEgNi42NDcyMSA4LjM2NDMxIDYuNzY1MDdWNy44MzY1SDkuNDM1NzRDOS41NTM2IDcuODM2NSA5LjY1MDAyIDcuOTMyOTIgOS42NTAwMiA4LjA1MDc4QzkuNjUwMDIgOC4xNjg2NCA5LjU1MzYgOC4yNjUwNyA5LjQzNTc0IDguMjY1MDdaIiBmaWxsPSIjNjE2MTYxIiBzdHJva2U9IiM2MTYxNjEiIHN0cm9rZS13aWR0aD0iMC41Ii8+Cjwvc3ZnPgo=);--jp-icon-edit:url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTMgMTcuMjVWMjFoMy43NUwxNy44MSA5Ljk0bC0zLjc1LTMuNzVMMyAxNy4yNXpNMjAuNzEgNy4wNGMuMzktLjM5LjM5LTEuMDIgMC0xLjQxbC0yLjM0LTIuMzRjLS4zOS0uMzktMS4wMi0uMzktMS40MSAwbC0xLjgzIDEuODMgMy43NSAzLjc1IDEuODMtMS44M3oiLz4KICA8L2c+Cjwvc3ZnPgo=);--jp-icon-ellipses:url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPGNpcmNsZSBjeD0iNSIgY3k9IjEyIiByPSIyIi8+CiAgICA8Y2lyY2xlIGN4PSIxMiIgY3k9IjEyIiByPSIyIi8+CiAgICA8Y2lyY2xlIGN4PSIxOSIgY3k9IjEyIiByPSIyIi8+CiAgPC9nPgo8L3N2Zz4K);--jp-icon-error:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KPGcgY2xhc3M9ImpwLWljb24zIiBmaWxsPSIjNjE2MTYxIj48Y2lyY2xlIGN4PSIxMiIgY3k9IjE5IiByPSIyIi8+PHBhdGggZD0iTTEwIDNoNHYxMmgtNHoiLz48L2c+CjxwYXRoIGZpbGw9Im5vbmUiIGQ9Ik0wIDBoMjR2MjRIMHoiLz4KPC9zdmc+Cg==);--jp-icon-expand-all:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICAgIDxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSI+CiAgICAgICAgPHBhdGgKICAgICAgICAgICAgZD0iTTggMmMxIDAgMTEgMCAxMiAwczIgMSAyIDJjMCAxIDAgMTEgMCAxMnMwIDItMiAyQzIwIDE0IDIwIDQgMjAgNFMxMCA0IDYgNGMwLTIgMS0yIDItMnoiIC8+CiAgICAgICAgPHBhdGgKICAgICAgICAgICAgZD0iTTE4IDhjMC0xLTEtMi0yLTJTNSA2IDQgNnMtMiAxLTIgMmMwIDEgMCAxMSAwIDEyczEgMiAyIDJjMSAwIDExIDAgMTIgMHMyLTEgMi0yYzAtMSAwLTExIDAtMTJ6bS0yIDB2MTJINFY4eiIgLz4KICAgICAgICA8cGF0aCBkPSJNMTEgMTBIOXYzSDZ2MmgzdjNoMnYtM2gzdi0yaC0zeiIgLz4KICAgIDwvZz4KPC9zdmc+Cg==);--jp-icon-extension:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTIwLjUgMTFIMTlWN2MwLTEuMS0uOS0yLTItMmgtNFYzLjVDMTMgMi4xMiAxMS44OCAxIDEwLjUgMVM4IDIuMTIgOCAzLjVWNUg0Yy0xLjEgMC0xLjk5LjktMS45OSAydjMuOEgzLjVjMS40OSAwIDIuNyAxLjIxIDIuNyAyLjdzLTEuMjEgMi43LTIuNyAyLjdIMlYyMGMwIDEuMS45IDIgMiAyaDMuOHYtMS41YzAtMS40OSAxLjIxLTIuNyAyLjctMi43IDEuNDkgMCAyLjcgMS4yMSAyLjcgMi43VjIySDE3YzEuMSAwIDItLjkgMi0ydi00aDEuNWMxLjM4IDAgMi41LTEuMTIgMi41LTIuNVMyMS44OCAxMSAyMC41IDExeiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-fast-forward:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICAgIDxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSI+CiAgICAgICAgPHBhdGggZD0iTTQgMThsOC41LTZMNCA2djEyem05LTEydjEybDguNS02TDEzIDZ6Ii8+CiAgICA8L2c+Cjwvc3ZnPgo=);--jp-icon-file-upload:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTkgMTZoNnYtNmg0bC03LTctNyA3aDR6bS00IDJoMTR2Mkg1eiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-file:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIyIDIyIj4KICA8cGF0aCBjbGFzcz0ianAtaWNvbjMganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjNjE2MTYxIiBkPSJNMTkuMyA4LjJsLTUuNS01LjVjLS4zLS4zLS43LS41LTEuMi0uNUgzLjljLS44LjEtMS42LjktMS42IDEuOHYxNC4xYzAgLjkuNyAxLjYgMS42IDEuNmgxNC4yYy45IDAgMS42LS43IDEuNi0xLjZWOS40Yy4xLS41LS4xLS45LS40LTEuMnptLTUuOC0zLjNsMy40IDMuNmgtMy40VjQuOXptMy45IDEyLjdINC43Yy0uMSAwLS4yIDAtLjItLjJWNC43YzAtLjIuMS0uMy4yLS4zaDcuMnY0LjRzMCAuOC4zIDEuMWMuMy4zIDEuMS4zIDEuMS4zaDQuM3Y3LjJzLS4xLjItLjIuMnoiLz4KPC9zdmc+Cg==);--jp-icon-filter-dot:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiNGRkYiPgogICAgPHBhdGggZD0iTTE0LDEyVjE5Ljg4QzE0LjA0LDIwLjE4IDEzLjk0LDIwLjUgMTMuNzEsMjAuNzFDMTMuMzIsMjEuMSAxMi42OSwyMS4xIDEyLjMsMjAuNzFMMTAuMjksMTguN0MxMC4wNiwxOC40NyA5Ljk2LDE4LjE2IDEwLDE3Ljg3VjEySDkuOTdMNC4yMSw0LjYyQzMuODcsNC4xOSAzLjk1LDMuNTYgNC4zOCwzLjIyQzQuNTcsMy4wOCA0Ljc4LDMgNSwzVjNIMTlWM0MxOS4yMiwzIDE5LjQzLDMuMDggMTkuNjIsMy4yMkMyMC4wNSwzLjU2IDIwLjEzLDQuMTkgMTkuNzksNC42MkwxNC4wMywxMkgxNFoiIC8+CiAgPC9nPgogIDxnIGNsYXNzPSJqcC1pY29uLWRvdCIgZmlsbD0iI0ZGRiI+CiAgICA8Y2lyY2xlIGN4PSIxOCIgY3k9IjE3IiByPSIzIj48L2NpcmNsZT4KICA8L2c+Cjwvc3ZnPgo=);--jp-icon-filter-list:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTEwIDE4aDR2LTJoLTR2MnpNMyA2djJoMThWNkgzem0zIDdoMTJ2LTJINnYyeiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-filter:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiNGRkYiPgogICAgPHBhdGggZD0iTTE0LDEyVjE5Ljg4QzE0LjA0LDIwLjE4IDEzLjk0LDIwLjUgMTMuNzEsMjAuNzFDMTMuMzIsMjEuMSAxMi42OSwyMS4xIDEyLjMsMjAuNzFMMTAuMjksMTguN0MxMC4wNiwxOC40NyA5Ljk2LDE4LjE2IDEwLDE3Ljg3VjEySDkuOTdMNC4yMSw0LjYyQzMuODcsNC4xOSAzLjk1LDMuNTYgNC4zOCwzLjIyQzQuNTcsMy4wOCA0Ljc4LDMgNSwzVjNIMTlWM0MxOS4yMiwzIDE5LjQzLDMuMDggMTkuNjIsMy4yMkMyMC4wNSwzLjU2IDIwLjEzLDQuMTkgMTkuNzksNC42MkwxNC4wMywxMkgxNFoiIC8+CiAgPC9nPgo8L3N2Zz4K);--jp-icon-folder-favorite:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGhlaWdodD0iMjRweCIgdmlld0JveD0iMCAwIDI0IDI0IiB3aWR0aD0iMjRweCIgZmlsbD0iIzAwMDAwMCI+CiAgPHBhdGggZD0iTTAgMGgyNHYyNEgwVjB6IiBmaWxsPSJub25lIi8+PHBhdGggY2xhc3M9ImpwLWljb24zIGpwLWljb24tc2VsZWN0YWJsZSIgZmlsbD0iIzYxNjE2MSIgZD0iTTIwIDZoLThsLTItMkg0Yy0xLjEgMC0yIC45LTIgMnYxMmMwIDEuMS45IDIgMiAyaDE2YzEuMSAwIDItLjkgMi0yVjhjMC0xLjEtLjktMi0yLTJ6bS0yLjA2IDExTDE1IDE1LjI4IDEyLjA2IDE3bC43OC0zLjMzLTIuNTktMi4yNCAzLjQxLS4yOUwxNSA4bDEuMzQgMy4xNCAzLjQxLjI5LTIuNTkgMi4yNC43OCAzLjMzeiIvPgo8L3N2Zz4K);--jp-icon-folder:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8cGF0aCBjbGFzcz0ianAtaWNvbjMganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjNjE2MTYxIiBkPSJNMTAgNEg0Yy0xLjEgMC0xLjk5LjktMS45OSAyTDIgMThjMCAxLjEuOSAyIDIgMmgxNmMxLjEgMCAyLS45IDItMlY4YzAtMS4xLS45LTItMi0yaC04bC0yLTJ6Ii8+Cjwvc3ZnPgo=);--jp-icon-home:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGhlaWdodD0iMjRweCIgdmlld0JveD0iMCAwIDI0IDI0IiB3aWR0aD0iMjRweCIgZmlsbD0iIzAwMDAwMCI+CiAgPHBhdGggZD0iTTAgMGgyNHYyNEgweiIgZmlsbD0ibm9uZSIvPjxwYXRoIGNsYXNzPSJqcC1pY29uMyBqcC1pY29uLXNlbGVjdGFibGUiIGZpbGw9IiM2MTYxNjEiIGQ9Ik0xMCAyMHYtNmg0djZoNXYtOGgzTDEyIDMgMiAxMmgzdjh6Ii8+Cjwvc3ZnPgo=);--jp-icon-html5:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDUxMiA1MTIiPgogIDxwYXRoIGNsYXNzPSJqcC1pY29uMCBqcC1pY29uLXNlbGVjdGFibGUiIGZpbGw9IiMwMDAiIGQ9Ik0xMDguNCAwaDIzdjIyLjhoMjEuMlYwaDIzdjY5aC0yM1Y0NmgtMjF2MjNoLTIzLjJNMjA2IDIzaC0yMC4zVjBoNjMuN3YyM0gyMjl2NDZoLTIzbTUzLjUtNjloMjQuMWwxNC44IDI0LjNMMzEzLjIgMGgyNC4xdjY5aC0yM1YzNC44bC0xNi4xIDI0LjgtMTYuMS0yNC44VjY5aC0yMi42bTg5LjItNjloMjN2NDYuMmgzMi42VjY5aC01NS42Ii8+CiAgPHBhdGggY2xhc3M9ImpwLWljb24tc2VsZWN0YWJsZSIgZmlsbD0iI2U0NGQyNiIgZD0iTTEwNy42IDQ3MWwtMzMtMzcwLjRoMzYyLjhsLTMzIDM3MC4yTDI1NS43IDUxMiIvPgogIDxwYXRoIGNsYXNzPSJqcC1pY29uLXNlbGVjdGFibGUiIGZpbGw9IiNmMTY1MjkiIGQ9Ik0yNTYgNDgwLjVWMTMxaDE0OC4zTDM3NiA0NDciLz4KICA8cGF0aCBjbGFzcz0ianAtaWNvbi1zZWxlY3RhYmxlLWludmVyc2UiIGZpbGw9IiNlYmViZWIiIGQ9Ik0xNDIgMTc2LjNoMTE0djQ1LjRoLTY0LjJsNC4yIDQ2LjVoNjB2NDUuM0gxNTQuNG0yIDIyLjhIMjAybDMuMiAzNi4zIDUwLjggMTMuNnY0Ny40bC05My4yLTI2Ii8+CiAgPHBhdGggY2xhc3M9ImpwLWljb24tc2VsZWN0YWJsZS1pbnZlcnNlIiBmaWxsPSIjZmZmIiBkPSJNMzY5LjYgMTc2LjNIMjU1Ljh2NDUuNGgxMDkuNm0tNC4xIDQ2LjVIMjU1Ljh2NDUuNGg1NmwtNS4zIDU5LTUwLjcgMTMuNnY0Ny4ybDkzLTI1LjgiLz4KPC9zdmc+Cg==);--jp-icon-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIyIDIyIj4KICA8cGF0aCBjbGFzcz0ianAtaWNvbi1icmFuZDQganAtaWNvbi1zZWxlY3RhYmxlLWludmVyc2UiIGZpbGw9IiNGRkYiIGQ9Ik0yLjIgMi4yaDE3LjV2MTcuNUgyLjJ6Ii8+CiAgPHBhdGggY2xhc3M9ImpwLWljb24tYnJhbmQwIGpwLWljb24tc2VsZWN0YWJsZSIgZmlsbD0iIzNGNTFCNSIgZD0iTTIuMiAyLjJ2MTcuNWgxNy41bC4xLTE3LjVIMi4yem0xMi4xIDIuMmMxLjIgMCAyLjIgMSAyLjIgMi4ycy0xIDIuMi0yLjIgMi4yLTIuMi0xLTIuMi0yLjIgMS0yLjIgMi4yLTIuMnpNNC40IDE3LjZsMy4zLTguOCAzLjMgNi42IDIuMi0zLjIgNC40IDUuNEg0LjR6Ii8+Cjwvc3ZnPgo=);--jp-icon-info:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDUwLjk3OCA1MC45NzgiPgoJPGcgY2xhc3M9ImpwLWljb24zIiBmaWxsPSIjNjE2MTYxIj4KCQk8cGF0aCBkPSJNNDMuNTIsNy40NThDMzguNzExLDIuNjQ4LDMyLjMwNywwLDI1LjQ4OSwwQzE4LjY3LDAsMTIuMjY2LDIuNjQ4LDcuNDU4LDcuNDU4CgkJCWMtOS45NDMsOS45NDEtOS45NDMsMjYuMTE5LDAsMzYuMDYyYzQuODA5LDQuODA5LDExLjIxMiw3LjQ1NiwxOC4wMzEsNy40NThjMCwwLDAuMDAxLDAsMC4wMDIsMAoJCQljNi44MTYsMCwxMy4yMjEtMi42NDgsMTguMDI5LTcuNDU4YzQuODA5LTQuODA5LDcuNDU3LTExLjIxMiw3LjQ1Ny0xOC4wM0M1MC45NzcsMTguNjcsNDguMzI4LDEyLjI2Niw0My41Miw3LjQ1OHoKCQkJIE00Mi4xMDYsNDIuMTA1Yy00LjQzMiw0LjQzMS0xMC4zMzIsNi44NzItMTYuNjE1LDYuODcyaC0wLjAwMmMtNi4yODUtMC4wMDEtMTIuMTg3LTIuNDQxLTE2LjYxNy02Ljg3MgoJCQljLTkuMTYyLTkuMTYzLTkuMTYyLTI0LjA3MSwwLTMzLjIzM0MxMy4zMDMsNC40NCwxOS4yMDQsMiwyNS40ODksMmM2LjI4NCwwLDEyLjE4NiwyLjQ0LDE2LjYxNyw2Ljg3MgoJCQljNC40MzEsNC40MzEsNi44NzEsMTAuMzMyLDYuODcxLDE2LjYxN0M0OC45NzcsMzEuNzcyLDQ2LjUzNiwzNy42NzUsNDIuMTA2LDQyLjEwNXoiLz4KCQk8cGF0aCBkPSJNMjMuNTc4LDMyLjIxOGMtMC4wMjMtMS43MzQsMC4xNDMtMy4wNTksMC40OTYtMy45NzJjMC4zNTMtMC45MTMsMS4xMS0xLjk5NywyLjI3Mi0zLjI1MwoJCQljMC40NjgtMC41MzYsMC45MjMtMS4wNjIsMS4zNjctMS41NzVjMC42MjYtMC43NTMsMS4xMDQtMS40NzgsMS40MzYtMi4xNzVjMC4zMzEtMC43MDcsMC40OTUtMS41NDEsMC40OTUtMi41CgkJCWMwLTEuMDk2LTAuMjYtMi4wODgtMC43NzktMi45NzljLTAuNTY1LTAuODc5LTEuNTAxLTEuMzM2LTIuODA2LTEuMzY5Yy0xLjgwMiwwLjA1Ny0yLjk4NSwwLjY2Ny0zLjU1LDEuODMyCgkJCWMtMC4zMDEsMC41MzUtMC41MDMsMS4xNDEtMC42MDcsMS44MTRjLTAuMTM5LDAuNzA3LTAuMjA3LDEuNDMyLTAuMjA3LDIuMTc0aC0yLjkzN2MtMC4wOTEtMi4yMDgsMC40MDctNC4xMTQsMS40OTMtNS43MTkKCQkJYzEuMDYyLTEuNjQsMi44NTUtMi40ODEsNS4zNzgtMi41MjdjMi4xNiwwLjAyMywzLjg3NCwwLjYwOCw1LjE0MSwxLjc1OGMxLjI3OCwxLjE2LDEuOTI5LDIuNzY0LDEuOTUsNC44MTEKCQkJYzAsMS4xNDItMC4xMzcsMi4xMTEtMC40MSwyLjkxMWMtMC4zMDksMC44NDUtMC43MzEsMS41OTMtMS4yNjgsMi4yNDNjLTAuNDkyLDAuNjUtMS4wNjgsMS4zMTgtMS43MywyLjAwMgoJCQljLTAuNjUsMC42OTctMS4zMTMsMS40NzktMS45ODcsMi4zNDZjLTAuMjM5LDAuMzc3LTAuNDI5LDAuNzc3LTAuNTY1LDEuMTk5Yy0wLjE2LDAuOTU5LTAuMjE3LDEuOTUxLTAuMTcxLDIuOTc5CgkJCUMyNi41ODksMzIuMjE4LDIzLjU3OCwzMi4yMTgsMjMuNTc4LDMyLjIxOHogTTIzLjU3OCwzOC4yMnYtMy40ODRoMy4wNzZ2My40ODRIMjMuNTc4eiIvPgoJPC9nPgo8L3N2Zz4K);--jp-icon-inspector:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8cGF0aCBjbGFzcz0ianAtaW5zcGVjdG9yLWljb24tY29sb3IganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjNjE2MTYxIiBkPSJNMjAgNEg0Yy0xLjEgMC0xLjk5LjktMS45OSAyTDIgMThjMCAxLjEuOSAyIDIgMmgxNmMxLjEgMCAyLS45IDItMlY2YzAtMS4xLS45LTItMi0yem0tNSAxNEg0di00aDExdjR6bTAtNUg0VjloMTF2NHptNSA1aC00VjloNHY5eiIvPgo8L3N2Zz4K);--jp-icon-json:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIyIDIyIj4KICA8ZyBjbGFzcz0ianAtanNvbi1pY29uLWNvbG9yIGpwLWljb24tc2VsZWN0YWJsZSIgZmlsbD0iI0Y5QTgyNSI+CiAgICA8cGF0aCBkPSJNMjAuMiAxMS44Yy0xLjYgMC0xLjcuNS0xLjcgMSAwIC40LjEuOS4xIDEuMy4xLjUuMS45LjEgMS4zIDAgMS43LTEuNCAyLjMtMy41IDIuM2gtLjl2LTEuOWguNWMxLjEgMCAxLjQgMCAxLjQtLjggMC0uMyAwLS42LS4xLTEgMC0uNC0uMS0uOC0uMS0xLjIgMC0xLjMgMC0xLjggMS4zLTItMS4zLS4yLTEuMy0uNy0xLjMtMiAwLS40LjEtLjguMS0xLjIuMS0uNC4xLS43LjEtMSAwLS44LS40LS43LTEuNC0uOGgtLjVWNC4xaC45YzIuMiAwIDMuNS43IDMuNSAyLjMgMCAuNC0uMS45LS4xIDEuMy0uMS41LS4xLjktLjEgMS4zIDAgLjUuMiAxIDEuNyAxdjEuOHpNMS44IDEwLjFjMS42IDAgMS43LS41IDEuNy0xIDAtLjQtLjEtLjktLjEtMS4zLS4xLS41LS4xLS45LS4xLTEuMyAwLTEuNiAxLjQtMi4zIDMuNS0yLjNoLjl2MS45aC0uNWMtMSAwLTEuNCAwLTEuNC44IDAgLjMgMCAuNi4xIDEgMCAuMi4xLjYuMSAxIDAgMS4zIDAgMS44LTEuMyAyQzYgMTEuMiA2IDExLjcgNiAxM2MwIC40LS4xLjgtLjEgMS4yLS4xLjMtLjEuNy0uMSAxIDAgLjguMy44IDEuNC44aC41djEuOWgtLjljLTIuMSAwLTMuNS0uNi0zLjUtMi4zIDAtLjQuMS0uOS4xLTEuMy4xLS41LjEtLjkuMS0xLjMgMC0uNS0uMi0xLTEuNy0xdi0xLjl6Ii8+CiAgICA8Y2lyY2xlIGN4PSIxMSIgY3k9IjEzLjgiIHI9IjIuMSIvPgogICAgPGNpcmNsZSBjeD0iMTEiIGN5PSI4LjIiIHI9IjIuMSIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-julia:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDMyNSAzMDAiPgogIDxnIGNsYXNzPSJqcC1icmFuZDAganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjY2IzYzMzIj4KICAgIDxwYXRoIGQ9Ik0gMTUwLjg5ODQzOCAyMjUgQyAxNTAuODk4NDM4IDI2Ni40MjE4NzUgMTE3LjMyMDMxMiAzMDAgNzUuODk4NDM4IDMwMCBDIDM0LjQ3NjU2MiAzMDAgMC44OTg0MzggMjY2LjQyMTg3NSAwLjg5ODQzOCAyMjUgQyAwLjg5ODQzOCAxODMuNTc4MTI1IDM0LjQ3NjU2MiAxNTAgNzUuODk4NDM4IDE1MCBDIDExNy4zMjAzMTIgMTUwIDE1MC44OTg0MzggMTgzLjU3ODEyNSAxNTAuODk4NDM4IDIyNSIvPgogIDwvZz4KICA8ZyBjbGFzcz0ianAtYnJhbmQwIGpwLWljb24tc2VsZWN0YWJsZSIgZmlsbD0iIzM4OTgyNiI+CiAgICA8cGF0aCBkPSJNIDIzNy41IDc1IEMgMjM3LjUgMTE2LjQyMTg3NSAyMDMuOTIxODc1IDE1MCAxNjIuNSAxNTAgQyAxMjEuMDc4MTI1IDE1MCA4Ny41IDExNi40MjE4NzUgODcuNSA3NSBDIDg3LjUgMzMuNTc4MTI1IDEyMS4wNzgxMjUgMCAxNjIuNSAwIEMgMjAzLjkyMTg3NSAwIDIzNy41IDMzLjU3ODEyNSAyMzcuNSA3NSIvPgogIDwvZz4KICA8ZyBjbGFzcz0ianAtYnJhbmQwIGpwLWljb24tc2VsZWN0YWJsZSIgZmlsbD0iIzk1NThiMiI+CiAgICA8cGF0aCBkPSJNIDMyNC4xMDE1NjIgMjI1IEMgMzI0LjEwMTU2MiAyNjYuNDIxODc1IDI5MC41MjM0MzggMzAwIDI0OS4xMDE1NjIgMzAwIEMgMjA3LjY3OTY4OCAzMDAgMTc0LjEwMTU2MiAyNjYuNDIxODc1IDE3NC4xMDE1NjIgMjI1IEMgMTc0LjEwMTU2MiAxODMuNTc4MTI1IDIwNy42Nzk2ODggMTUwIDI0OS4xMDE1NjIgMTUwIEMgMjkwLjUyMzQzOCAxNTAgMzI0LjEwMTU2MiAxODMuNTc4MTI1IDMyNC4xMDE1NjIgMjI1Ii8+CiAgPC9nPgo8L3N2Zz4K);--jp-icon-jupyter-favicon:url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTUyIiBoZWlnaHQ9IjE2NSIgdmlld0JveD0iMCAwIDE1MiAxNjUiIHZlcnNpb249IjEuMSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICAgPGcgY2xhc3M9ImpwLWp1cHl0ZXItaWNvbi1jb2xvciIgZmlsbD0iI0YzNzcyNiI+CiAgICA8cGF0aCB0cmFuc2Zvcm09InRyYW5zbGF0ZSgwLjA3ODk0NywgMTEwLjU4MjkyNykiIGQ9Ik03NS45NDIyODQyLDI5LjU4MDQ1NjEgQzQzLjMwMjM5NDcsMjkuNTgwNDU2MSAxNC43OTY3ODMyLDE3LjY1MzQ2MzQgMCwwIEM1LjUxMDgzMjExLDE1Ljg0MDY4MjkgMTUuNzgxNTM4OSwyOS41NjY3NzMyIDI5LjM5MDQ5NDcsMzkuMjc4NDE3MSBDNDIuOTk5Nyw0OC45ODk4NTM3IDU5LjI3MzcsNTQuMjA2NzgwNSA3NS45NjA1Nzg5LDU0LjIwNjc4MDUgQzkyLjY0NzQ1NzksNTQuMjA2NzgwNSAxMDguOTIxNDU4LDQ4Ljk4OTg1MzcgMTIyLjUzMDY2MywzOS4yNzg0MTcxIEMxMzYuMTM5NDUzLDI5LjU2Njc3MzIgMTQ2LjQxMDI4NCwxNS44NDA2ODI5IDE1MS45MjExNTgsMCBDMTM3LjA4Nzg2OCwxNy42NTM0NjM0IDEwOC41ODI1ODksMjkuNTgwNDU2MSA3NS45NDIyODQyLDI5LjU4MDQ1NjEgTDc1Ljk0MjI4NDIsMjkuNTgwNDU2MSBaIiAvPgogICAgPHBhdGggdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMC4wMzczNjgsIDAuNzA0ODc4KSIgZD0iTTc1Ljk3ODQ1NzksMjQuNjI2NDA3MyBDMTA4LjYxODc2MywyNC42MjY0MDczIDEzNy4xMjQ0NTgsMzYuNTUzNDQxNSAxNTEuOTIxMTU4LDU0LjIwNjc4MDUgQzE0Ni40MTAyODQsMzguMzY2MjIyIDEzNi4xMzk0NTMsMjQuNjQwMTMxNyAxMjIuNTMwNjYzLDE0LjkyODQ4NzggQzEwOC45MjE0NTgsNS4yMTY4NDM5IDkyLjY0NzQ1NzksMCA3NS45NjA1Nzg5LDAgQzU5LjI3MzcsMCA0Mi45OTk3LDUuMjE2ODQzOSAyOS4zOTA0OTQ3LDE0LjkyODQ4NzggQzE1Ljc4MTUzODksMjQuNjQwMTMxNyA1LjUxMDgzMjExLDM4LjM2NjIyMiAwLDU0LjIwNjc4MDUgQzE0LjgzMzA4MTYsMzYuNTg5OTI5MyA0My4zMzg1Njg0LDI0LjYyNjQwNzMgNzUuOTc4NDU3OSwyNC42MjY0MDczIEw3NS45Nzg0NTc5LDI0LjYyNjQwNzMgWiIgLz4KICA8L2c+Cjwvc3ZnPgo=);--jp-icon-jupyter:url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMzkiIGhlaWdodD0iNTEiIHZpZXdCb3g9IjAgMCAzOSA1MSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyB0cmFuc2Zvcm09InRyYW5zbGF0ZSgtMTYzOCAtMjI4MSkiPgogICAgIDxnIGNsYXNzPSJqcC1qdXB5dGVyLWljb24tY29sb3IiIGZpbGw9IiNGMzc3MjYiPgogICAgICA8cGF0aCB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxNjM5Ljc0IDIzMTEuOTgpIiBkPSJNIDE4LjI2NDYgNy4xMzQxMUMgMTAuNDE0NSA3LjEzNDExIDMuNTU4NzIgNC4yNTc2IDAgMEMgMS4zMjUzOSAzLjgyMDQgMy43OTU1NiA3LjEzMDgxIDcuMDY4NiA5LjQ3MzAzQyAxMC4zNDE3IDExLjgxNTIgMTQuMjU1NyAxMy4wNzM0IDE4LjI2OSAxMy4wNzM0QyAyMi4yODIzIDEzLjA3MzQgMjYuMTk2MyAxMS44MTUyIDI5LjQ2OTQgOS40NzMwM0MgMzIuNzQyNCA3LjEzMDgxIDM1LjIxMjYgMy44MjA0IDM2LjUzOCAwQyAzMi45NzA1IDQuMjU3NiAyNi4xMTQ4IDcuMTM0MTEgMTguMjY0NiA3LjEzNDExWiIvPgogICAgICA8cGF0aCB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxNjM5LjczIDIyODUuNDgpIiBkPSJNIDE4LjI3MzMgNS45MzkzMUMgMjYuMTIzNSA1LjkzOTMxIDMyLjk3OTMgOC44MTU4MyAzNi41MzggMTMuMDczNEMgMzUuMjEyNiA5LjI1MzAzIDMyLjc0MjQgNS45NDI2MiAyOS40Njk0IDMuNjAwNEMgMjYuMTk2MyAxLjI1ODE4IDIyLjI4MjMgMCAxOC4yNjkgMEMgMTQuMjU1NyAwIDEwLjM0MTcgMS4yNTgxOCA3LjA2ODYgMy42MDA0QyAzLjc5NTU2IDUuOTQyNjIgMS4zMjUzOSA5LjI1MzAzIDAgMTMuMDczNEMgMy41Njc0NSA4LjgyNDYzIDEwLjQyMzIgNS45MzkzMSAxOC4yNzMzIDUuOTM5MzFaIi8+CiAgICA8L2c+CiAgICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgICA8cGF0aCB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxNjY5LjMgMjI4MS4zMSkiIGQ9Ik0gNS44OTM1MyAyLjg0NEMgNS45MTg4OSAzLjQzMTY1IDUuNzcwODUgNC4wMTM2NyA1LjQ2ODE1IDQuNTE2NDVDIDUuMTY1NDUgNS4wMTkyMiA0LjcyMTY4IDUuNDIwMTUgNC4xOTI5OSA1LjY2ODUxQyAzLjY2NDMgNS45MTY4OCAzLjA3NDQ0IDYuMDAxNTEgMi40OTgwNSA1LjkxMTcxQyAxLjkyMTY2IDUuODIxOSAxLjM4NDYzIDUuNTYxNyAwLjk1NDg5OCA1LjE2NDAxQyAwLjUyNTE3IDQuNzY2MzMgMC4yMjIwNTYgNC4yNDkwMyAwLjA4MzkwMzcgMy42Nzc1N0MgLTAuMDU0MjQ4MyAzLjEwNjExIC0wLjAyMTIzIDIuNTA2MTcgMC4xNzg3ODEgMS45NTM2NEMgMC4zNzg3OTMgMS40MDExIDAuNzM2ODA5IDAuOTIwODE3IDEuMjA3NTQgMC41NzM1MzhDIDEuNjc4MjYgMC4yMjYyNTkgMi4yNDA1NSAwLjAyNzU5MTkgMi44MjMyNiAwLjAwMjY3MjI5QyAzLjYwMzg5IC0wLjAzMDcxMTUgNC4zNjU3MyAwLjI0OTc4OSA0Ljk0MTQyIDAuNzgyNTUxQyA1LjUxNzExIDEuMzE1MzEgNS44NTk1NiAyLjA1Njc2IDUuODkzNTMgMi44NDRaIi8+CiAgICAgIDxwYXRoIHRyYW5zZm9ybT0idHJhbnNsYXRlKDE2MzkuOCAyMzIzLjgxKSIgZD0iTSA3LjQyNzg5IDMuNTgzMzhDIDcuNDYwMDggNC4zMjQzIDcuMjczNTUgNS4wNTgxOSA2Ljg5MTkzIDUuNjkyMTNDIDYuNTEwMzEgNi4zMjYwNyA1Ljk1MDc1IDYuODMxNTYgNS4yODQxMSA3LjE0NDZDIDQuNjE3NDcgNy40NTc2MyAzLjg3MzcxIDcuNTY0MTQgMy4xNDcwMiA3LjQ1MDYzQyAyLjQyMDMyIDcuMzM3MTIgMS43NDMzNiA3LjAwODcgMS4yMDE4NCA2LjUwNjk1QyAwLjY2MDMyOCA2LjAwNTIgMC4yNzg2MSA1LjM1MjY4IDAuMTA1MDE3IDQuNjMyMDJDIC0wLjA2ODU3NTcgMy45MTEzNSAtMC4wMjYyMzYxIDMuMTU0OTQgMC4yMjY2NzUgMi40NTg1NkMgMC40Nzk1ODcgMS43NjIxNyAwLjkzMTY5NyAxLjE1NzEzIDEuNTI1NzYgMC43MjAwMzNDIDIuMTE5ODMgMC4yODI5MzUgMi44MjkxNCAwLjAzMzQzOTUgMy41NjM4OSAwLjAwMzEzMzQ0QyA0LjU0NjY3IC0wLjAzNzQwMzMgNS41MDUyOSAwLjMxNjcwNiA2LjIyOTYxIDAuOTg3ODM1QyA2Ljk1MzkzIDEuNjU4OTYgNy4zODQ4NCAyLjU5MjM1IDcuNDI3ODkgMy41ODMzOEwgNy40Mjc4OSAzLjU4MzM4WiIvPgogICAgICA8cGF0aCB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxNjM4LjM2IDIyODYuMDYpIiBkPSJNIDIuMjc0NzEgNC4zOTYyOUMgMS44NDM2MyA0LjQxNTA4IDEuNDE2NzEgNC4zMDQ0NSAxLjA0Nzk5IDQuMDc4NDNDIDAuNjc5MjY4IDMuODUyNCAwLjM4NTMyOCAzLjUyMTE0IDAuMjAzMzcxIDMuMTI2NTZDIDAuMDIxNDEzNiAyLjczMTk4IC0wLjA0MDM3OTggMi4yOTE4MyAwLjAyNTgxMTYgMS44NjE4MUMgMC4wOTIwMDMxIDEuNDMxOCAwLjI4MzIwNCAxLjAzMTI2IDAuNTc1MjEzIDAuNzEwODgzQyAwLjg2NzIyMiAwLjM5MDUxIDEuMjQ2OTEgMC4xNjQ3MDggMS42NjYyMiAwLjA2MjA1OTJDIDIuMDg1NTMgLTAuMDQwNTg5NyAyLjUyNTYxIC0wLjAxNTQ3MTQgMi45MzA3NiAwLjEzNDIzNUMgMy4zMzU5MSAwLjI4Mzk0MSAzLjY4NzkyIDAuNTUxNTA1IDMuOTQyMjIgMC45MDMwNkMgNC4xOTY1MiAxLjI1NDYyIDQuMzQxNjkgMS42NzQzNiA0LjM1OTM1IDIuMTA5MTZDIDQuMzgyOTkgMi42OTEwNyA0LjE3Njc4IDMuMjU4NjkgMy43ODU5NyAzLjY4NzQ2QyAzLjM5NTE2IDQuMTE2MjQgMi44NTE2NiA0LjM3MTE2IDIuMjc0NzEgNC4zOTYyOUwgMi4yNzQ3MSA0LjM5NjI5WiIvPgogICAgPC9nPgogIDwvZz4+Cjwvc3ZnPgo=);--jp-icon-jupyterlab-wordmark:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyMDAiIHZpZXdCb3g9IjAgMCAxODYwLjggNDc1Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjIiIGZpbGw9IiM0RTRFNEUiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDQ4MC4xMzY0MDEsIDY0LjI3MTQ5MykiPgogICAgPGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMC4wMDAwMDAsIDU4Ljg3NTU2NikiPgogICAgICA8ZyB0cmFuc2Zvcm09InRyYW5zbGF0ZSgwLjA4NzYwMywgMC4xNDAyOTQpIj4KICAgICAgICA8cGF0aCBkPSJNLTQyNi45LDE2OS44YzAsNDguNy0zLjcsNjQuNy0xMy42LDc2LjRjLTEwLjgsMTAtMjUsMTUuNS0zOS43LDE1LjVsMy43LDI5IGMyMi44LDAuMyw0NC44LTcuOSw2MS45LTIzLjFjMTcuOC0xOC41LDI0LTQ0LjEsMjQtODMuM1YwSC00Mjd2MTcwLjFMLTQyNi45LDE2OS44TC00MjYuOSwxNjkuOHoiLz4KICAgICAgPC9nPgogICAgPC9nPgogICAgPGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMTU1LjA0NTI5NiwgNTYuODM3MTA0KSI+CiAgICAgIDxnIHRyYW5zZm9ybT0idHJhbnNsYXRlKDEuNTYyNDUzLCAxLjc5OTg0MikiPgogICAgICAgIDxwYXRoIGQ9Ik0tMzEyLDE0OGMwLDIxLDAsMzkuNSwxLjcsNTUuNGgtMzEuOGwtMi4xLTMzLjNoLTAuOGMtNi43LDExLjYtMTYuNCwyMS4zLTI4LDI3LjkgYy0xMS42LDYuNi0yNC44LDEwLTM4LjIsOS44Yy0zMS40LDAtNjktMTcuNy02OS04OVYwaDM2LjR2MTEyLjdjMCwzOC43LDExLjYsNjQuNyw0NC42LDY0LjdjMTAuMy0wLjIsMjAuNC0zLjUsMjguOS05LjQgYzguNS01LjksMTUuMS0xNC4zLDE4LjktMjMuOWMyLjItNi4xLDMuMy0xMi41LDMuMy0xOC45VjAuMmgzNi40VjE0OEgtMzEyTC0zMTIsMTQ4eiIvPgogICAgICA8L2c+CiAgICA8L2c+CiAgICA8ZyB0cmFuc2Zvcm09InRyYW5zbGF0ZSgzOTAuMDEzMzIyLCA1My40Nzk2MzgpIj4KICAgICAgPGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMS43MDY0NTgsIDAuMjMxNDI1KSI+CiAgICAgICAgPHBhdGggZD0iTS00NzguNiw3MS40YzAtMjYtMC44LTQ3LTEuNy02Ni43aDMyLjdsMS43LDM0LjhoMC44YzcuMS0xMi41LDE3LjUtMjIuOCwzMC4xLTI5LjcgYzEyLjUtNywyNi43LTEwLjMsNDEtOS44YzQ4LjMsMCw4NC43LDQxLjcsODQuNywxMDMuM2MwLDczLjEtNDMuNywxMDkuMi05MSwxMDkuMmMtMTIuMSwwLjUtMjQuMi0yLjItMzUtNy44IGMtMTAuOC01LjYtMTkuOS0xMy45LTI2LjYtMjQuMmgtMC44VjI5MWgtMzZ2LTIyMEwtNDc4LjYsNzEuNEwtNDc4LjYsNzEuNHogTS00NDIuNiwxMjUuNmMwLjEsNS4xLDAuNiwxMC4xLDEuNywxNS4xIGMzLDEyLjMsOS45LDIzLjMsMTkuOCwzMS4xYzkuOSw3LjgsMjIuMSwxMi4xLDM0LjcsMTIuMWMzOC41LDAsNjAuNy0zMS45LDYwLjctNzguNWMwLTQwLjctMjEuMS03NS42LTU5LjUtNzUuNiBjLTEyLjksMC40LTI1LjMsNS4xLTM1LjMsMTMuNGMtOS45LDguMy0xNi45LDE5LjctMTkuNiwzMi40Yy0xLjUsNC45LTIuMywxMC0yLjUsMTUuMVYxMjUuNkwtNDQyLjYsMTI1LjZMLTQ0Mi42LDEyNS42eiIvPgogICAgICA8L2c+CiAgICA8L2c+CiAgICA8ZyB0cmFuc2Zvcm09InRyYW5zbGF0ZSg2MDYuNzQwNzI2LCA1Ni44MzcxMDQpIj4KICAgICAgPGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMC43NTEyMjYsIDEuOTg5Mjk5KSI+CiAgICAgICAgPHBhdGggZD0iTS00NDAuOCwwbDQzLjcsMTIwLjFjNC41LDEzLjQsOS41LDI5LjQsMTIuOCw0MS43aDAuOGMzLjctMTIuMiw3LjktMjcuNywxMi44LTQyLjQgbDM5LjctMTE5LjJoMzguNUwtMzQ2LjksMTQ1Yy0yNiw2OS43LTQzLjcsMTA1LjQtNjguNiwxMjcuMmMtMTIuNSwxMS43LTI3LjksMjAtNDQuNiwyMy45bC05LjEtMzEuMSBjMTEuNy0zLjksMjIuNS0xMC4xLDMxLjgtMTguMWMxMy4yLTExLjEsMjMuNy0yNS4yLDMwLjYtNDEuMmMxLjUtMi44LDIuNS01LjcsMi45LTguOGMtMC4zLTMuMy0xLjItNi42LTIuNS05LjdMLTQ4MC4yLDAuMSBoMzkuN0wtNDQwLjgsMEwtNDQwLjgsMHoiLz4KICAgICAgPC9nPgogICAgPC9nPgogICAgPGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoODIyLjc0ODEwNCwgMC4wMDAwMDApIj4KICAgICAgPGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMS40NjQwNTAsIDAuMzc4OTE0KSI+CiAgICAgICAgPHBhdGggZD0iTS00MTMuNywwdjU4LjNoNTJ2MjguMmgtNTJWMTk2YzAsMjUsNywzOS41LDI3LjMsMzkuNWM3LjEsMC4xLDE0LjItMC43LDIxLjEtMi41IGwxLjcsMjcuN2MtMTAuMywzLjctMjEuMyw1LjQtMzIuMiw1Yy03LjMsMC40LTE0LjYtMC43LTIxLjMtMy40Yy02LjgtMi43LTEyLjktNi44LTE3LjktMTIuMWMtMTAuMy0xMC45LTE0LjEtMjktMTQuMS01Mi45IFY4Ni41aC0zMVY1OC4zaDMxVjkuNkwtNDEzLjcsMEwtNDEzLjcsMHoiLz4KICAgICAgPC9nPgogICAgPC9nPgogICAgPGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoOTc0LjQzMzI4NiwgNTMuNDc5NjM4KSI+CiAgICAgIDxnIHRyYW5zZm9ybT0idHJhbnNsYXRlKDAuOTkwMDM0LCAwLjYxMDMzOSkiPgogICAgICAgIDxwYXRoIGQ9Ik0tNDQ1LjgsMTEzYzAuOCw1MCwzMi4yLDcwLjYsNjguNiw3MC42YzE5LDAuNiwzNy45LTMsNTUuMy0xMC41bDYuMiwyNi40IGMtMjAuOSw4LjktNDMuNSwxMy4xLTY2LjIsMTIuNmMtNjEuNSwwLTk4LjMtNDEuMi05OC4zLTEwMi41Qy00ODAuMiw0OC4yLTQ0NC43LDAtMzg2LjUsMGM2NS4yLDAsODIuNyw1OC4zLDgyLjcsOTUuNyBjLTAuMSw1LjgtMC41LDExLjUtMS4yLDE3LjJoLTE0MC42SC00NDUuOEwtNDQ1LjgsMTEzeiBNLTMzOS4yLDg2LjZjMC40LTIzLjUtOS41LTYwLjEtNTAuNC02MC4xIGMtMzYuOCwwLTUyLjgsMzQuNC01NS43LDYwLjFILTMzOS4yTC0zMzkuMiw4Ni42TC0zMzkuMiw4Ni42eiIvPgogICAgICA8L2c+CiAgICA8L2c+CiAgICA8ZyB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxMjAxLjk2MTA1OCwgNTMuNDc5NjM4KSI+CiAgICAgIDxnIHRyYW5zZm9ybT0idHJhbnNsYXRlKDEuMTc5NjQwLCAwLjcwNTA2OCkiPgogICAgICAgIDxwYXRoIGQ9Ik0tNDc4LjYsNjhjMC0yMy45LTAuNC00NC41LTEuNy02My40aDMxLjhsMS4yLDM5LjloMS43YzkuMS0yNy4zLDMxLTQ0LjUsNTUuMy00NC41IGMzLjUtMC4xLDcsMC40LDEwLjMsMS4ydjM0LjhjLTQuMS0wLjktOC4yLTEuMy0xMi40LTEuMmMtMjUuNiwwLTQzLjcsMTkuNy00OC43LDQ3LjRjLTEsNS43LTEuNiwxMS41LTEuNywxNy4ydjEwOC4zaC0zNlY2OCBMLTQ3OC42LDY4eiIvPgogICAgICA8L2c+CiAgICA8L2c+CiAgPC9nPgoKICA8ZyBjbGFzcz0ianAtaWNvbi13YXJuMCIgZmlsbD0iI0YzNzcyNiI+CiAgICA8cGF0aCBkPSJNMTM1Mi4zLDMyNi4yaDM3VjI4aC0zN1YzMjYuMnogTTE2MDQuOCwzMjYuMmMtMi41LTEzLjktMy40LTMxLjEtMy40LTQ4Ljd2LTc2IGMwLTQwLjctMTUuMS04My4xLTc3LjMtODMuMWMtMjUuNiwwLTUwLDcuMS02Ni44LDE4LjFsOC40LDI0LjRjMTQuMy05LjIsMzQtMTUuMSw1My0xNS4xYzQxLjYsMCw0Ni4yLDMwLjIsNDYuMiw0N3Y0LjIgYy03OC42LTAuNC0xMjIuMywyNi41LTEyMi4zLDc1LjZjMCwyOS40LDIxLDU4LjQsNjIuMiw1OC40YzI5LDAsNTAuOS0xNC4zLDYyLjItMzAuMmgxLjNsMi45LDI1LjZIMTYwNC44eiBNMTU2NS43LDI1Ny43IGMwLDMuOC0wLjgsOC0yLjEsMTEuOGMtNS45LDE3LjItMjIuNywzNC00OS4yLDM0Yy0xOC45LDAtMzQuOS0xMS4zLTM0LjktMzUuM2MwLTM5LjUsNDUuOC00Ni42LDg2LjItNDUuOFYyNTcuN3ogTTE2OTguNSwzMjYuMiBsMS43LTMzLjZoMS4zYzE1LjEsMjYuOSwzOC43LDM4LjIsNjguMSwzOC4yYzQ1LjQsMCw5MS4yLTM2LjEsOTEuMi0xMDguOGMwLjQtNjEuNy0zNS4zLTEwMy43LTg1LjctMTAzLjcgYy0zMi44LDAtNTYuMywxNC43LTY5LjMsMzcuNGgtMC44VjI4aC0zNi42djI0NS43YzAsMTguMS0wLjgsMzguNi0xLjcsNTIuNUgxNjk4LjV6IE0xNzA0LjgsMjA4LjJjMC01LjksMS4zLTEwLjksMi4xLTE1LjEgYzcuNi0yOC4xLDMxLjEtNDUuNCw1Ni4zLTQ1LjRjMzkuNSwwLDYwLjUsMzQuOSw2MC41LDc1LjZjMCw0Ni42LTIzLjEsNzguMS02MS44LDc4LjFjLTI2LjksMC00OC4zLTE3LjYtNTUuNS00My4zIGMtMC44LTQuMi0xLjctOC44LTEuNy0xMy40VjIwOC4yeiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-kernel:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICAgIDxwYXRoIGNsYXNzPSJqcC1pY29uMiIgZmlsbD0iIzYxNjE2MSIgZD0iTTE1IDlIOXY2aDZWOXptLTIgNGgtMnYtMmgydjJ6bTgtMlY5aC0yVjdjMC0xLjEtLjktMi0yLTJoLTJWM2gtMnYyaC0yVjNIOXYySDdjLTEuMSAwLTIgLjktMiAydjJIM3YyaDJ2MkgzdjJoMnYyYzAgMS4xLjkgMiAyIDJoMnYyaDJ2LTJoMnYyaDJ2LTJoMmMxLjEgMCAyLS45IDItMnYtMmgydi0yaC0ydi0yaDJ6bS00IDZIN1Y3aDEwdjEweiIvPgo8L3N2Zz4K);--jp-icon-keyboard:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8cGF0aCBjbGFzcz0ianAtaWNvbjMganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjNjE2MTYxIiBkPSJNMjAgNUg0Yy0xLjEgMC0xLjk5LjktMS45OSAyTDIgMTdjMCAxLjEuOSAyIDIgMmgxNmMxLjEgMCAyLS45IDItMlY3YzAtMS4xLS45LTItMi0yem0tOSAzaDJ2MmgtMlY4em0wIDNoMnYyaC0ydi0yek04IDhoMnYySDhWOHptMCAzaDJ2Mkg4di0yem0tMSAySDV2LTJoMnYyem0wLTNINVY4aDJ2MnptOSA3SDh2LTJoOHYyem0wLTRoLTJ2LTJoMnYyem0wLTNoLTJWOGgydjJ6bTMgM2gtMnYtMmgydjJ6bTAtM2gtMlY4aDJ2MnoiLz4KPC9zdmc+Cg==);--jp-icon-launch:url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMzIgMzIiIHdpZHRoPSIzMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjNjE2MTYxIj4KICAgIDxwYXRoIGQ9Ik0yNiwyOEg2YTIuMDAyNywyLjAwMjcsMCwwLDEtMi0yVjZBMi4wMDI3LDIuMDAyNywwLDAsMSw2LDRIMTZWNkg2VjI2SDI2VjE2aDJWMjZBMi4wMDI3LDIuMDAyNywwLDAsMSwyNiwyOFoiLz4KICAgIDxwb2x5Z29uIHBvaW50cz0iMjAgMiAyMCA0IDI2LjU4NiA0IDE4IDEyLjU4NiAxOS40MTQgMTQgMjggNS40MTQgMjggMTIgMzAgMTIgMzAgMiAyMCAyIi8+CiAgPC9nPgo8L3N2Zz4K);--jp-icon-launcher:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8cGF0aCBjbGFzcz0ianAtaWNvbjMganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjNjE2MTYxIiBkPSJNMTkgMTlINVY1aDdWM0g1YTIgMiAwIDAwLTIgMnYxNGEyIDIgMCAwMDIgMmgxNGMxLjEgMCAyLS45IDItMnYtN2gtMnY3ek0xNCAzdjJoMy41OWwtOS44MyA5LjgzIDEuNDEgMS40MUwxOSA2LjQxVjEwaDJWM2gtN3oiLz4KPC9zdmc+Cg==);--jp-icon-line-form:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICAgIDxwYXRoIGZpbGw9IndoaXRlIiBkPSJNNS44OCA0LjEyTDEzLjc2IDEybC03Ljg4IDcuODhMOCAyMmwxMC0xMEw4IDJ6Ii8+Cjwvc3ZnPgo=);--jp-icon-link:url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTMuOSAxMmMwLTEuNzEgMS4zOS0zLjEgMy4xLTMuMWg0VjdIN2MtMi43NiAwLTUgMi4yNC01IDVzMi4yNCA1IDUgNWg0di0xLjlIN2MtMS43MSAwLTMuMS0xLjM5LTMuMS0zLjF6TTggMTNoOHYtMkg4djJ6bTktNmgtNHYxLjloNGMxLjcxIDAgMy4xIDEuMzkgMy4xIDMuMXMtMS4zOSAzLjEtMy4xIDMuMWgtNFYxN2g0YzIuNzYgMCA1LTIuMjQgNS01cy0yLjI0LTUtNS01eiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-list:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICAgIDxwYXRoIGNsYXNzPSJqcC1pY29uMiBqcC1pY29uLXNlbGVjdGFibGUiIGZpbGw9IiM2MTYxNjEiIGQ9Ik0xOSA1djE0SDVWNWgxNG0xLjEtMkgzLjljLS41IDAtLjkuNC0uOS45djE2LjJjMCAuNC40LjkuOS45aDE2LjJjLjQgMCAuOS0uNS45LS45VjMuOWMwLS41LS41LS45LS45LS45ek0xMSA3aDZ2MmgtNlY3em0wIDRoNnYyaC02di0yem0wIDRoNnYyaC02ek03IDdoMnYySDd6bTAgNGgydjJIN3ptMCA0aDJ2Mkg3eiIvPgo8L3N2Zz4K);--jp-icon-markdown:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIyIDIyIj4KICA8cGF0aCBjbGFzcz0ianAtaWNvbi1jb250cmFzdDAganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjN0IxRkEyIiBkPSJNNSAxNC45aDEybC02LjEgNnptOS40LTYuOGMwLTEuMy0uMS0yLjktLjEtNC41LS40IDEuNC0uOSAyLjktMS4zIDQuM2wtMS4zIDQuM2gtMkw4LjUgNy45Yy0uNC0xLjMtLjctMi45LTEtNC4zLS4xIDEuNi0uMSAzLjItLjIgNC42TDcgMTIuNEg0LjhsLjctMTFoMy4zTDEwIDVjLjQgMS4yLjcgMi43IDEgMy45LjMtMS4yLjctMi42IDEtMy45bDEuMi0zLjdoMy4zbC42IDExaC0yLjRsLS4zLTQuMnoiLz4KPC9zdmc+Cg==);--jp-icon-move-down:url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTQiIGhlaWdodD0iMTQiIHZpZXdCb3g9IjAgMCAxNCAxNCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggY2xhc3M9ImpwLWljb24zIiBkPSJNMTIuNDcxIDcuNTI4OTlDMTIuNzYzMiA3LjIzNjg0IDEyLjc2MzIgNi43NjMxNiAxMi40NzEgNi40NzEwMVY2LjQ3MTAxQzEyLjE3OSA2LjE3OTA1IDExLjcwNTcgNi4xNzg4NCAxMS40MTM1IDYuNDcwNTRMNy43NSAxMC4xMjc1VjEuNzVDNy43NSAxLjMzNTc5IDcuNDE0MjEgMSA3IDFWMUM2LjU4NTc5IDEgNi4yNSAxLjMzNTc5IDYuMjUgMS43NVYxMC4xMjc1TDIuNTk3MjYgNi40NjgyMkMyLjMwMzM4IDYuMTczODEgMS44MjY0MSA2LjE3MzU5IDEuNTMyMjYgNi40Njc3NFY2LjQ2Nzc0QzEuMjM4MyA2Ljc2MTcgMS4yMzgzIDcuMjM4MyAxLjUzMjI2IDcuNTMyMjZMNi4yOTI4OSAxMi4yOTI5QzYuNjgzNDIgMTIuNjgzNCA3LjMxNjU4IDEyLjY4MzQgNy43MDcxMSAxMi4yOTI5TDEyLjQ3MSA3LjUyODk5WiIgZmlsbD0iIzYxNjE2MSIvPgo8L3N2Zz4K);--jp-icon-move-up:url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTQiIGhlaWdodD0iMTQiIHZpZXdCb3g9IjAgMCAxNCAxNCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggY2xhc3M9ImpwLWljb24zIiBkPSJNMS41Mjg5OSA2LjQ3MTAxQzEuMjM2ODQgNi43NjMxNiAxLjIzNjg0IDcuMjM2ODQgMS41Mjg5OSA3LjUyODk5VjcuNTI4OTlDMS44MjA5NSA3LjgyMDk1IDIuMjk0MjYgNy44MjExNiAyLjU4NjQ5IDcuNTI5NDZMNi4yNSAzLjg3MjVWMTIuMjVDNi4yNSAxMi42NjQyIDYuNTg1NzkgMTMgNyAxM1YxM0M3LjQxNDIxIDEzIDcuNzUgMTIuNjY0MiA3Ljc1IDEyLjI1VjMuODcyNUwxMS40MDI3IDcuNTMxNzhDMTEuNjk2NiA3LjgyNjE5IDEyLjE3MzYgNy44MjY0MSAxMi40Njc3IDcuNTMyMjZWNy41MzIyNkMxMi43NjE3IDcuMjM4MyAxMi43NjE3IDYuNzYxNyAxMi40Njc3IDYuNDY3NzRMNy43MDcxMSAxLjcwNzExQzcuMzE2NTggMS4zMTY1OCA2LjY4MzQyIDEuMzE2NTggNi4yOTI4OSAxLjcwNzExTDEuNTI4OTkgNi40NzEwMVoiIGZpbGw9IiM2MTYxNjEiLz4KPC9zdmc+Cg==);--jp-icon-new-folder:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTIwIDZoLThsLTItMkg0Yy0xLjExIDAtMS45OS44OS0xLjk5IDJMMiAxOGMwIDEuMTEuODkgMiAyIDJoMTZjMS4xMSAwIDItLjg5IDItMlY4YzAtMS4xMS0uODktMi0yLTJ6bS0xIDhoLTN2M2gtMnYtM2gtM3YtMmgzVjloMnYzaDN2MnoiLz4KICA8L2c+Cjwvc3ZnPgo=);--jp-icon-not-trusted:url(data:image/svg+xml;base64,PHN2ZyBmaWxsPSJub25lIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI1IDI1Ij4KICAgIDxwYXRoIGNsYXNzPSJqcC1pY29uMiIgc3Ryb2tlPSIjMzMzMzMzIiBzdHJva2Utd2lkdGg9IjIiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDMgMykiIGQ9Ik0xLjg2MDk0IDExLjQ0MDlDMC44MjY0NDggOC43NzAyNyAwLjg2Mzc3OSA2LjA1NzY0IDEuMjQ5MDcgNC4xOTkzMkMyLjQ4MjA2IDMuOTMzNDcgNC4wODA2OCAzLjQwMzQ3IDUuNjAxMDIgMi44NDQ5QzcuMjM1NDkgMi4yNDQ0IDguODU2NjYgMS41ODE1IDkuOTg3NiAxLjA5NTM5QzExLjA1OTcgMS41ODM0MSAxMi42MDk0IDIuMjQ0NCAxNC4yMTggMi44NDMzOUMxNS43NTAzIDMuNDEzOTQgMTcuMzk5NSAzLjk1MjU4IDE4Ljc1MzkgNC4yMTM4NUMxOS4xMzY0IDYuMDcxNzcgMTkuMTcwOSA4Ljc3NzIyIDE4LjEzOSAxMS40NDA5QzE3LjAzMDMgMTQuMzAzMiAxNC42NjY4IDE3LjE4NDQgOS45OTk5OSAxOC45MzU0QzUuMzMzMTkgMTcuMTg0NCAyLjk2OTY4IDE0LjMwMzIgMS44NjA5NCAxMS40NDA5WiIvPgogICAgPHBhdGggY2xhc3M9ImpwLWljb24yIiBzdHJva2U9IiMzMzMzMzMiIHN0cm9rZS13aWR0aD0iMiIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoOS4zMTU5MiA5LjMyMDMxKSIgZD0iTTcuMzY4NDIgMEwwIDcuMzY0NzkiLz4KICAgIDxwYXRoIGNsYXNzPSJqcC1pY29uMiIgc3Ryb2tlPSIjMzMzMzMzIiBzdHJva2Utd2lkdGg9IjIiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDkuMzE1OTIgMTYuNjgzNikgc2NhbGUoMSAtMSkiIGQ9Ik03LjM2ODQyIDBMMCA3LjM2NDc5Ii8+Cjwvc3ZnPgo=);--jp-icon-notebook:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIyIDIyIj4KICA8ZyBjbGFzcz0ianAtbm90ZWJvb2staWNvbi1jb2xvciBqcC1pY29uLXNlbGVjdGFibGUiIGZpbGw9IiNFRjZDMDAiPgogICAgPHBhdGggZD0iTTE4LjcgMy4zdjE1LjRIMy4zVjMuM2gxNS40bTEuNS0xLjVIMS44djE4LjNoMTguM2wuMS0xOC4zeiIvPgogICAgPHBhdGggZD0iTTE2LjUgMTYuNWwtNS40LTQuMy01LjYgNC4zdi0xMWgxMXoiLz4KICA8L2c+Cjwvc3ZnPgo=);--jp-icon-numbering:url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjIiIGhlaWdodD0iMjIiIHZpZXdCb3g9IjAgMCAyOCAyOCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KCTxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSI+CgkJPHBhdGggZD0iTTQgMTlINlYxOS41SDVWMjAuNUg2VjIxSDRWMjJIN1YxOEg0VjE5Wk01IDEwSDZWNkg0VjdINVYxMFpNNCAxM0g1LjhMNCAxNS4xVjE2SDdWMTVINS4yTDcgMTIuOVYxMkg0VjEzWk05IDdWOUgyM1Y3SDlaTTkgMjFIMjNWMTlIOVYyMVpNOSAxNUgyM1YxM0g5VjE1WiIvPgoJPC9nPgo8L3N2Zz4K);--jp-icon-offline-bolt:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNCAyNCIgd2lkdGg9IjE2Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTEyIDIuMDJjLTUuNTEgMC05Ljk4IDQuNDctOS45OCA5Ljk4czQuNDcgOS45OCA5Ljk4IDkuOTggOS45OC00LjQ3IDkuOTgtOS45OFMxNy41MSAyLjAyIDEyIDIuMDJ6TTExLjQ4IDIwdi02LjI2SDhMMTMgNHY2LjI2aDMuMzVMMTEuNDggMjB6Ii8+CiAgPC9nPgo8L3N2Zz4K);--jp-icon-palette:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTE4IDEzVjIwSDRWNkg5LjAyQzkuMDcgNS4yOSA5LjI0IDQuNjIgOS41IDRINEMyLjkgNCAyIDQuOSAyIDZWMjBDMiAyMS4xIDIuOSAyMiA0IDIySDE4QzE5LjEgMjIgMjAgMjEuMSAyMCAyMFYxNUwxOCAxM1pNMTkuMyA4Ljg5QzE5Ljc0IDguMTkgMjAgNy4zOCAyMCA2LjVDMjAgNC4wMSAxNy45OSAyIDE1LjUgMkMxMy4wMSAyIDExIDQuMDEgMTEgNi41QzExIDguOTkgMTMuMDEgMTEgMTUuNDkgMTFDMTYuMzcgMTEgMTcuMTkgMTAuNzQgMTcuODggMTAuM0wyMSAxMy40MkwyMi40MiAxMkwxOS4zIDguODlaTTE1LjUgOUMxNC4xMiA5IDEzIDcuODggMTMgNi41QzEzIDUuMTIgMTQuMTIgNCAxNS41IDRDMTYuODggNCAxOCA1LjEyIDE4IDYuNUMxOCA3Ljg4IDE2Ljg4IDkgMTUuNSA5WiIvPgogICAgPHBhdGggZmlsbC1ydWxlPSJldmVub2RkIiBjbGlwLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik00IDZIOS4wMTg5NEM5LjAwNjM5IDYuMTY1MDIgOSA2LjMzMTc2IDkgNi41QzkgOC44MTU3NyAxMC4yMTEgMTAuODQ4NyAxMi4wMzQzIDEySDlWMTRIMTZWMTIuOTgxMUMxNi41NzAzIDEyLjkzNzcgMTcuMTIgMTIuODIwNyAxNy42Mzk2IDEyLjYzOTZMMTggMTNWMjBINFY2Wk04IDhINlYxMEg4VjhaTTYgMTJIOFYxNEg2VjEyWk04IDE2SDZWMThIOFYxNlpNOSAxNkgxNlYxOEg5VjE2WiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-paste:url(data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIyNCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICAgIDxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSI+CiAgICAgICAgPHBhdGggZD0iTTE5IDJoLTQuMThDMTQuNC44NCAxMy4zIDAgMTIgMGMtMS4zIDAtMi40Ljg0LTIuODIgMkg1Yy0xLjEgMC0yIC45LTIgMnYxNmMwIDEuMS45IDIgMiAyaDE0YzEuMSAwIDItLjkgMi0yVjRjMC0xLjEtLjktMi0yLTJ6bS03IDBjLjU1IDAgMSAuNDUgMSAxcy0uNDUgMS0xIDEtMS0uNDUtMS0xIC40NS0xIDEtMXptNyAxOEg1VjRoMnYzaDEwVjRoMnYxNnoiLz4KICAgIDwvZz4KPC9zdmc+Cg==);--jp-icon-pdf:url(data:image/svg+xml;base64,PHN2ZwogICB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyMiAyMiIgd2lkdGg9IjE2Ij4KICAgIDxwYXRoIHRyYW5zZm9ybT0icm90YXRlKDQ1KSIgY2xhc3M9ImpwLWljb24tc2VsZWN0YWJsZSIgZmlsbD0iI0ZGMkEyQSIKICAgICAgIGQ9Im0gMjIuMzQ0MzY5LC0zLjAxNjM2NDIgaCA1LjYzODYwNCB2IDEuNTc5MjQzMyBoIC0zLjU0OTIyNyB2IDEuNTA4NjkyOTkgaCAzLjMzNzU3NiBWIDEuNjUwODE1NCBoIC0zLjMzNzU3NiB2IDMuNDM1MjYxMyBoIC0yLjA4OTM3NyB6IG0gLTcuMTM2NDQ0LDEuNTc5MjQzMyB2IDQuOTQzOTU0MyBoIDAuNzQ4OTIgcSAxLjI4MDc2MSwwIDEuOTUzNzAzLC0wLjYzNDk1MzUgMC42NzgzNjksLTAuNjM0OTUzNSAwLjY3ODM2OSwtMS44NDUxNjQxIDAsLTEuMjA0NzgzNTUgLTAuNjcyOTQyLC0xLjgzNDMxMDExIC0wLjY3Mjk0MiwtMC42Mjk1MjY1OSAtMS45NTkxMywtMC42Mjk1MjY1OSB6IG0gLTIuMDg5Mzc3LC0xLjU3OTI0MzMgaCAyLjIwMzM0MyBxIDEuODQ1MTY0LDAgMi43NDYwMzksMC4yNjU5MjA3IDAuOTA2MzAxLDAuMjYwNDkzNyAxLjU1MjEwOCwwLjg5MDAyMDMgMC41Njk4MywwLjU0ODEyMjMgMC44NDY2MDUsMS4yNjQ0ODAwNiAwLjI3Njc3NCwwLjcxNjM1NzgxIDAuMjc2Nzc0LDEuNjIyNjU4OTQgMCwwLjkxNzE1NTEgLTAuMjc2Nzc0LDEuNjM4OTM5OSAtMC4yNzY3NzUsMC43MTYzNTc4IC0wLjg0NjYwNSwxLjI2NDQ4IC0wLjY1MTIzNCwwLjYyOTUyNjYgLTEuNTYyOTYyLDAuODk1NDQ3MyAtMC45MTE3MjgsMC4yNjA0OTM3IC0yLjczNTE4NSwwLjI2MDQ5MzcgaCAtMi4yMDMzNDMgeiBtIC04LjE0NTg1NjUsMCBoIDMuNDY3ODIzIHEgMS41NDY2ODE2LDAgMi4zNzE1Nzg1LDAuNjg5MjIzIDAuODMwMzI0LDAuNjgzNzk2MSAwLjgzMDMyNCwxLjk1MzcwMzE0IDAsMS4yNzUzMzM5NyAtMC44MzAzMjQsMS45NjQ1NTcwNiBRIDkuOTg3MTk2MSwyLjI3NDkxNSA4LjQ0MDUxNDUsMi4yNzQ5MTUgSCA3LjA2MjA2ODQgViA1LjA4NjA3NjcgSCA0Ljk3MjY5MTUgWiBtIDIuMDg5Mzc2OSwxLjUxNDExOTkgdiAyLjI2MzAzOTQzIGggMS4xNTU5NDEgcSAwLjYwNzgxODgsMCAwLjkzODg2MjksLTAuMjkzMDU1NDcgMC4zMzEwNDQxLC0wLjI5ODQ4MjQxIDAuMzMxMDQ0MSwtMC44NDExNzc3MiAwLC0wLjU0MjY5NTMxIC0wLjMzMTA0NDEsLTAuODM1NzUwNzQgLTAuMzMxMDQ0MSwtMC4yOTMwNTU1IC0wLjkzODg2MjksLTAuMjkzMDU1NSB6IgovPgo8L3N2Zz4K);--jp-icon-python:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iLTEwIC0xMCAxMzEuMTYxMzYxNjk0MzM1OTQgMTMyLjM4ODk5OTkzODk2NDg0Ij4KICA8cGF0aCBjbGFzcz0ianAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjMzA2OTk4IiBkPSJNIDU0LjkxODc4NSw5LjE5Mjc0MjFlLTQgQyA1MC4zMzUxMzIsMC4wMjIyMTcyNyA0NS45NTc4NDYsMC40MTMxMzY5NyA0Mi4xMDYyODUsMS4wOTQ2NjkzIDMwLjc2MDA2OSwzLjA5OTE3MzEgMjguNzAwMDM2LDcuMjk0NzcxNCAyOC43MDAwMzUsMTUuMDMyMTY5IHYgMTAuMjE4NzUgaCAyNi44MTI1IHYgMy40MDYyNSBoIC0yNi44MTI1IC0xMC4wNjI1IGMgLTcuNzkyNDU5LDAgLTE0LjYxNTc1ODgsNC42ODM3MTcgLTE2Ljc0OTk5OTgsMTMuNTkzNzUgLTIuNDYxODE5OTgsMTAuMjEyOTY2IC0yLjU3MTAxNTA4LDE2LjU4NjAyMyAwLDI3LjI1IDEuOTA1OTI4Myw3LjkzNzg1MiA2LjQ1NzU0MzIsMTMuNTkzNzQ4IDE0LjI0OTk5OTgsMTMuNTkzNzUgaCA5LjIxODc1IHYgLTEyLjI1IGMgMCwtOC44NDk5MDIgNy42NTcxNDQsLTE2LjY1NjI0OCAxNi43NSwtMTYuNjU2MjUgaCAyNi43ODEyNSBjIDcuNDU0OTUxLDAgMTMuNDA2MjUzLC02LjEzODE2NCAxMy40MDYyNSwtMTMuNjI1IHYgLTI1LjUzMTI1IGMgMCwtNy4yNjYzMzg2IC02LjEyOTk4LC0xMi43MjQ3NzcxIC0xMy40MDYyNSwtMTMuOTM3NDk5NyBDIDY0LjI4MTU0OCwwLjMyNzk0Mzk3IDU5LjUwMjQzOCwtMC4wMjAzNzkwMyA1NC45MTg3ODUsOS4xOTI3NDIxZS00IFogbSAtMTQuNSw4LjIxODc1MDEyNTc5IGMgMi43Njk1NDcsMCA1LjAzMTI1LDIuMjk4NjQ1NiA1LjAzMTI1LDUuMTI0OTk5NiAtMmUtNiwyLjgxNjMzNiAtMi4yNjE3MDMsNS4wOTM3NSAtNS4wMzEyNSw1LjA5Mzc1IC0yLjc3OTQ3NiwtMWUtNiAtNS4wMzEyNSwtMi4yNzc0MTUgLTUuMDMxMjUsLTUuMDkzNzUgLTEwZS03LC0yLjgyNjM1MyAyLjI1MTc3NCwtNS4xMjQ5OTk2IDUuMDMxMjUsLTUuMTI0OTk5NiB6Ii8+CiAgPHBhdGggY2xhc3M9ImpwLWljb24tc2VsZWN0YWJsZSIgZmlsbD0iI2ZmZDQzYiIgZD0ibSA4NS42Mzc1MzUsMjguNjU3MTY5IHYgMTEuOTA2MjUgYyAwLDkuMjMwNzU1IC03LjgyNTg5NSwxNi45OTk5OTkgLTE2Ljc1LDE3IGggLTI2Ljc4MTI1IGMgLTcuMzM1ODMzLDAgLTEzLjQwNjI0OSw2LjI3ODQ4MyAtMTMuNDA2MjUsMTMuNjI1IHYgMjUuNTMxMjQ3IGMgMCw3LjI2NjM0NCA2LjMxODU4OCwxMS41NDAzMjQgMTMuNDA2MjUsMTMuNjI1MDA0IDguNDg3MzMxLDIuNDk1NjEgMTYuNjI2MjM3LDIuOTQ2NjMgMjYuNzgxMjUsMCA2Ljc1MDE1NSwtMS45NTQzOSAxMy40MDYyNTMsLTUuODg3NjEgMTMuNDA2MjUsLTEzLjYyNTAwNCBWIDg2LjUwMDkxOSBoIC0yNi43ODEyNSB2IC0zLjQwNjI1IGggMjYuNzgxMjUgMTMuNDA2MjU0IGMgNy43OTI0NjEsMCAxMC42OTYyNTEsLTUuNDM1NDA4IDEzLjQwNjI0MSwtMTMuNTkzNzUgMi43OTkzMywtOC4zOTg4ODYgMi42ODAyMiwtMTYuNDc1Nzc2IDAsLTI3LjI1IC0xLjkyNTc4LC03Ljc1NzQ0MSAtNS42MDM4NywtMTMuNTkzNzUgLTEzLjQwNjI0MSwtMTMuNTkzNzUgeiBtIC0xNS4wNjI1LDY0LjY1NjI1IGMgMi43Nzk0NzgsM2UtNiA1LjAzMTI1LDIuMjc3NDE3IDUuMDMxMjUsNS4wOTM3NDcgLTJlLTYsMi44MjYzNTQgLTIuMjUxNzc1LDUuMTI1MDA0IC01LjAzMTI1LDUuMTI1MDA0IC0yLjc2OTU1LDAgLTUuMDMxMjUsLTIuMjk4NjUgLTUuMDMxMjUsLTUuMTI1MDA0IDJlLTYsLTIuODE2MzMgMi4yNjE2OTcsLTUuMDkzNzQ3IDUuMDMxMjUsLTUuMDkzNzQ3IHoiLz4KPC9zdmc+Cg==);--jp-icon-r-kernel:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIyIDIyIj4KICA8cGF0aCBjbGFzcz0ianAtaWNvbi1jb250cmFzdDMganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjMjE5NkYzIiBkPSJNNC40IDIuNWMxLjItLjEgMi45LS4zIDQuOS0uMyAyLjUgMCA0LjEuNCA1LjIgMS4zIDEgLjcgMS41IDEuOSAxLjUgMy41IDAgMi0xLjQgMy41LTIuOSA0LjEgMS4yLjQgMS43IDEuNiAyLjIgMyAuNiAxLjkgMSAzLjkgMS4zIDQuNmgtMy44Yy0uMy0uNC0uOC0xLjctMS4yLTMuN3MtMS4yLTIuNi0yLjYtMi42aC0uOXY2LjRINC40VjIuNXptMy43IDYuOWgxLjRjMS45IDAgMi45LS45IDIuOS0yLjNzLTEtMi4zLTIuOC0yLjNjLS43IDAtMS4zIDAtMS42LjJ2NC41aC4xdi0uMXoiLz4KPC9zdmc+Cg==);--jp-icon-react:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMTUwIDE1MCA1NDEuOSAyOTUuMyI+CiAgPGcgY2xhc3M9ImpwLWljb24tYnJhbmQyIGpwLWljb24tc2VsZWN0YWJsZSIgZmlsbD0iIzYxREFGQiI+CiAgICA8cGF0aCBkPSJNNjY2LjMgMjk2LjVjMC0zMi41LTQwLjctNjMuMy0xMDMuMS04Mi40IDE0LjQtNjMuNiA4LTExNC4yLTIwLjItMTMwLjQtNi41LTMuOC0xNC4xLTUuNi0yMi40LTUuNnYyMi4zYzQuNiAwIDguMy45IDExLjQgMi42IDEzLjYgNy44IDE5LjUgMzcuNSAxNC45IDc1LjctMS4xIDkuNC0yLjkgMTkuMy01LjEgMjkuNC0xOS42LTQuOC00MS04LjUtNjMuNS0xMC45LTEzLjUtMTguNS0yNy41LTM1LjMtNDEuNi01MCAzMi42LTMwLjMgNjMuMi00Ni45IDg0LTQ2LjlWNzhjLTI3LjUgMC02My41IDE5LjYtOTkuOSA1My42LTM2LjQtMzMuOC03Mi40LTUzLjItOTkuOS01My4ydjIyLjNjMjAuNyAwIDUxLjQgMTYuNSA4NCA0Ni42LTE0IDE0LjctMjggMzEuNC00MS4zIDQ5LjktMjIuNiAyLjQtNDQgNi4xLTYzLjYgMTEtMi4zLTEwLTQtMTkuNy01LjItMjktNC43LTM4LjIgMS4xLTY3LjkgMTQuNi03NS44IDMtMS44IDYuOS0yLjYgMTEuNS0yLjZWNzguNWMtOC40IDAtMTYgMS44LTIyLjYgNS42LTI4LjEgMTYuMi0zNC40IDY2LjctMTkuOSAxMzAuMS02Mi4yIDE5LjItMTAyLjcgNDkuOS0xMDIuNyA4Mi4zIDAgMzIuNSA0MC43IDYzLjMgMTAzLjEgODIuNC0xNC40IDYzLjYtOCAxMTQuMiAyMC4yIDEzMC40IDYuNSAzLjggMTQuMSA1LjYgMjIuNSA1LjYgMjcuNSAwIDYzLjUtMTkuNiA5OS45LTUzLjYgMzYuNCAzMy44IDcyLjQgNTMuMiA5OS45IDUzLjIgOC40IDAgMTYtMS44IDIyLjYtNS42IDI4LjEtMTYuMiAzNC40LTY2LjcgMTkuOS0xMzAuMSA2Mi0xOS4xIDEwMi41LTQ5LjkgMTAyLjUtODIuM3ptLTEzMC4yLTY2LjdjLTMuNyAxMi45LTguMyAyNi4yLTEzLjUgMzkuNS00LjEtOC04LjQtMTYtMTMuMS0yNC00LjYtOC05LjUtMTUuOC0xNC40LTIzLjQgMTQuMiAyLjEgMjcuOSA0LjcgNDEgNy45em0tNDUuOCAxMDYuNWMtNy44IDEzLjUtMTUuOCAyNi4zLTI0LjEgMzguMi0xNC45IDEuMy0zMCAyLTQ1LjIgMi0xNS4xIDAtMzAuMi0uNy00NS0xLjktOC4zLTExLjktMTYuNC0yNC42LTI0LjItMzgtNy42LTEzLjEtMTQuNS0yNi40LTIwLjgtMzkuOCA2LjItMTMuNCAxMy4yLTI2LjggMjAuNy0zOS45IDcuOC0xMy41IDE1LjgtMjYuMyAyNC4xLTM4LjIgMTQuOS0xLjMgMzAtMiA0NS4yLTIgMTUuMSAwIDMwLjIuNyA0NSAxLjkgOC4zIDExLjkgMTYuNCAyNC42IDI0LjIgMzggNy42IDEzLjEgMTQuNSAyNi40IDIwLjggMzkuOC02LjMgMTMuNC0xMy4yIDI2LjgtMjAuNyAzOS45em0zMi4zLTEzYzUuNCAxMy40IDEwIDI2LjggMTMuOCAzOS44LTEzLjEgMy4yLTI2LjkgNS45LTQxLjIgOCA0LjktNy43IDkuOC0xNS42IDE0LjQtMjMuNyA0LjYtOCA4LjktMTYuMSAxMy0yNC4xek00MjEuMiA0MzBjLTkuMy05LjYtMTguNi0yMC4zLTI3LjgtMzIgOSAuNCAxOC4yLjcgMjcuNS43IDkuNCAwIDE4LjctLjIgMjcuOC0uNy05IDExLjctMTguMyAyMi40LTI3LjUgMzJ6bS03NC40LTU4LjljLTE0LjItMi4xLTI3LjktNC43LTQxLTcuOSAzLjctMTIuOSA4LjMtMjYuMiAxMy41LTM5LjUgNC4xIDggOC40IDE2IDEzLjEgMjQgNC43IDggOS41IDE1LjggMTQuNCAyMy40ek00MjAuNyAxNjNjOS4zIDkuNiAxOC42IDIwLjMgMjcuOCAzMi05LS40LTE4LjItLjctMjcuNS0uNy05LjQgMC0xOC43LjItMjcuOC43IDktMTEuNyAxOC4zLTIyLjQgMjcuNS0zMnptLTc0IDU4LjljLTQuOSA3LjctOS44IDE1LjYtMTQuNCAyMy43LTQuNiA4LTguOSAxNi0xMyAyNC01LjQtMTMuNC0xMC0yNi44LTEzLjgtMzkuOCAxMy4xLTMuMSAyNi45LTUuOCA0MS4yLTcuOXptLTkwLjUgMTI1LjJjLTM1LjQtMTUuMS01OC4zLTM0LjktNTguMy01MC42IDAtMTUuNyAyMi45LTM1LjYgNTguMy01MC42IDguNi0zLjcgMTgtNyAyNy43LTEwLjEgNS43IDE5LjYgMTMuMiA0MCAyMi41IDYwLjktOS4yIDIwLjgtMTYuNiA0MS4xLTIyLjIgNjAuNi05LjktMy4xLTE5LjMtNi41LTI4LTEwLjJ6TTMxMCA0OTBjLTEzLjYtNy44LTE5LjUtMzcuNS0xNC45LTc1LjcgMS4xLTkuNCAyLjktMTkuMyA1LjEtMjkuNCAxOS42IDQuOCA0MSA4LjUgNjMuNSAxMC45IDEzLjUgMTguNSAyNy41IDM1LjMgNDEuNiA1MC0zMi42IDMwLjMtNjMuMiA0Ni45LTg0IDQ2LjktNC41LS4xLTguMy0xLTExLjMtMi43em0yMzcuMi03Ni4yYzQuNyAzOC4yLTEuMSA2Ny45LTE0LjYgNzUuOC0zIDEuOC02LjkgMi42LTExLjUgMi42LTIwLjcgMC01MS40LTE2LjUtODQtNDYuNiAxNC0xNC43IDI4LTMxLjQgNDEuMy00OS45IDIyLjYtMi40IDQ0LTYuMSA2My42LTExIDIuMyAxMC4xIDQuMSAxOS44IDUuMiAyOS4xem0zOC41LTY2LjdjLTguNiAzLjctMTggNy0yNy43IDEwLjEtNS43LTE5LjYtMTMuMi00MC0yMi41LTYwLjkgOS4yLTIwLjggMTYuNi00MS4xIDIyLjItNjAuNiA5LjkgMy4xIDE5LjMgNi41IDI4LjEgMTAuMiAzNS40IDE1LjEgNTguMyAzNC45IDU4LjMgNTAuNi0uMSAxNS43LTIzIDM1LjYtNTguNCA1MC42ek0zMjAuOCA3OC40eiIvPgogICAgPGNpcmNsZSBjeD0iNDIwLjkiIGN5PSIyOTYuNSIgcj0iNDUuNyIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-redo:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGhlaWdodD0iMjQiIHZpZXdCb3g9IjAgMCAyNCAyNCIgd2lkdGg9IjE2Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgICA8cGF0aCBkPSJNMCAwaDI0djI0SDB6IiBmaWxsPSJub25lIi8+PHBhdGggZD0iTTE4LjQgMTAuNkMxNi41NSA4Ljk5IDE0LjE1IDggMTEuNSA4Yy00LjY1IDAtOC41OCAzLjAzLTkuOTYgNy4yMkwzLjkgMTZjMS4wNS0zLjE5IDQuMDUtNS41IDcuNi01LjUgMS45NSAwIDMuNzMuNzIgNS4xMiAxLjg4TDEzIDE2aDlWN2wtMy42IDMuNnoiLz4KICA8L2c+Cjwvc3ZnPgo=);--jp-icon-refresh:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDE4IDE4Ij4KICAgIDxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSI+CiAgICAgICAgPHBhdGggZD0iTTkgMTMuNWMtMi40OSAwLTQuNS0yLjAxLTQuNS00LjVTNi41MSA0LjUgOSA0LjVjMS4yNCAwIDIuMzYuNTIgMy4xNyAxLjMzTDEwIDhoNVYzbC0xLjc2IDEuNzZDMTIuMTUgMy42OCAxMC42NiAzIDkgMyA1LjY5IDMgMy4wMSA1LjY5IDMuMDEgOVM1LjY5IDE1IDkgMTVjMi45NyAwIDUuNDMtMi4xNiA1LjktNWgtMS41MmMtLjQ2IDItMi4yNCAzLjUtNC4zOCAzLjV6Ii8+CiAgICA8L2c+Cjwvc3ZnPgo=);--jp-icon-regex:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIwIDIwIj4KICA8ZyBjbGFzcz0ianAtaWNvbjIiIGZpbGw9IiM0MTQxNDEiPgogICAgPHJlY3QgeD0iMiIgeT0iMiIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2Ii8+CiAgPC9nPgoKICA8ZyBjbGFzcz0ianAtaWNvbi1hY2NlbnQyIiBmaWxsPSIjRkZGIj4KICAgIDxjaXJjbGUgY2xhc3M9InN0MiIgY3g9IjUuNSIgY3k9IjE0LjUiIHI9IjEuNSIvPgogICAgPHJlY3QgeD0iMTIiIHk9IjQiIGNsYXNzPSJzdDIiIHdpZHRoPSIxIiBoZWlnaHQ9IjgiLz4KICAgIDxyZWN0IHg9IjguNSIgeT0iNy41IiB0cmFuc2Zvcm09Im1hdHJpeCgwLjg2NiAtMC41IDAuNSAwLjg2NiAtMi4zMjU1IDcuMzIxOSkiIGNsYXNzPSJzdDIiIHdpZHRoPSI4IiBoZWlnaHQ9IjEiLz4KICAgIDxyZWN0IHg9IjEyIiB5PSI0IiB0cmFuc2Zvcm09Im1hdHJpeCgwLjUgLTAuODY2IDAuODY2IDAuNSAtMC42Nzc5IDE0LjgyNTIpIiBjbGFzcz0ic3QyIiB3aWR0aD0iMSIgaGVpZ2h0PSI4Ii8+CiAgPC9nPgo8L3N2Zz4K);--jp-icon-run:url(data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIyNCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICAgIDxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSI+CiAgICAgICAgPHBhdGggZD0iTTggNXYxNGwxMS03eiIvPgogICAgPC9nPgo8L3N2Zz4K);--jp-icon-running:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDUxMiA1MTIiPgogIDxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSI+CiAgICA8cGF0aCBkPSJNMjU2IDhDMTE5IDggOCAxMTkgOCAyNTZzMTExIDI0OCAyNDggMjQ4IDI0OC0xMTEgMjQ4LTI0OFMzOTMgOCAyNTYgOHptOTYgMzI4YzAgOC44LTcuMiAxNi0xNiAxNkgxNzZjLTguOCAwLTE2LTcuMi0xNi0xNlYxNzZjMC04LjggNy4yLTE2IDE2LTE2aDE2MGM4LjggMCAxNiA3LjIgMTYgMTZ2MTYweiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-save:url(data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIyNCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICAgIDxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSI+CiAgICAgICAgPHBhdGggZD0iTTE3IDNINWMtMS4xMSAwLTIgLjktMiAydjE0YzAgMS4xLjg5IDIgMiAyaDE0YzEuMSAwIDItLjkgMi0yVjdsLTQtNHptLTUgMTZjLTEuNjYgMC0zLTEuMzQtMy0zczEuMzQtMyAzLTMgMyAxLjM0IDMgMy0xLjM0IDMtMyAzem0zLTEwSDVWNWgxMHY0eiIvPgogICAgPC9nPgo8L3N2Zz4K);--jp-icon-search:url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMTggMTgiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTEyLjEsMTAuOWgtMC43bC0wLjItMC4yYzAuOC0wLjksMS4zLTIuMiwxLjMtMy41YzAtMy0yLjQtNS40LTUuNC01LjRTMS44LDQuMiwxLjgsNy4xczIuNCw1LjQsNS40LDUuNCBjMS4zLDAsMi41LTAuNSwzLjUtMS4zbDAuMiwwLjJ2MC43bDQuMSw0LjFsMS4yLTEuMkwxMi4xLDEwLjl6IE03LjEsMTAuOWMtMi4xLDAtMy43LTEuNy0zLjctMy43czEuNy0zLjcsMy43LTMuN3MzLjcsMS43LDMuNywzLjcgUzkuMiwxMC45LDcuMSwxMC45eiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-settings:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8cGF0aCBjbGFzcz0ianAtaWNvbjMganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjNjE2MTYxIiBkPSJNMTkuNDMgMTIuOThjLjA0LS4zMi4wNy0uNjQuMDctLjk4cy0uMDMtLjY2LS4wNy0uOThsMi4xMS0xLjY1Yy4xOS0uMTUuMjQtLjQyLjEyLS42NGwtMi0zLjQ2Yy0uMTItLjIyLS4zOS0uMy0uNjEtLjIybC0yLjQ5IDFjLS41Mi0uNC0xLjA4LS43My0xLjY5LS45OGwtLjM4LTIuNjVBLjQ4OC40ODggMCAwMDE0IDJoLTRjLS4yNSAwLS40Ni4xOC0uNDkuNDJsLS4zOCAyLjY1Yy0uNjEuMjUtMS4xNy41OS0xLjY5Ljk4bC0yLjQ5LTFjLS4yMy0uMDktLjQ5IDAtLjYxLjIybC0yIDMuNDZjLS4xMy4yMi0uMDcuNDkuMTIuNjRsMi4xMSAxLjY1Yy0uMDQuMzItLjA3LjY1LS4wNy45OHMuMDMuNjYuMDcuOThsLTIuMTEgMS42NWMtLjE5LjE1LS4yNC40Mi0uMTIuNjRsMiAzLjQ2Yy4xMi4yMi4zOS4zLjYxLjIybDIuNDktMWMuNTIuNCAxLjA4LjczIDEuNjkuOThsLjM4IDIuNjVjLjAzLjI0LjI0LjQyLjQ5LjQyaDRjLjI1IDAgLjQ2LS4xOC40OS0uNDJsLjM4LTIuNjVjLjYxLS4yNSAxLjE3LS41OSAxLjY5LS45OGwyLjQ5IDFjLjIzLjA5LjQ5IDAgLjYxLS4yMmwyLTMuNDZjLjEyLS4yMi4wNy0uNDktLjEyLS42NGwtMi4xMS0xLjY1ek0xMiAxNS41Yy0xLjkzIDAtMy41LTEuNTctMy41LTMuNXMxLjU3LTMuNSAzLjUtMy41IDMuNSAxLjU3IDMuNSAzLjUtMS41NyAzLjUtMy41IDMuNXoiLz4KPC9zdmc+Cg==);--jp-icon-share:url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIHZpZXdCb3g9IjAgMCAyNCAyNCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTSAxOCAyIEMgMTYuMzU0OTkgMiAxNSAzLjM1NDk5MDQgMTUgNSBDIDE1IDUuMTkwOTUyOSAxNS4wMjE3OTEgNS4zNzcxMjI0IDE1LjA1NjY0MSA1LjU1ODU5MzggTCA3LjkyMTg3NSA5LjcyMDcwMzEgQyA3LjM5ODUzOTkgOS4yNzc4NTM5IDYuNzMyMDc3MSA5IDYgOSBDIDQuMzU0OTkwNCA5IDMgMTAuMzU0OTkgMyAxMiBDIDMgMTMuNjQ1MDEgNC4zNTQ5OTA0IDE1IDYgMTUgQyA2LjczMjA3NzEgMTUgNy4zOTg1Mzk5IDE0LjcyMjE0NiA3LjkyMTg3NSAxNC4yNzkyOTcgTCAxNS4wNTY2NDEgMTguNDM5NDUzIEMgMTUuMDIxNTU1IDE4LjYyMTUxNCAxNSAxOC44MDgzODYgMTUgMTkgQyAxNSAyMC42NDUwMSAxNi4zNTQ5OSAyMiAxOCAyMiBDIDE5LjY0NTAxIDIyIDIxIDIwLjY0NTAxIDIxIDE5IEMgMjEgMTcuMzU0OTkgMTkuNjQ1MDEgMTYgMTggMTYgQyAxNy4yNjc0OCAxNiAxNi42MDE1OTMgMTYuMjc5MzI4IDE2LjA3ODEyNSAxNi43MjI2NTYgTCA4Ljk0MzM1OTQgMTIuNTU4NTk0IEMgOC45NzgyMDk1IDEyLjM3NzEyMiA5IDEyLjE5MDk1MyA5IDEyIEMgOSAxMS44MDkwNDcgOC45NzgyMDk1IDExLjYyMjg3OCA4Ljk0MzM1OTQgMTEuNDQxNDA2IEwgMTYuMDc4MTI1IDcuMjc5Mjk2OSBDIDE2LjYwMTQ2IDcuNzIyMTQ2MSAxNy4yNjc5MjMgOCAxOCA4IEMgMTkuNjQ1MDEgOCAyMSA2LjY0NTAwOTYgMjEgNSBDIDIxIDMuMzU0OTkwNCAxOS42NDUwMSAyIDE4IDIgeiBNIDE4IDQgQyAxOC41NjQxMjkgNCAxOSA0LjQzNTg3MDYgMTkgNSBDIDE5IDUuNTY0MTI5NCAxOC41NjQxMjkgNiAxOCA2IEMgMTcuNDM1ODcxIDYgMTcgNS41NjQxMjk0IDE3IDUgQyAxNyA0LjQzNTg3MDYgMTcuNDM1ODcxIDQgMTggNCB6IE0gNiAxMSBDIDYuNTY0MTI5NCAxMSA3IDExLjQzNTg3MSA3IDEyIEMgNyAxMi41NjQxMjkgNi41NjQxMjk0IDEzIDYgMTMgQyA1LjQzNTg3MDYgMTMgNSAxMi41NjQxMjkgNSAxMiBDIDUgMTEuNDM1ODcxIDUuNDM1ODcwNiAxMSA2IDExIHogTSAxOCAxOCBDIDE4LjU2NDEyOSAxOCAxOSAxOC40MzU4NzEgMTkgMTkgQyAxOSAxOS41NjQxMjkgMTguNTY0MTI5IDIwIDE4IDIwIEMgMTcuNDM1ODcxIDIwIDE3IDE5LjU2NDEyOSAxNyAxOSBDIDE3IDE4LjQzNTg3MSAxNy40MzU4NzEgMTggMTggMTggeiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-spreadsheet:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIyIDIyIj4KICA8cGF0aCBjbGFzcz0ianAtaWNvbi1jb250cmFzdDEganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjNENBRjUwIiBkPSJNMi4yIDIuMnYxNy42aDE3LjZWMi4ySDIuMnptMTUuNCA3LjdoLTUuNVY0LjRoNS41djUuNXpNOS45IDQuNHY1LjVINC40VjQuNGg1LjV6bS01LjUgNy43aDUuNXY1LjVINC40di01LjV6bTcuNyA1LjV2LTUuNWg1LjV2NS41aC01LjV6Ii8+Cjwvc3ZnPgo=);--jp-icon-stop:url(data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIyNCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICAgIDxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSI+CiAgICAgICAgPHBhdGggZD0iTTAgMGgyNHYyNEgweiIgZmlsbD0ibm9uZSIvPgogICAgICAgIDxwYXRoIGQ9Ik02IDZoMTJ2MTJINnoiLz4KICAgIDwvZz4KPC9zdmc+Cg==);--jp-icon-tab:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTIxIDNIM2MtMS4xIDAtMiAuOS0yIDJ2MTRjMCAxLjEuOSAyIDIgMmgxOGMxLjEgMCAyLS45IDItMlY1YzAtMS4xLS45LTItMi0yem0wIDE2SDNWNWgxMHY0aDh2MTB6Ii8+CiAgPC9nPgo8L3N2Zz4K);--jp-icon-table-rows:url(data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIyNCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICAgIDxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSI+CiAgICAgICAgPHBhdGggZD0iTTAgMGgyNHYyNEgweiIgZmlsbD0ibm9uZSIvPgogICAgICAgIDxwYXRoIGQ9Ik0yMSw4SDNWNGgxOFY4eiBNMjEsMTBIM3Y0aDE4VjEweiBNMjEsMTZIM3Y0aDE4VjE2eiIvPgogICAgPC9nPgo8L3N2Zz4K);--jp-icon-tag:url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjgiIGhlaWdodD0iMjgiIHZpZXdCb3g9IjAgMCA0MyAyOCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KCTxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSI+CgkJPHBhdGggZD0iTTI4LjgzMzIgMTIuMzM0TDMyLjk5OTggMTYuNTAwN0wzNy4xNjY1IDEyLjMzNEgyOC44MzMyWiIvPgoJCTxwYXRoIGQ9Ik0xNi4yMDk1IDIxLjYxMDRDMTUuNjg3MyAyMi4xMjk5IDE0Ljg0NDMgMjIuMTI5OSAxNC4zMjQ4IDIxLjYxMDRMNi45ODI5IDE0LjcyNDVDNi41NzI0IDE0LjMzOTQgNi4wODMxMyAxMy42MDk4IDYuMDQ3ODYgMTMuMDQ4MkM1Ljk1MzQ3IDExLjUyODggNi4wMjAwMiA4LjYxOTQ0IDYuMDY2MjEgNy4wNzY5NUM2LjA4MjgxIDYuNTE0NzcgNi41NTU0OCA2LjA0MzQ3IDcuMTE4MDQgNi4wMzA1NUM5LjA4ODYzIDUuOTg0NzMgMTMuMjYzOCA1LjkzNTc5IDEzLjY1MTggNi4zMjQyNUwyMS43MzY5IDEzLjYzOUMyMi4yNTYgMTQuMTU4NSAyMS43ODUxIDE1LjQ3MjQgMjEuMjYyIDE1Ljk5NDZMMTYuMjA5NSAyMS42MTA0Wk05Ljc3NTg1IDguMjY1QzkuMzM1NTEgNy44MjU2NiA4LjYyMzUxIDcuODI1NjYgOC4xODI4IDguMjY1QzcuNzQzNDYgOC43MDU3MSA3Ljc0MzQ2IDkuNDE3MzMgOC4xODI4IDkuODU2NjdDOC42MjM4MiAxMC4yOTY0IDkuMzM1ODIgMTAuMjk2NCA5Ljc3NTg1IDkuODU2NjdDMTAuMjE1NiA5LjQxNzMzIDEwLjIxNTYgOC43MDUzMyA5Ljc3NTg1IDguMjY1WiIvPgoJPC9nPgo8L3N2Zz4K);--jp-icon-terminal:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0IiA+CiAgICA8cmVjdCBjbGFzcz0ianAtdGVybWluYWwtaWNvbi1iYWNrZ3JvdW5kLWNvbG9yIGpwLWljb24tc2VsZWN0YWJsZSIgd2lkdGg9IjIwIiBoZWlnaHQ9IjIwIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgyIDIpIiBmaWxsPSIjMzMzMzMzIi8+CiAgICA8cGF0aCBjbGFzcz0ianAtdGVybWluYWwtaWNvbi1jb2xvciBqcC1pY29uLXNlbGVjdGFibGUtaW52ZXJzZSIgZD0iTTUuMDU2NjQgOC43NjE3MkM1LjA1NjY0IDguNTk3NjYgNS4wMzEyNSA4LjQ1MzEyIDQuOTgwNDcgOC4zMjgxMkM0LjkzMzU5IDguMTk5MjIgNC44NTU0NyA4LjA4MjAzIDQuNzQ2MDkgNy45NzY1NkM0LjY0MDYyIDcuODcxMDkgNC41IDcuNzc1MzkgNC4zMjQyMiA3LjY4OTQ1QzQuMTUyMzQgNy41OTk2MSAzLjk0MzM2IDcuNTExNzIgMy42OTcyNyA3LjQyNTc4QzMuMzAyNzMgNy4yODUxNiAyLjk0MzM2IDcuMTM2NzIgMi42MTkxNCA2Ljk4MDQ3QzIuMjk0OTIgNi44MjQyMiAyLjAxNzU4IDYuNjQyNTggMS43ODcxMSA2LjQzNTU1QzEuNTYwNTUgNi4yMjg1MiAxLjM4NDc3IDUuOTg4MjggMS4yNTk3NyA1LjcxNDg0QzEuMTM0NzcgNS40Mzc1IDEuMDcyMjcgNS4xMDkzOCAxLjA3MjI3IDQuNzMwNDdDMS4wNzIyNyA0LjM5ODQ0IDEuMTI4OTEgNC4wOTU3IDEuMjQyMTkgMy44MjIyN0MxLjM1NTQ3IDMuNTQ0OTIgMS41MTU2MiAzLjMwNDY5IDEuNzIyNjYgMy4xMDE1NkMxLjkyOTY5IDIuODk4NDQgMi4xNzk2OSAyLjczNDM3IDIuNDcyNjYgMi42MDkzOEMyLjc2NTYyIDIuNDg0MzggMy4wOTE4IDIuNDA0MyAzLjQ1MTE3IDIuMzY5MTRWMS4xMDkzOEg0LjM4ODY3VjIuMzgwODZDNC43NDAyMyAyLjQyNzczIDUuMDU2NjQgMi41MjM0NCA1LjMzNzg5IDIuNjY3OTdDNS42MTkxNCAyLjgxMjUgNS44NTc0MiAzLjAwMTk1IDYuMDUyNzMgMy4yMzYzM0M2LjI1MTk1IDMuNDY2OCA2LjQwNDMgMy43NDAyMyA2LjUwOTc3IDQuMDU2NjRDNi42MTkxNCA0LjM2OTE0IDYuNjczODMgNC43MjA3IDYuNjczODMgNS4xMTEzM0g1LjA0NDkyQzUuMDQ0OTIgNC42Mzg2NyA0LjkzNzUgNC4yODEyNSA0LjcyMjY2IDQuMDM5MDZDNC41MDc4MSAzLjc5Mjk3IDQuMjE2OCAzLjY2OTkyIDMuODQ5NjEgMy42Njk5MkMzLjY1MDM5IDMuNjY5OTIgMy40NzY1NiAzLjY5NzI3IDMuMzI4MTIgMy43NTE5NUMzLjE4MzU5IDMuODAyNzMgMy4wNjQ0NSAzLjg3Njk1IDIuOTcwNyAzLjk3NDYxQzIuODc2OTUgNC4wNjgzNiAyLjgwNjY0IDQuMTc5NjkgMi43NTk3NyA0LjMwODU5QzIuNzE2OCA0LjQzNzUgMi42OTUzMSA0LjU3ODEyIDIuNjk1MzEgNC43MzA0N0MyLjY5NTMxIDQuODgyODEgMi43MTY4IDUuMDE5NTMgMi43NTk3NyA1LjE0MDYyQzIuODA2NjQgNS4yNTc4MSAyLjg4MjgxIDUuMzY3MTkgMi45ODgyOCA1LjQ2ODc1QzMuMDk3NjYgNS41NzAzMSAzLjI0MDIzIDUuNjY3OTcgMy40MTYwMiA1Ljc2MTcyQzMuNTkxOCA1Ljg1MTU2IDMuODEwNTUgNS45NDMzNiA0LjA3MjI3IDYuMDM3MTFDNC40NjY4IDYuMTg1NTUgNC44MjQyMiA2LjMzOTg0IDUuMTQ0NTMgNi41QzUuNDY0ODQgNi42NTYyNSA1LjczODI4IDYuODM5ODQgNS45NjQ4NCA3LjA1MDc4QzYuMTk1MzEgNy4yNTc4MSA2LjM3MTA5IDcuNSA2LjQ5MjE5IDcuNzc3MzRDNi42MTcxOSA4LjA1MDc4IDYuNjc5NjkgOC4zNzUgNi42Nzk2OSA4Ljc1QzYuNjc5NjkgOS4wOTM3NSA2LjYyMzA1IDkuNDA0MyA2LjUwOTc3IDkuNjgxNjRDNi4zOTY0OCA5Ljk1NTA4IDYuMjM0MzggMTAuMTkxNCA2LjAyMzQ0IDEwLjM5MDZDNS44MTI1IDEwLjU4OTggNS41NTg1OSAxMC43NSA1LjI2MTcyIDEwLjg3MTFDNC45NjQ4NCAxMC45ODgzIDQuNjMyODEgMTEuMDY0NSA0LjI2NTYyIDExLjA5OTZWMTIuMjQ4SDMuMzMzOThWMTEuMDk5NkMzLjAwMTk1IDExLjA2ODQgMi42Nzk2OSAxMC45OTYxIDIuMzY3MTkgMTAuODgyOEMyLjA1NDY5IDEwLjc2NTYgMS43NzczNCAxMC41OTc3IDEuNTM1MTYgMTAuMzc4OUMxLjI5Njg4IDEwLjE2MDIgMS4xMDU0NyA5Ljg4NDc3IDAuOTYwOTM4IDkuNTUyNzNDMC44MTY0MDYgOS4yMTY4IDAuNzQ0MTQxIDguODE0NDUgMC43NDQxNDEgOC4zNDU3SDIuMzc4OTFDMi4zNzg5MSA4LjYyNjk1IDIuNDE5OTIgOC44NjMyOCAyLjUwMTk1IDkuMDU0NjlDMi41ODM5OCA5LjI0MjE5IDIuNjg5NDUgOS4zOTI1OCAyLjgxODM2IDkuNTA1ODZDMi45NTExNyA5LjYxNTIzIDMuMTAxNTYgOS42OTMzNiAzLjI2OTUzIDkuNzQwMjNDMy40Mzc1IDkuNzg3MTEgMy42MDkzOCA5LjgxMDU1IDMuNzg1MTYgOS44MTA1NUM0LjIwMzEyIDkuODEwNTUgNC41MTk1MyA5LjcxMjg5IDQuNzM0MzggOS41MTc1OEM0Ljk0OTIyIDkuMzIyMjcgNS4wNTY2NCA5LjA3MDMxIDUuMDU2NjQgOC43NjE3MlpNMTMuNDE4IDEyLjI3MTVIOC4wNzQyMlYxMUgxMy40MThWMTIuMjcxNVoiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDMuOTUyNjQgNikiIGZpbGw9IndoaXRlIi8+Cjwvc3ZnPgo=);--jp-icon-text-editor:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8cGF0aCBjbGFzcz0ianAtdGV4dC1lZGl0b3ItaWNvbi1jb2xvciBqcC1pY29uLXNlbGVjdGFibGUiIGZpbGw9IiM2MTYxNjEiIGQ9Ik0xNSAxNUgzdjJoMTJ2LTJ6bTAtOEgzdjJoMTJWN3pNMyAxM2gxOHYtMkgzdjJ6bTAgOGgxOHYtMkgzdjJ6TTMgM3YyaDE4VjNIM3oiLz4KPC9zdmc+Cg==);--jp-icon-toc:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjNjE2MTYxIj4KICAgIDxwYXRoIGQ9Ik03LDVIMjFWN0g3VjVNNywxM1YxMUgyMVYxM0g3TTQsNC41QTEuNSwxLjUgMCAwLDEgNS41LDZBMS41LDEuNSAwIDAsMSA0LDcuNUExLjUsMS41IDAgMCwxIDIuNSw2QTEuNSwxLjUgMCAwLDEgNCw0LjVNNCwxMC41QTEuNSwxLjUgMCAwLDEgNS41LDEyQTEuNSwxLjUgMCAwLDEgNCwxMy41QTEuNSwxLjUgMCAwLDEgMi41LDEyQTEuNSwxLjUgMCAwLDEgNCwxMC41TTcsMTlWMTdIMjFWMTlIN000LDE2LjVBMS41LDEuNSAwIDAsMSA1LjUsMThBMS41LDEuNSAwIDAsMSA0LDE5LjVBMS41LDEuNSAwIDAsMSAyLjUsMThBMS41LDEuNSAwIDAsMSA0LDE2LjVaIiAvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-tree-view:url(data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIyNCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICAgIDxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSI+CiAgICAgICAgPHBhdGggZD0iTTAgMGgyNHYyNEgweiIgZmlsbD0ibm9uZSIvPgogICAgICAgIDxwYXRoIGQ9Ik0yMiAxMVYzaC03djNIOVYzSDJ2OGg3VjhoMnYxMGg0djNoN3YtOGgtN3YzaC0yVjhoMnYzeiIvPgogICAgPC9nPgo8L3N2Zz4K);--jp-icon-trusted:url(data:image/svg+xml;base64,PHN2ZyBmaWxsPSJub25lIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI1Ij4KICAgIDxwYXRoIGNsYXNzPSJqcC1pY29uMiIgc3Ryb2tlPSIjMzMzMzMzIiBzdHJva2Utd2lkdGg9IjIiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDIgMykiIGQ9Ik0xLjg2MDk0IDExLjQ0MDlDMC44MjY0NDggOC43NzAyNyAwLjg2Mzc3OSA2LjA1NzY0IDEuMjQ5MDcgNC4xOTkzMkMyLjQ4MjA2IDMuOTMzNDcgNC4wODA2OCAzLjQwMzQ3IDUuNjAxMDIgMi44NDQ5QzcuMjM1NDkgMi4yNDQ0IDguODU2NjYgMS41ODE1IDkuOTg3NiAxLjA5NTM5QzExLjA1OTcgMS41ODM0MSAxMi42MDk0IDIuMjQ0NCAxNC4yMTggMi44NDMzOUMxNS43NTAzIDMuNDEzOTQgMTcuMzk5NSAzLjk1MjU4IDE4Ljc1MzkgNC4yMTM4NUMxOS4xMzY0IDYuMDcxNzcgMTkuMTcwOSA4Ljc3NzIyIDE4LjEzOSAxMS40NDA5QzE3LjAzMDMgMTQuMzAzMiAxNC42NjY4IDE3LjE4NDQgOS45OTk5OSAxOC45MzU0QzUuMzMzMiAxNy4xODQ0IDIuOTY5NjggMTQuMzAzMiAxLjg2MDk0IDExLjQ0MDlaIi8+CiAgICA8cGF0aCBjbGFzcz0ianAtaWNvbjIiIGZpbGw9IiMzMzMzMzMiIHN0cm9rZT0iIzMzMzMzMyIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoOCA5Ljg2NzE5KSIgZD0iTTIuODYwMTUgNC44NjUzNUwwLjcyNjU0OSAyLjk5OTU5TDAgMy42MzA0NUwyLjg2MDE1IDYuMTMxNTdMOCAwLjYzMDg3Mkw3LjI3ODU3IDBMMi44NjAxNSA0Ljg2NTM1WiIvPgo8L3N2Zz4K);--jp-icon-undo:url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTEyLjUgOGMtMi42NSAwLTUuMDUuOTktNi45IDIuNkwyIDd2OWg5bC0zLjYyLTMuNjJjMS4zOS0xLjE2IDMuMTYtMS44OCA1LjEyLTEuODggMy41NCAwIDYuNTUgMi4zMSA3LjYgNS41bDIuMzctLjc4QzIxLjA4IDExLjAzIDE3LjE1IDggMTIuNSA4eiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-user:url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIHZpZXdCb3g9IjAgMCAyNCAyNCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTE2IDdhNCA0IDAgMTEtOCAwIDQgNCAwIDAxOCAwek0xMiAxNGE3IDcgMCAwMC03IDdoMTRhNyA3IDAgMDAtNy03eiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-users:url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIHZlcnNpb249IjEuMSIgdmlld0JveD0iMCAwIDM2IDI0IiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPgogPGcgY2xhc3M9ImpwLWljb24zIiB0cmFuc2Zvcm09Im1hdHJpeCgxLjczMjcgMCAwIDEuNzMyNyAtMy42MjgyIC4wOTk1NzcpIiBmaWxsPSIjNjE2MTYxIj4KICA8cGF0aCB0cmFuc2Zvcm09Im1hdHJpeCgxLjUsMCwwLDEuNSwwLC02KSIgZD0ibTEyLjE4NiA3LjUwOThjLTEuMDUzNSAwLTEuOTc1NyAwLjU2NjUtMi40Nzg1IDEuNDEwMiAwLjc1MDYxIDAuMzEyNzcgMS4zOTc0IDAuODI2NDggMS44NzMgMS40NzI3aDMuNDg2M2MwLTEuNTkyLTEuMjg4OS0yLjg4MjgtMi44ODA5LTIuODgyOHoiLz4KICA8cGF0aCBkPSJtMjAuNDY1IDIuMzg5NWEyLjE4ODUgMi4xODg1IDAgMCAxLTIuMTg4NCAyLjE4ODUgMi4xODg1IDIuMTg4NSAwIDAgMS0yLjE4ODUtMi4xODg1IDIuMTg4NSAyLjE4ODUgMCAwIDEgMi4xODg1LTIuMTg4NSAyLjE4ODUgMi4xODg1IDAgMCAxIDIuMTg4NCAyLjE4ODV6Ii8+CiAgPHBhdGggdHJhbnNmb3JtPSJtYXRyaXgoMS41LDAsMCwxLjUsMCwtNikiIGQ9Im0zLjU4OTggOC40MjE5Yy0xLjExMjYgMC0yLjAxMzcgMC45MDExMS0yLjAxMzcgMi4wMTM3aDIuODE0NWMwLjI2Nzk3LTAuMzczMDkgMC41OTA3LTAuNzA0MzUgMC45NTg5OC0wLjk3ODUyLTAuMzQ0MzMtMC42MTY4OC0xLjAwMzEtMS4wMzUyLTEuNzU5OC0xLjAzNTJ6Ii8+CiAgPHBhdGggZD0ibTYuOTE1NCA0LjYyM2ExLjUyOTQgMS41Mjk0IDAgMCAxLTEuNTI5NCAxLjUyOTQgMS41Mjk0IDEuNTI5NCAwIDAgMS0xLjUyOTQtMS41Mjk0IDEuNTI5NCAxLjUyOTQgMCAwIDEgMS41Mjk0LTEuNTI5NCAxLjUyOTQgMS41Mjk0IDAgMCAxIDEuNTI5NCAxLjUyOTR6Ii8+CiAgPHBhdGggZD0ibTYuMTM1IDEzLjUzNWMwLTMuMjM5MiAyLjYyNTktNS44NjUgNS44NjUtNS44NjUgMy4yMzkyIDAgNS44NjUgMi42MjU5IDUuODY1IDUuODY1eiIvPgogIDxjaXJjbGUgY3g9IjEyIiBjeT0iMy43Njg1IiByPSIyLjk2ODUiLz4KIDwvZz4KPC9zdmc+Cg==);--jp-icon-vega:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIyIDIyIj4KICA8ZyBjbGFzcz0ianAtaWNvbjEganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjMjEyMTIxIj4KICAgIDxwYXRoIGQ9Ik0xMC42IDUuNGwyLjItMy4ySDIuMnY3LjNsNC02LjZ6Ii8+CiAgICA8cGF0aCBkPSJNMTUuOCAyLjJsLTQuNCA2LjZMNyA2LjNsLTQuOCA4djUuNWgxNy42VjIuMmgtNHptLTcgMTUuNEg1LjV2LTQuNGgzLjN2NC40em00LjQgMEg5LjhWOS44aDMuNHY3Ljh6bTQuNCAwaC0zLjRWNi41aDMuNHYxMS4xeiIvPgogIDwvZz4KPC9zdmc+Cg==);--jp-icon-word:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIwIDIwIj4KIDxnIGNsYXNzPSJqcC1pY29uMiIgZmlsbD0iIzQxNDE0MSI+CiAgPHJlY3QgeD0iMiIgeT0iMiIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2Ii8+CiA8L2c+CiA8ZyBjbGFzcz0ianAtaWNvbi1hY2NlbnQyIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSguNDMgLjA0MDEpIiBmaWxsPSIjZmZmIj4KICA8cGF0aCBkPSJtNC4xNCA4Ljc2cTAuMDY4Mi0xLjg5IDIuNDItMS44OSAxLjE2IDAgMS42OCAwLjQyIDAuNTY3IDAuNDEgMC41NjcgMS4xNnYzLjQ3cTAgMC40NjIgMC41MTQgMC40NjIgMC4xMDMgMCAwLjItMC4wMjMxdjAuNzE0cS0wLjM5OSAwLjEwMy0wLjY1MSAwLjEwMy0wLjQ1MiAwLTAuNjkzLTAuMjItMC4yMzEtMC4yLTAuMjg0LTAuNjYyLTAuOTU2IDAuODcyLTIgMC44NzItMC45MDMgMC0xLjQ3LTAuNDcyLTAuNTI1LTAuNDcyLTAuNTI1LTEuMjYgMC0wLjI2MiAwLjA0NTItMC40NzIgMC4wNTY3LTAuMjIgMC4xMTYtMC4zNzggMC4wNjgyLTAuMTY4IDAuMjMxLTAuMzA0IDAuMTU4LTAuMTQ3IDAuMjYyLTAuMjQyIDAuMTE2LTAuMDkxNCAwLjM2OC0wLjE2OCAwLjI2Mi0wLjA5MTQgMC4zOTktMC4xMjYgMC4xMzYtMC4wNDUyIDAuNDcyLTAuMTAzIDAuMzM2LTAuMDU3OCAwLjUwNC0wLjA3OTggMC4xNTgtMC4wMjMxIDAuNTY3LTAuMDc5OCAwLjU1Ni0wLjA2ODIgMC43NzctMC4yMjEgMC4yMi0wLjE1MiAwLjIyLTAuNDQxdi0wLjI1MnEwLTAuNDMtMC4zNTctMC42NjItMC4zMzYtMC4yMzEtMC45NzYtMC4yMzEtMC42NjIgMC0wLjk5OCAwLjI2Mi0wLjMzNiAwLjI1Mi0wLjM5OSAwLjc5OHptMS44OSAzLjY4cTAuNzg4IDAgMS4yNi0wLjQxIDAuNTA0LTAuNDIgMC41MDQtMC45MDN2LTEuMDVxLTAuMjg0IDAuMTM2LTAuODYxIDAuMjMxLTAuNTY3IDAuMDkxNC0wLjk4NyAwLjE1OC0wLjQyIDAuMDY4Mi0wLjc2NiAwLjMyNi0wLjMzNiAwLjI1Mi0wLjMzNiAwLjcwNHQwLjMwNCAwLjcwNCAwLjg2MSAwLjI1MnoiIHN0cm9rZS13aWR0aD0iMS4wNSIvPgogIDxwYXRoIGQ9Im0xMCA0LjU2aDAuOTQ1djMuMTVxMC42NTEtMC45NzYgMS44OS0wLjk3NiAxLjE2IDAgMS44OSAwLjg0IDAuNjgyIDAuODQgMC42ODIgMi4zMSAwIDEuNDctMC43MDQgMi40Mi0wLjcwNCAwLjg4Mi0xLjg5IDAuODgyLTEuMjYgMC0xLjg5LTEuMDJ2MC43NjZoLTAuODV6bTIuNjIgMy4wNHEtMC43NDYgMC0xLjE2IDAuNjQtMC40NTIgMC42My0wLjQ1MiAxLjY4IDAgMS4wNSAwLjQ1MiAxLjY4dDEuMTYgMC42M3EwLjc3NyAwIDEuMjYtMC42MyAwLjQ5NC0wLjY0IDAuNDk0LTEuNjggMC0xLjA1LTAuNDcyLTEuNjgtMC40NjItMC42NC0xLjI2LTAuNjR6IiBzdHJva2Utd2lkdGg9IjEuMDUiLz4KICA8cGF0aCBkPSJtMi43MyAxNS44IDEzLjYgMC4wMDgxYzAuMDA2OSAwIDAtMi42IDAtMi42IDAtMC4wMDc4LTEuMTUgMC0xLjE1IDAtMC4wMDY5IDAtMC4wMDgzIDEuNS0wLjAwODMgMS41LTJlLTMgLTAuMDAxNC0xMS4zLTAuMDAxNC0xMS4zLTAuMDAxNGwtMC4wMDU5Mi0xLjVjMC0wLjAwNzgtMS4xNyAwLjAwMTMtMS4xNyAwLjAwMTN6IiBzdHJva2Utd2lkdGg9Ii45NzUiLz4KIDwvZz4KPC9zdmc+Cg==);--jp-icon-yaml:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIyIDIyIj4KICA8ZyBjbGFzcz0ianAtaWNvbi1jb250cmFzdDIganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjRDgxQjYwIj4KICAgIDxwYXRoIGQ9Ik03LjIgMTguNnYtNS40TDMgNS42aDMuM2wxLjQgMy4xYy4zLjkuNiAxLjYgMSAyLjUuMy0uOC42LTEuNiAxLTIuNWwxLjQtMy4xaDMuNGwtNC40IDcuNnY1LjVsLTIuOS0uMXoiLz4KICAgIDxjaXJjbGUgY2xhc3M9InN0MCIgY3g9IjE3LjYiIGN5PSIxNi41IiByPSIyLjEiLz4KICAgIDxjaXJjbGUgY2xhc3M9InN0MCIgY3g9IjE3LjYiIGN5PSIxMSIgcj0iMi4xIi8+CiAgPC9nPgo8L3N2Zz4K)}
 .jp-AddAboveIcon{background-image:var(--jp-icon-add-above)}.jp-AddBelowIcon{background-image:var(--jp-icon-add-below)}.jp-AddIcon{background-image:var(--jp-icon-add)}.jp-BellIcon{background-image:var(--jp-icon-bell)}.jp-BugDotIcon{background-image:var(--jp-icon-bug-dot)}.jp-BugIcon{background-image:var(--jp-icon-bug)}.jp-BuildIcon{background-image:var(--jp-icon-build)}.jp-CaretDownEmptyIcon{background-image:var(--jp-icon-caret-down-empty)}.jp-CaretDownEmptyThinIcon{background-image:var(--jp-icon-caret-down-empty-thin)}.jp-CaretDownIcon{background-image:var(--jp-icon-caret-down)}.jp-CaretLeftIcon{background-image:var(--jp-icon-caret-left)}.jp-CaretRightIcon{background-image:var(--jp-icon-caret-right)}.jp-CaretUpEmptyThinIcon{background-image:var(--jp-icon-caret-up-empty-thin)}.jp-CaretUpIcon{background-image:var(--jp-icon-caret-up)}.jp-CaseSensitiveIcon{background-image:var(--jp-icon-case-sensitive)}.jp-CheckIcon{background-image:var(--jp-icon-check)}.jp-CircleEmptyIcon{background-image:var(--jp-icon-circle-empty)}.jp-CircleIcon{background-image:var(--jp-icon-circle)}.jp-ClearIcon{background-image:var(--jp-icon-clear)}.jp-CloseIcon{background-image:var(--jp-icon-close)}.jp-CodeCheckIcon{background-image:var(--jp-icon-code-check)}.jp-CodeIcon{background-image:var(--jp-icon-code)}.jp-CollapseAllIcon{background-image:var(--jp-icon-collapse-all)}.jp-ConsoleIcon{background-image:var(--jp-icon-console)}.jp-CopyIcon{background-image:var(--jp-icon-copy)}.jp-CopyrightIcon{background-image:var(--jp-icon-copyright)}.jp-CutIcon{background-image:var(--jp-icon-cut)}.jp-DeleteIcon{background-image:var(--jp-icon-delete)}.jp-DownloadIcon{background-image:var(--jp-icon-download)}.jp-DuplicateIcon{background-image:var(--jp-icon-duplicate)}.jp-EditIcon{background-image:var(--jp-icon-edit)}.jp-EllipsesIcon{background-image:var(--jp-icon-ellipses)}.jp-ErrorIcon{background-image:var(--jp-icon-error)}.jp-ExpandAllIcon{background-image:var(--jp-icon-expand-all)}.jp-ExtensionIcon{background-image:var(--jp-icon-extension)}.jp-FastForwardIcon{background-image:var(--jp-icon-fast-forward)}.jp-FileIcon{background-image:var(--jp-icon-file)}.jp-FileUploadIcon{background-image:var(--jp-icon-file-upload)}.jp-FilterDotIcon{background-image:var(--jp-icon-filter-dot)}.jp-FilterIcon{background-image:var(--jp-icon-filter)}.jp-FilterListIcon{background-image:var(--jp-icon-filter-list)}.jp-FolderFavoriteIcon{background-image:var(--jp-icon-folder-favorite)}.jp-FolderIcon{background-image:var(--jp-icon-folder)}.jp-HomeIcon{background-image:var(--jp-icon-home)}.jp-Html5Icon{background-image:var(--jp-icon-html5)}.jp-ImageIcon{background-image:var(--jp-icon-image)}.jp-InfoIcon{background-image:var(--jp-icon-info)}.jp-InspectorIcon{background-image:var(--jp-icon-inspector)}.jp-JsonIcon{background-image:var(--jp-icon-json)}.jp-JuliaIcon{background-image:var(--jp-icon-julia)}.jp-JupyterFaviconIcon{background-image:var(--jp-icon-jupyter-favicon)}.jp-JupyterIcon{background-image:var(--jp-icon-jupyter)}.jp-JupyterlabWordmarkIcon{background-image:var(--jp-icon-jupyterlab-wordmark)}.jp-KernelIcon{background-image:var(--jp-icon-kernel)}.jp-KeyboardIcon{background-image:var(--jp-icon-keyboard)}.jp-LaunchIcon{background-image:var(--jp-icon-launch)}.jp-LauncherIcon{background-image:var(--jp-icon-launcher)}.jp-LineFormIcon{background-image:var(--jp-icon-line-form)}.jp-LinkIcon{background-image:var(--jp-icon-link)}.jp-ListIcon{background-image:var(--jp-icon-list)}.jp-MarkdownIcon{background-image:var(--jp-icon-markdown)}.jp-MoveDownIcon{background-image:var(--jp-icon-move-down)}.jp-MoveUpIcon{background-image:var(--jp-icon-move-up)}.jp-NewFolderIcon{background-image:var(--jp-icon-new-folder)}.jp-NotTrustedIcon{background-image:var(--jp-icon-not-trusted)}.jp-NotebookIcon{background-image:var(--jp-icon-notebook)}.jp-NumberingIcon{background-image:var(--jp-icon-numbering)}.jp-OfflineBoltIcon{background-image:var(--jp-icon-offline-bolt)}.jp-PaletteIcon{background-image:var(--jp-icon-palette)}.jp-PasteIcon{background-image:var(--jp-icon-paste)}.jp-PdfIcon{background-image:var(--jp-icon-pdf)}.jp-PythonIcon{background-image:var(--jp-icon-python)}.jp-RKernelIcon{background-image:var(--jp-icon-r-kernel)}.jp-ReactIcon{background-image:var(--jp-icon-react)}.jp-RedoIcon{background-image:var(--jp-icon-redo)}.jp-RefreshIcon{background-image:var(--jp-icon-refresh)}.jp-RegexIcon{background-image:var(--jp-icon-regex)}.jp-RunIcon{background-image:var(--jp-icon-run)}.jp-RunningIcon{background-image:var(--jp-icon-running)}.jp-SaveIcon{background-image:var(--jp-icon-save)}.jp-SearchIcon{background-image:var(--jp-icon-search)}.jp-SettingsIcon{background-image:var(--jp-icon-settings)}.jp-ShareIcon{background-image:var(--jp-icon-share)}.jp-SpreadsheetIcon{background-image:var(--jp-icon-spreadsheet)}.jp-StopIcon{background-image:var(--jp-icon-stop)}.jp-TabIcon{background-image:var(--jp-icon-tab)}.jp-TableRowsIcon{background-image:var(--jp-icon-table-rows)}.jp-TagIcon{background-image:var(--jp-icon-tag)}
 .jp-TerminalIcon{background-image:var(--jp-icon-terminal)}.jp-TextEditorIcon{background-image:var(--jp-icon-text-editor)}.jp-TocIcon{background-image:var(--jp-icon-toc)}.jp-TreeViewIcon{background-image:var(--jp-icon-tree-view)}.jp-TrustedIcon{background-image:var(--jp-icon-trusted)}.jp-UndoIcon{background-image:var(--jp-icon-undo)}.jp-UserIcon{background-image:var(--jp-icon-user)}.jp-UsersIcon{background-image:var(--jp-icon-users)}.jp-VegaIcon{background-image:var(--jp-icon-vega)}.jp-WordIcon{background-image:var(--jp-icon-word)}.jp-YamlIcon{background-image:var(--jp-icon-yaml)}.jp-Icon,.jp-MaterialIcon{background-position:center;background-repeat:no-repeat;background-size:16px;min-width:16px;min-height:16px}.jp-Icon-cover{background-position:center;background-repeat:no-repeat;background-size:cover}.jp-Icon-16{background-size:16px;min-width:16px;min-height:16px}.jp-Icon-18{background-size:18px;min-width:18px;min-height:18px}.jp-Icon-20{background-size:20px;min-width:20px;min-height:20px}.lm-TabBar .lm-TabBar-addButton{align-items:center;display:flex;padding:4px;padding-bottom:5px;margin-right:1px;background-color:var(--jp-layout-color2)}.lm-TabBar .lm-TabBar-addButton:hover{background-color:var(--jp-layout-color1)}.lm-DockPanel-tabBar .lm-TabBar-tab{width:var(--jp-private-horizontal-tab-width)}.lm-DockPanel-tabBar .lm-TabBar-content{flex:unset}.lm-DockPanel-tabBar[data-orientation='horizontal']{flex:1 1 auto}.jp-icon0[fill]{fill:var(--jp-inverse-layout-color0)}.jp-icon1[fill]{fill:var(--jp-inverse-layout-color1)}.jp-icon2[fill]{fill:var(--jp-inverse-layout-color2)}.jp-icon3[fill]{fill:var(--jp-inverse-layout-color3)}.jp-icon4[fill]{fill:var(--jp-inverse-layout-color4)}.jp-icon0[stroke]{stroke:var(--jp-inverse-layout-color0)}.jp-icon1[stroke]{stroke:var(--jp-inverse-layout-color1)}.jp-icon2[stroke]{stroke:var(--jp-inverse-layout-color2)}.jp-icon3[stroke]{stroke:var(--jp-inverse-layout-color3)}.jp-icon4[stroke]{stroke:var(--jp-inverse-layout-color4)}.jp-icon-accent0[fill]{fill:var(--jp-layout-color0)}.jp-icon-accent1[fill]{fill:var(--jp-layout-color1)}.jp-icon-accent2[fill]{fill:var(--jp-layout-color2)}.jp-icon-accent3[fill]{fill:var(--jp-layout-color3)}.jp-icon-accent4[fill]{fill:var(--jp-layout-color4)}.jp-icon-accent0[stroke]{stroke:var(--jp-layout-color0)}.jp-icon-accent1[stroke]{stroke:var(--jp-layout-color1)}.jp-icon-accent2[stroke]{stroke:var(--jp-layout-color2)}.jp-icon-accent3[stroke]{stroke:var(--jp-layout-color3)}.jp-icon-accent4[stroke]{stroke:var(--jp-layout-color4)}.jp-icon-none[fill]{fill:none}.jp-icon-none[stroke]{stroke:none}.jp-icon-brand0[fill]{fill:var(--jp-brand-color0)}.jp-icon-brand1[fill]{fill:var(--jp-brand-color1)}.jp-icon-brand2[fill]{fill:var(--jp-brand-color2)}.jp-icon-brand3[fill]{fill:var(--jp-brand-color3)}.jp-icon-brand4[fill]{fill:var(--jp-brand-color4)}.jp-icon-brand0[stroke]{stroke:var(--jp-brand-color0)}.jp-icon-brand1[stroke]{stroke:var(--jp-brand-color1)}.jp-icon-brand2[stroke]{stroke:var(--jp-brand-color2)}.jp-icon-brand3[stroke]{stroke:var(--jp-brand-color3)}.jp-icon-brand4[stroke]{stroke:var(--jp-brand-color4)}.jp-icon-warn0[fill]{fill:var(--jp-warn-color0)}.jp-icon-warn1[fill]{fill:var(--jp-warn-color1)}.jp-icon-warn2[fill]{fill:var(--jp-warn-color2)}.jp-icon-warn3[fill]{fill:var(--jp-warn-color3)}.jp-icon-warn0[stroke]{stroke:var(--jp-warn-color0)}.jp-icon-warn1[stroke]{stroke:var(--jp-warn-color1)}.jp-icon-warn2[stroke]{stroke:var(--jp-warn-color2)}.jp-icon-warn3[stroke]{stroke:var(--jp-warn-color3)}.jp-icon-contrast0[fill]{fill:var(--jp-icon-contrast-color0)}.jp-icon-contrast1[fill]{fill:var(--jp-icon-contrast-color1)}.jp-icon-contrast2[fill]{fill:var(--jp-icon-contrast-color2)}.jp-icon-contrast3[fill]{fill:var(--jp-icon-contrast-color3)}.jp-icon-contrast0[stroke]{stroke:var(--jp-icon-contrast-color0)}.jp-icon-contrast1[stroke]{stroke:var(--jp-icon-contrast-color1)}.jp-icon-contrast2[stroke]{stroke:var(--jp-icon-contrast-color2)}.jp-icon-contrast3[stroke]{stroke:var(--jp-icon-contrast-color3)}.jp-icon-dot[fill]{fill:var(--jp-warn-color0)}.jp-jupyter-icon-color[fill]{fill:var(--jp-jupyter-icon-color,var(--jp-warn-color0))}.jp-notebook-icon-color[fill]{fill:var(--jp-notebook-icon-color,var(--jp-warn-color0))}.jp-json-icon-color[fill]{fill:var(--jp-json-icon-color,var(--jp-warn-color1))}.jp-console-icon-color[fill]{fill:var(--jp-console-icon-color,white)}.jp-console-icon-background-color[fill]{fill:var(--jp-console-icon-background-color,var(--jp-brand-color1))}.jp-terminal-icon-color[fill]{fill:var(--jp-terminal-icon-color,var(--jp-layout-color2))}.jp-terminal-icon-background-color[fill]{fill:var(--jp-terminal-icon-background-color,var(--jp-inverse-layout-color2))}.jp-text-editor-icon-color[fill]{fill:var(--jp-text-editor-icon-color,var(--jp-inverse-layout-color3))}.jp-inspector-icon-color[fill]{fill:var(--jp-inspector-icon-color,var(--jp-inverse-layout-color3))}.jp-DirListing-item.jp-mod-selected .jp-icon-selectable[fill]{fill:#fff}.jp-DirListing-item.jp-mod-selected .jp-icon-selectable-inverse[fill]{fill:var(--jp-brand-color1)}
diff --git a/feed.xml b/feed.xml
index 2a58176..a2d0ae9 100644
--- a/feed.xml
+++ b/feed.xml
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en"><generator uri="https://jekyllrb.com/" version="4.3.4">Jekyll</generator><link href="https://ziumper.github.io/feed.xml" rel="self" type="application/atom+xml"/><link href="https://ziumper.github.io/" rel="alternate" type="text/html" hreflang="en"/><updated>2024-12-05T12:09:50+00:00</updated><id>https://ziumper.github.io/feed.xml</id><title type="html">Ziumper</title><entry><title type="html">Developing programming skills with making games</title><link href="https://ziumper.github.io/blog/2024/developing-programming-skills-with-making-games/" rel="alternate" type="text/html" title="Developing programming skills with making games"/><published>2024-04-15T07:40:16+00:00</published><updated>2024-04-15T07:40:16+00:00</updated><id>https://ziumper.github.io/blog/2024/developing-programming-skills-with-making-games</id><content type="html" xml:base="https://ziumper.github.io/blog/2024/developing-programming-skills-with-making-games/"><![CDATA[<h1 id="introduction">Introduction</h1> <p>Programming - a skill that is gaining increasing importance in today’s world. From mobile applications to autonomous car control systems, coding is a key element of future technology. However, for many people, learning programming can be difficult and abstract. Therefore, seeking ways to convey these skills in an enjoyable and accessible way becomes increasingly important.</p> <p>In this context, game development seems to be an ideal tool for learning programming. Not only does it provide practical application of acquired knowledge, but it also develops a range of key skills that can be useful not only in the gaming industry, but also in many other areas of computer science and technology.</p> <p>In this article, we will explore the main reasons why game development can be an excellent way to develop programming skills. We will discover why creating games is not only fascinating and creative, but also an effective learning tool. Are you ready to embark on a journey through the world of programming through game development? Let’s dive into it!</p> <h1 id="learning-beyond-basic-programming">Learning beyond basic programming</h1> <p>Game development is not just about creating entertainment - it’s a journey through the fascinating world of programming. It requires an understanding of basic programming concepts such as variables, loops, conditions, and many others. But what is game development really about? It’s not just a string of code and complicated algorithms. It’s a process that allows for interactive and satisfying creation of a world dreamed up by the programmer.</p> <p>Imagine this: the car you drive on your computer screen is not just a collection of pixels. It’s the result of your code, created by you. Every pixel of that vehicle, every movement, is the result of your work. In games, just like in the real world, you have full control over what happens. You can build an entire world from scratch and then let players discover and explore it.</p> <p>What makes game development so fascinating is the ability to create something that is both interactive and full of life. You can create a character that reacts to every click of the player, create a world that evolves and grows as the game progresses. In games, the only limit is your imagination.</p> <div class="row mt-3"> <div class="col-sm mt-3 mt-md-0"> <figure> <video src="/assets/video/posts/capybara_riding_slime.mp4" class="img-fluid rounded z-depth-1" width="auto" height="auto" autoplay="" controls="" muted=""/> </figure> </div> </div> <div class="caption"> There's nothing stopping you from creating a capybara riding on green slime! </div> <p>In this light, game development becomes not only a way to learn programming, but also a thrilling journey through the world of creativity and interaction. By adding a dash of cool features and unlimited imaginative potential, you can teach very complex things in a very accessible way.</p> <h1 id="a-remedy-for-boredom">A remedy for boredom</h1> <p>Have you ever felt that the monotony of writing lines of code in routine projects made you lose your passion for programming? Have you had enough of creating yet another integration system or building complex APIs? If so, maybe it’s time to try something completely different - game development!</p> <p>Game development is not just a way to develop programming skills, but also an effective way to get rid of the boredom and monotony associated with traditional programming projects. Unlike business applications or systems where each functionality may seem similar, game development offers endless opportunities for creativity and challenges.</p> <p>Each functionality in a game can be completely different and original. From controlling the player character, through implementing complex gameplay mechanics, to designing an interactive game world - each element requires a unique approach and solution. By creating a game, a programmer can feel like an artist creating a work of art, where the only limit is their imagination.</p> <p>Furthermore, the problems and challenges you will encounter when creating games are completely different from typical business client problems. Instead of considering system scalability or integration with other applications, you will face challenges related to optimizing game performance, managing resources, or balancing gameplay. It’s a completely different dimension of programming that can bring back passion and joy to coding.</p> <p>It’s also worth noting that game development can be an excellent opportunity to experiment with non-standard algorithms and programming techniques. From advanced artificial intelligence algorithms for non-player characters to advanced graphics effects and physical simulations - in the world of computer games, there is no place for boredom or routine. Every project is a new challenge and an opportunity to learn.</p> <div class="col-sm mt-3 mt-md-0"> <figure> <picture> <source class="responsive-img-srcset" srcset="/assets/img/projects/BoardHeroesBattle_unreal-480.webp 480w,/assets/img/projects/BoardHeroesBattle_unreal-800.webp 800w,/assets/img/projects/BoardHeroesBattle_unreal-1400.webp 1400w," sizes="95vw" type="image/webp"/> <img src="/assets/img/projects/BoardHeroesBattle_unreal.jpg" class="img-fluid rounded z-depth-1" width="100%" height="auto" title="example image" data-zoomable="" loading="lazy" onerror="this.onerror=null; $('.responsive-img-srcset').remove();"/> </picture> </figure> </div> <div class="caption">Created by me as part of my master's thesis <a href="https://ziumper.github.io/projects/board-heroes-battle"> AR game</a></div> <p>In this way, game development becomes an excellent exercise for problem-solving skills. Each new game is a new technical challenge that requires a creative approach and analytical thinking.</p> <h1 id="development-of-problem-solving-skills">Development of Problem-Solving Skills</h1> <p>Writing computer games is not just about creating visually appealing and exciting experiences for players - it’s also a technical challenge that requires solving various programming problems. From resource management to performance optimization and user interaction handling, every aspect of game development presents programmers with new and exciting challenges.</p> <p>One of the key aspects of game development is resource management. Computer games often use various types of resources such as textures, sounds, 3D models, or animations. Effective management of these resources, their loading, releasing, and usage at the right moments, can be a crucial factor influencing the performance and smoothness of the game. Therefore, programmers must not only be able to efficiently manage memory but also consider strategies such as caching, preloading, or streaming of resources.</p> <p>Performance optimization is another significant challenge that game developers must face. Computer games often require significant computational power, especially when it comes to 3D graphics, physics simulation, or artificial intelligence. Therefore, programmers must carefully analyze and optimize the code to achieve smooth animation and responsive gameplay, even on less powerful devices. This requires a deep understanding of rendering graphics mechanisms, physics simulation algorithms, and efficient multithreading programming techniques.</p> <p>However, game development is not just about tackling technical challenges - it’s also about user interaction handling. Games must be intuitive and responsive to provide players with a satisfying experience. Therefore, programmers must ensure smooth control, appropriate reactions to player actions, and a comfortable user interface. This requires not only programming skills but also an understanding of user psychology and interaction design.</p> <p>It’s also worth noting that game development can be an excellent opportunity to experiment with non-standard algorithms and programming techniques. From advanced artificial intelligence algorithms for non-player characters to advanced graphics effects and physical simulations - in the world of computer games, there is no place for boredom or routine. Every project is a new challenge and an opportunity to learn.</p> <div class="row mt-3"> <div class="col-sm mt-3 mt-md-0"> <figure> <iframe src="https://www.youtube.com/embed/-FaqC4h5Ftg?si=mXT0k7xg4b0AzI-j" class="img-fluid rounded z-depth-1" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen="" width="auto" height="auto"/> </figure> </div> <div class="col-sm mt-3 mt-md-0"> <figure> <iframe src="https://www.youtube.com/embed/FWSR_7kZuYg?si=Siwl5YbwKeNZSZ3l" class="img-fluid rounded z-depth-1" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen="" width="auto" height="auto"/> </figure> </div> </div> <div class="caption">Implementing a game in real life can pose an interesting and engaging programming challenge.</div> <p>In this way, game development becomes an excellent exercise for problem-solving skills. Each new game is a new technical challenge that requires a creative approach and analytical thinking.</p>]]></content><author><name></name></author><category term="self-development"/><category term="game-dev"/><category term="software-development"/><summary type="html"><![CDATA[Introduction]]></summary></entry><entry><title type="html">How to store big binary files with git lfs on Google Drive or One Drive?</title><link href="https://ziumper.github.io/blog/2023/how-to-store-big-binary-files-with-git-lfs/" rel="alternate" type="text/html" title="How to store big binary files with git lfs on Google Drive or One Drive?"/><published>2023-10-23T16:40:16+00:00</published><updated>2023-10-23T16:40:16+00:00</updated><id>https://ziumper.github.io/blog/2023/how-to-store-big-binary-files-with-git-lfs</id><content type="html" xml:base="https://ziumper.github.io/blog/2023/how-to-store-big-binary-files-with-git-lfs/"><![CDATA[<h1 id="transfer-adapter">Transfer adapter</h1> <p>I suggest connecting git lfs with custom transfer adapter. According to git-lfs documentation:</p> <blockquote> <p>Git LFS supports multiple ways to transfer (upload and download) files. In the core client, the basic way to do this is via a one-off HTTP request via the URL returned from the LFS API for a given object. The core client also supports extensions to allow resuming of downloads (via Range headers) and uploads (via the tus.io protocol).</p> </blockquote> <h1 id="usage-examples">Usage examples</h1> <p>I used this approach to storage media files in my software development project and game dev project. I bet you can do it too. In the most cases I like to use it for:</p> <ul> <li>game dev projects in game engines like Unity and Unreal Engine.</li> <li>dbdumps storage</li> <li>big media files storage (in case you need a one)</li> </ul> <p>There are always a way to do it for another kind of projects.</p> <p>In example bellow I will be using gitlab, google drive and other tools.</p> <h1 id="gitlab-setup">Gitlab setup</h1> <p>Firstly you need to disable default lfs service of gitlab. It’s very vell documented feature in official documentation <a href="https://docs.gitlab.com/ee/topics/git/lfs">Gitlab</a> but there is not much information how to disable it.</p> <p>It’s a litle tricky and not really user friendly but obviously you need to select your repository and dive into settings.</p> <div class="row mt-3"> <div class="col-sm mt-3 mt-md-0"> <figure> <picture> <source class="responsive-img-srcset" srcset="/assets/img/posts/settings_gitlab-480.webp 480w,/assets/img/posts/settings_gitlab-800.webp 800w,/assets/img/posts/settings_gitlab-1400.webp 1400w," sizes="95vw" type="image/webp"/> <img src="/assets/img/posts/settings_gitlab.png" class="img-fluid rounded z-depth-1" width="100%" height="auto" data-zoomable="" loading="lazy" onerror="this.onerror=null; $('.responsive-img-srcset').remove();"/> </picture> </figure> </div> <div class="col-sm mt-3 mt-md-0"> <figure> <picture> <source class="responsive-img-srcset" srcset="/assets/img/posts/disable_gitlab_lfs_example-480.webp 480w,/assets/img/posts/disable_gitlab_lfs_example-800.webp 800w,/assets/img/posts/disable_gitlab_lfs_example-1400.webp 1400w," sizes="95vw" type="image/webp"/> <img src="/assets/img/posts/disable_gitlab_lfs_example.png" class="img-fluid rounded z-depth-1" width="100%" height="auto" data-zoomable="" loading="lazy" onerror="this.onerror=null; $('.responsive-img-srcset').remove();"/> </picture> </figure> </div> </div> <p>Although!</p> <div class="row mt-3"> <div class="col-sm mt-3 mt-md-0"> <figure> <picture> <source class="responsive-img-srcset" srcset="/assets/img/posts/yoda-there-is-480.webp 480w,/assets/img/posts/yoda-there-is-800.webp 800w,/assets/img/posts/yoda-there-is-1400.webp 1400w," sizes="95vw" type="image/webp"/> <img src="/assets/img/posts/yoda-there-is.gif" class="img-fluid rounded z-depth-1" width="30%" height="auto" data-zoomable="" loading="lazy" onerror="this.onerror=null; $('.responsive-img-srcset').remove();"/> </picture> </figure> </div> </div> <p>There is another way also via gitlab cli, and to CI tools too via environment variables but I will not cover this, let’s keep it simple.</p> <p>If giltab lfs is disabled on remote you can start with local setup.</p> <h1 id="local-repository-setup">Local repository setup</h1> <p>You will need a new repository or use existing one. I suggest starting with fresh state so you can go with easier setup guide bellow.</p> <div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>git init
+<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en"><generator uri="https://jekyllrb.com/" version="4.3.4">Jekyll</generator><link href="https://ziumper.github.io/feed.xml" rel="self" type="application/atom+xml"/><link href="https://ziumper.github.io/" rel="alternate" type="text/html" hreflang="en"/><updated>2024-12-14T09:58:27+00:00</updated><id>https://ziumper.github.io/feed.xml</id><title type="html">Ziumper</title><entry><title type="html">Developing programming skills with making games</title><link href="https://ziumper.github.io/blog/2024/developing-programming-skills-with-making-games/" rel="alternate" type="text/html" title="Developing programming skills with making games"/><published>2024-04-15T07:40:16+00:00</published><updated>2024-04-15T07:40:16+00:00</updated><id>https://ziumper.github.io/blog/2024/developing-programming-skills-with-making-games</id><content type="html" xml:base="https://ziumper.github.io/blog/2024/developing-programming-skills-with-making-games/"><![CDATA[<h1 id="introduction">Introduction</h1> <p>Programming - a skill that is gaining increasing importance in today’s world. From mobile applications to autonomous car control systems, coding is a key element of future technology. However, for many people, learning programming can be difficult and abstract. Therefore, seeking ways to convey these skills in an enjoyable and accessible way becomes increasingly important.</p> <p>In this context, game development seems to be an ideal tool for learning programming. Not only does it provide practical application of acquired knowledge, but it also develops a range of key skills that can be useful not only in the gaming industry, but also in many other areas of computer science and technology.</p> <p>In this article, we will explore the main reasons why game development can be an excellent way to develop programming skills. We will discover why creating games is not only fascinating and creative, but also an effective learning tool. Are you ready to embark on a journey through the world of programming through game development? Let’s dive into it!</p> <h1 id="learning-beyond-basic-programming">Learning beyond basic programming</h1> <p>Game development is not just about creating entertainment - it’s a journey through the fascinating world of programming. It requires an understanding of basic programming concepts such as variables, loops, conditions, and many others. But what is game development really about? It’s not just a string of code and complicated algorithms. It’s a process that allows for interactive and satisfying creation of a world dreamed up by the programmer.</p> <p>Imagine this: the car you drive on your computer screen is not just a collection of pixels. It’s the result of your code, created by you. Every pixel of that vehicle, every movement, is the result of your work. In games, just like in the real world, you have full control over what happens. You can build an entire world from scratch and then let players discover and explore it.</p> <p>What makes game development so fascinating is the ability to create something that is both interactive and full of life. You can create a character that reacts to every click of the player, create a world that evolves and grows as the game progresses. In games, the only limit is your imagination.</p> <div class="row mt-3"> <div class="col-sm mt-3 mt-md-0"> <figure> <video src="/assets/video/posts/capybara_riding_slime.mp4" class="img-fluid rounded z-depth-1" width="auto" height="auto" autoplay="" controls="" muted=""/> </figure> </div> </div> <div class="caption"> There's nothing stopping you from creating a capybara riding on green slime! </div> <p>In this light, game development becomes not only a way to learn programming, but also a thrilling journey through the world of creativity and interaction. By adding a dash of cool features and unlimited imaginative potential, you can teach very complex things in a very accessible way.</p> <h1 id="a-remedy-for-boredom">A remedy for boredom</h1> <p>Have you ever felt that the monotony of writing lines of code in routine projects made you lose your passion for programming? Have you had enough of creating yet another integration system or building complex APIs? If so, maybe it’s time to try something completely different - game development!</p> <p>Game development is not just a way to develop programming skills, but also an effective way to get rid of the boredom and monotony associated with traditional programming projects. Unlike business applications or systems where each functionality may seem similar, game development offers endless opportunities for creativity and challenges.</p> <p>Each functionality in a game can be completely different and original. From controlling the player character, through implementing complex gameplay mechanics, to designing an interactive game world - each element requires a unique approach and solution. By creating a game, a programmer can feel like an artist creating a work of art, where the only limit is their imagination.</p> <p>Furthermore, the problems and challenges you will encounter when creating games are completely different from typical business client problems. Instead of considering system scalability or integration with other applications, you will face challenges related to optimizing game performance, managing resources, or balancing gameplay. It’s a completely different dimension of programming that can bring back passion and joy to coding.</p> <p>It’s also worth noting that game development can be an excellent opportunity to experiment with non-standard algorithms and programming techniques. From advanced artificial intelligence algorithms for non-player characters to advanced graphics effects and physical simulations - in the world of computer games, there is no place for boredom or routine. Every project is a new challenge and an opportunity to learn.</p> <div class="col-sm mt-3 mt-md-0"> <figure> <picture> <source class="responsive-img-srcset" srcset="/assets/img/projects/BoardHeroesBattle_unreal-480.webp 480w,/assets/img/projects/BoardHeroesBattle_unreal-800.webp 800w,/assets/img/projects/BoardHeroesBattle_unreal-1400.webp 1400w," sizes="95vw" type="image/webp"/> <img src="/assets/img/projects/BoardHeroesBattle_unreal.jpg" class="img-fluid rounded z-depth-1" width="100%" height="auto" title="example image" data-zoomable="" loading="lazy" onerror="this.onerror=null; $('.responsive-img-srcset').remove();"/> </picture> </figure> </div> <div class="caption">Created by me as part of my master's thesis <a href="https://ziumper.github.io/projects/board-heroes-battle"> AR game</a></div> <p>In this way, game development becomes an excellent exercise for problem-solving skills. Each new game is a new technical challenge that requires a creative approach and analytical thinking.</p> <h1 id="development-of-problem-solving-skills">Development of Problem-Solving Skills</h1> <p>Writing computer games is not just about creating visually appealing and exciting experiences for players - it’s also a technical challenge that requires solving various programming problems. From resource management to performance optimization and user interaction handling, every aspect of game development presents programmers with new and exciting challenges.</p> <p>One of the key aspects of game development is resource management. Computer games often use various types of resources such as textures, sounds, 3D models, or animations. Effective management of these resources, their loading, releasing, and usage at the right moments, can be a crucial factor influencing the performance and smoothness of the game. Therefore, programmers must not only be able to efficiently manage memory but also consider strategies such as caching, preloading, or streaming of resources.</p> <p>Performance optimization is another significant challenge that game developers must face. Computer games often require significant computational power, especially when it comes to 3D graphics, physics simulation, or artificial intelligence. Therefore, programmers must carefully analyze and optimize the code to achieve smooth animation and responsive gameplay, even on less powerful devices. This requires a deep understanding of rendering graphics mechanisms, physics simulation algorithms, and efficient multithreading programming techniques.</p> <p>However, game development is not just about tackling technical challenges - it’s also about user interaction handling. Games must be intuitive and responsive to provide players with a satisfying experience. Therefore, programmers must ensure smooth control, appropriate reactions to player actions, and a comfortable user interface. This requires not only programming skills but also an understanding of user psychology and interaction design.</p> <p>It’s also worth noting that game development can be an excellent opportunity to experiment with non-standard algorithms and programming techniques. From advanced artificial intelligence algorithms for non-player characters to advanced graphics effects and physical simulations - in the world of computer games, there is no place for boredom or routine. Every project is a new challenge and an opportunity to learn.</p> <div class="row mt-3"> <div class="col-sm mt-3 mt-md-0"> <figure> <iframe src="https://www.youtube.com/embed/-FaqC4h5Ftg?si=mXT0k7xg4b0AzI-j" class="img-fluid rounded z-depth-1" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen="" width="auto" height="auto"/> </figure> </div> <div class="col-sm mt-3 mt-md-0"> <figure> <iframe src="https://www.youtube.com/embed/FWSR_7kZuYg?si=Siwl5YbwKeNZSZ3l" class="img-fluid rounded z-depth-1" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen="" width="auto" height="auto"/> </figure> </div> </div> <div class="caption">Implementing a game in real life can pose an interesting and engaging programming challenge.</div> <p>In this way, game development becomes an excellent exercise for problem-solving skills. Each new game is a new technical challenge that requires a creative approach and analytical thinking.</p>]]></content><author><name></name></author><category term="self-development"/><category term="game-dev"/><category term="software-development"/><summary type="html"><![CDATA[Introduction]]></summary></entry><entry><title type="html">How to store big binary files with git lfs on Google Drive or One Drive?</title><link href="https://ziumper.github.io/blog/2023/how-to-store-big-binary-files-with-git-lfs/" rel="alternate" type="text/html" title="How to store big binary files with git lfs on Google Drive or One Drive?"/><published>2023-10-23T16:40:16+00:00</published><updated>2023-10-23T16:40:16+00:00</updated><id>https://ziumper.github.io/blog/2023/how-to-store-big-binary-files-with-git-lfs</id><content type="html" xml:base="https://ziumper.github.io/blog/2023/how-to-store-big-binary-files-with-git-lfs/"><![CDATA[<h1 id="transfer-adapter">Transfer adapter</h1> <p>I suggest connecting git lfs with custom transfer adapter. According to git-lfs documentation:</p> <blockquote> <p>Git LFS supports multiple ways to transfer (upload and download) files. In the core client, the basic way to do this is via a one-off HTTP request via the URL returned from the LFS API for a given object. The core client also supports extensions to allow resuming of downloads (via Range headers) and uploads (via the tus.io protocol).</p> </blockquote> <h1 id="usage-examples">Usage examples</h1> <p>I used this approach to storage media files in my software development project and game dev project. I bet you can do it too. In the most cases I like to use it for:</p> <ul> <li>game dev projects in game engines like Unity and Unreal Engine.</li> <li>dbdumps storage</li> <li>big media files storage (in case you need a one)</li> </ul> <p>There are always a way to do it for another kind of projects.</p> <p>In example bellow I will be using gitlab, google drive and other tools.</p> <h1 id="gitlab-setup">Gitlab setup</h1> <p>Firstly you need to disable default lfs service of gitlab. It’s very vell documented feature in official documentation <a href="https://docs.gitlab.com/ee/topics/git/lfs">Gitlab</a> but there is not much information how to disable it.</p> <p>It’s a litle tricky and not really user friendly but obviously you need to select your repository and dive into settings.</p> <div class="row mt-3"> <div class="col-sm mt-3 mt-md-0"> <figure> <picture> <source class="responsive-img-srcset" srcset="/assets/img/posts/settings_gitlab-480.webp 480w,/assets/img/posts/settings_gitlab-800.webp 800w,/assets/img/posts/settings_gitlab-1400.webp 1400w," sizes="95vw" type="image/webp"/> <img src="/assets/img/posts/settings_gitlab.png" class="img-fluid rounded z-depth-1" width="100%" height="auto" data-zoomable="" loading="lazy" onerror="this.onerror=null; $('.responsive-img-srcset').remove();"/> </picture> </figure> </div> <div class="col-sm mt-3 mt-md-0"> <figure> <picture> <source class="responsive-img-srcset" srcset="/assets/img/posts/disable_gitlab_lfs_example-480.webp 480w,/assets/img/posts/disable_gitlab_lfs_example-800.webp 800w,/assets/img/posts/disable_gitlab_lfs_example-1400.webp 1400w," sizes="95vw" type="image/webp"/> <img src="/assets/img/posts/disable_gitlab_lfs_example.png" class="img-fluid rounded z-depth-1" width="100%" height="auto" data-zoomable="" loading="lazy" onerror="this.onerror=null; $('.responsive-img-srcset').remove();"/> </picture> </figure> </div> </div> <p>Although!</p> <div class="row mt-3"> <div class="col-sm mt-3 mt-md-0"> <figure> <picture> <source class="responsive-img-srcset" srcset="/assets/img/posts/yoda-there-is-480.webp 480w,/assets/img/posts/yoda-there-is-800.webp 800w,/assets/img/posts/yoda-there-is-1400.webp 1400w," sizes="95vw" type="image/webp"/> <img src="/assets/img/posts/yoda-there-is.gif" class="img-fluid rounded z-depth-1" width="30%" height="auto" data-zoomable="" loading="lazy" onerror="this.onerror=null; $('.responsive-img-srcset').remove();"/> </picture> </figure> </div> </div> <p>There is another way also via gitlab cli, and to CI tools too via environment variables but I will not cover this, let’s keep it simple.</p> <p>If giltab lfs is disabled on remote you can start with local setup.</p> <h1 id="local-repository-setup">Local repository setup</h1> <p>You will need a new repository or use existing one. I suggest starting with fresh state so you can go with easier setup guide bellow.</p> <div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>git init
 </code></pre></div></div> <p>Add also remote server link. That can be done after setup or later. For gitlab you can follow simple tutorial <a href="https://docs.gitlab.com/ee/gitlab-basics/start-using-git.html#add-a-remote">link to git</a></p> <h1 id="lfs-setup">Lfs setup</h1> <p>Download a lfs adapter tool from <a href="https://github.com/sinbad/lfs-folderstore/releases/tag/v1.0.1">available releases</a>.</p> <div class="col-sm mt-3 mt-md-0"> <figure> <picture> <source class="responsive-img-srcset" srcset="/assets/img/posts/OIP-480.webp 480w,/assets/img/posts/OIP-800.webp 800w,/assets/img/posts/OIP-1400.webp 1400w," sizes="95vw" type="image/webp"/> <img src="/assets/img/posts/OIP.jpg" class="img-fluid rounded z-depth-1" width="50%" height="auto" data-zoomable="" loading="lazy" onerror="this.onerror=null; $('.responsive-img-srcset').remove();"/> </picture> </figure> </div> <p>Download, unzip, install it to some good known location. For example make a new folder in you main work disk like this <code class="language-plaintext highlighter-rouge">C:\Tools</code> so full path to the tool will be like this <code class="language-plaintext highlighter-rouge">C:\Tools\lfs-folderstore.exe</code>.</p> <p>To set up repo with lfs please add .gitattributes file in your repository. For examples check this <a href="https://github.com/gitattributes/gitattributes">link</a>.</p> <h2 id="unity-gitattributes">Unity .gitattributes</h2> <div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>## in root
 
 *.cs diff=csharp text
diff --git a/pl/feed.xml b/pl/feed.xml
index 18cd543..136b30b 100644
--- a/pl/feed.xml
+++ b/pl/feed.xml
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en"><generator uri="https://jekyllrb.com/" version="4.3.4">Jekyll</generator><link href="https://ziumper.github.io/pl/feed.xml" rel="self" type="application/atom+xml"/><link href="https://ziumper.github.io/pl/" rel="alternate" type="text/html" hreflang="en"/><updated>2024-12-05T12:13:36+00:00</updated><id>https://ziumper.github.io/feed.xml</id><title type="html">Ziumper</title><entry><title type="html">Tworzenie gier jako świetny sposób na rozwój programisty.</title><link href="https://ziumper.github.io/pl/blog/2024/developing-programming-skills-with-making-games/" rel="alternate" type="text/html" title="Tworzenie gier jako świetny sposób na rozwój programisty."/><published>2024-04-15T00:00:00+00:00</published><updated>2024-04-15T00:00:00+00:00</updated><id>https://ziumper.github.io/blog/2024/developing-programming-skills-with-making-games</id><content type="html" xml:base="https://ziumper.github.io/blog/2024/developing-programming-skills-with-making-games/"><![CDATA[<h1 id="wstęp">Wstęp</h1> <p>Programowanie - umiejętność, która w dzisiejszym świecie nabiera coraz większego znaczenia. Od aplikacji mobilnych po systemy sterowania samochodami autonomicznymi, kodowanie jest kluczowym elementem technologii przyszłości. Jednak dla wielu osób nauka programowania może być trudna i abstrakcyjna. Dlatego też poszukiwanie sposobów na przekazanie tych umiejętności w sposób przyjemny i przystępny staje się coraz bardziej istotne.</p> <p>W tym kontekście pisanie gier komputerowych wydaje się być idealnym narzędziem do nauki programowania. Nie tylko dostarcza ono praktyczne zastosowanie zdobywanej wiedzy, ale również rozwija szereg kluczowych umiejętności, które mogą być użyteczne nie tylko w branży gier, ale również w wielu innych obszarach informatyki i technologii.</p> <p>W niniejszym artykule przyjrzymy się głównym powodowom, dla których pisanie gier komputerowych może być doskonałym sposobem na rozwijanie zdolności programistycznych. Odkryjemy, dlaczego tworzenie gier nie tylko jest fascynujące i kreatywne, ale także skutecznym narzędziem nauki. Gotowy na wyruszenie w podróż przez świat programowania poprzez tworzenie gier? Zapraszam do dalszej lektury!</p> <h1 id="nauka-nie-tylko-podstaw-programowania">Nauka nie tylko podstaw programowania</h1> <p>Pisanie gier komputerowych to nie tylko tworzenie rozrywki - to podróż przez fascynujący świat programowania. Wymaga ono zrozumienia podstawowych koncepcji programowania, takich jak zmienne, pętle, warunki, i wiele innych. Ale czym tak naprawdę jest pisanie gier? To nie tylko ciąg kodu i skomplikowanych algorytmów. To proces, który pozwala na interaktywne i satysfakcjonujące budowanie świata, który marzy o stworzeniu programista.</p> <p>Wyobraź sobie to: samochód, którym grasz na ekranie komputera, to nie tylko zbiór pikseli. To efekt pracy, tworzony przez kod, który napisałeś. Każda pikselowa cząstka tego pojazdu, każdy ruch, to efekt twojej pracy. W grach, jak w prawdziwym świecie, masz pełną kontrolę nad tym, co się dzieje. Możesz zbudować cały świat od zera, a potem pozwolić graczom na jego odkrywanie i eksplorację.</p> <p>To, co czyni pisanie gier tak fascynującym, to możliwość tworzenia czegoś, co jest zarówno interaktywne, jak i pełne życia. Możesz stworzyć postać, która reaguje na każde kliknięcie gracza, stworzyć świat, który rozwija się i ewoluuje wraz z postępem gry. W grach, jedynym ograniczeniem jest twoja wyobraźnia.</p> <div class="caption"> Nic nie stoi na przeszkodzie, żeby stworzyć capybarę jeżdzącą na zielonym slajmie! </div> <div class="row mt-3"> <div class="col-sm mt-3 mt-md-0"> <figure> <video src="/assets/video/posts/capybara_riding_slime.mp4" class="img-fluid rounded z-depth-1" width="auto" height="auto" autoplay="" controls="" muted=""/> </figure> </div> </div> <p>W tym świetle, pisanie gier komputerowych staje się nie tylko sposobem na naukę programowania, ale także pasjonującą podróżą przez świat kreatywności i interakcji. Dodając do tego szczyptę fajnych funkcjonalności i nieograniczony potencjał wyobraźni można uczyć sie bardzo skomplikowanych rzeczy w bardzo przystępny sposób.</p> <h1 id="sposób-na-nudę">Sposób na nudę</h1> <p>Czy nie zdarzyło Ci się kiedyś, że monotonia pisania kolejnych linii kodu w rutynowych projektach sprawiała, że straciłeś chęć do programowania? Czy nie miałeś już dość tworzenia kolejnego systemu integracji lub budowania złożonych API? Jeśli tak, to może nadszedł czas, aby spróbować czegoś zupełnie innego - tworzenia gier!</p> <p>Pisanie gier komputerowych to nie tylko sposób na rozwijanie umiejętności programistycznych, ale również skuteczny sposób na pozbycie się nudy i monotoniczności związanej z tradycyjnymi projektami programistycznymi. W przeciwieństwie do biznesowych aplikacji czy systemów, w których każda funkcjonalność może wydawać się podobna, tworzenie gier oferuje niekończące się możliwości kreatywności i wyzwań.</p> <p>Każda funkcjonalność w grze może być zupełnie inna i oryginalna. Od sterowania postacią gracza, poprzez implementację skomplikowanych mechanik rozgrywki, aż po projektowanie interaktywnego świata gry - każdy element wymaga unikalnego podejścia i rozwiązania. Tworząc grę, programista może czuć się jak artysta, który tworzy dzieło sztuki, gdzie jedynym ograniczeniem jest jego wyobraźnia.</p> <p>Co więcej, problemy i wyzwania, z którymi będziesz się spotykać podczas tworzenia gier, są zupełnie inne niż te typowe biznesowe problemy klienta. Zamiast rozważać skalowalność systemu czy integrację z innymi aplikacjami, będziesz stawać w obliczu wyzwań związanych z optymalizacją wydajności gry, zarządzaniem zasobami czy balansem rozgrywki. To zupełnie inny wymiar programowania, który może przywrócić pasję i radość do pracy nad kodem.</p> <p>Warto również zauważyć, że tworzenie gier może być również doskonałą okazją do nauki nowych technologii i narzędzi programistycznych. Od grafiki 3D i silników gier po sztuczną inteligencję i rozszerzoną rzeczywistość - świat gier oferuje bogate pole do eksperymentowania i zdobywania nowych umiejętności.</p> <div class="col-sm mt-3 mt-md-0"> <figure> <picture> <source class="responsive-img-srcset" srcset="/assets/img/projects/BoardHeroesBattle_unreal-480.webp 480w,/assets/img/projects/BoardHeroesBattle_unreal-800.webp 800w,/assets/img/projects/BoardHeroesBattle_unreal-1400.webp 1400w," sizes="95vw" type="image/webp"/> <img src="/assets/img/projects/BoardHeroesBattle_unreal.jpg" class="img-fluid rounded z-depth-1" width="100%" height="auto" title="example image" data-zoomable="" loading="lazy" onerror="this.onerror=null; $('.responsive-img-srcset').remove();"/> </picture> </figure> </div> <div class="caption">Stworzona przeze mnie w ramach pracy magisterskiej <a href="https://ziumper.github.io/pl/projects/board-heroes-battle">gra AR</a></div> <p>Właśnie dlatego, jeśli odczuwasz nudę i monotonię w swojej pracy programisty, może warto dać szansę tworzeniu gier komputerowych. Nie tylko rozwijasz swoje umiejętności programistyczne, ale również otwierasz drzwi do fascynującego świata kreatywności i przygody. Czas na odświeżenie swojej pasji do programowania - czas na tworzenie gier!</p> <h1 id="rozwój-umiejętności-rozwiązywania-problemów">Rozwój umiejętności rozwiązywania problemów</h1> <p>Pisanie gier komputerowych to nie tylko tworzenie wizualnie atrakcyjnych i emocjonujących doświadczeń dla graczy - to także wyzwanie techniczne, które wymaga rozwiązania różnorodnych problemów programistycznych. Od zarządzania zasobami po optymalizację wydajności i obsługę interakcji użytkownika, każdy aspekt tworzenia gry stawia przed programistą nowe i ekscytujące wyzwania.</p> <p>Jednym z kluczowych aspektów pisanie gier jest zarządzanie zasobami. Gry komputerowe często korzystają z wielu różnych typów zasobów, takich jak tekstury, dźwięki, modele 3D czy animacje. Efektywne zarządzanie tymi zasobami, ich ładowanie, zwalnianie i używanie w odpowiednich momentach, może być kluczowym czynnikiem wpływającym na wydajność i płynność gry. Programista musi więc nie tylko umieć efektywnie zarządzać pamięcią, ale również rozważyć strategie cache’owania, preloadingu czy streamingu zasobów.</p> <p>Optymalizacja wydajności to kolejne istotne wyzwanie, z którym programista gier musi się zmierzyć. Gry komputerowe często wymagają dużej mocy obliczeniowej, szczególnie jeśli chodzi o grafikę 3D, fizykę symulacyjną czy sztuczną inteligencję. Programista musi więc dokładnie analizować i optymalizować kod, aby osiągnąć płynną animację i responsywną rozgrywkę, nawet na mniej wydajnych urządzeniach. To wymaga głębokiego zrozumienia mechanizmów renderowania grafiki, algorytmów symulacji fizycznej oraz efektywnych technik programowania wielowątkowego.</p> <p>Jednak pisanie gier to nie tylko walka z technicznymi wyzwaniami - to także obsługa interakcji użytkownika. Gry muszą być intuicyjne i responsywne, aby zapewnić graczom satysfakcjonujące doświadczenie. Programista musi więc dbać o płynność sterowania, odpowiednie reakcje na akcje gracza oraz wygodny interfejs użytkownika. To wymaga nie tylko umiejętności programowania, ale także zrozumienia psychologii użytkownika i designu interakcji.</p> <p>Warto również zauważyć, że pisanie gier może być doskonałą okazją do eksperymentowania z nietypowymi algorytmami i technikami programistycznymi. Od zaawansowanych algorytmów sztucznej inteligencji dla postaci niezależnych, po zaawansowane efekty graficzne i symulacje fizyczne - w świecie gier komputerowych nie ma miejsca na nudę ani rutynę. Każdy projekt to nowe wyzwanie i okazja do nauki.</p> <div class="row mt-3"> <div class="col-sm mt-3 mt-md-0"> <figure> <iframe src="https://www.youtube.com/embed/-FaqC4h5Ftg?si=mXT0k7xg4b0AzI-j" class="img-fluid rounded z-depth-1" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen="" width="auto" height="auto"/> </figure> </div> <div class="col-sm mt-3 mt-md-0"> <figure> <iframe src="https://www.youtube.com/embed/FWSR_7kZuYg?si=Siwl5YbwKeNZSZ3l" class="img-fluid rounded z-depth-1" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen="" width="auto" height="auto"/> </figure> </div> </div> <div class="caption">Implementacja gry w życie może stanowić interesujące i ciekawe wyzwanie programistyczne</div> <p>W ten sposób, pisanie gier staje się doskonałym ćwiczeniem dla umiejętności rozwiązywania problemów. Każda nowa gra to nowe wyzwanie techniczne, które wymaga kreatywnego podejścia i zdolności do myślenia analitycznego.</p>]]></content><author><name></name></author><category term="self-development"/><category term="game-dev"/><category term="software-development"/><summary type="html"><![CDATA[Wstęp]]></summary></entry><entry><title type="html">Jak przechowywać duże pliki binarne z użyciem git lfs na Google Drive lub One Drive?</title><link href="https://ziumper.github.io/pl/blog/2023/how-to-store-big-binary-files-with-git-lfs/" rel="alternate" type="text/html" title="Jak przechowywać duże pliki binarne z użyciem git lfs na Google Drive lub One Drive?"/><published>2023-10-23T16:40:16+00:00</published><updated>2023-10-23T16:40:16+00:00</updated><id>https://ziumper.github.io/blog/2023/how-to-store-big-binary-files-with-git-lfs</id><content type="html" xml:base="https://ziumper.github.io/blog/2023/how-to-store-big-binary-files-with-git-lfs/"><![CDATA[<h1 id="adapter-transferu">Adapter transferu</h1> <p>Sugeruję połączenie git lfs z niestandardowym adapterem transferu. Zgodnie z dokumentacją git-lfs:</p> <blockquote> <p>Git LFS obsługuje wiele sposobów przesyłania (wgrywania i pobierania) plików. W podstawowych aplikacjach klienckich używa się żądania HTTP za pośrednictwem adresu URL zwróconego z API LFS dla danego obiektu. Klient obsługuje również rozszerzenia umożliwiające wznowienie pobierania (za pośrednictwem nagłówków Range) i przesyłania.</p> </blockquote> <h1 id="przykłady-użycia">Przykłady użycia</h1> <p>Wykorzystałem ten sposób do przechowywania plików multimedialnych w moim projekcie i do rozwoju oprogramowania w projektach związanych z grami. Jestem pewien, że i Ty możesz to zrobić. W większości przypadków lubię to stosować do:</p> <ul> <li>projektów związanych z tworzeniem gier w silnikach takich jak Unity i Unreal Engine.</li> <li>przechowywania dbdumps</li> <li>przechowywania dużych plików multimedialnych (w razie potrzeby)</li> </ul> <p>Zawsze istnieje sposób, aby to zrobić również dla innych rodzajów projektów.</p> <p>W poniższym przykładzie będę używał gitlab, google drive i innych narzędzi.</p> <h1 id="konfiguracja-gitlab-a">Konfiguracja Gitlab-a</h1> <p>Po pierwsze, musisz wyłączyć domyślną usługę lfs w gitlabie. Jest to bardzo dobrze udokumentowana funkcja w oficjalnej dokumentacji <a href="https://docs.gitlab.com/ee/topics/git/lfs">Gitlab</a>, ale nie ma zbyt dużo informacji na temat tego, jak ją wyłączyć.</p> <p>Jest to trochę skomplikowane i niezbyt przyjazne dla użytkownika, ale oczywiście musisz wybrać swoje repozytorium i wejść w ustawienia.</p> <div class="row mt-3"> <div class="col-sm mt-3 mt-md-0"> <figure> <picture> <source class="responsive-img-srcset" srcset="/assets/img/posts/settings_gitlab-480.webp 480w,/assets/img/posts/settings_gitlab-800.webp 800w,/assets/img/posts/settings_gitlab-1400.webp 1400w," sizes="95vw" type="image/webp"/> <img src="/assets/img/posts/settings_gitlab.png" class="img-fluid rounded z-depth-1" width="100%" height="auto" data-zoomable="" loading="lazy" onerror="this.onerror=null; $('.responsive-img-srcset').remove();"/> </picture> </figure> </div> <div class="col-sm mt-3 mt-md-0"> <figure> <picture> <source class="responsive-img-srcset" srcset="/assets/img/posts/disable_gitlab_lfs_example-480.webp 480w,/assets/img/posts/disable_gitlab_lfs_example-800.webp 800w,/assets/img/posts/disable_gitlab_lfs_example-1400.webp 1400w," sizes="95vw" type="image/webp"/> <img src="/assets/img/posts/disable_gitlab_lfs_example.png" class="img-fluid rounded z-depth-1" width="100%" height="auto" data-zoomable="" loading="lazy" onerror="this.onerror=null; $('.responsive-img-srcset').remove();"/> </picture> </figure> </div> </div> <p>Istnieje również inny sposób za pomocą wiersza poleceń gitlab oraz dla narzędzi CI za pomocą zmiennych środowiskowych, ale nie będę tego omawiał, trzymajmy to proste. Jeśli gitlab lfs jest wyłączony na zdalnym serwerze, możesz zacząć od konfiguracji lokalnej.</p> <h1 id="konfiguracja-lokalnego-repozytorium">Konfiguracja lokalnego repozytorium</h1> <p>Będziesz potrzebował nowego repozytorium lub możesz użyć istniejącego. Sugeruję rozpoczęcie od stanu początkowego, abyś mógł skorzystać z prostego przewodnika konfiguracyjnego poniżej.</p> <div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>git init
+<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en"><generator uri="https://jekyllrb.com/" version="4.3.4">Jekyll</generator><link href="https://ziumper.github.io/pl/feed.xml" rel="self" type="application/atom+xml"/><link href="https://ziumper.github.io/pl/" rel="alternate" type="text/html" hreflang="en"/><updated>2024-12-14T10:02:13+00:00</updated><id>https://ziumper.github.io/feed.xml</id><title type="html">Ziumper</title><entry><title type="html">Tworzenie gier jako świetny sposób na rozwój programisty.</title><link href="https://ziumper.github.io/pl/blog/2024/developing-programming-skills-with-making-games/" rel="alternate" type="text/html" title="Tworzenie gier jako świetny sposób na rozwój programisty."/><published>2024-04-15T00:00:00+00:00</published><updated>2024-04-15T00:00:00+00:00</updated><id>https://ziumper.github.io/blog/2024/developing-programming-skills-with-making-games</id><content type="html" xml:base="https://ziumper.github.io/blog/2024/developing-programming-skills-with-making-games/"><![CDATA[<h1 id="wstęp">Wstęp</h1> <p>Programowanie - umiejętność, która w dzisiejszym świecie nabiera coraz większego znaczenia. Od aplikacji mobilnych po systemy sterowania samochodami autonomicznymi, kodowanie jest kluczowym elementem technologii przyszłości. Jednak dla wielu osób nauka programowania może być trudna i abstrakcyjna. Dlatego też poszukiwanie sposobów na przekazanie tych umiejętności w sposób przyjemny i przystępny staje się coraz bardziej istotne.</p> <p>W tym kontekście pisanie gier komputerowych wydaje się być idealnym narzędziem do nauki programowania. Nie tylko dostarcza ono praktyczne zastosowanie zdobywanej wiedzy, ale również rozwija szereg kluczowych umiejętności, które mogą być użyteczne nie tylko w branży gier, ale również w wielu innych obszarach informatyki i technologii.</p> <p>W niniejszym artykule przyjrzymy się głównym powodowom, dla których pisanie gier komputerowych może być doskonałym sposobem na rozwijanie zdolności programistycznych. Odkryjemy, dlaczego tworzenie gier nie tylko jest fascynujące i kreatywne, ale także skutecznym narzędziem nauki. Gotowy na wyruszenie w podróż przez świat programowania poprzez tworzenie gier? Zapraszam do dalszej lektury!</p> <h1 id="nauka-nie-tylko-podstaw-programowania">Nauka nie tylko podstaw programowania</h1> <p>Pisanie gier komputerowych to nie tylko tworzenie rozrywki - to podróż przez fascynujący świat programowania. Wymaga ono zrozumienia podstawowych koncepcji programowania, takich jak zmienne, pętle, warunki, i wiele innych. Ale czym tak naprawdę jest pisanie gier? To nie tylko ciąg kodu i skomplikowanych algorytmów. To proces, który pozwala na interaktywne i satysfakcjonujące budowanie świata, który marzy o stworzeniu programista.</p> <p>Wyobraź sobie to: samochód, którym grasz na ekranie komputera, to nie tylko zbiór pikseli. To efekt pracy, tworzony przez kod, który napisałeś. Każda pikselowa cząstka tego pojazdu, każdy ruch, to efekt twojej pracy. W grach, jak w prawdziwym świecie, masz pełną kontrolę nad tym, co się dzieje. Możesz zbudować cały świat od zera, a potem pozwolić graczom na jego odkrywanie i eksplorację.</p> <p>To, co czyni pisanie gier tak fascynującym, to możliwość tworzenia czegoś, co jest zarówno interaktywne, jak i pełne życia. Możesz stworzyć postać, która reaguje na każde kliknięcie gracza, stworzyć świat, który rozwija się i ewoluuje wraz z postępem gry. W grach, jedynym ograniczeniem jest twoja wyobraźnia.</p> <div class="caption"> Nic nie stoi na przeszkodzie, żeby stworzyć capybarę jeżdzącą na zielonym slajmie! </div> <div class="row mt-3"> <div class="col-sm mt-3 mt-md-0"> <figure> <video src="/assets/video/posts/capybara_riding_slime.mp4" class="img-fluid rounded z-depth-1" width="auto" height="auto" autoplay="" controls="" muted=""/> </figure> </div> </div> <p>W tym świetle, pisanie gier komputerowych staje się nie tylko sposobem na naukę programowania, ale także pasjonującą podróżą przez świat kreatywności i interakcji. Dodając do tego szczyptę fajnych funkcjonalności i nieograniczony potencjał wyobraźni można uczyć sie bardzo skomplikowanych rzeczy w bardzo przystępny sposób.</p> <h1 id="sposób-na-nudę">Sposób na nudę</h1> <p>Czy nie zdarzyło Ci się kiedyś, że monotonia pisania kolejnych linii kodu w rutynowych projektach sprawiała, że straciłeś chęć do programowania? Czy nie miałeś już dość tworzenia kolejnego systemu integracji lub budowania złożonych API? Jeśli tak, to może nadszedł czas, aby spróbować czegoś zupełnie innego - tworzenia gier!</p> <p>Pisanie gier komputerowych to nie tylko sposób na rozwijanie umiejętności programistycznych, ale również skuteczny sposób na pozbycie się nudy i monotoniczności związanej z tradycyjnymi projektami programistycznymi. W przeciwieństwie do biznesowych aplikacji czy systemów, w których każda funkcjonalność może wydawać się podobna, tworzenie gier oferuje niekończące się możliwości kreatywności i wyzwań.</p> <p>Każda funkcjonalność w grze może być zupełnie inna i oryginalna. Od sterowania postacią gracza, poprzez implementację skomplikowanych mechanik rozgrywki, aż po projektowanie interaktywnego świata gry - każdy element wymaga unikalnego podejścia i rozwiązania. Tworząc grę, programista może czuć się jak artysta, który tworzy dzieło sztuki, gdzie jedynym ograniczeniem jest jego wyobraźnia.</p> <p>Co więcej, problemy i wyzwania, z którymi będziesz się spotykać podczas tworzenia gier, są zupełnie inne niż te typowe biznesowe problemy klienta. Zamiast rozważać skalowalność systemu czy integrację z innymi aplikacjami, będziesz stawać w obliczu wyzwań związanych z optymalizacją wydajności gry, zarządzaniem zasobami czy balansem rozgrywki. To zupełnie inny wymiar programowania, który może przywrócić pasję i radość do pracy nad kodem.</p> <p>Warto również zauważyć, że tworzenie gier może być również doskonałą okazją do nauki nowych technologii i narzędzi programistycznych. Od grafiki 3D i silników gier po sztuczną inteligencję i rozszerzoną rzeczywistość - świat gier oferuje bogate pole do eksperymentowania i zdobywania nowych umiejętności.</p> <div class="col-sm mt-3 mt-md-0"> <figure> <picture> <source class="responsive-img-srcset" srcset="/assets/img/projects/BoardHeroesBattle_unreal-480.webp 480w,/assets/img/projects/BoardHeroesBattle_unreal-800.webp 800w,/assets/img/projects/BoardHeroesBattle_unreal-1400.webp 1400w," sizes="95vw" type="image/webp"/> <img src="/assets/img/projects/BoardHeroesBattle_unreal.jpg" class="img-fluid rounded z-depth-1" width="100%" height="auto" title="example image" data-zoomable="" loading="lazy" onerror="this.onerror=null; $('.responsive-img-srcset').remove();"/> </picture> </figure> </div> <div class="caption">Stworzona przeze mnie w ramach pracy magisterskiej <a href="https://ziumper.github.io/pl/projects/board-heroes-battle">gra AR</a></div> <p>Właśnie dlatego, jeśli odczuwasz nudę i monotonię w swojej pracy programisty, może warto dać szansę tworzeniu gier komputerowych. Nie tylko rozwijasz swoje umiejętności programistyczne, ale również otwierasz drzwi do fascynującego świata kreatywności i przygody. Czas na odświeżenie swojej pasji do programowania - czas na tworzenie gier!</p> <h1 id="rozwój-umiejętności-rozwiązywania-problemów">Rozwój umiejętności rozwiązywania problemów</h1> <p>Pisanie gier komputerowych to nie tylko tworzenie wizualnie atrakcyjnych i emocjonujących doświadczeń dla graczy - to także wyzwanie techniczne, które wymaga rozwiązania różnorodnych problemów programistycznych. Od zarządzania zasobami po optymalizację wydajności i obsługę interakcji użytkownika, każdy aspekt tworzenia gry stawia przed programistą nowe i ekscytujące wyzwania.</p> <p>Jednym z kluczowych aspektów pisanie gier jest zarządzanie zasobami. Gry komputerowe często korzystają z wielu różnych typów zasobów, takich jak tekstury, dźwięki, modele 3D czy animacje. Efektywne zarządzanie tymi zasobami, ich ładowanie, zwalnianie i używanie w odpowiednich momentach, może być kluczowym czynnikiem wpływającym na wydajność i płynność gry. Programista musi więc nie tylko umieć efektywnie zarządzać pamięcią, ale również rozważyć strategie cache’owania, preloadingu czy streamingu zasobów.</p> <p>Optymalizacja wydajności to kolejne istotne wyzwanie, z którym programista gier musi się zmierzyć. Gry komputerowe często wymagają dużej mocy obliczeniowej, szczególnie jeśli chodzi o grafikę 3D, fizykę symulacyjną czy sztuczną inteligencję. Programista musi więc dokładnie analizować i optymalizować kod, aby osiągnąć płynną animację i responsywną rozgrywkę, nawet na mniej wydajnych urządzeniach. To wymaga głębokiego zrozumienia mechanizmów renderowania grafiki, algorytmów symulacji fizycznej oraz efektywnych technik programowania wielowątkowego.</p> <p>Jednak pisanie gier to nie tylko walka z technicznymi wyzwaniami - to także obsługa interakcji użytkownika. Gry muszą być intuicyjne i responsywne, aby zapewnić graczom satysfakcjonujące doświadczenie. Programista musi więc dbać o płynność sterowania, odpowiednie reakcje na akcje gracza oraz wygodny interfejs użytkownika. To wymaga nie tylko umiejętności programowania, ale także zrozumienia psychologii użytkownika i designu interakcji.</p> <p>Warto również zauważyć, że pisanie gier może być doskonałą okazją do eksperymentowania z nietypowymi algorytmami i technikami programistycznymi. Od zaawansowanych algorytmów sztucznej inteligencji dla postaci niezależnych, po zaawansowane efekty graficzne i symulacje fizyczne - w świecie gier komputerowych nie ma miejsca na nudę ani rutynę. Każdy projekt to nowe wyzwanie i okazja do nauki.</p> <div class="row mt-3"> <div class="col-sm mt-3 mt-md-0"> <figure> <iframe src="https://www.youtube.com/embed/-FaqC4h5Ftg?si=mXT0k7xg4b0AzI-j" class="img-fluid rounded z-depth-1" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen="" width="auto" height="auto"/> </figure> </div> <div class="col-sm mt-3 mt-md-0"> <figure> <iframe src="https://www.youtube.com/embed/FWSR_7kZuYg?si=Siwl5YbwKeNZSZ3l" class="img-fluid rounded z-depth-1" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen="" width="auto" height="auto"/> </figure> </div> </div> <div class="caption">Implementacja gry w życie może stanowić interesujące i ciekawe wyzwanie programistyczne</div> <p>W ten sposób, pisanie gier staje się doskonałym ćwiczeniem dla umiejętności rozwiązywania problemów. Każda nowa gra to nowe wyzwanie techniczne, które wymaga kreatywnego podejścia i zdolności do myślenia analitycznego.</p>]]></content><author><name></name></author><category term="self-development"/><category term="game-dev"/><category term="software-development"/><summary type="html"><![CDATA[Wstęp]]></summary></entry><entry><title type="html">Jak przechowywać duże pliki binarne z użyciem git lfs na Google Drive lub One Drive?</title><link href="https://ziumper.github.io/pl/blog/2023/how-to-store-big-binary-files-with-git-lfs/" rel="alternate" type="text/html" title="Jak przechowywać duże pliki binarne z użyciem git lfs na Google Drive lub One Drive?"/><published>2023-10-23T16:40:16+00:00</published><updated>2023-10-23T16:40:16+00:00</updated><id>https://ziumper.github.io/blog/2023/how-to-store-big-binary-files-with-git-lfs</id><content type="html" xml:base="https://ziumper.github.io/blog/2023/how-to-store-big-binary-files-with-git-lfs/"><![CDATA[<h1 id="adapter-transferu">Adapter transferu</h1> <p>Sugeruję połączenie git lfs z niestandardowym adapterem transferu. Zgodnie z dokumentacją git-lfs:</p> <blockquote> <p>Git LFS obsługuje wiele sposobów przesyłania (wgrywania i pobierania) plików. W podstawowych aplikacjach klienckich używa się żądania HTTP za pośrednictwem adresu URL zwróconego z API LFS dla danego obiektu. Klient obsługuje również rozszerzenia umożliwiające wznowienie pobierania (za pośrednictwem nagłówków Range) i przesyłania.</p> </blockquote> <h1 id="przykłady-użycia">Przykłady użycia</h1> <p>Wykorzystałem ten sposób do przechowywania plików multimedialnych w moim projekcie i do rozwoju oprogramowania w projektach związanych z grami. Jestem pewien, że i Ty możesz to zrobić. W większości przypadków lubię to stosować do:</p> <ul> <li>projektów związanych z tworzeniem gier w silnikach takich jak Unity i Unreal Engine.</li> <li>przechowywania dbdumps</li> <li>przechowywania dużych plików multimedialnych (w razie potrzeby)</li> </ul> <p>Zawsze istnieje sposób, aby to zrobić również dla innych rodzajów projektów.</p> <p>W poniższym przykładzie będę używał gitlab, google drive i innych narzędzi.</p> <h1 id="konfiguracja-gitlab-a">Konfiguracja Gitlab-a</h1> <p>Po pierwsze, musisz wyłączyć domyślną usługę lfs w gitlabie. Jest to bardzo dobrze udokumentowana funkcja w oficjalnej dokumentacji <a href="https://docs.gitlab.com/ee/topics/git/lfs">Gitlab</a>, ale nie ma zbyt dużo informacji na temat tego, jak ją wyłączyć.</p> <p>Jest to trochę skomplikowane i niezbyt przyjazne dla użytkownika, ale oczywiście musisz wybrać swoje repozytorium i wejść w ustawienia.</p> <div class="row mt-3"> <div class="col-sm mt-3 mt-md-0"> <figure> <picture> <source class="responsive-img-srcset" srcset="/assets/img/posts/settings_gitlab-480.webp 480w,/assets/img/posts/settings_gitlab-800.webp 800w,/assets/img/posts/settings_gitlab-1400.webp 1400w," sizes="95vw" type="image/webp"/> <img src="/assets/img/posts/settings_gitlab.png" class="img-fluid rounded z-depth-1" width="100%" height="auto" data-zoomable="" loading="lazy" onerror="this.onerror=null; $('.responsive-img-srcset').remove();"/> </picture> </figure> </div> <div class="col-sm mt-3 mt-md-0"> <figure> <picture> <source class="responsive-img-srcset" srcset="/assets/img/posts/disable_gitlab_lfs_example-480.webp 480w,/assets/img/posts/disable_gitlab_lfs_example-800.webp 800w,/assets/img/posts/disable_gitlab_lfs_example-1400.webp 1400w," sizes="95vw" type="image/webp"/> <img src="/assets/img/posts/disable_gitlab_lfs_example.png" class="img-fluid rounded z-depth-1" width="100%" height="auto" data-zoomable="" loading="lazy" onerror="this.onerror=null; $('.responsive-img-srcset').remove();"/> </picture> </figure> </div> </div> <p>Istnieje również inny sposób za pomocą wiersza poleceń gitlab oraz dla narzędzi CI za pomocą zmiennych środowiskowych, ale nie będę tego omawiał, trzymajmy to proste. Jeśli gitlab lfs jest wyłączony na zdalnym serwerze, możesz zacząć od konfiguracji lokalnej.</p> <h1 id="konfiguracja-lokalnego-repozytorium">Konfiguracja lokalnego repozytorium</h1> <p>Będziesz potrzebował nowego repozytorium lub możesz użyć istniejącego. Sugeruję rozpoczęcie od stanu początkowego, abyś mógł skorzystać z prostego przewodnika konfiguracyjnego poniżej.</p> <div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>git init
 </code></pre></div></div> <p>Dodaj również link do serwera zdalnego. Można to zrobić po konfiguracji lub później. Dla lfs z gitlabem możesz sugerować się zgodnie z prostym samouczkiem <a href="https://docs.gitlab.com/ee/gitlab-basics/start-using-git.html#add-a-remote">link do git</a></p> <h1 id="konfiguracja-lfs">Konfiguracja lfs</h1> <p>Pobierz narzędzie adaptera lfs z <a href="https://github.com/sinbad/lfs-folderstore/releases/tag/v1.0.1">dostępnych wydań</a>.</p> <div class="col-sm mt-3 mt-md-0"> <figure> <picture> <source class="responsive-img-srcset" srcset="/assets/img/posts/OIP-480.webp 480w,/assets/img/posts/OIP-800.webp 800w,/assets/img/posts/OIP-1400.webp 1400w," sizes="95vw" type="image/webp"/> <img src="/assets/img/posts/OIP.jpg" class="img-fluid rounded z-depth-1" width="50%" height="auto" data-zoomable="" loading="lazy" onerror="this.onerror=null; $('.responsive-img-srcset').remove();"/> </picture> </figure> </div> <p>Pobierz, rozpakuj, zainstaluj je w dobrze znanej lokalizacji. Na przykład utwórz nowy folder na swoim głównym dysku roboczym, np. tak: <code class="language-plaintext highlighter-rouge">C:\Tools</code>, więc pełna ścieżka do narzędzia będzie wyglądać tak: <code class="language-plaintext highlighter-rouge">C:\Tools\lfs-folderstore.exe</code>.</p> <p>Aby skonfigurować repozytorium z lfs, dodaj plik .gitattributes w swoim repozytorium. Przykłady można znaleźć pod tym <a href="https://github.com/gitattributes/gitattributes">linkiem</a>.</p> <h2 id="unity-gitattributes">Unity .gitattributes</h2> <div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>## in root
 
 *.cs diff=csharp text
diff --git a/pl/sitemap.xml b/pl/sitemap.xml
index d906812..1eeda95 100644
--- a/pl/sitemap.xml
+++ b/pl/sitemap.xml
@@ -1 +1 @@
-<?xml version="1.0" encoding="UTF-8"?> <urlset xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.sitemaps.org/schemas/sitemap/0.9 http://www.sitemaps.org/schemas/sitemap/0.9/sitemap.xsd" xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"> <url> <loc>https://ziumper.github.io/blog/2022/how-to-start-with-git/</loc> <lastmod>2022-07-17T16:40:16+00:00</lastmod> </url> <url> <loc>https://ziumper.github.io/blog/2022/how-to-solve-rebase-merge-conflicts-with-GitExtensions/</loc> <lastmod>2022-08-06T16:40:16+00:00</lastmod> </url> <url> <loc>https://ziumper.github.io/blog/2023/how-to-store-big-binary-files-with-git-lfs/</loc> <lastmod>2023-10-23T16:40:16+00:00</lastmod> </url> <url> <loc>https://ziumper.github.io/blog/2024/developing-programming-skills-with-making-games/</loc> <lastmod>2024-04-15T00:00:00+00:00</lastmod> </url> <url> <loc>https://ziumper.github.io/projects/agents-app/</loc> <lastmod>2024-12-05T12:13:36+00:00</lastmod> </url> <url> <loc>https://ziumper.github.io/projects/axion/</loc> <lastmod>2024-12-05T12:13:36+00:00</lastmod> </url> <url> <loc>https://ziumper.github.io/projects/blog-manager/</loc> <lastmod>2024-12-05T12:13:36+00:00</lastmod> </url> <url> <loc>https://ziumper.github.io/projects/board-heroes-battle/</loc> <lastmod>2024-12-05T12:13:36+00:00</lastmod> </url> <url> <loc>https://ziumper.github.io/projects/boesner/</loc> <lastmod>2024-12-05T12:13:36+00:00</lastmod> </url> <url> <loc>https://ziumper.github.io/projects/connect-the-pops-clone/</loc> <lastmod>2024-12-05T12:13:36+00:00</lastmod> </url> <url> <loc>https://ziumper.github.io/projects/crafter/</loc> <lastmod>2024-12-05T12:13:36+00:00</lastmod> </url> <url> <loc>https://ziumper.github.io/projects/file-upload/</loc> <lastmod>2024-12-05T12:13:36+00:00</lastmod> </url> <url> <loc>https://ziumper.github.io/projects/garage-flipper/</loc> <lastmod>2024-12-05T12:13:36+00:00</lastmod> </url> <url> <loc>https://ziumper.github.io/projects/leguano/</loc> <lastmod>2024-12-05T12:13:36+00:00</lastmod> </url> <url> <loc>https://ziumper.github.io/projects/ludo-just-chill-out/</loc> <lastmod>2024-12-05T12:13:36+00:00</lastmod> </url> <url> <loc>https://ziumper.github.io/projects/lzss/</loc> <lastmod>2024-12-05T12:13:36+00:00</lastmod> </url> <url> <loc>https://ziumper.github.io/projects/night-catcher/</loc> <lastmod>2024-12-05T12:13:36+00:00</lastmod> </url> <url> <loc>https://ziumper.github.io/projects/old-portfolio-project/</loc> <lastmod>2024-12-05T12:13:36+00:00</lastmod> </url> <url> <loc>https://ziumper.github.io/projects/online-store-template/</loc> <lastmod>2024-12-05T12:13:36+00:00</lastmod> </url> <url> <loc>https://ziumper.github.io/projects/polygangs/</loc> <lastmod>2024-12-05T12:13:36+00:00</lastmod> </url> <url> <loc>https://ziumper.github.io/projects/steve-the-hamster/</loc> <lastmod>2024-12-05T12:13:36+00:00</lastmod> </url> <url> <loc>https://ziumper.github.io/projects/todo-app/</loc> <lastmod>2024-12-05T12:13:36+00:00</lastmod> </url> <url> <loc>https://ziumper.github.io/projects/web-cloud-system/</loc> <lastmod>2024-12-05T12:13:36+00:00</lastmod> </url> <url> <loc>https://ziumper.github.io/</loc> </url> <url> <loc>https://ziumper.github.io/cv/</loc> </url> <url> <loc>https://ziumper.github.io/news/</loc> </url> <url> <loc>https://ziumper.github.io/projects/</loc> </url> <url> <loc>https://ziumper.github.io/repositories/</loc> </url> <url> <loc>https://ziumper.github.io/blog/tag/git/</loc> </url> <url> <loc>https://ziumper.github.io/blog/tag/gitextensions/</loc> </url> <url> <loc>https://ziumper.github.io/blog/tag/git-lfs/</loc> </url> <url> <loc>https://ziumper.github.io/blog/tag/git-extensions/</loc> </url> <url> <loc>https://ziumper.github.io/blog/tag/unity/</loc> </url> <url> <loc>https://ziumper.github.io/blog/tag/unreal-engine/</loc> </url> <url> <loc>https://ziumper.github.io/blog/tag/game-dev/</loc> </url> <url> <loc>https://ziumper.github.io/blog/tag/software-development/</loc> </url> <url> <loc>https://ziumper.github.io/blog/category/tutorials/</loc> </url> <url> <loc>https://ziumper.github.io/blog/category/self-development/</loc> </url> <url> <loc>https://ziumper.github.io/blog/2022/</loc> </url> <url> <loc>https://ziumper.github.io/blog/2023/</loc> </url> <url> <loc>https://ziumper.github.io/blog/2024/</loc> </url> <url> <loc>https://ziumper.github.io/blog/</loc> </url> </urlset>
\ No newline at end of file
+<?xml version="1.0" encoding="UTF-8"?> <urlset xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.sitemaps.org/schemas/sitemap/0.9 http://www.sitemaps.org/schemas/sitemap/0.9/sitemap.xsd" xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"> <url> <loc>https://ziumper.github.io/blog/2022/how-to-start-with-git/</loc> <lastmod>2022-07-17T16:40:16+00:00</lastmod> </url> <url> <loc>https://ziumper.github.io/blog/2022/how-to-solve-rebase-merge-conflicts-with-GitExtensions/</loc> <lastmod>2022-08-06T16:40:16+00:00</lastmod> </url> <url> <loc>https://ziumper.github.io/blog/2023/how-to-store-big-binary-files-with-git-lfs/</loc> <lastmod>2023-10-23T16:40:16+00:00</lastmod> </url> <url> <loc>https://ziumper.github.io/blog/2024/developing-programming-skills-with-making-games/</loc> <lastmod>2024-04-15T00:00:00+00:00</lastmod> </url> <url> <loc>https://ziumper.github.io/projects/agents-app/</loc> <lastmod>2024-12-14T10:02:13+00:00</lastmod> </url> <url> <loc>https://ziumper.github.io/projects/axion/</loc> <lastmod>2024-12-14T10:02:13+00:00</lastmod> </url> <url> <loc>https://ziumper.github.io/projects/blog-manager/</loc> <lastmod>2024-12-14T10:02:13+00:00</lastmod> </url> <url> <loc>https://ziumper.github.io/projects/board-heroes-battle/</loc> <lastmod>2024-12-14T10:02:13+00:00</lastmod> </url> <url> <loc>https://ziumper.github.io/projects/boesner/</loc> <lastmod>2024-12-14T10:02:13+00:00</lastmod> </url> <url> <loc>https://ziumper.github.io/projects/connect-the-pops-clone/</loc> <lastmod>2024-12-14T10:02:13+00:00</lastmod> </url> <url> <loc>https://ziumper.github.io/projects/crafter/</loc> <lastmod>2024-12-14T10:02:13+00:00</lastmod> </url> <url> <loc>https://ziumper.github.io/projects/file-upload/</loc> <lastmod>2024-12-14T10:02:13+00:00</lastmod> </url> <url> <loc>https://ziumper.github.io/projects/garage-flipper/</loc> <lastmod>2024-12-14T10:02:13+00:00</lastmod> </url> <url> <loc>https://ziumper.github.io/projects/leguano/</loc> <lastmod>2024-12-14T10:02:13+00:00</lastmod> </url> <url> <loc>https://ziumper.github.io/projects/ludo-just-chill-out/</loc> <lastmod>2024-12-14T10:02:13+00:00</lastmod> </url> <url> <loc>https://ziumper.github.io/projects/lzss/</loc> <lastmod>2024-12-14T10:02:13+00:00</lastmod> </url> <url> <loc>https://ziumper.github.io/projects/night-catcher/</loc> <lastmod>2024-12-14T10:02:13+00:00</lastmod> </url> <url> <loc>https://ziumper.github.io/projects/old-portfolio-project/</loc> <lastmod>2024-12-14T10:02:13+00:00</lastmod> </url> <url> <loc>https://ziumper.github.io/projects/online-store-template/</loc> <lastmod>2024-12-14T10:02:13+00:00</lastmod> </url> <url> <loc>https://ziumper.github.io/projects/polygangs/</loc> <lastmod>2024-12-14T10:02:13+00:00</lastmod> </url> <url> <loc>https://ziumper.github.io/projects/steve-the-hamster/</loc> <lastmod>2024-12-14T10:02:13+00:00</lastmod> </url> <url> <loc>https://ziumper.github.io/projects/todo-app/</loc> <lastmod>2024-12-14T10:02:13+00:00</lastmod> </url> <url> <loc>https://ziumper.github.io/projects/web-cloud-system/</loc> <lastmod>2024-12-14T10:02:13+00:00</lastmod> </url> <url> <loc>https://ziumper.github.io/</loc> </url> <url> <loc>https://ziumper.github.io/cv/</loc> </url> <url> <loc>https://ziumper.github.io/news/</loc> </url> <url> <loc>https://ziumper.github.io/projects/</loc> </url> <url> <loc>https://ziumper.github.io/repositories/</loc> </url> <url> <loc>https://ziumper.github.io/blog/tag/git/</loc> </url> <url> <loc>https://ziumper.github.io/blog/tag/gitextensions/</loc> </url> <url> <loc>https://ziumper.github.io/blog/tag/git-lfs/</loc> </url> <url> <loc>https://ziumper.github.io/blog/tag/git-extensions/</loc> </url> <url> <loc>https://ziumper.github.io/blog/tag/unity/</loc> </url> <url> <loc>https://ziumper.github.io/blog/tag/unreal-engine/</loc> </url> <url> <loc>https://ziumper.github.io/blog/tag/game-dev/</loc> </url> <url> <loc>https://ziumper.github.io/blog/tag/software-development/</loc> </url> <url> <loc>https://ziumper.github.io/blog/category/tutorials/</loc> </url> <url> <loc>https://ziumper.github.io/blog/category/self-development/</loc> </url> <url> <loc>https://ziumper.github.io/blog/2022/</loc> </url> <url> <loc>https://ziumper.github.io/blog/2023/</loc> </url> <url> <loc>https://ziumper.github.io/blog/2024/</loc> </url> <url> <loc>https://ziumper.github.io/blog/</loc> </url> </urlset>
\ No newline at end of file
diff --git a/sitemap.xml b/sitemap.xml
index 9484f04..5a7271a 100644
--- a/sitemap.xml
+++ b/sitemap.xml
@@ -1 +1 @@
-<?xml version="1.0" encoding="UTF-8"?> <urlset xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.sitemaps.org/schemas/sitemap/0.9 http://www.sitemaps.org/schemas/sitemap/0.9/sitemap.xsd" xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"> <url> <loc>https://ziumper.github.io/blog/2022/how-to-start-with-git/</loc> <lastmod>2022-07-17T16:40:16+00:00</lastmod> </url> <url> <loc>https://ziumper.github.io/blog/2022/how-to-solve-rebase-merge-conflicts-with-GitExtensions/</loc> <lastmod>2022-08-06T16:40:16+00:00</lastmod> </url> <url> <loc>https://ziumper.github.io/blog/2023/how-to-store-big-binary-files-with-git-lfs/</loc> <lastmod>2023-10-23T16:40:16+00:00</lastmod> </url> <url> <loc>https://ziumper.github.io/blog/2024/developing-programming-skills-with-making-games/</loc> <lastmod>2024-04-15T07:40:16+00:00</lastmod> </url> <url> <loc>https://ziumper.github.io/projects/agents-app/</loc> <lastmod>2024-12-05T12:09:50+00:00</lastmod> </url> <url> <loc>https://ziumper.github.io/projects/axion/</loc> <lastmod>2024-12-05T12:09:50+00:00</lastmod> </url> <url> <loc>https://ziumper.github.io/projects/blog-manager/</loc> <lastmod>2024-12-05T12:09:50+00:00</lastmod> </url> <url> <loc>https://ziumper.github.io/projects/board-heroes-battle/</loc> <lastmod>2024-12-05T12:09:50+00:00</lastmod> </url> <url> <loc>https://ziumper.github.io/projects/boesner/</loc> <lastmod>2024-12-05T12:09:50+00:00</lastmod> </url> <url> <loc>https://ziumper.github.io/projects/connect-the-pops-clone/</loc> <lastmod>2024-12-05T12:09:50+00:00</lastmod> </url> <url> <loc>https://ziumper.github.io/projects/crafter/</loc> <lastmod>2024-12-05T12:09:50+00:00</lastmod> </url> <url> <loc>https://ziumper.github.io/projects/file-upload/</loc> <lastmod>2024-12-05T12:09:50+00:00</lastmod> </url> <url> <loc>https://ziumper.github.io/projects/garage-flipper/</loc> <lastmod>2024-12-05T12:09:50+00:00</lastmod> </url> <url> <loc>https://ziumper.github.io/projects/leguano/</loc> <lastmod>2024-12-05T12:09:50+00:00</lastmod> </url> <url> <loc>https://ziumper.github.io/projects/ludo-just-chill-out/</loc> <lastmod>2024-12-05T12:09:50+00:00</lastmod> </url> <url> <loc>https://ziumper.github.io/projects/lzss/</loc> <lastmod>2024-12-05T12:09:50+00:00</lastmod> </url> <url> <loc>https://ziumper.github.io/projects/night-catcher/</loc> <lastmod>2024-12-05T12:09:50+00:00</lastmod> </url> <url> <loc>https://ziumper.github.io/projects/old-portfolio-project/</loc> <lastmod>2024-12-05T12:09:50+00:00</lastmod> </url> <url> <loc>https://ziumper.github.io/projects/online-store-template/</loc> <lastmod>2024-12-05T12:09:50+00:00</lastmod> </url> <url> <loc>https://ziumper.github.io/projects/polygangs/</loc> <lastmod>2024-12-05T12:09:50+00:00</lastmod> </url> <url> <loc>https://ziumper.github.io/projects/steve-the-hamster/</loc> <lastmod>2024-12-05T12:09:50+00:00</lastmod> </url> <url> <loc>https://ziumper.github.io/projects/todo-app/</loc> <lastmod>2024-12-05T12:09:50+00:00</lastmod> </url> <url> <loc>https://ziumper.github.io/projects/web-cloud-system/</loc> <lastmod>2024-12-05T12:09:50+00:00</lastmod> </url> <url> <loc>https://ziumper.github.io/</loc> </url> <url> <loc>https://ziumper.github.io/cv/</loc> </url> <url> <loc>https://ziumper.github.io/news/</loc> </url> <url> <loc>https://ziumper.github.io/projects/</loc> </url> <url> <loc>https://ziumper.github.io/repositories/</loc> </url> <url> <loc>https://ziumper.github.io/blog/tag/git/</loc> </url> <url> <loc>https://ziumper.github.io/blog/tag/gitextensions/</loc> </url> <url> <loc>https://ziumper.github.io/blog/tag/git-lfs/</loc> </url> <url> <loc>https://ziumper.github.io/blog/tag/git-extensions/</loc> </url> <url> <loc>https://ziumper.github.io/blog/tag/unity/</loc> </url> <url> <loc>https://ziumper.github.io/blog/tag/unreal-engine/</loc> </url> <url> <loc>https://ziumper.github.io/blog/tag/game-dev/</loc> </url> <url> <loc>https://ziumper.github.io/blog/tag/software-development/</loc> </url> <url> <loc>https://ziumper.github.io/blog/category/tutorials/</loc> </url> <url> <loc>https://ziumper.github.io/blog/category/self-development/</loc> </url> <url> <loc>https://ziumper.github.io/blog/2022/</loc> </url> <url> <loc>https://ziumper.github.io/blog/2023/</loc> </url> <url> <loc>https://ziumper.github.io/blog/2024/</loc> </url> <url> <loc>https://ziumper.github.io/blog/</loc> </url> <url> <loc>https://ziumper.github.io/archive/</loc> <lastmod>2024-12-05T12:09:25+00:00</lastmod> </url> <url> <loc>https://ziumper.github.io/archive/src/pages/templates/ave/</loc> <lastmod>2024-12-05T12:09:25+00:00</lastmod> </url> <url> <loc>https://ziumper.github.io/archive/templates/ave/</loc> <lastmod>2024-12-05T12:09:25+00:00</lastmod> </url> </urlset>
\ No newline at end of file
+<?xml version="1.0" encoding="UTF-8"?> <urlset xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.sitemaps.org/schemas/sitemap/0.9 http://www.sitemaps.org/schemas/sitemap/0.9/sitemap.xsd" xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"> <url> <loc>https://ziumper.github.io/blog/2022/how-to-start-with-git/</loc> <lastmod>2022-07-17T16:40:16+00:00</lastmod> </url> <url> <loc>https://ziumper.github.io/blog/2022/how-to-solve-rebase-merge-conflicts-with-GitExtensions/</loc> <lastmod>2022-08-06T16:40:16+00:00</lastmod> </url> <url> <loc>https://ziumper.github.io/blog/2023/how-to-store-big-binary-files-with-git-lfs/</loc> <lastmod>2023-10-23T16:40:16+00:00</lastmod> </url> <url> <loc>https://ziumper.github.io/blog/2024/developing-programming-skills-with-making-games/</loc> <lastmod>2024-04-15T07:40:16+00:00</lastmod> </url> <url> <loc>https://ziumper.github.io/projects/agents-app/</loc> <lastmod>2024-12-14T09:58:27+00:00</lastmod> </url> <url> <loc>https://ziumper.github.io/projects/axion/</loc> <lastmod>2024-12-14T09:58:27+00:00</lastmod> </url> <url> <loc>https://ziumper.github.io/projects/blog-manager/</loc> <lastmod>2024-12-14T09:58:27+00:00</lastmod> </url> <url> <loc>https://ziumper.github.io/projects/board-heroes-battle/</loc> <lastmod>2024-12-14T09:58:27+00:00</lastmod> </url> <url> <loc>https://ziumper.github.io/projects/boesner/</loc> <lastmod>2024-12-14T09:58:27+00:00</lastmod> </url> <url> <loc>https://ziumper.github.io/projects/connect-the-pops-clone/</loc> <lastmod>2024-12-14T09:58:27+00:00</lastmod> </url> <url> <loc>https://ziumper.github.io/projects/crafter/</loc> <lastmod>2024-12-14T09:58:27+00:00</lastmod> </url> <url> <loc>https://ziumper.github.io/projects/file-upload/</loc> <lastmod>2024-12-14T09:58:27+00:00</lastmod> </url> <url> <loc>https://ziumper.github.io/projects/garage-flipper/</loc> <lastmod>2024-12-14T09:58:27+00:00</lastmod> </url> <url> <loc>https://ziumper.github.io/projects/leguano/</loc> <lastmod>2024-12-14T09:58:27+00:00</lastmod> </url> <url> <loc>https://ziumper.github.io/projects/ludo-just-chill-out/</loc> <lastmod>2024-12-14T09:58:27+00:00</lastmod> </url> <url> <loc>https://ziumper.github.io/projects/lzss/</loc> <lastmod>2024-12-14T09:58:27+00:00</lastmod> </url> <url> <loc>https://ziumper.github.io/projects/night-catcher/</loc> <lastmod>2024-12-14T09:58:27+00:00</lastmod> </url> <url> <loc>https://ziumper.github.io/projects/old-portfolio-project/</loc> <lastmod>2024-12-14T09:58:27+00:00</lastmod> </url> <url> <loc>https://ziumper.github.io/projects/online-store-template/</loc> <lastmod>2024-12-14T09:58:27+00:00</lastmod> </url> <url> <loc>https://ziumper.github.io/projects/polygangs/</loc> <lastmod>2024-12-14T09:58:27+00:00</lastmod> </url> <url> <loc>https://ziumper.github.io/projects/steve-the-hamster/</loc> <lastmod>2024-12-14T09:58:27+00:00</lastmod> </url> <url> <loc>https://ziumper.github.io/projects/todo-app/</loc> <lastmod>2024-12-14T09:58:27+00:00</lastmod> </url> <url> <loc>https://ziumper.github.io/projects/web-cloud-system/</loc> <lastmod>2024-12-14T09:58:27+00:00</lastmod> </url> <url> <loc>https://ziumper.github.io/</loc> </url> <url> <loc>https://ziumper.github.io/cv/</loc> </url> <url> <loc>https://ziumper.github.io/news/</loc> </url> <url> <loc>https://ziumper.github.io/projects/</loc> </url> <url> <loc>https://ziumper.github.io/repositories/</loc> </url> <url> <loc>https://ziumper.github.io/blog/tag/git/</loc> </url> <url> <loc>https://ziumper.github.io/blog/tag/gitextensions/</loc> </url> <url> <loc>https://ziumper.github.io/blog/tag/git-lfs/</loc> </url> <url> <loc>https://ziumper.github.io/blog/tag/git-extensions/</loc> </url> <url> <loc>https://ziumper.github.io/blog/tag/unity/</loc> </url> <url> <loc>https://ziumper.github.io/blog/tag/unreal-engine/</loc> </url> <url> <loc>https://ziumper.github.io/blog/tag/game-dev/</loc> </url> <url> <loc>https://ziumper.github.io/blog/tag/software-development/</loc> </url> <url> <loc>https://ziumper.github.io/blog/category/tutorials/</loc> </url> <url> <loc>https://ziumper.github.io/blog/category/self-development/</loc> </url> <url> <loc>https://ziumper.github.io/blog/2022/</loc> </url> <url> <loc>https://ziumper.github.io/blog/2023/</loc> </url> <url> <loc>https://ziumper.github.io/blog/2024/</loc> </url> <url> <loc>https://ziumper.github.io/blog/</loc> </url> <url> <loc>https://ziumper.github.io/archive/</loc> <lastmod>2024-12-14T09:57:48+00:00</lastmod> </url> <url> <loc>https://ziumper.github.io/archive/src/pages/templates/ave/</loc> <lastmod>2024-12-14T09:57:48+00:00</lastmod> </url> <url> <loc>https://ziumper.github.io/archive/templates/ave/</loc> <lastmod>2024-12-14T09:57:48+00:00</lastmod> </url> </urlset>
\ No newline at end of file