{"componentChunkName":"component---src-pages-sips-sip-markdown-remark-frontmatter-sip-tsx","path":"/sips/sip-268/","result":{"data":{"markdownRemark":{"fileAbsolutePath":"/vercel/path0/content/sips/sip-268.md","frontmatter":{"sip":268,"sccp":null,"title":"Curve Integration","network":"Ethereum","author":"kaleb (@kaleb-keny), Afif (@aband1)","type":"Governance","proposal":"https://snapshot.org/#/snxgov.eth/proposal/0xc52a99b1e044c88ed092e5575675bf4a39d6a2fc5f93658ba740ecb6976af619","implementor":"TBD","release":null,"created":"2022-07-28T00:00:00.000Z","updated":null,"status":"Rejected"},"html":"<!--You can leave these HTML comments in your merged SIP and delete the visible duplicate text guides, they will not appear and may be helpful to refer to if you edit it again. This is the suggested template for new SIPs. Note that an SIP number will be assigned by an editor. When opening a pull request to submit your SIP, please use an abbreviated title in the filename, `sip-draft_title_abbrev.md`. The title should be 44 characters or less.-->\n<h2 id=\"simple-summary\" style=\"position:relative;\"><a href=\"#simple-summary\" aria-label=\"simple summary permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Simple Summary</h2>\n<!--\"If you can't explain it simply, you don't understand it well enough.\" Simply describe the outcome the proposed changes intends to achieve. This should be non-technical and accessible to a casual community member.-->\n<p>This sip builds on top of <a href=\"https://sips.synthetix.io/sips/sip-267/\">SIP-267's</a> direct integration functionality in order to offer an end-to-end cross-asset swap function at reduced fees, built on top of Synthetix's atomic exchanges and Curve's stable swap pools.</p>\n<h2 id=\"abstract\" style=\"position:relative;\"><a href=\"#abstract\" aria-label=\"abstract permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Abstract</h2>\n<!--A short (~200 word) description of the proposed change, the abstract should clearly describe the proposed change. This is what *will* be done if the SIP is implemented, not *why* it should be done or *how* it will be done. If the SIP proposes deploying a new contract, write, \"we propose to deploy a new contract that will do x\".-->\n<p>The <code>CurveIntegration</code> sip allows users to trade between non-synths at reduced fees, with the trade executing by hoping over curve stable-swap pools along side Synthetix's atomic swap function.\nA user would be able to spend <code>synthEquivalent</code> and receive another <code>synthEquivalent</code> with the swap taking place with the following route:</p>\n<ul>\n<li><code>synthEquivalent</code> to <code>synth</code> over curve's stable swaps (USDC to sUSD)</li>\n<li><code>synth</code> to <code>synth</code> with atomic swaps (sUSD to sETH)</li>\n<li><code>synth</code> to <code>synthEquivalent</code> over curve's stable swaps (sETH to wETH)</li>\n</ul>\n<p>As an implementation note, no partial trades are allowed and the full route from <code>synthEquivalent</code> to <code>synthEquivalent</code> needs to be executed atomically within the same transaction.</p>\n<h2 id=\"motivation\" style=\"position:relative;\"><a href=\"#motivation\" aria-label=\"motivation permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Motivation</h2>\n<!--This is the problem statement. This is the *why* of the SIP. It should clearly explain *why* the current state of the protocol is inadequate.  It is critical that you explain *why* the change is needed, if the SIP proposes changing how something is calculated, you must address *why* the current calculation is innaccurate or wrong. This is not the place to describe how the SIP will address the issue!-->\n<p>The <code>CurveIntegration</code> contract takes advantage of the slippage model incorporated within curve's stable-swap pools, helping stall toxic volume to the extent of the imbalance in individual curve pools. This allows the protocol to lower Synthetix's exchange fees with the help of <a href=\"https://sips.synthetix.io/sips/sip-267/\">SIP-267's</a> override function and designate the 30 bp uniswap pool as a source of pricing. Therefore, swaps that do not take place within the <code>CurveIntegration</code> contract would continue to trade using the pricing of the 5 bp uniswap pool, at their own independently configured fees.</p>\n<h2 id=\"specification\" style=\"position:relative;\"><a href=\"#specification\" aria-label=\"specification permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Specification</h2>\n<!--The specification should describe the syntax and semantics of any new feature, there are five sections\n1. Overview\n2. Rationale\n3. Technical Specification\n4. Test Cases\n5. Configurable Values\n-->\n<h3 id=\"technical-specification\" style=\"position:relative;\"><a href=\"#technical-specification\" aria-label=\"technical specification permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Technical Specification</h3>\n<h4 id=\"synth-equivalent-specification\" style=\"position:relative;\"><a href=\"#synth-equivalent-specification\" aria-label=\"synth equivalent specification permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Synth Equivalent Specification</h4>\n<ul>\n<li>All the synth tokens that can be traded within the <code>CurveIntegration</code> contract need be assigned respective <code>synthEquivalents</code> via <code>setSynthEquivalent</code> function. The designated <code>synthEquivalent</code> tokens need to exist in the Curve Stable-Swap pools specified in the next section.</li>\n</ul>\n<p>For example sUSD would be assigned USDC as synthEquivalent and sETH would have wETH as synthEquivalent.</p>\n<ul>\n<li>ETH cannot be designated as a <code>synthEquivalent</code>, hence a <code>wETH/sETH</code> curve stable swap pool would need to be created.</li>\n</ul>\n<h4 id=\"curve-stable-pool-specification\" style=\"position:relative;\"><a href=\"#curve-stable-pool-specification\" aria-label=\"curve stable pool specification permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Curve Stable Pool Specification</h4>\n<ul>\n<li>Each <code>synthEquivalent</code> &#x26; <code>synth</code> pair need to be mapped to a specific curve pool containing the respective these tokens. The specification would be done by calling <code>setCurvePoolForSynthExchange</code> function which takes in the address of the curve contract as an argument as well as the currencyKey of the synth.</li>\n<li>No curve meta-pools can be configured, as the curve pool needs to contain both the <code>synthEquivalent</code> and <code>synth</code> tokens.</li>\n</ul>\n<h4 id=\"direct-integration-contract-designation\" style=\"position:relative;\"><a href=\"#direct-integration-contract-designation\" aria-label=\"direct integration contract designation permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Direct Integration Contract Designation</h4>\n<p>The <code>CurveIntegration</code> contract needs to be pointed to the <a href=\"https://sips.synthetix.io/sips/sip-267/\"><code>DirectIntegration</code></a> contract, in order to be able to trade atomically with Synthetix's atomic function and retrieve the respective fee and pricing parameters, taking into account overrides.</p>\n<h4 id=\"swap-pricing-methodology\" style=\"position:relative;\"><a href=\"#swap-pricing-methodology\" aria-label=\"swap pricing methodology permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Swap Pricing Methodology</h4>\n<ul>\n<li>The <code>CurveIntegration</code> contract  uses the curve pool swap function <a href=\"https://curve.readthedocs.io/exchange-pools.html\"><code>StableSwap.exchange_underlying</code></a> to trade a specified amount of tokens. The swap return amount is obtained using the <a href=\"https://curve.readthedocs.io/factory-pools.html#getting-pool-info\"><code>StableSwap.get_dy_underlying</code></a> function.</li>\n</ul>\n<ol>\n<li>\n<p>Naming Convention:</p>\n<ul>\n<li><code>sourceEquivalent</code> is the token spent by the user</li>\n<li><code>sourceSynth</code> is the synth obtained by trading the <code>sourceEquivalent</code> token on the specified curve stable swap pool</li>\n<li><code>destinationSynth</code> is the synth obtained by trading the <code>sourceSynth</code> over Synthetix's atomic exchange</li>\n<li><code>destinationEquivalent</code> is token received by the user when trading <code>destinationSynth</code> on the specified stable swap curve pool</li>\n<li><code>Crv(sourceEquivalent,sourceSynth)</code> is the rate of exchange obtained from curve, swapping a <code>sourceSynth</code> per unit of <code>sourceEquivalent</code></li>\n<li><code>Atomic(sourceSynth,destinationSynth)</code> is Synthetix's atomic rate of exchange of a <code>destinationSynth</code> token per unit of <code>sourceSynth</code></li>\n<li><code>Crv(destinationSynth,destinationEquivalent)</code> is the rate of exchange obtained from curve, swapping a <code>destinationEquivalent</code> token per unit of <code>destinationSynth</code></li>\n</ul>\n</li>\n<li>\n<p>Curve Integration Pricing Function:</p>\n<p>The CurveIntegration price is obtained using the function below:</p>\n<p><code>Crv(sourceEquivalent,sourceSynth) * Atomic(sourceSynth,destinationSynth) * Crv(destinationSynth,destinationEquivalent)</code></p>\n<p>Note that both the <code>Curve</code> and <code>Synthetix</code> fill price are dependent on the amount of exchange at each step.</p>\n</li>\n</ol>\n<p>A <code>getReturnAmount</code> function would be incorporated into the <code>CurveIntegration</code> which takes in the following arguments:</p>\n<ul>\n<li>The address of the <code>sourceEquivalent</code> token</li>\n<li>The address <code>destinationEquivalent</code> token</li>\n<li>The <code>sourceAmount</code> representing the amount spent by the user</li>\n</ul>\n<p>The function returns the amount expected to be received in <code>destinationEquivalent</code> token, by trading over the <code>CurveIntegration</code> contract.</p>\n<h4 id=\"pure-chainlink-pricing\" style=\"position:relative;\"><a href=\"#pure-chainlink-pricing\" aria-label=\"pure chainlink pricing permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Pure Chainlink Pricing:</h4>\n<p>In case a synth is tagged to trade at the pure chainlink price, then the chainlink price used to fetch the price over atomic pricing.\nIt is worth nothing that with the current implementation of the atomic swaps functionality, the protocol does not need to map synths that trade at the pure chainlink price to <code>synthEquivalents</code>, since no uniswap pool is used. However, in order for the <code>CurveIntegration</code> contract to be able to handle swaps with synths that trade at pure chainlink price, a <code>synthEquivalent</code> needs to be designated.</p>\n<h4 id=\"min-return\" style=\"position:relative;\"><a href=\"#min-return\" aria-label=\"min return permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Min Return</h4>\n<p>A <code>minReturn</code> function will be incorporated into <code>CurveIntegration</code> swap function, representing the minimum return amount a user accepts to receive in <code>synthEquivalent</code> for the amount of <code>synthEquivalent</code> spent. In case the return amount is below the <code>minReturn</code>, the transaction reverts.</p>\n<h3 id=\"test-cases\" style=\"position:relative;\"><a href=\"#test-cases\" aria-label=\"test cases permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Test Cases</h3>\n<!--Test cases for an implementation are mandatory for SIPs but can be included with the implementation..-->\n<h3 id=\"configurable-values-via-sccp\" style=\"position:relative;\"><a href=\"#configurable-values-via-sccp\" aria-label=\"configurable values via sccp permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Configurable Values (Via SCCP)</h3>\n<!--Please list all values configurable via SCCP under this implementation.-->\n<ul>\n<li><code>setCurvePoolForSynthExchange</code> allows the Spartan Council to designate the Curve Stable-Swap contract over which the <code>synthEquivalent</code> to <code>synth</code> trade executes.</li>\n<li><code>setSynthEquivalent</code> allows the Spartan Council to designate the respective equivalent for each synth that can be traded on Crv pools.</li>\n</ul>\n<p>SIP rejected by author as the SIP-267 implementation does not require that SIP-268 be implemented as any address can be configured for integration.</p>\n<h2 id=\"copyright\" style=\"position:relative;\"><a href=\"#copyright\" aria-label=\"copyright permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Copyright</h2>\n<p>Copyright and related rights waived via <a href=\"https://creativecommons.org/publicdomain/zero/1.0/\">CC0</a>.</p>"}},"pageContext":{"id":"c9e24f2b-c19e-5782-85fa-3b85155067de","frontmatter__sip":268,"__params":{"frontmatter__sip":"268"}}},"staticQueryHashes":[]}