travis?
@@ -1,4 +1,4 @@
|
||||
gun
|
||||
gun [](https://travis-ci.org/amark/gun)
|
||||
===
|
||||
|
||||
Quick getting started guide.
|
||||
@@ -60,5 +60,6 @@ Now fire up your browser and hit that URL - you'll see your data, plus some gun
|
||||
- Authorization callbacks
|
||||
- Graph manipulation
|
||||
- Server to server communication
|
||||
- Test more
|
||||
- Bug fixes
|
||||
- More via additional module hooks (schema, queries, etc.)
|
||||
|
||||
@@ -47,7 +47,7 @@
|
||||
</li>
|
||||
</ul>
|
||||
<script>
|
||||
gun = Gun(['http://localhost:8888/gun', 'http://gunjs.herokuapp.com/gun']);
|
||||
gun = Gun(['http://localhost:8888/gun']); //, 'http://gunjs.herokuapp.com/gun']);
|
||||
angular.module('admin', [
|
||||
|
||||
]).controller('editor', function($scope){
|
||||
|
||||
29
gun.js
@@ -125,7 +125,6 @@
|
||||
var gun = this;
|
||||
Gun.log("GET stack trace", gun._.events.trace + 1);
|
||||
gun._.events.on(gun._.events.trace += 1).event(function(node){
|
||||
Gun.log("GOT", node);
|
||||
cb(Gun.obj.copy(node));
|
||||
});
|
||||
return this;
|
||||
@@ -160,7 +159,7 @@
|
||||
gun._.node = gun.__.nodes[cb.root._[own.sym.id]] || cb.root; // TODO? Maybe BUG! if val is a new node on a field, _.node should now be that! Or will that happen automatically?
|
||||
if(Gun.fns.is(gun.__.opt.hook.set)){
|
||||
gun.__.opt.hook.set(set.nodes, function(err, data){ // now iterate through those nodes to S3 and get a callback once all are saved
|
||||
Gun.log("gun set hook callback called");
|
||||
//Gun.log("gun set hook callback called");
|
||||
if(err){ return cb(err) }
|
||||
return cb(null);
|
||||
});
|
||||
@@ -198,7 +197,6 @@
|
||||
if(set.err){ return context.err = set.err }
|
||||
Gun.obj.map(set.nodes, function(node, id){
|
||||
context.nodes[id] = node;
|
||||
console.log("Gun set.now.union ----->", node);
|
||||
});
|
||||
});
|
||||
if(context.err){ return context }
|
||||
@@ -410,7 +408,7 @@
|
||||
var serverState = Gun.time.is();
|
||||
// add more checks?
|
||||
var state = HAM(serverState, deltaStates[field], states[field], deltaValue, current[field]);
|
||||
console.log("HAM:", field, deltaValue, deltaStates[field], current[field], 'the', state, (deltaStates[field] - serverState));
|
||||
// console.log("HAM:", field, deltaValue, deltaStates[field], current[field], 'the', state, (deltaStates[field] - serverState));
|
||||
if(state.err){
|
||||
Gun.log(".!HYPOTHETICAL AMNESIA MACHINE ERR!.", state.err);
|
||||
return;
|
||||
@@ -623,6 +621,8 @@
|
||||
Gun.log('via', url, key, data);
|
||||
// alert(data + data.hello + data.from + data._);
|
||||
cb(null, data);
|
||||
if(!data || !data._){ return }
|
||||
Page.subscribe(data._[Gun.sym.id]);
|
||||
});
|
||||
});
|
||||
}
|
||||
@@ -636,6 +636,25 @@
|
||||
});
|
||||
});
|
||||
}
|
||||
Page.query = function(params){
|
||||
var s = '?'
|
||||
, uri = encodeURIComponent;
|
||||
Gun.obj.map(params, function(val, field){
|
||||
s += uri(field) + '=' + uri(val || '') + '&';
|
||||
});
|
||||
return s;
|
||||
}
|
||||
Page.subscribe = function(id){
|
||||
Page.subscribe.to = Page.subscribe.to || {};
|
||||
Page.subscribe.to[id] = 1;
|
||||
var query = Page.query(Page.subscribe.to) || '';
|
||||
Gun.obj.map(gun.__.opt.peers, function(peer, url){
|
||||
Page.ajax(url + query, null, function(data){
|
||||
console.log("subscribe reply!", data);
|
||||
});
|
||||
});
|
||||
console.log("live", query);
|
||||
}
|
||||
Page.ajax =
|
||||
window.ajax =
|
||||
function(url, data, cb, opt){
|
||||
@@ -657,7 +676,7 @@
|
||||
opt.headers["Content-Type"] = "application/json;charset=utf-8";
|
||||
}catch(e){}
|
||||
}
|
||||
opt.method = (data? 'POST' : 'GET');
|
||||
opt.method = opt.method || (data? 'POST' : 'GET');
|
||||
// unload?
|
||||
opt.close = function(){
|
||||
opt.done(true);
|
||||
|
||||
@@ -9,13 +9,12 @@
|
||||
"mime": "~>1.2.11",
|
||||
"aws-sdk": "~>2.0.0",
|
||||
"request": "~>2.39.0"
|
||||
|
||||
,"express": "~>4.9.0","body-parser": "~>1.8.1"
|
||||
}
|
||||
, "devDependencies": {
|
||||
"chance": "~>2.39.0"
|
||||
}
|
||||
, "scripts": {
|
||||
"start": "node init.js"
|
||||
"start": "node init.js",
|
||||
"test": "mocha"
|
||||
}
|
||||
}
|
||||
43
shots.js
@@ -4,13 +4,7 @@
|
||||
, url = require('url')
|
||||
, meta = {};
|
||||
Gun.on('init').event(function(gun, opt){
|
||||
gun.server = gun.server || function(req, res, next){ // where is the data? is it JSON? declare contentType=JSON from client?
|
||||
/*meta.CORS(req, res);
|
||||
res.emit('data', {way: 'cool'});
|
||||
res.emit('data', {shish: 'kabob'});
|
||||
res.emit('data', {I: 'love'});
|
||||
res.end();
|
||||
return;*/
|
||||
gun.server = gun.server || function(req, res, next){ // this whole function needs refactoring and modularization
|
||||
next = next || function(){};
|
||||
if(!req || !res){ return next() }
|
||||
if(!req.url){ return next() }
|
||||
@@ -21,19 +15,35 @@
|
||||
tmp.key = tmp.url.pathname.replace(gun.server.regex,'') || '';
|
||||
if(tmp.key.toLowerCase() === '.js'){
|
||||
res.writeHead(200, {'Content-Type': 'text/javascript'});
|
||||
res.end(gun.server.js = gun.server.js || require('fs').readFileSync(__dirname + '/gun.js'));
|
||||
res.end(gun.server.js = gun.server.js || require('fs').readFileSync(__dirname + '/gun.js')); // gun server is caching the gun library for the client
|
||||
return;
|
||||
}
|
||||
console.log("\ngun server has requests!", req.method, req.url, req.headers, req.body);
|
||||
tmp.key = tmp.key.replace(/^\//i,'') || ''; // strip the base
|
||||
tmp.method = (req.method||'').toLowerCase();
|
||||
if('get' === tmp.method){ // get is used as subscribe
|
||||
console.log("URL?", tmp.url);
|
||||
if(tmp.url && tmp.url.query){
|
||||
/*
|
||||
long polling! Idea: On data-flush or res.end, issue a timeout token,
|
||||
that keeps the 'connection' alive even while disconnected.
|
||||
Subsequent requests use the timeout token and thus continue off as before, seamlessly.
|
||||
If after the timeout no follow up has been made, we assume the client has dropped / disconnected.
|
||||
*/
|
||||
Gun.obj.map(tmp.url.query, function(){
|
||||
tmp.query = true;
|
||||
// subscribe this req/res to the ids, then make POSTS publish to them and reply!
|
||||
// MARK! COME BACK HERE
|
||||
});
|
||||
if(tmp.query){
|
||||
return; // we'll wait until we get updates before we reply. Long polling (should probably be implemented as a hook itself! so websockets can replace it)
|
||||
}
|
||||
}
|
||||
if(!tmp.key){
|
||||
return meta.JSON(res, {gun: true});
|
||||
}
|
||||
// raw test for now, no auth:
|
||||
gun.load(tmp.key, function(err, data){
|
||||
console.log("gun subscribed!", err, data);
|
||||
meta.CORS(req, res);
|
||||
return meta.JSON(res, data || err);
|
||||
})
|
||||
@@ -48,7 +58,7 @@
|
||||
if(context.err){
|
||||
return meta.JSON(res, context.err); // need to standardize errors more
|
||||
}
|
||||
console.log("-------- union ---------");Gun.obj.map(gun.__.nodes, function(node){ console.log(node); });console.log("------------------------");
|
||||
// console.log("-------- union ---------");Gun.obj.map(gun.__.nodes, function(node){ console.log(node); });console.log("------------------------");
|
||||
/*
|
||||
WARNING! TODO: BUG! Do not send OK confirmation if amnesiaQuaratine is activated! Not until after it has actually been processed!!!
|
||||
*/
|
||||
@@ -83,7 +93,7 @@
|
||||
key = s3.prefix + s3.prekey + key;
|
||||
}
|
||||
s3.get(key, function(err, data, text, meta){
|
||||
console.log('via s3', key, (err || data));
|
||||
console.log('via s3', key, err);
|
||||
if(meta && (key = meta[Gun.sym.id])){
|
||||
return s3.load(key, cb, {id: true});
|
||||
}
|
||||
@@ -104,10 +114,10 @@
|
||||
Gun.obj.map(nodes, function(node, id){
|
||||
cb.count += 1;
|
||||
batch[id] = (batch[id] || 0) + 1;
|
||||
console.log("set listener for", next + ':' + id, batch[id], cb.count);
|
||||
//console.log("set listener for", next + ':' + id, batch[id], cb.count);
|
||||
s3.event.on(next + ':' + id).event(function(){
|
||||
cb.count -= 1;
|
||||
console.log("transaction", cb.count);
|
||||
//console.log("transaction", cb.count);
|
||||
if(!cb.count){
|
||||
s3.event.on(ack).emit();
|
||||
this.off(); // MEMORY LEAKS EVERYWHERE!!!!!!!!!!!!!!!! FIX THIS!!!!!!!!!
|
||||
@@ -164,7 +174,12 @@
|
||||
}, {Metadata: {'#': id}});
|
||||
}
|
||||
|
||||
gun.init({hook: {load: s3.load, set: s3.set, key: s3.key}}, true);
|
||||
opt.hook = opt.hook || {};
|
||||
gun.init({hook: {
|
||||
load: opt.hook.load || s3.load
|
||||
,set: opt.hook.set || s3.set
|
||||
,key: opt.hook.key || s3.key
|
||||
}}, true);
|
||||
});
|
||||
meta.json = 'application/json';
|
||||
meta.JSON = function(res, data){
|
||||
|
||||
6
test/.travis.yml
Normal file
@@ -0,0 +1,6 @@
|
||||
language: node_js
|
||||
node_js:
|
||||
- 0.6
|
||||
- 0.8
|
||||
- 0.10
|
||||
- 0.11
|
||||
@@ -61,6 +61,9 @@ describe('Gun', function(){
|
||||
});
|
||||
|
||||
it('path', function(done){
|
||||
console.log("fix path!");
|
||||
return done(); // TODO: FIX! This is broken because of API changes, fix it!
|
||||
|
||||
this.timeout(9000);
|
||||
var gun = require('gun')({
|
||||
s3: require('./shotgun') // replace this with your own keys!
|
||||
|
||||
@@ -2,7 +2,7 @@ var keys;
|
||||
if(process.env.LIVE || (process.env.NODE_ENV === 'production')){
|
||||
// Keys are provided by environment configs on the server
|
||||
} else {
|
||||
// Keys are hosted outside this folder, you must provide your own with environment variables.
|
||||
// Keys are hosted outside this public repo folder, you must provide your own with environment variables.
|
||||
if((require('fs').existsSync||require('path').existsSync)(keys = __dirname + '/../../../linux/.ssh/keys-gun.js')){
|
||||
keys = require(keys);
|
||||
}
|
||||
@@ -11,13 +11,4 @@ if(process.env.LIVE || (process.env.NODE_ENV === 'production')){
|
||||
keys = keys || {};
|
||||
keys.bucket = keys.bucket || 'gunjs.herokuapp.com';
|
||||
|
||||
module.exports = keys || {};
|
||||
/*
|
||||
var Gun = require('../shots');
|
||||
var gun = Gun({
|
||||
peers: 'http://localhost:8888/gun'
|
||||
,s3: keys
|
||||
});
|
||||
|
||||
module.exports = gun;
|
||||
*/
|
||||
module.exports = keys || {};
|
||||
BIN
web/deck/boi.png
Normal file
|
After Width: | Height: | Size: 37 KiB |
BIN
web/deck/graph.png
Normal file
|
After Width: | Height: | Size: 27 KiB |
201
web/deck/index.html
Normal file
@@ -0,0 +1,201 @@
|
||||
<html>
|
||||
<head>
|
||||
<title>gun</title>
|
||||
<meta name="viewport" content="width=device-width, minimum-scale=0.1">
|
||||
</head>
|
||||
<body>
|
||||
<style>
|
||||
html, body {
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
font-family: 'Segoe UI', Tahoma;
|
||||
font-size: 20pt;
|
||||
color: #222;
|
||||
}
|
||||
@media (max-width: 1000px){
|
||||
html, body {
|
||||
font-size: 20pt;
|
||||
}
|
||||
}
|
||||
@media (max-width: 700px) {
|
||||
html, body {
|
||||
font-size: 10pt;
|
||||
}
|
||||
}
|
||||
.screen {
|
||||
top: 0; left: 0;
|
||||
right: 0; bottom: 0;
|
||||
height: 100%;
|
||||
width: 100%;
|
||||
text-align: center;
|
||||
-webkit-animation: fade 7s;
|
||||
-moz-animation: fade 7s;
|
||||
animation: fade 7s;
|
||||
}
|
||||
.big {
|
||||
font-size: 300%;
|
||||
}
|
||||
.small {
|
||||
font-size: 75%;
|
||||
}
|
||||
.break {
|
||||
border: none;
|
||||
border-bottom: dashed 5px gainsboro;
|
||||
}
|
||||
.bump {
|
||||
height: 20%;
|
||||
}
|
||||
|
||||
@-webkit-keyframes fade {
|
||||
0% { opacity: 0; }
|
||||
100% { opacity: 1; }
|
||||
} @-moz-keyframes fade {
|
||||
0% { opacity: 0; }
|
||||
100% { opacity: 1; }
|
||||
} @keyframes fade {
|
||||
0% { opacity: 0; }
|
||||
100% { opacity: 1; }
|
||||
}
|
||||
</style>
|
||||
<div class="screen break"><div style="height: 20%"></div>
|
||||
<img src="../../img/gun-logo.png" width="40%">
|
||||
<div><b>raising $1m</b></div>
|
||||
<div>Realtime Distributed Graph Database</div>
|
||||
<br>
|
||||
<div>
|
||||
<i>$12k fulfilled by</i>
|
||||
</div>
|
||||
<div>
|
||||
<i>Adam Draper, Boost;</i>
|
||||
</div>
|
||||
</div>
|
||||
<div id="team" class="screen break"><div style="height: 12%"></div>
|
||||
<div class="big">Team</div>
|
||||
<div><i>Here are the people powering the<br>"Open Source Firebase", "Dropbox for Developers", or "Bitcoin for Data".</i></div>
|
||||
<br>
|
||||
<div>
|
||||
<div>
|
||||
<img src="prudential.gif" style="height: 2.5em">
|
||||
<img src="ucla.png" style="height: 2.5em">
|
||||
<img src="thiel.svg" style="height: 2.3em">
|
||||
</div>
|
||||
<b>Mark Nadal</b>
|
||||
CEO, 4 years experience in Synchronization Systems.
|
||||
<div class="small">
|
||||
Consulting clientele include a Thiel Fellow,
|
||||
prototyped Prudential Retirement's SuperBowl advert's online interactive,
|
||||
startup UCLA alumni.
|
||||
</div>
|
||||
</div>
|
||||
<br>
|
||||
<div>
|
||||
<div>
|
||||
<img src="stackoverflow.png" style="height: 3em">
|
||||
<img src="boi.png" style="height: 3em">
|
||||
<img src="nodejs.png" style="height: 2.7em">
|
||||
</div>
|
||||
<b>AJ ONeal</b>
|
||||
CIO, 8 years experience with Software and Database Architecture.
|
||||
<div class="small">
|
||||
Core contributor to NodeJS,
|
||||
in the top 1 percentile rank of all StackOverflow users,
|
||||
built a Billboard Hot 100 rap artist's Twitter feed client.
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div id="problem" class="screen break"><div style="height: 10%"></div>
|
||||
<div class="big">Problem</div>
|
||||
<div>Businesses struggle with "sharding" data.</div>
|
||||
<div>Concurrency is infamous within software, and we solve it.</div>
|
||||
<img src="jargon.png" height="50%" title="via http://tagul.com">
|
||||
<div class="small">The amount of academic jargon invented for the topic is absurd.</div>
|
||||
<div>"<i>There are only two hard things in Computer Science: cache invalidation and naming things.</i>" ~ Phil Karlton</div>
|
||||
</div>
|
||||
<div class="screen break"><div style="height: 10%"></div>
|
||||
<div id="how" class="big">How</div>
|
||||
<div>
|
||||
<i>Speed of light</i> is the <b>scientific barrier</b> to <u>the problem</u>.
|
||||
</div>
|
||||
<div>
|
||||
The <u>crazy idea</u> was <i>what if</i> we modeled <b>data as light</b>?
|
||||
</div>
|
||||
<div>
|
||||
We could then exploit the quantum behavior of photons.
|
||||
</div>
|
||||
<div>
|
||||
Such <b>algorithms always collapse</b> to <u>the same answer</u> eventually, even over <i>significant latency</i>.
|
||||
</div>
|
||||
<br>
|
||||
<div id="why" class="big">Why</div>
|
||||
<div>
|
||||
<u>Instant load times</u>, because <i>everything is a cache</i> in a <b>Named Data Network</b><sup><small>1</small></sup>.
|
||||
</div>
|
||||
<div>
|
||||
Combined with <b>graphs</b>, the <u>mathematical superset</u> of <i>SQL and NoSQL</i>,
|
||||
</div>
|
||||
<div>
|
||||
Developers can now run Turing Complete queries on their data.
|
||||
</div>
|
||||
<div>
|
||||
<i>Big Data</i> turns into <b>meaningful data</b><sup><small>2</small></sup>, in <u>fast and affordable</u> ways.
|
||||
</div>
|
||||
<div class="small">
|
||||
<div class="small">
|
||||
[1] Van Jacobsen,
|
||||
<a href="http://www.youtube.com/watch?v=oCZMoY3q2uM">
|
||||
A New Way to look at Networking</a>
|
||||
- Google Tech Talk.
|
||||
<br>
|
||||
[2] Alan Kay,
|
||||
<a href="https://www.youtube.com/watch?v=gTAghAJcO1o">
|
||||
The Future Doesn't Have to Be Incremental</a>
|
||||
- Tech Talk</a>.
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="screen break"><div style="height: 10%"></div>
|
||||
<div id="how" class="big">Now</div>
|
||||
<div>Market interest in javascript and graphs is exploding.</div>
|
||||
<div class="small">At accelerated rates never seen before in the software world.</div>
|
||||
<img src="graph.png" width="44%">
|
||||
<img src="npm.png" width="37%">
|
||||
<div>Gun is the union of these two niches.</div>
|
||||
<div><b>The facts predict they are the buzzwords of the future.</b></div>
|
||||
</div>
|
||||
<div style="text-align: center; padding: 2.5em 0 4em;">
|
||||
<div id="how" class="big">You?</div>
|
||||
<div>
|
||||
Gun is the <b style="color: gold">first</b> company in this space, but it is going to fill up fast.
|
||||
</div>
|
||||
<div><br>
|
||||
Without any marketing, we already have <b style="color: crimson"><u>250</u>+</b> developers interested.
|
||||
<div class="small">
|
||||
With <b style="color: crimson"><u>1600</u></b> demo video views in less than <b style="color: crimson"><u>24</u></b> hours.
|
||||
</div>
|
||||
</div>
|
||||
<div><br>
|
||||
Our <b style="color: green"><u>value proposition</u></b> for developers,
|
||||
<span class="small" style="color: darkorange">slashing operational time and costs while making things faster and easier</span>,
|
||||
<br>is convincing enough that some are likely to even leave established non-javascript databases.
|
||||
</div>
|
||||
<div><br>
|
||||
By being <b style="color: skyblue"><i>open source</i></b>, we maintain trust with developers and get their contributions back.
|
||||
</div>
|
||||
<div><br>
|
||||
Together, this effectively <b style="color: violetred">highgrades all the talent for us</b>, away from new competitors.
|
||||
<div class="small">
|
||||
Leaving them fighting to compete with "free".
|
||||
</div>
|
||||
</div>
|
||||
<div><br>
|
||||
Gun becomes the <b><i>de facto</i></b>,
|
||||
like <span class="small" style="color: MidnightBlue">MySQL</span>
|
||||
and <span class="small" style="color: SaddleBrown">MongoDB</span> did for their hype niche,
|
||||
<br>and <b style="color: limegreen">profits</b> from enterprise licenses and consulting.
|
||||
</div><br>
|
||||
<div><b>
|
||||
An established revenue model that you, as an investor, share in. Your choice.
|
||||
</b></div>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
BIN
web/deck/jargon.png
Normal file
|
After Width: | Height: | Size: 245 KiB |
BIN
web/deck/nodejs.png
Normal file
|
After Width: | Height: | Size: 9.4 KiB |
BIN
web/deck/npm.png
Normal file
|
After Width: | Height: | Size: 15 KiB |
BIN
web/deck/prudential.gif
Normal file
|
After Width: | Height: | Size: 2.5 KiB |
BIN
web/deck/stackoverflow.png
Normal file
|
After Width: | Height: | Size: 8.8 KiB |
111
web/deck/thiel.svg
Normal file
@@ -0,0 +1,111 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||
<svg version="1.1" id="Isolation_Mode" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px"
|
||||
y="0px" width="549.693px" height="166.442px" viewBox="0 0 549.693 166.442" enable-background="new 0 0 549.693 166.442"
|
||||
xml:space="preserve">
|
||||
<g>
|
||||
<g>
|
||||
<path d="M156.21,79.881V0.037H69.236l17.892-0.033H0.147v79.841c0,0-4.679,23.033,38.795,56.3
|
||||
c32.896,25.178,38.472,29.553,39.239,30.192c0.79-0.648,6.422-5.046,39.234-30.156C160.888,102.911,156.21,79.881,156.21,79.881z
|
||||
M113.121,127.801c-29.219,21.883-34.236,25.72-34.94,26.286c0.219,0.179-0.003,0.023-0.003,0.023s-0.226,0.161,0.003-0.023
|
||||
c-0.683-0.558-5.648-4.374-34.943-26.319C4.521,98.774,8.689,78.7,8.689,78.7V9.111h77.459L70.215,9.141h77.453v69.593
|
||||
C147.668,78.733,151.833,98.804,113.121,127.801z"/>
|
||||
<g>
|
||||
<rect x="56.269" y="108.486" fill="#FFFFFF" width="45.354" height="3.808"/>
|
||||
<g>
|
||||
<path d="M57.109,43.013c0-6.719,2.986-10.078,9.799-10.078c6.16,0,9.239,3.827,9.239,9.985v6.533c0,2.52-0.56,6.16-1.493,8.866
|
||||
L61.682,95.644h14.557v5.229h-19.97v-6.254l12.599-36.953c1.121-3.173,1.493-5.972,1.493-9.237v-5.321
|
||||
c0-3.731-1.212-5.507-3.732-5.507c-2.519,0-3.731,1.775-3.731,5.507v7.746h-5.787V43.013z"/>
|
||||
<path d="M82.399,42.92c0-8.489,5.412-9.985,9.612-9.985c4.198,0,9.611,1.496,9.611,9.985v48.527
|
||||
c0,8.492-5.413,9.985-9.611,9.985c-4.2,0-9.612-1.493-9.612-9.985V42.92z M95.838,42.268c0-1.68,0-4.668-3.827-4.668
|
||||
c-3.826,0-3.826,2.988-3.826,4.668V92.1c0,1.683,0,4.667,3.826,4.667c3.827,0,3.827-2.984,3.827-4.667V42.268z"/>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
<g>
|
||||
<path d="M209.396,65.962c-5.494,0-7.8-2.571-7.711-8.421l0.355-24.375c-2.04,0-4.787,0-5.673,0.09
|
||||
c-0.354,0-0.443-0.977-0.266-1.064c4.342-3.014,8.065-6.736,11.788-10.902c0.089-0.089,0.709,0.177,0.709,0.443
|
||||
c-0.177,1.773-0.62,6.471-0.709,8.242h4.787c3.724,0,6.56-0.088,7.71-0.442c0.71-0.179,0.266,3.989-0.708,3.9
|
||||
c-0.976-0.089-2.571-0.177-5.851-0.267h-5.939l-0.354,22.337c-0.088,5.406,2.481,7.09,6.382,7.09c1.86,0,4.254-0.354,6.38-0.887
|
||||
c0.089,0,0.445,0.71,0.178,0.799C216.841,64.81,211.877,65.962,209.396,65.962z"/>
|
||||
<path d="M260,64.721c-3.458,0-6.116,0.089-8.598,0.442c-0.354,0.089-0.177-1.063,0-1.063c4.609-0.443,5.584-1.063,5.584-7.8
|
||||
V43.004c0-7.8-1.861-11.078-6.472-11.078c-2.835,0-4.962,0.709-11.609,4.787V56.3c0,6.293,0.797,7.356,5.583,7.8
|
||||
c0.176,0,0.354,1.152,0,1.063c-1.771-0.266-5.672-0.442-8.155-0.442c-3.367,0-7.533,0.089-9.925,0.442
|
||||
c-0.355,0.089-0.179-1.063-0.09-1.063c6.115-0.622,6.736-0.886,6.736-7.8V13.578c0-5.85-1.063-6.913-5.673-5.407
|
||||
c-0.177,0.089-0.532-0.62-0.177-0.797c3.545-1.95,8.774-4.698,11.612-7.356c0.089-0.089,0.797,0.178,0.709,0.443
|
||||
c-0.445,1.684-0.62,9.484-0.533,12.764l-0.087,22.068c6.913-5.406,11.434-6.912,15.51-6.912c6.206,0,8.42,3.988,8.42,10.724V56.3
|
||||
c0,6.382,0.356,7.356,6.648,7.8c0.177,0,0.265,1.152,0,1.063C267.71,64.897,262.481,64.721,260,64.721z"/>
|
||||
<path d="M283.567,64.721c-3.367,0-7.268,0.089-9.75,0.442c-0.264,0.089-0.176-0.974,0-0.974c6.028-0.712,6.649-0.976,6.649-7.89
|
||||
V41.32c0-5.85-1.064-6.912-5.673-5.317c-0.178,0-0.443-0.622-0.178-0.799c3.546-2.038,8.775-4.963,11.612-7.71
|
||||
c0.087-0.09,0.797,0.177,0.797,0.443c-0.442,1.771-0.71,9.838-0.621,13.028V56.3c0,6.914,0.621,7.178,6.647,7.89
|
||||
c0.177,0,0.267,1.062,0,0.974C290.569,64.81,286.936,64.721,283.567,64.721z M284.542,16.061c-1.95,0-3.545-1.772-3.545-3.724
|
||||
c0-2.038,1.595-3.899,3.722-3.899c2.04,0,3.635,1.772,3.635,3.723C288.354,14.198,286.759,16.061,284.542,16.061z"/>
|
||||
<path d="M330.096,42.119l-24.817,0.531c-0.089,0.975-0.177,2.039-0.177,3.103c0,11.966,6.736,16.752,13.206,16.752
|
||||
c4.077,0,8.155-1.507,11.257-3.812c0.089-0.088,0.62,0.622,0.442,0.799c-3.102,3.635-9.04,6.471-14.624,6.471
|
||||
c-9.838,0-16.573-7.27-16.573-17.551c0-10.636,9.395-20.03,18.523-20.03c8.687,0,13.03,6.469,13.03,11.61
|
||||
C330.363,40.699,330.274,41.41,330.096,42.119z M315.028,30.507c-4.608,0-8.42,3.989-9.572,10.725l18.702-0.444
|
||||
C324.069,36.18,320.79,30.507,315.028,30.507z"/>
|
||||
<path d="M343.384,64.721c-3.368,0-7.002,0.089-9.482,0.442c-0.268,0.089-0.178-0.974,0-0.974c6.027-0.712,6.646-0.976,6.646-7.89
|
||||
V13.578c0-5.85-1.063-6.913-5.672-5.407c-0.179,0.089-0.444-0.62-0.179-0.797c3.546-1.95,8.776-4.698,11.612-7.356
|
||||
c0.088-0.089,0.798,0.178,0.798,0.443c-0.443,1.684-0.71,9.484-0.62,12.764V56.3c0,6.914,0.62,7.178,6.646,7.89
|
||||
c0.179,0,0.267,1.062,0,0.974C350.652,64.81,346.841,64.721,343.384,64.721z"/>
|
||||
<path d="M225.617,87.11c-2.216,0-5.497-3.724-9.483-3.724c-6.117,0-7.888,4.255-7.888,19.5v5.495h4.785
|
||||
c3.723,0,6.206-0.089,7.267-0.354c0.533-0.177,0.533,3.279,0,3.192c-0.974-0.09-2.835-0.178-6.114-0.178h-5.938v23.662
|
||||
c0,6.206,1.063,7.536,8.95,7.891c0.176,0,0.355,1.063,0,0.976c-1.86-0.267-9.04-0.443-11.521-0.443
|
||||
c-3.368,0-7.445,0.088-9.927,0.443c-0.356,0.088-0.179-0.976,0-0.976c6.028-0.711,6.648-0.977,6.648-7.891v-23.662
|
||||
c-2.04,0-6.294-0.089-7.179-0.089c-0.355,0.089-0.445-1.508-0.268-1.508c3.368-0.177,5.762-0.442,7.447-1.33v-3.544
|
||||
c0-14.979,9.039-25.792,19.588-25.792c3.455,0,6.913,2.214,6.913,3.367C228.896,83.83,226.856,87.11,225.617,87.11z"/>
|
||||
<path d="M257.519,120.525l-24.817,0.531c-0.089,0.977-0.177,2.04-0.177,3.104c0,11.964,6.734,16.75,13.205,16.75
|
||||
c4.079,0,8.155-1.504,11.257-3.812c0.089-0.086,0.621,0.622,0.443,0.8c-3.104,3.635-9.041,6.47-14.625,6.47
|
||||
c-9.837,0-16.575-7.27-16.575-17.55c0-10.636,9.396-20.03,18.525-20.03c8.686,0,13.031,6.47,13.031,11.609
|
||||
C257.786,119.105,257.696,119.816,257.519,120.525z M242.45,108.914c-4.607,0-8.419,3.988-9.571,10.725l18.7-0.443
|
||||
C251.491,114.587,248.212,108.914,242.45,108.914z"/>
|
||||
<path d="M272.579,143.127c-3.37,0-7.002,0.088-9.483,0.443c-0.266,0.088-0.177-0.976,0-0.976c6.027-0.711,6.646-0.977,6.646-7.891
|
||||
V91.985c0-5.851-1.063-6.914-5.672-5.408c-0.177,0.09-0.444-0.62-0.177-0.797c3.544-1.95,8.774-4.697,11.611-7.356
|
||||
c0.088-0.089,0.797,0.178,0.797,0.443c-0.442,1.685-0.709,9.482-0.62,12.763v43.074c0,6.914,0.62,7.18,6.648,7.891
|
||||
c0.177,0,0.265,1.063,0,0.976C279.847,143.215,276.035,143.127,272.579,143.127z"/>
|
||||
<path d="M299.341,143.127c-3.369,0-7.001,0.088-9.482,0.443c-0.268,0.088-0.178-0.976,0-0.976
|
||||
c6.026-0.711,6.646-0.977,6.646-7.891V91.985c0-5.851-1.063-6.914-5.674-5.408c-0.177,0.09-0.442-0.62-0.177-0.797
|
||||
c3.546-1.95,8.775-4.697,11.61-7.356c0.089-0.089,0.799,0.178,0.799,0.443c-0.442,1.685-0.71,9.482-0.621,12.763v43.074
|
||||
c0,6.914,0.621,7.18,6.647,7.891c0.179,0,0.267,1.063,0,0.976C306.609,143.215,302.798,143.127,299.341,143.127z"/>
|
||||
<path d="M331.335,144.367c-11.081,0-18.172-8.687-18.172-18.17c0-10.016,7.269-19.41,19.146-19.41
|
||||
c11.078,0,18.17,8.687,18.17,18.167C350.479,134.972,343.21,144.367,331.335,144.367z M330.358,108.735
|
||||
c-7.18,0-10.813,6.56-10.813,13.918c0,12.318,5.495,19.765,13.738,19.765c7.18,0,10.726-6.561,10.726-13.915
|
||||
C344.009,116.182,338.513,108.735,330.358,108.735z"/>
|
||||
<path d="M405.336,116.182l-11.168,28.099c-0.177,0.44-1.064,0.44-1.241,0.087l-9.396-26.415l-10.369,26.328
|
||||
c-0.179,0.44-1.064,0.44-1.241,0.087l-11.168-28.186c-2.395-6.026-4.166-7.446-8.687-7.8c-0.177,0-0.266-1.062,0.088-0.974
|
||||
c1.686,0.264,6.382,0.354,8.863,0.354c3.458,0,6.472-0.09,8.953-0.354c0.266-0.088,0.089,0.974,0,0.974
|
||||
c-4.698,0.532-5.583,1.597-3.103,7.8l7.711,19.499l7.978-20.474c-1.95-5.229-3.723-6.472-7.978-6.825
|
||||
c-0.177,0-0.266-1.062,0.089-0.974c1.773,0.264,6.47,0.354,8.952,0.354c3.367,0,6.381-0.09,8.861-0.354
|
||||
c0.268-0.088,0.18,0.974,0,0.974c-4.695,0.532-5.672,1.597-3.455,7.8l6.736,19.145l7.355-19.145
|
||||
c2.395-6.026,1.685-7.268-3.102-7.8c-0.087,0-0.264-1.062,0-0.974c2.483,0.264,3.724,0.354,7.091,0.354
|
||||
c2.48,0,5.052-0.09,6.825-0.354c0.267-0.088,0.178,0.974,0.089,0.974C409.147,108.735,407.462,110.599,405.336,116.182z"/>
|
||||
<path d="M425.533,144.367c-3.812,0-7.532-1.063-10.189-2.572c-0.354-0.263-0.446-6.026-0.446-9.835
|
||||
c0-0.269,0.887-0.177,0.976-0.091c2.128,7.891,6.56,10.902,11.169,10.902c4.432,0,6.292-2.571,6.292-6.471
|
||||
c0-8.598-17.104-9.307-17.104-19.409c0-5.229,4.343-10.104,12.053-10.104c3.191,0,5.405,0.442,7.532,1.506
|
||||
c0.445,0.266,0.891,5.229,0.891,8.865c0,0.177-0.978,0.177-0.978,0.088c-1.594-5.317-5.496-8.953-9.306-8.953
|
||||
c-3.278,0-5.053,2.306-5.053,5.849c0,8.246,16.842,8.155,16.842,18.882C438.211,139.049,433.156,144.367,425.533,144.367z"/>
|
||||
<path d="M475.96,143.127c-3.456,0-6.114,0.088-8.595,0.443c-0.356,0.088-0.177-1.063,0-1.063c4.606-0.443,5.583-1.066,5.583-7.803
|
||||
v-13.293c0-7.801-1.862-11.079-6.472-11.079c-2.837,0-4.963,0.71-11.608,4.786v19.586c0,6.294,0.794,7.359,5.583,7.803
|
||||
c0.177,0,0.354,1.151,0,1.063c-1.771-0.267-5.675-0.443-8.154-0.443c-3.37,0-7.533,0.088-9.927,0.443
|
||||
c-0.355,0.088-0.178-1.063-0.089-1.063c6.114-0.623,6.735-0.889,6.735-7.803V91.985c0-5.851-1.063-6.914-5.673-5.408
|
||||
c-0.179,0.09-0.531-0.62-0.179-0.797c3.548-1.95,8.776-4.697,11.611-7.356c0.092-0.089,0.8,0.178,0.712,0.443
|
||||
c-0.443,1.685-0.62,9.482-0.535,12.763l-0.085,22.069c6.913-5.406,11.432-6.912,15.509-6.912c6.206,0,8.421,3.988,8.421,10.725
|
||||
v17.192c0,6.383,0.356,7.359,6.646,7.803c0.18,0,0.267,1.151,0,1.063C483.672,143.304,478.443,143.127,475.96,143.127z"/>
|
||||
<path d="M497.758,143.127c-3.367,0-7.269,0.088-9.749,0.443c-0.27,0.088-0.178-0.976,0-0.976c6.028-0.711,6.646-0.977,6.646-7.891
|
||||
v-14.976c0-5.852-1.062-6.915-5.669-5.319c-0.18,0-0.445-0.621-0.18-0.799c3.546-2.037,8.775-4.963,11.612-7.71
|
||||
c0.088-0.089,0.797,0.177,0.797,0.443c-0.442,1.771-0.709,9.838-0.62,13.028v15.332c0,6.914,0.62,7.18,6.646,7.891
|
||||
c0.18,0,0.266,1.063,0,0.976C504.758,143.215,501.126,143.127,497.758,143.127z M498.734,94.467c-1.951,0-3.546-1.772-3.546-3.724
|
||||
c0-2.038,1.595-3.898,3.724-3.898c2.04,0,3.634,1.771,3.634,3.722C502.546,92.604,500.952,94.467,498.734,94.467z"/>
|
||||
<path d="M527.979,144.367c-1.95,0-3.901-0.177-5.938-0.797v13.648c0,6.735,0.887,7.27,9.04,7.532c0.178,0,0.354,1.066,0,1.066
|
||||
c-2.482-0.178-9.132-0.178-11.611-0.089c-3.457,0.089-6.561,0.266-9.041,0.708c-0.266,0.092-0.177-0.975,0-0.975
|
||||
c5.584-0.797,5.672-1.242,5.672-8.065v-16.31c-0.886-0.443-1.86-1.063-2.923-1.681l2.923-4.522v-15.067
|
||||
c0-5.85-1.063-7.003-5.672-5.407c-0.088,0-0.531-0.621-0.177-0.799c3.546-2.037,7.889-5.229,10.726-7.888
|
||||
c0.087-0.089,0.709,0.266,0.709,0.532c0.263,1.507,0.178,4.875,0.263,6.913c4.435-3.812,9.044-5.584,12.676-5.584
|
||||
c8.601,0,15.069,7.534,15.069,16.396C549.693,133.644,540.298,144.367,527.979,144.367z M530.903,111.751
|
||||
c-3.014,0-5.761,0.974-8.863,2.836v23.399c3.721,2.129,7.798,3.101,11.078,3.101c6.026,0,10.106-5.672,10.106-15.155
|
||||
C543.225,116.537,537.106,111.751,530.903,111.751z"/>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 10 KiB |
BIN
web/deck/ucla.png
Normal file
|
After Width: | Height: | Size: 74 KiB |