@ember-data-mirror/request 5.4.0-beta.9 → 5.4.1-beta.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (37) hide show
  1. package/LICENSE.md +19 -7
  2. package/README.md +12 -19
  3. package/dist/{debug-DGStaRpE.js → debug-nHWzWIMX.js} +34 -12
  4. package/dist/debug-nHWzWIMX.js.map +1 -0
  5. package/dist/fetch.js +2 -4
  6. package/dist/fetch.js.map +1 -1
  7. package/dist/index.js +44 -30
  8. package/dist/index.js.map +1 -1
  9. package/logos/NCC-1701-a-blue.svg +4 -0
  10. package/logos/NCC-1701-a-gold.svg +4 -0
  11. package/logos/NCC-1701-a-gold_100.svg +1 -0
  12. package/logos/NCC-1701-a-gold_base-64.txt +1 -0
  13. package/logos/NCC-1701-a.svg +4 -0
  14. package/logos/README.md +4 -0
  15. package/logos/docs-badge.svg +2 -0
  16. package/logos/ember-data-logo-dark.svg +12 -0
  17. package/logos/ember-data-logo-light.svg +12 -0
  18. package/logos/github-header.svg +444 -0
  19. package/logos/social1.png +0 -0
  20. package/logos/social2.png +0 -0
  21. package/logos/warp-drive-logo-dark.svg +4 -0
  22. package/logos/warp-drive-logo-gold.svg +4 -0
  23. package/package.json +33 -32
  24. package/unstable-preview-types/-private/context.d.ts +6 -1
  25. package/unstable-preview-types/-private/context.d.ts.map +1 -1
  26. package/unstable-preview-types/-private/future.d.ts.map +1 -1
  27. package/unstable-preview-types/-private/manager.d.ts +19 -7
  28. package/unstable-preview-types/-private/manager.d.ts.map +1 -1
  29. package/unstable-preview-types/-private/types.d.ts +25 -3
  30. package/unstable-preview-types/-private/types.d.ts.map +1 -1
  31. package/unstable-preview-types/-private/utils.d.ts +2 -2
  32. package/unstable-preview-types/-private/utils.d.ts.map +1 -1
  33. package/unstable-preview-types/fetch.d.ts +12 -0
  34. package/unstable-preview-types/fetch.d.ts.map +1 -1
  35. package/unstable-preview-types/index.d.ts +4 -4
  36. package/unstable-preview-types/index.d.ts.map +1 -1
  37. package/dist/debug-DGStaRpE.js.map +0 -1
package/dist/index.js CHANGED
@@ -1,7 +1,8 @@
1
+ import { setLogging, getRuntimeConfig } from '@warp-drive-mirror/core-types/runtime';
1
2
  import { macroCondition, getGlobalConfig, importSync } from '@embroider/macros';
2
3
  import { peekUniversalTransient, setUniversalTransient } from '@warp-drive-mirror/core-types/-private';
3
- import { I as IS_CACHE_HANDLER, a as assertValidRequest, e as executeNextHandler, g as getRequestResult, u as upgradePromise, s as setPromiseResult, c as clearRequestResult } from "./debug-DGStaRpE.js";
4
- export { b as createDeferred, d as getPromiseResult } from "./debug-DGStaRpE.js";
4
+ import { I as IS_CACHE_HANDLER, a as assertValidRequest, e as executeNextHandler, g as getRequestResult, u as upgradePromise, s as setPromiseResult, c as clearRequestResult } from "./debug-nHWzWIMX.js";
5
+ export { b as createDeferred, d as getPromiseResult } from "./debug-nHWzWIMX.js";
5
6
 
6
7
  /* eslint-disable no-irregular-whitespace */
7
8
  /**
@@ -59,8 +60,8 @@ import Fetch from '@ember-data-mirror/request/fetch';
59
60
  import { apiUrl } from './config';
60
61
 
61
62
  // ... create manager and add our Fetch handler
62
- const manager = new RequestManager();
63
- manager.use([Fetch]);
63
+ const manager = new RequestManager()
64
+ .use([Fetch]);
64
65
 
65
66
  // ... execute a request
66
67
  const response = await manager.request({
@@ -388,13 +389,9 @@ import RequestManager from '@ember-data-mirror/request';
388
389
  import Fetch from '@ember-data-mirror/request/fetch';
389
390
 
390
391
  class extends Store {
391
- requestManager = new RequestManager();
392
-
393
- constructor(args) {
394
- super(args);
395
- this.requestManager.use([Fetch]);
396
- this.requestManager.useCache(CacheHandler);
397
- }
392
+ requestManager = new RequestManager()
393
+ .use([Fetch])
394
+ .useCache(CacheHandler);
398
395
  }
399
396
  ```
400
397
 
@@ -410,19 +407,16 @@ Additional handlers or a service injection like the above would need to be done
410
407
  consuming application in order to make broader use of `RequestManager`.
411
408
 
412
409
  ```ts
413
- import Store, { CacheHandler } from 'ember-data-mirror/store';
410
+ import Store from 'ember-data-mirror/store';
411
+ import { CacheHandler } from '@ember-data-mirror/store';
414
412
  import RequestManager from '@ember-data-mirror/request';
415
413
  import Fetch from '@ember-data-mirror/request/fetch';
416
414
  import { LegacyNetworkHandler } from '@ember-data-mirror/legacy-compat';
417
415
 
418
416
  export default class extends Store {
419
- requestManager = new RequestManager();
420
-
421
- constructor(args) {
422
- super(args);
423
- this.requestManager.use([LegacyNetworkHandler, Fetch]);
424
- this.requestManager.useCache(CacheHandler);
425
- }
417
+ requestManager = new RequestManager()
418
+ .use([LegacyNetworkHandler, Fetch])
419
+ .useCache(CacheHandler);
426
420
  }
427
421
  ```
428
422
 
@@ -464,8 +458,7 @@ For usage of the store's `requestManager` via `store.request(<req>)` see the
464
458
  * const { apiUrl } = Config;
465
459
  *
466
460
  * // ... create manager
467
- * const manager = new RequestManager();
468
- * manager.use([Auth, Fetch]);
461
+ * const manager = new RequestManager().use([Auth, Fetch]);
469
462
  *
470
463
  * // ... execute a request
471
464
  * const response = await manager.request({
@@ -516,9 +509,20 @@ For usage of the store's `requestManager` via `store.request(<req>)` see the
516
509
  */
