Skip to content

Instantly share code, notes, and snippets.

@artzub
Last active December 10, 2015 23:28
Show Gist options
  • Save artzub/4509035 to your computer and use it in GitHub Desktop.
Save artzub/4509035 to your computer and use it in GitHub Desktop.
Work with github api.
.idea/
*.iml
*.iws
/**
* User: ArtZub
* Date: 15.01.13
* Time: 2:13
*/
'use strict';
(function(window) {
var lastTime = 0;
var vendors = ['ms', 'moz', 'webkit', 'o'];
for(var x = 0; x < vendors.length && !window.requestAnimationFrame; ++x) {
window.requestAnimationFrame = window[vendors[x]+'RequestAnimationFrame'];
window.cancelAnimationFrame =
window[vendors[x]+'CancelAnimationFrame'] || window[vendors[x]+'CancelRequestAnimationFrame'];
}
if (!window.requestAnimationFrame)
window.requestAnimationFrame = function(callback, element) {
var currTime = new Date().getTime();
var timeToCall = Math.max(0, 16 - (currTime - lastTime));
var id = window.setTimeout(function() { callback(currTime + timeToCall); },
timeToCall);
lastTime = currTime + timeToCall;
return id;
};
if (!window.cancelAnimationFrame)
window.cancelAnimationFrame = function(id) {
clearTimeout(id);
};
})(window);
var ONE_SECOND = 1000,
ONE_MINUTE = 60 * ONE_SECOND,
ONE_HOUR = 60 * ONE_MINUTE,
ONE_DAY = 24 * ONE_HOUR,
PI_CIRCLE = 2 * Math.PI;
var ghcs = {
users: {},
states: {cur:0, max:0},
limits: {
commits : 100,
stepShow : 1,
stepType : ONE_DAY
},
settings : {
access : {
client_id : "c45417c5d6249959a91d",
client_secret : "4634b3aa7549c3d6306961e819e5ec9b355a6548"
},
cs : {
fileLife : 255 // number of steps of life a file
, userLife : 255 // number of steps of life a user
, edgeLife : 255 // number of steps of life a edge
, showCountExt : true // show table of file's extension
, onlyShownExt : true // show only extension which is shown
, showHistogram : true // displaying histogram of changed files
, showHalo : true // show a file's halo
, padding : 25 // padding around a user
, rateOpacity : .5 // rate of decrease of opacity
, rateFlash : 2.5 // rate of decrease of flash
, sizeFile : 2 // size of file
, sizeUser : 24 // size of user
, showPaddingCircle : false // show circle of padding
, useAvatar : true // show user's avatar
, showEdge : true // show a edge
, showFile : true // show a file
, showUser : true // show a user
, showLabel : true // show user name
, showFilename : true // show file name TODO: надо-ли?
, labelPattern : "%n <%e>" // pattern for label of user
, showCommitMessage : false // show commit message
, skipEmptyDate : true // skip empty date
}
},
asyncForEach: function(items, fn, time) {
if (!(items instanceof Array))
return;
var workArr = items.reverse().concat();
function loop() {
if (workArr.length > 0)
fn(workArr.shift(), workArr);
if (workArr.length > 0)
setTimeout(loop, time || 1);
}
loop();
},
imageHash : d3.map({})
};
(function(ghcs) {
ghcs.storage = sessionStorage;
if (ghcs.storage) {
Storage.prototype.set = function(key, value) {
this.setItem(key, JSON.stringify(value));
};
Storage.prototype.get = function(key) {
var res = this.getItem(key);
return res ? JSON.parse(res) : res;
};
Storage.prototype.setImageData = setImageData;
}
else {
ghcs.storage = d3.map({});
ghcs.storage.clear = function() {
var ks = ghcs.storage.keys,
l = ks.length;
while(--l > -1)
ghcs.storage.remove(ks[l]);
};
ghcs.storage.setImageData = setImageData;
}
var canvas = document.createElement("canvas"),
ctx = canvas.getContext("2d");
/**
* @param url {String}
* @param image {Image}
*/
function setImageData(url, image) {
canvas.width = image.width;
canvas.height = image.height;
ctx.drawImage(image, 0, 0);
ghcs.storage.set(url, canvas.toDataURL("image/png"));
canvas.width = 0;
canvas.height = 0;
}
})(ghcs);
/**
* User: ArtZub
* Date: 15.01.13
* Time: 1:36
*/
'use strict';
var TYPE_REQUEST = {
repos : 1,
commits : 2
}
, TYPE_STATUS_FILE = {
removed : 0,
modified : 1,
added : 2,
renamed : 3
}
;
function makeUrl(url, type, limit) {
limit = limit || 0;
var sec = "client_id=" + ghcs.settings.access.client_id + "&client_secret=" + ghcs.settings.access.client_secret;
if (type == TYPE_REQUEST.repos) {
sec += (ghcs.rot ? "&per_page=100&type=" + ghcs.rot : "" );
}
else if(type == TYPE_REQUEST.commits) {
limit = limit < 0 ? ghcs.limits.commits : limit;
sec += "&per_page=" + (limit > 100 ? 100 : limit)
}
return url ? (url + (url.indexOf('?') === -1 ? '?' : '&') + sec) : url;
}
function crossUrl(url, rt) {
return url;
/*var result = url, arr = /(.*)?\?(.*)/.exec(url);
if (arr) {
result = "http://artzub.com/cross/?"
+ ( rt ? "rt=" + rt + "&" : "" )
+ "u=" + arr[1];
if (arr.length > 2)
result += "&d=" + encodeURIComponent(arr[2]);
}
return result;*/
}
function randTrue() {
return Math.round((Math.random() * 2) % 2);
}
function getDataFromRequest(req) {
return req && req.meta && req.meta.status == 200 && req.data ? req.data : (log(req) && null);
}
function parseCommit(org_commit, commit){
if (!commit || !org_commit || commit.sha != org_commit.sha)
return;
var s = commit.stats = {
f : {
m : 0,
a : 0,
d : 0
},
changes : 0,
additions : 0,
deletions : 0
};
commit.files = org_commit.files.map(function(f) {
if (TYPE_STATUS_FILE[f.status] == undefined)
console.log(f.status);
f.status = TYPE_STATUS_FILE[f.status];
if (f.changes > 0) {
s.changes += f.changes;
s.additions += f.additions;
s.deletions += f.deletions;
}
else if(f.status) {
commit.stats.changes++;
commit.stats.additions++;
}
else if(!f.status) {
commit.stats.changes -= commit.stats.changes ? 1 : 0;
commit.stats.additions -= commit.stats.additions ? 1 : 0;
}
(f.status == TYPE_STATUS_FILE.modified || f.status == TYPE_STATUS_FILE.renamed) && s.f.m++;
f.status == TYPE_STATUS_FILE.added && s.f.a++;
!f.status && s.f.d++;
return {
name : f.filename.toLowerCase(),
changes : f.changes || 0,
additions : f.additions || 0,
deletions : f.deletions || 0,
status : f.status
}
});
ghcs.repo.stats = ghcs.repo.stats || {};
ghcs.repo.stats.changes = d3.max([ghcs.repo.stats.changes || 0, commit.stats.deletions, commit.stats.additions]);
ghcs.repo.stats.files = d3.max([ghcs.repo.stats.files || 0, s.f.a + s.f.m, s.f.d]);
}
function upCommits() {
redrawStats();
updateStatus(ghcs.states.cur++);
ldrTop.show();
psBar.show();
checkCompleted();
}
function preloadImage(url) {
var ava, image;
image = ghcs.imageHash.get(url);
if (!image) {
image = new Image();
//ava = ghcs.storage.get(url);
//if (!ava) {
image.onerror = function () {
return console.log(this);
};
/*image.onload = (function (url) {
return function () {
if (url)
ghcs.storage.setImageData(url, this);
};
})(url);*/
image.src = crossUrl((url || (url = "https://secure.gravatar.com/avatar/" + Date.now() + Date.now() + "?d=identicon&f=y")) + "&s=48", "image");
/*}
else {
image.src = ava;
}*/
ghcs.imageHash.set(url, image);
}
return image;
}
function parseCommits(commits) {
ghcs.repo.commits = ghcs.repo.commits || d3.map({});
if (commits && commits.length) {
updateStatus(ghcs.states.cur);
psBar.show();
ldrTop.show();
commits.forEach(function(d, i) {
var obj = ghcs.repo.commits.get(d.sha);
if (!obj) {
obj = {
url : d.url,
sha : d.sha,
author : {
name : d.commit.author.name,
email : d.commit.author.email,
login : d.author && d.author.login ? d.author.login : d.commit.author.email
},
committer : {
name : d.commit.committer.name,
email : d.commit.committer.email,
login : d.committer && d.committer.login ? d.committer.login : d.commit.committer.email
},
date : Date.parse(d.commit.author.date),
avatar_url : (d.author && d.author.avatar_url ? d.author.avatar_url : null),
message : d.commit.message,
parents : d.parents
};
ghcs.repo.commits.set(obj.sha, obj);
obj.author.avatar = preloadImage(obj.avatar_url);
}
if (!obj.files) {
JSONP(makeUrl(obj.url), (function(c) {
ghcs.repo.dates.push(c.date);
ghcs.repo.dates.sort(d3.ascending);
return function(req) {
parseCommit(getDataFromRequest(req), ghcs.repo.commits.get(c.sha));
upCommits();
};
})(obj), {
onerror : function(err) {
console.log(err);
upCommits();
}
});
}
else {
upCommits();
}
});
}
else {
upCommits();
}
}
function clearUserRepos() {
if (ghcs.users.hasOwnProperty(ghcs.login) && ghcs.users[ghcs.login].hasOwnProperty("repos"))
delete ghcs.users[ghcs.login]["repos"]
}
function parseRepos(data) {
if (data) {
ghcs.users[ghcs.login] = ghcs.users[ghcs.login] || {};
ghcs.users[ghcs.login].repos = (ghcs.users[ghcs.login].repos || []).concat(
data.filter(function (d) {
return !d.private && !d.hasOwnProperty("nodeValue");
}).map(function (d) {
return {
x : (Math.random() * w) || 1,
y : (Math.random() * h) || 1,
nodeValue : {
id: d.id,
name: d.name,
url: d.url,
html_url: d.html_url,
commits_url : d.commits_url.replace(/{.*$/, ""),
size : d.size,
date : Date.parse(d.pushed_at || d.updated_at),
cdate : Date.parse(d.created_at),
desc : d.description,
lang : d.language || "Multi"
}
};
})
);
ghcs.states.cur = ghcs.users[ghcs.login].repos.length;
}
updateStatus(ghcs.states.cur, "loading ...");
ldrTop.show();
psBar.show();
checkCompleted();
redrawRepos();
}
function chSelect(e) {
if (e) {
ghcs.repo = e.nodeValue;
ghcs.repo.dates = [];
ghcs.repo.changes = [];
runBtn.enable();
curRep.setName(e);
}
else {
ghcs.repo = null;
runBtn.disable();
curRep.setName(null);
stepsBar.secondStep();
}
}
function chUser() {
if (ghcs.chUserTimer) {
clearTimeout(ghcs.chUserTimer);
delete ghcs.chUserTimer;
}
ghcs.chUserTimer = setTimeout((function (login) {
return function () {
if (login) {
stepsBar.firstStep();
curRep.setName(null);
vis.clearRepos();
userTxt.disable();
showBtn.disable();
runBtn.disable();
ghcs.login = login;
ghcs.repo = null;
redrawStats();
ghcs.states.complete = function() {
stepsBar.secondStep();
ldrTop.hide();
setTimeout(nextStepApplyParams, 500);
};
cbDlr.check();
if (!ghcs.users.hasOwnProperty(login) || !ghcs.users[login].hasOwnProperty("repos")) {
ldrTop.show();
JSONP(makeUrl("https://api.github.com/users/" + login), function (req) {
var data = getDataFromRequest(req);
if (!data) {
parseRepos(null);
return;
}
var u = ghcs.users[data.login] = {info: data};
u.info.avatar = new Image();//preloadeImage(u.info.avatar_url);
u.info.avatar.src = u.info.avatar_url;
ghcs.login = data.login;
ghcs.states.max = +u.info.public_repos;
ghcs.states.cur = 0;
updateStatus(ghcs.states.cur, "loading ...");
psBar.show();
if (data.repos_url)
JSONP(makeUrl(data.repos_url, TYPE_REQUEST.repos), function getAll(req) {
parseRepos(getDataFromRequest(req));
getNext(req, function(next) {
if (next) {
ldrTop.show();
JSONP(next, getAll);
}
});
divStat.updateInfo();
}, {
onerror : function(err) {
console.log(err);
}
});
else
parseRepos(null);
divStat.updateInfo();
});
}
else {
ghcs.states.max = ghcs.users[login].repos ? ghcs.users[login].repos.length : 0;
parseRepos(ghcs.users[login].repos);
}
divStat.updateInfo();
userTxt.enable();
}
}
})(userTxt.property("value")), 300);
}
function getNext(req, fn) {
var next;
if (req && req.meta && req.meta.Link) {
next = req.meta.Link.reduce(function (a, b) {
if (!a && b[1].rel == "next")
return b[0];
return a;
}, null);
}
fn && fn(next);
}
function analyseCommits() {
runBtn.disable();
ldrTop.show();
ghcs.states.max = ghcs.limits.commits;
ghcs.states.cur = 0;
ghcs.states.loaded = 0;
ghcs.states.complete = function() {
stepsBar.thirdStep();
runBtn.enable();
ldrTop.hide();
visBtn.enable();
if (ghcs.repo && ghcs.repo.commits)
ghcs.repo.commitsCount = ghcs.repo.commits.values().filter(function(d) {
return !!d.files;
}).length;
vis.redrawStat(ghcs.repo);
setTimeout(nextStepApplyParams, 500);
};
vis.layers.stat.toFront();
cbDlsr.check();
if (!ghcs.repo || !ghcs.repo.commits_url || ghcs.repo.loadedAll) {
updateStatus(ghcs.states.cur = ghcs.states.max);
checkCompleted();
return;
}
JSONP(makeUrl(ghcs.repo.commits_url, TYPE_REQUEST.commits, ghcs.limits.commits), function getAll(req) {
getNext(req, function(next) {
var l = req && req.data && req.data instanceof Array ? req.data.length : 0;
ghcs.states.loaded += l;
l = ghcs.states.max - ghcs.states.loaded;
if (next && l > 0) {
updateStatus(ghcs.states.cur);
psBar.show();
ldrTop.show();
JSONP(next.replace("per_page=100", "per_page=" + (l > 100 ? 100 : l)),
getAll, {
onerror : (function(len) {
return function() {
ghcs.states.max -= len;
};
})(l)
});
}
else {
if (!next)
ghcs.repo.loadedAll = true;
ghcs.states.max =
ghcs.states.loaded;
}
});
parseCommits(getDataFromRequest(req));
});
}
Display the source blob
Display the rendered blob
Raw
<?xml version="1.0" standalone="no"?>
<!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">
<metadata></metadata>
<defs>
<font id="octiconsregular" horiz-adv-x="2048" >
<font-face units-per-em="2048" ascent="1638" descent="-410" />
<missing-glyph horiz-adv-x="500" />
<glyph />
<glyph />
<glyph unicode="&#xd;" />
<glyph unicode="&#xe000;" horiz-adv-x="500" d="M0 0z" />
<glyph unicode="&#xf000;" d="M1792 1664v-1536q0 -5 -1 -13.5t-7.5 -31t-18.5 -39t-38.5 -30.5t-62.5 -14h-640v-256l-192 192l-192 -192v256h-256q-26 0 -47 7t-34 18.5t-23 25t-14 27t-6.5 25t-3.5 18.5v7v1536q0 26 7 47t18.5 34t25 23t27 14t25 6.5t18.5 3.5h7h1280q48 0 88 -40t40 -88zM384 512 h128v1152h-128v-1152zM896 768h512v384q0 96 -80 176t-176 80t-176 -80t-80 -176v-384zM1280 1152h-256q0 48 40 88t88 40t88 -40t40 -88zM1024 128h512q5 0 13.5 1t31 7.5t39 18.5t30.5 38.5t14 62.5v128h-1280v-128q0 -5 1 -13.5t7.5 -31t18.5 -39t38.5 -30.5t62.5 -14 h128v128h384v-128z" />
<glyph unicode="&#xf001;" d="M1792 1664v-1536q0 -5 -1 -13.5t-7.5 -31t-18.5 -39t-38.5 -30.5t-62.5 -14h-640v-256l-192 192l-192 -192v256h-256q-26 0 -47 7t-34 18.5t-23 25t-14 27t-6.5 25t-3.5 18.5v7v1536q0 26 7 47t18.5 34t25 23t27 14t25 6.5t18.5 3.5h7h1280q5 0 13.5 -1t31 -7.5t39 -18.5 t30.5 -38.5t14 -62.5zM1664 1664h-1024v-1152h1024v1152zM896 1408h-128v128h128v-128zM896 1152h-128v128h128v-128zM896 896h-128v128h128v-128zM896 640h-128v128h128v-128zM1024 128h512q5 0 13.5 1t31 7.5t39 18.5t30.5 38.5t14 62.5v128h-1280v-128q0 -5 1 -13.5 t7.5 -31t18.5 -39t38.5 -30.5t62.5 -14h128v128h384v-128z" />
<glyph unicode="&#xf002;" d="M1792 1664v-1536q0 -5 -1 -13.5t-7.5 -31t-18.5 -39t-38.5 -30.5t-62.5 -14h-640v-256l-192 192l-192 -192v256h-256q-26 0 -47 7t-34 18.5t-23 25t-14 27t-6.5 25t-3.5 18.5v7v1536q0 26 7 47t18.5 34t25 23t27 14t25 6.5t18.5 3.5h7h1280q48 0 88 -40t40 -88z M1664 1664h-1024v-1152h1024v1152zM1024 896l-256 256v384h256v-256l128 -128l128 128v256h256v-384l-256 -256v-256h-256v256zM1024 128h512q5 0 13.5 1t31 7.5t39 18.5t30.5 38.5t14 62.5v128h-1280v-128q0 -5 1 -13.5t7.5 -31t18.5 -39t38.5 -30.5t62.5 -14h128v128h384 v-128z" />
<glyph unicode="&#xf003;" d="M1792 896v-768q0 -5 -1 -13.5t-7.5 -31t-18.5 -39t-38.5 -30.5t-62.5 -14h-640v-256l-192 192l-192 -192v256h-256q-26 0 -47 7t-34 18.5t-23 25t-14 27t-6.5 25t-3.5 18.5v7v1536q0 26 7 47t18.5 34t25 23t27 14t25 6.5t18.5 3.5h7h768v-128h-512v-1152h1024v384h128z M1920 1536v-256h-256v-256h-256v256h-256v256h256v256h256v-256h256zM896 1408h-128v128h128v-128zM896 1152h-128v128h128v-128zM896 896h-128v128h128v-128zM768 768h128v-128h-128v128zM1024 128h512q5 0 13.5 1t31 7.5t39 18.5t30.5 38.5t14 62.5v128h-1280v-128 q0 -5 1 -13.5t7.5 -31t18.5 -39t38.5 -30.5t62.5 -14h128v128h384v-128z" />
<glyph unicode="&#xf004;" d="M1536 1664h-1280l128 128h1152v-128zM640 1408h-384v128h384v-128zM896 1408h-128v128h128v-128zM1920 1536v-256h-768v256h768zM640 1152h-384v128h384v-128zM896 1152h-128v128h128v-128zM640 896h-384v128h384v-128zM896 896h-128v128h128v-128zM640 640h-384v128h384 v-128zM768 768h128v-128h-128v128zM1664 768h128v-128h-128v128zM256 512h1536v-128h-1536v128zM256 256h1536l-128 -128h-1280zM640 0h128l-128 -128v128zM896 0h128v-128z" />
<glyph unicode="&#xf005;" d="M1792 1664v-1536q0 -5 -1 -13.5t-7.5 -31t-18.5 -39t-38.5 -30.5t-62.5 -14h-256v128h128q5 0 13.5 1t31 7.5t39 18.5t30.5 38.5t14 62.5v128h-256v128h256v1152h-1024v-1152h256v-128h-512v-128q0 -5 1 -13.5t7.5 -31t18.5 -39t38.5 -30.5t62.5 -14h128v128h256v-256 l-256 -256v256h-256q-26 0 -47 7t-34 18.5t-23 25t-14 27t-6.5 25t-3.5 18.5v7v1536q0 26 7 47t18.5 34t25 23t27 14t25 6.5t18.5 3.5h7h1280q5 0 13.5 -1t31 -7.5t39 -18.5t30.5 -38.5t14 -62.5zM896 1408h-128v128h128v-128zM768 1280h128v-128h-128v128zM1536 640h-256 v-896h-256v896h-256l384 512z" />
<glyph unicode="&#xf006;" d="M1536 896v-384v-384q0 -5 -1 -13.5t-7.5 -31t-18.5 -39t-38.5 -30.5t-62.5 -14h-640v-256l-192 192l-192 -192v256h-256q-26 0 -47 7t-34 18.5t-23 25t-14 27t-6.5 25t-3.5 18.5v7v1536q0 26 7 47t18.5 34t25 23t27 14t25 6.5t18.5 3.5h7h1280q5 0 13.5 -1t31 -7.5 t39 -18.5t30.5 -38.5t14 -62.5v-256h-128v256h-1024v-1152h1024v384h128zM640 1408h-128v128h128v-128zM1664 768v256h-768v256h768v256l384 -384zM640 1152h-128v128h128v-128zM640 896h-128v128h128v-128zM512 768h128v-128h-128v128zM768 128h512q5 0 13.5 1t31 7.5 t39 18.5t30.5 38.5t14 62.5v128h-1280v-128q0 -5 1 -13.5t7.5 -31t18.5 -39t38.5 -30.5t62.5 -14h128v128h384v-128z" />
<glyph unicode="&#xf007;" d="M2048 1280v-1152h-256l-128 128h-384l-128 -128h-256l-128 128h-384l-128 -128h-256v1152l256 256h640l128 -128l128 128h640zM1920 1280l-128 128h-640l-128 -128l-128 128h-640l-128 -128v-896l128 128h512l128 -128h128v-128h128v128l128 128h512l128 -128v896z M256 1280h512v-128h-512v128zM1024 1152v128h128v-128h-128zM1280 1280h512v-128h-512v128zM896 1152h128v-128h-128v128zM256 1024h512v-128h-512v128zM1024 896v128h128v-128h-128zM1280 1024h512v-128h-512v128zM896 896h128v-128h-128v128zM256 768h512v-128h-512v128z M1024 640v128h128v-128h-128zM1280 768h512v-128h-512v128zM896 640h128v-128h-128v128zM1152 512v-128h-128v128h128z" />
<glyph unicode="&#xf008;" d="M1882 1237q166 -181 166 -429q0 -139 -26 -251.5t-72.5 -195.5t-118 -146t-155 -103t-190.5 -65t-218 -35t-245 -10q-133 0 -244 10t-217.5 35t-189.5 65t-154 103t-117 146t-72 195.5t-26 251.5q0 248 166 429q-9 24 -16.5 54.5t-14 87t5 130.5t42.5 151q6 2 16.5 3.5 t50.5 -2.5t86 -17.5t123.5 -52t162.5 -96.5q146 40 400 40q255 0 401 -40q85 58 161.5 96.5t125 52t85 18t52.5 1.5l15 -3q31 -77 42.5 -151t5 -130.5t-14 -87t-16.5 -54.5zM1019 128q107 0 176.5 2t158 11.5t145 26.5t116 48.5t93 76.5t55 111.5t21.5 152.5q0 146 -131 264 q-39 36 -91 54.5t-117.5 21t-125.5 -1t-148 -9.5t-152 -6t-152 6t-148 9.5t-125.5 1t-117.5 -21t-91 -54.5q-131 -120 -131 -264q0 -86 21.5 -152.5t55 -111.5t93 -76.5t116 -48.5t145 -26.5t158 -11.5t176.5 -2zM699 768q64 0 108.5 -66.5t44.5 -161.5t-44.5 -161.5 t-108.5 -66.5t-109 67t-45 161t45 161t109 67zM1341 768q64 0 109 -67t45 -161t-45 -161t-109 -67q-63 0 -108 67t-45 161t45 161t108 67z" />
<glyph unicode="&#xf009;" d="M1022 1792q208 0 397 -81t325.5 -217.5t217.5 -326t81 -397.5t-81 -397.5t-217.5 -327.5t-325.5 -219.5t-397 -81.5t-397.5 81.5t-326 219.5t-217.5 327.5t-81 397.5t81 397.5t217.5 326t326 217.5t397.5 81zM1277 100v-164q268 96 437 323t169 511q0 175 -68.5 335 t-183.5 275t-274.5 183.5t-334.5 68.5t-335 -68.5t-275 -183.5t-183.5 -275t-68.5 -335q0 -288 172 -515.5t444 -318.5v164q0 122 82 178q-52 5 -95.5 14t-92 26t-87 40.5t-74 61t-59.5 85t-38 114t-14 146.5q0 155 101 264q-46 119 10 261q3 1 10 2t31.5 -1t53 -10.5 t76 -32t100.5 -59.5q117 33 246 33q128 0 247 -33q84 57 151.5 82t93.5 22l25 -3q56 -141 10 -261q101 -109 101 -264q0 -80 -14 -146.5t-38 -114t-59.5 -85t-74 -61t-87 -40.5t-92 -26t-95.5 -14q83 -57 83 -178z" />
<glyph unicode="&#xf00a;" d="M761 93v-285q-215 31 -390 169.5t-273 347t-98 443.5q0 208 81 397.5t217.5 326.5t326 218t397.5 81q207 0 396 -81t326 -218t218 -326.5t81 -397.5q0 -235 -98 -443.5t-273 -347t-390 -169.5v285q0 127 -86 186q78 8 139.5 23t127.5 51t110 88.5t72.5 140.5t28.5 204 q0 159 -105 274q47 126 -10 272q-4 1 -10.5 2t-32 -1.5t-55.5 -11t-79.5 -33t-104.5 -61.5q-125 34 -255 34q-131 0 -256 -34q-55 37 -104 61.5t-80 33t-54 11.5t-33 1l-10 -2q-58 -146 -11 -272q-105 -115 -105 -274q0 -116 28.5 -204t72.5 -140.5t110 -88.5t127.5 -51 t139.5 -23q-85 -59 -86 -186z" />
<glyph unicode="&#xf00b;" d="M768 521v-130q-160 23 -267 142q-60 -21 -117 -21q-159 0 -271.5 112.5t-112.5 271.5t112.5 271.5t271.5 112.5q8 0 51 -5q75 174 234.5 281.5t354.5 107.5t354.5 -107.5t234.5 -281.5q43 5 51 5q159 0 271.5 -112.5t112.5 -271.5t-112.5 -271.5t-271.5 -112.5 q-1 0 -3 0.5t-3 0.5q-131 -129 -314 -129q-22 0 -64 6v130q34 -8 64 -8q79 0 148 36.5t113 99.5q30 -8 59 -8q106 0 181 75t75 181t-75 181t-181 75q-73 0 -139 -41q-31 182 -172 303.5t-329 121.5t-329.5 -121t-173.5 -303q-64 40 -137 40q-106 0 -181 -75t-75 -181 t75 -181t181 -75q87 0 159 57q32 -68 91 -114t134 -62zM1152 256h256l-384 -384l-384 384h256v640h256v-640z" />
<glyph unicode="&#xf00c;" d="M768 393v-130q-160 23 -267 142q-60 -21 -117 -21q-159 0 -271.5 112.5t-112.5 271.5t112.5 271.5t271.5 112.5q8 0 51 -5q75 174 234.5 281.5t354.5 107.5t354.5 -107.5t234.5 -281.5q43 5 51 5q159 0 271.5 -112.5t112.5 -271.5t-112.5 -271.5t-271.5 -112.5 q-1 0 -3 0.5t-3 0.5q-131 -129 -314 -129q-22 0 -64 6v130q34 -8 64 -8q79 0 148 36.5t113 99.5q30 -8 59 -8q106 0 181 75t75 181t-75 181t-181 75q-73 0 -139 -41q-31 182 -172 303.5t-329 121.5t-329.5 -121t-173.5 -303q-64 40 -137 40q-106 0 -181 -75t-75 -181 t75 -181t181 -75q87 0 159 57q32 -68 91 -114t134 -62zM1408 640h-256v-640h-256v640h-256l384 384z" />
<glyph unicode="&#xf00d;" d="M2048 1536v-1536h-2048v1536h2048zM1920 1408h-1792v-1280h1792v1280zM512 1024h-256v256h256v-256zM768 1024h-128v256h128v-256zM1024 1024h-128v256h128v-256zM1280 1024h-128v256h128v-256zM1536 1024h-128v256h128v-256zM1536 896h128v384h128v-640h-256v256z M384 640h-128v256h128v-256zM512 896h128v-256h-128v256zM768 896h128v-256h-128v256zM1024 896h128v-256h-128v256zM1280 896h128v-256h-128v256zM384 256h-128v256h128v-256zM512 512h128v-256h-128v256zM768 512h640v-256h-640v256zM1536 512h256v-256h-256v256z" />
<glyph unicode="&#xf00e;" d="M1792 1664v-1664h-1536v1664h1536zM1664 1536h-1280v-1408h1280v1408zM1536 1280h-1024q0 5 1 13.5t7.5 31t18.5 39t38.5 30.5t62.5 14h768q26 0 47 -7t34 -18.5t23 -25t14 -27t6.5 -25t3.5 -18.5v-7zM832 384l-320 320l320 320l128 -128l-192 -192l192 -192zM1216 1024 l320 -320l-320 -320l-128 128l192 192l-192 192z" />
<glyph unicode="&#xf00f;" d="M1792 1664v-1664h-1536v1664h1536zM1664 1536h-1280v-1408h1280v1408zM1536 1280h-1024q0 5 1 13.5t7.5 31t18.5 39t38.5 30.5t62.5 14h768q26 0 47 -7t34 -18.5t23 -25t14 -27t6.5 -25t3.5 -18.5v-7zM768 384v384q0 96 80 176t176 80t176 -80t80 -176v-384h-512z M896 768h256q0 48 -40 88t-88 40t-88 -40t-40 -88z" />
<glyph unicode="&#xf010;" d="M1792 1280v-1408h-1536v1792h1152zM1664 1152l-384 384h-896v-1536h1280v1152zM960 896l-192 -192l192 -192l-128 -128l-320 320l320 320zM1216 1024l320 -320l-320 -320l-128 128l192 192l-192 192z" />
<glyph unicode="&#xf011;" d="M1792 1280v-1408h-1536v1792h1152zM1664 1152l-384 384h-896v-1536h1280v1152zM1152 1152h-640v128h640v-128zM512 896h1024v-128h-1024v128zM512 640h1024v-128h-1024v128zM512 384h1024v-128h-1024v128z" />
<glyph unicode="&#xf012;" d="M1792 -128v1408l-384 384h-1152v-1792h1536zM1664 0h-1280v1536h896l384 -384v-1152zM512 256h256q0 96 80 176t176 80q-96 0 -176 80t-80 176t80 176t176 80t176 -80t80 -176t-80 -176t-176 -80q96 0 176 -80t80 -176h256v768l-256 256h-768v-1024z" />
<glyph unicode="&#xf013;" d="M1792 1280v-1408h-1536v1792h1152zM1664 1152l-384 384h-384v-128h-128v128h-384v-1536h1280v1152zM640 1408h128v-128h-128v128zM768 1152v128h128v-128h-128zM640 1152h128v-128h-128v128zM768 896v128h128v-128h-128zM640 896h128v-128h-128v128zM768 640v128h128 v-128h-128zM640 640h128v-128h128l128 -128v-256h-512v256l128 128v128zM640 384v-128h256v128h-256z" />
<glyph unicode="&#xf014;" d="M1792 1280v-1408h-1536v1792h1152zM384 1536v-1201q93 81 215 120q29 51 128.5 262.5t130.5 314.5q-34 117 -43 230.5t11 187.5q19 71 70 86h-512zM1664 1152l-384 384h-324q49 0 81 -36.5t23 -109.5q8 -140 -26 -347q18 -51 37 -95t38.5 -77.5t37 -60t38.5 -47.5 l34.5 -34.5t34 -26t28.5 -17.5t26.5 -13.5t20.5 -9.5q84 9 157 9q100 0 178 -50v531zM950 921q-35 -135 -186 -437l-8 -17q79 35 164.5 59t135.5 33t165 27q-8 4 -29.5 12.5t-31 13t-30 17.5t-33 26t-32.5 38t-36 55t-37 74t-42 99zM1664 0v397q-35 -5 -48 -4 q-65 4 -161 30.5t-174 65.5q-187 -19 -375 -66q-2 -1 -27 -9.5t-60.5 -21.5t-69.5 -27q-68 -115 -126.5 -192t-102 -112.5t-73.5 -48t-59 -12.5q-1 0 -2 0.5t-2 0.5v-1h1280z" />
<glyph unicode="&#xf015;" d="M1920 640l-768 -768l-1024 1024v512l256 256h512zM1152 64l564 576l-896 896h-372l-192 -192v-384zM768 1216q0 -80 -56 -136t-136 -56t-136 56t-56 136t56 136t136 56t136 -56t56 -136zM576 1152q26 0 45 19t19 45t-19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19z M1536 640l-384 -384l-512 512l384 384zM1152 452l196 188l-324 324l-192 -196z" />
<glyph unicode="&#xf016;" d="M128 128v1280q0 5 1 13.5t7.5 31t18.5 39t38.5 30.5t62.5 14h640q5 0 13.5 -1t31 -7.5t39 -18.5t30.5 -38.5t14 -62.5q0 -5 1 -13.5t7.5 -31t18.5 -39t38.5 -30.5t62.5 -14h640q5 0 13.5 -1t31 -7.5t39 -18.5t30.5 -38.5t14 -62.5v-1024h-1792zM896 1408h-640v-128h640 v128z" />
<glyph unicode="&#xf017;" d="M128 128v1280q0 5 1 13.5t7.5 31t18.5 39t38.5 30.5t62.5 14h640q5 0 13.5 -1t31 -7.5t39 -18.5t30.5 -38.5t14 -62.5q0 -5 1 -13.5t7.5 -31t18.5 -39t38.5 -30.5t62.5 -14h640q5 0 13.5 -1t31 -7.5t39 -18.5t30.5 -38.5t14 -62.5v-256h-384q0 5 -1 13.5t-7.5 31 t-18.5 39t-38.5 30.5t-62.5 14h-512q-5 0 -13.5 -1t-31 -7.5t-39 -18.5t-30.5 -38.5t-14 -62.5v-768h-640zM896 1408h-640v-128h640v128zM1408 768h384q5 0 13.5 -1t31 -7.5t39 -18.5t30.5 -38.5t14 -62.5v-512h-1024v640q0 5 1 13.5t7.5 31t18.5 39t38.5 30.5t62.5 14h256 q26 0 47 -7t34 -18.5t23 -25t14 -27t6.5 -25t3.5 -18.5v-7zM1280 768h-256v-128h256v128z" />
<glyph unicode="&#xf018;" d="M1408 1408q0 -159 -112.5 -271.5t-271.5 -112.5t-271.5 112.5t-112.5 271.5t112.5 271.5t271.5 112.5t271.5 -112.5t112.5 -271.5zM1024 1152q106 0 181 75t75 181t-75 181t-181 75t-181 -75t-75 -181t75 -181t181 -75zM768 1024h512q106 0 181 -75t75 -181v-256 q0 -106 -75 -181t-181 -75v-512h-512v512q-106 0 -181 75t-75 181v256q0 106 75 181t181 75zM1408 512v256q0 53 -37.5 90.5t-90.5 37.5h-512q-53 0 -90.5 -37.5t-37.5 -90.5v-256q0 -53 37.5 -90.5t90.5 -37.5v256h128v-768h256v768h128v-256q53 0 90.5 37.5t37.5 90.5z " />
<glyph unicode="&#xf019;" d="M735 1157q-33 -60 -92.5 -96.5t-130.5 -36.5q-106 0 -181 75t-75 181t75 181t181 75q76 0 139 -41q30 129 134 213t239 84t239 -84t134 -213q63 41 139 41q106 0 181 -75t75 -181t-75 -181t-181 -75q-71 0 -130.5 36.5t-92.5 96.5q-117 -133 -289 -133t-289 133z M1024 1664q-106 0 -181 -75t-75 -181t75 -181t181 -75t181 75t75 181t-75 181t-181 75zM512 1152q53 0 90.5 37.5t37.5 90.5t-37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5zM1536 1408q-53 0 -90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5 t90.5 37.5t37.5 90.5t-37.5 90.5t-90.5 37.5zM384 1024h1280q106 0 181 -75t75 -181v-128q0 -69 -35 -127.5t-93 -92.5v-420h-512v-256h-512v256h-512v420q-58 34 -93 92.5t-35 127.5v128q0 106 75 181t181 75zM640 128v164q-58 34 -93 92.5t-35 127.5v256q0 66 36 128h-164 q-53 0 -90.5 -37.5t-37.5 -90.5v-128h128v-512h256zM1280 640v-256q53 0 90.5 37.5t37.5 90.5v256q0 53 -37.5 90.5t-90.5 37.5h-512q-53 0 -90.5 -37.5t-37.5 -90.5v-256q0 -53 37.5 -90.5t90.5 -37.5v256h128v-768h256v768h128zM1792 640v128q0 53 -37.5 90.5t-90.5 37.5 h-164q36 -59 36 -128v-256q0 -69 -35 -127.5t-93 -92.5v-164h256v512h128z" />
<glyph unicode="&#xf01a;" d="M1024 1408q0 -159 -112.5 -271.5t-271.5 -112.5t-271.5 112.5t-112.5 271.5t112.5 271.5t271.5 112.5t271.5 -112.5t112.5 -271.5zM640 1152q106 0 181 75t75 181t-75 181t-181 75t-181 -75t-75 -181t75 -181t181 -75zM1920 1408v-256h-256v-256h-256v256h-256v256h256 v256h256v-256h256zM384 1024h512q106 0 181 -75t75 -181v-256q0 -106 -75 -181t-181 -75v-512h-512v512q-106 0 -181 75t-75 181v256q0 106 75 181t181 75zM1024 512v256q0 53 -37.5 90.5t-90.5 37.5h-512q-53 0 -90.5 -37.5t-37.5 -90.5v-256q0 -53 37.5 -90.5t90.5 -37.5 v256h128v-768h256v768h128v-256q53 0 90.5 37.5t37.5 90.5z" />
<glyph unicode="&#xf01b;" d="M896 1664h-512l256 128zM256 1408l-2 123l130 5v-128h-128zM1024 1408h-128v128h128v-128zM1920 1408v-256h-768v256h768zM384 1280l128 -128h-128l-128 128h128zM896 1280h128l-128 -128h-128zM896 1024l256 -128h-1024l256 128h512zM128 768h128v-128h-128v128z M1024 768h128v-128h-128v128zM128 512h128v-128h-128v128zM512 384h-128v128h128v-128zM768 512h128v-128h-128v128zM1024 512h128v-128h-128v128zM384 256h128v-128h-128v128zM768 256h128v-128h-128v128zM384 0h512v-128h-512v128z" />
<glyph unicode="&#xf01c;" d="M1792 1408q0 -159 -112.5 -271.5t-271.5 -112.5t-271.5 112.5t-112.5 271.5t112.5 271.5t271.5 112.5t271.5 -112.5t112.5 -271.5zM1408 1152q106 0 181 75t75 181t-75 181t-181 75t-181 -75t-75 -181t75 -181t181 -75zM384 1152l384 -384l-384 -384v256h-256v256h256 v256zM1152 1024h512q106 0 181 -75t75 -181v-256q0 -106 -75 -181t-181 -75v-512h-512v512q-106 0 -181 75t-75 181v256q0 106 75 181t181 75zM1792 512v256q0 53 -37.5 90.5t-90.5 37.5h-512q-53 0 -90.5 -37.5t-37.5 -90.5v-256q0 -53 37.5 -90.5t90.5 -37.5v256h128v-768 h256v768h128v-256q53 0 90.5 37.5t37.5 90.5z" />
<glyph unicode="&#xf01d;" d="M2048 1536v-256h-256v-256h-256v256h-256v256h256v256h256v-256h256zM1920 896v125q40 -62 72 -125.5t44 -95.5l12 -32q-5 -13 -15.5 -36t-51 -89.5t-90.5 -127t-136.5 -134.5t-186 -127t-242.5 -89.5t-302 -36.5q-125 0 -240 22t-204 59t-168 85t-136.5 101t-105 106 t-78.5 101t-52.5 85t-30.5 59l-9 22q3 10 9.5 27t31 69.5t54 103.5t79.5 120t106.5 128.5t136.5 120t168 103t202 69.5t237 27h32l65 -260q-41 4 -97 4q-102 0 -193.5 -17.5t-160 -47t-128 -68t-100.5 -81t-74.5 -85t-54 -81t-34 -68t-18.5 -46.5l-5 -18q2 -7 5.5 -18 t18 -46t33.5 -69t53 -80t74.5 -85.5t100.5 -80t128 -69t160 -46.5t195 -18t195 17.5t160.5 47t128 68t100.5 81t74 85t53 81t33.5 68t18.5 46.5l5 18q-9 35 -34 87zM832 768q80 0 136 56t56 136q0 58 -31 105t-82 70q56 17 113 17q159 0 271.5 -112.5t112.5 -271.5 t-112.5 -271.5t-271.5 -112.5t-271.5 112.5t-112.5 271.5q0 57 17 113q23 -51 70 -82t105 -31z" />
<glyph unicode="&#xf01e;" d="M1326 1203l205 205l-205 205l133 133l205 -205l205 205l133 -133l-205 -205l205 -205l-133 -133l-205 205l-205 -205zM1737 896h255q17 -34 31 -66t19 -47l6 -15q-5 -13 -15.5 -36t-51 -89.5t-90.5 -127t-136.5 -134.5t-186 -127t-242.5 -89.5t-302 -36.5q-125 0 -240 22 t-204 59t-168 85t-136.5 101t-105 106t-78.5 101t-52.5 85t-30.5 59l-9 22q3 10 9.5 27t31 69.5t54 103.5t79.5 120t106.5 128.5t136.5 120t168 103t202 69.5t237 27q62 0 128 -8v-248l14 -10q-75 10 -142 10q-102 0 -193.5 -17.5t-160 -47t-128 -68t-100.5 -81t-74.5 -85 t-54 -81t-34 -68t-18.5 -46.5l-5 -18q2 -7 5.5 -18t18 -46t33.5 -69t53 -80t74.5 -85.5t100.5 -80t128 -69t160 -46.5t195 -18t195 17.5t160.5 47t128 68t100.5 81t74 85t53 81t33.5 68t18.5 46.5l5 18q-14 55 -55 128zM913 1134q57 18 111 18q159 0 271.5 -112.5 t112.5 -271.5t-112.5 -271.5t-271.5 -112.5t-271.5 112.5t-112.5 271.5q0 48 18 111q24 -50 70.5 -80.5t103.5 -30.5q80 0 136 56t56 136q0 57 -30.5 103.5t-80.5 70.5z" />
<glyph unicode="&#xf01f;" d="M1920 896v-256h-402q-43 -167 -180.5 -275.5t-313.5 -108.5t-313.5 108.5t-180.5 275.5h-402v256h402q43 167 180.5 275.5t313.5 108.5t313.5 -108.5t180.5 -275.5h402zM1024 512q106 0 181 75t75 181t-75 181t-181 75t-181 -75t-75 -181t75 -181t181 -75z" />
<glyph unicode="&#xf020;" d="M1280 896v36q-58 34 -93 92t-35 128q0 106 75 181t181 75t181 -75t75 -181q0 -70 -35 -128t-93 -92v-36q0 -7 -0.5 -18t-5.5 -46t-13.5 -69t-27 -80t-43 -85.5t-64.5 -80t-88.5 -69t-118 -46.5t-151.5 -18q-129 0 -196 -83q68 -73 68 -173q0 -98 -76 -177t-180 -79 t-180 79t-76 177q0 69 35 127.5t93 92.5v840q-58 34 -93 92t-35 128q0 106 75 181t181 75t181 -75t75 -181q0 -70 -35 -128t-93 -92v-606q111 58 256 58q52 0 94.5 14t68.5 36.5t45 50t28 55t14 50t6 36.5v14zM640 1536q-53 0 -90.5 -37.5t-37.5 -90.5t37.5 -90.5 t90.5 -37.5t90.5 37.5t37.5 90.5t-37.5 90.5t-90.5 37.5zM1408 1024q53 0 90.5 37.5t37.5 90.5t-37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5zM640 0q53 0 90.5 37.5t37.5 90.5t-37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5 t90.5 -37.5z" />
<glyph unicode="&#xf021;" d="M768 1188v-619q123 71 256 71q106 0 181 75t75 181h256q0 -212 -150 -362t-362 -150q-114 0 -192 -88q64 -74 64 -168q0 -98 -76 -177t-180 -79t-180 79t-76 177q0 69 35 127.5t93 92.5v840q-58 34 -93 92t-35 128q0 106 75 181t181 75t181 -75t75 -181q0 -70 -35 -128 t-93 -92zM1152 1024v384q0 106 75 181t181 75t181 -75t75 -181v-384h-512zM640 1536q-53 0 -90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5t-37.5 90.5t-90.5 37.5zM1280 1408h256q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5zM640 0 q53 0 90.5 37.5t37.5 90.5t-37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5z" />
<glyph unicode="&#xf022;" d="M1152 1536h128q8 0 22 -1t53.5 -8.5t76 -20.5t81 -41.5t76 -67.5t53.5 -102.5t22 -142.5v-804q58 -34 93 -92.5t35 -127.5q0 -98 -76 -177t-180 -79t-180 79t-76 177q0 69 35 127.5t93 92.5v804q-1 5 -2.5 13.5t-10 31t-21.5 39t-37.5 30.5t-56.5 14h-128v-256l-384 384 l384 384v-256zM384 348v840q-58 34 -93 92t-35 128q0 106 75 181t181 75t181 -75t75 -181q0 -70 -35 -128t-93 -92v-840q58 -34 93 -92.5t35 -127.5q0 -98 -76 -177t-180 -79t-180 79t-76 177q0 69 35 127.5t93 92.5zM512 1280q53 0 90.5 37.5t37.5 90.5t-37.5 90.5 t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5zM512 0q53 0 90.5 37.5t37.5 90.5t-37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5zM1536 0q53 0 90.5 37.5t37.5 90.5t-37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5 t90.5 -37.5z" />
<glyph unicode="&#xf023;" d="M384 348v840q-58 34 -93 92t-35 128q0 106 75 181t181 75t181 -75t75 -181q0 -116 -90 -193q69 -188 240.5 -317.5t361.5 -129.5l35 -2q34 59 92.5 94.5t128.5 35.5q106 0 181 -75t75 -181t-75 -181t-181 -75q-70 0 -128.5 35t-92.5 93h-35q-177 0 -326.5 76t-313.5 221 v-461q58 -34 93 -92t35 -128q0 -98 -76 -177t-180 -79t-180 79t-76 177q0 70 35 128t93 92zM512 1280q53 0 90.5 37.5t37.5 90.5t-37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5zM1536 512q53 0 90.5 37.5t37.5 90.5t-37.5 90.5t-90.5 37.5 t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5zM512 0q53 0 90.5 37.5t37.5 90.5t-37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5z" />
<glyph unicode="&#xf024;" d="M2048 1152v-1408l-1024 512l-1024 -512v1408l1024 640zM1920 1024l-768 512v-512h-256v512l-768 -512v-1024l768 384v128h256v-128l768 -384v1024zM640 896h768v256l384 -384l-384 -384v256h-768v-256l-384 384l384 384v-256z" />
<glyph unicode="&#xf025;" d="M2048 1280v-1536l-1024 512l-1024 -512v1536l1024 512zM1920 1152l-768 384v-256h-256v256l-768 -384v-1152l768 384h256l768 -384v1152zM256 832l384 320v-640zM768 512v384q0 5 0.5 14.5t5.5 36t14 50.5t28 53.5t45 51t68.5 36t94.5 14.5t94.5 -14t68.5 -36.5t45 -50 t28 -55t14 -50t6 -36.5v-14v-384h-512zM1792 832l-384 -320v640zM896 896h256q0 5 -1 13.5t-7.5 31t-18.5 39t-38.5 30.5t-62.5 14q-26 0 -47 -7t-34 -18.5t-23 -25t-14 -27t-6.5 -25t-3.5 -18.5v-7z" />
<glyph unicode="&#xf026;" d="M1024 1664q182 0 348 -71t286 -191t191 -286t71 -348t-71 -348t-191 -286t-286 -191t-348 -71t-348 71t-286 191t-191 286t-71 348t71 348t191 286t286 191t348 71zM1024 128q174 0 321 85.5t233 233t86 321.5q0 130 -51 248.5t-136.5 204t-204 136.5t-248.5 51 t-248.5 -51t-204 -136.5t-136.5 -204t-51 -248.5q0 -174 86 -321.5t233 -233t321 -85.5zM896 1280h256v-640h-256v640zM896 512h256v-256h-256v256z" />
<glyph unicode="&#xf027;" d="M384 1536l64 -64q288 192 576 192q189 0 355.5 -68.5t285 -187t187 -285t68.5 -355.5q0 -69 -9.5 -130t-31.5 -121.5t-38.5 -96.5t-48.5 -100v192h-192q64 64 64 256q0 288 -176 464t-464 176q-60 0 -132.5 -21.5t-119.5 -42.5t-132 -64l128 -128h-384v384zM1152 640 h-256v640h256v-640zM256 1024h192q-64 -64 -64 -256q0 -288 176 -464t464 -176q60 0 132.5 21.5t119.5 42.5t132 64l-128 128h384v-384l-64 64q-288 -192 -576 -192q-189 0 -355.5 68.5t-285 187t-187 285t-68.5 355.5q0 69 9.5 130t31.5 121.5t38.5 96.5t48.5 100v-192z M896 512h256v-256h-256v256z" />
<glyph unicode="&#xf028;" d="M1658 1401l-181 -181q-89 89 -206 138.5t-247 49.5t-248.5 -51t-204 -136.5t-136.5 -204t-51 -248.5q0 -174 86 -321.5t233 -233t321 -85.5q91 0 175.5 24.5t140 58t98.5 70.5t62 59.5t21 28.5l399 399q0 -182 -71 -348t-191 -286t-286 -191t-348 -71t-348 71t-286 191 t-191 286t-71 348t71 348t191 286t286 191t348 71t345.5 -69t288.5 -194zM1538 1026l318 318l192 -192l-512 -512l-320 328l192 192zM1152 640h-256v640h256v-640zM896 512h256v-256h-256v256zM1520 368l1 1z" />
<glyph unicode="&#xf029;" d="M1523 640l208 -195q-99 -255 -326 -414t-509 -159q-182 0 -348 71t-286 191t-191 286t-71 348t71 348t191 286t286 191t348 71q180 0 341.5 -67.5t285.5 -188.5h-627q-130 0 -248.5 -51t-204 -136.5t-136.5 -204t-51 -248.5q0 -174 86 -321.5t233 -233t321 -85.5 q231 0 406.5 145.5t220.5 366.5zM1024 640h-256v640h256v-640zM1660 768h-256q-5 0 -13.5 1.5t-30 9.5t-37.5 20t-29.5 37.5t-13.5 59.5v256q0 5 1 13.5t7.5 31t18.5 39t38.5 30.5t62.5 14h512q5 0 13.5 -1t31 -7.5t39 -18.5t30.5 -38.5t14 -62.5v-256q0 -35 -13 -61 t-32 -38t-38 -19.5t-32 -8.5l-13 -1v-256zM768 512h256v-256h-256v256z" />
<glyph unicode="&#xf02a;" d="M755 1105l-627 -77l461 -422l-119 -606l554 298l554 -298l-119 606l461 422l-627 77l-269 559z" />
<glyph unicode="&#xf02b;" d="M512 256h-128q-96 0 -176 80t-80 176v768q0 95 81 175.5t175 80.5h1280q95 0 175.5 -81t80.5 -175v-768q0 -91 -82 -173.5t-174 -82.5h-640l-512 -512v512z" />
<glyph unicode="&#xf02c;" d="M1024 1792q209 0 398.5 -81t326.5 -218t218 -326.5t81 -398.5q0 -208 -81 -397.5t-218 -327t-327 -218.5t-398 -81t-397.5 81t-327 218.5t-218.5 327t-81 397.5t81 398t218.5 327t327 218t397.5 81zM1024 0q209 0 385.5 103t279.5 279.5t103 385.5t-103 385.5 t-279.5 279.5t-385.5 103t-385.5 -103t-279.5 -279.5t-103 -385.5t103 -385.5t279.5 -279.5t385.5 -103zM896 896h-256q0 8 1 22t8.5 54.5t20.5 77t40.5 81.5t64.5 77.5t97 54.5t133 22q102 0 179 -23.5t118 -56t65.5 -76.5t31 -75.5t6.5 -62.5q0 -63 -18.5 -108.5 t-47 -68.5t-61 -43t-61 -33.5t-47 -38.5t-18.5 -59h-260q-3 42 9.5 74t35 51.5t51 34t57.5 25t53 19.5t39 22t15 30q0 67 -27 97.5t-101 30.5q-41 0 -69.5 -13t-39.5 -32t-16 -38t-4 -32zM896 512h256v-256h-256v256z" />
<glyph unicode="&#xf02d;" d="M2048 0h-2048l1024 1792zM256 128h1536l-768 1408zM1152 1024v-512h-256v512h256zM896 384h256v-128h-256v128z" />
<glyph unicode="&#xf02e;" d="M1422 626l498 -498q26 -26 26 -64t-26 -64l-128 -128q-26 -48 -64 -48t-64 48l-498 498q-186 -114 -398 -114q-209 0 -385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5q0 -210 -114 -398zM768 512q212 0 362 150 t150 362t-150 362t-362 150t-362 -150t-150 -362t150 -362t362 -150z" />
<glyph unicode="&#xf02f;" d="M1024 1664q182 0 348 -71t286 -191t191 -286t71 -348t-71 -348t-191 -286t-286 -191t-348 -71t-348 71t-286 191t-191 286t-71 348t71 348t191 286t286 191t348 71zM1734 691v161l-196 64l-46 112l89 187l-114 115l-184 -94l-112 47l-70 195h-161l-64 -196l-112 -46 l-187 89l-115 -114l94 -184l-46 -111l-196 -71v-161l196 -64l46 -112l-89 -187l114 -115l184 94l112 -47l70 -195h161l64 196l112 46l187 -89l115 114l-94 184l47 111zM1024 1025q106 0 181 -75t75 -182t-75 -182t-181 -75t-181.5 75.5t-75.5 181.5t75.5 181.5t181.5 75.5z " />
<glyph unicode="&#xf030;" d="M296 1726q25 -25 25 -60.5t-25 -60.5q-130 -133 -130 -324t130 -325q25 -25 25 -60t-25 -60q-24 -26 -58 -26t-59 26q-88 90 -133.5 206t-45.5 239q0 122 45.5 238t133.5 207q27 25 59 25q33 0 58 -25zM1865 1724q88 -90 134 -206t46 -239t-46 -238.5t-134 -206.5 q-25 -25 -58 -25q-32 0 -59 25q-24 25 -24 60t24 61q131 132 131 324q0 191 -131 325q-24 25 -24 60t24 60q25 26 59 26t58 -26zM612 1010q-24 -25 -57.5 -25t-57.5 25q-109 114 -109 271q0 158 109 270q24 25 58 25q33 0 57 -25q24 -24 24 -58.5t-24 -59.5 q-61 -62 -61 -152q0 -89 61 -153q24 -24 24 -58.5t-24 -59.5zM1433 1550q23 25 57 25t58 -25q109 -114 109 -271q0 -158 -109 -270q-24 -25 -58 -25q-33 0 -57 25q-24 24 -24 58.5t24 59.5q61 62 61 152q0 89 -61 153q-24 24 -24 58.5t24 59.5zM1024 1072q-86 0 -146.5 61 t-60.5 147t60.5 147t146.5 61t147 -61t61 -147t-61 -147t-147 -61zM468 -128l403 1073q72 -39 154 -39q79 0 152 38l402 -1072h-191l-108 128h-511l-110 -128h-191zM896 384h256l-128 460zM1280 128l-128 128h-256l-127 -128h511z" />
<glyph unicode="&#xf031;" d="M459 59l-66 -123l-281 -192l-46 64l178 274l127 68l552 571l-112 116l923 955l313 -324l-923 -954l-113 116zM808 766l-72 -74q-129 136 -163 170q-112 -40 -234 -11t-211 121q-143 148 -112 437l247 -256l242 67l65 251l-247 255q108 32 223 1.5t200 -117.5 q85 -88 114 -208t-3 -233q-23 21 3 -6l52 -51l-216 -230zM1398 614l485 -503q60 -63 60 -159t-60 -144q-15 -23 -32 -37t-38.5 -19.5t-35.5 -6.5t-40 -1q-27 0 -41 1t-35.5 6.5t-38.5 19.5t-31 37l-492 511z" />
<glyph unicode="&#xf032;" d="M1280 768h128v-640h-640v-384l-768 384v1664h1408v-512h-128v384h-1024l512 -256v-1152h512v512zM1536 640v256h-512v256h512v256l512 -384z" />
<glyph unicode="&#xf033;" d="M1571 1617q119 59 237.5 102t177.5 57l60 14q-5 -23 -15.5 -65t-54.5 -166.5t-103 -243.5q-139 15 -212 90q-75 73 -90 212zM419 884l356 66q100 139 221 260q188 188 436 332q32 -151 124 -242q91 -92 242 -124q-142 -245 -332 -436q-124 -124 -260 -219l-66 -358 l-419 -419l-11 373l268 269q-86 -42 -167 -68.5t-119 -32.5l-39 -6l-118 118q1 14 5 40.5t29.5 110t66.5 169.5l-263 -263l-373 11z" />
<glyph unicode="&#xf034;" d="M512 1536q174 0 340 -46t306.5 -128.5t258.5 -200.5t200.5 -258.5t128.5 -306.5t46 -340q0 -5 -1 -13.5t-7.5 -31t-18.5 -39t-38.5 -30.5t-62.5 -14q-26 0 -47 7t-34 18.5t-23 25t-14 27t-6.5 25t-3.5 18.5v7q0 208 -81 397.5t-218.5 327t-327 218.5t-397.5 81 q-5 0 -13.5 1t-31 7.5t-39 18.5t-30.5 38.5t-14 62.5q0 26 7 47t18.5 34t25 23t27 14t25 6.5t18.5 3.5h7zM512 1024q209 0 385.5 -103t279.5 -279.5t103 -385.5q0 -5 -1 -13.5t-7.5 -31t-18.5 -39t-38.5 -30.5t-62.5 -14q-26 0 -47 7t-34 18.5t-23 25t-14 27t-6.5 25 t-3.5 18.5v7q0 212 -150 362t-362 150q-5 0 -13.5 1t-31 8.5t-39 19.5t-30.5 38t-14 61t13 61t32 38t38 19.5t32 8.5zM512 512q106 0 181 -75t75 -181t-75 -181t-181 -75t-181 75t-75 181t75 181t181 75z" />
<glyph unicode="&#xf035;" d="M1536 256h128v-256q0 -48 -40 -88t-88 -40h-1280q-48 0 -88 40t-40 88v1408q0 48 40 88t88 40h384q0 5 0.5 14.5t5.5 36t14 50.5t28 53.5t45 51t68.5 36t94.5 14.5t94.5 -14t68.5 -36.5t45 -50t28 -55t14 -50t6 -36.5v-14h384q48 0 88 -40t40 -88v-640h-128v384h-1280 v-1152h1280v256zM1408 1280l-384 256q0 48 -40 88t-88 40t-88 -40t-40 -88l-384 -256h1024zM1024 896h-640v128h640v-128zM1920 640v-256h-640v-256l-512 384l512 384v-256h640zM640 640h-256v128h256v-128zM384 512h256v-128h-256v128zM384 256h384v-128h-384v128z" />
<glyph unicode="&#xf036;" d="M1273 1501q-48 -63 -123.5 -102.5t-151.5 -37.5q-13 73 13.5 148.5t75.5 135.5q50 60 126 101.5t147 45.5q22 -150 -87 -291zM1738 1191q-73 -40 -121.5 -102.5t-67 -131t-12 -142.5t37 -138.5t86.5 -118t130 -81.5q-57 -127 -116 -217q-35 -53 -64 -90.5t-70.5 -80.5 t-86.5 -66t-92 -23q-39 0 -75 11.5t-62 26t-71 26.5t-98 12t-98 -12.5t-71.5 -26.5t-63 -25.5t-75.5 -11.5q-47 0 -92 21t-84.5 60t-69 76.5t-62.5 88.5q-102 156 -148 329.5t-32.5 321.5t78.5 249q68 106 169.5 166.5t204.5 60.5q73 0 180.5 -38.5t162.5 -38.5q45 0 97 19 t114 38.5t130 19.5q91 0 182 -48t160 -134z" />
<glyph unicode="&#xf037;" d="M968 943l-37 -19q-75 47 -136.5 71t-147.5 30q-200 14 -376 -73l-39 21l178 593q7 5 20 13t57 27.5t91 33t119.5 21.5t145.5 1q91 -8 156 -37t147 -85zM2047 1395l-181 -607q-68 -37 -204.5 -70t-266.5 -18q-62 7 -124 31.5t-98.5 45.5t-95.5 60l178 596l41 21 q101 -67 149 -87q62 -25 134 -34q104 -12 210.5 8.5t161.5 46.5l55 27zM1 149l181 605q7 5 20 13t57 27t91.5 32.5t120 21.5t145.5 2q90 -8 155 -36.5t148 -85.5l-183 -609l-37 -19q-75 47 -137 71t-147 30q-198 13 -375 -73zM1028 621l41 21q59 -40 87 -57t82 -37t114 -27 q71 -7 134.5 -2t117 19t92.5 28.5t61 25.5l22 11l41 -21l-185 -646q-14 0 -185 -32t-287 -32q-90 0 -164.5 37t-153.5 104z" />
<glyph unicode="&#xf038;" d="M512 1792h1024q53 0 90.5 -37.5t37.5 -90.5v-1792q0 -49 -38 -88.5t-90 -39.5h-1024q-52 0 -90 39.5t-38 88.5v1792q0 53 37.5 90.5t90.5 37.5zM1088 1664h-128q-26 0 -45 -19t-19 -45t19 -45t45 -19h128q26 0 45 19t19 45t-19 45t-45 19zM1536 1408h-1024v-1280h1024 v1280zM960 -128h128q17 0 25.5 1t19 6.5t15 19.5t4.5 37t-4.5 37t-15 19.5t-19 6.5t-25.5 1h-128q-17 0 -25.5 -1t-19 -6.5t-15 -19.5t-4.5 -37t4.5 -37t15 -19.5t19 -6.5t25.5 -1z" />
<glyph unicode="&#xf039;" d="M1527 1559l-93 -179q102 -104 102 -228h-1024q0 124 102 228l-93 178q-14 25 -7 53t30 42q23 15 48.5 7.5t38.5 -32.5l89 -168q137 76 304 76q165 0 304 -76l89 170q13 25 38.5 32.5t48.5 -6.5q23 -15 30 -43.5t-7 -53.5zM832 1280q26 0 45 19t19 45t-19 45t-45 19 t-45 -19t-19 -45t19 -45t45 -19zM1216 1280q26 0 45 19t19 45t-19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19zM256 589v486q0 32 19 54.5t45 22.5t45 -22.5t19 -54.5v-486q0 -32 -19 -54.5t-45 -22.5t-45 22.5t-19 54.5zM1664 589v486q0 32 19 54.5t45 22.5t45 -22.5 t19 -54.5v-486q0 -32 -19 -54.5t-45 -22.5t-45 22.5t-19 54.5zM512 1024h1024v-768q0 -53 -37.5 -90.5t-90.5 -37.5h-128v-192q-3 -7 -9 -17.5t-22.5 -28.5t-32.5 -18t-32 16t-24 32l-8 16v192h-256v-192q-3 -7 -9 -17.5t-22.5 -28.5t-32.5 -18t-32 16t-24 32l-8 16v192 h-128q-53 0 -90.5 37.5t-37.5 90.5v768z" />
<glyph unicode="&#xf03a;" d="M1792 1152l-1024 -1024l-512 512l256 256l256 -256l768 768z" />
<glyph unicode="&#xf03b;" d="M1920 1408v-1280h-1792v1280h1792zM384 1280l640 -528l640 528h-1280zM256 384l504 385l-504 383v-768zM1792 1152l-505 -384l505 -384v768zM1664 256l-508 412l-132 -100l-132 100l-508 -412h1280z" />
<glyph unicode="&#xf03c;" d="M1920 1152v-1280h-1792v1280l256 183v201h282l358 256l358 -256h282v-201zM512 918l512 -422l512 422v490h-1024v-490zM896 1152h-256v128h256v-128zM1280 896h-640v128h640v-128zM256 128l504 385l-504 383v-768zM1792 896l-505 -384l505 -384v768zM1664 0l-508 412 l-132 -100l-132 100l-508 -412h1280z" />
<glyph unicode="&#xf03d;" d="M1664 640h-384v-512h-512v512h-384l640 768z" />
<glyph unicode="&#xf03e;" d="M896 128v384h-512v512h512v384l768 -640z" />
<glyph unicode="&#xf03f;" d="M1664 896l-640 -768l-640 768h384v512h512v-512h384z" />
<glyph unicode="&#xf040;" d="M1664 1024v-512h-512v-384l-768 640l768 640v-384h512z" />
<glyph unicode="&#xf041;" d="M1271 1156v153q21 36 56 75q48 43 48 90q0 83 -92.5 136.5t-258.5 53.5q-167 0 -266 -54t-99 -136q0 -47 47 -89q36 -39 65 -88v-129q-29 -56 -70.5 -108t-68.5 -76l-28 -24h1q-101 -69 -101 -153q0 -117 145.5 -206t374.5 -89t374 89t145 206q0 101 -139 176 q-82 80 -133 173zM1022 -256l129 640q-60 -6 -123 -6q-73 0 -133 7z" />
<glyph unicode="&#xf042;" d="M1025 1024h-129q-133 31 -174 35q-126 14 -225 113t-113 224q-14 126 65 205t205 65q97 -10 180 -74.5t126 -156.5q43 92 126 156.5t180 74.5q126 14 205 -65t65 -205q-14 -125 -113 -224t-225 -113q-18 -2 -61.5 -10.5t-77.5 -16t-34 -8.5zM718 1183q67 -8 110.5 34.5 t35.5 110.5t-61.5 121.5t-121.5 61.5t-110 -35t-35 -111q8 -68 61 -121.5t121 -60.5zM1056 1328q-8 -68 35.5 -110.5t110.5 -34.5q68 7 121 60.5t61 121.5t-34.5 111t-110.5 35t-121.5 -61.5t-61.5 -121.5zM128 1024h768v-384h-768v384zM1792 1024v-384h-768v384h768z M256 512h640v-640h-640v640zM1024 512h640v-640h-640v640z" />
<glyph unicode="&#xf043;" d="M2048 -128v-128h-2048v2048h256v-128h-128v-256h128v-128h-128v-256h128v-128h-128v-256h128v-128h-128v-256h128v-128h-128v-256h1920zM1408 0h-384v1280h384v-1280zM1920 0h-384v896h384v-896zM896 0h-384v640h384v-640z" />
<glyph unicode="&#xf044;" d="M1920 1344v-64q0 -94 -55.5 -183.5t-145 -145t-183.5 -55.5h-128l-512 -512v-128q0 -94 -55.5 -183.5t-145 -145t-183.5 -55.5h-64l192 192l-64 256l-256 64l-192 -192v64q0 94 55.5 183.5t145 145t183.5 55.5h128l512 512v128q0 94 55.5 183.5t145 145t183.5 55.5h64 l-192 -192l64 -256l256 -64z" />
<glyph unicode="&#xf045;" d="M128 1408h1792q48 0 88 -40t40 -88v-1024q0 -48 -40 -88t-88 -40h-1792q-48 0 -88 40t-40 88v1024q0 48 40 88t88 40zM1792 1280h-1536q-48 0 -88 -40t-40 -88h1792q0 48 -40 88t-88 40zM256 256h1536q48 0 88 40t40 88v512h-1792v-512q0 -48 40 -88t88 -40zM768 640 h-512v128h512v-128zM1280 640h-384v128h384v-128zM512 384h-256v128h256v-128zM640 512h256v-128h-256v128z" />
<glyph unicode="&#xf046;" d="M1024 1664q189 0 355.5 -68.5t285 -187t187 -285t68.5 -355.5t-68.5 -355.5t-187 -285t-285 -187t-355.5 -68.5t-355.5 68.5t-285 187t-187 285t-68.5 355.5t68.5 355.5t187 285t285 187t355.5 68.5zM1024 128q288 0 464 176t176 464q0 120 -47 235t-128.5 205 t-203.5 145t-261 55t-261 -55t-203.5 -145t-128.5 -205t-47 -235q0 -288 176 -464t464 -176zM896 1280l128 128l128 -128v-384h256l128 -128l-128 -128h-512v640z" />
<glyph unicode="&#xf047;" d="M2048 1024l-1024 -1024l-1024 1024l512 512h1024zM1024 256l768 768l-384 384h-768l-384 -384zM1664 1024l-640 -640v896h384z" />
<glyph unicode="&#xf048;" d="M714 194l24 -143q-270 91 -440 322.5t-170 522.5q0 182 71 348t191 286t286 191t348 71t348 -71t286 -191t191 -286t71 -348q0 -291 -170 -522.5t-440 -322.5l24 143q205 91 331.5 280.5t126.5 421.5q0 209 -103 385.5t-279.5 279.5t-385.5 103t-385.5 -103 t-279.5 -279.5t-103 -385.5q0 -232 126.5 -421.5t331.5 -280.5zM1360 354l31 185q145 150 145 357q0 212 -150 362t-362 150t-362 -150t-150 -362q0 -207 145 -357l31 -185q-139 86 -221.5 229.5t-82.5 312.5q0 130 51 248.5t136.5 204t204 136.5t248.5 51t248.5 -51 t204 -136.5t136.5 -204t51 -248.5q0 -169 -82.5 -312.5t-221.5 -229.5zM1280 1024q0 -106 -75 -181t-181 -75t-181 75t-75 181t75 181t181 75t181 -75t75 -181zM896 768h256q39 0 67 -13t39.5 -32t17 -38t4.5 -32v-13v-256q0 -3 0.5 -7.5t-1 -17.5t-5 -25.5t-13 -27 t-22.5 -25t-35.5 -18t-51.5 -7.5v-512h-256v512q-39 0 -67 13t-39.5 32t-17 38t-4.5 32v13v256q0 3 -0.5 7.5t1 17.5t5 25.5t13 27t22.5 25t35.5 18t51.5 7.5z" />
<glyph unicode="&#xf049;" d="M2048 1024v-256l-128 -128l-256 256l-256 -256l-256 256l-256 -256h-128v-128h-128q0 -5 -1 -13.5t-7.5 -31t-18.5 -39t-38.5 -30.5t-62.5 -14h-256q-9 -1 -23 -0.5t-48 16.5t-57 48t-55 80t-53 80l-20 32v384q88 152 128 212q18 27 50 38t55 8l23 -2h256q37 0 64 -13 t38.5 -32t18 -38t7.5 -32v-13h128v-128h1280zM512 1152h-256l256 -128v128zM512 832l-192 192l-192 -192l192 -192zM512 640l-256 -128h256v128z" />
<glyph unicode="&#xf04a;" d="M1792 1664v-1536q0 -5 -0.5 -13.5t-7.5 -31t-19.5 -39t-39.5 -30.5t-65 -14h-252v128h124q5 0 14 1t32 8.5t40 20t31.5 38.5t14.5 60v128h-256v128h256v1152h-1024v-1152h256v-128h-512v-128q0 -5 0.5 -13.5t6.5 -31t17.5 -39t37.5 -30.5t62 -14h132v128h256v-256 l-256 -256v256h-256q-42 0 -70.5 16.5t-39.5 41.5t-14.5 41t-3.5 29v1536q0 36 13 63t32 38.5t38 18.5t32 8h13h1280q5 0 13.5 -0.5t30 -7.5t38 -19t31 -38.5t15.5 -62.5zM1536 640h-256v-896h-256v896h-256l288 384h-288l384 512l384 -512h-288z" />
<glyph unicode="&#xf04b;" d="M512 512h1152v-384q0 -5 -1 -13.5t-7.5 -31t-18.5 -39t-38.5 -30.5t-62.5 -14h-640v-256l-192 192l-192 -192v256h-256q-26 0 -47 7t-34 18.5t-23 25t-14 27t-6.5 25t-3.5 18.5v7v1536q0 26 7 47t18.5 34t25 23t27 14t25 6.5t18.5 3.5h7h1280q5 0 13.5 -1t31 -7.5 t39 -18.5t30.5 -38.5t14 -62.5v-128h-128v128h-1024v-1152zM768 1408h-128v128h128v-128zM1280 1280v-128h192l-256 -320l-256 320h192v256h384v-128h-256zM768 1152h-128v128h128v-128zM1984 896h-192v-256h-384v128h256v128h-192l256 320zM768 896h-128v128h128v-128z M640 768h128v-128h-128v128zM896 128h512q5 0 13.5 1t31 7.5t39 18.5t30.5 38.5t14 62.5v128h-1280v-128q0 -5 1 -13.5t7.5 -31t18.5 -39t38.5 -30.5t62.5 -14h128v128h384v-128z" />
<glyph unicode="&#xf04c;" d="M384 512h1152v-384q0 -5 -1 -13.5t-7.5 -31t-18.5 -39t-38.5 -30.5t-62.5 -14h-640v-256l-192 192l-192 -192v256h-256q-26 0 -47 7t-34 18.5t-23 25t-14 27t-6.5 25t-3.5 18.5v7v1536q0 26 7 47t18.5 34t25 23t27 14t25 6.5t18.5 3.5h7h768v-128h-512v-1152zM2048 1664 v-768l-128 -128h-384v-128h-128v128h-128l-128 128v768l128 128h640zM1920 1664h-512v-512h512v512zM640 1408h-128v128h128v-128zM768 1536l256 -320l-256 -320v640zM640 1152h-128v128h128v-128zM640 896h-128v128h128v-128zM1408 1024h-128v-128h128v128zM1920 1024h-384 v-128h384v128zM512 768h128v-128h-128v128zM768 128h512q5 0 13.5 1t31 7.5t39 18.5t30.5 38.5t14 62.5v128h-1280v-128q0 -5 1 -13.5t7.5 -31t18.5 -39t38.5 -30.5t62.5 -14h128v128h384v-128z" />
<glyph unicode="&#xf04d;" d="M1920 0v1408l-384 384h-1152v-128h1088l320 -320v-1344h128zM1280 1536h-1152v-1792h1536v1408zM1216 1408l320 -320v-1216h-1280v1536h960zM1024 768h256v256h-256v256h-256v-256h-256v-256h256v-256h256v256zM512 0h768v256h-768v-256z" />
<glyph unicode="&#xf04e;" d="M1024 1536q123 0 237 -26.5t202.5 -70.5t167.5 -102t136.5 -121.5t106 -127t80 -121.5t53.5 -102t31 -71l10 -26q-5 -13 -15.5 -36t-51 -89.5t-90.5 -127t-136.5 -134.5t-186 -127t-242.5 -89.5t-302 -36.5q-125 0 -240 22t-204 59t-168 85t-136.5 101t-105 106 t-78.5 101t-52.5 85t-30.5 59l-9 22q3 10 9.5 27t31 69.5t54 103.5t79.5 120t106.5 128.5t136.5 120t168 103t202 69.5t237 27zM1024 256q103 0 195 17.5t160.5 47t128 68t100.5 81t74 85t53 81t33.5 68t18.5 46.5l5 18q-3 11 -9 29.5t-32.5 71.5t-60.5 101.5t-97 107.5 t-138.5 101.5t-188 71.5t-242.5 29q-102 0 -193.5 -17.5t-160 -47t-128 -68t-100.5 -81t-74.5 -85t-54 -81t-34 -68t-18.5 -46.5l-5 -18q2 -7 5.5 -18t18 -46t33.5 -69t53 -80t74.5 -85.5t100.5 -80t128 -69t160 -46.5t195 -18zM1024 1152q159 0 271.5 -112.5t112.5 -271.5 t-112.5 -271.5t-271.5 -112.5t-271.5 112.5t-112.5 271.5q0 57 17 113q23 -51 70 -82t105 -31q80 0 136 56t56 136q0 58 -31 105t-82 70q56 17 113 17z" />
<glyph unicode="&#xf04f;" d="M1276 640h-384q-5 0 -13.5 1.5t-30 9.5t-37.5 20t-29.5 37.5t-13.5 59.5v640q0 5 1 13.5t7.5 31t18.5 39t38.5 30.5t62.5 14h896q5 0 13.5 -1t31 -7.5t39 -18.5t30.5 -38.5t14 -62.5v-640q0 -35 -13 -61t-32 -38t-38 -19.5t-32 -8.5l-13 -1h-128v-384zM640 1152v-384 q0 -5 0.5 -14.5t5.5 -36t14 -50.5t28 -53.5t45 -51t68.5 -36t94.5 -14.5h384v-128q0 -34 -13 -59.5t-31 -38t-36 -20t-31 -8.5l-13 -2h-384l-388 -384v384h-128q-5 0 -13.5 1t-31 8.5t-39 19.5t-30.5 38t-14 61v640q0 5 1 13.5t7.5 31t18.5 39t38.5 30.5t62.5 14h384z" />
<glyph unicode="&#xf050;" d="M1024 -128q182 0 348 71t286 191t191 286t71 348t-71 348t-191 286t-286 191t-348 71t-348 -71t-286 -191t-191 -286t-71 -348t71 -348t191 -286t286 -191t348 -71zM1024 1408q130 0 248.5 -51t204 -136.5t136.5 -204t51 -248.5q0 -174 -86 -321.5t-233 -233t-321 -85.5 t-321 85.5t-233 233t-86 321.5q0 130 51 248.5t136.5 204t204 136.5t248.5 51zM1402 555l-213 213l213 213l-165 165l-213 -213l-213 213l-165 -165l213 -213l-213 -213l165 -165l213 213l213 -213z" />
<glyph unicode="&#xf051;" d="M640 1088l-384 320l384 316v-188h384q5 1 13.5 2t31 -2.5t39 -14.5t30.5 -40t14 -73v-768h-256v640h-256v-192zM1920 1024v-1280h-1792v1280h640v-128h-384l640 -528l640 528h-384v128h640zM256 0l504 385l-504 383v-768zM1792 768l-505 -384l505 -384v768zM1664 -128 l-508 412l-132 -100l-132 100l-508 -412h1280z" />
<glyph unicode="&#xf052;" d="M1024 248q-212 0 -362 150t-150 362t150 362t362 150t362 -150t150 -362t-150 -362t-362 -150z" />
<glyph unicode="&#xf053;" d="M1536 1280v-1024h-1024v1024h1024z" />
<glyph unicode="&#xf054;" d="M1792 768l128 -128l-768 -768l-1024 1024v512l256 256h512l128 -128q-3 -10 -8 -28t-11 -67t-1 -89l-184 184h-372l-192 -192v-384l896 -896l564 576l-128 128h204zM1920 1408v-256h-256v-256h-256v256h-256v256h256v256h256v-256h256zM576 1408q80 0 136 -56t56 -136 t-56 -136t-136 -56t-136 56t-56 136t56 136t136 56zM576 1152q26 0 45 19t19 45t-19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19zM1152 256l-512 512l384 384l512 -512zM832 768l320 -316l196 188l-324 324z" />
<glyph unicode="&#xf055;" d="M1797 1408l205 -205l-133 -133l-205 205l-205 -205l-133 133l205 205l-205 205l133 133l205 -205l205 205l133 -133zM1664 896l256 -256l-768 -768l-1024 1024v512l256 256h512l256 -256v-204l-332 332h-372l-192 -192v-384l896 -896l564 576l-256 256h204zM576 1408 q80 0 136 -56t56 -136t-56 -136t-136 -56t-136 56t-56 136t56 136t136 56zM576 1152q26 0 45 19t19 45t-19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19zM1152 256l-512 512l384 384l512 -512zM832 768l320 -316l196 188l-324 324z" />
<glyph unicode="&#xf056;" d="M1792 1536v-256h-256v-256h-256v256h-256v256h256v256h256v-256h256zM768 1188v-606q111 58 256 58q52 0 94.5 14t68.5 36.5t45 50t28 55t14 50t6 36.5v14h256q0 -7 -0.5 -18t-5.5 -46t-13.5 -69t-27 -80t-43 -85.5t-64.5 -80t-88.5 -69t-118 -46.5t-151.5 -18 q-129 0 -196 -83q68 -73 68 -173q0 -106 -75 -181t-181 -75t-181 75t-75 181q0 70 35 128t93 93v839q-58 34 -93 92.5t-35 127.5q0 106 75 181t181 75t181 -75t75 -181q0 -69 -35 -127.5t-93 -92.5zM640 1536q-53 0 -90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5 t90.5 37.5t37.5 90.5t-37.5 90.5t-90.5 37.5zM640 0q53 0 90.5 37.5t37.5 90.5t-37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5z" />
<glyph unicode="&#xf057;" d="M1541 1408l205 -205l-133 -133l-205 205l-205 -205l-133 133l205 205l-205 205l133 133l205 -205l205 205l133 -133zM1408 1024l128 -128q0 -7 -0.5 -18t-5.5 -46t-13.5 -69t-27 -80t-43 -85.5t-64.5 -80t-88.5 -69t-118 -46.5t-151.5 -18q-129 0 -196 -83 q68 -73 68 -173q0 -106 -75 -181t-181 -75t-181 75t-75 181q0 70 35 128t93 93v839q-58 34 -93 92.5t-35 127.5q0 106 75 181t181 75t181 -75t75 -181q0 -69 -35 -127.5t-93 -92.5v-606q111 58 256 58q52 0 94.5 14t68.5 36.5t45 50t28 55t14 50t6 36.5v14zM640 1536 q-53 0 -90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5t-37.5 90.5t-90.5 37.5zM640 0q53 0 90.5 37.5t37.5 90.5t-37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5z" />
<glyph unicode="&#xf058;" d="M1920 1280l-256 -256l-384 384l256 256zM1152 1280l384 -384l-1024 -1025h-384v385zM512 128h-128v128h-128v-256h256v128z" />
<glyph unicode="&#xf059;" d="M1024 1664q182 0 348 -71t286 -191t191 -286t71 -348t-71 -348t-191 -286t-286 -191t-348 -71t-348 71t-286 191t-191 286t-71 348t71 348t191 286t286 191t348 71zM1024 128q174 0 321.5 86t233 233t85.5 321q0 130 -50.5 248.5t-136.5 204.5t-204.5 136.5t-248.5 50.5 q-174 0 -321 -85.5t-233 -233t-86 -321.5q0 -130 51 -248.5t136.5 -204t204 -136.5t248.5 -51zM1024 1024q-53 0 -90.5 37.5t-37.5 90.5t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5t-37.5 -90.5t-90.5 -37.5zM896 768h-128q0 5 1 13.5t7.5 31t18.5 39t38.5 30.5t62.5 14 h128q5 0 13.5 -0.5t31 -7t39 -18.5t30.5 -38.5t14 -63.5v-384h128q0 -5 -1 -13.5t-7.5 -31t-18.5 -39t-38.5 -30.5t-62.5 -14h-128q-5 0 -13.5 1t-31 7.5t-39 18.5t-30.5 38.5t-14 62.5v384z" />
<glyph unicode="&#xf05a;" d="M1536 768l-768 -767v1535z" />
<glyph unicode="&#xf05b;" d="M1792 1024l-768 -767l-767 767h1535z" />
<glyph unicode="&#xf05c;" d="M1117 640h274q17 70 17 128q0 212 -137.5 362t-331.5 150h-470q-194 0 -331.5 -150t-137.5 -362t137.5 -362t331.5 -150h175q-39 35 -67 74.5t-40 70.5t-18.5 57t-6.5 40v14q-106 0 -181 75t-75 181t75 181t181 75h384q106 0 181 -75t75 -181q0 -68 -35 -128zM1109 256 h470q194 0 331.5 150t137.5 362t-137.5 362t-331.5 150h-171q36 -36 62.5 -75.5t38.5 -70.5t18.5 -56.5t7.5 -39.5l1 -14q106 0 181 -75t75 -181t-75 -181t-181 -75h-384q-106 0 -181 75t-75 181q0 66 36 128h-275q-17 -70 -17 -128q0 -212 137.5 -362t331.5 -150z" />
<glyph unicode="&#xf05d;" d="M1664 896v-256h-512v-512h-256v512h-512v256h512v512h256v-512h512z" />
<glyph unicode="&#xf05e;" d="M1664 1408v-256h-1280v256h1280zM1664 896v-256h-1280v256h1280zM1664 384v-256h-1280v256h1280z" />
<glyph unicode="&#xf05f;" d="M897 1226l-428 -458l428 -458l-171 -184l-599 642l599 642zM1922 768l-600 -642l-171 184l428 458l-428 458l171 184z" />
<glyph unicode="&#xf060;" d="M1024 1792q130 0 248.5 -50.5t204.5 -136.5t136.5 -204.5t50.5 -248.5q0 -99 -66 -280.5t-160 -369.5t-188 -362t-160 -285l-66 -111q-26 43 -69 116t-153.5 274t-195 373.5t-153.5 359t-69 285.5q0 174 86 321.5t233 233t321 85.5zM1024 896q106 0 181 75t75 181 t-75 181t-181 75t-181 -75t-75 -181t75 -181t181 -75z" />
<glyph unicode="&#xf061;" d="M128 1664h256v-256h-256v256zM1920 1664v-256h-1280v256h1280zM128 1152h256v-256h-256v256zM640 1152h1280v-256h-1280v256zM128 640h256v-256h-256v256zM640 640h1280v-256h-1280v256zM128 128h256v-256h-256v256zM640 128h1280v-256h-1280v256z" />
<glyph unicode="&#xf062;" d="M512 1664h128v-768h-128v512h-256v128h256v128zM1920 1664v-256h-1024v256h1024zM896 1152h1024v-256h-1024v256zM128 640h512v-332l-384 -308h384v-128h-512v208l384 308v124h-256v-128h-128v256zM896 640h1024v-256h-1024v256zM896 128h1024v-256h-1024v256z" />
<glyph unicode="&#xf063;" d="M384 256v512q0 212 150 362t362 150v-256q-106 0 -181 -75t-75 -181h256v-512h-512zM1664 1280v-256q-106 0 -181 -75t-75 -181h256v-512h-512v512q0 212 150 362t362 150z" />
<glyph unicode="&#xf064;" d="M1920 1408v-1280h-1024v1280h1024zM512 1280h256v-128h-128v-768h128v-128h-256v1024zM128 1152h256v-128h-128v-512h128v-128h-256v768zM1664 1152h-512v-768h512v768z" />
<glyph unicode="&#xf065;" d="M1792 1536v-1536h-1536v1536h1536zM1664 1408h-1280v-1280z" />
<glyph unicode="&#xf066;" d="M256 1024h-128v512h512v-128h-384v-384zM1920 1536v-512h-128v384h-384v128h512zM384 1280h1280v-1024h-1280v1024zM640 512h768v512h-768v-512zM256 128h384v-128h-512v512h128v-384zM1792 512h128v-512h-512v128h384v384z" />
<glyph unicode="&#xf067;" d="M512 1280h-384v128h256v256h128v-384zM1920 1408v-128h-384v384h128v-256h256zM512 1152h1024v-768h-1024v768zM768 640h512v256h-512v-256zM128 256h384v-384h-128v256h-256v128zM1536 256h384v-128h-256v-256h-128v384z" />
<glyph unicode="&#xf068;" d="M512 1536h-128v256h128v-256zM1536 1536h-128v256h128v-256zM1920 1664v-1792h-1920v1792h256v-256h384v256h640v-256h384v256h256zM1792 1280h-1664v-1280h1664v1280zM640 896h-128v256h128v-256zM896 896h-128v256h128v-256zM1152 896h-128v256h128v-256zM1408 896 h-128v256h128v-256zM1664 896h-128v256h128v-256zM384 512h-128v256h128v-256zM640 512h-128v256h128v-256zM896 512h-128v256h128v-256zM1152 512h-128v256h128v-256zM1408 512h-128v256h128v-256zM1664 512h-128v256h128v-256zM384 128h-128v256h128v-256zM640 128h-128 v256h128v-256zM896 128h-128v256h128v-256zM1152 128h-128v256h128v-256zM1408 128h-128v256h128v-256z" />
<glyph unicode="&#xf069;" d="M1536 1280h384q5 0 13.5 -1t31 -7.5t39 -18.5t30.5 -38.5t14 -62.5v-768q0 -26 -7 -47t-18.5 -34t-25 -23t-27 -14t-25 -6.5t-18.5 -3.5h-7h-384v-256q0 -69 -94 -128t-256.5 -93.5t-353.5 -34.5t-353.5 34.5t-256.5 93.5t-94 128v1536q0 69 94 128t256.5 93.5 t353.5 34.5t353.5 -34.5t256.5 -93.5t94 -128v-256zM832 1408q186 0 317 37.5t131 90.5t-131 90.5t-317 37.5t-317 -37.5t-131 -90.5t131 -90.5t317 -37.5zM512 1152h-128v-1024h128v1024zM1280 1152h-128v-1024h128v1024zM896 1024h-128v-1024h128v1024zM1792 1024h-256 v-512h256v512z" />
<glyph unicode="&#xf06a;" d="M1536 896h128q53 0 90.5 -37.5t37.5 -90.5v-896q0 -53 -37.5 -90.5t-90.5 -37.5h-1280q-53 0 -90.5 37.5t-37.5 90.5v896q0 53 37.5 90.5t90.5 37.5h128v384q0 212 150 362t362 150t362 -150t150 -362v-384zM1280 896v384q0 106 -75 181t-181 75t-181 -75t-75 -181v-384 h512zM1280 768h-896v-896h896v128h-768v128h768v128h-768v128h768v128h-768v128h768v128z" />
<glyph unicode="&#xf06b;" d="M256 1664h1536q35 0 61 -13t38 -32t19.5 -38t8.5 -32l1 -13v-1536q0 -35 -13 -61t-32 -38t-38 -19.5t-32 -8.5l-13 -1h-1536q-26 0 -47 7t-34 18.5t-23 25t-14 27t-6.5 25t-3.5 18.5v7v1536q0 26 7 47t18.5 34t25 23t27 14t25 6.5t18.5 3.5h7zM1664 1408h-1280v-1280 h1280v1280zM896 640h-256v256h256v256h256v-256h256v-256h-256v-256h-256v256z" />
<glyph unicode="&#xf06c;" d="M256 1664h1536q35 0 61 -13t38 -32t19.5 -38t8.5 -32l1 -13v-1536q0 -35 -13 -61t-32 -38t-38 -19.5t-32 -8.5l-13 -1h-1536q-26 0 -47 7t-34 18.5t-23 25t-14 27t-6.5 25t-3.5 18.5v7v1536q0 26 7 47t18.5 34t25 23t27 14t25 6.5t18.5 3.5h7zM1664 1408h-1280v-1280 h1280v1280zM1408 640h-768v256h768v-256z" />
<glyph unicode="&#xf06d;" d="M256 1664h1536q35 0 61 -13t38 -32t19.5 -38t8.5 -32l1 -13v-1536q0 -35 -13 -61t-32 -38t-38 -19.5t-32 -8.5l-13 -1h-1536q-26 0 -47 7t-34 18.5t-23 25t-14 27t-6.5 25t-3.5 18.5v7v1536q0 26 7 47t18.5 34t25 23t27 14t25 6.5t18.5 3.5h7zM1664 1408h-1280v-1280 h1280v1280zM1024 512q-106 0 -181 75t-75 181t75 181t181 75t181 -75t75 -181t-75 -181t-181 -75z" />
<glyph unicode="&#xf06e;" d="M256 1664h1536q35 0 61 -13t38 -32t19.5 -38t8.5 -32l1 -13v-1536q0 -35 -13 -61t-32 -38t-38 -19.5t-32 -8.5l-13 -1h-1536q-26 0 -47 7t-34 18.5t-23 25t-14 27t-6.5 25t-3.5 18.5v7v1536q0 26 7 47t18.5 34t25 23t27 14t25 6.5t18.5 3.5h7zM1664 1408h-1280v-1280 h1280v1280zM1024 640h-384v256h384v256l512 -384l-512 -384v256z" />
<glyph unicode="&#xf06f;" d="M384 1664h1280q96 0 176 -80t80 -176v-768q0 -52 -14 -94.5t-36.5 -68.5t-50 -45t-55 -28t-50 -14t-36.5 -6h-14h-128v-512l-512 512h-640q-96 0 -176 80t-80 176v768q0 96 80 176t176 80zM1408 1152h-256v256h-256v-256h-256v-256h256v-256h256v256h256v256z" />
<glyph unicode="&#xf070;" d="M512 640h-128v768h128v-384h256v384h128v-768h-128v256h-256v-256zM1536 1024v-128h-256v-256h-128v768h384v-128h-256v-256h256zM1536 1024v256h128v-256h-128zM1536 640v256h128v-256h-128zM384 384h1280v-256h-1280v256z" />
<glyph unicode="&#xf071;" d="M896 384v256h-256v256h256v256l512 -384z" />
<glyph unicode="&#xf072;" d="M1024 641l-767 767h1535zM1792 384v-256h-1536v256h1536z" />
<glyph unicode="&#xf073;" d="M1792 1408v-256h-1536v256h1536zM1792 128h-1535l767 768z" />
<glyph unicode="&#xf074;" d="M0 1408h384v-1280h-384v1280zM2048 1024v-512h-640v-384l-768 640l768 640v-384h640z" />
<glyph unicode="&#xf075;" d="M1152 1536h-256v256h256v-256zM1920 1152l-256 -256h-1408v512h1408zM1152 1280h-256v-256h256v256zM896 768h256v-1024h-256v1024z" />
<glyph unicode="&#xf076;" d="M800 736l-96 -96q-48 -72 -48 -160t48 -160l192 -192h-640v1408h1152v-640l-224 -224l-64 64q-48 48 -148 48t-172 -48zM512 1408h-128v-128h128v128zM640 1280h640v128h-640v-128zM512 1152h-128v-128h128v128zM640 1024h640v128h-640v-128zM512 896h-128v-128h128v128z M640 768h128v128h-128v-128zM1792 768v-64l-576 -576h-64l-96 96l-192 224q-24 0 -24 16t24 16l96 128h32l192 -192l448 448h32z" />
<glyph unicode="&#xf077;" d="M640 -128l-256 639q-41 1 -128 1q-69 0 -128 68.5t-93.5 186.5t-34.5 257t34.5 257t93.5 186.5t128 68.5q236 -1 428 13t314 36.5t216 49.5t153 55t106 50.5t93.5 37t97.5 14.5q104 0 192.5 -103t140 -279.5t51.5 -385.5t-51.5 -385.5t-140 -279.5t-192.5 -103 q-53 0 -101 14.5t-98 38.5t-109.5 50.5t-162 56t-227.5 49.5l186 -465l-128 -256zM1664 512q69 0 128 68.5t93.5 186.5t34.5 257t-34.5 257t-93.5 186.5t-128 68.5t-128 -68.5t-93.5 -186.5t-34.5 -257t34.5 -257t93.5 -186.5t128 -68.5zM640 1290v-277q396 -26 645 -115 q-5 68 -5 126q0 215 55 397q-257 -105 -695 -131zM512 1019v265q-104 -4 -256 -4q-4 0 -4 -47.5t2 -118.5t2 -90q126 0 256 -5z" />
<glyph unicode="&#xf078;" d="M1537 768l-642 -640l-256 256l384 384l-384 384l256 256z" />
<glyph unicode="&#xf079;" d="M1792 1664v-1664h-1536v1664h1536zM1664 1536h-1280v-1408h1280v1408zM1536 1280h-1024q0 5 1 13.5t7.5 31t18.5 39t38.5 30.5t62.5 14h768q35 0 61 -13t38 -32t19.5 -38t8.5 -32zM1152 1152h256v-384l-256 -256v-256h-256v256l-256 256v384h256v-260l128 -124l128 128 v256z" />
<glyph unicode="&#xf07a;" d="M1792 1664v-1664h-1536v1664h1536zM1664 1536h-1280v-1408h1280v1408zM1536 1280h-1024q0 5 1 13.5t7.5 31t18.5 39t38.5 30.5t62.5 14h768q35 0 61 -13t38 -32t19.5 -38t8.5 -32zM1152 896h256v-256h-256v-256h-256v256h-256v256h256v256h256v-256z" />
<glyph unicode="&#xf07b;" d="M1408 1536v-1536l-377 263l-391 -263v1536h768z" />
<glyph unicode="&#xf07c;" d="M768 896h-256v512h256v-512zM1536 1280h-256v128h256v-128zM1664 1152v-256h-512v256h512zM384 768h512v-256h-512v256zM1280 768h256v-640h-256v640zM512 384h256v-256h-256v256z" />
<glyph unicode="&#xf07d;" d="M1531 814l204 244q57 -143 57 -290q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103q148 0 290 -57l-244 -204q-40 5 -46 5q-212 0 -362 -150t-150 -362t150 -362t362 -150t362 150t150 362 q0 6 -5 46zM1664 1280l-387 -484q3 -27 3 -28q0 -106 -75 -181t-181 -75t-181 75t-75 181t75 181t181 75q1 0 28 -3l484 387h128v-128z" />
<glyph unicode="&#xf07e;" d="M384 1664l148 -148q224 148 492 148q182 0 348 -71t286 -191t191 -286t71 -348t-71 -348t-191 -286t-286 -191t-348 -71t-348 71t-286 191t-191 286t-71 348q0 238 128 455v-199h182q-54 -124 -54 -256q0 -130 51 -248.5t136.5 -204t204 -136.5t248.5 -51q174 0 321.5 86 t233 233t85.5 321q0 130 -50.5 248.5t-136.5 204.5t-204.5 136.5t-248.5 50.5q-155 0 -304 -80l176 -176h-512v512zM896 256v384l-128 128l256 256l128 -128h256l128 -128l-128 -128h-256v-384l-130 -126z" />
<glyph unicode="&#xf07f;" d="M1536 640h256v-640h-1536v1536h512v-256h-256v-1024h1024v384zM1792 1536v-768l-256 256l-384 -384l-256 256l384 384l-256 256h768z" />
<glyph unicode="&#xf080;" d="M1024 1408h128v-1280h-128l-512 384h-256v512h256zM1792 768l190 -193l-129 -129l-189 194l-197 -194l-121 129l190 193l-190 193l125 125l193 -190l189 190l129 -125z" />
<glyph unicode="&#xf081;" d="M1312 736l416 -416l-256 -256l-416 416l-416 -416l-256 256l416 416l-416 416l256 256l416 -416l416 416l256 -256z" />
<glyph unicode="&#xf082;" d="M2048 1536v-256h-256v-256h-256v256h-256v256h256v256h256v-256h256zM1776 896l-317 -290l119 -606l-554 298l-554 -298l119 606l-461 423l627 77l269 558l128 -266v-246h256v-256h368z" />
<glyph unicode="&#xf083;" d="M1797 1408l205 -205l-133 -133l-205 205l-205 -205l-133 133l205 205l-205 205l133 133l205 -205l205 205l133 -133zM1779 899l-320 -293l119 -606l-554 298l-554 -298l119 606l-461 423l627 76l269 559l128 -266v-118l128 -256z" />
<glyph unicode="&#xf084;" d="M1024 1408q130 0 248.5 -50.5t204.5 -136.5t136.5 -204.5t50.5 -248.5q0 -174 -85.5 -321t-233 -233t-321.5 -86q-130 0 -248.5 51t-204 136.5t-136.5 204t-51 248.5q0 174 86 321.5t233 233t321 85.5zM673 613l506 506q-74 33 -155 33q-159 0 -271.5 -112.5 t-112.5 -271.5q0 -81 33 -155zM1375 924l-509 -506q74 -34 158 -34q159 0 271.5 112.5t112.5 271.5q0 81 -33 156z" />
<glyph unicode="&#xf085;" d="M1294 700l189 -188h437v256h-331l-323 332l-293 -401l-143 884l-397 -815h-305v-255h463l116 229l112 -693z" />
<glyph unicode="&#xf086;" d="M1824 -128v1408l-384 384h-1152v-1792h1536zM1696 0h-1280v1536h926l354 -352v-1184zM1184 640h256v256h-256v256h-256v-256h-256v-256h256v-256h256v256z" />
<glyph unicode="&#xf087;" d="M480 704l-223 31q-7 158 49 307t173 264q135 133 313.5 187t360 23t330.5 -141l164 161l78 -538l-545 77l148 146q-159 106 -356 87.5t-337 -156.5q-95 -99 -136.5 -215t-18.5 -233zM1567 845l225 -44q6 -159 -50 -307.5t-173 -263.5q-135 -133 -313 -187.5t-359.5 -23 t-331.5 141.5l-164 -161l-78 538l545 -78l-147 -145q159 -106 355.5 -87.5t336.5 156.5q94 93 133 214.5t21 246.5z" />
<glyph unicode="&#xf088;" d="M2015 1529q28 -103 -7 -190t-112 -107l-371 -100q-77 -20 -150.5 37.5t-100.5 160.5q-28 102 7 189t112 108l371 99q76 21 150 -37t101 -160zM1863 1355q25 7 34 48t-5 92q-14 52 -42 83t-53 24q-25 -6 -34 -47t5 -92q13 -51 41 -82.5t54 -25.5zM772 1063l-454 -122 q-52 -13 -97.5 13.5t-59.5 77.5q-14 52 12.5 97.5t77.5 59.5l495 133q-51 -14 -77.5 -60t-13.5 -97q11 -40 44 -65.5t74 -27.5q7 38 30 80q-16 19 -24 46q-14 52 12.5 98t77.5 59l338 223l62 16q-77 -21 -112 -108t-7 -189q27 -103 101 -160.5t151 -37.5l-62 -17l-98 6 q38 -36 38 -64q0 -106 -75 -181t-181 -75t-181 75t-75 181q0 13 4 39zM1152 512l640 -640h-256l-384 256v-256h-256v256l-384 -256h-256l640 640v128h256v-128z" />
<glyph unicode="&#xf089;" d="M1536 0l256 -256h-1536l256 256h256v185q-72 33 -124 71h-388v128h768q0 159 112.5 271.5t271.5 112.5q0 102 -50.5 188.5t-135.5 137.5l-198 -198l-128 -256h-256l-128 128v256l256 128l512 512h128l128 128l128 -128l-128 -128v-128l-130 -130q120 -89 189 -222.5 t69 -287.5q0 -45 -8 -93q64 -55 100 -130t36 -161q0 -137 -85.5 -241.5t-216.5 -133.5zM1280 384q0 -53 37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5t-37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5z" />
<glyph unicode="&#xf08a;" d="M512 1664q159 0 271.5 -112.5t112.5 -271.5t-112.5 -271.5t-271.5 -112.5t-271.5 112.5t-112.5 271.5t112.5 271.5t271.5 112.5zM2048 0l-256 -256l-576 576l-320 -320v896h896l-320 -320z" />
<glyph unicode="&#xf08b;" d="M1280 1280l-768 -768l-128 128l256 256l-512 512l256 256l512 -512l256 256zM1920 128l-256 -256l-512 512l-256 -256l-128 128l768 768l128 -128l-256 -256z" />
<glyph unicode="&#xf08c;" d="M1792 1664v-1664h-1536v1664h1536zM1664 1536h-1280v-1408h1280v1408zM1536 1280h-1024q0 5 1 13.5t8.5 31t19.5 39t38 30.5t61 14h768q26 0 47 -7t34 -18.5t23 -25t14 -27t6.5 -25t3.5 -18.5v-7zM1408 640h-768l128 384l256 -128l256 128zM1536 384h-1024l128 128h768z " />
<glyph unicode="&#xf200;" d="M640 0h-256q-34 0 -59.5 11.5t-38 27t-20 36t-9 32t-1.5 20.5v1537q0 47 40 87.5t88 40.5h1280q48 0 88 -40t40 -88v-1536q0 -5 -0.5 -13.5t-6.5 -31t-18 -39t-38.5 -30.5t-64.5 -14h-640v-256l-192 192l-192 -192v256zM384 510h128v1154h-128v-1154zM896 766h512v383v3 q0 106 -75 181t-181 75t-181 -75t-75 -181v-3v-383zM1024 1149v3q0 53 37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5v-3h-256zM1024 255v-128l576 1q3 0 7 0.5t15 4t19.5 9.5t15.5 19t7 31v191q-212 0 -687.5 0.5t-592.5 0.5v-192q0 -3 0.5 -7t4 -15t9.5 -19.5t19 -15.5 t31 -7q34 0 101.5 -0.5t90.5 -0.5v128h384z" />
<glyph unicode="&#xf201;" d="M384 1792h1280q5 0 13.5 -1t31 -7.5t39 -18.5t30.5 -38.5t14 -62.5v-1536q0 -5 -1 -13.5t-7.5 -31t-18.5 -39t-38.5 -30.5t-62.5 -14h-640v-256l-192 192l-192 -192v256h-256q-26 0 -47 7t-34 18.5t-23 25t-14 27t-6.5 25t-3.5 18.5v7v1536q0 26 7 47t18.5 34t25 23 t27 14t25 6.5t18.5 3.5h7zM1664 1664h-1024v-1152h1024v1152zM896 1408h-128v128h128v-128zM896 1152h-128v128h128v-128zM896 896h-128v128h128v-128zM896 640h-128v128h128v-128zM1024 128h576q3 0 7 0.5t15 4t19.5 9.5t15.5 19t7 31v192h-1280v-192q0 -3 0.5 -7t4 -15 t9.5 -19.5t19 -15.5t31 -7h192v128h384v-128z" />
<glyph unicode="&#xf202;" d="M384 1792h1280q48 0 88 -40t40 -88v-1536q0 -5 -0.5 -13.5t-6.5 -31t-18 -39t-38.5 -30.5t-64.5 -14h-640v-256l-192 192l-192 -192v256h-256q-34 0 -59.5 11.5t-38 27t-20 36t-9 32t-1.5 20.5v1537q0 47 40 87.5t88 40.5zM1664 1664h-1024v-1154h1024v1154zM832 1216v82 q-29 17 -46.5 46t-17.5 64q0 53 37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5q0 -35 -17.5 -64t-46.5 -46v-22l192 -188l192 192v18q-29 17 -46.5 46t-17.5 64q0 53 37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5q0 -35 -17.5 -64t-46.5 -46v-82l-256 -256v-82q29 -17 46.5 -46 t17.5 -64q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5t-37.5 90.5q0 35 17.5 64t46.5 46v82zM1024 255v-128l576 1q3 0 7 0.5t15 4t19.5 9.5t15.5 19t7 31v191q-212 0 -687.5 0.5t-592.5 0.5v-192q0 -3 0.5 -7t4 -15t9.5 -19.5t19 -15.5t31 -7q34 0 101.5 -0.5t90.5 -0.5v128 h384z" />
<glyph unicode="&#xf203;" d="M1664 896h128v-768q0 -5 -0.5 -13.5t-6.5 -31t-18 -39t-38.5 -30.5t-64.5 -14h-640v-256l-192 192l-192 -192v256h-256q-42 0 -70.5 16.5t-39.5 41.5t-14.5 41t-3.5 29v1536q0 48 40.5 88t87.5 40h768v-128h-512v-1154h1024v386zM1920 1536v-256h-256v-256h-256v256h-256 v256h256v256h256v-256h256zM896 1408h-128v128h128v-128zM896 1152h-128v128h128v-128zM896 896h-128v128h128v-128zM768 768h128v-128h-128v128zM1024 128h576q3 0 7 0.5t15 4t19.5 10t15.5 19.5t7 30v192h-1280v-192q0 -3 0.5 -7t4 -15t9.5 -19.5t19 -15.5t31 -7l192 -1 v128h384v-127z" />
<glyph unicode="&#xf204;" d="M1152 1728h-896l128 64h768v-64zM640 1600h-384v64h384v-64zM640 1472h-384v64h384v-64zM896 1472h-128v64h128v-64zM1920 1536v-256h-768v256h768zM640 1344h-384v64h384v-64zM640 1216h-384v64h384v-64zM896 1216h-128v64h128v-64zM640 1088h-384v64h384v-64zM640 960 h-384v64h384v-64zM896 960h-128v64h128v-64zM640 832h-384v64h384v-64zM1664 896h128v-64h-128v64zM640 704h-384v64h384v-64zM768 768h128v-64h-128v64zM1664 768h128v-64h-128v64zM640 576h-384v64h384v-64zM1664 640h128v-64h-128v64zM256 512h1536v-64h-1536v64z M384 320h-128v64h128v-64zM1664 384h128v-64h-128v64zM384 192h-128v64h128v-64zM1664 256h128v-64h-128v64zM1024 255v-63h-384v63h384zM256 128h1536l-64 -64h-1408zM640 0h384v-64h-384v64zM640 -128h128l-64 -64h-64v64zM896 -128h128v-64h-64z" />
<glyph unicode="&#xf205;" d="M384 1790h1280q5 1 13.5 2t30 -2.5t38 -14.5t31 -40t15.5 -73v-1534q0 -5 -0.5 -13.5t-6.5 -31t-18 -39t-38.5 -30.5t-64.5 -14h-256v128h192q3 0 7 0.5t15 4t19.5 10t15.5 19.5t7 30v191h-256v128h256v1151h-1024v-1151h256v-128h-512v-191v-7t3.5 -15t9.5 -19.5 t19.5 -15.5t31.5 -7h192v127h256v-255l-256 -256v256h-256q-34 0 -59.5 11.5t-38 27t-20 36t-9 32t-1.5 20.5v1v1534q0 36 13 63t32 38.5t38 18.5t32 8h13zM896 1406h-128v128h128v-128zM768 1278h128v-127h-128v127zM1536 639h-256v-895h-256v895h-256l384 512z" />
<glyph unicode="&#xf206;" d="M1408 894h128v-766q0 -5 -0.5 -13.5t-6.5 -31t-18 -39t-38.5 -30.5t-64.5 -14h-640v-256l-192 192l-192 -192v256h-256q-42 0 -70.5 16.5t-39.5 41.5t-14.5 41t-3.5 29v1536q0 36 13 63t32 38.5t38 18.5t32 8h13h1280q5 0 13.5 -1t30 -7.5t38.5 -18.5t31 -38.5t15 -62.5 v-256h-128v256h-1024v-1154h1024v384zM640 1408h-128v128h128v-128zM1664 768v256h-768v256h768v256l384 -384zM640 1152h-128v128h128v-128zM640 896h-128v128h128v-128zM512 766l128 2v-128h-128v126zM768 255v-128l576 1q3 0 7 0.5t15 4t19.5 10t15.5 19.5t7 30v192 h-1280v-192q0 -3 0.5 -7t4 -15t9.5 -19.5t19 -15.5t31 -7q34 0 101 -0.5t91 -0.5v128h384z" />
<glyph unicode="&#xf207;" d="M0 128v1280q36 7 104 17.5t301 28.5t491 18q26 0 47 -7t34 -18.5t23 -25t14 -27t6.5 -25t3.5 -18.5v-7q0 5 1 13.5t8.5 31t19.5 39t38 30.5t61 14q257 0 481 -16t319 -32l96 -16v-1280q-12 3 -35.5 7t-107 15t-179 19.5t-251 15.5t-323.5 7q0 -29 -16 -45t-32 -17l-16 -2 h-128q-3 0 -7 0.5t-15 4t-19.5 9.5t-15.5 19t-7 31q-285 0 -509 -16t-305 -32zM128 1280v-960q36 7 99.5 17.5t248 28.5t356.5 18q35 0 61 -6.5t38 -14.5t19.5 -18.5t8.5 -15.5t1 -9v960q0 3 -1 7t-8.5 15t-19.5 19.5t-38 15.5t-61 7q-171 0 -347 -16t-267 -32zM1920 320 v960q-36 7 -99.5 17.5t-248.5 28.5t-356 18q-36 0 -62.5 -6.5t-38.5 -16t-18.5 -19t-7.5 -16.5l-1 -6v-960q0 3 1 7t8.5 15t19.5 19.5t38 15.5t61 7q198 0 374 -16t253 -32zM832 1152h-576q0 3 0.5 7t4 15t9.5 19.5t19 15.5t31 7h448q28 0 44 -16t18 -32zM1792 1152h-576 q0 3 0.5 7t4 15t9.5 19.5t19 15.5t31 7h448q28 0 44 -16t18 -32zM832 1024h-576q0 3 0.5 7t4 15t9.5 19.5t19 15.5t31 7h448q28 0 44 -16t18 -32zM1792 1024h-576q0 3 0.5 7t4 15t9.5 19.5t19 15.5t31 7h448q28 0 44 -16t18 -32zM832 896h-576q0 3 0.5 7t4 15t9.5 19.5 t19 15.5t31 7h448q28 0 44 -16t18 -32zM1792 896h-576q0 3 0.5 7t4 15t9.5 19.5t19 15.5t31 7h448q28 0 44 -16t18 -32zM832 768h-576q0 3 0.5 7t4 15t9.5 19.5t19 15.5t31 7h448q28 0 44 -16t18 -32zM1792 768h-576q0 3 0.5 7t4 15t9.5 19.5t19 15.5t31 7h448q28 0 44 -16 t18 -32zM832 640h-576q0 3 0.5 7t4 15t9.5 19.5t19 15.5t31 7h448q28 0 44 -16t18 -32zM1792 640h-576q0 3 0.5 7t4 15t9.5 19.5t19 15.5t31 7h448q28 0 44 -16t18 -32zM832 512h-576q0 3 0.5 7t4 15t9.5 19.5t19 15.5t31 7h448q28 0 44 -16t18 -32zM1792 512h-576 q0 3 0.5 7t4 15t9.5 19.5t19 15.5t31 7h448q28 0 44 -16t18 -32z" />
<glyph unicode="&#xf208;" d="M1829 1236q156 -180 156 -429q0 -139 -24.5 -252t-68 -196t-110.5 -145.5t-145.5 -103t-179 -65.5t-205 -35t-229.5 -10t-229 10t-204.5 35t-178.5 65.5t-144.5 103t-110 145.5t-67.5 196t-24 252q0 250 156 429q-9 23 -16 55t-13 88t5 130t40 151q5 2 15.5 3.5 t47.5 -2.5t80.5 -18t116 -52t152.5 -97q137 41 376 41t375 -41q80 59 152 97.5t117.5 51.5t79.5 18t49 2l15 -3q29 -77 39.5 -151t4.5 -130.5t-12.5 -87.5t-15.5 -55zM1024 128q98 0 162.5 2t146 11.5t133 26.5t106.5 48t85.5 76t50.5 111.5t20 151.5q0 145 -120 263 q-36 36 -84 54.5t-108.5 21t-115.5 -1t-136 -9.5t-140 -6t-140 6t-136 9.5t-115.5 1t-108 -21t-83.5 -54.5q-120 -118 -120 -263q0 -85 20 -151.5t50.5 -111.5t85.5 -76t106.5 -48t133 -26.5t145.5 -11.5t162 -2zM672 738q40 0 68 -46.5t28 -113.5q0 -66 -28 -113t-68 -47 t-68 47t-28 113q0 67 28 113.5t68 46.5zM1374 738q40 0 68 -46.5t28 -113.5q0 -66 -28 -113t-68 -47t-68 47t-28 113q0 67 28 113.5t68 46.5zM1023 384q-26 0 -45 9.5t-19 22.5t19 22.5t45 9.5t45 -9.5t19 -22.5t-19 -22.5t-45 -9.5zM1118 308q5 19 22 12q7 -2 10 -9.5 t1 -15.5q-14 -46 -49 -74.5t-78 -28.5t-78 28.5t-49 74.5q-2 8 1 15.5t10 9.5q17 7 22 -12q11 -34 37 -55t57 -21t57 21t37 55z" />
<glyph unicode="&#xf209;" d="M1023 1792q208 0 398 -81t327 -218.5t218 -327t81 -397.5q0 -209 -81 -398.5t-218 -326.5t-326.5 -218t-398.5 -81q-208 0 -397.5 81t-326.5 218t-218 327t-81 398t81 397.5t218 327t326.5 218.5t397.5 81zM1280 139v-203q268 88 437.5 316.5t169.5 515.5 q0 176 -68.5 336t-184 275.5t-275.5 184t-336 68.5q-175 0 -335 -68.5t-275.5 -184t-184 -275.5t-68.5 -336q0 -287 170.5 -516t438.5 -316v163q-75 -15 -128.5 -9.5t-87.5 26.5t-54 43.5t-27 40.5l-8 17q-18 46 -42.5 78.5t-39.5 42.5l-16 9q-36 26 -34.5 38t20.5 14l20 2 q25 -2 48 -12t38.5 -23t27 -25.5t16.5 -21.5l6 -9q29 -50 69.5 -74.5t80.5 -23t66.5 8.5t49.5 18q12 61 78 81q-63 7 -114.5 18.5t-108 34t-98.5 59t-77 88t-53.5 128t-18.5 171.5q0 157 103 270q-47 123 10 267q3 1 10 2t32 -1.5t54.5 -11t78 -32.5t102.5 -60 q118 32 252 34q133 -2 252 -34q54 36 102 60t78.5 32.5t53 11.5t32.5 1l10 -2q25 -63 28.5 -125.5t-3 -91.5t-15.5 -50q104 -112 104 -270q0 -82 -14.5 -150t-38.5 -116.5t-60.5 -87t-75.5 -62.5t-89 -41.5t-94.5 -26t-97.5 -14.5q84 -57 84 -182z" />
<glyph unicode="&#xf20a;" d="M766 49v-241q-216 31 -392 169t-275 347t-99 445q0 208 81 397.5t218 326.5t327 218t398 81t397.5 -81t326.5 -218t218 -326.5t81 -397.5q0 -236 -99 -445t-275 -347t-392 -169v321q-1 127 -85 183q54 6 98.5 14.5t94.5 26t89 42t75.5 63t61 87.5t39 117.5t14.5 150.5 q0 158 -104 272q9 20 15.5 49.5t3 92t-27.5 125.5q-3 1 -10 2t-32.5 -1t-54.5 -10.5t-78.5 -32.5t-103.5 -61q-118 32 -253 34q-135 -2 -253 -34q-54 37 -103 61t-79.5 32t-53.5 11t-33 1l-10 -2q-25 -63 -28.5 -126t3 -91t15.5 -50q-104 -115 -104 -272q0 -114 28 -201 t72 -139.5t109.5 -87.5t126.5 -50t138 -23q-62 -41 -79 -122q-23 -11 -50 -18.5t-67.5 -9t-81 23t-69.5 74.5q-2 3 -5.5 9t-16.5 21t-28 27t-38.5 22.5t-48.5 12.5h-9t-16 -3t-14.5 -8t3.5 -16t30 -27q2 -1 6.5 -3.5t17 -13t24 -23.5t26 -37.5t25.5 -53.5q1 -2 2.5 -5.5 t7 -14.5t13.5 -21.5t21.5 -24t29.5 -24t40 -19.5t51 -14t63.5 -4t77.5 9z" />
<glyph unicode="&#xf20b;" d="M768 521v-130q-162 25 -267 142q-60 -21 -117 -21q-159 0 -271.5 112.5t-112.5 271.5t112.5 271.5t271.5 112.5q8 0 51 -5q75 174 234.5 281.5t354.5 107.5t354.5 -107.5t234.5 -281.5q43 5 51 5q159 0 271.5 -112.5t112.5 -271.5t-112.5 -271.5t-271.5 -112.5 q-1 0 -3 0.5t-3 0.5q-131 -129 -314 -129q-22 0 -64 6v130q34 -8 64 -8q79 0 148 36.5t113 99.5q30 -8 59 -8q106 0 181 75t75 181t-75 181t-181 75q-76 0 -139 -41q-31 182 -172 303.5t-329 121.5t-329.5 -121t-173.5 -303q-64 40 -137 40q-106 0 -181 -75t-75 -181 t75 -181t181 -75q87 0 159 57q32 -68 91 -114t134 -62zM1152 256h256l-384 -384l-384 384h256v640h256v-640z" />
<glyph unicode="&#xf20c;" d="M768 521v-130q-162 25 -267 142q-60 -21 -117 -21q-159 0 -271.5 112.5t-112.5 271.5t112.5 271.5t271.5 112.5q8 0 51 -5q75 174 234.5 281.5t354.5 107.5t354.5 -107.5t234.5 -281.5q43 5 51 5q159 0 271.5 -112.5t112.5 -271.5t-112.5 -271.5t-271.5 -112.5 q-1 0 -3 0.5t-3 0.5q-131 -129 -314 -129q-22 0 -64 6v130q34 -8 64 -8q79 0 148 36.5t113 99.5q30 -8 59 -8q106 0 181 75t75 181t-75 181t-181 75q-76 0 -139 -41q-31 182 -172 303.5t-329 121.5t-329.5 -121t-173.5 -303q-64 40 -137 40q-106 0 -181 -75t-75 -181 t75 -181t181 -75q87 0 159 57q32 -68 91 -114t134 -62zM1408 768h-256v-640h-256v640h-256l384 384z" />
<glyph unicode="&#xf20d;" d="M2048 1408v-1280h-2048v1280h2048zM1920 1280h-1792v-1024h1792v1024zM384 1024h-128v128h128v-128zM576 1024h-128v128h128v-128zM768 1024h-128v128h128v-128zM960 1024h-128v128h128v-128zM1152 1024h-128v128h128v-128zM1344 1024h-128v128h128v-128zM1536 1024h-128 v128h128v-128zM1792 1024h-192v128h192v-128zM448 768h-192v128h192v-128zM512 896h128v-128h-128v128zM704 896h128v-128h-128v128zM896 896h128v-128h-128v128zM1088 896h128v-128h-128v128zM1280 896h128v-128h-128v128zM1472 896h128v-128h-128v128zM1664 896h128v-320 h-256v128h128v192zM320 576h-64v128h64v-128zM512 576h-128v128h128v-128zM704 576h-128v128h128v-128zM896 704v-128h-128v128h128zM1088 704v-128h-128v128h128zM1280 704v-128h-128v128h128zM1344 704h128v-128h-128v128zM384 384h-128v128h128v-128zM448 512h128v-128 h-128v128zM640 512h832v-128h-832v128zM1536 512h256v-128h-256v128z" />
<glyph unicode="&#xf20e;" d="M1792 1664v-1664h-1536v1664h1536zM1664 1536h-1280v-1408h1280v1408zM1536 1280h-1024q0 5 1 13.5t8.5 31t19.5 39t38 30.5t61 14h768q26 0 47 -7t34 -18.5t23 -25t14 -27t6.5 -25t3.5 -18.5v-7zM864 356l-352 348l352 352l96 -96l-256 -256l256 -256zM1182 1056 l354 -352l-352 -352l-96 96l256 256l-256 256z" />
<glyph unicode="&#xf20f;" d="M1792 1664v-1664h-1536v1664h1536zM1664 1536h-1280v-1408h1280v1408zM1536 1280h-1024q0 5 1 13.5t7.5 31t18.5 39t38.5 30.5t62.5 14h768q35 0 61 -13t38 -32t19.5 -38t8.5 -32zM768 384v384q0 106 75 181t181 75t181 -75t75 -181v-384h-512zM896 768h256 q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5z" />
<glyph unicode="&#xf210;" d="M1792 1280v-1408h-1536v1792h1152zM1664 1184l-354 352h-926v-1536h1280v1184zM960 960l-256 -256l256 -256l-96 -96l-352 352l350 354zM1184 1056l352 -352l-356 -350l-92 94l256 256l-256 256z" />
<glyph unicode="&#xf211;" d="M1792 1280v-1408h-1536v1792h1152zM1664 1216l-320 320h-960v-1536h1280v1216zM768 1344h-256v64h256v-64zM896 1216h-384v64h384v-64zM704 1024h-192v64h192v-64zM768 1088h256v-64h-256v64zM1088 1088h384v-64h-384v64zM832 896h-320v64h320v-64zM896 960h384v-64h-384 v64zM1344 960h192v-64h-192v64zM640 768h-128v64h128v-64zM832 768h-128v64h128v-64zM1152 832v-64h-256v64h256zM1216 832h192v-64h-192v64zM768 640h-256v64h256v-64zM1216 640h-384v64h384v-64zM1280 704h192v-64h-192v64zM704 512h-192v64h192v-64zM768 576h256v-64 h-256v64zM1088 576h448v-64h-448v64zM832 384h-320v64h320v-64zM1280 384h-384v64h384v-64zM1408 448v-64h-64v64h64zM640 256h-128v64h128v-64zM704 256v64h128v-64h-128zM896 320h256v-64h-256v64zM1472 256h-256v64h256v-64zM512 192h256v-64h-256v64zM832 192h384v-64 h-384v64zM1280 192h256v-64h-256v64z" />
<glyph unicode="&#xf212;" d="M1792 1280v-1408h-1536v1792h1152zM1664 1216l-320 320h-960v-1536h1280v1216zM576 1216h768l128 -128v-768h-192v192q0 53 -37.5 90.5t-90.5 37.5h-256q-53 0 -90.5 -37.5t-37.5 -90.5v-192h-192v896zM1024 1088q-80 0 -136 -56t-56 -136t56 -136t136 -56t136 56t56 136 t-56 136t-136 56z" />
<glyph unicode="&#xf213;" d="M1792 1280v-1408h-1536v1792h1152zM1664 1216l-320 320h-448v-64h-128v64h-384v-1536h1280v1216zM640 1472h128v-64h-128v64zM768 1344v64h128v-64h-128zM640 1344h128v-64h-128v64zM768 1216v64h128v-64h-128zM640 1216h128v-64h-128v64zM768 1088v64h128v-64h-128z M640 1088h128v-64h-128v64zM768 960v64h128v-64h-128zM640 960h128v-64h-128v64zM768 832v64h128v-64h-128zM640 832h128v-64h-128v64zM768 704v64h128v-64h-128zM640 704h128v-64h-128v64zM768 576v64h128v-64h-128zM640 576h128v-64h128q26 0 47 -7t34 -18.5t23 -25 t14 -27t6.5 -25t3.5 -18.5v-7v-256h-512v256q0 5 1 13.5t7.5 31t18.5 39t38.5 30.5t62.5 14v64zM640 384v-128h256v128h-256z" />
<glyph unicode="&#xf214;" d="M1792 1280v-1408h-1536v1792h1152zM1664 1216l-320 320h-960v-1536h1280v1216zM1032 975q13 -38 27.5 -71.5t30 -58.5t29 -45.5t29.5 -36t27 -26.5t26 -20t21.5 -12.5t18.5 -9.5t13 -6q12 1 54 7t63 6q186 0 223 -84q7 -15 8.5 -36t-5 -45t-20.5 -43.5t-42 -31.5t-66 -9 q-47 2 -119 32.5t-132 73.5q-107 -11 -231.5 -42.5t-169.5 -50.5q-97 -163 -160 -218.5t-112 -55.5q-52 0 -78 27.5t-20 67.5q8 49 60 104t104 89.5t93 52.5q25 45 98.5 200.5t96.5 232.5q-72 190 -37 321q8 32 40 50t69.5 13.5t60.5 -30.5q6 -6 13 -18.5t16.5 -43t12 -67 t-7.5 -94.5t-34 -122zM965 1293q-11 1 -23.5 -7t-22 -28t-11.5 -49t12.5 -76.5t45.5 -104.5q45 71 47 165t-48 100zM792 518q185 82 395 113q-12 6 -33.5 22.5t-54.5 48t-68.5 87t-61.5 122.5q-20 -78 -81 -205t-96 -188zM1537 553q6 14 -4.5 29t-63.5 32.5t-177 -0.5 q19 -9 44.5 -23t44.5 -24t41.5 -21t39 -16t32 -6.5t26.5 6t17 23.5zM518 254q79 1 212 226q-23 -9 -59.5 -32t-75 -54.5t-62 -70t-15.5 -69.5z" />
<glyph unicode="&#xf215;" d="M1920 640l-768 -768l-1024 1024v512l256 256h512zM1152 64l564 576l-896 896h-372l-192 -192v-384zM768 1216q0 -80 -56 -136t-136 -56t-136 56t-56 136t56 136t136 56t136 -56t56 -136zM576 1152q26 0 45 19t19 45t-19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19z M1536 640l-384 -384l-512 512l384 384zM1152 452l196 188l-324 324l-192 -196z" />
<glyph unicode="&#xf216;" d="M128 128v1280q0 5 1 13.5t7.5 31t18.5 39t38.5 30.5t62.5 14h640q5 0 13.5 -1t31 -7.5t39 -18.5t30.5 -38.5t14 -62.5q0 -5 1 -13.5t7.5 -31t18.5 -39t38.5 -30.5t62.5 -14h640q5 0 13.5 -1t31 -7.5t39 -18.5t30.5 -38.5t14 -62.5v-1024h-1792zM896 1408h-512h-128v-128 h640v128z" />
<glyph unicode="&#xf217;" d="M128 384v1280q0 5 1 13.5t7.5 31t18.5 39t38.5 30.5t62.5 14h640q5 0 13.5 -1t31 -7.5t39 -18.5t30.5 -38.5t14 -62.5q0 -5 1 -13.5t7.5 -31t18.5 -39t38.5 -30.5t62.5 -14h640q5 0 13.5 -1t31 -7.5t39 -18.5t30.5 -38.5t14 -62.5v-384h-256q0 5 -1 13.5t-7.5 31 t-18.5 39t-38.5 30.5t-62.5 14h-640q-5 0 -13.5 -1t-31 -7.5t-39 -18.5t-30.5 -38.5t-14 -62.5v-640h-640zM256 1536h640q0 5 -1 13.5t-7.5 31t-18.5 39t-38.5 30.5t-62.5 14h-384q-26 0 -47 -7t-34 -18.5t-23 -25t-14 -27t-6.5 -25t-3.5 -18.5v-7zM1536 896h256 q5 0 13.5 -1t31 -7.5t39 -18.5t30.5 -38.5t14 -62.5v-384h-1024v512q0 5 1 13.5t7.5 31t18.5 39t38.5 30.5t62.5 14h384q26 0 47 -7t34 -18.5t23 -25t14 -27t6.5 -25t3.5 -18.5v-7zM1408 768v128h-128h-256v-128h384z" />
<glyph unicode="&#xf218;" d="M1024 1088q-133 0 -226.5 93.5t-93.5 226.5t93.5 226.5t226.5 93.5t226.5 -93.5t93.5 -226.5t-93.5 -226.5t-226.5 -93.5zM1024 1599q-80 0 -135.5 -55.5t-55.5 -135.5t55.5 -135.5t135.5 -55.5t135.5 55.5t55.5 135.5t-55.5 135.5t-135.5 55.5zM768 1024h512 q106 0 181 -75t75 -181v-256q0 -106 -75 -181t-181 -75v-512h-512v512q-106 0 -181 75t-75 181v256q0 106 75 181t181 75zM1408 512v256q0 53 -37.5 90.5t-90.5 37.5h-512q-53 0 -90.5 -37.5t-37.5 -90.5v-256q0 -53 37.5 -90.5t90.5 -37.5v256h128v-768h256v768h128v-256 q53 0 90.5 37.5t37.5 90.5z" />
<glyph unicode="&#xf219;" d="M749 1311q-29 -71 -93.5 -115t-143.5 -44q-106 0 -181 75t-75 181t75 181t181 75q63 0 116.5 -28t89.5 -77q29 102 113.5 167.5t192.5 65.5t192.5 -65.5t113.5 -167.5q36 49 89.5 77t116.5 28q106 0 181 -75t75 -181t-75 -181t-181 -75q-79 0 -143.5 44t-93.5 115 q-42 -73 -115 -116t-160 -43t-160 43t-115 116zM1024 1663q-80 0 -135.5 -55.5t-55.5 -135.5t55.5 -135.5t135.5 -55.5t135.5 55.5t55.5 135.5t-55.5 135.5t-135.5 55.5zM512 1280q53 0 90.5 37.5t37.5 90.5t-37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5 t90.5 -37.5zM1536 1536q-53 0 -90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5t-37.5 90.5t-90.5 37.5zM1344 1152h320q106 0 181 -75t75 -181v-192q0 -69 -35 -127.5t-93 -92.5v-420h-512v-320h-512v320h-512v420q-58 34 -93 92.5t-35 127.5v192 q0 106 75 181t181 75h320q94 0 168 -64h304q74 64 168 64zM640 192v100q-58 34 -93 92.5t-35 127.5v320q0 114 88 192h-216q-53 0 -90.5 -37.5t-37.5 -90.5v-192h128v-512h256zM1792 704v192q0 53 -37.5 90.5t-90.5 37.5h-216q88 -78 88 -192v-320q0 -69 -35 -127.5 t-93 -92.5v-100h256v512h128zM1280 640v-256q53 0 90.5 37.5t37.5 90.5v320q0 53 -37.5 90.5t-90.5 37.5h-512q-53 0 -90.5 -37.5t-37.5 -90.5v-320q0 -53 37.5 -90.5t90.5 -37.5v256h128v-768h256v768h128z" />
<glyph unicode="&#xf21a;" d="M640 1088q-133 0 -226.5 93.5t-93.5 226.5t93.5 226.5t226.5 93.5t226.5 -93.5t93.5 -226.5t-93.5 -226.5t-226.5 -93.5zM1920 1408v-256h-256v-256h-256v256h-256v256h256v256h256v-256h256zM640 1600q-80 0 -136 -56t-56 -136t56 -136t136 -56t136 56t56 136t-56 136 t-136 56zM384 1024h512q106 0 181 -75t75 -181v-256q0 -106 -75 -181t-181 -75v-512h-512v512q-106 0 -181 75t-75 181v256q0 106 75 181t181 75zM1024 512v256q0 53 -37.5 90.5t-90.5 37.5h-512q-53 0 -90.5 -37.5t-37.5 -90.5v-256q0 -53 37.5 -90.5t90.5 -37.5v256h128 v-768h256v768h128v-256q53 0 90.5 37.5t37.5 90.5z" />
<glyph unicode="&#xf21b;" d="M849 1728h-418q96 64 209 64t209 -64zM357 1664h283q-94 0 -168 -64h-163q20 33 48 64zM971 1600h-163q-74 64 -168 64h283q28 -31 48 -64zM280 1536h140q-18 -30 -27 -64h-131q6 32 18 64zM1018 1472h-131q-9 34 -27 64h140q12 -32 18 -64zM393 1344h-131q-6 42 -6 64 h128q0 -26 9 -64zM896 1408h128q0 -22 -6 -64h-131q9 38 9 64zM1920 1408v-256h-768v256h768zM280 1280h140q17 -31 54 -64h-164q-18 31 -30 64zM860 1280h140q-12 -33 -30 -64h-165q37 32 55 64zM847 1088h-414q-45 29 -76 64h566q-31 -35 -76 -64zM384 1024h512 q94 0 168 -64h-848q74 64 168 64zM164 896h220q-35 0 -64 -17.5t-46 -46.5h-137q9 34 27 64zM1143 832h-137q-17 29 -46 46.5t-64 17.5h220q18 -30 27 -64zM256 704h-128v64h128v-64zM1024 768h128v-64h-128v64zM256 576h-128v64h128v-64zM512 576h-128v64h128v-64zM896 576 h-128v64h128v-64zM1024 640h128v-64h-128v64zM128 512h128q0 -33 18 -64h-137q-9 38 -9 64zM384 512h128v-64h-128v64zM768 512h128v-64h-128v64zM1143 448h-137q18 31 18 64h128q0 -26 -9 -64zM512 320h-294q-37 33 -54 64h348v-64zM768 384h348q-18 -32 -55 -64h-293v64z M512 192h-128v64h128v-64zM768 256h128v-64h-128v64zM512 64h-128v64h128v-64zM768 128h128v-64h-128v64zM384 0h128v-64h-128v64zM768 0h128v-64h-128v64zM384 -128h512v-64h-512v64z" />
<glyph unicode="&#xf21c;" d="M1408 1088q-133 0 -226.5 93.5t-93.5 226.5t93.5 226.5t226.5 93.5t226.5 -93.5t93.5 -226.5t-93.5 -226.5t-226.5 -93.5zM1408 1600q-80 0 -136 -56t-56 -136t56 -136t136 -56t136 56t56 136t-56 136t-136 56zM448 1152l384 -384l-384 -384v256h-320v256h320v256z M1152 1024h512q106 0 181 -75t75 -181v-256q0 -106 -75 -181t-181 -75v-512h-512v512q-106 0 -181 75t-75 181v256q0 106 75 181t181 75zM1792 512v256q0 53 -37.5 90.5t-90.5 37.5h-512q-53 0 -90.5 -37.5t-37.5 -90.5v-256q0 -53 37.5 -90.5t90.5 -37.5v256h128v-768h256 v768h128v-256q53 0 90.5 37.5t37.5 90.5z" />
<glyph unicode="&#xf21d;" d="M2048 1536v-256h-256v-256h-256v256h-256v256h256v256h256v-256h256zM1920 896v104q40 -57 72 -115t44 -87l12 -30q-5 -13 -15.5 -36t-51 -89.5t-90.5 -127t-136.5 -134.5t-186 -127t-242.5 -89.5t-302 -36.5q-125 0 -240 22t-204 59t-168 85t-136.5 101t-105 106 t-78.5 101t-52.5 85t-30.5 59l-9 22q3 9 9.5 24.5t31 63.5t54 95t79.5 110t106.5 117.5t136.5 110.5t168 95t202 63.5t237 24.5q71 0 128 -7v-192q-72 7 -128 7q-102 0 -196 -17.5t-166 -47t-136 -68t-110.5 -81t-85.5 -85t-64 -81t-42 -68t-24 -46.5l-8 -18 q4 -11 12.5 -29.5t41 -71.5t72.5 -101.5t110 -107.5t151 -101.5t197.5 -71.5t247.5 -29q103 0 197 17.5t166.5 47t136.5 68t110.5 81t85 85t63 81t42 68t24.5 46.5l7 18q-21 55 -71 128h135zM640 768q0 159 112.5 271.5t271.5 112.5t271.5 -112.5t112.5 -271.5 t-112.5 -271.5t-271.5 -112.5t-271.5 112.5t-112.5 271.5zM864 832q40 0 68 28t28 68t-28 68t-68 28t-68 -28t-28 -68t28 -68t68 -28z" />
<glyph unicode="&#xf21e;" d="M1322 1207l209 209l-201 201l133 133l201 -201l201 201l133 -133l-201 -201l209 -209l-133 -133l-209 209l-209 -209zM1773 911l138 101q43 -60 77 -121t47 -92l13 -31q-5 -13 -15.5 -36t-51 -89.5t-90.5 -127t-136.5 -134.5t-186 -127t-242.5 -89.5t-302 -36.5 q-125 0 -240 22t-204 59t-168 85t-136.5 101t-105 106t-78.5 101t-52.5 85t-30.5 59l-9 22q3 9 9.5 24.5t31 63.5t54 95t79.5 110t106.5 117.5t136.5 110.5t168 95t202 63.5t237 24.5q99 0 193 -17l55 -77l-108 -108q-73 10 -140 10q-102 0 -196 -17.5t-166 -47t-136 -68 t-110.5 -81t-85.5 -85t-64 -81t-42 -68t-24 -46.5l-8 -18q4 -11 12.5 -29.5t41 -71.5t72.5 -101.5t110 -107.5t151 -101.5t197.5 -71.5t247.5 -29q103 0 197 17.5t166.5 47t136.5 68t110.5 81t85 85t63 81t42 68t24.5 46.5l7 18q-25 62 -83 143zM640 768q0 159 112.5 271.5 t271.5 112.5t271.5 -112.5t112.5 -271.5t-112.5 -271.5t-271.5 -112.5t-271.5 112.5t-112.5 271.5zM864 832q40 0 68 28t28 68t-28 68t-68 28t-68 -28t-28 -68t28 -68t68 -28z" />
<glyph unicode="&#xf21f;" d="M1920 896v-256h-467q-42 -140 -160.5 -230t-268.5 -90t-268.5 90t-160.5 230h-467v256h467q42 140 160.5 230t268.5 90t268.5 -90t160.5 -230h467zM1024 512q106 0 181 75t75 181t-75 181t-181 75t-181 -75t-75 -181t75 -181t181 -75z" />
<glyph unicode="&#xf220;" d="M1280 896v35q-58 35 -93 93t-35 128q0 106 75 181t181 75t181 -75t75 -181q0 -70 -35 -128t-93 -93v-35q0 -7 -0.5 -18t-5.5 -46t-13.5 -69t-27 -80t-43 -85.5t-64.5 -80t-88.5 -69t-118 -46.5t-151.5 -18q-128 0 -197 -83q69 -72 69 -173q0 -98 -76 -177t-180 -79 t-180 79t-76 177q0 69 35 127.5t93 92.5v840q-58 34 -93 92t-35 128q0 106 75 181t181 75t181 -75t75 -181q0 -70 -35 -128t-93 -92v-606q111 58 256 58q52 0 94.5 14t68.5 36.5t45 50t28 55t14 50t6 36.5v14zM640 1536q-53 0 -90.5 -37.5t-37.5 -90.5t37.5 -90.5 t90.5 -37.5t90.5 37.5t37.5 90.5t-37.5 90.5t-90.5 37.5zM1408 1024q53 0 90.5 37.5t37.5 90.5t-37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5zM640 0q53 0 90.5 37.5t37.5 90.5t-37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5 t90.5 -37.5z" />
<glyph unicode="&#xf221;" d="M768 1188v-606q57 30 112 44t144 14q52 0 94.5 14t68.5 36.5t45 50t28 55t14 50t6 36.5v14h256q0 -7 -0.5 -18t-5.5 -46t-13.5 -69t-27 -80t-43 -85.5t-64.5 -80t-88.5 -69t-118 -46.5t-151.5 -18q-128 0 -197 -83q69 -72 69 -173q0 -98 -76 -177t-180 -79t-180 79 t-76 177q0 69 35 127.5t93 92.5v840q-58 34 -93 92t-35 128q0 106 75 181t181 75t181 -75t75 -181q0 -70 -35 -128t-93 -92zM1152 1405v3q0 106 75 181t181 75t181 -75t75 -181v-384h-512v381zM640 1536q-53 0 -90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5 t37.5 90.5t-37.5 90.5t-90.5 37.5zM1280 1408h256q0 53 -37.5 90.5t-90.5 37.5q-52 0 -90 -39.5t-38 -88.5zM640 0q53 0 90.5 37.5t37.5 90.5t-37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5z" />
<glyph unicode="&#xf222;" d="M1152 1536h128q8 0 22 -1t53.5 -8.5t76 -20.5t81 -41.5t76 -67.5t53.5 -102.5t22 -142.5v-804q58 -34 93 -92.5t35 -127.5q0 -98 -76 -177t-180 -79t-180 79t-76 177q0 69 35 127.5t93 92.5v804q-1 5 -2.5 13.5t-10 31t-21.5 39t-37.5 30.5t-56.5 14h-128v-256l-384 384 l384 384v-256zM384 348v840q-58 34 -93 92t-35 128q0 106 75 181t181 75t181 -75t75 -181q0 -70 -35 -128t-93 -92v-840q58 -34 93 -92.5t35 -127.5q0 -98 -76 -177t-180 -79t-180 79t-76 177q0 69 35 127.5t93 92.5zM512 1280q53 0 90.5 37.5t37.5 90.5t-37.5 90.5 t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5zM512 0q53 0 90.5 37.5t37.5 90.5t-37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5zM1536 0q53 0 90.5 37.5t37.5 90.5t-37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5 t90.5 -37.5z" />
<glyph unicode="&#xf223;" d="M384 348v840q-58 34 -93 92t-35 128q0 106 75 181t181 75t181 -75t75 -181q0 -120 -95 -198q18 -63 45 -119t76.5 -117.5t113 -105t160 -72t212.5 -28.5h36q34 58 92 93t128 35q106 0 181 -75t75 -181t-75 -181t-181 -75q-70 0 -128 35t-92 93h-36q-407 0 -640 242v-406 q58 -34 93 -92.5t35 -127.5q0 -98 -76 -177t-180 -79t-180 79t-76 177q0 69 35 127.5t93 92.5zM512 1280q53 0 90.5 37.5t37.5 90.5t-37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5zM1536 512q53 0 90.5 37.5t37.5 90.5t-37.5 90.5t-90.5 37.5 t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5zM512 0q53 0 90.5 37.5t37.5 90.5t-37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5z" />
<glyph unicode="&#xf224;" d="M2048 1152v-1408l-1024 512l-1024 -512v1408l1024 640zM1920 1024l-768 512v-448h-256v448l-768 -512v-1024l768 384v192h256v-192l768 -384v1024zM640 960h768v256l384 -384l-384 -384v256h-768v-256l-384 384l384 384v-256z" />
<glyph unicode="&#xf225;" d="M2048 1280v-1536l-1024 512l-1024 -512v1536l1024 512zM1920 1152l-768 384v-192h-256v192l-768 -384v-1152l768 384v64h256v-64l768 -384v1152zM768 576v384q0 106 75 181t181 75t181 -75t75 -181v-384h-512zM320 832l320 256v-512zM896 960h256q0 53 -37.5 90.5 t-90.5 37.5t-90.5 -37.5t-37.5 -90.5zM1728 832l-320 -256v512z" />
<glyph unicode="&#xf226;" d="M1024 1664q182 0 348 -71t286 -191t191 -286t71 -348t-71 -348t-191 -286t-286 -191t-348 -71t-348 71t-286 191t-191 286t-71 348t71 348t191 286t286 191t348 71zM1024 51q146 0 278.5 57t228.5 153t153 228.5t57 278.5t-57 278.5t-153 228.5t-228.5 153t-278.5 57 t-278.5 -57t-228.5 -153t-153 -228.5t-57 -278.5t57 -278.5t153 -228.5t228.5 -153t278.5 -57zM960 1280h128q26 0 45 -19t19 -45v-576q0 -26 -19 -45t-45 -19h-128q-26 0 -45 19t-19 45v576q0 26 19 45t45 19zM1024 512q53 0 90.5 -37.5t37.5 -90.5t-37.5 -90.5 t-90.5 -37.5t-90.5 37.5t-37.5 90.5t37.5 90.5t90.5 37.5z" />
<glyph unicode="&#xf227;" d="M390 1583l99 -98q238 179 535 179q182 0 348 -71t286 -191t191 -286t71 -348q0 -186 -73 -355l-204 19q85 157 85 336q0 143 -55.5 273.5t-150 225t-225 150t-273.5 55.5q-219 0 -398 -125l81 -81l-341 -21zM1088 576h-128q-26 0 -45 19t-19 45v576q0 27 19 45.5t45 18.5 h128q26 0 45 -18.5t19 -45.5v-576q0 -26 -19 -45t-45 -19zM1341 270l341 21l-24 -338l-98 98q-240 -179 -536 -179q-182 0 -348 71t-286 191t-191 286t-71 348q0 186 73 355l204 -19q-85 -157 -85 -336q0 -143 55.5 -273.5t150 -225t225 -150t273.5 -55.5q219 0 398 125z M1024 256q-53 0 -90.5 37.5t-37.5 90.5t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5t-37.5 -90.5t-90.5 -37.5z" />
<glyph unicode="&#xf228;" d="M1592 1461l-107 -162q-199 173 -461 173q-143 0 -273.5 -55.5t-225 -150t-150 -225t-55.5 -273.5t55.5 -273.5t150 -225t225 -150t273.5 -55.5q137 0 262.5 51t218.5 138.5t152 209t68 256.5l195 49q0 -182 -71 -348t-191 -286t-286 -191t-348 -71t-348 71t-286 191 t-191 286t-71 348t71 348t191 286t286 191t348 71q159 0 304.5 -53t263.5 -150zM1536 1024l384 384l128 -128l-512 -512l-256 256l128 128zM1152 1216v-576q0 -26 -19 -45t-45 -19h-128q-26 0 -45 19t-19 45v576q0 26 19 45t45 19h128q26 0 45 -19t19 -45zM1024 512 q53 0 90.5 -37.5t37.5 -90.5t-37.5 -90.5t-90.5 -37.5t-90.5 37.5t-37.5 90.5t37.5 90.5t90.5 37.5z" />
<glyph unicode="&#xf229;" d="M1577 1469h-611q-179 -15 -327 -111.5t-233.5 -252.5t-85.5 -337q0 -143 55.5 -273.5t150 -225t225 -150t273.5 -55.5q231 0 414.5 135t253.5 349l148 -148q-107 -237 -327.5 -382.5t-488.5 -145.5q-182 0 -348 71t-286 191t-191 286t-71 348t71 348t191 286t286 191 t348 71q312 0 553 -195zM1660 832h-256q-5 0 -13.5 1.5t-30 9.5t-37.5 20t-29.5 37.5t-13.5 59.5v256q0 5 1 13.5t7.5 31t18.5 39t38.5 30.5t62.5 14h512q5 0 13.5 -1t31 -7.5t39 -18.5t30.5 -38.5t14 -62.5v-256q0 -35 -13 -61t-32 -38t-38 -19.5t-32 -8.5l-13 -1v-256z M1152 1216v-576q0 -26 -19 -45t-45 -19h-128q-26 0 -45 19t-19 45v576q0 26 19 45t45 19h128q26 0 45 -19t19 -45zM1024 512q53 0 90.5 -37.5t37.5 -90.5t-37.5 -90.5t-90.5 -37.5t-90.5 37.5t-37.5 90.5t37.5 90.5t90.5 37.5z" />
<glyph unicode="&#xf22a;" d="M1459 606l119 -606l-554 298l-554 -298l119 606l-461 422l627 77l269 559l269 -559l627 -77z" />
<glyph unicode="&#xf22b;" d="M384 1664h1280q96 0 176 -80t80 -176v-768q0 -96 -80 -176t-176 -80h-640l-512 -512v512h-128q-5 0 -14.5 0.5t-36 5.5t-50.5 14t-53.5 28t-51 45t-36 68.5t-14.5 94.5v768q0 96 80 176t176 80z" />
<glyph unicode="&#xf22c;" d="M1024 1664q182 0 348 -71t286 -191t191 -286t71 -348t-71 -348t-191 -286t-286 -191t-348 -71t-348 71t-286 191t-191 286t-71 348t71 348t191 286t286 191t348 71zM1024 64q143 0 273.5 55.5t225 150t150 225t55.5 273.5t-55.5 273.5t-150 225t-225 150t-273.5 55.5 t-273.5 -55.5t-225 -150t-150 -225t-55.5 -273.5t55.5 -273.5t150 -225t225 -150t273.5 -55.5zM868 955h-217q9 214 149 304q88 57 218 57q170 0 282 -81t112 -241q0 -98 -48 -164q-29 -41 -110 -104l-53 -41q-44 -35 -57 -79q-10 -32 -10 -89h-204q4 126 24 176 q19 47 101 111l54 43q30 23 44 45q30 40 30 90q0 58 -34 104q-32 47 -121 47q-88 0 -124 -57q-36 -58 -36 -121zM925 415h225v-218h-225v218z" />
<glyph unicode="&#xf22d;" d="M2048 0h-2048l1024 1792zM256 128h1536l-768 1408zM1152 1088v-512h-256v512h256zM896 448h256v-192h-256v192z" />
<glyph unicode="&#xf22e;" d="M1454 530l530 -530q28 -48 28 -64t-28 -64l-64 -64q-28 -48 -64 -48t-64 48l-530 530q-209 -147 -462 -147q-217 0 -401.5 107.5t-291.5 292t-107 401.5q0 163 63.5 311t170.5 255t255 170.5t311 63.5t311.5 -63.5t255.5 -170.5t170.5 -255t63.5 -311q0 -253 -147 -462z M799 384q124 0 236.5 48.5t194 130t130 194t48.5 236.5q0 165 -81.5 305t-222 221.5t-305.5 81.5t-305 -81.5t-221.5 -221.5t-81.5 -305t81.5 -305.5t221.5 -222t305 -81.5z" />
<glyph unicode="&#xf22f;" d="M1024 1664q182 0 348 -71t286 -191t191 -286t71 -348t-71 -348t-191 -286t-286 -191t-348 -71t-348 71t-286 191t-191 286t-71 348t71 348t191 286t286 191t348 71zM1728 691v161l-194 63l-46 110l88 187l-113 113l-182 -93l-111 46l-69 194h-160l-64 -194l-110 -46 l-187 88l-113 -113l93 -182l-46 -111l-194 -69v-161l194 -63l46 -110l-88 -187l113 -113l182 93l111 -46l69 -194h161l63 194l110 46l187 -88l113 113l-93 182l46 111zM1024 1025q106 0 181 -75t75 -182t-75 -182t-181 -75t-181.5 75.5t-75.5 181.5t75.5 181.5t181.5 75.5z M1024 640q53 0 90.5 37.5t37.5 90.5t-37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5z" />
<glyph unicode="&#xf230;" d="M394 953q21 -23 21 -54t-21 -54q-22 -22 -53 -22t-52 22q-79 81 -120 184.5t-41 213.5t41 214t120 185q22 22 52.5 22t52.5 -22q21 -22 21 -54t-21 -54q-118 -119 -118 -291q0 -171 118 -290zM1759 1642q79 -81 120 -185t41 -214t-41 -213.5t-120 -184.5q-21 -22 -52 -22 t-52 22q-22 23 -22 54t22 54q117 120 117 290q0 171 -117 291q-22 22 -22 54t22 54t52 22t52 -22zM578 975q-31 0 -52 22q-100 103 -100 246q0 144 100 247q22 22 52.5 22t52.5 -22q22 -23 22 -54.5t-22 -53.5q-56 -56 -56 -139q0 -82 56 -139q22 -22 22 -53t-22 -54 q-22 -22 -53 -22zM1417 1490q22 22 52.5 22t52.5 -22q101 -104 99 -247q2 -142 -99 -246q-21 -22 -52 -22t-53 22t-22 53.5t22 53.5q56 57 56 139q0 83 -56 139q-22 22 -22 54t22 54zM1023 1017q-91 0 -155.5 66t-64.5 160t64.5 160.5t155.5 66.5t155.5 -66.5t64.5 -160.5 t-64.5 -160t-155.5 -66zM1024 906h1q81 0 151 39l403 -1073h-191l-44 128h-640l-46 -128h-190l402 1073q72 -39 154 -39zM960 704h128l-65 140zM832 384l194 67l190 -67l-64 192h-256zM1273 178l-248 155l-249 -148l-8 -57h512z" />
<glyph unicode="&#xf231;" d="M1011 666l-552 -553l-66 -113l-281 -192l-46 64l178 264l127 65l552 553l-112 113l128 128q102 -11 175 62q72 74 61 175l559 560l313 -314l-559 -560q-102 12 -175 -61t-61 -175l-128 -128zM574 890l-1 1q-112 -38 -234 -10.5t-211 116.5q-143 144 -112 424l247 -248 l242 65l65 243l-247 247q108 31 223 1.5t200 -113.5q85 -86 114 -202t-3 -225l105 -104q-16 -7 -35.5 -7.5t-30.5 2.5l-12 4l-180 -180l112 -113l-72 -72zM1280 1216l64 -64l448 448l-64 64zM1152 1024l128 -128l64 64l-128 128zM960 768l128 128l-64 64l-128 -128z M1348 699l535 -536q60 -60 60 -151.5t-60 -139.5q-15 -23 -32 -37t-38.5 -19.5t-35.5 -6.5t-40 -1q-27 0 -41 1t-35.5 6.5t-38.5 19.5t-31 37l-608 609l71 72l113 -113l180 180q-14 40 1 79zM1835 43l-84 84l-103 -28l-28 -99l84 -64h103z" />
<glyph unicode="&#xf232;" d="M1280 704h128v-576h-640v-384l-768 384v1664h1408v-576h-128v448h-1024l512 -256v-1152h512v448zM1536 576v256h-512v256h512v256l512 -384z" />
<glyph unicode="&#xf233;" d="M1571 1617q119 59 237.5 102t177.5 57l60 14q-5 -23 -15.5 -65t-54.5 -166.5t-103 -243.5q-139 15 -212 90q-75 73 -90 212zM1728 1472l192 192q-53 -10 -117 -42t-101 -59l-38 -27zM419 884l356 66q100 139 221 260q191 190 436 332q32 -151 124 -242q91 -92 242 -124 q-142 -245 -332 -436q-124 -124 -260 -219l-66 -358l-419 -419l-11 373l268 269q-86 -42 -167 -68.5t-119 -32.5l-39 -6l-118 118q1 14 5 40.5t29.5 110t66.5 169.5l-263 -263l-373 11zM1159 780q80 75 140.5 142t241.5 284q-52 36 -85 86.5t-40 83.5l-8 32 q-100 -64 -212 -160t-174 -160l-62 -64q42 -128 199 -244zM704 640l128 -128q112 91 175 147q-60 48 -104 107t-57 94l-14 36zM768 448l-128 128v-128l64 -64z" />
<glyph unicode="&#xf234;" d="M512 1536q174 0 340 -46t306.5 -128.5t258.5 -200.5t200.5 -258.5t128.5 -306.5t46 -340q0 -5 -1 -13.5t-7.5 -31t-18.5 -39t-38.5 -30.5t-62.5 -14q-26 0 -47 7t-34 18.5t-23 25t-14 27t-6.5 25t-3.5 18.5v7q0 209 -81 398.5t-218 326.5t-326.5 218t-398.5 81 q-5 0 -13.5 1t-31 7.5t-39 18.5t-30.5 38.5t-14 62.5q0 26 7 47t18.5 34t25 23t27 14t25 6.5t18.5 3.5h7zM512 1024q209 0 385.5 -103t279.5 -279.5t103 -385.5q0 -5 -1 -13.5t-7.5 -31t-18.5 -39t-38.5 -30.5t-62.5 -14q-26 0 -47 7t-34 18.5t-23 25t-14 27t-6.5 25 t-3.5 18.5v7q0 212 -150 362t-362 150q-5 0 -13.5 1t-31 8.5t-39 19.5t-30.5 38t-14 61t13 61t32 38t38 19.5t32 8.5zM512 512q106 0 181 -75t75 -181t-75 -181t-181 -75t-181 75t-75 181t75 181t181 75z" />
<glyph unicode="&#xf235;" d="M1600 256h128v-320q0 -49 -38 -88.5t-90 -39.5h-1280q-52 0 -90 39.5t-38 88.5v1472q0 53 37.5 90.5t90.5 37.5h384q0 106 75 181t181 75t181 -75t75 -181h384q53 0 90.5 -37.5t37.5 -90.5v-640h-128v384h-1280v-1216h1280v320zM448 1280h1024l-384 256q0 53 -37.5 90.5 t-90.5 37.5t-90.5 -37.5t-37.5 -90.5zM960 1472q-26 0 -45 19t-19 45t19 45t45 19t45 -19t19 -45t-19 -45t-45 -19zM1152 1344h-384q0 3 0.5 7t4 15t9.5 19.5t19 15.5t31 7h256q28 0 44 -16t18 -32zM448 1024h256v-64h-256v64zM960 960h-192v64h192v-64zM1344 960h-320v64 h320v-64zM448 896h64v-64h-64v64zM576 896h320v-64h-320v64zM1984 640v-256h-512v-256l-512 384l512 384v-256h512zM1152 832h-192v64h192v-64zM448 768h192v-64h-192v64zM960 704h-256v64h256v-64zM448 640h128v-64h-128v64zM640 640h192v-64h-192v64zM448 512h384v-64 h-384v64zM448 384h192v-64h-192v64zM704 384h256v-64h-256v64zM448 256h128v-64h-128v64zM768 192h-128v64h128v-64zM832 256h256v-64h-256v64zM448 128h256v-64h-256v64zM1024 64h-256v64h256v-64zM1088 128h192v-64h-192v64z" />
<glyph unicode="&#xf236;" d="M1273 1501q-48 -63 -123.5 -102.5t-151.5 -37.5q-13 73 13.5 148.5t75.5 135.5q50 60 126 101.5t147 45.5q22 -150 -87 -291zM1738 1191q-73 -40 -121.5 -102.5t-67 -131t-12 -142.5t36.5 -138.5t86 -118t130 -81.5q-53 -119 -115 -217q-35 -53 -64 -90.5t-70.5 -80.5 t-86.5 -66t-92 -23q-39 0 -75 11.5t-62 26t-71 26.5t-98 12t-98 -12.5t-71.5 -26.5t-63 -25.5t-75.5 -11.5q-47 0 -92 21t-84.5 60t-69 76.5t-62.5 88.5q-102 156 -148 329.5t-32.5 321.5t78.5 249q68 106 169.5 166.5t204.5 60.5q73 0 180.5 -38.5t162.5 -38.5q45 0 97 19 t113.5 38.5t130.5 19.5q91 0 182 -48t160 -134z" />
<glyph unicode="&#xf237;" d="M976 487l-37 -19q-80 50 -150 79t-154 34q-197 14 -376 -73l-39 21l190 653q7 5 20 13t57 27.5t91 33t119.5 21.5t145.5 1q90 -8 164 -42t159 -92zM1227 1053l41 21q163 -108 311 -125q104 -12 210.5 8.5t161.5 46.5l55 27l41 -20l-193 -667q-68 -37 -204.5 -70 t-267.5 -18q-160 20 -345 141zM1 -256l189 674q7 5 20 13t57 27t91.5 32.5t119.5 21.5t145 2q90 -8 164 -42t159 -92l-190 -636l-37 -64q-56 41 -92.5 63.5t-95 43.5t-116.5 21q-109 0 -162 -2t-116.5 -17t-97.5 -45h-38zM1008 289l41 21q160 -107 311 -125q71 -7 134.5 -2 t117 19t92 28.5t60.5 25.5l22 11l42 -21l-194 -694q-22 0 -99.5 -16t-181.5 -32t-190 -16q-166 0 -346 128z" />
<glyph unicode="&#xf238;" d="M576 1792h896q53 0 90.5 -37.5t37.5 -90.5v-1792q0 -49 -38 -88.5t-90 -39.5h-896q-52 0 -90 39.5t-38 88.5v1792q0 53 37.5 90.5t90.5 37.5zM1152 1664h-256q-26 0 -45 -19t-19 -45t19 -45t45 -19h256q26 0 45 19t19 45t-19 45t-45 19zM1472 1408h-896v-1280h896v1280z M1024 -192q52 0 90 39.5t38 88.5q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5q0 -49 38 -88.5t90 -39.5z" />
<glyph unicode="&#xf239;" d="M1527 1556l-100 -192q109 -122 109 -276h-1024q0 155 109 277l-100 189q-14 25 -7 53t30 42q23 15 48.5 7.5t38.5 -32.5l92 -173q136 85 301 85t301 -85l92 175q13 25 38.5 32.5t48.5 -6.5q23 -15 30 -43t-7 -53zM832 1213q26 0 45 18.5t19 45.5q0 26 -19 45t-45 19 t-45 -19t-19 -45q0 -27 19 -45.5t45 -18.5zM1216 1213q26 0 45 18.5t19 45.5q0 26 -19 45t-45 19t-45 -19t-19 -45q0 -27 19 -45.5t45 -18.5zM256 421v567q0 41 28 70t68 29t68 -29t28 -70v-567q0 -41 -28 -70.5t-68 -29.5t-68 29.5t-28 70.5zM1600 421v567q0 41 28 70 t68 29t68 -29t28 -70v-567q0 -41 -28 -70.5t-68 -29.5t-68 29.5t-28 70.5zM512 1021h1024v-766q0 -53 -37.5 -90.5t-90.5 -37.5h-128v-191q0 -49 -28.5 -88.5t-67.5 -39.5t-67.5 39.5t-28.5 88.5v191h-128v-191q0 -49 -28.5 -88.5t-67.5 -39.5t-67.5 39.5t-28.5 88.5v191 h-128q-53 0 -90.5 37.5t-37.5 90.5v766z" />
<glyph unicode="&#xf23a;" d="M1728 1152l-896 -896l-448 448l192 192l256 -256l704 704z" />
<glyph unicode="&#xf23b;" d="M1920 1408v-1280h-1792v1280h1792zM348 1280l676 -528l672 528h-1348zM256 348l543 426l-543 412v-838zM1792 1186l-543 -412l543 -426v838zM1696 256l-560 433l-112 -85l-114 86l-562 -434h1348z" />
<glyph unicode="&#xf23c;" d="M1920 -128h-1792v1280l128 91v293h410l358 256l358 -256h410v-293l128 -91v-1280zM888 1536h272l-136 100zM384 996l640 -500l640 503v409h-1280v-412zM768 1216h-256v64h256v-64zM1536 1088h-1024v64h1024v-64zM1408 960h-768v64h768v-64zM256 92l543 426l-543 412v-838 zM1792 930l-543 -412l543 -426v838zM1280 832h-512v64h512v-64zM1088 704h-128v64h128v-64zM1696 0l-560 433l-112 -85l-114 86l-562 -434h1348z" />
<glyph unicode="&#xf23d;" d="M1664 640h-384v-512h-512v512h-384l640 768z" />
<glyph unicode="&#xf23e;" d="M896 128v384h-512v512h512v384l768 -640z" />
<glyph unicode="&#xf23f;" d="M1664 896l-640 -768l-640 768h384v512h512v-512h384z" />
<glyph unicode="&#xf240;" d="M1664 1024v-512h-512v-384l-768 640l768 640v-384h512z" />
<glyph unicode="&#xf241;" d="M612 896q-100 -70 -100 -153q0 -117 143.5 -206t368.5 -89t368 89t143 206q0 101 -137 176q-58 56 -118 169v192q0 13 1 24t4 20.5t4.5 15t7.5 14t7 10t9 10.5t9 10q47 42 47 90q0 83 -91 136.5t-254 53.5q-164 0 -261.5 -54t-97.5 -136q0 -48 46 -89q5 -6 19 -19t20 -21 t12 -25t6 -40v-192q-10 -20 -22 -39.5t-23.5 -35.5t-23.5 -30.5t-23 -26t-21 -21.5t-18 -17t-13.5 -12t-8.5 -8zM1022 -256l127 576q-60 -6 -122 -6q-70 0 -130 7z" />
<glyph unicode="&#xf242;" d="M1792 1021v-383h-768v328h-64v-328h-768v383h493q-94 42 -160 126t-77 182q-14 125 65 204t205 65q80 -9 153 -56t121 -118q48 71 121 118t153 56q126 14 205 -65t65 -204q-11 -98 -77 -182t-160 -126h493zM768 1109q79 -9 129 41t41 130t-71.5 143t-141.5 71 q-80 9 -130 -41t-41 -130q9 -79 71.5 -142t142.5 -72zM1046 1280q-9 -80 41 -130t129 -41t142 72t72 142q9 80 -41 130t-130 41q-79 -8 -141.5 -71t-71.5 -143zM320 575h640v-639h-640v639zM1024 575h640v-639h-640v639z" />
<glyph unicode="&#xf243;" d="M2048 -128v-128h-2048v2048h256v-64h-128v-128h128v-64h-128v-128h128v-64h-128v-128h128v-64h-128v-128h128v-64h-128v-128h128v-64h-128v-128h128v-64h-128v-128h128v-64h-128v-128h128v-64h-128v-128h128v-64h-128v-128h1920zM1408 0h-384v1472h384v-1472zM1920 0 h-384v1088h384v-1088zM896 0h-384v832h384v-832z" />
<glyph unicode="&#xf244;" d="M1734 1160l180 180q6 -40 6 -60q0 -159 -112.5 -271.5t-271.5 -112.5q-53 0 -110 18l-548 -548q18 -57 18 -110q0 -159 -112.5 -271.5t-271.5 -112.5h-60l180 186l-68 253l-253 68l-178 -177q-5 45 -5 54q0 159 112.5 271.5t271.5 112.5q53 0 110 -18l548 548 q-18 57 -18 110q0 159 112.5 271.5t271.5 112.5q9 0 54 -5l-177 -178l68 -253z" />
<glyph unicode="&#xf245;" d="M128 1408h1792q53 0 90.5 -37.5t37.5 -90.5v-1024q0 -53 -37.5 -90.5t-90.5 -37.5h-1792q-53 0 -90.5 37.5t-37.5 90.5v1024q0 53 37.5 90.5t90.5 37.5zM627 896l205 256h1088v64q-1 1 0 7t-2.5 15.5t-8.5 19t-19 16t-34 6.5h-1664q-20 0 -34 -6.5t-19.5 -16t-8.5 -19 t-2 -16.5v-6v-64h397l-205 -256h-192v-576q1 -1 0 -7t2.5 -15.5t8.5 -19t19 -16t34 -6.5h1664q20 0 34 6.5t19.5 16t8.5 19t2 16.5v6v576h-1293zM640 1152h77l-205 -256h-77zM256 768h1088v-128h-1088v128zM1792 640h-320v128h320v-128zM768 512h-512v64h512v-64zM832 576 h256v-64h-256v64zM256 448h256v-64h-256v64zM576 448h256v-64h-256v64zM1664 448h128v-64h-128v64z" />
<glyph unicode="&#xf246;" d="M1024 1664q182 0 348 -71t286 -191t191 -286t71 -348t-71 -348t-191 -286t-286 -191t-348 -71t-348 71t-286 191t-191 286t-71 348t71 348t191 286t286 191t348 71zM1024 66q191 0 352.5 94t255.5 255.5t94 352.5t-94 352.5t-255.5 255.5t-352.5 94t-352.5 -94 t-255.5 -255.5t-94 -352.5t94 -352.5t255.5 -255.5t352.5 -94zM1408 832l64 -64l-64 -64h-448v640l64 64l64 -64v-512h320z" />
<glyph unicode="&#xf247;" d="M2048 1024l-1024 -1024l-1024 1024l512 512h1024zM1024 192l832 832l-384 384h-896l-384 -384zM1728 1024l-704 -704v1024h384z" />
<glyph unicode="&#xf248;" d="M613 248l11 -153q-224 112 -360 327t-136 474q0 182 71 348t191 286t286 191t348 71t348 -71t286 -191t191 -286t71 -348q0 -259 -136 -474t-360 -327l11 153q164 104 260.5 275.5t96.5 372.5q0 209 -103 385.5t-279.5 279.5t-385.5 103t-385.5 -103t-279.5 -279.5 t-103 -385.5q0 -201 96.5 -372.5t260.5 -275.5zM1447 416l15 215q75 124 75 265q0 139 -68.5 257t-187 186.5t-257.5 68.5q-212 0 -362 -150t-150 -362q0 -142 74 -265l15 -215q-102 90 -159.5 214.5t-57.5 265.5q0 130 51 248.5t136.5 204t204 136.5t248.5 51t248.5 -51 t204 -136.5t136.5 -204t51 -248.5q0 -141 -57.5 -265.5t-159.5 -214.5zM1216 1024q0 -80 -56 -136t-136 -56t-136 56t-56 136t56 136t136 56t136 -56t56 -136zM896 768h256q39 0 67 -13t39.5 -32t17 -38t4.5 -32v-13v-256q0 -3 0.5 -7.5t-1 -17.5t-5 -25.5t-13 -27 t-22.5 -25t-35.5 -18t-51.5 -7.5v-512h-256v512q-39 0 -67 13t-39.5 32t-17 38t-4.5 32v13v256q0 3 -0.5 7.5t1 17.5t5 25.5t13 27t22.5 25t35.5 18t51.5 7.5z" />
<glyph unicode="&#xf249;" d="M1920 896v-128l-64 -64h-64l-64 64h-64l-64 64l-128 -128h-64l-128 128l-128 -128l-64 64l-64 -64h-128v-128q0 -3 -0.5 -7t-4 -15t-10 -19.5t-19.5 -15.5t-30 -7h-64q0 -5 -1 -13.5t-7.5 -31t-18.5 -39t-38.5 -30.5t-62.5 -14h-256q-9 -1 -23 0t-48 16.5t-57 47.5 q-42 58 -67.5 95.5t-58.5 93.5t-49.5 104.5t-16.5 90.5q0 36 9.5 72.5t36 84t40 70.5t56 84.5t50.5 72.5q18 26 50 41t55 17l23 2q124 4 256 4q37 0 64 -13t38.5 -32t18 -38t7.5 -32v-13h64q3 0 7 -0.5t15 -4t19.5 -9.5t15.5 -19t7 -31v-128h960zM640 959l-64 193h-192z M384 704l128 128l-128 128l-128 -128zM640 705l-256 -193h192z" />
<glyph unicode="&#xf24a;" d="M384 1790h1280q5 1 13.5 2t30 -2.5t38 -14.5t31 -40t15.5 -73v-1534q0 -5 -0.5 -13.5t-6.5 -31t-18 -39t-38.5 -30.5t-64.5 -14h-256v128h192q3 0 7 0.5t15 4t19.5 10t15.5 19.5t7 30v191h-256v128h256v1151h-1024v-1151h256v-128h-512v-191v-7t3.5 -15t9.5 -19.5 t19.5 -15.5t31.5 -7h192v127h256v-255l-256 -256v256h-256q-34 0 -59.5 11.5t-38 27t-20 36t-9 32t-1.5 20.5v1535q0 36 13 63t32 38.5t38 18.5t32 8h13zM1536 639h-256v-895h-256v895h-256l288 384h-288l384 511l384 -511h-288z" />
<glyph unicode="&#xf24b;" d="M384 512h1152v-384q0 -5 -0.5 -13.5t-6.5 -31t-18 -39t-38.5 -30.5t-64.5 -14h-640v-256l-192 192l-192 -192v256h-256q-42 0 -70.5 16.5t-39.5 41.5t-14.5 41t-3.5 29v1536q0 36 13 63t32 38.5t38 18.5t32 8h13h1280q5 0 13.5 -1t30 -7.5t38.5 -18.5t31 -38.5t15 -62.5 h-1152v-1152zM1110 1541l95 -96q130 100 297.5 89t286.5 -129q137 -139 129 -336l-130 -26q10 74 -13 145.5t-77 125.5q-81 82 -195.5 92.5t-206.5 -51.5l85 -86l-316 -45zM640 1408h-128v128h128v-128zM640 1152h-128v128h128v-128zM1563 907l316 45l-45 -317l-95 96 q-130 -100 -297.5 -89t-286.5 129q-137 139 -129 336l130 26q-10 -74 13 -145.5t77 -125.5q81 -82 195.5 -92.5t206.5 51.5zM640 896h-128v128h128v-128zM512 766l128 2v-128h-128v126zM128 384v-192q0 -3 0.5 -7t4 -15t9.5 -19.5t19 -15.5t31 -7q34 0 101 -0.5t91 -0.5v128 h384v-128l576 1q3 0 7 0.5t15 4t19.5 10t15.5 19.5t7 30v192h-1280z" />
<glyph unicode="&#xf24c;" d="M384 512h1152v-384q0 -5 -0.5 -13.5t-6.5 -31t-18 -39t-38.5 -30.5t-64.5 -14h-640v-256l-192 192l-192 -192v256h-256q-42 0 -70.5 16.5t-39.5 41.5t-14.5 41t-3.5 29v1536q0 36 13 63t32 38.5t38 18.5t32 8h13h960v-128h-704v-1152zM1280 1792h704q3 0 7 -0.5t15 -4 t19.5 -10t15.5 -19.5t7 -30v-896q0 -28 -16 -44t-32 -18l-16 -2h-384v-128l-98 64l-94 -64v128h-128q-3 0 -7 0.5t-15 4t-19.5 10t-15.5 19.5t-7 30v896q0 28 16 44t32 18zM1920 1664h-448v-512h448v512zM640 1408h-128v128h128v-128zM832 960v512l256 -256zM640 1152h-128 v128h128v-128zM640 896h-128v128h128v-128zM1920 1024h-576v-128h64v64h192v-64h320v128zM512 766l128 2v-128h-128v126zM128 384v-192q0 -3 0.5 -7t4 -15t9.5 -19.5t19 -15.5t31 -7q34 0 101 -0.5t91 -0.5v128h384v-128l576 1q3 0 7 0.5t15 4t19.5 10t15.5 19.5t7 30v192 h-1280z" />
<glyph unicode="&#xf24d;" d="M1920 1408v-1408h-128v1344l-320 320h-1088v128h1152zM1280 1536l384 -384v-1408h-1536v1792h1152zM1536 1088l-320 320h-960v-1536h1280v1216zM1024 960h256v-256h-256v-256h-256v256h-256v256h256v256h256v-256zM512 320h768v-256h-768v256z" />
<glyph unicode="&#xf24e;" d="M1024 1472q157 0 298 -39t241.5 -101t185.5 -137t138.5 -150t91 -137t53.5 -101l16 -39q-5 -13 -15.5 -36t-51 -89.5t-90.5 -127t-136.5 -134.5t-186 -127t-242.5 -89.5t-302 -36.5q-125 0 -240 22t-204 59t-168 85t-136.5 101t-105 106t-78.5 101t-52.5 85t-30.5 59 l-9 22q3 9 9.5 24.5t31 63.5t54 95t79.5 110t106.5 117.5t136.5 110.5t168 95t202 63.5t237 24.5zM1024 256q103 0 197 17.5t166.5 47t136.5 68t110.5 81t85 85t63 81t42 68t24.5 46.5l7 18q-4 11 -12.5 29.5t-41.5 71.5t-73 101.5t-110.5 107.5t-151 101.5t-197 71.5 t-246.5 29q-102 0 -196 -17.5t-166 -47t-136 -68t-110.5 -81t-85.5 -85t-64 -81t-42 -68t-24 -46.5l-8 -18q4 -11 12.5 -29.5t41 -71.5t72.5 -101.5t110 -107.5t151 -101.5t197.5 -71.5t247.5 -29zM1024 1152q159 0 271.5 -112.5t112.5 -271.5t-112.5 -271.5t-271.5 -112.5 t-271.5 112.5t-112.5 271.5t112.5 271.5t271.5 112.5zM864 832q40 0 68 28t28 68t-28 68t-68 28t-68 -28t-28 -68t28 -68t68 -28z" />
<glyph unicode="&#xf24f;" d="M1472 704h-512q-8 0 -21 1t-46 11t-58 28t-46 58t-21 94v512q0 8 1 21t11 46t28 58t58 46t94 21h896q8 0 21 -1t46 -11.5t58 -28.5t46 -57.5t21 -93.5v-512q0 -53 -20 -92.5t-48 -57.5t-56 -28.5t-48 -11.5l-20 -2h-64v-320zM640 1216v-320q0 -7 0.5 -18.5t6.5 -44.5 t17 -63.5t35 -67t56.5 -63.5t85.5 -45t119 -18h320v-64q0 -54 -20 -93.5t-48 -57.5t-56 -28.5t-48 -11.5l-20 -1h-512l-320 -320v320h-64q-8 0 -21 1.5t-46 12.5t-58 29t-46 57t-21 92v512q0 54 20 93.5t48 57.5t56 28.5t48 11.5l20 1h448z" />
<glyph unicode="&#xf250;" d="M1024 1664q182 0 348 -71t286 -191t191 -286t71 -348t-71 -348t-191 -286t-286 -191t-348 -71t-348 71t-286 191t-191 286t-71 348t71 348t191 286t286 191t348 71zM1024 64q143 0 273.5 55.5t225 150t150 225t55.5 273.5t-55.5 273.5t-150 225t-225 150t-273.5 55.5 t-273.5 -55.5t-225 -150t-150 -225t-55.5 -273.5t55.5 -273.5t150 -225t225 -150t273.5 -55.5zM1409 994l-225 -225l225 -223l-159 -163l-226 226l-226 -226l-159 159l225 227l-225 225l159 159l226 -224l222 224z" />
<glyph unicode="&#xf251;" d="M640 1155l-384 320l384 317v-188h384q3 1 7.5 1.5t17.5 0.5t25.5 -3t27 -11.5t25 -22t18 -38t7.5 -56.5v-769h-256v641h-256v-192zM1920 1088v-1280h-1792v1280h640v-128h-420l676 -528l672 528h-416v128h640zM256 28l544 426l-544 412v-838zM1792 866l-543 -412 l543 -426v838zM1696 -64l-560 433l-112 -85l-114 86l-562 -434h1348z" />
<glyph unicode="&#xf252;" d="M1024 251q-212 0 -362 150t-150 362t150 362t362 150t362 -150t150 -362t-150 -362t-362 -150z" />
<glyph unicode="&#xf253;" d="M1536 1280v-1024h-1024v1024h1024z" />
<glyph unicode="&#xf254;" d="M1792 768l128 -128l-768 -768l-1024 1024v512l256 256h512l128 -128v-204l-204 204h-372l-192 -192v-384l896 -896l564 576l-128 128h204zM1920 1408v-256h-256v-256h-256v256h-256v256h256v256h256v-256h256zM576 1408q80 0 136 -56t56 -136t-56 -136t-136 -56t-136 56 t-56 136t56 136t136 56zM576 1152q26 0 45 19t19 45t-19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19zM1152 256l-512 512l384 384l512 -512zM832 768l320 -316l196 188l-324 324z" />
<glyph unicode="&#xf255;" d="M1322 1207l209 209l-201 201l133 133l201 -201l201 201l133 -133l-201 -201l209 -209l-133 -133l-209 209l-209 -209zM1600 960l320 -320l-768 -768l-1024 1024v512l256 256h512l320 -320l-96 -96l-288 288h-384l-192 -192v-384l896 -896l576 576l-224 224zM576 1408 q80 0 136 -56t56 -136t-56 -136t-136 -56t-136 56t-56 136t56 136t136 56zM576 1152q26 0 45 19t19 45t-19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19zM1152 256l-512 512l384 384l512 -512zM832 768l320 -316l196 188l-324 324z" />
<glyph unicode="&#xf256;" d="M1792 1536v-256h-256v-256h-256v256h-256v256h256v256h256v-256h256zM768 1188v-606q111 58 256 58q52 0 94.5 14t68.5 36.5t45 50t28 55t14 50t6 36.5v14h256q0 -7 -0.5 -18t-5.5 -46t-13.5 -69t-27 -80t-43 -85.5t-64.5 -80t-88.5 -69t-118 -46.5t-151.5 -18 q-128 0 -197 -83q69 -72 69 -173q0 -106 -75 -181t-181 -75t-181 75t-75 181q0 70 35 128t93 93v839q-58 34 -93 92.5t-35 127.5q0 106 75 181t181 75t181 -75t75 -181q0 -69 -35 -127.5t-93 -92.5zM640 1536q-53 0 -90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5 t90.5 37.5t37.5 90.5t-37.5 90.5t-90.5 37.5zM640 0q53 0 90.5 37.5t37.5 90.5t-37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5z" />
<glyph unicode="&#xf257;" d="M1750 1207l-133 -133l-209 209l-209 -209l-133 133l209 209l-201 201l133 133l201 -201l201 201l133 -133l-201 -201zM1408 1088l128 -128v-64q0 -7 -0.5 -18t-5.5 -46t-13.5 -69t-27 -80t-43 -85.5t-64.5 -80t-88.5 -69t-118 -46.5t-151.5 -18q-128 0 -197 -83 q69 -72 69 -173q0 -106 -75 -181t-181 -75t-181 75t-75 181q0 70 35 128t93 93v839q-58 34 -93 92.5t-35 127.5q0 106 75 181t181 75t181 -75t75 -181q0 -69 -35 -127.5t-93 -92.5v-606q111 58 256 58q52 0 94.5 14t68.5 36.5t45 50t28 55t14 50t6 36.5v14v64zM640 1536 q-53 0 -90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5t-37.5 90.5t-90.5 37.5zM640 0q53 0 90.5 37.5t37.5 90.5t-37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5z" />
<glyph unicode="&#xf258;" d="M1920 1280l-192 -192l-384 384l192 192zM1280 1408l384 -384l-1152 -1153h-384v385zM512 128h-128v128h-128v-256h256v128z" />
<glyph unicode="&#xf259;" d="M1024 1664q182 0 348 -71t286 -191t191 -286t71 -348t-71 -348t-191 -286t-286 -191t-348 -71t-348 71t-286 191t-191 286t-71 348t71 348t191 286t286 191t348 71zM1024 64q143 0 273.5 55.5t225 150t150 225t55.5 273.5t-55.5 273.5t-150 225t-225 150t-273.5 55.5 t-273.5 -55.5t-225 -150t-150 -225t-55.5 -273.5t55.5 -273.5t150 -225t225 -150t273.5 -55.5zM1024 1024q-53 0 -90.5 37.5t-37.5 90.5t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5t-37.5 -90.5t-90.5 -37.5zM1152 768v-320q0 -35 13 -61.5t32 -38.5t38 -19t32 -8l13 -1 v-64h-256q-5 0 -13.5 1t-31 7.5t-39 18.5t-30.5 38.5t-14 62.5v320q0 35 -13 61.5t-32 38.5t-38 19t-32 8l-13 1v64h256q5 0 13.5 -0.5t31 -7t39 -18.5t30.5 -38.5t14 -63.5z" />
<glyph unicode="&#xf25a;" d="M1536 768l-768 -767v1535z" />
<glyph unicode="&#xf25b;" d="M1792 1024l-768 -767l-767 767h1535z" />
<glyph unicode="&#xf25c;" d="M512 448h86q66 -113 171 -192h-257q-212 0 -362 150t-150 362t150 362t362 150h384q212 0 362 -150t150 -362q0 -102 -38 -192h-219q65 88 65 192q0 133 -93.5 226.5t-226.5 93.5h-384q-133 0 -226.5 -93.5t-93.5 -226.5t93.5 -226.5t226.5 -93.5zM1279 1280h257 q212 0 362 -150t150 -362t-150 -362t-362 -150h-384q-212 0 -362 150t-150 362q0 99 38 192h219q-65 -88 -65 -192q0 -133 93.5 -226.5t226.5 -93.5h384q133 0 226.5 93.5t93.5 226.5t-93.5 226.5t-226.5 93.5h-86q-66 113 -171 192z" />
<glyph unicode="&#xf25d;" d="M1664 896v-256h-512v-512h-256v512h-512v256h512v512h256v-512h512z" />
<glyph unicode="&#xf25e;" d="M1664 1408v-256h-1280v256h1280zM1664 896v-256h-1280v256h1280zM1664 384v-256h-1280v256h1280z" />
<glyph unicode="&#xf25f;" d="M897 1226l-428 -458l428 -458l-171 -184l-599 642l599 642zM1922 768l-600 -642l-171 184l428 458l-428 458l171 184z" />
<glyph unicode="&#xf260;" d="M1024 1792q130 0 248.5 -51t204 -136.5t136.5 -204t51 -248.5q0 -99 -66 -280.5t-160 -369.5t-188 -362t-160 -285l-66 -111q-26 43 -69 116t-153.5 274t-195 373.5t-153.5 359t-69 285.5q0 130 51 248.5t136.5 204t204 136.5t248.5 51zM1024 896q106 0 181 75t75 181 t-75 181t-181 75t-181 -75t-75 -181t75 -181t181 -75z" />
<glyph unicode="&#xf261;" d="M256 1408h256v-256h-256v256zM1792 1408v-256h-1152v256h1152zM256 896h256v-256h-256v256zM640 896h1152v-256h-1152v256zM256 384h256v-256h-256v256zM640 384h1152v-256h-1152v256z" />
<glyph unicode="&#xf262;" d="M256 1664h128v-384h-128v192h-128v128h128v64zM1920 1664v-256h-1344v256h1344zM128 1152h256v-166l-128 -154h128v-64h-256v104l128 154v62h-64v-64h-64v128zM576 1152h1344v-256h-1344v256zM320 640l64 -64v-64l-64 -64l64 -64v-64l-64 -64h-192v64h64l64 64l-64 64 h-64v64h64l64 64h-128v64h192zM576 640h1344v-256h-1344v256zM256 128h128v-384h-128v128h-128v256h64v-192h64v192zM576 128h1344v-256h-1344v256z" />
<glyph unicode="&#xf263;" d="M384 256v512q0 212 150 362t362 150v-256q-106 0 -181 -75t-75 -181h256v-512h-512zM1664 1280v-256q-106 0 -181 -75t-75 -181h256v-512h-512v512q0 212 150 362t362 150z" />
<glyph unicode="&#xf264;" d="M1920 1408v-1280h-1024v1280h1024zM512 1280h256v-128h-128v-768h128v-128h-256v1024zM128 1152h256v-128h-128v-512h128v-128h-256v768zM1664 1152h-512v-768h512v768z" />
<glyph unicode="&#xf265;" d="M1792 1536v-1536h-1536v1536h1536zM1664 1408h-1280v-1280z" />
<glyph unicode="&#xf266;" d="M256 1024h-128v512h512v-128h-384v-384zM1920 1536v-512h-128v384h-384v128h512zM384 1280h1280v-1024h-1280v1024zM640 512h768v512h-768v-512zM256 128h384v-128h-512v512h128v-384zM1792 512h128v-512h-512v128h384v384z" />
<glyph unicode="&#xf267;" d="M384 1664h128v-384h-384v128h256v256zM1920 1408v-128h-384v384h128v-256h256zM512 1152h1024v-768h-1024v768zM768 640h512v256h-512v-256zM128 256h384v-384h-128v256h-256v128zM1536 256h384v-128h-256v-256h-128v384z" />
<glyph unicode="&#xf268;" d="M640 1728v-128q0 -3 -0.5 -7t-5 -15t-11 -19.5t-20 -15.5t-31.5 -7q-28 0 -43 16t-16 32l-1 16v128q0 3 0.5 7t4 15t9.5 19.5t19 15.5t31 7q28 0 44 -16t18 -32zM1536 1728v-128q0 -3 -0.5 -7t-5 -15t-11 -19.5t-20 -15.5t-31.5 -7q-28 0 -43 16t-16 32l-1 16v128 q0 3 0.5 7t4 15t9.5 19.5t19 15.5t31 7q28 0 44 -16t18 -32zM1984 1664v-1792h-1920v1792h320v-64q0 -8 0.5 -21t10 -46t27 -58t58 -46t96.5 -21t96.5 20t58 48t27 56t10.5 48v20v64h512v-64q0 -8 0.5 -21t10 -46t27 -58t58 -46t96.5 -21t96.5 20t58 48t27 56t10.5 48v20v64 h320zM1856 1280h-1664v-1280h1664v1280zM960 896h-256v256h256v-256zM1344 896h-256v256h256v-256zM1728 896h-256v256h256v-256zM576 512h-256v256h256v-256zM960 512h-256v256h256v-256zM1344 512h-256v256h256v-256zM1728 512h-256v256h256v-256zM576 128h-256v256h256 v-256zM960 128h-256v256h256v-256zM1344 128h-256v256h256v-256z" />
<glyph unicode="&#xf269;" d="M1536 1280h384q5 0 13.5 -1t31 -7.5t39 -18.5t30.5 -38.5t14 -62.5v-768q0 -26 -7 -47t-18.5 -34t-25 -23t-27 -14t-25 -6.5t-18.5 -3.5h-7h-384v-256q0 -69 -94 -128t-256.5 -93.5t-353.5 -34.5t-353.5 34.5t-256.5 93.5t-94 128v1536q0 69 94 128t256.5 93.5 t353.5 34.5t353.5 -34.5t256.5 -93.5t94 -128v-256zM832 1408q212 0 362 37.5t150 90.5t-150 90.5t-362 37.5t-362 -37.5t-150 -90.5t150 -90.5t362 -37.5zM512 1088l-128 64v-1024l128 -64v1024zM1280 1152l-128 -64v-1024l128 64v1024zM896 1024h-128v-1024h128v1024z M1792 1024h-256v-512h256v512z" />
<glyph unicode="&#xf26a;" d="M1472 960h128q53 0 90.5 -37.5t37.5 -90.5v-896q0 -53 -37.5 -90.5t-90.5 -37.5h-1152q-53 0 -90.5 37.5t-37.5 90.5v896q0 53 37.5 90.5t90.5 37.5h128v333q0 180 131.5 307.5t316.5 127.5t316.5 -127.5t131.5 -307.5v-333zM1280 960v320q0 106 -75 181t-181 75 t-181 -75t-75 -181v-320h512zM1280 832h-768q-28 0 -44 -16t-18 -32l-2 -16v-768q0 -3 0.5 -7t4 -15t9.5 -19.5t19 -15.5t31 -7h768v128h-704v128h704v128h-704v128h704v128h-704v128h704v128z" />
<glyph unicode="&#xf26b;" d="M256 1664h1536q35 0 61 -13t38 -32t19.5 -38t8.5 -32l1 -13v-1536q0 -35 -13 -61t-32 -38t-38 -19.5t-32 -8.5l-13 -1h-1536q-26 0 -47 7t-34 18.5t-23 25t-14 27t-6.5 25t-3.5 18.5v7v1536q0 26 7 47t18.5 34t25 23t27 14t25 6.5t18.5 3.5h7zM1728 128v1280q0 3 -0.5 7 t-4 15t-9.5 19.5t-19 15.5t-31 7h-1280q-3 0 -7 -0.5t-15 -4t-19.5 -9.5t-15.5 -19t-7 -31v-1280q0 -3 0.5 -7t4 -15t9.5 -19.5t19 -15.5t31 -7h1280q3 0 7 0.5t15 4t19.5 9.5t15.5 19t7 31zM1152 896h256v-256h-256v-256h-256v256h-256v256h256v256h256v-256z" />
<glyph unicode="&#xf26c;" d="M256 1664h1536q35 0 61 -13t38 -32t19.5 -38t8.5 -32l1 -13v-1536q0 -35 -13 -61t-32 -38t-38 -19.5t-32 -8.5l-13 -1h-1536q-26 0 -47 7t-34 18.5t-23 25t-14 27t-6.5 25t-3.5 18.5v7v1536q0 26 7 47t18.5 34t25 23t27 14t25 6.5t18.5 3.5h7zM1728 128v1280q0 3 -0.5 7 t-4 15t-9.5 19.5t-19 15.5t-31 7h-1280q-3 0 -7 -0.5t-15 -4t-19.5 -9.5t-15.5 -19t-7 -31v-1280q0 -3 0.5 -7t4 -15t9.5 -19.5t19 -15.5t31 -7h1280q3 0 7 0.5t15 4t19.5 9.5t15.5 19t7 31zM640 896h768v-256h-768v256z" />
<glyph unicode="&#xf26d;" d="M256 1664h1536q35 0 61 -13t38 -32t19.5 -38t8.5 -32l1 -13v-1536q0 -35 -13 -61t-32 -38t-38 -19.5t-32 -8.5l-13 -1h-1536q-26 0 -47 7t-34 18.5t-23 25t-14 27t-6.5 25t-3.5 18.5v7v1536q0 26 7 47t18.5 34t25 23t27 14t25 6.5t18.5 3.5h7zM1728 128v1280q0 3 -0.5 7 t-4 15t-9.5 19.5t-19 15.5t-31 7h-1280q-3 0 -7 -0.5t-15 -4t-19.5 -9.5t-15.5 -19t-7 -31v-1280q0 -3 0.5 -7t4 -15t9.5 -19.5t19 -15.5t31 -7h1280q3 0 7 0.5t15 4t19.5 9.5t15.5 19t7 31zM1024 1024q106 0 181 -75t75 -181t-75 -181t-181 -75t-181 75t-75 181t75 181 t181 75z" />
<glyph unicode="&#xf26e;" d="M256 1664h1536q35 0 61 -13t38 -32t19.5 -38t8.5 -32l1 -13v-1536q0 -35 -13 -61t-32 -38t-38 -19.5t-32 -8.5l-13 -1h-1536q-26 0 -47 7t-34 18.5t-23 25t-14 27t-6.5 25t-3.5 18.5v7v1536q0 26 7 47t18.5 34t25 23t27 14t25 6.5t18.5 3.5h7zM1728 128v1280q0 3 -0.5 7 t-4 15t-9.5 19.5t-19 15.5t-31 7h-1280q-3 0 -7 -0.5t-15 -4t-19.5 -9.5t-15.5 -19t-7 -31v-1280q0 -3 0.5 -7t4 -15t9.5 -19.5t19 -15.5t31 -7h1280q3 0 7 0.5t15 4t19.5 9.5t15.5 19t7 31zM1024 1152l448 -384l-448 -384v256h-384v256h384v256z" />
<glyph unicode="&#xf26f;" d="M320 1536h1408q8 0 21 -1t46 -11.5t58 -28.5t46 -57.5t21 -93.5v-896q0 -54 -20 -93.5t-48 -57.5t-56 -28.5t-48 -11.5l-20 -1h-256v-384l-384 384h-768q-8 0 -21 1t-46 11.5t-58 28.5t-46 57.5t-21 93.5v896q0 54 20 93.5t48 57.5t56 28.5t48 11.5zM1408 1024h-256v256 h-256v-256h-256v-256h256v-256h256v256h256v256z" />
<glyph unicode="&#xf270;" d="M512 640h-128v768h128v-384h256v384h128v-768h-128v256h-256v-256zM1536 1024v-128h-256v-256h-128v768h384v-128h-256v-256h256zM1536 1024v256h128v-256h-128zM1536 640v256h128v-256h-128zM384 384h1280v-256h-1280v256z" />
<glyph unicode="&#xf271;" d="M896 384v256h-256v256h256v256l512 -384z" />
<glyph unicode="&#xf272;" d="M1024 641l-767 767h1535zM1792 384v-256h-1536v256h1536z" />
<glyph unicode="&#xf273;" d="M1792 1408v-256h-1536v256h1536zM1792 128h-1535l767 768z" />
<glyph unicode="&#xf274;" d="M0 1408h384v-1280h-384v1280zM2048 1024v-512h-640v-384l-768 640l768 640v-384h640z" />
<glyph unicode="&#xf275;" d="M1152 1536h-256v256h256v-256zM1920 1152l-256 -256h-1408v512h1408zM1088 1216h-128v-128h128v128zM896 768h256v-1024h-256v1024z" />
<glyph unicode="&#xf276;" d="M876 578l-108 -108q-39 -39 -39 -93q0 -55 39 -94l192 -219h-704q-29 0 -45 16t-17 32l-2 16v1344q0 3 0.5 7t4 15t9.5 19.5t19 15.5t31 7h1152q27 0 43 -16t19 -32l2 -16v-768l-275 -260l-134 134q-37 38 -93 38t-94 -38zM512 1280h-128v-128h128v128zM576 1152h704v128 h-704v-128zM512 1088h-128v-128h128v128zM576 960h704v128h-704v-128zM512 896h-128l-4 -131l132 3v128zM576 768h448v128h-448v-128zM1737 797l108 -108q11 -10 11 -25.5t-11 -25.5l-622 -623q-11 -11 -26 -11t-26 11l-69 69l-39 39l-227 228q-10 11 -10 26t10 25l108 108 q10 10 25 10t26 -10l202 -202l489 489q10 11 25 11t26 -11z" />
<glyph unicode="&#xf277;" d="M512 -128l-128 575q-41 1 -128 1q-69 0 -128 68.5t-93.5 186.5t-34.5 257t34.5 257t93.5 186.5t128 68.5q236 -1 428 13t314 36.5t216 49.5t153 55t106 50.5t93.5 37t97.5 14.5q104 0 192.5 -103t140 -279.5t51.5 -385.5t-51.5 -385.5t-140 -279.5t-192.5 -103 q-65 0 -131 24t-124.5 55.5t-185 71t-289.5 63.5l90 -406l-128 -192zM1216 960q0 -192 50.5 -343.5t129.5 -206.5q-116 227 -116 550q0 326 116 550q-79 -55 -129.5 -206.5t-50.5 -343.5zM522 820q386 -22 647 -87q-17 110 -17 227q0 280 89 491q-247 -79 -637 -99 q-92 -153 -92 -392q0 -76 10 -140zM1664 384q69 0 128 77t93.5 210t34.5 289q0 266 -90 439q-65 -24 -115.5 -69.5t-81.5 -101t-51 -125t-27.5 -136.5t-7.5 -142.5t5 -136t14 -122.5t15.5 -96.5t13.5 -64.5q33 -21 69 -21zM393 826q-9 64 -9 134q0 234 88 387 q-100 -3 -216 -3q-51 0 -89.5 -122.5t-38.5 -261.5q0 -67 11 -128q135 -1 254 -6z" />
<glyph unicode="&#xf278;" d="M1537 768l-642 -640l-256 256l384 384l-384 384l256 256z" />
<glyph unicode="&#xf279;" d="M1792 1664v-1664h-1536v1664h1536zM1664 1536h-1280v-1408h1280v1408zM640 1408h768q35 0 61 -13t38 -32t19.5 -38t8.5 -32l1 -13h-1024q0 5 1 13.5t7.5 31t18.5 39t38.5 30.5t62.5 14zM1216 896v18q-29 17 -46.5 46t-17.5 64q0 53 37.5 90.5t90.5 37.5t90.5 -37.5 t37.5 -90.5q0 -35 -17.5 -64t-46.5 -46v-82l-256 -256v-82q29 -17 46.5 -46t17.5 -64q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5t-37.5 90.5q0 35 17.5 64t46.5 46v82l-256 256v82q-29 17 -46.5 46t-17.5 64q0 53 37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5 q0 -35 -17.5 -64t-46.5 -46v-22l192 -188z" />
<glyph unicode="&#xf27a;" d="M1792 1664v-1664h-1536v1664h1536zM1664 1536h-1280v-1408h1280v1408zM1536 1280h-1024q0 5 1 13.5t7.5 31t18.5 39t38.5 30.5t62.5 14h768q35 0 61 -13t38 -32t19.5 -38t8.5 -32zM1152 832h256v-256h-256v-256h-256v256h-256v256h256v256h256v-256z" />
<glyph unicode="&#xf27b;" d="M1408 1472v-1472l-377 252l-391 -252v1472h768zM1129 975l144 104q9 7 7 12.5t-15 5.5h-176l-55 166q-2 9 -6 12t-8 0t-6 -12l-55 -166h-176q-13 0 -15 -5.5t7 -12.5l144 -104l-54 -167q-4 -13 0 -16.5t15 3.5l144 104l144 -104q11 -7 15 -3.5t0 16.5z" />
<glyph unicode="&#xf27c;" d="M640 960h-192v448h192v-448zM1152 768h-192v640h192v-640zM1664 1152h-192v256h192v-256zM1728 1088v-192h-320v192h320zM384 896h320v-192h-320v192zM1472 832h192v-704h-192v704zM896 704h320v-192h-320v192zM448 640h192v-512h-192v512zM960 448h192v-320h-192v320z " />
<glyph unicode="&#xf27d;" d="M1640 939l138 180q78 -170 78 -351q0 -169 -66 -323t-177 -265.5t-265.5 -177.5t-323.5 -66t-323 66t-265.5 177.5t-177.5 265.5t-66 323t66 323.5t177.5 265.5t265.5 177t323 66q289 0 514 -179l-158 -121q-162 108 -356 108q-130 0 -248.5 -51t-204 -136.5t-136.5 -204 t-51 -248.5t51 -248.5t136.5 -204t204 -136.5t248.5 -51t248.5 51t204 136.5t136.5 204t51 248.5q0 83 -24 171zM1024 863q26 0 50 -6q412 353 654 551q28 23 53 18t28 -28.5t-17 -53.5q-162 -201 -551 -655q6 -22 6 -49q0 -92 -65.5 -157.5t-157.5 -65.5t-157.5 65.5 t-65.5 157.5t65.5 157.5t157.5 65.5zM1088 1280q0 -26 -19 -45t-45 -19q-27 0 -45.5 19t-18.5 45q0 27 18.5 45.5t45.5 19.5q26 0 45 -19t19 -46zM1344 1216q0 -26 -19 -45t-45 -19q-27 0 -45.5 19t-18.5 45q0 27 18.5 45.5t45.5 18.5q26 0 45 -18.5t19 -45.5zM768 1280 q26 0 45 -18.5t19 -45.5q0 -26 -19 -45t-45 -19q-27 0 -45.5 19t-18.5 45q0 27 18.5 45.5t45.5 18.5zM640 1024q0 -26 -19 -45t-45 -19q-27 0 -45.5 19t-18.5 45q0 27 18.5 45.5t45.5 18.5q26 0 45 -18.5t19 -45.5zM1472 768q0 27 18.5 45.5t45.5 18.5q26 0 45 -18.5 t19 -45.5q0 -26 -19 -45t-45 -19q-27 0 -45.5 19t-18.5 45zM448 768q0 27 18.5 45.5t45.5 18.5q26 0 45 -18.5t19 -45.5q0 -26 -19 -45t-45 -19q-27 0 -45.5 19t-18.5 45z" />
<glyph unicode="&#xf27e;" d="M384 1600l100 -119q241 183 540 183q182 0 348 -71t286 -191t191 -286t71 -348t-71 -348t-191 -286t-286 -191t-348 -71t-348 71t-286 191t-191 286t-71 348q0 164 60 320h212q-78 -150 -78 -320q0 -191 94 -352.5t255.5 -255.5t352.5 -94t352.5 94t255.5 255.5t94 352.5 t-94 352.5t-255.5 255.5t-352.5 94q-229 0 -417 -138l97 -116h-384zM896 256v466q-29 17 -46.5 46t-17.5 64q0 53 37.5 90.5t90.5 37.5q35 0 64 -17.5t46 -46.5h274l64 -64l-64 -64h-274q-17 -29 -46 -46v-466l-64 -64z" />
<glyph unicode="&#xf27f;" d="M1536 640h256v-640h-1537v1536h513v-256h-256v-1024h1024v384zM1792 1536v-768l-256 256l-388 -388l-252 260l384 384l-256 256h768z" />
<glyph unicode="&#xf280;" d="M256 960h256q7 6 18 16t47 40.5t70.5 60t83 70t91 75t88 70t80 60.5t61.5 40.5t37 15.5q28 0 44 -16t18 -32l2 -16v-1216q0 -3 -0.5 -7t-4 -15t-9.5 -19.5t-19 -15.5t-31 -7q-28 0 -172 112t-274 224l-130 112h-256v448zM1728 768l192 -192l-128 -128l-192 192l-192 -192 l-128 128l192 192l-192 192l128 128l192 -192l192 192l128 -128z" />
<glyph unicode="&#xf281;" d="M1312 736l416 -416l-256 -256l-416 416l-416 -416l-256 256l416 416l-416 416l256 256l416 -416l416 416l256 -256z" />
<glyph unicode="&#xf282;" d="M1984 1536v-256h-256v-256h-256v256h-256v256h256v256h256v-256h256zM1395 414l119 -606l-554 298l-554 -298l119 606l-461 422l627 77l269 559l269 -559l628 -77zM680 460l-59 -310q75 117 165.5 215.5t169 161.5t164 113t143 74.5t112.5 42.5l-242 30l-173 365 l-173 -365l-403 -51z" />
<glyph unicode="&#xf283;" d="M1942 1207l-133 -133l-209 209l-209 -209l-133 133l209 209l-201 201l133 133l201 -201l201 201l133 -133l-201 -201zM1395 414l119 -606l-554 298l-554 -298l119 606l-461 422l627 77l269 559l269 -559l628 -77zM680 460l-59 -310q75 117 165.5 215.5t169 161.5t164 113 t143 74.5t112.5 42.5l-242 30l-173 365l-173 -365l-403 -51z" />
<glyph unicode="&#xf284;" d="M1024 1408q174 0 321.5 -86t233 -233t85.5 -321t-85.5 -321t-233 -233t-321.5 -86q-130 0 -248.5 51t-204 136.5t-136.5 204t-51 248.5t51 248.5t136.5 204t204 136.5t248.5 51zM674 610l508 508q-74 34 -158 34q-159 0 -271.5 -112.5t-112.5 -271.5q0 -84 34 -158z M1374 926l-508 -508q74 -34 158 -34q159 0 271.5 112.5t112.5 271.5q0 84 -34 158z" />
<glyph unicode="&#xf285;" d="M1184 704l96 -128h640v192h-512l-288 256l-128 -288l-192 864l-288 -832h-384v-192h512l96 320l192 -768z" />
<glyph unicode="&#xf286;" d="M1824 -128v1408l-384 384h-1152v-1792h1536zM1696 0h-1280v1536h926l354 -352v-1184zM1184 640h256v256h-256v256h-256v-256h-256v-256h256v-256h256v256z" />
<glyph unicode="&#xf287;" d="M481 691l-224 44q-7 158 49 307t173 264q135 133 313.5 188t358 24t321.5 -142l175 160l78 -538l-545 77l148 146q-159 106 -356 87.5t-337 -156.5q-94 -93 -133 -214.5t-21 -246.5zM1567 845l225 -44q0 -156 -55 -309.5t-169 -267.5q-217 -193 -497 -212t-506 149 l-164 -161l-77 537l544 -76l-147 -146q159 -106 355.5 -87.5t336.5 156.5q94 93 133 214.5t21 246.5z" />
<glyph unicode="&#xf288;" d="M2015 1528q17 -70 8.5 -131t-43 -106.5t-84.5 -58.5l-371 -100q-77 -20 -150.5 37.5t-101.5 160.5q-27 102 8 189t112 108l371 99q77 21 150.5 -37t100.5 -161zM1863 1355q25 7 34 48t-5 92q-14 52 -42 83t-53 24q-26 -7 -34 -47.5t5 -92.5q13 -51 41 -82.5t54 -24.5z M1340 1082l-404 26q-52 -14 -97.5 12.5t-59.5 77.5t12.5 97.5t77.5 59.5l338 223l62 16q-77 -21 -112 -108t-7 -189q27 -103 101 -160.5t151 -37.5zM812 1074l-495 -132q-51 -14 -97 12.5t-59 78.5q-14 51 12.5 96.5t77.5 59.5l495 133q-52 -14 -78.5 -60t-12.5 -97 t60 -77.5t97 -13.5zM1152 577l640 -576l13 -16q24 -40 -46 -47q-14 -1 -31 -1q-60 0 -108 16t-66 32l-18 16l-384 320v-384q0 -5 -1 -13.5t-7.5 -31t-18.5 -39t-38.5 -30.5t-62.5 -14q-26 0 -47 7t-34 18.5t-23 25t-14 27t-6.5 25t-3.5 18.5v7v384l-384 -320 q-7 -7 -21.5 -17.5t-64.5 -28.5t-106 -18t-72 16t-4 32l12 16l640 576v320q0 53 37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5v-320z" />
<glyph unicode="&#xf289;" d="M1536 0l256 -256h-1536l256 256h256v184q-76 34 -126 72h-386v128h768q0 159 112.5 271.5t271.5 112.5q0 102 -50.5 188.5t-135.5 137.5l-198 -198l-128 -256h-256l-128 128v256l256 128l448 448q18 18 38 25t35.5 3.5t28 -9.5t19.5 -13l7 -6l128 128q3 3 7.5 7t19 11.5 t28.5 10t34.5 -4t38.5 -24.5t25 -38t3.5 -35.5t-9.5 -28t-13 -19.5l-6 -7l-128 -128q3 -3 6.5 -7.5t11.5 -19t10 -29t-4 -34.5t-24 -38l-66 -66q120 -89 189 -222.5t69 -287.5q0 -45 -8 -93q64 -55 100 -130t36 -161q0 -137 -85.5 -241.5t-216.5 -133.5zM1280 384 q0 -53 37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5t-37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5z" />
<glyph unicode="&#xf28a;" d="M512 1664q159 0 271.5 -112.5t112.5 -271.5t-112.5 -271.5t-271.5 -112.5t-271.5 112.5t-112.5 271.5t112.5 271.5t271.5 112.5zM2048 0l-256 -256l-576 576l-320 -320v896h896l-320 -320z" />
<glyph unicode="&#xf28b;" d="M1280 1280l-768 -768l-128 128l256 256l-512 512l256 256l512 -512l256 256zM1920 128l-256 -256l-512 512l-256 -256l-128 128l768 768l128 -128l-256 -256z" />
<glyph unicode="&#xf28c;" d="M1792 1600v-1664h-1536v1664h1536zM1664 1472h-1280v-1408h1280v1408zM1536 1216h-1024q0 5 1 13.5t8.5 31t19.5 39t38 30.5t61 14h768q26 0 47 -7t34 -18.5t23 -25t14 -27t6.5 -25t3.5 -18.5v-7zM1280 832h-512l128 256l128 -64l128 64zM1408 704h-768l128 64h512z M768 448l128 -256h-320l-64 320l320 64zM1088 448l64 -256h-256l64 256l-64 128h256zM1536 512l-64 -320h-320l128 256l-64 128z" />
</font>
</defs></svg>
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/html">
<head>
<meta charset="utf-8">
<link rel="stylesheet" href="style.css">
<script src="http://d3js.org/d3.v3.js"></script>
<script src="jsonp.js"></script>
<script src="ghcs.js"></script>
<script src="main.js"></script>
<script src="github.js"></script>
<script src="vis.js"></script>
<script src="stat.js"></script>
<script src="repo.js"></script>
<script src="langhg.js"></script>
<script src="show.js"></script>
</head>
<body onload="init()">
<header>
<div id="controls" class="popup">
<div class="row">
<ul class="steps sfirst">
<li style="z-index: 2" class="first">
<label><strong>1.</strong></label>
<input placeholder="User" type="text" id="user">
<button id="showBtn" title="Press for loading data about user repositories." class="btn" disabled="disabled">Show</button>
<div class="sub">
<div class="row">
<blockquote>Enter user's login of github.</blockquote>
<div class="row">
<ul class="setting">
<li class="field"><h1>Display:</h1>
<ul class="group">
<li class="field">
<input id="cb-dllh" type="checkbox" checked="checked">
<label for="cb-dllh">Layer histogram languages</label>
</li>
</ul>
</li>
</ul>
</div>
</div>
</div>
</li>
<li style="z-index: 1" class="second">
<label><strong>2.</strong></label>
<label id="curRep"><span>Select Repo...</span></label>
<button id="runBtn" title="Press for analyse repository." class="btn" disabled="disabled">Analyse</button>
<div class="sub">
<div class="row">
<blockquote>Click to repo in graph of repos.</blockquote>
<div class="row">
<ul class="setting">
<li class="field"><h1>Display:</h1>
<ul class="group">
<li class="field">
<input id="cb-dlr" type="checkbox" checked="checked">
<label for="cb-dlr">Layer repos</label>
</li>
<li class="field">
<input id="cb-dlsr" type="checkbox" checked="checked">
<label for="cb-dlsr">Layer stat repo</label>
</li>
</ul>
<ul class="group">
<li class="field">
<input id="cb-dlcmrs" type="checkbox" checked="checked">
<label for="cb-dlcmrs">Layer committers</label>
</li>
</ul>
</li>
<li class="field"><h1>Settings:</h1>
<ul class="group">
<li class="field">
<label for="txt-lc">Limit of commits</label>
<input id="txt-lc" type="number" value="100" max="10000000" min="0" step="1">
</li>
</ul>
</li>
</ul>
</div>
</div>
</div>
</li>
<li class="third">
<label><strong>3.</strong></label>
<button id="visBtn" title="Press for dynamic visualization." class="btn" disabled="disabled"><span class="mono">►</span> Run</button>
<button id="visBtnPause" title="Pause" class="btn" style="display: none" disabled="disabled"><span class="mono">▌▌</span>Pause</button>
<button id="visBtnStop" title="Stop" class="btn" style="display: none" disabled="disabled"><span class="mono">■</span> Stop</button>
<button id="visBtnResume" title="Restart" class="btn" style="display: none" disabled="disabled"><span class="mini-icon mini-icon-history"></span> Restart</button>
<div class="sub">
<div class="row">
<blockquote>Select type visualization, change setting and press button run.</blockquote>
<div class="row">
<ul class="setting">
<li class="field"><h1>Display:</h1>
<ul class="group">
<li class="field">
<input id="cb-dlvml" type="checkbox" checked="checked">
<label for="cb-dlvml">Layer canvas</label>
</li>
</ul>
</li>
<li class="field"><h1>Type visualization:</h1>
<ul class="group">
<li class="field">
<input name="typeVis" id="rb_lacs" checked="checked" type="radio">
<label for="rb_lacs">Code_swarm</label>
</li>
<li class="field">
<input name="typeVis" id="rb_lag" type="radio">
<label for="rb_lag">Gource</label>
</li>
</ul>
</li>
<li class="field"><h1>Settings:</h1>
<ul class="setting" id="st-cs">
<li class="field"><h1>Code_swarm:</h1>
<ul class="setting">
<li class="field"><h1>The number of cycles of life element:</h1>
<ul class="group">
<li class="field">
<label for="n-cs-userLife">User</label>
<input data-ns="cs" id="n-cs-userLife" type="number" step="1" min="0" max="1000000">
</li>
<li class="field">
<input data-ns="cs" id="cb-cs-showUser" type="checkbox" checked="checked">
<label for="cb-cs-showUser">visible</label>
</li>
</ul>
<ul class="group">
<li class="field">
<label for="n-cs-fileLife">&nbsp;&nbsp;File</label>
<input data-ns="cs" id="n-cs-fileLife" type="number" step="1" min="0" max="1000000">
</li>
<li class="field">
<input data-ns="cs" id="cb-cs-showFile" type="checkbox" checked="checked">
<label for="cb-cs-showFile">visible</label>
</li>
</ul>
<ul class="group">
<li class="field">
<label for="n-cs-edgeLife">Edge</label>
<input data-ns="cs" id="n-cs-edgeLife" type="number" step="1" min="0" max="1000000">
</li>
<li class="field">
<input data-ns="cs" id="cb-cs-showEdge" type="checkbox">
<label for="cb-cs-showEdge">visible</label>
</li>
</ul>
</li>
</ul>
<ul class="setting">
<li class="field"><h1>Display:</h1>
<ul class="group">
<li class="field">
<input data-ns="cs" id="cb-cs-showCountExt" type="checkbox" checked="checked">
<label for="cb-cs-showCountExt">Legend extension</label>
</li>
</ul>
<ul class="group">
<li class="field">
<input data-ns="cs" id="cb-cs-showHistogram" type="checkbox" checked="checked">
<label for="cb-cs-showHistogram">Changes Histogram</label>
</li>
</ul>
<ul class="group">
<li class="field">
<input data-ns="cs" id="cb-cs-showCommitMessage" type="checkbox" checked="checked">
<label for="cb-cs-showCommitMessage">Commit Messages</label>
</li>
</ul>
<ul class="group">
<li class="field">
<input data-ns="cs" id="cb-cs-onlyShownExt" type="checkbox">
<label for="cb-cs-onlyShownExt">Only current commit extensions</label>
</li>
</ul>
<ul class="group">
<li class="field">
<input data-ns="cs" id="cb-cs-showLabel" type="checkbox" checked="checked">
<label for="cb-cs-showLabel">User's name</label>
</li>
<li class="field">
<input data-ns="cs" id="cb-cs-showHalo" type="checkbox" checked="checked">
<label for="cb-cs-showHalo">Halo</label>
</li>
</ul>
<ul class="group">
<!--<li class="field">
<input id="cb-cs-showFilename" type="checkbox" checked="checked">
<label for="cb-cs-showFilename">Show file's name</label>
</li>-->
</ul>
<ul class="group">
<li class="field">
<input data-ns="cs" id="cb-cs-showPaddingCircle" type="checkbox">
<label for="cb-cs-showPaddingCircle">Circle of padding</label>
</li>
</ul>
</li>
</ul>
<ul class="setting">
<li class="field"><h1>Rate of decrease of:</h1>
<ul class="group">
<li class="field">
<label for="n-cs-rateFlash">Flash</label>
<input data-ns="cs" id="n-cs-rateFlash" type="number" step="0.5" min="0" max="100">
</li>
</ul>
<ul class="group">
<li class="field">
<label for="n-cs-rateOpacity">Opacity</label>
<input data-ns="cs" id="n-cs-rateOpacity" type="number" step="0.5" min="0" max="100">
</li>
</ul>
</li>
</ul>
<ul class="setting">
<li class="field"><h1>Size of:</h1>
<ul class="group">
<li class="field">
<label for="n-cs-sizeUser">User</label>
<input data-ns="cs" id="n-cs-sizeUser" type="number" step="0.1" min="0.1" max="100">
</li>
</ul>
<ul class="group">
<li class="field">
<label for="n-cs-sizeFile">File (initial)</label>
<input data-ns="cs" id="n-cs-sizeFile" type="number" step="0.1" min="0.1" max="100">
</li>
</ul>
</li>
</ul>
<ul class="group">
<li class="field">
<label for="n-cs-padding">Padding around a user</label>
<input data-ns="cs" id="n-cs-padding" type="number" step="0.1" min="0" max="100">
</li>
</ul>
<ul class="group">
<li class="field">
<label for="txt-cs-labelPattern">Pattern for label of user</label>
<input data-ns="cs" id="txt-cs-labelPattern" type="text" value="%n <%e>">
<blockquote>%n - name; %e - email; %l - login</blockquote>
</li>
</ul>
<ul class="group">
<li class="field">
<input data-ns="cs" id="cb-cs-useAvatar" type="checkbox" checked="checked">
<label for="cb-cs-useAvatar">Use user's avatar</label>
</li>
</ul>
<ul class="group">
<li class="field">
<input data-ns="cs" id="cb-cs-skipEmptyDate" type="checkbox" checked="checked">
<label for="cb-cs-skipEmptyDate">Skip empty date</label>
</li>
</ul>
</li>
</ul>
</li>
</ul>
</div>
</div>
</div>
</li>
</ul>
</div>
</div>
<div id="userInfo" class="popup tooltip">
<div class="row" id="divStat"></div>
</div>
</header>
<!--https://github.com/images/spinners/octocat-spinner-128.gif-->
<!--data:image/gif;base64,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-->
<div id="ldrCont" class="popup" style="display: none"><img id="ldrTop" src="octocat-spinner-128.gif"></div>
<div id="about" class="popup" style="display: none;">
<div class="row">
<h1>The visualization the history of repositories from the Github</h1>
</div>
<div class="row">
</div>
<div class="row">
<hr>
Create by <a href="http://artzub.com">Artem Zubkov</a> (<a href="mailto:[email protected]" title="Write me...">[email protected]</a>)
<br />
Powered by <a href="http://d3js.org" title="Perfect javascript framework">D3.js</a>
</div>
</div>
<div id="tooltip" class="popup tooltip"></div>
<div id="layers">
<div id="canvas"></div>
<div id="svg"></div>
</div>
<footer>
<div id="statusBar" class="popup">
<ul>
<li class="progressBar">
<div class="meter orange" style="display: none">
<span id="progressBar" style="width: 0%"></span>
</div>
</li>
</ul>
</div>
<div id="console" class="popup"></div>
</footer>
</body>
</html>
/**
* repo https://github.com/artzub/JSONP
*/
(function(window) {
if (!window || !window.document)
return;
var seq = 0, // sequent
document = window.document;
/**
* JSONP
* @param {String} uri The URL you are requesting with the JSON data (you may include URL params).
* @param {Function} callback The callback function which you want to execute for JSON data (JSON response is first argument).
* @param {Object} params The params contains data about callback param's name, onload function and onerror function.
* Params have next structure:
* params = {
* callbackParam : '', default is callback
* onerror_callback : function() {},
* onload_callback : function() {},
* script_order : 'defer' | 'async' (is default)
*}
*/
window.JSONP = function(uri, callback, params) {
if (!arguments.length || arguments.length < 2)
return;
uri = uri || '';
callback = callback || function() {};
params = params || {};
params.callbackParam = params.callbackParam || 'callback'
uri += uri.indexOf('?') === -1 ? '?' : '&';
function clear() {
try {
delete window[id];
} catch(e) {
window[id] = null;
}
document.documentElement.removeChild(script);
}
function response() {
clear();
callback.apply(this, arguments);
}
function doError() {
clear();
params.onerror && params.onerror.apply(this, arguments);
}
function doLoad() {
params.onload && params.onload.apply(this, arguments);
}
var id = '_JSONP_' + seq++,
script = document.createElement('script');
window[id] = response;
params.script_order = params.script_order || 'async';
script.onload = doLoad;
script.onerror = doError;
script.setAttribute(params.script_order, params.script_order);
script.setAttribute('src', uri + params.callbackParam + '=' + id);
document.documentElement.insertBefore(
script,
document.documentElement.lastChild
);
}
})(window);
/**
* Created with IntelliJ IDEA.
* User: ArtZub
* Date: 23.01.13
* Time: 13:32
* To change this template use File | Settings | File Templates.
*/
'use strict';
(function(vis) {
vis.clearLangHg = function() {
vis.layers && vis.layers.repo && vis.layers.repo.langHg && vis.layers.repo.langHg.selectAll("*")
.transition()
.duration(750)
.ease("elastic")
.remove();
};
vis.redrawLangHg = function(data, layout) {
layout = layout || vis.layers.repo;
if (!data) {
vis.clearLangHg();
return;
}
data = data.sort(function(a, b) {
return d3.ascending(a.key, b.key);
});
var w_hg = w / 4,
h_hg = h / 6,
m = {left : 10, top : 10, right : 10, bottom : 10},
pos = {top : h - h_hg - m.bottom - m.top - margin.bottom, left : margin.left};
var x = d3.scale.ordinal()
.rangeRoundBands([0, 28 * data.length], .2)
.domain(data.map(function(d) { return d.key; }));
var xc = x.rangeBand() / 2;
var y = d3.scale.linear()
.domain([0, d3.max(data, function(d) { return d.values.length; })])
.range([h_hg, 0]);
if (layout.langHg && layout.langHg.empty())
layout.langHg = null;
layout.langHg = (layout.langHg || layout.insert("g", ":first-child"))
.attr("class", "langHg")
.attr("width", w_hg + m.left + m.right)
.attr("height", h_hg + m.top + m.bottom)
.attr("transform", "translate(" + pos.left + "," + pos.top + ")");
function mei(d) {
d._g
&& d._g.selectAll("circle")
.style("stroke", d3.rgb(colors.decolor).darker())
.style("fill", toRgba(colors.decolor, vis.forceRep.opt(vis.forceRep.radO(d))))
&& d._g.selectAll("text")
.style("fill", d3.rgb(colors.decolor).darker());
}
function moi(d) {
d._g
&& d._g.selectAll("circle")
.style("stroke", d3.rgb(vis.forceRep.colors(d.nodeValue.lang)))
.style("fill", toRgba(vis.forceRep.colors(d.nodeValue.lang), vis.forceRep.opt(vis.forceRep.radO(d))))
&& d._g.selectAll("text")
.style("fill", d3.rgb(vis.forceRep.colors(d.nodeValue.lang)).brighter());
}
function me(d) {
vis.forceRep.nodes().filter(function(k) {
return k.nodeValue.lang != d.key;
}).forEach(mei);
}
function mo(d) {
vis.forceRep.nodes().filter(function(k) {
return k.nodeValue.lang != d.key;
}).forEach(moi);
}
function appendItems(g) {
g.append("path")
.attr("class", "hLine")
.style("stroke", "rgba(255, 255, 255, .3)");
g.append("text")
.attr("class", "tLang")
.style("fill", function(d) { return d3.rgb(vis.forceRep.colors(d.key)); })
.attr("dy", ".33em")
.attr("dx", "-6px")
.attr("transform", "rotate(90)")
.style("text-anchor", "end")
.text(function(d) { return d.key; })
.each(function() {
var pr = d3.select(this.parentNode);
pr.insert("rect", ":first-child")
.attr("class", "barSelect")
.attr("fill", "rgba(244, 244, 244, .2)");
});
var gg = g.append("g")
.attr("class", "barChain");
gg.append("path")
.attr("class", "vLine")
.style("stroke", function(d) { return d3.rgb(vis.forceRep.colors(d.key)).darker(); })
.attr("d", "M0,0 L0,0");
gg.append("circle")
.style("fill", function(d) { return d3.rgb(vis.forceRep.colors(d.key)).darker(); })
.attr("r", 2);
var dg = gg.append("g")
.attr("class", "dCircle")
.attr("transform", "translate(" + [0 , 0] + ")");
dg.append("circle")
.style("fill", function(d) { return d3.rgb(vis.forceRep.colors(d.key)); })
.style("stoke", function(d) { return d3.rgb(vis.forceRep.colors(d.key)).darker(); })
;
dg.append("text")
.attr("text-anchor", "middle")
.attr("dy", ".32em")
.style("fill", function(d) { return d3.rgb(vis.forceRep.colors(d.key)).brighter(); })
;
}
var bar = layout.langHg.selectAll(".barLang")
.data(data, function(d) { return d.key; });
bar.exit().remove();
bar.enter()
.append("g")
.attr("transform", "translate(" + [0 , -xc * 2] + ")")
.attr("class", "barLang")
.on("mouseover", me)
.on("mouseout", mo)
.call(appendItems);
bar.transition()
.duration(3500)
.ease("elastic")
.attr("transform", function(d) { return "translate(" + [x(d.key) , -xc * 2] + ")"; })
bar.each(function(k) {
d3.select(this).selectAll("*")
.datum(k);
});
bar.selectAll("path.hLine")
.attr("d", "M0,0 L" + (xc * 2) + ",0");
bar.selectAll("text.tLang")
.attr("y", -xc)
.each(function(d) {
var pr = d3.select(this.parentNode);
pr.selectAll("rect.barSelect")
.attr("transform", "translate(" + [-xc * .2 , -(this.clientWidth + 6 + xc * .4) ] + ")")
.attr("width", xc * 2.4 )
.attr("height", (this.clientWidth + 6 + xc * .4) + h_hg - y(d.values.length) + xc * 2.4);
});
var gg = bar.selectAll("g.barChain")
.attr("transform", "translate(" + [x.rangeBand() / 2 , 0] + ")");
var dg = gg.selectAll("g.dCircle");
dg.selectAll("circle")
.attr("r", xc);
dg.selectAll("text")
.text(function(d) { return d.values.length; });
dg.transition()
.delay(100)
.duration(3500)
.ease("elastic")
.attr("transform", function(d) {
return "translate(" + [0 , h_hg - y(d.values.length) + xc] + ")";
});
gg.selectAll("path.vLine").transition()
.duration(3500)
.ease("elastic")
.attr("d", function(d) { return "M0,0 L0," + (h_hg - y(d.values.length) + xc); });
}
})(vis || (vis = {}));
/**
* User: ArtZub
* Date: 11.01.13
* Time: 21:41
*/
'use strict';
var timeFormat = (function() {
var fd = d3.time.format("%b %d, %Y");
return function(ms) {
return fd(new Date(ms));
}
})();
var log;
var cs, svg_cs, svg,
margin = {top: 20, right: 20, bottom: 20, left: 20},
w, h, stackLoad = 0,
psBar, runBtn, ldrTop, toolTip, showBtn, visBtn,
userTxt, curRep, divStat, stepsBar, cbDlr, cbDlsr;
function updateStatus(pos, label) {
pos = pos > ghcs.states.max ? ghcs.states.max : pos;
psBar.setPos((pos * 100 / (ghcs.states.max || 1)) + "%")
.setLabel(label || "Completed " + pos + " of " + ghcs.states.max + " commits ...");
}
d3.select(window).on("hashchange", applyParams);
function parseParams(hash) {
var params = {};
hash.replace(/^#/, "").split("&").forEach(function(item) {
var values = item.split("=");
var key = values[0].toLowerCase();
params[key] = values.length > 1 ? values[1] : "";
});
ghcs.params = params;
ghcs.params.climit = params.climit || ghcs.limits.commits;
}
function rewriteHash() {
var step,
hash = [];
if (this == showBtn.node() && ghcs.params) {
step = 0;
}
else if (this == runBtn.node() && ghcs.params) {
step = 1;
}
switch (step) {
case 1:
ghcs.params.repo = ghcs.repo ? ghcs.repo.name : null;
ghcs.params.repo && hash.push("repo=" + ghcs.params.repo);
ghcs.params.climit > 0 && hash.push("climit=" + ghcs.params.climit);
case 0:
ghcs.params.user && hash.push("user=" + ghcs.params.user);
ghcs.params.rot && hash.push("rot=" + ghcs.params.rot);
break;
}
document.location.hash = "#" + hash.join("&");
}
function applyParams() {
d3.event && d3.event.preventDefault();
parseParams(document.location.hash);
stackLoad = stackLoad-- < 1 ? 0 : stackLoad;
if (ghcs.rot != ghcs.params.rot || ghcs.login != ghcs.params.user) {
ghcs.rot = ghcs.params.rot;
userTxt.property("value", ghcs.params.user);
ghcs.user = null;
if (ghcs.params.repo)
stackLoad++;
chUser();
}
else if (ghcs.user && ghcs.user.repos) {
// && (!ghcs.repo || ghcs.repo.name != ghcs.params.repo || (ghcs.params.climit > 0 && ghcs.limits.commits != ghcs.params.climit))
var r;
ghcs.limits.commits = ghcs.params.climit || ghcs.limits.commits;
d3.select("#txt-lc").property("value", ghcs.limits.commits);
if (!ghcs.repo
|| ghcs.repo.name != ghcs.params.repo
|| !ghcs.repo.commits
|| (!ghcs.repo.loadedAll && ghcs.repo.commitsCount < ghcs.limits.commits)) {
if (ghcs.repo && ghcs.repo.name == ghcs.params.repo)
r = ghcs.repo;
else
r = ghcs.user.repos.reduce(function(a, b) {
if (!a && b.nodeValue.name == ghcs.params.repo)
a = b;
return a;
}, null)
;
}
if (r) {
if (ghcs.repo != r) {
vis.meRepo(r);
vis.clRepo(r);
vis.mlRepo(r);
}
}
analyseCommits();
}
}
function nextStepApplyParams() {
if (stackLoad)
applyParams();
}
function chRadio(d) {
switch(this.name) {
case "participation" : {
}
}
}
function chCheckbox(d) {
var ln;
d = d3.select(this);
switch(d.attr("id")) {
case "cb-dlr":
case "cb-dlsr":
ln = d.datum();
vis.layers[ln]
&& ((d.property("checked") && vis.layers[ln].show()) || vis.layers[ln].hide());
break;
case "cb-dllh":
vis.layers.repo
&& vis.layers.repo.langHg
&& vis.layers.repo.langHg.style("display", d.property("checked") ? null : "none");
break;
case "cb-dlvml":
d.property("checked") ? cs.show() : cs.hide();
break;
default :
(ln = d.datum()) && ln.ns
&& (ln.ns[ln.key] = d.property("checked"));
break;
}
}
function chValue(d) {
var ln;
d = d3.select(this);
(ln = d.datum()) && ln.ns
&& (ln.ns[ln.key] = d.property("value"));
}
function checkCompleted() {
if (ghcs.states.cur >= ghcs.states.max) {
psBar.setPos("100%").hide();
if (ghcs.states.complete)
ghcs.states.complete();
return true;
}
return false;
}
function redrawStats() {
if (ghcs.redrawStatsTimer) {
clearTimeout(ghcs.redrawStatsTimer);
ghcs.redrawStatsTimer = null;
}
ghcs.redrawStatsTimer = setTimeout(function () {
vis.redrawStat(ghcs.repo);
ghcs.redrawStatsTimer = null;
}, 100);
}
function runShow() {
if (ghcs.repo && ghcs.repo.commits) {
visBtn.disable();
vis.runShow(ghcs.repo);
}
}
function redrawRepos() {
if (ghcs.redrawReposTimer) {
clearTimeout(ghcs.redrawReposTimer);
ghcs.redrawReposTimer = null;
}
ghcs.redrawReposTimer = setTimeout(function () {
vis.redrawRepos(ghcs.users
&& ghcs.users[ghcs.login]
&& ghcs.users[ghcs.login].repos
? ghcs.users[ghcs.login].repos
: null
);
vis.redrawLangHg(ghcs.users
&& ghcs.users[ghcs.login]
&& ghcs.users[ghcs.login].repos
? d3.nest().key(function(d) { return d.nodeValue.lang; }).entries(ghcs.users[ghcs.login].repos)
: null);
ghcs.redrawReposTimer = null;
}, 100);
}
function init() {
log = (function () {
var logCont = d3.select("#console")
.append("ul");
return function (msg) {
logCont.append("li").text(msg instanceof Object ? JSON.stringify(msg) : msg);
}
})();
cs = d3.select("#canvas");
cs.hide = function() {
this.style("display", "none");
vis.inited && vis.layers.show.hide();
return this;
};
cs.show = function() {
this.style("display", null);
vis.inited && vis.layers.show.show();
return this;
};
svg_cs = d3.select("#svg");
svg = svg_cs.append("svg");
w = svg.property("clientWidth") || document.body.clientWidth;
h = svg.property("clientHeight")|| document.body.clientHeight;
svg.attr("width", w).attr("height", h);
d3.selectAll("input").datum(function() {
var obj = null;
if (this.dataset && this.dataset.ns) {
var reg = new RegExp("(cb|n|txt)-" + this.dataset.ns + "-");
obj = {
ns : ghcs.settings[this.dataset.ns],
key : this.id.replace(reg, "")
};
if (this.type == "checkbox") {
this.checked = obj.ns[obj.key];
}
else {
this.value = obj.ns[obj.key];
}
}
return obj;
});
d3.selectAll("input[type=checkbox]").on("change", chCheckbox);
d3.selectAll("input[type=number], input[type=text]").on("change", chValue);
psBar = d3.select("#progressBar");
psBar.pntNode = d3.select(psBar.node().parentNode);
psBar.show = function() {
this.pntNode.style("display", null);
return this;
};
psBar.hide = function() {
this.pntNode.style("display", "none");
return this;
};
psBar.setLabel = function(lbl) {
this.text(lbl);
return this;
};
psBar.setPos = function(pos) {
this.style("width", pos);
return this;
};
stepsBar = d3.select(".steps");
stepsBar.firstStep = function() {
this.attr("class", "steps sfirst");
return this;
};
stepsBar.secondStep = function() {
this.attr("class", "steps ssecond");
return this;
};
stepsBar.thirdStep = function() {
this.attr("class", "steps");
return this;
};
runBtn = d3.select("#runBtn");
showBtn = d3.select("#showBtn");
visBtn = d3.select("#visBtn");
userTxt = d3.select("#user").on("change", function() {
stepsBar.firstStep();
showBtn.disable();
if (this.value) {
if (this.value != ghcs.login)
showBtn.enable();
else
stepsBar.secondStep();
}
(ghcs.params || (ghcs.params = {})).user = this.value;
});
[runBtn, showBtn, userTxt, visBtn].forEach(function(item) {
item.enable = function () {
this.attr("disabled", null);
return this;
};
item.disable = function () {
this.attr("disabled", "disabled");
return this;
};
});
runBtn.on("click", rewriteHash);
showBtn.on("click", rewriteHash);
visBtn.on("click", runShow);
ldrTop = d3.select("#ldrTop");
ldrTop.pntNode = d3.select(ldrTop.node().parentNode);
ldrTop.show = function () {
this.pntNode.style("display", null);
return this;
};
ldrTop.hide = function () {
this.pntNode.style("display", "none");
return this;
};
toolTip = d3.select("#tooltip");
toolTip.show = function () {
this.style("display", "block");
return this;
};
toolTip.hide = function () {
this.style("display", null);
return this;
};
cbDlr = d3.select("#cb-dlr").datum("repo");
cbDlsr = d3.select("#cb-dlsr").datum("stat");
[cbDlr, cbDlsr].forEach(function(item) {
item.check = function() {
this.property("checked", true);
chCheckbox.apply(this.node());
};
item.uncheck = function() {
this.property("checked", false);
chCheckbox.apply(this.node());
};
item.trigger = function() {
this.property("checked", !this.property("checked"));
chCheckbox.apply(this.node());
};
});
d3.select("#txt-lc").on("change", function() {
(ghcs.params || (ghcs.params = {})).climit = +this.value;
if (ghcs.params.climit < 1)
ghcs.params.climit = ghcs.limits.commits;
});
initGraphics(svg);
curRep = d3.select("#curRep")
.on("mouseover", function(d) {
if (d) {
vis.meRepo(d);
vis.mtt(d, null, null, {pageX : d.x, pageY : d.y});
}
})
.on("mouseout", function(d) {
if (d)
vis.mlRepo(d);
});
curRep.setName = function(r) {
this.selectAll("*").remove();
this.datum(r);
if (!r)
this.append("span")
.text("Select Repo...");
else {
this.append("span")
.style("color", d3.rgb(vis.forceRep.colors(r.nodeValue.lang)).brighter())
.attr("class", "mega-icon mega-icon-public-repo");
this.append("strong")
.style("margin-right", "5px")
.style("text-shadow", "0 0 3px rgba(0, 0, 0, 1)")
.style("color", d3.rgb(vis.forceRep.colors(r.nodeValue.lang)).brighter())
.text((r.nodeValue.name || ""));
this.append("a")
.attr("target", "_blank")
.attr("title", "Go to Github")
.attr("href", (r.nodeValue.html_url || "#"))
.attr("class", "mega-icon mini-icon-link a-icon");
}
return this;
};
divStat = d3.select("#divStat");
divStat.updateInfo = function() {
var user;
if (ghcs.login && (user = ghcs.user = ghcs.users[ghcs.login]) && user.info) {
divStat.selectAll("*").remove();
user.info.avatar && divStat.node().appendChild(user.info.avatar);
divStat.append("ul")
.call(function(ul) {
(user.info.name || user.info.login) && ul.append("li").call(function(li) {
li.append("h1")
.text((user.info.name || user.info.login))
.append("a")
.attr("class", "a-icon")
.attr("target", "_blank")
.attr("title", "Go to GitHub")
.attr("href", user.info.html_url)
.append("span")
.attr("class", "mini-icon mini-icon-octocat")
;
li.append("hr");
});
user.info.location && ul.append("li")
.html("<span class='mini-icon mini-icon-location'></span><strong>" + user.info.location + "</strong>")
user.info.blog && ul.append("li")
.call(function(li) {
li.append("span")
.attr("class", "mini-icon mini-icon-link");
li.append("a")
.attr("target", "_blank")
.attr("href", user.info.blog)
.text(user.info.blog)
});
ul.append("li")
.call(function(li) {
li.append("span")
.attr("class", "mini-icon mini-icon-public-repo")
li.append("strong")
.text(user.info.public_repos)
});
user.info.updated_at && ul.append("li")
.call(function(li) {
li.append("span")
.attr("class", "mini-icon mini-icon-time");
li.append("strong")
.text(timeFormat(Date.parse(user.info.updated_at)))
});
})
}
};
applyParams();
}
/**
* User: ArtZub
* Date: 23.01.13
* Time: 13:29
*/
'use strict';
(function(vis) {
vis.mdRepo = function(d) {
};
vis.meRepo = function(d) {
vis.layers.repo.langHg
&& vis.layers.repo.langHg.style("pointer-events", "none");
vis.layers.repo.toFront();
d._tg = (d._g || (d._g = d3.select(this)));
d._tg.selectAll("circle")
.style("fill", d3.rgb(vis.forceRep.colors(d.nodeValue.lang)).brighter());
d._tg.selectAll("text")
.style("fill", function(d) {
return d3.rgb(vis.forceRep.colors(d.nodeValue.lang)).darker();
})
.style("visibility", "visible");
toolTip.selectAll("*").remove();
toolTip.append("h1")
.text(d.nodeValue.name);
toolTip.append("hr");
d.nodeValue.desc
&& toolTip.append("blockquote")
.text(d.nodeValue.desc)
&& toolTip.append("br")
;
toolTip.append("span")
.attr("class", "mini-icon mini-icon-time")
toolTip.append("strong")
.style("margin-left", "5px")
.text(timeFormat(d.nodeValue.date));
toolTip.append("br");
toolTip.append("span")
.text("Primary language: ")
.append("strong")
.style("color", vis.forceRep.colors(d.nodeValue.lang))
.style("text-shadow", "0 0 3px rgba(0, 0, 0, 0.8)")
.text(d.nodeValue.lang);
toolTip.show();
};
vis.mlRepo = function(d, i) {
if (vis.forceRep.selected && vis.forceRep.selected == d && i !== "deselect") {
vis.muRepo(d);
}
else {
var g = d._tg || d._g;
if (!g)
return;
g.selectAll("circle")
.style("fill", toRgba(vis.forceRep.colors(d.nodeValue.lang), vis.forceRep.opt(vis.forceRep.radO(d))));
g.selectAll("text")
.style("fill", function(d) {
return d3.rgb(vis.forceRep.colors(d.nodeValue.lang)).brighter();
})
.style("visibility", vis.forceRep.visible);
d._tg = null;
}
vis.layers.repo.langHg
&& vis.layers.repo.langHg.style("pointer-events", "all");
toolTip.hide();
};
vis.clRepo = function(d) {
if (vis.forceRep.selected && vis.forceRep.selected == d) {
vis.forceRep.selected = null;
d && (d.fixed = 4);
}
else {
if (vis.forceRep.selected) {
vis.forceRep.selected.fixed = 0;
vis.mlRepo(vis.forceRep.selected, "deselect");
toolTip.show();
vis.layers.repo.langHg
&& vis.layers.repo.langHg.style("pointer-events", "none");
}
vis.forceRep.selected = d;
d && (d.fixed = true);
}
chSelect(vis.forceRep.selected);
};
vis.muRepo = function(d){
};
vis.clearRepos = function() {
if (vis.forceRep) {
vis.forceRep.stop().nodes([]);
delete vis.forceRep;
}
vis.layers && vis.layers.repo && vis.layers.repo.selectAll("*")
.transition()
.duration(750)
.ease("elastic")
.remove();
vis.layers.repo.langHg = null;
};
vis.redrawRepos = function(data, layout) {
layout = layout || vis.layers.repo;
if (!data) {
vis.clearRepos();
return;
}
function tr(d) {
return "translate(" + [d.x, d.y] + ")";
}
vis.forceRep = vis.forceRep || d3.layout.force()
.size([w, h])
.friction(.99)
.gravity(.005)
.charge(function(d) { return -vis.forceRep.radius(vis.forceRep.rad(d)) / 2; })
.on("tick", tick)
;
vis.forceRep.dateNow = Date.now();
vis.forceRep.rad = vis.forceRep.rad || function (d) {
return d.nodeValue.cdate;
};
vis.forceRep.radO = vis.forceRep.radO || function (d) {
return d.nodeValue.date - vis.forceRep.dateNow;
};
data = data.sort(function(a, b) { return a.nodeValue.date - b.nodeValue.date; });
var kof = (h > w ? h : w) / (4 * ((Math.log(data.length || 1) / Math.log(1.5)) || 1));
var r = [kof / 5, kof];
(vis.forceRep.radius || (vis.forceRep.radius = d3.scale.linear()))
.range(r)
.domain(d3.extent(data, vis.forceRep.rad));
data.length == 1 && vis.forceRep.radius.domain([vis.forceRep.radius.domain()[0] - 1, vis.forceRep.radius.domain()[1]]);
(vis.forceRep.opt || (vis.forceRep.opt = d3.scale.log().range([.01,.9])))
.domain(
d3.extent(data, vis.forceRep.radO)
// [d3.min(data, vis.forceRep.radO), vis.forceRep.dateNow]
);
vis.forceRep.colors = vis.reposColors || (vis.reposColors = d3.scale.category20());
vis.forceRep.visible = vis.forceRep.visible || function(d) {
return this.clientWidth < vis.forceRep.radius(vis.forceRep.rad(d)) * 2.1 ? null : "hidden";
};
vis.forceRep.appCT = vis.forceRep.appCT || function(g) {
g.each(function(d) {
d._g = d3.select(this);
});
g.append("circle")
.attr("r", 0);
g.append("text")
.attr("text-anchor", "middle")
.attr("dy", ".31em")
.text(function(d) { return d.nodeValue.name; });
};
vis.forceRep.upCT = vis.forceRep.upCT || function(g) {
g.selectAll("circle")
.style("stroke-width", 1)
.style("stroke", function(d) { return d3.rgb(vis.forceRep.colors(d.nodeValue.lang)); })
.style("fill", function(d) { return toRgba(d3.rgb(vis.forceRep.colors(d.nodeValue.lang)), vis.forceRep.opt(vis.forceRep.radO(d))); })
.transition()
.duration(2500)
.ease("elastic")
.attr("r", function(d) { return vis.forceRep.radius(vis.forceRep.rad(d)); })
g.selectAll("text")
.style("fill", function(d) {
return d3.rgb(vis.forceRep.colors(d.nodeValue.lang)).brighter();
})
.style("visibility", vis.forceRep.visible);
};
vis.forceRep
.stop()
.nodes(data)
.start()
;
vis.forceRep.circle = layout.selectAll(".cRepo")
.data(data, function(d) { return d.nodeValue.id })
;
vis.forceRep.circle.enter()
.append("g")
.attr("class", "cRepo")
.attr("transform", tr)
.call(vis.forceRep.drag)
.on("mouseover.select", vis.meRepo)
.on("mouseout.select", vis.mlRepo)
.on("mousedown.select", vis.mdRepo)
.on("mouseup.select", vis.muRepo)
.on("mousemove.mtt", vis.mtt)
.on("click.select", vis.clRepo)
.call(vis.forceRep.appCT);
vis.forceRep.circle.call(vis.forceRep.upCT);
vis.forceRep.circle.exit().remove();
function tick(e) {
var quadtree = d3.geom.quadtree(vis.forceRep.nodes());
vis.forceRep.circle
.each(cluster(.025/*10 * e.alpha * e.alpha*/))
.each(collide(.5, quadtree))
.attr("transform", tr);
vis.forceRep.resume();
}
// Move d to be adjacent to the cluster node.
function cluster(alpha) {
vis.forceRep.cenralNodes = vis.forceRep.cenralNodes || {};
// Find the largest node for each cluster.
vis.forceRep.nodes().forEach(function(d, n) {
n = vis.forceRep.cenralNodes[d.nodeValue.lang];
(!n || vis.forceRep.radO(d) > vis.forceRep.radO(n)) &&
(vis.forceRep.cenralNodes[d.nodeValue.lang] = d);
});
return function(d) {
var node = vis.forceRep.cenralNodes[d.nodeValue.lang],
l,
r,
x,
y;
if (node == d) return;
x = d.x - node.x;
y = d.y - node.y;
l = Math.sqrt(x * x + y * y);
r = vis.forceRep.radius(vis.forceRep.rad(d)) + vis.forceRep.radius(vis.forceRep.rad(node)) * 1.5;
if (l != r) {
l = (l - r) / (l || 1) * (alpha || 1);
x *= l;
y *= l;
//if (!d.fixed) {
if (true) {
d.x -= x;
d.y -= y;
}
//if (!node.fixed) {
if (true) {
node.x += x;
node.y += y;
}
}
};
}
// Resolves collisions between d and all other circles.
function collide(alpha, quadtree) {
return function(d) {
var padding = vis.forceRep.radius.range()[1] / 2,
r = vis.forceRep.radius(vis.forceRep.rad(d)) + 3 * padding,
nx1 = d.x - r,
nx2 = d.x + r,
ny1 = d.y - r,
ny2 = d.y + r;
quadtree.visit(function(quad, x1, y1, x2, y2) {
if (quad.point && (quad.point !== d)) {
var x = d.x - quad.point.x,
y = d.y - quad.point.y,
l = Math.sqrt(x * x + y * y),
r = (vis.forceRep.radius(vis.forceRep.rad(d)) + vis.forceRep.radius(vis.forceRep.rad(quad.point))) * 1.02 /*+ (d.nodeValue.lang !== quad.point.nodeValue.lang) * padding*/;
if (l < r) {
l = (l - r) / (l || 1) * (alpha || 1);
x *= l;
y *= l;
//if (!d.fixed) {
if (true) {
d.x -= x;
d.y -= y;
}
//if (!quad.point.fixed) {
if (true) {
quad.point.x += x;
quad.point.y += y;
}
}
}
return x1 > nx2
|| x2 < nx1
|| y1 > ny2
|| y2 < ny1;
});
};
}
};
})(vis || (vis = {}));
/**
* User: ArtZub
* Date: 23.01.13
* Time: 15:00
*/
"use strict";
(function(vis) {
var _worker,
_data,
nodes,
dateRange,
authorHash,
filesHash,
extHash,
extMax,
_force,
_forceAuthor,
links,
lCom, lLeg, lHis,
canvas, ctx,
bufCanvas, bufCtx,
layer,
valid,
pause,
stop,
particle,
defImg,
lastEvent,
zoomScale,
xW,
yH,
setting,
rd3 = d3.random.irwinHall(8);
var extColor = d3.scale.category20(),
userColor = d3.scale.category20b();
var typeNode = {
author : 0,
file : 1
};
function reCalc(d) {
if (stop)
return;
lCom.showCommitMessage(d.message);
appendExtLegend(d.sha);
var l = d.nodes.length,
n, a, fn;
a = d.cuserNode ? d.cuserNode : d.userNode;
a.fixed = false;
if (!l)
console.log(d);
else {
a.alive = setting.userLife > 0 ? setting.userLife : 1;
a.opacity = 100;
a.flash = 100;
a.visible = true;
}
while(--l > -1) {
n = d.nodes[l];
if (n.fixed) {
n.x = xW(n.x);
n.y = yH(n.y);
}
n.size += 2;
n.fixed = false;
n.author = a.nodeValue.email;
n.visible = !!n.statuses[d.sha].status;
fn = n.nodeValue.name.toLowerCase();
if (n.visible) {
n.ext.now.indexOf(fn) < 0
&& n.ext.now.push(fn);
n.flash = 100;
n.alive = setting.fileLife > 0 ? setting.fileLife : 1;
n.opacity = 100;
}
else {
(fn = n.ext.now.indexOf(fn)) > -1
&& n.ext.now.splice(fn, 1);
n.alive = (setting.fileLife > 0 ? setting.fileLife : 1) * .2;
n.opacity = 50;
}
/*data.push(n);
if (d.cuserNode) {
links.push({
source : n,
target : d.cuserNode
});
}
links.push({
source : n,
target : d.userNode
});*/
}
updateLegend(d.sha);
_force.nodes(nodes.filter(function(d) {
return d.type != typeNode.author && (d.visible || d.opacity);
}).sort(sortBySize)
).start();
_forceAuthor.nodes(nodes.filter(function(d) {
return d.type == typeNode.author && (d.visible || d.opacity);
})).start();
}
function loop() {
if (pause)
return;
var dl, dr;
dl = dateRange[0];
dr = dl + ghcs.limits.stepShow * ghcs.limits.stepType;
dateRange[0] = dr;
var visTurn = _data.filter(function (d) {
return d.date >= dl && d.date < dr;
});
ghcs.asyncForEach(visTurn, reCalc, ONE_SECOND / (visTurn.length > 1 ? visTurn.length : ONE_SECOND));
//visTurn.forEach(reCalc);
updateStatus(ghcs.states.cur += ghcs.limits.stepShow * ghcs.limits.stepType, timeFormat(new Date(dr)));
if (dl >= dateRange[1]) {
if (_worker)
clearInterval(_worker);
} else {
if (!visTurn.length && setting.skipEmptyDate)
loop();
}
updateExtHistogram();
}
function run() {
if (_worker)
clearInterval(_worker);
anim();
_worker = setInterval(loop, ONE_SECOND);
}
function nr(d) {
return d.size > 0 ? d.size : 0;
}
function ncb(d) {
return d3.rgb(d.color).brighter().brighter();
}
function nc(d) {
return d.color;
}
function randomTrue() {
return Math.floor(rd3() * 8) % 2;
}
function radius(d) {
return Math.sqrt(d);
}
function node(d, type) {
var c = type == typeNode.file ? d.name : userColor(d.email),
ext, x, y,
w2 = w/2,
w5 = w/5,
h2 = h/2,
h5 = h/5;
if (type == typeNode.file) {
c = c && c.match(/.*(\.\w+)$/) ? c.replace(/.*(\.\w+)$/, "$1").toLowerCase() : "Mics";
ext = extHash.get(c);
if (!ext) {
ext = {
all : 0,
currents : {},
color : extColor(c),
now : []
};
extHash.set(c, ext);
}
ext.all++;
c = ext.color;
}
x = w * Math.random();
y = h * Math.random();
if (type == typeNode.author) {
if (randomTrue()) {
x = x > w5 && x < w2
? x / 5
: x > w2 && x < w - w5
? w - x / 5
: x
;
}
else {
y = y > h5 && y < h2
? y / 5
: y > h2 && y < h - h5
? h - y / 5
: y
;
}
}
return {
x : x,
y : y,
id : type + (type == typeNode.file ? d.name : d.email),
size : type != typeNode.file ? 24 : 2,
weight : type != typeNode.file ? 24 : 2,
fixed : true,
visible : false,
links : 0,
type : type,
color : c,
ext : ext,
author : type == typeNode.author ? d.email : null,
img : type == typeNode.author ? d.avatar : null,
nodeValue : d
}
}
function getAuthor(d) {
if (!d || !d.author)
return null;
var n = authorHash.get(d.author.email);
if (!n) {
n = node(d.author, typeNode.author);
authorHash.set(d.author.email, n);
}
return n;
}
function getFile(d) {
if (!d || !d.name)
return null;
var n = filesHash.get(d.name);
if (!n) {
n = node(d, typeNode.file);
n.links = 1;
filesHash.set(d.name, n);
}
return n;
}
function initNodes(data) {
var ns = [],
i, j, n, d, df;
authorHash = d3.map({});
filesHash = d3.map({});
extHash = d3.map({});
extMax = 0;
if (data) {
i = data.length;
while(--i > -1) {
d = data[i];
d.nodes = [];
if (!d) continue;
n = getAuthor(d);
d.userNode = n;
!n.inserted && (n.inserted = ns.push(n));
if (d.author.login != d.committer.login) {
n = getAuthor(d);
d.cuserNode = n;
!n.inserted && (n.inserted = ns.push(n));
/*links.push({
source : d.userNode,
target : d.cuserNode
})*/
}
if (!d.files) continue;
j = d.files.length;
while(--j > -1) {
df = d.files[j];
if (!df) continue;
n = getFile(df);
d.nodes.push(n);
n.size = 2;
n.statuses = n.statuses || {};
n.statuses[d.sha] = df;
n.ext.currents[d.sha] = (n.ext.currents[d.sha] || 0);
n.ext.currents[d.sha]++;
!n.inserted && (n.inserted = ns.push(n));
}
j = extHash.values().reduce(function(a, b) {
return a += b.currents[d.sha] || 0;
}, null);
extMax = j > extMax ? j : extMax;
}
}
return ns;
}
var tempCanvas, tempFileCanvas;
function setOpacity(img, a, f) {
if (!img || !img.width)
img = defImg;
return img;
}
function colorize(img, r, g, b, a) {
if (!img)
return img;
if (!tempFileCanvas) {
tempFileCanvas = document.createElement("canvas");
tempFileCanvas.width = img.width;
tempFileCanvas.height = img.height;
}
var imgCtx = tempFileCanvas.getContext("2d"), imgdata, i;
imgCtx.clearRect(0, 0, img.width, img.height);
imgCtx.save();
imgCtx.drawImage(img, 0, 0);
imgdata = imgCtx.getImageData(0, 0, img.width, img.height);
i = imgdata.data.length;
while((i -= 4) > -1) {
imgdata.data[i + 3] = imgdata.data[i] * a;
if (imgdata.data[i + 3]) {
imgdata.data[i] = r;
imgdata.data[i + 1] = g;
imgdata.data[i + 2] = b;
}
}
imgCtx.putImageData(imgdata, 0, 0);
imgCtx.restore();
return tempFileCanvas;
}
function blink(d, aliveCheck, i, l) {
d.flash = (d.flash -= setting.rateFlash) > 0 ? d.flash : 0;
!d.flash && aliveCheck
&& (d.alive = (d.alive-- > 0 ? d.alive : 0))
;
d.opacity = !d.alive
? ((d.opacity -= setting.rateOpacity) > 0 ? d.opacity : 0)
: d.opacity
;
d.visible && !d.opacity
&& (d.visible = false);
}
function sortBySize(a, b) {
return d3.descending(b.size, a.size);
}
function checkVisible(d, offsetx, offsety) {
var tx = lastEvent.translate[0]/lastEvent.scale,
ty = lastEvent.translate[1]/lastEvent.scale
;
offsetx = offsetx || 0;
if (!(offsetx instanceof Array))
offsetx = [offsetx, offsetx];
offsety = offsety || 0;
if (!(offsety instanceof Array))
offsety = [offsety, offsety];
return (
d.x + d.size > -tx + offsetx[0]
&& d.x - d.size < -tx + offsetx[1] + w/lastEvent.scale
&& d.y + d.size > -ty + offsety[0]
&& d.y - d.size < -ty + offsety[1] + h/lastEvent.scale
);
}
function redrawCanvas() {
bufCtx.save();
bufCtx.clearRect(0, 0, w, h);
bufCtx.translate(lastEvent.translate[0], lastEvent.translate[1]);
bufCtx.scale(lastEvent.scale, lastEvent.scale);
var n, l, i, j,
img,
d, d1, d2,
c, x, y, s;
if (setting.showFile) {
n = d3.nest()
.key(function(d) {
return d.opacity;
})
.key(function(d) {
return d.flash ? ncb(d) : d3.rgb(nc(d));
})
.entries(_force.nodes().filter(function(d) { return checkVisible(d) && (d.visible || d.alive); }));
l = n.length;
while(--l > -1) {
d1 = n[l];
i = d1.values.length;
while(--i > -1) {
d2 = d1.values[i];
j = d2.values.length;
c = d3.rgb(d2.key);
if (!setting.showHalo) {
bufCtx.beginPath();
bufCtx.strokeStyle = "none";
bufCtx.fillStyle = toRgba(c, d1.key * .01);
}
else
img = colorize(particle, c.r, c.g, c.b, d1.key * .01);
while(--j > -1) {
d = d2.values[j];
if (d.visible || d.alive) {
//blink(d, setting.fileLife > 0);
x = Math.floor(d.x);
y = Math.floor(d.y);
s = radius(nr(d)) * (setting.showHalo ? 8 : 1);
setting.showHalo
? bufCtx.drawImage(img, x - s / 2, y - s / 2, s, s)
: bufCtx.arc(x, y, s, 0, PI_CIRCLE, true)
;
}
}
if (!setting.showHalo) {
bufCtx.fill();
bufCtx.stroke();
bufCtx.closePath();
}
}
}
}
if (setting.showUser || setting.showLabel) {
n = _forceAuthor.nodes();
l = n.length;
while(--l > -1) {
d = n[l];
if (checkVisible(d) && (d.visible || d.opacity)) {
//blink(d, !d.links && setting.userLife > 0);
x = Math.floor(d.x);
y = Math.floor(d.y);
if (setting.showUser) {
c = d.flash ? ncb(d) : d3.rgb(nc(d));
bufCtx.save();
if (setting.showPaddingCircle) {
bufCtx.beginPath();
bufCtx.strokeStyle = "none";
bufCtx.fillStyle = toRgba("#ff0000", .1);
bufCtx.arc(x, y, nr(d) + setting.padding, 0, PI_CIRCLE, true);
bufCtx.fill();
bufCtx.stroke();
}
bufCtx.beginPath();
bufCtx.strokeStyle = "none";
bufCtx.fillStyle = setting.useAvatar ? "none" : toRgba(c, d.opacity * .01);
bufCtx.arc(x, y, nr(d), 0, PI_CIRCLE, true);
bufCtx.fill();
bufCtx.stroke();
if (setting.useAvatar && d.img) {
bufCtx.clip();
bufCtx.drawImage(setOpacity(d.img, d.opacity * .01, d.flash), x - nr(d), y - nr(d), nr(d) * 2, nr(d) * 2);
}
bufCtx.closePath();
bufCtx.restore();
}
if (setting.showLabel) {
c = d.flash ? "white" : "gray";
bufCtx.save();
bufCtx.fillStyle = toRgba(c, d.opacity * .01);
bufCtx.fillText(setting.labelPattern
.replace("%l", d.nodeValue.login)
.replace("%n", d.nodeValue.name != "unknown" ? d.nodeValue.name : d.nodeValue.login)
.replace("%e", d.nodeValue.email), x, y + nr(d) * 1.5);
bufCtx.restore();
}
}
}
}
bufCtx.restore();
}
function anim() {
requestAnimationFrame(anim);
lHis && lHis.style("display", setting.showHistogram ? null : "none");
lLeg && lLeg.style("display", setting.showCountExt ? null : "none");
if (valid)
return;
valid = true;
ctx.save();
ctx.clearRect(0, 0, w, h);
redrawCanvas();
ctx.drawImage(bufCanvas, 0, 0);
ctx.restore();
valid = false;
}
function tick() {
if (_force.nodes()) {
_force.nodes()
.forEach(cluster(0.025));
_forceAuthor.nodes(
_forceAuthor.nodes()
.filter(function(d, i) {
blink(d, !d.links && setting.userLife > 0, i, _forceAuthor.nodes().length);
if (d.visible && d.links === 0 && setting.userLife > 0) {
d.flash = 0;
d.alive = d.alive / 10;
}
return d.visible;
})
);
}
_forceAuthor.resume();
_force.resume();
}
// Move d to be adjacent to the cluster node.
function cluster(alpha) {
authorHash.forEach(function(k, d) {
d.links = 0;
});
return function(d, i) {
blink(d, setting.fileLife > 0, i, _force.nodes().length);
if (!d.author || !d.visible)
return;
var node = authorHash.get(d.author),
l,
r,
x,
y;
if (node == d) return;
node.links++;
x = d.x - node.x;
y = d.y - node.y;
l = Math.sqrt(x * x + y * y);
r = radius(nr(d)) / 2 + (nr(node) + setting.padding);
if (l != r) {
l = (l - r) / (l || 1) * (alpha || 1);
x *= l;
y *= l;
d.x -= x;
d.y -= y;
}
};
}
function appendExtLegend(sha){
if (!layer)
return;
var data = [],
w3 = w / 3,
ml = w * .01,
mb = 18,
h2 = (h / 2) - mb,
bw = 2,
i, ny
;
var y = d3.scale.linear()
.range([0, h2])
.domain([0, extMax]);
lHis = (lHis || layer.append("g"))
.attr("width", w3)
.attr("height", h2)
.attr("transform", "translate(" + [ ml , h - h2 - mb ] + ")");
if (!sha)
return;
ny = h2;
extHash.forEach(function(k, d) {
var obj = {
key : k,
h : y(d.currents[sha] || 0),
color : d.color
};
obj.y = ny -= obj.h;
data.push(obj);
});
updateExtHistogram();
var g = lHis.append("g")
.attr("class", "colStack")
.datum({ x : w3, w : bw })
.style("opacity", 0);
g.selectAll("rect")
.data(data)
.enter()
.append("rect")
.attr("x", 0)
.attr("y", function(d) { return d.y; })
.attr("width", bw)
.attr("height", function(d) { return d.h; })
.attr("fill", function(d) { return d.color; })
;
g.style("opacity", 1)
.attr("transform", function(d) {
return "translate(" + [ d.x, 0] + ")";
});
}
function updateExtHistogram() {
if (!lHis || lHis.selectAll(".colStack").empty())
return;
lHis.selectAll(".colStack")
.attr("transform", function(d) {
return "translate(" + [ d.x -= d.w - 1, 0] + ")";
})
.filter(function(d) {
return d.x < 0;
})
.remove();
}
function initLegend() {
if (!layer)
return;
var mt = 48,
ml = w * .01,
h2 = h / 2 - mt,
w3 = w / 3
;
lLeg = (lLeg || layer.append("g"))
.attr("width", w3)
.attr("height", h2)
.attr("transform", "translate(" + [ml, mt] + ")");
lLeg.selectAll("*").remove();
var g = lLeg.selectAll(".gLeg")
.data(extHash.entries(), function(d) { return d.key; });
g.exit().remove();
g.enter().append("g")
.attr("class", "gLeg")
.attr("transform", function(d, i) {
return "translate(" + [0, i * 18] + ")";
})
.style("visibility", "hidden")
;
g.append("rect")
.attr("height", 16)
.style("fill", function(d) { return d.value.color; })
;
g.append("text")
.attr("class", "gttLeg")
.style("font-size", "13px")
.text(function(d) { return d.key.substr(1); })
.style("fill", function(d) { return d3.rgb(d.value.color).brighter().brighter(); })
;
g.append("text")
.attr("class", "gtLeg")
.style("font-size", "11px")
.attr("transform", "translate(" + [2, 12] + ")")
;
}
function sortLeg(b, a) {
return d3.ascending(a.value.now.length, b.value.now.length);
}
function sortLegK(b, a) {
return d3.ascending(a.key, b.key);
}
function updateLegend(sha) {
if (!lLeg || lLeg.empty())
return;
var g = lLeg.selectAll(".gLeg");
function wl(d) {
return d.value.now.length;
}
var wb = 9 * d3.max(g.data(), function(d) {
return ((wl(d) || "") + "").length;
});
g.selectAll("rect")
.attr("width", wb)
;
g.selectAll(".gttLeg")
.attr("transform", "translate(" + [wb + 2, 12] + ")")
;
g.selectAll(".gtLeg")
.text(wl)
;
g.sort(sortLegK).sort(sortLeg)
.style("visibility", function(d, i) {
return !wl(d) || i * 18 > lLeg.attr("height") ? "hidden" : "visible";
})
.transition()
.duration(500)
.attr("transform", function(d, i) {
return "translate(" + [0, i * 18] + ")";
})
;
}
vis.runShow = function(data, svg, params) {
if (_worker)
clearInterval(_worker);
_data = data && data.commits ? data.commits.values().sort(vis.sC) : null;
if (!_data || !_data.length)
return;
setting = ghcs.settings.cs;
vis.layers.repo && cbDlr.uncheck();
vis.layers.stat && cbDlsr.uncheck();
dateRange = d3.extent(data.dates);
layer = d3.select("#canvas");
layer.select("#mainCanvas").remove();
lastEvent = {
translate: [0, 0],
scale : 1
};
xW = d3.scale.linear()
.range([0, w])
.domain([0, w]);
yH = d3.scale.linear()
.range([0, h])
.domain([0, h]);
var zoom = d3.behavior.zoom()
.scaleExtent([.1, 8])
.scale(1)
.translate([0, 0])
.on("zoom", function() {
lastEvent.translate = d3.event.translate.slice(0);
lastEvent.scale = d3.event.scale;
var tl = lastEvent.translate[0] / lastEvent.scale,
tt = lastEvent.translate[1] / lastEvent.scale;
xW.range([-tl, -tl + w / lastEvent.scale])
.domain([0, w]);
yH.range([-tt, -tt + h / lastEvent.scale])
.domain([0, h]);
valid = false;
});
canvas = layer.append("canvas")
.text("This browser don't support element type of Canvas.")
.attr("id", "mainCanvas")
.attr("width", w)
.attr("height", h)
.call(zoom)
.node();
ctx = canvas.getContext("2d");
bufCanvas = document.createElement("canvas");
bufCanvas.width = w;
bufCanvas.height = h;
bufCtx = bufCanvas.getContext("2d");
bufCtx.font = "normal normal " + setting.sizeUser / 2 + "px Tahoma";
bufCtx.textAlign = "center";
layer = svg || vis.layers.show;
layer && layer.show && layer.show();
layer.append("g")
.call(zoom)
.append("rect")
.attr("width", w)
.attr("height", h)
.attr("x", 0)
.attr("y", 0)
.style("fill", "#ffffff")
.style("fill-opacity", 0);
lHis && lHis.selectAll("*").remove();
lCom = (
lCom || layer.append("g")
.attr("width", 10)
.attr("height", 14)
)
.attr("transform", "translate(" + [w/2, h - 18] + ")")
;
lCom.visible = !setting.showCommitMessage;
lCom.selectAll("text").remove();
lCom.showCommitMessage = lCom.showCommitMessage || function(text) {
if (setting.showCommitMessage && !lCom.visible) {
lCom.visible = true;
lCom.style("display", null);
}
else if (!setting.showCommitMessage && lCom.visible) {
lCom.visible = false;
lCom.style("display", "none");
}
lCom.append("text")
.attr("text-anchor", "middle")
.attr("class", "com-mess")
.attr("transform", "translate("+ [0, -lCom.node().childElementCount * 14] +")")
.text(text.split("\n")[0].substr(0, 100))
.transition()
.delay(500)
.duration(2000)
.style("fill-opacity", 1)
.duration(200)
.style("font-size", "11.2pt")
.transition()
.duration(1500)
.style("fill-opacity", .3)
.style("font-size", "11pt")
.each("end", function() {
lCom.selectAll("text").each(function(d, i) {
d3.select(this)
.attr("transform", "translate("+ [0, -i * 14] +")");
});
})
.remove();
};
psBar.show();
ghcs.states.cur = 0;
ghcs.states.max = dateRange[1] - dateRange[0];
updateStatus(ghcs.states.cur, timeFormat(new Date(dateRange[0])));
links = [];
nodes = initNodes(_data);
defImg = new Image();
defImg.src = "default.png";
particle = new Image();
particle.src = "particle.png";
_force = (_force || d3.layout.force()
.stop()
.size([w, h])
.friction(.75)
.gravity(0)
.charge(function(d) {return -3 * radius(nr(d)); } )
.on("tick", tick))
.nodes([])
;
zoomScale = d3.scale.linear()
.range([5, 1])
.domain([.1, 1]);
_forceAuthor = (_forceAuthor || d3.layout.force()
.stop()
.size([w, h])
.gravity(setting.padding * .001)
.charge(function(d) { return -(setting.padding + d.size) * 8
* (Math.sqrt(d.links / lastEvent.scale) || 1)
;
}))
.nodes([])
;
initLegend();
stop = false;
pause = false;
run();
_force.start();
_forceAuthor.start();
};
vis.pauseShow = function() {
pause = true;
};
vis.stopShow = function() {
stop = true;
if (_worker)
clearInterval(_worker);
};
vis.resumeShow = function() {
pause = false;
};
})(vis || (vis = {}));
/**
* User: ArtZub
* Date: 23.01.13
* Time: 12:54
*/
'use strict';
(function (vis) {
var textFormat = d3.format(",");
vis.meArc = function(d) {
vis.layers.stat.toFront();
if (!d._g)
return;
d._g.selectAll("path.bar")
.style({
"fill-opacity" : .6,
"stroke-width" : 1,
"stroke" : function() { return toRgba("#000000", 1); }
});
var self = d._g.node();
self.barDel && self.barDel
.transition()
.attr("d", self.delArc.startAngle(PIdiv2 + smallRad )
.endAngle(PIdiv2 * 3 - smallRad)())
;
self.barAdd && self.barAdd
.transition()
.attr("d", self.addArc.startAngle(-PIdiv2 + smallRad )
.endAngle(PIdiv2 - smallRad)())
;
d._g.selectAll("text.del, text.add")
.style("visibility", "visible");
toolTip.selectAll("*").remove();
toolTip.append("div").attr("class", "row")
.append("blockquote")
.text(d.message.split("\n")[0]);
toolTip.append("div").attr("class", "row userInfo open").call(function(div) {
div = div.append("div").attr("class", "statInfo");
div.node().appendChild(d.author.avatar);
div.append("ul").call(function(ul) {
(d.author.name || d.author.login) && ul.append("li").call(function(li) {
li.append("h1")
.text((d.author.name || d.author.login))
;
li.append("hr");
});
ul.append("li").call(function(li) {
li.append("span")
.attr("class", "mini-icon mini-icon-time");
li.append("strong")
.text(timeFormat(d.date))
});
d.files.length && ul.append("li")
.call(function(li) {
var stat = d.files.reduce(function(a, b) {
for(var key in TYPE_STATUS_FILE) {
if (TYPE_STATUS_FILE.hasOwnProperty(key)
&& b.status == TYPE_STATUS_FILE[key]) {
a[key] = (a[key] || 0);
a[key]++;
break;
}
}
return a;
}, {});
li = li.append("ul")
.attr("class", "setting");
li = li.append("li").attr("class", "field");
li.append("h1")
.text("Changed files:");
for(var key in stat) {
stat.hasOwnProperty(key)
&& li.append("ul")
.attr("class", "group")
.append("li")
.attr("class", "field")
.append("span")
.text(key + ": ")
.append("strong")
.text(stat[key]);
}
});
ul.append("li")
.call(function(li) {
li = li.append("ul")
.attr("class", "setting");
li = li.append("li").attr("class", "field");
li.append("h1")
.text("Changed lines:");
var stat = {changes : "", additions : " + ", deletions : " - "};
for(var key in stat) {
d.stats.hasOwnProperty(key)
&& li.append("ul")
.attr("class", "group")
.append("li")
.attr("class", "field")
.append("span")
.text(key + ": ")
.append("strong")
.style("color", d3.rgb(colors[key]).darker(.2))
.text(stat[key] + textFormat(d.stats[key]));
}
});
});
});
toolTip.show();
};
vis.mlArc = function(d) {
if (!d._g)
return;
d._g.selectAll("path.bar")
.style({
"fill-opacity" : .3,
"stroke" : null
});
var self = d._g.node();
if (!self)
return;
self.barDel && self.barDel
.transition()
.duration(750)
.ease("elastic")
.attr("d", self.delArc.startAngle(Math.PI - smallRad)
.endAngle(Math.PI + smallRad)())
;
self.barAdd && self.barAdd
.transition()
.duration(750)
.ease("elastic")
.attr("d", self.addArc.startAngle(- smallRad )
.endAngle(smallRad)())
;
d._g.selectAll("text.del")
.style("visibility", d.stats && d.stats.delTextVis ? d.stats.delTextVis : "hidden");
d._g.selectAll("text.add")
.style("visibility", d.stats && d.stats.addTextVis ? d.stats.addTextVis : "hidden");
toolTip.hide();
};
vis.mmArc = function(d) {
vis.mtt(d);
};
vis.clearStat = function() {
if (vis.layers && vis.layers.stat) {
vis.layers.stat.selectAll("*").remove();
vis.layers.stat.cont && (vis.layers.stat.cont = null);
}
};
vis.redrawStat = function(data, layout) {
layout = layout || vis.layers.stat;
var _commits = data && data.commits ? data.commits.values() : null;
if (!_commits || !_commits.length) {
vis.clearStat();
return;
}
var bd = d3.extent(data.dates);
var delta = (bd[1] - bd[0]) * 0.1;
delta = delta || ONE_DAY;
bd = [bd[0] - delta, bd[1] + delta];
var x = d3.time.scale()
.domain(d3.extent(bd))
.range([0, w - margin.left - margin.right])
;
var h6 = h/6;
var y = d3.scale.linear()
.range([2, h6 * 2])
.domain([0, data.stats.changes || 1]);
var sorted = _commits.slice(0).concat([
{ date : bd[0] + delta / 2, f : { d : 0, a : 0, m : 0 } },
{ date : bd[1] - delta / 2, f : { d : 0, a : 0, m : 0 } }
]).sort(vis.sC);
var layers =
[
{
color: colors.deletedFile,
values: sorted.map(function (d) {
return {t : 1, x: d.date, y0 : 0, y: (d.stats ? -d.stats.f.d : 0)}
})
},
{
color: colors.modifiedFile,
values: sorted.map(function (d) {
return {x: d.date, y0 : 0, y: (d.stats ? d.stats.f.m : 0)}
})
},
{
color: colors.addedFile,
values: sorted.map(function (d) {
return {x: d.date, y0: (d.stats ? d.stats.f.m : 0), y : (d.stats ? d.stats.f.a : 0)}
})
}
]
;
function interpolateSankey(points) {
var x0 = points[0][0], y0 = points[0][1], x1, y1, x2,
path = [x0, ",", y0],
i = 0,
n = points.length;
while (++i < n) {
x1 = points[i][0];
y1 = points[i][1];
x2 = (x0 + x1) / 2;
path.push("C", x2, ",", y0, " ", x2, ",", y1, " ", x1, ",", y1);
x0 = x1;
y0 = y1;
}
return path.join("");
}
var y1 = d3.scale.linear()
.range([h6 * 4.5, h6 * 3, h6 * 1.5])
.domain([-data.stats.files, 0, data.stats.files]),
area = d3.svg.area()
.interpolate(interpolateSankey /*true ? "linear" : "basis"*/)
.x(function(d) { return x(d.x); })
.y0(function(d) { return y1(d.y0); })
.y1(function(d) { return y1(d.y0 + d.y); })
;
var xAxis = d3.svg.axis()
.scale(x)
;
layout.cont = layout.cont || layout
.append("g")
.attr("transform", "translate(" + margin.left + "," + margin.top + ")")
;
layout.cont.selectAll("path.areaFile").remove();
layout.cont.selectAll("path.areaFile")
.data(layers)
.enter()
.insert("path", ":first-child")
.attr("class", "areaFile")
.style("fill-opacity",.1)
.style("fill", function(d) { return d.color; })
.transition()
.duration(750)
.attr("d", function(d) { return area(d.values); })
;
layout.cont.axis = layout.cont.axis || layout.cont.append("g")
.attr("class", "x axis")
.attr("transform", "translate(0," + h/2 + ")")
;
layout.cont.axis
.selectAll("*").remove();
layout.cont.axis
.call(xAxis)
.selectAll("text")
.attr("y", 0)
.attr("x", 9)
.attr("dy", ".35em")
.attr("transform", "rotate(90)")
.style("text-anchor", "start")
;
layout.cont.points = layout.cont.points || layout.cont.append("g")
.attr("transform", "translate(0," + h/2 + ")")
;
var cData = layout.cont.points.selectAll("g.com")
.data(_commits, function(d) { return d.sha; });
cData.enter()
.append("g")
.attr("class", "com")
.on("mouseover", vis.meArc)
.on("mouseout", vis.mlArc)
.on("mousemove", vis.mmArc)
;
cData.each(function(d, g) {
g = d._g = d3.select(this);
g.transition()
.duration(1500)
.ease("elastic")
.attr("transform", "translate(" + [ x(d.date), 0] + ")");
this.center = this.center || g.append("circle")
.attr("r", 2)
.style("fill", colors.center)
;
if (!d.stats)
return;
var add = this.addArc = d3.svg.arc()
.innerRadius(1)
.outerRadius(1)
.startAngle(- smallRad )
.endAngle(smallRad)
;
var del = this.delArc = d3.svg.arc()
.innerRadius(1)
.outerRadius(1)
.startAngle(Math.PI - smallRad)
.endAngle(Math.PI + smallRad)
;
(this.barAdd || (
this.barAdd = g.append("path")
.attr("class", "bar")
.style({
"fill" : colors.additions,
"fill-opacity" : .3
})
.attr("d", add())
))
.transition()
.duration(750)
.ease("elastic")
.attr("d", add.outerRadius(y(d.stats.additions))())
;
(this.barDel || (
this.barDel = g.append("path")
.attr("class", "bar")
.style({
"fill" : colors.deletions,
"fill-opacity" : .3
})
.attr("d", del())
))
.transition()
.duration(750)
.ease("elastic")
.attr("d", del.outerRadius(y(d.stats.deletions))())
;
function sized(s, k) {
return s * (1 + k);
}
var addTop = this.addArcTop = d3.svg.arc()
.innerRadius(sized(y(d.stats.additions), .015))
.outerRadius(sized(y(d.stats.additions), .025))
.startAngle(- smallRad )
.endAngle(smallRad)
;
var delTop = this.delArcTop = d3.svg.arc()
.innerRadius(sized(y(d.stats.deletions), .015))
.outerRadius(sized(y(d.stats.deletions), .025))
.startAngle(Math.PI - smallRad)
.endAngle(Math.PI + smallRad)
;
(this.barAddTop || (
this.barAddTop = g.append("path")
.style("fill", toRgba(colors.additions))
))
.attr("d", addTop())
;
(this.barDelTop || (
this.barDelTop = g.append("path")
.style("fill", toRgba(colors.deletions))
))
.attr("d", delTop())
;
if (d.stats.additions) {
d.stats.addTextVis = sized(y(d.stats.additions), .029) > h6 / 2 ? "visible" : "hidden";
(this.labelAdd || (
this.labelAdd = g.append("text")
.attr("class", "add")
.attr("dy", "-.31em")
.attr("text-anchor", "middle")
.style("fill", colors.additions)
.text(" + " + textFormat(d.stats.additions))
))
.attr("transform", "translate(" + [0, -sized(y(d.stats.additions), .027)] + ")")
.attr("visibility", d.stats.addTextVis)
;
}
if (d.stats.deletions) {
d.stats.delTextVis = sized(y(d.stats.deletions), .029) > h6 / 2 ? "visible" : "hidden";
(this.labelDel || (
this.labelDel = g.append("text")
.attr("class", "del")
.attr("dy", ".93em")
.attr("text-anchor", "middle")
.style("fill", colors.deletions)
.text(" - " + textFormat(d.stats.deletions))
))
.attr("transform", "translate(" + [0, sized(y(d.stats.deletions), .027)] + ")")
//rotate(180)
.attr("visibility", d.stats.delTextVis)
;
}
});
cData.sort(function(a, b) {
return a.stats && b.stats ? d3.ascending(b.stats.changes, a.stats.changes) : 0;
});
cData.exit().remove();
};
})(vis || (vis = {}));
/* html5doctor.com Reset v1.6.1 - http://cssreset.com */
html,body,div,span,object,iframe,h1,h2,h3,h4,h5,h6,p,blockquote,pre,abbr,address,cite,code,del,dfn,em,img,ins,kbd,q,samp,small,strong,sub,sup,var,b,i,dl,dt,dd,ol,ul,li,fieldset,form,label,legend,table,caption,tbody,tfoot,thead,tr,th,td,article,aside,canvas,details,figcaption,figure,footer,header,hgroup,menu,nav,section,summary,time,mark,audio,video{margin:0;padding:0;border:0;outline:0;font-size:100%;vertical-align:baseline;background:transparent}body{line-height:1}article,aside,details,figcaption,figure,footer,header,hgroup,menu,nav,section{display:block}nav ul{list-style:none}blockquote,q{quotes:none}blockquote:before,blockquote:after,q:before,q:after{content:none}a{margin:0;padding:0;font-size:100%;vertical-align:baseline;background:transparent}ins{background-color:#ff9;color:#000;text-decoration:none}mark{background-color:#ff9;color:#000;font-style:italic;font-weight:bold}del{text-decoration:line-through}abbr[title],dfn[title]{border-bottom:1px dotted;cursor:help}table{border-collapse:collapse;border-spacing:0}hr{display:block;height:1px;border:0;border-top:1px solid #ccc;margin:1em 0;padding:0}input,select{vertical-align:middle}
/** взято с github.com */
@font-face {
font-family: 'Octicons Regular';
src: url(github_webfont.eot);
src: url(github_webfont_ie.eot) format("embedded-opentype"),
url(github_webfont.woff) format("woff"),
url(github_webfont.ttf) format("truetype"),
url(github_webfont.svg) format("svg");
font-weight: normal;
font-style: normal
}
.mini-icon, .mega-icon {
font-family: 'Octicons Regular';
font-weight: normal;
font-style: normal;
display: inline-block;
text-decoration: inherit;
line-height: 1;
-webkit-font-smoothing: antialiased;
line-height: 1;
text-decoration: none;
}
.mini-icon {
font-size: 16px;
width: 16px;
height: 16px;
}
.mega-icon {
font-size: 32px;
width: 32px;
height: 32px;
}
.mini-icon-octocat:before {
content: "\f008";
}
.mini-icon-public-repo:before {
content: "\f001";
}
.mini-icon-time:before {
content: "\f046";
}
.mini-icon-link:before {
content: "\f05c";
}
.mini-icon-location:before {
content: "\f060";
}
.mini-icon-history:before {
content: "\f07e";
}
.mega-icon-public-repo:before {
content: "\f201";
}
/** end */
html,
body {
width: 100%;
height: 100%;
overflow: hidden;
}
body {
background: url('data:image/png;base64,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');
}
label {
color: #f9f9f9;
}
.popup {
position: absolute;
overflow: hidden;
z-index: 10;
}
#controls {
left: -1px;
top: -1px;
z-index: 11;
padding: 5px;
vertical-align: middle;
border-radius: 0 0 3px 0;
width: 100%;
}
#controls input,
#controls button,
#controls label {
display: inline-block;
}
input[type=text],
input[type=number] {
border: 1px solid #b9b9b9;
display: block;
padding: 5px;
font-size: 14px;
margin: 0;
outline: 0;
}
input[type=text]:hover,
input[type=number]:hover,
input[type=text]:focus,
input[type=number]:focus {
border-color: #000;
-webkit-box-shadow: 0px 0px 3px rgba(0, 0, 0, 0.3);
-moz-box-shadow: 0px 0px 3px rgba(0, 0, 0, 0.3);
-o-box-shadow: 0px 0px 3px rgba(0, 0, 0, 0.3);
-ms-box-shadow: 0px 0px 3px rgba(0, 0, 0, 0.3);
box-shadow: 0px 0px 3px rgba(0, 0, 0, 0.3);
}
#controls input {
font-family: sans-serif;
font-weight: bolder;
}
#console {
bottom: 0;
left: 0;
z-index: 100;
}
/* progress bar */
.meter {
overflow: hidden;
position: relative;
background: #555;
padding: 10px;
-webkit-box-shadow: inset 0 -1px 1px rgba(255, 255, 255, 0.3);
-moz-box-shadow: inset 0 -1px 1px rgba(255, 255, 255, 0.3);
box-shadow: inset 0 -1px 1px rgba(255, 255, 255, 0.3);
}
.meter > span {
display: block;
background-color: rgb(43, 194, 83);
/*background-image: -webkit-gradient(linear, left bottom, left top, color-stop(0, rgb(43, 194, 83)), color-stop(1, rgb(84, 240, 84)));
background-image: -moz-linear-gradient(center bottom, rgb(43, 194, 83) 37%, rgb(84, 240, 84) 69%);*/
-webkit-box-shadow: inset 0 2px 9px rgba(255, 255, 255, 0.3), inset 0 -2px 6px rgba(0, 0, 0, 0.4);
-moz-box-shadow: inset 0 2px 9px rgba(255, 255, 255, 0.3), inset 0 -2px 6px rgba(0, 0, 0, 0.4);
box-shadow: inset 0 2px 9px rgba(255, 255, 255, 0.3), inset 0 -2px 6px rgba(0, 0, 0, 0.4);
position: relative;
overflow: hidden;
min-height: 10px
}
.orange > span {
background-color: #f1a165;
background: rgb(241,161,101);
/*background: url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiA/Pgo8c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgd2lkdGg9IjEwMCUiIGhlaWdodD0iMTAwJSIgdmlld0JveD0iMCAwIDEgMSIgcHJlc2VydmVBc3BlY3RSYXRpbz0ibm9uZSI+CiAgPGxpbmVhckdyYWRpZW50IGlkPSJncmFkLXVjZ2ctZ2VuZXJhdGVkIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgeDE9IjAlIiB5MT0iMCUiIHgyPSIwJSIgeTI9IjEwMCUiPgogICAgPHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iI2YxYTE2NSIgc3RvcC1vcGFjaXR5PSIxIi8+CiAgICA8c3RvcCBvZmZzZXQ9IjEwMCUiIHN0b3AtY29sb3I9IiNmMzZkMGEiIHN0b3Atb3BhY2l0eT0iMSIvPgogIDwvbGluZWFyR3JhZGllbnQ+CiAgPHJlY3QgeD0iMCIgeT0iMCIgd2lkdGg9IjEiIGhlaWdodD0iMSIgZmlsbD0idXJsKCNncmFkLXVjZ2ctZ2VuZXJhdGVkKSIgLz4KPC9zdmc+);
background: -moz-linear-gradient(top, rgba(241,161,101,1) 0%, rgba(243,109,10,1) 100%);
background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,rgba(241,161,101,1)), color-stop(100%,rgba(243,109,10,1)));
background: -webkit-linear-gradient(top, rgba(241,161,101,1) 0%,rgba(243,109,10,1) 100%);
background: -o-linear-gradient(top, rgba(241,161,101,1) 0%,rgba(243,109,10,1) 100%);
background: -ms-linear-gradient(top, rgba(241,161,101,1) 0%,rgba(243,109,10,1) 100%);
background: linear-gradient(to bottom, rgba(241,161,101,1) 0%,rgba(243,109,10,1) 100%);
filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#f1a165', endColorstr='#f36d0a',GradientType=0 );*/
}
.red > span {
background-color: #f0a3a3;
/*background-image: -moz-linear-gradient(top, #f0a3a3, #f42323);
background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0, #f0a3a3), color-stop(1, #f42323));
background-image: -webkit-linear-gradient(#f0a3a3, #f42323);*/
}
.progressBar {
font-size: 11px;
width: 100%;
}
.progressBar .meter {
margin: 0;
padding: 1px;
}
/*.progressBar .meter > span*/
#progressBar {
text-align: right;
vertical-align: middle;
color: white;
text-shadow: 0 1px 1px black;
word-wrap: normal;
white-space: nowrap;
text-overflow: ellipsis;
}
/* end progress bar */
#statusBar {
bottom: 0;
left: 0;
z-index: 12;
width: 100%;
position: fixed;
border: 0;
border-top: 1px solid #CACACA;
background: rgb(239,239,239);
/*background: url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiA/Pgo8c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgd2lkdGg9IjEwMCUiIGhlaWdodD0iMTAwJSIgdmlld0JveD0iMCAwIDEgMSIgcHJlc2VydmVBc3BlY3RSYXRpbz0ibm9uZSI+CiAgPGxpbmVhckdyYWRpZW50IGlkPSJncmFkLXVjZ2ctZ2VuZXJhdGVkIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgeDE9IjAlIiB5MT0iMCUiIHgyPSIwJSIgeTI9IjEwMCUiPgogICAgPHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iI2VmZWZlZiIgc3RvcC1vcGFjaXR5PSIxIi8+CiAgICA8c3RvcCBvZmZzZXQ9IjQxJSIgc3RvcC1jb2xvcj0iI2RkZGRkZCIgc3RvcC1vcGFjaXR5PSIxIi8+CiAgICA8c3RvcCBvZmZzZXQ9IjEwMCUiIHN0b3AtY29sb3I9IiNjYWNhY2EiIHN0b3Atb3BhY2l0eT0iMSIvPgogIDwvbGluZWFyR3JhZGllbnQ+CiAgPHJlY3QgeD0iMCIgeT0iMCIgd2lkdGg9IjEiIGhlaWdodD0iMSIgZmlsbD0idXJsKCNncmFkLXVjZ2ctZ2VuZXJhdGVkKSIgLz4KPC9zdmc+);
background: -moz-linear-gradient(top, rgba(239,239,239,1) 0%, rgba(221,221,221,1) 41%, rgba(202,202,202,1) 100%);
background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,rgba(239,239,239,1)), color-stop(41%,rgba(221,221,221,1)), color-stop(100%,rgba(202,202,202,1)));
background: -webkit-linear-gradient(top, rgba(239,239,239,1) 0%,rgba(221,221,221,1) 41%,rgba(202,202,202,1) 100%);
background: -o-linear-gradient(top, rgba(239,239,239,1) 0%,rgba(221,221,221,1) 41%,rgba(202,202,202,1) 100%);
background: -ms-linear-gradient(top, rgba(239,239,239,1) 0%,rgba(221,221,221,1) 41%,rgba(202,202,202,1) 100%);
background: linear-gradient(to bottom, rgba(239,239,239,1) 0%,rgba(221,221,221,1) 41%,rgba(202,202,202,1) 100%);
filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#efefef', endColorstr='#cacaca',GradientType=0 );*/
}
#statusBar ul {
padding: 2px 3px;
overflow: hidden;
margin: 0;
list-style: none;
}
#statusBar li {
display: block;
vertical-align: middle;
float: left;
margin-right: 2px;
border: 0;
border-right: 1px solid #444;
}
#statusBar li:last-child {
margin-right: 0;
border-right: 0;
}
#layers,
#canvas,
#svg,
canvas,
svg {
position: relative;
width: 100%;
height: 100%;
}
#svg, #canvas {
position: absolute;
top: 0;
left : 0;
}
#svg {
z-index: 1;
}
#canvas {
z-index: 0;
}
#layers {
background: rgba(224, 224, 224, .1);
}
.axis text {
font: 10px sans-serif;
fill: #ccc;
}
.axis line,
.axis path {
fill: none;
stroke: #ccc;
shape-rendering: crispEdges;
}
#ldrCont {
z-index: 100;
top: 0;
left: 0;
text-align: center;
width: 100%;
height: 100%;
}
#ldrCont > img {
display: inline-block;
position:relative;
top:49%;
width: 48px;
height: auto;
}
.lineFiles {
fill: none;
shape-rendering: crispEdges;
stroke-width: 2px;
}
.lineFiles .M {
stroke: rgba(255, 184, 119, .5);
}
.lineFiles .A {
stroke: rgba(165, 236, 110, .5);
}
.lineFiles .D {
stroke: rgba(255, 119, 255, .5);
}
.cRepo {
cursor: pointer;
}
.cRepo text {
text-shadow: 0 1px 2px rgba(0, 0, 0, 0.5);
pointer-events: none;
}
.cRepo:hover text {
text-shadow: 0 1px 2px rgba(255, 255, 255, 1);
}
.tooltip {
color: #f9f9f9;
text-shadow: 0 1px 2px rgba(0, 0, 0, 0.5);
background: rgba(110, 130, 163, 0.7);
border: 1px dotted #8D9DB6;
padding: 5px;
border-radius: 3px;
}
#tooltip {
z-index: 50;
display: none;
max-width: 25%;
pointer-events: none;
}
/* http://xbreaker.github.com/plusstrap/base-css.html#buttons */
.btn {
display: inline-block;
*display: inline;
*zoom: 1;
padding: 0px 8px;
font-weight: bold;
margin-bottom: 0;
font-size: 11px;
line-height: 22px;
*line-height: 22px;
text-align: center;
vertical-align: middle;
cursor: default;
color: #333333;
text-shadow: 0 1px 1px rgba(255, 255, 255, 0.75);
background-color: #f3f3f3;
background-image: -moz-linear-gradient(top, #f5f5f5, #f1f1f1);
background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#f5f5f5), to(#f1f1f1));
background-image: -webkit-linear-gradient(top, #f5f5f5, #f1f1f1);
background-image: -o-linear-gradient(top, #f5f5f5, #f1f1f1);
background-image: linear-gradient(to bottom, #f5f5f5, #f1f1f1);
background-repeat: repeat-x;
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#fff1f1f1', GradientType=0);
border-color: #e4e4e4;
*background-color: #f1f1f1;
filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
border: 1px solid rgba(0, 0, 0, 0.1);
*border: 0;
border-bottom-color: rgba(0, 0, 0, 0.1);
-webkit-border-radius: 2px;
-moz-border-radius: 2px;
border-radius: 2px;
*margin-left: .3em;
}
.btn:not(.active):hover {
background-color: #f5f5f5;
background-image: -moz-linear-gradient(top, #f9f9f9, #eeeeee);
background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#f9f9f9), to(#eeeeee));
background-image: -webkit-linear-gradient(top, #f9f9f9, #eeeeee);
background-image: -o-linear-gradient(top, #f9f9f9, #eeeeee);
background-image: linear-gradient(to bottom, #f9f9f9, #eeeeee);
background-repeat: repeat-x;
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff9f9f9', endColorstr='#ffeeeeee', GradientType=0);
}
.btn:hover,
.btn:active,
.btn.active,
.btn.disabled,
.btn[disabled] {
color: #333333;
background-color: #eeeeee;
*background-color: #e4e4e4;
-webkit-box-shadow: 0 1px 0px #dedede;
-moz-box-shadow: 0 1px 0px #dedede;
box-shadow: 0 1px 0px #dedede;
border-color: #cbcbcb;
}
.btn:active,
.btn.active {
background-color: #d8d8d8 \9;
-webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, .2);
-moz-box-shadow: inset 0 1px 2px rgba(0, 0, 0, .2);
box-shadow: inset 0 1px 2px rgba(0, 0, 0, .2);
}
.btn:first-child {
*margin-left: 0;
}
.btn:hover {
color: #333333;
text-decoration: none;
background-color: #e6e6e6;
*background-color: #d9d9d9;
-webkit-transition: background-position 0.1s linear;
-moz-transition: background-position 0.1s linear;
-o-transition: background-position 0.1s linear;
transition: background-position 0.1s linear;
}
.btn:focus {
outline: thin dotted #333;
outline: 5px auto -webkit-focus-ring-color;
outline-offset: -2px;
}
.btn.active,
.btn:active {
background-color: #e6e6e6;
background-color: #d9d9d9 \9;
background-image: none;
outline: 0;
}
.btn.disabled,
.btn[disabled] {
cursor: default;
background-color: #e6e6e6;
background-image: none;
opacity: 0.65;
filter: alpha(opacity=65);
-webkit-box-shadow: none;
-moz-box-shadow: none;
box-shadow: none;
}
/** end **/
#controls .btn {
padding: 2px 8px;
margin: 0;
}
.row {
display: block;
max-width: 100%;
}
#divStat img,
.statInfo img {
float: left;
margin: 0 0 0 0;
padding: 1px;
background: #fff;
box-shadow: 0 1px 2px rgba(0,0,0,0.15);
}
#divStat ul,
.statInfo ul {
overflow: hidden;
padding: 0;
list-style: none;
}
#divStat li,
.statInfo li {
color: #ccc;
}
hr {
margin: 5px 0;
}
#divStat li strong,
#divStat li a,
.statInfo li strong,
.statInfo li a {
margin-left: 5px;
}
#divStat li strong,
#divStat h1,
.statInfo li strong,
.statInfo h1 {
color: #f9f9f9;
}
#curRep .a-icon,
#divStat .a-icon,
.statInfo .a-icon {
text-decoration: none;
color: rgba(172, 213, 229, 1);
}
#divStat a,
.statInfo a {
color: rgba(172, 213, 229, 1);
}
#curRep .a-icon:hover,
#divStat .a-icon:hover,
#divStat a:hover,
.statInfo .a-icon:hover,
.statInfo a:hover {
color: rgba(221, 246, 255, 1);
}
#curRep {
vertical-align: middle;
text-align: left;
}
#curRep .mega-icon {
font-size: 24px;
width: 24px;
height: inherit;
position: relative;
}
#curRep .mini-icon-link:before,
#curRep .mega-icon-public-repo:before {
position: absolute;
top: -16px;
}
#userInfo,
.userInfo {
right: -2px;
top: -2px;
padding: 7px 7px 5px 5px;
z-index: 52;
}
#userInfo ul,
.userInfo ul {
white-space: nowrap;
-webkit-transition: all .4s;
-moz-transition: all .4s;
-o-transition: all .4s;
transition: all .4s;
max-width: 0;
max-height: 0;
}
#userInfo img,
.userInfo img {
-webkit-transition: all .5s ease-in-out .4s;
-moz-transition: all .5s ease-in-out .4s;
-o-transition: all .5s ease-in-out .4s;
transition: all .5s ease-in-out .4s;
width : 48px;
height : auto;
}
#userInfo.open img,
#userInfo:hover img,
.userInfo.open img,
.userInfo:hover img {
-webkit-transition: all .5s;
-moz-transition: all .5s;
-o-transition: all .5s;
transition: all .5s;
margin-right: 10px;
width : 96px;
height : auto;
}
#userInfo.open ul,
#userInfo:hover ul,
.userInfo.open ul,
.userInfo:hover ul {
-webkit-transition: all .5s ease-in-out .5s;
-moz-transition: all .5s ease-in-out .5s;
-o-transition: all .5s ease-in-out .5s;
transition: all .5s ease-in-out .5s;
max-width: 960px;
max-height: 1280px;
}
/** stepbar */
.steps {
list-style: none;
margin: 0;
}
.steps > li {
display: block;
float: left;
position: relative;
padding: 4px;
border: 1px solid white;
border-right-style: dotted;
border-left-style: dotted;
margin-right: 1em;
background: #50617F;
padding-right: 2px;
margin-left: -17px;
padding-left: 24px;
/*text-align: right;*/
box-shadow: 2px 4px 5px rgba(0, 0, 0, .5);
}
.steps > li .sub {
text-align: left;
display: block;
overflow: hidden;
margin-left: -22px;
}
.steps > li:first-child .sub {
margin-left: 0;
}
.steps > li .sub {
max-height: 0;
max-width: 0;
-webkit-transition: max-height .7s ease-in-out .2s, max-width .2s ease-in-out .9s;
-moz-transition: max-height .7s ease-in-out .2s, max-width .2s ease-in-out .9s;
-o-transition: max-height .7s ease-in-out .2s, max-width .2s ease-in-out .9s;
transition: max-height .7s ease-in-out .2s, max-width .2s ease-in-out .9s;
}
.steps > li:hover .sub {
max-height: 960px;
max-width: 960px;
-webkit-transition: max-height .5s ease-in-out .3s, max-width .2s ease-in-out .1s;
-moz-transition: max-height .5s ease-in-out .3s, max-width .2s ease-in-out .1s;
-o-transition: max-height .5s ease-in-out .3s, max-width .2s ease-in-out .1s;
transition: max-height .5s ease-in-out .3s, max-width .2s ease-in-out .1s;
}
.steps > li:first-child {
border-radius: 5px 0 0 5px;
border-left: 1px solid #ffffff;
margin-left: 0;
padding-left: 4px;
}
.steps > li:hover {
border-right-style: solid;
border-left-style: solid;
}
.steps > li:after,
.steps > li:before {
width: 0;
height: 0;
content: "";
display: inline-block;
position: absolute;
}
.steps > li:after {
border: 1.248em solid transparent;
border-left-color: #ffffff;
top: -0.05em;
right: -2.45em;
z-index: 0;
}
.steps > li:before {
border: 1.13em solid transparent;
border-left-color: #50617F;
top: .02em;
right: -2.25em;
z-index: 1;
}
.steps.sfirst > li:not(.first) {
border-color: #ccc;
background: #858689;
}
.steps.sfirst > li:not(.first):after {
border-left-color: #ccc;
}
.steps.sfirst > li:not(.first):before {
border-left-color: #858689;
}
.steps.ssecond > li.third {
border-color: #ccc;
background: #858689;
}
.steps.ssecond > li.third:after {
border-left-color: #ccc;
}
.steps.ssecond > li.third:before {
border-left-color: #858689;
}
.steps > li > label {
vertical-align: middle;
}
.sub > div {
padding: 5px;
}
.sub blockquote {
padding: 3px;
margin: 2px 0;
background: rgba(255, 252, 196, .6);
border-left: 2px solid rgba(255, 252, 196, 1);
font-style: italic;
color: rgba(255, 252, 196, 1);
text-shadow: 0 1px 2px rgba(0, 0, 0, .5);
}
blockquote.green {
/*background: rgba(161, 237, 144, .3);
color: rgb(198, 244, 188);
border-left: 2px solid rgb(198, 244, 188);*/
background: rgba(198, 245, 188, .6);
color: rgb(31, 166, 31);
border-left: 2px solid rgb(31, 166, 31);
}
/** end stepbar */
.barLang circle,
.barLang path {
}
.barLang path {
fill: none;
stroke-width: 1px;
}
.barLang text {
pointer-events: none;
text-shadow : 0 0 3px rgba(0, 0, 0, 1);
}
.barLang .barSelect {
stroke: #000;
stroke-opacity: 0;
stroke-width: 1px;
fill: #f9f9f9;
fill-opacity: 0;
-webkit-transition: all 1.5s;
-moz-transition: all 1.5s;
-o-transition: all 1.5s;
transition: all 1.5s;
}
.barLang:hover .barSelect {
fill-opacity: .6;
stroke-opacity: .6;
-webkit-transition: all .5s;
-moz-transition: all .5s;
-o-transition: all .5s;
transition: all .5s;
}
.field {
padding: 3px;
}
.setting {
list-style: none;
text-shadow: 0 1px 2px rgba(0, 0, 0, .5);
}
.setting input {
padding: 0;
margin: 0;
}
.setting h1 {
color: rgba(0, 0, 0, .8);
text-shadow: 0 1px 1px rgba(255, 255, 255, .5);
}
.setting > li {
border: 1px dotted rgba(255, 255, 255, .5);
background: rgba(255, 255, 255, .2);
}
.setting > li .group {
list-style: none;
vertical-align: middle;
}
.group > li {
display: inline-block;
}
.com-mess {
font-size: 11pt;
font-family: Verdana,serif;
fill: #ffffff;
fill-opacity: .3;
}
.mono {
font-family: monospace;
font-size: 10pt;
}
#visBtnResume .mini-icon-history {
position: relative;
height: 0;
}
#visBtnResume .mini-icon-history:before {
position: absolute;
top: -12px;
left: 0;
}
.gtLeg, .gttLeg {
fill : #f9f9f9;
text-shadow: 0 1px 2px rgba(0, 0, 0, .5);
}
/**
* User: ArtZub
* Date: 15.01.13
* Time: 1:34
*/
'use strict';
var PIdiv2 = Math.PI / 2,
smallRad = PIdiv2 * (1 / 15),
TT_PAD = 8
;
var colors = {
additions : "#ddffdd",
deletions : "#ffdddd",
changes : "#FFF1DD",
center : "#FF6600",
stroked : "#f9f9f9",
addedFile : "#A5EC6E",
modifiedFile : "#FFB877",
deletedFile : "#FF77B5",
decolor : "#888888"
};
function toRgba(color, a) {
color = d3.rgb(color);
return "rgba(" + [color.r, color.g, color.b, a || 1] + ")";
}
var vis = {
sC : function(a, b) {
return d3.ascending(b.date, a.date);
},
mtt : function(d) {
if (toolTip) {
var e = d3.event;
if (arguments.length > 3)
e = arguments[3];
toolTip
.style("top", e.pageY > h / 2 ? (e.pageY - toolTip.node().clientHeight - TT_PAD) + "px" : (e.pageY + TT_PAD) + "px")
.style("left", e.pageX > w / 2 ? (e.pageX - toolTip.node().clientWidth - TT_PAD) + "px" : (e.pageX + TT_PAD) + "px")
;
}
}
};
function initGraphics(svg) {
vis.layers = (function(data) {
var ls = { _data : data };
svg.selectAll("g.layer")
.data(data, function(d) {return d.name})
.enter()
.append("g")
.each(function(d) {
ls[d.name] = d3.select(this).attr("class", "layer").attr("width", w).attr("height", h);
ls[d.name].getOrder = function() {
return d.order;
return this;
};
ls[d.name].toFront = function() {
d.order &&
vis.layers.ordering(this, 0);
return this;
};
ls[d.name].hide = function() {
ls[d.name].visible = false;
this.style("display", "none");
return this;
};
ls[d.name].show = function() {
ls[d.name].visible = true;
this.style("display", null);
return this;
};
ls[d.name].visible = true;
});
return ls;
})([
{name : "repo", order : 2},
{name : "stat", order : 1},
{name : "show", order : 0}
]);
vis.layers.ordering = function(layer, order) {
function s(a, b) {
return d3.ascending(b.order, a.order);
}
var _d = (layer instanceof Array || layer instanceof Object ? layer : this[layer]);
_d = _d ? (_d instanceof Array ? _d.datum() : _d) : null;
if (_d) {
this._data.forEach(function(d) {
_d != d && d.order >= order && d.order++;
});
_d.order = order;
svg.selectAll("g.layer").sort(s);
}
return this;
};
vis.resources = {
};
vis.inited = true;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment