Skip to content

Instantly share code, notes, and snippets.

@awhiteside1
Created July 14, 2023 15:38
Show Gist options
  • Save awhiteside1/57bd22599c62165d149b6967941585f4 to your computer and use it in GitHub Desktop.
Save awhiteside1/57bd22599c62165d149b6967941585f4 to your computer and use it in GitHub Desktop.
<!DOCTYPE html>
<html lang="en" dir="ltr">
<head>
<meta charset="utf-8" />
<title>dependency graph</title>
<style>
.node:active path,
.node:hover path,
.node.current path,
.node:active polygon,
.node:hover polygon,
.node.current polygon {
stroke: fuchsia;
stroke-width: 2;
}
.edge:active path,
.edge:hover path,
.edge.current path,
.edge:active ellipse,
.edge:hover ellipse,
.edge.current ellipse {
stroke: fuchsia;
stroke-width: 3;
stroke-opacity: 1;
}
.edge:active polygon,
.edge:hover polygon,
.edge.current polygon {
stroke: fuchsia;
stroke-width: 3;
fill: fuchsia;
stroke-opacity: 1;
fill-opacity: 1;
}
.edge:active text,
.edge:hover text {
fill: fuchsia;
}
.cluster path {
stroke-width: 3;
}
.cluster:active path,
.cluster:hover path {
fill: #ffff0011;
}
div.hint {
background-color: #000000aa;
color: white;
font-family: Arial, Helvetica, sans-serif;
border-radius: 1rem;
position: fixed;
top: calc(50% - 4em);
right: calc(50% - 10em);
border: none;
padding: 1em 3em 1em 1em;
}
.hint button {
position: absolute;
font-weight: bolder;
right: 0.6em;
top: 0.6em;
color: inherit;
background-color: inherit;
border: 1px solid currentColor;
border-radius: 1em;
margin-left: 0.6em;
}
.hint a {
color: inherit;
}
#button_help {
color: white;
background-color: #00000011;
border-radius: 1em;
position: fixed;
top: 1em;
right: 1em;
font-size: 24pt;
font-weight: bolder;
width: 2em;
height: 2em;
border: none;
}
#button_help:hover {
cursor: pointer;
background-color: #00000077;
}
@media print {
#button_help {
display: none;
}
div.hint {
display: none;
}
}
</style>
</head>
<body>
<button id="button_help">?</button>
<div id="hints" class="hint" style="display: none">
<button id="close-hints">x</button>
<span id="hint-text"></span>
<ul>
<li><b>Hover</b> - highlight</li>
<li><b>Right-click</b> - pin highlight</li>
<li><b>ESC</b> - clear</li>
</ul>
</div>
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<!-- Generated by graphviz version 8.0.5 (20230430.1635)
-->
<!-- Title: dependency&#45;cruiser output Pages: 1 -->
<svg width="2881pt" height="805pt"
viewBox="0.00 0.00 2881.00 804.67" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 800.67)">
<title>dependency&#45;cruiser output</title>
<polygon fill="white" stroke="none" points="-4,4 -4,-800.67 2877,-800.67 2877,4 -4,4"/>
<g id="clust1" class="cluster">
<title>cluster_src</title>
<path fill="#ffffff" stroke="black" stroke-width="2" d="M20,-8C20,-8 2853,-8 2853,-8 2859,-8 2865,-14 2865,-20 2865,-20 2865,-776.67 2865,-776.67 2865,-782.67 2859,-788.67 2853,-788.67 2853,-788.67 20,-788.67 20,-788.67 14,-788.67 8,-782.67 8,-776.67 8,-776.67 8,-20 8,-20 8,-14 14,-8 20,-8"/>
<text text-anchor="middle" x="1436.5" y="-776.12" font-family="Helvetica,sans-Serif" font-weight="bold" font-size="9.00">src</text>
</g>
<g id="clust2" class="cluster">
<title>cluster_src/app</title>
<path fill="#ffffff" stroke="black" stroke-width="2" d="M520,-392.57C520,-392.57 724,-392.57 724,-392.57 730,-392.57 736,-398.57 736,-404.57 736,-404.57 736,-750.92 736,-750.92 736,-756.92 730,-762.92 724,-762.92 724,-762.92 520,-762.92 520,-762.92 514,-762.92 508,-756.92 508,-750.92 508,-750.92 508,-404.57 508,-404.57 508,-398.57 514,-392.57 520,-392.57"/>
<text text-anchor="start" x="614.12" y="-750.38" font-family="Helvetica,sans-Serif" font-weight="bold" font-size="9.00">app</text>
</g>
<g id="clust3" class="cluster">
<title>cluster_src/app/partner</title>
<path fill="#ffffff" stroke="black" stroke-width="2" d="M528,-522.25C528,-522.25 716,-522.25 716,-522.25 722,-522.25 728,-528.25 728,-534.25 728,-534.25 728,-725.17 728,-725.17 728,-731.17 722,-737.17 716,-737.17 716,-737.17 528,-737.17 528,-737.17 522,-737.17 516,-731.17 516,-725.17 516,-725.17 516,-534.25 516,-534.25 516,-528.25 522,-522.25 528,-522.25"/>
<text text-anchor="middle" x="622" y="-724.62" font-family="Helvetica,sans-Serif" font-weight="bold" font-size="9.00">partner</text>
</g>
<g id="clust4" class="cluster">
<title>cluster_src/app/partner/[partnerKey]</title>
<path fill="#ffffff" stroke="black" stroke-width="2" d="M548,-530.25C548,-530.25 708,-530.25 708,-530.25 714,-530.25 720,-536.25 720,-542.25 720,-542.25 720,-699.42 720,-699.42 720,-705.42 714,-711.42 708,-711.42 708,-711.42 548,-711.42 548,-711.42 542,-711.42 536,-705.42 536,-699.42 536,-699.42 536,-542.25 536,-542.25 536,-536.25 542,-530.25 548,-530.25"/>
<text text-anchor="start" x="600.62" y="-698.88" font-family="Helvetica,sans-Serif" font-weight="bold" font-size="9.00">[partnerKey]</text>
</g>
<g id="clust5" class="cluster">
<title>cluster_src/app/partner/[partnerKey]/savings</title>
<path fill="#ffffff" stroke="black" stroke-width="2" d="M556,-538.25C556,-538.25 688,-538.25 688,-538.25 694,-538.25 700,-544.25 700,-550.25 700,-550.25 700,-673.67 700,-673.67 700,-679.67 694,-685.67 688,-685.67 688,-685.67 556,-685.67 556,-685.67 550,-685.67 544,-679.67 544,-673.67 544,-673.67 544,-550.25 544,-550.25 544,-544.25 550,-538.25 556,-538.25"/>
<text text-anchor="start" x="605.12" y="-673.12" font-family="Helvetica,sans-Serif" font-weight="bold" font-size="9.00">savings</text>
</g>
<g id="clust6" class="cluster">
<title>cluster_src/components</title>
<path fill="#ffffff" stroke="black" stroke-width="2" d="M708,-125.25C708,-125.25 1140,-125.25 1140,-125.25 1146,-125.25 1152,-131.25 1152,-137.25 1152,-137.25 1152,-349.5 1152,-349.5 1152,-355.5 1146,-361.5 1140,-361.5 1140,-361.5 708,-361.5 708,-361.5 702,-361.5 696,-355.5 696,-349.5 696,-349.5 696,-137.25 696,-137.25 696,-131.25 702,-125.25 708,-125.25"/>
<text text-anchor="start" x="897.38" y="-348.95" font-family="Helvetica,sans-Serif" font-weight="bold" font-size="9.00">components</text>
</g>
<g id="clust7" class="cluster">
<title>cluster_src/components/content</title>
<path fill="#ffffff" stroke="black" stroke-width="2" d="M822,-149.25C822,-149.25 914,-149.25 914,-149.25 920,-149.25 926,-155.25 926,-161.25 926,-161.25 926,-323.75 926,-323.75 926,-329.75 920,-335.75 914,-335.75 914,-335.75 822,-335.75 822,-335.75 816,-335.75 810,-329.75 810,-323.75 810,-323.75 810,-161.25 810,-161.25 810,-155.25 816,-149.25 822,-149.25"/>
<text text-anchor="start" x="851.88" y="-323.2" font-family="Helvetica,sans-Serif" font-weight="bold" font-size="9.00">content</text>
</g>
<g id="clust8" class="cluster">
<title>cluster_src/components/elements</title>
<path fill="#ffffff" stroke="black" stroke-width="2" d="M728,-284.25C728,-284.25 790,-284.25 790,-284.25 796,-284.25 802,-290.25 802,-296.25 802,-296.25 802,-323.75 802,-323.75 802,-329.75 796,-335.75 790,-335.75 790,-335.75 728,-335.75 728,-335.75 722,-335.75 716,-329.75 716,-323.75 716,-323.75 716,-296.25 716,-296.25 716,-290.25 722,-284.25 728,-284.25"/>
<text text-anchor="middle" x="759" y="-323.2" font-family="Helvetica,sans-Serif" font-weight="bold" font-size="9.00">elements</text>
</g>
<g id="clust9" class="cluster">
<title>cluster_src/components/patterns</title>
<path fill="#ffffff" stroke="black" stroke-width="2" d="M946,-133.25C946,-133.25 1132,-133.25 1132,-133.25 1138,-133.25 1144,-139.25 1144,-145.25 1144,-145.25 1144,-240.25 1144,-240.25 1144,-246.25 1138,-252.25 1132,-252.25 1132,-252.25 946,-252.25 946,-252.25 940,-252.25 934,-246.25 934,-240.25 934,-240.25 934,-145.25 934,-145.25 934,-139.25 940,-133.25 946,-133.25"/>
<text text-anchor="middle" x="1039" y="-239.7" font-family="Helvetica,sans-Serif" font-weight="bold" font-size="9.00">patterns</text>
</g>
<g id="clust10" class="cluster">
<title>cluster_src/components/patterns/icons</title>
<path fill="#ffffff" stroke="black" stroke-width="2" d="M966,-141.25C966,-141.25 1124,-141.25 1124,-141.25 1130,-141.25 1136,-147.25 1136,-153.25 1136,-153.25 1136,-214.5 1136,-214.5 1136,-220.5 1130,-226.5 1124,-226.5 1124,-226.5 966,-226.5 966,-226.5 960,-226.5 954,-220.5 954,-214.5 954,-214.5 954,-153.25 954,-153.25 954,-147.25 960,-141.25 966,-141.25"/>
<text text-anchor="start" x="1033.38" y="-213.95" font-family="Helvetica,sans-Serif" font-weight="bold" font-size="9.00">icons</text>
</g>
<g id="clust11" class="cluster">
<title>cluster_src/components/patterns/icons/svg&#45;tools</title>
<path fill="#ffffff" stroke="black" stroke-width="2" d="M1052,-149.25C1052,-149.25 1116,-149.25 1116,-149.25 1122,-149.25 1128,-155.25 1128,-161.25 1128,-161.25 1128,-188.75 1128,-188.75 1128,-194.75 1122,-200.75 1116,-200.75 1116,-200.75 1052,-200.75 1052,-200.75 1046,-200.75 1040,-194.75 1040,-188.75 1040,-188.75 1040,-161.25 1040,-161.25 1040,-155.25 1046,-149.25 1052,-149.25"/>
<text text-anchor="middle" x="1084" y="-188.2" font-family="Helvetica,sans-Serif" font-weight="bold" font-size="9.00">svg&#45;tools</text>
</g>
<g id="clust12" class="cluster">
<title>cluster_src/experiences</title>
<path fill="#ffffff" stroke="black" stroke-width="2" d="M2420,-260.25C2420,-260.25 2767,-260.25 2767,-260.25 2773,-260.25 2779,-266.25 2779,-272.25 2779,-272.25 2779,-622.17 2779,-622.17 2779,-628.17 2773,-634.17 2767,-634.17 2767,-634.17 2420,-634.17 2420,-634.17 2414,-634.17 2408,-628.17 2408,-622.17 2408,-622.17 2408,-272.25 2408,-272.25 2408,-266.25 2414,-260.25 2420,-260.25"/>
<text text-anchor="middle" x="2593.5" y="-621.62" font-family="Helvetica,sans-Serif" font-weight="bold" font-size="9.00">experiences</text>
</g>
<g id="clust13" class="cluster">
<title>cluster_src/experiences/savings</title>
<path fill="#ffffff" stroke="black" stroke-width="2" d="M2440,-268.25C2440,-268.25 2759,-268.25 2759,-268.25 2765,-268.25 2771,-274.25 2771,-280.25 2771,-280.25 2771,-596.42 2771,-596.42 2771,-602.42 2765,-608.42 2759,-608.42 2759,-608.42 2440,-608.42 2440,-608.42 2434,-608.42 2428,-602.42 2428,-596.42 2428,-596.42 2428,-280.25 2428,-280.25 2428,-274.25 2434,-268.25 2440,-268.25"/>
<text text-anchor="start" x="2582.62" y="-595.88" font-family="Helvetica,sans-Serif" font-weight="bold" font-size="9.00">savings</text>
</g>
<g id="clust14" class="cluster">
<title>cluster_src/experiences/savings/Header</title>
<path fill="#ffffff" stroke="black" stroke-width="2" d="M2705,-385.5C2705,-385.5 2751,-385.5 2751,-385.5 2757,-385.5 2763,-391.5 2763,-397.5 2763,-397.5 2763,-570.67 2763,-570.67 2763,-576.67 2757,-582.67 2751,-582.67 2751,-582.67 2705,-582.67 2705,-582.67 2699,-582.67 2693,-576.67 2693,-570.67 2693,-570.67 2693,-397.5 2693,-397.5 2693,-391.5 2699,-385.5 2705,-385.5"/>
<text text-anchor="start" x="2712.25" y="-570.12" font-family="Helvetica,sans-Serif" font-weight="bold" font-size="9.00">Header</text>
</g>
<g id="clust15" class="cluster">
<title>cluster_src/experiences/savings/Results</title>
<path fill="#ffffff" stroke="black" stroke-width="2" d="M2526,-276.25C2526,-276.25 2673,-276.25 2673,-276.25 2679,-276.25 2685,-282.25 2685,-288.25 2685,-288.25 2685,-570.67 2685,-570.67 2685,-576.67 2679,-582.67 2673,-582.67 2673,-582.67 2526,-582.67 2526,-582.67 2520,-582.67 2514,-576.67 2514,-570.67 2514,-570.67 2514,-288.25 2514,-288.25 2514,-282.25 2520,-276.25 2526,-276.25"/>
<text text-anchor="start" x="2583" y="-570.12" font-family="Helvetica,sans-Serif" font-weight="bold" font-size="9.00">Results</text>
</g>
<g id="clust16" class="cluster">
<title>cluster_src/experiences/savings/Results/SavingsOfferCard</title>
<path fill="#ffffff" stroke="black" stroke-width="2" d="M2596,-284.25C2596,-284.25 2665,-284.25 2665,-284.25 2671,-284.25 2677,-290.25 2677,-296.25 2677,-296.25 2677,-417.93 2677,-417.93 2677,-423.93 2671,-429.93 2665,-429.93 2665,-429.93 2596,-429.93 2596,-429.93 2590,-429.93 2584,-423.93 2584,-417.93 2584,-417.93 2584,-296.25 2584,-296.25 2584,-290.25 2590,-284.25 2596,-284.25"/>
<text text-anchor="start" x="2591.88" y="-417.38" font-family="Helvetica,sans-Serif" font-weight="bold" font-size="9.00">SavingsOfferCard</text>
</g>
<g id="clust35" class="cluster">
<title>cluster_src/ui</title>
<path fill="#ffffff" stroke="black" stroke-width="2" d="M1178,-149.25C1178,-149.25 1332,-149.25 1332,-149.25 1338,-149.25 1344,-155.25 1344,-161.25 1344,-161.25 1344,-349.5 1344,-349.5 1344,-355.5 1338,-361.5 1332,-361.5 1332,-361.5 1178,-361.5 1178,-361.5 1172,-361.5 1166,-355.5 1166,-349.5 1166,-349.5 1166,-161.25 1166,-161.25 1166,-155.25 1172,-149.25 1178,-149.25"/>
<text text-anchor="middle" x="1255" y="-348.95" font-family="Helvetica,sans-Serif" font-weight="bold" font-size="9.00">ui</text>
</g>
<g id="clust36" class="cluster">
<title>cluster_src/ui/navigation</title>
<path fill="#ffffff" stroke="black" stroke-width="2" d="M1198,-284.25C1198,-284.25 1260,-284.25 1260,-284.25 1266,-284.25 1272,-290.25 1272,-296.25 1272,-296.25 1272,-323.75 1272,-323.75 1272,-329.75 1266,-335.75 1260,-335.75 1260,-335.75 1198,-335.75 1198,-335.75 1192,-335.75 1186,-329.75 1186,-323.75 1186,-323.75 1186,-296.25 1186,-296.25 1186,-290.25 1192,-284.25 1198,-284.25"/>
<text text-anchor="middle" x="1229" y="-323.2" font-family="Helvetica,sans-Serif" font-weight="bold" font-size="9.00">navigation</text>
</g>
<g id="clust34" class="cluster">
<title>cluster_src/types</title>
<path fill="#ffffff" stroke="black" stroke-width="2" d="M168,-16C168,-16 230,-16 230,-16 236,-16 242,-22 242,-28 242,-28 242,-55.5 242,-55.5 242,-61.5 236,-67.5 230,-67.5 230,-67.5 168,-67.5 168,-67.5 162,-67.5 156,-61.5 156,-55.5 156,-55.5 156,-28 156,-28 156,-22 162,-16 168,-16"/>
<text text-anchor="start" x="187" y="-54.95" font-family="Helvetica,sans-Serif" font-weight="bold" font-size="9.00">types</text>
</g>
<g id="clust25" class="cluster">
<title>cluster_src/shared</title>
<path fill="#ffffff" stroke="black" stroke-width="2" d="M1640,-75.5C1640,-75.5 2388,-75.5 2388,-75.5 2394,-75.5 2400,-81.5 2400,-87.5 2400,-87.5 2400,-502.25 2400,-502.25 2400,-508.25 2394,-514.25 2388,-514.25 2388,-514.25 1640,-514.25 1640,-514.25 1634,-514.25 1628,-508.25 1628,-502.25 1628,-502.25 1628,-87.5 1628,-87.5 1628,-81.5 1634,-75.5 1640,-75.5"/>
<text text-anchor="middle" x="2014" y="-501.7" font-family="Helvetica,sans-Serif" font-weight="bold" font-size="9.00">shared</text>
</g>
<g id="clust31" class="cluster">
<title>cluster_src/shared/ui</title>
<path fill="#ffffff" stroke="black" stroke-width="2" d="M1754,-369.5C1754,-369.5 2006,-369.5 2006,-369.5 2012,-369.5 2018,-375.5 2018,-381.5 2018,-381.5 2018,-476.5 2018,-476.5 2018,-482.5 2012,-488.5 2006,-488.5 2006,-488.5 1754,-488.5 1754,-488.5 1748,-488.5 1742,-482.5 1742,-476.5 1742,-476.5 1742,-381.5 1742,-381.5 1742,-375.5 1748,-369.5 1754,-369.5"/>
<text text-anchor="middle" x="1880" y="-475.95" font-family="Helvetica,sans-Serif" font-weight="bold" font-size="9.00">ui</text>
</g>
<g id="clust32" class="cluster">
<title>cluster_src/shared/ui/layout</title>
<path fill="#ffffff" stroke="black" stroke-width="2" d="M1840,-377.5C1840,-377.5 1998,-377.5 1998,-377.5 2004,-377.5 2010,-383.5 2010,-389.5 2010,-389.5 2010,-450.75 2010,-450.75 2010,-456.75 2004,-462.75 1998,-462.75 1998,-462.75 1840,-462.75 1840,-462.75 1834,-462.75 1828,-456.75 1828,-450.75 1828,-450.75 1828,-389.5 1828,-389.5 1828,-383.5 1834,-377.5 1840,-377.5"/>
<text text-anchor="start" x="1905.88" y="-450.2" font-family="Helvetica,sans-Serif" font-weight="bold" font-size="9.00">layout</text>
</g>
<g id="clust33" class="cluster">
<title>cluster_src/shared/ui/layout/CustomHead</title>
<path fill="#ffffff" stroke="black" stroke-width="2" d="M1928,-385.5C1928,-385.5 1990,-385.5 1990,-385.5 1996,-385.5 2002,-391.5 2002,-397.5 2002,-397.5 2002,-425 2002,-425 2002,-431 1996,-437 1990,-437 1990,-437 1928,-437 1928,-437 1922,-437 1916,-431 1916,-425 1916,-425 1916,-397.5 1916,-397.5 1916,-391.5 1922,-385.5 1928,-385.5"/>
<text text-anchor="middle" x="1959" y="-424.45" font-family="Helvetica,sans-Serif" font-weight="bold" font-size="9.00">CustomHead</text>
</g>
<g id="clust26" class="cluster">
<title>cluster_src/shared/offers</title>
<path fill="#ffffff" stroke="black" stroke-width="2" d="M2100,-83.5C2100,-83.5 2380,-83.5 2380,-83.5 2386,-83.5 2392,-89.5 2392,-95.5 2392,-95.5 2392,-425 2392,-425 2392,-431 2386,-437 2380,-437 2380,-437 2100,-437 2100,-437 2094,-437 2088,-431 2088,-425 2088,-425 2088,-95.5 2088,-95.5 2088,-89.5 2094,-83.5 2100,-83.5"/>
<text text-anchor="start" x="2227.25" y="-424.45" font-family="Helvetica,sans-Serif" font-weight="bold" font-size="9.00">offers</text>
</g>
<g id="clust27" class="cluster">
<title>cluster_src/shared/offers/core</title>
<path fill="#ffffff" stroke="black" stroke-width="2" d="M2236,-91.5C2236,-91.5 2372,-91.5 2372,-91.5 2378,-91.5 2384,-97.5 2384,-103.5 2384,-103.5 2384,-188.75 2384,-188.75 2384,-194.75 2378,-200.75 2372,-200.75 2372,-200.75 2236,-200.75 2236,-200.75 2230,-200.75 2224,-194.75 2224,-188.75 2224,-188.75 2224,-103.5 2224,-103.5 2224,-97.5 2230,-91.5 2236,-91.5"/>
<text text-anchor="middle" x="2304" y="-188.2" font-family="Helvetica,sans-Serif" font-weight="bold" font-size="9.00">core</text>
</g>
<g id="clust28" class="cluster">
<title>cluster_src/shared/offers/marketplace</title>
<path fill="#ffffff" stroke="black" stroke-width="2" d="M2114,-141.25C2114,-141.25 2204,-141.25 2204,-141.25 2210,-141.25 2216,-147.25 2216,-153.25 2216,-153.25 2216,-349.5 2216,-349.5 2216,-355.5 2210,-361.5 2204,-361.5 2204,-361.5 2114,-361.5 2114,-361.5 2108,-361.5 2102,-355.5 2102,-349.5 2102,-349.5 2102,-153.25 2102,-153.25 2102,-147.25 2108,-141.25 2114,-141.25"/>
<text text-anchor="middle" x="2159" y="-348.95" font-family="Helvetica,sans-Serif" font-weight="bold" font-size="9.00">marketplace</text>
</g>
<g id="clust29" class="cluster">
<title>cluster_src/shared/offers/marketplace/savings</title>
<path fill="#ffffff" stroke="black" stroke-width="2" d="M2134,-149.25C2134,-149.25 2196,-149.25 2196,-149.25 2202,-149.25 2208,-155.25 2208,-161.25 2208,-161.25 2208,-323.75 2208,-323.75 2208,-329.75 2202,-335.75 2196,-335.75 2196,-335.75 2134,-335.75 2134,-335.75 2128,-335.75 2122,-329.75 2122,-323.75 2122,-323.75 2122,-161.25 2122,-161.25 2122,-155.25 2128,-149.25 2134,-149.25"/>
<text text-anchor="start" x="2148.12" y="-323.2" font-family="Helvetica,sans-Serif" font-weight="bold" font-size="9.00">savings</text>
</g>
<g id="clust30" class="cluster">
<title>cluster_src/shared/session</title>
<path fill="#ffffff" stroke="black" stroke-width="2" d="M1660,-385.5C1660,-385.5 1722,-385.5 1722,-385.5 1728,-385.5 1734,-391.5 1734,-397.5 1734,-397.5 1734,-425 1734,-425 1734,-431 1728,-437 1722,-437 1722,-437 1660,-437 1660,-437 1654,-437 1648,-431 1648,-425 1648,-425 1648,-397.5 1648,-397.5 1648,-391.5 1654,-385.5 1660,-385.5"/>
<text text-anchor="middle" x="1691" y="-424.45" font-family="Helvetica,sans-Serif" font-weight="bold" font-size="9.00">session</text>
</g>
<g id="clust23" class="cluster">
<title>cluster_src/services</title>
<path fill="#ffffff" stroke="black" stroke-width="2" d="M80,-141.25C80,-141.25 220,-141.25 220,-141.25 226,-141.25 232,-147.25 232,-153.25 232,-153.25 232,-349.5 232,-349.5 232,-355.5 226,-361.5 220,-361.5 220,-361.5 80,-361.5 80,-361.5 74,-361.5 68,-355.5 68,-349.5 68,-349.5 68,-153.25 68,-153.25 68,-147.25 74,-141.25 80,-141.25"/>
<text text-anchor="middle" x="150" y="-348.95" font-family="Helvetica,sans-Serif" font-weight="bold" font-size="9.00">services</text>
</g>
<g id="clust24" class="cluster">
<title>cluster_src/services/AnalyticsLite</title>
<path fill="#ffffff" stroke="black" stroke-width="2" d="M100,-149.25C100,-149.25 212,-149.25 212,-149.25 218,-149.25 224,-155.25 224,-161.25 224,-161.25 224,-323.75 224,-323.75 224,-329.75 218,-335.75 212,-335.75 212,-335.75 100,-335.75 100,-335.75 94,-335.75 88,-329.75 88,-323.75 88,-323.75 88,-161.25 88,-161.25 88,-155.25 94,-149.25 100,-149.25"/>
<text text-anchor="start" x="127.88" y="-323.2" font-family="Helvetica,sans-Serif" font-weight="bold" font-size="9.00">AnalyticsLite</text>
</g>
<g id="clust20" class="cluster">
<title>cluster_src/server</title>
<path fill="#ffffff" stroke="black" stroke-width="2" d="M1380,-83.5C1380,-83.5 1608,-83.5 1608,-83.5 1614,-83.5 1620,-89.5 1620,-95.5 1620,-95.5 1620,-349.5 1620,-349.5 1620,-355.5 1614,-361.5 1608,-361.5 1608,-361.5 1380,-361.5 1380,-361.5 1374,-361.5 1368,-355.5 1368,-349.5 1368,-349.5 1368,-95.5 1368,-95.5 1368,-89.5 1374,-83.5 1380,-83.5"/>
<text text-anchor="middle" x="1494" y="-348.95" font-family="Helvetica,sans-Serif" font-weight="bold" font-size="9.00">server</text>
</g>
<g id="clust21" class="cluster">
<title>cluster_src/server/cms</title>
<path fill="#ffffff" stroke="black" stroke-width="2" d="M1492,-156.32C1492,-156.32 1538,-156.32 1538,-156.32 1544,-156.32 1550,-162.32 1550,-168.32 1550,-168.32 1550,-323.75 1550,-323.75 1550,-329.75 1544,-335.75 1538,-335.75 1538,-335.75 1492,-335.75 1492,-335.75 1486,-335.75 1480,-329.75 1480,-323.75 1480,-323.75 1480,-168.32 1480,-168.32 1480,-162.32 1486,-156.32 1492,-156.32"/>
<text text-anchor="start" x="1505.62" y="-323.2" font-family="Helvetica,sans-Serif" font-weight="bold" font-size="9.00">cms</text>
</g>
<g id="clust22" class="cluster">
<title>cluster_src/server/engine</title>
<path fill="#ffffff" stroke="black" stroke-width="2" d="M1400,-91.5C1400,-91.5 1460,-91.5 1460,-91.5 1466,-91.5 1472,-97.5 1472,-103.5 1472,-103.5 1472,-316.68 1472,-316.68 1472,-322.68 1466,-328.68 1460,-328.68 1460,-328.68 1400,-328.68 1400,-328.68 1394,-328.68 1388,-322.68 1388,-316.68 1388,-316.68 1388,-103.5 1388,-103.5 1388,-97.5 1394,-91.5 1400,-91.5"/>
<text text-anchor="start" x="1415.75" y="-316.12" font-family="Helvetica,sans-Serif" font-weight="bold" font-size="9.00">engine</text>
</g>
<g id="clust19" class="cluster">
<title>cluster_src/reshaped</title>
<path fill="#ffffff" stroke="black" stroke-width="2" d="M408,-284.25C408,-284.25 470,-284.25 470,-284.25 476,-284.25 482,-290.25 482,-296.25 482,-296.25 482,-323.75 482,-323.75 482,-329.75 476,-335.75 470,-335.75 470,-335.75 408,-335.75 408,-335.75 402,-335.75 396,-329.75 396,-323.75 396,-323.75 396,-296.25 396,-296.25 396,-290.25 402,-284.25 408,-284.25"/>
<text text-anchor="middle" x="439" y="-323.2" font-family="Helvetica,sans-Serif" font-weight="bold" font-size="9.00">reshaped</text>
</g>
<g id="clust17" class="cluster">
<title>cluster_src/lib</title>
<path fill="#ffffff" stroke="black" stroke-width="2" d="M262,-16C262,-16 614,-16 614,-16 620,-16 626,-22 626,-28 626,-28 626,-207.43 626,-207.43 626,-213.43 620,-219.43 614,-219.43 614,-219.43 262,-219.43 262,-219.43 256,-219.43 250,-213.43 250,-207.43 250,-207.43 250,-28 250,-28 250,-22 256,-16 262,-16"/>
<text text-anchor="start" x="433.12" y="-206.88" font-family="Helvetica,sans-Serif" font-weight="bold" font-size="9.00">lib</text>
</g>
<g id="clust18" class="cluster">
<title>cluster_src/lib/middleware</title>
<path fill="#ffffff" stroke="black" stroke-width="2" d="M332,-91.5C332,-91.5 478,-91.5 478,-91.5 484,-91.5 490,-97.5 490,-103.5 490,-103.5 490,-181.68 490,-181.68 490,-187.68 484,-193.68 478,-193.68 478,-193.68 332,-193.68 332,-193.68 326,-193.68 320,-187.68 320,-181.68 320,-181.68 320,-103.5 320,-103.5 320,-97.5 326,-91.5 332,-91.5"/>
<text text-anchor="start" x="380.25" y="-181.12" font-family="Helvetica,sans-Serif" font-weight="bold" font-size="9.00">middleware</text>
</g>
<!-- src -->
<!-- src/app -->
<!-- src/lib -->
<!-- src/app&#45;&gt;src/lib -->
<g id="edge1" class="edge">
<title>src/app&#45;&gt;src/lib</title>
<path fill="none" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" d="M520.25,-401C535.71,-401 625.67,-401 625.67,-401 625.67,-401 625.67,-109 625.67,-109 625.67,-109 511.18,-109 511.18,-109"/>
<polygon fill="#000000" fill-opacity="0.200000" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" points="511.18,-106.9 505.18,-109 511.18,-111.1 511.18,-106.9"/>
</g>
<!-- src/shared/ui/layout/CustomHead/Schemas -->
<g id="node4" class="node">
<title>src/shared/ui/layout/CustomHead/Schemas</title>
<g id="a_node4"><a xlink:href="src/shared/ui/layout/CustomHead/Schemas" xlink:title="Schemas">
<polygon fill="#ccffcc" stroke="black" points="1994.12,-411.25 1941.85,-411.25 1939.88,-409.28 1939.88,-393.5 1992.15,-393.5 1994.12,-395.47 1994.12,-411.25"/>
<polyline fill="none" stroke="black" points="1992.15,-409.28 1939.88,-409.28"/>
<polyline fill="none" stroke="black" points="1992.15,-409.28 1992.15,-393.5"/>
<polyline fill="none" stroke="black" points="1992.15,-409.28 1994.12,-411.25"/>
<text text-anchor="start" x="1947.88" y="-398.7" font-family="Helvetica,sans-Serif" font-size="9.00">Schemas</text>
</a>
</g>
</g>
<!-- src/app&#45;&gt;src/shared/ui/layout/CustomHead/Schemas -->
<g id="edge2" class="edge">
<title>src/app&#45;&gt;src/shared/ui/layout/CustomHead/Schemas</title>
<path fill="none" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" d="M518,-405.17C518,-414.65 518,-445 518,-445 518,-445 1967,-445 1967,-445 1967,-445 1967,-420.41 1967,-420.41"/>
<polygon fill="#000000" fill-opacity="0.200000" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" points="1969.1,-420.41 1967,-414.41 1964.9,-420.41 1969.1,-420.41"/>
</g>
<!-- src/lib/types -->
<g id="node5" class="node">
<title>src/lib/types</title>
<g id="a_node5"><a xlink:href="src/lib/types" xlink:title="types">
<polygon fill="#ffffcc" stroke="black" points="618,-41.75 565.97,-41.75 564,-39.78 564,-24 616.03,-24 618,-25.97 618,-41.75"/>
<polyline fill="none" stroke="black" points="616.03,-39.78 564,-39.78"/>
<polyline fill="none" stroke="black" points="616.03,-39.78 616.03,-24"/>
<polyline fill="none" stroke="black" points="616.03,-39.78 618,-41.75"/>
<text text-anchor="start" x="580.12" y="-29.2" font-family="Helvetica,sans-Serif" font-size="9.00">types</text>
</a>
</g>
</g>
<!-- src/app&#45;&gt;src/lib/types -->
<g id="edge3" class="edge">
<title>src/app&#45;&gt;src/lib/types</title>
<path fill="none" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" d="M520.61,-402C540.54,-402 668.12,-402 668.12,-402 668.12,-402 668.12,-38 668.12,-38 668.12,-38 627.41,-38 627.41,-38"/>
<polygon fill="#000000" fill-opacity="0.200000" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" points="627.41,-35.9 621.41,-38 627.41,-40.1 627.41,-35.9"/>
</g>
<!-- src/reshaped/fiona -->
<g id="node6" class="node">
<title>src/reshaped/fiona</title>
<g id="a_node6"><a xlink:href="src/reshaped/fiona" xlink:title="fiona">
<polygon fill="#ffffcc" stroke="black" points="474,-310 421.97,-310 420,-308.03 420,-292.25 472.03,-292.25 474,-294.22 474,-310"/>
<polyline fill="none" stroke="black" points="472.03,-308.03 420,-308.03"/>
<polyline fill="none" stroke="black" points="472.03,-308.03 472.03,-292.25"/>
<polyline fill="none" stroke="black" points="472.03,-308.03 474,-310"/>
<text text-anchor="start" x="436.88" y="-297.45" font-family="Helvetica,sans-Serif" font-size="9.00">fiona</text>
</a>
</g>
</g>
<!-- src/app&#45;&gt;src/reshaped/fiona -->
<g id="edge4" class="edge">
<title>src/app&#45;&gt;src/reshaped/fiona</title>
<path fill="none" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" d="M518,-399.59C518,-383.79 518,-306 518,-306 518,-306 483.25,-306 483.25,-306"/>
<polygon fill="#000000" fill-opacity="0.200000" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" points="483.25,-303.9 477.25,-306 483.25,-308.1 483.25,-303.9"/>
</g>
<!-- src/services/AnalyticsLite/GA4 -->
<g id="node7" class="node">
<title>src/services/AnalyticsLite/GA4</title>
<g id="a_node7"><a xlink:href="src/services/AnalyticsLite/GA4" xlink:title="GA4">
<polygon fill="#ffffcc" stroke="black" points="150,-175 97.97,-175 96,-173.03 96,-157.25 148.03,-157.25 150,-159.22 150,-175"/>
<polyline fill="none" stroke="black" points="148.03,-173.03 96,-173.03"/>
<polyline fill="none" stroke="black" points="148.03,-173.03 148.03,-157.25"/>
<polyline fill="none" stroke="black" points="148.03,-173.03 150,-175"/>
<text text-anchor="start" x="114" y="-162.45" font-family="Helvetica,sans-Serif" font-size="9.00">GA4</text>
</a>
</g>
</g>
<!-- src/app&#45;&gt;src/services/AnalyticsLite/GA4 -->
<g id="edge5" class="edge">
<title>src/app&#45;&gt;src/services/AnalyticsLite/GA4</title>
<path fill="none" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" d="M517.1,-399.78C517.1,-398.84 517.1,-398 517.1,-398 517.1,-398 153,-398 153,-398 153,-398 153,-169 153,-169 153,-169 152.72,-169 152.72,-169"/>
<polygon fill="#000000" fill-opacity="0.200000" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" points="159.23,-166.9 153.23,-169 159.23,-171.1 159.23,-166.9"/>
</g>
<!-- src/lib/middleware/middleware -->
<g id="node8" class="node">
<title>src/lib/middleware/middleware</title>
<g id="a_node8"><a xlink:href="src/lib/middleware/middleware" xlink:title="middleware">
<polygon fill="#ffffcc" stroke="black" points="392,-117.25 329.97,-117.25 328,-115.28 328,-99.5 390.03,-99.5 392,-101.47 392,-117.25"/>
<polyline fill="none" stroke="black" points="390.03,-115.28 328,-115.28"/>
<polyline fill="none" stroke="black" points="390.03,-115.28 390.03,-99.5"/>
<polyline fill="none" stroke="black" points="390.03,-115.28 392,-117.25"/>
<text text-anchor="start" x="336" y="-104.7" font-family="Helvetica,sans-Serif" font-size="9.00">middleware</text>
</a>
</g>
</g>
<!-- src/app&#45;&gt;src/lib/middleware/middleware -->
<g id="edge6" class="edge">
<title>src/app&#45;&gt;src/lib/middleware/middleware</title>
<path fill="none" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" d="M518.9,-399.9C518.9,-379.88 518.9,-245 518.9,-245 518.9,-245 353.6,-245 353.6,-245 353.6,-245 353.6,-126.34 353.6,-126.34"/>
<polygon fill="#000000" fill-opacity="0.200000" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" points="355.7,-126.34 353.6,-120.34 351.5,-126.34 355.7,-126.34"/>
</g>
<!-- src/components/elements/Portal -->
<g id="node9" class="node">
<title>src/components/elements/Portal</title>
<g id="a_node9"><a xlink:href="src/components/elements/Portal" xlink:title="Portal">
<polygon fill="#ffffcc" stroke="black" points="794,-310 741.97,-310 740,-308.03 740,-292.25 792.03,-292.25 794,-294.22 794,-310"/>
<polyline fill="none" stroke="black" points="792.03,-308.03 740,-308.03"/>
<polyline fill="none" stroke="black" points="792.03,-308.03 792.03,-292.25"/>
<polyline fill="none" stroke="black" points="792.03,-308.03 794,-310"/>
<text text-anchor="start" x="755" y="-297.45" font-family="Helvetica,sans-Serif" font-size="9.00">Portal</text>
</a>
</g>
</g>
<!-- src/app&#45;&gt;src/components/elements/Portal -->
<g id="edge7" class="edge">
<title>src/app&#45;&gt;src/components/elements/Portal</title>
<path fill="none" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" d="M518.94,-405C522.62,-405 758,-405 758,-405 758,-405 758,-319.34 758,-319.34"/>
<polygon fill="#000000" fill-opacity="0.200000" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" points="760.1,-319.34 758,-313.34 755.9,-319.34 760.1,-319.34"/>
</g>
<!-- src/lib/hooks -->
<g id="node10" class="node">
<title>src/lib/hooks</title>
<g id="a_node10"><a xlink:href="src/lib/hooks" xlink:title="hooks">
<polygon fill="#ffffcc" stroke="black" points="312,-175 259.97,-175 258,-173.03 258,-157.25 310.03,-157.25 312,-159.22 312,-175"/>
<polyline fill="none" stroke="black" points="310.03,-173.03 258,-173.03"/>
<polyline fill="none" stroke="black" points="310.03,-173.03 310.03,-157.25"/>
<polyline fill="none" stroke="black" points="310.03,-173.03 312,-175"/>
<text text-anchor="start" x="272.62" y="-162.45" font-family="Helvetica,sans-Serif" font-size="9.00">hooks</text>
</a>
</g>
</g>
<!-- src/app&#45;&gt;src/lib/hooks -->
<g id="edge8" class="edge">
<title>src/app&#45;&gt;src/lib/hooks</title>
<path fill="none" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" d="M515.39,-402C489.89,-402 285.9,-402 285.9,-402 285.9,-402 285.9,-184.37 285.9,-184.37"/>
<polygon fill="#000000" fill-opacity="0.200000" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" points="288,-184.37 285.9,-178.37 283.8,-184.37 288,-184.37"/>
</g>
<!-- src/lib/pending -->
<g id="node11" class="node">
<title>src/lib/pending</title>
<g id="a_node11"><a xlink:href="src/lib/pending" xlink:title="pending">
<polygon fill="#ffffcc" stroke="black" points="552,-175 499.97,-175 498,-173.03 498,-157.25 550.03,-157.25 552,-159.22 552,-175"/>
<polyline fill="none" stroke="black" points="550.03,-173.03 498,-173.03"/>
<polyline fill="none" stroke="black" points="550.03,-173.03 550.03,-157.25"/>
<polyline fill="none" stroke="black" points="550.03,-173.03 552,-175"/>
<text text-anchor="start" x="508.12" y="-162.45" font-family="Helvetica,sans-Serif" font-size="9.00">pending</text>
</a>
</g>
</g>
<!-- src/app&#45;&gt;src/lib/pending -->
<g id="edge9" class="edge">
<title>src/app&#45;&gt;src/lib/pending</title>
<path fill="none" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" d="M515.9,-401C512.73,-401 507.1,-401 507.1,-401 507.1,-401 507.1,-184.33 507.1,-184.33"/>
<polygon fill="#000000" fill-opacity="0.200000" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" points="509.2,-184.33 507.1,-178.33 505,-184.33 509.2,-184.33"/>
</g>
<!-- src/services/AnalyticsLite/Datadog -->
<g id="node12" class="node">
<title>src/services/AnalyticsLite/Datadog</title>
<g id="a_node12"><a xlink:href="src/services/AnalyticsLite/Datadog" xlink:title="Datadog">
<polygon fill="#ffffcc" stroke="black" points="150,-310 97.97,-310 96,-308.03 96,-292.25 148.03,-292.25 150,-294.22 150,-310"/>
<polyline fill="none" stroke="black" points="148.03,-308.03 96,-308.03"/>
<polyline fill="none" stroke="black" points="148.03,-308.03 148.03,-292.25"/>
<polyline fill="none" stroke="black" points="148.03,-308.03 150,-310"/>
<text text-anchor="start" x="105.38" y="-297.45" font-family="Helvetica,sans-Serif" font-size="9.00">Datadog</text>
</a>
</g>
</g>
<!-- src/app&#45;&gt;src/services/AnalyticsLite/Datadog -->
<g id="edge10" class="edge">
<title>src/app&#45;&gt;src/services/AnalyticsLite/Datadog</title>
<path fill="none" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" d="M515.48,-403C481.84,-403 123,-403 123,-403 123,-403 123,-319.17 123,-319.17"/>
<polygon fill="#000000" fill-opacity="0.200000" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" points="125.1,-319.17 123,-313.17 120.9,-319.17 125.1,-319.17"/>
</g>
<!-- src/services/AnalyticsLite -->
<!-- src/app&#45;&gt;src/services/AnalyticsLite -->
<g id="edge11" class="edge">
<title>src/app&#45;&gt;src/services/AnalyticsLite</title>
<path fill="none" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" d="M517.1,-404.69C517.1,-405.84 517.1,-407 517.1,-407 517.1,-407 189,-407 189,-407 189,-407 189,-312.34 189,-312.34"/>
<polygon fill="#000000" fill-opacity="0.200000" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" points="191.1,-312.34 189,-306.34 186.9,-312.34 191.1,-312.34"/>
</g>
<!-- src/lib&#45;&gt;src/lib/types -->
<g id="edge75" class="edge">
<title>src/lib&#45;&gt;src/lib/types</title>
<path fill="none" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" d="M501.58,-107C513.66,-107 591,-107 591,-107 591,-107 591,-50.96 591,-50.96"/>
<polygon fill="#000000" fill-opacity="0.200000" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" points="593.1,-50.96 591,-44.96 588.9,-50.96 593.1,-50.96"/>
</g>
<!-- src/types -->
<!-- src/lib&#45;&gt;src/types -->
<g id="edge72" class="edge">
<title>src/lib&#45;&gt;src/types</title>
<path fill="none" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" d="M499.1,-106.36C499.1,-104.18 499.1,-101 499.1,-101 499.1,-101 494.82,-101 494.82,-101 494.82,-101 494.82,-76 494.82,-76 494.82,-76 166,-76 166,-76 166,-76 166,-43.96 166,-43.96"/>
<polygon fill="#000000" fill-opacity="0.200000" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" points="168.1,-43.95 166,-37.96 163.9,-43.96 168.1,-43.95"/>
</g>
<!-- src/lib/promiseHelpers -->
<g id="node57" class="node">
<title>src/lib/promiseHelpers</title>
<g id="a_node57"><a xlink:href="src/lib/promiseHelpers" xlink:title="promiseHelpers">
<polygon fill="#ffffcc" stroke="black" points="551.62,-41.75 472.35,-41.75 470.38,-39.78 470.38,-24 549.65,-24 551.62,-25.97 551.62,-41.75"/>
<polyline fill="none" stroke="black" points="549.65,-39.78 470.38,-39.78"/>
<polyline fill="none" stroke="black" points="549.65,-39.78 549.65,-24"/>
<polyline fill="none" stroke="black" points="549.65,-39.78 551.62,-41.75"/>
<text text-anchor="start" x="478.38" y="-29.2" font-family="Helvetica,sans-Serif" font-size="9.00">promiseHelpers</text>
</a>
</g>
</g>
<!-- src/lib&#45;&gt;src/lib/promiseHelpers -->
<g id="edge73" class="edge">
<title>src/lib&#45;&gt;src/lib/promiseHelpers</title>
<path fill="none" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" d="M500.9,-106.51C500.9,-106.51 500.9,-51.19 500.9,-51.19"/>
<polygon fill="#000000" fill-opacity="0.200000" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" points="503,-51.19 500.9,-45.19 498.8,-51.19 503,-51.19"/>
</g>
<!-- src/lib/system -->
<g id="node58" class="node">
<title>src/lib/system</title>
<g id="a_node58"><a xlink:href="src/lib/system" xlink:title="system">
<polygon fill="#ffffcc" stroke="black" points="458,-41.75 405.97,-41.75 404,-39.78 404,-24 456.03,-24 458,-25.97 458,-41.75"/>
<polyline fill="none" stroke="black" points="456.03,-39.78 404,-39.78"/>
<polyline fill="none" stroke="black" points="456.03,-39.78 456.03,-24"/>
<polyline fill="none" stroke="black" points="456.03,-39.78 458,-41.75"/>
<text text-anchor="start" x="416.75" y="-29.2" font-family="Helvetica,sans-Serif" font-size="9.00">system</text>
</a>
</g>
</g>
<!-- src/lib&#45;&gt;src/lib/system -->
<g id="edge74" class="edge">
<title>src/lib&#45;&gt;src/lib/system</title>
<g id="a_edge74"><a xlink:title="no&#45;circular">
<path fill="none" stroke="orange" stroke-width="2" d="M498.39,-107C495.96,-107 491.65,-107 491.65,-107 491.65,-107 491.65,-64 491.65,-64 491.65,-64 440,-64 440,-64 440,-64 440,-51.05 440,-51.05"/>
<polygon fill="none" stroke="orange" stroke-width="2" points="442.1,-51.05 440,-45.05 437.9,-51.05 442.1,-51.05"/>
</a>
</g>
<text text-anchor="middle" x="462.47" y="-65.2" font-family="Helvetica,sans-Serif" font-size="9.00" fill="orange">no&#45;circular</text>
</g>
<!-- src/types/widget -->
<g id="node59" class="node">
<title>src/types/widget</title>
<g id="a_node59"><a xlink:href="src/types/widget" xlink:title="widget">
<polygon fill="#ffffcc" stroke="black" points="234,-41.75 181.97,-41.75 180,-39.78 180,-24 232.03,-24 234,-25.97 234,-41.75"/>
<polyline fill="none" stroke="black" points="232.03,-39.78 180,-39.78"/>
<polyline fill="none" stroke="black" points="232.03,-39.78 232.03,-24"/>
<polyline fill="none" stroke="black" points="232.03,-39.78 234,-41.75"/>
<text text-anchor="start" x="193.5" y="-29.2" font-family="Helvetica,sans-Serif" font-size="9.00">widget</text>
</a>
</g>
</g>
<!-- src/lib&#45;&gt;src/types/widget -->
<g id="edge76" class="edge">
<title>src/lib&#45;&gt;src/types/widget</title>
<path fill="none" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" d="M499.1,-110.17C499.1,-114.07 499.1,-123 499.1,-123 499.1,-123 225,-123 225,-123 225,-123 225,-51.18 225,-51.18"/>
<polygon fill="#000000" fill-opacity="0.200000" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" points="227.1,-51.18 225,-45.18 222.9,-51.18 227.1,-51.18"/>
</g>
<!-- src/shared/ui/layout/CustomHead/Schemas&#45;&gt;src/lib -->
<g id="edge114" class="edge">
<title>src/shared/ui/layout/CustomHead/Schemas&#45;&gt;src/lib</title>
<path fill="none" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" d="M1967,-393.1C1967,-354.67 1967,-210 1967,-210 1967,-210 758,-210 758,-210 758,-210 758,-113 758,-113 758,-113 500.9,-113 500.9,-113 500.9,-113 500.9,-112.73 500.9,-112.73"/>
<polygon fill="#000000" fill-opacity="0.200000" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" points="503,-119.26 500.9,-113.26 498.8,-119.26 503,-119.26"/>
</g>
<!-- src/services/AnalyticsLite/GA4&#45;&gt;src/lib -->
<g id="edge98" class="edge">
<title>src/services/AnalyticsLite/GA4&#45;&gt;src/lib</title>
<path fill="none" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" d="M123,-157.01C123,-146.31 123,-130 123,-130 123,-130 488.47,-130 488.47,-130 488.47,-130 488.47,-108 488.47,-108 488.47,-108 489.41,-108 489.41,-108"/>
<polygon fill="#000000" fill-opacity="0.200000" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" points="488.78,-110.1 494.78,-108 488.78,-105.9 488.78,-110.1"/>
</g>
<!-- src/lib/pending&#45;&gt;src/lib -->
<g id="edge79" class="edge">
<title>src/lib/pending&#45;&gt;src/lib</title>
<path fill="none" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" d="M500,-156.85C500,-156.85 500,-119.55 500,-119.55"/>
<polygon fill="#000000" fill-opacity="0.200000" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" points="502.1,-119.55 500,-113.55 497.9,-119.55 502.1,-119.55"/>
</g>
<!-- src/services/AnalyticsLite/Datadog&#45;&gt;src/lib -->
<g id="edge96" class="edge">
<title>src/services/AnalyticsLite/Datadog&#45;&gt;src/lib</title>
<path fill="none" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" d="M123,-291.77C123,-278.81 123,-257 123,-257 123,-257 680.32,-257 680.32,-257 680.32,-257 680.32,-108 680.32,-108 680.32,-108 511.03,-108 511.03,-108"/>
<polygon fill="#000000" fill-opacity="0.200000" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" points="511.03,-105.9 505.03,-108 511.03,-110.1 511.03,-105.9"/>
</g>
<!-- src/services/AnalyticsLite/Datadog&#45;&gt;src/types -->
<g id="edge97" class="edge">
<title>src/services/AnalyticsLite/Datadog&#45;&gt;src/types</title>
<path fill="none" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" d="M150.25,-295C153.67,-295 156,-295 156,-295 156,-295 156,-32 156,-32 156,-32 156.81,-32 156.81,-32"/>
<polygon fill="#000000" fill-opacity="0.200000" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" points="155.07,-34.1 161.07,-32 155.07,-29.9 155.07,-34.1"/>
</g>
<!-- src/services/AnalyticsLite&#45;&gt;src/services/AnalyticsLite/GA4 -->
<g id="edge94" class="edge">
<title>src/services/AnalyticsLite&#45;&gt;src/services/AnalyticsLite/GA4</title>
<path fill="none" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" d="M187.03,-301C180.36,-301 159,-301 159,-301 159,-301 159,-163 159,-163 159,-163 158.13,-163 158.13,-163"/>
<polygon fill="#000000" fill-opacity="0.200000" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" points="159.29,-160.9 153.29,-163 159.29,-165.1 159.29,-160.9"/>
</g>
<!-- src/services/AnalyticsLite/Ads -->
<g id="node68" class="node">
<title>src/services/AnalyticsLite/Ads</title>
<g id="a_node68"><a xlink:href="src/services/AnalyticsLite/Ads" xlink:title="Ads">
<polygon fill="#ffffcc" stroke="black" points="216,-175 163.97,-175 162,-173.03 162,-157.25 214.03,-157.25 216,-159.22 216,-175"/>
<polyline fill="none" stroke="black" points="214.03,-173.03 162,-173.03"/>
<polyline fill="none" stroke="black" points="214.03,-173.03 214.03,-157.25"/>
<polyline fill="none" stroke="black" points="214.03,-173.03 216,-175"/>
<text text-anchor="start" x="181.12" y="-162.45" font-family="Helvetica,sans-Serif" font-size="9.00">Ads</text>
</a>
</g>
</g>
<!-- src/services/AnalyticsLite&#45;&gt;src/services/AnalyticsLite/Ads -->
<g id="edge93" class="edge">
<title>src/services/AnalyticsLite&#45;&gt;src/services/AnalyticsLite/Ads</title>
<path fill="none" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" d="M189,-299.22C189,-299.22 189,-184.36 189,-184.36"/>
<polygon fill="#000000" fill-opacity="0.200000" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" points="191.1,-184.36 189,-178.36 186.9,-184.36 191.1,-184.36"/>
</g>
<!-- src/app/partner -->
<!-- src/app/partner/[partnerKey] -->
<!-- src/app/partner/[partnerKey]&#45;&gt;src/lib/types -->
<g id="edge17" class="edge">
<title>src/app/partner/[partnerKey]&#45;&gt;src/lib/types</title>
<path fill="none" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" d="M707.22,-651C703.67,-651 698,-651 698,-651 698,-651 698,-29 698,-29 698,-29 627.28,-29 627.28,-29"/>
<polygon fill="#000000" fill-opacity="0.200000" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" points="627.28,-26.9 621.28,-29 627.28,-31.1 627.28,-26.9"/>
</g>
<!-- src/lib/middleware -->
<!-- src/app/partner/[partnerKey]&#45;&gt;src/lib/middleware -->
<g id="edge12" class="edge">
<title>src/app/partner/[partnerKey]&#45;&gt;src/lib/middleware</title>
<path fill="none" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" d="M709.4,-648.43C709.4,-636.74 709.4,-590 709.4,-590 709.4,-590 476.71,-590 476.71,-590 476.71,-590 476.71,-171 476.71,-171 476.71,-171 461,-171 461,-171 461,-171 461,-170.71 461,-170.71"/>
<polygon fill="#000000" fill-opacity="0.200000" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" points="463.1,-177.11 461,-171.11 458.9,-177.11 463.1,-177.11"/>
</g>
<!-- src/shared/ui/layout/Container -->
<g id="node17" class="node">
<title>src/shared/ui/layout/Container</title>
<g id="a_node17"><a xlink:href="src/shared/ui/layout/Container" xlink:title="Container">
<polygon fill="#ccffcc" stroke="black" points="1908.25,-411.25 1853.72,-411.25 1851.75,-409.28 1851.75,-393.5 1906.28,-393.5 1908.25,-395.47 1908.25,-411.25"/>
<polyline fill="none" stroke="black" points="1906.28,-409.28 1851.75,-409.28"/>
<polyline fill="none" stroke="black" points="1906.28,-409.28 1906.28,-393.5"/>
<polyline fill="none" stroke="black" points="1906.28,-409.28 1908.25,-411.25"/>
<text text-anchor="start" x="1859.75" y="-398.7" font-family="Helvetica,sans-Serif" font-size="9.00">Container</text>
</a>
</g>
</g>
<!-- src/app/partner/[partnerKey]&#45;&gt;src/shared/ui/layout/Container -->
<g id="edge13" class="edge">
<title>src/app/partner/[partnerKey]&#45;&gt;src/shared/ui/layout/Container</title>
<path fill="none" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" d="M712.58,-650C773.11,-650 1880,-650 1880,-650 1880,-650 1880,-420.48 1880,-420.48"/>
<polygon fill="#000000" fill-opacity="0.200000" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" points="1882.1,-420.48 1880,-414.48 1877.9,-420.48 1882.1,-420.48"/>
</g>
<!-- src/experiences/savings/Footer -->
<g id="node18" class="node">
<title>src/experiences/savings/Footer</title>
<g id="a_node18"><a xlink:href="src/experiences/savings/Footer" xlink:title="Footer">
<polygon fill="#ffffcc" stroke="black" points="2506,-564 2453.97,-564 2452,-562.03 2452,-546.25 2504.03,-546.25 2506,-548.22 2506,-564"/>
<polyline fill="none" stroke="black" points="2504.03,-562.03 2452,-562.03"/>
<polyline fill="none" stroke="black" points="2504.03,-562.03 2504.03,-546.25"/>
<polyline fill="none" stroke="black" points="2504.03,-562.03 2506,-564"/>
<text text-anchor="start" x="2465.88" y="-551.45" font-family="Helvetica,sans-Serif" font-size="9.00">Footer</text>
</a>
</g>
</g>
<!-- src/app/partner/[partnerKey]&#45;&gt;src/experiences/savings/Footer -->
<g id="edge14" class="edge">
<title>src/app/partner/[partnerKey]&#45;&gt;src/experiences/savings/Footer</title>
<path fill="none" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" d="M710,-653.82C710,-659.31 710,-671 710,-671 710,-671 2479,-671 2479,-671 2479,-671 2479,-573.22 2479,-573.22"/>
<polygon fill="#000000" fill-opacity="0.200000" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" points="2481.1,-573.22 2479,-567.22 2476.9,-573.22 2481.1,-573.22"/>
</g>
<!-- src/experiences/savings/Header -->
<!-- src/app/partner/[partnerKey]&#45;&gt;src/experiences/savings/Header -->
<g id="edge15" class="edge">
<title>src/app/partner/[partnerKey]&#45;&gt;src/experiences/savings/Header</title>
<path fill="none" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" d="M712.72,-651C794.72,-651 2703,-651 2703,-651 2703,-651 2703,-566.13 2703,-566.13"/>
<polygon fill="#000000" fill-opacity="0.200000" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" points="2705.1,-566.13 2703,-560.13 2700.9,-566.13 2705.1,-566.13"/>
</g>
<!-- src/experiences/savings/Header/brands -->
<g id="node20" class="node">
<title>src/experiences/savings/Header/brands</title>
<g id="a_node20"><a xlink:href="src/experiences/savings/Header/brands" xlink:title="brands">
<polygon fill="#ffffcc" stroke="black" points="2755,-411.25 2702.97,-411.25 2701,-409.28 2701,-393.5 2753.03,-393.5 2755,-395.47 2755,-411.25"/>
<polyline fill="none" stroke="black" points="2753.03,-409.28 2701,-409.28"/>
<polyline fill="none" stroke="black" points="2753.03,-409.28 2753.03,-393.5"/>
<polyline fill="none" stroke="black" points="2753.03,-409.28 2755,-411.25"/>
<text text-anchor="start" x="2713.75" y="-398.7" font-family="Helvetica,sans-Serif" font-size="9.00">brands</text>
</a>
</g>
</g>
<!-- src/app/partner/[partnerKey]&#45;&gt;src/experiences/savings/Header/brands -->
<g id="edge16" class="edge">
<title>src/app/partner/[partnerKey]&#45;&gt;src/experiences/savings/Header/brands</title>
<path fill="none" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" d="M710.6,-648.54C710.6,-607.84 710.6,-87 710.6,-87 710.6,-87 2737,-87 2737,-87 2737,-87 2737,-384.28 2737,-384.28"/>
<polygon fill="#000000" fill-opacity="0.200000" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" points="2734.9,-384.28 2737,-390.28 2739.1,-384.28 2734.9,-384.28"/>
</g>
<!-- src/lib/middleware&#45;&gt;src/lib/middleware/middleware -->
<g id="edge77" class="edge">
<title>src/lib/middleware&#45;&gt;src/lib/middleware/middleware</title>
<path fill="none" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" d="M459.02,-165C445.44,-165 366.4,-165 366.4,-165 366.4,-165 366.4,-126.73 366.4,-126.73"/>
<polygon fill="#000000" fill-opacity="0.200000" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" points="368.5,-126.73 366.4,-120.73 364.3,-126.73 368.5,-126.73"/>
</g>
<!-- src/lib/middleware/requestContext -->
<g id="node61" class="node">
<title>src/lib/middleware/requestContext</title>
<g id="a_node61"><a xlink:href="src/lib/middleware/requestContext" xlink:title="requestContext">
<polygon fill="#ffffcc" stroke="black" points="482.12,-117.25 405.85,-117.25 403.88,-115.28 403.88,-99.5 480.15,-99.5 482.12,-101.47 482.12,-117.25"/>
<polyline fill="none" stroke="black" points="480.15,-115.28 403.88,-115.28"/>
<polyline fill="none" stroke="black" points="480.15,-115.28 480.15,-99.5"/>
<polyline fill="none" stroke="black" points="480.15,-115.28 482.12,-117.25"/>
<text text-anchor="start" x="411.88" y="-104.7" font-family="Helvetica,sans-Serif" font-size="9.00">requestContext</text>
</a>
</g>
</g>
<!-- src/lib/middleware&#45;&gt;src/lib/middleware/requestContext -->
<g id="edge78" class="edge">
<title>src/lib/middleware&#45;&gt;src/lib/middleware/requestContext</title>
<path fill="none" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" d="M461,-164.2C461,-164.2 461,-126.43 461,-126.43"/>
<polygon fill="#000000" fill-opacity="0.200000" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" points="463.1,-126.43 461,-120.43 458.9,-126.43 463.1,-126.43"/>
</g>
<!-- src/experiences/savings/Footer&#45;&gt;src/components/elements/Portal -->
<g id="edge48" class="edge">
<title>src/experiences/savings/Footer&#45;&gt;src/components/elements/Portal</title>
<path fill="none" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" d="M2470,-545.79C2470,-508.47 2470,-372 2470,-372 2470,-372 776,-372 776,-372 776,-372 776,-319.39 776,-319.39"/>
<polygon fill="#000000" fill-opacity="0.200000" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" points="778.1,-319.39 776,-313.39 773.9,-319.39 778.1,-319.39"/>
</g>
<!-- src/components/content/icons -->
<g id="node39" class="node">
<title>src/components/content/icons</title>
<g id="a_node39"><a xlink:href="src/components/content/icons" xlink:title="icons">
<polygon fill="#ffffcc" stroke="black" points="918,-310 865.97,-310 864,-308.03 864,-292.25 916.03,-292.25 918,-294.22 918,-310"/>
<polyline fill="none" stroke="black" points="916.03,-308.03 864,-308.03"/>
<polyline fill="none" stroke="black" points="916.03,-308.03 916.03,-292.25"/>
<polyline fill="none" stroke="black" points="916.03,-308.03 918,-310"/>
<text text-anchor="start" x="880.12" y="-297.45" font-family="Helvetica,sans-Serif" font-size="9.00">icons</text>
</a>
</g>
</g>
<!-- src/experiences/savings/Footer&#45;&gt;src/components/content/icons -->
<g id="edge47" class="edge">
<title>src/experiences/savings/Footer&#45;&gt;src/components/content/icons</title>
<path fill="none" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" d="M2488,-545.95C2488,-507.98 2488,-365 2488,-365 2488,-365 891,-365 891,-365 891,-365 891,-319.28 891,-319.28"/>
<polygon fill="#000000" fill-opacity="0.200000" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" points="893.1,-319.28 891,-313.28 888.9,-319.28 893.1,-319.28"/>
</g>
<!-- src/components/patterns/icons/svg&#45;tools/generator -->
<g id="node40" class="node">
<title>src/components/patterns/icons/svg&#45;tools/generator</title>
<g id="a_node40"><a xlink:href="src/components/patterns/icons/svg-tools/generator" xlink:title="generator">
<polygon fill="#ffffcc" stroke="black" points="1119.88,-175 1066.1,-175 1064.12,-173.03 1064.12,-157.25 1117.9,-157.25 1119.88,-159.22 1119.88,-175"/>
<polyline fill="none" stroke="black" points="1117.9,-173.03 1064.12,-173.03"/>
<polyline fill="none" stroke="black" points="1117.9,-173.03 1117.9,-157.25"/>
<polyline fill="none" stroke="black" points="1117.9,-173.03 1119.88,-175"/>
<text text-anchor="start" x="1072.12" y="-162.45" font-family="Helvetica,sans-Serif" font-size="9.00">generator</text>
</a>
</g>
</g>
<!-- src/experiences/savings/Footer&#45;&gt;src/components/patterns/icons/svg&#45;tools/generator -->
<g id="edge51" class="edge">
<title>src/experiences/savings/Footer&#45;&gt;src/components/patterns/icons/svg&#45;tools/generator</title>
<path fill="none" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" d="M2451.58,-561C2255.54,-561 1074.71,-561 1074.71,-561 1074.71,-561 1074.71,-184.5 1074.71,-184.5"/>
<polygon fill="#000000" fill-opacity="0.200000" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" points="1076.81,-184.5 1074.71,-178.5 1072.61,-184.5 1076.81,-184.5"/>
</g>
<!-- src/components/layout -->
<g id="node42" class="node">
<title>src/components/layout</title>
<g id="a_node42"><a xlink:href="src/components/layout" xlink:title="layout">
<polygon fill="#ffffcc" stroke="black" points="1134,-310 1081.97,-310 1080,-308.03 1080,-292.25 1132.03,-292.25 1134,-294.22 1134,-310"/>
<polyline fill="none" stroke="black" points="1132.03,-308.03 1080,-308.03"/>
<polyline fill="none" stroke="black" points="1132.03,-308.03 1132.03,-292.25"/>
<polyline fill="none" stroke="black" points="1132.03,-308.03 1134,-310"/>
<text text-anchor="start" x="1094.62" y="-297.45" font-family="Helvetica,sans-Serif" font-size="9.00">layout</text>
</a>
</g>
</g>
<!-- src/experiences/savings/Footer&#45;&gt;src/components/layout -->
<g id="edge49" class="edge">
<title>src/experiences/savings/Footer&#45;&gt;src/components/layout</title>
<path fill="none" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" d="M2451.59,-552C2258.22,-552 1107,-552 1107,-552 1107,-552 1107,-319.35 1107,-319.35"/>
<polygon fill="#000000" fill-opacity="0.200000" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" points="1109.1,-319.35 1107,-313.35 1104.9,-319.35 1109.1,-319.35"/>
</g>
<!-- src/components/patterns/icons/blocks -->
<g id="node45" class="node">
<title>src/components/patterns/icons/blocks</title>
<g id="a_node45"><a xlink:href="src/components/patterns/icons/blocks" xlink:title="blocks">
<polygon fill="#ffffcc" stroke="black" points="1016,-175 963.97,-175 962,-173.03 962,-157.25 1014.03,-157.25 1016,-159.22 1016,-175"/>
<polyline fill="none" stroke="black" points="1014.03,-173.03 962,-173.03"/>
<polyline fill="none" stroke="black" points="1014.03,-173.03 1014.03,-157.25"/>
<polyline fill="none" stroke="black" points="1014.03,-173.03 1016,-175"/>
<text text-anchor="start" x="975.88" y="-162.45" font-family="Helvetica,sans-Serif" font-size="9.00">blocks</text>
</a>
</g>
</g>
<!-- src/experiences/savings/Footer&#45;&gt;src/components/patterns/icons/blocks -->
<g id="edge50" class="edge">
<title>src/experiences/savings/Footer&#45;&gt;src/components/patterns/icons/blocks</title>
<path fill="none" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" d="M2451.54,-562C2248.58,-562 989,-562 989,-562 989,-562 989,-184.14 989,-184.14"/>
<polygon fill="#000000" fill-opacity="0.200000" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" points="991.1,-184.14 989,-178.14 986.9,-184.14 991.1,-184.14"/>
</g>
<!-- src/ui/navigation/Link -->
<g id="node49" class="node">
<title>src/ui/navigation/Link</title>
<g id="a_node49"><a xlink:href="src/ui/navigation/Link" xlink:title="Link">
<polygon fill="#ffffcc" stroke="black" points="1264,-310 1211.97,-310 1210,-308.03 1210,-292.25 1262.03,-292.25 1264,-294.22 1264,-310"/>
<polyline fill="none" stroke="black" points="1262.03,-308.03 1210,-308.03"/>
<polyline fill="none" stroke="black" points="1262.03,-308.03 1262.03,-292.25"/>
<polyline fill="none" stroke="black" points="1262.03,-308.03 1264,-310"/>
<text text-anchor="start" x="1228.38" y="-297.45" font-family="Helvetica,sans-Serif" font-size="9.00">Link</text>
</a>
</g>
</g>
<!-- src/experiences/savings/Footer&#45;&gt;src/ui/navigation/Link -->
<g id="edge52" class="edge">
<title>src/experiences/savings/Footer&#45;&gt;src/ui/navigation/Link</title>
<path fill="none" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" d="M2451.61,-551C2269.17,-551 1237,-551 1237,-551 1237,-551 1237,-319.31 1237,-319.31"/>
<polygon fill="#000000" fill-opacity="0.200000" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" points="1239.1,-319.31 1237,-313.31 1234.9,-319.31 1239.1,-319.31"/>
</g>
<!-- src/ui/primitives -->
<g id="node50" class="node">
<title>src/ui/primitives</title>
<g id="a_node50"><a xlink:href="src/ui/primitives" xlink:title="primitives">
<polygon fill="#ffffcc" stroke="black" points="1335.5,-310 1282.47,-310 1280.5,-308.03 1280.5,-292.25 1333.53,-292.25 1335.5,-294.22 1335.5,-310"/>
<polyline fill="none" stroke="black" points="1333.53,-308.03 1280.5,-308.03"/>
<polyline fill="none" stroke="black" points="1333.53,-308.03 1333.53,-292.25"/>
<polyline fill="none" stroke="black" points="1333.53,-308.03 1335.5,-310"/>
<text text-anchor="start" x="1288.5" y="-297.45" font-family="Helvetica,sans-Serif" font-size="9.00">primitives</text>
</a>
</g>
</g>
<!-- src/experiences/savings/Footer&#45;&gt;src/ui/primitives -->
<g id="edge53" class="edge">
<title>src/experiences/savings/Footer&#45;&gt;src/ui/primitives</title>
<path fill="none" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" d="M2451.56,-550C2274.37,-550 1298.83,-550 1298.83,-550 1298.83,-550 1298.83,-319.28 1298.83,-319.28"/>
<polygon fill="#000000" fill-opacity="0.200000" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" points="1300.93,-319.28 1298.83,-313.28 1296.73,-319.28 1300.93,-319.28"/>
</g>
<!-- src/ui/typography -->
<g id="node51" class="node">
<title>src/ui/typography</title>
<g id="a_node51"><a xlink:href="src/ui/typography" xlink:title="typography">
<polygon fill="#ffffcc" stroke="black" points="1267.88,-175 1208.1,-175 1206.12,-173.03 1206.12,-157.25 1265.9,-157.25 1267.88,-159.22 1267.88,-175"/>
<polyline fill="none" stroke="black" points="1265.9,-173.03 1206.12,-173.03"/>
<polyline fill="none" stroke="black" points="1265.9,-173.03 1265.9,-157.25"/>
<polyline fill="none" stroke="black" points="1265.9,-173.03 1267.88,-175"/>
<text text-anchor="start" x="1214.12" y="-162.45" font-family="Helvetica,sans-Serif" font-size="9.00">typography</text>
</a>
</g>
</g>
<!-- src/experiences/savings/Footer&#45;&gt;src/ui/typography -->
<g id="edge54" class="edge">
<title>src/experiences/savings/Footer&#45;&gt;src/ui/typography</title>
<path fill="none" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" d="M2451.5,-559C2283.22,-559 1399.5,-559 1399.5,-559 1399.5,-559 1399.5,-166 1399.5,-166 1399.5,-166 1277.33,-166 1277.33,-166"/>
<polygon fill="#000000" fill-opacity="0.200000" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" points="1277.33,-163.9 1271.33,-166 1277.33,-168.1 1277.33,-163.9"/>
</g>
<!-- src/experiences/savings/Header&#45;&gt;src/lib -->
<g id="edge56" class="edge">
<title>src/experiences/savings/Header&#45;&gt;src/lib</title>
<path fill="none" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" d="M2705.11,-555C2711.45,-555 2729.9,-555 2729.9,-555 2729.9,-555 2729.9,-512 2729.9,-512 2729.9,-512 733.9,-512 733.9,-512 733.9,-512 733.9,-108 733.9,-108 733.9,-108 511.02,-108 511.02,-108"/>
<polygon fill="#000000" fill-opacity="0.200000" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" points="511.02,-105.9 505.02,-108 511.02,-110.1 511.02,-105.9"/>
</g>
<!-- src/experiences/savings/Header&#45;&gt;src/experiences/savings/Header/brands -->
<g id="edge55" class="edge">
<title>src/experiences/savings/Header&#45;&gt;src/experiences/savings/Header/brands</title>
<path fill="none" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" d="M2703,-552.97C2703,-552.97 2703,-420.53 2703,-420.53"/>
<polygon fill="#000000" fill-opacity="0.200000" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" points="2705.1,-420.53 2703,-414.53 2700.9,-420.53 2705.1,-420.53"/>
</g>
<!-- src/server/config -->
<g id="node52" class="node">
<title>src/server/config</title>
<g id="a_node52"><a xlink:href="src/server/config" xlink:title="config">
<polygon fill="#ccccff" stroke="black" points="1612,-310 1559.97,-310 1558,-308.03 1558,-292.25 1610.03,-292.25 1612,-294.22 1612,-310"/>
<polyline fill="none" stroke="black" points="1610.03,-308.03 1558,-308.03"/>
<polyline fill="none" stroke="black" points="1610.03,-308.03 1610.03,-292.25"/>
<polyline fill="none" stroke="black" points="1610.03,-308.03 1612,-310"/>
<text text-anchor="start" x="1572.62" y="-297.45" font-family="Helvetica,sans-Serif" font-size="9.00">config</text>
</a>
</g>
</g>
<!-- src/experiences/savings/Header/brands&#45;&gt;src/server/config -->
<g id="edge57" class="edge">
<title>src/experiences/savings/Header/brands&#45;&gt;src/server/config</title>
<path fill="none" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" d="M2719,-393.27C2719,-372.42 2719,-323 2719,-323 2719,-323 1585,-323 1585,-323 1585,-323 1585,-319.28 1585,-319.28"/>
<polygon fill="#000000" fill-opacity="0.200000" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" points="1587.1,-319.28 1585,-313.28 1582.9,-319.28 1587.1,-319.28"/>
</g>
<!-- src/app/partner/[partnerKey]/savings -->
<!-- src/app/partner/[partnerKey]/savings&#45;&gt;src/lib/types -->
<g id="edge19" class="edge">
<title>src/app/partner/[partnerKey]/savings&#45;&gt;src/lib/types</title>
<path fill="none" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" d="M687.4,-651C685.88,-651 684.26,-651 684.26,-651 684.26,-651 684.26,-32 684.26,-32 684.26,-32 627.48,-32 627.48,-32"/>
<polygon fill="#000000" fill-opacity="0.200000" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" points="627.48,-29.9 621.48,-32 627.48,-34.1 627.48,-29.9"/>
</g>
<!-- src/experiences/savings/Results -->
<!-- src/app/partner/[partnerKey]/savings&#45;&gt;src/experiences/savings/Results -->
<g id="edge18" class="edge">
<title>src/app/partner/[partnerKey]/savings&#45;&gt;src/experiences/savings/Results</title>
<path fill="none" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" d="M690,-653.56C690,-661.09 690,-683 690,-683 690,-683 2524.6,-683 2524.6,-683 2524.6,-683 2524.6,-566.34 2524.6,-566.34"/>
<polygon fill="#000000" fill-opacity="0.200000" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" points="2526.7,-566.34 2524.6,-560.34 2522.5,-566.34 2526.7,-566.34"/>
</g>
<!-- src/app/partner/[partnerKey]/savings/_private -->
<g id="node23" class="node">
<title>src/app/partner/[partnerKey]/savings/_private</title>
<g id="a_node23"><a xlink:href="src/app/partner/[partnerKey]/savings/_private" xlink:title="_private">
<polygon fill="lime" stroke="black" stroke-width="2" points="664,-564 611.97,-564 610,-562.03 610,-546.25 662.03,-546.25 664,-548.22 664,-564"/>
<polyline fill="none" stroke="black" stroke-width="2" points="662.03,-562.03 610,-562.03"/>
<polyline fill="none" stroke="black" stroke-width="2" points="662.03,-562.03 662.03,-546.25"/>
<polyline fill="none" stroke="black" stroke-width="2" points="662.03,-562.03 664,-564"/>
<text text-anchor="start" x="620.5" y="-551.45" font-family="Helvetica,sans-Serif" font-size="9.00">_private</text>
</a>
</g>
</g>
<!-- src/app/partner/[partnerKey]/savings&#45;&gt;src/app/partner/[partnerKey]/savings/_private -->
<g id="edge20" class="edge">
<title>src/app/partner/[partnerKey]/savings&#45;&gt;src/app/partner/[partnerKey]/savings/_private</title>
<path fill="none" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" d="M690,-648.37C690,-633.11 690,-558 690,-558 690,-558 673.74,-558 673.74,-558"/>
<polygon fill="#000000" fill-opacity="0.200000" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" points="673.74,-555.9 667.74,-558 673.74,-560.1 673.74,-555.9"/>
</g>
<!-- src/experiences/savings/Results&#45;&gt;src/lib/pending -->
<g id="edge58" class="edge">
<title>src/experiences/savings/Results&#45;&gt;src/lib/pending</title>
<path fill="none" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" d="M2526.11,-555C2544.28,-555 2673.5,-555 2673.5,-555 2673.5,-555 2673.5,-379 2673.5,-379 2673.5,-379 547.16,-379 547.16,-379 547.16,-379 547.16,-184.27 547.16,-184.27"/>
<polygon fill="#000000" fill-opacity="0.200000" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" points="549.26,-184.27 547.16,-178.27 545.06,-184.27 549.26,-184.27"/>
</g>
<!-- src/components -->
<!-- src/experiences/savings/Results&#45;&gt;src/components -->
<g id="edge60" class="edge">
<title>src/experiences/savings/Results&#45;&gt;src/components</title>
<path fill="none" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" d="M2523.4,-557.18C2523.4,-566.35 2523.4,-603 2523.4,-603 2523.4,-603 718,-603 718,-603 718,-603 718,-301 718,-301 718,-301 716.88,-301 716.88,-301"/>
<polygon fill="#000000" fill-opacity="0.200000" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" points="716.88,-298.9 710.88,-301 716.87,-303.1 716.88,-298.9"/>
</g>
<!-- src/experiences/savings/Results/SavingsOfferCard -->
<!-- src/experiences/savings/Results&#45;&gt;src/experiences/savings/Results/SavingsOfferCard -->
<g id="edge59" class="edge">
<title>src/experiences/savings/Results&#45;&gt;src/experiences/savings/Results/SavingsOfferCard</title>
<path fill="none" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" d="M2525.7,-554C2537.39,-554 2605.4,-554 2605.4,-554 2605.4,-554 2605.4,-413.52 2605.4,-413.52"/>
<polygon fill="#000000" fill-opacity="0.200000" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" points="2607.5,-413.52 2605.4,-407.52 2603.3,-413.52 2607.5,-413.52"/>
</g>
<!-- src/shared/offers/core/model -->
<g id="node28" class="node">
<title>src/shared/offers/core/model</title>
<g id="a_node28"><a xlink:href="src/shared/offers/core/model" xlink:title="model">
<polygon fill="#ccffcc" stroke="black" points="2286,-117.25 2233.97,-117.25 2232,-115.28 2232,-99.5 2284.03,-99.5 2286,-101.47 2286,-117.25"/>
<polyline fill="none" stroke="black" points="2284.03,-115.28 2232,-115.28"/>
<polyline fill="none" stroke="black" points="2284.03,-115.28 2284.03,-99.5"/>
<polyline fill="none" stroke="black" points="2284.03,-115.28 2286,-117.25"/>
<text text-anchor="start" x="2246.25" y="-104.7" font-family="Helvetica,sans-Serif" font-size="9.00">model</text>
</a>
</g>
</g>
<!-- src/experiences/savings/Results&#45;&gt;src/shared/offers/core/model -->
<g id="edge62" class="edge">
<title>src/experiences/savings/Results&#45;&gt;src/shared/offers/core/model</title>
<path fill="none" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" d="M2522.07,-555C2519.17,-555 2514,-555 2514,-555 2514,-555 2514,-112 2514,-112 2514,-112 2295.29,-112 2295.29,-112"/>
<polygon fill="#000000" fill-opacity="0.200000" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" points="2295.29,-109.9 2289.29,-112 2295.29,-114.1 2295.29,-109.9"/>
</g>
<!-- src/experiences/savings/Results/NoOffers -->
<g id="node53" class="node">
<title>src/experiences/savings/Results/NoOffers</title>
<g id="a_node53"><a xlink:href="src/experiences/savings/Results/NoOffers" xlink:title="NoOffers">
<polygon fill="#ffffcc" stroke="black" points="2576,-411.25 2523.97,-411.25 2522,-409.28 2522,-393.5 2574.03,-393.5 2576,-395.47 2576,-411.25"/>
<polyline fill="none" stroke="black" points="2574.03,-409.28 2522,-409.28"/>
<polyline fill="none" stroke="black" points="2574.03,-409.28 2574.03,-393.5"/>
<polyline fill="none" stroke="black" points="2574.03,-409.28 2576,-411.25"/>
<text text-anchor="start" x="2531" y="-398.7" font-family="Helvetica,sans-Serif" font-size="9.00">NoOffers</text>
</a>
</g>
</g>
<!-- src/experiences/savings/Results&#45;&gt;src/experiences/savings/Results/NoOffers -->
<g id="edge61" class="edge">
<title>src/experiences/savings/Results&#45;&gt;src/experiences/savings/Results/NoOffers</title>
<path fill="none" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" d="M2524,-552.97C2524,-552.97 2524,-420.53 2524,-420.53"/>
<polygon fill="#000000" fill-opacity="0.200000" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" points="2526.1,-420.53 2524,-414.53 2521.9,-420.53 2526.1,-420.53"/>
</g>
<!-- src/app/partner/[partnerKey]/savings/_private&#45;&gt;src/app -->
<g id="edge41" class="edge">
<title>src/app/partner/[partnerKey]/savings/_private&#45;&gt;src/app</title>
<path fill="none" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" d="M615.33,-545.61C615.33,-512.31 615.33,-403 615.33,-403 615.33,-403 529.41,-403 529.41,-403"/>
<polygon fill="#000000" fill-opacity="0.200000" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" points="529.41,-400.9 523.41,-403 529.41,-405.1 529.41,-400.9"/>
</g>
<!-- src/app/partner/[partnerKey]/savings/_private&#45;&gt;src/lib/middleware/middleware -->
<g id="edge42" class="edge">
<title>src/app/partner/[partnerKey]/savings/_private&#45;&gt;src/lib/middleware/middleware</title>
<path fill="none" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" d="M609.13,-559C535.4,-559 340.8,-559 340.8,-559 340.8,-559 340.8,-126.38 340.8,-126.38"/>
<polygon fill="#000000" fill-opacity="0.200000" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" points="342.9,-126.38 340.8,-120.38 338.7,-126.38 342.9,-126.38"/>
</g>
<!-- src/app/partner/[partnerKey]/savings/_private&#45;&gt;src/lib/pending -->
<g id="edge35" class="edge">
<title>src/app/partner/[partnerKey]/savings/_private&#45;&gt;src/lib/pending</title>
<path fill="none" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" d="M609.01,-550C579.58,-550 537.48,-550 537.48,-550 537.48,-550 537.48,-184.24 537.48,-184.24"/>
<polygon fill="#000000" fill-opacity="0.200000" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" points="539.58,-184.24 537.48,-178.24 535.38,-184.24 539.58,-184.24"/>
</g>
<!-- src/app/partner/[partnerKey]/savings/_private&#45;&gt;src/lib/middleware -->
<g id="edge44" class="edge">
<title>src/app/partner/[partnerKey]/savings/_private&#45;&gt;src/lib/middleware</title>
<path fill="none" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" d="M609.19,-555C563.95,-555 479.42,-555 479.42,-555 479.42,-555 479.42,-166 479.42,-166 479.42,-166 472.26,-166 472.26,-166"/>
<polygon fill="#000000" fill-opacity="0.200000" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" points="472.26,-163.9 466.26,-166 472.26,-168.1 472.26,-163.9"/>
</g>
<!-- src/app/partner/[partnerKey]/savings/_private&#45;&gt;src/shared/offers/core/model -->
<g id="edge34" class="edge">
<title>src/app/partner/[partnerKey]/savings/_private&#45;&gt;src/shared/offers/core/model</title>
<path fill="none" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" d="M633.33,-545.57C633.33,-495.75 633.33,-268 633.33,-268 633.33,-268 2240.73,-268 2240.73,-268 2240.73,-268 2240.73,-126.41 2240.73,-126.41"/>
<polygon fill="#000000" fill-opacity="0.200000" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" points="2242.83,-126.41 2240.73,-120.41 2238.63,-126.41 2242.83,-126.41"/>
</g>
<!-- src/server/engine -->
<!-- src/app/partner/[partnerKey]/savings/_private&#45;&gt;src/server/engine -->
<g id="edge33" class="edge">
<title>src/app/partner/[partnerKey]/savings/_private&#45;&gt;src/server/engine</title>
<path fill="none" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" d="M664.98,-549C806.47,-549 1436.4,-549 1436.4,-549 1436.4,-549 1436.4,-312.27 1436.4,-312.27"/>
<polygon fill="#000000" fill-opacity="0.200000" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" points="1438.5,-312.27 1436.4,-306.27 1434.3,-312.27 1438.5,-312.27"/>
</g>
<!-- src/shared/ui/forms -->
<g id="node32" class="node">
<title>src/shared/ui/forms</title>
<g id="a_node32"><a xlink:href="src/shared/ui/forms" xlink:title="forms">
<polygon fill="#ccffcc" stroke="black" points="1820,-411.25 1767.97,-411.25 1766,-409.28 1766,-393.5 1818.03,-393.5 1820,-395.47 1820,-411.25"/>
<polyline fill="none" stroke="black" points="1818.03,-409.28 1766,-409.28"/>
<polyline fill="none" stroke="black" points="1818.03,-409.28 1818.03,-393.5"/>
<polyline fill="none" stroke="black" points="1818.03,-409.28 1820,-411.25"/>
<text text-anchor="start" x="1781.75" y="-398.7" font-family="Helvetica,sans-Serif" font-size="9.00">forms</text>
</a>
</g>
</g>
<!-- src/app/partner/[partnerKey]/savings/_private&#45;&gt;src/shared/ui/forms -->
<g id="edge36" class="edge">
<title>src/app/partner/[partnerKey]/savings/_private&#45;&gt;src/shared/ui/forms</title>
<path fill="none" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" d="M664.72,-555C840.52,-555 1793,-555 1793,-555 1793,-555 1793,-420.47 1793,-420.47"/>
<polygon fill="#000000" fill-opacity="0.200000" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" points="1795.1,-420.47 1793,-414.47 1790.9,-420.47 1795.1,-420.47"/>
</g>
<!-- src/shared/offers/marketplace/savings -->
<!-- src/app/partner/[partnerKey]/savings/_private&#45;&gt;src/shared/offers/marketplace/savings -->
<g id="edge37" class="edge">
<title>src/app/partner/[partnerKey]/savings/_private&#45;&gt;src/shared/offers/marketplace/savings</title>
<path fill="none" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" d="M648.67,-545.35C648.67,-505.57 648.67,-358 648.67,-358 648.67,-358 2139.9,-358 2139.9,-358 2139.9,-358 2139.9,-301 2139.9,-301 2139.9,-301 2139.33,-301 2139.33,-301"/>
<polygon fill="#000000" fill-opacity="0.200000" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" points="2143.16,-298.9 2137.16,-301 2143.16,-303.1 2143.16,-298.9"/>
</g>
<!-- src/shared/session/state -->
<g id="node34" class="node">
<title>src/shared/session/state</title>
<g id="a_node34"><a xlink:href="src/shared/session/state" xlink:title="state">
<polygon fill="#ccffcc" stroke="black" points="1726,-411.25 1673.97,-411.25 1672,-409.28 1672,-393.5 1724.03,-393.5 1726,-395.47 1726,-411.25"/>
<polyline fill="none" stroke="black" points="1724.03,-409.28 1672,-409.28"/>
<polyline fill="none" stroke="black" points="1724.03,-409.28 1724.03,-393.5"/>
<polyline fill="none" stroke="black" points="1724.03,-409.28 1726,-411.25"/>
<text text-anchor="start" x="1689.25" y="-398.7" font-family="Helvetica,sans-Serif" font-size="9.00">state</text>
</a>
</g>
</g>
<!-- src/app/partner/[partnerKey]/savings/_private&#45;&gt;src/shared/session/state -->
<g id="edge38" class="edge">
<title>src/app/partner/[partnerKey]/savings/_private&#45;&gt;src/shared/session/state</title>
<path fill="none" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" d="M656.33,-545.54C656.33,-513.03 656.33,-409 656.33,-409 656.33,-409 1662.65,-409 1662.65,-409"/>
<polygon fill="#000000" fill-opacity="0.200000" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" points="1662.65,-411.1 1668.65,-409 1662.65,-406.9 1662.65,-411.1"/>
</g>
<!-- src/server/engine/actions -->
<g id="node35" class="node">
<title>src/server/engine/actions</title>
<g id="a_node35"><a xlink:href="src/server/engine/actions" xlink:title="actions">
<polygon fill="#ccccff" stroke="black" points="1464,-175 1411.97,-175 1410,-173.03 1410,-157.25 1462.03,-157.25 1464,-159.22 1464,-175"/>
<polyline fill="none" stroke="black" points="1462.03,-173.03 1410,-173.03"/>
<polyline fill="none" stroke="black" points="1462.03,-173.03 1462.03,-157.25"/>
<polyline fill="none" stroke="black" points="1462.03,-173.03 1464,-175"/>
<text text-anchor="start" x="1422.38" y="-162.45" font-family="Helvetica,sans-Serif" font-size="9.00">actions</text>
</a>
</g>
</g>
<!-- src/app/partner/[partnerKey]/savings/_private&#45;&gt;src/server/engine/actions -->
<g id="edge39" class="edge">
<title>src/app/partner/[partnerKey]/savings/_private&#45;&gt;src/server/engine/actions</title>
<path fill="none" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" d="M664.96,-548C804.91,-548 1422.6,-548 1422.6,-548 1422.6,-548 1422.6,-184.19 1422.6,-184.19"/>
<polygon fill="#000000" fill-opacity="0.200000" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" points="1424.7,-184.19 1422.6,-178.19 1420.5,-184.19 1424.7,-184.19"/>
</g>
<!-- src/shared/offers -->
<!-- src/app/partner/[partnerKey]/savings/_private&#45;&gt;src/shared/offers -->
<g id="edge40" class="edge">
<title>src/app/partner/[partnerKey]/savings/_private&#45;&gt;src/shared/offers</title>
<path fill="none" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" d="M641,-545.36C641,-524.6 641,-478 641,-478 641,-478 2161.97,-478 2161.97,-478 2161.97,-478 2161.97,-402 2161.97,-402 2161.97,-402 2162.56,-402 2162.56,-402"/>
<polygon fill="#000000" fill-opacity="0.200000" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" points="2158.81,-404.1 2164.81,-402 2158.81,-399.9 2158.81,-404.1"/>
</g>
<!-- src/components/content -->
<!-- src/app/partner/[partnerKey]/savings/_private&#45;&gt;src/components/content -->
<g id="edge43" class="edge">
<title>src/app/partner/[partnerKey]/savings/_private&#45;&gt;src/components/content</title>
<path fill="none" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" d="M664.95,-547C719.53,-547 835,-547 835,-547 835,-547 835,-312.25 835,-312.25"/>
<polygon fill="#000000" fill-opacity="0.200000" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" points="837.1,-312.25 835,-306.25 832.9,-312.25 837.1,-312.25"/>
</g>
<!-- src/app/partner/[partnerKey]/savings/@featured -->
<g id="node24" class="node">
<title>src/app/partner/[partnerKey]/savings/@featured</title>
<g id="a_node24"><a xlink:href="src/app/partner/[partnerKey]/savings/@featured" xlink:title="@featured">
<polygon fill="lime" stroke="black" stroke-width="2" points="676.38,-659.92 619.6,-659.92 617.62,-657.95 617.62,-642.17 674.4,-642.17 676.38,-644.15 676.38,-659.92"/>
<polyline fill="none" stroke="black" stroke-width="2" points="674.4,-657.95 617.62,-657.95"/>
<polyline fill="none" stroke="black" stroke-width="2" points="674.4,-657.95 674.4,-642.17"/>
<polyline fill="none" stroke="black" stroke-width="2" points="674.4,-657.95 676.38,-659.92"/>
<text text-anchor="start" x="625.62" y="-647.38" font-family="Helvetica,sans-Serif" font-size="9.00">@featured</text>
</a>
</g>
</g>
<!-- src/app/partner/[partnerKey]/savings/@featured&#45;&gt;src/lib/types -->
<g id="edge28" class="edge">
<title>src/app/partner/[partnerKey]/savings/@featured&#45;&gt;src/lib/types</title>
<path fill="none" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" d="M672.25,-641.37C672.25,-563 672.25,-35 672.25,-35 672.25,-35 627.06,-35 627.06,-35"/>
<polygon fill="#000000" fill-opacity="0.200000" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" points="627.06,-32.9 621.06,-35 627.06,-37.1 627.06,-32.9"/>
</g>
<!-- src/app/partner/[partnerKey]/savings/@featured&#45;&gt;src/lib/pending -->
<g id="edge27" class="edge">
<title>src/app/partner/[partnerKey]/savings/@featured&#45;&gt;src/lib/pending</title>
<path fill="none" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" d="M633.08,-641.37C633.08,-621.3 633.08,-577 633.08,-577 633.08,-577 532.64,-577 532.64,-577 532.64,-577 532.64,-184.48 532.64,-184.48"/>
<polygon fill="#000000" fill-opacity="0.200000" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" points="534.74,-184.48 532.64,-178.48 530.54,-184.48 534.74,-184.48"/>
</g>
<!-- src/app/partner/[partnerKey]/savings/@featured&#45;&gt;src/app/partner/[partnerKey]/savings/_private -->
<g id="edge21" class="edge">
<title>src/app/partner/[partnerKey]/savings/@featured&#45;&gt;src/app/partner/[partnerKey]/savings/_private</title>
<path fill="none" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" d="M648.54,-641.5C648.54,-641.5 648.54,-573.92 648.54,-573.92"/>
<polygon fill="#000000" fill-opacity="0.200000" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" points="650.64,-573.92 648.54,-567.92 646.44,-573.92 650.64,-573.92"/>
</g>
<!-- src/app/partner/[partnerKey]/savings/@featured&#45;&gt;src/components -->
<g id="edge22" class="edge">
<title>src/app/partner/[partnerKey]/savings/@featured&#45;&gt;src/components</title>
<path fill="none" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" d="M677.19,-643C691.71,-643 706,-643 706,-643 706,-643 706,-312.31 706,-312.31"/>
<polygon fill="#000000" fill-opacity="0.200000" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" points="708.1,-312.31 706,-306.31 703.9,-312.31 708.1,-312.31"/>
</g>
<!-- src/app/partner/[partnerKey]/savings/@featured&#45;&gt;src/experiences/savings/Results/SavingsOfferCard -->
<g id="edge23" class="edge">
<title>src/app/partner/[partnerKey]/savings/@featured&#45;&gt;src/experiences/savings/Results/SavingsOfferCard</title>
<path fill="none" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" d="M677.01,-657C925.5,-657 2633.27,-657 2633.27,-657 2633.27,-657 2633.27,-402 2633.27,-402 2633.27,-402 2617.14,-402 2617.14,-402"/>
<polygon fill="#000000" fill-opacity="0.200000" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" points="2617.14,-399.9 2611.14,-402 2617.14,-404.1 2617.14,-399.9"/>
</g>
<!-- src/server/cms/actions -->
<g id="node27" class="node">
<title>src/server/cms/actions</title>
<g id="a_node27"><a xlink:href="src/server/cms/actions" xlink:title="actions">
<polygon fill="#ccccff" stroke="black" points="1542,-310 1489.97,-310 1488,-308.03 1488,-292.25 1540.03,-292.25 1542,-294.22 1542,-310"/>
<polyline fill="none" stroke="black" points="1540.03,-308.03 1488,-308.03"/>
<polyline fill="none" stroke="black" points="1540.03,-308.03 1540.03,-292.25"/>
<polyline fill="none" stroke="black" points="1540.03,-308.03 1542,-310"/>
<text text-anchor="start" x="1500.38" y="-297.45" font-family="Helvetica,sans-Serif" font-size="9.00">actions</text>
</a>
</g>
</g>
<!-- src/app/partner/[partnerKey]/savings/@featured&#45;&gt;src/server/cms/actions -->
<g id="edge24" class="edge">
<title>src/app/partner/[partnerKey]/savings/@featured&#45;&gt;src/server/cms/actions</title>
<path fill="none" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" d="M676.91,-645C828.15,-645 1501.5,-645 1501.5,-645 1501.5,-645 1501.5,-319.32 1501.5,-319.32"/>
<polygon fill="#000000" fill-opacity="0.200000" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" points="1503.6,-319.32 1501.5,-313.32 1499.4,-319.32 1503.6,-319.32"/>
</g>
<!-- src/app/partner/[partnerKey]/savings/@featured&#45;&gt;src/shared/offers/core/model -->
<g id="edge25" class="edge">
<title>src/app/partner/[partnerKey]/savings/@featured&#45;&gt;src/shared/offers/core/model</title>
<path fill="none" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" d="M677.16,-655C897.09,-655 2245.66,-655 2245.66,-655 2245.66,-655 2245.66,-126.41 2245.66,-126.41"/>
<polygon fill="#000000" fill-opacity="0.200000" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" points="2247.76,-126.41 2245.66,-120.41 2243.56,-126.41 2247.76,-126.41"/>
</g>
<!-- src/shared/offers/offNetwork -->
<g id="node29" class="node">
<title>src/shared/offers/offNetwork</title>
<g id="a_node29"><a xlink:href="src/shared/offers/offNetwork" xlink:title="offNetwork">
<polygon fill="#ccffcc" stroke="black" points="2155.75,-411.25 2098.22,-411.25 2096.25,-409.28 2096.25,-393.5 2153.78,-393.5 2155.75,-395.47 2155.75,-411.25"/>
<polyline fill="none" stroke="black" points="2153.78,-409.28 2096.25,-409.28"/>
<polyline fill="none" stroke="black" points="2153.78,-409.28 2153.78,-393.5"/>
<polyline fill="none" stroke="black" points="2153.78,-409.28 2155.75,-411.25"/>
<text text-anchor="start" x="2104.25" y="-398.7" font-family="Helvetica,sans-Serif" font-size="9.00">offNetwork</text>
</a>
</g>
</g>
<!-- src/app/partner/[partnerKey]/savings/@featured&#45;&gt;src/shared/offers/offNetwork -->
<g id="edge26" class="edge">
<title>src/app/partner/[partnerKey]/savings/@featured&#45;&gt;src/shared/offers/offNetwork</title>
<path fill="none" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" d="M677.21,-647C887.64,-647 2126,-647 2126,-647 2126,-647 2126,-420.67 2126,-420.67"/>
<polygon fill="#000000" fill-opacity="0.200000" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" points="2128.1,-420.67 2126,-414.67 2123.9,-420.67 2128.1,-420.67"/>
</g>
<!-- src/experiences/savings/Results/SavingsOfferCard&#45;&gt;src/lib -->
<g id="edge69" class="edge">
<title>src/experiences/savings/Results/SavingsOfferCard&#45;&gt;src/lib</title>
<path fill="none" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" d="M2605.4,-400.19C2605.4,-398.7 2605.4,-397 2605.4,-397 2605.4,-397 2581.33,-397 2581.33,-397 2581.33,-397 2581.33,-198 2581.33,-198 2581.33,-198 776,-198 776,-198 776,-198 776,-104 776,-104 776,-104 500,-104 500,-104 500,-104 500,-104.22 500,-104.22"/>
<polygon fill="#000000" fill-opacity="0.200000" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" points="497.9,-97.19 500,-103.19 502.1,-97.19 497.9,-97.19"/>
</g>
<!-- src/experiences/savings/Results/SavingsOfferCard&#45;&gt;src/lib/pending -->
<g id="edge67" class="edge">
<title>src/experiences/savings/Results/SavingsOfferCard&#45;&gt;src/lib/pending</title>
<path fill="none" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" d="M2607.78,-401C2611.66,-401 2620.53,-401 2620.53,-401 2620.53,-401 2620.53,-386 2620.53,-386 2620.53,-386 542.32,-386 542.32,-386 542.32,-386 542.32,-184.29 542.32,-184.29"/>
<polygon fill="#000000" fill-opacity="0.200000" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" points="544.42,-184.29 542.32,-178.29 540.22,-184.29 544.42,-184.29"/>
</g>
<!-- src/experiences/savings/Results/SavingsOfferCard&#45;&gt;src/shared/offers/core/model -->
<g id="edge68" class="edge">
<title>src/experiences/savings/Results/SavingsOfferCard&#45;&gt;src/shared/offers/core/model</title>
<path fill="none" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" d="M2603.93,-402C2598.94,-402 2586.67,-402 2586.67,-402 2586.67,-402 2586.67,-108 2586.67,-108 2586.67,-108 2295.37,-108 2295.37,-108"/>
<polygon fill="#000000" fill-opacity="0.200000" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" points="2295.37,-105.9 2289.37,-108 2295.37,-110.1 2295.37,-105.9"/>
</g>
<!-- src/experiences/savings/Results/SavingsOfferCard/Trivia -->
<g id="node55" class="node">
<title>src/experiences/savings/Results/SavingsOfferCard/Trivia</title>
<g id="a_node55"><a xlink:href="src/experiences/savings/Results/SavingsOfferCard/Trivia" xlink:title="Trivia">
<polygon fill="#ffffcc" stroke="black" points="2646,-310 2593.97,-310 2592,-308.03 2592,-292.25 2644.03,-292.25 2646,-294.22 2646,-310"/>
<polyline fill="none" stroke="black" points="2644.03,-308.03 2592,-308.03"/>
<polyline fill="none" stroke="black" points="2644.03,-308.03 2644.03,-292.25"/>
<polyline fill="none" stroke="black" points="2644.03,-308.03 2646,-310"/>
<text text-anchor="start" x="2607.75" y="-297.45" font-family="Helvetica,sans-Serif" font-size="9.00">Trivia</text>
</a>
</g>
</g>
<!-- src/experiences/savings/Results/SavingsOfferCard&#45;&gt;src/experiences/savings/Results/SavingsOfferCard/Trivia -->
<g id="edge66" class="edge">
<title>src/experiences/savings/Results/SavingsOfferCard&#45;&gt;src/experiences/savings/Results/SavingsOfferCard/Trivia</title>
<path fill="none" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" d="M2606.6,-400.26C2606.6,-400.26 2606.6,-319.3 2606.6,-319.3"/>
<polygon fill="#000000" fill-opacity="0.200000" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" points="2608.7,-319.3 2606.6,-313.3 2604.5,-319.3 2608.7,-319.3"/>
</g>
<!-- src/server/cms -->
<!-- src/server/cms/actions&#45;&gt;src/server/cms -->
<g id="edge82" class="edge">
<title>src/server/cms/actions&#45;&gt;src/server/cms</title>
<path fill="none" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" d="M1515,-291.85C1515,-291.85 1515,-177.13 1515,-177.13"/>
<polygon fill="#000000" fill-opacity="0.200000" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" points="1517.1,-177.13 1515,-171.13 1512.9,-177.13 1517.1,-177.13"/>
</g>
<!-- src/shared/signals -->
<g id="node65" class="node">
<title>src/shared/signals</title>
<g id="a_node65"><a xlink:href="src/shared/signals" xlink:title="signals">
<polygon fill="#ccffcc" stroke="black" points="2080,-411.25 2027.97,-411.25 2026,-409.28 2026,-393.5 2078.03,-393.5 2080,-395.47 2080,-411.25"/>
<polyline fill="none" stroke="black" points="2078.03,-409.28 2026,-409.28"/>
<polyline fill="none" stroke="black" points="2078.03,-409.28 2078.03,-393.5"/>
<polyline fill="none" stroke="black" points="2078.03,-409.28 2080,-411.25"/>
<text text-anchor="start" x="2038.38" y="-398.7" font-family="Helvetica,sans-Serif" font-size="9.00">signals</text>
</a>
</g>
</g>
<!-- src/server/cms/actions&#45;&gt;src/shared/signals -->
<g id="edge81" class="edge">
<title>src/server/cms/actions&#45;&gt;src/shared/signals</title>
<path fill="none" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" d="M1528.5,-310.18C1528.5,-320.81 1528.5,-337 1528.5,-337 1528.5,-337 2053,-337 2053,-337 2053,-337 2053,-384.01 2053,-384.01"/>
<polygon fill="#000000" fill-opacity="0.200000" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" points="2050.9,-384.01 2053,-390.01 2055.1,-384.01 2050.9,-384.01"/>
</g>
<!-- src/shared/offers/core/model&#45;&gt;src/server/engine -->
<g id="edge102" class="edge">
<title>src/shared/offers/core/model&#45;&gt;src/server/engine</title>
<g id="a_edge102"><a xlink:title="no&#45;circular">
<path fill="none" stroke="orange" stroke-width="2" d="M2243.19,-117.6C2243.19,-153.25 2243.19,-280 2243.19,-280 2243.19,-280 1437.9,-280 1437.9,-280 1437.9,-280 1437.9,-290.18 1437.9,-290.18"/>
<polygon fill="none" stroke="orange" stroke-width="2" points="1435.8,-290.18 1437.9,-296.18 1440,-290.18 1435.8,-290.18"/>
</a>
</g>
<text text-anchor="middle" x="1894.91" y="-281.2" font-family="Helvetica,sans-Serif" font-size="9.00" fill="orange">no&#45;circular</text>
</g>
<!-- src/shared/offers/offNetwork&#45;&gt;src/server/cms/actions -->
<g id="edge112" class="edge">
<title>src/shared/offers/offNetwork&#45;&gt;src/server/cms/actions</title>
<path fill="none" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" d="M2100.9,-393.21C2100.9,-373.73 2100.9,-330 2100.9,-330 2100.9,-330 1515,-330 1515,-330 1515,-330 1515,-319.26 1515,-319.26"/>
<polygon fill="#000000" fill-opacity="0.200000" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" points="1517.1,-319.26 1515,-313.26 1512.9,-319.26 1517.1,-319.26"/>
</g>
<!-- src/lib/images -->
<g id="node60" class="node">
<title>src/lib/images</title>
<g id="a_node60"><a xlink:href="src/lib/images" xlink:title="images">
<polygon fill="#ffffcc" stroke="black" points="618,-175 565.97,-175 564,-173.03 564,-157.25 616.03,-157.25 618,-159.22 618,-175"/>
<polyline fill="none" stroke="black" points="616.03,-173.03 564,-173.03"/>
<polyline fill="none" stroke="black" points="616.03,-173.03 616.03,-157.25"/>
<polyline fill="none" stroke="black" points="616.03,-173.03 618,-175"/>
<text text-anchor="start" x="576" y="-162.45" font-family="Helvetica,sans-Serif" font-size="9.00">images</text>
</a>
</g>
</g>
<!-- src/shared/offers/offNetwork&#45;&gt;src/lib/images -->
<g id="edge111" class="edge">
<title>src/shared/offers/offNetwork&#45;&gt;src/lib/images</title>
<path fill="none" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" d="M2105.55,-393.13C2105.55,-356.17 2105.55,-221 2105.55,-221 2105.55,-221 612.67,-221 612.67,-221 612.67,-221 612.67,-184.19 612.67,-184.19"/>
<polygon fill="#000000" fill-opacity="0.200000" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" points="614.77,-184.19 612.67,-178.19 610.57,-184.19 614.77,-184.19"/>
</g>
<!-- src/app/partner/[partnerKey]/savings/@list -->
<g id="node30" class="node">
<title>src/app/partner/[partnerKey]/savings/@list</title>
<g id="a_node30"><a xlink:href="src/app/partner/[partnerKey]/savings/@list" xlink:title="@list">
<polygon fill="lime" stroke="black" stroke-width="2" points="606,-659.92 553.97,-659.92 552,-657.95 552,-642.17 604.03,-642.17 606,-644.15 606,-659.92"/>
<polyline fill="none" stroke="black" stroke-width="2" points="604.03,-657.95 552,-657.95"/>
<polyline fill="none" stroke="black" stroke-width="2" points="604.03,-657.95 604.03,-642.17"/>
<polyline fill="none" stroke="black" stroke-width="2" points="604.03,-657.95 606,-659.92"/>
<text text-anchor="start" x="568.88" y="-647.38" font-family="Helvetica,sans-Serif" font-size="9.00">@list</text>
</a>
</g>
</g>
<!-- src/app/partner/[partnerKey]/savings/@list&#45;&gt;src/lib/pending -->
<g id="edge30" class="edge">
<title>src/app/partner/[partnerKey]/savings/@list&#45;&gt;src/lib/pending</title>
<path fill="none" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" d="M558,-641.36C558,-573 558,-166 558,-166 558,-166 557.43,-166 557.43,-166"/>
<polygon fill="#000000" fill-opacity="0.200000" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" points="561.25,-163.9 555.25,-166 561.25,-168.1 561.25,-163.9"/>
</g>
<!-- src/app/partner/[partnerKey]/savings/@list&#45;&gt;src/experiences/savings/Results -->
<g id="edge32" class="edge">
<title>src/app/partner/[partnerKey]/savings/@list&#45;&gt;src/experiences/savings/Results</title>
<path fill="none" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" d="M578,-641.47C578,-631.09 578,-616 578,-616 578,-616 2550.9,-616 2550.9,-616 2550.9,-616 2550.9,-556 2550.9,-556 2550.9,-556 2535.11,-556 2535.11,-556"/>
<polygon fill="#000000" fill-opacity="0.200000" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" points="2535.11,-553.9 2529.11,-556 2535.11,-558.1 2535.11,-553.9"/>
</g>
<!-- src/app/partner/[partnerKey]/savings/@list&#45;&gt;src/app/partner/[partnerKey]/savings/_private -->
<g id="edge31" class="edge">
<title>src/app/partner/[partnerKey]/savings/@list&#45;&gt;src/app/partner/[partnerKey]/savings/_private</title>
<path fill="none" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" d="M606.77,-651C610.9,-651 613.81,-651 613.81,-651 613.81,-651 613.81,-573.67 613.81,-573.67"/>
<polygon fill="#000000" fill-opacity="0.200000" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" points="615.91,-573.67 613.81,-567.67 611.71,-573.67 615.91,-573.67"/>
</g>
<!-- src/app/partner/[partnerKey]/savings/@list&#45;&gt;src/experiences/savings/Results/SavingsOfferCard -->
<g id="edge29" class="edge">
<title>src/app/partner/[partnerKey]/savings/@list&#45;&gt;src/experiences/savings/Results/SavingsOfferCard</title>
<path fill="none" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" d="M592,-641.31C592,-635.41 592,-629 592,-629 592,-629 2606.6,-629 2606.6,-629 2606.6,-629 2606.6,-413.33 2606.6,-413.33"/>
<polygon fill="#000000" fill-opacity="0.200000" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" points="2608.7,-413.33 2606.6,-407.33 2604.5,-413.33 2608.7,-413.33"/>
</g>
<!-- src/server/engine&#45;&gt;src/lib/middleware -->
<g id="edge85" class="edge">
<title>src/server/engine&#45;&gt;src/lib/middleware</title>
<path fill="none" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" d="M1434.77,-301C1424.86,-301 1385.2,-301 1385.2,-301 1385.2,-301 1385.2,-233 1385.2,-233 1385.2,-233 485.3,-233 485.3,-233 485.3,-233 485.3,-165 485.3,-165 485.3,-165 471.91,-165 471.91,-165"/>
<polygon fill="#000000" fill-opacity="0.200000" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" points="471.91,-162.9 465.91,-165 471.91,-167.1 471.91,-162.9"/>
</g>
<!-- src/server/engine&#45;&gt;src/shared/offers/core/model -->
<g id="edge86" class="edge">
<title>src/server/engine&#45;&gt;src/shared/offers/core/model</title>
<g id="a_edge86"><a xlink:title="no&#45;circular">
<path fill="none" stroke="orange" stroke-width="2" d="M1439.1,-301C1447.2,-301 1476,-301 1476,-301 1476,-301 1476,-105 1476,-105 1476,-105 2222.59,-105 2222.59,-105"/>
<polygon fill="none" stroke="orange" stroke-width="2" points="2222.59,-107.1 2228.59,-105 2222.59,-102.9 2222.59,-107.1"/>
</a>
</g>
<text text-anchor="middle" x="1711.09" y="-106.2" font-family="Helvetica,sans-Serif" font-size="9.00" fill="orange">no&#45;circular</text>
</g>
<!-- src/server/engine&#45;&gt;src/server/engine/actions -->
<g id="edge83" class="edge">
<title>src/server/engine&#45;&gt;src/server/engine/actions</title>
<g id="a_edge83"><a xlink:title="no&#45;circular">
<path fill="none" stroke="orange" stroke-width="2" d="M1438.77,-300C1442.61,-300 1451.4,-300 1451.4,-300 1451.4,-300 1451.4,-184.33 1451.4,-184.33"/>
<polygon fill="none" stroke="orange" stroke-width="2" points="1453.5,-184.33 1451.4,-178.33 1449.3,-184.33 1453.5,-184.33"/>
</a>
</g>
<text text-anchor="middle" x="1429.65" y="-249.68" font-family="Helvetica,sans-Serif" font-size="9.00" fill="orange">no&#45;circular</text>
</g>
<!-- src/server/engine&#45;&gt;src/types -->
<g id="edge87" class="edge">
<title>src/server/engine&#45;&gt;src/types</title>
<path fill="none" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" d="M1436.1,-299.19C1436.1,-297.39 1436.1,-295 1436.1,-295 1436.1,-295 1390.6,-295 1390.6,-295 1390.6,-295 1390.6,-6 1390.6,-6 1390.6,-6 166,-6 166,-6 166,-6 166,-21.77 166,-21.77"/>
<polygon fill="#000000" fill-opacity="0.200000" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" points="163.9,-21.77 166,-27.77 168.1,-21.77 163.9,-21.77"/>
</g>
<!-- src/server/engine/client -->
<g id="node66" class="node">
<title>src/server/engine/client</title>
<g id="a_node66"><a xlink:href="src/server/engine/client" xlink:title="client">
<polygon fill="#ccccff" stroke="black" points="1450,-117.25 1397.97,-117.25 1396,-115.28 1396,-99.5 1448.03,-99.5 1450,-101.47 1450,-117.25"/>
<polyline fill="none" stroke="black" points="1448.03,-115.28 1396,-115.28"/>
<polyline fill="none" stroke="black" points="1448.03,-115.28 1448.03,-99.5"/>
<polyline fill="none" stroke="black" points="1448.03,-115.28 1450,-117.25"/>
<text text-anchor="start" x="1412.12" y="-104.7" font-family="Helvetica,sans-Serif" font-size="9.00">client</text>
</a>
</g>
</g>
<!-- src/server/engine&#45;&gt;src/server/engine/client -->
<g id="edge84" class="edge">
<title>src/server/engine&#45;&gt;src/server/engine/client</title>
<path fill="none" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" d="M1435.17,-300C1428.11,-300 1403,-300 1403,-300 1403,-300 1403,-126.62 1403,-126.62"/>
<polygon fill="#000000" fill-opacity="0.200000" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" points="1405.1,-126.62 1403,-120.62 1400.9,-126.62 1405.1,-126.62"/>
</g>
<!-- src/shared/offers/marketplace/savings&#45;&gt;src/server/engine -->
<g id="edge106" class="edge">
<title>src/shared/offers/marketplace/savings&#45;&gt;src/server/engine</title>
<path fill="none" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" d="M2130.02,-301C2127.03,-301 2121.71,-301 2121.71,-301 2121.71,-301 2121.71,-344 2121.71,-344 2121.71,-344 1437.6,-344 1437.6,-344 1437.6,-344 1437.6,-312.19 1437.6,-312.19"/>
<polygon fill="#000000" fill-opacity="0.200000" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" points="1439.7,-312.19 1437.6,-306.19 1435.5,-312.19 1439.7,-312.19"/>
</g>
<!-- src/shared/offers/core/registration -->
<g id="node54" class="node">
<title>src/shared/offers/core/registration</title>
<g id="a_node54"><a xlink:href="src/shared/offers/core/registration" xlink:title="registration">
<polygon fill="#ccffcc" stroke="black" points="2309.88,-175 2250.1,-175 2248.12,-173.03 2248.12,-157.25 2307.9,-157.25 2309.88,-159.22 2309.88,-175"/>
<polyline fill="none" stroke="black" points="2307.9,-173.03 2248.12,-173.03"/>
<polyline fill="none" stroke="black" points="2307.9,-173.03 2307.9,-157.25"/>
<polyline fill="none" stroke="black" points="2307.9,-173.03 2309.88,-175"/>
<text text-anchor="start" x="2256.12" y="-162.45" font-family="Helvetica,sans-Serif" font-size="9.00">registration</text>
</a>
</g>
</g>
<!-- src/shared/offers/marketplace/savings&#45;&gt;src/shared/offers/core/registration -->
<g id="edge104" class="edge">
<title>src/shared/offers/marketplace/savings&#45;&gt;src/shared/offers/core/registration</title>
<path fill="none" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" d="M2132,-302.95C2132,-306.92 2132,-316 2132,-316 2132,-316 2268.71,-316 2268.71,-316 2268.71,-316 2268.71,-184.05 2268.71,-184.05"/>
<polygon fill="#000000" fill-opacity="0.200000" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" points="2270.81,-184.05 2268.71,-178.05 2266.61,-184.05 2270.81,-184.05"/>
</g>
<!-- src/shared/offers/marketplace/savings/offerTypes -->
<g id="node71" class="node">
<title>src/shared/offers/marketplace/savings/offerTypes</title>
<g id="a_node71"><a xlink:href="src/shared/offers/marketplace/savings/offerTypes" xlink:title="offerTypes">
<polygon fill="#ccffcc" stroke="black" points="2188.38,-175 2131.6,-175 2129.62,-173.03 2129.62,-157.25 2186.4,-157.25 2188.38,-159.22 2188.38,-175"/>
<polyline fill="none" stroke="black" points="2186.4,-173.03 2129.62,-173.03"/>
<polyline fill="none" stroke="black" points="2186.4,-173.03 2186.4,-157.25"/>
<polyline fill="none" stroke="black" points="2186.4,-173.03 2188.38,-175"/>
<text text-anchor="start" x="2137.62" y="-162.45" font-family="Helvetica,sans-Serif" font-size="9.00">offerTypes</text>
</a>
</g>
</g>
<!-- src/shared/offers/marketplace/savings&#45;&gt;src/shared/offers/marketplace/savings/offerTypes -->
<g id="edge105" class="edge">
<title>src/shared/offers/marketplace/savings&#45;&gt;src/shared/offers/marketplace/savings/offerTypes</title>
<path fill="none" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" d="M2132,-299.22C2132,-299.22 2132,-184.36 2132,-184.36"/>
<polygon fill="#000000" fill-opacity="0.200000" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" points="2134.1,-184.36 2132,-178.36 2129.9,-184.36 2134.1,-184.36"/>
</g>
<!-- src/shared/session/state&#45;&gt;src/lib/middleware -->
<g id="edge113" class="edge">
<title>src/shared/session/state&#45;&gt;src/lib/middleware</title>
<path fill="none" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" d="M1671.76,-395C1478.33,-395 320,-395 320,-395 320,-395 320,-166 320,-166 320,-166 450.01,-166 450.01,-166"/>
<polygon fill="#000000" fill-opacity="0.200000" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" points="450.01,-168.1 456.01,-166 450.01,-163.9 450.01,-168.1"/>
</g>
<!-- src/server/engine/actions&#45;&gt;src/lib/types -->
<g id="edge91" class="edge">
<title>src/server/engine/actions&#45;&gt;src/lib/types</title>
<path fill="none" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" d="M1457,-156.93C1457,-125.76 1457,-26 1457,-26 1457,-26 627.35,-26 627.35,-26"/>
<polygon fill="#000000" fill-opacity="0.200000" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" points="627.35,-23.9 621.35,-26 627.35,-28.1 627.35,-23.9"/>
</g>
<!-- src/server/engine/actions&#45;&gt;src/server/engine -->
<g id="edge89" class="edge">
<title>src/server/engine/actions&#45;&gt;src/server/engine</title>
<g id="a_edge89"><a xlink:title="no&#45;circular">
<path fill="none" stroke="orange" stroke-width="2" d="M1437,-175.4C1437,-175.4 1437,-290.12 1437,-290.12"/>
<polygon fill="none" stroke="orange" stroke-width="2" points="1434.9,-290.12 1437,-296.12 1439.1,-290.12 1434.9,-290.12"/>
</a>
</g>
<text text-anchor="middle" x="1415.25" y="-233.96" font-family="Helvetica,sans-Serif" font-size="9.00" fill="orange">no&#45;circular</text>
</g>
<!-- src/server/engine/actions&#45;&gt;src/lib/promiseHelpers -->
<g id="edge90" class="edge">
<title>src/server/engine/actions&#45;&gt;src/lib/promiseHelpers</title>
<path fill="none" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" d="M1423.33,-156.91C1423.33,-148.38 1423.33,-137 1423.33,-137 1423.33,-137 535.02,-137 535.02,-137 535.02,-137 535.02,-51.12 535.02,-51.12"/>
<polygon fill="#000000" fill-opacity="0.200000" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" points="537.12,-51.12 535.02,-45.12 532.92,-51.12 537.12,-51.12"/>
</g>
<!-- src/server/engine/actions&#45;&gt;src/server/engine/client -->
<g id="edge88" class="edge">
<title>src/server/engine/actions&#45;&gt;src/server/engine/client</title>
<path fill="none" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" d="M1436.67,-156.85C1436.67,-156.85 1436.67,-126.44 1436.67,-126.44"/>
<polygon fill="#000000" fill-opacity="0.200000" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" points="1438.77,-126.44 1436.67,-120.44 1434.57,-126.44 1438.77,-126.44"/>
</g>
<!-- src/shared/offers/core/sources -->
<g id="node70" class="node">
<title>src/shared/offers/core/sources</title>
<g id="a_node70"><a xlink:href="src/shared/offers/core/sources" xlink:title="sources">
<polygon fill="#ccffcc" stroke="black" points="2376,-175 2323.97,-175 2322,-173.03 2322,-157.25 2374.03,-157.25 2376,-159.22 2376,-175"/>
<polyline fill="none" stroke="black" points="2374.03,-173.03 2322,-173.03"/>
<polyline fill="none" stroke="black" points="2374.03,-173.03 2374.03,-157.25"/>
<polyline fill="none" stroke="black" points="2374.03,-173.03 2376,-175"/>
<text text-anchor="start" x="2332.88" y="-162.45" font-family="Helvetica,sans-Serif" font-size="9.00">sources</text>
</a>
</g>
</g>
<!-- src/shared/offers&#45;&gt;src/shared/offers/core/sources -->
<g id="edge99" class="edge">
<title>src/shared/offers&#45;&gt;src/shared/offers/core/sources</title>
<path fill="none" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" d="M2170,-404.26C2170,-405.54 2170,-407 2170,-407 2170,-407 2358,-407 2358,-407 2358,-407 2358,-184.27 2358,-184.27"/>
<polygon fill="#000000" fill-opacity="0.200000" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" points="2360.1,-184.27 2358,-178.27 2355.9,-184.27 2360.1,-184.27"/>
</g>
<!-- src/shared/offers&#45;&gt;src/shared/offers/marketplace/savings/offerTypes -->
<g id="edge100" class="edge">
<title>src/shared/offers&#45;&gt;src/shared/offers/marketplace/savings/offerTypes</title>
<path fill="none" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" d="M2172.22,-402C2181.41,-402 2216,-402 2216,-402 2216,-402 2216,-172 2216,-172 2216,-172 2197.84,-172 2197.84,-172"/>
<polygon fill="#000000" fill-opacity="0.200000" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" points="2197.84,-169.9 2191.84,-172 2197.84,-174.1 2197.84,-169.9"/>
</g>
<!-- src/shared/offers/marketplace/savings/parsers -->
<g id="node72" class="node">
<title>src/shared/offers/marketplace/savings/parsers</title>
<g id="a_node72"><a xlink:href="src/shared/offers/marketplace/savings/parsers" xlink:title="parsers">
<polygon fill="#ccffcc" stroke="black" points="2200,-310 2147.97,-310 2146,-308.03 2146,-292.25 2198.03,-292.25 2200,-294.22 2200,-310"/>
<polyline fill="none" stroke="black" points="2198.03,-308.03 2146,-308.03"/>
<polyline fill="none" stroke="black" points="2198.03,-308.03 2198.03,-292.25"/>
<polyline fill="none" stroke="black" points="2198.03,-308.03 2200,-310"/>
<text text-anchor="start" x="2157.62" y="-297.45" font-family="Helvetica,sans-Serif" font-size="9.00">parsers</text>
</a>
</g>
</g>
<!-- src/shared/offers&#45;&gt;src/shared/offers/marketplace/savings/parsers -->
<g id="edge101" class="edge">
<title>src/shared/offers&#45;&gt;src/shared/offers/marketplace/savings/parsers</title>
<path fill="none" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" d="M2170,-400.26C2170,-400.26 2170,-319.3 2170,-319.3"/>
<polygon fill="#000000" fill-opacity="0.200000" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" points="2172.1,-319.3 2170,-313.3 2167.9,-319.3 2172.1,-319.3"/>
</g>
<!-- src/components/content/AdvertiserDisclosure -->
<g id="node38" class="node">
<title>src/components/content/AdvertiserDisclosure</title>
<g id="a_node38"><a xlink:href="src/components/content/AdvertiserDisclosure" xlink:title="AdvertiserDisclosure">
<polygon fill="#ffffcc" stroke="black" points="918.38,-175 819.6,-175 817.62,-173.03 817.62,-157.25 916.4,-157.25 918.38,-159.22 918.38,-175"/>
<polyline fill="none" stroke="black" points="916.4,-173.03 817.62,-173.03"/>
<polyline fill="none" stroke="black" points="916.4,-173.03 916.4,-157.25"/>
<polyline fill="none" stroke="black" points="916.4,-173.03 918.38,-175"/>
<text text-anchor="start" x="825.62" y="-162.45" font-family="Helvetica,sans-Serif" font-size="9.00">AdvertiserDisclosure</text>
</a>
</g>
</g>
<!-- src/components/content&#45;&gt;src/components/content/AdvertiserDisclosure -->
<g id="edge45" class="edge">
<title>src/components/content&#45;&gt;src/components/content/AdvertiserDisclosure</title>
<path fill="none" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" d="M835,-299.22C835,-299.22 835,-184.36 835,-184.36"/>
<polygon fill="#000000" fill-opacity="0.200000" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" points="837.1,-184.36 835,-178.36 832.9,-184.36 837.1,-184.36"/>
</g>
<!-- src/components/content/icons&#45;&gt;src/components/patterns/icons/svg&#45;tools/generator -->
<g id="edge46" class="edge">
<title>src/components/content/icons&#45;&gt;src/components/patterns/icons/svg&#45;tools/generator</title>
<path fill="none" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" d="M918.49,-301C968.53,-301 1069.42,-301 1069.42,-301 1069.42,-301 1069.42,-184.4 1069.42,-184.4"/>
<polygon fill="#000000" fill-opacity="0.200000" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" points="1071.52,-184.4 1069.42,-178.4 1067.32,-184.4 1071.52,-184.4"/>
</g>
<!-- src/components/elements -->
<!-- src/components/patterns -->
<!-- src/components/patterns/icons -->
<!-- src/components/patterns/icons/svg&#45;tools -->
<!-- src/experiences -->
<!-- src/experiences/savings -->
<!-- src/ui/navigation/Link&#45;&gt;src/ui/typography -->
<g id="edge115" class="edge">
<title>src/ui/navigation/Link&#45;&gt;src/ui/typography</title>
<path fill="none" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" d="M1228,-291.85C1228,-291.85 1228,-184.47 1228,-184.47"/>
<polygon fill="#000000" fill-opacity="0.200000" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" points="1230.1,-184.47 1228,-178.47 1225.9,-184.47 1230.1,-184.47"/>
</g>
<!-- src/experiences/savings/Results/NoOffers&#45;&gt;src/ui/primitives -->
<g id="edge64" class="edge">
<title>src/experiences/savings/Results/NoOffers&#45;&gt;src/ui/primitives</title>
<path fill="none" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" d="M2540,-393.43C2540,-378.71 2540,-351 2540,-351 2540,-351 1317.17,-351 1317.17,-351 1317.17,-351 1317.17,-319.27 1317.17,-319.27"/>
<polygon fill="#000000" fill-opacity="0.200000" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" points="1319.27,-319.27 1317.17,-313.27 1315.07,-319.27 1319.27,-319.27"/>
</g>
<!-- src/experiences/savings/Results/NoOffers&#45;&gt;src/ui/typography -->
<g id="edge65" class="edge">
<title>src/experiences/savings/Results/NoOffers&#45;&gt;src/ui/typography</title>
<path fill="none" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" d="M2558,-393.08C2558,-351.66 2558,-186 2558,-186 2558,-186 1246,-186 1246,-186 1246,-186 1246,-184.13 1246,-184.13"/>
<polygon fill="#000000" fill-opacity="0.200000" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" points="1248.1,-184.13 1246,-178.13 1243.9,-184.13 1248.1,-184.13"/>
</g>
<!-- src/experiences/savings/Results/NoOffers&#45;&gt;src/shared/offers/core/registration -->
<g id="edge63" class="edge">
<title>src/experiences/savings/Results/NoOffers&#45;&gt;src/shared/offers/core/registration</title>
<path fill="none" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" d="M2521.7,-397C2455.02,-397 2289.29,-397 2289.29,-397 2289.29,-397 2289.29,-184.46 2289.29,-184.46"/>
<polygon fill="#000000" fill-opacity="0.200000" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" points="2291.39,-184.46 2289.29,-178.46 2287.19,-184.46 2291.39,-184.46"/>
</g>
<!-- src/shared/offers/core/registration&#45;&gt;src/shared/offers/core/model -->
<g id="edge103" class="edge">
<title>src/shared/offers/core/registration&#45;&gt;src/shared/offers/core/model</title>
<path fill="none" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" d="M2267.06,-156.85C2267.06,-156.85 2267.06,-126.44 2267.06,-126.44"/>
<polygon fill="#000000" fill-opacity="0.200000" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" points="2269.16,-126.44 2267.06,-120.44 2264.96,-126.44 2269.16,-126.44"/>
</g>
<!-- src/experiences/savings/Results/SavingsOfferCard/Trivia&#45;&gt;src/experiences/savings/Results/SavingsOfferCard -->
<g id="edge70" class="edge">
<title>src/experiences/savings/Results/SavingsOfferCard/Trivia&#45;&gt;src/experiences/savings/Results/SavingsOfferCard</title>
<path fill="none" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" d="M2598.1,-310.34C2598.1,-335.07 2598.1,-401 2598.1,-401 2598.1,-401 2598.71,-401 2598.71,-401"/>
<polygon fill="#000000" fill-opacity="0.200000" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" points="2595.17,-403.1 2601.17,-401 2595.17,-398.9 2595.17,-403.1"/>
</g>
<!-- src/experiences/savings/Results/SavingsOfferCard/Trivia&#45;&gt;src/shared/offers/core/model -->
<g id="edge71" class="edge">
<title>src/experiences/savings/Results/SavingsOfferCard/Trivia&#45;&gt;src/shared/offers/core/model</title>
<path fill="none" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" d="M2619,-291.83C2619,-252.66 2619,-103 2619,-103 2619,-103 2295.35,-103 2295.35,-103"/>
<polygon fill="#000000" fill-opacity="0.200000" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" points="2295.35,-100.9 2289.35,-103 2295.35,-105.1 2295.35,-100.9"/>
</g>
<!-- src/lib/system&#45;&gt;src/lib -->
<g id="edge80" class="edge">
<title>src/lib/system&#45;&gt;src/lib</title>
<g id="a_edge80"><a xlink:title="no&#45;circular">
<path fill="none" stroke="orange" stroke-width="2" d="M422,-42C422,-47.32 422,-53 422,-53 422,-53 518.41,-53 518.41,-53 518.41,-53 518.41,-107 518.41,-107 518.41,-107 510.7,-107 510.7,-107"/>
<polygon fill="none" stroke="orange" stroke-width="2" points="510.7,-104.9 504.7,-107 510.7,-109.1 510.7,-104.9"/>
</a>
</g>
<text text-anchor="middle" x="473.81" y="-54.2" font-family="Helvetica,sans-Serif" font-size="9.00" fill="orange">no&#45;circular</text>
</g>
<!-- src/reshaped -->
<!-- src/server -->
<!-- src/server/engine/client&#45;&gt;src/lib/middleware/middleware -->
<g id="edge92" class="edge">
<title>src/server/engine/client&#45;&gt;src/lib/middleware/middleware</title>
<path fill="none" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" d="M1406.5,-117.47C1406.5,-127.73 1406.5,-143 1406.5,-143 1406.5,-143 379.2,-143 379.2,-143 379.2,-143 379.2,-126.47 379.2,-126.47"/>
<polygon fill="#000000" fill-opacity="0.200000" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" points="381.3,-126.47 379.2,-120.47 377.1,-126.47 381.3,-126.47"/>
</g>
<!-- src/services -->
<!-- src/services/AnalyticsLite/Ads&#45;&gt;src/shared/offers/core/model -->
<g id="edge95" class="edge">
<title>src/services/AnalyticsLite/Ads&#45;&gt;src/shared/offers/core/model</title>
<path fill="none" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" d="M198,-156.93C198,-153.31 198,-150 198,-150 198,-150 2238.26,-150 2238.26,-150 2238.26,-150 2238.26,-126.61 2238.26,-126.61"/>
<polygon fill="#000000" fill-opacity="0.200000" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" points="2240.37,-126.61 2238.26,-120.61 2236.17,-126.61 2240.37,-126.61"/>
</g>
<!-- src/shared -->
<!-- src/shared/offers/marketplace/savings/offerTypes&#45;&gt;src/shared/offers/core/model -->
<g id="edge107" class="edge">
<title>src/shared/offers/marketplace/savings/offerTypes&#45;&gt;src/shared/offers/core/model</title>
<path fill="none" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" d="M2188.64,-160C2209.61,-160 2234,-160 2234,-160 2234,-160 2234,-126.37 2234,-126.37"/>
<polygon fill="#000000" fill-opacity="0.200000" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" points="2236.1,-126.37 2234,-120.37 2231.9,-126.37 2236.1,-126.37"/>
</g>
<!-- src/shared/offers/marketplace/savings/parsers&#45;&gt;src/shared/offers/core/model -->
<g id="edge108" class="edge">
<title>src/shared/offers/marketplace/savings/parsers&#45;&gt;src/shared/offers/core/model</title>
<path fill="none" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" d="M2192.25,-291.95C2192.25,-253.98 2192.25,-111 2192.25,-111 2192.25,-111 2222.85,-111 2222.85,-111"/>
<polygon fill="#000000" fill-opacity="0.200000" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" points="2222.85,-113.1 2228.85,-111 2222.85,-108.9 2222.85,-113.1"/>
</g>
<!-- src/shared/offers/marketplace/savings/parsers&#45;&gt;src/shared/offers/core/registration -->
<g id="edge109" class="edge">
<title>src/shared/offers/marketplace/savings/parsers&#45;&gt;src/shared/offers/core/registration</title>
<path fill="none" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" d="M2196.12,-292.11C2196.12,-262.49 2196.12,-170 2196.12,-170 2196.12,-170 2238.67,-170 2238.67,-170"/>
<polygon fill="#000000" fill-opacity="0.200000" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" points="2238.67,-172.1 2244.67,-170 2238.67,-167.9 2238.67,-172.1"/>
</g>
<!-- src/shared/offers/marketplace/savings/parsers&#45;&gt;src/shared/offers/core/sources -->
<g id="edge110" class="edge">
<title>src/shared/offers/marketplace/savings/parsers&#45;&gt;src/shared/offers/core/sources</title>
<path fill="none" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" d="M2200.2,-301C2247.52,-301 2340,-301 2340,-301 2340,-301 2340,-184.4 2340,-184.4"/>
<polygon fill="#000000" fill-opacity="0.200000" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" points="2342.1,-184.4 2340,-178.4 2337.9,-184.4 2342.1,-184.4"/>
</g>
<!-- src/shared/offers/core -->
<!-- src/shared/offers/marketplace -->
<!-- src/shared/session -->
<!-- src/shared/ui -->
<!-- src/shared/ui/layout -->
<!-- src/shared/ui/layout/CustomHead -->
<!-- src/ui -->
<!-- src/ui/navigation -->
</g>
</svg>
<script>var gMode = new Mode();
var title2ElementMap = (function makeElementMap() {
/** @type {NodeListOf<SVGGElement>} */
var nodes = document.querySelectorAll(".node");
/** @type {NodeListOf<SVGGElement>} */
var edges = document.querySelectorAll(".edge");
return new Title2ElementMap(edges, nodes);
})();
function getHoverHandler(pTitle2ElementMap) {
/** @type {string} */
var currentHighlightedTitle;
/** @param {MouseEvent} pMouseEvent */
return function hoverHighlightHandler(pMouseEvent) {
var closestNodeOrEdge = pMouseEvent.target.closest(".edge, .node");
var closestTitleText = getTitleText(closestNodeOrEdge);
if (
!(currentHighlightedTitle === closestTitleText) &&
gMode.get() === gMode.HOVER
) {
resetNodesAndEdges();
addHighlight(closestNodeOrEdge);
pTitle2ElementMap.get(closestTitleText).forEach(addHighlight);
currentHighlightedTitle = closestTitleText;
}
};
}
function getSelectHandler(pTitle2ElementMap) {
/** @type {string} */
var currentHighlightedTitle;
/** @param {MouseEvent} pMouseEvent */
return function selectHighlightHandler(pMouseEvent) {
pMouseEvent.preventDefault();
var closestNodeOrEdge = pMouseEvent.target.closest(".edge, .node");
var closestTitleText = getTitleText(closestNodeOrEdge);
if (!!closestNodeOrEdge) {
gMode.setToSelect();
} else {
gMode.setToHover();
}
if (!(currentHighlightedTitle === closestTitleText)) {
resetNodesAndEdges();
addHighlight(closestNodeOrEdge);
pTitle2ElementMap.get(closestTitleText).forEach(addHighlight);
currentHighlightedTitle = closestTitleText;
}
};
}
function Mode() {
var HOVER = 1;
var SELECT = 2;
function setToHover() {
this._mode = HOVER;
}
function setToSelect() {
this._mode = SELECT;
}
function get() {
return this._mode || HOVER;
}
return {
HOVER: HOVER,
SELECT: SELECT,
setToHover: setToHover,
setToSelect: setToSelect,
get: get,
};
}
/**
*
* @param {SVGGelement[]} pEdges
* @param {SVGGElement[]} pNodes
* @return {{get: (pTitleText:string) => SVGGElement[]}}
*/
function Title2ElementMap(pEdges, pNodes) {
/* {{[key: string]: SVGGElement[]}} */
var elementMap = buildMap(pEdges, pNodes);
/**
* @param {NodeListOf<SVGGElement>} pEdges
* @param {NodeListOf<SVGGElement>} pNodes
* @return {{[key: string]: SVGGElement[]}}
*/
function buildMap(pEdges, pNodes) {
var title2NodeMap = buildTitle2NodeMap(pNodes);
return nodeListToArray(pEdges).reduce(addEdgeToMap(title2NodeMap), {});
}
/**
* @param {NodeListOf<SVGGElement>} pNodes
* @return {{[key: string]: SVGGElement}}
*/
function buildTitle2NodeMap(pNodes) {
return nodeListToArray(pNodes).reduce(addNodeToMap, {});
}
function addNodeToMap(pMap, pNode) {
var titleText = getTitleText(pNode);
if (titleText) {
pMap[titleText] = pNode;
}
return pMap;
}
function addEdgeToMap(pNodeMap) {
return function (pEdgeMap, pEdge) {
/** @type {string} */
var titleText = getTitleText(pEdge);
if (titleText) {
var edge = pryEdgeFromTitle(titleText);
pEdgeMap[titleText] = [pNodeMap[edge.from], pNodeMap[edge.to]];
(pEdgeMap[edge.from] || (pEdgeMap[edge.from] = [])).push(pEdge);
(pEdgeMap[edge.to] || (pEdgeMap[edge.to] = [])).push(pEdge);
}
return pEdgeMap;
};
}
/**
*
* @param {string} pString
* @return {{from?: string; to?:string;}}
*/
function pryEdgeFromTitle(pString) {
var nodeNames = pString.split(/\s*->\s*/);
return {
from: nodeNames.shift(),
to: nodeNames.shift(),
};
}
/**
*
* @param {string} pTitleText
* @return {SVGGElement[]}
*/
function get(pTitleText) {
return (pTitleText && elementMap[pTitleText]) || [];
}
return {
get: get,
};
}
/**
* @param {SVGGElement} pGElement
* @return {string?}
*/
function getTitleText(pGElement) {
/** @type {SVGTitleElement} */
var title = pGElement && pGElement.querySelector("title");
/** @type {string} */
var titleText = title && title.textContent;
if (titleText) {
titleText = titleText.trim();
}
return titleText;
}
/**
* @param {NodeListOf<Element>} pNodeList
* @return {Element[]}
*/
function nodeListToArray(pNodeList) {
var lReturnValue = [];
pNodeList.forEach(function (pElement) {
lReturnValue.push(pElement);
});
return lReturnValue;
}
function resetNodesAndEdges() {
nodeListToArray(document.querySelectorAll(".current")).forEach(
removeHighlight
);
}
/**
* @param {SVGGElement} pGElement
*/
function removeHighlight(pGElement) {
if (pGElement && pGElement.classList) {
pGElement.classList.remove("current");
}
}
/**
* @param {SVGGElement} pGroup
*/
function addHighlight(pGroup) {
if (pGroup && pGroup.classList) {
pGroup.classList.add("current");
}
}
var hints = {
HIDDEN: 1,
SHOWN: 2,
state: this.HIDDEN,
show: function () {
document.getElementById("hints").removeAttribute("style");
hints.state = hints.SHOWN;
},
hide: function () {
document.getElementById("hints").style = "display:none";
hints.state = hints.HIDDEN;
},
toggle: function () {
if ((hints.state || hints.HIDDEN) === hints.HIDDEN) {
hints.show();
} else {
hints.hide();
}
},
};
/** @param {KeyboardEvent} pKeyboardEvent */
function keyboardEventHandler(pKeyboardEvent) {
if (pKeyboardEvent.key === "Escape") {
resetNodesAndEdges();
gMode.setToHover();
hints.hide();
}
if (pKeyboardEvent.key === "F1") {
pKeyboardEvent.preventDefault();
hints.toggle();
}
}
document.addEventListener("contextmenu", getSelectHandler(title2ElementMap));
document.addEventListener("mouseover", getHoverHandler(title2ElementMap));
document.addEventListener("keydown", keyboardEventHandler);
document.getElementById("close-hints").addEventListener("click", hints.hide);
document.getElementById("button_help").addEventListener("click", hints.toggle);
</script> </body>
</html>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment