A microsite explaining the word "Miriscient"

Try deploying with deploy.js

byjp.me 101ed84e

+813
+101
.github/deploy/deploy.js
··· 1 + const { 2 + PINATA_API_KEY, 3 + PINATA_API_SECRET, 4 + 5 + CLOUDFLARE_TOKEN, 6 + CLOUDFLARE_DNS_ZONE_ID, 7 + CLOUDFLARE_DNS_IDENTIFIER, 8 + 9 + GITHUB_RUN_ID, 10 + } = process.env 11 + 12 + const buildURL = `https://www.github.com/jphastings/miriscient.org/actions/runs/${GITHUB_RUN_ID}` 13 + const pinataPinName = 'miriscient.org' 14 + const domain = 'www.miriscient.org' 15 + 16 + const path = require('path') 17 + const pinata = require('@pinata/sdk')(PINATA_API_KEY, PINATA_API_SECRET) 18 + const cloudflare = require('cloudflare')({ token: CLOUDFLARE_TOKEN }) 19 + 20 + build().then(pinataPin).then(cloudflareUpdate).then(pinataUnpinPrevious).catch(console.error) 21 + 22 + async function build() { 23 + return path.join(__dirname, '..', '..', 'public') 24 + } 25 + 26 + async function pinataPin(rootPath) { 27 + console.log(`Pinning new version:`) 28 + const response = await pinata.pinFromFS(rootPath, { 29 + pinataMetadata: { 30 + name: pinataPinName, 31 + keyvalues: { buildURL } 32 + }, 33 + pinataOptions: { 34 + cidVerson: 1, 35 + wrapWithDirectory: false, 36 + customPinPolicy: { 37 + regions: [ 38 + { 39 + id: 'FRA1', 40 + desiredReplicationCount: 1 41 + }, 42 + { 43 + id: 'NYC1', 44 + desiredReplicationCount: 1 45 + } 46 + ] 47 + } 48 + } 49 + }) 50 + 51 + console.log(` ✅ ${response.IpfsHash}`) 52 + 53 + return response.IpfsHash 54 + } 55 + 56 + async function cloudflareUpdate(rootHash) { 57 + const txtRecord = `dnslink=/ipfs/${rootHash}` 58 + 59 + const opts = { 60 + type: 'TXT', 61 + name: `_dnslink.${domain}`, 62 + content: `dnslink=/ipfs/${rootHash}`, 63 + ttl: 1, 64 + } 65 + 66 + 67 + const response = await cloudflare.dnsRecords.edit( 68 + CLOUDFLARE_DNS_ZONE_ID, 69 + CLOUDFLARE_DNS_IDENTIFIER, 70 + opts 71 + ) 72 + 73 + if (!response.success) { 74 + throw new Error("Failed to update Cloudflare: " + response.errors) 75 + } 76 + 77 + return rootHash 78 + } 79 + 80 + async function pinataUnpinPrevious(rootHash) { 81 + console.log("Finding old versions to unpin:") 82 + const response = await pinata.pinList({ 83 + metadata: { name: pinataPinName } 84 + }) 85 + 86 + const deletes = [] 87 + 88 + response.rows.forEach((pin) => { 89 + if (pin.ipfs_pin_hash == rootHash) { 90 + return 91 + } 92 + 93 + deletes.push( 94 + pinata.unpin(pin.ipfs_pin_hash) 95 + .then(() => console.log(` 👍 Unpinned ${pin.ipfs_pin_hash}`)) 96 + .catch(() => console.log(` 👍 Already unpinned ${pin.ipfs_pin_hash}`)) 97 + ) 98 + }) 99 + 100 + return Promise.all(deletes) 101 + }
+521
.github/deploy/package-lock.json
··· 1 + { 2 + "name": "deploy", 3 + "requires": true, 4 + "lockfileVersion": 1, 5 + "dependencies": { 6 + "@pinata/sdk": { 7 + "version": "1.1.10", 8 + "resolved": "https://registry.npmjs.org/@pinata/sdk/-/sdk-1.1.10.tgz", 9 + "integrity": "sha512-9obonY9Hu9VI8Dhkz4GM9rFaPoaOdhnLM63vB4DbwY6EUQL/QBmXF6G6i8PLJNHggz6ucxGeynsSXjEgB4psSQ==", 10 + "dev": true, 11 + "requires": { 12 + "axios": "^0.18.1", 13 + "base-path-converter": "^1.0.2", 14 + "form-data": "^2.3.3", 15 + "is-ipfs": "^0.6.0", 16 + "recursive-fs": "^1.1.2" 17 + } 18 + }, 19 + "agent-base": { 20 + "version": "4.3.0", 21 + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-4.3.0.tgz", 22 + "integrity": "sha512-salcGninV0nPrwpGNn4VTXBb1SOuXQBiqbrNXoeizJsHrsL6ERFM2Ne3JUSBWRE6aeNJI2ROP/WEEIDUiDe3cg==", 23 + "dev": true, 24 + "requires": { 25 + "es6-promisify": "^5.0.0" 26 + } 27 + }, 28 + "asynckit": { 29 + "version": "0.4.0", 30 + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", 31 + "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=", 32 + "dev": true 33 + }, 34 + "autocreate": { 35 + "version": "1.2.0", 36 + "resolved": "https://registry.npmjs.org/autocreate/-/autocreate-1.2.0.tgz", 37 + "integrity": "sha1-UiFnmSxBcsFUeeX4jzSGpFKkDLo=", 38 + "dev": true 39 + }, 40 + "axios": { 41 + "version": "0.18.1", 42 + "resolved": "https://registry.npmjs.org/axios/-/axios-0.18.1.tgz", 43 + "integrity": "sha512-0BfJq4NSfQXd+SkFdrvFbG7addhYSBA2mQwISr46pD6E5iqkWg02RAs8vyTT/j0RTnoYmeXauBuSv1qKwR179g==", 44 + "dev": true, 45 + "requires": { 46 + "follow-redirects": "1.5.10", 47 + "is-buffer": "^2.0.2" 48 + } 49 + }, 50 + "base-path-converter": { 51 + "version": "1.0.2", 52 + "resolved": "https://registry.npmjs.org/base-path-converter/-/base-path-converter-1.0.2.tgz", 53 + "integrity": "sha512-51R8JiuXadknn6ouVUteOhDpmI3G5u5GqjruL7bPJpfxUHVgosaO5uPAvRP4FeR4VyyH4sSvsN78Ci6ouoRYqQ==", 54 + "dev": true 55 + }, 56 + "base-x": { 57 + "version": "3.0.8", 58 + "resolved": "https://registry.npmjs.org/base-x/-/base-x-3.0.8.tgz", 59 + "integrity": "sha512-Rl/1AWP4J/zRrk54hhlxH4drNxPJXYUaKffODVI53/dAsV4t9fBxyxYKAVPU1XBHxYwOWP9h9H0hM2MVw4YfJA==", 60 + "dev": true, 61 + "requires": { 62 + "safe-buffer": "^5.0.1" 63 + } 64 + }, 65 + "base64-js": { 66 + "version": "1.3.1", 67 + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.3.1.tgz", 68 + "integrity": "sha512-mLQ4i2QO1ytvGWFWmcngKO//JXAQueZvwEKtjgQFM4jIK0kU+ytMfplL8j+n5mspOfjHwoAg+9yhb7BwAHm36g==", 69 + "dev": true 70 + }, 71 + "bs58": { 72 + "version": "4.0.1", 73 + "resolved": "https://registry.npmjs.org/bs58/-/bs58-4.0.1.tgz", 74 + "integrity": "sha1-vhYedsNU9veIrkBx9j806MTwpCo=", 75 + "dev": true, 76 + "requires": { 77 + "base-x": "^3.0.2" 78 + } 79 + }, 80 + "buffer": { 81 + "version": "5.6.0", 82 + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.6.0.tgz", 83 + "integrity": "sha512-/gDYp/UtU0eA1ys8bOs9J6a+E/KWIY+DZ+Q2WESNUA0jFRsJOc0SNUO6xJ5SGA1xueg3NL65W6s+NY5l9cunuw==", 84 + "dev": true, 85 + "requires": { 86 + "base64-js": "^1.0.2", 87 + "ieee754": "^1.1.4" 88 + } 89 + }, 90 + "capture-stack-trace": { 91 + "version": "1.0.1", 92 + "resolved": "https://registry.npmjs.org/capture-stack-trace/-/capture-stack-trace-1.0.1.tgz", 93 + "integrity": "sha512-mYQLZnx5Qt1JgB1WEiMCf2647plpGeQ2NMR/5L0HNZzGQo4fuSPnK+wjfPnKZV0aiJDgzmWqqkV/g7JD+DW0qw==", 94 + "dev": true 95 + }, 96 + "cids": { 97 + "version": "0.7.5", 98 + "resolved": "https://registry.npmjs.org/cids/-/cids-0.7.5.tgz", 99 + "integrity": "sha512-zT7mPeghoWAu+ppn8+BS1tQ5qGmbMfB4AregnQjA/qHY3GC1m1ptI9GkWNlgeu38r7CuRdXB47uY2XgAYt6QVA==", 100 + "dev": true, 101 + "requires": { 102 + "buffer": "^5.5.0", 103 + "class-is": "^1.1.0", 104 + "multibase": "~0.6.0", 105 + "multicodec": "^1.0.0", 106 + "multihashes": "~0.4.15" 107 + } 108 + }, 109 + "class-is": { 110 + "version": "1.1.0", 111 + "resolved": "https://registry.npmjs.org/class-is/-/class-is-1.1.0.tgz", 112 + "integrity": "sha512-rhjH9AG1fvabIDoGRVH587413LPjTZgmDF9fOFCbFJQV4yuocX1mHxxvXI4g3cGwbVY9wAYIoKlg1N79frJKQw==", 113 + "dev": true 114 + }, 115 + "cloudflare": { 116 + "version": "2.7.0", 117 + "resolved": "https://registry.npmjs.org/cloudflare/-/cloudflare-2.7.0.tgz", 118 + "integrity": "sha512-yhroBpn2VBczFwiRLpyUc431XiWE+xNs8YvtjAsj1vEA1pVwhpje6BzgLW5iZbulmCuPX48lvX8HizeMWk713g==", 119 + "dev": true, 120 + "requires": { 121 + "autocreate": "^1.1.0", 122 + "es-class": "^2.1.1", 123 + "got": "^6.3.0", 124 + "https-proxy-agent": "^2.1.1", 125 + "object-assign": "^4.1.0", 126 + "should-proxy": "^1.0.4", 127 + "url-pattern": "^1.0.3" 128 + } 129 + }, 130 + "combined-stream": { 131 + "version": "1.0.8", 132 + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", 133 + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", 134 + "dev": true, 135 + "requires": { 136 + "delayed-stream": "~1.0.0" 137 + } 138 + }, 139 + "create-error-class": { 140 + "version": "3.0.2", 141 + "resolved": "https://registry.npmjs.org/create-error-class/-/create-error-class-3.0.2.tgz", 142 + "integrity": "sha1-Br56vvlHo/FKMP1hBnHUAbyot7Y=", 143 + "dev": true, 144 + "requires": { 145 + "capture-stack-trace": "^1.0.0" 146 + } 147 + }, 148 + "debug": { 149 + "version": "3.1.0", 150 + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", 151 + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", 152 + "dev": true, 153 + "requires": { 154 + "ms": "2.0.0" 155 + } 156 + }, 157 + "delayed-stream": { 158 + "version": "1.0.0", 159 + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", 160 + "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", 161 + "dev": true 162 + }, 163 + "duplexer3": { 164 + "version": "0.1.4", 165 + "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.4.tgz", 166 + "integrity": "sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI=", 167 + "dev": true 168 + }, 169 + "es-class": { 170 + "version": "2.1.1", 171 + "resolved": "https://registry.npmjs.org/es-class/-/es-class-2.1.1.tgz", 172 + "integrity": "sha1-bsIkO1oeNYHAt+7O4BMMnA1vsrc=", 173 + "dev": true 174 + }, 175 + "es6-promise": { 176 + "version": "4.2.8", 177 + "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-4.2.8.tgz", 178 + "integrity": "sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w==", 179 + "dev": true 180 + }, 181 + "es6-promisify": { 182 + "version": "5.0.0", 183 + "resolved": "https://registry.npmjs.org/es6-promisify/-/es6-promisify-5.0.0.tgz", 184 + "integrity": "sha1-UQnWLz5W6pZ8S2NQWu8IKRyKUgM=", 185 + "dev": true, 186 + "requires": { 187 + "es6-promise": "^4.0.3" 188 + } 189 + }, 190 + "follow-redirects": { 191 + "version": "1.5.10", 192 + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.5.10.tgz", 193 + "integrity": "sha512-0V5l4Cizzvqt5D44aTXbFZz+FtyXV1vrDN6qrelxtfYQKW0KO0W2T/hkE8xvGa/540LkZlkaUjO4ailYTFtHVQ==", 194 + "dev": true, 195 + "requires": { 196 + "debug": "=3.1.0" 197 + } 198 + }, 199 + "form-data": { 200 + "version": "2.5.1", 201 + "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.5.1.tgz", 202 + "integrity": "sha512-m21N3WOmEEURgk6B9GLOE4RuWOFf28Lhh9qGYeNlGq4VDXUlJy2th2slBNU8Gp8EzloYZOibZJ7t5ecIrFSjVA==", 203 + "dev": true, 204 + "requires": { 205 + "asynckit": "^0.4.0", 206 + "combined-stream": "^1.0.6", 207 + "mime-types": "^2.1.12" 208 + } 209 + }, 210 + "get-stream": { 211 + "version": "3.0.0", 212 + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", 213 + "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=", 214 + "dev": true 215 + }, 216 + "got": { 217 + "version": "6.7.1", 218 + "resolved": "https://registry.npmjs.org/got/-/got-6.7.1.tgz", 219 + "integrity": "sha1-JAzQV4WpoY5WHcG0S0HHY+8ejbA=", 220 + "dev": true, 221 + "requires": { 222 + "create-error-class": "^3.0.0", 223 + "duplexer3": "^0.1.4", 224 + "get-stream": "^3.0.0", 225 + "is-redirect": "^1.0.0", 226 + "is-retry-allowed": "^1.0.0", 227 + "is-stream": "^1.0.0", 228 + "lowercase-keys": "^1.0.0", 229 + "safe-buffer": "^5.0.1", 230 + "timed-out": "^4.0.0", 231 + "unzip-response": "^2.0.1", 232 + "url-parse-lax": "^1.0.0" 233 + } 234 + }, 235 + "https-proxy-agent": { 236 + "version": "2.2.4", 237 + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-2.2.4.tgz", 238 + "integrity": "sha512-OmvfoQ53WLjtA9HeYP9RNrWMJzzAz1JGaSFr1nijg0PVR1JaD/xbJq1mdEIIlxGpXp9eSe/O2LgU9DJmTPd0Eg==", 239 + "dev": true, 240 + "requires": { 241 + "agent-base": "^4.3.0", 242 + "debug": "^3.1.0" 243 + } 244 + }, 245 + "ieee754": { 246 + "version": "1.1.13", 247 + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.13.tgz", 248 + "integrity": "sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg==", 249 + "dev": true 250 + }, 251 + "ip-regex": { 252 + "version": "4.1.0", 253 + "resolved": "https://registry.npmjs.org/ip-regex/-/ip-regex-4.1.0.tgz", 254 + "integrity": "sha512-pKnZpbgCTfH/1NLIlOduP/V+WRXzC2MOz3Qo8xmxk8C5GudJLgK5QyLVXOSWy3ParAH7Eemurl3xjv/WXYFvMA==", 255 + "dev": true 256 + }, 257 + "is-buffer": { 258 + "version": "2.0.4", 259 + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.4.tgz", 260 + "integrity": "sha512-Kq1rokWXOPXWuaMAqZiJW4XxsmD9zGx9q4aePabbn3qCRGedtH7Cm+zV8WETitMfu1wdh+Rvd6w5egwSngUX2A==", 261 + "dev": true 262 + }, 263 + "is-ip": { 264 + "version": "3.1.0", 265 + "resolved": "https://registry.npmjs.org/is-ip/-/is-ip-3.1.0.tgz", 266 + "integrity": "sha512-35vd5necO7IitFPjd/YBeqwWnyDWbuLH9ZXQdMfDA8TEo7pv5X8yfrvVO3xbJbLUlERCMvf6X0hTUamQxCYJ9Q==", 267 + "dev": true, 268 + "requires": { 269 + "ip-regex": "^4.0.0" 270 + } 271 + }, 272 + "is-ipfs": { 273 + "version": "0.6.3", 274 + "resolved": "https://registry.npmjs.org/is-ipfs/-/is-ipfs-0.6.3.tgz", 275 + "integrity": "sha512-HyRot1dvLcxImtDqPxAaY1miO6WsiP/z7Yxpg2qpaLWv5UdhAPtLvHJ4kMLM0w8GSl8AFsVF23PHe1LzuWrUlQ==", 276 + "dev": true, 277 + "requires": { 278 + "bs58": "^4.0.1", 279 + "cids": "~0.7.0", 280 + "mafmt": "^7.0.0", 281 + "multiaddr": "^7.2.1", 282 + "multibase": "~0.6.0", 283 + "multihashes": "~0.4.13" 284 + } 285 + }, 286 + "is-redirect": { 287 + "version": "1.0.0", 288 + "resolved": "https://registry.npmjs.org/is-redirect/-/is-redirect-1.0.0.tgz", 289 + "integrity": "sha1-HQPd7VO9jbDzDCbk+V02/HyH3CQ=", 290 + "dev": true 291 + }, 292 + "is-retry-allowed": { 293 + "version": "1.2.0", 294 + "resolved": "https://registry.npmjs.org/is-retry-allowed/-/is-retry-allowed-1.2.0.tgz", 295 + "integrity": "sha512-RUbUeKwvm3XG2VYamhJL1xFktgjvPzL0Hq8C+6yrWIswDy3BIXGqCxhxkc30N9jqK311gVU137K8Ei55/zVJRg==", 296 + "dev": true 297 + }, 298 + "is-stream": { 299 + "version": "1.1.0", 300 + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", 301 + "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=", 302 + "dev": true 303 + }, 304 + "lowercase-keys": { 305 + "version": "1.0.1", 306 + "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz", 307 + "integrity": "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==", 308 + "dev": true 309 + }, 310 + "mafmt": { 311 + "version": "7.1.0", 312 + "resolved": "https://registry.npmjs.org/mafmt/-/mafmt-7.1.0.tgz", 313 + "integrity": "sha512-vpeo9S+hepT3k2h5iFxzEHvvR0GPBx9uKaErmnRzYNcaKb03DgOArjEMlgG4a9LcuZZ89a3I8xbeto487n26eA==", 314 + "dev": true, 315 + "requires": { 316 + "multiaddr": "^7.3.0" 317 + } 318 + }, 319 + "mime-db": { 320 + "version": "1.44.0", 321 + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.44.0.tgz", 322 + "integrity": "sha512-/NOTfLrsPBVeH7YtFPgsVWveuL+4SjjYxaQ1xtM1KMFj7HdxlBlxeyNLzhyJVx7r4rZGJAZ/6lkKCitSc/Nmpg==", 323 + "dev": true 324 + }, 325 + "mime-types": { 326 + "version": "2.1.27", 327 + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.27.tgz", 328 + "integrity": "sha512-JIhqnCasI9yD+SsmkquHBxTSEuZdQX5BuQnS2Vc7puQQQ+8yiP5AY5uWhpdv4YL4VM5c6iliiYWPgJ/nJQLp7w==", 329 + "dev": true, 330 + "requires": { 331 + "mime-db": "1.44.0" 332 + } 333 + }, 334 + "ms": { 335 + "version": "2.0.0", 336 + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", 337 + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", 338 + "dev": true 339 + }, 340 + "multiaddr": { 341 + "version": "7.5.0", 342 + "resolved": "https://registry.npmjs.org/multiaddr/-/multiaddr-7.5.0.tgz", 343 + "integrity": "sha512-GvhHsIGDULh06jyb6ev+VfREH9evJCFIRnh3jUt9iEZ6XDbyoisZRFEI9bMvK/AiR6y66y6P+eoBw9mBYMhMvw==", 344 + "dev": true, 345 + "requires": { 346 + "buffer": "^5.5.0", 347 + "cids": "~0.8.0", 348 + "class-is": "^1.1.0", 349 + "is-ip": "^3.1.0", 350 + "multibase": "^0.7.0", 351 + "varint": "^5.0.0" 352 + }, 353 + "dependencies": { 354 + "cids": { 355 + "version": "0.8.3", 356 + "resolved": "https://registry.npmjs.org/cids/-/cids-0.8.3.tgz", 357 + "integrity": "sha512-yoXTbV3llpm+EBGWKeL9xKtksPE/s6DPoDSY4fn8I8TEW1zehWXPSB0pwAXVDlLaOlrw+sNynj995uD9abmPhA==", 358 + "dev": true, 359 + "requires": { 360 + "buffer": "^5.6.0", 361 + "class-is": "^1.1.0", 362 + "multibase": "^1.0.0", 363 + "multicodec": "^1.0.1", 364 + "multihashes": "^1.0.1" 365 + }, 366 + "dependencies": { 367 + "multibase": { 368 + "version": "1.0.1", 369 + "resolved": "https://registry.npmjs.org/multibase/-/multibase-1.0.1.tgz", 370 + "integrity": "sha512-KcCxpBVY8fdVKu4dJMAahq4F/2Z/9xqEjIiR7PiMe7LRGeorFn2NLmicN6nLBCqQvft6MG2Lc9X5P0IdyvnxEw==", 371 + "dev": true, 372 + "requires": { 373 + "base-x": "^3.0.8", 374 + "buffer": "^5.5.0" 375 + } 376 + } 377 + } 378 + }, 379 + "multibase": { 380 + "version": "0.7.0", 381 + "resolved": "https://registry.npmjs.org/multibase/-/multibase-0.7.0.tgz", 382 + "integrity": "sha512-TW8q03O0f6PNFTQDvh3xxH03c8CjGaaYrjkl9UQPG6rz53TQzzxJVCIWVjzcbN/Q5Y53Zd0IBQBMVktVgNx4Fg==", 383 + "dev": true, 384 + "requires": { 385 + "base-x": "^3.0.8", 386 + "buffer": "^5.5.0" 387 + } 388 + }, 389 + "multihashes": { 390 + "version": "1.0.1", 391 + "resolved": "https://registry.npmjs.org/multihashes/-/multihashes-1.0.1.tgz", 392 + "integrity": "sha512-S27Tepg4i8atNiFaU5ZOm3+gl3KQlUanLs/jWcBxQHFttgq+5x1OgbQmf2d8axJ/48zYGBd/wT9d723USMFduw==", 393 + "dev": true, 394 + "requires": { 395 + "buffer": "^5.6.0", 396 + "multibase": "^1.0.1", 397 + "varint": "^5.0.0" 398 + }, 399 + "dependencies": { 400 + "multibase": { 401 + "version": "1.0.1", 402 + "resolved": "https://registry.npmjs.org/multibase/-/multibase-1.0.1.tgz", 403 + "integrity": "sha512-KcCxpBVY8fdVKu4dJMAahq4F/2Z/9xqEjIiR7PiMe7LRGeorFn2NLmicN6nLBCqQvft6MG2Lc9X5P0IdyvnxEw==", 404 + "dev": true, 405 + "requires": { 406 + "base-x": "^3.0.8", 407 + "buffer": "^5.5.0" 408 + } 409 + } 410 + } 411 + } 412 + } 413 + }, 414 + "multibase": { 415 + "version": "0.6.1", 416 + "resolved": "https://registry.npmjs.org/multibase/-/multibase-0.6.1.tgz", 417 + "integrity": "sha512-pFfAwyTjbbQgNc3G7D48JkJxWtoJoBMaR4xQUOuB8RnCgRqaYmWNFeJTTvrJ2w51bjLq2zTby6Rqj9TQ9elSUw==", 418 + "dev": true, 419 + "requires": { 420 + "base-x": "^3.0.8", 421 + "buffer": "^5.5.0" 422 + } 423 + }, 424 + "multicodec": { 425 + "version": "1.0.4", 426 + "resolved": "https://registry.npmjs.org/multicodec/-/multicodec-1.0.4.tgz", 427 + "integrity": "sha512-NDd7FeS3QamVtbgfvu5h7fd1IlbaC4EQ0/pgU4zqE2vdHCmBGsUa0TiM8/TdSeG6BMPC92OOCf8F1ocE/Wkrrg==", 428 + "dev": true, 429 + "requires": { 430 + "buffer": "^5.6.0", 431 + "varint": "^5.0.0" 432 + } 433 + }, 434 + "multihashes": { 435 + "version": "0.4.21", 436 + "resolved": "https://registry.npmjs.org/multihashes/-/multihashes-0.4.21.tgz", 437 + "integrity": "sha512-uVSvmeCWf36pU2nB4/1kzYZjsXD9vofZKpgudqkceYY5g2aZZXJ5r9lxuzoRLl1OAp28XljXsEJ/X/85ZsKmKw==", 438 + "dev": true, 439 + "requires": { 440 + "buffer": "^5.5.0", 441 + "multibase": "^0.7.0", 442 + "varint": "^5.0.0" 443 + }, 444 + "dependencies": { 445 + "multibase": { 446 + "version": "0.7.0", 447 + "resolved": "https://registry.npmjs.org/multibase/-/multibase-0.7.0.tgz", 448 + "integrity": "sha512-TW8q03O0f6PNFTQDvh3xxH03c8CjGaaYrjkl9UQPG6rz53TQzzxJVCIWVjzcbN/Q5Y53Zd0IBQBMVktVgNx4Fg==", 449 + "dev": true, 450 + "requires": { 451 + "base-x": "^3.0.8", 452 + "buffer": "^5.5.0" 453 + } 454 + } 455 + } 456 + }, 457 + "object-assign": { 458 + "version": "4.1.1", 459 + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", 460 + "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", 461 + "dev": true 462 + }, 463 + "prepend-http": { 464 + "version": "1.0.4", 465 + "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-1.0.4.tgz", 466 + "integrity": "sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw=", 467 + "dev": true 468 + }, 469 + "recursive-fs": { 470 + "version": "1.1.2", 471 + "resolved": "https://registry.npmjs.org/recursive-fs/-/recursive-fs-1.1.2.tgz", 472 + "integrity": "sha512-QPFEt5EwzwlHoqYsZc+NkUSyDTQf1Hvq7c/kpQJHi77OSCAiDXI3wfB0J04ZG+ekGHmv37mdR8MDPEshD3/RlQ==", 473 + "dev": true 474 + }, 475 + "safe-buffer": { 476 + "version": "5.2.1", 477 + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", 478 + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", 479 + "dev": true 480 + }, 481 + "should-proxy": { 482 + "version": "1.0.4", 483 + "resolved": "https://registry.npmjs.org/should-proxy/-/should-proxy-1.0.4.tgz", 484 + "integrity": "sha1-yAWlAav2lTlgBjSAnmL78ji6NeQ=", 485 + "dev": true 486 + }, 487 + "timed-out": { 488 + "version": "4.0.1", 489 + "resolved": "https://registry.npmjs.org/timed-out/-/timed-out-4.0.1.tgz", 490 + "integrity": "sha1-8y6srFoXW+ol1/q1Zas+2HQe9W8=", 491 + "dev": true 492 + }, 493 + "unzip-response": { 494 + "version": "2.0.1", 495 + "resolved": "https://registry.npmjs.org/unzip-response/-/unzip-response-2.0.1.tgz", 496 + "integrity": "sha1-0vD3N9FrBhXnKmk17QQhRXLVb5c=", 497 + "dev": true 498 + }, 499 + "url-parse-lax": { 500 + "version": "1.0.0", 501 + "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-1.0.0.tgz", 502 + "integrity": "sha1-evjzA2Rem9eaJy56FKxovAYJ2nM=", 503 + "dev": true, 504 + "requires": { 505 + "prepend-http": "^1.0.1" 506 + } 507 + }, 508 + "url-pattern": { 509 + "version": "1.0.3", 510 + "resolved": "https://registry.npmjs.org/url-pattern/-/url-pattern-1.0.3.tgz", 511 + "integrity": "sha1-BAkpJHGyTyPFDWWkeTF5PStaz8E=", 512 + "dev": true 513 + }, 514 + "varint": { 515 + "version": "5.0.0", 516 + "resolved": "https://registry.npmjs.org/varint/-/varint-5.0.0.tgz", 517 + "integrity": "sha1-2Ca4n3SQcy+rwMDtaT7Uddyynr8=", 518 + "dev": true 519 + } 520 + } 521 + }
+9
.github/deploy/package.json
··· 1 + { 2 + "name": "deploy", 3 + "description": "Deploys the contents of this repo to miriscient.org", 4 + "main": "deploy.js", 5 + "devDependencies": { 6 + "@pinata/sdk": "^1.1.10", 7 + "cloudflare": "^2.7.0" 8 + } 9 + }
+22
.github/workflows/deploy.yml
··· 1 + name: Deploy to IPFS 2 + on: 3 + push: 4 + branches: 5 + - master 6 + 7 + jobs: 8 + tag: 9 + runs-on: ubuntu-latest 10 + steps: 11 + - uses: actions/checkout@v2 12 + - name: Use Node.js 13 + uses: actions/setup-node@v1 14 + with: 15 + node-version: '12.x' 16 + - run: cd .github/deploy && npm install --silent && node --no-warnings deploy.js 17 + env: 18 + PINATA_API_KEY: ${{ secrets.PINATA_API_KEY }} 19 + PINATA_API_SECRET: ${{ secrets.PINATA_API_SECRET }} 20 + CLOUDFLARE_TOKEN: ${{ secrets.CLOUDFLARE_TOKEN }} 21 + CLOUDFLARE_DNS_ZONE_ID: ${{ secrets.CLOUDFLARE_DNS_ZONE_ID }} 22 + CLOUDFLARE_DNS_IDENTIFIER: ${{ secrets.CLOUDFLARE_DNS_IDENTIFIER }}
+1
.gitignore
··· 1 + node_modules
+18
README.md
··· 1 + # miriscient.org 2 + 3 + A simple website for defining a word I created to express a human attribute I admire. 4 + 5 + ## Build & deploy 6 + 7 + This static website is hosted with [IPFS](https://ipfs.io), pinned by [pinata.cloud](https://pinata.cloud), and fronted by [Cloudflare](https://www.cloudflare-ipfs.com). IPFS is a distributed network, so anyone can help to host by running: 8 + 9 + ``` 10 + $ ipfs pin add /ipns/www.miriscient.org 11 + ``` 12 + 13 + A merge to the `main` branch of this repo will trigger a Github Action that will: 14 + 15 + 1. Compile the site 16 + 2. Add the resulting files to a temporary IPFS instance 17 + 3. Pin the resulting IPFS multihash to pinata.cloud 18 + 4. Update Cloudflare's DNS entry to point to the new hash
+109
public/css/define.css
··· 1 + @font-face { 2 + font-family: 'EB Garamond'; 3 + src: url('../fonts/EBGaramond-Italic.woff') format('woff'); 4 + font-weight: normal; 5 + font-style: italic; 6 + } 7 + 8 + @font-face { 9 + font-family: 'EB Garamond'; 10 + src: url('../fonts/EBGaramond-Bold.woff') format('woff'); 11 + font-weight: bold; 12 + font-style: normal; 13 + } 14 + 15 + @font-face { 16 + font-family: 'EB Garamond'; 17 + src: url('../fonts/EBGaramond-Regular.woff') format('woff'); 18 + font-weight: normal; 19 + font-style: normal; 20 + } 21 + 22 + 23 + body { 24 + display: -webkit-box; 25 + display: -moz-box; 26 + display: -webkit-flex; 27 + display: flex; 28 + -webkit-box-flex-direction: row; 29 + -moz-box-flex-direction: row; 30 + -webkit-flex-direction: row; 31 + flex-direction: row; 32 + position: fixed; 33 + top: 0; 34 + right: 0; 35 + bottom: 0; 36 + left: 0; 37 + width: 100%; 38 + height: 100%; 39 + 40 + font-size: 1.5em; 41 + font-family: 'EB Garamond', serif; 42 + } 43 + 44 + a { 45 + color: inherit; 46 + text-decoration: none; 47 + border-bottom: 1px dotted #999; 48 + } 49 + 50 + a:hover { 51 + border-bottom: 1px solid #444; 52 + } 53 + 54 + p.header { 55 + line-height: 1em; 56 + margin-top: 0; 57 + } 58 + 59 + .definition { 60 + width: 95%; 61 + max-width: 480px; 62 + margin: auto; 63 + } 64 + 65 + .word { 66 + font-size: 1.4em; 67 + } 68 + .type { 69 + font-style: italic; 70 + font-size: 0.8em; 71 + color: #555; 72 + } 73 + .pronunciation { 74 + font-size: 0.7em; 75 + color: #777; 76 + } 77 + .pronunciation .ipa { 78 + font-family: 'Verdana'; 79 + font-size: 0.7em; 80 + } 81 + 82 + .example { 83 + font-size: 0.85em; 84 + padding-left: 0.6em; 85 + border-left: 0.2em solid #efefef; 86 + color: #222; 87 + } 88 + 89 + .origin { 90 + font-style: italic; 91 + color: #555; 92 + font-size: 0.7em; 93 + } 94 + 95 + .explain { 96 + font-size: 0.7em; 97 + color: #777; 98 + } 99 + 100 + .logo { 101 + position: fixed; 102 + bottom: 1em; 103 + right: 1em; 104 + width:5em; 105 + opacity:0.5; 106 + } 107 + .logo:hover { 108 + opacity: 1; 109 + }
public/fonts/EBGaramond-Bold.woff

This is a binary file and will not be displayed.

public/fonts/EBGaramond-Italic.woff

This is a binary file and will not be displayed.

public/fonts/EBGaramond-Regular.woff

This is a binary file and will not be displayed.

+31
public/index.html
··· 1 + <!DOCTYPE html> 2 + <html> 3 + <head> 4 + <meta charset="utf-8"> 5 + <meta http-equiv="X-UA-Compatible" content="IE=edge"> 6 + <title>Miriscient</title> 7 + <meta name="description" content="Of people; those in awe and wonder of all they learn and discover."> 8 + <meta property="og:title" content="Miriscient"> 9 + <meta property="og:description" content="Of people; those in awe and wonder of all they learn and discover."> 10 + <meta property="og:image" content="https://www.miriscient.org/miriscient.png"> 11 + <meta property="og:url" content="https://www.miriscient.org/"> 12 + <meta name="twitter:card" content="summary_large_image"> 13 + <link rel="stylesheet" href="css/define.css"> 14 + </head> 15 + <body> 16 + <div class="definition"> 17 + <p class="header"> 18 + <strong class="word">miriscient</strong> <span class="type">(adjective)</span><br/> 19 + <span class="pronunciation">mi·RI·see·ent, <span class="ipa">/mɪ'ɹɪsiːɛnt/</span></span> 20 + </p> 21 + <p>Of people; those in awe and wonder of all they learn and discover.</p> 22 + 23 + <p class="example">Sir David Attenborough's <a href="https://www.youtube.com/watch?v=iYXBJmrsxZU" target="_blank">constant amazement at nature</a> shows he is a deeply miriscient person.</p> 24 + 25 + <p class="origin">Roots: Mirus (latin): marvelous, wonderful, amazing; Sméyros (proto-indo-european): laughing/smiling; Scio/Scient (latin): to know, to be aware.</p> 26 + 27 + <p class="explain"><a href="https://medium.com/miriscient/miriscience-5e342ff198f5">Learn more about why this word exists.</a></p> 28 + </div> 29 + <img class="logo" src="miriscient.svg"/> 30 + </body> 31 + </html>
public/miriscient.png

This is a binary file and will not be displayed.

+1
public/miriscient.svg
··· 1 + <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 341 231.01"><defs><clipPath id="a" transform="translate(-12 -12.19)"><path d="M145 77c3.33 0 6 14 8.7 15.87s17.21.06 18.24 3.14-11.85 9.84-12.88 12.92 5.29 15.92 2.59 17.82-13.32-7.9-16.65-7.9-13.95 9.81-16.65 7.9 3.65-14.75 2.59-17.82S117 99.09 118.06 96s15.54-1.23 18.24-3.14S141.66 77 145 77zm95.24 58.68h-18.83a4.18 4.18 0 1 1 0-8.36h18.83a4.18 4.18 0 1 1 0 8.36zm-4.18 26.78a4.39 4.39 0 0 1-3.77 2.1 3.77 3.77 0 0 1-2.09-.42l-16.32-9.63a4.62 4.62 0 0 1-1.67-5.85c.83-2.1 3.76-2.52 5.86-1.68l16.31 9.63a4.22 4.22 0 0 1 1.68 5.85zm-22.6 23a3.81 3.81 0 0 1-2.09.41 5 5 0 0 1-3.76-2.09l-9.61-16.3a4.31 4.31 0 0 1 7.53-4.18l9.63 16.32a4.24 4.24 0 0 1-1.7 5.86zm-26.78 3.76a4.18 4.18 0 1 1-8.36 0v-18.81a4.18 4.18 0 1 1 8.36 0zm-20.08-21.74l-9.21 16.32a4.37 4.37 0 0 1-3.76 2.09 3.81 3.81 0 0 1-2.09-.41 4.64 4.64 0 0 1-1.68-5.86l9.63-16.32a4.62 4.62 0 0 1 5.85-1.67 4.48 4.48 0 0 1 1.26 5.85zm-34.31-2.92a5 5 0 0 1-3.77-2.1 4.23 4.23 0 0 1 1.68-5.85l16.32-9.61a4.31 4.31 0 0 1 4.18 7.53l-16.32 9.63a3.12 3.12 0 0 1-2.09.4zm81.59-56.07l16.32-9.63a4.31 4.31 0 1 1 4.18 7.53L218.07 116a3.79 3.79 0 0 1-2.1.42 5 5 0 0 1-3.76-2.1 5.16 5.16 0 0 1 1.67-5.83zM182.5 52a79.5 79.5 0 1 0 79.5 79.5A79.47 79.47 0 0 0 182.5 52z"/></clipPath><clipPath transform="translate(-12 -12.19)"><path d="M0 0h365v256H0z"/></clipPath><clipPath id="b" transform="translate(-12 -12.19)"><path d="M256 50.82l4.54-11.94c43 21.18 72.5 57.75 86.88 90.67a5.38 5.38 0 0 1 0 5c-15.05 34.74-46.62 73.47-92.94 94.25l-4.72-11.69c41.67-18.79 70.45-53.18 85-84.66-13.86-29.83-40.5-62.34-78.76-81.63zm-146.9 0c-38.31 19.29-64.95 51.8-78.8 81.68 14.59 31.48 43.37 65.87 85 84.66l-4.76 11.78c-46.29-20.63-77.86-59.05-92.9-93.49a5.38 5.38 0 0 1 0-5C32 97.18 61.51 60.33 104.55 39z"/></clipPath></defs><g clip-path="url(#a)"><path d="M86 34.81h169v169H86z"/></g><g clip-path="url(#b)"><path d="M0 21.69h341v200.06H0z"/></g><g><path d="M126.84 222.79l-3.71 10.29-2.38-.86 3.72-10.29zm-1.19-5.26a1.57 1.57 0 0 1 .85-.92 1.63 1.63 0 0 1 2.18.79 1.52 1.52 0 0 1 .06 1.25 1.58 1.58 0 0 1-.85.94 1.65 1.65 0 0 1-2.24-2.06zM129.32 223.61l2.43.73-.3 1a4.16 4.16 0 0 1 3.24-.4 3.8 3.8 0 0 1 2.51 2 4.91 4.91 0 0 1-.09 3.46l-1.93 6.42-2.43-.73 1.76-5.85a4 4 0 0 0 .22-2.27 1.83 1.83 0 0 0-1.35-1.06 2 2 0 0 0-1.95.28 5.75 5.75 0 0 0-1.32 2.59l-1.52 5.06-2.43-.74zM155 229.83l2.5.44-1.89 10.73-2.5-.44.2-1.13a4.86 4.86 0 0 1-7-1.41 6.06 6.06 0 0 1-.72-4.37 5.84 5.84 0 0 1 2.16-3.78 4.71 4.71 0 0 1 3.91-1 4.65 4.65 0 0 1 3.1 2.15zm-6.85 4.31a3.79 3.79 0 0 0 .38 2.66 2.8 2.8 0 0 0 2 1.37 2.94 2.94 0 0 0 2.41-.56 4.16 4.16 0 0 0 .88-5 3 3 0 0 0-4.36-.76 3.67 3.67 0 0 0-1.3 2.29zM161.28 230.71l2.31 6.47 3.71-7 2.47 7.48 3.36-6 2.87.34-6.72 11.22-2.43-7.28-3.67 6.75-4.68-12.2zM186.35 238h-7.84a3.31 3.31 0 0 0 .86 2.15 2.71 2.71 0 0 0 2 .8 2.64 2.64 0 0 0 1.56-.44 6.31 6.31 0 0 0 1.39-1.66l2.13 1.2a8.37 8.37 0 0 1-1.05 1.44 5.39 5.39 0 0 1-1.19 1 4.39 4.39 0 0 1-1.36.56 6.59 6.59 0 0 1-1.58.18 5.18 5.18 0 0 1-3.93-1.59 5.93 5.93 0 0 1-1.46-4.21 6.06 6.06 0 0 1 1.46-4.2 5.48 5.48 0 0 1 7.66 0 6 6 0 0 1 1.37 4.24zm-2.59-2a2.62 2.62 0 0 0-3.4-1.89 2.31 2.31 0 0 0-.74.4 2.47 2.47 0 0 0-.57.63 2.67 2.67 0 0 0-.36.84zM195.05 237a5.46 5.46 0 0 1 1.27-4.19 6 6 0 0 1 8.24-.85 5.84 5.84 0 0 1 .85 8.18 5.73 5.73 0 0 1-4 2.08 5.54 5.54 0 0 1-4.28-1.24 5.69 5.69 0 0 1-2.08-3.98zm2.58-.23a3.65 3.65 0 0 0 1.14 2.49 3.41 3.41 0 0 0 4.71-.48 4.09 4.09 0 0 0-.53-5.07 3.35 3.35 0 0 0-4.69.49 3.48 3.48 0 0 0-.63 2.52zM211.08 232l1.39 8.47-2.5.41-1.4-8.47-.88.15-.39-2.33.89-.15-.69-4.16a4.61 4.61 0 0 1 .24-3 3.5 3.5 0 0 1 2.64-1.64 5 5 0 0 1 1.74.11l.42 2.55-.28-.09a3 3 0 0 0-1.39-.19.9.9 0 0 0-.82.62 4.43 4.43 0 0 0 .06 1.83l.59 3.56 2.71-.44.38 2.32zM228.48 225.52l2.45-.66 2.85 10.57-2.46.65L231 235a4.86 4.86 0 0 1-6.91 1.67 6.07 6.07 0 0 1-2.51-3.65 5.86 5.86 0 0 1 .36-4.34 4.71 4.71 0 0 1 3.13-2.54 4.64 4.64 0 0 1 3.71.63zm-4.38 6.81a3.86 3.86 0 0 0 1.48 2.25 2.74 2.74 0 0 0 2.37.4 2.9 2.9 0 0 0 1.94-1.52 4.17 4.17 0 0 0-1.32-4.9 2.87 2.87 0 0 0-2.43-.36 2.77 2.77 0 0 0-1.84 1.52 3.63 3.63 0 0 0-.2 2.61zM233.27 215.71l6 18-2.4.79-6-18zM238.07 214l6.55 17.8-2.37.87-6.55-17.8zM114.29 33.36l3.32-1.16.46 1.33a7.42 7.42 0 0 1 1.17-1.93 4.19 4.19 0 0 1 1.68-1 4.66 4.66 0 0 1 4.6.78 5.25 5.25 0 0 1 3.49-3.6q4.86-1.7 6.91 4.2l3.08 8.88-3.32 1.14-2.78-8a6.6 6.6 0 0 0-1.52-2.75 1.94 1.94 0 0 0-2-.28 2.28 2.28 0 0 0-1.64 1.73 6.92 6.92 0 0 0 .53 3.54l2.58 7.42-3.33 1.16-2.77-7.93q-1.34-3.84-3.55-3.07a2.37 2.37 0 0 0-1.68 1.76 7 7 0 0 0 .51 3.53l2.59 7.42-3.32 1.16zM137.83 18.77a2.18 2.18 0 0 1 .29-1.7 2.29 2.29 0 0 1 3.15-.74 2.16 2.16 0 0 1 1 1.42 2.19 2.19 0 0 1-.28 1.73 2.16 2.16 0 0 1-1.42 1 2.19 2.19 0 0 1-1.73-.28 2.26 2.26 0 0 1-1.01-1.43zm5.38 5.23l3.45 14.82-3.43.8-3.45-14.83zM148.54 23l3.47-.57.22 1.34a6.92 6.92 0 0 1 1.47-1.65 3.87 3.87 0 0 1 1.72-.68 5.62 5.62 0 0 1 3 .42l-1.06 3.43a3.43 3.43 0 0 0-2-.39c-1.89.32-2.6 1.9-2.12 4.76l1.29 7.78L151 38zM160.63 14.69a2.14 2.14 0 0 1 .51-1.65 2.28 2.28 0 0 1 3.21-.33 2.14 2.14 0 0 1 .83 1.53 2.29 2.29 0 0 1-2 2.52 2.24 2.24 0 0 1-1.69-.51 2.21 2.21 0 0 1-.86-1.56zm4.66 5.89l1.53 15.14-3.49.35-1.54-15.14zM179.62 22.46l-2.84 1.65c-.5-.91-1.08-1.36-1.76-1.34a1.21 1.21 0 0 0-.82.36 1.08 1.08 0 0 0-.31.83q0 .87 2.1 1.65a12.3 12.3 0 0 1 3.84 2.08 3.78 3.78 0 0 1 1.08 2.69 4.8 4.8 0 0 1-1.49 3.75 5.82 5.82 0 0 1-9.31-2l2.94-1.5a6.32 6.32 0 0 0 1 1.35 2.18 2.18 0 0 0 1.55.54c1.19 0 1.76-.61 1.72-1.69 0-.63-.51-1.19-1.44-1.7l-1.08-.47-1.1-.48a6.42 6.42 0 0 1-2.21-1.42 3.67 3.67 0 0 1-.89-2.42 4.35 4.35 0 0 1 1.24-3.34 4.77 4.77 0 0 1 3.33-1.42 4.61 4.61 0 0 1 4.45 2.88zM196.71 21.08l-.21 4.67a8.5 8.5 0 0 0-2.06-2.12 4.15 4.15 0 0 0-2.18-.65 4.31 4.31 0 0 0-3.35 1.24 4.86 4.86 0 0 0-1.47 3.42 5 5 0 0 0 1.11 3.57 4.28 4.28 0 0 0 3.2 1.52 4.43 4.43 0 0 0 2.26-.45 8.79 8.79 0 0 0 2.29-2l-.21 4.72a9.2 9.2 0 0 1-4.32.91 8.15 8.15 0 0 1-5.8-2.54 7.59 7.59 0 0 1-2.12-5.8 7.72 7.72 0 0 1 2.66-5.64 8.14 8.14 0 0 1 6-2.08 8.84 8.84 0 0 1 4.2 1.23zM204.68 21.22L203 36.33l-3.49-.4 1.73-15.12zm-3.3-6.75a2.24 2.24 0 0 1 .85-1.51 2.29 2.29 0 0 1 3.7 2 2.3 2.3 0 0 1-2.53 2 2.32 2.32 0 0 1-2-2.56zM222.25 33l-10.7-2.1a4.65 4.65 0 0 0 .62 3.17 3.75 3.75 0 0 0 2.51 1.6 3.64 3.64 0 0 0 2.25-.19 9 9 0 0 0 2.33-1.9l2.59 2.19a11.23 11.23 0 0 1-1.85 1.72 7.74 7.74 0 0 1-1.87 1 6.85 6.85 0 0 1-2 .41 9.5 9.5 0 0 1-2.21-.18 7.17 7.17 0 0 1-4.95-3.2 8.22 8.22 0 0 1-.89-6.13 8.42 8.42 0 0 1 3.08-5.35 6.89 6.89 0 0 1 5.7-1.04 6.82 6.82 0 0 1 4.8 3.12 8.4 8.4 0 0 1 .77 6.15zm-3-3.51a3.37 3.37 0 0 0-2.94-3.45 3.87 3.87 0 0 0-1.22 0 3.53 3.53 0 0 0-1.11.36 3.63 3.63 0 0 0-.95.71 4 4 0 0 0-.71 1.06zM229.22 26.15l3.37 1.07-.42 1.34a5.74 5.74 0 0 1 4.51-.5 5.24 5.24 0 0 1 3.44 2.84c.53 1.17.48 2.77-.17 4.82l-2.81 8.89-3.37-1.06 2.56-8.11a5.53 5.53 0 0 0 .34-3.15 2.51 2.51 0 0 0-1.85-1.5 2.72 2.72 0 0 0-2.72.35 8 8 0 0 0-1.88 3.59l-2.21 7-3.37-1.06zM249.19 36.45l-4.54 11-3.25-1.34 4.53-11-1.39-.57 1.25-3 1.39.57 2.12-5.16 3.25 1.34-2.12 5.16 2.53 1-1.25 3z" transform="translate(-12 -12.19)"/></g></svg>