517
510
  class RequestManager {
518
511
  #handlers = [];
512
+
513
+ /**
514
+ * A map of pending requests from request.id to their
515
+ * associated CacheHandler promise.
516
+ *
517
+ * This queue is managed by the CacheHandler
518
+ *
519
+ * @internal
520
+ */
521
+
519
522
  constructor(options) {
520
523
  Object.assign(this, options);
521
524
  this._pending = new Map();
525
+ this._deduped = new Map();
522
526
  }
523
527
 
524
528
  /**
@@ -531,10 +535,10 @@ class RequestManager {
531
535
  * @method useCache
532
536
  * @public
533
537
  * @param {Handler[]} cacheHandler
534
- * @return {void}
538
+ * @return {ThisType}
535
539
  */
536
540
  useCache(cacheHandler) {
537
- if (macroCondition(getGlobalConfig().WarpDrive.env.DEBUG)) {
541
+ if (macroCondition(getGlobalConfig().WarpDriveMirror.env.DEBUG)) {
538
542
  if (this._hasCacheHandler) {
539
543
  throw new Error(`\`RequestManager.useCache(<handler>)\` May only be invoked once.`);
540
544
  }
@@ -545,6 +549,7 @@ class RequestManager {
545
549
  }
546
550
  cacheHandler[IS_CACHE_HANDLER] = true;
547
551
  this.#handlers.unshift(cacheHandler);
552
+ return this;
548
553
  }
549
554
 
550
555
  /**
@@ -557,11 +562,11 @@ class RequestManager {
557
562
  * @method use
558
563
  * @public
559
564
  * @param {Handler[]} newHandlers
560
- * @return {void}
565
+ * @return {ThisType}
561
566
  */
562
567
  use(newHandlers) {
563
568
  const handlers = this.#handlers;
564
- if (macroCondition(getGlobalConfig().WarpDrive.env.DEBUG)) {
569
+ if (macroCondition(getGlobalConfig().WarpDriveMirror.env.DEBUG)) {
565
570
  if (Object.isFrozen(handlers)) {
566
571
  throw new Error(`Cannot add a Handler to a RequestManager after a request has been made`);
567
572
  }
@@ -575,6 +580,7 @@ class RequestManager {
575
580
  });
576
581
  }
577
582
  handlers.push(...newHandlers);
583
+ return this;
578
584
  }
579
585
 
580
586
  /**
@@ -589,7 +595,7 @@ class RequestManager {
589
595
  */
590
596
  request(request) {
591
597
  const handlers = this.#handlers;
592
- if (macroCondition(getGlobalConfig().WarpDrive.env.DEBUG)) {
598
+ if (macroCondition(getGlobalConfig().WarpDriveMirror.env.DEBUG)) {
593
599
  if (!Object.isFrozen(handlers)) {
594
600
  Object.freeze(handlers);
595
601
  }
@@ -601,18 +607,20 @@ class RequestManager {
601
607
  }
602
608
  const requestId = peekUniversalTransient('REQ_ID') ?? 0;
603
609
  setUniversalTransient('REQ_ID', requestId + 1);
604
- const promise = executeNextHandler(handlers, request, 0, {
610
+ const context = {
605
611
  controller,
606
612
  response: null,
607
613
  stream: null,
608
614
  hasRequestedStream: false,
609
- id: requestId
610
- });
615
+ id: requestId,
616
+ identifier: null
617
+ };
618
+ const promise = executeNextHandler(handlers, request, 0, context);
611
619
 
612
620
  // the cache handler will set the result of the request synchronously
613
621
  // if it is able to fulfill the request from the cache
614
622
  const cacheResult = getRequestResult(requestId);
615
- if (macroCondition(getGlobalConfig().WarpDrive.env.TESTING)) {
623
+ if (macroCondition(getGlobalConfig().WarpDriveMirror.env.TESTING)) {
616
624
  if (!request.disableTestWaiter) {
617
625
  const {
618
626
  waitForPromise
@@ -670,4 +678,10 @@ class RequestManager {
670
678
  return new this(options);
671
679
  }
672
680
  }
681
+
682
+ // @ts-expect-error adding to globalThis
683
+ globalThis.setWarpDriveLogging = setLogging;
684
+
685
+ // @ts-expect-error adding to globalThis
686
+ globalThis.getWarpDriveRuntimeConfig = getRuntimeConfig;
673
687
  export { RequestManager as default, setPromiseResult };
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../src/-private/manager.ts"],"sourcesContent":["/* eslint-disable no-irregular-whitespace */\n/**\n *\n <p align=\"center\">\n <img\n class=\"project-logo\"\n src=\"https://raw.githubusercontent.com/emberjs/data/4612c9354e4c54d53327ec2cf21955075ce21294/ember-data-logo-light.svg#gh-light-mode-only\"\n alt=\"EmberData RequestManager\"\n width=\"240px\"\n title=\"EmberData RequestManager\"\n />\n</p>\n\n<p align=\"center\">⚡️ a simple abstraction over fetch to enable easy management of request/response flows</p>\n\nThis package provides [*Ember*‍**Data**](https://github.com/emberjs/data/)'s `RequestManager`, a framework agnostic library that can be integrated with any Javascript application to make [fetch](https://developer.mozilla.org/en-US/docs/Web/API/Fetch_API) happen.\n\n- [Installation](#installation)\n- [Basic Usage](#🚀-basic-usage)\n- [Architecture](#🪜-architecture)\n- [Usage](#usage)\n - [Making Requests](#making-requests)\n - [Using The Response](#using-the-response)\n - [Request Handlers](#handling-requests)\n - [Handling Errors](#handling-errors)\n - [Handling Abort](#handling-abort)\n - [Stream Currying](#stream-currying)\n - [Automatic Currying](#automatic-currying-of-stream-and-response)\n - [Using as a Service](#using-as-a-service)\n - [Using with `@ember-data-mirror/store`](#using-with-ember-datastore)\n - [Using with `ember-data`](#using-with-ember-data)\n\n---\n\n## Installation\n\nInstall using your javascript package manager of choice. For instance with [pnpm](https://pnpm.io/)\n\n```no-highlight\npnpm add @ember-data-mirror/request\n```\n\n---\n\n## 🚀 Basic Usage\n\nA `RequestManager` provides a request/response flow in which configured handlers are successively given the opportunity to handle, modify, or pass-along a request.\n\nThe RequestManager on its own does not know how to fulfill requests. For this we must register at least one handler. A basic `Fetch` handler is provided that will take the request options provided and execute `fetch`.\n\n```ts\nimport RequestManager from '@ember-data-mirror/request';\nimport Fetch from '@ember-data-mirror/request/fetch';\nimport { apiUrl } from './config';\n\n// ... create manager and add our Fetch handler\nconst manager = new RequestManager();\nmanager.use([Fetch]);\n\n// ... execute a request\nconst response = await manager.request({\n url: `${apiUrl}/users`\n});\n```\n\n---\n\n## 🪜 Architecture\n\nA `RequestManager` receives a request and manages fulfillment via configured handlers. It may be used standalone from the rest of *Ember*‍**Data** and is not specific to any library or framework.\n\nEach handler may choose to fulfill the request using some source of data or to pass the request along to other handlers.\n\nThe same or a separate instance of a `RequestManager` may also be used to fulfill requests issued by [*Ember*‍**Data**{Store}](https://github.com/emberjs/data/tree/main/packages/store)\n\nWhen the same instance is used by both this allows for simple coordination throughout the application. Requests issued by the Store will use the in-memory cache\nand return hydrated responses, requests issued directly to the RequestManager\nwill skip the in-memory cache and return raw responses.\n\n---\n\n## Usage\n\n```ts\nconst userList = await manager.request({\n url: `/api/v1/users.list`\n});\n\nconst users = userList.content;\n```\n\n---\n\n### Making Requests\n\n`RequestManager` has a single asyncronous method as it's API: `request`\n\n```ts\nclass RequestManager {\n request<T>(req: RequestInfo): Future<T>;\n}\n```\n\n`manager.request(<RequestInfo>)` accepts an object containing the information\nnecessary for the request to be handled successfully.\n\nThese options extend the [options](https://developer.mozilla.org/en-US/docs/Web/API/fetch#parameters) provided to `fetch`, and can accept a [`Request`](https://developer.mozilla.org/en-US/docs/Web/API/Request/Request). All properties accepted by Request options and fetch options are valid.\n\n```ts\ninterface RequestInfo extends FetchOptions {\n op?: string;\n store?: Store;\n\n url: string;\n // data that a handler should convert into\n // the query (GET) or body (POST)\n data?: Record<string, unknown>;\n\n // options specifically intended for handlers\n // to utilize to process the request\n options?: Record<string, unknown>;\n}\n```\n\n> **note**\n> providing a `signal` is unnecessary as an `AbortController` is automatically provided if none is present.\n\n---\n\n#### Using the Response\n\n`manager.request` returns a `Future`, which allows access to limited information about the request while it is still pending and fulfills with the final state when the request completes and the response has been read.\n\n```ts\nconst usersFuture = manager.request({\n url: `/api/v1/users.list`\n});\n```\n\nA `Future` is cancellable via `abort`.\n\n```ts\nusersFuture.abort();\n```\n\nHandlers may *optionally* expose a ReadableStream to the `Future` for streaming data; however, when doing so the handler should not resolve until it has fully read the response stream itself.\n\n```ts\ninterface Future<T> extends Promise<StructuredDocument<T>> {\n abort(): void;\n\n async getStream(): ReadableStream | null;\n}\n```\n\nA Future resolves or rejects with a `StructuredDocument`.\n\n```ts\ninterface StructuredDocument<T> {\n request: RequestInfo;\n response: ResponseInfo | null;\n content?: T;\n error?: Error;\n}\n```\n\nThe `RequestInfo` specified by `document.request` is the same as originally provided to `manager.request`. If any handler fulfilled this request using different request info it is not represented here. This contract helps to ensure that `retry` and `caching` are possible since the original arguments are correctly preserved. This also allows handlers to \"fork\" the request or fulfill from multiple sources without the details of fulfillment muddying the original request.\n\nThe `ResponseInfo` is a serializable fulfilled subset of a [Response](https://developer.mozilla.org/en-US/docs/Web/API/Response) if set via `setResponse`. If no response was ever set this will be `null`.\n\n```ts\ninterface ResponseInfo {\n headers?: Record<string, string>;\n ok?: boolean;\n redirected?: boolean;\n status?: HTTPStatusCode;\n statusText?: string;\n type?: 'basic' | 'cors';\n url?: string;\n}\n```\n\n---\n\n### Request Handlers\n\nRequests are fulfilled by handlers. A handler receives the request context\nas well as a `next` function with which to pass along a request to the next\nhandler if it so chooses.\n\nA handler may be any object with a `request` method. This allows both stateful and non-stateful\nhandlers to be utilized.\n\nIf a handler calls `next`, it receives a `Future` which resolves to a `StructuredDocument`\nthat it can then compose how it sees fit with its own response.\n\n```ts\n\ntype NextFn<P> = (req: RequestInfo) => Future<P>;\n\ninterface Handler {\n async request<T>(context: RequestContext, next: NextFn<P>): T;\n}\n```\n\n`RequestContext` contains a readonly version of the RequestInfo as well as a few methods for building up the `StructuredDocument` and `Future` that will be part of the response.\n\n```ts\ninterface RequestContext<T> {\n readonly request: RequestInfo;\n\n setStream(stream: ReadableStream | Promise<ReadableStream>): void;\n setResponse(response: Response | ResponseInfo): void;\n}\n```\n\nA basic `fetch` handler with support for streaming content updates while\nthe download is still underway might look like the following, where we use\n[`response.clone()`](https://developer.mozilla.org/en-US/docs/Web/API/Response/clone) to `tee` the `ReadableStream` into two streams.\n\nA more efficient handler might read from the response stream, building up the\nresponse content before passing along the chunk downstream.\n\n```ts\nconst FetchHandler = {\n async request(context) {\n const response = await fetch(context.request);\n context.setResponse(reponse);\n context.setStream(response.clone().body);\n\n return response.json();\n }\n}\n```\n\nRequest handlers are registered by configuring the manager via `use`\n\n```ts\nmanager.use([Handler1, Handler2])\n```\n\nHandlers will be invoked in the order they are registered (\"fifo\", first-in first-out), and may only be registered up until the first request is made. It is recommended but not required to register all handlers at one time in order to ensure explicitly visible handler ordering.\n\n---\n\n#### Handling Errors\n\nEach handler in the chain can catch errors from upstream and choose to\neither handle the error, re-throw the error, or throw a new error.\n\n```ts\nconst MAX_RETRIES = 5;\n\nconst Handler = {\n async request(context, next) {\n let attempts = 0;\n\n while (attempts < MAX_RETRIES) {\n attempts++;\n try {\n const response = await next(context.request);\n return response;\n } catch (e) {\n if (isTimeoutError(e) && attempts < MAX_RETRIES) {\n // retry request\n continue;\n }\n // rethrow if it is not a timeout error\n throw e;\n }\n }\n }\n}\n```\n\n---\n\n#### Handling Abort\n\nAborting a request will reject the current handler in the chain. However,\nevery handler can potentially catch this error. If your handler needs to\nseparate AbortError from other Error types, it is recommended to check\n`context.request.signal.aborted` (or if a custom controller was supplied `controller.signal.aborted`).\n\nIn this manner it is possible for a request to recover from an abort and\nstill proceed; however, as a best practice this should be used for necessary\ncleanup only and the original AbortError rethrown if the abort signal comes\nfrom the root controller.\n\n**AbortControllers are Always Present and Always Entangled**\n\nIf the initial request does not supply an [AbortController](https://developer.mozilla.org/en-US/docs/Web/API/AbortController), one will be generated.\n\nThe [signal](https://developer.mozilla.org/en-US/docs/Web/API/AbortSignal) for this controller is automatically added to the request passed into the first handler.\n\nEach handler has the option to supply a new controller to the request when calling `next`. If a new controller is provided it will be automatically\nentangled with the root controller. If the root controller aborts, so will\nany entangled controllers.\n\nIf an entangled controller aborts, the root controller will not abort. This\nallows for advanced request-flow scenarios to abort subsections of the request tree without aborting the entire request.\n\n---\n\n#### Stream Currying\n\n`RequestManager.request` and `next` differ from `fetch` in one **crucial detail** in that the outer Promise resolves only once the response stream has been processed.\n\nFor context, it helps to understand a few of the use-cases that RequestManager\nis intended to allow.\n\n- to manage and return streaming content (such as video files)\n- to fulfill a request from multiple sources or by splitting one request into multiple requests\n - for instance one API call for a user and another for the user's friends\n - or e.g. fulfilling part of the request from one source (one API, in-memory, localStorage, IndexedDB\n etc.) and the rest from another source (a different API, a WebWorker, etc.)\n- to coalesce multiple requests\n- to decorate a request with additional info\n - e.g. an Auth handler that ensures the correct tokens or headers or cookies are attached.\n\n\n`await fetch(<req>)` resolves at the moment headers are received. This allows for the body of the request to be processed as a stream by application\ncode *while chunks are still being received by the browser*.\n\nWhen an app chooses to `await response.json()` what occurs is the browser reads the stream to completion and then returns the result. Additionally, this stream may only be read **once**.\n\nThe `RequestManager` preserves this ability to subscribe to and utilize the stream by either the application or the handler – thereby delivering the full power and flexibility of native APIs – without restricting developers in ways that lead to complicated workarounds.\n\nEach handler may call `setStream` only once, but may do so *at any time* until the promise that the handler returns has resolved. The associated promise returned by calling `future.getStream` will resolve with the stream set by `setStream` if that method is called, or `null` if that method\nhas not been called by the time that the handler's request method has resolved.\n\nHandlers that do not create a stream of their own, but which call `next`, should defensively pipe the stream forward. While this is not required (see automatic currying below) it is better to do so in most cases as otherwise the stream may not become available to downstream handlers or the application until the upstream handler has fully read it.\n\n```ts\ncontext.setStream(future.getStream());\n```\n\nHandlers that either call `next` multiple times or otherwise have reason to create multiple fetch requests should either choose to return no stream, meaningfully combine the streams, or select a single prioritized stream.\n\nOf course, any handler may choose to read and handle the stream, and return either no stream or a different stream in the process.\n\n---\n\n#### Automatic Currying of Stream and Response\n\nIn order to simplify the common case for handlers which decorate a request, if `next` is called only a single time and `setResponse` was never called by the handler, the response set by the next handler in the chain will be applied to that handler's outcome. For instance, this makes the following pattern possible `return (await next(<req>)).content;`.\n\nSimilarly, if `next` is called only a single time and neither `setStream` nor `getStream` was called, we automatically curry the stream from the future returned by `next` onto the future returned by the handler.\n\nFinally, if the return value of a handler is a `Future`, we curry `content` and `errors` as well, thus enabling the simplest form `return next(<req>)`.\n\nIn the case of the `Future` being returned, `Stream` proxying is automatic and immediate and does not wait for the `Future` to resolve.\n\n---\n\n### Using as a Service\n\nMost applications will desire to have a single `RequestManager` instance, which can be achieved using module-state patterns for singletons, or for [Ember](https://emberjs.com) applications by exporting the manager as a [service](https://guides.emberjs.com/release/services/).\n\n*services/request.ts*\n```ts\nimport RequestManager from '@ember-data-mirror/request';\nimport Fetch from '@ember-data-mirror/request/fetch';\nimport Auth from 'ember-simple-auth/ember-data-handler';\n\nexport default class extends RequestManager {\n constructor(createArgs) {\n super(createArgs);\n this.use([Auth, Fetch]);\n }\n}\n```\n\n---\n\n#### Using with `@ember-data-mirror/store`\n\nTo have a request service unique to a Store:\n\n```ts\nimport Store, { CacheHandler } from '@ember-data-mirror/store';\nimport RequestManager from '@ember-data-mirror/request';\nimport Fetch from '@ember-data-mirror/request/fetch';\n\nclass extends Store {\n requestManager = new RequestManager();\n\n constructor(args) {\n super(args);\n this.requestManager.use([Fetch]);\n this.requestManager.useCache(CacheHandler);\n }\n}\n```\n\n---\n\n#### Using with `ember-data`\n\nIf using the package [ember-data](https://github.com/emberjs/data/tree/main/packages/-ember-data),\nthe following configuration will automatically be done in order to preserve the\nlegacy [Adapter](https://github.com/emberjs/data/tree/main/packages/adapter) and\n[Serializer](https://github.com/emberjs/data/tree/main/packages/serializer) behavior.\nAdditional handlers or a service injection like the above would need to be done by the\nconsuming application in order to make broader use of `RequestManager`.\n\n```ts\nimport Store, { CacheHandler } from 'ember-data-mirror/store';\nimport RequestManager from '@ember-data-mirror/request';\nimport Fetch from '@ember-data-mirror/request/fetch';\nimport { LegacyNetworkHandler } from '@ember-data-mirror/legacy-compat';\n\nexport default class extends Store {\n requestManager = new RequestManager();\n\n constructor(args) {\n super(args);\n this.requestManager.use([LegacyNetworkHandler, Fetch]);\n this.requestManager.useCache(CacheHandler);\n }\n}\n```\n\nTo provide a different configuration, import and extend `ember-data/store`. The\ndefault configuration will be ignored if the `requestManager` property is set,\nthough the store will still register the CacheHandler.\n\nFor usage of the store's `requestManager` via `store.request(<req>)` see the\n[Store](https://api.emberjs.com/ember-data/release/modules/@ember-data%2Fstore) documentation.\n\n *\n * @module @ember-data-mirror/request\n * @main @ember-data-mirror/request\n */\nimport { importSync } from '@embroider/macros';\n\nimport { DEBUG, TESTING } from '@warp-drive-mirror/build-config/env';\nimport { peekUniversalTransient, setUniversalTransient } from '@warp-drive-mirror/core-types/-private';\nimport type { RequestInfo, StructuredErrorDocument } from '@warp-drive-mirror/core-types/request';\n\nimport { assertValidRequest } from './debug';\nimport { upgradePromise } from './future';\nimport { clearRequestResult, getRequestResult, setPromiseResult } from './promise-cache';\nimport type { CacheHandler, Future, GenericCreateArgs, Handler } from './types';\nimport { executeNextHandler, IS_CACHE_HANDLER } from './utils';\n\n/**\n * ```js\n * import RequestManager from '@ember-data-mirror/request';\n * ```\n *\n * A RequestManager provides a request/response flow in which configured\n * handlers are successively given the opportunity to handle, modify, or\n * pass-along a request.\n *\n * ```ts\n * interface RequestManager {\n * request<T>(req: RequestInfo): Future<T>;\n * }\n * ```\n *\n * For example:\n *\n * ```ts\n * import RequestManager from '@ember-data-mirror/request';\n * import Fetch from '@ember-data-mirror/request/fetch';\n * import Auth from 'ember-simple-auth/ember-data-handler';\n * import Config from './config';\n *\n * const { apiUrl } = Config;\n *\n * // ... create manager\n * const manager = new RequestManager();\n * manager.use([Auth, Fetch]);\n *\n * // ... execute a request\n * const response = await manager.request({\n * url: `${apiUrl}/users`\n * });\n * ```\n *\n * ### Futures\n *\n * The return value of `manager.request` is a `Future`, which allows\n * access to limited information about the request while it is still\n * pending and fulfills with the final state when the request completes.\n *\n * A `Future` is cancellable via `abort`.\n *\n * Handlers may optionally expose a `ReadableStream` to the `Future` for\n * streaming data; however, when doing so the future should not resolve\n * until the response stream is fully read.\n *\n * ```ts\n * interface Future<T> extends Promise<StructuredDocument<T>> {\n * abort(): void;\n *\n * async getStream(): ReadableStream | null;\n * }\n * ```\n *\n * ### StructuredDocuments\n *\n * A Future resolves with a `StructuredDataDocument` or rejects with a `StructuredErrorDocument`.\n *\n * ```ts\n * interface StructuredDataDocument<T> {\n * request: ImmutableRequestInfo;\n * response: ImmutableResponseInfo;\n * content: T;\n * }\n * interface StructuredErrorDocument extends Error {\n * request: ImmutableRequestInfo;\n * response: ImmutableResponseInfo;\n * error: string | object;\n * }\n * type StructuredDocument<T> = StructuredDataDocument<T> | StructuredErrorDocument;\n * ```\n *\n * @class RequestManager\n * @public\n */\nexport class RequestManager {\n #handlers: Handler[] = [];\n declare _hasCacheHandler: boolean;\n declare _pending: Map<number, Promise<unknown>>;\n\n constructor(options?: GenericCreateArgs) {\n Object.assign(this, options);\n this._pending = new Map();\n }\n\n /**\n * Register a handler to use for primary cache intercept.\n *\n * Only one such handler may exist. If using the same\n * RequestManager as the Store instance the Store\n * registers itself as a Cache handler.\n *\n * @method useCache\n * @public\n * @param {Handler[]} cacheHandler\n * @return {void}\n */\n useCache(cacheHandler: CacheHandler & { [IS_CACHE_HANDLER]?: true }): void {\n if (DEBUG) {\n if (this._hasCacheHandler) {\n throw new Error(`\\`RequestManager.useCache(<handler>)\\` May only be invoked once.`);\n }\n if (Object.isFrozen(this.#handlers)) {\n throw new Error(\n `\\`RequestManager.useCache(<handler>)\\` May only be invoked prior to any request having been made.`\n );\n }\n this._hasCacheHandler = true;\n }\n cacheHandler[IS_CACHE_HANDLER] = true;\n this.#handlers.unshift(cacheHandler as Handler);\n }\n\n /**\n * Register handler(s) to use when a request is issued.\n *\n * Handlers will be invoked in the order they are registered.\n * Each Handler is given the opportunity to handle the request,\n * curry the request, or pass along a modified request.\n *\n * @method use\n * @public\n * @param {Handler[]} newHandlers\n * @return {void}\n */\n use(newHandlers: Handler[]): void {\n const handlers = this.#handlers;\n if (DEBUG) {\n if (Object.isFrozen(handlers)) {\n throw new Error(`Cannot add a Handler to a RequestManager after a request has been made`);\n }\n if (!Array.isArray(newHandlers)) {\n throw new Error(\n `\\`RequestManager.use(<Handler[]>)\\` expects an array of handlers, but was called with \\`${typeof newHandlers}\\``\n );\n }\n newHandlers.forEach((handler, index) => {\n if (!handler || typeof handler !== 'object' || typeof handler.request !== 'function') {\n throw new Error(\n `\\`RequestManager.use(<Handler[]>)\\` expected to receive an array of handler objects with request methods, by the handler at index ${index} does not conform.`\n );\n }\n });\n }\n handlers.push(...newHandlers);\n }\n\n /**\n * Issue a Request.\n *\n * Returns a Future that fulfills with a StructuredDocument\n *\n * @method request\n * @public\n * @param {RequestInfo} request\n * @return {Future}\n */\n request<RT, T = unknown>(request: RequestInfo<T, RT>): Future<RT> {\n const handlers = this.#handlers;\n if (DEBUG) {\n if (!Object.isFrozen(handlers)) {\n Object.freeze(handlers);\n }\n assertValidRequest(request, true);\n }\n\n const controller = request.controller || new AbortController();\n if (request.controller) {\n delete request.controller;\n }\n\n const requestId = peekUniversalTransient<number>('REQ_ID') ?? 0;\n setUniversalTransient('REQ_ID', requestId + 1);\n\n const promise = executeNextHandler<RT>(handlers, request, 0, {\n controller,\n response: null,\n stream: null,\n hasRequestedStream: false,\n id: requestId,\n });\n\n // the cache handler will set the result of the request synchronously\n // if it is able to fulfill the request from the cache\n const cacheResult = getRequestResult(requestId);\n\n if (TESTING) {\n if (!request.disableTestWaiter) {\n const { waitForPromise } = importSync('@ember/test-waiters') as {\n waitForPromise: <PT>(promise: Promise<PT>) => Promise<PT>;\n };\n const newPromise = waitForPromise(promise);\n const finalPromise = upgradePromise(\n newPromise.then(\n (result) => {\n setPromiseResult(finalPromise, { isError: false, result });\n clearRequestResult(requestId);\n return result;\n },\n (error: StructuredErrorDocument) => {\n setPromiseResult(finalPromise, { isError: true, result: error });\n clearRequestResult(requestId);\n throw error;\n }\n ),\n promise\n );\n\n if (cacheResult) {\n setPromiseResult(finalPromise, cacheResult);\n }\n\n return finalPromise;\n }\n }\n\n // const promise1 = store.request(myRequest);\n // const promise2 = store.request(myRequest);\n // promise1 === promise2; // false\n // either we need to make promise1 === promise2, or we need to make sure that\n // we need to have a way to key from request to result\n // such that we can lookup the result here and return it if it exists\n const finalPromise = upgradePromise(\n promise.then(\n (result) => {\n setPromiseResult(finalPromise, { isError: false, result });\n clearRequestResult(requestId);\n return result;\n },\n (error: StructuredErrorDocument) => {\n setPromiseResult(finalPromise, { isError: true, result: error });\n clearRequestResult(requestId);\n throw error;\n }\n ),\n promise\n );\n\n if (cacheResult) {\n setPromiseResult(finalPromise, cacheResult);\n }\n\n return finalPromise;\n }\n\n static create(options?: GenericCreateArgs) {\n return new this(options);\n }\n}\n"],"names":["RequestManager","constructor","options","Object","assign","_pending","Map","useCache","cacheHandler","macroCondition","getGlobalConfig","WarpDrive","env","DEBUG","_hasCacheHandler","Error","isFrozen","IS_CACHE_HANDLER","unshift","use","newHandlers","handlers","Array","isArray","forEach","handler","index","request","push","freeze","assertValidRequest","controller","AbortController","requestId","peekUniversalTransient","setUniversalTransient","promise","executeNextHandler","response","stream","hasRequestedStream","id","cacheResult","getRequestResult","TESTING","disableTestWaiter","waitForPromise","importSync","newPromise","finalPromise","upgradePromise","then","result","setPromiseResult","isError","clearRequestResult","error","create"],"mappings":";;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAaA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA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"}
1
+ {"version":3,"file":"index.js","sources":["../src/-private/manager.ts","../src/index.ts"],"sourcesContent":["/* eslint-disable no-irregular-whitespace */\n/**\n *\n <p align=\"center\">\n <img\n class=\"project-logo\"\n src=\"https://raw.githubusercontent.com/emberjs/data/4612c9354e4c54d53327ec2cf21955075ce21294/ember-data-logo-light.svg#gh-light-mode-only\"\n alt=\"EmberData RequestManager\"\n width=\"240px\"\n title=\"EmberData RequestManager\"\n />\n</p>\n\n<p align=\"center\">⚡️ a simple abstraction over fetch to enable easy management of request/response flows</p>\n\nThis package provides [*Ember*‍**Data**](https://github.com/emberjs/data/)'s `RequestManager`, a framework agnostic library that can be integrated with any Javascript application to make [fetch](https://developer.mozilla.org/en-US/docs/Web/API/Fetch_API) happen.\n\n- [Installation](#installation)\n- [Basic Usage](#🚀-basic-usage)\n- [Architecture](#🪜-architecture)\n- [Usage](#usage)\n - [Making Requests](#making-requests)\n - [Using The Response](#using-the-response)\n - [Request Handlers](#handling-requests)\n - [Handling Errors](#handling-errors)\n - [Handling Abort](#handling-abort)\n - [Stream Currying](#stream-currying)\n - [Automatic Currying](#automatic-currying-of-stream-and-response)\n - [Using as a Service](#using-as-a-service)\n - [Using with `@ember-data-mirror/store`](#using-with-ember-datastore)\n - [Using with `ember-data`](#using-with-ember-data)\n\n---\n\n## Installation\n\nInstall using your javascript package manager of choice. For instance with [pnpm](https://pnpm.io/)\n\n```no-highlight\npnpm add @ember-data-mirror/request\n```\n\n---\n\n## 🚀 Basic Usage\n\nA `RequestManager` provides a request/response flow in which configured handlers are successively given the opportunity to handle, modify, or pass-along a request.\n\nThe RequestManager on its own does not know how to fulfill requests. For this we must register at least one handler. A basic `Fetch` handler is provided that will take the request options provided and execute `fetch`.\n\n```ts\nimport RequestManager from '@ember-data-mirror/request';\nimport Fetch from '@ember-data-mirror/request/fetch';\nimport { apiUrl } from './config';\n\n// ... create manager and add our Fetch handler\nconst manager = new RequestManager()\n .use([Fetch]);\n\n// ... execute a request\nconst response = await manager.request({\n url: `${apiUrl}/users`\n});\n```\n\n---\n\n## 🪜 Architecture\n\nA `RequestManager` receives a request and manages fulfillment via configured handlers. It may be used standalone from the rest of *Ember*‍**Data** and is not specific to any library or framework.\n\nEach handler may choose to fulfill the request using some source of data or to pass the request along to other handlers.\n\nThe same or a separate instance of a `RequestManager` may also be used to fulfill requests issued by [*Ember*‍**Data**{Store}](https://github.com/emberjs/data/tree/main/packages/store)\n\nWhen the same instance is used by both this allows for simple coordination throughout the application. Requests issued by the Store will use the in-memory cache\nand return hydrated responses, requests issued directly to the RequestManager\nwill skip the in-memory cache and return raw responses.\n\n---\n\n## Usage\n\n```ts\nconst userList = await manager.request({\n url: `/api/v1/users.list`\n});\n\nconst users = userList.content;\n```\n\n---\n\n### Making Requests\n\n`RequestManager` has a single asyncronous method as it's API: `request`\n\n```ts\nclass RequestManager {\n request<T>(req: RequestInfo): Future<T>;\n}\n```\n\n`manager.request(<RequestInfo>)` accepts an object containing the information\nnecessary for the request to be handled successfully.\n\nThese options extend the [options](https://developer.mozilla.org/en-US/docs/Web/API/fetch#parameters) provided to `fetch`, and can accept a [`Request`](https://developer.mozilla.org/en-US/docs/Web/API/Request/Request). All properties accepted by Request options and fetch options are valid.\n\n```ts\ninterface RequestInfo extends FetchOptions {\n op?: string;\n store?: Store;\n\n url: string;\n // data that a handler should convert into\n // the query (GET) or body (POST)\n data?: Record<string, unknown>;\n\n // options specifically intended for handlers\n // to utilize to process the request\n options?: Record<string, unknown>;\n}\n```\n\n> **note**\n> providing a `signal` is unnecessary as an `AbortController` is automatically provided if none is present.\n\n---\n\n#### Using the Response\n\n`manager.request` returns a `Future`, which allows access to limited information about the request while it is still pending and fulfills with the final state when the request completes and the response has been read.\n\n```ts\nconst usersFuture = manager.request({\n url: `/api/v1/users.list`\n});\n```\n\nA `Future` is cancellable via `abort`.\n\n```ts\nusersFuture.abort();\n```\n\nHandlers may *optionally* expose a ReadableStream to the `Future` for streaming data; however, when doing so the handler should not resolve until it has fully read the response stream itself.\n\n```ts\ninterface Future<T> extends Promise<StructuredDocument<T>> {\n abort(): void;\n\n async getStream(): ReadableStream | null;\n}\n```\n\nA Future resolves or rejects with a `StructuredDocument`.\n\n```ts\ninterface StructuredDocument<T> {\n request: RequestInfo;\n response: ResponseInfo | null;\n content?: T;\n error?: Error;\n}\n```\n\nThe `RequestInfo` specified by `document.request` is the same as originally provided to `manager.request`. If any handler fulfilled this request using different request info it is not represented here. This contract helps to ensure that `retry` and `caching` are possible since the original arguments are correctly preserved. This also allows handlers to \"fork\" the request or fulfill from multiple sources without the details of fulfillment muddying the original request.\n\nThe `ResponseInfo` is a serializable fulfilled subset of a [Response](https://developer.mozilla.org/en-US/docs/Web/API/Response) if set via `setResponse`. If no response was ever set this will be `null`.\n\n```ts\ninterface ResponseInfo {\n headers?: Record<string, string>;\n ok?: boolean;\n redirected?: boolean;\n status?: HTTPStatusCode;\n statusText?: string;\n type?: 'basic' | 'cors';\n url?: string;\n}\n```\n\n---\n\n### Request Handlers\n\nRequests are fulfilled by handlers. A handler receives the request context\nas well as a `next` function with which to pass along a request to the next\nhandler if it so chooses.\n\nA handler may be any object with a `request` method. This allows both stateful and non-stateful\nhandlers to be utilized.\n\nIf a handler calls `next`, it receives a `Future` which resolves to a `StructuredDocument`\nthat it can then compose how it sees fit with its own response.\n\n```ts\n\ntype NextFn<P> = (req: RequestInfo) => Future<P>;\n\ninterface Handler {\n async request<T>(context: RequestContext, next: NextFn<P>): T;\n}\n```\n\n`RequestContext` contains a readonly version of the RequestInfo as well as a few methods for building up the `StructuredDocument` and `Future` that will be part of the response.\n\n```ts\ninterface RequestContext<T> {\n readonly request: RequestInfo;\n\n setStream(stream: ReadableStream | Promise<ReadableStream>): void;\n setResponse(response: Response | ResponseInfo): void;\n}\n```\n\nA basic `fetch` handler with support for streaming content updates while\nthe download is still underway might look like the following, where we use\n[`response.clone()`](https://developer.mozilla.org/en-US/docs/Web/API/Response/clone) to `tee` the `ReadableStream` into two streams.\n\nA more efficient handler might read from the response stream, building up the\nresponse content before passing along the chunk downstream.\n\n```ts\nconst FetchHandler = {\n async request(context) {\n const response = await fetch(context.request);\n context.setResponse(reponse);\n context.setStream(response.clone().body);\n\n return response.json();\n }\n}\n```\n\nRequest handlers are registered by configuring the manager via `use`\n\n```ts\nmanager.use([Handler1, Handler2])\n```\n\nHandlers will be invoked in the order they are registered (\"fifo\", first-in first-out), and may only be registered up until the first request is made. It is recommended but not required to register all handlers at one time in order to ensure explicitly visible handler ordering.\n\n---\n\n#### Handling Errors\n\nEach handler in the chain can catch errors from upstream and choose to\neither handle the error, re-throw the error, or throw a new error.\n\n```ts\nconst MAX_RETRIES = 5;\n\nconst Handler = {\n async request(context, next) {\n let attempts = 0;\n\n while (attempts < MAX_RETRIES) {\n attempts++;\n try {\n const response = await next(context.request);\n return response;\n } catch (e) {\n if (isTimeoutError(e) && attempts < MAX_RETRIES) {\n // retry request\n continue;\n }\n // rethrow if it is not a timeout error\n throw e;\n }\n }\n }\n}\n```\n\n---\n\n#### Handling Abort\n\nAborting a request will reject the current handler in the chain. However,\nevery handler can potentially catch this error. If your handler needs to\nseparate AbortError from other Error types, it is recommended to check\n`context.request.signal.aborted` (or if a custom controller was supplied `controller.signal.aborted`).\n\nIn this manner it is possible for a request to recover from an abort and\nstill proceed; however, as a best practice this should be used for necessary\ncleanup only and the original AbortError rethrown if the abort signal comes\nfrom the root controller.\n\n**AbortControllers are Always Present and Always Entangled**\n\nIf the initial request does not supply an [AbortController](https://developer.mozilla.org/en-US/docs/Web/API/AbortController), one will be generated.\n\nThe [signal](https://developer.mozilla.org/en-US/docs/Web/API/AbortSignal) for this controller is automatically added to the request passed into the first handler.\n\nEach handler has the option to supply a new controller to the request when calling `next`. If a new controller is provided it will be automatically\nentangled with the root controller. If the root controller aborts, so will\nany entangled controllers.\n\nIf an entangled controller aborts, the root controller will not abort. This\nallows for advanced request-flow scenarios to abort subsections of the request tree without aborting the entire request.\n\n---\n\n#### Stream Currying\n\n`RequestManager.request` and `next` differ from `fetch` in one **crucial detail** in that the outer Promise resolves only once the response stream has been processed.\n\nFor context, it helps to understand a few of the use-cases that RequestManager\nis intended to allow.\n\n- to manage and return streaming content (such as video files)\n- to fulfill a request from multiple sources or by splitting one request into multiple requests\n - for instance one API call for a user and another for the user's friends\n - or e.g. fulfilling part of the request from one source (one API, in-memory, localStorage, IndexedDB\n etc.) and the rest from another source (a different API, a WebWorker, etc.)\n- to coalesce multiple requests\n- to decorate a request with additional info\n - e.g. an Auth handler that ensures the correct tokens or headers or cookies are attached.\n\n\n`await fetch(<req>)` resolves at the moment headers are received. This allows for the body of the request to be processed as a stream by application\ncode *while chunks are still being received by the browser*.\n\nWhen an app chooses to `await response.json()` what occurs is the browser reads the stream to completion and then returns the result. Additionally, this stream may only be read **once**.\n\nThe `RequestManager` preserves this ability to subscribe to and utilize the stream by either the application or the handler – thereby delivering the full power and flexibility of native APIs – without restricting developers in ways that lead to complicated workarounds.\n\nEach handler may call `setStream` only once, but may do so *at any time* until the promise that the handler returns has resolved. The associated promise returned by calling `future.getStream` will resolve with the stream set by `setStream` if that method is called, or `null` if that method\nhas not been called by the time that the handler's request method has resolved.\n\nHandlers that do not create a stream of their own, but which call `next`, should defensively pipe the stream forward. While this is not required (see automatic currying below) it is better to do so in most cases as otherwise the stream may not become available to downstream handlers or the application until the upstream handler has fully read it.\n\n```ts\ncontext.setStream(future.getStream());\n```\n\nHandlers that either call `next` multiple times or otherwise have reason to create multiple fetch requests should either choose to return no stream, meaningfully combine the streams, or select a single prioritized stream.\n\nOf course, any handler may choose to read and handle the stream, and return either no stream or a different stream in the process.\n\n---\n\n#### Automatic Currying of Stream and Response\n\nIn order to simplify the common case for handlers which decorate a request, if `next` is called only a single time and `setResponse` was never called by the handler, the response set by the next handler in the chain will be applied to that handler's outcome. For instance, this makes the following pattern possible `return (await next(<req>)).content;`.\n\nSimilarly, if `next` is called only a single time and neither `setStream` nor `getStream` was called, we automatically curry the stream from the future returned by `next` onto the future returned by the handler.\n\nFinally, if the return value of a handler is a `Future`, we curry `content` and `errors` as well, thus enabling the simplest form `return next(<req>)`.\n\nIn the case of the `Future` being returned, `Stream` proxying is automatic and immediate and does not wait for the `Future` to resolve.\n\n---\n\n### Using as a Service\n\nMost applications will desire to have a single `RequestManager` instance, which can be achieved using module-state patterns for singletons, or for [Ember](https://emberjs.com) applications by exporting the manager as a [service](https://guides.emberjs.com/release/services/).\n\n*services/request.ts*\n```ts\nimport RequestManager from '@ember-data-mirror/request';\nimport Fetch from '@ember-data-mirror/request/fetch';\nimport Auth from 'ember-simple-auth/ember-data-handler';\n\nexport default class extends RequestManager {\n constructor(createArgs) {\n super(createArgs);\n this.use([Auth, Fetch]);\n }\n}\n```\n\n---\n\n#### Using with `@ember-data-mirror/store`\n\nTo have a request service unique to a Store:\n\n```ts\nimport Store, { CacheHandler } from '@ember-data-mirror/store';\nimport RequestManager from '@ember-data-mirror/request';\nimport Fetch from '@ember-data-mirror/request/fetch';\n\nclass extends Store {\n requestManager = new RequestManager()\n .use([Fetch])\n .useCache(CacheHandler);\n}\n```\n\n---\n\n#### Using with `ember-data`\n\nIf using the package [ember-data](https://github.com/emberjs/data/tree/main/packages/-ember-data),\nthe following configuration will automatically be done in order to preserve the\nlegacy [Adapter](https://github.com/emberjs/data/tree/main/packages/adapter) and\n[Serializer](https://github.com/emberjs/data/tree/main/packages/serializer) behavior.\nAdditional handlers or a service injection like the above would need to be done by the\nconsuming application in order to make broader use of `RequestManager`.\n\n```ts\nimport Store from 'ember-data-mirror/store';\nimport { CacheHandler } from '@ember-data-mirror/store';\nimport RequestManager from '@ember-data-mirror/request';\nimport Fetch from '@ember-data-mirror/request/fetch';\nimport { LegacyNetworkHandler } from '@ember-data-mirror/legacy-compat';\n\nexport default class extends Store {\n requestManager = new RequestManager()\n .use([LegacyNetworkHandler, Fetch])\n .useCache(CacheHandler);\n}\n```\n\nTo provide a different configuration, import and extend `ember-data/store`. The\ndefault configuration will be ignored if the `requestManager` property is set,\nthough the store will still register the CacheHandler.\n\nFor usage of the store's `requestManager` via `store.request(<req>)` see the\n[Store](https://api.emberjs.com/ember-data/release/modules/@ember-data%2Fstore) documentation.\n\n *\n * @module @ember-data-mirror/request\n * @main @ember-data-mirror/request\n */\nimport { importSync } from '@embroider/macros';\n\nimport { DEBUG, TESTING } from '@warp-drive-mirror/build-config/env';\nimport { peekUniversalTransient, setUniversalTransient } from '@warp-drive-mirror/core-types/-private';\nimport type { StableDocumentIdentifier } from '@warp-drive-mirror/core-types/identifier';\nimport type { RequestInfo, StructuredErrorDocument } from '@warp-drive-mirror/core-types/request';\n\nimport { assertValidRequest } from './debug';\nimport { upgradePromise } from './future';\nimport { clearRequestResult, getRequestResult, setPromiseResult } from './promise-cache';\nimport type { CacheHandler, Future, GenericCreateArgs, Handler, ManagedRequestPriority } from './types';\nimport { executeNextHandler, IS_CACHE_HANDLER } from './utils';\n\n/**\n * ```js\n * import RequestManager from '@ember-data-mirror/request';\n * ```\n *\n * A RequestManager provides a request/response flow in which configured\n * handlers are successively given the opportunity to handle, modify, or\n * pass-along a request.\n *\n * ```ts\n * interface RequestManager {\n * request<T>(req: RequestInfo): Future<T>;\n * }\n * ```\n *\n * For example:\n *\n * ```ts\n * import RequestManager from '@ember-data-mirror/request';\n * import Fetch from '@ember-data-mirror/request/fetch';\n * import Auth from 'ember-simple-auth/ember-data-handler';\n * import Config from './config';\n *\n * const { apiUrl } = Config;\n *\n * // ... create manager\n * const manager = new RequestManager().use([Auth, Fetch]);\n *\n * // ... execute a request\n * const response = await manager.request({\n * url: `${apiUrl}/users`\n * });\n * ```\n *\n * ### Futures\n *\n * The return value of `manager.request` is a `Future`, which allows\n * access to limited information about the request while it is still\n * pending and fulfills with the final state when the request completes.\n *\n * A `Future` is cancellable via `abort`.\n *\n * Handlers may optionally expose a `ReadableStream` to the `Future` for\n * streaming data; however, when doing so the future should not resolve\n * until the response stream is fully read.\n *\n * ```ts\n * interface Future<T> extends Promise<StructuredDocument<T>> {\n * abort(): void;\n *\n * async getStream(): ReadableStream | null;\n * }\n * ```\n *\n * ### StructuredDocuments\n *\n * A Future resolves with a `StructuredDataDocument` or rejects with a `StructuredErrorDocument`.\n *\n * ```ts\n * interface StructuredDataDocument<T> {\n * request: ImmutableRequestInfo;\n * response: ImmutableResponseInfo;\n * content: T;\n * }\n * interface StructuredErrorDocument extends Error {\n * request: ImmutableRequestInfo;\n * response: ImmutableResponseInfo;\n * error: string | object;\n * }\n * type StructuredDocument<T> = StructuredDataDocument<T> | StructuredErrorDocument;\n * ```\n *\n * @class RequestManager\n * @public\n */\nexport class RequestManager {\n #handlers: Handler[] = [];\n declare _hasCacheHandler: boolean;\n /**\n * A map of pending requests from request.id to their\n * associated CacheHandler promise.\n *\n * This queue is managed by the CacheHandler\n *\n * @internal\n */\n declare _pending: Map<number, Promise<unknown>>;\n declare _deduped: Map<StableDocumentIdentifier, { priority: ManagedRequestPriority; promise: Promise<unknown> }>;\n\n constructor(options?: GenericCreateArgs) {\n Object.assign(this, options);\n this._pending = new Map();\n this._deduped = new Map();\n }\n\n /**\n * Register a handler to use for primary cache intercept.\n *\n * Only one such handler may exist. If using the same\n * RequestManager as the Store instance the Store\n * registers itself as a Cache handler.\n *\n * @method useCache\n * @public\n * @param {Handler[]} cacheHandler\n * @return {ThisType}\n */\n useCache(cacheHandler: CacheHandler & { [IS_CACHE_HANDLER]?: true }): this {\n if (DEBUG) {\n if (this._hasCacheHandler) {\n throw new Error(`\\`RequestManager.useCache(<handler>)\\` May only be invoked once.`);\n }\n if (Object.isFrozen(this.#handlers)) {\n throw new Error(\n `\\`RequestManager.useCache(<handler>)\\` May only be invoked prior to any request having been made.`\n );\n }\n this._hasCacheHandler = true;\n }\n cacheHandler[IS_CACHE_HANDLER] = true;\n this.#handlers.unshift(cacheHandler as Handler);\n return this;\n }\n\n /**\n * Register handler(s) to use when a request is issued.\n *\n * Handlers will be invoked in the order they are registered.\n * Each Handler is given the opportunity to handle the request,\n * curry the request, or pass along a modified request.\n *\n * @method use\n * @public\n * @param {Handler[]} newHandlers\n * @return {ThisType}\n */\n use(newHandlers: Handler[]): this {\n const handlers = this.#handlers;\n if (DEBUG) {\n if (Object.isFrozen(handlers)) {\n throw new Error(`Cannot add a Handler to a RequestManager after a request has been made`);\n }\n if (!Array.isArray(newHandlers)) {\n throw new Error(\n `\\`RequestManager.use(<Handler[]>)\\` expects an array of handlers, but was called with \\`${typeof newHandlers}\\``\n );\n }\n newHandlers.forEach((handler, index) => {\n if (!handler || typeof handler !== 'object' || typeof handler.request !== 'function') {\n throw new Error(\n `\\`RequestManager.use(<Handler[]>)\\` expected to receive an array of handler objects with request methods, by the handler at index ${index} does not conform.`\n );\n }\n });\n }\n handlers.push(...newHandlers);\n return this;\n }\n\n /**\n * Issue a Request.\n *\n * Returns a Future that fulfills with a StructuredDocument\n *\n * @method request\n * @public\n * @param {RequestInfo} request\n * @return {Future}\n */\n request<RT, T = unknown>(request: RequestInfo<T, RT>): Future<RT> {\n const handlers = this.#handlers;\n if (DEBUG) {\n if (!Object.isFrozen(handlers)) {\n Object.freeze(handlers);\n }\n assertValidRequest(request, true);\n }\n\n const controller = request.controller || new AbortController();\n if (request.controller) {\n delete request.controller;\n }\n\n const requestId = peekUniversalTransient<number>('REQ_ID') ?? 0;\n setUniversalTransient('REQ_ID', requestId + 1);\n\n const context = {\n controller,\n response: null,\n stream: null,\n hasRequestedStream: false,\n id: requestId,\n identifier: null,\n };\n const promise = executeNextHandler<RT>(handlers, request, 0, context);\n\n // the cache handler will set the result of the request synchronously\n // if it is able to fulfill the request from the cache\n const cacheResult = getRequestResult(requestId);\n\n if (TESTING) {\n if (!request.disableTestWaiter) {\n const { waitForPromise } = importSync('@ember/test-waiters') as {\n waitForPromise: <PT>(promise: Promise<PT>) => Promise<PT>;\n };\n const newPromise = waitForPromise(promise);\n const finalPromise = upgradePromise(\n newPromise.then(\n (result) => {\n setPromiseResult(finalPromise, { isError: false, result });\n clearRequestResult(requestId);\n return result;\n },\n (error: StructuredErrorDocument) => {\n setPromiseResult(finalPromise, { isError: true, result: error });\n clearRequestResult(requestId);\n throw error;\n }\n ),\n promise\n );\n\n if (cacheResult) {\n setPromiseResult(finalPromise, cacheResult);\n }\n\n return finalPromise;\n }\n }\n\n // const promise1 = store.request(myRequest);\n // const promise2 = store.request(myRequest);\n // promise1 === promise2; // false\n // either we need to make promise1 === promise2, or we need to make sure that\n // we need to have a way to key from request to result\n // such that we can lookup the result here and return it if it exists\n const finalPromise = upgradePromise(\n promise.then(\n (result) => {\n setPromiseResult(finalPromise, { isError: false, result });\n clearRequestResult(requestId);\n return result;\n },\n (error: StructuredErrorDocument) => {\n setPromiseResult(finalPromise, { isError: true, result: error });\n clearRequestResult(requestId);\n throw error;\n }\n ),\n promise\n );\n\n if (cacheResult) {\n setPromiseResult(finalPromise, cacheResult);\n }\n\n return finalPromise;\n }\n\n static create(options?: GenericCreateArgs) {\n return new this(options);\n }\n}\n","import { getRuntimeConfig, setLogging } from '@warp-drive-mirror/core-types/runtime';\n\nexport { RequestManager as default } from './-private/manager';\nexport { createDeferred } from './-private/future';\nexport type { Future, Handler, CacheHandler, NextFn } from './-private/types';\nexport type {\n RequestContext,\n ImmutableRequestInfo,\n RequestInfo,\n ResponseInfo,\n StructuredDocument,\n StructuredErrorDocument,\n StructuredDataDocument,\n} from '@warp-drive-mirror/core-types/request';\nexport { setPromiseResult, getPromiseResult } from './-private/promise-cache';\nexport type { Awaitable } from './-private/promise-cache';\n\n// @ts-expect-error adding to globalThis\nglobalThis.setWarpDriveLogging = setLogging;\n\n// @ts-expect-error adding to globalThis\nglobalThis.getWarpDriveRuntimeConfig = getRuntimeConfig;\n"],"names":["RequestManager","constructor","options","Object","assign","_pending","Map","_deduped","useCache","cacheHandler","macroCondition","getGlobalConfig","WarpDrive","env","DEBUG","_hasCacheHandler","Error","isFrozen","IS_CACHE_HANDLER","unshift","use","newHandlers","handlers","Array","isArray","forEach","handler","index","request","push","freeze","assertValidRequest","controller","AbortController","requestId","peekUniversalTransient","setUniversalTransient","context","response","stream","hasRequestedStream","id","identifier","promise","executeNextHandler","cacheResult","getRequestResult","TESTING","disableTestWaiter","waitForPromise","importSync","newPromise","finalPromise","upgradePromise","then","result","setPromiseResult","isError","clearRequestResult","error","create","globalThis","setWarpDriveLogging","setLogging","getWarpDriveRuntimeConfig","getRuntimeConfig"],"mappings":";;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;;AAEA;AACA;AACA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;;AAEA;;AAEA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA;AACA;;AAEA;;AAEA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAcA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,MAAMA,cAAc,CAAC;EAC1B,SAAS,GAAc,EAAE;;AAEzB;AACF;AACA;AACA;AACA;AACA;AACA;AACA;;EAIEC,WAAWA,CAACC,OAA2B,EAAE;AACvCC,IAAAA,MAAM,CAACC,MAAM,CAAC,IAAI,EAAEF,OAAO,CAAC;AAC5B,IAAA,IAAI,CAACG,QAAQ,GAAG,IAAIC,GAAG,EAAE;AACzB,IAAA,IAAI,CAACC,QAAQ,GAAG,IAAID,GAAG,EAAE;AAC3B;;AAEA;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;EACEE,QAAQA,CAACC,YAA0D,EAA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"}
@@ -0,0 +1,4 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <svg width="1200pt" height="1200pt" version="1.1" viewBox="0 0 1200 1200" xmlns="http://www.w3.org/2000/svg">
3
+ <path fill="#0969da" d="m1096.3 402.82c-53.148-53.008-117.12-79.516-191.93-79.516-67.488 0-126.55 21.938-177.16 65.805-50.617 43.871-80.988 98.285-91.113 163.25l53.57 4.2188c14.625 0.28125 25.449 6.75 32.48 19.406h18.984c11.809 0 17.715 5.7617 17.715 17.293s-5.9062 17.293-17.715 17.293h-17.297c-6.75 14.344-18.137 21.797-34.168 22.359l-53.57 4.6406c10.125 64.68 40.496 118.95 91.113 162.82 50.617 43.871 109.68 65.805 177.16 65.805 74.805 0 138.78-26.574 191.93-79.723 53.152-53.148 79.727-116.98 79.727-191.51 0-75.086-26.574-139.13-79.727-192.14zm-79.422 185.27c0 2.9531 2.3906 5.3477 5.3438 5.3477 2.9531 0 5.3477-2.3945 5.3477-5.3477 0-2.9492-2.3945-5.3438-5.3477-5.3438-2.9531 0-5.3438 2.3945-5.3438 5.3438zm-104.54-111.07c0 2.9531 2.3945 5.3477 5.3438 5.3477 2.9531 0 5.3477-2.3945 5.3477-5.3477s-2.3945-5.3438-5.3477-5.3438c-2.9492 0-5.3438 2.3906-5.3438 5.3438zm-12.473 0c0 2.9531 2.3906 5.3477 5.3438 5.3477s5.3477-2.3945 5.3477-5.3477-2.3945-5.3438-5.3477-5.3438-5.3438 2.3906-5.3438 5.3438zm117.01 123.55c0 2.9492 2.3906 5.3438 5.3438 5.3438 2.9531 0 5.3477-2.3945 5.3477-5.3438 0-2.9531-2.3945-5.3477-5.3477-5.3477-2.9531 0-5.3438 2.3945-5.3438 5.3477zm-104.54 111.66c0 2.9531 2.3945 5.3477 5.3438 5.3477 2.9531 0 5.3477-2.3945 5.3477-5.3477s-2.3945-5.3438-5.3477-5.3438c-2.9492 0-5.3438 2.3906-5.3438 5.3438zm-12.473 0c0 2.9531 2.3906 5.3477 5.3438 5.3477s5.3477-2.3945 5.3477-5.3477-2.3945-5.3438-5.3477-5.3438-5.3438 2.3906-5.3438 5.3438zm-848-318.48c14.062-2.5312 30.934-4.5 50.621-5.9062l-46.402-0.84375zm499.86 169.15c-8.7188-2.25-18.141-8.7188-28.266-19.402l-101.23-103.35h-111.36l173.79 126.12v4.2188c21.652 6.1836 44.008 3.6562 67.07-7.5938zm47.664-148.48c-0.84375 3.3711-2.8125 6.6055-5.9062 9.6992h-5.0625l-6.3242-5.0625h-79.305v-4.6367zm-5.9062-16.031c3.0938 3.0938 5.0625 6.4688 5.9062 10.125h-96.598v-4.6406h79.305l6.3242-5.4844zm-541.62 397.78 4.2188 6.7461 46.402-0.84375c-22.5-2.2461-39.371-4.2148-50.621-5.9023zm499.86-169.15c-23.062-11.531-45.418-14.062-67.07-7.5938v4.2188l-173.79 126.12h111.36l101.23-103.77c10.406-10.684 19.828-17.012 28.266-18.98zm47.664 148.48h-96.598v-4.6406h79.305l6.3242-5.4805h5.0625c3.0938 3.6523 5.0625 7.0273 5.9062 10.121zm-5.9062 15.609h-5.0625l-6.3242-5.0625h-79.305v-4.6406h96.598c-0.84375 3.0938-2.8125 6.3281-5.9062 9.7031zm-102.5 9.6992c3.6562 1.4062 7.4531 2.1094 11.391 2.1094h64.961c24.746 0 37.121-8.4336 37.121-25.309 0-8.4375-4.6406-14.691-13.922-18.77-9.2773-4.0781-17.012-6.1172-23.199-6.1172h-64.961c-4.7812 0-8.5781 0.5625-11.391 1.6875h-333.66c-5.0625 0-28.543 1.6172-70.445 4.8516-41.902 3.2344-62.852 7.3828-62.852 12.441v11.812c0 4.5 20.949 8.5078 62.852 12.023 41.902 3.5156 65.383 5.2695 70.445 5.2695zm125.28-207.54h-42.602c-3.375 1.125-3.375 2.25 0 3.375h42.602zm-43.445 8.4375h-5.4844v-13.5h5.4844c17.152-6.1875 33.605-9.9844 49.352-11.391l4.6406-25.309 4.6406 0.42188c0.5625-4.2188 1.6875-10.262 3.375-18.137-28.684-0.5625-64.398 1.6875-107.14 6.75 3.6562 4.2148 7.4531 7.8711 11.391 10.965 4.7812 3.375 9.4219 5.625 13.918 6.75l12.656 2.9531-11.812 5.9062c-13.496 6.75-30.23 10.121-50.195 10.121-5.0625 0-8.5781-0.14062-10.547-0.42188-4.2188-0.5625-7.5898-1.1211-10.121-1.6836l-3.375-1.2656v-5.4844l-24.043-17.297c-41.34 5.625-69.32 8.5781-83.945 8.8594-31.496 0.28125-47.242 11.953-47.242 35.012 0 22.215 15.746 33.887 47.242 35.012 18.844 0.28125 46.824 3.2344 83.945 8.8594l24.043-17.297v-5.4844l3.375-1.2656c2.5312-0.84375 5.9023-1.4062 10.121-1.6875 1.9688-0.28125 5.4844-0.42187 10.547-0.42187 19.965 0 36.699 3.375 50.195 10.125l11.812 5.4844-12.656 3.375c-4.4961 0.84375-9.1367 3.0938-13.918 6.75-3.6562 2.2461-7.4531 5.7617-11.391 10.543 40.777 5.0625 76.492 7.4531 107.14 7.1719-1.6875-7.3125-2.8125-13.359-3.375-18.137h-4.6406l-4.6406-24.891c-17.434-2.25-33.887-6.043-49.352-11.387zm48.508-20.25c-12.652 1.6875-23.762 3.9375-33.324 6.75h29.105l3.7969-4.2188zm-4.2188 20.25h-29.105c9.5625 2.5312 20.672 4.7812 33.324 6.7461l-0.42188-2.5273zm136.67-8.4375c0-8.4375-4.2188-12.656-12.652-12.656h-21.516c-6.4688-12.652-16.59-18.98-30.371-18.98l-58.211-5.0625-5.9062 29.527-4.2188 5.0625v7.5938l4.2188 5.0625 5.9062 29.105 58.211-5.0625c15.469 0 26.012-7.3125 31.637-21.934h20.25c8.4336 0 12.652-4.2188 12.652-12.656zm-46.82 1.6875c0-11.531-5.9062-17.297-17.719-17.297-11.527 0-17.293 5.7656-17.293 17.297 0 11.812 5.7656 17.715 17.293 17.715 11.812 0 17.719-5.9023 17.719-17.715zm4.6406 0c0 14.902-7.4531 22.355-22.359 22.355-14.902 0-22.355-7.4531-22.355-22.355 0-14.906 7.4531-22.355 22.355-22.355 14.906 0 22.359 7.4492 22.359 22.355zm-13.922 0c0-5.625-2.8125-8.4375-8.4375-8.4375-5.3438 0-8.0156 2.8125-8.0156 8.4375s2.6719 8.4375 8.0156 8.4375c5.625 0 8.4375-2.8125 8.4375-8.4375zm4.6406 0c0 8.7188-4.3594 13.078-13.078 13.078-8.4375 0-12.652-4.3594-12.652-13.078s4.2148-13.078 12.652-13.078c8.7188 0 13.078 4.3594 13.078 13.078zm-43.871-2.1094v4.2188h-35.012v-4.2188zm258.58 2.1094c-0.5625-8.4375-4.7812-12.656-12.656-12.656-8.4336 0-12.652 4.2188-12.652 12.656s4.2188 12.656 12.652 12.656c8.4375 0 12.656-4.2188 12.656-12.656zm4.6406 0c0 11.531-5.7656 17.293-17.297 17.293-11.527 0-17.293-5.7617-17.293-17.293s5.7656-17.297 17.293-17.297c11.531 0 17.297 5.7656 17.297 17.297zm32.48 0c0-13.781-4.9219-25.59-14.766-35.434-9.5586-9.5625-21.23-14.344-35.012-14.344-15.184 0-31.777 5.7656-49.773 17.297-18.559 11.531-27.84 22.355-27.84 32.48 0 9.8438 9.2812 20.668 27.84 32.48 17.996 11.531 34.59 17.293 49.773 17.293 13.781 0 25.453-4.918 35.012-14.762 9.8438-9.5625 14.766-21.234 14.766-35.012zm5.0625 0c0 14.902-5.3438 27.699-16.031 38.387-10.684 10.684-23.621 16.027-38.809 16.027-15.746 0-33.18-6.0469-52.305-18.137-20.246-12.656-30.371-24.746-30.371-36.277s10.125-23.762 30.371-36.699c19.125-12.094 36.559-18.137 52.305-18.137 14.625 0 27.562 5.3398 38.809 16.027 10.688 10.969 16.031 23.902 16.031 38.809zm-54.418-29.105c-3.9336 0-10.262 1.6875-18.98 5.0625-7.875 3.9375-11.812 6.4648-11.812 7.5898v32.48c0 3.0938 3.9375 5.625 11.812 7.5938 7.875 3.375 14.203 5.0625 18.98 5.0625 19.406 0 29.391-9.2812 29.953-27.84 0-19.688-9.9844-29.668-29.953-29.949zm34.59 29.105v0.84375c0 21.371-11.527 32.34-34.59 32.902-4.4961 0-11.527-1.8281-21.09-5.4844-7.0312-3.9375-10.969-6.3281-11.809-7.1719-1.6875-1.4062-2.5312-3.0938-2.5312-5.0625v-32.48c0-1.4062 0.70312-2.9492 2.1094-4.6367 3.0898-2.8125 7.168-5.2031 12.23-7.1719 9-3.6562 16.031-5.4844 21.09-5.4844 22.5 0.28125 34.027 11.531 34.59 33.746zm-448.4-206.27h-333.66c-5.0625 0-28.543 1.6875-70.445 5.0625-41.902 3.375-62.852 7.5938-62.852 12.656v11.387c0 4.7812 20.949 8.8594 62.852 12.234 41.902 3.375 65.383 5.0625 70.445 5.0625h333.66c3.6562 1.4062 7.4531 2.1094 11.391 2.1094h64.961c5.3438 0 12.867-2.25 22.566-6.75 9.7031-4.5 14.555-10.547 14.555-18.137 0.28125-16.875-12.094-25.312-37.121-25.312h-64.961c-4.7812 0-8.5781 0.5625-11.391 1.6875z" fill-rule="evenodd"/>
4
+ </svg>
@@ -0,0 +1,4 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <svg width="1200pt" height="1200pt" version="1.1" viewBox="0 0 1200 1200" xmlns="http://www.w3.org/2000/svg">
3
+ <path fill="#FFC474" d="m1096.3 402.82c-53.148-53.008-117.12-79.516-191.93-79.516-67.488 0-126.55 21.938-177.16 65.805-50.617 43.871-80.988 98.285-91.113 163.25l53.57 4.2188c14.625 0.28125 25.449 6.75 32.48 19.406h18.984c11.809 0 17.715 5.7617 17.715 17.293s-5.9062 17.293-17.715 17.293h-17.297c-6.75 14.344-18.137 21.797-34.168 22.359l-53.57 4.6406c10.125 64.68 40.496 118.95 91.113 162.82 50.617 43.871 109.68 65.805 177.16 65.805 74.805 0 138.78-26.574 191.93-79.723 53.152-53.148 79.727-116.98 79.727-191.51 0-75.086-26.574-139.13-79.727-192.14zm-79.422 185.27c0 2.9531 2.3906 5.3477 5.3438 5.3477 2.9531 0 5.3477-2.3945 5.3477-5.3477 0-2.9492-2.3945-5.3438-5.3477-5.3438-2.9531 0-5.3438 2.3945-5.3438 5.3438zm-104.54-111.07c0 2.9531 2.3945 5.3477 5.3438 5.3477 2.9531 0 5.3477-2.3945 5.3477-5.3477s-2.3945-5.3438-5.3477-5.3438c-2.9492 0-5.3438 2.3906-5.3438 5.3438zm-12.473 0c0 2.9531 2.3906 5.3477 5.3438 5.3477s5.3477-2.3945 5.3477-5.3477-2.3945-5.3438-5.3477-5.3438-5.3438 2.3906-5.3438 5.3438zm117.01 123.55c0 2.9492 2.3906 5.3438 5.3438 5.3438 2.9531 0 5.3477-2.3945 5.3477-5.3438 0-2.9531-2.3945-5.3477-5.3477-5.3477-2.9531 0-5.3438 2.3945-5.3438 5.3477zm-104.54 111.66c0 2.9531 2.3945 5.3477 5.3438 5.3477 2.9531 0 5.3477-2.3945 5.3477-5.3477s-2.3945-5.3438-5.3477-5.3438c-2.9492 0-5.3438 2.3906-5.3438 5.3438zm-12.473 0c0 2.9531 2.3906 5.3477 5.3438 5.3477s5.3477-2.3945 5.3477-5.3477-2.3945-5.3438-5.3477-5.3438-5.3438 2.3906-5.3438 5.3438zm-848-318.48c14.062-2.5312 30.934-4.5 50.621-5.9062l-46.402-0.84375zm499.86 169.15c-8.7188-2.25-18.141-8.7188-28.266-19.402l-101.23-103.35h-111.36l173.79 126.12v4.2188c21.652 6.1836 44.008 3.6562 67.07-7.5938zm47.664-148.48c-0.84375 3.3711-2.8125 6.6055-5.9062 9.6992h-5.0625l-6.3242-5.0625h-79.305v-4.6367zm-5.9062-16.031c3.0938 3.0938 5.0625 6.4688 5.9062 10.125h-96.598v-4.6406h79.305l6.3242-5.4844zm-541.62 397.78 4.2188 6.7461 46.402-0.84375c-22.5-2.2461-39.371-4.2148-50.621-5.9023zm499.86-169.15c-23.062-11.531-45.418-14.062-67.07-7.5938v4.2188l-173.79 126.12h111.36l101.23-103.77c10.406-10.684 19.828-17.012 28.266-18.98zm47.664 148.48h-96.598v-4.6406h79.305l6.3242-5.4805h5.0625c3.0938 3.6523 5.0625 7.0273 5.9062 10.121zm-5.9062 15.609h-5.0625l-6.3242-5.0625h-79.305v-4.6406h96.598c-0.84375 3.0938-2.8125 6.3281-5.9062 9.7031zm-102.5 9.6992c3.6562 1.4062 7.4531 2.1094 11.391 2.1094h64.961c24.746 0 37.121-8.4336 37.121-25.309 0-8.4375-4.6406-14.691-13.922-18.77-9.2773-4.0781-17.012-6.1172-23.199-6.1172h-64.961c-4.7812 0-8.5781 0.5625-11.391 1.6875h-333.66c-5.0625 0-28.543 1.6172-70.445 4.8516-41.902 3.2344-62.852 7.3828-62.852 12.441v11.812c0 4.5 20.949 8.5078 62.852 12.023 41.902 3.5156 65.383 5.2695 70.445 5.2695zm125.28-207.54h-42.602c-3.375 1.125-3.375 2.25 0 3.375h42.602zm-43.445 8.4375h-5.4844v-13.5h5.4844c17.152-6.1875 33.605-9.9844 49.352-11.391l4.6406-25.309 4.6406 0.42188c0.5625-4.2188 1.6875-10.262 3.375-18.137-28.684-0.5625-64.398 1.6875-107.14 6.75 3.6562 4.2148 7.4531 7.8711 11.391 10.965 4.7812 3.375 9.4219 5.625 13.918 6.75l12.656 2.9531-11.812 5.9062c-13.496 6.75-30.23 10.121-50.195 10.121-5.0625 0-8.5781-0.14062-10.547-0.42188-4.2188-0.5625-7.5898-1.1211-10.121-1.6836l-3.375-1.2656v-5.4844l-24.043-17.297c-41.34 5.625-69.32 8.5781-83.945 8.8594-31.496 0.28125-47.242 11.953-47.242 35.012 0 22.215 15.746 33.887 47.242 35.012 18.844 0.28125 46.824 3.2344 83.945 8.8594l24.043-17.297v-5.4844l3.375-1.2656c2.5312-0.84375 5.9023-1.4062 10.121-1.6875 1.9688-0.28125 5.4844-0.42187 10.547-0.42187 19.965 0 36.699 3.375 50.195 10.125l11.812 5.4844-12.656 3.375c-4.4961 0.84375-9.1367 3.0938-13.918 6.75-3.6562 2.2461-7.4531 5.7617-11.391 10.543 40.777 5.0625 76.492 7.4531 107.14 7.1719-1.6875-7.3125-2.8125-13.359-3.375-18.137h-4.6406l-4.6406-24.891c-17.434-2.25-33.887-6.043-49.352-11.387zm48.508-20.25c-12.652 1.6875-23.762 3.9375-33.324 6.75h29.105l3.7969-4.2188zm-4.2188 20.25h-29.105c9.5625 2.5312 20.672 4.7812 33.324 6.7461l-0.42188-2.5273zm136.67-8.4375c0-8.4375-4.2188-12.656-12.652-12.656h-21.516c-6.4688-12.652-16.59-18.98-30.371-18.98l-58.211-5.0625-5.9062 29.527-4.2188 5.0625v7.5938l4.2188 5.0625 5.9062 29.105 58.211-5.0625c15.469 0 26.012-7.3125 31.637-21.934h20.25c8.4336 0 12.652-4.2188 12.652-12.656zm-46.82 1.6875c0-11.531-5.9062-17.297-17.719-17.297-11.527 0-17.293 5.7656-17.293 17.297 0 11.812 5.7656 17.715 17.293 17.715 11.812 0 17.719-5.9023 17.719-17.715zm4.6406 0c0 14.902-7.4531 22.355-22.359 22.355-14.902 0-22.355-7.4531-22.355-22.355 0-14.906 7.4531-22.355 22.355-22.355 14.906 0 22.359 7.4492 22.359 22.355zm-13.922 0c0-5.625-2.8125-8.4375-8.4375-8.4375-5.3438 0-8.0156 2.8125-8.0156 8.4375s2.6719 8.4375 8.0156 8.4375c5.625 0 8.4375-2.8125 8.4375-8.4375zm4.6406 0c0 8.7188-4.3594 13.078-13.078 13.078-8.4375 0-12.652-4.3594-12.652-13.078s4.2148-13.078 12.652-13.078c8.7188 0 13.078 4.3594 13.078 13.078zm-43.871-2.1094v4.2188h-35.012v-4.2188zm258.58 2.1094c-0.5625-8.4375-4.7812-12.656-12.656-12.656-8.4336 0-12.652 4.2188-12.652 12.656s4.2188 12.656 12.652 12.656c8.4375 0 12.656-4.2188 12.656-12.656zm4.6406 0c0 11.531-5.7656 17.293-17.297 17.293-11.527 0-17.293-5.7617-17.293-17.293s5.7656-17.297 17.293-17.297c11.531 0 17.297 5.7656 17.297 17.297zm32.48 0c0-13.781-4.9219-25.59-14.766-35.434-9.5586-9.5625-21.23-14.344-35.012-14.344-15.184 0-31.777 5.7656-49.773 17.297-18.559 11.531-27.84 22.355-27.84 32.48 0 9.8438 9.2812 20.668 27.84 32.48 17.996 11.531 34.59 17.293 49.773 17.293 13.781 0 25.453-4.918 35.012-14.762 9.8438-9.5625 14.766-21.234 14.766-35.012zm5.0625 0c0 14.902-5.3438 27.699-16.031 38.387-10.684 10.684-23.621 16.027-38.809 16.027-15.746 0-33.18-6.0469-52.305-18.137-20.246-12.656-30.371-24.746-30.371-36.277s10.125-23.762 30.371-36.699c19.125-12.094 36.559-18.137 52.305-18.137 14.625 0 27.562 5.3398 38.809 16.027 10.688 10.969 16.031 23.902 16.031 38.809zm-54.418-29.105c-3.9336 0-10.262 1.6875-18.98 5.0625-7.875 3.9375-11.812 6.4648-11.812 7.5898v32.48c0 3.0938 3.9375 5.625 11.812 7.5938 7.875 3.375 14.203 5.0625 18.98 5.0625 19.406 0 29.391-9.2812 29.953-27.84 0-19.688-9.9844-29.668-29.953-29.949zm34.59 29.105v0.84375c0 21.371-11.527 32.34-34.59 32.902-4.4961 0-11.527-1.8281-21.09-5.4844-7.0312-3.9375-10.969-6.3281-11.809-7.1719-1.6875-1.4062-2.5312-3.0938-2.5312-5.0625v-32.48c0-1.4062 0.70312-2.9492 2.1094-4.6367 3.0898-2.8125 7.168-5.2031 12.23-7.1719 9-3.6562 16.031-5.4844 21.09-5.4844 22.5 0.28125 34.027 11.531 34.59 33.746zm-448.4-206.27h-333.66c-5.0625 0-28.543 1.6875-70.445 5.0625-41.902 3.375-62.852 7.5938-62.852 12.656v11.387c0 4.7812 20.949 8.8594 62.852 12.234 41.902 3.375 65.383 5.0625 70.445 5.0625h333.66c3.6562 1.4062 7.4531 2.1094 11.391 2.1094h64.961c5.3438 0 12.867-2.25 22.566-6.75 9.7031-4.5 14.555-10.547 14.555-18.137 0.28125-16.875-12.094-25.312-37.121-25.312h-64.961c-4.7812 0-8.5781 0.5625-11.391 1.6875z" fill-rule="evenodd"/>
4
+ </svg>
@@ -0,0 +1 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" width="100" height="100"><path d="M91.36 33.566q-6.645-6.623-15.997-6.625-8.439 0-14.761 5.485-6.329 5.484-7.594 13.605l4.465.352Q59.3 46.418 60.18 48h1.582q1.476 0 1.476 1.441 0 1.44-1.476 1.438H60.32q-.843 1.793-2.847 1.863l-4.465.387q1.266 8.085 7.594 13.57t14.761 5.485q9.352 0 15.996-6.645 6.645-6.646 6.645-15.957 0-9.389-6.645-16.012Zm-6.622 15.442a.445.445 0 1 0 .89 0 .445.445 0 0 0-.89 0m-8.71-9.258c0 .246.199.45.445.45a.45.45 0 0 0 .445-.45.445.445 0 1 0-.89 0m-1.04 0c0 .246.2.45.446.45a.45.45 0 0 0 .445-.45.445.445 0 1 0-.89 0m9.75 10.297a.445.445 0 1 0 .89 0 .445.445 0 0 0-.89 0m-8.71 9.305a.445.445 0 1 0 .89 0 .445.445 0 0 0-.89 0m-1.04 0a.445.445 0 1 0 .89 0 .445.445 0 0 0-.89 0M4.32 32.812q1.757-.315 4.22-.492l-3.868-.07ZM45.977 46.91q-1.09-.28-2.356-1.617l-8.437-8.613h-9.278l14.48 10.508v.351q2.708.774 5.59-.633Zm3.972-12.375q-.105.421-.492.809h-.422l-.527-.422h-6.61v-.387Zm-.492-1.336q.387.388.492.844H41.9v-.387h6.609l.527-.457ZM4.32 66.348l.352.562 3.867-.07q-2.812-.282-4.219-.492M45.977 52.25q-2.883-1.44-5.59-.633v.352L25.907 62.48h9.277l8.437-8.648q1.3-1.335 2.356-1.582m3.972 12.375H41.9v-.387h6.609l.527-.457h.422q.387.457.492.844m-.492 1.3h-.422l-.527-.421h-6.61v-.387h8.051q-.105.387-.492.809m-8.543.81q.457.175.95.175h5.413q3.094 0 3.094-2.11 0-1.052-1.16-1.562t-1.934-.511h-5.414q-.598 0-.949.14H13.11q-.633.001-5.87.406-5.24.404-5.239 1.036v.984q0 .561 5.238 1 5.239.44 5.871.441Zm10.441-17.297h-3.55q-.423.14 0 .28h3.55Zm-3.62.703h-.458v-1.125h.457q2.145-.773 4.114-.95l.386-2.109.387.035c.047-.351.14-.851.281-1.508q-3.585-.07-8.93.563.458.523.95.91.597.422 1.16.563l1.055.246-.985.492q-1.688.843-4.183.844-.633 0-.88-.036a10 10 0 0 1-.843-.14l-.281-.106v-.457l-2.004-1.441q-5.162.704-6.992.738-3.938.035-3.938 2.918 0 2.777 3.938 2.918 2.356.036 6.992.738l2.004-1.441v-.457l.281-.106q.316-.105.844-.14.246-.035.879-.035 2.496 0 4.183.843l.985.457-1.055.282q-.563.106-1.16.562-.457.281-.95.88 5.1.631 8.93.597-.21-.915-.28-1.512h-.388l-.386-2.074a20.7 20.7 0 0 1-4.114-.95m4.042-1.688q-1.581.21-2.777.563h2.426l.316-.352Zm-.351 1.688H49q1.196.316 2.777.562l-.035-.21Zm11.386-.703q0-1.055-1.05-1.055h-1.793q-.81-1.582-2.532-1.582l-4.851-.422-.492 2.46-.352.423v.633l.352.421.492 2.426 4.852-.422q1.933 0 2.636-1.828h1.688q1.05 0 1.05-1.054m-3.898.14q0-1.44-1.477-1.441-1.44 0-1.44 1.441 0 1.476 1.44 1.477 1.477 0 1.477-1.477m.387 0q0 1.863-1.864 1.863-1.863 0-1.863-1.863t1.864-1.863 1.863 1.863m-1.16 0q0-.703-.703-.703-.668 0-.668.703t.667.703q.704 0 .704-.703m.386 0q0 1.09-1.09 1.09-1.054 0-1.054-1.09t1.054-1.09q1.09 0 1.09 1.09m-3.656-.176v.352h-2.918v-.352Zm21.547.176q-.07-1.055-1.055-1.055-1.054 0-1.054 1.055t1.054 1.055 1.055-1.055m.387 0q0 1.442-1.442 1.442-1.44 0-1.441-1.442 0-1.44 1.441-1.441 1.442 0 1.442 1.441m2.707 0q0-1.723-1.23-2.953-1.196-1.195-2.919-1.195-1.898 0-4.148 1.441-2.32 1.441-2.32 2.707 0 1.23 2.32 2.707 2.25 1.442 4.148 1.442 1.723 0 2.918-1.23 1.23-1.196 1.23-2.919m.422 0q0 1.863-1.336 3.2-1.337 1.335-3.235 1.335-1.968 0-4.36-1.511-2.53-1.583-2.53-3.024 0-1.44 2.53-3.058c1.595-1.008 3.048-1.508 4.36-1.508 1.219 0 2.297.441 3.235 1.332q1.335 1.371 1.336 3.234m-4.536-2.426q-.492 0-1.582.422-.984.493-.984.633v2.707q0 .387.984.633.985.422 1.582.422 2.427 0 2.497-2.32 0-2.461-2.497-2.497m2.883 2.426v.07q0 2.673-2.883 2.743-.562 0-1.757-.457-.879-.493-.985-.598a.53.53 0 0 1-.21-.422v-2.707q0-.175.175-.387.387-.351 1.02-.597 1.125-.457 1.757-.457 2.813.034 2.883 2.812M40.914 32.391H13.11q-.633 0-5.87.422-5.24.42-5.239 1.054v.95q0 .597 5.238 1.019t5.871.422h27.805q.457.176.95.176h5.413q.667 0 1.88-.563t1.214-1.512q.035-2.109-3.094-2.109h-5.414q-.598 0-.949.14m0 0" style="stroke:none;fill-rule:evenodd;fill:#ffc474;fill-opacity:1"/></svg>
@@ -0,0 +1 @@
1
+ data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxMDAiIGhlaWdodD0iMTAwIj48cGF0aCBkPSJNOTEuMzYgMzMuNTY2cS02LjY0NS02LjYyMy0xNS45OTctNi42MjUtOC40MzkgMC0xNC43NjEgNS40ODUtNi4zMjkgNS40ODQtNy41OTQgMTMuNjA1bDQuNDY1LjM1MlE1OS4zIDQ2LjQxOCA2MC4xOCA0OGgxLjU4MnExLjQ3NiAwIDEuNDc2IDEuNDQxIDAgMS40NC0xLjQ3NiAxLjQzOEg2MC4zMnEtLjg0MyAxLjc5My0yLjg0NyAxLjg2M2wtNC40NjUuMzg3cTEuMjY2IDguMDg1IDcuNTk0IDEzLjU3dDE0Ljc2MSA1LjQ4NXE5LjM1MiAwIDE1Ljk5Ni02LjY0NSA2LjY0NS02LjY0NiA2LjY0NS0xNS45NTcgMC05LjM4OS02LjY0NS0xNi4wMTJabS02LjYyMiAxNS40NDJhLjQ0NS40NDUgMCAxIDAgLjg5IDAgLjQ0NS40NDUgMCAwIDAtLjg5IDBtLTguNzEtOS4yNThjMCAuMjQ2LjE5OS40NS40NDUuNDVhLjQ1LjQ1IDAgMCAwIC40NDUtLjQ1LjQ0NS40NDUgMCAxIDAtLjg5IDBtLTEuMDQgMGMwIC4yNDYuMi40NS40NDYuNDVhLjQ1LjQ1IDAgMCAwIC40NDUtLjQ1LjQ0NS40NDUgMCAxIDAtLjg5IDBtOS43NSAxMC4yOTdhLjQ0NS40NDUgMCAxIDAgLjg5IDAgLjQ0NS40NDUgMCAwIDAtLjg5IDBtLTguNzEgOS4zMDVhLjQ0NS40NDUgMCAxIDAgLjg5IDAgLjQ0NS40NDUgMCAwIDAtLjg5IDBtLTEuMDQgMGEuNDQ1LjQ0NSAwIDEgMCAuODkgMCAuNDQ1LjQ0NSAwIDAgMC0uODkgME00LjMyIDMyLjgxMnExLjc1Ny0uMzE1IDQuMjItLjQ5MmwtMy44NjgtLjA3Wk00NS45NzcgNDYuOTFxLTEuMDktLjI4LTIuMzU2LTEuNjE3bC04LjQzNy04LjYxM2gtOS4yNzhsMTQuNDggMTAuNTA4di4zNTFxMi43MDguNzc0IDUuNTktLjYzM1ptMy45NzItMTIuMzc1cS0uMTA1LjQyMS0uNDkyLjgwOWgtLjQyMmwtLjUyNy0uNDIyaC02LjYxdi0uMzg3Wm0tLjQ5Mi0xLjMzNnEuMzg3LjM4OC40OTIuODQ0SDQxLjl2LS4zODdoNi42MDlsLjUyNy0uNDU3Wk00LjMyIDY2LjM0OGwuMzUyLjU2MiAzLjg2Ny0uMDdxLTIuODEyLS4yODItNC4yMTktLjQ5Mk00NS45NzcgNTIuMjVxLTIuODgzLTEuNDQtNS41OS0uNjMzdi4zNTJMMjUuOTA3IDYyLjQ4aDkuMjc3bDguNDM3LTguNjQ4cTEuMy0xLjMzNSAyLjM1Ni0xLjU4Mm0zLjk3MiAxMi4zNzVINDEuOXYtLjM4N2g2LjYwOWwuNTI3LS40NTdoLjQyMnEuMzg3LjQ1Ny40OTIuODQ0bS0uNDkyIDEuM2gtLjQyMmwtLjUyNy0uNDIxaC02LjYxdi0uMzg3aDguMDUxcS0uMTA1LjM4Ny0uNDkyLjgwOW0tOC41NDMuODFxLjQ1Ny4xNzUuOTUuMTc1aDUuNDEzcTMuMDk0IDAgMy4wOTQtMi4xMSAwLTEuMDUyLTEuMTYtMS41NjJ0LTEuOTM0LS41MTFoLTUuNDE0cS0uNTk4IDAtLjk0OS4xNEgxMy4xMXEtLjYzMy4wMDEtNS44Ny40MDYtNS4yNC40MDQtNS4yMzkgMS4wMzZ2Ljk4NHEwIC41NjEgNS4yMzggMSA1LjIzOS40NCA1Ljg3MS40NDFabTEwLjQ0MS0xNy4yOTdoLTMuNTVxLS40MjMuMTQgMCAuMjhoMy41NVptLTMuNjIuNzAzaC0uNDU4di0xLjEyNWguNDU3cTIuMTQ1LS43NzMgNC4xMTQtLjk1bC4zODYtMi4xMDkuMzg3LjAzNWMuMDQ3LS4zNTEuMTQtLjg1MS4yODEtMS41MDhxLTMuNTg1LS4wNy04LjkzLjU2My40NTguNTIzLjk1LjkxLjU5Ny40MjIgMS4xNi41NjNsMS4wNTUuMjQ2LS45ODUuNDkycS0xLjY4OC44NDMtNC4xODMuODQ0LS42MzMgMC0uODgtLjAzNmExMCAxMCAwIDAgMS0uODQzLS4xNGwtLjI4MS0uMTA2di0uNDU3bC0yLjAwNC0xLjQ0MXEtNS4xNjIuNzA0LTYuOTkyLjczOC0zLjkzOC4wMzUtMy45MzggMi45MTggMCAyLjc3NyAzLjkzOCAyLjkxOCAyLjM1Ni4wMzYgNi45OTIuNzM4bDIuMDA0LTEuNDQxdi0uNDU3bC4yODEtLjEwNnEuMzE2LS4xMDUuODQ0LS4xNC4yNDYtLjAzNS44NzktLjAzNSAyLjQ5NiAwIDQuMTgzLjg0M2wuOTg1LjQ1Ny0xLjA1NS4yODJxLS41NjMuMTA2LTEuMTYuNTYyLS40NTcuMjgxLS45NS44OCA1LjEuNjMxIDguOTMuNTk3LS4yMS0uOTE1LS4yOC0xLjUxMmgtLjM4OGwtLjM4Ni0yLjA3NGEyMC43IDIwLjcgMCAwIDEtNC4xMTQtLjk1bTQuMDQyLTEuNjg4cS0xLjU4MS4yMS0yLjc3Ny41NjNoMi40MjZsLjMxNi0uMzUyWm0tLjM1MSAxLjY4OEg0OXExLjE5Ni4zMTYgMi43NzcuNTYybC0uMDM1LS4yMVptMTEuMzg2LS43MDNxMC0xLjA1NS0xLjA1LTEuMDU1aC0xLjc5M3EtLjgxLTEuNTgyLTIuNTMyLTEuNTgybC00Ljg1MS0uNDIyLS40OTIgMi40Ni0uMzUyLjQyM3YuNjMzbC4zNTIuNDIxLjQ5MiAyLjQyNiA0Ljg1Mi0uNDIycTEuOTMzIDAgMi42MzYtMS44MjhoMS42ODhxMS4wNSAwIDEuMDUtMS4wNTRtLTMuODk4LjE0cTAtMS40NC0xLjQ3Ny0xLjQ0MS0xLjQ0IDAtMS40NCAxLjQ0MSAwIDEuNDc2IDEuNDQgMS40NzcgMS40NzcgMCAxLjQ3Ny0xLjQ3N20uMzg3IDBxMCAxLjg2My0xLjg2NCAxLjg2My0xLjg2MyAwLTEuODYzLTEuODYzdDEuODY0LTEuODYzIDEuODYzIDEuODYzbS0xLjE2IDBxMC0uNzAzLS43MDMtLjcwMy0uNjY4IDAtLjY2OC43MDN0LjY2Ny43MDNxLjcwNCAwIC43MDQtLjcwM20uMzg2IDBxMCAxLjA5LTEuMDkgMS4wOS0xLjA1NCAwLTEuMDU0LTEuMDl0MS4wNTQtMS4wOXExLjA5IDAgMS4wOSAxLjA5bS0zLjY1Ni0uMTc2di4zNTJoLTIuOTE4di0uMzUyWm0yMS41NDcuMTc2cS0uMDctMS4wNTUtMS4wNTUtMS4wNTUtMS4wNTQgMC0xLjA1NCAxLjA1NXQxLjA1NCAxLjA1NSAxLjA1NS0xLjA1NW0uMzg3IDBxMCAxLjQ0Mi0xLjQ0MiAxLjQ0Mi0xLjQ0IDAtMS40NDEtMS40NDIgMC0xLjQ0IDEuNDQxLTEuNDQxIDEuNDQyIDAgMS40NDIgMS40NDFtMi43MDcgMHEwLTEuNzIzLTEuMjMtMi45NTMtMS4xOTYtMS4xOTUtMi45MTktMS4xOTUtMS44OTggMC00LjE0OCAxLjQ0MS0yLjMyIDEuNDQxLTIuMzIgMi43MDcgMCAxLjIzIDIuMzIgMi43MDcgMi4yNSAxLjQ0MiA0LjE0OCAxLjQ0MiAxLjcyMyAwIDIuOTE4LTEuMjMgMS4yMy0xLjE5NiAxLjIzLTIuOTE5bS40MjIgMHEwIDEuODYzLTEuMzM2IDMuMi0xLjMzNyAxLjMzNS0zLjIzNSAxLjMzNS0xLjk2OCAwLTQuMzYtMS41MTEtMi41My0xLjU4My0yLjUzLTMuMDI0IDAtMS40NCAyLjUzLTMuMDU4YzEuNTk1LTEuMDA4IDMuMDQ4LTEuNTA4IDQuMzYtMS41MDggMS4yMTkgMCAyLjI5Ny40NDEgMy4yMzUgMS4zMzJxMS4zMzUgMS4zNzEgMS4zMzYgMy4yMzRtLTQuNTM2LTIuNDI2cS0uNDkyIDAtMS41ODIuNDIyLS45ODQuNDkzLS45ODQuNjMzdjIuNzA3cTAgLjM4Ny45ODQuNjMzLjk4NS40MjIgMS41ODIuNDIyIDIuNDI3IDAgMi40OTctMi4zMiAwLTIuNDYxLTIuNDk3LTIuNDk3bTIuODgzIDIuNDI2di4wN3EwIDIuNjczLTIuODgzIDIuNzQzLS41NjIgMC0xLjc1Ny0uNDU3LS44NzktLjQ5My0uOTg1LS41OThhLjUzLjUzIDAgMCAxLS4yMS0uNDIydi0yLjcwN3EwLS4xNzUuMTc1LS4zODcuMzg3LS4zNTEgMS4wMi0uNTk3IDEuMTI1LS40NTcgMS43NTctLjQ1NyAyLjgxMy4wMzQgMi44ODMgMi44MTJNNDAuOTE0IDMyLjM5MUgxMy4xMXEtLjYzMyAwLTUuODcuNDIyLTUuMjQuNDItNS4yMzkgMS4wNTR2Ljk1cTAgLjU5NyA1LjIzOCAxLjAxOXQ1Ljg3MS40MjJoMjcuODA1cS40NTcuMTc2Ljk1LjE3Nmg1LjQxM3EuNjY3IDAgMS44OC0uNTYzdDEuMjE0LTEuNTEycS4wMzUtMi4xMDktMy4wOTQtMi4xMDloLTUuNDE0cS0uNTk4IDAtLjk0OS4xNG0wIDAiIHN0eWxlPSJzdHJva2U6bm9uZTtmaWxsLXJ1bGU6ZXZlbm9kZDtmaWxsOiNmZmM0NzQ7ZmlsbC1vcGFjaXR5OjEiLz48L3N2Zz4=
@@ -0,0 +1,4 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <svg width="1200pt" height="1200pt" version="1.1" viewBox="0 0 1200 1200" xmlns="http://www.w3.org/2000/svg">
3
+ <path fill="#FFFFFF" d="m1096.3 402.82c-53.148-53.008-117.12-79.516-191.93-79.516-67.488 0-126.55 21.938-177.16 65.805-50.617 43.871-80.988 98.285-91.113 163.25l53.57 4.2188c14.625 0.28125 25.449 6.75 32.48 19.406h18.984c11.809 0 17.715 5.7617 17.715 17.293s-5.9062 17.293-17.715 17.293h-17.297c-6.75 14.344-18.137 21.797-34.168 22.359l-53.57 4.6406c10.125 64.68 40.496 118.95 91.113 162.82 50.617 43.871 109.68 65.805 177.16 65.805 74.805 0 138.78-26.574 191.93-79.723 53.152-53.148 79.727-116.98 79.727-191.51 0-75.086-26.574-139.13-79.727-192.14zm-79.422 185.27c0 2.9531 2.3906 5.3477 5.3438 5.3477 2.9531 0 5.3477-2.3945 5.3477-5.3477 0-2.9492-2.3945-5.3438-5.3477-5.3438-2.9531 0-5.3438 2.3945-5.3438 5.3438zm-104.54-111.07c0 2.9531 2.3945 5.3477 5.3438 5.3477 2.9531 0 5.3477-2.3945 5.3477-5.3477s-2.3945-5.3438-5.3477-5.3438c-2.9492 0-5.3438 2.3906-5.3438 5.3438zm-12.473 0c0 2.9531 2.3906 5.3477 5.3438 5.3477s5.3477-2.3945 5.3477-5.3477-2.3945-5.3438-5.3477-5.3438-5.3438 2.3906-5.3438 5.3438zm117.01 123.55c0 2.9492 2.3906 5.3438 5.3438 5.3438 2.9531 0 5.3477-2.3945 5.3477-5.3438 0-2.9531-2.3945-5.3477-5.3477-5.3477-2.9531 0-5.3438 2.3945-5.3438 5.3477zm-104.54 111.66c0 2.9531 2.3945 5.3477 5.3438 5.3477 2.9531 0 5.3477-2.3945 5.3477-5.3477s-2.3945-5.3438-5.3477-5.3438c-2.9492 0-5.3438 2.3906-5.3438 5.3438zm-12.473 0c0 2.9531 2.3906 5.3477 5.3438 5.3477s5.3477-2.3945 5.3477-5.3477-2.3945-5.3438-5.3477-5.3438-5.3438 2.3906-5.3438 5.3438zm-848-318.48c14.062-2.5312 30.934-4.5 50.621-5.9062l-46.402-0.84375zm499.86 169.15c-8.7188-2.25-18.141-8.7188-28.266-19.402l-101.23-103.35h-111.36l173.79 126.12v4.2188c21.652 6.1836 44.008 3.6562 67.07-7.5938zm47.664-148.48c-0.84375 3.3711-2.8125 6.6055-5.9062 9.6992h-5.0625l-6.3242-5.0625h-79.305v-4.6367zm-5.9062-16.031c3.0938 3.0938 5.0625 6.4688 5.9062 10.125h-96.598v-4.6406h79.305l6.3242-5.4844zm-541.62 397.78 4.2188 6.7461 46.402-0.84375c-22.5-2.2461-39.371-4.2148-50.621-5.9023zm499.86-169.15c-23.062-11.531-45.418-14.062-67.07-7.5938v4.2188l-173.79 126.12h111.36l101.23-103.77c10.406-10.684 19.828-17.012 28.266-18.98zm47.664 148.48h-96.598v-4.6406h79.305l6.3242-5.4805h5.0625c3.0938 3.6523 5.0625 7.0273 5.9062 10.121zm-5.9062 15.609h-5.0625l-6.3242-5.0625h-79.305v-4.6406h96.598c-0.84375 3.0938-2.8125 6.3281-5.9062 9.7031zm-102.5 9.6992c3.6562 1.4062 7.4531 2.1094 11.391 2.1094h64.961c24.746 0 37.121-8.4336 37.121-25.309 0-8.4375-4.6406-14.691-13.922-18.77-9.2773-4.0781-17.012-6.1172-23.199-6.1172h-64.961c-4.7812 0-8.5781 0.5625-11.391 1.6875h-333.66c-5.0625 0-28.543 1.6172-70.445 4.8516-41.902 3.2344-62.852 7.3828-62.852 12.441v11.812c0 4.5 20.949 8.5078 62.852 12.023 41.902 3.5156 65.383 5.2695 70.445 5.2695zm125.28-207.54h-42.602c-3.375 1.125-3.375 2.25 0 3.375h42.602zm-43.445 8.4375h-5.4844v-13.5h5.4844c17.152-6.1875 33.605-9.9844 49.352-11.391l4.6406-25.309 4.6406 0.42188c0.5625-4.2188 1.6875-10.262 3.375-18.137-28.684-0.5625-64.398 1.6875-107.14 6.75 3.6562 4.2148 7.4531 7.8711 11.391 10.965 4.7812 3.375 9.4219 5.625 13.918 6.75l12.656 2.9531-11.812 5.9062c-13.496 6.75-30.23 10.121-50.195 10.121-5.0625 0-8.5781-0.14062-10.547-0.42188-4.2188-0.5625-7.5898-1.1211-10.121-1.6836l-3.375-1.2656v-5.4844l-24.043-17.297c-41.34 5.625-69.32 8.5781-83.945 8.8594-31.496 0.28125-47.242 11.953-47.242 35.012 0 22.215 15.746 33.887 47.242 35.012 18.844 0.28125 46.824 3.2344 83.945 8.8594l24.043-17.297v-5.4844l3.375-1.2656c2.5312-0.84375 5.9023-1.4062 10.121-1.6875 1.9688-0.28125 5.4844-0.42187 10.547-0.42187 19.965 0 36.699 3.375 50.195 10.125l11.812 5.4844-12.656 3.375c-4.4961 0.84375-9.1367 3.0938-13.918 6.75-3.6562 2.2461-7.4531 5.7617-11.391 10.543 40.777 5.0625 76.492 7.4531 107.14 7.1719-1.6875-7.3125-2.8125-13.359-3.375-18.137h-4.6406l-4.6406-24.891c-17.434-2.25-33.887-6.043-49.352-11.387zm48.508-20.25c-12.652 1.6875-23.762 3.9375-33.324 6.75h29.105l3.7969-4.2188zm-4.2188 20.25h-29.105c9.5625 2.5312 20.672 4.7812 33.324 6.7461l-0.42188-2.5273zm136.67-8.4375c0-8.4375-4.2188-12.656-12.652-12.656h-21.516c-6.4688-12.652-16.59-18.98-30.371-18.98l-58.211-5.0625-5.9062 29.527-4.2188 5.0625v7.5938l4.2188 5.0625 5.9062 29.105 58.211-5.0625c15.469 0 26.012-7.3125 31.637-21.934h20.25c8.4336 0 12.652-4.2188 12.652-12.656zm-46.82 1.6875c0-11.531-5.9062-17.297-17.719-17.297-11.527 0-17.293 5.7656-17.293 17.297 0 11.812 5.7656 17.715 17.293 17.715 11.812 0 17.719-5.9023 17.719-17.715zm4.6406 0c0 14.902-7.4531 22.355-22.359 22.355-14.902 0-22.355-7.4531-22.355-22.355 0-14.906 7.4531-22.355 22.355-22.355 14.906 0 22.359 7.4492 22.359 22.355zm-13.922 0c0-5.625-2.8125-8.4375-8.4375-8.4375-5.3438 0-8.0156 2.8125-8.0156 8.4375s2.6719 8.4375 8.0156 8.4375c5.625 0 8.4375-2.8125 8.4375-8.4375zm4.6406 0c0 8.7188-4.3594 13.078-13.078 13.078-8.4375 0-12.652-4.3594-12.652-13.078s4.2148-13.078 12.652-13.078c8.7188 0 13.078 4.3594 13.078 13.078zm-43.871-2.1094v4.2188h-35.012v-4.2188zm258.58 2.1094c-0.5625-8.4375-4.7812-12.656-12.656-12.656-8.4336 0-12.652 4.2188-12.652 12.656s4.2188 12.656 12.652 12.656c8.4375 0 12.656-4.2188 12.656-12.656zm4.6406 0c0 11.531-5.7656 17.293-17.297 17.293-11.527 0-17.293-5.7617-17.293-17.293s5.7656-17.297 17.293-17.297c11.531 0 17.297 5.7656 17.297 17.297zm32.48 0c0-13.781-4.9219-25.59-14.766-35.434-9.5586-9.5625-21.23-14.344-35.012-14.344-15.184 0-31.777 5.7656-49.773 17.297-18.559 11.531-27.84 22.355-27.84 32.48 0 9.8438 9.2812 20.668 27.84 32.48 17.996 11.531 34.59 17.293 49.773 17.293 13.781 0 25.453-4.918 35.012-14.762 9.8438-9.5625 14.766-21.234 14.766-35.012zm5.0625 0c0 14.902-5.3438 27.699-16.031 38.387-10.684 10.684-23.621 16.027-38.809 16.027-15.746 0-33.18-6.0469-52.305-18.137-20.246-12.656-30.371-24.746-30.371-36.277s10.125-23.762 30.371-36.699c19.125-12.094 36.559-18.137 52.305-18.137 14.625 0 27.562 5.3398 38.809 16.027 10.688 10.969 16.031 23.902 16.031 38.809zm-54.418-29.105c-3.9336 0-10.262 1.6875-18.98 5.0625-7.875 3.9375-11.812 6.4648-11.812 7.5898v32.48c0 3.0938 3.9375 5.625 11.812 7.5938 7.875 3.375 14.203 5.0625 18.98 5.0625 19.406 0 29.391-9.2812 29.953-27.84 0-19.688-9.9844-29.668-29.953-29.949zm34.59 29.105v0.84375c0 21.371-11.527 32.34-34.59 32.902-4.4961 0-11.527-1.8281-21.09-5.4844-7.0312-3.9375-10.969-6.3281-11.809-7.1719-1.6875-1.4062-2.5312-3.0938-2.5312-5.0625v-32.48c0-1.4062 0.70312-2.9492 2.1094-4.6367 3.0898-2.8125 7.168-5.2031 12.23-7.1719 9-3.6562 16.031-5.4844 21.09-5.4844 22.5 0.28125 34.027 11.531 34.59 33.746zm-448.4-206.27h-333.66c-5.0625 0-28.543 1.6875-70.445 5.0625-41.902 3.375-62.852 7.5938-62.852 12.656v11.387c0 4.7812 20.949 8.8594 62.852 12.234 41.902 3.375 65.383 5.0625 70.445 5.0625h333.66c3.6562 1.4062 7.4531 2.1094 11.391 2.1094h64.961c5.3438 0 12.867-2.25 22.566-6.75 9.7031-4.5 14.555-10.547 14.555-18.137 0.28125-16.875-12.094-25.312-37.121-25.312h-64.961c-4.7812 0-8.5781 0.5625-11.391 1.6875z" fill-rule="evenodd"/>
4
+ </svg>
@@ -0,0 +1,4 @@
1
+ # Autogeneration Notice
2
+
3
+ This directory is maintained in the root of the monorepo and sync'd to public
4
+ repositories by running `bun sync-logos`
@@ -0,0 +1,2 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="75" height="20" role="img" aria-label="Api Docs"><title>Api Docs</title><linearGradient id="s" x2="0" y2="100%"><stop offset="0" stop-color="#bbb" stop-opacity=".1"/><stop offset="1" stop-opacity=".1"/></linearGradient><clipPath id="r"><rect width="75" height="20" rx="3" fill="#fff"/></clipPath><g clip-path="url(#r)"><rect width="0" height="20" fill="#555"/><rect x="0" width="75" height="20" fill="#555"/><rect width="75" height="20" fill="url(#s)"/></g><g fill="#fff" text-anchor="middle" font-family="Verdana,Geneva,DejaVu Sans,sans-serif" text-rendering="geometricPrecision" font-size="110"><image x="5" y="3" width="14" height="14" xlink:href="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxMDAiIGhlaWdodD0iMTAwIj48cGF0aCBkPSJNOTEuMzYgMzMuNTY2cS02LjY0NS02LjYyMy0xNS45OTctNi42MjUtOC40MzkgMC0xNC43NjEgNS40ODUtNi4zMjkgNS40ODQtNy41OTQgMTMuNjA1bDQuNDY1LjM1MlE1OS4zIDQ2LjQxOCA2MC4xOCA0OGgxLjU4MnExLjQ3NiAwIDEuNDc2IDEuNDQxIDAgMS40NC0xLjQ3NiAxLjQzOEg2MC4zMnEtLjg0MyAxLjc5My0yLjg0NyAxLjg2M2wtNC40NjUuMzg3cTEuMjY2IDguMDg1IDcuNTk0IDEzLjU3dDE0Ljc2MSA1LjQ4NXE5LjM1MiAwIDE1Ljk5Ni02LjY0NSA2LjY0NS02LjY0NiA2LjY0NS0xNS45NTcgMC05LjM4OS02LjY0NS0xNi4wMTJabS02LjYyMiAxNS40NDJhLjQ0NS40NDUgMCAxIDAgLjg5IDAgLjQ0NS40NDUgMCAwIDAtLjg5IDBtLTguNzEtOS4yNThjMCAuMjQ2LjE5OS40NS40NDUuNDVhLjQ1LjQ1IDAgMCAwIC40NDUtLjQ1LjQ0NS40NDUgMCAxIDAtLjg5IDBtLTEuMDQgMGMwIC4yNDYuMi40NS40NDYuNDVhLjQ1LjQ1IDAgMCAwIC40NDUtLjQ1LjQ0NS40NDUgMCAxIDAtLjg5IDBtOS43NSAxMC4yOTdhLjQ0NS40NDUgMCAxIDAgLjg5IDAgLjQ0NS40NDUgMCAwIDAtLjg5IDBtLTguNzEgOS4zMDVhLjQ0NS40NDUgMCAxIDAgLjg5IDAgLjQ0NS40NDUgMCAwIDAtLjg5IDBtLTEuMDQgMGEuNDQ1LjQ0NSAwIDEgMCAuODkgMCAuNDQ1LjQ0NSAwIDAgMC0uODkgME00LjMyIDMyLjgxMnExLjc1Ny0uMzE1IDQuMjItLjQ5MmwtMy44NjgtLjA3Wk00NS45NzcgNDYuOTFxLTEuMDktLjI4LTIuMzU2LTEuNjE3bC04LjQzNy04LjYxM2gtOS4yNzhsMTQuNDggMTAuNTA4di4zNTFxMi43MDguNzc0IDUuNTktLjYzM1ptMy45NzItMTIuMzc1cS0uMTA1LjQyMS0uNDkyLjgwOWgtLjQyMmwtLjUyNy0uNDIyaC02LjYxdi0uMzg3Wm0tLjQ5Mi0xLjMzNnEuMzg3LjM4OC40OTIuODQ0SDQxLjl2LS4zODdoNi42MDlsLjUyNy0uNDU3Wk00LjMyIDY2LjM0OGwuMzUyLjU2MiAzLjg2Ny0uMDdxLTIuODEyLS4yODItNC4yMTktLjQ5Mk00NS45NzcgNTIuMjVxLTIuODgzLTEuNDQtNS41OS0uNjMzdi4zNTJMMjUuOTA3IDYyLjQ4aDkuMjc3bDguNDM3LTguNjQ4cTEuMy0xLjMzNSAyLjM1Ni0xLjU4Mm0zLjk3MiAxMi4zNzVINDEuOXYtLjM4N2g2LjYwOWwuNTI3LS40NTdoLjQyMnEuMzg3LjQ1Ny40OTIuODQ0bS0uNDkyIDEuM2gtLjQyMmwtLjUyNy0uNDIxaC02LjYxdi0uMzg3aDguMDUxcS0uMTA1LjM4Ny0uNDkyLjgwOW0tOC41NDMuODFxLjQ1Ny4xNzUuOTUuMTc1aDUuNDEzcTMuMDk0IDAgMy4wOTQtMi4xMSAwLTEuMDUyLTEuMTYtMS41NjJ0LTEuOTM0LS41MTFoLTUuNDE0cS0uNTk4IDAtLjk0OS4xNEgxMy4xMXEtLjYzMy4wMDEtNS44Ny40MDYtNS4yNC40MDQtNS4yMzkgMS4wMzZ2Ljk4NHEwIC41NjEgNS4yMzggMSA1LjIzOS40NCA1Ljg3MS40NDFabTEwLjQ0MS0xNy4yOTdoLTMuNTVxLS40MjMuMTQgMCAuMjhoMy41NVptLTMuNjIuNzAzaC0uNDU4di0xLjEyNWguNDU3cTIuMTQ1LS43NzMgNC4xMTQtLjk1bC4zODYtMi4xMDkuMzg3LjAzNWMuMDQ3LS4zNTEuMTQtLjg1MS4yODEtMS41MDhxLTMuNTg1LS4wNy04LjkzLjU2My40NTguNTIzLjk1LjkxLjU5Ny40MjIgMS4xNi41NjNsMS4wNTUuMjQ2LS45ODUuNDkycS0xLjY4OC44NDMtNC4xODMuODQ0LS42MzMgMC0uODgtLjAzNmExMCAxMCAwIDAgMS0uODQzLS4xNGwtLjI4MS0uMTA2di0uNDU3bC0yLjAwNC0xLjQ0MXEtNS4xNjIuNzA0LTYuOTkyLjczOC0zLjkzOC4wMzUtMy45MzggMi45MTggMCAyLjc3NyAzLjkzOCAyLjkxOCAyLjM1Ni4wMzYgNi45OTIuNzM4bDIuMDA0LTEuNDQxdi0uNDU3bC4yODEtLjEwNnEuMzE2LS4xMDUuODQ0LS4xNC4yNDYtLjAzNS44NzktLjAzNSAyLjQ5NiAwIDQuMTgzLjg0M2wuOTg1LjQ1Ny0xLjA1NS4yODJxLS41NjMuMTA2LTEuMTYuNTYyLS40NTcuMjgxLS45NS44OCA1LjEuNjMxIDguOTMuNTk3LS4yMS0uOTE1LS4yOC0xLjUxMmgtLjM4OGwtLjM4Ni0yLjA3NGEyMC43IDIwLjcgMCAwIDEtNC4xMTQtLjk1bTQuMDQyLTEuNjg4cS0xLjU4MS4yMS0yLjc3Ny41NjNoMi40MjZsLjMxNi0uMzUyWm0tLjM1MSAxLjY4OEg0OXExLjE5Ni4zMTYgMi43NzcuNTYybC0uMDM1LS4yMVptMTEuMzg2LS43MDNxMC0xLjA1NS0xLjA1LTEuMDU1aC0xLjc5M3EtLjgxLTEuNTgyLTIuNTMyLTEuNTgybC00Ljg1MS0uNDIyLS40OTIgMi40Ni0uMzUyLjQyM3YuNjMzbC4zNTIuNDIxLjQ5MiAyLjQyNiA0Ljg1Mi0uNDIycTEuOTMzIDAgMi42MzYtMS44MjhoMS42ODhxMS4wNSAwIDEuMDUtMS4wNTRtLTMuODk4LjE0cTAtMS40NC0xLjQ3Ny0xLjQ0MS0xLjQ0IDAtMS40NCAxLjQ0MSAwIDEuNDc2IDEuNDQgMS40NzcgMS40NzcgMCAxLjQ3Ny0xLjQ3N20uMzg3IDBxMCAxLjg2My0xLjg2NCAxLjg2My0xLjg2MyAwLTEuODYzLTEuODYzdDEuODY0LTEuODYzIDEuODYzIDEuODYzbS0xLjE2IDBxMC0uNzAzLS43MDMtLjcwMy0uNjY4IDAtLjY2OC43MDN0LjY2Ny43MDNxLjcwNCAwIC43MDQtLjcwM20uMzg2IDBxMCAxLjA5LTEuMDkgMS4wOS0xLjA1NCAwLTEuMDU0LTEuMDl0MS4wNTQtMS4wOXExLjA5IDAgMS4wOSAxLjA5bS0zLjY1Ni0uMTc2di4zNTJoLTIuOTE4di0uMzUyWm0yMS41NDcuMTc2cS0uMDctMS4wNTUtMS4wNTUtMS4wNTUtMS4wNTQgMC0xLjA1NCAxLjA1NXQxLjA1NCAxLjA1NSAxLjA1NS0xLjA1NW0uMzg3IDBxMCAxLjQ0Mi0xLjQ0MiAxLjQ0Mi0xLjQ0IDAtMS40NDEtMS40NDIgMC0xLjQ0IDEuNDQxLTEuNDQxIDEuNDQyIDAgMS40NDIgMS40NDFtMi43MDcgMHEwLTEuNzIzLTEuMjMtMi45NTMtMS4xOTYtMS4xOTUtMi45MTktMS4xOTUtMS44OTggMC00LjE0OCAxLjQ0MS0yLjMyIDEuNDQxLTIuMzIgMi43MDcgMCAxLjIzIDIuMzIgMi43MDcgMi4yNSAxLjQ0MiA0LjE0OCAxLjQ0MiAxLjcyMyAwIDIuOTE4LTEuMjMgMS4yMy0xLjE5NiAxLjIzLTIuOTE5bS40MjIgMHEwIDEuODYzLTEuMzM2IDMuMi0xLjMzNyAxLjMzNS0zLjIzNSAxLjMzNS0xLjk2OCAwLTQuMzYtMS41MTEtMi41My0xLjU4My0yLjUzLTMuMDI0IDAtMS40NCAyLjUzLTMuMDU4YzEuNTk1LTEuMDA4IDMuMDQ4LTEuNTA4IDQuMzYtMS41MDggMS4yMTkgMCAyLjI5Ny40NDEgMy4yMzUgMS4zMzJxMS4zMzUgMS4zNzEgMS4zMzYgMy4yMzRtLTQuNTM2LTIuNDI2cS0uNDkyIDAtMS41ODIuNDIyLS45ODQuNDkzLS45ODQuNjMzdjIuNzA3cTAgLjM4Ny45ODQuNjMzLjk4NS40MjIgMS41ODIuNDIyIDIuNDI3IDAgMi40OTctMi4zMiAwLTIuNDYxLTIuNDk3LTIuNDk3bTIuODgzIDIuNDI2di4wN3EwIDIuNjczLTIuODgzIDIuNzQzLS41NjIgMC0xLjc1Ny0uNDU3LS44NzktLjQ5My0uOTg1LS41OThhLjUzLjUzIDAgMCAxLS4yMS0uNDIydi0yLjcwN3EwLS4xNzUuMTc1LS4zODcuMzg3LS4zNTEgMS4wMi0uNTk3IDEuMTI1LS40NTcgMS43NTctLjQ1NyAyLjgxMy4wMzQgMi44ODMgMi44MTJNNDAuOTE0IDMyLjM5MUgxMy4xMXEtLjYzMyAwLTUuODcuNDIyLTUuMjQuNDItNS4yMzkgMS4wNTR2Ljk1cTAgLjU5NyA1LjIzOCAxLjAxOXQ1Ljg3MS40MjJoMjcuODA1cS40NTcuMTc2Ljk1LjE3Nmg1LjQxM3EuNjY3IDAgMS44OC0uNTYzdDEuMjE0LTEuNTEycS4wMzUtMi4xMDktMy4wOTQtMi4xMDloLTUuNDE0cS0uNTk4IDAtLjk0OS4xNG0wIDAiIHN0eWxlPSJzdHJva2U6bm9uZTtmaWxsLXJ1bGU6ZXZlbm9kZDtmaWxsOiNmZmM0NzQ7ZmlsbC1vcGFjaXR5OjEiLz48L3N2Zz4=
2
+ "/><text aria-hidden="true" x="465" y="150" fill="#010101" fill-opacity=".3" transform="scale(.1)" textLength="470">Api Docs</text><text x="465" y="140" transform="scale(.1)" fill="#fff" textLength="470">Api Docs</text></g></svg>
@@ -0,0 +1,12 @@
1
+ <svg width="1028" height="324" viewBox="0 0 1028 324" xmlns="http://www.w3.org/2000/svg">
2
+ <g transform="translate(76.041 42)" fill="none" fill-rule="evenodd">
3
+ <g fill="#E04E39">
4
+ <path d="M507.552 137.229s-12.56 9.744-23.616 8.656c-11.056-1.088-7.584-25.792-7.584-25.792s2.384-22.656-4.128-24.56c-6.496-1.888-14.512 5.904-14.512 5.904s-9.968 11.056-14.736 25.152l-1.312.432s1.52-24.72-.208-30.352c-1.296-2.816-13.216-2.592-15.168 2.384-1.952 4.992-11.488 39.664-12.144 54.192 0 0-18.64 15.824-34.88 18.416-16.256 2.608-20.16-7.584-20.16-7.584s44.208-12.352 42.688-47.68c-1.504-35.328-35.648-22.256-39.504-19.36-3.744 2.816-23.696 14.848-29.52 48.176-.192 1.12-.544 6.08-.544 6.08s-17.12 11.472-26.656 14.512c0 0 26.656-44.864-5.84-65.232-9.14-5.502-17.106-.44-21.845 4.208-2.91 2.854 39.397-43.424 29.637-84.832C302.88.237 293.024-1.875 283.984 1.325c-13.728 5.408-18.928 13.424-18.928 13.424s-17.776 25.792-21.904 64.16c-4.112 38.352-10.176 84.736-10.176 84.736s-8.464 8.24-16.256 8.672c-7.808.416-4.336-23.2-4.336-23.2s6.064-35.968 5.648-42.048c-.448-6.064-.88-9.312-8.032-11.472-7.152-2.176-14.96 6.928-14.96 6.928s-20.576 31.2-22.304 35.968l-1.104 1.968-1.072-1.312s14.512-42.48.656-43.12c-13.872-.656-22.976 15.168-22.976 15.168s-15.824 26.448-16.48 29.472l-1.072-1.296s6.496-30.768 5.2-38.368c-1.312-7.584-8.448-6.064-8.448-6.064s-9.104-1.088-11.488 4.768c-2.384 5.856-11.056 44.64-12.144 56.992 0 0-22.752 16.256-37.712 16.464-14.944.224-13.424-9.472-13.424-9.472s54.832-18.768 39.872-55.824c-6.72-9.536-14.512-12.528-25.568-12.32-11.056.224-24.768 6.96-33.648 26.896-4.256 9.504-5.792 18.544-6.672 25.36 0 0-9.584 1.968-14.784-2.368-5.216-4.336-7.888 0-7.888 0s-8.928 11.392-.048 14.848c8.896 3.472 22.752 5.088 22.752 5.088 1.28 6.064 4.976 16.384 15.808 24.592 16.256 12.352 47.44-1.136 47.44-1.136l12.784-7.168s.432 11.728 9.76 13.44c9.312 1.712 13.216-.032 29.472-39.472 9.536-20.16 10.192-19.072 10.192-19.072 1.072-.224-6.288 38.352-3.472 48.752 2.816 10.416 15.168 9.328 15.168 9.328s6.72 1.296 12.144-17.776c5.408-19.072 15.824-40.096 15.824-40.096 1.28 0-3.264 39.44 3.664 52.016 6.944 12.576 24.928 4.224 24.928 4.224s12.576-6.336 14.528-8.288c0 0 14.912 12.704 35.952 10.4 47.04-9.264 63.776-21.776 63.776-21.776s8.08 20.48 33.12 22.384c28.592 2.16 44.208-15.824 44.208-15.824s-.224 11.696 9.744 15.824c9.984 4.112 16.688-19.04 16.688-19.04l16.688-45.984c1.52 0 2.384 29.904 18.864 34.672 16.464 4.768 37.92-11.168 37.92-11.168s5.2-2.864 4.336-11.536c-.88-8.672-8.672-5.44-8.672-5.44zm-434.08-21.696c5.84 5.632 3.68 17.76-7.376 25.344-11.04 7.6-16.032 6.08-16.032 6.08.656-25.792 17.568-37.072 23.408-31.424zM289.104 26.46c3.68 19.504-32.288 77.584-32.288 77.584.432-13.008 13.216-56.992 13.216-56.992s15.376-40.096 19.072-20.592zm-35.552 148.016s-2.816-9.536 5.2-36.192c8.032-26.656 26.88-16.256 26.88-16.256s13.008 9.968 2.816 36.624c-10.176 26.656-34.896 15.824-34.896 15.824zm109.664-52.224c8.88-16.256 15.824-7.376 15.824-7.376s7.584 8.24-1.088 20.592c-8.672 12.352-21.232 11.488-21.232 11.488s-2.384-8.464 6.496-24.704z"/>
5
+ <path d="M451.918 188.027v-3.112h1.974c.273 0 .547.028.835.057.288.043.562.115.793.216.245.101.432.245.576.433.159.187.23.446.23.763 0 .72-.216 1.182-.648 1.369-.432.187-.994.274-1.671.274h-2.09zm-2.349-4.942v11.843h2.349v-5.057h1.47l2.881 5.057h2.464l-3.17-5.172c.432-.044.836-.13 1.225-.26.374-.13.706-.317.98-.562.288-.245.504-.562.662-.95.173-.39.245-.85.245-1.398 0-1.282-.403-2.19-1.196-2.709-.807-.533-1.96-.792-3.443-.792h-4.467zm-3.76 5.936c0-1.21.201-2.32.62-3.328a8.09 8.09 0 0 1 1.7-2.608 7.71 7.71 0 0 1 2.52-1.73 7.864 7.864 0 0 1 3.127-.619c1.095 0 2.133.202 3.098.62.98.418 1.816.994 2.536 1.729.72.735 1.282 1.599 1.714 2.608.418 1.008.634 2.118.634 3.328s-.216 2.32-.634 3.342c-.432 1.009-.994 1.902-1.714 2.637a7.594 7.594 0 0 1-2.536 1.744 7.725 7.725 0 0 1-3.098.619 7.864 7.864 0 0 1-3.126-.62 7.535 7.535 0 0 1-2.522-1.743c-.72-.735-1.282-1.628-1.7-2.637-.418-1.022-.62-2.132-.62-3.342zm-2.896 0c0 1.628.302 3.083.893 4.38.605 1.311 1.398 2.42 2.392 3.343a10.57 10.57 0 0 0 3.472 2.117c1.311.49 2.68.735 4.106.735 1.441 0 2.81-.245 4.121-.735a10.57 10.57 0 0 0 3.472-2.117c.995-.923 1.787-2.032 2.392-3.343.59-1.297.879-2.752.879-4.38 0-1.6-.288-3.055-.879-4.351-.605-1.312-1.397-2.42-2.392-3.329a10.57 10.57 0 0 0-3.472-2.118 11.356 11.356 0 0 0-4.12-.749c-1.427 0-2.796.245-4.107.75a10.57 10.57 0 0 0-3.472 2.117c-.994.908-1.787 2.017-2.392 3.329-.59 1.296-.893 2.752-.893 4.35z"/>
6
+ </g>
7
+ <path d="M589.663 44.545c.42-4.718.63-8.462.63-11.226 0-3.638-.33-6.168-.975-7.583-.646-1.416-1.592-2.124-2.823-2.124-2.207 0-4.19 1.365-5.976 4.093-1.772 2.73-3.198 6.25-4.295 10.556-1.08 4.31-2.252 8.992-3.528 14.05-1.263 5.061-2.192 10.016-2.793 14.863-.57 4.85-1.051 9.221-1.397 13.115-.36 3.889-.615 6.654-.75 8.296-.3 3.348-.54 6.575-.721 9.68-.18 3.108-.315 5.943-.39 8.503a225.54 225.54 0 0 0-.107 6.71v5.432A515.125 515.125 0 0 0 576.9 92.079a452.907 452.907 0 0 0 3.903-11.879c1.277-4.125 2.554-8.216 3.815-12.274a145.287 145.287 0 0 0 3.213-12.052c.87-3.98 1.487-7.756 1.832-11.33zm-47.689 68.962a42.47 42.47 0 0 0-11.877 8.613c-3.468 3.566-6.366 8.267-8.694 14.114-2.312 5.843-4.084 10.873-5.3 15.086-1.216 4.21-1.817 8.014-1.817 11.414 0 1.055.15 2.106.449 3.162.302 1.055.857 2.004 1.668 2.85.81.84 1.952 1.528 3.439 2.054 1.471.53 3.393.793 5.766.793 1.2 0 2.402-.268 3.588-.81a16.08 16.08 0 0 0 3.379-2.102 24.957 24.957 0 0 0 3.093-2.96 31.904 31.904 0 0 0 2.673-3.453c1.892-2.75 3.618-5.854 5.165-9.318-.197-.95-.376-2.463-.51-4.538-.136-2.07-.24-5.231-.301-9.476-.075-4.247-.152-7.732-.21-10.448a519.42 519.42 0 0 1-.15-7.44c-.045-2.243-.09-4.075-.152-5.503-.074-1.427-.149-2.107-.209-2.038zm70.062 59.695c-4.775 3.934-9.505 7.443-14.144 10.52a127.062 127.062 0 0 1-6.173 3.812 76.437 76.437 0 0 1-6.367 3.328 48.4 48.4 0 0 1-6.094 2.362c-1.952.606-3.77.91-5.406.91-.976 0-2.404-.215-4.296-.643-1.892-.434-3.962-1.306-6.2-2.632-2.252-1.323-4.49-3.239-6.742-5.742-2.237-2.508-4.174-5.835-5.842-9.982a100.616 100.616 0 0 1-7.957 7.35 61.432 61.432 0 0 1-8.724 6.06c-3.003 1.72-6.051 3.098-9.114 4.132-3.08 1.04-6.171 1.557-9.28 1.557-4.384 0-8.168-.91-11.381-2.732a24.331 24.331 0 0 1-7.975-7.274c-2.13-3.025-3.709-6.458-4.758-10.299a45.513 45.513 0 0 1-1.562-11.912c0-4.374.556-8.802 1.667-13.285a62.3 62.3 0 0 1 4.85-13.028 306.475 306.475 0 0 1 7.072-13.185c2.598-4.58 6.036-8.752 10.316-12.516 4.279-3.762 8.678-6.6 13.183-8.516 4.518-1.913 9.34-3.11 14.46-3.59.209-8.754 1.141-16.469 2.793-23.14 1.651-6.668 3.437-13.846 5.345-21.532 1.907-7.683 4.37-14.76 7.388-21.227 3.018-6.47 6.321-12.062 9.91-16.778 3.589-4.717 7.416-8.406 11.487-11.067 4.069-2.66 8.273-3.992 12.613-3.992 3.153 0 5.854.827 8.078 2.48 2.222 1.653 4.04 3.847 5.42 6.583 1.365 2.734 2.358 5.907 2.974 9.517.6 3.612.915 7.342.915 11.19 0 2.402-.03 4.872-.075 7.41-.196 9.674-1.683 18.678-4.474 27.013-2.793 8.334-5.556 16.573-8.274 24.716-2.732 8.144-6.036 16.201-9.88 24.171-5.886 12.197-9.64 20.478-11.246 24.837-.346.954-.691 2.114-1.051 3.478a84.878 84.878 0 0 0-.991 4.443 70.896 70.896 0 0 0-.796 4.908 38.845 38.845 0 0 0-.316 4.852c0 1.977.106 3.853.346 5.625.225 1.77.6 3.356 1.126 4.75.525 1.399 1.23 2.507 2.132 3.323.871.817 1.967 1.226 3.289 1.226 1.276 0 2.687-.256 4.189-.765 1.516-.509 3.123-1.204 4.805-2.09a61.408 61.408 0 0 0 5.105-3.004 127.418 127.418 0 0 0 4.999-3.416c3.708-2.718 7.584-5.811 11.621-9.275l3.035 21.07z" fill="#FFFFFF"/>
8
+ <path d="M625.775 161.267c0 1.738.104 3.423.346 5.057.24 1.633.66 3.093 1.274 4.378.602 1.287 1.413 2.33 2.42 3.131 1.02.796 2.297 1.197 3.843 1.197 2.508 0 4.76-1.084 6.787-3.256 2.027-2.17 3.784-4.782 5.27-7.835a55.388 55.388 0 0 0 3.59-9.465c.915-3.256 1.5-5.972 1.771-8.143l7.538-32.86c-2.763 0-5.45.688-8.078 2.054-2.628 1.371-5.107 3.223-7.433 5.563-2.327 2.338-4.461 5.01-6.412 8.014-1.967 3.008-3.889 6.717-5.766 11.124-1.891 4.41-3.213 8.284-3.994 11.623-.78 3.34-1.156 6.482-1.156 9.418zm86.714 7.92c-1.547 2.179-3.62 4.735-6.216 7.666-2.598 2.93-5.511 5.725-8.74 8.381a54.956 54.956 0 0 1-10.42 6.748c-3.709 1.84-7.418 2.758-11.111 2.758-4.475 0-8.214-1.416-11.202-4.253-2.988-2.835-5.57-6.951-7.75-12.357-1.634 1.868-3.632 3.77-6.005 5.702a54.523 54.523 0 0 1-7.792 5.255 50.806 50.806 0 0 1-8.814 3.85c-3.063 1.002-6.126 1.5-9.174 1.5-3.244 0-6.382-.664-9.445-1.99-3.08-1.325-5.781-3.226-8.138-5.708-2.373-2.484-4.25-5.508-5.661-9.077-1.427-3.57-2.132-7.598-2.132-12.086 0-5.033.72-10.204 2.132-15.51 1.426-5.304 3.634-11.042 6.62-17.224 2.973-6.178 6.188-11.515 9.596-16.015 3.439-4.496 7.178-8.427 11.247-11.783 4.07-3.358 8.349-6.027 12.868-8.009 4.505-1.98 9.083-2.971 13.77-2.971 1.56 0 2.776.308 3.663.917a9.43 9.43 0 0 1 2.192 2.095c.57.784 1.126 1.552 1.667 2.3a4.674 4.674 0 0 0 2.04 1.634 9.3 9.3 0 0 0 2.495.664c.839.1 1.711.153 2.582.153.751 0 1.517-.017 2.298-.053.78-.033 1.531-.048 2.282-.048 1.021 0 1.965.1 2.853.303.87.206 1.652.646 2.327 1.33.676.684 1.201 1.633 1.577 2.858.36 1.225.555 2.895.555 5.006 0 3.223-.345 6.796-1.02 10.723a296.911 296.911 0 0 1-2.313 12.07c-.872 4.12-1.862 8.813-2.973 14.09-1.111 5.271-1.668 9.715-1.668 13.33 0 3.089.287 5.503.857 7.24.586 1.744 1.8 2.613 3.694 2.613 1.411 0 2.898-.351 4.443-1.05a27.945 27.945 0 0 0 4.701-2.755 53.642 53.642 0 0 0 4.76-3.86 70.739 70.739 0 0 0 4.49-4.461c3.302-3.605 6.637-7.682 10.015-12.223l4.85 22.247z" fill="#FFFFFF"/>
9
+ <path d="M765.867 172.704c-2.43 2.224-5.449 4.598-9.053 7.13a96.388 96.388 0 0 1-11.667 6.97 88.86 88.86 0 0 1-12.793 5.307c-4.34 1.416-8.47 2.123-12.372 2.123-3.514 0-6.457-.49-8.86-1.464-2.387-.977-4.324-2.34-5.81-4.094-1.472-1.751-2.538-3.895-3.169-6.418-.645-2.53-.976-5.308-.976-8.341 0-4.245.48-9.198 1.427-14.86 1.937-11.708 3.183-18.282 3.739-19.73.916-2.878 12.763-65.43 15.51-75.305 2.568-8.05 4.145-13.285 4.745-15.715.33-1.702 1.247-3.235 2.778-4.602a18.457 18.457 0 0 1 4.715-3.012 25.63 25.63 0 0 1 5.466-1.739c1.877-.375 3.588-.561 5.12-.561 2.778 0 4.655.52 5.66 1.569.992 1.044 1.487 2.441 1.487 4.192 0 1.484-.345 3.578-1.05 6.284-.691 2.709-1.472 5.793-2.358 9.254-.888 3.466-2.192 7.918-3.936 13.36-1.74 5.44-12.926 66.26-13.557 70.097a136.637 136.637 0 0 1-2.403 11.446c-.976 3.789-1.456 7.233-1.456 10.33 0 3.032.33 5.438 1.006 7.225.674 1.784 2.057 2.677 4.144 2.677 2.433 0 5.12-.84 8.094-2.527 2.958-1.682 5.96-3.724 8.994-6.117a202.022 202.022 0 0 0 8.889-7.428 276.486 276.486 0 0 1 7.686-6.57v20.519z" fill="#FFFFFF"/>
10
+ <path d="M809.167 146.295c-.272 2.171-.86 4.881-1.772 8.136a56.238 56.238 0 0 1-3.591 9.457c-1.482 3.053-3.238 5.66-5.26 7.827-2.027 2.17-4.284 3.258-6.781 3.258-1.548 0-2.834-.404-3.843-1.199-1.013-.799-1.821-1.837-2.426-3.126-.61-1.285-1.03-2.744-1.269-4.37a35.652 35.652 0 0 1-.354-5.055c0-2.941.387-6.08 1.162-9.416.775-3.337 2.105-7.205 3.99-11.616 1.884-4.404 3.803-8.107 5.76-11.114 1.953-3.003 4.09-5.672 6.41-8.008 2.327-2.335 4.803-4.189 7.426-5.56 2.628-1.368 5.318-2.052 8.081-2.052l-7.533 32.838zm64.903 14.042c.123-3.51-1.295-7.014-4.783-8.534-4.276-1.866-7.707.432-10.245 3.616a59.476 59.476 0 0 1-5.231 5.75c-4.102 3.955-10.434 10.064-16.514 10.064-1.886 0-3.114-.87-3.686-2.608-.574-1.738-.862-4.152-.862-7.237 0-3.609.561-8.053 1.668-13.322l2.974-14.079c.865-4.12 1.64-8.14 2.311-12.061.672-3.921 1.014-7.493 1.014-10.714 0-2.109-.185-3.777-.56-5-.371-1.228-.89-2.176-1.566-2.86-.679-.68-1.454-1.124-2.335-1.33a12.727 12.727 0 0 0-2.847-.305c-.745 0-1.508.02-2.285.054-.78.033-1.541.05-2.287.05-.877 0-1.747-.05-2.59-.153a9.082 9.082 0 0 1-2.488-.663c-.816-.338-1.492-.882-2.032-1.632a372 372 0 0 0-1.68-2.298c-.572-.783-1.302-1.479-2.184-2.093-.876-.613-2.1-.918-3.657-.918-4.676 0-9.265.988-13.766 2.97-4.506 1.981-8.79 4.646-12.857 8-4.066 3.356-7.806 7.282-11.228 11.776-3.42 4.498-6.625 9.832-9.602 16.007-2.978 6.175-5.182 11.913-6.603 17.21-1.426 5.302-2.135 10.467-2.135 15.5 0 4.486.709 8.51 2.122 12.074 1.413 3.567 3.296 6.59 5.656 9.07 2.356 2.48 5.066 4.383 8.131 5.706 3.065 1.326 6.212 1.99 9.446 1.99 3.051 0 6.108-.5 9.161-1.5a50.753 50.753 0 0 0 8.811-3.847c2.812-1.57 5.412-3.316 7.789-5.253 2.372-1.931 4.378-3.83 6.006-5.696 2.17 5.4 4.749 9.52 7.74 12.349 2.982 2.834 6.713 4.247 11.188 4.247 3.703 0 7.406-.919 11.113-2.756a54.844 54.844 0 0 0 10.401-6.739c3.233-2.657 6.146-5.45 8.74-8.378 3.387-3.827 7.18-7.736 8.993-12.613a12.37 12.37 0 0 0 .759-3.844zM751.618 85.583c.527-.25 1.428-.338 2.689-.267 1.261.075 2.718.096 4.37.069 1.651-.03 3.436-.063 5.358-.107 1.909-.04 3.77-.072 5.573-.097 1.801-.021 3.483-.036 5.045-.05 1.561-.009 2.851-.004 3.874.01 1.2.014 2.102.723 2.717 2.125.601 1.403.961 3.196 1.082 5.377.118 2.524-.376 4.613-1.502 6.259-1.111 1.65-2.387 2.507-3.829 2.58l-34.535 1.732-29.956-1.75c-1.832-.21-3.243-.421-4.25-.636a121.865 121.865 0 0 0-3.2-.629 78.107 78.107 0 0 0-4.292-.634c-1.742-.214-4.25-.467-7.523-.753-1.456-.154-2.597-.53-3.408-1.131-.811-.6-1.427-1.323-1.832-2.171a8.271 8.271 0 0 1-.766-2.678 36.448 36.448 0 0 1-.21-2.422c-.06-1.066.495-1.91 1.637-2.528 1.14-.622 2.627-1.116 4.443-1.49 1.832-.372 3.83-.63 6.037-.777 2.191-.143 4.295-.229 6.32-.265 2.014-.033 3.83-.073 5.422-.121 1.592-.044 2.688-.149 3.289-.316l37.447.67z" fill="#FFFFFF"/>
11
+ </g>
12
+ </svg>
@@ -0,0 +1,12 @@
1
+ <svg width="1028" height="324" viewBox="0 0 1028 324" xmlns="http://www.w3.org/2000/svg">
2
+ <g transform="translate(76.041 42)" fill="none" fill-rule="evenodd">
3
+ <g fill="#E04E39">
4
+ <path d="M507.552 137.229s-12.56 9.744-23.616 8.656c-11.056-1.088-7.584-25.792-7.584-25.792s2.384-22.656-4.128-24.56c-6.496-1.888-14.512 5.904-14.512 5.904s-9.968 11.056-14.736 25.152l-1.312.432s1.52-24.72-.208-30.352c-1.296-2.816-13.216-2.592-15.168 2.384-1.952 4.992-11.488 39.664-12.144 54.192 0 0-18.64 15.824-34.88 18.416-16.256 2.608-20.16-7.584-20.16-7.584s44.208-12.352 42.688-47.68c-1.504-35.328-35.648-22.256-39.504-19.36-3.744 2.816-23.696 14.848-29.52 48.176-.192 1.12-.544 6.08-.544 6.08s-17.12 11.472-26.656 14.512c0 0 26.656-44.864-5.84-65.232-9.14-5.502-17.106-.44-21.845 4.208-2.91 2.854 39.397-43.424 29.637-84.832C302.88.237 293.024-1.875 283.984 1.325c-13.728 5.408-18.928 13.424-18.928 13.424s-17.776 25.792-21.904 64.16c-4.112 38.352-10.176 84.736-10.176 84.736s-8.464 8.24-16.256 8.672c-7.808.416-4.336-23.2-4.336-23.2s6.064-35.968 5.648-42.048c-.448-6.064-.88-9.312-8.032-11.472-7.152-2.176-14.96 6.928-14.96 6.928s-20.576 31.2-22.304 35.968l-1.104 1.968-1.072-1.312s14.512-42.48.656-43.12c-13.872-.656-22.976 15.168-22.976 15.168s-15.824 26.448-16.48 29.472l-1.072-1.296s6.496-30.768 5.2-38.368c-1.312-7.584-8.448-6.064-8.448-6.064s-9.104-1.088-11.488 4.768c-2.384 5.856-11.056 44.64-12.144 56.992 0 0-22.752 16.256-37.712 16.464-14.944.224-13.424-9.472-13.424-9.472s54.832-18.768 39.872-55.824c-6.72-9.536-14.512-12.528-25.568-12.32-11.056.224-24.768 6.96-33.648 26.896-4.256 9.504-5.792 18.544-6.672 25.36 0 0-9.584 1.968-14.784-2.368-5.216-4.336-7.888 0-7.888 0s-8.928 11.392-.048 14.848c8.896 3.472 22.752 5.088 22.752 5.088 1.28 6.064 4.976 16.384 15.808 24.592 16.256 12.352 47.44-1.136 47.44-1.136l12.784-7.168s.432 11.728 9.76 13.44c9.312 1.712 13.216-.032 29.472-39.472 9.536-20.16 10.192-19.072 10.192-19.072 1.072-.224-6.288 38.352-3.472 48.752 2.816 10.416 15.168 9.328 15.168 9.328s6.72 1.296 12.144-17.776c5.408-19.072 15.824-40.096 15.824-40.096 1.28 0-3.264 39.44 3.664 52.016 6.944 12.576 24.928 4.224 24.928 4.224s12.576-6.336 14.528-8.288c0 0 14.912 12.704 35.952 10.4 47.04-9.264 63.776-21.776 63.776-21.776s8.08 20.48 33.12 22.384c28.592 2.16 44.208-15.824 44.208-15.824s-.224 11.696 9.744 15.824c9.984 4.112 16.688-19.04 16.688-19.04l16.688-45.984c1.52 0 2.384 29.904 18.864 34.672 16.464 4.768 37.92-11.168 37.92-11.168s5.2-2.864 4.336-11.536c-.88-8.672-8.672-5.44-8.672-5.44zm-434.08-21.696c5.84 5.632 3.68 17.76-7.376 25.344-11.04 7.6-16.032 6.08-16.032 6.08.656-25.792 17.568-37.072 23.408-31.424zM289.104 26.46c3.68 19.504-32.288 77.584-32.288 77.584.432-13.008 13.216-56.992 13.216-56.992s15.376-40.096 19.072-20.592zm-35.552 148.016s-2.816-9.536 5.2-36.192c8.032-26.656 26.88-16.256 26.88-16.256s13.008 9.968 2.816 36.624c-10.176 26.656-34.896 15.824-34.896 15.824zm109.664-52.224c8.88-16.256 15.824-7.376 15.824-7.376s7.584 8.24-1.088 20.592c-8.672 12.352-21.232 11.488-21.232 11.488s-2.384-8.464 6.496-24.704z"/>
5
+ <path d="M451.918 188.027v-3.112h1.974c.273 0 .547.028.835.057.288.043.562.115.793.216.245.101.432.245.576.433.159.187.23.446.23.763 0 .72-.216 1.182-.648 1.369-.432.187-.994.274-1.671.274h-2.09zm-2.349-4.942v11.843h2.349v-5.057h1.47l2.881 5.057h2.464l-3.17-5.172c.432-.044.836-.13 1.225-.26.374-.13.706-.317.98-.562.288-.245.504-.562.662-.95.173-.39.245-.85.245-1.398 0-1.282-.403-2.19-1.196-2.709-.807-.533-1.96-.792-3.443-.792h-4.467zm-3.76 5.936c0-1.21.201-2.32.62-3.328a8.09 8.09 0 0 1 1.7-2.608 7.71 7.71 0 0 1 2.52-1.73 7.864 7.864 0 0 1 3.127-.619c1.095 0 2.133.202 3.098.62.98.418 1.816.994 2.536 1.729.72.735 1.282 1.599 1.714 2.608.418 1.008.634 2.118.634 3.328s-.216 2.32-.634 3.342c-.432 1.009-.994 1.902-1.714 2.637a7.594 7.594 0 0 1-2.536 1.744 7.725 7.725 0 0 1-3.098.619 7.864 7.864 0 0 1-3.126-.62 7.535 7.535 0 0 1-2.522-1.743c-.72-.735-1.282-1.628-1.7-2.637-.418-1.022-.62-2.132-.62-3.342zm-2.896 0c0 1.628.302 3.083.893 4.38.605 1.311 1.398 2.42 2.392 3.343a10.57 10.57 0 0 0 3.472 2.117c1.311.49 2.68.735 4.106.735 1.441 0 2.81-.245 4.121-.735a10.57 10.57 0 0 0 3.472-2.117c.995-.923 1.787-2.032 2.392-3.343.59-1.297.879-2.752.879-4.38 0-1.6-.288-3.055-.879-4.351-.605-1.312-1.397-2.42-2.392-3.329a10.57 10.57 0 0 0-3.472-2.118 11.356 11.356 0 0 0-4.12-.749c-1.427 0-2.796.245-4.107.75a10.57 10.57 0 0 0-3.472 2.117c-.994.908-1.787 2.017-2.392 3.329-.59 1.296-.893 2.752-.893 4.35z"/>
6
+ </g>
7
+ <path d="M589.663 44.545c.42-4.718.63-8.462.63-11.226 0-3.638-.33-6.168-.975-7.583-.646-1.416-1.592-2.124-2.823-2.124-2.207 0-4.19 1.365-5.976 4.093-1.772 2.73-3.198 6.25-4.295 10.556-1.08 4.31-2.252 8.992-3.528 14.05-1.263 5.061-2.192 10.016-2.793 14.863-.57 4.85-1.051 9.221-1.397 13.115-.36 3.889-.615 6.654-.75 8.296-.3 3.348-.54 6.575-.721 9.68-.18 3.108-.315 5.943-.39 8.503a225.54 225.54 0 0 0-.107 6.71v5.432A515.125 515.125 0 0 0 576.9 92.079a452.907 452.907 0 0 0 3.903-11.879c1.277-4.125 2.554-8.216 3.815-12.274a145.287 145.287 0 0 0 3.213-12.052c.87-3.98 1.487-7.756 1.832-11.33zm-47.689 68.962a42.47 42.47 0 0 0-11.877 8.613c-3.468 3.566-6.366 8.267-8.694 14.114-2.312 5.843-4.084 10.873-5.3 15.086-1.216 4.21-1.817 8.014-1.817 11.414 0 1.055.15 2.106.449 3.162.302 1.055.857 2.004 1.668 2.85.81.84 1.952 1.528 3.439 2.054 1.471.53 3.393.793 5.766.793 1.2 0 2.402-.268 3.588-.81a16.08 16.08 0 0 0 3.379-2.102 24.957 24.957 0 0 0 3.093-2.96 31.904 31.904 0 0 0 2.673-3.453c1.892-2.75 3.618-5.854 5.165-9.318-.197-.95-.376-2.463-.51-4.538-.136-2.07-.24-5.231-.301-9.476-.075-4.247-.152-7.732-.21-10.448a519.42 519.42 0 0 1-.15-7.44c-.045-2.243-.09-4.075-.152-5.503-.074-1.427-.149-2.107-.209-2.038zm70.062 59.695c-4.775 3.934-9.505 7.443-14.144 10.52a127.062 127.062 0 0 1-6.173 3.812 76.437 76.437 0 0 1-6.367 3.328 48.4 48.4 0 0 1-6.094 2.362c-1.952.606-3.77.91-5.406.91-.976 0-2.404-.215-4.296-.643-1.892-.434-3.962-1.306-6.2-2.632-2.252-1.323-4.49-3.239-6.742-5.742-2.237-2.508-4.174-5.835-5.842-9.982a100.616 100.616 0 0 1-7.957 7.35 61.432 61.432 0 0 1-8.724 6.06c-3.003 1.72-6.051 3.098-9.114 4.132-3.08 1.04-6.171 1.557-9.28 1.557-4.384 0-8.168-.91-11.381-2.732a24.331 24.331 0 0 1-7.975-7.274c-2.13-3.025-3.709-6.458-4.758-10.299a45.513 45.513 0 0 1-1.562-11.912c0-4.374.556-8.802 1.667-13.285a62.3 62.3 0 0 1 4.85-13.028 306.475 306.475 0 0 1 7.072-13.185c2.598-4.58 6.036-8.752 10.316-12.516 4.279-3.762 8.678-6.6 13.183-8.516 4.518-1.913 9.34-3.11 14.46-3.59.209-8.754 1.141-16.469 2.793-23.14 1.651-6.668 3.437-13.846 5.345-21.532 1.907-7.683 4.37-14.76 7.388-21.227 3.018-6.47 6.321-12.062 9.91-16.778 3.589-4.717 7.416-8.406 11.487-11.067 4.069-2.66 8.273-3.992 12.613-3.992 3.153 0 5.854.827 8.078 2.48 2.222 1.653 4.04 3.847 5.42 6.583 1.365 2.734 2.358 5.907 2.974 9.517.6 3.612.915 7.342.915 11.19 0 2.402-.03 4.872-.075 7.41-.196 9.674-1.683 18.678-4.474 27.013-2.793 8.334-5.556 16.573-8.274 24.716-2.732 8.144-6.036 16.201-9.88 24.171-5.886 12.197-9.64 20.478-11.246 24.837-.346.954-.691 2.114-1.051 3.478a84.878 84.878 0 0 0-.991 4.443 70.896 70.896 0 0 0-.796 4.908 38.845 38.845 0 0 0-.316 4.852c0 1.977.106 3.853.346 5.625.225 1.77.6 3.356 1.126 4.75.525 1.399 1.23 2.507 2.132 3.323.871.817 1.967 1.226 3.289 1.226 1.276 0 2.687-.256 4.189-.765 1.516-.509 3.123-1.204 4.805-2.09a61.408 61.408 0 0 0 5.105-3.004 127.418 127.418 0 0 0 4.999-3.416c3.708-2.718 7.584-5.811 11.621-9.275l3.035 21.07z" fill="#612116"/>
8
+ <path d="M625.775 161.267c0 1.738.104 3.423.346 5.057.24 1.633.66 3.093 1.274 4.378.602 1.287 1.413 2.33 2.42 3.131 1.02.796 2.297 1.197 3.843 1.197 2.508 0 4.76-1.084 6.787-3.256 2.027-2.17 3.784-4.782 5.27-7.835a55.388 55.388 0 0 0 3.59-9.465c.915-3.256 1.5-5.972 1.771-8.143l7.538-32.86c-2.763 0-5.45.688-8.078 2.054-2.628 1.371-5.107 3.223-7.433 5.563-2.327 2.338-4.461 5.01-6.412 8.014-1.967 3.008-3.889 6.717-5.766 11.124-1.891 4.41-3.213 8.284-3.994 11.623-.78 3.34-1.156 6.482-1.156 9.418zm86.714 7.92c-1.547 2.179-3.62 4.735-6.216 7.666-2.598 2.93-5.511 5.725-8.74 8.381a54.956 54.956 0 0 1-10.42 6.748c-3.709 1.84-7.418 2.758-11.111 2.758-4.475 0-8.214-1.416-11.202-4.253-2.988-2.835-5.57-6.951-7.75-12.357-1.634 1.868-3.632 3.77-6.005 5.702a54.523 54.523 0 0 1-7.792 5.255 50.806 50.806 0 0 1-8.814 3.85c-3.063 1.002-6.126 1.5-9.174 1.5-3.244 0-6.382-.664-9.445-1.99-3.08-1.325-5.781-3.226-8.138-5.708-2.373-2.484-4.25-5.508-5.661-9.077-1.427-3.57-2.132-7.598-2.132-12.086 0-5.033.72-10.204 2.132-15.51 1.426-5.304 3.634-11.042 6.62-17.224 2.973-6.178 6.188-11.515 9.596-16.015 3.439-4.496 7.178-8.427 11.247-11.783 4.07-3.358 8.349-6.027 12.868-8.009 4.505-1.98 9.083-2.971 13.77-2.971 1.56 0 2.776.308 3.663.917a9.43 9.43 0 0 1 2.192 2.095c.57.784 1.126 1.552 1.667 2.3a4.674 4.674 0 0 0 2.04 1.634 9.3 9.3 0 0 0 2.495.664c.839.1 1.711.153 2.582.153.751 0 1.517-.017 2.298-.053.78-.033 1.531-.048 2.282-.048 1.021 0 1.965.1 2.853.303.87.206 1.652.646 2.327 1.33.676.684 1.201 1.633 1.577 2.858.36 1.225.555 2.895.555 5.006 0 3.223-.345 6.796-1.02 10.723a296.911 296.911 0 0 1-2.313 12.07c-.872 4.12-1.862 8.813-2.973 14.09-1.111 5.271-1.668 9.715-1.668 13.33 0 3.089.287 5.503.857 7.24.586 1.744 1.8 2.613 3.694 2.613 1.411 0 2.898-.351 4.443-1.05a27.945 27.945 0 0 0 4.701-2.755 53.642 53.642 0 0 0 4.76-3.86 70.739 70.739 0 0 0 4.49-4.461c3.302-3.605 6.637-7.682 10.015-12.223l4.85 22.247z" fill="#612116"/>
9
+ <path d="M765.867 172.704c-2.43 2.224-5.449 4.598-9.053 7.13a96.388 96.388 0 0 1-11.667 6.97 88.86 88.86 0 0 1-12.793 5.307c-4.34 1.416-8.47 2.123-12.372 2.123-3.514 0-6.457-.49-8.86-1.464-2.387-.977-4.324-2.34-5.81-4.094-1.472-1.751-2.538-3.895-3.169-6.418-.645-2.53-.976-5.308-.976-8.341 0-4.245.48-9.198 1.427-14.86 1.937-11.708 3.183-18.282 3.739-19.73.916-2.878 12.763-65.43 15.51-75.305 2.568-8.05 4.145-13.285 4.745-15.715.33-1.702 1.247-3.235 2.778-4.602a18.457 18.457 0 0 1 4.715-3.012 25.63 25.63 0 0 1 5.466-1.739c1.877-.375 3.588-.561 5.12-.561 2.778 0 4.655.52 5.66 1.569.992 1.044 1.487 2.441 1.487 4.192 0 1.484-.345 3.578-1.05 6.284-.691 2.709-1.472 5.793-2.358 9.254-.888 3.466-2.192 7.918-3.936 13.36-1.74 5.44-12.926 66.26-13.557 70.097a136.637 136.637 0 0 1-2.403 11.446c-.976 3.789-1.456 7.233-1.456 10.33 0 3.032.33 5.438 1.006 7.225.674 1.784 2.057 2.677 4.144 2.677 2.433 0 5.12-.84 8.094-2.527 2.958-1.682 5.96-3.724 8.994-6.117a202.022 202.022 0 0 0 8.889-7.428 276.486 276.486 0 0 1 7.686-6.57v20.519z" fill="#612116"/>
10
+ <path d="M809.167 146.295c-.272 2.171-.86 4.881-1.772 8.136a56.238 56.238 0 0 1-3.591 9.457c-1.482 3.053-3.238 5.66-5.26 7.827-2.027 2.17-4.284 3.258-6.781 3.258-1.548 0-2.834-.404-3.843-1.199-1.013-.799-1.821-1.837-2.426-3.126-.61-1.285-1.03-2.744-1.269-4.37a35.652 35.652 0 0 1-.354-5.055c0-2.941.387-6.08 1.162-9.416.775-3.337 2.105-7.205 3.99-11.616 1.884-4.404 3.803-8.107 5.76-11.114 1.953-3.003 4.09-5.672 6.41-8.008 2.327-2.335 4.803-4.189 7.426-5.56 2.628-1.368 5.318-2.052 8.081-2.052l-7.533 32.838zm64.903 14.042c.123-3.51-1.295-7.014-4.783-8.534-4.276-1.866-7.707.432-10.245 3.616a59.476 59.476 0 0 1-5.231 5.75c-4.102 3.955-10.434 10.064-16.514 10.064-1.886 0-3.114-.87-3.686-2.608-.574-1.738-.862-4.152-.862-7.237 0-3.609.561-8.053 1.668-13.322l2.974-14.079c.865-4.12 1.64-8.14 2.311-12.061.672-3.921 1.014-7.493 1.014-10.714 0-2.109-.185-3.777-.56-5-.371-1.228-.89-2.176-1.566-2.86-.679-.68-1.454-1.124-2.335-1.33a12.727 12.727 0 0 0-2.847-.305c-.745 0-1.508.02-2.285.054-.78.033-1.541.05-2.287.05-.877 0-1.747-.05-2.59-.153a9.082 9.082 0 0 1-2.488-.663c-.816-.338-1.492-.882-2.032-1.632a372 372 0 0 0-1.68-2.298c-.572-.783-1.302-1.479-2.184-2.093-.876-.613-2.1-.918-3.657-.918-4.676 0-9.265.988-13.766 2.97-4.506 1.981-8.79 4.646-12.857 8-4.066 3.356-7.806 7.282-11.228 11.776-3.42 4.498-6.625 9.832-9.602 16.007-2.978 6.175-5.182 11.913-6.603 17.21-1.426 5.302-2.135 10.467-2.135 15.5 0 4.486.709 8.51 2.122 12.074 1.413 3.567 3.296 6.59 5.656 9.07 2.356 2.48 5.066 4.383 8.131 5.706 3.065 1.326 6.212 1.99 9.446 1.99 3.051 0 6.108-.5 9.161-1.5a50.753 50.753 0 0 0 8.811-3.847c2.812-1.57 5.412-3.316 7.789-5.253 2.372-1.931 4.378-3.83 6.006-5.696 2.17 5.4 4.749 9.52 7.74 12.349 2.982 2.834 6.713 4.247 11.188 4.247 3.703 0 7.406-.919 11.113-2.756a54.844 54.844 0 0 0 10.401-6.739c3.233-2.657 6.146-5.45 8.74-8.378 3.387-3.827 7.18-7.736 8.993-12.613a12.37 12.37 0 0 0 .759-3.844zM751.618 85.583c.527-.25 1.428-.338 2.689-.267 1.261.075 2.718.096 4.37.069 1.651-.03 3.436-.063 5.358-.107 1.909-.04 3.77-.072 5.573-.097 1.801-.021 3.483-.036 5.045-.05 1.561-.009 2.851-.004 3.874.01 1.2.014 2.102.723 2.717 2.125.601 1.403.961 3.196 1.082 5.377.118 2.524-.376 4.613-1.502 6.259-1.111 1.65-2.387 2.507-3.829 2.58l-34.535 1.732-29.956-1.75c-1.832-.21-3.243-.421-4.25-.636a121.865 121.865 0 0 0-3.2-.629 78.107 78.107 0 0 0-4.292-.634c-1.742-.214-4.25-.467-7.523-.753-1.456-.154-2.597-.53-3.408-1.131-.811-.6-1.427-1.323-1.832-2.171a8.271 8.271 0 0 1-.766-2.678 36.448 36.448 0 0 1-.21-2.422c-.06-1.066.495-1.91 1.637-2.528 1.14-.622 2.627-1.116 4.443-1.49 1.832-.372 3.83-.63 6.037-.777 2.191-.143 4.295-.229 6.32-.265 2.014-.033 3.83-.073 5.422-.121 1.592-.044 2.688-.149 3.289-.316l37.447.67z" fill="#612116"/>
11
+ </g>
12
+ </svg>