Some initial content

This commit is contained in:
Diogo Peralta Cordeiro 2021-03-23 13:36:33 +00:00
parent 2a9eab0206
commit 88c194c013
1382 changed files with 157806 additions and 0 deletions

65
index.html Normal file
View File

@ -0,0 +1,65 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>GNU social</title>
</head>
<body>
<header>
<h1>GNU social</h1>
<aside>The free/libre software social networking platform.</aside>
</header>
<h2>The project</h2>
<p>True to the Unix-philosophy of small programs to do a small job, GNU
social is a social communication software used
in <a href="https://blog.diogo.site/what-is-the-fediverse">federated social networks</a>.
</p>
<p>It is widely supported and has a large userbase. It is already used by
the <a href="https://www.fsf.org/">Free Software Foundation</a>.
As the GNU operating system, is built around privacy and trustworthy
technology based on free software(free as in freedom, specifically
to run, study, change and distribute yoursoftware as you please).
GNU social is technology for communities to runand host their own social media.</p>
<p>Currently, were working on adding features to easily and flexibly
create groups and improve tags, allowing easier content filtering and
connecting with anyone that shares your interests, all under your own
control and without infringing your privacy.</p>
<h2>Features</h2>
<ul>
<li><strong>Versatile.</strong> GNU social supports both single-user and community modes and can be used in
an intranet environment or as part of the wider Free Network.</li>
<li><strong>Stable.</strong> GNU social has been used in production environments for over ten years.</li>
<li><strong>Plug and Play.</strong> Because GNU social is minimal and libre, it runs virtually anywhere you
can run a common piece of web software, such as WordPress or Drupal. JavaScript is optional.</li>
<li><strong>Privacy focused.</strong> GNU social is part of the GNU project, it's 100% free software, with
no malicious features or spyware.</li>
</ul>
<h2>FAQ</h2>
<h3>Where can I join GNU social?</h3>
<p>There are many kinds of GNU social server instances online right now!</p>
<p><a href="try/">Click here</a> to see a list of popular GNU social sites you can join!</p>
<strong>Disclaimer: </strong><i>Please note that the GNU social development team is not responsible for
the operation or content of sites that run its software.</i>
<h3>Who makes GNU social?</h3>
<p>The current development team is lead by <a href="https://www.diogo.site/">Diogo Cordeiro</a>. A
list containing the current devs and other contributors is
available <a href="https://code.undefinedhackers.net/GNUsocial/gnu-social/src/branch/experimental/CREDITS.md">here</a>.
The founders of the GNU social project were <a href="https://mat.tl/">Matt Lee</a>,
<a href="https://en.wikipedia.org/wiki/Evan_Prodromou">Evan Prodromou</a> and
<a href="http://mmn-o.se">Mikael Nordfeldth</a>.
</p>
<h2>Contact</h2>
<p>Discuss the project on our IRC channel <a
href="https://webchat.freenode.net/?channels=#social">#social</a> on irc.freenode.net</p>
<p>Contribute code, report bugs and request features on our <a
href="https://notabug.org/diogo/gnu-social">repository</a>.
</p>
<p>If you are a student you can also apply to <a
href="/soc">GNU social's Summer of Code</a>.
</p>
</body>
</html>

Binary file not shown.

After

Width:  |  Height:  |  Size: 33 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 62 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 32 KiB

331
soc/2018/index.html Normal file
View File

@ -0,0 +1,331 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
<title>ActivityPub plugin - Tech Report - GNU social Summer of Code 2018</title>
<link rel="icon" href="../../favicon.png">
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="stylesheet" href="https://www.diogo.site/projects/excalibur_template/assets/css/main.css">
<style>
@page {
size: A4 portraint;
}
@page :blank {
@top-center { content: "This page is intentionally left blank." }
}
h1 {
page-break-before: always;
}
h1, h2, h3, h4, h5 {
page-break-after: avoid;
}
table, figure {
page-break-inside: avoid;
}
@page:right{
@bottom-right {
content: "Page " counter(page) " of " counter(pages);
}
}
</style>
</head>
<body>
<header id="header">
<nav id="side-menu">
<label for="show-menu" id="menu-button">Menu</label>
<input id="show-menu" role="button" type="checkbox">
<ul id="menu">
<li><a href="../"><strong>&larr; GS GSoC</strong></a></li>
<li><a href="#about">About</a></li>
<li><a href="#activitypub">ActivityPub</a></li>
<li><a href="#plugin-workflow">Plugin Workflow</a></li>
<li><a href="#inboxes">Inboxes</a></li>
<li><a href="#collections">Collections</a></li>
<li><a href="#acknowledgements">Acknowledgements</a></li>
<li><a href="#testimonials">Testimonials</a></li>
</ul>
</nav>
<h1>ActivityPub plugin for GNU social</h1>
<p>Developed by <strong><a href="https://www.diogo.site/">Diogo Cordeiro</a></strong> during <strong><a href="https://summerofcode.withgoogle.com/archive/2018/projects/5289876471676928/">Google Summer of Code 2018</a></strong></p>
<p>Mentored by <a href="https://github.com/dansup">Daniel Supernault</a> and <a href="https://mmn-o.se/">Mikael Nordfeldth</a></p>
</header>
<article id="about">
<h1><a href="#about">About the project and this document</a></h1>
<h2>What is this document?</h2>
<p>This is a technical Google Summer of Code Project Report describing
briefly what I did from April 23 to August 6.
</p>
<p>The whole code I wrote during this period is available
<a href="https://notabug.org/diogo/gnu-social-activitypub-plugin/src/6fbf37b7fee8c73271a47089a4f4a70304cf15a2">here</a>.
The API documentation is available
<a href="https://notabug.org/diogo/gnu-social-activitypub-plugin-doc/src/7188c0039793969417b4be912615125658f69377">here</a>.
</p>
<p>This document helps understanding what was done in a simple and informal way,
highlighting the most relevant parts, why some decisions were made and what
I've learned with it.
</p>
<p>The following document is intended to be reasonably self contained
and capable of quickstarting anyone in the world of ActivityPub implementation,
yet not replacing the official standard specification.
</p>
<p>From April 23 to May 14 I had to familiarize myself with the
Activity Pub standard and GNU social's plugins/events API and community.
</p>
<h2>What is GNU social?</h2>
<p>GNU social is a social communication software used in federated
social networks.
</p>
<h2>ActivityPub?</h2>
<p>In order to achieve said decentralization, a variety of standards on
how communication between different pieces of software in a federated
context should be done were created, such as OStatus. <a href="https://www.w3.org/TR/activitypub/">ActivityPub</a>, however,
is the newest and covers parts left out of OStatus's specification, namely
app/client development.
</p>
<h3>Benefits</h3>
<ul>
<li>The tendency is that newer software will focus in the
implementation of the ActivityPub Protocol (as it is newer
and considered to be simpler) instead of OStatus, given
that, it is important for GNU social to support it in order to stay updated
and relevant in an even larger <a href="https://en.wikipedia.org/wiki/Fediverse">fediverse</a>;
</li>
<li>It will simplify app/client development which is not covered by the
OStatus's specification and is becoming more and more relevant,
with the increase of smartphone users.
</li>
</ul>
<h2>Why a plugin?</h2>
<h3 id="unix-tools-design-philosophy">Unix tools design philosophy</h3>
<p>GNU social is true to the Unix-philosophy of small programs to do a
small job.
</p>
<blockquote>
<ul>
<li>Compact and concise input syntax, making full use of ASCII repertoire to minimise keystrokes</li>
<li>Output format should be simple and easily usable as input for other programs</li>
<li>Programs can be joined together in “pipes” and “scripts” to solve more complex problems</li>
<li>Each tool originally performed a simple single function</li>
<li>Prefer reusing existing tools with minor extension to rewriting a new tool from scratch</li>
<li>The main user-interface software (“shell”) is a normal replaceable program without special privileges</li>
<li>Support for automating routine tasks</li>
</ul>
<footer>- Brian W. Kernighan, Rob Pike: The Unix Programming Environment. Prentice-Hall, 1984.</footer>
</blockquote>
<p>As so the project aims at building a plugin that will
implement the ActivityPub Protocol in GNU social.
</p>
</article>
<article id="activitypub">
<h1><a href="#activitypub">So how does ActivityPub work?</a></h1>
<p>The ActivityPub protocol is a decentralized social networking
protocol based upon the <a href="https://www.w3.org/TR/activitystreams-core/">ActivityStreams</a> 2.0 data format.
It provides a client to server API for creating, updating and deleting
content, as well as a federated server to server API for delivering
notifications and content.
</p>
<img src="https://www.w3.org/TR/activitypub/illustration/tutorial-2.png">
<blockquote>
<p><strong>Note:</strong> You are advised to read (at least) the <a href="https://www.w3.org/TR/activitypub/#Overview">standard
overview</a> before continuing.
</p>
</blockquote>
<h2>Actor</h2>
<p>Actor is the user doing a change in the fediverse and are identified by an URI.
In GNU social they have the following format:
<code>https://myinstance.net/user/{id}</code>. Thus allowing users to change their
usernames (or nicknames).
</p>
<h2 id="objects">Objects</h2>
<p>Objects are our building blocks for the bigger concept of Activity.
The plugin has the following objects:
</p>
<ul>
<li>Actors are defined by the <a href="https://notabug.org/diogo/gnu-social-activitypub-plugin-doc/src/7188c0039793969417b4be912615125658f69377/objects_and_activities.md#profile">profile object</a> which can be found <a href="https://notabug.org/diogo/gnu-social-activitypub-plugin/src/6fbf37b7fee8c73271a47089a4f4a70304cf15a2/classes/Activitypub_profile.php">here</a>.</li>
<li><a href="https://notabug.org/diogo/gnu-social-activitypub-plugin-doc/src/7188c0039793969417b4be912615125658f69377/objects_and_activities.md#Error">Error</a> which can be found <a href="https://notabug.org/diogo/gnu-social-activitypub-plugin/src/6fbf37b7fee8c73271a47089a4f4a70304cf15a2/classes/Activitypub_error.php">here</a>.</li>
<li><a href="https://notabug.org/diogo/gnu-social-activitypub-plugin-doc/src/7188c0039793969417b4be912615125658f69377/objects_and_activities.md#Tag">Tag</a> which can be found <a href="https://notabug.org/diogo/gnu-social-activitypub-plugin/src/6fbf37b7fee8c73271a47089a4f4a70304cf15a2/classes/Activitypub_tag.php">here</a>.</li>
<li><a href="https://notabug.org/diogo/gnu-social-activitypub-plugin-doc/src/7188c0039793969417b4be912615125658f69377/objects_and_activities.md#Mention">Mention Tag</a> which can be found <a href="https://notabug.org/diogo/gnu-social-activitypub-plugin/src/6fbf37b7fee8c73271a47089a4f4a70304cf15a2/classes/Activitypub_mention_tag.php">here</a>.</li>
<li><a href="https://notabug.org/diogo/gnu-social-activitypub-plugin-doc/src/7188c0039793969417b4be912615125658f69377/objects_and_activities.md#Notice">Notice</a> which can be found <a href="https://notabug.org/diogo/gnu-social-activitypub-plugin/src/6fbf37b7fee8c73271a47089a4f4a70304cf15a2/classes/Activitypub_notice.php">here</a>.</li>
<li><a href="https://notabug.org/diogo/gnu-social-activitypub-plugin-doc/src/7188c0039793969417b4be912615125658f69377/objects_and_activities.md#Attachment">Attachment</a> which can be found <a href="https://notabug.org/diogo/gnu-social-activitypub-plugin/src/6fbf37b7fee8c73271a47089a4f4a70304cf15a2/classes/Activitypub_attachment.php">here</a>.</li>
</ul>
<blockquote>
<p><strong>Note:</strong> Tags, Attachment and Image are ("minor")
objects and, usually, wrapped by ("major") objects.
</p>
</blockquote>
<h2>Activities</h2>
<p>Wrappers allow to give additional information on a given object.
The implemented wrappers are the following:
</p>
<ul>
<li><a href="https://notabug.org/diogo/gnu-social-activitypub-plugin-doc/src/7188c0039793969417b4be912615125658f69377/objects_and_activities.md#Create">Create</a> which can be found <a href="https://notabug.org/diogo/gnu-social-activitypub-plugin/src/6fbf37b7fee8c73271a47089a4f4a70304cf15a2/classes/Activitypub_create.php">here</a>.</li>
<li><a href="https://notabug.org/diogo/gnu-social-activitypub-plugin-doc/src/7188c0039793969417b4be912615125658f69377/objects_and_activities.md#Announce">Announce</a> which can be found <a href="https://notabug.org/diogo/gnu-social-activitypub-plugin/src/6fbf37b7fee8c73271a47089a4f4a70304cf15a2/classes/Activitypub_announce.php">here</a>.</li>
<li><a href="https://notabug.org/diogo/gnu-social-activitypub-plugin-doc/src/7188c0039793969417b4be912615125658f69377/objects_and_activities.md#Delete">Delete</a> which can be found <a href="https://notabug.org/diogo/gnu-social-activitypub-plugin/src/6fbf37b7fee8c73271a47089a4f4a70304cf15a2/classes/Activitypub_delete.php">here</a>.</li>
<li><a href="https://notabug.org/diogo/gnu-social-activitypub-plugin-doc/src/7188c0039793969417b4be912615125658f69377/objects_and_activities.md#Undo">Undo</a> which can be found <a href="https://notabug.org/diogo/gnu-social-activitypub-plugin/src/6fbf37b7fee8c73271a47089a4f4a70304cf15a2/classes/Activitypub_undo.php">here</a>.</li>
<li><a href="https://notabug.org/diogo/gnu-social-activitypub-plugin-doc/src/7188c0039793969417b4be912615125658f69377/objects_and_activities.md#Accept">Accept</a> which can be found <a href="https://notabug.org/diogo/gnu-social-activitypub-plugin/src/6fbf37b7fee8c73271a47089a4f4a70304cf15a2/classes/Activitypub_accept.php">here</a>.</li>
<li><a href="https://notabug.org/diogo/gnu-social-activitypub-plugin-doc/src/7188c0039793969417b4be912615125658f69377/objects_and_activities.md#Reject">Reject</a> which can be found <a href="https://notabug.org/diogo/gnu-social-activitypub-plugin/src/6fbf37b7fee8c73271a47089a4f4a70304cf15a2/classes/Activitypub_reject.php">here</a>.</li>
<li><a href="https://notabug.org/diogo/gnu-social-activitypub-plugin-doc/src/7188c0039793969417b4be912615125658f69377/objects_and_activities.md#Like">Like</a> which can be found <a href="https://notabug.org/diogo/gnu-social-activitypub-plugin/src/6fbf37b7fee8c73271a47089a4f4a70304cf15a2/classes/Activitypub_like.php">here</a>.</li>
<li><a href="https://notabug.org/diogo/gnu-social-activitypub-plugin-doc/src/7188c0039793969417b4be912615125658f69377/objects_and_activities.md#Follow">Follow</a> which can be found <a href="https://notabug.org/diogo/gnu-social-activitypub-plugin/src/6fbf37b7fee8c73271a47089a4f4a70304cf15a2/classes/Activitypub_follow.php">here</a>.</li>
</ul>
<p>By wrapping an <a href="#objects">object</a> with one of those we are
able to perform an action in name of a given Actor.
</p>
</article>
<article id="plugin-workflow">
<h1><a href="#plugin-workflow">And how does the plugin work?</a></h1>
<p>For the plugin I decided to create two key components.</p>
<h2 id="explorer">The Explorer</h2>
<p>Defined in this <a href="https://notabug.org/diogo/gnu-social-activitypub-plugin/src/6fbf37b7fee8c73271a47089a4f4a70304cf15a2/utils/explorer.php">file</a> it is responsable for grabbing remote users and creating an identity for those in the local instance. It is higly related with <a href="https://notabug.org/diogo/gnu-social-activitypub-plugin/src/6fbf37b7fee8c73271a47089a4f4a70304cf15a2/classes/Activitypub_profile.php">Activitypub_profile.php</a>.</p>
<h2 id="postman">The Postman</h2>
<p>This guy does the magic of <code>publishing</code> the <code>activities</code>
(thus the name ActivityPub!) to remote instances, he kinda is the
responsable for the federation provided by this plugin. Its code is <a href="https://notabug.org/diogo/gnu-social-activitypub-plugin/src/6fbf37b7fee8c73271a47089a4f4a70304cf15a2/utils/postman.php">here</a>.
</p>
<h3>Becoming familiar with GNU social's events</h3>
<p>We just know what and when to deliver something thanks to <a href="https://git.gnu.io/gnu/gnu-social/blob/nightly/EVENTS.txt">GNU social's events</a>.</p>
<h4>Events the plugin is handling</h4>
<div class="tasks">
<h5>Discovery Events</h5>
<ul>
<li>Find remote profiles from mentions in texts (<em>onEndFindMentions)</em></li>
<li>Allow to reference a remote profile (<em>onStartCommandGetProfile)</em></li>
<li>Allow to reference a remote profile (<em>onStartGetProfileUri)</em></li>
</ul>
<h5>Delivery Events</h5>
<ul>
<li>Notify remote instance of subscription (<em>onEndSubscribe</em>)</li>
<li>Notify remote instance when a subscription is canceled (<em>onEndUnsubscribe</em>)</li>
<li>Notify remote instances when a notice is liked (<em>onEndFavorNotice</em>)</li>
<li>Notify remote instances when a notice like is reverted (<em>onEndDisfavorNotice</em>)</li>
<li>Notify remote instances when a notice is deleted (<em>onEndDeleteOwnNotice</em>)</li>
<li>Notify remote instances when a notice is created (<em>onStartNoticeDistribute</em>)</li>
</ul>
</div>
<p>These are not the only events this plugin is listening to, but are
the most relevant. All these events hooks can be found <a href="https://notabug.org/diogo/gnu-social-activitypub-plugin/src/6fbf37b7fee8c73271a47089a4f4a70304cf15a2/ActivityPubPlugin.php">here</a>.
</p>
</article>
<article id="inboxes">
<h1><a href="#inboxes">Hold on, if you have a Postman then there sure is an inbox, right?</a></h1>
<p>Two actually! :)</p>
<p>Fediverse is similar to the real world in some aspects. And one of those
is that people, sometimes, share the same "building". A list of some
public GNU social instances is available <a href="https://gnu.io/social/try/">here</a>.
</p>
<p>Well, if two people live in the same place then our <a href="#postman">Postman</a> doesn't have to "travel" twice! Thus
the concept of <code><a href="https://www.w3.org/TR/activitypub/#shared-inbox-delivery">shared inbox</a></code>.
</p>
<p>Lets start with the <a href="https://www.w3.org/TR/activitypub/#inbox">inbox</a>. An
inbox is where we, I mean, the <a href="#postman">Postman</a> publishes
our Activity.
</p>
<p>By now you should have already realized that Activities are just
verbs wrapping objects thus basically forming a phrase:
<code>Actor</code> <code>verb</code> <code>Object</code> <code>to Attention Actor(s)</code>.
</p>
<p>Well, for each <code>Attention actor</code> we deliver the same
<code>Actor</code> <code>verb</code> <code>Object</code>.
</p>
<p>Since it is the same message and frequently for people residing
in the same server we can obviously reduce a lot of traffic and
processing power here.
</p>
<p>The <a href="#postman">Explorer</a> hands the <a href="#postman">Postman</a> the sharedInbox address always that
it is possible.
</p>
<ul>
<li>
<p>Inbox Handler code is <a href="https://notabug.org/diogo/gnu-social-activitypub-plugin/src/6fbf37b7fee8c73271a47089a4f4a70304cf15a2/utils/inbox_handler.php">here</a>.</p>
</li>
</ul>
</article>
<article id="collections">
<h1><a href="#collections">Our plugin also is a collector</a></h1>
<p>The following collections have been implemented:</p>
<div class="tasks">
<ul>
<li><a href="https://notabug.org/diogo/gnu-social-activitypub-plugin/src/6fbf37b7fee8c73271a47089a4f4a70304cf15a2/actions/apactorfollowers.php">Followers</a></li>
<li><a href="https://notabug.org/diogo/gnu-social-activitypub-plugin/src/6fbf37b7fee8c73271a47089a4f4a70304cf15a2/actions/apactorfollowing.php">Following</a></li>
<li><a href="https://notabug.org/diogo/gnu-social-activitypub-plugin/src/6fbf37b7fee8c73271a47089a4f4a70304cf15a2/actions/apactorliked.php">Liked</a></li>
<li><a href="https://notabug.org/diogo/gnu-social-activitypub-plugin/src/6fbf37b7fee8c73271a47089a4f4a70304cf15a2/actions/apactoroutbox.php">Outbox</a></li>
</ul>
</div>
<p>Collections are lists. And lists are very important in the world of
fediverse both for <a href="https://www.w3.org/TR/activitypub/#server-to-server-interactions">Server
to Server</a> and <a href="https://www.w3.org/TR/activitypub/#client-to-server-interactions">Client
to Server</a>.
</p>
</article>
<article id="todo">
<h1><a href="#todo">What is left to do?</a></h1>
<p>This plugin fulfills and even exceeds what I've originally proposed to
do during this summer (hooray!). But there is still room for further development
and improvement!
</p>
<h2>Todo</h2>
<ul>
<li>Finish implementing Client to Server</li>
<li>Implement a Circuit Breaker</li>
<li>Redis caching of collections</li>
<li>Queues</li>
</ul>
</article>
<article id="left-out">
<h1><a href="#left-out">So, that was it?</a></h1>
<p>Not really, this document doesn't describe the implementation of
<a href="https://notabug.org/diogo/gnu-social-activitypub-plugin/src/6fbf37b7fee8c73271a47089a4f4a70304cf15a2/classes/Activitypub_rsa.php">
HTTP Signatures</a>, the internal representation of ActivityPub Actors,
nor the details of Activity Streams or even the particularities of integrating
this in GNU social (I'm looking at you OStatus plugin). As stated in the
beginning of this document, the whole code and documentation is available
above, this was just meant to make the reading easier.
</p>
<h2>I'm interested in implementing ActivityPub on my program and reading
this really helped me! Is there something else that I should know of that
wasn't mentioned in the article?
</h2>
<p>Be sure to know <a href="https://www.restapitutorial.com/httpstatuscodes.html">HTTP Status Codes</a>
and to start soon with the <a href="https://en.wikipedia.org/wiki/Test-driven_development">Test-driven development</a>.
</p>
<p>And, obviously, follow rigorously the ActivityPub specification!</p>
<p>If you need help you can <a href="https://www.diogo.site/#contact">contact me</a>
or Daniel Supernault directly or, even better, join the
<a href="irc://irc.w3.org:6665/social">W3C social IRC channel (#social@irc.w3.org)</a>,
you will definitely find us both there! :)
</p>
<article id="acknowledgements">
<h1><a href="#acknowledgements">Final Words</a></h1>
<p>GSoC was a wonderful experience for me. I now feel more comfortable
with the GNU socials codebase. I learned a lot of useful stuff like
ActivityPub, ActivityStreams, HTTP Signatures, PSR and Redis as well as
software engineering concepts like Circuit Breakers. I've also learned
more about Git and how libre and open source software development is
done and organized.
</p>
<p>I will try my best to regularly contribute to GNU social and other
projects.
</p>
<p>Thanks to Daniel Supernault and Mikael Nordfeldth for such a
wonderful experience and the knowledge.
</p>
</article>
<article id="testimonials">
<h1><a href="https://www.diogo.site/testimonials.html">Testimonials</a></h1>
<blockquote>
<p style="margin:0">You're active, persistent and productive. Keep it up and we'll all have a great summer of code!</p>
<footer>- Mikael Nordfeldth, GNU social Maintainer (2018) on my first GSoC evaluation</footer>
</blockquote>
<a href="https://mastodon.social/@dansup/100331648394320885"><img src="images/testimonial1.png"></a>
<a href="https://mastodon.social/@dansup/100353565526207146"><img src="images/testimonial2.png"></a>
<a href="https://mastodon.social/@dansup/100416797627457542"><img src="images/testimonial3.png"></a>
</article>
</article>
</body>
</html>

Binary file not shown.

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 102 KiB

248
soc/2019/ideas.php Normal file
View File

@ -0,0 +1,248 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
<title>Google Summer of Code 2019 Ideas | GNU social</title>
<link rel="icon" href="../../favicon.png">
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="stylesheet" href="https://hackersatporto.com/assets/css/main.css">
<style>
video {
width: 100%;
height: auto;
}
body {
/*max-width: 81em;*/
max-width: 52em;
/*background: #fefefe;*/
}
/* Youtube video old
.video-container {
position: relative;
padding-bottom: 56.25%;
padding-top: 30px; height: 0; overflow: hidden;
}
.video-container iframe,
.video-container object,
.video-container embed {
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
}
/* Youtube video
.videoWrapper {
position: relative;
width: 100%;
height: 0;
background-color: #000;
}
.videoWrapper169 {
padding-top: 56%;
}
.videoIframe {
position: absolute;
top: 0;
right: 0;
bottom: 0;
left: 0;
width: 100%;
height: 100%;
background-color: transparent;
}
.videoPoster {
position: absolute;
top: 0;
right: 0;
left: 0;
width: 100%;
height: 100%;
margin: 0;
padding: 0;
cursor: pointer;
border: 0;
outline: none;
background-position: 50% 50%;
background-size: 100% 100%;
background-size: cover;
text-indent: -999em;
overflow: hidden;
opacity: 1;
-webkit-transition: opacity 800ms, height 0s;
-moz-transition: opacity 800ms, height 0s;
transition: opacity 800ms, height 0s;
-webkit-transition-delay: 0s, 0s;
-moz-transition-delay: 0s, 0s;
transition-delay: 0s, 0s;
}
.videoPoster:before {
content: '';
position: absolute;
top: 50%;
left: 50%;
width: 80px;
height: 80px;
margin: -40px 0 0 -40px;
border: 5px solid #fff;
border-radius: 100%;
-webkit-transition: border-color 300ms;
-moz-transition: border-color 300ms;
transition: border-color 300ms;
}
.videoPoster:after {
content: '';
position: absolute;
top: 50%;
left: 50%;
width: 0;
height: 0;
margin: -20px 0 0 -10px;
border-left: 40px solid #fff;
border-top: 25px solid transparent;
border-bottom: 25px solid transparent;
-webkit-transition: border-color 300ms;
-moz-transition: border-color 300ms;
transition: border-color 300ms;
}
.videoPoster:hover:before, .videoPoster:focus:before {
border-color: #f00;
}
.videoPoster:hover:after, .videoPoster:focus:after {
border-left-color: #f00;
}
.videoWrapperActive .videoPoster {
opacity: 0;
height: 0;
-webkit-transition-delay: 0s, 800ms;
-moz-transition-delay: 0s, 800ms;
transition-delay: 0s, 800ms;
}*/
</style>
</head>
<body>
<header id="header">
<nav id="side-menu">
<label for="show-menu" id="menu-button">Menu</label>
<input id="show-menu" role="button" type="checkbox">
<ul id="menu">
<li><a href="../"><strong>&larr; GS GSoC</strong></a></li>
<li><a href="#about">About</a></li>
<li><a href="#todo">Ideas</a></li>
<li><a href="#apply">Apply</a></li>
</ul>
</nav>
<h1>GNU social Summer of Code 2019 - WARNING: THIS IS AN ARCHIVE OF OUR 2019 IDEAS PAGE</h1>
<strong>For the latest ideas page, <a href="https://www.diogo.site/projects/GNU-social/soc/current/">click here</a>.</strong>
<p>Organized by <strong><a href="https://www.diogo.site/">Diogo Cordeiro</a></strong></p>
<p>Mentors: <a href="https://github.com/dansup">Daniel Supernault</a>, <a href="https://www.diogo.site/">Diogo Cordeiro</a> and <a href="https://mmn-o.se/">Mikael Nordfeldth</a></p>
</header>
<article id="about">
<?php
$video_data = json_decode(file_get_contents("https://you-link.herokuapp.com/?url=https://www.youtube.com/watch?v=z_3dsP_FCAM"));
?>
<h2>Ready?</h2>
<!-- HTML video -->
<video width="720" controls class="image" style="margin-left: auto; margin-right: auto; display: block" poster="../../images/youtube-poster-gs-on-gsoc.png">
<source src="<?php echo $video_data[1]->url; ?>" type="video/mp4">
<source src="../../videos/gs-on-gsoc.webm" type="video/webm">
</video>
<!-- Youtube video
<div onclick="this.nextElementSibling.style.display='block'; this.style.display='none'">
<img src="../../images/youtube-poster-gs-on-gsoc.png" style="cursor:pointer" />
</div>
<div style="display:none">
<div class="video-container"><iframe width="853" height="480" src="https://www.youtube-nocookie.com/embed/z_3dsP_FCAM?modestbranding=1&rel=0" frameborder="0" allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe></div>
</div>
<div class="videoWrapper videoWrapper169 js-videoWrapper">
<!-- YouTube iframe. -->
<!-- note the iframe src is empty by default, the url is in the data-src="" argument -->
<!-- also note the arguments on the url, to autoplay video, remove youtube adverts/dodgy links to other videos
<iframe class="videoIframe js-videoIframe" src="" allowtransparency="true" allowfullscreen="" data-src="https://www.youtube-nocookie.com/embed/z_3dsP_FCAM?autoplay=1&amp; modestbranding=1&amp;rel=0" frameborder="0"></iframe>
<!-- the poster frame - in the form of a button to make it keyboard accessible
<button class="videoPoster js-videoPoster" style="background-image:url(../../images/small-poster-gs-on-gsoc.png);">Play video</button>
</div>
<script src="//cdnjs.cloudflare.com/ajax/libs/jquery/2.1.3/jquery.min.js"></script>
<script>
// poster frame click event
$(document).on('click', '.js-videoPoster', function (ev) {
ev.preventDefault();
var $poster = $(this);
var $wrapper = $poster.closest('.js-videoWrapper');
videoPlay($wrapper);
});
// play the targeted video (and hide the poster frame)
function videoPlay($wrapper) {
var $iframe = $wrapper.find('.js-videoIframe');
var src = $iframe.data('src');
// hide poster
$wrapper.addClass('videoWrapperActive');
// add iframe src in, starting the video
$iframe.attr('src', src);
}
</script>-->
<br>
<p>GNU social is a social communication software used in <a href="https://blog.diogo.site/posts/what-is-the-fediverse">federated social networks</a>. It is widely supported and has a large userbase. It is already used by the Free Software Foundation, and Richard Stallman himself.</p>
<p>If you would like to know how is it like to be a GSoC student at GNU social, <a href="https://blog.diogo.site/posts/gsoc-2018">read this blog post</a>!</p>
<h3>What would be expected from me?</h3>
<dl>
<dt><strong>Reliability Engineering</strong></dt>
<dd>Fix bugs of current code base and ensure it stays functional</dd>
<dt><strong>Software Engineering</strong></dt>
<dd>Further development of GNU social v2</dd>
<dt><strong>Computer Security Engineering</strong></dt>
<dd>Ensure GS is secure</dd>
</dl>
<p>Every student will have to pick tasks in each of these fields in GS's GSoC. Excited already? Then read below some of our ideas and learn how you can be part of this!</p>
<p>Difficulty varies per task but in general GS's SoC is demanding, so you better be honestly interested and willing to work hard and learn a lot.</p>
</article>
<article id="todo">
<h2>Ideas</h2>
<p>Below is a list of (not very defined) ideas of things/areas you can work on this summer at GNU social. They are just ideas, not full proposals. You should pick some of them that seem to be related and talk on IRC about it. The community will help you understanding what has to be done so you can put a good proposal together.</p>
<h3 id="todo-finish-ap-plugin">Make the ActivityPub plugin started in previous GSoC reliable</h3>
<p>In previous GSoC an ActivityPub plugin for GS was developed but isn't compatible with every piece of software used in the fediverse (only working with Mastodon so far) nor completely safe and robust for large usage.</p>
<p>Some of the existing key problems are:</p>
<ul>
<li>It is unable to de-duplicate when OStatus and ActivityPub are both enabled - mostly noticed between GS instances with both enabled;</li>
<li>Is unable to verify signatures which is an attack vector that makes the plugin unsafe for use right now;</li>
<li>It also doesn't make use of queues nor collections caching nor has any kind of circuit breaker implemented. This makes its use risky in a highly active GS instance.</li>
</ul>
<h3 id="todo-storage">Optimize how storage is used</h3>
<p>Add support for temporary posts: This will allow support for "stories" and empower whole instances (and/or single users) to have temporary posts.</p>
<p>Optimize OEmbed plugin and further development on image handler: Work on this has already been started.</p>
<h3 id="todo-third-party-developer-interfaces">Review third party developer interfaces</h3>
<p>There are various bots in the fediverse and we feel it might be about time to set them apart from humans so that we know who to kill when the robotic uprising comes, so to speak (ahem).</p>
<p>Ultimately, bots aren&rsquo;t humans and, therefore, they shouldn&rsquo;t have accounts claiming that they are &ldquo;Persons&rdquo;.</p>
<p>So some good measures for making change are:</p>
<ul>
<li>Introduce <strong>OAuth 2</strong> in GNU social for authentication of clients that aren&rsquo;t browsers;</li>
<li>Review current APIs for <strong>Tools</strong> that act in the User&rsquo;s behalf and introduce a user platform for the management of those;</li>
<li>Review current APIs for <strong>Bots</strong> that act in their own behalf and introduce a developer platform for the management of those.</li>
</ul>
<p>Technical sidenote for those who have read the ActivityPub standard: GS Bots are represented as Actors with the <a href="https://www.w3.org/TR/activitystreams-vocabulary/#dfn-application">Application</a> type, while GS Tools are an internal (not federated) thing that allow Actors with the <a href="https://www.w3.org/TR/activitystreams-vocabulary/#dfn-person">Person</a> type (commonly referred to as Users) to use third party tools to control their account.</p>
<h3 id="todo-gs2">&ldquo;We have you noticed we&rsquo;ve straighten every dent up&rdquo;</h3>
<p>Props to <a href="https://loadaverage.org/XRevan86">XRevan86</a> for that pun! (Notices in GNU social are colloquially referred to as Dents).</p>
<p>GNU social wants to get polished with a <span id="todo-themes">modern looking default theme</span>. For this, it would be interesting to come up with some themes guidelines so, if you&rsquo;re into web design, this might be <em>the task</em> for you! :)</p>
<p>On the other hand, if you are more into backend development, we&rsquo;ve got you covered. Some new and interesting concepts in the world of Software Engineering were introduced and we are naturally looking forward to include them and refresh the current code base for the release of GNU social 2 with them!</p>
</article>
<article id="apply">
<h2>How to apply?</h2>
<p>First read <a href="https://www.gnu.org/software/soc-projects/guidelines.html">GNU's guidelines</a> on how to prepare a good proposal.</p>
<p>Then please contact us on GS's <a href="irc://irc.freenode.net:6697/social">IRC channel (#social@irc.freenode.net)</a> to get started on your proposal. For an example proposal, you can refer to <a href="https://www.diogo.site/projects/GNU-social/soc/2018/proposal.pdf">AP plugin proposal</a>.</p>
<p>We also suggest that you <a href="https://gnusocial.network/try/">create an account in the fediverse</a>.</p>
<p>You can contact Diogo either on the above mentioned IRC channel (under the nick: up201705417), <a href="https://www.diogo.site/#contact">by email</a> or on his <a href="https://loadaverage.org/diogo">GNU social profile</a>.</p>
<a href="https://summerofcode.withgoogle.com/" class="BigButton"><strong>GO!</strong></a>
</article>
</body>
</html>

78
soc/2019/index.html Normal file
View File

@ -0,0 +1,78 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
<title>Google Summer of Code 2019 | GNU social</title>
<link rel="icon" href="../../favicon.png">
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="stylesheet" href="https://hackersatporto.com/assets/css/main.css">
<style>
#side-menu #menu-title {
color: #7a7a7a !important;
font-weight: 700;
}
@media screen and (max-width: 1200px) {
#side-menu #menu-title {
display:none;
}
}
</style>
</head>
<body>
<header id="header">
<nav id="side-menu">
<label for="show-menu" id="menu-button">Menu</label>
<input id="show-menu" role="button" type="checkbox">
<ul id="menu">
<li><a href="../"><strong>&larr; GS GSoC</strong></a></li>
<li><a href="#about">How was it?</a></li>
<li><a href="ideas.php">Ideas of 2019</a></li>
<li id="menu-title">Tech Reports</li>
<li><a href="#network">Network</a></li>
<li><a href="#load">Load</a></li>
</ul>
</nav>
<h1>GNU social Summer of Code 2019</h1>
<p>Organized by <strong><a href="https://www.diogo.site/">Diogo Cordeiro</a></strong></p>
</header>
<article id="about">
<h2>What a summer!</h2>
<span class="image right"><img src="coding_environment.jpg" alt=""></span>
<p>We are truly proud of all the progress we made with the help of our students. GNU social mentees have to submit code on the level of typical contributors without spoon-feeding and that's something achieved in all of ours GSoC editions.</p>
<p>A GNU social contributor deals with {reliability, software and computer security} engineering. Mastery with full-stack web development and git is acquired in a hands-on way without ever dismissing theoretical computer science teachings for optimal efficiency and effective designs.</p>
<p>GNU social is a beautiful software that follows GNU and UNIX philosophies by heart.</p>
<p>A big thanks for all the support of our lovely community and devs who have been with us in yet another great journey!</p>
</article>
<article id="network">
<h2>Network Services Improvements</h2>
<p>Proposed by <a href="https://loadaverage.org/tenma">Bruno Casteleiro</a> and mentored by <a href="https://www.diogo.site/">Diogo Cordeiro</a></p>
<ul>
<li>Improvements on OpenID support</li>
<li>Improvements on URLMapper</li>
<li>The Free Network - fluid transition between federation protocols</li>
<li>Some ActivityPub support improvements:
<ul>
<li>Add Queues</li>
<li>Add collection caching</li>
<li>Proper audience targetting</li>
<li>Inbox Forwarding</li>
<li>Groups over ActivityPub</li>
</ul>
</li>
</ul>
<a href="tech_report/network/" class="BigButton">Technical Report</a>
</article>
<article id="load">
<h2>Optimizations on Load Balance System and Storage Usage</h2>
<p>Proposed by <a href="https://loadaverage.org/biodan">Miguel Dantas</a> and mentored by <a href="https://www.diogo.site/">Diogo Cordeiro</a></p>
<ul>
<li>Improvements on the OEmbed plugin (turned into Embed plugin)</li>
<li>Improvements on the Media Handling System</li>
<li>Added Redis support (queues and caching)</li>
<li>Fixed Memcached support</li>
</ul>
<a href="tech_report/load/" class="BigButton">Technical Report</a>
</article>
</body>
</html>

View File

@ -0,0 +1,109 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
<title>Optimizations on Load Balance System and Storage Usage - Tech Report - GNU social Summer of Code 2019</title>
<link rel="icon" href="../../favicon.png">
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="stylesheet" href="https://www.diogo.site/projects/excalibur_template/assets/css/main.css">
<style>
@page {
size: A4 portraint;
}
@page :blank {
@top-center { content: "This page is intentionally left blank." }
}
h1 {
page-break-before: always;
}
h1, h2, h3, h4, h5 {
page-break-after: avoid;
}
table, figure {
page-break-inside: avoid;
}
@page:right{
@bottom-right {
content: "Page " counter(page) " of " counter(pages);
}
}
</style>
</head>
<body>
<header id="header">
<nav id="side-menu">
<label for="show-menu" id="menu-button">Menu</label>
<input id="show-menu" role="button" type="checkbox">
<ul id="menu">
<li><a href="../../"><strong>&larr; GS GSoC 2019</strong></a></li>
<li><a href="#about">About</a></li>
<li><a href="#image-system">Image System</a></li>
<li><a href="#embed-plugin">Embed Plugin</a></li>
<li><a href="#queue-system">Queue System</a></li>
<li><a href="#caching-system">Caching System</a></li>
<li><a href="#acknowledgements">Acknowledgements</a></li>
</ul>
</nav>
<h1 class="title">Optimizations on GNU social's Load Balance and Storage systems</h1>
<p>Developed by <strong><a href="https://http://loadaverage.org/biodan">Miguel Dantas</a></strong> during <strong><a href="https://summerofcode.withgoogle.com/archive/2019/#5289618063228928">Google Summer of Code 2019</a></strong></p>
<p>Mentored by <a href="https://www.diogo.site/">Diogo Cordeiro</a></p>
</header>
<h2 id="about">About</h2>
<h3 id="what-is-this-document">What is this document?</h3>
<p>This is a technical Google Summer of Code Project Report describing briefly what I did from May 6 to August 26.
</p>
<p>All the code I wrote during this period is available
<a href="https://notabug.org/diogo/gnu-social/src/7291e1b2a4d01a03400a1685879d4faa62c1645d">here</a>.
</p>
<p>This document helps understand what was done in a simple and informal way, highlighting the most relevant parts, why some decisions were made and what Ive learned with it.</p>
<p>From May 6 to May 27 I had to familiarize myself with the GNU socials plugins and events API, as well as other internal components and the community.</p>
<h3 id="what-is-gnu-social">What is GNU social?</h3>
<p>GNU social is a social communication software used in federated social networks. That requires queues and caching systems that are friendly to use and yet powerful and robust enough to handle the high load in servers with limited network, low storage
and reduced processing power. While scalable enough to take advantage of more powerful systems.</p>
<h3 id="abstract">Abstract</h3>
<p>TODO</p>
<h4 id="benefits">Benefits</h4>
<ul>
<li>Improvements on the Image Systems</li>
<li>Improvements of the Embed plugin</li>
<li>Improvements on the Queue System</li>
<li>Improvements on the Caching System</li>
<!--<li>Cleanup and organize the <code>lib</code> folder into semantic categories</li>-->
</ul>
<h2 id="image-system">Image System</h2>
<p>The new Image handling system was my first bigger project and in it I essentially reviewed and refactored the existing code, followed by making sure a consistent and filesystem safe encoding is use for the filename, which is then further provided
when the file download is requested. This very file download was moved into PHP code so that the code could have easy control over what files are accessed; the main goal with this change was to allow arbitrary file uploads, while still ensuring
that no file is directly publicly accessible, as a misconfigured webserver or a maliciously crafted file could cause unwanted execution. In addition, this will allow, in the future, for easy permission control, via events, if a plugin to do so
is written. Along the same lines, it was important to make image validation more aggressive. While not immediately apparent, an image and a script may be contained in the same file and it was possible for a file to be identified as an image by
the upload code and then be executed by the webserver.</p>
<h2 id="embed-plugin">Embed Plugin</h2>
<p>The existing Oembed plugin did a valiant attempt trying to get both Oembed and OpenGraph info about a page. The problem, besides the poor name given the dual purpose, was that it used an in-house implementation, which was not complete. This was therefore
replaced by an external library called <code>Embed</code>, by <code>oscarotero</code>. After refactoring and checking the existing code, as well as making sure the same filename conventions as above were in effect, image handling became significantly
more robust, eliminating the barrage of errors users would previously see, instead of images. In addition, I made it so only a configurable thumbnail size for the images was saved to disk, while still supporting upscaling should further themes
need it, which should significantly reduce disk space usage.</p>
<h2 id="queue-system">Queue System</h2>
<p>The queue system received a refactor and checking, modernizing and cleaning up the code in places. I also added the option to use Redis as a backing for this, through a new <code>RedisQueue</code> plugin.</p>
<p>In addition, the existing DB, STOMP and UNQUEUE queue managers were broken out into plugins, allowing for easier management as well as making it more unified.</p>
<h2 id="caching-system">Caching System</h2>
<p>Similarly, the caching system received the same treatment and a new <code>RedisCache</code> plugin was created.</p>
<!--
<h2 id="lib-refactor"><code>lib</code> Refactor</h2>
<p>The entire <code>lib</code> folder was separated into categories of semantic meaning. At first I planned to use the <code>@category</code> tags in some files, but this proved both sparse and unreliable, as some seem to have been copied. This change also required updating the internal autoload system, which while clever in concept, consisted, in practice, of a bunch of <code>if</code> statements. My change made it much more easily expandable and cleaner.</p>
-->
<h2 id="acknowledgements">Final Words</h2>
<p>GSoC was a wonderful experience for me. I now feel more comfortable with the GNU socials codebase as well as more confident in tackling other such large codebases. I learned a lot of useful stuff general software design principles, maintainability,
web security and Redis. Ive also learned more about <code>git</code> and how libre and open source software development is made and organized.</p>
<p>I look forward to regularly contributing to GNU social and other projects.</p>
<p>Thanks to Diogo Cordeiro for such a wonderful experience and the help and knowledge he lent.</p>
</body>
</html>

View File

@ -0,0 +1,166 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
<title>Improvements on GNU social's network systems - Tech Report - GNU social Summer of Code 2019</title>
<link rel="icon" href="../../favicon.png">
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="stylesheet" href="https://www.diogo.site/projects/excalibur_template/assets/css/main.css">
<style>
@page {
size: A4 portraint;
}
@page :blank {
@top-center { content: "This page is intentionally left blank." }
}
h1 {
page-break-before: always;
}
h1, h2, h3, h4, h5 {
page-break-after: avoid;
}
table, figure {
page-break-inside: avoid;
}
@page:right{
@bottom-right {
content: "Page " counter(page) " of " counter(pages);
}
}
</style>
</head>
<body>
<header id="header">
<nav id="side-menu">
<label for="show-menu" id="menu-button">Menu</label>
<input id="show-menu" role="button" type="checkbox">
<ul id="menu">
<li><a href="../../"><strong>&larr; GS GSoC 2019</strong></a></li>
<li><a href="#about">About</a></li>
<li><a href="#openid">OpenID</a></li>
<li><a href="#routing">Routing</a></li>
<li><a href="#private-messaging">Private Messaging</a></li>
<li><a href="#activitypub">ActivityPub</a></li>
<li><a href="#remote-actions">Remote Actions</a></li>
<li><a href="#todo">TODO</a></li>
</ul>
</nav>
<h1>Improvements on GNU social's network systems</h1>
<p>Developed by <strong><a href="https://http://loadaverage.org/tenma">Bruno Casteleiro</a></strong> during <strong><a href="https://summerofcode.withgoogle.com/archive/2019/#6563945798696960">Google Summer of Code 2019</a></strong></p>
<p>Mentored by <a href="https://www.diogo.site/">Diogo Cordeiro</a></p>
</header>
<h2 id="about">About</h2>
<h3 id="what-is-this-document">What is this document?</h3>
<p>This is a technical Google Summer of Code Project Report describing briefly what I did from May 27 to August 19.</p>
<p>The whole code I wrote during this period is available <a href="https://notabug.org/diogo/gnu-social/src/c2a0f85274d01b1ea15caebe8d328d2fd290f228">here</a>.</p>
<p>This document helps understanding what was done in a simple and informal way, highlighting the most relevant parts, why some decisions were made and what I've learned with it. Unless explicitly said, the order in which I'll write about my tasks may
not exactly correspond to the real order by which I did the work.</p>
<h3 id="what-is-gnu-social">What is GNU social?</h3>
<p>GNU social is a social communication software used in federated social networks.</p>
<h3 id="abstract">Abstract</h3>
<p>My work for this summer involved, in a general way, working the different network systems of GNU social. Due to an unexpected increase of the workload in some of the tasks, my plan, although still related to network systems, turned to be a lot more
focused in the ActivityPub protocol, a communication standard for federated software. During my journey, other systems like the OpenID protocol or the internal url mapper were part of my work.</p>
<h4 id="benefits">Benefits</h4>
<ul>
<li>Ensuring federation of GNU social with other software that only implement the ActivityPub protocol.</li>
<li>Extending the ActivityPub implementation to correctly handle new interactions important in a social network.</li>
<li>Fix, extend and improve core code, ensuring better and greater usability.</li>
</ul>
<h2 id="openid">OpenID</h2>
<p>OpenID is an authentication protocol that allow users to use an unique identifier to login in multiple sites without needing to individual registration in each of them.</p>
<p>In GNU social, OpenID support is provided by a plugin and my task was to perform a revision of it.</p>
<h3 id="related-work">Related work</h3>
<p>During my revision it was necessary to update the external libraries used by the plugin. Since no code changes were required afterwards, this was a trivial update.</p>
<p>The OpenID user interface was also updated. Users had no option to choose whether to sync or not their GNU social accounts when adding an OpenID identifier in the settings. I've extended the interface with such sync option.</p>
<h3 id="learnings">Learnings</h3>
<p>Being the first task, reviewing OpenID helped me to better understand how plugins were structured and the back/front-end code interaction.</p>
<h2 id="routing">Routing</h2>
<p>Internally, the <code>URLMapper</code> class is responsible for the creation of the many routes used in GNU social. This class was known for having a few issues and, having affected some of my work during other tasks, I was responsible to fix some
of those issues in different times during the summer.</p>
<h3 id="related-work-1">Related work</h3>
<p>Fully reworking the Mapper was considered as an option at a certain time, however, taking into account the many routes spread all over the codebase and my work schedule, I decided that fixing the existent class in the best way possible was the safest
and more rentable option I could take.</p>
<h4 id="accept-headers">Accept-Headers</h4>
<p>One of the first changes to the Mapper were result of needing to have two or more routes with exactly the same path to coexist, differentiated only by the accept-headers that should be set in the request.</p>
<p>This necessity was solved by extending the route creation function with an option array of accept-headers. When populated, the function verifies the request accept-headers and in case of any match, it stores/substitutes the new route in the appropriate
variables.
</p>
<h4 id="wrong-matching">Wrong matching</h4>
<p>In some cases, some paths that would differ from one another only in their regex attributes were being routed. Although fundamentally equal, these paths generated different regex's during route creation. Because of this and because of being stored
by order of arrival, path matching was matching the wrong route in some cases.</p>
<p>This problem was solved by simply storing new routes at the head of the according array variable.</p>
<h4 id="dynamics-first">Dynamics first!</h4>
<p>The Mapper distinguishes what are dynamic and static routes. Static routes are the ones with regex attributes in their paths. Because of both being stored in the same place, grouped by the action to be executed, some static routes were incorrectly
being matched in the place of the dynamic ones, simply because of being found first in the storage array.</p>
<p>It makes sense to look all dynamic routes first, specially when these don't have the problem of wrongly match with a request for a static route. Therefore, this problem was solved by separating both types in different variables and explicitly enforcing
the lookup of the dynamic routes first.</p>
<h4 id="so-many-routes">So many routes!</h4>
<p>Spread all over the codebase, a great deal of the calls to the route creation function were making an improper use of the function parameters. All these calls were appropriately fixed.</p>
<h3 id="learnings-1">Learnings</h3>
<p>Specially because of some undo/redo that these changes required, this task was important for me to be more cautious with core code changes. Verification of the surrounding code and careful analysis of the changes to be done is very important.</p>
<h2 id="private-messaging">Private Messaging</h2>
<p>GNU social private messaging support is provided with the <code>DirectMessage</code> plugin . By requirement of the changes related to ActivityPub, this plugin end up being totally reworked by me.</p>
<h3 id="related-work-2">Related Work</h3>
<p>The plugin suffered many changes in practically all of its code, making it hard to write about every change. Still, because of their importance, three changes are worth of an highlight spot:</p>
<h4 id="porting-to-the-notice-db-table">Porting to the Notice DB table</h4>
<p>GNU social already had notices, so it didn't make much sense to have a separated table just for private messages. The most important part of this port was ensuring an upgrade function and the correct handling of a newly introduced Notice <code>MESSAGE_SCOPE</code> scope.</p>
<h4 id="supporting-multi-recipient">Supporting multi-recipient</h4>
<p>Porting to the Notice table automatically enabled text mentioning, so with just a few adjustments the plugin was handling multi-recipient messages.</p>
<h4 id="supporting-federation">Supporting federation</h4>
<p>Of course, the whole reason for this task. Events were added in key points of the private messaging flow for the federation plugins to subscribe and handle in their own way.</p>
<h3 id="learnings-2">Learnings</h3>
<p>Because of its big extent, this task was a test to everything I had learned so far and, therefore, completing it gave me great pleasure and some energy boost for what was to come. In particular, I've learned how to add upgrading logic to plugins.</p>
<h2 id="activitypub">ActivityPub</h2>
<p>Support for the ActivityPub protocol in GNU social is given by means of a plugin wrote by my own mentor, during last year's edition of GSoC. Since the last tests with other federated software some things changed and it was known that some interactions
weren't properly working, so part of my job was to review and ensure ActivityPub could federate again. Furthermore, some functionality was yet to be implemented and other came along the way, summing up the reasons as for why this task to consume
more time than the expected.</p>
<h3 id="related-work-3">Related Work</h3>
<p>Following, the most important changes this plugin seen this summer:</p>
<h4 id="follow-collections">Follow collections</h4>
<p>The followers/following endpoints for ActivityPub users weren't retrieving the most accurate information due to accounting invalid users. This was easily fixed by porting and correctly adapting the subscriptions functions from the core to the plugin.
Furthermore, I've handled the caching of these collections.</p>
<h4 id="ensuring-federation">Ensuring federation</h4>
<p>This sub-task involved ensuring the operation of all interactions supported by the plugin, both from the sender and receiver sides. These interactions are: Accept-Follow, Create-Note, Delete-Note, Follow-Person, Like, Undo-Follow, Undo-Like and Announce.
In some of the cases the changes were something trivial, others require small function rewrites and bug-fixing. The interactions were tested with remote instances of GNU social, Pleroma, Mastodon and Pixelfed.</p>
<p>Later I've also introduced and ensured the operation of the Delete-Person activity.</p>
<h4 id="queue-support">Queue support</h4>
<p>The GNU social queue system was added for ActivityPub notice distributions, these were proving to be quite a time consuming experience.</p>
<h4 id="audience-targeting">Audience targeting</h4>
<p>At this point me and my mentor, Diogo, agreed that, despite not being supported in GNU social, we should still properly handle the different non-public types of notes that the inbox could receive, like the unlisted, followers-only or private/direct
types.</p>
<p>Handling private notes was fairly easy since I had already reworked the <code>DirectMessage</code> plugin, so it was only needed to introduce a new Create-Direct-Note activity and subscribe the DirectMessage events. It is worth mentioning that this
type of note has (yet) no standard way to be differentiated. After some research me and Diogo decided that making GNU social conforming with the discussed <a href="https://github.com/w3c/activitypub/issues/196#issuecomment-304958984">directMessage</a> flag was the best way to handle the activity.</p>
<p>The unlisted and followers-only types of note were handled by storing such notices with a special <code>GATEWAY</code> type flag. This flag was originally introduced to represent notices with origin in services other than the OStatus protocol. Being
that way guarantees that the notice won't show in the public timelines. For the time being, I believe this is the best option for handling such note types: 1. easy to change (if required) in the future when proper support for these types is added
and 2. provides at least the minimum requirements of visibility scope.</p>
<h3 id="learnings-3">Learnings</h3>
<p>With this task I've learned how to use more systems of the program, like the caching and queue systems. Furthermore, I gained further knowledge in different aspects of the ActivityPub standard.</p>
<h2 id="remote-actions">Remote Actions</h2>
<h3>Remote-follow button</h3>
<p>Aiming to provide better user experience and to ensure federation in a general way, this task led to a new <code>RemoteFollow</code> plugin. This plugin is responsible to fully control the remote-follow button that shows on user profiles and to provide
the necessary events for all federation plugins to subscribe and make this button work.</p>
<h3 id="related-work-4">Related work</h3>
<p>As there isn't no standard way to treat a remote-follow button ActivityPub, the common way to do it is to extend the logic of OStatusSub, the OStatus way of handling such button. That is precisely what I did. I've ported the necessary actions related
to remote-following a user from the <code>OStatus</code> plugin and adapted it to be event-driven.</p>
<h3 id="learnings-4">Learnings</h3>
<p>This task was my first time working in the <code>OStatus</code> plugin, so I learned some details of its implementation.</p>
<h3 id="search-box">Search-box</h3>
<p>I've introduced the &quot;ActivityPub way&quot; of fetching remote users and notices, allowing remote-following users without needing to leave the local instance.</p>
<h2 id="todo">Anything left to do?</h2>
<p>Of course, there's always something more to do :)</p>
<ul>
<li>Further ActivityPub improvements (e.g Inbox Forwarding)</li>
<li>ActivityPub C2S (part of the original plan)</li>
<li>Some minor TODOs I left in the <code>DirectMessage</code> plugin (not crucial)</li>
</ul>
</body>
</html>

222
soc/2020/academics.html Normal file
View File

@ -0,0 +1,222 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
<title>Assessment | GNU social SoC</title>
<link rel="icon" href="../../favicon.png">
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="stylesheet" href="https://hackersatporto.com/assets/css/main.css">
</head>
<body>
<header id="header">
<nav id="side-menu">
<label for="show-menu" id="menu-button">Menu</label>
<input id="show-menu" role="button" type="checkbox">
<ul id="menu">
<li><a href="./"><strong>&larr; GS GSoC</strong></a></li>
<li><a href="#Grading_System_employed_0">Grading</a></li>
<li><a href="#Web_Technologies_69">Proposal</a></li>
<li><a href="#Internship__Training_91">Summer</a></li>
</ul>
</nav>
<h1>GNU social Summer of Code</h1>
<p>Organized by <strong><a href="https://www.diogo.site/">Diogo Cordeiro</a></strong></p>
<p>Mentors: <a href="https://www.diogo.site/">Diogo Cordeiro</a>, <a href="https://loadaverage.org/XRevan86">Alexei Sorokin</a>, <a href="https://dansup.com">Daniel Supernault</a>, <a href="https://www.hackerposse.com/~rozzin/">Joshua Judson Rosen</a> and <a href="https://github.com/phablulo">Phablulo Joel</a></p>
</header>
<article id="about">
<h1 class="code-line" data-line-start=0 data-line-end=1 ><a id="Grading_System_employed_0"></a>Grading System employed</h1>
<h2 class="code-line" data-line-start=2 data-line-end=3 ><a id="Effective_Grading_2"></a>Effective Grading</h2>
<p class="has-line-data" data-line-start="3" data-line-end="4">Either <em>pass</em> or <em>fail</em>.</p>
<h2 class="code-line" data-line-start=5 data-line-end=6 ><a id="Qualitative_Grading_5"></a>Qualitative Grading</h2>
<table class="table table-striped table-bordered">
<thead>
<tr>
<th>Grade</th>
<th>Definition</th>
</tr>
</thead>
<tbody>
<tr>
<td>31337</td>
<td>Outstanding</td>
</tr>
<tr>
<td>1337</td>
<td>Very Good</td>
</tr>
<tr>
<td>42</td>
<td>Competent</td>
</tr>
<tr>
<td>0</td>
<td>Failed</td>
</tr>
</tbody>
</table>
<h2 class="code-line" data-line-start=13 data-line-end=14 ><a id="Method_13"></a>Method</h2>
<p class="has-line-data" data-line-start="14" data-line-end="15">Graded every month, the ceiled average is the final.</p>
<p class="has-line-data" data-line-start="16" data-line-end="17">No Quantitative Grading system will be used.</p>
<p class="has-line-data" data-line-start="18" data-line-end="19">The contributions will be evaluated according to the following directives:</p>
<blockquote>
<p class="has-line-data" data-line-start="20" data-line-end="21">Autonomy with which the work was done</p>
</blockquote>
<ul>
<li class="has-line-data" data-line-start="21" data-line-end="22">Low (was unable to progress autonomously);</li>
<li class="has-line-data" data-line-start="22" data-line-end="24">Competent (some autonomy but with blocking situations that required the<br>
intervention of the mentor);</li>
<li class="has-line-data" data-line-start="24" data-line-end="26">Very Good (very good ability to solve problems independently in useful time<br>
with the mentor mostly focused on defining the next steps of the work);</li>
<li class="has-line-data" data-line-start="26" data-line-end="28">Outstanding (is sometimes able to suggest surprising and valid alternatives to what was originally planned by the mentor).</li>
</ul>
<blockquote>
<p class="has-line-data" data-line-start="28" data-line-end="29">Objectives satisfaction</p>
</blockquote>
<ul>
<li class="has-line-data" data-line-start="29" data-line-end="30">Low (haven't reached to the minimum objectives admissible for the proposed work);</li>
<li class="has-line-data" data-line-start="30" data-line-end="31">Competent (the objectives were reached though not entirely);</li>
<li class="has-line-data" data-line-start="31" data-line-end="32">Very Good (reached up fully);</li>
<li class="has-line-data" data-line-start="32" data-line-end="34">Outstanding (exceeded up the objectives set).</li>
</ul>
<blockquote>
<p class="has-line-data" data-line-start="34" data-line-end="35">Intrinsic difficulty level of their work</p>
</blockquote>
<ul>
<li class="has-line-data" data-line-start="35" data-line-end="37">Low (relatively easy work, both from a scientific or technical point of view,<br>
based on widespread knowledge);</li>
<li class="has-line-data" data-line-start="37" data-line-end="39">Competent (work with some high complexity of details requiring more advanced<br>
knowledge/expertise, either technical or scientific);</li>
<li class="has-line-data" data-line-start="39" data-line-end="41">Very Good (relatively complex work, requiring a substantial knowledge and<br>
technical skills, or resulting in some innovative contribution);</li>
<li class="has-line-data" data-line-start="41" data-line-end="43">Outstanding (InSaNe).</li>
</ul>
<h3 class="code-line" data-line-start=46 data-line-end=47 ><a id="Grade_formula_per_month_46"></a>Grade formula per month</h3>
<pre>
Autonomy level
Satisfaction of objectives | Low Competent Very Good Outstanding
-----------+-------------------------------------------------------
Low | 0 0 0 0
Competent | 42 42 42 1337
Very Good | 42 1337 1337 31337
Outstanding| 42 1337 1337 31337
Grade from matrix above
Difficulty level | 0 42 1337 31337
-----------+-----------------------------------------
Low | 0 0 42 1337
Competent | 0 42 1337 1337
Very Good | 0 1337 1337 1337
Outstanding| 0 1337 1337 31337
</pre>
<hr>
<h1 class="code-line" data-line-start=67 data-line-end=68 ><a id="Modules_67"></a>Modules</h1>
<p>N.B.: The following are the minimum averages in GNU social's Summer of Code, we will come up with a custom
"transcript" for any interested student.</p>
<h2 class="code-line" data-line-start=69 data-line-end=70 ><a id="Web_Technologies_69"></a>Web Technologies</h2>
<h3 class="code-line" data-line-start=71 data-line-end=72 ><a id="Amount_of_time_allocated_to_each_module_unit_71"></a>Amount of time allocated to each module unit</h3>
<table class="table table-striped table-bordered">
<thead>
<tr>
<th>Designation</th>
<th>Time (hours)</th>
</tr>
</thead>
<tbody>
<tr>
<td>Autonomous study</td>
<td>80</td>
</tr>
<tr>
<td>Mentorship</td>
<td>20</td>
</tr>
<tr>
<td>Project work</td>
<td>46</td>
</tr>
<tr>
<td>Total</td>
<td>146</td>
</tr>
</tbody>
</table>
<h3 class="code-line" data-line-start=79 data-line-end=80 ><a id="Assessment_Components_79"></a>Assessment Components</h3>
<table class="table table-striped table-bordered">
<thead>
<tr>
<th>Designation</th>
<th>Weight (%)</th>
</tr>
</thead>
<tbody>
<tr>
<td>Proposal</td>
<td>80</td>
</tr>
<tr>
<td>Proof of Competence</td>
<td>20</td>
</tr>
</tbody>
</table>
<h3 class="code-line" data-line-start=85 data-line-end=86 ><a id="Proposed_Credits_85"></a>Proposed Credits</h3>
<p class="has-line-data" data-line-start="86" data-line-end="88">1 Carnegie Unit<br>
5 ECTS</p>
<p><strong><a href="proposal_rating_guidelines.txt">Proposal Rating Guidelines</a></strong><p>
<hr>
<h2 class="code-line" data-line-start=91 data-line-end=92 ><a id="Internship__Training_91"></a>Internship | Training</h2>
<h3 class="code-line" data-line-start=93 data-line-end=94 ><a id="Amount_of_time_allocated_to_each_module_unit_93"></a>Amount of time allocated to each module unit</h3>
<table class="table table-striped table-bordered">
<thead>
<tr>
<th>Designation</th>
<th>Time (hours)</th>
</tr>
</thead>
<tbody>
<tr>
<td>Internship</td>
<td>276.5</td>
</tr>
<tr>
<td>Autonomous Study</td>
<td>93.5</td>
</tr>
<tr>
<td>Final Report</td>
<td>24</td>
</tr>
<tr>
<td>Mentorship</td>
<td>44</td>
</tr>
<tr>
<td>Total</td>
<td>438</td>
</tr>
</tbody>
</table>
<h3 class="code-line" data-line-start=102 data-line-end=103 ><a id="Assessment_Components_102"></a>Assessment Components</h3>
<table class="table table-striped table-bordered">
<thead>
<tr>
<th>Designation</th>
<th>Weight (%)</th>
</tr>
</thead>
<tbody>
<tr>
<td>Practical or project work</td>
<td>100</td>
</tr>
</tbody>
</table>
<h3 class="code-line" data-line-start=107 data-line-end=108 ><a id="Proposed_Credits_107"></a>Proposed Credits</h3>
<p class="has-line-data" data-line-start="108" data-line-end="112">4 Carnegie Unit<br>
18 Austria, Italy, and Spain ECTS<br>
16 Finland, The Netherlands, Portugal, and Russia ECTS<br>
15 Germany, Belgium, Romania, and Hungary ECTS</p>
</article>
</body>
</html>

File diff suppressed because it is too large Load Diff

Binary file not shown.

Binary file not shown.

215
soc/2020/announcements.php Normal file
View File

@ -0,0 +1,215 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
<title>2020 | GNU social Summer of Code</title>
<link rel="icon" href="../../favicon.png">
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="stylesheet" href="https://hackersatporto.com/assets/css/main.css">
</head>
<body>
<header id="header">
<nav id="side-menu">
<label for="show-menu" id="menu-button">Menu</label>
<input id="show-menu" role="button" type="checkbox">
<ul id="menu">
<li><a href="../"><strong>&larr; GS GSoC</strong></a></li>
<li><a href="#" class="current">Announcements</a></li>
<li><a href="academics.html">Assessment</a></li>
<li><a href="https://notabug.org/diogo/gnu-social/src/nightly/DOCUMENTATION/DEVELOPERS">Contributing</a></li>
<li><a href="daily_report/">Daily Reports</a></li>
<li><a href="ideas.php">Proposed Ideas</a></li>
<li><a href="../../study_resources.html">Study Resources</a></li>
</ul>
</nav>
<h1>GNU social Summer of Code 2020 - WARNING: THIS IS AN ARCHIVE OF OUR 2020 PROGRAMME PAGE</h1>
<strong>For the latest programme page, <a href="https://www.diogo.site/projects/GNU-social/soc/current/">click here</a>.</strong>
<p>Organized by <strong><a href="https://www.diogo.site/">Diogo Cordeiro</a></strong></p>
<p>Mentors: <a href="https://www.diogo.site/">Diogo Cordeiro</a>, <a href="https://loadaverage.org/XRevan86">Alexei Sorokin</a>, <a href="https://dansup.com">Daniel Supernault</a>, <a href="https://www.hackerposse.com/~rozzin/">Joshua Judson Rosen</a> and <a href="https://github.com/phablulo">Phablulo Joel</a></p>
</header>
<article id="pinned" style="border-style:solid;border-color:coral;padding:1em">
<h2>Day-to-day links</h2>
<p>
<b>Tasks</b><br>
<a href="https://kanban.diogo.site/?controller=BoardViewController&action=show&project_id=1">Kanban board GS v2</a> [<a href="https://kanban.diogo.site/?controller=BoardViewController&action=readonly&token=03795efb8138c4e7661a900c234c0df1bc3fc03cdfcda8619cd5d0e666de">Public</a>]<br>
<a href="https://kanban.diogo.site/?controller=BoardViewController&action=show&project_id=2">Kanban board GS v3</a> [<a href="https://kanban.diogo.site/?controller=BoardViewController&action=readonly&token=d2293e55cabae7cceff9fb496c651328195357d392b9e61a9f229ed6d463">Public</a>]<br>
<a href="https://kanban.diogo.site/?controller=BoardViewController&action=show&project_id=3">Kanban board Pleroma FE</a> [<a href="https://kanban.diogo.site/?controller=BoardViewController&action=readonly&token=38a6276b337d873d349357796c265403d4ff4bc3d8d11819e849271044b0">Public</a>]<br>
<a href="https://www.diogo.site/projects/GNU-social/soc/2020/roadmap.txt">GSoC Roadmap</a><br>
<a href="https://notabug.org/diogo/gnu-social/issues">Issue tracker</a>
</p>
<p>
<b>Contributing</b><br>
<a href="https://notabug.org/diogo/gnu-social/src/nightly/DOCUMENTATION/DEVELOPERS/CONTRIBUTING/coding_standards.md">Style guide</a><br>
<a href="https://www.diogo.site/projects/GNU-social/soc/2020/daily_report/">Daily Reports</a><br>
<a href="https://www.diogo.site/projects/GNU-social/study_resources.html">Study Resources</a>
</p>
</article>
<article id="announcements">
<h2>Announcements</h2>
<h3>Last August Week (--08-24)</h3>
<p><strong>Final Report Instructions</strong><br>
The report must have A4 paper geometry with 12pt font-size.
The pages, sections and figures must be enumerated. Maximum of 5000 words.<!--It's expected a minimum of 5000 words and a maximum of 6500.-->
These limits don't include cover, indexes nor appendices.
The report must be well structured.<br><br>
<b>One example of a suitable format is:</b><br>
<pre>
- Cover
Title / Author / Date
- Mentors Page
Page for the mentors to sign and make the necessary comments (namely a declaration confirming
the student has evidenced certain knowledge throughout the summer and worked the
declared hours). Note that this is mandatory.
- Abstract
A brief summary of approximately 250 words. Note that this is mandatory.
- Preface
Explaining when, where, and why the project was carried out, and thanking those who helped.
- Table of contents
- Introduction
Introduction to the done work, and description of the objectives during the summer.
Short background, issue and aim, as well as the structure of the report.
- Methodology
Theories, tools, etc., that were applied in the project.
Description of used technologies as well as discarded alternatives.
- Results<!-- Description of the done work chronologically sorted and divided in sub-sections. You must describe the various tasks during the work period, including methods and results.-->
- Discusssion and conclusion
Reflection on whether the aim was fulfilled, and on the opportunities
for further development. Critical review and discussion of the results.
- References
In order to enable the reader to review the project and go to the original sources
on which the material is based, the report needs a good reference list.
Continuously filling in the reference list can save you a lot of time
compared to doing everything at the end.
- Appendices
Extensive data material that is relevant to the work, but too large
to incorporate into the text, can be included in an appendix.
</pre>
<p><a href="https://libguides.lub.lu.se/c.php?g=526053" target="_top" class="external-link">Information on referencing (Lund University Libraries' website)</a></p>
<p><a href="http://www.lth.se/fileadmin/lth/anstallda/kvalitet/examensarbete/Guide_foer_populaervetenskapligt_skrivande_141015_-_eng.pdf" target="_top" class="external-link">Guide and checklist for writing a summary of a degree project aiming at a popular science readership (Faculty of Engineering (LTH), Lund University)</a></p>
<b>The graphic design</b>
<p>It is better to concentrate more on the content of the report than on the design. Customise the layout to fit the content rather than the other way around.</p>
<h3>Second Evaluations open July 27 - 31 17:00 (GMT+1)</h3>
<p>Quick reminder that the GNU social Summer of Code 2020 assessing week has started! You should have opened your Merge Requests by now. Additionally, if you're on GSoC, you need to fill Google's forms.</p>
<p>Best wishes!</p>
<h3>First Evaluations open June 30 - July 2 17:00 (GMT+1)</h3>
<p>Quick reminder that the GNU social Summer of Code 2020 assessing week has started! You should have opened your Merge Requests by now. Additionally, we need you to fill two forms.</p>
<p>Mentor Evaluation: (information on that one at your email inbox)</p>
<p><a href="https://forms.gle/95mkjEfmddepuVTv5">Student Self Assessment</a></p>
<p>These two forms together will only take 10 minutes to complete and are <b>REQUIRED</b> - don't miss the deadline and fail GS SoC because you didn't take 10 minutes to complete the evaluation.</p>
<p><strong>Deadline for students to complete the evaluation form is Thursday, July 2nd at 17:00 (GMT+1).</strong></p>
<p>Best wishes!</p>
<h3>End of June's third week (--06-22)</h3>
<p><strong>Important Note</strong>:
Congrats to you all on maintaining a sensible amount of hours to work with in this final June's week, this was specially important in this exams season of yours.<br>
This system based on debitable hours per week was a special case due to distributing work with May in order to make it up for exams.
This is <em>not</em> how it will work in the next two months. As was stated in the <a href="https://www.diogo.site/projects/GNU-social/soc/2020/daily_report/">work schedule explanation</a>, there's
a closed interval of hours that we expect you to work per week. Hence, the freedom you had this month regarding transferring work
from a week to another will soon be significantly reduced.<br>
That being said, it's also now opportune to kindly remind you of our <a href="https://www.diogo.site/projects/GNU-social/soc/2020/academics.html">assessing framework</a>,
please note that hours is not even part of what we use to assess, i.e., working more or less hours isn't really considered,
that's just a formal requirement, we care about results. The parameters you will be graded on are:
- <em>Autonomy</em> (Have you bothered the mentors beyong what's healthy?);
- <em>Objectives satisfaction</em> (Have you done all the tasks you were assigned in the roadmap?);
- <em>Difficulty</em> (Were these tasks hard?).<br>
By the end of this week, GSoC assessment will start. Best of work nailing it! :)
</p>
<p>
<pre><b>Current status of debitable hours</b>
<u>Hugo</u>
Dedicated hours this week: 12
Expected hours this week: 36.5
Debitable hours next week: 49.5-(36.5-12)= 25
<u>Susanna</u>
Dedicated hours this week: 57.75
Expected hours this week: 36.5
Debitable hours next week: -5.14-(36.5-57.75)= 16.11
<u>Eliseu</u>
Dedicated hours this week: 24
Expected hours this week: 32
Debitable hours next week: 16-(32-24)= 8</pre>
</p>
<h3>End of June's second week (--06-15)</h3>
<p>
<pre><b>Current status of debitable hours</b>
<u>Hugo</u>
Dedicated hours this week: 6
Expected hours this week: 36.5
Debitable hours next week: 80-(36.5-6)= 49.5
<u>Susanna</u>
Dedicated hours this week: 2.15
Expected hours this week: 36.5
Debitable hours next week: 29.21-(36.5-2.15)= -5.14
<u>Eliseu</u>
Dedicated hours this week: 34
Expected hours this week: 32
Debitable hours next week: 14-(32-34)= 16</pre>
</p>
<h3>End of June's first week (--06-08)</h3>
<p>
<pre><b>Current status of May debitable hours</b>
<u>Hugo</u>
Dedicated hours this week: 20
Expected hours this week: 24
24 - 20 = 4h debited from May
84 - 4 = 80 debitable May hours remaining
<u>Susanna</u>
Dedicated hours this week: 29.41
Expected hours this week: 36.5
36.5 - 29.41 = 7.09h debited from May
36.3 - 7.09 = 29.21 debitable May hours remaining
<u>Eliseu</u>
Dedicated hours this week: 23
Expected hours this week: 32
32 - 23 = 9h debited from May
23 - 9 = 14 debitable May hours remaining</pre>
</p>
<h3>Bonding period end (--06-01)</h3>
<p>
<pre><b>Total of May dedicated hours per student</b>
Hugo: 84h
Susanna: 36.3h
Eliseu: 23h
<b>State of the tasks</b>
<u>Hugo</u>
The following tasks:
- Port configuration
- Basic interfaces for queuing, caching, etc.
- Basic test structure
have moved to June.
<u>Susanna</u>
May tasks moved all to June.
<u>Eliseu</u>
May tasks moved all to June.</pre>
</p>
<h3>Bonding Period Start (--05-04)</h3>
<p><a href="roadmap-as-of-may.txt">GSoC Roadmap published</a> and added to day-to-day links!</p>
<h3>New landing page (--04-14)</h3>
<p>Poll results:
<ul>
<li><strong>susanna</strong>: 5</li>
<li><strong>pranjal</strong>: 3</li>
<li><strong>spookie</strong>: 3</li>
<li><strong>suraj</strong>: 0</li>
</ul>
Congrats everyone! :)
</p>
<h3>New landing page contest (--04-12)</h3>
<p>The FE prospective students had to write a new landing page as part of their Proof of Competence, we're now <a href="https://www.diogo.site/projects/GNU-social/soc/2020/landing/">running a poll</a> in our IRC channel to decide which one will replace the existing one at <a href="https://gnusocial.network">gnusocial.network</a>.</p>
<h3>End of GSoC Student Application Period (--03-31)</h3>
<p>Students who haven't finished their proof of competence are allowed to further work until --04-10. After that we won't consider any further work in the assessment process. Results will be announced in --05-04.</p>
</article>
</body>
</html>

Binary file not shown.

After

Width:  |  Height:  |  Size: 102 KiB

View File

@ -0,0 +1,20 @@
APP_DEBUG=false
APP_LANGUAGE=en
DARK_MODE=true
DISPLAY_READMES=true
READMES_FIRST=false
ZIP_DOWNLOADS=true
GOOGLE_ANALYTICS_ID=false
SORT_ORDER=type
REVERSE_SORT=false
HIDE_APP_FILES=true
HIDE_VCS_FILES=true
DATE_FORMAT="Y-m-d H:i:s"
TIMEZONE="UTC"
MAX_HASH_SIZE=1000000000

View File

@ -0,0 +1,135 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
<title>Daily Report Viewer | GS SoC 2020</title>
<link rel="icon" href="../../../favicon.png">
<meta charset="utf-8">
<meta name="robots" content="noindex, nofollow, nosnippet">
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="stylesheet" href="https://hackersatporto.com/assets/css/main.css">
<style>
#side-menu #menu-title {
color: #7a7a7a !important;
font-weight: 700;
}
@media screen and (max-width: 1200px) {
#side-menu #menu-title {
display:none;
}
}
</style>
</head>
<body>
<header id="header">
<nav id="side-menu">
<label for="show-menu" id="menu-button">Menu</label>
<input id="show-menu" role="button" type="checkbox">
<ul id="menu">
<li><a href="../"><strong>&larr; GS GSoC 2020</strong></a></li>
<li><a href="archive">Previous Months</a></li>
<li id="menu-title">STUDENTS</li>
<li><a class="current" href="index.php?student=hugo">hugo</a></li><li><a href="index.php?student=susannadiv">susannadiv</a></li><li><a href="index.php?student=rainydaysavings">rainydaysavings</a></li></ul>
</nav>
<h1>Daily Report Viewer | GS SoC 2020</h1>
<p>Organized by <strong><a href="https://www.diogo.site/">Diogo Cordeiro</a></strong></p>
<p>Mentors: <a href="https://www.diogo.site/">Diogo Cordeiro</a>, <a href="https://loadaverage.org/XRevan86">Alexei Sorokin</a>, <a href="https://dansup.com">Daniel Supernault</a>, <a href="http://status.hackerposse.com/rozzin">Joshua Judson Rosen</a> and <a href="https://github.com/phablulo">Phablulo Joel</a></p>
</header>
<article id="student_report"><h2>Showing reports for hugo</h2><h3 id="day-0">Day 0</h3><p><b>No report.</b></p><h3 id="day-1">Day 1</h3><p><strong>Summary:</strong> Figured out how to make symfony/composer stop complaining about not having a use statement.</p><p><strong>Dedicated Time (in hours):</strong> 1.5</p><pre>
</pre><h3 id="day-2">Day 2</h3><p><strong>Summary:</strong> Trying to get events to work with modules. Events and most of the thing is working, can't use controllers in modules. Got controllers sorted and committed everything</p><p><strong>Dedicated Time (in hours):</strong> 7</p><pre>
</pre><h3 id="day-3">Day 3</h3><p><b>No report.</b></p><h3 id="day-4">Day 4</h3><p><strong>Summary:</strong> Fix plugins, make notification settings work, help Eliseu rebase</p><p><strong>Dedicated Time (in hours):</strong> 6</p><pre>
Relevant commmits:
- 32c2a4a984eeba17c947db5a30a03d0128144edb [AUTOGENERATED] Update autogenerated code
- 10daa5953b7f201643c25c1dc8e6f9cfd7ffcebc [COMPONENT] Remove 'post on status change' option for email transport
- 83bedf9cac963faa09a93b99d34764a142367f74 [COMPONENT][PLUGIN] Move Email and XMPP notification handlers from components to plugins, so they can be disabled
- 5b0286f39c2bb720eda92590dc61e939dd80caf7 [PLUGIN] Remove Test plugin
- c7dc2ce9168cea557ccdb2a2ed0370ae8053b129 [UI][SETTINGS] User notification settings with configurable transports (through plugins)
</pre><h3 id="day-5">Day 5</h3><p><b>No report.</b></p><h3 id="day-6">Day 6</h3><p><strong>Summary:</strong> Handle avatar upload. Fixes and displaying avatar</p><p><strong>Dedicated Time (in hours):</strong> 9</p><pre>
Relevant commits:
- c6ac0b46014b487f88150a7c98a4f597d70c512b [DB][FILE][AVATAR] Handle deleting files, change file and avatar tables
- 7e331f61598110377859044e5ce7a1e71c4bf86a [DB] Add entity base class to allow sharing methods such as 'create'
- 9e242f1e069527dfd23a86ed8deadd5b46ae802e [MEDIA][AVATAR] Handle avatar validation and storage
- 948f2e02071ffa96d77a45a182226abd54387893 [JS] Whitespace cleanup
- 30ab956c771ebf4cd20e9bb37951d4dbcae57e5a [DEPENDENCIES] Update dependencies
- c0cc9d69dde3e41367c4c8927e600b4f95236c83 [AUTOGENERATED] Update autogenerated code
- 3f68763156c055a204890fefa02762009697fe1c [AVATAR] Handle avatar upload without js and save and validate uploaded files
- c40a8417aafc79352c9c9bd66454b956575f05e6 [AVATAR] Fixed avatar upload, added avatar inline download and updated template and base controller
- 143eb10dc0ed58d15587bffe6d6ee4ee314f79fe [TOOLS] Update generate_entity_fields
- d211e4f5dde066998f11547e6268275c1a7ee89f [AUTOGENERATED] Update autogenerated code
</pre><hr><p><strong>Total hours this week:</strong> 23.5</p><hr><h3 id="day-7">Day 7</h3><p><b>No report.</b></p><h3 id="day-8">Day 8</h3><p><strong>Summary:</strong> Refactoring and finishing avatar upload</p><p><strong>Dedicated Time (in hours):</strong> 3</p><pre>
</pre><h3 id="day-9">Day 9</h3><p><strong>Summary:</strong> Design meeting with Diogo and start of implementation of feeds and data model</p><p><strong>Dedicated Time (in hours):</strong> 6</p><pre>
</pre><h3 id="day-10">Day 10</h3><p><b>No report.</b></p><h3 id="day-11">Day 11</h3><p><b>No report.</b></p><h3 id="day-12">Day 12</h3><p><strong>Summary:</strong> Data Representation and Modeling refactor, rebase with Eliseu, fixes</p><p><strong>Dedicated Time (in hours):</strong> 4</p><pre>
Relevant commits:
- bbdec3bc7e3d8339cb06bc1f6e148d65b4247119 [CORE] Data Representation and Modelling refactor
- 09680cbe84e06667e55b6050e758afc2f6a6fb85 [CORE][DB] Fix uses of db tables after previous restructure
- 9917a3d6842142c44ff2aeaafc2363b9b4faff26 [TOOLS] Fix bin/generate_entity_fields
- 154bd7e6d049a8f5b27cec7a6d89332709d8cf71 [AUTOGENERATED] Update autogenerated code
- 749b899b3c7710fc74a7ec7bd47d941a960a6e6d [DEPENDENCY] Update dependencies
- bc4ab499e6b7a10ff3c46a586edf8e703734d44e [COMMAND] Fix 'bin/console doctrine:database:create' by only loading defaults if we have a connection
</pre><h3 id="day-13">Day 13</h3><p><strong>Summary:</strong> Implement rudimentary network public feed, fixes and refactors and trying to figure out how to make a composite unique key</p><p><strong>Dedicated Time (in hours):</strong> 7</p><pre>
Relevant commits:
- 00de6c0bd3ed00d72974c7ac722b310064e04dcb [UTIL][Common] Implement 'isSystemPath'
- 1bb7461f7631de150d76fca86088b12784c2388a [CONTROLLER][AdminPanel] Add missing use statement
- 8bd08a095851b876769ea3cef0da603c6f38d34d [SECURITY] Wrap getUser in a try catch, in case the user doesn't exist
- ed0c82e6304c8d26808fc5c29e0fee804f2a9207 [STREAM][NetworkPublic] Add skeleton of public timeline and posting
- 44a14dd20fc400cdf768ba14e088c4e60ca2e4c5 [Media] Move code from media.php to utils.php
- e7f58205f8bf82d6b12a7529da346e3116241ef4 [DB] Add 'dql' method to wrap 'createQuery' and replace 'Gsactor' with 'GSActor'
- 3f2e73436278c31b1f0205d45a05130614943856 [Media] Use utils
- 87765c46ab0cd536d8ca1f2c93a8033136d03fb2 [UserPanel] Fix upload of avatar
- a94e418ec66e2b41451dfb50250f8ab21c47a524 [DB][DEFAULTS] Add avatar/default
- be06ff42cb8a7b5049a14a753dac35c25cb7563b [DB][AVATAR] Remove extraneous slash
</pre><hr><p><strong>Total hours this week:</strong> 20</p><hr><h3 id="day-14">Day 14</h3><p><strong>Summary:</strong> UI improvements; HTTP Client wrapper, fix notes getting posted 5 times; fix static pages, investigating error with phone number form, since maintainer replied</p><p><strong>Dedicated Time (in hours):</strong> 6</p><pre>
Relevant commits:
- c4fc59e749b1cd6f7b39fbee060bceeb1c49cd51 [DB][File] Remove timestamp, add actor_id
- 142783cdca4a61a3766a30aae4c47b5bf7e5d708 [MODULE][Left][UI][TAGS] Add Left module which handles fetching tags and followers, fix self tags
- 8b8625a786952e52d11b606b8e00ad319224fdcb [ENTITY] Add Entity base class to all entities
- dfa3dc5c31ab60bfa770d1a53f9b671db0dc3b14 [UI][LEFT] Add link to settings on avatar and personal info
- 95a3b25bea7836a662283c66b997e5315fe9d0fc [UI][CACHE][DB] Add follow counts to left panel, caching the results; change follow table
- fc480c404b759a20c5535823bf610f2d41146ceb [DB][FOLLOW] Change Follow table
- dc5087c442b1bc70bf2869abbef28cab71f7b18c [WRAPPER][HTTPClient] Static wrapper around Symfony's HTTP Client
- e3f3bcf5decbdc0730653019cd3b081ca89e5a32 [CONTROLLER] Stop propagation of kernel.controller so notices aren't posted 5 times. Not sure why it happens otherwise
- 870531527141f20a9712fb7d548b096a9802dd83 [UI][FAQ] Fix static pages
- 9a1c1edb0f45478e655b40f20fcdd6ed119bb754 [UI][LEFT] Add # before selftags, and link
</pre><h3 id="day-15">Day 15</h3><p><strong>Summary:</strong> Investigating phone number error upstream, small hack fix, small UI fixes</p><p><strong>Dedicated Time (in hours):</strong> 1.5</p><pre>
Relevant commits:
- 52d0e5b9ad27d12185a9f8499cc4a0af2369d706 [UI][ACCOUNT][SETTINGS] Hack to fix error related to phone number, until a solution is found upstream
- 7b13b54cc1bc223a0f816289c6153952f2f82695 [UI][SELFTAGS] Display 'none' if the user doesn't have selftags</pre><h3 id="day-16">Day 16</h3><p><b>No report.</b></p><h3 id="day-17">Day 17</h3><p><b>No report.</b></p><h3 id="day-18">Day 18</h3><p><b>No report.</b></p><h3 id="day-19">Day 19</h3><p><strong>Summary:</strong> Uploading and seeing attachments</p><p><strong>Dedicated Time (in hours):</strong> 6</p><pre>
Relevant commits:
- a24072eb2b00d198895321d7320e23a459cf5ad7 [SECURITY] Fix error in user registering where password wasn't hashed
- 935589c36ed13c38e45b4d3d6940d519a0552e4e [UI][MEDIA] Add actor avatar in feed timeline
- 469d2529b67650601fdd53802da7a07acd523ca2 [MEDIA][CACHE] Cache avatar queries and delete stale values; small refactoring
- a032acd7c3a8c2a9598452b04b3a7636c26027a6 [DEPENDENCY] Add tgalopin/html-sanitizer-bundle and transitively tgalopin/html-sanitizer
- 86371db0bd96679d1a7783daa5ff1b0ca91c70bb [UI][NOTE] Post and see attachments
- 79b1ab038d1d6f289d13892162cb7a62fcd1f31e [MEDIA] Only try to get an avatar if a user is logged in
- cd90c1e5931946d356319b2755cc85c9829ac18c [DB][MEDIA] Small database structure changes
</pre><h3 id="day-20">Day 20</h3><p><strong>Summary:</strong> Rebasing, studying AP plugin, start fixing it; help Eliseu</p><p><strong>Dedicated Time (in hours):</strong> 5</p><pre>
Relevant commits:
- 5a322f8bb818690213c692c53750f54be79363f4 [UI][TWIG] Small UI cleanup and change twig 'active' function to check for starts with, rather than equals
- 4755ff70624968b8e8de4b9441abc80ff5f50d3f [ActivityPub] Initial cleanup, removing 'die' statements, and ignoring the subfolders
</pre><hr><p><strong>Total hours this week:</strong> 18.5</p><hr><h3 id="day-21">Day 21</h3><p><b>No report.</b></p><h3 id="day-22">Day 22</h3><p><b>No report.</b></p><h3 id="day-23">Day 23</h3><p><b>No report.</b></p><h3 id="day-24">Day 24</h3><p><b>No report.</b></p><h3 id="day-25">Day 25</h3><p><b>No report.</b></p><h3 id="day-26">Day 26</h3><p><b>No report.</b></p><h3 id="day-27">Day 27</h3><p><strong>Summary:</strong> Fixes, helping Eliseu, reasearch adding entity loading to plugins, add note replying, start note favourite</p><p><strong>Dedicated Time (in hours):</strong> 7</p><pre>
Relevant commits:
- b27806c211440180e27d794754eb44b46ceab531 [MODULE] Fix avatars not loading
- f702130d69bd77cdbbad5fa17a96a6154cde7ab8 [CACHE] Fix bug in list caching
- de7e1cecbdf5038ecedac6a030bad32e348225be [NOTE][UI] Add note replying and UI displaying
</pre><hr><p><strong>Total hours this week:</strong> 7</p><hr><h3 id="day-28">Day 28</h3><p><strong>Summary:</strong> Start implemeting favorites and recycles, researching Doctrine plugin enitites; meeting with Diogo about federation in v3</p><p><strong>Dedicated Time (in hours):</strong> 6</p><pre>
</pre><h3 id="day-29">Day 29</h3><p><strong>Summary:</strong> Helping Eliseu with favorites and repeats, reviewing all code, adding docs</p><p><strong>Dedicated Time (in hours):</strong> 10</p><pre>
</pre><h3 id="day-30">Day 30</h3><p><strong>Summary:</strong> Implementing replies, refactoring, documentation, discussion with Diogo and Eliseu about next steps</p><p><strong>Dedicated Time (in hours):</strong> 9.5</p><pre>
</pre><h3 id="day-31">Day 31</h3><p><b>No report.</b></p></article></body>
</html>

View File

@ -0,0 +1,150 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
<title>Daily Report Viewer | GS SoC 2020</title>
<link rel="icon" href="../../../favicon.png">
<meta charset="utf-8">
<meta name="robots" content="noindex, nofollow, nosnippet">
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="stylesheet" href="https://hackersatporto.com/assets/css/main.css">
<style>
#side-menu #menu-title {
color: #7a7a7a !important;
font-weight: 700;
}
@media screen and (max-width: 1200px) {
#side-menu #menu-title {
display:none;
}
}
</style>
</head>
<body>
<header id="header">
<nav id="side-menu">
<label for="show-menu" id="menu-button">Menu</label>
<input id="show-menu" role="button" type="checkbox">
<ul id="menu">
<li><a href="../"><strong>&larr; GS GSoC 2020</strong></a></li>
<li><a href="archive">Previous Months</a></li>
<li id="menu-title">STUDENTS</li>
<li><a href="index.php?student=hugo">hugo</a></li><li><a href="index.php?student=susannadiv">susannadiv</a></li><li><a class="current" href="index.php?student=rainydaysavings">rainydaysavings</a></li></ul>
</nav>
<h1>Daily Report Viewer | GS SoC 2020</h1>
<p>Organized by <strong><a href="https://www.diogo.site/">Diogo Cordeiro</a></strong></p>
<p>Mentors: <a href="https://www.diogo.site/">Diogo Cordeiro</a>, <a href="https://loadaverage.org/XRevan86">Alexei Sorokin</a>, <a href="https://dansup.com">Daniel Supernault</a>, <a href="http://status.hackerposse.com/rozzin">Joshua Judson Rosen</a> and <a href="https://github.com/phablulo">Phablulo Joel</a></p>
</header>
<article id="student_report"><h2>Showing reports for rainydaysavings</h2><h3 id="day-0">Day 0</h3><p><b>No report.</b></p><h3 id="day-1">Day 1</h3><p><b>No report.</b></p><h3 id="day-2">Day 2</h3><p><b>No report.</b></p><h3 id="day-3">Day 3</h3><p><b>No report.</b></p><h3 id="day-4">Day 4</h3><p><strong>Summary:</strong> Accessibility improvements, forms fixes</p><p><strong>Dedicated Time (in hours):</strong> 6</p><pre>
- Checkbox trick needs to be focused by keyboard and give visual feedback of this
Relevant commits:
- d8f9652f82@upstream [UI] Accessibility improvements all around
- fccc5b90c5@upstream [UI] Fixed issue where certain form element would be on top the left panel
- 6d528400f4@upstream [ROUTES] Fix use statement
</pre><h3 id="day-5">Day 5</h3><p><strong>Summary:</strong> Notifications settings page work and study</p><p><strong>Dedicated Time (in hours):</strong> 4</p><pre>
- Exploring different ways to show notifications settings
- Helping Hugo with avatar page issues
Relevant commits:
- 99f30d8156@upstream [UI] Notifications settings page CSS work
</pre><h3 id="day-6">Day 6</h3><p><strong>Summary:</strong> Notifications settings tabs functionality and styling done</p><p><strong>Dedicated Time (in hours):</strong> 10</p><pre>
- Even though "checkbox trick" is used accessibility wasn't taken out of the window, everything can be accessed via keyboard
Relevant commits:
- 4e86d10802@upstream [UI] Notification settings tabs functional
- 61bafef818@upstream [UI] Notification settings styling progress
- c6d66eb0d9@upstream [UI] Notifications settings styling finished
</pre><hr><p><strong>Total hours this week:</strong> 20</p><hr><h3 id="day-7">Day 7</h3><p><b>No report.</b></p><h3 id="day-8">Day 8</h3><p><b>No report.</b></p><h3 id="day-9">Day 9</h3><p><b>No report.</b></p><h3 id="day-10">Day 10</h3><p><b>No report.</b></p><h3 id="day-11">Day 11</h3><p><strong>Summary:</strong> Small fixes all around and right panel added</p><p><strong>Dedicated Time (in hours):</strong> 10</p><pre>
Relevant commits:
- c51df09b70@upstream [UI] Right panel added
- a665b4c882@upstram [UI] Additional fixes to settings page
- 61b82aeda8@upstream [UI] Small general settings CSS fixes
- 159fc7cabe@upstream [UI] Settings small fix
- 9e3c160253@upstream [UI] Notification settings checkbox placement fix
</pre><h3 id="day-12">Day 12</h3><p><strong>Summary:</strong> Complete CSS overhaul</p><p><strong>Dedicated Time (in hours):</strong> 12</p><pre>
- New theme, firefox's banding on the last one was unacceptable;
- Various fixes all around (eg. right panel checkbox, language selector arrow placement, fixing shadows on top of eachother, etc...);
- Colours used are now variables as well;
Relevant commits:
- 02350befcb@upstream [UI] Complete base CSS overhaul and new theme
- 9c05a7d4b9@upstream [UI] Settings theme according to base theme
- bfa58c4df7@upstream [UI] Right panel checkbox size fix
- 5efef8dab5@upstream [UI] Left panel theme now looks like it should
</pre><h3 id="day-13">Day 13</h3><p><strong>Summary:</strong> More polish and feed structure work</p><p><strong>Dedicated Time (in hours):</strong> 12</p><pre>
- Previous design wasn't consistent with the feed mockup, even more overall work was done in that regard;
- Right panel will be contextual, on feed it might show plugins as well as RSS and such;
Relevant commits:
- f7d423a2c8@upstream [UI] Public feed responsive CSS work
- 0d642b2e60@upstream [UI] Responsive settings CSS work
- 6e198f1e7f@upstream [UI] Responsive base design polish
- 618b77a195@upstream [UI] Feed structure done, feed CSS work
- a847317df8@upstream [UI] Polishing design, settings pages
- af2951562b@upstream [UI] Polishing base template
</pre><hr><p><strong>Total hours this week:</strong> 34</p><hr><h3 id="day-14">Day 14</h3><p><b>No report.</b></p><h3 id="day-15">Day 15</h3><p><b>No report.</b></p><h3 id="day-16">Day 16</h3><p><b>No report.</b></p><h3 id="day-17">Day 17</h3><p><strong>Summary:</strong> Fixing new dynamic left panel view</p><p><strong>Dedicated Time (in hours):</strong> 4</p><pre>
- Early implementation of notices style and fixing it's structure
Relevant commits:
- 903e6caf89@upstream [UI] Fix left panel new dynamic components view
- 3fa5ea645a@upstream [UI] Fixing timeline notice structure and CSS
</pre><h3 id="day-18">Day 18</h3><p><strong>Summary:</strong> Finalizing timeline structure and CSS, further CSS consistency work</p><p><strong>Dedicated Time (in hours):</strong> 12</p><pre>
- new reset CSS to fix even more browser inconsistencies, firefox for some reason had a margin of 1px for textareas too, jesus
Relevant commits:
- 33e84cf21d@upstream [UI] New reset CSS to deal with firefox's abysmal and evil defaults
- 049951f021@upstream [UI] Finalizing timeline structure and CSS
- 4d16951572@upstream [UI] Fixes to settings CSS
</pre><h3 id="day-19">Day 19</h3><p><strong>Summary:</strong> Fixing login, register and static pages</p><p><strong>Dedicated Time (in hours):</strong> 6</p><pre>
- Worked on the scope of notes, the "To:" option, haven't managed to make it work yet;
Relevant commits:
- 2ab8a583f3@upstream [UI] Fixing static pages styling
- 9de272e616@upstream [UI] Fixing issue where notices wouldn't break text
- 0214e68070@upstream [UI] Fixing login and register styling, refactoring
</pre><h3 id="day-20">Day 20</h3><p><strong>Summary:</strong> Post scope initial implementation</p><p><strong>Dedicated Time (in hours):</strong> 8</p><pre>
- discussion with Hugo about what's next and organizing ideas
Relevant commits:
4ee99a6553@upstream [COMPONENT] Posts scope initial form
</pre><hr><p><strong>Total hours this week:</strong> 30</p><hr><h3 id="day-21">Day 21</h3><p><b>No report.</b></p><h3 id="day-22">Day 22</h3><p><b>No report.</b></p><h3 id="day-23">Day 23</h3><p><b>No report.</b></p><h3 id="day-24">Day 24</h3><p><strong>Summary:</strong> Work on new notice form</p><p><strong>Dedicated Time (in hours):</strong> 8</p><pre>
Relevant commits:
- 504c5e4ac6@upstream [UI] Links removed since they are part of a plugin
- 52e7d4e23f@upstream [UI] Post form new structure first styling implementation
- 27b6995433@upstream [UI] Small border fix
- 0cc8e29415@upstream [COMPONENTS] Small fix
- 8d61925f70@upstream [UI][TWIG] Better, divided form rendering of the posting form
- 26f60291e4@upstream [UI] Small border radius problem fix
</pre><h3 id="day-25">Day 25</h3><p><strong>Summary:</strong> Home timeline route and controller work</p><p><strong>Dedicated Time (in hours):</strong> 12</p><pre>
- A random welcoming string now appears in the posting form
Relevant commits:
- 55b9224cd3@upstream [TWIG] Timeline structure rework
- c0c6af2871@upstream [ROUTE] Home timeline added
- b2e7a5aac3@upstream [CONTROLLER] Home timeline controller work
- bb2039e074@upstream [UI] Posting form styling work
- 55527d3e63@upstream [COMPONENT] Posting form now shows a random default string
</pre><h3 id="day-26">Day 26</h3><p><strong>Summary:</strong> Reply controller initial work, routes fixes and timeline rework</p><p><strong>Dedicated Time (in hours):</strong> 12</p><pre>
- Working with Hugo and accessing the current progress
Relevant commits:
- 6abac287b9@upstream [TWIG] Timeline template rework
- a582089201@upstream [ROUTE] Home timeline route url now shows accordingly as the user nickname
- dbf3c3b432@upstream [UI] Posting form re-styling
- d40736f6be@upstream [CONTROLLER] Reply initial implementation
- 42fca5a7ee@upstream [COMPONENT] Posting form restructure and minor fixes
</pre><h3 id="day-27">Day 27</h3><p><strong>Summary:</strong> Acessibility work, post creation form polish</p><p><strong>Dedicated Time (in hours):</strong> 12</p><pre>
Relevant commits:
- bcf66b25cc@upstream [TWIG] Timeline attachment form restructure
- b3855cb824@upstream [Controller] Attempting to fix home timeline query
- 8ce979dbbf@upstream [UI] No focus outlines by default
- 81e5d51bd5@upstream [UI] Custom and accessible checkboxes, radio buttons and normal buttons
- 2718bfecf9@upstream [COMPONENT] Fixing typo
</pre><hr><p><strong>Total hours this week:</strong> 44</p><hr><h3 id="day-28">Day 28</h3><p><b>No report.</b></p><h3 id="day-29">Day 29</h3><p><strong>Summary:</strong> Browser intercompatibility work, fixes</p><p><strong>Dedicated Time (in hours):</strong> 4</p><pre>
Relevant commits:
- dcc0e8acca@upstream [UI] Checkboxes now display a custom tick
- 8921abe012@upstream [UI] Browser compatibility improvements, various small fixes
</pre><h3 id="day-30">Day 30</h3><p><b>No report.</b></p><h3 id="day-31">Day 31</h3><p><b>No report.</b></p></article></body>
</html>

View File

@ -0,0 +1,89 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
<title>Daily Report Viewer | GS SoC 2020</title>
<link rel="icon" href="../../../favicon.png">
<meta charset="utf-8">
<meta name="robots" content="noindex, nofollow, nosnippet">
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="stylesheet" href="https://hackersatporto.com/assets/css/main.css">
<style>
#side-menu #menu-title {
color: #7a7a7a !important;
font-weight: 700;
}
@media screen and (max-width: 1200px) {
#side-menu #menu-title {
display:none;
}
}
</style>
</head>
<body>
<header id="header">
<nav id="side-menu">
<label for="show-menu" id="menu-button">Menu</label>
<input id="show-menu" role="button" type="checkbox">
<ul id="menu">
<li><a href="../"><strong>&larr; GS GSoC 2020</strong></a></li>
<li><a href="archive">Previous Months</a></li>
<li id="menu-title">STUDENTS</li>
<li><a href="index.php?student=hugo">hugo</a></li><li><a class="current" href="index.php?student=susannadiv">susannadiv</a></li><li><a href="index.php?student=rainydaysavings">rainydaysavings</a></li></ul>
</nav>
<h1>Daily Report Viewer | GS SoC 2020</h1>
<p>Organized by <strong><a href="https://www.diogo.site/">Diogo Cordeiro</a></strong></p>
<p>Mentors: <a href="https://www.diogo.site/">Diogo Cordeiro</a>, <a href="https://loadaverage.org/XRevan86">Alexei Sorokin</a>, <a href="https://dansup.com">Daniel Supernault</a>, <a href="http://status.hackerposse.com/rozzin">Joshua Judson Rosen</a> and <a href="https://github.com/phablulo">Phablulo Joel</a></p>
</header>
<article id="student_report"><h2>Showing reports for susannadiv</h2><h3 id="day-0">Day 0</h3><p><b>No report.</b></p><h3 id="day-1">Day 1</h3><p><b>No report.</b></p><h3 id="day-2">Day 2</h3><p><b>No report.</b></p><h3 id="day-3">Day 3</h3><p><strong>Summary:</strong> Studied Pleroma API + Mastodon enpoints in relation to the implemented frontend + started FavouriteList retireval call</p><p><strong>Dedicated Time (in hours):</strong> 7</p><pre></pre><h3 id="day-4">Day 4</h3><p><strong>Summary:</strong> Replaced Public page's API call</p><p><strong>Dedicated Time (in hours):</strong> 5.5</p><pre></pre><h3 id="day-5">Day 5</h3><p><strong>Summary:</strong> Workaround on Pleroma login documentation issue + started implementation of API calls</p><p><strong>Dedicated Time (in hours):</strong> 6</p><pre></pre><h3 id="day-6">Day 6</h3><p><strong>Summary:</strong> Redux-ed login and signup options</p><p><strong>Dedicated Time (in hours):</strong> 5</p><pre></pre><hr><p><strong>Total hours this week:</strong> 23.5</p><hr><h3 id="day-7">Day 7</h3><p><strong>Summary:</strong> Finished login & signup API calls</p><p><strong>Dedicated Time (in hours):</strong> 5.15</p><pre></pre><h3 id="day-8">Day 8</h3><p><strong>Summary:</strong> Studied authentication token (placement + state managment) + getCaptcha implementation for registering</p><p><strong>Dedicated Time (in hours):</strong> 6.5</p><pre></pre><h3 id="day-9">Day 9</h3><p><strong>Summary:</strong> Registration Code Setup & working with oauth tokens + Added API call for home timeline data calling + Added Login, Signup, tokens & captcha reload code</p><p><strong>Dedicated Time (in hours):</strong> 12.5</p><pre>
Relevant commits:
- e2d1bb380b71fe80c270dd2246ce39b32dae34cf Registration Code Setup & working with oauth tokens
- ff519321ef745f2753abe0afa1b880d63bbc7a71 Added API call for home timeline data calling
- 12fcea005ac4d1c4a50b87dfe96c7aa02c383af6 Added Login, Signup, tokens & captcha reload code</pre><h3 id="day-10">Day 10</h3><p><strong>Summary:</strong> Finished status object for timelines</p><p><strong>Dedicated Time (in hours):</strong> 5</p><pre></pre><h3 id="day-11">Day 11</h3><p><strong>Summary:</strong> Post display on all timelines</p><p><strong>Dedicated Time (in hours):</strong> 8</p><pre>
Relevant commits:
- 414df692d5399840fc19fb61f677681286e0c909
- 2d7e470c6fa4fc530ad374c4744394a36bd10d79</pre><h3 id="day-12">Day 12</h3><p><strong>Summary:</strong> Added html parser for tag in text posts removal + adding make post component endpoint</p><p><strong>Dedicated Time (in hours):</strong> 5.5</p><pre></pre><h3 id="day-13">Day 13</h3><p><strong>Summary:</strong> Post-making component with media upload + retweet/unretwwet endpoint</p><p><strong>Dedicated Time (in hours):</strong> 14</p><pre>
Relevant commits:
- b834ee4b7af6bd1cae19fe71626c9116f9f24dfd
- 3d852e982637849c57973f6bcbec98c3a9532385</pre><hr><p><strong>Total hours this week:</strong> 56.65</p><hr><h3 id="day-14">Day 14</h3><p><strong>Summary:</strong> Showing profile data on Navbar and logout feature working + Implementing retweets mechanism</p><p><strong>Dedicated Time (in hours):</strong> 13.5</p><pre>
Relevant commits:
- 60f7c6ef6b5c43c3a604e28e228667784a40e601
- a8dfac7f03e3ad841ed5c215431b4774d08a3a7d</pre><h3 id="day-15">Day 15</h3><p><strong>Summary:</strong> Getting statuses for the selected users on timeline + Deleting a post</p><p><strong>Dedicated Time (in hours):</strong> 12</p><pre>
Relevant commits:
- bf619b97b33170af520bdd3ea4d8e2e27388d918
- a69d157fbb1d469633eb216c0cca374eb7734503</pre><h3 id="day-16">Day 16</h3><p><strong>Summary:</strong> Reacting with emoji + emoji counter endpoint implementation + beginning of reply with comments</p><p><strong>Dedicated Time (in hours):</strong> 11</p><pre></pre><h3 id="day-17">Day 17</h3><p><strong>Summary:</strong> Finished working on In conversation dialog box for replies history + creating comments</p><p><strong>Dedicated Time (in hours):</strong> 15</p><pre>
Relevant commits:
- 3ec0e6e3f9c9266e575c1a30608fd86a704113ac
- c05f6e029d9d12c0f18fe6fb3e518262b1f2692c</pre><h3 id="day-18">Day 18</h3><p><strong>Summary:</strong> Show notifications + adding mark all notifications as read</p><p><strong>Dedicated Time (in hours):</strong> 9.5</p><pre>
Relevant commits:
- 97138636645b78433b0bf7b93366e9cb2eaa2ed4
- 5f01f1dc4195dd67f17d07cf9aa2fdfef9f9e52b</pre><h3 id="day-19">Day 19</h3><p><strong>Summary:</strong> Added ProfileTile followers/following design + fetch user's favourite timeline</p><p><strong>Dedicated Time (in hours):</strong> 4.5</p><pre></pre><h3 id="day-20">Day 20</h3><p><strong>Summary:</strong> ProfileTIle endpoint implementation + followers/following counter</p><p><strong>Dedicated Time (in hours):</strong> 8</p><pre>
Relevant commits:
- 24bca6f27261ef2680718a0ba6fbc7c8e4aeaad9</pre><hr><p><strong>Total hours this week:</strong> 73.5</p><hr><h3 id="day-21">Day 21</h3><p><strong>Summary:</strong> ProfileTile + follow + avatar implementation</p><p><strong>Dedicated Time (in hours):</strong> 11</p><pre>
Relevant commits:
- 1507bef12dc67f443d8ea986e845af3bd5248373</pre><h3 id="day-22">Day 22</h3><p><strong>Summary:</strong> Working on follow/unfollow and followers/followings list + Showing avatar in statuses & bio in profile tile</p><p><strong>Dedicated Time (in hours):</strong> 7.5</p><pre>
Relevant commits:
- aa94f2936affca608752827f83d336b706e41099
- cb7de04e94acd532677a5f449305241887d3755f</pre><h3 id="day-23">Day 23</h3><p><strong>Summary:</strong> FInishing EidtProfile + Uploading media in post and show media in statuses + Showing followings/followers list in profile</p><p><strong>Dedicated Time (in hours):</strong> 14.5</p><pre>
Relevant commits:
- 9b34a768ff7616408e0955614a8aa52aae94c76a
- 144094729048384b33856ad20b129d3cad1c91d5
- 074f27d9989adec316a39ca6414fb370b3d6dba2</pre><h3 id="day-24">Day 24</h3><p><strong>Summary:</strong> Blovk/unblock users + Mute/Unmute users + Favourite timeline + Direct Messages timeline + all necessary routing and buttons</p><p><strong>Dedicated Time (in hours):</strong> 15.5</p><pre>
Relevant commits:
- fd3b1a06124d4a111615299fc06e13d7f16c34c6
- 539cb4461863133e3938524a849b5503937438c1
- c56253f9c76c84da6459631d4610b86fe98e1fa6
- ee4a2076938a0b08c9f1a4240bc4f9e1c40e542e</pre><h3 id="day-25">Day 25</h3><p><strong>Summary:</strong> Fix onClick function for followers/following tile + refine routing for user's page</p><p><strong>Dedicated Time (in hours):</strong> 7.5</p><pre></pre><h3 id="day-26">Day 26</h3><p><strong>Summary:</strong> Fixing profile routes on multiple places and hiding profile tile when logout + assuring profiles links working from anywhere including followers/followings</p><p><strong>Dedicated Time (in hours):</strong> 10.5</p><pre>
Relevant commits:
- 630ee89275cb56c21147c74ac8a952f96f189d21
- 760c2a7a83c0ebcb0749d2d3b6b40b06a0810728
- d31ef84328e3593e04baa2b85834c74028cbbc86</pre><h3 id="day-27">Day 27</h3><p><strong>Summary:</strong> Mark all notifications as done + Showing post content snippet in notification bar</p><p><strong>Dedicated Time (in hours):</strong> 11</p><pre>
Relevant commits:
- d51ce601adf5b8d352df679512462c77f519eadd</pre><hr><p><strong>Total hours this week:</strong> 77.5</p><hr><h3 id="day-28">Day 28</h3><p><strong>Summary:</strong> Sending direct message (post) to user + not allowing retweet for direct messages</p><p><strong>Dedicated Time (in hours):</strong> 11</p><pre>
Relevant commits:
- 4f8959ca5feba11e24cf33a261029435f1201e3a
- b303e002e2e24ca707313168abd8dd4b4ad9fa2c</pre><h3 id="day-29">Day 29</h3><p><strong>Summary:</strong> Final conversation + overall design touchups</p><p><strong>Dedicated Time (in hours):</strong> 7</p><pre>
Relevant commits:
- 8d05f99b82a467655954e8d4fda949a9411900d4
- 8a92f5747fa10392126f9bb26b94a05814882487</pre><h3 id="day-30">Day 30</h3><p><b>No report.</b></p><h3 id="day-31">Day 31</h3><p><b>No report.</b></p></article></body>
</html>

View File

@ -0,0 +1,206 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
<title>Daily Report Viewer | GS SoC 2020</title>
<link rel="icon" href="../../../favicon.png">
<meta charset="utf-8">
<meta name="robots" content="noindex, nofollow, nosnippet">
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="stylesheet" href="https://hackersatporto.com/assets/css/main.css">
<style>
#side-menu #menu-title {
color: #7a7a7a !important;
font-weight: 700;
}
@media screen and (max-width: 1200px) {
#side-menu #menu-title {
display:none;
}
}
</style>
</head>
<body>
<header id="header">
<nav id="side-menu">
<label for="show-menu" id="menu-button">Menu</label>
<input id="show-menu" role="button" type="checkbox">
<ul id="menu">
<li><a href="../"><strong>&larr; GS GSoC 2020</strong></a></li>
<li><a href="archive">Previous Months</a></li>
<li id="menu-title">STUDENTS</li>
<li><a class="current" href="index.php?student=hugo">hugo</a></li><li><a href="index.php?student=susannadiv">susannadiv</a></li><li><a href="index.php?student=rainydaysavings">rainydaysavings</a></li></ul>
</nav>
<h1>Daily Report Viewer | GS SoC 2020</h1>
<p>Organized by <strong><a href="https://www.diogo.site/">Diogo Cordeiro</a></strong></p>
<p>Mentors: <a href="https://www.diogo.site/">Diogo Cordeiro</a>, <a href="https://loadaverage.org/XRevan86">Alexei Sorokin</a>, <a href="https://dansup.com">Daniel Supernault</a>, <a href="http://status.hackerposse.com/rozzin">Joshua Judson Rosen</a> and <a href="https://github.com/phablulo">Phablulo Joel</a></p>
</header>
<article id="student_report"><h2>Showing reports for hugo</h2><h3 id="day-0">Day 0</h3><p><b>No report.</b></p><h3 id="day-1">Day 1</h3><p><strong>Summary:</strong> Review database structure</p><p><strong>Dedicated Time (in hours):</strong> 11</p><pre></pre><h3 id="day-2">Day 2</h3><p><strong>Summary:</strong> Finish database review, open rfc, update script and autogenerated code</p><p><strong>Dedicated Time (in hours):</strong> 11</p><pre>
Relevant commits:
- 20b0c4a3a6b38b3631fdd00fd967ff973dde0e77 [DB][REFACTOR] Restructure the database
- 06efbb28abed57cb37c870e097bcdc7914d1a164 [TOOLS] Update bin/generate_entity_fields script
- ebf8e2ec0e2da494358d59d16d066e7e812487e8 [AUTOGENERATED] Update autogenerated code
- 5b5e66898b47bdb0fe8dbd6d3814fb6f1c5904e0 [MODULE] Move 'foreign' entities from core to a module
</pre><h3 id="day-3">Day 3</h3><p><strong>Summary:</strong> Helping Eliseu and investing a potential Doctrine bug</p><p><strong>Dedicated Time (in hours):</strong> 1.5</p><pre></pre><h3 id="day-4">Day 4</h3><p><strong>Summary:</strong> Investigate Doctrine bug, fix database restructure commit, changed zero dates to CURRENT_TIMESTAMP, fixed Elise's rebase and last commit; researching how to implement queueing (symfony messenger) and investivating avatar 404 bug</p><p><strong>Dedicated Time (in hours):</strong> 7</p><pre>
Relevant commits:
- a17072af6291d8f56b7f37901caf39d3b048033e [DB][REFACTOR] Restructure the database
- a56d64678b22158cd04ecf35200a975838f1a7a5 [DB] Replace zero dates with CURRENT_TIMESTAMP and add defaults to all 'created' or 'modified'
- 38a615aeac33ca1496da391aa23911bd64dc5a07 (v3)
</pre><h3 id="day-5">Day 5</h3><p><strong>Summary:</strong> Design discussion with Diogo, updating dependencies, adding wikimedia/composer-merge-plugin as a dep., fix deprecated use of class, fix routes, add controller base class, dummy notices</p><p><strong>Dedicated Time (in hours):</strong> 7.5</p><pre>
Relevant commits:
- 4224346dbc6aade65673b4db92bc1ee07d7dff2d [COMMAND][DEPRECATION][FIX] Fix app:events's deprecation
- b6426445b77c7e3d46d9a9169145346015e73a3b [ROUTE] Fix routes, config_admin got deleted
- 49b10bed87e2f790cffa92e271c92e57dceed363 [CONTROLLER] Add Controller base class, which handles rendering templates if requested HTML or json, accordingly
- 7b53a32d705b554099f44b0566076c11eda4f706 [FIX] Make ModulesManager check if file exists
- a227bec59d07a867194a70d485bd179cb7f50508 [CONTROLLER] Show dummy notices in main/all
</pre><h3 id="day-6">Day 6</h3><p><b>No report.</b></p><hr><p><strong>Total hours this week:</strong> 38</p><hr><h3 id="day-7">Day 7</h3><p><b>No report.</b></p><h3 id="day-8">Day 8</h3><p><strong>Summary:</strong> Implement and test queue wrapper. Investigating http caching. Configure HTTP cache, add cache wrapper, refactor log wrapper</p><p><strong>Dedicated Time (in hours):</strong> 6</p><pre>
Relevant commits:
- a2024f83eb1416c7210dc59e0224839cca5253e9 [DB] Delete queue_item table, as queueing will be handled by messenger
- 50c27b500ffd975e8e0b5d59c792beaa729c5d93 [DEPENDENCY] Add symfony/messenger as a dependency
- 4a249209b086e091b567a181a6c5ba8ddac68354 [QUEUE] Add queueing wrapper, default configuration and example usage
- 92467685b303486bc0f9b315c2f0edcbc1d9d832 [REFACTOR] Refactor log wrapper
- 7b687a666b71a82d9592d8b27ecb81398c133416 [DEPENDENCY] Add symfony/cache as a dependency
- 2f371019f7253da186de7c7f4e4a7aced92decf6 [CACHE] Add a static wrapper around symfony/cache
- 311258139faa63b12d2a6e99a90790f1b4b17d75 [CACHE][HTTP] Configure simple HTTP cache
</pre><h3 id="day-9">Day 9</h3><p><strong>Summary:</strong> Miscellaneous fixes, add ds extension and ring buffer data structure</p><p><strong>Dedicated Time (in hours):</strong> 6</p><pre>
Relevant commits:
- bcd4780623afe1a1ba032d38653b95c480b9cb01 [FORMATTING][DEFAULTS] Fix formatting and remove redundant config defaults
- 272463678ed5e76d5d3b8fb01ca7d41e52b462b7 [FIX] Fix cache wrapper
- e73965b12f85c60f4920474530fd0f04c9f09b09 [FIX] Fix configure script to use quotation marks properly
- 177899147d0fb0ead7fab4556decbc1b4d04f775 [DOCKER][PHP][EXTENSION] Add PHP ds extension to docker PHP image
- 3eb7c318d585572e40c945831d0216cdee11ce15 [PHP][EXTENSION][POLYFILL] Add php-ds polyfill, which is used if the native extension is not available
- e87cc1fbd48bdf508ed9c72ba6548363564ab25e [DEFAULTS][FIX] Fix defaults to use value from environment
- c4c0e857302999df22f55b590f760514883b92f1 [DOCKER] Move certbot files to hidden folder, so it's ignored by GNU global
- 4f917b921ab9319928340222c9f9300d1a0635c3 [DATASTRUCTURE] Add Ring Buffer datastructure
- 6cfd022e2734376708ada3fa50edbaa38108f73a [CACHE] Extend the static wrapper to support working with lists in caches that don't natively support them
</pre><h3 id="day-10">Day 10</h3><p><strong>Summary:</strong> Add msgpack and redis extensions to docker image, add support for multiple cache pools</p><p><strong>Dedicated Time (in hours):</strong> 7</p><pre>
Relevant commits:
- 5c7ef011aab8f4086bf57e26f0efbc350368230a [DEFAULTS] Add modified time to config table (as value) and only reload the defaults if the file is newer
- 4bd1a64c50a5e8285fb25eb6babfe2a2de701e6c [DOCKER] Add msgpack and redis extensions to docker image
- cb429885e0c028219e460f213bd9ea022c09f1ae [CACHE] Add support for multiple pools with the syntax (as an example) SOCIAL_CACHE_ADAPTER='default=redis://localhost:6379,memcached://localhost:11211;db.config=apcu://'
</pre><h3 id="day-11">Day 11</h3><p><b>No report.</b></p><h3 id="day-12">Day 12</h3><p><b>No report.</b></p><h3 id="day-13">Day 13</h3><p><strong>Summary:</strong> Discussion with Diogo regarding next steps on the software's architecture design</p><p><strong>Dedicated Time (in hours):</strong> 5</p><pre>
</pre><hr><p><strong>Total hours this week:</strong> 24</p><hr><h3 id="day-14">Day 14</h3><p><strong>Summary:</strong> Discussion with Diogo about ways to handle UI events. Added special support for redis to the cache. Fixes and refactoring</p><p><strong>Dedicated Time (in hours):</strong> 4</p><pre>
Relevant commits:
- ca560fc8191c82227ac7d46e65ca032636ca74a7 [DOCKER] Updated php image so redis is compiled with LZ4 compression available, as it's the fastest at decompressing and really fast at compressing. Read performance is more important, with this being used as a cache
- 14c6a7c42b67730d511c6b567200eaa7b70d9a37 [DATASTRUCTURE] Refactor and implement array indexing methods
- 38dc05edd24f17f6641c2f4697f433319fb0de60 [CACHE][REDIS][FIX] Add special support for redis (fixed size lists), set method and general fixes</pre><h3 id="day-15">Day 15</h3><p><strong>Summary:</strong> Review enhanncement tagged issues with Diogo and decide what to implement in v3</p><p><strong>Dedicated Time (in hours):</strong> 3.5</p><pre>
</pre><h3 id="day-16">Day 16</h3><p><strong>Summary:</strong> Fixing redis extension use lz4 build failure, adding a redis polyfill placeholder, to allow autoloading the necessary classes if the extension isn't installed. Discussion with Diogo and Eliseu about the features for v3. Fix use of redis</p><p><strong>Dedicated Time (in hours):</strong> 5</p><pre>
</pre><h3 id="day-17">Day 17</h3><p><strong>Summary:</strong> Trying to understand how to implement doctrine caching, fixing symfony translator PR, so it's hopefully accepted, update DB wrapper so entity names are provided without the namespace</p><p><strong>Dedicated Time (in hours):</strong> 3</p><pre>
Relevant commits:
- 6e405270d6e56f6a264d182e9321a861c8ad5f10 [DATABASE][WRAPPER] Update DB wrapper so entity names are provided without the namespace
- https://github.com/someonewithpc/symfony/commit/e7e8a95d423947545313cbdd915fcfd214be7412 Add support for calling 'trans' with ICU formatted messages
</pre><h3 id="day-18">Day 18</h3><p><strong>Summary:</strong> Design meeting with Diogo</p><p><strong>Dedicated Time (in hours):</strong> 3</p><pre>
</pre><h3 id="day-19">Day 19</h3><p><strong>Summary:</strong> Studying how to implement login with Symfony, and social's v2 implementation, reading about best practices about password storage</p><p><strong>Dedicated Time (in hours):</strong> 3</p><pre>
</pre><h3 id="day-20">Day 20</h3><p><strong>Summary:</strong> Start implementing user login and supporting systems</p><p><strong>Dedicated Time (in hours):</strong> 8</p><pre>
Relevant commits:
- a9629d1d064cd37709e95a906318ae99394decad [DB] Re-import the local_group table, as it'll be used as per the new group semantics
- 992d2e598bc70ff68a69617fcbe9b0d82fa66702 [DB][WRAPPER] Add findBy method which allows finding entities with a complex expression
- e27042af3ee3b7d68d28aa004e47262a657ccc5e [DEFAULTS] Update default reserved usernames
- 88c9f03e0827e8f16fd56e9c3f9f0c1ff0ecb9dd [UTIL][NICKNAME] Import nickname utilities and exceptions from v2
- 4cb4af4791781ccb80461968f6a8a1afa91cc315 [REFACTOR] Change methods in the Common class to camelCase, add isSystemPath (previously in Nickname.php)
</pre><hr><p><strong>Total hours this week:</strong> 29.5</p><hr><h3 id="day-21">Day 21</h3><p><strong>Summary:</strong> A lot of fixing and refactoring, rename user table, add login and logout functionality, implement password hashing</p><p><strong>Dedicated Time (in hours):</strong> 8</p><pre>
Relevant commits:
- 4cf9e52eda73717cc5e1433b56b6987c6d8a3b32 [CACHE] Tiny fix
- 14471bd49c18f5ab6eb4662147fe2f32812d5096 [DB] Re-import the local_group table, as it'll be used as per the new group semantics
- f612e7653ddf90cfc5064e711c51bb2349880bd4 [DB][WRAPPER] Add findBy method which allows finding entities with a complex expression
- 8fbaa1019b4d13acac584d311be016039a89165e [DEFAULTS] Update default reserved usernames
- 643c4f37c05547181856c3da946c490825939370 [UTIL][NICKNAME] Import nickname utilities and exceptions from v2
- e09fbf32dac403f6e8a388857dcb808ba1f77130 [REFACTOR] Change methods in the Common class to camelCase, add isSystemPath (previously in Nickname.php)
- 03d521f460aa0323d2c11d48ba84cfc2595982c9 [I18n] Remove I18nHelper
- cfadcfb171bde7288e8d4dbdcab213a2d1b4a04f [CONFIG] Change way configuration is done to use Symfony's system instead of environment vars
- 21847e9a8d8e64b2f74e84a949db1f4cc0aa72ea [DEPENDENCY] Add symfony/config as a dependency
- c314ac2a2b7944161df6896a33aaa9aba6625c52 [DB] Rename user table to local_user, since doctrine shits itself otherwise ._.
- 78988a8a4e3a124db98a1b5f909769e20f2406e3 [AUTOGENERATED] Update autogenerated code
- 82665ec7869fefd238fa765284196d5d55af4316 [TOOLS] Update shebang on scripts to use the correct php executable
- 147149cf69a92e24b926173afa60ca908e3b82f3 [I18N] Remove support for context until it proves necessary, as it broke the code
- 34b45a54bcea26af1f4a0e359948300a558d3918 [REFACTOR] Refactor GNUsocial.php so it initializes itself as a service
- f36d0963a500eca97efb9ce6eb91a28debb76b7a [UTILS] Make Common::config return the unserialized value instead of the entity
- b62058a23f2292d89e4d400ba5c73017da66f418 [UTILS] Remove Functional::arity as it got merged upstream as Functional\ary
- 3bfbf4a5ff73c1ee6df5262c303e2771ab9c40b4 [UI][SESSION] Add login and logout pages
- Break
- da63805a2761df8a4fd7acf8e0d50411c8da8930 [DEFAULTS][FIX] Fix logic error that kept reloading the table when the file wasn't modified
- 3b818ce3c40f91c61d4b03f1bc30cf1132a262cd [UTIL] Update Common::config to ensure the values queried exist
- e60b668294d99188875a386d56a3eb206e0d8995 [DB] Add role collumn to profile table
- 8aaa6768eccde9c4a430a403b0c39268c81e8c94 [USER] Add UserRoles
- 13e7830b7df027d49fbfd2d9bab35cefe420d2ae [LOGIN] Implement password checking and related systems
- d9f95d91df06dcd199cca2725b30bc51b24807f1 [DEFAULTS] Add password hashing algorithm default settings
- 5084f94ff7d6dfffa52a27784499693cdf822c32 [CONTROLLER] Remove example enqueue
</pre><h3 id="day-22">Day 22</h3><p><strong>Summary:</strong> Rebasing with Eliseu, helping him setup afterwards, design meeting with Eliseu and Diogo. Implement backbone for notification and refactor controllers. Add twig 'active' function, Common::getUser</p><p><strong>Dedicated Time (in hours):</strong> 9.5</p><pre>
Related commits:
- 131415965493d5bce804a561c18dc8254786d9c9 [NOTIFICATION][DB] Update user notification prefs table, implementation of Notification and define a base class for notification transport
- 8d4a8665cfbcfef450a6b2e22de064d74f45d7ee [CONTROLLER][REFACTOR] Refactor controllers to use the new base class and remove controller from the class name
- 94d82783aab6f39aa48dcecd47270d85c0dd11e4 [CONTROLLER][REFACTOR] Refactor the base Controller to not reinvent the wheel too much and rely on Symfony's events
- 9a51870bca4df6ed549f800a673fcdf81ccf9194 [TWIG] Add twig function to output the active tag if the current route matches a given one
- 15b39f0be77e9fe07dc43883f470052a593a4051 [REFACTOR] Small refactor on entrypoint and RouteLoader
- d95a7861872f1a291a7d537d7ff12bba4be3034f [COMMON][SECURITY][WRAPPER] Added security service static wrapper and Common::getUser
</pre><h3 id="day-23">Day 23</h3><p><b>No report.</b></p><h3 id="day-24">Day 24</h3><p><strong>Summary:</strong> Implement registration and bug fixes; fix controllers, refactors and stuff</p><p><strong>Dedicated Time (in hours):</strong> 10</p><pre>
Relevant commits:
- 28845792db [DEPENDENCY] Add symfonycasts/verify-email-bundle
- 5af8881b6b [TOOLS] Update generate fields script to output default values
- ffe5bb0b7c [FIX] Fix bug in DB.php, since findBy can return different types
- eec74314cc [MAILER][WRAPPER] Add mailer wrapper that respects the configuration
- 8b66b1175b [DB] Update LocalUser table to not have a numerical id, add is_email_verified and fix getProfile accordingly
- 3387d4defe [FORM][WRAPPER] Merge argument options, not replace
- ab3c8829a7 [DB] Fix typo in profile table and add a constructor
- f51cdbf842 [DB] Fix typos in user_notification_prefs
- 9fd9624ec7 [UTIL][NICKNAME] Small refactor and remove the check between user nickname and group_alias, as these will have different semantics
- ecd62cb810 [USER][UI][AUTHENTICATION] Add registration form
- f053409876 [REFACTOR] Small refactor in Authenticator.php, to remove unused services
- d720e19525 [AUTOGENERATED] Update all entity fields
- 3dea3877fd [I18N] Remove incomplete autogenerated translation file, to be fixed later
- be9d1ead5c [UTILS] Update Common::setConfig to throw an exception if appropriate, add Formatting::{toString,toArray}
- 9bc9be9e2e [CONTROLLER][ADMIN][CONFIG] Fix form to use static strings as keys and add labels seperately; convert input from string to appropriate type
- 81725b4dc0 [FIX][CONTROLLER] Remove unreachable code from the Security controller
- d89d66b0fa [SECURITY] Update way passwords are checked and update
- bf3578dc26 [UTIL] Update Formatting::{toString,toArray} to allow spliting by either space or comma
- 6d8b49bea6 [DB][REFACTOR] Refactor DB.php and make findBy always return an array, instead of a doctrine collection
- 7066b2a18b [FORM] Add Form::isRequired
- f4602192a4 [SELFTAGS] Add Profile::{set,get}SelfTags
- a4869e3586 [UI][USERPANEL] Add prefilled fields, mark some as optional and handle self tags in the profile settings page
</pre><h3 id="day-25">Day 25</h3><p><strong>Summary:</strong> Add phone number to user table, update user panel controller</p><p><strong>Dedicated Time (in hours):</strong> 3</p><pre>
Relevant commits:
- d0eaf8d42b [UTIL][NICKNAME][FIX] Add self to constant
- 057fbb19bd [DEPENDENCY] Add odolbeau/phone-number-bundle
- 3f52592af2 [REFACTOR][REGISTER] Save previous url to redirect back after registering
- 63b65b0620 [UI][ROUTER] s%settings/profile%settings/personal_info%
- 58ff9aeceb [UI] Update settings/account to reflect the current values
- 70b5210f87 [DB][REFACTOR] Update local_user, SchemaDefDriver and bin/generate_entity_fields to use the phone_number type (which maps to a varchar 35 and does validation)
- 3c6bcef037 [Controller] Update settings/avatar
</pre><h3 id="day-26">Day 26</h3><p><strong>Summary:</strong> Add Form::handle which automagically creates a form, handles a request, and writes the data to the given entity; Help Eliseu with avatar cropper, submit bug report to phone-number-bundle</p><p><strong>Dedicated Time (in hours):</strong> 6.5</p><pre>
Relevant commits:
- b480b664016908d1486bdc58c94bd7c4674572c3 [SECURITY][FIX] Save previous url on /register and /logout
- ed3f413521dd4a1d4be2ab1cf02a0be0202653a9 [DB][TOOLS] Update local_user to return the proper PhoneNumber type
- 5dcb998b68eb04c01840246e86ca3a7e6c31767b [FORM] Add Form::handle which automagically creates a form, handles a request, and writes the data to the given entity and update Form::create to do some more magic as well
- b6e96d5df40ce858c0caad7157f3d7a78efd43ab [FORM] Add DataTransformer to and from array
- cbc457014d9225df0ba51bdfe37b5e3cc16b353b [FORMATTING] Add option to split a string to array by both a comma and a space
- 3d2fab76104444f759b4c781d86e5eab5da16bc3 [DB] Remove DB::flush from Profile::setSelfTags
- d989995ec8a1e2d7eb5b16a369df4881f6bc3f09 [CONTROLLER][REFACTOR][UI] Refactor UserPanel to use the new Form::handle method and add placeholders in the password fields
</pre><h3 id="day-27">Day 27</h3><p><strong>Summary:</strong> Start implementing tabbednotification settings panel</p><p><strong>Dedicated Time (in hours):</strong> 2</p><pre>
</pre><hr><p><strong>Total hours this week:</strong> 39</p><hr><h3 id="day-28">Day 28</h3><p><strong>Summary:</strong> Attempting to update the ExtensionManager, but can't dynamically load classes, asked on symfony slack, awaiying an answer</p><p><strong>Dedicated Time (in hours):</strong> 1.5</p><pre>
</pre><h3 id="day-29">Day 29</h3><p><b>No report.</b></p><h3 id="day-30">Day 30</h3><p><b>No report.</b></p><h3 id="day-31">Day 31</h3><p><b>No report.</b></p></article></body>
</html>

View File

@ -0,0 +1,138 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
<title>Daily Report Viewer | GS SoC 2020</title>
<link rel="icon" href="../../../favicon.png">
<meta charset="utf-8">
<meta name="robots" content="noindex, nofollow, nosnippet">
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="stylesheet" href="https://hackersatporto.com/assets/css/main.css">
<style>
#side-menu #menu-title {
color: #7a7a7a !important;
font-weight: 700;
}
@media screen and (max-width: 1200px) {
#side-menu #menu-title {
display:none;
}
}
</style>
</head>
<body>
<header id="header">
<nav id="side-menu">
<label for="show-menu" id="menu-button">Menu</label>
<input id="show-menu" role="button" type="checkbox">
<ul id="menu">
<li><a href="../"><strong>&larr; GS GSoC 2020</strong></a></li>
<li><a href="archive">Previous Months</a></li>
<li id="menu-title">STUDENTS</li>
<li><a href="index.php?student=hugo">hugo</a></li><li><a href="index.php?student=susannadiv">susannadiv</a></li><li><a class="current" href="index.php?student=rainydaysavings">rainydaysavings</a></li></ul>
</nav>
<h1>Daily Report Viewer | GS SoC 2020</h1>
<p>Organized by <strong><a href="https://www.diogo.site/">Diogo Cordeiro</a></strong></p>
<p>Mentors: <a href="https://www.diogo.site/">Diogo Cordeiro</a>, <a href="https://loadaverage.org/XRevan86">Alexei Sorokin</a>, <a href="https://dansup.com">Daniel Supernault</a>, <a href="http://status.hackerposse.com/rozzin">Joshua Judson Rosen</a> and <a href="https://github.com/phablulo">Phablulo Joel</a></p>
</header>
<article id="student_report"><h2>Showing reports for rainydaysavings</h2><h3 id="day-0">Day 0</h3><p><b>No report.</b></p><h3 id="day-1">Day 1</h3><p><b>No report.</b></p><h3 id="day-2">Day 2</h3><p><b>No report.</b></p><h3 id="day-3">Day 3</h3><p><strong>Summary:</strong> Implementing user panel actions</p><p><strong>Dedicated Time (in hours):</strong> 6</p><pre>
- Fixing rebase issues
Relevant commits:
c5cf6c158e@upstream
85c17a4f4f@upstream
</pre><h3 id="day-4">Day 4</h3><p><strong>Summary:</strong> Overall CSS refactoring for faster theming</p><p><strong>Dedicated Time (in hours):</strong> 4</p><pre>
Relevant commits:
- d4c3c9f24f@upstream
</pre><h3 id="day-5">Day 5</h3><p><strong>Summary:</strong> Home feed design work</p><p><strong>Dedicated Time (in hours):</strong> 5</p><pre>
- Continuing yesterday's refactoring work
Relevant commits:
ff54443fed@designs
</pre><h3 id="day-6">Day 6</h3><p><strong>Summary:</strong> Polishing designs and CSS</p><p><strong>Dedicated Time (in hours):</strong> 5</p><pre>
Relevant commits:
- d8277675f7@designs
- f2fbb626e6@upstream
</pre><hr><p><strong>Total hours this week:</strong> 20</p><hr><h3 id="day-7">Day 7</h3><p><b>No report.</b></p><h3 id="day-8">Day 8</h3><p><strong>Summary:</strong> New design work focused on the desktop experience</p><p><strong>Dedicated Time (in hours):</strong> 5</p><pre>
Relevant commits:
- 77bdee2601@designs
</pre><h3 id="day-9">Day 9</h3><p><b>No report.</b></p><h3 id="day-10">Day 10</h3><p><b>No report.</b></p><h3 id="day-11">Day 11</h3><p><strong>Summary:</strong> Implementing new design structure</p><p><strong>Dedicated Time (in hours):</strong> 10</p><pre>
Relevant commits:
- 6d61e09a07@upstream
</pre><h3 id="day-12">Day 12</h3><p><strong>Summary:</strong> Further work into new design</p><p><strong>Dedicated Time (in hours):</strong> 10</p><pre>
- Some icons need rework so the vector itself is perfectly square.
Relevant commits:
- 36e276e8cc@upstream
</pre><h3 id="day-13">Day 13</h3><p><strong>Summary:</strong> Finished responsive work for redesign</p><p><strong>Dedicated Time (in hours):</strong> 8</p><pre>
Relevant commits:
- 92fbde43c7@upstream [UI] Redesign responsiveness work done
</pre><hr><p><strong>Total hours this week:</strong> 33</p><hr><h3 id="day-14">Day 14</h3><p><b>No report.</b></p><h3 id="day-15">Day 15</h3><p><b>No report.</b></p><h3 id="day-16">Day 16</h3><p><strong>Summary:</strong> Review issues with Diogo and discuss what to implement in v3</p><p><strong>Dedicated Time (in hours):</strong> 2</p><pre>
</pre><h3 id="day-17">Day 17</h3><p><b>No report.</b></p><h3 id="day-18">Day 18</h3><p><strong>Summary:</strong> Side panel animations, FAQ template fixes</p><p><strong>Dedicated Time (in hours):</strong> 6</p><pre>
- Started port of UserPanel pages to new design
Relevant commits:
- d2ddb648c2@upstream [UI] Fixed FAQ template issues
- 583785dc84@upstream [UI] Side panel animation added
- e16909cf90@upstream [UI] Corrected core action name, UserPanel CSS work
</pre><h3 id="day-19">Day 19</h3><p><strong>Summary:</strong> Overall polish, fixes and finalizing redesign port</p><p><strong>Dedicated Time (in hours):</strong> 12</p><pre>
Relevant commits:
- 7b78a2af69@upstream [UI] Settings page CSS redesign port completed
- 10aaba911c@upstream [UI] Reset CSS added, small fixes all around
- a4066608f8@upstream [UI] Form help messages added, fixed checkbox trick hitbox
- 4ae2cc44dd@upstream [UI] FAQ pages markdown fixes
</pre><h3 id="day-20">Day 20</h3><p><strong>Summary:</strong> UserPanel Controller work</p><p><strong>Dedicated Time (in hours):</strong> 10</p><pre>
- Further discussion with Diogo about porting remaining core actions
Relevant commits:
- c2df96beda@upstream [UI] Fixed top header spacing issue, hamburger menu weird rendering
- ac67734978@upstream [CORE][UI] UserPanel account page form added, account page CSS work
</pre><hr><p><strong>Total hours this week:</strong> 30</p><hr><h3 id="day-21">Day 21</h3><p><strong>Summary:</strong> Settings pages added, routes rework</p><p><strong>Dedicated Time (in hours):</strong> 4</p><pre>
- Further discussions with Hugo and Diogo
Relevant commits:
- 4255a21e63@upstream [CORE][UI] Settings routes refactor, avatar and misc settings added.
</pre><h3 id="day-22">Day 22</h3><p><strong>Summary:</strong> Left panel template, Login page CSS</p><p><strong>Dedicated Time (in hours):</strong> 5</p><pre>
- Overall refactoring done as well
- Left panel is now aware if user is logged in
Relevant commits:
- cd53227e3c@upstream [UI] Left panel template and Login page CSS work done
</pre><h3 id="day-23">Day 23</h3><p><strong>Summary:</strong> Footer links and pages, small fixes</p><p><strong>Dedicated Time (in hours):</strong> 8</p><pre>
Relevant commits:
- de9e05dda4@upstream [UI] Login template small fix
- dfec290870@upstream [UI] Footer links added
- eee902d977@upstream [UI] Footer links and pages done
- dd1f02291d@upstream [UI] Fixing problem due to Firefox's autofill filter
</pre><h3 id="day-24">Day 24</h3><p><strong>Summary:</strong> Register CSS and Login CSS rework</p><p><strong>Dedicated Time (in hours):</strong> 8</p><pre>
- Register and Login now occupy left panel, defaults into view in smaller screens
- Body to be added as public timeline tommorow
Relevant commits:
- 5c01fb7338@upstream [UI] Register and Login rework
</pre><h3 id="day-25">Day 25</h3><p><strong>Summary:</strong> CSS, templates and navs fixes</p><p><strong>Dedicated Time (in hours):</strong> 10</p><pre>
- Starting work on avatar cropping
Relevant commits:
- bbe941c291@upstream [CONTROLLER][UI] Fixing controller display errors, Settings CSS fixes
- 440795b4db@upstream [ROUTER][UI] Fixing Settings navs and templates
- cf740048c5@upstream [FIX][SECURITY] Fix typo
</pre><h3 id="day-26">Day 26</h3><p><strong>Summary:</strong> Avatar JS cropping, small fixes</p><p><strong>Dedicated Time (in hours):</strong> 10</p><pre>
- Started work on Public Timeline structure and CSS
Relevant commits:
- 1788600589@upstream [CONTROLLER][UI] Avatar JS cropping added
- e8ab639df4@upstream [UI] Login and Register button fixes
</pre><h3 id="day-27">Day 27</h3><p><strong>Summary:</strong> Avatar cropping works as intended now</p><p><strong>Dedicated Time (in hours):</strong> 4</p><pre>
- Crops a perfect circle
- Shows proper preview
Issues:
- JS shows above header elements, of which the left panel is part of, to fix this z-index would be used;
- To fix it the position property cannot be fixed, which would break the design, of course it needs to be fixed and will as soon as I find some alternative;
Relevant commits:
dfe061130b@upstream [UI] Cropping avatar as a circle, proper preview done
</pre><hr><p><strong>Total hours this week:</strong> 49</p><hr><h3 id="day-28">Day 28</h3><p><b>No report.</b></p><h3 id="day-29">Day 29</h3><p><b>No report.</b></p><h3 id="day-30">Day 30</h3><p><b>No report.</b></p><h3 id="day-31">Day 31</h3><p><b>No report.</b></p></article></body>
</html>

View File

@ -0,0 +1,74 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
<title>Daily Report Viewer | GS SoC 2020</title>
<link rel="icon" href="../../../favicon.png">
<meta charset="utf-8">
<meta name="robots" content="noindex, nofollow, nosnippet">
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="stylesheet" href="https://hackersatporto.com/assets/css/main.css">
<style>
#side-menu #menu-title {
color: #7a7a7a !important;
font-weight: 700;
}
@media screen and (max-width: 1200px) {
#side-menu #menu-title {
display:none;
}
}
</style>
</head>
<body>
<header id="header">
<nav id="side-menu">
<label for="show-menu" id="menu-button">Menu</label>
<input id="show-menu" role="button" type="checkbox">
<ul id="menu">
<li><a href="../"><strong>&larr; GS GSoC 2020</strong></a></li>
<li><a href="archive">Previous Months</a></li>
<li id="menu-title">STUDENTS</li>
<li><a href="index.php?student=hugo">hugo</a></li><li><a class="current" href="index.php?student=susannadiv">susannadiv</a></li><li><a href="index.php?student=rainydaysavings">rainydaysavings</a></li></ul>
</nav>
<h1>Daily Report Viewer | GS SoC 2020</h1>
<p>Organized by <strong><a href="https://www.diogo.site/">Diogo Cordeiro</a></strong></p>
<p>Mentors: <a href="https://www.diogo.site/">Diogo Cordeiro</a>, <a href="https://loadaverage.org/XRevan86">Alexei Sorokin</a>, <a href="https://dansup.com">Daniel Supernault</a>, <a href="http://status.hackerposse.com/rozzin">Joshua Judson Rosen</a> and <a href="https://github.com/phablulo">Phablulo Joel</a></p>
</header>
<article id="student_report"><h2>Showing reports for susannadiv</h2><h3 id="day-0">Day 0</h3><p><strong>Summary:</strong> Fixed commits + indentation</p><p><strong>Dedicated Time (in hours):</strong> 2</p><pre></pre><h3 id="day-1">Day 1</h3><p><b>No report.</b></p><h3 id="day-2">Day 2</h3><p><b>No report.</b></p><h3 id="day-3">Day 3</h3><p><b>No report.</b></p><h3 id="day-4">Day 4</h3><p><strong>Summary:</strong> Re-read React rules, best practices and node-modules + finished CSS styling</p><p><strong>Dedicated Time (in hours):</strong> 7</p><pre></pre><h3 id="day-5">Day 5</h3><p><strong>Summary:</strong> Added Home page + Navbar, Profile component + adjusted CSS to SCSS standard</p><p><strong>Dedicated Time (in hours):</strong> 7.5</p><pre></pre><h3 id="day-6">Day 6</h3><p><b>No report.</b></p><hr><p><strong>Total hours this week:</strong> 16.5</p><hr><h3 id="day-7">Day 7</h3><p><strong>Summary:</strong> Added Notifications, Navbar, ProfileTile components + redux routing</p><p><strong>Dedicated Time (in hours):</strong> 9.5</p><pre>
Relevant commits:
- 611c215380a5a6a6c3bfb6b036953aaa1d852d92</pre><h3 id="day-8">Day 8</h3><p><strong>Summary:</strong> Added ProfileTile component + Network and Public pages + upgraded redux routing</p><p><strong>Dedicated Time (in hours):</strong> 7</p><pre></pre><h3 id="day-9">Day 9</h3><p><strong>Summary:</strong> Upgraded user page routing & user specific ProfileTile component</p><p><strong>Dedicated Time (in hours):</strong> 5.5</p><pre>
Relevant commits:
- 9a0b81dd40db4303fce41811e8a79b5a51a3bb8b </pre><h3 id="day-10">Day 10</h3><p><strong>Summary:</strong> Aquainted with Bootstrap frameowrk + studied routing for Status/post-specific model</p><p><strong>Dedicated Time (in hours):</strong> 6</p><pre></pre><h3 id="day-11">Day 11</h3><p><b>No report.</b></p><h3 id="day-12">Day 12</h3><p><b>No report.</b></p><h3 id="day-13">Day 13</h3><p><b>No report.</b></p><hr><p><strong>Total hours this week:</strong> 28</p><hr><h3 id="day-14">Day 14</h3><p><strong>Summary:</strong> Added & tested Like functionality + Notification Panel</p><p><strong>Dedicated Time (in hours):</strong> 6.5</p><pre>
Relevant commit:
- 2399af4e75a97cb9438eb45c5e647439b2c3f073</pre><h3 id="day-15">Day 15</h3><p><strong>Summary:</strong> Added Login scroll down menu panel</p><p><strong>Dedicated Time (in hours):</strong> 6.75</p><pre>
Relevant commit:
- 0aefb1ed32e99863ddcb0d33010dd916cca95aac</pre><h3 id="day-16">Day 16</h3><p><strong>Summary:</strong> Notification panel touchup + designed scroll bar</p><p><strong>Dedicated Time (in hours):</strong> 6</p><pre>
Relevant commit:
- a417d95e5460c8f2cdf5e7bf25e2b4303c719449</pre><h3 id="day-17">Day 17</h3><p><strong>Summary:</strong> Added functioning base for full settings page</p><p><strong>Dedicated Time (in hours):</strong> 7.5</p><pre>
Relevant commit:
- b10c07c9ba45162f394fab1c676acc9cf9ab944c</pre><h3 id="day-18">Day 18</h3><p><strong>Summary:</strong> Modified reply/comment structure</p><p><strong>Dedicated Time (in hours):</strong> 6.5</p><pre>
Relevant commit:
- c1f90479eea5c7f5ef6490a70e1071769d1f4171</pre><h3 id="day-19">Day 19</h3><p><strong>Summary:</strong> Added spinner component</p><p><strong>Dedicated Time (in hours):</strong> 6.15</p><pre>
Relevant commit:
- cb5c258ebfa1a92e08be2082992a795308f27c88</pre><h3 id="day-20">Day 20</h3><p><strong>Summary:</strong> Added input form handling</p><p><strong>Dedicated Time (in hours):</strong> 6.5</p><pre>
Relevant commit:
- f025da7d171404ce14e1e0c10ecef1543b4d5230</pre><hr><p><strong>Total hours this week:</strong> 45.9</p><hr><h3 id="day-21">Day 21</h3><p><strong>Summary:</strong> Added retractable search bar + button redesign + attatchement handling + fixed routing + new post maker + added subnotification panel</p><p><strong>Dedicated Time (in hours):</strong> 12</p><pre>
Relevant commit:
- 7c3c9074d2ef17237af0d530cb85a2481a375c4a</pre><h3 id="day-22">Day 22</h3><p><strong>Summary:</strong> </p><p><strong>Dedicated Time (in hours):</strong> </p><pre>
Relevant commit:
- f2a835b2dec8361fd717672eaf7e2be37945104a</pre><h3 id="day-23">Day 23</h3><p><strong>Summary:</strong> Finished settings page + added avatar uploading + redesigned authentication system + additional routing for logged in/out functionalities</p><p><strong>Dedicated Time (in hours):</strong> 13</p><pre>
Relevant commit:
- 0ba5629e14224d2c2854beca5a39449914526a30</pre><h3 id="day-24">Day 24</h3><p><strong>Summary:</strong> Fixed login routing + added edit avatar component + settings routing in navbar + redux for handles</p><p><strong>Dedicated Time (in hours):</strong> 8</p><pre>
Relevant commit:
- 9a3afd177733a777b6de46c052d38f507a40d619</pre><h3 id="day-25">Day 25</h3><p><strong>Summary:</strong> Added placeholder backend for demonstrating functionalities + fixed settings menu</p><p><strong>Dedicated Time (in hours):</strong> 8.5</p><pre>
Relevant commit:
- 97d507045f96710d111a55638d38a80f3893f29b
- 1b01338247d49d41d604b1940c1dc2bd406097af</pre><h3 id="day-26">Day 26</h3><p><strong>Summary:</strong> Finishing profiletile fixes for logged in users + fixed routing + fixed public folder's contents and primary colour for components</p><p><strong>Dedicated Time (in hours):</strong> 11</p><pre>
Relevant commit:
- 38951a1824d35a2d95e8a79746e9bda4a6af0aa5</pre><h3 id="day-27">Day 27</h3><p><strong>Summary:</strong> Finishing component tweaking - deleted personal-use comments</p><p><strong>Dedicated Time (in hours):</strong> 5</p><pre>
Relevant commit:
- 07c03bb5e92263b749677c4093a1690ddc817c8a</pre><hr><p><strong>Total hours this week:</strong> 57.5</p><hr><h3 id="day-28">Day 28</h3><p><strong>Summary:</strong> Fixed identation + final testing</p><p><strong>Dedicated Time (in hours):</strong> 3.5</p><pre>
Relevant commit:
- ade87d5829ec387d818d901ffc38a21a099177ca</pre><h3 id="day-29">Day 29</h3><p><b>No report.</b></p><h3 id="day-30">Day 30</h3><p><b>No report.</b></p><h3 id="day-31">Day 31</h3><p><b>No report.</b></p></article></body>
</html>

View File

@ -0,0 +1,96 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
<title>Daily Report Viewer | GS SoC 2020</title>
<link rel="icon" href="../../../favicon.png">
<meta charset="utf-8">
<meta name="robots" content="noindex, nofollow, nosnippet">
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="stylesheet" href="https://hackersatporto.com/assets/css/main.css">
<style>
#side-menu #menu-title {
color: #7a7a7a !important;
font-weight: 700;
}
@media screen and (max-width: 1200px) {
#side-menu #menu-title {
display:none;
}
}
</style>
</head>
<body>
<header id="header">
<nav id="side-menu">
<label for="show-menu" id="menu-button">Menu</label>
<input id="show-menu" role="button" type="checkbox">
<ul id="menu">
<li><a href="../"><strong>&larr; GS GSoC 2020</strong></a></li>
<li><a href="archive">Previous Months</a></li>
<li id="menu-title">STUDENTS</li>
<li><a class="current" href="index.php?student=hugo">hugo</a></li><li><a href="index.php?student=susannadiv">susannadiv</a></li><li><a href="index.php?student=rainydaysavings">rainydaysavings</a></li></ul>
</nav>
<h1>Daily Report Viewer | GS SoC 2020</h1>
<p>Organized by <strong><a href="https://www.diogo.site/">Diogo Cordeiro</a></strong></p>
<p>Mentors: <a href="https://www.diogo.site/">Diogo Cordeiro</a>, <a href="https://loadaverage.org/XRevan86">Alexei Sorokin</a>, <a href="https://dansup.com">Daniel Supernault</a> and <a href="http://status.hackerposse.com/rozzin">Joshua Judson Rosen</a></p>
</header>
<article id="student_report"><h2>Showing reports for hugo</h2><h3 id="day-0">Day 0</h3><p><strong>Summary:</strong> Admin configuration panel and updating code around default configuration</p><p><strong>Dedicated Time (in hours):</strong> 2</p><pre>
</pre><h3 id="day-1">Day 1</h3><p><strong>Summary:</strong> Add admin config form and display previous value. Studying Pleroma API</p><p><strong>Dedicated Time (in hours):</strong> 2</p><pre>
</pre><h3 id="day-2">Day 2</h3><p><b>No report.</b></p><h3 id="day-3">Day 3</h3><p><strong>Summary:</strong> Refactoring core, use dropdown in admin config panel, add custom message extractor, contributing to upstream Functional</p><p><strong>Dedicated Time (in hours):</strong> 5</p><pre>
Relevant commits:
- 0d7eb496cf6ad188bff0c238d819af7a5faf1ad8 [UI][CONFIG] Added admin configuration form
- b40ea7227940ebab7a55ab5268fdf1182a3dcc48 [CORE] Refactoring core
- 298cce0d53eebfaab914e6ff1e7d179700ac0dee [ROUTER] Add static wrapper around Symfony's router
- e7260fdf9a1ee1760e189feac2b398b73f91db60 [I18N] Refactor since rfc/use-static-function is not implemented
- 9e6278c3eda7c7038b9fc1f42f240142658dfbb9 [I18N] Custom translation extractor based on Symfony's PhpExtractor, since we use instead of
</pre><h3 id="day-4">Day 4</h3><p><strong>Summary:</strong> Updated configure script, helped Susanna. Added method to dump dynamic-valued calls to _m and dumped english files</p><p><strong>Dedicated Time (in hours):</strong> 4</p><pre>
Relevant commits:
- a43c113e33b46448f416e4ccbfad2ca85e13ccad [TOOLS] Improve configure script to disallow reserved database names
- b795bbdff9201c65372e47318a5bfbb3a83d7b23 (v2) [SCRIPTS] Import changes to configure script from V3
- 7eff019489f4125284afbd3c3ebbccf3ff380577 [I18N] Added ability to call `_m_dynamic` from any class, allowing it to define translations for dynamic-valued calls to `_m`
- e7b921514bfb0ec7fddcaed6e6862f8681bd8b42 [TOOLS] Small fix to composer install hook
- 3e16f00d9fe91c85feab62c0a8622d2b52073737 [I18N] Dumped english translation files
</pre><h3 id="day-5">Day 5</h3><p><b>No report.</b></p><h3 id="day-6">Day 6</h3><p><strong>Summary:</strong> Studying ICU message format to improve the implementation of the translation facilities, testing</p><p><strong>Dedicated Time (in hours):</strong> 7</p><pre>
</pre><hr><p><strong>Total hours this week:</strong> 20</p><hr><h3 id="day-7">Day 7</h3><p><strong>Summary:</strong> Upgrade dependencies, fixed autoloading for _m and trying to fix the tests (the framework isn't loaded the same way)</p><p><strong>Dedicated Time (in hours):</strong> 2</p><pre>
Relevant commits:
- dc92ba1a6b443d2667d71ff94e90bb422e89e68e [DEPENDENCY] Upgrade Symfony framework from 5.0 to 5.1
- d06fffffb4544986109eb7d0ce1d92c390bb0771 [AUTOLOAD] Always autoload _m file
</pre><h3 id="day-8">Day 8</h3><p><b>No report.</b></p><h3 id="day-9">Day 9</h3><p><b>No report.</b></p><h3 id="day-10">Day 10</h3><p><strong>Summary:</strong> Fixed bugs in I18n _m implementation, trying to fix tests</p><p><strong>Dedicated Time (in hours):</strong> 4</p><pre>
Tested and researched a lot of things, asked for help Symfony's Slack, ran the component tests and wrote a bug report.
</pre><h3 id="day-11">Day 11</h3><p><b>No report.</b></p><h3 id="day-12">Day 12</h3><p><b>No report.</b></p><h3 id="day-13">Day 13</h3><p><b>No report.</b></p><hr><p><strong>Total hours this week:</strong> 6</p><hr><h3 id="day-14">Day 14</h3><p><b>No report.</b></p><h3 id="day-15">Day 15</h3><p><b>No report.</b></p><h3 id="day-16">Day 16</h3><p><b>No report.</b></p><h3 id="day-17">Day 17</h3><p><b>No report.</b></p><h3 id="day-18">Day 18</h3><p><b>No report.</b></p><h3 id="day-19">Day 19</h3><p><strong>Summary:</strong> Meeting helping Eliseu and planning various things</p><p><strong>Dedicated Time (in hours):</strong> 5</p><pre>
</pre><h3 id="day-20">Day 20</h3><p><strong>Summary:</strong> Support for TemplateController and Symfony/Translation PR #37371, helping Eliseu, working on ICU format</p><p><strong>Dedicated Time (in hours):</strong> 7</p><pre>
- bc8509d9ec9cb56c995ae6acce6fda3af6cb350d [ROUTER] Add easier support for using TemplateController and improved documentation
- Symfony pull request https://github.com/symfony/symfony/pull/37371
</pre><hr><p><strong>Total hours this week:</strong> 12</p><hr><h3 id="day-21">Day 21</h3><p><b>No report.</b></p><h3 id="day-22">Day 22</h3><p><strong>Summary:</strong> Added testing and implementation for _m and formatICU</p><p><strong>Dedicated Time (in hours):</strong> 2</p><pre>
Relevant commits:
- d9d89efc5eafc725d51ceecf11eabff63ea6e362 [I18N] Fix implementation of I18nHelper::formatICU
- 8d6dbb1bcc3ce1319757099e41550d3dc6168e20 [TESTS][I18N] Added test for I18n::_m and I18nHelper::formatICU
- bc25920efb4a1ccf993592da9793cedf1000f182 [UPGRADE][DEPRECATION] Fixed deprecation resultant from Symfony 5.1 upgrade
</pre><h3 id="day-23">Day 23</h3><p><strong>Summary:</strong> Add admin site config page</p><p><strong>Dedicated Time (in hours):</strong> 2.5</p><pre>
Relevant commits:
- 8e74c7bd5a1c7b65fdadcd79eb5093de094e9bfb [DEFAULTS] Small fixes and add check of SOCIAL_NO_RELOAD_DEFAULTS from the environment, to override the reloading of default values
- e0bf6adeed934a3623ff6bf1970f03756951542e [ROUTE][ADMIN][CONFIG] Add route to update values in the config table
</pre><h3 id="day-24">Day 24</h3><p><b>No report.</b></p><h3 id="day-25">Day 25</h3><p><b>No report.</b></p><h3 id="day-26">Day 26</h3><p><b>No report.</b></p><h3 id="day-27">Day 27</h3><p><b>No report.</b></p><hr><p><strong>Total hours this week:</strong> 4.5</p><hr><h3 id="day-28">Day 28</h3><p><b>No report.</b></p><h3 id="day-29">Day 29</h3><p><b>No report.</b></p><h3 id="day-30">Day 30</h3><p><b>No report.</b></p></article></body>
</html>

View File

@ -0,0 +1,119 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
<title>Daily Report Viewer | GS SoC 2020</title>
<link rel="icon" href="../../../favicon.png">
<meta charset="utf-8">
<meta name="robots" content="noindex, nofollow, nosnippet">
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="stylesheet" href="https://hackersatporto.com/assets/css/main.css">
<style>
#side-menu #menu-title {
color: #7a7a7a !important;
font-weight: 700;
}
@media screen and (max-width: 1200px) {
#side-menu #menu-title {
display:none;
}
}
</style>
</head>
<body>
<header id="header">
<nav id="side-menu">
<label for="show-menu" id="menu-button">Menu</label>
<input id="show-menu" role="button" type="checkbox">
<ul id="menu">
<li><a href="../"><strong>&larr; GS GSoC 2020</strong></a></li>
<li><a href="archive">Previous Months</a></li>
<li id="menu-title">STUDENTS</li>
<li><a href="index.php?student=hugo">hugo</a></li><li><a href="index.php?student=susannadiv">susannadiv</a></li><li><a class="current" href="index.php?student=rainydaysavings">rainydaysavings</a></li></ul>
</nav>
<h1>Daily Report Viewer | GS SoC 2020</h1>
<p>Organized by <strong><a href="https://www.diogo.site/">Diogo Cordeiro</a></strong></p>
<p>Mentors: <a href="https://www.diogo.site/">Diogo Cordeiro</a>, <a href="https://loadaverage.org/XRevan86">Alexei Sorokin</a>, <a href="https://dansup.com">Daniel Supernault</a> and <a href="http://status.hackerposse.com/rozzin">Joshua Judson Rosen</a></p>
</header>
<article id="student_report"><h2>Showing reports for rainydaysavings</h2><h3 id="day-0">Day 0</h3><p><strong>Summary:</strong> Getting basic design finalized</p><p><strong>Dedicated Time (in hours):</strong> 8</p><pre>
- Polishing design
- Listening to the community and making necessary changes
</pre><h3 id="day-1">Day 1</h3><p><strong>Summary:</strong> Polishing design work</p><p><strong>Dedicated Time (in hours):</strong> 2</p><pre>
- Polishing design
</pre><h3 id="day-2">Day 2</h3><p><strong>Summary:</strong> Creating new icon set</p><p><strong>Dedicated Time (in hours):</strong> 5</p><pre>
- Fixing a neo-quitter theme bug
Relevant commits:
- 92ad44abf9@upstream
- 62e734517e@designs
</pre><h3 id="day-3">Day 3</h3><p><strong>Summary:</strong> Studying Symfony Controllers and Twig</p><p><strong>Dedicated Time (in hours):</strong> 2</p><pre>
- Getting ready to make the FAQ page
- Understanding the codebase
</pre><h3 id="day-4">Day 4</h3><p><strong>Summary:</strong> Creating FAQ Route and Controller, basic template structure</p><p><strong>Dedicated Time (in hours):</strong> 6</p><pre>
Relevant commit:
- 28575ce2d5@upstream
</pre><h3 id="day-5">Day 5</h3><p><b>No report.</b></p><h3 id="day-6">Day 6</h3><p><b>No report.</b></p><hr><p><strong>Total hours this week:</strong> 23</p><hr><h3 id="day-7">Day 7</h3><p><b>No report.</b></p><h3 id="day-8">Day 8</h3><p><strong>Summary:</strong> Polished icons and created more</p><p><strong>Dedicated Time (in hours):</strong> 2</p><pre>
- Fixed symmetry issues
- Added logo, search and options icons
Relevant commit:
- 48d2467494@designs
</pre><h3 id="day-9">Day 9</h3><p><b>No report.</b></p><h3 id="day-10">Day 10</h3><p><strong>Summary:</strong> FAQ page progress</p><p><strong>Dedicated Time (in hours):</strong> 7</p><pre>
- Added icon assets
Relevant commits:
- 224e87ddd7@upstream
- 3424510eaa@designs
</pre><h3 id="day-11">Day 11</h3><p><strong>Summary:</strong> FAQ page progress, almost completed</p><p><strong>Dedicated Time (in hours):</strong> 9</p><pre>
Relevant commits:
- 75f0d589f1@upstream
</pre><h3 id="day-12">Day 12</h3><p><strong>Summary:</strong> FAQ subpages completed, routing as well</p><p><strong>Dedicated Time (in hours):</strong> 8</p><pre>
Relevant commits:
- 2d65e80555@upstream
</pre><h3 id="day-13">Day 13</h3><p><strong>Summary:</strong> FAQ Responsiveness work, containerization</p><p><strong>Dedicated Time (in hours):</strong> 8</p><pre>
- Better use of Twig's functionality to better organize pages content
Relevant commit:
- 51664dd47a@upstream
</pre><hr><p><strong>Total hours this week:</strong> 34</p><hr><h3 id="day-14">Day 14</h3><p><strong>Summary:</strong> Organizing FAQ, exploring better navigation solutions</p><p><strong>Dedicated Time (in hours):</strong> 4</p><pre>
- Different navigation methods approached, none came to fruition, sliding header solution to be implemented tommorow
Relevant commit:
- d3cb7c8366@upstream
</pre><h3 id="day-15">Day 15</h3><p><b>No report.</b></p><h3 id="day-16">Day 16</h3><p><b>No report.</b></p><h3 id="day-17">Day 17</h3><p><b>No report.</b></p><h3 id="day-18">Day 18</h3><p><strong>Summary:</strong> PHP and Symfony study</p><p><strong>Dedicated Time (in hours):</strong> 2</p><pre></pre><h3 id="day-19">Day 19</h3><p><strong>Summary:</strong> Various fixes, studying and discussion with mentors</p><p><strong>Dedicated Time (in hours):</strong> 8</p><pre>
- Fixing static pages routes
- Discussing improvements and what to tackle next with Hugo and Diogo
- Studying Web Security and solutions to possible vulnerabilities
- Studying PHP
Relevant commits:
- 5734468448@upstream
</pre><h3 id="day-20">Day 20</h3><p><strong>Summary:</strong> Codebase study and core actions work started</p><p><strong>Dedicated Time (in hours):</strong> 10</p><pre>
- Refactored CSS code to better reflect pages as their own contained blocks
- Started work on user admin panel controller
- Routing fixed with attention to possible vulnerabilities
Relevant commits:
6d9411ccf3@upstream
0cff087081@upstream
</pre><hr><p><strong>Total hours this week:</strong> 24</p><hr><h3 id="day-21">Day 21</h3><p><b>No report.</b></p><h3 id="day-22">Day 22</h3><p><b>No report.</b></p><h3 id="day-23">Day 23</h3><p><strong>Summary:</strong> New header block and settings page design concept</p><p><strong>Dedicated Time (in hours):</strong> 4</p><pre>
Relevant commits:
- b0129fa7b2@designs
</pre><h3 id="day-24">Day 24</h3><p><strong>Summary:</strong> Polishing header design, implementing new header</p><p><strong>Dedicated Time (in hours):</strong> 8</p><pre>
Relevant commits:
- d5576875cb@upstream
</pre><h3 id="day-25">Day 25</h3><p><strong>Summary:</strong> Settings page work started, structure and routing done</p><p><strong>Dedicated Time (in hours):</strong> 5</p><pre>
Relevant commits:
- b9cbc6a0c7@upstream
</pre><h3 id="day-26">Day 26</h3><p><strong>Summary:</strong> UserAdminPanel port iniciated, Settings page styling almost finished</p><p><strong>Dedicated Time (in hours):</strong> 6</p><pre>
Relevant commits:
- 433f27f684@upstream
</pre><h3 id="day-27">Day 27</h3><p><strong>Summary:</strong> Settings page responsive-ness work</p><p><strong>Dedicated Time (in hours):</strong> 10</p><pre>
- Symfony docs study on forms, specifically requests
- Trying to get settings page functionality to work
Relevant commits:
- 4bfa22b050@upstream
</pre><hr><p><strong>Total hours this week:</strong> 33</p><hr><h3 id="day-28">Day 28</h3><p><b>No report.</b></p><h3 id="day-29">Day 29</h3><p><b>No report.</b></p><h3 id="day-30">Day 30</h3><p><b>No report.</b></p></article></body>
</html>

View File

@ -0,0 +1,80 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
<title>Daily Report Viewer | GS SoC 2020</title>
<link rel="icon" href="../../../favicon.png">
<meta charset="utf-8">
<meta name="robots" content="noindex, nofollow, nosnippet">
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="stylesheet" href="https://hackersatporto.com/assets/css/main.css">
<style>
#side-menu #menu-title {
color: #7a7a7a !important;
font-weight: 700;
}
@media screen and (max-width: 1200px) {
#side-menu #menu-title {
display:none;
}
}
</style>
</head>
<body>
<header id="header">
<nav id="side-menu">
<label for="show-menu" id="menu-button">Menu</label>
<input id="show-menu" role="button" type="checkbox">
<ul id="menu">
<li><a href="../"><strong>&larr; GS GSoC 2020</strong></a></li>
<li><a href="archive">Previous Months</a></li>
<li id="menu-title">STUDENTS</li>
<li><a href="index.php?student=hugo">hugo</a></li><li><a class="current" href="index.php?student=susannadiv">susannadiv</a></li><li><a href="index.php?student=rainydaysavings">rainydaysavings</a></li></ul>
</nav>
<h1>Daily Report Viewer | GS SoC 2020</h1>
<p>Organized by <strong><a href="https://www.diogo.site/">Diogo Cordeiro</a></strong></p>
<p>Mentors: <a href="https://www.diogo.site/">Diogo Cordeiro</a>, <a href="https://loadaverage.org/XRevan86">Alexei Sorokin</a>, <a href="https://dansup.com">Daniel Supernault</a> and <a href="http://status.hackerposse.com/rozzin">Joshua Judson Rosen</a></p>
</header>
<article id="student_report"><h2>Showing reports for susannadiv</h2><h3 id="day-0">Day 0</h3><p><strong>Summary:</strong> Debugged ActivityPub Following and Follower endpoint handling for empty list</p><p><strong>Dedicated Time (in hours):</strong> 5.2</p><pre>
- Set up remote debugging enviroment
- Located and half-way through fixing Following and Follower endpoint "empty list for a specific actor does not return correct json report" bug for the ActivityPub plugin; said bug has been observed and reproduced in a GS v2 postgres db-based instance.
Relevant commit:
</pre><h3 id="day-1">Day 1</h3><p><b>No report.</b></p><h3 id="day-2">Day 2</h3><p><strong>Summary:</strong> Studied and reviewed previous knowledge on ActivityPub Protocol</p><p><strong>Dedicated Time (in hours):</strong> 2.1</p><pre>
- Familiarized with the entirity of the AP plugin implementation
- Brief testing of actor's profile functionality
</pre><h3 id="day-3">Day 3</h3><p><strong>Summary:</strong> Fixed DB syntax error and gathered information on image uploading + codebase image-handling familiarization</p><p><strong>Dedicated Time (in hours):</strong> 4</p><pre>
- MR writing for previous debug session
</pre><h3 id="day-4">Day 4</h3><p><strong>Summary:</strong> Fixed the Postgres incompatible query in both the AP and Autocomplete plugins and the clean_profile script</p><p><strong>Dedicated Time (in hours):</strong> 9</p><pre>
- Brief testing of image uploading functionality
- Replaced "!=" with the ANSI standard operator "<>"
- Fixed bad db setup
- Relevant commits:
6d62653692fadb1b2680c8dd329774c1958f87ca [ActivityPub] Fix Postgres incompatible query in Following and Followed collection
125f88386dc65d2ac05c10e22def647c77005613 [SCRIPTS] Fix postgres incompatible query in clean_profiles.php
4226850d3a1cd697476a591f059c5b5b73c53e15 [Autocomplete] Fix postgres incompatible query in AutocompleteAction
f254fb2183a0da3e1874fb7196322c4747c72651 [ActivityPub] Replace "!=" with the ANSI standard operator "<>"
</pre><h3 id="day-5">Day 5</h3><p><b>No report.</b></p><h3 id="day-6">Day 6</h3><p><strong>Summary:</strong> Tested and attempted at physically optimizing tuned left-deep pipeline of notice-getting timeline query + Explained and learned about DBMS' abstract structures and postgres-specific physical time-sensitive performance optimization through usage of scalar subqueries as opposed to insiemistic operators</p><p><strong>Dedicated Time (in hours):</strong> 9.11</p><pre></pre><hr><p><strong>Total hours this week:</strong> 29.41</p><hr><h3 id="day-7">Day 7</h3><p><b>No report.</b></p><h3 id="day-8">Day 8</h3><p><strong>Summary:</strong> Tested thorughly image (and specifically avatar) upload handling in AP</p><p><strong>Dedicated Time (in hours):</strong> 2.15</p><pre></pre><h3 id="day-9">Day 9</h3><p><b>No report.</b></p><h3 id="day-10">Day 10</h3><p><b>No report.</b></p><h3 id="day-11">Day 11</h3><p><b>No report.</b></p><h3 id="day-12">Day 12</h3><p><b>No report.</b></p><h3 id="day-13">Day 13</h3><p><b>No report.</b></p><hr><p><strong>Total hours this week:</strong> 2.15</p><hr><h3 id="day-14">Day 14</h3><p><strong>Summary:</strong> First implementation of postman's DELETE http request function for cache refresh in AP + Testing of avatar fetching in AP + Testing of OStatus' queue handling for remote likes and writing of plan of action for AP's queue handler's implementation</p><p><strong>Dedicated Time (in hours):</strong> 9.45</p><pre>
Relevant commits:
- 08f61fc453b20c9029b0d6708c78518d044bd649 [ActivityPub] Implemented first, non-queued HTTP Delete request function
</pre><h3 id="day-15">Day 15</h3><p><strong>Summary:</strong> AP's queue handler function initial implementation + plan of action regarding pushing and actor division analysis</p><p><strong>Dedicated Time (in hours):</strong> 6.15</p><pre>
</pre><h3 id="day-16">Day 16</h3><p><strong>Summary:</strong> Finished AP's queue handler function implementation + continued avtar fromURI implementation & testing + started studying TFNM's possible unit tests</p><p><strong>Dedicated Time (in hours):</strong> 10</p><pre>
</pre><h3 id="day-17">Day 17</h3><p><b>No report.</b></p><h3 id="day-18">Day 18</h3><p><strong>Summary:</strong> Polished queue handling code + planned avatar fetching fromURL implementation</p><p><strong>Dedicated Time (in hours):</strong> 9.5</p><pre>
Relevant commits:
-212efc23d7765784bc3d46a9a261a6481c27adf5 [ActivityPub] Moved Delivery Events to queue handler
-5d2632e90b33fc0af78ea5b5613cc11ad0570a2f [ActivityPub] Fix delivery events queue handling
</pre><h3 id="day-19">Day 19</h3><p><strong>Summary:</strong> Finished fetch avatars in accordance to the new media system function + wrote PHP unit tests for AP + conducted AP user testing on follow/unfollow, like/undo_like events</p><p><strong>Dedicated Time (in hours):</strong> 12.5</p><pre>
Relevant commits:
-6a68ca3f0fc8cc49cecfa1476500a2caa3a39a88 [Federation] Fetch avatars in accordance to the new media system
</pre><h3 id="day-20">Day 20</h3><p><strong>Summary:</strong> AP php unit tests + queue handling debug and Actor/Object studying</p><p><strong>Dedicated Time (in hours):</strong> 10.15</p><pre></pre><hr><p><strong>Total hours this week:</strong> 57.75</p><hr><h3 id="day-21">Day 21</h3><p><strong>Summary:</strong> AP plugin testing + resources study</p><p><strong>Dedicated Time (in hours):</strong> 3</p><pre></pre><h3 id="day-22">Day 22</h3><p><strong>Summary:</strong> Fix ensuring presence of Actor Profile in notice creation + implemented model for polls support + wrote implementation plan for upcoming days</p><p><strong>Dedicated Time (in hours):</strong> 7</p><pre>
Relevant commit:
- 1ef8fa92d2e4d6b03cbace55557f2505342c69a3 [ActivityPub] Fix ensuring presence of Actor Profile in notice creation</pre><h3 id="day-23">Day 23</h3><p><strong>Summary:</strong> Fix implemnented model for polls support + further inquiring on imbox forwarding</p><p><strong>Dedicated Time (in hours):</strong> 6.5</p><pre></pre><h3 id="day-24">Day 24</h3><p><strong>Summary:</strong> Fix queue bug + further unanswered inquiring on polls support, polls_reply (according to the ActivityPub standard)</p><p><strong>Dedicated Time (in hours):</strong> 7</p><pre>
Relevant commit:
- b6e21d912fb4c63fcc12d95b42f24840c755f9fb [ActivityPub] Added Happenings support (pushed)
</pre><h3 id="day-25">Day 25</h3><p><strong>Summary:</strong> Analyzed invalid signatures inbox bug + fixed AP phptest model</p><p><strong>Dedicated Time (in hours):</strong> 5.5</p><pre>
Relevant commit:
- 1ef8fa92d2e4d6b03cbace55557f2505342c69a3 [ActivityPub] Fix ensuring presence of Actor Profile in notice creation
</pre><h3 id="day-26">Day 26</h3><p><strong>Summary:</strong> Implementation of failed queue</p><p><strong>Dedicated Time (in hours):</strong> 6</p><pre></pre><h3 id="day-27">Day 27</h3><p><strong>Summary:</strong> Fixed avatar fetching from external instances</p><p><strong>Dedicated Time (in hours):</strong> 6.5</p><pre></pre><hr><p><strong>Total hours this week:</strong> 41.5</p><hr><h3 id="day-28">Day 28</h3><p><b>No report.</b></p><h3 id="day-29">Day 29</h3><p><strong>Summary:</strong> Review Delete verb + prepared for merging</p><p><strong>Dedicated Time (in hours):</strong> 6</p><pre></pre><h3 id="day-30">Day 30</h3><p><b>No report.</b></p></article></body>
</html>

View File

@ -0,0 +1,120 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
<title>Daily Report Viewer | GS SoC 2020</title>
<link rel="icon" href="../../../favicon.png">
<meta charset="utf-8">
<meta name="robots" content="noindex, nofollow, nosnippet">
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="stylesheet" href="https://hackersatporto.com/assets/css/main.css">
<style>
#side-menu #menu-title {
color: #7a7a7a !important;
font-weight: 700;
}
@media screen and (max-width: 1200px) {
#side-menu #menu-title {
display:none;
}
}
</style>
</head>
<body>
<header id="header">
<nav id="side-menu">
<label for="show-menu" id="menu-button">Menu</label>
<input id="show-menu" role="button" type="checkbox">
<ul id="menu">
<li><a href="../"><strong>&larr; GS GSoC 2020</strong></a></li>
<li><a href="archive">Previous Months</a></li>
<li id="menu-title">STUDENTS</li>
<li><a class="current" href="index.php?student=hugo">hugo</a></li><li><a href="index.php?student=susannadiv">susannadiv</a></li><li><a href="index.php?student=rainydaysavings">rainydaysavings</a></li></ul>
</nav>
<h1>Daily Report Viewer | GS SoC 2020</h1>
<p>Organized by <strong><a href="https://www.diogo.site/">Diogo Cordeiro</a></strong></p>
<p>Mentors: <a href="https://www.diogo.site/">Diogo Cordeiro</a>, <a href="https://loadaverage.org/XRevan86">Alexei Sorokin</a>, <a href="https://dansup.com">Daniel Supernault</a> and <a href="http://status.hackerposse.com/rozzin">Joshua Judson Rosen</a></p>
</header>
<article id="student_report"><h2>Showing reports for hugo</h2><h3 id="day-0">Day 0</h3><p><strong>Summary:</strong> Small fixes and improving docker containers</p><p><strong>Dedicated Time (in hours):</strong> 2</p><pre>
- Fixed deprecated warnigns during installation
- Started configuring easier to use docker containers
<b>Relevant commits:</b>
- 6c844315aa41ab23f6800a557657a6a44bf8321e
</pre><h3 id="day-1">Day 1</h3><p><strong>Summary:</strong> Improving docker container</p><p><strong>Dedicated Time (in hours):</strong> 2</p><pre>
- Finished improving docker containers, with automatic SSL certificate creation, with Let's Encrypt
<b>Relevant commits:</b>
- 7ac5fdf31610424116557f428a965dab737c1577
</pre><h3 id="day-2">Day 2</h3><p><strong>Summary:</strong> Fixing docker environment and automatic configuration scripts</p><p><strong>Dedicated Time (in hours):</strong> 10</p><pre>
- Added script to configure app
- Fixed docker to configure the app environment
- Fixed install script
- Brought GnuDIP2 back to life https://notabug.org/someonewithpc/gnudip
<b>Relevant commits:</b>
- 8e9d4841ccc43da2c71c06a7bd0432be64d97114 [TOOLS] Added script to configure the installation and to bootstrap certificate creation with Let's Encrypt
- e202c55ffeb3ebf3b36ec98ace0d2e577629bd95 [DOCKER] Fixed docker environment to properly configure the app environment
- 12946733d7413bbcb11158f0e73af36d63f0c3a5 [TOOLS][DOCKER] Further fixes in the docker environment and fixed the install script
- 278650a7746eaa9b412ac24ef18da71e3d30f183 [TOOLS] Updated install script to also support mariadb
</pre><h3 id="day-3">Day 3</h3><p><strong>Summary:</strong> Writing a V3 installation instruction and code walkthrough document, backporting docker setup to v2</p><p><strong>Dedicated Time (in hours):</strong> 10</p><pre>
Relevant commits:
- b1c09fe06bc866fcf3537c8f008bd700203bad51 [DOCUMENTATION] Added install documentation
- 8ff3846c8906ccfe5e785624af910684616e2cb0 [DOCUMENTATION] Added a code walkthrough document, which explains how the codebase works
- d530fdb2baa67fa0a1099947d3457e92a2044435 [DOCKER][TOOLS] Updated docker environment and social install script
- d3cfaca3d65654438b9eb729aac8e77dc101cc43 [DOCKER] Small fixes to docker setup, imported from V2
- d7790ba8a7fe24f9289411ff2ad69b9fd68329e5 [DOCUMENTATION] Import installation instructions for installing without docker from V2
- b2e940419759737456bf636d31bf2126bd93e9b7 [SCRIPTS] Moved tools from bin to scripts and edited INSTALL.md
- d94466bbbab949de502a9a079ffd9e7cd52ba3c1 [DOCUMENTATION] Updated INSTALL.md to reflect the fact that a CNAME record can be used directly</pre><h3 id="day-4">Day 4</h3><p><b>No report.</b></p><h3 id="day-5">Day 5</h3><p><strong>Summary:</strong> Helping students setup V3, correcting and reviewing V3 commits</p><p><strong>Dedicated Time (in hours):</strong> 1</p><pre>
</pre><h3 id="day-6">Day 6</h3><p><strong>Summary:</strong> Helping students setup V3, reviewing V3 commits, some refactoring work</p><p><strong>Dedicated Time (in hours):</strong> 2</p><pre>
</pre><hr><p><strong>Total hours this week:</strong> 27</p><hr><h3 id="day-7">Day 7</h3><p><strong>Summary:</strong> Import commits by Diogo to add option to use self signed certificates, refactoring, rebased on nightly, changed author email</p><p><strong>Dedicated Time (in hours):</strong> 6</p><pre>
Relevant commits:
- 694d35635b128eddeada6568eb6adb7fd5e18b4a [FIX] Small bug fixes and docblock elaboration
- 4d52a08538310333515deb7afe516bdcdfe4ff72 [DOCKER][BOOTSTRAP] Add option to use a self signed cert
- e0274a645d086e10fa8b37d56c40bf8128500b0d [FORMATTING] Cherry-pick of Diogo's 763ac735c0758624ebd5957993dc0676b865927a
- 1a50b714de3ab13e137848b44e81ca4cb95d6874 [REFACTORING] Splitting up Common
- d73700947a234ef55b46f5c3a79bed76f1ebf759 [REFACTORING] Resolve errors from previous commit
- 1ad672f1f400fadc87d7ac6fb2e9b768feaa5819 [ASSETS] Import old favicon.ico
</pre><h3 id="day-8">Day 8</h3><p><strong>Summary:</strong> Studying Doctrine's documentation</p><p><strong>Dedicated Time (in hours):</strong> 3</p><pre>
- Trying to figure out the best way to provide database access, since
the Symfony-preferred way:
`$this->getDoctrine()->getRepository(Product::class)->find($id)`
seems much too verbose.
- Studying configuration options
- Merging report commits
</pre><h3 id="day-9">Day 9</h3><p><strong>Summary:</strong> Investigating how to use doctrine with symfony, prototyping, and helping Susanna setup her dev environment</p><p><strong>Dedicated Time (in hours):</strong> 5</p><pre>
</pre><h3 id="day-10">Day 10</h3><p><strong>Summary:</strong> Load default config values into database, small tweaks to docker and SchemaDefDriver</p><p><strong>Dedicated Time (in hours):</strong> 7</p><pre>
- ae4f11e8f812aa9e6d2a9b0fdaaf712ab315aca6 [DB][CONFIG] Bring default configs from V2 and implement DB wrapper
- 0570fea3fcde06ab0bf845a6a42ff41c0451da53 [DB][CONFIG] Loading defaults into database, doctrine static wrapper
- 6ade8ae7f555e905def2c662f05f2103b0b3535c [DOCKER] Change postgres data path to the correct one
- 82d178318b21901fba45a4a8ff0e3340bcb6affe [DB] Postgres doesn't understand '0000-00-00 00:00:00' for datetime, use '-infinity'
</pre><h3 id="day-11">Day 11</h3><p><strong>Summary:</strong> Implement database config defaults loading, help Eliseu and Susanna setup their dev environments</p><p><strong>Dedicated Time (in hours):</strong> 9</p><pre>
</pre><h3 id="day-12">Day 12</h3><p><strong>Summary:</strong> Updated install tools and optimized DB default loading</p><p><strong>Dedicated Time (in hours):</strong> 8</p><pre>
Commits:
- 0ae410978d79d405e793671d784f49f4ef088f23 [DB] Fix 'relation config doesn't exist'
- 9c8373abd83ef48e639e7a6fb18b9c1eeb12ca5c [TOOLS] Update install scripts
- dce5c802caaa95f129739936ca726d0fff252016 [DB] Change the way defaults are loaded, bulk insert, reload everything in debug mode, only on http requests (not command line)
- c759ab239b2e0490f8db66d3a7eea4ad6764d169 [GIT] Added docker-compose to gitignore, in preparation for using a script to generate them
- 852c715ef94605e2a61639fca99f20161e350852 [DEFAULTS] Remove deprecated defaults and convert them to snake_case
</pre><h3 id="day-13">Day 13</h3><p><strong>Summary:</strong> Documented all config options, added alchemy/zippy</p><p><strong>Dedicated Time (in hours):</strong> 3</p><pre>
</pre><hr><p><strong>Total hours this week:</strong> 41</p><hr><h3 id="day-14">Day 14</h3><p><b>No report.</b></p><h3 id="day-15">Day 15</h3><p><b>No report.</b></p><h3 id="day-16">Day 16</h3><p><b>No report.</b></p><h3 id="day-17">Day 17</h3><p><b>No report.</b></p><h3 id="day-18">Day 18</h3><p><b>No report.</b></p><h3 id="day-19">Day 19</h3><p><b>No report.</b></p><h3 id="day-20">Day 20</h3><p><strong>Summary:</strong> Studying other software's docker configuration and codebases</p><p><strong>Dedicated Time (in hours):</strong> 5</p><pre>
</pre><hr><p><strong>Total hours this week:</strong> 5</p><hr><h3 id="day-21">Day 21</h3><p><strong>Summary:</strong> Studying OpenID, OAuth and SASL protocol, for potential Single-Sign-On</p><p><strong>Dedicated Time (in hours):</strong> 4</p><pre>
</pre><h3 id="day-22">Day 22</h3><p><strong>Summary:</strong> Help Susanna setup her V2 instance, updating PR to upstream `functional-php`</p><p><strong>Dedicated Time (in hours):</strong> 5</p><pre>
</pre><h3 id="day-23">Day 23</h3><p><strong>Summary:</strong> Help Susanna setup her V2 instance, and Eliseu understand how to implement templates</p><p><strong>Dedicated Time (in hours):</strong> 2</p><pre>
</pre><h3 id="day-24">Day 24</h3><p><b>No report.</b></p><h3 id="day-25">Day 25</h3><p><b>No report.</b></p><h3 id="day-26">Day 26</h3><p><b>No report.</b></p><h3 id="day-27">Day 27</h3><p><b>No report.</b></p><hr><p><strong>Total hours this week:</strong> 11</p><hr></article></body>
</html>

View File

@ -0,0 +1,55 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
<title>Daily Report Viewer | GS SoC 2020</title>
<link rel="icon" href="../../../favicon.png">
<meta charset="utf-8">
<meta name="robots" content="noindex, nofollow, nosnippet">
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="stylesheet" href="https://hackersatporto.com/assets/css/main.css">
<style>
#side-menu #menu-title {
color: #7a7a7a !important;
font-weight: 700;
}
@media screen and (max-width: 1200px) {
#side-menu #menu-title {
display:none;
}
}
</style>
</head>
<body>
<header id="header">
<nav id="side-menu">
<label for="show-menu" id="menu-button">Menu</label>
<input id="show-menu" role="button" type="checkbox">
<ul id="menu">
<li><a href="../"><strong>&larr; GS GSoC 2020</strong></a></li>
<li><a href="archive">Previous Months</a></li>
<li id="menu-title">STUDENTS</li>
<li><a href="index.php?student=hugo">hugo</a></li><li><a href="index.php?student=susannadiv">susannadiv</a></li><li><a class="current" href="index.php?student=rainydaysavings">rainydaysavings</a></li></ul>
</nav>
<h1>Daily Report Viewer | GS SoC 2020</h1>
<p>Organized by <strong><a href="https://www.diogo.site/">Diogo Cordeiro</a></strong></p>
<p>Mentors: <a href="https://www.diogo.site/">Diogo Cordeiro</a>, <a href="https://loadaverage.org/XRevan86">Alexei Sorokin</a>, <a href="https://dansup.com">Daniel Supernault</a> and <a href="http://status.hackerposse.com/rozzin">Joshua Judson Rosen</a></p>
</header>
<article id="student_report"><h2>Showing reports for rainydaysavings</h2><h3 id="day-0">Day 0</h3><p><b>No report.</b></p><h3 id="day-1">Day 1</h3><p><strong>Summary:</strong> Understanding the codebase</p><p><strong>Dedicated Time (in hours):</strong> 3</p><pre>
- Studying PHP
- Getting a grasp of what I need to implement and how
- Studying Twig's docs, emphasis on controllers
</pre><h3 id="day-2">Day 2</h3><p><strong>Summary:</strong> Further PHP study and practice</p><p><strong>Dedicated Time (in hours):</strong> 5</p><pre>
- Study and practice with PHP
</pre><h3 id="day-3">Day 3</h3><p><b>No report.</b></p><h3 id="day-4">Day 4</h3><p><b>No report.</b></p><h3 id="day-5">Day 5</h3><p><b>No report.</b></p><h3 id="day-6">Day 6</h3><p><b>No report.</b></p><hr><p><strong>Total hours this week:</strong> 8</p><hr><h3 id="day-7">Day 7</h3><p><b>No report.</b></p><h3 id="day-8">Day 8</h3><p><b>No report.</b></p><h3 id="day-9">Day 9</h3><p><b>No report.</b></p><h3 id="day-10">Day 10</h3><p><b>No report.</b></p><h3 id="day-11">Day 11</h3><p><strong>Summary:</strong> GNU social v3 - setting up</p><p><strong>Dedicated Time (in hours):</strong> 5</p><pre>
- Setting up v3 with help from Diogo and Hugo
- First assigment given
- Studying Symfony templating
</pre><h3 id="day-12">Day 12</h3><p><b>No report.</b></p><h3 id="day-13">Day 13</h3><p><b>No report.</b></p><hr><p><strong>Total hours this week:</strong> 5</p><hr><h3 id="day-14">Day 14</h3><p><b>No report.</b></p><h3 id="day-15">Day 15</h3><p><b>No report.</b></p><h3 id="day-16">Day 16</h3><p><b>No report.</b></p><h3 id="day-17">Day 17</h3><p><b>No report.</b></p><h3 id="day-18">Day 18</h3><p><b>No report.</b></p><h3 id="day-19">Day 19</h3><p><b>No report.</b></p><h3 id="day-20">Day 20</h3><p><b>No report.</b></p><hr><p><strong>Total hours this week:</strong> 0</p><hr><h3 id="day-21">Day 21</h3><p><b>No report.</b></p><h3 id="day-22">Day 22</h3><p><strong>Summary:</strong> New design work</p><p><strong>Dedicated Time (in hours):</strong> 10</p><pre>
- PHP practice;
- New design and approach;
Relevant commits:
- https://github.com/rainydaysavings/GNU-social-designs/commit/3270007971df227968129319aab444b088120c27 (@designs)
</pre><h3 id="day-23">Day 23</h3><p><b>No report.</b></p><h3 id="day-24">Day 24</h3><p><b>No report.</b></p><h3 id="day-25">Day 25</h3><p><b>No report.</b></p><h3 id="day-26">Day 26</h3><p><b>No report.</b></p><h3 id="day-27">Day 27</h3><p><b>No report.</b></p><hr><p><strong>Total hours this week:</strong> 10</p><hr></article></body>
</html>

View File

@ -0,0 +1,67 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
<title>Daily Report Viewer | GS SoC 2020</title>
<link rel="icon" href="../../../favicon.png">
<meta charset="utf-8">
<meta name="robots" content="noindex, nofollow, nosnippet">
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="stylesheet" href="https://hackersatporto.com/assets/css/main.css">
<style>
#side-menu #menu-title {
color: #7a7a7a !important;
font-weight: 700;
}
@media screen and (max-width: 1200px) {
#side-menu #menu-title {
display:none;
}
}
</style>
</head>
<body>
<header id="header">
<nav id="side-menu">
<label for="show-menu" id="menu-button">Menu</label>
<input id="show-menu" role="button" type="checkbox">
<ul id="menu">
<li><a href="../"><strong>&larr; GS GSoC 2020</strong></a></li>
<li><a href="archive">Previous Months</a></li>
<li id="menu-title">STUDENTS</li>
<li><a href="index.php?student=hugo">hugo</a></li><li><a class="current" href="index.php?student=susannadiv">susannadiv</a></li><li><a href="index.php?student=rainydaysavings">rainydaysavings</a></li></ul>
</nav>
<h1>Daily Report Viewer | GS SoC 2020</h1>
<p>Organized by <strong><a href="https://www.diogo.site/">Diogo Cordeiro</a></strong></p>
<p>Mentors: <a href="https://www.diogo.site/">Diogo Cordeiro</a>, <a href="https://loadaverage.org/XRevan86">Alexei Sorokin</a>, <a href="https://dansup.com">Daniel Supernault</a> and <a href="http://status.hackerposse.com/rozzin">Joshua Judson Rosen</a></p>
</header>
<article id="student_report"><h2>Showing reports for susannadiv</h2><h3 id="day-0">Day 0</h3><p><b>No report.</b></p><h3 id="day-1">Day 1</h3><p><b>No report.</b></p><h3 id="day-2">Day 2</h3><p><b>No report.</b></p><h3 id="day-3">Day 3</h3><p><b>No report.</b></p><h3 id="day-4">Day 4</h3><p><b>No report.</b></p><h3 id="day-5">Day 5</h3><p><strong>Summary:</strong> Setting up the enviroment</p><p><strong>Dedicated Time (in hours):</strong> 4.5</p><pre>
- Set up of a GS-dedicated virtual machine
- Installation of docker and docker-compose
- Acquired the domain susannadiv.tk and set up /bin/bootstrap_certificates
</pre><h3 id="day-6">Day 6</h3><p><strong>Summary:</strong> Continuation of enviroment setup</p><p><strong>Dedicated Time (in hours):</strong> 2.5</p><pre>
- Registered for a GnuDIP dynamic DNS solution
- Researched systemd Debian documentation page
</pre><hr><p><strong>Total hours this week:</strong> 7</p><hr><h3 id="day-7">Day 7</h3><p><strong>Summary:</strong> Self-study of UNIX/Bash-based tools</p><p><strong>Dedicated Time (in hours):</strong> 1.75</p><pre>
- Finished studying all the material regarding git usage
- Studied recommended (and some additional) resources regarding file
manipulation and shell scripting
- Short self-training period to freshen-up previous knowledge
</pre><h3 id="day-8">Day 8</h3><p><strong>Summary:</strong> Continuation of enviroment setup</p><p><strong>Dedicated Time (in hours):</strong> 0.15</p><pre></pre><h3 id="day-9">Day 9</h3><p><b>No report.</b></p><h3 id="day-10">Day 10</h3><p><strong>Summary:</strong> Debugged initial setup</p><p><strong>Dedicated Time (in hours):</strong> 6</p><pre>
- Configured CNAME profile record from the DNS provider
- Succefully finished GunDIP dynamic DNS hosting setup
- Installed necessary php-packages
</pre><h3 id="day-11">Day 11</h3><p><b>No report.</b></p><h3 id="day-12">Day 12</h3><p><strong>Summary:</strong> Terminated installation</p><p><strong>Dedicated Time (in hours):</strong> 7</p><pre>
- Ateended briefing on ActivityPub, OStatus, Core and Plugins functionalities
</pre><h3 id="day-13">Day 13</h3><p><b>No report.</b></p><hr><p><strong>Total hours this week:</strong> 14.9</p><hr><h3 id="day-14">Day 14</h3><p><b>No report.</b></p><h3 id="day-15">Day 15</h3><p><b>No report.</b></p><h3 id="day-16">Day 16</h3><p><strong>Summary:</strong> Finished CSS styling on the GNU social landing page</p><p><strong>Dedicated Time (in hours):</strong> 3</p><pre>
- Perfected readability by tuning down rgb brighteness for a less vivacious dark background + modified font palette into lighter tones
</pre><h3 id="day-17">Day 17</h3><p><b>No report.</b></p><h3 id="day-18">Day 18</h3><p><b>No report.</b></p><h3 id="day-19">Day 19</h3><p><strong>Summary:</strong> Continued personal susannadiv.tk instances debugging</p><p><strong>Dedicated Time (in hours):</strong> 4.25</p><pre>
- Searched for port-forwarding isp-related problems and analized possible solutions
</pre><h3 id="day-20">Day 20</h3><p><b>No report.</b></p><hr><p><strong>Total hours this week:</strong> 7.25</p><hr><h3 id="day-21">Day 21</h3><p><b>No report.</b></p><h3 id="day-22">Day 22</h3><p><strong>Summary:</strong> Setting up of AWS VPS service EC2</p><p><strong>Dedicated Time (in hours):</strong> 6</p><pre>
- Setting up of a fully functioning EC-2 instance with docker and docker-compose
- Debugging of DNS problems
- Installation of another CS v2 instance on said EC-2 machine
</pre><h3 id="day-23">Day 23</h3><p><strong>Summary:</strong> Succesfully set up net-based instance and started 'get to know the federation handling' tests</p><p><strong>Dedicated Time (in hours):</strong> 1.15</p><pre>
</pre><h3 id="day-24">Day 24</h3><p><b>No report.</b></p><h3 id="day-25">Day 25</h3><p><b>No report.</b></p><h3 id="day-26">Day 26</h3><p><b>No report.</b></p><h3 id="day-27">Day 27</h3><p><b>No report.</b></p><hr><p><strong>Total hours this week:</strong> 7.15</p><hr></article></body>
</html>

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,5 @@
/*!
* Vue.js v2.6.11
* (c) 2014-2019 Evan You
* Released under the MIT License.
*/

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 KiB

View File

@ -0,0 +1,4 @@
{
"/app.js": "/app.js?id=433cca13c225456f51bd",
"/app.css": "/app.css?id=0f46043919c35da37307"
}

File diff suppressed because it is too large Load Diff

After

Width:  |  Height:  |  Size: 699 KiB

View File

@ -0,0 +1,803 @@
<?xml version="1.0" standalone="no"?>
<!--
Font Awesome Free 5.13.0 by @fontawesome - https://fontawesome.com
License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License)
-->
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" >
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1">
<metadata>
Created by FontForge 20190801 at Mon Mar 23 10:45:51 2020
By Robert Madole
Copyright (c) Font Awesome
</metadata>
<defs>
<font id="FontAwesome5Free-Regular" horiz-adv-x="512" >
<font-face
font-family="Font Awesome 5 Free Regular"
font-weight="400"
font-stretch="normal"
units-per-em="512"
panose-1="2 0 5 3 0 0 0 0 0 0"
ascent="448"
descent="-64"
bbox="-0.0663408 -64.0662 640.01 448.1"
underline-thickness="25"
underline-position="-50"
unicode-range="U+0020-F5C8"
/>
<missing-glyph />
<glyph glyph-name="heart" unicode="&#xf004;"
d="M458.4 383.7c75.2998 -63.4004 64.0996 -166.601 10.5996 -221.3l-175.4 -178.7c-10 -10.2002 -23.2998 -15.7998 -37.5996 -15.7998c-14.2002 0 -27.5996 5.69922 -37.5996 15.8994l-175.4 178.7c-53.5996 54.7002 -64.5996 157.9 10.5996 221.2
c57.8008 48.7002 147.101 41.2998 202.4 -15c55.2998 56.2998 144.6 63.5996 202.4 15zM434.8 196.2c36.2002 36.8994 43.7998 107.7 -7.2998 150.8c-38.7002 32.5996 -98.7002 27.9004 -136.5 -10.5996l-35 -35.7002l-35 35.7002
c-37.5996 38.2998 -97.5996 43.1992 -136.5 10.5c-51.2002 -43.1006 -43.7998 -113.5 -7.2998 -150.7l175.399 -178.7c2.40039 -2.40039 4.40039 -2.40039 6.80078 0z" />
<glyph glyph-name="star" unicode="&#xf005;" horiz-adv-x="576"
d="M528.1 276.5c26.2002 -3.7998 36.7002 -36.0996 17.7002 -54.5996l-105.7 -103l25 -145.5c4.5 -26.3008 -23.1992 -45.9004 -46.3994 -33.7002l-130.7 68.7002l-130.7 -68.7002c-23.2002 -12.2998 -50.8994 7.39941 -46.3994 33.7002l25 145.5l-105.7 103
c-19 18.5 -8.5 50.7998 17.7002 54.5996l146.1 21.2998l65.2998 132.4c11.7998 23.8994 45.7002 23.5996 57.4004 0l65.2998 -132.4zM388.6 135.7l100.601 98l-139 20.2002l-62.2002 126l-62.2002 -126l-139 -20.2002l100.601 -98l-23.7002 -138.4l124.3 65.2998
l124.3 -65.2998z" />
<glyph glyph-name="user" unicode="&#xf007;" horiz-adv-x="448"
d="M313.6 144c74.2002 0 134.4 -60.2002 134.4 -134.4v-25.5996c0 -26.5 -21.5 -48 -48 -48h-352c-26.5 0 -48 21.5 -48 48v25.5996c0 74.2002 60.2002 134.4 134.4 134.4c28.7998 0 42.5 -16 89.5996 -16s60.9004 16 89.5996 16zM400 -16v25.5996
c0 47.6006 -38.7998 86.4004 -86.4004 86.4004c-14.6992 0 -37.8994 -16 -89.5996 -16c-51.2998 0 -75 16 -89.5996 16c-47.6006 0 -86.4004 -38.7998 -86.4004 -86.4004v-25.5996h352zM224 160c-79.5 0 -144 64.5 -144 144s64.5 144 144 144s144 -64.5 144 -144
s-64.5 -144 -144 -144zM224 400c-52.9004 0 -96 -43.0996 -96 -96s43.0996 -96 96 -96s96 43.0996 96 96s-43.0996 96 -96 96z" />
<glyph glyph-name="clock" unicode="&#xf017;"
d="M256 440c137 0 248 -111 248 -248s-111 -248 -248 -248s-248 111 -248 248s111 248 248 248zM256 -8c110.5 0 200 89.5 200 200s-89.5 200 -200 200s-200 -89.5 -200 -200s89.5 -200 200 -200zM317.8 96.4004l-84.8994 61.6992
c-3.10059 2.30078 -4.90039 5.90039 -4.90039 9.7002v164.2c0 6.59961 5.40039 12 12 12h32c6.59961 0 12 -5.40039 12 -12v-141.7l66.7998 -48.5996c5.40039 -3.90039 6.5 -11.4004 2.60059 -16.7998l-18.8008 -25.9004c-3.89941 -5.2998 -11.3994 -6.5 -16.7998 -2.59961z
" />
<glyph glyph-name="list-alt" unicode="&#xf022;"
d="M464 416c26.5098 0 48 -21.4902 48 -48v-352c0 -26.5098 -21.4902 -48 -48 -48h-416c-26.5098 0 -48 21.4902 -48 48v352c0 26.5098 21.4902 48 48 48h416zM458 16c3.31152 0 6 2.68848 6 6v340c0 3.31152 -2.68848 6 -6 6h-404c-3.31152 0 -6 -2.68848 -6 -6v-340
c0 -3.31152 2.68848 -6 6 -6h404zM416 108v-24c0 -6.62695 -5.37305 -12 -12 -12h-200c-6.62695 0 -12 5.37305 -12 12v24c0 6.62695 5.37305 12 12 12h200c6.62695 0 12 -5.37305 12 -12zM416 204v-24c0 -6.62695 -5.37305 -12 -12 -12h-200c-6.62695 0 -12 5.37305 -12 12
v24c0 6.62695 5.37305 12 12 12h200c6.62695 0 12 -5.37305 12 -12zM416 300v-24c0 -6.62695 -5.37305 -12 -12 -12h-200c-6.62695 0 -12 5.37305 -12 12v24c0 6.62695 5.37305 12 12 12h200c6.62695 0 12 -5.37305 12 -12zM164 288c0 -19.8818 -16.1182 -36 -36 -36
s-36 16.1182 -36 36s16.1182 36 36 36s36 -16.1182 36 -36zM164 192c0 -19.8818 -16.1182 -36 -36 -36s-36 16.1182 -36 36s16.1182 36 36 36s36 -16.1182 36 -36zM164 96c0 -19.8818 -16.1182 -36 -36 -36s-36 16.1182 -36 36s16.1182 36 36 36s36 -16.1182 36 -36z" />
<glyph glyph-name="flag" unicode="&#xf024;"
d="M336.174 368c35.4668 0 73.0195 12.6914 108.922 28.1797c31.6406 13.6514 66.9043 -9.65723 66.9043 -44.1162v-239.919c0 -16.1953 -8.1543 -31.3057 -21.7129 -40.1631c-26.5762 -17.3643 -70.0693 -39.9814 -128.548 -39.9814c-68.6084 0 -112.781 32 -161.913 32
c-56.5674 0 -89.957 -11.2803 -127.826 -28.5566v-83.4434c0 -8.83691 -7.16309 -16 -16 -16h-16c-8.83691 0 -16 7.16309 -16 16v406.438c-14.3428 8.2998 -24 23.7979 -24 41.5615c0 27.5693 23.2422 49.71 51.2012 47.8965
c22.9658 -1.49023 41.8662 -19.4717 44.4805 -42.3379c0.177734 -1.52441 0.321289 -4.00781 0.321289 -5.54199c0 -4.30176 -1.10352 -11.1035 -2.46289 -15.1846c22.418 8.68555 49.4199 15.168 80.7207 15.168c68.6084 0 112.781 -32 161.913 -32zM464 112v240
c-31.5059 -14.6338 -84.5547 -32 -127.826 -32c-59.9111 0 -101.968 32 -161.913 32c-41.4365 0 -80.4766 -16.5879 -102.261 -32v-232c31.4473 14.5967 84.4648 24 127.826 24c59.9111 0 101.968 -32 161.913 -32c41.4365 0 80.4775 16.5879 102.261 32z" />
<glyph glyph-name="bookmark" unicode="&#xf02e;" horiz-adv-x="384"
d="M336 448c26.5098 0 48 -21.4902 48 -48v-464l-192 112l-192 -112v464c0 26.5098 21.4902 48 48 48h288zM336 19.5703v374.434c0 3.31348 -2.68555 5.99609 -6 5.99609h-276c-3.31152 0 -6 -2.68848 -6 -6v-374.43l144 84z" />
<glyph glyph-name="image" unicode="&#xf03e;"
d="M464 384c26.5098 0 48 -21.4902 48 -48v-288c0 -26.5098 -21.4902 -48 -48 -48h-416c-26.5098 0 -48 21.4902 -48 48v288c0 26.5098 21.4902 48 48 48h416zM458 48c3.31152 0 6 2.68848 6 6v276c0 3.31152 -2.68848 6 -6 6h-404c-3.31152 0 -6 -2.68848 -6 -6v-276
c0 -3.31152 2.68848 -6 6 -6h404zM128 296c22.0908 0 40 -17.9092 40 -40s-17.9092 -40 -40 -40s-40 17.9092 -40 40s17.9092 40 40 40zM96 96v48l39.5137 39.5146c4.6875 4.68652 12.2852 4.68652 16.9717 0l39.5146 -39.5146l119.514 119.515
c4.6875 4.68652 12.2852 4.68652 16.9717 0l87.5146 -87.5146v-80h-320z" />
<glyph glyph-name="edit" unicode="&#xf044;" horiz-adv-x="576"
d="M402.3 103.1l32 32c5 5 13.7002 1.5 13.7002 -5.69922v-145.4c0 -26.5 -21.5 -48 -48 -48h-352c-26.5 0 -48 21.5 -48 48v352c0 26.5 21.5 48 48 48h273.5c7.09961 0 10.7002 -8.59961 5.7002 -13.7002l-32 -32c-1.5 -1.5 -3.5 -2.2998 -5.7002 -2.2998h-241.5v-352h352
v113.5c0 2.09961 0.799805 4.09961 2.2998 5.59961zM558.9 304.9l-262.601 -262.601l-90.3994 -10c-26.2002 -2.89941 -48.5 19.2002 -45.6006 45.6006l10 90.3994l262.601 262.601c22.8994 22.8994 59.8994 22.8994 82.6992 0l43.2002 -43.2002
c22.9004 -22.9004 22.9004 -60 0.100586 -82.7998zM460.1 274l-58.0996 58.0996l-185.8 -185.899l-7.2998 -65.2998l65.2998 7.2998zM524.9 353.7l-43.2002 43.2002c-4.10059 4.09961 -10.7998 4.09961 -14.7998 0l-30.9004 -30.9004l58.0996 -58.0996l30.9004 30.8994
c4 4.2002 4 10.7998 -0.0996094 14.9004z" />
<glyph glyph-name="times-circle" unicode="&#xf057;"
d="M256 440c137 0 248 -111 248 -248s-111 -248 -248 -248s-248 111 -248 248s111 248 248 248zM256 -8c110.5 0 200 89.5 200 200s-89.5 200 -200 200s-200 -89.5 -200 -200s89.5 -200 200 -200zM357.8 254.2l-62.2002 -62.2002l62.2002 -62.2002
c4.7002 -4.7002 4.7002 -12.2998 0 -17l-22.5996 -22.5996c-4.7002 -4.7002 -12.2998 -4.7002 -17 0l-62.2002 62.2002l-62.2002 -62.2002c-4.7002 -4.7002 -12.2998 -4.7002 -17 0l-22.5996 22.5996c-4.7002 4.7002 -4.7002 12.2998 0 17l62.2002 62.2002l-62.2002 62.2002
c-4.7002 4.7002 -4.7002 12.2998 0 17l22.5996 22.5996c4.7002 4.7002 12.2998 4.7002 17 0l62.2002 -62.2002l62.2002 62.2002c4.7002 4.7002 12.2998 4.7002 17 0l22.5996 -22.5996c4.7002 -4.7002 4.7002 -12.2998 0 -17z" />
<glyph glyph-name="check-circle" unicode="&#xf058;"
d="M256 440c136.967 0 248 -111.033 248 -248s-111.033 -248 -248 -248s-248 111.033 -248 248s111.033 248 248 248zM256 392c-110.549 0 -200 -89.4678 -200 -200c0 -110.549 89.4678 -200 200 -200c110.549 0 200 89.4678 200 200c0 110.549 -89.4678 200 -200 200z
M396.204 261.733c4.66699 -4.70508 4.63672 -12.3037 -0.0673828 -16.9717l-172.589 -171.204c-4.70508 -4.66797 -12.3027 -4.63672 -16.9697 0.0683594l-90.7812 91.5156c-4.66797 4.70605 -4.63672 12.3047 0.0683594 16.9717l22.7188 22.5361
c4.70508 4.66699 12.3027 4.63574 16.9697 -0.0693359l59.792 -60.2773l141.353 140.216c4.70508 4.66797 12.3027 4.6377 16.9697 -0.0673828z" />
<glyph glyph-name="question-circle" unicode="&#xf059;"
d="M256 440c136.957 0 248 -111.083 248 -248c0 -136.997 -111.043 -248 -248 -248s-248 111.003 -248 248c0 136.917 111.043 248 248 248zM256 -8c110.569 0 200 89.4697 200 200c0 110.529 -89.5088 200 -200 200c-110.528 0 -200 -89.5049 -200 -200
c0 -110.569 89.4678 -200 200 -200zM363.244 247.2c0 -67.0518 -72.4209 -68.084 -72.4209 -92.8633v-6.33691c0 -6.62695 -5.37305 -12 -12 -12h-45.6475c-6.62695 0 -12 5.37305 -12 12v8.65918c0 35.7451 27.1006 50.0342 47.5791 61.5156
c17.5615 9.84473 28.3242 16.541 28.3242 29.5791c0 17.2461 -21.999 28.6934 -39.7842 28.6934c-23.1885 0 -33.8936 -10.9775 -48.9424 -29.9697c-4.05664 -5.11914 -11.46 -6.07031 -16.666 -2.12402l-27.8232 21.0986
c-5.10742 3.87207 -6.25098 11.0654 -2.64453 16.3633c23.627 34.6934 53.7217 54.1846 100.575 54.1846c49.0713 0 101.45 -38.3037 101.45 -88.7998zM298 80c0 -23.1592 -18.8408 -42 -42 -42s-42 18.8408 -42 42s18.8408 42 42 42s42 -18.8408 42 -42z" />
<glyph glyph-name="eye" unicode="&#xf06e;" horiz-adv-x="576"
d="M288 304c0.0927734 0 0.244141 0.000976562 0.336914 0.000976562c61.6641 0 111.71 -50.0469 111.71 -111.711c0 -61.6631 -50.0459 -111.71 -111.71 -111.71s-111.71 50.0469 -111.71 111.71c0 8.71289 1.95898 22.5781 4.37305 30.9502
c6.93066 -3.94141 19.0273 -7.18457 27 -7.24023c30.9121 0 56 25.0879 56 56c-0.0556641 7.97266 -3.29883 20.0693 -7.24023 27c8.42383 2.62207 22.4189 4.8623 31.2402 5zM572.52 206.6c1.9209 -3.79883 3.47949 -10.3379 3.47949 -14.5947
s-1.55859 -10.7959 -3.47949 -14.5947c-54.1992 -105.771 -161.59 -177.41 -284.52 -177.41s-230.29 71.5898 -284.52 177.4c-1.9209 3.79883 -3.47949 10.3379 -3.47949 14.5947s1.55859 10.7959 3.47949 14.5947c54.1992 105.771 161.59 177.41 284.52 177.41
s230.29 -71.5898 284.52 -177.4zM288 48c98.6602 0 189.1 55 237.93 144c-48.8398 89 -139.27 144 -237.93 144s-189.09 -55 -237.93 -144c48.8398 -89 139.279 -144 237.93 -144z" />
<glyph glyph-name="eye-slash" unicode="&#xf070;" horiz-adv-x="640"
d="M634 -23c3.31738 -2.65137 6.00977 -8.25098 6.00977 -12.498c0 -3.10449 -1.57715 -7.58984 -3.51953 -10.0117l-10 -12.4902c-2.65234 -3.31152 -8.24707 -6 -12.4902 -6c-3.09961 0 -7.58008 1.57227 -10 3.50977l-598 467.49
c-3.31738 2.65137 -6.00977 8.25098 -6.00977 12.498c0 3.10449 1.57715 7.58984 3.51953 10.0117l10 12.4902c2.65234 3.31152 8.24707 6 12.4902 6c3.09961 0 7.58008 -1.57227 10 -3.50977zM296.79 301.53c6.33496 1.35059 16.7324 2.45801 23.21 2.46973
c60.4805 0 109.36 -47.9102 111.58 -107.85zM343.21 82.46c-6.33496 -1.34375 -16.7334 -2.44629 -23.21 -2.45996c-60.4697 0 -109.35 47.9102 -111.58 107.84zM320 336c-19.8799 0 -39.2803 -2.7998 -58.2197 -7.09961l-46.4102 36.29
c32.9199 11.8096 67.9297 18.8096 104.63 18.8096c122.93 0 230.29 -71.5898 284.57 -177.4c1.91992 -3.79883 3.47949 -10.3379 3.47949 -14.5947s-1.55957 -10.7959 -3.47949 -14.5947c-11.7197 -22.7598 -35.4189 -56.4092 -52.9004 -75.1104l-37.7402 29.5
c14.333 15.0156 34.0449 41.9854 44 60.2002c-48.8398 89 -139.279 144 -237.93 144zM320 48c19.8896 0 39.2803 2.7998 58.2197 7.08984l46.4102 -36.2803c-32.9199 -11.7598 -67.9297 -18.8096 -104.63 -18.8096c-122.92 0 -230.28 71.5898 -284.51 177.4
c-1.9209 3.79883 -3.47949 10.3379 -3.47949 14.5947s1.55859 10.7959 3.47949 14.5947c11.7168 22.7568 35.4111 56.4014 52.8896 75.1006l37.7402 -29.5c-14.3467 -15.0107 -34.0811 -41.9756 -44.0498 -60.1904c48.8496 -89 139.279 -144 237.93 -144z" />
<glyph glyph-name="calendar-alt" unicode="&#xf073;" horiz-adv-x="448"
d="M148 160h-40c-6.59961 0 -12 5.40039 -12 12v40c0 6.59961 5.40039 12 12 12h40c6.59961 0 12 -5.40039 12 -12v-40c0 -6.59961 -5.40039 -12 -12 -12zM256 172c0 -6.59961 -5.40039 -12 -12 -12h-40c-6.59961 0 -12 5.40039 -12 12v40c0 6.59961 5.40039 12 12 12h40
c6.59961 0 12 -5.40039 12 -12v-40zM352 172c0 -6.59961 -5.40039 -12 -12 -12h-40c-6.59961 0 -12 5.40039 -12 12v40c0 6.59961 5.40039 12 12 12h40c6.59961 0 12 -5.40039 12 -12v-40zM256 76c0 -6.59961 -5.40039 -12 -12 -12h-40c-6.59961 0 -12 5.40039 -12 12v40
c0 6.59961 5.40039 12 12 12h40c6.59961 0 12 -5.40039 12 -12v-40zM160 76c0 -6.59961 -5.40039 -12 -12 -12h-40c-6.59961 0 -12 5.40039 -12 12v40c0 6.59961 5.40039 12 12 12h40c6.59961 0 12 -5.40039 12 -12v-40zM352 76c0 -6.59961 -5.40039 -12 -12 -12h-40
c-6.59961 0 -12 5.40039 -12 12v40c0 6.59961 5.40039 12 12 12h40c6.59961 0 12 -5.40039 12 -12v-40zM448 336v-352c0 -26.5 -21.5 -48 -48 -48h-352c-26.5 0 -48 21.5 -48 48v352c0 26.5 21.5 48 48 48h48v52c0 6.59961 5.40039 12 12 12h40
c6.59961 0 12 -5.40039 12 -12v-52h128v52c0 6.59961 5.40039 12 12 12h40c6.59961 0 12 -5.40039 12 -12v-52h48c26.5 0 48 -21.5 48 -48zM400 -10v298h-352v-298c0 -3.2998 2.7002 -6 6 -6h340c3.2998 0 6 2.7002 6 6z" />
<glyph glyph-name="comment" unicode="&#xf075;"
d="M256 416c141.4 0 256 -93.0996 256 -208s-114.6 -208 -256 -208c-32.7998 0 -64 5.2002 -92.9004 14.2998c-29.0996 -20.5996 -77.5996 -46.2998 -139.1 -46.2998c-9.59961 0 -18.2998 5.7002 -22.0996 14.5c-3.80078 8.7998 -2 19 4.59961 26
c0.5 0.400391 31.5 33.7998 46.4004 73.2002c-33 35.0996 -52.9004 78.7002 -52.9004 126.3c0 114.9 114.6 208 256 208zM256 48c114.7 0 208 71.7998 208 160s-93.2998 160 -208 160s-208 -71.7998 -208 -160c0 -42.2002 21.7002 -74.0996 39.7998 -93.4004
l20.6006 -21.7998l-10.6006 -28.0996c-5.5 -14.5 -12.5996 -28.1006 -19.8994 -40.2002c23.5996 7.59961 43.1992 18.9004 57.5 29l19.5 13.7998l22.6992 -7.2002c25.3008 -8 51.7002 -12.0996 78.4004 -12.0996z" />
<glyph glyph-name="folder" unicode="&#xf07b;"
d="M464 320c26.5098 0 48 -21.4902 48 -48v-224c0 -26.5098 -21.4902 -48 -48 -48h-416c-26.5098 0 -48 21.4902 -48 48v288c0 26.5098 21.4902 48 48 48h146.74c8.49023 0 16.6299 -3.37012 22.6299 -9.37012l54.6299 -54.6299h192zM464 48v224h-198.62
c-8.49023 0 -16.6299 3.37012 -22.6299 9.37012l-54.6299 54.6299h-140.12v-288h416z" />
<glyph glyph-name="folder-open" unicode="&#xf07c;" horiz-adv-x="576"
d="M527.9 224c37.6992 0 60.6992 -41.5 40.6992 -73.4004l-79.8994 -128c-8.7998 -14.0996 -24.2002 -22.5996 -40.7002 -22.5996h-400c-26.5 0 -48 21.5 -48 48v288c0 26.5 21.5 48 48 48h160l64 -64h160c26.5 0 48 -21.5 48 -48v-48h47.9004zM48 330v-233.4l62.9004 104.2
c8.69922 14.4004 24.2998 23.2002 41.0996 23.2002h280v42c0 3.2998 -2.7002 6 -6 6h-173.9l-64 64h-134.1c-3.2998 0 -6 -2.7002 -6 -6zM448 48l80 128h-378.8l-77.2002 -128h376z" />
<glyph glyph-name="chart-bar" unicode="&#xf080;"
d="M396.8 96c-6.39941 0 -12.7998 6.40039 -12.7998 12.7998v230.4c0 6.39941 6.40039 12.7998 12.7998 12.7998h22.4004c6.39941 0 12.7998 -6.40039 12.7998 -12.7998v-230.4c0 -6.39941 -6.40039 -12.7998 -12.7998 -12.7998h-22.4004zM204.8 96
c-6.39941 0 -12.7998 6.40039 -12.7998 12.7998v198.4c0 6.39941 6.40039 12.7998 12.7998 12.7998h22.4004c6.39941 0 12.7998 -6.40039 12.7998 -12.7998v-198.4c0 -6.39941 -6.40039 -12.7998 -12.7998 -12.7998h-22.4004zM300.8 96
c-6.39941 0 -12.7998 6.40039 -12.7998 12.7998v134.4c0 6.39941 6.40039 12.7998 12.7998 12.7998h22.4004c6.39941 0 12.7998 -6.40039 12.7998 -12.7998v-134.4c0 -6.39941 -6.40039 -12.7998 -12.7998 -12.7998h-22.4004zM496 48c8.83984 0 16 -7.16016 16 -16v-16
c0 -8.83984 -7.16016 -16 -16 -16h-464c-17.6699 0 -32 14.3301 -32 32v336c0 8.83984 7.16016 16 16 16h16c8.83984 0 16 -7.16016 16 -16v-320h448zM108.8 96c-6.39941 0 -12.7998 6.40039 -12.7998 12.7998v70.4004c0 6.39941 6.40039 12.7998 12.7998 12.7998h22.4004
c6.39941 0 12.7998 -6.40039 12.7998 -12.7998v-70.4004c0 -6.39941 -6.40039 -12.7998 -12.7998 -12.7998h-22.4004z" />
<glyph glyph-name="comments" unicode="&#xf086;" horiz-adv-x="576"
d="M532 61.7998c15.2998 -30.7002 37.4004 -54.5 37.7998 -54.7998c6.2998 -6.7002 8 -16.5 4.40039 -25c-3.7002 -8.5 -12 -14 -21.2002 -14c-53.5996 0 -96.7002 20.2998 -125.2 38.7998c-19 -4.39941 -39 -6.7998 -59.7998 -6.7998
c-86.2002 0 -159.9 40.4004 -191.3 97.7998c-9.7002 1.2002 -19.2002 2.7998 -28.4004 4.90039c-28.5 -18.6006 -71.7002 -38.7998 -125.2 -38.7998c-9.19922 0 -17.5996 5.5 -21.1992 14c-3.7002 8.5 -1.90039 18.2998 4.39941 25
c0.400391 0.399414 22.4004 24.1992 37.7002 54.8994c-27.5 27.2002 -44 61.2002 -44 98.2002c0 88.4004 93.0996 160 208 160c86.2998 0 160.3 -40.5 191.8 -98.0996c99.7002 -11.8008 176.2 -77.9004 176.2 -157.9c0 -37.0996 -16.5 -71.0996 -44 -98.2002zM139.2 154.1
l19.7998 -4.5c16 -3.69922 32.5 -5.59961 49 -5.59961c86.7002 0 160 51.2998 160 112s-73.2998 112 -160 112s-160 -51.2998 -160 -112c0 -28.7002 16.2002 -50.5996 29.7002 -64l24.7998 -24.5l-15.5 -31.0996c-2.59961 -5.10059 -5.2998 -10.1006 -8 -14.8008
c14.5996 5.10059 29 12.3008 43.0996 21.4004zM498.3 96c13.5 13.4004 29.7002 35.2998 29.7002 64c0 49.2002 -48.2998 91.5 -112.7 106c0.299805 -3.2998 0.700195 -6.59961 0.700195 -10c0 -80.9004 -78 -147.5 -179.3 -158.3
c29.0996 -29.6006 77.2998 -49.7002 131.3 -49.7002c16.5 0 33 1.90039 49 5.59961l19.9004 4.60059l17.0996 -11.1006c14.0996 -9.09961 28.5 -16.2998 43.0996 -21.3994c-2.69922 4.7002 -5.39941 9.7002 -8 14.7998l-15.5 31.0996z" />
<glyph glyph-name="star-half" unicode="&#xf089;" horiz-adv-x="576"
d="M288 62.7002v-54.2998l-130.7 -68.6006c-23.3994 -12.2998 -50.8994 7.60059 -46.3994 33.7002l25 145.5l-105.7 103c-19 18.5 -8.5 50.7998 17.7002 54.5996l146.1 21.2002l65.2998 132.4c5.90039 11.8994 17.2998 17.7998 28.7002 17.7998v-68.0996l-62.2002 -126
l-139 -20.2002l100.601 -98l-23.7002 -138.4z" />
<glyph glyph-name="lemon" unicode="&#xf094;"
d="M484.112 420.111c28.1221 -28.123 35.9434 -68.0039 19.0215 -97.0547c-23.0576 -39.584 50.1436 -163.384 -82.3311 -295.86c-132.301 -132.298 -256.435 -59.3594 -295.857 -82.3291c-29.0459 -16.917 -68.9219 -9.11426 -97.0576 19.0205
c-28.1221 28.1221 -35.9434 68.0029 -19.0215 97.0547c23.0566 39.5859 -50.1436 163.386 82.3301 295.86c132.308 132.309 256.407 59.3496 295.862 82.332c29.0498 16.9219 68.9307 9.09863 97.0537 -19.0234zM461.707 347.217
c13.5166 23.2031 -27.7578 63.7314 -50.4883 50.4912c-66.6025 -38.7939 -165.646 45.5898 -286.081 -74.8457c-120.444 -120.445 -36.0449 -219.472 -74.8447 -286.08c-13.542 -23.2471 27.8145 -63.6953 50.4932 -50.4883
c66.6006 38.7949 165.636 -45.5996 286.076 74.8428c120.444 120.445 36.0449 219.472 74.8447 286.08zM291.846 338.481c1.37012 -10.96 -6.40332 -20.957 -17.3643 -22.3271c-54.8467 -6.85547 -135.779 -87.7871 -142.636 -142.636
c-1.37305 -10.9883 -11.3984 -18.7334 -22.3262 -17.3643c-10.9609 1.37012 -18.7344 11.3652 -17.3643 22.3262c9.16211 73.2852 104.167 168.215 177.364 177.364c10.9531 1.36816 20.9561 -6.40234 22.3262 -17.3633z" />
<glyph glyph-name="credit-card" unicode="&#xf09d;" horiz-adv-x="576"
d="M527.9 416c26.5996 0 48.0996 -21.5 48.0996 -48v-352c0 -26.5 -21.5 -48 -48.0996 -48h-479.801c-26.5996 0 -48.0996 21.5 -48.0996 48v352c0 26.5 21.5 48 48.0996 48h479.801zM54.0996 368c-3.2998 0 -6 -2.7002 -6 -6v-42h479.801v42c0 3.2998 -2.7002 6 -6 6
h-467.801zM521.9 16c3.2998 0 6 2.7002 6 6v170h-479.801v-170c0 -3.2998 2.7002 -6 6 -6h467.801zM192 116v-40c0 -6.59961 -5.40039 -12 -12 -12h-72c-6.59961 0 -12 5.40039 -12 12v40c0 6.59961 5.40039 12 12 12h72c6.59961 0 12 -5.40039 12 -12zM384 116v-40
c0 -6.59961 -5.40039 -12 -12 -12h-136c-6.59961 0 -12 5.40039 -12 12v40c0 6.59961 5.40039 12 12 12h136c6.59961 0 12 -5.40039 12 -12z" />
<glyph glyph-name="hdd" unicode="&#xf0a0;" horiz-adv-x="576"
d="M567.403 212.358c5.59668 -8.04688 8.59668 -17.6113 8.59668 -27.4121v-136.946c0 -26.5098 -21.4902 -48 -48 -48h-480c-26.5098 0 -48 21.4902 -48 48v136.946c0 8.30957 3.85156 20.5898 8.59668 27.4121l105.08 151.053
c7.90625 11.3652 25.5596 20.5889 39.4033 20.5889h0.000976562h269.838h0.000976562c13.8438 0 31.4971 -9.22363 39.4033 -20.5889zM153.081 336l-77.9131 -112h425.664l-77.9131 112h-269.838zM528 48v128h-480v-128h480zM496 112c0 -17.6729 -14.3271 -32 -32 -32
s-32 14.3271 -32 32s14.3271 32 32 32s32 -14.3271 32 -32zM400 112c0 -17.6729 -14.3271 -32 -32 -32s-32 14.3271 -32 32s14.3271 32 32 32s32 -14.3271 32 -32z" />
<glyph glyph-name="hand-point-right" unicode="&#xf0a4;"
d="M428.8 310.4c45.0996 0 83.2002 -38.1016 83.2002 -83.2002c0 -45.6162 -37.7646 -83.2002 -83.2002 -83.2002h-35.6475c-1.41602 -6.36719 -4.96875 -16.252 -7.92969 -22.0645c2.50586 -22.0059 -3.50293 -44.9775 -15.9844 -62.791
c-1.14062 -52.4863 -37.3984 -91.1445 -99.9404 -91.1445h-21.2988c-60.0635 0 -98.5117 40 -127.2 40h-2.67871c-5.74707 -4.95215 -13.5361 -8 -22.1201 -8h-64c-17.6729 0 -32 12.8936 -32 28.7998v230.4c0 15.9062 14.3271 28.7998 32 28.7998h64.001
c8.58398 0 16.373 -3.04785 22.1201 -8h2.67871c6.96387 0 14.8623 6.19336 30.1816 23.6689l0.128906 0.148438l0.130859 0.145508c8.85645 9.93652 18.1162 20.8398 25.8506 33.2529c18.7051 30.2471 30.3936 78.7842 75.707 78.7842c56.9277 0 92 -35.2861 92 -83.2002
v-0.0839844c0 -6.21777 -0.974609 -16.2148 -2.17578 -22.3154h86.1768zM428.8 192c18.9756 0 35.2002 16.2246 35.2002 35.2002c0 18.7002 -16.7754 35.2002 -35.2002 35.2002h-158.399c0 17.3242 26.3994 35.1992 26.3994 70.3994c0 26.4004 -20.625 35.2002 -44 35.2002
c-8.79395 0 -20.4443 -32.7119 -34.9258 -56.0996c-9.07422 -14.5752 -19.5244 -27.2256 -30.7988 -39.875c-16.1094 -18.374 -33.8359 -36.6328 -59.0752 -39.5967v-176.753c42.79 -3.7627 74.5088 -39.6758 120 -39.6758h21.2988
c40.5244 0 57.124 22.1973 50.6006 61.3252c14.6113 8.00098 24.1514 33.9785 12.9248 53.625c19.3652 18.2246 17.7871 46.3809 4.9502 61.0498h91.0254zM88 64c0 13.2549 -10.7451 24 -24 24s-24 -10.7451 -24 -24s10.7451 -24 24 -24s24 10.7451 24 24z" />
<glyph glyph-name="hand-point-left" unicode="&#xf0a5;"
d="M0 227.2c0 45.0986 38.1006 83.2002 83.2002 83.2002h86.1758c-1.3623 6.91016 -2.17578 14.374 -2.17578 22.3994c0 47.9141 35.0723 83.2002 92 83.2002c45.3135 0 57.002 -48.5371 75.7061 -78.7852c7.73438 -12.4121 16.9951 -23.3154 25.8506 -33.2529
l0.130859 -0.145508l0.128906 -0.148438c15.3213 -17.4746 23.2197 -23.668 30.1836 -23.668h2.67871c5.74707 4.95215 13.5361 8 22.1201 8h64c17.6729 0 32 -12.8936 32 -28.7998v-230.4c0 -15.9062 -14.3271 -28.7998 -32 -28.7998h-64
c-8.58398 0 -16.373 3.04785 -22.1201 8h-2.67871c-28.6885 0 -67.1367 -40 -127.2 -40h-21.2988c-62.542 0 -98.8008 38.6582 -99.9404 91.1445c-12.4814 17.8135 -18.4922 40.7852 -15.9844 62.791c-2.96094 5.8125 -6.51367 15.6973 -7.92969 22.0645h-35.6465
c-45.4355 0 -83.2002 37.584 -83.2002 83.2002zM48 227.2c0 -18.9756 16.2246 -35.2002 35.2002 -35.2002h91.0244c-12.8369 -14.6689 -14.415 -42.8252 4.9502 -61.0498c-11.2256 -19.6465 -1.68652 -45.624 12.9248 -53.625
c-6.52246 -39.1279 10.0771 -61.3252 50.6016 -61.3252h21.2988c45.4912 0 77.21 35.9131 120 39.6768v176.752c-25.2393 2.96289 -42.9658 21.2227 -59.0752 39.5967c-11.2744 12.6494 -21.7246 25.2998 -30.7988 39.875
c-14.4814 23.3877 -26.1318 56.0996 -34.9258 56.0996c-23.375 0 -44 -8.7998 -44 -35.2002c0 -35.2002 26.3994 -53.0752 26.3994 -70.3994h-158.399c-18.4248 0 -35.2002 -16.5 -35.2002 -35.2002zM448 88c-13.2549 0 -24 -10.7451 -24 -24s10.7451 -24 24 -24
s24 10.7451 24 24s-10.7451 24 -24 24z" />
<glyph glyph-name="hand-point-up" unicode="&#xf0a6;" horiz-adv-x="448"
d="M105.6 364.8c0 45.0996 38.1016 83.2002 83.2002 83.2002c45.6162 0 83.2002 -37.7646 83.2002 -83.2002v-35.6465c6.36719 -1.41602 16.252 -4.96875 22.0645 -7.92969c22.0059 2.50684 44.9775 -3.50293 62.791 -15.9844
c52.4863 -1.14062 91.1445 -37.3984 91.1445 -99.9404v-21.2988c0 -60.0635 -40 -98.5117 -40 -127.2v-2.67871c4.95215 -5.74707 8 -13.5361 8 -22.1201v-64c0 -17.6729 -12.8936 -32 -28.7998 -32h-230.4c-15.9062 0 -28.7998 14.3271 -28.7998 32v64
c0 8.58398 3.04785 16.373 8 22.1201v2.67871c0 6.96387 -6.19336 14.8623 -23.6689 30.1816l-0.148438 0.128906l-0.145508 0.130859c-9.93652 8.85645 -20.8398 18.1162 -33.2529 25.8506c-30.2471 18.7051 -78.7842 30.3936 -78.7842 75.707
c0 56.9277 35.2861 92 83.2002 92h0.0839844c6.21777 0 16.2148 -0.974609 22.3154 -2.17578v86.1768zM224 364.8c0 18.9756 -16.2246 35.2002 -35.2002 35.2002c-18.7002 0 -35.2002 -16.7754 -35.2002 -35.2002v-158.399c-17.3242 0 -35.1992 26.3994 -70.3994 26.3994
c-26.4004 0 -35.2002 -20.625 -35.2002 -44c0 -8.79395 32.7119 -20.4443 56.0996 -34.9258c14.5752 -9.07422 27.2256 -19.5244 39.875 -30.7988c18.374 -16.1094 36.6328 -33.8359 39.5967 -59.0752h176.753c3.7627 42.79 39.6758 74.5088 39.6758 120v21.2988
c0 40.5244 -22.1973 57.124 -61.3252 50.6006c-8.00098 14.6113 -33.9785 24.1514 -53.625 12.9248c-18.2246 19.3652 -46.3809 17.7871 -61.0498 4.9502v91.0254zM352 24c-13.2549 0 -24 -10.7451 -24 -24s10.7451 -24 24 -24s24 10.7451 24 24s-10.7451 24 -24 24z" />
<glyph glyph-name="hand-point-down" unicode="&#xf0a7;" horiz-adv-x="448"
d="M188.8 -64c-45.0986 0 -83.2002 38.1006 -83.2002 83.2002v86.1758c-6.91016 -1.3623 -14.374 -2.17578 -22.3994 -2.17578c-47.9141 0 -83.2002 35.0723 -83.2002 92c0 45.3135 48.5371 57.002 78.7852 75.707c12.4121 7.73438 23.3154 16.9951 33.2529 25.8506
l0.145508 0.130859l0.148438 0.128906c17.4746 15.3213 23.668 23.2197 23.668 30.1836v2.67871c-4.95215 5.74707 -8 13.5361 -8 22.1201v64c0 17.6729 12.8936 32 28.7998 32h230.4c15.9062 0 28.7998 -14.3271 28.7998 -32v-64.001
c0 -8.58398 -3.04785 -16.373 -8 -22.1201v-2.67871c0 -28.6885 40 -67.1367 40 -127.2v-21.2988c0 -62.542 -38.6582 -98.8008 -91.1445 -99.9404c-17.8135 -12.4814 -40.7852 -18.4922 -62.791 -15.9844c-5.8125 -2.96094 -15.6973 -6.51367 -22.0645 -7.92969v-35.6465
c0 -45.4355 -37.584 -83.2002 -83.2002 -83.2002zM188.8 -16c18.9756 0 35.2002 16.2246 35.2002 35.2002v91.0244c14.6689 -12.8369 42.8252 -14.415 61.0498 4.9502c19.6465 -11.2256 45.624 -1.68652 53.625 12.9248c39.1279 -6.52246 61.3252 10.0771 61.3252 50.6016
v21.2988c0 45.4912 -35.9131 77.21 -39.6768 120h-176.752c-2.96289 -25.2393 -21.2227 -42.9658 -39.5967 -59.0752c-12.6494 -11.2744 -25.2998 -21.7246 -39.875 -30.7988c-23.3877 -14.4814 -56.0996 -26.1318 -56.0996 -34.9258c0 -23.375 8.7998 -44 35.2002 -44
c35.2002 0 53.0752 26.3994 70.3994 26.3994v-158.399c0 -18.4248 16.5 -35.2002 35.2002 -35.2002zM328 384c0 -13.2549 10.7451 -24 24 -24s24 10.7451 24 24s-10.7451 24 -24 24s-24 -10.7451 -24 -24z" />
<glyph glyph-name="copy" unicode="&#xf0c5;" horiz-adv-x="448"
d="M433.941 382.059c7.75977 -7.75977 14.0586 -22.9658 14.0586 -33.9404v-268.118c0 -26.5098 -21.4902 -48 -48 -48h-80v-48c0 -26.5098 -21.4902 -48 -48 -48h-224c-26.5098 0 -48 21.4902 -48 48v320c0 26.5098 21.4902 48 48 48h80v48c0 26.5098 21.4902 48 48 48
h172.118c10.9746 0 26.1807 -6.29883 33.9404 -14.0586zM266 -16c3.31152 0 6 2.68848 6 6v42h-96c-26.5098 0 -48 21.4902 -48 48v224h-74c-3.31152 0 -6 -2.68848 -6 -6v-308c0 -3.31152 2.68848 -6 6 -6h212zM394 80c3.31152 0 6 2.68848 6 6v202h-88
c-13.2549 0 -24 10.7451 -24 24v88h-106c-3.31152 0 -6 -2.68848 -6 -6v-308c0 -3.31152 2.68848 -6 6 -6h212zM400 336v9.63184v0.000976562c0 1.37207 -0.787109 3.27246 -1.75684 4.24219l-48.3682 48.3682c-1.12598 1.125 -2.65234 1.75684 -4.24316 1.75684h-9.63184
v-64h64z" />
<glyph glyph-name="save" unicode="&#xf0c7;" horiz-adv-x="448"
d="M433.941 318.059c7.75977 -7.75977 14.0586 -22.9658 14.0586 -33.9404v-268.118c0 -26.5098 -21.4902 -48 -48 -48h-352c-26.5098 0 -48 21.4902 -48 48v352c0 26.5098 21.4902 48 48 48h268.118c10.9746 0 26.1807 -6.29883 33.9404 -14.0586zM272 368h-128v-80h128v80
zM394 16c3.31152 0 6 2.68848 6 6v259.632v0.000976562c0 1.37207 -0.787109 3.27246 -1.75684 4.24219l-78.2432 78.2432v-100.118c0 -13.2549 -10.7451 -24 -24 -24h-176c-13.2549 0 -24 10.7451 -24 24v104h-42c-3.31152 0 -6 -2.68848 -6 -6v-340
c0 -3.31152 2.68848 -6 6 -6h340zM224 216c48.5234 0 88 -39.4766 88 -88s-39.4766 -88 -88 -88s-88 39.4766 -88 88s39.4766 88 88 88zM224 88c22.0557 0 40 17.9443 40 40s-17.9443 40 -40 40s-40 -17.9443 -40 -40s17.9443 -40 40 -40z" />
<glyph glyph-name="square" unicode="&#xf0c8;" horiz-adv-x="448"
d="M400 416c26.5 0 48 -21.5 48 -48v-352c0 -26.5 -21.5 -48 -48 -48h-352c-26.5 0 -48 21.5 -48 48v352c0 26.5 21.5 48 48 48h352zM394 16c3.2998 0 6 2.7002 6 6v340c0 3.2998 -2.7002 6 -6 6h-340c-3.2998 0 -6 -2.7002 -6 -6v-340c0 -3.2998 2.7002 -6 6 -6h340z" />
<glyph glyph-name="envelope" unicode="&#xf0e0;"
d="M464 384c26.5098 0 48 -21.4902 48 -48v-288c0 -26.5098 -21.4902 -48 -48 -48h-416c-26.5098 0 -48 21.4902 -48 48v288c0 26.5098 21.4902 48 48 48h416zM464 336h-416v-40.8047c22.4248 -18.2627 58.1797 -46.6602 134.587 -106.49
c16.834 -13.2422 50.2051 -45.0762 73.4131 -44.7012c23.2119 -0.371094 56.5723 31.4541 73.4131 44.7012c76.4189 59.8389 112.165 88.2305 134.587 106.49v40.8047zM48 48h416v185.601c-22.915 -18.252 -55.4189 -43.8691 -104.947 -82.6523
c-22.5439 -17.748 -60.3359 -55.1787 -103.053 -54.9473c-42.9277 -0.231445 -81.2051 37.75 -103.062 54.9551c-49.5293 38.7842 -82.0244 64.3945 -104.938 82.6455v-185.602z" />
<glyph glyph-name="lightbulb" unicode="&#xf0eb;" horiz-adv-x="352"
d="M176 368c8.83984 0 16 -7.16016 16 -16s-7.16016 -16 -16 -16c-35.2803 0 -64 -28.7002 -64 -64c0 -8.83984 -7.16016 -16 -16 -16s-16 7.16016 -16 16c0 52.9404 43.0596 96 96 96zM96.0596 -11.1699l-0.0400391 43.1797h159.961l-0.0507812 -43.1797
c-0.00976562 -3.13965 -0.939453 -6.21973 -2.67969 -8.83984l-24.5098 -36.8398c-2.95996 -4.45996 -7.95996 -7.14062 -13.3203 -7.14062h-78.8496c-5.35059 0 -10.3506 2.68066 -13.3203 7.14062l-24.5098 36.8398c-1.75 2.62012 -2.68066 5.68945 -2.68066 8.83984z
M176 448c97.2002 0 176 -78.7998 176 -176c0 -44.3701 -16.4502 -84.8496 -43.5498 -115.79c-16.6406 -18.9795 -42.7402 -58.79 -52.4199 -92.1602v-0.0498047h-48v0.0996094c0.00390625 4.04199 0.999023 10.4482 2.21973 14.3008
c5.67969 17.9893 22.9902 64.8496 62.0996 109.46c20.4102 23.29 31.6504 53.1699 31.6504 84.1396c0 70.5801 -57.4199 128 -128 128c-68.2803 0 -128.15 -54.3604 -127.95 -128c0.0898438 -30.9902 11.0703 -60.71 31.6104 -84.1396
c39.3496 -44.9004 56.5801 -91.8604 62.1699 -109.67c1.42969 -4.56055 2.13965 -9.30078 2.15039 -14.0703v-0.120117h-48v0.0595703c-9.68066 33.3604 -35.7803 73.1709 -52.4209 92.1602c-27.1094 30.9307 -43.5596 71.4102 -43.5596 115.78
c0 93.0303 73.7197 176 176 176z" />
<glyph glyph-name="bell" unicode="&#xf0f3;" horiz-adv-x="448"
d="M439.39 85.71c6 -6.44043 8.66016 -14.1602 8.61035 -21.71c-0.0996094 -16.4004 -12.9805 -32 -32.0996 -32h-383.801c-19.1191 0 -31.9893 15.5996 -32.0996 32c-0.0498047 7.5498 2.61035 15.2598 8.61035 21.71c19.3193 20.7598 55.4697 51.9902 55.4697 154.29
c0 77.7002 54.4795 139.9 127.939 155.16v20.8398c0 17.6699 14.3203 32 31.9805 32s31.9805 -14.3301 31.9805 -32v-20.8398c73.46 -15.2598 127.939 -77.46 127.939 -155.16c0 -102.3 36.1504 -133.53 55.4697 -154.29zM67.5303 80h312.939
c-21.2197 27.96 -44.4199 74.3203 -44.5293 159.42c0 0.200195 0.0595703 0.379883 0.0595703 0.580078c0 61.8604 -50.1396 112 -112 112s-112 -50.1396 -112 -112c0 -0.200195 0.0595703 -0.379883 0.0595703 -0.580078
c-0.109375 -85.0898 -23.3096 -131.45 -44.5293 -159.42zM224 -64c-35.3203 0 -63.9697 28.6504 -63.9697 64h127.939c0 -35.3496 -28.6494 -64 -63.9697 -64z" />
<glyph glyph-name="hospital" unicode="&#xf0f8;" horiz-adv-x="448"
d="M128 204v40c0 6.62695 5.37305 12 12 12h40c6.62695 0 12 -5.37305 12 -12v-40c0 -6.62695 -5.37305 -12 -12 -12h-40c-6.62695 0 -12 5.37305 -12 12zM268 192c-6.62695 0 -12 5.37305 -12 12v40c0 6.62695 5.37305 12 12 12h40c6.62695 0 12 -5.37305 12 -12v-40
c0 -6.62695 -5.37305 -12 -12 -12h-40zM192 108c0 -6.62695 -5.37305 -12 -12 -12h-40c-6.62695 0 -12 5.37305 -12 12v40c0 6.62695 5.37305 12 12 12h40c6.62695 0 12 -5.37305 12 -12v-40zM268 96c-6.62695 0 -12 5.37305 -12 12v40c0 6.62695 5.37305 12 12 12h40
c6.62695 0 12 -5.37305 12 -12v-40c0 -6.62695 -5.37305 -12 -12 -12h-40zM448 -28v-36h-448v36c0 6.62695 5.37305 12 12 12h19.5v378.965c0 11.6172 10.7451 21.0352 24 21.0352h88.5v40c0 13.2549 10.7451 24 24 24h112c13.2549 0 24 -10.7451 24 -24v-40h88.5
c13.2549 0 24 -9.41797 24 -21.0352v-378.965h19.5c6.62695 0 12 -5.37305 12 -12zM79.5 -15h112.5v67c0 6.62695 5.37305 12 12 12h40c6.62695 0 12 -5.37305 12 -12v-67h112.5v351h-64.5v-24c0 -13.2549 -10.7451 -24 -24 -24h-112c-13.2549 0 -24 10.7451 -24 24v24
h-64.5v-351zM266 384h-26v26c0 3.31152 -2.68848 6 -6 6h-20c-3.31152 0 -6 -2.68848 -6 -6v-26h-26c-3.31152 0 -6 -2.68848 -6 -6v-20c0 -3.31152 2.68848 -6 6 -6h26v-26c0 -3.31152 2.68848 -6 6 -6h20c3.31152 0 6 2.68848 6 6v26h26c3.31152 0 6 2.68848 6 6v20
c0 3.31152 -2.68848 6 -6 6z" />
<glyph glyph-name="plus-square" unicode="&#xf0fe;" horiz-adv-x="448"
d="M352 208v-32c0 -6.59961 -5.40039 -12 -12 -12h-88v-88c0 -6.59961 -5.40039 -12 -12 -12h-32c-6.59961 0 -12 5.40039 -12 12v88h-88c-6.59961 0 -12 5.40039 -12 12v32c0 6.59961 5.40039 12 12 12h88v88c0 6.59961 5.40039 12 12 12h32c6.59961 0 12 -5.40039 12 -12
v-88h88c6.59961 0 12 -5.40039 12 -12zM448 368v-352c0 -26.5 -21.5 -48 -48 -48h-352c-26.5 0 -48 21.5 -48 48v352c0 26.5 21.5 48 48 48h352c26.5 0 48 -21.5 48 -48zM400 22v340c0 3.2998 -2.7002 6 -6 6h-340c-3.2998 0 -6 -2.7002 -6 -6v-340
c0 -3.2998 2.7002 -6 6 -6h340c3.2998 0 6 2.7002 6 6z" />
<glyph glyph-name="circle" unicode="&#xf111;"
d="M256 440c137 0 248 -111 248 -248s-111 -248 -248 -248s-248 111 -248 248s111 248 248 248zM256 -8c110.5 0 200 89.5 200 200s-89.5 200 -200 200s-200 -89.5 -200 -200s89.5 -200 200 -200z" />
<glyph glyph-name="smile" unicode="&#xf118;" horiz-adv-x="496"
d="M248 440c137 0 248 -111 248 -248s-111 -248 -248 -248s-248 111 -248 248s111 248 248 248zM248 -8c110.3 0 200 89.7002 200 200s-89.7002 200 -200 200s-200 -89.7002 -200 -200s89.7002 -200 200 -200zM168 208c-17.7002 0 -32 14.2998 -32 32s14.2998 32 32 32
s32 -14.2998 32 -32s-14.2998 -32 -32 -32zM328 208c-17.7002 0 -32 14.2998 -32 32s14.2998 32 32 32s32 -14.2998 32 -32s-14.2998 -32 -32 -32zM332 135.4c8.5 10.1992 23.7002 11.5 33.7998 3.09961c10.2002 -8.5 11.6006 -23.5996 3.10059 -33.7998
c-30 -36 -74.1006 -56.6006 -120.9 -56.6006s-90.9004 20.6006 -120.9 56.6006c-8.39941 10.2002 -7.09961 25.2998 3.10059 33.7998c10.0996 8.40039 25.2998 7.09961 33.7998 -3.09961c20.7998 -25.1006 51.5 -39.4004 84 -39.4004s63.2002 14.4004 84 39.4004z" />
<glyph glyph-name="frown" unicode="&#xf119;" horiz-adv-x="496"
d="M248 440c137 0 248 -111 248 -248s-111 -248 -248 -248s-248 111 -248 248s111 248 248 248zM248 -8c110.3 0 200 89.7002 200 200s-89.7002 200 -200 200s-200 -89.7002 -200 -200s89.7002 -200 200 -200zM168 208c-17.7002 0 -32 14.2998 -32 32s14.2998 32 32 32
s32 -14.2998 32 -32s-14.2998 -32 -32 -32zM328 272c17.7002 0 32 -14.2998 32 -32s-14.2998 -32 -32 -32s-32 14.2998 -32 32s14.2998 32 32 32zM248 144c40.2002 0 78 -17.7002 103.8 -48.5996c8.40039 -10.2002 7.10059 -25.3008 -3.09961 -33.8008
c-10.7002 -8.7998 -25.7002 -6.59961 -33.7998 3.10059c-16.6006 20 -41 31.3994 -66.9004 31.3994s-50.2998 -11.5 -66.9004 -31.3994c-8.5 -10.2002 -23.5996 -11.5 -33.7998 -3.10059c-10.2002 8.5 -11.5996 23.6006 -3.09961 33.8008
c25.7998 30.8994 63.5996 48.5996 103.8 48.5996z" />
<glyph glyph-name="meh" unicode="&#xf11a;" horiz-adv-x="496"
d="M248 440c137 0 248 -111 248 -248s-111 -248 -248 -248s-248 111 -248 248s111 248 248 248zM248 -8c110.3 0 200 89.7002 200 200s-89.7002 200 -200 200s-200 -89.7002 -200 -200s89.7002 -200 200 -200zM168 208c-17.7002 0 -32 14.2998 -32 32s14.2998 32 32 32
s32 -14.2998 32 -32s-14.2998 -32 -32 -32zM328 272c17.7002 0 32 -14.2998 32 -32s-14.2998 -32 -32 -32s-32 14.2998 -32 32s14.2998 32 32 32zM336 128c13.2002 0 24 -10.7998 24 -24s-10.7998 -24 -24 -24h-176c-13.2002 0 -24 10.7998 -24 24s10.7998 24 24 24h176z
" />
<glyph glyph-name="keyboard" unicode="&#xf11c;" horiz-adv-x="576"
d="M528 384c26.5098 0 48 -21.4902 48 -48v-288c0 -26.5098 -21.4902 -48 -48 -48h-480c-26.5098 0 -48 21.4902 -48 48v288c0 26.5098 21.4902 48 48 48h480zM536 48v288c0 4.41113 -3.58887 8 -8 8h-480c-4.41113 0 -8 -3.58887 -8 -8v-288c0 -4.41113 3.58887 -8 8 -8
h480c4.41113 0 8 3.58887 8 8zM170 178c0 -6.62695 -5.37305 -12 -12 -12h-28c-6.62695 0 -12 5.37305 -12 12v28c0 6.62695 5.37305 12 12 12h28c6.62695 0 12 -5.37305 12 -12v-28zM266 178c0 -6.62695 -5.37305 -12 -12 -12h-28c-6.62695 0 -12 5.37305 -12 12v28
c0 6.62695 5.37305 12 12 12h28c6.62695 0 12 -5.37305 12 -12v-28zM362 178c0 -6.62695 -5.37305 -12 -12 -12h-28c-6.62695 0 -12 5.37305 -12 12v28c0 6.62695 5.37305 12 12 12h28c6.62695 0 12 -5.37305 12 -12v-28zM458 178c0 -6.62695 -5.37305 -12 -12 -12h-28
c-6.62695 0 -12 5.37305 -12 12v28c0 6.62695 5.37305 12 12 12h28c6.62695 0 12 -5.37305 12 -12v-28zM122 96c0 -6.62695 -5.37305 -12 -12 -12h-28c-6.62695 0 -12 5.37305 -12 12v28c0 6.62695 5.37305 12 12 12h28c6.62695 0 12 -5.37305 12 -12v-28zM506 96
c0 -6.62695 -5.37305 -12 -12 -12h-28c-6.62695 0 -12 5.37305 -12 12v28c0 6.62695 5.37305 12 12 12h28c6.62695 0 12 -5.37305 12 -12v-28zM122 260c0 -6.62695 -5.37305 -12 -12 -12h-28c-6.62695 0 -12 5.37305 -12 12v28c0 6.62695 5.37305 12 12 12h28
c6.62695 0 12 -5.37305 12 -12v-28zM218 260c0 -6.62695 -5.37305 -12 -12 -12h-28c-6.62695 0 -12 5.37305 -12 12v28c0 6.62695 5.37305 12 12 12h28c6.62695 0 12 -5.37305 12 -12v-28zM314 260c0 -6.62695 -5.37305 -12 -12 -12h-28c-6.62695 0 -12 5.37305 -12 12v28
c0 6.62695 5.37305 12 12 12h28c6.62695 0 12 -5.37305 12 -12v-28zM410 260c0 -6.62695 -5.37305 -12 -12 -12h-28c-6.62695 0 -12 5.37305 -12 12v28c0 6.62695 5.37305 12 12 12h28c6.62695 0 12 -5.37305 12 -12v-28zM506 260c0 -6.62695 -5.37305 -12 -12 -12h-28
c-6.62695 0 -12 5.37305 -12 12v28c0 6.62695 5.37305 12 12 12h28c6.62695 0 12 -5.37305 12 -12v-28zM408 102c0 -6.62695 -5.37305 -12 -12 -12h-216c-6.62695 0 -12 5.37305 -12 12v16c0 6.62695 5.37305 12 12 12h216c6.62695 0 12 -5.37305 12 -12v-16z" />
<glyph glyph-name="calendar" unicode="&#xf133;" horiz-adv-x="448"
d="M400 384c26.5 0 48 -21.5 48 -48v-352c0 -26.5 -21.5 -48 -48 -48h-352c-26.5 0 -48 21.5 -48 48v352c0 26.5 21.5 48 48 48h48v52c0 6.59961 5.40039 12 12 12h40c6.59961 0 12 -5.40039 12 -12v-52h128v52c0 6.59961 5.40039 12 12 12h40c6.59961 0 12 -5.40039 12 -12
v-52h48zM394 -16c3.2998 0 6 2.7002 6 6v298h-352v-298c0 -3.2998 2.7002 -6 6 -6h340z" />
<glyph glyph-name="play-circle" unicode="&#xf144;"
d="M371.7 210c16.3994 -9.2002 16.3994 -32.9004 0 -42l-176 -101c-15.9004 -8.7998 -35.7002 2.59961 -35.7002 21v208c0 18.5 19.9004 29.7998 35.7002 21zM504 192c0 -137 -111 -248 -248 -248s-248 111 -248 248s111 248 248 248s248 -111 248 -248zM56 192
c0 -110.5 89.5 -200 200 -200s200 89.5 200 200s-89.5 200 -200 200s-200 -89.5 -200 -200z" />
<glyph glyph-name="minus-square" unicode="&#xf146;" horiz-adv-x="448"
d="M108 164c-6.59961 0 -12 5.40039 -12 12v32c0 6.59961 5.40039 12 12 12h232c6.59961 0 12 -5.40039 12 -12v-32c0 -6.59961 -5.40039 -12 -12 -12h-232zM448 368v-352c0 -26.5 -21.5 -48 -48 -48h-352c-26.5 0 -48 21.5 -48 48v352c0 26.5 21.5 48 48 48h352
c26.5 0 48 -21.5 48 -48zM400 22v340c0 3.2998 -2.7002 6 -6 6h-340c-3.2998 0 -6 -2.7002 -6 -6v-340c0 -3.2998 2.7002 -6 6 -6h340c3.2998 0 6 2.7002 6 6z" />
<glyph glyph-name="check-square" unicode="&#xf14a;" horiz-adv-x="448"
d="M400 416c26.5098 0 48 -21.4902 48 -48v-352c0 -26.5098 -21.4902 -48 -48 -48h-352c-26.5098 0 -48 21.4902 -48 48v352c0 26.5098 21.4902 48 48 48h352zM400 16v352h-352v-352h352zM364.136 257.724l-172.589 -171.204
c-4.70508 -4.66699 -12.3027 -4.63672 -16.9697 0.0683594l-90.7812 91.5156c-4.66699 4.70508 -4.63672 12.3037 0.0693359 16.9717l22.7188 22.5361c4.70508 4.66699 12.3027 4.63672 16.9697 -0.0693359l59.792 -60.2773l141.353 140.217
c4.70508 4.66699 12.3027 4.63672 16.9697 -0.0683594l22.5361 -22.7178c4.66699 -4.70605 4.63672 -12.3047 -0.0683594 -16.9717z" />
<glyph glyph-name="share-square" unicode="&#xf14d;" horiz-adv-x="576"
d="M561.938 289.94c18.75 -18.7402 18.75 -49.1406 0 -67.8809l-143.998 -144c-29.9727 -29.9727 -81.9404 -9.05273 -81.9404 33.9404v53.7998c-101.266 -7.83691 -99.625 -31.6406 -84.1104 -78.7598c14.2285 -43.0889 -33.4736 -79.248 -71.0195 -55.7402
c-51.6924 32.3057 -84.8701 83.0635 -84.8701 144.76c0 39.3408 12.2197 72.7402 36.3301 99.3008c19.8398 21.8398 47.7402 38.4697 82.9102 49.4199c36.7295 11.4395 78.3096 16.1094 120.76 17.9893v57.1982c0 42.9355 51.9258 63.9541 81.9404 33.9404zM384 112l144 144
l-144 144v-104.09c-110.86 -0.90332 -240 -10.5166 -240 -119.851c0 -52.1396 32.79 -85.6094 62.3096 -104.06c-39.8174 120.65 48.999 141.918 177.69 143.84v-103.84zM408.74 27.5068c6.14844 1.75684 15.5449 5.92383 20.9736 9.30273
c7.97656 4.95215 18.2861 -0.825195 18.2861 -10.2139v-42.5957c0 -26.5098 -21.4902 -48 -48 -48h-352c-26.5098 0 -48 21.4902 -48 48v352c0 26.5098 21.4902 48 48 48h132c6.62695 0 12 -5.37305 12 -12v-4.48633c0 -4.91699 -2.9873 -9.36914 -7.56934 -11.1514
c-13.7021 -5.33105 -26.3955 -11.5371 -38.0498 -18.585c-1.59668 -0.974609 -4.41016 -1.77051 -6.28027 -1.77734h-86.1006c-3.31152 0 -6 -2.68848 -6 -6v-340c0 -3.31152 2.68848 -6 6 -6h340c3.31152 0 6 2.68848 6 6v25.9658c0 5.37012 3.5791 10.0596 8.74023 11.541
z" />
<glyph glyph-name="compass" unicode="&#xf14e;" horiz-adv-x="496"
d="M347.94 318.14c16.6592 7.61035 33.8096 -9.54004 26.1992 -26.1992l-65.9697 -144.341c-2.73047 -5.97363 -9.7959 -13.0391 -15.7695 -15.7695l-144.341 -65.9697c-16.6592 -7.61035 -33.8096 9.5498 -26.1992 26.1992l65.9697 144.341
c2.73047 5.97363 9.7959 13.0391 15.7695 15.7695zM270.58 169.42c12.4697 12.4697 12.4697 32.6904 0 45.1602s-32.6904 12.4697 -45.1602 0s-12.4697 -32.6904 0 -45.1602s32.6904 -12.4697 45.1602 0zM248 440c136.97 0 248 -111.03 248 -248s-111.03 -248 -248 -248
s-248 111.03 -248 248s111.03 248 248 248zM248 -8c110.28 0 200 89.7197 200 200s-89.7197 200 -200 200s-200 -89.7197 -200 -200s89.7197 -200 200 -200z" />
<glyph glyph-name="caret-square-down" unicode="&#xf150;" horiz-adv-x="448"
d="M125.1 240h197.801c10.6992 0 16.0996 -13 8.5 -20.5l-98.9004 -98.2998c-4.7002 -4.7002 -12.2002 -4.7002 -16.9004 0l-98.8994 98.2998c-7.7002 7.5 -2.2998 20.5 8.39941 20.5zM448 368v-352c0 -26.5 -21.5 -48 -48 -48h-352c-26.5 0 -48 21.5 -48 48v352
c0 26.5 21.5 48 48 48h352c26.5 0 48 -21.5 48 -48zM400 22v340c0 3.2998 -2.7002 6 -6 6h-340c-3.2998 0 -6 -2.7002 -6 -6v-340c0 -3.2998 2.7002 -6 6 -6h340c3.2998 0 6 2.7002 6 6z" />
<glyph glyph-name="caret-square-up" unicode="&#xf151;" horiz-adv-x="448"
d="M322.9 144h-197.801c-10.6992 0 -16.0996 13 -8.5 20.5l98.9004 98.2998c4.7002 4.7002 12.2002 4.7002 16.9004 0l98.8994 -98.2998c7.7002 -7.5 2.2998 -20.5 -8.39941 -20.5zM448 368v-352c0 -26.5 -21.5 -48 -48 -48h-352c-26.5 0 -48 21.5 -48 48v352
c0 26.5 21.5 48 48 48h352c26.5 0 48 -21.5 48 -48zM400 22v340c0 3.2998 -2.7002 6 -6 6h-340c-3.2998 0 -6 -2.7002 -6 -6v-340c0 -3.2998 2.7002 -6 6 -6h340c3.2998 0 6 2.7002 6 6z" />
<glyph glyph-name="caret-square-right" unicode="&#xf152;" horiz-adv-x="448"
d="M176 93.0996v197.801c0 10.6992 13 16.0996 20.5 8.5l98.2998 -98.9004c4.7002 -4.7002 4.7002 -12.2002 0 -16.9004l-98.2998 -98.8994c-7.5 -7.7002 -20.5 -2.2998 -20.5 8.39941zM448 368v-352c0 -26.5 -21.5 -48 -48 -48h-352c-26.5 0 -48 21.5 -48 48v352
c0 26.5 21.5 48 48 48h352c26.5 0 48 -21.5 48 -48zM400 22v340c0 3.2998 -2.7002 6 -6 6h-340c-3.2998 0 -6 -2.7002 -6 -6v-340c0 -3.2998 2.7002 -6 6 -6h340c3.2998 0 6 2.7002 6 6z" />
<glyph glyph-name="file" unicode="&#xf15b;" horiz-adv-x="384"
d="M369.9 350.1c9 -9 14.0996 -21.2998 14.0996 -34v-332.1c0 -26.5 -21.5 -48 -48 -48h-288c-26.5 0 -48 21.5 -48 48v416c0 26.5 21.5 48 48 48.0996h204.1c12.7002 0 24.9004 -5.09961 33.9004 -14.0996zM332.1 320l-76.0996 76.0996v-76.0996h76.0996zM48 -16h288v288
h-104c-13.2998 0 -24 10.7002 -24 24v104h-160v-416z" />
<glyph glyph-name="file-alt" unicode="&#xf15c;" horiz-adv-x="384"
d="M288 200v-28c0 -6.59961 -5.40039 -12 -12 -12h-168c-6.59961 0 -12 5.40039 -12 12v28c0 6.59961 5.40039 12 12 12h168c6.59961 0 12 -5.40039 12 -12zM276 128c6.59961 0 12 -5.40039 12 -12v-28c0 -6.59961 -5.40039 -12 -12 -12h-168c-6.59961 0 -12 5.40039 -12 12
v28c0 6.59961 5.40039 12 12 12h168zM384 316.1v-332.1c0 -26.5 -21.5 -48 -48 -48h-288c-26.5 0 -48 21.5 -48 48v416c0 26.5 21.5 48 48 48h204.1c12.7002 0 24.9004 -5.09961 33.9004 -14.0996l83.9004 -83.9004c9 -8.90039 14.0996 -21.2002 14.0996 -33.9004z
M256 396.1v-76.0996h76.0996zM336 -16v288h-104c-13.2998 0 -24 10.7002 -24 24v104h-160v-416h288z" />
<glyph glyph-name="thumbs-up" unicode="&#xf164;"
d="M466.27 161.31c4.6748 -22.6465 0.864258 -44.5371 -8.98926 -62.9893c2.95898 -23.8682 -4.02148 -48.5654 -17.3398 -66.9902c-0.954102 -55.9072 -35.8232 -95.3301 -112.94 -95.3301c-7 0 -15 0.00976562 -22.2197 0.00976562
c-102.742 0 -133.293 38.9395 -177.803 39.9404c-3.56934 -13.7764 -16.085 -23.9502 -30.9775 -23.9502h-64c-17.6729 0 -32 14.3271 -32 32v240c0 17.6729 14.3271 32 32 32h98.7598c19.1455 16.9531 46.0137 60.6533 68.7598 83.4004
c13.667 13.667 10.1533 108.6 71.7607 108.6c57.5801 0 95.2695 -31.9355 95.2695 -104.73c0 -18.4092 -3.92969 -33.7295 -8.84961 -46.5391h36.4795c48.6025 0 85.8203 -41.5654 85.8203 -85.5801c0 -19.1504 -4.95996 -34.9902 -13.7305 -49.8408zM404.52 107.48
c21.5811 20.3838 18.6992 51.0645 5.21094 65.6191c9.44922 0 22.3594 18.9102 22.2695 37.8105c-0.0898438 18.9102 -16.71 37.8203 -37.8203 37.8203h-103.989c0 37.8193 28.3594 55.3691 28.3594 94.5391c0 23.75 0 56.7305 -47.2695 56.7305
c-18.9102 -18.9102 -9.45996 -66.1797 -37.8203 -94.54c-26.5596 -26.5703 -66.1797 -97.46 -94.54 -97.46h-10.9199v-186.17c53.6113 0 100.001 -37.8203 171.64 -37.8203h37.8203c35.5117 0 60.8203 17.1201 53.1201 65.9004
c15.2002 8.16016 26.5 36.4395 13.9395 57.5703zM88 16c0 13.2549 -10.7451 24 -24 24s-24 -10.7451 -24 -24s10.7451 -24 24 -24s24 10.7451 24 24z" />
<glyph glyph-name="thumbs-down" unicode="&#xf165;"
d="M466.27 222.69c8.77051 -14.8506 13.7305 -30.6904 13.7305 -49.8408c0 -44.0146 -37.2178 -85.5801 -85.8203 -85.5801h-36.4795c4.91992 -12.8096 8.84961 -28.1299 8.84961 -46.5391c0 -72.7949 -37.6895 -104.73 -95.2695 -104.73
c-61.6074 0 -58.0938 94.9326 -71.7607 108.6c-22.7461 22.7471 -49.6133 66.4473 -68.7598 83.4004h-7.05176c-5.5332 -9.56152 -15.8662 -16 -27.708 -16h-64c-17.6729 0 -32 14.3271 -32 32v240c0 17.6729 14.3271 32 32 32h64c8.11328 0 15.5146 -3.02539 21.1553 -8
h10.8447c40.9971 0 73.1953 39.9902 176.78 39.9902c7.21973 0 15.2197 0.00976562 22.2197 0.00976562c77.1172 0 111.986 -39.4229 112.94 -95.3301c13.3184 -18.4248 20.2979 -43.1221 17.3398 -66.9902c9.85352 -18.4521 13.6641 -40.3428 8.98926 -62.9893zM64 152
c13.2549 0 24 10.7451 24 24s-10.7451 24 -24 24s-24 -10.7451 -24 -24s10.7451 -24 24 -24zM394.18 135.27c21.1104 0 37.7305 18.9102 37.8203 37.8203c0.0898438 18.9004 -12.8203 37.8105 -22.2695 37.8105c13.4883 14.5547 16.3701 45.2354 -5.21094 65.6191
c12.5605 21.1309 1.26074 49.4102 -13.9395 57.5703c7.7002 48.7803 -17.6084 65.9004 -53.1201 65.9004h-37.8203c-71.6387 0 -118.028 -37.8203 -171.64 -37.8203v-186.17h10.9199c28.3604 0 67.9805 -70.8896 94.54 -97.46
c28.3604 -28.3604 18.9102 -75.6299 37.8203 -94.54c47.2695 0 47.2695 32.9805 47.2695 56.7305c0 39.1699 -28.3594 56.7197 -28.3594 94.5391h103.989z" />
<glyph glyph-name="sun" unicode="&#xf185;"
d="M494.2 226.1c11.2002 -7.59961 17.7998 -20.0996 17.8994 -33.6992c0 -13.4004 -6.69922 -26 -17.7998 -33.5l-59.7998 -40.5l13.7002 -71c2.5 -13.2002 -1.60059 -26.8008 -11.1006 -36.3008s-22.8994 -13.7998 -36.2998 -11.0996l-70.8994 13.7002l-40.4004 -59.9004
c-7.5 -11.0996 -20.0996 -17.7998 -33.5 -17.7998s-26 6.7002 -33.5 17.9004l-40.4004 59.8994l-70.7998 -13.7002c-13.3994 -2.59961 -26.7998 1.60059 -36.2998 11.1006s-13.7002 23.0996 -11.0996 36.2998l13.6992 71l-59.7998 40.5
c-11.0996 7.5 -17.7998 20 -17.7998 33.5s6.59961 26 17.7998 33.5996l59.7998 40.5l-13.6992 71c-2.60059 13.2002 1.59961 26.7002 11.0996 36.3008c9.5 9.59961 23 13.6992 36.2998 11.1992l70.7998 -13.6992l40.4004 59.8994c15.0996 22.2998 51.9004 22.2998 67 0
l40.4004 -59.8994l70.8994 13.6992c13 2.60059 26.6006 -1.59961 36.2002 -11.0996c9.5 -9.59961 13.7002 -23.2002 11.0996 -36.4004l-13.6992 -71zM381.3 140.5l76.7998 52.0996l-76.7998 52l17.6006 91.1006l-91 -17.6006l-51.9004 76.9004l-51.7998 -76.7998
l-91 17.5996l17.5996 -91.2002l-76.7998 -52l76.7998 -52l-17.5996 -91.1992l90.8994 17.5996l51.9004 -77l51.9004 76.9004l91 -17.6006zM256 296c57.2998 0 104 -46.7002 104 -104s-46.7002 -104 -104 -104s-104 46.7002 -104 104s46.7002 104 104 104zM256 136
c30.9004 0 56 25.0996 56 56s-25.0996 56 -56 56s-56 -25.0996 -56 -56s25.0996 -56 56 -56z" />
<glyph glyph-name="moon" unicode="&#xf186;"
d="M279.135 -64c-141.424 0 -256 114.64 -256 256c0 141.425 114.641 256 256 256c13.0068 -0.00195312 33.9443 -1.91797 46.7354 -4.27734c44.0205 -8.13086 53.7666 -66.8691 15.0215 -88.9189c-41.374 -23.5439 -67.4336 -67.4121 -67.4336 -115.836
c0 -83.5234 75.9238 -146.475 158.272 -130.792c43.6904 8.32129 74.5186 -42.5693 46.248 -77.4004c-47.8613 -58.9717 -120.088 -94.7754 -198.844 -94.7754zM279.135 400c-114.875 0 -208 -93.125 -208 -208s93.125 -208 208 -208
c65.2314 0 123.439 30.0361 161.575 77.0244c-111.611 -21.2568 -215.252 64.0957 -215.252 177.943c0 67.5127 36.9326 126.392 91.6934 157.555c-12.3271 2.27637 -25.0312 3.47754 -38.0166 3.47754z" />
<glyph glyph-name="caret-square-left" unicode="&#xf191;" horiz-adv-x="448"
d="M272 290.9v-197.801c0 -10.6992 -13 -16.0996 -20.5 -8.5l-98.2998 98.9004c-4.7002 4.7002 -4.7002 12.2002 0 16.9004l98.2998 98.8994c7.5 7.7002 20.5 2.2998 20.5 -8.39941zM448 368v-352c0 -26.5 -21.5 -48 -48 -48h-352c-26.5 0 -48 21.5 -48 48v352
c0 26.5 21.5 48 48 48h352c26.5 0 48 -21.5 48 -48zM400 22v340c0 3.2998 -2.7002 6 -6 6h-340c-3.2998 0 -6 -2.7002 -6 -6v-340c0 -3.2998 2.7002 -6 6 -6h340c3.2998 0 6 2.7002 6 6z" />
<glyph glyph-name="dot-circle" unicode="&#xf192;"
d="M256 392c-110.549 0 -200 -89.4678 -200 -200c0 -110.549 89.4678 -200 200 -200c110.549 0 200 89.4678 200 200c0 110.549 -89.4678 200 -200 200zM256 440c136.967 0 248 -111.033 248 -248s-111.033 -248 -248 -248s-248 111.033 -248 248s111.033 248 248 248z
M256 272c44.1826 0 80 -35.8174 80 -80s-35.8174 -80 -80 -80s-80 35.8174 -80 80s35.8174 80 80 80z" />
<glyph glyph-name="building" unicode="&#xf1ad;" horiz-adv-x="448"
d="M128 300v40c0 6.59961 5.40039 12 12 12h40c6.59961 0 12 -5.40039 12 -12v-40c0 -6.59961 -5.40039 -12 -12 -12h-40c-6.59961 0 -12 5.40039 -12 12zM268 288c-6.59961 0 -12 5.40039 -12 12v40c0 6.59961 5.40039 12 12 12h40c6.59961 0 12 -5.40039 12 -12v-40
c0 -6.59961 -5.40039 -12 -12 -12h-40zM140 192c-6.59961 0 -12 5.40039 -12 12v40c0 6.59961 5.40039 12 12 12h40c6.59961 0 12 -5.40039 12 -12v-40c0 -6.59961 -5.40039 -12 -12 -12h-40zM268 192c-6.59961 0 -12 5.40039 -12 12v40c0 6.59961 5.40039 12 12 12h40
c6.59961 0 12 -5.40039 12 -12v-40c0 -6.59961 -5.40039 -12 -12 -12h-40zM192 108c0 -6.59961 -5.40039 -12 -12 -12h-40c-6.59961 0 -12 5.40039 -12 12v40c0 6.59961 5.40039 12 12 12h40c6.59961 0 12 -5.40039 12 -12v-40zM268 96c-6.59961 0 -12 5.40039 -12 12v40
c0 6.59961 5.40039 12 12 12h40c6.59961 0 12 -5.40039 12 -12v-40c0 -6.59961 -5.40039 -12 -12 -12h-40zM448 -28v-36h-448v36c0 6.59961 5.40039 12 12 12h19.5v440c0 13.2998 10.7002 24 24 24h337c13.2998 0 24 -10.7002 24 -24v-440h19.5
c6.59961 0 12 -5.40039 12 -12zM79.5 -15h112.5v67c0 6.59961 5.40039 12 12 12h40c6.59961 0 12 -5.40039 12 -12v-67h112.5v414l-288.5 1z" />
<glyph glyph-name="file-pdf" unicode="&#xf1c1;" horiz-adv-x="384"
d="M369.9 350.1c9 -9 14.0996 -21.2998 14.0996 -34v-332.1c0 -26.5 -21.5 -48 -48 -48h-288c-26.5 0 -48 21.5 -48 48v416c0 26.5 21.5 48 48 48.0996h204.1c12.7002 0 24.9004 -5.09961 33.9004 -14.0996zM332.1 320l-76.0996 76.0996v-76.0996h76.0996zM48 -16h288v288
h-104c-13.2998 0 -24 10.7002 -24 24v104h-160v-416zM298.2 127.7c10.5 -10.5 8 -38.7002 -17.5 -38.7002c-14.7998 0 -36.9004 6.7998 -55.7998 17c-21.6006 -3.59961 -46 -12.7002 -68.4004 -20.0996c-50.0996 -86.4004 -79.4004 -47 -76.0996 -31.2002
c4 20 31 35.8994 51 46.2002c10.5 18.3994 25.3994 50.5 35.3994 74.3994c-7.39941 28.6006 -11.3994 51 -7 67.1006c4.7998 17.6992 38.4004 20.2998 42.6006 -5.90039c4.69922 -15.4004 -1.5 -39.9004 -5.40039 -56c8.09961 -21.2998 19.5996 -35.7998 36.7998 -46.2998
c17.4004 2.2002 52.2002 5.5 64.4004 -6.5zM100.1 49.9004c0 -0.700195 11.4004 4.69922 30.4004 35c-5.90039 -5.5 -25.2998 -21.3008 -30.4004 -35zM181.7 240.5c-2.5 0 -2.60059 -26.9004 1.7998 -40.7998c4.90039 8.7002 5.59961 40.7998 -1.7998 40.7998zM157.3 103.9
c15.9004 6.09961 34 14.8994 54.7998 19.1992c-11.1992 8.30078 -21.7998 20.4004 -30.0996 35.5c-6.7002 -17.6992 -15 -37.7998 -24.7002 -54.6992zM288.9 108.9c3.59961 2.39941 -2.2002 10.3994 -37.3008 7.7998c32.3008 -13.7998 37.3008 -7.7998 37.3008 -7.7998z" />
<glyph glyph-name="file-word" unicode="&#xf1c2;" horiz-adv-x="384"
d="M369.9 350.1c9 -9 14.0996 -21.2998 14.0996 -34v-332.1c0 -26.5 -21.5 -48 -48 -48h-288c-26.5 0 -48 21.5 -48 48v416c0 26.5 21.5 48 48 48.0996h204.1c12.7002 0 24.9004 -5.09961 33.9004 -14.0996zM332.1 320l-76.0996 76.0996v-76.0996h76.0996zM48 -16h288v288
h-104c-13.2998 0 -24 10.7002 -24 24v104h-160v-416zM268.1 192v0.200195h15.8008c7.7998 0 13.5 -7.2998 11.5996 -14.9004c-4.2998 -17 -13.7002 -54.0996 -34.5 -136c-1.2998 -5.39941 -6.09961 -9.09961 -11.5996 -9.09961h-24.7002
c-5.5 0 -10.2998 3.7998 -11.6006 9.09961c-5.2998 20.9004 -17.7998 71 -17.8994 71.4004l-2.90039 17.2998c-0.5 -5.2998 -1.5 -11.0996 -3 -17.2998l-17.8994 -71.4004c-1.30078 -5.39941 -6.10059 -9.09961 -11.6006 -9.09961h-25.2002
c-5.59961 0 -10.3994 3.7002 -11.6992 9.09961c-6.5 26.5 -25.2002 103.4 -33.2002 136c-1.7998 7.5 3.89941 14.7998 11.7002 14.7998h16.7998c5.7998 0 10.7002 -4.09961 11.7998 -9.69922c5 -25.7002 18.4004 -93.8008 19.0996 -99
c0.300781 -1.7002 0.400391 -3.10059 0.5 -4.2002c0.800781 7.5 0.400391 4.7002 24.8008 103.7c1.39941 5.2998 6.19922 9.09961 11.6992 9.09961h13.3008c5.59961 0 10.3994 -3.7998 11.6992 -9.2002c23.9004 -99.7002 22.8008 -94.3994 23.6006 -99.5
c0.299805 -1.7002 0.5 -3.09961 0.700195 -4.2998c0.599609 8.09961 0.399414 5.7998 21 103.5c1.09961 5.5 6 9.5 11.6992 9.5z" />
<glyph glyph-name="file-excel" unicode="&#xf1c3;" horiz-adv-x="384"
d="M369.9 350.1c9 -9 14.0996 -21.2998 14.0996 -34v-332.1c0 -26.5 -21.5 -48 -48 -48h-288c-26.5 0 -48 21.5 -48 48v416c0 26.5 21.5 48 48 48.0996h204.1c12.7002 0 24.9004 -5.09961 33.9004 -14.0996zM332.1 320l-76.0996 76.0996v-76.0996h76.0996zM48 -16h288v288
h-104c-13.2998 0 -24 10.7002 -24 24v104h-160v-416zM260 224c9.2002 0 15 -10 10.2998 -18c-16 -27.5 -45.5996 -76.9004 -46.2998 -78l46.4004 -78c4.59961 -8 -1.10059 -18 -10.4004 -18h-28.7998c-4.40039 0 -8.5 2.40039 -10.6006 6.2998
c-22.6992 41.7998 -13.6992 27.5 -28.5996 57.7002c-5.59961 -12.7002 -6.90039 -17.7002 -28.5996 -57.7002c-2.10059 -3.89941 -6.10059 -6.2998 -10.5 -6.2998h-28.9004c-9.2998 0 -15.0996 10 -10.4004 18l46.3008 78l-46.3008 78c-4.59961 8 1.10059 18 10.4004 18
h28.9004c4.39941 0 8.5 -2.40039 10.5996 -6.2998c21.7002 -40.4004 14.7002 -28.6006 28.5996 -57.7002c6.40039 15.2998 10.6006 24.5996 28.6006 57.7002c2.09961 3.89941 6.09961 6.2998 10.5 6.2998h28.7998z" />
<glyph glyph-name="file-powerpoint" unicode="&#xf1c4;" horiz-adv-x="384"
d="M369.9 350.1c9 -9 14.0996 -21.2998 14.0996 -34v-332.1c0 -26.5 -21.5 -48 -48 -48h-288c-26.5 0 -48 21.5 -48 48v416c0 26.5 21.5 48 48 48.0996h204.1c12.7002 0 24.9004 -5.09961 33.9004 -14.0996zM332.1 320l-76.0996 76.0996v-76.0996h76.0996zM48 -16h288v288
h-104c-13.2998 0 -24 10.7002 -24 24v104h-160v-416zM120 44v168c0 6.59961 5.40039 12 12 12h69.2002c36.7002 0 62.7998 -27 62.7998 -66.2998c0 -74.2998 -68.7002 -66.5 -95.5 -66.5v-47.2002c0 -6.59961 -5.40039 -12 -12 -12h-24.5c-6.59961 0 -12 5.40039 -12 12z
M168.5 131.4h23c7.90039 0 13.9004 2.39941 18.0996 7.19922c8.5 9.80078 8.40039 28.5 0.100586 37.8008c-4.10059 4.59961 -9.90039 7 -17.4004 7h-23.8994v-52h0.0996094z" />
<glyph glyph-name="file-image" unicode="&#xf1c5;" horiz-adv-x="384"
d="M369.9 350.1c9 -9 14.0996 -21.2998 14.0996 -34v-332.1c0 -26.5 -21.5 -48 -48 -48h-288c-26.5 0 -48 21.5 -48 48v416c0 26.5 21.5 48 48 48.0996h204.1c12.7002 0 24.9004 -5.09961 33.9004 -14.0996zM332.1 320l-76.0996 76.0996v-76.0996h76.0996zM48 -16h288v288
h-104c-13.2998 0 -24 10.7002 -24 24v104h-160v-416zM80 32v64l39.5 39.5c4.7002 4.7002 12.2998 4.7002 17 0l39.5 -39.5l87.5 87.5c4.7002 4.7002 12.2998 4.7002 17 0l23.5 -23.5v-128h-224zM128 272c26.5 0 48 -21.5 48 -48s-21.5 -48 -48 -48s-48 21.5 -48 48
s21.5 48 48 48z" />
<glyph glyph-name="file-archive" unicode="&#xf1c6;" horiz-adv-x="384"
d="M128.3 288h32v-32h-32v32zM192.3 384v-32h-32v32h32zM128.3 352h32v-32h-32v32zM192.3 320v-32h-32v32h32zM369.9 350.1c9 -9 14.0996 -21.2998 14.0996 -34v-332.1c0 -26.5 -21.5 -48 -48 -48h-288c-26.5 0 -48 21.5 -48 48v416c0 26.5 21.5 48 48 48.0996h204.1
c12.7002 0 24.9004 -5.09961 33.9004 -14.0996zM256 396.1v-76.0996h76.0996zM336 -16v288h-104c-13.2998 0 -24 10.7002 -24 24v104h-48.2998v-16h-32v16h-79.7002v-416h288zM194.2 182.3l17.2998 -87.7002c6.40039 -32.3994 -18.4004 -62.5996 -51.5 -62.5996
c-33.2002 0 -58 30.4004 -51.4004 62.9004l19.7002 97.0996v32h32v-32h22.1006c5.7998 0 10.6992 -4.09961 11.7998 -9.7002zM160.3 57.9004c17.9004 0 32.4004 12.0996 32.4004 27c0 14.8994 -14.5 27 -32.4004 27c-17.8994 0 -32.3994 -12.1006 -32.3994 -27
c0 -14.9004 14.5 -27 32.3994 -27zM192.3 256v-32h-32v32h32z" />
<glyph glyph-name="file-audio" unicode="&#xf1c7;" horiz-adv-x="384"
d="M369.941 350.059c7.75977 -7.75977 14.0586 -22.9658 14.0586 -33.9404v-332.118c0 -26.5098 -21.4902 -48 -48 -48h-288c-26.5098 0 -48 21.4902 -48 48v416c0 26.5098 21.4902 48 48 48h204.118c10.9746 0 26.1807 -6.29883 33.9404 -14.0586zM332.118 320
l-76.1182 76.1182v-76.1182h76.1182zM48 -16h288v288h-104c-13.2549 0 -24 10.7451 -24 24v104h-160v-416zM192 60.0244c0 -10.6914 -12.9258 -16.0459 -20.4854 -8.48535l-35.5146 35.9746h-28c-6.62695 0 -12 5.37305 -12 12v56c0 6.62695 5.37305 12 12 12h28
l35.5146 36.9473c7.56055 7.56055 20.4854 2.20605 20.4854 -8.48535v-135.951zM233.201 107.154c9.05078 9.29688 9.05957 24.1328 0.000976562 33.4385c-22.1494 22.752 12.2344 56.2461 34.3945 33.4814c27.1982 -27.9404 27.2119 -72.4443 0.000976562 -100.401
c-21.793 -22.3857 -56.9463 10.3154 -34.3965 33.4814z" />
<glyph glyph-name="file-video" unicode="&#xf1c8;" horiz-adv-x="384"
d="M369.941 350.059c7.75977 -7.75977 14.0586 -22.9658 14.0586 -33.9404v-332.118c0 -26.5098 -21.4902 -48 -48 -48h-288c-26.5098 0 -48 21.4902 -48 48v416c0 26.5098 21.4902 48 48 48h204.118c10.9746 0 26.1807 -6.29883 33.9404 -14.0586zM332.118 320
l-76.1182 76.1182v-76.1182h76.1182zM48 -16h288v288h-104c-13.2549 0 -24 10.7451 -24 24v104h-160v-416zM276.687 195.303c10.0049 10.0049 27.3135 2.99707 27.3135 -11.3135v-111.976c0 -14.2939 -17.2959 -21.332 -27.3135 -11.3135l-52.6865 52.6738v-37.374
c0 -11.0459 -8.9541 -20 -20 -20h-104c-11.0459 0 -20 8.9541 -20 20v104c0 11.0459 8.9541 20 20 20h104c11.0459 0 20 -8.9541 20 -20v-37.374z" />
<glyph glyph-name="file-code" unicode="&#xf1c9;" horiz-adv-x="384"
d="M149.9 98.9004c3.5 -3.30078 3.69922 -8.90039 0.399414 -12.4004l-17.3994 -18.5996c-1.60059 -1.80078 -4 -2.80078 -6.40039 -2.80078c-2.2002 0 -4.40039 0.900391 -6 2.40039l-57.7002 54.0996c-3.7002 3.40039 -3.7002 9.30078 0 12.8008l57.7002 54.0996
c3.40039 3.2998 9 3.2002 12.4004 -0.400391l17.3994 -18.5996l0.200195 -0.200195c3.2002 -3.59961 2.7998 -9.2002 -0.799805 -12.3994l-32.7998 -28.9004l32.7998 -28.9004zM369.9 350.1c9 -9 14.0996 -21.2998 14.0996 -34v-332.1c0 -26.5 -21.5 -48 -48 -48h-288
c-26.5 0 -48 21.5 -48 48v416c0 26.5 21.5 48 48 48.0996h204.1c12.7002 0 24.9004 -5.09961 33.9004 -14.0996zM256 396.1v-76.0996h76.0996zM336 -16v288h-104c-13.2998 0 -24 10.7002 -24 24v104h-160v-416h288zM209.6 234l24.4004 -7
c4.7002 -1.2998 7.40039 -6.2002 6 -10.9004l-54.7002 -188.199c-1.2998 -4.60059 -6.2002 -7.40039 -10.8994 -6l-24.4004 7.09961c-4.7002 1.2998 -7.40039 6.2002 -6 10.9004l54.7002 188.1c1.39941 4.7002 6.2002 7.40039 10.8994 6zM234.1 157.1
c-3.5 3.30078 -3.69922 8.90039 -0.399414 12.4004l17.3994 18.5996c3.30078 3.60059 8.90039 3.7002 12.4004 0.400391l57.7002 -54.0996c3.7002 -3.40039 3.7002 -9.30078 0 -12.8008l-57.7002 -54.0996c-3.5 -3.2998 -9.09961 -3.09961 -12.4004 0.400391
l-17.3994 18.5996l-0.200195 0.200195c-3.2002 3.59961 -2.7998 9.2002 0.799805 12.3994l32.7998 28.9004l-32.7998 28.9004z" />
<glyph glyph-name="life-ring" unicode="&#xf1cd;"
d="M256 -56c-136.967 0 -248 111.033 -248 248s111.033 248 248 248s248 -111.033 248 -248s-111.033 -248 -248 -248zM152.602 20.7197c63.2178 -38.3184 143.579 -38.3184 206.797 0l-53.4111 53.4111c-31.8467 -13.5215 -68.168 -13.5059 -99.9746 0zM336 192
c0 44.1123 -35.8877 80 -80 80s-80 -35.8877 -80 -80s35.8877 -80 80 -80s80 35.8877 80 80zM427.28 88.6016c38.3184 63.2178 38.3184 143.579 0 206.797l-53.4111 -53.4111c13.5215 -31.8467 13.5049 -68.168 0 -99.9746zM359.397 363.28
c-63.2168 38.3184 -143.578 38.3184 -206.796 0l53.4111 -53.4111c31.8457 13.5215 68.167 13.5049 99.9736 0zM84.7197 295.398c-38.3184 -63.2178 -38.3184 -143.579 0 -206.797l53.4111 53.4111c-13.5215 31.8467 -13.5059 68.168 0 99.9746z" />
<glyph glyph-name="paper-plane" unicode="&#xf1d8;"
d="M440 441.5c34.5996 19.9004 77.5996 -8.7998 71.5 -48.9004l-59.4004 -387.199c-2.2998 -14.5 -11.0996 -27.3008 -23.8994 -34.5c-7.2998 -4.10059 -15.4004 -6.2002 -23.6006 -6.2002c-6.19922 0 -12.3994 1.2002 -18.2998 3.59961l-111.899 46.2002l-43.8008 -59.0996
c-27.3994 -36.9004 -86.5996 -17.8008 -86.5996 28.5996v84.4004l-114.3 47.2998c-36.7998 15.0996 -40.1006 66 -5.7002 85.8994zM192 -16l36.5996 49.5l-36.5996 15.0996v-64.5996zM404.6 12.7002l59.4004 387.3l-416 -240l107.8 -44.5996l211.5 184.3
c14.2002 12.2998 34.4004 -5.7002 23.7002 -21.2002l-140.2 -202.3z" />
<glyph glyph-name="futbol" unicode="&#xf1e3;" horiz-adv-x="496"
d="M483.8 268.6c42.2998 -130.199 -29 -270.1 -159.2 -312.399c-25.5 -8.2998 -51.2998 -12.2002 -76.6992 -12.2002c-104.5 0 -201.7 66.5996 -235.7 171.4c-42.2998 130.199 29 270.1 159.2 312.399c25.5 8.2998 51.2998 12.2002 76.6992 12.2002
c104.5 0 201.7 -66.5996 235.7 -171.4zM409.3 74.9004c6.10059 8.39941 12.1006 16.8994 16.7998 26.1992c14.3008 28.1006 21.5 58.5 21.7002 89.2002l-38.8994 36.4004l-71.1006 -22.1006l-24.3994 -75.1992l43.6992 -60.9004zM409.3 310.3
c-24.5 33.4004 -58.7002 58.4004 -97.8994 71.4004l-47.4004 -26.2002v-73.7998l64.2002 -46.5l70.7002 22zM184.9 381.6c-39.9004 -13.2998 -73.5 -38.5 -97.8008 -71.8994l10.1006 -52.5l70.5996 -22l64.2002 46.5v73.7998zM139 68.5l43.5 61.7002l-24.2998 74.2998
l-71.1006 22.2002l-39 -36.4004c0.5 -55.7002 23.4004 -95.2002 37.8008 -115.3zM187.2 1.5c64.0996 -20.4004 115.5 -1.7998 121.7 0l22.3994 48.0996l-44.2998 61.7002h-78.5996l-43.6006 -61.7002z" />
<glyph glyph-name="newspaper" unicode="&#xf1ea;" horiz-adv-x="576"
d="M552 384c13.2549 0 24 -10.7451 24 -24v-336c0 -13.2549 -10.7451 -24 -24 -24h-496c-30.9277 0 -56 25.0723 -56 56v272c0 13.2549 10.7451 24 24 24h42.752c6.60547 18.623 24.3896 32 45.248 32h440zM48 56c0 -4.41113 3.58887 -8 8 -8s8 3.58887 8 8v248h-16v-248z
M528 48v288h-416v-280c0 -2.7168 -0.204102 -5.38574 -0.578125 -8h416.578zM172 168c-6.62695 0 -12 5.37305 -12 12v96c0 6.62695 5.37305 12 12 12h136c6.62695 0 12 -5.37305 12 -12v-96c0 -6.62695 -5.37305 -12 -12 -12h-136zM200 248v-40h80v40h-80zM160 108v24
c0 6.62695 5.37305 12 12 12h136c6.62695 0 12 -5.37305 12 -12v-24c0 -6.62695 -5.37305 -12 -12 -12h-136c-6.62695 0 -12 5.37305 -12 12zM352 108v24c0 6.62695 5.37305 12 12 12h104c6.62695 0 12 -5.37305 12 -12v-24c0 -6.62695 -5.37305 -12 -12 -12h-104
c-6.62695 0 -12 5.37305 -12 12zM352 252v24c0 6.62695 5.37305 12 12 12h104c6.62695 0 12 -5.37305 12 -12v-24c0 -6.62695 -5.37305 -12 -12 -12h-104c-6.62695 0 -12 5.37305 -12 12zM352 180v24c0 6.62695 5.37305 12 12 12h104c6.62695 0 12 -5.37305 12 -12v-24
c0 -6.62695 -5.37305 -12 -12 -12h-104c-6.62695 0 -12 5.37305 -12 12z" />
<glyph glyph-name="bell-slash" unicode="&#xf1f6;" horiz-adv-x="640"
d="M633.99 -23.0195c6.91016 -5.52051 8.01953 -15.5908 2.5 -22.4902l-10 -12.4902c-5.53027 -6.88965 -15.5898 -8.00977 -22.4902 -2.49023l-598 467.51c-6.90039 5.52051 -8.01953 15.5908 -2.49023 22.4902l10 12.4902
c5.52051 6.90039 15.5898 8.00977 22.4902 2.49023zM163.53 80h182.84l61.3994 -48h-279.659c-19.1201 0 -31.9902 15.5996 -32.1006 32c-0.0498047 7.5498 2.61035 15.2598 8.61035 21.71c18.3701 19.7402 51.5703 49.6904 54.8398 140.42l45.4697 -35.5498
c-6.91992 -54.7803 -24.6895 -88.5498 -41.3994 -110.58zM320 352c-23.3496 0 -45 -7.17969 -62.9404 -19.4004l-38.1699 29.8408c19.6807 15.7793 43.1104 27.3096 69.1299 32.7197v20.8398c0 17.6699 14.3203 32 31.9805 32s31.9805 -14.3301 31.9805 -32v-20.8398
c73.46 -15.2598 127.939 -77.46 127.939 -155.16c0 -41.3604 6.03027 -70.7197 14.3398 -92.8496l-59.5293 46.54c-1.63086 13.96 -2.77051 28.8896 -2.79004 45.7295c0 0.200195 0.0595703 0.379883 0.0595703 0.580078c0 61.8604 -50.1396 112 -112 112zM320 -64
c-35.3203 0 -63.9697 28.6504 -63.9697 64h127.939c0 -35.3496 -28.6494 -64 -63.9697 -64z" />
<glyph glyph-name="copyright" unicode="&#xf1f9;"
d="M256 440c136.967 0 248 -111.033 248 -248s-111.033 -248 -248 -248s-248 111.033 -248 248s111.033 248 248 248zM256 -8c110.549 0 200 89.4678 200 200c0 110.549 -89.4678 200 -200 200c-110.549 0 -200 -89.4688 -200 -200c0 -110.549 89.4678 -200 200 -200z
M363.351 93.0645c-9.61328 -9.71289 -45.5293 -41.3965 -104.064 -41.3965c-82.4297 0 -140.484 61.4248 -140.484 141.567c0 79.1514 60.2754 139.4 139.763 139.4c55.5303 0 88.7373 -26.6201 97.5928 -34.7783c2.13379 -1.96289 3.86523 -5.9082 3.86523 -8.80762
c0 -1.95508 -0.864258 -4.87402 -1.92969 -6.51465l-18.1543 -28.1133c-3.8418 -5.9502 -11.9668 -7.28223 -17.499 -2.9209c-8.5957 6.77637 -31.8145 22.5381 -61.708 22.5381c-48.3037 0 -77.916 -35.3301 -77.916 -80.082c0 -41.5889 26.8877 -83.6924 78.2764 -83.6924
c32.6572 0 56.8428 19.0391 65.7266 27.2256c5.26953 4.85645 13.5957 4.03906 17.8193 -1.73828l19.8652 -27.1699c1.28613 -1.74512 2.33008 -4.91992 2.33008 -7.08789c0 -2.72363 -1.56055 -6.5 -3.48242 -8.42969z" />
<glyph glyph-name="closed-captioning" unicode="&#xf20a;"
d="M464 384c26.5 0 48 -21.5 48 -48v-288c0 -26.5 -21.5 -48 -48 -48h-416c-26.5 0 -48 21.5 -48 48v288c0 26.5 21.5 48 48 48h416zM458 48c3.2998 0 6 2.7002 6 6v276c0 3.2998 -2.7002 6 -6 6h-404c-3.2998 0 -6 -2.7002 -6 -6v-276c0 -3.2998 2.7002 -6 6 -6h404z
M246.9 133.7c1.69922 -2.40039 1.5 -5.60059 -0.5 -7.7002c-53.6006 -56.7998 -172.801 -32.0996 -172.801 67.9004c0 97.2998 121.7 119.5 172.5 70.0996c2.10059 -2 2.5 -3.2002 1 -5.7002l-17.5 -30.5c-1.89941 -3.09961 -6.19922 -4 -9.09961 -1.7002
c-40.7998 32 -94.5996 14.9004 -94.5996 -31.1992c0 -48 51 -70.5 92.1992 -32.6006c2.80078 2.5 7.10059 2.10059 9.2002 -0.899414zM437.3 133.7c1.7002 -2.40039 1.5 -5.60059 -0.5 -7.7002c-53.5996 -56.9004 -172.8 -32.0996 -172.8 67.9004
c0 97.2998 121.7 119.5 172.5 70.0996c2.09961 -2 2.5 -3.2002 1 -5.7002l-17.5 -30.5c-1.90039 -3.09961 -6.2002 -4 -9.09961 -1.7002c-40.8008 32 -94.6006 14.9004 -94.6006 -31.1992c0 -48 51 -70.5 92.2002 -32.6006c2.7998 2.5 7.09961 2.10059 9.2002 -0.899414z
" />
<glyph glyph-name="object-group" unicode="&#xf247;"
d="M500 320h-12v-256h12c6.62695 0 12 -5.37305 12 -12v-72c0 -6.62695 -5.37305 -12 -12 -12h-72c-6.62695 0 -12 5.37305 -12 12v12h-320v-12c0 -6.62695 -5.37305 -12 -12 -12h-72c-6.62695 0 -12 5.37305 -12 12v72c0 6.62695 5.37305 12 12 12h12v256h-12
c-6.62695 0 -12 5.37305 -12 12v72c0 6.62695 5.37305 12 12 12h72c6.62695 0 12 -5.37305 12 -12v-12h320v12c0 6.62695 5.37305 12 12 12h72c6.62695 0 12 -5.37305 12 -12v-72c0 -6.62695 -5.37305 -12 -12 -12zM448 384v-32h32v32h-32zM32 384v-32h32v32h-32zM64 0v32
h-32v-32h32zM480 0v32h-32v-32h32zM440 64v256h-12c-6.62695 0 -12 5.37305 -12 12v12h-320v-12c0 -6.62695 -5.37305 -12 -12 -12h-12v-256h12c6.62695 0 12 -5.37305 12 -12v-12h320v12c0 6.62695 5.37305 12 12 12h12zM404 256c6.62695 0 12 -5.37207 12 -12v-168
c0 -6.62793 -5.37305 -12 -12 -12h-200c-6.62695 0 -12 5.37207 -12 12v52h-84c-6.62695 0 -12 5.37207 -12 12v168c0 6.62793 5.37305 12 12 12h200c6.62695 0 12 -5.37207 12 -12v-52h84zM136 280v-112h144v112h-144zM376 104v112h-56v-76
c0 -6.62793 -5.37305 -12 -12 -12h-76v-24h144z" />
<glyph glyph-name="object-ungroup" unicode="&#xf248;" horiz-adv-x="576"
d="M564 224h-12v-160h12c6.62695 0 12 -5.37305 12 -12v-72c0 -6.62695 -5.37305 -12 -12 -12h-72c-6.62695 0 -12 5.37305 -12 12v12h-224v-12c0 -6.62695 -5.37305 -12 -12 -12h-72c-6.62695 0 -12 5.37305 -12 12v72c0 6.62695 5.37305 12 12 12h12v24h-88v-12
c0 -6.62695 -5.37305 -12 -12 -12h-72c-6.62695 0 -12 5.37305 -12 12v72c0 6.62695 5.37305 12 12 12h12v160h-12c-6.62695 0 -12 5.37305 -12 12v72c0 6.62695 5.37305 12 12 12h72c6.62695 0 12 -5.37305 12 -12v-12h224v12c0 6.62695 5.37305 12 12 12h72
c6.62695 0 12 -5.37305 12 -12v-72c0 -6.62695 -5.37305 -12 -12 -12h-12v-24h88v12c0 6.62695 5.37305 12 12 12h72c6.62695 0 12 -5.37305 12 -12v-72c0 -6.62695 -5.37305 -12 -12 -12zM352 384v-32h32v32h-32zM352 128v-32h32v32h-32zM64 96v32h-32v-32h32zM64 352v32
h-32v-32h32zM96 136h224v12c0 6.62695 5.37305 12 12 12h12v160h-12c-6.62695 0 -12 5.37305 -12 12v12h-224v-12c0 -6.62695 -5.37305 -12 -12 -12h-12v-160h12c6.62695 0 12 -5.37305 12 -12v-12zM224 0v32h-32v-32h32zM504 64v160h-12c-6.62695 0 -12 5.37305 -12 12v12
h-88v-88h12c6.62695 0 12 -5.37305 12 -12v-72c0 -6.62695 -5.37305 -12 -12 -12h-72c-6.62695 0 -12 5.37305 -12 12v12h-88v-24h12c6.62695 0 12 -5.37305 12 -12v-12h224v12c0 6.62695 5.37305 12 12 12h12zM544 0v32h-32v-32h32zM544 256v32h-32v-32h32z" />
<glyph glyph-name="sticky-note" unicode="&#xf249;" horiz-adv-x="448"
d="M448 99.8936c0 -10.9746 -6.29883 -26.1797 -14.0586 -33.9404l-83.8828 -83.8818c-7.75977 -7.76074 -22.9658 -14.0596 -33.9404 -14.0596h-268.118c-26.5098 0 -48 21.4902 -48 48v351.988c0 26.5098 21.4902 48 48 48h352c26.5098 0 48 -21.4902 48 -48v-268.106z
M320 19.8936l76.1182 76.1182h-76.1182v-76.1182zM400 368h-352v-351.988h224v104c0 13.2549 10.7451 24 24 24h104v223.988z" />
<glyph glyph-name="clone" unicode="&#xf24d;"
d="M464 448c26.5098 0 48 -21.4902 48 -48v-320c0 -26.5098 -21.4902 -48 -48 -48h-48v-48c0 -26.5098 -21.4902 -48 -48 -48h-320c-26.5098 0 -48 21.4902 -48 48v320c0 26.5098 21.4902 48 48 48h48v48c0 26.5098 21.4902 48 48 48h320zM362 -16c3.31152 0 6 2.68848 6 6
v42h-224c-26.5098 0 -48 21.4902 -48 48v224h-42c-3.31152 0 -6 -2.68848 -6 -6v-308c0 -3.31152 2.68848 -6 6 -6h308zM458 80c3.31152 0 6 2.68848 6 6v308c0 3.31152 -2.68848 6 -6 6h-308c-3.31152 0 -6 -2.68848 -6 -6v-308c0 -3.31152 2.68848 -6 6 -6h308z" />
<glyph glyph-name="hourglass" unicode="&#xf254;" horiz-adv-x="384"
d="M368 400c0 -80.0996 -31.8984 -165.619 -97.1797 -208c64.9912 -42.1934 97.1797 -127.436 97.1797 -208h4c6.62695 0 12 -5.37305 12 -12v-24c0 -6.62695 -5.37305 -12 -12 -12h-360c-6.62695 0 -12 5.37305 -12 12v24c0 6.62695 5.37305 12 12 12h4
c0 80.0996 31.8994 165.619 97.1797 208c-64.9912 42.1934 -97.1797 127.436 -97.1797 208h-4c-6.62695 0 -12 5.37305 -12 12v24c0 6.62695 5.37305 12 12 12h360c6.62695 0 12 -5.37305 12 -12v-24c0 -6.62695 -5.37305 -12 -12 -12h-4zM64 400
c0 -101.621 57.3066 -184 128 -184s128 82.3799 128 184h-256zM320 -16c0 101.62 -57.3076 184 -128 184s-128 -82.3799 -128 -184h256z" />
<glyph glyph-name="hand-rock" unicode="&#xf255;"
d="M408.864 368.948c48.8213 20.751 103.136 -15.0723 103.136 -67.9111v-114.443c0 -15.3955 -3.08887 -30.3906 -9.18262 -44.5674l-42.835 -99.6562c-4.99707 -11.625 -3.98242 -18.8574 -3.98242 -42.3701c0 -17.6729 -14.3271 -32 -32 -32h-252
c-17.6729 0 -32 14.3271 -32 32c0 27.3301 1.1416 29.2012 -3.11035 32.9033l-97.71 85.0811c-24.8994 21.6797 -39.1797 52.8926 -39.1797 85.6338v56.9531c0 47.4277 44.8457 82.0215 91.0459 71.1807c1.96094 55.751 63.5107 87.8262 110.671 60.8057
c29.1895 31.0713 78.8604 31.4473 108.334 -0.0214844c32.7051 18.6846 76.4121 10.3096 98.8135 -23.5879zM464 186.594v114.445c0 34.29 -52 33.8232 -52 0.676758c0 -8.83594 -7.16309 -16 -16 -16h-7c-8.83691 0 -16 7.16406 -16 16v26.751
c0 34.457 -52 33.707 -52 0.676758v-27.4287c0 -8.83594 -7.16309 -16 -16 -16h-7c-8.83691 0 -16 7.16406 -16 16v40.4658c0 34.3525 -52 33.8115 -52 0.677734v-41.1436c0 -8.83594 -7.16406 -16 -16 -16h-7c-8.83594 0 -16 7.16406 -16 16v26.751
c0 34.4023 -52 33.7744 -52 0.676758v-116.571c0 -8.83203 -7.16797 -16 -16 -16c-3.30664 0 -8.01367 1.7627 -10.5068 3.93359l-7 6.09473c-3.03223 2.64062 -5.49316 8.04688 -5.49316 12.0674v0v41.2275c0 34.2148 -52 33.8857 -52 0.677734v-56.9531
c0 -18.8555 8.27441 -36.874 22.7002 -49.4365l97.71 -85.0801c12.4502 -10.8398 19.5898 -26.4463 19.5898 -42.8164v-10.2861h220v7.07617c0 13.21 2.65332 26.0791 7.88281 38.25l42.835 99.6553c2.91602 6.75391 5.28223 18.207 5.28223 25.5635v0.0488281z" />
<glyph glyph-name="hand-paper" unicode="&#xf256;" horiz-adv-x="448"
d="M372.57 335.359c39.9062 5.63281 75.4297 -25.7393 75.4297 -66.3594v-131.564c-0.00195312 -12.7666 -2.33008 -33.2246 -5.19531 -45.666l-30.1836 -130.958c-3.34668 -14.5234 -16.2783 -24.8125 -31.1816 -24.8125h-222.897
c-9.10352 0 -20.7793 6.01758 -26.0615 13.4316l-119.97 168.415c-21.2441 29.8203 -14.8047 71.3574 14.5498 93.1533c18.7754 13.9395 42.1309 16.2979 62.083 8.87109v126.13c0 44.0547 41.125 75.5439 82.4053 64.9834c23.8926 48.1963 92.3535 50.2471 117.982 0.74707
c42.5186 11.1445 83.0391 -21.9346 83.0391 -65.5469v-10.8242zM399.997 137.437l-0.00195312 131.563c0 24.9492 -36.5703 25.5508 -36.5703 -0.691406v-76.3086c0 -8.83691 -7.16309 -16 -16 -16h-6.85645c-8.83691 0 -16 7.16309 -16 16v154.184
c0 25.501 -36.5703 26.3633 -36.5703 0.691406v-154.875c0 -8.83691 -7.16309 -16 -16 -16h-6.85645c-8.83691 0 -16 7.16309 -16 16v188.309c0 25.501 -36.5703 26.3545 -36.5703 0.691406v-189c0 -8.83691 -7.16309 -16 -16 -16h-6.85645c-8.83691 0 -16 7.16309 -16 16
v153.309c0 25.501 -36.5713 26.3359 -36.5713 0.691406v-206.494c0 -15.5703 -20.0352 -21.9092 -29.0303 -9.2832l-27.1279 38.0791c-14.3711 20.1709 -43.833 -2.33496 -29.3945 -22.6045l115.196 -161.697h201.92l27.3252 118.551
c2.63086 11.417 3.96484 23.1553 3.96484 34.8857z" />
<glyph glyph-name="hand-scissors" unicode="&#xf257;"
d="M256 -32c-44.9561 0 -77.3428 43.2627 -64.0244 85.8535c-21.6484 13.71 -34.0156 38.7617 -30.3408 65.0068h-87.6348c-40.8037 0 -74 32.8105 -74 73.1406c0 40.3291 33.1963 73.1396 74 73.1396l94 -9.14062l-78.8496 18.6787
c-38.3076 14.7422 -57.04 57.4707 -41.9424 95.1123c15.0303 37.4736 57.7549 55.7803 95.6416 41.2012l144.929 -55.7568c24.9551 30.5566 57.8086 43.9932 92.2178 24.7324l97.999 -54.8525c20.9746 -11.7393 34.0049 -33.8457 34.0049 -57.6904v-205.702
c0 -30.7422 -21.4404 -57.5576 -51.7979 -64.5537l-118.999 -27.4268c-4.97168 -1.14648 -10.0889 -1.72949 -15.2031 -1.72949zM256 16.0127l70 -0.000976562c1.23633 0 3.21777 0.225586 4.42285 0.501953l119.001 27.4277
c8.58203 1.97754 14.5762 9.29102 14.5762 17.7812v205.701c0 6.4873 -3.62109 12.542 -9.44922 15.8047l-98 54.8545c-8.13965 4.55566 -18.668 2.61914 -24.4873 -4.50781l-21.7646 -26.6475c-2.65039 -3.24512 -8.20215 -5.87891 -12.3926 -5.87891
c-1.64062 0 -4.21484 0.477539 -5.74609 1.06738l-166.549 64.0908c-32.6543 12.5664 -50.7744 -34.5771 -19.2227 -46.7168l155.357 -59.7852c5.66016 -2.17773 10.2539 -8.86816 10.2539 -14.9326v0v-11.6328c0 -8.83691 -7.16309 -16 -16 -16h-182
c-34.375 0 -34.4297 -50.2803 0 -50.2803h182c8.83691 0 16 -7.16309 16 -16v-6.85645c0 -8.83691 -7.16309 -16 -16 -16h-28c-25.1221 0 -25.1592 -36.5674 0 -36.5674h28c8.83691 0 16 -7.16211 16 -16v-6.85547c0 -8.83691 -7.16309 -16 -16 -16
c-25.1201 0 -25.1602 -36.5674 0 -36.5674z" />
<glyph glyph-name="hand-lizard" unicode="&#xf258;" horiz-adv-x="576"
d="M556.686 157.458c12.6357 -19.4863 19.3145 -42.0615 19.3145 -65.2871v-124.171h-224v71.582l-99.751 38.7871c-2.7832 1.08203 -5.70996 1.63086 -8.69727 1.63086h-131.552c-30.8789 0 -56 25.1211 -56 56c0 48.5234 39.4766 88 88 88h113.709l18.333 48h-196.042
c-44.1123 0 -80 35.8877 -80 80v8c0 30.8779 25.1211 56 56 56h293.917c24.5 0 47.084 -12.2725 60.4111 -32.8291zM528 16v76.1709v0.0478516c0 11.7461 -5.19141 29.2734 -11.5879 39.124l-146.358 225.715c-4.44336 6.85254 -11.9707 10.9424 -20.1367 10.9424h-293.917
c-4.41113 0 -8 -3.58887 -8 -8v-8c0 -17.6445 14.3555 -32 32 -32h213.471c25.2021 0 42.626 -25.293 33.6299 -48.8457l-24.5518 -64.2812c-7.05371 -18.4658 -25.0732 -30.873 -44.8398 -30.873h-113.709c-22.0557 0 -40 -17.9443 -40 -40c0 -4.41113 3.58887 -8 8 -8
h131.552h0.0517578c7.44141 0 19.1074 -2.19238 26.041 -4.89355l99.752 -38.7881c18.5898 -7.22852 30.6035 -24.7881 30.6035 -44.7363v-23.582h128z" />
<glyph glyph-name="hand-spock" unicode="&#xf259;"
d="M501.03 331.824c6.05762 -9.77832 10.9746 -27.0498 10.9746 -38.5518c0 -4.80664 -0.915039 -12.499 -2.04297 -17.1709l-57.623 -241.963c-12.748 -54.1729 -68.2627 -98.1387 -123.915 -98.1387h-0.345703h-107.455h-0.224609
c-33.8135 0 -81.2148 18.834 -105.807 42.041l-91.3652 85.9766c-12.8213 12.0469 -23.2266 36.1016 -23.2266 53.6943c0 16.1299 8.97266 38.7529 20.0273 50.499c5.31836 5.66406 29.875 29.3926 68.1152 21.8477l-24.3594 82.1973
c-1.68164 5.66406 -3.0459 15.0576 -3.0459 20.9668c0 37.5938 30.417 70.502 67.8955 73.4551c-0.204102 2.03125 -0.369141 5.33691 -0.369141 7.37891c0 31.627 24.8594 63.6895 55.4902 71.5684c43.248 10.9785 80.5645 -17.7012 89.6602 -53.0723l13.6836 -53.207
l4.64648 22.6602c6.76074 32.417 39.123 58.8115 72.2373 58.916c8.73438 0 56.625 -3.26953 70.7383 -54.0801c15.0664 0.710938 46.9199 -3.50977 66.3105 -35.0176zM463.271 287.219c7.86914 32.9844 -42.1211 45.2695 -50.0859 11.9219l-24.8008 -104.146
c-4.38867 -18.4141 -31.7783 -11.8926 -28.0557 6.2168l28.5479 139.166c7.39844 36.0703 -43.3076 45.0703 -50.1182 11.9629l-31.791 -154.971c-3.54883 -17.3086 -28.2832 -18.0469 -32.7109 -0.804688l-47.3262 184.035
c-8.43359 32.8105 -58.3691 20.2676 -49.8652 -12.8359l42.4414 -165.039c4.81641 -18.7207 -23.3711 -26.9121 -28.9648 -8.00781l-31.3438 105.779c-9.6875 32.6465 -59.1191 18.2578 -49.3867 -14.625l36.0137 -121.539
c5.61816 -18.9521 10.1777 -50.377 10.1777 -70.1436v-0.00878906c0 -6.54297 -8.05664 -10.9355 -13.4824 -5.82617l-51.123 48.1074c-24.7852 23.4082 -60.0527 -14.1875 -35.2793 -37.4902l91.3691 -85.9805c16.9629 -16.0068 49.6592 -28.998 72.9824 -28.998h0.154297
h107.455h0.216797c34.7402 0 69.3936 27.4443 77.3525 61.2598z" />
<glyph glyph-name="hand-pointer" unicode="&#xf25a;" horiz-adv-x="448"
d="M358.182 268.639c43.1934 16.6348 89.8184 -15.7949 89.8184 -62.6387v-84c-0.000976562 -4.25 -0.775391 -11.0615 -1.72754 -15.2041l-27.4297 -118.999c-6.98242 -30.2969 -33.7549 -51.7969 -64.5566 -51.7969h-178.286c-21.2588 0 -41.3682 10.4102 -53.791 27.8457
l-109.699 154.001c-21.2432 29.8193 -14.8047 71.3574 14.5498 93.1523c18.8115 13.9658 42.1748 16.2822 62.083 8.87207v161.129c0 36.9443 29.7363 67 66.2861 67s66.2861 -30.0557 66.2861 -67v-73.6338c20.4131 2.85742 41.4678 -3.94238 56.5947 -19.6289
c27.1934 12.8467 60.3799 5.66992 79.8721 -19.0986zM80.9854 168.303c-14.4004 20.2119 -43.8008 -2.38281 -29.3945 -22.6055l109.712 -154c3.43457 -4.81934 8.92871 -7.69727 14.6973 -7.69727h178.285c8.49219 0 15.8037 5.99414 17.7822 14.5762l27.4297 119.001
c0.333008 1.44629 0.501953 2.93457 0.501953 4.42285v84c0 25.1602 -36.5713 25.1211 -36.5713 0c0 -8.83594 -7.16309 -16 -16 -16h-6.85645c-8.83691 0 -16 7.16406 -16 16v21c0 25.1602 -36.5713 25.1201 -36.5713 0v-21c0 -8.83594 -7.16309 -16 -16 -16h-6.85938
c-8.83691 0 -16 7.16406 -16 16v35c0 25.1602 -36.5703 25.1201 -36.5703 0v-35c0 -8.83594 -7.16309 -16 -16 -16h-6.85742c-8.83691 0 -16 7.16406 -16 16v175c0 25.1602 -36.5713 25.1201 -36.5713 0v-241.493c0 -15.5703 -20.0352 -21.9092 -29.0303 -9.2832z
M176.143 48v96c0 8.83691 6.26855 16 14 16h6c7.73242 0 14 -7.16309 14 -16v-96c0 -8.83691 -6.26758 -16 -14 -16h-6c-7.73242 0 -14 7.16309 -14 16zM251.571 48v96c0 8.83691 6.26758 16 14 16h6c7.73145 0 14 -7.16309 14 -16v-96c0 -8.83691 -6.26855 -16 -14 -16h-6
c-7.73242 0 -14 7.16309 -14 16zM327 48v96c0 8.83691 6.26758 16 14 16h6c7.73242 0 14 -7.16309 14 -16v-96c0 -8.83691 -6.26758 -16 -14 -16h-6c-7.73242 0 -14 7.16309 -14 16z" />
<glyph glyph-name="hand-peace" unicode="&#xf25b;" horiz-adv-x="448"
d="M362.146 256.024c42.5908 13.3184 85.8535 -19.0684 85.8535 -64.0244l-0.0117188 -70.001c-0.000976562 -4.25 -0.775391 -11.0615 -1.72949 -15.2031l-27.4268 -118.999c-6.99707 -30.3564 -33.8105 -51.7969 -64.5547 -51.7969h-205.702
c-23.8447 0 -45.9502 13.0303 -57.6904 34.0059l-54.8525 97.999c-19.2607 34.4092 -5.82422 67.2617 24.7324 92.2178l-55.7568 144.928c-14.5791 37.8867 3.72754 80.6113 41.2012 95.6416c37.6406 15.0977 80.3691 -3.63477 95.1123 -41.9424l18.6787 -78.8496
l-9.14062 94c0 40.8037 32.8096 74 73.1396 74s73.1406 -33.1963 73.1406 -74v-87.6348c26.2451 3.6748 51.2959 -8.69238 65.0068 -30.3408zM399.987 122l-0.000976562 70c0 25.1602 -36.5674 25.1201 -36.5674 0c0 -8.83691 -7.16309 -16 -16 -16h-6.85547
c-8.83789 0 -16 7.16309 -16 16v28c0 25.1592 -36.5674 25.1221 -36.5674 0v-28c0 -8.83691 -7.16309 -16 -16 -16h-6.85645c-8.83691 0 -16 7.16309 -16 16v182c0 34.4297 -50.2803 34.375 -50.2803 0v-182c0 -8.83691 -7.16309 -16 -16 -16h-11.6328v0
c-6.06445 0 -12.7549 4.59375 -14.9326 10.2539l-59.7842 155.357c-12.1396 31.5518 -59.2842 13.4326 -46.7168 -19.2227l64.0898 -166.549c0.589844 -1.53125 1.06738 -4.10547 1.06738 -5.74609c0 -4.19043 -2.63379 -9.74219 -5.87891 -12.3926l-26.6475 -21.7646
c-7.12695 -5.81934 -9.06445 -16.3467 -4.50781 -24.4873l54.8535 -98c3.26367 -5.82812 9.31934 -9.44922 15.8057 -9.44922h205.701c8.49121 0 15.8037 5.99414 17.7812 14.5762l27.4277 119.001c0.333008 1.44629 0.501953 2.93457 0.501953 4.42285z" />
<glyph glyph-name="registered" unicode="&#xf25d;"
d="M256 440c136.967 0 248 -111.033 248 -248s-111.033 -248 -248 -248s-248 111.033 -248 248s111.033 248 248 248zM256 -8c110.549 0 200 89.4678 200 200c0 110.549 -89.4678 200 -200 200c-110.549 0 -200 -89.4688 -200 -200c0 -110.549 89.4678 -200 200 -200z
M366.442 73.791c4.40332 -7.99219 -1.37012 -17.791 -10.5107 -17.791h-42.8096h-0.0126953c-3.97559 0 -8.71582 2.84961 -10.5801 6.36035l-47.5156 89.3027h-31.958v-83.6631c0 -6.61719 -5.38281 -12 -12 -12h-38.5674c-6.61719 0 -12 5.38281 -12 12v248.304
c0 6.61719 5.38281 12 12 12h78.667c71.251 0 101.498 -32.749 101.498 -85.252c0 -31.6123 -15.2148 -59.2969 -39.4824 -73.1758c3.02148 -4.61719 0.225586 0.199219 53.2715 -96.085zM256.933 208.094c20.9131 0 32.4307 11.5186 32.4316 32.4316
c0 19.5752 -6.5127 31.709 -38.9297 31.709h-27.377v-64.1406h33.875z" />
<glyph glyph-name="calendar-plus" unicode="&#xf271;" horiz-adv-x="448"
d="M336 156v-24c0 -6.59961 -5.40039 -12 -12 -12h-76v-76c0 -6.59961 -5.40039 -12 -12 -12h-24c-6.59961 0 -12 5.40039 -12 12v76h-76c-6.59961 0 -12 5.40039 -12 12v24c0 6.59961 5.40039 12 12 12h76v76c0 6.59961 5.40039 12 12 12h24c6.59961 0 12 -5.40039 12 -12
v-76h76c6.59961 0 12 -5.40039 12 -12zM448 336v-352c0 -26.5 -21.5 -48 -48 -48h-352c-26.5 0 -48 21.5 -48 48v352c0 26.5 21.5 48 48 48h48v52c0 6.59961 5.40039 12 12 12h40c6.59961 0 12 -5.40039 12 -12v-52h128v52c0 6.59961 5.40039 12 12 12h40
c6.59961 0 12 -5.40039 12 -12v-52h48c26.5 0 48 -21.5 48 -48zM400 -10v298h-352v-298c0 -3.2998 2.7002 -6 6 -6h340c3.2998 0 6 2.7002 6 6z" />
<glyph glyph-name="calendar-minus" unicode="&#xf272;" horiz-adv-x="448"
d="M124 120c-6.59961 0 -12 5.40039 -12 12v24c0 6.59961 5.40039 12 12 12h200c6.59961 0 12 -5.40039 12 -12v-24c0 -6.59961 -5.40039 -12 -12 -12h-200zM448 336v-352c0 -26.5 -21.5 -48 -48 -48h-352c-26.5 0 -48 21.5 -48 48v352c0 26.5 21.5 48 48 48h48v52
c0 6.59961 5.40039 12 12 12h40c6.59961 0 12 -5.40039 12 -12v-52h128v52c0 6.59961 5.40039 12 12 12h40c6.59961 0 12 -5.40039 12 -12v-52h48c26.5 0 48 -21.5 48 -48zM400 -10v298h-352v-298c0 -3.2998 2.7002 -6 6 -6h340c3.2998 0 6 2.7002 6 6z" />
<glyph glyph-name="calendar-times" unicode="&#xf273;" horiz-adv-x="448"
d="M311.7 73.2998l-17 -17c-4.7002 -4.7002 -12.2998 -4.7002 -17 0l-53.7002 53.7998l-53.7002 -53.6992c-4.7002 -4.7002 -12.2998 -4.7002 -17 0l-17 17c-4.7002 4.69922 -4.7002 12.2998 0 17l53.7002 53.6992l-53.7002 53.7002c-4.7002 4.7002 -4.7002 12.2998 0 17
l17 17c4.7002 4.7002 12.2998 4.7002 17 0l53.7002 -53.7002l53.7002 53.7002c4.7002 4.7002 12.2998 4.7002 17 0l17 -17c4.7002 -4.7002 4.7002 -12.2998 0 -17l-53.7998 -53.7998l53.6992 -53.7002c4.80078 -4.7002 4.80078 -12.2998 0.100586 -17zM448 336v-352
c0 -26.5 -21.5 -48 -48 -48h-352c-26.5 0 -48 21.5 -48 48v352c0 26.5 21.5 48 48 48h48v52c0 6.59961 5.40039 12 12 12h40c6.59961 0 12 -5.40039 12 -12v-52h128v52c0 6.59961 5.40039 12 12 12h40c6.59961 0 12 -5.40039 12 -12v-52h48c26.5 0 48 -21.5 48 -48zM400 -10
v298h-352v-298c0 -3.2998 2.7002 -6 6 -6h340c3.2998 0 6 2.7002 6 6z" />
<glyph glyph-name="calendar-check" unicode="&#xf274;" horiz-adv-x="448"
d="M400 384c26.5098 0 48 -21.4902 48 -48v-352c0 -26.5098 -21.4902 -48 -48 -48h-352c-26.5098 0 -48 21.4902 -48 48v352c0 26.5098 21.4902 48 48 48h48v52c0 6.62695 5.37305 12 12 12h40c6.62695 0 12 -5.37305 12 -12v-52h128v52c0 6.62695 5.37305 12 12 12h40
c6.62695 0 12 -5.37305 12 -12v-52h48zM394 -16c3.31152 0 6 2.68848 6 6v298h-352v-298c0 -3.31152 2.68848 -6 6 -6h340zM341.151 184.65l-142.31 -141.169c-4.70508 -4.66699 -12.3027 -4.6377 -16.9707 0.0673828l-75.0908 75.6992
c-4.66699 4.70508 -4.6377 12.3027 0.0673828 16.9707l22.7197 22.5361c4.70508 4.66699 12.3027 4.63672 16.9697 -0.0693359l44.1035 -44.4609l111.072 110.182c4.70508 4.66699 12.3027 4.63672 16.9707 -0.0683594l22.5361 -22.7178
c4.66699 -4.70508 4.63672 -12.3027 -0.0683594 -16.9697z" />
<glyph glyph-name="map" unicode="&#xf279;" horiz-adv-x="576"
d="M560.02 416c8.4502 0 15.9805 -6.83008 15.9805 -16.0195v-346.32c0 -11.9609 -9.01367 -25.2705 -20.1201 -29.71l-151.83 -52.8105c-5.32617 -1.7334 -14.1953 -3.13965 -19.7969 -3.13965c-5.7373 0 -14.8105 1.47363 -20.2529 3.29004l-172 60.71l-170.05 -62.8398
c-1.99023 -0.790039 -4 -1.16016 -5.95996 -1.16016c-8.45996 0 -15.9902 6.83008 -15.9902 16.0195v346.32c0.00292969 11.959 9.0166 25.2686 20.1201 29.71l151.83 52.8105c6.43945 2.08984 13.1201 3.13965 19.8096 3.13965
c5.73242 -0.00195312 14.8008 -1.47168 20.2402 -3.28027l172 -60.7197h0.00976562l170.05 62.8398c1.98047 0.790039 4 1.16016 5.95996 1.16016zM224 357.58v-285.97l128 -45.1904v285.97zM48 29.9502l127.36 47.0801l0.639648 0.229492v286.2l-128 -44.5303v-288.979z
M528 65.0801v288.97l-127.36 -47.0693l-0.639648 -0.240234v-286.19z" />
<glyph glyph-name="comment-alt" unicode="&#xf27a;"
d="M448 448c35.2998 0 64 -28.7002 64 -64v-288c0 -35.2998 -28.7002 -64 -64 -64h-144l-124.9 -93.5996c-2.19922 -1.7002 -4.69922 -2.40039 -7.09961 -2.40039c-6.2002 0 -12 4.90039 -12 12v84h-96c-35.2998 0 -64 28.7002 -64 64v288c0 35.2998 28.7002 64 64 64h384z
M464 96v288c0 8.7998 -7.2002 16 -16 16h-384c-8.7998 0 -16 -7.2002 -16 -16v-288c0 -8.7998 7.2002 -16 16 -16h144v-60l67.2002 50.4004l12.7998 9.59961h160c8.7998 0 16 7.2002 16 16z" />
<glyph glyph-name="pause-circle" unicode="&#xf28b;"
d="M256 440c137 0 248 -111 248 -248s-111 -248 -248 -248s-248 111 -248 248s111 248 248 248zM256 -8c110.5 0 200 89.5 200 200s-89.5 200 -200 200s-200 -89.5 -200 -200s89.5 -200 200 -200zM352 272v-160c0 -8.7998 -7.2002 -16 -16 -16h-48
c-8.7998 0 -16 7.2002 -16 16v160c0 8.7998 7.2002 16 16 16h48c8.7998 0 16 -7.2002 16 -16zM240 272v-160c0 -8.7998 -7.2002 -16 -16 -16h-48c-8.7998 0 -16 7.2002 -16 16v160c0 8.7998 7.2002 16 16 16h48c8.7998 0 16 -7.2002 16 -16z" />
<glyph glyph-name="stop-circle" unicode="&#xf28d;"
d="M504 192c0 -137 -111 -248 -248 -248s-248 111 -248 248s111 248 248 248s248 -111 248 -248zM56 192c0 -110.5 89.5 -200 200 -200s200 89.5 200 200s-89.5 200 -200 200s-200 -89.5 -200 -200zM352 272v-160c0 -8.7998 -7.2002 -16 -16 -16h-160
c-8.7998 0 -16 7.2002 -16 16v160c0 8.7998 7.2002 16 16 16h160c8.7998 0 16 -7.2002 16 -16z" />
<glyph glyph-name="handshake" unicode="&#xf2b5;" horiz-adv-x="640"
d="M519.2 320.1h120.8v-255.699h-64c-17.5 0 -31.7998 14.1992 -31.9004 31.6992h-57.8994c-1.7998 -8.19922 -5.2998 -16.0996 -10.9004 -23l-26.2002 -32.2998c-15.7998 -19.3994 -41.8994 -25.5 -64 -16.7998c-13.5 -16.5996 -30.5996 -24 -48.7998 -24
c-15.0996 0 -28.5996 5.09961 -41.0996 15.9004c-31.7998 -21.9004 -74.7002 -21.3008 -105.601 3.7998l-84.5996 76.3994h-9.09961c-0.100586 -17.5 -14.3008 -31.6992 -31.9004 -31.6992h-64v255.699h118l47.5996 47.6006c10.5 10.3994 24.8008 16.2998 39.6006 16.2998
h226.8v0c12.7812 0 30.5225 -7.30273 39.5996 -16.2998zM48 96.4004c8.7998 0 16 7.09961 16 16c0 8.7998 -7.2002 16 -16 16s-16 -7.2002 -16 -16c0 -8.80078 7.2002 -16 16 -16zM438 103.3c2.7002 3.40039 2.2002 8.5 -1.2002 11.2998l-108.2 87.8008l-8.19922 -7.5
c-40.3008 -36.8008 -86.7002 -11.8008 -101.5 4.39941c-26.7002 29 -25 74.4004 4.39941 101.3l38.7002 35.5h-56.7002c-2 -0.799805 -3.7002 -1.5 -5.7002 -2.2998l-61.6992 -61.5996h-41.9004v-128.101h27.7002l97.2998 -88
c16.0996 -13.0996 41.4004 -10.5 55.2998 6.60059l15.6006 19.2002l36.7998 -31.5c3 -2.40039 12 -4.90039 18 2.39941l30 36.5l23.8994 -19.3994c3.5 -2.80078 8.5 -2.2002 11.3008 1.19922zM544 144.1v128h-44.7002l-61.7002 61.6006
c-1.39941 1.5 -3.39941 2.2998 -5.5 2.2998l-83.6992 -0.200195c-10 0 -19.6006 -3.7002 -27 -10.5l-65.6006 -60.0996c-9.7002 -8.7998 -10.5 -24 -1.2002 -33.9004c8.90039 -9.39941 25.1006 -8.7002 34.6006 0l55.2002 50.6006c6.5 5.89941 16.5996 5.5 22.5996 -1
l10.9004 -11.7002c6 -6.5 5.5 -16.6006 -1 -22.6006l-12.5 -11.3994l102.699 -83.4004c2.80078 -2.2998 5.40039 -4.89941 7.7002 -7.7002h69.2002zM592 96.4004c8.7998 0 16 7.09961 16 16c0 8.7998 -7.2002 16 -16 16s-16 -7.2002 -16 -16c0 -8.80078 7.2002 -16 16 -16z
" />
<glyph glyph-name="envelope-open" unicode="&#xf2b6;"
d="M494.586 283.484c9.6123 -7.94824 17.4141 -24.5205 17.4141 -36.9932v-262.491c0 -26.5098 -21.4902 -48 -48 -48h-416c-26.5098 0 -48 21.4902 -48 48v262.515c0 12.5166 7.84668 29.1279 17.5146 37.0771c4.08008 3.35449 110.688 89.0996 135.15 108.549
c22.6992 18.1426 60.1299 55.8594 103.335 55.8594c43.4365 0 81.2314 -38.1914 103.335 -55.8594c23.5283 -18.707 130.554 -104.773 135.251 -108.656zM464 -10v253.632v0.00488281c0 1.5791 -0.996094 3.66602 -2.22363 4.6582
c-15.8633 12.8232 -108.793 87.5752 -132.366 106.316c-17.5527 14.0195 -49.7168 45.3887 -73.4102 45.3887c-23.6016 0 -55.2451 -30.8799 -73.4102 -45.3887c-23.5713 -18.7393 -116.494 -93.4795 -132.364 -106.293
c-1.40918 -1.13965 -2.22559 -2.85254 -2.22559 -4.66504v-253.653c0 -3.31152 2.68848 -6 6 -6h404c3.31152 0 6 2.68848 6 6zM432.009 177.704c4.24902 -5.15918 3.46484 -12.7949 -1.74512 -16.9814c-28.9746 -23.2822 -59.2734 -47.5967 -70.9287 -56.8623
c-22.6992 -18.1436 -60.1299 -55.8604 -103.335 -55.8604c-43.4521 0 -81.2871 38.2373 -103.335 55.8604c-11.2793 8.9668 -41.7441 33.4131 -70.9268 56.8643c-5.20996 4.1875 -5.99316 11.8223 -1.74512 16.9814l15.2578 18.5283
c4.17773 5.07227 11.6572 5.84277 16.7793 1.72559c28.6182 -23.001 58.5654 -47.0352 70.5596 -56.5713c17.5527 -14.0195 49.7168 -45.3887 73.4102 -45.3887c23.6016 0 55.2461 30.8799 73.4102 45.3887c11.9941 9.53516 41.9434 33.5703 70.5625 56.5684
c5.12207 4.11621 12.6016 3.3457 16.7783 -1.72656z" />
<glyph glyph-name="address-book" unicode="&#xf2b9;" horiz-adv-x="448"
d="M436 288h-20v-64h20c6.59961 0 12 -5.40039 12 -12v-40c0 -6.59961 -5.40039 -12 -12 -12h-20v-64h20c6.59961 0 12 -5.40039 12 -12v-40c0 -6.59961 -5.40039 -12 -12 -12h-20v-48c0 -26.5 -21.5 -48 -48 -48h-320c-26.5 0 -48 21.5 -48 48v416c0 26.5 21.5 48 48 48
h320c26.5 0 48 -21.5 48 -48v-48h20c6.59961 0 12 -5.40039 12 -12v-40c0 -6.59961 -5.40039 -12 -12 -12zM368 -16v416h-320v-416h320zM208 192c-35.2998 0 -64 28.7002 -64 64s28.7002 64 64 64s64 -28.7002 64 -64s-28.7002 -64 -64 -64zM118.4 64
c-12.4004 0 -22.4004 8.59961 -22.4004 19.2002v19.2002c0 31.7998 30.0996 57.5996 67.2002 57.5996c11.3994 0 17.8994 -8 44.7998 -8c26.0996 0 34 8 44.7998 8c37.1006 0 67.2002 -25.7998 67.2002 -57.5996v-19.2002c0 -10.6006 -10 -19.2002 -22.4004 -19.2002
h-179.199z" />
<glyph glyph-name="address-card" unicode="&#xf2bb;" horiz-adv-x="576"
d="M528 416c26.5 0 48 -21.5 48 -48v-352c0 -26.5 -21.5 -48 -48 -48h-480c-26.5 0 -48 21.5 -48 48v352c0 26.5 21.5 48 48 48h480zM528 16v352h-480v-352h480zM208 192c-35.2998 0 -64 28.7002 -64 64s28.7002 64 64 64s64 -28.7002 64 -64s-28.7002 -64 -64 -64z
M118.4 64c-12.4004 0 -22.4004 8.59961 -22.4004 19.2002v19.2002c0 31.7998 30.0996 57.5996 67.2002 57.5996c11.3994 0 17.8994 -8 44.7998 -8c26.0996 0 34 8 44.7998 8c37.1006 0 67.2002 -25.7998 67.2002 -57.5996v-19.2002
c0 -10.6006 -10 -19.2002 -22.4004 -19.2002h-179.199zM360 128c-4.40039 0 -8 3.59961 -8 8v16c0 4.40039 3.59961 8 8 8h112c4.40039 0 8 -3.59961 8 -8v-16c0 -4.40039 -3.59961 -8 -8 -8h-112zM360 192c-4.40039 0 -8 3.59961 -8 8v16c0 4.40039 3.59961 8 8 8h112
c4.40039 0 8 -3.59961 8 -8v-16c0 -4.40039 -3.59961 -8 -8 -8h-112zM360 256c-4.40039 0 -8 3.59961 -8 8v16c0 4.40039 3.59961 8 8 8h112c4.40039 0 8 -3.59961 8 -8v-16c0 -4.40039 -3.59961 -8 -8 -8h-112z" />
<glyph glyph-name="user-circle" unicode="&#xf2bd;" horiz-adv-x="496"
d="M248 344c53 0 96 -43 96 -96s-43 -96 -96 -96s-96 43 -96 96s43 96 96 96zM248 200c26.5 0 48 21.5 48 48s-21.5 48 -48 48s-48 -21.5 -48 -48s21.5 -48 48 -48zM248 440c137 0 248 -111 248 -248s-111 -248 -248 -248s-248 111 -248 248s111 248 248 248zM248 -8
c49.7002 0 95.0996 18.2998 130.1 48.4004c-14.8994 23 -40.3994 38.5 -69.5996 39.5c-20.7998 -6.5 -40.5996 -9.60059 -60.5 -9.60059s-39.7002 3.2002 -60.5 9.60059c-29.2002 -0.900391 -54.7002 -16.5 -69.5996 -39.5c35 -30.1006 80.3994 -48.4004 130.1 -48.4004z
M410.7 76.0996c23.3994 32.7002 37.2998 72.7002 37.2998 115.9c0 110.3 -89.7002 200 -200 200s-200 -89.7002 -200 -200c0 -43.2002 13.9004 -83.2002 37.2998 -115.9c24.5 31.4004 62.2002 51.9004 105.101 51.9004c10.1992 0 26.0996 -9.59961 57.5996 -9.59961
c31.5996 0 47.4004 9.59961 57.5996 9.59961c43 0 80.7002 -20.5 105.101 -51.9004z" />
<glyph glyph-name="id-badge" unicode="&#xf2c1;" horiz-adv-x="384"
d="M336 448c26.5 0 48 -21.5 48 -48v-416c0 -26.5 -21.5 -48 -48 -48h-288c-26.5 0 -48 21.5 -48 48v416c0 26.5 21.5 48 48 48h288zM336 -16v416h-288v-416h288zM144 336c-8.7998 0 -16 7.2002 -16 16s7.2002 16 16 16h96c8.7998 0 16 -7.2002 16 -16s-7.2002 -16 -16 -16
h-96zM192 160c-35.2998 0 -64 28.7002 -64 64s28.7002 64 64 64s64 -28.7002 64 -64s-28.7002 -64 -64 -64zM102.4 32c-12.4004 0 -22.4004 8.59961 -22.4004 19.2002v19.2002c0 31.7998 30.0996 57.5996 67.2002 57.5996c11.3994 0 17.8994 -8 44.7998 -8
c26.0996 0 34 8 44.7998 8c37.1006 0 67.2002 -25.7998 67.2002 -57.5996v-19.2002c0 -10.6006 -10 -19.2002 -22.4004 -19.2002h-179.199z" />
<glyph glyph-name="id-card" unicode="&#xf2c2;" horiz-adv-x="576"
d="M528 416c26.5 0 48 -21.5 48 -48v-352c0 -26.5 -21.5 -48 -48 -48h-480c-26.5 0 -48 21.5 -48 48v352c0 26.5 21.5 48 48 48h480zM528 16v288h-480v-288h32.7998c-1 4.5 -0.799805 -3.59961 -0.799805 22.4004c0 31.7998 30.0996 57.5996 67.2002 57.5996
c11.3994 0 17.8994 -8 44.7998 -8c26.0996 0 34 8 44.7998 8c37.1006 0 67.2002 -25.7998 67.2002 -57.5996c0 -26 0.0996094 -17.9004 -0.799805 -22.4004h224.8zM360 96c-4.40039 0 -8 3.59961 -8 8v16c0 4.40039 3.59961 8 8 8h112c4.40039 0 8 -3.59961 8 -8v-16
c0 -4.40039 -3.59961 -8 -8 -8h-112zM360 160c-4.40039 0 -8 3.59961 -8 8v16c0 4.40039 3.59961 8 8 8h112c4.40039 0 8 -3.59961 8 -8v-16c0 -4.40039 -3.59961 -8 -8 -8h-112zM360 224c-4.40039 0 -8 3.59961 -8 8v16c0 4.40039 3.59961 8 8 8h112
c4.40039 0 8 -3.59961 8 -8v-16c0 -4.40039 -3.59961 -8 -8 -8h-112zM192 128c-35.2998 0 -64 28.7002 -64 64s28.7002 64 64 64s64 -28.7002 64 -64s-28.7002 -64 -64 -64z" />
<glyph glyph-name="window-maximize" unicode="&#xf2d0;"
d="M464 416c26.5 0 48 -21.5 48 -48v-352c0 -26.5 -21.5 -48 -48 -48h-416c-26.5 0 -48 21.5 -48 48v352c0 26.5 21.5 48 48 48h416zM464 22v234h-416v-234c0 -3.2998 2.7002 -6 6 -6h404c3.2998 0 6 2.7002 6 6z" />
<glyph glyph-name="window-minimize" unicode="&#xf2d1;"
d="M480 -32h-448c-17.7002 0 -32 14.2998 -32 32s14.2998 32 32 32h448c17.7002 0 32 -14.2998 32 -32s-14.2998 -32 -32 -32z" />
<glyph glyph-name="window-restore" unicode="&#xf2d2;"
d="M464 448c26.5 0 48 -21.5 48 -48v-320c0 -26.5 -21.5 -48 -48 -48h-48v-48c0 -26.5 -21.5 -48 -48 -48h-320c-26.5 0 -48 21.5 -48 48v320c0 26.5 21.5 48 48 48h48v48c0 26.5 21.5 48 48 48h320zM368 -16v208h-320v-208h320zM464 80v320h-320v-48h224
c26.5 0 48 -21.5 48 -48v-224h48z" />
<glyph glyph-name="snowflake" unicode="&#xf2dc;" horiz-adv-x="448"
d="M440.1 92.7998c7.60059 -4.39941 10.1006 -14.2002 5.5 -21.7002l-7.89941 -13.8994c-4.40039 -7.7002 -14 -10.2998 -21.5 -5.90039l-39.2002 23l9.09961 -34.7002c2.30078 -8.5 -2.69922 -17.2998 -11.0996 -19.5996l-15.2002 -4.09961
c-8.39941 -2.30078 -17.0996 2.7998 -19.2998 11.2998l-21.2998 81l-71.9004 42.2002v-84.5l58.2998 -59.3008c6.10059 -6.19922 6.10059 -16.3994 0 -22.5996l-11.0996 -11.2998c-6.09961 -6.2002 -16.0996 -6.2002 -22.2002 0l-24.8994 25.3994v-46.0996
c0 -8.7998 -7 -16 -15.7002 -16h-15.7002c-8.7002 0 -15.7002 7.2002 -15.7002 16v45.9004l-24.8994 -25.4004c-6.10059 -6.2002 -16.1006 -6.2002 -22.2002 0l-11.1006 11.2998c-6.09961 6.2002 -6.09961 16.4004 0 22.6006l58.3008 59.2998v84.5l-71.9004 -42.2002
l-21.2998 -81c-2.2998 -8.5 -10.9004 -13.5996 -19.2998 -11.2998l-15.2002 4.09961c-8.40039 2.2998 -13.2998 11.1006 -11.1006 19.6006l9.10059 34.6992l-39.2002 -23c-7.5 -4.39941 -17.2002 -1.7998 -21.5 5.90039l-7.90039 13.9004
c-4.2998 7.69922 -1.69922 17.5 5.80078 21.8994l39.1992 23l-34.0996 9.2998c-8.40039 2.30078 -13.2998 11.1006 -11.0996 19.6006l4.09961 15.5c2.2998 8.5 10.9004 13.5996 19.2998 11.2998l79.7002 -21.7002l71.9004 42.2002l-71.9004 42.2002l-79.7002 -21.7002
c-8.39941 -2.2998 -17.0996 2.7998 -19.2998 11.2998l-4.09961 15.5c-2.30078 8.5 2.69922 17.2998 11.0996 19.6006l34.0996 9.09961l-39.1992 23c-7.60059 4.5 -10.1006 14.2002 -5.80078 21.9004l7.90039 13.8994c4.40039 7.7002 14 10.2998 21.5 5.90039l39.2002 -23
l-9.10059 34.7002c-2.2998 8.5 2.7002 17.2998 11.1006 19.5996l15.2002 4.09961c8.39941 2.30078 17.0996 -2.7998 19.2998 -11.2998l21.2998 -81l71.9004 -42.2002v84.5l-58.3008 59.3008c-6.09961 6.19922 -6.09961 16.3994 0 22.5996l11.5 11.2998
c6.10059 6.2002 16.1006 6.2002 22.2002 0l24.9004 -25.3994v46.0996c0 8.7998 7 16 15.7002 16h15.6992c8.7002 0 15.7002 -7.2002 15.7002 -16v-45.9004l24.9004 25.4004c6.09961 6.2002 16.0996 6.2002 22.2002 0l11.0996 -11.2998
c6.09961 -6.2002 6.09961 -16.4004 0 -22.6006l-58.2998 -59.2998v-84.5l71.8994 42.2002l21.3008 81c2.2998 8.5 10.8994 13.5996 19.2998 11.2998l15.2002 -4.09961c8.39941 -2.2998 13.2998 -11.1006 11.0996 -19.6006l-9.09961 -34.6992l39.1992 23
c7.5 4.39941 17.2002 1.7998 21.5 -5.90039l7.90039 -13.9004c4.2998 -7.69922 1.7002 -17.5 -5.7998 -21.8994l-39.2002 -23l34.0996 -9.2998c8.40039 -2.30078 13.3008 -11.1006 11.1006 -19.6006l-4.10059 -15.5c-2.2998 -8.5 -10.8994 -13.5996 -19.2998 -11.2998
l-79.7002 21.7002l-71.8994 -42.2002l71.7998 -42.2002l79.7002 21.7002c8.39941 2.2998 17.0996 -2.7998 19.2998 -11.2998l4.09961 -15.5c2.30078 -8.5 -2.69922 -17.2998 -11.0996 -19.6006l-34.0996 -9.2998z" />
<glyph glyph-name="trash-alt" unicode="&#xf2ed;" horiz-adv-x="448"
d="M268 32c-6.62402 0 -12 5.37598 -12 12v216c0 6.62402 5.37598 12 12 12h24c6.62402 0 12 -5.37598 12 -12v-216c0 -6.62402 -5.37598 -12 -12 -12h-24zM432 368c8.83203 0 16 -7.16797 16 -16v-16c0 -8.83203 -7.16797 -16 -16 -16h-16v-336
c0 -26.4961 -21.5039 -48 -48 -48h-288c-26.4961 0 -48 21.5039 -48 48v336h-16c-8.83203 0 -16 7.16797 -16 16v16c0 8.83203 7.16797 16 16 16h82.4102l34.0195 56.7002c7.71875 12.8613 26.1572 23.2998 41.1572 23.2998h0.00292969h100.82h0.0224609
c15 0 33.4385 -10.4385 41.1572 -23.2998l34 -56.7002h82.4102zM171.84 397.09l-17.4502 -29.0898h139.221l-17.46 29.0898c-0.96582 1.60645 -3.26953 2.91016 -5.14355 2.91016h-0.00683594h-94h-0.0166016c-1.87402 0 -4.17871 -1.30371 -5.14355 -2.91016zM368 -16v336
h-288v-336h288zM156 32c-6.62402 0 -12 5.37598 -12 12v216c0 6.62402 5.37598 12 12 12h24c6.62402 0 12 -5.37598 12 -12v-216c0 -6.62402 -5.37598 -12 -12 -12h-24z" />
<glyph glyph-name="images" unicode="&#xf302;" horiz-adv-x="576"
d="M480 32v-16c0 -26.5098 -21.4902 -48 -48 -48h-384c-26.5098 0 -48 21.4902 -48 48v256c0 26.5098 21.4902 48 48 48h16v-48h-10c-3.31152 0 -6 -2.68848 -6 -6v-244c0 -3.31152 2.68848 -6 6 -6h372c3.31152 0 6 2.68848 6 6v10h48zM522 368h-372
c-3.31152 0 -6 -2.68848 -6 -6v-244c0 -3.31152 2.68848 -6 6 -6h372c3.31152 0 6 2.68848 6 6v244c0 3.31152 -2.68848 6 -6 6zM528 416c26.5098 0 48 -21.4902 48 -48v-256c0 -26.5098 -21.4902 -48 -48 -48h-384c-26.5098 0 -48 21.4902 -48 48v256
c0 26.5098 21.4902 48 48 48h384zM264 304c0 -22.0908 -17.9092 -40 -40 -40s-40 17.9092 -40 40s17.9092 40 40 40s40 -17.9092 40 -40zM192 208l39.5146 39.5146c4.68652 4.68652 12.2842 4.68652 16.9717 0l39.5137 -39.5146l103.515 103.515
c4.68652 4.68652 12.2842 4.68652 16.9717 0l71.5137 -71.5146v-80h-288v48z" />
<glyph glyph-name="clipboard" unicode="&#xf328;" horiz-adv-x="384"
d="M336 384c26.5 0 48 -21.5 48 -48v-352c0 -26.5 -21.5 -48 -48 -48h-288c-26.5 0 -48 21.5 -48 48v352c0 26.5 21.5 48 48 48h80c0 35.2998 28.7002 64 64 64s64 -28.7002 64 -64h80zM192 408c-13.2998 0 -24 -10.7002 -24 -24s10.7002 -24 24 -24s24 10.7002 24 24
s-10.7002 24 -24 24zM336 -10v340c0 3.2998 -2.7002 6 -6 6h-42v-36c0 -6.59961 -5.40039 -12 -12 -12h-168c-6.59961 0 -12 5.40039 -12 12v36h-42c-3.2998 0 -6 -2.7002 -6 -6v-340c0 -3.2998 2.7002 -6 6 -6h276c3.2998 0 6 2.7002 6 6z" />
<glyph glyph-name="arrow-alt-circle-down" unicode="&#xf358;"
d="M256 440c137 0 248 -111 248 -248s-111 -248 -248 -248s-248 111 -248 248s111 248 248 248zM256 -8c110.5 0 200 89.5 200 200s-89.5 200 -200 200s-200 -89.5 -200 -200s89.5 -200 200 -200zM224 308c0 6.59961 5.40039 12 12 12h40c6.59961 0 12 -5.40039 12 -12v-116
h67c10.7002 0 16.0996 -12.9004 8.5 -20.5l-99 -99c-4.7002 -4.7002 -12.2998 -4.7002 -17 0l-99 99c-7.5 7.59961 -2.2002 20.5 8.5 20.5h67v116z" />
<glyph glyph-name="arrow-alt-circle-left" unicode="&#xf359;"
d="M8 192c0 137 111 248 248 248s248 -111 248 -248s-111 -248 -248 -248s-248 111 -248 248zM456 192c0 110.5 -89.5 200 -200 200s-200 -89.5 -200 -200s89.5 -200 200 -200s200 89.5 200 200zM384 212v-40c0 -6.59961 -5.40039 -12 -12 -12h-116v-67
c0 -10.7002 -12.9004 -16 -20.5 -8.5l-99 99c-4.7002 4.7002 -4.7002 12.2998 0 17l99 99c7.59961 7.59961 20.5 2.2002 20.5 -8.5v-67h116c6.59961 0 12 -5.40039 12 -12z" />
<glyph glyph-name="arrow-alt-circle-right" unicode="&#xf35a;"
d="M504 192c0 -137 -111 -248 -248 -248s-248 111 -248 248s111 248 248 248s248 -111 248 -248zM56 192c0 -110.5 89.5 -200 200 -200s200 89.5 200 200s-89.5 200 -200 200s-200 -89.5 -200 -200zM128 172v40c0 6.59961 5.40039 12 12 12h116v67
c0 10.7002 12.9004 16 20.5 8.5l99 -99c4.7002 -4.7002 4.7002 -12.2998 0 -17l-99 -99c-7.59961 -7.59961 -20.5 -2.2002 -20.5 8.5v67h-116c-6.59961 0 -12 5.40039 -12 12z" />
<glyph glyph-name="arrow-alt-circle-up" unicode="&#xf35b;"
d="M256 -56c-137 0 -248 111 -248 248s111 248 248 248s248 -111 248 -248s-111 -248 -248 -248zM256 392c-110.5 0 -200 -89.5 -200 -200s89.5 -200 200 -200s200 89.5 200 200s-89.5 200 -200 200zM276 64h-40c-6.59961 0 -12 5.40039 -12 12v116h-67
c-10.7002 0 -16 12.9004 -8.5 20.5l99 99c4.7002 4.7002 12.2998 4.7002 17 0l99 -99c7.59961 -7.59961 2.2002 -20.5 -8.5 -20.5h-67v-116c0 -6.59961 -5.40039 -12 -12 -12z" />
<glyph glyph-name="gem" unicode="&#xf3a5;" horiz-adv-x="576"
d="M464 448c4.09961 0 7.7998 -2 10.0996 -5.40039l99.9004 -147.199c2.90039 -4.40039 2.59961 -10.1006 -0.700195 -14.2002l-276 -340.8c-4.7998 -5.90039 -13.7998 -5.90039 -18.5996 0l-276 340.8c-3.2998 4 -3.60059 9.7998 -0.700195 14.2002l100 147.199
c2.2002 3.40039 6 5.40039 10 5.40039h352zM444.7 400h-56.7998l51.6992 -96h68.4004zM242.6 400l-51.5996 -96h194l-51.7002 96h-90.7002zM131.3 400l-63.2998 -96h68.4004l51.6992 96h-56.7998zM88.2998 256l119.7 -160l-68.2998 160h-51.4004zM191.2 256l96.7998 -243.3
l96.7998 243.3h-193.6zM368 96l119.6 160h-51.3994z" />
<glyph glyph-name="money-bill-alt" unicode="&#xf3d1;" horiz-adv-x="640"
d="M320 304c53.0195 0 96 -50.1396 96 -112c0 -61.8701 -43 -112 -96 -112c-53.0195 0 -96 50.1504 -96 112c0 61.8604 42.9805 112 96 112zM360 136v16c0 4.41992 -3.58008 8 -8 8h-16v88c0 4.41992 -3.58008 8 -8 8h-13.5801h-0.000976562
c-4.01074 0 -9.97266 -1.80566 -13.3086 -4.03027l-15.3301 -10.2197c-1.96777 -1.30957 -3.56445 -4.29004 -3.56445 -6.65332c0 -1.33691 0.601562 -3.32422 1.34375 -4.43652l8.88086 -13.3105c1.30859 -1.9668 4.29004 -3.56445 6.65332 -3.56445
c1.33691 0 3.32422 0.602539 4.43652 1.34473l0.469727 0.310547v-55.4404h-16c-4.41992 0 -8 -3.58008 -8 -8v-16c0 -4.41992 3.58008 -8 8 -8h64c4.41992 0 8 3.58008 8 8zM608 384c17.6699 0 32 -14.3301 32 -32v-320c0 -17.6699 -14.3301 -32 -32 -32h-576
c-17.6699 0 -32 14.3301 -32 32v320c0 17.6699 14.3301 32 32 32h576zM592 112v160c-35.3496 0 -64 28.6504 -64 64h-416c0 -35.3496 -28.6504 -64 -64 -64v-160c35.3496 0 64 -28.6504 64 -64h416c0 35.3496 28.6504 64 64 64z" />
<glyph glyph-name="window-close" unicode="&#xf410;"
d="M464 416c26.5 0 48 -21.5 48 -48v-352c0 -26.5 -21.5 -48 -48 -48h-416c-26.5 0 -48 21.5 -48 48v352c0 26.5 21.5 48 48 48h416zM464 22v340c0 3.2998 -2.7002 6 -6 6h-404c-3.2998 0 -6 -2.7002 -6 -6v-340c0 -3.2998 2.7002 -6 6 -6h404c3.2998 0 6 2.7002 6 6z
M356.5 253.4l-61.4004 -61.4004l61.4004 -61.4004c4.59961 -4.59961 4.59961 -12.0996 0 -16.7998l-22.2998 -22.2998c-4.60059 -4.59961 -12.1006 -4.59961 -16.7998 0l-61.4004 61.4004l-61.4004 -61.4004c-4.59961 -4.59961 -12.0996 -4.59961 -16.7998 0
l-22.2998 22.2998c-4.59961 4.60059 -4.59961 12.1006 0 16.7998l61.4004 61.4004l-61.4004 61.4004c-4.59961 4.59961 -4.59961 12.0996 0 16.7998l22.2998 22.2998c4.60059 4.59961 12.1006 4.59961 16.7998 0l61.4004 -61.4004l61.4004 61.4004
c4.59961 4.59961 12.0996 4.59961 16.7998 0l22.2998 -22.2998c4.7002 -4.60059 4.7002 -12.1006 0 -16.7998z" />
<glyph glyph-name="comment-dots" unicode="&#xf4ad;"
d="M144 240c17.7002 0 32 -14.2998 32 -32s-14.2998 -32 -32 -32s-32 14.2998 -32 32s14.2998 32 32 32zM256 240c17.7002 0 32 -14.2998 32 -32s-14.2998 -32 -32 -32s-32 14.2998 -32 32s14.2998 32 32 32zM368 240c17.7002 0 32 -14.2998 32 -32s-14.2998 -32 -32 -32
s-32 14.2998 -32 32s14.2998 32 32 32zM256 416c141.4 0 256 -93.0996 256 -208s-114.6 -208 -256 -208c-32.7998 0 -64 5.2002 -92.9004 14.2998c-29.0996 -20.5996 -77.5996 -46.2998 -139.1 -46.2998c-9.59961 0 -18.2998 5.7002 -22.0996 14.5
c-3.80078 8.7998 -2 19 4.59961 26c0.5 0.400391 31.5 33.7998 46.4004 73.2002c-33 35.0996 -52.9004 78.7002 -52.9004 126.3c0 114.9 114.6 208 256 208zM256 48c114.7 0 208 71.7998 208 160s-93.2998 160 -208 160s-208 -71.7998 -208 -160
c0 -42.2002 21.7002 -74.0996 39.7998 -93.4004l20.6006 -21.7998l-10.6006 -28.0996c-5.5 -14.5 -12.5996 -28.1006 -19.8994 -40.2002c23.5996 7.59961 43.1992 18.9004 57.5 29l19.5 13.7998l22.6992 -7.2002c25.3008 -8 51.7002 -12.0996 78.4004 -12.0996z" />
<glyph glyph-name="smile-wink" unicode="&#xf4da;" horiz-adv-x="496"
d="M248 440c137 0 248 -111 248 -248s-111 -248 -248 -248s-248 111 -248 248s111 248 248 248zM248 -8c110.3 0 200 89.7002 200 200s-89.7002 200 -200 200s-200 -89.7002 -200 -200s89.7002 -200 200 -200zM365.8 138.4c10.2002 -8.5 11.6006 -23.6006 3.10059 -33.8008
c-30 -36 -74.1006 -56.5996 -120.9 -56.5996s-90.9004 20.5996 -120.9 56.5996c-8.39941 10.2002 -7.09961 25.3008 3.10059 33.8008c10.0996 8.39941 25.2998 7.09961 33.7998 -3.10059c20.7998 -25.0996 51.5 -39.3994 84 -39.3994s63.2002 14.3994 84 39.3994
c8.5 10.2002 23.5996 11.6006 33.7998 3.10059zM168 208c-17.7002 0 -32 14.2998 -32 32s14.2998 32 32 32s32 -14.2998 32 -32s-14.2998 -32 -32 -32zM328 268c25.7002 0 55.9004 -16.9004 59.7002 -42.0996c1.7998 -11.1006 -11.2998 -18.2002 -19.7998 -10.8008l-9.5 8.5
c-14.8008 13.2002 -46.2002 13.2002 -61 0l-9.5 -8.5c-8.30078 -7.39941 -21.5 -0.399414 -19.8008 10.8008c4 25.1992 34.2002 42.0996 59.9004 42.0996z" />
<glyph glyph-name="angry" unicode="&#xf556;" horiz-adv-x="496"
d="M248 440c137 0 248 -111 248 -248s-111 -248 -248 -248s-248 111 -248 248s111 248 248 248zM248 -8c110.3 0 200 89.7002 200 200s-89.7002 200 -200 200s-200 -89.7002 -200 -200s89.7002 -200 200 -200zM248 136c33.5996 0 65.2002 -14.7998 86.7998 -40.5996
c8.40039 -10.2002 7.10059 -25.3008 -3.09961 -33.8008c-10.6006 -8.89941 -25.7002 -6.69922 -33.7998 3c-24.8008 29.7002 -75 29.7002 -99.8008 0c-8.5 -10.1992 -23.5996 -11.5 -33.7998 -3s-11.5996 23.6006 -3.09961 33.8008
c21.5996 25.7998 53.2002 40.5996 86.7998 40.5996zM200 208c0 -17.7002 -14.2998 -32.0996 -32 -32.0996s-32 14.2998 -32 32c0 6.19922 2.2002 11.6992 5.2998 16.5996l-28.2002 8.5c-12.6992 3.7998 -19.8994 17.2002 -16.0996 29.9004
c3.7998 12.6992 17.0996 20 29.9004 16.0996l80 -24c12.6992 -3.7998 19.8994 -17.2002 16.0996 -29.9004c-3.09961 -10.3994 -12.7002 -17.0996 -23 -17.0996zM399 262.9c3.7998 -12.7002 -3.40039 -26.1006 -16.0996 -29.8008l-28.2002 -8.5
c3.09961 -4.89941 5.2998 -10.3994 5.2998 -16.5996c0 -17.7002 -14.2998 -32 -32 -32s-32 14.2998 -32 32c-10.2998 0 -19.9004 6.7002 -23 17.0996c-3.7998 12.7002 3.40039 26.1006 16.0996 29.9004l80 24c12.8008 3.7998 26.1006 -3.40039 29.9004 -16.0996z" />
<glyph glyph-name="dizzy" unicode="&#xf567;" horiz-adv-x="496"
d="M248 440c137 0 248 -111 248 -248s-111 -248 -248 -248s-248 111 -248 248s111 248 248 248zM248 -8c110.3 0 200 89.7002 200 200s-89.7002 200 -200 200s-200 -89.7002 -200 -200s89.7002 -200 200 -200zM214.2 209.9
c-7.90039 -7.90039 -20.5 -7.90039 -28.4004 -0.200195l-17.7998 17.7998l-17.7998 -17.7998c-7.7998 -7.7998 -20.5 -7.7998 -28.2998 0c-7.80078 7.7998 -7.80078 20.5 0 28.2998l17.8994 17.9004l-17.8994 17.8994c-7.80078 7.7998 -7.80078 20.5 0 28.2998
c7.7998 7.80078 20.5 7.80078 28.2998 0l17.7998 -17.7998l17.9004 17.9004c7.7998 7.7998 20.5 7.7998 28.2998 0s7.7998 -20.5 0 -28.2998l-17.9004 -17.9004l17.9004 -17.7998c7.7998 -7.7998 7.7998 -20.5 0 -28.2998zM374.2 302.1
c7.7002 -7.7998 7.7002 -20.3994 0 -28.1992l-17.9004 -17.9004l17.7998 -18c7.80078 -7.7998 7.80078 -20.5 0 -28.2998c-7.7998 -7.7998 -20.5 -7.7998 -28.2998 0l-17.7998 17.7998l-17.7998 -17.7998c-7.7998 -7.7998 -20.5 -7.7998 -28.2998 0
c-7.80078 7.7998 -7.80078 20.5 0 28.2998l17.8994 17.9004l-17.8994 17.8994c-7.80078 7.7998 -7.80078 20.5 0 28.2998c7.7998 7.80078 20.5 7.80078 28.2998 0l17.7998 -17.7998l17.9004 17.7998c7.7998 7.80078 20.5 7.80078 28.2998 0zM248 176
c35.2998 0 64 -28.7002 64 -64s-28.7002 -64 -64 -64s-64 28.7002 -64 64s28.7002 64 64 64z" />
<glyph glyph-name="flushed" unicode="&#xf579;" horiz-adv-x="496"
d="M248 440c137 0 248 -111 248 -248s-111 -248 -248 -248s-248 111 -248 248s111 248 248 248zM248 -8c110.3 0 200 89.7002 200 200s-89.7002 200 -200 200s-200 -89.7002 -200 -200s89.7002 -200 200 -200zM344 304c44.2002 0 80 -35.7998 80 -80s-35.7998 -80 -80 -80
s-80 35.7998 -80 80s35.7998 80 80 80zM344 176c26.5 0 48 21.5 48 48s-21.5 48 -48 48s-48 -21.5 -48 -48s21.5 -48 48 -48zM344 248c13.2998 0 24 -10.7002 24 -24s-10.7002 -24 -24 -24s-24 10.7002 -24 24s10.7002 24 24 24zM232 224c0 -44.2002 -35.7998 -80 -80 -80
s-80 35.7998 -80 80s35.7998 80 80 80s80 -35.7998 80 -80zM152 176c26.5 0 48 21.5 48 48s-21.5 48 -48 48s-48 -21.5 -48 -48s21.5 -48 48 -48zM152 248c13.2998 0 24 -10.7002 24 -24s-10.7002 -24 -24 -24s-24 10.7002 -24 24s10.7002 24 24 24zM312 104
c13.2002 0 24 -10.7998 24 -24s-10.7998 -24 -24 -24h-128c-13.2002 0 -24 10.7998 -24 24s10.7998 24 24 24h128z" />
<glyph glyph-name="frown-open" unicode="&#xf57a;" horiz-adv-x="496"
d="M248 440c137 0 248 -111 248 -248s-111 -248 -248 -248s-248 111 -248 248s111 248 248 248zM248 -8c110.3 0 200 89.7002 200 200s-89.7002 200 -200 200s-200 -89.7002 -200 -200s89.7002 -200 200 -200zM200 240c0 -17.7002 -14.2998 -32 -32 -32s-32 14.2998 -32 32
s14.2998 32 32 32s32 -14.2998 32 -32zM328 272c17.7002 0 32 -14.2998 32 -32s-14.2998 -32 -32 -32s-32 14.2998 -32 32s14.2998 32 32 32zM248 160c35.5996 0 88.7998 -21.2998 95.7998 -61.2002c2 -11.7998 -9.09961 -21.5996 -20.5 -18.0996
c-31.2002 9.59961 -59.3994 15.2998 -75.2998 15.2998s-44.0996 -5.7002 -75.2998 -15.2998c-11.5 -3.40039 -22.5 6.2998 -20.5 18.0996c7 39.9004 60.2002 61.2002 95.7998 61.2002z" />
<glyph glyph-name="grimace" unicode="&#xf57f;" horiz-adv-x="496"
d="M248 440c137 0 248 -111 248 -248s-111 -248 -248 -248s-248 111 -248 248s111 248 248 248zM248 -8c110.3 0 200 89.7002 200 200s-89.7002 200 -200 200s-200 -89.7002 -200 -200s89.7002 -200 200 -200zM168 208c-17.7002 0 -32 14.2998 -32 32s14.2998 32 32 32
s32 -14.2998 32 -32s-14.2998 -32 -32 -32zM328 208c-17.7002 0 -32 14.2998 -32 32s14.2998 32 32 32s32 -14.2998 32 -32s-14.2998 -32 -32 -32zM344 192c26.5 0 48 -21.5 48 -48v-32c0 -26.5 -21.5 -48 -48 -48h-192c-26.5 0 -48 21.5 -48 48v32c0 26.5 21.5 48 48 48
h192zM176 96v24h-40v-8c0 -8.7998 7.2002 -16 16 -16h24zM176 136v24h-24c-8.7998 0 -16 -7.2002 -16 -16v-8h40zM240 96v24h-48v-24h48zM240 136v24h-48v-24h48zM304 96v24h-48v-24h48zM304 136v24h-48v-24h48zM360 112v8h-40v-24h24c8.7998 0 16 7.2002 16 16zM360 136v8
c0 8.7998 -7.2002 16 -16 16h-24v-24h40z" />
<glyph glyph-name="grin" unicode="&#xf580;" horiz-adv-x="496"
d="M248 440c137 0 248 -111 248 -248s-111 -248 -248 -248s-248 111 -248 248s111 248 248 248zM248 -8c110.3 0 200 89.7002 200 200s-89.7002 200 -200 200s-200 -89.7002 -200 -200s89.7002 -200 200 -200zM353.6 143.4c10 3.09961 19.3008 -5.5 17.7002 -15.3008
c-8 -47.0996 -71.2998 -80 -123.3 -80s-115.4 32.9004 -123.3 80c-1.7002 9.90039 7.7998 18.4004 17.7002 15.3008c26 -8.30078 64.3994 -13.1006 105.6 -13.1006s79.7002 4.7998 105.6 13.1006zM168 208c-17.7002 0 -32 14.2998 -32 32s14.2998 32 32 32
s32 -14.2998 32 -32s-14.2998 -32 -32 -32zM328 208c-17.7002 0 -32 14.2998 -32 32s14.2998 32 32 32s32 -14.2998 32 -32s-14.2998 -32 -32 -32z" />
<glyph glyph-name="grin-alt" unicode="&#xf581;" horiz-adv-x="496"
d="M200.3 200c-7.5 -11.4004 -24.5996 -12 -32.7002 0c-12.3994 18.7002 -15.1992 37.2998 -15.6992 56c0.599609 18.7002 3.2998 37.2998 15.6992 56c7.60059 11.4004 24.7002 12 32.7002 0c12.4004 -18.7002 15.2002 -37.2998 15.7002 -56
c-0.599609 -18.7002 -3.2998 -37.2998 -15.7002 -56zM328.3 200c-7.5 -11.4004 -24.5996 -12 -32.7002 0c-12.3994 18.7002 -15.1992 37.2998 -15.6992 56c0.599609 18.7002 3.2998 37.2998 15.6992 56c7.60059 11.4004 24.7002 12 32.7002 0
c12.4004 -18.7002 15.2002 -37.2998 15.7002 -56c-0.599609 -18.7002 -3.2998 -37.2998 -15.7002 -56zM248 440c137 0 248 -111 248 -248s-111 -248 -248 -248s-248 111 -248 248s111 248 248 248zM248 -8c110.3 0 200 89.7002 200 200s-89.7002 200 -200 200
s-200 -89.7002 -200 -200s89.7002 -200 200 -200zM353.6 143.4c10 3.09961 19.3008 -5.5 17.7002 -15.3008c-8 -47.0996 -71.2998 -80 -123.3 -80s-115.4 32.8008 -123.3 80c-1.7002 10 7.7998 18.4004 17.7002 15.3008c26 -8.30078 64.3994 -13.1006 105.6 -13.1006
s79.7002 4.7998 105.6 13.1006z" />
<glyph glyph-name="grin-beam" unicode="&#xf582;" horiz-adv-x="496"
d="M248 440c137 0 248 -111 248 -248s-111 -248 -248 -248s-248 111 -248 248s111 248 248 248zM248 -8c110.3 0 200 89.7002 200 200s-89.7002 200 -200 200s-200 -89.7002 -200 -200s89.7002 -200 200 -200zM353.6 143.4c10 3.09961 19.3008 -5.5 17.7002 -15.3008
c-8 -47.0996 -71.2998 -80 -123.3 -80s-115.4 32.9004 -123.3 80c-1.7002 10 7.89941 18.4004 17.7002 15.3008c26 -8.30078 64.3994 -13.1006 105.6 -13.1006s79.7002 4.7998 105.6 13.1006zM117.7 216.3c-3.60059 1.10059 -6 4.60059 -5.7002 8.2998
c3.2998 42.1006 32.2002 71.4004 56 71.4004s52.7002 -29.2998 56 -71.4004c0.299805 -3.7998 -2.09961 -7.19922 -5.7002 -8.2998c-3.09961 -1 -7.2002 0 -9.2998 3.7002l-9.5 17c-7.7002 13.7002 -19.2002 21.5996 -31.5 21.5996s-23.7998 -7.89941 -31.5 -21.5996
l-9.5 -17c-1.90039 -3.2002 -5.7998 -4.7998 -9.2998 -3.7002zM277.7 216.3c-3.60059 1.10059 -6 4.60059 -5.7002 8.2998c3.2998 42.1006 32.2002 71.4004 56 71.4004s52.7002 -29.2998 56 -71.4004c0.299805 -3.7998 -2.09961 -7.19922 -5.7002 -8.2998
c-3.09961 -1 -7.2002 0 -9.2998 3.7002l-9.5 17c-7.7002 13.7002 -19.2002 21.5996 -31.5 21.5996s-23.7998 -7.89941 -31.5 -21.5996l-9.5 -17c-1.90039 -3.2002 -5.7998 -4.7998 -9.2998 -3.7002z" />
<glyph glyph-name="grin-beam-sweat" unicode="&#xf583;" horiz-adv-x="496"
d="M440 288c-29.5 0 -53.2998 26.2998 -53.2998 58.7002c0 25 31.7002 75.5 46.2002 97.2998c3.5 5.2998 10.5996 5.2998 14.1992 0c14.5 -21.7998 46.2002 -72.2998 46.2002 -97.2998c0 -32.4004 -23.7998 -58.7002 -53.2998 -58.7002zM248 48
c-51.9004 0 -115.3 32.9004 -123.3 80c-1.7002 10 7.89941 18.4004 17.7002 15.2998c26 -8.2998 64.3994 -13.0996 105.6 -13.0996s79.7002 4.7998 105.6 13.0996c10 3.2002 19.4004 -5.39941 17.7002 -15.2998c-8 -47.0996 -71.3994 -80 -123.3 -80zM378.3 216.3
c-3.09961 -0.899414 -7.2002 0.100586 -9.2998 3.7002l-9.5 17c-7.7002 13.7002 -19.2002 21.5996 -31.5 21.5996s-23.7998 -7.89941 -31.5 -21.5996l-9.5 -17c-1.90039 -3.2002 -5.7998 -4.7998 -9.2998 -3.7002c-3.60059 1.10059 -6 4.60059 -5.7002 8.2998
c3.2998 42.1006 32.2002 71.4004 56 71.4004s52.7002 -29.2998 56 -71.4004c0.299805 -3.7998 -2.09961 -7.19922 -5.7002 -8.2998zM483.6 269.2c8 -24.2998 12.4004 -50.2002 12.4004 -77.2002c0 -137 -111 -248 -248 -248s-248 111 -248 248s111 248 248 248
c45.7002 0 88.4004 -12.5996 125.2 -34.2002c-10.9004 -21.5996 -15.5 -36.2002 -17.2002 -45.7002c-31.2002 20.1006 -68.2002 31.9004 -108 31.9004c-110.3 0 -200 -89.7002 -200 -200s89.7002 -200 200 -200s200 89.7002 200 200
c0 22.5 -3.90039 44.0996 -10.7998 64.2998c0.399414 0 21.7998 -2.7998 46.3994 12.9004zM168 258.6c-12.2998 0 -23.7998 -7.7998 -31.5 -21.5996l-9.5 -17c-1.90039 -3.2002 -5.7998 -4.7998 -9.2998 -3.7002c-3.60059 1.10059 -6 4.60059 -5.7002 8.2998
c3.2998 42.1006 32.2002 71.4004 56 71.4004s52.7002 -29.2998 56 -71.4004c0.299805 -3.7998 -2.09961 -7.19922 -5.7002 -8.2998c-3.09961 -1 -7.2002 0 -9.2998 3.7002l-9.5 17c-7.7002 13.7002 -19.2002 21.5996 -31.5 21.5996z" />
<glyph glyph-name="grin-hearts" unicode="&#xf584;" horiz-adv-x="496"
d="M353.6 143.4c10 3.09961 19.3008 -5.5 17.7002 -15.3008c-8 -47.0996 -71.2998 -80 -123.3 -80s-115.4 32.8008 -123.3 80c-1.7002 10 7.89941 18.4004 17.7002 15.3008c26 -8.30078 64.3994 -13.1006 105.6 -13.1006s79.7002 4.7998 105.6 13.1006zM200.8 192.3
l-70.2002 18.1006c-20.3994 5.2998 -31.8994 27 -24.1992 47.1992c6.69922 17.7002 26.6992 26.7002 44.8994 22l7.10059 -1.89941l2 7.09961c5.09961 18.1006 22.8994 30.9004 41.5 27.9004c21.3994 -3.40039 34.3994 -24.2002 28.7998 -44.5l-19.4004 -69.9004
c-1.2998 -4.5 -6 -7.2002 -10.5 -6zM389.6 257.6c7.7002 -20.1992 -3.7998 -41.7998 -24.1992 -47.0996l-70.2002 -18.2002c-4.60059 -1.2002 -9.2998 1.5 -10.5 6l-19.4004 69.9004c-5.59961 20.2998 7.40039 41.0996 28.7998 44.5c18.7002 3 36.5 -9.7998 41.5 -27.9004
l2 -7.09961l7.10059 1.89941c18.2002 4.7002 38.2002 -4.39941 44.8994 -22zM248 440c137 0 248 -111 248 -248s-111 -248 -248 -248s-248 111 -248 248s111 248 248 248zM248 -8c110.3 0 200 89.7002 200 200s-89.7002 200 -200 200s-200 -89.7002 -200 -200
s89.7002 -200 200 -200z" />
<glyph glyph-name="grin-squint" unicode="&#xf585;" horiz-adv-x="496"
d="M248 440c137 0 248 -111 248 -248s-111 -248 -248 -248s-248 111 -248 248s111 248 248 248zM248 -8c110.3 0 200 89.7002 200 200s-89.7002 200 -200 200s-200 -89.7002 -200 -200s89.7002 -200 200 -200zM353.6 143.4c10 3.09961 19.3008 -5.5 17.7002 -15.3008
c-8 -47.0996 -71.2998 -80 -123.3 -80s-115.4 32.9004 -123.3 80c-1.7002 9.90039 7.7998 18.4004 17.7002 15.3008c26 -8.30078 64.3994 -13.1006 105.6 -13.1006s79.7002 4.7998 105.6 13.1006zM118.9 184.2c-3.80078 4.39941 -3.90039 11 -0.100586 15.5l33.6006 40.2998
l-33.6006 40.2998c-3.7002 4.5 -3.7002 11 0.100586 15.5c3.89941 4.40039 10.1992 5.5 15.2998 2.5l80 -48c3.59961 -2.2002 5.7998 -6.09961 5.7998 -10.2998s-2.2002 -8.09961 -5.7998 -10.2998l-80 -48c-5.40039 -3.2002 -11.7002 -1.7002 -15.2998 2.5zM361.8 181.7
l-80 48c-3.59961 2.2002 -5.7998 6.09961 -5.7998 10.2998s2.2002 8.09961 5.7998 10.2998l80 48c5.10059 2.90039 11.5 1.90039 15.2998 -2.5c3.80078 -4.5 3.90039 -11 0.100586 -15.5l-33.6006 -40.2998l33.6006 -40.2998c3.7002 -4.5 3.7002 -11 -0.100586 -15.5
c-3.59961 -4.2002 -9.89941 -5.7002 -15.2998 -2.5z" />
<glyph glyph-name="grin-squint-tears" unicode="&#xf586;"
d="M117.1 63.9004c6.30078 0.899414 11.7002 -4.5 10.9004 -10.9004c-3.7002 -25.7998 -13.7002 -84 -30.5996 -100.9c-22 -21.8994 -57.9004 -21.5 -80.3008 0.900391c-22.3994 22.4004 -22.7998 58.4004 -0.899414 80.2998
c16.8994 16.9004 75.0996 26.9004 100.899 30.6006zM75.9004 105.6c-19.6006 -3.89941 -35.1006 -8.09961 -47.3008 -12.1992c-39.2998 90.5996 -22.0996 199.899 52 274c48.5 48.3994 111.9 72.5996 175.4 72.5996c38.9004 0 77.7998 -9.2002 113.2 -27.4004
c-4 -12.1992 -8.2002 -28 -12 -48.2998c-30.4004 17.9004 -65 27.7002 -101.2 27.7002c-53.4004 0 -103.6 -20.7998 -141.4 -58.5996c-61.5996 -61.5 -74.2998 -153.4 -38.6992 -227.801zM428.2 293.2c20.2998 3.89941 36.2002 8 48.5 12
c47.8994 -93.2002 32.8994 -210.5 -45.2002 -288.601c-48.5 -48.3994 -111.9 -72.5996 -175.4 -72.5996c-33.6992 0 -67.2998 7 -98.6992 20.5996c4.19922 12.2002 8.2998 27.7002 12.1992 47.2002c26.6006 -12.7998 55.9004 -19.7998 86.4004 -19.7998
c53.4004 0 103.6 20.7998 141.4 58.5996c65.6992 65.7002 75.7998 166 30.7998 242.601zM394.9 320.1c-6.30078 -0.899414 -11.7002 4.5 -10.9004 10.9004c3.7002 25.7998 13.7002 84 30.5996 100.9c22 21.8994 57.9004 21.5 80.3008 -0.900391
c22.3994 -22.4004 22.7998 -58.4004 0.899414 -80.2998c-16.8994 -16.9004 -75.0996 -26.9004 -100.899 -30.6006zM207.9 211.8c3 -3 4.19922 -7.2998 3.19922 -11.5l-22.5996 -90.5c-1.40039 -5.39941 -6.2002 -9.09961 -11.7002 -9.09961h-0.899414
c-5.80078 0.5 -10.5 5.09961 -11 10.8994l-4.80078 52.3008l-52.2998 4.7998c-5.7998 0.5 -10.3994 5.2002 -10.8994 11c-0.400391 5.89941 3.39941 11.2002 9.09961 12.5996l90.5 22.7002c4.2002 1 8.40039 -0.200195 11.4004 -3.2002zM247.6 236.9
c-0.0996094 0 -6.39941 -1.80078 -11.3994 3.19922c-3 3 -4.2002 7.30078 -3.2002 11.4004l22.5996 90.5c1.40039 5.7002 7 9.2002 12.6006 9.09961c5.7998 -0.5 10.5 -5.09961 11 -10.8994l4.7998 -52.2998l52.2998 -4.80078c5.7998 -0.5 10.4004 -5.19922 10.9004 -11
c0.399414 -5.89941 -3.40039 -11.1992 -9.10059 -12.5996zM299.6 148.4c29.1006 29.0996 53 59.5996 65.3008 83.7998c4.89941 9.2998 17.5996 9.89941 23.3994 1.7002c27.7002 -38.9004 6.10059 -106.9 -30.5996 -143.7s-104.8 -58.2998 -143.7 -30.6006
c-8.2998 5.90039 -7.5 18.6006 1.7002 23.4004c24.2002 12.5 54.7998 36.2998 83.8994 65.4004z" />
<glyph glyph-name="grin-stars" unicode="&#xf587;" horiz-adv-x="496"
d="M248 440c137 0 248 -111 248 -248s-111 -248 -248 -248s-248 111 -248 248s111 248 248 248zM248 -8c110.3 0 200 89.7002 200 200s-89.7002 200 -200 200s-200 -89.7002 -200 -200s89.7002 -200 200 -200zM353.6 143.4c10 3.09961 19.3008 -5.5 17.7002 -15.3008
c-8 -47.0996 -71.2998 -80 -123.3 -80s-115.4 32.8008 -123.3 80c-1.7002 10 7.89941 18.4004 17.7002 15.3008c26 -8.30078 64.3994 -13.1006 105.6 -13.1006s79.7002 4.7998 105.6 13.1006zM125.7 200.9l6.09961 34.8994l-25.3994 24.6006
c-4.60059 4.59961 -1.90039 12.2998 4.2998 13.1992l34.8994 5l15.5 31.6006c2.90039 5.7998 11 5.7998 13.9004 0l15.5 -31.6006l34.9004 -5c6.19922 -1 8.7998 -8.69922 4.2998 -13.1992l-25.4004 -24.6006l6 -34.8994c1 -6.2002 -5.39941 -11 -11 -7.90039
l-31.2998 16.2998l-31.2998 -16.2998c-5.60059 -3.09961 -12 1.7002 -11 7.90039zM385.4 273.6c6.19922 -1 8.89941 -8.59961 4.39941 -13.1992l-25.3994 -24.6006l6 -34.8994c1 -6.2002 -5.40039 -11 -11 -7.90039l-31.3008 16.2998l-31.2998 -16.2998
c-5.59961 -3.09961 -12 1.7002 -11 7.90039l6 34.8994l-25.3994 24.6006c-4.60059 4.59961 -1.90039 12.2998 4.2998 13.1992l34.8994 5l15.5 31.6006c2.90039 5.7998 11 5.7998 13.9004 0l15.5 -31.6006z" />
<glyph glyph-name="grin-tears" unicode="&#xf588;" horiz-adv-x="640"
d="M117.1 191.9c6.30078 0.899414 11.7002 -4.5 10.9004 -10.9004c-3.7002 -25.7998 -13.7002 -84 -30.5996 -100.9c-22 -21.8994 -57.9004 -21.5 -80.3008 0.900391c-22.3994 22.4004 -22.7998 58.4004 -0.899414 80.2998c16.8994 16.9004 75.0996 26.9004 100.899 30.6006
zM623.8 161.3c21.9004 -21.8994 21.5 -57.8994 -0.799805 -80.2002c-22.4004 -22.3994 -58.4004 -22.7998 -80.2998 -0.899414c-16.9004 16.8994 -26.9004 75.0996 -30.6006 100.899c-0.899414 6.30078 4.5 11.7002 10.8008 10.8008
c25.7998 -3.7002 84 -13.7002 100.899 -30.6006zM497.2 99.5996c12.3994 -37.2998 25.0996 -43.7998 28.2998 -46.5c-44.5996 -65.7998 -120 -109.1 -205.5 -109.1s-160.9 43.2998 -205.5 109.1c3.09961 2.60059 15.7998 9.10059 28.2998 46.5
c33.4004 -63.8994 100.3 -107.6 177.2 -107.6s143.8 43.7002 177.2 107.6zM122.7 223.5c-2.40039 0.299805 -5 2.5 -49.5 -6.90039c12.3994 125.4 118.1 223.4 246.8 223.4s234.4 -98 246.8 -223.5c-44.2998 9.40039 -47.3994 7.2002 -49.5 7
c-15.2002 95.2998 -97.7998 168.5 -197.3 168.5s-182.1 -73.2002 -197.3 -168.5zM320 48c-51.9004 0 -115.3 32.9004 -123.3 80c-1.7002 10 7.89941 18.4004 17.7002 15.2998c26 -8.2998 64.3994 -13.0996 105.6 -13.0996s79.7002 4.7998 105.6 13.0996
c10 3.2002 19.4004 -5.39941 17.7002 -15.2998c-8 -47.0996 -71.3994 -80 -123.3 -80zM450.3 216.3c-3.09961 -0.899414 -7.2002 0.100586 -9.2998 3.7002l-9.5 17c-7.7002 13.7002 -19.2002 21.5996 -31.5 21.5996s-23.7998 -7.89941 -31.5 -21.5996l-9.5 -17
c-1.90039 -3.2002 -5.7998 -4.7998 -9.2998 -3.7002c-3.60059 1.10059 -6 4.60059 -5.7002 8.2998c3.2998 42.1006 32.2002 71.4004 56 71.4004s52.7002 -29.2998 56 -71.4004c0.299805 -3.7998 -2.09961 -7.19922 -5.7002 -8.2998zM240 258.6
c-12.2998 0 -23.7998 -7.7998 -31.5 -21.5996l-9.5 -17c-1.90039 -3.2002 -5.7998 -4.7998 -9.2998 -3.7002c-3.60059 1.10059 -6 4.60059 -5.7002 8.2998c3.2998 42.1006 32.2002 71.4004 56 71.4004s52.7002 -29.2998 56 -71.4004
c0.299805 -3.7998 -2.09961 -7.19922 -5.7002 -8.2998c-3.09961 -1 -7.2002 0 -9.2998 3.7002l-9.5 17c-7.7002 13.7002 -19.2002 21.5996 -31.5 21.5996z" />
<glyph glyph-name="grin-tongue" unicode="&#xf589;" horiz-adv-x="496"
d="M248 440c137 0 248 -111 248 -248s-111 -248 -248 -248s-248 111 -248 248s111 248 248 248zM312 40h0.0996094v43.7998l-17.6992 8.7998c-15.1006 7.60059 -31.5 -1.69922 -34.9004 -16.5l-2.7998 -12.0996c-2.10059 -9.2002 -15.2002 -9.2002 -17.2998 0
l-2.80078 12.0996c-3.39941 14.8008 -19.8994 24 -34.8994 16.5l-17.7002 -8.7998v-42.7998c0 -35.2002 28 -64.5 63.0996 -65c35.8008 -0.5 64.9004 28.4004 64.9004 64zM340.2 14.7002c64 33.3994 107.8 100.3 107.8 177.3c0 110.3 -89.7002 200 -200 200
s-200 -89.7002 -200 -200c0 -77 43.7998 -143.9 107.8 -177.3c-2.2002 8.09961 -3.7998 16.5 -3.7998 25.2998v43.5c-14.2002 12.4004 -24.4004 27.5 -27.2998 44.5c-1.7002 10 7.7998 18.4004 17.7002 15.2998c26 -8.2998 64.3994 -13.0996 105.6 -13.0996
s79.7002 4.7998 105.6 13.0996c10 3.2002 19.4004 -5.39941 17.7002 -15.2998c-2.89941 -17 -13.0996 -32.0996 -27.2998 -44.5v-43.5c0 -8.7998 -1.59961 -17.2002 -3.7998 -25.2998zM168 272c17.7002 0 32 -14.2998 32 -32s-14.2998 -32 -32 -32s-32 14.2998 -32 32
s14.2998 32 32 32zM328 272c17.7002 0 32 -14.2998 32 -32s-14.2998 -32 -32 -32s-32 14.2998 -32 32s14.2998 32 32 32z" />
<glyph glyph-name="grin-tongue-squint" unicode="&#xf58a;" horiz-adv-x="496"
d="M248 440c137 0 248 -111 248 -248s-111 -248 -248 -248s-248 111 -248 248s111 248 248 248zM312 40h0.0996094v43.7998l-17.6992 8.7998c-15.1006 7.60059 -31.5 -1.69922 -34.9004 -16.5l-2.7998 -12.0996c-2.10059 -9.2002 -15.2002 -9.2002 -17.2998 0
l-2.80078 12.0996c-3.39941 14.8008 -19.8994 24 -34.8994 16.5l-17.7002 -8.7998v-42.7998c0 -35.2002 28 -64.5 63.0996 -65c35.8008 -0.5 64.9004 28.4004 64.9004 64zM340.2 14.7002c64 33.3994 107.8 100.3 107.8 177.3c0 110.3 -89.7002 200 -200 200
s-200 -89.7002 -200 -200c0 -77 43.7998 -143.9 107.8 -177.3c-2.2002 8.09961 -3.7998 16.5 -3.7998 25.2998v43.5c-14.2002 12.4004 -24.4004 27.5 -27.2998 44.5c-1.7002 10 7.7998 18.4004 17.7002 15.2998c26 -8.2998 64.3994 -13.0996 105.6 -13.0996
s79.7002 4.7998 105.6 13.0996c10 3.2002 19.4004 -5.39941 17.7002 -15.2998c-2.89941 -17 -13.0996 -32.0996 -27.2998 -44.5v-43.5c0 -8.7998 -1.59961 -17.2002 -3.7998 -25.2998zM377.1 295.8c3.80078 -4.39941 3.90039 -11 0.100586 -15.5l-33.6006 -40.2998
l33.6006 -40.2998c3.7002 -4.5 3.7002 -11 -0.100586 -15.5c-3.59961 -4.2002 -9.89941 -5.7002 -15.2998 -2.5l-80 48c-3.59961 2.2002 -5.7998 6.09961 -5.7998 10.2998s2.2002 8.09961 5.7998 10.2998l80 48c5 3 11.5 1.90039 15.2998 -2.5zM214.2 250.3
c3.59961 -2.2002 5.7998 -6.09961 5.7998 -10.2998s-2.2002 -8.09961 -5.7998 -10.2998l-80 -48c-5.40039 -3.2002 -11.7002 -1.7002 -15.2998 2.5c-3.80078 4.5 -3.90039 11 -0.100586 15.5l33.6006 40.2998l-33.6006 40.2998c-3.7002 4.5 -3.7002 11 0.100586 15.5
c3.89941 4.5 10.2998 5.5 15.2998 2.5z" />
<glyph glyph-name="grin-tongue-wink" unicode="&#xf58b;" horiz-adv-x="496"
d="M152 268c25.7002 0 55.9004 -16.9004 59.7998 -42.0996c0.799805 -5 -1.7002 -10 -6.09961 -12.4004c-5.7002 -3.09961 -11.2002 -0.599609 -13.7002 1.59961l-9.5 8.5c-14.7998 13.2002 -46.2002 13.2002 -61 0l-9.5 -8.5
c-3.7998 -3.39941 -9.2998 -4 -13.7002 -1.59961c-4.39941 2.40039 -6.89941 7.40039 -6.09961 12.4004c3.89941 25.1992 34.0996 42.0996 59.7998 42.0996zM328 320c44.2002 0 80 -35.7998 80 -80s-35.7998 -80 -80 -80s-80 35.7998 -80 80s35.7998 80 80 80zM328 192
c26.5 0 48 21.5 48 48s-21.5 48 -48 48s-48 -21.5 -48 -48s21.5 -48 48 -48zM328 264c13.2998 0 24 -10.7002 24 -24s-10.7002 -24 -24 -24s-24 10.7002 -24 24s10.7002 24 24 24zM248 440c137 0 248 -111 248 -248s-111 -248 -248 -248s-248 111 -248 248s111 248 248 248z
M312 40h0.0996094v43.7998l-17.6992 8.7998c-15.1006 7.60059 -31.5 -1.69922 -34.9004 -16.5l-2.7998 -12.0996c-2.10059 -9.2002 -15.2002 -9.2002 -17.2998 0l-2.80078 12.0996c-3.39941 14.8008 -19.8994 24 -34.8994 16.5l-17.7002 -8.7998v-42.7998
c0 -35.2002 28 -64.5 63.0996 -65c35.8008 -0.5 64.9004 28.4004 64.9004 64zM340.2 14.7002c64 33.3994 107.8 100.3 107.8 177.3c0 110.3 -89.7002 200 -200 200s-200 -89.7002 -200 -200c0 -77 43.7998 -143.9 107.8 -177.3
c-2.2002 8.09961 -3.7998 16.5 -3.7998 25.2998v43.5c-14.2002 12.4004 -24.4004 27.5 -27.2998 44.5c-1.7002 10 7.7998 18.4004 17.7002 15.2998c26 -8.2998 64.3994 -13.0996 105.6 -13.0996s79.7002 4.7998 105.6 13.0996c10 3.2002 19.4004 -5.39941 17.7002 -15.2998
c-2.89941 -17 -13.0996 -32.0996 -27.2998 -44.5v-43.5c0 -8.7998 -1.59961 -17.2002 -3.7998 -25.2998z" />
<glyph glyph-name="grin-wink" unicode="&#xf58c;" horiz-adv-x="496"
d="M328 268c25.6904 0 55.8799 -16.9199 59.8701 -42.1201c1.72949 -11.0898 -11.3506 -18.2695 -19.8301 -10.8398l-9.5498 8.47949c-14.8105 13.1904 -46.1602 13.1904 -60.9707 0l-9.5498 -8.47949c-8.33008 -7.40039 -21.5801 -0.379883 -19.8301 10.8398
c3.98047 25.2002 34.1699 42.1201 59.8604 42.1201zM168 208c-17.6699 0 -32 14.3301 -32 32s14.3301 32 32 32s32 -14.3301 32 -32s-14.3301 -32 -32 -32zM353.55 143.36c10.04 3.13965 19.3906 -5.4502 17.71 -15.3408
c-7.92969 -47.1494 -71.3193 -80.0195 -123.26 -80.0195s-115.33 32.8701 -123.26 80.0195c-1.69043 9.9707 7.76953 18.4707 17.71 15.3408c25.9297 -8.31055 64.3994 -13.0605 105.55 -13.0605s79.6201 4.75977 105.55 13.0605zM248 440c136.97 0 248 -111.03 248 -248
s-111.03 -248 -248 -248s-248 111.03 -248 248s111.03 248 248 248zM248 -8c110.28 0 200 89.7197 200 200s-89.7197 200 -200 200s-200 -89.7197 -200 -200s89.7197 -200 200 -200z" />
<glyph glyph-name="kiss" unicode="&#xf596;" horiz-adv-x="496"
d="M168 272c17.7002 0 32 -14.2998 32 -32s-14.2998 -32 -32 -32s-32 14.2998 -32 32s14.2998 32 32 32zM304 140c0 -13 -13.4004 -27.2998 -35.0996 -36.4004c21.7998 -8.69922 35.1992 -23 35.1992 -36c0 -19.1992 -28.6992 -41.5 -71.5 -44h-0.5
c-3.69922 0 -7 2.60059 -7.7998 6.2002c-0.899414 3.7998 1.10059 7.7002 4.7002 9.2002l17 7.2002c12.9004 5.5 20.7002 13.5 20.7002 21.5s-7.7998 16 -20.7998 21.5l-16.9004 7.2002c-6 2.59961 -5.7002 12.3994 0 14.7998l17 7.2002
c12.9004 5.5 20.7002 13.5 20.7002 21.5s-7.7998 16 -20.7998 21.5l-16.9004 7.19922c-3.59961 1.5 -5.59961 5.40039 -4.7002 9.2002c0.799805 3.7998 4.40039 6.60059 8.2002 6.2002c42.7002 -2.5 71.5 -24.7998 71.5 -44zM248 440c137 0 248 -111 248 -248
s-111 -248 -248 -248s-248 111 -248 248s111 248 248 248zM248 -8c110.3 0 200 89.7002 200 200s-89.7002 200 -200 200s-200 -89.7002 -200 -200s89.7002 -200 200 -200zM328 272c17.7002 0 32 -14.2998 32 -32s-14.2998 -32 -32 -32s-32 14.2998 -32 32s14.2998 32 32 32z
" />
<glyph glyph-name="kiss-beam" unicode="&#xf597;" horiz-adv-x="496"
d="M168 296c23.7998 0 52.7002 -29.2998 55.7998 -71.4004c0.299805 -3.7998 -2 -7.19922 -5.59961 -8.2998c-3.10059 -1 -7.2002 0 -9.2998 3.7002l-9.5 17c-7.7002 13.7002 -19.2002 21.5996 -31.5 21.5996c-12.3008 0 -23.8008 -7.89941 -31.5 -21.5996l-9.5 -17
c-1.80078 -3.2002 -5.80078 -4.7002 -9.30078 -3.7002c-3.59961 1.10059 -5.89941 4.60059 -5.59961 8.2998c3.2998 42.1006 32.2002 71.4004 56 71.4004zM248 440c137 0 248 -111 248 -248s-111 -248 -248 -248s-248 111 -248 248s111 248 248 248zM248 -8
c110.3 0 200 89.7002 200 200s-89.7002 200 -200 200s-200 -89.7002 -200 -200s89.7002 -200 200 -200zM304 140c0 -13 -13.4004 -27.2998 -35.0996 -36.4004c21.7998 -8.69922 35.1992 -23 35.1992 -36c0 -19.1992 -28.6992 -41.5 -71.5 -44h-0.5
c-3.69922 0 -7 2.60059 -7.7998 6.2002c-0.899414 3.7998 1.10059 7.7002 4.7002 9.2002l17 7.2002c12.9004 5.5 20.7002 13.5 20.7002 21.5s-7.7998 16 -20.7998 21.5l-16.9004 7.2002c-6 2.59961 -5.7002 12.3994 0 14.7998l17 7.2002
c12.9004 5.5 20.7002 13.5 20.7002 21.5s-7.7998 16 -20.7998 21.5l-16.9004 7.19922c-3.59961 1.5 -5.59961 5.40039 -4.7002 9.2002c0.799805 3.7998 4.40039 6.60059 8.2002 6.2002c42.7002 -2.5 71.5 -24.7998 71.5 -44zM328 296
c23.7998 0 52.7002 -29.2998 55.7998 -71.4004c0.299805 -3.7998 -2 -7.19922 -5.59961 -8.2998c-3.10059 -1 -7.2002 0 -9.2998 3.7002l-9.5 17c-7.7002 13.7002 -19.2002 21.5996 -31.5 21.5996c-12.3008 0 -23.8008 -7.89941 -31.5 -21.5996l-9.5 -17
c-1.80078 -3.2002 -5.80078 -4.7002 -9.30078 -3.7002c-3.59961 1.10059 -5.89941 4.60059 -5.59961 8.2998c3.2998 42.1006 32.2002 71.4004 56 71.4004z" />
<glyph glyph-name="kiss-wink-heart" unicode="&#xf598;" horiz-adv-x="504"
d="M304 139.5c0 -13 -13.4004 -27.2998 -35.0996 -36.4004c21.7998 -8.69922 35.1992 -23 35.1992 -36c0 -19.1992 -28.6992 -41.5 -71.5 -44h-0.5c-3.69922 0 -7 2.60059 -7.7998 6.2002c-0.899414 3.7998 1.10059 7.7002 4.7002 9.2002l17 7.2002
c12.9004 5.5 20.7002 13.5 20.7002 21.5s-7.7998 16 -20.7998 21.5l-16.9004 7.2002c-6 2.59961 -5.7002 12.3994 0 14.7998l17 7.2002c12.9004 5.5 20.7002 13.5 20.7002 21.5s-7.7998 16 -20.7998 21.5l-16.9004 7.19922c-3.59961 1.5 -5.59961 5.40039 -4.7002 9.2002
c0.799805 3.7998 4.40039 6.60059 8.2002 6.2002c42.7002 -2.5 71.5 -24.7998 71.5 -44zM374.5 223c-14.7998 13.2002 -46.2002 13.2002 -61 0l-9.5 -8.5c-2.5 -2.2998 -7.90039 -4.7002 -13.7002 -1.59961c-4.39941 2.39941 -6.89941 7.39941 -6.09961 12.3994
c3.89941 25.2002 34.2002 42.1006 59.7998 42.1006s55.7998 -16.9004 59.7998 -42.1006c0.799805 -5 -1.7002 -10 -6.09961 -12.3994c-4.40039 -2.40039 -9.90039 -1.7002 -13.7002 1.59961zM136 239.5c0 17.7002 14.2998 32 32 32s32 -14.2998 32 -32s-14.2998 -32 -32 -32
s-32 14.2998 -32 32zM501.1 45.5c9.2002 -23.9004 -4.39941 -49.4004 -28.5 -55.7002l-83 -21.5c-5.39941 -1.39941 -10.8994 1.7998 -12.3994 7.10059l-22.9004 82.5996c-6.59961 24 8.7998 48.5996 34 52.5996c22 3.5 43.1006 -11.5996 49 -33l2.2998 -8.39941
l8.40039 2.2002c21.5996 5.59961 45.0996 -5.10059 53.0996 -25.9004zM334 11.7002c17.7002 -64 10.9004 -39.5 13.4004 -46.7998c-30.5 -13.4004 -64 -20.9004 -99.4004 -20.9004c-137 0 -248 111 -248 248s111 248 248 248s248 -111 247.9 -248
c0 -31.7998 -6.2002 -62.0996 -17.1006 -90c-6 1.5 -12.2002 2.7998 -18.5996 2.90039c-5.60059 9.69922 -13.6006 17.5 -22.6006 23.8994c6.7002 19.9004 10.4004 41.1006 10.4004 63.2002c0 110.3 -89.7002 200 -200 200s-200 -89.7002 -200 -200s89.7002 -200 200 -200
c30.7998 0 59.9004 7.2002 86 19.7002z" />
<glyph glyph-name="laugh" unicode="&#xf599;" horiz-adv-x="496"
d="M248 440c137 0 248 -111 248 -248s-111 -248 -248 -248s-248 111 -248 248s111 248 248 248zM389.4 50.5996c37.7998 37.8008 58.5996 88 58.5996 141.4s-20.7998 103.6 -58.5996 141.4c-37.8008 37.7998 -88 58.5996 -141.4 58.5996s-103.6 -20.7998 -141.4 -58.5996
c-37.7998 -37.8008 -58.5996 -88 -58.5996 -141.4s20.7998 -103.6 58.5996 -141.4c37.8008 -37.7998 88 -58.5996 141.4 -58.5996s103.6 20.7998 141.4 58.5996zM328 224c-17.7002 0 -32 14.2998 -32 32s14.2998 32 32 32s32 -14.2998 32 -32s-14.2998 -32 -32 -32zM168 224
c-17.7002 0 -32 14.2998 -32 32s14.2998 32 32 32s32 -14.2998 32 -32s-14.2998 -32 -32 -32zM362.4 160c8.19922 0 14.5 -7 13.5 -15c-7.5 -59.2002 -58.9004 -105 -121.101 -105h-13.5996c-62.2002 0 -113.601 45.7998 -121.101 105c-1 8 5.30078 15 13.5 15h228.801z" />
<glyph glyph-name="laugh-beam" unicode="&#xf59a;" horiz-adv-x="496"
d="M248 440c137 0 248 -111 248 -248s-111 -248 -248 -248s-248 111 -248 248s111 248 248 248zM389.4 50.5996c37.7998 37.8008 58.5996 88 58.5996 141.4s-20.7998 103.6 -58.5996 141.4c-37.8008 37.7998 -88 58.5996 -141.4 58.5996s-103.6 -20.7998 -141.4 -58.5996
c-37.7998 -37.8008 -58.5996 -88 -58.5996 -141.4s20.7998 -103.6 58.5996 -141.4c37.8008 -37.7998 88 -58.5996 141.4 -58.5996s103.6 20.7998 141.4 58.5996zM328 296c23.7998 0 52.7002 -29.2998 55.7998 -71.4004c0.700195 -8.5 -10.7998 -11.8994 -14.8994 -4.5
l-9.5 17c-7.7002 13.7002 -19.2002 21.6006 -31.5 21.6006c-12.3008 0 -23.8008 -7.90039 -31.5 -21.6006l-9.5 -17c-4.10059 -7.39941 -15.6006 -4.09961 -14.9004 4.5c3.2998 42.1006 32.2002 71.4004 56 71.4004zM127 220.1c-4.2002 -7.39941 -15.7002 -4 -15.0996 4.5
c3.2998 42.1006 32.1992 71.4004 56 71.4004c23.7998 0 52.6992 -29.2998 56 -71.4004c0.699219 -8.5 -10.8008 -11.8994 -14.9004 -4.5l-9.5 17c-7.7002 13.7002 -19.2002 21.6006 -31.5 21.6006s-23.7998 -7.90039 -31.5 -21.6006zM362.4 160c8.19922 0 14.5 -7 13.5 -15
c-7.5 -59.2002 -58.9004 -105 -121.101 -105h-13.5996c-62.2002 0 -113.601 45.7998 -121.101 105c-1 8 5.30078 15 13.5 15h228.801z" />
<glyph glyph-name="laugh-squint" unicode="&#xf59b;" horiz-adv-x="496"
d="M248 440c137 0 248 -111 248 -248s-111 -248 -248 -248s-248 111 -248 248s111 248 248 248zM389.4 50.5996c37.7998 37.8008 58.5996 88 58.5996 141.4s-20.7998 103.6 -58.5996 141.4c-37.8008 37.7998 -88 58.5996 -141.4 58.5996s-103.6 -20.7998 -141.4 -58.5996
c-37.7998 -37.8008 -58.5996 -88 -58.5996 -141.4s20.7998 -103.6 58.5996 -141.4c37.8008 -37.7998 88 -58.5996 141.4 -58.5996s103.6 20.7998 141.4 58.5996zM343.6 252l33.6006 -40.2998c8.59961 -10.4004 -3.90039 -24.7998 -15.4004 -18l-80 48
c-7.7998 4.7002 -7.7998 15.8994 0 20.5996l80 48c11.6006 6.7998 24 -7.7002 15.4004 -18zM134.2 193.7c-11.6006 -6.7998 -24.1006 7.59961 -15.4004 18l33.6006 40.2998l-33.6006 40.2998c-8.59961 10.2998 3.7998 24.9004 15.4004 18l80 -48
c7.7998 -4.7002 7.7998 -15.8994 0 -20.5996zM362.4 160c8.19922 0 14.5 -7 13.5 -15c-7.5 -59.2002 -58.9004 -105 -121.101 -105h-13.5996c-62.2002 0 -113.601 45.7998 -121.101 105c-1 8 5.30078 15 13.5 15h228.801z" />
<glyph glyph-name="laugh-wink" unicode="&#xf59c;" horiz-adv-x="496"
d="M248 440c137 0 248 -111 248 -248s-111 -248 -248 -248s-248 111 -248 248s111 248 248 248zM389.4 50.5996c37.7998 37.8008 58.5996 88 58.5996 141.4s-20.7998 103.6 -58.5996 141.4c-37.8008 37.7998 -88 58.5996 -141.4 58.5996s-103.6 -20.7998 -141.4 -58.5996
c-37.7998 -37.8008 -58.5996 -88 -58.5996 -141.4s20.7998 -103.6 58.5996 -141.4c37.8008 -37.7998 88 -58.5996 141.4 -58.5996s103.6 20.7998 141.4 58.5996zM328 284c25.7002 0 55.9004 -16.9004 59.7002 -42.0996c1.7998 -11.1006 -11.2998 -18.2002 -19.7998 -10.8008
l-9.5 8.5c-14.8008 13.2002 -46.2002 13.2002 -61 0l-9.5 -8.5c-8.30078 -7.39941 -21.5 -0.399414 -19.8008 10.8008c4 25.1992 34.2002 42.0996 59.9004 42.0996zM168 224c-17.7002 0 -32 14.2998 -32 32s14.2998 32 32 32s32 -14.2998 32 -32s-14.2998 -32 -32 -32z
M362.4 160c8.19922 0 14.5 -7 13.5 -15c-7.5 -59.2002 -58.9004 -105 -121.101 -105h-13.5996c-62.2002 0 -113.601 45.7998 -121.101 105c-1 8 5.30078 15 13.5 15h228.801z" />
<glyph glyph-name="meh-blank" unicode="&#xf5a4;" horiz-adv-x="496"
d="M248 440c137 0 248 -111 248 -248s-111 -248 -248 -248s-248 111 -248 248s111 248 248 248zM248 -8c110.3 0 200 89.7002 200 200s-89.7002 200 -200 200s-200 -89.7002 -200 -200s89.7002 -200 200 -200zM168 272c17.7002 0 32 -14.2998 32 -32s-14.2998 -32 -32 -32
s-32 14.2998 -32 32s14.2998 32 32 32zM328 272c17.7002 0 32 -14.2998 32 -32s-14.2998 -32 -32 -32s-32 14.2998 -32 32s14.2998 32 32 32z" />
<glyph glyph-name="meh-rolling-eyes" unicode="&#xf5a5;" horiz-adv-x="496"
d="M248 440c137 0 248 -111 248 -248s-111 -248 -248 -248s-248 111 -248 248s111 248 248 248zM248 -8c110.3 0 200 89.7002 200 200s-89.7002 200 -200 200s-200 -89.7002 -200 -200s89.7002 -200 200 -200zM336 296c39.7998 0 72 -32.2002 72 -72s-32.2002 -72 -72 -72
s-72 32.2002 -72 72s32.2002 72 72 72zM336 184c22.0996 0 40 17.9004 40 40c0 13.5996 -7.2998 25.0996 -17.7002 32.2998c1 -2.59961 1.7002 -5.39941 1.7002 -8.2998c0 -13.2998 -10.7002 -24 -24 -24s-24 10.7002 -24 24c0 3 0.700195 5.7002 1.7002 8.2998
c-10.4004 -7.2002 -17.7002 -18.7002 -17.7002 -32.2998c0 -22.0996 17.9004 -40 40 -40zM232 224c0 -39.7998 -32.2002 -72 -72 -72s-72 32.2002 -72 72s32.2002 72 72 72s72 -32.2002 72 -72zM120 224c0 -22.0996 17.9004 -40 40 -40s40 17.9004 40 40
c0 13.5996 -7.2998 25.0996 -17.7002 32.2998c1 -2.59961 1.7002 -5.39941 1.7002 -8.2998c0 -13.2998 -10.7002 -24 -24 -24s-24 10.7002 -24 24c0 3 0.700195 5.7002 1.7002 8.2998c-10.4004 -7.2002 -17.7002 -18.7002 -17.7002 -32.2998zM312 96
c13.2002 0 24 -10.7998 24 -24s-10.7998 -24 -24 -24h-128c-13.2002 0 -24 10.7998 -24 24s10.7998 24 24 24h128z" />
<glyph glyph-name="sad-cry" unicode="&#xf5b3;" horiz-adv-x="496"
d="M248 440c137 0 248 -111 248 -248s-111 -248 -248 -248s-248 111 -248 248s111 248 248 248zM392 53.5996c34.5996 35.9004 56 84.7002 56 138.4c0 110.3 -89.7002 200 -200 200s-200 -89.7002 -200 -200c0 -53.7002 21.4004 -102.4 56 -138.4v114.4
c0 13.2002 10.7998 24 24 24s24 -10.7998 24 -24v-151.4c28.5 -15.5996 61.2002 -24.5996 96 -24.5996s67.5 9 96 24.5996v151.4c0 13.2002 10.7998 24 24 24s24 -10.7998 24 -24v-114.4zM205.8 213.5c-5.7998 -3.2002 -11.2002 -0.700195 -13.7002 1.59961l-9.5 8.5
c-14.7998 13.2002 -46.1992 13.2002 -61 0l-9.5 -8.5c-3.7998 -3.39941 -9.2998 -4 -13.6992 -1.59961c-4.40039 2.40039 -6.90039 7.40039 -6.10059 12.4004c3.90039 25.1992 34.2002 42.0996 59.7998 42.0996c25.6006 0 55.8008 -16.9004 59.8008 -42.0996
c0.799805 -5 -1.7002 -10 -6.10059 -12.4004zM344 268c25.7002 0 55.9004 -16.9004 59.7998 -42.0996c0.799805 -5 -1.7002 -10 -6.09961 -12.4004c-5.7002 -3.09961 -11.2002 -0.599609 -13.7002 1.59961l-9.5 8.5c-14.7998 13.2002 -46.2002 13.2002 -61 0l-9.5 -8.5
c-3.7998 -3.39941 -9.2002 -4 -13.7002 -1.59961c-4.39941 2.40039 -6.89941 7.40039 -6.09961 12.4004c3.89941 25.1992 34.0996 42.0996 59.7998 42.0996zM248 176c30.9004 0 56 -28.7002 56 -64s-25.0996 -64 -56 -64s-56 28.7002 -56 64s25.0996 64 56 64z" />
<glyph glyph-name="sad-tear" unicode="&#xf5b4;" horiz-adv-x="496"
d="M248 440c137 0 248 -111 248 -248s-111 -248 -248 -248s-248 111 -248 248s111 248 248 248zM248 -8c110.3 0 200 89.7002 200 200s-89.7002 200 -200 200s-200 -89.7002 -200 -200s89.7002 -200 200 -200zM256 144c38.0996 0 74 -16.7998 98.5 -46.0996
c8.5 -10.2002 7.09961 -25.3008 -3.09961 -33.8008c-10.6006 -8.7998 -25.7002 -6.69922 -33.8008 3.10059c-15.2998 18.2998 -37.7998 28.7998 -61.5996 28.7998c-13.2002 0 -24 10.7998 -24 24s10.7998 24 24 24zM168 208c-17.7002 0 -32 14.2998 -32 32s14.2998 32 32 32
s32 -14.2998 32 -32s-14.2998 -32 -32 -32zM328 272c17.7002 0 32 -14.2998 32 -32s-14.2998 -32 -32 -32s-32 14.2998 -32 32s14.2998 32 32 32zM162.4 173.2c2.7998 3.7002 8.39941 3.7002 11.1992 0c11.4004 -15.2998 36.4004 -50.6006 36.4004 -68.1006
c0 -22.6992 -18.7998 -41.0996 -42 -41.0996s-42 18.4004 -42 41.0996c0 17.5 25 52.8008 36.4004 68.1006z" />
<glyph glyph-name="smile-beam" unicode="&#xf5b8;" horiz-adv-x="496"
d="M248 440c137 0 248 -111 248 -248s-111 -248 -248 -248s-248 111 -248 248s111 248 248 248zM248 -8c110.3 0 200 89.7002 200 200s-89.7002 200 -200 200s-200 -89.7002 -200 -200s89.7002 -200 200 -200zM332 135.4c8.5 10.1992 23.5996 11.5 33.7998 3.09961
c10.2002 -8.5 11.6006 -23.5996 3.10059 -33.7998c-30 -36 -74.1006 -56.6006 -120.9 -56.6006s-90.9004 20.6006 -120.9 56.6006c-8.39941 10.2002 -7.09961 25.2998 3.10059 33.7998c10.2002 8.40039 25.2998 7.09961 33.7998 -3.09961
c20.7998 -25.1006 51.5 -39.4004 84 -39.4004s63.2002 14.4004 84 39.4004zM136.5 237l-9.5 -17c-1.90039 -3.2002 -5.90039 -4.7998 -9.2998 -3.7002c-3.60059 1.10059 -6 4.60059 -5.7002 8.2998c3.2998 42.1006 32.2002 71.4004 56 71.4004s52.7002 -29.2998 56 -71.4004
c0.299805 -3.7998 -2.09961 -7.19922 -5.7002 -8.2998c-3.09961 -1 -7.2002 0 -9.2998 3.7002l-9.5 17c-7.7002 13.7002 -19.2002 21.5996 -31.5 21.5996s-23.7998 -7.89941 -31.5 -21.5996zM328 296c23.7998 0 52.7002 -29.2998 56 -71.4004
c0.299805 -3.7998 -2.09961 -7.19922 -5.7002 -8.2998c-3.09961 -1 -7.2002 0 -9.2998 3.7002l-9.5 17c-7.7002 13.7002 -19.2002 21.5996 -31.5 21.5996s-23.7998 -7.89941 -31.5 -21.5996l-9.5 -17c-1.90039 -3.2002 -5.7998 -4.7998 -9.2998 -3.7002
c-3.60059 1.10059 -6 4.60059 -5.7002 8.2998c3.2998 42.1006 32.2002 71.4004 56 71.4004z" />
<glyph glyph-name="surprise" unicode="&#xf5c2;" horiz-adv-x="496"
d="M248 440c137 0 248 -111 248 -248s-111 -248 -248 -248s-248 111 -248 248s111 248 248 248zM248 -8c110.3 0 200 89.7002 200 200s-89.7002 200 -200 200s-200 -89.7002 -200 -200s89.7002 -200 200 -200zM248 168c35.2998 0 64 -28.7002 64 -64s-28.7002 -64 -64 -64
s-64 28.7002 -64 64s28.7002 64 64 64zM200 240c0 -17.7002 -14.2998 -32 -32 -32s-32 14.2998 -32 32s14.2998 32 32 32s32 -14.2998 32 -32zM328 272c17.7002 0 32 -14.2998 32 -32s-14.2998 -32 -32 -32s-32 14.2998 -32 32s14.2998 32 32 32z" />
<glyph glyph-name="tired" unicode="&#xf5c8;" horiz-adv-x="496"
d="M248 440c137 0 248 -111 248 -248s-111 -248 -248 -248s-248 111 -248 248s111 248 248 248zM248 -8c110.3 0 200 89.7002 200 200s-89.7002 200 -200 200s-200 -89.7002 -200 -200s89.7002 -200 200 -200zM377.1 295.8c3.80078 -4.39941 3.90039 -11 0.100586 -15.5
l-33.6006 -40.2998l33.6006 -40.2998c3.7998 -4.5 3.7002 -11 -0.100586 -15.5c-3.5 -4.10059 -9.89941 -5.7002 -15.2998 -2.5l-80 48c-3.59961 2.2002 -5.7998 6.09961 -5.7998 10.2998s2.2002 8.09961 5.7998 10.2998l80 48c5 2.90039 11.5 1.90039 15.2998 -2.5z
M220 240c0 -4.2002 -2.2002 -8.09961 -5.7998 -10.2998l-80 -48c-5.40039 -3.2002 -11.7998 -1.60059 -15.2998 2.5c-3.80078 4.5 -3.90039 11 -0.100586 15.5l33.6006 40.2998l-33.6006 40.2998c-3.7998 4.5 -3.7002 11 0.100586 15.5
c3.7998 4.40039 10.2998 5.5 15.2998 2.5l80 -48c3.59961 -2.2002 5.7998 -6.09961 5.7998 -10.2998zM248 176c45.4004 0 100.9 -38.2998 107.8 -93.2998c1.5 -11.9004 -7 -21.6006 -15.5 -17.9004c-22.7002 9.7002 -56.2998 15.2002 -92.2998 15.2002
s-69.5996 -5.5 -92.2998 -15.2002c-8.60059 -3.7002 -17 6.10059 -15.5 17.9004c6.89941 55 62.3994 93.2998 107.8 93.2998z" />
</font>
</defs></svg>

After

Width:  |  Height:  |  Size: 141 KiB

File diff suppressed because it is too large Load Diff

After

Width:  |  Height:  |  Size: 876 KiB

View File

@ -0,0 +1,90 @@
<?php
use Twig\Environment;
use Twig\Error\LoaderError;
use Twig\Error\RuntimeError;
use Twig\Extension\SandboxExtension;
use Twig\Markup;
use Twig\Sandbox\SecurityError;
use Twig\Sandbox\SecurityNotAllowedTagError;
use Twig\Sandbox\SecurityNotAllowedFilterError;
use Twig\Sandbox\SecurityNotAllowedFunctionError;
use Twig\Source;
use Twig\Template;
/* components/search.twig */
class __TwigTemplate_b5d12885f2834de4749cfca7f5869b07db4e7da52ff7faf794d50a1175304049 extends Template
{
private $source;
private $macros = [];
public function __construct(Environment $env)
{
parent::__construct($env);
$this->source = $this->getSourceContext();
$this->parent = false;
$this->blocks = [
];
}
protected function doDisplay(array $context, array $blocks = [])
{
$macros = $this->macros;
// line 1
echo "<form id=\"search\" action=\".\" method=\"get\" class=\"group relative block bg-blue-700 rounded-full shadow-inner\">
<input type=\"text\" value=\"";
// line 2
echo twig_escape_filter($this->env, ($context["search"] ?? null), "html", null, true);
echo "\" name=\"search\" placeholder=\"";
echo twig_escape_filter($this->env, call_user_func_array($this->env->getFunction('translate')->getCallable(), ["search"]), "html", null, true);
echo "...\"
class=\"bg-transparent placeholder-gray-900 text-white w-full px-10 py-2\"
ref=\"searchInput\" v-on:focus=\"\$event.target.select()\"
>
<div class=\"flex items-center absolute left-0 inset-y-0 ml-2 pointer-events-none\">
<div class=\"flex justify-center items-center text-blue-900 w-6 h-6\">
<i class=\"fas fa-search fa-fw\"></i>
</div>
</div>
";
// line 14
if (($context["search"] ?? null)) {
// line 15
echo " <div class=\"flex items-center absolute right-0 inset-y-0 mr-2\">
<a href=\".\" class=\"flex justify-center items-center rounded-full text-blue-900 w-6 h-6 hover:bg-red-700 hover:text-white hover:shadow\">
<i class=\"fas fa-times\"></i>
</a>
</div>
";
}
// line 21
echo "</form>
";
}
public function getTemplateName()
{
return "components/search.twig";
}
public function isTraitable()
{
return false;
}
public function getDebugInfo()
{
return array ( 67 => 21, 59 => 15, 57 => 14, 40 => 2, 37 => 1,);
}
public function getSourceContext()
{
return new Source("", "components/search.twig", "/var/www/www.diogo.site/public/projects/GNU-social/soc/2020/daily_report/archive/May/app/views/components/search.twig");
}
}

View File

@ -0,0 +1,128 @@
<?php
use Twig\Environment;
use Twig\Error\LoaderError;
use Twig\Error\RuntimeError;
use Twig\Extension\SandboxExtension;
use Twig\Markup;
use Twig\Sandbox\SecurityError;
use Twig\Sandbox\SecurityNotAllowedTagError;
use Twig\Sandbox\SecurityNotAllowedFilterError;
use Twig\Sandbox\SecurityNotAllowedFunctionError;
use Twig\Source;
use Twig\Template;
/* components/header.twig */
class __TwigTemplate_8b1919af384e93ccd7ea74934d90f39e3d81606d7f19ff7721e9910a118f203a extends Template
{
private $source;
private $macros = [];
public function __construct(Environment $env)
{
parent::__construct($env);
$this->source = $this->getSourceContext();
$this->parent = false;
$this->blocks = [
];
}
protected function doDisplay(array $context, array $blocks = [])
{
$macros = $this->macros;
// line 1
echo "<header id=\"header\" class=\"bg-blue-600 shadow sticky top-0\">
<div class=\"container flex justify-between flex-wrap items-center mx-auto p-4 md:flex-row\">
<div class=\"flex-1 font-mono text-white text-sm tracking-tight overflow-x-auto whitespace-no-wrap py-1\">
<a href=\".\" class=\"inline-block hover:underline\">
";
// line 5
echo twig_escape_filter($this->env, call_user_func_array($this->env->getFunction('translate')->getCallable(), ["home"]), "html", null, true);
echo "
</a>
";
// line 8
if ( !(null === ($context["path"] ?? null))) {
// line 9
echo " ";
$context['_parent'] = $context;
$context['_seq'] = twig_ensure_traversable(call_user_func_array($this->env->getFunction('breadcrumbs')->getCallable(), [$context["path"]]));
foreach ($context['_seq'] as $context["name"] => $context["path"]) {
// line 10
echo " / <a href=\"";
echo twig_escape_filter($this->env, $context["path"], "html", null, true);
echo "\" class=\"inline-block hover:underline\">";
echo twig_escape_filter($this->env, $context["name"], "html", null, true);
echo "</a>
";
}
$_parent = $context['_parent'];
unset($context['_seq'], $context['_iterated'], $context['name'], $context['path'], $context['_parent'], $context['loop']);
$context = array_intersect_key($context, $_parent) + $_parent;
// line 12
echo " ";
}
// line 13
echo " </div>
<button class=\"inline-block text-white mx-2 hover:text-gray-400 md:hidden\" v-on:click=\"toggleMenuVisibility\">
<div v-if=\"menuOpen\">
<i class=\"fas fa-times fa-lg fa-fw\"></i>
</div>
<div v-else>
<i class=\"fas fa-ellipsis-v fa-lg fa-fw\"></i>
</div>
</button>
<div class=\"flex items-center flex-grow flex-shrink-0 w-full pt-4 space-x-2 md:flex md:max-w-xs md:p-0\" v-bind:class=\"menuStyles\">
";
// line 25
if (((($context["path"] ?? null) && !twig_test_empty(($context["files"] ?? null))) && call_user_func_array($this->env->getFunction('config')->getCallable(), ["zip_downloads"]))) {
// line 26
echo " <a href=\"";
echo twig_escape_filter($this->env, call_user_func_array($this->env->getFunction('zip_url')->getCallable(), [($context["path"] ?? null)]), "html", null, true);
echo "\" title=\"";
echo twig_escape_filter($this->env, call_user_func_array($this->env->getFunction('translate')->getCallable(), ["download"]), "html", null, true);
echo "\" class=\"inline-block text-white p-1 hover:text-gray-400\">
<i class=\"fas fa-download fa-lg\"></i>
</a>
";
}
// line 30
echo "
<div class=\"flex-1\">
";
// line 32
$this->loadTemplate("components/search.twig", "components/header.twig", 32)->display($context);
// line 33
echo " </div>
</div>
</div>
</header>
";
}
public function getTemplateName()
{
return "components/header.twig";
}
public function isTraitable()
{
return false;
}
public function getDebugInfo()
{
return array ( 102 => 33, 100 => 32, 96 => 30, 86 => 26, 84 => 25, 70 => 13, 67 => 12, 56 => 10, 51 => 9, 49 => 8, 43 => 5, 37 => 1,);
}
public function getSourceContext()
{
return new Source("", "components/header.twig", "/var/www/www.diogo.site/public/projects/GNU-social/soc/2020/daily_report/archive/May/app/views/components/header.twig");
}
}

View File

@ -0,0 +1,90 @@
<?php
use Twig\Environment;
use Twig\Error\LoaderError;
use Twig\Error\RuntimeError;
use Twig\Extension\SandboxExtension;
use Twig\Markup;
use Twig\Sandbox\SecurityError;
use Twig\Sandbox\SecurityNotAllowedTagError;
use Twig\Sandbox\SecurityNotAllowedFilterError;
use Twig\Sandbox\SecurityNotAllowedFunctionError;
use Twig\Source;
use Twig\Template;
/* components/readme.twig */
class __TwigTemplate_2c6272712eb4d01488108a02c6411098b49c629fb266cbfaec28000e75e756c7 extends Template
{
private $source;
private $macros = [];
public function __construct(Environment $env)
{
parent::__construct($env);
$this->source = $this->getSourceContext();
$this->parent = false;
$this->blocks = [
];
}
protected function doDisplay(array $context, array $blocks = [])
{
$macros = $this->macros;
// line 1
echo "<div id=\"readme\" class=\"my-4 ";
echo ((call_user_func_array($this->env->getFunction('config')->getCallable(), ["readmes_first"])) ? ("order-first") : (null));
echo "\">
<div class=\"rounded-lg overflow-hidden shadow-md\">
<header class=\"flex items-center bg-blue-600 px-4 py-3 text-white\">
<i class=\"fas fa-book fa-lg pr-3\"></i> README.md
</header>
<article class=\"bg-gray-100 rounded-b-lg px-4 py-8 sm:px-6 md:px-8 lg:px-12 ";
// line 7
echo ((0 === twig_compare(twig_get_attribute($this->env, $this->source, ($context["readme"] ?? null), "getExtension", [], "any", false, false, false, 7), "md")) ? ("markdown") : ("font-mono"));
echo "\" v-pre>
";
// line 8
if (0 === twig_compare(twig_get_attribute($this->env, $this->source, ($context["readme"] ?? null), "getExtension", [], "any", false, false, false, 8), "md")) {
// line 9
echo " ";
echo call_user_func_array($this->env->getFunction('markdown')->getCallable(), [twig_get_attribute($this->env, $this->source, ($context["readme"] ?? null), "getContents", [], "any", false, false, false, 9)]);
echo "
";
} else {
// line 11
echo " ";
echo nl2br(twig_escape_filter($this->env, twig_get_attribute($this->env, $this->source, ($context["readme"] ?? null), "getContents", [], "any", false, false, false, 11), "html", null, true));
echo "
";
}
// line 13
echo " </article>
</div>
</div>
";
}
public function getTemplateName()
{
return "components/readme.twig";
}
public function isTraitable()
{
return false;
}
public function getDebugInfo()
{
return array ( 65 => 13, 59 => 11, 53 => 9, 51 => 8, 47 => 7, 37 => 1,);
}
public function getSourceContext()
{
return new Source("", "components/readme.twig", "/var/www/www.diogo.site/public/projects/GNU-social/soc/2020/daily_report/archive/May/app/views/components/readme.twig");
}
}

View File

@ -0,0 +1,139 @@
<?php
use Twig\Environment;
use Twig\Error\LoaderError;
use Twig\Error\RuntimeError;
use Twig\Extension\SandboxExtension;
use Twig\Markup;
use Twig\Sandbox\SecurityError;
use Twig\Sandbox\SecurityNotAllowedTagError;
use Twig\Sandbox\SecurityNotAllowedFilterError;
use Twig\Sandbox\SecurityNotAllowedFunctionError;
use Twig\Source;
use Twig\Template;
/* components/file.twig */
class __TwigTemplate_1acde6a774dce62e1b16f6bed966af506de36894fe116d1dcf89129b2d3add8d extends Template
{
private $source;
private $macros = [];
public function __construct(Environment $env)
{
parent::__construct($env);
$this->source = $this->getSourceContext();
$this->parent = false;
$this->blocks = [
];
}
protected function doDisplay(array $context, array $blocks = [])
{
$macros = $this->macros;
// line 1
echo "<a
href=\"";
// line 2
echo twig_escape_filter($this->env, ((($context["parentDir"] ?? null)) ? (call_user_func_array($this->env->getFunction('parent_url')->getCallable(), [($context["path"] ?? null)])) : (call_user_func_array($this->env->getFunction('file_url')->getCallable(), [twig_get_attribute($this->env, $this->source, ($context["file"] ?? null), "getPathname", [], "any", false, false, false, 2)]))), "html", null, true);
echo "\"
class=\"flex flex-col items-center rounded-lg font-mono group hover:bg-gray-200 hover:shadow\"
>
<div class=\"flex justify-between items-center p-4 w-full\">
<div class=\"pr-2\">
";
// line 7
if (($context["parentDir"] ?? null)) {
// line 8
echo " <i class=\"fas fa-level-up-alt fa-fw fa-lg\"></i>
";
} else {
// line 10
echo " ";
echo call_user_func_array($this->env->getFunction('icon')->getCallable(), [($context["file"] ?? null)]);
echo "
";
}
// line 12
echo " </div>
<div class=\"flex-1 truncate\">
";
// line 15
((($context["parentDir"] ?? null)) ? (print ("..")) : (print (twig_escape_filter($this->env, twig_get_attribute($this->env, $this->source, ($context["file"] ?? null), "getRelativePathname", [], "any", false, false, false, 15), "html", null, true))));
echo "
</div>
";
// line 18
if (twig_get_attribute($this->env, $this->source, ($context["file"] ?? null), "isFile", [], "any", false, false, false, 18)) {
// line 19
echo " <div class=\"ml-2\">
<button
title=\"";
// line 21
echo twig_escape_filter($this->env, call_user_func_array($this->env->getFunction('translate')->getCallable(), ["file.info"]), "html", null, true);
echo "\"
class=\"flex justify-center items-center rounded-full p-2 -m-1 md:invisible hover:bg-gray-400 hover:shadow group-hover:visible\"
v-on:click.prevent=\"showFileInfo('";
// line 23
echo twig_escape_filter($this->env, twig_escape_filter($this->env, call_user_func_array($this->env->getFunction('url')->getCallable(), [twig_get_attribute($this->env, $this->source, ($context["file"] ?? null), "getPathname", [], "any", false, false, false, 23)]), "js"), "html", null, true);
echo "')\"
>
<i class=\"fas fa-info-circle\"></i>
</button>
</div>
";
}
// line 29
echo "
<div class=\"hidden whitespace-no-wrap text-right mx-2 w-1/6 sm:block\">
";
// line 31
if ((($context["parentDir"] ?? null) || twig_get_attribute($this->env, $this->source, ($context["file"] ?? null), "isDir", [], "any", false, false, false, 31))) {
// line 32
echo "
";
} else {
// line 34
echo " ";
echo twig_escape_filter($this->env, call_user_func_array($this->env->getFunction('size_for_humans')->getCallable(), [($context["file"] ?? null)]), "html", null, true);
echo "
";
}
// line 36
echo " </div>
<div class=\"hidden whitespace-no-wrap text-right truncate ml-2 w-1/4 sm:block\">
";
// line 39
((($context["parentDir"] ?? null)) ? (print ("")) : (print (twig_escape_filter($this->env, twig_date_format_filter($this->env, twig_get_attribute($this->env, $this->source, ($context["file"] ?? null), "getMTime", [], "any", false, false, false, 39)), "html", null, true))));
echo "
</div>
</div>
</a>
";
}
public function getTemplateName()
{
return "components/file.twig";
}
public function isTraitable()
{
return false;
}
public function getDebugInfo()
{
return array ( 112 => 39, 107 => 36, 101 => 34, 97 => 32, 95 => 31, 91 => 29, 82 => 23, 77 => 21, 73 => 19, 71 => 18, 65 => 15, 60 => 12, 54 => 10, 50 => 8, 48 => 7, 40 => 2, 37 => 1,);
}
public function getSourceContext()
{
return new Source("", "components/file.twig", "/var/www/www.diogo.site/public/projects/GNU-social/soc/2020/daily_report/archive/May/app/views/components/file.twig");
}
}

View File

@ -0,0 +1,178 @@
<?php
use Twig\Environment;
use Twig\Error\LoaderError;
use Twig\Error\RuntimeError;
use Twig\Extension\SandboxExtension;
use Twig\Markup;
use Twig\Sandbox\SecurityError;
use Twig\Sandbox\SecurityNotAllowedTagError;
use Twig\Sandbox\SecurityNotAllowedFilterError;
use Twig\Sandbox\SecurityNotAllowedFunctionError;
use Twig\Source;
use Twig\Template;
/* index.twig */
class __TwigTemplate_d242b0acd7b18e1ac758657ed5ce0275d13979807e1be59f55ff71e4dd4c7f8f extends Template
{
private $source;
private $macros = [];
public function __construct(Environment $env)
{
parent::__construct($env);
$this->source = $this->getSourceContext();
$this->blocks = [
'content' => [$this, 'block_content'],
];
}
protected function doGetParent(array $context)
{
// line 1
return "layouts/app.twig";
}
protected function doDisplay(array $context, array $blocks = [])
{
$macros = $this->macros;
$this->parent = $this->loadTemplate("layouts/app.twig", "index.twig", 1);
$this->parent->display($context, array_merge($this->blocks, $blocks));
}
// line 3
public function block_content($context, array $blocks = [])
{
$macros = $this->macros;
// line 4
echo " ";
$this->loadTemplate("components/header.twig", "index.twig", 4)->display($context);
// line 5
echo "
<div id=\"content\" class=\"flex flex-col flex-grow container mx-auto px-4\">
<div class=\"my-4\">
<div class=\"flex justify-between font-bold p-4\">
<div class=\"flex-grow font-mono mr-2\">
";
// line 10
echo twig_escape_filter($this->env, call_user_func_array($this->env->getFunction('translate')->getCallable(), ["file.name"]), "html", null, true);
echo "
</div>
<div class=\"font-mono text-right w-1/6 mx-2 hidden sm:block\">
";
// line 14
echo twig_escape_filter($this->env, call_user_func_array($this->env->getFunction('translate')->getCallable(), ["file.size"]), "html", null, true);
echo "
</div>
<div class=\"font-mono text-right w-1/4 ml-2 hidden sm:block\">
";
// line 18
echo twig_escape_filter($this->env, call_user_func_array($this->env->getFunction('translate')->getCallable(), ["file.date"]), "html", null, true);
echo "
</div>
</div>
<ul id=\"file-list\">
<li>
";
// line 24
if ((($context["path"] ?? null) && 0 !== twig_compare(($context["path"] ?? null), "."))) {
// line 25
echo " ";
echo twig_include($this->env, $context, "components/file.twig", ["parentDir" => true]);
echo "
";
}
// line 27
echo " </li>
<li>
";
// line 30
$context['_parent'] = $context;
$context['_seq'] = twig_ensure_traversable(($context["files"] ?? null));
$context['loop'] = [
'parent' => $context['_parent'],
'index0' => 0,
'index' => 1,
'first' => true,
];
if (is_array($context['_seq']) || (is_object($context['_seq']) && $context['_seq'] instanceof \Countable)) {
$length = count($context['_seq']);
$context['loop']['revindex0'] = $length - 1;
$context['loop']['revindex'] = $length;
$context['loop']['length'] = $length;
$context['loop']['last'] = 1 === $length;
}
foreach ($context['_seq'] as $context["_key"] => $context["file"]) {
// line 31
echo " ";
echo twig_include($this->env, $context, "components/file.twig");
echo "
";
++$context['loop']['index0'];
++$context['loop']['index'];
$context['loop']['first'] = false;
if (isset($context['loop']['length'])) {
--$context['loop']['revindex0'];
--$context['loop']['revindex'];
$context['loop']['last'] = 0 === $context['loop']['revindex0'];
}
}
$_parent = $context['_parent'];
unset($context['_seq'], $context['_iterated'], $context['_key'], $context['file'], $context['_parent'], $context['loop']);
$context = array_intersect_key($context, $_parent) + $_parent;
// line 33
echo " </li>
</ul>
</div>
";
// line 37
if (($context["readme"] ?? null)) {
// line 38
echo " ";
$this->loadTemplate("components/readme.twig", "index.twig", 38)->display($context);
// line 39
echo " ";
}
// line 40
echo " </div>
";
// line 42
$this->loadTemplate("components/footer.twig", "index.twig", 42)->display($context);
// line 43
echo "
";
// line 44
$this->loadTemplate("components/scroll-to-top.twig", "index.twig", 44)->display($context);
// line 45
echo " <file-info-modal ref=\"fileInfoModal\"></file-info-modal>
";
}
public function getTemplateName()
{
return "index.twig";
}
public function isTraitable()
{
return false;
}
public function getDebugInfo()
{
return array ( 155 => 45, 153 => 44, 150 => 43, 148 => 42, 144 => 40, 141 => 39, 138 => 38, 136 => 37, 130 => 33, 113 => 31, 96 => 30, 91 => 27, 85 => 25, 83 => 24, 74 => 18, 67 => 14, 60 => 10, 53 => 5, 50 => 4, 46 => 3, 35 => 1,);
}
public function getSourceContext()
{
return new Source("", "index.twig", "/var/www/www.diogo.site/public/projects/GNU-social/soc/2020/daily_report/archive/May/app/views/index.twig");
}
}

View File

@ -0,0 +1,108 @@
<?php
use Twig\Environment;
use Twig\Error\LoaderError;
use Twig\Error\RuntimeError;
use Twig\Extension\SandboxExtension;
use Twig\Markup;
use Twig\Sandbox\SecurityError;
use Twig\Sandbox\SecurityNotAllowedTagError;
use Twig\Sandbox\SecurityNotAllowedFilterError;
use Twig\Sandbox\SecurityNotAllowedFunctionError;
use Twig\Source;
use Twig\Template;
/* layouts/app.twig */
class __TwigTemplate_1e7c5e34363fbd4e00b2c72e6c88500b2a9079633f81461772c626e5c7d2d8dc extends Template
{
private $source;
private $macros = [];
public function __construct(Environment $env)
{
parent::__construct($env);
$this->source = $this->getSourceContext();
$this->parent = false;
$this->blocks = [
'content' => [$this, 'block_content'],
];
}
protected function doDisplay(array $context, array $blocks = [])
{
$macros = $this->macros;
// line 1
echo "<!DOCTYPE html>
<meta charset=\"utf-8\">
<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">
<link rel=\"icon\" href=\"";
// line 6
echo twig_escape_filter($this->env, ((call_user_func_array($this->env->getFunction('config')->getCallable(), ["dark_mode"])) ? (call_user_func_array($this->env->getFunction('asset')->getCallable(), ["images/favicon.dark.png"])) : (call_user_func_array($this->env->getFunction('asset')->getCallable(), ["images/favicon.light.png"]))), "html", null, true);
echo "\">
<link rel=\"stylesheet\" href=\"";
// line 7
echo twig_escape_filter($this->env, call_user_func_array($this->env->getFunction('asset')->getCallable(), ["app.css"]), "html", null, true);
echo "\">
";
// line 9
if (call_user_func_array($this->env->getFunction('config')->getCallable(), ["google_analytics_id", false])) {
// line 10
echo " ";
$this->loadTemplate("components/google-analytics.twig", "layouts/app.twig", 10)->display($context);
}
// line 12
echo "
<title>";
// line 13
echo twig_escape_filter($this->env, ($context["title"] ?? null), "html", null, true);
echo " &bull; Directory Lister</title>
<div id=\"app\" class=\"flex flex-col min-h-screen font-sans ";
// line 15
echo ((call_user_func_array($this->env->getFunction('config')->getCallable(), ["dark_mode"])) ? ("dark-mode") : ("light-mode"));
echo "\">
";
// line 16
$this->displayBlock('content', $context, $blocks);
// line 17
echo "</div>
<script src=\"";
// line 19
echo twig_escape_filter($this->env, call_user_func_array($this->env->getFunction('asset')->getCallable(), ["app.js"]), "html", null, true);
echo "\" defer></script>
";
}
// line 16
public function block_content($context, array $blocks = [])
{
$macros = $this->macros;
}
public function getTemplateName()
{
return "layouts/app.twig";
}
public function isTraitable()
{
return false;
}
public function getDebugInfo()
{
return array ( 84 => 16, 78 => 19, 74 => 17, 72 => 16, 68 => 15, 63 => 13, 60 => 12, 56 => 10, 54 => 9, 49 => 7, 45 => 6, 38 => 1,);
}
public function getSourceContext()
{
return new Source("", "layouts/app.twig", "/var/www/www.diogo.site/public/projects/GNU-social/soc/2020/daily_report/archive/May/app/views/layouts/app.twig");
}
}

View File

@ -0,0 +1,72 @@
<?php
use Twig\Environment;
use Twig\Error\LoaderError;
use Twig\Error\RuntimeError;
use Twig\Extension\SandboxExtension;
use Twig\Markup;
use Twig\Sandbox\SecurityError;
use Twig\Sandbox\SecurityNotAllowedTagError;
use Twig\Sandbox\SecurityNotAllowedFilterError;
use Twig\Sandbox\SecurityNotAllowedFunctionError;
use Twig\Source;
use Twig\Template;
/* components/scroll-to-top.twig */
class __TwigTemplate_11d80c797bfd2aef408b16503ecc6233f3bed685fc0ee5cac903e18b246324e3 extends Template
{
private $source;
private $macros = [];
public function __construct(Environment $env)
{
parent::__construct($env);
$this->source = $this->getSourceContext();
$this->parent = false;
$this->blocks = [
];
}
protected function doDisplay(array $context, array $blocks = [])
{
$macros = $this->macros;
// line 1
echo "<div class=\"fixed bottom-0 left-0 right-0 pointer-events-none\">
<div class=\"container flex justify-end mx-auto px-4 py-10\">
<button id=\"scroll-to-top\" ref=\"scrollToTop\" title=\"";
// line 3
echo twig_escape_filter($this->env, call_user_func_array($this->env->getFunction('translate')->getCallable(), ["scroll_to_top"]), "html", null, true);
echo "\"
class=\"flex justify-center items-center w-12 h-12 right-0 rounded-full shadow-lg bg-blue-600 text-white cursor-pointer pointer-events-auto hover:bg-blue-700 hidden\"
onclick=\"window.scrollTo({ top: 0, left: 0, behavior: 'smooth' });\"
>
<i class=\"fas fa-arrow-up fa-lg\"></i>
</button>
</div>
</div>
";
}
public function getTemplateName()
{
return "components/scroll-to-top.twig";
}
public function isTraitable()
{
return false;
}
public function getDebugInfo()
{
return array ( 41 => 3, 37 => 1,);
}
public function getSourceContext()
{
return new Source("", "components/scroll-to-top.twig", "/var/www/www.diogo.site/public/projects/GNU-social/soc/2020/daily_report/archive/May/app/views/components/scroll-to-top.twig");
}
}

View File

@ -0,0 +1,83 @@
<?php
use Twig\Environment;
use Twig\Error\LoaderError;
use Twig\Error\RuntimeError;
use Twig\Extension\SandboxExtension;
use Twig\Markup;
use Twig\Sandbox\SecurityError;
use Twig\Sandbox\SecurityNotAllowedTagError;
use Twig\Sandbox\SecurityNotAllowedFilterError;
use Twig\Sandbox\SecurityNotAllowedFunctionError;
use Twig\Source;
use Twig\Template;
/* components/footer.twig */
class __TwigTemplate_2bfa45e3536944176b550bcf5b1262ee7121305801255055dec46cb94d22d325 extends Template
{
private $source;
private $macros = [];
public function __construct(Environment $env)
{
parent::__construct($env);
$this->source = $this->getSourceContext();
$this->parent = false;
$this->blocks = [
];
}
protected function doDisplay(array $context, array $blocks = [])
{
$macros = $this->macros;
// line 1
echo "<footer class=\"container border-t-2 border-gray-800 text-center mx-auto px-4 py-8\">
<div class=\"flex flex-col justify-center items-center\">
<p class=\"mb-4\">
";
// line 4
echo twig_escape_filter($this->env, call_user_func_array($this->env->getFunction('translate')->getCallable(), ["powered_by"]), "html", null, true);
echo " <a href=\"https://www.directorylister.com\" class=\"underline hover:text-blue-700\">Directory Lister</a>
</p>
<div class=\"flex\">
<a href=\"https://github.com/DirectoryLister/DirectoryLister\" title=\"GitHub\" class=\"text-gray-400 mx-2 hover:text-github\">
<i class=\"fab fa-github fa-lg\"></i>
</a>
<a href=\"https://twitter.com/DirectoryLister\" title=\"Twitter\" class=\"text-gray-400 mx-2 hover:text-twitter\">
<i class=\"fab fa-twitter fa-lg\"></i>
</a>
<a href=\"https://spectrum.chat/directory-lister\" title=\"Spectrum\" class=\"text-gray-400 mx-2 hover:text-spectrum\">
<i class=\"fas fa-comments fa-lg\"></i>
</a>
</div>
</div>
</footer>
";
}
public function getTemplateName()
{
return "components/footer.twig";
}
public function isTraitable()
{
return false;
}
public function getDebugInfo()
{
return array ( 42 => 4, 37 => 1,);
}
public function getSourceContext()
{
return new Source("", "components/footer.twig", "/var/www/www.diogo.site/public/projects/GNU-social/soc/2020/daily_report/archive/May/app/views/components/footer.twig");
}
}

View File

@ -0,0 +1,170 @@
<?php
use App\Support\Helpers;
use Psr\Container\ContainerInterface;
return [
/**
* Enable application debugging and display error messages.
*
* !!! WARNING !!!
* It is recommended that debug remains OFF unless troubleshooting an issue.
* Leaving this enabled WILL cause leakage of sensitive server information.
*
* Default value: false
*/
'debug' => Helpers::env('APP_DEBUG', false),
/**
* The application interface language.
*
* Possible values: See 'app/translations' folder for available translations.
*
* Defualt value: en
*/
'language' => Helpers::env('APP_LANGUAGE', 'en'),
/**
* Enable dark mode?
*
* Default value: false
*/
'dark_mode' => Helpers::env('DARK_MODE', false),
/**
* Parse and render README files on the page.
*
* Default value: true
*/
'display_readmes' => Helpers::env('DISPLAY_READMES', true),
/**
* Show READMEs before the file listing.
*
* Default value: false
*/
'readmes_first' => Helpers::env('READMES_FIRST', false),
/**
* Enable downloading of directories as a zip archive.
*
* Default value: true
*/
'zip_downloads' => Helpers::env('ZIP_DOWNLOADS', true),
/**
* Your Google analytics tracking ID.
*
* Expected format: 'UA-123456789-0'
* Default value: false
*/
'google_analytics_id' => Helpers::env('GOOGLE_ANALYTICS_ID', false),
/**
* Sorting order of files and folders.
*
* Possible values: type, natural, name, accessed, changed, modified
* Default value: type
*/
'sort_order' => Helpers::env('SORT_ORDER', 'type'),
/**
* When enabled, reverses the order of files (after sorting is applied).
*
* Default value: false
*/
'reverse_sort' => Helpers::env('REVERSE_SORT', false),
/**
* File containing hidden file definitions. Will be merged with definitions
* from the 'hidden_files' configuration option.
*
* Default value: '.hidden'
*/
'hidden_files_list' => Helpers::env('HIDDEN_FILES_LIST', '.hidden'),
/**
* Array of hidden file definitions. Will be merged with definitions in the
* file definned in the 'hidden_files_list' configuration option. Supports
* glob patterns (e.g. *.txt, file.{yml,yaml}, etc.).
*
* Default value: []
*/
'hidden_files' => [
// ...
],
/**
* Whether or not to hide application files/directories form the listing.
*
* Default value: true
*/
'hide_app_files' => Helpers::env('HIDE_APP_FILES', true),
/**
* Hide the files Version Control System (i.e. Git and Mercurial) use to
* store their metadata.
*
* Default value: true
*/
'hide_vcs_files' => Helpers::env('HIDE_VSC_FILES', true),
/**
* Default date format. For additional info on date formatting see:
* https://www.php.net/manual/en/function.date.php.
*
* Default value: 'Y-m-d H:i:s'
*/
'date_format' => Helpers::env('DATE_FORMAT', 'Y-m-d H:i:s'),
/**
* Timezone used for date formatting. For a list of supported timezones see:
* https://www.php.net/manual/en/timezones.php.
*
* Default value: The server's timezone
*/
'timezone' => Helpers::env('TIMEZONE', date_default_timezone_get()),
/**
* The maximum file size (in bytes) that can be hashed. This helps to
* prevent timeouts for excessively large files.
*
* Default value: 1000000000
*/
'max_hash_size' => Helpers::env('MAX_HASH_SIZE', 1000000000),
/**
* Path to the view cache directory.
* Set to 'false' to disable view caching entirely.
*
* Default value: 'app/cache/views'
*/
'view_cache' => Helpers::env('VIEW_CACHE', 'app/cache/views'),
/**
* HTTP expires values.
*
* Possible values: An array of mime types mapped to their cache duration
* as a relative datetime string.
*
* Default value: [
* 'application/zip' => '+1 hour',
* 'text/json' => '+1 hour',
* ]
*/
'http_expires' => [
'application/zip' => '+1 hour',
'text/json' => '+1 hour',
],
/**
* Array of icon definitions where the array key is the file extension
* (without a preceding dot) and the array value is the desired Font Awesome
* class names.
*
* Default value: Array loaded from 'icons.php' config file
*/
'icons' => static function (ContainerInterface $container): array {
return require $container->get('icons_config');
},
];

View File

@ -0,0 +1,21 @@
<?php
use App\Factories;
return [
/** Path definitions */
'base_path' => dirname(__DIR__, 2),
'app_path' => dirname(__DIR__),
'asset_path' => DI\string('{app_path}/assets'),
'cache_path' => DI\string('{app_path}/cache'),
'config_path' => DI\string('{app_path}/config'),
'translations_path' => DI\string('{app_path}/translations'),
'views_path' => DI\string('{app_path}/views'),
'icons_config' => DI\string('{config_path}/icons.php'),
/** Container definitions */
Symfony\Component\Finder\Finder::class => DI\factory(Factories\FinderFactory::class),
Symfony\Contracts\Translation\TranslatorInterface::class => DI\factory(Factories\TranslationFactory::class),
Slim\Views\Twig::class => DI\factory(Factories\TwigFactory::class),
Whoops\RunInterface::class => DI\create(Whoops\Run::class),
];

View File

@ -0,0 +1,138 @@
<?php
return [
// Images
'ai' => 'fas fa-image',
'bmp' => 'fas fa-image',
'eps' => 'fas fa-image',
'gif' => 'fas fa-image',
'ico' => 'fas fa-image',
'jpeg' => 'fas fa-image',
'jpg' => 'fas fa-image',
'png' => 'fas fa-image',
'ps' => 'fas fa-image',
'psd' => 'fas fa-image',
'svg' => 'fas fa-image',
'tga' => 'fas fa-image',
'tif' => 'fas fa-image',
'tiff' => 'fas fa-image',
'drw' => 'fas fa-image',
// Data
'csv' => 'fas fa-file-csv',
'json' => 'fas fa-file-alt',
'yaml' => 'fas fa-file-alt',
// Code
'c' => 'fas fa-code',
'class' => 'fas fa-code',
'cpp' => 'fas fa-code',
'css' => 'fab fab fa-css3',
'erb' => 'fas fa-code',
'htm' => 'fab fa-html5',
'html' => 'fab fa-html5',
'java' => 'fab fa-java',
'js' => 'fab fa-js',
'php' => 'fab fa-php',
'pl' => 'fas fa-code',
'py' => 'fab fa-python',
'rb' => 'fas fa-code',
'xhtml' => 'fas fa-code',
'xml' => 'fas fa-code',
// Text and Markup
'cfg' => 'fas fa-file-alt',
'ini' => 'fas fa-file-alt',
'log' => 'fas fa-file-alt',
'md' => 'fab fa-markdown',
'rtf' => 'fas fa-file-alt',
'txt' => 'fas fa-file-alt',
// Documents
'doc' => 'fas fa-file-word',
'docx' => 'fas fa-file-word',
'odt' => 'fas fa-file-alt',
'pdf' => 'fas fa-file-pdf',
'ppt' => 'fas fa-file-powerpoint',
'pptx' => 'fas fa-file-powerpoint',
'xls' => 'fas fa-file-excel',
'xlsx' => 'fas fa-file-excel',
// Archives
'7z' => 'fas fa-file-archive',
'bz' => 'fas fa-file-archive',
'gz' => 'fas fa-file-archive',
'rar' => 'fas fa-file-archive',
'tar' => 'fas fa-file-archive',
'xz' => 'fas fa-file-archive',
'zip' => 'fas fa-file-archive',
// Audio
'aac' => 'fas fa-music',
'aif' => 'fas fa-music',
'flac' => 'fas fa-music',
'mid' => 'fas fa-music',
'midi' => 'fas fa-music',
'mpa' => 'fas fa-music',
'mp3' => 'fas fa-music',
'ogg' => 'fas fa-music',
'wma' => 'fas fa-music',
'wav' => 'fas fa-music',
// Databases
'accdb' => 'fas fa-database',
'db' => 'fas fa-database',
'dbf' => 'fas fa-database',
'mdb' => 'fas fa-database',
'pdb' => 'fas fa-database',
'sql' => 'fas fa-database',
// Executables
'apk' => 'fab fa-android',
'app' => 'fas fa-window',
'com' => 'fas fa-window',
'exe' => 'fas fa-window',
'jar' => 'fas fa-window',
'msi' => 'fas fa-window',
'vb' => 'fas fa-window',
// Fonts
'eot' => 'fas fa-font-case',
'otf' => 'fas fa-font-case',
'ttf' => 'fas fa-font-case',
'woff' => 'fas fa-font-case',
// Game Files
'gam' => 'fas fa-gamepad',
'nes' => 'fas fa-gamepad',
'rom' => 'fas fa-gamepad',
'sav' => 'fas fa-save',
// Package Files
'box' => 'fas fa-archive',
'deb' => 'fas fa-archive',
'rpm' => 'fas fa-archive',
// Scripts
'bat' => 'fas fa-terminal',
'cmd' => 'fas fa-terminal',
'sh' => 'fas fa-terminal',
// Video
'avi' => 'fas fa-video',
'flv' => 'fas fa-video',
'mkv' => 'fas fa-video',
'mov' => 'fas fa-video',
'mp4' => 'fas fa-video',
'mpg' => 'fas fa-video',
'ogv' => 'fas fa-video',
'swf' => 'fas fa-video',
'webm' => 'fas fa-video',
'wmv' => 'fas fa-video',
// Miscellaneous
'bak' => 'fas fa-save',
'iso' => 'fas fa-compact-disc',
'lock' => 'fas fa-lock',
'msg' => 'fas fa-envelope',
];

View File

@ -0,0 +1,38 @@
<?php
namespace App\Bootstrap;
use DI\Bridge\Slim\Bridge;
use DI\Container;
use Slim\App;
class AppManager
{
/** @var Container The applicaiton container */
protected $container;
/**
* Create a new AppManager object.
*
* @param \DI\Container $container
*/
public function __construct(Container $container)
{
$this->container = $container;
}
/**
* Setup and configure the application.
*
* @return \Slim\App
*/
public function __invoke(): App
{
$app = Bridge::create($this->container);
$this->container->call(MiddlewareManager::class);
$this->container->call(ExceptionManager::class);
$this->container->call(RouteManager::class);
return $app;
}
}

View File

@ -0,0 +1,43 @@
<?php
namespace App\Bootstrap;
use App\Exceptions\ErrorHandler;
use DI\Container;
use Slim\App;
class ExceptionManager
{
/** @var App The application */
protected $app;
/** @var Container The application container */
protected $container;
/**
* Create a new ExceptionManager object.
*
* @param \Slim\App $app
* @param \DI\Container $container
*/
public function __construct(App $app, Container $container)
{
$this->app = $app;
$this->container = $container;
}
/**
* Set up and configure exception handling.
*
* @return void
*/
public function __invoke(): void
{
if ($this->container->get('debug')) {
return;
}
$errorMiddleware = $this->app->addErrorMiddleware(true, true, true);
$errorMiddleware->setDefaultErrorHandler(ErrorHandler::class);
}
}

View File

@ -0,0 +1,53 @@
<?php
namespace App\Bootstrap;
use App\Middlewares;
use DI\Container;
use Middlewares as HttpMiddlewares;
use Slim\App;
use Tightenco\Collect\Support\Collection;
class MiddlewareManager
{
/** @const Array of application middlewares */
protected const MIDDLEWARES = [
Middlewares\WhoopsMiddleware::class
];
/** @var App The application */
protected $app;
/** @var Container The application container */
protected $container;
/**
* Create a new MiddlwareManager object.
*
* @param \Slim\App $app
* @param \DI\Container $container
*/
public function __construct(App $app, Container $container)
{
$this->app = $app;
$this->container = $container;
}
/**
* Register application middlewares.
*
* @return void
*/
public function __invoke()
{
Collection::make(self::MIDDLEWARES)->each(
function (string $middleware): void {
$this->app->add($middleware);
}
);
$this->app->add(new HttpMiddlewares\Expires(
$this->container->get('http_expires')
));
}
}

View File

@ -0,0 +1,32 @@
<?php
namespace App\Bootstrap;
use App\Controllers;
use Slim\App;
class RouteManager
{
/** @var App The application */
protected $app;
/**
* Create a new RouteManager object.
*
* @param \Slim\App $app
*/
public function __construct(App $app)
{
$this->app = $app;
}
/**
* Register the application routes.
*
* @return void
*/
public function __invoke(): void
{
$this->app->get('/[{path:.*}]', Controllers\IndexController::class);
}
}

View File

@ -0,0 +1,104 @@
<?php
namespace App\Controllers;
use DI\Container;
use Exception;
use Psr\Http\Message\ResponseInterface;
use Slim\Psr7\Request;
use Slim\Psr7\Response;
use Slim\Views\Twig;
use Symfony\Component\Finder\Finder;
use Symfony\Component\Finder\SplFileInfo;
use Symfony\Contracts\Translation\TranslatorInterface;
class DirectoryController
{
/** @var Container The application container */
protected $container;
/** @var Finder File finder component */
protected $finder;
/** @var Twig Twig templating component */
protected $view;
/** @var TranslatorInterface Translator component */
protected $translator;
/**
* Create a new IndexController object.
*
* @param \DI\Container $container
* @param \Symfony\Component\Finder\Finder $finder
* @param \Slim\Views\Twig $view
* @param \Symfony\Contracts\Translation\TranslatorInterface $translator
*/
public function __construct(
Container $container,
Finder $finder,
Twig $view,
TranslatorInterface $translator
) {
$this->container = $container;
$this->finder = $finder;
$this->view = $view;
$this->translator = $translator;
}
/**
* Invoke the IndexController.
*
* @param \Slim\Psr7\Request $request
* @param \Slim\Psr7\Response $response
*
* @return \Psr\Http\Message\ResponseInterface
*/
public function __invoke(Request $request, Response $response): ResponseInterface
{
$path = $request->getQueryParams()['dir'] ?? '.';
try {
$files = $this->finder->in($path)->depth(0);
} catch (Exception $exception) {
return $this->view->render($response->withStatus(404), 'error.twig', [
'message' => $this->translator->trans('error.directory_not_found')
]);
}
return $this->view->render($response, 'index.twig', [
'files' => $files,
'path' => $path,
'readme' => $this->readme($files),
'title' => $path == '.' ? 'Home' : $path,
]);
}
/**
* Return the README file within a finder object.
*
* @param \Symfony\Component\Finder\Finder $files
*
* @return \Symfony\Component\Finder\SplFileInfo|null
*/
protected function readme(Finder $files): ?SplFileInfo
{
if (! $this->container->get('display_readmes')) {
return null;
}
$readmes = (clone $files)->name('/^README(?:\..+)?$/i');
$readmes->filter(static function (SplFileInfo $file) {
return (bool) preg_match('/text\/.+/', mime_content_type($file->getPathname()));
})->sort(static function (SplFileInfo $file1, SplFileInfo $file2) {
return $file1->getExtension() <=> $file2->getExtension();
});
if (! $readmes->hasResults()) {
return null;
}
return $readmes->getIterator()->current();
}
}

View File

@ -0,0 +1,68 @@
<?php
namespace App\Controllers;
use DI\Container;
use Psr\Http\Message\ResponseInterface;
use Slim\Psr7\Request;
use Slim\Psr7\Response;
use SplFileInfo;
use Symfony\Contracts\Translation\TranslatorInterface;
class FileInfoController
{
/** @var Container The application container */
protected $container;
/** @var TranslatorInterface Translator component */
protected $translator;
/**
* Create a new FileInfoHandler object.
*
* @param \DI\Container $container
* @param \Symfony\Contracts\Translation\TranslatorInterface $translator
*/
public function __construct(
Container $container,
TranslatorInterface $translator
) {
$this->container = $container;
$this->translator = $translator;
}
/**
* Invoke the FileInfoHandler.
*
* @param \Slim\Psr7\Request $request
* @param \Slim\Psr7\Response $response
*
* @return \Psr\Http\Message\ResponseInterface
*/
public function __invoke(Request $request, Response $response): ResponseInterface
{
$path = $request->getQueryParams()['info'];
$file = new SplFileInfo(
realpath($this->container->get('base_path') . '/' . $path)
);
if (! $file->isFile()) {
return $response->withStatus(404, $this->translator->trans('error.file_not_found'));
}
if ($file->getSize() >= $this->container->get('max_hash_size')) {
return $response->withStatus(500, $this->translator->trans('error.file_size_exceeded'));
}
$response->getBody()->write(json_encode([
'hashes' => [
'md5' => hash('md5', file_get_contents($file->getPathname())),
'sha1' => hash('sha1', file_get_contents($file->getPathname())),
'sha256' => hash('sha256', file_get_contents($file->getPathname())),
]
]));
return $response->withHeader('Content-Type', 'application/json');
}
}

View File

@ -0,0 +1,48 @@
<?php
namespace App\Controllers;
use DI\Container;
use Slim\Psr7\Request;
use Slim\Psr7\Response;
class IndexController
{
/** @var Container Application container */
protected $container;
/**
* Create a new IndexController object.
*
* @param \DI\Container $container
*/
public function __construct(Container $container)
{
$this->container = $container;
}
/**
* Invoke the IndexController.
*
* @param \Slim\Psr7\Request $request
* @param \Slim\Psr7\Response $response
*
* @return \Psr\Http\Message\ResponseInterface
*/
public function __invoke(Request $request, Response $response)
{
switch (true) {
case array_key_exists('info', $request->getQueryParams()):
return $this->container->call(FileInfoController::class, [$request, $response]);
case array_key_exists('search', $request->getQueryParams()):
return $this->container->call(SearchController::class, [$request, $response]);
case array_key_exists('zip', $request->getQueryParams()):
return $this->container->call(ZipController::class, [$request, $response]);
default:
return $this->container->call(DirectoryController::class, [$request, $response]);
}
}
}

View File

@ -0,0 +1,66 @@
<?php
namespace App\Controllers;
use Psr\Http\Message\ResponseInterface;
use Slim\Psr7\Request;
use Slim\Psr7\Response;
use Slim\Views\Twig;
use Symfony\Component\Finder\Finder;
use Symfony\Contracts\Translation\TranslatorInterface;
class SearchController
{
/** @var Finder File finder component */
protected $finder;
/** @var Twig Twig templating component */
protected $view;
/** @var TranslatorInterface Translator component */
protected $translator;
/**
* Create a new SearchHandler object.
*
* @param \Symfony\Component\Finder\Finder $finder
* @param \Slim\Views\Twig $view
* @param \Symfony\Contracts\Translation\TranslatorInterface $translator
*/
public function __construct(Finder $finder, Twig $view, TranslatorInterface $translator)
{
$this->finder = $finder;
$this->view = $view;
$this->translator = $translator;
}
/**
* Invoke the SearchHandler.
*
* @param \Slim\Psr7\Request $request
* @param \Slim\Psr7\Response $response
*
* @return \Psr\Http\Message\ResponseInterface
*/
public function __invoke(Request $request, Response $response): ResponseInterface
{
$search = $request->getQueryParams()['search'];
$files = $this->finder->in('.')->name(
$search ? sprintf('/(?:.*)%s(?:.*)/i', preg_quote($search, '/')) : ''
);
if ($files->count() === 0) {
return $this->view->render($response, 'error.twig', [
'message' => $this->translator->trans('error.no_results_found'),
'search' => $search,
]);
}
return $this->view->render($response, 'index.twig', [
'files' => $files,
'search' => $search,
'title' => $search,
]);
}
}

View File

@ -0,0 +1,122 @@
<?php
namespace App\Controllers;
use App\Support\Str;
use App\TemporaryFile;
use DI\Container;
use Psr\Http\Message\ResponseInterface;
use Slim\Psr7\Request;
use Slim\Psr7\Response;
use Symfony\Component\Finder\Finder;
use Symfony\Component\Finder\SplFileInfo;
use Symfony\Contracts\Translation\TranslatorInterface;
use ZipArchive;
class ZipController
{
/** @var Container The application container */
protected $container;
/** @var Finder The Finder Component */
protected $finder;
/** @var TranslatorInterface Translator component */
protected $translator;
/**
* Create a new ZipHandler object.
*
* @param \DI\Container $container
* @param \PhpCsFixer\Finder $finder
* @param \Symfony\Contracts\Translation\TranslatorInterface $translator
*/
public function __construct(
Container $container,
Finder $finder,
TranslatorInterface $translator
) {
$this->container = $container;
$this->finder = $finder;
$this->translator = $translator;
}
/**
* Invoke the ZipHandler.
*
* @param \Slim\Psr7\Request $request
* @param \Slim\Psr7\Response $response
*
* @return \Psr\Http\Message\ResponseInterface
*/
public function __invoke(Request $request, Response $response): ResponseInterface
{
$path = $request->getQueryParams()['zip'];
if (! $this->container->get('zip_downloads') || ! realpath($path)) {
return $response->withStatus(404, $this->translator->trans('error.file_not_found'));
}
$response->getBody()->write($this->createZip($path)->getContents());
return $response->withHeader('Content-Type', 'application/zip')
->withHeader('Content-Disposition', sprintf(
'attachment; filename="%s.zip"',
$this->generateFileName($path)
));
}
/**
* Create a zip file from a directory.
*
* @param string $path
*
* @return \App\TemporaryFile
*/
protected function createZip(string $path): TemporaryFile
{
$zip = new ZipArchive;
$zip->open((string) $tempFile = new TemporaryFile(
$this->container->get('cache_path')
), ZipArchive::CREATE | ZipArchive::OVERWRITE);
foreach ($this->finder->in($path)->files() as $file) {
$zip->addFile($file->getRealPath(), $this->stripPath($file, $path));
}
$zip->close();
return $tempFile;
}
/**
* Return the path to a file with the preceding root path stripped.
*
* @param \Symfony\Component\Finder\SplFileInfo $file
* @param string $path
*
* @return string
*/
protected function stripPath(SplFileInfo $file, string $path): string
{
$pattern = sprintf(
'/^%s%s?/', preg_quote($path, '/'), preg_quote(DIRECTORY_SEPARATOR, '/')
);
return preg_replace($pattern, '', $file->getPathname());
}
/**
* Generate the file name for a path.
*
* @param string $path
*
* @return string
*/
protected function generateFileName(string $path): string
{
$filename = Str::explode($path, DIRECTORY_SEPARATOR)->last();
return $filename == '.' ? 'Home' : $filename;
}
}

View File

@ -0,0 +1,66 @@
<?php
namespace App\Exceptions;
use Psr\Http\Message\ResponseInterface;
use Psr\Http\Message\ServerRequestInterface;
use Slim\Interfaces\ErrorHandlerInterface;
use Slim\Psr7\Response;
use Slim\Views\Twig;
use Symfony\Contracts\Translation\TranslatorInterface;
use Throwable;
class ErrorHandler implements ErrorHandlerInterface
{
/** @var Twig Twig templating component */
protected $view;
/** @var TranslatorInterface Translation component */
protected $translator;
/**
* Create a new ErrorHandler object.
*
* @param \Slim\Views\Twig $view
* @param \Symfony\Contracts\Translation\TranslatorInterface $translator
*/
public function __construct(Twig $view, TranslatorInterface $translator)
{
$this->view = $view;
$this->translator = $translator;
}
/**
* Invoke the ErrorHandler class.
*
* @param \Psr\Http\Message\ServerRequestInterface $request
* @param \Throwable $exception
* @param bool $displayErrorDetails
* @param bool $logErrors
* @param bool $logErrorDetails
*
* @return \Psr\Http\Message\ResponseInterface
*/
public function __invoke(
ServerRequestInterface $request,
Throwable $exception,
bool $displayErrorDetails,
bool $logErrors,
bool $logErrorDetails
): ResponseInterface {
$response = (new Response)->withStatus(500);
if (in_array('application/json', explode(',', $request->getHeaderLine('Accept')))) {
$response->getBody()->write(json_encode([
'error' => ['message' => $this->translator->trans('error.unexpected')]
]));
return $response->withHeader('Content-Type', 'application/json');
}
return $this->view->render($response, 'error.twig', [
'message' => $this->translator->trans('error.unexpected'),
'subtext' => $this->translator->trans('enable_debugging'),
]);
}
}

View File

@ -0,0 +1,109 @@
<?php
namespace App\Factories;
use App\SortMethods;
use Closure;
use DI\Container;
use PHLAK\Utilities\Glob;
use RuntimeException;
use Symfony\Component\Finder\Finder;
use Symfony\Component\Finder\SplFileInfo;
use Tightenco\Collect\Support\Collection;
class FinderFactory
{
/** @const Application paths to be hidden */
protected const APP_FILES = ['app', 'index.php', '.hidden'];
/** @const Array of sort options mapped to their respective methods */
public const SORT_METHODS = [
'accessed' => SortMethods\Accessed::class,
'changed' => SortMethods\Changed::class,
'modified' => SortMethods\Modified::class,
'name' => SortMethods\Name::class,
'natural' => SortMethods\Natural::class,
'type' => SortMethods\Type::class,
];
/** @var Container The application container */
protected $container;
/**
* Create a new FinderFactory object.
*
* @param \DI\Container $container
*/
public function __construct(Container $container)
{
$this->container = $container;
}
/**
* Initialize and return the Finder component.
*
* @return \Symfony\Component\Finder\Finder
*/
public function __invoke(): Finder
{
$finder = Finder::create()->followLinks();
$finder->ignoreVCS($this->container->get('hide_vcs_files'));
if ($this->hiddenFiles()->isNotEmpty()) {
$finder->filter(function (SplFileInfo $file): bool {
return ! $this->isHidden($file);
});
}
$sortOrder = $this->container->get('sort_order');
if ($sortOrder instanceof Closure) {
$finder->sort($sortOrder);
} else {
if (! array_key_exists($sortOrder, self::SORT_METHODS)) {
throw new RuntimeException("Invalid sort option '{$sortOrder}'");
}
$this->container->call(self::SORT_METHODS[$sortOrder], [$finder]);
}
if ($this->container->get('reverse_sort')) {
$finder->reverseSorting();
}
return $finder;
}
/**
* Get a collection of hidden file paths.
*
* @return \Tightenco\Collect\Support\Collection
*/
protected function hiddenFiles(): Collection
{
return Collection::make(
$this->container->get('hidden_files')
)->when(is_readable($this->container->get('hidden_files_list')), function (Collection $collection) {
return $collection->merge(
file($this->container->get('hidden_files_list'), FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES)
);
})->when($this->container->get('hide_app_files'), static function (Collection $collection) {
return $collection->merge(self::APP_FILES);
})->unique();
}
/**
* Determine if a file should be hidden.
*
* @param \Symfony\Component\Finder\SplFileInfo $file
*
* @return bool
*/
protected function isHidden(SplFileInfo $file): bool
{
return Glob::pattern(
Glob::escape(
$this->container->get('base_path') . DIRECTORY_SEPARATOR
) . sprintf('{%s}', $this->hiddenFiles()->implode(','))
)->matchStart($file->getRealPath());
}
}

View File

@ -0,0 +1,58 @@
<?php
namespace App\Factories;
use DI\Container;
use RuntimeException;
use Symfony\Component\Translation\Loader\YamlFileLoader;
use Symfony\Component\Translation\Translator;
use Symfony\Contracts\Translation\TranslatorInterface;
use Tightenco\Collect\Support\Collection;
class TranslationFactory
{
/** @const Available translation languages */
protected const LANGUAGES = [
'de', 'en', 'es', 'fr', 'id', 'it', 'kr', 'nl',
'pl', 'pt-BR', 'ro', 'ru', 'zh-CN', 'zh-TW'
];
/** @var Container The applicaiton container */
protected $container;
/**
* Create a new TranslationFactory object.
*
* @param \DI\Container $container
*/
public function __construct(Container $container)
{
$this->container = $container;
}
/**
* Initialize and return the translation component.
*
* @return \Symfony\Contracts\Translation\TranslatorInterface
*/
public function __invoke(): TranslatorInterface
{
$language = $this->container->get('language');
if (! in_array($language, self::LANGUAGES)) {
throw new RuntimeException("Invalid language option '{$language}'");
}
$translator = new Translator($language);
$translator->addLoader('yaml', new YamlFileLoader());
Collection::make(self::LANGUAGES)->each(
function (string $language) use ($translator): void {
$resource = sprintf($this->container->get('translations_path') . '/%s.yaml', $language);
$translator->addResource('yaml', $resource, $language);
}
);
return $translator;
}
}

View File

@ -0,0 +1,83 @@
<?php
namespace App\Factories;
use App\ViewFunctions;
use DI\Container;
use Invoker\CallableResolver;
use Slim\Views\Twig;
use Twig\Extension\CoreExtension;
use Twig\Loader\FilesystemLoader;
use Twig\TwigFunction;
class TwigFactory
{
/** @const Constant description */
protected const VIEW_FUNCTIONS = [
ViewFunctions\Asset::class,
ViewFunctions\Breadcrumbs::class,
ViewFunctions\Config::class,
ViewFunctions\FileUrl::class,
ViewFunctions\Icon::class,
ViewFunctions\Markdown::class,
ViewFunctions\ParentUrl::class,
ViewFunctions\SizeForHumans::class,
ViewFunctions\Translate::class,
ViewFunctions\Url::class,
ViewFunctions\ZipUrl::class,
];
/** @var Container The application container */
protected $container;
/** @var CallableResolver The callable resolver */
protected $callableResolver;
/**
* Create a new TwigFactory object.
*
* @param \DI\Container $container
* @param \Invoker\CallableResolver $callableResolver
*/
public function __construct(
Container $container,
CallableResolver $callableResolver
) {
$this->container = $container;
$this->callableResolver = $callableResolver;
}
/**
* Initialize and return the Twig component.
*
* @return \Slim\Views\Twig
*/
public function __invoke(): Twig
{
$twig = new Twig(new FilesystemLoader(
$this->container->get('views_path')
));
$twig->getEnvironment()->setCache(
$this->container->get('view_cache')
);
$twig->getEnvironment()->getExtension(CoreExtension::class)->setDateFormat(
$this->container->get('date_format'), '%d days'
);
$twig->getEnvironment()->getExtension(CoreExtension::class)->setTimezone(
$this->container->get('timezone')
);
foreach (self::VIEW_FUNCTIONS as $function) {
$function = $this->callableResolver->resolve($function);
$twig->getEnvironment()->addFunction(
new TwigFunction($function->name(), $function)
);
}
return $twig;
}
}

View File

@ -0,0 +1,64 @@
<?php
namespace App\Middlewares;
use Psr\Http\Message\ResponseInterface;
use Psr\Http\Message\ServerRequestInterface as Request;
use Psr\Http\Server\RequestHandlerInterface as RequestHandler;
use Whoops\Handler\JsonResponseHandler;
use Whoops\Handler\PrettyPageHandler;
use Whoops\RunInterface;
class WhoopsMiddleware
{
/** @var RunInterface The Whoops component */
protected $whoops;
/** @var PrettyPageHandler The pretty page handler */
protected $pageHandler;
/** @var JsonResponseHandler The JSON response handler */
protected $jsonHandler;
/**
* Create a new WhoopseMiddleware object.
*
* @param \Whoops\RunInterface $whoops
* @param \Whoops\Handler\PrettyPageHandler $pageHandler
* @param \Whoops\Handler\JsonResponseHandler $jsonHandler
*/
public function __construct(
RunInterface $whoops,
PrettyPageHandler $pageHandler,
JsonResponseHandler $jsonHandler
) {
$this->whoops = $whoops;
$this->pageHandler = $pageHandler;
$this->jsonHandler = $jsonHandler;
}
/**
* Invoke the WhoopseMiddleware class.
*
* @param \Psr\Http\Message\ServerRequestInterface $request
* @param \Psr\Http\Server\RequestHandlerInterface $handler
*
* @return \Psr\Http\Message\ResponseInterface
*/
public function __invoke(Request $request, RequestHandler $handler): ResponseInterface
{
$this->pageHandler->setPageTitle(
sprintf('%s • Directory Lister', $this->pageHandler->getPageTitle())
);
$this->whoops->pushHandler($this->pageHandler);
if (in_array('application/json', explode(',', $request->getHeaderLine('Accept')))) {
$this->whoops->pushHandler($this->jsonHandler);
}
$this->whoops->register();
return $handler->handle($request);
}
}

View File

@ -0,0 +1,20 @@
<?php
namespace App\SortMethods;
use Symfony\Component\Finder\Finder;
class Accessed extends SortMethod
{
/**
* Sort by file accessed time.
*
* @param \Symfony\Component\Finder\Finder $finder
*
* @return void
*/
public function __invoke(Finder $finder): void
{
$finder->sortByAccessedTime();
}
}

View File

@ -0,0 +1,20 @@
<?php
namespace App\SortMethods;
use Symfony\Component\Finder\Finder;
class Changed extends SortMethod
{
/**
* Sory by file changed time.
*
* @param \Symfony\Component\Finder\Finder $finder
*
* @return void
*/
public function __invoke(Finder $finder): void
{
$finder->sortByChangedTime();
}
}

View File

@ -0,0 +1,20 @@
<?php
namespace App\SortMethods;
use Symfony\Component\Finder\Finder;
class Modified extends SortMethod
{
/**
* Sort by file modified time.
*
* @param \Symfony\Component\Finder\Finder $finder
*
* @return void
*/
public function __invoke(Finder $finder): void
{
$finder->sortByModifiedTime();
}
}

View File

@ -0,0 +1,20 @@
<?php
namespace App\SortMethods;
use Symfony\Component\Finder\Finder;
class Name extends SortMethod
{
/**
* Sort by file name.
*
* @param \Symfony\Component\Finder\Finder $finder
*
* @return void
*/
public function __invoke(Finder $finder): void
{
$finder->sortByName();
}
}

View File

@ -0,0 +1,20 @@
<?php
namespace App\SortMethods;
use Symfony\Component\Finder\Finder;
class Natural extends SortMethod
{
/**
* Sort by (natural) file name.
*
* @param \Symfony\Component\Finder\Finder $finder
*
* @return void
*/
public function __invoke(Finder $finder): void
{
$finder->sortByName(true);
}
}

View File

@ -0,0 +1,17 @@
<?php
namespace App\SortMethods;
use Symfony\Component\Finder\Finder;
abstract class SortMethod
{
/**
* Run the sort method.
*
* @param \Symfony\Component\Finder\Finder $finder
*
* @return void
*/
abstract public function __invoke(Finder $finder): void;
}

View File

@ -0,0 +1,20 @@
<?php
namespace App\SortMethods;
use Symfony\Component\Finder\Finder;
class Type extends SortMethod
{
/**
* Sory by file type.
*
* @param \Symfony\Component\Finder\Finder $finder
*
* @return void
*/
public function __invoke(Finder $finder): void
{
$finder->sortByType();
}
}

View File

@ -0,0 +1,34 @@
<?php
namespace App\Support;
class Helpers
{
/**
* Return the value of an environment vairable.
*
* @param string $envar The name of an environment variable
* @param mixed $default Default value to return if no environment variable is set
*
* @return mixed
*/
public static function env($envar, $default = null)
{
$value = getenv($envar);
if ($value === false) {
return $default;
}
switch (strtolower($value)) {
case 'true':
return true;
case 'false':
return false;
case 'null':
return null;
}
return preg_replace('/^"(.*)"$/', '$1', $value);
}
}

View File

@ -0,0 +1,21 @@
<?php
namespace App\Support;
use Tightenco\Collect\Support\Collection;
class Str
{
/**
* Explode a string by a string into a collection.
*
* @param string $string
* @param string $delimiter
*
* @return \Tightenco\Collect\Support\Collection
*/
public static function explode(string $string, string $delimiter): Collection
{
return Collection::make(explode($delimiter, $string));
}
}

View File

@ -0,0 +1,46 @@
<?php
namespace App;
class TemporaryFile
{
/** @var string Path to the temporary file */
protected $path;
/**
* Create a new TemporaryFile object.
*
* @param string $dir
* @param string $prefix
*/
public function __construct(string $dir, string $prefix = '')
{
$this->path = tempnam($dir, $prefix);
}
/** Destroy this TemporaryFile object. */
public function __destruct()
{
unlink($this->path);
}
/**
* Get the path to the temporary file.
*
* @return string
*/
public function __toString(): string
{
return $this->path;
}
/**
* Get the raw contents of the file.
*
* @return string
*/
public function getContents(): string
{
return file_get_contents($this->path);
}
}

View File

@ -0,0 +1,61 @@
<?php
namespace App\ViewFunctions;
use DI\Container;
use Tightenco\Collect\Support\Collection;
class Asset extends ViewFunction
{
/** @var string The function name */
protected $name = 'asset';
/** @var Container The application container */
protected $container;
/**
* Create a new Asset object.
*
* @param \DI\Container $container
*/
public function __construct(Container $container)
{
$this->container = $container;
}
/**
* Return the path to an asset.
*
* @param string $path
*
* @return string
*/
public function __invoke(string $path): string
{
$path = '/' . ltrim($path, '/');
if ($this->mixManifest()->has($path)) {
$path = $this->mixManifest()->get($path);
}
return 'app/assets/' . ltrim($path, '/');
}
/**
* Return the mix manifest collection.
*
* @return \Tightenco\Collect\Support\Collection
*/
protected function mixManifest(): Collection
{
$mixManifest = $this->container->get('asset_path') . '/mix-manifest.json';
if (! is_file($mixManifest)) {
return new Collection;
}
return Collection::make(
json_decode(file_get_contents($mixManifest), true) ?? []
);
}
}

View File

@ -0,0 +1,54 @@
<?php
namespace App\ViewFunctions;
use App\Support\Str;
use DI\Container;
use Tightenco\Collect\Support\Collection;
class Breadcrumbs extends ViewFunction
{
/** @var string The function name */
protected $name = 'breadcrumbs';
/** @var Container The application container */
protected $container;
/** @var string The directory separator */
protected $directorySeparator;
/**
* Create a new Breadcrumbs object.
*
* @param \DI\Container $container
*/
public function __construct(
Container $container,
string $directorySeparator = DIRECTORY_SEPARATOR
) {
$this->container = $container;
$this->directorySeparator = $directorySeparator;
}
/**
* Build an array of breadcrumbs for a given path.
*
* @param string $path
*
* @return array
*/
public function __invoke(string $path)
{
return Str::explode($path, $this->directorySeparator)->diff(
explode($this->directorySeparator, $this->container->get('base_path'))
)->filter(static function (string $crumb): bool {
return ! in_array($crumb, [null, '.']);
})->reduce(function (Collection $carry, string $crumb): Collection {
return $carry->put($crumb, ltrim(
$carry->last() . $this->directorySeparator . rawurlencode($crumb), $this->directorySeparator
));
}, new Collection)->map(static function (string $path): string {
return sprintf('?dir=%s', $path);
});
}
}

View File

@ -0,0 +1,40 @@
<?php
namespace App\ViewFunctions;
use DI\Container;
use DI\NotFoundException;
class Config extends ViewFunction
{
/** @var string The function name */
protected $name = 'config';
/** @var Container The application container */
protected $container;
/**
* Create a new Config object.
*/
public function __construct(Container $container)
{
$this->container = $container;
}
/**
* Retrieve an item from the view config.
*
* @param string $key
* @param mixed $default
*
* @return mixed
*/
public function __invoke(string $key, $default = null)
{
try {
return $this->container->get($key);
} catch (NotFoundException $exception) {
return $default;
}
}
}

View File

@ -0,0 +1,31 @@
<?php
namespace App\ViewFunctions;
class FileUrl extends Url
{
/** @var string The function name */
protected $name = 'file_url';
/**
* Return the URL for a given path and action.
*
* @param string $path
*
* @return string
*/
public function __invoke(string $path = '/'): string
{
$path = $this->stripLeadingSlashes($path);
if (is_file($path)) {
return $this->escape($path);
}
if ($path === '') {
return '';
}
return sprintf('?dir=%s', $this->escape($path));
}
}

View File

@ -0,0 +1,42 @@
<?php
namespace App\ViewFunctions;
use DI\Container;
use Symfony\Component\Finder\SplFileInfo;
class Icon extends ViewFunction
{
/** @var string The function name */
protected $name = 'icon';
/** @var Container The application container */
protected $container;
/**
* Create a new Config object.
*
* @param \DI\Container $container
*/
public function __construct(Container $container)
{
$this->container = $container;
}
/**
* Retrieve the icon markup for a file.
*
* @param \Symfony\Component\Finder\SplFileInfo $file
*
* @return string
*/
public function __invoke(SplFileInfo $file): string
{
$icons = $this->container->get('icons');
$icon = $file->isDir() ? 'fas fa-folder'
: $icons[$file->getExtension()] ?? 'fas fa-file';
return "<i class=\"{$icon} fa-fw fa-lg\"></i>";
}
}

View File

@ -0,0 +1,23 @@
<?php
namespace App\ViewFunctions;
use ParsedownExtra;
class Markdown extends ViewFunction
{
/** @var string The function name */
protected $name = 'markdown';
/**
* Parses a string of markdown into HTML.
*
* @param string $string
*
* @return string
*/
public function __invoke(string $string)
{
return ParsedownExtra::instance()->parse($string);
}
}

View File

@ -0,0 +1,48 @@
<?php
namespace App\ViewFunctions;
use App\Support\Str;
class ParentUrl extends ViewFunction
{
/** @var string The function name */
protected $name = 'parent_url';
/** @var string The directory separator */
protected $directorySeparator;
/**
* Create a new ParentUrl object.
*
* @param string $directorySeparator
*/
public function __construct(string $directorySeparator = DIRECTORY_SEPARATOR)
{
$this->directorySeparator = $directorySeparator;
}
/**
* Get the parent directory for a given path.
*
* @param string $path
*
* @return string
*/
public function __invoke(string $path)
{
$parentDir = Str::explode($path, $this->directorySeparator)->map(
static function (string $segment): string {
return rawurlencode($segment);
}
)->filter(static function (?string $value): bool {
return $value !== null;
})->slice(0, -1)->implode($this->directorySeparator);
if ($parentDir === '') {
return '.';
}
return sprintf('?dir=%s', $parentDir);
}
}

View File

@ -0,0 +1,26 @@
<?php
namespace App\ViewFunctions;
use Symfony\Component\Finder\SplFileInfo;
class SizeForHumans extends ViewFunction
{
/** @var string The function name */
protected $name = 'size_for_humans';
/**
* Get the human readable file size from a file object.
*
* @param SplFileInfo $file A file object
*
* @return string
*/
public function __invoke(SplFileInfo $file): string
{
$sizes = ['B', 'KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB'];
$factor = (int) floor((strlen((string) $file->getSize()) - 1) / 3);
return sprintf('%.2f', $file->getSize() / pow(1024, $factor)) . $sizes[$factor];
}
}

View File

@ -0,0 +1,36 @@
<?php
namespace App\ViewFunctions;
use Symfony\Contracts\Translation\TranslatorInterface;
class Translate extends ViewFunction
{
/** @var string The function name */
protected $name = 'translate';
/** @var TranslatorInterface The application translator */
protected $translator;
/**
* Create a new Translate object.
*
* @param \Symfony\Contracts\Translation\TranslatorInterface $translator
*/
public function __construct(TranslatorInterface $translator)
{
$this->translator = $translator;
}
/**
* Retrieve a translated string by ID.
*
* @param string $id
*
* @return string
*/
public function __invoke(string $id): string
{
return $this->translator->trans($id);
}
}

View File

@ -0,0 +1,64 @@
<?php
namespace App\ViewFunctions;
use App\Support\Str;
class Url extends ViewFunction
{
/** @var string The function name */
protected $name = 'url';
/** @var string The directory separator */
protected $directorySeparator;
/**
* Create a new Url object.
*
* @param string The directory separator
*/
public function __construct(string $directorySeparator = DIRECTORY_SEPARATOR)
{
$this->directorySeparator = $directorySeparator;
}
/**
* Return the URL for a given path.
*
* @param string $path
*
* @return string
*/
public function __invoke(string $path = '/'): string
{
return $this->escape($this->stripLeadingSlashes($path));
}
/**
* Strip all leading slashes (and a single dot) from a path.
*
* @param string $path
*
* @return string
*/
protected function stripLeadingSlashes(string $path): string
{
return preg_replace('/^\.?(\/|\\\)+/', '', $path);
}
/**
* Escape URL characters in path segments.
*
* @param string $path
*
* @return string
*/
protected function escape(string $path): string
{
return Str::explode($path, $this->directorySeparator)->map(
static function (string $segment): string {
return rawurlencode($segment);
}
)->implode($this->directorySeparator);
}
}

View File

@ -0,0 +1,19 @@
<?php
namespace App\ViewFunctions;
abstract class ViewFunction
{
/** @var string The function name */
protected $name = '';
/**
* Get the function name.
*
* @return string
*/
public function name(): string
{
return $this->name;
}
}

View File

@ -0,0 +1,27 @@
<?php
namespace App\ViewFunctions;
class ZipUrl extends Url
{
/** @var string The function name */
protected $name = 'zip_url';
/**
* Return the URL for a given path and action.
*
* @param string $path
*
* @return string
*/
public function __invoke(string $path = '/'): string
{
$path = $this->stripLeadingSlashes($path);
if ($path === '') {
return '?zip=.';
}
return sprintf('?zip=%s', $this->escape($path));
}
}

View File

@ -0,0 +1,19 @@
home: Hauptverzeichnis
download: Laden Sie dieses Verzeichnis herunter
search: Suche
file:
name: Dateiname
size: Größe
date: Datum
info: Dateiinformation
powered_by: Unterstützt von
scroll_to_top: Nach oben Scrollen
error:
directory_not_found: Verzeichnis existiert nicht
file_not_found: Datei nicht gefunden
file_size_exceeded: Dateigröße zu groß
no_results_found: Keine ergebnisse gefunden
unexpected: Ein unerwarteter fehler ist aufgetreten
enable_debugging: Aktivieren sie das "debugging" für zusätzliche informationen

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